示例#1
0
//--------------------------------------------------------------
// prüft und aktuallisiert die GUI
// GUI ein- oder ausblenden
// oder einen aktiven Menupunkt aendern
//--------------------------------------------------------------
MENU_Status_t menu_check_touch(void)
{
  MENU_Status_t ret_wert=MENU_NO_CHANGE;
  uint16_t x,y;
  static uint16_t x_old=999,y_old=999;
  static uint16_t gui_changed=0;

  //------------------------
  // Touch auslesen
  //------------------------
  UB_Touch_Read();
  if(Touch_Data.status==TOUCH_PRESSED) {
    // Touch ist betätigt
    x=Touch_Data.xp;
    y=Touch_Data.yp;

    if((x!=x_old) || (y!=y_old)) {
      x_old=x;
      y_old=y;
    }
    else {
      if(GUI.gui_xpos==GUI_XPOS_OFF) {
        // GUI ist im Moment noch AUS
        if(gui_changed==0) {
          // GUI einschalten (an einer von 3 positionen)
          GUI.gui_xpos=GUI_XPOS_RIGHT;
          if(y<GUI_XPOS_RIGHT) GUI.gui_xpos=GUI_XPOS_MID;
          if(y<GUI_XPOS_MID) GUI.gui_xpos=GUI_XPOS_LEFT;
          GUI.akt_menu=GUI.old_menu;
          gui_changed=1;
          ret_wert=MENU_CHANGE_GUI;
        }
      }
      else if(GUI.gui_xpos==GUI_XPOS_RIGHT) {
        // GUI-rechts ist aktiv
        if(gui_changed==0) {
          if(y<GUI_XPOS_RIGHT) {
            // GUI ausschalten
            GUI.gui_xpos=GUI_XPOS_OFF;
            GUI.old_menu=GUI.akt_menu;
            GUI.akt_menu=MM_NONE;
            gui_changed=1;
            ret_wert=MENU_CHANGE_GUI;
          }
          else {
            // GUI check
            p_get_GUI_button(x,y);
            ret_wert=p_make_GUI_changes();
          }
        }
      }
      else if(GUI.gui_xpos==GUI_XPOS_LEFT) {
        // GUI-links ist aktiv
        if(gui_changed==0) {
          if(y>GUI_XPOS_MID) {
            // GUI ausschalten
            GUI.gui_xpos=GUI_XPOS_OFF;
            GUI.old_menu=GUI.akt_menu;
            GUI.akt_menu=MM_NONE;
            gui_changed=1;
            ret_wert=MENU_CHANGE_GUI;
          }
          else {
            // GUI check
            p_get_GUI_button(x,y);
            ret_wert=p_make_GUI_changes();
          }
        }
      }
      else {
        // GUI-mitte ist aktiv
        if(gui_changed==0) {
          if((y<GUI_XPOS_MID) || (y>GUI_XPOS_RIGHT)) {
            // GUI ausschalten
            GUI.gui_xpos=GUI_XPOS_OFF;
            GUI.old_menu=GUI.akt_menu;
            GUI.akt_menu=MM_NONE;
            gui_changed=1;
            ret_wert=MENU_CHANGE_GUI;
          }
          else {
            // GUI check
            p_get_GUI_button(x,y);
            ret_wert=p_make_GUI_changes();
          }
        }
      }

      // beim senden von Daten die GUI abschalten
      if(ret_wert==MENU_SEND_DATA) {
        // GUI ausschalten
        GUI.gui_xpos=GUI_XPOS_OFF;
        GUI.old_menu=MM_SETTING;
        GUI.akt_menu=MM_NONE;
        gui_changed=1;
        if(Menu.send.mode==6) {
          // auf gewaehltes Menu umschalten
          if(Menu.send.screen==0) Menu.akt_setting=SETTING_TRIGGER;
          if(Menu.send.screen==1) Menu.akt_setting=SETTING_CURSOR;
        }
        else {
          Menu.akt_setting=SETTING_SEND;
        }
      }
    }
  }
  else {
    // Touch ist nicht betätigt
    gui_changed=0;
    if(GUI.old_button!=GUI_BTN_NONE) {
      ret_wert=MENU_CHANGE_GUI;
    }
    GUI.akt_button=GUI_BTN_NONE;
    GUI.old_button=GUI_BTN_NONE;
  }

  return(ret_wert);
}
int main(void)
{
	SystemInit();						// Configurações e inicialização do clock

	UB_LCD_Init();					// Inicialização LCD

	UB_LCD_LayerInit_Fullscreen();	// Inicialização da camadas da tela

	UB_LCD_SetLayer_1();				// Inicialização da camadas do fundo

	UB_LCD_FillLayer(RGB_COL_WHITE);	// Cor do fundo

	UB_LCD_SetLayer_2();				// Inicialização da camadas em primeiro plano

	UB_LCD_FillLayer(RGB_COL_WHITE);	// Cor do primeiro plano

	CurrentFrameBuffer=LCD_FRAME_BUFFER + LCD_FRAME_OFFSET;  // Variáveis de controle da tela
	aktColor=LCD_COLOR_BLUE;			// Variável para armazenar cor de preferência

	menu=0;							//Programa inicia no menu inicial

	if(UB_Touch_Init()!=SUCCESS)	// Verifica se a inicialização da tela sensível ao toque ocorreu corretamente
	{
		UB_Font_DrawString(10,28,"Touch error",&Arial_11x20,RGB_COL_WHITE,RGB_COL_RED);		//Imprime mensagem de erro
		UB_Font_DrawString(10,46,"Reconecte a energia",&Arial_11x20,RGB_COL_WHITE,RGB_COL_RED);
	while(1);						//Impede o progresso das demais rotinas
	}

	USB_HID_HOST_STATUS_t host_status;	// Variável para armazenar o estado da comunicação USB

	USB_Init();							// Inicializações para utilizar USB

	while(1){

	  LCD_DrawFullRect(0, 0, 240, 320, LCD_COLOR_BLACK);	// Imprime retângulo branco do tamanha da tela(apaga tudo)
	  imprimir_menu();										// Imprime grafismo do menu inicial

//--------------------------------------------------------------
	  while(menu==0)					// Enquanto menu==0 o programa fica no menu inicial
	  {

		  host_status=USB_Function();			// Esta função deve ser chamada periodicamente para o funcionamento do teclado

		  if(host_status!=USB_HID_DEV_DETACHED)	// Se o USB não tiver sido desconectado
			  menu = arrow_function();			// Chama função que controla o selecionamento do menu

		  UB_Touch_Read();						// Lê informações do touch
		  if(Touch_Data.status==TOUCH_PRESSED) {
			  if((Touch_Data.yp < 130) && (Touch_Data.yp >= 70)) {			// Verifica limites da região de um botão touch na tela
				  if((Touch_Data.xp < 215) && (Touch_Data.xp > 45)) {
					  menu=1;												// Se o toque ocorreu muda o estado do programa
				  }
			  }
		  }

		  if(Touch_Data.status==TOUCH_PRESSED) {
			  if((Touch_Data.yp < 260) && (Touch_Data.yp >= 200)) {			// Verifica limites da região de um botão touch na tela
				  if((Touch_Data.xp < 215) && (Touch_Data.xp > 45)) {
		 					  menu=2;												// Se o toque ocorreu muda o estado do programa
				  }
			  }
		  }

		  if(menu==1){							// menu==1 equivale ao modo de Digitação
			  pos.x = 10;						// Posições onde o cursor de digitação começa
			  pos.y = 10;
			  LCD_DrawFullRect(0, 0, 240, 320, LCD_COLOR_WHITE);	// Imprime retângulo branco do tamanha da tela(apaga tudo)
		  }
		  if(menu==2){							// menu==2 equivale ao modo de Opções
			  LCD_DrawFullRect(0, 0, 240, 320, LCD_COLOR_WHITE);	// Imprime retângulo branco do tamanha da tela(apaga tudo)
			  UB_Font_DrawString(10,10,"Cor do texto",&Arial_11x20,aktColor,RGB_COL_WHITE);		//Imprime mensagem
		  }
	  }

	  while(menu==1)							// menu==1 equivale ao modo de Digitação
	  {
		host_status=USB_Function();				//Esta função deve ser chamada periodicamente para o funcionamento do teclado

		UB_Touch_Read();						//Leitura do Touch
		LCD_DrawLine(pos.x,pos.y, 20, LCD_DIR_VERTICAL, RGB_COL_WHITE);
		if(Touch_Data.status==TOUCH_PRESSED) {
			if((Touch_Data.yp < 317) && (Touch_Data.yp >= 3)) {		// Verifica se touch foi na tela( para evitar erros}
				if((Touch_Data.xp < 237) && (Touch_Data.xp > 3)) {
					pos.x=Touch_Data.xp;							// Posiciona o cursor sobre o local tocado
					pos.y=Touch_Data.yp;
					LCD_DrawLine(pos.x,pos.y, 20, LCD_DIR_VERTICAL, RGB_COL_WHITE);
				}
			}

		}

		if(host_status!=USB_HID_DEV_DETACHED)		//Se o USB não tiver sido desconectado
			pos = key_function(pos);				//Interpreta todas teclas e funções do teclado, retorna posição do cursor

		if(host_status==USB_HID_DEV_CONNECTED)		//Se o USB for reconectado
			LCD_DrawFullRect(0, 302, 240, 320, LCD_COLOR_WHITE);	//Apaga mensagem pedindo para conectar

		if(host_status==USB_HID_DEV_DETACHED)		//Se o USB for desconectado
			UB_Font_DrawString(10,302,"Teclado desconectado",&Arial_11x20,RGB_COL_RED,RGB_COL_WHITE);	//Imprime mensagem
	  }
	  while(menu==2)							// menu==2 equivale ao modo de Opções
	  {
		  host_status=USB_Function();			//Esta função deve ser chamada periodicamente para o funcionamento do teclado

		  if(host_status!=USB_HID_DEV_DETACHED)	//Se o USB não tiver sido desconectado
			  menu = opcoes();

	  }
	}
}