tinkerforge 2.0.13 → 2.1.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.
- data/lib/tinkerforge/brick_dc.rb +4 -11
- data/lib/tinkerforge/brick_imu.rb +17 -16
- data/lib/tinkerforge/brick_master.rb +96 -86
- data/lib/tinkerforge/brick_servo.rb +5 -12
- data/lib/tinkerforge/brick_stepper.rb +4 -29
- data/lib/tinkerforge/bricklet_ambient_light.rb +4 -5
- data/lib/tinkerforge/bricklet_analog_in.rb +4 -5
- data/lib/tinkerforge/bricklet_analog_out.rb +4 -5
- data/lib/tinkerforge/bricklet_barometer.rb +4 -9
- data/lib/tinkerforge/bricklet_current12.rb +4 -5
- data/lib/tinkerforge/bricklet_current25.rb +4 -5
- data/lib/tinkerforge/bricklet_distance_ir.rb +4 -5
- data/lib/tinkerforge/bricklet_distance_us.rb +4 -5
- data/lib/tinkerforge/bricklet_dual_button.rb +4 -7
- data/lib/tinkerforge/bricklet_dual_relay.rb +4 -13
- data/lib/tinkerforge/bricklet_gps.rb +4 -5
- data/lib/tinkerforge/bricklet_hall_effect.rb +6 -5
- data/lib/tinkerforge/bricklet_humidity.rb +4 -5
- data/lib/tinkerforge/bricklet_industrial_digital_in_4.rb +8 -6
- data/lib/tinkerforge/bricklet_industrial_digital_out_4.rb +7 -11
- data/lib/tinkerforge/bricklet_industrial_dual_0_20ma.rb +4 -5
- data/lib/tinkerforge/bricklet_industrial_quad_relay.rb +9 -13
- data/lib/tinkerforge/bricklet_io16.rb +15 -21
- data/lib/tinkerforge/bricklet_io4.rb +11 -17
- data/lib/tinkerforge/bricklet_joystick.rb +4 -5
- data/lib/tinkerforge/bricklet_lcd_16x2.rb +4 -5
- data/lib/tinkerforge/bricklet_lcd_20x4.rb +4 -5
- data/lib/tinkerforge/bricklet_led_strip.rb +6 -5
- data/lib/tinkerforge/bricklet_line.rb +4 -5
- data/lib/tinkerforge/bricklet_linear_poti.rb +4 -5
- data/lib/tinkerforge/bricklet_moisture.rb +4 -5
- data/lib/tinkerforge/bricklet_motion_detector.rb +4 -5
- data/lib/tinkerforge/bricklet_multi_touch.rb +4 -5
- data/lib/tinkerforge/bricklet_piezo_buzzer.rb +4 -5
- data/lib/tinkerforge/bricklet_piezo_speaker.rb +4 -5
- data/lib/tinkerforge/bricklet_ptc.rb +4 -5
- data/lib/tinkerforge/bricklet_remote_switch.rb +4 -5
- data/lib/tinkerforge/bricklet_rotary_encoder.rb +4 -5
- data/lib/tinkerforge/bricklet_rotary_poti.rb +4 -5
- data/lib/tinkerforge/bricklet_segment_display_4x7.rb +5 -6
- data/lib/tinkerforge/bricklet_sound_intensity.rb +4 -5
- data/lib/tinkerforge/bricklet_temperature.rb +4 -5
- data/lib/tinkerforge/bricklet_temperature_ir.rb +4 -5
- data/lib/tinkerforge/bricklet_tilt.rb +4 -5
- data/lib/tinkerforge/bricklet_voltage.rb +4 -5
- data/lib/tinkerforge/bricklet_voltage_current.rb +4 -5
- data/lib/tinkerforge/ip_connection.rb +73 -6
- data/lib/tinkerforge/version.rb +1 -1
- metadata +2 -2
@@ -1,8 +1,8 @@
|
|
1
1
|
# -*- ruby encoding: utf-8 -*-
|
2
2
|
#############################################################
|
3
|
-
# This file was automatically generated on
|
3
|
+
# This file was automatically generated on 2014-04-08. #
|
4
4
|
# #
|
5
|
-
# Bindings Version 2.0
|
5
|
+
# Bindings Version 2.1.0 #
|
6
6
|
# #
|
7
7
|
# If you have a bugfix for this file and want to commit it, #
|
8
8
|
# please fix the bug in the generator. You can find a link #
|
@@ -83,9 +83,8 @@ module Tinkerforge
|
|
83
83
|
#
|
84
84
|
# The position can be 'a', 'b', 'c' or 'd'.
|
85
85
|
#
|
86
|
-
# The device
|
87
|
-
#
|
88
|
-
# .. versionadded:: 2.0.0~(Plugin)
|
86
|
+
# The device identifier numbers can be found :ref:`here <device_identifier>`.
|
87
|
+
# |device_identifier_constant|
|
89
88
|
def get_identity
|
90
89
|
send_request(FUNCTION_GET_IDENTITY, [], '', 25, 'Z8 Z8 k C3 C3 S')
|
91
90
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# -*- ruby encoding: utf-8 -*-
|
2
2
|
#############################################################
|
3
|
-
# This file was automatically generated on
|
3
|
+
# This file was automatically generated on 2014-04-08. #
|
4
4
|
# #
|
5
|
-
# Bindings Version 2.0
|
5
|
+
# Bindings Version 2.1.0 #
|
6
6
|
# #
|
7
7
|
# If you have a bugfix for this file and want to commit it, #
|
8
8
|
# please fix the bug in the generator. You can find a link #
|
@@ -227,9 +227,8 @@ module Tinkerforge
|
|
227
227
|
#
|
228
228
|
# The position can be 'a', 'b', 'c' or 'd'.
|
229
229
|
#
|
230
|
-
# The device
|
231
|
-
#
|
232
|
-
# .. versionadded:: 2.0.0~(Plugin)
|
230
|
+
# The device identifier numbers can be found :ref:`here <device_identifier>`.
|
231
|
+
# |device_identifier_constant|
|
233
232
|
def get_identity
|
234
233
|
send_request(FUNCTION_GET_IDENTITY, [], '', 25, 'Z8 Z8 k C3 C3 S')
|
235
234
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# -*- ruby encoding: utf-8 -*-
|
2
2
|
#############################################################
|
3
|
-
# This file was automatically generated on
|
3
|
+
# This file was automatically generated on 2014-04-08. #
|
4
4
|
# #
|
5
|
-
# Bindings Version 2.0
|
5
|
+
# Bindings Version 2.1.0 #
|
6
6
|
# #
|
7
7
|
# If you have a bugfix for this file and want to commit it, #
|
8
8
|
# please fix the bug in the generator. You can find a link #
|
@@ -374,9 +374,8 @@ module Tinkerforge
|
|
374
374
|
#
|
375
375
|
# The position can be 'a', 'b', 'c' or 'd'.
|
376
376
|
#
|
377
|
-
# The device
|
378
|
-
#
|
379
|
-
# .. versionadded:: 2.0.0~(Plugin)
|
377
|
+
# The device identifier numbers can be found :ref:`here <device_identifier>`.
|
378
|
+
# |device_identifier_constant|
|
380
379
|
def get_identity
|
381
380
|
send_request(FUNCTION_GET_IDENTITY, [], '', 25, 'Z8 Z8 k C3 C3 S')
|
382
381
|
end
|
@@ -1,12 +1,15 @@
|
|
1
1
|
# -*- ruby encoding: utf-8 -*-
|
2
|
-
# Copyright (C) 2012-
|
2
|
+
# Copyright (C) 2012-2014 Matthias Bolte <matthias@tinkerforge.com>
|
3
3
|
#
|
4
4
|
# Redistribution and use in source and binary forms of this file,
|
5
|
-
# with or without modification, are permitted.
|
5
|
+
# with or without modification, are permitted. See the Creative
|
6
|
+
# Commons Zero (CC0 1.0) License for more details.
|
6
7
|
|
7
8
|
require 'socket'
|
8
9
|
require 'thread'
|
9
10
|
require 'timeout'
|
11
|
+
require 'securerandom'
|
12
|
+
require 'openssl'
|
10
13
|
|
11
14
|
module Tinkerforge
|
12
15
|
class Base58
|
@@ -429,6 +432,31 @@ module Tinkerforge
|
|
429
432
|
end
|
430
433
|
end
|
431
434
|
|
435
|
+
# internal
|
436
|
+
class BrickDaemon < Device
|
437
|
+
FUNCTION_GET_AUTHENTICATION_NONCE = 1 # :nodoc:
|
438
|
+
FUNCTION_AUTHENTICATE = 2 # :nodoc:
|
439
|
+
|
440
|
+
# Creates an object with the unique device ID <tt>uid</tt> and adds it to
|
441
|
+
# the IP Connection <tt>ipcon</tt>.
|
442
|
+
def initialize(uid, ipcon)
|
443
|
+
super uid, ipcon
|
444
|
+
|
445
|
+
@api_version = [2, 0, 0]
|
446
|
+
|
447
|
+
@response_expected[FUNCTION_GET_AUTHENTICATION_NONCE] = RESPONSE_EXPECTED_ALWAYS_TRUE
|
448
|
+
@response_expected[FUNCTION_AUTHENTICATE] = RESPONSE_EXPECTED_TRUE
|
449
|
+
end
|
450
|
+
|
451
|
+
def get_authentication_nonce
|
452
|
+
send_request(FUNCTION_GET_AUTHENTICATION_NONCE, [], '', 4, 'C4')
|
453
|
+
end
|
454
|
+
|
455
|
+
def authenticate(client_nonce, digest)
|
456
|
+
send_request(FUNCTION_AUTHENTICATE, [client_nonce, digest], 'C4 C20', 0, '')
|
457
|
+
end
|
458
|
+
end
|
459
|
+
|
432
460
|
class IPConnection
|
433
461
|
attr_accessor :devices
|
434
462
|
attr_accessor :timeout
|
@@ -469,9 +497,12 @@ module Tinkerforge
|
|
469
497
|
@auto_reconnect_allowed = false
|
470
498
|
@auto_reconnect_pending = false
|
471
499
|
|
472
|
-
@next_sequence_number = 0
|
500
|
+
@next_sequence_number = 0 # protected by sequence_number_mutex
|
473
501
|
@sequence_number_mutex = Mutex.new
|
474
502
|
|
503
|
+
@next_authentication_nonce = 0 # protected by authentication_mutex
|
504
|
+
@authentication_mutex = Mutex.new # protects authentication handshake
|
505
|
+
|
475
506
|
@devices = {}
|
476
507
|
|
477
508
|
@registered_callbacks = {}
|
@@ -491,6 +522,8 @@ module Tinkerforge
|
|
491
522
|
@disconnect_probe_thread = nil # protected by socket_mutex
|
492
523
|
|
493
524
|
@waiter_queue = Queue.new
|
525
|
+
|
526
|
+
@brickd = BrickDaemon.new '2', self
|
494
527
|
end
|
495
528
|
|
496
529
|
# Creates a TCP/IP connection to the given <tt>host</tt> and <tt>port</tt>.
|
@@ -551,6 +584,32 @@ module Tinkerforge
|
|
551
584
|
end
|
552
585
|
end
|
553
586
|
|
587
|
+
# Performs an authentication handshake with the connected Brick Daemon or
|
588
|
+
# WIFI/Ethernet Extension. If the handshake succeeds the connection switches
|
589
|
+
# from non-authenticated to authenticated state and communication can
|
590
|
+
# continue as normal. If the handshake fails then the connection gets closed.
|
591
|
+
# Authentication can fail if the wrong secret was used or if authentication
|
592
|
+
# is not enabled at all on the Brick Daemon or the WIFI/Ethernet Extension.
|
593
|
+
#
|
594
|
+
# For more information about authentication see
|
595
|
+
# http://www.tinkerforge.com/en/doc/Tutorials/Tutorial_Authentication/Tutorial.html
|
596
|
+
def authenticate(secret)
|
597
|
+
@authentication_mutex.synchronize {
|
598
|
+
if @next_authentication_nonce == 0
|
599
|
+
@next_authentication_nonce = SecureRandom.random_number(1 << 32)
|
600
|
+
end
|
601
|
+
|
602
|
+
server_nonce = @brickd.get_authentication_nonce
|
603
|
+
client_nonce = unpack(pack([@next_authentication_nonce], 'L'), 'C4')[0]
|
604
|
+
@next_authentication_nonce += 1
|
605
|
+
nonce_bytes = pack [server_nonce, client_nonce], 'C4 C4'
|
606
|
+
digest_bytes = OpenSSL::HMAC.digest 'sha1', secret, nonce_bytes
|
607
|
+
digest = unpack(digest_bytes, 'C20')[0]
|
608
|
+
|
609
|
+
@brickd.authenticate client_nonce, digest
|
610
|
+
}
|
611
|
+
end
|
612
|
+
|
554
613
|
# Can return the following states:
|
555
614
|
#
|
556
615
|
# - CONNECTION_STATE_DISCONNECTED: No connection is established.
|
@@ -572,7 +631,7 @@ module Tinkerforge
|
|
572
631
|
# the IP Connection will try to reconnect to the previously given
|
573
632
|
# host and port, if the connection is lost.
|
574
633
|
#
|
575
|
-
# Default value is
|
634
|
+
# Default value is <tt>true</tt>.
|
576
635
|
def set_auto_reconnect(auto_reconnect)
|
577
636
|
@auto_reconnect = auto_reconnect
|
578
637
|
|
@@ -666,6 +725,7 @@ module Tinkerforge
|
|
666
725
|
[header, response_expected, sequence_number]
|
667
726
|
end
|
668
727
|
|
728
|
+
# internal
|
669
729
|
def send_request(request)
|
670
730
|
@socket_mutex.synchronize {
|
671
731
|
if @socket == nil
|
@@ -744,8 +804,8 @@ module Tinkerforge
|
|
744
804
|
connect_reason = CONNECT_REASON_REQUEST
|
745
805
|
end
|
746
806
|
|
747
|
-
@auto_reconnect_allowed = false
|
748
|
-
@auto_reconnect_pending = false
|
807
|
+
@auto_reconnect_allowed = false
|
808
|
+
@auto_reconnect_pending = false
|
749
809
|
|
750
810
|
@callback.queue.push [QUEUE_KIND_META, [CALLBACK_CONNECTED,
|
751
811
|
connect_reason, nil]]
|
@@ -812,6 +872,13 @@ module Tinkerforge
|
|
812
872
|
rescue Errno::ECONNRESET
|
813
873
|
handle_disconnect_by_peer DISCONNECT_REASON_SHUTDOWN, socket_id, false
|
814
874
|
break
|
875
|
+
rescue Errno::ESHUTDOWN
|
876
|
+
# shutdown was called from disconnect_unlocked
|
877
|
+
break
|
878
|
+
end
|
879
|
+
|
880
|
+
if not @receive_flag
|
881
|
+
break
|
815
882
|
end
|
816
883
|
|
817
884
|
if data.length == 0
|
data/lib/tinkerforge/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tinkerforge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-04-08 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email: matthias@tinkerforge.com
|