re-enabling serial
[clinton/Smoothieware.git] / gcc4mbed / samples / MSTest / USBDevice / USBSERIAL / USBSerial.h
CommitLineData
cd011f58
AW
1/* Copyright (c) 2010-2011 mbed.org, MIT License\r
2*\r
3* Permission is hereby granted, free of charge, to any person obtaining a copy of this software\r
4* and associated documentation files (the "Software"), to deal in the Software without\r
5* restriction, including without limitation the rights to use, copy, modify, merge, publish,\r
6* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the\r
7* Software is furnished to do so, subject to the following conditions:\r
8*\r
9* The above copyright notice and this permission notice shall be included in all copies or\r
10* substantial portions of the Software.\r
11*\r
12* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\r
13* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
14* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r
15* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
16* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
17*/\r
18\r
19#ifndef USBSERIAL_H\r
20#define USBSERIAL_H\r
21\r
22#include "USBCDC.h"\r
23#include "Stream.h"\r
24#include "CircBuffer.h"\r
25\r
26\r
27/**\r
28* USBSerial example\r
29*\r
30* @code\r
31* #include "mbed.h"\r
32* #include "USBSerial.h"\r
33*\r
34* //Virtual serial port over USB\r
35* USBSerial serial;\r
36*\r
37* int main(void) {\r
38*\r
39* while(1)\r
40* {\r
41* serial.printf("I am a virtual serial port\n");\r
42* wait(1);\r
43* }\r
44* }\r
45* @endcode\r
46*/\r
47class USBSerial: public USBCDC, public Stream {\r
48public:\r
49\r
50 /**\r
51 * Constructor\r
52 *\r
53 * @param vendor_id Your vendor_id (default: 0x1f00)\r
54 * @param product_id Your product_id (default: 0x2012)\r
55 * @param product_release Your preoduct_release (default: 0x0001)\r
56 *\r
57 */\r
58 USBSerial(uint16_t vendor_id = 0x1f00, uint16_t product_id = 0x2012, uint16_t product_release = 0x0001): USBCDC(vendor_id, product_id, product_release), buf(128){ };\r
59\r
60\r
61 /**\r
62 * Send a character. You can use puts, printf.\r
63 *\r
64 * @param c character to be sent\r
65 * @returns true if there is no error, false otherwise\r
66 */\r
67 virtual int _putc(int c);\r
68 \r
69 /**\r
70 * Read a character: blocking\r
71 *\r
72 * @returns character read\r
73 */\r
74 virtual int _getc();\r
75 \r
76 /**\r
77 * Check the number of bytes available.\r
78 *\r
79 * @returns the number of bytes available\r
80 */\r
81 uint8_t available(); \r
82 \r
83 /**\r
84 * Write a block of data. \r
85 *\r
86 * For more efficiency, a block of size 64 (maximum size of a bulk endpoint) has to be written.\r
87 *\r
88 * @param buf pointer on data which will be written\r
89 * @param size size of the buffer. The maximum size of a block is limited by the size of the endpoint (64 bytes)\r
90 *\r
91 * @returns true if successfull\r
92 */\r
93 bool writeBlock(uint8_t * buf, uint16_t size);\r
94\r
95 /**\r
96 * Attach a member function to call when a packet is received. \r
97 *\r
98 * @param tptr pointer to the object to call the member function on\r
99 * @param mptr pointer to the member function to be called\r
100 */\r
101 template<typename T>\r
102 void attach(T* tptr, void (T::*mptr)(void)) {\r
103 if((mptr != NULL) && (tptr != NULL)) {\r
104 rx.attach(tptr, mptr);\r
105 }\r
106 }\r
107\r
108 /**\r
109 * Attach a callback called when a packet is received\r
110 *\r
111 * @param fptr function pointer\r
112 */\r
113 void attach(void (*fn)(void)) {\r
114 if(fn != NULL) {\r
115 rx.attach(fn);\r
116 }\r
117 }\r
118\r
119\r
120protected:\r
121 virtual bool EP2_OUT_callback();\r
122\r
123private:\r
124 FunctionPointer rx;\r
125 CircBuffer<uint8_t> buf;\r
126};\r
127\r
128#endif\r