master/device.c
changeset 231 767548c75bf3
parent 211 c684b6b7adaf
child 246 0bf7c769de06
equal deleted inserted replaced
230:382bdb9138ec 231:767548c75bf3
    59     device->module = module;
    59     device->module = module;
    60 
    60 
    61     device->open = 0;
    61     device->open = 0;
    62     device->link_state = 0; // down
    62     device->link_state = 0; // down
    63 
    63 
       
    64     if (ec_debug_init(&device->dbg)) {
       
    65         EC_ERR("Failed to init debug device!\n");
       
    66         goto out_return;
       
    67     }
       
    68 
    64     if (!(device->tx_skb = dev_alloc_skb(ETH_FRAME_LEN))) {
    69     if (!(device->tx_skb = dev_alloc_skb(ETH_FRAME_LEN))) {
    65         EC_ERR("Error allocating device socket buffer!\n");
    70         EC_ERR("Error allocating device socket buffer!\n");
    66         return -1;
    71         goto out_debug;
    67     }
    72     }
    68 
    73 
    69     device->tx_skb->dev = net_dev;
    74     device->tx_skb->dev = net_dev;
    70 
    75 
    71     // add Ethernet-II-header
    76     // add Ethernet-II-header
    74     eth->h_proto = htons(0x88A4);
    79     eth->h_proto = htons(0x88A4);
    75     memcpy(eth->h_source, net_dev->dev_addr, net_dev->addr_len);
    80     memcpy(eth->h_source, net_dev->dev_addr, net_dev->addr_len);
    76     memset(eth->h_dest, 0xFF, net_dev->addr_len);
    81     memset(eth->h_dest, 0xFF, net_dev->addr_len);
    77 
    82 
    78     return 0;
    83     return 0;
       
    84 
       
    85  out_debug:
       
    86     ec_debug_clear(&device->dbg);
       
    87  out_return:
       
    88     return -1;
    79 }
    89 }
    80 
    90 
    81 /*****************************************************************************/
    91 /*****************************************************************************/
    82 
    92 
    83 /**
    93 /**
    86 
    96 
    87 void ec_device_clear(ec_device_t *device /**< EtherCAT device */)
    97 void ec_device_clear(ec_device_t *device /**< EtherCAT device */)
    88 {
    98 {
    89     if (device->open) ec_device_close(device);
    99     if (device->open) ec_device_close(device);
    90     if (device->tx_skb) dev_kfree_skb(device->tx_skb);
   100     if (device->tx_skb) dev_kfree_skb(device->tx_skb);
       
   101     ec_debug_clear(&device->dbg);
    91 }
   102 }
    92 
   103 
    93 /*****************************************************************************/
   104 /*****************************************************************************/
    94 
   105 
    95 /**
   106 /**
   177 
   188 
   178     if (unlikely(device->master->debug_level > 1)) {
   189     if (unlikely(device->master->debug_level > 1)) {
   179         EC_DBG("sending frame:\n");
   190         EC_DBG("sending frame:\n");
   180         ec_print_data(device->tx_skb->data + ETH_HLEN, size);
   191         ec_print_data(device->tx_skb->data + ETH_HLEN, size);
   181     }
   192     }
       
   193 
       
   194     ec_debug_send(&device->dbg, device->tx_skb->data, ETH_HLEN + size);
   182 
   195 
   183     // start sending
   196     // start sending
   184     device->dev->hard_start_xmit(device->tx_skb, device->dev);
   197     device->dev->hard_start_xmit(device->tx_skb, device->dev);
   185 }
   198 }
   186 
   199 
   208    and dispatch the received commands to the sending instances.
   221    and dispatch the received commands to the sending instances.
   209    \ingroup DeviceInterface
   222    \ingroup DeviceInterface
   210 */
   223 */
   211 
   224 
   212 void ecdev_receive(ec_device_t *device, /**< EtherCAT device */
   225 void ecdev_receive(ec_device_t *device, /**< EtherCAT device */
   213                    const void *data, /**< pointer to receibed data */
   226                    const void *data, /**< pointer to received data */
   214                    size_t size /**< number of bytes received */
   227                    size_t size /**< number of bytes received */
   215                    )
   228                    )
   216 {
   229 {
   217     if (unlikely(device->master->debug_level > 1)) {
   230     if (unlikely(device->master->debug_level > 1)) {
   218         EC_DBG("Received frame:\n");
   231         EC_DBG("Received frame:\n");
   219         ec_print_data_diff(device->tx_skb->data + ETH_HLEN, data, size);
   232         ec_print_data_diff(device->tx_skb->data + ETH_HLEN,
   220     }
   233                            data + ETH_HLEN, size - ETH_HLEN);
   221 
   234     }
   222     ec_master_receive(device->master, data, size);
   235 
       
   236     ec_debug_send(&device->dbg, data, size);
       
   237 
       
   238     ec_master_receive(device->master, data + ETH_HLEN, size - ETH_HLEN);
   223 }
   239 }
   224 
   240 
   225 /*****************************************************************************/
   241 /*****************************************************************************/
   226 
   242 
   227 /**
   243 /**