Exemplo n.º 1
0
uint16_t network_device_read() {
  uint16_t ret = 0;
  int i;
  packet_t *packet = 0;
  //if (xxx) DBG("device read");

  vicDisable(INT_CHANNEL_USB);
  if (!RING_IS_EMPTY(receive_ring_head, receive_ring_tail, RECEIVE_RING_SIZE)) {
    packet = &receive_ring[receive_ring_head];
    if (packet->size == 0) packet = 0;
  }
  vicEnable(INT_CHANNEL_USB);

  if (packet) {
    /* we got ip packet, copy it and notify uip framework */
    //ETH_DEV_DBG_INFO("Got a packet!");
    DBG("Got a packet! (%d bytes)",packet->size);
    packet = &receive_ring[receive_ring_head];
    for (i=0; i<packet->size; i++) {
      uip_buf[i] = packet->data[i];
      //packet->data[i] = 0;
    }
    ret = packet->size;
    packet->size = 0;

    vicDisable(INT_CHANNEL_USB);
    RING_INC(receive_ring_head, RECEIVE_RING_SIZE);
    vicEnable(INT_CHANNEL_USB);
  }
  return ret;
}
Exemplo n.º 2
0
uint16_t network_device_read()
{
  uint16_t ret = 0;
  int i;
  packet_t *packet;
  if (!RING_IS_EMPTY(receive_ring_head, receive_ring_tail, RECEIVE_RING_SIZE)) {
    /* we got ip packet, copy it and notify uip framework */
    packet = &receive_ring[receive_ring_head];
    for (i=0; i<packet->transferred; i++) {
      uip_buf[i] = packet->data[i];
      packet->data[i] = 0;
    }
    ret = packet->transferred;
    packet->transferred = 0;
    RING_INC(receive_ring_head, RECEIVE_RING_SIZE);
  }
  return ret;
}