diff --git a/Lua_scripts/MultiChan.txt b/Lua_scripts/MultiChan.txt
index 8276744..85ecba3 100644
--- a/Lua_scripts/MultiChan.txt
+++ b/Lua_scripts/MultiChan.txt
@@ -179,3 +179,5 @@
78,0,M-Link,Std,0,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12,CH13,CH14,CH15,CH16
79,0,WFLY2,RF20x,0,CH5,CH6,CH7,CH8,CH9,CH10
80,0,E016Hv2,E016Hv2,1,TakLan,EmStop,Flip,Calib,HLess,RTH
+81,0,E010r5,E010r5,1,Flip,HLess,RTH
+82,0,LOLI,0,CH5,CH6,CH7,CH8
diff --git a/Multiprotocol/Bayang_nrf24l01.ino b/Multiprotocol/Bayang_nrf24l01.ino
index 71953a4..2b02cca 100644
--- a/Multiprotocol/Bayang_nrf24l01.ino
+++ b/Multiprotocol/Bayang_nrf24l01.ino
@@ -143,19 +143,19 @@ static void __attribute__((unused)) BAYANG_send_packet()
if(CH13_SW)
packet[3] |= BAYANG_FLAG_EMG_STOP;
//Aileron
- val = convert_channel_10b(AILERON);
+ val = convert_channel_10b(AILERON, false);
packet[4] = (val>>8) + (dyntrim ? ((val>>2) & 0xFC) : 0x7C);
packet[5] = val & 0xFF;
//Elevator
- val = convert_channel_10b(ELEVATOR);
+ val = convert_channel_10b(ELEVATOR, false);
packet[6] = (val>>8) + (dyntrim ? ((val>>2) & 0xFC) : 0x7C);
packet[7] = val & 0xFF;
//Throttle
- val = convert_channel_10b(THROTTLE);
+ val = convert_channel_10b(THROTTLE, false);
packet[8] = (val>>8) + 0x7C;
packet[9] = val & 0xFF;
//Rudder
- val = convert_channel_10b(RUDDER);
+ val = convert_channel_10b(RUDDER, false);
packet[10] = (val>>8) + (dyntrim ? ((val>>2) & 0xFC) : 0x7C);
packet[11] = val & 0xFF;
}
diff --git a/Multiprotocol/Convert.ino b/Multiprotocol/Convert.ino
index 488321f..551b669 100644
--- a/Multiprotocol/Convert.ino
+++ b/Multiprotocol/Convert.ino
@@ -32,9 +32,15 @@ uint16_t convert_channel_ppm(uint8_t num)
}
// Channel value 100% is converted to 10bit values 0<->1023
-uint16_t convert_channel_10b(uint8_t num)
+uint16_t convert_channel_10b(uint8_t num, bool failsafe)
{
- uint16_t val=Channel_data[num];
+ uint16_t val;
+ #ifdef FAILSAFE_ENABLE
+ if(failsafe)
+ val=Failsafe_data[num]; // 0<->2047
+ else
+ #endif
+ val=Channel_data[num];
val=((val<<2)+val)>>3;
if(val<=128) return 0;
if(val>=1152) return 1023;
diff --git a/Multiprotocol/E010R5_cyrf6936.ino b/Multiprotocol/E010R5_cyrf6936.ino
index d66de85..ec774a3 100644
--- a/Multiprotocol/E010R5_cyrf6936.ino
+++ b/Multiprotocol/E010R5_cyrf6936.ino
@@ -172,7 +172,7 @@ uint16_t ReadE010R5()
hopping_frequency_no++;
hopping_frequency_no &= 3;
if(IS_BIND_IN_PROGRESS)
- rf_ch_num = 48 + (hopping_frequency_no<<3);
+ rf_ch_num = 0x30 + (hopping_frequency_no<<3);
else
rf_ch_num = hopping_frequency[hopping_frequency_no];
CYRF_ConfigRFChannel(rf_ch_num);
@@ -193,10 +193,10 @@ uint16_t initE010R5()
E010R5_cyrf_init();
#ifdef E010R5_FORCE_ID
- hopping_frequency[0]=48;
- hopping_frequency[1]=69;
- hopping_frequency[2]=64;
- hopping_frequency[3]=53;
+ hopping_frequency[0]=0x30; //48
+ hopping_frequency[1]=0x45; //69
+ hopping_frequency[2]=0x40; //64
+ hopping_frequency[3]=0x35; //53
rx_tx_addr[0]=0x00;
rx_tx_addr[1]=0x45;
rx_tx_addr[2]=0x46;
diff --git a/Multiprotocol/J6Pro_cyrf6936.ino b/Multiprotocol/J6Pro_cyrf6936.ino
index f8e5e5c..b24748c 100644
--- a/Multiprotocol/J6Pro_cyrf6936.ino
+++ b/Multiprotocol/J6Pro_cyrf6936.ino
@@ -59,7 +59,7 @@ static void __attribute__((unused)) j6pro_build_data_packet()
packet[0] = 0xaa; //FIXME what is this?
for (i = 0; i < 12; i++)
{
- value = convert_channel_10b(CH_AETR[i]);
+ value = convert_channel_10b(CH_AETR[i], false);
packet[i+1] = value & 0xff;
upperbits |= (value >> 8) << (i * 2);
}
diff --git a/Multiprotocol/KN_nrf24l01.ino b/Multiprotocol/KN_nrf24l01.ino
index 0a60173..54d26da 100644
--- a/Multiprotocol/KN_nrf24l01.ino
+++ b/Multiprotocol/KN_nrf24l01.ino
@@ -125,16 +125,16 @@ static void __attribute__((unused)) kn_bind_init()
static void __attribute__((unused)) kn_update_packet_control_data()
{
uint16_t value;
- value = convert_channel_10b(THROTTLE);
+ value = convert_channel_10b(THROTTLE, false);
packet[0] = (value >> 8) & 0xFF;
packet[1] = value & 0xFF;
- value = convert_channel_10b(AILERON);
+ value = convert_channel_10b(AILERON, false);
packet[2] = (value >> 8) & 0xFF;
packet[3] = value & 0xFF;
- value = convert_channel_10b(ELEVATOR);
+ value = convert_channel_10b(ELEVATOR, false);
packet[4] = (value >> 8) & 0xFF;
packet[5] = value & 0xFF;
- value = convert_channel_10b(RUDDER);
+ value = convert_channel_10b(RUDDER, false);
packet[6] = (value >> 8) & 0xFF;
packet[7] = value & 0xFF;
// Trims, middle is 0x64 (100) range 0-200
diff --git a/Multiprotocol/LOLI_nrf24l01.ino b/Multiprotocol/LOLI_nrf24l01.ino
new file mode 100644
index 0000000..d384631
--- /dev/null
+++ b/Multiprotocol/LOLI_nrf24l01.ino
@@ -0,0 +1,274 @@
+/*
+ This project is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+Multiprotocol is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Multiprotocol. If not, see .
+ */
+
+#if defined(LOLI_NRF24L01_INO)
+
+#include "iface_nrf24l01.h"
+
+#define LOLI_BIND_CHANNEL 33
+#define LOLI_PACKET_SIZE 11
+#define LOLI_NUM_CHANNELS 5
+
+static void __attribute__((unused)) LOLI_init()
+{
+ NRF24L01_Initialize();
+ NRF24L01_FlushTx();
+ NRF24L01_FlushRx();
+ NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0x00); // No Auto Acknowldgement on all data pipes
+ NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, 0x01); // Enable data pipe 0 only
+ NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, 0x03); // 5-bytes RX/TX address
+ NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, (uint8_t*)"LOVE!", 5);
+ NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, (uint8_t*)"LOVE!", 5);
+ NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x00); // No retransmits
+ NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, LOLI_PACKET_SIZE); // RX FIFO size
+ NRF24L01_SetBitrate(NRF24L01_BR_250K); // 250Kbps
+
+ NRF24L01_SetPower();
+ NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70); // Clear data ready, data sent, and retransmit
+ NRF24L01_SetTxRxMode(TX_EN);
+}
+
+// flags going to packet[1] for packet type 0xa2 (Rx config)
+#define LOLI_FLAG_PWM7 0x02
+#define LOLI_FLAG_PWM2 0x04
+#define LOLI_FLAG_PWM1 0x08
+#define LOLI_FLAG_SBUS 0x40
+#define LOLI_FLAG_PPM 0x80
+
+// flags going to packet[2] for packet type 0xa2 (Rx config)
+#define LOLI_FLAG_SW8 0x01
+#define LOLI_FLAG_SW7 0x02
+#define LOLI_FLAG_SW6 0x04
+#define LOLI_FLAG_SW5 0x08
+#define LOLI_FLAG_SW4 0x10
+#define LOLI_FLAG_SW3 0x20
+#define LOLI_FLAG_SW2 0x40
+#define LOLI_FLAG_SW1 0x80
+
+static void __attribute__((unused)) LOLI_send_packet()
+{
+ if(IS_BIND_IN_PROGRESS)
+ {
+ packet[0] = 0xa0;
+ memcpy(&packet[1], hopping_frequency, LOLI_NUM_CHANNELS);
+ memcpy(&packet[6], rx_tx_addr, 5);
+ rf_ch_num = LOLI_BIND_CHANNEL;
+ }
+ else
+ {
+ if(LOLI_SerialRX)
+ {// RX config
+ packet[0] = 0xa2;
+ packet[1] = LOLI_P1; // CH1:LOLI_FLAG_PPM || LOLI_FLAG_PWM1, CH2:LOLI_FLAG_PWM2, CH5:LOLI_FLAG_SBUS, CH7:LOLI_FLAG_PWM7
+ packet[2] = LOLI_P2; // CHx switch bit(8-x)=1
+ LOLI_SerialRX=false;
+ }
+ else
+ {// Normal packet
+ #ifdef FAILSAFE_ENABLE
+ packet[0] = IS_FAILSAFE_VALUES_on ? 0xa0 : 0xa1;
+ #else
+ packet[0] = 0xa1;
+ #endif
+
+ //Build channels
+ uint8_t ch=0, offset=1;
+ uint16_t val;
+ for(uint8_t i=0;i<2;i++)
+ {
+ val = convert_channel_10b(ch++, IS_FAILSAFE_VALUES_on);
+ packet[offset++] = val >> 2;
+ packet[offset ] = val << 6;
+ val = convert_channel_10b(ch++, IS_FAILSAFE_VALUES_on);
+ packet[offset++]|= val >> 4;
+ packet[offset ] = val << 4;
+ val = convert_channel_10b(ch++, IS_FAILSAFE_VALUES_on);
+ packet[offset++]|= val >> 6;
+ packet[offset ] = val << 2;
+ val = convert_channel_10b(ch++, IS_FAILSAFE_VALUES_on);
+ packet[offset++]|= val >> 8;
+ packet[offset++] = val & 0xff;
+ }
+ FAILSAFE_VALUES_off; // Failsafe values are sent if they were available
+ }
+
+ if (++hopping_frequency_no > LOLI_NUM_CHANNELS-1)
+ hopping_frequency_no = 0;
+ rf_ch_num = hopping_frequency[hopping_frequency_no];
+ }
+
+ #if 0
+ debug("P(%02X):",rf_ch_num);
+ for(uint8_t i=0; i 50)
+ phase = LOLI_BIND1;
+ return 1000;
+
+ case LOLI_PREP_DATA:
+ BIND_DONE;
+ NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rx_tx_addr, 5);
+ NRF24L01_WriteRegisterMulti(NRF24L01_10_TX_ADDR, rx_tx_addr, 5);
+ NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
+ NRF24L01_FlushRx();
+ packet_count = 0;
+ phase++;
+
+ case LOLI_DATA1:
+ #ifdef LOLI_HUB_TELEMETRY
+ // Check telemetry
+ if (NRF24L01_ReadReg(NRF24L01_07_STATUS) & _BV(NRF24L01_07_RX_DR))
+ { // RX fifo data ready
+ NRF24L01_ReadPayload(packet, LOLI_PACKET_SIZE);
+ #if 0
+ debug("T:");
+ for(uint8_t i=0; i=100)
+ {
+ packet_count=0;
+ TX_LQI=telemetry_counter;
+ if(telemetry_counter==0)
+ telemetry_lost = 1;
+ telemetry_counter = 0;
+ }
+ #endif
+
+ // Send data packet
+ LOLI_send_packet();
+
+ #ifdef LOLI_HUB_TELEMETRY
+ phase ++;
+ return 2000;
+ case LOLI_DATA2:
+ // Switch to RX mode
+ NRF24L01_SetTxRxMode(TXRX_OFF);
+ NRF24L01_FlushRx();
+ NRF24L01_SetTxRxMode(RX_EN);
+ NRF24L01_WriteReg(NRF24L01_00_CONFIG, 0x3b); // 8bit CRC, RX
+ phase = LOLI_DATA1;
+ return 18000;
+ #else
+ break;
+ #endif
+ }
+ return 20000;
+}
+
+uint16_t initLOLI()
+{
+ rx_tx_addr[1] %= 0x30;
+ calc_fh_channels(LOLI_NUM_CHANNELS);
+ for (uint8_t i=0; i < LOLI_NUM_CHANNELS; i++)
+ if (hopping_frequency[i] == LOLI_BIND_CHANNEL)
+ hopping_frequency[i]++;
+
+ if (IS_BIND_IN_PROGRESS)
+ {
+ bind_counter=250;
+ phase = LOLI_BIND1;
+ }
+ else
+ phase = LOLI_PREP_DATA;
+
+ LOLI_init();
+
+ return 500;
+}
+
+#endif
diff --git a/Multiprotocol/Multi.txt b/Multiprotocol/Multi.txt
index 8db8b9e..ba76208 100644
--- a/Multiprotocol/Multi.txt
+++ b/Multiprotocol/Multi.txt
@@ -78,3 +78,5 @@
78,M-Link
79,WFLY,RF20x
80,E016H,E016Hv2
+81,E010r5
+82,LOLI
\ No newline at end of file
diff --git a/Multiprotocol/Multi_Names.ino b/Multiprotocol/Multi_Names.ino
index f74ba58..f1c8a91 100644
--- a/Multiprotocol/Multi_Names.ino
+++ b/Multiprotocol/Multi_Names.ino
@@ -96,6 +96,7 @@ const char STR_TEST[] ="Test";
const char STR_NANORF[] ="NanoRF";
const char STR_E016HV2[] ="E016Hv2";
const char STR_E010R5[] ="E010r5";
+const char STR_LOLI[] ="LOLI";
const char STR_SUBTYPE_FLYSKY[] = "\x04""Std\0""V9x9""V6x6""V912""CX20";
const char STR_SUBTYPE_HUBSAN[] = "\x04""H107""H301""H501";
@@ -316,6 +317,9 @@ const mm_protocol_definition multi_protocols[] = {
#if defined(KYOSHO_A7105_INO)
{PROTO_KYOSHO, STR_KYOSHO, 2, STR_SUBTYPE_KYOSHO, OPTION_NONE },
#endif
+ #if defined(LOLI_NRF24L01_INO)
+ {PROTO_LOLI, STR_LOLI, 0, NO_SUBTYPE, OPTION_NONE },
+ #endif
#if defined(MJXQ_NRF24L01_INO)
{PROTO_MJXQ, STR_MJXQ, 7, STR_SUBTYPE_MJXQ, OPTION_RFTUNE },
#endif
diff --git a/Multiprotocol/Multiprotocol.h b/Multiprotocol/Multiprotocol.h
index c8732d3..a74f353 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 96
+#define VERSION_PATCH_LEVEL 97
//******************
// Protocols
@@ -47,7 +47,7 @@ enum PROTOCOLS
PROTO_MJXQ = 18, // =>NRF24L01
PROTO_SHENQI = 19, // =>NRF24L01
PROTO_FY326 = 20, // =>NRF24L01
- PROTO_FUTABA = 21, // =>CC2500
+ PROTO_FUTABA = 21, // =>CC2500
PROTO_J6PRO = 22, // =>CYRF6936
PROTO_FQ777 = 23, // =>NRF24L01
PROTO_ASSAN = 24, // =>NRF24L01
@@ -107,6 +107,7 @@ enum PROTOCOLS
PROTO_WFLY2 = 79, // =>A7105
PROTO_E016HV2 = 80, // =>CC2500 & NRF24L01
PROTO_E010R5 = 81, // =>CYRF6936
+ PROTO_LOLI = 82, // =>NRF24L01
PROTO_NANORF = 126, // =>NRF24L01
PROTO_TEST = 127, // =>CC2500
@@ -463,7 +464,7 @@ enum MultiPacketTypes
//***************
//*** 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 || protocol==PROTO_WFLY2)
+#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 || protocol==PROTO_LOLI)
#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)
//***************
@@ -849,6 +850,7 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
WFLY2 79
E016HV2 80
E010R5 81
+ LOLI 82
BindBit=> 0x80 1=Bind/0=No
AutoBindBit=> 0x40 1=Yes /0=No
RangeCheck=> 0x20 1=Yes /0=No
diff --git a/Multiprotocol/Multiprotocol.ino b/Multiprotocol/Multiprotocol.ino
index 8fb6d3b..2b0186b 100644
--- a/Multiprotocol/Multiprotocol.ino
+++ b/Multiprotocol/Multiprotocol.ino
@@ -261,6 +261,10 @@ uint8_t packet_in[TELEMETRY_BUFFER_SIZE];//telemetry receiving packets
bool DSM_SerialRX=false;
#endif
#endif // TELEMETRY
+#ifdef LOLI_NRF24L01_INO
+ bool LOLI_SerialRX=false;
+ uint8_t LOLI_P1=0, LOLI_P2=0;
+#endif
// Callback
typedef uint16_t (*void_function_t) (void);//pointer to a function with no parameters which return an uint16_t integer
@@ -821,7 +825,7 @@ bool Update_All()
update_led_status();
#if defined(TELEMETRY)
#if ( !( defined(MULTI_TELEMETRY) || defined(MULTI_STATUS) ) )
- if((protocol == PROTO_BAYANG_RX) || (protocol == PROTO_AFHDS2A_RX) || (protocol == PROTO_FRSKY_RX) || (protocol == PROTO_SCANNER) || (protocol==PROTO_FRSKYD) || (protocol==PROTO_BAYANG) || (protocol==PROTO_NCC1701) || (protocol==PROTO_BUGS) || (protocol==PROTO_BUGSMINI) || (protocol==PROTO_HUBSAN) || (protocol==PROTO_AFHDS2A) || (protocol==PROTO_FRSKYX) || (protocol==PROTO_FRSKYX2) || (protocol==PROTO_DSM) || (protocol==PROTO_CABELL) || (protocol==PROTO_HITEC) || (protocol==PROTO_HOTT) || (protocol==PROTO_PROPEL) || (protocol==PROTO_OMP) || (protocol==PROTO_DEVO) || (protocol==PROTO_DSM_RX) || (protocol==PROTO_FRSKY_R9) || (protocol==PROTO_RLINK) || (protocol==PROTO_WFLY2))
+ if((protocol == PROTO_BAYANG_RX) || (protocol == PROTO_AFHDS2A_RX) || (protocol == PROTO_FRSKY_RX) || (protocol == PROTO_SCANNER) || (protocol==PROTO_FRSKYD) || (protocol==PROTO_BAYANG) || (protocol==PROTO_NCC1701) || (protocol==PROTO_BUGS) || (protocol==PROTO_BUGSMINI) || (protocol==PROTO_HUBSAN) || (protocol==PROTO_AFHDS2A) || (protocol==PROTO_FRSKYX) || (protocol==PROTO_FRSKYX2) || (protocol==PROTO_DSM) || (protocol==PROTO_CABELL) || (protocol==PROTO_HITEC) || (protocol==PROTO_HOTT) || (protocol==PROTO_PROPEL) || (protocol==PROTO_OMP) || (protocol==PROTO_DEVO) || (protocol==PROTO_DSM_RX) || (protocol==PROTO_FRSKY_R9) || (protocol==PROTO_RLINK) || (protocol==PROTO_WFLY2) || (protocol==PROTO_LOLI))
#endif
if(IS_DISABLE_TELEM_off)
TelemetryUpdate();
@@ -1495,6 +1499,12 @@ static void protocol_init()
remote_callback = MT99XX_callback;
break;
#endif
+ #if defined(LOLI_NRF24L01_INO)
+ case PROTO_LOLI:
+ next_callback=initLOLI();
+ remote_callback = LOLI_callback;
+ break;
+ #endif
#if defined(MJXQ_NRF24L01_INO)
case PROTO_MJXQ:
next_callback=initMJXQ();
@@ -2061,6 +2071,14 @@ void update_serial_data()
DSM_SerialRX=true;
}
#endif
+ #ifdef LOLI_NRF24L01_INO
+ if(protocol==PROTO_LOLI && rx_len==27+2)
+ {//Protocol waiting for 2 bytes
+ LOLI_SerialRX=true;
+ LOLI_P1=rx_ok_buff[27];
+ LOLI_P2=rx_ok_buff[28];
+ }
+ #endif
}
RX_DONOTUPDATE_off;
@@ -2305,7 +2323,7 @@ void pollBoot()
#if defined(TELEMETRY)
void PPM_Telemetry_serial_init()
{
- if( (protocol==PROTO_FRSKYD) || (protocol==PROTO_HUBSAN) || (protocol==PROTO_AFHDS2A) || (protocol==PROTO_BAYANG)|| (protocol==PROTO_NCC1701) || (protocol==PROTO_CABELL) || (protocol==PROTO_HITEC) || (protocol==PROTO_BUGS) || (protocol==PROTO_BUGSMINI) || (protocol==PROTO_PROPEL) || (protocol==PROTO_OMP) || (protocol==PROTO_RLINK) || (protocol==PROTO_WFLY2)
+ if( (protocol==PROTO_FRSKYD) || (protocol==PROTO_HUBSAN) || (protocol==PROTO_AFHDS2A) || (protocol==PROTO_BAYANG)|| (protocol==PROTO_NCC1701) || (protocol==PROTO_CABELL) || (protocol==PROTO_HITEC) || (protocol==PROTO_BUGS) || (protocol==PROTO_BUGSMINI) || (protocol==PROTO_PROPEL) || (protocol==PROTO_OMP) || (protocol==PROTO_RLINK) || (protocol==PROTO_WFLY2) || (protocol==PROTO_LOLI)
#ifdef TELEMETRY_FRSKYX_TO_FRSKYD
|| (protocol==PROTO_FRSKYX) || (protocol==PROTO_FRSKYX2)
#endif
diff --git a/Multiprotocol/SLT_nrf24l01.ino b/Multiprotocol/SLT_nrf24l01.ino
index b5f62e6..2926592 100644
--- a/Multiprotocol/SLT_nrf24l01.ino
+++ b/Multiprotocol/SLT_nrf24l01.ino
@@ -129,7 +129,7 @@ static void __attribute__((unused)) SLT_build_packet()
uint8_t e = 0; // byte where extension 2 bits for every 10-bit channel are packed
for (uint8_t i = 0; i < 4; ++i)
{
- uint16_t v = convert_channel_10b(CH_AETR[i]);
+ uint16_t v = convert_channel_10b(CH_AETR[i], false);
if(sub_protocol>SLT_V2 && (i==CH2 || i==CH3) )
v=1023-v; // reverse throttle and elevator channels for Q100/Q200/MR100 protocols
packet[i] = v;
diff --git a/Multiprotocol/Telemetry.ino b/Multiprotocol/Telemetry.ino
index 1a9603f..43387bf 100644
--- a/Multiprotocol/Telemetry.ino
+++ b/Multiprotocol/Telemetry.ino
@@ -531,7 +531,7 @@ void frsky_link_frame()
telemetry_link |= 2 ; // Send hub if available
}
else
- {//PROTO_HUBSAN, PROTO_AFHDS2A, PROTO_BAYANG, PROTO_NCC1701, PROTO_CABELL, PROTO_HITEC, PROTO_BUGS, PROTO_BUGSMINI, PROTO_FRSKYX, PROTO_FRSKYX2, PROTO_PROPEL, PROTO_DEVO, PROTO_RLINK, PROTO_OMP, PROTO_WFLY2
+ {//PROTO_HUBSAN, PROTO_AFHDS2A, PROTO_BAYANG, PROTO_NCC1701, PROTO_CABELL, PROTO_HITEC, PROTO_BUGS, PROTO_BUGSMINI, PROTO_FRSKYX, PROTO_FRSKYX2, PROTO_PROPEL, PROTO_DEVO, PROTO_RLINK, PROTO_OMP, PROTO_WFLY2, PROTO_LOLI
frame[1] = v_lipo1;
frame[2] = v_lipo2;
frame[3] = RX_RSSI;
diff --git a/Multiprotocol/Validate.h b/Multiprotocol/Validate.h
index 831f9f0..e44babf 100644
--- a/Multiprotocol/Validate.h
+++ b/Multiprotocol/Validate.h
@@ -292,6 +292,7 @@
#undef JJRC345_NRF24L01_INO
#undef KF606_NRF24L01_INO
#undef KN_NRF24L01_INO
+ #undef LOLI_NRF24L01_INO
#undef MJXQ_NRF24L01_INO
#undef MT99XX_NRF24L01_INO
#undef NCC1701_NRF24L01_INO
@@ -360,6 +361,7 @@
#undef DSM_RX_CYRF6936_INO
#undef DSM_FWD_PGM
#undef WFLY2_HUB_TELEMETRY
+ #undef LOLI_HUB_TELEMETRY
#else
#if defined(MULTI_TELEMETRY) && defined(MULTI_STATUS)
#error You should choose either MULTI_TELEMETRY or MULTI_STATUS but not both.
@@ -434,7 +436,10 @@
#if not defined(WFLY2_A7105_INO)
#undef WFLY2_HUB_TELEMETRY
#endif
- #if not defined(HOTT_FW_TELEMETRY) && not defined(DSM_TELEMETRY) && not defined(SPORT_TELEMETRY) && not defined(HUB_TELEMETRY) && not defined(HUBSAN_HUB_TELEMETRY) && not defined(BUGS_HUB_TELEMETRY) && not defined(NCC1701_HUB_TELEMETRY) && not defined(BAYANG_HUB_TELEMETRY) && not defined(CABELL_HUB_TELEMETRY) && not defined(RLINK_HUB_TELEMETRY) && not defined(AFHDS2A_HUB_TELEMETRY) && not defined(AFHDS2A_FW_TELEMETRY) && not defined(MULTI_TELEMETRY) && not defined(MULTI_STATUS) && not defined(HITEC_HUB_TELEMETRY) && not defined(HITEC_FW_TELEMETRY) && not defined(SCANNER_TELEMETRY) && not defined(FRSKY_RX_TELEMETRY) && not defined(AFHDS2A_RX_TELEMETRY) && not defined(BAYANG_RX_TELEMETRY) && not defined(DEVO_HUB_TELEMETRY) && not defined(PROPEL_HUB_TELEMETRY) && not defined(OMP_HUB_TELEMETRY) && not defined(WFLY2_HUB_TELEMETRY)
+ #if not defined(LOLI_NRF24L01_INO)
+ #undef LOLI_HUB_TELEMETRY
+ #endif
+ #if not defined(HOTT_FW_TELEMETRY) && not defined(DSM_TELEMETRY) && not defined(SPORT_TELEMETRY) && not defined(HUB_TELEMETRY) && not defined(HUBSAN_HUB_TELEMETRY) && not defined(BUGS_HUB_TELEMETRY) && not defined(NCC1701_HUB_TELEMETRY) && not defined(BAYANG_HUB_TELEMETRY) && not defined(CABELL_HUB_TELEMETRY) && not defined(RLINK_HUB_TELEMETRY) && not defined(AFHDS2A_HUB_TELEMETRY) && not defined(AFHDS2A_FW_TELEMETRY) && not defined(MULTI_TELEMETRY) && not defined(MULTI_STATUS) && not defined(HITEC_HUB_TELEMETRY) && not defined(HITEC_FW_TELEMETRY) && not defined(SCANNER_TELEMETRY) && not defined(FRSKY_RX_TELEMETRY) && not defined(AFHDS2A_RX_TELEMETRY) && not defined(BAYANG_RX_TELEMETRY) && not defined(DEVO_HUB_TELEMETRY) && not defined(PROPEL_HUB_TELEMETRY) && not defined(OMP_HUB_TELEMETRY) && not defined(WFLY2_HUB_TELEMETRY) && not defined(LOLI_HUB_TELEMETRY)
#undef TELEMETRY
#undef INVERT_TELEMETRY
#undef MULTI_TELEMETRY
diff --git a/Multiprotocol/XK_nrf24l01.ino b/Multiprotocol/XK_nrf24l01.ino
index 5b21608..af98d7e 100644
--- a/Multiprotocol/XK_nrf24l01.ino
+++ b/Multiprotocol/XK_nrf24l01.ino
@@ -37,7 +37,7 @@ static uint16_t __attribute__((unused)) XK_convert_channel(uint8_t num)
//debugln(",%d",val);
}
else
- val=convert_channel_10b(num);
+ val=convert_channel_10b(num, false);
// 1FF..01=left, 00=center, 200..3FF=right
if(val==0x200)
@@ -65,7 +65,7 @@ static void __attribute__((unused)) XK_send_packet()
packet[14] = 0xC0;
else
{
- uint16_t val=convert_channel_10b(THROTTLE);
+ uint16_t val=convert_channel_10b(THROTTLE, false);
packet[0] = val>>2; // 0..255
packet[12] |= val & 2;
val=XK_convert_channel(RUDDER);
diff --git a/Multiprotocol/_Config.h b/Multiprotocol/_Config.h
index c373d91..d1d8ef7 100644
--- a/Multiprotocol/_Config.h
+++ b/Multiprotocol/_Config.h
@@ -229,6 +229,7 @@
#define JJRC345_NRF24L01_INO
#define KF606_NRF24L01_INO
#define KN_NRF24L01_INO
+#define LOLI_NRF24L01_INO
#define MJXQ_NRF24L01_INO
#define MT99XX_NRF24L01_INO
#define NCC1701_NRF24L01_INO
@@ -327,6 +328,7 @@
#define CABELL_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
#define RLINK_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
#define WFLY2_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
+#define LOLI_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
#define HITEC_HUB_TELEMETRY // Use FrSkyD Hub format to send basic telemetry to the radios which can decode it like er9x, erskyTX and OpenTX
#define HITEC_FW_TELEMETRY // Forward received telemetry packets to be decoded by erskyTX and OpenTX
#define SCANNER_TELEMETRY // Forward spectrum scanner data to TX
@@ -683,6 +685,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
PROTO_KYOSHO
KYOSHO_FHSS
KYOSHO_HYPE
+ PROTO_LOLI
+ NONE
PROTO_MJXQ
WLH08
X600
diff --git a/Protocols_Details.md b/Protocols_Details.md
index f550271..f2dc91a 100644
--- a/Protocols_Details.md
+++ b/Protocols_Details.md
@@ -110,6 +110,7 @@ CFlie|38|CFlie||||||||NRF24L01|
[KF606](Protocols_Details.md#KF606---49)|49|KF606*||||||||NRF24L01|XN297
[KN](Protocols_Details.md#KN---9)|9|WLTOYS|FEILUN|||||||NRF24L01|
[Kyosho](Protocols_Details.md#Kyosho---73)|73|FHSS|Hype|||||||A7105|
+[LOLI](Protocols_Details.md#LOLI---82)|82|||||||||NRF24L01|
[MJXq](Protocols_Details.md#MJXQ---18)|18|WLH08|X600|X800|H26D|E010*|H26WH|PHOENIX*||NRF24L01|XN297
[MT99xx](Protocols_Details.md#MT99XX---17)|17|MT|H7|YZ|LS|FY805||||NRF24L01|XN297
[NCC1701](Protocols_Details.md#NCC1701---44)|44|NCC1701||||||||NRF24L01|
@@ -834,7 +835,7 @@ CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12
A|E|T|R|CH5|CH6|CH7|CH8|CH9|CH10|CH11|CH12
## E010R5 - *81*
-Models: E010 R5, JJRC H36
+Models: E010 R5 red boards, JJRC H36
**Only 1 ID available**
@@ -1284,6 +1285,21 @@ CH1|CH2|CH3|CH4|CH5
---|---|---|---|---
A||T||TRIM
+## LOLI - *82*
+LOLI receivers.
+
+Failsafe supported. Once failsafe values for the 8 channels have been configured in Custom mode, wait for the RX to learn them, then set Failsafe to Receiver.
+
+Telemetry supported: RX RSSI, TX LQI (percentage of received packets), A1 and A2.
+
+Extended limits supported.
+
+CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
+---|---|---|---|---|---|---|---
+CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
+
+Assigning functions to outputs is not supported yet.
+
## MJXQ - *18*
Autobind protocol