/** * @brief Manages AUDIO Menu Process. * @param None * @retval None */ void AUDIO_MenuProcess(void) { if(AppliState == APPLICATION_READY) { switch(AudioDemo.state) { case AUDIO_DEMO_IDLE: AUDIO_SelectItem(AUDIO_main_menu, 0); if(AUDIO_ShowWavFiles() > 0) { LCD_ErrLog("There is no WAV file on the USB Key.\n"); AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); AudioDemo.state = AUDIO_DEMO_IDLE; } else { AudioDemo.state = AUDIO_DEMO_WAIT; } AudioDemo.select = 0; BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(17, (uint8_t *)"Use [Joystick Left/Right] to scroll up/down"); BSP_LCD_DisplayStringAtLine(18, (uint8_t *)"Use [Joystick Up/Down] to scroll Audio Playback and Record menu"); break; case AUDIO_DEMO_WAIT: if(AudioDemo.select != PrevSelect) { PrevSelect = AudioDemo.select; AUDIO_SelectItem(AUDIO_main_menu, AudioDemo.select & 0x7F); /* Handle select item */ if(AudioDemo.select & 0x80) { switch(AudioDemo.select & 0x7F) { case 0: AudioDemo.state = AUDIO_DEMO_EXPLORE; break; case 1: /* Display HMI messages */ BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(14 ,(uint8_t *)" "); BSP_LCD_DisplayStringAtLine(15 ,(uint8_t *)" "); BSP_LCD_DisplayStringAtLine(16 ,(uint8_t *)" "); BSP_LCD_DisplayStringAtLine(17 ,(uint8_t *)" "); BSP_LCD_DisplayStringAtLine(18 ,(uint8_t *)"Use [User Key] To Stop and return from player/recorder"); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); /* Set PLAYBACK state and start playing 1st file */ AudioState = AUDIO_STATE_IDLE; AudioDemo.state = AUDIO_DEMO_PLAYBACK; AUDIO_ChangeSelectMode(AUDIO_PLAYBACK_CONTROL); break; case 2: /* Display HMI messages */ BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(14 ,(uint8_t *)" "); BSP_LCD_DisplayStringAtLine(15 ,(uint8_t *)" "); BSP_LCD_DisplayStringAtLine(16 ,(uint8_t *)" "); BSP_LCD_DisplayStringAtLine(17 ,(uint8_t *)" "); BSP_LCD_DisplayStringAtLine(18 ,(uint8_t *)"Use [User Key] To Stop and return from player/recorder"); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); /* Set PLAYBACK state and start playing 1st file */ AudioState = AUDIO_STATE_IDLE; AudioDemo.state = AUDIO_DEMO_IN; AUDIO_ChangeSelectMode(AUDIO_PLAYBACK_CONTROL); break; default: break; } } } break; case AUDIO_DEMO_EXPLORE: if(AppliState == APPLICATION_READY) { if(AUDIO_ShowWavFiles() > 0) { LCD_ErrLog("There is no WAV file on the USB Key.\n"); AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); AudioDemo.state = AUDIO_DEMO_IDLE; } else { AudioDemo.state = AUDIO_DEMO_WAIT; } } else { AudioDemo.state = AUDIO_DEMO_WAIT; } break; case AUDIO_DEMO_PLAYBACK: if(AppliState == APPLICATION_READY) { if(AudioState == AUDIO_STATE_IDLE) { /* Start Playing */ AudioState = AUDIO_STATE_INIT; if(AUDIO_Start(0) == AUDIO_ERROR_IO) { AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); AudioDemo.state = AUDIO_DEMO_IDLE; } else { BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); BSP_LCD_DisplayStringAtLine(10, (uint8_t *)"[ UP ] : Volume +"); BSP_LCD_DisplayStringAtLine(11, (uint8_t *)"[ DOWN ] : Volume -"); BSP_LCD_DisplayStringAtLine(12, (uint8_t *)"[ LEFT ] : Previous"); BSP_LCD_DisplayStringAtLine(13, (uint8_t *)"[ RIGHT ] : Next"); BSP_LCD_DisplayStringAtLine(14, (uint8_t *)"[ SEL ] : Pause/Resume"); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); } } else /* Not idle */ { if(AUDIO_Process() == AUDIO_ERROR_IO) { AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); AudioDemo.state = AUDIO_DEMO_IDLE; } } } else { AudioDemo.state = AUDIO_DEMO_WAIT; } break; case AUDIO_DEMO_IN: if(AppliState == APPLICATION_READY) { if(AudioState == AUDIO_STATE_IDLE) { /* Start Playing */ AudioState = AUDIO_STATE_INIT; /* Configure the audio recorder: sampling frequency, bits-depth, number of channels */ if(AUDIO_REC_Start() == AUDIO_ERROR_IO) { AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); AudioDemo.state = AUDIO_DEMO_IDLE; } else { BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); BSP_LCD_DisplayStringAtLine(11, (uint8_t *)"[ UP ] : Volume +"); BSP_LCD_DisplayStringAtLine(12, (uint8_t *)"[ DOWN ] : Volume -"); BSP_LCD_DisplayStringAtLine(13, (uint8_t *)"[ SEL ] : Pause/Resume"); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); } } else /* Not idle */ { if(AUDIO_REC_Process() == AUDIO_ERROR_IO) { AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); AudioDemo.state = AUDIO_DEMO_IDLE; } } } else { AudioDemo.state = AUDIO_DEMO_WAIT; } break; default: break; } } if(AppliState == APPLICATION_DISCONNECT) { AppliState = APPLICATION_IDLE; AUDIO_ChangeSelectMode(AUDIO_SELECT_MENU); BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); } AudioDemo.select &= 0x7F; }
/** * @brief Manages HID Menu Process. * @param None * @retval None */ void HID_MenuProcess(void) { switch(hid_demo.state) { case HID_DEMO_START: if(Appli_state == APPLICATION_READY) { if(USBH_HID_GetDeviceType(&hUSBHost) == HID_KEYBOARD) { hid_demo.keyboard_state = HID_KEYBOARD_IDLE; hid_demo.state = HID_DEMO_KEYBOARD; BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to start"); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_WAKEUP) != SET) && (Appli_state != APPLICATION_DISCONNECT)) { } BSP_LCD_ClearStringLine(19); HID_KeyboardMenuProcess(); } else if(USBH_HID_GetDeviceType(&hUSBHost) == HID_MOUSE) { hid_demo.mouse_state = HID_MOUSE_IDLE; hid_demo.state = HID_DEMO_MOUSE; BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to start"); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_WAKEUP) != SET) && (Appli_state != APPLICATION_DISCONNECT)) { } BSP_LCD_ClearStringLine(19); HID_MouseMenuProcess(); } else { LCD_ErrLog("No supported HID device!\n"); hid_demo.state = HID_DEMO_START; } } break; case HID_DEMO_MOUSE: if(Appli_state == APPLICATION_READY) { USBH_MouseDemo(&hUSBHost); } break; case HID_DEMO_KEYBOARD: if(Appli_state == APPLICATION_READY) { USBH_KeybdDemo(&hUSBHost); } break; default: break; } if(Appli_state == APPLICATION_DISCONNECT) { Appli_state = APPLICATION_IDLE; LCD_LOG_ClearTextZone(); LCD_ErrLog("HID device disconnected!\n"); hid_demo.state = HID_DEMO_START; hid_demo.select = 0; } }
/** * @brief Manages MSC Menu Process. * @param None * @retval None */ void MSC_MenuProcess(void) { switch(demo.msc_state) { case APPLI_MSC_START: if(Appli_HS_state == APPLICATION_HS_READY) { BSP_LCD_ClearStringLine(19); BSP_LCD_ClearStringLine(20); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to start read and write operations"); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_TAMPER) != SET) && (Appli_HS_state != APPLICATION_HS_DISCONNECT)) { } demo.msc_state = APPLI_MSC_FILE_OPERATIONS; /* Prevent debounce effect for user key */ HAL_Delay(400); BSP_LCD_ClearStringLine(19); } break; case APPLI_MSC_FILE_OPERATIONS: /* Read and Write File Here */ if(Appli_HS_state == APPLICATION_HS_READY) { MSC_File_Operations(); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to display disk content"); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_TAMPER) != SET) && (Appli_HS_state != APPLICATION_HS_DISCONNECT)) { } demo.msc_state = APPLI_MSC_EXPLORER; /* Prevent debounce effect for user key */ HAL_Delay(400); BSP_LCD_ClearStringLine(19); } break; case APPLI_MSC_EXPLORER: /* Display disk content */ if(Appli_HS_state == APPLICATION_HS_READY) { Explore_Disk("0:/", 1); demo.msc_state = APPLI_MSC_START; demo.state = DEMO_IDLE; BSP_LCD_ClearStringLine(19); BSP_LCD_ClearStringLine(20); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(20, (uint8_t *)"Press User button to exit"); /* Prevent debounce effect for user key */ HAL_Delay(400); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_TAMPER) != SET) && (Appli_HS_state != APPLICATION_HS_DISCONNECT)) { } /* Prevent debounce effect for user key */ HAL_Delay(400); } break; default: break; } }
/** * @brief Manages MTP Menu Process. * @param None * @retval None */ void MTP_MenuProcess(void) { switch(mtp_demo.state) { case MTP_DEMO_IDLE: MTP_SelectItem(MTP_main_menu, 0); mtp_demo.state = MTP_DEMO_WAIT; mtp_demo.select = 0; BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(15, (uint8_t *)"Use [Joystick Left/Right] to scroll up/down"); BSP_LCD_DisplayStringAtLine(16, (uint8_t *)"Use [Joystick Up/Down] to scroll MTP menu"); break; case MTP_DEMO_WAIT: if(mtp_demo.select != prev_select) { prev_select = mtp_demo.select; MTP_SelectItem(MTP_main_menu, mtp_demo.select & 0x7F); /* Handle select item */ if(mtp_demo.select & 0x80) { switch(mtp_demo.select & 0x7F) { case 0: mtp_demo.state = MTP_DEMO_EXPLORE; break; case 1: /* Display HMI messages */ BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(14, (uint8_t *)" "); BSP_LCD_DisplayStringAtLine(15, (uint8_t *)" "); BSP_LCD_DisplayStringAtLine(16, (uint8_t *)"Use [User Key] To Stop and return from player"); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); /* Set PLAYBACK state and start playing 1st file */ audio_state = AUDIO_STATE_IDLE; mtp_demo.state = MTP_DEMO_PLAYBACK; MTP_ChangeSelectMode(MTP_PLAYBACK_CONTROL); break; case 2: mtp_demo.state = MTP_REENUMERATE; break; default: break; } } } break; case MTP_DEMO_EXPLORE: if(Appli_state == APPLICATION_READY) { if(MTP_Init() == 0) { if(MTP_ExploreWavFile() > 0) { LCD_ErrLog("There is no WAV file on the microSD.\n" ); MTP_ChangeSelectMode(MTP_SELECT_MENU); mtp_demo.state = MTP_DEMO_IDLE; } else { mtp_demo.state = MTP_DEMO_WAIT; } } } else { mtp_demo.state = MTP_DEMO_WAIT; } break; case MTP_DEMO_PLAYBACK: if(Appli_state == APPLICATION_READY) { if(MTP_Init() == 0) { if(audio_state == AUDIO_STATE_IDLE) { /* Start Playing */ audio_state = AUDIO_STATE_INIT; if(AUDIO_Start(0) == AUDIO_ERROR_IO) { MTP_ChangeSelectMode(MTP_SELECT_MENU); mtp_demo.state = MTP_DEMO_IDLE; } else { BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); BSP_LCD_DisplayStringAtLine(10, (uint8_t *)"[ UP ] : Volume +"); BSP_LCD_DisplayStringAtLine(11, (uint8_t *)"[ DOWN ] : Volume -"); BSP_LCD_DisplayStringAtLine(12, (uint8_t *)"[ LEFT ] : Previous"); BSP_LCD_DisplayStringAtLine(13, (uint8_t *)"[ RIGHT ] : Next"); BSP_LCD_DisplayStringAtLine(14, (uint8_t *)"[ SEL ] : Pause/Resume"); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); } } else /* Not idle */ { if(AUDIO_Process() == AUDIO_ERROR_IO) { MTP_ChangeSelectMode(MTP_SELECT_MENU); mtp_demo.state = MTP_DEMO_IDLE; } } } } else { mtp_demo.state = MTP_DEMO_WAIT; } break; case MTP_REENUMERATE: /* Force MTP Device to re-enumerate */ USBH_ReEnumerate(&hUSBHost); mtp_demo.state = MTP_DEMO_WAIT; break; default: break; } if(Appli_state == APPLICATION_DISCONNECT) { Appli_state = APPLICATION_IDLE; BSP_AUDIO_OUT_Stop(CODEC_PDWN_SW); MTP_ChangeSelectMode(MTP_SELECT_MENU); } mtp_demo.select &= 0x7F; }
/** * @brief This function notify user about link status changement. * @param netif: the network interface * @retval None */ void ethernetif_notify_conn_changed(struct netif *netif) { struct ip_addr ipaddr; struct ip_addr netmask; struct ip_addr gw; if(netif_is_link_up(netif)) { #ifdef USE_DHCP #ifndef USE_LCD BSP_LED_Off(LED2); BSP_LED_On(LED1); #endif /* USE_LCD */ /* Update DHCP state machine */ DHCP_state = DHCP_START; #else IP4_ADDR(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3); IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1 , NETMASK_ADDR2, NETMASK_ADDR3); IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); #ifdef USE_LCD uint8_t iptxt[20]; sprintf((char*)iptxt, " %d.%d.%d.%d", IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3); BSP_LCD_ClearStringLine(7); BSP_LCD_ClearStringLine(8); BSP_LCD_ClearStringLine(9); BSP_LCD_DisplayStringAtLine(8,(uint8_t *) " Static IP address:"); BSP_LCD_DisplayStringAtLine(9,(uint8_t *) iptxt); #else BSP_LED_Off(LED2); BSP_LED_On(LED1); #endif /* USE_LCD */ #endif /* USE_DHCP */ netif_set_addr(netif, &ipaddr , &netmask, &gw); /* When the netif is fully configured this function must be called.*/ netif_set_up(netif); } else { #ifdef USE_DHCP /* Update DHCP state machine */ DHCP_state = DHCP_LINK_DOWN; #endif /* USE_DHCP */ /* When the netif link is down this function must be called.*/ netif_set_down(netif); #ifdef USE_LCD BSP_LCD_ClearStringLine(7); BSP_LCD_ClearStringLine(8); BSP_LCD_ClearStringLine(9); BSP_LCD_DisplayStringAtLine(8,(uint8_t *) " The network cable"); BSP_LCD_DisplayStringAtLine(9,(uint8_t *) " is not connected"); #else BSP_LED_Off(LED1); BSP_LED_On(LED2); #endif /* USE_LCD */ } }
/** * @brief Main program * @param None * @retval None */ int main(void) { /* STM32F4xx HAL library initialization: - Configure the Flash prefetch, instruction and Data caches - Configure the Systick to generate an interrupt each 1 msec - Set NVIC Group Priority to 4 - Global MSP (MCU Support Package) initialization */ HAL_Init(); /* Configure the system clock to 168 MHz */ SystemClock_Config(); /* Configure TAMPER/KEY button */ BSP_PB_Init(BUTTON_TAMPER, BUTTON_MODE_GPIO); /*##-1- Initialize the LCD #################################################*/ /* Initialize the LCD */ BSP_LCD_Init(); /* Set LCD font */ BSP_LCD_SetFont(&Font20); /*##-2- Display messages on LCD ############################################*/ /* Clear the LCD */ BSP_LCD_Clear(LCD_COLOR_WHITE); /* Set the LCD Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_BLUE); /* Display test name on LCD */ BSP_LCD_DisplayStringAtLine(0,(uint8_t*)" Flash Write "); BSP_LCD_DisplayStringAtLine(1,(uint8_t*)" protection test "); BSP_LCD_DisplayStringAtLine(2,(uint8_t*)" Press User "); BSP_LCD_DisplayStringAtLine(3,(uint8_t*)" Tamper-button "); /* Infinite loop */ while (1) { /* Wait for TAMPER button to be pushed */ while(BSP_PB_GetState(BUTTON_TAMPER) != RESET) { } /* Get FLASH_WRP_SECTORS write protection status */ HAL_FLASHEx_OBGetConfig(&OBInit); SectorsWRPStatus = OBInit.WRPSector & FLASH_WRP_SECTORS; if (SectorsWRPStatus == 0) { /* If FLASH_WRP_SECTORS are write protected, disable the write protection */ /* Allow Access to option bytes sector */ HAL_FLASH_OB_Unlock(); /* Allow Access to Flash control registers and user Flash */ HAL_FLASH_Unlock(); /* Disable FLASH_WRP_SECTORS write protection */ OBInit.OptionType = OPTIONBYTE_WRP; OBInit.WRPState = OB_WRPSTATE_DISABLE; OBInit.Banks = FLASH_BANK_1; OBInit.WRPSector = FLASH_WRP_SECTORS; HAL_FLASHEx_OBProgram(&OBInit); /* Start the Option Bytes programming process */ if (HAL_FLASH_OB_Launch() != HAL_OK) { /* User can add here some code to deal with this error */ while (1) { } } /* Prevent Access to option bytes sector */ HAL_FLASH_OB_Lock(); /* Disable the Flash option control register access (recommended to protect the option Bytes against possible unwanted operations) */ HAL_FLASH_Lock(); /* Get FLASH_WRP_SECTORS write protection status */ HAL_FLASHEx_OBGetConfig(&OBInit); SectorsWRPStatus = OBInit.WRPSector & FLASH_WRP_SECTORS; /* Check if FLASH_WRP_SECTORS write protection is disabled */ if (SectorsWRPStatus == FLASH_WRP_SECTORS) { /* Set the LCD Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(5,(uint8_t*)" Write "); BSP_LCD_DisplayStringAtLine(6,(uint8_t*)" protection is "); BSP_LCD_DisplayStringAtLine(7,(uint8_t*)" disabled "); } else { /* Set the LCD Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(5,(uint8_t*)" Write "); BSP_LCD_DisplayStringAtLine(6,(uint8_t*)" protection is "); BSP_LCD_DisplayStringAtLine(7,(uint8_t*)" not disabled "); } } else { /* If FLASH_WRP_SECTORS are not write protected, enable the write protection */ /* Allow Access to option bytes sector */ HAL_FLASH_OB_Unlock(); /* Allow Access to Flash control registers and user Flash */ HAL_FLASH_Unlock(); /* Enable FLASH_WRP_SECTORS write protection */ OBInit.OptionType = OPTIONBYTE_WRP; OBInit.WRPState = OB_WRPSTATE_ENABLE; OBInit.Banks = FLASH_BANK_1; OBInit.WRPSector = FLASH_WRP_SECTORS; HAL_FLASHEx_OBProgram(&OBInit); /* Start the Option Bytes programming process */ if (HAL_FLASH_OB_Launch() != HAL_OK) { /* User can add here some code to deal with this error */ while (1) { } } /* Prevent Access to option bytes sector */ HAL_FLASH_OB_Lock(); /* Disable the Flash option control register access (recommended to protect the option Bytes against possible unwanted operations) */ HAL_FLASH_Lock(); /* Get FLASH_WRP_SECTORS write protection status */ HAL_FLASHEx_OBGetConfig(&OBInit); SectorsWRPStatus = OBInit.WRPSector & FLASH_WRP_SECTORS; /* Check if FLASH_WRP_SECTORS are write protected */ if (SectorsWRPStatus == 0) { /* Set the LCD Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(5,(uint8_t*)" Write "); BSP_LCD_DisplayStringAtLine(6,(uint8_t*)" protection is "); BSP_LCD_DisplayStringAtLine(7,(uint8_t*)" enabled "); } else { /* Set the LCD Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(5,(uint8_t*)" Write "); BSP_LCD_DisplayStringAtLine(6,(uint8_t*)" protection is "); BSP_LCD_DisplayStringAtLine(7,(uint8_t*)" enabled "); } } } }
/** * @brief Displays demonstration menu. * @param None * @retval None */ static void TFT_DisplayMenu(void) { JOYState_TypeDef tmp; /* Set Menu font */ BSP_LCD_SetFont(&Font12); /* Set Text color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); /* Display message */ BSP_LCD_DisplayStringAtLine(1, (uint8_t*)" NUCLEO-STM32F1xx "); BSP_LCD_DisplayStringAtLine(2, (uint8_t*)" DEMO "); /* Set Text color */ BSP_LCD_SetTextColor(LCD_COLOR_BLUE); /* Display message */ BSP_LCD_DisplayStringAtLine(4, (uint8_t*)" Display images "); BSP_LCD_DisplayStringAtLine(6, (uint8_t*)" stored under uSD "); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" on TFT LCD "); /* Set Text color */ BSP_LCD_SetTextColor(LCD_COLOR_BLACK); /* Display message */ BSP_LCD_DisplayStringAtLine(11, (uint8_t*)" Press JOY DOWN "); BSP_LCD_DisplayStringAtLine(12, (uint8_t*)" to continue... "); /* Wait for JOY_DOWN is pressed */ while (BSP_JOY_GetState() != JOY_DOWN) { } /* Wait for JOY_DOWN is released */ while (BSP_JOY_GetState() == JOY_DOWN) { } /* Set Text color */ BSP_LCD_SetTextColor(LCD_COLOR_BLACK); /* Display message */ BSP_LCD_DisplayStringAtLine(4, (uint8_t*)" "); BSP_LCD_DisplayStringAtLine(6, (uint8_t*)" Press Joystick "); /* Set Text color */ BSP_LCD_SetTextColor(LCD_COLOR_BLUE); /* Display message */ BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" UP for: "); BSP_LCD_DisplayStringAtLine(9, (uint8_t*)" Manual Mode "); BSP_LCD_DisplayStringAtLine(11, (uint8_t*)" DOWN for: "); BSP_LCD_DisplayStringAtLine(12, (uint8_t*)" Automatic Mode "); /* Wait for JOY_DOWN or JOY_UP is pressed */ tmp = JOY_RIGHT; while ((tmp != JOY_DOWN) && (tmp != JOY_UP)) { tmp = BSP_JOY_GetState(); } /* LCD Clear */ BSP_LCD_Clear(LCD_COLOR_WHITE); /* JOY_UP is pressed: Display Manual mode menu #############################*/ if(tmp == JOY_UP) { /* Set Text color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); /* Display message */ BSP_LCD_DisplayStringAtLine(3, (uint8_t*)" Manual Mode "); BSP_LCD_DisplayStringAtLine(5, (uint8_t*)" Selected "); /* Set Text color */ BSP_LCD_SetTextColor(LCD_COLOR_BLUE); /* Display message */ BSP_LCD_DisplayStringAtLine(9, (uint8_t*)" RIGHT: Next image"); BSP_LCD_DisplayStringAtLine(10, (uint8_t*)" LEFT : Previous "); BSP_LCD_DisplayStringAtLine(11, (uint8_t*)" SEL : Switch to "); BSP_LCD_DisplayStringAtLine(12, (uint8_t*)" automatic mode "); JoystickValue = 2; } /* JOY_DOWN is pressed: Display Automatic mode menu ########################*/ else if (tmp == JOY_DOWN) { /* Set Text color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); /* Display message */ BSP_LCD_DisplayStringAtLine(3, (uint8_t*)" Automatic Mode "); BSP_LCD_DisplayStringAtLine(5, (uint8_t*)" Selected "); JoystickValue = 1; HAL_Delay(200); } }
/** * @brief Manages the setting menu on the screen. * @param item: Selected item to be highlighted * @retval None */ void CDC_SelectSettingsItem(uint8_t item) { uint8_t str_temp[40]; BSP_LCD_SetTextColor(LCD_COLOR_WHITE); switch (item) { case 0: { BSP_LCD_SetBackColor(LCD_COLOR_MAGENTA); BSP_LCD_DisplayStringAtLine(9, (uint8_t *)MSG_BITS_PER_SECOND); if(LineCoding.b.dwDTERate <= 9600) sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); else if(LineCoding.b.dwDTERate <= 57600) sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); else sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); BSP_LCD_DisplayStringAtLine(9, str_temp); /* Display the data bits */ BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAtLine(10, (uint8_t *)MSG_DATA_BITS); sprintf((char *)str_temp, " %d", LineCoding.b.bDataBits); BSP_LCD_DisplayStringAtLine(10, str_temp); /* Display the parity bits */ BSP_LCD_DisplayStringAtLine(11, (uint8_t *)MSG_PARITY); if(LineCoding.b.bParityType == 2) sprintf((char *)str_temp, " %s", ParityArray[LineCoding.b.bParityType]); else sprintf((char *)str_temp, " %s", ParityArray[LineCoding.b.bParityType]); BSP_LCD_DisplayStringAtLine(11, str_temp); /* Display the Stop bits */ BSP_LCD_DisplayStringAtLine(12, (uint8_t *)MSG_STOP_BITS); sprintf((char *)str_temp, " %s", StopBitsArray[LineCoding.b.bCharFormat]); BSP_LCD_DisplayStringAtLine(12, str_temp); } break; case 1: { BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAtLine(9, (uint8_t *)MSG_BITS_PER_SECOND); if(LineCoding.b.dwDTERate <= 9600) sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); else if(LineCoding.b.dwDTERate <= 57600) sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); else sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); BSP_LCD_DisplayStringAtLine(9, str_temp); BSP_LCD_DisplayStringAtLine(9, str_temp); /*Display the data bits*/ BSP_LCD_SetBackColor(LCD_COLOR_MAGENTA); BSP_LCD_DisplayStringAtLine(10, (uint8_t *)MSG_DATA_BITS); sprintf((char *)str_temp, " %d", LineCoding.b.bDataBits); BSP_LCD_DisplayStringAtLine(10, str_temp); /* Display the parity bits */ BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAtLine(11, (uint8_t *)MSG_PARITY); if(LineCoding.b.bParityType == 2) sprintf((char *)str_temp, " %s", ParityArray[LineCoding.b.bParityType]); else sprintf((char *)str_temp, " %s", ParityArray[LineCoding.b.bParityType]); BSP_LCD_DisplayStringAtLine(11, str_temp); /* Display the Stop bits */ BSP_LCD_DisplayStringAtLine(12, (uint8_t *)MSG_STOP_BITS); sprintf((char *)str_temp, " %s", StopBitsArray[LineCoding.b.bCharFormat]); BSP_LCD_DisplayStringAtLine(12, str_temp); } break; case 2: { BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAtLine(9, (uint8_t *)MSG_BITS_PER_SECOND); if(LineCoding.b.dwDTERate <= 9600) sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); else if(LineCoding.b.dwDTERate <= 57600) sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); else sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); BSP_LCD_DisplayStringAtLine(9, str_temp); /* Display the data bits */ BSP_LCD_DisplayStringAtLine(10, (uint8_t *)MSG_DATA_BITS); sprintf((char *)str_temp, " %d", LineCoding.b.bDataBits); BSP_LCD_DisplayStringAtLine(10, str_temp); /* Display the parity bits */ BSP_LCD_SetBackColor(LCD_COLOR_MAGENTA); BSP_LCD_DisplayStringAtLine(11, (uint8_t *)MSG_PARITY); if(LineCoding.b.bParityType == 2) sprintf((char *)str_temp, " %s", ParityArray[LineCoding.b.bParityType]); else sprintf((char *)str_temp, " %s", ParityArray[LineCoding.b.bParityType]); BSP_LCD_DisplayStringAtLine(11, str_temp); /* Display the Stop bits */ BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAtLine(12, (uint8_t *)MSG_STOP_BITS); sprintf((char *)str_temp, " %s", StopBitsArray[LineCoding.b.bCharFormat]); BSP_LCD_DisplayStringAtLine(12, str_temp); } break; case 3: { BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAtLine(9, (uint8_t *)MSG_BITS_PER_SECOND); if(LineCoding.b.dwDTERate <= 9600) sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); else if(LineCoding.b.dwDTERate <= 57600) sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); else sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); BSP_LCD_DisplayStringAtLine(9, str_temp); BSP_LCD_DisplayStringAtLine(9, str_temp); /* Display the data bits */ BSP_LCD_DisplayStringAtLine(10, (uint8_t *)MSG_DATA_BITS); sprintf((char *)str_temp, " %d", LineCoding.b.bDataBits); BSP_LCD_DisplayStringAtLine(10, str_temp); /* Display the parity bits */ BSP_LCD_DisplayStringAtLine(11, (uint8_t *)MSG_PARITY); if(LineCoding.b.bParityType == 2) sprintf((char *)str_temp, " %s", ParityArray[LineCoding.b.bParityType]); else sprintf((char *)str_temp, " %s", ParityArray[LineCoding.b.bParityType]); BSP_LCD_DisplayStringAtLine(11, str_temp); /* Display the Stop bits */ BSP_LCD_SetBackColor(LCD_COLOR_MAGENTA); BSP_LCD_DisplayStringAtLine(12, (uint8_t *)MSG_STOP_BITS); sprintf((char *)str_temp, " %s", StopBitsArray[LineCoding.b.bCharFormat]); BSP_LCD_DisplayStringAtLine(12, str_temp); } break; default: BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAtLine(9, (uint8_t *)MSG_BITS_PER_SECOND); if(LineCoding.b.dwDTERate <= 9600) sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); else if(LineCoding.b.dwDTERate <= 57600) sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); else sprintf((char *)str_temp, " %lu", LineCoding.b.dwDTERate); BSP_LCD_DisplayStringAtLine(9, str_temp); BSP_LCD_DisplayStringAtLine(9, str_temp); /* Display the data bits */ BSP_LCD_DisplayStringAtLine(10, (uint8_t *)MSG_DATA_BITS); sprintf((char *)str_temp, " %d", LineCoding.b.bDataBits); BSP_LCD_DisplayStringAtLine(10, str_temp); /* Display the parity bits */ BSP_LCD_DisplayStringAtLine(11, (uint8_t *)MSG_PARITY); if(LineCoding.b.bParityType == 2) sprintf((char *)str_temp, " %s", ParityArray[LineCoding.b.bParityType]); else sprintf((char *)str_temp, " %s", ParityArray[LineCoding.b.bParityType]); BSP_LCD_DisplayStringAtLine(11, str_temp); /* Display the Stop bits */ BSP_LCD_DisplayStringAtLine(12, (uint8_t *)MSG_STOP_BITS); sprintf((char *)str_temp, " %s", StopBitsArray[LineCoding.b.bCharFormat]); BSP_LCD_DisplayStringAtLine(12, str_temp); break; } }
/** * @brief Main program * @param None * @retval None */ int main(void) { uint32_t counter = 0, transparency = 0; uint8_t str[30]; uwInternalBuffer = (uint8_t *)INTERNAL_BUFFER_START_ADDRESS; /* STM32F4xx HAL library initialization: - Configure the Flash prefetch, instruction and Data caches - Configure the Systick to generate an interrupt each 1 msec - Set NVIC Group Priority to 4 - Global MSP (MCU Support Package) initialization */ HAL_Init(); /* Configure the system clock to 200 MHz */ SystemClock_Config(); /* Configure LED3 */ BSP_LED_Init(LED3); /*##-1- Configure LCD ######################################################*/ LCD_Config(); /*##-2- Link the SD Card disk I/O driver ###################################*/ if(FATFS_LinkDriver(&SD_Driver, SD_Path) == 0) { /*##-3- Initialize the Directory Files pointers (heap) ###################*/ for (counter = 0; counter < MAX_BMP_FILES; counter++) { pDirectoryFiles[counter] = malloc(MAX_BMP_FILE_NAME); if(pDirectoryFiles[counter] == NULL) { /* Set the Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" Cannot allocate memory "); while(1) { ; } } } /* Get the BMP file names on root directory */ ubNumberOfFiles = Storage_GetDirectoryBitmapFiles("/Media", pDirectoryFiles); if (ubNumberOfFiles == 0) { for (counter = 0; counter < MAX_BMP_FILES; counter++) { free(pDirectoryFiles[counter]); } BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" No Bitmap files... "); while(1) { ; } } } else { /* FatFs Initialization Error */ Error_Handler(); } /* Main infinite loop */ while(1) { counter = 0; while ((counter) < ubNumberOfFiles) { /* Step1 : Display on Foreground layer -------------------------------*/ /* Format the string */ sprintf ((char*)str, "Media/%-11.11s", pDirectoryFiles[counter]); if (Storage_CheckBitmapFile((const char*)str, &uwBmplen) == 0) { /* Format the string */ sprintf ((char*)str, "Media/%-11.11s", pDirectoryFiles[counter]); /* Set LCD foreground Layer */ BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER_FOREGROUND); /* Open a file and copy its content to an internal buffer */ Storage_OpenReadFile(uwInternalBuffer, (const char*)str); /* Write bmp file on LCD frame buffer */ BSP_LCD_DrawBitmap(0, 0, uwInternalBuffer); /* Configure the transparency for background layer : Increase the transparency */ for (transparency = 0; transparency < 255; (transparency++)) { BSP_LCD_SetTransparency(LTDC_ACTIVE_LAYER_FOREGROUND, transparency); /* Insert a delay of display */ HAL_Delay(10); } /* Configure the transparency for foreground layer : decrease the transparency */ for (transparency = 255; transparency > 0; transparency--) { BSP_LCD_SetTransparency(LTDC_ACTIVE_LAYER_FOREGROUND, transparency); /* Insert a delay of display */ HAL_Delay(10); } HAL_Delay(1000); /* Clear the Foreground Layer */ BSP_LCD_Clear(LCD_COLOR_BLACK); /* Jump to the next image */ counter++; /* Step2 : Display on Background layer -----------------------------*/ /* Format the string */ sprintf ((char*)str, "Media/%-11.11s", pDirectoryFiles[counter]); if ((Storage_CheckBitmapFile((const char*)str, &uwBmplen) == 0) || (counter < (ubNumberOfFiles))) { /* Connect the Output Buffer to LCD Background Layer */ BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER_BACKGROUND); /* Format the string */ sprintf ((char*)str, "Media/%-11.11s", pDirectoryFiles[counter]); /* Open a file and copy its content to an internal buffer */ Storage_OpenReadFile(uwInternalBuffer, (const char*)str); /* Write bmp file on LCD frame buffer */ BSP_LCD_DrawBitmap(0, 0, uwInternalBuffer); /* Configure the transparency for background layer : decrease the transparency */ for (transparency = 0; transparency < 255; (transparency++)) { BSP_LCD_SetTransparency(LTDC_ACTIVE_LAYER_BACKGROUND, transparency); /* Insert a delay of display */ HAL_Delay(10); } HAL_Delay(1000); /* Step3 : -------------------------------------------------------*/ /* Configure the transparency for background layer : Increase the transparency */ for (transparency = 255; transparency > 0; transparency--) { BSP_LCD_SetTransparency(LTDC_ACTIVE_LAYER_BACKGROUND, transparency); /* Insert a delay of display */ HAL_Delay(10); } HAL_Delay(1000); /* Clear the Background Layer */ BSP_LCD_Clear(LCD_COLOR_BLACK); counter++; } else if (Storage_CheckBitmapFile((const char*)str, &uwBmplen) == 0) { /* Set the Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(7, (uint8_t *) str); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" File type not supported. "); while(1) { ; } } } } } }
/** * @brief Main program * @param None * @retval None */ int main(void) { uwInternelBuffer = (uint8_t *)0xC0260000; uint32_t counter = 0; uint8_t str[30]; /* STM32F4xx HAL library initialization: - Configure the Flash prefetch, instruction and Data caches - Configure the Systick to generate an interrupt each 1 msec - Set NVIC Group Priority to 4 - Global MSP (MCU Support Package) initialization */ HAL_Init(); /* Configure the system clock to 175 MHz */ SystemClock_Config(); /* Configure LED3 */ BSP_LED_Init(LED3); /*##-1- Configure LCD ######################################################*/ LCD_Config(); /*##-2- Link the SD Card disk I/O driver ###################################*/ if(FATFS_LinkDriver(&SD_Driver, SD_Path) != 0) { Error_Handler(); } else { /*##-3- Initialize the Directory Files pointers (heap) ###################*/ for (counter = 0; counter < MAX_BMP_FILES; counter++) { pDirectoryFiles[counter] = malloc(MAX_BMP_FILE_NAME); if(pDirectoryFiles[counter] == NULL) { /* Set the Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" Cannot allocate memory "); while(1) { } } } /*##-4- Display Background picture #######################################*/ /* Select Background Layer */ BSP_LCD_SelectLayer(0); /* Register the file system object to the FatFs module */ if(f_mount(&SD_FatFs, (TCHAR const*)SD_Path, 0) != FR_OK) { /* FatFs Initialization Error */ /* Set the Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" FatFs Initialization Error "); } else { /* Open directory */ if (f_opendir(&directory, (TCHAR const*)"/BACK") != FR_OK) { /* Set the Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" Open directory.. fails"); while(1) { } } } if (Storage_CheckBitmapFile("BACK/image.bmp", &uwBmplen) == 0) { /* Format the string */ Storage_OpenReadFile(uwInternelBuffer, "BACK/image.bmp"); /* Write bmp file on LCD frame buffer */ BSP_LCD_DrawBitmap(0, 0, uwInternelBuffer); } else { /* Set the Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" File type not supported. "); while(1) { } } /*##-5- Display Foreground picture #######################################*/ /* Select Foreground Layer */ BSP_LCD_SelectLayer(1); /* Decrease the foreground transprency */ BSP_LCD_SetTransparency(1, 200); /* Get the BMP file names on root directory */ ubNumberOfFiles = Storage_GetDirectoryBitmapFiles("/TOP", pDirectoryFiles); if (ubNumberOfFiles == 0) { for (counter = 0; counter < MAX_BMP_FILES; counter++) { free(pDirectoryFiles[counter]); } /* Set the Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" No Bitmap files... "); while(1) { } } } /* Infinite loop */ while(1) { counter = 0; while (counter < ubNumberOfFiles) { /* Format the string */ sprintf ((char*)str, "TOP/%-11.11s", pDirectoryFiles[counter]); if (Storage_CheckBitmapFile((const char*)str, &uwBmplen) == 0) { /* Format the string */ sprintf ((char*)str, "TOP/%-11.11s", pDirectoryFiles[counter]); /* Open a file and copy its content to a buffer */ Storage_OpenReadFile(uwInternelBuffer, (const char*)str); HAL_Delay(100); /* Write bmp file on LCD frame buffer */ BSP_LCD_DrawBitmap(0, 0, uwInternelBuffer); /* Jump to next image */ counter++; } else { /* Set the Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(7, (uint8_t *) str); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" File type not supported. "); while(1) { } } } } }
/** * @brief Main program * @param None * @retval None */ int main(void) { /* STM32F4xx HAL library initialization: - Configure the Flash prefetch, instruction and Data caches - Configure the Systick to generate an interrupt each 1 msec - Set NVIC Group Priority to 4 - Global MSP (MCU Support Package) initialization */ HAL_Init(); /* Configure the system clock to 168 MHz */ SystemClock_Config(); /* Configure LEDs, Push buttons and LCD available on EVAL board ************/ BSP_LED_Init(LED1); BSP_LED_Init(LED2); BSP_LED_Init(LED3); BSP_LED_Init(LED4); /* Configure push Buttons */ /* Key button used for Pause/Resume */ BSP_PB_Init(BUTTON_KEY, BUTTON_MODE_GPIO); /* Wakeup button used for Volume High */ BSP_PB_Init(BUTTON_WAKEUP, BUTTON_MODE_GPIO); /* Tamper button used for Volume Low */ BSP_PB_Init(BUTTON_TAMPER, BUTTON_MODE_GPIO); /* Initialize the LCD */ BSP_LCD_Init(); /* Display message on EVAL LCD **********************************************/ /* Clear the LCD */ BSP_LCD_Clear(LCD_COLOR_BLUE); /* Set the LCD Back Color */ BSP_LCD_SetBackColor(LCD_COLOR_BLUE); /* Set the LCD Text Color */ BSP_LCD_SetTextColor(LCD_COLOR_WHITE); BSP_LCD_DisplayStringAtLine(0, (uint8_t *)MESSAGE1); BSP_LCD_DisplayStringAtLine(1, (uint8_t *)MESSAGE2); BSP_LCD_DisplayStringAtLine(2, (uint8_t *)MESSAGE3); /* Turn On LEDs available on EVAL *******************************************/ BSP_LED_On(LED1); BSP_LED_On(LED2); BSP_LED_On(LED3); BSP_LED_On(LED4); /* Initialize the Audio codec and all related peripherals (I2S, I2C, IOExpander, IOs...) */ if(AUDIO_Init() == AUDIO_ERROR_NONE) { BSP_LCD_DisplayStringAtLine(3, (uint8_t *)"===================="); BSP_LCD_DisplayStringAtLine(4, (uint8_t *)"Key : Play/Pause "); BSP_LCD_DisplayStringAtLine(5, (uint8_t *)"Tamper: Vol+/Headph"); BSP_LCD_DisplayStringAtLine(6, (uint8_t *)"Wakeup: Vol-/Spkr "); BSP_LCD_DisplayStringAtLine(7, (uint8_t *)"===================="); BSP_LCD_DisplayStringAtLine(8, (uint8_t *)" AUDIO CODEC OK "); } else { BSP_LCD_DisplayStringAtLine(4, (uint8_t *)" AUDIO CODEC FAIL "); BSP_LCD_DisplayStringAtLine(5, (uint8_t *)" Try to reset board "); } /* Start playing the file from a circular buffer, once the DMA is enabled, it is always in running state. Application has to fill the buffer with the audio data using Transfer complete and/or half transfer complete interrupts callbacks (EVAL_AUDIO_TransferComplete_CallBack() or EVAL_AUDIO_HalfTransfer_CallBack()... */ AUDIO_Start(); /* Display the state on the screen */ BSP_LCD_DisplayStringAtLine(8, (uint8_t *)" PLAYING "); /* Infinite loop */ while (1) { /* Check on the Pause/Resume button */ if(BSP_PB_GetState(BUTTON_KEY) == RESET) { /* Wait to avoid rebound */ while (BSP_PB_GetState(BUTTON_KEY) == RESET); if(uwCommand == AUDIO_PAUSE) { BSP_AUDIO_OUT_Pause(); /* Display the current state of the player */ BSP_LCD_DisplayStringAtLine(8, (uint8_t *)" PAUSED "); /* Next time Resume command should be processed */ uwCommand = AUDIO_RESUME; /* Push buttons will be used to switch between Speaker and Headphone modes */ uwSpHpSwitch = 1; } else { BSP_AUDIO_OUT_Resume(); /* Display the current state of the player */ BSP_LCD_DisplayStringAtLine(8, (uint8_t *)" PLAYING "); /* Next time Pause command should be processed */ uwCommand = AUDIO_PAUSE; /* Push buttons will be used to control volume level */ uwSpHpSwitch = 0; } } /* Check on the Volume high button */ if (BSP_PB_GetState(BUTTON_WAKEUP) != RESET) { /* Check if the current state is paused (push buttons are used for volume control or for speaker/headphone mode switching) */ if (uwSpHpSwitch) { /* Set output to Speaker */ BSP_AUDIO_OUT_SetOutputMode(OUTPUT_DEVICE_SPEAKER); /* Display the current state of the player */ BSP_LCD_DisplayStringAtLine(9, (uint8_t *)" SPEAKER "); } else { /* Wait to avoid rebound */ while (BSP_PB_GetState(BUTTON_WAKEUP) != RESET); /* Decrease volume by 5% */ if (uwVolume > 5) uwVolume -= 5; else uwVolume = 0; /* Apply the new volume to the codec */ BSP_AUDIO_OUT_SetVolume(uwVolume); BSP_LCD_DisplayStringAtLine(9, (uint8_t *)" VOL: - "); } } /* Check on the Volume high button */ if (BSP_PB_GetState(BUTTON_TAMPER) == RESET) { /* Check if the current state is paused (push buttons are used for volume control or for speaker/headphone mode switching) */ if (uwSpHpSwitch) { /* Set output to Headphone */ BSP_AUDIO_OUT_SetOutputMode(OUTPUT_DEVICE_HEADPHONE); /* Display the current state of the player */ BSP_LCD_DisplayStringAtLine(9, (uint8_t *)" HEADPHONE "); } else { /* Wait to avoid rebound */ while (BSP_PB_GetState(BUTTON_TAMPER) == RESET); /* Increase volume by 5% */ if (uwVolume < 95) uwVolume += 5; else uwVolume = 100; /* Apply the new volume to the codec */ BSP_AUDIO_OUT_SetVolume(uwVolume); BSP_LCD_DisplayStringAtLine(9, (uint8_t *)" VOL: + "); } } /* Toggle LED3 */ BSP_LED_Toggle(LED3); /* Insert 100 ms delay */ HAL_Delay(100); /* Toggle LED2 */ BSP_LED_Toggle(LED2); /* Insert 100 ms delay */ HAL_Delay(100); } }
void LCD_DISCO_F469NI::DisplayStringAtLine(uint16_t Line, uint8_t *ptr) { BSP_LCD_DisplayStringAtLine(Line, ptr); }
/** * @brief Manages Audio process. * @param None * @retval Audio error */ AUDIO_ErrorTypeDef AUDIO_REC_Process(void) { uint32_t byteswritten = 0; AUDIO_ErrorTypeDef audio_error = AUDIO_ERROR_NONE; uint32_t elapsed_time; static uint32_t prev_elapsed_time = 0xFFFFFFFF; uint8_t str[10]; static TS_StateTypeDef TS_State={0}; switch(AudioState) { case AUDIO_STATE_PRERECORD: if(TS_State.touchDetected == 1) /* If previous touch has not been released, we don't proceed any touch command */ { BSP_TS_GetState(&TS_State); } else { BSP_TS_GetState(&TS_State); if(TS_State.touchDetected == 1) { if ((TS_State.touchX[0] > TOUCH_STOP_XMIN) && (TS_State.touchX[0] < TOUCH_STOP_XMAX) && (TS_State.touchY[0] > TOUCH_STOP_YMIN) && (TS_State.touchY[0] < TOUCH_STOP_YMAX)) { AudioState = AUDIO_STATE_STOP; } else if ((TS_State.touchX[0] > TOUCH_RECORD_XMIN) && (TS_State.touchX[0] < TOUCH_RECORD_XMAX) && (TS_State.touchY[0] > TOUCH_RECORD_YMIN) && (TS_State.touchY[0] < TOUCH_RECORD_YMAX)) { display_update = 1; AudioState = AUDIO_STATE_RECORD; } else if((TS_State.touchX[0] > TOUCH_VOL_MINUS_XMIN) && (TS_State.touchX[0] < TOUCH_VOL_MINUS_XMAX) && (TS_State.touchY[0] > TOUCH_VOL_MINUS_YMIN) && (TS_State.touchY[0] < TOUCH_VOL_MINUS_YMAX)) { AudioState = AUDIO_STATE_VOLUME_DOWN; if(uwVolume >= 5) { uwVolume -= 5; } } else if((TS_State.touchX[0] > TOUCH_VOL_PLUS_XMIN) && (TS_State.touchX[0] < TOUCH_VOL_PLUS_XMAX) && (TS_State.touchY[0] > TOUCH_VOL_PLUS_YMIN) && (TS_State.touchY[0] < TOUCH_VOL_PLUS_YMAX)) { AudioState = AUDIO_STATE_VOLUME_UP; if(uwVolume <= 95) { uwVolume += 5; } } if ((AudioState == AUDIO_STATE_VOLUME_DOWN) || (AudioState == AUDIO_STATE_VOLUME_UP)) { sprintf((char *)str, "Volume : %d ", (int)uwVolume); BSP_LCD_ClearStringLine(7); BSP_LCD_DisplayStringAtLine(7, str); BSP_AUDIO_IN_SetVolume(uwVolume); AudioState = AUDIO_STATE_PRERECORD; } } else { AudioState = AUDIO_STATE_PRERECORD; } } break; case AUDIO_STATE_RECORD: if (display_update) { BSP_LCD_SetTextColor(LCD_COLOR_RED); /* Display red record circle */ BSP_LCD_FillCircle((TOUCH_RECORD_XMAX+TOUCH_RECORD_XMIN)/2, (TOUCH_RECORD_YMAX+TOUCH_RECORD_YMIN)/2, (TOUCH_RECORD_XMAX-TOUCH_RECORD_XMIN)/2); BSP_LCD_SetFont(&LCD_LOG_TEXT_FONT); BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); BSP_LCD_DisplayStringAt(247, LINE(6), (uint8_t *)" [RECORD]", LEFT_MODE); display_update = 0; } if(TS_State.touchDetected == 1) /* If previous touch has not been released, we don't proceed any touch command */ { BSP_TS_GetState(&TS_State); } else { BSP_TS_GetState(&TS_State); if(TS_State.touchDetected == 1) { if ((TS_State.touchX[0] > TOUCH_STOP_XMIN) && (TS_State.touchX[0] < TOUCH_STOP_XMAX) && (TS_State.touchY[0] > TOUCH_STOP_YMIN) && (TS_State.touchY[0] < TOUCH_STOP_YMAX)) { AudioState = AUDIO_STATE_STOP; } else if ((TS_State.touchX[0] > TOUCH_PAUSE_XMIN) && (TS_State.touchX[0] < TOUCH_PAUSE_XMAX) && (TS_State.touchY[0] > TOUCH_PAUSE_YMIN) && (TS_State.touchY[0] < TOUCH_PAUSE_YMAX)) { AudioState = AUDIO_STATE_PAUSE; } else if((TS_State.touchX[0] > TOUCH_VOL_MINUS_XMIN) && (TS_State.touchX[0] < TOUCH_VOL_MINUS_XMAX) && (TS_State.touchY[0] > TOUCH_VOL_MINUS_YMIN) && (TS_State.touchY[0] < TOUCH_VOL_MINUS_YMAX)) { AudioState = AUDIO_STATE_VOLUME_DOWN; } else if((TS_State.touchX[0] > TOUCH_VOL_PLUS_XMIN) && (TS_State.touchX[0] < TOUCH_VOL_PLUS_XMAX) && (TS_State.touchY[0] > TOUCH_VOL_PLUS_YMIN) && (TS_State.touchY[0] < TOUCH_VOL_PLUS_YMAX)) { AudioState = AUDIO_STATE_VOLUME_UP; } } } /* MAX Recording time reached, so stop audio interface and close file */ if(BufferCtl.fptr >= REC_SAMPLE_LENGTH) { display_update = 1; AudioState = AUDIO_STATE_STOP; break; } /* Check if there are Data to write to USB Key */ if(BufferCtl.wr_state == BUFFER_FULL) { /* write buffer in file */ if(f_write(&WavFile, (uint8_t*)(BufferCtl.pcm_buff + BufferCtl.offset), AUDIO_IN_PCM_BUFFER_SIZE, (void*)&byteswritten) != FR_OK) { BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(14, (uint8_t *)"RECORD FAIL"); return AUDIO_ERROR_IO; } BufferCtl.fptr += byteswritten; BufferCtl.wr_state = BUFFER_EMPTY; } /* Display elapsed time */ elapsed_time = BufferCtl.fptr / (DEFAULT_AUDIO_IN_FREQ * DEFAULT_AUDIO_IN_CHANNEL_NBR * 2); if(prev_elapsed_time != elapsed_time) { prev_elapsed_time = elapsed_time; sprintf((char *)str, "[%02d:%02d]", (int)(elapsed_time /60), (int)(elapsed_time%60)); BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); BSP_LCD_DisplayStringAt(263, LINE(8), str, LEFT_MODE); sprintf((char *)str, "%4d KB", (int)((int32_t)BufferCtl.fptr/1024)); BSP_LCD_DisplayStringAt(83, LINE(8), str, LEFT_MODE); } break; case AUDIO_STATE_STOP: /* Stop recorder */ BSP_AUDIO_IN_Stop(); BSP_LCD_SetTextColor(LCD_COLOR_CYAN); /* Display blue cyan record circle */ BSP_LCD_FillCircle((TOUCH_RECORD_XMAX+TOUCH_RECORD_XMIN)/2, (TOUCH_RECORD_YMAX+TOUCH_RECORD_YMIN)/2, (TOUCH_RECORD_XMAX-TOUCH_RECORD_XMIN)/2); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_FillRect(TOUCH_STOP_XMIN, TOUCH_STOP_YMIN , /* Stop rectangle */ TOUCH_STOP_XMAX - TOUCH_STOP_XMIN, TOUCH_STOP_YMAX - TOUCH_STOP_YMIN); BSP_LCD_SetTextColor(LCD_COLOR_CYAN); display_update = 1; HAL_Delay(150); if(f_lseek(&WavFile, 0) == FR_OK) { /* Update the wav file header save it into wav file */ WavProcess_HeaderUpdate(pHeaderBuff, &WaveFormat); if(f_write(&WavFile, pHeaderBuff, sizeof(WAVE_FormatTypeDef), (void*)&byteswritten) == FR_OK) { audio_error = AUDIO_ERROR_EOF; } else { audio_error = AUDIO_ERROR_IO; BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(14, (uint8_t *)"RECORD FAIL"); } } else { BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAtLine(14, (uint8_t *)"RECORD FAIL"); audio_error = AUDIO_ERROR_IO; } AudioState = AUDIO_STATE_IDLE; /* Close file */ f_close(&WavFile); break; case AUDIO_STATE_PAUSE: BSP_LCD_SetTextColor(LCD_COLOR_RED); /* Displays red pause rectangles */ BSP_LCD_FillRect(TOUCH_PAUSE_XMIN, TOUCH_PAUSE_YMIN , 15, TOUCH_PAUSE_YMAX - TOUCH_PAUSE_YMIN); BSP_LCD_FillRect(TOUCH_PAUSE_XMIN + 20, TOUCH_PAUSE_YMIN, 15, TOUCH_PAUSE_YMAX - TOUCH_PAUSE_YMIN); BSP_LCD_SetTextColor(LCD_COLOR_CYAN); /* Display blue cyan record circle */ BSP_LCD_FillCircle((TOUCH_RECORD_XMAX+TOUCH_RECORD_XMIN)/2, (TOUCH_RECORD_YMAX+TOUCH_RECORD_YMIN)/2, (TOUCH_RECORD_XMAX-TOUCH_RECORD_XMIN)/2); BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); BSP_LCD_DisplayStringAt(247, LINE(6), (uint8_t *)" [PAUSE] ", LEFT_MODE); BSP_AUDIO_IN_Pause(); AudioState = AUDIO_STATE_WAIT; break; case AUDIO_STATE_RESUME: BSP_LCD_SetTextColor(LCD_COLOR_CYAN); /* Displays blue cyan pause rectangles */ BSP_LCD_FillRect(TOUCH_PAUSE_XMIN, TOUCH_PAUSE_YMIN , 15, TOUCH_PAUSE_YMAX - TOUCH_PAUSE_YMIN); BSP_LCD_FillRect(TOUCH_PAUSE_XMIN + 20, TOUCH_PAUSE_YMIN, 15, TOUCH_PAUSE_YMAX - TOUCH_PAUSE_YMIN); BSP_LCD_SetTextColor(LCD_COLOR_RED); /* Display red record circle */ BSP_LCD_FillCircle((TOUCH_RECORD_XMAX+TOUCH_RECORD_XMIN)/2, (TOUCH_RECORD_YMAX+TOUCH_RECORD_YMIN)/2, (TOUCH_RECORD_XMAX-TOUCH_RECORD_XMIN)/2); BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); BSP_LCD_DisplayStringAt(247, LINE(6), (uint8_t *)" [RECORD]", LEFT_MODE); BSP_AUDIO_IN_Resume(); AudioState = AUDIO_STATE_RECORD; break; case AUDIO_STATE_VOLUME_UP: if(uwVolume <= 95) { uwVolume += 5; } sprintf((char *)str, "Volume : %d ", (int)uwVolume); BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); BSP_LCD_ClearStringLine(7); BSP_LCD_DisplayStringAtLine(7, str); BSP_AUDIO_IN_SetVolume(uwVolume); AudioState = AUDIO_STATE_RECORD; break; case AUDIO_STATE_VOLUME_DOWN: if(uwVolume >= 5) { uwVolume -= 5; } sprintf((char *)str, "Volume : %d ", (int)uwVolume); BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); BSP_LCD_ClearStringLine(7); BSP_LCD_DisplayStringAtLine(7, str); BSP_AUDIO_IN_SetVolume(uwVolume); AudioState = AUDIO_STATE_RECORD; break; case AUDIO_STATE_NEXT: case AUDIO_STATE_PREVIOUS: AudioState = AUDIO_STATE_RECORD; break; case AUDIO_STATE_WAIT: if(TS_State.touchDetected == 1) /* If previous touch has not been released, we don't proceed any touch command */ { BSP_TS_GetState(&TS_State); } else { BSP_TS_GetState(&TS_State); if(TS_State.touchDetected == 1) { if ((TS_State.touchX[0] > TOUCH_RECORD_XMIN) && (TS_State.touchX[0] < TOUCH_RECORD_XMAX) && (TS_State.touchY[0] > TOUCH_RECORD_YMIN) && (TS_State.touchY[0] < TOUCH_RECORD_YMAX)) { AudioState = AUDIO_STATE_RESUME; } else if ((TS_State.touchX[0] > TOUCH_PAUSE_XMIN) && (TS_State.touchX[0] < TOUCH_PAUSE_XMAX) && (TS_State.touchY[0] > TOUCH_PAUSE_YMIN) && (TS_State.touchY[0] < TOUCH_PAUSE_YMAX)) { AudioState = AUDIO_STATE_RESUME; } } } case AUDIO_STATE_IDLE: case AUDIO_STATE_INIT: default: /* Do Nothing */ break; } return audio_error; }
/** * @brief Manages MSC Menu Process. * @param None * @retval None */ void MSC_MenuProcess(void) { switch(msc_demo.state) { case MSC_DEMO_START: if(Appli_state == APPLICATION_READY) { BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to start read and write operations"); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_WAKEUP) != SET) && (Appli_state != APPLICATION_DISCONNECT)) { } msc_demo.state = MSC_DEMO_FILE_OPERATIONS; /* Prevent debounce effect for user key */ HAL_Delay(400); BSP_LCD_ClearStringLine(19); } break; case MSC_DEMO_FILE_OPERATIONS: /* Read and Write File Here */ if(Appli_state == APPLICATION_READY) { MSC_File_Operations(); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(19, (uint8_t *)"Press User button to display disk content"); /* Wait for User Input */ while((BSP_PB_GetState(BUTTON_WAKEUP) != SET) && (Appli_state != APPLICATION_DISCONNECT)) { } msc_demo.state = MSC_DEMO_EXPLORER; /* Prevent debounce effect for user key */ HAL_Delay(400); BSP_LCD_ClearStringLine(19); } break; case MSC_DEMO_EXPLORER: /* Display disk content */ if(Appli_state == APPLICATION_READY) { Explore_Disk("0:/", 1); msc_demo.state = MSC_DEMO_START; /* Prevent debounce effect for user key */ HAL_Delay(400); } break; default: break; } if(Appli_state == APPLICATION_DISCONNECT) { Appli_state = APPLICATION_IDLE; LCD_LOG_ClearTextZone(); LCD_ErrLog("MSC device disconnected!\n"); msc_demo.state = MSC_DEMO_START; msc_demo.select = 0; } }
/** * @brief Displays adequate message on TFT available on adafruit 1.8" TFT shield * @param message: Error message to be displayed on the LCD. * This parameter can be one of following values: * @arg SD_CARD_NOT_FORMATTED: SD CARD is not FAT formatted * @arg SD_CARD_FILE_NOT_SUPPORTED: File is not supported * @arg SD_CARD_OPEN_FAIL: Failure to open directory * @arg FATFS_NOT_MOUNTED: FatFs is not mounted * @retval None */ static void TFT_DisplayErrorMessage(uint8_t message) { /* LCD Clear */ BSP_LCD_Clear(LCD_COLOR_WHITE); /* Set Error Message Font */ BSP_LCD_SetFont(&Font12); /* Set Text and Back colors */ BSP_LCD_SetBackColor(LCD_COLOR_GREY); BSP_LCD_SetTextColor(LCD_COLOR_RED); if(message == SD_CARD_NOT_FORMATTED) { /* Display message */ BSP_LCD_DisplayStringAtLine(5, (uint8_t*)" SD Card is not "); BSP_LCD_DisplayStringAtLine(6, (uint8_t*)" FAT formatted. "); BSP_LCD_DisplayStringAtLine(7, (uint8_t*)" Please Format the "); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" microSD card. "); while (1) { } } if(message == SD_CARD_FILE_NOT_SUPPORTED) { /* Display message */ BSP_LCD_DisplayStringAtLine(5, (uint8_t*)" "); BSP_LCD_DisplayStringAtLine(6, (uint8_t*)" File type is not "); BSP_LCD_DisplayStringAtLine(7, (uint8_t*)" supported. "); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" "); while(1) { } } if(message == SD_CARD_OPEN_FAIL) { /* Display message */ BSP_LCD_DisplayStringAtLine(5, (uint8_t*)" "); BSP_LCD_DisplayStringAtLine(6, (uint8_t*)" Open directory "); BSP_LCD_DisplayStringAtLine(7, (uint8_t*)" fails. "); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" "); while(1) { } } if(message == FATFS_NOT_MOUNTED) { /* Display message */ BSP_LCD_DisplayStringAtLine(5, (uint8_t*)" "); BSP_LCD_DisplayStringAtLine(6, (uint8_t*)" Cannot mount "); BSP_LCD_DisplayStringAtLine(7, (uint8_t*)" FatFs on Drive. "); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" "); while (1) { } } if(message == BSP_SD_INIT_FAILED) { /* Display message */ BSP_LCD_DisplayStringAtLine(5, (uint8_t*)" "); BSP_LCD_DisplayStringAtLine(6, (uint8_t*)" SD Init "); BSP_LCD_DisplayStringAtLine(7, (uint8_t*)" fails. "); BSP_LCD_DisplayStringAtLine(8, (uint8_t*)" "); while(1) { } } }
/** * @brief Manages Audio Menu Process. * @param None * @retval None */ void AUDIO_MenuProcess(void) { switch(audio_demo.state) { case AUDIO_DEMO_IDLE: BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(14, (uint8_t *)" "); BSP_LCD_DisplayStringAtLine(15, (uint8_t *)"Use [Buttons Left/Right] to scroll up/down "); BSP_LCD_DisplayStringAtLine(16, (uint8_t *)"Use [Joystick Up/Down] to scroll audio menu "); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); AUDIO_MenuSelectItem(AUDIO_main_menu, 0); audio_demo.state = AUDIO_DEMO_WAIT; audio_demo.select = 0; break; case AUDIO_DEMO_WAIT: if(audio_demo.select != prev_select) { prev_select = audio_demo.select; AUDIO_MenuSelectItem(AUDIO_main_menu, audio_demo.select & 0x7F); /* Handle select item */ if(audio_demo.select & 0x80) { audio_demo.select &= 0x7F; switch(audio_demo.select) { case 0: audio_demo.state = AUDIO_DEMO_EXPLORE; break; case 1: /* Display HMI messages */ BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(14, (uint8_t *)" "); BSP_LCD_DisplayStringAtLine(15, (uint8_t *)" "); BSP_LCD_DisplayStringAtLine(16, (uint8_t *)"Use [User Key] To Stop and return from player"); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); /* Set PLAYBACK state and start playing 1st file */ audio_state = AUDIO_STATE_IDLE; audio_demo.state = AUDIO_DEMO_PLAYBACK; Audio_ChangeSelectMode(AUDIO_PLAYBACK_CONTROL); break; case 2: audio_demo.state = AUDIO_REENUMERATE; break; default: break; } } } break; case AUDIO_DEMO_EXPLORE: if(Appli_state == APPLICATION_AUDIO) { if(Audio_ShowWavFiles() > 0) { LCD_ErrLog("There is no WAV file on the microSD.\n"); Audio_ChangeSelectMode(AUDIO_SELECT_MENU); } else { audio_demo.state = AUDIO_DEMO_WAIT; } } break; case AUDIO_DEMO_PLAYBACK: if(Appli_state == APPLICATION_AUDIO) { if(audio_state == AUDIO_STATE_IDLE) { /* Start Playing...*/ audio_state = AUDIO_STATE_INIT; if(AUDIO_Start(0) == AUDIO_ERROR_IO) { Audio_ChangeSelectMode(AUDIO_SELECT_MENU); } else { BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); BSP_LCD_DisplayStringAtLine(10, (uint8_t *)"[ UP ] : Volume +"); BSP_LCD_DisplayStringAtLine(11, (uint8_t *)"[ DOWN ] : Volume -"); BSP_LCD_DisplayStringAtLine(12, (uint8_t *)"[ LEFT ] : Previous"); BSP_LCD_DisplayStringAtLine(13, (uint8_t *)"[ RIGHT ] : Next"); BSP_LCD_DisplayStringAtLine(14, (uint8_t *)"[ SEL ] : Pause/Resume"); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); } } else /* Not idle */ { if(AUDIO_Process() == AUDIO_ERROR_IO) { Audio_ChangeSelectMode(AUDIO_SELECT_MENU); } } } break; case AUDIO_REENUMERATE: /* Force Audio Device to re-enumerate */ if(Appli_state == APPLICATION_AUDIO) { USBH_ReEnumerate(&hUSBHost); } audio_demo.state = AUDIO_DEMO_WAIT; break; default: break; } }
/** * @brief Manages HID Menu Process. * @param None * @retval None */ void HID_MenuProcess(void) { switch(hid_demo.state) { case HID_DEMO_IDLE: BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAtLine(14, (uint8_t *)" "); BSP_LCD_DisplayStringAtLine(15, (uint8_t *)"Use [Buttons Left/Right] to scroll up/down "); BSP_LCD_DisplayStringAtLine(16, (uint8_t *)"Use [Joystick Up/Down] to scroll HID menu "); BSP_LCD_DisplayStringAtLine(17, (uint8_t *)" "); BSP_LCD_SetTextColor(LCD_COLOR_WHITE); HID_SelectItem(DEMO_HID_menu, 0); hid_demo.state = HID_DEMO_WAIT; hid_demo.select = 0; break; case HID_DEMO_WAIT: if(hid_demo.select != prev_select) { prev_select = hid_demo.select; HID_SelectItem(DEMO_HID_menu, hid_demo.select & 0x7F); /* Handle select item */ if(hid_demo.select & 0x80) { hid_demo.select &= 0x7F; switch(hid_demo.select) { case 0: hid_demo.state = HID_DEMO_START; break; case 1: hid_demo.state = HID_DEMO_REENUMERATE; break; default: break; } } } break; case HID_DEMO_START: if(Appli_state == APPLICATION_HID) { if(USBH_HID_GetDeviceType(&hUSBHost) == HID_KEYBOARD) { hid_demo.keyboard_state = HID_KEYBOARD_IDLE; hid_demo.state = HID_DEMO_KEYBOARD; } else if(USBH_HID_GetDeviceType(&hUSBHost) == HID_MOUSE) { hid_demo.mouse_state = HID_MOUSE_IDLE; hid_demo.state = HID_DEMO_MOUSE; } } else { LCD_ErrLog("No supported HID device!\n"); hid_demo.state = HID_DEMO_WAIT; } break; case HID_DEMO_REENUMERATE: /* Force HID Device to re-enumerate */ if(Appli_state == APPLICATION_HID) { USBH_ReEnumerate(&hUSBHost); } hid_demo.state = HID_DEMO_WAIT; break; case HID_DEMO_MOUSE: if( Appli_state == APPLICATION_HID) { HID_MouseMenuProcess(); USBH_MouseDemo(&hUSBHost); } break; case HID_DEMO_KEYBOARD: if( Appli_state == APPLICATION_HID) { HID_KeyboardMenuProcess(); USBH_KeybdDemo(&hUSBHost); } break; default: break; } }
/** * @brief Manages the menu on the screen. * @param menu: Menu table * @param item: Selected item to be highlighted * @retval None */ void AUDIO_MenuSelectItem(uint8_t **menu, uint8_t item) { BSP_LCD_SetTextColor(LCD_COLOR_WHITE); switch(item) { case 0: BSP_LCD_SetBackColor(LCD_COLOR_MAGENTA); BSP_LCD_DisplayStringAtLine(19, menu[0]); BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAtLine(20, menu[1]); BSP_LCD_DisplayStringAtLine(21, menu[2]); break; case 1: BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAtLine(19, menu[0]); BSP_LCD_SetBackColor(LCD_COLOR_MAGENTA); BSP_LCD_DisplayStringAtLine(20, menu[1]); BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAtLine(21, menu[2]); break; case 2: BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAtLine(19, menu[0]); BSP_LCD_DisplayStringAtLine(20, menu[1]); BSP_LCD_SetBackColor(LCD_COLOR_MAGENTA); BSP_LCD_DisplayStringAtLine(21, menu[2]); break; default: BSP_LCD_SetBackColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAtLine(19, menu[0]); BSP_LCD_DisplayStringAtLine(20, menu[1]); BSP_LCD_DisplayStringAtLine(21, menu[2]); break; } BSP_LCD_SetBackColor(LCD_COLOR_BLACK); }
/** * @brief DHCP Process * @param argument: network interface * @retval None */ void DHCP_thread(void const * argument) { struct netif *netif = (struct netif *) argument; struct ip_addr ipaddr; struct ip_addr netmask; struct ip_addr gw; uint32_t IPaddress; for (;;) { switch (DHCP_state) { case DHCP_START: { netif->ip_addr.addr = 0; netif->netmask.addr = 0; netif->gw.addr = 0; IPaddress = 0; dhcp_start(netif); DHCP_state = DHCP_WAIT_ADDRESS; #ifdef USE_LCD BSP_LCD_ClearStringLine(7); BSP_LCD_ClearStringLine(8); BSP_LCD_ClearStringLine(9); BSP_LCD_DisplayStringAtLine(8,(uint8_t *) " Looking for"); BSP_LCD_DisplayStringAtLine(9,(uint8_t *) " DHCP sever ..."); #endif } break; case DHCP_WAIT_ADDRESS: { /* Read the new IP address */ IPaddress = netif->ip_addr.addr; if (IPaddress!=0) { DHCP_state = DHCP_ADDRESS_ASSIGNED; /* Stop DHCP */ dhcp_stop(netif); #ifdef USE_LCD uint8_t iptab[4]; uint8_t iptxt[20]; iptab[0] = (uint8_t)(IPaddress >> 24); iptab[1] = (uint8_t)(IPaddress >> 16); iptab[2] = (uint8_t)(IPaddress >> 8); iptab[3] = (uint8_t)(IPaddress); sprintf((char*)iptxt, " %d.%d.%d.%d", iptab[3], iptab[2], iptab[1], iptab[0]); BSP_LCD_ClearStringLine(7); BSP_LCD_ClearStringLine(8); BSP_LCD_ClearStringLine(9); BSP_LCD_DisplayStringAtLine(7,(uint8_t *) " IP address assigned"); BSP_LCD_DisplayStringAtLine(8,(uint8_t *) " by a DHCP server:"); BSP_LCD_DisplayStringAtLine(9,(uint8_t *) iptxt); #else BSP_LED_On(LED1); #endif } else { /* DHCP timeout */ if (netif->dhcp->tries > MAX_DHCP_TRIES) { DHCP_state = DHCP_TIMEOUT; /* Stop DHCP */ dhcp_stop(netif); /* Static address used */ IP4_ADDR(&ipaddr, IP_ADDR0 ,IP_ADDR1 , IP_ADDR2 , IP_ADDR3 ); IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1, NETMASK_ADDR2, NETMASK_ADDR3); IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); netif_set_addr(netif, &ipaddr , &netmask, &gw); #ifdef USE_LCD uint8_t iptxt[20]; sprintf((char*)iptxt, " %d.%d.%d.%d", IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3); BSP_LCD_ClearStringLine(7); BSP_LCD_ClearStringLine(8); BSP_LCD_ClearStringLine(9); BSP_LCD_DisplayStringAtLine(7,(uint8_t *) " DHCP timeout !!"); BSP_LCD_DisplayStringAtLine(8,(uint8_t *) " Static IP address :"); BSP_LCD_DisplayStringAtLine(9,(uint8_t *) iptxt); #else BSP_LED_On(LED1); #endif } } } break; default: break; }