Пример #1
0
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;
}
Пример #2
0
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);
	}
Пример #3
0
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;
}
Пример #4
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;
}