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 /** |