Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

146 rindas
3.6 KiB

  1. #include "Debug.h"
  2. #include "Flash.h"
  3. #include "Positions.h"
  4. #define MENU_ENTRY(name, text) const char MENU_##name[] PROGMEM = text
  5. MENU_ENTRY(HEADER, "-- Debug Menu --");
  6. MENU_ENTRY(SEPARATOR, "----");
  7. MENU_ENTRY(RUN, "[0] Run");
  8. MENU_ENTRY(RUN_ONCE, "[1] Run once");
  9. MENU_ENTRY(RAM, "[2] Free RAM");
  10. MENU_ENTRY(READ_BATTERY, "[3] Read battery");
  11. MENU_ENTRY(GPS_ON, "[4] GPS On");
  12. MENU_ENTRY(GPS_OFF, "[5] GPS Off");
  13. MENU_ENTRY(GPS_GET, "[6] Get GPS position");
  14. MENU_ENTRY(RTC_ON, "[7] RTC On");
  15. MENU_ENTRY(RTC_OFF, "[8] RTC Off");
  16. MENU_ENTRY(RTC_SET, "[9] Get RTC time");
  17. MENU_ENTRY(RTC_GET, "[10] Set RTC time");
  18. MENU_ENTRY(SD_WRITE_TEST, "[11] Write to test file");
  19. MENU_ENTRY(EEPROM_GET_CONFIG, "[16] Get EEPROM config");
  20. MENU_ENTRY(EEPROM_GET_ENTRIES, "[17] Get EEPROM entries");
  21. MENU_ENTRY(QUESTION, "?");
  22. const char * const MENU_ENTRIES[] PROGMEM = {
  23. MENU_HEADER,
  24. MENU_RUN,
  25. MENU_RUN_ONCE,
  26. MENU_SEPARATOR,
  27. MENU_RAM,
  28. MENU_READ_BATTERY,
  29. MENU_SEPARATOR,
  30. MENU_GPS_ON,
  31. MENU_GPS_OFF,
  32. MENU_GPS_GET,
  33. MENU_SEPARATOR,
  34. MENU_RTC_ON,
  35. MENU_RTC_OFF,
  36. MENU_RTC_SET,
  37. MENU_RTC_GET,
  38. MENU_SEPARATOR,
  39. MENU_SD_WRITE_TEST,
  40. MENU_SEPARATOR,
  41. MENU_EEPROM_GET_CONFIG,
  42. MENU_EEPROM_GET_ENTRIES,
  43. MENU_QUESTION
  44. };
  45. int freeRam2() { // dirty hack because putting it in namespace doesn't compile
  46. extern int __heap_start, *__brkval;
  47. int v;
  48. return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval);
  49. }
  50. namespace debug {
  51. void waitForSerial() {
  52. while (!Serial);
  53. Serial.println("Starting !");
  54. }
  55. int freeRam() {
  56. return freeRam2();
  57. }
  58. GPSTRACKER_DEBUG_COMMAND menu() {
  59. if (!Serial) return GPSTRACKER_DEBUG_COMMAND::NONE;
  60. uint8_t command;
  61. size_t menuSize = flash::getArraySize(MENU_ENTRIES);
  62. do {
  63. for (uint8_t i = 0; i < menuSize; i++) {
  64. Serial.println(reinterpret_cast<const __FlashStringHelper *>(pgm_read_word(&MENU_ENTRIES[i])));
  65. }
  66. while (!Serial.available());
  67. command = static_cast<uint8_t>(Serial.parseInt());
  68. while (Serial.available()) Serial.read();
  69. } while (command > static_cast<uint8_t>(GPSTRACKER_DEBUG_COMMAND::EEPROM_GET_ENTRIES));
  70. return static_cast<GPSTRACKER_DEBUG_COMMAND>(command);
  71. }
  72. void getAndDisplayGpsPosition() {
  73. SIM808_GPS_STATUS gpsStatus = gps::acquireCurrentPosition(GPS_DEFAULT_TOTAL_TIMEOUT_MS);
  74. Log.notice(F("%d %s\n"), gpsStatus, gps::lastPosition);
  75. }
  76. void getAndDisplayBattery() {
  77. hardware::sim808::powerOn();
  78. SIM808ChargingStatus status = hardware::sim808::device.getChargingState();
  79. hardware::sim808::powerOff();
  80. Log.notice(F("%d %d%% %dmV\n"), status.state, status.level, status.voltage);
  81. }
  82. void getAndDisplayRtcTime() {
  83. tmElements_t time;
  84. rtc::getTime(time);
  85. Log.notice(F("%d/%d/%d %d:%d:%d\n"), tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second);
  86. }
  87. void getAndDisplayEepromConfig() {
  88. hardware::i2c::eepromPowerOn();
  89. config::read();
  90. hardware::i2c::eepromPowerOff();
  91. Log.notice(F("%s, %s, %d, %d\n"), config::value.seed, config::value.version, config::value.firstEntry, config::value.lastEntry);
  92. }
  93. void getAndDisplayEepromPositions() {
  94. uint16_t firstEntryIndex = config::value.firstEntry;
  95. uint16_t currentEntryIndex = firstEntryIndex;
  96. PositionEntry currentEntry;
  97. do {
  98. positions::get(currentEntryIndex, currentEntry);
  99. Log.notice(F("%d%%, %dmV, %d, %s\n"), currentEntry.battery.level, currentEntry.battery.voltage, currentEntry.status, currentEntry.position);
  100. } while (currentEntryIndex != config::value.lastEntry);
  101. }
  102. void setRtcTime() {
  103. tmElements_t time;
  104. gps::getTime(time);
  105. rtc::setTime(time);
  106. Log.notice(F("OK"));
  107. }
  108. }