Add tunable transmit power knob
2 files changed, 30 insertions(+), 3 deletions(-)

M ant-wireless.gemspec
M ext/ant_ext/ant_ext.c
M ant-wireless.gemspec +3 -3
@@ 1,16 1,16 @@ 
 # -*- encoding: utf-8 -*-
-# stub: ant-wireless 0.3.0.pre.20211008123124 ruby lib
+# stub: ant-wireless 0.3.0.pre.20211011092718 ruby lib
 # stub: ext/ant_ext/extconf.rb
 
 Gem::Specification.new do |s|
   s.name = "ant-wireless".freeze
-  s.version = "0.3.0.pre.20211008123124"
+  s.version = "0.3.0.pre.20211011092718"
 
   s.required_rubygems_version = Gem::Requirement.new("> 1.3.1".freeze) if s.respond_to? :required_rubygems_version=
   s.metadata = { "bug_tracker_uri" => "https://todo.sr.ht/~ged/ruby-ant-wireless", "changelog_uri" => "https://deveiate.org/code/ant-wireless/History_md.html", "documentation_uri" => "https://deveiate.org/code/ant-wireless", "homepage_uri" => "https://sr.ht/~ged/ruby-ant-wireless/", "source_uri" => "https://hg.sr.ht/~ged/ruby-ant-wireless" } if s.respond_to? :metadata=
   s.require_paths = ["lib".freeze]
   s.authors = ["Michael Granger".freeze, "Mahlon E. Smith".freeze]
-  s.date = "2021-10-08"
+  s.date = "2021-10-11"
   s.description = "A binding for the ANT ultra-low power wireless protocol via the Garmin USB ANT Stick. ANT can be used to send information wirelessly from one device to another device, in a robust and flexible manner.".freeze
   s.email = ["ged@FaerieMUD.org".freeze, "mahlon@martini.nu".freeze]
   s.extensions = ["ext/ant_ext/extconf.rb".freeze]

          
M ext/ant_ext/ant_ext.c +27 -0
@@ 311,6 311,32 @@ rant_s_set_network_key( VALUE _module, V
 
 /*
  * call-seq:
+ *    Ant.transmit_power = 4
+ *
+ * Set the transmit power level for all channels. Valid values are 0-4; default
+ * is 3 = 0dBm.
+ *
+ *    # Set transmit power to -5 dBm
+ *    Ant.transmit_power = 2
+ */
+static VALUE
+rant_s_transmit_power_eq( VALUE _module, VALUE power )
+{
+	const unsigned char ucTransmitPower = NUM2CHR( power );
+	BOOL rval;
+
+	if ( ucTransmitPower < 0 || ucTransmitPower > 4 ) {
+		rb_raise( rb_eArgError, "expected a value between 0 and 4, got %d", ucTransmitPower );
+	}
+
+	rval = ANT_SetTransmitPower( ucTransmitPower );
+
+	return rval ? Qtrue : Qfalse;
+}
+
+
+/*
+ * call-seq:
  *    Ant.assign_channel( channel, channel_type, network_number=0, extended_options=0x0, timeout=0 )   -> channel
  *
  * Assign a channel and return an Ant::Channel object for it. Channel assignment

          
@@ 575,6 601,7 @@ Init_ant_ext()
 	rb_define_singleton_method( rant_mAnt, "reset", rant_s_reset, 0 );
 
 	rb_define_singleton_method( rant_mAnt, "set_network_key", rant_s_set_network_key, 2 );
+	rb_define_singleton_method( rant_mAnt, "transmit_power=", rant_s_transmit_power_eq, 1 );
 	rb_define_singleton_method( rant_mAnt, "assign_channel", rant_s_assign_channel, -1 );
 
 	rb_define_singleton_method( rant_mAnt, "use_extended_messages=",