mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-07-01 10:17:53 +00:00
New Pelikan protocol
Protocol number: 60 No sub proto 8 channels AETR... Extended limit supported !!Only 1 ID for now!!
This commit is contained in:
parent
a23d50bf0d
commit
afd2be6c59
@ -293,6 +293,14 @@ const uint8_t PROGMEM HUBSAN_A7105_regs[] = {
|
|||||||
0xFF, 0xFF // 30 - 31
|
0xFF, 0xFF // 30 - 31
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef PELIKAN_A7105_INO
|
||||||
|
const uint8_t PROGMEM PELIKAN_A7105_regs[] = {
|
||||||
|
0xff, 0x42, 0x00, 0x0F, 0x00, 0xff, 0xff ,0x00, 0x00, 0x00, 0x00, 0x01, 0x21, 0xb7, 0x01, 0x50, // 00 - 0f
|
||||||
|
0x96, 0x64, 0x00, 0x02, 0x16, 0x2f, 0x12, 0x00, 0x62, 0x80, 0x80, 0x00, 0x0a, 0x32, 0xc3, 0x07, // 10 - 1f
|
||||||
|
0x16, 0x00, 0x00, 0xff, 0x00, 0x00, 0x3b, 0x00, 0x1b, 0x47, 0x80, 0x03, 0x01, 0x45, 0x18, 0x00, // 20 - 2f
|
||||||
|
0x01, 0x0f // 30 - 31
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#define ID_NORMAL 0x55201041
|
#define ID_NORMAL 0x55201041
|
||||||
#define ID_PLUS 0xAA201041
|
#define ID_PLUS 0xAA201041
|
||||||
@ -309,6 +317,14 @@ void A7105_Init(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef PELIKAN_A7105_INO
|
||||||
|
if(protocol==PROTO_PELIKAN)
|
||||||
|
{
|
||||||
|
A7105_Regs=(uint8_t*)PELIKAN_A7105_regs;
|
||||||
|
A7105_WriteID(0x06230623);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
#ifdef BUGS_A7105_INO
|
#ifdef BUGS_A7105_INO
|
||||||
if(protocol==PROTO_BUGS)
|
if(protocol==PROTO_BUGS)
|
||||||
A7105_Regs=(uint8_t*)BUGS_A7105_regs;
|
A7105_Regs=(uint8_t*)BUGS_A7105_regs;
|
||||||
@ -391,6 +407,9 @@ void A7105_Init(void)
|
|||||||
case PROTO_FLYZONE:
|
case PROTO_FLYZONE:
|
||||||
vco_calibration1=0x02;
|
vco_calibration1=0x02;
|
||||||
break;
|
break;
|
||||||
|
case PROTO_PELIKAN:
|
||||||
|
vco_calibration1=0x0C;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
vco_calibration1=0x0A;
|
vco_calibration1=0x0A;
|
||||||
break;
|
break;
|
||||||
|
@ -56,4 +56,6 @@
|
|||||||
56,AFHDS2A_RX
|
56,AFHDS2A_RX
|
||||||
57,HoTT
|
57,HoTT
|
||||||
58,FX816,P38
|
58,FX816,P38
|
||||||
63,XN_DUMP,250K,1M,2M
|
59,Bayang_RX
|
||||||
|
60,Pelikan
|
||||||
|
63,XN_DUMP,250K,1M,2M,AUTO
|
||||||
|
@ -73,6 +73,7 @@ const char STR_AFHDS2A_RX[] ="FS2A_RX";
|
|||||||
const char STR_HOTT[] ="HoTT";
|
const char STR_HOTT[] ="HoTT";
|
||||||
const char STR_FX816[] ="FX816";
|
const char STR_FX816[] ="FX816";
|
||||||
const char STR_BAYANG_RX[] ="BayanRX";
|
const char STR_BAYANG_RX[] ="BayanRX";
|
||||||
|
const char STR_PELIKAN[] ="Pelikan";
|
||||||
const char STR_XN297DUMP[] ="XN297DP";
|
const char STR_XN297DUMP[] ="XN297DP";
|
||||||
|
|
||||||
const char STR_SUBTYPE_FLYSKY[] = "\x04""Std\0""V9x9""V6x6""V912""CX20";
|
const char STR_SUBTYPE_FLYSKY[] = "\x04""Std\0""V9x9""V6x6""V912""CX20";
|
||||||
@ -110,7 +111,7 @@ const char STR_SUBTYPE_POTENSIC[] = "\x03""A20";
|
|||||||
const char STR_SUBTYPE_ZSX[] = "\x07""280JJRC";
|
const char STR_SUBTYPE_ZSX[] = "\x07""280JJRC";
|
||||||
const char STR_SUBTYPE_FLYZONE[] = "\x05""FZ410";
|
const char STR_SUBTYPE_FLYZONE[] = "\x05""FZ410";
|
||||||
const char STR_SUBTYPE_FX816[] = "\x03""P38";
|
const char STR_SUBTYPE_FX816[] = "\x03""P38";
|
||||||
const char STR_SUBTYPE_XN297DUMP[] = "\x07""250Kbps""1Mbps\0 ""2Mbps\0 ";
|
const char STR_SUBTYPE_XN297DUMP[] = "\x07""250Kbps""1Mbps\0 ""2Mbps\0 ""Auto\0 ";
|
||||||
const char STR_SUBTYPE_ESKY150[] = "\x03""4CH""7CH";
|
const char STR_SUBTYPE_ESKY150[] = "\x03""4CH""7CH";
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@ -304,6 +305,9 @@ const mm_protocol_definition multi_protocols[] = {
|
|||||||
#if defined(BAYANG_RX_NRF24L01_INO)
|
#if defined(BAYANG_RX_NRF24L01_INO)
|
||||||
{PROTO_BAYANG_RX, STR_BAYANG_RX, 0, NO_SUBTYPE, OPTION_NONE },
|
{PROTO_BAYANG_RX, STR_BAYANG_RX, 0, NO_SUBTYPE, OPTION_NONE },
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(BAYANG_RX_NRF24L01_INO)
|
||||||
|
{PROTO_PELIKAN, STR_PELIKAN , 0, NO_SUBTYPE, OPTION_NONE },
|
||||||
|
#endif
|
||||||
#if defined(XN297DUMP_NRF24L01_INO)
|
#if defined(XN297DUMP_NRF24L01_INO)
|
||||||
{PROTO_XN297DUMP, STR_XN297DUMP, 3, STR_SUBTYPE_XN297DUMP, OPTION_RFCHAN },
|
{PROTO_XN297DUMP, STR_XN297DUMP, 3, STR_SUBTYPE_XN297DUMP, OPTION_RFCHAN },
|
||||||
#endif
|
#endif
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#define VERSION_MAJOR 1
|
#define VERSION_MAJOR 1
|
||||||
#define VERSION_MINOR 3
|
#define VERSION_MINOR 3
|
||||||
#define VERSION_REVISION 0
|
#define VERSION_REVISION 0
|
||||||
#define VERSION_PATCH_LEVEL 48
|
#define VERSION_PATCH_LEVEL 49
|
||||||
|
|
||||||
//******************
|
//******************
|
||||||
// Protocols
|
// Protocols
|
||||||
@ -86,6 +86,7 @@ enum PROTOCOLS
|
|||||||
PROTO_HOTT = 57, // =>CC2500
|
PROTO_HOTT = 57, // =>CC2500
|
||||||
PROTO_FX816 = 58, // =>NRF24L01
|
PROTO_FX816 = 58, // =>NRF24L01
|
||||||
PROTO_BAYANG_RX = 59, // =>NRF24L01
|
PROTO_BAYANG_RX = 59, // =>NRF24L01
|
||||||
|
PROTO_PELIKAN = 60, // =>A7105
|
||||||
PROTO_XN297DUMP = 63, // =>NRF24L01
|
PROTO_XN297DUMP = 63, // =>NRF24L01
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -694,6 +695,7 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
|
|||||||
HOTT 57
|
HOTT 57
|
||||||
FX816 58
|
FX816 58
|
||||||
BAYANG_RX 59
|
BAYANG_RX 59
|
||||||
|
PELIKAN 60
|
||||||
BindBit=> 0x80 1=Bind/0=No
|
BindBit=> 0x80 1=Bind/0=No
|
||||||
AutoBindBit=> 0x40 1=Yes /0=No
|
AutoBindBit=> 0x40 1=Yes /0=No
|
||||||
RangeCheck=> 0x20 1=Yes /0=No
|
RangeCheck=> 0x20 1=Yes /0=No
|
||||||
|
@ -1058,6 +1058,13 @@ static void protocol_init()
|
|||||||
remote_callback = AFHDS2A_Rx_callback;
|
remote_callback = AFHDS2A_Rx_callback;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(PELIKAN_A7105_INO)
|
||||||
|
case PROTO_PELIKAN:
|
||||||
|
PE1_off; //antenna RF1
|
||||||
|
next_callback = initPelikan();
|
||||||
|
remote_callback = ReadPelikan;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef CC2500_INSTALLED
|
#ifdef CC2500_INSTALLED
|
||||||
#if defined(FRSKYD_CC2500_INO)
|
#if defined(FRSKYD_CC2500_INO)
|
||||||
|
146
Multiprotocol/Pelikan_a7105.ino
Normal file
146
Multiprotocol/Pelikan_a7105.ino
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
/*
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
// Compatible with CADET PRO V4 TX
|
||||||
|
|
||||||
|
#if defined(PELIKAN_A7105_INO)
|
||||||
|
|
||||||
|
#include "iface_a7105.h"
|
||||||
|
|
||||||
|
#define PELIKAN_FORCE_ID
|
||||||
|
|
||||||
|
#define PELIKAN_BIND_COUNT 400
|
||||||
|
#define PELIKAN_BIND_RF 0x3C
|
||||||
|
#define PELIKAN_NUM_RF_CHAN 0x1D
|
||||||
|
#define PELIKAN_PAQUET_PERIOD 7980
|
||||||
|
|
||||||
|
static void __attribute__((unused)) pelikan_build_packet()
|
||||||
|
{
|
||||||
|
static boolean upper=false;
|
||||||
|
packet[0] = 0x15;
|
||||||
|
if(IS_BIND_IN_PROGRESS)
|
||||||
|
{
|
||||||
|
packet[1] = 0x04; //version??
|
||||||
|
packet[2] = rx_tx_addr[0];
|
||||||
|
packet[3] = rx_tx_addr[1];
|
||||||
|
packet[4] = rx_tx_addr[2];
|
||||||
|
packet[5] = rx_tx_addr[3];
|
||||||
|
packet[6] = 0x05; //??
|
||||||
|
packet[7] = 0x00; //??
|
||||||
|
packet[8] = 0x55; //??
|
||||||
|
packet_length = 10;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//ID
|
||||||
|
packet[1] = rx_tx_addr[0];
|
||||||
|
packet[7] = rx_tx_addr[1];
|
||||||
|
packet[12] = rx_tx_addr[2];
|
||||||
|
packet[13] = rx_tx_addr[3];
|
||||||
|
//Channels
|
||||||
|
uint8_t offset=upper?4:0;
|
||||||
|
uint16_t channel=convert_channel_16b_nolimit(CH_AETR[offset++], 153, 871);
|
||||||
|
uint8_t top=(channel>>2) & 0xC0;
|
||||||
|
packet[2] = channel;
|
||||||
|
channel=convert_channel_16b_nolimit(CH_AETR[offset++], 153, 871);
|
||||||
|
top|=(channel>>4) & 0x30;
|
||||||
|
packet[3] = channel;
|
||||||
|
channel=convert_channel_16b_nolimit(CH_AETR[offset++], 153, 871);
|
||||||
|
top|=(channel>>6) & 0x0C;
|
||||||
|
packet[4] = channel;
|
||||||
|
channel=convert_channel_16b_nolimit(CH_AETR[offset], 153, 871);
|
||||||
|
top|=(channel>>8) & 0x03;
|
||||||
|
packet[5] = channel;
|
||||||
|
packet[6] = top;
|
||||||
|
//Check
|
||||||
|
crc8=0x15;
|
||||||
|
for(uint8_t i=1;i<8;i++)
|
||||||
|
crc8+=packet[i];
|
||||||
|
packet[8]=crc8;
|
||||||
|
//Low/Up channel flag
|
||||||
|
packet[9]=upper?0xAA:0x00;
|
||||||
|
upper=!upper;
|
||||||
|
//Hopping counters
|
||||||
|
packet[11]=packet_count;
|
||||||
|
if(++packet_count>4)
|
||||||
|
{
|
||||||
|
packet_count=0;
|
||||||
|
if(++hopping_frequency_no>=PELIKAN_NUM_RF_CHAN)
|
||||||
|
hopping_frequency_no=0;
|
||||||
|
}
|
||||||
|
packet[10]=hopping_frequency_no;
|
||||||
|
|
||||||
|
packet_length = 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check
|
||||||
|
crc8=0x15;
|
||||||
|
for(uint8_t i=1; i<packet_length-1 ;i++)
|
||||||
|
crc8+=packet[i];
|
||||||
|
packet[packet_length-1]=crc8;
|
||||||
|
|
||||||
|
//Send
|
||||||
|
A7105_WriteData(packet_length, IS_BIND_IN_PROGRESS?PELIKAN_BIND_RF:hopping_frequency[hopping_frequency_no]);
|
||||||
|
A7105_SetPower();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t ReadPelikan()
|
||||||
|
{
|
||||||
|
#ifndef FORCE_PELIKAN_TUNING
|
||||||
|
A7105_AdjustLOBaseFreq(1);
|
||||||
|
#endif
|
||||||
|
if(IS_BIND_IN_PROGRESS)
|
||||||
|
{
|
||||||
|
bind_counter--;
|
||||||
|
if (bind_counter==0)
|
||||||
|
{
|
||||||
|
BIND_DONE;
|
||||||
|
A7105_Strobe(A7105_STANDBY);
|
||||||
|
A7105_WriteReg(A7105_03_FIFOI,0x28);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef MULTI_SYNC
|
||||||
|
telemetry_set_input_sync(PELIKAN_PAQUET_PERIOD);
|
||||||
|
#endif
|
||||||
|
pelikan_build_packet();
|
||||||
|
return PELIKAN_PAQUET_PERIOD;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint8_t PROGMEM pelikan_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 }
|
||||||
|
};
|
||||||
|
|
||||||
|
uint16_t initPelikan()
|
||||||
|
{
|
||||||
|
A7105_Init();
|
||||||
|
if(IS_BIND_IN_PROGRESS)
|
||||||
|
A7105_WriteReg(A7105_03_FIFOI,0x10);
|
||||||
|
|
||||||
|
//ID
|
||||||
|
#ifdef PELIKAN_FORCE_ID
|
||||||
|
rx_tx_addr[0]=0x0D;
|
||||||
|
rx_tx_addr[1]=0xF4;
|
||||||
|
rx_tx_addr[2]=0x50;
|
||||||
|
rx_tx_addr[3]=0x18;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// 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]);
|
||||||
|
|
||||||
|
hopping_frequency_no=0;
|
||||||
|
packet_count=0;
|
||||||
|
return 2400;
|
||||||
|
}
|
||||||
|
#endif
|
@ -180,6 +180,7 @@
|
|||||||
#undef BUGS_A7105_INO
|
#undef BUGS_A7105_INO
|
||||||
#undef FLYZONE_A7105_INO
|
#undef FLYZONE_A7105_INO
|
||||||
#undef AFHDS2A_RX_A7105_INO
|
#undef AFHDS2A_RX_A7105_INO
|
||||||
|
#undef PELIKAN_A7105_INO
|
||||||
#endif
|
#endif
|
||||||
#ifndef CYRF6936_INSTALLED
|
#ifndef CYRF6936_INSTALLED
|
||||||
#undef DEVO_CYRF6936_INO
|
#undef DEVO_CYRF6936_INO
|
||||||
|
@ -163,6 +163,7 @@
|
|||||||
#define FLYSKY_A7105_INO
|
#define FLYSKY_A7105_INO
|
||||||
#define FLYZONE_A7105_INO
|
#define FLYZONE_A7105_INO
|
||||||
#define HUBSAN_A7105_INO
|
#define HUBSAN_A7105_INO
|
||||||
|
#define PELIKAN_A7105_INO
|
||||||
|
|
||||||
//The protocols below need a CYRF6936 to be installed
|
//The protocols below need a CYRF6936 to be installed
|
||||||
#define DEVO_CYRF6936_INO
|
#define DEVO_CYRF6936_INO
|
||||||
@ -624,6 +625,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
|
|||||||
FY805
|
FY805
|
||||||
PROTO_NCC1701
|
PROTO_NCC1701
|
||||||
NONE
|
NONE
|
||||||
|
PROTO_PELIKAN
|
||||||
|
NONE
|
||||||
PROTO_POTENSIC
|
PROTO_POTENSIC
|
||||||
NONE
|
NONE
|
||||||
PROTO_Q2X2
|
PROTO_Q2X2
|
||||||
|
@ -108,6 +108,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|||||||||A7105|
|
||||||
[Potensic](Protocols_Details.md#Potensic---51)|51|A20||||||||NRF24L01|XN297
|
[Potensic](Protocols_Details.md#Potensic---51)|51|A20||||||||NRF24L01|XN297
|
||||||
[Q2X2](Protocols_Details.md#Q2X2---29)|29|Q222|Q242|Q282||||||NRF24L01|
|
[Q2X2](Protocols_Details.md#Q2X2---29)|29|Q222|Q242|Q282||||||NRF24L01|
|
||||||
[Q303](Protocols_Details.md#Q303---31)|31|Q303|CX35|CX10D|CX10WD|||||NRF24L01|XN297
|
[Q303](Protocols_Details.md#Q303---31)|31|Q303|CX35|CX10D|CX10WD|||||NRF24L01|XN297
|
||||||
@ -255,6 +256,19 @@ 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*
|
||||||
|
Models: TX: CADET PRO V4, RX: RX-602 V4
|
||||||
|
|
||||||
|
Extended limits supported
|
||||||
|
|
||||||
|
**Only 1 ID for now**
|
||||||
|
|
||||||
|
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
|
||||||
|
---|---|---|---|---|---|---|---
|
||||||
|
A|E|T|R|CH5|CH6|CH7|CH8
|
||||||
|
|
||||||
|
Note that the RX ouput will be AETR.
|
||||||
|
|
||||||
***
|
***
|
||||||
# CC2500 RF Module
|
# CC2500 RF Module
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user