1 // SilentTimer Action Figure communication library
5 // Copyright (C) 2020 Balthasar SzczepaĆski
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.
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.
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/>.
22 //serial communication errors
23 #define ERR_DATA_TOO_LONG 1
25 #define ERR_INCOMPLETE_DATA 3
26 #define ERR_INVALID_DATA 4
28 #define ERR_MISSING_POINTER 5
29 #define ERR_INVALID_PARAMETER 6
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
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
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
63 #define event_mask 0x6f
65 //calculator operations
67 #define calc_subtract 0x40
68 #define calc_multiply 0x80
69 #define calc_divide 0xc0
71 #define calc_mask 0xc0
74 #define buzzer_enabled 0
75 #define buzzer_disabled 1
76 #define buzzer_forced 2
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
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
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
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
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
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
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
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
148 #define dot_top segment_h0
149 #define dot_bottom segment_h1
150 #define dot_alarm segment_h3
174 struct StafState *state
180 struct StafState *state
202 int stafSubscribeEvent (
203 int fd, uint8_t *event,
204 uint8_t subscribeEvent
207 int stafTriggerEvent (
217 uint8_t *pinout //8 bytes
223 uint8_t *pinout, //8 bytes
230 uint8_t *pinout, //8 bytes
234 int stafFreeDisplay (
299 int stafSetCountdown (
321 int fd, uint8_t *event,
339 int stafGetDigitValue (
345 int stafSetDigitValue (
354 uint8_t *value //3 bytes
360 uint8_t *value //3 bytes
369 int stafSetDebugAddress (
375 int stafGetDebugValue (
383 int stafSetDebugValue (
398 int stafWriteMemory (
405 int stafSetCalibration (
412 int stafGetCalibration (
415 int16_t *calibration,
420 int stafSetBuzzerMode (