working_modes.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #include "main.h"
  2. void tracking_pause(unsigned char cmd, unsigned char display) {
  3. switch (cmd) {
  4. case TRACKING_PAUSE_CMD_TOGGLE:
  5. System.tracking_paused = !System.tracking_paused;
  6. break;
  7. case TRACKING_PAUSE_CMD_RESUME:
  8. System.tracking_paused = 0;
  9. break;
  10. case TRACKING_PAUSE_CMD_PAUSE:
  11. System.tracking_paused = 1;
  12. break;
  13. }
  14. if (System.tracking_paused) {
  15. LEDB_ON();
  16. if (display)
  17. display_event(DISPLAY_EVENT_TRACKING_PAUSED);
  18. } else {
  19. LEDB_OFF();
  20. if (display)
  21. display_event(DISPLAY_EVENT_TRACKING_RESUMED);
  22. }
  23. }
  24. unsigned char tracking_pause_cmd(void) {
  25. tracking_pause(TRACKING_PAUSE_CMD_TOGGLE, 1);
  26. return 0;
  27. }
  28. __flash const char *pause_tracking_get_name(void) {
  29. if (System.tracking_paused)
  30. return PSTR("> Wznow rejestr.");
  31. else
  32. return PSTR("> Wstrzymaj rej.");
  33. }
  34. unsigned char save_point(void) {
  35. if (System.location_valid) {
  36. gpx_save_single_point(&location);
  37. display_event(DISPLAY_EVENT_POINT_SAVED);
  38. } else {
  39. display_event(DISPLAY_EVENT_POINT_NOT_SAVED);
  40. }
  41. return 0;
  42. }
  43. unsigned char new_file(void) {
  44. System.open_new_file = 1;
  45. return 0;
  46. }
  47. __flash const char _menu_header[] = " *** MENU *** ";
  48. __flash const char _settings[] = "> Ustawienia";
  49. __flash const char _new_file[] = "> Nowy plik";
  50. __flash const char _save_point[] = "> Zapisz punkt";
  51. __flash const struct menu_pos main_menu_list[] = {
  52. {
  53. .type = MENU_TYPE_FUNCTION,
  54. .display_type = MENU_DISPLAY_TYPE_STRING,
  55. .name = _menu_header,
  56. .value = _save_point,
  57. .func = save_point,
  58. .allow_back = 1,
  59. },
  60. {
  61. .type = MENU_TYPE_FUNCTION,
  62. .display_type = MENU_DISPLAY_TYPE_STRING,
  63. .name = _menu_header,
  64. .value = _settings,
  65. .func = enter_settings,
  66. .allow_back = 1,
  67. },
  68. {
  69. .type = MENU_TYPE_FUNCTION,
  70. .display_type = MENU_DISPLAY_TYPE_NAME_CSFUNCTION,
  71. .name = _menu_header,
  72. .csdisplay = pause_tracking_get_name,
  73. .func = tracking_pause_cmd,
  74. .allow_back = 1,
  75. },
  76. {
  77. .type = MENU_TYPE_FUNCTION,
  78. .display_type = MENU_DISPLAY_TYPE_STRING,
  79. .name = _menu_header,
  80. .value = _new_file,
  81. .func = new_file,
  82. .allow_back = 1,
  83. },
  84. };
  85. __flash const struct menu_struct main_menu = {
  86. .list = main_menu_list,
  87. .num = sizeof(main_menu_list) / sizeof(main_menu_list[0]),
  88. };
  89. __flash const struct menu_pos default_menu_list[] = {
  90. {
  91. .type = MENU_TYPE_FUNCTION,
  92. .display_type = MENU_DISPLAY_TYPE_FUNCTION,
  93. .display = disp_func_main_default,
  94. .func = enter_main_menu,
  95. },
  96. {
  97. .type = MENU_TYPE_FUNCTION,
  98. .display_type = MENU_DISPLAY_TYPE_FUNCTION,
  99. .display = disp_func_coord,
  100. .func = enter_main_menu,
  101. },
  102. {
  103. .type = MENU_TYPE_FUNCTION,
  104. .display_type = MENU_DISPLAY_TYPE_FUNCTION,
  105. .display = disp_func_ele_sat,
  106. .func = enter_main_menu,
  107. },
  108. {
  109. .type = MENU_TYPE_FUNCTION,
  110. .display_type = MENU_DISPLAY_TYPE_FUNCTION,
  111. .display = disp_distance_and_time,
  112. .func = enter_main_menu,
  113. },
  114. {
  115. .type = MENU_TYPE_FUNCTION,
  116. .display_type = MENU_DISPLAY_TYPE_FUNCTION,
  117. .display = disp_speed,
  118. .func = enter_main_menu,
  119. },
  120. {
  121. .type = MENU_TYPE_FUNCTION,
  122. .display_type = MENU_DISPLAY_TYPE_FUNCTION,
  123. .display = disp_pause_time,
  124. .func = enter_main_menu,
  125. },
  126. {
  127. .type = MENU_TYPE_FUNCTION,
  128. .display_type = MENU_DISPLAY_TYPE_FUNCTION,
  129. .display = disp_time,
  130. .func = enter_main_menu,
  131. },
  132. {
  133. .type = MENU_TYPE_FUNCTION,
  134. .display_type = MENU_DISPLAY_TYPE_FUNCTION,
  135. .display = disp_func_temperature,
  136. .func = enter_main_menu,
  137. },
  138. {
  139. .type = MENU_TYPE_FUNCTION_WITH_KEY,
  140. .display_type = MENU_DISPLAY_TYPE_FUNCTION,
  141. .display = disp_func_global_error,
  142. .func_key = error_browser_func,
  143. },
  144. };
  145. __flash const struct menu_struct default_menu = {
  146. .list = default_menu_list,
  147. .num = sizeof(default_menu_list) / sizeof(default_menu_list[0]),
  148. };
  149. unsigned char enter_settings(void) {
  150. menu_push(settings_menu);
  151. return 1;
  152. }
  153. unsigned char enter_main_menu(void) {
  154. menu_push(main_menu);
  155. return 1;
  156. }
  157. void check_error_and_jump(void) {
  158. static unsigned int prev_error = ERROR_NO;
  159. struct menu_struct *curr;
  160. /* Only act if we're in the default menu and error changed */
  161. if (__menu_num != 1)
  162. return;
  163. curr = menu_get();
  164. if (curr->list != default_menu_list)
  165. return;
  166. /* Check if a new error occurred */
  167. if (System.global_error != ERROR_NO && prev_error == ERROR_NO) {
  168. /* Jump to last menu item (error display) */
  169. curr->ind = curr->num - 1;
  170. display_refresh(1);
  171. }
  172. prev_error = System.global_error;
  173. }