-
Notifications
You must be signed in to change notification settings - Fork 1
/
uwmodem.c
175 lines (119 loc) · 2.75 KB
/
uwmodem.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#include <stdio.h>
#include "uwmodem.h"
#include "frame.h"
#include "comm.h"
int init(unsigned char devid, unsigned char opmode){
/* Initialize queues for all nodes */
initComms("COM7",300);
}
/**
* put - this function sends the given string
* internal use only
* @param[out] x the modified input
* @param[out] x the modified input
* @return \f\$x + 1\f\$
*/
int put( int mode,
unsigned char devid,
char* fmt,
va_list args
){
/* Sanity checks */
if(fmt == NULL)
return 0;
int returncode = 0;
returncode = vsprintf(buffer, fmt, args);
#ifdef DEBUG
printf("uwmodem.c: put() -> user wants to send string:'%s'\n", buffer);
#endif
frameString(mode, devid, buffer);
return returncode;
}
int get ( unsigned char devid,
char* fmt,
va_list args
){
int returncode = 0;
/* Sanity checks */
if(fmt == NULL)
return 0;
#ifdef DEBUG
printf("uwmodem.c: get() -> user wants to get string in the following format: '%s'\n", fmt);
#endif
// note: IF BLOCKING, wait until we get something
//
frames2s(devid, buffer);
// ELSE
/*
// if we don't have anything, return an empty string
//BLOCKING
if(getSize(headRXF, tailRXF) ==0){
buffer= "\0";
return 0;
}
getString(devid, buffer);
*/
return vsscanf(buffer, fmt, args);
}
/**
* sendString - this function sends the given string according to the given input.
* @param[out] x the modified input
* @param[out] x the modified input
* @return \f\$x + 1\f\$
*/
int sendString ( unsigned char devid,
char* fmt,
...
){
/* Variables used in this function */
int returncode = 0;
va_list args;
va_start(args, fmt);
returncode = put(NORMAL_PRIORITY, devid, fmt, args);
va_end(args);
return returncode;
}
int sendhi ( unsigned char devid,
char* fmt,
...
){
int returncode = 0;
va_list args;
va_start(args, fmt);
returncode = put(HIGH_PRIORITY, devid, fmt, args);
va_end(args);
return returncode;
}
int sendna ( unsigned char devid,
char* fmt,
...
){
int returncode = 0;
va_list args;
va_start(args, fmt);
returncode = put(NO_ACK, devid, fmt, args);
va_end(args);
return returncode;
}
int recvString ( char* fmt,
...
){
int returncode = 0;
va_list args;
va_start(args, fmt);
returncode = get(SELF_ID, fmt, args);
va_end(args);
return returncode;
}
void sbroadcast( char* fmt, ... ){
va_list args;
va_start(args, fmt);
put(NO_ACK, 0x00, fmt, args);
va_end(args);
}
void rbroadcast( char* buffer, char* fmt, ... ){
va_list args;
va_start(args, fmt);
get(0x00, fmt, args);
va_end(args);
}