mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
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:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user