49 lines
1.1 KiB
C
49 lines
1.1 KiB
C
/*
|
|
* can_communication.c
|
|
*
|
|
* Created on: Mar 12, 2025
|
|
* Author: janek
|
|
*/
|
|
|
|
#include "can_communication.h"
|
|
#include "channel_control.h"
|
|
//#include "current_monitoring.h"
|
|
|
|
rx_status_frame rxstate = {};
|
|
volatile uint8_t canmsg_received = 0;
|
|
extern enable_gpios update_ports;
|
|
|
|
|
|
extern uint32_t lastheartbeat;
|
|
extern int inhibit_SDC;
|
|
|
|
void can_init(CAN_HandleTypeDef* hcan){
|
|
ftcan_init(hcan);
|
|
ftcan_add_filter(0x00, 0x00); // no filter
|
|
}
|
|
|
|
void can_sendloop(){
|
|
//static uint8_t additionaltxcounter = 0;
|
|
|
|
uint8_t status_data[3];
|
|
status_data[0] = update_ports.porta.porta;
|
|
status_data[1] = update_ports.portb.portb;
|
|
status_data[2] = !inhibit_SDC;
|
|
ftcan_transmit(TX_STATUS_MSG_ID, status_data, 3);
|
|
// TODO: implement transmission of current and voltage measurements
|
|
}
|
|
|
|
void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t* data){
|
|
canmsg_received = 1;
|
|
if((id == RX_STATUS_MSG_ID) && (datalen == 3)){
|
|
rxstate.iostatus.porta.porta = data[0];
|
|
rxstate.iostatus.portb.portb = data[1];
|
|
rxstate.checksum = data[2];
|
|
}
|
|
|
|
if (id == RX_STATUS_HEARTBEAT){
|
|
lastheartbeat = HAL_GetTick();
|
|
inhibit_SDC = 0;
|
|
}
|
|
}
|