64 lines
2.3 KiB
C++
64 lines
2.3 KiB
C++
#ifndef _DLLN3X_H_
|
|
#define _DLLN3X_H_
|
|
|
|
#include <QObject>
|
|
#include <QSerialPort>
|
|
#include "zigbeeframe.h"
|
|
|
|
namespace zigbee_protocol {
|
|
class DLLN3X : public QObject {
|
|
Q_OBJECT
|
|
|
|
private:
|
|
bool _online = false, _recv_lock = false;
|
|
uint8_t _self_channel = 0;
|
|
uint16_t _self_addr = 0x0000, _self_network_id = 0x0000;
|
|
uint32_t _self_baud_rate = 0;
|
|
const QSerialPort::BaudRate _baud_rate_list[7] = {QSerialPort::Baud2400, QSerialPort::Baud4800, QSerialPort::Baud9600,
|
|
QSerialPort::Baud19200, QSerialPort::Baud38400, QSerialPort::Baud57600, QSerialPort::Baud115200};
|
|
QSerialPort* _DSerial;
|
|
explicit DLLN3X(QObject *parent = nullptr);
|
|
Q_DISABLE_COPY_MOVE(DLLN3X)
|
|
void (*_callback)(ZigbeeFrame& zf) = nullptr;
|
|
int readBytesUntil(uint8_t delimiter, uint8_t* buf, qint64 maxSize);
|
|
void _sleep(int msec);
|
|
|
|
public:
|
|
enum CONFIG_RW_MASK {READ = 0x00, WRITE = 0x10};
|
|
enum CONFIG { ADDR = 0x01, NETWORKID = 0x02, CHANNEL = 0x03, BAUDRATE = 0x04 , SOFT_REBOOT = 0x10};
|
|
enum CONFIG_RESPONSE {
|
|
DONE = 0x00,
|
|
PORT_REMOTE_ACCESS_DENIED = 0xF0,
|
|
CMD_ERROR = 0xF8,
|
|
PKG_LENGTH_ERROR = 0xF9,
|
|
PKG_DATA_ERROR = 0xFA
|
|
};
|
|
enum PIN_CONTROL{ OUT_HIGH = 0x11, OUT_LOW = 0x10, READ_PIN = 0x12};
|
|
enum PIN{ DLLN3X_PIN4 = 0x44, DLLN3X_PIN5 = 0x45};
|
|
static DLLN3X* instance();
|
|
void init(QSerialPort* DSerial, uint32_t baudrate = 115200);
|
|
ZigbeeFrame recv(bool non_blocked = true);
|
|
bool send(ZigbeeFrame zf);
|
|
bool send_cmd(uint8_t des_port, uint8_t arg, uint8_t* data = nullptr, uint8_t data_length = 0);
|
|
void rled_blink(uint8_t time = 50);
|
|
void loop();
|
|
void setcallback(void (*callback)(ZigbeeFrame& zf));
|
|
uint16_t rw_config(CONFIG arg, uint16_t data = 0, CONFIG_RW_MASK mask = CONFIG_RW_MASK::READ);
|
|
uint8_t read_network_id();
|
|
uint8_t set_network_id(uint16_t network_id);
|
|
uint8_t read_channel();
|
|
uint8_t set_channel(uint8_t channel);
|
|
uint16_t read_addr();
|
|
uint8_t set_addr(uint16_t addr);
|
|
uint32_t read_baudrate();
|
|
uint8_t set_baudrate(uint32_t baud_rate);
|
|
void soft_reboot();
|
|
uint8_t get_link_quality(uint16_t des_addr, uint16_t src_addr = 0x0000);
|
|
enum PIN_CONTROL pin_control(PIN pin, PIN_CONTROL cmd);
|
|
|
|
signals:
|
|
void recved(ZigbeeFrame zf);
|
|
};
|
|
}
|
|
#endif
|