From 09ee173e3b8aa4803ecbbf9559fd746fe4f4a2bd Mon Sep 17 00:00:00 2001 From: pascallanger Date: Thu, 22 Feb 2024 17:14:20 +0100 Subject: [PATCH] Remove Pelikan/SCX24 when MULTI_AIR Save flash space --- Multiprotocol/Pelikan_a7105.ino | 94 ++++++++++++++++++++------------- 1 file changed, 56 insertions(+), 38 deletions(-) diff --git a/Multiprotocol/Pelikan_a7105.ino b/Multiprotocol/Pelikan_a7105.ino index 4fc194e..4b224a7 100644 --- a/Multiprotocol/Pelikan_a7105.ino +++ b/Multiprotocol/Pelikan_a7105.ino @@ -38,9 +38,11 @@ static void __attribute__((unused)) pelikan_build_packet() uint8_t sum; uint16_t channel; + #ifndef MULTI_AIR if(sub_protocol == PELIKAN_SCX24) packet[0] = 0x11; else //PELIKAN_PRO & PELIKAN_LITE + #endif packet[0] = 0x15; if(IS_BIND_IN_PROGRESS) { @@ -49,6 +51,7 @@ static void __attribute__((unused)) pelikan_build_packet() packet[4] = rx_tx_addr[2]; packet[5] = rx_tx_addr[3]; + #ifndef MULTI_AIR if(sub_protocol == PELIKAN_SCX24) { packet[1] = 0x65; //?? @@ -56,6 +59,7 @@ static void __attribute__((unused)) pelikan_build_packet() packet[7] = 0xAA; //?? } else + #endif {//PELIKAN_PRO & PELIKAN_LITE packet[1] = 0x04; //version?? if(sub_protocol==PELIKAN_PRO) @@ -71,6 +75,7 @@ static void __attribute__((unused)) pelikan_build_packet() { //ID packet[1] = rx_tx_addr[0]; + #ifndef MULTI_AIR if(sub_protocol == PELIKAN_SCX24) { //ID @@ -96,6 +101,7 @@ static void __attribute__((unused)) pelikan_build_packet() packet_length = 14; } else + #endif {//PELIKAN_PRO & PELIKAN_LITE //ID packet[7] = rx_tx_addr[1]; @@ -159,6 +165,13 @@ static void __attribute__((unused)) pelikan_build_packet() uint16_t PELIKAN_callback() { + #ifdef MULTI_AIR + if(sub_protocol == PELIKAN_SCX24) + { + SUB_PROTO_INVALID; + return 10000; + } + #endif if(phase==0) { #ifndef FORCE_PELIKAN_TUNING @@ -173,10 +186,12 @@ uint16_t PELIKAN_callback() A7105_Strobe(A7105_STANDBY); if(sub_protocol==PELIKAN_PRO) A7105_WriteReg(A7105_03_FIFOI,0x28); //???? - else if(sub_protocol==PELIKAN_SCX24) - A7105_WriteReg(A7105_03_FIFOI,0x0D); - else//PELIKAN_LITE + else if(sub_protocol==PELIKAN_LITE) A7105_WriteID(MProtocol_id); + #ifndef MULTI_AIR + else // PELIKAN_SCX24 + A7105_WriteReg(A7105_03_FIFOI,0x0D); + #endif } } #ifdef MULTI_SYNC @@ -331,28 +346,6 @@ static uint8_t pelikan_add(uint8_t pfrq,uint8_t a, uint8_t limit) return nfrq; } -const uint8_t PROGMEM scx_ch_map[4][PELIKAN_NUM_RF_CHAN] = - { - {0,1,2,26,27,28,23,24,25,20,21,22,17,18,19,14,15,16,11,12,13,8,9,10,5,6,7,4,3}, - {0,1,2,28,25,26,27,24,21,22,23,20,17,18,19,16,13,14,15,12,9,10,11,8,5,6,7,3,4}, - {0,1,27,28,25,26,23,24,21,22,19,20,17,18,15,16,13,14,11,12,9,10,7,8,5,6,3,4,2}, - {0,1,28,1,4,2,23,26,22,24,27,25,17,20,16,18,21,19,11,14,10,12,15,13,27,8,6,7,9} - }; - -static void pelikan_shuffle(uint8_t j) -{ - uint8_t temp[PELIKAN_NUM_RF_CHAN]; - for (uint8_t i = 0; i < PELIKAN_NUM_RF_CHAN; i++) - { - temp[i] = hopping_frequency[scx_ch_map[j-1][i]]; - } - - for (uint8_t i = 0; i < PELIKAN_NUM_RF_CHAN; i++) - { - hopping_frequency[i] = temp[i]; - } -} - static void __attribute__((unused)) pelikan_init_hop() { #define PELIKAN_HOP_LIMIT 70 @@ -381,6 +374,26 @@ static void __attribute__((unused)) pelikan_init_hop() debugln(""); } +#ifndef MULTI_AIR + +const uint8_t PROGMEM scx_ch_map[4][PELIKAN_NUM_RF_CHAN] = + { + {0,1,2,26,27,28,23,24,25,20,21,22,17,18,19,14,15,16,11,12,13,8,9,10,5,6,7,4,3}, + {0,1,2,28,25,26,27,24,21,22,23,20,17,18,19,16,13,14,15,12,9,10,11,8,5,6,7,3,4}, + {0,1,27,28,25,26,23,24,21,22,19,20,17,18,15,16,13,14,11,12,9,10,7,8,5,6,3,4,2}, + {0,1,28,1,4,2,23,26,22,24,27,25,17,20,16,18,21,19,11,14,10,12,15,13,27,8,6,7,9} + }; + +static void pelikan_shuffle(uint8_t j) +{ + uint8_t temp[PELIKAN_NUM_RF_CHAN]; + for (uint8_t i = 0; i < PELIKAN_NUM_RF_CHAN; i++) + temp[i] = hopping_frequency[pgm_read_byte_near(&scx_ch_map[j-1][i])]; + + for (uint8_t i = 0; i < PELIKAN_NUM_RF_CHAN; i++) + hopping_frequency[i] = temp[i]; +} + static void __attribute__((unused)) pelikan_init_hop_scx() { rx_tx_addr[0] = 0x10; @@ -458,13 +471,24 @@ static void __attribute__((unused)) pelikan_init_hop_scx() hopping_frequency[PELIKAN_NUM_RF_CHAN - 1] = last_channel; } - for (uint8_t i = 0; i < PELIKAN_NUM_RF_CHAN; i++) - { - debug("%02X ", hopping_frequency[i]); - } - debugln(""); + #ifdef DEBUG_SERIAL + for (uint8_t i = 0; i < PELIKAN_NUM_RF_CHAN; i++) + debug("%02X ", hopping_frequency[i]); + debugln(""); + #endif } +#ifdef PELIKAN_SCX24_FORCE_HOP +const uint8_t PROGMEM pelikan_scx24_hopp[][PELIKAN_NUM_RF_CHAN] = { +/*TX1*/ { 0x1E,0x32,0x46,0x5A,0x44,0x58,0x2E,0x42,0x56,0x2C,0x40,0x54,0x2A,0x3E,0x52,0x28,0x3C,0x50,0x26,0x3A,0x4E,0x24,0x38,0x4C,0x22,0x36,0x4A,0x20,0x1A }, +/*TX2*/ { 0x2C,0x44,0x1E,0x52,0x56,0x22,0x3A,0x3E,0x34,0x4C,0x26,0x5A,0x50,0x2A,0x42,0x38,0x2E,0x46,0x20,0x54,0x4A,0x24,0x3C,0x32,0x28,0x40,0x58,0x1B,0x4E }, +/*TX3*/ { 0x3C,0x4C,0x1E,0x4A,0x5A,0x2C,0x58,0x2A,0x3A,0x56,0x28,0x38,0x26,0x36,0x46,0x34,0x44,0x54,0x42,0x52,0x24,0x50,0x22,0x32,0x4E,0x20,0x40,0x3E,0x17 }, +/*TX4*/ { 0x46,0x32,0x1E,0x58,0x44,0x5A,0x56,0x42,0x2E,0x54,0x40,0x2C,0x52,0x3E,0x2A,0x50,0x3C,0x28,0x4E,0x3A,0x26,0x4C,0x38,0x24,0x4A,0x36,0x22,0x20,0x1A } +}; +#endif //PELIKAN_SCX24_FORCE_HOP + +#endif //MULTI_AIR + #ifdef PELIKAN_FORCE_ID const uint8_t PROGMEM pelikan_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 } @@ -476,14 +500,6 @@ const uint8_t PROGMEM pelikan_lite_hopp[][PELIKAN_NUM_RF_CHAN] = { { 0x46,0x2A,0x3E,0x5A,0x5C,0x24,0x4E,0x32,0x54,0x26,0x2C,0x34,0x56,0x1E,0x3A,0x3C,0x50,0x4A,0x2E,0x42,0x20,0x52,0x28,0x22,0x44,0x58,0x36,0x38,0x4C } }; #endif -#ifdef PELIKAN_SCX24_FORCE_HOP -const uint8_t PROGMEM pelikan_scx24_hopp[][PELIKAN_NUM_RF_CHAN] = { -/*TX1*/ { 0x1E,0x32,0x46,0x5A,0x44,0x58,0x2E,0x42,0x56,0x2C,0x40,0x54,0x2A,0x3E,0x52,0x28,0x3C,0x50,0x26,0x3A,0x4E,0x24,0x38,0x4C,0x22,0x36,0x4A,0x20,0x1A }, -/*TX2*/ { 0x2C,0x44,0x1E,0x52,0x56,0x22,0x3A,0x3E,0x34,0x4C,0x26,0x5A,0x50,0x2A,0x42,0x38,0x2E,0x46,0x20,0x54,0x4A,0x24,0x3C,0x32,0x28,0x40,0x58,0x1B,0x4E }, -/*TX3*/ { 0x3C,0x4C,0x1E,0x4A,0x5A,0x2C,0x58,0x2A,0x3A,0x56,0x28,0x38,0x26,0x36,0x46,0x34,0x44,0x54,0x42,0x52,0x24,0x50,0x22,0x32,0x4E,0x20,0x40,0x3E,0x17 }, -/*TX4*/ { 0x46,0x32,0x1E,0x58,0x44,0x5A,0x56,0x42,0x2E,0x54,0x40,0x2C,0x52,0x3E,0x2A,0x50,0x3C,0x28,0x4E,0x3A,0x26,0x4C,0x38,0x24,0x4A,0x36,0x22,0x20,0x1A } -}; -#endif void PELIKAN_init() { @@ -530,6 +546,7 @@ void PELIKAN_init() A7105_WriteID(MProtocol_id); packet_period = PELIKAN_LITE_PACKET_PERIOD; } + #ifndef MULTI_AIR else// if(sub_protocol==PELIKAN_SCX24) { pelikan_init_hop_scx(); @@ -574,6 +591,7 @@ void PELIKAN_init() A7105_WriteReg(A7105_03_FIFOI,0x0D); packet_period = PELIKAN_SCX24_PACKET_PERIOD; } + #endif //MULTI_AIR } hopping_frequency_no = PELIKAN_NUM_RF_CHAN;