mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 20:58:10 +00:00
116 lines
2.4 KiB
C++
116 lines
2.4 KiB
C++
/*
|
|
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(JOYSWAY_A7105_INO)
|
|
|
|
#include "iface_a7105.h"
|
|
|
|
//#define JOYSWAY_FORCE_ID
|
|
|
|
static void __attribute__((unused)) JOYSWAY_send_packet()
|
|
{
|
|
static uint8_t next_ch = 0x30;
|
|
|
|
//RF frequency
|
|
if (packet_count == 254)
|
|
{
|
|
packet_count = 0;
|
|
A7105_WriteID(0x5475c52a);
|
|
rf_ch_num = 0x0a;
|
|
}
|
|
else if (packet_count == 2)
|
|
{
|
|
A7105_WriteID(MProtocol_id);
|
|
rf_ch_num = 0x30;
|
|
}
|
|
else
|
|
{
|
|
if (packet_count & 0x01)
|
|
rf_ch_num = 0x30;
|
|
else
|
|
rf_ch_num = next_ch;
|
|
}
|
|
if (! (packet_count & 0x01))
|
|
{
|
|
next_ch++;
|
|
if (next_ch >= 0x45)
|
|
next_ch = 0x30;
|
|
}
|
|
|
|
//Payload
|
|
packet[0] = packet_count == 0 ? 0xdd : 0xff;
|
|
//ID
|
|
packet[1] = rx_tx_addr[0];
|
|
packet[2] = rx_tx_addr[1];
|
|
packet[3] = rx_tx_addr[2];
|
|
packet[4] = rx_tx_addr[3];
|
|
packet[5] = 0x00;
|
|
//Channels
|
|
for (uint8_t i = 0; i < 4; i++)
|
|
packet[ 6 + (i & 0x01) + ((i & 0x02)<<1)] = convert_channel_16b_limit(i, 0x00, 0xCC);
|
|
packet[8] = 0x64;
|
|
packet[9] = 0x64;
|
|
packet[12] = 0x64;
|
|
packet[13] = 0x64;
|
|
packet[14] = packet_count == 0 ? 0x30 : 0xaa;
|
|
//Check
|
|
uint8_t value = 0;
|
|
for (uint8_t i = 0; i < 15; i++)
|
|
value += packet[i];
|
|
packet[15] = value;
|
|
|
|
//Send
|
|
#if 0
|
|
debug("ch=%02X P=",rf_ch_num);
|
|
for(uint8_t i=0; i<16; i++)
|
|
debug("%02X ", packet[i]);
|
|
debugln("");
|
|
#endif
|
|
A7105_WriteData(16, rf_ch_num);
|
|
A7105_SetPower();
|
|
packet_count++;
|
|
}
|
|
|
|
uint16_t JOYSWAY_callback()
|
|
{
|
|
#ifdef MULTI_SYNC
|
|
telemetry_set_input_sync(6000);
|
|
#endif
|
|
#ifndef FORCE_JOYSWAY_TUNING
|
|
A7105_AdjustLOBaseFreq(1);
|
|
#endif
|
|
|
|
JOYSWAY_send_packet();
|
|
return 6000;
|
|
}
|
|
|
|
void JOYSWAY_init()
|
|
{
|
|
BIND_DONE; // not a bind protocol
|
|
|
|
MProtocol_id &= 0x00FFFFFF;
|
|
MProtocol_id |= 0xF8000000;
|
|
#ifdef JOYSWAY_FORCE_ID
|
|
MProtocol_id = 0xf82dcaa0;
|
|
#endif
|
|
|
|
set_rx_tx_addr(MProtocol_id);
|
|
|
|
A7105_Init();
|
|
|
|
packet_count = 2;
|
|
}
|
|
#endif
|