User Info
Добро пожаловать, Guest Пользователей: 3 Поисковых ботов: 3 Гостей: 1
Подключение кнопки GPIO к Qt [РЕШЕНО]
Microniks
Пункты: 2497
Регистрация: 14.11.2017
Здравствуйте!
Железо: SK-iMX6S-SODIMM + SK-iMX6-MB-SODIMM + SK-ATM0700D4-Plug
Основа системы на buildroot-2014.08-sk-3.10.17
Читая данный форум и Google постепенно дошел до подключения кнопок на дисплее к Qt приложению.
Прописал в файле imx6qdl-sodimm.dtsi назначение одного из GPIO в качестве кнопки.
Код gpio_keys_button{
key{
label = "key_tab";
gpios = <&gpio1 11 1>;
linux, code = KEY_TAB;
};
};
Код cat /proc/interrupts
и
Код evtest /dev/input/event2
показали, что кнопка заработала.
Отображение консоли с дисплея убрал, так как прочитал, что она перехватывает кнопку/клавиатуру.
Проблема в том, что приложение на Qt не видит кнопку.
На event1 у меня сидит TS, с ним приложение активно работает.
Это же приложение собранное под Win работает с клавиатурой хорошо, клавиша TAB отрабатывает.
Помогите, куда копать?
sasamy
Пункты: 83558
Регистрация: 14.08.2009
Цитата
показали, что кнопка заработала.
...
Проблема в том, что приложение на Qt не видит кнопку.
...
Помогите, куда копать?
Если кнопка работает - в сторону своего приложения.
На холе прописал один из gpio
Код
gpio-keys {
compatible = "gpio-keys";
key_tab {
label = "tab";
gpios = <&gpio2 4 GPIO_ACTIVE_LOW>;
gpio-key,wakeup;
debounce-interval = <50>;
linux,code = <15>; /* KEY_TAB */
};
};
проверил что кнока появилась
Код
# dmesg | grep input
input: gpio-keys.22 as /devices/soc0/gpio-keys.22/input/input0
набрал в vi на плате простой пример на QML
Код
# cat tab.qml
import QtQuick 2.0
Item {
anchors.fill: parent
focus: true
Keys.onPressed: {
if (event.key == Qt.Key_Tab) {
console.log("tab pressed");
event.accepted = true;
}
}
}
запустил и позамыкал этот gpio на "землю"
Код
# qmlscene tab.qml
Unable to query physical screen size, defaulting to 100 dpi.
To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).
qml: tab pressed
qml: tab pressed
qml: tab pressed
qml: tab pressed
qml: tab pressed
Microniks
Пункты: 2497
Регистрация: 14.11.2017
Кнопка есть
Код # dmesg | grep input
input: gpio-keys.18 as /devices/soc0/gpio-keys.18/input/input2
Переписал ваш пример программы, но тишина. После запуска программа в ожидании нажатия.
sasamy
Пункты: 83558
Регистрация: 14.08.2009
Цитата Переписал ваш пример программы, но тишина. После запуска программа в ожидании нажатия.
значит с кнопкой что-то не так, у меня например есть сомнения по поводу вашей записи в DTS
Цитата
gpio_keys_button{
key{
label = "key_tab";
gpios = <&gpio1 11 1>;
linux, code = KEY_TAB;
};
};
1) не вижу тут строки
compatible = "gpio-keys";
без которой неизвестно - для какого драйвера эта запись
2) в 3.10.17
linux, code = KEY_TAB;
так не сработает - там надо число писать а не макроопределение, если вы конечно ничего не добавляли сами
https://elixir.bootlin.com/linux/v3.10.17/source/include/uapi/linux/input.h#L224
3) gpios = <&gpio1 11 1>;
этот пин где-то переключается на GPIO ?
Microniks
Пункты: 2497
Регистрация: 14.11.2017
Цитата
значит с кнопкой что-то не так, у меня например есть сомнения по поводу вашей записи в DTS
1) не вижу тут строки
compatible = "gpio-keys";
без которой неизвестно - для какого драйвера эта запись
2) в 3.10.17
linux, code = KEY_TAB;
так не сработает - там надо число писать а не макроопределение, если вы конечно ничего не добавляли сами
https://elixir.bootlin.com/linux/v3.10.17/source/include/uapi/linux/input.h#L224
3) gpios = <&gpio1 11 1>;
этот пин где-то переключается на GPIO ?
1. Сообщение писал вечером из дома по памяти. Строка эта на месте в реальности.
2. Для удобства добавил в include файл с макроопределениями.
3. Конечно. В этом же DTS файле. Он там еще до меня был определен как GPIO.
Считал, что это является подтверждением, что кнопка работает, разве нет?
Код # evtest /dev/input/event2
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "gpio-keys.18"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 15 (KEY_TAB)
Properties:
Testing ... (interrupt to exit)
Event: time 12763.930866, type 1 (EV_KEY), code 15 (KEY_TAB), value 1
Event: time 12763.930866, -------------- SYN_REPORT ------------
Event: time 12764.140852, type 1 (EV_KEY), code 15 (KEY_TAB), value 0
Event: time 12764.140852, -------------- SYN_REPORT ------------
sasamy
Пункты: 83558
Регистрация: 14.08.2009
Цитата
Считал, что это является подтверждением, что кнопка работает, разве нет?
# evtest /dev/input/event2
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "gpio-keys.18"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 15 (KEY_TAB)
Properties:
Testing ... (interrupt to exit)
Event: time 12763.930866, type 1 (EV_KEY), code 15 (KEY_TAB), value 1
Event: time 12763.930866, -------------- SYN_REPORT ------------
Event: time 12764.140852, type 1 (EV_KEY), code 15 (KEY_TAB), value 0
Event: time 12764.140852, -------------- SYN_REPORT ------------
Вполне. Только у меня в идентичной конфигурации
Цитата
Железо: SK-iMX6S-SODIMM + SK-iMX6-MB-SODIMM + SK-ATM0700D4-Plug
Основа системы на buildroot-2014.08-sk-3.10.17
imx6sk_qt5gst_defconfig
gpio-keys {
compatible = "gpio-keys";
key_tab {
label = "tab";
gpios = <&gpio1 11 GPIO_ACTIVE_LOW>;
gpio-key,wakeup;
debounce-interval = <50>;
linux,code = <15>; /* KEY_TAB */
};
};
Разъем X4 пин 3 на MB
Цитата
# dmesg | grep input
fbcvt: Invalid input parameters
fbcvt: Invalid input parameters
input: ADS0 Touchscreen as /devices/soc0/soc.1/2000000.aips-bus/2000000.spba-bus/2008000.ecspi/spi_master/spi32766/spi32766.0/input/input0
input: ADS0 Touchscreen as /devices/soc0/soc.1/2000000.aips-bus/2000000.spba-bus/2014000.ecspi/spi_master/spi32765/spi32765.0/input/input1
input: gpio-keys.19 as /devices/soc0/gpio-keys.19/input/input2
udevd[152]: specified group 'input' unknown
все работает "из коробки" - buildroot собран с дефолтным конфигом, ничего не отключал
Microniks
Пункты: 2497
Регистрация: 14.11.2017
Код
# dmesg | grep input
fbcvt: Invalid input parameters
fbcvt: Invalid input parameters
input: ADS0 Touchscreen as /devices/soc0/soc.1/2000000.aips-bus/2000000.spba-bus/2008000.ecspi/spi_master/spi32766/spi32766.0/input/input0
input: ADS0 Touchscreen as /devices/soc0/soc.1/2000000.aips-bus/2000000.spba-bus/2014000.ecspi/spi_master/spi32765/spi32765.0/input/input1
input: gpio-keys.18 as /devices/soc0/gpio-keys.18/input/input2
udevd[152]: specified group 'input' unknown
Цитата imx6sk_qt5gst_defconfig
У меня собрано с этой же конфигурацией
Если не отключаю консоль на дисплее и вместо KEY_TAB задаю код числа, то в консоли он отображается при нажатии кнопки.
Стал смущать момент, что эти коды (цифр, TAB'а) соответствуют XT-клавиатуре, может это как-то влиять, ведь пересечения с AT-клавиатурой нет.
sasamy
Пункты: 83558
Регистрация: 14.08.2009
sasamy
Пункты: 83558
Регистрация: 14.08.2009
Цитата
Стал смущать момент, что эти коды (цифр, TAB'а) соответствуют XT-клавиатуре, может это как-то влиять, ведь пересечения с AT-клавиатурой нет.
Не понял - при чем тут тип клавиатуры - я вам дал ссылку в ядре на стандартные коды клавиш для всех устройств ввода, это не скан-коды которые могут быть разные в зависимости от контроллера
Microniks
Пункты: 2497
Регистрация: 14.11.2017
Загрузка системы останавливается на этом сообщении
Код Waiting for root device /dev/mmcblk0p1...