added passthouth off headlight settings messages

This commit is contained in:
2024-05-29 03:28:16 +02:00
parent 8d02489b16
commit 13002071d7
9 changed files with 125 additions and 17 deletions

View File

@@ -12,6 +12,8 @@ target_sources(${PROJECT_NAME}
${CMAKE_CURRENT_LIST_DIR}/FirmwareUpdate.c
${CMAKE_CURRENT_LIST_DIR}/LightTask.c
${CMAKE_CURRENT_LIST_DIR}/LightState.c
${CMAKE_CURRENT_LIST_DIR}/Headlight_can.c
INTERFACE
${CMAKE_CURRENT_LIST_DIR}/UsbDataHandler.h
${CMAKE_CURRENT_LIST_DIR}/CanDataTask.h

View File

@@ -0,0 +1,84 @@
#include "UsbDataHandler.h"
#include "headlight.pb.h"
#include "CanDataHandler.h"
#include "stdint.h"
#include "cmsis_os2.h"
#include "CLS.h"
#include "CLS_BSP.h"
#include "CLSAddress.h"
cls_headlight_RequestSettings msg_cls_headlight_RequestSettings;
cls_headlight_Settings msg_cls_headlight_Settings;
cls_headlight_SaveSettings msg_cls_headlight_SaveSettings;
typedef struct Headlight_Control_Setting {
float alpha;
uint16_t on_threshold;
uint16_t off_threshold;
} Headlight_Control_Setting_t;
void DataClbk_cls_headlight_Settings(void* msg, uint32_t length) {
DATA_CLBK_SETUP(cls_headlight_Settings);
uint8_t device = msg_cls_headlight_Settings.deviceId;
uint16_t msg_light_setting = GENERATE_CLS_ADDRESS(CLS_CODE_CONFIG, device, 0);
CLS_BSP_TxHeaderType can_header = CREATE_BSP_CAN_HEADER(msg_light_setting, CLS_BSP_DLC_BYTES_8);
Headlight_Control_Setting_t data = {0};
data.alpha = msg_cls_headlight_Settings.alpha;
data.on_threshold = msg_cls_headlight_Settings.on_threshold;
data.off_threshold = msg_cls_headlight_Settings.off_threshold;
CLS_BSP_CAN_AddMessageToSend(&can_header, (uint8_t*)&data);
}
void DataClbk_cls_headlight_SaveSettings(void* msg, uint32_t length) {
DATA_CLBK_SETUP(cls_headlight_SaveSettings);
uint8_t device = msg_cls_headlight_SaveSettings.deviceId;
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 Headlight_Control_Setting_t response_theme = {0};
static cls_headlight_Settings headligh_settings = {0};
void CanData_responseHeadlightSetting(CanDataId canid, uint8_t* data, uint8_t len) {
if(len == 8) {
memcpy(&response_theme, data, 8);
headligh_settings.alpha = response_theme.alpha;
headligh_settings.on_threshold = response_theme.on_threshold;
headligh_settings.off_threshold = response_theme.off_threshold;
headligh_settings.deviceId = (canid >> 3) & 0x1F;
USBDataResonse(&headligh_settings,cls_headlight_Settings_fields, cls_usb_PackageType_HEADLIGHT_SETTINGS);
}
CanData_removeEvent(canid);
}
void DataClbk_cls_headlight_RequestSettings(void* msg, uint32_t length) {
DATA_CLBK_SETUP(cls_headlight_RequestSettings);
uint8_t device = msg_cls_headlight_RequestSettings.deviceId;
uint8_t data = 0;
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_responseHeadlightSetting);
CLS_BSP_CAN_AddMessageToSend(&can_header, (uint8_t*)&data);
}

View File

@@ -3,6 +3,7 @@
#include "FreeRTOS.h"
#include "firmware.pb.h"
#include "light.pb.h"
#include "headlight.pb.h"
#include "usb_device.h"
#include <pb_decode.h>
#include "cls_device.pb.h"
@@ -62,7 +63,9 @@ union {
cls_light_SaveThemeSettings msg_cls_light_SaveThemeSettings;
cls_light_RequestThemeSetting msg_cls_light_RequestThemeSetting;
cls_usb_JumpToBootloader msg_cls_usb_JumpToBootloader;
cls_headlight_Settings msg_cls_headlight_Settings;
cls_headlight_SaveSettings msg_cls_headlight_SaveSettings;
cls_headlight_RequestSettings msg_cls_headlight_RequestSettings;
} mem_msg_decode;
@@ -121,6 +124,9 @@ message_handler_t message_handlers[] = {
MESSAGE_HANDLER(cls_usb_PackageType_LIGHT_SETTING_THEME_SAVE, cls_light_SaveThemeSettings),
MESSAGE_HANDLER(cls_usb_PackageType_LIGHT_REQUEST_THEME, cls_light_RequestThemeSetting),
MESSAGE_HANDLER(cls_usb_PackageType_JUMP_TO_BOOTLOADER, cls_usb_JumpToBootloader),
MESSAGE_HANDLER(cls_usb_PackageType_HEADLIGHT_SETTINGS, cls_headlight_Settings),
MESSAGE_HANDLER(cls_usb_PackageType_HEADLIGHT_SAVE_SETTINGS, cls_headlight_SaveSettings),
MESSAGE_HANDLER(cls_usb_PackageType_HEADLIGHT_REQUEST_SETTINGS, cls_headlight_RequestSettings),
};

View File

@@ -136,6 +136,9 @@ 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);
void DataClbk_cls_headlight_Settings(void* msg, uint32_t length);
void DataClbk_cls_headlight_SaveSettings(void* msg, uint32_t length);
void DataClbk_cls_headlight_RequestSettings(void* msg, uint32_t length);
#include "usb.pb.h"
void USBDataResonse(void * msg, const pb_msgdesc_t *fields, cls_usb_PackageType typeid);

