fixed bugs in several places

main
Tom Early 4 years ago
parent 475b25b98e
commit b7ea3cf617

@ -82,7 +82,7 @@ bool CController::InitDevices()
a3003->InitDV3003();
// 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))
return true;
@ -215,6 +215,7 @@ void CController::AddFDSet(int &max, int newfd, fd_set *set) const
max = newfd;
FD_SET(newfd, set);
}
void CController::ReadAmbeDevices()
{
while (keep_running)
@ -234,7 +235,7 @@ void CController::ReadAmbeDevices()
tv.tv_sec = 0;
tv.tv_usec = 40000;
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;
}

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

@ -53,7 +53,8 @@
#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;
struct {
uint16_t payload_length;
@ -85,6 +86,9 @@ using SDV3003_Packet = struct __attribute__ ((__packed__)) dv3003_packet {
} ambe;
} payload;
};
#pragma pack(pop)
using SDV3003_Packet = struct dv3003_packet;
enum class Encoding { dstar, dmr };

Loading…
Cancel
Save

Powered by TurnKey Linux.