equal
deleted
inserted
replaced
153 Unregisteres the net_device and frees allocated memory. |
153 Unregisteres the net_device and frees allocated memory. |
154 */ |
154 */ |
155 |
155 |
156 void ec_eoe_clear(ec_eoe_t *eoe /**< EoE handler */) |
156 void ec_eoe_clear(ec_eoe_t *eoe /**< EoE handler */) |
157 { |
157 { |
158 if (eoe->dev) { // TODO: dev never NULL? |
158 unregister_netdev(eoe->dev); |
159 unregister_netdev(eoe->dev); |
159 free_netdev(eoe->dev); |
160 free_netdev(eoe->dev); |
|
161 } |
|
162 |
160 |
163 // empty transmit queue |
161 // empty transmit queue |
164 ec_eoe_flush(eoe); |
162 ec_eoe_flush(eoe); |
165 |
163 |
166 if (eoe->tx_frame) { |
164 if (eoe->tx_frame) { |
290 unsigned int ec_eoe_active(const ec_eoe_t *eoe /**< EoE handler */) |
288 unsigned int ec_eoe_active(const ec_eoe_t *eoe /**< EoE handler */) |
291 { |
289 { |
292 return eoe->slave && eoe->opened; |
290 return eoe->slave && eoe->opened; |
293 } |
291 } |
294 |
292 |
295 /*****************************************************************************/ |
|
296 |
|
297 /** |
|
298 Prints EoE handler information. |
|
299 */ |
|
300 |
|
301 void ec_eoe_print(const ec_eoe_t *eoe /**< EoE handler */) |
|
302 { |
|
303 EC_INFO(" EoE handler %s\n", eoe->dev->name); |
|
304 EC_INFO(" State: %s\n", eoe->opened ? "opened" : "closed"); |
|
305 if (eoe->slave) |
|
306 EC_INFO(" Coupled to slave %i.\n", eoe->slave->ring_position); |
|
307 else |
|
308 EC_INFO(" Not coupled.\n"); |
|
309 } |
|
310 |
|
311 /****************************************************************************** |
293 /****************************************************************************** |
312 * STATE PROCESSING FUNCTIONS |
294 * STATE PROCESSING FUNCTIONS |
313 *****************************************************************************/ |
295 *****************************************************************************/ |
314 |
296 |
315 /** |
297 /** |
336 datagram, if new data is available. |
318 datagram, if new data is available. |
337 */ |
319 */ |
338 |
320 |
339 void ec_eoe_state_rx_check(ec_eoe_t *eoe /**< EoE handler */) |
321 void ec_eoe_state_rx_check(ec_eoe_t *eoe /**< EoE handler */) |
340 { |
322 { |
341 if (eoe->datagram.state != EC_CMD_RECEIVED) { |
323 if (eoe->datagram.state != EC_DATAGRAM_RECEIVED) { |
342 eoe->stats.rx_errors++; |
324 eoe->stats.rx_errors++; |
343 eoe->state = ec_eoe_state_tx_start; |
325 eoe->state = ec_eoe_state_tx_start; |
344 return; |
326 return; |
345 } |
327 } |
346 |
328 |
367 size_t rec_size, data_size; |
349 size_t rec_size, data_size; |
368 uint8_t *data, frame_type, last_fragment, time_appended; |
350 uint8_t *data, frame_type, last_fragment, time_appended; |
369 uint8_t frame_number, fragment_offset, fragment_number; |
351 uint8_t frame_number, fragment_offset, fragment_number; |
370 off_t offset; |
352 off_t offset; |
371 |
353 |
372 if (eoe->datagram.state != EC_CMD_RECEIVED) { |
354 if (eoe->datagram.state != EC_DATAGRAM_RECEIVED) { |
373 eoe->stats.rx_errors++; |
355 eoe->stats.rx_errors++; |
374 eoe->state = ec_eoe_state_tx_start; |
356 eoe->state = ec_eoe_state_tx_start; |
375 return; |
357 return; |
376 } |
358 } |
377 |
359 |
568 fragment, if necessary. |
550 fragment, if necessary. |
569 */ |
551 */ |
570 |
552 |
571 void ec_eoe_state_tx_sent(ec_eoe_t *eoe /**< EoE handler */) |
553 void ec_eoe_state_tx_sent(ec_eoe_t *eoe /**< EoE handler */) |
572 { |
554 { |
573 if (eoe->datagram.state != EC_CMD_RECEIVED) { |
555 if (eoe->datagram.state != EC_DATAGRAM_RECEIVED) { |
574 eoe->stats.tx_errors++; |
556 eoe->stats.tx_errors++; |
575 eoe->state = ec_eoe_state_rx_start; |
557 eoe->state = ec_eoe_state_rx_start; |
576 return; |
558 return; |
577 } |
559 } |
578 |
560 |