CDC/ECM driver for mbed, based on USBDevice by mbed-official. Uses PicoTCP to access Ethernet USB device. License: GPLv2
Fork of USB_Ethernet by
modules/pico_dev_loop.c
- Committer:
- daniele
- Date:
- 2013-08-03
- Revision:
- 2:540f6e142d59
File content as of revision 2:540f6e142d59:
/********************************************************************* PicoTCP. Copyright (c) 2012 TASS Belgium NV. Some rights reserved. See LICENSE and COPYING for usage. Authors: Daniele Lacamera *********************************************************************/ #include "pico_device.h" #include "pico_dev_loop.h" #include "pico_stack.h" #define LOOP_MTU 1500 static uint8_t l_buf[LOOP_MTU]; static int l_bufsize = 0; static int pico_loop_send(struct pico_device *dev, void *buf, int len) { if (len > LOOP_MTU) return 0; if (l_bufsize == 0) { memcpy(l_buf, buf, len); l_bufsize+=len; return len; } return 0; } static int pico_loop_poll(struct pico_device *dev, int loop_score) { if (loop_score <= 0) return 0; if (l_bufsize > 0) { pico_stack_recv(dev, l_buf, l_bufsize); l_bufsize = 0; loop_score--; } return loop_score; } /* Public interface: create/destroy. */ void pico_loop_destroy(struct pico_device *dev) { } struct pico_device *pico_loop_create(void) { struct pico_device *loop = pico_zalloc(sizeof(struct pico_device)); if (!loop) return NULL; if( 0 != pico_device_init((struct pico_device *)loop, "loop", NULL)) { dbg ("Loop init failed.\n"); pico_loop_destroy((struct pico_device *)loop); return NULL; } loop->send = pico_loop_send; loop->poll = pico_loop_poll; loop->destroy = pico_loop_destroy; dbg("Device %s created.\n", loop->name); return (struct pico_device *)loop; }