sony_camera_remote_api 0.2.0 → 0.2.1
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 +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
|
- - ">="
|