///////////////////////////////////////////////////////////////////////////// //! Initializes LCD driver //! \param[in] mode currently only mode 0 supported //! \return < 0 if initialisation failed ///////////////////////////////////////////////////////////////////////////// s32 MIOS32_LCD_Init(u32 mode) { s32 ret; // currently only mode 0 supported if( mode != 0 ) return -1; // unsupported mode // fetch config from BSL info range MIOS32_LCD_ParametersFetchFromBslInfoRange(); // disable font bitmap font_bitmap.width = 0; // set initial cursor map for character LCDs u8 cursor_map[] = {0x00, 0x40, 0x14, 0x54}; // offset line 0/1/2/3 MIOS32_LCD_CursorMapSet(cursor_map); // note: this has to be done before APP_LCD_Init() is called, so that // the driver is able to modify the default cursor mapping // usage example: "dog" LCDs #if !defined(MIOS32_FAMILY_EMULATION) // initial delay - some LCDs need this! MIOS32_DELAY_Wait_uS(50000); #endif // call application specific init function if( (ret=APP_LCD_Init(mode)) < 0 ) return ret; // clear screen MIOS32_LCD_Clear(); // set character and graphical cursor to initial position MIOS32_LCD_CursorSet(0, 0); MIOS32_LCD_GCursorSet(0, 0); return 0; // no error }
///////////////////////////////////////////////////////////////////////////// // Main function ///////////////////////////////////////////////////////////////////////////// int main(void) { // initialize hardware and MIOS32 modules #ifndef MIOS32_DONT_USE_SYS MIOS32_SYS_Init(0); #endif #ifndef MIOS32_DONT_USE_DELAY MIOS32_DELAY_Init(0); #endif #ifndef MIOS32_DONT_USE_TIMESTAMP MIOS32_TIMESTAMP_Init(0); #endif #ifndef MIOS32_DONT_USE_BOARD MIOS32_BOARD_Init(0); #endif #ifndef MIOS32_DONT_USE_SPI MIOS32_SPI_Init(0); #endif #ifndef MIOS32_DONT_USE_SRIO MIOS32_SRIO_Init(0); #endif #if !defined(MIOS32_DONT_USE_DIN) && !defined(MIOS32_DONT_USE_SRIO) MIOS32_DIN_Init(0); #endif #if !defined(MIOS32_DONT_USE_DOUT) && !defined(MIOS32_DONT_USE_SRIO) MIOS32_DOUT_Init(0); #endif #if !defined(MIOS32_DONT_USE_ENC) && !defined(MIOS32_DONT_USE_SRIO) MIOS32_ENC_Init(0); #endif #if !defined(MIOS32_DONT_USE_MF) MIOS32_MF_Init(0); #endif #if !defined(MIOS32_DONT_USE_AIN) MIOS32_AIN_Init(0); #endif #ifndef MIOS32_DONT_USE_IIC_BS MIOS32_IIC_BS_Init(0); #endif #ifndef MIOS32_DONT_USE_MIDI MIOS32_MIDI_Init(0); #endif #ifndef MIOS32_DONT_USE_USB MIOS32_USB_Init(0); #endif #ifndef MIOS32_DONT_USE_OSC MIOS32_OSC_Init(0); #endif #ifndef MIOS32_DONT_USE_COM MIOS32_COM_Init(0); #endif #ifndef MIOS32_DONT_USE_LCD MIOS32_LCD_Init(0); # if defined(MIOS32_BOARD_MBHP_CORE_STM32) || defined(MIOS32_BOARD_MBHP_CORE_LPC17) || defined(MIOS32_BOARD_STM32F4DISCOVERY) || defined(MIOS32_BOARD_MBHP_CORE_STM32F4) // init second LCD as well (if available) MIOS32_LCD_DeviceSet(1); APP_LCD_Init(0); MIOS32_LCD_DeviceSet(0); # endif #endif #ifdef MIOS32_USE_I2S MIOS32_I2S_Init(0); #endif // call C++ constructors __libc_init_array(); // initialize application APP_Init(); #if MIOS32_LCD_BOOT_MSG_DELAY // print boot message # ifndef MIOS32_DONT_USE_LCD MIOS32_LCD_PrintBootMessage(); # endif // wait for given delay (usually 2 seconds) # ifndef MIOS32_DONT_USE_DELAY int delay = 0; for(delay=0; delay<MIOS32_LCD_BOOT_MSG_DELAY; ++delay) MIOS32_DELAY_Wait_uS(1000); # endif #endif // start the task which calls the application hooks xTaskCreate(TASK_Hooks, (signed portCHAR *)"Hooks", configMINIMAL_STACK_SIZE, NULL, PRIORITY_TASK_HOOKS, NULL); #if !defined(MIOS32_DONT_USE_MIDI) xTaskCreate(TASK_MIDI_Hooks, (signed portCHAR *)"MIDI_Hooks", configMINIMAL_STACK_SIZE, NULL, PRIORITY_TASK_HOOKS, NULL); #endif // start the scheduler vTaskStartScheduler(); // Will only get here if there was not enough heap space to create the idle task return 0; }