// ---------------------------------------------------------------------------------------------------- // Watchdog v3 - Leonardo // EoF 2017 // Header // ---------------------------------------------------------------------------------------------------- #include #include "GPRS_Shield_Arduino.h" #include //#define INIT #define MAIN /* * EEPROM mapping * 1024 B * 10 x 16 = 160 - address book | first addr 0 * 16 x 1 = 16 - parameters | first addr 160 * 24 x 16 = 384 - commands | first addr 176 * 4 x 32 = 128 - short strings | first addr 560 * 4 x 64 = 256 - long strings | first addr 688 * ------------- * 944 bytes * 80 bytes free */ #define AB_ADDR 0 #define AB_MAX_INDEX 9 #define PARAM_ADDR 160 #define PARAM_MAX_INDEX 15 #define SMS_ON_INDEX 0 #define AUTH_ON_INDEX 1 #define FWD_ON_INDEX 2 #define CMD_ADDR 176 #define CMD_MAX_INDEX 23 #define S_STRING_ADDR 560 #define S_STRING_MAX_INDEX 3 #define L_STRING_ADDR 688 #define L_STRING_MAX_INDEX 3 #define CMD_INDEX_STATUS 0 #define CMD_INDEX_HELP 1 #define CMD_INDEX_SMS_ON 2 #define CMD_INDEX_SMS_OFF 3 #define CMD_INDEX_ON 4 #define CMD_INDEX_OFF 5 #define CMD_INDEX_RESET 6 #define CMD_INDEX_A 7 #define CMD_INDEX_B 8 #define CMD_INDEX_FORWARD 9 #define CMD_INDEX_10 10 #define CMD_INDEX_MODEM_RESET 11 #define CMD_INDEX_MODEM_CONSOLE 12 #define CMD_INDEX_EDIT_AB 13 #define CMD_INDEX_SHOW_AB 14 #define CMD_INDEX_SHOW 15 #define CMD_INDEX_CLEAR 16 #define CMD_INDEX_EXIT 17 #define CMD_INDEX_AUTH_ON 18 #define CMD_INDEX_AUTH_OFF 19 #define CMD_INDEX_FWD_ON 20 #define CMD_INDEX_FWD_OFF 21 #define CMD_INDEX_22 22 #define CMD_INDEX_23 23 #define S_STRING_INDEX_1 0 #define S_STRING_INDEX_EAB_MODE 1 #define S_STRING_INDEX_MODEM_CONS_ON 2 #define S_STRING_INDEX_MODEM_CONS_OFF 3 #define L_STRING_INDEX_HELP_1 0 #define L_STRING_INDEX_HELP_AB 1 #define L_STRING_INDEX_FORMAT_AB 2 #define L_STRING_INDEX_HELP_2 3 // Всякое #define TIMEOUT 60000 #define PERIOD 15000 #define MAX_ERROR 5 #define CALL_TIMEOUT 60000 #define BTN_COUNT 3 // Сенсоры #define A_PIN A0 #define T_PIN A1 #define BAT_T_PIN A2 #define VBAT_PIN A3 #define VUSB_PIN A4 #define VIN_PIN A5 #define LED_PIN 13 #define BTN_PIN 12 #define FAN_PIN 11 // GSM-модем #define MOD_PWR 9 #define MOD_BR 115200 #define COM_BR 115200 #define SMS_LEN 160 // Размеры буферов; #define CMD_SIZE 16 #define SMS_SIZE 160 #define PHONE_SIZE 16 #define DATE_SIZE 24 #define SHORT_BUFFER_SIZE 32 #define LONG_BUFFER_SIZE 64 #define VLONG_BUFFER_SIZE 240 // Флаги статуса #define TEMP_WARN 0x01 #define HUM_WARN 0x02 #define LOUD_WARN 0x04 #define POWER_WARN 0x08 #define BAT_WARN 0x016 word getStatus(); void getStatusMessage(char * message); bool isCommandMatchIndex(const char * command, byte index); void checkModem(); void modemConsole(); void incomingCall(); void readModem(char* msg, byte size); void readSerial(char *com, byte size); void returnAnswer(const char * answer = "OK"); void sendHelp(); void mainPowerOn(); void mainPowerOff(); void mainReset(); void a_PowerBreak(); void b_PowerBreak(); bool isPowerOn(); // Адресная книга bool savePhoneNumber(byte index, char * phone); bool delPhoneNumber(byte index); bool loadPhoneNumber(byte index, char * phone); bool entryNotEmpty(byte index); void printPhoneNumber(byte index); void printAddressBook(); void clearAddressBook(); void editAddressBook(); // Утилиты void clearBuffer(char *buffer, byte size); void printShortString(byte index, bool ln = true); void printLongString(byte index, bool ln = true); void printHelp(); void printParams(); bool authOK(char *phone); void sprint(const char * description, const byte data, const bool ln = true); void sprint(const char * description, const char * data, const bool ln = true); void sprint(const char * description, const int data, const bool ln = true); void sprint(const char * description, const unsigned int data, const bool ln = true); void sprint(const char * description, const long int data, const bool ln = true); void sprint(const char * description, const long unsigned int data, const bool ln = true); void sprint(const char * description, const float data, const bool ln = true); void sprint(const char * description, const bool ln = true); // EEPROM utils bool setCommand(byte index, const char *command); bool getCommand(byte index, char *command); bool setShortString(byte index, const char *s_buffer); bool getShortString(byte index, char *s_buffer); bool setLongString(byte index, const char *l_buffer); bool getLongString(byte index, char *l_buffer); bool smsOn(); void smsOn(bool temp); bool authOn(); void authOn(bool temp); bool fwdOn(); void fwdOn(bool temp); void fanPWM(byte power = 128); void fanOn(); void fanOff(); void ledPWM(byte power = 128); void ledOn(); void ledOff(); void flash(byte count = 3); bool buttonPressed(); float readvcc(); void getVs(); void printVs(); void getTH();