Adding support for boot up Logo's (#32)

This brings across a set of commits to support loading boot up images from a specific location in flash. And also creating a generator tool to make files to put images in said position.
This commit is contained in:
Ben V. Brown
2017-07-23 16:54:12 +10:00
committed by GitHub
parent 967d62f826
commit cb8bc643c4
23 changed files with 1123 additions and 392 deletions

View File

@@ -9,6 +9,7 @@
#include "Oled.h"
#include "Settings.h"
#include "I2C.h"
void setup();
int main(void) {
@@ -18,28 +19,29 @@ int main(void) {
ProcessUI();
DrawUI();
delayMs(50); //Slow the system down a little bit
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)
{
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5) == Bit_RESET) {
lastMovement = millis();
//This is a workaround for the line staying low as the user is still moving. (ie sensitivity is too high for their amount of movement)
}
}
}
void setup() {
RCC_Config(); //setup system clock
NVIC_Config(0x4000); //this shifts the NVIC table to be offset, for the usb bootloader's size
GPIO_Config(); //setup all the GPIO pins
NVIC_Config(0x4000); //this shifts the NVIC table to be offset, for the usb bootloader's size
GPIO_Config(); //setup all the GPIO pins
Init_EXTI(); //Init the EXTI inputs
Init_Timer3(); //Used for the soldering iron tip
Init_Timer3(); //Used for the soldering iron tip
Adc_Init(); //Init adc and DMA
I2C_Configuration(); //Start the I2C hardware
GPIO_Init_OLED(); //Init the GPIO ports for the OLED
GPIO_Init_OLED(); //Init the GPIO ports for the OLED
restoreSettings(); //Load settings
StartUp_Accelerometer(systemSettings.sensitivity); //Start the accelerometer
StartUp_Accelerometer(systemSettings.sensitivity); //Start the accelerometer
setupPID(); //Init the PID values
readIronTemp(systemSettings.tempCalibration, 0,0); //load the default calibration value
readIronTemp(systemSettings.tempCalibration, 0, 0); //load the default calibration value
Init_Oled(systemSettings.flipDisplay); //Init the OLED display
OLED_DrawString("VER 1.14", 8); //Version Number
delayMs(500); //Pause to show version number
Start_Watchdog(1000); //start the system watch dog as 1 second timeout
OLED_DrawString("VER 1.15", 8); //Version Number
delayMs(300); //Pause to show version number
showBootLogoIfavailable();
Start_Watchdog(1000); //start the system watch dog as 1 second timeout
}

View File

@@ -8,7 +8,8 @@
*/
#include "Settings.h"
#define FLASH_ADDR (0x8000000|48896)/*Flash start OR'ed with the maximum amount of flash - 256 bytes*/
#define FLASH_ADDR (0x8000000|0xBC00)/*Flash start OR'ed with the maximum amount of flash - 1024 bytes*/
#define FLASH_LOGOADDR (0x8000000|0xB800) /*second last page of flash set aside for logo image*/
void saveSettings() {
//First we erase the flash
FLASH_Unlock(); //unlock flash writing
@@ -71,3 +72,42 @@ void resetSettings() {
systemSettings.BoostTemp = 4000; //default to 400C
}
void showBootLogoIfavailable() {
//check if the header is there (0xAA,0x55,0xF0,0x0D)
//If so display logo
uint16_t temp[98];
for (uint8_t i = 0; i < (98); i++) {
temp[i] = *(uint16_t *) (FLASH_LOGOADDR + (i * 2));
}
uint8_t temp8[98 * 2];
for (uint8_t i = 0; i < 98; i++) {
temp8[i * 2] = temp[i] >> 8;
temp8[i * 2 + 1] = temp[i] & 0xFF;
}
/*char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
'C', 'D', 'E', 'F' };
OLED_DrawChar(hex[(temp8[0] >> 4) & 0x0F], 0);
OLED_DrawChar(hex[(temp8[0] >> 0) & 0x0F], 1);
OLED_DrawChar(hex[(temp8[1] >> 4) & 0x0F], 2);
OLED_DrawChar(hex[(temp8[1] >> 0) & 0x0F], 3);
OLED_DrawChar(hex[(temp8[2] >> 4) & 0x0F], 4);
OLED_DrawChar(hex[(temp8[2] >> 0) & 0x0F], 5);
OLED_DrawChar(hex[(temp8[3] >> 4) & 0x0F], 6);
OLED_DrawChar(hex[(temp8[3] >> 0) & 0x0F], 7);*/
if (temp8[0] != 0xAA)
return;
if (temp8[1] != 0x55)
return;
if (temp8[2] != 0xF0)
return;
if (temp8[3] != 0x0D)
return;
Oled_DrawArea(0, 0, 96, 16, (uint8_t*) (temp8 + 4));
delayMs(1000);
}