263 lines
8.9 KiB
C
263 lines
8.9 KiB
C
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
*
|
||
|
* Name: config.h
|
||
|
*
|
||
|
* Purpose:
|
||
|
*
|
||
|
* Description:
|
||
|
*
|
||
|
*-----------------------------------------------------------------------------*/
|
||
|
|
||
|
|
||
|
#ifndef CONFIG_H
|
||
|
#define CONFIG_H 1
|
||
|
|
||
|
#include "audio.h" /* for struct audio_s */
|
||
|
#include "digipeater.h" /* for struct digi_config_s */
|
||
|
#include "cdigipeater.h" /* for struct cdigi_config_s */
|
||
|
#include "aprs_tt.h" /* for struct tt_config_s */
|
||
|
#include "igate.h" /* for struct igate_config_s */
|
||
|
|
||
|
/*
|
||
|
* All the leftovers.
|
||
|
* This wasn't thought out. It just happened.
|
||
|
*/
|
||
|
|
||
|
enum beacon_type_e { BEACON_IGNORE, BEACON_POSITION, BEACON_OBJECT, BEACON_TRACKER, BEACON_CUSTOM, BEACON_IGATE };
|
||
|
|
||
|
enum sendto_type_e { SENDTO_XMIT, SENDTO_IGATE, SENDTO_RECV };
|
||
|
|
||
|
|
||
|
#define MAX_BEACONS 30
|
||
|
#define MAX_KISS_TCP_PORTS (MAX_CHANS+1)
|
||
|
|
||
|
struct misc_config_s {
|
||
|
|
||
|
int agwpe_port; /* TCP Port number for the "AGW TCPIP Socket Interface" */
|
||
|
|
||
|
// Previously we allowed only a single TCP port for KISS.
|
||
|
// An increasing number of people want to run multiple radios.
|
||
|
// Unfortunately, most applications don't know how to deal with multi-radio TNCs.
|
||
|
// They ignore the channel on receive and always transmit to channel 0.
|
||
|
// Running multiple instances of direwolf is a work-around but this leads to
|
||
|
// more complex configuration and we lose the cross-channel digipeating capability.
|
||
|
// In release 1.7 we add a new feature to assign a single radio channel to a TCP port.
|
||
|
// e.g.
|
||
|
// KISSPORT 8001 # default, all channels. Radio channel = KISS channel.
|
||
|
//
|
||
|
// KISSPORT 7000 0 # Only radio channel 0 for receive.
|
||
|
// # Transmit to radio channel 0, ignoring KISS channel.
|
||
|
//
|
||
|
// KISSPORT 7001 1 # Only radio channel 1 for receive. KISS channel set to 0.
|
||
|
// # Transmit to radio channel 1, ignoring KISS channel.
|
||
|
|
||
|
int kiss_port[MAX_KISS_TCP_PORTS]; /* TCP Port number for the "TCP KISS" protocol. */
|
||
|
int kiss_chan[MAX_KISS_TCP_PORTS]; /* Radio Channel number for this port or -1 for all. */
|
||
|
|
||
|
int kiss_copy; /* Data from network KISS client is copied to all others. */
|
||
|
int enable_kiss_pt; /* Enable pseudo terminal for KISS. */
|
||
|
/* Want this to be off by default because it hangs */
|
||
|
/* after a while if nothing is reading from other end. */
|
||
|
|
||
|
char kiss_serial_port[20];
|
||
|
/* Serial port name for our end of the */
|
||
|
/* virtual null modem for native Windows apps. */
|
||
|
/* Version 1.5 add same capability for Linux. */
|
||
|
|
||
|
int kiss_serial_speed; /* Speed, in bps, for the KISS serial port. */
|
||
|
/* If 0, just leave what was already there. */
|
||
|
|
||
|
int kiss_serial_poll; /* When using Bluetooth KISS, the /dev/rfcomm0 device */
|
||
|
/* will appear and disappear as the remote application */
|
||
|
/* opens and closes the virtual COM port. */
|
||
|
/* When this is non-zero, we will check periodically to */
|
||
|
/* see if the device has appeared and we will open it. */
|
||
|
|
||
|
char gpsnmea_port[20]; /* Serial port name for reading NMEA sentences from GPS. */
|
||
|
/* e.g. COM22, /dev/ttyACM0 */
|
||
|
|
||
|
int gpsnmea_speed; /* Speed for above, baud, default 4800. */
|
||
|
|
||
|
char gpsd_host[20]; /* Host for gpsd server. */
|
||
|
/* e.g. localhost, 192.168.1.2 */
|
||
|
|
||
|
int gpsd_port; /* Port number for gpsd server. */
|
||
|
/* Default is 2947. */
|
||
|
|
||
|
|
||
|
char waypoint_serial_port[20]; /* Serial port name for sending NMEA waypoint sentences */
|
||
|
/* to a GPS map display or other mapping application. */
|
||
|
/* e.g. COM22, /dev/ttyACM0 */
|
||
|
/* Currently no option for setting non-standard speed. */
|
||
|
/* This was done in 2014 and no one has complained yet. */
|
||
|
|
||
|
char waypoint_udp_hostname[80]; /* Destination host when using UDP. */
|
||
|
|
||
|
int waypoint_udp_portnum; /* UDP port. */
|
||
|
|
||
|
int waypoint_formats; /* Which sentence formats should be generated? */
|
||
|
|
||
|
#define WPL_FORMAT_NMEA_GENERIC 0x01 /* N $GPWPL */
|
||
|
#define WPL_FORMAT_GARMIN 0x02 /* G $PGRMW */
|
||
|
#define WPL_FORMAT_MAGELLAN 0x04 /* M $PMGNWPL */
|
||
|
#define WPL_FORMAT_KENWOOD 0x08 /* K $PKWDWPL */
|
||
|
#define WPL_FORMAT_AIS 0x10 /* A !AIVDM */
|
||
|
|
||
|
|
||
|
int log_daily_names; /* True to generate new log file each day. */
|
||
|
|
||
|
char log_path[80]; /* Either directory or full file name depending on above. */
|
||
|
|
||
|
int dns_sd_enabled; /* DNS Service Discovery announcement enabled. */
|
||
|
char dns_sd_name[64]; /* Name announced on dns-sd; defaults to "Dire Wolf on <hostname>" */
|
||
|
|
||
|
int sb_configured; /* TRUE if SmartBeaconing is configured. */
|
||
|
int sb_fast_speed; /* MPH */
|
||
|
int sb_fast_rate; /* seconds */
|
||
|
int sb_slow_speed; /* MPH */
|
||
|
int sb_slow_rate; /* seconds */
|
||
|
int sb_turn_time; /* seconds */
|
||
|
int sb_turn_angle; /* degrees */
|
||
|
int sb_turn_slope; /* degrees * MPH */
|
||
|
|
||
|
// AX.25 connected mode.
|
||
|
|
||
|
int frack; /* Number of seconds to wait for ack to transmission. */
|
||
|
|
||
|
int retry; /* Number of times to retry before giving up. */
|
||
|
|
||
|
int paclen; /* Max number of bytes in information part of frame. */
|
||
|
|
||
|
int maxframe_basic; /* Max frames to send before ACK. mod 8 "Window" size. */
|
||
|
|
||
|
int maxframe_extended; /* Max frames to send before ACK. mod 128 "Window" size. */
|
||
|
|
||
|
int maxv22; /* Maximum number of unanswered SABME frames sent before */
|
||
|
/* switching to SABM. This is to handle the case of an old */
|
||
|
/* TNC which simply ignores SABME rather than replying with FRMR. */
|
||
|
|
||
|
char **v20_addrs; /* Stations known to understand only AX.25 v2.0 so we don't */
|
||
|
/* waste time trying v2.2 first. */
|
||
|
|
||
|
int v20_count; /* Number of station addresses in array above. */
|
||
|
|
||
|
char **noxid_addrs; /* Stations known not to understand XID command so don't */
|
||
|
/* waste time sending it and eventually giving up. */
|
||
|
/* AX.25 for Linux is the one known case, so far, where */
|
||
|
/* SABME is implemented but XID is not. */
|
||
|
|
||
|
int noxid_count; /* Number of station addresses in array above. */
|
||
|
|
||
|
|
||
|
// Beacons.
|
||
|
|
||
|
int num_beacons; /* Number of beacons defined. */
|
||
|
|
||
|
struct beacon_s {
|
||
|
|
||
|
enum beacon_type_e btype; /* Position or object. */
|
||
|
|
||
|
int lineno; /* Line number from config file for later error messages. */
|
||
|
|
||
|
enum sendto_type_e sendto_type;
|
||
|
|
||
|
/* SENDTO_XMIT - Usually beacons go to a radio transmitter. */
|
||
|
/* chan, below is the channel number. */
|
||
|
/* SENDTO_IGATE - Send to IGate, probably to announce my position */
|
||
|
/* rather than relying on someone else to hear */
|
||
|
/* me on the radio and report me. */
|
||
|
/* SENDTO_RECV - Pretend this was heard on the specified */
|
||
|
/* radio channel. Mostly for testing. It is a */
|
||
|
/* convenient way to send packets to attached apps. */
|
||
|
|
||
|
int sendto_chan; /* Transmit or simulated receive channel for above. Should be 0 for IGate. */
|
||
|
|
||
|
int delay; /* Seconds to delay before first transmission. */
|
||
|
|
||
|
int slot; /* Seconds after hour for slotted time beacons. */
|
||
|
/* If specified, it overrides any 'delay' value. */
|
||
|
|
||
|
int every; /* Time between transmissions, seconds. */
|
||
|
/* Remains fixed for PBEACON and OBEACON. */
|
||
|
/* Dynamically adjusted for TBEACON. */
|
||
|
|
||
|
time_t next; /* Unix time to transmit next one. */
|
||
|
|
||
|
char *source; /* NULL or explicit AX.25 source address to use */
|
||
|
/* instead of the mycall value for the channel. */
|
||
|
|
||
|
char *dest; /* NULL or explicit AX.25 destination to use */
|
||
|
/* instead of the software version such as APDW11. */
|
||
|
|
||
|
int compress; /* Use more compact form? */
|
||
|
|
||
|
char objname[10]; /* Object name. Any printable characters. */
|
||
|
|
||
|
char *via; /* Path, e.g. "WIDE1-1,WIDE2-1" or NULL. */
|
||
|
|
||
|
char *custom_info; /* Info part for handcrafted custom beacon. */
|
||
|
/* Ignore the rest below if this is set. */
|
||
|
|
||
|
char *custom_infocmd; /* Command to generate info part. */
|
||
|
/* Again, other options below are then ignored. */
|
||
|
|
||
|
int messaging; /* Set messaging attribute for position report. */
|
||
|
/* i.e. Data Type Indicator of '=' rather than '!' */
|
||
|
|
||
|
double lat; /* Latitude and longitude. */
|
||
|
double lon;
|
||
|
int ambiguity; /* Number of lower digits to trim from location. 0 (default), 1, 2, 3, 4. */
|
||
|
float alt_m; /* Altitude in meters. */
|
||
|
|
||
|
char symtab; /* Symbol table: / or \ or overlay character. */
|
||
|
char symbol; /* Symbol code. */
|
||
|
|
||
|
float power; /* For PHG. */
|
||
|
float height; /* HAAT in feet */
|
||
|
float gain; /* Original protocol spec was unclear. */
|
||
|
/* Addendum 1.1 clarifies it is dBi not dBd. */
|
||
|
|
||
|
char dir[3]; /* 1 or 2 of N,E,W,S, or empty for omni. */
|
||
|
|
||
|
float freq; /* MHz. */
|
||
|
float tone; /* Hz. */
|
||
|
float offset; /* MHz. */
|
||
|
|
||
|
char *comment; /* Comment or NULL. */
|
||
|
char *commentcmd; /* Command to append more to Comment or NULL. */
|
||
|
|
||
|
|
||
|
} beacon[MAX_BEACONS];
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
#define MIN_IP_PORT_NUMBER 1024
|
||
|
#define MAX_IP_PORT_NUMBER 49151
|
||
|
|
||
|
|
||
|
#define DEFAULT_AGWPE_PORT 8000 /* Like everyone else. */
|
||
|
#define DEFAULT_KISS_PORT 8001 /* Above plus 1. */
|
||
|
|
||
|
|
||
|
#define DEFAULT_NULLMODEM "COM3" /* should be equiv. to /dev/ttyS2 on Cygwin */
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
extern void config_init (char *fname, struct audio_s *p_modem,
|
||
|
struct digi_config_s *digi_config,
|
||
|
struct cdigi_config_s *cdigi_config,
|
||
|
struct tt_config_s *p_tt_config,
|
||
|
struct igate_config_s *p_igate_config,
|
||
|
struct misc_config_s *misc_config);
|
||
|
|
||
|
|
||
|
|
||
|
#endif /* CONFIG_H */
|
||
|
|
||
|
/* end config.h */
|
||
|
|
||
|
|