projects
/
pub
/
USBasp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update UC3 platform driver support to use the bitmasks defined in the header files...
[pub/USBasp.git]
/
Bootloaders
/
DFU
/
BootloaderDFU.c
diff --git
a/Bootloaders/DFU/BootloaderDFU.c
b/Bootloaders/DFU/BootloaderDFU.c
index
717c934
..
1dae162
100644
(file)
--- a/
Bootloaders/DFU/BootloaderDFU.c
+++ b/
Bootloaders/DFU/BootloaderDFU.c
@@
-87,7
+87,7
@@
static uint8_t Flash64KBPage = 0;
*/
static uint16_t StartAddr = 0x0000;
*/
static uint16_t StartAddr = 0x0000;
-/** Memory end address, indicating the end address to read
to/write from
in the memory being addressed (either FLASH
+/** Memory end address, indicating the end address to read
from/write to
in the memory being addressed (either FLASH
* of EEPROM depending on the issued command from the host).
*/
static uint16_t EndAddr = 0x0000;
* of EEPROM depending on the issued command from the host).
*/
static uint16_t EndAddr = 0x0000;
@@
-109,7
+109,7
@@
int main(void)
/* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */
PORTF |= (1 << 4);
/* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */
PORTF |= (1 << 4);
-
_delay_ms
(10);
+
Delay_MS
(10);
/* If the TCK pin is not jumpered to ground, start the user application instead */
RunBootloader = (!(PINF & (1 << 4)));
/* If the TCK pin is not jumpered to ground, start the user application instead */
RunBootloader = (!(PINF & (1 << 4)));
@@
-119,6
+119,9
@@
int main(void)
MCUCR &= ~(1 << JTD);
#endif
MCUCR &= ~(1 << JTD);
#endif
+ /* Turn on first LED on the board to indicate that the bootloader has started */
+ LEDs_SetAllLEDs(LEDS_LED1);
+
/* Enable global interrupts so that the USB stack can function */
sei();
/* Enable global interrupts so that the USB stack can function */
sei();
@@
-149,6
+152,11
@@
void SetupHardware(void)
/* Initialize the USB subsystem */
USB_Init();
/* Initialize the USB subsystem */
USB_Init();
+ LEDs_Init();
+
+ /* Bootloader active LED toggle timer initialization */
+ TIMSK1 = (1 << TOIE1);
+ TCCR1B = ((1 << CS11) | (1 << CS10));
}
/** Resets all configured hardware required for the bootloader back to their original states. */
}
/** Resets all configured hardware required for the bootloader back to their original states. */
@@
-162,15
+170,18
@@
void ResetHardware(void)
MCUCR = 0;
}
MCUCR = 0;
}
+/** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */
+ISR(TIMER1_OVF_vect, ISR_BLOCK)
+{
+ LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
+}
+
/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to
* the device from the USB host before passing along unhandled control requests to the library for processing
* internally.
*/
void EVENT_USB_Device_ControlRequest(void)
/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to
* the device from the USB host before passing along unhandled control requests to the library for processing
* internally.
*/
void EVENT_USB_Device_ControlRequest(void)
-{
- /* Get the size of the command and data from the wLength value */
- SentCommand.DataSize = USB_ControlRequest.wLength;
-
+{
/* Ignore any requests that aren't directed to the DFU interface */
if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) !=
(REQTYPE_CLASS | REQREC_INTERFACE))
/* Ignore any requests that aren't directed to the DFU interface */
if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) !=
(REQTYPE_CLASS | REQREC_INTERFACE))
@@
-178,6
+189,12
@@
void EVENT_USB_Device_ControlRequest(void)
return;
}
return;
}
+ /* Activity - toggle indicator LEDs */
+ LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
+
+ /* Get the size of the command and data from the wLength value */
+ SentCommand.DataSize = USB_ControlRequest.wLength;
+
switch (USB_ControlRequest.bRequest)
{
case DFU_REQ_DNLOAD:
switch (USB_ControlRequest.bRequest)
{
case DFU_REQ_DNLOAD:
@@
-203,7
+220,7
@@
void EVENT_USB_Device_ControlRequest(void)
}
/* First byte of the data stage is the DNLOAD request's command */
}
/* First byte of the data stage is the DNLOAD request's command */
- SentCommand.Command = Endpoint_Read_
Byte
();
+ SentCommand.Command = Endpoint_Read_
8
();
/* One byte of the data stage is the command, so subtract it from the total data bytes */
SentCommand.DataSize--;
/* One byte of the data stage is the command, so subtract it from the total data bytes */
SentCommand.DataSize--;
@@
-212,7
+229,7
@@
void EVENT_USB_Device_ControlRequest(void)
for (uint8_t DataByte = 0; (DataByte < sizeof(SentCommand.Data)) &&
Endpoint_BytesInEndpoint(); DataByte++)
{
for (uint8_t DataByte = 0; (DataByte < sizeof(SentCommand.Data)) &&
Endpoint_BytesInEndpoint(); DataByte++)
{
- SentCommand.Data[DataByte] = Endpoint_Read_
Byte
();
+ SentCommand.Data[DataByte] = Endpoint_Read_
8
();
SentCommand.DataSize--;
}
SentCommand.DataSize--;
}
@@
-267,7
+284,7
@@
void EVENT_USB_Device_ControlRequest(void)
}
/* Write the next word into the current flash page */
}
/* Write the next word into the current flash page */
- boot_page_fill(CurrFlashAddress.Long, Endpoint_Read_
Word
_LE());
+ boot_page_fill(CurrFlashAddress.Long, Endpoint_Read_
16
_LE());
/* Adjust counters */
WordsInFlashPage += 1;
/* Adjust counters */
WordsInFlashPage += 1;
@@
-316,7
+333,7
@@
void EVENT_USB_Device_ControlRequest(void)
}
/* Read the byte from the USB interface and write to to the EEPROM */
}
/* Read the byte from the USB interface and write to to the EEPROM */
- eeprom_write_byte((uint8_t*)StartAddr, Endpoint_Read_
Byte
());
+ eeprom_write_byte((uint8_t*)StartAddr, Endpoint_Read_
8
());
/* Adjust counters */
StartAddr++;
/* Adjust counters */
StartAddr++;
@@
-348,12
+365,12
@@
void EVENT_USB_Device_ControlRequest(void)
{
/* Blank checking is performed in the DFU_DNLOAD request - if we get here we've told the host
that the memory isn't blank, and the host is requesting the first non-blank address */
{
/* Blank checking is performed in the DFU_DNLOAD request - if we get here we've told the host
that the memory isn't blank, and the host is requesting the first non-blank address */
- Endpoint_Write_
Word
_LE(StartAddr);
+ Endpoint_Write_
16
_LE(StartAddr);
}
else
{
/* Idle state upload - send response to last issued command */
}
else
{
/* Idle state upload - send response to last issued command */
- Endpoint_Write_
Byte
(ResponseByte);
+ Endpoint_Write_
8
(ResponseByte);
}
}
else
}
}
else
@@
-388,9
+405,9
@@
void EVENT_USB_Device_ControlRequest(void)
/* Read the flash word and send it via USB to the host */
#if (FLASHEND > 0xFFFF)
/* Read the flash word and send it via USB to the host */
#if (FLASHEND > 0xFFFF)
- Endpoint_Write_
Word
_LE(pgm_read_word_far(CurrFlashAddress.Long));
+ Endpoint_Write_
16
_LE(pgm_read_word_far(CurrFlashAddress.Long));
#else
#else
- Endpoint_Write_
Word
_LE(pgm_read_word(CurrFlashAddress.Long));
+ Endpoint_Write_
16
_LE(pgm_read_word(CurrFlashAddress.Long));
#endif
/* Adjust counters */
#endif
/* Adjust counters */
@@
-417,7
+434,7
@@
void EVENT_USB_Device_ControlRequest(void)
}
/* Read the EEPROM byte and send it via USB to the host */
}
/* Read the EEPROM byte and send it via USB to the host */
- Endpoint_Write_
Byte
(eeprom_read_byte((uint8_t*)StartAddr));
+ Endpoint_Write_
8
(eeprom_read_byte((uint8_t*)StartAddr));
/* Adjust counters */
StartAddr++;
/* Adjust counters */
StartAddr++;
@@
-436,17
+453,17
@@
void EVENT_USB_Device_ControlRequest(void)
Endpoint_ClearSETUP();
/* Write 8-bit status value */
Endpoint_ClearSETUP();
/* Write 8-bit status value */
- Endpoint_Write_
Byte
(DFU_Status);
+ Endpoint_Write_
8
(DFU_Status);
/* Write 24-bit poll timeout value */
/* Write 24-bit poll timeout value */
- Endpoint_Write_
Byte
(0);
- Endpoint_Write_
Word
_LE(0);
+ Endpoint_Write_
8
(0);
+ Endpoint_Write_
16
_LE(0);
/* Write 8-bit state value */
/* Write 8-bit state value */
- Endpoint_Write_
Byte
(DFU_State);
+ Endpoint_Write_
8
(DFU_State);
/* Write 8-bit state string ID number */
/* Write 8-bit state string ID number */
- Endpoint_Write_
Byte
(0);
+ Endpoint_Write_
8
(0);
Endpoint_ClearIN();
Endpoint_ClearIN();
@@
-464,7
+481,7
@@
void EVENT_USB_Device_ControlRequest(void)
Endpoint_ClearSETUP();
/* Write the current device state to the endpoint */
Endpoint_ClearSETUP();
/* Write the current device state to the endpoint */
- Endpoint_Write_
Byte
(DFU_State);
+ Endpoint_Write_
8
(DFU_State);
Endpoint_ClearIN();
Endpoint_ClearIN();
@@
-503,7
+520,7
@@
static void DiscardFillerBytes(uint8_t NumberOfBytes)
}
else
{
}
else
{
- Endpoint_Discard_
Byte
();
+ Endpoint_Discard_
8
();
}
}
}
}
}
}