#if !defined(__HIDWH1080RPTPARSER_H__)
#define __HIDWH1080RPTPARSER_H__
#include <inttypes.h>
#include <avr/pgmspace.h>
#include "avrpins.h"
#include "max3421e.h"
#include "usbhost.h"
#include "usb_ch9.h"
#include "Usb.h"
#if defined(ARDUINO) && ARDUINO >=100
#include "Arduino.h"
#else
#include <WProgram.h>
#endif
#include "printhex.h"
#include "hexdump.h"
#include "message.h"
#include "confdescparser.h"
#include "hid.h"
// Following taken from wview-5.20.2
//
// Define the rain rate acuumulator period (minutes):
#define WH1080_RAIN_RATE_PERIOD 5
// Weather Station buffer parameters:
#define WH1080_RAIN_MAX 0x10000 // Wrap value for rain counter
#define WH1080_BUFFER_START 0x100 // Size of fixed block
// start of buffer records
#define WH1080_BUFFER_CHUNK 0x20 // Size of chunk received over USB
// Weather Station record memory positions:
#define WH1080_DELAY 0 // Position of delay parameter
#define WH1080_HUMIDITY_IN 1 // Position of inside humidity parameter
#define WH1080_TEMPERATURE_IN 2 // Position of inside temperature parameter
#define WH1080_HUMIDITY_OUT 4 // Position of outside humidity parameter
#define WH1080_TEMPERATURE_OUT 5 // Position of outside temperature parameter
#define WH1080_ABS_PRESSURE 7 // Position of absolute pressure parameter
#define WH1080_WIND_AVE 9 // Position of wind direction parameter
#define WH1080_WIND_GUST 10 // Position of wind direction parameter
#define WH1080_WIND_DIR 12 // Position of wind direction parameter
#define WH1080_RAIN 13 // Position of rain parameter
#define WH1080_STATUS 15 // Position of status parameter
// Control block offsets:
#define WH1080_SAMPLING_INTERVAL 16 // Position of sampling interval
#define WH1080_DATA_COUNT 27 // Position of data_count parameter
#define WH1080_CURRENT_POS 30 // Position of current_pos parameter
const char WH1080_REPORT[] PROGMEM = {
0xa1, 0x00, 0x00, 0x20, 0xa1, 0x00, 0x00, 0x20
};
class WH1080ReportParser : public HIDReportParser
{
uint8_t chunk[WH1080_BUFFER_CHUNK], lastChunk[WH1080_BUFFER_CHUNK];
uint8_t chunkStart;
bool readingBlockZero;
unsigned short currentPos;
public:
unsigned long startDelay;
unsigned long lastMillis;
uint8_t report[8];
WH1080ReportParser();
virtual void Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
void SetReadingBlock(uint8_t high, uint8_t low);
void SetReadingZero();
};
#endif // __HIDWH1080RPTPARSER_H__