Browse Source

i2c power on/off is handled by functions that need it as it does not cost time to change power state

tags/v1.2.0
Bertrand Lemasle 7 years ago
parent
commit
815ce3d018
5 changed files with 18 additions and 23 deletions
  1. +3
    -1
      GpsTracker/Config.cpp
  2. +0
    -6
      GpsTracker/Debug.cpp
  3. +0
    -2
      GpsTracker/Debug.h
  4. +0
    -6
      GpsTracker/GpsTracker.ino
  5. +15
    -8
      GpsTracker/Rtc.cpp

+ 3
- 1
GpsTracker/Config.cpp View File

@@ -9,6 +9,7 @@ namespace config {


void write() { void write() {
VERBOSE_FORMAT("writeConfig", "%s, %s, %d, %d", value.seed, value.version, value.firstEntry, value.lastEntry); VERBOSE_FORMAT("writeConfig", "%s, %s, %d, %d", value.seed, value.version, value.firstEntry, value.lastEntry);

hardware::i2c::eepromPowerOn(); hardware::i2c::eepromPowerOn();
int written = hardware::i2c::eeprom.writeBlock(CONFIG_ADDR, value); int written = hardware::i2c::eeprom.writeBlock(CONFIG_ADDR, value);
hardware::i2c::eepromPowerOff(); hardware::i2c::eepromPowerOff();
@@ -33,8 +34,9 @@ namespace config {
hardware::i2c::eepromPowerOn(); hardware::i2c::eepromPowerOn();
hardware::i2c::eeprom.readBlock(CONFIG_ADDR, value); hardware::i2c::eeprom.readBlock(CONFIG_ADDR, value);
if (!String(CONFIG_SEED).equals(value.seed)) reset(); if (!String(CONFIG_SEED).equals(value.seed)) reset();
hardware::i2c::eepromPowerOff();


VERBOSE_FORMAT("readConfig", "%s, %s, %d, %d", value.seed, value.version, value.firstEntry, value.lastEntry); VERBOSE_FORMAT("readConfig", "%s, %s, %d, %d", value.seed, value.version, value.firstEntry, value.lastEntry);
hardware::i2c::eepromPowerOff();
} }
} }

+ 0
- 6
GpsTracker/Debug.cpp View File

