mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 19:58:13 +00:00
New protocol POTENSIC
Model: A20 Protocol number: 51 Sub protocol: none Channels: - CH5 TAKE_OFF/LANDING: momentary switch -100% -> +100% - CH6 EMERGENCY: Stop +100% - CH7 MODE: MODE: Beginner -100%, Medium 0%, Advanced +100% - CH8 HEADLESS: Off -100%, On +100%
This commit is contained in:
parent
d940a7e49a
commit
521b819b8a
@ -48,4 +48,5 @@
|
|||||||
48,V761
|
48,V761
|
||||||
49,KF606
|
49,KF606
|
||||||
50,REDPINE,FAST,SLOW
|
50,REDPINE,FAST,SLOW
|
||||||
|
51,POTENSIC,A20
|
||||||
63,XN_DUMP,250K,1M,2M
|
63,XN_DUMP,250K,1M,2M
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#define VERSION_MAJOR 1
|
#define VERSION_MAJOR 1
|
||||||
#define VERSION_MINOR 2
|
#define VERSION_MINOR 2
|
||||||
#define VERSION_REVISION 1
|
#define VERSION_REVISION 1
|
||||||
#define VERSION_PATCH_LEVEL 62
|
#define VERSION_PATCH_LEVEL 63
|
||||||
|
|
||||||
//******************
|
//******************
|
||||||
// Protocols
|
// Protocols
|
||||||
@ -77,6 +77,7 @@ enum PROTOCOLS
|
|||||||
PROTO_V761 = 48, // =>NRF24L01
|
PROTO_V761 = 48, // =>NRF24L01
|
||||||
PROTO_KF606 = 49, // =>NRF24L01
|
PROTO_KF606 = 49, // =>NRF24L01
|
||||||
PROTO_REDPINE = 50, // =>CC2500
|
PROTO_REDPINE = 50, // =>CC2500
|
||||||
|
PROTO_POTENSIC = 51, // =>NRF24L01
|
||||||
PROTO_XN297DUMP = 63, // =>NRF24L01
|
PROTO_XN297DUMP = 63, // =>NRF24L01
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -620,6 +621,7 @@ Serial: 100000 Baud 8e2 _ xxxx xxxx p --
|
|||||||
V761 48
|
V761 48
|
||||||
KF606 49
|
KF606 49
|
||||||
REDPINE 50
|
REDPINE 50
|
||||||
|
POTENSIC 51
|
||||||
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
|
||||||
|
@ -1247,6 +1247,12 @@ static void protocol_init()
|
|||||||
remote_callback = KF606_callback;
|
remote_callback = KF606_callback;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(POTENSIC_NRF24L01_INO)
|
||||||
|
case PROTO_POTENSIC:
|
||||||
|
next_callback=initPOTENSIC();
|
||||||
|
remote_callback = POTENSIC_callback;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#if defined(XN297DUMP_NRF24L01_INO)
|
#if defined(XN297DUMP_NRF24L01_INO)
|
||||||
case PROTO_XN297DUMP:
|
case PROTO_XN297DUMP:
|
||||||
next_callback=initXN297Dump();
|
next_callback=initXN297Dump();
|
||||||
|
124
Multiprotocol/POTENSIC_nrf24l01.ino
Normal file
124
Multiprotocol/POTENSIC_nrf24l01.ino
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
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(POTENSIC_NRF24L01_INO)
|
||||||
|
|
||||||
|
#include "iface_nrf24l01.h"
|
||||||
|
|
||||||
|
//#define FORCE_POTENSIC_ORIGINAL_ID
|
||||||
|
|
||||||
|
#define POTENSIC_PACKET_PERIOD 4100 // Timeout for callback in uSec
|
||||||
|
#define POTENSIC_INITIAL_WAIT 500
|
||||||
|
#define POTENSIC_PACKET_SIZE 10
|
||||||
|
#define POTENSIC_BIND_COUNT 400
|
||||||
|
#define POTENSIC_RF_NUM_CHANNELS 4
|
||||||
|
|
||||||
|
static void __attribute__((unused)) POTENSIC_set_checksum()
|
||||||
|
{
|
||||||
|
uint8_t checksum = packet[1];
|
||||||
|
for(uint8_t i=2; i<POTENSIC_PACKET_SIZE-2; i++)
|
||||||
|
checksum += packet[i];
|
||||||
|
packet[8] |= checksum & 0x0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __attribute__((unused)) POTENSIC_send_packet()
|
||||||
|
{
|
||||||
|
packet[8]=0;
|
||||||
|
if(IS_BIND_IN_PROGRESS)
|
||||||
|
{
|
||||||
|
packet[0] = 0x61;
|
||||||
|
memcpy(&packet[1],rx_tx_addr,5);
|
||||||
|
packet[6] = 0x20;
|
||||||
|
packet[7] = 0xC0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
packet[0] = 0x64;
|
||||||
|
packet[1] = convert_channel_16b_limit(THROTTLE,0,100)&0xFE;
|
||||||
|
uint8_t elevator=convert_channel_8b(ELEVATOR)>>3;
|
||||||
|
packet[2] = ((255-convert_channel_8b(RUDDER))&0xF8)|(elevator>>2);
|
||||||
|
packet[3] = (elevator<<6)|(((255-convert_channel_8b(AILERON))>>2)&0xFE);
|
||||||
|
packet[4] = 0x20; // Trim
|
||||||
|
packet[5] = 0x20 // Trim
|
||||||
|
| GET_FLAG(CH7_SW, 0x80); // High: +100%
|
||||||
|
packet[6] = 0x20; // Trim
|
||||||
|
packet[7] = 0x40 // Low: -100%
|
||||||
|
| GET_FLAG((Channel_data[CH7] > CHANNEL_MIN_COMMAND && !CH7_SW), 0x80) // Medium: 0%
|
||||||
|
| GET_FLAG((CH5_SW||CH6_SW), 0x02) // Momentary Take off/Landing + Emergency
|
||||||
|
| GET_FLAG(CH8_SW, 0x04); // Headless: -100%=off,+100%=on
|
||||||
|
packet[8] = GET_FLAG(CH6_SW, 0x80); // Emergency
|
||||||
|
}
|
||||||
|
POTENSIC_set_checksum();
|
||||||
|
packet[9] = hopping_frequency_no;
|
||||||
|
NRF24L01_WriteReg(NRF24L01_05_RF_CH, hopping_frequency[hopping_frequency_no&0x03]);
|
||||||
|
hopping_frequency_no++;
|
||||||
|
// Power on, TX mode, 2byte CRC
|
||||||
|
XN297_Configure(_BV(NRF24L01_00_EN_CRC) | _BV(NRF24L01_00_CRCO) | _BV(NRF24L01_00_PWR_UP));
|
||||||
|
NRF24L01_WriteReg(NRF24L01_07_STATUS, 0x70);
|
||||||
|
NRF24L01_FlushTx();
|
||||||
|
XN297_WritePayload(packet, POTENSIC_PACKET_SIZE);
|
||||||
|
NRF24L01_SetPower();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __attribute__((unused)) POTENSIC_init()
|
||||||
|
{
|
||||||
|
NRF24L01_Initialize();
|
||||||
|
NRF24L01_SetTxRxMode(TX_EN);
|
||||||
|
NRF24L01_FlushTx();
|
||||||
|
NRF24L01_FlushRx();
|
||||||
|
if(IS_BIND_IN_PROGRESS)
|
||||||
|
XN297_SetTXAddr((uint8_t*)"\x01\x01\x01\x01\x06", 5); // Bind address
|
||||||
|
else
|
||||||
|
XN297_SetTXAddr(rx_tx_addr,5); // Normal address
|
||||||
|
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); // set address length (5 bytes)
|
||||||
|
NRF24L01_WriteReg(NRF24L01_04_SETUP_RETR, 0x00); // no retransmits
|
||||||
|
NRF24L01_SetBitrate(NRF24L01_BR_1M); // 1Mbps
|
||||||
|
NRF24L01_SetPower();
|
||||||
|
NRF24L01_Activate(0x73); // Activate feature register
|
||||||
|
NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x00); // Disable dynamic payload length on all pipes
|
||||||
|
NRF24L01_WriteReg(NRF24L01_1D_FEATURE, 0x01);
|
||||||
|
NRF24L01_Activate(0x73);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __attribute__((unused)) POTENSIC_initialize_txid()
|
||||||
|
{
|
||||||
|
#ifdef FORCE_POTENSIC_ORIGINAL_ID
|
||||||
|
memcpy(rx_tx_addr,(uint8_t *)"\xF6\xE0\x20\x00\x0E",5);
|
||||||
|
#endif
|
||||||
|
memcpy(hopping_frequency,(uint8_t *)"\x32\x3E\x3A\x36",POTENSIC_RF_NUM_CHANNELS); //50, 62, 58, 54
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t POTENSIC_callback()
|
||||||
|
{
|
||||||
|
if(IS_BIND_IN_PROGRESS)
|
||||||
|
if(--bind_counter==0)
|
||||||
|
{
|
||||||
|
BIND_DONE;
|
||||||
|
XN297_SetTXAddr(rx_tx_addr,5);
|
||||||
|
}
|
||||||
|
POTENSIC_send_packet();
|
||||||
|
return POTENSIC_PACKET_PERIOD;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t initPOTENSIC(void)
|
||||||
|
{
|
||||||
|
bind_counter = POTENSIC_BIND_COUNT;
|
||||||
|
POTENSIC_initialize_txid();
|
||||||
|
POTENSIC_init();
|
||||||
|
hopping_frequency_no = 0;
|
||||||
|
return POTENSIC_INITIAL_WAIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -196,6 +196,7 @@
|
|||||||
#undef V761_NRF24L01_INO
|
#undef V761_NRF24L01_INO
|
||||||
#undef V911S_NRF24L01_INO
|
#undef V911S_NRF24L01_INO
|
||||||
#undef XN297L_CC2500_EMU
|
#undef XN297L_CC2500_EMU
|
||||||
|
#undef POTENSIC_NRF24L01_INO
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//Make sure telemetry is selected correctly
|
//Make sure telemetry is selected correctly
|
||||||
|
@ -200,7 +200,8 @@
|
|||||||
#define KN_NRF24L01_INO
|
#define KN_NRF24L01_INO
|
||||||
#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 POTENSIC_NRF24L01_INO
|
||||||
#define Q303_NRF24L01_INO
|
#define Q303_NRF24L01_INO
|
||||||
#define SHENQI_NRF24L01_INO
|
#define SHENQI_NRF24L01_INO
|
||||||
#define SLT_NRF24L01_INO
|
#define SLT_NRF24L01_INO
|
||||||
@ -592,6 +593,8 @@ const PPM_Parameters PPM_prot[14*NBR_BANKS]= {
|
|||||||
FY805
|
FY805
|
||||||
PROTO_NCC1701
|
PROTO_NCC1701
|
||||||
NONE
|
NONE
|
||||||
|
PROTO_POTENSIC
|
||||||
|
NONE
|
||||||
PROTO_Q2X2
|
PROTO_Q2X2
|
||||||
Q222
|
Q222
|
||||||
Q242
|
Q242
|
||||||
|
@ -103,8 +103,10 @@ CFlie|38|CFlie||||||||NRF24L01
|
|||||||
[MT99xx](Protocols_Details.md#MT99XX---17)|17|MT|H7|YZ|LS|FY805||||NRF24L01
|
[MT99xx](Protocols_Details.md#MT99XX---17)|17|MT|H7|YZ|LS|FY805||||NRF24L01
|
||||||
[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
|
||||||
|
[Potensic](Protocols_Details.md#Potensic---51)|51|A20||||||||NRF24L01
|
||||||
[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
|
[Q303](Protocols_Details.md#Q303---31)|31|Q303|CX35|CX10D|CX10WD|||||NRF24L01
|
||||||
|
[Redpine](Protocols_Details.md#Redpine---50)|50|FAST|SLOW|||||||NRF24L01
|
||||||
[SFHSS](Protocols_Details.md#SFHSS---21)|21|SFHSS||||||||CC2500
|
[SFHSS](Protocols_Details.md#SFHSS---21)|21|SFHSS||||||||CC2500
|
||||||
[Shenqi](Protocols_Details.md#Shenqi---19)|19|Shenqi||||||||NRF24L01
|
[Shenqi](Protocols_Details.md#Shenqi---19)|19|Shenqi||||||||NRF24L01
|
||||||
[SLT](Protocols_Details.md#SLT---11)|11|SLT_V1|SLT_V2|Q100|Q200|MR100||||NRF24L01
|
[SLT](Protocols_Details.md#SLT---11)|11|SLT_V1|SLT_V2|Q100|Q200|MR100||||NRF24L01
|
||||||
@ -944,6 +946,21 @@ CH1|CH2|CH3|CH4|CH5
|
|||||||
---|---|---|---|---
|
---|---|---|---|---
|
||||||
A|E|T|R|Warp
|
A|E|T|R|Warp
|
||||||
|
|
||||||
|
## Potensic - *51*
|
||||||
|
Models: Potensic A20
|
||||||
|
|
||||||
|
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
|
||||||
|
---|---|---|---|---|---|---|---
|
||||||
|
A|E|T|R|TAKE_OFF/LANDING|EMERGENCY|MODE|HEADLESS
|
||||||
|
|
||||||
|
TAKE_OFF/LANDING: momentary switch -100% -> +100%
|
||||||
|
|
||||||
|
EMERGENCY: Stop +100%
|
||||||
|
|
||||||
|
MODE: Beginner -100%, Medium 0%, Advanced +100%
|
||||||
|
|
||||||
|
HEADLESS: Off -100%, On +100%
|
||||||
|
|
||||||
## Q2X2 - *29*
|
## Q2X2 - *29*
|
||||||
### Sub_protocol Q222 - *0*
|
### Sub_protocol Q222 - *0*
|
||||||
Models: Q222 v1 and V686 v2
|
Models: Q222 v1 and V686 v2
|
||||||
@ -994,6 +1011,12 @@ ARM|FLIP
|
|||||||
|
|
||||||
ARM is 3 positions: -100%=land / 0%=manual / +100%=take off
|
ARM is 3 positions: -100%=land / 0%=manual / +100%=take off
|
||||||
|
|
||||||
|
##Redpine - *50*
|
||||||
|
[Link](https://www.rcgroups.com/forums/showthread.php?3236043-Redpine-Lowest-latency-RC-protocol)
|
||||||
|
|
||||||
|
### Sub_protocol FAST - *0*
|
||||||
|
### Sub_protocol SLOW - *1*
|
||||||
|
|
||||||
## Shenqi - *19*
|
## Shenqi - *19*
|
||||||
Autobind protocol
|
Autobind protocol
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user