From 5eed3eecfae2747c6bb01dde8111f4124cb35143 Mon Sep 17 00:00:00 2001 From: tianjialong Date: Mon, 6 Mar 2023 14:57:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BC=96=E7=A0=81=E5=99=A8?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=8C=87=E7=A4=BA=E7=81=AF=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E7=94=B1=E4=BA=8E=E5=8F=AA=E6=9C=89=E4=B8=80=E4=B8=AA?= =?UTF-8?q?led=EF=BC=8C=E6=9C=89=E4=B8=AA=E7=BC=96=E7=A0=81=E5=99=A8?= =?UTF-8?q?=E5=BE=85=E6=9C=BA=E7=BF=BB=E8=BD=AC=E5=BC=95=E8=84=9A=E6=B2=A1?= =?UTF-8?q?=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MDK-ARM/LWIP.uvguix.29643 | 12 ++++----- usersrc/encoder.c | 69 ++++++++++++++++++++++++++++++++++++++++++++--- usersrc/encoder.h | 10 +++++++ usersrc/udpclient.c | 32 ++++++++++++++++++++++ 4 files changed, 113 insertions(+), 10 deletions(-) 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;