diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h index 5f80408..2f62019 100644 --- a/Multiprotocol/Multiprotocol.h +++ b/Multiprotocol/Multiprotocol.h @@ -338,6 +338,12 @@ enum MultiPacketTypes // Macros #define NOP() __asm__ __volatile__("nop") +//*************** +//*** Tests *** +//*************** +#define IS_FAILSAFE_PROTOCOL ( (protocol==PROTO_HISKY && sub_protocol==HK310) || protocol==PROTO_AFHDS2A || protocol==PROTO_DEVO || protocol==PROTO_SFHSS || protocol==PROTO_WK2x01 || protocol== PROTO_HOTT || protocol==PROTO_FRSKYX ) +#define IS_CHMAP_PROTOCOL ( (protocol==PROTO_HISKY && sub_protocol==HK310) || protocol==PROTO_AFHDS2A || protocol==PROTO_DEVO || protocol==PROTO_SFHSS || protocol==PROTO_WK2x01 || protocol== PROTO_DSM || protocol==PROTO_SLT || protocol==PROTO_FLYSKY || protocol==PROTO_ESKY || protocol==PROTO_J6PRO ) + //*************** //*** Flags *** //*************** diff --git a/Multiprotocol/Multiprotocol.ino b/Multiprotocol/Multiprotocol.ino index 5aacdce..5247119 100644 --- a/Multiprotocol/Multiprotocol.ino +++ b/Multiprotocol/Multiprotocol.ino @@ -1621,24 +1621,6 @@ void update_serial_data() #endif } - if(prev_ch_mapping!=IS_DISABLE_CH_MAP_on) - { - prev_ch_mapping=IS_DISABLE_CH_MAP_on; - if(IS_DISABLE_CH_MAP_on) - { - for(uint8_t i=0;i<4;i++) - CH_AETR[i]=CH_TAER[i]=CH_EATR[i]=i; - debugln("DISABLE_CH_MAP_on"); - } - else - { - CH_AETR[0]=AILERON;CH_AETR[1]=ELEVATOR;CH_AETR[2]=THROTTLE;CH_AETR[3]=RUDDER; - CH_TAER[0]=THROTTLE;CH_TAER[1]=AILERON;CH_TAER[2]=ELEVATOR;CH_TAER[3]=RUDDER; - CH_EATR[0]=ELEVATOR;CH_EATR[1]=AILERON;CH_EATR[2]=THROTTLE;CH_EATR[3]=RUDDER; - debugln("DISABLE_CH_MAP_off"); - } - } - if( (rx_ok_buff[0] != cur_protocol[0]) || ((rx_ok_buff[1]&0x5F) != (cur_protocol[1]&0x5F)) || ( (rx_ok_buff[2]&0x7F) != (cur_protocol[2]&0x7F) ) ) { // New model has been selected CHANGE_PROTOCOL_FLAG_on; //change protocol @@ -1679,6 +1661,27 @@ void update_serial_data() for(uint8_t i=0;i<3;i++) cur_protocol[i] = rx_ok_buff[i]; + //disable channel mapping + if(!IS_CHMAP_PROTOCOL) //not a protocol supporting ch map to be disabled + DISABLE_CH_MAP_off; + if(prev_ch_mapping!=IS_DISABLE_CH_MAP_on) + { + prev_ch_mapping=IS_DISABLE_CH_MAP_on; + if(IS_DISABLE_CH_MAP_on) + { + for(uint8_t i=0;i<4;i++) + CH_AETR[i]=CH_TAER[i]=CH_EATR[i]=i; + debugln("DISABLE_CH_MAP_on"); + } + else + { + CH_AETR[0]=AILERON;CH_AETR[1]=ELEVATOR;CH_AETR[2]=THROTTLE;CH_AETR[3]=RUDDER; + CH_TAER[0]=THROTTLE;CH_TAER[1]=AILERON;CH_TAER[2]=ELEVATOR;CH_TAER[3]=RUDDER; + CH_EATR[0]=ELEVATOR;CH_EATR[1]=AILERON;CH_EATR[2]=THROTTLE;CH_EATR[3]=RUDDER; + debugln("DISABLE_CH_MAP_off"); + } + } + // decode channel/failsafe values volatile uint8_t *p=rx_ok_buff+3; uint8_t dec=-3; diff --git a/Multiprotocol/Telemetry.ino b/Multiprotocol/Telemetry.ino index 892fcf1..a35013a 100644 --- a/Multiprotocol/Telemetry.ino +++ b/Multiprotocol/Telemetry.ino @@ -136,37 +136,25 @@ static void multi_send_status() if (remote_callback != 0) { flags |= 0x04; + #ifdef MULTI_NAMES + if((sub_protocol&0x07) && multi_protocols_index != 0xFF) + { + uint8_t nbr=multi_protocols[multi_protocols_index].nbrSubProto; + if((sub_protocol&0x07)>=nbr) + flags &= ~0x04; //Invalid sub protocol + } + #endif if (IS_WAIT_BIND_on) flags |= 0x10; else if (IS_BIND_IN_PROGRESS) flags |= 0x08; - switch (protocol) - { - case PROTO_HISKY: - if(sub_protocol!=HK310) - break; - case PROTO_AFHDS2A: - case PROTO_DEVO: - case PROTO_SFHSS: - case PROTO_WK2x01: - #ifdef FAILSAFE_ENABLE - flags |= 0x20; //Failsafe supported - #endif - case PROTO_DSM: - case PROTO_SLT: - case PROTO_FLYSKY: - case PROTO_ESKY: - case PROTO_J6PRO: - flags |= 0x40; //Disable_ch_mapping supported - break; - #ifdef FAILSAFE_ENABLE - case PROTO_HOTT: - case PROTO_FRSKYX: - flags |= 0x20; //Failsafe supported - break; - #endif - } + if(IS_CHMAP_PROTOCOL) + flags |= 0x40; //Disable_ch_mapping supported + #ifdef FAILSAFE_ENABLE + if(IS_FAILSAFE_PROTOCOL) + flags |= 0x20; //Failsafe supported + #endif if(IS_DATA_BUFFER_LOW_on) flags |= 0x80; } @@ -197,8 +185,8 @@ static void multi_send_status() for(uint8_t i=0;i<7;i++) Serial_write(multi_protocols[multi_protocols_index].ProtoString[i]); // protocol name // Sub-protocol - uint8_t nbr=multi_protocols[multi_protocols_index].nbrSubProto | (multi_protocols[multi_protocols_index].optionType<<4); // add option display type - Serial_write(nbr); // number of sub protocols + uint8_t nbr=multi_protocols[multi_protocols_index].nbrSubProto; + Serial_write(nbr | (multi_protocols[multi_protocols_index].optionType<<4)); // number of sub protocols && option type uint8_t j=0; if(nbr && (sub_protocol&0x07)