소스 검색

Reduced code size by refactoring sms buffer management

tags/v1.2.0
Bertrand Lemasle 6 년 전
부모
커밋
8b01ba9a5a
1개의 변경된 파일18개의 추가작업 그리고 7개의 파일을 삭제
  1. +18
    -7
      GpsTracker/Core.cpp

+ 18
- 7
GpsTracker/Core.cpp 파일 보기

@@ -14,6 +14,21 @@ namespace core {
uint16_t sleepTime = SLEEP_DEFAULT_TIME_SECONDS;
uint8_t stoppedInARow = SLEEP_DEFAULT_STOPPED_THRESHOLD - 1;

namespace details {

void appendToSmsBuffer(char * buffer, const char * fmt, ...) {
va_list args;
va_start(args, fmt);

size_t bufferLeft = SMS_BUFFER_SIZE - strlen(buffer);
char * p = buffer + strlen(buffer);
vsnprintf_P(p, bufferLeft, fmt, args);

va_end(args);
}

}

void main() {
bool forceBackup = false;
bool acquired = false;
@@ -40,7 +55,6 @@ namespace core {
uint8_t notifyFailures(PositionEntryMetadata &metadata) {
SIM808RegistrationStatus networkStatus;
char buffer[SMS_BUFFER_SIZE] = "Alerts !\n";
size_t bufferLeft = 0;
const __FlashStringHelper * backupFailureString = F(" Backup battery failure ?\n");

uint8_t triggered = alerts::getTriggered(metadata);
@@ -52,18 +66,15 @@ namespace core {
if (!network::isAvailable(networkStatus.stat)) return NO_ALERTS_NOTIFIED;

if (bitRead(triggered, ALERT_BATTERY_LEVEL_1) || bitRead(triggered, ALERT_BATTERY_LEVEL_2)) {
bufferLeft = SMS_BUFFER_SIZE - strlen(buffer);
snprintf_P(buffer + strlen(buffer), bufferLeft, PSTR("- Battery at %d%%.\n"), metadata.batteryLevel);
details::appendToSmsBuffer(buffer, PSTR("- Battery at %d%%.\n"), metadata.batteryLevel);
}

if (bitRead(triggered, ALERT_RTC_CLOCK_FAILURE)) {
bufferLeft = SMS_BUFFER_SIZE - strlen(buffer);
snprintf_P(buffer + strlen(buffer), bufferLeft, PSTR("- RTC was stopped. %S"), backupFailureString);
details::appendToSmsBuffer(buffer, PSTR("-RTC was stopped. %S"), backupFailureString);
}

if (bitRead(triggered, ALERT_RTC_TEMPERATURE_FAILURE)) {
bufferLeft = SMS_BUFFER_SIZE - strlen(buffer);
snprintf_P(buffer + strlen(buffer), bufferLeft, PSTR("- Temperature is %dC. %S"), static_cast<uint16_t>(metadata.temperature * 100), backupFailureString);
details::appendToSmsBuffer(buffer, PSTR("- Temperature is %dC. %S"), static_cast<uint16_t>(metadata.temperature * 100), backupFailureString);
}

config_t* config = &config::main::value;


불러오는 중...
취소
저장