sony_camera_remote_api 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +101 -98
- data/lib/sony_camera_remote_api.rb +52 -29
- data/lib/sony_camera_remote_api/camera_api.rb +14 -13
- data/lib/sony_camera_remote_api/camera_api_group.rb +7 -7
- data/lib/sony_camera_remote_api/client/main.rb +8 -30
- data/lib/sony_camera_remote_api/shelf.rb +1 -1
- data/lib/sony_camera_remote_api/version.rb +1 -1
- data/sony_camera_remote_api.gemspec +2 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b09ff475a257587236804069142d110d0176e751
|
4
|
+
data.tar.gz: 8bedc578a1e42c47cd9ef6deaf708cad2affaa03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8af7fd14d9a3c3805ee56821f655c21f4bb06b58fc4735d9b69fcdbff2f7cc825c8028e19c238800c3fa29a69321fc8b46a77d2fb48a23be5560727c2e6bccc7
|
7
|
+
data.tar.gz: b80072cf80afade4af08a6dfc49e6496762d8efe3370f54f7ad40ae47ecc5196544322df497a87e81b65bc5b9303b910f2f1566bd622ad8f3ee0abaaad7a2ff0
|
data/README.md
CHANGED
@@ -1,98 +1,101 @@
|
|
1
|
-
# Sony Remote Camera API Wrapper
|
2
|
-
|
3
|
-
A Ruby Gem that facilitates the use of Sony Remote Camera API.
|
4
|
-
|
5
|
-
- [Backgrounds](#backgrounds)
|
6
|
-
- [Features](#features)
|
7
|
-
- [Supported version](#supported-version)
|
8
|
-
- [Installation](#installation)
|
9
|
-
- [Usage](#usage)
|
10
|
-
- [Development](#development)
|
11
|
-
- [Contributing](#contributing)
|
12
|
-
- [License](#license)
|
13
|
-
|
14
|
-
|
15
|
-
## Backgrounds
|
16
|
-
|
17
|
-
[Sony Camera Remote API](https://developer.sony.com/develop/cameras/) allows us to control a number of Sony cameras, including Sony Action cams, Sony Alpha cameras and Lens Style cameras, wirelessly from another device.
|
18
|
-
But these APIs are quite low-level, so that we have to implement a lot of sequences while considering many pitfalls, which are less documented in their API reference.
|
19
|
-
This gem is a wrapper library that make it easy to use Sony camera functions for high-level applications.
|
20
|
-
|
21
|
-
|
22
|
-
## Features
|
23
|
-
|
24
|
-
* Streaming live-view images by one method
|
25
|
-
* Simplified contents transfer
|
26
|
-
* Consistent interface for changing parameters safely
|
27
|
-
* Auto reconnection
|
28
|
-
* Also supports the low-level APIs call
|
29
|
-
* Client application bundled
|
30
|
-
|
31
|
-
|
32
|
-
## Supported version
|
33
|
-
|
34
|
-
Ruby 2.0 or higher
|
35
|
-
|
36
|
-
## Installation
|
37
|
-
|
38
|
-
Add this line to your application's Gemfile:
|
39
|
-
|
40
|
-
```ruby
|
41
|
-
gem 'sony_camera_remote_api'
|
42
|
-
```
|
43
|
-
|
44
|
-
And then execute:
|
45
|
-
|
46
|
-
$ bundle
|
47
|
-
|
48
|
-
Or install it yourself as:
|
49
|
-
|
50
|
-
$ gem install sony_camera_remote_api
|
51
|
-
|
52
|
-
|
53
|
-
## Usage
|
54
|
-
|
55
|
-
1. Connect your PC to the camera
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
require 'sony_camera_remote_api
|
64
|
-
|
65
|
-
interface = "wlan0"
|
66
|
-
ssid = "DIRECT-xxxx:ILCE-QX1"
|
67
|
-
pass = "xxxxxxxx"
|
68
|
-
|
69
|
-
SonyCameraRemoteAPI::
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
1
|
+
# Sony Remote Camera API Wrapper
|
2
|
+
|
3
|
+
A Ruby Gem that facilitates the use of Sony Remote Camera API.
|
4
|
+
|
5
|
+
- [Backgrounds](#backgrounds)
|
6
|
+
- [Features](#features)
|
7
|
+
- [Supported version](#supported-version)
|
8
|
+
- [Installation](#installation)
|
9
|
+
- [Usage](#usage)
|
10
|
+
- [Development](#development)
|
11
|
+
- [Contributing](#contributing)
|
12
|
+
- [License](#license)
|
13
|
+
|
14
|
+
|
15
|
+
## Backgrounds
|
16
|
+
|
17
|
+
[Sony Camera Remote API](https://developer.sony.com/develop/cameras/) allows us to control a number of Sony cameras, including Sony Action cams, Sony Alpha cameras and Lens Style cameras, wirelessly from another device.
|
18
|
+
But these APIs are quite low-level, so that we have to implement a lot of sequences while considering many pitfalls, which are less documented in their API reference.
|
19
|
+
This gem is a wrapper library that make it easy to use Sony camera functions for high-level applications.
|
20
|
+
|
21
|
+
|
22
|
+
## Features
|
23
|
+
|
24
|
+
* Streaming live-view images by one method
|
25
|
+
* Simplified contents transfer
|
26
|
+
* Consistent interface for changing parameters safely
|
27
|
+
* Auto reconnection
|
28
|
+
* Also supports the low-level APIs call
|
29
|
+
* Client application bundled
|
30
|
+
|
31
|
+
|
32
|
+
## Supported version
|
33
|
+
|
34
|
+
Ruby 2.0 or higher
|
35
|
+
|
36
|
+
## Installation
|
37
|
+
|
38
|
+
Add this line to your application's Gemfile:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
gem 'sony_camera_remote_api'
|
42
|
+
```
|
43
|
+
|
44
|
+
And then execute:
|
45
|
+
|
46
|
+
$ bundle
|
47
|
+
|
48
|
+
Or install it yourself as:
|
49
|
+
|
50
|
+
$ gem install sony_camera_remote_api
|
51
|
+
|
52
|
+
|
53
|
+
## Usage
|
54
|
+
|
55
|
+
1. Connect your PC (or device) to the camera with Direct Wi-Fi. If you are using Linux, it is recommended to use
|
56
|
+
Shelf class like the following example.
|
57
|
+
2. Create SonyCameraRemoteAPI::Camera instance with Shelf instance.
|
58
|
+
3. Now you can access all of camera APIs and useful wrapper methods!
|
59
|
+
|
60
|
+
This is an example code of capturing single still image.
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
require 'sony_camera_remote_api'
|
64
|
+
|
65
|
+
interface = "wlan0"
|
66
|
+
ssid = "DIRECT-xxxx:ILCE-QX1"
|
67
|
+
pass = "xxxxxxxx"
|
68
|
+
|
69
|
+
shelf = SonyCameraRemoteAPI::Shelf.new 'sonycam.shelf'
|
70
|
+
shelf.add_and_select ssid, pass, interface
|
71
|
+
shelf.connect
|
72
|
+
|
73
|
+
cam = SonyCameraRemoteAPI::Camera.new shelf
|
74
|
+
cam.change_function_to_shoot 'still', 'Single'
|
75
|
+
cam.capture_still
|
76
|
+
# => Captured jpeg file is transferred to your PC
|
77
|
+
```
|
78
|
+
|
79
|
+
For more information, see project's [Wiki](https://github.com/kota65535/sony_camera_remote_api/wiki).
|
80
|
+
|
81
|
+
|
82
|
+
## TODO
|
83
|
+
|
84
|
+
* Remote playback function
|
85
|
+
|
86
|
+
|
87
|
+
## Development
|
88
|
+
|
89
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
90
|
+
|
91
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
92
|
+
|
93
|
+
|
94
|
+
## Contributing
|
95
|
+
|
96
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/kota65535/sony_camera_remote_api. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
97
|
+
|
98
|
+
|
99
|
+
## License
|
100
|
+
|
101
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
@@ -38,16 +38,24 @@ module SonyCameraRemoteAPI
|
|
38
38
|
|
39
39
|
# Creates a new Camera object.
|
40
40
|
# @note It is good idea to save endpoint URLs by each cameras somewhere to omit SSDP search.
|
41
|
-
# @param [
|
42
|
-
# @param [Proc] reconnect_by Hook method called when Wi-Fi is disconnected.
|
43
|
-
#
|
44
|
-
# @param [
|
45
|
-
#
|
46
|
-
|
41
|
+
# @param [Shelf] shelf Shelf class object that is used for connection.
|
42
|
+
# @param [Proc] reconnect_by Hook method to reconnect to the camera, which is called when Wi-Fi is disconnected.
|
43
|
+
# Not necessary if +shelf+ is given.
|
44
|
+
# @param [String, IO, Array<String, IO>] log_file File name or stream to output log.
|
45
|
+
# @param [Boolean] finalize If +true+, stopRecMode API is called in the destructor.
|
46
|
+
# As far as I know, we have no problem even if we never call stopRecMode.
|
47
|
+
def initialize(shelf = nil, reconnect_by: nil, log_file: $stdout, log_level: Logger::INFO, finalize: false)
|
47
48
|
set_output log_file
|
48
49
|
set_level log_level
|
49
|
-
|
50
|
-
|
50
|
+
if shelf
|
51
|
+
@endpoints = shelf.ep || ssdp_search
|
52
|
+
shelf.set_ep @endpoints
|
53
|
+
@reconnect_by = shelf.method(:reconnect)
|
54
|
+
else
|
55
|
+
@endpoints = ssdp_search
|
56
|
+
end
|
57
|
+
@reconnect_by = reconnect_by if reconnect_by
|
58
|
+
|
51
59
|
@api_manager = CameraAPIManager.new @endpoints, reconnect_by: @reconnect_by
|
52
60
|
@cli = HTTPClient.new
|
53
61
|
@cli.connect_timeout = @cli.send_timeout = @cli.receive_timeout = 30
|
@@ -62,7 +70,8 @@ module SonyCameraRemoteAPI
|
|
62
70
|
end
|
63
71
|
end
|
64
72
|
|
65
|
-
|
73
|
+
|
74
|
+
# Destructor: this calls stopRecMode API to finish shooting.
|
66
75
|
def self.finalize(this)
|
67
76
|
proc do
|
68
77
|
this.stopRecMode!
|
@@ -73,10 +82,11 @@ module SonyCameraRemoteAPI
|
|
73
82
|
|
74
83
|
# Change camera function to 'Remote Shooting' and then set shooting mode.
|
75
84
|
# @param [String] mode Shoot mode
|
76
|
-
# @param [String] cont
|
85
|
+
# @param [String] cont Continuous shooting mode (only available when shoot mode is 'still')
|
77
86
|
# @return [void]
|
78
87
|
# @see 'Shoot mode parameters' in API reference
|
79
88
|
# @see 'Continuous shooting mode parameter' in API reference
|
89
|
+
# @todo make mode argument nullable
|
80
90
|
def change_function_to_shoot(mode, cont = nil)
|
81
91
|
# cameras that does not support CameraFunction API group has only 'Remote Shooting' function
|
82
92
|
set_parameter! :CameraFunction, 'Remote Shooting'
|
@@ -107,14 +117,15 @@ module SonyCameraRemoteAPI
|
|
107
117
|
# * MotionShot : take 10 pictures and render the movement into a single picture
|
108
118
|
# @param [Boolean] transfer Flag to transfer the postview image.
|
109
119
|
# @param [String] filename Name of image file to be transferred. If not given, original name is used.
|
110
|
-
#
|
111
|
-
# @param [String] prefix Prefix of
|
112
|
-
#
|
120
|
+
# Only available in Single/MotionShot shooting mode.
|
121
|
+
# @param [String] prefix Prefix of sequential image files to be transferred. If not given, original name is used.
|
122
|
+
# Only available in Burst shooting mode.
|
113
123
|
# @param [String] dir Directory where image file is saved. If not given, current directory is used.
|
114
124
|
# @return [String, Array<String>, nil] Filename of the transferred image(s). If 'transfer' is false, returns nil.
|
115
125
|
# @example
|
116
126
|
# # Initialize
|
117
127
|
# cam = SonyCameraRemoteAPI::Camera.new
|
128
|
+
#
|
118
129
|
# # Capture a single still image, and then save it as images/TEST.JPG.
|
119
130
|
# cam.change_function_to_shoot 'still', 'Single'
|
120
131
|
# cam.capture_still filename: 'TEST.JPG', dir: 'images'
|
@@ -156,10 +167,11 @@ module SonyCameraRemoteAPI
|
|
156
167
|
# @example
|
157
168
|
# # Initialize
|
158
169
|
# cam = SonyCameraRemoteAPI::Camera.new
|
170
|
+
# cam.change_function_to_shoot 'still', 'Continuous'
|
171
|
+
#
|
159
172
|
# # Start continuous shooting and transfer all images.
|
160
|
-
# cam.change_function_to_shoot('still', 'Continuous')
|
161
173
|
# cam.start_continuous_shooting
|
162
|
-
#
|
174
|
+
# sleep 5
|
163
175
|
# cam.stop_continuous_shooting(transfer: true)
|
164
176
|
def start_continuous_shooting
|
165
177
|
wait_event { |r| r[1]['cameraStatus'] == 'IDLE' }
|
@@ -210,10 +222,11 @@ module SonyCameraRemoteAPI
|
|
210
222
|
# @example
|
211
223
|
# # Initialize
|
212
224
|
# cam = SonyCameraRemoteAPI::Camera.new
|
213
|
-
# # Record movie and transfer it.
|
214
225
|
# cam.change_function_to_shoot('movie')
|
226
|
+
#
|
227
|
+
# # Record movie and transfer it.
|
215
228
|
# cam.start_movie_recording
|
216
|
-
#
|
229
|
+
# sleep 5
|
217
230
|
# cam.stop_movie_recording(transfer: true)
|
218
231
|
def start_movie_recording
|
219
232
|
wait_event { |r| r[1]['cameraStatus'] == 'IDLE' }
|
@@ -246,10 +259,11 @@ module SonyCameraRemoteAPI
|
|
246
259
|
# @example
|
247
260
|
# # Initialize
|
248
261
|
# cam = SonyCameraRemoteAPI::Camera.new
|
249
|
-
# # Start interval still recording (does not transfer).
|
250
262
|
# cam.change_function_to_shoot('intervalstill')
|
263
|
+
#
|
264
|
+
# # Start interval still recording (does not transfer).
|
251
265
|
# cam.start_interval_recording
|
252
|
-
#
|
266
|
+
# sleep 5
|
253
267
|
# cam.stop_interval_recording
|
254
268
|
def start_interval_recording
|
255
269
|
wait_event { |r| r[1]['cameraStatus'] == 'IDLE' }
|
@@ -283,10 +297,11 @@ module SonyCameraRemoteAPI
|
|
283
297
|
# @example
|
284
298
|
# # Initialize
|
285
299
|
# cam = SonyCameraRemoteAPI::Camera.new
|
286
|
-
# # Start loop movie recording (does not transfer).
|
287
300
|
# cam.change_function_to_shoot('looprec')
|
301
|
+
#
|
302
|
+
# # Start loop movie recording (does not transfer).
|
288
303
|
# cam.start_loop_recording
|
289
|
-
#
|
304
|
+
# sleep 5
|
290
305
|
# cam.stop_loop_recording
|
291
306
|
def start_loop_recording
|
292
307
|
wait_event { |r| r[1]['cameraStatus'] == 'IDLE' }
|
@@ -312,7 +327,7 @@ module SonyCameraRemoteAPI
|
|
312
327
|
end
|
313
328
|
|
314
329
|
|
315
|
-
#
|
330
|
+
# Do zoom.
|
316
331
|
# Zoom position can be specified by relative and absolute percentage within the range of 0-100.
|
317
332
|
# If Both option are specified, absolute position is preceded.
|
318
333
|
# @param [Fixnum] absolute Absolute position of the lense. 0 is the Wide-end and 100 is the Tele-end.
|
@@ -321,6 +336,7 @@ module SonyCameraRemoteAPI
|
|
321
336
|
# @example
|
322
337
|
# # Initialize
|
323
338
|
# cam = SonyCameraRemoteAPI::Camera.new
|
339
|
+
#
|
324
340
|
# cam.act_zoom(absolute: 0) # zoom out to the wide-end
|
325
341
|
# cam.act_zoom(absolute: 100) # zoom in to the tele-end
|
326
342
|
# cam.act_zoom(relative: -50) # zoom out by -50 from the current position
|
@@ -363,13 +379,14 @@ module SonyCameraRemoteAPI
|
|
363
379
|
|
364
380
|
|
365
381
|
# Do focus, which is the same as half-pressing the shutter button.
|
382
|
+
# @note You have to set shooting mode to 'still' before calling this method.
|
366
383
|
# @return [Boolean] +true+ if focus succeeded, +false+ if failed.
|
367
384
|
# @example
|
368
385
|
# # Initialize
|
369
386
|
# cam = SonyCameraRemoteAPI::Camera.new
|
370
|
-
# # Focus function is available only 'still' shoot mode
|
371
387
|
# cam.change_function_to_shoot 'still'
|
372
|
-
#
|
388
|
+
#
|
389
|
+
# # Capture forever only when succeeded to focus.
|
373
390
|
# loop do
|
374
391
|
# if cam.act_focus
|
375
392
|
# cam.capture_still
|
@@ -393,8 +410,9 @@ module SonyCameraRemoteAPI
|
|
393
410
|
|
394
411
|
|
395
412
|
# Do touch focus, by which we can specify the focus position.
|
396
|
-
# @note
|
397
|
-
#
|
413
|
+
# @note You have to set shooting mode to 'still' before calling this method.
|
414
|
+
# @note Tracking focus and Touch focus are exclusive functions.
|
415
|
+
# So tracking focus is automatically disabled by calling this method.
|
398
416
|
# @param [Fixnum] x Percentage of X-axis position.
|
399
417
|
# @param [Fixnum] y Percentage of Y-axis position.
|
400
418
|
# @return [Boolean] AFType ('Touch' or 'Wide') if focus succeeded. nil if failed.
|
@@ -402,6 +420,8 @@ module SonyCameraRemoteAPI
|
|
402
420
|
# @example
|
403
421
|
# # Initialize
|
404
422
|
# cam = SonyCameraRemoteAPI::Camera.new
|
423
|
+
# cam.change_function_to_shoot 'still'
|
424
|
+
#
|
405
425
|
# # Try to focus on upper-middle position.
|
406
426
|
# if cam.act_touch_focus(50, 10)
|
407
427
|
# cam.capture_still
|
@@ -427,6 +447,7 @@ module SonyCameraRemoteAPI
|
|
427
447
|
|
428
448
|
# Do tracking focus, by which the focus position automatically track the object.
|
429
449
|
# The focus position is expressed by percentage to the origin of coordinates, which is upper left of liveview images.
|
450
|
+
# @note You have to set shooting mode to 'still' before calling this method.
|
430
451
|
# @param [Fixnum] x Percentage of X-axis position.
|
431
452
|
# @param [Fixnum] y Percentage of Y-axis position.
|
432
453
|
# @return [Boolean] +true+ if focus succeeded, +false+ if failed.
|
@@ -434,6 +455,7 @@ module SonyCameraRemoteAPI
|
|
434
455
|
# # Initialize
|
435
456
|
# cam = SonyCameraRemoteAPI::Camera.new
|
436
457
|
# cam.change_function_to_shoot 'still'
|
458
|
+
#
|
437
459
|
# # Start tracking focus from the center position
|
438
460
|
# if cam.act_tracking_focus(50, 50)
|
439
461
|
# th = cam.start_liveview_thread do |img, info|
|
@@ -489,7 +511,8 @@ module SonyCameraRemoteAPI
|
|
489
511
|
# @example
|
490
512
|
# # Initialize
|
491
513
|
# cam = SonyCameraRemoteAPI::Camera.new
|
492
|
-
# cam.change_function_to_shoot 'still'
|
514
|
+
# cam.change_function_to_shoot 'still'
|
515
|
+
#
|
493
516
|
# # Try to focus on upper-middle position.
|
494
517
|
# if cam.act_tracking_focus(50, 10)
|
495
518
|
# puts cam.focused?
|
@@ -1095,7 +1118,7 @@ module SonyCameraRemoteAPI
|
|
1095
1118
|
# If error still continues, give it up and raise the error.
|
1096
1119
|
def reconnect_and_retry(retrying: true, num: 1, hook: nil)
|
1097
1120
|
yield
|
1098
|
-
rescue HTTPClient::TimeoutError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED => e
|
1121
|
+
rescue HTTPClient::BadResponseError, HTTPClient::TimeoutError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED => e
|
1099
1122
|
retry_count ||= 0
|
1100
1123
|
raise e if @reconnect_by.nil? || retry_count >= num
|
1101
1124
|
log.error "#{e.class}: #{e.message}"
|
@@ -1121,7 +1144,7 @@ module SonyCameraRemoteAPI
|
|
1121
1144
|
|
1122
1145
|
def reconnect_and_retry_forever(&block)
|
1123
1146
|
reconnect_and_retry &block
|
1124
|
-
rescue HTTPClient::TimeoutError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED => e
|
1147
|
+
rescue HTTPClient::BadResponseError, HTTPClient::TimeoutError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED => e
|
1125
1148
|
retry
|
1126
1149
|
end
|
1127
1150
|
|
@@ -33,7 +33,7 @@ module SonyCameraRemoteAPI
|
|
33
33
|
|
34
34
|
|
35
35
|
# getEvent API.
|
36
|
-
# Long polling flag is set true as default.
|
36
|
+
# Long polling flag is set +true+ as default.
|
37
37
|
# @param [Array,String] params
|
38
38
|
# @return [Hash] Response of API
|
39
39
|
def getEvent(params = [true], **opts)
|
@@ -64,12 +64,12 @@ module SonyCameraRemoteAPI
|
|
64
64
|
# Wait until 'getEvent' result response meets the specified condition.
|
65
65
|
# This method can be used to wait after calling APIs that change any camera parameters, such as 'setCameraFunction'.
|
66
66
|
# @yield [Array<Hash>] The block that returns +true+ or +false+ based on the condition of the response of getEvent
|
67
|
-
# @yieldparam [Array<Hash>]
|
67
|
+
# @yieldparam [Array<Hash>] result the +result+ element in the response of +getEvent+
|
68
68
|
# @param [Fixnum] timeout Timeout in seconds for changing parameter
|
69
|
-
# @param [Boolean] polling This method has 3 patterns to handle long polling flag by
|
69
|
+
# @param [Boolean] polling This method has 3 patterns to handle long polling flag by +polling+ argument.
|
70
70
|
# * default : The first getEvent call doesn't use long polling, but then later always use long polling.
|
71
|
-
# * polling = true : Always use long polling in getEvent call
|
72
|
-
# * polling = false : Never use long polling in getEvent call
|
71
|
+
# * polling = +true+ : Always use long polling in getEvent call
|
72
|
+
# * polling = +false+ : Never use long polling in getEvent call
|
73
73
|
# @raise EventTimeoutError
|
74
74
|
# @todo add example
|
75
75
|
def wait_event(timeout: DEFAULT_PARAM_CHANGE_TIMEOUT, polling: nil, &block)
|
@@ -98,14 +98,15 @@ module SonyCameraRemoteAPI
|
|
98
98
|
|
99
99
|
# Ghost method, which handles almost API calls.
|
100
100
|
# You can call an API as a method with the same name.
|
101
|
-
# We don't have to specify service_type and version for almost APIs
|
102
|
-
#
|
103
|
-
#
|
101
|
+
# We don't have to specify service_type and version for almost APIs except some APIs
|
102
|
+
# having multiple service types and versions.
|
103
|
+
#
|
104
|
+
# When +!+ is appended to the end of the method name, it does not raise exception even if any error occurred.
|
104
105
|
# @param [String] method
|
105
|
-
# @param [Array,String] params
|
106
|
-
# @param [String] service_type
|
107
|
-
# @param [Fixnum] id
|
108
|
-
# @param [String] version
|
106
|
+
# @param [Array,String] params 'params' element of the request
|
107
|
+
# @param [String] service_type Service type of the API
|
108
|
+
# @param [Fixnum] id ID for the request/response pair
|
109
|
+
# @param [String] version Version of the API
|
109
110
|
# @param [Fixnum] timeout Timeout in seconds for waiting until the API is available
|
110
111
|
# @example
|
111
112
|
# # Initialize
|
@@ -120,7 +121,7 @@ module SonyCameraRemoteAPI
|
|
120
121
|
# puts r
|
121
122
|
# end
|
122
123
|
#
|
123
|
-
# # Call setCurrentTime API if supported
|
124
|
+
# # Call setCurrentTime API if supported (does not raise exception if not supported)
|
124
125
|
# cam.setCurrentTime! [{'dateTime' => Time.now.utc.iso8601,
|
125
126
|
# 'timeZoneOffsetMinute' => 540,
|
126
127
|
# 'dstOffsetMinute' => 0}]
|
@@ -137,10 +137,10 @@ module SonyCameraRemoteAPI
|
|
137
137
|
# @example
|
138
138
|
# # Initialize
|
139
139
|
# cam = SonyCameraRemoteAPI::Camera.new
|
140
|
-
# cam.change_function_to_shoot 'still', '
|
140
|
+
# cam.change_function_to_shoot 'still', 'Continuous'
|
141
141
|
#
|
142
142
|
# value = cam.get_current :ContShootingMode
|
143
|
-
# puts value #=>
|
143
|
+
# puts value #=> Continuous
|
144
144
|
def get_current(group_name, **opts)
|
145
145
|
get_parameter(group_name, available: false, supported: false, **opts)[:current]
|
146
146
|
end
|
@@ -152,7 +152,7 @@ module SonyCameraRemoteAPI
|
|
152
152
|
# @example
|
153
153
|
# # Initialize
|
154
154
|
# cam = SonyCameraRemoteAPI::Camera.new
|
155
|
-
# cam.change_function_to_shoot 'still', '
|
155
|
+
# cam.change_function_to_shoot 'still', 'Continuous'
|
156
156
|
#
|
157
157
|
# value = cam.get_current! :ContShootingMode
|
158
158
|
# if value
|
@@ -167,8 +167,8 @@ module SonyCameraRemoteAPI
|
|
167
167
|
|
168
168
|
# Get supported/available/current value of the camera parameter.
|
169
169
|
# @param [Symbol] group_name Parameter name
|
170
|
-
# @param [Boolean] available
|
171
|
-
# @param [Boolean] supported
|
170
|
+
# @param [Boolean] available If +true+, available values are included to the returned hash.
|
171
|
+
# @param [Boolean] supported If +true+, supported values are returned to the returned hash.
|
172
172
|
# @return [Hash] current/available/supported values
|
173
173
|
# @raise APIForbidden, APINotSupported, APINotAvailable, IllegalArgument
|
174
174
|
# @example
|
@@ -210,7 +210,7 @@ module SonyCameraRemoteAPI
|
|
210
210
|
# @example
|
211
211
|
# # Initialize
|
212
212
|
# cam = SonyCameraRemoteAPI::Camera.new
|
213
|
-
# cam.change_function_to_shoot 'still'
|
213
|
+
# cam.change_function_to_shoot 'still'
|
214
214
|
#
|
215
215
|
# result = cam.get_parameter! :ExposureMode
|
216
216
|
# if result[:current]
|
@@ -325,7 +325,7 @@ module SonyCameraRemoteAPI
|
|
325
325
|
|
326
326
|
|
327
327
|
# Returns whether the parameter is supported or not.
|
328
|
-
# @return [Boolean] +true+ if the parameter is supported, false otherwise.
|
328
|
+
# @return [Boolean] +true+ if the parameter is supported, +false+ otherwise.
|
329
329
|
def support_group?(group_name)
|
330
330
|
@api_groups.key? group_name
|
331
331
|
end
|
@@ -15,7 +15,7 @@ module SonyCameraRemoteAPI
|
|
15
15
|
module Client
|
16
16
|
|
17
17
|
# Default config file saved in home directory.
|
18
|
-
GLOBAL_CONFIG_FILE = File.expand_path('~/.
|
18
|
+
GLOBAL_CONFIG_FILE = File.expand_path('~/.sonycam.shelf')
|
19
19
|
|
20
20
|
# Main class of client
|
21
21
|
class Main < Thor
|
@@ -37,43 +37,21 @@ module SonyCameraRemoteAPI
|
|
37
37
|
options[:config] || GLOBAL_CONFIG_FILE
|
38
38
|
end
|
39
39
|
|
40
|
-
def load_camera_config
|
41
|
-
# If SSID is specified, load the camera config.
|
42
|
-
if options[:ssid]
|
43
|
-
@shelf.get options[:ssid] || @shelf.get
|
44
|
-
else
|
45
|
-
@shelf.get
|
46
|
-
end
|
47
|
-
end
|
48
40
|
|
49
|
-
#
|
50
|
-
def
|
51
|
-
|
52
|
-
unless
|
53
|
-
puts
|
41
|
+
# Initialize camera instance
|
42
|
+
def init_camera
|
43
|
+
@shelf = Shelf.new config_file
|
44
|
+
unless @shelf.select options[:ssid]
|
45
|
+
puts "No camera found having SSID #{options[:ssid]}"
|
54
46
|
exit 1
|
55
47
|
end
|
56
|
-
unless
|
48
|
+
unless @shelf.connect
|
57
49
|
puts 'Failed to connect!'
|
58
50
|
exit 1
|
59
51
|
end
|
60
|
-
config
|
61
|
-
end
|
62
|
-
|
63
|
-
# Initialize camera instance
|
64
|
-
def init_camera
|
65
|
-
@shelf = Shelf.new config_file
|
66
|
-
config = load_and_connect
|
67
52
|
|
68
53
|
puts 'Initializing camera...'
|
69
|
-
|
70
|
-
@cam = SonyCameraRemoteAPI::Camera.new reconnect_by: method(:load_and_connect)
|
71
|
-
@shelf.set_ep config['ssid'], @cam.endpoints
|
72
|
-
puts 'SSDP configuration saved.'
|
73
|
-
else
|
74
|
-
@cam = SonyCameraRemoteAPI::Camera.new endpoints: config['endpoints'],
|
75
|
-
reconnect_by: method(:load_and_connect)
|
76
|
-
end
|
54
|
+
@cam = SonyCameraRemoteAPI::Camera.new @shelf
|
77
55
|
puts 'Camera initialization finished.'
|
78
56
|
|
79
57
|
# Change directory if --dir options specified
|
@@ -20,6 +20,8 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
+
spec.required_ruby_version = ">= 2.0.0"
|
24
|
+
|
23
25
|
spec.add_development_dependency "bundler", "~> 1.11"
|
24
26
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
27
|
spec.add_development_dependency "rspec", "~> 3.5"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sony_camera_remote_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kota65535
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -216,7 +216,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
216
216
|
requirements:
|
217
217
|
- - ">="
|
218
218
|
- !ruby/object:Gem::Version
|
219
|
-
version:
|
219
|
+
version: 2.0.0
|
220
220
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
221
221
|
requirements:
|
222
222
|
- - ">="
|