mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 21:48:12 +00:00
OMP: added telemetry
This commit is contained in:
parent
313b03fb84
commit
5b8a08ab22
@ -71,6 +71,7 @@
|
|||||||
71,JJRC345
|
71,JJRC345
|
||||||
72,Q90C
|
72,Q90C
|
||||||
73,Kyosho
|
73,Kyosho
|
||||||
74,RadioLink,Surface
|
74,RadioLink,Surface,Air
|
||||||
|
75,---
|
||||||
76,Realacc,R11
|
76,Realacc,R11
|
||||||
77,OMP
|
77,OMP
|
@ -308,7 +308,7 @@ const mm_protocol_definition multi_protocols[] = {
|
|||||||
#if defined(NCC1701_NRF24L01_INO)
|
#if defined(NCC1701_NRF24L01_INO)
|
||||||
{PROTO_NCC1701, STR_NCC1701, 0, NO_SUBTYPE, OPTION_NONE },
|
{PROTO_NCC1701, STR_NCC1701, 0, NO_SUBTYPE, OPTION_NONE },
|
||||||
#endif
|
#endif
|
||||||
#if defined(OMP_NRF24L01_INO)
|
#if defined(OMP_CC2500_INO)
|
||||||
{PROTO_OMP, STR_OMP, 0, NO_SUBTYPE, OPTION_RFTUNE },
|
{PROTO_OMP, STR_OMP, 0, NO_SUBTYPE, OPTION_RFTUNE },
|
||||||
#endif
|
#endif
|
||||||
#if defined(PELIKAN_A7105_INO)
|
#if defined(PELIKAN_A7105_INO)
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#define VERSION_MAJOR 1
|
#define VERSION_MAJOR 1
|
||||||
#define VERSION_MINOR 3
|
#define VERSION_MINOR 3
|
||||||
#define VERSION_REVISION 1
|
#define VERSION_REVISION 1
|
||||||
#define VERSION_PATCH_LEVEL 64
|
#define VERSION_PATCH_LEVEL 65
|
||||||
|
|
||||||
//******************
|
//******************
|
||||||
// Protocols
|
// Protocols
|
||||||
@ -102,7 +102,7 @@ enum PROTOCOLS
|
|||||||
PROTO_KYOSHO = 73, // =>A7105
|
PROTO_KYOSHO = 73, // =>A7105
|
||||||
PROTO_RLINK = 74, // =>CC2500
|
PROTO_RLINK = 74, // =>CC2500
|
||||||
PROTO_REALACC = 76, // =>NRF24L01
|
PROTO_REALACC = 76, // =>NRF24L01
|
||||||
PROTO_OMP = 77, // =>NRF24L01
|
PROTO_OMP = 77, // =>CC2500 & NRF24L01
|
||||||
|
|
||||||
PROTO_NANORF = 126, // =>NRF24L01
|
PROTO_NANORF = 126, // =>NRF24L01
|
||||||
PROTO_TEST = 127, // =>CC2500
|
PROTO_TEST = 127, // =>CC2500
|
||||||
|
@ -810,7 +810,7 @@ bool Update_All()
|
|||||||
update_led_status();
|
update_led_status();
|
||||||
#if defined(TELEMETRY)
|
#if defined(TELEMETRY)
|
||||||
#if ( !( defined(MULTI_TELEMETRY) || defined(MULTI_STATUS) ) )
|
#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_DEVO) || (protocol==PROTO_DSM_RX) || (protocol==PROTO_FRSKY_R9) || (protocol==PROTO_RLINK))
|
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))
|
||||||
#endif
|
#endif
|
||||||
if(IS_DISABLE_TELEM_off)
|
if(IS_DISABLE_TELEM_off)
|
||||||
TelemetryUpdate();
|
TelemetryUpdate();
|
||||||
@ -1641,7 +1641,7 @@ static void protocol_init()
|
|||||||
remote_callback = REALACC_callback;
|
remote_callback = REALACC_callback;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if defined(OMP_NRF24L01_INO)
|
#if defined(OMP_CC2500_INO)
|
||||||
case PROTO_OMP:
|
case PROTO_OMP:
|
||||||
next_callback=initOMP();
|
next_callback=initOMP();
|
||||||
remote_callback = OMP_callback;
|
remote_callback = OMP_callback;
|
||||||
@ -2265,7 +2265,7 @@ void pollBoot()
|
|||||||
#if defined(TELEMETRY)
|
#if defined(TELEMETRY)
|
||||||
void PPM_Telemetry_serial_init()
|
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_RLINK)
|
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)
|
||||||
#ifdef TELEMETRY_FRSKYX_TO_FRSKYD
|
#ifdef TELEMETRY_FRSKYX_TO_FRSKYD
|
||||||
|| (protocol==PROTO_FRSKYX) || (protocol==PROTO_FRSKYX2)
|
|| (protocol==PROTO_FRSKYX) || (protocol==PROTO_FRSKYX2)
|
||||||
#endif
|
#endif
|
||||||
|
262
Multiprotocol/OMP_cc2500.ino
Normal file
262
Multiprotocol/OMP_cc2500.ino
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
/*
|
||||||
|
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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(OMP_CC2500_INO)
|
||||||
|
|
||||||
|
#include "iface_nrf250k.h"
|
||||||
|
|
||||||
|
//#define FORCE_OMP_ORIGINAL_ID
|
||||||
|
//#define OMP_TELEM_DEBUG
|
||||||
|
|
||||||
|
#define OMP_INITIAL_WAIT 500
|
||||||
|
#define OMP_PACKET_PERIOD 5000
|
||||||
|
#define OMP_RF_BIND_CHANNEL 35
|
||||||
|
#define OMP_RF_NUM_CHANNELS 8
|
||||||
|
#define OMP_PAYLOAD_SIZE 16
|
||||||
|
#define OMP_BIND_COUNT 600 //3sec
|
||||||
|
|
||||||
|
static void __attribute__((unused)) OMP_send_packet()
|
||||||
|
{
|
||||||
|
#ifdef OMP_HUB_TELEMETRY
|
||||||
|
if(option==0) option=1; // Select the CC2500 by default
|
||||||
|
PE1_off; PE2_on; // CC2500 antenna RF2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(IS_BIND_IN_PROGRESS)
|
||||||
|
{
|
||||||
|
memcpy(packet,"BND",3);
|
||||||
|
memcpy(&packet[3],rx_tx_addr,5);
|
||||||
|
memcpy(&packet[8],hopping_frequency,8);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memset(packet,0x00,OMP_PAYLOAD_SIZE);
|
||||||
|
|
||||||
|
#ifdef OMP_HUB_TELEMETRY
|
||||||
|
//RX telem request every 7*5=35ms
|
||||||
|
packet_sent++;
|
||||||
|
packet_sent %= OMP_RF_NUM_CHANNELS-1; // Change telem RX channels every time
|
||||||
|
if(packet_sent==0)
|
||||||
|
{
|
||||||
|
packet[0] |= 0x40; // |0x40 to request RX telemetry
|
||||||
|
NRF24L01_WriteReg(NRF24L01_05_RF_CH, hopping_frequency[hopping_frequency_no]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//hopping frequency
|
||||||
|
packet[0 ] |= hopping_frequency_no;
|
||||||
|
XN297L_Hopping(hopping_frequency_no);
|
||||||
|
hopping_frequency_no++;
|
||||||
|
hopping_frequency_no &= OMP_RF_NUM_CHANNELS-1; // 8 RF channels
|
||||||
|
|
||||||
|
//flags
|
||||||
|
packet[1 ] = 0x08 //unknown
|
||||||
|
| GET_FLAG(CH5_SW, 0x20); // HOLD
|
||||||
|
|
||||||
|
packet[2 ] = 0x40; //unknown
|
||||||
|
|
||||||
|
if(Channel_data[CH6] > CHANNEL_MAX_COMMAND)
|
||||||
|
packet[2 ] |= 0x20; // IDLE2
|
||||||
|
else if(Channel_data[CH6] > CHANNEL_MIN_COMMAND)
|
||||||
|
packet[1 ] |= 0x40; // IDLE1
|
||||||
|
|
||||||
|
if(Channel_data[CH7] > CHANNEL_MAX_COMMAND)
|
||||||
|
packet[2 ] |= 0x08; // 3D
|
||||||
|
else if(Channel_data[CH7] > CHANNEL_MIN_COMMAND)
|
||||||
|
packet[2 ] |= 0x04; // ATTITUDE
|
||||||
|
|
||||||
|
//trims??
|
||||||
|
//packet[3..6]
|
||||||
|
|
||||||
|
//channels TAER packed 11bits
|
||||||
|
uint16_t channel=convert_channel_16b_limit(THROTTLE,0,2047);
|
||||||
|
packet[7 ] = channel;
|
||||||
|
packet[8 ] = channel>>8;
|
||||||
|
channel=convert_channel_16b_limit(AILERON,2047,0);
|
||||||
|
packet[8 ] |= channel<<3;
|
||||||
|
packet[9 ] = channel>>5;
|
||||||
|
channel=convert_channel_16b_limit(ELEVATOR,0,2047);
|
||||||
|
packet[9] |= channel<<6;
|
||||||
|
packet[10] = channel>>2;
|
||||||
|
packet[11] = channel>>10;
|
||||||
|
channel=convert_channel_16b_limit(RUDDER,2047,0);
|
||||||
|
packet[11] |= channel<<1;
|
||||||
|
packet[12] = channel>>7;
|
||||||
|
|
||||||
|
//unknown
|
||||||
|
//packet[13..15]
|
||||||
|
packet[15] = 0x04;
|
||||||
|
}
|
||||||
|
|
||||||
|
XN297L_SetPower(); // Set tx_power
|
||||||
|
XN297L_SetFreqOffset(); // Set frequency offset
|
||||||
|
XN297L_WriteEnhancedPayload(packet, OMP_PAYLOAD_SIZE, packet_sent!=0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __attribute__((unused)) OMP_init()
|
||||||
|
{
|
||||||
|
//Config CC2500
|
||||||
|
#ifdef OMP_HUB_TELEMETRY
|
||||||
|
if(option==0)
|
||||||
|
option=1; // Select the CC2500
|
||||||
|
#endif
|
||||||
|
XN297L_Init();
|
||||||
|
XN297L_SetTXAddr((uint8_t*)"FLPBD", 5);
|
||||||
|
XN297L_HoppingCalib(OMP_RF_NUM_CHANNELS); // Calibrate all channels
|
||||||
|
XN297L_RFChannel(OMP_RF_BIND_CHANNEL); // Set bind channel
|
||||||
|
|
||||||
|
#ifdef OMP_HUB_TELEMETRY
|
||||||
|
//Config NRF
|
||||||
|
option=0; // Select the NRF
|
||||||
|
XN297L_Init();
|
||||||
|
NRF24L01_SetTxRxMode(TXRX_OFF); // Turn it off for now
|
||||||
|
XN297_SetRXAddr(rx_tx_addr, 5); // Set the RX address
|
||||||
|
NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, OMP_PAYLOAD_SIZE + 2); // packet length +2 bytes of CRC
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __attribute__((unused)) OMP_initialize_txid()
|
||||||
|
{
|
||||||
|
calc_fh_channels(OMP_RF_NUM_CHANNELS);
|
||||||
|
#ifdef FORCE_OMP_ORIGINAL_ID
|
||||||
|
rx_tx_addr[0]=0x4E;
|
||||||
|
rx_tx_addr[1]=0x72;
|
||||||
|
rx_tx_addr[2]=0x8E;
|
||||||
|
rx_tx_addr[3]=0x70;
|
||||||
|
rx_tx_addr[4]=0x62;
|
||||||
|
for(uint8_t i=0; i<OMP_RF_NUM_CHANNELS;i++)
|
||||||
|
hopping_frequency[i]=(i+3)*5;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
enum {
|
||||||
|
OMP_BIND = 0x00,
|
||||||
|
OMP_PREPDATA = 0x01,
|
||||||
|
OMP_DATA = 0x02,
|
||||||
|
OMP_RX = 0x03,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define OMP_WRITE_TIME 850
|
||||||
|
|
||||||
|
uint16_t OMP_callback()
|
||||||
|
{
|
||||||
|
switch(phase)
|
||||||
|
{
|
||||||
|
case OMP_BIND:
|
||||||
|
if(--bind_counter==0)
|
||||||
|
phase++; // OMP_PREPDATA
|
||||||
|
OMP_send_packet();
|
||||||
|
return OMP_PACKET_PERIOD;
|
||||||
|
case OMP_PREPDATA:
|
||||||
|
BIND_DONE;
|
||||||
|
XN297L_SetTXAddr(rx_tx_addr, 5);
|
||||||
|
phase++; // OMP_DATA
|
||||||
|
case OMP_DATA:
|
||||||
|
#ifdef MULTI_SYNC
|
||||||
|
telemetry_set_input_sync(OMP_PACKET_PERIOD);
|
||||||
|
#endif
|
||||||
|
OMP_send_packet();
|
||||||
|
#ifdef OMP_HUB_TELEMETRY
|
||||||
|
if(packet_sent == 0)
|
||||||
|
{
|
||||||
|
phase++; // OMP_RX
|
||||||
|
return OMP_WRITE_TIME;
|
||||||
|
}
|
||||||
|
else if(packet_sent == 1)
|
||||||
|
{
|
||||||
|
if( NRF24L01_ReadReg(NRF24L01_07_STATUS) & _BV(NRF24L01_07_RX_DR))
|
||||||
|
{ // a packet has been received
|
||||||
|
if(XN297_ReadEnhancedPayload(packet_in, 16) == 16)
|
||||||
|
{ // packet with good CRC and length
|
||||||
|
#ifdef OMP_TELEM_DEBUG
|
||||||
|
for(uint8_t i=0;i<16;i++)
|
||||||
|
debug(" %02X",packet_in[i]);
|
||||||
|
#endif
|
||||||
|
// packet_in = 01 00 98 2C 03 19 19 F0 49 02 00 00 00 00 00 00
|
||||||
|
// all bytes are fixed and unknown except 2 and 3 which represent the battery voltage: packet_in[3]*256+packet_in[2]=lipo voltage*100 in V
|
||||||
|
telemetry_counter++; //LQI
|
||||||
|
v_lipo1=((packet_in[3]<<8)+packet_in[2]-400)/50;
|
||||||
|
telemetry_link=1;
|
||||||
|
if(telemetry_lost)
|
||||||
|
{
|
||||||
|
telemetry_lost = 0;
|
||||||
|
packet_count = 100;
|
||||||
|
telemetry_counter = 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef OMP_TELEM_DEBUG
|
||||||
|
else
|
||||||
|
debug("Bad RX");
|
||||||
|
debugln("");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
NRF24L01_SetTxRxMode(TXRX_OFF);
|
||||||
|
packet_count++;
|
||||||
|
if(packet_count>=100)
|
||||||
|
{//LQI calculation
|
||||||
|
packet_count=0;
|
||||||
|
TX_LQI=telemetry_counter;
|
||||||
|
RX_RSSI=telemetry_counter;
|
||||||
|
if(telemetry_counter==0)
|
||||||
|
telemetry_lost = 1;
|
||||||
|
telemetry_counter = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return OMP_PACKET_PERIOD;
|
||||||
|
#ifdef OMP_HUB_TELEMETRY
|
||||||
|
case OMP_RX:
|
||||||
|
NRF24L01_WriteReg(NRF24L01_07_STATUS, (1 << NRF24L01_07_RX_DR) //reset the flag(s)
|
||||||
|
| (1 << NRF24L01_07_TX_DS)
|
||||||
|
| (1 << NRF24L01_07_MAX_RT));
|
||||||
|
NRF24L01_FlushRx();
|
||||||
|
NRF24L01_WriteReg(NRF24L01_00_CONFIG, (1 << NRF24L01_00_PWR_UP) | (1 << NRF24L01_00_PRIM_RX) ); // Start RX
|
||||||
|
{
|
||||||
|
uint16_t start=(uint16_t)micros();
|
||||||
|
while ((uint16_t)((uint16_t)micros()-(uint16_t)start) < 500)
|
||||||
|
{
|
||||||
|
if(CC2500_ReadReg(CC2500_35_MARCSTATE | CC2500_READ_BURST) != 0x13)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PE1_on;PE2_off; // NRF24L01 antenna RF3
|
||||||
|
phase = OMP_DATA;
|
||||||
|
return OMP_PACKET_PERIOD-OMP_WRITE_TIME;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return OMP_PACKET_PERIOD;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t initOMP()
|
||||||
|
{
|
||||||
|
OMP_initialize_txid();
|
||||||
|
OMP_init();
|
||||||
|
hopping_frequency_no = 0;
|
||||||
|
packet_sent = 0;
|
||||||
|
#ifdef OMP_HUB_TELEMETRY
|
||||||
|
packet_count = 0;
|
||||||
|
telemetry_lost = 1;
|
||||||
|
#endif
|
||||||
|
if(IS_BIND_IN_PROGRESS)
|
||||||
|
{
|
||||||
|
bind_counter = OMP_BIND_COUNT;
|
||||||
|
phase = OMP_BIND;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
phase = OMP_PREPDATA;
|
||||||
|
return OMP_INITIAL_WAIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -1,140 +0,0 @@
|
|||||||
/*
|
|
||||||
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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(OMP_NRF24L01_INO)
|
|
||||||
|
|
||||||
#include "iface_nrf250k.h"
|
|
||||||
|
|
||||||
//#define FORCE_OMP_ORIGINAL_ID
|
|
||||||
|
|
||||||
#define OMP_INITIAL_WAIT 500
|
|
||||||
#define OMP_PACKET_PERIOD 5000
|
|
||||||
#define OMP_RF_BIND_CHANNEL 35
|
|
||||||
#define OMP_RF_NUM_CHANNELS 8
|
|
||||||
#define OMP_PAYLOAD_SIZE 16
|
|
||||||
#define OMP_BIND_COUNT 600 //3sec
|
|
||||||
|
|
||||||
static void __attribute__((unused)) OMP_send_packet()
|
|
||||||
{
|
|
||||||
if(IS_BIND_IN_PROGRESS)
|
|
||||||
{
|
|
||||||
memcpy(packet,"BND",3);
|
|
||||||
memcpy(&packet[3],rx_tx_addr,5);
|
|
||||||
memcpy(&packet[8],hopping_frequency,8);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memset(packet,0x00,OMP_PAYLOAD_SIZE);
|
|
||||||
|
|
||||||
//hopping frequency
|
|
||||||
packet[0 ] = hopping_frequency_no; // |0x40 to request RX telemetry
|
|
||||||
XN297L_Hopping(hopping_frequency_no);
|
|
||||||
hopping_frequency_no++;
|
|
||||||
hopping_frequency_no &= OMP_RF_NUM_CHANNELS-1; // 8 RF channels
|
|
||||||
|
|
||||||
//flags
|
|
||||||
packet[1 ] = 0x08 //unknown
|
|
||||||
| GET_FLAG(CH5_SW, 0x20); // HOLD
|
|
||||||
|
|
||||||
packet[2 ] = 0x40; //unknown
|
|
||||||
|
|
||||||
if(Channel_data[CH6] > CHANNEL_MAX_COMMAND)
|
|
||||||
packet[2 ] |= 0x20; // IDLE2
|
|
||||||
else if(Channel_data[CH6] > CHANNEL_MIN_COMMAND)
|
|
||||||
packet[1 ] |= 0x40; // IDLE1
|
|
||||||
|
|
||||||
if(Channel_data[CH7] > CHANNEL_MAX_COMMAND)
|
|
||||||
packet[2 ] |= 0x08; // 3D
|
|
||||||
else if(Channel_data[CH7] > CHANNEL_MIN_COMMAND)
|
|
||||||
packet[2 ] |= 0x04; // ATTITUDE
|
|
||||||
|
|
||||||
//trims??
|
|
||||||
//packet[3..6]
|
|
||||||
|
|
||||||
//channels TAER packed 11bits
|
|
||||||
uint16_t channel=convert_channel_16b_limit(THROTTLE,0,2047);
|
|
||||||
packet[7 ] = channel;
|
|
||||||
packet[8 ] = channel>>8;
|
|
||||||
channel=convert_channel_16b_limit(AILERON,2047,0);
|
|
||||||
packet[8 ] |= channel<<3;
|
|
||||||
packet[9 ] = channel>>5;
|
|
||||||
channel=convert_channel_16b_limit(ELEVATOR,0,2047);
|
|
||||||
packet[9] |= channel<<6;
|
|
||||||
packet[10] = channel>>2;
|
|
||||||
packet[11] = channel>>10;
|
|
||||||
channel=convert_channel_16b_limit(RUDDER,2047,0);
|
|
||||||
packet[11] |= channel<<1;
|
|
||||||
packet[12] = channel>>7;
|
|
||||||
|
|
||||||
//unknown
|
|
||||||
//packet[13..15]
|
|
||||||
packet[15] = 0x04;
|
|
||||||
}
|
|
||||||
|
|
||||||
XN297L_SetPower(); // Set tx_power
|
|
||||||
XN297L_SetFreqOffset(); // Set frequency offset
|
|
||||||
XN297L_WriteEnhancedPayload(packet, OMP_PAYLOAD_SIZE, IS_BIND_IN_PROGRESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __attribute__((unused)) OMP_init()
|
|
||||||
{
|
|
||||||
XN297L_Init();
|
|
||||||
XN297L_SetTXAddr((uint8_t*)"FLPBD", 5);
|
|
||||||
XN297L_HoppingCalib(OMP_RF_NUM_CHANNELS); // Calibrate all channels
|
|
||||||
XN297L_RFChannel(OMP_RF_BIND_CHANNEL); // Set bind channel
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __attribute__((unused)) OMP_initialize_txid()
|
|
||||||
{
|
|
||||||
calc_fh_channels(OMP_RF_NUM_CHANNELS);
|
|
||||||
#ifdef FORCE_OMP_ORIGINAL_ID
|
|
||||||
rx_tx_addr[0]=0x4E;
|
|
||||||
rx_tx_addr[1]=0x72;
|
|
||||||
rx_tx_addr[2]=0x8E;
|
|
||||||
rx_tx_addr[3]=0x70;
|
|
||||||
rx_tx_addr[4]=0x62;
|
|
||||||
for(uint8_t i=0; i<OMP_RF_NUM_CHANNELS;i++)
|
|
||||||
hopping_frequency[i]=(i+3)*5;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t OMP_callback()
|
|
||||||
{
|
|
||||||
if(IS_BIND_IN_PROGRESS)
|
|
||||||
if(--bind_counter==0)
|
|
||||||
{
|
|
||||||
BIND_DONE;
|
|
||||||
XN297L_SetTXAddr(rx_tx_addr, 5);
|
|
||||||
}
|
|
||||||
OMP_send_packet();
|
|
||||||
#ifdef MULTI_SYNC
|
|
||||||
telemetry_set_input_sync(OMP_PACKET_PERIOD);
|
|
||||||
#endif
|
|
||||||
return OMP_PACKET_PERIOD;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t initOMP()
|
|
||||||
{
|
|
||||||
OMP_initialize_txid();
|
|
||||||
OMP_init();
|
|
||||||
hopping_frequency_no = 0;
|
|
||||||
if(IS_BIND_IN_PROGRESS)
|
|
||||||
bind_counter=OMP_BIND_COUNT;
|
|
||||||
else
|
|
||||||
XN297L_SetTXAddr(rx_tx_addr, 5);
|
|
||||||
return OMP_INITIAL_WAIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -531,7 +531,7 @@ void frsky_link_frame()
|
|||||||
telemetry_link |= 2 ; // Send hub if available
|
telemetry_link |= 2 ; // Send hub if available
|
||||||
}
|
}
|
||||||
else
|
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_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
|
||||||
frame[1] = v_lipo1;
|
frame[1] = v_lipo1;
|
||||||
frame[2] = v_lipo2;
|
frame[2] = v_lipo2;
|
||||||
frame[3] = RX_RSSI;
|
frame[3] = RX_RSSI;
|
||||||
@ -952,7 +952,7 @@ void TelemetryUpdate()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if( telemetry_link & 1 )
|
if( telemetry_link & 1 )
|
||||||
{ // FrSkyD + Hubsan + AFHDS2A + Bayang + Cabell + Hitec + Bugs + BugsMini + NCC1701 + PROPEL + RLINK
|
{ // FrSkyD + Hubsan + AFHDS2A + Bayang + Cabell + Hitec + Bugs + BugsMini + NCC1701 + PROPEL + RLINK + OMP
|
||||||
// FrSkyX telemetry if in PPM
|
// FrSkyX telemetry if in PPM
|
||||||
frsky_link_frame();
|
frsky_link_frame();
|
||||||
return;
|
return;
|
||||||
|
@ -247,6 +247,7 @@
|
|||||||
#undef FRSKY_RX_CC2500_INO
|
#undef FRSKY_RX_CC2500_INO
|
||||||
#undef HITEC_CC2500_INO
|
#undef HITEC_CC2500_INO
|
||||||
#undef HOTT_CC2500_INO
|
#undef HOTT_CC2500_INO
|
||||||
|
#undef OMP_CC2500_INO
|
||||||
#undef REDPINE_CC2500_INO
|
#undef REDPINE_CC2500_INO
|
||||||
#undef RLINK_CC2500_INO
|
#undef RLINK_CC2500_INO
|
||||||
#undef SCANNER_CC2500_INO
|
#undef SCANNER_CC2500_INO
|
||||||
@ -281,7 +282,7 @@
|
|||||||
#undef MJXQ_NRF24L01_INO
|
#undef MJXQ_NRF24L01_INO
|
||||||
#undef MT99XX_NRF24L01_INO
|
#undef MT99XX_NRF24L01_INO
|
||||||
#undef NCC1701_NRF24L01_INO
|
#undef NCC1701_NRF24L01_INO
|
||||||
#undef OMP_NRF24L01_INO
|
#undef OMP_CC2500_INO
|
||||||
#undef POTENSIC_NRF24L01_INO
|
#undef POTENSIC_NRF24L01_INO
|
||||||
#undef PROPEL_NRF24L01_INO
|
#undef PROPEL_NRF24L01_INO
|
||||||
#undef Q303_NRF24L01_INO
|
#undef Q303_NRF24L01_INO
|
||||||
@ -340,6 +341,7 @@
|
|||||||
#undef BAYANG_RX_NRF24L01_INO
|
#undef BAYANG_RX_NRF24L01_INO
|
||||||
#undef DEVO_HUB_TELEMETRY
|
#undef DEVO_HUB_TELEMETRY
|
||||||
#undef PROPEL_HUB_TELEMETRY
|
#undef PROPEL_HUB_TELEMETRY
|
||||||
|
#undef OMP_HUB_TELEMETRY
|
||||||
#undef RLINK_HUB_TELEMETRY
|
#undef RLINK_HUB_TELEMETRY
|
||||||
#undef DSM_RX_CYRF6936_INO
|
#undef DSM_RX_CYRF6936_INO
|
||||||
#else
|
#else
|
||||||
@ -368,6 +370,9 @@
|
|||||||
#if not defined(DEVO_CYRF6936_INO)
|
#if not defined(DEVO_CYRF6936_INO)
|
||||||
#undef DEVO_HUB_TELEMETRY
|
#undef DEVO_HUB_TELEMETRY
|
||||||
#endif
|
#endif
|
||||||
|
#if not defined(OMP_CC2500_INO)
|
||||||
|
#undef OMP_HUB_TELEMETRY
|
||||||
|
#endif
|
||||||
#if not defined(PROPEL_NRF24L01_INO)
|
#if not defined(PROPEL_NRF24L01_INO)
|
||||||
#undef PROPEL_HUB_TELEMETRY
|
#undef PROPEL_HUB_TELEMETRY
|
||||||
#endif
|
#endif
|
||||||
@ -410,7 +415,7 @@
|
|||||||
#if not defined(HOTT_CC2500_INO)
|
#if not defined(HOTT_CC2500_INO)
|
||||||
#undef HOTT_FW_TELEMETRY
|
#undef HOTT_FW_TELEMETRY
|
||||||
#endif
|
#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)
|
#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)
|
||||||
#undef TELEMETRY
|
#undef TELEMETRY
|
||||||
#undef INVERT_TELEMETRY
|
#undef INVERT_TELEMETRY
|
||||||
#undef MULTI_TELEMETRY
|
#undef MULTI_TELEMETRY
|
||||||
|
@ -194,6 +194,7 @@
|
|||||||
#define FRSKY_RX_CC2500_INO
|
#define FRSKY_RX_CC2500_INO
|
||||||
#define HITEC_CC2500_INO
|
#define HITEC_CC2500_INO
|
||||||
#define HOTT_CC2500_INO
|
#define HOTT_CC2500_INO
|
||||||
|
#define OMP_CC2500_INO //Need both CC2500 and NRF
|
||||||
#define SCANNER_CC2500_INO
|
#define SCANNER_CC2500_INO
|
||||||
#define SFHSS_CC2500_INO
|
#define SFHSS_CC2500_INO
|
||||||
#define SKYARTEC_CC2500_INO
|
#define SKYARTEC_CC2500_INO
|
||||||
@ -227,7 +228,6 @@
|
|||||||
#define MJXQ_NRF24L01_INO
|
#define MJXQ_NRF24L01_INO
|
||||||
#define MT99XX_NRF24L01_INO
|
#define MT99XX_NRF24L01_INO
|
||||||
#define NCC1701_NRF24L01_INO
|
#define NCC1701_NRF24L01_INO
|
||||||
#define OMP_NRF24L01_INO
|
|
||||||
#define POTENSIC_NRF24L01_INO
|
#define POTENSIC_NRF24L01_INO
|
||||||
#define PROPEL_NRF24L01_INO
|
#define PROPEL_NRF24L01_INO
|
||||||
#define Q303_NRF24L01_INO
|
#define Q303_NRF24L01_INO
|
||||||
@ -318,6 +318,7 @@
|
|||||||
#define DEVO_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
#define DEVO_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||||
#define HUBSAN_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
#define HUBSAN_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||||
#define NCC1701_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
#define NCC1701_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||||
|
#define OMP_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||||
#define PROPEL_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
#define PROPEL_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||||
#define CABELL_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
#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 RLINK_HUB_TELEMETRY // Use FrSkyD Hub format to send telemetry to TX
|
||||||
|
@ -110,7 +110,7 @@ CFlie|38|CFlie||||||||NRF24L01|
|
|||||||
[MJXq](Protocols_Details.md#MJXQ---18)|18|WLH08|X600|X800|H26D|E010*|H26WH|PHOENIX*||NRF24L01|XN297
|
[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
|
[MT99xx](Protocols_Details.md#MT99XX---17)|17|MT|H7|YZ|LS|FY805||||NRF24L01|XN297
|
||||||
[NCC1701](Protocols_Details.md#NCC1701---44)|44|NCC1701||||||||NRF24L01|
|
[NCC1701](Protocols_Details.md#NCC1701---44)|44|NCC1701||||||||NRF24L01|
|
||||||
[OMP](Protocols_Details.md#OMP---77)|77|||||||||NRF24L01|XN297L
|
[OMP](Protocols_Details.md#OMP---77)|77|||||||||CC2500&NRF24L01|XN297L
|
||||||
[OpenLRS](Protocols_Details.md#OpenLRS---27)|27|||||||||None|
|
[OpenLRS](Protocols_Details.md#OpenLRS---27)|27|||||||||None|
|
||||||
[Pelikan](Protocols_Details.md#Pelikan---60)|60|Pro|Lite|||||||A7105|
|
[Pelikan](Protocols_Details.md#Pelikan---60)|60|Pro|Lite|||||||A7105|
|
||||||
[Potensic](Protocols_Details.md#Potensic---51)|51|A20||||||||NRF24L01|XN297
|
[Potensic](Protocols_Details.md#Potensic---51)|51|A20||||||||NRF24L01|XN297
|
||||||
@ -552,6 +552,24 @@ Recommended for best telemetry performance.
|
|||||||
Telemetry compatibility mode when Sync does not work due to an old firmware on the RX.
|
Telemetry compatibility mode when Sync does not work due to an old firmware on the RX.
|
||||||
You should definitively upgrade your receivers/sensors to the latest firmware versions: https://www.rcgroups.com/forums/showpost.php?p=44668015&postcount=18022
|
You should definitively upgrade your receivers/sensors to the latest firmware versions: https://www.rcgroups.com/forums/showpost.php?p=44668015&postcount=18022
|
||||||
|
|
||||||
|
## OMP - *77*
|
||||||
|
Model: OMPHOBBY M2 Heli, T720 RC Glider
|
||||||
|
|
||||||
|
Telemetry supported with A1=battery voltage (you need to adjust the offset with a voltmeter since there are some large differences between the models), RX_RSSI = TQly = percentage of received telemetry packets which has nothing to do with well the RX is receiving the TX but instead how well the TX=multi module is receiving the RX.
|
||||||
|
|
||||||
|
Option for this protocol corresponds to fine frequency tuning. This value is different for each Module and **must** be accurate otherwise the link will not be stable.
|
||||||
|
Check the [Frequency Tuning page](/docs/Frequency_Tuning.md) to determine it.
|
||||||
|
|
||||||
|
This protocol is using both the CC2500 and NRF24L01 to control the model and read the telemetry.
|
||||||
|
|
||||||
|
CH1|CH2|CH3|CH4|CH5|CH6|CH7
|
||||||
|
---|---|---|---|---|---|---
|
||||||
|
A|E|T_PITCH|R|T_HOLD|IDLE|MODE
|
||||||
|
|
||||||
|
IDLE= 3 pos switch: -100% Normal, 0% Idle1, +100% Idle2
|
||||||
|
|
||||||
|
MODE= 3 pos switch -100% Attitude(?), 0% Attitude, +100% 3D
|
||||||
|
|
||||||
## Scanner - *54*
|
## Scanner - *54*
|
||||||
2.4GHz scanner accessible using the OpenTX 2.3 Spectrum Analyser tool.
|
2.4GHz scanner accessible using the OpenTX 2.3 Spectrum Analyser tool.
|
||||||
|
|
||||||
@ -1280,21 +1298,6 @@ CH1|CH2|CH3|CH4|CH5
|
|||||||
---|---|---|---|---
|
---|---|---|---|---
|
||||||
A|E|T|R|Warp
|
A|E|T|R|Warp
|
||||||
|
|
||||||
## OMP - *77*
|
|
||||||
Model: OMPHOBBY M2 Heli, T720 RC Glider
|
|
||||||
|
|
||||||
This protocol is known to be problematic because it's using the xn297L emulation with a transmission speed of 250kbps therefore it doesn't work very well with every modules, this is an hardware issue with the accuracy of the components.
|
|
||||||
|
|
||||||
If the model does not respond well to inputs or hard to bind, you can try to switch the emulation from the default NRF24L01 RF component to the CC2500 by using an option value (freq tuning) different from 0. Option in this case is used for fine frequency tuning like any CC2500 protocols so check the [Frequency Tuning page](/docs/Frequency_Tuning.md).
|
|
||||||
|
|
||||||
CH1|CH2|CH3|CH4|CH5|CH6|CH7
|
|
||||||
---|---|---|---|---|---|---
|
|
||||||
A|E|T_PITCH|R|T_HOLD|IDLE|MODE
|
|
||||||
|
|
||||||
IDLE= 3 pos switch: -100% Normal, 0% Idle1, +100% Idle2
|
|
||||||
|
|
||||||
MODE= 3 pos switch -100% Attitude(?), 0% Attitude, +100% 3D
|
|
||||||
|
|
||||||
## Potensic - *51*
|
## Potensic - *51*
|
||||||
Model: Potensic A20
|
Model: Potensic A20
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user