digiusb 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/digiusb.rb +55 -38
  3. data/license.txt +24 -106
  4. metadata +21 -29
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 52f78cacd459c373f90fbd41e043d12c8e0b5ff5
4
+ data.tar.gz: 70924c701448f285f2686e2f7b0890d2c9cc0f66
5
+ SHA512:
6
+ metadata.gz: 5c6473feea90654cd90bf178e04335a549e7c454e85c0647c75d26fee16ba34c7165bbf362a78822095d427ffb9948308a5af8c714c7e30e49081af5f1deac1a
7
+ data.tar.gz: 3e23962bbf56bfb09f8483532e812d452ed48561cde1990cf7bed6f3e2f1f2bea107f35452396404bf894628a71bd7920f4b933811a10fd5d29551609526ea1c
@@ -1,16 +1,25 @@
1
- # The DigiUSB class helps find, connect to, and talk with Digisparks using the DigiUSB arduino library bundled with the Digispark Arduino software.
2
- # This class aims to work like an IO object, letting you read and write characters, bytes, and strings as if it were a file, socket, or serial port.
3
- # To get started, grab a list of Digisparks with the DigiUSB.sparks method. Each spark has an inspect method with a unique identifier including the
4
- # USB device name (usually DigiUSB), and some numbers representing which ports and hubs each spark connects to. To begin with, DigiUSB.sparks.last
5
- # works well if you only intend to have one digispark connected to your computer. Eventually the device name (aka "product name") will hopefully
6
- # provide a simple way to differentiate different digisparks.
1
+ # The DigiUSB class helps find, connect to, and talk with Digisparks using the
2
+ # DigiUSB arduino library bundled with the Digispark Arduino software. This
3
+ # class aims to work like an IO object, letting you read and write characters,
4
+ # bytes, and strings as if it were a file, socket, or serial port. To get
5
+ # started, grab a list of Digisparks with the DigiUSB.sparks method. Each spark
6
+ # has an inspect method with a unique identifier including the USB device name
7
+ # (usually DigiUSB), and some numbers representing which ports and hubs each
8
+ # spark connects to. To begin with, DigiUSB.sparks.last works well if you only
9
+ # intend to have one digispark connected to your computer. Eventually the device
10
+ # name (aka "product name") will hopefully provide a simple way to differentiate
11
+ # different digisparks.
7
12
  #
8
- # Once you have a reference to a Digispark, you can start using it as if it were an IO object immediately with methods like getc and putc.
9
- # As soon as you start interacting with the Digispark using these reading and writing methods the Digispark will be claimed to your ruby program
10
- # and will be unavailable to other programs until you do one of: close the ruby program, or unplug and plug back in the Digispark.
13
+ # Once you have a reference to a Digispark, you can start using it as if it were
14
+ # an IO object immediately with methods like getc and putc. As soon as you start
15
+ # interacting with the Digispark using these reading and writing methods the
16
+ # Digispark will be claimed to your ruby program and will be unavailable to
17
+ # other programs until you do one of: close the ruby program, or unplug and plug
18
+ # back in the Digispark.
11
19
  #
12
- # Note also that calling DigiUSB.sparks can sometimes disrupt program uploads, so if you're polling waiting for a digispark to appear you may see
13
- # some programming errors in the Digispark Arduino software.
20
+ # Note also that calling DigiUSB.sparks can sometimes disrupt program uploads,
21
+ # so if you're polling waiting for a digispark to appear you may see some
22
+ # programming errors in the Digispark Arduino software.
14
23
 
15
24
  require 'libusb'
16
25
 
@@ -18,7 +27,7 @@ require 'libusb'
18
27
  class DigiUSB
19
28
  ProductID = 0x05df # product id number from Digistump
20
29
  VendorID = 0x16c0 # vendor id number for Digistump
21
- Timeout = 1_000 # one second till device crashes due to lack of calling DigiUSB.refresh()
30
+ Timeout = 1_000 # spark needs to DigiUSB.refresh or DigiUSB.sleep every second
22
31
  DefaultPollingFrequency = 15 # 15hz when waiting for data to be printed
23
32
 
24
33
  # :nodoc: initialize a new DigiUSB object using a libusb device object
@@ -28,13 +37,15 @@ class DigiUSB
28
37
  @polling_frequency = DefaultPollingFrequency
