sb-ble 0.5.0
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.
- checksums.yaml +7 -0
- data/.rspec +1 -0
- data/.semver +5 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +130 -0
- data/LICENSE +21 -0
- data/README.org +62 -0
- data/Rakefile +51 -0
- data/bin/rble +0 -0
- data/lib/ble.rb +112 -0
- data/lib/ble/adapter.rb +162 -0
- data/lib/ble/agent.rb +46 -0
- data/lib/ble/char_desc.rb +63 -0
- data/lib/ble/char_registry.rb +142 -0
- data/lib/ble/characteristic.rb +85 -0
- data/lib/ble/db_eddystone.rb +50 -0
- data/lib/ble/db_nordic.rb +26 -0
- data/lib/ble/db_sig_characteristic.rb +142 -0
- data/lib/ble/db_sig_service.rb +59 -0
- data/lib/ble/device.rb +494 -0
- data/lib/ble/notifications.rb +44 -0
- data/lib/ble/service.rb +121 -0
- data/lib/ble/uuid.rb +25 -0
- data/lib/ble/version.rb +15 -0
- data/sb-ble.gemspec +112 -0
- data/spec/ruby-ble_spec.rb +7 -0
- data/spec/spec_helper.rb +29 -0
- metadata +296 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
module BLE
|
2
|
+
module Notifications
|
3
|
+
|
4
|
+
# Registers current device for notifications of the given _characteristic_.
|
5
|
+
# Synonym for 'subscribe' or 'activate'.
|
6
|
+
# This step is required in order to later receive notifications.
|
7
|
+
# @param service [String, Symbol]
|
8
|
+
# @param characteristic [String, Symbol]
|
9
|
+
#
|
10
|
+
def start_notify!(service, characteristic)
|
11
|
+
char= _find_characteristic(service, characteristic)
|
12
|
+
if char.flag?('notify')
|
13
|
+
char.notify!
|
14
|
+
else
|
15
|
+
raise OperationNotSupportedError.new("No notifications available for characteristic #{characteristic}")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# Registers the callback to be invoked when a notification from the given _characteristic_ is received.
|
21
|
+
#
|
22
|
+
# NOTE: Requires the device to be subscribed to _characteristic_ notifications.
|
23
|
+
# @param service [String, Symbol]
|
24
|
+
# @param characteristic [String, Symbol]
|
25
|
+
# @param raw [Boolean] When raw is true the value (set/get) is a binary string, instead of an object corresponding to the decoded characteristic (float, integer, array, ...)
|
26
|
+
# @param callback [Proc] This callback will have the notified value as argument.
|
27
|
+
#
|
28
|
+
def on_notification(service, characteristic, raw: false, &callback)
|
29
|
+
_require_connection!
|
30
|
+
char= _find_characteristic(service, characteristic)
|
31
|
+
if char.flag?('notify')
|
32
|
+
char.on_change(raw: raw) { |val|
|
33
|
+
callback.call(val)
|
34
|
+
}
|
35
|
+
elsif char.flag?('encrypt-read') ||
|
36
|
+
char.flag?('encrypt-authenticated-read')
|
37
|
+
raise NotYetImplemented
|
38
|
+
else
|
39
|
+
raise AccessUnavailable
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
data/lib/ble/service.rb
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
module BLE
|
2
|
+
# Build information about {https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx Bluetooth Services}
|
3
|
+
#
|
4
|
+
# To add a new service description:
|
5
|
+
# BLE::Service.add '63a83b9c-0fa0-4d04-8ef9-23be4ed36231',
|
6
|
+
# name: 'World domination',
|
7
|
+
# type: 'net.cortex-minus.service.world_domination'
|
8
|
+
#
|
9
|
+
# Returned service description will be a hash:
|
10
|
+
# {
|
11
|
+
# name: "Bluetooth service name",
|
12
|
+
# type: "org.bluetooth.service.name",
|
13
|
+
# uuid: "128bit-uuid-string"
|
14
|
+
# }
|
15
|
+
#
|
16
|
+
module Service
|
17
|
+
# Notify of service not found
|
18
|
+
class NotFound < BLE::NotFound
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
DB_UUID = {}
|
23
|
+
DB_TYPE = {}
|
24
|
+
DB_NICKNAME = {}
|
25
|
+
|
26
|
+
public
|
27
|
+
# Get a service description from it's id.
|
28
|
+
# The id could be either a uuid, a type, or a nickname
|
29
|
+
#
|
30
|
+
# @param id [Symbol,String] uuid, type or nickname
|
31
|
+
# @return [Hash] service description
|
32
|
+
def self.[](id)
|
33
|
+
case id
|
34
|
+
when Symbol then DB_NICKNAME[id]
|
35
|
+
when UUID::REGEX then DB_UUID[id]
|
36
|
+
when String then DB_TYPE[id]
|
37
|
+
when Integer then DB_UUID[BLE::UUID(id)]
|
38
|
+
else raise ArgumentError, "invalid type for service id"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Get service description from nickname.
|
43
|
+
#
|
44
|
+
# @param id [Symbol] nickname
|
45
|
+
# @return [Hash] service description
|
46
|
+
def self.by_nickname(id)
|
47
|
+
DB_NICKNAME[id]
|
48
|
+
end
|
49
|
+
|
50
|
+
# Get service description from uuid.
|
51
|
+
#
|
52
|
+
# @param id [String] uuid
|
53
|
+
# @return [Hash] service description
|
54
|
+
def self.by_uuid(id)
|
55
|
+
DB_UUID[id]
|
56
|
+
end
|
57
|
+
|
58
|
+
# Get service description from type
|
59
|
+
#
|
60
|
+
# @param id [Strig] type
|
61
|
+
# @return [Hash] service description
|
62
|
+
def self.by_type(id)
|
63
|
+
DB_TYPE[id]
|
64
|
+
end
|
65
|
+
|
66
|
+
# Add a service description.
|
67
|
+
# @example Add a service description with a 16-bit uuid
|
68
|
+
# module Service
|
69
|
+
# add 0x1800,
|
70
|
+
# name: 'Generic Access',
|
71
|
+
# type: 'org.bluetooth.service.generic_access'
|
72
|
+
# end
|
73
|
+
#
|
74
|
+
# @example Add a service description with a 128-bit uuid
|
75
|
+
# module Service
|
76
|
+
# add '63a83b9c-0fa0-4d04-8ef9-23be4ed36231',
|
77
|
+
# name: 'World domination',
|
78
|
+
# type: 'net.cortex-minus.service.world_domination'
|
79
|
+
# end
|
80
|
+
#
|
81
|
+
# @param uuid [Integer, String] 16-bit, 32-bit or 128-bit uuid
|
82
|
+
# @param name [String]
|
83
|
+
# @option opts :type [String] type
|
84
|
+
# @option opts :nick [Symbol] nickname
|
85
|
+
# @return [Hash] service description
|
86
|
+
def self.add(uuid, name:, **opts)
|
87
|
+
uuid = BLE::UUID(uuid)
|
88
|
+
type = opts.delete :type
|
89
|
+
nick = opts.delete :nick
|
90
|
+
if opts.first
|
91
|
+
raise ArgumentError, "unknown keyword: #{opts.first[0]}"
|
92
|
+
end
|
93
|
+
|
94
|
+
desc = DB_UUID[uuid] = {
|
95
|
+
uuid: uuid,
|
96
|
+
name: name,
|
97
|
+
}
|
98
|
+
|
99
|
+
# Add type if specified
|
100
|
+
if type
|
101
|
+
type = type.downcase
|
102
|
+
desc.merge!(type: type)
|
103
|
+
DB_TYPE[type] = desc
|
104
|
+
end
|
105
|
+
|
106
|
+
# Add nickname if specified or can be derived from type
|
107
|
+
if nick.nil? && type && type =~ /\.(?<key>[^.]+)$/
|
108
|
+
nick = $1.to_sym if type.start_with? 'org.bluetooth.service'
|
109
|
+
end
|
110
|
+
if nick
|
111
|
+
if DB_NICKNAME.include?(nick)
|
112
|
+
raise ArgumentError,
|
113
|
+
"nickname '#{nick}' already registered (uuid: #{uuid})"
|
114
|
+
end
|
115
|
+
DB_NICKNAME[nick] = desc
|
116
|
+
end
|
117
|
+
|
118
|
+
desc
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
data/lib/ble/uuid.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module BLE
|
2
|
+
# Cast value to a well-formatted 128bit UUID string
|
3
|
+
# @param [String, Integer] val uuid
|
4
|
+
# @return [String] well formated 128bit UUID
|
5
|
+
def self.UUID(val)
|
6
|
+
case val
|
7
|
+
when Integer
|
8
|
+
if !(0..4294967295).include?(val) # 2**32-1
|
9
|
+
raise ArgumentError, "not a 16-bit or 32-bit UUID"
|
10
|
+
end
|
11
|
+
([val].pack("L>").unpack('H*').first + GATT_BASE_UUID[8..-1])
|
12
|
+
when String
|
13
|
+
if val !~ UUID::REGEX
|
14
|
+
raise ArgumentError, "not a 128bit uuid string"
|
15
|
+
end
|
16
|
+
val.downcase
|
17
|
+
else raise ArgumentError, "invalid uuid type"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class UUID
|
22
|
+
# Regular expression for matching UUID 128-bit string
|
23
|
+
REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i
|
24
|
+
end
|
25
|
+
end
|
data/lib/ble/version.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
module BLE
|
2
|
+
# = Library version =
|
3
|
+
# Major version zero (0.y.z) is for initial development.
|
4
|
+
# Anything may change at any time.
|
5
|
+
# The public API should not be considered stable.
|
6
|
+
|
7
|
+
# 0.1.0 MINOR
|
8
|
+
# - [FEATURE] BLE notifications functionality.
|
9
|
+
# - [REFACTOR] Breaks Characteristic API
|
10
|
+
|
11
|
+
# 0.0.3 PATCH
|
12
|
+
# - [FIX] NotSupported exeption was not declared.
|
13
|
+
#
|
14
|
+
VERSION = '0.1.0'
|
15
|
+
end
|
data/sb-ble.gemspec
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
# Generated by juwelier
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: sb-ble 0.5.0 ruby lib
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "sb-ble".freeze
|
9
|
+
s.version = "0.5.0"
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib".freeze]
|
13
|
+
s.authors = ["Fred Mitchell & Sensorberg".freeze]
|
14
|
+
s.date = "2017-05-23"
|
15
|
+
s.description = "This supports LE Advertising".freeze
|
16
|
+
s.email = "frederick.mitchell@sensorberg.com".freeze
|
17
|
+
s.executables = ["rble".freeze]
|
18
|
+
s.extra_rdoc_files = [
|
19
|
+
"LICENSE",
|
20
|
+
"README.org"
|
21
|
+
]
|
22
|
+
s.files = [
|
23
|
+
".rspec",
|
24
|
+
".semver",
|
25
|
+
"Gemfile",
|
26
|
+
"Gemfile.lock",
|
27
|
+
"LICENSE",
|
28
|
+
"README.org",
|
29
|
+
"Rakefile",
|
30
|
+
"bin/rble",
|
31
|
+
"lib/ble.rb",
|
32
|
+
"lib/ble/adapter.rb",
|
33
|
+
"lib/ble/agent.rb",
|
34
|
+
"lib/ble/char_desc.rb",
|
35
|
+
"lib/ble/char_registry.rb",
|
36
|
+
"lib/ble/characteristic.rb",
|
37
|
+
"lib/ble/db_eddystone.rb",
|
38
|
+
"lib/ble/db_nordic.rb",
|
39
|
+
"lib/ble/db_sig_characteristic.rb",
|
40
|
+
"lib/ble/db_sig_service.rb",
|
41
|
+
"lib/ble/device.rb",
|
42
|
+
"lib/ble/notifications.rb",
|
43
|
+
"lib/ble/service.rb",
|
44
|
+
"lib/ble/uuid.rb",
|
45
|
+
"lib/ble/version.rb",
|
46
|
+
"sb-ble.gemspec",
|
47
|
+
"spec/ruby-ble_spec.rb",
|
48
|
+
"spec/spec_helper.rb"
|
49
|
+
]
|
50
|
+
s.homepage = "http://github.com/flajann2/ruby-ble".freeze
|
51
|
+
s.licenses = ["MIT".freeze]
|
52
|
+
s.rubygems_version = "2.6.11".freeze
|
53
|
+
s.summary = "Bluetooth Low Energy for Ruby -- Sensorberg Version".freeze
|
54
|
+
|
55
|
+
if s.respond_to? :specification_version then
|
56
|
+
s.specification_version = 4
|
57
|
+
|
58
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
59
|
+
s.add_runtime_dependency(%q<ruby-dbus>.freeze, ["~> 0"])
|
60
|
+
s.add_runtime_dependency(%q<semver2>.freeze, ["~> 3"])
|
61
|
+
s.add_development_dependency(%q<rspec>.freeze, ["~> 3"])
|
62
|
+
s.add_development_dependency(%q<yard>.freeze, ["~> 0"])
|
63
|
+
s.add_development_dependency(%q<rdoc>.freeze, ["~> 3"])
|
64
|
+
s.add_development_dependency(%q<bundler>.freeze, ["~> 1"])
|
65
|
+
s.add_development_dependency(%q<juwelier>.freeze, ["~> 2"])
|
66
|
+
s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
|
67
|
+
s.add_development_dependency(%q<pry>.freeze, ["~> 0"])
|
68
|
+
s.add_development_dependency(%q<pry-byebug>.freeze, ["~> 3"])
|
69
|
+
s.add_development_dependency(%q<pry-doc>.freeze, ["~> 0"])
|
70
|
+
s.add_development_dependency(%q<pry-remote>.freeze, ["~> 0"])
|
71
|
+
s.add_development_dependency(%q<pry-rescue>.freeze, ["~> 1"])
|
72
|
+
s.add_development_dependency(%q<pry-stack_explorer>.freeze, ["~> 0"])
|
73
|
+
s.add_development_dependency(%q<redcarpet>.freeze, [">= 0"])
|
74
|
+
s.add_development_dependency(%q<github-markup>.freeze, [">= 0"])
|
75
|
+
else
|
76
|
+
s.add_dependency(%q<ruby-dbus>.freeze, ["~> 0"])
|
77
|
+
s.add_dependency(%q<semver2>.freeze, ["~> 3"])
|
78
|
+
s.add_dependency(%q<rspec>.freeze, ["~> 3"])
|
79
|
+
s.add_dependency(%q<yard>.freeze, ["~> 0"])
|
80
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 3"])
|
81
|
+
s.add_dependency(%q<bundler>.freeze, ["~> 1"])
|
82
|
+
s.add_dependency(%q<juwelier>.freeze, ["~> 2"])
|
83
|
+
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
84
|
+
s.add_dependency(%q<pry>.freeze, ["~> 0"])
|
85
|
+
s.add_dependency(%q<pry-byebug>.freeze, ["~> 3"])
|
86
|
+
s.add_dependency(%q<pry-doc>.freeze, ["~> 0"])
|
87
|
+
s.add_dependency(%q<pry-remote>.freeze, ["~> 0"])
|
88
|
+
s.add_dependency(%q<pry-rescue>.freeze, ["~> 1"])
|
89
|
+
s.add_dependency(%q<pry-stack_explorer>.freeze, ["~> 0"])
|
90
|
+
s.add_dependency(%q<redcarpet>.freeze, [">= 0"])
|
91
|
+
s.add_dependency(%q<github-markup>.freeze, [">= 0"])
|
92
|
+
end
|
93
|
+
else
|
94
|
+
s.add_dependency(%q<ruby-dbus>.freeze, ["~> 0"])
|
95
|
+
s.add_dependency(%q<semver2>.freeze, ["~> 3"])
|
96
|
+
s.add_dependency(%q<rspec>.freeze, ["~> 3"])
|
97
|
+
s.add_dependency(%q<yard>.freeze, ["~> 0"])
|
98
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 3"])
|
99
|
+
s.add_dependency(%q<bundler>.freeze, ["~> 1"])
|
100
|
+
s.add_dependency(%q<juwelier>.freeze, ["~> 2"])
|
101
|
+
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
102
|
+
s.add_dependency(%q<pry>.freeze, ["~> 0"])
|
103
|
+
s.add_dependency(%q<pry-byebug>.freeze, ["~> 3"])
|
104
|
+
s.add_dependency(%q<pry-doc>.freeze, ["~> 0"])
|
105
|
+
s.add_dependency(%q<pry-remote>.freeze, ["~> 0"])
|
106
|
+
s.add_dependency(%q<pry-rescue>.freeze, ["~> 1"])
|
107
|
+
s.add_dependency(%q<pry-stack_explorer>.freeze, ["~> 0"])
|
108
|
+
s.add_dependency(%q<redcarpet>.freeze, [">= 0"])
|
109
|
+
s.add_dependency(%q<github-markup>.freeze, [">= 0"])
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
|
3
|
+
module SimpleCov::Configuration
|
4
|
+
def clean_filters
|
5
|
+
@filters = []
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
SimpleCov.configure do
|
10
|
+
clean_filters
|
11
|
+
load_adapter 'test_frameworks'
|
12
|
+
end
|
13
|
+
|
14
|
+
ENV["COVERAGE"] && SimpleCov.start do
|
15
|
+
add_filter "/.rvm/"
|
16
|
+
end
|
17
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
18
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
19
|
+
|
20
|
+
require 'rspec'
|
21
|
+
require 'ruby-ble'
|
22
|
+
|
23
|
+
# Requires supporting files with custom matchers and macros, etc,
|
24
|
+
# in ./support/ and its subdirectories.
|
25
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
26
|
+
|
27
|
+
RSpec.configure do |config|
|
28
|
+
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,296 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sb-ble
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Fred Mitchell & Sensorberg
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-05-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ruby-dbus
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: semver2
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: yard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rdoc
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: juwelier
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pry
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pry-byebug
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '3'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '3'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: pry-doc
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: pry-remote
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: pry-rescue
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '1'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '1'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: pry-stack_explorer
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: redcarpet
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: github-markup
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - ">="
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0'
|
237
|
+
description: This supports LE Advertising
|
238
|
+
email: frederick.mitchell@sensorberg.com
|
239
|
+
executables:
|
240
|
+
- rble
|
241
|
+
extensions: []
|
242
|
+
extra_rdoc_files:
|
243
|
+
- LICENSE
|
244
|
+
- README.org
|
245
|
+
files:
|
246
|
+
- ".rspec"
|
247
|
+
- ".semver"
|
248
|
+
- Gemfile
|
249
|
+
- Gemfile.lock
|
250
|
+
- LICENSE
|
251
|
+
- README.org
|
252
|
+
- Rakefile
|
253
|
+
- bin/rble
|
254
|
+
- lib/ble.rb
|
255
|
+
- lib/ble/adapter.rb
|
256
|
+
- lib/ble/agent.rb
|
257
|
+
- lib/ble/char_desc.rb
|
258
|
+
- lib/ble/char_registry.rb
|
259
|
+
- lib/ble/characteristic.rb
|
260
|
+
- lib/ble/db_eddystone.rb
|
261
|
+
- lib/ble/db_nordic.rb
|
262
|
+
- lib/ble/db_sig_characteristic.rb
|
263
|
+
- lib/ble/db_sig_service.rb
|
264
|
+
- lib/ble/device.rb
|
265
|
+
- lib/ble/notifications.rb
|
266
|
+
- lib/ble/service.rb
|
267
|
+
- lib/ble/uuid.rb
|
268
|
+
- lib/ble/version.rb
|
269
|
+
- sb-ble.gemspec
|
270
|
+
- spec/ruby-ble_spec.rb
|
271
|
+
- spec/spec_helper.rb
|
272
|
+
homepage: http://github.com/flajann2/ruby-ble
|
273
|
+
licenses:
|
274
|
+
- MIT
|
275
|
+
metadata: {}
|
276
|
+
post_install_message:
|
277
|
+
rdoc_options: []
|
278
|
+
require_paths:
|
279
|
+
- lib
|
280
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
281
|
+
requirements:
|
282
|
+
- - ">="
|
283
|
+
- !ruby/object:Gem::Version
|
284
|
+
version: '0'
|
285
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
286
|
+
requirements:
|
287
|
+
- - ">="
|
288
|
+
- !ruby/object:Gem::Version
|
289
|
+
version: '0'
|
290
|
+
requirements: []
|
291
|
+
rubyforge_project:
|
292
|
+
rubygems_version: 2.6.11
|
293
|
+
signing_key:
|
294
|
+
specification_version: 4
|
295
|
+
summary: Bluetooth Low Energy for Ruby -- Sensorberg Version
|
296
|
+
test_files: []
|