Exemple #1
0
WindowsMouse::WindowsMouse(DeviceAPI api, int hWheel, wchar_t *displayName, wchar_t *instanceID, wchar_t *deviceID)
    : Device(api, MOUSE, displayName, instanceID, deviceID)
{
    int i;
    for (i = 0; i < 5; i++) {
        AddPhysicalControl(PSHBTN, i, i);
    }

    for (i = 0; i < 3 + hWheel; i++) {
        AddPhysicalControl(RELAXIS, i + 5, i + 5);
    }
}
Exemple #2
0
WindowsKeyboard::WindowsKeyboard(DeviceAPI api, wchar_t *displayName, wchar_t *instanceID, wchar_t *deviceID) :
Device(api, KEYBOARD, displayName, instanceID, deviceID) {
	for (int i=0; i<256; i++) {
		AddPhysicalControl(PSHBTN, i, i);
	}
}
Exemple #3
0
JoyEvdev::JoyEvdev(int fd, bool ds3, const wchar_t *id)
    : Device(LNX_JOY, OTHER, id, id)
    , m_fd(fd)
{
    // XXX LNX_JOY => DS3 or ???

    m_abs.clear();
    m_btn.clear();
    m_rel.clear();
    int last = 0;

    uint8_t abs_bitmap[nUcharsForNBits(ABS_CNT)] = {0};
    uint8_t btn_bitmap[nUcharsForNBits(KEY_CNT)] = {0};
    uint8_t rel_bitmap[nUcharsForNBits(REL_CNT)] = {0};

    // Add buttons
    if (ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(btn_bitmap)), btn_bitmap) >= 0) {
        for (int bit = BTN_MISC; bit < KEY_CNT; bit++) {
            if (testBit(bit, btn_bitmap)) {
                AddPhysicalControl(PSHBTN, last, 0);
                m_btn.push_back(bit);
                last++;
            }
        }
    }

    // Add Absolute axis
    if (ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(abs_bitmap)), abs_bitmap) >= 0) {
        for (int bit = 0; bit < ABS_CNT; bit++) {
            ControlType type = ABSAXIS;  // FIXME DS3

            if (testBit(bit, abs_bitmap)) {
                input_absinfo info;
                if (ioctl(m_fd, EVIOCGABS(bit), &info) < 0) {
                    fprintf(stderr, "Invalid IOCTL EVIOCGID\n");
                    continue;
                }

                AddPhysicalControl(ABSAXIS, last, 0);
                last++;
                if (std::abs(info.value - 127) < 2) {
                    fprintf(stderr, "HALF Axis info %d=>%d, current %d, flat %d, resolution %d\n", info.minimum, info.maximum, info.value, info.flat, info.resolution);

                    // Half axis must be split into 2 parts...
                    AddPhysicalControl(ABSAXIS, last, 0);
                    last++;

                    m_abs.push_back(abs_info(bit, info.minimum, info.value, type));
                    m_abs.push_back(abs_info(bit, info.value, info.maximum, type));
                } else {
                    fprintf(stderr, "FULL Axis info %d=>%d, current %d, flat %d, resolution %d\n", info.minimum, info.maximum, info.value, info.flat, info.resolution);

                    m_abs.push_back(abs_info(bit, info.minimum, info.maximum, type));
                }
            }
        }
    }

    // Add relative axis
    if (ioctl(fd, EVIOCGBIT(EV_REL, sizeof(rel_bitmap)), rel_bitmap) >= 0) {
        for (int bit = 0; bit < REL_CNT; bit++) {
            if (testBit(bit, rel_bitmap)) {
                AddPhysicalControl(RELAXIS, last, last);
                m_rel.push_back(bit);
                last++;

                fprintf(stderr, "Add relative nb %d\n", bit);
            }
        }
    }

    fprintf(stderr, "New device created. Found axe:%zu, buttons:%zu, m_rel:%zu\n\n", m_abs.size(), m_btn.size(), m_rel.size());
}