@@ -17,8 +17,6 @@ MENU_ENTRY(GPS_ON, "[G] GPS On");
MENU_ENTRY(GPS_OFF, "[g] GPS Off"); MENU_ENTRY(GPS_OFF, "[g] GPS Off");
MENU_ENTRY(GPS_GET, "[L] Get GPS position"); MENU_ENTRY(GPS_GET, "[L] Get GPS position");
MENU_ENTRY(GPS_SET, "[l] Set last GPS position"); MENU_ENTRY(GPS_SET, "[l] Set last GPS position");
MENU_ENTRY(I2C_ON, "[I] I2C devices On");
MENU_ENTRY(I2C_OFF, "[i] I2C devices Off");
MENU_ENTRY(RTC_SET, "[T] Get RTC time"); MENU_ENTRY(RTC_SET, "[T] Get RTC time");
MENU_ENTRY(RTC_GET, "[t] Set RTC time"); MENU_ENTRY(RTC_GET, "[t] Set RTC time");
MENU_ENTRY(SD_WRITE_TEST, "[W] Write to test file"); MENU_ENTRY(SD_WRITE_TEST, "[W] Write to test file");
@@ -37,8 +35,6 @@ const PROGMEM uint8_t commandIdMapping[] = {
'g', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::GPS_OFF), 'g', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::GPS_OFF),
'L', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::GPS_GET), 'L', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::GPS_GET),
'l', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::GPS_SET), 'l', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::GPS_SET),
'I', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::I2C_ON),
'i', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::I2C_OFF),
'T', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::RTC_GET), 'T', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::RTC_GET),
't', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::RTC_SET), 't', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::RTC_SET),
'W', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::SD_WRITE_TEST), 'W', static_cast<uint8_t>(debug::GPSTRACKER_DEBUG_COMMAND::SD_WRITE_TEST),
@@ -67,8 +63,6 @@ const char * const MENU_ENTRIES[] PROGMEM = {


MENU_SEPARATOR, MENU_SEPARATOR,


MENU_I2C_ON,
MENU_I2C_OFF,
MENU_RTC_SET, MENU_RTC_SET,
MENU_RTC_GET, MENU_RTC_GET,




+ 0
- 2
GpsTracker/Debug.h View File

@@ -38,8 +38,6 @@ namespace debug {
GPS_OFF = 6, GPS_OFF = 6,
GPS_GET = 7, GPS_GET = 7,
GPS_SET = 8, GPS_SET = 8,
I2C_ON = 9,
I2C_OFF = 10,
RTC_GET = 11, RTC_GET = 11,
RTC_SET = 12, RTC_SET = 12,
SD_WRITE_TEST = 13, SD_WRITE_TEST = 13,


+ 0
- 6
GpsTracker/GpsTracker.ino View File

@@ -47,12 +47,6 @@ void loop() {
case debug::GPSTRACKER_DEBUG_COMMAND::GPS_SET: case debug::GPSTRACKER_DEBUG_COMMAND::GPS_SET:
debug::setFakeGpsPosition(); debug::setFakeGpsPosition();
break; break;
case debug::GPSTRACKER_DEBUG_COMMAND::I2C_ON:
rtc::powerOn();
break;
case debug::GPSTRACKER_DEBUG_COMMAND::I2C_OFF:
rtc::powerOff();
break;
case debug::GPSTRACKER_DEBUG_COMMAND::RTC_GET: case debug::GPSTRACKER_DEBUG_COMMAND::RTC_GET:
debug::getAndDisplayRtcTime(); debug::getAndDisplayRtcTime();
break; break;


+ 15
- 8
GpsTracker/Rtc.cpp View File

@@ -35,19 +35,28 @@ namespace rtc {
} }
void setup() { void setup() {
hardware::i2c::rtcPowerOn();
RTC.control(DS3231_12H, DS3231_OFF); //24 hours clock RTC.control(DS3231_12H, DS3231_OFF); //24 hours clock
RTC.control(DS3231_INT_ENABLE, DS3231_OFF); //INTCN OFF RTC.control(DS3231_INT_ENABLE, DS3231_OFF); //INTCN OFF
hardware::i2c::rtcPowerOff();
} }


void getTime(tmElements_t &time) { void getTime(tmElements_t &time) {
hardware::i2c::rtcPowerOn();
RTC.readTime(); RTC.readTime();
hardware::i2c::rtcPowerOff();

details::readTimeFromRegisters(time); details::readTimeFromRegisters(time);
VERBOSE_FORMAT("getTime", "%d / %d / %d %d:%d : %d", tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second);
} }


void setTime(tmElements_t &time) { void setTime(tmElements_t &time) {
VERBOSE_FORMAT("setTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second); VERBOSE_FORMAT("setTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second);
details::writeTimeToRegisters(time); details::writeTimeToRegisters(time);

hardware::i2c::rtcPowerOn();
RTC.writeTime(); RTC.writeTime();
hardware::i2c::rtcPowerOff();
} }


void setAlarm(uint16_t seconds) { void setAlarm(uint16_t seconds) {
@@ -55,26 +64,24 @@ namespace rtc {
tmElements_t alarmTime; tmElements_t alarmTime;


getTime(currentTime); getTime(currentTime);

breakTime(makeTimestamp(currentTime) + seconds, alarmTime); breakTime(makeTimestamp(currentTime) + seconds, alarmTime);


setAlarm(alarmTime); setAlarm(alarmTime);
} }


void setAlarm(tmElements_t &time) { void setAlarm(tmElements_t &time) {
tmElements_t currentTime;
getTime(currentTime);
Log.verbose(F("Current time : %d/%d/%d %d:%d:%d\n"), tmYearToCalendar(currentTime.Year), currentTime.Month, currentTime.Day, currentTime.Hour, currentTime.Minute, currentTime.Second);
details::writeTimeToRegisters(time); details::writeTimeToRegisters(time);

hardware::i2c::rtcPowerOn();
RTC.writeAlarm1(DS3231_ALM_DTHMS); RTC.writeAlarm1(DS3231_ALM_DTHMS);
getTime(currentTime);
Log.notice(F("Set alarm to : %d/%d/%d %d:%d:%d\n"), tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second);


RTC.control(DS3231_A1_FLAG, DS3231_OFF); //reset Alarm 1 flag RTC.control(DS3231_A1_FLAG, DS3231_OFF); //reset Alarm 1 flag
RTC.control(DS3231_A1_INT_ENABLE, DS3231_ON); //Alarm 1 ON RTC.control(DS3231_A1_INT_ENABLE, DS3231_ON); //Alarm 1 ON
RTC.control(DS3231_INT_ENABLE, DS3231_ON); //INTCN ON RTC.control(DS3231_INT_ENABLE, DS3231_ON); //INTCN ON
hardware::i2c::rtcPowerOff();

Log.notice(F("Set alarm to : %d/%d/%d %d:%d:%d\n"), tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second);

} }


} }

Loading…
Cancel
Save