void MainTask_Gyro(void) { SysTICK(); float Buffer[6] = {0}; uint8_t Xval, Yval = 0x00; Demo_GyroConfig(); SetemWinRunning(1); GUI_SelectLayer(1); // select foregroung layer GUI_SetBkColor(STBLUE); // select background color as a solid color GUI_Clear(); // fill with the background color GRAPH_DATA_Handle hData1, hData2, hData3; GRAPH_SCALE_Handle hScale; WM_HWIN hGraph; hGraph = GRAPH_CreateEx(0, 0, 240, 320, WM_HBKWIN, WM_CF_SHOW, 0, GUI_ID_GRAPH0); hData1 = GRAPH_DATA_YT_Create(GUI_GREEN, 240, 0, 0); hData2 = GRAPH_DATA_YT_Create(GUI_RED, 240, 0, 0); //hData3 = GRAPH_DATA_YT_Create(GUI_BLUE, 240, 0, 0); GRAPH_AttachData(hGraph, hData1); GRAPH_AttachData(hGraph, hData2); //GRAPH_AttachData(hGraph, hData3); hScale = GRAPH_SCALE_Create(19, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 20); GRAPH_SCALE_SetFactor(hScale, 0.5); GRAPH_SCALE_SetNumDecs(hScale, 0.01); GRAPH_SCALE_SetFont(hScale, &GUI_Font16_1); GRAPH_SCALE_SetTextColor(hScale, GUI_BLACK); GRAPH_AttachScale(hGraph, hScale); GRAPH_SetBorder(hGraph, 20, 0, 0, 0); GRAPH_SetGridVis(hGraph, 1); GRAPH_SetColor(hGraph, GUI_WHITE, GRAPH_CI_BK); GRAPH_SetColor(hGraph, GUI_LIGHTGRAY, GRAPH_CI_BORDER); GRAPH_SetColor(hGraph, GUI_BLACK, GRAPH_CI_FRAME); GRAPH_SetColor(hGraph, GUI_DARKGRAY, GRAPH_CI_GRID); GRAPH_SetLineStyleH(hGraph, GUI_LS_DOT); GRAPH_SetLineStyleV(hGraph, GUI_LS_DOT); GRAPH_SetGridDistX(hGraph, 50); GRAPH_SetGridDistY(hGraph, 20); GUI_Exec(); STM_EVAL_LEDToggle(LED4); STM_EVAL_LEDToggle(LED3); // the GUI is now rendered // in never ending loop just check if an incon is touched while(!tamperPushed) { if(open){ /* Read Gyro Angular data */ Demo_GyroReadAngRate(Buffer); /* Update autoreload and capture compare registers value*/ Xval = ABS((int8_t)(Buffer[0])); Yval = ABS((int8_t)(Buffer[1])); GRAPH_DATA_YT_AddValue(hData1, Xval*2); GRAPH_DATA_YT_AddValue(hData2, Yval*2); GUI_Exec(); open=0; } } // WM_DeleteWindow(hGraph); SetemWinRunning(0); GUI_CURSOR_Hide(); }
static void _cbDialoggraph(WM_MESSAGE * pMsg) { WM_HWIN hItem; int NCode; int Id; // USER START (Optionally insert additional variables) // USER END switch (pMsg->MsgId) { case WM_INIT_DIALOG: { hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_GRAPH0); GRAPH_DATA_Handle hData; GRAPH_SCALE_Handle hScale; WM_HWIN hGraph; // hGraph = GRAPH_CreateEx(10, 10, 216, 106, WM_HBKWIN, WM_CF_SHOW, 0, GUI_ID_GRAPH0); // hData = GRAPH_DATA_YT_Create(GUI_DARKGREEN, 200, 5, 0); // GRAPH_AttachData(hGraph, hData); // hScale = GRAPH_SCALE_Create(28, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 20); // GRAPH_AttachScale(hGraph, hScale); _InitPoints(_aNumPoints[0]); for (int i = 0; i < 3; i++) { // _ahDataXY[i] = GRAPH_DATA_XY_Create(GUI_RED, _NumPoints, _aPoint[i], _NumPoints); _ahDataXY[i] = GRAPH_DATA_XY_Create(GUI_RED, 200, 5, 0); GRAPH_DATA_XY_SetLineStyle(_ahDataXY[i], GUI_LS_SOLID); GRAPH_AttachData(hItem, _ahDataXY[i]); // GRAPH_DATA_XY_SetOwnerDraw(_ahDataXY[i], _OwnerDraw); } // Set graph attributes // GRAPH_SetGridDistY(hItem, 25); GRAPH_SetGridVis(hItem, 1); GRAPH_SetUserDraw(hItem, _UserDraw); // // Create and add vertical scale // _hScaleV = GRAPH_SCALE_Create( 35, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 25); GRAPH_SCALE_SetOff(_hScaleV, 100); GRAPH_SCALE_SetFactor(_hScaleV, 0.04f); GRAPH_SCALE_SetTextColor(_hScaleV, GUI_RED); GRAPH_AttachScale(hItem, _hScaleV); // // Create and add horizontal scale // _hScaleH = GRAPH_SCALE_Create(70, GUI_TA_HCENTER, GRAPH_SCALE_CF_HORIZONTAL, 50); GRAPH_SCALE_SetFactor(_hScaleH, 0.02f); GRAPH_SCALE_SetTextColor(_hScaleH, GUI_DARKGREEN); GRAPH_AttachScale(hItem, _hScaleH); GRAPH_SCALE_SetNumDecs(_hScaleV, 0); GRAPH_SetVSizeX(hItem, 500); hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1); EDIT_SetText(hItem, "123"); // USER START (Optionally insert additional code for further widget initialization) // USER END break; } case WM_NOTIFY_PARENT: { Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v; switch(Id) { case ID_EDIT_1: // Notifications sent by 'Edit' switch(NCode) { case WM_NOTIFICATION_CLICKED: // USER START (Optionally insert code for reacting on notification message) // USER END break; case WM_NOTIFICATION_RELEASED: // USER START (Optionally insert code for reacting on notification message) // USER END break; case WM_NOTIFICATION_VALUE_CHANGED: // USER START (Optionally insert code for reacting on notification message) // USER END break; // USER START (Optionally insert additional code for further notification handling) // USER END } break; // USER START (Optionally insert additional code for further Ids) // USER END } break; } // USER START (Optionally insert additional message handling) // USER END default: { WM_DefaultProc(pMsg); break; } } }
/********************************************************************* * * _cbCallback * * Purpose: * Callback function of the dialog */ static void _cbCallback(WM_MESSAGE * pMsg) { int NCode, Id, Value, i; WM_HWIN hDlg, hItem; hDlg = pMsg->hWin; switch (pMsg->MsgId) { case WM_INIT_DIALOG: hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); _InitPoints(); /* Add graphs */ for (i = 0; i < 3; i++) { GRAPH_DATA_Handle hDataXY; hDataXY = GRAPH_DATA_XY_Create(_aColor[i], GUI_COUNTOF(_aPoint[i]), _aPoint[i], GUI_COUNTOF(_aPoint[i])); GRAPH_DATA_XY_SetLineStyle(hDataXY, _aLStyle[i]); GRAPH_AttachData(hItem, hDataXY); } /* Set graph attributes */ GRAPH_SetGridDistY(hItem, 25); GRAPH_SetGridVis(hItem, 1); GRAPH_SetUserDraw(hItem, _UserDraw); /* Create and add vertical scale */ _hScaleV = GRAPH_SCALE_Create( 35, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 25); GRAPH_SCALE_SetOff(_hScaleV, 100); GRAPH_SCALE_SetFactor(_hScaleV, 0.04f); GRAPH_SCALE_SetTextColor(_hScaleV, GUI_RED); GRAPH_AttachScale(hItem, _hScaleV); /* Create and add horizontal scale */ _hScaleH = GRAPH_SCALE_Create(70, GUI_TA_HCENTER, GRAPH_SCALE_CF_HORIZONTAL, 50); GRAPH_SCALE_SetFactor(_hScaleH, 0.02f); GRAPH_SCALE_SetTextColor(_hScaleH, GUI_DARKGREEN); GRAPH_AttachScale(hItem, _hScaleH); /* Init check boxes */ hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK2); CHECKBOX_SetText(hItem, "L"); CHECKBOX_SetState(hItem, 1); hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK3); CHECKBOX_SetText(hItem, "T"); hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK4); CHECKBOX_SetText(hItem, "R"); hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK5); CHECKBOX_SetText(hItem, "B"); hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK1); CHECKBOX_SetText(hItem, "Grid"); CHECKBOX_SetState(hItem, 1); hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK6); CHECKBOX_SetText(hItem, "HScroll"); hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK7); CHECKBOX_SetText(hItem, "VScroll"); /* Init slider widgets */ hItem = WM_GetDialogItem(hDlg, GUI_ID_SLIDER0); SLIDER_SetRange(hItem, 0, 10); SLIDER_SetValue(hItem, 5); SLIDER_SetNumTicks(hItem, 6); hItem = WM_GetDialogItem(hDlg, GUI_ID_SLIDER1); SLIDER_SetRange(hItem, 0, 20); SLIDER_SetValue(hItem, 5); SLIDER_SetNumTicks(hItem, 6); /* Init radio widget */ hItem = WM_GetDialogItem(hDlg, GUI_ID_RADIO0); RADIO_SetText(hItem, "3D", 0); RADIO_SetText(hItem, "flat", 1); RADIO_SetText(hItem, "-", 2); /* Init button widget */ hItem = WM_GetDialogItem(hDlg, GUI_ID_BUTTON0); WM_SetStayOnTop(hItem, 1); break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */ NCode = pMsg->Data.v; /* Notification code */ switch (NCode) { case WM_NOTIFICATION_CLICKED: switch (Id) { case GUI_ID_BUTTON0: _ToggleFullScreenMode(hDlg); break; } break; case WM_NOTIFICATION_VALUE_CHANGED: switch (Id) { case GUI_ID_CHECK1: /* Toggle grid */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); GRAPH_SetGridVis(hItem, CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK1))); break; case GUI_ID_CHECK2: case GUI_ID_CHECK3: case GUI_ID_CHECK4: case GUI_ID_CHECK5: /* Toggle border */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); GRAPH_SetBorder(hItem, CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK2)) * 40, CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK3)) * 5, CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK4)) * 5, CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK5)) * 5); break; case GUI_ID_SLIDER0: /* Set horizontal grid spacing */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); Value = SLIDER_GetValue(pMsg->hWinSrc) * 10; GRAPH_SetGridDistX(hItem, Value); GRAPH_SCALE_SetTickDist(_hScaleH, Value); if (Value != 50) { GRAPH_SCALE_SetNumDecs(_hScaleH, 1); } else { GRAPH_SCALE_SetNumDecs(_hScaleH, 0); } break; case GUI_ID_SLIDER1: /* Set vertical grid spacing */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); Value = SLIDER_GetValue(pMsg->hWinSrc) * 5; GRAPH_SetGridDistY(hItem, Value); GRAPH_SCALE_SetTickDist(_hScaleV, Value); if (Value != 25) { GRAPH_SCALE_SetNumDecs(_hScaleV, 1); } else { GRAPH_SCALE_SetNumDecs(_hScaleV, 0); } break; case GUI_ID_RADIO0: /* Set the widget effect */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); switch (RADIO_GetValue(pMsg->hWinSrc)) { case 0: WIDGET_SetEffect(hItem, &WIDGET_Effect_3D); break; case 1: WIDGET_SetEffect(hItem, &WIDGET_Effect_Simple); break; case 2: WIDGET_SetEffect(hItem, &WIDGET_Effect_None); break; } break; case GUI_ID_CHECK6: /* Toggle horizontal scroll bar */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); if (CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK6))) { GRAPH_SetVSizeX(hItem, 500); } else { GRAPH_SetVSizeX(hItem, 0); } break; case GUI_ID_CHECK7: /* Toggle vertical scroll bar */ hItem = WM_GetDialogItem(hDlg, GUI_ID_GRAPH0); if (CHECKBOX_IsChecked(WM_GetDialogItem(hDlg, GUI_ID_CHECK7))) { GRAPH_SetVSizeY(hItem, 300); } else { GRAPH_SetVSizeY(hItem, 0); } break; } break; } break; default: WM_DefaultProc(pMsg); } }
/********************************************************************* * * MainTask */ void MainTask(void) { GUI_Init(); WM_SetDesktopColor(GUI_BLUE); //!< SetDesktopColor /* The First window to display the Temperature Curve */ { hWM_HBKWIN_CURVE = WM_CreateWindow(0,0,400,240,WM_CF_SHOW | WM_CF_MEMDEV ,0,0); btn = BUTTON_CreateAsChild(315, 10, 75, 35,hWM_HBKWIN_CURVE, ID_CURVE_BTN_SWTITCH_2_PARA, WM_CF_SHOW); btnClear = BUTTON_CreateAsChild(315, 60, 75, 35,hWM_HBKWIN_CURVE, 202, WM_CF_SHOW); /** PWM Edit **/ { /* Edit to display the PWM1 */ Edit_PWM1 = EDIT_CreateEx (370, 170, 25, 20,hWM_HBKWIN_CURVE, WM_CF_SHOW,EDIT_CF_HCENTER | EDIT_CF_VCENTER,ID_CFG_PID_EDT_PWM1, 3); EDIT_SetDecMode(Edit_PWM1,0,0,255,0,0); EDIT_SetValue(Edit_PWM1,0); /* Edit to display the PWM2 */ Edit_PWM2 = EDIT_CreateEx (370, 190, 25, 20,hWM_HBKWIN_CURVE, WM_CF_SHOW,EDIT_CF_HCENTER | EDIT_CF_VCENTER,ID_CFG_PID_EDT_PWM2, 3); EDIT_SetDecMode(Edit_PWM2,0,0,255,0,0); EDIT_SetValue(Edit_PWM2,0); /* Edit to display the PWM3 */ Edit_PWM3 = EDIT_CreateEx (370, 210, 25, 20,hWM_HBKWIN_CURVE, WM_CF_SHOW,EDIT_CF_HCENTER | EDIT_CF_VCENTER,ID_CFG_PID_EDT_PWM3, 3); EDIT_SetDecMode(Edit_PWM3,0,0,255,0,0); EDIT_SetValue(Edit_PWM3,0); } // Set Callback function for background window WM_SetCallback(hWM_HBKWIN_CURVE, _cbBk); } { hWM_HBKWIN_CFG_PID = WM_CreateWindow(0,0,400,240,WM_CF_HIDE | WM_CF_MEMDEV ,0,0); //Add the | WM_CF_MEMDEV flah btn1 = BUTTON_CreateAsChild(320, 30 , 60, 35,hWM_HBKWIN_CFG_PID, ID_CFG_PID_BTN_SWTITCH_2_CURVE, WM_CF_SHOW); btnClear1 = BUTTON_CreateAsChild(320, 75, 60, 35,hWM_HBKWIN_CFG_PID, 203, WM_CF_SHOW); BUTTON_SetText(btn1,"PID_Set"); BUTTON_SetText(btnClear1,"Back"); BUTTON_SetText(btn ,"Running"); BUTTON_SetText(btnClear,"PID_Set"); WM_SetCallback(hWM_HBKWIN_CFG_PID, _cbBk_CFG_PID); } //!< Create a graph widget { hGraph = GRAPH_CreateEx(8, 10, 300, 220, hWM_HBKWIN_CURVE, WM_CF_SHOW | WM_CF_CONST_OUTLINE | WM_CF_MEMDEV_ON_REDRAW , 0, 100); //GRAPH_DATA_YT_MirrorX(hGraph , 1); //!< Create a YT_data hData = GRAPH_DATA_YT_Create(GUI_BLUE, 292,0, 0); // Set the MaxItemNum to 0 hData2 = GRAPH_DATA_YT_Create(GUI_RED,292,0,0); GRAPH_AttachData(hGraph, hData); //!< Attach the data to graph GRAPH_AttachData(hGraph, hData2); //!< Attach the data to graph } WM_ShowWindow(hWM_HBKWIN_CURVE); WM_HideWindow(hWM_HBKWIN_CFG_PID); /* WM_BringToTop(hWM_HBKWIN); WM_BringToBottom(hWM_HBKWIN_CFG_PID); WM_MoveTo(hWM_HBKWIN_CFG_PID,400,240); WM_ResizeWindow(hWM_HBKWIN_CFG_PID,1,1); */ #ifdef PWM_TEXT /** PWM Text **/ { /* Edit to display the PWM1 */ Text_PWM1 = TEXT_CreateEx (310, 170, 30, 20,hWM_HBKWIN_CURVE, WM_CF_SHOW,EDIT_CF_HCENTER | EDIT_CF_VCENTER,ID_CFG_PID_TXT_PWM1, "PMW1"); /* Edit to display the PWM2 */ Text_PWM2 = TEXT_CreateEx (310, 190, 30, 20,hWM_HBKWIN_CURVE, WM_CF_SHOW,EDIT_CF_HCENTER | EDIT_CF_VCENTER,ID_CFG_PID_TXT_PWM2, "PWM2"); /* Edit to display the PWM3 */ Text_PWM3 = TEXT_CreateEx (310, 210, 30, 20,hWM_HBKWIN_CURVE, WM_CF_SHOW,EDIT_CF_HCENTER | EDIT_CF_VCENTER,ID_CFG_PID_TXT_PWM3, "PWM3"); } #endif #ifdef EDIT_AD { /* Edit to display the AD1 */ Edit_AD1 = EDIT_CreateEx (350, 120, 35, 20,hWM_HBKWIN_CURVE, WM_CF_SHOW,EDIT_CF_HCENTER | EDIT_CF_VCENTER,ID_CFG_PID_EDT_AD1, 5); EDIT_SetDecMode(Edit_AD1,0,0,4095,0,0); EDIT_SetValue(Edit_AD1,0); /* Edit to display the AD2 */ Edit_AD2 = EDIT_CreateEx (350, 140, 35, 20,hWM_HBKWIN_CURVE, WM_CF_SHOW,EDIT_CF_HCENTER | EDIT_CF_VCENTER,ID_CFG_PID_EDT_AD2, 5); EDIT_SetDecMode(Edit_AD2,0,0,4095,0,0); EDIT_SetValue(Edit_AD2,0); EDIT_SetFloatMode( Edit_AD1,1.0, 0.0,99.9,1,/*1 bit after dot*/ 0 ); EDIT_SetFloatMode( Edit_AD2,0.0, 0.0,99.9,1,/*1 bit after dot*/ 0 ); } #endif //!< Graph configuration { hScale = GRAPH_SCALE_Create(28, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 20); GRAPH_SCALE_SetTextColor(hScale,GUI_GREEN); GRAPH_SCALE_SetFactor(hScale,0.5); GRAPH_SCALE_SetNumDecs(hScale,1); GRAPH_AttachScale(hGraph, hScale); GRAPH_SetGridDistX(hGraph,0); // Hide the X Grid GRAPH_SetGridDistY(hGraph,20); GRAPH_SetGridVis(hGraph,1); //!< Display the Grid GRAPH_SetBorder(hGraph,30,5,5,5); //!< Set the frame border //GRAPH_SetGridFixedX(hGraph,1); //GRAPH_SetVSizeX(hGraph,500); //加入此会导致死掉 程序卡死在获取此指针上面. //GRAPH_SetGridFixedY(hGraph,1); GRAPH_SetColor(hGraph,GUI_BLUE,GRAPH_CI_BORDER); GRAPH_SetColor(hGraph,GUI_WHITE,GRAPH_CI_BK); GRAPH_SetColor(hGraph,GUI_WHITE,GRAPH_CI_FRAME); } /* Button Configuration */ { BUTTON_SetBkColor(btn,BUTTON_CI_UNPRESSED,GUI_LIGHTBLUE); BUTTON_SetBkColor(btn,BUTTON_CI_PRESSED,GUI_RED); BUTTON_SetFocusColor(btn,GUI_YELLOW); } while(1) { GUI_Exec(); OSTimeDlyHMSM(0,0,0,50); //#define DRAWPOINT #ifdef DRAWPOINT itoa(usValue, buf, 10); BUTTON_SetText(btn,buf); // GRAPH_DATA_YT_AddValue(hData,usValue/20); #endif } }