add lightTask
This commit is contained in:
@@ -10,13 +10,14 @@ target_sources(${PROJECT_NAME}
|
||||
${CMAKE_CURRENT_LIST_DIR}/CanDataTask.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/FirmwareHandler.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/FirmwareUpdate.c
|
||||
${CMAKE_CURRENT_LIST_DIR}/LightTask.c
|
||||
INTERFACE
|
||||
${CMAKE_CURRENT_LIST_DIR}/UsbDataHandler.h
|
||||
${CMAKE_CURRENT_LIST_DIR}/CanDataTask.h
|
||||
${CMAKE_CURRENT_LIST_DIR}/FirmwareUpdate.h
|
||||
|
||||
${CMAKE_CURRENT_LIST_DIR}/LightTask.h
|
||||
)
|
||||
|
||||
target_include_directories(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_LIST_DIR})
|
||||
target_link_libraries(${PROJECT_NAME} PUBLIC PROTOS CLS)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE CLS_BSP)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE CLS_BSP BSP)
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "UsbDataHandler.h"
|
||||
#include "crc.h"
|
||||
#include "FirmwareUpdate.h"
|
||||
#include "stdbool.h"
|
||||
|
||||
// static memory only for decoding messages
|
||||
static FirmwareStart msg_FirmwareStart;
|
||||
@@ -25,19 +26,6 @@ static FRESULT fresult_open =0;
|
||||
static uint32_t fwStartTime = 0;
|
||||
static uint32_t fwPackageCounter =0;
|
||||
|
||||
#define ASSERT_SIZE(x) \
|
||||
{ \
|
||||
if (!(x)) \
|
||||
Error_Handler(); \
|
||||
}
|
||||
|
||||
#define DATA_CLBK_SETUP(name) \
|
||||
{ \
|
||||
ASSERT_SIZE(length == sizeof(name)); \
|
||||
memcpy(&msg_##name, msg, sizeof(name)); \
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief This function builds and sends a FirmwarePackageAck message over USB.
|
||||
*
|
||||
|
||||
97
Application/Tasks/LightTask.c
Normal file
97
Application/Tasks/LightTask.c
Normal file
@@ -0,0 +1,97 @@
|
||||
#include "UsbDataHandler.h"
|
||||
#include "light.pb.h"
|
||||
#include "FreeRTOS.h"
|
||||
#include "cmsis_os2.h"
|
||||
#include "CLS.h"
|
||||
#include "CLS_BSP.h"
|
||||
#include "CLSAddress.h"
|
||||
#include "BSP_EE24.h"
|
||||
#include "LightTask.h"
|
||||
|
||||
// Memory for the task
|
||||
StaticTask_t LightTask_cb;
|
||||
uint32_t LightTask_stk[128];
|
||||
// Attributes for the task
|
||||
osThreadId_t LightTask_id;
|
||||
const osThreadAttr_t LightTask_attr = {
|
||||
.name = "LightTask",
|
||||
.attr_bits = 0U,
|
||||
.cb_mem = &LightTask_cb,
|
||||
.cb_size = sizeof(LightTask_cb),
|
||||
.stack_mem = LightTask_stk,
|
||||
.stack_size = sizeof(LightTask_stk),
|
||||
.priority = osPriorityNormal,
|
||||
};
|
||||
|
||||
static LightGlobalBrightness msg_LightGlobalBrightness;
|
||||
static LightGlobalTheme msg_LightGlobalTheme;
|
||||
static LightThemeSettings msg_LightThemeSettings;
|
||||
|
||||
static volatile struct LightSettings_s {
|
||||
volatile uint8_t brightness;
|
||||
volatile uint8_t theme;
|
||||
} lightSettings;
|
||||
|
||||
// these are used to save these settings some tome after they change
|
||||
static const uint32_t settingSaveTimeout = 10*1000;
|
||||
static volatile uint32_t settingChangeTime = 0;
|
||||
|
||||
void LightTask_func(void *argument);
|
||||
|
||||
void LightTask_start() {
|
||||
// Task functionality here
|
||||
LightTask_id = osThreadNew(LightTask_func, NULL, &LightTask_attr);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void LightTask_func(void *argument) {
|
||||
osDelay(10);
|
||||
|
||||
BSP_EE24_PartRead(BSP_EE24_PART_GLOBAL_LIGHT, (uint8_t*) &lightSettings, sizeof(lightSettings));
|
||||
uint16_t msg_global_light = GENERATE_CLS_ADDRESS(CLS_CODE_MESSAGE, GLOBAL_CAST_CLS_ADDRESS, CLS_CH_MSG_LIGHT);
|
||||
CLS_BSP_TxHeaderType can_header = CREATE_BSP_CAN_HEADER(msg_global_light, CLS_BSP_DLC_BYTES_2);
|
||||
|
||||
uint32_t tick = osKernelGetTickCount();
|
||||
while (1)
|
||||
{
|
||||
tick += 50;
|
||||
osDelayUntil(tick);
|
||||
CLS_BSP_CAN_AddMessageToSend(&can_header,(uint8_t*)&lightSettings);
|
||||
|
||||
if( settingChangeTime !=0 && tick > settingChangeTime + settingSaveTimeout) {
|
||||
BSP_EE24_PartWrite(BSP_EE24_PART_GLOBAL_LIGHT, (uint8_t*) &lightSettings, sizeof(lightSettings));
|
||||
settingChangeTime = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DataClbk_LightGlobalBrightness(void* msg, uint32_t length) {
|
||||
DATA_CLBK_SETUP(LightGlobalBrightness);
|
||||
lightSettings.brightness = msg_LightGlobalBrightness.brightness;
|
||||
settingChangeTime = osKernelGetTickCount();
|
||||
}
|
||||
|
||||
void DataClbk_LightGlobalTheme(void* msg, uint32_t length) {
|
||||
DATA_CLBK_SETUP(LightGlobalTheme);
|
||||
lightSettings.theme = msg_LightGlobalTheme.theme;
|
||||
settingChangeTime = osKernelGetTickCount();
|
||||
}
|
||||
|
||||
void DataClbk_LightThemeSettings(void* msg, uint32_t length) {
|
||||
DATA_CLBK_SETUP(LightThemeSettings);
|
||||
uint8_t device = msg_LightThemeSettings.deviceId & 0x1F;
|
||||
uint8_t theme = msg_LightGlobalTheme.theme & 0x3;
|
||||
|
||||
uint16_t msg_light_setting = GENERATE_CLS_ADDRESS(CLS_CODE_CONFIG, device, theme);
|
||||
CLS_BSP_TxHeaderType can_header = CREATE_BSP_CAN_HEADER(msg_light_setting, CLS_BSP_DLC_BYTES_8);
|
||||
|
||||
RGB_Theme_t data = {0};
|
||||
data.animation = msg_LightThemeSettings.animation;
|
||||
data.max_brighness = msg_LightThemeSettings.brightness;
|
||||
data.color.r = (msg_LightThemeSettings.rgb) & 0xFF;
|
||||
data.color.g = (msg_LightThemeSettings.rgb>>8) & 0xFF;
|
||||
data.color.b = (msg_LightThemeSettings.rgb>>16) & 0xFF;
|
||||
|
||||
CLS_BSP_CAN_AddMessageToSend(&can_header, (uint8_t*)&data);
|
||||
}
|
||||
46
Application/Tasks/LightTask.h
Normal file
46
Application/Tasks/LightTask.h
Normal file
@@ -0,0 +1,46 @@
|
||||
#pragma once
|
||||
|
||||
#include "stdint.h"
|
||||
|
||||
/**
|
||||
* @struct RGB
|
||||
* @brief Structure to represent RGB color model
|
||||
* @var RGB::r
|
||||
* Member 'r' represents the Red color component
|
||||
* @var RGB::g
|
||||
* Member 'g' represents the Green color component
|
||||
* @var RGB::b
|
||||
* Member 'b' represents the Blue color component
|
||||
*/
|
||||
typedef struct RGB
|
||||
{
|
||||
uint8_t r;
|
||||
uint8_t g;
|
||||
uint8_t b;
|
||||
} RGB_t;
|
||||
|
||||
/**
|
||||
* @struct RGB_Theme
|
||||
* @brief Structure to represent theme of RGB
|
||||
* @var RGB_Theme::max_brighness
|
||||
* Member 'max_brighness' represents the Maximum brightness level
|
||||
* @var RGB_Theme::color
|
||||
* Member 'color' represents the RGB color
|
||||
* @var RGB_Theme::animation
|
||||
* Member 'animation' represents the Animation type
|
||||
* @var RGB_Theme::reseved
|
||||
* Member 'reseved' is Reserved for future use
|
||||
* @var RGB_Theme::reseved_16
|
||||
* Member 'reseved_16' is Reserved for future use
|
||||
*/
|
||||
typedef struct RGB_Theme
|
||||
{
|
||||
uint8_t max_brighness;
|
||||
RGB_t color;
|
||||
uint8_t animation;
|
||||
uint8_t reseved;
|
||||
uint16_t reseved_16;
|
||||
} RGB_Theme_t;
|
||||
|
||||
|
||||
void LightTask_start();
|
||||
@@ -2,10 +2,12 @@
|
||||
#include "cmsis_os2.h"
|
||||
#include "FreeRTOS.h"
|
||||
#include "firmware.pb.h"
|
||||
#include "light.pb.h"
|
||||
#include "usb_device.h"
|
||||
#include <pb_decode.h>
|
||||
#include "cls_device.pb.h"
|
||||
#include "usb.pb.h"
|
||||
#include "stdbool.h"
|
||||
|
||||
/* Declare the thread function */
|
||||
#define NUM_BUFFERS 4 // Define the number of buffers you want to use
|
||||
@@ -53,6 +55,9 @@ union {
|
||||
FirmwareDone msg_FirmwareDone;
|
||||
RequestDeviceList msg_RequestDeviceList;
|
||||
ResponseDeviceList msg_ResponseDeviceList;
|
||||
LightGlobalBrightness msg_LightGlobalBrightness;
|
||||
LightGlobalTheme msg_LightGlobalTheme;
|
||||
LightThemeSettings msg_LightThemeSettings;
|
||||
} mem_msg_decode;
|
||||
|
||||
|
||||
@@ -104,6 +109,9 @@ message_handler_t message_handlers[] = {
|
||||
MESSAGE_HANDLER(UsbPackageType_FIRMWAREPACKAGEACK, FirmwarePackageAck),
|
||||
MESSAGE_HANDLER(UsbPackageType_REQUEST_DEVICE_LIST, RequestDeviceList),
|
||||
MESSAGE_HANDLER(UsbPackageType_RESPONSE_DEVICE_LIST, ResponseDeviceList),
|
||||
MESSAGE_HANDLER(UsbPackageType_LIGHT_GLOBAL_BRIGHT, LightGlobalBrightness),
|
||||
MESSAGE_HANDLER(UsbPackageType_LIGHT_GLOBAL_THEME, LightGlobalTheme),
|
||||
MESSAGE_HANDLER(UsbPackageType_LIGHT_SETTING_THEME, LightThemeSettings),
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,22 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#define ASSERT_SIZE(x) \
|
||||
{ \
|
||||
if (!(x)) \
|
||||
Error_Handler(); \
|
||||
}
|
||||
|
||||
|
||||
#define DATA_CLBK_SETUP(name) \
|
||||
{ \
|
||||
ASSERT_SIZE(length == sizeof(name)); \
|
||||
memcpy(&msg_##name, msg, sizeof(name)); \
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @struct UsbDataPacketHead
|
||||
* @brief This structure represents the header of a USB data packet.
|
||||
@@ -113,6 +129,9 @@ void DataClbk_FirmwarePackageAck(void* msg, uint32_t length);
|
||||
void DataClbk_FirmwareDone(void* msg, uint32_t length);
|
||||
void DataClbk_ResponseDeviceList(void* msg, uint32_t length);
|
||||
void DataClbk_RequestDeviceList(void* msg, uint32_t length);
|
||||
void DataClbk_LightGlobalBrightness(void* msg, uint32_t length);
|
||||
void DataClbk_LightGlobalTheme(void* msg, uint32_t length);
|
||||
void DataClbk_LightThemeSettings(void* msg, uint32_t length);
|
||||
|
||||
|
||||
#include "usb.pb.h"
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "BSP_EE24.h"
|
||||
#include "BSP_INA.h"
|
||||
#include "BSP_POWER.h"
|
||||
#include "LightTask.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
@@ -98,7 +99,7 @@ return __HAL_TIM_GetCounter(&htim2);
|
||||
*/
|
||||
void MX_FREERTOS_Init(void) {
|
||||
/* USER CODE BEGIN Init */
|
||||
|
||||
BSP_POWER_Init();
|
||||
/* USER CODE END Init */
|
||||
|
||||
/* USER CODE BEGIN RTOS_MUTEX */
|
||||
@@ -128,6 +129,8 @@ void MX_FREERTOS_Init(void) {
|
||||
CanDataTask_start();
|
||||
ULOG_INFO("Setup CLS");
|
||||
CLS_Init();
|
||||
ULOG_INFO("Setup LightTask");
|
||||
LightTask_start();
|
||||
/* USER CODE END RTOS_THREADS */
|
||||
|
||||
/* USER CODE BEGIN RTOS_EVENTS */
|
||||
@@ -151,7 +154,8 @@ void StartDefaultTask(void *argument)
|
||||
/* init code for USB_DEVICE */
|
||||
MX_USB_DEVICE_Init();
|
||||
/* USER CODE BEGIN StartDefaultTask */
|
||||
|
||||
BSP_EE24_Init();
|
||||
BSP_INA_Init();
|
||||
|
||||
retSD = f_mount(&SDFatFS,SDPath,0);
|
||||
retSD = f_open(&SDFile, "counter.bin", FA_READ);
|
||||
@@ -173,17 +177,6 @@ void StartDefaultTask(void *argument)
|
||||
ULOG_INFO(output);
|
||||
}
|
||||
|
||||
uint16_t msg_global_light = GENERATE_CLS_ADDRESS(CLS_CODE_MESSAGE, GLOBAL_CAST_CLS_ADDRESS, CLS_CH_MSG_LIGHT);
|
||||
CLS_BSP_TxHeaderType can_header = CREATE_BSP_CAN_HEADER(msg_global_light, CLS_BSP_DLC_BYTES_2);
|
||||
|
||||
uint8_t light_data[2] = {0};
|
||||
|
||||
BSP_EE24_Init();
|
||||
|
||||
BSP_INA_Init();
|
||||
|
||||
BSP_POWER_Init();
|
||||
|
||||
char INA_LOG[72];
|
||||
|
||||
/* Infinite loop */
|
||||
@@ -197,18 +190,9 @@ void StartDefaultTask(void *argument)
|
||||
float power_W = (float)power/1000.0;
|
||||
float voltage_V =(float) voltage /1000.0;
|
||||
|
||||
|
||||
|
||||
snprintf(INA_LOG, sizeof(INA_LOG),"Voltage[mV] %.2f Current[mA] %d P[W]: %.2f", voltage_V, current, power_W);
|
||||
ULOG_INFO(INA_LOG);
|
||||
|
||||
light_data[0]++;
|
||||
light_data[1] = (light_data[0]/10)%4;
|
||||
|
||||
CLS_BSP_CAN_AddMessageToSend(&can_header,light_data);
|
||||
ULOG_INFO("UPDATE RGB LIGHT TEST");
|
||||
|
||||
|
||||
}
|
||||
/* USER CODE END StartDefaultTask */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user