ant-wireless 0.1.0.pre.20210617213631

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ # -*- ruby -*-
2
+ # frozen_string_literal: true
3
+
4
+ require 'ant' unless defined?( Ant )
5
+
6
+
7
+ class Ant::Message
8
+
9
+ end # class Ant::Message
10
+
data/lib/ant/mixins.rb ADDED
@@ -0,0 +1,34 @@
1
+ # -*- ruby -*-
2
+ # frozen_string_literal: true
3
+
4
+ require 'ant' unless defined?( Ant )
5
+
6
+
7
+ module Ant
8
+
9
+ module DataUtilities
10
+
11
+ # The range of ASCII codes to show literally in a hexdump
12
+ VISIBLES = 32..126
13
+
14
+
15
+ ###############
16
+ module_function
17
+ ###############
18
+
19
+ ### Return the given data in hexdump format.
20
+ def hexdump( data, line_size=8 )
21
+ hex_width = line_size * 5
22
+ return data.bytes.each_slice( line_size ).with_index.map do |chunk, line|
23
+ bytes = chunk.map do |b|
24
+ "0x%02x" % [ b ]
25
+ end.join( ' ' )
26
+ stripped_bytes = chunk.map {|c| VISIBLES.include?(c) ? c.chr : '.'}.join
27
+ "%04x: %*s | %*s |" % [ line, -hex_width, bytes, -line_size, stripped_bytes ]
28
+ end.join( "\n" )
29
+ end
30
+
31
+ end
32
+
33
+
34
+ end # module Ant
@@ -0,0 +1,528 @@
1
+ # -*- ruby -*-
2
+ # frozen_string_literal: true
3
+
4
+ require 'loggability'
5
+
6
+ require 'ant' unless defined?( Ant )
7
+
8
+
9
+ # A module that handles response callbacks by logging them.
10
+ module Ant::ResponseCallbacks
11
+ extend Loggability
12
+
13
+ # Loggability API -- send logs to the Ant logger
14
+ log_to :ant
15
+
16
+
17
+ # Mapping of response message IDs to handler methods
18
+ HANDLER_METHODS = {
19
+ Ant::Message::MESG_VERSION_ID => :on_version,
20
+ Ant::Message::MESG_RESPONSE_EVENT_ID => :on_response_event,
21
+
22
+ Ant::Message::MESG_UNASSIGN_CHANNEL_ID => :on_unassign_channel,
23
+ Ant::Message::MESG_ASSIGN_CHANNEL_ID => :on_assign_channel,
24
+ Ant::Message::MESG_CHANNEL_MESG_PERIOD_ID => :on_channel_mesg_period,
25
+ Ant::Message::MESG_CHANNEL_SEARCH_TIMEOUT_ID => :on_channel_search_timeout,
26
+ Ant::Message::MESG_CHANNEL_RADIO_FREQ_ID => :on_channel_radio_freq,
27
+ Ant::Message::MESG_NETWORK_KEY_ID => :on_network_key,
28
+ Ant::Message::MESG_RADIO_TX_POWER_ID => :on_radio_tx_power,
29
+ Ant::Message::MESG_RADIO_CW_MODE_ID => :on_radio_cw_mode,
30
+ Ant::Message::MESG_SYSTEM_RESET_ID => :on_system_reset,
31
+ Ant::Message::MESG_OPEN_CHANNEL_ID => :on_open_channel,
32
+ Ant::Message::MESG_CLOSE_CHANNEL_ID => :on_close_channel,
33
+ Ant::Message::MESG_REQUEST_ID => :on_request,
34
+
35
+ Ant::Message::MESG_BROADCAST_DATA_ID => :on_broadcast_data,
36
+ Ant::Message::MESG_ACKNOWLEDGED_DATA_ID => :on_acknowledged_data,
37
+ Ant::Message::MESG_BURST_DATA_ID => :on_burst_data,
38
+
39
+ Ant::Message::MESG_CHANNEL_ID_ID => :on_channel_id,
40
+ Ant::Message::MESG_CHANNEL_STATUS_ID => :on_channel_status,
41
+ Ant::Message::MESG_RADIO_CW_INIT_ID => :on_radio_cw_init,
42
+ Ant::Message::MESG_CAPABILITIES_ID => :on_capabilities,
43
+
44
+ Ant::Message::MESG_STACKLIMIT_ID => :on_stacklimit,
45
+
46
+ Ant::Message::MESG_SCRIPT_DATA_ID => :on_script_data,
47
+ Ant::Message::MESG_SCRIPT_CMD_ID => :on_script_cmd,
48
+
49
+ Ant::Message::MESG_ID_LIST_ADD_ID => :on_id_list_add,
50
+ Ant::Message::MESG_CRYPTO_ID_LIST_ADD_ID => :on_crypto_id_list_add,
51
+ Ant::Message::MESG_ID_LIST_CONFIG_ID => :on_id_list_config,
52
+ Ant::Message::MESG_CRYPTO_ID_LIST_CONFIG_ID => :on_crypto_id_list_config,
53
+ Ant::Message::MESG_OPEN_RX_SCAN_ID => :on_open_rx_scan,
54
+
55
+ Ant::Message::MESG_EXT_CHANNEL_RADIO_FREQ_ID => :on_ext_channel_radio_freq_id,
56
+ Ant::Message::MESG_EXT_BROADCAST_DATA_ID => :on_ext_broadcast_data,
57
+ Ant::Message::MESG_EXT_ACKNOWLEDGED_DATA_ID => :on_ext_acknowledged_data,
58
+ Ant::Message::MESG_EXT_BURST_DATA_ID => :on_ext_burst_data,
59
+
60
+ Ant::Message::MESG_CHANNEL_RADIO_TX_POWER_ID => :on_channel_radio_tx_power,
61
+ Ant::Message::MESG_GET_SERIAL_NUM_ID => :on_get_serial_num,
62
+ Ant::Message::MESG_GET_TEMP_CAL_ID => :on_get_temp_cal,
63
+ Ant::Message::MESG_SET_LP_SEARCH_TIMEOUT_ID => :on_set_lp_search_timeout,
64
+ Ant::Message::MESG_SET_TX_SEARCH_ON_NEXT_ID => :on_set_tx_search_on_next,
65
+ Ant::Message::MESG_SERIAL_NUM_SET_CHANNEL_ID_ID => :on_serial_num_set_channel_id,
66
+ Ant::Message::MESG_RX_EXT_MESGS_ENABLE_ID => :on_rx_ext_mesgs_enable,
67
+ Ant::Message::MESG_RADIO_CONFIG_ALWAYS_ID => :on_radio_config_always,
68
+ Ant::Message::MESG_ENABLE_LED_FLASH_ID => :on_enable_led_flash,
69
+ Ant::Message::MESG_XTAL_ENABLE_ID => :on_xtal_enable,
70
+ Ant::Message::MESG_ANTLIB_CONFIG_ID => :on_antlib_config,
71
+ Ant::Message::MESG_STARTUP_MESG_ID => :on_startup_mesg,
72
+ Ant::Message::MESG_AUTO_FREQ_CONFIG_ID => :on_auto_freq_config,
73
+ Ant::Message::MESG_PROX_SEARCH_CONFIG_ID => :on_prox_search_config,
74
+
75
+ Ant::Message::MESG_ADV_BURST_DATA_ID => :on_adv_burst_data,
76
+ Ant::Message::MESG_EVENT_BUFFERING_CONFIG_ID => :on_event_buffering_config,
77
+
78
+ Ant::Message::MESG_SET_SEARCH_CH_PRIORITY_ID => :on_set_search_ch_priority,
79
+
80
+ Ant::Message::MESG_HIGH_DUTY_SEARCH_MODE_ID => :on_high_duty_search_mode,
81
+ Ant::Message::MESG_CONFIG_ADV_BURST_ID => :on_config_adv_burst,
82
+ Ant::Message::MESG_EVENT_FILTER_CONFIG_ID => :on_event_filter_config,
83
+ Ant::Message::MESG_SDU_CONFIG_ID => :on_sdu_config,
84
+ Ant::Message::MESG_SDU_SET_MASK_ID => :on_sdu_set_mask,
85
+ Ant::Message::MESG_USER_CONFIG_PAGE_ID => :on_user_config_page,
86
+ Ant::Message::MESG_ENCRYPT_ENABLE_ID => :on_encrypt_enable,
87
+ Ant::Message::MESG_SET_CRYPTO_KEY_ID => :on_set_crypto_key,
88
+ Ant::Message::MESG_SET_CRYPTO_INFO_ID => :on_set_crypto_info,
89
+ Ant::Message::MESG_CUBE_CMD_ID => :on_cube_cmd,
90
+
91
+ Ant::Message::MESG_ACTIVE_SEARCH_SHARING_ID => :on_active_search_sharing,
92
+ Ant::Message::MESG_NVM_CRYPTO_KEY_OPS_ID => :on_nvm_crypto_key_ops,
93
+ }
94
+
95
+
96
+
97
+ ### Default callback hook -- handles response callbacks.
98
+ def handle_response_callback( channel_num, message_id, data )
99
+ handler_method = HANDLER_METHODS[ message_id ] or
100
+ raise "Unhandled response message ID %p" % [ message_id ]
101
+
102
+ if self.respond_to?( handler_method )
103
+ self.public_send( handler_method, channel_num, data )
104
+ else
105
+ Ant::ResponseCallbacks.log_response_callback( channel_num, handler_method, message_id, data )
106
+ end
107
+ end
108
+
109
+
110
+ ### Log the response event by default.
111
+ def self::log_response_callback( channel_num, handler_method, message_id, data )
112
+ self.log.debug "Response for channel %d: %#0x (%s): %s" % [
113
+ channel_num,
114
+ message_id,
115
+ handler_method,
116
+ data.bytes[ 0..3 ].map {|b| "%#02x" % b }.join( ' ' )
117
+ ]
118
+ end
119
+
120
+
121
+ #
122
+ # Handlers
123
+ #
124
+
125
+ ### Handle version number response messages.
126
+ def on_version( channel_num, data )
127
+ self.log.info "ANT Version %s" % [ data ]
128
+ end
129
+
130
+
131
+ ### Handle event response messages.
132
+ def on_response_event( channel_num, data )
133
+ response_event = data.bytes[ 1 ]
134
+ self.handle_response_callback( channel_num, response_event, data )
135
+ end
136
+
137
+
138
+ ### Handle startup response messages.
139
+ def on_startup_mesg( channel_num, data )
140
+ reason = case data.bytes[ 0 ]
141
+ when Ant::RESET_POR
142
+ "RESET_POR"
143
+ when Ant::RESET_SUSPEND
144
+ "RESET_SUSPEND "
145
+ when Ant::RESET_SYNC
146
+ "RESET_SYNC "
147
+ when Ant::RESET_CMD
148
+ "RESET_CMD "
149
+ when Ant::RESET_WDT
150
+ "RESET_WDT "
151
+ when Ant::RESET_RST
152
+ "RESET_RST "
153
+ else
154
+ "UNKNOWN REASON"
155
+ end
156
+
157
+ self.log.info "Reset complete: %s" % [ reason ]
158
+ end
159
+
160
+
161
+ ### Handle network key event response messages.
162
+ def on_network_key( channel_num, data )
163
+ self.log_response_event( channel_num, data, "setting network key", "Network key set" )
164
+ end
165
+
166
+
167
+ ### Handle channel assignment event response messages.
168
+ def on_assign_channel( channel_num, data )
169
+ self.log_response_event( channel_num, data, "assigning channel", "Channel assigned." )
170
+ end
171
+
172
+
173
+ ### Handle channel unassignment event response messages.
174
+ def on_unassign_channel
175
+ self.log_response_event( channel_num, data, "unassigning channel", "Channel unassigned." )
176
+ end
177
+
178
+
179
+ ### Handle channel ID event response messages.
180
+ def on_channel_id( channel_num, data )
181
+ self.log_response_event( channel_num, data, "setting channel ID", "Channel ID set." )
182
+ end
183
+
184
+
185
+ ### Handle redio frequency event response messages.
186
+ def on_channel_radio_freq( channel_num, data )
187
+ self.log_response_event( channel_num, data, "setting channel radio frequency",
188
+ "Channel radio frequency set." )
189
+ end
190
+
191
+
192
+ ### Handle channel open event response messages.
193
+ def on_open_channel( channel_num, data )
194
+ self.log_response_event( channel_num, data, "opening channel", "Channel opened." )
195
+ end
196
+
197
+
198
+ ### Handle channel close event response messages.
199
+ def on_close_channel( channel_num, data )
200
+ self.log_response_event( channel_num, data, "closing channel", "Channel closed." )
201
+ end
202
+
203
+
204
+ ### Log a success or an error message for a response event message.
205
+ def log_response_event( channel_num, data, err_desc, log_desc )
206
+ status = data.bytes[ 2 ]
207
+ if status.nonzero?
208
+ self.log.error "Error while %s: %#02x" % [ err_desc, status ]
209
+ else
210
+ self.log.info( log_desc )
211
+ end
212
+ end
213
+
214
+
215
+ ### Handle channel_mesg_period response events.
216
+ def on_channel_mesg_period( channel_num, data )
217
+ self.log_response_event( channel_num, data, "channel_mesg_period", "Channel period assigned." )
218
+ end
219
+
220
+
221
+ ### Handle channel_search_timeout response event.
222
+ def on_channel_search_timeout( channel_num, data )
223
+ self.log_response_event( channel_num, data, "channel_search_timeout", "Channel assigned." )
224
+ end
225
+
226
+
227
+ ### Handle radio_tx_power response event.
228
+ def on_radio_tx_power( channel_num, data )
229
+ self.log_response_event( channel_num, data, "radio_tx_power", "Channel assigned." )
230
+ end
231
+
232
+
233
+ ### Handle radio_cw_mode response event.
234
+ def on_radio_cw_mode( channel_num, data )
235
+ self.log_response_event( channel_num, data, "radio_cw_mode", "Channel assigned." )
236
+ end
237
+
238
+
239
+ ### Handle system_reset response event.
240
+ def on_system_reset( channel_num, data )
241
+ self.log_response_event( channel_num, data, "system_reset", "Channel assigned." )
242
+ end
243
+
244
+
245
+ ### Handle request response event.
246
+ def on_request( channel_num, data )
247
+ self.log_response_event( channel_num, data, "request", "Channel assigned." )
248
+ end
249
+
250
+
251
+ ### Handle broadcast_data response event.
252
+ def on_broadcast_data( channel_num, data )
253
+ self.log_response_event( channel_num, data, "broadcast_data", "Channel assigned." )
254
+ end
255
+
256
+
257
+ ### Handle acknowledged_data response event.
258
+ def on_acknowledged_data( channel_num, data )
259
+ self.log_response_event( channel_num, data, "acknowledged_data", "Channel assigned." )
260
+ end
261
+
262
+
263
+ ### Handle burst_data response event.
264
+ def on_burst_data( channel_num, data )
265
+ self.log_response_event( channel_num, data, "burst_data", "Channel assigned." )
266
+ end
267
+
268
+
269
+ ### Handle channel_status response event.
270
+ def on_channel_status( channel_num, data )
271
+ self.log_response_event( channel_num, data, "channel_status", "Channel assigned." )
272
+ end
273
+
274
+
275
+ ### Handle radio_cw_init response event.
276
+ def on_radio_cw_init( channel_num, data )
277
+ self.log_response_event( channel_num, data, "radio_cw_init", "Channel assigned." )
278
+ end
279
+
280
+
281
+ ### Handle capabilities response event.
282
+ def on_capabilities( channel_num, data )
283
+ self.log_response_event( channel_num, data, "capabilities", "Channel assigned." )
284
+ end
285
+
286
+
287
+ ### Handle stacklimit response event.
288
+ def on_stacklimit( channel_num, data )
289
+ self.log_response_event( channel_num, data, "stacklimit", "Channel assigned." )
290
+ end
291
+
292
+
293
+ ### Handle script_data response event.
294
+ def on_script_data( channel_num, data )
295
+ self.log_response_event( channel_num, data, "script_data", "Channel assigned." )
296
+ end
297
+
298
+
299
+ ### Handle script_cmd response event.
300
+ def on_script_cmd( channel_num, data )
301
+ self.log_response_event( channel_num, data, "script_cmd", "Channel assigned." )
302
+ end
303
+
304
+
305
+ ### Handle id_list_add response event.
306
+ def on_id_list_add( channel_num, data )
307
+ self.log_response_event( channel_num, data, "id_list_add", "Channel assigned." )
308
+ end
309
+
310
+
311
+ ### Handle crypto_id_list_add response event.
312
+ def on_crypto_id_list_add( channel_num, data )
313
+ self.log_response_event( channel_num, data, "crypto_id_list_add", "Channel assigned." )
314
+ end
315
+
316
+
317
+ ### Handle id_list_config response event.
318
+ def on_id_list_config( channel_num, data )
319
+ self.log_response_event( channel_num, data, "id_list_config", "Channel assigned." )
320
+ end
321
+
322
+
323
+ ### Handle crypto_id_list_config response event.
324
+ def on_crypto_id_list_config( channel_num, data )
325
+ self.log_response_event( channel_num, data, "crypto_id_list_config", "Channel assigned." )
326
+ end
327
+
328
+
329
+ ### Handle open_rx_scan response event.
330
+ def on_open_rx_scan( channel_num, data )
331
+ self.log_response_event( channel_num, data, "open_rx_scan", "Channel assigned." )
332
+ end
333
+
334
+
335
+ ### Handle ext_channel_radio_freq_id response event.
336
+ def on_ext_channel_radio_freq_id( channel_num, data )
337
+ self.log_response_event( channel_num, data, "ext_channel_radio_freq_id", "Channel assigned." )
338
+ end
339
+
340
+
341
+ ### Handle ext_broadcast_data response event.
342
+ def on_ext_broadcast_data( channel_num, data )
343
+ self.log_response_event( channel_num, data, "ext_broadcast_data", "Channel assigned." )
344
+ end
345
+
346
+
347
+ ### Handle ext_acknowledged_data response event.
348
+ def on_ext_acknowledged_data( channel_num, data )
349
+ self.log_response_event( channel_num, data, "ext_acknowledged_data", "Channel assigned." )
350
+ end
351
+
352
+
353
+ ### Handle ext_burst_data response event.
354
+ def on_ext_burst_data( channel_num, data )
355
+ self.log_response_event( channel_num, data, "ext_burst_data", "Channel assigned." )
356
+ end
357
+
358
+
359
+ ### Handle channel_radio_tx_power response event.
360
+ def on_channel_radio_tx_power( channel_num, data )
361
+ self.log_response_event( channel_num, data, "channel_radio_tx_power", "Channel assigned." )
362
+ end
363
+
364
+
365
+ ### Handle get_serial_num response event.
366
+ def on_get_serial_num( channel_num, data )
367
+ self.log_response_event( channel_num, data, "get_serial_num", "Channel assigned." )
368
+ end
369
+
370
+
371
+ ### Handle get_temp_cal response event.
372
+ def on_get_temp_cal( channel_num, data )
373
+ self.log_response_event( channel_num, data, "get_temp_cal", "Channel assigned." )
374
+ end
375
+
376
+
377
+ ### Handle set_lp_search_timeout response event.
378
+ def on_set_lp_search_timeout( channel_num, data )
379
+ self.log_response_event( channel_num, data, "set_lp_search_timeout", "Channel assigned." )
380
+ end
381
+
382
+
383
+ ### Handle set_tx_search_on_next response event.
384
+ def on_set_tx_search_on_next( channel_num, data )
385
+ self.log_response_event( channel_num, data, "set_tx_search_on_next", "Channel assigned." )
386
+ end
387
+
388
+
389
+ ### Handle serial_num_set_channel_id response event.
390
+ def on_serial_num_set_channel_id( channel_num, data )
391
+ self.log_response_event( channel_num, data, "serial_num_set_channel_id", "Channel assigned." )
392
+ end
393
+
394
+
395
+ ### Handle rx_ext_mesgs_enable response event.
396
+ def on_rx_ext_mesgs_enable( channel_num, data )
397
+ self.log_response_event( channel_num, data, "rx_ext_mesgs_enable", "Channel assigned." )
398
+ end
399
+
400
+
401
+ ### Handle radio_config_always response event.
402
+ def on_radio_config_always( channel_num, data )
403
+ self.log_response_event( channel_num, data, "radio_config_always", "Channel assigned." )
404
+ end
405
+
406
+
407
+ ### Handle enable_led_flash response event.
408
+ def on_enable_led_flash( channel_num, data )
409
+ self.log_response_event( channel_num, data, "enable_led_flash", "Channel assigned." )
410
+ end
411
+
412
+
413
+ ### Handle xtal_enable response event.
414
+ def on_xtal_enable( channel_num, data )
415
+ self.log_response_event( channel_num, data, "xtal_enable", "Channel assigned." )
416
+ end
417
+
418
+
419
+ ### Handle antlib_config response event.
420
+ def on_antlib_config( channel_num, data )
421
+ self.log_response_event( channel_num, data, "antlib_config", "Channel assigned." )
422
+ end
423
+
424
+
425
+ ### Handle auto_freq_config response event.
426
+ def on_auto_freq_config( channel_num, data )
427
+ self.log_response_event( channel_num, data, "auto_freq_config", "Channel assigned." )
428
+ end
429
+
430
+
431
+ ### Handle prox_search_config response event.
432
+ def on_prox_search_config( channel_num, data )
433
+ self.log_response_event( channel_num, data, "prox_search_config", "Channel assigned." )
434
+ end
435
+
436
+
437
+ ### Handle adv_burst_data response event.
438
+ def on_adv_burst_data( channel_num, data )
439
+ self.log_response_event( channel_num, data, "adv_burst_data", "Channel assigned." )
440
+ end
441
+
442
+
443
+ ### Handle event_buffering_config response event.
444
+ def on_event_buffering_config( channel_num, data )
445
+ self.log_response_event( channel_num, data, "event_buffering_config", "Channel assigned." )
446
+ end
447
+
448
+
449
+ ### Handle set_search_ch_priority response event.
450
+ def on_set_search_ch_priority( channel_num, data )
451
+ self.log_response_event( channel_num, data, "set_search_ch_priority", "Channel assigned." )
452
+ end
453
+
454
+
455
+ ### Handle high_duty_search_mode response event.
456
+ def on_high_duty_search_mode( channel_num, data )
457
+ self.log_response_event( channel_num, data, "high_duty_search_mode", "Channel assigned." )
458
+ end
459
+
460
+
461
+ ### Handle config_adv_burst response event.
462
+ def on_config_adv_burst( channel_num, data )
463
+ self.log_response_event( channel_num, data, "config_adv_burst", "Channel assigned." )
464
+ end
465
+
466
+
467
+ ### Handle event_filter_config response event.
468
+ def on_event_filter_config( channel_num, data )
469
+ self.log_response_event( channel_num, data, "event_filter_config", "Channel assigned." )
470
+ end
471
+
472
+
473
+ ### Handle sdu_config response event.
474
+ def on_sdu_config( channel_num, data )
475
+ self.log_response_event( channel_num, data, "sdu_config", "Channel assigned." )
476
+ end
477
+
478
+
479
+ ### Handle sdu_set_mask response event.
480
+ def on_sdu_set_mask( channel_num, data )
481
+ self.log_response_event( channel_num, data, "sdu_set_mask", "Channel assigned." )
482
+ end
483
+
484
+
485
+ ### Handle user_config_page response event.
486
+ def on_user_config_page( channel_num, data )
487
+ self.log_response_event( channel_num, data, "user_config_page", "Channel assigned." )
488
+ end
489
+
490
+
491
+ ### Handle encrypt_enable response event.
492
+ def on_encrypt_enable( channel_num, data )
493
+ self.log_response_event( channel_num, data, "encrypt_enable", "Channel assigned." )
494
+ end
495
+
496
+
497
+ ### Handle set_crypto_key response event.
498
+ def on_set_crypto_key( channel_num, data )
499
+ self.log_response_event( channel_num, data, "set_crypto_key", "Channel assigned." )
500
+ end
501
+
502
+
503
+ ### Handle set_crypto_info response event.
504
+ def on_set_crypto_info( channel_num, data )
505
+ self.log_response_event( channel_num, data, "set_crypto_info", "Channel assigned." )
506
+ end
507
+
508
+
509
+ ### Handle cube_cmd response event.
510
+ def on_cube_cmd( channel_num, data )
511
+ self.log_response_event( channel_num, data, "cube_cmd", "Channel assigned." )
512
+ end
513
+
514
+
515
+ ### Handle active_search_sharing response event.
516
+ def on_active_search_sharing( channel_num, data )
517
+ self.log_response_event( channel_num, data, "active_search_sharing", "Channel assigned." )
518
+ end
519
+
520
+
521
+ ### Handle nvm_crypto_key_ops response event.
522
+ def on_nvm_crypto_key_ops( channel_num, data )
523
+ self.log_response_event( channel_num, data, "nvm_crypto_key_ops", "Channel assigned." )
524
+ end
525
+
526
+
527
+ end # module Ant::ResponseCallbacks
528
+