diff options
Diffstat (limited to 'bootloaders/nuevo_diskloader/src/USBAPI.h')
| -rw-r--r-- | bootloaders/nuevo_diskloader/src/USBAPI.h | 166 | 
1 files changed, 166 insertions, 0 deletions
| diff --git a/bootloaders/nuevo_diskloader/src/USBAPI.h b/bootloaders/nuevo_diskloader/src/USBAPI.h new file mode 100644 index 0000000..4bb1e23 --- /dev/null +++ b/bootloaders/nuevo_diskloader/src/USBAPI.h @@ -0,0 +1,166 @@ + + +#ifndef __USBAPI__ +#define __USBAPI__ + +#if defined(USBCON) + +//================================================================================ +//================================================================================ +//	USB + +class USB_ +{ +public: +	USB_(); +	bool configured(); + +	void attach(); +	void detach();	// Serial port goes down too... +	void poll(); +}; +extern USB_ USB; + +//================================================================================ +//================================================================================ +//	Serial over CDC (Serial1 is the physical port) + +class Serial_ +{ +public: +	void begin(uint16_t baud_count); +	void end(void); + +	virtual int available(void); +	virtual int peek(void); +	virtual int read(void); +	virtual void flush(void); +	virtual size_t write(uint8_t); +}; +extern Serial_ Serial; + +//================================================================================ +//================================================================================ +//	Mouse + +#define MOUSE_LEFT 1 +#define MOUSE_RIGHT 2 +#define MOUSE_MIDDLE 4 +#define MOUSE_ALL (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE) + +class Mouse_ +{ +private: +	uint8_t _buttons; +	void buttons(uint8_t b); +public: +	Mouse_(); +	void click(uint8_t b = MOUSE_LEFT); +	void move(signed char x, signed char y, signed char wheel = 0);	 +	void press(uint8_t b = MOUSE_LEFT);		// press LEFT by default +	void release(uint8_t b = MOUSE_LEFT);	// release LEFT by default +	bool isPressed(uint8_t b = MOUSE_ALL);	// check all buttons by default +}; +extern Mouse_ Mouse; + +//================================================================================ +//================================================================================ +//	Keyboard + +#define KEY_MODIFIER_LEFT_CTRL		0x01 +#define KEY_MODIFIER_LEFT_SHIFT		0x02 +#define KEY_MODIFIER_LEFT_ALT		0x04 +#define KEY_MODIFIER_LEFT_GUI		0x08 +#define KEY_MODIFIER_RIGHT_CTRL		0x010 +#define KEY_MODIFIER_RIGHT_SHIFT	0x020 +#define KEY_MODIFIER_RIGHT_ALT		0x040 +#define KEY_MODIFIER_RIGHT_GUI		0x080 + +//	Low level key report: up to 6 keys and shift, ctrl etc at once +typedef struct +{ +	uint8_t modifiers; +	uint8_t reserved; +	uint8_t keys[6]; +} KeyReport; + +//	Map a character into a key report +//	Called from Print to map text to keycodes +class KeyMap +{ +public: +	virtual void charToKey(int c, KeyReport* keyReport) = 0; +}; + +//	 +class Keyboard_  +{ +private: +	KeyMap* _keyMap; +	void sendReport(KeyReport* keys); +	void setKeyMap(KeyMap* keyMap);	 +public: +	Keyboard_(); +	virtual size_t write(uint8_t); +}; +extern Keyboard_ Keyboard; + +//================================================================================ +//================================================================================ +//	Low level API + +typedef struct +{ +	uint8_t bmRequestType; +	uint8_t bRequest; +	uint8_t wValueL; +	uint8_t wValueH; +	uint16_t wIndex; +	uint16_t wLength; +} Setup; + +//================================================================================ +//================================================================================ +//	HID 'Driver' + +int		HID_GetInterface(uint8_t* interfaceNum); +int		HID_GetDescriptor(int i); +bool	HID_Setup(Setup& setup); +void	HID_SendReport(uint8_t id, const void* data, int len); + +//================================================================================ +//================================================================================ +//	MSC 'Driver' + +int		MSC_GetInterface(uint8_t* interfaceNum); +int		MSC_GetDescriptor(int i); +bool	MSC_Setup(Setup& setup); +bool	MSC_Data(uint8_t rx,uint8_t tx); + +//================================================================================ +//================================================================================ +//	CSC 'Driver' + +int		CDC_GetInterface(uint8_t* interfaceNum); +int		CDC_GetDescriptor(int i); +bool	CDC_Setup(Setup& setup); + +//================================================================================ +//================================================================================ + +#define TRANSFER_PGM		0x80 +#define TRANSFER_RELEASE	0x40 +#define TRANSFER_ZERO		0x20 + +int USB_SendControl(uint8_t flags, const void* d, int len); +int USB_RecvControl(void* d, int len); + +uint8_t	USB_Available(uint8_t ep); +int USB_Send(uint8_t ep, const void* data, int len);	// blocking +int USB_Recv(uint8_t ep, void* data, int len);		// non-blocking +int USB_Recv(uint8_t ep);							// non-blocking +void USB_Flush(uint8_t ep); + +#endif + +#endif /* if defined(USBCON) */
\ No newline at end of file | 
