You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 rivejä
3.3 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] Read battery");
  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_QUESTION
  39. };
  40. int freeRam2() { // dirty hack because putting it in namespace doesn't compile
  41. extern int __heap_start, *__brkval;
  42. int v;
  43. return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval);
  44. }
  45. namespace debug {
  46. void waitForSerial() {
  47. while (!Serial);
  48. Serial.begin(DEBUG_SERIAL_SPEED);
  49. }
  50. int freeRam() {
  51. return freeRam2();
  52. }
  53. GPSTRACKER_DEBUG_COMMAND menu() {
  54. if (!Serial) return GPSTRACKER_DEBUG_COMMAND::NONE;
  55. uint8_t command;
  56. while (command > static_cast<uint8_t>(GPSTRACKER_DEBUG_COMMAND::RTC_SET)) {
  57. for (uint8_t i = 0; i < flash::getFlashArraySize(MENU_ENTRIES); i++) {
  58. Serial.println(reinterpret_cast<const __FlashStringHelper *>(pgm_read_word(MENU_ENTRIES[i])));
  59. }
  60. while (!Serial.available());
  61. command = static_cast<uint8_t>(Serial.parseInt());
  62. }
  63. return static_cast<GPSTRACKER_DEBUG_COMMAND>(command);
  64. }
  65. void getAndDisplayGpsPosition() {
  66. SIM808_GPS_STATUS gpsStatus = gps::acquireCurrentPosition(GPS_DEFAULT_TOTAL_TIMEOUT_MS);
  67. Log.notice(F("%d %s"), gpsStatus, gps::lastPosition);
  68. }
  69. void getAndDisplayBattery() {
  70. SIM808ChargingStatus status = hardware::sim808::device.getChargingState();
  71. Log.notice(F("%d %d%% %dmV"), status.state, status.level, status.voltage);
  72. }
  73. void getAndDisplayRtcTime() {
  74. tmElements_t time;
  75. rtc::getTime(time);
  76. Log.notice(F("%d/%d/%d %d:%d:%d"), time.Year, time.Month, time.Day, time.Hour, time.Minute, time.Second);
  77. }
  78. void getAndDisplayEepromConfig() {
  79. hardware::i2c::eepromPowerOn();
  80. config::read();
  81. hardware::i2c::eepromPowerOff();
  82. Log.notice(F("%s, %s, %d, %d"), config::value.seed, config::value.version, config::value.firstEntry, config::value.lastEntry);
  83. }
  84. void getAndDisplayEepromPositions() {
  85. uint16_t firstEntryIndex = config::value.firstEntry;
  86. uint16_t currentEntryIndex = firstEntryIndex;
  87. PositionEntry currentEntry;
  88. do {
  89. positions::get(currentEntryIndex, currentEntry);
  90. Log.notice(F("%d%%, %dmV, %d, %s"), currentEntry.battery.level, currentEntry.battery.voltage, currentEntry.status, currentEntry.position);
  91. } while (currentEntryIndex != config::value.lastEntry);
  92. }
  93. void setRtcTime() {
  94. tmElements_t time;
  95. gps::getTime(time);
  96. rtc::setTime(time);
  97. Log.notice(F("OK"));
  98. }
  99. }