diff --git a/Controller.cpp b/Controller.cpp index 2c2ca29..7f8d263 100644 --- a/Controller.cpp +++ b/Controller.cpp @@ -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; channelConfigureCodec(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; } diff --git a/DV3003.cpp b/DV3003.cpp index 57eacfb..78d9c10 100644 --- a/DV3003.cpp +++ b/DV3003.cpp @@ -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; } diff --git a/DV3003.h b/DV3003.h index b14c60d..d5addf2 100644 --- a/DV3003.h +++ b/DV3003.h @@ -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 };