1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-21 07:15:12 +03:00

A3/A4 support

This commit is contained in:
bsongis 2014-05-23 11:08:41 +02:00
parent 4164481d0a
commit daf80cad83
5 changed files with 39 additions and 6 deletions

View file

@ -1218,19 +1218,29 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val,
#if defined(FRSKY) #if defined(FRSKY)
case TELEM_MIN_A1-1: case TELEM_MIN_A1-1:
case TELEM_MIN_A2-1: case TELEM_MIN_A2-1:
#if defined(CPUARM)
case TELEM_MIN_A3-1:
case TELEM_MIN_A4-1:
#endif
channel -= TELEM_MIN_A1-TELEM_A1; channel -= TELEM_MIN_A1-TELEM_A1;
// no break // no break
case TELEM_A1-1: case TELEM_A1-1:
case TELEM_A2-1: case TELEM_A2-1:
#if defined(CPUARM)
case TELEM_A3-1:
case TELEM_A4-1:
#endif
channel -= TELEM_A1-1; channel -= TELEM_A1-1;
// A1 and A2 // A1 and A2
{ {
lcdint_t converted_value = applyChannelRatio(channel, val); lcdint_t converted_value = applyChannelRatio(channel, val);
if (g_model.frsky.channels[channel].type >= UNIT_RAW) { if (ANA_CHANNEL_UNIT(channel) >= UNIT_RAW) {
converted_value = div10_and_round(converted_value); converted_value = div10_and_round(converted_value);
} }
else { else {
#if !defined(PCBTARANIS) #if LCD_W >= 212
att |= PREC2;
#else
if (abs(converted_value) < 1000) { if (abs(converted_value) < 1000) {
att |= PREC2; att |= PREC2;
} }
@ -1238,8 +1248,6 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val,
converted_value = div10_and_round(converted_value); converted_value = div10_and_round(converted_value);
att |= PREC1; att |= PREC1;
} }
#else
att |= PREC2;
#endif #endif
} }
putsTelemetryValue(x, y, converted_value, g_model.frsky.channels[channel].type, att); putsTelemetryValue(x, y, converted_value, g_model.frsky.channels[channel].type, att);

View file

@ -163,6 +163,11 @@ uint16_t getChannelRatio(uint8_t channel)
lcdint_t applyChannelRatio(uint8_t channel, lcdint_t val) lcdint_t applyChannelRatio(uint8_t channel, lcdint_t val)
{ {
#if defined(CPUARM)
// A3 and A4 don't have ratio settings
if (channel > 1)
return val;
#endif
return ((int32_t)val+g_model.frsky.channels[channel].offset) * getChannelRatio(channel) * 2 / 51; return ((int32_t)val+g_model.frsky.channels[channel].offset) * getChannelRatio(channel) * 2 / 51;
} }
#endif #endif

View file

@ -1614,20 +1614,28 @@ PLAY_FUNCTION(playValue, uint8_t idx)
break; break;
case MIXSRC_FIRST_TELEM+TELEM_MIN_A1-1: case MIXSRC_FIRST_TELEM+TELEM_MIN_A1-1:
case MIXSRC_FIRST_TELEM+TELEM_MIN_A2-1: case MIXSRC_FIRST_TELEM+TELEM_MIN_A2-1:
#if defined(CPUARM)
case MIXSRC_FIRST_TELEM+TELEM_MIN_A3-1:
case MIXSRC_FIRST_TELEM+TELEM_MIN_A4-1:
#endif
idx -= TELEM_MIN_A1-TELEM_A1; idx -= TELEM_MIN_A1-TELEM_A1;
// no break // no break
case MIXSRC_FIRST_TELEM+TELEM_A1-1: case MIXSRC_FIRST_TELEM+TELEM_A1-1:
case MIXSRC_FIRST_TELEM+TELEM_A2-1: case MIXSRC_FIRST_TELEM+TELEM_A2-1:
#if defined(CPUARM)
case MIXSRC_FIRST_TELEM+TELEM_A3-1:
case MIXSRC_FIRST_TELEM+TELEM_A4-1:
#endif
// A1 and A2 // A1 and A2
idx -= (MIXSRC_FIRST_TELEM+TELEM_A1-1); idx -= (MIXSRC_FIRST_TELEM+TELEM_A1-1);
{ {
if (TELEMETRY_STREAMING()) { if (TELEMETRY_STREAMING()) {
uint8_t att = 0; uint8_t att = 0;
int16_t converted_value = div10_and_round(applyChannelRatio(idx, val));; int16_t converted_value = div10_and_round(applyChannelRatio(idx, val));;
if (g_model.frsky.channels[idx].type < UNIT_RAW) { if (ANA_CHANNEL_UNIT(idx) < UNIT_RAW) {
att = PREC1; att = PREC1;
} }
PLAY_NUMBER(converted_value, 1+g_model.frsky.channels[idx].type, att); PLAY_NUMBER(converted_value, 1+ANA_CHANNEL_UNIT(idx), att);
} }
break; break;
} }

View file

@ -1572,6 +1572,12 @@ getvalue_t convertLswTelemValue(LogicalSwitchData * cs);
lcdint_t applyChannelRatio(uint8_t channel, lcdint_t val); lcdint_t applyChannelRatio(uint8_t channel, lcdint_t val);
#endif #endif
#if defined(CPUARM)
#define ANA_CHANNEL_UNIT(channel) (channel > 1 ? UNIT_VOLTS : g_model.frsky.channels[channel].type)
#else
#define ANA_CHANNEL_UNIT(channel) g_model.frsky.channels[channel].type
#endif
getvalue_t div10_and_round(getvalue_t value); getvalue_t div10_and_round(getvalue_t value);

View file

@ -463,6 +463,12 @@ void frskySportProcessPacket(uint8_t *packet)
frskyData.hub.gpsFix = 0; frskyData.hub.gpsFix = 0;
} }
} }
else if (appId >= A3_FIRST_ID && appId <= A3_LAST_ID) {
frskyData.analog[2].set(SPORT_DATA_U32(packet), 0);
}
else if (appId >= A4_FIRST_ID && appId <= A4_LAST_ID) {
frskyData.analog[3].set(SPORT_DATA_U32(packet), 0);
}
else if (appId >= CELLS_FIRST_ID && appId <= CELLS_LAST_ID) { else if (appId >= CELLS_FIRST_ID && appId <= CELLS_LAST_ID) {
uint32_t cells = SPORT_DATA_U32(packet); uint32_t cells = SPORT_DATA_U32(packet);
uint8_t battnumber = cells & 0xF; uint8_t battnumber = cells & 0xF;