1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-25 17:25:13 +03:00

Spectrum analyser fixes

Compatibily issue when telemetry comes from int + ext modules
This commit is contained in:
Bertrand Songis 2019-04-29 11:52:17 +02:00
parent 14c282110d
commit d70f3a40ef
12 changed files with 13 additions and 39 deletions

View file

@ -94,7 +94,10 @@ void menuModelModuleOptions(event_t event)
}); });
if (reusableBuffer.hardwareAndSettings.moduleSettings.state == PXX2_HARDWARE_INFO && moduleState[g_moduleIdx].mode == MODULE_MODE_NORMAL) { if (reusableBuffer.hardwareAndSettings.moduleSettings.state == PXX2_HARDWARE_INFO && moduleState[g_moduleIdx].mode == MODULE_MODE_NORMAL) {
moduleState[g_moduleIdx].readModuleSettings(&reusableBuffer.hardwareAndSettings.moduleSettings); if (modelId)
moduleState[g_moduleIdx].readModuleSettings(&reusableBuffer.hardwareAndSettings.moduleSettings);
else
moduleState[g_moduleIdx].readModuleInformation(&reusableBuffer.hardwareAndSettings.modules[g_moduleIdx], PXX2_HW_INFO_TX_ID, PXX2_HW_INFO_TX_ID);
} }
if (menuEvent) { if (menuEvent) {

View file

@ -1191,7 +1191,7 @@ void menuModelSetup(event_t event)
if (bluetooth.distantAddr[0]) { if (bluetooth.distantAddr[0]) {
lcdDrawText(INDENT_WIDTH, y+1, bluetooth.distantAddr, TINSIZE); lcdDrawText(INDENT_WIDTH, y+1, bluetooth.distantAddr, TINSIZE);
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, BUTTON(TR_CLEAR), attr); lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, BUTTON(TR_CLEAR), attr);
if (attr && event == EVT_KEY_FIRST(KEY_ENTER)) { if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) {
bluetooth.state = BLUETOOTH_STATE_CLEAR_REQUESTED; bluetooth.state = BLUETOOTH_STATE_CLEAR_REQUESTED;
memclear(bluetooth.distantAddr, sizeof(bluetooth.distantAddr)); memclear(bluetooth.distantAddr, sizeof(bluetooth.distantAddr));
} }
@ -1202,8 +1202,7 @@ void menuModelSetup(event_t event)
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BUTTON_INIT, attr); lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BUTTON_INIT, attr);
else else
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BUTTON_DISCOVER, attr); lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BUTTON_DISCOVER, attr);
if (attr && event == EVT_KEY_FIRST(KEY_ENTER)) { if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) {
killEvents(KEY_ENTER);
if (bluetooth.state < BLUETOOTH_STATE_IDLE) { if (bluetooth.state < BLUETOOTH_STATE_IDLE) {
bluetooth.state = BLUETOOTH_STATE_OFF; bluetooth.state = BLUETOOTH_STATE_OFF;
} }

View file

@ -466,8 +466,7 @@ enum TelemetryProtocols
PROTOCOL_TELEMETRY_SPEKTRUM, PROTOCOL_TELEMETRY_SPEKTRUM,
PROTOCOL_TELEMETRY_FLYSKY_IBUS, PROTOCOL_TELEMETRY_FLYSKY_IBUS,
PROTOCOL_TELEMETRY_MULTIMODULE, PROTOCOL_TELEMETRY_MULTIMODULE,
PROTOCOL_TELEMETRY_LAST=PROTOCOL_TELEMETRY_MULTIMODULE, PROTOCOL_TELEMETRY_LAST=PROTOCOL_TELEMETRY_MULTIMODULE
PROTOCOL_TELEMETRY_PXX2,
}; };
enum DisplayTrims enum DisplayTrims

View file