29
38
  end
30
39
 
31
- # polling frequency describes how aggressively ruby will ask for new bytes when waiting for the device to print something
32
- # a lower value is faster (it is in hertz)
40
+ # polling frequency describes how aggressively ruby will ask for new bytes
41
+ # when waiting for the device to print something a lower value is faster (it
42
+ # is in hertz)
33
43
  attr_accessor :polling_frequency
34
44
 
35
- # Returns an array of all Digisparks connected to this computer. Optionally specify a device name string to return only Digisparks with
36
- # that name. At the time of writing there is no easy way to customize the device name in the Digispark Arduino software, but hopefully
37
- # there will be in the future.
45
+ # Returns an array of all Digisparks connected to this computer. Optionally
46
+ # specify a device name string to return only Digisparks with that name. At
47
+ # the time of writing there is no easy way to customize the device name in
48
+ # the Digispark Arduino software, but hopefully there will be in the future.
38
49
  def self.sparks product_name = false
39
50
  usb = LIBUSB::Context.new
40
51
  usb.devices.select { |device|
@@ -44,10 +55,16 @@ class DigiUSB
44
55
  }
45
56
  end
46
57
 
58
+ # Connect to a Digispark. Usually the most recently plugged in one.
59
+ def self.connect product_name = false
60
+ sparks(product_name).last
61
+ end
47
62
 
48
- # Attempt to read a single character from the Digispark. Returns a string either zero or one characters long.
49
- # A zero character string means there are no characters available to read - the Digispark hasn't printed anything for you to consume yet.
50
- # Returns next time Digispark calls DigiUSB.refresh() regardless of how many characters are available.
63
+ # Attempt to read a single character from the Digispark. Returns a string
64
+ # either zero or one characters long. A zero character string means there are
65
+ # no characters available to read - the Digispark hasn't printed anything for
66
+ # you to consume yet. Returns next time Digispark calls DigiUSB.refresh()
67
+ # regardless of how many characters are available.
51
68
  def getc
52
69
  control_transfer(
53
70
  bRequest: 0x01, # hid get report
@@ -55,10 +72,12 @@ class DigiUSB
55
72
  )
56
73
  end
57
74
 
58
- # Send a single character in to the Digispark's memory. Argument may be either a single byte String, or an integer between 0 and 255 inclusive.
75
+ # Send a single character in to the Digispark's memory. Argument may be either
76
+ # a single byte String, or an integer between 0 and 255 inclusive.
77
+ #
59
78
  # Returns next time Digispark calls DigiUSB.refresh()
60
79
  def putc character
61
- character = [character % 256].pack('c') if character.is_a? Integer
80
+ character = [character % 256].pack('C') if character.is_a? Integer
62
81
  raise "Cannot putc more than one byte" if character.bytesize > 1
63
82
  raise "Cannot putc fewer than one byte" if character.bytesize < 1
64
83
 
@@ -68,14 +87,15 @@ class DigiUSB
68
87
  )
69
88
  end
70
89
 
71
- # Read a string fromt he Digispark until a newline is received (eg, from the println function in Digispark's DigiUSB library)
72
- # The returned string includes a newline character on the end.
90
+ # Read a string from the Digispark until a newline is received (eg, from the
91
+ # println function in Digispark's DigiUSB library) The returned string
92
+ # includes a newline character on the end.
73
93
  def gets
74
94
  chars = ""
75
95
  until chars.include? "\n"
76
96
  char = getc()
77
97
  chars += char
78
- sleep 1.0 / PollingFrequency if char == ""
98
+ sleep 1.0 / @polling_frequency if char == ""
79
99
  end
80
100
  return chars
81
101
  end
@@ -100,22 +120,18 @@ class DigiUSB
100
120
  alias_method :print, :write
101
121
  alias_method :send, :write
102
122
 
103
- # Recieve a specific number of bytes and return them as a String. Unlike #getc read will wait until
104
- # the specified number of bytes are available before returning.
105
- def read bytes = 1
123
+ # Recieve a specific number of bytes and return them as a String. Unlike #getc
124
+ # read will wait until the specified number of bytes are available before
125
+ # returning. Optionally specify a timeout
126
+ def read bytes = 1, timeout = nil
127
+ start_time = Time.now.to_f
106
128
  chars = ""
