//***************************************************************************** // // Handles paint requests for the firmware update canvas widget. // //***************************************************************************** void OnFirmwarePaint(tWidget *pWidget, tContext *pContext) { unsigned long ulLines; long lLineHeight, lOffset; lLineHeight = GrFontHeightGet(FONT_14PT); lOffset = 32; // // Display the firmware update instruction text in the canvas. // GrContextFontSet(pContext, FONT_14PT); GrContextForegroundSet(pContext, ClrSilver); GrStringGet(STR_UPDATE_TEXT, g_pcBuffer, SCOMP_MAX_STRLEN); ulLines = DrawStringWrapped(pContext, g_pcBuffer, lLineHeight, 1, lOffset, g_pLanguageTable[g_ulLangIdx].bBreakOnSpace ); // // Move down by 1/4 of a line. // lOffset += lLineHeight/4; // // Format the UART setting information string // GrStringGet(STR_UART, g_pcBuffer, SCOMP_MAX_STRLEN); GrStringDraw(pContext, g_pcBuffer, -1, 1, lOffset + (ulLines * lLineHeight), 0); }
//***************************************************************************** // // Handles paint requests for the introduction canvas widget. // //***************************************************************************** void OnIntroPaint(tWidget *psWidget, tContext *psContext) { int32_t i32LineHeight, i32Offset; uint32_t ui32Lines; i32LineHeight = GrFontHeightGet(FONT_14PT); i32Offset = 28; // // Display the introduction text in the canvas. // GrContextFontSet(psContext, FONT_14PT); GrContextForegroundSet(psContext, ClrSilver); // // Write the first paragraph of the introduction page. // GrStringGet(STR_INTRO_1, g_pcBuffer, SCOMP_MAX_STRLEN); ui32Lines = DrawStringWrapped(psContext, g_pcBuffer, i32LineHeight, 8, i32Offset, g_psLanguageTable[g_ui32LangIdx].bBreakOnSpace); // // Move down by 1/4 of a line between paragraphs. // i32Offset += i32LineHeight/4; // // Write the second paragraph of the introduction page. // GrStringGet(STR_INTRO_2, g_pcBuffer, SCOMP_MAX_STRLEN); ui32Lines += DrawStringWrapped(psContext, g_pcBuffer, i32LineHeight, 8, i32Offset + (ui32Lines * i32LineHeight), g_psLanguageTable[g_ui32LangIdx].bBreakOnSpace); // // Move down by 1/4 of a line between paragraphs. // i32Offset += i32LineHeight/4; // // Write the third paragraph of the introduction page. // GrStringGet(STR_INTRO_3, g_pcBuffer, SCOMP_MAX_STRLEN); DrawStringWrapped(psContext, g_pcBuffer, i32LineHeight, 8, i32Offset + (ui32Lines * i32LineHeight), g_psLanguageTable[g_ui32LangIdx].bBreakOnSpace ); }
//***************************************************************************** // // Handles paint requests for the introduction canvas widget. // //***************************************************************************** void OnIntroPaint(tWidget *pWidget, tContext *pContext) { long lLineHeight, lOffset; unsigned long ulLines; lLineHeight = GrFontHeightGet(FONT_14PT); lOffset = 32; // // Display the introduction text in the canvas. // GrContextFontSet(pContext, FONT_14PT); GrContextForegroundSet(pContext, ClrSilver); // // Write the first paragraph of the introduction page. // GrStringGet(STR_INTRO_1, g_pcBuffer, SCOMP_MAX_STRLEN); ulLines = DrawStringWrapped(pContext, g_pcBuffer, lLineHeight, 1, lOffset, g_pLanguageTable[g_ulLangIdx].bBreakOnSpace ); // // Move down by 1/4 of a line between paragraphs. // lOffset += lLineHeight/4; // // Write the second paragraph of the introduction page. // GrStringGet(STR_INTRO_2, g_pcBuffer, SCOMP_MAX_STRLEN); ulLines += DrawStringWrapped(pContext, g_pcBuffer, lLineHeight, 1, lOffset + (ulLines * lLineHeight), g_pLanguageTable[g_ulLangIdx].bBreakOnSpace ); // // Move down by 1/4 of a line between paragraphs. // lOffset += lLineHeight/4; // // Write the third paragraph of the introduction page. // GrStringGet(STR_INTRO_3, g_pcBuffer, SCOMP_MAX_STRLEN); DrawStringWrapped(pContext, g_pcBuffer, lLineHeight, 1, lOffset + (ulLines * lLineHeight), g_pLanguageTable[g_ulLangIdx].bBreakOnSpace ); }
//***************************************************************************** // // Switch out all of the dynamic strings. // //***************************************************************************** void ChangeLanguage(uint16_t ui16Language) { // // Change the language. // GrStringLanguageSet(ui16Language); // // Update the Language string. // GrStringGet(STR_LANGUAGE, g_pcLanguage, LANGUAGE_MAX_SIZE); // // Update the title string. // GrStringGet(g_ui32PanelNames[g_ui32Panel], g_pcTitle, TITLE_MAX_SIZE); }
//***************************************************************************** // // Switch out all of the dynamic strings. // //***************************************************************************** void ChangeLanguage(unsigned short usLanguage) { // // Change the language. // GrStringLanguageSet(usLanguage); // // Update the Language string. // GrStringGet(STR_LANGUAGE, g_pcLanguage, LANGUAGE_MAX_SIZE); // // Update the Update button. // GrStringGet(STR_UPDATE, g_pcUpdateButton, UPDATE_BUTTON_MAX_SIZE); // // Update the title string. // GrStringGet(g_ulPanelNames[g_ulPanel], g_pcTitle, TITLE_MAX_SIZE); }
//***************************************************************************** // // Handles press notifications for the push button widgets. // //***************************************************************************** void OnFirmwareUpdate(tWidget *pWidget) { // // Play the key click sound. // SoundPlay(g_pusKeyClick, sizeof(g_pusKeyClick) / 2); // // Change the button text to show that the update is starting // GrStringGet(STR_UPDATING, g_pcUpdateButton, UPDATE_BUTTON_MAX_SIZE); WidgetPaint((tWidget *)&g_sFirmwareUpdateBtn); // // Trigger a software update // g_bFirmwareUpdate = true; }
//***************************************************************************** // // A simple demonstration of the features of the TivaWare Graphics Library. // //***************************************************************************** int main(void) { tContext sContext; uint32_t ui32SysClock; // // Run from the PLL at 120 MHz. // ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120000000); // // Configure the device pins. // PinoutSet(); // // Initialize the display driver. // Kentec320x240x16_SSD2119Init(ui32SysClock); // // Set graphics library text rendering defaults. // GrLibInit(&GRLIB_INIT_STRUCT); // // Set the string table and the default language. // GrStringTableSet(STRING_TABLE); // // Set the default language. // ChangeLanguage(GrLangEnUS); // // Initialize the graphics context. // GrContextInit(&sContext, &g_sKentec320x240x16_SSD2119); // // Draw the application frame. // FrameDraw(&sContext, "lang-demo"); // // Load the static strings from the string table. These strings are // independent of the language in use but we store them in the string // table nonetheless since (a) we may be using codepage remapping in // which case it would be difficult to hardcode them into the app source // anyway (ASCII or ISO8859-1 text would not render properly with the // remapped custom font) and (b) even if we're not using codepage remapping, // we may have generated a custom font from the string table output and // we want to make sure that all glyphs required by the application are // present in that font. If we hardcode some text in the application // source and don't put it in the string table, we run the risk of having // characters missing in the font. // GrStringGet(STR_ENGLISH, g_pcEnglish, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_DEUTSCH, g_pcDeutsch, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_ESPANOL, g_pcEspanol, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_ITALIANO, g_pcItaliano, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_CHINESE, g_pcChinese, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_KOREAN, g_pcKorean, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_JAPANESE, g_pcJapanese, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_PLUS, g_pcPlus, 2); GrStringGet(STR_MINUS, g_pcMinus, 2); // // Initialize the touch screen driver and have it route its messages to the // widget tree. // TouchScreenInit(ui32SysClock); TouchScreenCallbackSet(WidgetPointerMessage); // // Add the title block and the previous and next buttons to the widget // tree. // WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sPrevious); WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sTitle); WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sNext); // // Add the first panel to the widget tree. // g_ui32Panel = 0; WidgetAdd(WIDGET_ROOT, (tWidget *)g_psPanels); // // Set the string for the title. // CanvasTextSet(&g_sTitle, g_pcTitle); // // Issue the initial paint request to the widgets. // WidgetPaint(WIDGET_ROOT); // // Loop forever, processing widget messages. // while(1) { // // Process any messages in the widget message queue. // WidgetMessageQueueProcess(); } }
//***************************************************************************** // // Handles presses of the next panel button. // //***************************************************************************** void OnNext(tWidget *psWidget) { // // There is nothing to be done if the last panel is already being // displayed. // if(g_ui32Panel == (NUM_PANELS - 1)) { return; } // // Remove the current panel. // WidgetRemove((tWidget *)(g_psPanels + g_ui32Panel)); // // Increment the panel index. // g_ui32Panel++; // // Add and draw the new panel. // WidgetAdd(WIDGET_ROOT, (tWidget *)(g_psPanels + g_ui32Panel)); WidgetPaint((tWidget *)(g_psPanels + g_ui32Panel)); // // Set the title of this panel. // GrStringGet(g_ui32PanelNames[g_ui32Panel], g_pcTitle, TITLE_MAX_SIZE); WidgetPaint((tWidget *)&g_sTitle); // // See if the previous panel was the first panel. // if(g_ui32Panel == 1) { // // Display the previous button. // PushButtonImageOn(&g_sPrevious); PushButtonTextOn(&g_sPrevious); PushButtonFillOff(&g_sPrevious); WidgetPaint((tWidget *)&g_sPrevious); } // // See if this is the last panel. // if(g_ui32Panel == (NUM_PANELS - 1)) { // // Clear the next button from the display since the last panel is being // displayed. // PushButtonImageOff(&g_sNext); PushButtonTextOff(&g_sNext); PushButtonFillOn(&g_sNext); WidgetPaint((tWidget *)&g_sNext); } }
//***************************************************************************** // // A simple demonstration of the features of the Stellaris Graphics Library. // //***************************************************************************** int main(void) { tContext sContext; tRectangle sRect; // // If running on Rev A2 silicon, turn the LDO voltage up to 2.75V. This is // a workaround to allow the PLL to operate reliably. // if(REVISION_IS_A2) { SysCtlLDOSet(SYSCTL_LDO_2_75V); } // // Set the clocking to run from the PLL. // SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ); // // Initialize the display driver. // Kitronix320x240x16_SSD2119Init(); // // Turn on the backlight. // Kitronix320x240x16_SSD2119BacklightOn(255); // // Set graphics library text rendering defaults. // GrLibInit(&GRLIB_INIT_STRUCT); // // Set the string table and the default language. // GrStringTableSet(STRING_TABLE); // // Set the default language. // ChangeLanguage(GrLangEnUS); // // Initialize the graphics context. // GrContextInit(&sContext, &g_sKitronix320x240x16_SSD2119); // // Fill the top 26 rows of the screen with blue to create the banner. // sRect.sXMin = 0; sRect.sYMin = 0; sRect.sXMax = GrContextDpyWidthGet(&sContext) - 1; sRect.sYMax = 25; GrContextForegroundSet(&sContext, ClrDarkBlue); GrRectFill(&sContext, &sRect); // // Put a white box around the banner. // GrContextForegroundSet(&sContext, ClrWhite); GrRectDraw(&sContext, &sRect); // // Load the static strings from the string table. These strings are // independent of the language in use but we store them in the string // table nonetheless since (a) we may be using codepage remapping in // which case it would be difficult to hardcode them into the app source // anyway (ASCII or ISO8859-1 text would not render properly with the // remapped custom font) and (b) even if we're not using codepage remapping, // we may have generated a custom font from the string table output and // we want to make sure that all glyphs required by the application are // present in that font. If we hardcode some text in the application // source and don't put it in the string table, we run the risk of having // characters missing in the font. // GrStringGet(STR_ENGLISH, g_pcEnglish, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_DEUTSCH, g_pcDeutsch, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_ESPANOL, g_pcEspanol, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_ITALIANO, g_pcItaliano, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_CHINESE, g_pcChinese, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_KOREAN, g_pcKorean, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_JAPANESE, g_pcJapanese, MAX_LANGUAGE_NAME_LEN); GrStringGet(STR_PLUS, g_pcPlus, 2); GrStringGet(STR_MINUS, g_pcMinus, 2); // // Put the application name in the middle of the banner. // GrStringGet(STR_APPNAME, g_pcBuffer, SCOMP_MAX_STRLEN); GrContextFontSet(&sContext, FONT_20PT); GrStringDrawCentered(&sContext, g_pcBuffer, -1, GrContextDpyWidthGet(&sContext) / 2, 10, 0); // // Initialize the sound driver. // SoundInit(); // // Initialize the touch screen driver and have it route its messages to the // widget tree. // TouchScreenInit(); TouchScreenCallbackSet(WidgetPointerMessage); // // Add the title block and the previous and next buttons to the widget // tree. // WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sPrevious); WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sTitle); WidgetAdd(WIDGET_ROOT, (tWidget *)&g_sNext); // // Add the first panel to the widget tree. // g_ulPanel = 0; WidgetAdd(WIDGET_ROOT, (tWidget *)g_psPanels); // // Set the string for the title. // CanvasTextSet(&g_sTitle, g_pcTitle); // // Initialize the pointer to the button text. // PushButtonTextSet(&g_sFirmwareUpdateBtn, g_pcUpdateButton); // // Issue the initial paint request to the widgets. // WidgetPaint(WIDGET_ROOT); // // Loop forever unless we receive a signal that a firmware update has been // requested. // while(!g_bFirmwareUpdate) { // // Process any messages in the widget message queue. // WidgetMessageQueueProcess(); } // // If we drop out, a firmware update request has been made. We call // WidgetMessageQueueProcess once more to ensure that any final messages // are processed then jump into the bootloader. // WidgetMessageQueueProcess(); // // Wait a while for the last keyboard click sound to finish. This is about // 500mS since the delay loop is 3 cycles long. // SysCtlDelay(SysCtlClockGet() / 6); // // Pass control to the bootloader. // JumpToBootLoader(); // // The boot loader should take control, so this should never be reached. // Just in case, loop forever. // while(1) { } }
//***************************************************************************** // // Handles presses of the previous panel button. // //***************************************************************************** void OnPrevious(tWidget *pWidget) { // // There is nothing to be done if the first panel is already being // displayed. // if(g_ulPanel == 0) { return; } // // Remove the current panel. // WidgetRemove((tWidget *)(g_psPanels + g_ulPanel)); // // Decrement the panel index. // g_ulPanel--; // // Add and draw the new panel. // WidgetAdd(WIDGET_ROOT, (tWidget *)(g_psPanels + g_ulPanel)); WidgetPaint((tWidget *)(g_psPanels + g_ulPanel)); // // Set the title of this panel. // GrStringGet(g_ulPanelNames[g_ulPanel], g_pcTitle, TITLE_MAX_SIZE); WidgetPaint((tWidget *)&g_sTitle); // // See if this is the first panel. // if(g_ulPanel == 0) { // // Clear the previous button from the display since the first panel is // being displayed. // PushButtonImageOff(&g_sPrevious); PushButtonTextOff(&g_sPrevious); PushButtonFillOn(&g_sPrevious); WidgetPaint((tWidget *)&g_sPrevious); } // // See if the previous panel was the last panel. // if(g_ulPanel == (NUM_PANELS - 2)) { // // Display the next button. // PushButtonImageOn(&g_sNext); PushButtonTextOn(&g_sNext); PushButtonFillOff(&g_sNext); WidgetPaint((tWidget *)&g_sNext); } // // Play the key click sound. // SoundPlay(g_pusKeyClick, sizeof(g_pusKeyClick) / 2); }