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;