From 0608a7fcc4e7a6856ea57deeac430dfaae13fefd Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Thu, 24 Dec 2020 15:30:05 -0500 Subject: [PATCH] WIP: dsm bind default to DSMX 11 ms --- src/lib/rc/dsm.cpp | 21 +++++++++++++-------- src/lib/rc/dsm.h | 11 +++++++++++ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/lib/rc/dsm.cpp b/src/lib/rc/dsm.cpp index a1d9a26601..dc3539c44f 100644 --- a/src/lib/rc/dsm.cpp +++ b/src/lib/rc/dsm.cpp @@ -384,17 +384,22 @@ void dsm_bind(uint16_t cmd, int pulses) SPEKTRUM_RX_AS_GPIO_OUTPUT(); break; - case DSM_CMD_BIND_SEND_PULSES: - // Pulse RX pin a number of times + case DSM_CMD_BIND_SEND_PULSES: { + // Pulse RX pin a number of times #if defined(DSM_DEBUG) - printf("DSM: DSM_CMD_BIND_SEND_PULSES\n"); + printf("DSM: DSM_CMD_BIND_SEND_PULSES\n"); #endif - for (int i = 0; i < pulses; i++) { - dsm_udelay(120); - SPEKTRUM_OUT(false); - dsm_udelay(120); - SPEKTRUM_OUT(true); + auto flags = px4_enter_critical_section(); + + for (int i = 0; i < DSM_BIND_PULSE::INTERNAL_DSMX_11MS; i++) { + dsm_udelay(120); + SPEKTRUM_OUT(false); + dsm_udelay(120); + SPEKTRUM_OUT(true); + } + + px4_leave_critical_section(flags); } break; diff --git a/src/lib/rc/dsm.h b/src/lib/rc/dsm.h index 874a760152..fd7154f366 100644 --- a/src/lib/rc/dsm.h +++ b/src/lib/rc/dsm.h @@ -63,6 +63,17 @@ typedef struct dsm_decode_t { dsm_buf_t buf; } dsm_decode_t; +enum DSM_BIND_PULSE { + INTERNAL_DSM2_22MS = 3, + EXTERNAL_DSM2_22MS = 4, + INTERNAL_DSM2_11MS = 5, + EXTERNAL_DSM2_11MS = 6, + INTERNAL_DSMX_22MS = 7, + EXTERNAL_DSMX_22MS = 8, + INTERNAL_DSMX_11MS = 9, + EXTERNAL_DSMX_11MS = 10, +}; + #pragma pack(pop) __EXPORT int dsm_init(const char *device);