static int brl_readCommand (BrailleDisplay *brl, KeyTableCommandContext context) { ResponsePacket packet; int size; while ((size = getPacket(&packet))) { switch (packet.data.code) { case BN_RSP_ROUTE: enqueueKey(BN_SET_RoutingKeys, packet.data.values.routingKey); break; case BN_RSP_DISPLAY: doVisualDisplay(); break; default: { unsigned char set = BN_SET_NavigationKeys; unsigned char keys = packet.data.values.dotKeys & 0X3F; unsigned char base = BN_KEY_Dot1; unsigned char modifier = 0; switch (packet.data.code) { case BN_RSP_CHARACTER: if (keys) break; case BN_RSP_SPACE: modifier = BN_KEY_Space; break; case BN_RSP_BACKSPACE: modifier = BN_KEY_Backspace; break; case BN_RSP_ENTER: modifier = BN_KEY_Enter; break; case BN_RSP_THUMB: keys = packet.data.values.thumbKeys & 0X0F; base = BN_KEY_Previous; break; default: logUnexpectedPacket(packet.bytes, size); continue; } if (modifier) enqueueKeyEvent(set, modifier, 1); enqueueKeys(keys, set, base); if (modifier) enqueueKeyEvent(set, modifier, 0); break; } } } return (errno == EAGAIN)? EOF: BRL_CMD_RESTARTBRL; }
static void convertAndEnqueueScancode(SDL_Scancode code, int isRelease) { int ps2Code; int releaseCode = isRelease ? 0x80 : 0; if (code <= SDL_SCANCODE_KP_PERIOD) ps2Code = kSdlToPs2Table[code]; else { switch (code) { case SDL_SCANCODE_LCTRL: ps2Code = 0x1d; break; case SDL_SCANCODE_LSHIFT: ps2Code = 0x2a; break; case SDL_SCANCODE_LALT: ps2Code = 0x38; break; case SDL_SCANCODE_LGUI: ps2Code = 0xe05b; break; case SDL_SCANCODE_RCTRL: ps2Code = 0xe01d; break; case SDL_SCANCODE_RSHIFT: ps2Code = 0x36; break; case SDL_SCANCODE_RALT: ps2Code = 0xe038; break; case SDL_SCANCODE_RGUI: ps2Code = 0xe05c; break; default: return; } } if (ps2Code > 0xffff) { enqueueKey(ps2Code >> 16); enqueueKey((ps2Code >> 8) & 0xff); enqueueKey((ps2Code & 0xff) | releaseCode); }
static int interpretKeyCode_MobilLine (BrailleDisplay *brl, unsigned char code) { if ((code >= brl->data->model->firstRoutingKey) && (code < (brl->data->model->firstRoutingKey + brl->textColumns))) { enqueueKey(brl, HD_GRP_RoutingKeys, (code - brl->data->model->firstRoutingKey)); return 1; } { unsigned char group = (code & 0XF0) >> 4; if (group <= 2) { unsigned char shift = group * 4; KeyNumberSet pressedKeys = (brl->data->pressedKeys & ~(0XF << shift)) | ((code & 0XF) << shift); enqueueUpdatedKeys(brl, pressedKeys, &brl->data->pressedKeys, HD_GRP_NavigationKeys, 0); return 1; } } return 0; }
static int brl_readCommand (BrailleDisplay *brl, KeyTableCommandContext context) { unsigned char packet[MAXIMUM_RESPONSE_SIZE]; size_t size; while ((size = readPacket(brl, packet, sizeof(packet)))) { switch (packet[0]) { case 0XFD: switch (packet[1]) { case 0X2F: continue; default: break; } break; case 0XFC: { unsigned int key = packet[1]; if ((key >= NP_KEY_ROUTING_MIN) && (key <= NP_KEY_ROUTING_MAX)) { enqueueKey(brl, NP_GRP_RoutingKeys, (key - NP_KEY_ROUTING_MIN)); continue; } else { int press = !!(key & NP_KEY_NAVIGATION_PRESS); if (press) key &= ~NP_KEY_NAVIGATION_PRESS; enqueueKeyEvent(brl, NP_GRP_NavigationKeys, key, press); continue; } break; } } logUnexpectedPacket(packet, size); } return (errno == EAGAIN)? EOF: BRL_CMD_RESTARTBRL; }