tangled
alpha
login
or
join now
buttplug.io
/
buttplug
20
fork
atom
Buttplug sex toy control library
20
fork
atom
overview
issues
pulls
pipelines
chore: Convert all config file - to _
qdot.tngl.sh
6 months ago
24e25b10
d63e7023
+1104
-625
12 changed files
expand all
collapse all
unified
split
crates
buttplug_core
schema
buttplug-schema.json
buttplug_server_device_config
device-config-v4
buttplug-device-config-schema-v4.json
protocols
vorze-sa.yml
version.yaml
src
device_config_file
device.rs
user.rs
tests
test_configs
user_tcode_protocol.json
buttplug_tests
tests
test_device_config.rs
util
device_test
device_test_case
config
lovense_ridge_user_config.json
lovense_ridge_user_config_invalid_range.json
tcode_linear_and_vibrate_user_config.json
test_lovense_ridge_user_config.yaml
+1034
-505
crates/buttplug_core/schema/buttplug-schema.json
···
34
34
"ClientIdMessage": {
35
35
"description": "Message types that are expected to have an Id and nothing else.",
36
36
"properties": {
37
37
-
"Id": { "$ref": "#/components/ClientId" }
37
37
+
"Id": {
38
38
+
"$ref": "#/components/ClientId"
39
39
+
}
38
40
},
39
41
"additionalProperties": false,
40
42
"minProperties": 1,
···
46
48
"ServerIdMessage": {
47
49
"description": "Message types that are expected to have an Id and nothing else, from the server side, which may be either a reply or an event (id 0).",
48
50
"properties": {
49
49
-
"Id": { "$ref": "#/components/ServerId" }
51
51
+
"Id": {
52
52
+
"$ref": "#/components/ServerId"
53
53
+
}
50
54
},
51
55
"additionalProperties": false,
52
56
"minProperties": 1,
···
58
62
"SystemIdMessage": {
59
63
"description": "Message sent by the server that is not in direct reply to a message send from the client, and always uses system Id.",
60
64
"properties": {
61
61
-
"Id": { "$ref": "#/components/SystemId" }
65
65
+
"Id": {
66
66
+
"$ref": "#/components/SystemId"
67
67
+
}
62
68
},
63
69
"additionalProperties": false,
64
70
"required": [
···
67
73
},
68
74
"SystemIdDeviceIndexMessage": {
69
75
"properties": {
70
70
-
"Id": { "$ref": "#/components/SystemId" },
71
71
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" }
76
76
+
"Id": {
77
77
+
"$ref": "#/components/SystemId"
78
78
+
},
79
79
+
"DeviceIndex": {
80
80
+
"$ref": "#/components/DeviceIndex"
81
81
+
}
72
82
},
73
83
"additionalProperties": false,
74
84
"required": [
75
85
"Id",
76
86
"DeviceIndex"
77
87
]
78
78
-
},
88
88
+
},
79
89
"ClientIdDeviceIndexMessage": {
80
90
"properties": {
81
81
-
"Id": { "$ref": "#/components/ClientId" },
82
82
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" }
91
91
+
"Id": {
92
92
+
"$ref": "#/components/ClientId"
93
93
+
},
94
94
+
"DeviceIndex": {
95
95
+
"$ref": "#/components/DeviceIndex"
96
96
+
}
83
97
},
84
98
"additionalProperties": false,
85
99
"required": [
···
109
123
"FeatureDescriptor": {
110
124
"type": "string"
111
125
},
112
112
-
"StepCount": { "$ref": "#/components/StepCountV3" },
126
126
+
"StepCount": {
127
127
+
"$ref": "#/components/StepCountV3"
128
128
+
},
113
129
"ActuatorType": {
114
130
"description": "Denotes type of actuator (Vibrator, Linear, Oscillator, etc...)",
115
131
"type": "string"
···
122
138
"description": "Attributes for device messages.",
123
139
"type": "object",
124
140
"properties": {
125
125
-
"FeatureCount": { "$ref": "#/components/FeatureCount" },
126
126
-
"StepCount": { "$ref": "#/components/StepCountV2" }
141
141
+
"FeatureCount": {
142
142
+
"$ref": "#/components/FeatureCount"
143
143
+
},
144
144
+
"StepCount": {
145
145
+
"$ref": "#/components/StepCountV2"
146
146
+
}
127
147
},
128
148
"additionalProperties": false,
129
149
"minProperties": 0
···
132
152
"description": "Attributes for device messages.",
133
153
"type": "object",
134
154
"properties": {
135
135
-
"FeatureCount": { "$ref": "#/components/FeatureCount" }
155
155
+
"FeatureCount": {
156
156
+
"$ref": "#/components/FeatureCount"
157
157
+
}
136
158
},
137
159
"additionalProperties": false,
138
160
"minProperties": 0
···
190
212
"description": "A list of the messages a device will accept on this server implementation.",
191
213
"type": "object",
192
214
"properties": {
193
193
-
"StopDeviceCmd": { "$ref": "#/components/NullMessageAttributes" },
215
215
+
"StopDeviceCmd": {
216
216
+
"$ref": "#/components/NullMessageAttributes"
217
217
+
},
194
218
"ScalarCmd": {
195
219
"type": "array",
196
220
"items": {
197
197
-
"$ref": "#/components/GenericMessageAttributesV3" },
198
198
-
"minItems": 1
221
221
+
"$ref": "#/components/GenericMessageAttributesV3"
222
222
+
},
223
223
+
"minItems": 1
199
224
},
200
225
"LinearCmd": {
201
226
"type": "array",
···
225
250
"minItems": 1
226
251
}
227
252
},
228
228
-
"RawReadCmd": { "$ref": "#/components/RawMessageAttributes" },
229
229
-
"RawWriteCmd": { "$ref": "#/components/RawMessageAttributes" },
230
230
-
"RawSubscribeCmd": { "$ref": "#/components/RawMessageAttributes" }
253
253
+
"RawReadCmd": {
254
254
+
"$ref": "#/components/RawMessageAttributes"
255
255
+
},
256
256
+
"RawWriteCmd": {
257
257
+
"$ref": "#/components/RawMessageAttributes"
258
258
+
},
259
259
+
"RawSubscribeCmd": {
260
260
+
"$ref": "#/components/RawMessageAttributes"
261
261
+
}
231
262
},
232
263
"additionalProperties": false
233
264
},
···
235
266
"description": "A list of the messages a device will accept on this server implementation.",
236
267
"type": "object",
237
268
"properties": {
238
238
-
"StopDeviceCmd": { "$ref": "#/components/NullMessageAttributes" },
239
239
-
"VibrateCmd": { "$ref": "#/components/GenericMessageAttributesV2" },
240
240
-
"LinearCmd": { "$ref": "#/components/GenericMessageAttributesV2" },
241
241
-
"RotateCmd": { "$ref": "#/components/GenericMessageAttributesV2" },
242
242
-
"BatteryLevelCmd": { "$ref": "#/components/NullMessageAttributes" },
243
243
-
"RSSILevelCmd": { "$ref": "#/components/NullMessageAttributes" },
244
244
-
"RawReadCmd": { "$ref": "#/components/RawMessageAttributes" },
245
245
-
"RawWriteCmd": { "$ref": "#/components/RawMessageAttributes" },
246
246
-
"RawSubscribeCmd": { "$ref": "#/components/RawMessageAttributes" },
247
247
-
"RawUnsubscribeCmd": { "$ref": "#/components/RawMessageAttributes" }
269
269
+
"StopDeviceCmd": {
270
270
+
"$ref": "#/components/NullMessageAttributes"
271
271
+
},
272
272
+
"VibrateCmd": {
273
273
+
"$ref": "#/components/GenericMessageAttributesV2"
274
274
+
},
275
275
+
"LinearCmd": {
276
276
+
"$ref": "#/components/GenericMessageAttributesV2"
277
277
+
},
278
278
+
"RotateCmd": {
279
279
+
"$ref": "#/components/GenericMessageAttributesV2"
280
280
+
},
281
281
+
"BatteryLevelCmd": {
282
282
+
"$ref": "#/components/NullMessageAttributes"
283
283
+
},
284
284
+
"RSSILevelCmd": {
285
285
+
"$ref": "#/components/NullMessageAttributes"
286
286
+
},
287
287
+
"RawReadCmd": {
288
288
+
"$ref": "#/components/RawMessageAttributes"
289
289
+
},
290
290
+
"RawWriteCmd": {
291
291
+
"$ref": "#/components/RawMessageAttributes"
292
292
+
},
293
293
+
"RawSubscribeCmd": {
294
294
+
"$ref": "#/components/RawMessageAttributes"
295
295
+
},
296
296
+
"RawUnsubscribeCmd": {
297
297
+
"$ref": "#/components/RawMessageAttributes"
298
298
+
}
248
299
},
249
300
"additionalProperties": false
250
301
},
···
252
303
"description": "A list of the messages a device will accept on this server implementation.",
253
304
"type": "object",
254
305
"properties": {
255
255
-
"StopDeviceCmd": { "$ref": "#/components/NullMessageAttributes" },
256
256
-
"VibrateCmd": { "$ref": "#/components/GenericMessageAttributesV1" },
257
257
-
"LinearCmd": { "$ref": "#/components/GenericMessageAttributesV1" },
258
258
-
"RotateCmd": { "$ref": "#/components/GenericMessageAttributesV1" },
259
259
-
"LovenseCmd": { "$ref": "#/components/NullMessageAttributes" },
260
260
-
"VorzeA10CycloneCmd": { "$ref": "#/components/NullMessageAttributes" },
261
261
-
"KiirooCmd": { "$ref": "#/components/NullMessageAttributes" },
262
262
-
"SingleMotorVibrateCmd": { "$ref": "#/components/NullMessageAttributes" },
263
263
-
"FleshlightLaunchFW12Cmd": { "$ref": "#/components/NullMessageAttributes" }
306
306
+
"StopDeviceCmd": {
307
307
+
"$ref": "#/components/NullMessageAttributes"
308
308
+
},
309
309
+
"VibrateCmd": {
310
310
+
"$ref": "#/components/GenericMessageAttributesV1"
311
311
+
},
312
312
+
"LinearCmd": {
313
313
+
"$ref": "#/components/GenericMessageAttributesV1"
314
314
+
},
315
315
+
"RotateCmd": {
316
316
+
"$ref": "#/components/GenericMessageAttributesV1"
317
317
+
},
318
318
+
"LovenseCmd": {
319
319
+
"$ref": "#/components/NullMessageAttributes"
320
320
+
},
321
321
+
"VorzeA10CycloneCmd": {
322
322
+
"$ref": "#/components/NullMessageAttributes"
323
323
+
},
324
324
+
"KiirooCmd": {
325
325
+
"$ref": "#/components/NullMessageAttributes"
326
326
+
},
327
327
+
"SingleMotorVibrateCmd": {
328
328
+
"$ref": "#/components/NullMessageAttributes"
329
329
+
},
330
330
+
"FleshlightLaunchFW12Cmd": {
331
331
+
"$ref": "#/components/NullMessageAttributes"
332
332
+
}
264
333
},
265
334
"additionalProperties": false
266
335
},
···
269
338
"type": "array",
270
339
"items": {
271
340
"type": "string",
272
272
-
"enum": ["FleshlightLaunchFW12Cmd", "SingleMotorVibrateCmd", "KiirooCmd", "LovenseCmd", "VorzeA10CycloneCmd"]
341
341
+
"enum": [
342
342
+
"FleshlightLaunchFW12Cmd",
343
343
+
"SingleMotorVibrateCmd",
344
344
+
"KiirooCmd",
345
345
+
"LovenseCmd",
346
346
+
"VorzeA10CycloneCmd"
347
347
+
]
273
348
},
274
349
"additionalProperties": false
275
275
-
},
350
350
+
},
276
351
"FeatureCount": {
277
352
"description": "Number of features on device.",
278
353
"type": "integer",
···
302
377
"FeatureIndex": {
303
378
"type": "integer"
304
379
},
305
305
-
"FeatureType": {
306
306
-
"type": "string"
307
307
-
},
308
380
"Output": {
309
309
-
"type": "array",
310
310
-
"items": {
311
311
-
"type": "object",
312
312
-
"patternProperties": {
313
313
-
"^(Vibrate|Rotate|Oscillate|Constrict|Spray|Position|Heater|Led)$": {
314
314
-
"type": "object",
315
315
-
"properties": {
316
316
-
"Value": {
317
317
-
"$ref": "#/components/RangeInclusive"
318
318
-
}
381
381
+
"type": "object",
382
382
+
"patternProperties": {
383
383
+
"^(Vibrate|Rotate|Oscillate|Constrict|Spray|Position|Heater|Led)$": {
384
384
+
"type": "object",
385
385
+
"properties": {
386
386
+
"Value": {
387
387
+
"$ref": "#/components/RangeInclusive"
388
388
+
}
389
389
+
},
390
390
+
"required": [
391
391
+
"Value"
392
392
+
]
393
393
+
},
394
394
+
"PositionWithDuration": {
395
395
+
"type": "object",
396
396
+
"properties": {
397
397
+
"Position": {
398
398
+
"$ref": "#/components/RangeInclusive"
319
399
},
320
320
-
"required": [
321
321
-
"Value"
322
322
-
]
400
400
+
"Duration": {
401
401
+
"$ref": "#/components/RangeInclusive"
402
402
+
}
323
403
},
324
324
-
"PositionWithDuration": {
325
325
-
"type": "object",
326
326
-
"properties": {
327
327
-
"Position": {
328
328
-
"$ref": "#/components/RangeInclusive"
329
329
-
},
330
330
-
"Duration": {
331
331
-
"$ref": "#/components/RangeInclusive"
332
332
-
}
333
333
-
},
334
334
-
"required": [
335
335
-
"Position",
336
336
-
"Duration"
337
337
-
]
338
338
-
}
339
339
-
},
340
340
-
"minProperties": 1,
341
341
-
"maxProperties": 1
404
404
+
"required": [
405
405
+
"Position",
406
406
+
"Duration"
407
407
+
]
408
408
+
}
342
409
}
343
410
},
344
411
"Input": {
···
362
429
]
363
430
}
364
431
}
365
365
-
},
366
366
-
"Raw": {
367
367
-
"type": "object",
368
368
-
"properties": {
369
369
-
"Endpoints": {
370
370
-
"type": "array",
371
371
-
"items": {
372
372
-
"type": "string"
373
373
-
}
374
374
-
}
375
375
-
},
376
376
-
"required": [
377
377
-
"Endpoints"
378
378
-
]
379
432
}
380
433
},
381
434
"required": [
382
435
"FeatureDescription",
383
383
-
"FeatureIndex",
384
384
-
"FeatureType"
436
436
+
"FeatureIndex"
385
437
]
386
438
}
387
439
},
···
391
443
"type": "object",
392
444
"description": "Sends a generic value set command to a device.",
393
445
"properties": {
394
394
-
"Id": { "$ref": "#/components/ClientId" },
395
395
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
396
396
-
"FeatureIndex": { "$ref": "#/components/DeviceIndex" },
446
446
+
"Id": {
447
447
+
"$ref": "#/components/ClientId"
448
448
+
},
449
449
+
"DeviceIndex": {
450
450
+
"$ref": "#/components/DeviceIndex"
451
451
+
},
452
452
+
"FeatureIndex": {
453
453
+
"$ref": "#/components/DeviceIndex"
454
454
+
},
397
455
"Command": {
398
456
"type": "object",
399
457
"patternProperties": {
···
457
515
"type": "object",
458
516
"description": "Sends a request to read a sensor value.",
459
517
"properties": {
460
460
-
"Id": { "$ref": "#/components/ClientId" },
461
461
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
462
462
-
"FeatureIndex": { "type": "integer" },
463
463
-
"InputType": { "type": "string" },
464
464
-
"InputCommand": { "type": "string" }
518
518
+
"Id": {
519
519
+
"$ref": "#/components/ClientId"
520
520
+
},
521
521
+
"DeviceIndex": {
522
522
+
"$ref": "#/components/DeviceIndex"
523
523
+
},
524
524
+
"FeatureIndex": {
525
525
+
"type": "integer"
526
526
+
},
527
527
+
"InputType": {
528
528
+
"type": "string"
529
529
+
},
530
530
+
"InputCommand": {
531
531
+
"type": "string"
532
532
+
}
465
533
},
466
534
"additionalProperties": false,
467
535
"required": [
···
476
544
"type": "object",
477
545
"description": "Returns from either a sensor read request or a subscribed sensor event.",
478
546
"properties": {
479
479
-
"Id": { "$ref": "#/components/ServerId" },
480
480
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
481
481
-
"FeatureIndex": { "type": "integer" },
547
547
+
"Id": {
548
548
+
"$ref": "#/components/ServerId"
549
549
+
},
550
550
+
"DeviceIndex": {
551
551
+
"$ref": "#/components/DeviceIndex"
552
552
+
},
553
553
+
"FeatureIndex": {
554
554
+
"type": "integer"
555
555
+
},
482
556
"Data": {
483
557
"type": "object",
484
558
"patternProperties": {
···
497
571
"Data"
498
572
]
499
573
},
500
500
-
"RawCmd": {
501
501
-
"type": "object",
502
502
-
"description": "Sends a request to raw endpoints.",
503
503
-
"properties": {
504
504
-
"Id": { "$ref": "#/components/ClientId" },
505
505
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
506
506
-
"Endpoint": { "type": "string" },
507
507
-
"RawCommand": {
508
508
-
"type": "object",
509
509
-
"properties": {
510
510
-
"Read": {
511
511
-
"type": "object"
512
512
-
},
513
513
-
"Write": {
514
514
-
"type": "object"
515
515
-
},
516
516
-
"Subscribe": {
517
517
-
"type": "object"
518
518
-
},
519
519
-
"Unsubscribe": {
520
520
-
"type": "object"
521
521
-
}
522
522
-
}
523
523
-
}
524
524
-
},
525
525
-
"additionalProperties": false,
526
526
-
"required": [
527
527
-
"Id",
528
528
-
"DeviceIndex",
529
529
-
"Endpoint",
530
530
-
"RawCommand"
531
531
-
]
532
532
-
},
533
574
"DeviceList": {
534
575
"type": "object",
535
576
"description": "List of all available devices known to the system.",
536
577
"properties": {
537
537
-
"Id": { "$ref": "#/components/ServerId" },
578
578
+
"Id": {
579
579
+
"$ref": "#/components/ServerId"
580
580
+
},
538
581
"Devices": {
539
582
"description": "Array of device ids and names.",
540
583
"type": "object",
···
542
585
"^[0-9]*": {
543
586
"type": "object",
544
587
"properties": {
545
545
-
"DeviceName": { "$ref": "#/components/DeviceName" },
546
546
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
547
547
-
"DeviceDisplayName": { "type": "string" },
548
548
-
"DeviceMessageTimingGap": { "type": "integer" },
588
588
+
"DeviceName": {
589
589
+
"$ref": "#/components/DeviceName"
590
590
+
},
591
591
+
"DeviceIndex": {
592
592
+
"$ref": "#/components/DeviceIndex"
593
593
+
},
594
594
+
"DeviceDisplayName": {
595
595
+
"type": "string"
596
596
+
},
597
597
+
"DeviceMessageTimingGap": {
598
598
+
"type": "integer"
599
599
+
},
549
600
"DeviceFeatures": {
550
601
"type": "object",
551
602
"patternProperties": {
552
603
"^[0-9]*": {
553
553
-
"$ref": "#/components/DeviceFeatureV4"
604
604
+
"$ref": "#/components/DeviceFeatureV4"
554
605
}
555
606
}
556
607
}
···
576
627
"type": "object",
577
628
"description": "Request server version, and relay client name.",
578
629
"properties": {
579
579
-
"Id": { "$ref": "#/components/ClientId" },
630
630
+
"Id": {
631
631
+
"$ref": "#/components/ClientId"
632
632
+
},
580
633
"ClientName": {
581
634
"description": "Name of the client software.",
582
635
"type": "string"
···
604
657
"type": "object",
605
658
"description": "Server version information, with API version in Major.Minor format.",
606
659
"properties": {
607
607
-
"Id": { "$ref": "#/components/ClientId" },
660
660
+
"Id": {
661
661
+
"$ref": "#/components/ClientId"
662
662
+
},
608
663
"ServerName": {
609
664
"description": "Name of the server. Can be 0-length.",
610
665
"type": "string"
···
626
681
}
627
682
}
628
683
}
629
629
-
},
684
684
+
},
630
685
"SpecV3Messages": {
631
686
"DeviceList": {
632
687
"type": "object",
633
688
"description": "List of all available devices known to the system.",
634
689
"properties": {
635
635
-
"Id": { "$ref": "#/components/ClientId" },
690
690
+
"Id": {
691
691
+
"$ref": "#/components/ClientId"
692
692
+
},
636
693
"Devices": {
637
694
"description": "Array of device ids and names.",
638
695
"type": "array",
639
696
"items": {
640
697
"type": "object",
641
698
"properties": {
642
642
-
"DeviceName": { "$ref": "#/components/DeviceName" },
643
643
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
644
644
-
"DeviceDisplayName": { "type": "string" },
645
645
-
"DeviceMessageTimingGap": { "type": "integer" },
646
646
-
"DeviceMessages": { "$ref": "#/components/DeviceMessagesV3" }
699
699
+
"DeviceName": {
700
700
+
"$ref": "#/components/DeviceName"
701
701
+
},
702
702
+
"DeviceIndex": {
703
703
+
"$ref": "#/components/DeviceIndex"
704
704
+
},
705
705
+
"DeviceDisplayName": {
706
706
+
"type": "string"
707
707
+
},
708
708
+
"DeviceMessageTimingGap": {
709
709
+
"type": "integer"
710
710
+
},
711
711
+
"DeviceMessages": {
712
712
+
"$ref": "#/components/DeviceMessagesV3"
713
713
+
}
647
714
},
648
715
"additionalProperties": false,
649
716
"required": [
···
664
731
"type": "object",
665
732
"description": "Notifies client that a device of a certain type has been added to the server.",
666
733
"properties": {
667
667
-
"Id": { "$ref": "#/components/SystemId" },
668
668
-
"DeviceName": { "$ref": "#/components/DeviceName" },
669
669
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
670
670
-
"DeviceDisplayName": { "type": "string" },
671
671
-
"DeviceMessageTimingGap": { "type": "integer" },
672
672
-
"DeviceMessages": { "$ref": "#/components/DeviceMessagesV3" }
734
734
+
"Id": {
735
735
+
"$ref": "#/components/SystemId"
736
736
+
},
737
737
+
"DeviceName": {
738
738
+
"$ref": "#/components/DeviceName"
739
739
+
},
740
740
+
"DeviceIndex": {
741
741
+
"$ref": "#/components/DeviceIndex"
742
742
+
},
743
743
+
"DeviceDisplayName": {
744
744
+
"type": "string"
745
745
+
},
746
746
+
"DeviceMessageTimingGap": {
747
747
+
"type": "integer"
748
748
+
},
749
749
+
"DeviceMessages": {
750
750
+
"$ref": "#/components/DeviceMessagesV3"
751
751
+
}
673
752
},
674
753
"additionalProperties": false,
675
754
"required": [
···
683
762
"type": "object",
684
763
"description": "Sends a generic scalar command to a device.",
685
764
"properties": {
686
686
-
"Id": { "$ref": "#/components/ClientId" },
687
687
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
765
765
+
"Id": {
766
766
+
"$ref": "#/components/ClientId"
767
767
+
},
768
768
+
"DeviceIndex": {
769
769
+
"$ref": "#/components/DeviceIndex"
770
770
+
},
688
771
"Scalars": {
689
772
"description": "Device actution scalar (floating point, range can vary) keyed on acutator index, stepping will be device specific.",
690
773
"type": "array",
···
726
809
"type": "object",
727
810
"description": "Sends a request to read a sensor value.",
728
811
"properties": {
729
729
-
"Id": { "$ref": "#/components/ClientId" },
730
730
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
731
731
-
"SensorIndex": { "type": "integer" },
732
732
-
"SensorType": { "type": "string" }
812
812
+
"Id": {
813
813
+
"$ref": "#/components/ClientId"
814
814
+
},
815
815
+
"DeviceIndex": {
816
816
+
"$ref": "#/components/DeviceIndex"
817
817
+
},
818
818
+
"SensorIndex": {
819
819
+
"type": "integer"
820
820
+
},
821
821
+
"SensorType": {
822
822
+
"type": "string"
823
823
+
}
733
824
},
734
825
"additionalProperties": false,
735
826
"required": [
···
743
834
"type": "object",
744
835
"description": "Returns from either a sensor read request or a subscribed sensor event.",
745
836
"properties": {
746
746
-
"Id": { "$ref": "#/components/ServerId" },
747
747
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
748
748
-
"SensorIndex": { "type": "integer" },
749
749
-
"SensorType": { "type": "string" },
837
837
+
"Id": {
838
838
+
"$ref": "#/components/ServerId"
839
839
+
},
840
840
+
"DeviceIndex": {
841
841
+
"$ref": "#/components/DeviceIndex"
842
842
+
},
843
843
+
"SensorIndex": {
844
844
+
"type": "integer"
845
845
+
},
846
846
+
"SensorType": {
847
847
+
"type": "string"
848
848
+
},
750
849
"Data": {
751
850
"type": "array",
752
851
"items": {
···
769
868
"type": "object",
770
869
"description": "Sends a request to subscribe for updates to a sensor value.",
771
870
"properties": {
772
772
-
"Id": { "$ref": "#/components/ClientId" },
773
773
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
774
774
-
"SensorIndex": { "type": "integer" },
775
775
-
"SensorType": { "type": "string" }
871
871
+
"Id": {
872
872
+
"$ref": "#/components/ClientId"
873
873
+
},
874
874
+
"DeviceIndex": {
875
875
+
"$ref": "#/components/DeviceIndex"
876
876
+
},
877
877
+
"SensorIndex": {
878
878
+
"type": "integer"
879
879
+
},
880
880
+
"SensorType": {
881
881
+
"type": "string"
882
882
+
}
776
883
},
777
884
"additionalProperties": false,
778
885
"required": [
···
786
893
"type": "object",
787
894
"description": "Sends a request to subscribe for updates to a sensor value.",
788
895
"properties": {
789
789
-
"Id": { "$ref": "#/components/ClientId" },
790
790
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
791
791
-
"SensorIndex": { "type": "integer" },
792
792
-
"SensorType": { "type": "string" }
896
896
+
"Id": {
897
897
+
"$ref": "#/components/ClientId"
898
898
+
},
899
899
+
"DeviceIndex": {
900
900
+
"$ref": "#/components/DeviceIndex"
901
901
+
},
902
902
+
"SensorIndex": {
903
903
+
"type": "integer"
904
904
+
},
905
905
+
"SensorType": {
906
906
+
"type": "string"
907
907
+
}
793
908
},
794
909
"additionalProperties": false,
795
910
"required": [
···
805
920
"type": "object",
806
921
"description": "List of all available devices known to the system.",
807
922
"properties": {
808
808
-
"Id": { "$ref": "#/components/ClientId" },
923
923
+
"Id": {
924
924
+
"$ref": "#/components/ClientId"
925
925
+
},
809
926
"Devices": {
810
927
"description": "Array of device ids and names.",
811
928
"type": "array",
812
929
"items": {
813
930
"type": "object",
814
931
"properties": {
815
815
-
"DeviceName": { "$ref": "#/components/DeviceName" },
816
816
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
817
817
-
"DeviceMessages": { "$ref": "#/components/DeviceMessagesV2" }
932
932
+
"DeviceName": {
933
933
+
"$ref": "#/components/DeviceName"
934
934
+
},
935
935
+
"DeviceIndex": {
936
936
+
"$ref": "#/components/DeviceIndex"
937
937
+
},
938
938
+
"DeviceMessages": {
939
939
+
"$ref": "#/components/DeviceMessagesV2"
940
940
+
}
818
941
},
819
942
"additionalProperties": false,
820
943
"required": [
···
835
958
"type": "object",
836
959
"description": "Notifies client that a device of a certain type has been added to the server.",
837
960
"properties": {
838
838
-
"Id": { "$ref": "#/components/SystemId" },
839
839
-
"DeviceName": { "$ref": "#/components/DeviceName" },
840
840
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
841
841
-
"DeviceMessages": { "$ref": "#/components/DeviceMessagesV2" }
961
961
+
"Id": {
962
962
+
"$ref": "#/components/SystemId"
963
963
+
},
964
964
+
"DeviceName": {
965
965
+
"$ref": "#/components/DeviceName"
966
966
+
},
967
967
+
"DeviceIndex": {
968
968
+
"$ref": "#/components/DeviceIndex"
969
969
+
},
970
970
+
"DeviceMessages": {
971
971
+
"$ref": "#/components/DeviceMessagesV2"
972
972
+
}
842
973
},
843
974
"additionalProperties": false,
844
975
"required": [
···
852
983
"type": "object",
853
984
"description": "Requests that a BatteryLevel be retreived.",
854
985
"properties": {
855
855
-
"Id": { "$ref": "#/components/ClientId" },
856
856
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" }
986
986
+
"Id": {
987
987
+
"$ref": "#/components/ClientId"
988
988
+
},
989
989
+
"DeviceIndex": {
990
990
+
"$ref": "#/components/DeviceIndex"
991
991
+
}
857
992
},
858
993
"additionalProperties": false,
859
994
"required": [
···
865
1000
"type": "object",
866
1001
"description": "Returns a BatteryLevel read from a device.",
867
1002
"properties": {
868
868
-
"Id": { "$ref": "#/components/ClientId" },
869
869
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1003
1003
+
"Id": {
1004
1004
+
"$ref": "#/components/ClientId"
1005
1005
+
},
1006
1006
+
"DeviceIndex": {
1007
1007
+
"$ref": "#/components/DeviceIndex"
1008
1008
+
},
870
1009
"BatteryLevel": {
871
1010
"description": "Battery Level",
872
1011
"type": "number",
···
885
1024
"type": "object",
886
1025
"description": "Requests that a RSSI level be retreived.",
887
1026
"properties": {
888
888
-
"Id": { "$ref": "#/components/ClientId" },
889
889
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" }
1027
1027
+
"Id": {
1028
1028
+
"$ref": "#/components/ClientId"
1029
1029
+
},
1030
1030
+
"DeviceIndex": {
1031
1031
+
"$ref": "#/components/DeviceIndex"
1032
1032
+
}
890
1033
},
891
1034
"additionalProperties": false,
892
1035
"required": [
···
898
1041
"type": "object",
899
1042
"description": "Returns a BatteryLevel read from a device.",
900
1043
"properties": {
901
901
-
"Id": { "$ref": "#/components/ClientId" },
902
902
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1044
1044
+
"Id": {
1045
1045
+
"$ref": "#/components/ClientId"
1046
1046
+
},
1047
1047
+
"DeviceIndex": {
1048
1048
+
"$ref": "#/components/DeviceIndex"
1049
1049
+
},
903
1050
"RSSILevel": {
904
1051
"description": "RSSI Level",
905
1052
"type": "number",
···
914
1061
"RSSILevel"
915
1062
]
916
1063
},
917
917
-
"RawWriteCmd": {
918
918
-
"type": "object",
919
919
-
"description": "Sends a raw byte array to a device. Should only be used for testing/development.",
920
920
-
"properties": {
921
921
-
"Id": { "$ref": "#/components/ClientId" },
922
922
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
923
923
-
"Endpoint": {
924
924
-
"type": "string",
925
925
-
"description": "Endpoint (from device config file) to send command to."
1064
1064
+
"RawWriteCmd": {
1065
1065
+
"type": "object",
1066
1066
+
"description": "Sends a raw byte array to a device. Should only be used for testing/development.",
1067
1067
+
"properties": {
1068
1068
+
"Id": {
1069
1069
+
"$ref": "#/components/ClientId"
1070
1070
+
},
1071
1071
+
"DeviceIndex": {
1072
1072
+
"$ref": "#/components/DeviceIndex"
1073
1073
+
},
1074
1074
+
"Endpoint": {
1075
1075
+
"type": "string",
1076
1076
+
"description": "Endpoint (from device config file) to send command to."
1077
1077
+
},
1078
1078
+
"Data": {
1079
1079
+
"description": "Raw byte string to send to device.",
1080
1080
+
"type": "array",
1081
1081
+
"minItems": 1,
1082
1082
+
"items": {
1083
1083
+
"type": "integer",
1084
1084
+
"minimum": 0,
1085
1085
+
"maximum": 255
1086
1086
+
}
1087
1087
+
},
1088
1088
+
"WriteWithResponse": {
1089
1089
+
"type": "boolean",
1090
1090
+
"description": "If true, BLE writes will use WriteWithResponse. Value ignored for all other types."
1091
1091
+
}
926
1092
},
927
927
-
"Data": {
928
928
-
"description": "Raw byte string to send to device.",
929
929
-
"type": "array",
930
930
-
"minItems": 1,
931
931
-
"items": {
1093
1093
+
"additionalProperties": false,
1094
1094
+
"required": [
1095
1095
+
"Id",
1096
1096
+
"Endpoint",
1097
1097
+
"DeviceIndex",
1098
1098
+
"Data",
1099
1099
+
"WriteWithResponse"
1100
1100
+
]
1101
1101
+
},
1102
1102
+
"RawReadCmd": {
1103
1103
+
"type": "object",
1104
1104
+
"description": "Request a raw byte array from a device. Should only be used for testing/development.",
1105
1105
+
"properties": {
1106
1106
+
"Id": {
1107
1107
+
"$ref": "#/components/ClientId"
1108
1108
+
},
1109
1109
+
"DeviceIndex": {
1110
1110
+
"$ref": "#/components/DeviceIndex"
1111
1111
+
},
1112
1112
+
"Endpoint": {
1113
1113
+
"type": "string",
1114
1114
+
"description": "Endpoint (from device config file) from which the data was retrieved."
1115
1115
+
},
1116
1116
+
"Length": {
932
1117
"type": "integer",
933
933
-
"minimum": 0,
934
934
-
"maximum": 255
1118
1118
+
"description": "Amount of data to read from device, 0 to exhaust whatever is in immediate buffer",
1119
1119
+
"minimum": 0
1120
1120
+
},
1121
1121
+
"WaitForData": {
1122
1122
+
"type": "boolean",
1123
1123
+
"description": "If true, then wait until Length amount of data is available."
935
1124
}
936
1125
},
937
937
-
"WriteWithResponse": {
938
938
-
"type": "boolean",
939
939
-
"description": "If true, BLE writes will use WriteWithResponse. Value ignored for all other types."
940
940
-
}
1126
1126
+
"additionalProperties": false,
1127
1127
+
"required": [
1128
1128
+
"Id",
1129
1129
+
"Endpoint",
1130
1130
+
"DeviceIndex",
1131
1131
+
"Length",
1132
1132
+
"WaitForData"
1133
1133
+
]
941
1134
},
942
942
-
"additionalProperties": false,
943
943
-
"required": [
944
944
-
"Id",
945
945
-
"Endpoint",
946
946
-
"DeviceIndex",
947
947
-
"Data",
948
948
-
"WriteWithResponse"
949
949
-
]
950
950
-
},
951
951
-
"RawReadCmd": {
952
952
-
"type": "object",
953
953
-
"description": "Request a raw byte array from a device. Should only be used for testing/development.",
954
954
-
"properties": {
955
955
-
"Id": { "$ref": "#/components/ClientId" },
956
956
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
957
957
-
"Endpoint": {
958
958
-
"type": "string",
959
959
-
"description": "Endpoint (from device config file) from which the data was retrieved."
960
960
-
},
961
961
-
"Length": {
962
962
-
"type": "integer",
963
963
-
"description": "Amount of data to read from device, 0 to exhaust whatever is in immediate buffer",
964
964
-
"minimum": 0
1135
1135
+
"RawSubscribeCmd": {
1136
1136
+
"type": "object",
1137
1137
+
"description": "Subscribe to an endpoint on a device to receive raw info back.",
1138
1138
+
"properties": {
1139
1139
+
"Id": {
1140
1140
+
"$ref": "#/components/ClientId"
1141
1141
+
},
1142
1142
+
"DeviceIndex": {
1143
1143
+
"$ref": "#/components/DeviceIndex"
1144
1144
+
},
1145
1145
+
"Endpoint": {
1146
1146
+
"type": "string",
1147
1147
+
"description": "Endpoint (from device config file) from which the data was retrieved."
1148
1148
+
}
965
1149
},
966
966
-
"WaitForData": {
967
967
-
"type": "boolean",
968
968
-
"description": "If true, then wait until Length amount of data is available."
969
969
-
}
1150
1150
+
"additionalProperties": false,
1151
1151
+
"required": [
1152
1152
+
"Id",
1153
1153
+
"Endpoint",
1154
1154
+
"DeviceIndex"
1155
1155
+
]
970
1156
},
971
971
-
"additionalProperties": false,
972
972
-
"required": [
973
973
-
"Id",
974
974
-
"Endpoint",
975
975
-
"DeviceIndex",
976
976
-
"Length",
977
977
-
"WaitForData"
978
978
-
]
979
979
-
},
980
980
-
"RawSubscribeCmd": {
981
981
-
"type": "object",
982
982
-
"description": "Subscribe to an endpoint on a device to receive raw info back.",
983
983
-
"properties": {
984
984
-
"Id": { "$ref": "#/components/ClientId" },
985
985
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
986
986
-
"Endpoint": {
987
987
-
"type": "string",
988
988
-
"description": "Endpoint (from device config file) from which the data was retrieved."
989
989
-
}
1157
1157
+
"RawUnsubscribeCmd": {
1158
1158
+
"type": "object",
1159
1159
+
"description": "Unsubscribe to an endpoint on a device.",
1160
1160
+
"properties": {
1161
1161
+
"Id": {
1162
1162
+
"$ref": "#/components/ClientId"
1163
1163
+
},
1164
1164
+
"DeviceIndex": {
1165
1165
+
"$ref": "#/components/DeviceIndex"
1166
1166
+
},
1167
1167
+
"Endpoint": {
1168
1168
+
"type": "string",
1169
1169
+
"description": "Endpoint (from device config file) from which the data was retrieved."
1170
1170
+
}
1171
1171
+
},
1172
1172
+
"additionalProperties": false,
1173
1173
+
"required": [
1174
1174
+
"Id",
1175
1175
+
"Endpoint",
1176
1176
+
"DeviceIndex"
1177
1177
+
]
990
1178
},
991
991
-
"additionalProperties": false,
992
992
-
"required": [
993
993
-
"Id",
994
994
-
"Endpoint",
995
995
-
"DeviceIndex"
996
996
-
]
997
997
-
},
998
998
-
"RawUnsubscribeCmd": {
999
999
-
"type": "object",
1000
1000
-
"description": "Unsubscribe to an endpoint on a device.",
1001
1001
-
"properties": {
1002
1002
-
"Id": { "$ref": "#/components/ClientId" },
1003
1003
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1004
1004
-
"Endpoint": {
1005
1005
-
"type": "string",
1006
1006
-
"description": "Endpoint (from device config file) from which the data was retrieved."
1007
1007
-
}
1179
1179
+
"RawReading": {
1180
1180
+
"type": "object",
1181
1181
+
"description": "Raw byte array received from a device. Should only be used for testing/development.",
1182
1182
+
"properties": {
1183
1183
+
"Id": {
1184
1184
+
"$ref": "#/components/ServerId"
1185
1185
+
},
1186
1186
+
"DeviceIndex": {
1187
1187
+
"$ref": "#/components/DeviceIndex"
1188
1188
+
},
1189
1189
+
"Endpoint": {
1190
1190
+
"type": "string",
1191
1191
+
"description": "Endpoint (from device config file) from which the data was retrieved."
1192
1192
+
},
1193
1193
+
"Data": {
1194
1194
+
"description": "Raw byte string received from device.",
1195
1195
+
"type": "array",
1196
1196
+
"minItems": 1,
1197
1197
+
"items": {
1198
1198
+
"type": "integer",
1199
1199
+
"minimum": 0,
1200
1200
+
"maximum": 255
1201
1201
+
}
1202
1202
+
}
1203
1203
+
},
1204
1204
+
"additionalProperties": false,
1205
1205
+
"required": [
1206
1206
+
"Id",
1207
1207
+
"Endpoint",
1208
1208
+
"DeviceIndex",
1209
1209
+
"Data"
1210
1210
+
]
1008
1211
},
1009
1009
-
"additionalProperties": false,
1010
1010
-
"required": [
1011
1011
-
"Id",
1012
1012
-
"Endpoint",
1013
1013
-
"DeviceIndex"
1014
1014
-
]
1015
1015
-
},
1016
1016
-
"RawReading": {
1017
1017
-
"type": "object",
1018
1018
-
"description": "Raw byte array received from a device. Should only be used for testing/development.",
1019
1019
-
"properties": {
1020
1020
-
"Id": { "$ref": "#/components/ServerId" },
1021
1021
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1022
1022
-
"Endpoint": {
1023
1023
-
"type": "string",
1024
1024
-
"description": "Endpoint (from device config file) from which the data was retrieved."
1025
1025
-
},
1026
1026
-
"Data": {
1027
1027
-
"description": "Raw byte string received from device.",
1028
1028
-
"type": "array",
1029
1029
-
"minItems": 1,
1030
1030
-
"items": {
1212
1212
+
"ServerInfo": {
1213
1213
+
"type": "object",
1214
1214
+
"description": "Server version information, in Major.Minor.Build format.",
1215
1215
+
"properties": {
1216
1216
+
"Id": {
1217
1217
+
"$ref": "#/components/ClientId"
1218
1218
+
},
1219
1219
+
"ServerName": {
1220
1220
+
"description": "Name of the server. Can be 0-length.",
1221
1221
+
"type": "string"
1222
1222
+
},
1223
1223
+
"MessageVersion": {
1224
1224
+
"description": "Message template version of the server software.",
1225
1225
+
"type": "integer",
1226
1226
+
"minimum": 0
1227
1227
+
},
1228
1228
+
"MaxPingTime": {
1229
1229
+
"description": "Maximum time (in milliseconds) the server will wait between ping messages from client before shutting down.",
1031
1230
"type": "integer",
1032
1032
-
"minimum": 0,
1033
1033
-
"maximum": 255
1231
1231
+
"minimum": 0
1034
1232
}
1035
1035
-
}
1036
1036
-
},
1037
1037
-
"additionalProperties": false,
1038
1038
-
"required": [
1039
1039
-
"Id",
1040
1040
-
"Endpoint",
1041
1041
-
"DeviceIndex",
1042
1042
-
"Data"
1043
1043
-
]
1044
1044
-
},
1045
1045
-
"ServerInfo": {
1046
1046
-
"type": "object",
1047
1047
-
"description": "Server version information, in Major.Minor.Build format.",
1048
1048
-
"properties": {
1049
1049
-
"Id": { "$ref": "#/components/ClientId" },
1050
1050
-
"ServerName": {
1051
1051
-
"description": "Name of the server. Can be 0-length.",
1052
1052
-
"type": "string"
1053
1233
},
1054
1054
-
"MessageVersion": {
1055
1055
-
"description": "Message template version of the server software.",
1056
1056
-
"type": "integer",
1057
1057
-
"minimum": 0
1058
1058
-
},
1059
1059
-
"MaxPingTime": {
1060
1060
-
"description": "Maximum time (in milliseconds) the server will wait between ping messages from client before shutting down.",
1061
1061
-
"type": "integer",
1062
1062
-
"minimum": 0
1063
1063
-
}
1064
1064
-
},
1065
1065
-
"additionalProperties": false,
1066
1066
-
"required": [
1067
1067
-
"Id",
1068
1068
-
"MessageVersion",
1069
1069
-
"MaxPingTime",
1070
1070
-
"ServerName"
1071
1071
-
]
1072
1072
-
}
1234
1234
+
"additionalProperties": false,
1235
1235
+
"required": [
1236
1236
+
"Id",
1237
1237
+
"MessageVersion",
1238
1238
+
"MaxPingTime",
1239
1239
+
"ServerName"
1240
1240
+
]
1241
1241
+
}
1073
1242
},
1074
1243
"SpecV1Messages": {
1075
1244
"DeviceList": {
1076
1245
"type": "object",
1077
1246
"description": "List of all available devices known to the system.",
1078
1247
"properties": {
1079
1079
-
"Id": { "$ref": "#/components/ClientId" },
1248
1248
+
"Id": {
1249
1249
+
"$ref": "#/components/ClientId"
1250
1250
+
},
1080
1251
"Devices": {
1081
1252
"description": "Array of device ids and names.",
1082
1253
"type": "array",
1083
1254
"items": {
1084
1255
"type": "object",
1085
1256
"properties": {
1086
1086
-
"DeviceName": { "$ref": "#/components/DeviceName" },
1087
1087
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1088
1088
-
"DeviceMessages": {"$ref": "#/components/DeviceMessagesV1" }
1257
1257
+
"DeviceName": {
1258
1258
+
"$ref": "#/components/DeviceName"
1259
1259
+
},
1260
1260
+
"DeviceIndex": {
1261
1261
+
"$ref": "#/components/DeviceIndex"
1262
1262
+
},
1263
1263
+
"DeviceMessages": {
1264
1264
+
"$ref": "#/components/DeviceMessagesV1"
1265
1265
+
}
1089
1266
},
1090
1267
"additionalProperties": false,
1091
1268
"required": [
···
1106
1283
"type": "object",
1107
1284
"description": "Notifies client that a device of a certain type has been added to the server.",
1108
1285
"properties": {
1109
1109
-
"Id": { "$ref": "#/components/SystemId" },
1110
1110
-
"DeviceName": { "$ref": "#/components/DeviceName" },
1111
1111
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1112
1112
-
"DeviceMessages": {"$ref": "#/components/DeviceMessagesV1" }
1286
1286
+
"Id": {
1287
1287
+
"$ref": "#/components/SystemId"
1288
1288
+
},
1289
1289
+
"DeviceName": {
1290
1290
+
"$ref": "#/components/DeviceName"
1291
1291
+
},
1292
1292
+
"DeviceIndex": {
1293
1293
+
"$ref": "#/components/DeviceIndex"
1294
1294
+
},
1295
1295
+
"DeviceMessages": {
1296
1296
+
"$ref": "#/components/DeviceMessagesV1"
1297
1297
+
}
1113
1298
},
1114
1299
"additionalProperties": false,
1115
1300
"required": [
···
1123
1308
"type": "object",
1124
1309
"description": "Sends a vibrate command to a device that supports vibration.",
1125
1310
"properties": {
1126
1126
-
"Id": { "$ref": "#/components/ClientId" },
1127
1127
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1311
1311
+
"Id": {
1312
1312
+
"$ref": "#/components/ClientId"
1313
1313
+
},
1314
1314
+
"DeviceIndex": {
1315
1315
+
"$ref": "#/components/DeviceIndex"
1316
1316
+
},
1128
1317
"Speeds": {
1129
1318
"description": "Device vibration speeds (floating point, 0 < x < 1) keyed on vibrator number, stepping will be device specific.",
1130
1319
"type": "array",
···
1163
1352
"type": "object",
1164
1353
"description": "Sends a rotate command to a device that supports rotation.",
1165
1354
"properties": {
1166
1166
-
"Id": { "$ref": "#/components/ClientId" },
1167
1167
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1355
1355
+
"Id": {
1356
1356
+
"$ref": "#/components/ClientId"
1357
1357
+
},
1358
1358
+
"DeviceIndex": {
1359
1359
+
"$ref": "#/components/DeviceIndex"
1360
1360
+
},
1168
1361
"Rotations": {
1169
1362
"description": "Device rotation speeds (floating point, 0 < x < 1) keyed on rotator number, stepping will be device specific.",
1170
1363
"type": "array",
···
1208
1401
"type": "object",
1209
1402
"description": "Sends a linear movement command to a device that supports linear movements.",
1210
1403
"properties": {
1211
1211
-
"Id": { "$ref": "#/components/ClientId" },
1212
1212
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1404
1404
+
"Id": {
1405
1405
+
"$ref": "#/components/ClientId"
1406
1406
+
},
1407
1407
+
"DeviceIndex": {
1408
1408
+
"$ref": "#/components/DeviceIndex"
1409
1409
+
},
1213
1410
"Vectors": {
1214
1411
"description": "Device linear movement times (milliseconds) and positions (floating point, 0 < x < 1) keyed on linear actuator number, stepping will be device specific.",
1215
1412
"type": "array",
···
1253
1450
"type": "object",
1254
1451
"description": "Server version information, in Major.Minor.Build format.",
1255
1452
"properties": {
1256
1256
-
"Id": { "$ref": "#/components/ClientId" },
1453
1453
+
"Id": {
1454
1454
+
"$ref": "#/components/ClientId"
1455
1455
+
},
1257
1456
"ServerName": {
1258
1457
"description": "Name of the server. Can be 0-length.",
1259
1458
"type": "string"
···
1299
1498
"type": "object",
1300
1499
"description": "Request server version, and relay client name.",
1301
1500
"properties": {
1302
1302
-
"Id": { "$ref": "#/components/ClientId" },
1501
1501
+
"Id": {
1502
1502
+
"$ref": "#/components/ClientId"
1503
1503
+
},
1303
1504
"ClientName": {
1304
1505
"description": "Name of the client software.",
1305
1506
"type": "string"
···
1316
1517
"ClientName",
1317
1518
"MessageVersion"
1318
1519
]
1319
1319
-
}
1520
1520
+
}
1320
1521
},
1321
1522
"SpecV0Messages": {
1322
1523
"DeviceList": {
1323
1524
"type": "object",
1324
1525
"description": "List of all available devices known to the system.",
1325
1526
"properties": {
1326
1326
-
"Id": { "$ref": "#/components/ClientId" },
1527
1527
+
"Id": {
1528
1528
+
"$ref": "#/components/ClientId"
1529
1529
+
},
1327
1530
"Devices": {
1328
1531
"description": "Array of device ids and names.",
1329
1532
"type": "array",
1330
1533
"items": {
1331
1534
"type": "object",
1332
1535
"properties": {
1333
1333
-
"DeviceName": { "$ref": "#/components/DeviceName" },
1334
1334
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1335
1335
-
"DeviceMessages": {"$ref": "#/components/DeviceMessagesV0" }
1536
1536
+
"DeviceName": {
1537
1537
+
"$ref": "#/components/DeviceName"
1538
1538
+
},
1539
1539
+
"DeviceIndex": {
1540
1540
+
"$ref": "#/components/DeviceIndex"
1541
1541
+
},
1542
1542
+
"DeviceMessages": {
1543
1543
+
"$ref": "#/components/DeviceMessagesV0"
1544
1544
+
}
1336
1545
},
1337
1546
"additionalProperties": false,
1338
1547
"required": [
···
1353
1562
"type": "object",
1354
1563
"description": "Notifies client that a device of a certain type has been added to the server.",
1355
1564
"properties": {
1356
1356
-
"Id": { "$ref": "#/components/SystemId" },
1357
1357
-
"DeviceName": { "$ref": "#/components/DeviceName" },
1358
1358
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1359
1359
-
"DeviceMessages": {"$ref": "#/components/DeviceMessagesV0" }
1565
1565
+
"Id": {
1566
1566
+
"$ref": "#/components/SystemId"
1567
1567
+
},
1568
1568
+
"DeviceName": {
1569
1569
+
"$ref": "#/components/DeviceName"
1570
1570
+
},
1571
1571
+
"DeviceIndex": {
1572
1572
+
"$ref": "#/components/DeviceIndex"
1573
1573
+
},
1574
1574
+
"DeviceMessages": {
1575
1575
+
"$ref": "#/components/DeviceMessagesV0"
1576
1576
+
}
1360
1577
},
1361
1578
"additionalProperties": false,
1362
1579
"required": [
···
1370
1587
"type": "object",
1371
1588
"description": "Stops the all actions currently being taken by a device.",
1372
1589
"properties": {
1373
1373
-
"Id": { "$ref": "#/components/ClientId" },
1374
1374
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" }
1590
1590
+
"Id": {
1591
1591
+
"$ref": "#/components/ClientId"
1592
1592
+
},
1593
1593
+
"DeviceIndex": {
1594
1594
+
"$ref": "#/components/DeviceIndex"
1595
1595
+
}
1375
1596
},
1376
1597
"additionalProperties": false,
1377
1598
"required": [
···
1382
1603
"StopAllDevices": {
1383
1604
"type": "object",
1384
1605
"description": "Stops all actions currently being taken by all connected devices.",
1385
1385
-
"anyOf": [ { "$ref": "#/components/ClientIdMessage" } ]
1606
1606
+
"anyOf": [
1607
1607
+
{
1608
1608
+
"$ref": "#/components/ClientIdMessage"
1609
1609
+
}
1610
1610
+
]
1386
1611
},
1387
1612
"VorzeA10CycloneCmd": {
1388
1613
"type": "object",
1389
1614
"description": "Sends a raw byte string to a Kiiroo Onyx/Pearl device.",
1390
1615
"properties": {
1391
1391
-
"Id": { "$ref": "#/components/ClientId" },
1392
1392
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1616
1616
+
"Id": {
1617
1617
+
"$ref": "#/components/ClientId"
1618
1618
+
},
1619
1619
+
"DeviceIndex": {
1620
1620
+
"$ref": "#/components/DeviceIndex"
1621
1621
+
},
1393
1622
"Speed": {
1394
1623
"description": "Rotation speed command for the Cyclone.",
1395
1624
"type": "integer",
···
1413
1642
"type": "object",
1414
1643
"description": "Sends a raw byte string to a Kiiroo Onyx/Pearl device.",
1415
1644
"properties": {
1416
1416
-
"Id": { "$ref": "#/components/ClientId" },
1417
1417
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1645
1645
+
"Id": {
1646
1646
+
"$ref": "#/components/ClientId"
1647
1647
+
},
1648
1648
+
"DeviceIndex": {
1649
1649
+
"$ref": "#/components/DeviceIndex"
1650
1650
+
},
1418
1651
"Command": {
1419
1652
"description": "Command to send to Kiiroo device.",
1420
1653
"type": "string"
···
1431
1664
"type": "object",
1432
1665
"description": "Sends speed and position command to the Fleshlight Launch Device denoted by the device index.",
1433
1666
"properties": {
1434
1434
-
"Id": { "$ref": "#/components/ClientId" },
1435
1435
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1667
1667
+
"Id": {
1668
1668
+
"$ref": "#/components/ClientId"
1669
1669
+
},
1670
1670
+
"DeviceIndex": {
1671
1671
+
"$ref": "#/components/DeviceIndex"
1672
1672
+
},
1436
1673
"Speed": {
1437
1674
"description": "Speed at which to move to designated position.",
1438
1675
"type": "integer",
···
1458
1695
"type": "object",
1459
1696
"description": "Sends a command string to a Lovense device. Command string will be verified by sender.",
1460
1697
"properties": {
1461
1461
-
"Id": { "$ref": "#/components/ClientId" },
1462
1462
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1698
1698
+
"Id": {
1699
1699
+
"$ref": "#/components/ClientId"
1700
1700
+
},
1701
1701
+
"DeviceIndex": {
1702
1702
+
"$ref": "#/components/DeviceIndex"
1703
1703
+
},
1463
1704
"Command": {
1464
1705
"description": "Command to send to Lovense device.",
1465
1706
"type": "string"
···
1476
1717
"type": "object",
1477
1718
"description": "Sends a vibrate command to a device that supports vibration.",
1478
1719
"properties": {
1479
1479
-
"Id": { "$ref": "#/components/ClientId" },
1480
1480
-
"DeviceIndex": { "$ref": "#/components/DeviceIndex" },
1720
1720
+
"Id": {
1721
1721
+
"$ref": "#/components/ClientId"
1722
1722
+
},
1723
1723
+
"DeviceIndex": {
1724
1724
+
"$ref": "#/components/DeviceIndex"
1725
1725
+
},
1481
1726
"Speed": {
1482
1727
"description": "Device vibration speed (floating point, 0 < x < 1), stepping will be device specific.",
1483
1728
"type": "number",
···
1496
1741
"type": "object",
1497
1742
"description": "Server version information, in Major.Minor.Build format.",
1498
1743
"properties": {
1499
1499
-
"Id": { "$ref": "#/components/ClientId" },
1744
1744
+
"Id": {
1745
1745
+
"$ref": "#/components/ClientId"
1746
1746
+
},
1500
1747
"ServerName": {
1501
1748
"description": "Name of the server. Can be 0-length.",
1502
1749
"type": "string"
···
1542
1789
"type": "object",
1543
1790
"description": "Request server version, and relay client name.",
1544
1791
"properties": {
1545
1545
-
"Id": { "$ref": "#/components/ClientId" },
1792
1792
+
"Id": {
1793
1793
+
"$ref": "#/components/ClientId"
1794
1794
+
},
1546
1795
"ClientName": {
1547
1796
"description": "Name of the client software.",
1548
1797
"type": "string"
···
1558
1807
"type": "object",
1559
1808
"description": "Request for server to stream log messages of a certain level to client.",
1560
1809
"properties": {
1561
1561
-
"Id": { "$ref": "#/components/ClientId" },
1810
1810
+
"Id": {
1811
1811
+
"$ref": "#/components/ClientId"
1812
1812
+
},
1562
1813
"LogLevel": {
1563
1814
"description": "Maximum level of log message to receive.",
1564
1564
-
"enum": [ "Off", "Fatal", "Error", "Warn", "Info", "Debug", "Trace" ]
1815
1815
+
"enum": [
1816
1816
+
"Off",
1817
1817
+
"Fatal",
1818
1818
+
"Error",
1819
1819
+
"Warn",
1820
1820
+
"Info",
1821
1821
+
"Debug",
1822
1822
+
"Trace"
1823
1823
+
]
1565
1824
}
1566
1825
},
1567
1826
"additionalProperties": false,
···
1574
1833
"type": "object",
1575
1834
"description": "Log message from the server.",
1576
1835
"properties": {
1577
1577
-
"Id": { "$ref": "#/components/SystemId" },
1836
1836
+
"Id": {
1837
1837
+
"$ref": "#/components/SystemId"
1838
1838
+
},
1578
1839
"LogLevel": {
1579
1840
"description": "Log level of message.",
1580
1580
-
"enum": [ "Off", "Fatal", "Error", "Warn", "Info", "Debug", "Trace" ]
1841
1841
+
"enum": [
1842
1842
+
"Off",
1843
1843
+
"Fatal",
1844
1844
+
"Error",
1845
1845
+
"Warn",
1846
1846
+
"Info",
1847
1847
+
"Debug",
1848
1848
+
"Trace"
1849
1849
+
]
1581
1850
},
1582
1851
"LogMessage": {
1583
1852
"description": "Log message from server.",
···
1594
1863
"DeviceRemoved": {
1595
1864
"type": "object",
1596
1865
"description": "Notifies client that a device of a certain type has been removed from the server.",
1597
1597
-
"anyOf": [ { "$ref": "#/components/SystemIdDeviceIndexMessage" } ]
1866
1866
+
"anyOf": [
1867
1867
+
{
1868
1868
+
"$ref": "#/components/SystemIdDeviceIndexMessage"
1869
1869
+
}
1870
1870
+
]
1598
1871
},
1599
1872
"RequestDeviceList": {
1600
1873
"type": "object",
1601
1874
"description": "Request for the server to send a list of devices to the client.",
1602
1602
-
"anyOf": [ { "$ref": "#/components/ClientIdMessage" } ]
1875
1875
+
"anyOf": [
1876
1876
+
{
1877
1877
+
"$ref": "#/components/ClientIdMessage"
1878
1878
+
}
1879
1879
+
]
1603
1880
},
1604
1881
"StartScanning": {
1605
1882
"type": "object",
1606
1883
"description": "Request for the server to start scanning for new devices.",
1607
1607
-
"anyOf": [ { "$ref": "#/components/ClientIdMessage" } ]
1884
1884
+
"anyOf": [
1885
1885
+
{
1886
1886
+
"$ref": "#/components/ClientIdMessage"
1887
1887
+
}
1888
1888
+
]
1608
1889
},
1609
1890
"StopScanning": {
1610
1891
"type": "object",
1611
1892
"description": "Request for the server to stop scanning for new devices.",
1612
1612
-
"anyOf": [ { "$ref": "#/components/ClientIdMessage" } ]
1893
1893
+
"anyOf": [
1894
1894
+
{
1895
1895
+
"$ref": "#/components/ClientIdMessage"
1896
1896
+
}
1897
1897
+
]
1613
1898
},
1614
1899
"ScanningFinished": {
1615
1900
"type": "object",
1616
1901
"description": "Server notification to client that scanning has ended.",
1617
1617
-
"anyOf": [ { "$ref": "#/components/SystemIdMessage" } ]
1902
1902
+
"anyOf": [
1903
1903
+
{
1904
1904
+
"$ref": "#/components/SystemIdMessage"
1905
1905
+
}
1906
1906
+
]
1618
1907
},
1619
1908
"Ok": {
1620
1909
"type": "object",
1621
1910
"description": "Signifies successful processing of the message indicated by the id.",
1622
1622
-
"anyOf": [ { "$ref": "#/components/ClientIdMessage" } ]
1911
1911
+
"anyOf": [
1912
1912
+
{
1913
1913
+
"$ref": "#/components/ClientIdMessage"
1914
1914
+
}
1915
1915
+
]
1623
1916
},
1624
1917
"Ping": {
1625
1918
"type": "object",
1626
1919
"description": "Connection keep-alive message.",
1627
1627
-
"anyOf": [ { "$ref": "#/components/ClientIdMessage" } ]
1920
1920
+
"anyOf": [
1921
1921
+
{
1922
1922
+
"$ref": "#/components/ClientIdMessage"
1923
1923
+
}
1924
1924
+
]
1628
1925
},
1629
1926
"Error": {
1630
1927
"type": "object",
1631
1928
"description": "Signifies the server encountered an error while processing the message indicated by the id.",
1632
1929
"properties": {
1633
1633
-
"Id": { "$ref": "#/components/ServerId" },
1930
1930
+
"Id": {
1931
1931
+
"$ref": "#/components/ServerId"
1932
1932
+
},
1634
1933
"ErrorMessage": {
1635
1934
"type": "string"
1636
1935
},
···
1651
1950
"type": "object",
1652
1951
"description": "Used for connection/application testing. Causes server to echo back the string sent. Sending string of 'Error' will result in a server error. ",
1653
1952
"properties": {
1654
1654
-
"Id": { "$ref": "#/components/ClientId" },
1953
1953
+
"Id": {
1954
1954
+
"$ref": "#/components/ClientId"
1955
1955
+
},
1655
1956
"TestString": {
1656
1957
"description": "String to be echo'd back from server. Setting this to 'Error' will cause an error to be thrown.",
1657
1958
"type": "string"
···
1672
1973
"type": "object",
1673
1974
"description": "All messages valid in Buttplug Spec v4",
1674
1975
"properties": {
1675
1675
-
"DeviceList": { "$ref": "#/messages/SpecV4Messages/DeviceList" },
1676
1676
-
"Error": { "$ref": "#/messages/SpecV0Messages/Error" },
1677
1677
-
"Ok": { "$ref": "#/messages/SpecV0Messages/Ok" },
1678
1678
-
"Ping": { "$ref": "#/messages/SpecV0Messages/Ping" },
1679
1679
-
"RawCmd": { "$ref": "#/messages/SpecV4Messages/RawCmd" },
1680
1680
-
"RawReading": { "$ref": "#/messages/SpecV2Messages/RawReading" },
1681
1681
-
"RequestDeviceList": { "$ref": "#/messages/SpecV0Messages/RequestDeviceList" },
1682
1682
-
"RequestServerInfo": { "$ref": "#/messages/SpecV4Messages/RequestServerInfo" },
1683
1683
-
"ScanningFinished": { "$ref": "#/messages/SpecV0Messages/ScanningFinished" },
1684
1684
-
"InputCmd": { "$ref": "#/messages/SpecV4Messages/InputCmd" },
1685
1685
-
"InputReading": { "$ref": "#/messages/SpecV4Messages/InputReading" },
1686
1686
-
"ServerInfo": { "$ref": "#/messages/SpecV4Messages/ServerInfo" },
1687
1687
-
"StartScanning": { "$ref": "#/messages/SpecV0Messages/StartScanning" },
1688
1688
-
"StopAllDevices": { "$ref": "#/messages/SpecV0Messages/StopAllDevices" },
1689
1689
-
"StopDeviceCmd": { "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" },
1690
1690
-
"StopScanning": { "$ref": "#/messages/SpecV0Messages/StopScanning" },
1691
1691
-
"OutputCmd": { "$ref": "#/messages/SpecV4Messages/OutputCmd" }
1976
1976
+
"DeviceList": {
1977
1977
+
"$ref": "#/messages/SpecV4Messages/DeviceList"
1978
1978
+
},
1979
1979
+
"Error": {
1980
1980
+
"$ref": "#/messages/SpecV0Messages/Error"
1981
1981
+
},
1982
1982
+
"Ok": {
1983
1983
+
"$ref": "#/messages/SpecV0Messages/Ok"
1984
1984
+
},
1985
1985
+
"Ping": {
1986
1986
+
"$ref": "#/messages/SpecV0Messages/Ping"
1987
1987
+
},
1988
1988
+
"RequestDeviceList": {
1989
1989
+
"$ref": "#/messages/SpecV0Messages/RequestDeviceList"
1990
1990
+
},
1991
1991
+
"RequestServerInfo": {
1992
1992
+
"$ref": "#/messages/SpecV4Messages/RequestServerInfo"
1993
1993
+
},
1994
1994
+
"ScanningFinished": {
1995
1995
+
"$ref": "#/messages/SpecV0Messages/ScanningFinished"
1996
1996
+
},
1997
1997
+
"InputCmd": {
1998
1998
+
"$ref": "#/messages/SpecV4Messages/InputCmd"
1999
1999
+
},
2000
2000
+
"InputReading": {
2001
2001
+
"$ref": "#/messages/SpecV4Messages/InputReading"
2002
2002
+
},
2003
2003
+
"ServerInfo": {
2004
2004
+
"$ref": "#/messages/SpecV4Messages/ServerInfo"
2005
2005
+
},
2006
2006
+
"StartScanning": {
2007
2007
+
"$ref": "#/messages/SpecV0Messages/StartScanning"
2008
2008
+
},
2009
2009
+
"StopAllDevices": {
2010
2010
+
"$ref": "#/messages/SpecV0Messages/StopAllDevices"
2011
2011
+
},
2012
2012
+
"StopDeviceCmd": {
2013
2013
+
"$ref": "#/messages/SpecV0Messages/StopDeviceCmd"
2014
2014
+
},
2015
2015
+
"StopScanning": {
2016
2016
+
"$ref": "#/messages/SpecV0Messages/StopScanning"
2017
2017
+
},
2018
2018
+
"OutputCmd": {
2019
2019
+
"$ref": "#/messages/SpecV4Messages/OutputCmd"
2020
2020
+
}
1692
2021
},
1693
2022
"additionalProperties": false,
1694
2023
"minProperties": 1,
1695
2024
"maxProperties": 1
1696
2025
},
1697
2026
"minItems": 1
1698
1698
-
},
2027
2027
+
},
1699
2028
"MessageSpecV3": {
1700
2029
"type": "array",
1701
2030
"items": {
1702
2031
"type": "object",
1703
2032
"description": "All messages valid in Buttplug Spec v3",
1704
2033
"properties": {
1705
1705
-
"DeviceList": { "$ref": "#/messages/SpecV3Messages/DeviceList" },
1706
1706
-
"DeviceAdded": { "$ref": "#/messages/SpecV3Messages/DeviceAdded" },
1707
1707
-
"DeviceRemoved": { "$ref": "#/messages/SpecV0Messages/DeviceRemoved" },
1708
1708
-
"Error": { "$ref": "#/messages/SpecV0Messages/Error" },
1709
1709
-
"ScalarCmd": { "$ref": "#/messages/SpecV3Messages/ScalarCmd" },
1710
1710
-
"LinearCmd": { "$ref": "#/messages/SpecV1Messages/LinearCmd" },
1711
1711
-
"Ok": { "$ref": "#/messages/SpecV0Messages/Ok" },
1712
1712
-
"Ping": { "$ref": "#/messages/SpecV0Messages/Ping" },
1713
1713
-
"RawReadCmd": { "$ref": "#/messages/SpecV2Messages/RawReadCmd" },
1714
1714
-
"RawReading": { "$ref": "#/messages/SpecV2Messages/RawReading" },
1715
1715
-
"RawWriteCmd": { "$ref": "#/messages/SpecV2Messages/RawWriteCmd" },
1716
1716
-
"RawSubscribeCmd": { "$ref": "#/messages/SpecV2Messages/RawSubscribeCmd" },
1717
1717
-
"RawUnsubscribeCmd": { "$ref": "#/messages/SpecV2Messages/RawUnsubscribeCmd" },
1718
1718
-
"RequestDeviceList": { "$ref": "#/messages/SpecV0Messages/RequestDeviceList" },
1719
1719
-
"RequestServerInfo": { "$ref": "#/messages/SpecV1Messages/RequestServerInfo" },
1720
1720
-
"RotateCmd": { "$ref": "#/messages/SpecV1Messages/RotateCmd" },
1721
1721
-
"ScanningFinished": { "$ref": "#/messages/SpecV0Messages/ScanningFinished" },
1722
1722
-
"SensorReadCmd": { "$ref": "#/messages/SpecV3Messages/SensorReadCmd" },
1723
1723
-
"SensorReading": { "$ref": "#/messages/SpecV3Messages/SensorReading" },
1724
1724
-
"SensorSubscribeCmd": { "$ref": "#/messages/SpecV3Messages/SensorSubscribeCmd" },
1725
1725
-
"SensorUnsubscribeCmd": { "$ref": "#/messages/SpecV3Messages/SensorUnsubscribeCmd" },
1726
1726
-
"ServerInfo": { "$ref": "#/messages/SpecV2Messages/ServerInfo" },
1727
1727
-
"StartScanning": { "$ref": "#/messages/SpecV0Messages/StartScanning" },
1728
1728
-
"StopAllDevices": { "$ref": "#/messages/SpecV0Messages/StopAllDevices" },
1729
1729
-
"StopDeviceCmd": { "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" },
1730
1730
-
"StopScanning": { "$ref": "#/messages/SpecV0Messages/StopScanning" }
2034
2034
+
"DeviceList": {
2035
2035
+
"$ref": "#/messages/SpecV3Messages/DeviceList"
2036
2036
+
},
2037
2037
+
"DeviceAdded": {
2038
2038
+
"$ref": "#/messages/SpecV3Messages/DeviceAdded"
2039
2039
+
},
2040
2040
+
"DeviceRemoved": {
2041
2041
+
"$ref": "#/messages/SpecV0Messages/DeviceRemoved"
2042
2042
+
},
2043
2043
+
"Error": {
2044
2044
+
"$ref": "#/messages/SpecV0Messages/Error"
2045
2045
+
},
2046
2046
+
"ScalarCmd": {
2047
2047
+
"$ref": "#/messages/SpecV3Messages/ScalarCmd"
2048
2048
+
},
2049
2049
+
"LinearCmd": {
2050
2050
+
"$ref": "#/messages/SpecV1Messages/LinearCmd"
2051
2051
+
},
2052
2052
+
"Ok": {
2053
2053
+
"$ref": "#/messages/SpecV0Messages/Ok"
2054
2054
+
},
2055
2055
+
"Ping": {
2056
2056
+
"$ref": "#/messages/SpecV0Messages/Ping"
2057
2057
+
},
2058
2058
+
"RawReadCmd": {
2059
2059
+
"$ref": "#/messages/SpecV2Messages/RawReadCmd"
2060
2060
+
},
2061
2061
+
"RawReading": {
2062
2062
+
"$ref": "#/messages/SpecV2Messages/RawReading"
2063
2063
+
},
2064
2064
+
"RawWriteCmd": {
2065
2065
+
"$ref": "#/messages/SpecV2Messages/RawWriteCmd"
2066
2066
+
},
2067
2067
+
"RawSubscribeCmd": {
2068
2068
+
"$ref": "#/messages/SpecV2Messages/RawSubscribeCmd"
2069
2069
+
},
2070
2070
+
"RawUnsubscribeCmd": {
2071
2071
+
"$ref": "#/messages/SpecV2Messages/RawUnsubscribeCmd"
2072
2072
+
},
2073
2073
+
"RequestDeviceList": {
2074
2074
+
"$ref": "#/messages/SpecV0Messages/RequestDeviceList"
2075
2075
+
},
2076
2076
+
"RequestServerInfo": {
2077
2077
+
"$ref": "#/messages/SpecV1Messages/RequestServerInfo"
2078
2078
+
},
2079
2079
+
"RotateCmd": {
2080
2080
+
"$ref": "#/messages/SpecV1Messages/RotateCmd"
2081
2081
+
},
2082
2082
+
"ScanningFinished": {
2083
2083
+
"$ref": "#/messages/SpecV0Messages/ScanningFinished"
2084
2084
+
},
2085
2085
+
"SensorReadCmd": {
2086
2086
+
"$ref": "#/messages/SpecV3Messages/SensorReadCmd"
2087
2087
+
},
2088
2088
+
"SensorReading": {
2089
2089
+
"$ref": "#/messages/SpecV3Messages/SensorReading"
2090
2090
+
},
2091
2091
+
"SensorSubscribeCmd": {
2092
2092
+
"$ref": "#/messages/SpecV3Messages/SensorSubscribeCmd"
2093
2093
+
},
2094
2094
+
"SensorUnsubscribeCmd": {
2095
2095
+
"$ref": "#/messages/SpecV3Messages/SensorUnsubscribeCmd"
2096
2096
+
},
2097
2097
+
"ServerInfo": {
2098
2098
+
"$ref": "#/messages/SpecV2Messages/ServerInfo"
2099
2099
+
},
2100
2100
+
"StartScanning": {
2101
2101
+
"$ref": "#/messages/SpecV0Messages/StartScanning"
2102
2102
+
},
2103
2103
+
"StopAllDevices": {
2104
2104
+
"$ref": "#/messages/SpecV0Messages/StopAllDevices"
2105
2105
+
},
2106
2106
+
"StopDeviceCmd": {
2107
2107
+
"$ref": "#/messages/SpecV0Messages/StopDeviceCmd"
2108
2108
+
},
2109
2109
+
"StopScanning": {
2110
2110
+
"$ref": "#/messages/SpecV0Messages/StopScanning"
2111
2111
+
}
1731
2112
},
1732
2113
"additionalProperties": false,
1733
2114
"minProperties": 1,
···
1741
2122
"type": "object",
1742
2123
"description": "All messages valid in Buttplug Spec v2.",
1743
2124
"properties": {
1744
1744
-
"BatteryLevelCmd": { "$ref": "#/messages/SpecV2Messages/BatteryLevelCmd" },
1745
1745
-
"BatteryLevelReading": { "$ref": "#/messages/SpecV2Messages/BatteryLevelReading" },
1746
1746
-
"DeviceList": { "$ref": "#/messages/SpecV2Messages/DeviceList" },
1747
1747
-
"DeviceAdded": { "$ref": "#/messages/SpecV2Messages/DeviceAdded" },
1748
1748
-
"DeviceRemoved": { "$ref": "#/messages/SpecV0Messages/DeviceRemoved" },
1749
1749
-
"Error": { "$ref": "#/messages/SpecV0Messages/Error" },
1750
1750
-
"LinearCmd": { "$ref": "#/messages/SpecV1Messages/LinearCmd" },
1751
1751
-
"Ok": { "$ref": "#/messages/SpecV0Messages/Ok" },
1752
1752
-
"Ping": { "$ref": "#/messages/SpecV0Messages/Ping" },
1753
1753
-
"RawReadCmd": { "$ref": "#/messages/SpecV2Messages/RawReadCmd" },
1754
1754
-
"RawReading": { "$ref": "#/messages/SpecV2Messages/RawReading" },
1755
1755
-
"RawWriteCmd": { "$ref": "#/messages/SpecV2Messages/RawWriteCmd" },
1756
1756
-
"RawSubscribeCmd": { "$ref": "#/messages/SpecV2Messages/RawSubscribeCmd" },
1757
1757
-
"RawUnsubscribeCmd": { "$ref": "#/messages/SpecV2Messages/RawUnsubscribeCmd" },
1758
1758
-
"RequestDeviceList": { "$ref": "#/messages/SpecV0Messages/RequestDeviceList" },
1759
1759
-
"RequestLog": { "$ref": "#/messages/SpecV0Messages/RequestLog" },
1760
1760
-
"RequestServerInfo": { "$ref": "#/messages/SpecV1Messages/RequestServerInfo" },
1761
1761
-
"RotateCmd": { "$ref": "#/messages/SpecV1Messages/RotateCmd" },
1762
1762
-
"RSSILevelCmd": { "$ref": "#/messages/SpecV2Messages/RSSILevelCmd" },
1763
1763
-
"RSSILevelReading": { "$ref": "#/messages/SpecV2Messages/RSSILevelReading" },
1764
1764
-
"ScanningFinished": { "$ref": "#/messages/SpecV0Messages/ScanningFinished" },
1765
1765
-
"ServerInfo": { "$ref": "#/messages/SpecV2Messages/ServerInfo" },
1766
1766
-
"StartScanning": { "$ref": "#/messages/SpecV0Messages/StartScanning" },
1767
1767
-
"StopAllDevices": { "$ref": "#/messages/SpecV0Messages/StopAllDevices" },
1768
1768
-
"StopDeviceCmd": { "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" },
1769
1769
-
"StopScanning": { "$ref": "#/messages/SpecV0Messages/StopScanning" },
1770
1770
-
"VibrateCmd": { "$ref": "#/messages/SpecV1Messages/VibrateCmd" }
2125
2125
+
"BatteryLevelCmd": {
2126
2126
+
"$ref": "#/messages/SpecV2Messages/BatteryLevelCmd"
2127
2127
+
},
2128
2128
+
"BatteryLevelReading": {
2129
2129
+
"$ref": "#/messages/SpecV2Messages/BatteryLevelReading"
2130
2130
+
},
2131
2131
+
"DeviceList": {
2132
2132
+
"$ref": "#/messages/SpecV2Messages/DeviceList"
2133
2133
+
},
2134
2134
+
"DeviceAdded": {
2135
2135
+
"$ref": "#/messages/SpecV2Messages/DeviceAdded"
2136
2136
+
},
2137
2137
+
"DeviceRemoved": {
2138
2138
+
"$ref": "#/messages/SpecV0Messages/DeviceRemoved"
2139
2139
+
},
2140
2140
+
"Error": {
2141
2141
+
"$ref": "#/messages/SpecV0Messages/Error"
2142
2142
+
},
2143
2143
+
"LinearCmd": {
2144
2144
+
"$ref": "#/messages/SpecV1Messages/LinearCmd"
2145
2145
+
},
2146
2146
+
"Ok": {
2147
2147
+
"$ref": "#/messages/SpecV0Messages/Ok"
2148
2148
+
},
2149
2149
+
"Ping": {
2150
2150
+
"$ref": "#/messages/SpecV0Messages/Ping"
2151
2151
+
},
2152
2152
+
"RawReadCmd": {
2153
2153
+
"$ref": "#/messages/SpecV2Messages/RawReadCmd"
2154
2154
+
},
2155
2155
+
"RawReading": {
2156
2156
+
"$ref": "#/messages/SpecV2Messages/RawReading"
2157
2157
+
},
2158
2158
+
"RawWriteCmd": {
2159
2159
+
"$ref": "#/messages/SpecV2Messages/RawWriteCmd"
2160
2160
+
},
2161
2161
+
"RawSubscribeCmd": {
2162
2162
+
"$ref": "#/messages/SpecV2Messages/RawSubscribeCmd"
2163
2163
+
},
2164
2164
+
"RawUnsubscribeCmd": {
2165
2165
+
"$ref": "#/messages/SpecV2Messages/RawUnsubscribeCmd"
2166
2166
+
},
2167
2167
+
"RequestDeviceList": {
2168
2168
+
"$ref": "#/messages/SpecV0Messages/RequestDeviceList"
2169
2169
+
},
2170
2170
+
"RequestLog": {
2171
2171
+
"$ref": "#/messages/SpecV0Messages/RequestLog"
2172
2172
+
},
2173
2173
+
"RequestServerInfo": {
2174
2174
+
"$ref": "#/messages/SpecV1Messages/RequestServerInfo"
2175
2175
+
},
2176
2176
+
"RotateCmd": {
2177
2177
+
"$ref": "#/messages/SpecV1Messages/RotateCmd"
2178
2178
+
},
2179
2179
+
"RSSILevelCmd": {
2180
2180
+
"$ref": "#/messages/SpecV2Messages/RSSILevelCmd"
2181
2181
+
},
2182
2182
+
"RSSILevelReading": {
2183
2183
+
"$ref": "#/messages/SpecV2Messages/RSSILevelReading"
2184
2184
+
},
2185
2185
+
"ScanningFinished": {
2186
2186
+
"$ref": "#/messages/SpecV0Messages/ScanningFinished"
2187
2187
+
},
2188
2188
+
"ServerInfo": {
2189
2189
+
"$ref": "#/messages/SpecV2Messages/ServerInfo"
2190
2190
+
},
2191
2191
+
"StartScanning": {
2192
2192
+
"$ref": "#/messages/SpecV0Messages/StartScanning"
2193
2193
+
},
2194
2194
+
"StopAllDevices": {
2195
2195
+
"$ref": "#/messages/SpecV0Messages/StopAllDevices"
2196
2196
+
},
2197
2197
+
"StopDeviceCmd": {
2198
2198
+
"$ref": "#/messages/SpecV0Messages/StopDeviceCmd"
2199
2199
+
},
2200
2200
+
"StopScanning": {
2201
2201
+
"$ref": "#/messages/SpecV0Messages/StopScanning"
2202
2202
+
},
2203
2203
+
"VibrateCmd": {
2204
2204
+
"$ref": "#/messages/SpecV1Messages/VibrateCmd"
2205
2205
+
}
1771
2206
},
1772
2207
"additionalProperties": false,
1773
2208
"minProperties": 1,
···
1781
2216
"type": "object",
1782
2217
"description": "One or more messages validated by the Buttplug Message schema list.",
1783
2218
"properties": {
1784
1784
-
"DeviceList": { "$ref": "#/messages/SpecV1Messages/DeviceList" },
1785
1785
-
"DeviceAdded": { "$ref": "#/messages/SpecV1Messages/DeviceAdded" },
1786
1786
-
"DeviceRemoved": { "$ref": "#/messages/SpecV0Messages/DeviceRemoved" },
1787
1787
-
"Error": { "$ref": "#/messages/SpecV0Messages/Error" },
1788
1788
-
"FleshlightLaunchFW12Cmd": { "$ref": "#/messages/SpecV0Messages/FleshlightLaunchFW12Cmd" },
1789
1789
-
"KiirooCmd": { "$ref": "#/messages/SpecV0Messages/KiirooCmd" },
1790
1790
-
"LinearCmd": { "$ref": "#/messages/SpecV1Messages/LinearCmd" },
1791
1791
-
"Log": { "$ref": "#/messages/SpecV0Messages/Log" },
1792
1792
-
"Ok": { "$ref": "#/messages/SpecV0Messages/Ok" },
1793
1793
-
"Ping": { "$ref": "#/messages/SpecV0Messages/Ping" },
1794
1794
-
"RequestDeviceList": { "$ref": "#/messages/SpecV0Messages/RequestDeviceList" },
1795
1795
-
"RequestLog": { "$ref": "#/messages/SpecV0Messages/RequestLog" },
1796
1796
-
"RequestServerInfo": { "$ref": "#/messages/SpecV1Messages/RequestServerInfo" },
1797
1797
-
"RotateCmd": { "$ref": "#/messages/SpecV1Messages/RotateCmd" },
1798
1798
-
"ServerInfo": { "$ref": "#/messages/SpecV1Messages/ServerInfo" },
1799
1799
-
"StartScanning": { "$ref": "#/messages/SpecV0Messages/StartScanning" },
1800
1800
-
"StopAllDevices": { "$ref": "#/messages/SpecV0Messages/StopAllDevices" },
1801
1801
-
"StopDeviceCmd": { "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" },
1802
1802
-
"StopScanning": { "$ref": "#/messages/SpecV0Messages/StopScanning" },
1803
1803
-
"Test": { "$ref": "#/messages/SpecV0Messages/Test" },
1804
1804
-
"VibrateCmd": { "$ref": "#/messages/SpecV1Messages/VibrateCmd" },
1805
1805
-
"VorzeA10CycloneCmd": { "$ref": "#/messages/SpecV0Messages/VorzeA10CycloneCmd" }
2219
2219
+
"DeviceList": {
2220
2220
+
"$ref": "#/messages/SpecV1Messages/DeviceList"
2221
2221
+
},
2222
2222
+
"DeviceAdded": {
2223
2223
+
"$ref": "#/messages/SpecV1Messages/DeviceAdded"
2224
2224
+
},
2225
2225
+
"DeviceRemoved": {
2226
2226
+
"$ref": "#/messages/SpecV0Messages/DeviceRemoved"
2227
2227
+
},
2228
2228
+
"Error": {
2229
2229
+
"$ref": "#/messages/SpecV0Messages/Error"
2230
2230
+
},
2231
2231
+
"FleshlightLaunchFW12Cmd": {
2232
2232
+
"$ref": "#/messages/SpecV0Messages/FleshlightLaunchFW12Cmd"
2233
2233
+
},
2234
2234
+
"KiirooCmd": {
2235
2235
+
"$ref": "#/messages/SpecV0Messages/KiirooCmd"
2236
2236
+
},
2237
2237
+
"LinearCmd": {
2238
2238
+
"$ref": "#/messages/SpecV1Messages/LinearCmd"
2239
2239
+
},
2240
2240
+
"Log": {
2241
2241
+
"$ref": "#/messages/SpecV0Messages/Log"
2242
2242
+
},
2243
2243
+
"Ok": {
2244
2244
+
"$ref": "#/messages/SpecV0Messages/Ok"
2245
2245
+
},
2246
2246
+
"Ping": {
2247
2247
+
"$ref": "#/messages/SpecV0Messages/Ping"
2248
2248
+
},
2249
2249
+
"RequestDeviceList": {
2250
2250
+
"$ref": "#/messages/SpecV0Messages/RequestDeviceList"
2251
2251
+
},
2252
2252
+
"RequestLog": {
2253
2253
+
"$ref": "#/messages/SpecV0Messages/RequestLog"
2254
2254
+
},
2255
2255
+
"RequestServerInfo": {
2256
2256
+
"$ref": "#/messages/SpecV1Messages/RequestServerInfo"
2257
2257
+
},
2258
2258
+
"RotateCmd": {
2259
2259
+
"$ref": "#/messages/SpecV1Messages/RotateCmd"
2260
2260
+
},
2261
2261
+
"ServerInfo": {
2262
2262
+
"$ref": "#/messages/SpecV1Messages/ServerInfo"
2263
2263
+
},
2264
2264
+
"StartScanning": {
2265
2265
+
"$ref": "#/messages/SpecV0Messages/StartScanning"
2266
2266
+
},
2267
2267
+
"StopAllDevices": {
2268
2268
+
"$ref": "#/messages/SpecV0Messages/StopAllDevices"
2269
2269
+
},
2270
2270
+
"StopDeviceCmd": {
2271
2271
+
"$ref": "#/messages/SpecV0Messages/StopDeviceCmd"
2272
2272
+
},
2273
2273
+
"StopScanning": {
2274
2274
+
"$ref": "#/messages/SpecV0Messages/StopScanning"
2275
2275
+
},
2276
2276
+
"Test": {
2277
2277
+
"$ref": "#/messages/SpecV0Messages/Test"
2278
2278
+
},
2279
2279
+
"VibrateCmd": {
2280
2280
+
"$ref": "#/messages/SpecV1Messages/VibrateCmd"
2281
2281
+
},
2282
2282
+
"VorzeA10CycloneCmd": {
2283
2283
+
"$ref": "#/messages/SpecV0Messages/VorzeA10CycloneCmd"
2284
2284
+
}
1806
2285
},
1807
2286
"additionalProperties": false,
1808
2287
"minProperties": 1,
···
1816
2295
"type": "object",
1817
2296
"description": "One or more messages validated by the Buttplug Message schema list.",
1818
2297
"properties": {
1819
1819
-
"DeviceList": { "$ref": "#/messages/SpecV0Messages/DeviceList" },
1820
1820
-
"DeviceAdded": { "$ref": "#/messages/SpecV0Messages/DeviceAdded" },
1821
1821
-
"DeviceRemoved": { "$ref": "#/messages/SpecV0Messages/DeviceRemoved" },
1822
1822
-
"Error": { "$ref": "#/messages/SpecV0Messages/Error" },
1823
1823
-
"Log": { "$ref": "#/messages/SpecV0Messages/Log" },
1824
1824
-
"Ok": { "$ref": "#/messages/SpecV0Messages/Ok" },
1825
1825
-
"Ping": { "$ref": "#/messages/SpecV0Messages/Ping" },
1826
1826
-
"RequestDeviceList": { "$ref": "#/messages/SpecV0Messages/RequestDeviceList" },
1827
1827
-
"RequestLog": { "$ref": "#/messages/SpecV0Messages/RequestLog" },
1828
1828
-
"RequestServerInfo": { "$ref": "#/messages/SpecV0Messages/RequestServerInfo" },
1829
1829
-
"ServerInfo": { "$ref": "#/messages/SpecV0Messages/ServerInfo" },
1830
1830
-
"StartScanning": { "$ref": "#/messages/SpecV0Messages/StartScanning" },
1831
1831
-
"StopAllDevices": { "$ref": "#/messages/SpecV0Messages/StopAllDevices" },
1832
1832
-
"StopDeviceCmd": { "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" },
1833
1833
-
"StopScanning": { "$ref": "#/messages/SpecV0Messages/StopScanning" },
1834
1834
-
"Test": { "$ref": "#/messages/SpecV0Messages/Test" },
1835
1835
-
"FleshlightLaunchFW12Cmd": { "$ref": "#/messages/SpecV0Messages/FleshlightLaunchFW12Cmd" },
1836
1836
-
"KiirooCmd": { "$ref": "#/messages/SpecV0Messages/KiirooCmd" },
1837
1837
-
"SingleMotorVibrateCmd": { "$ref": "#/messages/SpecV0Messages/SingleMotorVibrateCmd" },
1838
1838
-
"VorzeA10CycloneCmd": { "$ref": "#/messages/SpecV0Messages/VorzeA10CycloneCmd" }
2298
2298
+
"DeviceList": {
2299
2299
+
"$ref": "#/messages/SpecV0Messages/DeviceList"
2300
2300
+
},
2301
2301
+
"DeviceAdded": {
2302
2302
+
"$ref": "#/messages/SpecV0Messages/DeviceAdded"
2303
2303
+
},
2304
2304
+
"DeviceRemoved": {
2305
2305
+
"$ref": "#/messages/SpecV0Messages/DeviceRemoved"
2306
2306
+
},
2307
2307
+
"Error": {
2308
2308
+
"$ref": "#/messages/SpecV0Messages/Error"
2309
2309
+
},
2310
2310
+
"Log": {
2311
2311
+
"$ref": "#/messages/SpecV0Messages/Log"
2312
2312
+
},
2313
2313
+
"Ok": {
2314
2314
+
"$ref": "#/messages/SpecV0Messages/Ok"
2315
2315
+
},
2316
2316
+
"Ping": {
2317
2317
+
"$ref": "#/messages/SpecV0Messages/Ping"
2318
2318
+
},
2319
2319
+
"RequestDeviceList": {
2320
2320
+
"$ref": "#/messages/SpecV0Messages/RequestDeviceList"
2321
2321
+
},
2322
2322
+
"RequestLog": {
2323
2323
+
"$ref": "#/messages/SpecV0Messages/RequestLog"
2324
2324
+
},
2325
2325
+
"RequestServerInfo": {
2326
2326
+
"$ref": "#/messages/SpecV0Messages/RequestServerInfo"
2327
2327
+
},
2328
2328
+
"ServerInfo": {
2329
2329
+
"$ref": "#/messages/SpecV0Messages/ServerInfo"
2330
2330
+
},
2331
2331
+
"StartScanning": {
2332
2332
+
"$ref": "#/messages/SpecV0Messages/StartScanning"
2333
2333
+
},
2334
2334
+
"StopAllDevices": {
2335
2335
+
"$ref": "#/messages/SpecV0Messages/StopAllDevices"
2336
2336
+
},
2337
2337
+
"StopDeviceCmd": {
2338
2338
+
"$ref": "#/messages/SpecV0Messages/StopDeviceCmd"
2339
2339
+
},
2340
2340
+
"StopScanning": {
2341
2341
+
"$ref": "#/messages/SpecV0Messages/StopScanning"
2342
2342
+
},
2343
2343
+
"Test": {
2344
2344
+
"$ref": "#/messages/SpecV0Messages/Test"
2345
2345
+
},
2346
2346
+
"FleshlightLaunchFW12Cmd": {
2347
2347
+
"$ref": "#/messages/SpecV0Messages/FleshlightLaunchFW12Cmd"
2348
2348
+
},
2349
2349
+
"KiirooCmd": {
2350
2350
+
"$ref": "#/messages/SpecV0Messages/KiirooCmd"
2351
2351
+
},
2352
2352
+
"SingleMotorVibrateCmd": {
2353
2353
+
"$ref": "#/messages/SpecV0Messages/SingleMotorVibrateCmd"
2354
2354
+
},
2355
2355
+
"VorzeA10CycloneCmd": {
2356
2356
+
"$ref": "#/messages/SpecV0Messages/VorzeA10CycloneCmd"
2357
2357
+
}
1839
2358
},
1840
2359
"additionalProperties": false,
1841
2360
"minProperties": 1,
···
1844
2363
"minItems": 1
1845
2364
}
1846
2365
},
1847
1847
-
"anyOf": [
1848
1848
-
{ "$ref": "#/specs/MessageSpecV4" },
1849
1849
-
{ "$ref": "#/specs/MessageSpecV3" },
1850
1850
-
{ "$ref": "#/specs/MessageSpecV2" },
1851
1851
-
{ "$ref": "#/specs/MessageSpecV1" },
1852
1852
-
{ "$ref": "#/specs/MessageSpecV0" }
2366
2366
+
"anyOf": [
2367
2367
+
{
2368
2368
+
"$ref": "#/specs/MessageSpecV4"
2369
2369
+
},
2370
2370
+
{
2371
2371
+
"$ref": "#/specs/MessageSpecV3"
2372
2372
+
},
2373
2373
+
{
2374
2374
+
"$ref": "#/specs/MessageSpecV2"
2375
2375
+
},
2376
2376
+
{
2377
2377
+
"$ref": "#/specs/MessageSpecV1"
2378
2378
+
},
2379
2379
+
{
2380
2380
+
"$ref": "#/specs/MessageSpecV0"
2381
2381
+
}
1853
2382
]
1854
1854
-
}
2383
2383
+
}
+11
-43
crates/buttplug_server_device_config/device-config-v4/buttplug-device-config-schema-v4.json
···
270
270
"id": {
271
271
"$ref": "#/components/uuid"
272
272
},
273
273
-
"base-id": {
273
273
+
"base_id": {
274
274
"$ref": "#/components/uuid"
275
275
-
},
276
276
-
"feature-type": {
277
277
-
"type": "string"
278
275
},
279
276
"output": {
280
277
"type": "object",
···
322
319
}
323
320
}
324
321
}
325
325
-
},
326
326
-
"input": {
327
327
-
"type": "object",
328
328
-
"patternProperties": {
329
329
-
"^(battery|rssi|pressure)$": {
330
330
-
"type": "object",
331
331
-
"properties": {
332
332
-
"value-range": {
333
333
-
"type": "array",
334
334
-
"items": {
335
335
-
"$ref": "#/components/value-range"
336
336
-
},
337
337
-
"minItems": 1
338
338
-
},
339
339
-
"input-commands": {
340
340
-
"type": "array",
341
341
-
"items": {
342
342
-
"type": "string",
343
343
-
"pattern": "^(Read|Subscribe)$"
344
344
-
}
345
345
-
}
346
346
-
},
347
347
-
"required": [
348
348
-
"value-range",
349
349
-
"input-commands"
350
350
-
],
351
351
-
"additionalProperties": false
352
352
-
}
353
353
-
}
354
322
}
355
323
},
356
324
"required": [
357
357
-
"base-id",
325
325
+
"base_id",
358
326
"id"
359
327
],
360
328
"additionalProperties": false
···
369
337
"deny": {
370
338
"type": "boolean"
371
339
},
372
372
-
"display-name": {
340
340
+
"display_name": {
373
341
"type": "string"
374
342
},
375
343
"index": {
···
392
360
"id": {
393
361
"$ref": "#/components/uuid"
394
362
},
395
395
-
"protocol-variant": {
363
363
+
"protocol_variant": {
396
364
"type": "string"
397
365
},
398
366
"features": {
···
423
391
"id": {
424
392
"$ref": "#/components/uuid"
425
393
},
426
426
-
"protocol-variant": {
394
394
+
"protocol_variant": {
427
395
"type": "string"
428
396
},
429
397
"features": {
···
503
471
},
504
472
"additionalProperties": false
505
473
},
506
506
-
"user-configs": {
474
474
+
"user_configs": {
507
475
"type": "object",
508
476
"properties": {
509
477
"protocols": {
···
582
550
"id": {
583
551
"$ref": "#/components/uuid"
584
552
},
585
585
-
"base-id": {
553
553
+
"base_id": {
586
554
"$ref": "#/components/uuid"
587
555
},
588
556
"features": {
589
557
"$ref": "#/components/user-config-features"
590
558
},
591
591
-
"user-config": {
559
559
+
"user_config": {
592
560
"$ref": "#/components/user-config-customization"
593
561
},
594
594
-
"message-gap-ms": {
562
562
+
"message_gap_ms": {
595
563
"type": "integer",
596
564
"min": 0
597
565
}
598
566
},
599
567
"required": [
600
568
"id",
601
601
-
"base-id",
569
569
+
"base_id",
602
570
"features",
603
603
-
"user-config"
571
571
+
"user_config"
604
572
],
605
573
"additionalProperties": false
606
574
}
+6
-6
crates/buttplug_server_device_config/device-config-v4/protocols/vorze-sa.yml
···
5
5
configurations:
6
6
- identifier:
7
7
- Bach smart
8
8
-
protocol-variant: vorze-sa-vibrator
8
8
+
protocol_variant: vorze-sa-vibrator
9
9
name: Vorze Bach
10
10
features:
11
11
- id: 447dbcfa-c295-4880-afba-93e24499a78d
···
18
18
- identifier:
19
19
- ROCKET
20
20
name: Adult Festa Rocket
21
21
-
protocol-variant: vorze-sa-vibrator
21
21
+
protocol_variant: vorze-sa-vibrator
22
22
features:
23
23
- id: 557d3c89-2e15-4b4a-8480-07f4826a8384
24
24
output:
···
30
30
- identifier:
31
31
- CycSA
32
32
name: Vorze A10 Cyclone SA
33
33
-
protocol-variant: vorze-sa-single-rotator
33
33
+
protocol_variant: vorze-sa-single-rotator
34
34
features:
35
35
- id: 8e249d53-8d80-4f42-bc40-e6edb7779e92
36
36
output:
···
42
42
- identifier:
43
43
- UFOSA
44
44
name: Vorze UFO SA
45
45
-
protocol-variant: vorze-sa-single-rotator
45
45
+
protocol_variant: vorze-sa-single-rotator
46
46
features:
47
47
- id: 2d8d1443-c394-4df4-b9bb-1659d8323b45
48
48
output:
···
54
54
- identifier:
55
55
- UFO-TW
56
56
name: Vorze UFO TW
57
57
-
protocol-variant: vorze-sa-dual-rotator
57
57
+
protocol_variant: vorze-sa-dual-rotator
58
58
features:
59
59
- id: a1632ce4-314f-481d-9ae2-2a11a0c4caa4
60
60
output:
···
71
71
id: 32e92986-3ae4-45f3-9aec-05d6028f1cb7
72
72
- identifier:
73
73
- VorzePiston
74
74
-
protocol-variant: vorze-sa-piston
74
74
+
protocol_variant: vorze-sa-piston
75
75
name: Vorze Piston
76
76
features:
77
77
- id: 7c8d7a1d-9e2f-4a92-83f3-42a0840b90bd
+1
-1
crates/buttplug_server_device_config/device-config-v4/version.yaml
···
1
1
version:
2
2
major: 4
3
3
-
minor: 64
3
3
+
minor: 65
-4
crates/buttplug_server_device_config/src/device_config_file/device.rs
···
57
57
#[derive(Serialize, Deserialize, Debug, Getters, CopyGetters, Default, Clone, MutGetters)]
58
58
pub struct ConfigUserDeviceCustomization {
59
59
#[serde(
60
60
-
rename = "display-name",
61
60
default,
62
61
skip_serializing_if = "Option::is_none"
63
62
)]
···
73
72
index: u32,
74
73
#[getset(get_copy = "pub")]
75
74
#[serde(
76
76
-
rename = "message-gap-ms",
77
75
default,
78
76
skip_serializing_if = "Option::is_none"
79
77
)]
···
85
83
#[getset(get_copy = "pub")]
86
84
id: Uuid,
87
85
#[getset(get_copy = "pub")]
88
88
-
#[serde(rename = "base-id")]
89
86
base_id: Uuid,
90
87
#[getset(get = "pub")]
91
88
/// Message attributes for this device instance.
92
89
#[getset(get = "pub", get_mut = "pub")]
93
90
features: Vec<ConfigUserDeviceFeature>,
94
91
#[getset(get = "pub", get_mut = "pub")]
95
95
-
#[serde(rename = "user-config")]
96
92
/// Per-user configurations specific to this device instance.
97
93
user_config: ConfigUserDeviceCustomization,
98
94
}
+1
-1
crates/buttplug_server_device_config/src/device_config_file/user.rs
···
26
26
#[getset(get = "pub", get_mut = "pub", set = "pub")]
27
27
pub struct UserConfigFile {
28
28
version: ConfigVersion,
29
29
-
#[serde(rename = "user-configs", default)]
29
29
+
#[serde(default)]
30
30
user_configs: Option<UserConfigDefinition>,
31
31
}
32
32
+1
-1
crates/buttplug_server_device_config/tests/test_configs/user_tcode_protocol.json
···
3
3
"major": 4,
4
4
"minor": 1
5
5
},
6
6
-
"user-configs": {
6
6
+
"user_configs": {
7
7
"protocols": {
8
8
"tcode-v03": {
9
9
"communication": [
+9
-13
crates/buttplug_tests/tests/test_device_config.rs
···
80
80
"major": 4,
81
81
"minor": 999
82
82
},
83
83
-
"user-configs": {}
83
83
+
"user_configs": {}
84
84
}
85
85
"#;
86
86
···
131
131
major: 3,
132
132
minor: 0
133
133
},
134
134
-
"user-configs": {
134
134
+
"user_configs": {
135
135
"devices": [
136
136
{
137
137
"identifier": {
···
143
143
"name": "Lovense Test Device",
144
144
"features": [
145
145
{
146
146
-
"feature-type": "Vibrate",
147
146
"description": "Test Speed",
148
147
"actuator": {
149
149
-
"step-range": [
148
148
+
"step_range": [
150
149
0,
151
150
20
152
151
],
153
153
-
"step-limit: [
152
152
+
"step_limit: [
154
153
10,
155
154
15
156
155
],
···
160
159
}
161
160
},
162
161
{
163
163
-
"feature-type": "Battery",
164
162
"description": "Battery Level",
165
163
"sensor": {
166
164
"value-range": [
···
175
173
}
176
174
}
177
175
],
178
178
-
"user-config": {
176
176
+
"user_config": {
179
177
"allow": false,
180
178
"deny": false,
181
179
"index": 0,
182
182
-
"display-name": "Lovense Name Test"
180
180
+
"display_name": "Lovense Name Test"
183
181
}
184
182
}
185
183
}
···
203
201
major: 3,
204
202
minor: 0
205
203
},
206
206
-
"user-configs": {
204
204
+
"user_configs": {
207
205
"devices": [
208
206
{
209
207
"identifier": {
···
215
213
"name": "Lovense Test Device",
216
214
"features": [
217
215
{
218
218
-
"feature-type": "Vibrate",
219
216
"description": "Test Speed",
220
217
"actuator": {
221
218
"step-range": [
···
227
224
}
228
225
},
229
226
{
230
230
-
"feature-type": "Battery",
231
227
"description": "Battery Level",
232
228
"sensor": {
233
229
"value-range": [
···
242
238
}
243
239
}
244
240
],
245
245
-
"user-config": {
241
241
+
"user_config": {
246
242
"allow": false,
247
243
"deny": false,
248
244
"index": 0,
249
249
-
"display-name": "Lovense Name Test"
245
245
+
"display_name": "Lovense Name Test"
250
246
}
251
247
}
252
248
}
+15
-10
crates/buttplug_tests/tests/util/device_test/device_test_case/config/lovense_ridge_user_config.json
···
3
3
"major": 4,
4
4
"minor": 999
5
5
},
6
6
-
"user-configs": {
6
6
+
"user_configs": {
7
7
"devices": [
8
8
{
9
9
"identifier": {
···
14
14
"config": {
15
15
"name": "Lovense Sex Machine",
16
16
"id": "c8633234-07a4-4ad9-961d-a4d777b32be8",
17
17
-
"base-id": "9b52eca4-0e49-426e-a543-2ef735cd803a",
18
17
"features": [
19
18
{
20
19
"description": "Fucking Machine Oscillation Speed",
20
20
+
"base_id": "f9506652-c4ac-43b1-b184-cd8016b64623",
21
21
+
"id": "f9506652-c4ac-43b1-b184-cd8016b64623",
21
22
"output": {
22
22
-
"Oscillate": {
23
23
-
"step-limit": [
23
23
+
"oscillate": {
24
24
+
"value": [
24
25
0,
25
25
-
10
26
26
+
20
26
27
]
27
28
}
28
28
-
},
29
29
-
"base-id": "0ab80cc0-7a82-4cb6-ba4f-0f18ddb2911f",
30
30
-
"id": "56d94863-b321-428b-8b68-bac0197556e2"
29
29
+
}
30
30
+
},
31
31
+
{
32
32
+
"description": "battery Level",
33
33
+
"base_id": "7c382c60-0ee2-4315-b8cf-cfd3ab4c9ccd",
34
34
+
"id": "77d6498b-3707-4ca6-b37d-e0d6f868d302"
31
35
}
32
36
],
33
33
-
"user-config": {
37
37
+
"base_id": "8667f7b6-7baa-4e46-9d76-947fb707f0f3",
38
38
+
"user_config": {
34
39
"allow": false,
35
40
"deny": false,
36
41
"index": 0,
37
37
-
"display-name": "Lovense Name Test"
42
42
+
"display_name": "Lovense Name Test"
38
43
}
39
44
}
40
45
}
+11
-11
crates/buttplug_tests/tests/util/device_test/device_test_case/config/lovense_ridge_user_config_invalid_range.json
···
3
3
"major": 4,
4
4
"minor": 999
5
5
},
6
6
-
"user-configs": {
6
6
+
"user_configs": {
7
7
"devices": [
8
8
{
9
9
"identifier": {
···
14
14
"config": {
15
15
"name": "Lovense Ridge",
16
16
"id": "c8633234-07a4-4ad9-961d-a4d777b32be8",
17
17
-
"base-id": "c8633234-07a4-4ad9-961d-a4d777b32be7",
17
17
+
"base_id": "c8633234-07a4-4ad9-961d-a4d777b32be7",
18
18
"features": [
19
19
{
20
20
"feature-type": "Oscillate",
21
21
"description": "Fucking Machine Oscillation Speed",
22
22
"output": {
23
23
-
"Oscillate": {
24
24
-
"step-range": [
23
23
+
"oscillate": {
24
24
+
"step_range": [
25
25
0,
26
26
30
27
27
],
28
28
-
"step-limit": [
28
28
+
"step_limit": [
29
29
0,
30
30
30
31
31
]
32
32
}
33
33
},
34
34
-
"base-id": "56d94863-b321-428b-8b68-bac0197556e1",
34
34
+
"base_id": "56d94863-b321-428b-8b68-bac0197556e1",
35
35
"id": "56d94863-b321-428b-8b68-bac0197556e2"
36
36
},
37
37
{
38
38
"feature-type": "Battery",
39
39
"description": "Battery Level",
40
40
"input": {
41
41
-
"Battery": {
42
42
-
"value-range": [
41
41
+
"battery": {
42
42
+
"value_range": [
43
43
[
44
44
0,
45
45
100
46
46
]
47
47
],
48
48
-
"input-commands": [
48
48
+
"input_commands": [
49
49
"Read"
50
50
]
51
51
}
52
52
},
53
53
-
"base-id": "b9899daa-7755-4ebb-88b4-13122d12745e",
53
53
+
"base_id": "b9899daa-7755-4ebb-88b4-13122d12745e",
54
54
"id": "b9899daa-7755-4ebb-88b4-13122d12745f"
55
55
}
56
56
],
57
57
-
"user-config": {
57
57
+
"user_config": {
58
58
"allow": false,
59
59
"deny": false,
60
60
"index": 0
+13
-28
crates/buttplug_tests/tests/util/device_test/device_test_case/config/tcode_linear_and_vibrate_user_config.json
···
3
3
"major": 4,
4
4
"minor": 999
5
5
},
6
6
-
"user-configs": {
6
6
+
"user_configs": {
7
7
"protocols": {
8
8
"tcode-v03": {
9
9
"communication": [
···
30
30
"features": [
31
31
{
32
32
"description": "",
33
33
-
"feature-type": "PositionWithDuration",
34
33
"output": {
35
35
-
"PositionWithDuration": {
36
36
-
"step-range": [
34
34
+
"position_with_duration": {
35
35
+
"position": [
37
36
0,
38
37
100
38
38
+
],
39
39
+
"duration": [
40
40
+
0,
41
41
+
100000
39
42
]
40
43
}
41
44
},
···
43
46
},
44
47
{
45
48
"description": "",
46
46
-
"feature-type": "Vibrate",
47
49
"output": {
48
48
-
"Vibrate": {
49
49
-
"step-range": [
50
50
+
"vibrate": {
51
51
+
"value": [
50
52
0,
51
53
99
52
54
]
···
68
70
},
69
71
"config": {
70
72
"id": "6d3f0643-1933-4df6-85ff-5675bf1a3dd4",
71
71
-
"base-id": "e4384a37-fd37-4b9e-8464-a510dd8410a7",
73
73
+
"base_id": "e4384a37-fd37-4b9e-8464-a510dd8410a7",
72
74
"features": [
73
75
{
74
74
-
"output": {
75
75
-
"PositionWithDuration": {
76
76
-
"step-limit": [
77
77
-
0,
78
78
-
100
79
79
-
]
80
80
-
}
81
81
-
},
82
82
-
"base-id": "c5e6384e-399b-4c2b-9791-eb48abaf3bf7",
76
76
+
"base_id": "c5e6384e-399b-4c2b-9791-eb48abaf3bf7",
83
77
"id": "a9e532ff-f72f-4c2f-9ae6-02a6ddcb2d74"
84
78
},
85
79
{
86
80
"description": "",
87
87
-
"feature-type": "Vibrate",
88
88
-
"output": {
89
89
-
"Vibrate": {
90
90
-
"step-limit": [
91
91
-
0,
92
92
-
99
93
93
-
]
94
94
-
}
95
95
-
},
96
96
-
"base-id": "e4384a37-fd37-4b9e-8464-a510dd8410a7",
81
81
+
"base_id": "e4384a37-fd37-4b9e-8464-a510dd8410a7",
97
82
"id": "10deb5c9-9d44-4dab-abf3-500b7df51e9f"
98
83
}
99
84
],
100
100
-
"user-config": {
85
85
+
"user_config": {
101
86
"allow": false,
102
87
"deny": false,
103
88
"index": 0
+2
-2
crates/buttplug_tests/tests/util/device_test/device_test_case/test_lovense_ridge_user_config.yaml
···
36
36
commands:
37
37
- !Write
38
38
endpoint: tx
39
39
-
# "Vibrate:5;"
40
40
-
data: [86, 105, 98, 114, 97, 116, 101, 58, 53, 59]
39
39
+
# "Vibrate:10;"
40
40
+
data: [86, 105, 98, 114, 97, 116, 101, 58, 49, 48, 59]
41
41
write_with_response: false
42
42
- !Messages
43
43
device_index: 0