2014-git-work/arduino/libraries/SoftModem/SoftModem.h
2013-02-23 06:58:21 +09:00

86 lines
2.1 KiB
C++

#ifndef SoftModem_h
#define SoftModem_h
#include <Print.h>
#include <inttypes.h>
//#define SOFT_MODEM_BAUD_RATE (126)
//#define SOFT_MODEM_LOW_FREQ (882)
//#define SOFT_MODEM_HIGH_FREQ (1764)
//#define SOFT_MODEM_MAX_RX_BUFF (4)
//#define SOFT_MODEM_BAUD_RATE (100)
//#define SOFT_MODEM_LOW_FREQ (800)
//#define SOFT_MODEM_HIGH_FREQ (1600)
//#define SOFT_MODEM_MAX_RX_BUFF (4)
// #define SOFT_MODEM_BAUD_RATE (315)
// #define SOFT_MODEM_LOW_FREQ (1575)
// #define SOFT_MODEM_HIGH_FREQ (3150)
// #define SOFT_MODEM_MAX_RX_BUFF (8)
// #define SOFT_MODEM_BAUD_RATE (630)
// #define SOFT_MODEM_LOW_FREQ (3150)
// #define SOFT_MODEM_HIGH_FREQ (6300)
// #define SOFT_MODEM_MAX_RX_BUFF (16)
//#define SOFT_MODEM_BAUD_RATE (600)
//#define SOFT_MODEM_LOW_FREQ (2666)
//#define SOFT_MODEM_HIGH_FREQ (4000)
//#define SOFT_MODEM_MAX_RX_BUFF (16)
#define SOFT_MODEM_BAUD_RATE (1225)
#define SOFT_MODEM_LOW_FREQ (4900)
#define SOFT_MODEM_HIGH_FREQ (7350)
#define SOFT_MODEM_MAX_RX_BUFF (32)
//#define SOFT_MODEM_BAUD_RATE (2450)
//#define SOFT_MODEM_LOW_FREQ (7350)
//#define SOFT_MODEM_HIGH_FREQ (14700)
//#define SOFT_MODEM_MAX_RX_BUFF (32)
// Brief carrier tone before each transmission
// 1 start bit (LOW)
// 8 data bits, LSB first
// 1 stop bit (HIGH)
// 1 push bit (HIGH)
#define SOFT_MODEM_DEBUG (0)
class SoftModem : public Print
{
private:
volatile uint8_t *_txPortReg;
uint8_t _txPortMask;
uint8_t _lastTCNT;
uint8_t _lastDiff;
uint8_t _recvStat;
uint8_t _recvBits;
uint8_t _recvBufferHead;
uint8_t _recvBufferTail;
uint8_t _recvBuffer[SOFT_MODEM_MAX_RX_BUFF];
uint8_t _lowCount;
uint8_t _highCount;
void modulate(uint8_t b);
public:
SoftModem();
~SoftModem();
void begin(void);
void end(void);
uint8_t available(void);
int read(void);
void write(uint8_t data);
void demodulate(void);
void recv(void);
static SoftModem *activeObject;
#if SOFT_MODEM_DEBUG
void handleAnalogComp(bool high);
void demodulateTest(void);
uint8_t _errs;
uint16_t _ints;
uint8_t errs;
uint16_t ints;
#endif
};
#endif