1
0
Fork 0
mirror of https://github.com/EdgeTX/edgetx.git synced 2025-07-23 16:25:12 +03:00

Bsongis/issue 6910 x10 express bluetooth (#6931)

[X10 Express] Bluetooth function added
This commit is contained in:
Bertrand Songis 2019-10-11 08:09:59 +02:00 committed by GitHub
parent 9bdccd47fe
commit 135133423a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 93 additions and 53 deletions

View file

@ -73,7 +73,7 @@ char * Bluetooth::readline(bool error_reset)
{
uint8_t byte;
while (1) {
while (true) {
if (!btRxFifo.pop(byte)) {
#if defined(PCBX9E)
// X9E BT module can get unresponsive
@ -280,7 +280,7 @@ void Bluetooth::receiveTrainer()
{
uint8_t byte;
while (1) {
while (true) {
if (!btRxFifo.pop(byte)) {
return;
}
@ -451,9 +451,11 @@ void Bluetooth::wakeup()
++reusableBuffer.moduleSetup.bt.devicesCount;
}
}
/* else if (state == BLUETOOTH_STATE_DISCOVER_START && !strcmp(line, "OK+DISCE")) {
#if defined(PCBHORUS)
else if (state == BLUETOOTH_STATE_DISCOVER_START && !strcmp(line, "OK+DISCE")) {
state = BLUETOOTH_STATE_DISCOVER_END;
} */
}
#endif
else if (state == BLUETOOTH_STATE_CLEAR_REQUESTED) {
char command[] = "AT+CLEAR";
writeString(command);

View file

@ -1023,7 +1023,7 @@ void menuModelSetup(event_t event)
}
if (bluetooth.state == BLUETOOTH_STATE_DISCOVER_START && reusableBuffer.moduleSetup.bt.devicesCount > 0) {
popupMenuItemsCount = min<uint8_t>(reusableBuffer.moduleSetup.bt.devicesCount, 6);
popupMenuItemsCount = min<uint8_t>(reusableBuffer.moduleSetup.bt.devicesCount, MAX_BLUETOOTH_DISTANT_ADDR);
for (uint8_t i=0; i<popupMenuItemsCount; i++) {
popupMenuItems[i] = reusableBuffer.moduleSetup.bt.devices[i];
}

View file

@ -984,7 +984,7 @@ void menuModelSetup(event_t event)
}
if (bluetooth.state == BLUETOOTH_STATE_DISCOVER_START && reusableBuffer.moduleSetup.bt.devicesCount > 0) {
popupMenuItemsCount = min<uint8_t>(reusableBuffer.moduleSetup.bt.devicesCount, 6);
popupMenuItemsCount = min<uint8_t>(reusableBuffer.moduleSetup.bt.devicesCount, MAX_BLUETOOTH_DISTANT_ADDR);
for (uint8_t i=0; i<popupMenuItemsCount; i++) {
popupMenuItems[i] = reusableBuffer.moduleSetup.bt.devices[i];
}

View file

@ -133,6 +133,21 @@ enum MenuModelSetupItems {
#define CURRENT_RECEIVER_EDITED(k) (EXTERNAL_MODULE)
#endif
#if defined(BLUETOOTH)
void onBluetoothConnectMenu(const char * result)
{
if (result != STR_EXIT) {
uint8_t index = (result - reusableBuffer.moduleSetup.bt.devices[0]) / sizeof(reusableBuffer.moduleSetup.bt.devices[0]);
strncpy(bluetooth.distantAddr, reusableBuffer.moduleSetup.bt.devices[index], LEN_BLUETOOTH_ADDR);
bluetooth.state = BLUETOOTH_STATE_BIND_REQUESTED;
}
else {
reusableBuffer.moduleSetup.bt.devicesCount = 0;
bluetooth.state = BLUETOOTH_STATE_DISCOVER_END;
}
}
#endif
#include "common/stdlcd/model_setup_pxx1.cpp"
void onPXX2R9MBindModeMenu(const char * result)
@ -1215,21 +1230,10 @@ bool menuModelSetup(event_t event)
}
if (bluetooth.distantAddr[0]) {
lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, bluetooth.distantAddr);
if (bluetooth.state != BLUETOOTH_STATE_CONNECTED) {
drawButton(MODEL_SETUP_2ND_COLUMN, y, "Bind", menuHorizontalPosition == 0 ? attr : 0);
drawButton(MODEL_SETUP_2ND_COLUMN+60, y, "Clear", menuHorizontalPosition == 1 ? attr : 0);
}
else {
drawButton(MODEL_SETUP_2ND_COLUMN, y, "Clear", attr);
}
drawButton(MODEL_SETUP_2ND_COLUMN, y, STR_CLEAR, attr);
if (attr && event == EVT_KEY_FIRST(KEY_ENTER)) {
if (bluetooth.state == BLUETOOTH_STATE_CONNECTED || menuHorizontalPosition == 1) {
bluetooth.state = BLUETOOTH_STATE_OFF;
bluetooth.distantAddr[0] = 0;
}
else {
bluetooth.state = BLUETOOTH_STATE_BIND_REQUESTED;
}
bluetooth.state = BLUETOOTH_STATE_CLEAR_REQUESTED;
memclear(bluetooth.distantAddr, sizeof(bluetooth.distantAddr));
}
}
else {
@ -1239,13 +1243,31 @@ bool menuModelSetup(event_t event)
else
drawButton(MODEL_SETUP_2ND_COLUMN, y, STR_BLUETOOTH_DISC, attr);
if (attr && event == EVT_KEY_FIRST(KEY_ENTER)) {
if (bluetooth.state < BLUETOOTH_STATE_IDLE)
if (bluetooth.state < BLUETOOTH_STATE_IDLE) {
bluetooth.state = BLUETOOTH_STATE_OFF;
else
}
else {
reusableBuffer.moduleSetup.bt.devicesCount = 0;
bluetooth.state = BLUETOOTH_STATE_DISCOVER_REQUESTED;
}
}
}
if (bluetooth.state == BLUETOOTH_STATE_DISCOVER_END && reusableBuffer.moduleSetup.bt.devicesCount > 0) {
popupMenuItemsCount = min<uint8_t>(reusableBuffer.moduleSetup.bt.devicesCount, MAX_BLUETOOTH_DISTANT_ADDR);
for (uint8_t i = 0; i < popupMenuItemsCount; i++) {
popupMenuItems[i] = reusableBuffer.moduleSetup.bt.devices[i];
}
POPUP_MENU_START(onBluetoothConnectMenu);
}
}
else {
if (bluetooth.distantAddr[0])
lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y+1, bluetooth.distantAddr);
else
lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, "---");
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, bluetooth.state == BLUETOOTH_STATE_CONNECTED ? STR_CONNECTED : STR_NOT_CONNECTED);
}
break;
#endif

View file

@ -59,6 +59,8 @@ enum MenuRadioHardwareItems {
#if defined(BLUETOOTH)
ITEM_RADIO_HARDWARE_BLUETOOTH_MODE,
ITEM_RADIO_HARDWARE_BLUETOOTH_PAIRING_CODE,
ITEM_RADIO_HARDWARE_BLUETOOTH_LOCAL_ADDR,
ITEM_RADIO_HARDWARE_BLUETOOTH_DISTANT_ADDR,
ITEM_RADIO_HARDWARE_BLUETOOTH_NAME,
#endif
#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA)
@ -80,7 +82,7 @@ enum MenuRadioHardwareItems {
#define SWITCHES_ROWS NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1, NAVIGATION_LINE_BY_LINE|1
#if defined(BLUETOOTH)
#define BLUETOOTH_ROWS 0, uint8_t(g_eeGeneral.bluetoothMode != BLUETOOTH_TELEMETRY ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? -1 : 0),
#define BLUETOOTH_ROWS 0, uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_TELEMETRY ? READONLY_ROW : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : READONLY_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : READONLY_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : 0),
#else
#define BLUETOOTH_ROWS
#endif
@ -292,12 +294,22 @@ bool menuRadioHardware(event_t event)
break;
case ITEM_RADIO_HARDWARE_BLUETOOTH_PAIRING_CODE:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BLUETOOTH_PIN_CODE);
lcdDrawText(INDENT_WIDTH, y, STR_BLUETOOTH_PIN_CODE);
lcdDrawText(HW_SETTINGS_COLUMN+50, y, "000000", 0);
break;
case ITEM_RADIO_HARDWARE_BLUETOOTH_LOCAL_ADDR:
lcdDrawText(INDENT_WIDTH, y, STR_BLUETOOTH_LOCAL_ADDR);
lcdDrawText(HW_SETTINGS_COLUMN+50, y, bluetooth.localAddr[0] == '\0' ? "---" : bluetooth.localAddr);
break;
case ITEM_RADIO_HARDWARE_BLUETOOTH_DISTANT_ADDR:
lcdDrawText(INDENT_WIDTH, y, STR_BLUETOOTH_DIST_ADDR);
lcdDrawText(HW_SETTINGS_COLUMN+50, y, bluetooth.distantAddr[0] == '\0' ? "---" : bluetooth.distantAddr);
break;
case ITEM_RADIO_HARDWARE_BLUETOOTH_NAME:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_NAME);
lcdDrawText(INDENT_WIDTH, y, STR_NAME);
editName(HW_SETTINGS_COLUMN+50, y, g_eeGeneral.bluetoothName, LEN_BLUETOOTH_NAME, event, attr);
break;
#endif

View file

@ -174,6 +174,10 @@ void onSdManagerMenu(const char * result)
FrskyDeviceFirmwareUpdate device(SPORT_MODULE);
device.flashFirmware(lfn);
}
else if (result == STR_FLASH_BLUETOOTH_MODULE) {
getSelectionFullPath(lfn);
bluetooth.flashFirmware(lfn);
}
#if defined(MULTIMODULE)
#if defined(INTERNAL_MODULE_MULTI)
else if (result == STR_FLASH_INTERNAL_MULTI) {

View file

@ -227,7 +227,7 @@ enum {
#elif defined(PCBX9E)
#define BLUETOOTH_ROWS 0, uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : READONLY_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : READONLY_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : 0), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : 0),
#else
#define BLUETOOTH_ROWS uint8_t(IS_BLUETOOTH_CHIP_PRESENT() ? 0 : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_TELEMETRY ? -1 : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : -1), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : 0),
#define BLUETOOTH_ROWS uint8_t(IS_BLUETOOTH_CHIP_PRESENT() ? 0 : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_TELEMETRY ? READONLY_ROW : HIDDEN_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : READONLY_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : READONLY_ROW), uint8_t(g_eeGeneral.bluetoothMode == BLUETOOTH_OFF ? HIDDEN_ROW : 0),
#endif
#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA)
@ -561,17 +561,17 @@ void menuRadioHardware(event_t event)
break;
case ITEM_RADIO_HARDWARE_BLUETOOTH_PAIRING_CODE:
lcdDrawTextAlignedLeft(y, STR_BLUETOOTH_PIN_CODE);
lcdDrawText(INDENT_WIDTH, y, STR_BLUETOOTH_PIN_CODE);
lcdDrawText(HW_SETTINGS_COLUMN2, y, "000000");
break;
case ITEM_RADIO_HARDWARE_BLUETOOTH_LOCAL_ADDR:
lcdDrawTextAlignedLeft(y, STR_BLUETOOTH_LOCAL_ADDR);
lcdDrawText(INDENT_WIDTH, y, STR_BLUETOOTH_LOCAL_ADDR);
lcdDrawText(HW_SETTINGS_COLUMN2, y, bluetooth.localAddr[0] == '\0' ? "---" : bluetooth.localAddr);
break;
case ITEM_RADIO_HARDWARE_BLUETOOTH_DISTANT_ADDR:
lcdDrawTextAlignedLeft(y, STR_BLUETOOTH_DIST_ADDR);
lcdDrawText(INDENT_WIDTH, y, STR_BLUETOOTH_DIST_ADDR);
lcdDrawText(HW_SETTINGS_COLUMN2, y, bluetooth.distantAddr[0] == '\0' ? "---" : bluetooth.distantAddr);
break;

View file

@ -780,9 +780,9 @@
#define TR_BLUETOOTH "Bluetooth"
#define TR_BLUETOOTH_DISC "Hledat"
#define TR_BLUETOOTH_INIT "Init"
#define TR_BLUETOOTH_DIST_ADDR INDENT "Vzdál. addr"
#define TR_BLUETOOTH_LOCAL_ADDR INDENT "Lokál. addr"
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN kód", "PIN kód")
#define TR_BLUETOOTH_DIST_ADDR "Vzdál. addr"
#define TR_BLUETOOTH_LOCAL_ADDR "Lokál. addr"
#define TR_BLUETOOTH_PIN_CODE TR("PIN kód", "PIN kód")
#define TR_BAUDRATE "Baudrate BT"
#define LEN_BLUETOOTH_MODES "\012"
#if defined(PCBX9E)

View file

@ -782,9 +782,9 @@
#define TR_BLUETOOTH "Bluetooth"
#define TR_BLUETOOTH_DISC "Discover"
#define TR_BLUETOOTH_INIT "Init"
#define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr"
#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code")
#define TR_BLUETOOTH_DIST_ADDR "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR "Local addr"
#define TR_BLUETOOTH_PIN_CODE "PIN code"
#define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011"
#if defined(PCBX9E)

View file

@ -780,8 +780,8 @@
#define TR_BLUETOOTH "Bluetooth"
#define TR_BLUETOOTH_DISC "Discover"
#define TR_BLUETOOTH_INIT "Init"
#define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr"
#define TR_BLUETOOTH_DIST_ADDR "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR "Local addr"
#define TR_BLUETOOTH_PIN_CODE "PIN code"
#define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011"

View file

@ -805,8 +805,8 @@
#define TR_BLUETOOTH "Bluetooth"
#define TR_BLUETOOTH_DISC "Discover"
#define TR_BLUETOOTH_INIT "Init"
#define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr"
#define TR_BLUETOOTH_DIST_ADDR "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR "Local addr"
#define TR_BLUETOOTH_PIN_CODE "PIN code"
#define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011"

View file

@ -799,8 +799,8 @@
#define TR_BLUETOOTH "Bluetooth"
#define TR_BLUETOOTH_DISC "Discover"
#define TR_BLUETOOTH_INIT "Init"
#define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr"
#define TR_BLUETOOTH_DIST_ADDR "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR "Local addr"
#define TR_BLUETOOTH_PIN_CODE "PIN code"
#define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011"

View file

@ -801,8 +801,8 @@
#define TR_BLUETOOTH "Bluetooth"
#define TR_BLUETOOTH_DISC "Découvrir"
#define TR_BLUETOOTH_INIT "Init"
#define TR_BLUETOOTH_DIST_ADDR INDENT "Addr dist."
#define TR_BLUETOOTH_LOCAL_ADDR INDENT "Addr locale"
#define TR_BLUETOOTH_DIST_ADDR "Addr dist."
#define TR_BLUETOOTH_LOCAL_ADDR "Addr locale"
#define TR_BLUETOOTH_PIN_CODE "Code PIN"
#define TR_BAUDRATE "Baudrate BT"
#define LEN_BLUETOOTH_MODES "\012"

View file

@ -800,8 +800,8 @@
#define TR_BLUETOOTH "Bluetooth"
#define TR_BLUETOOTH_DISC "Discover"
#define TR_BLUETOOTH_INIT "Init"
#define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr"
#define TR_BLUETOOTH_DIST_ADDR "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR "Local addr"
#define TR_BLUETOOTH_PIN_CODE "PIN code"
#define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011"

View file

@ -788,8 +788,8 @@ TR_GYR_VSRCRAW
#define TR_BLUETOOTH "Bluetooth"
#define TR_BLUETOOTH_DISC "Discover"
#define TR_BLUETOOTH_INIT "Init"
#define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr"
#define TR_BLUETOOTH_DIST_ADDR "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR "Local addr"
#define TR_BLUETOOTH_PIN_CODE "PIN code"
#define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011"

View file

@ -800,8 +800,8 @@
#define TR_BLUETOOTH "Bluetooth"
#define TR_BLUETOOTH_DISC "Discover"
#define TR_BLUETOOTH_INIT "Init"
#define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr"
#define TR_BLUETOOTH_DIST_ADDR "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR "Local addr"
#define TR_BLUETOOTH_PIN_CODE "PIN code"
#define TR_BAUDRATE "Prędkość BT"
#define LEN_BLUETOOTH_MODES "\011"

View file

@ -790,8 +790,8 @@
#define TR_BLUETOOTH "Bluetooth"
#define TR_BLUETOOTH_DISC "Discover"
#define TR_BLUETOOTH_INIT "Init"
#define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr"
#define TR_BLUETOOTH_DIST_ADDR "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR "Local addr"
#define TR_BLUETOOTH_PIN_CODE "PIN code"
#define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011"

View file

@ -800,8 +800,8 @@
#define TR_BLUETOOTH "Bluetooth"
#define TR_BLUETOOTH_DISC "Discover"
#define TR_BLUETOOTH_INIT "Init"
#define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr"
#define TR_BLUETOOTH_DIST_ADDR "Dist addr"
#define TR_BLUETOOTH_LOCAL_ADDR "Local addr"
#define TR_BLUETOOTH_PIN_CODE "PIN code"
#define TR_BAUDRATE "BT Baudrate"
#define LEN_BLUETOOTH_MODES "\011"