diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index b75feaa5b..74314f7e8 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -80,7 +80,6 @@ enum MenuModelSetupItems { #if defined(PCBTARANIS) ITEM_MODEL_INTERNAL_MODULE_LABEL, ITEM_MODEL_INTERNAL_MODULE_MODE, - ITEM_MODEL_INTERNAL_MODULE_PROTOCOL, ITEM_MODEL_INTERNAL_MODULE_CHANNELS, ITEM_MODEL_INTERNAL_MODULE_NPXX2_BIND, ITEM_MODEL_INTERNAL_MODULE_PXX2_MODEL_NUM, @@ -173,12 +172,7 @@ enum MenuModelSetupItems { #define SW_WARN_ROWS uint8_t(NAVIGATION_LINE_BY_LINE|(getSwitchWarningsCount()-1)), uint8_t(getSwitchWarningsCount() > 5 ? TITLE_ROW : HIDDEN_ROW) #endif -#if defined(TARANIS_INTERNAL_PPM) - #define INTERNAL_MODULE_MODE_ROWS (isModuleXJT(INTERNAL_MODULE) ? (uint8_t)1 : (uint8_t)0) // Module type + RF protocols -#else - #define INTERNAL_MODULE_MODE_ROWS 0 // (OFF / RF protocols) -#endif - +#define INTERNAL_MODULE_MODE_ROWS (isModuleXJT(INTERNAL_MODULE) ? (uint8_t)1 : (uint8_t)0) // Module type + RF protocols #define IF_INTERNAL_MODULE_ON(x) (IS_INTERNAL_MODULE_ENABLED()? (uint8_t)(x) : HIDDEN_ROW) #define IF_EXTERNAL_MODULE_ON(x) (IS_EXTERNAL_MODULE_ENABLED()? (uint8_t)(x) : HIDDEN_ROW) #define EXTERNAL_MODULE_BIND_ROWS() ((isModuleXJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) || isModuleSBUS(EXTERNAL_MODULE)) ? (uint8_t)1 : (isModulePPM(EXTERNAL_MODULE) || isModulePXX(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW @@ -494,7 +488,6 @@ void menuModelSetup(event_t event) LABEL(InternalModule), INTERNAL_MODULE_MODE_ROWS, // module mode (PXX(2) / None) - IF_NOT_PXX2_MODULE(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(0)), // XJT protocols INTERNAL_MODULE_CHANNELS_ROWS, // Channels min and count IF_NOT_PXX2_MODULE(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[INTERNAL_MODULE].rfProtocol) ? (uint8_t)2 : (uint8_t)1)), IF_PXX2_MODULE(INTERNAL_MODULE, 0), // RxNum @@ -948,27 +941,26 @@ void menuModelSetup(event_t event) case ITEM_MODEL_INTERNAL_MODULE_MODE: lcdDrawTextAlignedLeft(y, STR_MODE); - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].type, attr); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0); + if (isModuleXJT(INTERNAL_MODULE)) + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+6*FW, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0); if (attr) { - uint8_t moduleType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isInternalModuleAvailable); - if (checkIncDec_Ret) { - // TODO this code should be common, in module.h (X10_new_UI branch) - memclear(&g_model.moduleData[INTERNAL_MODULE], sizeof(ModuleData)); - g_model.moduleData[INTERNAL_MODULE].type = moduleType; - g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); + if (menuHorizontalPosition == 0) { + uint8_t moduleType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isInternalModuleAvailable); + if (checkIncDec_Ret) { + // TODO this code should be common, in module.h (X10_new_UI branch) + memclear(&g_model.moduleData[INTERNAL_MODULE], sizeof(ModuleData)); + g_model.moduleData[INTERNAL_MODULE].type = moduleType; + g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); + } } - } - break; - - case ITEM_MODEL_INTERNAL_MODULE_PROTOCOL: - lcdDrawTextAlignedLeft(y, STR_PROTO); - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[0].rfProtocol, attr); - if (attr) { - g_model.moduleData[INTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, RF_PROTO_X16, RF_PROTO_LAST, EE_MODEL, isRfProtocolAvailable); - if (checkIncDec_Ret) { - g_model.moduleData[0].type = MODULE_TYPE_XJT; - g_model.moduleData[0].channelsStart = 0; - g_model.moduleData[0].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); + else if (isModuleXJT(INTERNAL_MODULE)) { + g_model.moduleData[INTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, RF_PROTO_X16, RF_PROTO_LAST, EE_MODEL, isRfProtocolAvailable); + if (checkIncDec_Ret) { + g_model.moduleData[0].type = MODULE_TYPE_XJT; + g_model.moduleData[0].channelsStart = 0; + g_model.moduleData[0].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE); + } } } break; diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index f3fa66ded..abf069b60 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -568,21 +568,21 @@ When called without parameters, it will only return the status of the output buf static int luaCrossfireTelemetryPush(lua_State * L) { if (lua_gettop(L) == 0) { - lua_pushboolean(L, isCrossfireOutputBufferAvailable()); + lua_pushboolean(L, outputTelemetryBuffer.isAvailable()); } - else if (isCrossfireOutputBufferAvailable()) { + else if (outputTelemetryBuffer.isAvailable()) { uint8_t command = luaL_checkunsigned(L, 1); luaL_checktype(L, 2, LUA_TTABLE); uint8_t length = luaL_len(L, 2); - telemetryOutputPushByte(MODULE_ADDRESS); - telemetryOutputPushByte(2 + length); // 1(COMMAND) + data length + 1(CRC) - telemetryOutputPushByte(command); // COMMAND + outputTelemetryBuffer.pushByte(MODULE_ADDRESS); + outputTelemetryBuffer.pushByte(2 + length); // 1(COMMAND) + data length + 1(CRC) + outputTelemetryBuffer.pushByte(command); // COMMAND for (int i=0; i 0) { - memcpy(pulses, outputTelemetryBuffer, outputTelemetryBufferSize); - extmodulePulsesData.crossfire.length = outputTelemetryBufferSize; - outputTelemetryBufferTrigger = 0x00; - outputTelemetryBufferSize = 0; + if (outputTelemetryBuffer.destination == TELEMETRY_ENDPOINT_SPORT) { + memcpy(pulses, outputTelemetryBuffer.data, outputTelemetryBuffer.size); + extmodulePulsesData.crossfire.length = outputTelemetryBuffer.size; + outputTelemetryBuffer.reset(); } else #endif diff --git a/radio/src/telemetry/crossfire.cpp b/radio/src/telemetry/crossfire.cpp index cd5823fd2..786fe71ef 100644 --- a/radio/src/telemetry/crossfire.cpp +++ b/radio/src/telemetry/crossfire.cpp @@ -174,11 +174,6 @@ void processCrossfireTelemetryFrame() } } -bool isCrossfireOutputBufferAvailable() -{ - return outputTelemetryBufferSize == 0; -} - void processCrossfireTelemetryData(uint8_t data) { if (telemetryRxBufferCount == 0 && data != RADIO_ADDRESS) { diff --git a/radio/src/telemetry/crossfire.h b/radio/src/telemetry/crossfire.h index d0f2652ad..6be331a90 100644 --- a/radio/src/telemetry/crossfire.h +++ b/radio/src/telemetry/crossfire.h @@ -78,7 +78,6 @@ enum CrossfireSensorIndexes { void processCrossfireTelemetryData(uint8_t data); void crossfireSetDefault(int index, uint8_t id, uint8_t subId); -bool isCrossfireOutputBufferAvailable(); #if SPORT_MAX_BAUDRATE < 400000 const uint32_t CROSSFIRE_BAUDRATES[] = { diff --git a/radio/src/telemetry/multi.cpp b/radio/src/telemetry/multi.cpp index fb1dac567..161e74126 100644 --- a/radio/src/telemetry/multi.cpp +++ b/radio/src/telemetry/multi.cpp @@ -158,14 +158,14 @@ static void processMultiTelemetryPaket(const uint8_t *packet) // Just an ack to our command, ignore for now break; +#if defined(MULTI_SPORT) && defined(LUA) case FrskySportPolling: - #if defined(LUA) - if (len >= 1 && outputTelemetryBuffer.size > 0 && data[0] == outputTelemetryBuffer.trigger) { + if (len >= 1 && outputTelemetryBuffer.destination == TELEMETRY_ENDPOINT_SPORT && data[0] == outputTelemetryBuffer.sport.physicalId) { TRACE("MP Sending sport data out."); sportSendBuffer(outputTelemetryBuffer.data, outputTelemetryBuffer.size); } - #endif break; +#endif default: TRACE("[MP] Unkown multi packet type 0x%02X, len %d", type, len); diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 0341c0ebd..efaf440aa 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -266,8 +266,7 @@ void telemetryInit(uint8_t protocol) // The DIY Multi module always speaks 100000 baud regardless of the telemetry protocol in use telemetryPortInit(MULTIMODULE_BAUDRATE, TELEMETRY_SERIAL_8E2); #if defined(LUA) - outputTelemetryBuffer.size = 0; - outputTelemetryBuffer.trigger = 0x7E; + outputTelemetryBuffer.reset(); #endif } else if (protocol == PROTOCOL_TELEMETRY_SPEKTRUM) { @@ -280,8 +279,7 @@ void telemetryInit(uint8_t protocol) else if (protocol == PROTOCOL_TELEMETRY_CROSSFIRE) { telemetryPortInit(CROSSFIRE_BAUDRATE, TELEMETRY_SERIAL_DEFAULT); #if defined(LUA) - outputTelemetryBufferSize = 0; - outputTelemetryBufferTrigger = 0; + outputTelemetryBuffer.reset(); #endif telemetryPortSetDirectionOutput(); } diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 72f1f77e1..a0113fbf4 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -108,8 +108,8 @@ #define LEN_MODULE_PROTOCOLS "\006" #define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M-A\0""R9MLit""R9ML-A""R9MP-A""SBUS\0" #else -#define LEN_MODULE_PROTOCOLS "\006" -#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT-A\0""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M-A\0""R9MLit""R9ML-A""R9MP-A""SBUS\0" +#define LEN_MODULE_PROTOCOLS "\013" +#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT ACCESS\0""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0""R9MLite\0 ""R9ML ACCESS""R9MP ACCESS""SBUS\0" #endif #define LEN_TELEMETRY_PROTOCOLS "\017"