diff --git a/src/robomaster.c b/src/robomaster.c index 6dfbd1b..6c08b74 100644 --- a/src/robomaster.c +++ b/src/robomaster.c @@ -61,6 +61,19 @@ set_sdk_connection_req_new ( const Message set_system_led_req_new ( Client session, - struct SetSystemLedReq* msg ) { - return message_new(session, 0x3F, SET_SYSTEM_LED_CMDID, sizeof(struct SetSystemLedReq), msg); + uint8_t red, + uint8_t green, + uint8_t blue, + enum LEDCOMP comp, + uint16_t led_mask, + enum LEDEFFECT effect, + uint16_t t1, + uint16_t t2 ) { + const struct SetSystemLedReq msg = { + comp, led_mask, + { effect, 7 }, + red, green, blue, + 0, t1, t2 + }; + return message_new(session, 0x3F, SET_SYSTEM_LED_CMDID, sizeof(msg), &msg); } diff --git a/src/robomaster.h b/src/robomaster.h index 075d3e7..dcb8299 100644 --- a/src/robomaster.h +++ b/src/robomaster.h @@ -149,36 +149,47 @@ const Message get_version_req_new(Client session); static const uint8_t SET_SYSTEM_LED_CMDID = 0x33; enum LEDCOMP { - LEDCOMP_BOTTOM_BACK = 0x1; - LEDCOMP_BOTTOM_FRONT = 0x2; - LEDCOMP_BOTTOM_LEFT = 0x4; - LEDCOMP_BOTTOM_RIGHT = 0x8; - LEDCOMP_BOTTOM_ALL = 0xf; - LEDCOMP_TOP_LEFT = 0x10; - LEDCOMP_TOP_RIGHT = 0x20; - LEDCOMP_TOP_ALL = 0x30; - LEDCOMP_ALL = 0x3f; + LEDCOMP_BOTTOM_BACK = 0x1, + LEDCOMP_BOTTOM_FRONT = 0x2, + LEDCOMP_BOTTOM_LEFT = 0x4, + LEDCOMP_BOTTOM_RIGHT = 0x8, + LEDCOMP_BOTTOM_ALL = 0xf, + LEDCOMP_TOP_LEFT = 0x10, + LEDCOMP_TOP_RIGHT = 0x20, + LEDCOMP_TOP_ALL = 0x30, + LEDCOMP_ALL = 0x3f }; enum LEDEFFECT { - LEDEFFECT_OFF = 0; - LEDEFFECT_ON = 1; - LEDEFFECT_BREATH = 2; - LEDEFFECT_FLASH = 3; - LEDEFFECT_SCROLLING = 4; + LEDEFFECT_OFF = 0, + LEDEFFECT_ON = 1, + LEDEFFECT_BREATH = 2, + LEDEFFECT_FLASH = 3, + LEDEFFECT_SCROLLING = 4 }; struct PACKED SetSystemLedReq { + + // Which LEDs on which component to control uint32_t comp_mask; uint16_t led_mask; + struct { + // off, on, flashing, etc. uint8_t effect_mode : 4; + // Always 7 uint8_t control_mode : 4; }; + + // RGB values for the LED color uint8_t red; uint8_t green; uint8_t blue; + + // Always 0 uint8_t loop; + + // These time intervals have different meaning depending on effect uint16_t t1; uint16_t t2; }; @@ -187,4 +198,14 @@ struct PACKED SetSystemLedResp { uint8_t retcode; }; -const Message set_system_led_req_new(Client session, struct SetSystemLedReq* msg); +const Message +set_system_led_req_new ( + Client session, + uint8_t red, + uint8_t green, + uint8_t blue, + enum LEDCOMP comp, + uint16_t led_mask, + enum LEDEFFECT effect, + uint16_t t1, + uint16_t t2 );