diff --git a/CLS.c b/CLS.c index 01dff2b..5219658 100644 --- a/CLS.c +++ b/CLS.c @@ -2,18 +2,33 @@ #include "CLS.h" #include "CLSAddress.h" #include "cmsis_os2.h" +#include "version_info.h" osTimerId_t CLS_HeatbeatTimerId; // Timer ID -static uint8_t cls_hartbeat_counter = 0; + +static CLS_HeatbeatData_t cls_heatbeat_data = { + .firmware_version.major = 0, + .firmware_version.minor = 0, + .firmware_version.patch = 0, + .firmware_version.count = 0, + .id = 0, + .type = CLS_TYPE_LIGHT, + .counter =0, + .position.p0 = 0, + .position.p1 = 0, +}; + +_Static_assert(sizeof(cls_heatbeat_data) == 8, "CLS_HeatbeatData_t is not 8 bytes"); void CLS_Heatbeat(void *argument) { - // Code to be executed every 500ms - CLS_BSP_TxHeaderType cls_hartbeat_header = CREATE_BSP_CAN_HEADER(GENERATE_CLS_ADDRESS(CLS_CODE_STATUS,gCLS_DEVICE_ADDRESS,CLS_CH_STA_HEATBEAT), CLS_BSP_DLC_BYTES_1); - cls_hartbeat_counter++; - CLS_BSP_CAN_AddMessageToSend(&cls_hartbeat_header, &cls_hartbeat_counter); -} + // Code to be executed every CLS_HEARTBEAT_INTERVAL_MS + CLS_BSP_TxHeaderType cls_hartbeat_header = CREATE_BSP_CAN_HEADER(GENERATE_CLS_ADDRESS(CLS_CODE_STATUS,gCLS_DEVICE_ADDRESS,CLS_CH_STA_HEATBEAT), CLS_BSP_DLC_BYTES_8); + cls_heatbeat_data.counter++; + CLS_BSP_CAN_AddMessageToSend(&cls_hartbeat_header, (uint8_t*)&cls_heatbeat_data); +} + void CLS_Init(void) { osTimerAttr_t timerAttr; @@ -22,10 +37,18 @@ void CLS_Init(void) { timerAttr.cb_mem = NULL; timerAttr.cb_size = 0U; + cls_heatbeat_data.firmware_version.major = VERSION_INFO.major; + cls_heatbeat_data.firmware_version.minor = VERSION_INFO.minor; + cls_heatbeat_data.firmware_version.patch = VERSION_INFO.patch; + cls_heatbeat_data.firmware_version.count = VERSION_INFO.count; + cls_heatbeat_data.id = gCLS_DEVICE_ADDRESS; + cls_heatbeat_data.type = CLS_BSP_GetDeviceType(); + cls_heatbeat_data.counter = 0; + cls_heatbeat_data.position = CLS_BSP_GetPosition(); CLS_HeatbeatTimerId = osTimerNew((osTimerFunc_t)CLS_Heatbeat, osTimerPeriodic, NULL, &timerAttr); if (CLS_HeatbeatTimerId != NULL) { // Timer object created - if (osTimerStart(CLS_HeatbeatTimerId, 500) == osOK) { // Timer started + if (osTimerStart(CLS_HeatbeatTimerId, CLS_HEARTBEAT_INTERVAL_MS) == osOK) { // Timer started // Timer started successfully } } diff --git a/CLS.h b/CLS.h index 719e317..6d7d38a 100644 --- a/CLS.h +++ b/CLS.h @@ -1,7 +1,60 @@ #pragma once +#define CLS_HEARTBEAT_INTERVAL_MS 1000 + + +typedef enum CLS_Type { + CLS_TYPE_LIGHT = 0x00, + CLS_TYPE_SWITCH = 0x01, + CLS_TYPE_SWITCHED_LIGHT = 0x02, + CLS_TYPE_SENSOR = 0x03, + CLS_TYPE_DISPLAY = 0x04, + CLS_TYPE_MASTER = 0x0F, +}CLS_Type_t; + +typedef enum CLS_Position_Type { + CLS_POSITION_TOP = 0x00, + CLS_POSITION_BOTTOM = 0x01, + CLS_POSITION_LEFT = 0x02, + CLS_POSITION_RIGHT = 0x03, + CLS_POSITION_CENTER = 0x04, + CLS_POSITION_FRONT = 0x05, + CLS_POSITION_REAR = 0x06, + CLS_POSITION_BACK = 0x07, + CLS_POSITION_FLOOR = 0x08, + CLS_POSITION_CEILING = 0x09, + CLS_POSITION_ENGINE = 0x0A, + CLS_POSITION_TRUNK = 0x0B, + // more TBD + CLS_POSITION_INSIDE = 0x0E, + CLS_POSITION_OUTSIDE = 0x0F, +} CLS_Position_Type_t; + +typedef struct CLS_Position { + CLS_Position_Type_t p0:4; + CLS_Position_Type_t p1:4; +} CLS_Position_t; + +#pragma pack(1) // 1 byte alignment +typedef struct CLS_HeatbeatData +{ + struct + { + uint8_t major; + uint8_t minor; + uint8_t patch; + uint8_t count; + }firmware_version; + + CLS_Type_t type; + uint8_t id; + uint8_t counter; + CLS_Position_t position; +} CLS_HeatbeatData_t; extern uint8_t gCLS_DEVICE_ADDRESS; + + void CLS_Init(void); diff --git a/CMakeLists.txt b/CMakeLists.txt index 5de766c..44e063c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,5 +14,5 @@ target_sources(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/CanDataHandler.h ) -target_include_directories(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_LIST_DIR}) -target_link_libraries(${PROJECT_NAME} PRIVATE CLS_BSP) \ No newline at end of file +target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR}) +target_link_libraries(${PROJECT_NAME} PRIVATE Revision CLS_BSP) \ No newline at end of file