ant-wireless 0.1.0.pre.20210715102740 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,8 +13,8 @@ require 'ant/mixins'
13
13
  # Refs:
14
14
  # * 9.5.6.1 Channel Response / Event (0x40) [ANT Message Protocol and Usage, Rev 5.1]
15
15
  module Ant::Channel::EventCallbacks
16
- extend Loggability
17
- include Ant::DataUtilities
16
+ extend Loggability,
17
+ Ant::DataUtilities
18
18
 
19
19
 
20
20
  # Mapping of response message IDs to handler methods
@@ -64,7 +64,7 @@ module Ant::Channel::EventCallbacks
64
64
 
65
65
  ### Default callback hook -- handles event callbacks.
66
66
  def handle_event_callback( channel_num, event_id, data )
67
- handler_method = HANDLER_METHODS[ event_id ] or
67
+ handler_method = Ant::Channel::EventCallbacks::HANDLER_METHODS[ event_id ] or
68
68
  raise "Unhandled channel event %p" % [ event_id ]
69
69
 
70
70
  if self.respond_to?( handler_method )
@@ -77,11 +77,10 @@ module Ant::Channel::EventCallbacks
77
77
 
78
78
  ### Handle an TX event.
79
79
  def on_event_tx( channel_num, data )
80
- # self.log.info "Broadcast message on channel %d was transmitted." % [ channel_num ]
81
-
82
- # data = SecureRandom.bytes( 8 )
83
- # self.log.debug "Sending our own broadcast data: %p." % [ data ]
84
- # self.send_broadcast_data( data )
80
+ channel = Ant::Channel.registry[ channel_num ]
81
+ self.log.debug "%p ready for transmission." % [ channel ]
82
+ ident = [ 1, 33 ].pack( "CC" )
83
+ channel.send_broadcast_data( ident )
85
84
  end
86
85
 
87
86
 
@@ -139,18 +138,27 @@ module Ant::Channel::EventCallbacks
139
138
  end
140
139
 
141
140
 
142
- # def on_event_rx_flag_acknowledged( channel_num, data )
143
- #
144
- # end
141
+ def on_event_rx_flag_acknowledged( channel_num, data )
142
+ flags = data.bytes[ 9 ]
143
+ if flags & Ant::ANT_EXT_MESG_BITFIELD_DEVICE_ID
144
+ usDeviceNumber = data.bytes[10] | (data.bytes[11] << 8)
145
+ ucDeviceType = data.bytes[12]
146
+ ucTransmissionType = data.bytes[13]
147
+ self.log.debug "Got an acknowledge on Chan ID(%d/%d/%d)" %
148
+ [usDeviceNumber, ucDeviceType, ucTransmissionType]
149
+ end
150
+
151
+ self.on_event_rx_acknowledged( channel_num, data )
152
+ end
153
+
145
154
 
146
- ### Handle an RX_FLAG_BURST_PACKET event.
147
155
  def on_event_rx_flag_burst_packet( channel_num, data )
148
156
  flags = data.bytes[ 9 ]
149
157
  if flags & Ant::ANT_EXT_MESG_BITFIELD_DEVICE_ID
150
158
  usDeviceNumber = data.bytes[10] | (data.bytes[11] << 8)
151
159
  ucDeviceType = data.bytes[12]
152
160
  ucTransmissionType = data.bytes[13]
153
- self.log.info "Got a burst on Chan ID(%d/%d/%d)" %
161
+ self.log.debug "Got a burst on Chan ID(%d/%d/%d)" %
154
162
  [usDeviceNumber, ucDeviceType, ucTransmissionType]
155
163
  end
156
164
 
@@ -158,14 +166,13 @@ module Ant::Channel::EventCallbacks
158
166
  end
159
167
 
160
168
 
161
- ### Handle an RX_FLAG_BROADCAST event.
162
169
  def on_event_rx_flag_broadcast( channel_num, data )
163
170
  flags = data.bytes[ 9 ]
164
171
  if flags & Ant::ANT_EXT_MESG_BITFIELD_DEVICE_ID
165
172
  usDeviceNumber = data.bytes[10] | (data.bytes[11] << 8)
166
173
  ucDeviceType = data.bytes[12]
167
174
  ucTransmissionType = data.bytes[13]
168
- self.log.info "Got a broadcast on Chan ID(%d/%d/%d)" %
175
+ self.log.debug "Got a broadcast on Chan ID(%d/%d/%d)" %
169
176
  [usDeviceNumber, ucDeviceType, ucTransmissionType]
170
177
  end
171
178
 
@@ -173,23 +180,21 @@ module Ant::Channel::EventCallbacks
173
180
  end
174
181
 
175
182
 
