Updated MicropendousKeyboardTest, VirtualSerial, and VirtualSerial_FreeRTOS firmware demos.
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 51 KiB |
@@ -155,9 +155,9 @@ const USB_Descriptor_String_t PROGMEM LanguageString =
|
||||
*/
|
||||
const USB_Descriptor_String_t PROGMEM ManufacturerString =
|
||||
{
|
||||
.Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
|
||||
.Header = {.Size = USB_STRING_LEN(20), .Type = DTYPE_String},
|
||||
|
||||
.UnicodeString = L"Dean Camera"
|
||||
.UnicodeString = L"www.micropendous.org"
|
||||
};
|
||||
|
||||
/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
|
||||
@@ -166,9 +166,9 @@ const USB_Descriptor_String_t PROGMEM ManufacturerString =
|
||||
*/
|
||||
const USB_Descriptor_String_t PROGMEM ProductString =
|
||||
{
|
||||
.Header = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String},
|
||||
.Header = {.Size = USB_STRING_LEN(24), .Type = DTYPE_String},
|
||||
|
||||
.UnicodeString = L"LUFA Keyboard Demo"
|
||||
.UnicodeString = L"MicropendousKeyboardTest"
|
||||
};
|
||||
|
||||
/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
/*
|
||||
Copyright 2013 Dean Camera (dean [at] fourwalledcubicle [dot] com)
|
||||
|
||||
Modified for MicropendousKeyboardTest by Opendous Inc. 2013-03-16 (www.micropendous.org)
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this
|
||||
software and its documentation for any purpose is hereby granted
|
||||
without fee, provided that the above copyright notice appear in
|
||||
@@ -34,7 +36,7 @@
|
||||
* the demo and is responsible for the initial application hardware configuration.
|
||||
*/
|
||||
|
||||
#include "Keyboard.h"
|
||||
#include "MicropendousKeyboardTest.h"
|
||||
|
||||
/** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */
|
||||
static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)];
|
||||
@@ -87,11 +89,67 @@ void SetupHardware()
|
||||
/* Disable clock division */
|
||||
clock_prescale_set(clock_div_1);
|
||||
|
||||
/* Disable JTAG to allow testing port F */
|
||||
#if ( defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \
|
||||
defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || \
|
||||
defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || \
|
||||
defined(__AVR_ATmega32U6__) )
|
||||
JTAG_DISABLE();
|
||||
#endif
|
||||
|
||||
/* enable Ports based on which IC is being used */
|
||||
/* For more information look over the corresponding AVR's datasheet in the
|
||||
'I/O Ports' Chapter under subheading 'Ports as General Digital I/O' */
|
||||
#if (defined(__AVR_AT90USB162__) || defined(__AVR_AT90USB82__) || \
|
||||
defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__))
|
||||
DDRD = 0;
|
||||
PORTD = 0xFF;
|
||||
DDRB = 0;
|
||||
PORTB = 0xFF;
|
||||
DDRC = 0;
|
||||
PORTC |= (1 << PC2) | (1 << PC4) | (1 << PC5) | (1 << PC6) | (1 << PC7); //only PC2,4,5,6,7 are pins
|
||||
// be careful using PortC as PC0 is used for the Crystal and PC1 is nRESET
|
||||
#endif
|
||||
|
||||
#if (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))
|
||||
DDRD = 0;
|
||||
PORTD = 0xFF;
|
||||
DDRB = 0;
|
||||
PORTB = 0xFF;
|
||||
DDRC = 0;
|
||||
PORTC = (1 << PC6) | (1 << PC7); //only PC6,7 are pins
|
||||
DDRE = 0;
|
||||
PORTE = (1 << PE2) | (1 << PE6); //only PE2,6 are pins
|
||||
DDRF = 0;
|
||||
PORTF = (1 << PF0) | (1 << PF1) | (1 << PF4) | (1 << PF5) | (1 << PF6) | (1 << PF7); // only PF0,1,4,5,6,7 are pins
|
||||
#endif
|
||||
|
||||
#if (defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \
|
||||
defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || \
|
||||
defined(__AVR_ATmega32U6__))
|
||||
DDRA = 0;
|
||||
PORTA = 0xFF;
|
||||
DDRB = 0;
|
||||
PORTB = 0xFF;
|
||||
DDRC = 0;
|
||||
PORTC = 0xFF;
|
||||
DDRD = 0;
|
||||
PORTD = 0xFF;
|
||||
DDRE = 0;
|
||||
PORTE = 0xFF;
|
||||
DDRF = 0;
|
||||
PORTF = 0xFF;
|
||||
#endif
|
||||
|
||||
/* Hardware Initialization */
|
||||
Joystick_Init();
|
||||
LEDs_Init();
|
||||
LEDs_TurnOnLEDs(LEDS_ALL_LEDS);
|
||||
Buttons_Init();
|
||||
DISABLE_VOLTAGE_TXRX(); // used on Micropendous REV1/2 boards
|
||||
DISABLE_EXT_SRAM(); // used on Micropendous REV1/2 boards
|
||||
SELECT_USB_B(); // needed for Micropendous REV1/2 boards
|
||||
USB_Init();
|
||||
|
||||
}
|
||||
|
||||
/** Event handler for the library USB Connection event. */
|
||||
@@ -148,29 +206,342 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
|
||||
{
|
||||
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
|
||||
|
||||
uint8_t JoyStatus_LCL = Joystick_GetStatus();
|
||||
uint8_t ButtonStatus_LCL = Buttons_GetStatus();
|
||||
//uint8_t JoyStatus_LCL = Joystick_GetStatus();
|
||||
//uint8_t ButtonStatus_LCL = Buttons_GetStatus();
|
||||
|
||||
uint8_t UsedKeyCodes = 0;
|
||||
|
||||
if (JoyStatus_LCL & JOY_UP)
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_A;
|
||||
else if (JoyStatus_LCL & JOY_DOWN)
|
||||
// 32-pin USB AVRs
|
||||
#if (defined(__AVR_AT90USB162__) || defined(__AVR_AT90USB82__) || \
|
||||
defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__))
|
||||
if (~PINB & (1 << PINB0)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS;
|
||||
} else if (~PINB & (1 << PINB1)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_1_AND_EXCLAMATION;
|
||||
} else if (~PINB & (1 << PINB2)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_2_AND_AT;
|
||||
} else if (~PINB & (1 << PINB3)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_3_AND_HASHMARK;
|
||||
} else if (~PINB & (1 << PINB4)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_4_AND_DOLLAR;
|
||||
} else if (~PINB & (1 << PINB5)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_5_AND_PERCENTAGE;
|
||||
} else if (~PINB & (1 << PINB6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PINB & (1 << PINB7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
|
||||
if (JoyStatus_LCL & JOY_LEFT)
|
||||
} else if (~PINC & (1 << PINC2)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
else if (JoyStatus_LCL & JOY_RIGHT)
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_2_AND_AT;
|
||||
} else if (~PINC & (1 << PINC4)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_4_AND_DOLLAR;
|
||||
} else if (~PINC & (1 << PINC5)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_5_AND_PERCENTAGE;
|
||||
} else if (~PINC & (1 << PINC6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PINC & (1 << PINC7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
|
||||
} else if (~PIND & (1 << PIND0)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS;
|
||||
} else if (~PIND & (1 << PIND1)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_1_AND_EXCLAMATION;
|
||||
} else if (~PIND & (1 << PIND2)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_2_AND_AT;
|
||||
} else if (~PIND & (1 << PIND3)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_3_AND_HASHMARK;
|
||||
} else if (~PIND & (1 << PIND4)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_4_AND_DOLLAR;
|
||||
} else if (~PIND & (1 << PIND5)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_5_AND_PERCENTAGE;
|
||||
} else if (~PIND & (1 << PIND6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PIND & (1 << PIND7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
}
|
||||
#endif // end 32-pin USB AVRs
|
||||
|
||||
if (JoyStatus_LCL & JOY_PRESS)
|
||||
|
||||
// 44-pin USB AVRs
|
||||
#if (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))
|
||||
if (~PINB & (1 << PINB0)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS;
|
||||
} else if (~PINB & (1 << PINB1)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_1_AND_EXCLAMATION;
|
||||
} else if (~PINB & (1 << PINB2)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_2_AND_AT;
|
||||
} else if (~PINB & (1 << PINB3)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_3_AND_HASHMARK;
|
||||
} else if (~PINB & (1 << PINB4)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_4_AND_DOLLAR;
|
||||
} else if (~PINB & (1 << PINB5)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_5_AND_PERCENTAGE;
|
||||
} else if (~PINB & (1 << PINB6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PINB & (1 << PINB7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
|
||||
} else if (~PINC & (1 << PINC6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PINC & (1 << PINC7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
|
||||
} else if (~PIND & (1 << PIND0)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS;
|
||||
} else if (~PIND & (1 << PIND1)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_1_AND_EXCLAMATION;
|
||||
} else if (~PIND & (1 << PIND2)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_2_AND_AT;
|
||||
} else if (~PIND & (1 << PIND3)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_3_AND_HASHMARK;
|
||||
} else if (~PIND & (1 << PIND4)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_4_AND_DOLLAR;
|
||||
} else if (~PIND & (1 << PIND5)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_5_AND_PERCENTAGE;
|
||||
} else if (~PIND & (1 << PIND6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PIND & (1 << PIND7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
|
||||
} else if (~PINE & (1 << PINE2)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_E;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_2_AND_AT;
|
||||
} else if (~PINE & (1 << PINE6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_E;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
|
||||
if (ButtonStatus_LCL & BUTTONS_BUTTON1)
|
||||
} else if (~PINF & (1 << PINF0)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS;
|
||||
} else if (~PINF & (1 << PINF1)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_1_AND_EXCLAMATION;
|
||||
} else if (~PINF & (1 << PINF4)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_4_AND_DOLLAR;
|
||||
} else if (~PINF & (1 << PINF5)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_5_AND_PERCENTAGE;
|
||||
} else if (~PINF & (1 << PINF6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PINF & (1 << PINF7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
}
|
||||
#endif // end 44-pin USB AVRs
|
||||
|
||||
if (UsedKeyCodes)
|
||||
KeyboardReport->Modifier = HID_KEYBOARD_MODIFIER_LEFTSHIFT;
|
||||
|
||||
// 64-pin USB AVRs
|
||||
#if (defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \
|
||||
defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || \
|
||||
defined(__AVR_ATmega32U6__))
|
||||
|
||||
if (~PINB & (1 << PINB0)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS;
|
||||
// On Micropendous boards pin B1 is the LED so it cannot be read
|
||||
#if ((BOARD != BOARD_MICROPENDOUS_REV1) && (BOARD != BOARD_MICROPENDOUS_REV2))
|
||||
} else if (~PINB & (1 << PINB1)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_1_AND_EXCLAMATION;
|
||||
#endif // BOARD != MICROPENDOUS_REV1/2
|
||||
} else if (~PINB & (1 << PINB2)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_2_AND_AT;
|
||||
} else if (~PINB & (1 << PINB3)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_3_AND_HASHMARK;
|
||||
} else if (~PINB & (1 << PINB4)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_4_AND_DOLLAR;
|
||||
} else if (~PINB & (1 << PINB5)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_5_AND_PERCENTAGE;
|
||||
} else if (~PINB & (1 << PINB6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PINB & (1 << PINB7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_B;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
|
||||
} else if (~PIND & (1 << PIND0)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS;
|
||||
} else if (~PIND & (1 << PIND1)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_1_AND_EXCLAMATION;
|
||||
} else if (~PIND & (1 << PIND2)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_2_AND_AT;
|
||||
} else if (~PIND & (1 << PIND3)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_3_AND_HASHMARK;
|
||||
} else if (~PIND & (1 << PIND4)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_4_AND_DOLLAR;
|
||||
} else if (~PIND & (1 << PIND5)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_5_AND_PERCENTAGE;
|
||||
} else if (~PIND & (1 << PIND6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PIND & (1 << PIND7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
|
||||
} else if (~PINF & (1 << PINF0)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS;
|
||||
} else if (~PINF & (1 << PINF1)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_1_AND_EXCLAMATION;
|
||||
} else if (~PINF & (1 << PINF2)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_2_AND_AT;
|
||||
} else if (~PINF & (1 << PINF3)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_3_AND_HASHMARK;
|
||||
} else if (~PINF & (1 << PINF4)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_4_AND_DOLLAR;
|
||||
} else if (~PINF & (1 << PINF5)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_5_AND_PERCENTAGE;
|
||||
} else if (~PINF & (1 << PINF6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PINF & (1 << PINF7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_F;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
|
||||
|
||||
} else if (~PINE & (1 << PINE2)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_E;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_2_AND_AT;
|
||||
|
||||
|
||||
// On Micropendous boards Ports A, C, and most of E control various board functions and are not exposed
|
||||
#if ((BOARD != BOARD_MICROPENDOUS_REV1) && (BOARD != BOARD_MICROPENDOUS_REV2))
|
||||
} else if (~PINA & (1 << PINA0)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_A;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS;
|
||||
} else if (~PINA & (1 << PINA1)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_A;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_1_AND_EXCLAMATION;
|
||||
} else if (~PINA & (1 << PINA2)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_A;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_2_AND_AT;
|
||||
} else if (~PINA & (1 << PINA3)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_A;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_3_AND_HASHMARK;
|
||||
} else if (~PINA & (1 << PINA4)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_A;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_4_AND_DOLLAR;
|
||||
} else if (~PINA & (1 << PINA5)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_A;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_5_AND_PERCENTAGE;
|
||||
} else if (~PINA & (1 << PINA6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_A;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PINA & (1 << PINA7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_A;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
|
||||
} else if (~PINC & (1 << PINC0)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS;
|
||||
} else if (~PINC & (1 << PINC1)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_1_AND_EXCLAMATION;
|
||||
} else if (~PINC & (1 << PINC2)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_2_AND_AT;
|
||||
} else if (~PINC & (1 << PINC3)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_3_AND_HASHMARK;
|
||||
} else if (~PINC & (1 << PINC4)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_4_AND_DOLLAR;
|
||||
} else if (~PINC & (1 << PINC5)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_5_AND_PERCENTAGE;
|
||||
} else if (~PINC & (1 << PINC6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PINC & (1 << PINC7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_C;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
|
||||
} else if (~PINE & (1 << PINE0)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_E;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS;
|
||||
} else if (~PINE & (1 << PINE1)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_E;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_1_AND_EXCLAMATION;
|
||||
|
||||
} else if (~PINE & (1 << PINE3)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_E;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_3_AND_HASHMARK;
|
||||
} else if (~PINE & (1 << PINE4)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_E;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_4_AND_DOLLAR;
|
||||
} else if (~PINE & (1 << PINE5)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_E;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_5_AND_PERCENTAGE;
|
||||
} else if (~PINE & (1 << PINE6)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_E;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_6_AND_CARET;
|
||||
} else if (~PINE & (1 << PINE7)) {
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_E;
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_7_AND_AND_AMPERSAND;
|
||||
#endif // BOARD != MICROPENDOUS_REV1/2
|
||||
|
||||
}
|
||||
|
||||
#endif // end 64-pin USB AVRs
|
||||
|
||||
//if (UsedKeyCodes)
|
||||
// KeyboardReport->Modifier = HID_KEYBOARD_MODIFIER_LEFTSHIFT;
|
||||
|
||||
*ReportSize = sizeof(USB_KeyboardReport_Data_t);
|
||||
return false;
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
* Header file for Keyboard.c.
|
||||
*/
|
||||
|
||||
#ifndef _KEYBOARD_H_
|
||||
#define _KEYBOARD_H_
|
||||
#ifndef _MICROPENDOUSKEYBOARDTEST_H_
|
||||
#define _MICROPENDOUSKEYBOARDTEST_H_
|
||||
|
||||
/* Includes: */
|
||||
#include <avr/io.h>
|
||||
@@ -46,7 +46,6 @@
|
||||
|
||||
#include "Descriptors.h"
|
||||
|
||||
#include <LUFA/Drivers/Board/Joystick.h>
|
||||
#include <LUFA/Drivers/Board/LEDs.h>
|
||||
#include <LUFA/Drivers/Board/Buttons.h>
|
||||
#include <LUFA/Drivers/USB/USB.h>
|
||||
@@ -84,5 +83,5 @@
|
||||
const void* ReportData,
|
||||
const uint16_t ReportSize);
|
||||
|
||||
#endif
|
||||
#endif // _MICROPENDOUSKEYBOARDTEST_H_
|
||||
|
||||
|
||||
@@ -0,0 +1,290 @@
|
||||
:10000000B7C00000D4C00000D2C00000D0C00000C3
|
||||
:10001000CEC00000CCC00000CAC00000C8C00000B4
|
||||
:10002000C6C00000C4C0000061C40000C0C0000021
|
||||
:10003000BEC00000BCC00000BAC00000B8C00000D4
|
||||
:10004000B6C00000B4C00000B2C00000B0C00000E4
|
||||
:10005000AEC00000ACC00000AAC00000A8C00000F4
|
||||
:10006000A6C00000A4C00000A2C00000A0C0000004
|
||||
:100070009EC000009CC000009AC0000098C0000014
|
||||
:1000800096C0000094C0000092C0000090C0000024
|
||||
:100090008EC000008CC0000032034D006900630078
|
||||
:1000A00072006F00700065006E0064006F007500E4
|
||||
:1000B00073004B006500790062006F006100720000
|
||||
:1000C0006400540065007300740000002A03770088
|
||||
:1000D000770077002E006D006900630072006F00EA
|
||||
:1000E000700065006E0064006F00750073002E00E4
|
||||
:1000F0006F00720067000000040309040902220077
|
||||
:10010000010100C0320904000001030101000921BE
|
||||
:1001100011010001223F00070581030800051201BB
|
||||
:10012000100100000008EB03422001000102000161
|
||||
:1001300005010906A101050719E029E715002501B8
|
||||
:10014000750195088102950175088101050819015D
|
||||
:100150002905950575019102950175039101150019
|
||||
:1001600025FF0507190029FF950675088100C000C5
|
||||
:1001700011241FBECFEFD0E2DEBFCDBF11E0A0E063
|
||||
:10018000B1E0E4EEF1E100E00BBF02C007900D9298
|
||||
:10019000A032B107D9F71BBE11E0A0E2B1E001C067
|
||||
:1001A0001D92A533B107E1F73ED00C94F00828CF9B
|
||||
:1001B00095B19D7F982B95B9089584B7877F84BFAB
|
||||
:1001C00088E10FB6F89480936000109260000FBE33
|
||||
:1001D00080E090E020E80FB6F894209361008093CF
|
||||
:1001E00061000FBE85B7806890E00FB6F89485BFB8
|
||||
:1001F0000FBE85BF11B88FEF82B914B885B917B893
|
||||
:1002000088B91AB88BB91DB88EB910BA81BB219ABA
|
||||
:100210002998299A6A98729A73986B9A6C9A749A28
|
||||
:1002200077986F9A48C3C9DF82E0C2DF789480E094
|
||||
:1002300091E0F3D68AD5FBCF80E0BACF82E0B8CF89
|
||||
:1002400080E091E0D1D69091E20094609093E2003A
|
||||
:10025000882311F080E001C082E0AACF80E091E025
|
||||
:1002600090C580910E0190910F01009729F00197A0
|
||||
:1002700090930F0180930E0108950F931F93F9013E
|
||||
:10028000D801189902C085E03BC01A9902C085E0E8
|
||||
:1002900065C01B9902C085E043C01C9902C085E07F
|
||||
:1002A00045C01D9902C085E047C01E9902C085E087
|
||||
:1002B00049C01F9902C085E04BC0489902C087E041
|
||||
:1002C0001FC0499902C087E021C04A9902C087E057
|
||||
:1002D00045C04B9902C087E023C04C9902C087E01B
|
||||
:1002E00025C04D9902C087E027C04E9902C087E023
|
||||
:1002F00029C04F9902C087E02BC0789904C089E0DB
|
||||
:10030000828387E22DC0799904C089E082838EE1DF
|
||||
:1003100027C07A9902C089E021C07B9904C089E096
|
||||
:10032000828380E21DC07C9904C089E0828381E2DF
|
||||
:1003300017C07D9904C089E0828382E211C07E9952
|
||||
:1003400004C089E0828383E20BC07F9904C089E006
|
||||
:10035000828384E205C0629904C088E082838FE1D1
|
||||
:10036000838388E090E011969C938E9380E01F91A8
|
||||
:100370000F910895F901808180FD02C080E001C0E5
|
||||
:1003800082E016CF933089F0943028F4913049F10F
|
||||
:10039000923061F505C09132D1F0923239F51CC02E
|
||||
:1003A00082E290E0ECEFF0E025C0813041F0813056
|
||||
:1003B00018F08230D9F406C0E8EFF0E005C0ECECAC
|
||||
:1003C000F0E002C0E8E9F0E0849190E013C089E039
|
||||
:1003D00090E0EEE0F1E00EC08FE390E0E0E3F1E0CA
|
||||
:1003E00009C082E190E0EEE1F1E004C080E090E03D
|
||||
:1003F000E0E0F0E0DA011196FC93EE930895AF92FD
|
||||
:10040000BF92CF92DF92EF92FF921F93CF93DF9331
|
||||
:10041000EC017B016A01D7D1182F8823A9F5C114FB
|
||||
:10042000D10439F0F60120813181E21AF30AC20FBA
|
||||
:10043000D31FAA24BB2423C08091E80085FD16C0E9
|
||||
:100440008091E8008E778093E8007FD4C114D104B6
|
||||
:1004500049F0F601808191818A0D9B1D91838083F3
|
||||
:1004600015E012C0B0D1882351F00DC0899180935E
|
||||
:10047000F1000894E108F1080894A11CB11CE114F2
|
||||
:10048000F104D1F601C0182F812FDF91CF911F9178
|
||||
:10049000FF90EF90DF90CF90BF90AF9008952091A4
|
||||
:1004A0003301309134012617370720F4B901FC01DC
|
||||
:1004B00020E037C061157105D1F72091E8002E7753
|
||||
:1004C0002093E800F4CF80912C01882309F43FC0E9
|
||||
:1004D0008530C9F18091E80083FD37C08091E80044
|
||||
:1004E00082FD2BC08091E80080FF1BC08091F2004C
|
||||
:1004F0009091F30006C021912093F100615070406B
|
||||
:1005000001966115710519F088309105A0F321E07D
|
||||
:100510008830910509F020E08091E8008E77809383
|
||||
:10052000E8006115710579F6222369F606C080910D
|
||||
:100530002C01882361F0853061F08091E80082FF12
|
||||
:10054000F6CF80E0089583E0089581E0089582E089
|
||||
:10055000089583E008956115710529F42091E8005C
|
||||
:100560002B772093E800382F292F26C080912C016B
|
||||
:100570008823B1F1853081F18091E80083FD2EC0A0
|
||||
:100580008091E80082FFF2CFE32FF22F08C0809124
|
||||
:10059000F10081933E2F2F2F6150704041F03E2F8C
|
||||
:1005A0002F2F8091F2009091F300009781F78091B6
|
||||
:1005B000E8008B778093E80061157105B9F606C0F5
|
||||
:1005C00080912C01882361F0853061F08091E800F2
|
||||
:1005D00080FFF6CF80E0089583E0089581E00895DC
|
||||
:1005E00082E0089583E00895209133013091340131
|
||||
:1005F0002617370720F4B901FC0120E038C0611547
|
||||
:100600007105D1F72091E8002E772093E800F4CF10
|
||||
:1006100080912C01882309F440C08530D1F180916C
|
||||
:10062000E80083FD38C08091E80082FD2CC08091F5
|
||||
:10063000E80080FF1CC08091F2009091F30007C099
|
||||
:1006400024912093F100319661507040019661151C
|
||||
:10065000710519F08830910598F321E088309105F3
|
||||
:1006600009F020E08091E8008E778093E800611522
|
||||
:10067000710571F6222361F606C080912C01882352
|
||||
:1006800061F0853061F08091E80082FFF6CF80E074
|
||||
:10069000089583E0089581E0089582E0089583E05D
|
||||
:1006A0000895982F2AC09093E900981739F0709117
|
||||
:1006B000EC002091ED005091F00003C0242F762F24
|
||||
:1006C00050E021FF19C03091EB003E7F3093EB00EA
|
||||
:1006D0003091ED003D7F3093ED003091EB003160C3
|
||||
:1006E0003093EB007093EC002093ED005093F000FA
|
||||
:1006F0002091EE0027FF08C09F5F9730A0F28F7017
|
||||
:100700008093E90081E0089580E008950F931F939E
|
||||
:10071000CF93DF93162FEC0100E02AC09881992334
|
||||
:1007200029F16B81E981FA812C81892F8F708730C3
|
||||
:1007300018F56295660F660F607C991F9927991FBF
|
||||
:10074000692B223010F096E001C092E028E030E002
|
||||
:1007500040E003C04F5F220F331F2E173F07D0F337
|
||||
:100760004295407F492B9DDF882331F00F5F25960E
|
||||
:100770000117A1F681E001C080E0DF91CF911F91C8
|
||||
:100780000F91089580912D0187FF13C004C08091BF
|
||||
:100790002C018823B9F08091E80082FFF8CF809186
|
||||
:1007A000E8008B778093E800089580912C018823DE
|
||||
:1007B00049F08091E80080FFF8CF8091E8008E77C3
|
||||
:1007C0008093E80008958091E4009091E50045E66B
|
||||
:1007D00001C0C9012091EC0020FF23C02091E80056
|
||||
:1007E00020FD15C020912C01222399F0253099F08D
|
||||
:1007F0002091EB0025FD11C02091E4003091E5002F
|
||||
:100800002817390739F3415021F784E0089580E033
|
||||
:10081000089582E0089583E0089581E0089580E0DE
|
||||
:1008200008952091E80022FFDDCFF9CF0F931F93A9
|
||||
:10083000CF93DF934ED055D0C8EDD0E088818F772D
|
||||
:10084000888388818068888388818F7D8883E7EDAD
|
||||
:10085000F0E080818068808319BC10922C01109296
|
||||
:10086000280110922A011092290100EE10E0F801EF
|
||||
:1008700080818B7F808388818160888380E060E0D5
|
||||
:1008800042E00FDFE1EEF0E080818E7F8083E2EED8
|
||||
:10089000F0E0808181608083808188608083F801BE
|
||||
:1008A00080818E7F8083888180618883DF91CF9172
|
||||
:1008B0001F910F910895E8EDF0E080818F7E808395
|
||||
:1008C000E7EDF0E080818160808381E080932B01FF
|
||||
:1008D000ADCFE8EDF0E080818C7F80831092E20064
|
||||
:1008E00008951092DA001092E10008951F920F927D
|
||||
:1008F0000FB60F920BB60F9211242F933F934F9385
|
||||
:100900005F936F937F938F939F93AF93BF93EF9377
|
||||
:10091000FF938091E10082FF0AC08091E20082FF94
|
||||
:1009200006C08091E1008B7F8093E1009ADC80918A
|
||||
:10093000DA0080FF1DC08091D80080FF19C080912F
|
||||
:10094000DA008E7F8093DA008091D90080FF0CC09E
|
||||
:1009500084E189BD86E189BD09B400FEFDCF81E057
|
||||
:1009600080932C0169DC04C019BC10922C0166DC58
|
||||
:100970008091E10080FF18C08091E20080FF14C0E8
|
||||
:100980008091E2008E7F8093E2008091E20080619E
|
||||
:100990008093E2008091D80080628093D80019BCD7
|
||||
:1009A00085E080932C01D0D18091E10084FF2DC09F
|
||||
:1009B0008091E20084FF29C084E189BD86E189BD80
|
||||
:1009C00009B400FEFDCF8091D8008F7D8093D800C0
|
||||
:1009D0008091E1008F7E8093E1008091E2008F7E24
|
||||
:1009E0008093E2008091E20081608093E200809138
|
||||
:1009F0002801882321F48091E30087FF02C084E06E
|
||||
:100A000001C081E080932C019FD18091E10083FFA0
|
||||
:100A100022C08091E20083FF1EC08091E100877FA9
|
||||
:100A20008093E10082E080932C0110922801809154
|
||||
:100A3000E1008E7F8093E1008091E2008E7F8093C1
|
||||
:100A4000E2008091E20080618093E20080E060E05B
|
||||
:100A500042E027DE79D1FF91EF91BF91AF919F9155
|
||||
:100A60008F917F916F915F914F913F912F910F9057
|
||||
:100A70000BBE0F900FBE0F901F9018951F93CF9332
|
||||
:100A8000DF93CDB7DEB7AC970FB6F894DEBF0FBEDD
|
||||
:100A9000CDBF80E0EDE2F1E09091F10091938F5FA6
|
||||
:100AA0008830D1F7DBDB8091E80083FF35C180918E
|
||||
:100AB0002D0120912E01253009F484C0263040F408
|
||||
:100AC0002130A1F1213070F0233009F025C12EC072
|
||||
:100AD000283009F4F3C0293009F402C1263009F0A6
|
||||
:100AE0001BC193C0803821F0823809F015C108C0BD
|
||||
:100AF0008091290190912A01992371F082600CC0A4
|
||||
:100B0000809131018F708093E9009091EB0081E03A
|
||||
:100B100095FF80E01092E9009091E800977F909314
|
||||
:100B2000E8008093F1001092F100D3C0882319F0FF
|
||||
:100B3000823009F0F1C090E08F719070009729F039
|
||||
:100B40008230910509F0E8C00BC080912F018130FF
|
||||
:100B500009F0E2C0233009F080E080932A012CC024
|
||||
:100B600080912F01882341F5209131012F7009F4E4
|
||||
:100B7000D3C02093E9008091EB0080FF1DC08091DD
|
||||
:100B80002E01833021F48091EB00806213C08091AC
|
||||
:100B9000EB0080618093EB0081E090E002C0880F61
|
||||
:100BA000991F2A95E2F78093EA001092EA0080915B
|
||||
:100BB000EB0088608093EB001092E9008091E800E0
|
||||
:100BC000877F8AC0882309F0A7C010912F011F7763
|
||||
:100BD0008091E3008078812B8093E3008091E8008E
|
||||
:100BE000877F8093E800CEDD8091E80080FFFCCF16
|
||||
:100BF0008091E30080688093E300112311F083E08B
|
||||
:100C000001C082E080932C0187C08058823008F0B8
|
||||
:100C100083C080912F019091300123E08C3D920799
|
||||
:100C2000A9F583E08C838AE28B835FB7F894DE01B9
|
||||
:100C3000139680E090E04EE061E2E42FF0E06093F4
|
||||
:100C40005700E49180FF03C0E295EF704F5FEF70B3
|
||||
:100C50002E2F30E0EA3018F0295C3F4F02C0205DB3
|
||||
:100C60003F4F13963C932E93129701961296843120
|
||||
:100C7000910519F75FBF8091E800877F8093E800B6
|
||||
:100C8000CE0103966AE270E00ADC12C06091310185
|
||||
:100C9000AE014F5F5F4F76DBBC01009709F43CC0AB
|
||||
:100CA0008091E800877F8093E80089819A819CDCAD
|
||||
:100CB0008091E8008B778093E8002EC0803861F542
|
||||
:100CC0008091E800877F8093E800809128018093DD
|
||||
:100CD000F1008091E8008E778093E80053DD1CC01E
|
||||
:100CE0008823D1F490912F019230B0F48091E800E4
|
||||
:100CF000877F8093E8009093280144DD809128014C
|
||||
:100D0000882321F48091E30087FF02C084E001C0C2
|
||||
:100D100081E080932C0194DA8091E80083FF0AC07F
|
||||
:100D20008091E800877F8093E8008091EB008062EB
|
||||
:100D30008093EB00AC960FB6F894DEBF0FBECDBF2C
|
||||
:100D4000DF91CF911F9108950895CF9380912C0149
|
||||
:100D50008823A9F08091E9008F709091EC0090FFBA
|
||||
:100D600002C0C0E801C0C0E0C82B1092E900809129
|
||||
:100D7000E80083FF01C082DECF70C093E900CF910D
|
||||
:100D800008956F927F928F929F92AF92BF92CF926F
|
||||
:100D9000DF92EF92FF920F931F93CF93DF9300D0D8
|
||||
:100DA0000F92CDB7DEB77C016DB67EB68091E800BC
|
||||
:100DB00083FF03C1F701808190E0209131013091E0
|
||||
:100DC00032012817390709F0F8C080912E018330CD
|
||||
:100DD00009F49AC0843030F4813071F0823009F027
|
||||
:100DE000ECC0CFC08A3009F4B4C08B3009F49DC088
|
||||
:100DF000893009F0E2C04BC080912D01813A09F0A1
|
||||
:100E0000DCC09DB68EB61B821A8280912F010091A4
|
||||
:100E100030018983F70140858DB79EB7841B910906
|
||||
:100E20000FB6F8949EBF0FBE8DBFCDB6DEB6089448
|
||||
:100E3000C11CD11CBC2CAD2CC60160E070E050E0A0
|
||||
:100E4000C8D1402F4150C701BE016F5F7F4F96014F
|
||||
:100E50008E010E5F1F4F11DAF7018681978100978F
|
||||
:100E600021F04085B60150E0ABD11092E9008091AD
|
||||
:100E7000E800877F8093E8006A817B818B2D9A2D23
|
||||
:100E80000EDB8091E8008B778093E8003AC0809178
|
||||
:100E90002D01813209F091C09DB68EB600913301CB
|
||||
:100EA00010913401C0902F01D09030018DB79EB7C2
|
||||
:100EB000801B910B0FB6F8949EBF0FBE8DBFADB6D1
|
||||
:100EC000BEB60894A11CB11C8091E800877F809376
|
||||
:100ED000E800C501B8013FDB8091E8008E77809380
|
||||
:100EE000E80081E090E0CC2011F480E090E04D2D0E
|
||||
:100EF00041509501280F391F081B190BC7016C2D94
|
||||
:100F000039DA9DBE8EBE59C080912D01813A09F01B
|
||||
:100F100054C08091E800877F8093E8008091E800CA
|
||||
:100F200080FFFCCFF701818540C080912D01813287
|
||||
:100F300009F043C08091E800877F8093E80022DCBD
|
||||
:100F400090912F0181E0992309F480E0F7018187D6
|
||||
:100F500034C080912D01813281F58091E800877F36
|
||||
:100F60008093E8000FDC80912F0190913001807018
|
||||
:100F700036E0969587953A95E1F7F701958784874E
|
||||
:100F80001CC080912D01813AC1F48091E800877FD7
|
||||
:100F90008093E8008091E80080FFFCCFF701848512
|
||||
:100FA000958596958795969587958093F100809184
|
||||
:100FB000E8008E778093E800E5DB0FB6F8947EBEFC
|
||||
:100FC0000FBE6DBE0F900F900F90DF91CF911F91CC
|
||||
:100FD0000F91FF90EF90DF90CF90BF90AF909F90D8
|
||||
:100FE0008F907F906F900895CF93DF93FC010996C7
|
||||
:100FF000DC0187E0ED0119928A95E9F781E08187AC
|
||||
:1010000084EF91E09587848783E08483CF01019604
|
||||
:1010100061E07CDBDF91CF9108954F925F926F92F8
|
||||
:101020007F928F929F92AF92BF92CF92DF92EF9278
|
||||
:10103000FF920F931F93CF93DF9300D00F92CDB702
|
||||
:10104000DEB77C014DB65EB680912C01843009F08C
|
||||
:1010500091C08091E4009091E500F70122853385ED
|
||||
:101060002817390709F486C081818F708093E900C1
|
||||
:101070008091E80085FF7EC07DB66EB640858DB755
|
||||
:101080009EB7841B91090FB6F8949EBF0FBE8DBF0B
|
||||
:101090000DB71EB70F5F1F4F19821B821A82B02E29
|
||||
:1010A000A12EC80160E070E050E093D0C701BE01FE
|
||||
:1010B0006F5F7F4F40E098018E010E5F1F4FDDD8BC
|
||||
:1010C000182FF70184859585009759F081E090E00D
|
||||
:1010D000268537852115310511F080E090E04C011F
|
||||
:1010E00002C088249924F701C680D780C114D10496
|
||||
:1010F00091F04A815B818B2D9A2DB60154D001E08D
|
||||
:10110000009709F400E0F7014085C6016B2D7A2DA8
|
||||
:1011100050E056D001C000E08A819B81009709F120
|
||||
:10112000112329F4002319F481149104D1F0F7015B
|
||||
:10113000848595859787868781818F708093E90064
|
||||
:101140008981882311F08093F1006A817B818B2D46
|
||||
:101150009A2D40E050E053D98091E8008E7780933B
|
||||
:10116000E8008091E4009091E500F7019387828781
|
||||
:101170007DBE6EBE0FB6F8945EBE0FBE4DBE0F9024
|
||||
:101180000F900F90DF91CF911F910F91FF90EF90F3
|
||||
:10119000DF90CF90BF90AF909F908F907F906F9097
|
||||
:1011A0005F904F900895FB01DC0104C08D91019088
|
||||
:1011B000801921F441505040C8F7881B990B0895BD
|
||||
:1011C000FB01DC0102C001900D9241505040D8F764
|
||||
:1011D0000895DC0101C06D9341505040E0F708953F
|
||||
:0411E000F894FFCFB1
|
||||
:1011E4000081080000012001080000000000000048
|
||||
:1011F400A120000000000200A10100000000000086
|
||||
:00000001FF
|
||||
@@ -5,10 +5,10 @@
|
||||
<generator value="as5_8"/>
|
||||
|
||||
<device-support value="at90usb1287"/>
|
||||
<config name="lufa.drivers.board.name" value="usbkey"/>
|
||||
<config name="lufa.drivers.board.name" value="micropendous_rev2"/>
|
||||
|
||||
<build type="define" name="F_CPU" value="8000000UL"/>
|
||||
<build type="define" name="F_USB" value="8000000UL"/>
|
||||
<build type="define" name="F_CPU" value="16000000UL"/>
|
||||
<build type="define" name="F_USB" value="16000000UL"/>
|
||||
</project>
|
||||
|
||||
<module type="application" id="lufa.demos.device.class.keyboard" caption="Keyboard HID Device Demo (Class Driver APIs)">
|
||||
@@ -26,11 +26,11 @@
|
||||
<device-support-alias value="lufa_xmega"/>
|
||||
<device-support-alias value="lufa_uc3"/>
|
||||
|
||||
<build type="distribute" subtype="user-file" value="Keyboard.txt"/>
|
||||
<build type="distribute" subtype="user-file" value="MicropendousKeyboardTest.txt"/>
|
||||
|
||||
<build type="c-source" value="Keyboard.c"/>
|
||||
<build type="c-source" value="MicropendousKeyboardTest.c"/>
|
||||
<build type="c-source" value="Descriptors.c"/>
|
||||
<build type="header-file" value="Keyboard.h"/>
|
||||
<build type="header-file" value="MicropendousKeyboardTest.h"/>
|
||||
<build type="header-file" value="Descriptors.h"/>
|
||||
|
||||
<build type="module-config" subtype="path" value="Config"/>
|
||||
|
||||
@@ -13,15 +13,17 @@
|
||||
|
||||
MCU = at90usb1287
|
||||
ARCH = AVR8
|
||||
BOARD = USBKEY
|
||||
F_CPU = 8000000
|
||||
BOARD = MICROPENDOUS_REV2
|
||||
F_CPU = 16000000
|
||||
F_USB = $(F_CPU)
|
||||
OPTIMIZATION = s
|
||||
TARGET = Keyboard
|
||||
TARGET = MicropendousKeyboardTest
|
||||
SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
|
||||
LUFA_PATH = ../../../../LUFA
|
||||
LUFA_PATH = ../../libs/LUFA/LUFA
|
||||
CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/
|
||||
LD_FLAGS =
|
||||
CDC_BOOTLOADER_PORT = /dev/ttyACM0
|
||||
#CDC_BOOTLOADER_PORT = COM5
|
||||
|
||||
# Default target
|
||||
all:
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
# Purpose: Test the throughput of a Micropendous board loaded with Virtual Serial Port loopback firmware
|
||||
# Visit www.Micropendous.org/Serial for more info.
|
||||
# Created: 2008-09-30 by Opendous Inc.
|
||||
# Last Edit: 2009-10-03 by Opendous Inc.
|
||||
# Released under the MIT License
|
||||
import serial # for accessing the serial port on multiple platforms
|
||||
import time, sys
|
||||
|
||||
# test Serial Port throughput by sending and receiving transfersToComplete number
|
||||
# of transferSize sized strings
|
||||
# comport is a string - the Serial Port name to use
|
||||
# transferSize is an integer - the string lenght
|
||||
# transfersToComplete is an integer - the number of transfers to test with
|
||||
def SerialThroughputTest(comport, transferSize, transfersToComplete):
|
||||
|
||||
ser = serial.Serial(comport) # open serial port for communication
|
||||
|
||||
print ser # dump all info regarding serial port being used
|
||||
|
||||
ScriptStartTime = time.time()
|
||||
|
||||
# create a transferSize length string
|
||||
i = 0
|
||||
s = ''
|
||||
while (i < (transferSize - 1)):
|
||||
s = s + 'A'
|
||||
i = i + 1
|
||||
# want last letter to be X
|
||||
s = s + 'X'
|
||||
|
||||
# complete a series of transfers
|
||||
i = 0
|
||||
while (i < transfersToComplete):
|
||||
# send one string to device then get back the string
|
||||
ser.write(s)
|
||||
receivedData = ser.read(transferSize)
|
||||
#print receivedData
|
||||
i = i + 1
|
||||
|
||||
ScriptEndTime = time.time()
|
||||
print "\nIt took", (ScriptEndTime - ScriptStartTime), "seconds to transfer", \
|
||||
(transfersToComplete * transferSize), "bytes for a throughput of", \
|
||||
(((transfersToComplete * transferSize) / (ScriptEndTime - ScriptStartTime)) / 1000), "kbytes/second"
|
||||
# be careful using readline as it will block until a newline character is received
|
||||
|
||||
ser.close() # release/close the serial port
|
||||
|
||||
|
||||
# if this file is the program actually being run, print usage info or run SerialThroughputTest
|
||||
if __name__ == '__main__':
|
||||
if (len(sys.argv) != 4):
|
||||
print "Serial Communication Throughput Testing"
|
||||
print " Usage:"
|
||||
print " python", sys.argv[0], "<port> <transferSize> <testSize>"
|
||||
print " Where <port> = serial port; COM? on Windows, '/dev/ttyACM0 on Linux'"
|
||||
print " Enumerated serial port can be found on Linux using dmesg"
|
||||
print " look for something like cdc_acm 2-1:1.0: ttyACM0: USB ACM device"
|
||||
print " Where <transferSize> = the size of each transfer, this value should match"
|
||||
print " CDC_TXRX_EPSIZE in Descriptors.h for maximum throughput"
|
||||
print " Where <testSize> = how many transfers to complete, 100 is usually enough"
|
||||
print " "
|
||||
print " python", sys.argv[0], "COM5 64 100"
|
||||
exit()
|
||||
SerialThroughputTest(sys.argv[1], int(sys.argv[2]), int(sys.argv[3]))
|
||||
@@ -9,6 +9,9 @@
|
||||
/*
|
||||
Copyright 2013 Dean Camera (dean [at] fourwalledcubicle [dot] com)
|
||||
|
||||
Updated for Loopback by Opendous Inc. 2013-03-16
|
||||
www.Micropendous.org/VirtualSerial
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this
|
||||
software and its documentation for any purpose is hereby granted
|
||||
without fee, provided that the above copyright notice appear in
|
||||
@@ -36,6 +39,11 @@
|
||||
|
||||
#include "VirtualSerial.h"
|
||||
|
||||
|
||||
// Global buffer for use with STDIO functions
|
||||
volatile char buffer[CDC_TXRX_EPSIZE];
|
||||
|
||||
|
||||
/** LUFA CDC Class driver interface configuration and state information. This structure is
|
||||
* passed to all CDC Class driver functions, so that multiple instances of the same class
|
||||
* within a device can be differentiated from one another.
|
||||
@@ -82,15 +90,14 @@ int main(void)
|
||||
/* Create a regular character stream for the interface so that it can be used with the stdio.h functions */
|
||||
CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream);
|
||||
|
||||
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
|
||||
GlobalInterruptEnable();
|
||||
|
||||
for (;;)
|
||||
{
|
||||
CheckJoystickMovement();
|
||||
MainTask();
|
||||
|
||||
/* Must throw away unused bytes from the host, or it will lock up while waiting for the device */
|
||||
CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
|
||||
//CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
|
||||
|
||||
CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
|
||||
USB_USBTask();
|
||||
@@ -107,44 +114,23 @@ void SetupHardware(void)
|
||||
/* Disable clock division */
|
||||
clock_prescale_set(clock_div_1);
|
||||
|
||||
/* Disable JTAG; allows upper nibble of Port F to be used as GPIO */
|
||||
#if ( defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \
|
||||
defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || \
|
||||
defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || \
|
||||
defined(__AVR_ATmega32U6__) )
|
||||
JTAG_DISABLE();
|
||||
#endif
|
||||
|
||||
/* Hardware Initialization */
|
||||
Joystick_Init();
|
||||
LEDs_Init();
|
||||
LEDs_TurnOnLEDs(LEDS_LED1);
|
||||
DISABLE_VOLTAGE_TXRX(); // used on Micropendous REV1/2 boards
|
||||
DISABLE_EXT_SRAM(); // used on Micropendous REV1/2 boards
|
||||
SELECT_USB_B(); // needed for Micropendous REV1/2 boards
|
||||
USB_Init();
|
||||
}
|
||||
|
||||
/** Checks for changes in the position of the board joystick, sending strings to the host upon each change. */
|
||||
void CheckJoystickMovement(void)
|
||||
{
|
||||
uint8_t JoyStatus_LCL = Joystick_GetStatus();
|
||||
char* ReportString = NULL;
|
||||
static bool ActionSent = false;
|
||||
|
||||
if (JoyStatus_LCL & JOY_UP)
|
||||
ReportString = "Joystick Up\r\n";
|
||||
else if (JoyStatus_LCL & JOY_DOWN)
|
||||
ReportString = "Joystick Down\r\n";
|
||||
else if (JoyStatus_LCL & JOY_LEFT)
|
||||
ReportString = "Joystick Left\r\n";
|
||||
else if (JoyStatus_LCL & JOY_RIGHT)
|
||||
ReportString = "Joystick Right\r\n";
|
||||
else if (JoyStatus_LCL & JOY_PRESS)
|
||||
ReportString = "Joystick Pressed\r\n";
|
||||
else
|
||||
ActionSent = false;
|
||||
|
||||
if ((ReportString != NULL) && (ActionSent == false))
|
||||
{
|
||||
ActionSent = true;
|
||||
|
||||
/* Write the string to the virtual COM port via the created character stream */
|
||||
fputs(ReportString, &USBSerialStream);
|
||||
|
||||
/* Alternatively, without the stream: */
|
||||
// CDC_Device_SendString(&VirtualSerial_CDC_Interface, ReportString);
|
||||
}
|
||||
}
|
||||
|
||||
/** Event handler for the library USB Connection event. */
|
||||
void EVENT_USB_Device_Connect(void)
|
||||
{
|
||||
@@ -173,3 +159,24 @@ void EVENT_USB_Device_ControlRequest(void)
|
||||
CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void MainTask(void)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
// If the host has sent data then echo it back
|
||||
// Throughput is maximized if the full EP buffer is read and sent each time
|
||||
// Throughput approaches CDC_TXRX_EPSIZE kbytes/second and depends on transfer size from host
|
||||
if ((count = fread(&buffer, 1, CDC_TXRX_EPSIZE, &USBSerialStream)) > 0) {
|
||||
fwrite(&buffer, 1, count, &USBSerialStream);
|
||||
}
|
||||
|
||||
|
||||
// If HWB Button is pressed then send formatted strings
|
||||
if (Buttons_GetStatus()) {
|
||||
fprintf_P(&USBSerialStream, PSTR("\r\nHWB has been pressed!\r\n")); // send a constant string stored in FLASH
|
||||
fprintf(&USBSerialStream, "PORTD = %3x\r\n", PIND); // send a string that is dynamic and stored in SRAM
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
#include "Descriptors.h"
|
||||
|
||||
#include <LUFA/Drivers/Board/LEDs.h>
|
||||
#include <LUFA/Drivers/Board/Joystick.h>
|
||||
#include <LUFA/Drivers/Board/Buttons.h>
|
||||
#include <LUFA/Drivers/USB/USB.h>
|
||||
|
||||
/* Macros: */
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
/* Function Prototypes: */
|
||||
void SetupHardware(void);
|
||||
void CheckJoystickMovement(void);
|
||||
void MainTask(void);
|
||||
|
||||
void EVENT_USB_Device_Connect(void);
|
||||
void EVENT_USB_Device_Disconnect(void);
|
||||
|
||||
@@ -0,0 +1,359 @@
|
||||
:100000009EC00000BBC00000B9C00000B7C0000027
|
||||
:10001000B5C00000B3C00000B1C00000AFC0000018
|
||||
:10002000ADC00000ABC0000043C300000EC4000020
|
||||
:10003000A5C00000A3C00000A1C000009FC0000038
|
||||
:100040009DC000009BC0000099C0000097C0000048
|
||||
:1000500095C0000093C0000091C000008FC0000058
|
||||
:100060008DC000008BC0000089C0000087C0000068
|
||||
:1000700085C0000083C0000081C000007FC0000078
|
||||
:100080007DC000007BC0000079C0000077C0000088
|
||||
:1000900075C0000073C000000D0A48574220686117
|
||||
:1000A00073206265656E2070726573736564210DDF
|
||||
:1000B0000A001C034C00550046004100200043008C
|
||||
:1000C000440043002000440065006D006F00000004
|
||||
:1000D00018034400650061006E00200043006100C9
|
||||
:1000E0006D0065007200610000000403090409024C
|
||||
:1000F0003E00020100C032090400000102020100BA
|
||||
:100100000524001001042402060524060001070549
|
||||
:1001100082030800FF09040100020A00000007052D
|
||||
:1001200004021000050705830210000512011001EA
|
||||
:1001300002000008EB03442001000102DC0111244D
|
||||
:100140001FBECFEFD0E2DEBFCDBF11E0A0E0B1E037
|
||||
:10015000E8E1F6E100E00BBF02C007900D92AA3380
|
||||
:10016000B107D9F71BBE11E0AAE3B1E001C01D92AF
|
||||
:10017000A536B107E1F785D00C940A0B41CF84B7BF
|
||||
:10018000877F84BF88E10FB6F89480936000109257
|
||||
:1001900060000FBE80E090E020E80FB6F894209356
|
||||
:1001A0006100809361000FBE85B7806890E00FB654
|
||||
:1001B000F89485BF0FBE85BF219A2998299A739814
|
||||
:1001C0006B9A6C9A749A77986F9A57C22998089587
|
||||
:1001D000299A08958EE091E0A7D5882311F090E048
|
||||
:1001E00001C092E085B18D7F892B85B908958EE09D
|
||||
:1001F00091E0EDC4CF93DF9388E491E061E070E09B
|
||||
:1002000040E150E02AE331E0ADD6AC011816190602
|
||||
:100210003CF488E491E061E070E02AE331E0DFD66D
|
||||
:100220008CB182FD2BC000D000D0CAE3D1E0ADB7C5
|
||||
:10023000BEB71296DC93CE93119788E990E014969E
|
||||
:100240009C938E93139772D629B100D0EDB7FEB769
|
||||
:100250003196ADB7BEB71296DC93CE93119780E07E
|
||||
:1002600091E0938382832483158251D6EDB7FEB744
|
||||
:1002700036960FB6F894FEBF0FBEEDBFDF91CF915B
|
||||
:1002800008957DDF8EE091E06AE371E02CD67894EA
|
||||
:10029000B1DF8EE091E0D1D57ED4FACF923029F053
|
||||
:1002A000933041F09130E9F417C08EE390E0EEEE28
|
||||
:1002B000F0E01BC0813041F0813018F0823089F4C9
|
||||
:1002C00006C0EAEEF0E005C0E0EDF0E002C0E2EBCF
|
||||
:1002D000F0E0849190E009C082E190E0ECE2F1E08E
|
||||
:1002E00004C080E090E0E0E0F0E0DA011196FC93D9
|
||||
:1002F000EE9308952091630130916401261737072A
|
||||
:1003000020F4B901FC0120E037C061157105D1F777
|
||||
:100310002091E8002E772093E800F4CF80915C01D3
|
||||
:10032000882309F43FC08530C9F18091E80083FD3E
|
||||
:1003300037C08091E80082FD2BC08091E80080FFEB
|
||||
:100340001BC08091F2009091F30006C02191209390
|
||||
:10035000F1006150704001966115710519F0883007
|
||||
:100360009105A0F321E08830910509F020E080910B
|
||||
:10037000E8008E778093E8006115710579F62223F5
|
||||
:1003800069F606C080915C01882361F0853061F0D8
|
||||
:100390008091E80082FFF6CF80E0089583E0089521
|
||||
:1003A00081E0089582E0089583E00895209163013B
|
||||
:1003B000309164012617370720F4B901FC0120E0D1
|
||||
:1003C00038C061157105D1F72091E8002E77209390
|
||||
:1003D000E800F4CF80915C01882309F440C08530A7
|
||||
:1003E000D1F18091E80083FD38C08091E80082FD62
|
||||
:1003F0002CC08091E80080FF1CC08091F200909199
|
||||
:10040000F30007C024912093F100319661507040B1
|
||||
:1004100001966115710519F08830910598F321E076
|
||||
:100420008830910509F020E08091E8008E77809374
|
||||
:10043000E8006115710571F6222361F606C080910E
|
||||
:100440005C01882361F0853061F08091E80082FFD3
|
||||
:10045000F6CF80E0089583E0089581E0089582E07A
|
||||
:10046000089583E00895982F2AC09093E900981783
|
||||
:1004700039F07091EC002091ED005091F00003C034
|
||||
:10048000242F762F50E021FF19C03091EB003E7FE2
|
||||
:100490003093EB003091ED003D7F3093ED003091D3
|
||||
:1004A000EB0031603093EB007093EC002093ED0093
|
||||
:1004B0005093F0002091EE0027FF08C09F5F973017
|
||||
:1004C000A0F28F708093E90081E0089580E00895A4
|
||||
:1004D0000F931F93CF93DF93162FEC0100E02AC0F8
|
||||
:1004E0009881992329F16B81E981FA812C81892FE7
|
||||
:1004F0008F70873018F56295660F660F607C991FC4
|
||||
:100500009927991F692B223010F096E001C092E0E4
|
||||
:1005100028E030E040E003C04F5F220F331F2E176A
|
||||
:100520003F07D0F34295407F492B9DDF882331F070
|
||||
:100530000F5F25960117A1F681E001C080E0DF91F1
|
||||
:10054000CF911F910F91089580915D0187FF13C096
|
||||
:1005500004C080915C018823B9F08091E80082FF9B
|
||||
:10056000F8CF8091E8008B778093E8000895809120
|
||||
:100570005C01882349F08091E80080FFF8CF8091EA
|
||||
:10058000E8008E778093E80008958091E4009091D0
|
||||
:10059000E50045E601C0C9012091EC0020FF23C021
|
||||
:1005A0002091E80020FD15C020915C01222399F0E4
|
||||
:1005B000253099F02091EB0025FD11C02091E40039
|
||||
:1005C0003091E5002817390739F3415021F784E0CD
|
||||
:1005D000089580E0089582E0089583E0089581E021
|
||||
:1005E000089580E008952091E80022FFDDCFF9CF43
|
||||
:1005F0000F931F93CF93DF934ED055D0C8EDD0E02B
|
||||
:1006000088818F77888388818068888388818F7DBF
|
||||
:100610008883E7EDF0E080818068808319BC1092C8
|
||||
:100620005C011092580110925A011092590100EE8B
|
||||
:1006300010E0F80180818B7F8083888181608883CE
|
||||
:1006400080E060E042E00FDFE1EEF0E080818E7F4D
|
||||
:100650008083E2EEF0E08081816080838081886029
|
||||
:100660008083F80180818E7F808388818061888388
|
||||
:10067000DF91CF911F910F910895E8EDF0E0808117
|
||||
:100680008F7E8083E7EDF0E080818160808381E070
|
||||
:1006900080935B01ADCFE8EDF0E080818C7F8083BB
|
||||
:1006A0001092E20008951092DA001092E10008958D
|
||||
:1006B0001F920F920FB60F920BB60F9211242F9329
|
||||
:1006C0003F934F935F936F937F938F939F93AF93DA
|
||||
:1006D000BF93EF93FF938091E10082FF0AC0809166
|
||||
:1006E000E20082FF06C08091E1008B7F8093E100F1
|
||||
:1006F00051D28091DA0080FF1DC08091D80080FF28
|
||||
:1007000019C08091DA008E7F8093DA008091D90041
|
||||
:1007100080FF0CC084E189BD86E189BD09B400FE7B
|
||||
:10072000FDCF81E080935C0151DD04C019BC1092C3
|
||||
:100730005C014EDD8091E10080FF18C08091E200F5
|
||||
:1007400080FF14C08091E2008E7F8093E200809150
|
||||
:10075000E20080618093E2008091D8008062809303
|
||||
:10076000D80019BC85E080935C0114D28091E1002F
|
||||
:1007700084FF2DC08091E20084FF29C084E189BDFF
|
||||
:1007800086E189BD09B400FEFDCF8091D8008F7D40
|
||||
:100790008093D8008091E1008F7E8093E10080916A
|
||||
:1007A000E2008F7E8093E2008091E200816080937E
|
||||
:1007B000E20080915801882321F48091E30087FFB3
|
||||
:1007C00002C084E001C081E080935C01E3D18091AC
|
||||
:1007D000E10083FF27C08091E20083FF23C0809166
|
||||
:1007E000E100877F8093E10082E080935C011092BA
|
||||
:1007F00058018091E1008E7F8093E1008091E200BA
|
||||
:100800008E7F8093E2008091E20080618093E2001D
|
||||
:1008100080E060E042E027DE8091F0008860809315
|
||||
:10082000F000B8D1FF91EF91BF91AF919F918F915F
|
||||
:100830007F916F915F914F913F912F910F900BBEE0
|
||||
:100840000F900FBE0F901F9018951F920F920FB62A
|
||||
:100850000F920BB60F9211242F933F934F935F93F8
|
||||
:100860006F937F938F939F93AF93BF93CF93EF93A8
|
||||
:10087000FF93C091E900CF708091EC001092E900E5
|
||||
:100880008091F000877F8093F00078941DD01092C3
|
||||
:10089000E9008091F00088608093F000C093E90047
|
||||
:1008A000FF91EF91CF91BF91AF919F918F917F91E8
|
||||
:1008B0006F915F914F913F912F910F900BBE0F90D1
|
||||
:1008C0000FBE0F901F9018951F93CF93DF93CDB756
|
||||
:1008D000DEB7AC970FB6F894DEBF0FBECDBF80E099
|
||||
:1008E000EDE5F1E09091F10091938F5F8830D1F7C1
|
||||
:1008F0007EDC8091E80083FF35C180915D0120910D
|
||||
:100900005E01253009F484C0263040F42130A1F185
|
||||
:10091000213070F0233009F025C12EC0283009F4B1
|
||||
:10092000F3C0293009F402C1263009F01BC193C07D
|
||||
:10093000803821F0823809F015C108C08091590132
|
||||
:1009400090915A01992371F082600CC080916101ED
|
||||
:100950008F708093E9009091EB0081E095FF80E03B
|
||||
:100960001092E9009091E800977F9093E8008093BF
|
||||
:10097000F1001092F100D3C0882319F0823009F001
|
||||
:10098000F1C090E08F719070009729F0823091054E
|
||||
:1009900009F0E8C00BC080915F01813009F0E2C02E
|
||||
:1009A000233009F080E080935A012CC080915F01D0
|
||||
:1009B000882341F5209161012F7009F4D3C0209361
|
||||
:1009C000E9008091EB0080FF1DC080915E018330C3
|
||||
:1009D00021F48091EB00806213C08091EB00806174
|
||||
:1009E0008093EB0081E090E002C0880F991F2A9568
|
||||
:1009F000E2F78093EA001092EA008091EB008860B1
|
||||
:100A00008093EB001092E9008091E800877F8AC014
|
||||
:100A1000882309F0A7C010915F011F778091E30040
|
||||
:100A20008078812B8093E3008091E800877F80931A
|
||||
:100A3000E8008ADD8091E80080FFFCCF8091E30030
|
||||
:100A400080688093E300112311F083E001C082E00D
|
||||
:100A500080935C0187C08058823008F083C0809109
|
||||
:100A60005F019091600123E08C3D9207A9F583E03E
|
||||
:100A70008C838AE28B835FB7F894DE01139680E063
|
||||
:100A800090E04EE061E2E42FF0E060935700E491E3
|
||||
:100A900080FF03C0E295EF704F5FEF702E2F30E0C4
|
||||
:100AA000EA3018F0295C3F4F02C0205D3F4F13969B
|
||||
:100AB0003C932E931297019612968431910519F763
|
||||
:100AC0005FBF8091E800877F8093E800CE010396A6
|
||||
:100AD0006AE270E00FDC12C060916101AE014F5F0D
|
||||
:100AE0005F4FDCDBBC01009709F43CC08091E8005B
|
||||
:100AF000877F8093E80089819A8158DC8091E800A3
|
||||
:100B00008B778093E8002EC0803861F58091E800F3
|
||||
:100B1000877F8093E800809158018093F100809155
|
||||
:100B2000E8008E778093E8000FDD1CC08823D1F4A5
|
||||
:100B300090915F019230B0F48091E800877F8093BC
|
||||
:100B4000E8009093580100DD80915801882321F43A
|
||||
:100B50008091E30087FF02C084E001C081E08093C0
|
||||
:100B60005C0138DB8091E80083FF0AC08091E800D7
|
||||
:100B7000877F8093E8008091EB0080628093EB0098
|
||||
:100B8000AC960FB6F894DEBF0FBECDBFDF91CF910C
|
||||
:100B90001F9108950895CF9380915C018823A9F057
|
||||
:100BA0008091E9008F709091EC0090FF02C0C0E846
|
||||
:100BB00001C0C0E0C82B1092E9008091E80083FFDB
|
||||
:100BC00001C082DECF70C093E900CF910895CF932A
|
||||
:100BD000DF93EC018091E80083FFA3C0888190E05F
|
||||
:100BE00020916101309162012817390709F099C0FD
|
||||
:100BF00080915E01813269F0823220F4803209F006
|
||||
:100C000090C03CC0823209F46BC0833209F089C0C5
|
||||
:100C10007AC080915D01813A09F083C08091E8003B
|
||||
:100C2000877F8093E8008091E80080FFFCCF8C896B
|
||||
:100C30009D89AE89BF898093F100492F5A2F6B2F70
|
||||
:100C400077274093F100AD01662777274093F100A5
|
||||
:100C50008B2F9927AA27BB278093F100888D80933B
|
||||
:100C6000F100898D8093F1008A8D8093F10080914D
|
||||
:100C7000E8008E778093E80067DC53C080915D01C7
|
||||
:100C8000813209F04EC08091E800877F8093E800B0
|
||||
:100C900005C080915C01882309F443C08091E8007D
|
||||
:100CA00082FFF7CF3091F1002091F1009091F10097
|
||||
:100CB0008091F1003C8B2D8B9E8B8F8B8091F1006E
|
||||
:100CC000888F8091F100898F8091F1008A8F8091C7
|
||||
:100CD000E8008B778093E80037DCCE0117D121C084
|
||||
:100CE00080915D018132E9F48091E800877F8093F3
|
||||
:100CF000E8002ADC80915F0190916001998B888BDC
|
||||
:100D0000CE0104D10EC080915D01813251F48091F9
|
||||
:100D1000E800877F8093E80017DCCE0160915F01D7
|
||||
:100D2000F5D0DF91CF910895CF93DF93EC014096FA
|
||||
:100D3000FC018BE0DF011D928A95E9F782E08C834C
|
||||
:100D4000898783E08E87CE01019661E0C1DB88232D
|
||||
:100D500059F0CE01069661E0BBDB882329F0CE0175
|
||||
:100D60000B9661E0B5DB01C080E0DF91CF91089583
|
||||
:100D7000CF93FC01C62F80915C018430E9F4448953
|
||||
:100D80005589668977894115510561057105A1F07D
|
||||
:100D900081818F708093E9008091E80085FD08C013
|
||||
:100DA0008091E8008E778093E800EFDB882329F4B8
|
||||
:100DB000C093F10080E001C082E0CF910895282F18
|
||||
:100DC000FB0184859585622FD3DF882319F08FEF8F
|
||||
:100DD0009FEF089580E090E00895FC0180915C0110
|
||||
:100DE000843029F5448955896689778941155105EB
|
||||
:100DF00061057105E1F081818F708093E900809138
|
||||
:100E0000F2009091F3000097A1F09091E80080919A
|
||||
:100E1000E8008E778093E80095FD0DC0B6DB88234F
|
||||
:100E200059F49091E8009E779093E800089582E04D
|
||||
:100E3000089580E0089580E0089520915C012430B9
|
||||
:100E400099F4FC01448955896689778941155105D2
|
||||
:100E50006105710549F021812F702093E9002091EF
|
||||
:100E6000E80020FF01C0B9CF0895FC0180915C012A
|
||||
:100E7000843051F544895589668977894115510532
|
||||
:100E80006105710509F186818F708093E900809179
|
||||
:100E9000E80082FF1CC08091F2009091F30000975F
|
||||
:100EA00021F08091F10090E002C08FEF9FEF209140
|
||||
:100EB000F2003091F3002115310559F42091E8003A
|
||||
:100EC0002B772093E80008958FEF9FEF08958FEF21
|
||||
:100ED0009FEF0895FC0184859585C7DF97FF02C0C9
|
||||
:100EE0008EEF9FEF0895FB012EE0DB011D922A9506
|
||||
:100EF000E9F723E023832FED36E0318720872AE6C8
|
||||
:100F000037E0338722879587848708950895CF93A4
|
||||
:100F1000DF93CDB7DEB7AE01475F5F4F8D819E8116
|
||||
:100F20006F8178859DD0DF91CF9108950F931F93A6
|
||||
:100F3000CF93DF93CDB7DEB70F811885AE01455F44
|
||||
:100F40005F4FF801838188608383C80169857A8552
|
||||
:100F500087D0F8012381277F2383DF91CF911F91D1
|
||||
:100F60000F9108958F929F92AF92BF92CF92DF928E
|
||||
:100F7000EF92FF920F931F93CF93DF934B015A0190
|
||||
:100F80007901F901238120FF1AC06C01C0E0D0E093
|
||||
:100F900012C0C70175D2FFEF8F3F9F0791F0F60196
|
||||
:100FA00081936F010F5F1F4F02C000E010E0081532
|
||||
:100FB000190579F72196CA15DB05B9F702C0C0E01B
|
||||
:100FC000D0E0CE01DF91CF911F910F91FF90EF9074
|
||||
:100FD000DF90CF90BF90AF909F908F9008958F92A9
|
||||
:100FE0009F92AF92BF92CF92DF92EF92FF920F93B8
|
||||
:100FF0001F93CF93DF934B015A016901F9012381BC
|
||||
:1010000021FF1EC0DC01C0E0D0E013C00F5F1F4F06
|
||||
:10101000F601208531858C91B601F901099500977B
|
||||
:1010200089F40894E11CF11CD801E814F90471F763
|
||||
:101030002196CA15DB0531F08D01EE24FF24F4CF93
|
||||
:10104000C0E0D0E0CE01DF91CF911F910F91FF90D2
|
||||
:10105000EF90DF90CF90BF90AF909F908F900895CA
|
||||
:101060002F923F924F925F926F927F928F929F92B8
|
||||
:10107000AF92BF92CF92DF92EF92FF920F931F93A6
|
||||
:10108000CF93DF93CDB7DEB72D970FB6F894DEBFC1
|
||||
:101090000FBECDBF3C017D876C875A01FC011782D2
|
||||
:1010A0001682838181FFBBC12E010894411C511C13
|
||||
:1010B000F3019381EC85FD8593FD859193FF8191EB
|
||||
:1010C000FD87EC87882309F4A6C1853241F493FD9E
|
||||
:1010D000859193FF8191FD87EC87853221F490E023
|
||||
:1010E000B3010ED2E5CFFF24EE2410E01032B0F4AD
|
||||
:1010F0008B3269F08C3228F4803251F0833271F4F3
|
||||
:101100000BC08D3239F0803349F411602CC012606D
|
||||
:10111000146029C0186027C0106125C017FD2EC0BB
|
||||
:10112000282F20532A3098F416FF08C08F2D880FDF
|
||||
:10113000F82EFF0CFF0CF80EF20E15C08E2D880F46
|
||||
:10114000E82EEE0CEE0CE80EE20E10620CC08E32B1
|
||||
:1011500021F416FD60C1106406C08C3611F41068CD
|
||||
:1011600002C0883659F4EC85FD8593FD859193FF87
|
||||
:101170008191FD87EC87882309F0B8CF982F95548B
|
||||
:10118000933018F09052933038F424E030E0A20EFF
|
||||
:10119000B31E3FE339830FC0833631F0833781F0CC
|
||||
:1011A000833509F056C021C0F5018081898322E092
|
||||
:1011B00030E0A20EB31E21E0C22ED12C420113C09A
|
||||
:1011C00092E0292E312C2A0C3B1CF5018080918065
|
||||
:1011D00016FF03C06F2D70E002C06FEF7FEFC401F8
|
||||
:1011E00044D16C0151011F7714C082E0282E312CAC
|
||||
:1011F0002A0C3B1CF5018080918016FF03C06F2DE7
|
||||
:1012000070E002C06FEF7FEFC40124D16C01106861
|
||||
:10121000510113FD1AC005C080E290E0B30170D106
|
||||
:10122000EA948E2D90E0C816D906B0F30EC0F401F2
|
||||
:1012300017FD859117FF81914F0190E0B30160D1B7
|
||||
:10124000E110EA940894C108D108C114D10479F7D7
|
||||
:10125000DFC0843611F0893649F5F50117FF07C064
|
||||
:1012600080819181A281B38124E030E008C0808137
|
||||
:101270009181AA2797FDA095BA2F22E030E0A20E17
|
||||
:10128000B31E012F0F76B7FF08C0B095A0959095BB
|
||||
:1012900081959F4FAF4FBF4F0068BC01CD01A201A8
|
||||
:1012A0002AE030E059D1D82ED4183EC0853721F439
|
||||
:1012B0001F7E2AE030E020C0197F8F36A9F08037EA
|
||||
:1012C00020F4883509F0A7C00BC0803721F088379B
|
||||
:1012D00009F0A1C001C0106114FF09C0146007C06B
|
||||
:1012E00014FF08C0166006C028E030E005C020E109
|
||||
:1012F00030E002C020E132E0F50117FF07C0608155
|
||||
:1013000071818281938144E050E006C060817181E7
|
||||
:1013100080E090E042E050E0A40EB51EA2011CD196
|
||||
:10132000D82ED418012F0F7706FF09C00E7FDF14C7
|
||||
:1013300030F404FF06C002FD04C00F7E02C01D2D64
|
||||
:1013400001C01F2D802F90E004FF0CC0FE01ED0DA9
|
||||
:10135000F11D2081203311F4097E09C002FF06C06F
|
||||
:101360001E5F05C086789070009709F01F5F802E81
|
||||
:10137000992403FD11C000FF0CC0FD2C1E1548F47C
|
||||
:10138000FE0CF11A1E2D05C080E290E0B301B8D02A
|
||||
:101390001F5F1E15C8F304C01E1510F4E11A01C02A
|
||||
:1013A000EE2484FE0EC080E390E0B301A9D082FE5B
|
||||
:1013B0001DC081FE03C088E590E010C088E790E082
|
||||
:1013C0000DC0C40186789070009781F081FC02C046
|
||||
:1013D00080E201C08BE207FD8DE290E0B30190D086
|
||||
:1013E00005C080E390E0B3018BD0FA94DF14C8F31A
|
||||
:1013F000DA94F201ED0DF11D808190E0B30180D00F
|
||||
:10140000DD20B1F705C080E290E0B30179D0EA9425
|
||||
:10141000EE20C9F74DCEF3018681978102C08FEF90
|
||||
:101420009FEF2D960FB6F894DEBF0FBECDBFDF91B4
|
||||
:10143000CF911F910F91FF90EF90DF90CF90BF90D1
|
||||
:10144000AF909F908F907F906F905F904F903F9064
|
||||
:101450002F900895FC010590615070400110D8F75D
|
||||
:10146000809590958E0F9F1F0895FC0161507040EC
|
||||
:1014700001900110D8F7809590958E0F9F1F0895C9
|
||||
:10148000CF93DF93EC012B8120FF35C026FF09C0ED
|
||||
:101490002F7B2B838E819F8101969F838E838A81F0
|
||||
:1014A00028C022FF0FC0E881F9818081992787FD3C
|
||||
:1014B0009095009719F420622B831DC03196F98313
|
||||
:1014C000E88311C0EA85FB85CE01099597FF0BC023
|
||||
:1014D0002B813FEF8F3F930711F480E101C080E241
|
||||
:1014E000822B8B8308C02E813F812F5F3F4F3F832C
|
||||
:1014F0002E8390E002C08FEF9FEFDF91CF91089590
|
||||
:101500000F931F93CF93DF938C01EB018B8181FFAE
|
||||
:101510001BC082FF0DC02E813F818C819D812817C9
|
||||
:10152000390764F4E881F9810193F983E88306C0FF
|
||||
:10153000E885F985802F0995009731F48E819F8188
|
||||
:1015400001969F838E8302C00FEF1FEFC801DF91CA
|
||||
:10155000CF911F910F910895FA01AA27283051F1D8
|
||||
:10156000203181F1E8946F936E7F6E5F7F4F8F4FD4
|
||||
:101570009F4FAF4FB1E03ED0B4E03CD0670F781F33
|
||||
:10158000891F9A1FA11D680F791F8A1F911DA11D18
|
||||
:101590006A0F711D811D911DA11D20D009F4689451
|
||||
:1015A0003F912AE0269F11243019305D3193DEF6F9
|
||||
:1015B000CF010895462F4770405D4193B3E00FD0AF
|
||||
:1015C000C9F7F6CF462F4F70405D4A3318F0495D9A
|
||||
:1015D00031FD4052419302D0A9F7EACFB4E0A6957D
|
||||
:1015E0009795879577956795BA95C9F7009761059F
|
||||
:1015F000710508959B01AC010A2E069457954795F5
|
||||
:1016000037952795BA95C9F7620F731F841F951FE9
|
||||
:08161000A01D0895F894FFCF1E
|
||||
:10161800504F525444203D202533780D0A00008352
|
||||
:101628001000000104100000018208000001000001
|
||||
:10163800000000000000000000A1200000000002DF
|
||||
:0A16480000A10100000000000000F6
|
||||
:00000001FF
|
||||
@@ -5,10 +5,10 @@
|
||||
<generator value="as5_8"/>
|
||||
|
||||
<device-support value="at90usb1287"/>
|
||||
<config name="lufa.drivers.board.name" value="usbkey"/>
|
||||
<config name="lufa.drivers.board.name" value="micropendous"/>
|
||||
|
||||
<build type="define" name="F_CPU" value="8000000UL"/>
|
||||
<build type="define" name="F_USB" value="8000000UL"/>
|
||||
<build type="define" name="F_CPU" value="16000000UL"/>
|
||||
<build type="define" name="F_USB" value="16000000UL"/>
|
||||
</project>
|
||||
|
||||
<module type="application" id="lufa.demos.device.class.cdc" caption="Virtual Serial CDC Device Demo (Class Driver APIs)">
|
||||
|
||||
@@ -13,15 +13,17 @@
|
||||
|
||||
MCU = at90usb1287
|
||||
ARCH = AVR8
|
||||
BOARD = USBKEY
|
||||
F_CPU = 8000000
|
||||
BOARD = MICROPENDOUS_REV2
|
||||
F_CPU = 16000000
|
||||
F_USB = $(F_CPU)
|
||||
OPTIMIZATION = s
|
||||
TARGET = VirtualSerial
|
||||
SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
|
||||
LUFA_PATH = ../../../../LUFA
|
||||
LUFA_PATH = ../../libs/LUFA/LUFA
|
||||
CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/
|
||||
LD_FLAGS =
|
||||
CDC_BOOTLOADER_PORT = /dev/ttyACM0
|
||||
#CDC_BOOTLOADER_PORT = COM5
|
||||
|
||||
# Default target
|
||||
all:
|
||||
|
||||
43
Micropendous/Firmware/VirtualSerial/serialpy.py
Normal file
43
Micropendous/Firmware/VirtualSerial/serialpy.py
Normal file
@@ -0,0 +1,43 @@
|
||||
# Purpose: Write then read characters from a serial port loopback device
|
||||
# Visit www.Micropendous.org/Serial for more info.
|
||||
# Created: 2009-09-31 by Opendous Inc.
|
||||
# Last Edit: 2009-10-02 by Opendous Inc.
|
||||
# Released to the Public Domain
|
||||
import serial # PySerial for accessing the serial port on multiple platforms
|
||||
import sys # command-line argument handling
|
||||
|
||||
# function which sends then reads data from the given serial port
|
||||
# comport should be a string
|
||||
def SerialSendReceive(comport):
|
||||
# open the given serial port for communication
|
||||
ser = serial.Serial(comport)
|
||||
ser.setTimeout(1000)
|
||||
ser.setWriteTimeout(1000)
|
||||
|
||||
print ser # dump all info regarding serial port being used
|
||||
|
||||
ser.write('www.Micropendous.org') # send these characters to the serial port
|
||||
print ser.read(20) # read the above characters back, assuming loopback
|
||||
|
||||
ser.write('www.Micropendous.org\n') # send this line to the serial port
|
||||
print ser.readline() # read the returned line
|
||||
|
||||
# be careful using readline() as it will block until a newline character is received
|
||||
|
||||
ser.close() # release/close the serial port
|
||||
|
||||
|
||||
# if this file is the program actually being run, print usage info or run SerialSendReceive
|
||||
if __name__ == '__main__':
|
||||
if (len(sys.argv) != 2):
|
||||
print "Serial Communication Example"
|
||||
print " Usage:"
|
||||
print " python", sys.argv[0], "<port>"
|
||||
print " Where <port> = serial port; COM? on Windows, '/dev/ttyACM0 on Linux'"
|
||||
print " Enumerated serial port can be found on Linux using dmesg"
|
||||
print " look for something like cdc_acm 2-1:1.0: ttyACM0: USB ACM device"
|
||||
print " python", sys.argv[0], "COM5"
|
||||
exit()
|
||||
SerialSendReceive(sys.argv[1])
|
||||
|
||||
|
||||
@@ -192,9 +192,9 @@ const USB_Descriptor_String_t PROGMEM LanguageString =
|
||||
*/
|
||||
const USB_Descriptor_String_t PROGMEM ManufacturerString =
|
||||
{
|
||||
.Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
|
||||
.Header = {.Size = USB_STRING_LEN(20), .Type = DTYPE_String},
|
||||
|
||||
.UnicodeString = L"Dean Camera"
|
||||
.UnicodeString = L"www.micropendous.org"
|
||||
};
|
||||
|
||||
/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
|
||||
@@ -203,9 +203,9 @@ const USB_Descriptor_String_t PROGMEM ManufacturerString =
|
||||
*/
|
||||
const USB_Descriptor_String_t PROGMEM ProductString =
|
||||
{
|
||||
.Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},
|
||||
.Header = {.Size = USB_STRING_LEN(44), .Type = DTYPE_String},
|
||||
|
||||
.UnicodeString = L"LUFA CDC Demo"
|
||||
.UnicodeString = L"Micropendous VirtualSerial FreeRTOS Loopback"
|
||||
};
|
||||
|
||||
/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
|
||||
|
||||
121
Micropendous/Firmware/VirtualSerial_FreeRTOS/FreeRTOSConfig.h
Normal file
121
Micropendous/Firmware/VirtualSerial_FreeRTOS/FreeRTOSConfig.h
Normal file
@@ -0,0 +1,121 @@
|
||||
/*
|
||||
FreeRTOS V7.4.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||
|
||||
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME. PLEASE VISIT
|
||||
http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* FreeRTOS tutorial books are available in pdf and paperback. *
|
||||
* Complete, revised, and edited pdf reference manuals are also *
|
||||
* available. *
|
||||
* *
|
||||
* Purchasing FreeRTOS documentation will not only help you, by *
|
||||
* ensuring you get running as quickly as possible and with an *
|
||||
* in-depth knowledge of how to use FreeRTOS, it will also help *
|
||||
* the FreeRTOS project to continue with its mission of providing *
|
||||
* professional grade, cross platform, de facto standard solutions *
|
||||
* for microcontrollers - completely free of charge! *
|
||||
* *
|
||||
* >>> See http://www.FreeRTOS.org/Documentation for details. <<< *
|
||||
* *
|
||||
* Thank you for using FreeRTOS, and thank you for your support! *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
This file is part of the FreeRTOS distribution.
|
||||
|
||||
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License (version 2) as published by the
|
||||
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
|
||||
|
||||
>>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to
|
||||
distribute a combined work that includes FreeRTOS without being obliged to
|
||||
provide the source code for proprietary components outside of the FreeRTOS
|
||||
kernel.
|
||||
|
||||
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
details. You should have received a copy of the GNU General Public License
|
||||
and the FreeRTOS license exception along with FreeRTOS; if not itcan be
|
||||
viewed here: http://www.freertos.org/a00114.html and also obtained by
|
||||
writing to Real Time Engineers Ltd., contact details for whom are available
|
||||
on the FreeRTOS WEB site.
|
||||
|
||||
1 tab == 4 spaces!
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* Having a problem? Start by reading the FAQ "My application does *
|
||||
* not run, what could be wrong?" *
|
||||
* *
|
||||
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
|
||||
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
|
||||
license and Real Time Engineers Ltd. contact details.
|
||||
|
||||
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||
including FreeRTOS+Trace - an indispensable productivity tool, and our new
|
||||
fully thread aware and reentrant UDP/IP stack.
|
||||
|
||||
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
|
||||
Integrity Systems, who sell the code with commercial support,
|
||||
indemnification and middleware, under the OpenRTOS brand.
|
||||
|
||||
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
|
||||
engineered and independently SIL3 certified version for use in safety and
|
||||
mission critical applications that require provable dependability.
|
||||
*/
|
||||
|
||||
#ifndef FREERTOS_CONFIG_H
|
||||
#define FREERTOS_CONFIG_H
|
||||
|
||||
#include <avr/io.h>
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
* Application specific definitions.
|
||||
*
|
||||
* These definitions should be adjusted for your particular hardware and
|
||||
* application requirements.
|
||||
*
|
||||
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
|
||||
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
|
||||
*
|
||||
* See http://www.freertos.org/a00110.html.
|
||||
*----------------------------------------------------------*/
|
||||
|
||||
#define configUSE_PREEMPTION 1
|
||||
#define configUSE_IDLE_HOOK 0
|
||||
#define configUSE_TICK_HOOK 0
|
||||
#define configCPU_CLOCK_HZ ( ( unsigned long ) F_CPU )
|
||||
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
|
||||
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 )
|
||||
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 )
|
||||
#define configTOTAL_HEAP_SIZE ( (size_t ) ( 1500 ) )
|
||||
#define configMAX_TASK_NAME_LEN ( 8 )
|
||||
#define configUSE_TRACE_FACILITY 0
|
||||
#define configUSE_16_BIT_TICKS 1
|
||||
#define configIDLE_SHOULD_YIELD 1
|
||||
#define configQUEUE_REGISTRY_SIZE 0
|
||||
|
||||
/* Co-routine definitions. */
|
||||
#define configUSE_CO_ROUTINES 0
|
||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||
|
||||
/* Set the following definitions to 1 to include the API function, or zero
|
||||
to exclude the API function. */
|
||||
|
||||
#define INCLUDE_vTaskPrioritySet 1
|
||||
#define INCLUDE_uxTaskPriorityGet 1
|
||||
#define INCLUDE_vTaskDelete 1
|
||||
#define INCLUDE_vTaskCleanUpResources 0
|
||||
#define INCLUDE_vTaskSuspend 1
|
||||
#define INCLUDE_vTaskDelayUntil 1
|
||||
#define INCLUDE_vTaskDelay 1
|
||||
|
||||
#endif /* FREERTOS_CONFIG_H */
|
||||
@@ -0,0 +1,64 @@
|
||||
# Purpose: Test the throughput of a Micropendous board loaded with Virtual Serial Port loopback firmware
|
||||
# Visit www.Micropendous.org/Serial for more info.
|
||||
# Created: 2008-09-30 by Opendous Inc.
|
||||
# Last Edit: 2009-10-03 by Opendous Inc.
|
||||
# Released under the MIT License
|
||||
import serial # for accessing the serial port on multiple platforms
|
||||
import time, sys
|
||||
|
||||
# test Serial Port throughput by sending and receiving transfersToComplete number
|
||||
# of transferSize sized strings
|
||||
# comport is a string - the Serial Port name to use
|
||||
# transferSize is an integer - the string lenght
|
||||
# transfersToComplete is an integer - the number of transfers to test with
|
||||
def SerialThroughputTest(comport, transferSize, transfersToComplete):
|
||||
|
||||
ser = serial.Serial(comport) # open serial port for communication
|
||||
|
||||
print ser # dump all info regarding serial port being used
|
||||
|
||||
ScriptStartTime = time.time()
|
||||
|
||||
# create a transferSize length string
|
||||
i = 0
|
||||
s = ''
|
||||
while (i < (transferSize - 1)):
|
||||
s = s + 'A'
|
||||
i = i + 1
|
||||
# want last letter to be X
|
||||
s = s + 'X'
|
||||
|
||||
# complete a series of transfers
|
||||
i = 0
|
||||
while (i < transfersToComplete):
|
||||
# send one string to device then get back the string
|
||||
ser.write(s)
|
||||
receivedData = ser.read(transferSize)
|
||||
#print receivedData
|
||||
i = i + 1
|
||||
|
||||
ScriptEndTime = time.time()
|
||||
print "\nIt took", (ScriptEndTime - ScriptStartTime), "seconds to transfer", \
|
||||
(transfersToComplete * transferSize), "bytes for a throughput of", \
|
||||
(((transfersToComplete * transferSize) / (ScriptEndTime - ScriptStartTime)) / 1000), "kbytes/second"
|
||||
# be careful using readline as it will block until a newline character is received
|
||||
|
||||
ser.close() # release/close the serial port
|
||||
|
||||
|
||||
# if this file is the program actually being run, print usage info or run SerialThroughputTest
|
||||
if __name__ == '__main__':
|
||||
if (len(sys.argv) != 4):
|
||||
print "Serial Communication Throughput Testing"
|
||||
print " Usage:"
|
||||
print " python", sys.argv[0], "<port> <transferSize> <testSize>"
|
||||
print " Where <port> = serial port; COM? on Windows, '/dev/ttyACM0 on Linux'"
|
||||
print " Enumerated serial port can be found on Linux using dmesg"
|
||||
print " look for something like cdc_acm 2-1:1.0: ttyACM0: USB ACM device"
|
||||
print " Where <transferSize> = the size of each transfer, this value should match"
|
||||
print " CDC_TXRX_EPSIZE in Descriptors.h for maximum throughput"
|
||||
print " Where <testSize> = how many transfers to complete, 100 is usually enough"
|
||||
print " "
|
||||
print " python", sys.argv[0], "COM5 64 100"
|
||||
exit()
|
||||
SerialThroughputTest(sys.argv[1], int(sys.argv[2]), int(sys.argv[3]))
|
||||
@@ -9,6 +9,9 @@
|
||||
/*
|
||||
Copyright 2013 Dean Camera (dean [at] fourwalledcubicle [dot] com)
|
||||
|
||||
Updated for Loopback by Opendous Inc. 2013-03-16
|
||||
www.Micropendous.org/VirtualSerial
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this
|
||||
software and its documentation for any purpose is hereby granted
|
||||
without fee, provided that the above copyright notice appear in
|
||||
@@ -36,6 +39,11 @@
|
||||
|
||||
#include "VirtualSerial.h"
|
||||
|
||||
|
||||
// Global buffer for use with STDIO functions
|
||||
volatile char buffer[CDC_TXRX_EPSIZE];
|
||||
|
||||
|
||||
/** LUFA CDC Class driver interface configuration and state information. This structure is
|
||||
* passed to all CDC Class driver functions, so that multiple instances of the same class
|
||||
* within a device can be differentiated from one another.
|
||||
@@ -82,19 +90,18 @@ int main(void)
|
||||
/* Create a regular character stream for the interface so that it can be used with the stdio.h functions */
|
||||
CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream);
|
||||
|
||||
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
|
||||
GlobalInterruptEnable();
|
||||
|
||||
for (;;)
|
||||
{
|
||||
CheckJoystickMovement();
|
||||
// Create Tasks for FreeRTOS
|
||||
// The VirtualSerial/USB-CDC task is highest priority to ensure USB functions run in time
|
||||
xTaskCreate(MainTask, (signed portCHAR *) "MainTask", configMINIMAL_STACK_SIZE, NULL, MAIN_TASK_PRIORITY, NULL );
|
||||
xTaskCreate(VirtualSerialTask, (signed portCHAR *) "ViSeTask", configMINIMAL_STACK_SIZE, NULL, (ViSe_TASK_PRIORITY | portPRIVILEGE_BIT), NULL );
|
||||
|
||||
/* Must throw away unused bytes from the host, or it will lock up while waiting for the device */
|
||||
CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
|
||||
// Start the scheduler
|
||||
vTaskStartScheduler();
|
||||
|
||||
CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
|
||||
USB_USBTask();
|
||||
}
|
||||
// Should never get here!
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Configures the board hardware and chip peripherals for the demo's functionality. */
|
||||
@@ -107,44 +114,31 @@ void SetupHardware(void)
|
||||
/* Disable clock division */
|
||||
clock_prescale_set(clock_div_1);
|
||||
|
||||
/* Disable JTAG; allows upper nibble of Port F to be used as GPIO */
|
||||
#if ( defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB647__) || \
|
||||
defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || \
|
||||
defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__) || \
|
||||
defined(__AVR_ATmega32U6__) )
|
||||
JTAG_DISABLE();
|
||||
#endif
|
||||
|
||||
/* Hardware Initialization */
|
||||
Joystick_Init();
|
||||
LEDs_Init();
|
||||
LEDs_TurnOnLEDs(LEDS_LED1);
|
||||
DISABLE_VOLTAGE_TXRX(); // used on Micropendous REV1/2 boards
|
||||
DISABLE_EXT_SRAM(); // used on Micropendous REV1/2 boards
|
||||
SELECT_USB_B(); // needed for Micropendous REV1/2 boards
|
||||
USB_Init();
|
||||
}
|
||||
|
||||
/** Checks for changes in the position of the board joystick, sending strings to the host upon each change. */
|
||||
void CheckJoystickMovement(void)
|
||||
|
||||
// CoRoutines are not enabled, but FreeRTOS complains during compile
|
||||
void vApplicationIdleHook(void)
|
||||
{
|
||||
uint8_t JoyStatus_LCL = Joystick_GetStatus();
|
||||
char* ReportString = NULL;
|
||||
static bool ActionSent = false;
|
||||
|
||||
if (JoyStatus_LCL & JOY_UP)
|
||||
ReportString = "Joystick Up\r\n";
|
||||
else if (JoyStatus_LCL & JOY_DOWN)
|
||||
ReportString = "Joystick Down\r\n";
|
||||
else if (JoyStatus_LCL & JOY_LEFT)
|
||||
ReportString = "Joystick Left\r\n";
|
||||
else if (JoyStatus_LCL & JOY_RIGHT)
|
||||
ReportString = "Joystick Right\r\n";
|
||||
else if (JoyStatus_LCL & JOY_PRESS)
|
||||
ReportString = "Joystick Pressed\r\n";
|
||||
else
|
||||
ActionSent = false;
|
||||
|
||||
if ((ReportString != NULL) && (ActionSent == false))
|
||||
{
|
||||
ActionSent = true;
|
||||
|
||||
/* Write the string to the virtual COM port via the created character stream */
|
||||
fputs(ReportString, &USBSerialStream);
|
||||
|
||||
/* Alternatively, without the stream: */
|
||||
// CDC_Device_SendString(&VirtualSerial_CDC_Interface, ReportString);
|
||||
}
|
||||
//vCoRoutineSchedule();
|
||||
}
|
||||
|
||||
|
||||
/** Event handler for the library USB Connection event. */
|
||||
void EVENT_USB_Device_Connect(void)
|
||||
{
|
||||
@@ -173,3 +167,70 @@ void EVENT_USB_Device_ControlRequest(void)
|
||||
CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void VirtualSerialTask(void *pvParameters)
|
||||
{
|
||||
|
||||
for (;;)
|
||||
{
|
||||
// Must throw away unused bytes from the host, or it will lock up while waiting for the device
|
||||
// TODO: this causes loopback to fail
|
||||
//CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
|
||||
|
||||
// want CDC and USB functions to run without interruption but
|
||||
// with interrupts enabled so ENTER/EXIT_CRITICAL won't work
|
||||
vTaskSuspendAll();
|
||||
|
||||
CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
|
||||
USB_USBTask();
|
||||
|
||||
xTaskResumeAll();
|
||||
|
||||
vTaskDelay((portTickType) taskDelayPeriod );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void MainTask(void *pvParameters)
|
||||
{
|
||||
for(;;) {
|
||||
MainTaskLoop();
|
||||
portYIELD();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MainTaskLoop(void)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
// If the host has sent data then echo it back
|
||||
// Throughput is maximized if the full EP buffer is read and sent each time
|
||||
// Throughput approaches CDC_TXRX_EPSIZE kbytes/second and depends on transfer size from host
|
||||
// NOTE: AVRlibc stdio functions are not thread-safe and must therefore be in a Suspend-Resume section
|
||||
vTaskSuspendAll();
|
||||
count = fread(&buffer, 1, CDC_TXRX_EPSIZE, &USBSerialStream);
|
||||
xTaskResumeAll();
|
||||
|
||||
//TODO: you can process the received buffer data here
|
||||
|
||||
vTaskSuspendAll();
|
||||
if (count > 0) {
|
||||
fwrite(&buffer, 1, count, &USBSerialStream);
|
||||
}
|
||||
xTaskResumeAll();
|
||||
|
||||
|
||||
// If HWB Button is pressed then send formatted strings
|
||||
if (Buttons_GetStatus()) {
|
||||
// NOTE: AVRlibc stdio functions are not thread-safe and must therefore be in a Suspend-Resume section
|
||||
vTaskSuspendAll();
|
||||
fprintf_P(&USBSerialStream, PSTR("\r\nHWB has been pressed!\r\n")); // send a constant string stored in FLASH
|
||||
fprintf(&USBSerialStream, "PORTD = %3x\r\n", PIND); // send a string that is dynamic and stored in SRAM
|
||||
xTaskResumeAll();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
* Header file for VirtualSerial.c.
|
||||
*/
|
||||
|
||||
#ifndef _VIRTUALSERIAL_H_
|
||||
#define _VIRTUALSERIAL_H_
|
||||
#ifndef _VIRTUALSERIAL_FREERTOS_H_
|
||||
#define _VIRTUALSERIAL_FREERTOS_H_
|
||||
|
||||
/* Includes: */
|
||||
#include <avr/io.h>
|
||||
@@ -47,9 +47,22 @@
|
||||
#include "Descriptors.h"
|
||||
|
||||
#include <LUFA/Drivers/Board/LEDs.h>
|
||||
#include <LUFA/Drivers/Board/Joystick.h>
|
||||
#include <LUFA/Drivers/Board/Buttons.h>
|
||||
#include <LUFA/Drivers/USB/USB.h>
|
||||
|
||||
// FreeRTOS include files
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "croutine.h"
|
||||
#include "FreeRTOSConfig.h"
|
||||
|
||||
// FreeRTOS Task Settings
|
||||
// USB-CDC/VirtualSerial Task must run at higher priority than the MainTask loop
|
||||
#define MAIN_TASK_PRIORITY ( configMAX_PRIORITIES - 3 )
|
||||
#define ViSe_TASK_PRIORITY ( configMAX_PRIORITIES - 1 ) // highest priority
|
||||
|
||||
#define taskDelayPeriod 3
|
||||
|
||||
/* Macros: */
|
||||
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
|
||||
#define LEDMASK_USB_NOTREADY LEDS_LED1
|
||||
@@ -65,7 +78,10 @@
|
||||
|
||||
/* Function Prototypes: */
|
||||
void SetupHardware(void);
|
||||
void CheckJoystickMovement(void);
|
||||
void MainTaskLoop(void);
|
||||
void vApplicationIdleHook(void);
|
||||
static void VirtualSerialTask(void *pvParameters);
|
||||
static void MainTask(void *pvParameters);
|
||||
|
||||
void EVENT_USB_Device_Connect(void);
|
||||
void EVENT_USB_Device_Disconnect(void);
|
||||
|
||||
@@ -0,0 +1,548 @@
|
||||
:10000000C6C00000E3C00000E1C00000DFC0000087
|
||||
:10001000DDC00000DBC00000D9C00000D7C0000078
|
||||
:10002000D5C00000D3C00000B0C300007BC40000F6
|
||||
:10003000CDC00000CBC00000C9C00000C7C0000098
|
||||
:10004000C5C000000C94450DC1C00000BFC0000039
|
||||
:10005000BDC00000BBC00000B9C00000B7C00000B8
|
||||
:10006000B5C00000B3C00000B1C00000AFC00000C8
|
||||
:10007000ADC00000ABC00000A9C00000A7C00000D8
|
||||
:10008000A5C00000A3C00000A1C000009FC00000E8
|
||||
:100090009DC000009BC000000D0A485742206861C7
|
||||
:1000A00073206265656E2070726573736564210DDF
|
||||
:1000B0000A005A034D006900630072006F0070006F
|
||||
:1000C00065006E0064006F0075007300200056002C
|
||||
:1000D000690072007400750061006C0053006500D7
|
||||
:1000E0007200690061006C0020004600720065002B
|
||||
:1000F0006500520054004F00530020004C006F0078
|
||||
:100100006F0070006200610063006B0000002A0352
|
||||
:100110007700770077002E006D00690063007200A1
|
||||
:100120006F00700065006E0064006F007500730062
|
||||
:100130002E006F007200670000000403090409022A
|
||||
:100140003E00020100C03209040000010202010069
|
||||
:1001500005240010010424020605240600010705F9
|
||||
:1001600082030800FF09040100020A0000000705DD
|
||||
:10017000040210000507058302100005120110019A
|
||||
:1001800002000008EB03442001000102DC011124FD
|
||||
:100190001FBECFEFD0E2DEBFCDBF11E0A0E0B1E0E7
|
||||
:1001A000E4ECF1E200E00BBF02C007900D92A23533
|
||||
:1001B000B107D9F71BBE17E0A2E5B1E001C01D925F
|
||||
:1001C000A93CB107E1F737D00C94E01019CF0E9499
|
||||
:1001D0004E0980E291E09ED64BD50E94F30983E060
|
||||
:1001E00090E00E949B0AF3CF84B7877F84BF88E1A9
|
||||
:1001F0000FB6F89480936000109260000FBE80E00C
|
||||
:1002000090E020E80FB6F89420936100809361009D
|
||||
:100210000FBE85B7806890E00FB6F89485BF0FBE1B
|
||||
:1002200085BF219A2998299A73986B9A6C9A749A27
|
||||
:1002300077986F9A8FC2AF92BF92CF92DF92EF9270
|
||||
:10024000FF920F93D1DF80E291E062E571E0B8D6D2
|
||||
:10025000789487EB91E060E071E040E850E020E0C6
|
||||
:1002600030E002E0EE24FF24CC24DD24AA24BB24C9
|
||||
:10027000F0D687EE90E069E071E040E850E020E0E1
|
||||
:1002800030E004E0E6D6E1D780E090E00F91FF9007
|
||||
:10029000EF90DF90CF90BF90AF9008952998089588
|
||||
:1002A000299A089580E291E0ACD5882311F090E07E
|
||||
:1002B00001C092E085B18D7F892B85B9089580E2D8
|
||||
:1002C00091E0F2C4CF93DF93E9D78CEA97E061E045
|
||||
:1002D00070E040E150E022E531E00E94880DEC0141
|
||||
:1002E0000E94F309DBD71C161D064CF48CEA97E03C
|
||||
:1002F00061E070E0AE0122E531E00E94C50D0E9490
|
||||
:10030000F3098CB182FD30C0C9D700D000D0C2E55E
|
||||
:10031000D1E0ADB7BEB71296DC93CE93119788E9C2
|
||||
:1003200090E014969C938E9313970E946C0D29B1C4
|
||||
:1003300000D0EDB7FEB73196ADB7BEB71296DC93DD
|
||||
:10034000CE93119782E191E0938382832483158277
|
||||
:100350000E945D0DEDB7FEB736960FB6F894FEBF5E
|
||||
:100360000FBEEDBF0E94F309DF91CF910895AADF80
|
||||
:100370000E94940CFCCF923029F0933041F09130E0
|
||||
:10038000E9F417C08EE390E0EEE3F1E01BC08130AA
|
||||
:1003900041F0813018F0823089F406C0EAE3F1E0E0
|
||||
:1003A00005C0EEE0F1E002C0E2EBF0E0849190E005
|
||||
:1003B00009C082E190E0ECE7F1E004C080E090E069
|
||||
:1003C000E0E0F0E0DA011196FC93EE9308952091BD
|
||||
:1003D000C7073091C8072617370720F4B901FC0179
|
||||
:1003E00020E037C061157105D1F72091E8002E7724
|
||||
:1003F0002093E800F4CF8091C007882309F43FC020
|
||||
:100400008530C9F18091E80083FD37C08091E80014
|
||||
:1004100082FD2BC08091E80080FF1BC08091F2001C
|
||||
:100420009091F30006C021912093F100615070403B
|
||||
:1004300001966115710519F088309105A0F321E04E
|
||||
:100440008830910509F020E08091E8008E77809354
|
||||
:10045000E8006115710579F6222369F606C08091DE
|
||||
:10046000C007882361F0853061F08091E80082FF49
|
||||
:10047000F6CF80E0089583E0089581E0089582E05A
|
||||
:10048000089583E008952091C7073091C807261783
|
||||
:10049000370720F4B901FC0120E038C0611571056F
|
||||
:1004A000D1F72091E8002E772093E800F4CF8091D7
|
||||
:1004B000C007882309F440C08530D1F18091E8005D
|
||||
:1004C00083FD38C08091E80082FD2CC08091E80057
|
||||
:1004D00080FF1CC08091F2009091F30007C024912E
|
||||
:1004E0002093F100319661507040019661157105BD
|
||||
:1004F00019F08830910598F321E08830910509F0D2
|
||||
:1005000020E08091E8008E778093E8006115710506
|
||||
:1005100071F6222361F606C08091C007882361F03E
|
||||
:10052000853061F08091E80082FFF6CF80E0089589
|
||||
:1005300083E0089581E0089582E0089583E00895BE
|
||||
:10054000982F2AC09093E900981739F07091EC0029
|
||||
:100550002091ED005091F00003C0242F762F50E041
|
||||
:1005600021FF19C03091EB003E7F3093EB003091BA
|
||||
:10057000ED003D7F3093ED003091EB003160309322
|
||||
:10058000EB007093EC002093ED005093F00020916D
|
||||
:10059000EE0027FF08C09F5F9730A0F28F70809316
|
||||
:1005A000E90081E0089580E008950F931F93CF93B1
|
||||
:1005B000DF93162FEC0100E02AC09881992329F1DE
|
||||
:1005C0006B81E981FA812C81892F8F70873018F532
|
||||
:1005D0006295660F660F607C991F9927991F692B9A
|
||||
:1005E000223010F096E001C092E028E030E040E0D8
|
||||
:1005F00003C04F5F220F331F2E173F07D0F34295E2
|
||||
:10060000407F492B9DDF882331F00F5F259601172E
|
||||
:10061000A1F681E001C080E0DF91CF911F910F91A1
|
||||
:1006200008958091C10787FF13C004C08091C0075F
|
||||
:100630008823B9F08091E80082FFF8CF8091E8002C
|
||||
:100640008B778093E80008958091C007882349F054
|
||||
:100650008091E80080FFF8CF8091E8008E7780934A
|
||||
:10066000E80008958091E4009091E50045E601C01E
|
||||
:10067000C9012091EC0020FF23C02091E80020FD5B
|
||||
:1006800015C02091C007222399F0253099F02091C0
|
||||
:10069000EB0025FD11C02091E4003091E500281702
|
||||
:1006A000390739F3415021F784E0089580E0089537
|
||||
:1006B00082E0089583E0089581E0089580E0089540
|
||||
:1006C0002091E80022FFDDCFF9CF0F931F93CF9346
|
||||
:1006D000DF934ED055D0C8EDD0E088818F778883E6
|
||||
:1006E00088818068888388818F7D8883E7EDF0E04A
|
||||
:1006F00080818068808319BC1092C0071092BC076B
|
||||
:100700001092BE071092BD0700EE10E0F801808144
|
||||
:100710008B7F808388818160888380E060E042E015
|
||||
:100720000FDFE1EEF0E080818E7F8083E2EEF0E08B
|
||||
:10073000808181608083808188608083F8018081EE
|
||||
:100740008E7F8083888180618883DF91CF911F9124
|
||||
:100750000F910895E8EDF0E080818F7E8083E7EDD2
|
||||
:10076000F0E080818160808381E08093BF07ADCF1E
|
||||
:10077000E8EDF0E080818C7F80831092E2000895A4
|
||||
:100780001092DA001092E10008951F920F920FB6B6
|
||||
:100790000F920BB60F9211242F933F934F935F93B9
|
||||
:1007A0006F937F938F939F93AF93BF93EF93FF9339
|
||||
:1007B0008091E10082FF0AC08091E20082FF06C0C2
|
||||
:1007C0008091E1008B7F8093E10051D28091DA002B
|
||||
:1007D00080FF1DC08091D80080FF19C08091DA0091
|
||||
:1007E0008E7F8093DA008091D90080FF0CC084E175
|
||||
:1007F00089BD86E189BD09B400FEFDCF81E080930B
|
||||
:10080000C0074CDD04C019BC1092C00749DD8091BF
|
||||
:10081000E10080FF18C08091E20080FF14C0809149
|
||||
:10082000E2008E7F8093E2008091E20080618093FD
|
||||
:10083000E2008091D80080628093D80019BC85E0E6
|
||||
:100840008093C00714D28091E10084FF2DC0809175
|
||||
:10085000E20084FF29C084E189BD86E189BD09B435
|
||||
:1008600000FEFDCF8091D8008F7D8093D8008091CD
|
||||
:10087000E1008F7E8093E1008091E2008F7E809383
|
||||
:10088000E2008091E20081608093E2008091BC07E9
|
||||
:10089000882321F48091E30087FF02C084E001C037
|
||||
:1008A00081E08093C007E3D18091E10083FF27C0FE
|
||||
:1008B0008091E20083FF23C08091E100877F8093D5
|
||||
:1008C000E10082E08093C0071092BC078091E100B4
|
||||
:1008D0008E7F8093E1008091E2008E7F8093E20022
|
||||
:1008E0008091E20080618093E20080E060E042E07D
|
||||
:1008F00027DE8091F00088608093F000B8D1FF91EE
|
||||
:10090000EF91BF91AF919F918F917F916F915F9187
|
||||
:100910004F913F912F910F900BBE0F900FBE0F90F4
|
||||
:100920001F9018951F920F920FB60F920BB60F9251
|
||||
:1009300011242F933F934F935F936F937F938F93E4
|
||||
:100940009F93AF93BF93CF93EF93FF93C091E90031
|
||||
:10095000CF708091EC001092E9008091F000877FC9
|
||||
:100960008093F00078941DD01092E9008091F000FF
|
||||
:1009700088608093F000C093E900FF91EF91CF91E0
|
||||
:10098000BF91AF919F918F917F916F915F914F91A7
|
||||
:100990003F912F910F900BBE0F900FBE0F901F90A5
|
||||
:1009A00018951F93CF93DF93CDB7DEB7AC970FB6F3
|
||||
:1009B000F894DEBF0FBECDBF80E0E1ECF7E0909190
|
||||
:1009C000F10091938F5F8830D1F779DC8091E80056
|
||||
:1009D00083FF35C18091C1072091C207253009F4FA
|
||||
:1009E00084C0263040F42130A1F1213070F0233052
|
||||
:1009F00009F025C12EC0283009F4F3C0293009F4CC
|
||||
:100A000002C1263009F01BC193C0803821F0823822
|
||||
:100A100009F015C108C08091BD079091BE079923C8
|
||||
:100A200071F082600CC08091C5078F708093E900DF
|
||||
:100A30009091EB0081E095FF80E01092E9009091A9
|
||||
:100A4000E800977F9093E8008093F1001092F10006
|
||||
:100A5000D3C0882319F0823009F0F1C090E08F7183
|
||||
:100A60009070009729F08230910509F0E8C00BC022
|
||||
:100A70008091C307813009F0E2C0233009F080E0A3
|
||||
:100A80008093BE072CC08091C307882341F5209135
|
||||
:100A9000C5072F7009F4D3C02093E9008091EB00C3
|
||||
:100AA00080FF1DC08091C207833021F48091EB004C
|
||||
:100AB000806213C08091EB0080618093EB0081E045
|
||||
:100AC00090E002C0880F991F2A95E2F78093EA0010
|
||||
:100AD0001092EA008091EB0088608093EB00109206
|
||||
:100AE000E9008091E800877F8AC0882309F0A7C0C9
|
||||
:100AF0001091C3071F778091E3008078812B80934A
|
||||
:100B0000E3008091E800877F8093E8008ADD809190
|
||||
:100B1000E80080FFFCCF8091E30080688093E300D1
|
||||
:100B2000112311F083E001C082E08093C00787C0E9
|
||||
:100B30008058823008F083C08091C3079091C40729
|
||||
:100B400023E08C3D9207A9F583E08C838AE28B83B6
|
||||
:100B50005FB7F894DE01139680E090E04EE061E22A
|
||||
:100B6000E42FF0E060935700E49180FF03C0E2952A
|
||||
:100B7000EF704F5FEF702E2F30E0EA3018F0295CF5
|
||||
:100B80003F4F02C0205D3F4F13963C932E93129728
|
||||
:100B9000019612968431910519F75FBF8091E800A4
|
||||
:100BA000877F8093E800CE0103966AE270E00FDC55
|
||||
:100BB00012C06091C507AE014F5F5F4FDCDBBC0127
|
||||
:100BC000009709F43CC08091E800877F8093E8009B
|
||||
:100BD00089819A8158DC8091E8008B778093E800C6
|
||||
:100BE0002EC0803861F58091E800877F8093E8000F
|
||||
:100BF0008091BC078093F1008091E8008E7780930C
|
||||
:100C0000E8000FDD1CC08823D1F49091C307923017
|
||||
:100C1000B0F48091E800877F8093E8009093BC0750
|
||||
:100C200000DD8091BC07882321F48091E30087FFD9
|
||||
:100C300002C084E001C081E08093C00733DB809173
|
||||
:100C4000E80083FF0AC08091E800877F8093E80076
|
||||
:100C50008091EB0080628093EB00AC960FB6F89425
|
||||
:100C6000DEBF0FBECDBFDF91CF911F9108950895D4
|
||||
:100C7000CF938091C0078823A9F08091E9008F70FD
|
||||
:100C80009091EC0090FF02C0C0E801C0C0E0C82B0A
|
||||
:100C90001092E9008091E80083FF01C082DECF70EE
|
||||
:100CA000C093E900CF910895CF93DF93EC01809139
|
||||
:100CB000E80083FFA3C0888190E02091C5073091B0
|
||||
:100CC000C6072817390709F099C08091C2078132F9
|
||||
:100CD00069F0823220F4803209F090C03CC0823248
|
||||
:100CE00009F46BC0833209F089C07AC08091C107D2
|
||||
:100CF000813A09F083C08091E800877F8093E80003
|
||||
:100D00008091E80080FFFCCF8C899D89AE89BF89E6
|
||||
:100D10008093F100492F5A2F6B2F77274093F100D2
|
||||
:100D2000AD01662777274093F1008B2F9927AA27DB
|
||||
:100D3000BB278093F100888D8093F100898D80938B
|
||||
:100D4000F1008A8D8093F1008091E8008E77809386
|
||||
:100D5000E80067DC53C08091C107813209F04EC0C2
|
||||
:100D60008091E800877F8093E80005C08091C007EC
|
||||
:100D7000882309F443C08091E80082FFF7CF3091C7
|
||||
:100D8000F1002091F1009091F1008091F1003C8BF5
|
||||
:100D90002D8B9E8B8F8B8091F100888F8091F1003D
|
||||
:100DA000898F8091F1008A8F8091E8008B77809302
|
||||
:100DB000E80037DCCE0117D121C08091C107813214
|
||||
:100DC000E9F48091E800877F8093E8002ADC809135
|
||||
:100DD000C3079091C407998B888BCE0104D10EC0B4
|
||||
:100DE0008091C107813251F48091E800877F809320
|
||||
:100DF000E80017DCCE016091C307F5D0DF91CF91F9
|
||||
:100E00000895CF93DF93EC014096FC018BE0DF0166
|
||||
:100E10001D928A95E9F782E08C83898783E08E872B
|
||||
:100E2000CE01019661E0C1DB882359F0CE01069620
|
||||
:100E300061E0BBDB882329F0CE010B9661E0B5DBD6
|
||||
:100E400001C080E0DF91CF910895CF93FC01C62FC0
|
||||
:100E50008091C0078430E9F444895589668977898F
|
||||
:100E60004115510561057105A1F081818F70809355
|
||||
:100E7000E9008091E80085FD08C08091E8008E7748
|
||||
:100E80008093E800EFDB882329F4C093F10080E031
|
||||
:100E900001C082E0CF910895282FFB0184859585BC
|
||||
:100EA000622FD3DF882319F08FEF9FEF089580E042
|
||||
:100EB00090E00895FC018091C007843029F54489B1
|
||||
:100EC0005589668977894115510561057105E1F0FC
|
||||
:100ED00081818F708093E9008091F2009091F300FE
|
||||
:100EE0000097A1F09091E8008091E8008E778093C0
|
||||
:100EF000E80095FD0DC0B6DB882359F49091E80019
|
||||
:100F00009E779093E800089582E0089580E0089528
|
||||
:100F100080E008952091C007243099F4FC014489B1
|
||||
:100F2000558966897789411551056105710549F033
|
||||
:100F300021812F702093E9002091E80020FF01C05B
|
||||
:100F4000B9CF0895FC018091C007843051F54489E0
|
||||
:100F5000558966897789411551056105710509F142
|
||||
:100F600086818F708093E9008091E80082FF1CC029
|
||||
:100F70008091F2009091F300009721F08091F100B0
|
||||
:100F800090E002C08FEF9FEF2091F2003091F300CC
|
||||
:100F90002115310559F42091E8002B772093E800C2
|
||||
:100FA00008958FEF9FEF08958FEF9FEF0895FC0155
|
||||
:100FB00084859585C7DF97FF02C08EEF9FEF089568
|
||||
:100FC000FB012EE0DB011D922A95E9F723E0238344
|
||||
:100FD0002CE437E03187208727ED37E033872287FD
|
||||
:100FE0009587848708950895CF93DF93EC01E0916E
|
||||
:100FF0006001F091610193838283809168019091F7
|
||||
:101000006901C817D90760F480916C0190916D0156
|
||||
:1010100060916001709161016E5F7F4F2DD316C0AA
|
||||
:1010200080916E0190916F016091600170916101FA
|
||||
:101030006E5F7F4F21D38091500190915101C8176D
|
||||
:10104000D90720F4D0935101C0935001DF91CF9183
|
||||
:1010500008954F925F926F927F928F929F92BF926C
|
||||
:10106000CF92DF92EF92FF920F931F93CF93DF9374
|
||||
:101070002C014B01EA013901B02E81E290E058D3F6
|
||||
:101080008C01009709F4CEC0C114D10419F4CE012B
|
||||
:101090004FD36C01F801D08EC78AC114D10419F462
|
||||
:1010A000C80176D3BFC0C60165EA70E0AE01EFD4D7
|
||||
:1010B000CE010197F801C788D08CC80ED91EC8018F
|
||||
:1010C0004996B40148E050E0E9D4F80110A2CB2DD4
|
||||
:1010D000F4E0FB1508F4C4E0F801C68B72E0872E3B
|
||||
:1010E000912C800E911EC4019AD2C8010C9697D201
|
||||
:1010F000F8011187008785E090E08C1B91099587A6
|
||||
:101100008487138B028BC601B201A30142D3F8017D
|
||||
:1011100091838083E114F10419F0F70111830083B6
|
||||
:101120000FB6F8940F9280916A018F5F80936A01E5
|
||||
:1011300080916001909161010097B1F51093610178
|
||||
:101140000093600180916A01813009F03CC0C0E0E9
|
||||
:10115000D0E0CE0163E0880F991F6A95E1F78C0F0C
|
||||
:101160009D1F8E589E4F4DD22196C530D10589F7CF
|
||||
:10117000CFE9D1E0CE0145D258EAC52E51E0D52EB7
|
||||
:10118000C6013FD281EB91E03CD28AEB91E039D2AB
|
||||
:1011900083EC91E036D2D0936F01C0936E01D09270
|
||||
:1011A0006D01C0926C010FC080916601882359F4D3
|
||||
:1011B000E0916001F09161018689B81620F01093EA
|
||||
:1011C000610100936001F801268980917001821706
|
||||
:1011D00010F420937001809171018F5F80937101F1
|
||||
:1011E00080916701821710F42093670130E0C901F4
|
||||
:1011F00043E0880F991F4A95E1F7820F931F8E589D
|
||||
:101200009E4FB40110D20F900FBE809166018823CB
|
||||
:1012100059F0E0916001F091610186898B1520F40D
|
||||
:1012200083D302C08FEF01C081E0DF91CF911F9186
|
||||
:101230000F91FF90EF90DF90CF90BF909F908F9095
|
||||
:101240007F906F905F904F900895AF92BF92CF9232
|
||||
:10125000DF92EF92FF920F938DE69AE06BE471E0DC
|
||||
:1012600040E850E020E030E000E0EE24FF24CC2411
|
||||
:10127000DD24AA24BB24EDDE813041F4F894809370
|
||||
:101280006601109269011092680113D30F91FF90CB
|
||||
:10129000EF90DF90CF90BF90AF900895809165015F
|
||||
:1012A0008F5F8093650108950F931F93CF93DF9312
|
||||
:1012B00080916501882309F08CC08091680190912C
|
||||
:1012C000690101969093690180936801809168019A
|
||||
:1012D00090916901009779F580916E0190916F016D
|
||||
:1012E00020916C0130916D0130936F0120936E015C
|
||||
:1012F00090936D0180936C01809162018F5F809368
|
||||
:101300006201E0916E01F0916F018081882319F4F0
|
||||
:101310008FEF9FEF0CC0E0916E01F0916F0105809F
|
||||
:10132000F681E02D0680F781E02D828193819093F4
|
||||
:1013300051018093500120916801309169018091A1
|
||||
:101340005001909151012817390708F447C0E091E6
|
||||
:101350006E01F0916F018081882319F48FEF9FEF68
|
||||
:1013600012C0E0916E01F0916F010580F681E02DD1
|
||||
:10137000C681D7818A819B81209168013091690162
|
||||
:101380002817390728F4909351018093500126C003
|
||||
:101390008E010E5F1F4FC801A4D18C899D890097D3
|
||||
:1013A00019F0CE010C969DD12E898091670182178C
|
||||
:1013B00010F42093670130E0C90143E0880F991FC2
|
||||
:1013C0004A95E1F7820F931F8E589E4FB8012BD19B
|
||||
:1013D000BECF809164018F5F80936401DF91CF91D4
|
||||
:1013E0001F910F910895EF92FF920F931F93CF9348
|
||||
:1013F000DF930F92CDB7DEB70FB6F8940F928091BE
|
||||
:10140000650181508093650180916501882309F011
|
||||
:1014100059C080916A018823A1F555C0E091B601B9
|
||||
:10142000F091B701E680F780C7010C965AD1870189
|
||||
:101430000E5F1F4FC80155D1D70156962C91569774
|
||||
:1014400080916701821710F42093670130E0C90191
|
||||
:1014500053E0880F991F5A95E1F7820F931F8E581A
|
||||
:101460009E4FB801E0D0E0916001F0916101D70199
|
||||
:1014700056969C9156978689981720F0B1E0B983CB
|
||||
:1014800001C019828091B101882341F680916401E5
|
||||
:10149000882339F40BC008DF809164018150809368
|
||||
:1014A0006401809164018823B1F707C0E981E130CC
|
||||
:1014B00021F080916301813029F41092630134D2CC
|
||||
:1014C00081E001C080E00F900FBE0F90DF91CF91BF
|
||||
:1014D0001F910F91FF90EF90089523C0DFDEC09120
|
||||
:1014E000BA0181DFCC23E9F00FB6F8940F92E091B6
|
||||
:1014F000BF01F091C001C681D781CE010296F1D023
|
||||
:1015000080916A01815080936A0180916B018150C2
|
||||
:1015100080936B010F900FBE8F89988D39D1CE01CA
|
||||
:1015200037D180916B018823C9F680917201823096
|
||||
:10153000C0F3FAD1F6CF0F931F93CF93DF938C01B3
|
||||
:10154000009791F0ABDEC0916801D0916901C00FA6
|
||||
:10155000D11F80916001909161010296C2D0CE01AD
|
||||
:1015600043DD41DF882309F4DFD1DF91CF911F9163
|
||||
:101570000F91089580916501882349F081E080935F
|
||||
:101580006301089580916701815080936701809184
|
||||
:10159000670190E0FC0173E0EE0FFF1F7A95E1F721
|
||||
:1015A000E80FF91FEE58FE4F8081882359F3809190
|
||||
:1015B000670190E0FC0163E0EE0FFF1F6A95E1F721
|
||||
:1015C000E80FF91FEE58FE4FA181B28112960D90DF
|
||||
:1015D000BC91A02DB283A183CF010396A817B907B0
|
||||
:1015E00031F412968D919C9113979283818301809F
|
||||
:1015F000F281E02D86819781909361018093600153
|
||||
:101600000895FC010396928381832FEF3FEF34838B
|
||||
:101610002383968385839087878310820895FC01B6
|
||||
:10162000118610860895CF93DF93EC01FB01898129
|
||||
:101630009A81DC0112962D913C911397338322837A
|
||||
:1016400029813A813583248312962D913C911397F9
|
||||
:10165000D90115967C936E931497DC0113967C93B5
|
||||
:101660006E9312977A836983D187C08788818F5F51
|
||||
:101670008883DF91CF910895CF93DF939C01EB0195
|
||||
:10168000488159818FEF4F3F580721F4F901A78115
|
||||
:10169000B08510C0D901139604C012960D90BC916C
|
||||
:1016A000A02D1296ED91FC9113978081918148179E
|
||||
:1016B000590798F71296ED91FC911397FB83EA83F3
|
||||
:1016C000D583C483BD83AC831396DC93CE931297EA
|
||||
:1016D00039872887F90180818F5F8083DF91CF91DF
|
||||
:1016E0000895FC01A281B3818481958115969C9314
|
||||
:1016F0008E931497A481B5818281938113969C93D4
|
||||
:101700008E931297A085B18511968D919C91129719
|
||||
:101710008E179F0731F48481958112969C938E9346
|
||||
:101720001197118610868C9181508C938C9108951D
|
||||
:10173000CF93DF93EC01B2DD8091CC019091CD018C
|
||||
:10174000009731F48FEC91E09093CD018093CC0120
|
||||
:101750008091AA079091AB079E01280F391F45E0A1
|
||||
:101760002B3D340770F48217930758F4C091CC01D5
|
||||
:10177000D091CD01C80FD91F3093AB072093AA0792
|
||||
:1017800002C0C0E0D0E02FDECE01DF91CF910895FE
|
||||
:10179000089521E1FC012083319732E23083FC017E
|
||||
:1017A0003297A3E3A083FC0133976083FC01349755
|
||||
:1017B0007083FC0135971082FC01369760E86083E6
|
||||
:1017C000FC0137971082FC01389762E06083FC01CE
|
||||
:1017D000399763E06083FC013A9764E06083FC0121
|
||||
:1017E0003B9765E06083FC013C9766E06083FC0109
|
||||
:1017F0003D9767E06083FC013E9768E06083FC01F1
|
||||
:101800003F9769E06083FC01709760E16083FC01B1
|
||||
:1018100071972083FC01729722E12083FC0173976A
|
||||
:1018200023E12083FC01749724E12083FC01759758
|
||||
:1018300025E12083FC01769726E12083FC01779740
|
||||
:1018400027E12083FC01789728E12083FC01799728
|
||||
:1018500029E12083FC017A9720E22083FC017B9719
|
||||
:1018600021E22083FC017C973083FC017D9723E2F9
|
||||
:101870002083FC017E974083FC017F975083FC010D
|
||||
:10188000B09726E22083FC01B19727E22083FC0178
|
||||
:10189000B29728E22083FC01B39729E22083FC0160
|
||||
:1018A000B49720E32083FC01B59721E3208386973A
|
||||
:1018B000089589EF90E090938900809388001092BA
|
||||
:1018C00080008BE08093810082E080936F00A09184
|
||||
:1018D0006001B0916101CD91CDBFDD91DEBFFF917F
|
||||
:1018E000EF91DF91CF91BF91AF919F918F917F91B8
|
||||
:1018F0006F915F914F913F912F911F910F91FF90A9
|
||||
:10190000EF90DF90CF90BF90AF909F908F907F909F
|
||||
:101910006F905F904F903F902F901F900F900FBE51
|
||||
:101920000F90089581E008950F920FB6F8940F92EA
|
||||
:101930001F9211242F923F924F925F926F927F924B
|
||||
:101940008F929F92AF92BF92CF92DF92EF92FF92CF
|
||||
:101950000F931F932F933F934F935F936F937F93B7
|
||||
:101960008F939F93AF93BF93CF93DF93EF93FF93A7
|
||||
:10197000A0916001B09161010DB60D920EB60D926D
|
||||
:10198000F9DDA0916001B0916101CD91CDBFDD91F4
|
||||
:10199000DEBFFF91EF91DF91CF91BF91AF919F910A
|
||||
:1019A0008F917F916F915F914F913F912F911F91F7
|
||||
:1019B0000F91FF90EF90DF90CF90BF90AF909F90EE
|
||||
:1019C0008F907F906F905F904F903F902F901F90DF
|
||||
:1019D0000F900FBE0F9008950F920FB6F8940F92CC
|
||||
:1019E0001F9211242F923F924F925F926F927F929B
|
||||
:1019F0008F929F92AF92BF92CF92DF92EF92FF921F
|
||||
:101A00000F931F932F933F934F935F936F937F9306
|
||||
:101A10008F939F93AF93BF93CF93DF93EF93FF93F6
|
||||
:101A2000A0916001B09161010DB60D920EB60D92BC
|
||||
:101A30003BDCA0DDA0916001B0916101CD91CDBFF3
|
||||
:101A4000DD91DEBFFF91EF91DF91CF91BF91AF911B
|
||||
:101A50009F918F917F916F915F914F913F912F91C6
|
||||
:101A60001F910F91FF90EF90DF90CF90BF90AF90BC
|
||||
:101A70009F908F907F906F905F904F903F902F90AE
|
||||
:101A80001F900F900FBE0F900895A6DF1895DC01F0
|
||||
:101A900001C06D9341505040E0F70895FB01DC0117
|
||||
:101AA0004150504048F001900D920020C9F701C00C
|
||||
:101AB0001D9241505040E0F70895CF93DF93CDB78A
|
||||
:101AC000DEB7AE01475F5F4F8D819E816F81788564
|
||||
:101AD0009DD0DF91CF9108950F931F93CF93DF9304
|
||||
:101AE000CDB7DEB70F811885AE01455F5F4FF801B6
|
||||
:101AF000838188608383C80169857A8587D0F801EE
|
||||
:101B00002381277F2383DF91CF911F910F91089528
|
||||
:101B10008F929F92AF92BF92CF92DF92EF92FF92FD
|
||||
:101B20000F931F93CF93DF934B015A017901F90172
|
||||
:101B3000238120FF1AC06C01C0E0D0E012C0C701B1
|
||||
:101B400075D2FFEF8F3F9F0791F0F60181936F01F0
|
||||
:101B50000F5F1F4F02C000E010E00815190579F76C
|
||||
:101B60002196CA15DB05B9F702C0C0E0D0E0CE016E
|
||||
:101B7000DF91CF911F910F91FF90EF90DF90CF9069
|
||||
:101B8000BF90AF909F908F9008958F929F92AF9249
|
||||
:101B9000BF92CF92DF92EF92FF920F931F93CF935A
|
||||
:101BA000DF934B015A016901F901238121FF1EC016
|
||||
:101BB000DC01C0E0D0E013C00F5F1F4FF6012085AD
|
||||
:101BC00031858C91B601F9010995009789F4089443
|
||||
:101BD000E11CF11CD801E814F90471F72196CA152B
|
||||
:101BE000DB0531F08D01EE24FF24F4CFC0E0D0E01E
|
||||
:101BF000CE01DF91CF911F910F91FF90EF90DF9079
|
||||
:101C0000CF90BF90AF909F908F9008952F923F926A
|
||||
:101C10004F925F926F927F928F929F92AF92BF92FC
|
||||
:101C2000CF92DF92EF92FF920F931F93CF93DF93A8
|
||||
:101C3000CDB7DEB72D970FB6F894DEBF0FBECDBF80
|
||||
:101C40003C017D876C875A01FC01178216828381D3
|
||||
:101C500081FFBBC12E010894411C511CF3019381EB
|
||||
:101C6000EC85FD8593FD859193FF8191FD87EC8740
|
||||
:101C7000882309F4A6C1853241F493FD859193FF31
|
||||
:101C80008191FD87EC87853221F490E0B3010ED27B
|
||||
:101C9000E5CFFF24EE2410E01032B0F48B3269F06F
|
||||
:101CA0008C3228F4803251F0833271F40BC08D32C3
|
||||
:101CB00039F0803349F411602CC01260146029C0DF
|
||||
:101CC000186027C0106125C017FD2EC0282F205393
|
||||
:101CD0002A3098F416FF08C08F2D880FF82EFF0CBD
|
||||
:101CE000FF0CF80EF20E15C08E2D880FE82EEE0CAC
|
||||
:101CF000EE0CE80EE20E10620CC08E3221F416FDDE
|
||||
:101D000060C1106406C08C3611F4106802C08836B9
|
||||
:101D100059F4EC85FD8593FD859193FF8191FD87B5
|
||||
:101D2000EC87882309F0B8CF982F9554933018F09A
|
||||
:101D30009052933038F424E030E0A20EB31E3FE31B
|
||||
:101D400039830FC0833631F0833781F0833509F052
|
||||
:101D500056C021C0F5018081898322E030E0A20EC7
|
||||
:101D6000B31E21E0C22ED12C420113C092E0292ED5
|
||||
:101D7000312C2A0C3B1CF5018080918016FF03C09A
|
||||
:101D80006F2D70E002C06FEF7FEFC40144D16C0192
|
||||
:101D900051011F7714C082E0282E312C2A0C3B1CE5
|
||||
:101DA000F5018080918016FF03C06F2D70E002C0A6
|
||||
:101DB0006FEF7FEFC40124D16C011068510113FD56
|
||||
:101DC0001AC005C080E290E0B30170D1EA948E2D74
|
||||
:101DD00090E0C816D906B0F30EC0F40117FD859146
|
||||
:101DE00017FF81914F0190E0B30160D1E110EA94B7
|
||||
:101DF0000894C108D108C114D10479F7DFC0843632
|
||||
:101E000011F0893649F5F50117FF07C080819181EE
|
||||
:101E1000A281B38124E030E008C080819181AA27AB
|
||||
:101E200097FDA095BA2F22E030E0A20EB31E012F3D
|
||||
:101E30000F76B7FF08C0B095A095909581959F4FFC
|
||||
:101E4000AF4FBF4F0068BC01CD01A2012AE030E0D6
|
||||
:101E500059D1D82ED4183EC0853721F41F7E2AE0F0
|
||||
:101E600030E020C0197F8F36A9F0803720F4883504
|
||||
:101E700009F0A7C00BC0803721F0883709F0A1C056
|
||||
:101E800001C0106114FF09C0146007C014FF08C02E
|
||||
:101E9000166006C028E030E005C020E130E002C056
|
||||
:101EA00020E132E0F50117FF07C060817181828176
|
||||
:101EB000938144E050E006C06081718180E090E051
|
||||
:101EC00042E050E0A40EB51EA2011CD1D82ED418B9
|
||||
:101ED000012F0F7706FF09C00E7FDF1430F404FFD7
|
||||
:101EE00006C002FD04C00F7E02C01D2D01C01F2DC3
|
||||
:101EF000802F90E004FF0CC0FE01ED0DF11D20814C
|
||||
:101F0000203311F4097E09C002FF06C01E5F05C020
|
||||
:101F100086789070009709F01F5F802E992403FD4A
|
||||
:101F200011C000FF0CC0FD2C1E1548F4FE0CF11A68
|
||||
:101F30001E2D05C080E290E0B301B8D01F5F1E15D2
|
||||
:101F4000C8F304C01E1510F4E11A01C0EE2484FE8B
|
||||
:101F50000EC080E390E0B301A9D082FE1DC081FED7
|
||||
:101F600003C088E590E010C088E790E00DC0C40190
|
||||
:101F700086789070009781F081FC02C080E201C0F9
|
||||
:101F80008BE207FD8DE290E0B30190D005C080E3C5
|
||||
:101F900090E0B3018BD0FA94DF14C8F3DA94F20125
|
||||
:101FA000ED0DF11D808190E0B30180D0DD20B1F70F
|
||||
:101FB00005C080E290E0B30179D0EA94EE20C9F741
|
||||
:101FC0004DCEF3018681978102C08FEF9FEF2D9652
|
||||
:101FD0000FB6F894DEBF0FBECDBFDF91CF911F913A
|
||||
:101FE0000F91FF90EF90DF90CF90BF90AF909F90B8
|
||||
:101FF0008F907F906F905F904F903F902F900895BB
|
||||
:10200000FC010590615070400110D8F780959095C3
|
||||
:102010008E0F9F1F0895FC016150704001900110C8
|
||||
:10202000D8F7809590958E0F9F1F0895CF93DF93DB
|
||||
:10203000EC012B8120FF35C026FF09C02F7B2B83AD
|
||||
:102040008E819F8101969F838E838A8128C022FF83
|
||||
:102050000FC0E881F9818081992787FD90950097CD
|
||||
:1020600019F420622B831DC03196F983E88311C0D7
|
||||
:10207000EA85FB85CE01099597FF0BC02B813FEFC9
|
||||
:102080008F3F930711F480E101C080E2822B8B83A4
|
||||
:1020900008C02E813F812F5F3F4F3F832E8390E00A
|
||||
:1020A00002C08FEF9FEFDF91CF9108950F931F93A1
|
||||
:1020B000CF93DF938C01EB018B8181FF1BC082FFEB
|
||||
:1020C0000DC02E813F818C819D812817390764F4D2
|
||||
:1020D000E881F9810193F983E88306C0E885F985F1
|
||||
:1020E000802F0995009731F48E819F8101969F83FF
|
||||
:1020F0008E8302C00FEF1FEFC801DF91CF911F91B8
|
||||
:102100000F910895FA01AA27283051F1203181F169
|
||||
:10211000E8946F936E7F6E5F7F4F8F4F9F4FAF4FEF
|
||||
:10212000B1E03ED0B4E03CD0670F781F891F9A1F02
|
||||
:10213000A11D680F791F8A1F911DA11D6A0F711DB6
|
||||
:10214000811D911DA11D20D009F468943F912AE0C2
|
||||
:10215000269F11243019305D3193DEF6CF010895AA
|
||||
:10216000462F4770405D4193B3E00FD0C9F7F6CFDB
|
||||
:10217000462F4F70405D4A3318F0495D31FD4052A3
|
||||
:10218000419302D0A9F7EACFB4E0A6959795879539
|
||||
:1021900077956795BA95C9F7009761057105089518
|
||||
:1021A0009B01AC010A2E06945795479537952795C4
|
||||
:1021B000BA95C9F7620F731F841F951FA01D08955C
|
||||
:0421C000F894FFCFC1
|
||||
:1021C4004D61696E5461736B005669536554617354
|
||||
:1021D4006B00504F525444203D202533780D0A00A3
|
||||
:1021E40000831000000104100000018208000001B7
|
||||
:1021F4000000000000000000000000A1200000001A
|
||||
:10220400000200A10100000000000049444C450008
|
||||
:02221400FFFFCA
|
||||
:00000001FF
|
||||
@@ -5,10 +5,10 @@
|
||||
<generator value="as5_8"/>
|
||||
|
||||
<device-support value="at90usb1287"/>
|
||||
<config name="lufa.drivers.board.name" value="usbkey"/>
|
||||
<config name="lufa.drivers.board.name" value="micropendous"/>
|
||||
|
||||
<build type="define" name="F_CPU" value="8000000UL"/>
|
||||
<build type="define" name="F_USB" value="8000000UL"/>
|
||||
<build type="define" name="F_CPU" value="16000000UL"/>
|
||||
<build type="define" name="F_USB" value="16000000UL"/>
|
||||
</project>
|
||||
|
||||
<module type="application" id="lufa.demos.device.class.cdc" caption="Virtual Serial CDC Device Demo (Class Driver APIs)">
|
||||
@@ -26,12 +26,12 @@
|
||||
<device-support-alias value="lufa_xmega"/>
|
||||
<device-support-alias value="lufa_uc3"/>
|
||||
|
||||
<build type="distribute" subtype="user-file" value="VirtualSerial.txt"/>
|
||||
<build type="distribute" subtype="user-file" value="LUFA VirtualSerial.inf"/>
|
||||
<build type="distribute" subtype="user-file" value="VirtualSerial_FreeRTOS.txt"/>
|
||||
<build type="distribute" subtype="user-file" value="LUFA_VirtualSerial_FreeRTOS.inf"/>
|
||||
|
||||
<build type="c-source" value="VirtualSerial.c"/>
|
||||
<build type="c-source" value="VirtualSerial_FreeRTOS.c"/>
|
||||
<build type="c-source" value="Descriptors.c"/>
|
||||
<build type="header-file" value="VirtualSerial.h"/>
|
||||
<build type="header-file" value="VirtualSerial_FreeRTOS.h"/>
|
||||
<build type="header-file" value="Descriptors.h"/>
|
||||
|
||||
<build type="module-config" subtype="path" value="Config"/>
|
||||
|
||||
@@ -13,15 +13,26 @@
|
||||
|
||||
MCU = at90usb1287
|
||||
ARCH = AVR8
|
||||
BOARD = USBKEY
|
||||
F_CPU = 8000000
|
||||
BOARD = MICROPENDOUS_REV2
|
||||
F_CPU = 16000000
|
||||
F_USB = $(F_CPU)
|
||||
OPTIMIZATION = s
|
||||
TARGET = VirtualSerial
|
||||
SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
|
||||
LUFA_PATH = ../../../../LUFA
|
||||
CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/
|
||||
LUFA_PATH = ../../libs/LUFA/LUFA
|
||||
FREERTOS_PATH = ../../libs/FreeRTOS
|
||||
FREERTOS_DEMO_DIR = $(FREERTOS_PATH)/Demo/Common/Minimal
|
||||
FREERTOS_SOURCE_DIR = $(FREERTOS_PATH)/Source
|
||||
FREERTOS_PORT_DIR = $(FREERTOS_PATH)/Source/portable/GCC/AT90USB_ATmegaXXUY
|
||||
FREERTOS_SOURCE = $(FREERTOS_SOURCE_DIR)/tasks.c \
|
||||
$(FREERTOS_SOURCE_DIR)/queue.c \
|
||||
$(FREERTOS_SOURCE_DIR)/list.c \
|
||||
$(FREERTOS_SOURCE_DIR)/portable/MemMang/heap_1.c \
|
||||
$(FREERTOS_PORT_DIR)/port.c
|
||||
SRC = $(TARGET).c Descriptors.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) $(FREERTOS_SOURCE)
|
||||
CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -I$(FREERTOS_SOURCE_DIR)/include -I$(FREERTOS_SOURCE_DIR) -I$(FREERTOS_PORT_DIR) -I$(FREERTOS_DEMO_DIR)
|
||||
LD_FLAGS =
|
||||
CDC_BOOTLOADER_PORT = /dev/ttyACM0
|
||||
#CDC_BOOTLOADER_PORT = COM5
|
||||
|
||||
# Default target
|
||||
all:
|
||||
|
||||
43
Micropendous/Firmware/VirtualSerial_FreeRTOS/serialpy.py
Normal file
43
Micropendous/Firmware/VirtualSerial_FreeRTOS/serialpy.py
Normal file
@@ -0,0 +1,43 @@
|
||||
# Purpose: Write then read characters from a serial port loopback device
|
||||
# Visit www.Micropendous.org/Serial for more info.
|
||||
# Created: 2009-09-31 by Opendous Inc.
|
||||
# Last Edit: 2009-10-02 by Opendous Inc.
|
||||
# Released to the Public Domain
|
||||
import serial # PySerial for accessing the serial port on multiple platforms
|
||||
import sys # command-line argument handling
|
||||
|
||||
# function which sends then reads data from the given serial port
|
||||
# comport should be a string
|
||||
def SerialSendReceive(comport):
|
||||
# open the given serial port for communication
|
||||
ser = serial.Serial(comport)
|
||||
ser.setTimeout(1000)
|
||||
ser.setWriteTimeout(1000)
|
||||
|
||||
print ser # dump all info regarding serial port being used
|
||||
|
||||
ser.write('www.Micropendous.org') # send these characters to the serial port
|
||||
print ser.read(20) # read the above characters back, assuming loopback
|
||||
|
||||
ser.write('www.Micropendous.org\n') # send this line to the serial port
|
||||
print ser.readline() # read the returned line
|
||||
|
||||
# be careful using readline() as it will block until a newline character is received
|
||||
|
||||
ser.close() # release/close the serial port
|
||||
|
||||
|
||||
# if this file is the program actually being run, print usage info or run SerialSendReceive
|
||||
if __name__ == '__main__':
|
||||
if (len(sys.argv) != 2):
|
||||
print "Serial Communication Example"
|
||||
print " Usage:"
|
||||
print " python", sys.argv[0], "<port>"
|
||||
print " Where <port> = serial port; COM? on Windows, '/dev/ttyACM0 on Linux'"
|
||||
print " Enumerated serial port can be found on Linux using dmesg"
|
||||
print " look for something like cdc_acm 2-1:1.0: ttyACM0: USB ACM device"
|
||||
print " python", sys.argv[0], "COM5"
|
||||
exit()
|
||||
SerialSendReceive(sys.argv[1])
|
||||
|
||||
|
||||
2
Micropendous/libs/FreeRTOS/FreeRTOSV7.4.0.txt
Normal file
2
Micropendous/libs/FreeRTOS/FreeRTOSV7.4.0.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
This directory contains a copy of FreeRTOS v7.4.0
|
||||
stripped of all files not related to the USB AVRs.
|
||||
@@ -79,6 +79,11 @@ Changes from V2.6.0
|
||||
+ AVR port - Replaced the inb() and outb() functions with direct memory
|
||||
access. This allows the port to be built with the 20050414 build of
|
||||
WinAVR.
|
||||
|
||||
Changes from FreeRTOS V7.4.0
|
||||
|
||||
+ AVR port - Adapted ATmega323 port to the AT90USB USB AVRs
|
||||
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
@@ -95,10 +100,11 @@ Changes from V2.6.0
|
||||
#define portFLAGS_INT_ENABLED ( ( portSTACK_TYPE ) 0x80 )
|
||||
|
||||
/* Hardware constants for timer 1. */
|
||||
#define portCLEAR_COUNTER_ON_MATCH ( ( unsigned char ) 0x08 )
|
||||
#define portPRESCALE_64 ( ( unsigned char ) 0x03 )
|
||||
#define portCLOCK_PRESCALER ( ( unsigned long ) 64 )
|
||||
#define portCOMPARE_MATCH_A_INTERRUPT_ENABLE ( ( unsigned char ) 0x10 )
|
||||
#define portCLEAR_COUNTER_ON_MATCH ( (unsigned portCHAR)(1 << WGM12) )
|
||||
// CS10 and CS11 will set a prescale value of 64
|
||||
#define portPRESCALE_64 ( (unsigned portCHAR)((1 << CS10) | (1 << CS11)) )
|
||||
#define portCLOCK_PRESCALER ( (unsigned portLONG) 64 )
|
||||
#define portCOMPARE_MATCH_A_INTERRUPT_ENABLE ( (unsigned portCHAR)(1 << OCIE1A) )
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
@@ -407,7 +413,6 @@ void vPortYieldFromTick( void )
|
||||
static void prvSetupTimerInterrupt( void )
|
||||
{
|
||||
unsigned long ulCompareMatch;
|
||||
unsigned char ucHighByte, ucLowByte;
|
||||
|
||||
/* Using 16bit timer 1 to generate the tick. Correct fuses must be
|
||||
selected for the configCPU_CLOCK_HZ clock. */
|
||||
@@ -422,21 +427,16 @@ unsigned char ucHighByte, ucLowByte;
|
||||
|
||||
/* Setup compare match value for compare match A. Interrupts are disabled
|
||||
before this is called so we need not worry here. */
|
||||
ucLowByte = ( unsigned char ) ( ulCompareMatch & ( unsigned long ) 0xff );
|
||||
ulCompareMatch >>= 8;
|
||||
ucHighByte = ( unsigned char ) ( ulCompareMatch & ( unsigned long ) 0xff );
|
||||
OCR1AH = ucHighByte;
|
||||
OCR1AL = ucLowByte;
|
||||
OCR1A = ulCompareMatch;
|
||||
|
||||
/* Start Timer1 */
|
||||
TCCR1A = 0;
|
||||
|
||||
/* Setup clock source and compare match behaviour. */
|
||||
ucLowByte = portCLEAR_COUNTER_ON_MATCH | portPRESCALE_64;
|
||||
TCCR1B = ucLowByte;
|
||||
TCCR1B = portCLEAR_COUNTER_ON_MATCH | portPRESCALE_64;
|
||||
|
||||
/* Enable the interrupt - this is okay as interrupt are currently globally
|
||||
disabled. */
|
||||
ucLowByte = TIMSK;
|
||||
ucLowByte |= portCOMPARE_MATCH_A_INTERRUPT_ENABLE;
|
||||
TIMSK = ucLowByte;
|
||||
/* Enable the interrupt - interrupt are currently globally disabled so it will work */
|
||||
TIMSK1 = portCOMPARE_MATCH_A_INTERRUPT_ENABLE;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
@@ -447,8 +447,8 @@ unsigned char ucHighByte, ucLowByte;
|
||||
* the context is saved at the start of vPortYieldFromTick(). The tick
|
||||
* count is incremented after the context is saved.
|
||||
*/
|
||||
void SIG_OUTPUT_COMPARE1A( void ) __attribute__ ( ( signal, naked ) );
|
||||
void SIG_OUTPUT_COMPARE1A( void )
|
||||
void TIMER1_COMPA_vect( void ) __attribute__ ( ( signal, naked ) );
|
||||
void TIMER1_COMPA_vect( void )
|
||||
{
|
||||
vPortYieldFromTick();
|
||||
asm volatile ( "reti" );
|
||||
@@ -460,12 +460,10 @@ unsigned char ucHighByte, ucLowByte;
|
||||
* tick count. We don't need to switch context, this can only be done by
|
||||
* manual calls to taskYIELD();
|
||||
*/
|
||||
void SIG_OUTPUT_COMPARE1A( void ) __attribute__ ( ( signal ) );
|
||||
void SIG_OUTPUT_COMPARE1A( void )
|
||||
void TIMER1_COMPA_vect( void ) __attribute__ ( ( signal ) );
|
||||
void TIMER1_COMPA_vect( void )
|
||||
{
|
||||
vTaskIncrementTick();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
22
Micropendous/libs/LUFA/LUFA-SVN-r2637.txt
Normal file
22
Micropendous/libs/LUFA/LUFA-SVN-r2637.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
svn checkout http://lufa-lib.googlecode.com/svn/trunk/ lufa-lib-read-only
|
||||
|
||||
This directory contains LUFA SVN Revision 2637 with the following modifications:
|
||||
|
||||
Files Added:
|
||||
|
||||
LUFA/Common/MicropendousDefines.h
|
||||
LUFA/Common/MissingDefines.h
|
||||
|
||||
|
||||
Files Modified:
|
||||
|
||||
* to include MicropendousDefines.h and MissingDefines.h:
|
||||
LUFA/Common/Common.h
|
||||
|
||||
* to ease development with Micropendous boards:
|
||||
LUFA/Common/BoardTypes.h
|
||||
LUFA/Drivers/Board/Buttons.h
|
||||
LUFA/Drivers/Board/LEDs.h
|
||||
LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h
|
||||
LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h
|
||||
|
||||
@@ -26,6 +26,10 @@ LUFA_BUILD_PROVIDED_MACROS +=
|
||||
# avrdude
|
||||
# avrdude-ee - Program target EEPROM with application data
|
||||
# using avrdude
|
||||
# cdc - Program target (with CDC Bootloader) FLASH
|
||||
# with application using avrdude
|
||||
# cdc-ee - Program target (with CDC Bootloader) EEPROM
|
||||
# with application using avrdude
|
||||
#
|
||||
# MANDATORY PARAMETERS:
|
||||
#
|
||||
@@ -82,5 +86,11 @@ avrdude-ee: $(TARGET).eep $(MAKEFILE_LIST)
|
||||
@echo $(MSG_AVRDUDE_CMD) Programming device \"$(MCU)\" EEPROM using \"$(AVRDUDE_PROGRAMMER)\" on port \"$(AVRDUDE_PORT)\"
|
||||
avrdude $(BASE_AVRDUDE_FLAGS) -U eeprom:w:$< $(AVRDUDE_FLAGS)
|
||||
|
||||
cdc: $(TARGET).hex
|
||||
avrdude -v -v -c avr109 -P $(CDC_BOOTLOADER_PORT) -p $(MCU) -U flash:w:$(TARGET).hex
|
||||
|
||||
cdc-ee: $(TARGET).hex
|
||||
avrdude -v -v -c avr109 -P $(CDC_BOOTLOADER_PORT) -p $(MCU) -U eeprom:w:$(TARGET).eep
|
||||
|
||||
# Phony build targets for this module
|
||||
.PHONY: avrdude avrdude-ee
|
||||
.PHONY: avrdude avrdude-ee cdc cdc-ee
|
||||
|
||||
@@ -74,6 +74,10 @@
|
||||
#include "CompilerSpecific.h"
|
||||
#include "Attributes.h"
|
||||
|
||||
/* MicropendousDefines must be included after BoardTypes.h */
|
||||
#include "MissingDefines.h"
|
||||
#include "MicropendousDefines.h"
|
||||
|
||||
#if defined(USE_LUFA_CONFIG_HEADER)
|
||||
#include "LUFAConfig.h"
|
||||
#endif
|
||||
|
||||
140
Micropendous/libs/LUFA/LUFA/Common/MicropendousDefines.h
Normal file
140
Micropendous/libs/LUFA/LUFA/Common/MicropendousDefines.h
Normal file
@@ -0,0 +1,140 @@
|
||||
/*
|
||||
Written 2012-07-21 By Opendous Inc.
|
||||
For use with Micropendous USB AVR boards http://www.Micropendous.org
|
||||
|
||||
This source file is hereby deeded by Opendous Inc. under the
|
||||
Creative Commons CC0 Dedication into the Public Domain.
|
||||
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
|
||||
You can copy, modify, distribute and utilize the work, even for commercial
|
||||
purposes, all without asking permission, persuent to the following:
|
||||
- In no way are the patent or trademark rights of any person affected by
|
||||
CC0, nor are the rights that other persons may have in the work or in how
|
||||
the work is used, such as publicity or privacy rights.
|
||||
- Unless expressly stated otherwise, the person who associated a work with
|
||||
this deed makes no warranties about the work, and disclaims liability for
|
||||
all uses of the work, to the fullest extent permitted by applicable law.
|
||||
- When using or citing the work, you should not imply endorsement by the
|
||||
author or the affirmer.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __MICROPENDOUS_DEFINES_H__
|
||||
#define __MICROPENDOUS_DEFINES_H__
|
||||
|
||||
/* Includes: */
|
||||
|
||||
/* Enable C linkage for C++ Compilers: */
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// Defines related to the TXB0108 8-bit Bidirectional Voltage Translator connected to PortB
|
||||
#if ((BOARD == BOARD_MICROPENDOUS_REV2))
|
||||
|
||||
// On Micropendous Rev2 boards, the translator is on PE3 and is Active-Low enabled
|
||||
#define DISABLE_VOLTAGE_TXRX() PORTE &= ~(1 << PE3); DDRE |= (1 << PE3);
|
||||
#define ENABLE_VOLTAGE_TXRX() PORTE |= (1 << PE3); DDRE |= (1 << PE3);
|
||||
|
||||
#elif ((BOARD == BOARD_MICROPENDOUS_REV1) || (BOARD == BOARD_MICROPENDOUS_DIP))
|
||||
|
||||
// On Micropendous Rev1 boards, the translator is on PE6 and is Active-Low enabled
|
||||
#define DISABLE_VOLTAGE_TXRX() PORTE &= ~(1 << PE6); DDRE |= (1 << PE6);
|
||||
#define ENABLE_VOLTAGE_TXRX() PORTE |= (1 << PE6); DDRE |= (1 << PE6);
|
||||
|
||||
#else
|
||||
// other Micropendous boards do not have a voltage translator but NOPs maintain code operation count
|
||||
#define ENABLE_VOLTAGE_TXRX() __asm__ volatile ("NOP" ::)
|
||||
#define DISABLE_VOLTAGE_TXRX() __asm__ volatile ("NOP" ::)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// Defines related to the USB Selector
|
||||
#if ((BOARD == BOARD_MICROPENDOUS_REV2))
|
||||
|
||||
// On Micropendous Rev2 boards, USB-A port selection is Active-High with overcurrent flag on PE6
|
||||
#define SELECT_USB_A() PORTE |= (1 << PE7); DDRE |= (1 << PE7);
|
||||
#define SELECT_USB_B() PORTE &= ~(1 << PE7); DDRE |= (1 << PE7);
|
||||
#define USB_A_OVERCURRENT_FLAG_ENABLE() PORTE &= ~(1 << PE6); DDRE &= ~(1 << PE6);
|
||||
#define USB_A_OVERCURRENT_FLAG() ((PINE >> 6) & (0x01))
|
||||
|
||||
#elif ((BOARD == BOARD_MICROPENDOUS_REV1) || (BOARD == BOARD_MICROPENDOUS_DIP))
|
||||
|
||||
// On Micropendous Rev1 and DIP boards, USB-A port selection is Active-Low with overcurrent flag on a test-point
|
||||
#define SELECT_USB_A() PORTE &= ~(1 << PE7); DDRE |= (1 << PE7);
|
||||
#define SELECT_USB_B() PORTE |= (1 << PE7); DDRE |= (1 << PE7);
|
||||
#define USB_A_OVERCURRENT_FLAG_ENABLE() __asm__ volatile ("NOP" ::)
|
||||
#define USB_A_OVERCURRENT_FLAG() __asm__ volatile ("NOP" ::)
|
||||
#warning Remember to uncomment NO_AUTO_VBUS_MANAGEMENT and INVERTED_VBUS_ENABLE_LINE in Config/LUFAConfig.h
|
||||
|
||||
#else
|
||||
|
||||
// other Micropendous boards do not have an USB selector but NOPs maintain code operation count
|
||||
#define SELECT_USB_A() __asm__ volatile ("NOP" ::)
|
||||
#define SELECT_USB_B() __asm__ volatile ("NOP" ::)
|
||||
#define USB_A_OVERCURRENT_FLAG_ENABLE() __asm__ volatile ("NOP" ::)
|
||||
#define USB_A_OVERCURRENT_FLAG() __asm__ volatile ("NOP" ::)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// Defines related to external SRAM
|
||||
#if (defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB1286__))
|
||||
#define EXT_SRAM_START 0x2100
|
||||
#elif (defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB646__))
|
||||
#define EXT_SRAM_START 0x1100
|
||||
#endif
|
||||
|
||||
#ifndef EXT_SRAM_END
|
||||
#define EXT_SRAM_END 0xFFFF
|
||||
#endif
|
||||
#ifndef EXT_SRAM_SIZE
|
||||
#define EXT_SRAM_SIZE (EXT_SRAM_END - EXT_SRAM_START)
|
||||
#endif
|
||||
|
||||
#if ((BOARD == BOARD_MICROPENDOUS_REV2) || (BOARD == BOARD_MICROPENDOUS_REV1))
|
||||
|
||||
// On Micropendous boards nCE is PE4 and Address Bit 17 is PE5. PE0,1,2 are also control signals.
|
||||
#define PORTE_EXT_SRAM_SETUP() DDRE = ((1 << PE0) | (1 << PE1) | (1 << PE2) | (1 << PE4) | (1 << PE5)); PORTE = ((1 << PE0) | (1 << PE1) | (1 << PE2) | (1 << PE4));
|
||||
#define ENABLE_EXT_SRAM() DDRE |= (1 << PE4); PORTE &= ~(1 << PE4);
|
||||
#define DISABLE_EXT_SRAM() DDRE |= (1 << PE4); PORTE |= (1 << PE4);
|
||||
#define SELECT_EXT_SRAM_BANK0() DDRE |= (1 << PE5); PORTE &= ~(1 << PE5);
|
||||
#define SELECT_EXT_SRAM_BANK1() DDRE |= (1 << PE5); PORTE |= (1 << PE5);
|
||||
#define CURRENT_SRAM_BANK() ((PINE >> 5) & (0x01))
|
||||
|
||||
#elif ((BOARD == BOARD_MICROPENDOUS_A) || (BOARD == BOARD_MICROPENDOUS_3) || (BOARD == BOARD_MICROPENDOUS_4))
|
||||
|
||||
// On Micropendous3/4/A boards nCE is PE6 and Address Bit 17 is PE7. PE0,1,2 are also control signals.
|
||||
#define PORTE_EXT_SRAM_SETUP() DDRE = ((1 << PE0) | (1 << PE1) | (1 << PE2) | (1 << PE6) | (1 << PE7)); PORTE = ((1 << PE0) | (1 << PE1) | (1 << PE2) | (1 << PE6));
|
||||
#define ENABLE_EXT_SRAM() DDRE |= (1 << PE6); PORTE &= ~(1 << PE6);
|
||||
#define DISABLE_EXT_SRAM() DDRE |= (1 << PE6); PORTE |= (1 << PE6);
|
||||
#define SELECT_EXT_SRAM_BANK0() DDRE |= (1 << PE7); PORTE &= ~(1 << PE7);
|
||||
#define SELECT_EXT_SRAM_BANK1() DDRE |= (1 << PE7); PORTE |= (1 << PE7);
|
||||
#define CURRENT_SRAM_BANK() ((PINE >> 7) & (0x01))
|
||||
|
||||
#else
|
||||
// other Micropendous boards do not have external SRAM but NOPs maintain code operation count
|
||||
#define PORTE_EXT_SRAM_SETUP() __asm__ volatile ("NOP" ::)
|
||||
#define ENABLE_EXT_SRAM() __asm__ volatile ("NOP" ::)
|
||||
#define DISABLE_EXT_SRAM() __asm__ volatile ("NOP" ::)
|
||||
#define SELECT_EXT_SRAM_BANK0() __asm__ volatile ("NOP" ::)
|
||||
#define SELECT_EXT_SRAM_BANK1() __asm__ volatile ("NOP" ::)
|
||||
#define CURRENT_SRAM_BANK() __asm__ volatile ("NOP" ::)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Disable C linkage for C++ Compilers: */
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __MICROPENDOUS_DEFINES_H__
|
||||
|
||||
182
Micropendous/libs/LUFA/LUFA/Common/MissingDefines.h
Normal file
182
Micropendous/libs/LUFA/LUFA/Common/MissingDefines.h
Normal file
@@ -0,0 +1,182 @@
|
||||
/* Copyright (c) 2009 By Eric B. Weddington
|
||||
All rights reserved.
|
||||
|
||||
Defines missing from currently used versions of avr-libc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of the copyright holders nor the names of
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef __MISSING_DEFINES__
|
||||
#define __MISSING_DEFINES__
|
||||
|
||||
#include <avr/version.h>
|
||||
|
||||
|
||||
#ifndef PINHIGH
|
||||
#define PINHIGH(PORT, PIN) PORT |= (1 << PIN);
|
||||
#endif
|
||||
|
||||
#ifndef PINLOW
|
||||
#define PINLOW(PORT, PIN) PORT &= ~(1 << PIN);
|
||||
#endif
|
||||
|
||||
|
||||
/* Missing WinAVR include defines */
|
||||
/* WinAVR does not define these for the ATmega??u4*/
|
||||
#if (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__))
|
||||
#ifndef PB7
|
||||
#define PB7 7
|
||||
#endif
|
||||
#ifndef PB6
|
||||
#define PB6 6
|
||||
#endif
|
||||
#ifndef PB5
|
||||
#define PB5 5
|
||||
#endif
|
||||
#ifndef PB4
|
||||
#define PB4 4
|
||||
#endif
|
||||
#ifndef PB3
|
||||
#define PB3 3
|
||||
#endif
|
||||
#ifndef PB2
|
||||
#define PB2 2
|
||||
#endif
|
||||
#ifndef PB1
|
||||
#define PB1 1
|
||||
#endif
|
||||
#ifndef PB0
|
||||
#define PB0 0
|
||||
#endif
|
||||
#ifndef PC7
|
||||
#define PC7 7
|
||||
#endif
|
||||
#ifndef PC6
|
||||
#define PC6 6
|
||||
#endif
|
||||
#ifndef PD7
|
||||
#define PD7 7
|
||||
#endif
|
||||
#ifndef PD6
|
||||
#define PD6 6
|
||||
#endif
|
||||
#ifndef PD5
|
||||
#define PD5 5
|
||||
#endif
|
||||
#ifndef PD4
|
||||
#define PD4 4
|
||||
#endif
|
||||
#ifndef PD3
|
||||
#define PD3 3
|
||||
#endif
|
||||
#ifndef PD2
|
||||
#define PD2 2
|
||||
#endif
|
||||
#ifndef PD1
|
||||
#define PD1 1
|
||||
#endif
|
||||
#ifndef PD0
|
||||
#define PD0 0
|
||||
#endif
|
||||
#ifndef PE2
|
||||
#define PE2 2
|
||||
#endif
|
||||
#ifndef PE6
|
||||
#define PE6 6
|
||||
#endif
|
||||
#ifndef PF7
|
||||
#define PF7 7
|
||||
#endif
|
||||
#ifndef PF6
|
||||
#define PF6 6
|
||||
#endif
|
||||
#ifndef PF5
|
||||
#define PF5 5
|
||||
#endif
|
||||
#ifndef PF4
|
||||
#define PF4 4
|
||||
#endif
|
||||
#ifndef PF1
|
||||
#define PF1 1
|
||||
#endif
|
||||
#ifndef PF0
|
||||
#define PF0 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// missing avr-libc Linux defines
|
||||
//#ifndef clock_prescale_set
|
||||
//#if (__AVR_LIBC_VERSION__ < 10606UL)
|
||||
|
||||
#ifndef clock_div_1
|
||||
#define clock_div_1 0
|
||||
#endif
|
||||
#ifndef clock_div_2
|
||||
#define clock_div_2 1
|
||||
#endif
|
||||
#ifndef clock_div_4
|
||||
#define clock_div_4 2
|
||||
#endif
|
||||
#ifndef clock_div_8
|
||||
#define clock_div_8 3
|
||||
#endif
|
||||
#ifndef clock_div_16
|
||||
#define clock_div_16 4
|
||||
#endif
|
||||
#ifndef clock_div_32
|
||||
#define clock_div_32 5
|
||||
#endif
|
||||
#ifndef clock_div_64
|
||||
#define clock_div_64 6
|
||||
#endif
|
||||
#ifndef clock_div_128
|
||||
#define clock_div_128 7
|
||||
#endif
|
||||
#ifndef clock_div_256
|
||||
#define clock_div_256 8
|
||||
#endif
|
||||
|
||||
#ifndef clock_prescale_set
|
||||
#define clock_prescale_set(x) \
|
||||
{ \
|
||||
uint8_t tmp = _BV(CLKPCE); \
|
||||
__asm__ __volatile__ ( \
|
||||
"in __tmp_reg__,__SREG__" "\n\t" \
|
||||
"cli" "\n\t" \
|
||||
"sts %1, %0" "\n\t" \
|
||||
"sts %1, %2" "\n\t" \
|
||||
"out __SREG__, __tmp_reg__" \
|
||||
: /* no outputs */ \
|
||||
: "d" (tmp), \
|
||||
"M" (_SFR_MEM_ADDR(CLKPR)), \
|
||||
"d" (x) \
|
||||
: "r0"); \
|
||||
}
|
||||
#endif
|
||||
|
||||
//#endif // (__AVR_LIBC_VERSION__ < 10606UL)
|
||||
|
||||
#endif // MissingDefines.h
|
||||
@@ -134,7 +134,7 @@
|
||||
(BOARD == BOARD_MICROPENDOUS_32U2) || defined(__DOXYGEN__))
|
||||
#include "../../LEDs.h"
|
||||
|
||||
/** Indicates the board has a hardware LEDs mounted. */
|
||||
/** Indicates the board has hardware LEDs mounted. */
|
||||
#define BOARD_HAS_LEDS
|
||||
#endif
|
||||
|
||||
|
||||
@@ -92,12 +92,20 @@
|
||||
#if (BOARD == BOARD_MICROPENDOUS_32U2)
|
||||
#define _BOARD_LED1_MASK (1 << 6)
|
||||
#define _BOARD_LED_PORTLETTER D
|
||||
#elif (BOARD == BOARD_MICROPENDOUS_32U4)
|
||||
#define _BOARD_LED1_MASK (1 << 6)
|
||||
#define _BOARD_LED_PORTLETTER D
|
||||
#elif (BOARD == BOARD_MICROPENDOUS_REV1)
|
||||
#define _BOARD_LED1_MASK (1 << 1)
|
||||
#define _BOARD_LED_PORTLETTER B
|
||||
#elif (BOARD == BOARD_MICROPENDOUS_REV2)
|
||||
#define _BOARD_LED1_MASK (1 << 1)
|
||||
#define _BOARD_LED_PORTLETTER B
|
||||
#else
|
||||
#define _BOARD_LED1_MASK (1 << 1)
|
||||
#define _BOARD_LED_PORTLETTER B
|
||||
#warning The currently selected Micropendous board does not have an LED.
|
||||
#warning Use PB1, cathode to GND with resistor: PB1---/\R/\---|LED>---GND
|
||||
#endif
|
||||
|
||||
#define _BOARD_LED_CONCAT2(Reg, Letter) Reg ## Letter
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
(BOARD == BOARD_MICROPENDOUS_1) || (BOARD == BOARD_MICROPENDOUS_2) || \
|
||||
(BOARD == BOARD_MICROPENDOUS_3) || (BOARD == BOARD_MICROPENDOUS_4) || \
|
||||
(BOARD == BOARD_MICROPENDOUS_REV1) || (BOARD == BOARD_MICROPENDOUS_REV2) || \
|
||||
(BOARD == BOARD_MICROPENDOUS_DIP))
|
||||
(BOARD == BOARD_MICROPENDOUS_DIP) || (BOARD == BOARD_MICROPENDOUS_32U4) )
|
||||
#include "AVR8/MICROPENDOUS/Buttons.h"
|
||||
#elif (BOARD == BOARD_B1_XPLAINED)
|
||||
#include "XMEGA/B1_XPLAINED/Buttons.h"
|
||||
|
||||
@@ -176,8 +176,11 @@
|
||||
#include "XMEGA/A3BU_XPLAINED/LEDs.h"
|
||||
#elif ((BOARD == BOARD_USB2AX) || (BOARD == BOARD_USB2AX_V3) || (BOARD == BOARD_USB2AX_V31))
|
||||
#include "AVR8/USB2AX/LEDs.h"
|
||||
#elif ((BOARD == BOARD_MICROPENDOUS_REV1) || (BOARD == BOARD_MICROPENDOUS_REV2) || \
|
||||
(BOARD == BOARD_MICROPENDOUS_32U2))
|
||||
#elif ( (BOARD == BOARD_MICROPENDOUS_32U2) || (BOARD == BOARD_MICROPENDOUS_A) || \
|
||||
(BOARD == BOARD_MICROPENDOUS_1) || (BOARD == BOARD_MICROPENDOUS_2) || \
|
||||
(BOARD == BOARD_MICROPENDOUS_3) || (BOARD == BOARD_MICROPENDOUS_4) || \
|
||||
(BOARD == BOARD_MICROPENDOUS_REV1) || (BOARD == BOARD_MICROPENDOUS_REV2) || \
|
||||
(BOARD == BOARD_MICROPENDOUS_DIP) || (BOARD == BOARD_MICROPENDOUS_32U4) )
|
||||
#include "AVR8/MICROPENDOUS/LEDs.h"
|
||||
#elif (BOARD == BOARD_B1_XPLAINED)
|
||||
#include "XMEGA/B1_XPLAINED/LEDs.h"
|
||||
|
||||
Reference in New Issue
Block a user