]> bicyclesonthemoon.info Git - staf/libstaf/blob - libstaf.h
fix limit check in calculation encoding
[staf/libstaf] / libstaf.h
1 // SilentTimer Action Figure communication library
2 // libstaf.h, v1.1
3 // 
4 // 03.07.2020
5 // Copyright (C) 2020 Balthasar SzczepaƄski
6 // 
7 // This program is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
11 // 
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 // 
17 // You should have received a copy of the GNU General Public License
18 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
20 #include <stdint.h>
21
22 //serial communication errors
23 #define ERR_DATA_TOO_LONG     1
24 #define ERR_NO_DATA           2
25 #define ERR_INCOMPLETE_DATA   3
26 #define ERR_INVALID_DATA      4
27 //command errors
28 #define ERR_MISSING_POINTER   5
29 #define ERR_INVALID_PARAMETER 6
30
31 //"present" modes:
32 #define mode_time        0x00
33 #define mode_alarm       0x01
34 #define mode_date        0x02
35 #define mode_countup     0x03
36 #define mode_countdown   0x04
37 #define mode_calibration 0x05
38 #define mode_version     0x06
39 #define mode_debug       0x07
40 #define mode_reset       0x08
41 #define mode_calculator  0x09
42 //"edit" modes:
43 #define mode_set_time          0x80
44 #define mode_set_alarm         0x81
45 #define mode_set_date          0x82
46 #define mode_set_year          0x83
47 #define mode_set_countdown     0x84
48 #define mode_set_calibration   0x85
49 #define mode_set_debug_address 0x86
50 #define mode_set_debug_value   0x87
51 #define mode_set_calc_number   0x88
52 #define mode_set_calc_operator 0x89
53
54 //triggerable events:
55 #define event_tick      0x01
56 #define event_button_a  0x02
57 #define event_button_b  0x04
58 #define event_button_c  0x08
59 //non-triggerable events
60 #define event_alarm     0x20
61 #define event_countdown 0x40
62
63 #define event_mask      0x6f
64
65 //calculator operations
66 #define calc_add      0x00
67 #define calc_subtract 0x40
68 #define calc_multiply 0x80
69 #define calc_divide   0xc0
70
71 #define calc_mask     0xc0
72
73 //buzzer modes
74 #define buzzer_enabled  0
75 #define buzzer_disabled 1
76 #define buzzer_forced   2
77
78
79 //display segments
80 #define segment_a0 0x00000001
81 #define segment_b0 0x00000002
82 #define segment_c0 0x00000004
83 #define segment_d0 0x00000008
84 #define segment_e0 0x00000010
85 #define segment_f0 0x00000020
86 #define segment_g0 0x00000040
87 #define segment_h0 0x00000080
88
89 #define segment_a1 0x00000100
90 #define segment_b1 0x00000200
91 #define segment_c1 0x00000400
92 #define segment_d1 0x00000800
93 #define segment_e1 0x00001000
94 #define segment_f1 0x00002000
95 #define segment_g1 0x00004000
96 #define segment_h1 0x00008000
97
98 #define segment_a2 0x00010000
99 #define segment_b2 0x00020000
100 #define segment_c2 0x00040000
101 #define segment_d2 0x00080000
102 #define segment_e2 0x00100000
103 #define segment_f2 0x00200000
104 #define segment_g2 0x00400000
105 #define segment_h2 0x00800000
106
107 #define segment_a3 0x01000000
108 #define segment_b3 0x02000000
109 #define segment_c3 0x04000000
110 #define segment_d3 0x08000000
111 #define segment_e3 0x10000000
112 #define segment_f3 0x20000000
113 #define segment_g3 0x40000000
114 #define segment_h3 0x80000000
115
116 #define segment_n0   segment_a0
117 #define segment_ne0  segment_b0
118 #define segment_se0  segment_c0
119 #define segment_s0   segment_d0
120 #define segment_sw0  segment_e0
121 #define segment_nw0  segment_f0
122 #define segment_mid0 segment_g0
123
124 #define segment_n1   segment_a1
125 #define segment_ne1  segment_b1
126 #define segment_se1  segment_c1
127 #define segment_s1   segment_d1
128 #define segment_sw1  segment_e1
129 #define segment_nw1  segment_f1
130 #define segment_mid1 segment_g1
131
132 #define segment_n2   segment_a2
133 #define segment_ne2  segment_b2
134 #define segment_se2  segment_c2
135 #define segment_s2   segment_d2
136 #define segment_sw2  segment_e2
137 #define segment_nw2  segment_f2
138 #define segment_mid2 segment_g2
139
140 #define segment_n3   segment_a3
141 #define segment_ne3  segment_b3
142 #define segment_se3  segment_c3
143 #define segment_s3   segment_d3
144 #define segment_sw3  segment_e3
145 #define segment_nw3  segment_f3
146 #define segment_mid3 segment_g3
147
148 #define dot_top      segment_h0
149 #define dot_bottom   segment_h1
150 #define dot_alarm    segment_h3
151
152
153 struct StafState
154 {
155         uint8_t mode;
156         uint8_t running;
157         uint8_t digit;
158         uint8_t value[3];
159 };
160
161
162 int stafConnect (
163         const char *port
164 );
165
166 int stafDisconnect (
167         int fd
168 );
169
170
171 int stafGetState (
172         int fd,
173         uint8_t *event,
174         struct StafState *state
175 );
176
177 int stafSetState (
178         int fd,
179         uint8_t *event,
180         struct StafState *state
181 );
182
183
184 int stafGetMode (
185         int fd,
186         uint8_t *event,
187         uint8_t *mode
188 );
189
190 int stafSetMode (
191         int fd,
192         uint8_t *event,
193         uint8_t mode
194 );
195
196
197 int stafCheckEvent (
198         int fd,
199         uint8_t *event
200 );
201
202 int stafSubscribeEvent (
203         int fd, uint8_t *event,
204         uint8_t subscribeEvent
205 );
206
207 int stafTriggerEvent (
208         int fd,
209         uint8_t *event,
210         uint8_t triggerEvent
211 );
212
213
214 int stafGetPinout (
215         int fd,
216         uint8_t *event,
217         uint8_t *pinout //8 bytes
218 );
219
220 int stafGetDisplay (
221         int fd,
222         uint8_t *event,
223         uint8_t *pinout, //8 bytes
224         uint32_t *display
225 );
226
227 int stafSetDisplay (
228         int fd,
229         uint8_t *event,
230         uint8_t *pinout, //8 bytes
231         uint32_t display
232 );
233
234 int stafFreeDisplay (
235         int fd,
236         uint8_t *event
237 );
238
239
240 int stafGetTime (
241  int fd,
242  uint8_t *event,
243  uint8_t *cs,
244  uint8_t *second,
245  uint8_t *minute,
246  uint8_t *hour,
247  uint8_t *day,
248  uint8_t *month,
249  uint16_t *year
250 );
251
252 int stafSetTime (
253         int fd,
254         uint8_t *event,
255         uint8_t minute,
256         uint8_t hour,
257         uint8_t restoreState
258 );
259
260 int stafSetDate (
261         int fd,
262         uint8_t *event,
263         uint8_t day,
264         uint8_t month,
265         uint8_t restoreState
266 );
267
268 int stafSetYear (
269         int fd,
270         uint8_t *event,
271         uint16_t year,
272         uint8_t restoreState
273 );
274
275
276 int stafGetAlarm (
277         int fd,
278         uint8_t *event,
279         uint8_t *enabled,
280         uint8_t *minute,
281         uint8_t *hour
282 );
283
284 int stafSetAlarm (
285         int fd,
286         uint8_t *event,
287         uint8_t minute,
288         uint8_t hour,
289         uint8_t restoreState
290 );
291
292 int stafClearAlarm (
293         int fd,
294         uint8_t *event,
295         uint8_t restoreState
296 );
297
298
299 int stafSetCountdown (
300         int fd,
301         uint8_t *event,
302         uint8_t second,
303         uint8_t minute,
304         uint8_t restoreState
305 );
306
307 int stafIsRunning (
308         int fd,
309         uint8_t *event,
310         uint8_t *running
311 );
312
313 int stafSetRunning (
314         int fd,
315         uint8_t *event,
316         uint8_t running
317 );
318
319
320 int stafGetVersion (
321         int fd, uint8_t *event,
322         uint8_t *minor,
323         uint8_t *major
324 );
325
326
327 int stafGetDigit (
328         int fd,
329         uint8_t *event,
330         uint8_t *digit
331 );
332
333 int stafSetDigit (
334         int fd,
335         uint8_t *event,
336         uint8_t digit
337 );
338
339 int stafGetDigitValue (
340         int fd,
341         uint8_t *event,
342         uint8_t *value
343 );
344
345 int stafSetDigitValue (
346         int fd,
347         uint8_t *event,
348         uint8_t value
349 );
350
351 int stafGetValue (
352         int fd,
353         uint8_t *event, 
354         uint8_t *value //3 bytes
355 );
356
357 int stafSetValue (
358         int fd,
359         uint8_t *event,
360         uint8_t *value //3 bytes
361 );
362
363 int stafConfirm (
364         int fd,
365         uint8_t *event
366 );
367
368
369 int stafSetDebugAddress (
370         int fd,
371         uint8_t *event,
372         uint8_t address
373 );
374
375 int stafGetDebugValue (
376         int fd,
377         uint8_t *event,
378         uint8_t address,
379         uint8_t *value,
380         uint8_t restoreState
381 );
382
383 int stafSetDebugValue (
384         int fd,
385         uint8_t *event,
386         uint8_t address,
387         uint8_t value,
388         uint8_t restoreState
389 );
390
391 int stafReadMemory (
392         int fd,
393         uint8_t *event,
394         uint16_t address,
395         uint8_t *value
396 );
397
398 int stafWriteMemory (
399         int fd,
400         uint8_t *event,
401         uint16_t address,
402         uint8_t value
403 );
404
405 int stafSetCalibration (
406         int fd,
407         uint8_t *event,
408         int16_t calibration,
409         uint8_t restoreState
410 );
411
412 int stafGetCalibration (
413         int fd,
414         uint8_t *event,
415         int16_t *calibration,
416         uint8_t restoreState
417 );
418
419
420 int stafSetBuzzerMode (
421         int fd,
422         uint8_t *event,
423         uint8_t mode
424 );
425
426
427 int stafCalculate (
428         int fd,
429         uint8_t *event,
430         float a,
431         float b,
432         uint8_t operation,
433         float *y,
434         uint8_t *error,
435         uint8_t restoreState
436 );