Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:3
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:7
Форум » starterkit.ru » Embedded Linux
Подключение кнопки GPIO к Qt [РЕШЕНО]
Microniks
Добавлено 21.11.2018 18:47 Редактировалось 27.11.2018 10:10
0
Сообщение: 1
Microniks
0

Пункты: 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
Добавлено 21.11.2018 23:14 Сообщение: 2
sasamy
4.71

Пункты: 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
Добавлено 22.11.2018 06:53 Сообщение: 3
Microniks
0

Пункты: 2497
Регистрация: 14.11.2017
Кнопка есть
Код
# dmesg | grep input
input: gpio-keys.18 as /devices/soc0/gpio-keys.18/input/input2


Переписал ваш пример программы, но тишина. После запуска программа в ожидании нажатия.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 22.11.2018 10:20 Редактировалось 22.11.2018 10:21 Сообщение: 4
sasamy
4.71

Пункты: 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
Добавлено 22.11.2018 10:49 Редактировалось 22.11.2018 10:50 Сообщение: 5
Microniks
0

Пункты: 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
Добавлено 22.11.2018 11:27 Редактировалось 22.11.2018 11:36 Сообщение: 6
sasamy
4.71

Пункты: 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
Добавлено 22.11.2018 11:35 Редактировалось 22.11.2018 11:55 Сообщение: 7
Microniks
0

Пункты: 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
Добавлено 22.11.2018 11:53 Редактировалось 22.11.2018 11:55 Сообщение: 8
sasamy
4.71

Пункты: 83558
Регистрация: 14.08.2009
Цитата
У меня собрано с этой же конфигурацией


Тут то что у меня собрано и работает

https://yadi.sk/d/4HK-yMsy1NywZg

то что дописал в DTS - все есть выше
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 22.11.2018 12:17 Редактировалось 22.11.2018 12:18 Сообщение: 9
sasamy
4.71

Пункты: 83558
Регистрация: 14.08.2009
Цитата

Стал смущать момент, что эти коды (цифр, TAB'а) соответствуют XT-клавиатуре, может это как-то влиять, ведь пересечения с AT-клавиатурой нет.


Не понял - при чем тут тип клавиатуры - я вам дал ссылку в ядре на стандартные коды клавиш для всех устройств ввода, это не скан-коды которые могут быть разные в зависимости от контроллера
Спуститься к концу Подняться к началу
Персональная информация
Microniks
Добавлено 22.11.2018 12:26 Сообщение: 10
Microniks
0

Пункты: 2497
Регистрация: 14.11.2017
Загрузка системы останавливается на этом сообщении
Код
Waiting for root device /dev/mmcblk0p1...
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux