diff options
| -rw-r--r-- | firmware/main.c | 50 | 
1 files changed, 21 insertions, 29 deletions
| diff --git a/firmware/main.c b/firmware/main.c index 187a8b2..ccfe69f 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -81,7 +81,7 @@ static void leaveBootloader() __attribute__((__noreturn__));  static uchar events = 0; // bitmap of events to run  #define EVENT_ERASE_APPLICATION 1  #define EVENT_WRITE_PAGE 2 -#define EVENT_FINISH 4 +#define EVENT_EXECUTE 4  // controls state of events  #define fireEvent(event) events |= (event) @@ -89,7 +89,7 @@ static uchar events = 0; // bitmap of events to run  #define clearEvents()    events = 0  // length of bytes to write in to flash memory in upcomming usbFunctionWrite calls -static unsigned char writeLength; +//static unsigned char writeLength;  // becomes 1 when some programming happened  // lets leaveBootloader know if needs to finish up the programming @@ -228,7 +228,7 @@ static uchar usbFunctionSetup(uchar data[8]) {          return 4;      } else if (rq->bRequest == 1) { // write page -        writeLength = rq->wValue.word; +        //writeLength = rq->wValue.word;          currentAddress = rq->wIndex.word;          return USB_NO_MSG; // hands off work to usbFunctionWrite @@ -238,7 +238,7 @@ static uchar usbFunctionSetup(uchar data[8]) {      } else { // exit bootloader  #       if BOOTLOADER_CAN_EXIT -            fireEvent(EVENT_FINISH); +            fireEvent(EVENT_EXECUTE);  #       endif      } @@ -249,7 +249,7 @@ static uchar usbFunctionSetup(uchar data[8]) {  // read in a page over usb, and write it in to the flash write buffer  static uchar usbFunctionWrite(uchar *data, uchar length) {      //if (length > writeLength) length = writeLength; // test for missing final page bug -    writeLength -= length; +    //writeLength -= length;      do {          // remember vectors or the tinyvector table  @@ -274,7 +274,8 @@ static uchar usbFunctionWrite(uchar *data, uchar length) {      // TODO: Isn't this always last?      // if we have now reached another page boundary, we're done -    uchar isLast = (writeLength == 0); +    //uchar isLast = (writeLength == 0); +    uchar isLast = ((currentAddress % SPM_PAGESIZE) == 0);      // definitely need this if! seems usbFunctionWrite gets called again in future usbPoll's in the runloop!      if (isLast) fireEvent(EVENT_WRITE_PAGE); // ask runloop to write our page @@ -331,14 +332,14 @@ static inline void tiny85FlashWrites(void) {  // finishes up writing to the flash, including adding the tinyVector tables at the end of memory  // TODO: can this be simplified? EG: currentAddress = PROGMEM_SIZE; fillFlashWithVectors(); -static inline void tiny85FinishWriting(void) { -    // make sure remainder of flash is erased and write checksum and application reset vectors -    if (didWriteSomething) { -        while (currentAddress < BOOTLOADER_ADDRESS) { -            fillFlashWithVectors(); -        } -    } -} +// static inline void tiny85FinishWriting(void) { +//     // make sure remainder of flash is erased and write checksum and application reset vectors +//     if (didWriteSomething) { +//         while (currentAddress < BOOTLOADER_ADDRESS) { +//             fillFlashWithVectors(); +//         } +//     } +// }  // reset system to a normal state and launch user program  static inline __attribute__((noreturn)) void leaveBootloader(void) { @@ -379,26 +380,17 @@ int __attribute__((noreturn)) main(void) {              // needs to wait > 9ms before next usb request              if (isEvent(EVENT_ERASE_APPLICATION)) eraseApplication();              if (isEvent(EVENT_WRITE_PAGE)) tiny85FlashWrites(); -             -            if (isEvent(EVENT_FINISH)) { // || AUTO_EXIT_CONDITION()) { -                tiny85FinishWriting(); -                 -#               if BOOTLOADER_CAN_EXIT + +#           if BOOTLOADER_CAN_EXIT             +                if (isEvent(EVENT_EXECUTE)) { // when host requests device run uploaded program                      _delay_ms(10); // removing delay causes USB errors                      break; -#               endif -            } -// #           if BOOTLOADER_CAN_EXIT -//                 // exit if requested by the programming app, or if we timeout waiting for the pc with a valid app -//                 if (isEvent(EVENT_EXIT_BOOTLOADER) || AUTO_EXIT_CONDITION()) { -//                     //_delay_ms(10); -//                     break; -//                 } -// #           endif +                } +#           endif              clearEvents(); -        } while(bootLoaderCondition());  /* main event loop */ +        } while(bootLoaderCondition());  /* main event loop runs so long as bootLoaderCondition remains truthy */      }      leaveBootloader(); | 
