From patchwork Sun Aug 30 14:21:52 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Samuel Thibault X-Patchwork-Id: 512230 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id B9CA0140134 for ; Mon, 31 Aug 2015 00:22:23 +1000 (AEST) Received: from localhost ([::1]:58789 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZW3Uz-0007l3-Ib for incoming@patchwork.ozlabs.org; Sun, 30 Aug 2015 10:22:21 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37651) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZW3Ua-0007MB-J2 for qemu-devel@nongnu.org; Sun, 30 Aug 2015 10:21:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZW3UX-0004E4-Eq for qemu-devel@nongnu.org; Sun, 30 Aug 2015 10:21:56 -0400 Received: from sonata.ens-lyon.org ([140.77.166.138]:34615) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZW3UX-0004E0-7i for qemu-devel@nongnu.org; Sun, 30 Aug 2015 10:21:53 -0400 Received: from localhost (localhost [127.0.0.1]) by sonata.ens-lyon.org (Postfix) with ESMTP id A7AD0200C0 for ; Sun, 30 Aug 2015 16:21:52 +0200 (CEST) Received: from sonata.ens-lyon.org ([127.0.0.1]) by localhost (sonata.ens-lyon.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id gkIssHjjtWTQ for ; Sun, 30 Aug 2015 16:21:52 +0200 (CEST) Received: from var.ipv6 (ABordeaux-652-1-130-128.w2-6.abo.wanadoo.fr [2.6.113.128]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by sonata.ens-lyon.org (Postfix) with ESMTPSA id 8BD1C200BD for ; Sun, 30 Aug 2015 16:21:52 +0200 (CEST) Received: from samy by var.ipv6 with local (Exim 4.86) (envelope-from ) id 1ZW3UW-0003dV-Fi for qemu-devel@nongnu.org; Sun, 30 Aug 2015 16:21:52 +0200 Date: Sun, 30 Aug 2015 16:21:52 +0200 From: Samuel Thibault To: qemu-devel@nongnu.org Message-ID: <20150830142152.GB13186@var.home> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 140.77.166.138 Subject: [Qemu-devel] [PATCH] baum: Add support for typing ascii X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This adds support for typing ascii through the Baum Braille driver, by translating it to braille with the NABCC table. Signed-off-by: Samuel Thibault diff --git a/backends/baum.c b/backends/baum.c index a69aaff..d486e68 100644 --- a/backends/baum.c +++ b/backends/baum.c @@ -1,7 +1,7 @@ /* * QEMU Baum Braille Device * - * Copyright (c) 2008, 2015 Samuel Thibault + * Copyright (c) 2008, 2015 Samuel Thibault * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -474,6 +474,13 @@ static void baum_send_key(BaumDriverState *baum, uint8_t type, uint8_t value) { baum_write_packet(baum, packet, sizeof(packet)); } +/* Send the 2-byte key code to the other end */ +static void baum_send_key2(BaumDriverState *baum, uint8_t type, uint16_t value) { + uint8_t packet[] = { type, value & 0xFF, value >> 8 }; + DPRINTF("writing key %x %x\n", type, value); + baum_write_packet(baum, packet, sizeof(packet)); +} + /* We got some data on the BrlAPI socket */ static void baum_chr_read(void *opaque) { @@ -492,6 +499,14 @@ static void baum_chr_read(void *opaque) baum_send_key(baum, BAUM_RSP_RoutingKey, (code & BRLAPI_KEY_CMD_ARG_MASK)+1); baum_send_key(baum, BAUM_RSP_RoutingKey, 0); break; + case BRLAPI_KEY_CMD_PASSDOTS: + { + unsigned char dots = code & BRLAPI_KEY_CMD_ARG_MASK; + fprintf(stderr,"passdots %x\n", dots); + baum_send_key2(baum, BAUM_RSP_EntryKeys, dots << 8); + baum_send_key2(baum, BAUM_RSP_EntryKeys, 0); + break; + } case 0: switch (code & BRLAPI_KEY_CMD_ARG_MASK) { case BRLAPI_KEY_CMD_FWINLT: @@ -538,7 +553,27 @@ static void baum_chr_read(void *opaque) } break; case BRLAPI_KEY_TYPE_SYM: - break; + { + unsigned modifiers = ((code & BRLAPI_KEY_FLAGS_MASK) >> BRLAPI_KEY_FLAGS_SHIFT) & 0xFF; + unsigned keysym = code & BRLAPI_KEY_CODE_MASK; + unsigned dots; + if (modifiers & ~1) + /* Unsupported */ + break; + if (keysym <= ' ' || keysym > '~') + /* Unsupported */ + break; + DPRINTF("keysym %x\n", keysym); + for (dots = 1; dots <= 0xFF; dots++) + if (nabcc_translation[dots] == keysym) + { + DPRINTF("dots %x\n", dots); + baum_send_key2(baum, BAUM_RSP_EntryKeys, dots << 8); + baum_send_key2(baum, BAUM_RSP_EntryKeys, 0); + break; + } + break; + } } } if (ret == -1 && (brlapi_errno != BRLAPI_ERROR_LIBCERR || errno != EINTR)) {