@@ -101,70 +101,21 @@ bool FDCAN::transmit(uint8_t id, uint32_t message_id, span<uint8_t> data, FDCAN:
101101 return true ;
102102}
103103
104- void HAL_FDCAN_RxFifo0Callback (FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs){
105- if (not FDCAN ::handle_to_fdcan.contains (hfdcan)) {
106- printf (" Warning: message received from an unknown FDCAN" );
107- return ;
108- }
109-
110- if (FDCAN ::handle_to_fdcan[hfdcan]->rx_queue .size () >= FDCAN ::handle_to_fdcan[hfdcan]->rx_queue_max_size ) {
111- return ; // TODO: WARNING RX_QUEUE FULL
112- }
113-
114- FDCAN ::DLC dlc = FDCAN ::handle_to_fdcan[hfdcan]->dlc ;
115-
116- vector<uint8_t > data_buffer (FDCAN ::dlc_to_len[dlc]);
117-
118- FDCAN_RxHeaderTypeDef header_buffer = FDCAN_RxHeaderTypeDef ();
119- HAL_FDCAN_GetRxMessage (hfdcan, FDCAN ::handle_to_fdcan[hfdcan]->rx_location , &header_buffer, data_buffer.data ());
120-
121-
122- FDCAN ::Packet packet_buffer = {data_buffer, header_buffer.Identifier , (FDCAN ::DLC )header_buffer.DataLength };
123- FDCAN ::handle_to_fdcan[hfdcan]->rx_queue .push (packet_buffer);
124- }
104+ // void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs){}
125105
126106bool FDCAN::read (uint8_t id, FDCAN ::Packet* data){
127107 if (not FDCAN ::registered_fdcan.contains (id)) {
128108 ErrorHandler (" There is no FDCAN registered with id: %d." , id);
129109 return false ;
130110 }
131111
132- if (FDCAN ::registered_fdcan[id]->rx_queue .empty ()) {
133- data->rx_data .clear ();
134- data->data_length = FDCAN ::DLC ::BYTES_0 ;
135- data->identifier = 0 ;
136- return false ;
137- }
138-
139- FDCAN ::Packet packet = FDCAN ::registered_fdcan[id]->rx_queue .front ();
140-
141- data->rx_data = packet.rx_data ;
142- data->identifier = packet.identifier ;
143- data->data_length = packet.data_length ;
144-
145- FDCAN ::registered_fdcan[id]->rx_queue .pop ();
146-
147- return true ;
148- }
149-
150- bool FDCAN::wait_and_read (uint8_t id, FDCAN ::Packet* data){
151- if (not FDCAN ::registered_fdcan.contains (id)) {
152- ErrorHandler (" There is no FDCAN registered with id: %d." , id);
112+ if (!FDCAN::received_test (id)) {
153113 return false ;
154114 }
115+ FDCAN_RxHeaderTypeDef header_buffer = FDCAN_RxHeaderTypeDef ();
116+ HAL_FDCAN_GetRxMessage (FDCAN ::registered_fdcan.at (id)->hfdcan , FDCAN ::registered_fdcan.at (id)->rx_location , &header_buffer, data->rx_data .data ());
155117
156- // Wait until the arrival of a message.
157- while (FDCAN ::registered_fdcan[id]->rx_queue .empty ()) {
158- }
159-
160- FDCAN ::Packet packet = FDCAN ::registered_fdcan[id]->rx_queue .front ();
161-
162- data->rx_data = packet.rx_data ;
163- data->identifier = packet.identifier ;
164- data->data_length = packet.data_length ;
165-
166- FDCAN ::registered_fdcan[id]->rx_queue .pop ();
167-
118+ data->identifier = header_buffer.Identifier ;
168119 return true ;
169120}
170121
@@ -174,11 +125,7 @@ bool FDCAN::received_test(uint8_t id){
174125 return false ;
175126 }
176127
177- if (FDCAN ::registered_fdcan[id]->rx_queue .empty ()) {
178- return false ;
179- }
180-
181- return true ;
128+ return !((FDCAN ::registered_fdcan.at (id)->hfdcan ->Instance ->RXF0S & FDCAN_RXF0S_F0FL ) == 0U );
182129}
183130
184131void FDCAN::init (FDCAN ::Instance* fdcan){
@@ -220,4 +167,3 @@ void FDCAN::init(FDCAN::Instance* fdcan){
220167
221168}
222169#endif
223-
0 commit comments