18 .
name =
"CAN Bridge (GVRET)" ,
56 if(
port == this->port){
92 buf += std::to_string(msg.
header.
id);
94 buf += std::to_string(*(int64_t*)msg.
data);
104 uint32_t
id = rxHeader.
id;
109 std::vector<char> reply = {
110 0xF1,0,(char)(time & 0xff), (char)((time >> 8) & 0xff), (
char)((time >> 16) & 0xff), (char)((time >> 24) & 0xff),
111 (
char)(
id & 0xff), (
char)((
id >> 8) & 0xff), (char)((
id >> 16) & 0xff), (
char)((
id >> 24) & 0xff),
112 (char)((rxHeader.
length & 0xf) | (1 >> 4))
115 for(uint8_t i = 0; i< rxHeader.
length; i++){
116 reply.push_back(msg.
data[i]);
146 if(
gvretMode ==
false || (*Buf != 0xE7 && *Buf != 0xF1)){
160 for(uint8_t i = 0; i < *Len-
pos; i++){
162 if((Buf[i]) == 0xF1){
167 std::vector<char> reply;
170 uint8_t datalength = *Len;
171 uint8_t*
data = (uint8_t*)(Buf+
pos+1);
172 uint8_t cmd = *(Buf+
pos);
175 for(uint8_t i = 0; i < *Len-
pos; i++){
177 if((
data[i]) == 0xF1){
190 uint32_t
id = *
data | (*(
data+1) << 8) | (*(
data+2) << 16) | (*(
data+3) << 24);
192 uint8_t bus =
data[4];
193 uint8_t msgLen =
data[5];
203 uint32_t time = HAL_GetTick()*1000;
204 std::vector<char> t = {0xF1,cmd,(char)(time & 0xff), (char)((time >> 8) & 0xff), (
char)((time >> 16) & 0xff), (char)((time >> 24) & 0xff)};
205 reply.insert(reply.end(),t.begin(),t.end());
223 uint32_t speed = *
data | (*(
data+1) << 8) | (*(
data+2) << 16) | (*(
data+3) << 24);
224 speed = speed & 0x1fffffff;
225 uint8_t b3 = *(
data+3);
235 std::vector<char> t =
240 reply.insert(reply.end(),t.begin(),t.end());
247 std::vector<char> t = {0xF1,cmd,1,1,1,0,0,0};
248 reply.insert(reply.end(),t.begin(),t.end());
271 std::vector<char> t = {0xF1,cmd,
numBuses};
272 reply.insert(reply.end(),t.begin(),t.end());
uint32_t tud_cdc_n_write(uint8_t itf, void const *buffer, uint32_t bufsize)
static TU_ATTR_ALWAYS_INLINE uint32_t tud_cdc_write_flush(void)
virtual uint32_t getSpeed()=0
virtual int32_t addCanFilter(CAN_filter filter)=0
virtual bool sendMessage(CAN_tx_msg &msg)=0
virtual void setSpeed(uint32_t speed)=0
virtual void removeCanFilter(uint8_t filterId)=0
virtual void setSilentMode(bool silent)=0
const std::vector< char > keepalivemsg
const ClassIdentifier getInfo() override
static ClassIdentifier info
void cdcRcv(char *Buf, uint32_t *Len) override
std::string messageToString(CAN_rx_msg msg)
volatile bool replyPending
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
void canRxPendCallback(CANPort *port, CAN_rx_msg &msg) override
CAN_msg_header_tx txHeader
void canErrorCallback(CANPort *port, uint32_t error)
void registerCommand(const char *cmd, const ID cmdid, const char *help=nullptr, uint32_t flags=0)
static void logSerial(std::string string)
Send a log formatted sequence.
virtual void cdcRcv(char *Buf, uint32_t *Len)
static void * memcpy(void *dst, const void *src, size_t n)
uint8_t data[CAN_MSGBUFSIZE]