From ddb7fe8d36152a39c29201fc87d13cfe3e24e73d Mon Sep 17 00:00:00 2001 From: Tanay Kapoor Date: Sun, 7 Jun 2026 18:33:54 -0400 Subject: [PATCH] refactor(flysky_gimbal_driver): remove inefficiences in packet parsing function --- .../common/arm/stm32/flysky_gimbal_driver.cpp | 14 +++++--------- .../common/arm/stm32/flysky_gimbal_driver.h | 1 - 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/radio/src/targets/common/arm/stm32/flysky_gimbal_driver.cpp b/radio/src/targets/common/arm/stm32/flysky_gimbal_driver.cpp index 600b11fadd7..8f615ac680b 100644 --- a/radio/src/targets/common/arm/stm32/flysky_gimbal_driver.cpp +++ b/radio/src/targets/common/arm/stm32/flysky_gimbal_driver.cpp @@ -105,12 +105,14 @@ static void _fs_parse(STRUCT_HALL *hallBuffer, unsigned char ch) case GET_LENGTH: hallBuffer->length = ch; hallBuffer->dataIndex = 0; - hallBuffer->status = GET_DATA; - if(hallBuffer->length > HALLSTICK_BUFF_SIZE - 5) { // buffer size - header size (1 byte header + 1 byte ID + 1 byte length + 2 bytes CRC = 5 bytes) + + if (hallBuffer->length > HALLSTICK_BUFF_SIZE - 5) { // buffer size - header size (1 byte header + 1 byte ID + 1 byte length + 2 bytes CRC = 5 bytes) hallBuffer->status = GET_START; } else if (0 == hallBuffer->length) { hallBuffer->status = GET_CHECKSUM; hallBuffer->checkSum = 0; + } else { + hallBuffer->status = GET_DATA; // length is in a valid range, next state should extract data } break; @@ -119,16 +121,10 @@ static void _fs_parse(STRUCT_HALL *hallBuffer, unsigned char ch) if (hallBuffer->dataIndex >= hallBuffer->length) { hallBuffer->checkSum = 0; hallBuffer->dataIndex = 0; - hallBuffer->status = GET_STATE; + hallBuffer->status = GET_CHECKSUM; } break; - case GET_STATE: - hallBuffer->checkSum = 0; - hallBuffer->dataIndex = 0; - hallBuffer->status = GET_CHECKSUM; - // fall through! - case GET_CHECKSUM: hallBuffer->checkSum |= ch << ((hallBuffer->dataIndex++) * 8); if (hallBuffer->dataIndex >= 2) { diff --git a/radio/src/targets/common/arm/stm32/flysky_gimbal_driver.h b/radio/src/targets/common/arm/stm32/flysky_gimbal_driver.h index c8ebff45b8d..571e47129ae 100644 --- a/radio/src/targets/common/arm/stm32/flysky_gimbal_driver.h +++ b/radio/src/targets/common/arm/stm32/flysky_gimbal_driver.h @@ -107,7 +107,6 @@ enum GET_ID, GET_LENGTH, GET_DATA, - GET_STATE, GET_CHECKSUM, CHECKSUM, };