##################################### Changes in version 0.47 11/17/2010 (Limited Beta) New features: 1. Added ability to create an RTP conference separate from the speak freely/RTP conference previously provided. This allows you to create connections from any pair of ports, not just the ports specified by SF_Port and SF_ReplyPort. This potentially allows multiple nodes to share the same IP address under certain circumstances. See the new RTP_Port and RTPBind2IP configuration variables for more information. 2. Added support for the G.726 codec. The G.726 codec can be used with RTP connections only. The G.726 codec is selected by using the -7 switch with the .connect command. This is the prefered codec for use between tlb nodes and AllStar nodes. Thanks to the assistance of Jim WB6NIL in designing and debugging support for this codec. Minor enhancements: 1. Added COS and PTT support for an PCF8754 i2c port expander chip connected to an iMic. The PCF8754 is available in a 16 pin DIP package which is DIY friendly. Additionally the i2c bus of the iMic is connected to a 8 pin SOIC EEPROM which has HUGE pins in comparison to the iMic itself. Software replaces soldering skills, news at 11:00. 2. Added new command .txpower to set transmitter power. Currently only supported by the Doug Hall protocol. 3. Added default support for the CTCSS input on the URI courtesy of Jim WB6NIL. 4. Changed the amount of audio sent in an uLaw packet in RTP mode to 320 samples (40 milliseconds). Bug Fixes: 1. Added code to initialize DTR and RTS to low when opening the serial port. The rig blaster uses *BOTH* RTS and DTR to key the transmitter. Since tlb only drives *ONE* handshaking line we need to make sure that the "unused" output doesn't cause the transmitter to be stuck on. 2. Corrected a bug in the PTT logic which occurred when a single sound card was used to drive two radios. The radios were able to key up independently, but could only unkey together. 3. Corrected a bug which disabled the command port (tlbcmd interface) when EchoLink isn't enabled (EchoLinkEnable = 0). ##################################### Changes in version 0.46 March 13, 2010 Bug Fixes: 1. Corrected a bug that caused the user count to get out of synch when an rtcp timeout occurred on a permanent connection. 2. Corrected compile error on 64 bit systems. 3. Corrected a bug which caused a timeout by a conference user to be logged multiple times (once per packet). Added a log entry when the long winded operator finally unkeys. 4. Corrected segfault that occurred when a TxKeyMethod or RxCosMethod for a serial port was specified, but DevName wasn't set. 5. Removed "already connected to xxx" announcement before "Reconnecting xxx" announcement when connecting to a node that has recently been disconnected. 6. Corrected a bug in the .say command that prevented it from working with some TTS programs that require a linefeed on the end the line (flite). 7. Corrected a bug that caused the user count to get out of synch when an a node was disconnected and then reconnected quickly. 8. Corrected several typos in the Doug Hall protocol that prevented frequencies on the 1200 Mhz band from being recognized correctly. 9. Corrected a bug which prevented a DTMF 'C' from being recognized when an IRLP interface board was is used. Minor enhancements: 1. Removed announcement of IP address when connecting to a new station when LogIPAddresses is enabled. LogIPAddresses should only effect the log, not over the air announcements! 2. Added code to attempt select a 48 Khz sampling rate when setting 8 Khz fails. Previously only CM108 based USB audio dongles were supported at 48 Khz. 3. Added a new configuration variable PCMRate to allow the default of sampling rate of 8 Khz to be changed to 48 Khz for boards that support 8 kHz. Note: This enables the internal 48 Khz <-> 8 Khz sampling rate conversion routines. Naturally this requires more CPU resources than running at 8 Khz, but may be useful to mitigate poor frequency response of some sound boards when a 8 Khz sampling rate is selected. NB: stereo mode is only supported at a 8Khz sampling rate currently. 4. Added support for the hrprof profiling library. The hprof library uses the Pentium performance counter for profiling and outputs grpof compatible files. When thelinkbox is running properly it spends most of its time sleeping a select() call, this renders the profiling support built into gcc useless. Profiling is primarily of interest to developers and for debugging. Profiling is enabled by adding "--enable-profiling" to the command line when running configure. 5. Added support for CM109 and CM119 based audio dongles that identify themselves with idVendor/idProduct of 0d8c:000e. These chips are compatible enough with CM108 based devices for our purposes. 6. Added support for the CM108AH found in newer URI dongles. 7. Cleaned up announcements generated by the connect command. The node's callsign is now announced rather than it's node number or IP address. 8. Added an example script, scripts/saytime.sh, that announces the time of day. ##################################### Changes in version 0.45 Oct 2, 2009 Bug Fixes: 1. Changed "Total" column label to "Ave" on the .rxlevel command. 2. Modified the .rxlevel command to reset the minimum value to 32767 and the maximum value to -32768 rather than clearing them. This is necessary to correctly detect a DC bias. 3. Removed code added in 0.44 that sent "Bye" packets to stations which were in the disconnecting state when anything is received from them. IRLP reflectors reflect the user's "Bye" packet which caused an infinite bandwith consuming loop. Extra "Bye" packets are now only sent in reply to valid RTCP packets. 4. Added code to force the compression type for Echolink clients to GSM. 5. Removed code that set LastHeard for RTP packets, LastHeard should only be set for RTCP packets. Ensures we can disconnect from nodes sending an constant audio stream. ##################################### Changes in version 0.44 Sept 15, 2009 Minor enhancements: 1. Added -T switch to the users command to display the user list sorted by the time since the user's last transmission. The user who has transmitted most recently will be at the top of the list. Normally the list is sorted by the connect time with the station that's been connected the longest at the top of the list. 2. Added -s switch to the users command to display the user list in the format that it is shown on EchoLink user's screens when they are connected to the node. This format show's the user's name or in the case of a conference the station that's currently talking. 3. Added new port configuration variable DefaultToneLevel to set the default tone level used for tonespecs that do not set a tone level explicitly. 4. Added DTMF command to connect to a newsline server to the example tlb command file. 5. Added a new VoIP port configuration variable ConnectCmd which may be used to specify tlb commands to be executed when a VoIP connection is established. 6. Added a new VoIP port configuration variable InConf which may be used to add or remove a specific VoIP connection from the packet level conference. Previously the only way to isolate VoIP connections from each other was to disable conferencing globally by setting ConfEnable to zero. This caused a lot of confusion for "normal" operations. The .user command now displays an the 'I' user attribute for stations that have been Isolated from the conference. 7. Added a new command .rxlevel to display received audio level statistics from physical ports or VoIP connections. This command displays the value of the minimum and maximum samples, the running total, the RMS level and the number of samples that were monitored. The values are cleared after each .rxlevel command and then new values are accumulated for about one second. The -c switch enables a continuous display of levels several times a second until another .rxlevel command is entered. The -q switch suppresses the column header line. For example: tlb> .rxlevel Min Max Total RMS Samples -8230 7167 -46 4256 512 8. Modified connection and disconnection logic to suppress announcements for IRLP stations unless the new configuration file variable IRLPAnnouncements is set to 1. 9. Quieted QueueEvent logging, it now logs if more than one event is outstanding. 10. Added a -x switch to the .mute and .unmute commands to mute user text. Bug Fixes: 1. Cleaned up uninitialized variables found by Valgrind. Most were benign, but caused Valgrind to quit logging errors before reporting more interesting issues. 2. Modified VoIP port code to disable connect announcements by default. Added support for ConnectAnnouncements to Voip configuration variables. 3. Added initialization of the ID # to the generator code. Found by Valgrind, this could have caused unnumbered tone generators to fail to run if more than one tone generator was active. 4. Corrected a buffer overwrite bug which occurred when a sound device was configured to support two separate ports in stereo mode. 5. Modified sampling rate conversion (cm108) and CTCSS high pass filter's scaling to prevent math overflow with high input levels. 6. Corrected bug in transmitter timeout routine that prevented it from being reset when the offending input was removed. 7. Corrected a bug that caused the transmitter to be unkeyed 80 milliseconds prematurely under certain unusual timing circumstances (listening to the newsline server). CM108 based interfaces were not effected by this bug. 8. Modified the way the connection node count is handled so connections that nodes that are in the process of connecting or disconnecting are not included in the total. 9. Corrected a bug in the parallel port logic that clobbered bits set by external scripts when the parallel port is shared (ShareIRLP_Port set). 10. Cleaned up DTMF muting logic to prevent a courtesy tone from being sent at the end of every command sequence. 11. Added code to process any waiting DTMF commands when a VoIP ports pseudo COS drops. Speeds up the processing of commands by avoiding the need to wait for the DTMF timeout. 12. Corrected bugs in DTMF digit timing measurement. Holding buttons for an extended period on longer result in DTMF timeouts. 13. Modified code to send "Bye" packets to stations which are in the disconnecting state when anything is received from them. This is to cover the case where the initial "Bye" packet is lost. 14. Modified conferencing code to prevent doubling warning message from being sent to full duplex stations. #################################### Changes in version 0.43 July 3, 2009 New features: 1. Added support for three levels of audio priority to control how audio is mixed when multiple sources are active. Low priority sources are muted when higher priority sources are active. Medium priority sources are mixed at a reduced level when high priority sources are active. High priority sources are always mixed at full level. Automatic gain control is applied to the final mix to ensure it does not exceed a 16 bit value. The new port configuration variable AudioPriority sets the port's audio priority. It is set to high by default. The new configuration variable ReducedGain sets the gain used to mix medium priority sources with high priority sources, 100 is 100%. The default value is 25. The new port configuration variable AnnouncementPriority sets the audio priority of voice announcements (PCM or text to speech). The announcement source's priority is only used to control the mixing of announcement audio, it is not considered when mixing user audio. In other words audio from a low priority port will not be muted by a high priority announcement. The tone generator's output is not affected by audio priorities. Minor enhancements: 1. Added a new port configuration variable NoAudioInLooping to prevent the audio input routine from looping until no more audio is available from the input device. This is a workaround for an apparent driver bug for the Via sound device driver used on the "Little Blue" platform which returns invalid audio samples on back to back reads. If you have clicking in your transmit audio try setting this variable to 1. If it corrects the problem and you're not using a Via sound board please let me know. 2. Modified the .saystatus command to announce stations which are being disconnected as well as stations that are in the process of being connected. 3. Modified the configuration file parser to keep continue parsing the file following an error. Prevents lots of confusion that resulted when an error on one variable caused the configuration pass to abort. Note: Errors on pass 1 configuration variables prevent tlb from running but tlb will continue to run if errors are found on succeeding passes. 4. Added a -v command line switch to the .link command to show the audio priorities of sources when the link state is displayed. 5. Added a -P command line switch to the .link command to allow the source node's default audio priority to be overridden for the specified link. 6. VA3JSS added support for keying radio via a different output for the morse/voice ID. This should allow for keying the radio without CTCSS or DCS for use on repeaters etc with radios that support it. Can be enabled by setting IdAuxPTT to 1 on a per-port basis and setting the Aux_PTT_Bit and InvertAuxPTT accordingly. This is currently only available for parallel interfaces. 7. Added new port configuration variable NoHangtimeOnID to prevent IDs (voice and CW) from starting the transmitter hang timer. 8. Added a new configuration variable TempDir which specifies where temporary files are to be created. Currently temporary files are used to update the DNS cache and when tlb is configured to use a text to speech system. If TempDir is not set the WorkingDir will be used for temporary files. Bug Fixes: 1. Added audio buffering to the software CTCSS decoder. The CTCSS decoder was designed to process 160 samples at a time, but it has been given whatever happened to be read from the audio device since version 0.39. This means that since version 0.39 software detection of CTCSS only worked when the audio device happened to return 160 or more samples at a time. Notably an URI on a Little Blue does not. 2. Restored the TxTone configuration port variable. 3. Moved the processing of the RxTone port configuration variable to pass 2 so it works correctly if it's defined before RxCtcssMethod. 4. Restored support for the CWSpeed port configuration parameter which was lost when the original CW ID code was replaced with tone generator based code in version 0.40. 5. Corrected another bug in the CM108 sampling rate conversion code that caused noise to be generated on the input. For some reason the noise was most noticeable when the input signal used CTCSS. 6. Modified the .link command to handle a .link -m command following a .link command. Previously the ports where left linked in transceive mode rather than being set to monitor mode. 7. Corrected a minor memory leak that occurred when a specific link was unlinked (.unlink ). 8. Corrected the PID logged at startup, previously it was always zero. 9. Massive changes to the toneburst code. A timing related bug that caused the ToneBurstTimeoutTimer to be restarted over and over has been fixed. Additionally the tone burst logic now applies to all transmitters, not just the port's transmitter. Finally the poorly thought out FakeToneBurst port configuration variable was eliminated. The port's receiver is now enabled when: 1. A tone burst is received. 2. The ToneBurstMode is 2 and the proper CTCSS tone is decoded. 3. The port's transmitter has transmitted something other than an ID within the last ToneBurstTimeout seconds. #################################### Changes in version 0.42 May 28, 2009 Bug Fixes: 1. Set new user's CompressType from conference's CompressType rather than assuming GSM. Corrects playing of .WAV format welcome messages to non-GSM clients. 2. Added new port configuration variable CosPollRate to provide the ability to reduce the polling rate if desired. Fixes badly broken audio when an CM108 based interface is used on a "Little Blue" platform (677 Mhz Via CPU and USB 1.1 ports). 3. Modified VoipClock to reset timing average every 10 minutes to prevent math overflows that occurred after running for a few weeks (24.855 days to be precise). 4. Corrected a buffer overflow bug in the sampling rate conversion code that caused clicks in audio when CM108 was used on a Little Blue platform. 5. Added a CTCSS high pass filter in front of the software DTMF decoder. This improves DTMF operation when the user is running CTCSS and the sound card input is connected to an FM receiver before CTCSS filtering. 6. Moved DTMF the software decoder's input to after the RxDeemphasis filter. This improves DTMF operation by removing twist caused by FM transmitters preemphasis when the audio card input is hooked into an FM receiver before the receives deemphasis circuitry. 7. Modified file playback code to clear ssrc only when absolutely necessary. Corrects file playback to tlb clients under certain unusual timing situations. #################################### Changes in version 0.41 April 4, 2009 Minor enhancements: 1. Modified callsign validation routine to allow bare callsigns when tlb is not being used on the EchoLink network. 2. Setting up a permanent link between nodes now sets any underlying VoIP connections to permanent connections. 3. The permanent attribute can now be set on existing links. 4. Added code contributed by Jason VA3VSS to log the station's IP address as well as callsign on connects and disconnects when the new configuration variable LogIPAddresses is set. 5. Added configuration switch --enable-profiling to build thelinkbox with gprof profiling to aid development and debugging. 6. Added multiple parallel ports support contributed by Jason VA3VSS. The new port configuration variable DevName specifies the parallel device used by the port. 7. Added code to play Welcome file to VoIP connections of all types when a the Welcome file is in a .wav format. The welcome file support in thebridge's code requires that the welcome file be in thebridge's internal format and only supports GSM connections. When an .wav format file is provided thelinkbox's new welcome file support is used instead. The Welcome file variables WelcomeFile, MinPlayBackPause, and MaxPlayWithoutPause are now VoIP port variables to allow the global defaults to be overridden if desired. 8. Added VoIP port configuration variable DisconnectAfterWelcome to cause VoIP connections to be disconnected automatically after the Welcome message is played. 9. Added code to execute an optional script when a new VoIP connection is established. The new VoIP port configuration variable ConnectScript sets the path to the script. The script is executed with two arguments, the callsign of the station that connected and the string "connected". 10. Added code to tlbcmd to set port from the TLB_CMDPORT environment variable if present. 11. Added code to tlbcmd's play personality set the maximum wait time for the playback to complete from the TLB_MAX_PLAY environment variable if present. The default timeout is 30 seconds. 12. Added -v switch to the .users command to display the version and type of software the user is running when that information is available. Bug Fixes: 1. Turned off debug level DLOG_RTP that was inadvertently left on in the last release. 2. Corrected a bug in the serial port sharing code added in version 0.39 that prevented successful initialization of WB2REM / VA3TO style serial EchoLink interface boards. 3. Corrected a bug which caused a crash if the VoIP connection underlying a permanent link was disconnected. 4. Corrected a bug which prevented DTMF from being decoded from a VoIP connection while multiple streams were active (conferenced connections). 5. Corrected a bug in the saystatus command that caused pending connections to be announced as connected. The saystatus command will now say: "I am currently connected to " and "I am trying to connect to " separately. 6. Corrected a crash which occurred when a permanent connection was reestablished following a timeout. 7. Corrected a bug that prevented tlb from changing user identities when run in debug mode. #################################### Changes in version 0.40, Feb 14 2009 Bug Fixes: 1. Corrected a long standing bug in the RTP queue handler which caused incoming VoIP audio to stall when duplicate RTP packets were received back to back. Thanks to Lee K7KAJ and his WiFi link to his "radio shed" for help fixing this issue. 2. Corrected cm108 audio output that broken by the stereo support added in the last release. 3. Modified the courtesy tone logic to prevent a tone accessed transmitter from being keyed unless it has previously been enabled by a user's access tone. Thanks to Erik (and Skype!) for help in debugging this problem. #################################### Changes in version 0.39, Feb 14 2009 New features: 1. Thelinkbox can now support two radios using a single stereo capable sound device. Thelinkbox also allows multiple ports to share a single serial or parallel port. This means that the typical PC can act as a two port controller without additional sound devices. The new port configuration variable AudioChannel specifies which channel a port audio is connected to. The existing port configuration variables TxKeyMethod, RxCosMethod, DtmfMethod, PTT_Bit, and COS_Bit are used to specify which serial or parallel port bits drive PTT and which bits are COS inputs. 2. The linkbox now supports tone burst access repeater control that is typically used in Europe. See the new port configuration variables ToneBurstMode, ToneBurstFreq, ToneBurstMute, ToneBurstTimeout, ToneBurstToneID and FakeToneBurst for more information. Minor enhancements: 1. Massive restructuring of the audio buffering algorithm to minimize port to port audio delays. Previously audio was handled as 80 millisecond chunks resulting in a 160 millisecond port to port delay. Now audio is treated like a stream to minimize the delay. 2. Added -a command line option to the .sendbeacon command to force an update to be sent to the APRS-IS system. 3. Added .wav format "welcome" file support. Wave format welcome files can be played for any VoIP client. The legacy welcome file support inherited from thebridge only supports EchoLink clients. See the configuration variable WelcomeFile for more information. 4. Added -p command line option to the .link command to mark a port link as "permanent". Permanent links are ignored by the .unlink all, .unlink rf, .unlink voip, and .unlink commands. The link can only be removed by an explicit .unlink command that specifies both ports. 5. Added a new port configuration variable RepeaterPort to cause a permanent link to be created automatically from a port's receiver to its transmitter at initialization time. 6. Removed untested support for 8 bit sound cards. Sorry about that, I don't have any cards to test with and no beta testers have come forward. 7. Added "dtmf" to the port status string when an DTMF digit is being decoded. 8. Added port status string support for VoIP nodes (lightly tested). 9. Added support for the MaxPlayWithoutPause and MinPlayBackPause configuration variables to the FILE playback "tone" generator. Bug Fixes: 1. Corrected an unnoticed long standing bug in the Doug Hall support caught by gcc 4.3.2's anal warnings. 2. Corrected uLaw/RTP bugs. Previously uLaw only worked correctly over the Speak Freely protocol. 3. Corrected a crash which occurred when thelinkbox was unable to open the sound device. 4. Corrected operation of COS & CTCSS inputs via the parallel port. Thanks to Erik oh2lak for reporting the problem and testing the fix. 5. Corrected formating of APRS-IS packets when configured for certain locations (longitude less that 100 degrees for one). Thanks to Erik oh2lak for reporting the problem and testing the fix. 6. Corrected crash when APRS-IS is enabled and the ConferenceCall was longer than 9 characters. It is not possible to use APRS-IS with such "calls" since the APRS-IS object name is a fixed size, but thelinkbox will now report the error instead of crashing. 7. Corrected a crash that occurred when attempting to execute a DTMF command when EchoLink wasn't enabled (EchoLinkEnable = 0). Thanks to Erik oh2lak for reporting the problem. 8. Corrected a crash that occurred when attempting to execute a DTMF command without a valid current port selection. 9. Corrected compile problems in the AX25 code under FreeBSD 4.x. 10. Corrected a bug in tlbcmd's imike emulation that could cause the uLaw CODEC to be selected inadvertently for full duplex connections. 11. Corrected a premature DTMF command timeout when buttons where pressed slowly. Previously the command timeout was started on button press, now it's started on button release. 12. Reworked Vox code so it's treated more like a "real" cos. Added verbose debug logging enabled by setting the DLOG_COS_CTCSS (0x400) bit in the debug variable. #################################### Changes in version 0.38, Jan 3 2009 Changes which are not backwards compatible: 1. Inverted the active sense of RS232 based inputs to conform with RS232 convention to avoid future confusion. NOTE: configuration files for previous versions must be modified by changing the sense of the InvertCOS and InvertCTCSS variables. If your configuration file did not have an InvertCOS or InvertCTCSS then add one and set it to one. The default is non-inverted. 2. Changed the software DTMF method for VoIP ports to 3 to match physical ports. Method 1 is now undefined for VoIP ports. New features: 1. Added 1200 baud AFSK AX25 packet generation support to the tone generator. This feature may be used to send APRS beacons to advertise the nodes location and CTCSS tone and other information. The ability to generate packet is also expected to be useful for sending telemetry. See the "Ax25 specific variables" section in the sample port configuration file for more information. 2. Added ability to list the node on the APRS-IS (Automatic Packet Reporting System-Internet Service) system. See AprsIsEnable in the sample configuration file for more information. Minor enhancements: 1. Added new example script that plays a rotating set of prerecorded voice IDs periodically to a port when idle. See scripts/voiceid.sh for more information. 2. Added new port configuration variable "ConnectAnnouncements" to allow connect and disconnect announcements to be enabled/disabled on a per port basis. 3. Added automatic detection of big endian hosts to configure script. 4. Added to the "dtmfdecode" event. 5. Restored the RxTone configuration file variable. The receiver's CTCSS tone may now be set by either the configuration file variable or the RxTone command. The eliminates the need to write an configuration script just to set the RxTone. 6. Added an CTCSS high pass filter in the transmitters audio path, enabled by the port configuration variable TxCtcssFilter. 7. Added the .pcm command which allows raw PCM data from various points in the signal path to be saved to disk. This command is primarily an debug aid. 8. Added software preemphasis and deemphasis support to properly shape audio when thelinkbox is connected directly to an FM receiver's discriminator or an FM modulator by passing the radios built in preemphasis and deemphasis circuitry. See the port configuration variables RxDeemphasis and TxPreemphasis for more information. 9. Added configure test for the EVIOCGUNIQ ioctl which is not available in 2.4 kernels and added #ifdefs as needed to get thelinkbox to build. EVIOCGUNIQ is only needed for USB device serial number support so it's not essential. It is still an open question if thelinkbox will actually run correctly on 2.4 kernels or not. Minor changes: 1. The APRS/AVRS configuration variables TxPower, Haat, AntGain, AntDir, and Frequency are now port specific. This provides the ability to beacon different information on different ports for multiband repeaters. 2. Replaced the poorly conceived VoipOutMap and VoipInMap configuration file variables with LinkVoipIn and LinkVoipOut port configuration variables. Bug Fixes: 1. Corrected Redhat startup script installation. tlb.sh should have been named tlb. Also added chkconfig info courtesy of John K1DWU. 2. Corrected a major memory leak introduced in 0.84. Several kilobytes of memory are lost everytime the user database is updated (by default every 10 minutes). Over time this adds up to a significant amount of memory. 3. Corrected bogus read failures reported by GetAudioIn with some sound card drivers. Thanks to KB7RSI for his help debugging this problem. 4. Corrected bug in CText class which prevented initial buffer size from being increased. 5. Corrected a bug which causes an infinite loop on startup when compiled with some compilers (gcc 3.3.4 for the ARM) that have where the default char type is unsigned. 6. Corrected bug that broke PCM file based callsign spelling. Thanks to WB5TTS for reporting and help debugging the problem. #################################### Changes in version 0.37, July 28 2008: (beta release) Minor enhancements: 1. Update Asterisk support for chan_rtpdir version 0.5 which added sequence numbers and DTMF support. NB: chan_rptdir version 0.2 is no longer supported. DTMF received from Asterisk is handled like DTMF received by any other node, commands are decoded by its possibly unique DTMFCommandTable. 2. Added -b, -c and -t arguments to the .users command. The -b switch suppresses the display of the user's attributes and uses a tab to separate fields. The -c switch displays the amount of time each user has been connected. The -t switch displays the time since the user last transmitted. Bug Fixes: 1. Corrected a bug that caused an assert failure (and core dump) when unlinking from an active source when multiple sinks were linked. 2. Corrected bug that caused an assert failure (and core dump) when a new sink was linked to an active source. 3. Corrected a bug that corrupted audio when driving multiple sinks. 4. Corrected a bug that caused audio corruption on protocols/codecs which carried other than 640 audio samples per packet. (Basically everything other than Asterisk and EchoLink). Thanks to beta tester extraordinaire VK3JED for finding this bug and help testing the fix. 5. Corrected a bug that caused the courtesy tone to be sent at the wrong time when a source was connected to multiple sinks. #################################### Changes in version 0.36, July 23 2008: (beta release) New features: 1. Added support for full duplex via conference rooms. The conference must be thebridge version 1.04 or later or thelinkbox version 0.36 or later and the FullDuplex configuration file variable must be set. Minor enhancements: 1. Added support for uLaw (uncompressed) codec for rtp and Speak Freely connections. Added -u switch to the .connect command to specify uLaw connection. 2. Corrected Internet dejitter buffer operation for the Speak freely protocol. 3. Added full duplex (-x) and uLaw (-n) support to the iMike emulation. #################################### Changes in version 0.35, July 21 2008: (Limited beta release) New features: 1. Added support for Asterisk's new chan_rtpdir driver. See the configuration variables AsteriskPort, AsteriskIP, AsteriskBind2IP and AsteriskDesc in tbd.conf.sample for more information. NB: This code is for people who are knowledgeable about Asterisk and the app_rpt project. I needed a *lot* of help from W9SH and K6JWN to get my Asterisk node running, so I won't be offering any help for configuring Asterisk to use the new chan driver. Minor enhancements: 1. Added code to enable the stock EchoLink clients DTMF pad when the configuration file variable EnableRemoteDTMF is set to 1. 2. Added an emulation profile for dtmfregen to tlbcmd. 3. Added _fd.conf, "port####.conf" and port####_fd.conf to the list of configuration files which are searched for configuration information when a new VoIP client connects. "####" is the port number of the audio port (even port number) that the client connected to. For example the configuration file used for connections to the EchoLink port is port5198.conf. When a new VoIP clients connects thelinkbox first looks for .conf, then port####.conf and finally voip.conf. If the client is full duplex the search order is _fd.conf, .conf, port####_fd.conf, port####.conf and then finally voip.conf. The first configruation file that is found is processed, the rest are ignored. 4. Added -f switch to the .connect command to specify full duplex connection. 5. Performance optimization: replaced calls to BiQuad function with BIQUAD macro in filter functions. Bug Fixes: 1. Modified code to prevent 5 bytes of garbage from being written to the end of saved .info files. 2. Modified code to prevent station list received from other conferences from being saved as info and in .info files. 3. Corrected an infinite loop that occurred when the tone generator was given a DTMF string followed by a space. #################################### Changes in version 0.34, June 26 2008: (beta release) Minor enhancements: 1. Modified tlbcmd/tlbchat to save and restore the history file from the user's home directory rather than the current directory. 2. Modified ExecHook to pass all chat text in the second argument for "chat" and "sent_chat" events. Previously everything including the event type was passed in the first argument which made life for scripts harder rather than easier. 3. Added code to replace "$TLB_PORT" within command strings with the name of the port that issued the command. 4. Added a .frequency command that allows the port's receiver frequency, transmitter offset, CTCSS encode and CTCSS decode to all be specified at once. If no arguments are given the .frequency command will display the current settings if available. 5. Added new example DTMF command script to set the transmit, receive and CTCSS frequencies for a 2 meter remote base. (scripts/freqctrl.sh) 6. Added new example that implements a DTMF regeneration scheme for systems that use site prefixes. See scripts/prefix.sh for more information. 7. Modified the DTMF muting logic. The MuteDTMF port configuration variable now specifies if DTMF tones should be muted before reaching the port's transmitter. Previously MuteDTMF specified if DTMF tones were muted before leaving the port's *receiver*. Typically we want to pass DTMF tones to link transmitters, but not repeater and remote base transmitters, changing the binding from the receiver to the transmitter makes this possible. NB: DTMF mute is only active for receivers on ports configured with an DTMF decoder (DtfmMethod > 0). 8. Modified the .disconnect command to accept "." as a short hand for the station currently talking to match the .mute command. 9. Added include file support for the DTMF command files. 10. Added -p command line switch to the .tonegen command to send the generated tone to the current nodes peers rather than the port itself. Peers are other nodes that are currently connected to the current nodes receiver. The option is useful for DTMF regeneration among other things. An -P command line switch can be used to send generated tones to the current node as well as the node's peers. 11. Added -c command line option to the .tonegen command to execute the specified command when the tone completes playback. Bug Fixes: 1. Modified code to record locally generated chat traffic even when the conference is empty. 2. Corrected a bug in the command parser that could cause command output to be logged instead of the user's command. This bug could also prevent multiple commands on one line from executing properly. 3. Corrected the name of the environment variable that holds the current port in tlbcmd (TLB_PORT, not TLBPORT). 4. Corrected .unlink command to fully unlink ports, previously only half of the link was unlinked. 5. Modified logic to announce VoIP connect and disconnect events to ports listed in the VoipInMap and VoipOutMap configuration variables. Previously connection and disconnection announcements were sent to the current port. 6. Added decrement of Transmitters to the .unlink all command. Fixes massive memory leak caused by failure to delete uncompressed audio data after an .unlink all command is used. 7. Modified Doug Hall protocol handlers to prevent updates from being sent too fast to be recognized. The Doug Hall protocol uses timeouts to recognize frame boundaries. 8. Modified the configure setup to detect the lack of a C or C++ compiler and exit with an error message rather than trying to press on. #################################### Changes in version 0.33, May 14 2008: (beta release) New features: 1. Modified the code to allow thelinkbox to be run without a sound card. Why? To give a conference server a DTMF command line and all of the other capabilities of thelinkbox such as connections between VoIP clients running different codecs, speech synthesizer, etc. 2. Added support for radio frequency and CTCSS control via the Doug Hall protocol using data and clock lines attached to either the parallel port or an USB audio dongle's GPIO lines. Connections to the parallel port are untested currently. The new commands rxfrequency, txoffset, rxtone and txtone are used to set the radio's operating parameters. Minor enhancements: 1. Added code to strip trailing spaces from end of string configuration file variables to some difficult to find problems. Thanks to N4KLB for the suggestion. 2. Modified text to speech preprocessing code to add text specified by the new configuration variable CallSignSpelling between letters of a callsign before passing it to the speech synthesizer. Previously tlb just inserted spaces but it was discovered that some speech synthesizers (Cepstral for example) pronounce single letter abbreviations when they follow a number. Thanks to wd5m and n4klb for testing and suggesting solutions to this problem. 3. Added support for spelling out callsigns phonetically by setting the new configuration file variable PhoneticFilePath. 4. Added -s (spell) switch to the .say command to force the argument to be treated as a callsign. Callsigns are spelled out letter by letter. Bug Fixes: 1. Corrected compile errors in new ctcss code under FreeBSD (u_int8_t). 2. Corrected bug in the tone generator that could cause the transmitter to get stuck on while trying to generate dtmf. 3. Corrected compiler errors and numerous warnings about deprecated conversion from string constant to 'char *' when compiling with GCC 4.2.x. 4. Modified USB PTT routine to use the PTT_Bit and InvertPTT configuration file variables. Previously the USB GPIO bits were hardcoded for the "standard" bits. #################################### Changes in version 0.32, April 24 2008: (beta release) New features: 1. Added direct support for command prefix decoding. See DTMFPrefix, PrefixedTone and PrefixTimeout in port.conf.sample for more details. 2. Software based CTCSS decoding is now supported. The tone frequency is set by the RxTone port configuration variable. Setting Rxtone to "search" causes thelinkbox to attempt to determine a which tone is in use by monitoring the channel. RxTone may also be set to "any" which will enable all possible tones for testing. Minor enhancements: 1. Changed DTMFCommandTimeout from a global configuration variable to a port configuration variable so different ports may be configured with different timeouts. 2. Added configuration variable DTMFCommandFile for Voip ports. 3. Began modifications to allow a single stereo sound card to be use to interface to two separate radios. NB: modifications are *NOT* complete yet. Bug Fixes: 1. Modified the code to use 48khz to talk CM108 based USB dongles. Added local sampling rate conversion routines to convert between 8Khz and 48Khz. On some (all ?) versions of the kernel and some (all ?) versions of the audio subsystem sampling rate conversion between the 8Khz that thelinkbox uses and the 44.1 or 48 Khz sampling rate the CM108 chip actually supports in hardware results in an unacceptable amount of noise/clicking/buzzing being introduced. 2. Added code to set the TLB_PORT environment variable to the port issuing the command send a script is run. 3. Added numerous checks to make sure the current port still exists before trying to use it. Now that VoIP connections are treated as the same as other ports it's possible for port to disappear at any time. #################################### Changes in version 0.31, April 11 2008: (beta release) Minor enhancements: 1. Added DTMF generation support to the tone generator. For example: tonespec = ID 1000 DUR 100 PAUSE 250 DTMF #123 generates 3 DTMF digits that are 100 milliseconds long with 250 milliseconds between them. The active tone time is set by the DtmfEncodeDuration configuration variable if DUR is not specified. The pause between digits is set by the DtmfEncodePause configuration variable if PAUSE is not specified. The old .dtmfgen command has been deleted since it's no longer needed. 2. Modified syntax of Tonespecs to make parsing more general and order independent. Tone segments are now terminated with a ':' character. As a result the DUR token is no longer special so it can be used to specify the duration of a DTMF tone without conflict. 3. Added support for playing wave files to the tone generator. 4. Added code to send an chat event to the event hook when a text chat message is received from a user. 5. Added code to send an sent_chat event to the event hook when a chat message is sent. Bug Fixes: 1. Corrected an infinite loop that occured when attempting to send a courtesy tone under certain rare timing conditions. 2. Corrected bug that could cause a segfault when an invalid email address is entered for the EmailAdr configuration variable. #################################### Changes in version 0.30, Mar 21 2008: (beta release) Minor enhancements: 1. Added support for CW generation to the .tonegen command. For example if you might want to configure a multiple band remote base such that the courtesy tone for the 2 meter radio is a '2' in CW and the courtesy tone for the 6 meter radio is a '6'. That could be accomplished by the following tone specs: tonespec = ID 1000 tf1 1000 wpm 25 cw "2" tonespec = ID 1001 tf1 1000 wpm 25 cw "6" The port configuration file for the 2 meter ports would set Ctone = 1000 and the port configuration file for the 6 meter would set Ctone = 1001. 2. Modified configuration file parser and .set command to handle variable assignments without spaces around the equals sign. #################################### Changes in version 0.29, Mar 12 2008: (limited beta release) Bug Fixes: 1. Corrected tracking of the last activity for timing of IDs. Previously that triggered an ID was playing an announcement file or manually firing it using the .id command. #################################### Changes in version 0.28, Mar 12 2008: (limited beta release) Bug Fixes: 1. Make a copy of the VoIP client's callsign rather than saving a pointer to it. Everytime an inbound SDES packet is processed the callsign is updated causing it's address to change. #################################### Changes in version 0.27, Mar 11 2008: (beta release) Minor enhancement: 1. Reimplemented support for the CtoneMap configuration variable. Bug Fixes: 1. Corrected a bug in GetRxAudio which caused a crash when the CToneTimer was started when only a single buffer was queued for consumption. This occurs when there's packet loss. 2. Moved include for common.h to after system headers. Fixes compile problems (min macro) on some systems. 3. Modified the VoIP node's audio stream logic correct a bug that caused one transmitter to consume a receiver's audio N times when the receiver was linked to N transmitters. Fixes echo reflector behavour plus crashes when the next transmitter tried to reference deleted structures. #################################### Changes in version 0.26, Mar 9 2008: (beta release) Minor enhancement: 1. Added support for the TLBPORT environment variable to imike, ispeaker and play emulation. Bug Fixes: 1. Removed the signal handler for SIGTERM and SIGINT for tlbcmd's play emulation so play can be aborted by SIGTERM. 2. Reimplemented support for the courtesy tone generation by Voip ports. The configuration file variables VoipCtone, VoipCtoneMap and VoipCtoneDelay are obsolete, they have been are replaced with the port variables Ctone, CtoneMap and CtoneDelay now that VoIP ports are handled the same as physical ports. 3. Modified port and link commands to hide VoIP ports that are in the disconnecting state. 4. Corrected spurious complaints from CToneAccessMap about being called with CurrentNode == NULL. 5. Modified the command parser to allow a dot prefix when multiple commands are entered on one line. Previously ".help;.help" would fail because the '.' wasn't stripped from the second command. 6. Corrected bug in the command parser that caused the first command to be executed multiple times when another command wasn't found or was partially matched. #################################### Changes in version 0.25, Mar 7 2008: (limited beta release) Minor enhancement: 1. Added a -c command line switch to the .say command to send a TBD_SAY_COMPLETE response to tlbcmd/tlbchat when the audio transmission completes. 2. Modified the code to extract callsigns from SDES packets for RTP clients as well as EchoLink. Allows nodes to be named by callsign rather than ip addresses in offgrid networks without hostfile entries. 3. Added support for multiple commands on one line separated by ';'. Bug Fixes: 1. Corrected a bug in the file playback code that caused crashes on some systems when a welcome file was played for SF clients. 2. Reimplemented support for the VoipOutMap configuration variable. 3. Modified CmdInfo to suppress disable of "Currently displaying" unless ShowStatusInInfo is enabled. #################################### Changes in version 0.24, Mar 5 2008: (limited beta release) New features: 1. Major restructuring of the internal infrastructure to treat VoIP connections as pseudo ports. This means that features which previously were only applicable to physical ports such as telemetry tone generation, DTMF command processing, timeout timers, etc now apply to VoIP connections as well. The interconnect matrix has been redesigned and the "limitation" of 32 ports has been eliminated. It is now possible to link VoIP clients together that are running different codecs and protocols. 2. Added support for the TLBPORT environment variable. The .script command now sets the TLBPORT environment variable to the name of the port that executed the script and tlbcmd now uses the variable to prefix commands issued by the script with "port ${TLBPORT};". In many cases this allows scripts to be blissfully ignorant of the port selection and just rely on the man behind the curtain to do the right thing. This feature can be disabled by the new -b (bare) tlbcmd command line switch. 3. Voip connections are now configured dynamically when the connection is established. First tlb looks for a node specific configuration file .conf and then the generic configuration file voip.conf. If either of these files are found they are used to configure the new VoIP node. Minor enhancement: 1. Add display support for DTMFCommandFile to the set command. 2. Added code to log any error messages (such as bad password) received from the EchoLink directory servers. 3. Changed the configure script's default for readline support to disabled to reduce build problems. To enable readline support run configure with the --with-readline flag. 4. Added new configuration file variable AllowADPCM to enable the Speak Freely and RTP conferences to support clients running the ADPCM codec. NB: This does *NOT* mean that GSM and ADPCM clients will be able to communicate by connecting to a common conference. GSM packets are only relayed to GSM clients and ADPCM packets are only relayed to ADPCM clients. 5. Added support for the dmalloc memory debugging tool. Added code to explicitly release memory on shutdown to help locate actual memory leaks. 6. Added a new configuration variable EchoLinkEnable that can be used to prevent tlb from opening sockets for the Echolink ports. 7. Added code to display a usage message when the .monitor command is run without arguments. 8. Modified the .users command to display an 'a' user attribute for ADPCM users. 9. Added support to the .play4 -u command for SF and RTP clients. Bug Fixes: 1. Modified tlbcmd to disable readline support when used by a script to prevent SetTerminalMode from spewing error messages. 2. Corrected a bug in SFBind2IP which also broke Bind2IP operation. Thanks to VK3JED for debugging help. 3. Corrected a bug in tlbcmd that caused a segfault when a ^D was used to exit and it was compiled with readline support. 4. Removed newline from playbackcomplete event. This was the only event which ended in a newline. Thanks to WD5M for finding and reporting this. 5. Modified SF and RTP code to ignore packets with unknown codecs rather than kicking the connection. 6. Modified the .connect command to default to the port specified by the SF_Port configuration variable rather than 2074 for Speak Freely and RTP connections to match tbd's behaviour prior to version 0.87. 7. Corrected incorrect generation of "bye/disconnect" packets for Speak Freely and RTP clients. Previously "bye/disconnect" packets were always generated in EchoLink format. 8. Corrected a bug in the access control routines which prevented -R or -L stations from being .allowed to connect via RTP or SF. 9. Corrected a bug in the access control routines that caused -R or -L callsign suffixes to be lost for station connected via RTP or SF that were allowed by IP address. 10. Corrected a bug in the connect command that prevented a connection to a node by IP address from being reestablished immediately after it had been disconnected. 11. Corrected bugs that prevented the .record command from recording traffic from SF and RTP clients. NB: only GSM traffic can be recorded. 12. Modified the code to assume new SF and RTP connections are using the GSM codec rather than ADPCM. There's no way to tell if this is actually the case until an audio packet is received from the client. This assumption may be wrong, but currently we only support welcome messages in GSM format. If a welcome message is played in GSM format for a some clients (linkbox) they will *SWITCH* to GSM when they receive it. Meaning if you want an ADPCM conference you should *NOT* configure the conference to send a welcome message. 13. Fixed a typo in the .connect command which caused duplicate dynamic conferences to be created. #################################### Changes in version 0.23, Feb 02 2008: (limited beta release) Minor enhancement: 1. Added Echolink firewall mitigation code courtesy of Johnathan K1RFD. 2. Added support for a new configuration variable ShowStatusInInfo to enable thelinkbox to be configured to automatically show the name the current connection in the info field on the EchoLink directory servers. See the sample configuration file for more details. #################################### Changes in version 0.22, Jan 28 2008: (beta release) New features: 1. Added support for CTCSS input from external decoders. Hardware connections are defined by the new port configuration variables RxCtcssMethod, CTCSS_Bit and InvertCTCSS. The new variable RxCTCSSMode is used to enable and disable the CTCSS mode. See the sample port configuration files for more details. 2. Added new configuration variable DtmfCTCSSMode to specify if CTCSS is required to enter DTMF commands or not. 3. Added new script getnews.sh to fetch the weekly Amateur Radio Newsline report and format it for playback by thelinkbox. (You'll find it in the new scripts subdirectory). Bug Fixes: 1. Corrected bugs in the .shutup command, it actually works now. #################################### Changes in version 0.21, Jan 13 2008: (beta release) Bug Fixes: 1. Added code to the .link command to suppress the display of VoIP inactive connections. 2. Restored Play4 command fixes added in 0.19 that were lost in 0.20. 3. Corrected corrupted port to port audio which occurred on some hardware platforms and some operating systems. (Specifically on a Dell GX240 running FreeBSD 6.1). #################################### Changes in version 0.20, Jan 06 2008: (limited beta release) Bug Fixes: 1. Replaced hardcoded phoney EchoLink number that is used when thelinkbox is not logged into the EchoLink network with a crc of the user's callsign. Fixes EchoLink and RTP connections between two nodes when neither node are logged into EchoLink. #################################### Changes in version 0.19, Jan 01 2008: (limited beta release) Minor enhancement: 1. Added a new port configuration variable RxTimeout suggested by VK3JED. An receiver timeout is useful to prevent a signal on one input of a multiple input repeater from preventing other inputs from being used because of a transmitter timeout. The previous configuration variable TimeoutTone was changed to TxTimeoutTone and a new configuration variable RxTimeoutTone was added. 2. Added new port configuration variable DtmfCoverTone to specify a tone to play while a audio is muted because a DTMF command sequence is in progress. 3. Added code to set the environment variable TLB_PORT with current port name when external scripts are executed by the .script command. 4. Added code to the .tonegen command to allow a tonespec that's running to be stopped. .tonegen !. 5. Modified the Play4 command so file playback is also sent to the currently selected port. Bug Fixes: 1. Corrected a bug which caused the configuration variables Ctone and CtoneMap to be applied to the wrong port. Really, I'm not just kidding this time. 2. Corrected a bug which caused .set Ctone = 0 or .set VoipCtone = 0 from being accepted. A tone ID of zero disables courtesy tones. 3. Corrected a bug which caused severely broken ADPCM receive audio introduced in 0.13. Yet another VK3JED find. 4. Corrected a bug which caused thelinkbox to hang when attempting to play a tonespec with a with a syntax error. 5. Modified the leading squelch suppression logic enabled by the configuration variable UngatedRx to wait for two buffers w/o COS before tossing the first buffer with COS. Improves excessive chopping on marginal signals. #################################### Changes in version 0.18, Dec 27 2007: (beta release) Bug Fixes: 1. Corrected a bug which caused the configuration variables Ctone and CtoneMap to be applied to the wrong port. 2. Corrected a new bug introduced by the child exit logic changes in last release. If a child exited while thelinkbox was in a select call thelinkbox would report "select() failed, No child processes (10)" and then exit. #################################### Changes in version 0.17, Dec 21 2007: (limited beta release) Minor enhancement: 1. Added port configuration variable MinDtmfInterdigitTime to specify the minimum amount of time between repeated digits in milliseconds. Users in marginal areas, marginal decoders, incorrect levels or other problems can cause a single DTMF digit held longer than the decoder's decode time to be decoded multiple times. This variable specifies a minimum delay time between identical digits for them to be accepted as distinct entries. 2. Added port configuration variable Min1stDigitHoldTime to specify the minimum amount of time that a DTMF digit that initiates a DTMF command must be sequence held to be considered valid. Helps mitigate voice falsing. 3. Added port configuration variable Dtmf1stDigits to limit the DTMF digits that may initiate a command sequence. This is another feature to help mitigate voice falsing. Bug Fixes: 1. Corrected a bug that could cause the exit status of child processes to be missed when if more than one child exits at a time. This bug prevented EventScripts from being called correctly. 2. Corrected a bug that prevented "$1" in the DTMF command table from being expanded for 2 digit DTMF commands. 3. Changed the VoIP courtesy tone generation logic to prevent courtesy tones from being sent when the dejitter buffer was near empty, but not completely empty. Prevents unintentional arcade machine emulation. #################################### Changes in version 0.16, Dec 19 2007: (limited beta release) Minor enhancement: 1. Changed configuration variable "Node" to a command for easier access. Running the .port without arguments lists the available ports plus current port status. 2. Added code send the "NAME" RTCP field to SF and RTP clients. The default value is ConferenceCall unless overridden by the new configuration variable FullName. The CNAME field is now set to "CALLSIGN" for compatibility, previously it was set to ConferenceCall. #################################### Changes in version 0.15, Dec 18 2007: (limited beta release) Bug Fixes: 1. Added code to handle case where TxKeyMethod = 1 and DtmfMethod = 0 (serial EchoLink interface with DTMF disabled). Previously the Tx was not keyed unless DtmfMethod was also 1. 2. Fixed a bug which caused a crash which occurred when CW ID went off while playing a file (and probably under other undiscovered circumstances). Thanks to VK3JED for uncovering the bug and providing remote access to his system for debugging. Running gdb on core dumps 1/2 a world away... priceless! 3. Removed CORE_DUMP() from GsmTx which gets called when there are active simultaneous SF and EchoLink GSM connections. Not only is the case not a "can't happen", Tony made it happen! 4. Corrected bug in which could cause the transmit timeout timer tone to be truncated. #################################### Changes in version 0.14, Dec 14 2007: (beta release) Bug Fixes: 1. Corrected bug introduced into EchoLink and RTP/GSM transmission introduced by 0.13. #################################### Changes in version 0.13, Dec 14 2007: (beta release) New features: 1. Added GNU readline support to tlbcmd and tlbchat. Command history is now available via the up arrow among a huge list of other things that readline knows now to do. Executive summary: use the cursor keys and they might just do what you expect. Minor enhancement: 1. Added -p switch to the .connect command to allow Speak Freely and RTP connections to be made to any port. 2. Added -m switch to the .connect command connections to be established in monitor mode. 3. Added configuration variable VoipOutMap to specify which RF ports to connect to an VoIP connection established with the .connect command. This replaces the previous behavior of .connect which only connected the current port as defined by the Node variable to the new connection. 4. Reworked .link command syntax and functionality. The .link command now uses port names rather than port numbers and also supports Voip connections. Ports are now linked in both directions unless the new -m switch is specified. New syntax: .link [-m] [...]. 5. Added display of port mapping's for VoIP connections to .link (no arguments) command. 6. Modified all configuration "Map" type configuration variables to take symbolic port names rather than numeric port names. 7. Replaced the previously optional NodeName configuration variable with CreatePort. The CreatePort directive is now used to create an RF port that following port configuration variables will reference. The old port configuration variable will be replaced with a command in the next release. 8. Added support for the -p command line parameter to the iMic emulation in tlbcmd. Bug Fixes: 1. Modified code so data is always sent from the appropriate port. Previously IRLP data (after conversion to EchoLink format) was sent to the EchoLink ports, but from the IRLP ports. Normally this is not a problem, but if a user's firewall is using dynamic rules created by outbound packets then the these packets would be lost. Effect is some EchoLink clients can not hear IRLP stations via integrated IRLP/EchoLink conferences. 2. Fixed major audio problems when one VoIP connect was linked to multiple RF ports. 3. Modified Speak freely protocol code to send GSM packets of the same size as the legacy Speak freely code. Previously thelinkbox sent 4 GSM frames per UDP packet (the same as EchoLink and RTP) which caused the brain damaged packet repacker in thebridge to do the wrong thing (TM). This prevented thelinkbox from talking to the IRLP side of integrated IRLP/EchoLink conferences. 4. Corrected tlbcmd's log filename generation for iMic, iSpeaker and play emulation. 5. Added code to set the sendinghost in Speak Freely headers. Other changes: 1. Renamed configuration variable DefaultMap to VoipInMap to better reflect usage. #################################### Changes in version 0.12, Dec 7 2007: (beta release) Minor enhancement: 1. Added a configuration variable (VoipDejitterDelay) to allow the Internet dejittering buffering delay to be tweaked. Bug Fixes: 1. Corrected bug in ADPCM transmissions that caused severe clicks and audio distortion. 2. Corrected bug what caused multiple copies of tlb to (attempt) to run at the same time when the EventScript variable pointed to something that didn't exist or wasn't executable. 3. Modified the .id command so it works when IdInterval is 0. #################################### Changes in version 0.11, Dec 5 2007: (limited beta release) Minor enhancement: 1. Added CtoneResetsTimeout to allow transmit timeout timer to be reset by courtesy tone rather than waiting for transmitter unkey. 2. Added support for 8 bit .wav files. Bug Fixes: 1. Moved transmitter keying from Audio_Handler to WriteAudioOut to ensure transmitter is always keyed when audio is written. Previously certain timing cases (like the first .tonegen command after startup) would not key the transmitter. 2. Fixed infinite loop in AddToneGen that occurred when a tonegenerator was added while a different one was running. 3. Applied fix from wb5tts to correct uninitialized buffer bug in UsbInit which occurred when the USB dongle is only audio device. 4. Corrected bug in CToneGen that caused tone generation to fail randomly on the first tone segment when the uninitialized garbage in Tone1Angle and Tone1Angle looked like a floating point "not a number". 5. Corrected transmitter timeout handling for VoIP clients. Previously the VoIP timeouts were not reset when the VoIP client stopped talking. 6. Corrected bug in VoipAudioAvailable while allowed audio to be consumed during the buffering state. Caused audio dropouts at beginning of ADPCM transmissions. #################################### Changes in version 0.10, Nov 30 2007: (beta release) New features: 1. Added .tonegen command. 2. Added .dtmfgen command. 3. Added ToneSpec configuration variable to store tone specifications for that can be used for a variety of purposes such as courtesy tones, command acknowledgements, invalid command indication, timeouts, DTMF cover tones, busy tones, dial tones, etc. 4. Added support for transmitter hang times. Hang time is set by the new port configuration variable HangTime. 5. Added support for courtesy tone generation defined by the new port configuration variables Ctone, CtoneMap and CtoneDelay. 6. Added transmitter timeout timer controlled by new port configuration variable TxTimeout. If desired the port configuration variable TxTimeoutTone may be set to a tone to play on timeout. Minor enhancement: 1. Modified code to display the physical USB address of compatible dongles. Bug Fixes: 1. Corrected bug which left transmitter keyed forever following CW message. 2. Deleted left over debug code that mapped port 1 to port 0 on start. This caused crashes when the .link command was run without arguments if the system didn't have a port 1. 3. Corrected error message displayed by when the SerialDevName configuration variable wasn't defined. 4. Corrected bug in the .set command that would cause a crash when displaying values of configuration variables that were changed to class members in version 0.09. #################################### Changes in version 0.09, Nov 26 2007: (beta release) New features: 1. Added support for CM108 based USB audio dongles. 2. Added support for parallel port under FreeBSD. 3. Modified code to allow multiple radio ports. The configuration file variable "port" is used to create additional ports as well as control which port existing commands are apply to. 4. Added .link and .unlink commands. 5. Added code to select USB devices by physical address as well as USB serial number. 6. Added support for include files in configuration files. Bug Fixes: 1. Corrected compile errors under FreeBSD. #################################### Changes in version 0.08, Nov 10 2007: (first public beta release) ... lots ... #################################### Changes in version 0.02, April 20 2007: (limited beta release) New features: 1. Added an option to an use external text to speech synthesizer for voice prompts instead of PCM audio files. Tested with festival-lite (http://www.speech.cs.cmu.edu/flite/), but should be usable with any TTS system that can generate 16 bit 8Khz wav files. Read the comments for the configuration file variable TTS_ExePath for more information. #################################### Changes in version 0.01, April 7 2007: (limited beta release) Initial release