Skip to content

Commit fd43fde

Browse files
committed
Add fixed-ID MC8RE V2 A7105 protocol
1 parent c8d0638 commit fd43fde

8 files changed

Lines changed: 483 additions & 1 deletion

File tree

Multiprotocol/MC8RE_a7105.ino

Lines changed: 407 additions & 0 deletions
Large diffs are not rendered by default.

Multiprotocol/Multi_Protos.ino

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ const char STR_RLINK[] ="RadLink";
9696
const char STR_REALACC[] ="Realacc";
9797
const char STR_OMP[] ="OMP";
9898
const char STR_MLINK[] ="M-Link";
99+
const char STR_MC8RE[] ="MC8RE V2";
99100
const char STR_TEST[] ="Test";
100101
const char STR_NANORF[] ="NanoRF";
101102
const char STR_E016HV2[] ="E016Hv2";
@@ -433,7 +434,10 @@ const mm_protocol_definition multi_protocols[] = {
433434
{PROTO_MLINK, STR_MLINK, NO_SUBTYPE, 0, OPTION_NONE, 1, 0, SW_CYRF, MLINK_init, MLINK_callback },
434435
#endif
435436
#if defined(XK_CCNRF_INO)
436-
{PROTO_MOFLY, STR_MOFLY, NO_SUBTYPE, 0, OPTION_RFTUNE, 0, 0, SW_NRF, XK_init, XK_callback },
437+
{PROTO_MOFLY, STR_MOFLY, NO_SUBTYPE, 0, OPTION_RFTUNE, 0, 0, SW_NRF, XK_init, XK_callback },
438+
#endif
439+
#if defined(MC8RE_A7105_INO)
440+
{PROTO_MC8RE, STR_MC8RE, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_A7105, MC8RE_init, MC8RE_callback },
437441
#endif
438442
#if defined(MOULDKG_NRF24L01_INO)
439443
{PROTO_MOULDKG, STR_MOULDKG, STR_SUBTYPE_MOULDKG, 3, OPTION_OPTION, 0, 0, SW_NRF, MOULDKG_init, MOULDKG_callback },

Multiprotocol/Multiprotocol.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ enum PROTOCOLS
137137
PROTO_WPL = 107, // =>NRF24L01
138138
PROTO_ARES = 108, // =>CC2500
139139
PROTO_MOFLY = 109, // =>CC2500 & NRF24L01
140+
PROTO_MC8RE = 110, // =>A7105
140141

141142
PROTO_NANORF = 126, // =>NRF24L01
142143
PROTO_TEST = 127, // =>CC2500
@@ -597,6 +598,11 @@ enum MultiPacketTypes
597598
MULTI_TELEMETRY_RLINK = 18,
598599
};
599600

601+
#if defined(MC8RE_A7105_INO)
602+
void MC8RE_init();
603+
uint16_t MC8RE_callback();
604+
#endif
605+
600606
// Macros
601607
#define NOP() __asm__ __volatile__("nop")
602608

Multiprotocol/Telemetry.ino

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,18 @@ static void multi_send_status()
326326

