<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.ywrobot.net/index.php?action=history&amp;feed=atom&amp;title=USBAPI.h</id>
		<title>USBAPI.h - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.ywrobot.net/index.php?action=history&amp;feed=atom&amp;title=USBAPI.h"/>
		<link rel="alternate" type="text/html" href="http://wiki.ywrobot.net/index.php?title=USBAPI.h&amp;action=history"/>
		<updated>2026-05-14T11:01:35Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://wiki.ywrobot.net/index.php?title=USBAPI.h&amp;diff=84&amp;oldid=prev</id>
		<title>YWrobot CYB：创建页面，内容为“&lt;pre style=&quot;color:blue&quot;&gt;   #ifndef __USBAPI__ #define __USBAPI__  #if defined(USBCON)  //============================================================================...”</title>
		<link rel="alternate" type="text/html" href="http://wiki.ywrobot.net/index.php?title=USBAPI.h&amp;diff=84&amp;oldid=prev"/>
				<updated>2016-04-25T02:15:57Z</updated>
		
		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;lt;pre style=&amp;quot;color:blue&amp;quot;&amp;gt;   #ifndef __USBAPI__ #define __USBAPI__  #if defined(USBCON)  //============================================================================...”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre style=&amp;quot;color:blue&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#ifndef __USBAPI__&lt;br /&gt;
#define __USBAPI__&lt;br /&gt;
&lt;br /&gt;
#if defined(USBCON)&lt;br /&gt;
&lt;br /&gt;
//================================================================================&lt;br /&gt;
//================================================================================&lt;br /&gt;
//	USB&lt;br /&gt;
&lt;br /&gt;
class USBDevice_&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
	USBDevice_();&lt;br /&gt;
	bool configured();&lt;br /&gt;
&lt;br /&gt;
	void attach();&lt;br /&gt;
	void detach();	// Serial port goes down too...&lt;br /&gt;
	void poll();&lt;br /&gt;
};&lt;br /&gt;
extern USBDevice_ USBDevice;&lt;br /&gt;
&lt;br /&gt;
//================================================================================&lt;br /&gt;
//================================================================================&lt;br /&gt;
//	Serial over CDC (Serial1 is the physical port)&lt;br /&gt;
&lt;br /&gt;
class Serial_ : public Stream&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
	ring_buffer *_cdc_rx_buffer;&lt;br /&gt;
public:&lt;br /&gt;
	void begin(uint16_t baud_count);&lt;br /&gt;
	void end(void);&lt;br /&gt;
&lt;br /&gt;
	virtual int available(void);&lt;br /&gt;
	virtual void accept(void);&lt;br /&gt;
	virtual int peek(void);&lt;br /&gt;
	virtual int read(void);&lt;br /&gt;
	virtual void flush(void);&lt;br /&gt;
	virtual size_t write(uint8_t);&lt;br /&gt;
	using Print::write; // pull in write(str) and write(buf, size) from Print&lt;br /&gt;
	operator bool();&lt;br /&gt;
};&lt;br /&gt;
extern Serial_ Serial;&lt;br /&gt;
&lt;br /&gt;
//================================================================================&lt;br /&gt;
//================================================================================&lt;br /&gt;
//	Mouse&lt;br /&gt;
&lt;br /&gt;
#define MOUSE_LEFT 1&lt;br /&gt;
#define MOUSE_RIGHT 2&lt;br /&gt;
#define MOUSE_MIDDLE 4&lt;br /&gt;
#define MOUSE_ALL (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE)&lt;br /&gt;
&lt;br /&gt;
class Mouse_&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
	uint8_t _buttons;&lt;br /&gt;
	void buttons(uint8_t b);&lt;br /&gt;