@ -1202,7 +1202,7 @@ union ReusableBuffer
struct struct
{ {
uint8_t bars[LCD_W]; int8_t bars[LCD_W];
uint32_t freq; uint32_t freq;
uint32_t span; uint32_t span;
uint32_t step; uint32_t step;

View file

@ -263,7 +263,7 @@ void setupPulsesInternalModule(uint8_t protocol)
#if defined(PXX2) #if defined(PXX2)
case PROTOCOL_CHANNELS_PXX2: case PROTOCOL_CHANNELS_PXX2:
intmodulePulsesData.pxx2.setupFrame(INTERNAL_MODULE); intmodulePulsesData.pxx2.setupFrame(INTERNAL_MODULE);
scheduleNextMixerCalculation(INTERNAL_MODULE, moduleState[INTERNAL_MODULE].mode == MODULE_MODE_SPECTRUM_ANALYSER || moduleState[INTERNAL_MODULE].mode == MODULE_MODE_POWER_METER ? 1 : PXX2_PERIOD); scheduleNextMixerCalculation(INTERNAL_MODULE, moduleState[INTERNAL_MODULE].mode == MODULE_MODE_SPECTRUM_ANALYSER || moduleState[INTERNAL_MODULE].mode == MODULE_MODE_POWER_METER ? PXX2_TOOLS_PERIOD : PXX2_PERIOD);
break; break;
#endif #endif

View file

@ -29,6 +29,7 @@
#define PXX2_ON_SPORT_BAUDRATE 230400 #define PXX2_ON_SPORT_BAUDRATE 230400
#define PXX2_PERIOD 4 // 4ms #define PXX2_PERIOD 4 // 4ms
#define PXX2_TOOLS_PERIOD 1 // 1ms
#define PXX2_FRAME_MAXLENGTH 64 #define PXX2_FRAME_MAXLENGTH 64
#define PXX_PULSES_PERIOD 9/*ms*/ #define PXX_PULSES_PERIOD 9/*ms*/

View file

@ -267,13 +267,6 @@ void Pxx2Pulses::setupResetFrame(uint8_t module)
void Pxx2Pulses::setupSpectrumAnalyser(uint8_t module) void Pxx2Pulses::setupSpectrumAnalyser(uint8_t module)
{ {
if (moduleState[module].counter > 1000) {
moduleState[module].counter = 1002;
return;
}
moduleState[module].counter = 1002;
addFrameType(PXX2_TYPE_C_POWER_METER, PXX2_TYPE_ID_SPECTRUM); addFrameType(PXX2_TYPE_C_POWER_METER, PXX2_TYPE_ID_SPECTRUM);
Pxx2Transport::addByte(0x00); Pxx2Transport::addByte(0x00);
Pxx2Transport::addWord(reusableBuffer.spectrumAnalyser.freq); Pxx2Transport::addWord(reusableBuffer.spectrumAnalyser.freq);
@ -283,16 +276,8 @@ void Pxx2Pulses::setupSpectrumAnalyser(uint8_t module)
void Pxx2Pulses::setupPowerMeter(uint8_t module) void Pxx2Pulses::setupPowerMeter(uint8_t module)
{ {
if (moduleState[module].counter > 1000) {
moduleState[module].counter = 1002;
return;
}
moduleState[module].counter = 1002;
addFrameType(PXX2_TYPE_C_POWER_METER, PXX2_TYPE_ID_POWER_METER); addFrameType(PXX2_TYPE_C_POWER_METER, PXX2_TYPE_ID_POWER_METER);
Pxx2Transport::addByte(0x00); Pxx2Transport::addByte(0x00);
Pxx2Transport::addWord(reusableBuffer.powerMeter.freq); Pxx2Transport::addWord(reusableBuffer.powerMeter.freq);
} }

View file

@ -127,7 +127,7 @@ extern "C" void TELEMETRY_DMA_TX_IRQHandler(void)
if (DMA_GetITStatus(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC)) { if (DMA_GetITStatus(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC)) {
DMA_ClearITPendingBit(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC); DMA_ClearITPendingBit(TELEMETRY_DMA_Stream_TX, TELEMETRY_DMA_TX_FLAG_TC);
TELEMETRY_USART->CR1 |= USART_CR1_TCIE; TELEMETRY_USART->CR1 |= USART_CR1_TCIE;
if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT || telemetryProtocol == PROTOCOL_TELEMETRY_PXX2) { if (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) {
outputTelemetryBuffer.reset(); outputTelemetryBuffer.reset();
} }
} }

View file

@ -218,7 +218,7 @@ void processSpectrumAnalyserFrame(uint8_t module, uint8_t * frame)
// TRACE("Fq=%u, Pw=%d, X=%d, Y=%d", *frequency, int32_t(*power), D * 128 / 40000000, int32_t(127 + *power)); // TRACE("Fq=%u, Pw=%d, X=%d, Y=%d", *frequency, int32_t(*power), D * 128 / 40000000, int32_t(127 + *power));
int32_t position = *frequency - (reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2); int32_t position = *frequency - (reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2);
int32_t x = (position * LCD_W / 8) / (reusableBuffer.spectrumAnalyser.span / 8); uint32_t x = (position * LCD_W / 8) / (reusableBuffer.spectrumAnalyser.span / 8);
if (x < LCD_W) { if (x < LCD_W) {
reusableBuffer.spectrumAnalyser.bars[x] = 127 + *power; reusableBuffer.spectrumAnalyser.bars[x] = 127 + *power;
} }

View file

@ -170,7 +170,7 @@ void sportProcessTelemetryPacketWithoutCrc(uint8_t origin, const uint8_t * packe
data = SPORT_DATA_U8(packet); data = SPORT_DATA_U8(packet);
if (g_model.rssiSource) { if (g_model.rssiSource) {
TelemetrySensor * sensor = & g_model.telemetrySensors[g_model.rssiSource]; TelemetrySensor * sensor = & g_model.telemetrySensors[g_model.rssiSource];
if (sensor->instance == instance) { if (sensor->isSameInstance(TELEM_PROTO_FRSKY_SPORT, instance)) {
telemetryData.rssi.set(data); telemetryData.rssi.set(data);
} }
} }

View file

@ -292,12 +292,6 @@ void telemetryInit(uint8_t protocol)
} }
#endif #endif
else if (protocol == PROTOCOL_TELEMETRY_PXX2) {
telemetryPortInit(PXX2_ON_SPORT_BAUDRATE, TELEMETRY_SERIAL_WITHOUT_DMA);
#if defined(LUA)
outputTelemetryBuffer.reset();
#endif
}
else { else {
telemetryPortInit(FRSKY_SPORT_BAUDRATE, TELEMETRY_SERIAL_WITHOUT_DMA); telemetryPortInit(FRSKY_SPORT_BAUDRATE, TELEMETRY_SERIAL_WITHOUT_DMA);
#if defined(LUA) #if defined(LUA)

View file

@ -126,13 +126,6 @@ inline uint8_t modelTelemetryProtocol()
return g_model.telemetryProtocol; return g_model.telemetryProtocol;
} }
if (!IS_INTERNAL_MODULE_ENABLED() && isModulePXX2(EXTERNAL_MODULE)) {
return PROTOCOL_TELEMETRY_PXX2;
}
if (!IS_INTERNAL_MODULE_ENABLED() && isModulePXX(EXTERNAL_MODULE)) {
return PROTOCOL_TELEMETRY_FRSKY_SPORT;
}
#if defined(MULTIMODULE) #if defined(MULTIMODULE)
if (!IS_INTERNAL_MODULE_ENABLED() && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE) { if (!IS_INTERNAL_MODULE_ENABLED() && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE) {
return PROTOCOL_TELEMETRY_MULTIMODULE; return PROTOCOL_TELEMETRY_MULTIMODULE;