forked from wirenboard/wb-mqtt-serial
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpulsar_device.h
42 lines (28 loc) · 1.23 KB
/
pulsar_device.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* vim: set ts=4 sw=4: */
#pragma once
#include <memory>
#include <stdint.h>
#include "serial_device.h"
class TPulsarDevice: public TBasicProtocolSerialDevice<TBasicProtocol<TPulsarDevice>> {
public:
enum RegisterType {
REG_DEFAULT,
REG_SYSTIME
};
TPulsarDevice(PDeviceConfig device_config, PPort port, PProtocol protocol);
uint64_t ReadRegister(PRegister reg);
void WriteRegister(PRegister reg, uint64_t value);
private:
void WriteBCD(uint64_t data, uint8_t *buffer, size_t size, bool big_endian = true);
void WriteHex(uint64_t data, uint8_t *buffer, size_t size, bool big_endian = true);
uint64_t ReadBCD(const uint8_t *data, size_t size, bool big_endian = true);
uint64_t ReadHex(const uint8_t *data, size_t size, bool big_endian = true);
uint16_t CalculateCRC16(const uint8_t *buffer, size_t size);
void WriteDataRequest(uint32_t addr, uint32_t mask, uint16_t id);
void WriteSysTimeRequest(uint32_t addr, uint16_t id);
void ReadResponse(uint32_t addr, uint8_t *payload, size_t size, uint16_t id);
uint64_t ReadDataRegister(PRegister reg);
uint64_t ReadSysTimeRegister(PRegister reg);
uint16_t RequestID;
};
typedef std::shared_ptr<TPulsarDevice> PPulsarDevice;