Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

110 рядки
2.4 KiB

  1. #include "Debug.h"
  2. #include "Flash.h"
  3. #define MENU_ENTRY(name, text) const char MENU_##name[] PROGMEM = text
  4. MENU_ENTRY(HEADER, "-- Debug Menu --");
  5. MENU_ENTRY(SEPARATOR, "----");
  6. MENU_ENTRY(RUN, "[0] Run");
  7. MENU_ENTRY(RUN_ONCE, "[1] Run once");
  8. MENU_ENTRY(RAM, "[2] Read battery");
  9. MENU_ENTRY(READ_BATTERY, "[3] Read battery");
  10. MENU_ENTRY(GPS_ON, "[4] GPS On");
  11. MENU_ENTRY(GPS_OFF, "[5] GPS Off");
  12. MENU_ENTRY(GPS_GET, "[6] Get GPS position");
  13. MENU_ENTRY(RTC_ON, "[7] RTC On");
  14. MENU_ENTRY(RTC_OFF, "[8] RTC Off");
  15. MENU_ENTRY(RTC_SET, "[9] Get RTC time");
  16. MENU_ENTRY(RTC_GET, "[10] Set RTC time");
  17. MENU_ENTRY(QUESTION, "?");
  18. const char * const MENU_ENTRIES[] PROGMEM = {
  19. MENU_HEADER,
  20. MENU_RUN,
  21. MENU_RUN_ONCE,
  22. MENU_SEPARATOR,
  23. MENU_RAM,
  24. MENU_READ_BATTERY,
  25. MENU_SEPARATOR,
  26. MENU_GPS_ON,
  27. MENU_GPS_OFF,
  28. MENU_GPS_GET,
  29. MENU_SEPARATOR,
  30. MENU_RTC_ON,
  31. MENU_RTC_OFF,
  32. MENU_RTC_SET,
  33. MENU_RTC_GET,
  34. MENU_QUESTION
  35. };
  36. int freeRam2() {
  37. extern int __heap_start, *__brkval;
  38. int v;
  39. return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval);
  40. }
  41. namespace debug {
  42. void waitForSerial() {
  43. while (!Serial);
  44. Serial.begin(DEBUG_SERIAL_SPEED);
  45. }
  46. int freeRam() {
  47. return freeRam2();
  48. }
  49. GPSTRACKER_DEBUG_COMMAND menu() {
  50. if (!Serial) return GPSTRACKER_DEBUG_COMMAND::NONE;
  51. uint8_t command;
  52. while (command > static_cast<uint8_t>(GPSTRACKER_DEBUG_COMMAND::RTC_SET)) {
  53. for (uint8_t i = 0; i < flash::getFlashArraySize(MENU_ENTRIES); i++) {
  54. Serial.println(reinterpret_cast<const __FlashStringHelper *>(pgm_read_word(MENU_ENTRIES[i])));
  55. }
  56. while (!Serial.available());
  57. command = static_cast<uint8_t>(Serial.parseInt());
  58. }
  59. return static_cast<GPSTRACKER_DEBUG_COMMAND>(command);
  60. }
  61. void getAndDisplayGpsPosition() {
  62. SIM808_GPS_STATUS gpsStatus = gps::acquireCurrentPosition(GPS_DEFAULT_TOTAL_TIMEOUT_MS);
  63. Log.notice(F("%d %s"), gpsStatus, gps::lastPosition);
  64. }
  65. void getAndDisplayBattery() {
  66. SIM808ChargingStatus status = hardware::sim808::device.getChargingState();
  67. Log.notice("%d %d%% %dmV", status.state, status.level, status.voltage);
  68. }
  69. void getAndDisplayRtcTime() {
  70. tmElements_t time;
  71. rtc::getTime(time);
  72. Log.notice(F("%d/%d/%d %d:%d:%d"), time.Year, time.Month, time.Day, time.Hour, time.Minute, time.Second);
  73. }
  74. void setRtcTime() {
  75. tmElements_t time;
  76. gps::getTime(time);
  77. rtc::setTime(time);
  78. Log.notice(F("OK"));
  79. }
  80. }