How to use Timers in Framewin?

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • How to use Timers in Framewin?

    Source Code

    1. static const GUI_WIDGET_CREATE_INFO _AnaMenu[] = {
    2. { FRAMEWIN_CreateIndirect, "Frame", FRAMEWIN_AnaMenu, 20, 20, 160, 200, 0, 100, 0 },
    3. { BUTTON_CreateIndirect, "Pompaci Menusü", Button_AnaMenu_1, 30, 20, 90, 40, 0, 0, 0 },
    4. { BUTTON_CreateIndirect, "Yönetici Menusü",Button_AnaMenu_2, 30, 65, 90, 40, 0, 0, 0 },
    5. { BUTTON_CreateIndirect, "Servis Menusü", Button_AnaMenu_3, 30, 110, 90, 40, 0, 0, 0 },
    6. };
    7. static void _DialogAnaMenu(WM_MESSAGE * pMsg) {
    8. WM_HWIN hItem;WM_HTIMER hTimer;
    9. int Id, NCode;
    10. switch (pMsg->MsgId) {
    11. case WM_INIT_DIALOG:
    12. hItem = pMsg->hWin;
    13. hTimer = WM_CreateTimer(hItem,0,1000,0);
    14. FRAMEWIN_SetTitleHeight(hItem, 30);
    15. FRAMEWIN_SetText(hItem, "Ana Menu");
    16. FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    17. FRAMEWIN_SetFont(hItem, GUI_FONT_20_1);
    18. FRAMEWIN_SetTextColor(hItem, GUI_RED);
    19. FRAMEWIN_SetBarColor(hItem, 0, GUI_GREEN);
    20. break;
    21. case WM_TIMER:
    22. blink = !blink;
    23. if(blink) WM_ShowWindow(hWin1); else WM_HideWindow(hWin1); // Another Window (hWin1)
    24. WM_RestartTimer(hTimer,1000);
    25. break;
    26. case WM_NOTIFY_PARENT:
    27. Id = WM_GetId(pMsg->hWinSrc);
    28. NCode = pMsg->Data.v;
    29. switch(Id) {
    30. case Button_AnaMenu_1:
    31. switch(NCode) {
    32. case WM_NOTIFICATION_CLICKED:
    33. break;
    34. case WM_NOTIFICATION_RELEASED:
    35. break;
    36. }
    37. break;
    38. case Button_AnaMenu_2:
    39. switch(NCode) {
    40. case WM_NOTIFICATION_CLICKED:
    41. break;
    42. case WM_NOTIFICATION_RELEASED:
    43. break;
    44. }
    45. break;
    46. case Button_AnaMenu_3:
    47. switch(NCode) {
    48. case WM_NOTIFICATION_CLICKED:
    49. break;
    50. case WM_NOTIFICATION_RELEASED:
    51. break;
    52. }
    53. break;
    54. }
    55. break;
    56. // USER START (Optionally insert additional message handling)
    57. // USER END
    58. default:
    59. WM_DefaultProc(pMsg);
    60. break;
    61. }
    62. }
    63. void MainTask(){
    64. hWin = GUI_CreateDialogBox(_AnaMenu, GUI_COUNTOF(_AnaMenu), &_DialogAnaMenu, WM_HBKWIN, 20, 120); // Ana Menü
    65. while(1) GUI_Exec();}
    Display All

    Why dont work Timers in Framewin? // Sorry My bad english
  • Look.I use Window when I changed the Framewin. It works timer but I used framewin not work :wacko:

    Source Code

    1. static const GUI_WIDGET_CREATE_INFO _AnaMenu[] = { { WINDOW_CreateIndirect, "Frame", FRAMEWIN_AnaMenu, 20, 20, 160, 200, 0, 100, 0 },
    2. { BUTTON_CreateIndirect, "Pompaci Menusü", Button_AnaMenu_1, 30, 20, 90, 40, 0, 0, 0 },
    3. { BUTTON_CreateIndirect, "Yönetici Menusü",Button_AnaMenu_2, 30, 65, 90, 40, 0, 0, 0 },
    4. { BUTTON_CreateIndirect, "Servis Menusü", Button_AnaMenu_3, 30, 110, 90, 40, 0, 0, 0 },
    5. };
    6. static void _DialogAnaMenu(WM_MESSAGE * pMsg) {
    7. WM_HWIN hItem; WM_HTIMER hTimer;
    8. int Id, NCode;
    9. switch (pMsg->MsgId) {
    10. case WM_INIT_DIALOG:
    11. hItem = pMsg->hWin;
    12. hTimer = WM_CreateTimer(hItem,0,1000,0);
    13. break;
    14. case WM_TIMER:
    15. blink = !blink;
    16. if(blink) WM_ShowWindow(hWin1); else WM_HideWindow(hWin1); // Another Window (hWin1)
    17. WM_RestartTimer(hTimer,1000);
    18. break;
    19. case WM_NOTIFY_PARENT:
    20. Id = WM_GetId(pMsg->hWinSrc);
    21. NCode = pMsg->Data.v;
    22. switch(Id) {
    23. case Button_AnaMenu_1:
    24. switch(NCode) {
    25. case WM_NOTIFICATION_CLICKED:
    26. break;
    27. case WM_NOTIFICATION_RELEASED:
    28. break;
    29. }
    30. break;
    31. case Button_AnaMenu_2:
    32. switch(NCode) {
    33. case WM_NOTIFICATION_CLICKED:
    34. break;
    35. case WM_NOTIFICATION_RELEASED:
    36. break;
    37. }
    38. break;
    39. case Button_AnaMenu_3:
    40. switch(NCode) {
    41. case WM_NOTIFICATION_CLICKED:
    42. break;
    43. case WM_NOTIFICATION_RELEASED:
    44. break;
    45. }
    46. break;
    47. }
    48. break;
    49. // USER START (Optionally insert additional message handling)
    50. // USER END
    51. default:
    52. WM_DefaultProc(pMsg);
    53. break;
    54. }
    55. }
    56. void MainTask(){
    57. hWin = GUI_CreateDialogBox(_AnaMenu, GUI_COUNTOF(_AnaMenu), &_DialogAnaMenu, WM_HBKWIN, 20, 120); // Ana Menü while(1) GUI_Exec();}
    Display All

    The post was edited 1 time, last by Buzkırıcı ().

  • It looks indeed that the timer doen't work on framewin

    Strange that the thread is so old without a resolution, because I notice the same problem working in my project.

    This is the code where I've found the issue. If I use framewin instead of Window the timers work.

    C Source Code

    1. #define TempArraySize 16
    2. // Widgets' IDs.
    3. enum{
    4. ID_WDG_FRAMEWIN = 0,
    5. ID_WDG_TEXT,
    6. ID_WDG_PROGBAR,
    7. ID_WDG_BTN_CANCEL
    8. };
    9. static char progbar_value = 0;
    10. static const GUI_WIDGET_CREATE_INFO widget_info[] =
    11. {
    12. // TODO - Usar FRAMEWIN_CreateIndirect
    13. { WINDOW_CreateIndirect, NULL, ID_WDG_FRAMEWIN, 0, 0, 400, 200, 0 },
    14. { TEXT_CreateIndirect, NULL, ID_WDG_TEXT, 100, 20, 200, 40, 0, 0, 0 },
    15. { PROGBAR_CreateIndirect, NULL, ID_WDG_PROGBAR, 100, 60, 200, 40, 0 },
    16. { BUTTON_CreateIndirect, NULL, ID_WDG_BTN_CANCEL, 100, 100, 200, 40, 0, 0, 0 }
    17. };
    18. enum TIMER_ID
    19. {
    20. TIMER_ID_INIT = 0,
    21. TIMER_ID_TICK
    22. };
    23. // Dialog's handle
    24. static WM_HWIN wm_hwin = 0;
    25. static void cbMain(WM_MESSAGE* pMsg)
    26. {
    27. WM_HWIN myHd = pMsg->hWin;
    28. WM_HWIN hwin;
    29. int id, nCode;
    30. // char i;
    31. int timer_id;
    32. char tmp_array[TempArraySize];
    33. switch (pMsg->MsgId)
    34. {
    35. case WM_INIT_DIALOG:
    36. {
    37. // snprintf(tmp_array, TempArraySize, "%s", "Communication");
    38. // FRAMEWIN_SetText(myHd, tmp_array);
    39. hwin = WM_GetDialogItem(myHd, ID_WDG_TEXT);
    40. snprintf(tmp_array, TempArraySize, "%s", "Aproxime o imã do sensor ...");
    41. TEXT_SetText(hwin, tmp_array);
    42. TEXT_SetBkColor(hwin, GUI_WHITE);
    43. hwin = WM_GetDialogItem(myHd, ID_WDG_BTN_CANCEL);
    44. snprintf(tmp_array, TempArraySize, "%s", _tCANCEL);
    45. BUTTON_SetText(hwin, tmp_array);
    46. WM_DisableWindow(hwin);
    47. progbar_value = 0;
    48. WM_CreateTimer(myHd, TIMER_ID_INIT, 100, 0);
    49. WM_CreateTimer(myHd, TIMER_ID_TICK, 1000, 0);
    50. }
    51. break;
    52. case WM_NOTIFY_PARENT:
    53. {
    54. id = WM_GetId(pMsg->hWinSrc);
    55. nCode = pMsg->Data.v;
    56. switch(id)
    57. {
    58. case ID_WDG_BTN_CANCEL:
    59. {
    60. switch(nCode)
    61. {
    62. case WM_NOTIFICATION_RELEASED:
    63. {
    64. ...
    65. }
    66. break;
    67. }
    68. }
    69. break;
    70. }
    71. }
    72. break;
    73. case WM_TIMER:
    74. {
    75. timer_id = WM_GetTimerId(pMsg->Data.v);
    76. if(timer_id == TIMER_ID_INIT)
    77. {
    78. ...
    79. }
    80. else if(timer_id == TIMER_ID_TICK)
    81. {
    82. ...
    83. WM_RestartTimer(pMsg->Data.v, 1000);
    84. }
    85. }
    86. break;
    87. default:
    88. { WM_DefaultProc(pMsg); } break;
    89. }
    90. }
    91. void POPUP_COMM_new()
    92. {
    93. wm_hwin = GUI_CreateDialogBox( widget_info,
    94. GUI_COUNTOF(widget_info),
    95. cbMain,
    96. WM_HBKWIN, // Background window
    97. 200, 50);
    98. WM_MakeModal(wm_hwin);
    99. }
    100. void POPUP_COMM_free()
    101. {
    102. GUI_EndDialog(wm_hwin, 0);
    103. }
    104. WM_HWIN POPUP_COMM_get_handle()
    105. {
    106. return wm_hwin;
    107. }
    Display All

    The post was edited 2 times, last by RodolfoDias ().

  • Hi,

    The FRAMEWIN doesn't react on WM_TIMER messages per default. In this case you have to overwrite the callback. Even though it seems strange, this is neccessary.

    Try this:

    C Source Code

    1. /*********************************************************************
    2. *
    3. * _cbFrameWin
    4. */
    5. static void _cbFrameWin(WM_MESSAGE * pMsg) {
    6. switch (pMsg->MsgId) {
    7. case WM_TIMER:
    8. WM_Invalidate(pMsg->hWin);
    9. WM_RestartTimer(pMsg->Data.v, 1000);
    10. break;
    11. default:
    12. FRAMEWIN_Callback(pMsg);
    13. break;
    14. }
    15. }
    16. /*********************************************************************
    17. *
    18. * _cbDialog
    19. */
    20. static void _cbDialog(WM_MESSAGE * pMsg) {
    21. GUI_COLOR aColor[] = { GUI_RED, GUI_GREEN, GUI_BLUE };
    22. static int Index;
    23. switch (pMsg->MsgId) {
    24. case WM_INIT_DIALOG:
    25. WM_SetCallback(pMsg->hWin, _cbFrameWin);
    26. WM_CreateTimer(pMsg->hWin, 0, 1000, 0);
    27. break;
    28. case WM_PAINT:
    29. GUI_SetBkColor(aColor[Index++]);
    30. GUI_Clear();
    31. Index = (Index == GUI_COUNTOF(aColor)) ? 0 : Index;
    32. break;
    33. default:
    34. WM_DefaultProc(pMsg);
    35. break;
    36. }
    37. }
    Display All


    Regards,
    Sven
    Please read the forum rules before posting.

    Keep in mind, this is *not* a support forum.
    Our engineers will try to answer your questions between their projects if possible but this can be delayed by longer periods of time.
    Should you be entitled to support you can contact us via our support system: segger.com/ticket/

    Or you can contact us via e-mail.
  • It has worked perfectly.

    It is even possible to add multiple timeouts.

    C Source Code

    1. /*********************************************************************
    2. *
    3. * _cbFrameWin
    4. */
    5. static void _cbFrameWin(WM_MESSAGE * pMsg) {
    6. switch (pMsg->MsgId) {
    7. case WM_TIMER:
    8. timer_id = WM_GetTimerId(pMsg->Data.v);
    9. if(timer_id == TIMER_ID_INIT)
    10. {
    11. // TIMER_ID_INIT executes only once.
    12. }
    13. else if(timer_id == TIMER_ID_TICK)
    14. {
    15. // TIME_ID_TICK executes each second.
    16. WM_RestartTimer(pMsg->Data.v, 1000);
    17. }
    18. break;
    19. default:
    20. FRAMEWIN_Callback(pMsg);
    21. break;
    22. }
    23. }
    24. /*********************************************************************
    25. *
    26. * _cbDialog
    27. */
    28. static void _cbDialog(WM_MESSAGE * pMsg) {
    29. GUI_COLOR aColor[] = { GUI_RED, GUI_GREEN, GUI_BLUE };
    30. static int Index;
    31. switch (pMsg->MsgId) {
    32. case WM_INIT_DIALOG:
    33. WM_SetCallback(pMsg->hWin, _cbFrameWin);
    34. WM_SetCallback(myHd, cbFrameWin);
    35. WM_CreateTimer(myHd, TIMER_ID_INIT, 100, 0);
    36. WM_CreateTimer(myHd, TIMER_ID_TICK, 1000, 0);
    37. break;
    38. case WM_PAINT:
    39. GUI_SetBkColor(aColor[Index++]);
    40. GUI_Clear();
    41. Index = (Index == GUI_COUNTOF(aColor)) ? 0 : Index;
    42. break;
    43. default:
    44. WM_DefaultProc(pMsg);
    45. break;
    46. }
    47. }
    Display All


    Thanks.

    The post was edited 1 time, last by RodolfoDias ().