LibDMRConf  0.5.0
A library to program DMR radios.
Classes | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
AnytoneInterface Class Reference

Implements the interface to Anytone D868UV, D878UV, etc radios. More...

#include <anytone_interface.hh>

Inheritance diagram for AnytoneInterface:
USBSerial RadioInterface

Classes

struct  ReadRequest
 Binary representation of a read request to the radio. More...
 
struct  ReadResponse
 Binary representation of a read response from the radio. More...
 
struct  WriteRequest
 Binary representation of a write request to the radio. More...
 

Public Member Functions

 AnytoneInterface (QObject *parent=nullptr)
 Constructs a new interface to Anyton radios. More...
 
virtual ~AnytoneInterface ()
 Destructor.
 
void close ()
 Closes the interface to the device.
 
QString identifier ()
 Returns an identifier of the radio.
 
bool read_start (uint32_t bank, uint32_t addr)
 Starts the read process from the specified bank and at the given address. More...
 
bool read (uint32_t bank, uint32_t addr, uint8_t *data, int nbytes)
 Reads a chunk of data from the block-address bno (block number). More...
 
bool read_finish ()
 This function ends a series of read operations. More...
 
bool write_start (uint32_t bank, uint32_t addr)
 Starts the write process into the specified bank and at the given address. More...
 
bool write (uint32_t bank, uint32_t addr, uint8_t *data, int nbytes)
 Writes a chunk of data at the address addr. More...
 
bool write_finish ()
 This function ends a series of write operations. More...
 
bool reboot ()
 Some radios need to be rebooted after being read or programmed. More...
 
- Public Member Functions inherited from USBSerial
virtual ~USBSerial ()
 Destrutor.
 
bool isOpen () const
 If true, the device has been found and is open.
 
void close ()
 Closes the interface to the device.
 
const QString & errorMessage () const
 Returns the last error message.
 
- Public Member Functions inherited from RadioInterface
virtual ~RadioInterface ()
 Destructor.
 

Protected Types

enum  State {
  STATE_INITIALIZED, STATE_OPEN, STATE_PROGRAM, STATE_CLOSED,
  STATE_ERROR
}
 Possible states of the radio interface. More...
 

Protected Member Functions

bool enter_program_mode ()
 Send command message to radio to ender program state.
 
bool request_identifier (QString &radio, QString &version)
 Sends a request to radio to identify itself.
 
bool leave_program_mode ()
 Sends a command message to radio to leave program state and reboot.
 
bool send_receive (const char *cmd, int clen, char *resp, int rlen)
 Internal used method to send messages to and receive responses from radio.
 
- Protected Member Functions inherited from USBSerial
 USBSerial (unsigned vid, unsigned pid, QObject *parent=nullptr)
 Constructs an opens new serial interface to the devices identified by the given vendor and product IDs. More...
 
- Protected Member Functions inherited from RadioInterface
 RadioInterface ()
 Hidden constructor.
 

Protected Attributes

State _state
 Holds the state of the interface.
 
QString _identifier
 Holds the identifyer string of the radio.
 
- Protected Attributes inherited from USBSerial
QString _errorMessage
 Holds the last error message.
 

Additional Inherited Members

- Protected Slots inherited from USBSerial
void onError (QSerialPort::SerialPortError error_t)
 Callback for serial interface errors.
 
void onClose ()
 Callback when closing interface.
 

Detailed Description

Implements the interface to Anytone D868UV, D878UV, etc radios.

This interface uses a USB serial-port to comunicate with the device. To find the corresponding port, the device-specific VID 0x28e9 and PID 0x018a are used. Hence no udev rules are needed to access these devices. The user, however, should be a member of the dialout group to get access to the serial interfaces.

Member Enumeration Documentation

◆ State

enum AnytoneInterface::State
protected

Possible states of the radio interface.

Enumerator
STATE_INITIALIZED 

Initial state.

STATE_OPEN 

Interface to radio is open.

STATE_PROGRAM 

Radio is in program mode.

STATE_CLOSED 

Interface to radio is closed (captive final state).

STATE_ERROR 

An error occurred (captive final state), use errorMessage() to get an error message.

Constructor & Destructor Documentation

◆ AnytoneInterface()

AnytoneInterface::AnytoneInterface ( QObject *  parent = nullptr)
explicit

Constructs a new interface to Anyton radios.

If a matching device was found, isOpen returns true.

Member Function Documentation

◆ read()

bool AnytoneInterface::read ( uint32_t  bank,
uint32_t  addr,
uint8_t *  data,
int  nbytes 
)
virtual

Reads a chunk of data from the block-address bno (block number).

Parameters
bankSpecifies the memory bank to read from. Usually there is only one bank. Some radios, however, to have several memory banks to hold the codeplug. For example the Open GD77 has EEPROM and Flash memory banks with independent addresses.
addrSpecifies the address to read from.
dataPointer where to store the read data.
nbytesSpecifies the number of bytes to read.
Returns
true on success.

Implements RadioInterface.

◆ read_finish()

bool AnytoneInterface::read_finish ( )
virtual

This function ends a series of read operations.

This function will be re-implemented by certain interfaces that need completion of read operations (e.g., HID).

Implements RadioInterface.

◆ read_start()

bool AnytoneInterface::read_start ( uint32_t  bank,
uint32_t  addr 
)
virtual

Starts the read process from the specified bank and at the given address.

Parameters
bankSpecifies the memory bank to read from. Usually there is only one bank. Some radios, however, to have several memory banks to hold the codeplug. For example the Open GD77 has EEPROM and Flash memory banks with independent addresses.
addrSpecifies the address to read from.

Implements RadioInterface.

◆ reboot()

bool AnytoneInterface::reboot ( )
virtual

Some radios need to be rebooted after being read or programmed.

This function will be re-implemented by some interfaces (e.g., DFUDevice) to reboot the radio. By default this function does nothing.

Reimplemented from RadioInterface.

◆ write()

bool AnytoneInterface::write ( uint32_t  bank,
uint32_t  addr,
uint8_t *  data,
int  nbytes 
)
virtual

Writes a chunk of data at the address addr.

Parameters
bankSpecifies the memory bank to write to. Usually there is only one bank. Some radios, however, to have several memory banks to hold the codeplug. For example the Open GD77 has EEPROM and Flash memory banks with independent addresses.
addrSpecifies the address to write to.
dataPointer to the actual data to be written.
nbytesSpecifies the number of bytes to write.
Returns
true on success.

Implements RadioInterface.

◆ write_finish()

bool AnytoneInterface::write_finish ( )
virtual

This function ends a series of write operations.

This function will be implemented by certain interfaces that need completion of write operations (e.g., HID).

Implements RadioInterface.

◆ write_start()

bool AnytoneInterface::write_start ( uint32_t  bank,
uint32_t  addr 
)
virtual

Starts the write process into the specified bank and at the given address.

Parameters
bankSpecifies the memory bank to write to. Usually there is only one bank. Some radios, however, to have several memory banks to hold the codeplug. For example the Open GD77 has EEPROM and Flash memory banks with independent addresses.
addrSpecifies the address to write to.

Implements RadioInterface.


The documentation for this class was generated from the following files: