diff --git a/Lua_scripts/MultiChan.txt b/Lua_scripts/MultiChan.txt index 7a0846a..b761af7 100644 --- a/Lua_scripts/MultiChan.txt +++ b/Lua_scripts/MultiChan.txt @@ -121,7 +121,9 @@ 49,2,KF606,ZCZ50,1,Trim,UNK 9,0,KN,WLToys,0,DRate,THold,IdleUp,Gyro,Ttrim,Atrim,Etrim 9,1,KN,Feilun,0,DRate,THold,IdleUp,Gyro,Ttrim,Atrim,Etrim -73,0,Kyosho,Std,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12,CH13,CH14 +73,0,Kyosho,FHSS,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12,CH13,CH14 +73,1,Kyosho,Hype,0,CH5,CH6 +73,2,Kyosho,Syncro,0,CH5,CH6 18,0,MJXQ,WHL08,1,Flip,LED,Pict,Video,HLess,RTH,AuFlip,Pan,Tilt,Rate 18,1,MJXQ,X600,1,Flip,LED,Pict,Video,HLess,RTH,AuFlip,Pan,Tilt,Rate 18,2,MJXQ,X800,1,Flip,LED,Pict,Video,HLess,RTH,AuFlip,Pan,Tilt,Rate diff --git a/Multiprotocol/A7105_SPI.ino b/Multiprotocol/A7105_SPI.ino index ac8f2bc..5a5927f 100644 --- a/Multiprotocol/A7105_SPI.ino +++ b/Multiprotocol/A7105_SPI.ino @@ -418,7 +418,7 @@ void A7105_Init(void) #ifdef KYOSHO_A7105_INO if(protocol==PROTO_KYOSHO) { - if(sub_protocol==KYOSHO_FHSS) + if(sub_protocol==KYOSHO_FHSS || sub_protocol==KYOSHO_SYNCRO) A7105_Regs=(uint8_t*)KYOSHO_A7105_regs; else A7105_Regs=(uint8_t*)KYOSHO_HYPE_A7105_regs; @@ -446,7 +446,7 @@ void A7105_Init(void) } A7105_Strobe(A7105_STANDBY); - if(protocol==PROTO_KYOSHO && sub_protocol==KYOSHO_FHSS) + if(protocol==PROTO_KYOSHO && (sub_protocol==KYOSHO_FHSS || sub_protocol==KYOSHO_SYNCRO)) {//strange calibration... //IF Filter Bank Calibration A7105_WriteReg(A7105_02_CALC,0x0F); diff --git a/Multiprotocol/Kyosho_a7105.ino b/Multiprotocol/Kyosho_a7105.ino index 18c24c7..2618d09 100644 --- a/Multiprotocol/Kyosho_a7105.ino +++ b/Multiprotocol/Kyosho_a7105.ino @@ -19,6 +19,7 @@ //#define KYOSHO_FORCE_ID_FHSS //#define KYOSHO_FORCE_ID_HYPE +//#define KYOSHO_FORCE_ID_SYNCRO //Kyosho constants & variables #define KYOSHO_BIND_COUNT 2500 @@ -32,6 +33,11 @@ static void __attribute__((unused)) KYOSHO_send_packet() packet[4] = rx_tx_addr[3]; //unknown may be RX ID on some other remotes memset(packet+5,0xFF,4); + + //unknwon but for Syncro the same values are used for bind and normal + packet[27] = sub_protocol==KYOSHO_FHSS?0x05:0x07; // Syncro is 7 + packet[28] = 0x00; + memset(packet+29,0xFF,8); if(IS_BIND_IN_PROGRESS) { @@ -42,10 +48,6 @@ static void __attribute__((unused)) KYOSHO_send_packet() //RF table for(uint8_t i=0; i<16;i++) packet[i+11]=hopping_frequency[i+(packet[9]<<4)]; - //unknwon - packet[27] = 0x05; - packet[28] = 0x00; - memset(packet+29,0xFF,8); //frequency hop during bind if(packet[9]) rf_ch_num=0x8C; @@ -55,13 +57,20 @@ static void __attribute__((unused)) KYOSHO_send_packet() else { packet[ 0] = 0x58; // normal packet - //14 channels: steering, throttle, ... - for(uint8_t i = 0; i < 14; i++) + //FHSS 14 channels: steering, throttle, ... + //Syncro 6 channels: steering, throttle, ... + for(uint8_t i = 0; i < sub_protocol==KYOSHO_FHSS?14:6; i++) { uint16_t temp=convert_channel_ppm(i); packet[9 + i*2]=temp&0xFF; // low byte of servo timing(1000-2000us) packet[10 + i*2]=(temp>>8)&0xFF; // high byte of servo timing(1000-2000us) } + if(sub_protocol==KYOSHO_SYNCRO) + { + memcpy(&packet[21],&hopping_frequency[11],6); + packet[34] = 0x0F; + packet[36] = 0x0F; + } rf_ch_num=hopping_frequency[hopping_frequency_no]; hopping_frequency_no++; packet[34] |= (hopping_frequency_no&0x0F)<<4; @@ -150,7 +159,7 @@ uint16_t KYOSHO_callback() telemetry_set_input_sync(packet_period); #endif } - if(sub_protocol==KYOSHO_FHSS) + if(sub_protocol==KYOSHO_FHSS || sub_protocol==KYOSHO_SYNCRO) KYOSHO_send_packet(); else//HYPE KYOSHO_hype_send_packet(); @@ -162,7 +171,7 @@ void KYOSHO_init() A7105_Init(); // compute channels from ID - calc_fh_channels(sub_protocol==KYOSHO_FHSS?32:15); + calc_fh_channels(sub_protocol==KYOSHO_HYPE?15:32); hopping_frequency_no=0; #ifdef KYOSHO_FORCE_ID_FHSS @@ -172,6 +181,13 @@ void KYOSHO_init() memcpy(hopping_frequency,"\x29\x4C\x67\x92\x31\x1C\x77\x18\x23\x6E\x81\x5C\x8F\x5A\x51\x94\x7A\x12\x45\x6C\x7F\x1E\x0D\x88\x63\x8C\x4F\x37\x26\x61\x2C\x8A",32); } #endif + #ifdef KYOSHO_FORCE_ID_SYNCRO + if(sub_protocol==KYOSHO_SYNCRO) + { + memcpy(rx_tx_addr,"\x00\xC2\x24\x00",4); + memcpy(hopping_frequency,"\x73\x12\x7D\x88\x63\x4A\x8D\x60\x57\x16\x5D\x8B\x25\x53\x6E\x3C\x41\x70\x20\x83\x2A\x19\x94\x2F\x91\x4C\x47\x36\x78\x10\x5A\x31",32); + } + #endif if(sub_protocol==KYOSHO_HYPE) { MProtocol_id &= 0x00FF00FF; diff --git a/Multiprotocol/Multi.txt b/Multiprotocol/Multi.txt index f420d6a..8f1cfcb 100644 --- a/Multiprotocol/Multi.txt +++ b/Multiprotocol/Multi.txt @@ -70,7 +70,7 @@ 70,DSM_RX,Multi,CloneTX,EraseTX,CPPM 71,JJRC345,JJRC345,SkyTmblr 72,Q90C -73,Kyosho,FHSS,Hype +73,Kyosho,FHSS,Hype,Syncro 74,RadioLink,Surface,Air,DumboRC 75,--- 76,Realacc,R11 diff --git a/Multiprotocol/Multi_Protos.ino b/Multiprotocol/Multi_Protos.ino index 32bd83e..6030461 100644 --- a/Multiprotocol/Multi_Protos.ino +++ b/Multiprotocol/Multi_Protos.ino @@ -169,7 +169,7 @@ const char STR_SUBTYPE_PELIKAN[] = "\x05""Pro\0 ""Lite\0""SCX24"; const char STR_SUBTYPE_V761[] = "\x05""3ch\0 ""4ch\0 ""TOPRC"; const char STR_SUBTYPE_RLINK[] = "\x07""Surface""Air\0 ""DumboRC"; const char STR_SUBTYPE_REALACC[] = "\x03""R11"; -const char STR_SUBTYPE_KYOSHO[] = "\x04""FHSS""Hype"; +const char STR_SUBTYPE_KYOSHO[] = "\x06""FHSS""Hype""Sync"; const char STR_SUBTYPE_KYOSHO2[] = "\x05""KT-17"; const char STR_SUBTYPE_FUTABA[] = "\x05""SFHSS"; const char STR_SUBTYPE_JJRC345[] = "\x08""JJRC345\0""SkyTmblr"; @@ -379,7 +379,7 @@ const mm_protocol_definition multi_protocols[] = { {PROTO_KN, STR_KN, STR_SUBTYPE_KN, 2, OPTION_NONE, 0, 0, SW_NRF, KN_init, KN_callback }, #endif #if defined(KYOSHO_A7105_INO) - {PROTO_KYOSHO, STR_KYOSHO, STR_SUBTYPE_KYOSHO, 2, OPTION_NONE, 0, 1, SW_A7105, KYOSHO_init, KYOSHO_callback }, + {PROTO_KYOSHO, STR_KYOSHO, STR_SUBTYPE_KYOSHO, 3, OPTION_NONE, 0, 1, SW_A7105, KYOSHO_init, KYOSHO_callback }, #endif #if defined(KYOSHO2_NRF24L01_INO) {PROTO_KYOSHO2, STR_KYOSHO2, STR_SUBTYPE_KYOSHO2, 1, OPTION_NONE, 0, 0, SW_NRF, KYOSHO2_init, KYOSHO2_callback }, diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index abfb044..ca506d8 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -19,7 +19,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 3 #define VERSION_REVISION 3 -#define VERSION_PATCH_LEVEL 43 +#define VERSION_PATCH_LEVEL 44 #define MODE_SERIAL 0 @@ -437,8 +437,9 @@ enum HEIGHT }; enum KYOSHO { - KYOSHO_FHSS = 0, - KYOSHO_HYPE = 1, + KYOSHO_FHSS = 0, + KYOSHO_HYPE = 1, + KYOSHO_SYNCRO = 2, }; enum JJRC345 { @@ -833,8 +834,8 @@ enum { #define DSM_RX_EEPROM_OFFSET 877 // (4) TX ID + format, 5 bytes, end is 882 #define MOULDKG_EEPROM_OFFSET 882 // RX ID, 3 bytes per model, end is 882+64*3=1074 #define DSM_CLONE_EEPROM_OFFSET 1074 // (4) TX ID, (1) Initialized, end is 1079 -#define TRAXXAS_EEPROM_OFFSET 1079 // RX ID, 2 bytes per model id, end is 1079+128=1207 -//#define CONFIG_EEPROM_OFFSET 1207 // Current configuration of the multimodule +#define TRAXXAS_EEPROM_OFFSET 1079 // RX ID and SOP index, 3 bytes per model id, end is 1079+192=1271 +//#define CONFIG_EEPROM_OFFSET 1271 // Current configuration of the multimodule /* STM32 Flash Size */ #ifndef DISABLE_FLASH_SIZE_CHECK diff --git a/Multiprotocol/_Config.h b/Multiprotocol/_Config.h index e70c12d..32fc041 100644 --- a/Multiprotocol/_Config.h +++ b/Multiprotocol/_Config.h @@ -734,6 +734,7 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= { PROTO_KYOSHO KYOSHO_FHSS KYOSHO_HYPE + KYOSHO_SYNCRO PROTO_KYOSHO2 NONE PROTO_LOLI diff --git a/Protocols_Details.md b/Protocols_Details.md index 5976c29..94a7b03 100644 --- a/Protocols_Details.md +++ b/Protocols_Details.md @@ -113,7 +113,7 @@ CFlie|38|CFlie||||||||NRF24L01| [JOYSWAY](Protocols_Details.md#JOYSWAY---84)|84|||||||||NRF24L01|XN297 [KF606](Protocols_Details.md#KF606---49)|49|KF606|MIG320|ZCZ50||||||NRF24L01|XN297 [KN](Protocols_Details.md#KN---9)|9|WLTOYS|FEILUN|||||||NRF24L01| -[Kyosho](Protocols_Details.md#Kyosho---73)|73|FHSS|Hype|||||||A7105| +[Kyosho](Protocols_Details.md#Kyosho---73)|73|FHSS|Hype|Syncro||||||A7105| [Kyosho2](Protocols_Details.md#Kyosho2---93)|93|KT-17||||||||NRF24L01| [LOLI](Protocols_Details.md#LOLI---82)|82|||||||||NRF24L01| [Losi](Protocols_Details.md#Losi---89)|89|||||||||CYRF6936| @@ -343,6 +343,15 @@ A|E|T|R|CH5|CH6 RX output will match the Hype standard AETR independently of the input configuration AETR, RETA... unless on OpenTX 2.3.3+ you use the "Disable channel mapping" feature on the GUI. +### Sub_protocol Syncro - *2* +Surface protocol called Syncro. TX: KT-331, RX: KR-331 + +Extended limits supported + +CH1|CH2|CH3|CH4|CH5|CH6 +---|---|---|---|---|--- +STEERING|THROTTLE|CH3|CH4|CH5|CH6 + ## Pelikan - *60* Extended limits supported