|
|
@ -12,8 +12,8 @@ static bool camera_encoder_light_state; |
|
|
|
static bool driven_encoder_light_state; |
|
|
|
|
|
|
|
static encoder_t m_encoders[] = { |
|
|
|
{&camera_encoder, TIM_CHANNEL_1 | TIM_CHANNEL_2}, // 相机编码器 |
|
|
|
{&driven_encoder_gear, TIM_CHANNEL_1 | TIM_CHANNEL_2} // 从动编码器 |
|
|
|
{&camera_encoder, TIM_CHANNEL_1 | TIM_CHANNEL_2, 0, 0}, // 相机编码器 |
|
|
|
{&driven_encoder_gear, TIM_CHANNEL_1 | TIM_CHANNEL_2, 0, 0} // 从动编码器 |
|
|
|
}; |
|
|
|
|
|
|
|
void encoder_all_start(void) |
|
|
@ -32,140 +32,33 @@ void encoder_all_stop(void) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
bool encoder_clear_counter(encoder_usage_t encoder) |
|
|
|
{ |
|
|
|
for (uint8_t i = 0; i < (sizeof(m_encoders) / sizeof(encoder_t)); i++) |
|
|
|
{ |
|
|
|
if (encoder == i) |
|
|
|
{ |
|
|
|
__HAL_TIM_GET_COUNTER(m_encoders[i].tim_handler) = 0; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
void encoder_all_clear_counter(void) |
|
|
|
{ |
|
|
|
for (uint8_t i = 0; i < (sizeof(m_encoders) / sizeof(encoder_t)); i++) |
|
|
|
{ |
|
|
|
__HAL_TIM_GET_COUNTER(m_encoders[i].tim_handler) = 0; // 计数器值重新置位 |
|
|
|
m_encoders[i].count = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
bool encoder_read_with_encoder(encoder_usage_t encoder, uint32_t *encoder_value) |
|
|
|
void encoder_read_with_encoder(encoder_usage_t encoder, uint32_t *encoder_value) |
|
|
|
{ |
|
|
|
bool get_encoder_value_flag = false; |
|
|
|
switch (encoder) |
|
|
|
{ |
|
|
|
case CAMERA_ENCODER: |
|
|
|
*encoder_value += (short)__HAL_TIM_GET_COUNTER(m_encoders[encoder].tim_handler); |
|
|
|
__HAL_TIM_GET_COUNTER(m_encoders[encoder].tim_handler) = 0; /* 清零 */ |
|
|
|
get_encoder_value_flag = true; |
|
|
|
*encoder_value = m_encoders[CAMERA_ENCODER].count; |
|
|
|
break; |
|
|
|
case DRIVEN_ENCODER_GEAR: |
|
|
|
*encoder_value += (short)__HAL_TIM_GET_COUNTER(m_encoders[encoder].tim_handler); |
|
|
|
__HAL_TIM_GET_COUNTER(m_encoders[encoder].tim_handler) = 0; /* 清零 */ |
|
|
|
get_encoder_value_flag = true; |
|
|
|
*encoder_value = m_encoders[DRIVEN_ENCODER_GEAR].count; |
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
return get_encoder_value_flag; |
|
|
|
} |
|
|
|
|
|
|
|
void encoder_light_schedule(void) |
|
|
|
{ |
|
|
|
// if (camera_encoder_state == STANDBY) |
|
|
|
// { |
|
|
|
// if (sys_haspassedms(camera_encoder_lastprocess) > 500) |
|
|
|
// { |
|
|
|
// camera_encoder_lastprocess = HAL_GetTick(); |
|
|
|
// encoder_switch_toggle_on_off_state(CAMERA_ENCODER); |
|
|
|
// } |
|
|
|
// } |
|
|
|
|
|
|
|
// if (driven_encoder_gear_state == STANDBY) |
|
|
|
// { |
|
|
|
// if (sys_haspassedms(driven_encoder_gear_lastprocess) > 500) |
|
|
|
// { |
|
|
|
// driven_encoder_gear_lastprocess = HAL_GetTick(); |
|
|
|
// encoder_switch_toggle_on_off_state(DRIVEN_ENCODER_GEAR); |
|
|
|
// } |
|
|
|
// } |
|
|
|
} |
|
|
|
|
|
|
|
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(); |
|
|
|
encoder_switch_toggle_on_off_state(CAMERA_ENCODER); |
|
|
|
} |
|
|
|
else if (state == WORKING) |
|
|
|
{ |
|
|
|
/* 如果工作状态的时候触发了genlock等,灯的状态不应该变成待机状态,只有同为待机的时候闪烁,上层写的时候需要加判断 */ |
|
|
|
encoder_light_switch_set_color_and_brightness(CAMERA_ENCODER, ENCODER_LIGHT_COLOR_BLUE, encoder_light_max_brightness); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (encoder == DRIVEN_ENCODER_GEAR) |
|
|
|
{ |
|
|
|
driven_encoder_gear_state = state; |
|
|
|
if (state == STANDBY) |
|
|
|
{ |
|
|
|
driven_encoder_gear_lastprocess = HAL_GetTick(); |
|
|
|
encoder_switch_toggle_on_off_state(DRIVEN_ENCODER_GEAR); |
|
|
|
} |
|
|
|
else if (state == WORKING) |
|
|
|
{ |
|
|
|
encoder_light_switch_set_color_and_brightness(DRIVEN_ENCODER_GEAR, ENCODER_LIGHT_COLOR_BLUE, encoder_light_max_brightness); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
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) |
|
|
|
{ |
|
|
|
return driven_encoder_gear_state; |
|
|
|
} |
|
|
|
return ENCODER_STATE_NUMBER_AND_ERR_STATE; |
|
|
|
} |
|
|
|
|
|
|
|
void encoder_all_encoder_clear_counter_and_structer_count(void) |
|
|
|
{ |
|
|
|
udp_client_get_active_report_data_structer()->encoder1 = 0; |
|
|
|
udp_client_get_active_report_data_structer()->encoder2 = 0; |
|
|
|
encoder_all_clear_counter(); |
|
|
|
} |
|
|
|
|
|
|
|
void encoder_switch_encoder_clear_count_and_structer_count(encoder_usage_t encoder) |
|
|
|
{ |
|
|
|
|
|
|
|
switch (encoder) |
|
|
|
{ |
|
|
|
case CAMERA_ENCODER: |
|
|
|
udp_client_get_active_report_data_structer()->encoder1 = 0; |
|
|
|
encoder_clear_counter(CAMERA_ENCODER); |
|
|
|
break; |
|
|
|
case DRIVEN_ENCODER_GEAR: |
|
|
|
udp_client_get_active_report_data_structer()->encoder2 = 0; |
|
|
|
encoder_clear_counter(DRIVEN_ENCODER_GEAR); |
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
@ -299,3 +192,13 @@ void encoder_switch_toggle_on_off_state(encoder_usage_t encoder) |
|
|
|
// error |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
encoder_t *encoder_get_camera_encoder_structer(void) |
|
|
|
{ |
|
|
|
return &m_encoders[CAMERA_ENCODER]; |
|
|
|
} |
|
|
|
|
|
|
|
encoder_t *encoder_get_driven_encoder_gear_structer(void) |
|
|
|
{ |
|
|
|
return &m_encoders[DRIVEN_ENCODER_GEAR]; |
|
|
|
} |