CI: Build on Arch (bleeding-ege) and Ubuntu (stable) AVR-GCC toolchains.
[pub/USBasp.git] / Bootloaders / CDC / BootloaderCDC.c
index aa17bc1..00755a5 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2017.
+     Copyright (C) Dean Camera, 2018.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2018  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -97,7 +97,7 @@ void Application_Jump_Check(void)
                JTAG_ENABLE();
        #else
                /* Check if the device's BOOTRST fuse is set */
                JTAG_ENABLE();
        #else
                /* Check if the device's BOOTRST fuse is set */
-               if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST)
+               if (!(BootloaderAPI_ReadFuse(GET_HIGH_FUSE_BITS) & ~FUSE_BOOTRST))
                {
                        /* If the reset source was not an external reset or the key is correct, clear it and jump to the application */
                        if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY))
                {
                        /* If the reset source was not an external reset or the key is correct, clear it and jump to the application */
                        if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY))
@@ -297,9 +297,6 @@ static void ReadWriteMemoryBlock(const uint8_t Command)
        /* Check if command is to read a memory block */
        if (Command == AVR109_COMMAND_BlockRead)
        {
        /* Check if command is to read a memory block */
        if (Command == AVR109_COMMAND_BlockRead)
        {
-               /* Re-enable RWW section */
-               boot_rww_enable();
-
                while (BlockSize--)
                {
                        if (MemoryType == MEMORY_TYPE_FLASH)
                while (BlockSize--)
                {
                        if (MemoryType == MEMORY_TYPE_FLASH)
@@ -332,10 +329,7 @@ static void ReadWriteMemoryBlock(const uint8_t Command)
                uint32_t PageStartAddress = CurrAddress;
 
                if (MemoryType == MEMORY_TYPE_FLASH)
                uint32_t PageStartAddress = CurrAddress;
 
                if (MemoryType == MEMORY_TYPE_FLASH)
-               {
-                       boot_page_erase(PageStartAddress);
-                       boot_spm_busy_wait();
-               }
+                 BootloaderAPI_ErasePage(PageStartAddress);
 
                while (BlockSize--)
                {
 
                while (BlockSize--)
                {
@@ -345,7 +339,7 @@ static void ReadWriteMemoryBlock(const uint8_t Command)
                                if (HighByte)
                                {
                                        /* Write the next FLASH word to the current FLASH page */
                                if (HighByte)
                                {
                                        /* Write the next FLASH word to the current FLASH page */
-                                       boot_page_fill(CurrAddress, ((FetchNextCommandByte() << 8) | LowByte));
+                                       BootloaderAPI_FillWord(CurrAddress, ((FetchNextCommandByte() << 8) | LowByte));
 
                                        /* Increment the address counter after use */
                                        CurrAddress += 2;
 
                                        /* Increment the address counter after use */
                                        CurrAddress += 2;
@@ -371,10 +365,7 @@ static void ReadWriteMemoryBlock(const uint8_t Command)
                if (MemoryType == MEMORY_TYPE_FLASH)
                {
                        /* Commit the flash page to memory */
                if (MemoryType == MEMORY_TYPE_FLASH)
                {
                        /* Commit the flash page to memory */
-                       boot_page_write(PageStartAddress);
-
-                       /* Wait until write operation has completed */
-                       boot_spm_busy_wait();
+                       BootloaderAPI_WritePage(PageStartAddress);
                }
 
                /* Send response byte back to the host */
                }
 
                /* Send response byte back to the host */
@@ -516,12 +507,7 @@ static void CDC_Task(void)
        {
                /* Clear the application section of flash */
                for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < (uint32_t)BOOT_START_ADDR; CurrFlashAddress += SPM_PAGESIZE)
        {
                /* Clear the application section of flash */
                for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < (uint32_t)BOOT_START_ADDR; CurrFlashAddress += SPM_PAGESIZE)
-               {
-                       boot_page_erase(CurrFlashAddress);
-                       boot_spm_busy_wait();
-                       boot_page_write(CurrFlashAddress);
-                       boot_spm_busy_wait();
-               }
+                       BootloaderAPI_ErasePage(CurrFlashAddress);
 
                /* Send confirmation byte back to the host */
                WriteNextResponseByte('\r');
 
                /* Send confirmation byte back to the host */
                WriteNextResponseByte('\r');
@@ -530,7 +516,7 @@ static void CDC_Task(void)
        else if (Command == AVR109_COMMAND_WriteLockbits)
        {
                /* Set the lock bits to those given by the host */
        else if (Command == AVR109_COMMAND_WriteLockbits)
        {
                /* Set the lock bits to those given by the host */
-               boot_lock_bits_set(FetchNextCommandByte());
+               BootloaderAPI_WriteLock(FetchNextCommandByte());
 
                /* Send confirmation byte back to the host */
                WriteNextResponseByte('\r');
 
                /* Send confirmation byte back to the host */
                WriteNextResponseByte('\r');
@@ -538,19 +524,19 @@ static void CDC_Task(void)
        #endif
        else if (Command == AVR109_COMMAND_ReadLockbits)
        {
        #endif
        else if (Command == AVR109_COMMAND_ReadLockbits)
        {
-               WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOCK_BITS));
+               WriteNextResponseByte(BootloaderAPI_ReadLock());
        }
        else if (Command == AVR109_COMMAND_ReadLowFuses)
        {
        }
        else if (Command == AVR109_COMMAND_ReadLowFuses)
        {
-               WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS));
+               WriteNextResponseByte(BootloaderAPI_ReadFuse(GET_LOW_FUSE_BITS));
        }
        else if (Command == AVR109_COMMAND_ReadHighFuses)
        {
        }
        else if (Command == AVR109_COMMAND_ReadHighFuses)
        {
-               WriteNextResponseByte(boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS));
+               WriteNextResponseByte(BootloaderAPI_ReadFuse(GET_HIGH_FUSE_BITS));
        }
        else if (Command == AVR109_COMMAND_ReadExtendedFuses)
        {
        }
        else if (Command == AVR109_COMMAND_ReadExtendedFuses)
        {
-               WriteNextResponseByte(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS));
+               WriteNextResponseByte(BootloaderAPI_ReadFuse(GET_EXTENDED_FUSE_BITS));
        }
        #if !defined(NO_BLOCK_SUPPORT)
        else if (Command == AVR109_COMMAND_GetBlockWriteSupport)
        }
        #if !defined(NO_BLOCK_SUPPORT)
        else if (Command == AVR109_COMMAND_GetBlockWriteSupport)
@@ -571,7 +557,7 @@ static void CDC_Task(void)
        else if (Command == AVR109_COMMAND_FillFlashPageWordHigh)
        {
                /* Write the high byte to the current flash page */
        else if (Command == AVR109_COMMAND_FillFlashPageWordHigh)
        {
                /* Write the high byte to the current flash page */
-               boot_page_fill(CurrAddress, FetchNextCommandByte());
+               BootloaderAPI_FillWord(CurrAddress, FetchNextCommandByte());
 
                /* Send confirmation byte back to the host */
                WriteNextResponseByte('\r');
 
                /* Send confirmation byte back to the host */
                WriteNextResponseByte('\r');
@@ -579,7 +565,7 @@ static void CDC_Task(void)
        else if (Command == AVR109_COMMAND_FillFlashPageWordLow)
        {
                /* Write the low byte to the current flash page */
        else if (Command == AVR109_COMMAND_FillFlashPageWordLow)
        {
                /* Write the low byte to the current flash page */
-               boot_page_fill(CurrAddress | 0x01, FetchNextCommandByte());
+               BootloaderAPI_FillWord(CurrAddress | 0x01, FetchNextCommandByte());
 
                /* Increment the address */
                CurrAddress += 2;
 
                /* Increment the address */
                CurrAddress += 2;
@@ -590,10 +576,7 @@ static void CDC_Task(void)
        else if (Command == AVR109_COMMAND_WriteFlashPage)
        {
                /* Commit the flash page to memory */
        else if (Command == AVR109_COMMAND_WriteFlashPage)
        {
                /* Commit the flash page to memory */
-               boot_page_write(CurrAddress);
-
-               /* Wait until write operation has completed */
-               boot_spm_busy_wait();
+               BootloaderAPI_WritePage(CurrAddress);
 
                /* Send confirmation byte back to the host */
                WriteNextResponseByte('\r');
 
                /* Send confirmation byte back to the host */
                WriteNextResponseByte('\r');