Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

121 righe
2.1 KiB

  1. #include "Hardware.h"
  2. #include "Pins.h"
  3. #include <SoftwareSerial.h>
  4. #include <SIM808.h>
  5. #include <SIM808_Types.h>
  6. #include <Wire.h>
  7. namespace hardware {
  8. namespace sim808 {
  9. SoftwareSerial simSerial = SoftwareSerial(SIM_TX, SIM_RX);
  10. SIM808 device = SIM808(SIM_RST, SIM_PWR, SIM_STATUS);
  11. void powerOn() {
  12. bool poweredOn = device.powerOnOff(true);
  13. if (!poweredOn) return;
  14. device.init();
  15. }
  16. void powerOff() {
  17. device.powerOnOff(false);
  18. }
  19. void powerOffIfUnused() {
  20. bool gpsPowered = false;
  21. bool gprsPowered = false;
  22. if ((device.getGpsPowerState(&gpsPowered) && !gpsPowered) &&
  23. (device.getGprsPowerState(&gprsPowered) && !gprsPowered)) {
  24. powerOff();
  25. }
  26. }
  27. void init() {
  28. device.powerOnOff(true);
  29. simSerial.begin(4800);
  30. device.begin(simSerial);
  31. device.init();
  32. }
  33. void gpsPowerOn() {
  34. powerOn();
  35. device.enableGps();
  36. }
  37. void gpsPowerOff() {
  38. device.disableGps();
  39. powerOffIfUnused();
  40. }
  41. void networkPowerOn() {
  42. powerOn();
  43. device.setPhoneFunctionality(SIM808_PHONE_FUNCTIONALITY::FULL);
  44. device.enableGprs("Free"); //TODO : configure
  45. }
  46. void networkPowerOff() {
  47. device.setPhoneFunctionality(SIM808_PHONE_FUNCTIONALITY::MINIMUM);
  48. device.disableGprs();
  49. powerOffIfUnused();
  50. }
  51. }
  52. namespace i2c {
  53. #define DEVICE_RTC 1
  54. #define DEVICE_EEPROM 2
  55. uint8_t powered = 0;
  56. void powerOn() {
  57. if (powered > 0) return;
  58. digitalWrite(I2C_PWR, HIGH);
  59. pinMode(I2C_PWR, OUTPUT);
  60. Wire.begin();
  61. }
  62. void powerOff() {
  63. pinMode(I2C_PWR, INPUT);
  64. digitalWrite(I2C_PWR, LOW);
  65. //turn off i2c
  66. TWCR &= ~(bit(TWEN) | bit(TWIE) | bit(TWEA));
  67. //disable i2c internal pull ups
  68. digitalWrite(A4, LOW);
  69. digitalWrite(A5, LOW);
  70. }
  71. inline void powerOffIfUnused() {
  72. if (!powered) powerOff();
  73. }
  74. void rtcPowerOn() {
  75. powerOn();
  76. powered |= DEVICE_RTC;
  77. }
  78. void rtcPowerOff() {
  79. powered &= ~DEVICE_RTC;
  80. powerOffIfUnused();
  81. }
  82. void eepromPowerOn() {
  83. powerOn();
  84. powered |= DEVICE_EEPROM;
  85. }
  86. void eepromPowerOff() {
  87. powered &= ~DEVICE_EEPROM;
  88. powerOffIfUnused();
  89. }
  90. }
  91. }