176
- # def on_event_rx_acknowledged( channel_num, data )
177
- #
178
- # end
183
+ def on_event_rx_acknowledged( channel_num, data )
184
+ self.log.debug "Acknowledged: Rx [%d]:\n%s" % [ data.bytes[0], Ant::DataUtilities.hexdump(data[1..9]) ]
185
+ end
179
186
 
180
187
 
181
- ### Handle an RX_BURST_PACKET event.
182
188
  def on_event_rx_burst_packet( channel_num, data )
183
189
  channel = (data.bytes[0] & CHANNEL_NUMBER_MASK) >> 5
184
190
  sequence_num = data.bytes[0] & SEQUENCE_NUMBER_MASK
185
191
 
186
- self.log.info "Burst (0x%02x): Rx: %d:\n%s" % [ channel, sequence_num, hexdump(data[1..8]) ]
192
+ self.log.debug "Burst (0x%02x): Rx: %d:\n%s" % [ channel, sequence_num, Ant::DataUtilities.hexdump(data[1..9]) ]
187
193
  end
188
194
 
189
195
 
190
- ### Handle an RX_BROADCAST event.
191
196
  def on_event_rx_broadcast( channel_num, data )
192
- self.log.info "Broadcast: Rx:\n%s" % [ hexdump(data[1..8]) ]
197
+ self.log.debug "Broadcast: Rx [%d]:\n%s" % [ data.bytes[0], Ant::DataUtilities.hexdump(data[1..9]) ]
193
198
  end
194
199
 
195
200
 
data/lib/ant/channel.rb CHANGED
@@ -9,6 +9,7 @@ require 'ant' unless defined?( Ant )
9
9
  class Ant::Channel
10
10
  extend Loggability
11
11
 
12
+
12
13
  # The default network number
13
14
  DEFAULT_NETWORK_NUMBER = 0
14
15
 
@@ -20,7 +21,8 @@ class Ant::Channel
20
21
  # Autoloads
21
22
  #
22
23
 
23
- autoload :EventCallbacks, 'ant/channel/event_callbacks'
24
+ require 'ant/channel/event_callbacks'
25
+ include Ant::Channel::EventCallbacks
24
26
 
25
27
 
26
28
  # Loggability API -- log to the Ant logger
@@ -44,24 +46,68 @@ class Ant::Channel
44
46
 
45
47
 
46
48
  ### Set up the given +mod+ as the handler module for channel events.
47
- def set_event_handlers( mod=Ant::Channel::EventCallbacks )
48
- self.extend( mod )
49
- self.on_event( &self.method(:handle_event_callback) )
49
+ def set_event_handlers( object=self )
50
+ self.on_event( &object.method(:handle_event_callback) )
51
+ end
52
+
53
+
54
+ ### Return the ANT channel ID if one has been assigned.
55
+ def channel_id
56
+ device_number = self.device_number or return nil
57
+ device_type = self.device_type & 0x7f
58
+ pairing_bit = self.device_type & 0x80
59
+ transmission_type = self.transmission_type
60
+
61
+ return "%d/%d/%d%s" % [
62
+ device_number,
63
+ device_type,
64
+ transmission_type,
65
+ pairing_bit.nonzero? ? '+' : '',
66
+ ]
67
+ end
68
+
69
+
70
+ ### Return a human-readable description of the channel type.
71
+ def channel_type_description
72
+ case self.channel_type
73
+ when Ant::PARAMETER_RX_NOT_TX
74
+ return :slave
75
+ when Ant::PARAMETER_TX_NOT_RX
76
+ return :master
77
+ when Ant::PARAMETER_SHARED_CHANNEL
78
+ return :shared
79
+ when Ant::PARAMETER_NO_TX_GUARD_BAND
80
+ return :no_tx_guard_band
81
+ when Ant::PARAMETER_ALWAYS_RX_WILD_CARD_SEARCH_ID
82
+ return :always_rx_wild_card_search_id
83
+ when Ant::PARAMETER_RX_ONLY
84
+ return :rx_only
85
+ else
86
+ return nil
87
+ end
88
+ end
89
+
90
+
91
+ ### Returns +true+ if the channel is not closed.
92
+ def open?
93
+ return !self.closed?
50
94
  end
51
95
 
52
96
 
53
97
  ### Return a human-readable version of the object suitable for debugging.
54
98
  def inspect
55
- return "#<%p:%#x {%d} %#02x on network %d: %d%s>" % [
99
+ return "#<%p:%#x %s {%s} #%d @%dMHz on network %d%s>" % [
56
100
  self.class,
57
101
  self.object_id,
102
+ self.channel_type_description,
103
+ self.channel_id || '-',
58
104
  self.channel_number,
59
- self.channel_type,
105
+ self.rf_frequency + 2400,
60
106
  self.network_number,
61
- self.extended_options,
62
107
  self.closed? ? " (closed)" : "",
63
108
  ]
64
109
  end
65
110
 
66
111
  end # class Ant::Channel
67
112
 
113
+