master/device.c
branchstable-1.1
changeset 1731 60b2aad9d40b
parent 1716 9440f4ff25c7
child 398 ff37601361a8
equal deleted inserted replaced
1730:27a1aee7e254 1731:60b2aad9d40b
    69     device->module = module;
    69     device->module = module;
    70 
    70 
    71     device->open = 0;
    71     device->open = 0;
    72     device->link_state = 0; // down
    72     device->link_state = 0; // down
    73 
    73 
       
    74 #ifdef EC_DBG_IF
    74     if (ec_debug_init(&device->dbg)) {
    75     if (ec_debug_init(&device->dbg)) {
    75         EC_ERR("Failed to init debug device!\n");
    76         EC_ERR("Failed to init debug device!\n");
    76         goto out_return;
    77         goto out_return;
    77     }
    78     }
       
    79 #endif
    78 
    80 
    79     if (!(device->tx_skb = dev_alloc_skb(ETH_FRAME_LEN))) {
    81     if (!(device->tx_skb = dev_alloc_skb(ETH_FRAME_LEN))) {
    80         EC_ERR("Error allocating device socket buffer!\n");
    82         EC_ERR("Error allocating device socket buffer!\n");
       
    83 #ifdef EC_DBG_IF
    81         goto out_debug;
    84         goto out_debug;
       
    85 #else
       
    86         goto out_return;
       
    87 #endif
    82     }
    88     }
    83 
    89 
    84     device->tx_skb->dev = net_dev;
    90     device->tx_skb->dev = net_dev;
    85 
    91 
    86     // add Ethernet-II-header
    92     // add Ethernet-II-header
    90     memcpy(eth->h_source, net_dev->dev_addr, net_dev->addr_len);
    96     memcpy(eth->h_source, net_dev->dev_addr, net_dev->addr_len);
    91     memset(eth->h_dest, 0xFF, net_dev->addr_len);
    97     memset(eth->h_dest, 0xFF, net_dev->addr_len);
    92 
    98 
    93     return 0;
    99     return 0;
    94 
   100 
       
   101 #ifdef EC_DBG_IF
    95  out_debug:
   102  out_debug:
    96     ec_debug_clear(&device->dbg);
   103     ec_debug_clear(&device->dbg);
       
   104 #endif
    97  out_return:
   105  out_return:
    98     return -1;
   106     return -1;
    99 }
   107 }
   100 
   108 
   101 /*****************************************************************************/
   109 /*****************************************************************************/
   106 
   114 
   107 void ec_device_clear(ec_device_t *device /**< EtherCAT device */)
   115 void ec_device_clear(ec_device_t *device /**< EtherCAT device */)
   108 {
   116 {
   109     if (device->open) ec_device_close(device);
   117     if (device->open) ec_device_close(device);
   110     if (device->tx_skb) dev_kfree_skb(device->tx_skb);
   118     if (device->tx_skb) dev_kfree_skb(device->tx_skb);
       
   119 #ifdef EC_DBG_IF
   111     ec_debug_clear(&device->dbg);
   120     ec_debug_clear(&device->dbg);
       
   121 #endif
   112 }
   122 }
   113 
   123 
   114 /*****************************************************************************/
   124 /*****************************************************************************/
   115 
   125 
   116 /**
   126 /**
   199     if (unlikely(device->master->debug_level > 1)) {
   209     if (unlikely(device->master->debug_level > 1)) {
   200         EC_DBG("sending frame:\n");
   210         EC_DBG("sending frame:\n");
   201         ec_print_data(device->tx_skb->data + ETH_HLEN, size);
   211         ec_print_data(device->tx_skb->data + ETH_HLEN, size);
   202     }
   212     }
   203 
   213 
       
   214 #ifdef EC_DBG_IF
   204     ec_debug_send(&device->dbg, device->tx_skb->data, ETH_HLEN + size);
   215     ec_debug_send(&device->dbg, device->tx_skb->data, ETH_HLEN + size);
       
   216 #endif
   205 
   217 
   206     // start sending
   218     // start sending
   207     device->dev->hard_start_xmit(device->tx_skb, device->dev);
   219     device->dev->hard_start_xmit(device->tx_skb, device->dev);
   208 }
   220 }
   209 
   221 
   241         EC_DBG("Received frame:\n");
   253         EC_DBG("Received frame:\n");
   242         ec_print_data_diff(device->tx_skb->data + ETH_HLEN,
   254         ec_print_data_diff(device->tx_skb->data + ETH_HLEN,
   243                            data + ETH_HLEN, size - ETH_HLEN);
   255                            data + ETH_HLEN, size - ETH_HLEN);
   244     }
   256     }
   245 
   257 
       
   258 #ifdef EC_DBG_IF
   246     ec_debug_send(&device->dbg, data, size);
   259     ec_debug_send(&device->dbg, data, size);
       
   260 #endif
   247 
   261 
   248     ec_master_receive_datagrams(device->master,
   262     ec_master_receive_datagrams(device->master,
   249                                 data + ETH_HLEN,
   263                                 data + ETH_HLEN,
   250                                 size - ETH_HLEN);
   264                                 size - ETH_HLEN);
   251 }
   265 }