public:&lt;br /&gt;
	Mouse_(void);&lt;br /&gt;
	void begin(void);&lt;br /&gt;
	void end(void);&lt;br /&gt;
	void click(uint8_t b = MOUSE_LEFT);&lt;br /&gt;
	void move(signed char x, signed char y, signed char wheel = 0);	&lt;br /&gt;
	void press(uint8_t b = MOUSE_LEFT);		// press LEFT by default&lt;br /&gt;
	void release(uint8_t b = MOUSE_LEFT);	// release LEFT by default&lt;br /&gt;
	bool isPressed(uint8_t b = MOUSE_LEFT);	// check LEFT by default&lt;br /&gt;
};&lt;br /&gt;
extern Mouse_ Mouse;&lt;br /&gt;
&lt;br /&gt;
//================================================================================&lt;br /&gt;
//================================================================================&lt;br /&gt;
//	Keyboard&lt;br /&gt;
&lt;br /&gt;
#define KEY_LEFT_CTRL		0x80&lt;br /&gt;
#define KEY_LEFT_SHIFT		0x81&lt;br /&gt;
#define KEY_LEFT_ALT		0x82&lt;br /&gt;
#define KEY_LEFT_GUI		0x83&lt;br /&gt;
#define KEY_RIGHT_CTRL		0x84&lt;br /&gt;
#define KEY_RIGHT_SHIFT		0x85&lt;br /&gt;
#define KEY_RIGHT_ALT		0x86&lt;br /&gt;
#define KEY_RIGHT_GUI		0x87&lt;br /&gt;
&lt;br /&gt;
#define KEY_UP_ARROW		0xDA&lt;br /&gt;
#define KEY_DOWN_ARROW		0xD9&lt;br /&gt;
#define KEY_LEFT_ARROW		0xD8&lt;br /&gt;
#define KEY_RIGHT_ARROW		0xD7&lt;br /&gt;
#define KEY_BACKSPACE		0xB2&lt;br /&gt;
#define KEY_TAB				0xB3&lt;br /&gt;
#define KEY_RETURN			0xB0&lt;br /&gt;
#define KEY_ESC				0xB1&lt;br /&gt;
#define KEY_INSERT			0xD1&lt;br /&gt;
#define KEY_DELETE			0xD4&lt;br /&gt;
#define KEY_PAGE_UP			0xD3&lt;br /&gt;
#define KEY_PAGE_DOWN		0xD6&lt;br /&gt;
#define KEY_HOME			0xD2&lt;br /&gt;
#define KEY_END				0xD5&lt;br /&gt;
#define KEY_CAPS_LOCK		0xC1&lt;br /&gt;
#define KEY_F1				0xC2&lt;br /&gt;
#define KEY_F2				0xC3&lt;br /&gt;
#define KEY_F3				0xC4&lt;br /&gt;
#define KEY_F4				0xC5&lt;br /&gt;
#define KEY_F5				0xC6&lt;br /&gt;
#define KEY_F6				0xC7&lt;br /&gt;
#define KEY_F7				0xC8&lt;br /&gt;
#define KEY_F8				0xC9&lt;br /&gt;
#define KEY_F9				0xCA&lt;br /&gt;
#define KEY_F10				0xCB&lt;br /&gt;
#define KEY_F11				0xCC&lt;br /&gt;
#define KEY_F12				0xCD&lt;br /&gt;
&lt;br /&gt;
//	Low level key report: up to 6 keys and shift, ctrl etc at once&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
	uint8_t modifiers;&lt;br /&gt;
	uint8_t reserved;&lt;br /&gt;
	uint8_t keys[6];&lt;br /&gt;
} KeyReport;&lt;br /&gt;
&lt;br /&gt;
class Keyboard_ : public Print&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
	KeyReport _keyReport;&lt;br /&gt;
	void sendReport(KeyReport* keys);&lt;br /&gt;
public:&lt;br /&gt;
	Keyboard_(void);&lt;br /&gt;
	void begin(void);&lt;br /&gt;
	void end(void);&lt;br /&gt;
	virtual size_t write(uint8_t k);&lt;br /&gt;
	virtual size_t press(uint8_t k);&lt;br /&gt;
	virtual size_t release(uint8_t k);&lt;br /&gt;
	virtual void releaseAll(void);&lt;br /&gt;
};&lt;br /&gt;
extern Keyboard_ Keyboard;&lt;br /&gt;
&lt;br /&gt;
//================================================================================&lt;br /&gt;
//================================================================================&lt;br /&gt;
//	Low level API&lt;br /&gt;
&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
	uint8_t bmRequestType;&lt;br /&gt;
	uint8_t bRequest;&lt;br /&gt;
	uint8_t wValueL;&lt;br /&gt;
	uint8_t wValueH;&lt;br /&gt;
	uint16_t wIndex;&lt;br /&gt;
	uint16_t wLength;&lt;br /&gt;
} Setup;&lt;br /&gt;
&lt;br /&gt;
//================================================================================&lt;br /&gt;
//================================================================================&lt;br /&gt;
//	HID 'Driver'&lt;br /&gt;
&lt;br /&gt;
int		HID_GetInterface(uint8_t* interfaceNum);&lt;br /&gt;
int		HID_GetDescriptor(int i);&lt;br /&gt;
bool	HID_Setup(Setup&amp;amp; setup);&lt;br /&gt;
void	HID_SendReport(uint8_t id, const void* data, int len);&lt;br /&gt;
&lt;br /&gt;
//================================================================================&lt;br /&gt;
//================================================================================&lt;br /&gt;
//	MSC 'Driver'&lt;br /&gt;
&lt;br /&gt;
int		MSC_GetInterface(uint8_t* interfaceNum);&lt;br /&gt;
int		MSC_GetDescriptor(int i);&lt;br /&gt;
bool	MSC_Setup(Setup&amp;amp; setup);&lt;br /&gt;
bool	MSC_Data(uint8_t rx,uint8_t tx);&lt;br /&gt;
&lt;br /&gt;
//================================================================================&lt;br /&gt;
//================================================================================&lt;br /&gt;
//	CSC 'Driver'&lt;br /&gt;
&lt;br /&gt;
int		CDC_GetInterface(uint8_t* interfaceNum);&lt;br /&gt;
int		CDC_GetDescriptor(int i);&lt;br /&gt;
bool	CDC_Setup(Setup&amp;amp; setup);&lt;br /&gt;
&lt;br /&gt;
//================================================================================&lt;br /&gt;
//================================================================================&lt;br /&gt;
&lt;br /&gt;
#define TRANSFER_PGM		0x80&lt;br /&gt;
#define TRANSFER_RELEASE	0x40&lt;br /&gt;
#define TRANSFER_ZERO		0x20&lt;br /&gt;
&lt;br /&gt;
int USB_SendControl(uint8_t flags, const void* d, int len);&lt;br /&gt;
int USB_RecvControl(void* d, int len);&lt;br /&gt;
&lt;br /&gt;
uint8_t	USB_Available(uint8_t ep);&lt;br /&gt;
int USB_Send(uint8_t ep, const void* data, int len);	// blocking&lt;br /&gt;
int USB_Recv(uint8_t ep, void* data, int len);		// non-blocking&lt;br /&gt;
int USB_Recv(uint8_t ep);							// non-blocking&lt;br /&gt;
void USB_Flush(uint8_t ep);&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#endif /* if defined(USBCON) */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>YWrobot CYB</name></author>	</entry>

	</feed>