1111#include "board/body/bldc/bldc.h"
1212
1313#define BODY_CAN_ADDR_MOTOR_SPEED 0x201U
14- #define BODY_CAN_ADDR_BLDC_ID 0x396U
14+ #define BODY_CAN_ADDR_VAR_VALUES 0x202U
15+ #define BODY_CAN_ADDR_BODY_DATA 0x203U
16+ #define BODY_CAN_ADDR_V2_ID 0x002U
1517#define BODY_CAN_MOTOR_SPEED_PERIOD_US 10000U
1618#define BODY_CAN_CMD_TIMEOUT_US 100000U
1719#define BODY_BUS_NUMBER 0U
@@ -42,6 +44,39 @@ void body_can_send_motor_speeds(uint8_t bus, float left_speed_rpm, float right_s
4244 counter ++ ;
4345}
4446
47+ void body_can_send_var_values (uint8_t bus , bool ignition , bool enable_motors , uint8_t fault , uint8_t left_z_errcode , uint8_t right_z_errcode ) {
48+ CANPacket_t pkt ;
49+ pkt .bus = bus ;
50+ pkt .addr = BODY_CAN_ADDR_VAR_VALUES ;
51+ pkt .returned = 0 ;
52+ pkt .rejected = 0 ;
53+ pkt .extended = 0 ;
54+ pkt .fd = 0 ;
55+ pkt .data_len_code = 3 ;
56+ pkt .data [0 ] = (ignition ? 1U : 0U ) | ((enable_motors ? 1U : 0U ) << 1U ) | ((fault & 0x3FU ) << 2U );
57+ pkt .data [1 ] = left_z_errcode ;
58+ pkt .data [2 ] = right_z_errcode ;
59+ can_set_checksum (& pkt );
60+ can_send (& pkt , bus , true);
61+ }
62+
63+ void body_can_send_body_data (uint8_t bus , uint8_t mcu_temp_raw , uint16_t batt_voltage_raw , uint8_t batt_percentage , bool charger_connected ) {
64+ CANPacket_t pkt ;
65+ pkt .bus = bus ;
66+ pkt .addr = BODY_CAN_ADDR_BODY_DATA ;
67+ pkt .returned = 0 ;
68+ pkt .rejected = 0 ;
69+ pkt .extended = 0 ;
70+ pkt .fd = 0 ;
71+ pkt .data_len_code = 4 ;
72+ pkt .data [0 ] = mcu_temp_raw ;
73+ pkt .data [1 ] = (uint8_t )((batt_voltage_raw >> 8 ) & 0xFFU );
74+ pkt .data [2 ] = (uint8_t )(batt_voltage_raw & 0xFFU );
75+ pkt .data [3 ] = (charger_connected ? 1U : 0U ) | ((batt_percentage & 0x7FU ) << 1U );
76+ can_set_checksum (& pkt );
77+ can_send (& pkt , bus , true);
78+ }
79+
4580void body_can_process_target (int16_t left_target_deci_rpm , int16_t right_target_deci_rpm ) {
4681 rpml = (int )(((float )left_target_deci_rpm ) * 0.1f );
4782 rpmr = (int )(((float )right_target_deci_rpm ) * 0.1f );
@@ -65,7 +100,7 @@ void body_can_init(void) {
65100 can_init_all ();
66101}
67102
68- void body_can_periodic (uint32_t now ) {
103+ void body_can_periodic (uint32_t now , bool ignition , bool plug_charging ) {
69104 if ((last_can_cmd_timestamp_us != 0U ) &&
70105 ((now - last_can_cmd_timestamp_us ) >= BODY_CAN_CMD_TIMEOUT_US )) {
71106 rpml = 0 ;
@@ -78,11 +113,13 @@ void body_can_periodic(uint32_t now) {
78113 float left_speed_rpm = motor_encoder_get_speed_rpm (BODY_MOTOR_LEFT );
79114 float right_speed_rpm = motor_encoder_get_speed_rpm (BODY_MOTOR_RIGHT );
80115 body_can_send_motor_speeds (BODY_BUS_NUMBER , left_speed_rpm , right_speed_rpm );
116+ body_can_send_var_values (BODY_BUS_NUMBER , ignition , enable_motors , 0U , rtY_Left .z_errCode , rtY_Right .z_errCode );
117+ body_can_send_body_data (BODY_BUS_NUMBER , 0U , batt_voltage_raw , batt_percentage , plug_charging );
81118
82- // Send message on 0x301 to identify as BLDC body (v2)
119+ // Send message on 0x002 to identify as body v2
83120 CANPacket_t id_pkt = {0 };
84121 id_pkt .bus = BODY_BUS_NUMBER ;
85- id_pkt .addr = BODY_CAN_ADDR_BLDC_ID ;
122+ id_pkt .addr = BODY_CAN_ADDR_V2_ID ;
86123 id_pkt .data_len_code = 1 ;
87124 id_pkt .data [0 ] = 1U ;
88125 can_set_checksum (& id_pkt );
0 commit comments