Compare commits

...

2 Commits

Author SHA1 Message Date
d11e9edf36 升级功能优化 2024-01-05 17:04:46 +08:00
4ffcff9f1b 添加‘投影激光设备’的控制 2023-12-29 11:50:36 +08:00
5 changed files with 54 additions and 13 deletions

View File

@ -23,6 +23,7 @@ static uint16_t upgrade_write_index = 0;
/* 升级包数据接收长度 */ /* 升级包数据接收长度 */
static uint8_t upgrade_rx_buffer[1024] = {0}; static uint8_t upgrade_rx_buffer[1024] = {0};
static void api_write_upgrade_buffer(void);
static void api_notify_upgrade(uint8_t *buffer, uint16_t length); static void api_notify_upgrade(uint8_t *buffer, uint16_t length);
static void api_notify_get_fhss_channel(void); static void api_notify_get_fhss_channel(void);
static void api_package(uint8_t type, uint8_t command, uint8_t *data, uint8_t length); static void api_package(uint8_t type, uint8_t command, uint8_t *data, uint8_t length);
@ -199,6 +200,16 @@ void api_upload_data_forwarding(uint8_t type, uint8_t value)
__weak void api_notify_data_forwarding(uint8_t type, uint8_t value) { } __weak void api_notify_data_forwarding(uint8_t type, uint8_t value) { }
static void api_write_upgrade_buffer(void)
{
/* 写入升级包数据 */
fmc_write_bytes(FMC_ADDRESS_UPGRADE_BUFFER + upgrade_write_index * FMC_PAGE_SIZE, upgrade_rx_buffer, upgrade_rx_index / 4 + (upgrade_rx_index % 4 ? 1 : 0));
upgrade_write_index++;
upgrade_rx_length += upgrade_rx_index;
upgrade_rx_index = 0;
}
/** /**
* @brief * @brief
*/ */
@ -226,23 +237,21 @@ static void api_notify_upgrade(uint8_t *buffer, uint16_t length)
upgrade_pack_index = 0; upgrade_pack_index = 0;
} }
for (uint16_t i = 0; i < pack_length; i++)
upgrade_rx_buffer[upgrade_rx_index++] = buffer[i + 9];
if (index == upgrade_pack_index + 1) if (index == upgrade_pack_index + 1)
{ {
/* 更改ARM接收到的升级包序号 */ /* 更改ARM接收到的升级包序号 */
upgrade_pack_index = index; upgrade_pack_index = index;
if (upgrade_rx_index >= 1024 || upgrade_pack_index == upgrade_pack_count) for (uint16_t i = 0; i < pack_length; i++)
{ {
/* 写入升级包数据 */ upgrade_rx_buffer[upgrade_rx_index++] = buffer[i + 9];
fmc_write_bytes(FMC_ADDRESS_UPGRADE_BUFFER + upgrade_write_index * FMC_PAGE_SIZE, upgrade_rx_buffer, upgrade_rx_index / 4 + (upgrade_rx_index % 4 ? 1 : 0));
upgrade_write_index++; if (upgrade_rx_index >= 1024)
upgrade_rx_length += upgrade_rx_index; api_write_upgrade_buffer();
upgrade_rx_index = 0;
} }
if (upgrade_pack_index == upgrade_pack_count)
api_write_upgrade_buffer();
/* 通知上位机当前升级包成功接收 */ /* 通知上位机当前升级包成功接收 */
api_response_success(API_COMMAND_UPGRADE); api_response_success(API_COMMAND_UPGRADE);

View File

@ -22,7 +22,7 @@
#define API_FRAME_RESPONSE (0x01) /* 响应帧 */ #define API_FRAME_RESPONSE (0x01) /* 响应帧 */
#define API_FRAME_NOTIFICATION (0x02) /* 通知帧 */ #define API_FRAME_NOTIFICATION (0x02) /* 通知帧 */
#define SOFTWARE_VERSION ("V1.26") #define SOFTWARE_VERSION ("V1.28")
#define HARDWARE_VERSION ("V1.01") #define HARDWARE_VERSION ("V1.01")
extern uint8_t api_upgrade_mode; extern uint8_t api_upgrade_mode;

View File

@ -52,6 +52,8 @@ static uint8_t diaodu_upload_status = 0;
static void strobe_light_reset(void); static void strobe_light_reset(void);
/* 频闪灯闪烁*/ /* 频闪灯闪烁*/
static void strobe_light_toggle(uint8_t count); static void strobe_light_toggle(uint8_t count);
/* 投影灯控制 */
static void lp_light_write(uint8_t status);
/* 设置音量级别 */ /* 设置音量级别 */
static void set_volume_level(uint8_t level); static void set_volume_level(uint8_t level);
@ -200,6 +202,9 @@ void app_init(void)
static void strobe_light_reset(void) static void strobe_light_reset(void)
{ {
gpio_bit_write(LED_STROBE_PERIPH, LED_STROBE_PIN, RESET); gpio_bit_write(LED_STROBE_PERIPH, LED_STROBE_PIN, RESET);
/* 恢复投影灯状态 */
lp_light_write(0);
} }
static void strobe_light_toggle(uint8_t count) static void strobe_light_toggle(uint8_t count)
@ -213,6 +218,14 @@ static void strobe_light_toggle(uint8_t count)
} }
} }
static void lp_light_write(uint8_t status)
{
/* 激光投影设备 */
gpio_bit_write(LP_FRONT_DOOR_PERIPH, LP_FRONT_DOOR_PIN, (bit_status)status);
gpio_bit_write(LP_BACK_DOOR_PERIPH, LP_BACK_DOOR_PIN, (bit_status)status);
gpio_bit_write(LP_CAR_REAR_PERIPH, LP_CAR_REAR_PIN, (bit_status)status);
}
static void led_parsing_task(uint8_t uuid) static void led_parsing_task(uint8_t uuid)
{ {
/* 超过 2s 未检测到CAN数据变化熄灭发送指示灯 */ /* 超过 2s 未检测到CAN数据变化熄灭发送指示灯 */
@ -407,6 +420,9 @@ static void strobe_light_operate_task(uint8_t uuid)
return; return;
} }
lp_light_write(1);
strobe_light_flashing_count += 1; strobe_light_flashing_count += 1;
if (strobe_light_flashing_mode == 0) if (strobe_light_flashing_mode == 0)
@ -425,8 +441,6 @@ static void strobe_light_operate_task(uint8_t uuid)
/* 频闪 */ /* 频闪 */
gpio_bit_write(LED_STROBE_PERIPH, LED_STROBE_PIN, !(strobe_light_flashing_count % 2)); gpio_bit_write(LED_STROBE_PERIPH, LED_STROBE_PIN, !(strobe_light_flashing_count % 2));
// gpio_bit_toggle(LED_STROBE_PERIPH, LED_STROBE_PIN);
if (strobe_light_flashing_count >= 4) if (strobe_light_flashing_count >= 4)
{ {
strobe_light_flashing_count = 0; strobe_light_flashing_count = 0;

View File

@ -66,7 +66,13 @@ static void bsp_initialization(void)
gpio_config(V58_STATUS_PERIPH, V58_STATUS_PIN, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, nullptr); gpio_config(V58_STATUS_PERIPH, V58_STATUS_PIN, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, nullptr);
iic_config(M62429_SDA_PERIPH, M62429_SDA_PIN, M62429_SCL_PERIPH, M62429_SCL_PIN); iic_config(M62429_SDA_PERIPH, M62429_SDA_PIN, M62429_SCL_PERIPH, M62429_SCL_PIN);
/* 激光投影设备 控制引脚 初始化 */
gpio_config(LP_FRONT_DOOR_PERIPH, LP_FRONT_DOOR_PIN, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, RESET);
gpio_config(LP_BACK_DOOR_PERIPH, LP_BACK_DOOR_PIN, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, RESET);
gpio_config(LP_CAR_REAR_PERIPH, LP_CAR_REAR_PIN, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, RESET);
/* CAN指示灯 控制引脚 初始化 */ /* CAN指示灯 控制引脚 初始化 */
gpio_config(LED_CAN_PERIPH, LED_CAN_PIN, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, RESET); gpio_config(LED_CAN_PERIPH, LED_CAN_PIN, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, RESET);

View File

@ -104,6 +104,18 @@
#define M62429_SDA_PERIPH GPIOB #define M62429_SDA_PERIPH GPIOB
#define M62429_SDA_PIN GPIO_PIN_11 #define M62429_SDA_PIN GPIO_PIN_11
/* 激光投影设备(前门) */
#define LP_FRONT_DOOR_PERIPH GPIOC
#define LP_FRONT_DOOR_PIN GPIO_PIN_13
/* 激光投影设备(后门) */
#define LP_BACK_DOOR_PERIPH GPIOC
#define LP_BACK_DOOR_PIN GPIO_PIN_14
/* 激光投影设备(车尾) */
#define LP_CAR_REAR_PERIPH GPIOC
#define LP_CAR_REAR_PIN GPIO_PIN_15
#define LED_CAN_PERIPH GPIOA #define LED_CAN_PERIPH GPIOA
#define LED_CAN_PIN GPIO_PIN_5 #define LED_CAN_PIN GPIO_PIN_5