- Posts: 3333
DSM Telemetry support
- vlad_vy
- Offline
Please Log in or Create an account to join the conversation.
- RandMental
- Offline
- Posts: 521
Please Log in or Create an account to join the conversation.
- kenkenlau
- Offline
- Posts: 35
Byte
16h 00h, Alt(X.Xm), Alt(x10m), LAT_LSB, LAT, LAT, LAT_MSB, LON_LSB, LON, LON, LON_MSB, HDG_L, HDG_H, unknown, LON+WE+NS
17h 00h, Speed_L, Speed_H, unknown, SS,MM,HH, Sats, Alt(x100m), unknown, unknown, unknown, unknown, unknown, unknown
the last byte of 16h is as follow:
8-bit XXXX XLWN
L=longitude first bit
W= West / East
N= North / South
when SATS no. is less than 3, the alt will be blocked by DX8
Please Log in or Create an account to join the conversation.
- vlad_vy
- Offline
- Posts: 3333
kenkenlau wrote: the last byte of 16h is as follow:
8-bit XXXX XLWN
L=longitude first bit
W= West / East
N= North / South
What does it mean "L=longitude first bit"? Can you provide any example?
Data type = 0x16 GPS Sensor
0[00] 22(0x16)
1[01] 00
2[02] Altitude LSB (Decimal) //In 0.1m
3[03] Altitude MSB (Decimal)
4[04] 1/100th of a degree second latitude (Decimal) (XX YY.SSSS)
5[05] degree seconds latitude (Decimal)
6[06] degree minutes latitude (Decimal)
7[07] degrees latitude (Decimal)
8[08] 1/100th of a degree second longitude (Decimal) (XX YY.SSSS)
9[09] degree seconds longitude (Decimal)
10[0A] degree minutes longitude (Decimal)
11[0B] degrees longitude (Decimal)
12[0C] Heading LSB (Decimal)
13[0D] Heading MSB (Decimal) Divide by 10 for Degrees
14[0E] Unknown
15[0F] First bit for latitude: 1=N(+), 0=S(-);
Second bit for longitude: 1=E(+), 0=W(-);
Third bit for longitude over 99 degrees: 1=+-100 degrees
Data type = 0x17 GPS Sensor
0[00] 23(0x17)
1[01] 00
2[02] Speed LSB (Decimal)
3[03] Speed MSB (Decimal) Divide by 10 for Knots. Multiply by 0.185 for Kph and 0.115 for Mph
4[04] UTC Time LSB (Decimal) 1/100th sec. (HH:MM:SS.SS)
5[05] UTC Time (Decimal) = SS
6[06] UTC Time (Decimal) = MM
7[07] UTC Time MSB (Decimal) = HH
8[08] Number of Sats (Decimal)
9[09] Altitude in 1000m (Decimal) Altitude = Value * 10000 + Altitude(0x16) (in 0.1m)
10[0A]-15[0F] Unused (But contains Data left in buffer)
Please Log in or Create an account to join the conversation.
- vlad_vy
- Offline
- Posts: 3333
Please Log in or Create an account to join the conversation.
- kenkenlau
- Offline
- Posts: 35
vlad_vy wrote:
What does it mean "L=longitude first bit"? Can you provide any example?
15[0F] First bit for latitude: 1=N(+), 0=S(-);
Second bit for longitude: 1=E(+), 0=W(-);
Third bit for longitude over 99 degrees: 1=+-100 degrees
I think you have a better description. The 4 bytes cover 99.999999E to 99.999999W of Longitude only. That bit will set the Long 1XX.XXXXXX
Please Log in or Create an account to join the conversation.
- vlad_vy
- Offline
- Posts: 3333
//===============================================================
Data type = 0x03 High Current Sensor
0 [00] 03
1 [01] 00
2 [02] MSB (Hex) //16bit signed integer
3 [03] LSB (Hex) //In 0.196791A
4 [04] 00
5 [05] 00
6 [06] 00
7 [07] 00
8 [08] 00
9 [09] 00
10 [0A] 00
11 [0B] 00
12 [0C] 00
13 [0D] 00
14 [0E] 00
15 [0F] 00
//===============================================================
Data type = 0x0A PowerBox Sensor
0 [00] 0x0A
1 [01] 00
2 [02] V1 MSB (Hex)
3 [03] V1 LSB (Hex) //In 0.01V
4 [04] V2 MSB (Hex)
5 [05] V2 LSB (Hex) //In 0.01V
6 [06] Cap1 MSB (Hex)
7 [07] Cap1 LSB (Hex) //In 1mAh
8 [08] Cap2 MSB (Hex)
9 [09] Cap2 LSB (Hex) //In 1mAh
10 [0A] 00
11 [0B] 00
12 [0C] 00
13 [0D] 00
14 [0E] 00
15 [0F] Alarm // The fist bit is alarm V1, the second V2, the third Capacity 1, the 4th capacity 2.
//===============================================================
Data type = 0x11 AirSpeed Sensor
0[00] 17(0x11)
1[01] 00
2[02] Speed MSB (Hex)
3[03] Speed LSB (Hex) //In 1 km/h
4[04] Unknown
5[05] Unknown
6[06] Unknown
7[07] Unknown
8[08] Unknown
9[09] Unknown
10[0A] Unknown
11[0B] Unknown
12[0C] Unknown
13[0D] Unknown
14[0E] Unknown
15[0F] Unknown
//===============================================================
Data type = 0x12 Altimeter Sensor
0[00] 18(0x12)
1[01] 00
2[02] Altitude MSB (Hex)
3[03] Altitude LSB (Hex) 16bit signed integer, in 0.1m
4[04] Max Altitude MSB (Hex)
5[05] Max Altitude LSB (Hex) 16bit signed integer, in 0.1m
6[05] Unknown
7[07] Unknown
8[08] Unknown
9[09] Unknown
10[0A] Unknown
11[0B] Unknown
12[0C] Unknown
13[0D] Unknown
14[0E] Unknown
15[0F] Unknown
//===============================================================
Data type = 0x14 Gforce Sensor
0[00] 20(0x14)
1[01] 00
2[02] x MSB (Hex, signed integer)
3[03] x LSB (Hex, signed integer) //In 0.01g
4[04] y MSB (Hex, signed integer)
5[05] y LSB (Hex, signed integer) //In 0.01g
6[06] z MSB (Hex, signed integer)
7[07] z LSB (Hex, signed integer) //In 0.01g
8[08] x max MSB (Hex, signed integer)
9[09] x max LSB (Hex, signed integer) //In 0.01g
10[0A] y max MSB (Hex, signed integer)
11[0B] y max LSB (Hex, signed integer) //In 0.01g
12[0C] z max MSB (Hex, signed integer)
13[0D] z max LSB (Hex, signed integer) //In 0.01g
14[0E] z min MSB (Hex, signed integer)
15[0F] z min LSB (Hex, signed integer) //In 0.01g
//===============================================================
Data type = 0x15 JetCat Sensor
0[00] 21(0x15)
1[01] 00
2[02] Status
3[03] Throttle //up to 159% (the upper nibble is 0-f, the lower nibble 0-9)
4[04] Pack_Volt LSB (Decimal)
5[05] Pack_Volt MSB (Decimal) //In 0.01V
6[06] Pump_Volt LSB (Decimal)
7[07] Pump_Volt MSB (Decimal) //In 0.01V
8[08] RPM LSB (Decimal) //Up to 999999rpm
9[09] RPM Mid (Decimal)
10[0A] RPM MSB (Decimal)
11[0B] 00
12[0C] TempEGT (Decimal) LSB
13[0D] TempEGT (Decimal) MSB //used only lover nibble, up to 999°C
14[0E] Off_Condition
15[0F] 00
//**************************************************************
//Messages for Status:
//0x00:OFF
//0x01:WAIT FOR RPM
//0x02:IGNITE
//0x03;ACCELERATE
//0x04:STABILIZE
//0x05:LEARN HIGH
//0x06:LEARN LOW
//0x07:undef
//0x08:SLOW DOWN
//0x09:MANUAL
//0x0a,0x10:AUTO OFF
//0x0b,0x11:RUN
//0x0c,0x12:ACCELERATION DELAY
//0x0d,0x13:SPEED REG
//0x0e,0x14:TWO SHAFT REGULATE
//0x0f,0x15:PRE HEAT
//0x16:PRE HEAT 2
//0x17:MAIN F START
//0x18:not used
//0x19:KERO FULL ON
//0x1a:MAX STATE
//**************************************************************
//Messages for Off_Condition:
//0x00:NA
//0x01:OFF BY RC
//0x02:OVER TEMPERATURE
//0x03:IGNITION TIMEOUT
//0x04:ACCELERATION TIMEOUT
//0x05:ACCELERATION TOO SLOW
//0x06:OVER RPM
//0x07:LOW RPM OFF
//0x08:LOW BATTERY
//0x09:AUTO OFF
//0x0a,0x10:LOW TEMP OFF
//0x0b,0x11:HIGH TEMP OFF
//0x0c,0x12:GLOW PLUG DEFECTIVE
//0x0d,0x13:WATCH DOG TIMER
//0x0e,0x14:FAIL SAFE OFF
//0x0f,0x15:MANUAL OFF
//0x16:POWER BATT FAIL
//0x17:TEMP SENSOR FAIL
//0x18:FUEL FAIL
//0x19:PROP FAIL
//0x1a:2nd ENGINE FAIL
//0x1b:2nd ENGINE DIFFERENTIAL TOO HIGH
//0x1c:2nd ENGINE NO COMMUNICATION
//0x1d:MAX OFF CONDITION
//===============================================================
Data type = 0x16 GPS Sensor (always second GPS packet)
0[00] 22(0x16)
1[01] 00
2[02] Altitude LSB (Decimal) //In 0.1m
3[03] Altitude MSB (Decimal) //Altitude = Altitude(0x17) * 10000 + Value (in 0.1m)
4[04] 1/10000 degree minutes latitude (Decimal) (DD MM.MMMM)
5[05] 1/100 degree minutes latitude (Decimal)
6[06] degree minutes latitude (Decimal)
7[07] degrees latitude (Decimal)
8[08] 1/10000 degree minutes longitude (Decimal) (DD MM.MMMM)
9[09] 1/100 degree minutes longitude (Decimal)
10[0A] degree minutes longitude (Decimal)
11[0B] degrees longitude (Decimal)
12[0C] Heading LSB (Decimal)
13[0D] Heading MSB (Decimal) Divide by 10 for Degrees
14[0E] Unknown
15[0F] First bit for latitude: 1=N(+), 0=S(-);
Second bit for longitude: 1=E(+), 0=W(-);
Third bit for longitude over 99 degrees: 1=+-100 degrees
//===============================================================
Data type = 0x17 GPS Sensor (always first GPS packet)
0[00] 23(0x17)
1[01] 00
2[02] Speed LSB (Decimal)
3[03] Speed MSB (Decimal) //Divide by 10 for Knots. Multiply by 0.185 for Kph and 0.115 for Mph
4[04] UTC Time LSB (Decimal) 1/100th sec. (HH:MM:SS.SS)
5[05] UTC Time (Decimal) = SS
6[06] UTC Time (Decimal) = MM
7[07] UTC Time MSB (Decimal) = HH
8[08] Number of Sats (Decimal)
9[09] Altitude in 1000m (Decimal)
10[0A]-15[0F] Unused (But contains Data left in buffer)
//===============================================================
Data type = 7E{TM1000} or FE{TM1100}
0[00] 7E or FE
1[01] 00
2[02] RPM MSB (Hex)
3[03] RPM LSB (Hex) //RPM = 120000000 / number_of_poles(2, 4, ... 32) / gear_ratio(0.01 - 30.99) / Value
4[04] Volt MSB (Hex)
5[05] Volt LSB (Hex) //In 0.01V
6[06] Temp MSB (Hex)
7[07] Temp LSB (Hex) //Value (Decimal) is in Fahrenheit, for Celsius (Value (Decimal) - 32) * 5) / 9)
8[08] Unknown
9[09] Unknown
10[0A] Unknown
11[0B] Unknown
12[0C] Unknown
13[0D] Unknown
14[0E] Unknown
15[0F] Unknown
//===============================================================
Data type = 7F{TM1000} or FF{TM1100}
0[00] 7F or FF
1[01] 00
2[02] A MSB (Hex)
3[03] A LSB (Hex)
4[04] B MSB (Hex)
5[05] B LSB (Hex)
6[06] L MSB (Hex)
7[07] L LSB (Hex) //0xFFFF = NC (not connected)
8[08] R MSB (Hex)
9[09] R LSB (Hex) //0xFFFF = NC (not connected)
10[0A] Frame loss MSB (Hex)
11[0B] Frame loss LSB (Hex)
12[0C] Holds MSB (Hex)
13[0D] Holds LSB (Hex)
14[0E] Receiver Volts MSB (Hex) //In 0.01V
15[0F] Receiver Volts LSB (Hex)
//===============================================================
If anybody have any additions or corrections, it's the time to ...
Please Log in or Create an account to join the conversation.
- vlad_vy
- Offline
- Posts: 3333
Please Log in or Create an account to join the conversation.
- kicaj222
- Offline
- Posts: 4
will telemetry work with 7e and TM1100 ?
thanks
Please Log in or Create an account to join the conversation.
- RW9UAO
- Offline
- Posts: 25
Please Log in or Create an account to join the conversation.
- vlad_vy
- Offline
- Posts: 3333
Please Log in or Create an account to join the conversation.
- Parees
- Offline
- Posts: 15
vlad_vy wrote: PowerBox Sensor verified = OK. Only JetCat Sensor remains untested.
Could you confirm that the powerbox sensor was verified on the officially released (3.0.0) version of the firmware? Or are you referring to a test version?
Thanks.
Please Log in or Create an account to join the conversation.
- vlad_vy
- Offline
- Posts: 3333
We need ask PB to extend Spektrum DSM(X) telemetry support.
Possible we need in future completely divide telemetry support, parsing and setup by protocols, since telemetry sensors set and data structures very different among different protocols.
Please Log in or Create an account to join the conversation.
- vlad_vy
- Offline
- Posts: 3333
//===============================================================
Data type = 0x15 JetCat Sensor
0[00] 21(0x15)
1[01] 00
2[02] Status
3[03] Throttle //up to 159% (the upper nibble is 0-f, the lower nibble 0-9)
4[04] Pack_Volt LSB (Decimal)
5[05] Pack_Volt MSB (Decimal) //In 0.01V
6[06] Pump_Volt LSB (Decimal)
7[07] Pump_Volt MSB (Decimal) //In 0.01V
8[08] RPM LSB (Decimal) //Up to 999999rpm
9[09] RPM Mid (Decimal)
10[0A] RPM MSB (Decimal)
11[0B] 00
12[0C] TempEGT (Decimal) LSB
13[0D] TempEGT (Decimal) MSB //used only lover nibble, up to 999°C
14[0E] Off_Condition
15[0F] 00
//**************************************************************
//Messages for Status:
//0x00:OFF
//0x01:WAIT FOR RPM
//0x02:IGNITE
//0x03;ACCELERATE
//0x04:STABILIZE
//0x05:LEARN HIGH
//0x06:LEARN LOW
//0x07:undef
//0x08:SLOW DOWN
//0x09:MANUAL
//0x0a,0x10:AUTO OFF
//0x0b,0x11:RUN
//0x0c,0x12:ACCELERATION DELAY
//0x0d,0x13:SPEED REG
//0x0e,0x14:TWO SHAFT REGULATE
//0x0f,0x15:PRE HEAT
//0x16:PRE HEAT 2
//0x17:MAIN F START
//0x18:not used
//0x19:KERO FULL ON
//0x1a:MAX STATE
//**************************************************************
//Messages for Off_Condition:
//0x00:NA
//0x01:OFF BY RC
//0x02:OVER TEMPERATURE
//0x03:IGNITION TIMEOUT
//0x04:ACCELERATION TIMEOUT
//0x05:ACCELERATION TOO SLOW
//0x06:OVER RPM
//0x07:LOW RPM OFF
//0x08:LOW BATTERY
//0x09:AUTO OFF
//0x0a,0x10:LOW TEMP OFF
//0x0b,0x11:HIGH TEMP OFF
//0x0c,0x12:GLOW PLUG DEFECTIVE
//0x0d,0x13:WATCH DOG TIMER
//0x0e,0x14:FAIL SAFE OFF
//0x0f,0x15:MANUAL OFF
//0x16:POWER BATT FAIL
//0x17:TEMP SENSOR FAIL
//0x18:FUEL FAIL
//0x19:PROP FAIL
//0x1a:2nd ENGINE FAIL
//0x1b:2nd ENGINE DIFFERENTIAL TOO HIGH
//0x1c:2nd ENGINE NO COMMUNICATION
//0x1d:MAX OFF CONDITION
//===============================================================
static void parse_telemetry_packet()
{
static s32 altitude;
u32 time_ms = CLOCK_getms();
switch(packet[0]) {
case 0x7f: //TM1000 Flight log
case 0xff: //TM1100 Flight log
//Telemetry.fadesA = ((s32)packet[2] << 8) | packet[3]; //0xFFFF = NC (not connected)
//Telemetry.fadesB = ((s32)packet[4] << 8) | packet[5]; //0xFFFF = NC (not connected)
//Telemetry.fadesL = ((s32)packet[6] << 8) | packet[7]; //0xFFFF = NC (not connected)
//Telemetry.fadesR = ((s32)packet[8] << 8) | packet[9]; //0xFFFF = NC (not connected)
//Telemetry.frameloss = ((s32)packet[10] << 8) | packet[11];
//Telemetry.holds = ((s32)packet[12] << 8) | packet[13];
Telemetry.volt[1] = ((((s32)packet[14] << 8) | packet[15]) + 5) / 10; //In 1/10 of Volts
Telemetry.time[0] = time_ms;
Telemetry.time[1] = Telemetry.time[0];
break;
case 0x7e: //TM1000
case 0xfe: //TM1100
Telemetry.rpm[0] = (packet[2] << 8) | packet[3];
if ((Telemetry.rpm[0] == 0xffff) || (Telemetry.rpm[0] < 200))
Telemetry.rpm[0] = 0;
else
Telemetry.rpm[0] = 120000000 / 2 / Telemetry.rpm[0]; //In RPM (2 = number of poles)
//Telemetry.rpm[0] = 120000000 / number_of_poles(2, 4, ... 32) / gear_ratio(0.01 - 30.99) / Telemetry.rpm[0];
//by default number_of_poles = 2, gear_ratio = 1.00
Telemetry.volt[0] = ((((s32)packet[4] << 8) | packet[5]) + 5) / 10; //In 1/10 of Volts
Telemetry.temp[0] = ((s32)((s16)(packet[6] << 8) | packet[7]) - 32) * 5 / 9; //In degrees-C (16Bit signed integer)
if (Telemetry.temp[0] > 500 || Telemetry.temp[0] < -100)
Telemetry.temp[0] = 0;
Telemetry.time[0] = time_ms;
Telemetry.time[1] = Telemetry.time[0];
break;
case 0x03: //High Current sensor
//Telemetry.current = (s32)((s16)(packet[2] << 8) | packet[3]) * 196791 / 100000; //In 1/10 of Amps (16bit signed integer, 1 unit is 0.196791A)
//Telemetry.time[x1] = time_ms;
break;
case 0x0a: //Powerbox sensor
//Telemetry.pwb.volt1 = (((s32)packet[2] << 8) | packet[3] + 5) /10; //In 1/10 of Volts
//Telemetry.pwb.volt1 = (((s32)packet[4] << 8) | packet[5] + 5) /10; //In 1/10 of Volts
//Telemetry.pwb.capacity1 = ((s32)packet[6] << 8) | packet[7]; //In mAh
//Telemetry.pwb.capacity2 = ((s32)packet[8] << 8) | packet[9]; //In mAh
//Telemetry.pwb.alarm_v1 = packet[15] & 0x01; //0 = disable, 1 = enable
//Telemetry.pwb.alarm_v2 = (packet[15] >> 1) & 0x01; //0 = disable, 1 = enable
//Telemetry.pwb.alarm_c1 = (packet[15] >> 2) & 0x01; //0 = disable, 1 = enable
//Telemetry.pwb.alarm_c2 = (packet[15] >> 3) & 0x01; //0 = disable, 1 = enable
//Telemetry.time[x2] = time_ms;
break;
case 0x11: //AirSpeed sensor
//Telemetry.airspeed = ((s32)packet[2] << 8) | packet[3]; //In km/h (16Bit value, 1 unit is 1 km/h)
//Telemetry.time[x3] = time_ms;
break;
case 0x12: //Altimeter sensor
//Telemetry.altitude = (s16)(packet[2] << 8) | packet[3]; //In 0.1 meters (16Bit signed integer, 1 unit is 0.1m)
//Telemetry.time[x4] = time_ms;
break;
case 0x14: //G-Force sensor
//Telemetry.gforce.x = (s16)(packet[2] << 8) | packet[3]; //In 0.01g (16Bit signed integers, unit is 0.01g)
//Telemetry.gforce.y = (s16)(packet[4] << 8) | packet[5];
//Telemetry.gforce.z = (s16)(packet[6] << 8) | packet[7];
//Telemetry.gforce.xmax = (s16)(packet[8] << 8) | packet[9];
//Telemetry.gforce.ymax = (s16)(packet[10] << 8) | packet[11];
//Telemetry.gforce.zmax = (s16)(packet[12] << 8) | packet[13];
//Telemetry.gforce.zmin = (s16)(packet[14] << 8) | packet[15];
//Telemetry.time[x5] = time_ms;
break;
case 0x15: //JetCat sensor
//Telemetry.jc.status = packet[2];
//Possible messages for status:
//0x00:OFF
//0x01:WAIT FOR RPM
//0x02:IGNITE
//0x03;ACCELERATE
//0x04:STABILIZE
//0x05:LEARN HIGH
//0x06:LEARN LOW
//0x07:undef
//0x08:SLOW DOWN
//0x09:MANUAL
//0x0a,0x10:AUTO OFF
//0x0b,0x11:RUN
//0x0c,0x12:ACCELERATION DELAY
//0x0d,0x13:SPEED REG
//0x0e,0x14:TWO SHAFT REGULATE
//0x0f,0x15:PRE HEAT
//0x16:PRE HEAT 2
//0x17:MAIN F START
//0x18:not used
//0x19:KERO FULL ON
//0x1a:MAX STATE
//Telemetry.jc.throttle = (packet[3] >> 4) * 10 + (packet[3] & 0x0f); //up to 159% (the upper nibble is 0-f, the lower nibble 0-9)
//Telemetry.jc.pack_volt = (((packet[5] >> 4) * 10 + (packet[5] & 0x0f)) * 100
// + (packet[4] >> 4) * 10 + (packet[4] & 0x0f) + 5) / 10; //In 1/10 of Volts
//Telemetry.jc.pump_volt = (((packet[7] >> 6) * 10 + (packet[7] & 0x0f)) * 100
// + (packet[6] >> 4) * 10 + (packet[6] & 0x0f) + 5) / 10; //In 1/10 of Volts (low voltage)
//Telemetry.jc.rpm = ((packet[10] >> 4) * 10 + (packet[10] & 0x0f)) * 10000
// + ((packet[9] >> 4) * 10 + (packet[9] & 0x0f)) * 100
// + ((packet[8] >> 4) * 10 + (packet[8] & 0x0f)); //RPM up to 999999
//Telemetry.jc.tempEGT = (packet[13] & 0x0f) * 100 + (packet[12] >> 4) * 10 + (packet[12] & 0x0f); //EGT temp up to 999°C
//Telemetry.jc.off_condition = packet[14];
//Messages for Off_Condition:
//0x00:NA
//0x01:OFF BY RC
//0x02:OVER TEMPERATURE
//0x03:IGNITION TIMEOUT
//0x04:ACCELERATION TIMEOUT
//0x05:ACCELERATION TOO SLOW
//0x06:OVER RPM
//0x07:LOW RPM OFF
//0x08:LOW BATTERY
//0x09:AUTO OFF
//0x0a,0x10:LOW TEMP OFF
//0x0b,0x11:HIGH TEMP OFF
//0x0c,0x12:GLOW PLUG DEFECTIVE
//0x0d,0x13:WATCH DOG TIMER
//0x0e,0x14:FAIL SAFE OFF
//0x0f,0x15:MANUAL OFF
//0x16:POWER BATT FAIL
//0x17:TEMP SENSOR FAIL
//0x18:FUEL FAIL
//0x19:PROP FAIL
//0x1a:2nd ENGINE FAIL
//0x1b:2nd ENGINE DIFFERENTIAL TOO HIGH
//0x1c:2nd ENGINE NO COMMUNICATION
//0x1d:MAX OFF CONDITION
//Telemetry.time[x6] = time_ms;
break;
case 0x16: //GPS sensor (always second GPS packet)
altitude += (((packet[3] >> 4) * 10 + (packet[3] & 0x0f)) * 100
+ ((packet[2] >> 4) * 10 + (packet[2] & 0x0f))) * 100; //In meters * 1000 (16Bit decimal, 1 unit is 0.1m)
Telemetry.gps.altitude = altitude;
Telemetry.gps.latitude = ((packet[7] >> 4) * 10 + (packet[7] & 0x0f)) * 3600000
+ ((packet[6] >> 4) * 10 + (packet[6] & 0x0f)) * 60000
+ ((packet[5] >> 4) * 10 + (packet[5] & 0x0f)) * 600
+ ((packet[4] >> 4) * 10 + (packet[4] & 0x0f)) * 6; // (decimal, format DD MM.SSSS)
if ((packet[15] & 0x01) == 0)
Telemetry.gps.latitude *= -1; //1=N(+), 0=S(-)
Telemetry.gps.longitude = ((packet[11] >> 4) * 10 + (packet[11] & 0x0f)) * 3600000
+ ((packet[10] >> 4) * 10 + (packet[10] & 0x0f)) * 60000
+ ((packet[9] >> 4) * 10 + (packet[9] & 0x0f)) * 600
+ ((packet[8] >> 4) * 10 + (packet[8] & 0x0f)) * 6; // (decimal, format DD MM.SSSS)
if ((packet[15] & 0x04) == 4)
Telemetry.gps.longitude += 360000000; //1=+100 degrees
if ((packet[15] & 0x02) == 0)
Telemetry.gps.longitude *= -1; //1=E(+), 0=W(-)
//Telemetry.gps.heading = ((packet[13] >> 4) * 10 + (packet[13] & 0x0f)) * 10
// + ((packet[12] >> 4) * 10 + (packet[12] & 0x0f)) / 10; //In degrees (16Bit decimal, 1 unit is 0.1 degree)
Telemetry.time[2] = time_ms;
break;
case 0x17: //GPS sensor (always first GPS packet)
Telemetry.gps.velocity = (((packet[3] >> 4) * 10 + (packet[3] & 0x0f)) * 100
+ ((packet[2] >> 4) * 10 + (packet[2] & 0x0f))) * 5556 / 108; //In m/s * 1000
u8 hour = (packet[7] >> 4) * 10 + (packet[7] & 0x0f);
u8 min = (packet[6] >> 4) * 10 + (packet[6] & 0x0f);
u8 sec = (packet[5] >> 4) * 10 + (packet[5] & 0x0f);
//u8 ssec = (packet[4] >> 4) * 10 + (packet[4] & 0x0f);
u8 day = 0;
u8 month = 0;
u8 year = 0; // + 2000
Telemetry.gps.time = ((year & 0x3F) << 26)
| ((month & 0x0F) << 22)
| ((day & 0x1F) << 17)
| ((hour & 0x1F) << 12)
| ((min & 0x3F) << 6)
| ((sec & 0x3F) << 0);
//Telemetry.gps.sats = ((packet[8] >> 4) * 10 + (packet[8] & 0x0f));
altitude = ((packet[9] >> 4) * 10 + (packet[9] & 0x0f)) * 1000000; //In 1000 meters * 1000 (8Bit decimal, 1 unit is 1000m)
Telemetry.time[2] = time_ms;
break;
}
}
Please Log in or Create an account to join the conversation.
- vlad_vy
- Offline
- Posts: 3333
Please Log in or Create an account to join the conversation.
- PhracturedBlue
- Topic Author
- Offline
- Posts: 4402
a) We don't have room on the devo7e for the full DSM* telemetry parser. So I need to do something special there
b) The telemetry display needs to be completely reworked to support the additional information
c) the alarms likely need to be reworked to support the additional info.
I'm not sure what you mean by sensor logs, but if you mean a flight-log (including telemetry) then that will likely happen 1st, as it should be easier to implement.
Please Log in or Create an account to join the conversation.
- vlad_vy
- Offline
- Posts: 3333
Please Log in or Create an account to join the conversation.
- Sid3ways
- Offline
- Posts: 9
I'm in the market to pick up another Devo12 or Devo 8 and curious as to the advancements made thus far. I guess I should probably go read the release notes too. Keep up the great work!
Please Log in or Create an account to join the conversation.
- PhracturedBlue
- Topic Author
- Offline
- Posts: 4402
There are 32 new variables that need to be managed to fully support DSM2 telemetry. How do DSM transmitters handle this info? Is it all displayed? Storing and logging it would be trivial, But I'm not sure it is worth the effort to display all of it on the Tx. Does anyone here actually have (and use) these sensors?
Please Log in or Create an account to join the conversation.
- briareos7777
- Offline
- Posts: 11
Please Log in or Create an account to join the conversation.
- Home
- Forum
- Development
- Protocol Development
- DSM Telemetry support