From 7e451c13a8b154adefd5d20e1ca23122ab1c4a97 Mon Sep 17 00:00:00 2001 From: Pascal Langer Date: Tue, 2 Jun 2020 19:04:05 +0200 Subject: [PATCH] Pelikan: add sub protocol for Lite version --- Multiprotocol/Multi.txt | 2 +- Multiprotocol/Multi_Names.ino | 3 +- Multiprotocol/Multiprotocol.h | 11 +++- Multiprotocol/Pelikan_a7105.ino | 99 ++++++++++++++++++++++++--------- Multiprotocol/_Config.h | 3 +- Protocols_Details.md | 20 ++++--- 6 files changed, 99 insertions(+), 39 deletions(-) diff --git a/Multiprotocol/Multi.txt b/Multiprotocol/Multi.txt index 4f53b61..8b7ba1c 100644 --- a/Multiprotocol/Multi.txt +++ b/Multiprotocol/Multi.txt @@ -57,7 +57,7 @@ 57,HoTT,Sync,No_Sync 58,FX816,P38 59,Bayang_RX -60,Pelikan +60,Pelikan,Pro,Lite 61,Tiger 62,XK,X450,X420 63,XN_DUMP,250K,1M,2M,AUTO diff --git a/Multiprotocol/Multi_Names.ino b/Multiprotocol/Multi_Names.ino index 92a8928..7e848e3 100644 --- a/Multiprotocol/Multi_Names.ino +++ b/Multiprotocol/Multi_Names.ino @@ -135,6 +135,7 @@ const char STR_SUBTYPE_FRSKY_RX[] = "\x07""RX\0 ""CloneTX"; const char STR_SUBTYPE_FRSKYL[] = "\x08""LR12\0 ""LR12 6ch"; const char STR_SUBTYPE_WFLY[] = "\x06""WFR0xS"; const char STR_SUBTYPE_HOTT[] = "\x07""Sync\0 ""No_Sync"; +const char STR_SUBTYPE_PELIKAN[] = "\x04""Pro\0""Lite"; enum { @@ -295,7 +296,7 @@ const mm_protocol_definition multi_protocols[] = { {PROTO_NCC1701, STR_NCC1701, 0, NO_SUBTYPE, OPTION_NONE }, #endif #if defined(PELIKAN_A7105_INO) - {PROTO_PELIKAN, STR_PELIKAN , 0, NO_SUBTYPE, OPTION_NONE }, + {PROTO_PELIKAN, STR_PELIKAN , 2, STR_SUBTYPE_PELIKAN, OPTION_NONE }, #endif #if defined(POTENSIC_NRF24L01_INO) {PROTO_POTENSIC, STR_POTENSIC, 1, STR_SUBTYPE_POTENSIC, OPTION_NONE }, diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index 69e8808..49b0d56 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -19,7 +19,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 3 #define VERSION_REVISION 1 -#define VERSION_PATCH_LEVEL 7 +#define VERSION_PATCH_LEVEL 8 //****************** // Protocols @@ -365,6 +365,12 @@ enum HOTT HOTT_NO_SYNC= 1, }; +enum PELIKAN +{ + PELIKAN_PRO = 0, + PELIKAN_LITE= 1, +}; + #define NONE 0 #define P_HIGH 1 #define P_LOW 0 @@ -953,6 +959,9 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p -- sub_protocol==HOTT HOTT_SYNC 0 HOTT_NO_SYNC 1 + sub_protocol==PELIKAN + PELIKAN_PRO 0 + PELIKAN_LITE 1 Power value => 0x80 0=High/1=Low Stream[3] = option_protocol; diff --git a/Multiprotocol/Pelikan_a7105.ino b/Multiprotocol/Pelikan_a7105.ino index 1208275..fed6e87 100644 --- a/Multiprotocol/Pelikan_a7105.ino +++ b/Multiprotocol/Pelikan_a7105.ino @@ -19,11 +19,13 @@ #include "iface_a7105.h" //#define PELIKAN_FORCE_ID +#define PELIKAN_LITE_FORCE_ID #define PELIKAN_BIND_COUNT 400 #define PELIKAN_BIND_RF 0x3C #define PELIKAN_NUM_RF_CHAN 0x1D -#define PELIKAN_PAQUET_PERIOD 7980 +#define PELIKAN_PACKET_PERIOD 7980 +#define PELIKAN_LITE_PACKET_PERIOD 18000 static void __attribute__((unused)) pelikan_build_packet() { @@ -36,7 +38,10 @@ static void __attribute__((unused)) pelikan_build_packet() packet[3] = rx_tx_addr[1]; packet[4] = rx_tx_addr[2]; packet[5] = rx_tx_addr[3]; - packet[6] = 0x05; //?? + if(sub_protocol==PELIKAN_PRO) + packet[6] = 0x05; //sub version?? + else //PELIKAN_LITE + packet[6] = 0x03; //sub version?? packet[7] = 0x00; //?? packet[8] = 0x55; //?? packet_length = 10; @@ -72,7 +77,7 @@ static void __attribute__((unused)) pelikan_build_packet() packet[9]=upper?0xAA:0x00; upper=!upper; //Hopping counters - if(++packet_count>4) + if(sub_protocol==PELIKAN_LITE || ++packet_count>4) { packet_count=0; if(++hopping_frequency_no>=PELIKAN_NUM_RF_CHAN) @@ -106,24 +111,41 @@ static void __attribute__((unused)) pelikan_build_packet() uint16_t ReadPelikan() { - #ifndef FORCE_PELIKAN_TUNING - A7105_AdjustLOBaseFreq(1); - #endif - if(IS_BIND_IN_PROGRESS) + if(phase==0) { - bind_counter--; - if (bind_counter==0) + #ifndef FORCE_PELIKAN_TUNING + A7105_AdjustLOBaseFreq(1); + #endif + if(IS_BIND_IN_PROGRESS) { - BIND_DONE; - A7105_Strobe(A7105_STANDBY); - A7105_WriteReg(A7105_03_FIFOI,0x28); + bind_counter--; + if (bind_counter==0) + { + BIND_DONE; + A7105_Strobe(A7105_STANDBY); + if(sub_protocol==PELIKAN_PRO) + A7105_WriteReg(A7105_03_FIFOI,0x28); + else//PELIKAN_LITE + A7105_WriteID((rx_tx_addr[0]<<24)|(rx_tx_addr[1]<<16)|(rx_tx_addr[2]<<8)|(rx_tx_addr[3])); + } } + #ifdef MULTI_SYNC + telemetry_set_input_sync(sub_protocol==PELIKAN_PRO?PELIKAN_PACKET_PERIOD:PELIKAN_LITE_PACKET_PERIOD); + #endif + pelikan_build_packet(); + if(sub_protocol==PELIKAN_PRO || IS_BIND_IN_PROGRESS) + return PELIKAN_PACKET_PERIOD; + //PELIKAN_LITE + phase++; + return 942; } - #ifdef MULTI_SYNC - telemetry_set_input_sync(PELIKAN_PAQUET_PERIOD); - #endif - pelikan_build_packet(); - return PELIKAN_PAQUET_PERIOD; + //PELIKAN_LITE + A7105_Strobe(A7105_TX); + phase++; + if(phase==1) + return 942; + phase=0; + return PELIKAN_LITE_PACKET_PERIOD-942-942; } static uint8_t pelikan_firstCh(uint8_t u, uint8_t l) @@ -213,27 +235,50 @@ const uint8_t PROGMEM pelikan_hopp[][PELIKAN_NUM_RF_CHAN] = { }; #endif +#ifdef PELIKAN_LITE_FORCE_ID +const uint8_t PROGMEM pelikan_lite_hopp[][PELIKAN_NUM_RF_CHAN] = { + { 0x5A,0x46,0x32,0x6E,0x6C,0x58,0x44,0x42,0x40,0x6A,0x56,0x54,0x52,0x3E,0x68,0x66,0x64,0x50,0x3C,0x3A,0x38,0x62,0x4E,0x4C,0x5E,0x4A,0x36,0x5C,0x34 } +}; +#endif + uint16_t initPelikan() { A7105_Init(); - if(IS_BIND_IN_PROGRESS) + if(IS_BIND_IN_PROGRESS || sub_protocol==PELIKAN_LITE) A7105_WriteReg(A7105_03_FIFOI,0x10); - //ID from dump - #ifdef PELIKAN_FORCE_ID - rx_tx_addr[0]=0x0D; // hopping freq - rx_tx_addr[1]=0xF4; // hopping freq - rx_tx_addr[2]=0x50; // ID - rx_tx_addr[3]=0x18; // ID - // Fill frequency table - for(uint8_t i=0;i