View File

@@ -124,6 +124,7 @@ nanopb_generate_cpp(PROTO_SRCS PROTO_HDRS RELPATH proto
proto/cls_device.proto
proto/light.proto
proto/usb.proto
proto/headlight.proto
)
add_library(PROTOS ${PROTO_SRCS} ${PROTO_HDRS})
target_include_directories(PROTOS PUBLIC ${NANOPB_INCLUDE_DIRS} ${PROJECT_BINARY_DIR})

2
proto

Submodule proto updated: 4ff29f9d5b...06dd6f873d

View File

@@ -6,6 +6,7 @@ ${PROTO_SRC_DIR}/firmware.proto
${PROTO_SRC_DIR}/light.proto
${PROTO_SRC_DIR}/usb.proto
${PROTO_SRC_DIR}/cls_device.proto
${PROTO_SRC_DIR}/headlight.proto
)
# Specify where you want to generate the python code

View File

@@ -4,25 +4,26 @@ from google.protobuf.message import DecodeError
from serial.tools import list_ports
from light_pb2 import GlobalBrightness, Theme, GlobalTheme, ThemeSettings
from headlight_pb2 import Settings, RequestSettings
from usb_pb2 import PackageType
from vcp_driver import *
if __name__ == "__main__":
ser = setup_connection()
# Create a message
request = GlobalBrightness()
request.brightness = 100
#request = GlobalBrightness()
#request.brightness = 100
# Serialize the request to a bytearray
request_data = request.SerializeToString()
#request_data = request.SerializeToString()
# Send the request
send_package(PackageType.LIGHT_GLOBAL_BRIGHT, request_data, ser)
#send_package(PackageType.LIGHT_GLOBAL_BRIGHT, request_data, ser)
request = GlobalTheme()
request.theme = 1
request_data = request.SerializeToString()
send_package(PackageType.LIGHT_GLOBAL_THEME, request_data, ser)
#request = GlobalTheme()
#request.theme = 1
#request_data = request.SerializeToString()
#send_package(PackageType.LIGHT_GLOBAL_THEME, request_data, ser)
# request = ThemeSettings()
@@ -33,3 +34,14 @@ if __name__ == "__main__":
# request.animation = 2
# request_data = request.SerializeToString()
# send_package(PackageType.LIGHT_SETTING_THEME, request_data, ser)
request = Settings()
request.deviceId = 1
request.alpha = 0.001
request.on_threshold = 600
request.off_threshold = 400
request.on_time = 100
request.input_invert = False
request_data = request.SerializeToString()
send_package(PackageType.HEADLIGHT_SETTINGS, request_data, ser)

View File

@@ -3,21 +3,20 @@ import struct
from google.protobuf.message import DecodeError
from serial.tools import list_ports
from light_pb2 import RequestThemeSetting, Theme, ThemeSettings
from headlight_pb2 import Settings, RequestSettings
from usb_pb2 import PackageType
from vcp_driver import *
if __name__ == "__main__":
ser = setup_connection()
request = RequestThemeSetting()
request.deviceId = 0
request.theme = 1
request = RequestSettings()
request.deviceId = 1
print("send request")
print(request)
request_data = request.SerializeToString()
send_package(PackageType.LIGHT_REQUEST_THEME, request_data, ser)
send_package(PackageType.HEADLIGHT_REQUEST_SETTINGS, request_data, ser)
print("wait for response")
@@ -30,13 +29,13 @@ if __name__ == "__main__":
print(length, typeid, check)
# Check if the type is RESPONSE_DEVICE_LIST
if typeid == PackageType.LIGHT_SETTING_THEME:
if typeid == PackageType.HEADLIGHT_SETTINGS:
# Read the response data from the serial port
response_data = ser.read(length)
# Try to parse the data as a ResponseDeviceList message
try:
response = ThemeSettings.FromString(response_data)
response = Settings.FromString(response_data)
except DecodeError:
# If we get a DecodeError, it means the data we read is not a valid