#include "MotionAlarm_messageHandlers.h" #include "MotionAlarm_messages.h" #include <Network_protocol/CAN_interface.h> #include <Network_protocol/CAN_messageTypes.h> #include "Vibration_sensor/SW_18010P.h" #include <Timer/TIM.h> static uint8_t auxId; static void auxActivate(Message* msg) { AuxActivateRequest auxActivate = *(AuxActivateRequest*) &(msg->data); switch (auxActivate.sensor.sensorType) { case DISTANCE: // TODO break; case VIBRATION: SW_18010P_init(SW_18010P_getSensitivity()); break; } } static void auxDeactivate(Message* msg) { AuxDeactivateRequest auxDeactivate = *(AuxDeactivateRequest*) &(msg->data); switch (auxDeactivate.sensor.sensorType) { case DISTANCE: // TODO break; case VIBRATION: SW_18010P_deinit(); break; } } static void auxConfig(Message* msg) { AuxConfigRequest auxConfig = *(AuxConfigRequest*) &(msg->data); if (auxConfig.sensor.sensorType == DISTANCE) { // TODO } else if (auxConfig.sensor.sensorType == VIBRATION) { SW_18010P_setSensitivity(auxConfig.sensitivity); } } static void auxInfo(Message* msg) { AuxInfoRequest auxInfoRequest = *(AuxInfoRequest*) &(msg->data); AuxInfoResponse auxInfoResponse; switch (auxInfoRequest.sensor.sensorType) { case DISTANCE: // TODO break; case VIBRATION: auxInfoResponse.sensitivity = SW_18010P_getSensitivity(); auxInfoResponse.calibration = 0; auxInfoResponse.currentValue = SW_18010P_getCurrentValue(); break; } CAN_send(auxId, AUX_INFO, &auxInfoResponse, sizeof(auxInfoResponse)); } static uint8_t timer; static void auxInit(Message* msg) { TIM_cancelTimer(timer); auxId = msg->id.auxId; CAN_registerMessageHandler(AUX_ACTIVATE, auxActivate); CAN_registerMessageHandler(AUX_DEACTIVATE, auxDeactivate); CAN_registerMessageHandler(AUX_CONFIG, auxConfig); CAN_registerMessageHandler(AUX_INFO, auxInfo); } static void requestAuxiliaryInit() { CAN_auxRequestInit(MOTION_ALARM); } void MotionAlarm_communicationInit() { CAN_init(false); CAN_registerMessageHandler(AUXILIARY_INIT, auxInit); requestAuxiliaryInit(); timer = TIM_startRepeatingTimer(1000, requestAuxiliaryInit); } void MotionAlarm_triggerAlarm() { CAN_send(auxId, ALARM, 0, 0); }