107
-
108
- until chars.include? "\n"
109
- char = getc()
110
- chars += char
111
- sleep 1.0 / PollingFrequency if char == ""
112
- end
113
-
114
- chars += getc() until chars.length == bytes
129
+ chars += getc() until chars.length >= bytes || (timeout && Time.now.to_f - start_time > timeout)
115
130
  return chars
116
131
  end
117
132
 
118
- # A friendly textual representation of this specific Digispark. Can be called without claiming the digispark for this program
133
+ # A friendly textual representation of this specific Digispark. Can be called
134
+ # without claiming the digispark for this program
119
135
  def inspect
120
136
  "<Digispark:#{name}:@#{address}>"
121
137
  end
@@ -126,7 +142,8 @@ class DigiUSB
126
142
  @device.product
127
143
  end
128
144
 
129
- # Returns the device's bus number and address on the computer's USB interface as a string
145
+ # Returns the device's bus number and address on the computer's USB interface
146
+ # as a string
130
147
  def address
131
148
  "#{@device.bus_number}.#{@device.device_address}"
132
149
  end
@@ -1,106 +1,24 @@
1
- sid vicious played a four-string fender bass guitar and couldn’t sing
2
- and everybody hated him except the ones who loved him
3
- a ukulele has four strings, but sid did did not play ukulele
4
- he did smack and probably killed his girlfriend nancy spungen
5
-
6
- if only sid had had a ukulele, maybe he could have been happy
7
- maybe he would not have suffered such a sad end
8
- he maybe would have not done all that heroin instead
9
- he maybe would’ve sat around just singing nice songs to his girlfriend
10
-
11
- so play your favorite cover song, especially if the words are wrong
12
- ‘cos even if your grades are bad, it doesn’t mean you’re failing
13
- do your homework with a fork
14
- and eat your fruit loops in the dark
15
- and bring your etch-a-sketch to work
16
- and play your ukulele
17
-
18
- ukulele small and forceful
19
- brave and peaceful
20
- you can play the ukulele too it is painfully simple
21
- play your ukulele badly, play your ukulele loudly
22
- ukulele banish evil
23
- ukulele save the people
24
- ukulele gleaming golden on the top of every steeple
25
-
26
- lizzie borden took an axe, and gave her father forty whacks
27
- then gave her mother forty-one, and left a tragic puzzle
28
- if only they had given her an instrument, those puritans
29
- had lost the plot completely
30
- see what happens when you muzzle
31
- a person’s creativity
32
- and do not let them sing and scream
33
- and nowadays it’s worse ‘cause kids have automatic handguns
34
- it takes about an hour to learn how to play the ukulele
35
- about same to teach someone to build a standard pipe bomb
36
- YOU DO THE MATH
37
-
38
- so play your favorite cover song, especially if the words are wrong
39
- ‘cos even if your grades are bad, it doesn’t mean you’re failing
40
- do your homework with a fork
41
- and eat your fruit loops in the dark
42
- and bring your flask of jack to work
43
- and play your ukulele
44
-
45
- ukulele, thing of wonder
46
- ukulele, wand of thunder
47
- you can play the ukulele, too
48
- in london and down under
49
- play joan jett, and play jacques brel
50
- and eminem and neutral milk hotel
51
- the children crush the hatred
52
- play your ukulele naked
53
- and if anybody tries to steal your ukulele, let them take it
54
-
55
- imagine there’s no music, imagine there are no songs
56
- imagine that john lennon wasn’t shot in front of his apartment
57
- imagine if john lennon had composed “imagine” on the ukulele
58
- maybe folks would have more clearly got the message
59
-
60
- you may think my approach is simple-minded and naïve
61
- like if you want to save the world then why not quit and feed the hungry
62
- but people for millennia have needed music to survive
63
- and that’s why i’ve promised john that i will not feel guilty
64
-
65
- so play your favorite beatles’ song
66
- and make the subway fall in love
67
- they’re only $19.95, that’s not a lot of money
68
- play until the sun comes up
69
- and play until your fingers suffer
70
- play LCD soundsystem songs on your ukulele
71
- quit the bitching on your blog
72
- and stop pretending art is hard
73
- just limit yourself to three chords
74
- and do not practice daily
75
- you’ll minimize some stranger’s sadness
76
- with a piece of wood and plastic
77
- holy fuck it’s so fantastic, playing ukulele
78
- eat your homework with a fork
79
- and do your fruit loops in the dark
80
- bring your etch-a-sketch to work
81
- your flask of jack
82
- your vibrator
83
- your fear of heights
84
- your nikon lens
85
- your mom and dad
86
- your disco stick
87
- your soundtrack from “karate kid”
88
- your ginsu knives
89
- your rosary
90
- your new rebecca black CD
91
- your favorite room
92
- your bowie knife
93
- your stuffed giraffe
94
- your new glass eye
95
- your sousaphone
96
- your breakfast tea
97
- your nick drake tapes
98
- your giving tree
99
- your ice cream truck
100
- your missing wife
101
- your will to live
102
- your urge to cry
103
- remember we’re all going to die
104
- so PLAY YOUR UKULELE
105
-
106
- — Amanda Palmer
1
+ This is free and unencumbered software released into the public domain.
2
+
3
+ Anyone is free to copy, modify, publish, use, compile, sell, or
4
+ distribute this software, either in source code form or as a compiled
5
+ binary, for any purpose, commercial or non-commercial, and by any
6
+ means.
7
+
8
+ In jurisdictions that recognize copyright laws, the author or authors
9
+ of this software dedicate any and all copyright interest in the
10
+ software to the public domain. We make this dedication for the benefit
11
+ of the public at large and to the detriment of our heirs and
12
+ successors. We intend this dedication to be an overt act of
13
+ relinquishment in perpetuity of all present and future rights to this
14
+ software under copyright law.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ For more information, please refer to <http://unlicense.org/>
metadata CHANGED
@@ -1,68 +1,61 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: digiusb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
5
- prerelease:
4
+ version: 1.0.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Bluebie
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-11 00:00:00.000000000 Z
11
+ date: 2013-09-21 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: libusb
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 0.2.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 0.2.0
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: colorist
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: 0.0.2
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: 0.0.2
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: colored
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '1.2'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '1.2'
62
- description: ! "A tiny library for talking to digispark (a small arduino clone) over
63
- usb a bit like talking\n to a real arduino through a serial port! This library
64
- works with the DigiUSB library built in to Digistump's\n version of the Arduino
65
- software. Also includes a tiny terminal tool, kinda like telnet for digisparks"
55
+ description: |-
56
+ A tiny library for talking to digispark (a small arduino clone) over usb a bit like talking
57
+ to a real arduino through a serial port! This library works with the DigiUSB library built in to Digistump's
58
+ version of the Arduino software. Also includes a tiny terminal tool, kinda like telnet for digisparks
66
59
  email: a@creativepony.com
