| | |
| | | // Created by fctom on 2020/2/13. |
| | | // |
| | | |
| | | #include <pthread.h> |
| | | #include <mutex> |
| | | #include "car_sensor.h" |
| | | #include "../driver_test.h" |
| | | #include "../defs.h" |
| | |
| | | static int SensorNum = 0; |
| | | |
| | | static car_sensor_t Sensor; |
| | | static pthread_mutex_t sonser_mutex = PTHREAD_MUTEX_INITIALIZER; |
| | | static pthread_mutex_t status_rw_mutex = PTHREAD_MUTEX_INITIALIZER; |
| | | static std::mutex sonser_mutex; |
| | | static std::mutex status_rw_mutex; |
| | | |
| | | inline static int BX(int value); |
| | | static void WriteCarStatus(uint16_t id, int value); |
| | | |
| | | static void ConfirmTurnSigalLater(union sigval sig); |
| | | static void flashBeamLightClose(union sigval sig); |
| | | static void ConfirmTurnSigalLater(apptimer_var_t val); |
| | | static void flashBeamLightClose(apptimer_var_t val); |
| | | |
| | | static void SensorChanged(int id, int value); |
| | | |
| | |
| | | |
| | | left_turn_signal = right_turn_signal = false; |
| | | |
| | | pthread_mutex_init(&sonser_mutex, NULL); |
| | | pthread_mutex_init(&status_rw_mutex, NULL); |
| | | } |
| | | |
| | | void SetSensorCfg(int (*sensor)[3], int sensorNum) |
| | |
| | | { |
| | | uint16_t chg = 0; |
| | | |
| | | pthread_mutex_lock(&sonser_mutex); |
| | | sonser_mutex.lock(); |
| | | chg = gpioStore^gpio; |
| | | gpioStore = gpio; |
| | | pthread_mutex_unlock(&sonser_mutex); |
| | | sonser_mutex.unlock(); |
| | | |
| | | WriteCarStatus(OBD_SPEED, speed); |
| | | WriteCarStatus(ENGINE_RPM, rpm); |
| | |
| | | { |
| | | int value; |
| | | |
| | | pthread_mutex_lock(&status_rw_mutex); |
| | | lock_guard<std::mutex> lock(status_rw_mutex); |
| | | |
| | | value = CarStatus[id]; |
| | | pthread_mutex_unlock(&status_rw_mutex); |
| | | |
| | | return value; |
| | | } |
| | |
| | | static void WriteCarStatus(uint16_t id, int value) |
| | | { |
| | | int old_value; |
| | | pthread_mutex_lock(&status_rw_mutex); |
| | | lock_guard<std::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 && old_value != value) { |
| | | uint8_t buffer[6]; |
| | |
| | | } |
| | | } |
| | | |
| | | static void ConfirmTurnSigalLater(union sigval sig) |
| | | static void ConfirmTurnSigalLater(apptimer_var_t val) |
| | | { |
| | | AppTimer_delete(ConfirmTurnSigalLater); |
| | | |
| | | DEBUG("确认转向灯 左 %d 右 %d", left_turn_signal, right_turn_signal); |
| | | |
| | | if (!left_turn_signal && !right_turn_signal) { |
| | |
| | | } |
| | | } |
| | | |
| | | static void flashBeamLightClose(union sigval sig) |
| | | static void flashBeamLightClose(apptimer_var_t val) |
| | | { |
| | | WriteCarStatus(FLASH_BEAM_LAMP, OFF_LIGHT); |
| | | } |