feat: implement channel helpers
cel_crsf_channel_us_to_val() and cel_crsf_channel_val_to_us() convert between microseconds (988-2012) and 11-bit values (172-1811) with rounding. cel_crsf_channel_default() fills safe/disarmed values.
This commit is contained in:
@@ -38,6 +38,60 @@ void test_channel_clamp_mid(void) {
|
||||
TEST_ASSERT_EQUAL_INT16(CEL_CRSF_CH_MID, cel_crsf_channel_clamp(CEL_CRSF_CH_MID));
|
||||
}
|
||||
|
||||
void test_channel_us_to_val_min(void) {
|
||||
TEST_ASSERT_EQUAL_INT16(CEL_CRSF_CH_MIN, cel_crsf_channel_us_to_val(988));
|
||||
}
|
||||
|
||||
void test_channel_us_to_val_mid(void) {
|
||||
TEST_ASSERT_EQUAL_INT16(CEL_CRSF_CH_MID, cel_crsf_channel_us_to_val(1500));
|
||||
}
|
||||
|
||||
void test_channel_us_to_val_max(void) {
|
||||
TEST_ASSERT_EQUAL_INT16(CEL_CRSF_CH_MAX, cel_crsf_channel_us_to_val(2012));
|
||||
}
|
||||
|
||||
void test_channel_us_to_val_below_min(void) {
|
||||
TEST_ASSERT_EQUAL_INT16(CEL_CRSF_CH_MIN, cel_crsf_channel_us_to_val(0));
|
||||
}
|
||||
|
||||
void test_channel_us_to_val_above_max(void) {
|
||||
TEST_ASSERT_EQUAL_INT16(CEL_CRSF_CH_MAX, cel_crsf_channel_us_to_val(65535));
|
||||
}
|
||||
|
||||
void test_channel_val_to_us_min(void) {
|
||||
TEST_ASSERT_EQUAL_UINT16(988, cel_crsf_channel_val_to_us(CEL_CRSF_CH_MIN));
|
||||
}
|
||||
|
||||
void test_channel_val_to_us_mid(void) {
|
||||
TEST_ASSERT_EQUAL_UINT16(1500, cel_crsf_channel_val_to_us(CEL_CRSF_CH_MID));
|
||||
}
|
||||
|
||||
void test_channel_val_to_us_max(void) {
|
||||
TEST_ASSERT_EQUAL_UINT16(2012, cel_crsf_channel_val_to_us(CEL_CRSF_CH_MAX));
|
||||
}
|
||||
|
||||
void test_channel_default_throttle_min(void) {
|
||||
int16_t ch[16];
|
||||
cel_crsf_channel_default(ch);
|
||||
TEST_ASSERT_EQUAL_INT16(CEL_CRSF_CH_MIN, ch[2]); /* throttle */
|
||||
}
|
||||
|
||||
void test_channel_default_centered(void) {
|
||||
int16_t ch[16];
|
||||
cel_crsf_channel_default(ch);
|
||||
TEST_ASSERT_EQUAL_INT16(CEL_CRSF_CH_MID, ch[0]); /* roll */
|
||||
TEST_ASSERT_EQUAL_INT16(CEL_CRSF_CH_MID, ch[1]); /* pitch */
|
||||
TEST_ASSERT_EQUAL_INT16(CEL_CRSF_CH_MID, ch[3]); /* yaw */
|
||||
}
|
||||
|
||||
void test_channel_default_aux_min(void) {
|
||||
int16_t ch[16];
|
||||
cel_crsf_channel_default(ch);
|
||||
for (int i = 4; i < 16; i++) {
|
||||
TEST_ASSERT_EQUAL_INT16(CEL_CRSF_CH_MIN, ch[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Frame parse tests — ELRS format: [addr][length][type][payload][crc] */
|
||||
|
||||
/* Build a valid test frame with known CRC */
|
||||
@@ -123,6 +177,17 @@ int main(void) {
|
||||
RUN_TEST(test_channel_clamp_min);
|
||||
RUN_TEST(test_channel_clamp_max);
|
||||
RUN_TEST(test_channel_clamp_mid);
|
||||
RUN_TEST(test_channel_us_to_val_min);
|
||||
RUN_TEST(test_channel_us_to_val_mid);
|
||||
RUN_TEST(test_channel_us_to_val_max);
|
||||
RUN_TEST(test_channel_us_to_val_below_min);
|
||||
RUN_TEST(test_channel_us_to_val_above_max);
|
||||
RUN_TEST(test_channel_val_to_us_min);
|
||||
RUN_TEST(test_channel_val_to_us_mid);
|
||||
RUN_TEST(test_channel_val_to_us_max);
|
||||
RUN_TEST(test_channel_default_throttle_min);
|
||||
RUN_TEST(test_channel_default_centered);
|
||||
RUN_TEST(test_channel_default_aux_min);
|
||||
RUN_TEST(test_parse_valid_frame);
|
||||
RUN_TEST(test_parse_null_frame);
|
||||
RUN_TEST(test_parse_null_buf);
|
||||
|
||||
Reference in New Issue
Block a user