| | |
| | | |
| | | static void WriteCarStatus(uint16_t id, int value) |
| | | { |
| | | int old_value; |
| | | pthread_mutex_lock(&status_rw_mutex); |
| | | old_value = CarStatus[id]; |
| | | CarStatus[id] = value; |
| | | pthread_mutex_unlock(&status_rw_mutex); |
| | | |
| | | if (id != OBD_SPEED && id != ENGINE_RPM) { |
| | | if (id != OBD_SPEED && id != ENGINE_RPM && old_value != value) { |
| | | uint8_t buffer[6]; |
| | | |
| | | buffer[0] = HI_UINT16(id); |
| | |
| | | static void LRLightTimeout(union sigval sig) |
| | | { |
| | | AppTimer_delete(LRLightTimeout); |
| | | |
| | | WriteCarStatus(TURN_SIGNAL_LAMP, OFF_LIGHT); |
| | | if (!left_turn_signal && !right_turn_signal) { |
| | | WriteCarStatus(TURN_SIGNAL_LAMP, OFF_LIGHT); |
| | | } else if (left_turn_signal && right_turn_signal) { |
| | | WriteCarStatus(TURN_SIGNAL_LAMP, HAZARD_LIGHTS); |
| | | } else if (left_turn_signal) { |
| | | WriteCarStatus(TURN_SIGNAL_LAMP, LEFT_TURN_LIGHT); |
| | | } else { |
| | | WriteCarStatus(TURN_SIGNAL_LAMP, RIGHT_TURN_LIGHT); |
| | | } |
| | | } |
| | | |
| | | static void ChangeLRLight(int light) |
| | | { |
| | | WriteCarStatus(TURN_SIGNAL_LAMP, light); |
| | | DEBUG("ChangeLRLight %d %d", left_turn_signal, right_turn_signal); |
| | | if (!left_turn_signal && !right_turn_signal) { |
| | | WriteCarStatus(TURN_SIGNAL_LAMP, OFF_LIGHT); |
| | | } else if (left_turn_signal && right_turn_signal) { |
| | | WriteCarStatus(TURN_SIGNAL_LAMP, HAZARD_LIGHTS); |
| | | } else if (left_turn_signal) { |
| | | WriteCarStatus(TURN_SIGNAL_LAMP, LEFT_TURN_LIGHT); |
| | | } else { |
| | | WriteCarStatus(TURN_SIGNAL_LAMP, RIGHT_TURN_LIGHT); |
| | | } |
| | | |
| | | AppTimer_delete(LRLightTimeout); |
| | | AppTimer_add(LRLightTimeout, 1500); |
| | |
| | | AppTimer_delete(ConfirmTurnSigalLater); |
| | | if (right_turn_signal) { |
| | | // 判定为双闪 |
| | | ChangeLRLight(HAZARD_LIGHTS); |
| | | AppTimer_add(ConfirmTurnSigalLater, 500, HAZARD_LIGHTS); |
| | | } else { |
| | | AppTimer_add(ConfirmTurnSigalLater, 200, LEFT_TURN_LIGHT); |
| | | } |
| | | } else { |
| | | AppTimer_delete(ConfirmTurnSigalLater); |
| | | if (right_turn_signal) |
| | | AppTimer_add(ConfirmTurnSigalLater, 1500, RIGHT_TURN_LIGHT); |
| | | else |
| | | AppTimer_add(ConfirmTurnSigalLater, 1500, OFF_LIGHT); |
| | | } |
| | | break; |
| | | } |
| | |
| | | AppTimer_delete(ConfirmTurnSigalLater); |
| | | if (left_turn_signal) { |
| | | // 判定为双闪 |
| | | ChangeLRLight(HAZARD_LIGHTS); |
| | | AppTimer_add(ConfirmTurnSigalLater, 500, HAZARD_LIGHTS); |
| | | } else { |
| | | AppTimer_add(ConfirmTurnSigalLater, 200, RIGHT_TURN_LIGHT); |
| | | } |
| | | } else { |
| | | AppTimer_delete(ConfirmTurnSigalLater); |
| | | if (left_turn_signal) |
| | | AppTimer_add(ConfirmTurnSigalLater, 1500, LEFT_TURN_LIGHT); |
| | | else |
| | | AppTimer_add(ConfirmTurnSigalLater, 1500, OFF_LIGHT); |
| | | } |
| | | break; |
| | | } |