diff --git a/MDK-ARM/LWIP.uvguix.29643 b/MDK-ARM/LWIP.uvguix.29643
index a2510f0..6cdf161 100644
--- a/MDK-ARM/LWIP.uvguix.29643
+++ b/MDK-ARM/LWIP.uvguix.29643
@@ -93,8 +93,8 @@
0
1
- -1
- -1
+ -32000
+ -32000
-1
@@ -1822,7 +1822,7 @@
Build
968
- 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000044C57495096000000000000000100044C574950000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
+ 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000044C57495096000000000000000100044C574950000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
583
@@ -3661,8 +3661,8 @@
..\usersrc\encoder.c
0
- 55
- 77
+ 1
+ 9
1
0
@@ -3742,7 +3742,7 @@
..\usersrc\udpclient.c
0
- 270
+ 271
293
1
diff --git a/usersrc/encoder.c b/usersrc/encoder.c
index e05e4e8..c12c2ee 100644
--- a/usersrc/encoder.c
+++ b/usersrc/encoder.c
@@ -3,6 +3,11 @@
#include
#include "zport.h"
+static encoder_light_state_t camera_encoder_state = STANDBY;
+static encoder_light_state_t driven_encoder_gear_state = STANDBY;
+static uint32_t camera_encoder_lastprocess = 0;
+static uint32_t driven_encoder_gear_lastprocess = 0;
+
static encoder_t m_uarts[] = {
{&camera_encoder, TIM_CHANNEL_1 | TIM_CHANNEL_2}, // 相机编码器
{&driven_encoder_gear, TIM_CHANNEL_1 | TIM_CHANNEL_2} // 从动编码器
@@ -68,10 +73,66 @@ bool encoder_read_with_encoder(encoder_usage_t encoder, uint32_t *encoder_value)
void encoder_light_schedule(void)
{
- static uint32_t lastprocess = 0;
- if (sys_haspassedms(lastprocess) > 500)
+ if (camera_encoder_state == STANDBY)
+ {
+ if (sys_haspassedms(camera_encoder_lastprocess) > 500)
+ {
+ camera_encoder_lastprocess = HAL_GetTick();
+ HAL_GPIO_TogglePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin);
+ }
+ }
+
+ if (driven_encoder_gear_state == STANDBY)
+ {
+ if (sys_haspassedms(camera_encoder_lastprocess) > 500)
+ {
+ driven_encoder_gear_lastprocess = HAL_GetTick();
+ // HAL_GPIO_TogglePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin);
+ }
+ }
+}
+
+void encoder_set_state(encoder_usage_t encoder, encoder_light_state_t state)
+{
+ /* 主动上报的时候常亮,接收到触发指令直接翻转led,待机中0.5s周期闪烁 */
+ if (encoder == CAMERA_ENCODER)
+ {
+ camera_encoder_state = state;
+ if (state == STANDBY)
+ {
+ camera_encoder_lastprocess = HAL_GetTick();
+ HAL_GPIO_TogglePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin);
+ }
+ else if (state == WORKING)
+ {
+ /* 如果工作状态的时候触发了genlock等,灯的状态不应该变成待机状态,只有同为待机的时候闪烁,上层写的时候需要加判断 */
+ HAL_GPIO_WritePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin, GPIO_PIN_RESET);
+ }
+ }
+ else if (encoder == DRIVEN_ENCODER_GEAR)
+ {
+ driven_encoder_gear_state = state;
+ if (state == STANDBY)
+ {
+ driven_encoder_gear_lastprocess = HAL_GetTick();
+ // HAL_GPIO_TogglePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin);
+ }
+ else if (state == WORKING)
+ {
+ // HAL_GPIO_WritePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin, GPIO_PIN_SET);
+ }
+ }
+}
+
+encoder_light_state_t encoder_get_state(encoder_usage_t encoder)
+{
+ if (encoder == CAMERA_ENCODER)
+ {
+ return camera_encoder_state;
+ }
+ else if (encoder == DRIVEN_ENCODER_GEAR)
{
- lastprocess = HAL_GetTick();
- HAL_GPIO_TogglePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin);
+ return driven_encoder_gear_state;
}
+ return ENCODER_STATE_NUMBER_AND_ERR_STATE;
}
diff --git a/usersrc/encoder.h b/usersrc/encoder.h
index 62c280c..bc52d1f 100644
--- a/usersrc/encoder.h
+++ b/usersrc/encoder.h
@@ -6,8 +6,16 @@ typedef enum
{
CAMERA_ENCODER = 0X00,
DRIVEN_ENCODER_GEAR = 0X01,
+ ENCODER_NUMBER,
} encoder_usage_t;
+typedef enum
+{
+ STANDBY = 0X00,
+ WORKING = 0X01,
+ ENCODER_STATE_NUMBER_AND_ERR_STATE,
+} encoder_light_state_t;
+
typedef struct
{
TIM_HandleTypeDef *tim_handler;
@@ -20,3 +28,5 @@ bool encoder_clear_counter(encoder_usage_t encoder);
void encoder_all_clear_counter(void);
bool encoder_read_with_encoder(encoder_usage_t encoder, uint32_t *encoder_value);
void encoder_light_schedule(void);
+void encoder_set_state(encoder_usage_t encoder, encoder_light_state_t state);
+encoder_light_state_t encoder_get_state(encoder_usage_t encoder);
diff --git a/usersrc/udpclient.c b/usersrc/udpclient.c
index e1b9e17..f4627e6 100644
--- a/usersrc/udpclient.c
+++ b/usersrc/udpclient.c
@@ -100,6 +100,20 @@ static void udp_client_active_response(void)
}
}
+static void udp_client_all_encoder_light_set(encoder_light_state_t state)
+{
+ if (state == STANDBY)
+ {
+ encoder_set_state(CAMERA_ENCODER, STANDBY);
+ encoder_set_state(DRIVEN_ENCODER_GEAR, STANDBY);
+ }
+ else if (state == WORKING)
+ {
+ encoder_set_state(CAMERA_ENCODER, WORKING);
+ encoder_set_state(DRIVEN_ENCODER_GEAR, WORKING);
+ }
+}
+
void udp_client_recv_data_dump(int recv_datalen)
{
/* debug使用 */
@@ -219,12 +233,25 @@ void udp_client_parse(int recv_datalen)
cmd_checksum(get_encoder_cmd);
udp_client_create_get_encoder_response(get_encoder_cmd, recv_datalen);
+ if (!udp_client_active_flag)
+ {
+ udp_client_all_encoder_light_set(STANDBY);
+ }
+
break;
case CMD_SET_ACTIVE: /* 设置主动上报 */
cmd_checksum(rxcmd);
if ((rxcmd->data == AVTIVE_DISABLE) || (rxcmd->data == ACTIVE_ENABLE))
{
udp_client_active_flag = rxcmd->data;
+ if (udp_client_active_flag)
+ {
+ udp_client_all_encoder_light_set(WORKING);
+ }
+ else
+ {
+ udp_client_all_encoder_light_set(STANDBY);
+ }
}
udp_client_create_basic_response(rxcmd, recv_datalen);
break;
@@ -280,6 +307,11 @@ void udp_client_genlock_and_esync_active(void)
active_report_data_structer_update();
udp_client_active_response();
+ if (!udp_client_active_flag)
+ {
+ udp_client_all_encoder_light_set(STANDBY);
+ }
+
active_report_data_structer.index += 1;
active_report_data_structer.time_stamp_s = 0;
genlock_and_esync_active_flag = false;