/* MHZ library

    By Tobias Schürg
*/
#ifndef MHZ_H
#define MHZ_H

#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

#include <SoftwareSerial.h>

// types of sensors.
extern const int MHZ14A;
extern const int MHZ19B;

// status codes
extern const int STATUS_NO_RESPONSE;
extern const int STATUS_CHECKSUM_MISMATCH;
extern const int STATUS_INCOMPLETE;
extern const int STATUS_NOT_READY;

class MHZ {
 public:
  MHZ(uint8_t rxpin, uint8_t txpin, uint8_t pwmpin, uint8_t type);

  void setDebug(boolean enable);

  boolean isPreHeating();
  boolean isReady();

  void sendCO2UARTRequest();
  int readCO2UART();
  int readCO2PWM();
  uint8_t getLastTemperature();
  int getLastPPM() {return last_ppm;}

 private:
  uint8_t _rxpin, _txpin, _pwmpin, _type, temperature;
  int last_ppm;
  boolean debug = false;

  SoftwareSerial co2Serial;
  byte getCheckSum(byte *packet);
};

#endif
