/**************************************************************************** Function: WORD GOLDrawCallback( void ) Description: This callback is performed at the beginning of the GOLDraw() function. Processing that needs to be done on a regular basis and is not triggered by a message should be done here. Precondition: None Parameters: None Returns: None Remarks: All graphic control adding and removing must be done from this function, not from the message callback. ***************************************************************************/ WORD GOLDrawCallback( void ) { switch (screenState) { // Display Start-up screen and play Welcome message case SCREEN_START: // Display the start up screen PictCreate( ID_ICON, // ID 0,0,GetMaxX(),GetMaxY(), // dimension PICT_DRAW, // will be displayed, has frame 1, // scale factor is x1 picture, // bitmap NULL ); // default GOL scheme screenState = SCREEN_START_DELAY; break; case SCREEN_START_DELAY: if(enableSoundFlag) { while(speakerBusy()); // Speaker: Welcome to MPLAB Starter Kit for PIC24H MCU Demonstration speakerActivate(SPEECH_ADDR_WELCOME, SPEECH_SIZE_WELCOME); Delay(6000); } // Initialize the reference timer TickInit(); // Initialize the accelerometer AccelerometerInit(); screenState = SCREEN_DISPLAY_MAIN; break; // Display Main screen case SCREEN_DISPLAY_MAIN: ShowScreenMain(); screenState = SCREEN_MAIN; displayChangeTime = tick; break; case SCREEN_MAIN: break; // Display Accelerometer Tri-axial Outputs graph case SCREEN_DISPLAY_GRAPH: ShowScreenGraph(); screenState = SCREEN_GRAPH; displayChangeTime = tick; break; case SCREEN_GRAPH: AccelerometerStop(); UpdateGraph(); break; // Display connect External Sensor information case SCREEN_DISPLAY_ES_INFO: ShowScreenESInfo(); screenState = SCREEN_ES_INFO; displayChangeTime = tick; break; case SCREEN_ES_INFO: Delay(2000); screenState = SCREEN_DISPLAY_ES_GRAPH; break; // Display External Sensor output graph case SCREEN_DISPLAY_ES_GRAPH: AccelerometerStop(); ShowScreenESGraph(); initESADC(); screenState = SCREEN_ES_GRAPH; displayChangeTime = tick; break; case SCREEN_ES_GRAPH: UpdateESGraph(); break; // Display Orientation screen case SCREEN_DISPLAY_ORIENTATION: ShowScreenOrientation(); screenState = SCREEN_ORIENTATION; displayChangeTime = tick; break; case SCREEN_ORIENTATION: UpdateOrientation(); break; // Display Games screen case SCREEN_DISPLAY_GAMES: ShowScreenGames(); screenState = SCREEN_GAMES; displayChangeTime = tick; break; case SCREEN_GAMES: break; // Display Bomber Jet screen case SCREEN_DISPLAY_JET: ShowScreenJet(); AccelerometerStop(); AccelerometerInit(); if(enableSoundFlag) { while(speakerBusy()); speakerActivate(SPEECH_ADDR_START, SPEECH_SIZE_START); while(speakerBusy()); } screenState = SCREEN_JET; displayChangeTime = tick; break; case SCREEN_JET: DrawJet(); break; // Display Snake screen case SCREEN_DISPLAY_SNAKE: ShowScreenSnake(); AccelerometerStop(); AccelerometerInit(); if(enableSoundFlag) { while(speakerBusy()); speakerActivate(SPEECH_ADDR_START, SPEECH_SIZE_START); while(speakerBusy()); } screenState = SCREEN_SNAKE; displayChangeTime = tick; break; case SCREEN_SNAKE: DrawSnake(); break; // Display Score screen case SCREEN_DISPLAY_SCORE: ShowScreenScore(); if(enableSoundFlag) { while(speakerBusy()); speakerActivate(SPEECH_ADDR_GAME, SPEECH_SIZE_GAME); while(speakerBusy()); speakerActivate(SPEECH_ADDR_OVER, SPEECH_SIZE_OVER); } displayChangeTime = tick; screenState = SCREEN_SCORE; break; case SCREEN_SCORE: break; } return 1; // Callback complete }
/********************************************************************* * Function: void PutImage4BPP(SHORT left, SHORT top, FLASH_BYTE* bitmap, BYTE stretch) * * PreCondition: none * * Input: left,top - left top image corner, bitmap - image pointer, * stretch - image stretch factor * * Output: none * * Side Effects: none * * Overview: outputs 16 color image starting from left,top coordinates * * Note: image must be located in flash * ********************************************************************/ void PutImage4BPP(SHORT left, SHORT top, FLASH_BYTE *bitmap, BYTE stretch) { register DWORD address; register FLASH_BYTE *flashAddress; register FLASH_BYTE *tempFlashAddress; WORD sizeX, sizeY; register WORD x, y; BYTE temp; register BYTE stretchX, stretchY; WORD pallete[16]; WORD counter; // Move pointer to size information flashAddress = bitmap + 2; // Set start address address = (long)(GetMaxX() + 1) * top + left; // Read image size sizeY = *((FLASH_WORD *)flashAddress); flashAddress += 2; sizeX = *((FLASH_WORD *)flashAddress); flashAddress += 2; // Read pallete for(counter = 0; counter < 16; counter++) { pallete[counter] = *((FLASH_WORD *)flashAddress); flashAddress += 2; } CS_LAT_BIT = 0; for(y = 0; y < sizeY; y++) { tempFlashAddress = flashAddress; for(stretchY = 0; stretchY < stretch; stretchY++) { flashAddress = tempFlashAddress; SetAddress(address); for(x = 0; x < sizeX; x++) { // Read 2 pixels from flash if(x & 0x0001) { // second pixel in byte SetColor(pallete[temp >> 4]); } else { temp = *flashAddress; flashAddress++; // first pixel in byte SetColor(pallete[temp & 0x0f]); } // Write pixel to screen for(stretchX = 0; stretchX < stretch; stretchX++) { WriteData(_color); } // Shift to the next pixel //temp >>= 4; } address += (GetMaxX() + 1); }
// handler for the DMA channel 1 interrupt void __attribute__((weak)) __ISR(_DMA1_VECTOR, ipl6) DmaHandler1(void) { static WORD remaining=0; static short line =0; static BYTE GraphicsState = 1; static BYTE prevGraphicsState; static WORD pixelAmount=0; #if defined(USE_PIP) || defined(USE_LCC_SCROLLING) static DWORD pixelAddress=0; #if defined(USE_PIP) static WORD pipLine =0; #endif #endif #ifdef LEGACY_MODE static WORD dmatransfersremaining=0; if(dmatransfersremaining != 0) { if(dmatransfersremaining > MAX_DMA_TRANSFER) { //Setup DMA Transfer DCH1DSIZ = MAX_DMA_TRANSFER; } else { //Setup DMA Transfer DCH1DSIZ = dmatransfersremaining; } dmatransfersremaining -= DCH1DSIZ; DrawCount=0; DCH1INTCLR = 0x08; //CHBCIF = 0; IFS1CLR = 0x20000; //DMA1IF =0; DCH1CONSET =0x80; //CHEN =1; return; } #endif switch(GraphicsState) { case 1: prevGraphicsState = ++GraphicsState; pixelAmount = LINE_LENGTH; if(line++ >= -DISP_VER_FRONT_PORCH) { if(line == (FRAME_HEIGHT)) { VSYNC =0; line= -VER_BLANK; PMADDRCLR = 0xffff; ADDR15=0; ADDR16=0; #ifdef GFX_USE_DISPLAY_PANEL_TFT_640480_8_E ADDR17=0; ADDR18=0; #endif overflowcount.Val=0; #ifdef USE_PIP pipLine = 0; #endif } else { PMMODESET = 0x0800; //INCM = 0b01; VSYNC =1; DATA_ENABLE =1; #ifdef USE_PIP if((line >= PipStartT)&&(line <= (PipStartT + PipVLength))&&(PipVLength != 0)) { pixelAddress = ((line) * LINE_LENGTH); PMADDR = (pixelAddress)&(0x7FFF); overflowcount.Val = pixelAddress/PMADDR_OVERFLOW; ADDR15 = overflowcount.Val; //count holds the additional address line count ADDR16 = overflowcount.bits.b1; pixelAmount = PipStartL; GraphicsState = 4; prevGraphicsState = 4; } #endif #ifdef USE_LCC_SCROLLING else if(scroll >0) { switch(scroll) { case 1: //Up case 2: //Down if(line<scrollLine) { pixelAddress = (GetMaxY()-(scrollLine-line)) * LINE_LENGTH; ADDR17 = _GFXActivePage; ADDR18 = _GFXActivePage>>1; } else { pixelAddress = (line-scrollLine) * LINE_LENGTH; ADDR17 = scrollPage; ADDR18 = scrollPage>>1; } PMADDR = (pixelAddress)&(0x7FFF); overflowcount.Val = pixelAddress/PMADDR_OVERFLOW; ADDR15 = overflowcount.Val; //count holds the additional address line count ADDR16 = overflowcount.bits.b1; break; case 3://Left case 4://Right pixelAddress = ((line+1) * LINE_LENGTH) + (GetMaxX()-scrollLine); PMADDR = (pixelAddress)&(0x7FFF); overflowcount.Val = pixelAddress/PMADDR_OVERFLOW; ADDR15 = overflowcount.Val; //count holds the additional address line count ADDR16 = overflowcount.bits.b1; if(scroll == 3) { ADDR17 = _GFXActivePage; ADDR18 = _GFXActivePage>>1; } else { ADDR17 = scrollPage; ADDR18 = scrollPage>>1; } pixelAmount = scrollLine; prevGraphicsState = 7; GraphicsState = 7; break; } }
/********************************************************************* * Function: void PutImage1BPP(SHORT left, SHORT top, FLASH_BYTE* bitmap, BYTE stretch) * * PreCondition: none * * Input: left,top - left top image corner, * bitmap - image pointer, * stretch - image stretch factor * * Output: none * * Side Effects: none * * Overview: outputs monochrome image starting from left,top coordinates * * Note: image must be located in flash * ********************************************************************/ void PutImage1BPP(SHORT left, SHORT top, FLASH_BYTE *bitmap, BYTE stretch) { register DWORD address; register FLASH_BYTE *flashAddress; register FLASH_BYTE *tempFlashAddress; BYTE temp; WORD sizeX, sizeY; WORD x, y; BYTE stretchX, stretchY; WORD pallete[2]; BYTE mask; // Move pointer to size information flashAddress = bitmap + 2; // Set start address address = (long)(GetMaxX() + 1) * top + left; // Read image size sizeY = *((FLASH_WORD *)flashAddress); flashAddress += 2; sizeX = *((FLASH_WORD *)flashAddress); flashAddress += 2; pallete[0] = *((FLASH_WORD *)flashAddress); flashAddress += 2; pallete[1] = *((FLASH_WORD *)flashAddress); flashAddress += 2; CS_LAT_BIT = 0; for(y = 0; y < sizeY; y++) { tempFlashAddress = flashAddress; for(stretchY = 0; stretchY < stretch; stretchY++) { flashAddress = tempFlashAddress; SetAddress(address); mask = 0; for(x = 0; x < sizeX; x++) { // Read 8 pixels from flash if(mask == 0) { temp = *flashAddress; flashAddress++; mask = 0x80; } // Set color if(mask & temp) { SetColor(pallete[1]); } else { SetColor(pallete[0]); } // Write pixel to screen for(stretchX = 0; stretchX < stretch; stretchX++) { WriteData(_color); } // Shift to the next pixel mask >>= 1; } address += (GetMaxX() + 1); } } CS_LAT_BIT = 1; }
void gui_init(void) { //Init the elements ids gui_element[GUI_EL_AREA_STATUSBAR_TOP].id = EL_ID_AREA; gui_element[GUI_EL_AREA_STATUSBAR_DROPPED].id = EL_ID_AREA; gui_element[GUI_EL_AREA_CONTENT].id = EL_ID_AREA; gui_element[GUI_EL_MBTN_MAP].id = EL_ID_MBTN; gui_element[GUI_EL_AREA_MAP].id = EL_ID_AREA; gui_element[GUI_EL_SW_STARTMAPPING].id = EL_ID_SW; gui_element[GUI_EL_SW_SHOWSCAN].id = EL_ID_SW; gui_element[GUI_EL_SW_PROCESSEDVIEW].id = EL_ID_SW; //gui_element[GUI_EL_SLI_MAP_SCALE].id = EL_ID_SLI; gui_element[GUI_EL_BTN_CLEARMAP].id = EL_ID_BTN; gui_element[GUI_EL_BTN_SETWP].id = EL_ID_BTN; gui_element[GUI_EL_MBTN_VIEW].id = EL_ID_MBTN; gui_element[GUI_EL_MBTN_SETTINGS].id = EL_ID_MBTN; gui_element[GUI_EL_BTN_CALTOUCH].id = EL_ID_BTN; gui_element[GUI_EL_BTN_RESET].id = EL_ID_BTN; gui_element[GUI_EL_SW_LIDAR].id = EL_ID_SW; gui_element[GUI_EL_SW_STRLIDAR].id = EL_ID_SW; gui_element[GUI_EL_SW_STRDEBUG].id = EL_ID_SW; gui_element[GUI_EL_SW_STRDEBUGOS].id = EL_ID_SW; gui_element[GUI_EL_SW_STRSLAMUI].id = EL_ID_SW; gui_element[GUI_EL_SW_STRERR].id = EL_ID_SW; //Load standard settings graphics_init(gui_element); //Individual settings gui_element[GUI_EL_AREA_STATUSBAR_TOP].length = STATUSBAR_LENGTH; gui_element[GUI_EL_AREA_STATUSBAR_TOP].heigth = STATUSBAR_HEIGHT; gui_element[GUI_EL_AREA_STATUSBAR_TOP].action = &gui_el_event_area_statusbar; gui_element[GUI_EL_AREA_STATUSBAR_TOP].state = STAT_NOT_DROPPED; gui_element[GUI_EL_AREA_STATUSBAR_DROPPED].length = STATUSBAR_LENGTH; gui_element[GUI_EL_AREA_STATUSBAR_DROPPED].y = gui_element[GUI_EL_AREA_STATUSBAR_TOP].heigth + 1; gui_element[GUI_EL_AREA_STATUSBAR_DROPPED].heigth = GetMaxY() - gui_element[GUI_EL_AREA_STATUSBAR_DROPPED].y; gui_element[GUI_EL_AREA_STATUSBAR_DROPPED].state = GUI_EL_INTOUCHABLE; gui_element[GUI_EL_MBTN_MAP].x = -(MBTN_STD_HEIGHT / 2); gui_element[GUI_EL_MBTN_MAP].length += (MBTN_STD_HEIGHT / 2) ; gui_element[GUI_EL_MBTN_MAP].y = gui_element[GUI_EL_AREA_STATUSBAR_TOP].y + gui_element[GUI_EL_AREA_STATUSBAR_TOP].heigth + 1; gui_element[GUI_EL_MBTN_MAP].label = (char *)"Map/Scan"; gui_element[GUI_EL_MBTN_MAP].action = &gui_el_event_mbtn_map; gui_element[GUI_EL_MBTN_MAP].state = MBTN_ACTIVE; gui_element[GUI_EL_SW_STARTMAPPING].label = (char *)"Mapping:"; gui_element[GUI_EL_SW_STARTMAPPING].action = &gui_el_event_sw_startMapping; gui_element[GUI_EL_SW_STARTMAPPING].x = PAGE_GRID_DIST; gui_element[GUI_EL_SW_STARTMAPPING].y = gui_element[GUI_EL_MBTN_MAP].y + gui_element[GUI_EL_MBTN_MAP].heigth + PAGE_GRID_DIST; gui_element[GUI_EL_SW_STARTMAPPING].state = SW_OFF; gui_element[GUI_EL_SW_SHOWSCAN].label = (char *)"Show scan:"; gui_element[GUI_EL_SW_SHOWSCAN].action = &gui_el_event_sw_showScan; gui_element[GUI_EL_SW_SHOWSCAN].x = PAGE_GRID_DIST; gui_element[GUI_EL_SW_SHOWSCAN].y = gui_element[GUI_EL_SW_STARTMAPPING].y + gui_element[GUI_EL_SW_STARTMAPPING].heigth + PAGE_GRID_DIST; gui_element[GUI_EL_SW_SHOWSCAN].state = SW_OFF; gui_element[GUI_EL_SW_PROCESSEDVIEW].label = (char *)"Processed:"; gui_element[GUI_EL_SW_PROCESSEDVIEW].action = &gui_el_event_sw_processedview; gui_element[GUI_EL_SW_PROCESSEDVIEW].x = PAGE_GRID_DIST; gui_element[GUI_EL_SW_PROCESSEDVIEW].y = gui_element[GUI_EL_SW_SHOWSCAN].y + gui_element[GUI_EL_SW_SHOWSCAN].heigth + PAGE_GRID_DIST; gui_element[GUI_EL_SW_PROCESSEDVIEW].state = SW_OFF; gui_element[GUI_EL_BTN_CLEARMAP].label = (char *)"Clear map"; gui_element[GUI_EL_BTN_CLEARMAP].action = &gui_el_event_btn_clearMap; gui_element[GUI_EL_BTN_CLEARMAP].x = PAGE_GRID_DIST; gui_element[GUI_EL_BTN_CLEARMAP].y = gui_element[GUI_EL_SW_PROCESSEDVIEW].y + gui_element[GUI_EL_SW_PROCESSEDVIEW].heigth + PAGE_GRID_DIST; gui_element[GUI_EL_BTN_CLEARMAP].state = GUI_EL_INVISIBLE; gui_element[GUI_EL_BTN_SETWP].label = (char *)"Set waypoints"; gui_element[GUI_EL_BTN_SETWP].action = &gui_el_event_btn_setWp; gui_element[GUI_EL_BTN_SETWP].x = PAGE_GRID_DIST; gui_element[GUI_EL_BTN_SETWP].y = gui_element[GUI_EL_BTN_CLEARMAP].y + gui_element[GUI_EL_BTN_CLEARMAP].heigth + PAGE_GRID_DIST; gui_element[GUI_EL_BTN_SETWP].state = GUI_EL_INVISIBLE; gui_element[GUI_EL_AREA_MAP].x = gui_element[GUI_EL_SW_STARTMAPPING].x + gui_element[GUI_EL_SW_STARTMAPPING].length + PAGE_GRID_DIST; gui_element[GUI_EL_AREA_MAP].y = gui_element[GUI_EL_SW_STARTMAPPING].y; gui_element[GUI_EL_AREA_MAP].length = GetMaxX() - gui_element[GUI_EL_AREA_MAP].x; gui_element[GUI_EL_AREA_MAP].heigth = GetMaxY() - gui_element[GUI_EL_AREA_MAP].y; gui_element[GUI_EL_AREA_MAP].action = &gui_el_event_area_map; gui_element[GUI_EL_AREA_MAP].state = MAP_ACTIVE; gui_element[GUI_EL_AREA_CONTENT].length = GetMaxX(); gui_element[GUI_EL_AREA_CONTENT].y = gui_element[GUI_EL_MBTN_MAP].y + gui_element[GUI_EL_MBTN_MAP].heigth + 1; gui_element[GUI_EL_AREA_CONTENT].heigth = GetMaxY() - gui_element[GUI_EL_AREA_CONTENT].y; gui_element[GUI_EL_AREA_CONTENT].state = GUI_EL_INTOUCHABLE; gui_element[GUI_EL_MBTN_VIEW].x = gui_element[GUI_EL_MBTN_MAP].x + gui_element[GUI_EL_MBTN_MAP].length + 1; gui_element[GUI_EL_MBTN_VIEW].y = gui_element[GUI_EL_MBTN_MAP].y; gui_element[GUI_EL_MBTN_VIEW].label = (char *)"Info"; gui_element[GUI_EL_MBTN_VIEW].action = &gui_el_event_mbtn_view; gui_element[GUI_EL_MBTN_VIEW].state = MBTN_NOT_ACTIVE; gui_element[GUI_EL_MBTN_SETTINGS].x = gui_element[GUI_EL_MBTN_VIEW].x + gui_element[GUI_EL_MBTN_VIEW].length + 1; gui_element[GUI_EL_MBTN_SETTINGS].y = gui_element[GUI_EL_MBTN_MAP].y; gui_element[GUI_EL_MBTN_SETTINGS].label = (char *)"Settings"; gui_element[GUI_EL_MBTN_SETTINGS].action = &gui_el_event_mbtn_settings; gui_element[GUI_EL_MBTN_SETTINGS].state = MBTN_NOT_ACTIVE; gui_element[GUI_EL_BTN_CALTOUCH].x = PAGE_GRID_DIST; gui_element[GUI_EL_BTN_CALTOUCH].y = gui_element[GUI_EL_MBTN_MAP].y + gui_element[GUI_EL_MBTN_MAP].heigth + PAGE_GRID_DIST; gui_element[GUI_EL_BTN_CALTOUCH].label = (char *)"Calibrate touchscreen"; gui_element[GUI_EL_BTN_CALTOUCH].action = &gui_el_event_btn_caltouch; gui_element[GUI_EL_BTN_CALTOUCH].state = GUI_EL_INVISIBLE; gui_element[GUI_EL_BTN_RESET].x = gui_element[GUI_EL_BTN_CALTOUCH].x + gui_element[GUI_EL_BTN_CALTOUCH].length + PAGE_GRID_DIST; gui_element[GUI_EL_BTN_RESET].y = gui_element[GUI_EL_BTN_CALTOUCH].y; gui_element[GUI_EL_BTN_RESET].length /= 2; gui_element[GUI_EL_BTN_RESET].label = (char *)"RESET"; gui_element[GUI_EL_BTN_RESET].action = &gui_el_event_btn_reset; gui_element[GUI_EL_BTN_RESET].state = GUI_EL_INVISIBLE; gui_element[GUI_EL_SW_LIDAR].x = PAGE_GRID_DIST; gui_element[GUI_EL_SW_LIDAR].y = gui_element[GUI_EL_BTN_CALTOUCH].y + gui_element[GUI_EL_BTN_CALTOUCH].heigth + 5; gui_element[GUI_EL_SW_LIDAR].label = (char *)"Lidar:"; gui_element[GUI_EL_SW_LIDAR].action = &gui_el_event_sw_lidar; gui_element[GUI_EL_SW_LIDAR].state = GUI_EL_INVISIBLE; gui_element[GUI_EL_SW_STRLIDAR].x = gui_element[GUI_EL_SW_LIDAR].x + gui_element[GUI_EL_SW_LIDAR].length + PAGE_GRID_DIST; gui_element[GUI_EL_SW_STRLIDAR].y = gui_element[GUI_EL_SW_LIDAR].y; gui_element[GUI_EL_SW_STRLIDAR].label = (char *)"Stream:"; gui_element[GUI_EL_SW_STRLIDAR].action = &gui_el_event_sw_strlidar; gui_element[GUI_EL_SW_STRLIDAR].state = GUI_EL_INVISIBLE; gui_element[GUI_EL_SW_STRDEBUG].x = PAGE_GRID_DIST; gui_element[GUI_EL_SW_STRDEBUG].y = gui_element[GUI_EL_SW_LIDAR].y + gui_element[GUI_EL_SW_LIDAR].heigth + 5; gui_element[GUI_EL_SW_STRDEBUG].label = (char *)"Debug:"; gui_element[GUI_EL_SW_STRDEBUG].action = &gui_el_event_sw_strdebug; gui_element[GUI_EL_SW_STRDEBUG].state = GUI_EL_INVISIBLE; gui_element[GUI_EL_SW_STRDEBUGOS].x = PAGE_GRID_DIST; gui_element[GUI_EL_SW_STRDEBUGOS].y = gui_element[GUI_EL_SW_STRDEBUG].y + gui_element[GUI_EL_SW_STRDEBUG].heigth + 5; gui_element[GUI_EL_SW_STRDEBUGOS].label = (char *)"Debug OS:"; gui_element[GUI_EL_SW_STRDEBUGOS].action = &gui_el_event_sw_strdebugos; gui_element[GUI_EL_SW_STRDEBUGOS].state = GUI_EL_INVISIBLE; gui_element[GUI_EL_SW_STRERR].x = PAGE_GRID_DIST; gui_element[GUI_EL_SW_STRERR].y = gui_element[GUI_EL_SW_STRDEBUGOS].y + gui_element[GUI_EL_SW_STRDEBUGOS].heigth + 5; gui_element[GUI_EL_SW_STRERR].label = (char *)"Stream err:"; gui_element[GUI_EL_SW_STRERR].action = &gui_el_event_sw_strerr; gui_element[GUI_EL_SW_STRERR].state = GUI_EL_INVISIBLE; gui_element[GUI_EL_SW_STRSLAMUI].x = PAGE_GRID_DIST; gui_element[GUI_EL_SW_STRSLAMUI].y = gui_element[GUI_EL_SW_STRERR].y + gui_element[GUI_EL_SW_STRERR].heigth + 5; gui_element[GUI_EL_SW_STRSLAMUI].label = (char *)"SlamUI:"; gui_element[GUI_EL_SW_STRSLAMUI].action = &gui_el_event_sw_strslamui; gui_element[GUI_EL_SW_STRSLAMUI].state = GUI_EL_INVISIBLE; for(u8 i = 0; i < STAT_STACK_SIZE; i++) statusbar_addMessage((char *) " ", LCD_COLOR_WHITE); statusbar_addMessage((char *) "Jugend Forscht 2015 - System started.", LCD_COLOR_WHITE); STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_GPIO); //Calibrate Touchscreen with this Button }