1#ifndef DM32UVINTERFACE_HH
2#define DM32UVINTERFACE_HH
23 const char payload[7] = {
'P',
'S',
'E',
'A',
'R',
'C',
'H'};
46 const char payload[7] = {
'P',
'A',
'S',
'S',
'S',
'T',
'A'};
67 const char payload[7] = {
'S',
'Y',
'S',
'I',
'N',
'F',
'O'};
88 FirmwareVersion = 0x1, BuildDate = 0x3, MainConfigMemory = 0xa, CallSignDBMemory = 0xf
93 const uint8_t
unused[3] = {0x00, 0x00, 0x00};
123 uint8_t payload[255];
129 QString string()
const;
131 uint32_t lowerMemoryBound()
const;
133 uint32_t upperMemoryBound()
const;
141 '\xff',
'\xff',
'\xff',
'\xff',
'\x0c',
142 'P',
'R',
'O',
'G',
'R',
'A',
'M'
229 WriteRequest(uint32_t address,
const QByteArray &payload);
238 Closed, Open, Connected, SystemInfo, Program, Error
252 void (*progress)(
unsigned int percent)=
nullptr);
266 static QList<USBDeviceDescriptor>
detect(
bool saveOnly=
true);
274 template<
class Request,
class Response>
276 if (! req.send(
this, err))
278 return res.receive(
this, err);
Interface to Baofeng Dm-32UV devices.
Definition dm32uv_interface.hh:16
State _state
Current state, the interface is in.
Definition dm32uv_interface.hh:287
bool getAddressMap(DM32UV::AddressMap &map, const ErrorStack &err=ErrorStack(), void(*progress)(unsigned int percent)=nullptr)
Reads the obfuscation address map from the device.
Definition dm32uv_interface.cc:302
bool receive(char *data, qint64 n, int timeout, const ErrorStack &err=ErrorStack())
Receives some data.
Definition dm32uv_interface.cc:610
static USBDeviceInfo interfaceInfo()
Returns some information about this interface.
Definition dm32uv_interface.cc:463
bool send(const char *data, qint64 n, int timeout, const ErrorStack &err=ErrorStack())
Send some data.
Definition dm32uv_interface.cc:591
RadioInfo identifier(const ErrorStack &err=ErrorStack()) override
Returns the radio info, after identifying the radio.
Definition dm32uv_interface.cc:289
QString _firmwareVersion
Firmware version string.
Definition dm32uv_interface.hh:291
QPair< uint32_t, uint32_t > _callsignMemory
Callsign memory range.
Definition dm32uv_interface.hh:295
bool read_start(uint32_t bank, uint32_t address, const ErrorStack &err=ErrorStack()) override
Starts the read process from the specified bank and at the given address.
Definition dm32uv_interface.cc:343
RadioInfo _info
Radio info, identifying the radio.
Definition dm32uv_interface.hh:289
bool read_finish(const ErrorStack &err=ErrorStack()) override
This function ends a series of read operations.
Definition dm32uv_interface.cc:396
DM32UVInterface(const USBDeviceDescriptor &descr, const ErrorStack &err=ErrorStack(), QObject *parent=nullptr)
Constructs a new DM32UV interface for the given USB descriptor.
Definition dm32uv_interface.cc:273
State
Possible states, the interface might be in.
Definition dm32uv_interface.hh:237
bool enter_program_mode(const ErrorStack &err=ErrorStack())
Enters program mode.
Definition dm32uv_interface.cc:559
bool write_finish(const ErrorStack &err=ErrorStack()) override
This function ends a series of write operations.
Definition dm32uv_interface.cc:455
bool write_start(uint32_t bank, uint32_t address, const ErrorStack &err=ErrorStack()) override
Starts the write process into the specified bank and at the given address.
Definition dm32uv_interface.cc:404
bool sendReceive(const Request &req, Response &res, const ErrorStack &err=ErrorStack())
Helper function to send a request and receives the associated response.
Definition dm32uv_interface.hh:275
bool write(uint32_t bank, uint32_t address, uint8_t *data, int nbytes, const ErrorStack &err=ErrorStack()) override
Writes a chunk of data at the address addr.
Definition dm32uv_interface.cc:420
QPair< uint32_t, uint32_t > _codeplugMemory
Codeplug memory range.
Definition dm32uv_interface.hh:293
bool read(uint32_t bank, uint32_t address, uint8_t *data, int nbytes, const ErrorStack &err=ErrorStack()) override
Reads a chunk of data from the block-address bno (block number).
Definition dm32uv_interface.cc:359
Implements a memory map between physical and virtual codeplug addresses.
Definition dm32uv.hh:26
Implements a stack of error messages to provide a pretty formatted error traceback.
Definition errorstack.hh:43
Provides some information about a radio model.
Definition radioinfo.hh:16
Base class for all radio interface descriptors representing a unique interface to a connected radio.
Definition usbdevice.hh:197
Generic information about a possible radio interface.
Definition usbdevice.hh:121
USBSerial(const USBDeviceDescriptor &descriptor, QSerialPort::BaudRate rate=QSerialPort::Baud115200, const ErrorStack &err=ErrorStack(), QObject *parent=nullptr)
Constructs an opens new serial interface to the devices identified by the given vendor and product ID...
Definition usbserial.cc:19
static QList< USBDeviceDescriptor > detect()
Searches for all USB serial ports.
Definition usbserial.cc:133
System info response.
Definition dm32uv_interface.hh:74
bool receive(DM32UVInterface *dev, const ErrorStack &err=ErrorStack())
Receive response though the given interface.
Definition dm32uv_interface.cc:85
uint8_t result
Response result code.
Definition dm32uv_interface.hh:76
Device detection request.
Definition dm32uv_interface.hh:21
const char payload[7]
Request content.
Definition dm32uv_interface.hh:23
Device detection response.
Definition dm32uv_interface.hh:30
uint8_t result
Result flag.
Definition dm32uv_interface.hh:32
char payload[7]
Response payload.
Definition dm32uv_interface.hh:34
bool receive(DM32UVInterface *dev, const ErrorStack &err=ErrorStack())
Receive response though the given interface.
Definition dm32uv_interface.cc:24
QString identifier() const
Extracts the identifier from the response payload.
Definition dm32uv_interface.cc:41
Enter program mode request.
Definition dm32uv_interface.hh:138
const char payload[12]
Request content.
Definition dm32uv_interface.hh:140
Password request.
Definition dm32uv_interface.hh:44
const char payload[7]
Request content.
Definition dm32uv_interface.hh:46
Passwort response.
Definition dm32uv_interface.hh:53
uint16_t code
Some unknown data.
Definition dm32uv_interface.hh:57
uint8_t result
Response result code.
Definition dm32uv_interface.hh:55
bool receive(DM32UVInterface *dev, const ErrorStack &err=ErrorStack())
Receive response though the given interface.
Definition dm32uv_interface.cc:58
Ping request.
Definition dm32uv_interface.hh:170
const char payload[1]
Request content.
Definition dm32uv_interface.hh:172
ReadRequest(uint32_t address, uint16_t length)
Constructs a read request for the given address and length.
Definition dm32uv_interface.cc:196
const char request_type
Static request type.
Definition dm32uv_interface.hh:182
bool send(DM32UVInterface *dev, const ErrorStack &err=ErrorStack()) const
Send request though the given interface.
Definition dm32uv_interface.cc:205
uint8_t address[3]
24bit little endian address.
Definition dm32uv_interface.hh:184
uint16_t length
16bit little endian length.
Definition dm32uv_interface.hh:186
Read response.
Definition dm32uv_interface.hh:195
uint32_t address() const
Unpacks the address.
Definition dm32uv_interface.cc:234
QByteArray payload() const
Returns the payload as byte array.
Definition dm32uv_interface.cc:246
uint16_t length() const
Unpacks the length.
Definition dm32uv_interface.cc:241
bool receive(DM32UVInterface *dev, const ErrorStack &err=ErrorStack())
Receive response though the given interface.
Definition dm32uv_interface.cc:213
uint8_t _payload[4096]
Payload of upto 4096 bytes.
Definition dm32uv_interface.hh:203
const char response_type
Static respone type field.
Definition dm32uv_interface.hh:197
uint8_t _address[3]
24bit little endian address.
Definition dm32uv_interface.hh:199
uint16_t _length
16bit payload length.
Definition dm32uv_interface.hh:201
System info request.
Definition dm32uv_interface.hh:65
const char payload[7]
Request content.
Definition dm32uv_interface.hh:67
Unkown 02h request.
Definition dm32uv_interface.hh:151
const char payload[1]
Request content.
Definition dm32uv_interface.hh:153
Unknown 02h response.
Definition dm32uv_interface.hh:160
char payload[8]
Some unknown response payload.
Definition dm32uv_interface.hh:162
bool receive(DM32UVInterface *dev, const ErrorStack &err=ErrorStack())
Receive response though the given interface.
Definition dm32uv_interface.cc:179
bool send(DM32UVInterface *dev, const ErrorStack &err=ErrorStack()) const
Send request though the given interface.
Definition dm32uv_interface.cc:114
uint8_t valueId
The value ID to read.
Definition dm32uv_interface.hh:95
ValueRequest(ValueId valueId)
Constructor from value ID.
Definition dm32uv_interface.cc:101
const char request_type
Static request type.
Definition dm32uv_interface.hh:91
ValueId
Some possible value IDs.
Definition dm32uv_interface.hh:87
const uint8_t unused[3]
Some unknown fields.
Definition dm32uv_interface.hh:93
Value response.
Definition dm32uv_interface.hh:107
uint8_t length
THe length of the payload.
Definition dm32uv_interface.hh:113
uint32_t lower
Lower bound in little endian.
Definition dm32uv_interface.hh:118
char response_type
The received response code, should be 'V'.
Definition dm32uv_interface.hh:109
uint8_t valueId
The value ID read.
Definition dm32uv_interface.hh:111
uint32_t upper
Upper bound (inclusive) in little endian.
Definition dm32uv_interface.hh:120
WriteRequest(uint32_t address, const QByteArray &payload)
Constructs a new write request to the given address with the given payload.
Definition dm32uv_interface.cc:254
uint8_t _address[3]
Encodes the 24bit address in little endian.
Definition dm32uv_interface.hh:222
bool send(DM32UVInterface *dev, const ErrorStack &err=ErrorStack()) const
Send request though the given interface.
Definition dm32uv_interface.cc:264
const char request_type
Static request type field.
Definition dm32uv_interface.hh:220
uint16_t _length
Encodes the 16bit length in little endian.
Definition dm32uv_interface.hh:224
uint8_t _payload[4096]
Holds the payload.
Definition dm32uv_interface.hh:226