93 lines
1.6 KiB
C++
93 lines
1.6 KiB
C++
/*
|
|
* meterBusClient.h
|
|
*
|
|
* Created on: 08.03.2014
|
|
* Author: wn
|
|
*/
|
|
|
|
#ifndef METERBUSCLIENT_H_
|
|
#define METERBUSCLIENT_H_
|
|
|
|
#include "uptime.h"
|
|
|
|
|
|
|
|
const unsigned long RESPONSE_DELAY = 50;
|
|
|
|
|
|
|
|
struct MeterBusFrame {
|
|
/*
|
|
* Short Frame:
|
|
* Start 10h
|
|
* C-Field
|
|
* A-Field
|
|
* Check-Sum
|
|
* Stop 16h
|
|
*
|
|
* Long Frame:
|
|
* Start 68h
|
|
* Length
|
|
* Length
|
|
* Start 68h
|
|
* C-Field
|
|
* A-Field
|
|
* CI-Field
|
|
* User-Data
|
|
* Check-Sum
|
|
* Stop 16h
|
|
*
|
|
*/
|
|
unsigned char startDelimiter;
|
|
unsigned char length;
|
|
unsigned char cField;
|
|
unsigned char aField;
|
|
unsigned char ciField;
|
|
unsigned char userData[64];
|
|
unsigned char checksum;
|
|
bool valid;
|
|
};
|
|
|
|
|
|
class MeterBusClient {
|
|
public:
|
|
MeterBusClient();
|
|
void begin(Uptime *uptime);
|
|
void exec();
|
|
private:
|
|
Uptime *m_uptime;
|
|
|
|
unsigned char m_address;
|
|
void setAddress(unsigned char address);
|
|
unsigned char getAddress();
|
|
bool handleFrame();
|
|
MeterBusFrame m_frame;
|
|
|
|
unsigned char m_sendBuffer[64];
|
|
unsigned int m_sendBufferLen;
|
|
void aSB(unsigned char v); // append to send buffer
|
|
void aSB(unsigned int v);
|
|
void aSB(unsigned long v);
|
|
void aSB(float v);
|
|
unsigned char calcSendChecksum();
|
|
void calcAndSetFrameLength();
|
|
|
|
unsigned long m_frameCnt;
|
|
unsigned char m_accessCnt;
|
|
unsigned long m_myFrameCnt;
|
|
unsigned long m_invalidFrameCnt;
|
|
unsigned long m_invalidChecksum;
|
|
unsigned long m_collisionCnt;
|
|
|
|
unsigned char getAccessCnt();
|
|
unsigned char getStatus();
|
|
|
|
void SND_NKE();
|
|
void REQ_UD2();
|
|
void SND_UD();
|
|
};
|
|
|
|
|
|
|
|
#endif /* METERBUSCLIENT_H_ */
|