diff options
Diffstat (limited to 'bootloaders/nuevo_diskloader/src')
| -rw-r--r-- | bootloaders/nuevo_diskloader/src/DiskLoader.cpp | 21 | ||||
| -rw-r--r-- | bootloaders/nuevo_diskloader/src/Platform.h | 60 | ||||
| -rw-r--r-- | bootloaders/nuevo_diskloader/src/USBAPI.h | 166 | 
3 files changed, 247 insertions, 0 deletions
| diff --git a/bootloaders/nuevo_diskloader/src/DiskLoader.cpp b/bootloaders/nuevo_diskloader/src/DiskLoader.cpp new file mode 100644 index 0000000..50259fc --- /dev/null +++ b/bootloaders/nuevo_diskloader/src/DiskLoader.cpp @@ -0,0 +1,21 @@ +/* + *  DiskLoader.cpp + */ + +#include "Platform.h" + + +int main()  +{ +	wdt_disable(); +	BOARD_INIT(); +	TX_LED_OFF(); +	RX_LED_OFF(); +	L_LED_OFF(); +//	USB.attach(); +	 +	for (;;)  +	{ +		 +	} +} diff --git a/bootloaders/nuevo_diskloader/src/Platform.h b/bootloaders/nuevo_diskloader/src/Platform.h new file mode 100644 index 0000000..e300690 --- /dev/null +++ b/bootloaders/nuevo_diskloader/src/Platform.h @@ -0,0 +1,60 @@ +/* + *  Platform.h + */ + +#ifndef __PLATFORM_H__ +#define __PLATFORM_H__ + +#include <inttypes.h> +#include <avr/io.h> +#include <avr/pgmspace.h> +#include <avr/boot.h> +#include <util/delay.h> +#include <avr/interrupt.h> +#include <avr/wdt.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#ifdef __cplusplus +extern "C"{ +#endif + +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned long u32; + +#define CDC_ENABLED + +//#include "USBDesc.h" +//#include "../../../cores/arduino/USBCore.h" +#include "USBAPI.h" + +#define CPU_PRESCALE(n)	(CLKPR = 0x80, CLKPR = (n)) +#define DISABLE_JTAG()  MCUCR = (1 << JTD) | (1 << IVCE) | (0 << PUD); MCUCR = (1 << JTD) | (0 << IVSEL) | (0 << IVCE) | (0 << PUD) + +#define BOARD_INIT()	DDRC |= (1<<7); DDRB |= (1<<0); DDRE |= (1<<6); CPU_PRESCALE(0); DISABLE_JTAG();	// for XXX-series boards +//#define BOARD_INIT()	DDRC |= (1<<7); DDRB |= (1<<0); DDRD |= (1<<5); CPU_PRESCALE(0); DISABLE_JTAG();	// for non-XXX boards + +// for XXX-series boards +#define TX_LED_OFF()		PORTE |= (1<<6) +#define TX_LED_ON()			PORTE &= ~(1<<6) +#define RX_LED_OFF()		PORTB |= (1<<0) +#define RX_LED_ON()			PORTB &= ~(1<<0) +#define L_LED_OFF()			PORTC &= ~(1<<7) +#define L_LED_ON()			PORTC |= (1<<7) + +// these for non-XXX boards +//#define LED0			PORTC &= ~(1<<7) +//#define LED1			PORTC |= (1<<7) +//#define TXLED0			PORTD |= (1<<5) +//#define TXLED1			PORTD &= ~(1<<5) +//#define RXLED0			PORTB |= (1<<0) +//#define RXLED1			PORTB &= ~(1<<0) + +#ifdef __cplusplus +}	/* extern "C"{ */ +#endif  + +#endif /* __PLATFORM_H__ */ 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 | 
