diff --git a/Multiprotocol/HOTT_cc2500.ino b/Multiprotocol/HOTT_cc2500.ino index 6344983..77a6741 100644 --- a/Multiprotocol/HOTT_cc2500.ino +++ b/Multiprotocol/HOTT_cc2500.ino @@ -17,10 +17,12 @@ #include "iface_cc2500.h" -#define HOTT_COARSE 0 +//#define HOTT_FORCE_ID // Force ID of original dump + #define HOTT_TX_PACKET_LEN 50 #define HOTT_RX_PACKET_LEN 22 #define HOTT_PACKET_PERIOD 10000 +#define HOTT_COARSE 0 enum { HOTT_START = 0x00, @@ -60,7 +62,7 @@ enum { const PROGMEM uint8_t HOTT_init_values[] = { /* 00 */ 0x2F, 0x2E, 0x2F, 0x00, 0xD3, 0x91, 0x32, 0x04, /* 08 */ 0x44, 0x00, 0x00, 0x09, 0x00, 0x5C, 0x6C, HOTT_FREQ0_VAL + HOTT_COARSE, - /* 10 */ 0x2D, 0x3B, 0x73, 0xA3, 0xAA, 0x47, 0x07, 0x00, //original 0x17=0 + /* 10 */ 0x2D, 0x3B, 0x73, 0xA3, 0xAA, 0x47, 0x07, 0x00, /* 18 */ 0x08, 0x1D, 0x1C, 0xC7, 0x09, 0xF0, 0x87, 0x6B, /* 20 */ 0xF0, 0xB6, 0x10, 0xEA, 0x0A, 0x00, 0x11 }; @@ -104,13 +106,17 @@ static void __attribute__((unused)) HOTT_tune_freq() } } -uint8_t HOTT_hop[75]= { 48, 37, 16, 62, 9, 50, 42, 22, 68, 0, 55, 35, 21, 74, 1, 56, 31, 20, 70, 11, 45, 32, 24, 71, 8, 54, 38, 26, 61, 13, 53, 30, 15, 65, 7, 52, 34, 28, 60, 3, 47, 39, 18, 69, 2, 49, 44, 23, 72, 5, 51, 43, 19, 64, 12, 46, 33, 17, 67, 6, 58, 36, 29, 73, 14, 57, 41, 25, 63, 4, 59, 40, 27, 66, 10 }; -uint16_t HOTT_hop_val = 0xC06B; +const uint8_t HOTT_hop[][75]= { { 48, 37, 16, 62, 9, 50, 42, 22, 68, 0, 55, 35, 21, 74, 1, 56, 31, 20, 70, 11, 45, 32, 24, 71, 8, 54, 38, 26, 61, 13, 53, 30, 15, 65, 7, 52, 34, 28, 60, 3, 47, 39, 18, 69, 2, 49, 44, 23, 72, 5, 51, 43, 19, 64, 12, 46, 33, 17, 67, 6, 58, 36, 29, 73, 14, 57, 41, 25, 63, 4, 59, 40, 27, 66, 10 }, + { 50, 23, 5, 34, 67, 53, 22, 12, 39, 62, 51, 21, 10, 33, 63, 59, 16, 1, 43, 66, 49, 19, 8, 30, 71, 47, 24, 2, 35, 68, 45, 25, 14, 41, 74, 55, 18, 4, 32, 61, 54, 17, 11, 31, 72, 52, 28, 6, 38, 65, 46, 15, 9, 40, 60, 48, 26, 3, 37, 70, 58, 29, 0, 36, 64, 56, 20, 7, 42, 69, 57, 27, 13, 44, 73 }, + { 73, 51, 39, 18, 9, 64, 56, 34, 16, 12, 66, 58, 36, 25, 11, 61, 47, 40, 15, 8, 71, 50, 43, 20, 6, 62, 54, 42, 19, 3, 63, 46, 44, 29, 14, 72, 49, 33, 22, 5, 69, 57, 30, 21, 10, 70, 45, 35, 26, 7, 65, 59, 31, 28, 1, 67, 48, 32, 24, 0, 60, 55, 41, 17, 2, 74, 52, 38, 27, 4, 68, 53, 37, 23, 13 }, + { 52, 60, 40, 21, 14, 50, 72, 41, 23, 13, 59, 61, 39, 16, 6, 58, 66, 33, 17, 5, 55, 64, 43, 20, 12, 54, 74, 35, 29, 3, 46, 63, 37, 22, 10, 48, 65, 31, 27, 9, 49, 73, 38, 24, 11, 56, 70, 32, 15, 1, 51, 71, 44, 18, 8, 45, 67, 36, 25, 7, 57, 62, 34, 28, 2, 53, 69, 42, 19, 4, 47, 68, 30, 26, 0 } + }; +const uint16_t HOTT_hop_val[] = { 0xC06B, 0xC34A, 0xDB24, 0x8E09 }; static void __attribute__((unused)) HOTT_init() { - packet[0] = HOTT_hop_val; - packet[1] = HOTT_hop_val>>8; + packet[0] = HOTT_hop_val[num_ch]; + packet[1] = HOTT_hop_val[num_ch]>>8; #ifdef HOTT_FORCE_ID memcpy(rx_tx_addr,"\x7C\x94\x00\x0D\x50",5); #endif @@ -141,7 +147,7 @@ static void __attribute__((unused)) HOTT_data_packet() packet[3] = 0x00; // unknown, may be for additional channels? - // Channel values are PPM*2 + // Channels value are PPM*2, -100%=1100µs, +100%=1900µs, order TAER for(uint8_t i=4;i<28;i+=2) { uint16_t val=Channel_data[(i-4)>>1]; @@ -162,11 +168,12 @@ static void __attribute__((unused)) HOTT_data_packet() #endif hopping_frequency_no++; hopping_frequency_no %= 75; - rf_ch_num=HOTT_hop[hopping_frequency_no]; + rf_ch_num=HOTT_hop[num_ch][hopping_frequency_no]; } uint16_t ReadHOTT() { + static uint8_t pps_counter=0; switch(phase) { case HOTT_START: @@ -181,7 +188,7 @@ uint16_t ReadHOTT() else { hopping_frequency_no = 0; - rf_ch_num=HOTT_hop[hopping_frequency_no]; + rf_ch_num=HOTT_hop[num_ch][hopping_frequency_no]; counter = 0; phase = HOTT_DATA1; } @@ -190,7 +197,7 @@ uint16_t ReadHOTT() /* Work cycle: 10ms */ case HOTT_DATA1: //TX - telemetry_set_input_sync(10000); + telemetry_set_input_sync(HOTT_PACKET_PERIOD); HOTT_tune_freq(); HOTT_tune_chan_fast(); HOTT_data_packet(); @@ -223,24 +230,53 @@ uint16_t ReadHOTT() BIND_DONE; HOTT_init(); } - else - { //Telemetry - // (TXID)0x7C,0x94,0x00,0x0C,0x50 - // (RXID)0x4D,0xF2,0x00,0x00,0xB1 - // unknown 0x40 bind, 0x00 normal - // 0x0X telmetry page X=0,1,2,3,4 - // Telem page 0 = 0x00, 0x33, 0x34, 0x46, 0x64, 0x33, 0x0A, 0x00, 0x00, 0x00 - if(packet_in[11]==0) - { - debug("T:"); - for(uint8_t i=0;i=128) + TX_RSSI -= 128; + else + TX_RSSI += 128; + // Reduce telemetry to 13 bytes + packet_in[0]= TX_RSSI; + packet_in[1]= TX_LQI; + debug("T="); + for(uint8_t i=11;i < HOTT_RX_PACKET_LEN; i++) + { + packet_in[i-9]=packet_in[i]; + debug(" %02X",packet_in[i]); + } debugln(""); + telemetry_link=2; } - } + pps_counter++; + #endif } } - CC2500_Strobe(CC2500_SFRX); //Flush the RXFIFO + #ifdef HOTT_FW_TELEMETRY + packet_count++; + if(packet_count>=100) + { + TX_LQI=pps_counter; + pps_counter=packet_count=0; + } + #endif + CC2500_Strobe(CC2500_SFRX); //Flush the RXFIFO phase=HOTT_DATA1; return 1000; } @@ -251,7 +287,9 @@ uint16_t initHOTT() { HOTT_init(); HOTT_rf_init(); + packet_count=0; phase = HOTT_START; + num_ch=0;//random(0xfefefefe)%4; <= TODO bug dans une des tables hop... return 10000; } diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index 50a7ce8..4387c36 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -19,7 +19,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 3 #define VERSION_REVISION 0 -#define VERSION_PATCH_LEVEL 34 +#define VERSION_PATCH_LEVEL 36 //****************** // Protocols @@ -325,6 +325,7 @@ enum MultiPacketTypes MULTI_TELEMETRY_SCANNER = 11, MULTI_TELEMETRY_AFHDS2A_AC = 12, MULTI_TELEMETRY_RX_CHANNELS = 13, + MULTI_TELEMETRY_HOTT = 14, }; // Macros @@ -976,4 +977,10 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p -- data[3] = number of channels to follow data[4-]= packed channels data, 11 bit per channel + Type 0x0E HoTT telemetry + length: 13 + data[0] = TX_RSSI + data[1] = TX_LQI + data[2-12] = telemetry data + */ diff --git a/Multiprotocol/Multiprotocol.ino b/Multiprotocol/Multiprotocol.ino index a6de2bf..d9fee18 100644 --- a/Multiprotocol/Multiprotocol.ino +++ b/Multiprotocol/Multiprotocol.ino @@ -689,7 +689,7 @@ bool Update_All() update_led_status(); #if defined(TELEMETRY) #if ( !( defined(MULTI_TELEMETRY) || defined(MULTI_STATUS) ) ) - if( (protocol == PROTO_FRSKY_RX) || (protocol == PROTO_SCANNER) || (protocol==PROTO_FRSKYD) || (protocol==PROTO_BAYANG) || (protocol==PROTO_NCC1701) || (protocol==PROTO_BUGS) || (protocol==PROTO_BUGSMINI) || (protocol==PROTO_HUBSAN) || (protocol==PROTO_AFHDS2A) || (protocol==PROTO_FRSKYX) || (protocol==PROTO_DSM) || (protocol==PROTO_CABELL) || (protocol==PROTO_HITEC)) + if( (protocol == PROTO_FRSKY_RX) || (protocol == PROTO_SCANNER) || (protocol==PROTO_FRSKYD) || (protocol==PROTO_BAYANG) || (protocol==PROTO_NCC1701) || (protocol==PROTO_BUGS) || (protocol==PROTO_BUGSMINI) || (protocol==PROTO_HUBSAN) || (protocol==PROTO_AFHDS2A) || (protocol==PROTO_FRSKYX) || (protocol==PROTO_DSM) || (protocol==PROTO_CABELL) || (protocol==PROTO_HITEC) || (protocol==PROTO_HOTT)) #endif if(IS_DISABLE_TELEM_off && !(protocol==PROTO_XN297DUMP)) TelemetryUpdate(); diff --git a/Multiprotocol/Telemetry.ino b/Multiprotocol/Telemetry.ino index 7ea2f86..86c9612 100644 --- a/Multiprotocol/Telemetry.ino +++ b/Multiprotocol/Telemetry.ino @@ -303,6 +303,19 @@ static void multi_send_status() } #endif +#ifdef HOTT_FW_TELEMETRY + void HOTT_short_frame() + { + #if defined MULTI_TELEMETRY + multi_send_header(MULTI_TELEMETRY_HOTT, 13); + #else + Serial_write(0xAA); // Telemetry packet + #endif + for (uint8_t i = 0; i < 13; i++) // TX RSSI and TX LQI values followed by frame number and telemetry data + Serial_write(packet_in[i]); + } +#endif + #ifdef MULTI_TELEMETRY static void multi_send_frskyhub() { @@ -900,6 +913,14 @@ void TelemetryUpdate() return; } #endif + #if defined HOTT_FW_TELEMETRY + if(telemetry_link == 2 && protocol == PROTO_HOTT) + { + HOTT_short_frame(); + telemetry_link=0; + return; + } + #endif #if defined SCANNER_TELEMETRY if (telemetry_link && protocol == PROTO_SCANNER) diff --git a/Multiprotocol/Validate.h b/Multiprotocol/Validate.h index c240c9a..ea6efe1 100644 --- a/Multiprotocol/Validate.h +++ b/Multiprotocol/Validate.h @@ -184,6 +184,7 @@ #ifndef CYRF6936_INSTALLED #undef DEVO_CYRF6936_INO #undef DSM_CYRF6936_INO + #undef HOTT_CC2500_INO #undef J6PRO_CYRF6936_INO #undef WFLY_CYRF6936_INO #undef WK2x01_CYRF6936_INO @@ -263,6 +264,7 @@ #undef FRSKY_RX_CC2500_INO #undef AFHDS2A_RX_TELEMETRY #undef AFHDS2A_RX_A7105_INO + #undef HOTT_FW_TELEMETRY #else #if defined(MULTI_TELEMETRY) && defined(MULTI_STATUS) #error You should choose either MULTI_TELEMETRY or MULTI_STATUS but not both. @@ -315,7 +317,10 @@ #if not defined(DSM_CYRF6936_INO) #undef DSM_TELEMETRY #endif - #if not defined(DSM_TELEMETRY) && not defined(SPORT_TELEMETRY) && not defined(HUB_TELEMETRY) && not defined(HUBSAN_HUB_TELEMETRY) && not defined(BUGS_HUB_TELEMETRY) && not defined(NCC1701_HUB_TELEMETRY) && not defined(BAYANG_HUB_TELEMETRY) && not defined(CABELL_HUB_TELEMETRY) && not defined(AFHDS2A_HUB_TELEMETRY) && not defined(AFHDS2A_FW_TELEMETRY) && not defined(MULTI_TELEMETRY) && not defined(MULTI_STATUS) && not defined(HITEC_HUB_TELEMETRY) && not defined(HITEC_FW_TELEMETRY) && not defined(SCANNER_TELEMETRY) && not defined(FRSKY_RX_TELEMETRY) && not defined(AFHDS2A_RX_TELEMETRY) + #if not defined(HOTT_CC2500_INO) + #undef HOTT_FW_TELEMETRY + #endif + #if not defined(HOTT_FW_TELEMETRY) && not defined(DSM_TELEMETRY) && not defined(SPORT_TELEMETRY) && not defined(HUB_TELEMETRY) && not defined(HUBSAN_HUB_TELEMETRY) && not defined(BUGS_HUB_TELEMETRY) && not defined(NCC1701_HUB_TELEMETRY) && not defined(BAYANG_HUB_TELEMETRY) && not defined(CABELL_HUB_TELEMETRY) && not defined(AFHDS2A_HUB_TELEMETRY) && not defined(AFHDS2A_FW_TELEMETRY) && not defined(MULTI_TELEMETRY) && not defined(MULTI_STATUS) && not defined(HITEC_HUB_TELEMETRY) && not defined(HITEC_FW_TELEMETRY) && not defined(SCANNER_TELEMETRY) && not defined(FRSKY_RX_TELEMETRY) && not defined(AFHDS2A_RX_TELEMETRY) #undef TELEMETRY #undef INVERT_TELEMETRY #endif diff --git a/Multiprotocol/_Config.h b/Multiprotocol/_Config.h index cddf437..8afbd91 100644 --- a/Multiprotocol/_Config.h +++ b/Multiprotocol/_Config.h @@ -299,10 +299,11 @@ #define NCC1701_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX #define CABELL_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX #define HITEC_HUB_TELEMETRY // Use FrSkyD Hub format to send basic telemetry to the radios which can decode it like er9x, erskyTX and OpenTX -#define HITEC_FW_TELEMETRY // Under development: Forward received telemetry packets to be decoded by erskyTX and OpenTX +#define HITEC_FW_TELEMETRY // Forward received telemetry packets to be decoded by erskyTX and OpenTX #define SCANNER_TELEMETRY // Forward spectrum scanner data to TX #define FRSKY_RX_TELEMETRY // Forward channels data to TX #define AFHDS2A_RX_TELEMETRY // Forward channels data to TX +#define HOTT_FW_TELEMETRY // Forward received telemetry packets to be decoded by erskyTX and OpenTX /****************************/ /*** SERIAL MODE SETTINGS ***/