Pelikan: add sub protocol for Lite version

This commit is contained in:
Pascal Langer 2020-06-02 19:04:05 +02:00
parent 3dcf74c2e4
commit 7e451c13a8
6 changed files with 99 additions and 39 deletions

View File

@ -57,7 +57,7 @@
57,HoTT,Sync,No_Sync 57,HoTT,Sync,No_Sync
58,FX816,P38 58,FX816,P38
59,Bayang_RX 59,Bayang_RX
60,Pelikan 60,Pelikan,Pro,Lite
61,Tiger 61,Tiger
62,XK,X450,X420 62,XK,X450,X420
63,XN_DUMP,250K,1M,2M,AUTO 63,XN_DUMP,250K,1M,2M,AUTO

View File

@ -135,6 +135,7 @@ const char STR_SUBTYPE_FRSKY_RX[] = "\x07""RX\0 ""CloneTX";
const char STR_SUBTYPE_FRSKYL[] = "\x08""LR12\0 ""LR12 6ch"; const char STR_SUBTYPE_FRSKYL[] = "\x08""LR12\0 ""LR12 6ch";
const char STR_SUBTYPE_WFLY[] = "\x06""WFR0xS"; const char STR_SUBTYPE_WFLY[] = "\x06""WFR0xS";
const char STR_SUBTYPE_HOTT[] = "\x07""Sync\0 ""No_Sync"; const char STR_SUBTYPE_HOTT[] = "\x07""Sync\0 ""No_Sync";
const char STR_SUBTYPE_PELIKAN[] = "\x04""Pro\0""Lite";
enum enum
{ {
@ -295,7 +296,7 @@ const mm_protocol_definition multi_protocols[] = {
{PROTO_NCC1701, STR_NCC1701, 0, NO_SUBTYPE, OPTION_NONE }, {PROTO_NCC1701, STR_NCC1701, 0, NO_SUBTYPE, OPTION_NONE },
#endif #endif
#if defined(PELIKAN_A7105_INO) #if defined(PELIKAN_A7105_INO)
{PROTO_PELIKAN, STR_PELIKAN , 0, NO_SUBTYPE, OPTION_NONE }, {PROTO_PELIKAN, STR_PELIKAN , 2, STR_SUBTYPE_PELIKAN, OPTION_NONE },
#endif #endif
#if defined(POTENSIC_NRF24L01_INO) #if defined(POTENSIC_NRF24L01_INO)
{PROTO_POTENSIC, STR_POTENSIC, 1, STR_SUBTYPE_POTENSIC, OPTION_NONE }, {PROTO_POTENSIC, STR_POTENSIC, 1, STR_SUBTYPE_POTENSIC, OPTION_NONE },

View File

@ -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 7 #define VERSION_PATCH_LEVEL 8
//****************** //******************
// Protocols // Protocols
@ -365,6 +365,12 @@ enum HOTT
HOTT_NO_SYNC= 1, HOTT_NO_SYNC= 1,
}; };
enum PELIKAN
{
PELIKAN_PRO = 0,
PELIKAN_LITE= 1,
};
#define NONE 0 #define NONE 0
#define P_HIGH 1 #define P_HIGH 1
#define P_LOW 0 #define P_LOW 0
@ -953,6 +959,9 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
sub_protocol==HOTT sub_protocol==HOTT
HOTT_SYNC 0 HOTT_SYNC 0
HOTT_NO_SYNC 1 HOTT_NO_SYNC 1
sub_protocol==PELIKAN
PELIKAN_PRO 0
PELIKAN_LITE 1
Power value => 0x80 0=High/1=Low Power value => 0x80 0=High/1=Low
Stream[3] = option_protocol; Stream[3] = option_protocol;

View File

@ -19,11 +19,13 @@
#include "iface_a7105.h" #include "iface_a7105.h"
//#define PELIKAN_FORCE_ID //#define PELIKAN_FORCE_ID
#define PELIKAN_LITE_FORCE_ID
#define PELIKAN_BIND_COUNT 400 #define PELIKAN_BIND_COUNT 400
#define PELIKAN_BIND_RF 0x3C #define PELIKAN_BIND_RF 0x3C
#define PELIKAN_NUM_RF_CHAN 0x1D #define PELIKAN_NUM_RF_CHAN 0x1D
#define PELIKAN_PAQUET_PERIOD 7980 #define PELIKAN_PACKET_PERIOD 7980
#define PELIKAN_LITE_PACKET_PERIOD 18000
static void __attribute__((unused)) pelikan_build_packet() static void __attribute__((unused)) pelikan_build_packet()
{ {
@ -36,7 +38,10 @@ static void __attribute__((unused)) pelikan_build_packet()
packet[3] = rx_tx_addr[1]; packet[3] = rx_tx_addr[1];
packet[4] = rx_tx_addr[2]; packet[4] = rx_tx_addr[2];
packet[5] = rx_tx_addr[3]; packet[5] = rx_tx_addr[3];
packet[6] = 0x05; //?? if(sub_protocol==PELIKAN_PRO)
packet[6] = 0x05; //sub version??
else //PELIKAN_LITE
packet[6] = 0x03; //sub version??
packet[7] = 0x00; //?? packet[7] = 0x00; //??
packet[8] = 0x55; //?? packet[8] = 0x55; //??
packet_length = 10; packet_length = 10;
@ -72,7 +77,7 @@ static void __attribute__((unused)) pelikan_build_packet()
packet[9]=upper?0xAA:0x00; packet[9]=upper?0xAA:0x00;
upper=!upper; upper=!upper;
//Hopping counters //Hopping counters
if(++packet_count>4) if(sub_protocol==PELIKAN_LITE || ++packet_count>4)
{ {
packet_count=0; packet_count=0;
if(++hopping_frequency_no>=PELIKAN_NUM_RF_CHAN) if(++hopping_frequency_no>=PELIKAN_NUM_RF_CHAN)
@ -106,24 +111,41 @@ static void __attribute__((unused)) pelikan_build_packet()
uint16_t ReadPelikan() uint16_t ReadPelikan()
{ {
#ifndef FORCE_PELIKAN_TUNING if(phase==0)
A7105_AdjustLOBaseFreq(1);
#endif
if(IS_BIND_IN_PROGRESS)
{ {
bind_counter--; #ifndef FORCE_PELIKAN_TUNING
if (bind_counter==0) A7105_AdjustLOBaseFreq(1);
#endif
if(IS_BIND_IN_PROGRESS)
{ {
BIND_DONE; bind_counter--;
A7105_Strobe(A7105_STANDBY); if (bind_counter==0)
A7105_WriteReg(A7105_03_FIFOI,0x28); {
BIND_DONE;
A7105_Strobe(A7105_STANDBY);
if(sub_protocol==PELIKAN_PRO)
A7105_WriteReg(A7105_03_FIFOI,0x28);
else//PELIKAN_LITE
A7105_WriteID((rx_tx_addr[0]<<24)|(rx_tx_addr[1]<<16)|(rx_tx_addr[2]<<8)|(rx_tx_addr[3]));
}
} }
#ifdef MULTI_SYNC
telemetry_set_input_sync(sub_protocol==PELIKAN_PRO?PELIKAN_PACKET_PERIOD:PELIKAN_LITE_PACKET_PERIOD);
#endif
pelikan_build_packet();
if(sub_protocol==PELIKAN_PRO || IS_BIND_IN_PROGRESS)
return PELIKAN_PACKET_PERIOD;
//PELIKAN_LITE
phase++;
return 942;
} }
#ifdef MULTI_SYNC //PELIKAN_LITE
telemetry_set_input_sync(PELIKAN_PAQUET_PERIOD); A7105_Strobe(A7105_TX);
#endif phase++;
pelikan_build_packet(); if(phase==1)
return PELIKAN_PAQUET_PERIOD; return 942;
phase=0;
return PELIKAN_LITE_PACKET_PERIOD-942-942;
} }
static uint8_t pelikan_firstCh(uint8_t u, uint8_t l) static uint8_t pelikan_firstCh(uint8_t u, uint8_t l)
@ -213,27 +235,50 @@ const uint8_t PROGMEM pelikan_hopp[][PELIKAN_NUM_RF_CHAN] = {
}; };
#endif #endif
#ifdef PELIKAN_LITE_FORCE_ID
const uint8_t PROGMEM pelikan_lite_hopp[][PELIKAN_NUM_RF_CHAN] = {
{ 0x5A,0x46,0x32,0x6E,0x6C,0x58,0x44,0x42,0x40,0x6A,0x56,0x54,0x52,0x3E,0x68,0x66,0x64,0x50,0x3C,0x3A,0x38,0x62,0x4E,0x4C,0x5E,0x4A,0x36,0x5C,0x34 }
};
#endif
uint16_t initPelikan() uint16_t initPelikan()
{ {
A7105_Init(); A7105_Init();
if(IS_BIND_IN_PROGRESS) if(IS_BIND_IN_PROGRESS || sub_protocol==PELIKAN_LITE)
A7105_WriteReg(A7105_03_FIFOI,0x10); A7105_WriteReg(A7105_03_FIFOI,0x10);
//ID from dump //ID from dump
#ifdef PELIKAN_FORCE_ID #if defined(PELIKAN_FORCE_ID)
rx_tx_addr[0]=0x0D; // hopping freq if(sub_protocol==PELIKAN_PRO)
rx_tx_addr[1]=0xF4; // hopping freq {
rx_tx_addr[2]=0x50; // ID rx_tx_addr[0]=0x0D; // hopping freq
rx_tx_addr[3]=0x18; // ID rx_tx_addr[1]=0xF4; // hopping freq
// Fill frequency table rx_tx_addr[2]=0x50; // ID
for(uint8_t i=0;i<PELIKAN_NUM_RF_CHAN;i++) rx_tx_addr[3]=0x18; // ID
hopping_frequency[i]=pgm_read_byte_near(&pelikan_hopp[0][i]); // Fill frequency table
for(uint8_t i=0;i<PELIKAN_NUM_RF_CHAN;i++)
hopping_frequency[i]=pgm_read_byte_near(&pelikan_hopp[0][i]);
}
#elif defined(PELIKAN_LITE_FORCE_ID)
if(sub_protocol==PELIKAN_LITE)
{
rx_tx_addr[0]=0x04; // hopping freq
rx_tx_addr[1]=0x63; // hopping freq
rx_tx_addr[2]=0x60; // ID
rx_tx_addr[3]=0x18; // ID
// Fill frequency table
for(uint8_t i=0;i<PELIKAN_NUM_RF_CHAN;i++)
hopping_frequency[i]=pgm_read_byte_near(&pelikan_lite_hopp[0][i]);
}
#else #else
pelikan_init_hop(); pelikan_init_hop();
#endif #endif
if(sub_protocol==PELIKAN_LITE && IS_BIND_DONE)
A7105_WriteID((rx_tx_addr[0]<<24)|(rx_tx_addr[1]<<16)|(rx_tx_addr[2]<<8)|(rx_tx_addr[3]));
hopping_frequency_no=PELIKAN_NUM_RF_CHAN; hopping_frequency_no=PELIKAN_NUM_RF_CHAN;
packet_count=5; packet_count=5;
phase=0;
return 2400; return 2400;
} }
#endif #endif

View File

@ -663,7 +663,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
PROTO_NCC1701 PROTO_NCC1701
NONE NONE
PROTO_PELIKAN PROTO_PELIKAN
NONE PELIKAN_PRO
PELIKAN_LITE
PROTO_POTENSIC PROTO_POTENSIC
NONE NONE
PROTO_PROPEL PROTO_PROPEL

View File

@ -67,7 +67,7 @@ You've upgraded the module but the radio does not display the name of the protoc
Protocol Name|Protocol Number|Sub_Proto 0|Sub_Proto 1|Sub_Proto 2|Sub_Proto 3|Sub_Proto 4|Sub_Proto 5|Sub_Proto 6|Sub_Proto 7|RF Module|Emulation Protocol Name|Protocol Number|Sub_Proto 0|Sub_Proto 1|Sub_Proto 2|Sub_Proto 3|Sub_Proto 4|Sub_Proto 5|Sub_Proto 6|Sub_Proto 7|RF Module|Emulation
---|---|---|---|---|---|---|---|---|---|---|--- ---|---|---|---|---|---|---|---|---|---|---|---
[Assan](Protocols_Details.md#ASSAN---24)|24|ASSAN||||||||NRF24L01| [Assan](Protocols_Details.md#ASSAN---24)|24|ASSAN||||||||NRF24L01|
[Bayang](Protocols_Details.md#BAYANG---14)|14|Bayang|H8S3D|X16_AH|IRDRONE|DHD_D4||||NRF24L01|XN297 [Bayang](Protocols_Details.md#BAYANG---14)|14|Bayang|H8S3D|X16_AH|IRDRONE|DHD_D4|QX100|||NRF24L01|XN297
[Bayang RX](Protocols_Details.md#BAYANG-RX---59)|59|RX||||||||NRF24L01|XN297 [Bayang RX](Protocols_Details.md#BAYANG-RX---59)|59|RX||||||||NRF24L01|XN297
[Bugs](Protocols_Details.md#BUGS---41)|41|BUGS||||||||A7105| [Bugs](Protocols_Details.md#BUGS---41)|41|BUGS||||||||A7105|
[BugsMini](Protocols_Details.md#BUGSMINI---42)|42|BUGSMINI|BUGS3H|||||||NRF24L01|XN297 [BugsMini](Protocols_Details.md#BUGSMINI---42)|42|BUGSMINI|BUGS3H|||||||NRF24L01|XN297
@ -104,7 +104,7 @@ CFlie|38|CFlie||||||||NRF24L01|
[Hisky](Protocols_Details.md#HISKY---4)|4|Hisky|HK310|||||||NRF24L01| [Hisky](Protocols_Details.md#HISKY---4)|4|Hisky|HK310|||||||NRF24L01|
[Hitec](Protocols_Details.md#HITEC---39)|39|OPT_FW|OPT_HUB|MINIMA||||||CC2500| [Hitec](Protocols_Details.md#HITEC---39)|39|OPT_FW|OPT_HUB|MINIMA||||||CC2500|
[Hontai](Protocols_Details.md#HONTAI---26)|26|HONTAI|JJRCX1|X5C1|FQ777_951|||||NRF24L01|XN297 [Hontai](Protocols_Details.md#HONTAI---26)|26|HONTAI|JJRCX1|X5C1|FQ777_951|||||NRF24L01|XN297
[HoTT](Protocols_Details.md#HoTT---57)|57|HoTT||||||||CC2500| [HoTT](Protocols_Details.md#HoTT---57)|57|Sync|No_Sync|||||||CC2500|
[Hubsan](Protocols_Details.md#HUBSAN---2)|2|H107|H301|H501||||||A7105| [Hubsan](Protocols_Details.md#HUBSAN---2)|2|H107|H301|H501||||||A7105|
[J6Pro](Protocols_Details.md#J6Pro---22)|22|J6Pro||||||||CYRF6936| [J6Pro](Protocols_Details.md#J6Pro---22)|22|J6Pro||||||||CYRF6936|
[JJRC345](Protocols_Details.md#JJRC345---71)|71|JJRC345||||||||NRF24L01|XN297 [JJRC345](Protocols_Details.md#JJRC345---71)|71|JJRC345||||||||NRF24L01|XN297
@ -114,7 +114,7 @@ CFlie|38|CFlie||||||||NRF24L01|
[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|
[OpenLRS](Protocols_Details.md#OpenLRS---27)|27|||||||||None| [OpenLRS](Protocols_Details.md#OpenLRS---27)|27|||||||||None|
[Pelikan](Protocols_Details.md#Pelikan---60)|60|Pelikan||||||||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
[PROPEL](Protocols_Details.md#PROPEL---66)|66|74-Z||||||||NRF24L01| [PROPEL](Protocols_Details.md#PROPEL---66)|66|74-Z||||||||NRF24L01|
[Q2X2](Protocols_Details.md#Q2X2---29)|29|Q222|Q242|Q282||||||NRF24L01| [Q2X2](Protocols_Details.md#Q2X2---29)|29|Q222|Q242|Q282||||||NRF24L01|
@ -268,17 +268,21 @@ A|E|T|R|ARM|ANGLE|FLIP|PICTURE|VIDEO|LED
ANGLE: angle is +100%, acro is -100% ANGLE: angle is +100%, acro is -100%
## Pelikan - *60* ## Pelikan - *60*
Models: TX: CADET PRO V4, RX: RX-602 V4
Extended limits supported Extended limits supported
**Only 1 set of frequencies for now**
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8 CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
---|---|---|---|---|---|---|--- ---|---|---|---|---|---|---|---
A|E|T|R|CH5|CH6|CH7|CH8 A|E|T|R|CH5|CH6|CH7|CH8
Note that the RX ouput will be AETR. RX output will match the Pelikan 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 Pro - *0*
Models: TX: CADET PRO V4, RX: RX-602 V4
### Sub_protocol Lite - *1*
Models: TX: CADET 4 LITE
**Only 1 ID for now**
*** ***
# CC2500 RF Module # CC2500 RF Module