327327
static void multi_send_frskyhub()
328328
{
329+
#if defined(MC8RE_A7105_INO)
330+
/* MC8RE V2 provides only A1/A2 plus the FrSky-D link marker. A short
331+
* frame intentionally prevents EdgeTX from creating synthetic link
332+
* quality telemetry fields that this receiver does not transmit. */
333+
if(protocol == PROTO_MC8RE && frame[0] == 0xFE)
334+
{
335+
multi_send_header(MULTI_TELEMETRY_HUB, 4);
336+
for(uint8_t i = 0; i < 4; i++)
337+
Serial_write(frame[i]);
338+
return;
339+
}
340+
#endif
329341
multi_send_header(MULTI_TELEMETRY_HUB, 9);
330342
for (uint8_t i = 0; i < 9; i++)
331343
Serial_write(frame[i]);

Multiprotocol/Validate.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@
257257
#undef HUBSAN_A7105_INO
258258
#undef JOYSWAY_A7105_INO
259259
#undef KYOSHO_A7105_INO
260+
#undef MC8RE_A7105_INO
260261
#undef PELIKAN_A7105_INO
261262
#undef WFLY2_A7105_INO
262263
#endif
@@ -418,6 +419,7 @@
418419
#undef BUGS_A7105_INO
419420
#undef HEIGHT_A7105_INO
420421
#undef HUBSAN_A7105_INO
422+
#undef MC8RE_A7105_INO
421423
#undef E010R5_CYRF6936_INO
422424
#undef E01X_CYRF6936_INO
423425
#undef E129_CYRF6936_INO

Multiprotocol/_Config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@
186186
#define HUBSAN_A7105_INO
187187
#define JOYSWAY_A7105_INO
188188
#define KYOSHO_A7105_INO
189+
#define MC8RE_A7105_INO
189190
#define PELIKAN_A7105_INO
190191
#define WFLY2_A7105_INO
191192

Protocols_Details.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ CFlie|AIR|38|CFlie||||||||NRF24L01|
127127
[MJXq](Protocols_Details.md#MJXQ---18)||18|WLH08|X600|X800|H26D|E010*|H26WH|PHOENIX*||NRF24L01|XN297
128128
[MLINK](Protocols_Details.md#MLINK---78)||78|||||||||CYRF6936|
129129
[MoFly](Protocols_Details.md#MoFly---109)||109|||||||||NRF24L01&CC2500|XN297
130+
[MC8RE V2](Protocols_Details.md#MC8RE-V2---110)|AIR|110|||||||||A7105|
130131
[MouldKg](Protocols_Details.md#mouldkg---90)||90|A4444|D4444|A664||||||NRF24L01|XN297
131132
[MT99xx](Protocols_Details.md#MT99XX---17)||17|MT|H7|YZ|LS|FY805|A180|DRAGON|F949G|NRF24L01|XN297
132133
[MT99xx2](Protocols_Details.md#MT99XX2---92)||92|PA18|SU35|||||||NRF24L01|XN297
@@ -381,6 +382,20 @@ A|E|T|R|CH5|CH6
381382

382383
RX output will match the Hype 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.
383384

385+
## MC8RE V2 - *110*
386+
387+
MC8RE V2 receiver family. Bind from the transmitter GUI, then set A1 to the
388+
receiver/BEC voltage and A2 to the external battery voltage. Set A2's ratio
389+
to 25.5 V for a 4S voltage range.
390+
391+
This protocol is fixed to the capture-proven transmitter identity and hopping
392+
sequence. It is not yet a universal implementation for transmitters with a
393+
different original identity; see [MC8RE_V2.md](docs/MC8RE_V2.md).
394+
395+
CH1|CH2|CH3|CH4|CH5|CH6|CH7|CH8
396+
---|---|---|---|---|---|---|---
397+
A|E|T|R|CH5|CH6|CH7|CH8
398+
384399
## Pelikan - *60*
385400
Extended limits supported
386401

docs/MC8RE_V2.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# MC8RE V2 (A7105)
2+
3+
This protocol supports the MC8RE V2 receiver family using an A7105 RF chip.
4+
It was reconstructed from a wired A7105 SPI capture of the original
5+
transmitter and then verified on two MC8RE V2 receivers.
6+
7+
## Implemented behaviour
8+
9+
- bind sequence: six packets on A7105 ID `5475C52A`, channel
10+
`01`, then normal operation on ID `51D567EB`;
11+
- 16-channel hopping and the original startup/RX slot timing captured from
12+
the transmitter;
13+
- eight 11-bit packed output channels, with EdgeTX +/-100% mapped to
14+
1000/1500/2000 us;
15+
- telemetry A1 (receiver/BEC voltage) and A2 (external battery voltage,
16+
0.1 V per count; set EdgeTX A2 ratio to 25.5 V for a 4S range);
17+
- a relative local A7105 RSSI indication. It is not a calibrated received
18+
signal-strength measurement supplied by the receiver.
19+
20+
## Known limitation
21+
22+
The normal link ID and hopping sequence are intentionally fixed to the
23+
capture-proven transmitter identity `51D567EB`. Another original
24+
transmitter has been observed to use a different ID and hopping sequence.
25+
Deriving only the low 24 bits from the EdgeTX receiver number bound briefly
26+
but did not maintain control, so it is deliberately not exposed as an option.
27+
This is why this change is suitable for a **Draft PR / request for more
28+
captures**, rather than a claim of universal MC8RE compatibility.
29+
30+
## Reproduction evidence
31+
32+
The contributor can provide the original Saleae `.sal` wired capture on
33+
request. Its SPI settings are CPOL=0, CPHA=0, MSB first; A7105 CS, SCK,
34+
MOSI and MISO were captured. No receiver serial output or third-party RF
35+
packet decoder was used to infer the normal-channel format.

0 commit comments

Comments
 (0)