/** * @author Rémi Heredero * @version 1.0.0 * @date August 2023 * @file can_message.c */ #include "can_message.h" #include "../middleware/can_interface.h" #include "car.h" #include "../app/factory/factory.h" typedef union { struct { uint8_t byte0; uint8_t byte1; uint8_t byte2; uint8_t byte3; } separate; struct { uint32_t bytes; } full; } BYTES_4; void CM_processIncome(uint8_t idSender, uint8_t idMsg, uint32_t data){ switch(idSender){ case 0: // Broadcast / Debug /* S R M 0 1 0 CONTROL_SETUP steeringMode - - controlAliveTime 0 1 1 CONTROL_SPEED_FACTOR valHH valH valL valLL 0 1 2 CONTROL_POWER_FACTOR valHH valH valL valLL 0 1 3 CONTROL_STEERING_FACTOR valHH valH valL valLL 0 1 4 CONTROL_SECURITY_PARAM maxSpeedFw maxSpeedBw - - 0 1 5 CONTROL_SETUP_PARAM displayAliveTime steeringAliveTime 0 1 6 CONTROL_SETUP_PARAM_JOY joystickMode joystickParam1 joystickParam2 joystickAliveTime 0 1 7 CONTROL_SETUP_PARAM_DRIVE driveAliveTime driveSpeedTime driveStopTime 0 1 8 CONTROL_SETUP_PARAM_BATTERY batteryVoltTime batteryCurrentTime batteryEnergyTime batteryAliveTime */ if(idMsg == 0x0) { // CONTROL_SETUP } if(idMsg == 0x1) { // CONTROL_SPEED_FACTOR } if(idMsg == 0x2) { // CONTROL_POWER_FACTOR } if(idMsg == 0x3) { // CONTROL_STEERING_FACTOR } if(idMsg == 0x4) { // CONTROL_SECURITY_PARAM } if(idMsg == 0x5) { // CONTROL_SETUP_PARAM } if(idMsg == 0x6) { // CONTROL_SETUP_PARAM_JOY // joystickMode joystickParam1 joystickParam2 joystickAliveTime BYTES_4 tmpData; tmpData.full.bytes = data; MEM_write_one_byte(MEMADD_JOYSTICK_MODE, tmpData.separate.byte0); MEM_write_one_byte(MEMADD_JOYSTICK_PARAM1, tmpData.separate.byte1); MEM_write_one_byte(MEMADD_JOYSTICK_PARAM2, tmpData.separate.byte2); MEM_write_one_byte(MEMADD_JOYSTICK_ALIVE_TIME, tmpData.separate.byte3); CAR_CST.JOYSTICK_MODE = MEM_read_one_byte(MEMADD_JOYSTICK_MODE); CAR_CST.JOYSTICK_PARAM1 = MEM_read_one_byte(MEMADD_JOYSTICK_PARAM1); CAR_CST.JOYSTICK_PARAM2 = MEM_read_one_byte(MEMADD_JOYSTICK_PARAM2); CAR_CST.JOYSTICK_ALIVE_TIME = MEM_read_one_byte(MEMADD_JOYSTICK_ALIVE_TIME); ALIVE_CHECKER_setAliveTime(ACjoy(), CAR_CST.JOYSTICK_ALIVE_TIME); CM_JOY_SETUP(NULL); } if(idMsg == 0x7) { // CONTROL_SETUP_PARAM_DRIVE } if(idMsg == 0x8) { // CONTROL_SETUP_PARAM_BATTERY } break; case 2: // Joystick if(idMsg == 0x1) { // JOY_MESURE } if(idMsg == 0xF) { // JOY_ALIVE ALIVE_CHECKER_ISALIVE(ACjoy()); if(ACjoy()->state == STAC_DEAD){ CAR_CST.JOYSTICK_MODE = MEM_read_one_byte(MEMADD_JOYSTICK_MODE); CAR_CST.JOYSTICK_PARAM1 = MEM_read_one_byte(MEMADD_JOYSTICK_PARAM1); CAR_CST.JOYSTICK_PARAM2 = MEM_read_one_byte(MEMADD_JOYSTICK_PARAM2); CAR_CST.JOYSTICK_ALIVE_TIME = MEM_read_one_byte(MEMADD_JOYSTICK_ALIVE_TIME); ALIVE_CHECKER_setAliveTime(ACjoy(), CAR_CST.JOYSTICK_ALIVE_TIME); ALIVE_CHECKER_emitBorn(ACjoy(), 0, 0); ALIVE_CHECKER_emitReady(ACjoy(), 100, 0); } } break; case 3: // Display break; case 4: // Drive break; case 5: // Steering break; case 6: // Supply break; case 7: // Undefined break; } } void CM_CONTROLLER_ALIVE(void* p) { CAN_Send(0x0, 0xF, 0); } void CM_JOY_SETUP(void* p) { BYTES_4 joy; joy.separate.byte0 = CAR_CST.JOYSTICK_MODE; joy.separate.byte1 = CAR_CST.JOYSTICK_PARAM1; joy.separate.byte2 = CAR_CST.JOYSTICK_PARAM2; joy.separate.byte3 = CAR_CST.JOYSTICK_ALIVE_TIME; CAN_Send(2, 0, joy.full.bytes); } void CM_DISPLAY_SETUP(void* p) { } void CM_DISPLAY_SPEED(void* p) { } void CM_DISPLAY_DIRECTION(void* p) { } void CM_DRIVE_SETUP(void* p) { } void CM_DRIVE_POWER(void* p) { } void CM_STEERING_SETUP(void* p) { } void CM_STEERING_SET(void* p) { } void CM_SETUP_CONTROL(void* p) { }