ant-wireless 0.1.0.pre.20210617213631
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/History.md +5 -0
- data/LICENSE.txt +20 -0
- data/README.md +79 -0
- data/ext/ant_ext/ant_ext.c +791 -0
- data/ext/ant_ext/ant_ext.h +101 -0
- data/ext/ant_ext/antdefines.h +355 -0
- data/ext/ant_ext/antmessage.h +445 -0
- data/ext/ant_ext/build_version.h +18 -0
- data/ext/ant_ext/callbacks.c +233 -0
- data/ext/ant_ext/channel.c +524 -0
- data/ext/ant_ext/defines.h +40 -0
- data/ext/ant_ext/extconf.rb +22 -0
- data/ext/ant_ext/message.c +377 -0
- data/ext/ant_ext/types.h +202 -0
- data/ext/ant_ext/version.h +41 -0
- data/lib/ant.rb +138 -0
- data/lib/ant/channel.rb +66 -0
- data/lib/ant/channel/event_callbacks.rb +207 -0
- data/lib/ant/message.rb +10 -0
- data/lib/ant/mixins.rb +34 -0
- data/lib/ant/response_callbacks.rb +528 -0
- data/lib/ant/wireless.rb +5 -0
- data/spec/ant_spec.rb +88 -0
- data/spec/spec_helper.rb +37 -0
- metadata +131 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 47f23b13571d44d37275d309e73bf1b3b1d3b4f7e3c952f95fdf5b73321412b1
|
4
|
+
data.tar.gz: 6bbccd101666ef42d12eab3d9b3d9e653634d97e19d9042f0c8282d74caf3fcb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3cfbf1870872f9747df428d3ac4be4dd71b857bf47beb763f3d30fa517134b5d509e895ed975307b26de7936cee40dfc83f7b938e11679e61bf9e002d058acfb
|
7
|
+
data.tar.gz: e7831b872fabbd850a946c88d053edc604aff86652e0efc6ffee9e593f92e5c52216a7382520765f2793a1e728b4457335ef3b9a999ec3d3eaa00699fdc89c2a
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2021 Ravn Group
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# ant-wireless
|
2
|
+
|
3
|
+
home
|
4
|
+
: https://sr.ht/~ged/ruby-ant-wireless/
|
5
|
+
|
6
|
+
code
|
7
|
+
: https://hg.sr.ht/~ged/ruby-ant-wireless
|
8
|
+
|
9
|
+
docs
|
10
|
+
: https://deveiate.org/code/ant-wireless
|
11
|
+
|
12
|
+
|
13
|
+
## Description
|
14
|
+
|
15
|
+
A binding for the [ANT ultra-low power wireless protocol][ant] via the
|
16
|
+
[Garmin USB ANT Stick][antstick]. ANT can be used to send information
|
17
|
+
wirelessly from one device to another device, in a robust and flexible
|
18
|
+
manner.
|
19
|
+
|
20
|
+
|
21
|
+
## Prerequisites
|
22
|
+
|
23
|
+
* Ruby
|
24
|
+
* Garmin USB ANT Stick (https://buy.garmin.com/en-US/US/p/10997/pn/010-01058-00)
|
25
|
+
|
26
|
+
|
27
|
+
## Installation
|
28
|
+
|
29
|
+
$ gem install ant-wireless
|
30
|
+
|
31
|
+
|
32
|
+
## Development
|
33
|
+
|
34
|
+
You can check out the current source with Git via Gitlab:
|
35
|
+
|
36
|
+
$ hg clone https://hg.sr.ht/~ged/ruby-ant-wireless ant-wireless
|
37
|
+
$ cd ant-wireless
|
38
|
+
|
39
|
+
After checking out the source, run:
|
40
|
+
|
41
|
+
$ gem install -Ng
|
42
|
+
$ rake setup
|
43
|
+
|
44
|
+
This task will install dependencies, and do any other necessary setup for development.
|
45
|
+
|
46
|
+
|
47
|
+
## Authors
|
48
|
+
|
49
|
+
- Michael Granger <ged@FaerieMUD.org>
|
50
|
+
- Mahlon E. Smith <mahlon@martini.nu>
|
51
|
+
|
52
|
+
|
53
|
+
## License
|
54
|
+
|
55
|
+
Copyright (c) 2021, Ravn Group
|
56
|
+
|
57
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
58
|
+
a copy of this software and associated documentation files (the
|
59
|
+
"Software"), to deal in the Software without restriction, including
|
60
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
61
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
62
|
+
permit persons to whom the Software is furnished to do so, subject to
|
63
|
+
the following conditions:
|
64
|
+
|
65
|
+
The above copyright notice and this permission notice shall be
|
66
|
+
included in all copies or substantial portions of the Software.
|
67
|
+
|
68
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
69
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
70
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
71
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
72
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
73
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
74
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
75
|
+
|
76
|
+
|
77
|
+
[ant]: https://www.thisisant.com/
|
78
|
+
[antstick]: https://buy.garmin.com/en-US/US/p/10997/pn/010-01058-00
|
79
|
+
|
@@ -0,0 +1,791 @@
|
|
1
|
+
/*
|
2
|
+
* ant_ext.c - Ruby binding for ANT communications
|
3
|
+
* $Id$
|
4
|
+
*
|
5
|
+
* Authors:
|
6
|
+
* * Michael Granger <ged@FaerieMUD.org>
|
7
|
+
*
|
8
|
+
*/
|
9
|
+
|
10
|
+
#include "ant_ext.h"
|
11
|
+
|
12
|
+
VALUE rant_mAnt;
|
13
|
+
|
14
|
+
static ID response_callback_ivar;
|
15
|
+
|
16
|
+
|
17
|
+
/* --------------------------------------------------------------
|
18
|
+
* Logging Functions
|
19
|
+
* -------------------------------------------------------------- */
|
20
|
+
|
21
|
+
/*
|
22
|
+
* Log a message to the given +context+ object's logger.
|
23
|
+
*/
|
24
|
+
void
|
25
|
+
#ifdef HAVE_STDARG_PROTOTYPES
|
26
|
+
rant_log_obj( VALUE context, const char *level, const char *fmt, ... )
|
27
|
+
#else
|
28
|
+
rant_log_obj( VALUE context, const char *level, const char *fmt, va_dcl )
|
29
|
+
#endif
|
30
|
+
{
|
31
|
+
char buf[BUFSIZ];
|
32
|
+
va_list args;
|
33
|
+
VALUE logger = Qnil;
|
34
|
+
VALUE message = Qnil;
|
35
|
+
|
36
|
+
va_init_list( args, fmt );
|
37
|
+
vsnprintf( buf, BUFSIZ, fmt, args );
|
38
|
+
message = rb_str_new2( buf );
|
39
|
+
|
40
|
+
logger = rb_funcall( context, rb_intern("log"), 0 );
|
41
|
+
rb_funcall( logger, rb_intern(level), 1, message );
|
42
|
+
|
43
|
+
va_end( args );
|
44
|
+
}
|
45
|
+
|
46
|
+
|
47
|
+
/*
|
48
|
+
* Log a message to the global logger.
|
49
|
+
*/
|
50
|
+
void
|
51
|
+
#ifdef HAVE_STDARG_PROTOTYPES
|
52
|
+
rant_log( const char *level, const char *fmt, ... )
|
53
|
+
#else
|
54
|
+
rant_log( const char *level, const char *fmt, va_dcl )
|
55
|
+
#endif
|
56
|
+
{
|
57
|
+
char buf[BUFSIZ];
|
58
|
+
va_list args;
|
59
|
+
VALUE logger = Qnil;
|
60
|
+
VALUE message = Qnil;
|
61
|
+
|
62
|
+
va_init_list( args, fmt );
|
63
|
+
vsnprintf( buf, BUFSIZ, fmt, args );
|
64
|
+
message = rb_str_new2( buf );
|
65
|
+
|
66
|
+
logger = rb_funcall( rant_mAnt, rb_intern("logger"), 0 );
|
67
|
+
rb_funcall( logger, rb_intern(level), 1, message );
|
68
|
+
|
69
|
+
va_end( args );
|
70
|
+
}
|
71
|
+
|
72
|
+
|
73
|
+
/* --------------------------------------------------------------
|
74
|
+
* Utility functions
|
75
|
+
* -------------------------------------------------------------- */
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
/* --------------------------------------------------------------
|
80
|
+
* Module methods
|
81
|
+
* -------------------------------------------------------------- */
|
82
|
+
|
83
|
+
/*
|
84
|
+
* call-seq:
|
85
|
+
* Ant.lib_version -> int
|
86
|
+
*
|
87
|
+
* Return the version of the underlying libant.
|
88
|
+
*
|
89
|
+
*/
|
90
|
+
static VALUE
|
91
|
+
rant_s_lib_version( VALUE _module )
|
92
|
+
{
|
93
|
+
const char *version = ANT_LibVersion();
|
94
|
+
|
95
|
+
return rb_str_new_cstr( version );
|
96
|
+
}
|
97
|
+
|
98
|
+
|
99
|
+
/*
|
100
|
+
* call-seq:
|
101
|
+
* Ant.device_usb_info( device_num ) -> [ product_string, serial_string ]
|
102
|
+
*
|
103
|
+
* Get the product and serial info of the USB device +device_num+.
|
104
|
+
*
|
105
|
+
*/
|
106
|
+
static VALUE
|
107
|
+
rant_s_device_usb_info( VALUE _module, VALUE device_num )
|
108
|
+
{
|
109
|
+
const unsigned short deviceNum = NUM2SHORT( device_num );
|
110
|
+
unsigned char product_string[256];
|
111
|
+
unsigned char serial_string[256];
|
112
|
+
VALUE rval = rb_ary_new2( 2 );
|
113
|
+
|
114
|
+
if ( !ANT_GetDeviceUSBInfo( (unsigned char)deviceNum, product_string, serial_string ) ) {
|
115
|
+
return Qnil;
|
116
|
+
}
|
117
|
+
|
118
|
+
rant_log_obj( _module, "debug", "Got product string = %s, serial string = %s", product_string, serial_string );
|
119
|
+
rb_ary_push( rval, rb_str_new_cstr((const char *)product_string) );
|
120
|
+
rb_ary_push( rval, rb_str_new_cstr((const char *)serial_string) );
|
121
|
+
|
122
|
+
return rval;
|
123
|
+
}
|
124
|
+
|
125
|
+
|
126
|
+
/*
|
127
|
+
* call-seq:
|
128
|
+
* Ant.device_usb_pid -> integer
|
129
|
+
*
|
130
|
+
* Returns the +pid+ of the USB device.
|
131
|
+
*
|
132
|
+
*/
|
133
|
+
static VALUE
|
134
|
+
rant_s_device_usb_pid( VALUE _module )
|
135
|
+
{
|
136
|
+
unsigned short pid;
|
137
|
+
|
138
|
+
if ( !ANT_GetDeviceUSBPID(&pid) ) {
|
139
|
+
rb_sys_fail( "Fetching the USB PID." );
|
140
|
+
}
|
141
|
+
|
142
|
+
return INT2FIX( pid );
|
143
|
+
}
|
144
|
+
|
145
|
+
|
146
|
+
/*
|
147
|
+
* call-seq:
|
148
|
+
* Ant.device_usb_vid -> integer
|
149
|
+
*
|
150
|
+
* Returns the +vid+ of the USB device.
|
151
|
+
*
|
152
|
+
*/
|
153
|
+
static VALUE
|
154
|
+
rant_s_device_usb_vid( VALUE _module )
|
155
|
+
{
|
156
|
+
unsigned short vid;
|
157
|
+
|
158
|
+
if ( !ANT_GetDeviceUSBVID(&vid) ) {
|
159
|
+
rb_sys_fail( "Fetching the USB VID." );
|
160
|
+
}
|
161
|
+
|
162
|
+
return INT2FIX( vid );
|
163
|
+
}
|
164
|
+
|
165
|
+
|
166
|
+
/*
|
167
|
+
* call-seq:
|
168
|
+
* Ant.device_serial_number -> integer
|
169
|
+
*
|
170
|
+
* Returns the serial number of the ANT device; not implemented on all devices.
|
171
|
+
*
|
172
|
+
*/
|
173
|
+
static VALUE
|
174
|
+
rant_s_device_serial_number( VALUE _module )
|
175
|
+
{
|
176
|
+
#ifdef HAVE_ANT_GETDEVICESERIALNUMBER
|
177
|
+
const unsigned long serial = ANT_GetDeviceSerialNumber();
|
178
|
+
return LONG2FIX( serial );
|
179
|
+
#else
|
180
|
+
rb_notimplement();
|
181
|
+
#endif
|
182
|
+
}
|
183
|
+
|
184
|
+
|
185
|
+
|
186
|
+
/*
|
187
|
+
* call-seq:
|
188
|
+
* Ant.init( device_num=0, baud_rate=57600 ) -> true
|
189
|
+
*
|
190
|
+
* Initialize the ANT library and connect to the ANT module. The +device_num+ is
|
191
|
+
* the USB device number of the module to connect to, defaulting to 0. Modules
|
192
|
+
* connected to a PC will be assigned USB device numbers starting from 0. N is
|
193
|
+
* the number of USB ANT devices that are connected. The +baud_rate+ is the
|
194
|
+
* asynchronous baud rate used to connect to the ANT controller. See specific
|
195
|
+
* ANT controllers for allowable baud rates.
|
196
|
+
*
|
197
|
+
*/
|
198
|
+
static VALUE
|
199
|
+
rant_s_init( int argc, VALUE *argv, VALUE _module )
|
200
|
+
{
|
201
|
+
VALUE device_num = Qnil, baud_rate = Qnil;
|
202
|
+
unsigned char ucUSBDeviceNum;
|
203
|
+
unsigned int ulBaudrate;
|
204
|
+
|
205
|
+
rb_scan_args( argc, argv, "02", &device_num, &baud_rate );
|
206
|
+
|
207
|
+
if ( RTEST(device_num) ) {
|
208
|
+
ucUSBDeviceNum = NUM2CHR( device_num );
|
209
|
+
} else {
|
210
|
+
ucUSBDeviceNum = 0;
|
211
|
+
}
|
212
|
+
|
213
|
+
if ( RTEST(baud_rate) ) {
|
214
|
+
ulBaudrate = NUM2UINT( baud_rate );
|
215
|
+
} else {
|
216
|
+
ulBaudrate = DEFAULT_BAUDRATE;
|
217
|
+
}
|
218
|
+
|
219
|
+
rant_log_obj( rant_mAnt, "info", "Initializing ANT device %d at %d baud", ucUSBDeviceNum, ulBaudrate );
|
220
|
+
if ( !ANT_Init(ucUSBDeviceNum, ulBaudrate) ) {
|
221
|
+
rb_raise( rb_eRuntimeError, "Initializing the ANT library (no ANT device present?)." );
|
222
|
+
}
|
223
|
+
|
224
|
+
return Qtrue;
|
225
|
+
}
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
/*
|
230
|
+
* call-seq:
|
231
|
+
* Ant.close
|
232
|
+
*
|
233
|
+
* Close the USB connection to the ANT module.
|
234
|
+
*
|
235
|
+
*/
|
236
|
+
static VALUE
|
237
|
+
rant_s_close( VALUE _module )
|
238
|
+
{
|
239
|
+
ANT_Close();
|
240
|
+
|
241
|
+
rant_channel_clear_registry();
|
242
|
+
|
243
|
+
return Qtrue;
|
244
|
+
}
|
245
|
+
|
246
|
+
|
247
|
+
/*
|
248
|
+
* call-seq:
|
249
|
+
* Ant.reset
|
250
|
+
*
|
251
|
+
* Reset the system and put it in a known, low-power state. Execution of this
|
252
|
+
* command terminates all channels. All information previously configured in the
|
253
|
+
* system can no longer be considered valid.
|
254
|
+
*
|
255
|
+
*/
|
256
|
+
static VALUE
|
257
|
+
rant_s_reset( VALUE _module )
|
258
|
+
{
|
259
|
+
const struct timeval wait_time = {
|
260
|
+
.tv_sec = 0,
|
261
|
+
.tv_usec = 500,
|
262
|
+
};
|
263
|
+
ANT_ResetSystem();
|
264
|
+
|
265
|
+
rant_channel_clear_registry();
|
266
|
+
|
267
|
+
// After a Reset System command has been issued, the application should wait
|
268
|
+
// 500ms to ensure that ANT is in the proper, “after-reset” state before any
|
269
|
+
// further commands are issued from the host.
|
270
|
+
rb_thread_wait_for( wait_time );
|
271
|
+
|
272
|
+
return Qtrue;
|
273
|
+
}
|
274
|
+
|
275
|
+
|
276
|
+
/*
|
277
|
+
* call-seq:
|
278
|
+
* Ant.set_network_key( network_num, network_key )
|
279
|
+
*
|
280
|
+
* Configures a network address for use by one of the available network numbers.
|
281
|
+
*
|
282
|
+
*/
|
283
|
+
static VALUE
|
284
|
+
rant_s_set_network_key( VALUE _module, VALUE network_number, VALUE key )
|
285
|
+
{
|
286
|
+
const unsigned short ucNetNumber = NUM2USHORT( network_number );
|
287
|
+
const char *pucKey = StringValuePtr( key );
|
288
|
+
|
289
|
+
if ( RSTRING_LEN(key) != 8 ) {
|
290
|
+
rb_raise( rb_eArgError, "expected an 8-byte key" );
|
291
|
+
}
|
292
|
+
|
293
|
+
if ( !ANT_SetNetworkKey(ucNetNumber, (unsigned char *)pucKey) ) {
|
294
|
+
rb_raise( rb_eRuntimeError, "could not set the network key." );
|
295
|
+
}
|
296
|
+
|
297
|
+
return Qtrue;
|
298
|
+
}
|
299
|
+
|
300
|
+
|
301
|
+
/*
|
302
|
+
* call-seq:
|
303
|
+
* Ant.assign_channel( channel, channel_type, network_number=0, extended_options=0x0, timeout=0 ) -> channel
|
304
|
+
*
|
305
|
+
* Assign a channel and return an Ant::Channel object for it. Channel assignment
|
306
|
+
* reserves a channel number and assigns the type and network number to the
|
307
|
+
* channel. The optional extended assignment byte allows for the following
|
308
|
+
* features to be enabled:
|
309
|
+
*
|
310
|
+
* +EXT_PARAM_FREQUENCY_AGILITY+:: enable frequency agility
|
311
|
+
* +EXT_PARAM_BACKGROUND_SCANNING+:: enable background scanning
|
312
|
+
* +EXT_PARAM_FAST_CHANNEL_INIT+:: enable fast channel initiation
|
313
|
+
* +EXT_PARAM_ASYNC_TRANSMIT+:: enable asynchronous transmission
|
314
|
+
*
|
315
|
+
*/
|
316
|
+
static VALUE
|
317
|
+
rant_s_assign_channel( int argc, VALUE *argv, VALUE _module )
|
318
|
+
{
|
319
|
+
unsigned char ucChannel,
|
320
|
+
ucChannelType,
|
321
|
+
ucNetworkNumber = 0,
|
322
|
+
ucExtend = 0,
|
323
|
+
ulResponseTime = 0;
|
324
|
+
VALUE channel,
|
325
|
+
channel_type,
|
326
|
+
network_number,
|
327
|
+
extended_options,
|
328
|
+
timeout;
|
329
|
+
VALUE args[4];
|
330
|
+
|
331
|
+
rb_scan_args( argc, argv, "23", &channel, &channel_type, &network_number, &extended_options, &timeout );
|
332
|
+
|
333
|
+
ucChannel = NUM2CHR( channel );
|
334
|
+
ucChannelType = NUM2CHR( channel_type );
|
335
|
+
|
336
|
+
if ( RTEST(network_number) ) {
|
337
|
+
ucNetworkNumber = NUM2CHR( network_number );
|
338
|
+
}
|
339
|
+
if ( RTEST(extended_options) ) {
|
340
|
+
ucExtend = NUM2CHR( extended_options );
|
341
|
+
}
|
342
|
+
if ( RTEST(timeout) ) {
|
343
|
+
ulResponseTime = NUM2CHR( timeout );
|
344
|
+
}
|
345
|
+
|
346
|
+
if ( !ANT_AssignChannelExt_RTO(ucChannel, ucChannelType, ucNetworkNumber, ucExtend, ulResponseTime) ) {
|
347
|
+
rb_raise( rb_eRuntimeError, "Couldn't assign channel %d", ucChannel );
|
348
|
+
}
|
349
|
+
|
350
|
+
rant_log( "info", "Assigned channel %d (0x%02x) to network %d {0x%02x}.",
|
351
|
+
ucChannel, ucChannelType, ucNetworkNumber, ucExtend );
|
352
|
+
|
353
|
+
args[0] = channel;
|
354
|
+
args[1] = channel_type;
|
355
|
+
args[2] = network_number;
|
356
|
+
args[3] = extended_options;
|
357
|
+
|
358
|
+
return rb_class_new_instance( 4, args, rant_cAntChannel );
|
359
|
+
}
|
360
|
+
|
361
|
+
|
362
|
+
/*
|
363
|
+
* call-seq:
|
364
|
+
* Ant.use_extended_messages = true or false
|
365
|
+
*
|
366
|
+
* Enable or disable extended Rx messages. If the device supports it, when
|
367
|
+
* ANT will include the channel ID with the data message.
|
368
|
+
*
|
369
|
+
*/
|
370
|
+
static VALUE
|
371
|
+
rant_s_use_extended_messages_eq( VALUE _module, VALUE true_false )
|
372
|
+
{
|
373
|
+
// This is documented as an unsigned char and then explicitly cast
|
374
|
+
// to a signed char. So this just uses their typedef.
|
375
|
+
const BOOL ucEnable = RTEST( true_false ) ? TRUE : FALSE;
|
376
|
+
|
377
|
+
rant_log( "info", "%s extended messages.", ucEnable ? "Enabling" : "Disabling" );
|
378
|
+
ANT_RxExtMesgsEnable( ucEnable );
|
379
|
+
|
380
|
+
return Qtrue;
|
381
|
+
}
|
382
|
+
|
383
|
+
|
384
|
+
// Buffer for response data.
|
385
|
+
// static UCHAR pucResponseBuffer[ MESG_RESPONSE_EVENT_SIZE ];
|
386
|
+
static UCHAR pucResponseBuffer[ MESG_MAX_SIZE_VALUE ];
|
387
|
+
|
388
|
+
struct on_response_call {
|
389
|
+
UCHAR ucChannel;
|
390
|
+
UCHAR ucResponseMessageId;
|
391
|
+
};
|
392
|
+
|
393
|
+
|
394
|
+
/*
|
395
|
+
* Handle the response callback -- Ruby side.
|
396
|
+
*/
|
397
|
+
static VALUE
|
398
|
+
rant_call_response_callback( VALUE callPtr )
|
399
|
+
{
|
400
|
+
struct on_response_call *call = (struct on_response_call *)callPtr;
|
401
|
+
VALUE rb_callback = rb_ivar_get( rant_mAnt, response_callback_ivar );
|
402
|
+
VALUE rval = Qnil;
|
403
|
+
|
404
|
+
if ( RTEST(rb_callback) ) {
|
405
|
+
VALUE args[3];
|
406
|
+
|
407
|
+
args[0] = INT2FIX( call->ucChannel );
|
408
|
+
args[1] = INT2FIX( call->ucResponseMessageId );
|
409
|
+
args[2] = rb_enc_str_new( (char *)pucResponseBuffer, MESG_MAX_SIZE_VALUE, rb_ascii8bit_encoding() );
|
410
|
+
|
411
|
+
rval = rb_funcallv_public( rb_callback, rb_intern("call"), 3, args );
|
412
|
+
}
|
413
|
+
|
414
|
+
return rval;
|
415
|
+
}
|
416
|
+
|
417
|
+
|
418
|
+
/*
|
419
|
+
* Response callback -- call the registered Ruby callback, if one is set.
|
420
|
+
*/
|
421
|
+
static BOOL
|
422
|
+
rant_on_response_callback( UCHAR ucChannel, UCHAR ucResponseMesgID )
|
423
|
+
{
|
424
|
+
rant_callback_t callback;
|
425
|
+
struct on_response_call call;
|
426
|
+
|
427
|
+
call.ucChannel = ucChannel;
|
428
|
+
call.ucResponseMessageId = ucResponseMesgID;
|
429
|
+
|
430
|
+
callback.data = &call;
|
431
|
+
callback.fn = rant_call_response_callback;
|
432
|
+
|
433
|
+
return rant_callback( &callback );
|
434
|
+
}
|
435
|
+
|
436
|
+
|
437
|
+
/*
|
438
|
+
* call-seq:
|
439
|
+
* Ant.on_response {|channel, response_msg_id| ... }
|
440
|
+
*
|
441
|
+
* Sets the response callback. The callback is called whenever a response
|
442
|
+
* message is received from ANT. See #set_response_handlers for a set of default
|
443
|
+
* handlers.
|
444
|
+
*
|
445
|
+
*/
|
446
|
+
static VALUE
|
447
|
+
rant_s_on_response( int argc, VALUE *argv, VALUE module )
|
448
|
+
{
|
449
|
+
VALUE callback = Qnil;
|
450
|
+
|
451
|
+
rb_scan_args( argc, argv, "0&", &callback );
|
452
|
+
|
453
|
+
if ( !RTEST(callback) ) {
|
454
|
+
rb_raise( rb_eLocalJumpError, "block required, but not given" );
|
455
|
+
}
|
456
|
+
|
457
|
+
rant_log( "debug", "Callback is: %s", RSTRING_PTR(rb_inspect(callback)) );
|
458
|
+
rb_ivar_set( module, response_callback_ivar, callback );
|
459
|
+
|
460
|
+
ANT_AssignResponseFunction( rant_on_response_callback, pucResponseBuffer );
|
461
|
+
|
462
|
+
return Qtrue;
|
463
|
+
}
|
464
|
+
|
465
|
+
|
466
|
+
|
467
|
+
/*
|
468
|
+
* call-seq:
|
469
|
+
* Ant.log_directory = "path/to/log/dir"
|
470
|
+
*
|
471
|
+
* Write debugging logs to the specified directory, which should already exist.
|
472
|
+
*
|
473
|
+
*/
|
474
|
+
static VALUE
|
475
|
+
rant_s_log_directory_eq( VALUE _module, VALUE directory )
|
476
|
+
{
|
477
|
+
const char *directory_s = StringValueCStr( directory );
|
478
|
+
bool rval = ANT_SetDebugLogDirectory( (char *)directory_s );
|
479
|
+
|
480
|
+
return rval ? Qtrue : Qfalse;
|
481
|
+
}
|
482
|
+
|
483
|
+
|
484
|
+
/*
|
485
|
+
* Ant extension init function
|
486
|
+
*/
|
487
|
+
void
|
488
|
+
Init_ant_ext()
|
489
|
+
{
|
490
|
+
/*
|
491
|
+
* Document-module: Ant
|
492
|
+
*
|
493
|
+
* This is an extension for using the ANT ultra-low power wireless protocol via
|
494
|
+
* the Garmin USB ANT Stick. ANT can be used to send information
|
495
|
+
* wirelessly from one device to another device, in a robust and flexible
|
496
|
+
* manner.
|
497
|
+
*
|
498
|
+
*/
|
499
|
+
rant_mAnt = rb_define_module( "Ant" );
|
500
|
+
|
501
|
+
response_callback_ivar = rb_intern( "@response_callback" );
|
502
|
+
|
503
|
+
rb_define_singleton_method( rant_mAnt, "lib_version", rant_s_lib_version, 0 );
|
504
|
+
|
505
|
+
rb_define_singleton_method( rant_mAnt, "device_usb_info", rant_s_device_usb_info, 1 );
|
506
|
+
rb_define_singleton_method( rant_mAnt, "device_usb_pid", rant_s_device_usb_pid, 0 );
|
507
|
+
rb_define_singleton_method( rant_mAnt, "device_usb_vid", rant_s_device_usb_vid, 0 );
|
508
|
+
rb_define_singleton_method( rant_mAnt, "device_serial_number", rant_s_device_serial_number, 0 );
|
509
|
+
|
510
|
+
rb_define_singleton_method( rant_mAnt, "init", rant_s_init, -1 );
|
511
|
+
// rb_define_singleton_method( rant_mAnt, "init_ext", rant_s_init_ext, 4 );
|
512
|
+
rb_define_singleton_method( rant_mAnt, "close", rant_s_close, 0 );
|
513
|
+
rb_define_singleton_method( rant_mAnt, "reset", rant_s_reset, 0 );
|
514
|
+
|
515
|
+
rb_define_singleton_method( rant_mAnt, "set_network_key", rant_s_set_network_key, 2 );
|
516
|
+
rb_define_singleton_method( rant_mAnt, "assign_channel", rant_s_assign_channel, -1 );
|
517
|
+
|
518
|
+
rb_define_singleton_method( rant_mAnt, "use_extended_messages=",
|
519
|
+
rant_s_use_extended_messages_eq, 1 );
|
520
|
+
|
521
|
+
rb_define_singleton_method( rant_mAnt, "on_response", rant_s_on_response, -1 );
|
522
|
+
// EXPORT void ANT_UnassignAllResponseFunctions(); //Unassigns all response functions
|
523
|
+
|
524
|
+
|
525
|
+
rb_define_singleton_method( rant_mAnt, "log_directory=", rant_s_log_directory_eq, 1 );
|
526
|
+
|
527
|
+
|
528
|
+
// Constants
|
529
|
+
#define EXPOSE_CONST( name ) \
|
530
|
+
rb_define_const( rant_mAnt, #name, INT2FIX( (name) ) )
|
531
|
+
|
532
|
+
EXPOSE_CONST( PORT_TYPE_USB );
|
533
|
+
EXPOSE_CONST( PORT_TYPE_COM );
|
534
|
+
|
535
|
+
EXPOSE_CONST( ANT_STANDARD_DATA_PAYLOAD_SIZE );
|
536
|
+
EXPOSE_CONST( ANT_EXT_MESG_DEVICE_ID_FIELD_SIZE );
|
537
|
+
EXPOSE_CONST( ANT_EXT_STRING_SIZE );
|
538
|
+
EXPOSE_CONST( ANT_EXT_MESG_BITFIELD_DEVICE_ID );
|
539
|
+
EXPOSE_CONST( ANT_EXT_MESG_BIFIELD_EXTENSION );
|
540
|
+
EXPOSE_CONST( ANT_EXT_MESG_BITFIELD_OVERWRITE_SHARED_ADR );
|
541
|
+
EXPOSE_CONST( ANT_EXT_MESG_BITFIELD_TRANSMISSION_TYPE );
|
542
|
+
|
543
|
+
EXPOSE_CONST( ANT_LIB_CONFIG_MASK_ALL );
|
544
|
+
EXPOSE_CONST( ANT_LIB_CONFIG_RADIO_CONFIG_ALWAYS );
|
545
|
+
EXPOSE_CONST( ANT_LIB_CONFIG_MESG_OUT_INC_TIME_STAMP );
|
546
|
+
EXPOSE_CONST( ANT_LIB_CONFIG_MESG_OUT_INC_RSSI );
|
547
|
+
EXPOSE_CONST( ANT_LIB_CONFIG_MESG_OUT_INC_DEVICE_ID );
|
548
|
+
|
549
|
+
EXPOSE_CONST( ANT_ID_SIZE );
|
550
|
+
EXPOSE_CONST( ANT_ID_TRANS_TYPE_OFFSET );
|
551
|
+
EXPOSE_CONST( ANT_ID_DEVICE_TYPE_OFFSET );
|
552
|
+
EXPOSE_CONST( ANT_ID_DEVICE_NUMBER_HIGH_OFFSET );
|
553
|
+
EXPOSE_CONST( ANT_ID_DEVICE_NUMBER_LOW_OFFSET );
|
554
|
+
EXPOSE_CONST( ANT_ID_DEVICE_TYPE_PAIRING_FLAG );
|
555
|
+
|
556
|
+
EXPOSE_CONST( ANT_TRANS_TYPE_SHARED_ADDR_MASK );
|
557
|
+
EXPOSE_CONST( ANT_TRANS_TYPE_1_BYTE_SHARED_ADDRESS );
|
558
|
+
EXPOSE_CONST( ANT_TRANS_TYPE_2_BYTE_SHARED_ADDRESS );
|
559
|
+
|
560
|
+
EXPOSE_CONST( PARAMETER_RX_NOT_TX );
|
561
|
+
EXPOSE_CONST( PARAMETER_TX_NOT_RX );
|
562
|
+
EXPOSE_CONST( PARAMETER_SHARED_CHANNEL );
|
563
|
+
EXPOSE_CONST( PARAMETER_NO_TX_GUARD_BAND );
|
564
|
+
EXPOSE_CONST( PARAMETER_ALWAYS_RX_WILD_CARD_SEARCH_ID );
|
565
|
+
EXPOSE_CONST( PARAMETER_RX_ONLY );
|
566
|
+
|
567
|
+
EXPOSE_CONST( EXT_PARAM_ALWAYS_SEARCH );
|
568
|
+
EXPOSE_CONST( EXT_PARAM_FREQUENCY_AGILITY );
|
569
|
+
|
570
|
+
// Set up some aliases and values not in ant.h
|
571
|
+
rb_define_const( rant_mAnt, "EXT_PARAM_BACKGROUND_SCANNING", INT2FIX(EXT_PARAM_ALWAYS_SEARCH) );
|
572
|
+
rb_define_const( rant_mAnt, "EXT_PARAM_FAST_CHANNEL_INIT", INT2FIX(0x10) );
|
573
|
+
rb_define_const( rant_mAnt, "EXT_PARAM_ASYNC_TRANSMIT", INT2FIX(0x20) );
|
574
|
+
|
575
|
+
EXPOSE_CONST( RADIO_TX_POWER_LVL_MASK );
|
576
|
+
|
577
|
+
EXPOSE_CONST( RADIO_TX_POWER_LVL_0 );
|
578
|
+
EXPOSE_CONST( RADIO_TX_POWER_LVL_1 );
|
579
|
+
EXPOSE_CONST( RADIO_TX_POWER_LVL_2 );
|
580
|
+
EXPOSE_CONST( RADIO_TX_POWER_LVL_3 );
|
581
|
+
|
582
|
+
EXPOSE_CONST( STATUS_CHANNEL_STATE_MASK );
|
583
|
+
EXPOSE_CONST( STATUS_UNASSIGNED_CHANNEL );
|
584
|
+
EXPOSE_CONST( STATUS_ASSIGNED_CHANNEL );
|
585
|
+
EXPOSE_CONST( STATUS_SEARCHING_CHANNEL );
|
586
|
+
EXPOSE_CONST( STATUS_TRACKING_CHANNEL );
|
587
|
+
|
588
|
+
EXPOSE_CONST( CAPABILITIES_NO_RX_CHANNELS );
|
589
|
+
EXPOSE_CONST( CAPABILITIES_NO_TX_CHANNELS );
|
590
|
+
EXPOSE_CONST( CAPABILITIES_NO_RX_MESSAGES );
|
591
|
+
EXPOSE_CONST( CAPABILITIES_NO_TX_MESSAGES );
|
592
|
+
EXPOSE_CONST( CAPABILITIES_NO_ACKD_MESSAGES );
|
593
|
+
EXPOSE_CONST( CAPABILITIES_NO_BURST_TRANSFER );
|
594
|
+
|
595
|
+
EXPOSE_CONST( CAPABILITIES_OVERUN_UNDERRUN );
|
596
|
+
EXPOSE_CONST( CAPABILITIES_NETWORK_ENABLED );
|
597
|
+
EXPOSE_CONST( CAPABILITIES_AP1_VERSION_2 );
|
598
|
+
EXPOSE_CONST( CAPABILITIES_SERIAL_NUMBER_ENABLED );
|
599
|
+
EXPOSE_CONST( CAPABILITIES_PER_CHANNEL_TX_POWER_ENABLED );
|
600
|
+
EXPOSE_CONST( CAPABILITIES_LOW_PRIORITY_SEARCH_ENABLED );
|
601
|
+
EXPOSE_CONST( CAPABILITIES_SCRIPT_ENABLED );
|
602
|
+
EXPOSE_CONST( CAPABILITIES_SEARCH_LIST_ENABLED );
|
603
|
+
|
604
|
+
EXPOSE_CONST( CAPABILITIES_LED_ENABLED );
|
605
|
+
EXPOSE_CONST( CAPABILITIES_EXT_MESSAGE_ENABLED );
|
606
|
+
EXPOSE_CONST( CAPABILITIES_SCAN_MODE_ENABLED );
|
607
|
+
EXPOSE_CONST( CAPABILITIES_RESERVED );
|
608
|
+
EXPOSE_CONST( CAPABILITIES_PROX_SEARCH_ENABLED );
|
609
|
+
EXPOSE_CONST( CAPABILITIES_EXT_ASSIGN_ENABLED );
|
610
|
+
EXPOSE_CONST( CAPABILITIES_FS_ANTFS_ENABLED );
|
611
|
+
EXPOSE_CONST( CAPABILITIES_FIT1_ENABLED );
|
612
|
+
|
613
|
+
EXPOSE_CONST( CAPABILITIES_ADVANCED_BURST_ENABLED );
|
614
|
+
EXPOSE_CONST( CAPABILITIES_EVENT_BUFFERING_ENABLED );
|
615
|
+
EXPOSE_CONST( CAPABILITIES_EVENT_FILTERING_ENABLED );
|
616
|
+
EXPOSE_CONST( CAPABILITIES_HIGH_DUTY_SEARCH_MODE_ENABLED );
|
617
|
+
EXPOSE_CONST( CAPABILITIES_ACTIVE_SEARCH_SHARING_MODE_ENABLED );
|
618
|
+
EXPOSE_CONST( CAPABILITIES_SELECTIVE_DATA_UPDATE_ENABLED );
|
619
|
+
EXPOSE_CONST( CAPABILITIES_ENCRYPTED_CHANNEL_ENABLED );
|
620
|
+
|
621
|
+
EXPOSE_CONST( CHANNEL_NUMBER_MASK );
|
622
|
+
EXPOSE_CONST( SEQUENCE_NUMBER_MASK );
|
623
|
+
EXPOSE_CONST( SEQUENCE_NUMBER_ROLLOVER );
|
624
|
+
EXPOSE_CONST( SEQUENCE_FIRST_MESSAGE );
|
625
|
+
EXPOSE_CONST( SEQUENCE_LAST_MESSAGE );
|
626
|
+
EXPOSE_CONST( SEQUENCE_NUMBER_INC );
|
627
|
+
|
628
|
+
EXPOSE_CONST( ADV_BURST_CONFIG_FREQ_HOP );
|
629
|
+
|
630
|
+
EXPOSE_CONST( MSG_EXT_ID_MASK );
|
631
|
+
|
632
|
+
EXPOSE_CONST( BROADCAST_CONTROL_BYTE );
|
633
|
+
EXPOSE_CONST( ACKNOWLEDGED_CONTROL_BYTE );
|
634
|
+
|
635
|
+
EXPOSE_CONST( RESPONSE_NO_ERROR );
|
636
|
+
EXPOSE_CONST( NO_EVENT );
|
637
|
+
|
638
|
+
EXPOSE_CONST( EVENT_RX_SEARCH_TIMEOUT );
|
639
|
+
EXPOSE_CONST( EVENT_RX_FAIL );
|
640
|
+
EXPOSE_CONST( EVENT_TX );
|
641
|
+
EXPOSE_CONST( EVENT_TRANSFER_RX_FAILED );
|
642
|
+
EXPOSE_CONST( EVENT_TRANSFER_TX_COMPLETED );
|
643
|
+
EXPOSE_CONST( EVENT_TRANSFER_TX_FAILED );
|
644
|
+
EXPOSE_CONST( EVENT_CHANNEL_CLOSED );
|
645
|
+
EXPOSE_CONST( EVENT_RX_FAIL_GO_TO_SEARCH );
|
646
|
+
EXPOSE_CONST( EVENT_CHANNEL_COLLISION );
|
647
|
+
EXPOSE_CONST( EVENT_TRANSFER_TX_START );
|
648
|
+
|
649
|
+
EXPOSE_CONST( EVENT_CHANNEL_ACTIVE );
|
650
|
+
|
651
|
+
EXPOSE_CONST( EVENT_TRANSFER_TX_NEXT_MESSAGE );
|
652
|
+
|
653
|
+
EXPOSE_CONST( CHANNEL_IN_WRONG_STATE );
|
654
|
+
EXPOSE_CONST( CHANNEL_NOT_OPENED );
|
655
|
+
EXPOSE_CONST( CHANNEL_ID_NOT_SET );
|
656
|
+
EXPOSE_CONST( CLOSE_ALL_CHANNELS );
|
657
|
+
|
658
|
+
EXPOSE_CONST( TRANSFER_IN_PROGRESS );
|
659
|
+
EXPOSE_CONST( TRANSFER_SEQUENCE_NUMBER_ERROR );
|
660
|
+
EXPOSE_CONST( TRANSFER_IN_ERROR );
|
661
|
+
EXPOSE_CONST( TRANSFER_BUSY );
|
662
|
+
|
663
|
+
EXPOSE_CONST( INVALID_MESSAGE_CRC );
|
664
|
+
EXPOSE_CONST( MESSAGE_SIZE_EXCEEDS_LIMIT );
|
665
|
+
EXPOSE_CONST( INVALID_MESSAGE );
|
666
|
+
EXPOSE_CONST( INVALID_NETWORK_NUMBER );
|
667
|
+
EXPOSE_CONST( INVALID_LIST_ID );
|
668
|
+
EXPOSE_CONST( INVALID_SCAN_TX_CHANNEL );
|
669
|
+
EXPOSE_CONST( INVALID_PARAMETER_PROVIDED );
|
670
|
+
|
671
|
+
EXPOSE_CONST( EVENT_SERIAL_QUE_OVERFLOW );
|
672
|
+
EXPOSE_CONST( EVENT_QUE_OVERFLOW );
|
673
|
+
|
674
|
+
EXPOSE_CONST( EVENT_CLK_ERROR );
|
675
|
+
EXPOSE_CONST( EVENT_STATE_OVERRUN );
|
676
|
+
|
677
|
+
EXPOSE_CONST( EVENT_ENCRYPT_NEGOTIATION_SUCCESS );
|
678
|
+
EXPOSE_CONST( EVENT_ENCRYPT_NEGOTIATION_FAIL );
|
679
|
+
|
680
|
+
EXPOSE_CONST( SCRIPT_FULL_ERROR );
|
681
|
+
EXPOSE_CONST( SCRIPT_WRITE_ERROR );
|
682
|
+
EXPOSE_CONST( SCRIPT_INVALID_PAGE_ERROR );
|
683
|
+
EXPOSE_CONST( SCRIPT_LOCKED_ERROR );
|
684
|
+
|
685
|
+
EXPOSE_CONST( NO_RESPONSE_MESSAGE );
|
686
|
+
EXPOSE_CONST( RETURN_TO_MFG );
|
687
|
+
|
688
|
+
EXPOSE_CONST( FIT_ACTIVE_SEARCH_TIMEOUT );
|
689
|
+
EXPOSE_CONST( FIT_WATCH_PAIR );
|
690
|
+
EXPOSE_CONST( FIT_WATCH_UNPAIR );
|
691
|
+
|
692
|
+
EXPOSE_CONST( USB_STRING_WRITE_FAIL );
|
693
|
+
|
694
|
+
|
695
|
+
EXPOSE_CONST( INTERNAL_ONLY_EVENTS );
|
696
|
+
EXPOSE_CONST( EVENT_RX );
|
697
|
+
EXPOSE_CONST( EVENT_NEW_CHANNEL );
|
698
|
+
EXPOSE_CONST( EVENT_PASS_THRU );
|
699
|
+
|
700
|
+
EXPOSE_CONST( EVENT_BLOCKED );
|
701
|
+
|
702
|
+
EXPOSE_CONST( SCRIPT_CMD_FORMAT );
|
703
|
+
EXPOSE_CONST( SCRIPT_CMD_DUMP );
|
704
|
+
EXPOSE_CONST( SCRIPT_CMD_SET_DEFAULT_SECTOR );
|
705
|
+
EXPOSE_CONST( SCRIPT_CMD_END_SECTOR );
|
706
|
+
EXPOSE_CONST( SCRIPT_CMD_END_DUMP );
|
707
|
+
EXPOSE_CONST( SCRIPT_CMD_LOCK );
|
708
|
+
|
709
|
+
EXPOSE_CONST( USB_DESCRIPTOR_VID_PID );
|
710
|
+
EXPOSE_CONST( USB_DESCRIPTOR_MANUFACTURER_STRING );
|
711
|
+
EXPOSE_CONST( USB_DESCRIPTOR_DEVICE_STRING );
|
712
|
+
EXPOSE_CONST( USB_DESCRIPTOR_SERIAL_STRING );
|
713
|
+
|
714
|
+
EXPOSE_CONST( RESET_FLAGS_MASK );
|
715
|
+
EXPOSE_CONST( RESET_SUSPEND );
|
716
|
+
EXPOSE_CONST( RESET_SYNC );
|
717
|
+
EXPOSE_CONST( RESET_CMD );
|
718
|
+
EXPOSE_CONST( RESET_WDT );
|
719
|
+
EXPOSE_CONST( RESET_RST );
|
720
|
+
EXPOSE_CONST( RESET_POR );
|
721
|
+
|
722
|
+
EXPOSE_CONST( EVENT_RX_BROADCAST );
|
723
|
+
EXPOSE_CONST( EVENT_RX_ACKNOWLEDGED );
|
724
|
+
EXPOSE_CONST( EVENT_RX_BURST_PACKET );
|
725
|
+
|
726
|
+
EXPOSE_CONST( EVENT_RX_EXT_BROADCAST );
|
727
|
+
EXPOSE_CONST( EVENT_RX_EXT_ACKNOWLEDGED );
|
728
|
+
EXPOSE_CONST( EVENT_RX_EXT_BURST_PACKET );
|
729
|
+
|
730
|
+
EXPOSE_CONST( EVENT_RX_RSSI_BROADCAST );
|
731
|
+
EXPOSE_CONST( EVENT_RX_RSSI_ACKNOWLEDGED );
|
732
|
+
EXPOSE_CONST( EVENT_RX_RSSI_BURST_PACKET );
|
733
|
+
|
734
|
+
EXPOSE_CONST( EVENT_RX_FLAG_BROADCAST );
|
735
|
+
EXPOSE_CONST( EVENT_RX_FLAG_ACKNOWLEDGED );
|
736
|
+
EXPOSE_CONST( EVENT_RX_FLAG_BURST_PACKET );
|
737
|
+
|
738
|
+
EXPOSE_CONST( MESG_FS_ANTFS_EVENT_PAIR_REQUEST );
|
739
|
+
EXPOSE_CONST( MESG_FS_ANTFS_EVENT_DOWNLOAD_START );
|
740
|
+
EXPOSE_CONST( MESG_FS_ANTFS_EVENT_UPLOAD_START );
|
741
|
+
EXPOSE_CONST( MESG_FS_ANTFS_EVENT_DOWNLOAD_COMPLETE );
|
742
|
+
EXPOSE_CONST( MESG_FS_ANTFS_EVENT_UPLOAD_COMPLETE );
|
743
|
+
EXPOSE_CONST( MESG_FS_ANTFS_EVENT_ERASE_COMPLETE );
|
744
|
+
EXPOSE_CONST( MESG_FS_ANTFS_EVENT_LINK_STATE );
|
745
|
+
EXPOSE_CONST( MESG_FS_ANTFS_EVENT_AUTH_STATE );
|
746
|
+
EXPOSE_CONST( MESG_FS_ANTFS_EVENT_TRANSPORT_STATE );
|
747
|
+
EXPOSE_CONST( MESG_FS_ANTFS_EVENT_CMD_RECEIVED );
|
748
|
+
EXPOSE_CONST( MESG_FS_ANTFS_EVENT_CMD_PROCESSED );
|
749
|
+
|
750
|
+
EXPOSE_CONST( FS_NO_ERROR_RESPONSE );
|
751
|
+
EXPOSE_CONST( FS_MEMORY_UNFORMATTED_ERROR_RESPONSE );
|
752
|
+
EXPOSE_CONST( FS_MEMORY_NO_FREE_SECTORS_ERROR_RESPONSE );
|
753
|
+
EXPOSE_CONST( FS_MEMORY_READ_ERROR_RESPONSE );
|
754
|
+
EXPOSE_CONST( FS_MEMORY_WRITE_ERROR_RESPONSE );
|
755
|
+
EXPOSE_CONST( FS_MEMORY_ERASE_ERROR_RESPONSE );
|
756
|
+
EXPOSE_CONST( FS_TOO_MANY_FILES_OPEN_RESPONSE );
|
757
|
+
EXPOSE_CONST( FS_FILE_INDEX_INVALID_ERROR_RESPONSE );
|
758
|
+
EXPOSE_CONST( FS_FILE_INDEX_EXISTS_ERROR_RESPONSE );
|
759
|
+
EXPOSE_CONST( FS_AUTO_INDEX_FAILED_TRY_AGAIN_ERROR_RESPONSE );
|
760
|
+
EXPOSE_CONST( FS_FILE_ALREADY_OPEN_ERROR_RESPONSE );
|
761
|
+
EXPOSE_CONST( FS_FILE_NOT_OPEN_ERROR_RESPONSE );
|
762
|
+
EXPOSE_CONST( FS_DIR_CORRUPTED_ERROR_RESPONSE );
|
763
|
+
EXPOSE_CONST( FS_INVALID_OFFSET_ERROR_RESPONSE );
|
764
|
+
EXPOSE_CONST( FS_BAD_PERMISSIONS_ERROR_RESPONSE );
|
765
|
+
EXPOSE_CONST( FS_EOF_REACHED_ERROR_RESPONSE );
|
766
|
+
EXPOSE_CONST( FS_INVALID_FILE_HANDLE_ERROR_RESPONSE );
|
767
|
+
|
768
|
+
EXPOSE_CONST( FS_CRYPTO_OPEN_PERMISSION_ERROR_RESPONSE );
|
769
|
+
EXPOSE_CONST( FS_CRYPTO_HANDLE_ALREADY_IN_USE_RESPONSE );
|
770
|
+
EXPOSE_CONST( FS_CRYPTO_USER_KEY_NOT_SPECIFIED_RESPONSE );
|
771
|
+
EXPOSE_CONST( FS_CRYPTO_USER_KEY_ADD_ERROR_RESPONSE );
|
772
|
+
EXPOSE_CONST( FS_CRYPTO_USER_KEY_FETCH_ERROR_RESPONSE );
|
773
|
+
EXPOSE_CONST( FS_CRYPTO_IVNONE_READ_ERROR_RESPONSE );
|
774
|
+
EXPOSE_CONST( FS_CRYPTO_BLOCK_OFFSET_ERROR_RESPONSE );
|
775
|
+
EXPOSE_CONST( FS_CRYPTO_BLOCK_SIZE_ERROR_RESPONSE );
|
776
|
+
EXPOSE_CONST( FS_CRYPTO_CFG_TYPE_NOT_SUPPORTED_RESPONSE );
|
777
|
+
|
778
|
+
EXPOSE_CONST( FS_FIT_FILE_HEADER_ERROR_RESPONSE );
|
779
|
+
EXPOSE_CONST( FS_FIT_FILE_SIZE_INTEGRITY_ERROR_RESPONSE );
|
780
|
+
EXPOSE_CONST( FS_FIT_FILE_CRC_ERROR_RESPONSE );
|
781
|
+
EXPOSE_CONST( FS_FIT_FILE_CHECK_PERMISSION_ERROR_RESPONSE );
|
782
|
+
EXPOSE_CONST( FS_FIT_FILE_CHECK_FILE_TYPE_ERROR_RESPONSE );
|
783
|
+
EXPOSE_CONST( FS_FIT_FILE_OP_ABORT_ERROR_RESPONSE );
|
784
|
+
#undef EXPOSE_CONST
|
785
|
+
|
786
|
+
init_ant_channel();
|
787
|
+
init_ant_message();
|
788
|
+
|
789
|
+
rant_start_callback_thread();
|
790
|
+
}
|
791
|
+
|