digiusb 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: