* experimental support for WIN32 compilation (tested only with VS2022);
* fix up incorrect return;
* make debug compile verbose; ensure ws2_32.lib is included;
* initial commit of vocoder library to main source tree; initial commit of C++ port of bridge (non-functional);
* calculate the length of the preamble tone and properly write it;
* implement MDC callback to detect MDC unit ID; implement UDP audio reception; implement local audio reception;
* very alpha working verison;
* correct buffer size;
* correct issue with enabled Tx mode not properly being set on the network; correct issue with DMR not setting the appropriate frame length after packing AMBE bits; correct false call starts by faking the txStreamId (this isn't correct but works for now); fix issue with P25 non-GROUP LCOs causing audio breaks; correct bad logic for call lockup thread;
* cleanup and properly align log messages;
* implement missing Rx/Tx manual gain control; fix missing srcId overrides;
* eliminate the __ALLOC_VLA macro (this really only works on VS2022, GCC explodes in a fit of horror);
* fix missing comment;
* fix bad CFLAGS; correct missing dl library when linking dvmbridge on linux; fix various typos and bad variable types in bridge;
* fix some bad memset calls not taking array size into account; fix some missing parens;
* implement missing cal options;
* don't start the timer till the first LDU1 for cal mode;
* I'm just full of bad mistakes today;
* ignore logging excessive sync frame errors;
* update modem submodule;
* Add DVM-V24 Firmware Submodule And Enable Building It (#66)
* Added v24 firmware as a submodule
* Added v24 firmware compilation
* V24 doesn't have make clean, so remove it from cmake
* Added V24 firmware to tarballs
* Fix my 1D107 error...
---------
Co-authored-by: faulty <faulty@evilcomputing.net>
* correct compilation flags for Win32; add support to dump sample levels on bridge (this is useful for tuning the vox level); add various fixes for local audio flag; add various fixes for not starting loops until completely running; ensure audio input/output device settings are output to the log; fix issue with Rx and Tx gain controls not being applied appropriately;
* fix compilation issues for RPI_ARM; ensure math constants are defined; remove unused command line arguments;
---------
Co-authored-by: Jim <25770089+faultywarrior@users.noreply.github.com>
Co-authored-by: faulty <faulty@evilcomputing.net>
NOTE: this does not indicate full P25 data support as working yet; this commit refactors a lot of the baseline PDU handling code, and better handles both confirmed and unconfirmed PDU data blocks, there is still some more work to do, I just didn't want p25_data to start getting overly out of sync with master.
* rework modem protocol to support variable length frames up to 64k; refactor P25 PDU handling to support TIA-102 minimum 512 byte frames;
* fix PDU length its 512 bytes not 500; ignore instead of report invalid modem frames; add double length checking to HostSetup;
* add support to send P25 long frames to the modem;
* adjust FIFO size to 522 (fits a single PDU frame); remove extra debug displays; match fixed FIFO sizes between modem and host;
* correct weird inverted CRC-9 that sometimes happen;
* ensure netPDU is reset at the beginning of a network data call; fix lengh used by data block dumping;
* fix some buffer lengths;
* implement inital code to support embedded FNE;
* continued implementation of embedded FNE;
* implement initial core functionality for handling FNE side of DMRD, P25D and NXDD;
* update README.md;
* refactor and rename files; clarify that the embedded FNE is not a "routing" FNE, but rather, a "conference bridge" FNE;
* more cleanups making the conference bridge FNE implementation clearer;
* implement proper code for handling peer inclusion/exclusion; implement proper code for validating a call stream;
* add missing comments;
* make the GCC compiler happy when compiling on 32-bit ARM; make old RPI_ARM compiler happy;
* process parrot flag for talkgroup configuration;
* deprecate and remove old tg_acl.dat file infavor of the YAML-based talkgroup rules file for the entire host; deprecate and remove custom Mutex class in favor of std::mutex; expand helper routines for the TalkgroupRulesLookup class (backwards compatibility essentially with TalkgroupIdLookup); fix issue in network core that could cause deactivated TGs to try using talkgroup lookups when talkgroup lookups may be unavailable;
* support code for future use;
* fixup CMakeLists to fix build warnings for ARM 32-bit platform;
* update detection for sendmsg and sendmmsg (handles some platforms that don't define sendmmsg); implement container classes for RTP framing;
* update CMakeLists to handle new files appropriately;
* initial implementation of FrameQueue to generate FNE RTP frames;
* fix incorrect return;
* implement a typedef for unique_ptr uint8_t arrays; fix issue where DMR, P25 and NXDN control classes were accepting BaseNetwork instead of Network; refactor how FrameQueue handles returning messages read from the network; refactor BaseNetwork, Network and FNENetwork to use FrameQueue instead of raw network writes;
* fix issue with handling network state; fix issue handling global network enable flag; fix buffer pointer cleanup;
* add option to CMake to selectively utilize the legacy (non-RTP) network protocol (embedded FNE does not support this and will be disabled for USE_LEGACY_NETWORK; cleanup some error messages when trying to initialize and read the configuration file; fix some minor issues in parsing the new talkgroup rules YAML file; complete conversion of BaseNetwork from raw socket to using the new FrameQueue class; refactor the multi-buffer UDPSocket write function to properly send multiple messages in batch down to the kernel driver (on Linux using sendmmsg); add flag to UDPSocket to indicate whether the socket is "open" or not; correct some RTP formatting issues with the extension header (the payload length is in 32-bit units);
* remove remaining native WIN32/WIN64 type support code (it was unmaintained anyway); correct issues with network socket reading; cleanup some error messages;q
* finally resolve lingering issue with frame queue having random socket issues;
* refactor how BufferVector and sendmmsg UDPSocket write operates; refactor FrameQueue to properly queue messages;
* properly queue packets to send in bursts to peers; add missing ACKs; add missing MSTPONG;
* fix up formatting; remove unnecessary debug statements;
* minor cleanups;
* remove unused function;
* add fields for function and sub-function;
* describe network functions and subfunctions;
* reorganize some code; add checking for packet sequence;
* roll next sequence properly;
* utilize typedef for std::unique_ptr<uint8_t[]>;
* fix usage of __UNIQUE_BUFFER to __UNIQUE_UINT8_ARRAY;
* clean up macro definitions;
* implement sequence counting for the FNE conference bridge;
* remove USE_LEGACY_NETWORK support;
* use macro expansions for this instead of raw buffer lists;
* implement actual transmission of new network func/sub-func behavior;
* deprecate use of packet tags for determining operation, instead use RTP FNE header function and subfunction bytes;
* fix issue with send talkgroups not setting flag to send talkgroups to peers; fix issue when compiling list of activated or deactivated TGs to send to peers; correct strangeness with the RTP sequence counting; fix talkgroup rule lookup on peer when activating or deactivating TGs;
* update copyright dates;
* complain if the RTP and FNE headers don't agree on stream ID;
* for when you forget to update a comment so things actually make sense when you look at it later...;
* remove extraneous check, this is really not necessary since FrameQueue does the size validation;
* clarify the description of the "embedded FNE";
* merge changes from https://github.com/CVSoft/dvmhost to place spec specific limits on channel spacing;
* refactor how network traffic is handled, we don't handle protocol specific stuff within BaseNetwork anymore and offload that to the specific protocol controller instead; implement support to receive peer traffic and repeat (still need to do master to peer);
* convert fatal error about Rx frequency being below base frequency to a warning instead;
* fix incorrect redefine of slotNo;
* correct ret flag for readDMR, readP25 and readNXDN not being set to true by default (stupid me); correct FNE-mode payload offsets for diagnostic packets;
* implement option to selectively enable/disable FNE mode verbose logging information; enhance FNE display of network diagnostic logs; refactor dmr::Control::processNetwork(); refactor RTP packet sequence counting;
* fix incorrect variable used for out-of-sequence log message;
* fix issues with login RTP stream; specially handle certain control opcodes with a different payload type; continued enhancements to sequence counting;
* whoops readd accidentally removed block;
* backout previous lastPeerId code; properly ensure RTP packet sequence is repeated for traffic calls;
* transmit DVM LC_CALL_TERM TSDU at the end of call or if a call drops (hopefully);
* don't reset the packet sequence for a RPTPING;
* rename some class variables for clarity and prep for some future changes;
* add support for priority/immediate Tx queues, these queues are intended to be used sparingly (and mostly for control data) to transmit priority messages [this is an experimental change and may break the build!];
* fix issue where connecting to a non-existent REST API endpoint would crash with an unhandled ASIO exception;
* increase timeout delay for the modem by 4 seconds (the original 4 second delay would be too short for some longer operations);
* use the immediate queue to prioritize control data in some situations [this is experimental and may break things!];
* reformat headers;
* implement toString() functions on TSBKs, CSBKs and RCCHs for future use to replace fixed strings; cleanup DMRDefines slightly;
* fix up and simplify RTP timestamp generation;
* reduce reliance on fixed strings, instead rely on toString() functions from TSBK, CSBK, and RCCH to ensure string consistency for logging purpsoes;
* refactor how and when releaseGrant is called in some situations; ensure channel grant messages traverse the network;
* fix reset of error count between network super-frames;
* add development helper file for VS Code to configure debug launch parameters;
* update CMakeLists to be more condusive to debugging;
* cleanup AUTHORS.md;
* implement parrot for the conference bridge FNE; implement appropriate call detection logic for conference bridge FNE and attempt to prevent call collisons for the same destination;
* add support for altering softpot levels from calibration mode;
* bump copyright information;
* reorganize CMakeLists;
* remove finalcut from the libraries list (this isn't supposed to be included yet!);
* implement initial rework of setup/calibration mode into a TUI; add ENABLE_TUI_SUPPORT CMake option to disable *all* project TUI support; add ENABLE_TUI_SETUP CMake option to disable setup TUI support for dvmhost;
* properly update isConnected flag;
* fix issue with incorrectly placed control;
* part 1 of a fix for #30, the change here would be to allow the VCs to know about the CC to be able to report back to it to release or other wise update grants;
* part 2 of the fix for #30, this implements the actual logic for a VC to notify the CC of a grant status change (touch, release) [NOTE: this could have undesirable consequences and this commit is experimental!];
* update README.md;
* fix terrible copy and paste job resulting in a poor logic check (SMH); print to log the control channel address and port at startup; use the appropriate REST API for touch (whoops);
* remove transmit overlay on shell; add F12 hotkey to trigger transmit; implement support to use F2 and F12 from various configuration/calibration modals; correct some mode strangeness when saving;
* implement support to adjust FIFO buffer sizes from the host;
* add engineering menu to adjust FIFO buffer sizes from setup;
* ensure set button state is set properly for these windows;
* fix stupid --tags non-sense in the git hash reporting;
* ensure certain error conditions for setup mode are displayed when exiting at initial startup;
* more fixes to attempt to satisfy #30 (why is this being so difficult!); correct situation where RESTClient may throw an assert instead of handling an error condition nicely;
* for #30 allow release tg grant and touch tg grant to work regardless of dedicated CC setting;
* file cleanups;
* C++11/14 cleanups, class overrides and pure-virtual implementors /worked/ but were not really correct;
* stringify modem command and reason messages (so log errors are easier on the eyes);
* late update during a branch merge, to fix some latent issues that were missed;
* reorganized files into appropriate directories
* updated README, AUTHOR, and LICENSE to conform to conventions
* adjusted CMakeLists and pipeline for the new directory structure
* moved examples->configs; scripts->tools; src/debian->/debian
* updated authors information
* created new section in author information
* removed deprecated iden_channel_calc tool