mirror of https://github.com/wb2osz/direwolf.git
Pull request 353 - Fix spelling errors.
This commit is contained in:
commit
8619b74c7b
|
@ -133,7 +133,7 @@ endif()
|
||||||
# auto include current directory
|
# auto include current directory
|
||||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
|
||||||
# set OS dependant variables
|
# set OS dependent variables
|
||||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
set(LINUX TRUE)
|
set(LINUX TRUE)
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
# $ ls -l /dev/hidraw*
|
# $ ls -l /dev/hidraw*
|
||||||
# crw------- 1 root root 247, 0 Sep 24 09:40 /dev/hidraw0
|
# crw------- 1 root root 247, 0 Sep 24 09:40 /dev/hidraw0
|
||||||
#
|
#
|
||||||
# An ordinary user, trying to acccess it will be denied.
|
# An ordinary user, trying to access it will be denied.
|
||||||
#
|
#
|
||||||
# Unnecessarily running applications as root is generally a bad idea because it makes it too easy
|
# Unnecessarily running applications as root is generally a bad idea because it makes it too easy
|
||||||
# to accidentally trash your system. We need to relax the restrictions so ordinary users can use these devices.
|
# to accidentally trash your system. We need to relax the restrictions so ordinary users can use these devices.
|
||||||
|
|
|
@ -236,7 +236,7 @@ extern "C" {
|
||||||
* The function Convert_MGRS_To_UPS converts an MGRS coordinate string
|
* The function Convert_MGRS_To_UPS converts an MGRS coordinate string
|
||||||
* to UPS (hemisphere, easting, and northing) coordinates, according
|
* to UPS (hemisphere, easting, and northing) coordinates, according
|
||||||
* to the current ellipsoid parameters. If any errors occur, the error
|
* to the current ellipsoid parameters. If any errors occur, the error
|
||||||
* code(s) are returned by the function, otherwide UPS_NO_ERROR is returned.
|
* code(s) are returned by the function, otherwise UPS_NO_ERROR is returned.
|
||||||
*
|
*
|
||||||
* MGRS : MGRS coordinate string (input)
|
* MGRS : MGRS coordinate string (input)
|
||||||
* Hemisphere : Hemisphere either 'N' or 'S' (output)
|
* Hemisphere : Hemisphere either 'N' or 'S' (output)
|
||||||
|
|
|
@ -45,7 +45,7 @@ Example: %H:%M:%S for current time in hours, minutes, seconds.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.BI "-f " "xmit-directory"
|
.BI "-f " "xmit-directory"
|
||||||
Files in this directory are transmited and deleted.
|
Files in this directory are transmitted and deleted.
|
||||||
Another application places a file here when it wants something to be transmitted.
|
Another application places a file here when it wants something to be transmitted.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
|
|
|
@ -11,7 +11,7 @@ tt2text \- Convert Touch Tone sequence to text
|
||||||
|
|
||||||
|
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
\fBtt2text\fR converts a Touch Tone squence to text. There are two types
|
\fBtt2text\fR converts a Touch Tone sequence to text. There are two types
|
||||||
of encoding:
|
of encoding:
|
||||||
.RS
|
.RS
|
||||||
.HP
|
.HP
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/python3
|
||||||
|
|
||||||
# Part of Dire Wolf APRS Telemetry Toolkit, WB2OSZ, 2015
|
# Part of Dire Wolf APRS Telemetry Toolkit, WB2OSZ, 2015
|
||||||
|
|
||||||
|
@ -33,4 +33,4 @@ volts = adc.readADCSingleEnded(0, gain, sps) * 0.001 * (r1+r2) / r2
|
||||||
# (multiply by expected value, divide by uncalibrated result.)
|
# (multiply by expected value, divide by uncalibrated result.)
|
||||||
#volts = volts * 4.98 / 4.889
|
#volts = volts * 4.98 / 4.889
|
||||||
|
|
||||||
print "%.3f" % (volts)
|
print("%.3f" % (volts))
|
||||||
|
|
12
src/agwlib.c
12
src/agwlib.c
|
@ -321,7 +321,7 @@ static void * tnc_listen_thread (void *arg)
|
||||||
s_tnc_sock = dwsock_connect (s_tnc_host, s_tnc_port, "TNC", 0, 0, tncaddr);
|
s_tnc_sock = dwsock_connect (s_tnc_host, s_tnc_port, "TNC", 0, 0, tncaddr);
|
||||||
|
|
||||||
if (s_tnc_sock != -1) {
|
if (s_tnc_sock != -1) {
|
||||||
dw_printf ("Succesfully reattached to network TNC.\n");
|
dw_printf ("Successfully reattached to network TNC.\n");
|
||||||
|
|
||||||
// Might need to run TNC initialization again.
|
// Might need to run TNC initialization again.
|
||||||
// For example, a server would register its callsigns.
|
// For example, a server would register its callsigns.
|
||||||
|
@ -600,7 +600,7 @@ int agwlib_G_ask_port_information (void)
|
||||||
* Returns: Number of bytes sent for success, -1 for error.
|
* Returns: Number of bytes sent for success, -1 for error.
|
||||||
*
|
*
|
||||||
* Description: This only starts the sequence and does not wait.
|
* Description: This only starts the sequence and does not wait.
|
||||||
* Success or failue will be indicated sometime later by ?
|
* Success or failure will be indicated sometime later by ?
|
||||||
*
|
*
|
||||||
*--------------------------------------------------------------------*/
|
*--------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -635,7 +635,7 @@ int agwlib_C_connect (int chan, char *call_from, char *call_to)
|
||||||
* Returns: Number of bytes sent for success, -1 for error.
|
* Returns: Number of bytes sent for success, -1 for error.
|
||||||
*
|
*
|
||||||
* Description: This only starts the sequence and does not wait.
|
* Description: This only starts the sequence and does not wait.
|
||||||
* Success or failue will be indicated sometime later by ?
|
* Success or failure will be indicated sometime later by ?
|
||||||
*
|
*
|
||||||
*--------------------------------------------------------------------*/
|
*--------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -722,13 +722,13 @@ int agwlib_D_send_connected_data (int chan, int pid, char *call_from, char *call
|
||||||
* hand we don't want to get TOO far ahead when transferring a large file.
|
* hand we don't want to get TOO far ahead when transferring a large file.
|
||||||
*
|
*
|
||||||
* Before disconnecting from another station, it would be good to know
|
* Before disconnecting from another station, it would be good to know
|
||||||
* that it actually recevied the last message we sent. For this reason,
|
* that it actually received the last message we sent. For this reason,
|
||||||
* I think it would be good for this to include frames that were
|
* I think it would be good for this to include frames that were
|
||||||
* transmitted but not yet acknowleged. (Even if it was transmitted once,
|
* transmitted but not yet acknowledged. (Even if it was transmitted once,
|
||||||
* it could still be transmitted again, if lost, so you could say it is
|
* it could still be transmitted again, if lost, so you could say it is
|
||||||
* still waiting for transmission.)
|
* still waiting for transmission.)
|
||||||
*
|
*
|
||||||
* See server.c for a more precise definition of exacly how this is defined.
|
* See server.c for a more precise definition of exactly how this is defined.
|
||||||
*
|
*
|
||||||
*--------------------------------------------------------------------*/
|
*--------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -338,7 +338,7 @@ void ais_to_nmea (unsigned char *ais, int ais_len, char *nmea, int nmea_size)
|
||||||
*
|
*
|
||||||
* Name: ais_parse
|
* Name: ais_parse
|
||||||
*
|
*
|
||||||
* Purpose: Parse AIS sentence and extract interesing parts.
|
* Purpose: Parse AIS sentence and extract interesting parts.
|
||||||
*
|
*
|
||||||
* Inputs: sentence NMEA sentence.
|
* Inputs: sentence NMEA sentence.
|
||||||
*
|
*
|
||||||
|
@ -594,7 +594,7 @@ int ais_parse (char *sentence, int quiet, char *descr, int descr_size, char *mss
|
||||||
*
|
*
|
||||||
* Returns: -1 Invalid message type.
|
* Returns: -1 Invalid message type.
|
||||||
* 0 Good length.
|
* 0 Good length.
|
||||||
* 1 Unexpected lenth.
|
* 1 Unexpected length.
|
||||||
*
|
*
|
||||||
*--------------------------------------------------------------------*/
|
*--------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -212,7 +212,7 @@ void aprs_tt_init (struct tt_config_s *p, int debug)
|
||||||
* The complete message is then processed.
|
* The complete message is then processed.
|
||||||
* The touch tone decoder sends $ if no activity
|
* The touch tone decoder sends $ if no activity
|
||||||
* for some amount of time, perhaps 5 seconds.
|
* for some amount of time, perhaps 5 seconds.
|
||||||
* A partially accumulated messge is discarded if
|
* A partially accumulated message is discarded if
|
||||||
* there is a long gap.
|
* there is a long gap.
|
||||||
*
|
*
|
||||||
* '.' means no activity during processing period.
|
* '.' means no activity during processing period.
|
||||||
|
@ -590,7 +590,7 @@ static int parse_fields (char *msg)
|
||||||
* Purpose: Expand compact form "macro" to full format then process.
|
* Purpose: Expand compact form "macro" to full format then process.
|
||||||
*
|
*
|
||||||
* Inputs: e - An "entry" extracted from a complete
|
* Inputs: e - An "entry" extracted from a complete
|
||||||
* APRStt messsage.
|
* APRStt message.
|
||||||
* In this case, it should contain only digits.
|
* In this case, it should contain only digits.
|
||||||
*
|
*
|
||||||
* Returns: 0 for success or one of the TT_ERROR_... codes.
|
* Returns: 0 for success or one of the TT_ERROR_... codes.
|
||||||
|
@ -705,7 +705,7 @@ static int expand_macro (char *e)
|
||||||
* Purpose: Extract traditional format callsign or object name from touch tone sequence.
|
* Purpose: Extract traditional format callsign or object name from touch tone sequence.
|
||||||
*
|
*
|
||||||
* Inputs: e - An "entry" extracted from a complete
|
* Inputs: e - An "entry" extracted from a complete
|
||||||
* APRStt messsage.
|
* APRStt message.
|
||||||
* In this case, it should start with "A" then a digit.
|
* In this case, it should start with "A" then a digit.
|
||||||
*
|
*
|
||||||
* Outputs: m_callsign
|
* Outputs: m_callsign
|
||||||
|
@ -888,7 +888,7 @@ static int parse_callsign (char *e)
|
||||||
* Purpose: Extract object name from touch tone sequence.
|
* Purpose: Extract object name from touch tone sequence.
|
||||||
*
|
*
|
||||||
* Inputs: e - An "entry" extracted from a complete
|
* Inputs: e - An "entry" extracted from a complete
|
||||||
* APRStt messsage.
|
* APRStt message.
|
||||||
* In this case, it should start with "AA".
|
* In this case, it should start with "AA".
|
||||||
*
|
*
|
||||||
* Outputs: m_callsign
|
* Outputs: m_callsign
|
||||||
|
@ -950,7 +950,7 @@ static int parse_object_name (char *e)
|
||||||
* Purpose: Extract symbol from touch tone sequence.
|
* Purpose: Extract symbol from touch tone sequence.
|
||||||
*
|
*
|
||||||
* Inputs: e - An "entry" extracted from a complete
|
* Inputs: e - An "entry" extracted from a complete
|
||||||
* APRStt messsage.
|
* APRStt message.
|
||||||
* In this case, it should start with "AB".
|
* In this case, it should start with "AB".
|
||||||
*
|
*
|
||||||
* Outputs: m_symtab_or_overlay
|
* Outputs: m_symtab_or_overlay
|
||||||
|
@ -1064,7 +1064,7 @@ static int parse_symbol (char *e)
|
||||||
* Purpose: Extract QIKcom-2 / APRStt 3 ten digit call or five digit suffix.
|
* Purpose: Extract QIKcom-2 / APRStt 3 ten digit call or five digit suffix.
|
||||||
*
|
*
|
||||||
* Inputs: e - An "entry" extracted from a complete
|
* Inputs: e - An "entry" extracted from a complete
|
||||||
* APRStt messsage.
|
* APRStt message.
|
||||||
* In this case, it should start with "AC".
|
* In this case, it should start with "AC".
|
||||||
*
|
*
|
||||||
* Outputs: m_callsign
|
* Outputs: m_callsign
|
||||||
|
@ -1147,7 +1147,7 @@ static int parse_aprstt3_call (char *e)
|
||||||
* Purpose: Extract location from touch tone sequence.
|
* Purpose: Extract location from touch tone sequence.
|
||||||
*
|
*
|
||||||
* Inputs: e - An "entry" extracted from a complete
|
* Inputs: e - An "entry" extracted from a complete
|
||||||
* APRStt messsage.
|
* APRStt message.
|
||||||
* In this case, it should start with "B".
|
* In this case, it should start with "B".
|
||||||
*
|
*
|
||||||
* Outputs: m_latitude
|
* Outputs: m_latitude
|
||||||
|
@ -1494,7 +1494,7 @@ static int parse_location (char *e)
|
||||||
* defined in the configuration file.
|
* defined in the configuration file.
|
||||||
*
|
*
|
||||||
* Inputs: e - An "entry" extracted from a complete
|
* Inputs: e - An "entry" extracted from a complete
|
||||||
* APRStt messsage.
|
* APRStt message.
|
||||||
* In this case, it should start with "B".
|
* In this case, it should start with "B".
|
||||||
*
|
*
|
||||||
* valstrsize - size of the outputs so we can check for buffer overflow.
|
* valstrsize - size of the outputs so we can check for buffer overflow.
|
||||||
|
@ -1645,7 +1645,7 @@ static int find_ttloc_match (char *e, char *xstr, char *ystr, char *zstr, char *
|
||||||
* Purpose: Extract comment / status or other special information from touch tone message.
|
* Purpose: Extract comment / status or other special information from touch tone message.
|
||||||
*
|
*
|
||||||
* Inputs: e - An "entry" extracted from a complete
|
* Inputs: e - An "entry" extracted from a complete
|
||||||
* APRStt messsage.
|
* APRStt message.
|
||||||
* In this case, it should start with "C".
|
* In this case, it should start with "C".
|
||||||
*
|
*
|
||||||
* Outputs: m_comment
|
* Outputs: m_comment
|
||||||
|
|
|
@ -123,7 +123,7 @@ struct tt_config_s {
|
||||||
int obj_recv_chan; /* Channel to listen for tones. */
|
int obj_recv_chan; /* Channel to listen for tones. */
|
||||||
|
|
||||||
int obj_xmit_chan; /* Channel to transmit object report. */
|
int obj_xmit_chan; /* Channel to transmit object report. */
|
||||||
/* -1 for none. This could happpen if we */
|
/* -1 for none. This could happen if we */
|
||||||
/* are only sending to application */
|
/* are only sending to application */
|
||||||
/* and/or IGate. */
|
/* and/or IGate. */
|
||||||
|
|
||||||
|
|
|
@ -25,10 +25,10 @@
|
||||||
*
|
*
|
||||||
* Purpose: Test fixture for the AFSK demodulator.
|
* Purpose: Test fixture for the AFSK demodulator.
|
||||||
*
|
*
|
||||||
* Inputs: Takes audio from a .WAV file insted of the audio device.
|
* Inputs: Takes audio from a .WAV file instead of the audio device.
|
||||||
*
|
*
|
||||||
* Description: This can be used to test the AFSK demodulator under
|
* Description: This can be used to test the AFSK demodulator under
|
||||||
* controlled and reproducable conditions for tweaking.
|
* controlled and reproducible conditions for tweaking.
|
||||||
*
|
*
|
||||||
* For example
|
* For example
|
||||||
*
|
*
|
||||||
|
@ -705,7 +705,7 @@ int main (int argc, char *argv[])
|
||||||
dw_printf ("%d packets decoded in %.3f seconds. %.1f x realtime\n", packets_decoded_total, elapsed, total_filetime/elapsed);
|
dw_printf ("%d packets decoded in %.3f seconds. %.1f x realtime\n", packets_decoded_total, elapsed, total_filetime/elapsed);
|
||||||
if (d_o_opt) {
|
if (d_o_opt) {
|
||||||
dw_printf ("DCD count = %d\n", dcd_count);
|
dw_printf ("DCD count = %d\n", dcd_count);
|
||||||
dw_printf ("DCD missing erors = %d\n", dcd_missing_errors);
|
dw_printf ("DCD missing errors = %d\n", dcd_missing_errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error_if_less_than != -1 && packets_decoded_total < error_if_less_than) {
|
if (error_if_less_than != -1 && packets_decoded_total < error_if_less_than) {
|
||||||
|
|
|
@ -206,7 +206,7 @@ static int calcbufsize(int rate, int chans, int bits)
|
||||||
* more restrictive in its capabilities.
|
* more restrictive in its capabilities.
|
||||||
* It might say, the best I can do is mono, 8 bit, 8000/sec.
|
* It might say, the best I can do is mono, 8 bit, 8000/sec.
|
||||||
*
|
*
|
||||||
* The sofware modem must use this ACTUAL information
|
* The software modem must use this ACTUAL information
|
||||||
* that the device is supplying, that could be different
|
* that the device is supplying, that could be different
|
||||||
* than what the user specified.
|
* than what the user specified.
|
||||||
*
|
*
|
||||||
|
@ -925,7 +925,7 @@ static int set_oss_params (int a, int fd, struct audio_s *pa)
|
||||||
* This was long ago under different conditions.
|
* This was long ago under different conditions.
|
||||||
* Should study this again some day.
|
* Should study this again some day.
|
||||||
*
|
*
|
||||||
* Your milage may vary.
|
* Your mileage may vary.
|
||||||
*/
|
*/
|
||||||
err = ioctl (fd, SNDCTL_DSP_GETBLKSIZE, &ossbuf_size_in_bytes);
|
err = ioctl (fd, SNDCTL_DSP_GETBLKSIZE, &ossbuf_size_in_bytes);
|
||||||
if (err == -1) {
|
if (err == -1) {
|
||||||
|
|
|
@ -158,7 +158,7 @@ struct audio_s {
|
||||||
|
|
||||||
enum v26_e { V26_UNSPECIFIED=0, V26_A, V26_B } v26_alternative;
|
enum v26_e { V26_UNSPECIFIED=0, V26_A, V26_B } v26_alternative;
|
||||||
|
|
||||||
// Original implementaion used alternative A for 2400 bbps PSK.
|
// Original implementation used alternative A for 2400 bbps PSK.
|
||||||
// Years later, we discover that MFJ-2400 used alternative B.
|
// Years later, we discover that MFJ-2400 used alternative B.
|
||||||
// It's likely the others did too. it also works a little better.
|
// It's likely the others did too. it also works a little better.
|
||||||
// Default to MFJ compatible and print warning if user did not
|
// Default to MFJ compatible and print warning if user did not
|
||||||
|
@ -263,7 +263,7 @@ struct audio_s {
|
||||||
#define MAX_GPIO_NAME_LEN 20 // 12 would cover any case I've seen so this should be safe
|
#define MAX_GPIO_NAME_LEN 20 // 12 would cover any case I've seen so this should be safe
|
||||||
|
|
||||||
char out_gpio_name[MAX_GPIO_NAME_LEN];
|
char out_gpio_name[MAX_GPIO_NAME_LEN];
|
||||||
/* orginally, gpio number NN was assumed to simply */
|
/* originally, gpio number NN was assumed to simply */
|
||||||
/* have the name gpioNN but this turned out not to be */
|
/* have the name gpioNN but this turned out not to be */
|
||||||
/* the case for CubieBoard where it was longer. */
|
/* the case for CubieBoard where it was longer. */
|
||||||
/* This is filled in by ptt_init so we don't have to */
|
/* This is filled in by ptt_init so we don't have to */
|
||||||
|
@ -300,7 +300,7 @@ struct audio_s {
|
||||||
int in_gpio_num; /* GPIO number */
|
int in_gpio_num; /* GPIO number */
|
||||||
|
|
||||||
char in_gpio_name[MAX_GPIO_NAME_LEN];
|
char in_gpio_name[MAX_GPIO_NAME_LEN];
|
||||||
/* orginally, gpio number NN was assumed to simply */
|
/* originally, gpio number NN was assumed to simply */
|
||||||
/* have the name gpioNN but this turned out not to be */
|
/* have the name gpioNN but this turned out not to be */
|
||||||
/* the case for CubieBoard where it was longer. */
|
/* the case for CubieBoard where it was longer. */
|
||||||
/* This is filled in by ptt_init so we don't have to */
|
/* This is filled in by ptt_init so we don't have to */
|
||||||
|
@ -314,7 +314,7 @@ struct audio_s {
|
||||||
int dwait; /* First wait extra time for receiver squelch. */
|
int dwait; /* First wait extra time for receiver squelch. */
|
||||||
/* Default 0 units of 10 mS each . */
|
/* Default 0 units of 10 mS each . */
|
||||||
|
|
||||||
int slottime; /* Slot time in 10 mS units for persistance algorithm. */
|
int slottime; /* Slot time in 10 mS units for persistence algorithm. */
|
||||||
/* Typical value is 10 meaning 100 milliseconds. */
|
/* Typical value is 10 meaning 100 milliseconds. */
|
||||||
|
|
||||||
int persist; /* Sets probability for transmitting after each */
|
int persist; /* Sets probability for transmitting after each */
|
||||||
|
|
|
@ -156,7 +156,7 @@ static int calcbufsize(int rate, int chans, int bits)
|
||||||
* the same device name for more then one connected device
|
* the same device name for more then one connected device
|
||||||
* (ie two SignaLinks). Appending a Portaudio device index to the
|
* (ie two SignaLinks). Appending a Portaudio device index to the
|
||||||
* the device name ensure we can find the correct one. And if it's not
|
* the device name ensure we can find the correct one. And if it's not
|
||||||
* available return the first occurence that matches the device name.
|
* available return the first occurrence that matches the device name.
|
||||||
*----------------------------------------------------------------*/
|
*----------------------------------------------------------------*/
|
||||||
static int searchPADevice(struct adev_s *dev, char *_devName, int reqDeviceNo, int io_flag)
|
static int searchPADevice(struct adev_s *dev, char *_devName, int reqDeviceNo, int io_flag)
|
||||||
{
|
{
|
||||||
|
@ -513,7 +513,7 @@ static int paOutput16CB( const void *inputBuffer, void *outputBuffer,
|
||||||
* more restrictive in its capabilities.
|
* more restrictive in its capabilities.
|
||||||
* It might say, the best I can do is mono, 8 bit, 8000/sec.
|
* It might say, the best I can do is mono, 8 bit, 8000/sec.
|
||||||
*
|
*
|
||||||
* The sofware modem must use this ACTUAL information
|
* The software modem must use this ACTUAL information
|
||||||
* that the device is supplying, that could be different
|
* that the device is supplying, that could be different
|
||||||
* than what the user specified.
|
* than what the user specified.
|
||||||
*
|
*
|
||||||
|
|
|
@ -209,7 +209,7 @@ static struct adev_s {
|
||||||
* more restrictive in its capabilities.
|
* more restrictive in its capabilities.
|
||||||
* It might say, the best I can do is mono, 8 bit, 8000/sec.
|
* It might say, the best I can do is mono, 8 bit, 8000/sec.
|
||||||
*
|
*
|
||||||
* The sofware modem must use this ACTUAL information
|
* The software modem must use this ACTUAL information
|
||||||
* that the device is supplying, that could be different
|
* that the device is supplying, that could be different
|
||||||
* than what the user specified.
|
* than what the user specified.
|
||||||
*
|
*
|
||||||
|
@ -921,7 +921,7 @@ int audio_get (int a)
|
||||||
* c - One byte in range of 0 - 255.
|
* c - One byte in range of 0 - 255.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Global In: out_current - index of output buffer currenly being filled.
|
* Global In: out_current - index of output buffer currently being filled.
|
||||||
*
|
*
|
||||||
* Returns: Normally non-negative.
|
* Returns: Normally non-negative.
|
||||||
* -1 for any type of error.
|
* -1 for any type of error.
|
||||||
|
|
|
@ -255,7 +255,7 @@ typedef struct ax25_dlsm_s {
|
||||||
// addrs[OWNCALL] is owncall for this end of link.
|
// addrs[OWNCALL] is owncall for this end of link.
|
||||||
// Note that we are acting on behalf of
|
// Note that we are acting on behalf of
|
||||||
// a client application so the APRS mycall
|
// a client application so the APRS mycall
|
||||||
// might not be relevent.
|
// might not be relevant.
|
||||||
|
|
||||||
#define PEERCALL AX25_DESTINATION
|
#define PEERCALL AX25_DESTINATION
|
||||||
// addrs[PEERCALL] is call for other end.
|
// addrs[PEERCALL] is call for other end.
|
||||||
|
@ -319,8 +319,8 @@ typedef struct ax25_dlsm_s {
|
||||||
|
|
||||||
int reject_exception; // A REJ frame has been sent to the remote station. (boolean)
|
int reject_exception; // A REJ frame has been sent to the remote station. (boolean)
|
||||||
|
|
||||||
// This is used only when receving an I frame, in states 3 & 4, SREJ not enabled.
|
// This is used only when receiving an I frame, in states 3 & 4, SREJ not enabled.
|
||||||
// When an I frame has an unepected N(S),
|
// When an I frame has an unexpected N(S),
|
||||||
// - if not already set, set it and send REJ.
|
// - if not already set, set it and send REJ.
|
||||||
// When an I frame with expected N(S) is received, clear it.
|
// When an I frame with expected N(S) is received, clear it.
|
||||||
// This would prevent us from sending additional REJ while
|
// This would prevent us from sending additional REJ while
|
||||||
|
@ -1157,7 +1157,7 @@ void dl_disconnect_request (dlq_item_t *E)
|
||||||
*
|
*
|
||||||
* Erratum: Not sure how to interpret that. See example below for how it was implemented.
|
* Erratum: Not sure how to interpret that. See example below for how it was implemented.
|
||||||
*
|
*
|
||||||
* Version 1.6: Bug 252. Segmentation was occuring for a V2.0 link. From the spec:
|
* Version 1.6: Bug 252. Segmentation was occurring for a V2.0 link. From the spec:
|
||||||
* "The receipt of an XID response from the other station establishes that both
|
* "The receipt of an XID response from the other station establishes that both
|
||||||
* stations are using AX.25 version 2.2 or higher and enables the use of the
|
* stations are using AX.25 version 2.2 or higher and enables the use of the
|
||||||
* segmenter/reassembler and selective reject."
|
* segmenter/reassembler and selective reject."
|
||||||
|
@ -1564,7 +1564,7 @@ void dl_unregister_callsign (dlq_item_t *E)
|
||||||
*
|
*
|
||||||
* Description: This is the sum of:
|
* Description: This is the sum of:
|
||||||
* - Incoming connected data, from application still in the queue.
|
* - Incoming connected data, from application still in the queue.
|
||||||
* - I frames which have been transmitted but not yet acknowleged.
|
* - I frames which have been transmitted but not yet acknowledged.
|
||||||
*
|
*
|
||||||
*------------------------------------------------------------------------------*/
|
*------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -1633,7 +1633,7 @@ void dl_outstanding_frames_request (dlq_item_t *E)
|
||||||
* Description: By client application we mean something that attached with the
|
* Description: By client application we mean something that attached with the
|
||||||
* AGW network protocol.
|
* AGW network protocol.
|
||||||
*
|
*
|
||||||
* Clean out anything related to the specfied client application.
|
* Clean out anything related to the specified client application.
|
||||||
* This would include state machines and registered callsigns.
|
* This would include state machines and registered callsigns.
|
||||||
*
|
*
|
||||||
*------------------------------------------------------------------------------*/
|
*------------------------------------------------------------------------------*/
|
||||||
|
@ -2201,7 +2201,7 @@ void lm_data_indication (dlq_item_t *E)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Erratum: The AX.25 spec is not clear about whether SREJ should be command, response, or both.
|
// Erratum: The AX.25 spec is not clear about whether SREJ should be command, response, or both.
|
||||||
// The underlying X.25 spec clearly says it is reponse only. Let's go with that.
|
// The underlying X.25 spec clearly says it is response only. Let's go with that.
|
||||||
|
|
||||||
case frame_type_S_SREJ:
|
case frame_type_S_SREJ:
|
||||||
case frame_type_U_DM:
|
case frame_type_U_DM:
|
||||||
|
@ -2224,7 +2224,7 @@ void lm_data_indication (dlq_item_t *E)
|
||||||
case frame_type_U_UI:
|
case frame_type_U_UI:
|
||||||
// Don't test at this point in case an APRS frame gets thru.
|
// Don't test at this point in case an APRS frame gets thru.
|
||||||
// APRS doesn't specify what to put in the Source and Dest C bits.
|
// APRS doesn't specify what to put in the Source and Dest C bits.
|
||||||
// In practice we see all 4 possble combinations.
|
// In practice we see all 4 possible combinations.
|
||||||
// I have an opinion about what would be "correct" (discussed elsewhere)
|
// I have an opinion about what would be "correct" (discussed elsewhere)
|
||||||
// but in practice no one seems to care.
|
// but in practice no one seems to care.
|
||||||
break;
|
break;
|
||||||
|
@ -2701,7 +2701,7 @@ static void i_frame_continued (ax25_dlsm_t *S, int p, int ns, int pid, char *inf
|
||||||
|
|
||||||
if (S->rxdata_by_ns[ns] != NULL) {
|
if (S->rxdata_by_ns[ns] != NULL) {
|
||||||
// There is a possibility that we might have another received frame stashed
|
// There is a possibility that we might have another received frame stashed
|
||||||
// away from 8 or 128 (modulo) frames back. Remove it so it doesn't accidently
|
// away from 8 or 128 (modulo) frames back. Remove it so it doesn't accidentally
|
||||||
// show up at some future inopportune time.
|
// show up at some future inopportune time.
|
||||||
|
|
||||||
cdata_delete (S->rxdata_by_ns[ns]);
|
cdata_delete (S->rxdata_by_ns[ns]);
|
||||||
|
@ -2786,7 +2786,7 @@ static void i_frame_continued (ax25_dlsm_t *S, int p, int ns, int pid, char *inf
|
||||||
// we discard 3,4,5,6, and tell the other end to resend everything starting with 2.
|
// we discard 3,4,5,6, and tell the other end to resend everything starting with 2.
|
||||||
|
|
||||||
// At one time, I had some doubts about when to use command or response for REJ.
|
// At one time, I had some doubts about when to use command or response for REJ.
|
||||||
// I now believe that reponse, as implied by setting F in the flow chart, is correct.
|
// I now believe that response, as implied by setting F in the flow chart, is correct.
|
||||||
|
|
||||||
int f = p;
|
int f = p;
|
||||||
int nr = S->vr; // Next expected sequence number.
|
int nr = S->vr; // Next expected sequence number.
|
||||||
|
@ -2796,7 +2796,7 @@ static void i_frame_continued (ax25_dlsm_t *S, int p, int ns, int pid, char *inf
|
||||||
S->reject_exception = 1;
|
S->reject_exception = 1;
|
||||||
|
|
||||||
if (s_debug_retry) {
|
if (s_debug_retry) {
|
||||||
text_color_set(DW_COLOR_ERROR); // make it more noticable.
|
text_color_set(DW_COLOR_ERROR); // make it more noticeable.
|
||||||
dw_printf ("sending REJ, at %s %d, SREJ not enabled case, V(R)=%d", __func__, __LINE__, S->vr);
|
dw_printf ("sending REJ, at %s %d, SREJ not enabled case, V(R)=%d", __func__, __LINE__, S->vr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2860,7 +2860,7 @@ static void i_frame_continued (ax25_dlsm_t *S, int p, int ns, int pid, char *inf
|
||||||
// In version 1.4:
|
// In version 1.4:
|
||||||
// We end up sending more SREJ than necessary and and get back redundant information. Example:
|
// We end up sending more SREJ than necessary and and get back redundant information. Example:
|
||||||
// When we see 113 missing, we ask for a resend.
|
// When we see 113 missing, we ask for a resend.
|
||||||
// When we see 115 & 116 missing, a cummulative SREJ asks for everything.
|
// When we see 115 & 116 missing, a cumulative SREJ asks for everything.
|
||||||
// The other end dutifully sends 113 twice.
|
// The other end dutifully sends 113 twice.
|
||||||
//
|
//
|
||||||
// [0.4] DW1>DW0:(SREJ res, n(r)=113, f=0)
|
// [0.4] DW1>DW0:(SREJ res, n(r)=113, f=0)
|
||||||
|
@ -2890,7 +2890,7 @@ static void i_frame_continued (ax25_dlsm_t *S, int p, int ns, int pid, char *inf
|
||||||
// int allow_f1 = 0; // F=1 from X.25 2.4.6.4 b) 3)
|
// int allow_f1 = 0; // F=1 from X.25 2.4.6.4 b) 3)
|
||||||
int allow_f1 = 1; // F=1 from X.25 2.4.6.4 b) 3)
|
int allow_f1 = 1; // F=1 from X.25 2.4.6.4 b) 3)
|
||||||
|
|
||||||
// send only for this gap, not cummulative from V(R).
|
// send only for this gap, not cumulative from V(R).
|
||||||
|
|
||||||
int last = AX25MODULO(ns - 1, S->modulo, __FILE__, __func__, __LINE__);
|
int last = AX25MODULO(ns - 1, S->modulo, __FILE__, __func__, __LINE__);
|
||||||
int first = last;
|
int first = last;
|
||||||
|
@ -2993,7 +2993,7 @@ dw_printf ("%s:%d, %d srej exceptions, V(R)=%d, N(S)=%d\n", __func__, __LINE__,
|
||||||
if (first == AX25MODULO(S->vr - 1, S->modulo, __FILE__, __func__, __LINE__)) {
|
if (first == AX25MODULO(S->vr - 1, S->modulo, __FILE__, __func__, __LINE__)) {
|
||||||
// Oops! Went too far. This I frame was already processed.
|
// Oops! Went too far. This I frame was already processed.
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
dw_printf ("INTERNAL ERROR calulating what to put in SREJ, %s line %d\n", __func__, __LINE__);
|
dw_printf ("INTERNAL ERROR calculating what to put in SREJ, %s line %d\n", __func__, __LINE__);
|
||||||
dw_printf ("V(R)=%d, N(S)=%d, SREJ exception=%d, first=%d, ask_resend_count=%d\n", S->vr, ns, selective_reject_exception(S), first, ask_resend_count);
|
dw_printf ("V(R)=%d, N(S)=%d, SREJ exception=%d, first=%d, ask_resend_count=%d\n", S->vr, ns, selective_reject_exception(S), first, ask_resend_count);
|
||||||
int k;
|
int k;
|
||||||
for (k=0; k<128; k++) {
|
for (k=0; k<128; k++) {
|
||||||
|
@ -3146,7 +3146,7 @@ static void send_srej_frames (ax25_dlsm_t *S, int *resend, int count, int allow_
|
||||||
if (s_debug_retry) {
|
if (s_debug_retry) {
|
||||||
text_color_set(DW_COLOR_INFO);
|
text_color_set(DW_COLOR_INFO);
|
||||||
dw_printf ("%s line %d\n", __func__, __LINE__);
|
dw_printf ("%s line %d\n", __func__, __LINE__);
|
||||||
//dw_printf ("state=%d, count=%d, k=%d, V(R)=%d, SREJ exeception=%d\n", S->state, count, S->k_maxframe, S->vr, selective_reject_exception(S));
|
//dw_printf ("state=%d, count=%d, k=%d, V(R)=%d, SREJ exception=%d\n", S->state, count, S->k_maxframe, S->vr, selective_reject_exception(S));
|
||||||
dw_printf ("state=%d, count=%d, k=%d, V(R)=%d\n", S->state, count, S->k_maxframe, S->vr);
|
dw_printf ("state=%d, count=%d, k=%d, V(R)=%d\n", S->state, count, S->k_maxframe, S->vr);
|
||||||
|
|
||||||
dw_printf ("resend[]=");
|
dw_printf ("resend[]=");
|
||||||
|
@ -3447,7 +3447,7 @@ static void rr_rnr_frame (ax25_dlsm_t *S, int ready, cmdres_t cr, int pf, int nr
|
||||||
// we received RR frames with N(R) values indicating that the other side received everything
|
// we received RR frames with N(R) values indicating that the other side received everything
|
||||||
// that we sent. Eventually rc could reach the limit and we would get an error.
|
// that we sent. Eventually rc could reach the limit and we would get an error.
|
||||||
// If we are in state 4, and other guy ack'ed last I frame we sent, transition to state 3.
|
// If we are in state 4, and other guy ack'ed last I frame we sent, transition to state 3.
|
||||||
// The same thing was done for receving I frames after check_i_frame_ackd.
|
// The same thing was done for receiving I frames after check_i_frame_ackd.
|
||||||
|
|
||||||
// Thought: Could we simply call check_i_frame_ackd, for consistency, rather than only setting V(A)?
|
// Thought: Could we simply call check_i_frame_ackd, for consistency, rather than only setting V(A)?
|
||||||
|
|
||||||
|
@ -3759,7 +3759,7 @@ static void rej_frame (ax25_dlsm_t *S, cmdres_t cr, int pf, int nr)
|
||||||
*
|
*
|
||||||
* The SREJ command/response initiates more-efficient error recovery by requesting the retransmission of a
|
* The SREJ command/response initiates more-efficient error recovery by requesting the retransmission of a
|
||||||
* single I frame following the detection of a sequence error. This is an advancement over the earlier versions in
|
* single I frame following the detection of a sequence error. This is an advancement over the earlier versions in
|
||||||
* which the requested I frame was retransmitted togther with all additional I frames subsequently transmitted and
|
* which the requested I frame was retransmitted together with all additional I frames subsequently transmitted and
|
||||||
* successfully received.
|
* successfully received.
|
||||||
*
|
*
|
||||||
* When a TNC sends one or more SREJ commands, each with the P bit set to "0" or "1", or one or more SREJ
|
* When a TNC sends one or more SREJ commands, each with the P bit set to "0" or "1", or one or more SREJ
|
||||||
|
@ -4409,7 +4409,7 @@ static void disc_frame (ax25_dlsm_t *S, int p)
|
||||||
* earliest opportunity. If the TNC is not capable of accepting a SABME command, it responds with a DM frame.
|
* earliest opportunity. If the TNC is not capable of accepting a SABME command, it responds with a DM frame.
|
||||||
*
|
*
|
||||||
* A TNC that uses a version of AX.25 prior to v2.2 responds with a FRMR.
|
* A TNC that uses a version of AX.25 prior to v2.2 responds with a FRMR.
|
||||||
* ( I think the KPC-3+ has a bug - it replys with DM - WB2OSZ )
|
* ( I think the KPC-3+ has a bug - it replies with DM - WB2OSZ )
|
||||||
*
|
*
|
||||||
* 4.3.3.5. Disconnected Mode (DM) Response
|
* 4.3.3.5. Disconnected Mode (DM) Response
|
||||||
*
|
*
|
||||||
|
@ -4636,7 +4636,7 @@ static void ua_frame (ax25_dlsm_t *S, int f)
|
||||||
if (f == 1) {
|
if (f == 1) {
|
||||||
if (S->layer_3_initiated) {
|
if (S->layer_3_initiated) {
|
||||||
text_color_set(DW_COLOR_INFO);
|
text_color_set(DW_COLOR_INFO);
|
||||||
// TODO: add via if apppropriate.
|
// TODO: add via if appropriate.
|
||||||
dw_printf ("Stream %d: Connected to %s. (%s)\n", S->stream_id, S->addrs[PEERCALL], S->state == state_5_awaiting_v22_connection ? "v2.2" : "v2.0");
|
dw_printf ("Stream %d: Connected to %s. (%s)\n", S->stream_id, S->addrs[PEERCALL], S->state == state_5_awaiting_v22_connection ? "v2.2" : "v2.0");
|
||||||
// There is a subtle difference here between connect confirm and indication.
|
// There is a subtle difference here between connect confirm and indication.
|
||||||
// connect *confirm* means "has been made"
|
// connect *confirm* means "has been made"
|
||||||
|
@ -5615,7 +5615,7 @@ static void clear_exception_conditions (ax25_dlsm_t *S)
|
||||||
*
|
*
|
||||||
* Other guy gets RR/RNR command P=1.
|
* Other guy gets RR/RNR command P=1.
|
||||||
* Same action for either state 3 or 4.
|
* Same action for either state 3 or 4.
|
||||||
* Whether he has outstanding un-ack'ed sent I frames is irrelevent.
|
* Whether he has outstanding un-ack'ed sent I frames is irrelevant.
|
||||||
* He calls "enquiry response" which sends RR/RNR response F=1.
|
* He calls "enquiry response" which sends RR/RNR response F=1.
|
||||||
* (Read about detour 1 below and in enquiry_response.)
|
* (Read about detour 1 below and in enquiry_response.)
|
||||||
*
|
*
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* APRS uses only UI frames.
|
* APRS uses only UI frames.
|
||||||
* Each starts with 2-10 addressses (14-70 octets):
|
* Each starts with 2-10 addresses (14-70 octets):
|
||||||
*
|
*
|
||||||
* * Destination Address (note: opposite order in printed format)
|
* * Destination Address (note: opposite order in printed format)
|
||||||
*
|
*
|
||||||
|
@ -940,7 +940,7 @@ int ax25_check_addresses (packet_t pp)
|
||||||
*
|
*
|
||||||
* Name: ax25_unwrap_third_party
|
* Name: ax25_unwrap_third_party
|
||||||
*
|
*
|
||||||
* Purpose: Unwrap a third party messge from the header.
|
* Purpose: Unwrap a third party message from the header.
|
||||||
*
|
*
|
||||||
* Inputs: copy_from - Existing packet object.
|
* Inputs: copy_from - Existing packet object.
|
||||||
*
|
*
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
|
|
||||||
#define AX25_MAX_REPEATERS 8
|
#define AX25_MAX_REPEATERS 8
|
||||||
#define AX25_MIN_ADDRS 2 /* Destinatin & Source. */
|
#define AX25_MIN_ADDRS 2 /* Destination & Source. */
|
||||||
#define AX25_MAX_ADDRS 10 /* Destination, Source, 8 digipeaters. */
|
#define AX25_MAX_ADDRS 10 /* Destination, Source, 8 digipeaters. */
|
||||||
|
|
||||||
#define AX25_DESTINATION 0 /* Address positions in frame. */
|
#define AX25_DESTINATION 0 /* Address positions in frame. */
|
||||||
|
@ -98,7 +98,7 @@ struct packet_s {
|
||||||
*
|
*
|
||||||
* Bits: H R R SSID 0
|
* Bits: H R R SSID 0
|
||||||
*
|
*
|
||||||
* H for digipeaters set to 0 intially.
|
* H for digipeaters set to 0 initially.
|
||||||
* Changed to 1 when position has been used.
|
* Changed to 1 when position has been used.
|
||||||
*
|
*
|
||||||
* for source & destination it is called
|
* for source & destination it is called
|
||||||
|
|
|
@ -406,7 +406,7 @@ packet_t ax25_s_frame (char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN], int num_ad
|
||||||
}
|
}
|
||||||
|
|
||||||
// Erratum: The AX.25 spec is not clear about whether SREJ should be command, response, or both.
|
// Erratum: The AX.25 spec is not clear about whether SREJ should be command, response, or both.
|
||||||
// The underlying X.25 spec clearly says it is reponse only. Let's go with that.
|
// The underlying X.25 spec clearly says it is response only. Let's go with that.
|
||||||
|
|
||||||
if (ftype == frame_type_S_SREJ && cr != cr_res) {
|
if (ftype == frame_type_S_SREJ && cr != cr_res) {
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
* are significantly different and I thought it would be
|
* are significantly different and I thought it would be
|
||||||
* too confusing to munge them together.
|
* too confusing to munge them together.
|
||||||
*
|
*
|
||||||
* References: The Ax.25 protcol barely mentions digipeaters and
|
* References: The Ax.25 protocol barely mentions digipeaters and
|
||||||
* and doesn't describe how they should work.
|
* and doesn't describe how they should work.
|
||||||
*
|
*
|
||||||
*------------------------------------------------------------------*/
|
*------------------------------------------------------------------*/
|
||||||
|
@ -255,7 +255,7 @@ static packet_t cdigipeat_match (int from_chan, packet_t pp, char *mycall_rec, c
|
||||||
* Originally this was the only one.
|
* Originally this was the only one.
|
||||||
* Should we change it to AFILTER to make it clearer?
|
* Should we change it to AFILTER to make it clearer?
|
||||||
* CFILTER - Similar for connected moded digipeater.
|
* CFILTER - Similar for connected moded digipeater.
|
||||||
* IGFILTER - APRS-IS (IGate) server side - completely diffeent.
|
* IGFILTER - APRS-IS (IGate) server side - completely different.
|
||||||
* Confusing with similar name but much different idea.
|
* Confusing with similar name but much different idea.
|
||||||
* Maybe this should be renamed to SUBSCRIBE or something like that.
|
* Maybe this should be renamed to SUBSCRIBE or something like that.
|
||||||
*
|
*
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
*
|
*
|
||||||
* There is an incresing demand for using the GPIO pins of USB audio devices for PTT.
|
* There is an increasing demand for using the GPIO pins of USB audio devices for PTT.
|
||||||
* We have a few commercial products:
|
* We have a few commercial products:
|
||||||
*
|
*
|
||||||
* DINAH https://hamprojects.info/dinah/
|
* DINAH https://hamprojects.info/dinah/
|
||||||
|
@ -53,7 +53,7 @@
|
||||||
* painful roundabout way. This is documented in the User Guide, section called,
|
* painful roundabout way. This is documented in the User Guide, section called,
|
||||||
* "Hamlib PTT Example 2: Use GPIO of USB audio adapter. (e.g. DMK URI)"
|
* "Hamlib PTT Example 2: Use GPIO of USB audio adapter. (e.g. DMK URI)"
|
||||||
*
|
*
|
||||||
* It's rather involved and the explantion doesn't cover the case of multiple
|
* It's rather involved and the explanation doesn't cover the case of multiple
|
||||||
* USB-Audio adapters. It is not as straightforward as you might expect. Here we have
|
* USB-Audio adapters. It is not as straightforward as you might expect. Here we have
|
||||||
* an example of 3 C-Media USB adapters, a SignaLink USB, a keyboard, and a mouse.
|
* an example of 3 C-Media USB adapters, a SignaLink USB, a keyboard, and a mouse.
|
||||||
*
|
*
|
||||||
|
@ -740,7 +740,7 @@ int cm108_inventory (struct thing_s *things, int max_things)
|
||||||
* ptt_device_size - Size of result area to avoid buffer overflow.
|
* ptt_device_size - Size of result area to avoid buffer overflow.
|
||||||
*
|
*
|
||||||
* Outputs: ptt_device - Device name, something like /dev/hidraw2.
|
* Outputs: ptt_device - Device name, something like /dev/hidraw2.
|
||||||
* Will be emptry string if no match found.
|
* Will be empty string if no match found.
|
||||||
*
|
*
|
||||||
* Returns: none
|
* Returns: none
|
||||||
*
|
*
|
||||||
|
|
20
src/config.c
20
src/config.c
|
@ -317,7 +317,7 @@ static double parse_ll (char *str, enum parse_ll_which_e which, int line)
|
||||||
* - Negative zone for south.
|
* - Negative zone for south.
|
||||||
* - Separate North or South.
|
* - Separate North or South.
|
||||||
*
|
*
|
||||||
* I'm using the first alternatve.
|
* I'm using the first alternative.
|
||||||
* GEOTRANS uses the third.
|
* GEOTRANS uses the third.
|
||||||
* We will also recognize the second one but I'm not sure if I want to document it.
|
* We will also recognize the second one but I'm not sure if I want to document it.
|
||||||
*
|
*
|
||||||
|
@ -1817,7 +1817,7 @@ void config_init (char *fname, struct audio_s *p_audio_config,
|
||||||
}
|
}
|
||||||
strlcpy (p_audio_config->achan[channel].octrl[ot].ptt_device, t, sizeof(p_audio_config->achan[channel].octrl[ot].ptt_device));
|
strlcpy (p_audio_config->achan[channel].octrl[ot].ptt_device, t, sizeof(p_audio_config->achan[channel].octrl[ot].ptt_device));
|
||||||
|
|
||||||
// Optional serial port rate for CAT controll PTT.
|
// Optional serial port rate for CAT control PTT.
|
||||||
|
|
||||||
t = split(NULL,0);
|
t = split(NULL,0);
|
||||||
if (t != NULL) {
|
if (t != NULL) {
|
||||||
|
@ -2663,11 +2663,11 @@ void config_init (char *fname, struct audio_s *p_audio_config,
|
||||||
* There is discussion about this in the document called
|
* There is discussion about this in the document called
|
||||||
* Why-is-9600-only-twice-as-fast-as-1200.pdf
|
* Why-is-9600-only-twice-as-fast-as-1200.pdf
|
||||||
*
|
*
|
||||||
* IGFILTER - APRS-IS (IGate) server side - completely diffeent.
|
* IGFILTER - APRS-IS (IGate) server side - completely different.
|
||||||
* I'm not happy with this name because IG sounds like IGate
|
* I'm not happy with this name because IG sounds like IGate
|
||||||
* which is really the client side. More comments later.
|
* which is really the client side. More comments later.
|
||||||
* Maybe it should be called subscribe or something like that
|
* Maybe it should be called subscribe or something like that
|
||||||
* because the subscriptions are cummulative.
|
* because the subscriptions are cumulative.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
else if (strcasecmp(t, "FILTER") == 0) {
|
else if (strcasecmp(t, "FILTER") == 0) {
|
||||||
|
@ -3698,7 +3698,7 @@ void config_init (char *fname, struct audio_s *p_audio_config,
|
||||||
strlcpy(tl->pattern, "", sizeof(tl->pattern));
|
strlcpy(tl->pattern, "", sizeof(tl->pattern));
|
||||||
|
|
||||||
/* Pattern: Any combination of digits, x, y, and z. */
|
/* Pattern: Any combination of digits, x, y, and z. */
|
||||||
/* Also make note of which letters are used in pattern and defintition. */
|
/* Also make note of which letters are used in pattern and definition. */
|
||||||
/* Version 1.2: also allow A,B,C,D in the pattern. */
|
/* Version 1.2: also allow A,B,C,D in the pattern. */
|
||||||
|
|
||||||
t = split(NULL,0);
|
t = split(NULL,0);
|
||||||
|
@ -4784,7 +4784,7 @@ void config_init (char *fname, struct audio_s *p_audio_config,
|
||||||
strlcpy (p_misc_config->waypoint_serial_port, t, sizeof(p_misc_config->waypoint_serial_port));
|
strlcpy (p_misc_config->waypoint_serial_port, t, sizeof(p_misc_config->waypoint_serial_port));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Anthing remaining is the formats to enable. */
|
/* Anything remaining is the formats to enable. */
|
||||||
|
|
||||||
t = split(NULL,1);
|
t = split(NULL,1);
|
||||||
if (t != NULL) {
|
if (t != NULL) {
|
||||||
|
@ -5151,7 +5151,7 @@ void config_init (char *fname, struct audio_s *p_audio_config,
|
||||||
/*
|
/*
|
||||||
* V20 address [ address ... ] - Stations known to support only AX.25 v2.0.
|
* V20 address [ address ... ] - Stations known to support only AX.25 v2.0.
|
||||||
* When connecting to these, skip SABME and go right to SABM.
|
* When connecting to these, skip SABME and go right to SABM.
|
||||||
* Possible to have multiple and they are cummulative.
|
* Possible to have multiple and they are cumulative.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
else if (strcasecmp(t, "V20") == 0) {
|
else if (strcasecmp(t, "V20") == 0) {
|
||||||
|
@ -5185,9 +5185,9 @@ void config_init (char *fname, struct audio_s *p_audio_config,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NOXID address [ address ... ] - Stations known not to understand XID.
|
* NOXID address [ address ... ] - Stations known not to understand XID.
|
||||||
* After connecting to these (with v2.2 obviously), don't try using XID commmand.
|
* After connecting to these (with v2.2 obviously), don't try using XID command.
|
||||||
* AX.25 for Linux is the one known case so far.
|
* AX.25 for Linux is the one known case so far.
|
||||||
* Possible to have multiple and they are cummulative.
|
* Possible to have multiple and they are cumulative.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
else if (strcasecmp(t, "NOXID") == 0) {
|
else if (strcasecmp(t, "NOXID") == 0) {
|
||||||
|
@ -5613,7 +5613,7 @@ static int beacon_options(char *cmd, struct beacon_s *b, int line, struct audio_
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert UTM coordintes to lat / long.
|
* Convert UTM coordinates to lat / long.
|
||||||
*/
|
*/
|
||||||
if (strlen(zone) > 0 || easting != G_UNKNOWN || northing != G_UNKNOWN) {
|
if (strlen(zone) > 0 || easting != G_UNKNOWN || northing != G_UNKNOWN) {
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
*
|
*
|
||||||
* Description: Present the packet contents in human readable format.
|
* Description: Present the packet contents in human readable format.
|
||||||
* This is a fairly complete implementation with error messages
|
* This is a fairly complete implementation with error messages
|
||||||
* pointing out various specication violations.
|
* pointing out various specification violations.
|
||||||
*
|
*
|
||||||
* Assumptions: ax25_from_frame() has been called to
|
* Assumptions: ax25_from_frame() has been called to
|
||||||
* separate the header and information.
|
* separate the header and information.
|
||||||
|
@ -458,7 +458,7 @@ void decode_aprs_print (decode_aprs_t *A) {
|
||||||
if (A->g_power > 0) {
|
if (A->g_power > 0) {
|
||||||
char phg[100];
|
char phg[100];
|
||||||
|
|
||||||
/* Protcol spec doesn't mention whether this is dBd or dBi. */
|
/* Protocol spec doesn't mention whether this is dBd or dBi. */
|
||||||
/* Clarified later. */
|
/* Clarified later. */
|
||||||
/* http://eng.usna.navy.mil/~bruninga/aprs/aprs11.html */
|
/* http://eng.usna.navy.mil/~bruninga/aprs/aprs11.html */
|
||||||
/* "The Antenna Gain in the PHG format on page 28 is in dBi." */
|
/* "The Antenna Gain in the PHG format on page 28 is in dBi." */
|
||||||
|
@ -509,7 +509,7 @@ void decode_aprs_print (decode_aprs_t *A) {
|
||||||
|
|
||||||
if (A->g_lat != G_UNKNOWN || A->g_lon != G_UNKNOWN) {
|
if (A->g_lat != G_UNKNOWN || A->g_lon != G_UNKNOWN) {
|
||||||
|
|
||||||
// Have location but it is posible one part is invalid.
|
// Have location but it is possible one part is invalid.
|
||||||
|
|
||||||
if (A->g_lat != G_UNKNOWN) {
|
if (A->g_lat != G_UNKNOWN) {
|
||||||
|
|
||||||
|
@ -1039,7 +1039,7 @@ N1ZZN-9>T2SP0W:'c_Vm6hk/`"49}Byonics TinyTrack4|4
|
||||||
|
|
||||||
# The next group starts with metacharacter "T" which can be any of space > ] ` '
|
# The next group starts with metacharacter "T" which can be any of space > ] ` '
|
||||||
# But space is for original Mic-E, # > and ] are for Kenwood,
|
# But space is for original Mic-E, # > and ] are for Kenwood,
|
||||||
# so ` ' would probably be less ambigous choices but any appear to be valid.
|
# so ` ' would probably be less ambiguous choices but any appear to be valid.
|
||||||
|
|
||||||
N1ZZN-9>T2SP0W:'c_Vm6hk/`"49}Hamhud\9
|
N1ZZN-9>T2SP0W:'c_Vm6hk/`"49}Hamhud\9
|
||||||
N1ZZN-9>T2SP0W:'c_Vm6hk/`"49}Argent/9
|
N1ZZN-9>T2SP0W:'c_Vm6hk/`"49}Argent/9
|
||||||
|
@ -1147,7 +1147,7 @@ static void aprs_mic_e (decode_aprs_t *A, packet_t pp, unsigned char *info, int
|
||||||
mic_e_digit(A, dest[5], 0, &std_msg, &cust_msg)) / 6000.0;
|
mic_e_digit(A, dest[5], 0, &std_msg, &cust_msg)) / 6000.0;
|
||||||
|
|
||||||
|
|
||||||
/* 4th character of desination indicates north / south. */
|
/* 4th character of destination indicates north / south. */
|
||||||
|
|
||||||
if ((dest[3] >= '0' && dest[3] <= '9') || dest[3] == 'L') {
|
if ((dest[3] >= '0' && dest[3] <= '9') || dest[3] == 'L') {
|
||||||
/* South */
|
/* South */
|
||||||
|
@ -1189,7 +1189,7 @@ static void aprs_mic_e (decode_aprs_t *A, packet_t pp, unsigned char *info, int
|
||||||
/* First character of information field is longitude in degrees. */
|
/* First character of information field is longitude in degrees. */
|
||||||
/* It is possible for the unprintable DEL character to occur here. */
|
/* It is possible for the unprintable DEL character to occur here. */
|
||||||
|
|
||||||
/* 5th character of desination indicates longitude offset of +100. */
|
/* 5th character of destination indicates longitude offset of +100. */
|
||||||
/* Not quite that simple :-( */
|
/* Not quite that simple :-( */
|
||||||
|
|
||||||
ch = p->lon[0];
|
ch = p->lon[0];
|
||||||
|
@ -1473,7 +1473,7 @@ static void aprs_mic_e (decode_aprs_t *A, packet_t pp, unsigned char *info, int
|
||||||
*
|
*
|
||||||
* Inputs: info - Pointer to Information field.
|
* Inputs: info - Pointer to Information field.
|
||||||
* ilen - Information field length.
|
* ilen - Information field length.
|
||||||
* quiet - supress error messages.
|
* quiet - suppress error messages.
|
||||||
*
|
*
|
||||||
* Outputs: A->g_msg_type Text description for screen display.
|
* Outputs: A->g_msg_type Text description for screen display.
|
||||||
*
|
*
|
||||||
|
@ -1497,7 +1497,7 @@ static void aprs_mic_e (decode_aprs_t *A, packet_t pp, unsigned char *info, int
|
||||||
*
|
*
|
||||||
* Cases: :xxxxxxxxx:PARM. Telemetry metadata, parameter name
|
* Cases: :xxxxxxxxx:PARM. Telemetry metadata, parameter name
|
||||||
* :xxxxxxxxx:UNIT. Telemetry metadata, unit/label
|
* :xxxxxxxxx:UNIT. Telemetry metadata, unit/label
|
||||||
* :xxxxxxxxx:EQNS. Telemetry metadata, Equation Coefficents
|
* :xxxxxxxxx:EQNS. Telemetry metadata, Equation Coefficients
|
||||||
* :xxxxxxxxx:BITS. Telemetry metadata, Bit Sense/Project Name
|
* :xxxxxxxxx:BITS. Telemetry metadata, Bit Sense/Project Name
|
||||||
* :xxxxxxxxx:? Directed Station Query
|
* :xxxxxxxxx:? Directed Station Query
|
||||||
* :xxxxxxxxx:ack Message acknowledged (received)
|
* :xxxxxxxxx:ack Message acknowledged (received)
|
||||||
|
@ -1520,7 +1520,7 @@ static void aprs_message (decode_aprs_t *A, unsigned char *info, int ilen, int q
|
||||||
char message[73]; /* 0-67 characters for message */
|
char message[73]; /* 0-67 characters for message */
|
||||||
/* Optional { followed by 1-5 characters for message number */
|
/* Optional { followed by 1-5 characters for message number */
|
||||||
|
|
||||||
/* If the first chracter is '?' it is a Directed Station Query. */
|
/* If the first character is '?' it is a Directed Station Query. */
|
||||||
} *p;
|
} *p;
|
||||||
|
|
||||||
char addressee[AX25_MAX_ADDR_LEN];
|
char addressee[AX25_MAX_ADDR_LEN];
|
||||||
|
@ -1583,7 +1583,7 @@ static void aprs_message (decode_aprs_t *A, unsigned char *info, int ilen, int q
|
||||||
telemetry_unit_label_message (addressee, p->message+5);
|
telemetry_unit_label_message (addressee, p->message+5);
|
||||||
}
|
}
|
||||||
else if (strncmp(p->message,"EQNS.",5) == 0) {
|
else if (strncmp(p->message,"EQNS.",5) == 0) {
|
||||||
snprintf (A->g_msg_type, sizeof(A->g_msg_type), "Telemetry Equation Coefficents Message for \"%s\"", addressee);
|
snprintf (A->g_msg_type, sizeof(A->g_msg_type), "Telemetry Equation Coefficients Message for \"%s\"", addressee);
|
||||||
A->g_message_subtype = message_subtype_telem_eqns;
|
A->g_message_subtype = message_subtype_telem_eqns;
|
||||||
telemetry_coefficents_message (addressee, p->message+5, quiet);
|
telemetry_coefficents_message (addressee, p->message+5, quiet);
|
||||||
}
|
}
|
||||||
|
@ -4026,7 +4026,7 @@ static void substr_se (char *dest, const char *src, int start, int endp1)
|
||||||
*
|
*
|
||||||
* !DAO! APRS precision and Datum option.
|
* !DAO! APRS precision and Datum option.
|
||||||
*
|
*
|
||||||
* Protocol reference, end of chaper 6.
|
* Protocol reference, end of chapter 6.
|
||||||
*
|
*
|
||||||
* /A=123456 Altitude
|
* /A=123456 Altitude
|
||||||
*
|
*
|
||||||
|
@ -4066,7 +4066,7 @@ static void substr_se (char *dest, const char *src, int start, int endp1)
|
||||||
* This same thing has been observed from others and is intermittent.
|
* This same thing has been observed from others and is intermittent.
|
||||||
*
|
*
|
||||||
* * AGW Tracker can send UTF-16 if an option is selected. This can introduce nul bytes.
|
* * AGW Tracker can send UTF-16 if an option is selected. This can introduce nul bytes.
|
||||||
* This is wrong. It should be using UTF-8 and I'm not going to accomodate it here.
|
* This is wrong. It should be using UTF-8 and I'm not going to accommodate it here.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* The digipeater and IGate functions should pass along anything exactly the
|
* The digipeater and IGate functions should pass along anything exactly the
|
||||||
|
@ -4233,7 +4233,7 @@ static void process_comment (decode_aprs_t *A, char *pstart, int clen)
|
||||||
/*
|
/*
|
||||||
* Watch out for buffer overflow.
|
* Watch out for buffer overflow.
|
||||||
* KG6AZZ reports that there is a local digipeater that seems to
|
* KG6AZZ reports that there is a local digipeater that seems to
|
||||||
* malfunction ocassionally. It corrupts the packet, as it is
|
* malfunction occasionally. It corrupts the packet, as it is
|
||||||
* digipeated, causing the comment to be hundreds of characters long.
|
* digipeated, causing the comment to be hundreds of characters long.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -4440,7 +4440,7 @@ static void process_comment (decode_aprs_t *A, char *pstart, int clen)
|
||||||
* This would not make sense to use this with a compressed location which
|
* This would not make sense to use this with a compressed location which
|
||||||
* already has much greater resolution.
|
* already has much greater resolution.
|
||||||
*
|
*
|
||||||
* It surprized me to see this in a MIC-E message.
|
* It surprised me to see this in a MIC-E message.
|
||||||
* MIC-E has resolution of .01 minute so it would make sense to have it as an option.
|
* MIC-E has resolution of .01 minute so it would make sense to have it as an option.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -4896,7 +4896,7 @@ int main (int argc, char *argv[])
|
||||||
hex_dump (kiss_frame, kiss_len);
|
hex_dump (kiss_frame, kiss_len);
|
||||||
|
|
||||||
// Put FEND at end to keep kiss_unwrap happy.
|
// Put FEND at end to keep kiss_unwrap happy.
|
||||||
// Having one at the begining is optional.
|
// Having one at the beginning is optional.
|
||||||
|
|
||||||
kiss_frame[kiss_len++] = FEND;
|
kiss_frame[kiss_len++] = FEND;
|
||||||
|
|
||||||
|
|
12
src/demod.c
12
src/demod.c
|
@ -503,7 +503,7 @@ int demod_init (struct audio_s *pa)
|
||||||
// In versions 1.4 and 1.5, V.26 "Alternative A" was used.
|
// In versions 1.4 and 1.5, V.26 "Alternative A" was used.
|
||||||
// years later, I discover that the MFJ-2400 used "Alternative B."
|
// years later, I discover that the MFJ-2400 used "Alternative B."
|
||||||
// It looks like the other two manufacturers use the same but we
|
// It looks like the other two manufacturers use the same but we
|
||||||
// can't be sure until we find one for compatbility testing.
|
// can't be sure until we find one for compatibility testing.
|
||||||
|
|
||||||
// In version 1.6 we add a choice for the user.
|
// In version 1.6 we add a choice for the user.
|
||||||
// If neither one was explicitly specified, print a message and take
|
// If neither one was explicitly specified, print a message and take
|
||||||
|
@ -514,8 +514,8 @@ int demod_init (struct audio_s *pa)
|
||||||
|
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
dw_printf ("Two incompatible versions of 2400 bps QPSK are now available.\n");
|
dw_printf ("Two incompatible versions of 2400 bps QPSK are now available.\n");
|
||||||
dw_printf ("For compatbility with direwolf <= 1.5, use 'V26A' modem option in config file.\n");
|
dw_printf ("For compatibility with direwolf <= 1.5, use 'V26A' modem option in config file.\n");
|
||||||
dw_printf ("For compatbility MFJ-2400 use 'V26B' modem option in config file.\n");
|
dw_printf ("For compatibility MFJ-2400 use 'V26B' modem option in config file.\n");
|
||||||
dw_printf ("Command line options -j and -J can be used for channel 0.\n");
|
dw_printf ("Command line options -j and -J can be used for channel 0.\n");
|
||||||
dw_printf ("For more information, read the Dire Wolf User Guide and\n");
|
dw_printf ("For more information, read the Dire Wolf User Guide and\n");
|
||||||
dw_printf ("2400-4800-PSK-for-APRS-Packet-Radio.pdf.\n");
|
dw_printf ("2400-4800-PSK-for-APRS-Packet-Radio.pdf.\n");
|
||||||
|
@ -709,7 +709,7 @@ int demod_init (struct audio_s *pa)
|
||||||
else if (ratio < 10) {
|
else if (ratio < 10) {
|
||||||
|
|
||||||
// 48000 / 9600 is 5.00
|
// 48000 / 9600 is 5.00
|
||||||
// Need more reasearch. Treat like above for now.
|
// Need more research. Treat like above for now.
|
||||||
|
|
||||||
save_audio_config_p->achan[chan].upsample = 4;
|
save_audio_config_p->achan[chan].upsample = 4;
|
||||||
}
|
}
|
||||||
|
@ -832,7 +832,7 @@ int demod_init (struct audio_s *pa)
|
||||||
* Global In: save_audio_config_p->adev[ACHAN2ADEV(chan)].bits_per_sample - So we know whether to
|
* Global In: save_audio_config_p->adev[ACHAN2ADEV(chan)].bits_per_sample - So we know whether to
|
||||||
* read 1 or 2 bytes from audio stream.
|
* read 1 or 2 bytes from audio stream.
|
||||||
*
|
*
|
||||||
* Description: Grab 1 or two btyes depending on data source.
|
* Description: Grab 1 or two bytes depending on data source.
|
||||||
*
|
*
|
||||||
* When processing stereo, the caller will call this
|
* When processing stereo, the caller will call this
|
||||||
* at twice the normal rate to obtain alternating left
|
* at twice the normal rate to obtain alternating left
|
||||||
|
@ -847,7 +847,7 @@ __attribute__((hot))
|
||||||
int demod_get_sample (int a)
|
int demod_get_sample (int a)
|
||||||
{
|
{
|
||||||
int x1, x2;
|
int x1, x2;
|
||||||
signed short sam; /* short to force sign extention. */
|
signed short sam; /* short to force sign extension. */
|
||||||
|
|
||||||
|
|
||||||
assert (save_audio_config_p->adev[a].bits_per_sample == 8 || save_audio_config_p->adev[a].bits_per_sample == 16);
|
assert (save_audio_config_p->adev[a].bits_per_sample == 8 || save_audio_config_p->adev[a].bits_per_sample == 16);
|
||||||
|
|
|
@ -322,7 +322,7 @@ void demod_9600_process_sample (int chan, int sam, struct demodulator_state_s *D
|
||||||
* Future project? Rather than shifting the samples,
|
* Future project? Rather than shifting the samples,
|
||||||
* it might be faster to add another variable to keep
|
* it might be faster to add another variable to keep
|
||||||
* track of the most recent sample and change the
|
* track of the most recent sample and change the
|
||||||
* indexing in the later loops that multipy and add.
|
* indexing in the later loops that multiply and add.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Scale to nice number for convenience. */
|
/* Scale to nice number for convenience. */
|
||||||
|
@ -478,7 +478,7 @@ void demod_9600_process_sample (int chan, int sam, struct demodulator_state_s *D
|
||||||
*
|
*
|
||||||
* Returns: None
|
* Returns: None
|
||||||
*
|
*
|
||||||
* Descripton: A PLL is used to sample near the centers of the data bits.
|
* Description: A PLL is used to sample near the centers of the data bits.
|
||||||
*
|
*
|
||||||
* D->data_clock_pll is a SIGNED 32 bit variable.
|
* D->data_clock_pll is a SIGNED 32 bit variable.
|
||||||
* When it overflows from a large positive value to a negative value, we
|
* When it overflows from a large positive value to a negative value, we
|
||||||
|
|
|
@ -405,7 +405,7 @@ void demod_afsk_init (int samples_per_sec, int baud, int mark_freq,
|
||||||
* Calculate constants used for timing.
|
* Calculate constants used for timing.
|
||||||
* The audio sample rate must be at least a few times the data rate.
|
* The audio sample rate must be at least a few times the data rate.
|
||||||
*
|
*
|
||||||
* Baud is an integer so we hack in a fine ajustment for EAS.
|
* Baud is an integer so we hack in a fine adjustment for EAS.
|
||||||
* Probably makes no difference because the DPLL keeps it in sync.
|
* Probably makes no difference because the DPLL keeps it in sync.
|
||||||
*
|
*
|
||||||
* A fraction if a Hz would make no difference for the filters.
|
* A fraction if a Hz would make no difference for the filters.
|
||||||
|
@ -847,7 +847,7 @@ void demod_afsk_process_sample (int chan, int subchan, int sam, struct demodulat
|
||||||
* If we adjust it too quickly, the clock will have too much jitter.
|
* If we adjust it too quickly, the clock will have too much jitter.
|
||||||
* If we adjust it too slowly, it will take too long to lock on to a new signal.
|
* If we adjust it too slowly, it will take too long to lock on to a new signal.
|
||||||
*
|
*
|
||||||
* Be a little more agressive about adjusting the PLL
|
* Be a little more aggressive about adjusting the PLL
|
||||||
* phase when searching for a signal. Don't change it as much when
|
* phase when searching for a signal. Don't change it as much when
|
||||||
* locked on to a signal.
|
* locked on to a signal.
|
||||||
*
|
*
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
* "bis" and "ter" are from Latin for second and third.
|
* "bis" and "ter" are from Latin for second and third.
|
||||||
* I used the "ter" version which has phase shifts of 0, 90, 180, and 270 degrees.
|
* I used the "ter" version which has phase shifts of 0, 90, 180, and 270 degrees.
|
||||||
*
|
*
|
||||||
* There are ealier references to an alternative B which uses other phase shifts offset
|
* There are earlier references to an alternative B which uses other phase shifts offset
|
||||||
* by another 45 degrees.
|
* by another 45 degrees.
|
||||||
*
|
*
|
||||||
* After getting QPSK working, it was not much more effort to add V.27 with 8 phases.
|
* After getting QPSK working, it was not much more effort to add V.27 with 8 phases.
|
||||||
|
@ -781,7 +781,7 @@ static void nudge_pll (int chan, int subchan, int slice, int demod_bits, struct
|
||||||
* If we adjust it too quickly, the clock will have too much jitter.
|
* If we adjust it too quickly, the clock will have too much jitter.
|
||||||
* If we adjust it too slowly, it will take too long to lock on to a new signal.
|
* If we adjust it too slowly, it will take too long to lock on to a new signal.
|
||||||
*
|
*
|
||||||
* Be a little more agressive about adjusting the PLL
|
* Be a little more aggressive about adjusting the PLL
|
||||||
* phase when searching for a signal.
|
* phase when searching for a signal.
|
||||||
* Don't change it as much when locked on to a signal.
|
* Don't change it as much when locked on to a signal.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -608,7 +608,7 @@ void digi_regen (int from_chan, packet_t pp)
|
||||||
*
|
*
|
||||||
* Name: main
|
* Name: main
|
||||||
*
|
*
|
||||||
* Purpose: Standalone test case for this funtionality.
|
* Purpose: Standalone test case for this functionality.
|
||||||
*
|
*
|
||||||
* Usage: make -f Makefile.<platform> dtest
|
* Usage: make -f Makefile.<platform> dtest
|
||||||
* ./dtest
|
* ./dtest
|
||||||
|
|
|
@ -224,7 +224,7 @@ int main (int argc, char *argv[])
|
||||||
int d_x_opt = 1; /* "-d x" option for FX.25. Default minimal. Repeat for more detail. -qx to silence. */
|
int d_x_opt = 1; /* "-d x" option for FX.25. Default minimal. Repeat for more detail. -qx to silence. */
|
||||||
int aprstt_debug = 0; /* "-d d" option for APRStt (think Dtmf) debug. */
|
int aprstt_debug = 0; /* "-d d" option for APRStt (think Dtmf) debug. */
|
||||||
|
|
||||||
int E_tx_opt = 0; /* "-E n" Error rate % for clobbering trasmit frames. */
|
int E_tx_opt = 0; /* "-E n" Error rate % for clobbering transmit frames. */
|
||||||
int E_rx_opt = 0; /* "-E Rn" Error rate % for clobbering receive frames. */
|
int E_rx_opt = 0; /* "-E Rn" Error rate % for clobbering receive frames. */
|
||||||
|
|
||||||
float e_recv_ber = 0.0; /* Receive Bit Error Rate (BER). */
|
float e_recv_ber = 0.0; /* Receive Bit Error Rate (BER). */
|
||||||
|
|
|
@ -96,7 +96,7 @@
|
||||||
* Each one of these can have multiple slicers, at
|
* Each one of these can have multiple slicers, at
|
||||||
* different levels, to compensate for different
|
* different levels, to compensate for different
|
||||||
* amplitudes of the AFSK tones.
|
* amplitudes of the AFSK tones.
|
||||||
* Intially used same number as subchannels but
|
* Initially used same number as subchannels but
|
||||||
* we could probably trim this down a little
|
* we could probably trim this down a little
|
||||||
* without impacting performance.
|
* without impacting performance.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -840,7 +840,7 @@ void dlq_channel_busy (int chan, int activity, int status)
|
||||||
* Name: dlq_seize_confirm
|
* Name: dlq_seize_confirm
|
||||||
*
|
*
|
||||||
* Purpose: Inform data link state machine that the transmitter is on.
|
* Purpose: Inform data link state machine that the transmitter is on.
|
||||||
* This is in reponse to lm_seize_request.
|
* This is in response to lm_seize_request.
|
||||||
*
|
*
|
||||||
* Inputs: chan - Radio channel number.
|
* Inputs: chan - Radio channel number.
|
||||||
*
|
*
|
||||||
|
|
|
@ -245,7 +245,7 @@ char dtmf_sample (int c, float input)
|
||||||
* others in the same group multiplied by some factor.
|
* others in the same group multiplied by some factor.
|
||||||
*
|
*
|
||||||
* For perfect synthetic signals this needs to be in
|
* For perfect synthetic signals this needs to be in
|
||||||
* the range of about 1.33 (very senstive) to 2.15 (very fussy).
|
* the range of about 1.33 (very sensitive) to 2.15 (very fussy).
|
||||||
*
|
*
|
||||||
* Too low will cause false triggers on random noise.
|
* Too low will cause false triggers on random noise.
|
||||||
* Too high will won't decode less than perfect signals.
|
* Too high will won't decode less than perfect signals.
|
||||||
|
|
|
@ -90,7 +90,7 @@ static dw_mutex_t s_gps_mutex;
|
||||||
*
|
*
|
||||||
* Name: dwgps_init
|
* Name: dwgps_init
|
||||||
*
|
*
|
||||||
* Purpose: Intialize the GPS interface.
|
* Purpose: Initialize the GPS interface.
|
||||||
*
|
*
|
||||||
* Inputs: pconfig Configuration settings. This might include
|
* Inputs: pconfig Configuration settings. This might include
|
||||||
* serial port name for direct connect and host
|
* serial port name for direct connect and host
|
||||||
|
|
|
@ -94,7 +94,7 @@ static void * read_gpsd_thread (void *arg);
|
||||||
*
|
*
|
||||||
* Name: dwgpsd_init
|
* Name: dwgpsd_init
|
||||||
*
|
*
|
||||||
* Purpose: Intialize the GPS interface.
|
* Purpose: Initialize the GPS interface.
|
||||||
*
|
*
|
||||||
* Inputs: pconfig Configuration settings. This includes
|
* Inputs: pconfig Configuration settings. This includes
|
||||||
* host name or address for network connection.
|
* host name or address for network connection.
|
||||||
|
@ -191,7 +191,7 @@ int dwgpsd_init (struct misc_config_s *pconfig, int debug)
|
||||||
|
|
||||||
if (strlen(pconfig->gpsd_host) == 0) {
|
if (strlen(pconfig->gpsd_host) == 0) {
|
||||||
|
|
||||||
/* Nothing to do. Leave initial fix value of errror. */
|
/* Nothing to do. Leave initial fix value of error. */
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -437,7 +437,7 @@ static int remove_checksum (char *sent, int quiet)
|
||||||
*
|
*
|
||||||
* Name: dwgpsnmea_gprmc
|
* Name: dwgpsnmea_gprmc
|
||||||
*
|
*
|
||||||
* Purpose: Parse $GPRMC sentence and extract interesing parts.
|
* Purpose: Parse $GPRMC sentence and extract interesting parts.
|
||||||
*
|
*
|
||||||
* Inputs: sentence NMEA sentence.
|
* Inputs: sentence NMEA sentence.
|
||||||
*
|
*
|
||||||
|
@ -586,7 +586,7 @@ dwfix_t dwgpsnmea_gprmc (char *sentence, int quiet, double *odlat, double *odlon
|
||||||
*
|
*
|
||||||
* Name: dwgpsnmea_gpgga
|
* Name: dwgpsnmea_gpgga
|
||||||
*
|
*
|
||||||
* Purpose: Parse $GPGGA sentence and extract interesing parts.
|
* Purpose: Parse $GPGGA sentence and extract interesting parts.
|
||||||
*
|
*
|
||||||
* Inputs: sentence NMEA sentence.
|
* Inputs: sentence NMEA sentence.
|
||||||
*
|
*
|
||||||
|
|
|
@ -504,7 +504,7 @@ static int frequency_spec (float freq, float tone, float offset, char *presult)
|
||||||
*
|
*
|
||||||
* comment - Additional comment text.
|
* comment - Additional comment text.
|
||||||
*
|
*
|
||||||
* result_size - Ammount of space for result, provideed by
|
* result_size - Amount of space for result, provided by
|
||||||
* caller, to avoid buffer overflow.
|
* caller, to avoid buffer overflow.
|
||||||
*
|
*
|
||||||
* Outputs: presult - Stored here. Should be at least ??? bytes.
|
* Outputs: presult - Stored here. Should be at least ??? bytes.
|
||||||
|
@ -519,7 +519,7 @@ static int frequency_spec (float freq, float tone, float offset, char *presult)
|
||||||
* Power/height/gain/directivity or
|
* Power/height/gain/directivity or
|
||||||
* Course/speed.
|
* Course/speed.
|
||||||
*
|
*
|
||||||
* Afer that,
|
* After that,
|
||||||
*
|
*
|
||||||
*----------------------------------------------------------------*/
|
*----------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -646,7 +646,7 @@ int encode_position (int messaging, int compressed, double lat, double lon, int
|
||||||
*
|
*
|
||||||
* comment - Additional comment text.
|
* comment - Additional comment text.
|
||||||
*
|
*
|
||||||
* result_size - Ammount of space for result, provideed by
|
* result_size - Amount of space for result, provided by
|
||||||
* caller, to avoid buffer overflow.
|
* caller, to avoid buffer overflow.
|
||||||
*
|
*
|
||||||
* Outputs: presult - Stored here. Should be at least ??? bytes.
|
* Outputs: presult - Stored here. Should be at least ??? bytes.
|
||||||
|
@ -776,7 +776,7 @@ int encode_object (char *name, int compressed, time_t thyme, double lat, double
|
||||||
* Inputs: addressee - Addressed to, up to 9 characters.
|
* Inputs: addressee - Addressed to, up to 9 characters.
|
||||||
* text - Text part of the message.
|
* text - Text part of the message.
|
||||||
* id - Identifier, 0 to 5 characters.
|
* id - Identifier, 0 to 5 characters.
|
||||||
* result_size - Ammount of space for result, provided by
|
* result_size - Amount of space for result, provided by
|
||||||
* caller, to avoid buffer overflow.
|
* caller, to avoid buffer overflow.
|
||||||
*
|
*
|
||||||
* Outputs: presult - Stored here.
|
* Outputs: presult - Stored here.
|
||||||
|
@ -860,7 +860,7 @@ int main (int argc, char *argv[])
|
||||||
dw_printf ("%s\n", result);
|
dw_printf ("%s\n", result);
|
||||||
if (strcmp(result, "!4234.61ND07126.47W&PHG7368") != 0) { dw_printf ("ERROR! line %d\n", __LINE__); errors++; }
|
if (strcmp(result, "!4234.61ND07126.47W&PHG7368") != 0) { dw_printf ("ERROR! line %d\n", __LINE__); errors++; }
|
||||||
|
|
||||||
/* with freq & tone. minus offset, no offset, explict simplex. */
|
/* with freq & tone. minus offset, no offset, explicit simplex. */
|
||||||
|
|
||||||
encode_position (0, 0, 42+34.61/60, -(71+26.47/60), 0, G_UNKNOWN, 'D', '&',
|
encode_position (0, 0, 42+34.61/60, -(71+26.47/60), 0, G_UNKNOWN, 'D', '&',
|
||||||
0, 0, 0, NULL, G_UNKNOWN, 0, 146.955, 74.4, -0.6, NULL, result, sizeof(result));
|
0, 0, 0, NULL, G_UNKNOWN, 0, 146.955, 74.4, -0.6, NULL, result, sizeof(result));
|
||||||
|
|
|
@ -258,7 +258,7 @@ int fx25_rec_busy (int chan)
|
||||||
{
|
{
|
||||||
assert (chan >= 0 && chan < MAX_CHANS);
|
assert (chan >= 0 && chan < MAX_CHANS);
|
||||||
|
|
||||||
// This could be a litle faster if we knew number of
|
// This could be a little faster if we knew number of
|
||||||
// subchannels and slicers but it is probably insignificant.
|
// subchannels and slicers but it is probably insignificant.
|
||||||
|
|
||||||
for (int i = 0; i < MAX_SUBCHANS; i++) {
|
for (int i = 0; i < MAX_SUBCHANS; i++) {
|
||||||
|
|
|
@ -759,7 +759,7 @@ void dcd_change (int chan, int subchan, int slice, int state)
|
||||||
*
|
*
|
||||||
* Name: hdlc_rec_data_detect_any
|
* Name: hdlc_rec_data_detect_any
|
||||||
*
|
*
|
||||||
* Purpose: Determine if the radio channel is curently busy
|
* Purpose: Determine if the radio channel is currently busy
|
||||||
* with packet data.
|
* with packet data.
|
||||||
* This version doesn't care about voice or other sounds.
|
* This version doesn't care about voice or other sounds.
|
||||||
* This is used by the transmit logic to transmit only
|
* This is used by the transmit logic to transmit only
|
||||||
|
@ -774,7 +774,7 @@ void dcd_change (int chan, int subchan, int slice, int state)
|
||||||
* Description: We have two different versions here.
|
* Description: We have two different versions here.
|
||||||
*
|
*
|
||||||
* hdlc_rec_data_detect_any sees if ANY of the decoders
|
* hdlc_rec_data_detect_any sees if ANY of the decoders
|
||||||
* for this channel are receving a signal. This is
|
* for this channel are receiving a signal. This is
|
||||||
* used to determine whether the channel is clear and
|
* used to determine whether the channel is clear and
|
||||||
* we can transmit. This would apply to the 300 baud
|
* we can transmit. This would apply to the 300 baud
|
||||||
* HF SSB case where we have multiple decoders running
|
* HF SSB case where we have multiple decoders running
|
||||||
|
|
|
@ -273,7 +273,7 @@ void hdlc_rec2_block (rrbb_t block)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Not successful with frame in orginal form.
|
* Not successful with frame in original form.
|
||||||
* See if we can "fix" it.
|
* See if we can "fix" it.
|
||||||
*/
|
*/
|
||||||
if (try_to_fix_quick_now (block, chan, subchan, slice, alevel)) {
|
if (try_to_fix_quick_now (block, chan, subchan, slice, alevel)) {
|
||||||
|
|
|
@ -2211,7 +2211,7 @@ static int rx_to_ig_allow (packet_t pp)
|
||||||
*
|
*
|
||||||
* Future:
|
* Future:
|
||||||
* Should the digipeater function avoid transmitting something if it
|
* Should the digipeater function avoid transmitting something if it
|
||||||
* was recently transmitted by the IGate funtion?
|
* was recently transmitted by the IGate function?
|
||||||
* This code is pretty much the same as dedupe.c. Maybe it could all
|
* This code is pretty much the same as dedupe.c. Maybe it could all
|
||||||
* be combined into one. Need to ponder this some more.
|
* be combined into one. Need to ponder this some more.
|
||||||
*
|
*
|
||||||
|
|
|
@ -465,11 +465,11 @@ void kisspt_send_rec_packet (int chan, int kiss_cmd, unsigned char *fbuf, int f
|
||||||
*
|
*
|
||||||
* Returns: one byte (value 0 - 255) or terminate thread on error.
|
* Returns: one byte (value 0 - 255) or terminate thread on error.
|
||||||
*
|
*
|
||||||
* Description: There is room for improvment here. Reading one byte
|
* Description: There is room for improvement here. Reading one byte
|
||||||
* at a time is inefficient. We could read a large block
|
* at a time is inefficient. We could read a large block
|
||||||
* into a local buffer and return a byte from that most of the time.
|
* into a local buffer and return a byte from that most of the time.
|
||||||
* Is it worth the effort? I don't know. With GHz processors and
|
* Is it worth the effort? I don't know. With GHz processors and
|
||||||
* the low data rate here it might not make a noticable difference.
|
* the low data rate here it might not make a noticeable difference.
|
||||||
*
|
*
|
||||||
*--------------------------------------------------------------------*/
|
*--------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
* _6 SetHardware TNC specific.
|
* _6 SetHardware TNC specific.
|
||||||
*
|
*
|
||||||
* _C XKISS extension - not supported.
|
* _C XKISS extension - not supported.
|
||||||
* _E XKISS extention - not supported.
|
* _E XKISS extension - not supported.
|
||||||
*
|
*
|
||||||
* FF Return Exit KISS mode. Ignored.
|
* FF Return Exit KISS mode. Ignored.
|
||||||
*
|
*
|
||||||
|
|
|
@ -45,7 +45,7 @@ enum kiss_state_e {
|
||||||
|
|
||||||
|
|
||||||
#define MAX_KISS_LEN 2048 /* Spec calls for at least 1024. */
|
#define MAX_KISS_LEN 2048 /* Spec calls for at least 1024. */
|
||||||
/* Might want to make it longer to accomodate */
|
/* Might want to make it longer to accommodate */
|
||||||
/* maximum packet length. */
|
/* maximum packet length. */
|
||||||
|
|
||||||
#define MAX_NOISE_LEN 100
|
#define MAX_NOISE_LEN 100
|
||||||
|
|
|
@ -530,7 +530,7 @@ static THREAD_F connect_listen_thread (void *arg)
|
||||||
#else /* End of Windows case, now Linux / Unix / Mac OSX. */
|
#else /* End of Windows case, now Linux / Unix / Mac OSX. */
|
||||||
|
|
||||||
|
|
||||||
struct sockaddr_in sockaddr; /* Internet socket address stuct */
|
struct sockaddr_in sockaddr; /* Internet socket address struct */
|
||||||
socklen_t sockaddr_size = sizeof(struct sockaddr_in);
|
socklen_t sockaddr_size = sizeof(struct sockaddr_in);
|
||||||
int listen_sock;
|
int listen_sock;
|
||||||
int bcopt = 1;
|
int bcopt = 1;
|
||||||
|
|
|
@ -372,11 +372,11 @@ void kissserial_send_rec_packet (int chan, int kiss_cmd, unsigned char *fbuf, i
|
||||||
*
|
*
|
||||||
* Returns: one byte (value 0 - 255) or terminate thread on error.
|
* Returns: one byte (value 0 - 255) or terminate thread on error.
|
||||||
*
|
*
|
||||||
* Description: There is room for improvment here. Reading one byte
|
* Description: There is room for improvement here. Reading one byte
|
||||||
* at a time is inefficient. We could read a large block
|
* at a time is inefficient. We could read a large block
|
||||||
* into a local buffer and return a byte from that most of the time.
|
* into a local buffer and return a byte from that most of the time.
|
||||||
* Is it worth the effort? I don't know. With GHz processors and
|
* Is it worth the effort? I don't know. With GHz processors and
|
||||||
* the low data rate here it might not make a noticable difference.
|
* the low data rate here it might not make a noticeable difference.
|
||||||
*
|
*
|
||||||
*--------------------------------------------------------------------*/
|
*--------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -916,7 +916,7 @@ static void usage(void)
|
||||||
dw_printf (" a serial port. e.g. /dev/ttyAMA0 or COM3.\n");
|
dw_printf (" a serial port. e.g. /dev/ttyAMA0 or COM3.\n");
|
||||||
dw_printf (" -s Serial port speed, default 9600.\n");
|
dw_printf (" -s Serial port speed, default 9600.\n");
|
||||||
dw_printf (" -v Verbose. Show the KISS frame contents.\n");
|
dw_printf (" -v Verbose. Show the KISS frame contents.\n");
|
||||||
dw_printf (" -f Transmit files directory. Processs and delete files here.\n");
|
dw_printf (" -f Transmit files directory. Process and delete files here.\n");
|
||||||
dw_printf (" -o Receive output queue directory. Store received frames here.\n");
|
dw_printf (" -o Receive output queue directory. Store received frames here.\n");
|
||||||
dw_printf (" -T Precede received frames with 'strftime' format time stamp.\n");
|
dw_printf (" -T Precede received frames with 'strftime' format time stamp.\n");
|
||||||
usage2();
|
usage2();
|
||||||
|
@ -930,7 +930,7 @@ static void usage2 (void)
|
||||||
dw_printf ("Input, starting with upper case letter or digit, is assumed\n");
|
dw_printf ("Input, starting with upper case letter or digit, is assumed\n");
|
||||||
dw_printf ("to be an AX.25 frame in the usual TNC2 monitoring format.\n");
|
dw_printf ("to be an AX.25 frame in the usual TNC2 monitoring format.\n");
|
||||||
dw_printf ("\n");
|
dw_printf ("\n");
|
||||||
dw_printf ("Input, starting with a lower case letter is a commmand.\n");
|
dw_printf ("Input, starting with a lower case letter is a command.\n");
|
||||||
dw_printf ("Whitespace, as shown in examples, is optional.\n");
|
dw_printf ("Whitespace, as shown in examples, is optional.\n");
|
||||||
dw_printf ("\n");
|
dw_printf ("\n");
|
||||||
dw_printf (" letter meaning example\n");
|
dw_printf (" letter meaning example\n");
|
||||||
|
|
|
@ -468,7 +468,7 @@ static void pick_best_candidate (int chan)
|
||||||
spectrum[n] = '.';
|
spectrum[n] = '.';
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Begining score depends on effort to get a valid frame CRC. */
|
/* Beginning score depends on effort to get a valid frame CRC. */
|
||||||
|
|
||||||
if (candidate[chan][j][k].packet_p == NULL) {
|
if (candidate[chan][j][k].packet_p == NULL) {
|
||||||
candidate[chan][j][k].score = 0;
|
candidate[chan][j][k].score = 0;
|
||||||
|
|
|
@ -116,7 +116,7 @@ typedef struct pfstate_s {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Are we processing APRS or connected mode?
|
* Are we processing APRS or connected mode?
|
||||||
* This determines whch types of filters are available.
|
* This determines which types of filters are available.
|
||||||
*/
|
*/
|
||||||
int is_aprs;
|
int is_aprs;
|
||||||
|
|
||||||
|
@ -220,7 +220,7 @@ int pfilter (int from_chan, int to_chan, char *filter, packet_t pp, int is_aprs)
|
||||||
pfstate.from_chan = from_chan;
|
pfstate.from_chan = from_chan;
|
||||||
pfstate.to_chan = to_chan;
|
pfstate.to_chan = to_chan;
|
||||||
|
|
||||||
/* Copy filter string, changing any control characers to spaces. */
|
/* Copy filter string, changing any control characters to spaces. */
|
||||||
|
|
||||||
strlcpy (pfstate.filter_str, filter, sizeof(pfstate.filter_str));
|
strlcpy (pfstate.filter_str, filter, sizeof(pfstate.filter_str));
|
||||||
|
|
||||||
|
@ -776,7 +776,7 @@ static int parse_filter_spec (pfstate_t *pf)
|
||||||
* -1 = error detected
|
* -1 = error detected
|
||||||
*
|
*
|
||||||
* Description: Same function is used for all of these because they are so similar.
|
* Description: Same function is used for all of these because they are so similar.
|
||||||
* Look for exact match to any of the specifed strings.
|
* Look for exact match to any of the specified strings.
|
||||||
* All of them allow wildcarding with single * at the end.
|
* All of them allow wildcarding with single * at the end.
|
||||||
*
|
*
|
||||||
*------------------------------------------------------------------------------*/
|
*------------------------------------------------------------------------------*/
|
||||||
|
@ -967,7 +967,7 @@ static int filt_t (pfstate_t *pf)
|
||||||
if (strncmp(infop, ":BOM", 4) == 0) return (1);
|
if (strncmp(infop, ":BOM", 4) == 0) return (1);
|
||||||
/*
|
/*
|
||||||
* Or we can have an object.
|
* Or we can have an object.
|
||||||
* It's not exactly clear how to distiguish this from other objects.
|
* It's not exactly clear how to distinguish this from other objects.
|
||||||
* It looks like the first 3 characters of the source should be the same
|
* It looks like the first 3 characters of the source should be the same
|
||||||
* as the first 3 characters of the addressee.
|
* as the first 3 characters of the addressee.
|
||||||
*/
|
*/
|
||||||
|
@ -1290,7 +1290,7 @@ static int filt_s (pfstate_t *pf)
|
||||||
* -1 = error detected
|
* -1 = error detected
|
||||||
*
|
*
|
||||||
* Description: Selection is based on time since last heard on RF, and distance
|
* Description: Selection is based on time since last heard on RF, and distance
|
||||||
* in terms of digipeater hops and/or phyiscal location.
|
* in terms of digipeater hops and/or physical location.
|
||||||
*
|
*
|
||||||
* i/time
|
* i/time
|
||||||
* i/time/hops
|
* i/time/hops
|
||||||
|
|
|
@ -126,7 +126,7 @@
|
||||||
This is documented in the User Guide, section called,
|
This is documented in the User Guide, section called,
|
||||||
"Hamlib PTT Example 2: Use GPIO of USB audio adapter. (e.g. DMK URI)"
|
"Hamlib PTT Example 2: Use GPIO of USB audio adapter. (e.g. DMK URI)"
|
||||||
|
|
||||||
It's rather involved and the explantion doesn't cover the case of multiple
|
It's rather involved and the explanation doesn't cover the case of multiple
|
||||||
USB-Audio adapters. It would be nice to have a little script which lists all
|
USB-Audio adapters. It would be nice to have a little script which lists all
|
||||||
of the USB-Audio adapters and the corresponding /dev/hidraw device.
|
of the USB-Audio adapters and the corresponding /dev/hidraw device.
|
||||||
( We now have it. The included "cm108" application. )
|
( We now have it. The included "cm108" application. )
|
||||||
|
@ -914,7 +914,7 @@ void ptt_init (struct audio_s *audio_config_p)
|
||||||
if (audio_config_p->achan[ch].octrl[ot].ptt_method == PTT_METHOD_LPT) {
|
if (audio_config_p->achan[ch].octrl[ot].ptt_method == PTT_METHOD_LPT) {
|
||||||
|
|
||||||
/* Can't open the same device more than once so we */
|
/* Can't open the same device more than once so we */
|
||||||
/* need more logic to look for the case of mutiple radio */
|
/* need more logic to look for the case of multiple radio */
|
||||||
/* channels using different pins of the LPT port. */
|
/* channels using different pins of the LPT port. */
|
||||||
|
|
||||||
/* Did some earlier channel use the same ptt device name? */
|
/* Did some earlier channel use the same ptt device name? */
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
* multi_modem_process_sample(s)
|
* multi_modem_process_sample(s)
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* When a packet is succesfully decoded, somebody calls
|
* When a packet is successfully decoded, somebody calls
|
||||||
* app_process_rec_frame, also in direwolf.c
|
* app_process_rec_frame, also in direwolf.c
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
|
|
|
@ -401,7 +401,7 @@ static void debug_print (fromto_t fromto, int client, struct agwpe_s *pmsg, int
|
||||||
|
|
||||||
if (msg_len < 36) {
|
if (msg_len < 36) {
|
||||||
text_color_set (DW_COLOR_ERROR);
|
text_color_set (DW_COLOR_ERROR);
|
||||||
dw_printf ("AGWPE message length, %d, is shorter than minumum 36.\n", msg_len);
|
dw_printf ("AGWPE message length, %d, is shorter than minimum 36.\n", msg_len);
|
||||||
}
|
}
|
||||||
if (msg_len != netle2host(pmsg->data_len_NETLE) + 36) {
|
if (msg_len != netle2host(pmsg->data_len_NETLE) + 36) {
|
||||||
text_color_set (DW_COLOR_ERROR);
|
text_color_set (DW_COLOR_ERROR);
|
||||||
|
@ -670,7 +670,7 @@ static THREAD_F connect_listen_thread (void *arg)
|
||||||
#else /* End of Windows case, now Linux */
|
#else /* End of Windows case, now Linux */
|
||||||
|
|
||||||
|
|
||||||
struct sockaddr_in sockaddr; /* Internet socket address stuct */
|
struct sockaddr_in sockaddr; /* Internet socket address struct */
|
||||||
socklen_t sockaddr_size = sizeof(struct sockaddr_in);
|
socklen_t sockaddr_size = sizeof(struct sockaddr_in);
|
||||||
int server_port = (int)(ptrdiff_t)arg;
|
int server_port = (int)(ptrdiff_t)arg;
|
||||||
int listen_sock;
|
int listen_sock;
|
||||||
|
@ -1864,7 +1864,7 @@ static THREAD_F cmd_listen_thread (void *arg)
|
||||||
dw_printf ("AGW protocol error. Unregister callsign for invalid channel %d.\n", chan);
|
dw_printf ("AGW protocol error. Unregister callsign for invalid channel %d.\n", chan);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* No reponse is expected. */
|
/* No response is expected. */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'C': /* Connect, Start an AX.25 Connection */
|
case 'C': /* Connect, Start an AX.25 Connection */
|
||||||
|
@ -2069,7 +2069,7 @@ static THREAD_F cmd_listen_thread (void *arg)
|
||||||
// Before disconnecting from another station, it would be good to know
|
// Before disconnecting from another station, it would be good to know
|
||||||
// that it actually received the last message we sent. For this reason,
|
// that it actually received the last message we sent. For this reason,
|
||||||
// I think it would be good for this to include information frames that were
|
// I think it would be good for this to include information frames that were
|
||||||
// transmitted but not yet acknowleged.
|
// transmitted but not yet acknowledged.
|
||||||
// You could say that a particular frame is still waiting to be sent even
|
// You could say that a particular frame is still waiting to be sent even
|
||||||
// if was already sent because it could be sent again if lost previously.
|
// if was already sent because it could be sent again if lost previously.
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
|
|
||||||
|
|
||||||
#define T_NUM_ANALOG 5 /* Number of analog channels. */
|
#define T_NUM_ANALOG 5 /* Number of analog channels. */
|
||||||
#define T_NUM_DIGITAL 8 /* Number of digital channnels. */
|
#define T_NUM_DIGITAL 8 /* Number of digital channels. */
|
||||||
|
|
||||||
#define T_STR_LEN 16 /* Max len for labels and units. */
|
#define T_STR_LEN 16 /* Max len for labels and units. */
|
||||||
|
|
||||||
|
@ -707,7 +707,7 @@ void telemetry_unit_label_message (char *station, char *msg)
|
||||||
*
|
*
|
||||||
* Name: telemetry_coefficents_message
|
* Name: telemetry_coefficents_message
|
||||||
*
|
*
|
||||||
* Purpose: Interpret message with scaling coefficents for analog channels.
|
* Purpose: Interpret message with scaling coefficients for analog channels.
|
||||||
*
|
*
|
||||||
* Inputs: station - Name of station reporting telemetry.
|
* Inputs: station - Name of station reporting telemetry.
|
||||||
* In this case it is the destination for the message,
|
* In this case it is the destination for the message,
|
||||||
|
@ -771,7 +771,7 @@ void telemetry_coefficents_message (char *station, char *msg, int quiet)
|
||||||
else {
|
else {
|
||||||
if ( ! quiet) {
|
if ( ! quiet) {
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
dw_printf ("Equation coefficent position A%d%c is empty.\n", n/3+1, n%3+'a');
|
dw_printf ("Equation coefficient position A%d%c is empty.\n", n/3+1, n%3+'a');
|
||||||
dw_printf ("Some applications might not handle this correctly.\n");
|
dw_printf ("Some applications might not handle this correctly.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -782,7 +782,7 @@ void telemetry_coefficents_message (char *station, char *msg, int quiet)
|
||||||
if (n != T_NUM_ANALOG * 3) {
|
if (n != T_NUM_ANALOG * 3) {
|
||||||
if ( ! quiet) {
|
if ( ! quiet) {
|
||||||
text_color_set(DW_COLOR_ERROR);
|
text_color_set(DW_COLOR_ERROR);
|
||||||
dw_printf ("Found %d equation coefficents when 15 were expected.\n", n);
|
dw_printf ("Found %d equation coefficients when 15 were expected.\n", n);
|
||||||
dw_printf ("Some applications might not handle this correctly.\n");
|
dw_printf ("Some applications might not handle this correctly.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -807,7 +807,7 @@ void telemetry_coefficents_message (char *station, char *msg, int quiet)
|
||||||
*
|
*
|
||||||
* Name: telemetry_bit_sense_message
|
* Name: telemetry_bit_sense_message
|
||||||
*
|
*
|
||||||
* Purpose: Interpret message with scaling coefficents for analog channels.
|
* Purpose: Interpret message with scaling coefficients for analog channels.
|
||||||
*
|
*
|
||||||
* Inputs: station - Name of station reporting telemetry.
|
* Inputs: station - Name of station reporting telemetry.
|
||||||
* In this case it is the destination for the message,
|
* In this case it is the destination for the message,
|
||||||
|
@ -910,7 +910,7 @@ void telemetry_bit_sense_message (char *station, char *msg, int quiet)
|
||||||
* seq - Sequence number.
|
* seq - Sequence number.
|
||||||
* araw - 5 analog raw values.
|
* araw - 5 analog raw values.
|
||||||
* ndp - Number of decimal points for each.
|
* ndp - Number of decimal points for each.
|
||||||
* draw - 8 digial raw vales.
|
* draw - 8 digital raw vales.
|
||||||
*
|
*
|
||||||
* Outputs: output - Decoded telemetry in human readable format.
|
* Outputs: output - Decoded telemetry in human readable format.
|
||||||
*
|
*
|
||||||
|
|
|
@ -349,7 +349,7 @@ void text_color_set ( enum dw_color_e c )
|
||||||
* output to stdout or other desired destination.
|
* output to stdout or other desired destination.
|
||||||
*
|
*
|
||||||
* Inputs: fmt - C language format.
|
* Inputs: fmt - C language format.
|
||||||
* ... - Addtional arguments, just like printf.
|
* ... - Additional arguments, just like printf.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Returns: Number of characters in result.
|
* Returns: Number of characters in result.
|
||||||
|
|
|
@ -382,7 +382,7 @@ int tt_text_to_two_key (const char *text, int quiet, char *buttons)
|
||||||
* Outputs: buttons - Sequence of two buttons to press.
|
* Outputs: buttons - Sequence of two buttons to press.
|
||||||
* "00" for error because this is probably
|
* "00" for error because this is probably
|
||||||
* being used to build up a fixed length
|
* being used to build up a fixed length
|
||||||
* string where positions are signficant.
|
* string where positions are significant.
|
||||||
* Must be at least 3 bytes.
|
* Must be at least 3 bytes.
|
||||||
*
|
*
|
||||||
* Returns: Number of errors detected.
|
* Returns: Number of errors detected.
|
||||||
|
|
|
@ -230,7 +230,7 @@ void tt_user_init (struct audio_s *p_audio_config, struct tt_config_s *p_tt_conf
|
||||||
* Inputs: callsign - full or a old style 3 DIGIT suffix abbreviation
|
* Inputs: callsign - full or a old style 3 DIGIT suffix abbreviation
|
||||||
* overlay
|
* overlay
|
||||||
*
|
*
|
||||||
* Returns: Handle for refering to table position or -1 if not found.
|
* Returns: Handle for referring to table position or -1 if not found.
|
||||||
* This happens to be an index into an array but
|
* This happens to be an index into an array but
|
||||||
* the implementation could change so the caller should
|
* the implementation could change so the caller should
|
||||||
* not make any assumptions.
|
* not make any assumptions.
|
||||||
|
@ -290,7 +290,7 @@ int tt_user_search (char *callsign, char overlay)
|
||||||
*
|
*
|
||||||
* Outputs: callsign - corresponding full callsign or empty string.
|
* Outputs: callsign - corresponding full callsign or empty string.
|
||||||
*
|
*
|
||||||
* Returns: Handle for refering to table position (>= 0) or -1 if not found.
|
* Returns: Handle for referring to table position (>= 0) or -1 if not found.
|
||||||
* This happens to be an index into an array but
|
* This happens to be an index into an array but
|
||||||
* the implementation could change so the caller should
|
* the implementation could change so the caller should
|
||||||
* not make any assumptions.
|
* not make any assumptions.
|
||||||
|
@ -351,7 +351,7 @@ static void clear_user(int i)
|
||||||
*
|
*
|
||||||
* Inputs: none
|
* Inputs: none
|
||||||
*
|
*
|
||||||
* Returns: Handle for refering to table position.
|
* Returns: Handle for referring to table position.
|
||||||
*
|
*
|
||||||
* Description: If table is already full, this should delete the
|
* Description: If table is already full, this should delete the
|
||||||
* least recently heard user to make room.
|
* least recently heard user to make room.
|
||||||
|
@ -453,7 +453,7 @@ static void digit_suffix (char *callsign, char *suffix)
|
||||||
*
|
*
|
||||||
* Name: tt_user_heard
|
* Name: tt_user_heard
|
||||||
*
|
*
|
||||||
* Purpose: Record information from an APRStt trasmission.
|
* Purpose: Record information from an APRStt transmission.
|
||||||
*
|
*
|
||||||
* Inputs: callsign - full or an abbreviation
|
* Inputs: callsign - full or an abbreviation
|
||||||
* ssid
|
* ssid
|
||||||
|
@ -881,7 +881,7 @@ static void xmit_object_report (int i, int first_time)
|
||||||
* Any attached application(s).
|
* Any attached application(s).
|
||||||
* IGate.
|
* IGate.
|
||||||
*
|
*
|
||||||
* When transmitting over the radio, it gets sent multipe times, to help
|
* When transmitting over the radio, it gets sent multiple times, to help
|
||||||
* probablity of being heard, with increasing delays between.
|
* probablity of being heard, with increasing delays between.
|
||||||
*
|
*
|
||||||
* The other methods are reliable so we only want to send it once.
|
* The other methods are reliable so we only want to send it once.
|
||||||
|
|
|
@ -92,7 +92,7 @@
|
||||||
// The first byte must be of the form 1000 0xx0
|
// The first byte must be of the form 1000 0xx0
|
||||||
// The second byte must be of the form 1010 xx00
|
// The second byte must be of the form 1010 xx00
|
||||||
// The third byte must be of the form 0000 0010
|
// The third byte must be of the form 0000 0010
|
||||||
// If we process the three byte "HDLC Optional Parmeters" like
|
// If we process the three byte "HDLC Optional Parameters" like
|
||||||
// the other multibyte numeric fields, with the most significant
|
// the other multibyte numeric fields, with the most significant
|
||||||
// byte first, we end up with bit masks like this.
|
// byte first, we end up with bit masks like this.
|
||||||
// The bit order would be 8 7 6 5 4 3 2 1 16 15 14 13 12 11 10 9 24 23 22 21 20 19 18 17
|
// The bit order would be 8 7 6 5 4 3 2 1 16 15 14 13 12 11 10 9 24 23 22 21 20 19 18 17
|
||||||
|
|
|
@ -88,7 +88,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
static int xmit_slottime[MAX_CHANS]; /* Slot time in 10 mS units for persistance algorithm. */
|
static int xmit_slottime[MAX_CHANS]; /* Slot time in 10 mS units for persistence algorithm. */
|
||||||
|
|
||||||
static int xmit_persist[MAX_CHANS]; /* Sets probability for transmitting after each */
|
static int xmit_persist[MAX_CHANS]; /* Sets probability for transmitting after each */
|
||||||
/* slot time delay. Transmit if a random number */
|
/* slot time delay. Transmit if a random number */
|
||||||
|
@ -1384,7 +1384,7 @@ static void xmit_dtmf (int c, packet_t pp, int speed)
|
||||||
* New in version 1.5: full duplex.
|
* New in version 1.5: full duplex.
|
||||||
* Just start transmitting rather than waiting for clear channel.
|
* Just start transmitting rather than waiting for clear channel.
|
||||||
* This would only be appropriate when transmit and receive are
|
* This would only be appropriate when transmit and receive are
|
||||||
* using different radio freqencies. e.g. VHF up, UHF down satellite.
|
* using different radio frequencies. e.g. VHF up, UHF down satellite.
|
||||||
*
|
*
|
||||||
* Transmit delay algorithm:
|
* Transmit delay algorithm:
|
||||||
*
|
*
|
||||||
|
|
|
@ -205,7 +205,7 @@ if(WIN32 OR CYGWIN)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
# Unit test for APRStt tone seqence parsing.
|
# Unit test for APRStt tone sequence parsing.
|
||||||
list(APPEND ttest_SOURCES
|
list(APPEND ttest_SOURCES
|
||||||
${CUSTOM_SRC_DIR}/aprs_tt.c
|
${CUSTOM_SRC_DIR}/aprs_tt.c
|
||||||
${CUSTOM_SRC_DIR}/tt_text.c
|
${CUSTOM_SRC_DIR}/tt_text.c
|
||||||
|
|
Loading…
Reference in New Issue