| | |
| | | |
| | | static uint16_t gpioStore; |
| | | static int left_turn_signal, right_turn_signal; |
| | | static int flashMainBeamCnt; |
| | | |
| | | enum { |
| | | SENSOR_SEATBELT, |
| | |
| | | static void ChangeLRLight(int light); |
| | | static void ConfirmTurnSigalLater(union sigval sig); |
| | | static void flashBeamLightClose(union sigval sig); |
| | | static void confirmFlashBeamLightLater(union sigval sig); |
| | | |
| | | static void SensorChanged(int id, int value); |
| | | |
| | | void CarSensorInit(void) |
| | |
| | | memset(&Sensor, 0, sizeof(Sensor)); |
| | | |
| | | left_turn_signal = right_turn_signal = 0; |
| | | flashMainBeamCnt = 0; |
| | | |
| | | pthread_mutex_init(&sonser_mutex, NULL); |
| | | pthread_mutex_init(&status_rw_mutex, NULL); |
| | |
| | | WriteCarStatus(FLASH_BEAM_LAMP, OFF_LIGHT); |
| | | } |
| | | |
| | | static void confirmFlashBeamLightLater(union sigval sig) |
| | | { |
| | | AppTimer_delete(confirmFlashBeamLightLater); |
| | | flashMainBeamCnt = 0; |
| | | } |
| | | |
| | | static void SensorChanged(int id, int value) |
| | | { |
| | | // DEBUG("状态改变 %d = %d", id, value); |
| | | DEBUG("状态改变 %d = %d", id, value); |
| | | switch (id) { |
| | | case SENSOR_LEFT_TURN_SIGNAL: { |
| | | left_turn_signal = value; |
| | |
| | | break; |
| | | } |
| | | case SENSOR_MAIN_BEAM_LIGHT: { |
| | | static uint32_t t1 = 0; |
| | | |
| | | if (value == 0) { |
| | | WriteCarStatus(MAIN_BEAM_LAMP, OFF_LIGHT); |
| | | } else { |
| | | WriteCarStatus(MAIN_BEAM_LAMP, MAIN_BEAM_LIGHT); |
| | | } |
| | | |
| | | if (++flashMainBeamCnt > 3) { // 亮-灭-亮-灭 |
| | | WriteCarStatus(FLASH_BEAM_LAMP, FLASH_BEAM_LIGHT); |
| | | |
| | | if (value != 0) { |
| | | t1 = AppTimer_GetTickCount(); |
| | | } else if (AppTimer_GetTickCount() - t1 < D_SEC(3)) { |
| | | // 3秒内完成亮灭,闪灯 |
| | | if (ReadCarStatus(FLASH_BEAM_LAMP) != FLASH_BEAM_LIGHT) { |
| | | WriteCarStatus(FLASH_BEAM_LAMP, FLASH_BEAM_LIGHT); |
| | | } |
| | | AppTimer_delete(flashBeamLightClose); |
| | | AppTimer_add(flashBeamLightClose, D_SEC(2)); |
| | | } |
| | | |
| | | AppTimer_delete(confirmFlashBeamLightLater); |
| | | AppTimer_add(confirmFlashBeamLightLater, D_SEC(3)); |
| | | break; |
| | | } |
| | | case SENSOR_SEATBELT: { |