18 #ifndef CAN_STRING_ETH_H
19 #define CAN_STRING_ETH_H
23 #include <yarp/os/LogStream.h>
24 #include <yarp/os/Log.h>
38 void setId (uint16_t
id);
49 this->size = 0; this->
id = 0; this->candata = 0;
93 char text_buffer [256];
146 id=can_packet->
getId();
148 uint64_t candatabytes = can_packet->
getData();
149 char *candata=(
char*)&candatabytes;
150 int code = candata[0]&0xFF;
152 string_id = (candata[1]&0xF0)>>4;
153 offset = (candata[1]&0x0F);
154 data_can[string_id].board_id = char(
id>>4&0xf);
160 yError(
"CANPrint msg from board %d contains an ERROR! (>MAX_STRINGS)\n",data_can[string_id ].board_id);
163 for (j=0 ; j<size-2; j++)
164 data_can[string_id].text_buffer[j+
offset*6]=candata[j+2];
166 if (code==ICUBCANPROTO_PER_MC_MSG__PRINT + 128)
168 data_can[string_id].maybe_last_part =
true;
169 data_can[string_id].expected_length=
offset*6+size-2;
172 if (data_can[string_id].maybe_last_part)
174 data_can[string_id].current_length=strlen(data_can[string_id].text_buffer);
176 if (data_can[string_id].expected_length==data_can[string_id].current_length)
177 data_can[string_id].complete =
true;
186 if (data_can[string_id].complete)
return string_id;
194 for (
int i = 0; i < 256; i++) data_can[buffer_num].text_buffer[i]=0;
195 data_can[buffer_num].complete=
false;
196 data_can[buffer_num].maybe_last_part=
false;
197 data_can[buffer_num].expected_length = 0;
198 data_can[buffer_num].board_id=0;
199 data_can[buffer_num].current_length = 0;
205 if ((buffer_num < 0) || (buffer_num >
MAX_STRINGS))
207 yError(
"Can't get CANPrint msg from board %d (>MAX_STRINGS)\n",data_can[buffer_num].board_id);
210 return data_can[buffer_num].text_buffer;
void setSize(uint8_t size)
void setCanData(uint64_t data)
char * get_string(int buffer_num)
can_string_eth()
Default constructor.
int add_string(CanFrame *can_packet)
Process a string can packet.
void clear_string(int buffer_num)
Resets the string buffer.
~can_string_eth()
Destructor.