direwolf/direwolf.h
WB2OSZ 8b81a3226f Version 1.2
new file:   A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf
	new file:   A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf
	modified:   APRStt-Implementation-Notes.pdf
	modified:   CHANGES.txt
	new file:   Makefile
	modified:   Makefile.linux
	modified:   Makefile.win
	deleted:    Quick-Start-Guide-Windows.pdf
	modified:   Raspberry-Pi-APRS-Tracker.pdf
	modified:   Raspberry-Pi-APRS.pdf
	modified:   User-Guide.pdf
	modified:   aclients.c
	modified:   aprs_tt.c
	modified:   aprs_tt.h
	modified:   atest.c
	modified:   audio.c
	modified:   audio.h
	modified:   audio_win.c
	modified:   ax25_pad.c
	modified:   ax25_pad.h
	modified:   beacon.c
	modified:   beacon.h
	modified:   config.c
	modified:   config.h
	modified:   decode_aprs.c
	modified:   decode_aprs.h
	modified:   demod.c
	modified:   demod.h
	modified:   demod_9600.c
	modified:   demod_9600.h
	modified:   demod_afsk.c
	modified:   digipeater.c
	modified:   digipeater.h
	modified:   direwolf.c
	modified:   direwolf.conf
	deleted:    direwolf.desktop
	modified:   direwolf.h
	new file:   direwolf.spec
	new file:   direwolf.txt
	new file:   dlq.c
	new file:   dlq.h
	modified:   dsp.c
	new file:   dtime_now.c
	new file:   dtime_now.h
	modified:   dtmf.c
	modified:   dtmf.h
	new file:   dwespeak.bat
	new file:   dwespeak.sh
	modified:   fsk_demod_state.h
	modified:   gen_packets.c
	modified:   gen_tone.c
	new file:   geotranz/README-FIRST.txt
	new file:   geotranz/error_string.c
	new file:   geotranz/error_string.h
	new file:   geotranz/mgrs.c
	new file:   geotranz/mgrs.h
	new file:   geotranz/polarst.c
	new file:   geotranz/polarst.h
	new file:   geotranz/readme.txt
	new file:   geotranz/releasenotes.txt
	new file:   geotranz/tranmerc.c
	new file:   geotranz/tranmerc.h
	new file:   geotranz/ups.c
	new file:   geotranz/ups.h
	new file:   geotranz/usng.c
	new file:   geotranz/usng.h
	new file:   geotranz/utm.c
	new file:   geotranz/utm.h
	modified:   hdlc_rec.c
	modified:   hdlc_rec.h
	modified:   hdlc_rec2.c
	modified:   hdlc_rec2.h
	modified:   hdlc_send.c
	modified:   igate.c
	modified:   igate.h
	modified:   kiss_frame.c
	modified:   kiss_frame.h
	modified:   kissnet.c
	modified:   latlong.c
	modified:   latlong.h
	modified:   ll2utm.c
	modified:   log.c
	modified:   log.h
	new file:   man1/aclients.1
	new file:   man1/atest.1
	new file:   man1/decode_aprs.1
	new file:   man1/direwolf.1
	new file:   man1/gen_packets.1
	new file:   man1/ll2utm.1
	new file:   man1/log2gpx.1
	new file:   man1/text2tt.1
	new file:   man1/tt2text.1
	new file:   man1/utm2ll.1
	modified:   multi_modem.c
	modified:   multi_modem.h
	new file:   pfilter.c
	new file:   pfilter.h
	modified:   ptt.c
	modified:   ptt.h
	deleted:    pttest.c
	modified:   rdq.c
	new file:   recv.c
	new file:   recv.h
	modified:   redecode.c
	modified:   redecode.h
	modified:   rrbb.c
	modified:   rrbb.h
	modified:   server.c
	modified:   server.h
	modified:   telemetry.c
	modified:   telemetry.h
	modified:   textcolor.c
	modified:   textcolor.h
	modified:   tocalls.txt
	modified:   tq.c
	modified:   tq.h
	modified:   tt_text.c
	modified:   tt_text.h
	modified:   tt_user.c
	modified:   tt_user.h
	new file:   ttcalc.c
	deleted:    udp_test.c
	deleted:    utm/LatLong-UTMconversion.c
	deleted:    utm/LatLong-UTMconversion.h
	deleted:    utm/README.txt
	deleted:    utm/SwissGrid.cpp
	deleted:    utm/UTMConversions.cpp
	deleted:    utm/constants.h
	modified:   utm2ll.c
	modified:   version.h
	new file:   xid.c
	modified:   xmit.c
	modified:   xmit.h
2015-07-26 21:17:23 -04:00

161 lines
3.7 KiB
C

#ifndef DIREWOLF_H
#define DIREWOLF_H 1
/*
* Previously, we could handle only a single audio device.
* This meant we could have only two radio channels.
* In version 1.2, we relax this restriction and allow more audio devices.
* Three is probably adequate for standard version.
* Larger reasonable numbers should also be fine.
*/
#define MAX_ADEVS 3
/*
* Maximum number of radio channels.
* Note that there could be gaps.
* Suppose audio device 0 was in mono mode and audio device 1 was stereo.
* The channels available would be:
*
* ADevice 0: channel 0
* ADevice 1: left = 2, right = 3
*
* TODO1.2: Look for any places that have
* for (ch=0; ch<MAX_CHANS; ch++) ...
* and make sure they handle undefined channels correctly.
*/
#define MAX_CHANS ((MAX_ADEVS) * 2)
/*
* Get audio device number for given channel.
* and first channel for given device.
*/
#define ACHAN2ADEV(n) ((n)>>1)
#define ADEVFIRSTCHAN(n) ((n) * 2)
/*
* Maximum number of modems per channel.
* I called them "subchannels" (in the code) because
* it is short and unambiguous.
* Nothing magic about the number. Could be larger
* but CPU demands might be overwhelming.
*/
#define MAX_SUBCHANS 9
#if __WIN32__
#include <windows.h>
#define SLEEP_SEC(n) Sleep((n)*1000)
#define SLEEP_MS(n) Sleep(n)
#else
#define SLEEP_SEC(n) sleep(n)
#define SLEEP_MS(n) usleep((n)*1000)
#endif
#if __WIN32__
#define PTW32_STATIC_LIB
#include "pthreads/pthread.h"
#else
#include <pthread.h>
#endif
/* Not sure where to put these. */
/* Prefix with DW_ because /usr/include/gps.h uses a couple of these names. */
#define DW_METERS_TO_FEET(x) ((x) == G_UNKNOWN ? G_UNKNOWN : (x) * 3.2808399)
#define DW_FEET_TO_METERS(x) ((x) == G_UNKNOWN ? G_UNKNOWN : (x) * 0.3048)
#define DW_KM_TO_MILES(x) ((x) == G_UNKNOWN ? G_UNKNOWN : (x) * 0.621371192)
#define DW_KNOTS_TO_MPH(x) ((x) == G_UNKNOWN ? G_UNKNOWN : (x) * 1.15077945)
#define DW_KNOTS_TO_METERS_PER_SEC(x) ((x) == G_UNKNOWN ? G_UNKNOWN : (x) * 0.51444444444)
#define DW_MPH_TO_KNOTS(x) ((x) == G_UNKNOWN ? G_UNKNOWN : (x) * 0.868976)
#define DW_MPH_TO_METERS_PER_SEC(x) ((x) == G_UNKNOWN ? G_UNKNOWN : (x) * 0.44704)
#define DW_MBAR_TO_INHG(x) ((x) == G_UNKNOWN ? G_UNKNOWN : (x) * 0.0295333727)
#if __WIN32__
typedef CRITICAL_SECTION dw_mutex_t;
#define dw_mutex_init(x) \
InitializeCriticalSection (x)
/* This one waits for lock. */
#define dw_mutex_lock(x) \
EnterCriticalSection (x)
/* Returns non-zero if lock was obtained. */
#define dw_mutex_try_lock(x) \
TryEnterCriticalSection (x)
#define dw_mutex_unlock(x) \
LeaveCriticalSection (x)
#else
typedef pthread_mutex_t dw_mutex_t;
#define dw_mutex_init(x) pthread_mutex_init (x, NULL)
/* this one will wait. */
#define dw_mutex_lock(x) \
{ \
int err; \
err = pthread_mutex_lock (x); \
if (err != 0) { \
text_color_set(DW_COLOR_ERROR); \
dw_printf ("INTERNAL ERROR %s %d pthread_mutex_lock returned %d", __FILE__, __LINE__, err); \
exit (1); \
} \
}
/* This one returns true if lock successful, false if not. */
/* pthread_mutex_trylock returns 0 for success. */
#define dw_mutex_try_lock(x) \
({ \
int err; \
err = pthread_mutex_trylock (x); \
if (err != 0 && err != EBUSY) { \
text_color_set(DW_COLOR_ERROR); \
dw_printf ("INTERNAL ERROR %s %d pthread_mutex_trylock returned %d", __FILE__, __LINE__, err); \
exit (1); \
} ; \
! err; \
})
#define dw_mutex_unlock(x) \
{ \
int err; \
err = pthread_mutex_unlock (x); \
if (err != 0) { \
text_color_set(DW_COLOR_ERROR); \
dw_printf ("INTERNAL ERROR %s %d pthread_mutex_unlock returned %d", __FILE__, __LINE__, err); \
exit (1); \
} \
}
#endif
#endif /* ifndef DIREWOLF_H */