Skip to content

Commit 9dd7851

Browse files
committed
Add fixed-ID MC8RE V2 A7105 protocol
1 parent 90dcf03 commit 9dd7851

8 files changed

Lines changed: 482 additions & 0 deletions

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: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ const char STR_RLINK[] ="RadLink";
9595
const char STR_REALACC[] ="Realacc";
9696
const char STR_OMP[] ="OMP";
9797
const char STR_MLINK[] ="M-Link";
98+
const char STR_MC8RE[] ="MC8RE V2";
9899
const char STR_TEST[] ="Test";
99100
const char STR_NANORF[] ="NanoRF";
100101
const char STR_E016HV2[] ="E016Hv2";
@@ -431,6 +432,9 @@ const mm_protocol_definition multi_protocols[] = {
431432
#if defined(MLINK_CYRF6936_INO)
432433
{PROTO_MLINK, STR_MLINK, NO_SUBTYPE, 0, OPTION_NONE, 1, 0, SW_CYRF, MLINK_init, MLINK_callback },
433434
#endif
435+
#if defined(MC8RE_A7105_INO)
436+
{PROTO_MC8RE, STR_MC8RE, NO_SUBTYPE, 0, OPTION_NONE, 0, 0, SW_A7105, MC8RE_init, MC8RE_callback },
437+
#endif
434438
#if defined(MOULDKG_NRF24L01_INO)
435439
{PROTO_MOULDKG, STR_MOULDKG, STR_SUBTYPE_MOULDKG, 3, OPTION_OPTION, 0, 0, SW_NRF, MOULDKG_init, MOULDKG_callback },
436440
#endif

Multiprotocol/Multiprotocol.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ enum PROTOCOLS
136136
PROTO_WL91X = 106, // =>CC2500 & NRF24L01
137137
PROTO_WPL = 107, // =>NRF24L01
138138
PROTO_ARES = 108, // =>CC2500
139+
PROTO_MC8RE = 109, // =>A7105
139140

140141
PROTO_NANORF = 126, // =>NRF24L01
141142
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
@@ -126,6 +126,7 @@ CFlie|AIR|38|CFlie||||||||NRF24L01|
126126
[Losi](Protocols_Details.md#Losi---89)||89|||||||||CYRF6936|
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|
129+
[MC8RE V2](Protocols_Details.md#MC8RE-V2---109)|AIR|109|||||||||A7105|
129130
[MouldKg](Protocols_Details.md#mouldkg---90)||90|A4444|D4444|A664||||||NRF24L01|XN297
130131
[MT99xx](Protocols_Details.md#MT99XX---17)||17|MT|H7|YZ|LS|FY805|A180|DRAGON|F949G|NRF24L01|XN297
131132
[MT99xx2](Protocols_Details.md#MT99XX2---92)||92|PA18|SU35|||||||NRF24L01|XN297
@@ -380,6 +381,20 @@ A|E|T|R|CH5|CH6
380381

381382
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.
382383

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

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)