#ifndef WALKABOUT_SD_DUMP_H
#define WALKABOUT_SD_DUMP_H

//  Last Update:  2/17/17
//
///////////////////////////////////////////////////////
//           Defines                                  /
///////////////////////////////////////////////////////
//
#define DEBUG
#define NODEID          1
#define RCVRID          254                         // Station ID to display GPS data
#define CLIENTID        253                         // Station ID to dump GPS logfile
#define NETWORKID       212
#define FREQUENCY       RF69_915MHZ
#define KEY             "----------------"
#define FREQ            910000000
#define GPSLOGFILE      "GPSLOG.TXT"
#define chipSelect      3                           // SS pin for SD Card Reader
#define ESTOFFSET       5
#define EDTOFFSET       4
#define KNOTSMPH        1.15077945
#define METERSFEET      3.28083989
#define SPEEDSAMPLE     3                           // Number of samples before we take avg
#define ALTSAMPLE       3                           // Number of samples before we take avg
#define PWR_MONITOR     A7
#define VOLTAGE_COMP    0.005458
#define LOWBATT         3.5                         // Lower voltage limit before we display a msg
#define XMITFREQ        3500                        // Loop time, in milliseconds
#ifdef __AVR_ATmega1284P__
  #define ONBOARDLED    15                          // Moteino MEGAs have LEDs on D15
  #define FLASH_SS      23                          // and FLASH SS on D23
#else
  #define ONBOARDLED    9                           // Moteinos have LEDs on D9
  #define FLASH_SS      8                           // and FLASH SS on D8
#endif

///////////////////////////////////////////////////////
//           Globals                                  /
///////////////////////////////////////////////////////
//
RFM69 radio;
SPIFlash flash(FLASH_SS, 0xEF30);
Adafruit_GPS GPS(&Serial1);
uint32_t timer;
LCD_SSD1306 lcd;
File logFile;
uint16_t gYear;
uint8_t  gMonth,
         gDay,
         gHour,
         gMinute,
         gSeconds;
uint8_t adjHour;                                    // hour adjusted for time zone and daylight savings         
boolean sdCardPresent = false;                      // Global flag to indicate presence of SD card
boolean validTimeStamp = false;
MovingAverage<float, SPEEDSAMPLE> speedAverage;     // Create instance for moving average of speed
MovingAverage<float, ALTSAMPLE> altAverage;         // Create instance for moving average of altitude
float sAvg,                                         // Weighted average for speed
      aAvg;                                         // Weighted average for altitude

///////////////////////////////////////////////////////
//           Structs/enum                             /
///////////////////////////////////////////////////////
//
struct date
{
  uint8_t dd;
  uint8_t mm;
  uint8_t yy;
};

enum CMDTYPE {
  DUMPFILE,                                         // Dump file contents over radio
  DELFILE                                           // Delete file
};

typedef struct TelemData {
  float lat;
  float lon;
  float speed;
  float alt;
  uint8_t numSat;
  uint8_t month;                                    // Month, day, year (4 digit) for SD card timestamps
  uint8_t day;
  uint16_t year;              
  uint8_t hour;                                     // Hour, minute, seconds for SD card timestamps
  uint8_t minute;
  uint8_t seconds;
};

struct xmitDataStruct {                       
  char buffer[60];                                  // Used to xmit SD card data over radio
};

typedef struct SDCmdData {				    // This is the incoming client request packet
  int magicCookie;
  CMDTYPE cmd;
};

typedef struct WirelessData {
  SDCmdData data;
} WData;

#endif