67
60
  executables:
68
61
  - digiterm
@@ -75,10 +68,12 @@ files:
75
68
  - license.txt
76
69
  - examples/digiblink.rb
77
70
  - examples/finn.rb
78
- - !binary |-
79
- YmluL2RpZ2l0ZXJt
71
+ - bin/digiterm
80
72
  homepage: http://github.com/Bluebie/digiusb.rb
81
- licenses: []
73
+ licenses:
74
+ - Unlicense
75
+ - CC0
76
+ metadata: {}
82
77
  post_install_message:
83
78
  rdoc_options:
84
79
  - --main
@@ -86,22 +81,19 @@ rdoc_options:
86
81
  require_paths:
87
82
  - lib
88
83
  required_ruby_version: !ruby/object:Gem::Requirement
89
- none: false
90
84
  requirements:
91
- - - ! '>='
85
+ - - '>='
92
86
  - !ruby/object:Gem::Version
93
87
  version: 1.9.3
94
88
  required_rubygems_version: !ruby/object:Gem::Requirement
95
- none: false
96
89
  requirements:
97
- - - ! '>='
90
+ - - '>='
98
91
  - !ruby/object:Gem::Version
99
92
  version: '0'
100
93
  requirements: []
101
94
  rubyforge_project:
102
- rubygems_version: 1.8.24
95
+ rubygems_version: 2.0.3
103
96
  signing_key:
104
- specification_version: 3
97
+ specification_version: 4
105
98
  summary: a tiny library for talking to digisparks
106
99
  test_files: []
107
- has_rdoc: