1 
2 /* ax25_link.h */
3 
4 
5 #ifndef AX25_LINK_H
6 #define AX25_LINK_H 1
7 
8 #include "ax25_pad.h"		// for AX25_MAX_INFO_LEN
9 
10 #include "dlq.h"		// for dlq_item_t
11 
12 #include "config.h"		// for struct misc_config_s
13 
14 
15 
16 // Limits and defaults for parameters.
17 
18 
19 #define AX25_N1_PACLEN_MIN 1		// Max bytes in Information part of frame.
20 #define AX25_N1_PACLEN_DEFAULT 256	// some v2.0 implementations have 128
21 #define AX25_N1_PACLEN_MAX AX25_MAX_INFO_LEN	// from ax25_pad.h
22 
23 
24 #define AX25_N2_RETRY_MIN 1		// Number of times to retry before giving up.
25 #define AX25_N2_RETRY_DEFAULT 10
26 #define AX25_N2_RETRY_MAX 15
27 
28 
29 #define AX25_T1V_FRACK_MIN 1		// Number of seconds to wait before retrying.
30 #define AX25_T1V_FRACK_DEFAULT 3	// KPC-3+ has 4.  TM-D710A has 3.
31 #define AX25_T1V_FRACK_MAX 15
32 
33 
34 #define AX25_K_MAXFRAME_BASIC_MIN 1		// Window size - number of I frames to send before waiting for ack.
35 #define AX25_K_MAXFRAME_BASIC_DEFAULT 4
36 #define AX25_K_MAXFRAME_BASIC_MAX 7
37 
38 #define AX25_K_MAXFRAME_EXTENDED_MIN 1
39 #define AX25_K_MAXFRAME_EXTENDED_DEFAULT 32
40 #define AX25_K_MAXFRAME_EXTENDED_MAX 63		// In theory 127 but I'm restricting as explained in SREJ handling.
41 
42 
43 
44 // Call once at startup time.
45 
46 void ax25_link_init (struct misc_config_s *pconfig);
47 
48 
49 
50 // IMPORTANT:
51 
52 // These functions must be called on a single thread, one at a time.
53 // The Data Link Queue (DLQ) is used to serialize events from multiple sources.
54 
55 // Maybe the dispatch switch should be moved to ax25_link.c so they can all
56 // be made static and they can't be called from the wrong place accidentally.
57 
58 void dl_connect_request (dlq_item_t *E);
59 
60 void dl_disconnect_request (dlq_item_t *E);
61 
62 void dl_data_request (dlq_item_t *E);
63 
64 void dl_register_callsign (dlq_item_t *E);
65 
66 void dl_unregister_callsign (dlq_item_t *E);
67 
68 void dl_outstanding_frames_request (dlq_item_t *E);
69 
70 void dl_client_cleanup (dlq_item_t *E);
71 
72 
73 void lm_data_indication (dlq_item_t *E);
74 
75 void lm_seize_confirm (dlq_item_t *E);
76 
77 void lm_channel_busy (dlq_item_t *E);
78 
79 
80 void dl_timer_expiry (void);
81 
82 
83 double ax25_link_get_next_timer_expiry (void);
84 
85 
86 #endif
87 
88 /* end ax25_link.h */