From 4431f12c8f3bac552777d829887d3ff69c3d576e Mon Sep 17 00:00:00 2001 From: Oliver Walter Date: Thu, 9 May 2024 02:16:48 +0200 Subject: [PATCH] added request for light theme --- Application/Tasks/LightTask.c | 34 +++++++++++++++++++++ Application/Tasks/UsbDataHandler.c | 2 ++ Application/Tasks/UsbDataHandler.h | 1 + proto | 2 +- tools/test_get_theme.py | 47 ++++++++++++++++++++++++++++++ 5 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 tools/test_get_theme.py diff --git a/Application/Tasks/LightTask.c b/Application/Tasks/LightTask.c index ac7b6f5..5634469 100644 --- a/Application/Tasks/LightTask.c +++ b/Application/Tasks/LightTask.c @@ -7,6 +7,7 @@ #include "CLSAddress.h" #include "BSP_EE24.h" #include "LightTask.h" +#include "CanDataHandler.h" // Memory for the task StaticTask_t LightTask_cb; @@ -27,6 +28,7 @@ static cls_light_GlobalBrightness msg_cls_light_GlobalBrightness; static cls_light_GlobalTheme msg_cls_light_GlobalTheme; static cls_light_ThemeSettings msg_cls_light_ThemeSettings; static cls_light_SaveThemeSettings msg_cls_light_SaveThemeSettings; +static cls_light_RequestThemeSetting msg_cls_light_RequestThemeSetting; static volatile struct LightSettings_s { volatile uint8_t brightness; @@ -105,4 +107,36 @@ void DataClbk_cls_light_SaveThemeSettings(void* msg, uint32_t length) { uint16_t msg_light_setting = GENERATE_CLS_ADDRESS(CLS_CODE_CONFIG, device, 4); CLS_BSP_TxHeaderType can_header = CREATE_BSP_CAN_HEADER(msg_light_setting, CLS_BSP_DLC_BYTES_1); CLS_BSP_CAN_AddMessageToSend(&can_header, (uint8_t*)"X"); +} + +static uint8_t request_theme; +static RGB_Theme_t response_theme; +static cls_light_ThemeSettings themesettings; +void CanData_responseThemeSetting(CanDataId canid, uint8_t* data, uint8_t len) { + if(len == 8) { + memcpy(&response_theme, data, 8); + + themesettings.animation = response_theme.animation; + themesettings.brightness = response_theme.max_brighness; + themesettings.deviceId = (canid >> 3) & 0x1F; + themesettings.rgb = response_theme.color.r | (response_theme.color.g << 8) | (response_theme.color.b << 16); + themesettings.theme = request_theme; + USBDataResonse(&themesettings,cls_light_ThemeSettings_fields, cls_usb_PackageType_LIGHT_SETTING_THEME); + } + + CanData_removeEvent(canid); +} + +void DataClbk_cls_light_RequestThemeSetting(void* msg, uint32_t length) { + DATA_CLBK_SETUP(cls_light_RequestThemeSetting); + uint8_t device = msg_cls_light_RequestThemeSetting.deviceId; + request_theme = (uint8_t)msg_cls_light_RequestThemeSetting.theme; + uint16_t msg_light_setting = GENERATE_CLS_ADDRESS(CLS_CODE_CONFIG, device, 7); + CLS_BSP_TxHeaderType can_header = CREATE_BSP_CAN_HEADER(msg_light_setting, CLS_BSP_DLC_BYTES_1); + + + CanData_regEventMsg(msg_light_setting,CanData_responseThemeSetting); + + + CLS_BSP_CAN_AddMessageToSend(&can_header, (uint8_t*)&request_theme); } \ No newline at end of file diff --git a/Application/Tasks/UsbDataHandler.c b/Application/Tasks/UsbDataHandler.c index d18402f..7d8df8d 100644 --- a/Application/Tasks/UsbDataHandler.c +++ b/Application/Tasks/UsbDataHandler.c @@ -60,6 +60,7 @@ union { cls_light_GlobalTheme msg_cls_light_GlobalTheme; cls_light_ThemeSettings msg_cls_light_ThemeSettings; cls_light_SaveThemeSettings msg_cls_light_SaveThemeSettings; + cls_light_RequestThemeSetting msg_cls_light_RequestThemeSetting; } mem_msg_decode; @@ -117,6 +118,7 @@ message_handler_t message_handlers[] = { MESSAGE_HANDLER(cls_usb_PackageType_LIGHT_GLOBAL_THEME, cls_light_GlobalTheme), MESSAGE_HANDLER(cls_usb_PackageType_LIGHT_SETTING_THEME, cls_light_ThemeSettings), MESSAGE_HANDLER(cls_usb_PackageType_LIGHT_SETTING_THEME_SAVE, cls_light_SaveThemeSettings), + MESSAGE_HANDLER(cls_usb_PackageType_LIGHT_REQUEST_THEME, cls_light_RequestThemeSetting), }; diff --git a/Application/Tasks/UsbDataHandler.h b/Application/Tasks/UsbDataHandler.h index fa3af2a..d79fffc 100644 --- a/Application/Tasks/UsbDataHandler.h +++ b/Application/Tasks/UsbDataHandler.h @@ -134,6 +134,7 @@ void DataClbk_cls_light_GlobalBrightness(void* msg, uint32_t length); void DataClbk_cls_light_GlobalTheme(void* msg, uint32_t length); void DataClbk_cls_light_ThemeSettings(void* msg, uint32_t length); void DataClbk_cls_light_SaveThemeSettings(void* msg, uint32_t length); +void DataClbk_cls_light_RequestThemeSetting(void* msg, uint32_t length); #include "usb.pb.h" void USBDataResonse(void * msg, const pb_msgdesc_t *fields, cls_usb_PackageType typeid); diff --git a/proto b/proto index eca57b1..30e7488 160000 --- a/proto +++ b/proto @@ -1 +1 @@ -Subproject commit eca57b1315e6b9a6d561e41bf6dc7ef604b79501 +Subproject commit 30e74889a2578b8c30c6fe4cd2aee3e2fb565a9a diff --git a/tools/test_get_theme.py b/tools/test_get_theme.py new file mode 100644 index 0000000..580e3ff --- /dev/null +++ b/tools/test_get_theme.py @@ -0,0 +1,47 @@ +import serial +import struct +from google.protobuf.message import DecodeError +from serial.tools import list_ports + +from light_pb2 import RequestThemeSetting, Theme, ThemeSettings +from usb_pb2 import PackageType +from vcp_driver import * + +if __name__ == "__main__": + ser = setup_connection() + + request = RequestThemeSetting() + request.deviceId = 0 + request.theme = 1 + print("send request") + print(request) + + request_data = request.SerializeToString() + send_package(PackageType.LIGHT_REQUEST_THEME, request_data, ser) + + + print("wait for response") + # Read the header from the serial port + response_header = ser.read(5) # assuming the header is 5 bytes long + + # Unpack the header to get the length and type + length, typeid, check = struct.unpack('