fixed bugs in several places

main
Tom Early 4 years ago
parent 475b25b98e
commit b7ea3cf617

@ -82,7 +82,7 @@ bool CController::InitDevices()
a3003->InitDV3003(); a3003->InitDV3003();
// set each of the 3 vocoders to the current type // set each of the 3 vocoders to the current type
for (uint8_t channel=PKT_CHANNEL0; channel<PKT_CHANNEL2; channel++) for (uint8_t channel=PKT_CHANNEL0; channel<=PKT_CHANNEL2; channel++)
{ {
if (a3003->ConfigureCodec(channel, type)) if (a3003->ConfigureCodec(channel, type))
return true; return true;
@ -215,6 +215,7 @@ void CController::AddFDSet(int &max, int newfd, fd_set *set) const
max = newfd; max = newfd;
FD_SET(newfd, set); FD_SET(newfd, set);
} }
void CController::ReadAmbeDevices() void CController::ReadAmbeDevices()
{ {
while (keep_running) while (keep_running)
@ -234,7 +235,7 @@ void CController::ReadAmbeDevices()
tv.tv_sec = 0; tv.tv_sec = 0;
tv.tv_usec = 40000; tv.tv_usec = 40000;
auto rval = select(maxfd, &FdSet, nullptr, nullptr, &tv); auto rval = select(maxfd, &FdSet, nullptr, nullptr, &tv);
if (rval < 1) if (rval < 0)
{ {
std::cerr << "select() ERROR reading AMBE devices: " << strerror(errno) << std::endl; std::cerr << "select() ERROR reading AMBE devices: " << strerror(errno) << std::endl;
} }

@ -125,6 +125,7 @@ bool CDV3003::OpenDevice(const std::string &ttyname, int baudrate)
if (SetBaudRate(baudrate)) if (SetBaudRate(baudrate))
return true; return true;
std::cout << "Baudrade it set to " << baudrate << std::endl;
devicepath.assign(ttyname); devicepath.assign(ttyname);
std::cout << "Opened " << devicepath << std::endl; std::cout << "Opened " << devicepath << std::endl;
@ -134,8 +135,6 @@ bool CDV3003::OpenDevice(const std::string &ttyname, int baudrate)
bool CDV3003::InitDV3003() bool CDV3003::InitDV3003()
{ {
char prodId[17];
char versionstr[49];
SDV3003_Packet responsePacket, ctrlPacket; SDV3003_Packet responsePacket, ctrlPacket;
// ********** hard reset ************* // ********** hard reset *************
@ -160,6 +159,8 @@ bool CDV3003::InitDV3003()
return true; return true;
} }
std::cout << "Successfully reset " << devicepath << std::endl;
// ********** turn off parity ********* // ********** turn off parity *********
ctrlPacket.header.payload_length = htons(4); ctrlPacket.header.payload_length = htons(4);
ctrlPacket.field_id = PKT_PARITYMODE; ctrlPacket.field_id = PKT_PARITYMODE;
@ -184,6 +185,8 @@ bool CDV3003::InitDV3003()
return true; return true;
} }
std::cout << "Successfully disabled parity on " << devicepath << std::endl;
// ********* Product ID and Version ************* // ********* Product ID and Version *************
ctrlPacket.header.payload_length = htons(1); ctrlPacket.header.payload_length = htons(1);
ctrlPacket.field_id = PKT_PRODID; ctrlPacket.field_id = PKT_PRODID;
@ -201,8 +204,7 @@ bool CDV3003::InitDV3003()
std::cerr << "InitDV3003: invalid response to product id query" << std::endl; std::cerr << "InitDV3003: invalid response to product id query" << std::endl;
return true; return true;
} }
strncpy(prodId, responsePacket.payload.ctrl.data.prodid, sizeof(prodId)); productid.assign(responsePacket.payload.ctrl.data.prodid);
productid.assign(prodId);
ctrlPacket.field_id = PKT_VERSTRING; ctrlPacket.field_id = PKT_VERSTRING;
if (write(fd, &ctrlPacket, packet_size(ctrlPacket)) == -1) { if (write(fd, &ctrlPacket, packet_size(ctrlPacket)) == -1) {
@ -219,9 +221,8 @@ bool CDV3003::InitDV3003()
std::cerr << "InitDV3003: invalid response to version query" << std::endl; std::cerr << "InitDV3003: invalid response to version query" << std::endl;
return true; return true;
} }
strncpy(versionstr, responsePacket.payload.ctrl.data.version, sizeof(version)); version.assign(responsePacket.payload.ctrl.data.version);
version.assign(versionstr); std::cout << "Found " << productid << " version " << version << " at " << devicepath << std::endl;
std::cout << "Found " << prodId << " version " << version << " at " << devicepath << std::endl;
return false; return false;
} }

@ -53,7 +53,8 @@
#define packet_size(a) int(1 + sizeof((a).header) + ntohs((a).header.payload_length)) #define packet_size(a) int(1 + sizeof((a).header) + ntohs((a).header.payload_length))
using SDV3003_Packet = struct __attribute__ ((__packed__)) dv3003_packet { #pragma pack(push, 1)
struct dv3003_packet {
uint8_t start_byte; uint8_t start_byte;
struct { struct {
uint16_t payload_length; uint16_t payload_length;
@ -85,6 +86,9 @@ using SDV3003_Packet = struct __attribute__ ((__packed__)) dv3003_packet {
} ambe; } ambe;
} payload; } payload;
}; };
#pragma pack(pop)
using SDV3003_Packet = struct dv3003_packet;
enum class Encoding { dstar, dmr }; enum class Encoding { dstar, dmr };

Loading…
Cancel
Save

Powered by TurnKey Linux.