libdrmconf 0.14.1
A library to program DMR radios.
Loading...
Searching...
No Matches
c7000device.hh
1#ifndef C7000DEVICE_HH
2#define C7000DEVICE_HH
3
4#include <QObject>
5#include <libusb.h>
6#include "errorstack.hh"
7#include "radiointerface.hh"
8
12class C7000Device : public QObject
13{
14 Q_OBJECT
15
16public:
18 struct Packet {
19 public:
21 Packet();
23 Packet(const Packet &other) = default ;
25 Packet(uint8_t command, uint8_t sub, uint8_t flags=0x0f, const QByteArray &payload=QByteArray());
27 Packet(const QByteArray &buffer);
28
30 Packet &operator =(const Packet &other) = default;
31
33 bool isValid() const;
34
36 uint8_t flags() const;
38 uint8_t command() const;
40 uint8_t subcommand() const;
42 uint16_t payloadSize() const;
44 QByteArray payload() const;
46 const QByteArray &encoded() const;
47
48 protected:
50 QByteArray _encoded;
51 };
52
53public:
56 {
57 public:
59 Descriptor(const USBDeviceInfo &info, uint8_t bus, uint8_t device);
60 };
61
62public:
64 C7000Device(const USBDeviceDescriptor &descr, const ErrorStack &err=ErrorStack(), QObject *parent=nullptr);
66 virtual ~C7000Device();
67
69 bool isOpen() const;
71 void close();
72
73public:
77 static QList<USBDeviceDescriptor> detect(bool saveOnly=true);
78
79protected:
81 bool sendRecv(const Packet &request, Packet &response, const ErrorStack &err=ErrorStack());
82
83protected:
85 libusb_context *_ctx;
87 libusb_device_handle *_dev;
88};
89
90#endif // C7000DEVICE_HH
Descriptor(const USBDeviceInfo &info, uint8_t bus, uint8_t device)
Constructor from interface info, bus number and device address.
Definition c7000device.cc:111
libusb_context * _ctx
USB context.
Definition c7000device.hh:85
virtual ~C7000Device()
Destructor.
Definition c7000device.cc:204
bool isOpen() const
Returns true if the C7000 interface is open.
Definition c7000device.cc:257
void close()
Closes the C7000 interface.
Definition c7000device.cc:262
static USBDeviceInfo interfaceInfo()
Returns some information about the interface.
Definition c7000device.cc:209
bool sendRecv(const Packet &request, Packet &response, const ErrorStack &err=ErrorStack())
Sends the given request to the device and receives the response.
Definition c7000device.cc:275
static QList< USBDeviceDescriptor > detect(bool saveOnly=true)
Finds all C7000 interfaces.
Definition c7000device.cc:215
libusb_device_handle * _dev
USB device object.
Definition c7000device.hh:87
C7000Device(const USBDeviceDescriptor &descr, const ErrorStack &err=ErrorStack(), QObject *parent=nullptr)
Opens a connection to the C7000 device.
Definition c7000device.cc:121
Implements a stack of error messages to provide a pretty formatted error traceback.
Definition errorstack.hh:43
Base class for all radio interface descriptors representing a unique interface to a connected radio.
Definition usbdevice.hh:197
USBDeviceDescriptor(const USBDeviceInfo &info, const QString &device)
Hidden constructor from info and path string.
Definition usbdevice.cc:164
const QVariant & device() const
Returns the device information identifying the interface uniquely.
Definition usbdevice.cc:290
Generic information about a possible radio interface.
Definition usbdevice.hh:121
USBDeviceInfo()
Empty constructor.
Definition usbdevice.cc:40
Request/response packet.
Definition c7000device.hh:18
uint16_t payloadSize() const
Returns the payload size.
Definition c7000device.cc:93
uint8_t subcommand() const
Returns the sub-command field.
Definition c7000device.cc:88
bool isValid() const
Returns true, if the packet is valid.
Definition c7000device.cc:54
const QByteArray & encoded() const
Returns the encoded packet.
Definition c7000device.cc:103
QByteArray payload() const
Returns the payload field.
Definition c7000device.cc:98
Packet()
Default constructor.
Definition c7000device.cc:13
uint8_t command() const
Returns the command field.
Definition c7000device.cc:83
uint8_t flags() const
Returns the flags field.
Definition c7000device.cc:78
Packet & operator=(const Packet &other)=default
Assignment.
QByteArray _encoded
Holds the encoded packet.
Definition c7000device.hh:50
Packet(const Packet &other)=default
Copy constructor.