Exemplo n.º 1
0
/****************************************************************************
  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
}
Exemplo n.º 2
0
/*********************************************************************
* 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);
        }
Exemplo n.º 3
0
// 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;  
                }
              }
Exemplo n.º 4
0
/*********************************************************************
* 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;
}
Exemplo n.º 5
0
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
}