dougsko-rham 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 dougsko
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.rdoc ADDED
@@ -0,0 +1,18 @@
1
+ = rham
2
+
3
+ A ruby wrapper for libham.
4
+
5
+ == Note on Patches/Pull Requests
6
+
7
+ * Fork the project.
8
+ * Make your feature addition or bug fix.
9
+ * Add tests for it. This is important so I don't break it in a
10
+ future version unintentionally.
11
+ * Commit, do not mess with rakefile, version, or history.
12
+ (if you want to have your own version, that is fine but
13
+ bump version in a commit by itself I can ignore when I pull)
14
+ * Send me a pull request. Bonus points for topic branches.
15
+
16
+ == Copyright
17
+
18
+ Copyright (c) 2009 dougsko. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,51 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "rham"
8
+ gem.summary = %Q{A ruby wrapper for libham}
9
+ gem.description = %Q{ruby wrapper for libham}
10
+ gem.email = "dougtko@gmail.com"
11
+ gem.homepage = "http://github.com/dougsko/rham"
12
+ gem.authors = ["dougsko"]
13
+ gem.add_development_dependency "rspec"
14
+ gem.extensions = "ext/extconf.rb"
15
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
+ end
17
+ rescue LoadError
18
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
19
+ end
20
+
21
+ require 'spec/rake/spectask'
22
+ Spec::Rake::SpecTask.new(:spec) do |spec|
23
+ spec.libs << 'lib' << 'spec'
24
+ spec.spec_files = FileList['spec/**/*_spec.rb']
25
+ spec.spec_opts = ['--color']
26
+ end
27
+
28
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
29
+ spec.libs << 'lib' << 'spec'
30
+ spec.pattern = 'spec/**/*_spec.rb'
31
+ spec.rcov = true
32
+ spec.spec_opts = ['--color']
33
+ end
34
+
35
+ task :spec => :check_dependencies
36
+
37
+ task :default => :spec
38
+
39
+ require 'rake/rdoctask'
40
+ Rake::RDocTask.new do |rdoc|
41
+ if File.exist?('VERSION')
42
+ version = File.read('VERSION')
43
+ else
44
+ version = ""
45
+ end
46
+
47
+ rdoc.rdoc_dir = 'rdoc'
48
+ rdoc.title = "rham #{version}"
49
+ rdoc.rdoc_files.include('README*')
50
+ rdoc.rdoc_files.include('lib/**/*.rb, ext/**/*.c')
51
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.2
data/bin/radio.rhtml ADDED
@@ -0,0 +1,71 @@
1
+ <% require 'rubygems' %>
2
+ <% require 'cgi' %>
3
+ <% require 'drb' %>
4
+
5
+ <% radio = DRbObject.new(nil, "druby://slackernet.ath.cx:7176") %>
6
+ <% radio.rig_open %>
7
+
8
+ <head>
9
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
10
+ "http://www.w3.org/TR/html4/loose.dtd">
11
+ <html xmlns="http://www.w3.org/1999/xhtml">
12
+ <head>
13
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
14
+ <link href="default.css" rel="stylesheet" type="text/css" />
15
+ <title>Online Ham Radio</title>
16
+ </head>
17
+ <body>
18
+
19
+ <div id="sidebar">
20
+ <h1>Yaesu FT847</h1>
21
+ </div>
22
+
23
+ <div id="navigation">
24
+ </div>
25
+
26
+ <div id="content">
27
+ <% cgi = CGI.new()
28
+ if cgi.params['mode'] != "none"
29
+ radio.rig_set_mode(cgi.params['mode'].to_s, "normal")
30
+ end
31
+ if cgi.params['freq'][0] != nil
32
+ if cgi.params['freq'][0].length > 0
33
+ radio.rig_set_freq(cgi.params['freq'][0].to_i)
34
+ end
35
+ end
36
+ %>
37
+ <img src="ft847.jpg">
38
+ <br />
39
+ <h2>Current Settings:</h2>
40
+ <br />
41
+ <% stats = radio.stats %>
42
+ <strong>Mode: </strong> <%= stats["mode"] %>
43
+ <br />
44
+ <% puts "Frequency: " + stats["freq"] %>
45
+ <br />
46
+ <br />
47
+ <form method="POST" action="radio.rhtml">
48
+ Mode Select:
49
+ <select name="mode">
50
+ <option value="none">No change</option>
51
+ <option value=AM>AM</option>
52
+ <option value=CW>CW</option>
53
+ <option value=FM>FM</option>
54
+ <option value=LSB>LSB</option>
55
+ <option value=USB>USB</option>
56
+ </select>
57
+ <br />
58
+ Set Frequency (Hz):
59
+ <input type="text" name="freq">
60
+ <br>
61
+ <input type="submit" value="Submit">
62
+ </form>
63
+ <h3><a href="http://igotinternets.net:8000/example1.ogg.m3u">Listen</a></h3>
64
+ </div>
65
+
66
+ <div id="footer">
67
+ </div>
68
+
69
+ </body>
70
+ </html>
71
+ <% radio.rig_close %>
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ #
4
+
5
+ require 'drb'
6
+
7
+ $model = "dummy"
8
+
9
+ #DRb.start_service
10
+ a = DRbObject.new nil, ARGV.shift
11
+ a.rig_open
12
+
13
+ a.rig_set_mode("AM", "normal")
14
+ a.rig_set_freq(20000)
15
+
16
+ a.stats.each do |k,v|
17
+ puts "#{k} = #{v}"
18
+ end
data/bin/radioserve.rb ADDED
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ #
4
+ # serves a rig object for a remote client to work with
5
+ #
6
+
7
+ require 'rubygems'
8
+ require 'rham'
9
+ require 'drb'
10
+ require 'drb/acl'
11
+
12
+ $model = "dummy"
13
+
14
+ acl = ACL.new(%w(deny all
15
+ allow localhost
16
+ allow igotinternets.net))
17
+ DRb.install_acl(acl)
18
+
19
+ DRb.start_service("druby://192.168.1.2:7176", Rham.new)
20
+ puts DRb.uri
21
+
22
+ DRb.thread.join
data/ext/extconf.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'mkmf'
2
+
3
+ $CFLAGS = "-Wall"
4
+ srcs = ["rham.c"]
5
+ have_library("hamlib", "rig_init")
6
+ create_makefile("rham")
data/ext/rham.c ADDED
@@ -0,0 +1,209 @@
1
+ #include "ruby.h"
2
+ #include <stdio.h>
3
+ #include <hamlib/rig.h>
4
+
5
+ static VALUE rb_cRham;
6
+
7
+ static void rig_mark(RIG *my_rig){
8
+ }
9
+
10
+ static void rig_free(RIG *my_rig){
11
+ rig_cleanup(my_rig);
12
+ }
13
+
14
+ static VALUE rig_allocate(VALUE self){
15
+ RIG *my_rig;
16
+ rig_model_t my_model;
17
+ char *model;
18
+
19
+ if(model = STR2CSTR(rb_gv_get("$model"))){
20
+ if(model == "ft847"){
21
+ my_model = RIG_MODEL_FT847;
22
+ }
23
+ else{
24
+ my_model = RIG_MODEL_DUMMY;
25
+ }
26
+ }
27
+ else{
28
+ fprintf(stderr,"You must define the global variable, $model, somewhere in your script");
29
+ }
30
+
31
+ rig_set_debug(RIG_DEBUG_NONE);
32
+ my_rig = rig_init(my_model);
33
+ if (!my_rig)
34
+ fprintf(stderr,"Unknown rig num: %d\n", my_model);
35
+
36
+ return Data_Wrap_Struct(self, rig_mark, rig_free, my_rig);
37
+ }
38
+
39
+ static VALUE rb_rig_open(VALUE self){
40
+ RIG *my_rig;
41
+ int ret;
42
+
43
+ Data_Get_Struct(self, RIG, my_rig);
44
+
45
+ if((ret = rig_open(my_rig)) != RIG_OK)
46
+ printf("rig_open: error = %s\n", rigerror(ret));
47
+ else
48
+ return Qnil;
49
+ }
50
+
51
+ static VALUE rb_rig_close(VALUE self){
52
+ RIG *my_rig;
53
+ int ret;
54
+
55
+ Data_Get_Struct(self, RIG, my_rig);
56
+
57
+ if((ret = rig_close(my_rig)) != RIG_OK)
58
+ printf("rig_close: error = %s\n", rigerror(ret));
59
+ else
60
+ return Qnil;
61
+ }
62
+
63
+ static VALUE rb_rig_get_info(VALUE self){
64
+ RIG *my_rig;
65
+ const char *info;
66
+
67
+ Data_Get_Struct(self, RIG, my_rig);
68
+
69
+ info = rig_get_info(my_rig);
70
+ if(!info)
71
+ return Qnil;
72
+ return rb_str_new2(info);
73
+ }
74
+
75
+ static VALUE rb_rig_get_freq(VALUE self){
76
+ RIG *my_rig;
77
+ freq_t freq;
78
+ int ret;
79
+ char result[100];
80
+
81
+ Data_Get_Struct(self, RIG, my_rig);
82
+ ret = rig_get_freq(my_rig, RIG_VFO_CURR, &freq);
83
+
84
+ if(ret != RIG_OK)
85
+ printf("rig_open: error = %s\n", rigerror(ret));
86
+ else{
87
+ sprintf(result, "%f", freq);
88
+ return rb_str_new2(result);
89
+ }
90
+ return Qnil;
91
+ }
92
+
93
+ static VALUE rb_rig_get_vfo(VALUE self){
94
+ RIG *my_rig;
95
+ vfo_t *vfo;
96
+
97
+ Data_Get_Struct(self, RIG, my_rig);
98
+ return INT2NUM(rig_get_vfo(my_rig, &vfo));
99
+ }
100
+
101
+ static VALUE rb_rig_get_powerstat(VALUE self){
102
+ RIG *my_rig;
103
+ powerstat_t *status;
104
+ int ret;
105
+
106
+ Data_Get_Struct(self, RIG, my_rig);
107
+ ret = rig_get_powerstat(my_rig, &status);
108
+
109
+ if(ret != RIG_OK){
110
+ printf("rig_get_powerstat: error = %s\n", rigerror(ret));
111
+ return Qnil;
112
+ }
113
+ if(status == RIG_POWER_OFF)
114
+ return rb_str_new2("off");
115
+ else if(status == RIG_POWER_ON)
116
+ return rb_str_new2("on");
117
+ else
118
+ return Qnil;
119
+ }
120
+
121
+ static VALUE rb_rig_set_freq(VALUE self, VALUE rfreq){
122
+ int ret;
123
+ freq_t freq;
124
+ RIG *my_rig;
125
+
126
+ freq = NUM2LONG(rfreq);
127
+ Data_Get_Struct(self, RIG, my_rig);
128
+ ret = rig_set_freq(my_rig, RIG_VFO_CURR, freq);
129
+ if(ret != RIG_OK)
130
+ printf("rig_set_freq: error = %s\n", rigerror(ret));
131
+
132
+ return Qnil;
133
+ }
134
+
135
+ static VALUE rb_rig_get_strength(VALUE self){
136
+ int ret;
137
+ int strength;
138
+ RIG *my_rig;
139
+
140
+ Data_Get_Struct(self, RIG, my_rig);
141
+ ret = rig_get_strength(my_rig, RIG_VFO_CURR, &strength);
142
+ if(ret != RIG_OK)
143
+ printf("rig_get_strength: error = %s\n", rigerror(ret));
144
+ else
145
+ return INT2NUM(strength);
146
+
147
+ return Qnil;
148
+ }
149
+
150
+ static VALUE rb_rig_get_mode(VALUE self){
151
+ int ret;
152
+ rmode_t mode;
153
+ pbwidth_t width;
154
+ RIG *my_rig;
155
+
156
+ Data_Get_Struct(self, RIG, my_rig);
157
+ ret = rig_get_mode(my_rig, RIG_VFO_CURR, &mode, &width);
158
+
159
+ if(ret != RIG_OK)
160
+ printf("rig_get_mode: error = %s\n", rigerror(ret));
161
+ else
162
+ return rb_str_new2(rig_strrmode(mode));
163
+
164
+ return Qnil;
165
+ }
166
+
167
+ static VALUE rb_rig_set_mode(VALUE self, VALUE rmode, VALUE rwidth){
168
+ int ret;
169
+ rmode_t mode;
170
+ pbwidth_t width;
171
+ RIG *my_rig;
172
+ char *s_width;
173
+
174
+ Data_Get_Struct(self, RIG, my_rig);
175
+
176
+ mode = rig_parse_mode(STR2CSTR(rmode));
177
+
178
+ s_width = STR2CSTR(rwidth);
179
+ if(strcmp(s_width, "normal") == 0)
180
+ width = rig_passband_normal(my_rig, mode);
181
+ else if(strcmp(s_width, "narrow") == 0)
182
+ width = rig_passband_narrow(my_rig, mode);
183
+ else if(strcmp(s_width, "wide") == 0)
184
+ width = rig_passband_wide(my_rig, mode);
185
+ else
186
+ printf("rig_set_mode: error = Invalid width");
187
+
188
+ ret = rig_set_mode(my_rig, RIG_VFO_CURR, mode, width);
189
+ if(ret != RIG_OK)
190
+ printf("rig_set_mode: error = %s\n", rigerror(ret));
191
+
192
+ return Qnil;
193
+ }
194
+
195
+ void Init_rham() {
196
+ rb_cRham = rb_define_class("Rham", rb_cObject);
197
+ rb_define_alloc_func(rb_cRham, rig_allocate);
198
+ //rb_define_method(rb_cRham, "new", rb_new, 1);
199
+ rb_define_method(rb_cRham, "rig_open", rb_rig_open, 0);
200
+ rb_define_method(rb_cRham, "rig_close", rb_rig_close, 0);
201
+ rb_define_method(rb_cRham, "rig_get_info", rb_rig_get_info, 0);
202
+ rb_define_method(rb_cRham, "rig_get_freq", rb_rig_get_freq, 0);
203
+ rb_define_method(rb_cRham, "rig_get_vfo", rb_rig_get_vfo, 0);
204
+ rb_define_method(rb_cRham, "rig_get_powerstat", rb_rig_get_powerstat, 0);
205
+ rb_define_method(rb_cRham, "rig_set_freq", rb_rig_set_freq, 1);
206
+ rb_define_method(rb_cRham, "rig_get_strength", rb_rig_get_strength, 0);
207
+ rb_define_method(rb_cRham, "rig_get_mode", rb_rig_get_mode, 0);
208
+ rb_define_method(rb_cRham, "rig_set_mode", rb_rig_set_mode, 2);
209
+ }
data/lib/rham.rb ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/ev ruby
2
+ #
3
+ #
4
+ # Ruby methods for the Rham class
5
+ #
6
+ require 'rham.so'
7
+
8
+ class Rham
9
+ def stats
10
+ stats = {}
11
+ stats["freq"] = rig_get_freq
12
+ stats["mode"] = rig_get_mode
13
+ stats
14
+ end
15
+ end
data/rham.gemspec ADDED
@@ -0,0 +1,58 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{rham}
8
+ s.version = "0.0.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["dougsko"]
12
+ s.date = %q{2009-09-07}
13
+ s.description = %q{ruby wrapper for libham}
14
+ s.email = %q{dougtko@gmail.com}
15
+ s.executables = ["radio.rhtml", "radioserve.rb", "radioclient.rb"]
16
+ s.extensions = ["ext/extconf.rb"]
17
+ s.extra_rdoc_files = [
18
+ "LICENSE",
19
+ "README.rdoc"
20
+ ]
21
+ s.files = [
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "bin/radio.rhtml",
27
+ "bin/radioclient.rb",
28
+ "bin/radioserve.rb",
29
+ "ext/extconf.rb",
30
+ "ext/rham.c",
31
+ "lib/rham.rb",
32
+ "rham.gemspec",
33
+ "spec/rham_spec.rb",
34
+ "spec/spec_helper.rb"
35
+ ]
36
+ s.homepage = %q{http://github.com/dougsko/rham}
37
+ s.rdoc_options = ["--charset=UTF-8"]
38
+ s.require_paths = ["lib"]
39
+ s.rubygems_version = %q{1.3.5}
40
+ s.summary = %q{A ruby wrapper for libham}
41
+ s.test_files = [
42
+ "spec/spec_helper.rb",
43
+ "spec/rham_spec.rb"
44
+ ]
45
+
46
+ if s.respond_to? :specification_version then
47
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
48
+ s.specification_version = 3
49
+
50
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
51
+ s.add_development_dependency(%q<rspec>, [">= 0"])
52
+ else
53
+ s.add_dependency(%q<rspec>, [">= 0"])
54
+ end
55
+ else
56
+ s.add_dependency(%q<rspec>, [">= 0"])
57
+ end
58
+ end
data/spec/rham_spec.rb ADDED
@@ -0,0 +1,45 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Rham" do
4
+ before(:all) do
5
+ $model = "dummy"
6
+ @rig = Rham.new
7
+ @rig.rig_open
8
+ end
9
+
10
+ after(:all) do
11
+ @rig.rig_close
12
+ end
13
+
14
+ it "setsi/gets the mode" do
15
+ @rig.rig_set_mode("AM", "normal")
16
+ @rig.rig_get_mode.should == "AM"
17
+ end
18
+
19
+ it "sets/gets the freq" do
20
+ @rig.rig_set_freq(20000)
21
+ @rig.rig_get_freq.should == "20000.000000"
22
+ end
23
+
24
+ it "checks stats" do
25
+ stats = @rig.stats
26
+ stats["mode"].should == "AM"
27
+ stats["freq"].should == "20000.000000"
28
+ end
29
+
30
+ it "checks powerstat" do
31
+ @rig.rig_get_powerstat.should == "on"
32
+ end
33
+
34
+ it "checks vfo" do
35
+ @rig.rig_get_vfo.should == 0
36
+ end
37
+
38
+ it "checks info" do
39
+ @rig.rig_get_info.should == "Nothing much (dummy)"
40
+ end
41
+
42
+ it "checks strength" do
43
+ @rig.rig_get_strength.should == 0
44
+ end
45
+ end
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'rham'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dougsko-rham
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - dougsko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-07 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rspec
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ description: ruby wrapper for libham
26
+ email: dougtko@gmail.com
27
+ executables:
28
+ - radio.rhtml
29
+ - radioserve.rb
30
+ - radioclient.rb
31
+ extensions:
32
+ - ext/extconf.rb
33
+ extra_rdoc_files:
34
+ - LICENSE
35
+ - README.rdoc
36
+ files:
37
+ - LICENSE
38
+ - README.rdoc
39
+ - Rakefile
40
+ - VERSION
41
+ - bin/radio.rhtml
42
+ - bin/radioclient.rb
43
+ - bin/radioserve.rb
44
+ - ext/extconf.rb
45
+ - ext/rham.c
46
+ - lib/rham.rb
47
+ - rham.gemspec
48
+ - spec/rham_spec.rb
49
+ - spec/spec_helper.rb
50
+ has_rdoc: false
51
+ homepage: http://github.com/dougsko/rham
52
+ post_install_message:
53
+ rdoc_options:
54
+ - --charset=UTF-8
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "0"
62
+ version:
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ version:
69
+ requirements: []
70
+
71
+ rubyforge_project:
72
+ rubygems_version: 1.2.0
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: A ruby wrapper for libham
76
+ test_files:
77
+ - spec/spec_helper.rb
78
+ - spec/rham_spec.rb