1 #include "crsf_sysmocks.h"
2 #include "crsf_protocol.h"
4 * Functions to replicate the CRSF conversion routines in OpenTX / Betaflight
8 #define limit(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
9 #define CROSSFIRE_CENTER 0x3E0 // 992
10 #define CROSSFIRE_CENTER_CH_OFFSET (0)
11 #define PPM_CENTER 1500
12 #define PPM_CH_CENTER (PPM_CENTER)
14 uint32_t OpenTx_to_Crsf(int16_t pulse
)
16 uint32_t val
= limit(0, CROSSFIRE_CENTER
+ (CROSSFIRE_CENTER_CH_OFFSET
* 4) / 5 + (pulse
* 4) / 5, 2 * CROSSFIRE_CENTER
);
20 int16_t Crsf_to_OpenTx(uint32_t crsfval
)
22 int16_t val
= (crsfval
- CROSSFIRE_CENTER
- (CROSSFIRE_CENTER_CH_OFFSET
* 5 / 4)) * 5 / 4;
26 uint32_t OpenTx_to_Us(int16_t pulse
)
28 return PPM_CENTER
+ (pulse
/ 2);
31 int16_t Us_to_OpenTx(uint32_t us
)
33 return 2 * ((int32_t)(us
) - PPM_CENTER
);
36 uint32_t Crsf_to_OpenTx_to_Us(uint32_t crsfval
)
38 return OpenTx_to_Us(Crsf_to_OpenTx(crsfval
));
41 uint32_t Crsf_to_Uint10_to_Crsf(uint32_t crsfval
)
43 return UINT10_to_CRSF(CRSF_to_UINT10(crsfval
));
46 #define CRSF_RC_CHANNEL_SCALE_LEGACY 0.62477120195241f
47 uint32_t Crsf_to_BfUs(uint32_t crsfval
)
49 float val
= (CRSF_RC_CHANNEL_SCALE_LEGACY
* (float)crsfval
) + 881;
50 //printf("%u=%f ", crsfval, val);