master/device.c
changeset 679 62fc387ec928
parent 670 f57de4585a5f
child 687 6de97f276423
equal deleted inserted replaced
678:5e0d5f04dc65 679:62fc387ec928
    57         ec_master_t *master /**< master owning the device */
    57         ec_master_t *master /**< master owning the device */
    58         )
    58         )
    59 {
    59 {
    60     device->master = master;
    60     device->master = master;
    61 
    61 
    62 #ifdef EC_DBG_IF
    62 #ifdef EC_DEBUG_IF
    63     if (ec_debug_init(&device->dbg)) {
    63     if (ec_debug_init(&device->dbg)) {
    64         EC_ERR("Failed to init debug device!\n");
    64         EC_ERR("Failed to init debug device!\n");
    65         goto out_return;
    65         goto out_return;
    66     }
    66     }
    67 #endif
    67 #endif
    68 
    68 
    69     if (!(device->tx_skb = dev_alloc_skb(ETH_FRAME_LEN))) {
    69     if (!(device->tx_skb = dev_alloc_skb(ETH_FRAME_LEN))) {
    70         EC_ERR("Error allocating device socket buffer!\n");
    70         EC_ERR("Error allocating device socket buffer!\n");
    71 #ifdef EC_DBG_IF
    71 #ifdef EC_DEBUG_IF
    72         goto out_debug;
    72         goto out_debug;
    73 #else
    73 #else
    74         goto out_return;
    74         goto out_return;
    75 #endif
    75 #endif
    76     }
    76     }
    82     memset(device->eth->h_dest, 0xFF, ETH_ALEN);
    82     memset(device->eth->h_dest, 0xFF, ETH_ALEN);
    83 
    83 
    84     ec_device_detach(device); // resets remaining fields
    84     ec_device_detach(device); // resets remaining fields
    85     return 0;
    85     return 0;
    86 
    86 
    87 #ifdef EC_DBG_IF
    87 #ifdef EC_DEBUG_IF
    88  out_debug:
    88  out_debug:
    89     ec_debug_clear(&device->dbg);
    89     ec_debug_clear(&device->dbg);
    90 #endif
    90 #endif
    91  out_return:
    91  out_return:
    92     return -1;
    92     return -1;
   100 
   100 
   101 void ec_device_clear(ec_device_t *device /**< EtherCAT device */)
   101 void ec_device_clear(ec_device_t *device /**< EtherCAT device */)
   102 {
   102 {
   103     if (device->open) ec_device_close(device);
   103     if (device->open) ec_device_close(device);
   104     dev_kfree_skb(device->tx_skb);
   104     dev_kfree_skb(device->tx_skb);
   105 #ifdef EC_DBG_IF
   105 #ifdef EC_DEBUG_IF
   106     ec_debug_clear(&device->dbg);
   106     ec_debug_clear(&device->dbg);
   107 #endif
   107 #endif
   108 }
   108 }
   109 
   109 
   110 /*****************************************************************************/
   110 /*****************************************************************************/
   232     if (unlikely(device->master->debug_level > 1)) {
   232     if (unlikely(device->master->debug_level > 1)) {
   233         EC_DBG("sending frame:\n");
   233         EC_DBG("sending frame:\n");
   234         ec_print_data(device->tx_skb->data + ETH_HLEN, size);
   234         ec_print_data(device->tx_skb->data + ETH_HLEN, size);
   235     }
   235     }
   236 
   236 
   237 #ifdef EC_DBG_IF
   237 #ifdef EC_DEBUG_IF
   238     ec_debug_send(&device->dbg, device->tx_skb->data, ETH_HLEN + size);
   238     ec_debug_send(&device->dbg, device->tx_skb->data, ETH_HLEN + size);
   239 #endif
   239 #endif
   240 
   240 
   241     // start sending
   241     // start sending
   242     device->dev->hard_start_xmit(device->tx_skb, device->dev);
   242     device->dev->hard_start_xmit(device->tx_skb, device->dev);
   281         EC_DBG("Received frame:\n");
   281         EC_DBG("Received frame:\n");
   282         ec_print_data_diff(device->tx_skb->data + ETH_HLEN,
   282         ec_print_data_diff(device->tx_skb->data + ETH_HLEN,
   283                            data + ETH_HLEN, size - ETH_HLEN);
   283                            data + ETH_HLEN, size - ETH_HLEN);
   284     }
   284     }
   285 
   285 
   286 #ifdef EC_DBG_IF
   286 #ifdef EC_DEBUG_IF
   287     ec_debug_send(&device->dbg, data, size);
   287     ec_debug_send(&device->dbg, data, size);
   288 #endif
   288 #endif
   289 
   289 
   290     ec_master_receive_datagrams(device->master,
   290     ec_master_receive_datagrams(device->master,
   291                                 data + ETH_HLEN,
   291                                 data + ETH_HLEN,