Ошибка SegemtationEt с QT 5.7 и Bluez 5.47 ConnectDevice
Я пытаюсь запустить следующий git https://github.com/com2m/anki-overdrive-goes-iot/blob/master/Documentation.md#bluez5.42
при сборке я столкнулся с ошибкой, которая, похоже, была ошибкой в gcc 7. Я следовал за ошибкой компиляции при запуске make после Qmake для его компиляции.
После этого я столкнулся с Segemntationfault при запуске build/ankioverdrive
Запуск gdb дает мне следующую информацию в BT Full
#0 0x00007ffff7931ccb in QLowEnergyController::connectToDevice() () from /usr/lib/x86_64-linux-gnu/libQt5Bluetooth.so.5
No symbol table info available.
#1 0x00005555555718cc in AnkiCar::reconnect (this=0x5555557a82d0) at src/ankicar.cpp:444
No locals.
#2 0x00005555555654b3 in DriveMode::requestBatteryUpdate (this=0x5555557a6400) at src/drivemode.cpp:102
racecar = 0x5555557a82d0
_container_ = {c = {<QListSpecialMethods<Racecar*>> = {<No data fields>}, {p = {static shared_null = {ref = {atomic = {_q_value = {<std::__atomic_base<int>> = {static _S_alignment = 4,
_M_i = -1}, <No data fields>}}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = 0x5555557a85a0}, d = 0x5555557a85a0}}, i = {i = 0x5555557a85b8}, e = {i = 0x5555557a85d0},
control = 1}
#3 0x00005555555768df in DriveMode::qt_static_metacall (_o=0x5555557a6400, _c=QMetaObject::InvokeMetaMethod, _id=8, _a=0x7fffffffdf20) at moc_drivemode.cpp:156
_t = 0x5555557a6400
#4 0x00007ffff745f5b5 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#5 0x00007ffff746c027 in QTimer::timeout(QTimer::QPrivateSignal) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#6 0x00007ffff746c388 in QTimer::timerEvent(QTimerEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#7 0x00007ffff74600db in QObject::event(QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#8 0x00007ffff7430991 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#9 0x00007ffff7488d8e in QTimerInfoList::activateTimers() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#10 0x00007ffff7489551 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#11 0x00007ffff5002287 in g_main_context_dispatch () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#12 0x00007ffff50024c0 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#13 0x00007ffff500254c in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
No symbol table info available.
#14 0x00007ffff74898ef in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#15 0x00007ffff742e9ea in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#16 0x00007ffff7437a84 in QCoreApplication::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
No symbol table info available.
#17 0x000055555555b42e in main (argc=1, argv=0x7fffffffe468) at src/main.cpp:29
a = <incomplete type>
Я решил, что это проблема с bluez. Я использую bluez 5.47 и, убедившись, что конфигурация позволяет работать в экспериментальном режиме, запустите
./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --enable-experimental --enable-maintainer-mode
и изменил /lib/systemd/system/bluetooth.service
и я убедился, что мой Bluetooth работает, позвонив
sudo hciconfig hci0 up
с моим блютуз-устройством, beeing hci0
но все же без какого-либо успеха
Я сейчас пробую все это на Kubuntu 18.04 как дистрибутив.
У меня нет идей, как это исправить.
0 ответов
Я изменился ankicar.cpp
чтобы проверить, не отключен ли в данный момент контроллер Bluetooth, прежде чем пытаться подключить его:
void AnkiCar::reconnect() {
if (lowEnergyController != 0) {
if (lowEnergyController->state() == QLowEnergyController::UnconnectedState)
lowEnergyController->connectToDevice();
}
}
С этим изменением автомобили соединяются, и связь кажется стабильной (даже без --experimental
переключите как описано выше).
[E6:45:5A:32:6E:4A]>> CONNECTED.
[E6:45:5A:32:6E:4A]>> SERVICE DISCOVERY FINISHED.
[E6:45:5A:32:6E:4A]>> FOUND ANKI SERVICE.
[E6:45:5A:32:6E:4A]>> SERVICE CHARACTERISTICS DISCOVERED.
[E6:45:5A:32:6E:4A]>> SDK ON.
[E6:45:5A:32:6E:4A]>> DESCRIPTOR SUCCESSFULLY WRITTEN.
[E6:45:5A:32:6E:4A]>> NOT CHARGING, NOT ON TRACK.
[E6:45:5A:32:6E:4A]>> ATTEMPT TO ACCESS GAMEPAD FAILED.
[E6:45:5A:32:6E:4A]>> USING GAMEPAD #1.
[E6:45:5A:32:6E:4A]>> READY.
[E6:45:5A:32:6E:4A]>> NOT CHARGING, ON TRACK.
Вам нужно немного переместить машину на трассе, чтобы она была ON TRACK
, Я установил следующие пакеты, чтобы иметь возможность собрать проект:
pi@raspberrypi:~ $ sudo apt-get install bluetooth bluez blueman
pi@raspberrypi:~ $ sudo apt-get install bluez bluez-firmware
pi@raspberrypi:~ $ sudo apt-get install pi-bluetooth
pi@raspberrypi:~ $ sudo apt-get install qt5-qmake
pi@raspberrypi:~ $ sudo apt-get install qt5-default
pi@raspberrypi:~ $ sudo apt-get install qtconnectivity5-dev
Мне также нужно было добавить QMAKE_CFLAGS_ISYSTEM = -I
в файл проекта ankioverdrive.pro
(см. / usr / include / C++/7/cstdlib:75:15: фатальная ошибка: stdlib.h: такого файла или каталога нет #include_next
Документы QT написаны в http://doc.qt.io/qt-5.6/qlowenergycontroller.html
void QLowEnergyController::connectToDevice()
// Connects to the remote Bluetooth Low Energy device.
Эта функция ничего не делает, если состояние контроллера () не равно UnconnectedState. Сигнал connected() подается после успешного установления соединения. В системах Linux/BlueZ невозможно подключиться к одному и тому же удаленному устройству, используя два экземпляра этого класса. Второй вызов этой функции может завершиться ошибкой. Это ограничение может быть снято в будущих выпусках.