From ed46b4e4acfb61c77c4be94112a6f5bf3788b597 Mon Sep 17 00:00:00 2001 From: treymarc Date: Thu, 1 May 2014 05:06:36 +0200 Subject: [PATCH] add serial_rx msp --- Makefile | 1 + src/board.h | 2 ++ src/cli.c | 2 +- src/main.c | 3 +++ src/mw.h | 5 +++++ src/rxmsp.c | 31 +++++++++++++++++++++++++++++++ src/serial.c | 1 + 7 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/rxmsp.c diff --git a/Makefile b/Makefile index 2cee3893df..3bab5cbfe4 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,7 @@ COMMON_SRC = startup_stm32f10x_md_gcc.S \ sbus.c \ sumd.c \ spektrum.c \ + rxmsp.c \ telemetry_common.c \ telemetry_frsky.c \ telemetry_hott.c \ diff --git a/src/board.h b/src/board.h index a41e734cd3..401d8f24e4 100755 --- a/src/board.h +++ b/src/board.h @@ -82,6 +82,8 @@ typedef enum { SERIALRX_SPEKTRUM2048 = 1, SERIALRX_SBUS = 2, SERIALRX_SUMD = 3, + SERIALRX_MSP = 4, + SERIALRX_PROVIDER_MAX = SERIALRX_MSP, } SerialRXType; typedef enum { diff --git a/src/cli.c b/src/cli.c index 8fc979454b..829117a83e 100644 --- a/src/cli.c +++ b/src/cli.c @@ -136,7 +136,7 @@ const clivalue_t valueTable[] = { { "softserial_2_inverted", VAR_UINT8, &mcfg.softserial_2_inverted, 0, 1 }, { "gps_type", VAR_UINT8, &mcfg.gps_type, 0, GPS_HARDWARE_MAX }, { "gps_baudrate", VAR_INT8, &mcfg.gps_baudrate, 0, GPS_BAUD_MAX }, - { "serialrx_type", VAR_UINT8, &mcfg.serialrx_type, 0, 3 }, + { "serialrx_type", VAR_UINT8, &mcfg.serialrx_type, 0, SERIALRX_PROVIDER_MAX }, { "telemetry_provider", VAR_UINT8, &mcfg.telemetry_provider, 0, TELEMETRY_PROVIDER_MAX }, { "telemetry_port", VAR_UINT8, &mcfg.telemetry_port, 0, TELEMETRY_PORT_MAX }, { "telemetry_switch", VAR_UINT8, &mcfg.telemetry_switch, 0, 1 }, diff --git a/src/main.c b/src/main.c index 8726d492c4..6e3294c0f0 100755 --- a/src/main.c +++ b/src/main.c @@ -112,6 +112,9 @@ int main(void) case SERIALRX_SUMD: sumdInit(&rcReadRawFunc); break; + case SERIALRX_MSP: + mspInit(&rcReadRawFunc); + break; } } else { // spektrum and GPS are mutually exclusive // Optional GPS - available in both PPM and PWM input mode, in PWM input, reduces number of available channels by 2. diff --git a/src/mw.h b/src/mw.h index 91a10e1088..59877b14ee 100755 --- a/src/mw.h +++ b/src/mw.h @@ -465,6 +465,11 @@ bool sbusFrameComplete(void); void sumdInit(rcReadRawDataPtr *callback); bool sumdFrameComplete(void); +// rxmsp +void mspInit(rcReadRawDataPtr *callback); +bool mspFrameComplete(void); +void mspFrameRecieve(void); + // buzzer void buzzer(uint8_t warn_vbat); void systemBeep(bool onoff); diff --git a/src/rxmsp.c b/src/rxmsp.c new file mode 100644 index 0000000000..c5dc0c22d7 --- /dev/null +++ b/src/rxmsp.c @@ -0,0 +1,31 @@ +#include "board.h" +#include "mw.h" + +static bool rxMspFrameDone = false; + +static uint16_t mspReadRawRC(uint8_t chan); +static uint16_t mspReadRawRC(uint8_t chan) +{ + return rcData[chan]; +} + +void mspFrameRecieve(void) +{ + rxMspFrameDone = true; +} + +bool mspFrameComplete(void) +{ + if (rxMspFrameDone) { + failsafeCnt = 0; // clear FailSafe counter + rxMspFrameDone = false; + return true; + } + return false; +} + +void mspInit(rcReadRawDataPtr *callback) +{ + if (callback) + *callback = mspReadRawRC; +} diff --git a/src/serial.c b/src/serial.c index ee59c8a7fb..cb6f5b2d1b 100755 --- a/src/serial.c +++ b/src/serial.c @@ -286,6 +286,7 @@ static void evaluateCommand(void) for (i = 0; i < 8; i++) rcData[i] = read16(); headSerialReply(0); + mspFrameRecieve(); break; case MSP_SET_ACC_TRIM: cfg.angleTrim[PITCH] = read16();