首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Google板上使用无线控制器?

如何在Google板上使用无线控制器?
EN

Stack Overflow用户
提问于 2022-02-10 14:59:12
回答 1查看 149关注 0票数 0

通过Jetson,我通过蓝牙连接了一个PS4控制器,该设备出现在/dev/input/js0下。然而,当我通过蓝牙连接控制器到我的珊瑚板时,我在那个位置什么也没看到,也许是因为孟德尔而不是Ubuntu?连接PS4控制器并从C++访问它的推荐方法是什么?我应该用不同的操纵杆吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-10 20:26:19

在做了一些研究之后,我了解了在linux上joydev和evdev之间的区别。看来,我的PS4控制器在Jetson上显示为joydev设备,而在上则显示为evdev设备。我在这里找到了克罗埃帕/大卫巴特勒的evdev设备的一些示例C++代码:https://handmade.network/forums/t/3673-modern_way_to_read_gamepad_input_with_c_on_linux

我对PS4控制器的代码进行了如下修改:

代码语言:javascript
复制
void runJoystick() {
    auto gamepad = open("/dev/input/event4", O_RDONLY | O_NONBLOCK); //todo use /proc/bus/input/devices instead
    assert(gamepad != -1);
    std::cout << "Running joystick" << std::endl;

    while (m_still_running) {
        struct input_event events[8];  // 8 events per frame is pretty extreme, more like 1 or 2, sometimes as high as 4
        auto r1 = read(gamepad, events, sizeof events);
        if (r1 != -1) {
            int new_event_count = r1 / sizeof(struct input_event);
            for (int evi = 0; evi < new_event_count; evi++) {
                auto& ev = events[evi];

                switch (ev.type) {
                    case EV_ABS: {
                        switch (ev.code) {
                            case ABS_X: {  // left x
                                // std::cout << "type " << ev.code << "value:" << ev.value << std::endl;
                            } break;
                            case ABS_Y: {  // left y
                                // std::cout << "type " << ev.code << "value:" << ev.value << std::endl;
                            } break;
                            case ABS_Z: {  // right x
                                // std::cout << "type " << ev.code << "value:" << ev.value << std::endl;
                            } break;
                            case ABS_RZ: {  // right y
                                // std::cout << "type " << ev.code << "value:" << ev.value << std::endl;
                            } break;
                        }
                    } break;
                    case EV_KEY: {
                        switch (ev.code) {
                            case BTN_A: {  // square
                                std::cout << "Square ";
                            } break;
                            case BTN_B: {  // x
                                std::cout << "X ";
                            } break;
                            case BTN_C: {  // circle
                                std::cout << "Circle ";
                            } break;
                            case BTN_X: {  // triangle
                                std::cout << "Triangle ";
                            } break;
                        }

                        if (ev.value) {
                            std::cout << "Pressed " << std::endl;
                        } else {
                            std::cout << "Released " << std::endl;
                        }

                    } break;
                }
            }
        }

        assert(r1 != -1 || errno == EWOULDBLOCK || errno == EAGAIN);
        std::this_thread::sleep_for(std::chrono::milliseconds(20));
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71067405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档