diff options
| author | Christian Gmeiner <christian.gmeiner@gmail.com> | 2007-11-30 00:13:00 +0000 |
|---|---|---|
| committer | Christian Gmeiner <christian.gmeiner@gmail.com> | 2007-11-30 00:13:00 +0000 |
| commit | 94be71eab5e7a4c2e5407f7c4c38dc84237f4044 (patch) | |
| tree | f89c0cdaf1922fb091aa43073ab0a59ee55ef0b2 /firmware/usbstack/usb_serial.c | |
| parent | bf2a33485fc99d83ef74c261d092f6b95e040a37 (diff) | |
| download | rockbox-94be71eab5e7a4c2e5407f7c4c38dc84237f4044.zip rockbox-94be71eab5e7a4c2e5407f7c4c38dc84237f4044.tar.gz rockbox-94be71eab5e7a4c2e5407f7c4c38dc84237f4044.tar.bz2 rockbox-94be71eab5e7a4c2e5407f7c4c38dc84237f4044.tar.xz | |
Add a working serial driver to usb stack. At the moment it simply echos back what it gets. You can test it on linux by
0) change relevant defines in usb_core.c
1) modprobe usbserial vendor=0x0781 product=0x7421 debug=1
2) picocom /dev/ttyUSB0
3) look at your logf screen if you build with logf support and enabled LOGF_ENABLE define in usb_serial.c
I also modified usb_core so that storage and serial both can make use the the 'usb_core'-thread. More will come :)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15850 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/usbstack/usb_serial.c')
| -rw-r--r-- | firmware/usbstack/usb_serial.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/firmware/usbstack/usb_serial.c b/firmware/usbstack/usb_serial.c new file mode 100644 index 0000000..5513c56 --- /dev/null +++ b/firmware/usbstack/usb_serial.c @@ -0,0 +1,74 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: $ + * + * Copyright (C) 2007 by Christian Gmeiner + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include "system.h" +#include "usb_core.h" +#include "usb_drv.h" + +//#define LOGF_ENABLE +#include "logf.h" + +static unsigned char _transfer_buffer[16]; +static unsigned char* transfer_buffer; + +/* called by usb_code_init() */ +void usb_serial_init(void) +{ + logf("serial: init"); + transfer_buffer = (void*)UNCACHED_ADDR(&_transfer_buffer); +} + +/* called by usb_core_transfer_complete() */ +void usb_serial_transfer_complete(int endpoint) +{ + switch (endpoint) { + case EP_RX: + logf("serial: %s", transfer_buffer); + + /* re-prime endpoint */ + usb_drv_recv(EP_RX, transfer_buffer, sizeof _transfer_buffer); + + /* echo back :) */ + usb_drv_send(EP_TX, transfer_buffer, sizeof transfer_buffer); + break; + + case EP_TX: + break; + } +} + +/* called by usb_core_control_request() */ +bool usb_serial_control_request(struct usb_ctrlrequest* req) +{ + /* note: interrupt context */ + + bool handled = false; + switch (req->bRequest) { + case USB_REQ_SET_CONFIGURATION: + logf("serial: set config"); + /* prime rx endpoint */ + usb_drv_recv(EP_RX, transfer_buffer, sizeof _transfer_buffer); + handled = true; + break; + + default: + logf("serial: unhandeld req %d", req->bRequest); + } + + return handled; +} |