Buttplug sex toy control library

chore: Convert all config file - to _

+1104 -625
+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 - "Id": { "$ref": "#/components/ClientId" } 37 + "Id": { 38 + "$ref": "#/components/ClientId" 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 - "Id": { "$ref": "#/components/ServerId" } 51 + "Id": { 52 + "$ref": "#/components/ServerId" 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 - "Id": { "$ref": "#/components/SystemId" } 65 + "Id": { 66 + "$ref": "#/components/SystemId" 67 + } 62 68 }, 63 69 "additionalProperties": false, 64 70 "required": [ ··· 67 73 }, 68 74 "SystemIdDeviceIndexMessage": { 69 75 "properties": { 70 - "Id": { "$ref": "#/components/SystemId" }, 71 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" } 76 + "Id": { 77 + "$ref": "#/components/SystemId" 78 + }, 79 + "DeviceIndex": { 80 + "$ref": "#/components/DeviceIndex" 81 + } 72 82 }, 73 83 "additionalProperties": false, 74 84 "required": [ 75 85 "Id", 76 86 "DeviceIndex" 77 87 ] 78 - }, 88 + }, 79 89 "ClientIdDeviceIndexMessage": { 80 90 "properties": { 81 - "Id": { "$ref": "#/components/ClientId" }, 82 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" } 91 + "Id": { 92 + "$ref": "#/components/ClientId" 93 + }, 94 + "DeviceIndex": { 95 + "$ref": "#/components/DeviceIndex" 96 + } 83 97 }, 84 98 "additionalProperties": false, 85 99 "required": [ ··· 109 123 "FeatureDescriptor": { 110 124 "type": "string" 111 125 }, 112 - "StepCount": { "$ref": "#/components/StepCountV3" }, 126 + "StepCount": { 127 + "$ref": "#/components/StepCountV3" 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 - "FeatureCount": { "$ref": "#/components/FeatureCount" }, 126 - "StepCount": { "$ref": "#/components/StepCountV2" } 141 + "FeatureCount": { 142 + "$ref": "#/components/FeatureCount" 143 + }, 144 + "StepCount": { 145 + "$ref": "#/components/StepCountV2" 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 - "FeatureCount": { "$ref": "#/components/FeatureCount" } 155 + "FeatureCount": { 156 + "$ref": "#/components/FeatureCount" 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 - "StopDeviceCmd": { "$ref": "#/components/NullMessageAttributes" }, 215 + "StopDeviceCmd": { 216 + "$ref": "#/components/NullMessageAttributes" 217 + }, 194 218 "ScalarCmd": { 195 219 "type": "array", 196 220 "items": { 197 - "$ref": "#/components/GenericMessageAttributesV3" }, 198 - "minItems": 1 221 + "$ref": "#/components/GenericMessageAttributesV3" 222 + }, 223 + "minItems": 1 199 224 }, 200 225 "LinearCmd": { 201 226 "type": "array", ··· 225 250 "minItems": 1 226 251 } 227 252 }, 228 - "RawReadCmd": { "$ref": "#/components/RawMessageAttributes" }, 229 - "RawWriteCmd": { "$ref": "#/components/RawMessageAttributes" }, 230 - "RawSubscribeCmd": { "$ref": "#/components/RawMessageAttributes" } 253 + "RawReadCmd": { 254 + "$ref": "#/components/RawMessageAttributes" 255 + }, 256 + "RawWriteCmd": { 257 + "$ref": "#/components/RawMessageAttributes" 258 + }, 259 + "RawSubscribeCmd": { 260 + "$ref": "#/components/RawMessageAttributes" 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 - "StopDeviceCmd": { "$ref": "#/components/NullMessageAttributes" }, 239 - "VibrateCmd": { "$ref": "#/components/GenericMessageAttributesV2" }, 240 - "LinearCmd": { "$ref": "#/components/GenericMessageAttributesV2" }, 241 - "RotateCmd": { "$ref": "#/components/GenericMessageAttributesV2" }, 242 - "BatteryLevelCmd": { "$ref": "#/components/NullMessageAttributes" }, 243 - "RSSILevelCmd": { "$ref": "#/components/NullMessageAttributes" }, 244 - "RawReadCmd": { "$ref": "#/components/RawMessageAttributes" }, 245 - "RawWriteCmd": { "$ref": "#/components/RawMessageAttributes" }, 246 - "RawSubscribeCmd": { "$ref": "#/components/RawMessageAttributes" }, 247 - "RawUnsubscribeCmd": { "$ref": "#/components/RawMessageAttributes" } 269 + "StopDeviceCmd": { 270 + "$ref": "#/components/NullMessageAttributes" 271 + }, 272 + "VibrateCmd": { 273 + "$ref": "#/components/GenericMessageAttributesV2" 274 + }, 275 + "LinearCmd": { 276 + "$ref": "#/components/GenericMessageAttributesV2" 277 + }, 278 + "RotateCmd": { 279 + "$ref": "#/components/GenericMessageAttributesV2" 280 + }, 281 + "BatteryLevelCmd": { 282 + "$ref": "#/components/NullMessageAttributes" 283 + }, 284 + "RSSILevelCmd": { 285 + "$ref": "#/components/NullMessageAttributes" 286 + }, 287 + "RawReadCmd": { 288 + "$ref": "#/components/RawMessageAttributes" 289 + }, 290 + "RawWriteCmd": { 291 + "$ref": "#/components/RawMessageAttributes" 292 + }, 293 + "RawSubscribeCmd": { 294 + "$ref": "#/components/RawMessageAttributes" 295 + }, 296 + "RawUnsubscribeCmd": { 297 + "$ref": "#/components/RawMessageAttributes" 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 - "StopDeviceCmd": { "$ref": "#/components/NullMessageAttributes" }, 256 - "VibrateCmd": { "$ref": "#/components/GenericMessageAttributesV1" }, 257 - "LinearCmd": { "$ref": "#/components/GenericMessageAttributesV1" }, 258 - "RotateCmd": { "$ref": "#/components/GenericMessageAttributesV1" }, 259 - "LovenseCmd": { "$ref": "#/components/NullMessageAttributes" }, 260 - "VorzeA10CycloneCmd": { "$ref": "#/components/NullMessageAttributes" }, 261 - "KiirooCmd": { "$ref": "#/components/NullMessageAttributes" }, 262 - "SingleMotorVibrateCmd": { "$ref": "#/components/NullMessageAttributes" }, 263 - "FleshlightLaunchFW12Cmd": { "$ref": "#/components/NullMessageAttributes" } 306 + "StopDeviceCmd": { 307 + "$ref": "#/components/NullMessageAttributes" 308 + }, 309 + "VibrateCmd": { 310 + "$ref": "#/components/GenericMessageAttributesV1" 311 + }, 312 + "LinearCmd": { 313 + "$ref": "#/components/GenericMessageAttributesV1" 314 + }, 315 + "RotateCmd": { 316 + "$ref": "#/components/GenericMessageAttributesV1" 317 + }, 318 + "LovenseCmd": { 319 + "$ref": "#/components/NullMessageAttributes" 320 + }, 321 + "VorzeA10CycloneCmd": { 322 + "$ref": "#/components/NullMessageAttributes" 323 + }, 324 + "KiirooCmd": { 325 + "$ref": "#/components/NullMessageAttributes" 326 + }, 327 + "SingleMotorVibrateCmd": { 328 + "$ref": "#/components/NullMessageAttributes" 329 + }, 330 + "FleshlightLaunchFW12Cmd": { 331 + "$ref": "#/components/NullMessageAttributes" 332 + } 264 333 }, 265 334 "additionalProperties": false 266 335 }, ··· 269 338 "type": "array", 270 339 "items": { 271 340 "type": "string", 272 - "enum": ["FleshlightLaunchFW12Cmd", "SingleMotorVibrateCmd", "KiirooCmd", "LovenseCmd", "VorzeA10CycloneCmd"] 341 + "enum": [ 342 + "FleshlightLaunchFW12Cmd", 343 + "SingleMotorVibrateCmd", 344 + "KiirooCmd", 345 + "LovenseCmd", 346 + "VorzeA10CycloneCmd" 347 + ] 273 348 }, 274 349 "additionalProperties": false 275 - }, 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 - "FeatureType": { 306 - "type": "string" 307 - }, 308 380 "Output": { 309 - "type": "array", 310 - "items": { 311 - "type": "object", 312 - "patternProperties": { 313 - "^(Vibrate|Rotate|Oscillate|Constrict|Spray|Position|Heater|Led)$": { 314 - "type": "object", 315 - "properties": { 316 - "Value": { 317 - "$ref": "#/components/RangeInclusive" 318 - } 381 + "type": "object", 382 + "patternProperties": { 383 + "^(Vibrate|Rotate|Oscillate|Constrict|Spray|Position|Heater|Led)$": { 384 + "type": "object", 385 + "properties": { 386 + "Value": { 387 + "$ref": "#/components/RangeInclusive" 388 + } 389 + }, 390 + "required": [ 391 + "Value" 392 + ] 393 + }, 394 + "PositionWithDuration": { 395 + "type": "object", 396 + "properties": { 397 + "Position": { 398 + "$ref": "#/components/RangeInclusive" 319 399 }, 320 - "required": [ 321 - "Value" 322 - ] 400 + "Duration": { 401 + "$ref": "#/components/RangeInclusive" 402 + } 323 403 }, 324 - "PositionWithDuration": { 325 - "type": "object", 326 - "properties": { 327 - "Position": { 328 - "$ref": "#/components/RangeInclusive" 329 - }, 330 - "Duration": { 331 - "$ref": "#/components/RangeInclusive" 332 - } 333 - }, 334 - "required": [ 335 - "Position", 336 - "Duration" 337 - ] 338 - } 339 - }, 340 - "minProperties": 1, 341 - "maxProperties": 1 404 + "required": [ 405 + "Position", 406 + "Duration" 407 + ] 408 + } 342 409 } 343 410 }, 344 411 "Input": { ··· 362 429 ] 363 430 } 364 431 } 365 - }, 366 - "Raw": { 367 - "type": "object", 368 - "properties": { 369 - "Endpoints": { 370 - "type": "array", 371 - "items": { 372 - "type": "string" 373 - } 374 - } 375 - }, 376 - "required": [ 377 - "Endpoints" 378 - ] 379 432 } 380 433 }, 381 434 "required": [ 382 435 "FeatureDescription", 383 - "FeatureIndex", 384 - "FeatureType" 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 - "Id": { "$ref": "#/components/ClientId" }, 395 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 396 - "FeatureIndex": { "$ref": "#/components/DeviceIndex" }, 446 + "Id": { 447 + "$ref": "#/components/ClientId" 448 + }, 449 + "DeviceIndex": { 450 + "$ref": "#/components/DeviceIndex" 451 + }, 452 + "FeatureIndex": { 453 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 461 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 462 - "FeatureIndex": { "type": "integer" }, 463 - "InputType": { "type": "string" }, 464 - "InputCommand": { "type": "string" } 518 + "Id": { 519 + "$ref": "#/components/ClientId" 520 + }, 521 + "DeviceIndex": { 522 + "$ref": "#/components/DeviceIndex" 523 + }, 524 + "FeatureIndex": { 525 + "type": "integer" 526 + }, 527 + "InputType": { 528 + "type": "string" 529 + }, 530 + "InputCommand": { 531 + "type": "string" 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 - "Id": { "$ref": "#/components/ServerId" }, 480 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 481 - "FeatureIndex": { "type": "integer" }, 547 + "Id": { 548 + "$ref": "#/components/ServerId" 549 + }, 550 + "DeviceIndex": { 551 + "$ref": "#/components/DeviceIndex" 552 + }, 553 + "FeatureIndex": { 554 + "type": "integer" 555 + }, 482 556 "Data": { 483 557 "type": "object", 484 558 "patternProperties": { ··· 497 571 "Data" 498 572 ] 499 573 }, 500 - "RawCmd": { 501 - "type": "object", 502 - "description": "Sends a request to raw endpoints.", 503 - "properties": { 504 - "Id": { "$ref": "#/components/ClientId" }, 505 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 506 - "Endpoint": { "type": "string" }, 507 - "RawCommand": { 508 - "type": "object", 509 - "properties": { 510 - "Read": { 511 - "type": "object" 512 - }, 513 - "Write": { 514 - "type": "object" 515 - }, 516 - "Subscribe": { 517 - "type": "object" 518 - }, 519 - "Unsubscribe": { 520 - "type": "object" 521 - } 522 - } 523 - } 524 - }, 525 - "additionalProperties": false, 526 - "required": [ 527 - "Id", 528 - "DeviceIndex", 529 - "Endpoint", 530 - "RawCommand" 531 - ] 532 - }, 533 574 "DeviceList": { 534 575 "type": "object", 535 576 "description": "List of all available devices known to the system.", 536 577 "properties": { 537 - "Id": { "$ref": "#/components/ServerId" }, 578 + "Id": { 579 + "$ref": "#/components/ServerId" 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 - "DeviceName": { "$ref": "#/components/DeviceName" }, 546 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 547 - "DeviceDisplayName": { "type": "string" }, 548 - "DeviceMessageTimingGap": { "type": "integer" }, 588 + "DeviceName": { 589 + "$ref": "#/components/DeviceName" 590 + }, 591 + "DeviceIndex": { 592 + "$ref": "#/components/DeviceIndex" 593 + }, 594 + "DeviceDisplayName": { 595 + "type": "string" 596 + }, 597 + "DeviceMessageTimingGap": { 598 + "type": "integer" 599 + }, 549 600 "DeviceFeatures": { 550 601 "type": "object", 551 602 "patternProperties": { 552 603 "^[0-9]*": { 553 - "$ref": "#/components/DeviceFeatureV4" 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 - "Id": { "$ref": "#/components/ClientId" }, 630 + "Id": { 631 + "$ref": "#/components/ClientId" 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 - "Id": { "$ref": "#/components/ClientId" }, 660 + "Id": { 661 + "$ref": "#/components/ClientId" 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 - }, 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 - "Id": { "$ref": "#/components/ClientId" }, 690 + "Id": { 691 + "$ref": "#/components/ClientId" 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 - "DeviceName": { "$ref": "#/components/DeviceName" }, 643 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 644 - "DeviceDisplayName": { "type": "string" }, 645 - "DeviceMessageTimingGap": { "type": "integer" }, 646 - "DeviceMessages": { "$ref": "#/components/DeviceMessagesV3" } 699 + "DeviceName": { 700 + "$ref": "#/components/DeviceName" 701 + }, 702 + "DeviceIndex": { 703 + "$ref": "#/components/DeviceIndex" 704 + }, 705 + "DeviceDisplayName": { 706 + "type": "string" 707 + }, 708 + "DeviceMessageTimingGap": { 709 + "type": "integer" 710 + }, 711 + "DeviceMessages": { 712 + "$ref": "#/components/DeviceMessagesV3" 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 - "Id": { "$ref": "#/components/SystemId" }, 668 - "DeviceName": { "$ref": "#/components/DeviceName" }, 669 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 670 - "DeviceDisplayName": { "type": "string" }, 671 - "DeviceMessageTimingGap": { "type": "integer" }, 672 - "DeviceMessages": { "$ref": "#/components/DeviceMessagesV3" } 734 + "Id": { 735 + "$ref": "#/components/SystemId" 736 + }, 737 + "DeviceName": { 738 + "$ref": "#/components/DeviceName" 739 + }, 740 + "DeviceIndex": { 741 + "$ref": "#/components/DeviceIndex" 742 + }, 743 + "DeviceDisplayName": { 744 + "type": "string" 745 + }, 746 + "DeviceMessageTimingGap": { 747 + "type": "integer" 748 + }, 749 + "DeviceMessages": { 750 + "$ref": "#/components/DeviceMessagesV3" 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 - "Id": { "$ref": "#/components/ClientId" }, 687 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 765 + "Id": { 766 + "$ref": "#/components/ClientId" 767 + }, 768 + "DeviceIndex": { 769 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 730 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 731 - "SensorIndex": { "type": "integer" }, 732 - "SensorType": { "type": "string" } 812 + "Id": { 813 + "$ref": "#/components/ClientId" 814 + }, 815 + "DeviceIndex": { 816 + "$ref": "#/components/DeviceIndex" 817 + }, 818 + "SensorIndex": { 819 + "type": "integer" 820 + }, 821 + "SensorType": { 822 + "type": "string" 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 - "Id": { "$ref": "#/components/ServerId" }, 747 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 748 - "SensorIndex": { "type": "integer" }, 749 - "SensorType": { "type": "string" }, 837 + "Id": { 838 + "$ref": "#/components/ServerId" 839 + }, 840 + "DeviceIndex": { 841 + "$ref": "#/components/DeviceIndex" 842 + }, 843 + "SensorIndex": { 844 + "type": "integer" 845 + }, 846 + "SensorType": { 847 + "type": "string" 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 - "Id": { "$ref": "#/components/ClientId" }, 773 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 774 - "SensorIndex": { "type": "integer" }, 775 - "SensorType": { "type": "string" } 871 + "Id": { 872 + "$ref": "#/components/ClientId" 873 + }, 874 + "DeviceIndex": { 875 + "$ref": "#/components/DeviceIndex" 876 + }, 877 + "SensorIndex": { 878 + "type": "integer" 879 + }, 880 + "SensorType": { 881 + "type": "string" 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 - "Id": { "$ref": "#/components/ClientId" }, 790 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 791 - "SensorIndex": { "type": "integer" }, 792 - "SensorType": { "type": "string" } 896 + "Id": { 897 + "$ref": "#/components/ClientId" 898 + }, 899 + "DeviceIndex": { 900 + "$ref": "#/components/DeviceIndex" 901 + }, 902 + "SensorIndex": { 903 + "type": "integer" 904 + }, 905 + "SensorType": { 906 + "type": "string" 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 - "Id": { "$ref": "#/components/ClientId" }, 923 + "Id": { 924 + "$ref": "#/components/ClientId" 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 - "DeviceName": { "$ref": "#/components/DeviceName" }, 816 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 817 - "DeviceMessages": { "$ref": "#/components/DeviceMessagesV2" } 932 + "DeviceName": { 933 + "$ref": "#/components/DeviceName" 934 + }, 935 + "DeviceIndex": { 936 + "$ref": "#/components/DeviceIndex" 937 + }, 938 + "DeviceMessages": { 939 + "$ref": "#/components/DeviceMessagesV2" 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 - "Id": { "$ref": "#/components/SystemId" }, 839 - "DeviceName": { "$ref": "#/components/DeviceName" }, 840 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 841 - "DeviceMessages": { "$ref": "#/components/DeviceMessagesV2" } 961 + "Id": { 962 + "$ref": "#/components/SystemId" 963 + }, 964 + "DeviceName": { 965 + "$ref": "#/components/DeviceName" 966 + }, 967 + "DeviceIndex": { 968 + "$ref": "#/components/DeviceIndex" 969 + }, 970 + "DeviceMessages": { 971 + "$ref": "#/components/DeviceMessagesV2" 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 - "Id": { "$ref": "#/components/ClientId" }, 856 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" } 986 + "Id": { 987 + "$ref": "#/components/ClientId" 988 + }, 989 + "DeviceIndex": { 990 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 869 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1003 + "Id": { 1004 + "$ref": "#/components/ClientId" 1005 + }, 1006 + "DeviceIndex": { 1007 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 889 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" } 1027 + "Id": { 1028 + "$ref": "#/components/ClientId" 1029 + }, 1030 + "DeviceIndex": { 1031 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 902 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1044 + "Id": { 1045 + "$ref": "#/components/ClientId" 1046 + }, 1047 + "DeviceIndex": { 1048 + "$ref": "#/components/DeviceIndex" 1049 + }, 903 1050 "RSSILevel": { 904 1051 "description": "RSSI Level", 905 1052 "type": "number", ··· 914 1061 "RSSILevel" 915 1062 ] 916 1063 }, 917 - "RawWriteCmd": { 918 - "type": "object", 919 - "description": "Sends a raw byte array to a device. Should only be used for testing/development.", 920 - "properties": { 921 - "Id": { "$ref": "#/components/ClientId" }, 922 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 923 - "Endpoint": { 924 - "type": "string", 925 - "description": "Endpoint (from device config file) to send command to." 1064 + "RawWriteCmd": { 1065 + "type": "object", 1066 + "description": "Sends a raw byte array to a device. Should only be used for testing/development.", 1067 + "properties": { 1068 + "Id": { 1069 + "$ref": "#/components/ClientId" 1070 + }, 1071 + "DeviceIndex": { 1072 + "$ref": "#/components/DeviceIndex" 1073 + }, 1074 + "Endpoint": { 1075 + "type": "string", 1076 + "description": "Endpoint (from device config file) to send command to." 1077 + }, 1078 + "Data": { 1079 + "description": "Raw byte string to send to device.", 1080 + "type": "array", 1081 + "minItems": 1, 1082 + "items": { 1083 + "type": "integer", 1084 + "minimum": 0, 1085 + "maximum": 255 1086 + } 1087 + }, 1088 + "WriteWithResponse": { 1089 + "type": "boolean", 1090 + "description": "If true, BLE writes will use WriteWithResponse. Value ignored for all other types." 1091 + } 926 1092 }, 927 - "Data": { 928 - "description": "Raw byte string to send to device.", 929 - "type": "array", 930 - "minItems": 1, 931 - "items": { 1093 + "additionalProperties": false, 1094 + "required": [ 1095 + "Id", 1096 + "Endpoint", 1097 + "DeviceIndex", 1098 + "Data", 1099 + "WriteWithResponse" 1100 + ] 1101 + }, 1102 + "RawReadCmd": { 1103 + "type": "object", 1104 + "description": "Request a raw byte array from a device. Should only be used for testing/development.", 1105 + "properties": { 1106 + "Id": { 1107 + "$ref": "#/components/ClientId" 1108 + }, 1109 + "DeviceIndex": { 1110 + "$ref": "#/components/DeviceIndex" 1111 + }, 1112 + "Endpoint": { 1113 + "type": "string", 1114 + "description": "Endpoint (from device config file) from which the data was retrieved." 1115 + }, 1116 + "Length": { 932 1117 "type": "integer", 933 - "minimum": 0, 934 - "maximum": 255 1118 + "description": "Amount of data to read from device, 0 to exhaust whatever is in immediate buffer", 1119 + "minimum": 0 1120 + }, 1121 + "WaitForData": { 1122 + "type": "boolean", 1123 + "description": "If true, then wait until Length amount of data is available." 935 1124 } 936 1125 }, 937 - "WriteWithResponse": { 938 - "type": "boolean", 939 - "description": "If true, BLE writes will use WriteWithResponse. Value ignored for all other types." 940 - } 1126 + "additionalProperties": false, 1127 + "required": [ 1128 + "Id", 1129 + "Endpoint", 1130 + "DeviceIndex", 1131 + "Length", 1132 + "WaitForData" 1133 + ] 941 1134 }, 942 - "additionalProperties": false, 943 - "required": [ 944 - "Id", 945 - "Endpoint", 946 - "DeviceIndex", 947 - "Data", 948 - "WriteWithResponse" 949 - ] 950 - }, 951 - "RawReadCmd": { 952 - "type": "object", 953 - "description": "Request a raw byte array from a device. Should only be used for testing/development.", 954 - "properties": { 955 - "Id": { "$ref": "#/components/ClientId" }, 956 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 957 - "Endpoint": { 958 - "type": "string", 959 - "description": "Endpoint (from device config file) from which the data was retrieved." 960 - }, 961 - "Length": { 962 - "type": "integer", 963 - "description": "Amount of data to read from device, 0 to exhaust whatever is in immediate buffer", 964 - "minimum": 0 1135 + "RawSubscribeCmd": { 1136 + "type": "object", 1137 + "description": "Subscribe to an endpoint on a device to receive raw info back.", 1138 + "properties": { 1139 + "Id": { 1140 + "$ref": "#/components/ClientId" 1141 + }, 1142 + "DeviceIndex": { 1143 + "$ref": "#/components/DeviceIndex" 1144 + }, 1145 + "Endpoint": { 1146 + "type": "string", 1147 + "description": "Endpoint (from device config file) from which the data was retrieved." 1148 + } 965 1149 }, 966 - "WaitForData": { 967 - "type": "boolean", 968 - "description": "If true, then wait until Length amount of data is available." 969 - } 1150 + "additionalProperties": false, 1151 + "required": [ 1152 + "Id", 1153 + "Endpoint", 1154 + "DeviceIndex" 1155 + ] 970 1156 }, 971 - "additionalProperties": false, 972 - "required": [ 973 - "Id", 974 - "Endpoint", 975 - "DeviceIndex", 976 - "Length", 977 - "WaitForData" 978 - ] 979 - }, 980 - "RawSubscribeCmd": { 981 - "type": "object", 982 - "description": "Subscribe to an endpoint on a device to receive raw info back.", 983 - "properties": { 984 - "Id": { "$ref": "#/components/ClientId" }, 985 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 986 - "Endpoint": { 987 - "type": "string", 988 - "description": "Endpoint (from device config file) from which the data was retrieved." 989 - } 1157 + "RawUnsubscribeCmd": { 1158 + "type": "object", 1159 + "description": "Unsubscribe to an endpoint on a device.", 1160 + "properties": { 1161 + "Id": { 1162 + "$ref": "#/components/ClientId" 1163 + }, 1164 + "DeviceIndex": { 1165 + "$ref": "#/components/DeviceIndex" 1166 + }, 1167 + "Endpoint": { 1168 + "type": "string", 1169 + "description": "Endpoint (from device config file) from which the data was retrieved." 1170 + } 1171 + }, 1172 + "additionalProperties": false, 1173 + "required": [ 1174 + "Id", 1175 + "Endpoint", 1176 + "DeviceIndex" 1177 + ] 990 1178 }, 991 - "additionalProperties": false, 992 - "required": [ 993 - "Id", 994 - "Endpoint", 995 - "DeviceIndex" 996 - ] 997 - }, 998 - "RawUnsubscribeCmd": { 999 - "type": "object", 1000 - "description": "Unsubscribe to an endpoint on a device.", 1001 - "properties": { 1002 - "Id": { "$ref": "#/components/ClientId" }, 1003 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1004 - "Endpoint": { 1005 - "type": "string", 1006 - "description": "Endpoint (from device config file) from which the data was retrieved." 1007 - } 1179 + "RawReading": { 1180 + "type": "object", 1181 + "description": "Raw byte array received from a device. Should only be used for testing/development.", 1182 + "properties": { 1183 + "Id": { 1184 + "$ref": "#/components/ServerId" 1185 + }, 1186 + "DeviceIndex": { 1187 + "$ref": "#/components/DeviceIndex" 1188 + }, 1189 + "Endpoint": { 1190 + "type": "string", 1191 + "description": "Endpoint (from device config file) from which the data was retrieved." 1192 + }, 1193 + "Data": { 1194 + "description": "Raw byte string received from device.", 1195 + "type": "array", 1196 + "minItems": 1, 1197 + "items": { 1198 + "type": "integer", 1199 + "minimum": 0, 1200 + "maximum": 255 1201 + } 1202 + } 1203 + }, 1204 + "additionalProperties": false, 1205 + "required": [ 1206 + "Id", 1207 + "Endpoint", 1208 + "DeviceIndex", 1209 + "Data" 1210 + ] 1008 1211 }, 1009 - "additionalProperties": false, 1010 - "required": [ 1011 - "Id", 1012 - "Endpoint", 1013 - "DeviceIndex" 1014 - ] 1015 - }, 1016 - "RawReading": { 1017 - "type": "object", 1018 - "description": "Raw byte array received from a device. Should only be used for testing/development.", 1019 - "properties": { 1020 - "Id": { "$ref": "#/components/ServerId" }, 1021 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1022 - "Endpoint": { 1023 - "type": "string", 1024 - "description": "Endpoint (from device config file) from which the data was retrieved." 1025 - }, 1026 - "Data": { 1027 - "description": "Raw byte string received from device.", 1028 - "type": "array", 1029 - "minItems": 1, 1030 - "items": { 1212 + "ServerInfo": { 1213 + "type": "object", 1214 + "description": "Server version information, in Major.Minor.Build format.", 1215 + "properties": { 1216 + "Id": { 1217 + "$ref": "#/components/ClientId" 1218 + }, 1219 + "ServerName": { 1220 + "description": "Name of the server. Can be 0-length.", 1221 + "type": "string" 1222 + }, 1223 + "MessageVersion": { 1224 + "description": "Message template version of the server software.", 1225 + "type": "integer", 1226 + "minimum": 0 1227 + }, 1228 + "MaxPingTime": { 1229 + "description": "Maximum time (in milliseconds) the server will wait between ping messages from client before shutting down.", 1031 1230 "type": "integer", 1032 - "minimum": 0, 1033 - "maximum": 255 1231 + "minimum": 0 1034 1232 } 1035 - } 1036 - }, 1037 - "additionalProperties": false, 1038 - "required": [ 1039 - "Id", 1040 - "Endpoint", 1041 - "DeviceIndex", 1042 - "Data" 1043 - ] 1044 - }, 1045 - "ServerInfo": { 1046 - "type": "object", 1047 - "description": "Server version information, in Major.Minor.Build format.", 1048 - "properties": { 1049 - "Id": { "$ref": "#/components/ClientId" }, 1050 - "ServerName": { 1051 - "description": "Name of the server. Can be 0-length.", 1052 - "type": "string" 1053 1233 }, 1054 - "MessageVersion": { 1055 - "description": "Message template version of the server software.", 1056 - "type": "integer", 1057 - "minimum": 0 1058 - }, 1059 - "MaxPingTime": { 1060 - "description": "Maximum time (in milliseconds) the server will wait between ping messages from client before shutting down.", 1061 - "type": "integer", 1062 - "minimum": 0 1063 - } 1064 - }, 1065 - "additionalProperties": false, 1066 - "required": [ 1067 - "Id", 1068 - "MessageVersion", 1069 - "MaxPingTime", 1070 - "ServerName" 1071 - ] 1072 - } 1234 + "additionalProperties": false, 1235 + "required": [ 1236 + "Id", 1237 + "MessageVersion", 1238 + "MaxPingTime", 1239 + "ServerName" 1240 + ] 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 - "Id": { "$ref": "#/components/ClientId" }, 1248 + "Id": { 1249 + "$ref": "#/components/ClientId" 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 - "DeviceName": { "$ref": "#/components/DeviceName" }, 1087 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1088 - "DeviceMessages": {"$ref": "#/components/DeviceMessagesV1" } 1257 + "DeviceName": { 1258 + "$ref": "#/components/DeviceName" 1259 + }, 1260 + "DeviceIndex": { 1261 + "$ref": "#/components/DeviceIndex" 1262 + }, 1263 + "DeviceMessages": { 1264 + "$ref": "#/components/DeviceMessagesV1" 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 - "Id": { "$ref": "#/components/SystemId" }, 1110 - "DeviceName": { "$ref": "#/components/DeviceName" }, 1111 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1112 - "DeviceMessages": {"$ref": "#/components/DeviceMessagesV1" } 1286 + "Id": { 1287 + "$ref": "#/components/SystemId" 1288 + }, 1289 + "DeviceName": { 1290 + "$ref": "#/components/DeviceName" 1291 + }, 1292 + "DeviceIndex": { 1293 + "$ref": "#/components/DeviceIndex" 1294 + }, 1295 + "DeviceMessages": { 1296 + "$ref": "#/components/DeviceMessagesV1" 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 - "Id": { "$ref": "#/components/ClientId" }, 1127 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1311 + "Id": { 1312 + "$ref": "#/components/ClientId" 1313 + }, 1314 + "DeviceIndex": { 1315 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 1167 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1355 + "Id": { 1356 + "$ref": "#/components/ClientId" 1357 + }, 1358 + "DeviceIndex": { 1359 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 1212 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1404 + "Id": { 1405 + "$ref": "#/components/ClientId" 1406 + }, 1407 + "DeviceIndex": { 1408 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 1453 + "Id": { 1454 + "$ref": "#/components/ClientId" 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 - "Id": { "$ref": "#/components/ClientId" }, 1501 + "Id": { 1502 + "$ref": "#/components/ClientId" 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 - } 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 - "Id": { "$ref": "#/components/ClientId" }, 1527 + "Id": { 1528 + "$ref": "#/components/ClientId" 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 - "DeviceName": { "$ref": "#/components/DeviceName" }, 1334 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1335 - "DeviceMessages": {"$ref": "#/components/DeviceMessagesV0" } 1536 + "DeviceName": { 1537 + "$ref": "#/components/DeviceName" 1538 + }, 1539 + "DeviceIndex": { 1540 + "$ref": "#/components/DeviceIndex" 1541 + }, 1542 + "DeviceMessages": { 1543 + "$ref": "#/components/DeviceMessagesV0" 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 - "Id": { "$ref": "#/components/SystemId" }, 1357 - "DeviceName": { "$ref": "#/components/DeviceName" }, 1358 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1359 - "DeviceMessages": {"$ref": "#/components/DeviceMessagesV0" } 1565 + "Id": { 1566 + "$ref": "#/components/SystemId" 1567 + }, 1568 + "DeviceName": { 1569 + "$ref": "#/components/DeviceName" 1570 + }, 1571 + "DeviceIndex": { 1572 + "$ref": "#/components/DeviceIndex" 1573 + }, 1574 + "DeviceMessages": { 1575 + "$ref": "#/components/DeviceMessagesV0" 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 - "Id": { "$ref": "#/components/ClientId" }, 1374 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" } 1590 + "Id": { 1591 + "$ref": "#/components/ClientId" 1592 + }, 1593 + "DeviceIndex": { 1594 + "$ref": "#/components/DeviceIndex" 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 - "anyOf": [ { "$ref": "#/components/ClientIdMessage" } ] 1606 + "anyOf": [ 1607 + { 1608 + "$ref": "#/components/ClientIdMessage" 1609 + } 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 - "Id": { "$ref": "#/components/ClientId" }, 1392 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1616 + "Id": { 1617 + "$ref": "#/components/ClientId" 1618 + }, 1619 + "DeviceIndex": { 1620 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 1417 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1645 + "Id": { 1646 + "$ref": "#/components/ClientId" 1647 + }, 1648 + "DeviceIndex": { 1649 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 1435 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1667 + "Id": { 1668 + "$ref": "#/components/ClientId" 1669 + }, 1670 + "DeviceIndex": { 1671 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 1462 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1698 + "Id": { 1699 + "$ref": "#/components/ClientId" 1700 + }, 1701 + "DeviceIndex": { 1702 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 1480 - "DeviceIndex": { "$ref": "#/components/DeviceIndex" }, 1720 + "Id": { 1721 + "$ref": "#/components/ClientId" 1722 + }, 1723 + "DeviceIndex": { 1724 + "$ref": "#/components/DeviceIndex" 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 - "Id": { "$ref": "#/components/ClientId" }, 1744 + "Id": { 1745 + "$ref": "#/components/ClientId" 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 - "Id": { "$ref": "#/components/ClientId" }, 1792 + "Id": { 1793 + "$ref": "#/components/ClientId" 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 - "Id": { "$ref": "#/components/ClientId" }, 1810 + "Id": { 1811 + "$ref": "#/components/ClientId" 1812 + }, 1562 1813 "LogLevel": { 1563 1814 "description": "Maximum level of log message to receive.", 1564 - "enum": [ "Off", "Fatal", "Error", "Warn", "Info", "Debug", "Trace" ] 1815 + "enum": [ 1816 + "Off", 1817 + "Fatal", 1818 + "Error", 1819 + "Warn", 1820 + "Info", 1821 + "Debug", 1822 + "Trace" 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 - "Id": { "$ref": "#/components/SystemId" }, 1836 + "Id": { 1837 + "$ref": "#/components/SystemId" 1838 + }, 1578 1839 "LogLevel": { 1579 1840 "description": "Log level of message.", 1580 - "enum": [ "Off", "Fatal", "Error", "Warn", "Info", "Debug", "Trace" ] 1841 + "enum": [ 1842 + "Off", 1843 + "Fatal", 1844 + "Error", 1845 + "Warn", 1846 + "Info", 1847 + "Debug", 1848 + "Trace" 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 - "anyOf": [ { "$ref": "#/components/SystemIdDeviceIndexMessage" } ] 1866 + "anyOf": [ 1867 + { 1868 + "$ref": "#/components/SystemIdDeviceIndexMessage" 1869 + } 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 - "anyOf": [ { "$ref": "#/components/ClientIdMessage" } ] 1875 + "anyOf": [ 1876 + { 1877 + "$ref": "#/components/ClientIdMessage" 1878 + } 1879 + ] 1603 1880 }, 1604 1881 "StartScanning": { 1605 1882 "type": "object", 1606 1883 "description": "Request for the server to start scanning for new devices.", 1607 - "anyOf": [ { "$ref": "#/components/ClientIdMessage" } ] 1884 + "anyOf": [ 1885 + { 1886 + "$ref": "#/components/ClientIdMessage" 1887 + } 1888 + ] 1608 1889 }, 1609 1890 "StopScanning": { 1610 1891 "type": "object", 1611 1892 "description": "Request for the server to stop scanning for new devices.", 1612 - "anyOf": [ { "$ref": "#/components/ClientIdMessage" } ] 1893 + "anyOf": [ 1894 + { 1895 + "$ref": "#/components/ClientIdMessage" 1896 + } 1897 + ] 1613 1898 }, 1614 1899 "ScanningFinished": { 1615 1900 "type": "object", 1616 1901 "description": "Server notification to client that scanning has ended.", 1617 - "anyOf": [ { "$ref": "#/components/SystemIdMessage" } ] 1902 + "anyOf": [ 1903 + { 1904 + "$ref": "#/components/SystemIdMessage" 1905 + } 1906 + ] 1618 1907 }, 1619 1908 "Ok": { 1620 1909 "type": "object", 1621 1910 "description": "Signifies successful processing of the message indicated by the id.", 1622 - "anyOf": [ { "$ref": "#/components/ClientIdMessage" } ] 1911 + "anyOf": [ 1912 + { 1913 + "$ref": "#/components/ClientIdMessage" 1914 + } 1915 + ] 1623 1916 }, 1624 1917 "Ping": { 1625 1918 "type": "object", 1626 1919 "description": "Connection keep-alive message.", 1627 - "anyOf": [ { "$ref": "#/components/ClientIdMessage" } ] 1920 + "anyOf": [ 1921 + { 1922 + "$ref": "#/components/ClientIdMessage" 1923 + } 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 - "Id": { "$ref": "#/components/ServerId" }, 1930 + "Id": { 1931 + "$ref": "#/components/ServerId" 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 - "Id": { "$ref": "#/components/ClientId" }, 1953 + "Id": { 1954 + "$ref": "#/components/ClientId" 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 - "DeviceList": { "$ref": "#/messages/SpecV4Messages/DeviceList" }, 1676 - "Error": { "$ref": "#/messages/SpecV0Messages/Error" }, 1677 - "Ok": { "$ref": "#/messages/SpecV0Messages/Ok" }, 1678 - "Ping": { "$ref": "#/messages/SpecV0Messages/Ping" }, 1679 - "RawCmd": { "$ref": "#/messages/SpecV4Messages/RawCmd" }, 1680 - "RawReading": { "$ref": "#/messages/SpecV2Messages/RawReading" }, 1681 - "RequestDeviceList": { "$ref": "#/messages/SpecV0Messages/RequestDeviceList" }, 1682 - "RequestServerInfo": { "$ref": "#/messages/SpecV4Messages/RequestServerInfo" }, 1683 - "ScanningFinished": { "$ref": "#/messages/SpecV0Messages/ScanningFinished" }, 1684 - "InputCmd": { "$ref": "#/messages/SpecV4Messages/InputCmd" }, 1685 - "InputReading": { "$ref": "#/messages/SpecV4Messages/InputReading" }, 1686 - "ServerInfo": { "$ref": "#/messages/SpecV4Messages/ServerInfo" }, 1687 - "StartScanning": { "$ref": "#/messages/SpecV0Messages/StartScanning" }, 1688 - "StopAllDevices": { "$ref": "#/messages/SpecV0Messages/StopAllDevices" }, 1689 - "StopDeviceCmd": { "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" }, 1690 - "StopScanning": { "$ref": "#/messages/SpecV0Messages/StopScanning" }, 1691 - "OutputCmd": { "$ref": "#/messages/SpecV4Messages/OutputCmd" } 1976 + "DeviceList": { 1977 + "$ref": "#/messages/SpecV4Messages/DeviceList" 1978 + }, 1979 + "Error": { 1980 + "$ref": "#/messages/SpecV0Messages/Error" 1981 + }, 1982 + "Ok": { 1983 + "$ref": "#/messages/SpecV0Messages/Ok" 1984 + }, 1985 + "Ping": { 1986 + "$ref": "#/messages/SpecV0Messages/Ping" 1987 + }, 1988 + "RequestDeviceList": { 1989 + "$ref": "#/messages/SpecV0Messages/RequestDeviceList" 1990 + }, 1991 + "RequestServerInfo": { 1992 + "$ref": "#/messages/SpecV4Messages/RequestServerInfo" 1993 + }, 1994 + "ScanningFinished": { 1995 + "$ref": "#/messages/SpecV0Messages/ScanningFinished" 1996 + }, 1997 + "InputCmd": { 1998 + "$ref": "#/messages/SpecV4Messages/InputCmd" 1999 + }, 2000 + "InputReading": { 2001 + "$ref": "#/messages/SpecV4Messages/InputReading" 2002 + }, 2003 + "ServerInfo": { 2004 + "$ref": "#/messages/SpecV4Messages/ServerInfo" 2005 + }, 2006 + "StartScanning": { 2007 + "$ref": "#/messages/SpecV0Messages/StartScanning" 2008 + }, 2009 + "StopAllDevices": { 2010 + "$ref": "#/messages/SpecV0Messages/StopAllDevices" 2011 + }, 2012 + "StopDeviceCmd": { 2013 + "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" 2014 + }, 2015 + "StopScanning": { 2016 + "$ref": "#/messages/SpecV0Messages/StopScanning" 2017 + }, 2018 + "OutputCmd": { 2019 + "$ref": "#/messages/SpecV4Messages/OutputCmd" 2020 + } 1692 2021 }, 1693 2022 "additionalProperties": false, 1694 2023 "minProperties": 1, 1695 2024 "maxProperties": 1 1696 2025 }, 1697 2026 "minItems": 1 1698 - }, 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 - "DeviceList": { "$ref": "#/messages/SpecV3Messages/DeviceList" }, 1706 - "DeviceAdded": { "$ref": "#/messages/SpecV3Messages/DeviceAdded" }, 1707 - "DeviceRemoved": { "$ref": "#/messages/SpecV0Messages/DeviceRemoved" }, 1708 - "Error": { "$ref": "#/messages/SpecV0Messages/Error" }, 1709 - "ScalarCmd": { "$ref": "#/messages/SpecV3Messages/ScalarCmd" }, 1710 - "LinearCmd": { "$ref": "#/messages/SpecV1Messages/LinearCmd" }, 1711 - "Ok": { "$ref": "#/messages/SpecV0Messages/Ok" }, 1712 - "Ping": { "$ref": "#/messages/SpecV0Messages/Ping" }, 1713 - "RawReadCmd": { "$ref": "#/messages/SpecV2Messages/RawReadCmd" }, 1714 - "RawReading": { "$ref": "#/messages/SpecV2Messages/RawReading" }, 1715 - "RawWriteCmd": { "$ref": "#/messages/SpecV2Messages/RawWriteCmd" }, 1716 - "RawSubscribeCmd": { "$ref": "#/messages/SpecV2Messages/RawSubscribeCmd" }, 1717 - "RawUnsubscribeCmd": { "$ref": "#/messages/SpecV2Messages/RawUnsubscribeCmd" }, 1718 - "RequestDeviceList": { "$ref": "#/messages/SpecV0Messages/RequestDeviceList" }, 1719 - "RequestServerInfo": { "$ref": "#/messages/SpecV1Messages/RequestServerInfo" }, 1720 - "RotateCmd": { "$ref": "#/messages/SpecV1Messages/RotateCmd" }, 1721 - "ScanningFinished": { "$ref": "#/messages/SpecV0Messages/ScanningFinished" }, 1722 - "SensorReadCmd": { "$ref": "#/messages/SpecV3Messages/SensorReadCmd" }, 1723 - "SensorReading": { "$ref": "#/messages/SpecV3Messages/SensorReading" }, 1724 - "SensorSubscribeCmd": { "$ref": "#/messages/SpecV3Messages/SensorSubscribeCmd" }, 1725 - "SensorUnsubscribeCmd": { "$ref": "#/messages/SpecV3Messages/SensorUnsubscribeCmd" }, 1726 - "ServerInfo": { "$ref": "#/messages/SpecV2Messages/ServerInfo" }, 1727 - "StartScanning": { "$ref": "#/messages/SpecV0Messages/StartScanning" }, 1728 - "StopAllDevices": { "$ref": "#/messages/SpecV0Messages/StopAllDevices" }, 1729 - "StopDeviceCmd": { "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" }, 1730 - "StopScanning": { "$ref": "#/messages/SpecV0Messages/StopScanning" } 2034 + "DeviceList": { 2035 + "$ref": "#/messages/SpecV3Messages/DeviceList" 2036 + }, 2037 + "DeviceAdded": { 2038 + "$ref": "#/messages/SpecV3Messages/DeviceAdded" 2039 + }, 2040 + "DeviceRemoved": { 2041 + "$ref": "#/messages/SpecV0Messages/DeviceRemoved" 2042 + }, 2043 + "Error": { 2044 + "$ref": "#/messages/SpecV0Messages/Error" 2045 + }, 2046 + "ScalarCmd": { 2047 + "$ref": "#/messages/SpecV3Messages/ScalarCmd" 2048 + }, 2049 + "LinearCmd": { 2050 + "$ref": "#/messages/SpecV1Messages/LinearCmd" 2051 + }, 2052 + "Ok": { 2053 + "$ref": "#/messages/SpecV0Messages/Ok" 2054 + }, 2055 + "Ping": { 2056 + "$ref": "#/messages/SpecV0Messages/Ping" 2057 + }, 2058 + "RawReadCmd": { 2059 + "$ref": "#/messages/SpecV2Messages/RawReadCmd" 2060 + }, 2061 + "RawReading": { 2062 + "$ref": "#/messages/SpecV2Messages/RawReading" 2063 + }, 2064 + "RawWriteCmd": { 2065 + "$ref": "#/messages/SpecV2Messages/RawWriteCmd" 2066 + }, 2067 + "RawSubscribeCmd": { 2068 + "$ref": "#/messages/SpecV2Messages/RawSubscribeCmd" 2069 + }, 2070 + "RawUnsubscribeCmd": { 2071 + "$ref": "#/messages/SpecV2Messages/RawUnsubscribeCmd" 2072 + }, 2073 + "RequestDeviceList": { 2074 + "$ref": "#/messages/SpecV0Messages/RequestDeviceList" 2075 + }, 2076 + "RequestServerInfo": { 2077 + "$ref": "#/messages/SpecV1Messages/RequestServerInfo" 2078 + }, 2079 + "RotateCmd": { 2080 + "$ref": "#/messages/SpecV1Messages/RotateCmd" 2081 + }, 2082 + "ScanningFinished": { 2083 + "$ref": "#/messages/SpecV0Messages/ScanningFinished" 2084 + }, 2085 + "SensorReadCmd": { 2086 + "$ref": "#/messages/SpecV3Messages/SensorReadCmd" 2087 + }, 2088 + "SensorReading": { 2089 + "$ref": "#/messages/SpecV3Messages/SensorReading" 2090 + }, 2091 + "SensorSubscribeCmd": { 2092 + "$ref": "#/messages/SpecV3Messages/SensorSubscribeCmd" 2093 + }, 2094 + "SensorUnsubscribeCmd": { 2095 + "$ref": "#/messages/SpecV3Messages/SensorUnsubscribeCmd" 2096 + }, 2097 + "ServerInfo": { 2098 + "$ref": "#/messages/SpecV2Messages/ServerInfo" 2099 + }, 2100 + "StartScanning": { 2101 + "$ref": "#/messages/SpecV0Messages/StartScanning" 2102 + }, 2103 + "StopAllDevices": { 2104 + "$ref": "#/messages/SpecV0Messages/StopAllDevices" 2105 + }, 2106 + "StopDeviceCmd": { 2107 + "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" 2108 + }, 2109 + "StopScanning": { 2110 + "$ref": "#/messages/SpecV0Messages/StopScanning" 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 - "BatteryLevelCmd": { "$ref": "#/messages/SpecV2Messages/BatteryLevelCmd" }, 1745 - "BatteryLevelReading": { "$ref": "#/messages/SpecV2Messages/BatteryLevelReading" }, 1746 - "DeviceList": { "$ref": "#/messages/SpecV2Messages/DeviceList" }, 1747 - "DeviceAdded": { "$ref": "#/messages/SpecV2Messages/DeviceAdded" }, 1748 - "DeviceRemoved": { "$ref": "#/messages/SpecV0Messages/DeviceRemoved" }, 1749 - "Error": { "$ref": "#/messages/SpecV0Messages/Error" }, 1750 - "LinearCmd": { "$ref": "#/messages/SpecV1Messages/LinearCmd" }, 1751 - "Ok": { "$ref": "#/messages/SpecV0Messages/Ok" }, 1752 - "Ping": { "$ref": "#/messages/SpecV0Messages/Ping" }, 1753 - "RawReadCmd": { "$ref": "#/messages/SpecV2Messages/RawReadCmd" }, 1754 - "RawReading": { "$ref": "#/messages/SpecV2Messages/RawReading" }, 1755 - "RawWriteCmd": { "$ref": "#/messages/SpecV2Messages/RawWriteCmd" }, 1756 - "RawSubscribeCmd": { "$ref": "#/messages/SpecV2Messages/RawSubscribeCmd" }, 1757 - "RawUnsubscribeCmd": { "$ref": "#/messages/SpecV2Messages/RawUnsubscribeCmd" }, 1758 - "RequestDeviceList": { "$ref": "#/messages/SpecV0Messages/RequestDeviceList" }, 1759 - "RequestLog": { "$ref": "#/messages/SpecV0Messages/RequestLog" }, 1760 - "RequestServerInfo": { "$ref": "#/messages/SpecV1Messages/RequestServerInfo" }, 1761 - "RotateCmd": { "$ref": "#/messages/SpecV1Messages/RotateCmd" }, 1762 - "RSSILevelCmd": { "$ref": "#/messages/SpecV2Messages/RSSILevelCmd" }, 1763 - "RSSILevelReading": { "$ref": "#/messages/SpecV2Messages/RSSILevelReading" }, 1764 - "ScanningFinished": { "$ref": "#/messages/SpecV0Messages/ScanningFinished" }, 1765 - "ServerInfo": { "$ref": "#/messages/SpecV2Messages/ServerInfo" }, 1766 - "StartScanning": { "$ref": "#/messages/SpecV0Messages/StartScanning" }, 1767 - "StopAllDevices": { "$ref": "#/messages/SpecV0Messages/StopAllDevices" }, 1768 - "StopDeviceCmd": { "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" }, 1769 - "StopScanning": { "$ref": "#/messages/SpecV0Messages/StopScanning" }, 1770 - "VibrateCmd": { "$ref": "#/messages/SpecV1Messages/VibrateCmd" } 2125 + "BatteryLevelCmd": { 2126 + "$ref": "#/messages/SpecV2Messages/BatteryLevelCmd" 2127 + }, 2128 + "BatteryLevelReading": { 2129 + "$ref": "#/messages/SpecV2Messages/BatteryLevelReading" 2130 + }, 2131 + "DeviceList": { 2132 + "$ref": "#/messages/SpecV2Messages/DeviceList" 2133 + }, 2134 + "DeviceAdded": { 2135 + "$ref": "#/messages/SpecV2Messages/DeviceAdded" 2136 + }, 2137 + "DeviceRemoved": { 2138 + "$ref": "#/messages/SpecV0Messages/DeviceRemoved" 2139 + }, 2140 + "Error": { 2141 + "$ref": "#/messages/SpecV0Messages/Error" 2142 + }, 2143 + "LinearCmd": { 2144 + "$ref": "#/messages/SpecV1Messages/LinearCmd" 2145 + }, 2146 + "Ok": { 2147 + "$ref": "#/messages/SpecV0Messages/Ok" 2148 + }, 2149 + "Ping": { 2150 + "$ref": "#/messages/SpecV0Messages/Ping" 2151 + }, 2152 + "RawReadCmd": { 2153 + "$ref": "#/messages/SpecV2Messages/RawReadCmd" 2154 + }, 2155 + "RawReading": { 2156 + "$ref": "#/messages/SpecV2Messages/RawReading" 2157 + }, 2158 + "RawWriteCmd": { 2159 + "$ref": "#/messages/SpecV2Messages/RawWriteCmd" 2160 + }, 2161 + "RawSubscribeCmd": { 2162 + "$ref": "#/messages/SpecV2Messages/RawSubscribeCmd" 2163 + }, 2164 + "RawUnsubscribeCmd": { 2165 + "$ref": "#/messages/SpecV2Messages/RawUnsubscribeCmd" 2166 + }, 2167 + "RequestDeviceList": { 2168 + "$ref": "#/messages/SpecV0Messages/RequestDeviceList" 2169 + }, 2170 + "RequestLog": { 2171 + "$ref": "#/messages/SpecV0Messages/RequestLog" 2172 + }, 2173 + "RequestServerInfo": { 2174 + "$ref": "#/messages/SpecV1Messages/RequestServerInfo" 2175 + }, 2176 + "RotateCmd": { 2177 + "$ref": "#/messages/SpecV1Messages/RotateCmd" 2178 + }, 2179 + "RSSILevelCmd": { 2180 + "$ref": "#/messages/SpecV2Messages/RSSILevelCmd" 2181 + }, 2182 + "RSSILevelReading": { 2183 + "$ref": "#/messages/SpecV2Messages/RSSILevelReading" 2184 + }, 2185 + "ScanningFinished": { 2186 + "$ref": "#/messages/SpecV0Messages/ScanningFinished" 2187 + }, 2188 + "ServerInfo": { 2189 + "$ref": "#/messages/SpecV2Messages/ServerInfo" 2190 + }, 2191 + "StartScanning": { 2192 + "$ref": "#/messages/SpecV0Messages/StartScanning" 2193 + }, 2194 + "StopAllDevices": { 2195 + "$ref": "#/messages/SpecV0Messages/StopAllDevices" 2196 + }, 2197 + "StopDeviceCmd": { 2198 + "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" 2199 + }, 2200 + "StopScanning": { 2201 + "$ref": "#/messages/SpecV0Messages/StopScanning" 2202 + }, 2203 + "VibrateCmd": { 2204 + "$ref": "#/messages/SpecV1Messages/VibrateCmd" 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 - "DeviceList": { "$ref": "#/messages/SpecV1Messages/DeviceList" }, 1785 - "DeviceAdded": { "$ref": "#/messages/SpecV1Messages/DeviceAdded" }, 1786 - "DeviceRemoved": { "$ref": "#/messages/SpecV0Messages/DeviceRemoved" }, 1787 - "Error": { "$ref": "#/messages/SpecV0Messages/Error" }, 1788 - "FleshlightLaunchFW12Cmd": { "$ref": "#/messages/SpecV0Messages/FleshlightLaunchFW12Cmd" }, 1789 - "KiirooCmd": { "$ref": "#/messages/SpecV0Messages/KiirooCmd" }, 1790 - "LinearCmd": { "$ref": "#/messages/SpecV1Messages/LinearCmd" }, 1791 - "Log": { "$ref": "#/messages/SpecV0Messages/Log" }, 1792 - "Ok": { "$ref": "#/messages/SpecV0Messages/Ok" }, 1793 - "Ping": { "$ref": "#/messages/SpecV0Messages/Ping" }, 1794 - "RequestDeviceList": { "$ref": "#/messages/SpecV0Messages/RequestDeviceList" }, 1795 - "RequestLog": { "$ref": "#/messages/SpecV0Messages/RequestLog" }, 1796 - "RequestServerInfo": { "$ref": "#/messages/SpecV1Messages/RequestServerInfo" }, 1797 - "RotateCmd": { "$ref": "#/messages/SpecV1Messages/RotateCmd" }, 1798 - "ServerInfo": { "$ref": "#/messages/SpecV1Messages/ServerInfo" }, 1799 - "StartScanning": { "$ref": "#/messages/SpecV0Messages/StartScanning" }, 1800 - "StopAllDevices": { "$ref": "#/messages/SpecV0Messages/StopAllDevices" }, 1801 - "StopDeviceCmd": { "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" }, 1802 - "StopScanning": { "$ref": "#/messages/SpecV0Messages/StopScanning" }, 1803 - "Test": { "$ref": "#/messages/SpecV0Messages/Test" }, 1804 - "VibrateCmd": { "$ref": "#/messages/SpecV1Messages/VibrateCmd" }, 1805 - "VorzeA10CycloneCmd": { "$ref": "#/messages/SpecV0Messages/VorzeA10CycloneCmd" } 2219 + "DeviceList": { 2220 + "$ref": "#/messages/SpecV1Messages/DeviceList" 2221 + }, 2222 + "DeviceAdded": { 2223 + "$ref": "#/messages/SpecV1Messages/DeviceAdded" 2224 + }, 2225 + "DeviceRemoved": { 2226 + "$ref": "#/messages/SpecV0Messages/DeviceRemoved" 2227 + }, 2228 + "Error": { 2229 + "$ref": "#/messages/SpecV0Messages/Error" 2230 + }, 2231 + "FleshlightLaunchFW12Cmd": { 2232 + "$ref": "#/messages/SpecV0Messages/FleshlightLaunchFW12Cmd" 2233 + }, 2234 + "KiirooCmd": { 2235 + "$ref": "#/messages/SpecV0Messages/KiirooCmd" 2236 + }, 2237 + "LinearCmd": { 2238 + "$ref": "#/messages/SpecV1Messages/LinearCmd" 2239 + }, 2240 + "Log": { 2241 + "$ref": "#/messages/SpecV0Messages/Log" 2242 + }, 2243 + "Ok": { 2244 + "$ref": "#/messages/SpecV0Messages/Ok" 2245 + }, 2246 + "Ping": { 2247 + "$ref": "#/messages/SpecV0Messages/Ping" 2248 + }, 2249 + "RequestDeviceList": { 2250 + "$ref": "#/messages/SpecV0Messages/RequestDeviceList" 2251 + }, 2252 + "RequestLog": { 2253 + "$ref": "#/messages/SpecV0Messages/RequestLog" 2254 + }, 2255 + "RequestServerInfo": { 2256 + "$ref": "#/messages/SpecV1Messages/RequestServerInfo" 2257 + }, 2258 + "RotateCmd": { 2259 + "$ref": "#/messages/SpecV1Messages/RotateCmd" 2260 + }, 2261 + "ServerInfo": { 2262 + "$ref": "#/messages/SpecV1Messages/ServerInfo" 2263 + }, 2264 + "StartScanning": { 2265 + "$ref": "#/messages/SpecV0Messages/StartScanning" 2266 + }, 2267 + "StopAllDevices": { 2268 + "$ref": "#/messages/SpecV0Messages/StopAllDevices" 2269 + }, 2270 + "StopDeviceCmd": { 2271 + "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" 2272 + }, 2273 + "StopScanning": { 2274 + "$ref": "#/messages/SpecV0Messages/StopScanning" 2275 + }, 2276 + "Test": { 2277 + "$ref": "#/messages/SpecV0Messages/Test" 2278 + }, 2279 + "VibrateCmd": { 2280 + "$ref": "#/messages/SpecV1Messages/VibrateCmd" 2281 + }, 2282 + "VorzeA10CycloneCmd": { 2283 + "$ref": "#/messages/SpecV0Messages/VorzeA10CycloneCmd" 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 - "DeviceList": { "$ref": "#/messages/SpecV0Messages/DeviceList" }, 1820 - "DeviceAdded": { "$ref": "#/messages/SpecV0Messages/DeviceAdded" }, 1821 - "DeviceRemoved": { "$ref": "#/messages/SpecV0Messages/DeviceRemoved" }, 1822 - "Error": { "$ref": "#/messages/SpecV0Messages/Error" }, 1823 - "Log": { "$ref": "#/messages/SpecV0Messages/Log" }, 1824 - "Ok": { "$ref": "#/messages/SpecV0Messages/Ok" }, 1825 - "Ping": { "$ref": "#/messages/SpecV0Messages/Ping" }, 1826 - "RequestDeviceList": { "$ref": "#/messages/SpecV0Messages/RequestDeviceList" }, 1827 - "RequestLog": { "$ref": "#/messages/SpecV0Messages/RequestLog" }, 1828 - "RequestServerInfo": { "$ref": "#/messages/SpecV0Messages/RequestServerInfo" }, 1829 - "ServerInfo": { "$ref": "#/messages/SpecV0Messages/ServerInfo" }, 1830 - "StartScanning": { "$ref": "#/messages/SpecV0Messages/StartScanning" }, 1831 - "StopAllDevices": { "$ref": "#/messages/SpecV0Messages/StopAllDevices" }, 1832 - "StopDeviceCmd": { "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" }, 1833 - "StopScanning": { "$ref": "#/messages/SpecV0Messages/StopScanning" }, 1834 - "Test": { "$ref": "#/messages/SpecV0Messages/Test" }, 1835 - "FleshlightLaunchFW12Cmd": { "$ref": "#/messages/SpecV0Messages/FleshlightLaunchFW12Cmd" }, 1836 - "KiirooCmd": { "$ref": "#/messages/SpecV0Messages/KiirooCmd" }, 1837 - "SingleMotorVibrateCmd": { "$ref": "#/messages/SpecV0Messages/SingleMotorVibrateCmd" }, 1838 - "VorzeA10CycloneCmd": { "$ref": "#/messages/SpecV0Messages/VorzeA10CycloneCmd" } 2298 + "DeviceList": { 2299 + "$ref": "#/messages/SpecV0Messages/DeviceList" 2300 + }, 2301 + "DeviceAdded": { 2302 + "$ref": "#/messages/SpecV0Messages/DeviceAdded" 2303 + }, 2304 + "DeviceRemoved": { 2305 + "$ref": "#/messages/SpecV0Messages/DeviceRemoved" 2306 + }, 2307 + "Error": { 2308 + "$ref": "#/messages/SpecV0Messages/Error" 2309 + }, 2310 + "Log": { 2311 + "$ref": "#/messages/SpecV0Messages/Log" 2312 + }, 2313 + "Ok": { 2314 + "$ref": "#/messages/SpecV0Messages/Ok" 2315 + }, 2316 + "Ping": { 2317 + "$ref": "#/messages/SpecV0Messages/Ping" 2318 + }, 2319 + "RequestDeviceList": { 2320 + "$ref": "#/messages/SpecV0Messages/RequestDeviceList" 2321 + }, 2322 + "RequestLog": { 2323 + "$ref": "#/messages/SpecV0Messages/RequestLog" 2324 + }, 2325 + "RequestServerInfo": { 2326 + "$ref": "#/messages/SpecV0Messages/RequestServerInfo" 2327 + }, 2328 + "ServerInfo": { 2329 + "$ref": "#/messages/SpecV0Messages/ServerInfo" 2330 + }, 2331 + "StartScanning": { 2332 + "$ref": "#/messages/SpecV0Messages/StartScanning" 2333 + }, 2334 + "StopAllDevices": { 2335 + "$ref": "#/messages/SpecV0Messages/StopAllDevices" 2336 + }, 2337 + "StopDeviceCmd": { 2338 + "$ref": "#/messages/SpecV0Messages/StopDeviceCmd" 2339 + }, 2340 + "StopScanning": { 2341 + "$ref": "#/messages/SpecV0Messages/StopScanning" 2342 + }, 2343 + "Test": { 2344 + "$ref": "#/messages/SpecV0Messages/Test" 2345 + }, 2346 + "FleshlightLaunchFW12Cmd": { 2347 + "$ref": "#/messages/SpecV0Messages/FleshlightLaunchFW12Cmd" 2348 + }, 2349 + "KiirooCmd": { 2350 + "$ref": "#/messages/SpecV0Messages/KiirooCmd" 2351 + }, 2352 + "SingleMotorVibrateCmd": { 2353 + "$ref": "#/messages/SpecV0Messages/SingleMotorVibrateCmd" 2354 + }, 2355 + "VorzeA10CycloneCmd": { 2356 + "$ref": "#/messages/SpecV0Messages/VorzeA10CycloneCmd" 2357 + } 1839 2358 }, 1840 2359 "additionalProperties": false, 1841 2360 "minProperties": 1, ··· 1844 2363 "minItems": 1 1845 2364 } 1846 2365 }, 1847 - "anyOf": [ 1848 - { "$ref": "#/specs/MessageSpecV4" }, 1849 - { "$ref": "#/specs/MessageSpecV3" }, 1850 - { "$ref": "#/specs/MessageSpecV2" }, 1851 - { "$ref": "#/specs/MessageSpecV1" }, 1852 - { "$ref": "#/specs/MessageSpecV0" } 2366 + "anyOf": [ 2367 + { 2368 + "$ref": "#/specs/MessageSpecV4" 2369 + }, 2370 + { 2371 + "$ref": "#/specs/MessageSpecV3" 2372 + }, 2373 + { 2374 + "$ref": "#/specs/MessageSpecV2" 2375 + }, 2376 + { 2377 + "$ref": "#/specs/MessageSpecV1" 2378 + }, 2379 + { 2380 + "$ref": "#/specs/MessageSpecV0" 2381 + } 1853 2382 ] 1854 - } 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 - "base-id": { 273 + "base_id": { 274 274 "$ref": "#/components/uuid" 275 - }, 276 - "feature-type": { 277 - "type": "string" 278 275 }, 279 276 "output": { 280 277 "type": "object", ··· 322 319 } 323 320 } 324 321 } 325 - }, 326 - "input": { 327 - "type": "object", 328 - "patternProperties": { 329 - "^(battery|rssi|pressure)$": { 330 - "type": "object", 331 - "properties": { 332 - "value-range": { 333 - "type": "array", 334 - "items": { 335 - "$ref": "#/components/value-range" 336 - }, 337 - "minItems": 1 338 - }, 339 - "input-commands": { 340 - "type": "array", 341 - "items": { 342 - "type": "string", 343 - "pattern": "^(Read|Subscribe)$" 344 - } 345 - } 346 - }, 347 - "required": [ 348 - "value-range", 349 - "input-commands" 350 - ], 351 - "additionalProperties": false 352 - } 353 - } 354 322 } 355 323 }, 356 324 "required": [ 357 - "base-id", 325 + "base_id", 358 326 "id" 359 327 ], 360 328 "additionalProperties": false ··· 369 337 "deny": { 370 338 "type": "boolean" 371 339 }, 372 - "display-name": { 340 + "display_name": { 373 341 "type": "string" 374 342 }, 375 343 "index": { ··· 392 360 "id": { 393 361 "$ref": "#/components/uuid" 394 362 }, 395 - "protocol-variant": { 363 + "protocol_variant": { 396 364 "type": "string" 397 365 }, 398 366 "features": { ··· 423 391 "id": { 424 392 "$ref": "#/components/uuid" 425 393 }, 426 - "protocol-variant": { 394 + "protocol_variant": { 427 395 "type": "string" 428 396 }, 429 397 "features": { ··· 503 471 }, 504 472 "additionalProperties": false 505 473 }, 506 - "user-configs": { 474 + "user_configs": { 507 475 "type": "object", 508 476 "properties": { 509 477 "protocols": { ··· 582 550 "id": { 583 551 "$ref": "#/components/uuid" 584 552 }, 585 - "base-id": { 553 + "base_id": { 586 554 "$ref": "#/components/uuid" 587 555 }, 588 556 "features": { 589 557 "$ref": "#/components/user-config-features" 590 558 }, 591 - "user-config": { 559 + "user_config": { 592 560 "$ref": "#/components/user-config-customization" 593 561 }, 594 - "message-gap-ms": { 562 + "message_gap_ms": { 595 563 "type": "integer", 596 564 "min": 0 597 565 } 598 566 }, 599 567 "required": [ 600 568 "id", 601 - "base-id", 569 + "base_id", 602 570 "features", 603 - "user-config" 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 - protocol-variant: vorze-sa-vibrator 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 - protocol-variant: vorze-sa-vibrator 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 - protocol-variant: vorze-sa-single-rotator 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 - protocol-variant: vorze-sa-single-rotator 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 - protocol-variant: vorze-sa-dual-rotator 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 - protocol-variant: vorze-sa-piston 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 - minor: 64 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 - 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 - 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 - #[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 - #[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 - #[serde(rename = "user-configs", default)] 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 - "user-configs": { 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 - "user-configs": {} 83 + "user_configs": {} 84 84 } 85 85 "#; 86 86 ··· 131 131 major: 3, 132 132 minor: 0 133 133 }, 134 - "user-configs": { 134 + "user_configs": { 135 135 "devices": [ 136 136 { 137 137 "identifier": { ··· 143 143 "name": "Lovense Test Device", 144 144 "features": [ 145 145 { 146 - "feature-type": "Vibrate", 147 146 "description": "Test Speed", 148 147 "actuator": { 149 - "step-range": [ 148 + "step_range": [ 150 149 0, 151 150 20 152 151 ], 153 - "step-limit: [ 152 + "step_limit: [ 154 153 10, 155 154 15 156 155 ], ··· 160 159 } 161 160 }, 162 161 { 163 - "feature-type": "Battery", 164 162 "description": "Battery Level", 165 163 "sensor": { 166 164 "value-range": [ ··· 175 173 } 176 174 } 177 175 ], 178 - "user-config": { 176 + "user_config": { 179 177 "allow": false, 180 178 "deny": false, 181 179 "index": 0, 182 - "display-name": "Lovense Name Test" 180 + "display_name": "Lovense Name Test" 183 181 } 184 182 } 185 183 } ··· 203 201 major: 3, 204 202 minor: 0 205 203 }, 206 - "user-configs": { 204 + "user_configs": { 207 205 "devices": [ 208 206 { 209 207 "identifier": { ··· 215 213 "name": "Lovense Test Device", 216 214 "features": [ 217 215 { 218 - "feature-type": "Vibrate", 219 216 "description": "Test Speed", 220 217 "actuator": { 221 218 "step-range": [ ··· 227 224 } 228 225 }, 229 226 { 230 - "feature-type": "Battery", 231 227 "description": "Battery Level", 232 228 "sensor": { 233 229 "value-range": [ ··· 242 238 } 243 239 } 244 240 ], 245 - "user-config": { 241 + "user_config": { 246 242 "allow": false, 247 243 "deny": false, 248 244 "index": 0, 249 - "display-name": "Lovense Name Test" 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 - "user-configs": { 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 - "base-id": "9b52eca4-0e49-426e-a543-2ef735cd803a", 18 17 "features": [ 19 18 { 20 19 "description": "Fucking Machine Oscillation Speed", 20 + "base_id": "f9506652-c4ac-43b1-b184-cd8016b64623", 21 + "id": "f9506652-c4ac-43b1-b184-cd8016b64623", 21 22 "output": { 22 - "Oscillate": { 23 - "step-limit": [ 23 + "oscillate": { 24 + "value": [ 24 25 0, 25 - 10 26 + 20 26 27 ] 27 28 } 28 - }, 29 - "base-id": "0ab80cc0-7a82-4cb6-ba4f-0f18ddb2911f", 30 - "id": "56d94863-b321-428b-8b68-bac0197556e2" 29 + } 30 + }, 31 + { 32 + "description": "battery Level", 33 + "base_id": "7c382c60-0ee2-4315-b8cf-cfd3ab4c9ccd", 34 + "id": "77d6498b-3707-4ca6-b37d-e0d6f868d302" 31 35 } 32 36 ], 33 - "user-config": { 37 + "base_id": "8667f7b6-7baa-4e46-9d76-947fb707f0f3", 38 + "user_config": { 34 39 "allow": false, 35 40 "deny": false, 36 41 "index": 0, 37 - "display-name": "Lovense Name Test" 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 - "user-configs": { 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 - "base-id": "c8633234-07a4-4ad9-961d-a4d777b32be7", 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 - "Oscillate": { 24 - "step-range": [ 23 + "oscillate": { 24 + "step_range": [ 25 25 0, 26 26 30 27 27 ], 28 - "step-limit": [ 28 + "step_limit": [ 29 29 0, 30 30 30 31 31 ] 32 32 } 33 33 }, 34 - "base-id": "56d94863-b321-428b-8b68-bac0197556e1", 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 - "Battery": { 42 - "value-range": [ 41 + "battery": { 42 + "value_range": [ 43 43 [ 44 44 0, 45 45 100 46 46 ] 47 47 ], 48 - "input-commands": [ 48 + "input_commands": [ 49 49 "Read" 50 50 ] 51 51 } 52 52 }, 53 - "base-id": "b9899daa-7755-4ebb-88b4-13122d12745e", 53 + "base_id": "b9899daa-7755-4ebb-88b4-13122d12745e", 54 54 "id": "b9899daa-7755-4ebb-88b4-13122d12745f" 55 55 } 56 56 ], 57 - "user-config": { 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 - "user-configs": { 6 + "user_configs": { 7 7 "protocols": { 8 8 "tcode-v03": { 9 9 "communication": [ ··· 30 30 "features": [ 31 31 { 32 32 "description": "", 33 - "feature-type": "PositionWithDuration", 34 33 "output": { 35 - "PositionWithDuration": { 36 - "step-range": [ 34 + "position_with_duration": { 35 + "position": [ 37 36 0, 38 37 100 38 + ], 39 + "duration": [ 40 + 0, 41 + 100000 39 42 ] 40 43 } 41 44 }, ··· 43 46 }, 44 47 { 45 48 "description": "", 46 - "feature-type": "Vibrate", 47 49 "output": { 48 - "Vibrate": { 49 - "step-range": [ 50 + "vibrate": { 51 + "value": [ 50 52 0, 51 53 99 52 54 ] ··· 68 70 }, 69 71 "config": { 70 72 "id": "6d3f0643-1933-4df6-85ff-5675bf1a3dd4", 71 - "base-id": "e4384a37-fd37-4b9e-8464-a510dd8410a7", 73 + "base_id": "e4384a37-fd37-4b9e-8464-a510dd8410a7", 72 74 "features": [ 73 75 { 74 - "output": { 75 - "PositionWithDuration": { 76 - "step-limit": [ 77 - 0, 78 - 100 79 - ] 80 - } 81 - }, 82 - "base-id": "c5e6384e-399b-4c2b-9791-eb48abaf3bf7", 76 + "base_id": "c5e6384e-399b-4c2b-9791-eb48abaf3bf7", 83 77 "id": "a9e532ff-f72f-4c2f-9ae6-02a6ddcb2d74" 84 78 }, 85 79 { 86 80 "description": "", 87 - "feature-type": "Vibrate", 88 - "output": { 89 - "Vibrate": { 90 - "step-limit": [ 91 - 0, 92 - 99 93 - ] 94 - } 95 - }, 96 - "base-id": "e4384a37-fd37-4b9e-8464-a510dd8410a7", 81 + "base_id": "e4384a37-fd37-4b9e-8464-a510dd8410a7", 97 82 "id": "10deb5c9-9d44-4dab-abf3-500b7df51e9f" 98 83 } 99 84 ], 100 - "user-config": { 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 - # "Vibrate:5;" 40 - data: [86, 105, 98, 114, 97, 116, 101, 58, 53, 59] 39 + # "Vibrate:10;" 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