mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 22:28:12 +00:00
WFLY2: add failsafe (hold/no pulse not available yet)
This commit is contained in:
parent
6d38dd2d7a
commit
5ac41fdd15
@ -224,7 +224,7 @@ void A7105_AdjustLOBaseFreq(uint8_t cmd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(offset==1024) // Use channel 15 as an input
|
if(offset==1024) // Use channel 15 as an input
|
||||||
offset=convert_channel_16b_nolimit(CH15,-300,300);
|
offset=convert_channel_16b_nolimit(CH15,-300,300,false);
|
||||||
|
|
||||||
if(old_offset==offset) // offset is the same as before...
|
if(old_offset==offset) // offset is the same as before...
|
||||||
return;
|
return;
|
||||||
|
@ -184,7 +184,7 @@ static void __attribute__((unused)) DSM_build_data_packet(uint8_t upper)
|
|||||||
if(option & 0x80)
|
if(option & 0x80)
|
||||||
value=Channel_data[CH_TAER[idx]]; // -100%..+100% => 1024..1976us and -125%..+125% => 904..2096us based on Redcon 6 channel DSM2 RX
|
value=Channel_data[CH_TAER[idx]]; // -100%..+100% => 1024..1976us and -125%..+125% => 904..2096us based on Redcon 6 channel DSM2 RX
|
||||||
else
|
else
|
||||||
value=convert_channel_16b_nolimit(CH_TAER[idx],0x156,0x6AA); // -100%..+100% => 1100..1900us and -125%..+125% => 1000..2000us based on a DX8 G2 dump
|
value=convert_channel_16b_nolimit(CH_TAER[idx],0x156,0x6AA,false); // -100%..+100% => 1100..1900us and -125%..+125% => 1000..2000us based on a DX8 G2 dump
|
||||||
#endif
|
#endif
|
||||||
if(bits==10) value>>=1;
|
if(bits==10) value>>=1;
|
||||||
value |= (upper && i==0 ? 0x8000 : 0) | (idx << bits);
|
value |= (upper && i==0 ? 0x8000 : 0) | (idx << bits);
|
||||||
|
@ -146,7 +146,7 @@ static void __attribute__((unused)) DEVO_build_data_pkt()
|
|||||||
uint8_t sign = 0x0b;
|
uint8_t sign = 0x0b;
|
||||||
for (uint8_t i = 0; i < 4; i++)
|
for (uint8_t i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
int16_t value=convert_channel_16b_nolimit(CH_EATR[ch_idx * 4 + i],-1600,1600);//range -1600..+1600
|
int16_t value=convert_channel_16b_nolimit(CH_EATR[ch_idx * 4 + i],-1600,1600,false);//range -1600..+1600
|
||||||
if(value < 0)
|
if(value < 0)
|
||||||
{
|
{
|
||||||
value = -value;
|
value = -value;
|
||||||
|
@ -182,7 +182,7 @@ static void __attribute__((unused)) SFHSS_build_data_packet()
|
|||||||
#endif
|
#endif
|
||||||
{ //Normal data
|
{ //Normal data
|
||||||
for(uint8_t i=0;i<4;i++)
|
for(uint8_t i=0;i<4;i++)
|
||||||
ch[i] = convert_channel_16b_nolimit(CH_AETR[ch_offset+i],2020,1020);
|
ch[i] = convert_channel_16b_nolimit(CH_AETR[ch_offset+i],2020,1020,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ static void __attribute__((unused)) HITEC_build_packet()
|
|||||||
packet[0] = 0x1A; // 26 bytes to follow
|
packet[0] = 0x1A; // 26 bytes to follow
|
||||||
for(uint8_t i=0;i<9;i++)
|
for(uint8_t i=0;i<9;i++)
|
||||||
{
|
{
|
||||||
uint16_t ch = convert_channel_16b_nolimit(i,0x1B87,0x3905);
|
uint16_t ch = convert_channel_16b_nolimit(i,0x1B87,0x3905,false);
|
||||||
packet[4+2*i] = ch >> 8;
|
packet[4+2*i] = ch >> 8;
|
||||||
packet[5+2*i] = ch & 0xFF;
|
packet[5+2*i] = ch & 0xFF;
|
||||||
}
|
}
|
||||||
|
@ -196,7 +196,7 @@ static void __attribute__((unused)) MLINK_build_data_packet()
|
|||||||
//Channels 426..1937..3448
|
//Channels 426..1937..3448
|
||||||
for(uint8_t i=0;i<3;i++)
|
for(uint8_t i=0;i<3;i++)
|
||||||
{
|
{
|
||||||
uint16_t tmp=ch[i]<16 ? convert_channel_16b_nolimit(ch[i],426,3448) : 0x0000;
|
uint16_t tmp=ch[i]<16 ? convert_channel_16b_nolimit(ch[i],426,3448,false) : 0x0000;
|
||||||
packet[i*2+1]=tmp>>8;
|
packet[i*2+1]=tmp>>8;
|
||||||
packet[i*2+2]=tmp;
|
packet[i*2+2]=tmp;
|
||||||
}
|
}
|
||||||
|
@ -454,7 +454,7 @@ enum MultiPacketTypes
|
|||||||
//***************
|
//***************
|
||||||
//*** Tests ***
|
//*** Tests ***
|
||||||
//***************
|
//***************
|
||||||
#define IS_FAILSAFE_PROTOCOL ( (protocol==PROTO_HISKY && sub_protocol==HK310) || protocol==PROTO_AFHDS2A || protocol==PROTO_DEVO || protocol==PROTO_FUTABA || protocol==PROTO_WK2x01 || protocol== PROTO_HOTT || protocol==PROTO_FRSKYX || protocol==PROTO_FRSKYX2 || protocol==PROTO_FRSKY_R9)
|
#define IS_FAILSAFE_PROTOCOL ( (protocol==PROTO_HISKY && sub_protocol==HK310) || protocol==PROTO_AFHDS2A || protocol==PROTO_DEVO || protocol==PROTO_FUTABA || protocol==PROTO_WK2x01 || protocol== PROTO_HOTT || protocol==PROTO_FRSKYX || protocol==PROTO_FRSKYX2 || protocol==PROTO_FRSKY_R9 || protocol==PROTO_WFLY2)
|
||||||
#define IS_CHMAP_PROTOCOL ( (protocol==PROTO_HISKY && sub_protocol==HK310) || protocol==PROTO_AFHDS2A || protocol==PROTO_DEVO || protocol==PROTO_FUTABA || protocol==PROTO_WK2x01 || protocol== PROTO_DSM || protocol==PROTO_SLT || protocol==PROTO_FLYSKY || (protocol==PROTO_KYOSHO && sub_protocol==KYOSHO_HYPE) || protocol==PROTO_ESKY || protocol==PROTO_J6PRO || protocol==PROTO_PELIKAN || protocol==PROTO_SKYARTEC || protocol==PROTO_ESKY150V2 || protocol==PROTO_DSM_RX)
|
#define IS_CHMAP_PROTOCOL ( (protocol==PROTO_HISKY && sub_protocol==HK310) || protocol==PROTO_AFHDS2A || protocol==PROTO_DEVO || protocol==PROTO_FUTABA || protocol==PROTO_WK2x01 || protocol== PROTO_DSM || protocol==PROTO_SLT || protocol==PROTO_FLYSKY || (protocol==PROTO_KYOSHO && sub_protocol==KYOSHO_HYPE) || protocol==PROTO_ESKY || protocol==PROTO_J6PRO || protocol==PROTO_PELIKAN || protocol==PROTO_SKYARTEC || protocol==PROTO_ESKY150V2 || protocol==PROTO_DSM_RX)
|
||||||
|
|
||||||
//***************
|
//***************
|
||||||
|
@ -56,16 +56,16 @@ static void __attribute__((unused)) pelikan_build_packet()
|
|||||||
packet[13] = rx_tx_addr[3];
|
packet[13] = rx_tx_addr[3];
|
||||||
//Channels
|
//Channels
|
||||||
uint8_t offset=upper?4:0;
|
uint8_t offset=upper?4:0;
|
||||||
uint16_t channel=convert_channel_16b_nolimit(CH_AETR[offset++], 153, 871);
|
uint16_t channel=convert_channel_16b_nolimit(CH_AETR[offset++], 153, 871,false);
|
||||||
uint8_t top=(channel>>2) & 0xC0;
|
uint8_t top=(channel>>2) & 0xC0;
|
||||||
packet[2] = channel;
|
packet[2] = channel;
|
||||||
channel=convert_channel_16b_nolimit(CH_AETR[offset++], 153, 871);
|
channel=convert_channel_16b_nolimit(CH_AETR[offset++], 153, 871,false);
|
||||||
top|=(channel>>4) & 0x30;
|
top|=(channel>>4) & 0x30;
|
||||||
packet[3] = channel;
|
packet[3] = channel;
|
||||||
channel=convert_channel_16b_nolimit(CH_AETR[offset++], 153, 871);
|
channel=convert_channel_16b_nolimit(CH_AETR[offset++], 153, 871,false);
|
||||||
top|=(channel>>6) & 0x0C;
|
top|=(channel>>6) & 0x0C;
|
||||||
packet[4] = channel;
|
packet[4] = channel;
|
||||||
channel=convert_channel_16b_nolimit(CH_AETR[offset], 153, 871);
|
channel=convert_channel_16b_nolimit(CH_AETR[offset], 153, 871,false);
|
||||||
top|=(channel>>8) & 0x03;
|
top|=(channel>>8) & 0x03;
|
||||||
packet[5] = channel;
|
packet[5] = channel;
|
||||||
packet[6] = top;
|
packet[6] = top;
|
||||||
|
@ -177,7 +177,7 @@ static void __attribute__((unused)) RLINK_send_packet()
|
|||||||
// pack 16 channels on 11 bits values between 170 and 1876, 1023 middle. The last 8 channels are failsafe values associated to the first 8 values.
|
// pack 16 channels on 11 bits values between 170 and 1876, 1023 middle. The last 8 channels are failsafe values associated to the first 8 values.
|
||||||
for (uint8_t i = 0; i < 16; i++)
|
for (uint8_t i = 0; i < 16; i++)
|
||||||
{
|
{
|
||||||
uint32_t val = convert_channel_16b_nolimit(i,170,1876); // allow extended limits
|
uint32_t val = convert_channel_16b_nolimit(i,170,1876,false); // allow extended limits
|
||||||
if (val & 0x8000)
|
if (val & 0x8000)
|
||||||
val = 0;
|
val = 0;
|
||||||
else if (val > 2047)
|
else if (val > 2047)
|
||||||
|
@ -77,19 +77,19 @@ static void __attribute__((unused)) TRAXXAS_send_data_packet()
|
|||||||
packet[0] = 0x01;
|
packet[0] = 0x01;
|
||||||
memset(&packet[1],0x00,TRAXXAS_PACKET_SIZE-1);
|
memset(&packet[1],0x00,TRAXXAS_PACKET_SIZE-1);
|
||||||
//Steering
|
//Steering
|
||||||
uint16_t ch = convert_channel_16b_nolimit(RUDDER,500,1000);
|
uint16_t ch = convert_channel_16b_nolimit(RUDDER,500,1000,false);
|
||||||
packet[2]=ch>>8;
|
packet[2]=ch>>8;
|
||||||
packet[3]=ch;
|
packet[3]=ch;
|
||||||
//Throttle
|
//Throttle
|
||||||
ch = convert_channel_16b_nolimit(THROTTLE,500,1000);
|
ch = convert_channel_16b_nolimit(THROTTLE,500,1000,false);
|
||||||
packet[4]=ch>>8;
|
packet[4]=ch>>8;
|
||||||
packet[5]=ch;
|
packet[5]=ch;
|
||||||
//AUX3
|
//AUX3
|
||||||
ch = convert_channel_16b_nolimit(AILERON,500,1000);
|
ch = convert_channel_16b_nolimit(AILERON,500,1000,false);
|
||||||
packet[6]=ch>>8;
|
packet[6]=ch>>8;
|
||||||
packet[7]=ch;
|
packet[7]=ch;
|
||||||
//AUX4???
|
//AUX4???
|
||||||
ch = convert_channel_16b_nolimit(ELEVATOR,500,1000);
|
ch = convert_channel_16b_nolimit(ELEVATOR,500,1000,false);
|
||||||
packet[12]=ch>>8;
|
packet[12]=ch>>8;
|
||||||
packet[13]=ch;
|
packet[13]=ch;
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ enum{
|
|||||||
static void __attribute__((unused)) WFLY2_build_packet()
|
static void __attribute__((unused)) WFLY2_build_packet()
|
||||||
{
|
{
|
||||||
static uint16_t pseudo=0;
|
static uint16_t pseudo=0;
|
||||||
|
uint8_t offset=0;
|
||||||
|
|
||||||
//End bind
|
//End bind
|
||||||
if(IS_BIND_IN_PROGRESS && bind_counter)
|
if(IS_BIND_IN_PROGRESS && bind_counter)
|
||||||
@ -73,6 +74,15 @@ static void __attribute__((unused)) WFLY2_build_packet()
|
|||||||
{
|
{
|
||||||
//Header
|
//Header
|
||||||
//packet[0] = 0x00; // Normal packet
|
//packet[0] = 0x00; // Normal packet
|
||||||
|
#ifdef FAILSAFE_ENABLE
|
||||||
|
if(IS_FAILSAFE_VALUES_on)
|
||||||
|
{
|
||||||
|
packet[0] = 0x01; //Failsafe packet
|
||||||
|
packet[5] = 0x58; // unknown, values are counting 58,59,5A,5B and rollover
|
||||||
|
packet[6] = 0x55; // unknown and constant
|
||||||
|
offset=2;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//Pseudo
|
//Pseudo
|
||||||
uint16_t high_bit=(pseudo & 0x8000) ^ 0x8000; // toggle 0x8000 every other line
|
uint16_t high_bit=(pseudo & 0x8000) ^ 0x8000; // toggle 0x8000 every other line
|
||||||
@ -104,15 +114,19 @@ static void __attribute__((unused)) WFLY2_build_packet()
|
|||||||
//10 channels -100%=0x2C1...0%=0x800...+100%=0xD3F
|
//10 channels -100%=0x2C1...0%=0x800...+100%=0xD3F
|
||||||
for(uint8_t i = 0; i < 5; i++)
|
for(uint8_t i = 0; i < 5; i++)
|
||||||
{
|
{
|
||||||
uint16_t temp=convert_channel_16b_nolimit(i*2 , 0x2C1, 0xD3F);
|
uint16_t temp=convert_channel_16b_nolimit(i*2 , 0x2C1, 0xD3F, IS_FAILSAFE_VALUES_on);
|
||||||
packet[5 + i*3] = temp&0xFF; // low byte
|
packet[5 + offset + i*3] = temp&0xFF; // low byte
|
||||||
packet[7 + i*3] = (temp>>8)&0x0F; // high byte
|
packet[7 + offset + i*3] = (temp>>8)&0x0F; // high byte
|
||||||
temp=convert_channel_16b_nolimit(i*2+1, 0x2C1, 0xD3F);
|
temp=convert_channel_16b_nolimit(i*2+1, 0x2C1, 0xD3F, IS_FAILSAFE_VALUES_on);
|
||||||
packet[6 + i*3] = temp&0xFF; // low byte
|
packet[6 + offset + i*3] = temp&0xFF; // low byte
|
||||||
packet[7 + i*3] |= (temp>>4)&0xF0; // high byte
|
packet[7 + offset + i*3] |= (temp>>4)&0xF0; // high byte
|
||||||
}
|
}
|
||||||
|
|
||||||
//Unknown bytes 20..31
|
//Unknown bytes 20+offset..31
|
||||||
|
|
||||||
|
#ifdef FAILSAFE_ENABLE
|
||||||
|
FAILSAFE_VALUES_off;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//Debug
|
//Debug
|
||||||
|
@ -105,23 +105,23 @@ static uint16_t __attribute__((unused)) WFLY_send_data_packet()
|
|||||||
len=4;
|
len=4;
|
||||||
for(uint8_t i=0;i<3;i++)
|
for(uint8_t i=0;i<3;i++)
|
||||||
{ // Channels
|
{ // Channels
|
||||||
uint16_t ch = convert_channel_16b_nolimit(i*4+0,151,847);
|
uint16_t ch = convert_channel_16b_nolimit(i*4+0,151,847,false);
|
||||||
uint8_t offset=i*5;
|
uint8_t offset=i*5;
|
||||||
packet[3+offset]|=ch<<6;
|
packet[3+offset]|=ch<<6;
|
||||||
packet[4+offset]=ch>>2;
|
packet[4+offset]=ch>>2;
|
||||||
len++;
|
len++;
|
||||||
if(--nbr_ch==0) break;
|
if(--nbr_ch==0) break;
|
||||||
ch = convert_channel_16b_nolimit(i*4+1,151,847);
|
ch = convert_channel_16b_nolimit(i*4+1,151,847,false);
|
||||||
packet[5+offset]=ch;
|
packet[5+offset]=ch;
|
||||||
packet[6+offset]=ch>>8;
|
packet[6+offset]=ch>>8;
|
||||||
len+=2;
|
len+=2;
|
||||||
if(--nbr_ch==0) break;
|
if(--nbr_ch==0) break;
|
||||||
ch = convert_channel_16b_nolimit(i*4+2,151,847);
|
ch = convert_channel_16b_nolimit(i*4+2,151,847,false);
|
||||||
packet[6+offset]|=ch<<2;
|
packet[6+offset]|=ch<<2;
|
||||||
packet[7+offset]=ch>>6;
|
packet[7+offset]=ch>>6;
|
||||||
len++;
|
len++;
|
||||||
if(--nbr_ch==0) break;
|
if(--nbr_ch==0) break;
|
||||||
ch = convert_channel_16b_nolimit(i*4+3,151,847);
|
ch = convert_channel_16b_nolimit(i*4+3,151,847,false);
|
||||||
packet[7+offset]|=ch<<4;
|
packet[7+offset]|=ch<<4;
|
||||||
packet[8+offset]=ch>>4;
|
packet[8+offset]=ch>>4;
|
||||||
len++;
|
len++;
|
||||||
|
@ -79,7 +79,7 @@ static void __attribute__((unused)) WK_build_bind_pkt(const uint8_t *init)
|
|||||||
|
|
||||||
static int16_t __attribute__((unused)) WK_get_channel(uint8_t ch, int32_t scale, int16_t center, int16_t range)
|
static int16_t __attribute__((unused)) WK_get_channel(uint8_t ch, int32_t scale, int16_t center, int16_t range)
|
||||||
{
|
{
|
||||||
int16_t value = convert_channel_16b_nolimit(CH_AETR[ch],-scale,scale)+center;
|
int16_t value = convert_channel_16b_nolimit(CH_AETR[ch],-scale,scale,false)+center;
|
||||||
if (value < center - range) value = center - range;
|
if (value < center - range) value = center - range;
|
||||||
if (value > center + range) value = center + range;
|
if (value > center + range) value = center + range;
|
||||||
return value;
|
return value;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user