Buttplug sex toy control library

feat: Simplify comm info storage for de/serialization

Instead of trying to constrain types, make de/serialization for communication
types look like internal storage of the data. This makes life way easier for actually
writing out user configs.

+3572 -2993
+2113 -1665
buttplug/buttplug-device-config/build-config/buttplug-device-config-v3.json
··· 5 5 }, 6 6 "protocols": { 7 7 "lovense": { 8 - "btle": { 9 - "names": [ 10 - "LVS-*", 11 - "LOVE-*" 12 - ], 13 - "manufacturer-data": [ 14 - { 15 - "company": 620, 16 - "data": [ 17 - 255, 18 - 33 19 - ] 20 - } 21 - ], 22 - "services": { 23 - "0000fff0-0000-1000-8000-00805f9b34fb": { 24 - "tx": "0000fff2-0000-1000-8000-00805f9b34fb", 25 - "rx": "0000fff1-0000-1000-8000-00805f9b34fb" 26 - }, 27 - "6e400001-b5a3-f393-e0a9-e50e24dcca9e": { 28 - "tx": "6e400002-b5a3-f393-e0a9-e50e24dcca9e", 29 - "rx": "6e400003-b5a3-f393-e0a9-e50e24dcca9e" 30 - }, 31 - "50300001-0024-4bd4-bbd5-a6920e4c5653": { 32 - "tx": "50300002-0024-4bd4-bbd5-a6920e4c5653", 33 - "rx": "50300003-0024-4bd4-bbd5-a6920e4c5653" 34 - }, 35 - "57300001-0023-4bd4-bbd5-a6920e4c5653": { 36 - "tx": "57300002-0023-4bd4-bbd5-a6920e4c5653", 37 - "rx": "57300003-0023-4bd4-bbd5-a6920e4c5653" 38 - }, 39 - "5a300001-0024-4bd4-bbd5-a6920e4c5653": { 40 - "tx": "5a300002-0024-4bd4-bbd5-a6920e4c5653", 41 - "rx": "5a300003-0024-4bd4-bbd5-a6920e4c5653" 42 - }, 43 - "50300001-0023-4bd4-bbd5-a6920e4c5653": { 44 - "tx": "50300002-0023-4bd4-bbd5-a6920e4c5653", 45 - "rx": "50300003-0023-4bd4-bbd5-a6920e4c5653" 46 - }, 47 - "53300001-0023-4bd4-bbd5-a6920e4c5653": { 48 - "tx": "53300002-0023-4bd4-bbd5-a6920e4c5653", 49 - "rx": "53300003-0023-4bd4-bbd5-a6920e4c5653" 50 - }, 51 - "5a300001-0023-4bd4-bbd5-a6920e4c5653": { 52 - "tx": "5a300002-0023-4bd4-bbd5-a6920e4c5653", 53 - "rx": "5a300003-0023-4bd4-bbd5-a6920e4c5653" 54 - }, 55 - "4f300001-0023-4bd4-bbd5-a6920e4c5653": { 56 - "tx": "4f300002-0023-4bd4-bbd5-a6920e4c5653", 57 - "rx": "4f300003-0023-4bd4-bbd5-a6920e4c5653" 58 - }, 59 - "42300001-0023-4bd4-bbd5-a6920e4c5653": { 60 - "tx": "42300002-0023-4bd4-bbd5-a6920e4c5653", 61 - "rx": "42300003-0023-4bd4-bbd5-a6920e4c5653" 62 - }, 63 - "43300001-0023-4bd4-bbd5-a6920e4c5653": { 64 - "tx": "43300002-0023-4bd4-bbd5-a6920e4c5653", 65 - "rx": "43300003-0023-4bd4-bbd5-a6920e4c5653" 66 - }, 67 - "4c300001-0023-4bd4-bbd5-a6920e4c5653": { 68 - "tx": "4c300002-0023-4bd4-bbd5-a6920e4c5653", 69 - "rx": "4c300003-0023-4bd4-bbd5-a6920e4c5653" 70 - }, 71 - "4c410001-0023-4bd4-bbd5-a6920e4c5653": { 72 - "tx": "4c410002-0023-4bd4-bbd5-a6920e4c5653", 73 - "rx": "4c410003-0023-4bd4-bbd5-a6920e4c5653" 74 - }, 75 - "56300001-0023-4bd4-bbd5-a6920e4c5653": { 76 - "tx": "56300002-0023-4bd4-bbd5-a6920e4c5653", 77 - "rx": "56300003-0023-4bd4-bbd5-a6920e4c5653" 78 - }, 79 - "58300001-0023-4bd4-bbd5-a6920e4c5653": { 80 - "tx": "58300002-0023-4bd4-bbd5-a6920e4c5653", 81 - "rx": "58300003-0023-4bd4-bbd5-a6920e4c5653" 82 - }, 83 - "52300001-0023-4bd4-bbd5-a6920e4c5653": { 84 - "tx": "52300002-0023-4bd4-bbd5-a6920e4c5653", 85 - "rx": "52300003-0023-4bd4-bbd5-a6920e4c5653" 86 - }, 87 - "46300001-0023-4bd4-bbd5-a6920e4c5653": { 88 - "tx": "46300002-0023-4bd4-bbd5-a6920e4c5653", 89 - "rx": "46300003-0023-4bd4-bbd5-a6920e4c5653" 90 - }, 91 - "50300011-0023-4bd4-bbd5-a6920e4c5653": { 92 - "tx": "50300012-0023-4bd4-bbd5-a6920e4c5653", 93 - "rx": "50300013-0023-4bd4-bbd5-a6920e4c5653" 94 - }, 95 - "4a300001-0023-4bd4-bbd5-a6920e4c5653": { 96 - "tx": "4a300002-0023-4bd4-bbd5-a6920e4c5653", 97 - "rx": "4a300003-0023-4bd4-bbd5-a6920e4c5653" 98 - }, 99 - "45440001-0023-4bd4-bbd5-a6920e4c5653": { 100 - "tx": "45440002-0023-4bd4-bbd5-a6920e4c5653", 101 - "rx": "45440003-0023-4bd4-bbd5-a6920e4c5653" 102 - }, 103 - "45420001-0023-4bd4-bbd5-a6920e4c5653": { 104 - "tx": "45420002-0023-4bd4-bbd5-a6920e4c5653", 105 - "rx": "45420003-0023-4bd4-bbd5-a6920e4c5653" 106 - }, 107 - "54300001-0023-4bd4-bbd5-a6920e4c5653": { 108 - "tx": "54300002-0023-4bd4-bbd5-a6920e4c5653", 109 - "rx": "54300003-0023-4bd4-bbd5-a6920e4c5653" 110 - }, 111 - "45490001-0023-4bd4-bbd5-a6920e4c5653": { 112 - "tx": "45490002-0023-4bd4-bbd5-a6920e4c5653", 113 - "rx": "45490003-0023-4bd4-bbd5-a6920e4c5653" 114 - }, 115 - "4e300001-0023-4bd4-bbd5-a6920e4c5653": { 116 - "tx": "4e300002-0023-4bd4-bbd5-a6920e4c5653", 117 - "rx": "4e300003-0023-4bd4-bbd5-a6920e4c5653" 118 - }, 119 - "45410001-0023-4bd4-bbd5-a6920e4c5653": { 120 - "tx": "45410002-0023-4bd4-bbd5-a6920e4c5653", 121 - "rx": "45410003-0023-4bd4-bbd5-a6920e4c5653" 122 - }, 123 - "51300001-0023-4bd4-bbd5-a6920e4c5653": { 124 - "tx": "51300002-0023-4bd4-bbd5-a6920e4c5653", 125 - "rx": "51300003-0023-4bd4-bbd5-a6920e4c5653" 126 - }, 127 - "45460001-0023-4bd4-bbd5-a6920e4c5653": { 128 - "tx": "45460002-0023-4bd4-bbd5-a6920e4c5653", 129 - "rx": "45460003-0023-4bd4-bbd5-a6920e4c5653" 130 - }, 131 - "454c0001-0023-4bd4-bbd5-a6920e4c5653": { 132 - "tx": "454c0002-0023-4bd4-bbd5-a6920e4c5653", 133 - "rx": "454c0003-0023-4bd4-bbd5-a6920e4c5653" 134 - }, 135 - "55300001-0023-4bd4-bbd5-a6920e4c5653": { 136 - "tx": "55300002-0023-4bd4-bbd5-a6920e4c5653", 137 - "rx": "55300003-0023-4bd4-bbd5-a6920e4c5653" 138 - }, 139 - "53440001-0023-4bd4-bbd5-a6920e4c5653": { 140 - "tx": "53440002-0023-4bd4-bbd5-a6920e4c5653", 141 - "rx": "53440003-0023-4bd4-bbd5-a6920e4c5653" 142 - }, 143 - "48300001-0023-4bd4-bbd5-a6920e4c5653": { 144 - "tx": "48300002-0023-4bd4-bbd5-a6920e4c5653", 145 - "rx": "48300003-0023-4bd4-bbd5-a6920e4c5653" 146 - } 147 - } 148 - }, 149 8 "defaults": { 150 9 "name": "Lovense Device", 151 10 "features": [ ··· 838 697 } 839 698 ] 840 699 } 700 + ], 701 + "communication": [ 702 + { 703 + "btle": { 704 + "names": [ 705 + "LVS-*", 706 + "LOVE-*" 707 + ], 708 + "manufacturer-data": [ 709 + { 710 + "company": 620, 711 + "data": [ 712 + 255, 713 + 33 714 + ] 715 + } 716 + ], 717 + "services": { 718 + "0000fff0-0000-1000-8000-00805f9b34fb": { 719 + "tx": "0000fff2-0000-1000-8000-00805f9b34fb", 720 + "rx": "0000fff1-0000-1000-8000-00805f9b34fb" 721 + }, 722 + "6e400001-b5a3-f393-e0a9-e50e24dcca9e": { 723 + "tx": "6e400002-b5a3-f393-e0a9-e50e24dcca9e", 724 + "rx": "6e400003-b5a3-f393-e0a9-e50e24dcca9e" 725 + }, 726 + "50300001-0024-4bd4-bbd5-a6920e4c5653": { 727 + "tx": "50300002-0024-4bd4-bbd5-a6920e4c5653", 728 + "rx": "50300003-0024-4bd4-bbd5-a6920e4c5653" 729 + }, 730 + "57300001-0023-4bd4-bbd5-a6920e4c5653": { 731 + "tx": "57300002-0023-4bd4-bbd5-a6920e4c5653", 732 + "rx": "57300003-0023-4bd4-bbd5-a6920e4c5653" 733 + }, 734 + "5a300001-0024-4bd4-bbd5-a6920e4c5653": { 735 + "tx": "5a300002-0024-4bd4-bbd5-a6920e4c5653", 736 + "rx": "5a300003-0024-4bd4-bbd5-a6920e4c5653" 737 + }, 738 + "50300001-0023-4bd4-bbd5-a6920e4c5653": { 739 + "tx": "50300002-0023-4bd4-bbd5-a6920e4c5653", 740 + "rx": "50300003-0023-4bd4-bbd5-a6920e4c5653" 741 + }, 742 + "53300001-0023-4bd4-bbd5-a6920e4c5653": { 743 + "tx": "53300002-0023-4bd4-bbd5-a6920e4c5653", 744 + "rx": "53300003-0023-4bd4-bbd5-a6920e4c5653" 745 + }, 746 + "5a300001-0023-4bd4-bbd5-a6920e4c5653": { 747 + "tx": "5a300002-0023-4bd4-bbd5-a6920e4c5653", 748 + "rx": "5a300003-0023-4bd4-bbd5-a6920e4c5653" 749 + }, 750 + "4f300001-0023-4bd4-bbd5-a6920e4c5653": { 751 + "tx": "4f300002-0023-4bd4-bbd5-a6920e4c5653", 752 + "rx": "4f300003-0023-4bd4-bbd5-a6920e4c5653" 753 + }, 754 + "42300001-0023-4bd4-bbd5-a6920e4c5653": { 755 + "tx": "42300002-0023-4bd4-bbd5-a6920e4c5653", 756 + "rx": "42300003-0023-4bd4-bbd5-a6920e4c5653" 757 + }, 758 + "43300001-0023-4bd4-bbd5-a6920e4c5653": { 759 + "tx": "43300002-0023-4bd4-bbd5-a6920e4c5653", 760 + "rx": "43300003-0023-4bd4-bbd5-a6920e4c5653" 761 + }, 762 + "4c300001-0023-4bd4-bbd5-a6920e4c5653": { 763 + "tx": "4c300002-0023-4bd4-bbd5-a6920e4c5653", 764 + "rx": "4c300003-0023-4bd4-bbd5-a6920e4c5653" 765 + }, 766 + "4c410001-0023-4bd4-bbd5-a6920e4c5653": { 767 + "tx": "4c410002-0023-4bd4-bbd5-a6920e4c5653", 768 + "rx": "4c410003-0023-4bd4-bbd5-a6920e4c5653" 769 + }, 770 + "56300001-0023-4bd4-bbd5-a6920e4c5653": { 771 + "tx": "56300002-0023-4bd4-bbd5-a6920e4c5653", 772 + "rx": "56300003-0023-4bd4-bbd5-a6920e4c5653" 773 + }, 774 + "58300001-0023-4bd4-bbd5-a6920e4c5653": { 775 + "tx": "58300002-0023-4bd4-bbd5-a6920e4c5653", 776 + "rx": "58300003-0023-4bd4-bbd5-a6920e4c5653" 777 + }, 778 + "52300001-0023-4bd4-bbd5-a6920e4c5653": { 779 + "tx": "52300002-0023-4bd4-bbd5-a6920e4c5653", 780 + "rx": "52300003-0023-4bd4-bbd5-a6920e4c5653" 781 + }, 782 + "46300001-0023-4bd4-bbd5-a6920e4c5653": { 783 + "tx": "46300002-0023-4bd4-bbd5-a6920e4c5653", 784 + "rx": "46300003-0023-4bd4-bbd5-a6920e4c5653" 785 + }, 786 + "50300011-0023-4bd4-bbd5-a6920e4c5653": { 787 + "tx": "50300012-0023-4bd4-bbd5-a6920e4c5653", 788 + "rx": "50300013-0023-4bd4-bbd5-a6920e4c5653" 789 + }, 790 + "4a300001-0023-4bd4-bbd5-a6920e4c5653": { 791 + "tx": "4a300002-0023-4bd4-bbd5-a6920e4c5653", 792 + "rx": "4a300003-0023-4bd4-bbd5-a6920e4c5653" 793 + }, 794 + "45440001-0023-4bd4-bbd5-a6920e4c5653": { 795 + "tx": "45440002-0023-4bd4-bbd5-a6920e4c5653", 796 + "rx": "45440003-0023-4bd4-bbd5-a6920e4c5653" 797 + }, 798 + "45420001-0023-4bd4-bbd5-a6920e4c5653": { 799 + "tx": "45420002-0023-4bd4-bbd5-a6920e4c5653", 800 + "rx": "45420003-0023-4bd4-bbd5-a6920e4c5653" 801 + }, 802 + "54300001-0023-4bd4-bbd5-a6920e4c5653": { 803 + "tx": "54300002-0023-4bd4-bbd5-a6920e4c5653", 804 + "rx": "54300003-0023-4bd4-bbd5-a6920e4c5653" 805 + }, 806 + "45490001-0023-4bd4-bbd5-a6920e4c5653": { 807 + "tx": "45490002-0023-4bd4-bbd5-a6920e4c5653", 808 + "rx": "45490003-0023-4bd4-bbd5-a6920e4c5653" 809 + }, 810 + "4e300001-0023-4bd4-bbd5-a6920e4c5653": { 811 + "tx": "4e300002-0023-4bd4-bbd5-a6920e4c5653", 812 + "rx": "4e300003-0023-4bd4-bbd5-a6920e4c5653" 813 + }, 814 + "45410001-0023-4bd4-bbd5-a6920e4c5653": { 815 + "tx": "45410002-0023-4bd4-bbd5-a6920e4c5653", 816 + "rx": "45410003-0023-4bd4-bbd5-a6920e4c5653" 817 + }, 818 + "51300001-0023-4bd4-bbd5-a6920e4c5653": { 819 + "tx": "51300002-0023-4bd4-bbd5-a6920e4c5653", 820 + "rx": "51300003-0023-4bd4-bbd5-a6920e4c5653" 821 + }, 822 + "45460001-0023-4bd4-bbd5-a6920e4c5653": { 823 + "tx": "45460002-0023-4bd4-bbd5-a6920e4c5653", 824 + "rx": "45460003-0023-4bd4-bbd5-a6920e4c5653" 825 + }, 826 + "454c0001-0023-4bd4-bbd5-a6920e4c5653": { 827 + "tx": "454c0002-0023-4bd4-bbd5-a6920e4c5653", 828 + "rx": "454c0003-0023-4bd4-bbd5-a6920e4c5653" 829 + }, 830 + "55300001-0023-4bd4-bbd5-a6920e4c5653": { 831 + "tx": "55300002-0023-4bd4-bbd5-a6920e4c5653", 832 + "rx": "55300003-0023-4bd4-bbd5-a6920e4c5653" 833 + }, 834 + "53440001-0023-4bd4-bbd5-a6920e4c5653": { 835 + "tx": "53440002-0023-4bd4-bbd5-a6920e4c5653", 836 + "rx": "53440003-0023-4bd4-bbd5-a6920e4c5653" 837 + }, 838 + "48300001-0023-4bd4-bbd5-a6920e4c5653": { 839 + "tx": "48300002-0023-4bd4-bbd5-a6920e4c5653", 840 + "rx": "48300003-0023-4bd4-bbd5-a6920e4c5653" 841 + } 842 + } 843 + } 844 + } 841 845 ] 842 846 }, 843 847 "lovense-connect-service": { 844 - "lovense-connect-service": { 845 - "exists": true 846 - }, 847 848 "defaults": { 848 849 "name": "Lovense Connect Service Device", 849 850 "features": [ ··· 1510 1511 } 1511 1512 ] 1512 1513 } 1514 + ], 1515 + "communication": [ 1516 + { 1517 + "lovense-connect-service": { 1518 + "exists": true 1519 + } 1520 + } 1513 1521 ] 1514 1522 }, 1515 1523 "xinput": { 1516 - "xinput": { 1517 - "exists": true 1518 - }, 1519 1524 "defaults": { 1520 1525 "name": "XBox (XInput) Compatible Gamepad", 1521 1526 "features": [ ··· 1544 1549 } 1545 1550 } 1546 1551 ] 1547 - } 1548 - }, 1549 - "kiiroo-v2": { 1550 - "btle": { 1551 - "names": [ 1552 - "Launch", 1553 - "Onyx2" 1554 - ], 1555 - "services": { 1556 - "88f80580-0000-01e6-aace-0002a5d5c51b": { 1557 - "tx": "88f80581-0000-01e6-aace-0002a5d5c51b", 1558 - "rx": "88f80582-0000-01e6-aace-0002a5d5c51b", 1559 - "firmware": "88f80583-0000-01e6-aace-0002a5d5c51b" 1560 - }, 1561 - "f60402a6-0293-4bdb-9f20-6758133f7090": { 1562 - "tx": "02962ac9-e86f-4094-989d-231d69995fc2", 1563 - "rx": "d44d0393-0731-43b3-a373-8fc70b1f3323", 1564 - "firmware": "c7b7a04b-2cc4-40ff-8b10-5d531d1161db" 1552 + }, 1553 + "communication": [ 1554 + { 1555 + "xinput": { 1556 + "exists": true 1565 1557 } 1566 1558 } 1567 - }, 1559 + ] 1560 + }, 1561 + "kiiroo-v2": { 1568 1562 "defaults": { 1569 1563 "name": "Kiiroo v2 Device", 1570 1564 "features": [ ··· 1595 1589 ], 1596 1590 "name": "Kiiroo Onyx 2" 1597 1591 } 1592 + ], 1593 + "communication": [ 1594 + { 1595 + "btle": { 1596 + "names": [ 1597 + "Launch", 1598 + "Onyx2" 1599 + ], 1600 + "services": { 1601 + "88f80580-0000-01e6-aace-0002a5d5c51b": { 1602 + "tx": "88f80581-0000-01e6-aace-0002a5d5c51b", 1603 + "rx": "88f80582-0000-01e6-aace-0002a5d5c51b", 1604 + "firmware": "88f80583-0000-01e6-aace-0002a5d5c51b" 1605 + }, 1606 + "f60402a6-0293-4bdb-9f20-6758133f7090": { 1607 + "tx": "02962ac9-e86f-4094-989d-231d69995fc2", 1608 + "rx": "d44d0393-0731-43b3-a373-8fc70b1f3323", 1609 + "firmware": "c7b7a04b-2cc4-40ff-8b10-5d531d1161db" 1610 + } 1611 + } 1612 + } 1613 + } 1598 1614 ] 1599 1615 }, 1600 1616 "libo-elle": { 1601 - "btle": { 1602 - "names": [ 1603 - "PiPiJing", 1604 - "Shuidi" 1605 - ], 1606 - "services": { 1607 - "00006000-0000-1000-8000-00805f9b34fb": { 1608 - "tx": "00006001-0000-1000-8000-00805f9b34fb", 1609 - "txmode": "00006002-0000-1000-8000-00805f9b34fb" 1610 - } 1611 - } 1612 - }, 1613 1617 "defaults": { 1614 1618 "name": "Libo Elle Device", 1615 1619 "features": [ ··· 1640 1644 ], 1641 1645 "name": "Libo Elle 2" 1642 1646 } 1647 + ], 1648 + "communication": [ 1649 + { 1650 + "btle": { 1651 + "names": [ 1652 + "PiPiJing", 1653 + "Shuidi" 1654 + ], 1655 + "services": { 1656 + "00006000-0000-1000-8000-00805f9b34fb": { 1657 + "tx": "00006001-0000-1000-8000-00805f9b34fb", 1658 + "txmode": "00006002-0000-1000-8000-00805f9b34fb" 1659 + } 1660 + } 1661 + } 1662 + } 1643 1663 ] 1644 1664 }, 1645 1665 "libo-shark": { 1646 - "btle": { 1647 - "names": [ 1648 - "ShaYu" 1649 - ], 1650 - "services": { 1651 - "00006000-0000-1000-8000-00805f9b34fb": { 1652 - "tx": "00006001-0000-1000-8000-00805f9b34fb", 1653 - "txmode": "00006002-0000-1000-8000-00805f9b34fb" 1654 - } 1655 - } 1656 - }, 1657 1666 "defaults": { 1658 1667 "name": "Libo Shark", 1659 1668 "features": [ ··· 1682 1691 } 1683 1692 } 1684 1693 ] 1685 - } 1694 + }, 1695 + "communication": [ 1696 + { 1697 + "btle": { 1698 + "names": [ 1699 + "ShaYu" 1700 + ], 1701 + "services": { 1702 + "00006000-0000-1000-8000-00805f9b34fb": { 1703 + "tx": "00006001-0000-1000-8000-00805f9b34fb", 1704 + "txmode": "00006002-0000-1000-8000-00805f9b34fb" 1705 + } 1706 + } 1707 + } 1708 + } 1709 + ] 1686 1710 }, 1687 1711 "libo-karen": { 1688 - "btle": { 1689 - "names": [ 1690 - "SuoYinQiu" 1691 - ], 1692 - "services": { 1693 - "00006000-0000-1000-8000-00805f9b34fb": { 1694 - "tx": "00006001-0000-1000-8000-00805f9b34fb", 1695 - "txmode": "00006002-0000-1000-8000-00805f9b34fb" 1696 - }, 1697 - "00006050-0000-1000-8000-00805f9b34fb": { 1698 - "rxpressure": "00006051-0000-1000-8000-00805f9b34fb" 1699 - } 1700 - } 1701 - }, 1702 1712 "defaults": { 1703 1713 "name": "Libo Karen", 1704 1714 "features": [] 1705 - } 1706 - }, 1707 - "libo-vibes": { 1708 - "btle": { 1709 - "names": [ 1710 - "XiaoLu", 1711 - "LuXiaoHan", 1712 - "BaiHu", 1713 - "Gugudai", 1714 - "Yuyi", 1715 - "LuWuShuang", 1716 - "LiBo", 1717 - "QingTing", 1718 - "Huohu", 1719 - "Yuyi", 1720 - "Haima" 1721 - ], 1722 - "services": { 1723 - "00006000-0000-1000-8000-00805f9b34fb": { 1724 - "tx": "00006001-0000-1000-8000-00805f9b34fb", 1725 - "txmode": "00006002-0000-1000-8000-00805f9b34fb" 1715 + }, 1716 + "communication": [ 1717 + { 1718 + "btle": { 1719 + "names": [ 1720 + "SuoYinQiu" 1721 + ], 1722 + "services": { 1723 + "00006000-0000-1000-8000-00805f9b34fb": { 1724 + "tx": "00006001-0000-1000-8000-00805f9b34fb", 1725 + "txmode": "00006002-0000-1000-8000-00805f9b34fb" 1726 + }, 1727 + "00006050-0000-1000-8000-00805f9b34fb": { 1728 + "rxpressure": "00006051-0000-1000-8000-00805f9b34fb" 1729 + } 1730 + } 1726 1731 } 1727 1732 } 1728 - }, 1733 + ] 1734 + }, 1735 + "libo-vibes": { 1729 1736 "defaults": { 1730 1737 "name": "Libo Vibes Device", 1731 1738 "features": [ ··· 1902 1909 } 1903 1910 ] 1904 1911 } 1912 + ], 1913 + "communication": [ 1914 + { 1915 + "btle": { 1916 + "names": [ 1917 + "XiaoLu", 1918 + "LuXiaoHan", 1919 + "BaiHu", 1920 + "Gugudai", 1921 + "Yuyi", 1922 + "LuWuShuang", 1923 + "LiBo", 1924 + "QingTing", 1925 + "Huohu", 1926 + "Yuyi", 1927 + "Haima" 1928 + ], 1929 + "services": { 1930 + "00006000-0000-1000-8000-00805f9b34fb": { 1931 + "tx": "00006001-0000-1000-8000-00805f9b34fb", 1932 + "txmode": "00006002-0000-1000-8000-00805f9b34fb" 1933 + } 1934 + } 1935 + } 1936 + } 1905 1937 ] 1906 1938 }, 1907 1939 "magic-motion-1": { 1908 - "btle": { 1909 - "names": [ 1910 - "Smart Mini Vibe*", 1911 - "Flamingo", 1912 - "Flamingo T", 1913 - "Smart Bean", 1914 - "Smart Bean3", 1915 - "Magic Cell", 1916 - "Magic Wand", 1917 - "Fugu", 1918 - "Fugu2", 1919 - "Gballs2", 1920 - "GBalls3", 1921 - "FM-LILAC-101", 1922 - "Xone", 1923 - "CBT002" 1924 - ], 1925 - "services": { 1926 - "78667579-7b48-43db-b8c5-7928a6b0a335": { 1927 - "tx": "78667579-a914-49a4-8333-aa3c0cd8fedc" 1928 - }, 1929 - "0000180f-0000-1000-8000-00805f9b34fb": { 1930 - "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 1931 - } 1932 - } 1933 - }, 1934 1940 "defaults": { 1935 1941 "name": "Magic Motion V1 Device", 1936 1942 "features": [ ··· 2080 2086 ], 2081 2087 "name": "FunTown Caleo" 2082 2088 } 2089 + ], 2090 + "communication": [ 2091 + { 2092 + "btle": { 2093 + "names": [ 2094 + "Smart Mini Vibe*", 2095 + "Flamingo", 2096 + "Flamingo T", 2097 + "Smart Bean", 2098 + "Smart Bean3", 2099 + "Magic Cell", 2100 + "Magic Wand", 2101 + "Fugu", 2102 + "Fugu2", 2103 + "Gballs2", 2104 + "GBalls3", 2105 + "FM-LILAC-101", 2106 + "Xone", 2107 + "CBT002" 2108 + ], 2109 + "services": { 2110 + "78667579-7b48-43db-b8c5-7928a6b0a335": { 2111 + "tx": "78667579-a914-49a4-8333-aa3c0cd8fedc" 2112 + }, 2113 + "0000180f-0000-1000-8000-00805f9b34fb": { 2114 + "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 2115 + } 2116 + } 2117 + } 2118 + } 2083 2119 ] 2084 2120 }, 2085 2121 "magic-motion-2": { 2086 - "btle": { 2087 - "names": [ 2088 - "Eidolon", 2089 - "Lipstick", 2090 - "Sword", 2091 - "Curve", 2092 - "Solstice X", 2093 - "funwand", 2094 - "CBT001" 2095 - ], 2096 - "services": { 2097 - "78667579-7b48-43db-b8c5-7928a6b0a335": { 2098 - "tx": "78667579-a914-49a4-8333-aa3c0cd8fedc" 2099 - }, 2100 - "0000180f-0000-1000-8000-00805f9b34fb": { 2101 - "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 2102 - } 2103 - } 2104 - }, 2105 2122 "defaults": { 2106 2123 "name": "Magic Motion V2 Device", 2107 2124 "features": [ ··· 2300 2317 } 2301 2318 ] 2302 2319 } 2320 + ], 2321 + "communication": [ 2322 + { 2323 + "btle": { 2324 + "names": [ 2325 + "Eidolon", 2326 + "Lipstick", 2327 + "Sword", 2328 + "Curve", 2329 + "Solstice X", 2330 + "funwand", 2331 + "CBT001" 2332 + ], 2333 + "services": { 2334 + "78667579-7b48-43db-b8c5-7928a6b0a335": { 2335 + "tx": "78667579-a914-49a4-8333-aa3c0cd8fedc" 2336 + }, 2337 + "0000180f-0000-1000-8000-00805f9b34fb": { 2338 + "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 2339 + } 2340 + } 2341 + } 2342 + } 2303 2343 ] 2304 2344 }, 2305 2345 "magic-motion-3": { 2306 - "btle": { 2307 - "names": [ 2308 - "Krush" 2309 - ], 2310 - "services": { 2311 - "78667579-7b48-43db-b8c5-7928a6b0a335": { 2312 - "tx": "78667579-a914-49a4-8333-aa3c0cd8fedc" 2313 - }, 2314 - "0000180f-0000-1000-8000-00805f9b34fb": { 2315 - "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 2316 - } 2317 - } 2318 - }, 2319 2346 "defaults": { 2320 2347 "name": "LoveLife Krush", 2321 2348 "features": [ ··· 2347 2374 } 2348 2375 } 2349 2376 ] 2350 - } 2377 + }, 2378 + "communication": [ 2379 + { 2380 + "btle": { 2381 + "names": [ 2382 + "Krush" 2383 + ], 2384 + "services": { 2385 + "78667579-7b48-43db-b8c5-7928a6b0a335": { 2386 + "tx": "78667579-a914-49a4-8333-aa3c0cd8fedc" 2387 + }, 2388 + "0000180f-0000-1000-8000-00805f9b34fb": { 2389 + "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 2390 + } 2391 + } 2392 + } 2393 + } 2394 + ] 2351 2395 }, 2352 2396 "magic-motion-4": { 2353 - "btle": { 2354 - "names": [ 2355 - "funone", 2356 - "Magic Sundi", 2357 - "Kegel Coach", 2358 - "Magic Lotos", 2359 - "nyx", 2360 - "umi", 2361 - "funkegel", 2362 - "bobi2" 2363 - ], 2364 - "services": { 2365 - "78667579-7b48-43db-b8c5-7928a6b0a335": { 2366 - "tx": "78667579-a914-49a4-8333-aa3c0cd8fedc" 2367 - }, 2368 - "0000180f-0000-1000-8000-00805f9b34fb": { 2369 - "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 2370 - } 2371 - } 2372 - }, 2373 2397 "defaults": { 2374 2398 "name": "Magic Motion V4 Device", 2375 2399 "features": [ ··· 2533 2557 } 2534 2558 ] 2535 2559 } 2560 + ], 2561 + "communication": [ 2562 + { 2563 + "btle": { 2564 + "names": [ 2565 + "funone", 2566 + "Magic Sundi", 2567 + "Kegel Coach", 2568 + "Magic Lotos", 2569 + "nyx", 2570 + "umi", 2571 + "funkegel", 2572 + "bobi2" 2573 + ], 2574 + "services": { 2575 + "78667579-7b48-43db-b8c5-7928a6b0a335": { 2576 + "tx": "78667579-a914-49a4-8333-aa3c0cd8fedc" 2577 + }, 2578 + "0000180f-0000-1000-8000-00805f9b34fb": { 2579 + "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 2580 + } 2581 + } 2582 + } 2583 + } 2536 2584 ] 2537 2585 }, 2538 2586 "mysteryvibe": { 2539 - "btle": { 2540 - "names": [ 2541 - "MV Crescendo", 2542 - "MV Tenuto ", 2543 - "MV Poco " 2544 - ], 2545 - "services": { 2546 - "f0006900-110c-478b-b74b-6f403b364a9c": { 2547 - "txmode": "f0006901-110c-478b-b74b-6f403b364a9c", 2548 - "txvibrate": "f0006903-110c-478b-b74b-6f403b364a9c" 2549 - } 2550 - } 2551 - }, 2552 2587 "defaults": { 2553 2588 "name": "Mysteryvibe Device", 2554 2589 "features": [ ··· 2671 2706 } 2672 2707 ] 2673 2708 } 2709 + ], 2710 + "communication": [ 2711 + { 2712 + "btle": { 2713 + "names": [ 2714 + "MV Crescendo", 2715 + "MV Tenuto ", 2716 + "MV Poco " 2717 + ], 2718 + "services": { 2719 + "f0006900-110c-478b-b74b-6f403b364a9c": { 2720 + "txmode": "f0006901-110c-478b-b74b-6f403b364a9c", 2721 + "txvibrate": "f0006903-110c-478b-b74b-6f403b364a9c" 2722 + } 2723 + } 2724 + } 2725 + } 2674 2726 ] 2675 2727 }, 2676 2728 "mysteryvibe-v2": { 2677 - "btle": { 2678 - "names": [ 2679 - "6907 MV1", 2680 - "6908 MV1", 2681 - "6909 MV1", 2682 - "6914 MV1", 2683 - "6915 MV1" 2684 - ], 2685 - "services": { 2686 - "f0006900-110c-478b-b74b-6f403b364a9c": { 2687 - "txmode": "f0006901-110c-478b-b74b-6f403b364a9c", 2688 - "txvibrate": "f0006903-110c-478b-b74b-6f403b364a9c" 2689 - } 2690 - } 2691 - }, 2692 2729 "defaults": { 2693 2730 "name": "Mysteryvibe V2 Device", 2694 2731 "features": [ ··· 2949 2986 } 2950 2987 ] 2951 2988 } 2989 + ], 2990 + "communication": [ 2991 + { 2992 + "btle": { 2993 + "names": [ 2994 + "6907 MV1", 2995 + "6908 MV1", 2996 + "6909 MV1", 2997 + "6914 MV1", 2998 + "6915 MV1" 2999 + ], 3000 + "services": { 3001 + "f0006900-110c-478b-b74b-6f403b364a9c": { 3002 + "txmode": "f0006901-110c-478b-b74b-6f403b364a9c", 3003 + "txvibrate": "f0006903-110c-478b-b74b-6f403b364a9c" 3004 + } 3005 + } 3006 + } 3007 + } 2952 3008 ] 2953 3009 }, 2954 3010 "picobong": { 2955 - "btle": { 2956 - "names": [ 2957 - "Blow hole", 2958 - "Picobong Male Toy", 2959 - "Diver", 2960 - "Picobong Egg", 2961 - "Life guard", 2962 - "Picobong Ring", 2963 - "Surfer", 2964 - "Picobong Butt Plug", 2965 - "Egg driver", 2966 - "Surfer_plug" 2967 - ], 2968 - "services": { 2969 - "0000fff0-0000-1000-8000-00805f9b34fb": { 2970 - "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 2971 - } 2972 - } 2973 - }, 2974 3011 "defaults": { 2975 3012 "name": "Picobong Device", 2976 3013 "features": [ ··· 3019 3056 ], 3020 3057 "name": "Picobong Surfer" 3021 3058 } 3059 + ], 3060 + "communication": [ 3061 + { 3062 + "btle": { 3063 + "names": [ 3064 + "Blow hole", 3065 + "Picobong Male Toy", 3066 + "Diver", 3067 + "Picobong Egg", 3068 + "Life guard", 3069 + "Picobong Ring", 3070 + "Surfer", 3071 + "Picobong Butt Plug", 3072 + "Egg driver", 3073 + "Surfer_plug" 3074 + ], 3075 + "services": { 3076 + "0000fff0-0000-1000-8000-00805f9b34fb": { 3077 + "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 3078 + } 3079 + } 3080 + } 3081 + } 3022 3082 ] 3023 3083 }, 3024 3084 "vibratissimo": { 3025 - "btle": { 3026 - "names": [ 3027 - "Vibratissimo" 3028 - ], 3029 - "services": { 3030 - "00001523-1212-efde-1523-785feabcd123": { 3031 - "txmode": "00001524-1212-efde-1523-785feabcd123", 3032 - "txvibrate": "00001526-1212-efde-1523-785feabcd123", 3033 - "rx": "00001527-1212-efde-1523-785feabcd123" 3034 - }, 3035 - "0000180a-0000-1000-8000-00805f9b34fb": { 3036 - "rxblemodel": "00002a24-0000-1000-8000-00805f9b34fb" 3037 - }, 3038 - "0000180f-0000-1000-8000-00805f9b34fb": { 3039 - "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 3040 - } 3041 - } 3042 - }, 3043 3085 "defaults": { 3044 3086 "name": "Vibratissimo Device", 3045 3087 "features": [ ··· 3181 3223 } 3182 3224 ] 3183 3225 } 3226 + ], 3227 + "communication": [ 3228 + { 3229 + "btle": { 3230 + "names": [ 3231 + "Vibratissimo" 3232 + ], 3233 + "services": { 3234 + "00001523-1212-efde-1523-785feabcd123": { 3235 + "txmode": "00001524-1212-efde-1523-785feabcd123", 3236 + "txvibrate": "00001526-1212-efde-1523-785feabcd123", 3237 + "rx": "00001527-1212-efde-1523-785feabcd123" 3238 + }, 3239 + "0000180a-0000-1000-8000-00805f9b34fb": { 3240 + "rxblemodel": "00002a24-0000-1000-8000-00805f9b34fb" 3241 + }, 3242 + "0000180f-0000-1000-8000-00805f9b34fb": { 3243 + "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 3244 + } 3245 + } 3246 + } 3247 + } 3184 3248 ] 3185 3249 }, 3186 3250 "wevibe": { 3187 - "btle": { 3188 - "names": [ 3189 - "Cougar", 3190 - "4 Plus", 3191 - "4_Plus", 3192 - "4plus", 3193 - "Bloom", 3194 - "classic", 3195 - "Classic", 3196 - "Ditto", 3197 - "Gala", 3198 - "Jive", 3199 - "Nova", 3200 - "Pivot", 3201 - "Rave", 3202 - "Sync", 3203 - "Verge", 3204 - "Wish" 3205 - ], 3206 - "services": { 3207 - "f000bb03-0451-4000-b000-000000000000": { 3208 - "tx": "f000c000-0451-4000-b000-000000000000", 3209 - "rx": "f000b000-0451-4000-b000-000000000000" 3210 - } 3211 - } 3212 - }, 3213 3251 "defaults": { 3214 3252 "name": "WeVibe Device", 3215 3253 "features": [ ··· 3403 3441 } 3404 3442 ] 3405 3443 } 3444 + ], 3445 + "communication": [ 3446 + { 3447 + "btle": { 3448 + "names": [ 3449 + "Cougar", 3450 + "4 Plus", 3451 + "4_Plus", 3452 + "4plus", 3453 + "Bloom", 3454 + "classic", 3455 + "Classic", 3456 + "Ditto", 3457 + "Gala", 3458 + "Jive", 3459 + "Nova", 3460 + "Pivot", 3461 + "Rave", 3462 + "Sync", 3463 + "Verge", 3464 + "Wish" 3465 + ], 3466 + "services": { 3467 + "f000bb03-0451-4000-b000-000000000000": { 3468 + "tx": "f000c000-0451-4000-b000-000000000000", 3469 + "rx": "f000b000-0451-4000-b000-000000000000" 3470 + } 3471 + } 3472 + } 3473 + } 3406 3474 ] 3407 3475 }, 3408 3476 "wevibe-8bit": { 3409 - "btle": { 3410 - "names": [ 3411 - "Melt", 3412 - "Moxie", 3413 - "Vector", 3414 - "Wand", 3415 - "Bond", 3416 - "Nelson", 3417 - "Nova2", 3418 - "Nova_2", 3419 - "Nova 2" 3420 - ], 3421 - "services": { 3422 - "f000bb03-0451-4000-b000-000000000000": { 3423 - "tx": "f000c000-0451-4000-b000-000000000000", 3424 - "rx": "f000b000-0451-4000-b000-000000000000" 3425 - } 3426 - } 3427 - }, 3428 3477 "defaults": { 3429 3478 "name": "WeVibe 8-bit Device", 3430 3479 "features": [ ··· 3576 3625 } 3577 3626 ] 3578 3627 } 3628 + ], 3629 + "communication": [ 3630 + { 3631 + "btle": { 3632 + "names": [ 3633 + "Melt", 3634 + "Moxie", 3635 + "Vector", 3636 + "Wand", 3637 + "Bond", 3638 + "Nelson", 3639 + "Nova2", 3640 + "Nova_2", 3641 + "Nova 2" 3642 + ], 3643 + "services": { 3644 + "f000bb03-0451-4000-b000-000000000000": { 3645 + "tx": "f000c000-0451-4000-b000-000000000000", 3646 + "rx": "f000b000-0451-4000-b000-000000000000" 3647 + } 3648 + } 3649 + } 3650 + } 3579 3651 ] 3580 3652 }, 3581 3653 "wevibe-legacy": { 3582 - "btle": { 3583 - "names": [ 3584 - "Reina", 3585 - "imassager", 3586 - "Interactive Massager", 3587 - "03" 3588 - ], 3589 - "services": { 3590 - "f000bb03-0451-4000-b000-000000000000": { 3591 - "tx": "f000c000-0451-4000-b000-000000000000", 3592 - "rx": "f000b000-0451-4000-b000-000000000000" 3593 - } 3594 - } 3595 - }, 3596 3654 "defaults": { 3597 3655 "name": "WeVibe Realm Reina", 3598 3656 "features": [] 3599 - } 3657 + }, 3658 + "communication": [ 3659 + { 3660 + "btle": { 3661 + "names": [ 3662 + "Reina", 3663 + "imassager", 3664 + "Interactive Massager", 3665 + "03" 3666 + ], 3667 + "services": { 3668 + "f000bb03-0451-4000-b000-000000000000": { 3669 + "tx": "f000c000-0451-4000-b000-000000000000", 3670 + "rx": "f000b000-0451-4000-b000-000000000000" 3671 + } 3672 + } 3673 + } 3674 + } 3675 + ] 3600 3676 }, 3601 3677 "wevibe-chorus": { 3602 - "btle": { 3603 - "names": [ 3604 - "Chorus", 3605 - "skeena", 3606 - "Sync 2", 3607 - "Sync Lite" 3608 - ], 3609 - "services": { 3610 - "f000bb03-0451-4000-b000-000000000000": { 3611 - "tx": "f000c000-0451-4000-b000-000000000000", 3612 - "rx": "f000b000-0451-4000-b000-000000000000" 3613 - } 3614 - } 3615 - }, 3616 3678 "defaults": { 3617 3679 "name": "WeVibe Chorus", 3618 3680 "features": [ ··· 3695 3757 } 3696 3758 ] 3697 3759 } 3760 + ], 3761 + "communication": [ 3762 + { 3763 + "btle": { 3764 + "names": [ 3765 + "Chorus", 3766 + "skeena", 3767 + "Sync 2", 3768 + "Sync Lite" 3769 + ], 3770 + "services": { 3771 + "f000bb03-0451-4000-b000-000000000000": { 3772 + "tx": "f000c000-0451-4000-b000-000000000000", 3773 + "rx": "f000b000-0451-4000-b000-000000000000" 3774 + } 3775 + } 3776 + } 3777 + } 3698 3778 ] 3699 3779 }, 3700 3780 "youcups": { 3701 - "btle": { 3702 - "names": [ 3703 - "Youcups" 3704 - ], 3705 - "services": { 3706 - "0000fee9-0000-1000-8000-00805f9b34fb": { 3707 - "tx": "d44bc439-abfd-45a2-b575-925416129600" 3708 - } 3709 - } 3710 - }, 3711 3781 "defaults": { 3712 3782 "name": "Youcups Warrior II", 3713 3783 "features": [ ··· 3724 3794 } 3725 3795 } 3726 3796 ] 3727 - } 3797 + }, 3798 + "communication": [ 3799 + { 3800 + "btle": { 3801 + "names": [ 3802 + "Youcups" 3803 + ], 3804 + "services": { 3805 + "0000fee9-0000-1000-8000-00805f9b34fb": { 3806 + "tx": "d44bc439-abfd-45a2-b575-925416129600" 3807 + } 3808 + } 3809 + } 3810 + } 3811 + ] 3728 3812 }, 3729 3813 "cueme": { 3730 - "btle": { 3731 - "names": [ 3732 - "FUNCODE_*" 3733 - ], 3734 - "services": { 3735 - "0000fff0-0000-1000-8000-00805f9b34fb": { 3736 - "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 3737 - } 3738 - } 3739 - }, 3740 3814 "defaults": { 3741 3815 "name": "Cueme Device", 3742 3816 "features": [ ··· 3907 3981 } 3908 3982 ] 3909 3983 } 3984 + ], 3985 + "communication": [ 3986 + { 3987 + "btle": { 3988 + "names": [ 3989 + "FUNCODE_*" 3990 + ], 3991 + "services": { 3992 + "0000fff0-0000-1000-8000-00805f9b34fb": { 3993 + "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 3994 + } 3995 + } 3996 + } 3997 + } 3910 3998 ] 3911 3999 }, 3912 4000 "kiiroo-v2-vibrator": { 3913 - "btle": { 3914 - "names": [ 3915 - "Pearl2", 3916 - "Pearl2+", 3917 - "Fuse", 3918 - "Virtual Blowbot", 3919 - "Titan", 3920 - "Virtual Rabbit" 3921 - ], 3922 - "services": { 3923 - "88f82580-0000-01e6-aace-0002a5d5c51b": { 3924 - "tx": "88f82581-0000-01e6-aace-0002a5d5c51b", 3925 - "rxtouch": "88f82582-0000-01e6-aace-0002a5d5c51b", 3926 - "rxaccel": "88f82584-0000-01e6-aace-0002a5d5c51b" 3927 - } 3928 - } 3929 - }, 3930 4001 "defaults": { 3931 4002 "name": "Kiiroo V2 Vibrator Device", 3932 4003 "features": [ ··· 4149 4220 } 4150 4221 ] 4151 4222 } 4223 + ], 4224 + "communication": [ 4225 + { 4226 + "btle": { 4227 + "names": [ 4228 + "Pearl2", 4229 + "Pearl2+", 4230 + "Fuse", 4231 + "Virtual Blowbot", 4232 + "Titan", 4233 + "Virtual Rabbit" 4234 + ], 4235 + "services": { 4236 + "88f82580-0000-01e6-aace-0002a5d5c51b": { 4237 + "tx": "88f82581-0000-01e6-aace-0002a5d5c51b", 4238 + "rxtouch": "88f82582-0000-01e6-aace-0002a5d5c51b", 4239 + "rxaccel": "88f82584-0000-01e6-aace-0002a5d5c51b" 4240 + } 4241 + } 4242 + } 4243 + } 4152 4244 ] 4153 4245 }, 4154 4246 "kiiroo-v21": { 4155 - "btle": { 4156 - "names": [ 4157 - "Titan1.1", 4158 - "Cliona", 4159 - "Pearl2.1", 4160 - "OhMiBod 4.0", 4161 - "OhMiBod LUMEN", 4162 - "OhMiBod NEX3", 4163 - "OhMiBod ESCA", 4164 - "OhMiBod Foxy", 4165 - "OhMiBod Chill Panty Vibe", 4166 - "OhMiBod Sphinx", 4167 - "Pulse Interactive", 4168 - "Fuse1.1" 4169 - ], 4170 - "services": { 4171 - "00001900-0000-1000-8000-00805f9b34fb": { 4172 - "whitelist": "00001901-0000-1000-8000-00805f9b34fb", 4173 - "tx": "00001902-0000-1000-8000-00805f9b34fb", 4174 - "rx": "00001903-0000-1000-8000-00805f9b34fb" 4175 - }, 4176 - "a0d70001-4c16-4ba7-977a-d394920e13a3": { 4177 - "tx": "a0d70002-4c16-4ba7-977a-d394920e13a3", 4178 - "rx": "a0d70003-4c16-4ba7-977a-d394920e13a3" 4179 - } 4180 - } 4181 - }, 4182 4247 "defaults": { 4183 4248 "name": "Kiiroo V2.1 Device", 4184 4249 "features": [] ··· 4432 4497 } 4433 4498 ] 4434 4499 } 4500 + ], 4501 + "communication": [ 4502 + { 4503 + "btle": { 4504 + "names": [ 4505 + "Titan1.1", 4506 + "Cliona", 4507 + "Pearl2.1", 4508 + "OhMiBod 4.0", 4509 + "OhMiBod LUMEN", 4510 + "OhMiBod NEX3", 4511 + "OhMiBod ESCA", 4512 + "OhMiBod Foxy", 4513 + "OhMiBod Chill Panty Vibe", 4514 + "OhMiBod Sphinx", 4515 + "Pulse Interactive", 4516 + "Fuse1.1" 4517 + ], 4518 + "services": { 4519 + "00001900-0000-1000-8000-00805f9b34fb": { 4520 + "whitelist": "00001901-0000-1000-8000-00805f9b34fb", 4521 + "tx": "00001902-0000-1000-8000-00805f9b34fb", 4522 + "rx": "00001903-0000-1000-8000-00805f9b34fb" 4523 + }, 4524 + "a0d70001-4c16-4ba7-977a-d394920e13a3": { 4525 + "tx": "a0d70002-4c16-4ba7-977a-d394920e13a3", 4526 + "rx": "a0d70003-4c16-4ba7-977a-d394920e13a3" 4527 + } 4528 + } 4529 + } 4530 + } 4435 4531 ] 4436 4532 }, 4437 4533 "kiiroo-v21-initialized": { 4438 - "btle": { 4439 - "names": [ 4440 - "Rey", 4441 - "We-Vibe Rocketman", 4442 - "Realm1.1", 4443 - "Onyx2.1", 4444 - "Onyx+", 4445 - "KEON", 4446 - "Keon R2" 4447 - ], 4448 - "services": { 4449 - "00001900-0000-1000-8000-00805f9b34fb": { 4450 - "whitelist": "00001901-0000-1000-8000-00805f9b34fb", 4451 - "tx": "00001902-0000-1000-8000-00805f9b34fb", 4452 - "rx": "00001903-0000-1000-8000-00805f9b34fb" 4453 - } 4454 - } 4455 - }, 4456 4534 "defaults": { 4457 4535 "name": "Kiiroo V2.1 Initialized Device", 4458 4536 "features": [] ··· 4541 4619 } 4542 4620 ] 4543 4621 } 4622 + ], 4623 + "communication": [ 4624 + { 4625 + "btle": { 4626 + "names": [ 4627 + "Rey", 4628 + "We-Vibe Rocketman", 4629 + "Realm1.1", 4630 + "Onyx2.1", 4631 + "Onyx+", 4632 + "KEON", 4633 + "Keon R2" 4634 + ], 4635 + "services": { 4636 + "00001900-0000-1000-8000-00805f9b34fb": { 4637 + "whitelist": "00001901-0000-1000-8000-00805f9b34fb", 4638 + "tx": "00001902-0000-1000-8000-00805f9b34fb", 4639 + "rx": "00001903-0000-1000-8000-00805f9b34fb" 4640 + } 4641 + } 4642 + } 4643 + } 4544 4644 ] 4545 4645 }, 4546 4646 "vorze-cyclone-x": { 4547 - "hid": [ 4548 - { 4549 - "vendor-id": 1155, 4550 - "product-id": 22352 4551 - } 4552 - ], 4553 4647 "defaults": { 4554 4648 "name": "Vorze Cyclone X10 Device", 4555 4649 "features": [ ··· 4566 4660 } 4567 4661 } 4568 4662 ] 4569 - } 4570 - }, 4571 - "rez-trancevibrator": { 4572 - "usb": [ 4663 + }, 4664 + "communication": [ 4573 4665 { 4574 - "vendor-id": 2889, 4575 - "product-id": 1615 4666 + "hid": { 4667 + "pairs": [ 4668 + { 4669 + "vendor-id": 1155, 4670 + "product-id": 22352 4671 + } 4672 + ] 4673 + } 4576 4674 } 4577 - ], 4675 + ] 4676 + }, 4677 + "rez-trancevibrator": { 4578 4678 "defaults": { 4579 4679 "name": "Rez TranceVibrator", 4580 4680 "features": [ ··· 4591 4691 } 4592 4692 } 4593 4693 ] 4594 - } 4595 - }, 4596 - "kiiroo-v1": { 4597 - "btle": { 4598 - "names": [ 4599 - "ONYX", 4600 - "PEARL" 4601 - ], 4602 - "services": { 4603 - "49535343-fe7d-4ae5-8fa9-9fafd205e455": { 4604 - "rx": "49535343-1e4d-4bd9-ba61-23c647249616", 4605 - "tx": "49535343-8841-43f4-a8d4-ecbe34729bb3", 4606 - "command": "49535343-aca3-481c-91ec-d85e28a60318" 4694 + }, 4695 + "communication": [ 4696 + { 4697 + "usb": { 4698 + "pairs": [ 4699 + { 4700 + "vendor-id": 2889, 4701 + "product-id": 1615 4702 + } 4703 + ] 4607 4704 } 4608 4705 } 4609 - }, 4706 + ] 4707 + }, 4708 + "kiiroo-v1": { 4610 4709 "defaults": { 4611 4710 "name": "Kiiroo V1 Device", 4612 4711 "features": [] ··· 4652 4751 } 4653 4752 ] 4654 4753 } 4754 + ], 4755 + "communication": [ 4756 + { 4757 + "btle": { 4758 + "names": [ 4759 + "ONYX", 4760 + "PEARL" 4761 + ], 4762 + "services": { 4763 + "49535343-fe7d-4ae5-8fa9-9fafd205e455": { 4764 + "rx": "49535343-1e4d-4bd9-ba61-23c647249616", 4765 + "tx": "49535343-8841-43f4-a8d4-ecbe34729bb3", 4766 + "command": "49535343-aca3-481c-91ec-d85e28a60318" 4767 + } 4768 + } 4769 + } 4770 + } 4655 4771 ] 4656 4772 }, 4657 4773 "vorze-sa": { 4658 - "btle": { 4659 - "names": [ 4660 - "Bach smart", 4661 - "CycSA", 4662 - "UFOSA", 4663 - "UFO-TW", 4664 - "VorzePiston", 4665 - "ROCKET" 4666 - ], 4667 - "services": { 4668 - "40ee1111-63ec-4b7f-8ce7-712efd55b90e": { 4669 - "tx": "40ee2222-63ec-4b7f-8ce7-712efd55b90e" 4670 - } 4671 - } 4672 - }, 4673 4774 "defaults": { 4674 4775 "name": "Vorze Device", 4675 4776 "features": [] ··· 4807 4908 } 4808 4909 ] 4809 4910 } 4911 + ], 4912 + "communication": [ 4913 + { 4914 + "btle": { 4915 + "names": [ 4916 + "Bach smart", 4917 + "CycSA", 4918 + "UFOSA", 4919 + "UFO-TW", 4920 + "VorzePiston", 4921 + "ROCKET" 4922 + ], 4923 + "services": { 4924 + "40ee1111-63ec-4b7f-8ce7-712efd55b90e": { 4925 + "tx": "40ee2222-63ec-4b7f-8ce7-712efd55b90e" 4926 + } 4927 + } 4928 + } 4929 + } 4810 4930 ] 4811 4931 }, 4812 4932 "youou": { 4813 - "btle": { 4814 - "names": [ 4815 - "VX001_*" 4816 - ], 4817 - "services": { 4818 - "0000fff0-0000-1000-8000-00805f9b34fb": { 4819 - "tx": "0000fff6-0000-1000-8000-00805f9b34fb" 4820 - } 4821 - } 4822 - }, 4823 4933 "defaults": { 4824 4934 "name": "Youou Wand Vibrator", 4825 4935 "features": [ ··· 4836 4946 } 4837 4947 } 4838 4948 ] 4839 - } 4949 + }, 4950 + "communication": [ 4951 + { 4952 + "btle": { 4953 + "names": [ 4954 + "VX001_*" 4955 + ], 4956 + "services": { 4957 + "0000fff0-0000-1000-8000-00805f9b34fb": { 4958 + "tx": "0000fff6-0000-1000-8000-00805f9b34fb" 4959 + } 4960 + } 4961 + } 4962 + } 4963 + ] 4840 4964 }, 4841 4965 "realtouch": { 4842 - "hid": [ 4843 - { 4844 - "vendor-id": 8020, 4845 - "product-id": 1 4846 - } 4847 - ], 4848 4966 "defaults": { 4849 4967 "name": "RealTouch", 4850 4968 "features": [ ··· 4861 4979 } 4862 4980 } 4863 4981 ] 4864 - } 4865 - }, 4866 - "prettylove": { 4867 - "btle": { 4868 - "names": [ 4869 - "Aogu BLE *" 4870 - ], 4871 - "services": { 4872 - "0000ffe5-0000-1000-8000-00805f9b34fb": { 4873 - "tx": "0000ffe9-0000-1000-8000-00805f9b34fb", 4874 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 4982 + }, 4983 + "communication": [ 4984 + { 4985 + "hid": { 4986 + "pairs": [ 4987 + { 4988 + "vendor-id": 8020, 4989 + "product-id": 1 4990 + } 4991 + ] 4875 4992 } 4876 4993 } 4877 - }, 4994 + ] 4995 + }, 4996 + "prettylove": { 4878 4997 "defaults": { 4879 4998 "name": "Pretty Love Device", 4880 4999 "features": [ ··· 4891 5010 } 4892 5011 } 4893 5012 ] 4894 - } 5013 + }, 5014 + "communication": [ 5015 + { 5016 + "btle": { 5017 + "names": [ 5018 + "Aogu BLE *" 5019 + ], 5020 + "services": { 5021 + "0000ffe5-0000-1000-8000-00805f9b34fb": { 5022 + "tx": "0000ffe9-0000-1000-8000-00805f9b34fb", 5023 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5024 + } 5025 + } 5026 + } 5027 + } 5028 + ] 4895 5029 }, 4896 5030 "svakom": { 4897 - "btle": { 4898 - "names": [ 4899 - "Aogu SUV", 4900 - "Aogu SCB", 4901 - "Emma NEO", 4902 - "Phoenix NEO" 4903 - ], 4904 - "services": { 4905 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 4906 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 4907 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 4908 - } 4909 - } 4910 - }, 4911 5031 "defaults": { 4912 5032 "name": "Svakom Device", 4913 5033 "features": [ ··· 4944 5064 ], 4945 5065 "name": "Svakom Emma Neo" 4946 5066 } 5067 + ], 5068 + "communication": [ 5069 + { 5070 + "btle": { 5071 + "names": [ 5072 + "Aogu SUV", 5073 + "Aogu SCB", 5074 + "Emma NEO", 5075 + "Phoenix NEO" 5076 + ], 5077 + "services": { 5078 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5079 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5080 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5081 + } 5082 + } 5083 + } 5084 + } 4947 5085 ] 4948 5086 }, 4949 5087 "svakom-v2": { 4950 - "btle": { 4951 - "names": [ 4952 - "116", 4953 - "117", 4954 - "118", 4955 - "Viviana", 4956 - "Ella NEO", 4957 - "S38A", 4958 - "Vick NEO", 4959 - "Vick Neo", 4960 - "STG05A", 4961 - "QH-SJ007A" 4962 - ], 4963 - "services": { 4964 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 4965 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 4966 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 4967 - } 4968 - } 4969 - }, 4970 5088 "defaults": { 4971 5089 "name": "Svakom Device v2", 4972 5090 "features": [ ··· 5040 5158 ], 5041 5159 "name": "Svakom Winni 2" 5042 5160 } 5161 + ], 5162 + "communication": [ 5163 + { 5164 + "btle": { 5165 + "names": [ 5166 + "116", 5167 + "117", 5168 + "118", 5169 + "Viviana", 5170 + "Ella NEO", 5171 + "S38A", 5172 + "Vick NEO", 5173 + "Vick Neo", 5174 + "STG05A", 5175 + "QH-SJ007A" 5176 + ], 5177 + "services": { 5178 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5179 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5180 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5181 + } 5182 + } 5183 + } 5184 + } 5043 5185 ] 5044 5186 }, 5045 5187 "svakom-v3": { 5046 - "btle": { 5047 - "names": [ 5048 - "Phoenix Neo 2", 5049 - "FK008A", 5050 - "Hannes NEO", 5051 - "QH-SX007E" 5052 - ], 5053 - "services": { 5054 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 5055 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5056 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5057 - } 5058 - } 5059 - }, 5060 5188 "defaults": { 5061 5189 "name": "Svakom Device v3", 5062 5190 "features": [ ··· 5153 5281 } 5154 5282 ] 5155 5283 } 5284 + ], 5285 + "communication": [ 5286 + { 5287 + "btle": { 5288 + "names": [ 5289 + "Phoenix Neo 2", 5290 + "FK008A", 5291 + "Hannes NEO", 5292 + "QH-SX007E" 5293 + ], 5294 + "services": { 5295 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5296 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5297 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5298 + } 5299 + } 5300 + } 5301 + } 5156 5302 ] 5157 5303 }, 5158 5304 "svakom-v4": { 5159 - "btle": { 5160 - "names": [ 5161 - "B2CM6", 5162 - "ERICA" 5163 - ], 5164 - "services": { 5165 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 5166 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5167 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5168 - } 5169 - } 5170 - }, 5171 5305 "defaults": { 5172 5306 "name": "Svakom Device v4", 5173 5307 "features": [ ··· 5210 5344 ], 5211 5345 "name": "Svakom Erica" 5212 5346 } 5347 + ], 5348 + "communication": [ 5349 + { 5350 + "btle": { 5351 + "names": [ 5352 + "B2CM6", 5353 + "ERICA" 5354 + ], 5355 + "services": { 5356 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5357 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5358 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5359 + } 5360 + } 5361 + } 5362 + } 5213 5363 ] 5214 5364 }, 5215 5365 "svakom-sam": { 5216 - "btle": { 5217 - "names": [ 5218 - "Sam Neo" 5219 - ], 5220 - "services": { 5221 - "0000ae00-0000-1000-8000-00805f9b34fb": { 5222 - "tx": "0000ae01-0000-1000-8000-00805f9b34fb", 5223 - "rx": "0000ae02-0000-1000-8000-00805f9b34fb", 5224 - "txmode": "0000ae10-0000-1000-8000-00805f9b34fb" 5225 - }, 5226 - "0000ffac-0000-1000-8000-00805f9b34fb": { 5227 - "firmware": "0000ffb4-0000-1000-8000-00805f9b34fb" 5228 - } 5229 - } 5230 - }, 5231 5366 "defaults": { 5232 5367 "name": "Svakom Sam Neo", 5233 5368 "features": [ ··· 5256 5391 } 5257 5392 } 5258 5393 ] 5259 - } 5394 + }, 5395 + "communication": [ 5396 + { 5397 + "btle": { 5398 + "names": [ 5399 + "Sam Neo" 5400 + ], 5401 + "services": { 5402 + "0000ae00-0000-1000-8000-00805f9b34fb": { 5403 + "tx": "0000ae01-0000-1000-8000-00805f9b34fb", 5404 + "rx": "0000ae02-0000-1000-8000-00805f9b34fb", 5405 + "txmode": "0000ae10-0000-1000-8000-00805f9b34fb" 5406 + }, 5407 + "0000ffac-0000-1000-8000-00805f9b34fb": { 5408 + "firmware": "0000ffb4-0000-1000-8000-00805f9b34fb" 5409 + } 5410 + } 5411 + } 5412 + } 5413 + ] 5260 5414 }, 5261 5415 "svakom-alex": { 5262 - "btle": { 5263 - "names": [ 5264 - "Alex NEO", 5265 - "S63E Alex NEO" 5266 - ], 5267 - "services": { 5268 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 5269 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 5270 - } 5271 - } 5272 - }, 5273 5416 "defaults": { 5274 5417 "name": "Svakom Alex Neo", 5275 5418 "features": [ ··· 5286 5429 } 5287 5430 } 5288 5431 ] 5289 - } 5290 - }, 5291 - "svakom-alex-v2": { 5292 - "btle": { 5293 - "names": [ 5294 - "Alex NEO 2" 5295 - ], 5296 - "services": { 5297 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 5298 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 5432 + }, 5433 + "communication": [ 5434 + { 5435 + "btle": { 5436 + "names": [ 5437 + "Alex NEO", 5438 + "S63E Alex NEO" 5439 + ], 5440 + "services": { 5441 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5442 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 5443 + } 5444 + } 5299 5445 } 5300 5446 } 5301 - }, 5447 + ] 5448 + }, 5449 + "svakom-alex-v2": { 5302 5450 "defaults": { 5303 5451 "name": "Svakom Alex Neo 2", 5304 5452 "features": [ ··· 5315 5463 } 5316 5464 } 5317 5465 ] 5318 - } 5466 + }, 5467 + "communication": [ 5468 + { 5469 + "btle": { 5470 + "names": [ 5471 + "Alex NEO 2" 5472 + ], 5473 + "services": { 5474 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5475 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 5476 + } 5477 + } 5478 + } 5479 + } 5480 + ] 5319 5481 }, 5320 5482 "svakom-dt250a": { 5321 - "btle": { 5322 - "names": [ 5323 - "DT250A" 5324 - ], 5325 - "services": { 5326 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 5327 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5328 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5329 - } 5330 - } 5331 - }, 5332 5483 "defaults": { 5333 5484 "name": "Coleur Dor DT250A", 5334 5485 "features": [ ··· 5369 5520 } 5370 5521 } 5371 5522 ] 5372 - } 5373 - }, 5374 - "svakom-iker": { 5375 - "btle": { 5376 - "names": [ 5377 - "Iker*" 5378 - ], 5379 - "manufacturer-data": [ 5380 - { 5381 - "company": 39, 5382 - "data": [ 5383 - 83, 5384 - 86, 5385 - 65, 5386 - 1, 5387 - 11, 5388 - 18, 5389 - 1, 5390 - 51, 5391 - 68, 5392 - 85, 5393 - 202, 5394 - 8 5395 - ] 5396 - } 5397 - ], 5398 - "services": { 5399 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 5400 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 5523 + }, 5524 + "communication": [ 5525 + { 5526 + "btle": { 5527 + "names": [ 5528 + "DT250A" 5529 + ], 5530 + "services": { 5531 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5532 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5533 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5534 + } 5535 + } 5401 5536 } 5402 5537 } 5403 - }, 5538 + ] 5539 + }, 5540 + "svakom-iker": { 5404 5541 "defaults": { 5405 5542 "name": "Svakom Iker", 5406 5543 "features": [ ··· 5429 5566 } 5430 5567 } 5431 5568 ] 5432 - } 5433 - }, 5434 - "svakom-pulse": { 5435 - "btle": { 5436 - "names": [ 5437 - "SWK-SX013A", 5438 - "Pulse Union", 5439 - "Pulse Galaxie", 5440 - "SX033APP", 5441 - "BX288A", 5442 - "QH-SX045A-B" 5443 - ], 5444 - "services": { 5445 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 5446 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5447 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5569 + }, 5570 + "communication": [ 5571 + { 5572 + "btle": { 5573 + "names": [ 5574 + "Iker*" 5575 + ], 5576 + "manufacturer-data": [ 5577 + { 5578 + "company": 39, 5579 + "data": [ 5580 + 83, 5581 + 86, 5582 + 65, 5583 + 1, 5584 + 11, 5585 + 18, 5586 + 1, 5587 + 51, 5588 + 68, 5589 + 85, 5590 + 202, 5591 + 8 5592 + ] 5593 + } 5594 + ], 5595 + "services": { 5596 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5597 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 5598 + } 5599 + } 5448 5600 } 5449 5601 } 5450 - }, 5602 + ] 5603 + }, 5604 + "svakom-pulse": { 5451 5605 "defaults": { 5452 5606 "name": "Svakom Pulse Device", 5453 5607 "features": [ ··· 5502 5656 ], 5503 5657 "name": "Coleur Dor VX045A" 5504 5658 } 5659 + ], 5660 + "communication": [ 5661 + { 5662 + "btle": { 5663 + "names": [ 5664 + "SWK-SX013A", 5665 + "Pulse Union", 5666 + "Pulse Galaxie", 5667 + "SX033APP", 5668 + "BX288A", 5669 + "QH-SX045A-B" 5670 + ], 5671 + "services": { 5672 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5673 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5674 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5675 + } 5676 + } 5677 + } 5678 + } 5505 5679 ] 5506 5680 }, 5507 5681 "svakom-suitcase": { 5508 - "btle": { 5509 - "names": [ 5510 - "VX357A-BLE-V1.0", 5511 - "VX236A-BLE-V1.0" 5512 - ], 5513 - "services": { 5514 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 5515 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5516 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5517 - } 5518 - } 5519 - }, 5520 5682 "defaults": { 5521 5683 "name": "Svakom Magic Suitcase", 5522 5684 "features": [ ··· 5553 5715 ], 5554 5716 "name": "Coleur Dor VX236A" 5555 5717 } 5718 + ], 5719 + "communication": [ 5720 + { 5721 + "btle": { 5722 + "names": [ 5723 + "VX357A-BLE-V1.0", 5724 + "VX236A-BLE-V1.0" 5725 + ], 5726 + "services": { 5727 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5728 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5729 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5730 + } 5731 + } 5732 + } 5733 + } 5556 5734 ] 5557 5735 }, 5558 5736 "svakom-tarax": { 5559 - "btle": { 5560 - "names": [ 5561 - "SX218A" 5562 - ], 5563 - "services": { 5564 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 5565 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5566 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5567 - } 5568 - } 5569 - }, 5570 5737 "defaults": { 5571 5738 "name": "ToyCod Tara X", 5572 5739 "features": [ ··· 5597 5764 } 5598 5765 } 5599 5766 ] 5600 - } 5767 + }, 5768 + "communication": [ 5769 + { 5770 + "btle": { 5771 + "names": [ 5772 + "SX218A" 5773 + ], 5774 + "services": { 5775 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5776 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5777 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5778 + } 5779 + } 5780 + } 5781 + } 5782 + ] 5601 5783 }, 5602 5784 "svakom-avaneo": { 5603 - "btle": { 5604 - "names": [ 5605 - "SX218A", 5606 - "Ava Neo" 5607 - ], 5608 - "services": { 5609 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 5610 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5611 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5612 - } 5613 - } 5614 - }, 5615 5785 "defaults": { 5616 5786 "name": "Svakom Ava Neo", 5617 5787 "features": [ ··· 5640 5810 } 5641 5811 } 5642 5812 ] 5643 - } 5644 - }, 5645 - "svakom-barnard": { 5646 - "btle": { 5647 - "names": [ 5648 - "DG239A" 5649 - ], 5650 - "services": { 5651 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 5652 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 5813 + }, 5814 + "communication": [ 5815 + { 5816 + "btle": { 5817 + "names": [ 5818 + "SX218A", 5819 + "Ava Neo" 5820 + ], 5821 + "services": { 5822 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5823 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 5824 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 5825 + } 5826 + } 5653 5827 } 5654 5828 } 5655 - }, 5829 + ] 5830 + }, 5831 + "svakom-barnard": { 5656 5832 "defaults": { 5657 5833 "name": "Fantasy Cup Barnard", 5658 5834 "features": [ ··· 5681 5857 } 5682 5858 } 5683 5859 ] 5684 - } 5860 + }, 5861 + "communication": [ 5862 + { 5863 + "btle": { 5864 + "names": [ 5865 + "DG239A" 5866 + ], 5867 + "services": { 5868 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5869 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 5870 + } 5871 + } 5872 + } 5873 + } 5874 + ] 5685 5875 }, 5686 5876 "realov": { 5687 - "btle": { 5688 - "names": [ 5689 - "REALOV_VIBE" 5690 - ], 5691 - "services": { 5692 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 5693 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 5694 - } 5695 - } 5696 - }, 5697 5877 "defaults": { 5698 5878 "name": "Realov Device", 5699 5879 "features": [ ··· 5710 5890 } 5711 5891 } 5712 5892 ] 5713 - } 5714 - }, 5715 - "motorbunny": { 5716 - "btle": { 5717 - "names": [ 5718 - "MB Controller", 5719 - "MB LINK 201" 5720 - ], 5721 - "services": { 5722 - "0000fff0-0000-1000-8000-00805f9b34fb": { 5723 - "tx": "0000fff6-0000-1000-8000-00805f9b34fb" 5893 + }, 5894 + "communication": [ 5895 + { 5896 + "btle": { 5897 + "names": [ 5898 + "REALOV_VIBE" 5899 + ], 5900 + "services": { 5901 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 5902 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 5903 + } 5904 + } 5724 5905 } 5725 5906 } 5726 - }, 5907 + ] 5908 + }, 5909 + "motorbunny": { 5727 5910 "defaults": { 5728 5911 "name": "Motorbunny Device", 5729 5912 "features": [ ··· 5766 5949 ], 5767 5950 "name": "Motorbunny Buck" 5768 5951 } 5952 + ], 5953 + "communication": [ 5954 + { 5955 + "btle": { 5956 + "names": [ 5957 + "MB Controller", 5958 + "MB LINK 201" 5959 + ], 5960 + "services": { 5961 + "0000fff0-0000-1000-8000-00805f9b34fb": { 5962 + "tx": "0000fff6-0000-1000-8000-00805f9b34fb" 5963 + } 5964 + } 5965 + } 5966 + } 5769 5967 ] 5770 5968 }, 5771 5969 "zalo": { 5772 - "btle": { 5773 - "names": [ 5774 - "ZALO-Queen", 5775 - "ZALO-King", 5776 - "ZALO-Jeanne" 5777 - ], 5778 - "services": { 5779 - "0000fff0-0000-1000-8000-00805f9b34fb": { 5780 - "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 5781 - } 5782 - } 5783 - }, 5784 5970 "defaults": { 5785 5971 "name": "Zalo Device", 5786 5972 "features": [ ··· 5869 6055 ], 5870 6056 "name": "Zalo Jeanne" 5871 6057 } 6058 + ], 6059 + "communication": [ 6060 + { 6061 + "btle": { 6062 + "names": [ 6063 + "ZALO-Queen", 6064 + "ZALO-King", 6065 + "ZALO-Jeanne" 6066 + ], 6067 + "services": { 6068 + "0000fff0-0000-1000-8000-00805f9b34fb": { 6069 + "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 6070 + } 6071 + } 6072 + } 6073 + } 5872 6074 ] 5873 6075 }, 5874 6076 "sayberx": { 5875 - "btle": { 5876 - "names": [ 5877 - "SayberX", 5878 - "X-Ring *" 5879 - ], 5880 - "services": { 5881 - "0000fff0-0000-1000-8000-00805f9b34fb": { 5882 - "tx": "0000fff6-0000-1000-8000-00805f9b34fb", 5883 - "rx": "0000fff8-0000-1000-8000-00805f9b34fb" 5884 - } 5885 - } 5886 - }, 5887 6077 "defaults": { 5888 6078 "name": "SayberX Device", 5889 6079 "features": [] ··· 5915 6105 ], 5916 6106 "name": "Sayber X-Ring" 5917 6107 } 6108 + ], 6109 + "communication": [ 6110 + { 6111 + "btle": { 6112 + "names": [ 6113 + "SayberX", 6114 + "X-Ring *" 6115 + ], 6116 + "services": { 6117 + "0000fff0-0000-1000-8000-00805f9b34fb": { 6118 + "tx": "0000fff6-0000-1000-8000-00805f9b34fb", 6119 + "rx": "0000fff8-0000-1000-8000-00805f9b34fb" 6120 + } 6121 + } 6122 + } 6123 + } 5918 6124 ] 5919 6125 }, 5920 6126 "muse": { 5921 - "btle": { 5922 - "names": [ 5923 - "WB-ZDB-WST", 5924 - "WB-TDD" 5925 - ], 5926 - "services": { 5927 - "0000aaa0-0000-1000-8000-00805f9b34fb": { 5928 - "tx": "0000aaa1-0000-1000-8000-00805f9b34fb" 5929 - } 5930 - } 5931 - }, 5932 6127 "defaults": { 5933 6128 "name": "Muse Device", 5934 6129 "features": [ ··· 5959 6154 ], 5960 6155 "name": "Galaku Panty Vib" 5961 6156 } 6157 + ], 6158 + "communication": [ 6159 + { 6160 + "btle": { 6161 + "names": [ 6162 + "WB-ZDB-WST", 6163 + "WB-TDD" 6164 + ], 6165 + "services": { 6166 + "0000aaa0-0000-1000-8000-00805f9b34fb": { 6167 + "tx": "0000aaa1-0000-1000-8000-00805f9b34fb" 6168 + } 6169 + } 6170 + } 6171 + } 5962 6172 ] 5963 6173 }, 5964 6174 "lelo-f1s": { 5965 - "btle": { 5966 - "names": [ 5967 - "F1s" 5968 - ], 5969 - "services": { 5970 - "0000fff0-0000-1000-8000-00805f9b34fb": { 5971 - "tx": "0000fff1-0000-1000-8000-00805f9b34fb", 5972 - "rx": "00000aa4-0000-1000-8000-00805f9b34fb" 5973 - } 5974 - } 5975 - }, 5976 6175 "defaults": { 5977 6176 "name": "Lelo F1s", 5978 6177 "features": [ ··· 6001 6200 } 6002 6201 } 6003 6202 ] 6004 - } 6005 - }, 6006 - "lelo-f1sv2": { 6007 - "btle": { 6008 - "names": [ 6009 - "F1SV2A", 6010 - "F1SV2X" 6011 - ], 6012 - "services": { 6013 - "0000fff0-0000-1000-8000-00805f9b34fb": { 6014 - "tx": "0000fff1-0000-1000-8000-00805f9b34fb", 6015 - "whitelist": "00000a10-0000-1000-8000-00805f9b34fb", 6016 - "rx": "00000a04-0000-1000-8000-00805f9b34fb" 6203 + }, 6204 + "communication": [ 6205 + { 6206 + "btle": { 6207 + "names": [ 6208 + "F1s" 6209 + ], 6210 + "services": { 6211 + "0000fff0-0000-1000-8000-00805f9b34fb": { 6212 + "tx": "0000fff1-0000-1000-8000-00805f9b34fb", 6213 + "rx": "00000aa4-0000-1000-8000-00805f9b34fb" 6214 + } 6215 + } 6017 6216 } 6018 6217 } 6019 - }, 6218 + ] 6219 + }, 6220 + "lelo-f1sv2": { 6020 6221 "defaults": { 6021 6222 "name": "Lelo F1s V2", 6022 6223 "features": [ ··· 6045 6246 } 6046 6247 } 6047 6248 ] 6048 - } 6049 - }, 6050 - "lelo-harmony": { 6051 - "btle": { 6052 - "names": [ 6053 - "IdaWave", 6054 - "Ida Wave", 6055 - "TianiHarmony", 6056 - "Tiani Harmony", 6057 - "TOR3", 6058 - "Hugo2" 6059 - ], 6060 - "services": { 6061 - "0000fff0-0000-1000-8000-00805f9b34fb": { 6062 - "command": "0000fff1-0000-1000-8000-00805f9b34fb", 6063 - "tx": "0000fff2-0000-1000-8000-00805f9b34fb", 6064 - "whitelist": "00000a11-0000-1000-8000-00805f9b34fb" 6249 + }, 6250 + "communication": [ 6251 + { 6252 + "btle": { 6253 + "names": [ 6254 + "F1SV2A", 6255 + "F1SV2X" 6256 + ], 6257 + "services": { 6258 + "0000fff0-0000-1000-8000-00805f9b34fb": { 6259 + "tx": "0000fff1-0000-1000-8000-00805f9b34fb", 6260 + "whitelist": "00000a10-0000-1000-8000-00805f9b34fb", 6261 + "rx": "00000a04-0000-1000-8000-00805f9b34fb" 6262 + } 6263 + } 6065 6264 } 6066 6265 } 6067 - }, 6266 + ] 6267 + }, 6268 + "lelo-harmony": { 6068 6269 "defaults": { 6069 6270 "name": "Lelo Tiani Harmony", 6070 6271 "features": [ ··· 6154 6355 ], 6155 6356 "name": "Lelo Hugo 2" 6156 6357 } 6358 + ], 6359 + "communication": [ 6360 + { 6361 + "btle": { 6362 + "names": [ 6363 + "IdaWave", 6364 + "Ida Wave", 6365 + "TianiHarmony", 6366 + "Tiani Harmony", 6367 + "TOR3", 6368 + "Hugo2" 6369 + ], 6370 + "services": { 6371 + "0000fff0-0000-1000-8000-00805f9b34fb": { 6372 + "command": "0000fff1-0000-1000-8000-00805f9b34fb", 6373 + "tx": "0000fff2-0000-1000-8000-00805f9b34fb", 6374 + "whitelist": "00000a11-0000-1000-8000-00805f9b34fb" 6375 + } 6376 + } 6377 + } 6378 + } 6157 6379 ] 6158 6380 }, 6159 6381 "aneros": { 6160 - "btle": { 6161 - "names": [ 6162 - "Massage Demo" 6163 - ], 6164 - "services": { 6165 - "0000ff00-0000-1000-8000-00805f9b34fb": { 6166 - "tx": "0000ff01-0000-1000-8000-00805f9b34fb" 6167 - } 6168 - } 6169 - }, 6170 6382 "defaults": { 6171 6383 "name": "Aneros Vivi", 6172 6384 "features": [ ··· 6197 6409 } 6198 6410 } 6199 6411 ] 6200 - } 6201 - }, 6202 - "lovehoney-desire": { 6203 - "btle": { 6204 - "names": [ 6205 - "PROSTATE VIBE", 6206 - "KNICKER VIBE", 6207 - "LOVE EGG" 6208 - ], 6209 - "services": { 6210 - "0000ff00-0000-1000-8000-00805f9b34fb": { 6211 - "tx": "0000ff01-0000-1000-8000-00805f9b34fb" 6412 + }, 6413 + "communication": [ 6414 + { 6415 + "btle": { 6416 + "names": [ 6417 + "Massage Demo" 6418 + ], 6419 + "services": { 6420 + "0000ff00-0000-1000-8000-00805f9b34fb": { 6421 + "tx": "0000ff01-0000-1000-8000-00805f9b34fb" 6422 + } 6423 + } 6212 6424 } 6213 6425 } 6214 - }, 6426 + ] 6427 + }, 6428 + "lovehoney-desire": { 6215 6429 "defaults": { 6216 6430 "name": "Lovehoney Device", 6217 6431 "features": [ ··· 6288 6502 } 6289 6503 ] 6290 6504 } 6505 + ], 6506 + "communication": [ 6507 + { 6508 + "btle": { 6509 + "names": [ 6510 + "PROSTATE VIBE", 6511 + "KNICKER VIBE", 6512 + "LOVE EGG" 6513 + ], 6514 + "services": { 6515 + "0000ff00-0000-1000-8000-00805f9b34fb": { 6516 + "tx": "0000ff01-0000-1000-8000-00805f9b34fb" 6517 + } 6518 + } 6519 + } 6520 + } 6291 6521 ] 6292 6522 }, 6293 6523 "twerkingbutt": { 6294 - "btle": { 6295 - "names": [ 6296 - "BODIKANG", 6297 - "Twerking Butt", 6298 - "TwerkingButt" 6299 - ], 6300 - "services": { 6301 - "00000a60-0000-1000-8000-00805f9b34fb": { 6302 - "tx": "00000a66-0000-1000-8000-00805f9b34fb", 6303 - "rx": "00000a67-0000-1000-8000-00805f9b34fb" 6304 - } 6305 - } 6306 - }, 6307 6524 "defaults": { 6308 6525 "name": "Twerking Butt", 6309 6526 "features": [] 6310 - } 6311 - }, 6312 - "maxpro": { 6313 - "btle": { 6314 - "names": [ 6315 - "M2" 6316 - ], 6317 - "services": { 6318 - "6e400001-b5a3-f393-e0a9-e50e24dcca9e": { 6319 - "tx": "6e400002-b5a3-f393-e0a9-e50e24dcca9e" 6527 + }, 6528 + "communication": [ 6529 + { 6530 + "btle": { 6531 + "names": [ 6532 + "BODIKANG", 6533 + "Twerking Butt", 6534 + "TwerkingButt" 6535 + ], 6536 + "services": { 6537 + "00000a60-0000-1000-8000-00805f9b34fb": { 6538 + "tx": "00000a66-0000-1000-8000-00805f9b34fb", 6539 + "rx": "00000a67-0000-1000-8000-00805f9b34fb" 6540 + } 6541 + } 6320 6542 } 6321 6543 } 6322 - }, 6544 + ] 6545 + }, 6546 + "maxpro": { 6323 6547 "defaults": { 6324 6548 "name": "MaxPro 2", 6325 6549 "features": [ ··· 6336 6560 } 6337 6561 } 6338 6562 ] 6339 - } 6340 - }, 6341 - "nobra": { 6342 - "btle": { 6343 - "names": [ 6344 - "NobraControl*" 6345 - ], 6346 - "services": { 6347 - "0000abf0-0000-1000-8000-00805f9b34fb": { 6348 - "tx": "0000abf1-0000-1000-8000-00805f9b34fb" 6349 - } 6350 - } 6351 6563 }, 6352 - "serial": [ 6564 + "communication": [ 6353 6565 { 6354 - "port": "default", 6355 - "baud-rate": 19200, 6356 - "data-bits": 8, 6357 - "parity": "N", 6358 - "stop-bits": 1 6566 + "btle": { 6567 + "names": [ 6568 + "M2" 6569 + ], 6570 + "services": { 6571 + "6e400001-b5a3-f393-e0a9-e50e24dcca9e": { 6572 + "tx": "6e400002-b5a3-f393-e0a9-e50e24dcca9e" 6573 + } 6574 + } 6575 + } 6359 6576 } 6360 - ], 6577 + ] 6578 + }, 6579 + "nobra": { 6361 6580 "defaults": { 6362 6581 "name": "Nobra's Silicone Dreams Toy", 6363 6582 "features": [ ··· 6374 6593 } 6375 6594 } 6376 6595 ] 6377 - } 6378 - }, 6379 - "thehandy": { 6380 - "btle": { 6381 - "names": [ 6382 - "The Handy" 6383 - ], 6384 - "services": { 6385 - "1775244d-6b43-439b-877c-060f2d9bed07": { 6386 - "firmware": "1775ff51-6b43-439b-877c-060f2d9bed07", 6387 - "tx": "1775ff55-6b43-439b-877c-060f2d9bed07" 6596 + }, 6597 + "communication": [ 6598 + { 6599 + "btle": { 6600 + "names": [ 6601 + "NobraControl*" 6602 + ], 6603 + "services": { 6604 + "0000abf0-0000-1000-8000-00805f9b34fb": { 6605 + "tx": "0000abf1-0000-1000-8000-00805f9b34fb" 6606 + } 6607 + } 6608 + } 6609 + }, 6610 + { 6611 + "serial": { 6612 + "ports": [ 6613 + { 6614 + "port": "default", 6615 + "baud-rate": 19200, 6616 + "data-bits": 8, 6617 + "parity": "N", 6618 + "stop-bits": 1 6619 + } 6620 + ] 6388 6621 } 6389 6622 } 6390 - }, 6623 + ] 6624 + }, 6625 + "thehandy": { 6391 6626 "defaults": { 6392 6627 "name": "The Handy", 6393 6628 "features": [ ··· 6404 6639 } 6405 6640 } 6406 6641 ] 6407 - } 6642 + }, 6643 + "communication": [ 6644 + { 6645 + "btle": { 6646 + "names": [ 6647 + "The Handy" 6648 + ], 6649 + "services": { 6650 + "1775244d-6b43-439b-877c-060f2d9bed07": { 6651 + "firmware": "1775ff51-6b43-439b-877c-060f2d9bed07", 6652 + "tx": "1775ff55-6b43-439b-877c-060f2d9bed07" 6653 + } 6654 + } 6655 + } 6656 + } 6657 + ] 6408 6658 }, 6409 6659 "cachito": { 6410 - "btle": { 6411 - "names": [ 6412 - "CCTSK", 6413 - "CCTXueGao" 6414 - ], 6415 - "services": { 6416 - "0000fff0-0000-1000-8000-00805f9b34fb": { 6417 - "tx": "0000fff2-0000-1000-8000-00805f9b34fb" 6418 - } 6419 - } 6420 - }, 6421 6660 "defaults": { 6422 6661 "name": "Cachito Device", 6423 6662 "features": [ ··· 6460 6699 ], 6461 6700 "name": "Cachito Ice Cream" 6462 6701 } 6702 + ], 6703 + "communication": [ 6704 + { 6705 + "btle": { 6706 + "names": [ 6707 + "CCTSK", 6708 + "CCTXueGao" 6709 + ], 6710 + "services": { 6711 + "0000fff0-0000-1000-8000-00805f9b34fb": { 6712 + "tx": "0000fff2-0000-1000-8000-00805f9b34fb" 6713 + } 6714 + } 6715 + } 6716 + } 6463 6717 ] 6464 6718 }, 6465 6719 "jejoue": { 6466 - "btle": { 6467 - "names": [ 6468 - "Je Joue" 6469 - ], 6470 - "services": { 6471 - "0000fff0-0000-1000-8000-00805f9b34fb": { 6472 - "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 6473 - } 6474 - } 6475 - }, 6476 6720 "defaults": { 6477 6721 "name": "Je Joue Device", 6478 6722 "features": [ ··· 6501 6745 } 6502 6746 } 6503 6747 ] 6504 - } 6748 + }, 6749 + "communication": [ 6750 + { 6751 + "btle": { 6752 + "names": [ 6753 + "Je Joue" 6754 + ], 6755 + "services": { 6756 + "0000fff0-0000-1000-8000-00805f9b34fb": { 6757 + "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 6758 + } 6759 + } 6760 + } 6761 + } 6762 + ] 6505 6763 }, 6506 6764 "lovenuts": { 6507 - "btle": { 6508 - "names": [ 6509 - "Love_Nuts" 6510 - ], 6511 - "services": { 6512 - "0000fff0-0000-1000-8000-00805f9b34fb": { 6513 - "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 6514 - } 6515 - } 6516 - }, 6517 6765 "defaults": { 6518 6766 "name": "Love Nut", 6519 6767 "features": [ ··· 6530 6778 } 6531 6779 } 6532 6780 ] 6533 - } 6534 - }, 6535 - "patoo": { 6536 - "btle": { 6537 - "names": [ 6538 - "PTVEA*", 6539 - "PBT*", 6540 - "PCS*", 6541 - "PHT*" 6542 - ], 6543 - "services": { 6544 - "f000aa64-0451-4000-b000-000000000000": { 6545 - "txmode": "f000aa65-0451-4000-b000-000000000000", 6546 - "tx": "f000aa68-0451-4000-b000-000000000000" 6781 + }, 6782 + "communication": [ 6783 + { 6784 + "btle": { 6785 + "names": [ 6786 + "Love_Nuts" 6787 + ], 6788 + "services": { 6789 + "0000fff0-0000-1000-8000-00805f9b34fb": { 6790 + "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 6791 + } 6792 + } 6547 6793 } 6548 6794 } 6549 - }, 6795 + ] 6796 + }, 6797 + "patoo": { 6550 6798 "defaults": { 6551 6799 "name": "Patoo Device", 6552 6800 "features": [ ··· 6615 6863 } 6616 6864 ] 6617 6865 } 6866 + ], 6867 + "communication": [ 6868 + { 6869 + "btle": { 6870 + "names": [ 6871 + "PTVEA*", 6872 + "PBT*", 6873 + "PCS*", 6874 + "PHT*" 6875 + ], 6876 + "services": { 6877 + "f000aa64-0451-4000-b000-000000000000": { 6878 + "txmode": "f000aa65-0451-4000-b000-000000000000", 6879 + "tx": "f000aa68-0451-4000-b000-000000000000" 6880 + } 6881 + } 6882 + } 6883 + } 6618 6884 ] 6619 6885 }, 6620 6886 "tcode-v03": { 6621 - "serial": [ 6622 - { 6623 - "port": "default", 6624 - "baud-rate": 115200, 6625 - "data-bits": 8, 6626 - "parity": "N", 6627 - "stop-bits": 1 6628 - } 6629 - ], 6630 6887 "defaults": { 6631 6888 "name": "TCode v0.3 (Single Linear Axis)", 6632 6889 "features": [ ··· 6643 6900 } 6644 6901 } 6645 6902 ] 6646 - } 6903 + }, 6904 + "communication": [ 6905 + { 6906 + "serial": { 6907 + "ports": [ 6908 + { 6909 + "port": "default", 6910 + "baud-rate": 115200, 6911 + "data-bits": 8, 6912 + "parity": "N", 6913 + "stop-bits": 1 6914 + } 6915 + ] 6916 + } 6917 + } 6918 + ] 6647 6919 }, 6648 6920 "fredorch": { 6649 - "btle": { 6650 - "names": [ 6651 - "YXlinksSPP" 6652 - ], 6653 - "services": { 6654 - "0000ffb0-0000-1000-8000-00805f9b34fb": { 6655 - "tx": "0000ffb1-0000-1000-8000-00805f9b34fb", 6656 - "rx": "0000ffb2-0000-1000-8000-00805f9b34fb" 6657 - } 6658 - } 6659 - }, 6660 6921 "defaults": { 6661 6922 "name": "Fredorch Device", 6662 6923 "features": [ ··· 6673 6934 } 6674 6935 } 6675 6936 ] 6676 - } 6677 - }, 6678 - "fredorch-rotary": { 6679 - "btle": { 6680 - "names": [ 6681 - "M1_*" 6682 - ], 6683 - "services": { 6684 - "0000ae10-0000-1000-8000-00805f9b34fb": { 6685 - "tx": "0000ae01-0000-1000-8000-00805f9b34fb", 6686 - "rx": "0000ae02-0000-1000-8000-00805f9b34fb" 6937 + }, 6938 + "communication": [ 6939 + { 6940 + "btle": { 6941 + "names": [ 6942 + "YXlinksSPP" 6943 + ], 6944 + "services": { 6945 + "0000ffb0-0000-1000-8000-00805f9b34fb": { 6946 + "tx": "0000ffb1-0000-1000-8000-00805f9b34fb", 6947 + "rx": "0000ffb2-0000-1000-8000-00805f9b34fb" 6948 + } 6949 + } 6687 6950 } 6688 6951 } 6689 - }, 6952 + ] 6953 + }, 6954 + "fredorch-rotary": { 6690 6955 "defaults": { 6691 6956 "name": "Fredorch Rotary Device", 6692 6957 "features": [ ··· 6704 6969 } 6705 6970 } 6706 6971 ] 6707 - } 6972 + }, 6973 + "communication": [ 6974 + { 6975 + "btle": { 6976 + "names": [ 6977 + "M1_*" 6978 + ], 6979 + "services": { 6980 + "0000ae10-0000-1000-8000-00805f9b34fb": { 6981 + "tx": "0000ae01-0000-1000-8000-00805f9b34fb", 6982 + "rx": "0000ae02-0000-1000-8000-00805f9b34fb" 6983 + } 6984 + } 6985 + } 6986 + } 6987 + ] 6708 6988 }, 6709 6989 "mizzzee": { 6710 - "btle": { 6711 - "names": [ 6712 - "NFY008" 6713 - ], 6714 - "services": { 6715 - "0000eea0-0000-1000-8000-00805f9b34fb": { 6716 - "tx": "0000eea1-0000-1000-8000-00805f9b34fb" 6717 - } 6718 - } 6719 - }, 6720 6990 "defaults": { 6721 6991 "name": "Mizz Zee Device", 6722 6992 "features": [ ··· 6733 7003 } 6734 7004 } 6735 7005 ] 6736 - } 7006 + }, 7007 + "communication": [ 7008 + { 7009 + "btle": { 7010 + "names": [ 7011 + "NFY008" 7012 + ], 7013 + "services": { 7014 + "0000eea0-0000-1000-8000-00805f9b34fb": { 7015 + "tx": "0000eea1-0000-1000-8000-00805f9b34fb" 7016 + } 7017 + } 7018 + } 7019 + } 7020 + ] 6737 7021 }, 6738 7022 "mizzzee-v2": { 6739 - "btle": { 6740 - "names": [ 6741 - "XHT" 6742 - ], 6743 - "services": { 6744 - "0000eea0-0000-1000-8000-00805f9b34fb": { 6745 - "tx": "0000ee01-0000-1000-8000-00805f9b34fb" 6746 - } 6747 - } 6748 - }, 6749 7023 "defaults": { 6750 7024 "name": "Mizz Zee Device", 6751 7025 "features": [ ··· 6762 7036 } 6763 7037 } 6764 7038 ] 6765 - } 6766 - }, 6767 - "mizzzee-v3": { 6768 - "btle": { 6769 - "names": [ 6770 - "XHTKJ" 6771 - ], 6772 - "services": { 6773 - "0000ff10-0000-1000-8000-00805f9b34fb": { 6774 - "tx": "0000ff12-0000-1000-8000-00805f9b34fb" 7039 + }, 7040 + "communication": [ 7041 + { 7042 + "btle": { 7043 + "names": [ 7044 + "XHT" 7045 + ], 7046 + "services": { 7047 + "0000eea0-0000-1000-8000-00805f9b34fb": { 7048 + "tx": "0000ee01-0000-1000-8000-00805f9b34fb" 7049 + } 7050 + } 6775 7051 } 6776 7052 } 6777 - }, 7053 + ] 7054 + }, 7055 + "mizzzee-v3": { 6778 7056 "defaults": { 6779 7057 "name": "Mizz Zee Device", 6780 7058 "features": [ ··· 6791 7069 } 6792 7070 } 6793 7071 ] 6794 - } 6795 - }, 6796 - "htk_bm": { 6797 - "btle": { 6798 - "names": [ 6799 - "HTK-BLE-BM001" 6800 - ], 6801 - "services": { 6802 - "0000180f-0000-1000-8000-00805f9b34fb": { 6803 - "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 6804 - }, 6805 - "00001802-0000-1000-8000-00805f9b34fb": { 6806 - "tx": "00002a06-0000-1000-8000-00805f9b34fb" 7072 + }, 7073 + "communication": [ 7074 + { 7075 + "btle": { 7076 + "names": [ 7077 + "XHTKJ" 7078 + ], 7079 + "services": { 7080 + "0000ff10-0000-1000-8000-00805f9b34fb": { 7081 + "tx": "0000ff12-0000-1000-8000-00805f9b34fb" 7082 + } 7083 + } 6807 7084 } 6808 7085 } 6809 - }, 7086 + ] 7087 + }, 7088 + "htk_bm": { 6810 7089 "defaults": { 6811 7090 "name": "HTK Breast Massager", 6812 7091 "features": [ ··· 6835 7114 } 6836 7115 } 6837 7116 ] 6838 - } 7117 + }, 7118 + "communication": [ 7119 + { 7120 + "btle": { 7121 + "names": [ 7122 + "HTK-BLE-BM001" 7123 + ], 7124 + "services": { 7125 + "0000180f-0000-1000-8000-00805f9b34fb": { 7126 + "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 7127 + }, 7128 + "00001802-0000-1000-8000-00805f9b34fb": { 7129 + "tx": "00002a06-0000-1000-8000-00805f9b34fb" 7130 + } 7131 + } 7132 + } 7133 + } 7134 + ] 6839 7135 }, 6840 7136 "ankni": { 6841 - "btle": { 6842 - "names": [ 6843 - "DSJM" 6844 - ], 6845 - "services": { 6846 - "0000fe00-0000-1000-8000-00805f9b34fb": { 6847 - "tx": "0000fe01-0000-1000-8000-00805f9b34fb" 6848 - }, 6849 - "0000fffe-0000-1000-8000-00805f9b34fb": { 6850 - "tx": "0000fe02-0000-1000-8000-00805f9b34fb" 6851 - }, 6852 - "0000180a-0000-1000-8000-00805f9b34fb": { 6853 - "generic0": "00002a50-0000-1000-8000-00805f9b34fb" 6854 - } 6855 - } 6856 - }, 6857 7137 "defaults": { 6858 7138 "name": "Roselex Device", 6859 7139 "features": [ ··· 6870 7150 } 6871 7151 } 6872 7152 ] 6873 - } 6874 - }, 6875 - "hgod": { 6876 - "btle": { 6877 - "names": [ 6878 - "AMN NEO" 6879 - ], 6880 - "services": { 6881 - "0000ffe3-0000-1000-8000-00805f9b34fb": { 6882 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 6883 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 7153 + }, 7154 + "communication": [ 7155 + { 7156 + "btle": { 7157 + "names": [ 7158 + "DSJM" 7159 + ], 7160 + "services": { 7161 + "0000fe00-0000-1000-8000-00805f9b34fb": { 7162 + "tx": "0000fe01-0000-1000-8000-00805f9b34fb" 7163 + }, 7164 + "0000fffe-0000-1000-8000-00805f9b34fb": { 7165 + "tx": "0000fe02-0000-1000-8000-00805f9b34fb" 7166 + }, 7167 + "0000180a-0000-1000-8000-00805f9b34fb": { 7168 + "generic0": "00002a50-0000-1000-8000-00805f9b34fb" 7169 + } 7170 + } 6884 7171 } 6885 7172 } 6886 - }, 7173 + ] 7174 + }, 7175 + "hgod": { 6887 7176 "defaults": { 6888 7177 "name": "Hgod Device", 6889 7178 "features": [ ··· 6900 7189 } 6901 7190 } 6902 7191 ] 6903 - } 6904 - }, 6905 - "lovedistance": { 6906 - "btle": { 6907 - "names": [ 6908 - "REACH G", 6909 - "REACH", 6910 - "MAG", 6911 - "SPAN", 6912 - "RANGE" 6913 - ], 6914 - "services": { 6915 - "0000ff00-0000-1000-8000-00805f9b34fb": { 6916 - "tx": "0000ff01-0000-1000-8000-00805f9b34fb", 6917 - "rx": "0000ff02-0000-1000-8000-00805f9b34fb" 7192 + }, 7193 + "communication": [ 7194 + { 7195 + "btle": { 7196 + "names": [ 7197 + "AMN NEO" 7198 + ], 7199 + "services": { 7200 + "0000ffe3-0000-1000-8000-00805f9b34fb": { 7201 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 7202 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 7203 + } 7204 + } 6918 7205 } 6919 7206 } 6920 - }, 7207 + ] 7208 + }, 7209 + "lovedistance": { 6921 7210 "defaults": { 6922 7211 "name": "Love Distance Device", 6923 7212 "features": [ ··· 6966 7255 ], 6967 7256 "name": "Love Distance Range" 6968 7257 } 7258 + ], 7259 + "communication": [ 7260 + { 7261 + "btle": { 7262 + "names": [ 7263 + "REACH G", 7264 + "REACH", 7265 + "MAG", 7266 + "SPAN", 7267 + "RANGE" 7268 + ], 7269 + "services": { 7270 + "0000ff00-0000-1000-8000-00805f9b34fb": { 7271 + "tx": "0000ff01-0000-1000-8000-00805f9b34fb", 7272 + "rx": "0000ff02-0000-1000-8000-00805f9b34fb" 7273 + } 7274 + } 7275 + } 7276 + } 6969 7277 ] 6970 7278 }, 6971 7279 "satisfyer": { 6972 - "btle": { 6973 - "names": [ 6974 - "SF *" 6975 - ], 6976 - "manufacturer-data": [ 6977 - { 6978 - "company": 93, 6979 - "data": [ 6980 - 0, 6981 - 0, 6982 - 39 6983 - ] 6984 - }, 6985 - { 6986 - "company": 93, 6987 - "data": [ 6988 - 0, 6989 - 0, 6990 - 40 6991 - ] 6992 - } 6993 - ], 6994 - "services": { 6995 - "0000180a-0000-1000-8000-00805f9b34fb": { 6996 - "rxblemodel": "00002a24-0000-1000-8000-00805f9b34fb" 6997 - }, 6998 - "51361500-c5e7-47c7-8a6e-47ebc99d80e8": { 6999 - "command": "51361501-c5e7-47c7-8a6e-47ebc99d80e8", 7000 - "tx": "51361502-c5e7-47c7-8a6e-47ebc99d80e8" 7001 - } 7002 - } 7003 - }, 7004 7280 "defaults": { 7005 7281 "name": "Satisfyer Device", 7006 7282 "features": [ ··· 8829 9105 } 8830 9106 ] 8831 9107 } 9108 + ], 9109 + "communication": [ 9110 + { 9111 + "btle": { 9112 + "names": [ 9113 + "SF *" 9114 + ], 9115 + "manufacturer-data": [ 9116 + { 9117 + "company": 93, 9118 + "data": [ 9119 + 0, 9120 + 0, 9121 + 39 9122 + ] 9123 + }, 9124 + { 9125 + "company": 93, 9126 + "data": [ 9127 + 0, 9128 + 0, 9129 + 40 9130 + ] 9131 + } 9132 + ], 9133 + "services": { 9134 + "0000180a-0000-1000-8000-00805f9b34fb": { 9135 + "rxblemodel": "00002a24-0000-1000-8000-00805f9b34fb" 9136 + }, 9137 + "51361500-c5e7-47c7-8a6e-47ebc99d80e8": { 9138 + "command": "51361501-c5e7-47c7-8a6e-47ebc99d80e8", 9139 + "tx": "51361502-c5e7-47c7-8a6e-47ebc99d80e8" 9140 + } 9141 + } 9142 + } 9143 + } 8832 9144 ] 8833 9145 }, 8834 9146 "mannuo": { 8835 - "btle": { 8836 - "names": [ 8837 - "Sex toys", 8838 - "Sex Toys", 8839 - "LXCDVP", 8840 - "MANO PRODUCT" 8841 - ], 8842 - "services": { 8843 - "0000fff0-0000-1000-8000-00805f9b34fb": { 8844 - "tx": "0000fff1-0000-1000-8000-00805f9b34fb", 8845 - "rx": "0000fff4-0000-1000-8000-00805f9b34fb" 8846 - } 8847 - } 8848 - }, 8849 9147 "defaults": { 8850 9148 "name": "ManNuo Device", 8851 9149 "features": [ ··· 8862 9160 } 8863 9161 } 8864 9162 ] 8865 - } 8866 - }, 8867 - "kgoal-boost": { 8868 - "btle": { 8869 - "names": [ 8870 - "Boost" 8871 - ], 8872 - "services": { 8873 - "0000180f-0000-1000-8000-00805f9b34fb": { 8874 - "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 8875 - }, 8876 - "8e7c6065-7656-17ad-1b41-b53d1a548e0d": { 8877 - "rxpressure": "10c2be2d-d2d5-b7a8-5f42-e2468c9ebbf5" 9163 + }, 9164 + "communication": [ 9165 + { 9166 + "btle": { 9167 + "names": [ 9168 + "Sex toys", 9169 + "Sex Toys", 9170 + "LXCDVP", 9171 + "MANO PRODUCT" 9172 + ], 9173 + "services": { 9174 + "0000fff0-0000-1000-8000-00805f9b34fb": { 9175 + "tx": "0000fff1-0000-1000-8000-00805f9b34fb", 9176 + "rx": "0000fff4-0000-1000-8000-00805f9b34fb" 9177 + } 9178 + } 8878 9179 } 8879 9180 } 8880 - }, 9181 + ] 9182 + }, 9183 + "kgoal-boost": { 8881 9184 "defaults": { 8882 9185 "name": "KGoal Boost", 8883 9186 "features": [ ··· 8897 9200 } 8898 9201 } 8899 9202 ] 8900 - } 8901 - }, 8902 - "meese": { 8903 - "btle": { 8904 - "names": [ 8905 - "Meese-V389", 8906 - "Meese-cd" 8907 - ], 8908 - "services": { 8909 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 8910 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 9203 + }, 9204 + "communication": [ 9205 + { 9206 + "btle": { 9207 + "names": [ 9208 + "Boost" 9209 + ], 9210 + "services": { 9211 + "0000180f-0000-1000-8000-00805f9b34fb": { 9212 + "rxblebattery": "00002a19-0000-1000-8000-00805f9b34fb" 9213 + }, 9214 + "8e7c6065-7656-17ad-1b41-b53d1a548e0d": { 9215 + "rxpressure": "10c2be2d-d2d5-b7a8-5f42-e2468c9ebbf5" 9216 + } 9217 + } 8911 9218 } 8912 9219 } 8913 - }, 9220 + ] 9221 + }, 9222 + "meese": { 8914 9223 "defaults": { 8915 9224 "name": "Meese Device", 8916 9225 "features": [ ··· 8967 9276 } 8968 9277 ] 8969 9278 } 9279 + ], 9280 + "communication": [ 9281 + { 9282 + "btle": { 9283 + "names": [ 9284 + "Meese-V389", 9285 + "Meese-cd" 9286 + ], 9287 + "services": { 9288 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 9289 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 9290 + } 9291 + } 9292 + } 9293 + } 8970 9294 ] 8971 9295 }, 8972 9296 "hismith": { 8973 - "btle": { 8974 - "names": [ 8975 - "HISMITH", 8976 - "Wildolo", 8977 - "\u0007HISMITH" 8978 - ], 8979 - "services": { 8980 - "0000ffe5-0000-1000-8000-00805f9b34fb": { 8981 - "tx": "0000ffe9-0000-1000-8000-00805f9b34fb" 8982 - }, 8983 - "0000ff90-0000-1000-8000-00805f9b34fb": { 8984 - "rxblemodel": "0000ff96-0000-1000-8000-00805f9b34fb" 8985 - } 8986 - } 8987 - }, 8988 9297 "defaults": { 8989 9298 "name": "Hismith device", 8990 9299 "features": [ ··· 9075 9384 } 9076 9385 ] 9077 9386 } 9387 + ], 9388 + "communication": [ 9389 + { 9390 + "btle": { 9391 + "names": [ 9392 + "HISMITH", 9393 + "Wildolo", 9394 + "\u0007HISMITH" 9395 + ], 9396 + "services": { 9397 + "0000ffe5-0000-1000-8000-00805f9b34fb": { 9398 + "tx": "0000ffe9-0000-1000-8000-00805f9b34fb" 9399 + }, 9400 + "0000ff90-0000-1000-8000-00805f9b34fb": { 9401 + "rxblemodel": "0000ff96-0000-1000-8000-00805f9b34fb" 9402 + } 9403 + } 9404 + } 9405 + } 9078 9406 ] 9079 9407 }, 9080 9408 "hismith-mini": { 9081 - "btle": { 9082 - "names": [ 9083 - "Auxfun-Box", 9084 - "Sinloli", 9085 - "Sinloli-Sherry", 9086 - "Eropair *", 9087 - "HISMITH S1" 9088 - ], 9089 - "services": { 9090 - "0000ffe5-0000-1000-8000-00805f9b34fb": { 9091 - "tx": "0000ffe9-0000-1000-8000-00805f9b34fb" 9092 - }, 9093 - "0000ff90-0000-1000-8000-00805f9b34fb": { 9094 - "rxblemodel": "0000ff96-0000-1000-8000-00805f9b34fb" 9095 - } 9096 - } 9097 - }, 9098 9409 "defaults": { 9099 9410 "name": "Hismith Mini device", 9100 9411 "features": [ ··· 9262 9573 } 9263 9574 ] 9264 9575 } 9576 + ], 9577 + "communication": [ 9578 + { 9579 + "btle": { 9580 + "names": [ 9581 + "Auxfun-Box", 9582 + "Sinloli", 9583 + "Sinloli-Sherry", 9584 + "Eropair *", 9585 + "HISMITH S1" 9586 + ], 9587 + "services": { 9588 + "0000ffe5-0000-1000-8000-00805f9b34fb": { 9589 + "tx": "0000ffe9-0000-1000-8000-00805f9b34fb" 9590 + }, 9591 + "0000ff90-0000-1000-8000-00805f9b34fb": { 9592 + "rxblemodel": "0000ff96-0000-1000-8000-00805f9b34fb" 9593 + } 9594 + } 9595 + } 9596 + } 9265 9597 ] 9266 9598 }, 9267 9599 "hismith-servo": { 9268 - "btle": { 9269 - "names": [ 9270 - "HISMITH S2" 9271 - ], 9272 - "services": { 9273 - "0000ffe5-0000-1000-8000-00805f9b34fb": { 9274 - "tx": "0000ffe9-0000-1000-8000-00805f9b34fb" 9275 - }, 9276 - "0000ff90-0000-1000-8000-00805f9b34fb": { 9277 - "rxblemodel": "0000ff96-0000-1000-8000-00805f9b34fb" 9278 - } 9279 - } 9280 - }, 9281 9600 "defaults": { 9282 9601 "name": "Hismith servo device", 9283 9602 "features": [ ··· 9303 9622 ], 9304 9623 "name": "Hismith Servo" 9305 9624 } 9625 + ], 9626 + "communication": [ 9627 + { 9628 + "btle": { 9629 + "names": [ 9630 + "HISMITH S2" 9631 + ], 9632 + "services": { 9633 + "0000ffe5-0000-1000-8000-00805f9b34fb": { 9634 + "tx": "0000ffe9-0000-1000-8000-00805f9b34fb" 9635 + }, 9636 + "0000ff90-0000-1000-8000-00805f9b34fb": { 9637 + "rxblemodel": "0000ff96-0000-1000-8000-00805f9b34fb" 9638 + } 9639 + } 9640 + } 9641 + } 9306 9642 ] 9307 9643 }, 9308 9644 "wetoy": { 9309 - "btle": { 9310 - "names": [ 9311 - "WeToy" 9312 - ], 9313 - "services": { 9314 - "0000fff0-0000-1000-8000-00805f9b34fb": { 9315 - "tx": "0000fff3-0000-1000-8000-00805f9b34fb" 9316 - } 9317 - } 9318 - }, 9319 9645 "defaults": { 9320 9646 "name": "WeToy MiNa", 9321 9647 "features": [ ··· 9332 9658 } 9333 9659 } 9334 9660 ] 9335 - } 9336 - }, 9337 - "pink_punch": { 9338 - "btle": { 9339 - "names": [ 9340 - "Pink_Punch", 9341 - "PinkPunch_Peachu" 9342 - ], 9343 - "services": { 9344 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 9345 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 9661 + }, 9662 + "communication": [ 9663 + { 9664 + "btle": { 9665 + "names": [ 9666 + "WeToy" 9667 + ], 9668 + "services": { 9669 + "0000fff0-0000-1000-8000-00805f9b34fb": { 9670 + "tx": "0000fff3-0000-1000-8000-00805f9b34fb" 9671 + } 9672 + } 9346 9673 } 9347 9674 } 9348 - }, 9675 + ] 9676 + }, 9677 + "pink_punch": { 9349 9678 "defaults": { 9350 9679 "name": "Pink Punch Sunset Mushroom", 9351 9680 "configurations": [ ··· 9370 9699 } 9371 9700 } 9372 9701 ] 9373 - } 9374 - }, 9375 - "sakuraneko": { 9376 - "btle": { 9377 - "names": [ 9378 - "sakuraneko-01", 9379 - "sakuraneko-02", 9380 - "sakuraneko-03", 9381 - "sakuraneko-04" 9382 - ], 9383 - "services": { 9384 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 9385 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 9702 + }, 9703 + "communication": [ 9704 + { 9705 + "btle": { 9706 + "names": [ 9707 + "Pink_Punch", 9708 + "PinkPunch_Peachu" 9709 + ], 9710 + "services": { 9711 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 9712 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 9713 + } 9714 + } 9386 9715 } 9387 9716 } 9388 - }, 9717 + ] 9718 + }, 9719 + "sakuraneko": { 9389 9720 "defaults": { 9390 9721 "name": "Sakuraneko Device", 9391 9722 "features": [ ··· 9454 9785 } 9455 9786 ] 9456 9787 } 9788 + ], 9789 + "communication": [ 9790 + { 9791 + "btle": { 9792 + "names": [ 9793 + "sakuraneko-01", 9794 + "sakuraneko-02", 9795 + "sakuraneko-03", 9796 + "sakuraneko-04" 9797 + ], 9798 + "services": { 9799 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 9800 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 9801 + } 9802 + } 9803 + } 9804 + } 9457 9805 ] 9458 9806 }, 9459 9807 "synchro": { 9460 - "btle": { 9461 - "names": [ 9462 - "Shinkuro", 9463 - "synchro2", 9464 - "synchro EX" 9465 - ], 9466 - "services": { 9467 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 9468 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 9469 - } 9470 - } 9471 - }, 9472 9808 "defaults": { 9473 9809 "name": "Synchro", 9474 9810 "features": [ ··· 9493 9829 ], 9494 9830 "name": "Synchro Exchange" 9495 9831 } 9832 + ], 9833 + "communication": [ 9834 + { 9835 + "btle": { 9836 + "names": [ 9837 + "Shinkuro", 9838 + "synchro2", 9839 + "synchro EX" 9840 + ], 9841 + "services": { 9842 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 9843 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb" 9844 + } 9845 + } 9846 + } 9847 + } 9496 9848 ] 9497 9849 }, 9498 9850 "tryfun": { 9499 - "btle": { 9500 - "names": [ 9501 - "TRYFUN-ONE" 9502 - ], 9503 - "services": { 9504 - "0000ff10-0000-1000-8000-00805f9b34fb": { 9505 - "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 9506 - } 9507 - } 9508 - }, 9509 9851 "defaults": { 9510 9852 "name": "TryFun Yuan Series", 9511 9853 "features": [ ··· 9534 9876 } 9535 9877 } 9536 9878 ] 9537 - } 9538 - }, 9539 - "metaxsire": { 9540 - "btle": { 9541 - "names": [ 9542 - "Rex", 9543 - "Cali", 9544 - "Olis", 9545 - "LY213A01" 9546 - ], 9547 - "services": { 9548 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 9549 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 9550 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 9879 + }, 9880 + "communication": [ 9881 + { 9882 + "btle": { 9883 + "names": [ 9884 + "TRYFUN-ONE" 9885 + ], 9886 + "services": { 9887 + "0000ff10-0000-1000-8000-00805f9b34fb": { 9888 + "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 9889 + } 9890 + } 9551 9891 } 9552 9892 } 9553 - }, 9893 + ] 9894 + }, 9895 + "metaxsire": { 9554 9896 "defaults": { 9555 9897 "name": "metaXsire Device", 9556 9898 "features": [ ··· 9683 10025 } 9684 10026 ] 9685 10027 } 10028 + ], 10029 + "communication": [ 10030 + { 10031 + "btle": { 10032 + "names": [ 10033 + "Rex", 10034 + "Cali", 10035 + "Olis", 10036 + "LY213A01" 10037 + ], 10038 + "services": { 10039 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 10040 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 10041 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 10042 + } 10043 + } 10044 + } 10045 + } 9686 10046 ] 9687 10047 }, 9688 10048 "metaxsire-repeat": { 9689 - "btle": { 9690 - "names": [ 9691 - "LY199B01", 9692 - "LY234A01", 9693 - "LY271A01", 9694 - "LY270A01" 9695 - ], 9696 - "services": { 9697 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 9698 - "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 9699 - "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 9700 - } 9701 - } 9702 - }, 9703 10049 "defaults": { 9704 10050 "name": "Cooxer Bullet Vibe", 9705 10051 "features": [ ··· 9742 10088 ], 9743 10089 "name": "metaXsire Una" 9744 10090 } 10091 + ], 10092 + "communication": [ 10093 + { 10094 + "btle": { 10095 + "names": [ 10096 + "LY199B01", 10097 + "LY234A01", 10098 + "LY271A01", 10099 + "LY270A01" 10100 + ], 10101 + "services": { 10102 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 10103 + "tx": "0000ffe1-0000-1000-8000-00805f9b34fb", 10104 + "rx": "0000ffe2-0000-1000-8000-00805f9b34fb" 10105 + } 10106 + } 10107 + } 10108 + } 9745 10109 ] 9746 10110 }, 9747 10111 "metaxsire-v2": { 9748 - "btle": { 9749 - "names": [ 9750 - "LY272A01" 9751 - ], 9752 - "services": { 9753 - "0000bae0-0000-1000-8000-00805f9b34fb": { 9754 - "tx": "0000bae1-0000-1000-8000-00805f9b34fb" 9755 - } 9756 - } 9757 - }, 9758 10112 "defaults": { 9759 10113 "name": "metaXsire Nolan", 9760 10114 "features": [ ··· 9783 10137 } 9784 10138 } 9785 10139 ] 9786 - } 10140 + }, 10141 + "communication": [ 10142 + { 10143 + "btle": { 10144 + "names": [ 10145 + "LY272A01" 10146 + ], 10147 + "services": { 10148 + "0000bae0-0000-1000-8000-00805f9b34fb": { 10149 + "tx": "0000bae1-0000-1000-8000-00805f9b34fb" 10150 + } 10151 + } 10152 + } 10153 + } 10154 + ] 9787 10155 }, 9788 10156 "metaxsire-v3": { 9789 - "btle": { 9790 - "names": [ 9791 - "TAY001" 9792 - ], 9793 - "services": { 9794 - "0000fff0-0000-1000-8000-00805f9b34fb": { 9795 - "tx": "0000fe02-0000-1000-8000-00805f9b34fb" 9796 - } 9797 - } 9798 - }, 9799 10157 "defaults": { 9800 10158 "name": "metaXsire Tay", 9801 10159 "features": [ ··· 9812 10170 } 9813 10171 } 9814 10172 ] 9815 - } 9816 - }, 9817 - "cowgirl": { 9818 - "btle": { 9819 - "names": [ 9820 - "THE COWGIRL", 9821 - "THE UNICORN" 9822 - ], 9823 - "services": { 9824 - "0000fe00-0000-1000-8000-00805f9b34fb": { 9825 - "tx": "0000fe01-0000-1000-8000-00805f9b34fb" 10173 + }, 10174 + "communication": [ 10175 + { 10176 + "btle": { 10177 + "names": [ 10178 + "TAY001" 10179 + ], 10180 + "services": { 10181 + "0000fff0-0000-1000-8000-00805f9b34fb": { 10182 + "tx": "0000fe02-0000-1000-8000-00805f9b34fb" 10183 + } 10184 + } 9826 10185 } 9827 10186 } 9828 - }, 10187 + ] 10188 + }, 10189 + "cowgirl": { 9829 10190 "defaults": { 9830 10191 "name": "The Cowgirl Device", 9831 10192 "features": [ ··· 9868 10229 ], 9869 10230 "name": "The Unicorn" 9870 10231 } 10232 + ], 10233 + "communication": [ 10234 + { 10235 + "btle": { 10236 + "names": [ 10237 + "THE COWGIRL", 10238 + "THE UNICORN" 10239 + ], 10240 + "services": { 10241 + "0000fe00-0000-1000-8000-00805f9b34fb": { 10242 + "tx": "0000fe01-0000-1000-8000-00805f9b34fb" 10243 + } 10244 + } 10245 + } 10246 + } 9871 10247 ] 9872 10248 }, 9873 10249 "galaku-pump": { 9874 - "btle": { 9875 - "names": [ 9876 - "V415" 9877 - ], 9878 - "services": { 9879 - "00001000-0000-1000-8000-00805f9b34fb": { 9880 - "tx": "00001001-0000-1000-8000-00805f9b34fb" 9881 - } 9882 - } 9883 - }, 9884 10250 "defaults": { 9885 10251 "name": "Galaku Device", 9886 10252 "features": [ ··· 9917 10283 ], 9918 10284 "name": "Galaku Nebula" 9919 10285 } 10286 + ], 10287 + "communication": [ 10288 + { 10289 + "btle": { 10290 + "names": [ 10291 + "V415" 10292 + ], 10293 + "services": { 10294 + "00001000-0000-1000-8000-00805f9b34fb": { 10295 + "tx": "00001001-0000-1000-8000-00805f9b34fb" 10296 + } 10297 + } 10298 + } 10299 + } 9920 10300 ] 9921 10301 }, 9922 10302 "xibao": { 9923 - "btle": { 9924 - "names": [ 9925 - "CCYB_*" 9926 - ], 9927 - "services": { 9928 - "0000fff0-0000-1000-8000-00805f9b34fb": { 9929 - "tx": "0000fff2-0000-1000-8000-00805f9b34fb" 9930 - } 9931 - } 9932 - }, 9933 10303 "defaults": { 9934 10304 "name": "Xibao Smart Masturbation Cup", 9935 10305 "features": [ ··· 9946 10316 } 9947 10317 } 9948 10318 ] 9949 - } 10319 + }, 10320 + "communication": [ 10321 + { 10322 + "btle": { 10323 + "names": [ 10324 + "CCYB_*" 10325 + ], 10326 + "services": { 10327 + "0000fff0-0000-1000-8000-00805f9b34fb": { 10328 + "tx": "0000fff2-0000-1000-8000-00805f9b34fb" 10329 + } 10330 + } 10331 + } 10332 + } 10333 + ] 9950 10334 }, 9951 10335 "sensee": { 9952 - "btle": { 9953 - "names": [ 9954 - "CTY222S4" 9955 - ], 9956 - "services": { 9957 - "0000fff0-0000-1000-8000-00805f9b34fb": { 9958 - "tx": "0000fff5-0000-1000-8000-00805f9b34fb" 9959 - } 9960 - } 9961 - }, 9962 10336 "defaults": { 9963 10337 "name": "Sensee Diandou Rabbit", 9964 10338 "features": [ ··· 9975 10349 } 9976 10350 } 9977 10351 ] 9978 - } 10352 + }, 10353 + "communication": [ 10354 + { 10355 + "btle": { 10356 + "names": [ 10357 + "CTY222S4" 10358 + ], 10359 + "services": { 10360 + "0000fff0-0000-1000-8000-00805f9b34fb": { 10361 + "tx": "0000fff5-0000-1000-8000-00805f9b34fb" 10362 + } 10363 + } 10364 + } 10365 + } 10366 + ] 9979 10367 }, 9980 10368 "sensee-capsule": { 9981 - "btle": { 9982 - "names": [ 9983 - "CCPA10S2" 9984 - ], 9985 - "services": { 9986 - "0000fff0-0000-1000-8000-00805f9b34fb": { 9987 - "tx": "0000fff5-0000-1000-8000-00805f9b34fb" 9988 - } 9989 - } 9990 - }, 9991 10369 "defaults": { 9992 10370 "name": "Sensee Capsule", 9993 10371 "features": [ ··· 10016 10394 } 10017 10395 } 10018 10396 ] 10019 - } 10020 - }, 10021 - "fox": { 10022 - "btle": { 10023 - "names": [ 10024 - "FOX", 10025 - "FOX M70 Pro", 10026 - "FoxM70Pro" 10027 - ], 10028 - "services": { 10029 - "0000ae00-0000-1000-8000-00805f9b34fb": { 10030 - "tx": "0000ae01-0000-1000-8000-00805f9b34fb" 10397 + }, 10398 + "communication": [ 10399 + { 10400 + "btle": { 10401 + "names": [ 10402 + "CCPA10S2" 10403 + ], 10404 + "services": { 10405 + "0000fff0-0000-1000-8000-00805f9b34fb": { 10406 + "tx": "0000fff5-0000-1000-8000-00805f9b34fb" 10407 + } 10408 + } 10031 10409 } 10032 10410 } 10033 - }, 10411 + ] 10412 + }, 10413 + "fox": { 10034 10414 "defaults": { 10035 10415 "name": "Fox Device", 10036 10416 "features": [ ··· 10047 10427 } 10048 10428 } 10049 10429 ] 10050 - } 10430 + }, 10431 + "communication": [ 10432 + { 10433 + "btle": { 10434 + "names": [ 10435 + "FOX", 10436 + "FOX M70 Pro", 10437 + "FoxM70Pro" 10438 + ], 10439 + "services": { 10440 + "0000ae00-0000-1000-8000-00805f9b34fb": { 10441 + "tx": "0000ae01-0000-1000-8000-00805f9b34fb" 10442 + } 10443 + } 10444 + } 10445 + } 10446 + ] 10051 10447 }, 10052 10448 "kizuna": { 10053 - "serial": [ 10054 - { 10055 - "port": "default", 10056 - "baud-rate": 19200, 10057 - "data-bits": 8, 10058 - "parity": "N", 10059 - "stop-bits": 1 10060 - } 10061 - ], 10062 10449 "defaults": { 10063 10450 "name": "Kizuna Smart", 10064 10451 "features": [ ··· 10075 10462 } 10076 10463 } 10077 10464 ] 10078 - } 10079 - }, 10080 - "xiuxiuda": { 10081 - "btle": { 10082 - "names": [ 10083 - "XXD-Lush*" 10084 - ], 10085 - "services": { 10086 - "53300001-0023-4bd4-bbd5-a6920e4c5653": { 10087 - "tx": "53300003-0023-4bd4-bbd5-a6920e4c5653" 10465 + }, 10466 + "communication": [ 10467 + { 10468 + "serial": { 10469 + "ports": [ 10470 + { 10471 + "port": "default", 10472 + "baud-rate": 19200, 10473 + "data-bits": 8, 10474 + "parity": "N", 10475 + "stop-bits": 1 10476 + } 10477 + ] 10088 10478 } 10089 10479 } 10090 - }, 10480 + ] 10481 + }, 10482 + "xiuxiuda": { 10091 10483 "defaults": { 10092 10484 "name": "Xiuxiuda Device", 10093 10485 "features": [ ··· 10104 10496 } 10105 10497 } 10106 10498 ] 10107 - } 10499 + }, 10500 + "communication": [ 10501 + { 10502 + "btle": { 10503 + "names": [ 10504 + "XXD-Lush*" 10505 + ], 10506 + "services": { 10507 + "53300001-0023-4bd4-bbd5-a6920e4c5653": { 10508 + "tx": "53300003-0023-4bd4-bbd5-a6920e4c5653" 10509 + } 10510 + } 10511 + } 10512 + } 10513 + ] 10108 10514 }, 10109 10515 "longlosttouch": { 10110 - "btle": { 10111 - "names": [ 10112 - "RS-KNW" 10113 - ], 10114 - "services": { 10115 - "0000cb60-0000-1000-8000-00805f9b34fb": { 10116 - "tx": "0000cb61-0000-1000-8000-00805f9b34fb", 10117 - "rx": "0000cb62-0000-1000-8000-00805f9b34fb" 10118 - } 10119 - } 10120 - }, 10121 10516 "defaults": { 10122 10517 "name": "Long Lost Touch Possible Kiss", 10123 10518 "features": [ ··· 10146 10541 } 10147 10542 } 10148 10543 ] 10149 - } 10150 - }, 10151 - "adrienlastic": { 10152 - "btle": { 10153 - "names": [ 10154 - "Placeholder to avoid conflict with bad attempt to clone a Lovense Lush" 10155 - ], 10156 - "advertised-services": [ 10157 - "00001320-0000-1000-8000-00805f9b34fb" 10158 - ], 10159 - "services": { 10160 - "6e400001-b5a3-f393-e0a9-e50e24dcca9e": { 10161 - "tx": "6e400002-b5a3-f393-e0a9-e50e24dcca9e" 10544 + }, 10545 + "communication": [ 10546 + { 10547 + "btle": { 10548 + "names": [ 10549 + "RS-KNW" 10550 + ], 10551 + "services": { 10552 + "0000cb60-0000-1000-8000-00805f9b34fb": { 10553 + "tx": "0000cb61-0000-1000-8000-00805f9b34fb", 10554 + "rx": "0000cb62-0000-1000-8000-00805f9b34fb" 10555 + } 10556 + } 10162 10557 } 10163 10558 } 10164 - }, 10559 + ] 10560 + }, 10561 + "adrienlastic": { 10165 10562 "defaults": { 10166 10563 "name": "Adrien Lastic Device", 10167 10564 "features": [ ··· 10192 10589 ], 10193 10590 "name": "Adrien Lastic Revelation" 10194 10591 } 10592 + ], 10593 + "communication": [ 10594 + { 10595 + "btle": { 10596 + "names": [ 10597 + "Placeholder to avoid conflict with bad attempt to clone a Lovense Lush" 10598 + ], 10599 + "advertised-services": [ 10600 + "00001320-0000-1000-8000-00805f9b34fb" 10601 + ], 10602 + "services": { 10603 + "6e400001-b5a3-f393-e0a9-e50e24dcca9e": { 10604 + "tx": "6e400002-b5a3-f393-e0a9-e50e24dcca9e" 10605 + } 10606 + } 10607 + } 10608 + } 10195 10609 ] 10196 10610 }, 10197 10611 "nintendo-joycon": { 10198 - "hid": [ 10199 - { 10200 - "vendor-id": 1406, 10201 - "product-id": 8199 10202 - }, 10203 - { 10204 - "vendor-id": 1406, 10205 - "product-id": 8198 10206 - }, 10207 - { 10208 - "vendor-id": 1406, 10209 - "product-id": 8201 10210 - } 10211 - ], 10212 10612 "defaults": { 10213 10613 "name": "Nintendo Joycon", 10214 10614 "features": [ ··· 10225 10625 } 10226 10626 } 10227 10627 ] 10228 - } 10229 - }, 10230 - "foreo": { 10231 - "btle": { 10232 - "names": [ 10233 - "FOFO", 10234 - "LUNA fofo", 10235 - "LUNA FOFO", 10236 - "LUNA PLAY SMART", 10237 - "LUNA PLAYSMART2", 10238 - "LUNA PLAY SMART2", 10239 - "LUNA play smart2", 10240 - "LUNA play smart 2", 10241 - "LUNA 3", 10242 - "LUNA3", 10243 - "LUNA3PLUS", 10244 - "LUNA3 PLUS", 10245 - "LUNA 3 PLUS", 10246 - "LUNA 3 plus", 10247 - "LUNA 3 MEN", 10248 - "LUNA3MEN", 10249 - "LUNA MINI3", 10250 - "LUNA MINI 3", 10251 - "LUNA mini 3", 10252 - "LUNA4PLUS", 10253 - "LUNA4", 10254 - "LUNA 4", 10255 - "LUNA4PLUS", 10256 - "LUNA4 PLUS", 10257 - "LUNA 4 plus", 10258 - "LUNA4MEN", 10259 - "LUNA 4 MEN", 10260 - "LUNA 4 FOR MEN", 10261 - "LUNA MINI4", 10262 - "LUNA MINI 4", 10263 - "LUNA mini 4", 10264 - "LUNA 4 mini", 10265 - "UFO", 10266 - "UFO mini", 10267 - "UFO MINI", 10268 - "UFO MIN", 10269 - "UFO2", 10270 - "UFO 2", 10271 - "UFOMINI2", 10272 - "UFO mini 2", 10273 - "UFO3", 10274 - "UFO3mini", 10275 - "UFO3go", 10276 - "UFO3led", 10277 - "BEAR", 10278 - "BEAR_MINI", 10279 - "BEAR MINI", 10280 - "BEAR mini", 10281 - "BEAR2", 10282 - "BEAR 2", 10283 - "BEAR2go", 10284 - "BEAR2body", 10285 - "BEAR2eyes", 10286 - "KIWI", 10287 - "KIWI derma" 10288 - ], 10289 - "services": { 10290 - "0000fff0-0000-1000-8000-00805f9b34fb": { 10291 - "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 10628 + }, 10629 + "communication": [ 10630 + { 10631 + "hid": { 10632 + "pairs": [ 10633 + { 10634 + "vendor-id": 1406, 10635 + "product-id": 8199 10636 + }, 10637 + { 10638 + "vendor-id": 1406, 10639 + "product-id": 8198 10640 + }, 10641 + { 10642 + "vendor-id": 1406, 10643 + "product-id": 8201 10644 + } 10645 + ] 10292 10646 } 10293 10647 } 10294 - }, 10648 + ] 10649 + }, 10650 + "foreo": { 10295 10651 "defaults": { 10296 10652 "name": "Foreo Device", 10297 10653 "features": [ ··· 10494 10850 ], 10495 10851 "name": "Foreo KIWI derma" 10496 10852 } 10853 + ], 10854 + "communication": [ 10855 + { 10856 + "btle": { 10857 + "names": [ 10858 + "FOFO", 10859 + "LUNA fofo", 10860 + "LUNA FOFO", 10861 + "LUNA PLAY SMART", 10862 + "LUNA PLAYSMART2", 10863 + "LUNA PLAY SMART2", 10864 + "LUNA play smart2", 10865 + "LUNA play smart 2", 10866 + "LUNA 3", 10867 + "LUNA3", 10868 + "LUNA3PLUS", 10869 + "LUNA3 PLUS", 10870 + "LUNA 3 PLUS", 10871 + "LUNA 3 plus", 10872 + "LUNA 3 MEN", 10873 + "LUNA3MEN", 10874 + "LUNA MINI3", 10875 + "LUNA MINI 3", 10876 + "LUNA mini 3", 10877 + "LUNA4PLUS", 10878 + "LUNA4", 10879 + "LUNA 4", 10880 + "LUNA4PLUS", 10881 + "LUNA4 PLUS", 10882 + "LUNA 4 plus", 10883 + "LUNA4MEN", 10884 + "LUNA 4 MEN", 10885 + "LUNA 4 FOR MEN", 10886 + "LUNA MINI4", 10887 + "LUNA MINI 4", 10888 + "LUNA mini 4", 10889 + "LUNA 4 mini", 10890 + "UFO", 10891 + "UFO mini", 10892 + "UFO MINI", 10893 + "UFO MIN", 10894 + "UFO2", 10895 + "UFO 2", 10896 + "UFOMINI2", 10897 + "UFO mini 2", 10898 + "UFO3", 10899 + "UFO3mini", 10900 + "UFO3go", 10901 + "UFO3led", 10902 + "BEAR", 10903 + "BEAR_MINI", 10904 + "BEAR MINI", 10905 + "BEAR mini", 10906 + "BEAR2", 10907 + "BEAR 2", 10908 + "BEAR2go", 10909 + "BEAR2body", 10910 + "BEAR2eyes", 10911 + "KIWI", 10912 + "KIWI derma" 10913 + ], 10914 + "services": { 10915 + "0000fff0-0000-1000-8000-00805f9b34fb": { 10916 + "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 10917 + } 10918 + } 10919 + } 10920 + } 10497 10921 ] 10498 10922 }, 10499 10923 "monsterpub": { 10500 - "btle": { 10501 - "names": [ 10502 - "MonsterPub" 10503 - ], 10504 - "services": { 10505 - "00006000-0000-1000-8000-00805f9b34fb": { 10506 - "tx": "00006001-0000-1000-8000-00805f9b34fb", 10507 - "txmode": "00006002-0000-1000-8000-00805f9b34fb", 10508 - "txvibrate": "00006003-0000-1000-8000-00805f9b34fb" 10509 - }, 10510 - "00006010-0000-1000-8000-00805f9b34fb": { 10511 - "rxblemodel": "00006014-0000-1000-8000-00805f9b34fb" 10512 - }, 10513 - "00008000-0000-1000-8000-00805f9b34fb": { 10514 - "rx": "00008001-0000-1000-8000-00805f9b34fb" 10515 - } 10516 - } 10517 - }, 10518 10924 "defaults": { 10519 10925 "name": "Sistalk MonsterPub Device", 10520 10926 "features": [ ··· 10673 11079 ], 10674 11080 "name": "Sistalk MonsterPub BeatHeart" 10675 11081 } 11082 + ], 11083 + "communication": [ 11084 + { 11085 + "btle": { 11086 + "names": [ 11087 + "MonsterPub" 11088 + ], 11089 + "services": { 11090 + "00006000-0000-1000-8000-00805f9b34fb": { 11091 + "tx": "00006001-0000-1000-8000-00805f9b34fb", 11092 + "txmode": "00006002-0000-1000-8000-00805f9b34fb", 11093 + "txvibrate": "00006003-0000-1000-8000-00805f9b34fb" 11094 + }, 11095 + "00006010-0000-1000-8000-00805f9b34fb": { 11096 + "rxblemodel": "00006014-0000-1000-8000-00805f9b34fb" 11097 + }, 11098 + "00008000-0000-1000-8000-00805f9b34fb": { 11099 + "rx": "00008001-0000-1000-8000-00805f9b34fb" 11100 + } 11101 + } 11102 + } 11103 + } 10676 11104 ] 10677 11105 }, 10678 11106 "joyhub": { 10679 - "btle": { 10680 - "names": [ 10681 - "J-Petalwish2", 10682 - "J-VortexTongue", 10683 - "J-Velocity", 10684 - "JOYHUB-ROSELLA2", 10685 - "J-VibSiren", 10686 - "J-ElixirEgg", 10687 - "J-RetroGuard", 10688 - "J-TrueForm3" 10689 - ], 10690 - "services": { 10691 - "0000ffa0-0000-1000-8000-00805f9b34fb": { 10692 - "tx": "0000ffa1-0000-1000-8000-00805f9b34fb" 10693 - } 10694 - } 10695 - }, 10696 11107 "defaults": { 10697 11108 "name": "JoyHub Device", 10698 11109 "features": [ ··· 10864 11275 } 10865 11276 ] 10866 11277 } 11278 + ], 11279 + "communication": [ 11280 + { 11281 + "btle": { 11282 + "names": [ 11283 + "J-Petalwish2", 11284 + "J-VortexTongue", 11285 + "J-Velocity", 11286 + "JOYHUB-ROSELLA2", 11287 + "J-VibSiren", 11288 + "J-ElixirEgg", 11289 + "J-RetroGuard", 11290 + "J-TrueForm3" 11291 + ], 11292 + "services": { 11293 + "0000ffa0-0000-1000-8000-00805f9b34fb": { 11294 + "tx": "0000ffa1-0000-1000-8000-00805f9b34fb" 11295 + } 11296 + } 11297 + } 11298 + } 10867 11299 ] 10868 11300 }, 10869 11301 "joyhub-v2": { 10870 - "btle": { 10871 - "names": [ 10872 - "J-Pearlconch", 10873 - "J-PetiteRose", 10874 - "J-MoonHorn", 10875 - "J-VibTrefoil", 10876 - "J-Panther", 10877 - "J-Mecha", 10878 - "J-Lagoon", 10879 - "J-Firedragon" 10880 - ], 10881 - "services": { 10882 - "0000ffa0-0000-1000-8000-00805f9b34fb": { 10883 - "tx": "0000ffa1-0000-1000-8000-00805f9b34fb" 10884 - } 10885 - } 10886 - }, 10887 11302 "defaults": { 10888 11303 "name": "JoyHub Device", 10889 11304 "features": [ ··· 11163 11578 } 11164 11579 ] 11165 11580 } 11581 + ], 11582 + "communication": [ 11583 + { 11584 + "btle": { 11585 + "names": [ 11586 + "J-Pearlconch", 11587 + "J-PetiteRose", 11588 + "J-MoonHorn", 11589 + "J-VibTrefoil", 11590 + "J-Panther", 11591 + "J-Mecha", 11592 + "J-Lagoon", 11593 + "J-Firedragon" 11594 + ], 11595 + "services": { 11596 + "0000ffa0-0000-1000-8000-00805f9b34fb": { 11597 + "tx": "0000ffa1-0000-1000-8000-00805f9b34fb" 11598 + } 11599 + } 11600 + } 11601 + } 11166 11602 ] 11167 11603 }, 11168 11604 "itoys": { 11169 - "btle": { 11170 - "names": [ 11171 - "26-021-B" 11172 - ], 11173 - "services": { 11174 - "0000ffa0-0000-1000-8000-00805f9b34fb": { 11175 - "tx": "0000ffa1-0000-1000-8000-00805f9b34fb" 11176 - } 11177 - } 11178 - }, 11179 11605 "defaults": { 11180 11606 "name": "iToys Seagull", 11181 11607 "features": [ ··· 11192 11618 } 11193 11619 } 11194 11620 ] 11195 - } 11621 + }, 11622 + "communication": [ 11623 + { 11624 + "btle": { 11625 + "names": [ 11626 + "26-021-B" 11627 + ], 11628 + "services": { 11629 + "0000ffa0-0000-1000-8000-00805f9b34fb": { 11630 + "tx": "0000ffa1-0000-1000-8000-00805f9b34fb" 11631 + } 11632 + } 11633 + } 11634 + } 11635 + ] 11196 11636 }, 11197 11637 "leten": { 11198 - "btle": { 11199 - "names": [ 11200 - "T528-LT", 11201 - "F537-LT", 11202 - "F520B-LT", 11203 - "F520A-LT" 11204 - ], 11205 - "services": { 11206 - "0000fff0-0000-1000-8000-00805f9b34fb": { 11207 - "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 11208 - }, 11209 - "0000ffe0-0000-1000-8000-00805f9b34fb": { 11210 - "rx": "0000ffe1-0000-1000-8000-00805f9b34fb" 11211 - } 11212 - } 11213 - }, 11214 11638 "defaults": { 11215 11639 "name": "Leten Device", 11216 11640 "features": [ ··· 11227 11651 } 11228 11652 } 11229 11653 ] 11230 - } 11231 - }, 11232 - "vibcrafter": { 11233 - "btle": { 11234 - "names": [ 11235 - "be gentle" 11236 - ], 11237 - "services": { 11238 - "53300051-0060-4bd4-bbe5-a6920e4c5663": { 11239 - "tx": "53300052-0060-4bd4-bbe5-a6920e4c5663", 11240 - "rx": "53300053-0060-4bd4-bbe5-a6920e4c5663" 11654 + }, 11655 + "communication": [ 11656 + { 11657 + "btle": { 11658 + "names": [ 11659 + "T528-LT", 11660 + "F537-LT", 11661 + "F520B-LT", 11662 + "F520A-LT" 11663 + ], 11664 + "services": { 11665 + "0000fff0-0000-1000-8000-00805f9b34fb": { 11666 + "tx": "0000fff1-0000-1000-8000-00805f9b34fb" 11667 + }, 11668 + "0000ffe0-0000-1000-8000-00805f9b34fb": { 11669 + "rx": "0000ffe1-0000-1000-8000-00805f9b34fb" 11670 + } 11671 + } 11241 11672 } 11242 11673 } 11243 - }, 11674 + ] 11675 + }, 11676 + "vibcrafter": { 11244 11677 "defaults": { 11245 11678 "name": "VibCrafter Device", 11246 11679 "features": [ ··· 11269 11702 } 11270 11703 } 11271 11704 ] 11272 - } 11705 + }, 11706 + "communication": [ 11707 + { 11708 + "btle": { 11709 + "names": [ 11710 + "be gentle" 11711 + ], 11712 + "services": { 11713 + "53300051-0060-4bd4-bbe5-a6920e4c5663": { 11714 + "tx": "53300052-0060-4bd4-bbe5-a6920e4c5663", 11715 + "rx": "53300053-0060-4bd4-bbe5-a6920e4c5663" 11716 + } 11717 + } 11718 + } 11719 + } 11720 + ] 11273 11721 } 11274 11722 } 11275 11723 }
+19 -1
buttplug/buttplug-device-config/convert-v2-to-v3.js
··· 87 87 } 88 88 89 89 // Get document, or throw exception on error 90 - const doc = yaml.load(fs.readFileSync('./device-config-v2/buttplug-device-config.yml', 'utf8')); 90 + const doc = yaml.load(fs.readFileSync('./device-config-v2/buttplug-device-config-v2.yml', 'utf8')); 91 91 for (var protocol in doc["protocols"]) { 92 92 console.log(protocol); 93 + let comm_array = []; 94 + for (var comm_type of ["btle", "hid", "usb", "serial", "xinput", "lovense-connect-service"]) 95 + if (doc["protocols"][protocol][comm_type]) { 96 + let obj = {}; 97 + if (["serial"].includes(comm_type)) { 98 + obj[comm_type] = {}; 99 + obj[comm_type]["ports"] = doc["protocols"][protocol][comm_type]; 100 + } else if (["hid", "usb"].includes(comm_type)) { 101 + obj[comm_type] = {}; 102 + obj[comm_type]["pairs"] = doc["protocols"][protocol][comm_type]; 103 + } else { 104 + obj[comm_type] = doc["protocols"][protocol][comm_type]; 105 + } 106 + comm_array.push(obj); 107 + doc["protocols"][protocol][comm_type] = undefined; 108 + } 109 + doc["protocols"][protocol]["communication"] = comm_array; 110 + 93 111 if (doc["protocols"][protocol]["defaults"] === undefined) { 94 112 console.log("No defaults for protocol"); 95 113 }
+119 -88
buttplug/buttplug-device-config/device-config-v3/buttplug-device-config-schema-v3.json
··· 91 91 ] 92 92 }, 93 93 "serial-definition": { 94 - "type": "array", 95 - "items": { 96 - "type": "object", 97 - "properties": { 98 - "port": { 99 - "type": "string" 100 - }, 101 - "baud-rate": { 102 - "type": "integer" 103 - }, 104 - "data-bits": { 105 - "type": "integer" 106 - }, 107 - "parity": { 108 - "type": "string" 94 + "type": "object", 95 + "properties": { 96 + "ports": { 97 + "type": "array", 98 + "items": { 99 + "type": "object", 100 + "properties": { 101 + "port": { 102 + "type": "string" 103 + }, 104 + "baud-rate": { 105 + "type": "integer" 106 + }, 107 + "data-bits": { 108 + "type": "integer" 109 + }, 110 + "parity": { 111 + "type": "string" 112 + }, 113 + "stop-bits": { 114 + "type": "integer" 115 + } 116 + }, 117 + "required": [ 118 + "port", 119 + "baud-rate", 120 + "data-bits", 121 + "parity", 122 + "stop-bits" 123 + ], 124 + "additionalProperties": false 109 125 }, 110 - "stop-bits": { 111 - "type": "integer" 112 - } 113 - }, 114 - "required": [ 115 - "port", 116 - "baud-rate", 117 - "data-bits", 118 - "parity", 119 - "stop-bits" 120 - ], 121 - "additionalProperties": false 126 + "minItems": 1 127 + } 122 128 }, 123 - "minItems": 1 129 + "required": ["ports"] 124 130 }, 125 131 "xinput-definition": { 126 132 "type": "object", ··· 139 145 } 140 146 }, 141 147 "usb-definition": { 142 - "type": "array", 143 - "items": { 144 - "type": "object", 145 - "properties": { 146 - "vendor-id": { 147 - "type": "integer", 148 - "minimum": 0, 149 - "maximum": 65535 148 + "type": "object", 149 + "properties": { 150 + "pairs": { 151 + "type": "array", 152 + "items": { 153 + "type": "object", 154 + "properties": { 155 + "vendor-id": { 156 + "type": "integer", 157 + "minimum": 0, 158 + "maximum": 65535 159 + }, 160 + "product-id": { 161 + "type": "integer", 162 + "minimum": 0, 163 + "maximum": 65535 164 + } 165 + }, 166 + "required": [ 167 + "vendor-id", 168 + "product-id" 169 + ], 170 + "additionalProperties": false 150 171 }, 151 - "product-id": { 152 - "type": "integer", 153 - "minimum": 0, 154 - "maximum": 65535 155 - } 156 - }, 157 - "required": [ 158 - "vendor-id", 159 - "product-id" 160 - ], 161 - "additionalProperties": false 172 + "minItems": 1 173 + } 162 174 }, 163 - "minItems": 1 175 + "required": ["pairs"] 164 176 }, 165 177 "step-range": { 166 178 "description": "Specifies the range of steps to use for a device. Devices will use the low end value as a stop.", ··· 401 413 "^.*$": { 402 414 "type": "object", 403 415 "properties": { 404 - "btle": { 405 - "$ref": "#/components/btle-definition" 406 - }, 407 - "serial": { 408 - "$ref": "#/components/serial-definition" 409 - }, 410 - "websocket": { 411 - "$ref": "#/components/websocket-definition" 412 - }, 413 - "usb": { 414 - "$ref": "#/components/usb-definition" 416 + "communication": { 417 + "type": "array", 418 + "items": { 419 + "type": "object", 420 + "properties": { 421 + "btle": { 422 + "$ref": "#/components/btle-definition" 423 + }, 424 + "serial": { 425 + "$ref": "#/components/serial-definition" 426 + }, 427 + "websocket": { 428 + "$ref": "#/components/websocket-definition" 429 + }, 430 + "usb": { 431 + "$ref": "#/components/usb-definition" 432 + }, 433 + "hid": { 434 + "$ref": "#/components/usb-definition" 435 + }, 436 + "xinput": { 437 + "$ref": "#/components/xinput-definition" 438 + }, 439 + "lovense-connect-service": { 440 + "$ref": "#/components/lovense-connect-service-definition" 441 + } 442 + } 443 + }, 444 + "maxProperties": 1 415 445 }, 416 - "hid": { 417 - "$ref": "#/components/usb-definition" 418 - }, 419 - "xinput": { 420 - "$ref": "#/components/xinput-definition" 421 - }, 422 - "lovense-connect-service": { 423 - "$ref": "#/components/lovense-connect-service-definition" 424 - }, 425 - "defaults": { 426 - "$ref": "#/components/defaults-definition" 427 - }, 428 - "configurations": { 429 - "$ref": "#/components/configurations-definition" 446 + "devices": { 447 + "type": "object", 448 + "properties": { 449 + "defaults": { 450 + "$ref": "#/components/defaults-definition" 451 + }, 452 + "configurations": { 453 + "$ref": "#/components/configurations-definition" 454 + } 455 + } 430 456 } 431 457 } 432 458 } ··· 436 462 "user-configs": { 437 463 "type": "object", 438 464 "properties": { 439 - "specifiers": { 465 + "communication": { 440 466 "type": "object", 441 467 "patternProperties": { 442 468 "^.*$": { 443 469 "type": "object", 444 470 "properties": { 445 - "btle": { 446 - "$ref": "#/components/btle-definition" 447 - }, 448 - "serial": { 449 - "$ref": "#/components/serial-definition" 450 - }, 451 - "websocket": { 452 - "$ref": "#/components/websocket-definition" 453 - }, 454 - "usb": { 455 - "$ref": "#/components/usb-definition" 456 - }, 457 - "hid": { 458 - "$ref": "#/components/usb-definition" 471 + "communication": { 472 + "type": "object", 473 + "properties": { 474 + "btle": { 475 + "$ref": "#/components/btle-definition" 476 + }, 477 + "serial": { 478 + "$ref": "#/components/serial-definition" 479 + }, 480 + "websocket": { 481 + "$ref": "#/components/websocket-definition" 482 + }, 483 + "usb": { 484 + "$ref": "#/components/usb-definition" 485 + }, 486 + "hid": { 487 + "$ref": "#/components/usb-definition" 488 + } 489 + } 459 490 } 460 491 } 461 492 },
+1233 -1116
buttplug/buttplug-device-config/device-config-v3/buttplug-device-config-v3.yml
··· 3 3 minor: 0 4 4 protocols: 5 5 lovense: 6 - btle: 7 - names: 8 - - LVS-* 9 - - LOVE-* 10 - manufacturer-data: 11 - - company: 620 12 - data: 13 - - 255 14 - - 33 15 - services: 16 - 0000fff0-0000-1000-8000-00805f9b34fb: 17 - tx: 0000fff2-0000-1000-8000-00805f9b34fb 18 - rx: 0000fff1-0000-1000-8000-00805f9b34fb 19 - 6e400001-b5a3-f393-e0a9-e50e24dcca9e: 20 - tx: 6e400002-b5a3-f393-e0a9-e50e24dcca9e 21 - rx: 6e400003-b5a3-f393-e0a9-e50e24dcca9e 22 - 50300001-0024-4bd4-bbd5-a6920e4c5653: 23 - tx: 50300002-0024-4bd4-bbd5-a6920e4c5653 24 - rx: 50300003-0024-4bd4-bbd5-a6920e4c5653 25 - 57300001-0023-4bd4-bbd5-a6920e4c5653: 26 - tx: 57300002-0023-4bd4-bbd5-a6920e4c5653 27 - rx: 57300003-0023-4bd4-bbd5-a6920e4c5653 28 - 5a300001-0024-4bd4-bbd5-a6920e4c5653: 29 - tx: 5a300002-0024-4bd4-bbd5-a6920e4c5653 30 - rx: 5a300003-0024-4bd4-bbd5-a6920e4c5653 31 - 50300001-0023-4bd4-bbd5-a6920e4c5653: 32 - tx: 50300002-0023-4bd4-bbd5-a6920e4c5653 33 - rx: 50300003-0023-4bd4-bbd5-a6920e4c5653 34 - 53300001-0023-4bd4-bbd5-a6920e4c5653: 35 - tx: 53300002-0023-4bd4-bbd5-a6920e4c5653 36 - rx: 53300003-0023-4bd4-bbd5-a6920e4c5653 37 - 5a300001-0023-4bd4-bbd5-a6920e4c5653: 38 - tx: 5a300002-0023-4bd4-bbd5-a6920e4c5653 39 - rx: 5a300003-0023-4bd4-bbd5-a6920e4c5653 40 - 4f300001-0023-4bd4-bbd5-a6920e4c5653: 41 - tx: 4f300002-0023-4bd4-bbd5-a6920e4c5653 42 - rx: 4f300003-0023-4bd4-bbd5-a6920e4c5653 43 - 42300001-0023-4bd4-bbd5-a6920e4c5653: 44 - tx: 42300002-0023-4bd4-bbd5-a6920e4c5653 45 - rx: 42300003-0023-4bd4-bbd5-a6920e4c5653 46 - 43300001-0023-4bd4-bbd5-a6920e4c5653: 47 - tx: 43300002-0023-4bd4-bbd5-a6920e4c5653 48 - rx: 43300003-0023-4bd4-bbd5-a6920e4c5653 49 - 4c300001-0023-4bd4-bbd5-a6920e4c5653: 50 - tx: 4c300002-0023-4bd4-bbd5-a6920e4c5653 51 - rx: 4c300003-0023-4bd4-bbd5-a6920e4c5653 52 - 4c410001-0023-4bd4-bbd5-a6920e4c5653: 53 - tx: 4c410002-0023-4bd4-bbd5-a6920e4c5653 54 - rx: 4c410003-0023-4bd4-bbd5-a6920e4c5653 55 - 56300001-0023-4bd4-bbd5-a6920e4c5653: 56 - tx: 56300002-0023-4bd4-bbd5-a6920e4c5653 57 - rx: 56300003-0023-4bd4-bbd5-a6920e4c5653 58 - 58300001-0023-4bd4-bbd5-a6920e4c5653: 59 - tx: 58300002-0023-4bd4-bbd5-a6920e4c5653 60 - rx: 58300003-0023-4bd4-bbd5-a6920e4c5653 61 - 52300001-0023-4bd4-bbd5-a6920e4c5653: 62 - tx: 52300002-0023-4bd4-bbd5-a6920e4c5653 63 - rx: 52300003-0023-4bd4-bbd5-a6920e4c5653 64 - 46300001-0023-4bd4-bbd5-a6920e4c5653: 65 - tx: 46300002-0023-4bd4-bbd5-a6920e4c5653 66 - rx: 46300003-0023-4bd4-bbd5-a6920e4c5653 67 - 50300011-0023-4bd4-bbd5-a6920e4c5653: 68 - tx: 50300012-0023-4bd4-bbd5-a6920e4c5653 69 - rx: 50300013-0023-4bd4-bbd5-a6920e4c5653 70 - 4a300001-0023-4bd4-bbd5-a6920e4c5653: 71 - tx: 4a300002-0023-4bd4-bbd5-a6920e4c5653 72 - rx: 4a300003-0023-4bd4-bbd5-a6920e4c5653 73 - 45440001-0023-4bd4-bbd5-a6920e4c5653: 74 - tx: 45440002-0023-4bd4-bbd5-a6920e4c5653 75 - rx: 45440003-0023-4bd4-bbd5-a6920e4c5653 76 - 45420001-0023-4bd4-bbd5-a6920e4c5653: 77 - tx: 45420002-0023-4bd4-bbd5-a6920e4c5653 78 - rx: 45420003-0023-4bd4-bbd5-a6920e4c5653 79 - 54300001-0023-4bd4-bbd5-a6920e4c5653: 80 - tx: 54300002-0023-4bd4-bbd5-a6920e4c5653 81 - rx: 54300003-0023-4bd4-bbd5-a6920e4c5653 82 - 45490001-0023-4bd4-bbd5-a6920e4c5653: 83 - tx: 45490002-0023-4bd4-bbd5-a6920e4c5653 84 - rx: 45490003-0023-4bd4-bbd5-a6920e4c5653 85 - 4e300001-0023-4bd4-bbd5-a6920e4c5653: 86 - tx: 4e300002-0023-4bd4-bbd5-a6920e4c5653 87 - rx: 4e300003-0023-4bd4-bbd5-a6920e4c5653 88 - 45410001-0023-4bd4-bbd5-a6920e4c5653: 89 - tx: 45410002-0023-4bd4-bbd5-a6920e4c5653 90 - rx: 45410003-0023-4bd4-bbd5-a6920e4c5653 91 - 51300001-0023-4bd4-bbd5-a6920e4c5653: 92 - tx: 51300002-0023-4bd4-bbd5-a6920e4c5653 93 - rx: 51300003-0023-4bd4-bbd5-a6920e4c5653 94 - 45460001-0023-4bd4-bbd5-a6920e4c5653: 95 - tx: 45460002-0023-4bd4-bbd5-a6920e4c5653 96 - rx: 45460003-0023-4bd4-bbd5-a6920e4c5653 97 - 454c0001-0023-4bd4-bbd5-a6920e4c5653: 98 - tx: 454c0002-0023-4bd4-bbd5-a6920e4c5653 99 - rx: 454c0003-0023-4bd4-bbd5-a6920e4c5653 100 - 55300001-0023-4bd4-bbd5-a6920e4c5653: 101 - tx: 55300002-0023-4bd4-bbd5-a6920e4c5653 102 - rx: 55300003-0023-4bd4-bbd5-a6920e4c5653 103 - 53440001-0023-4bd4-bbd5-a6920e4c5653: 104 - tx: 53440002-0023-4bd4-bbd5-a6920e4c5653 105 - rx: 53440003-0023-4bd4-bbd5-a6920e4c5653 106 - 48300001-0023-4bd4-bbd5-a6920e4c5653: 107 - tx: 48300002-0023-4bd4-bbd5-a6920e4c5653 108 - rx: 48300003-0023-4bd4-bbd5-a6920e4c5653 109 6 defaults: 110 7 name: Lovense Device 111 8 features: ··· 490 387 - 100 491 388 messages: 492 389 - SensorReadCmd 390 + communication: 391 + - btle: 392 + names: 393 + - LVS-* 394 + - LOVE-* 395 + manufacturer-data: 396 + - company: 620 397 + data: 398 + - 255 399 + - 33 400 + services: 401 + 0000fff0-0000-1000-8000-00805f9b34fb: 402 + tx: 0000fff2-0000-1000-8000-00805f9b34fb 403 + rx: 0000fff1-0000-1000-8000-00805f9b34fb 404 + 6e400001-b5a3-f393-e0a9-e50e24dcca9e: 405 + tx: 6e400002-b5a3-f393-e0a9-e50e24dcca9e 406 + rx: 6e400003-b5a3-f393-e0a9-e50e24dcca9e 407 + 50300001-0024-4bd4-bbd5-a6920e4c5653: 408 + tx: 50300002-0024-4bd4-bbd5-a6920e4c5653 409 + rx: 50300003-0024-4bd4-bbd5-a6920e4c5653 410 + 57300001-0023-4bd4-bbd5-a6920e4c5653: 411 + tx: 57300002-0023-4bd4-bbd5-a6920e4c5653 412 + rx: 57300003-0023-4bd4-bbd5-a6920e4c5653 413 + 5a300001-0024-4bd4-bbd5-a6920e4c5653: 414 + tx: 5a300002-0024-4bd4-bbd5-a6920e4c5653 415 + rx: 5a300003-0024-4bd4-bbd5-a6920e4c5653 416 + 50300001-0023-4bd4-bbd5-a6920e4c5653: 417 + tx: 50300002-0023-4bd4-bbd5-a6920e4c5653 418 + rx: 50300003-0023-4bd4-bbd5-a6920e4c5653 419 + 53300001-0023-4bd4-bbd5-a6920e4c5653: 420 + tx: 53300002-0023-4bd4-bbd5-a6920e4c5653 421 + rx: 53300003-0023-4bd4-bbd5-a6920e4c5653 422 + 5a300001-0023-4bd4-bbd5-a6920e4c5653: 423 + tx: 5a300002-0023-4bd4-bbd5-a6920e4c5653 424 + rx: 5a300003-0023-4bd4-bbd5-a6920e4c5653 425 + 4f300001-0023-4bd4-bbd5-a6920e4c5653: 426 + tx: 4f300002-0023-4bd4-bbd5-a6920e4c5653 427 + rx: 4f300003-0023-4bd4-bbd5-a6920e4c5653 428 + 42300001-0023-4bd4-bbd5-a6920e4c5653: 429 + tx: 42300002-0023-4bd4-bbd5-a6920e4c5653 430 + rx: 42300003-0023-4bd4-bbd5-a6920e4c5653 431 + 43300001-0023-4bd4-bbd5-a6920e4c5653: 432 + tx: 43300002-0023-4bd4-bbd5-a6920e4c5653 433 + rx: 43300003-0023-4bd4-bbd5-a6920e4c5653 434 + 4c300001-0023-4bd4-bbd5-a6920e4c5653: 435 + tx: 4c300002-0023-4bd4-bbd5-a6920e4c5653 436 + rx: 4c300003-0023-4bd4-bbd5-a6920e4c5653 437 + 4c410001-0023-4bd4-bbd5-a6920e4c5653: 438 + tx: 4c410002-0023-4bd4-bbd5-a6920e4c5653 439 + rx: 4c410003-0023-4bd4-bbd5-a6920e4c5653 440 + 56300001-0023-4bd4-bbd5-a6920e4c5653: 441 + tx: 56300002-0023-4bd4-bbd5-a6920e4c5653 442 + rx: 56300003-0023-4bd4-bbd5-a6920e4c5653 443 + 58300001-0023-4bd4-bbd5-a6920e4c5653: 444 + tx: 58300002-0023-4bd4-bbd5-a6920e4c5653 445 + rx: 58300003-0023-4bd4-bbd5-a6920e4c5653 446 + 52300001-0023-4bd4-bbd5-a6920e4c5653: 447 + tx: 52300002-0023-4bd4-bbd5-a6920e4c5653 448 + rx: 52300003-0023-4bd4-bbd5-a6920e4c5653 449 + 46300001-0023-4bd4-bbd5-a6920e4c5653: 450 + tx: 46300002-0023-4bd4-bbd5-a6920e4c5653 451 + rx: 46300003-0023-4bd4-bbd5-a6920e4c5653 452 + 50300011-0023-4bd4-bbd5-a6920e4c5653: 453 + tx: 50300012-0023-4bd4-bbd5-a6920e4c5653 454 + rx: 50300013-0023-4bd4-bbd5-a6920e4c5653 455 + 4a300001-0023-4bd4-bbd5-a6920e4c5653: 456 + tx: 4a300002-0023-4bd4-bbd5-a6920e4c5653 457 + rx: 4a300003-0023-4bd4-bbd5-a6920e4c5653 458 + 45440001-0023-4bd4-bbd5-a6920e4c5653: 459 + tx: 45440002-0023-4bd4-bbd5-a6920e4c5653 460 + rx: 45440003-0023-4bd4-bbd5-a6920e4c5653 461 + 45420001-0023-4bd4-bbd5-a6920e4c5653: 462 + tx: 45420002-0023-4bd4-bbd5-a6920e4c5653 463 + rx: 45420003-0023-4bd4-bbd5-a6920e4c5653 464 + 54300001-0023-4bd4-bbd5-a6920e4c5653: 465 + tx: 54300002-0023-4bd4-bbd5-a6920e4c5653 466 + rx: 54300003-0023-4bd4-bbd5-a6920e4c5653 467 + 45490001-0023-4bd4-bbd5-a6920e4c5653: 468 + tx: 45490002-0023-4bd4-bbd5-a6920e4c5653 469 + rx: 45490003-0023-4bd4-bbd5-a6920e4c5653 470 + 4e300001-0023-4bd4-bbd5-a6920e4c5653: 471 + tx: 4e300002-0023-4bd4-bbd5-a6920e4c5653 472 + rx: 4e300003-0023-4bd4-bbd5-a6920e4c5653 473 + 45410001-0023-4bd4-bbd5-a6920e4c5653: 474 + tx: 45410002-0023-4bd4-bbd5-a6920e4c5653 475 + rx: 45410003-0023-4bd4-bbd5-a6920e4c5653 476 + 51300001-0023-4bd4-bbd5-a6920e4c5653: 477 + tx: 51300002-0023-4bd4-bbd5-a6920e4c5653 478 + rx: 51300003-0023-4bd4-bbd5-a6920e4c5653 479 + 45460001-0023-4bd4-bbd5-a6920e4c5653: 480 + tx: 45460002-0023-4bd4-bbd5-a6920e4c5653 481 + rx: 45460003-0023-4bd4-bbd5-a6920e4c5653 482 + 454c0001-0023-4bd4-bbd5-a6920e4c5653: 483 + tx: 454c0002-0023-4bd4-bbd5-a6920e4c5653 484 + rx: 454c0003-0023-4bd4-bbd5-a6920e4c5653 485 + 55300001-0023-4bd4-bbd5-a6920e4c5653: 486 + tx: 55300002-0023-4bd4-bbd5-a6920e4c5653 487 + rx: 55300003-0023-4bd4-bbd5-a6920e4c5653 488 + 53440001-0023-4bd4-bbd5-a6920e4c5653: 489 + tx: 53440002-0023-4bd4-bbd5-a6920e4c5653 490 + rx: 53440003-0023-4bd4-bbd5-a6920e4c5653 491 + 48300001-0023-4bd4-bbd5-a6920e4c5653: 492 + tx: 48300002-0023-4bd4-bbd5-a6920e4c5653 493 + rx: 48300003-0023-4bd4-bbd5-a6920e4c5653 493 494 lovense-connect-service: 494 - lovense-connect-service: 495 - exists: true 496 495 defaults: 497 496 name: Lovense Connect Service Device 498 497 features: ··· 862 861 - 100 863 862 messages: 864 863 - SensorReadCmd 864 + communication: 865 + - lovense-connect-service: 866 + exists: true 865 867 xinput: 866 - xinput: 867 - exists: true 868 868 defaults: 869 869 name: XBox (XInput) Compatible Gamepad 870 870 features: ··· 882 882 - 65535 883 883 messages: 884 884 - ScalarCmd 885 + communication: 886 + - xinput: 887 + exists: true 885 888 kiiroo-v2: 886 - btle: 887 - names: 888 - - Launch 889 - - Onyx2 890 - services: 891 - 88f80580-0000-01e6-aace-0002a5d5c51b: 892 - tx: 88f80581-0000-01e6-aace-0002a5d5c51b 893 - rx: 88f80582-0000-01e6-aace-0002a5d5c51b 894 - firmware: 88f80583-0000-01e6-aace-0002a5d5c51b 895 - f60402a6-0293-4bdb-9f20-6758133f7090: 896 - tx: 02962ac9-e86f-4094-989d-231d69995fc2 897 - rx: d44d0393-0731-43b3-a373-8fc70b1f3323 898 - firmware: c7b7a04b-2cc4-40ff-8b10-5d531d1161db 899 889 defaults: 900 890 name: Kiiroo v2 Device 901 891 features: ··· 913 903 - identifier: 914 904 - Onyx2 915 905 name: Kiiroo Onyx 2 906 + communication: 907 + - btle: 908 + names: 909 + - Launch 910 + - Onyx2 911 + services: 912 + 88f80580-0000-01e6-aace-0002a5d5c51b: 913 + tx: 88f80581-0000-01e6-aace-0002a5d5c51b 914 + rx: 88f80582-0000-01e6-aace-0002a5d5c51b 915 + firmware: 88f80583-0000-01e6-aace-0002a5d5c51b 916 + f60402a6-0293-4bdb-9f20-6758133f7090: 917 + tx: 02962ac9-e86f-4094-989d-231d69995fc2 918 + rx: d44d0393-0731-43b3-a373-8fc70b1f3323 919 + firmware: c7b7a04b-2cc4-40ff-8b10-5d531d1161db 916 920 libo-elle: 917 - btle: 918 - names: 919 - - PiPiJing 920 - - Shuidi 921 - services: 922 - 00006000-0000-1000-8000-00805f9b34fb: 923 - tx: 00006001-0000-1000-8000-00805f9b34fb 924 - txmode: 00006002-0000-1000-8000-00805f9b34fb 925 921 defaults: 926 922 name: Libo Elle Device 927 923 features: ··· 939 935 - identifier: 940 936 - Shuidi 941 937 name: Libo Elle 2 938 + communication: 939 + - btle: 940 + names: 941 + - PiPiJing 942 + - Shuidi 943 + services: 944 + 00006000-0000-1000-8000-00805f9b34fb: 945 + tx: 00006001-0000-1000-8000-00805f9b34fb 946 + txmode: 00006002-0000-1000-8000-00805f9b34fb 942 947 libo-shark: 943 - btle: 944 - names: 945 - - ShaYu 946 - services: 947 - 00006000-0000-1000-8000-00805f9b34fb: 948 - tx: 00006001-0000-1000-8000-00805f9b34fb 949 - txmode: 00006002-0000-1000-8000-00805f9b34fb 950 948 defaults: 951 949 name: Libo Shark 952 950 features: ··· 964 962 - 3 965 963 messages: 966 964 - ScalarCmd 965 + communication: 966 + - btle: 967 + names: 968 + - ShaYu 969 + services: 970 + 00006000-0000-1000-8000-00805f9b34fb: 971 + tx: 00006001-0000-1000-8000-00805f9b34fb 972 + txmode: 00006002-0000-1000-8000-00805f9b34fb 967 973 libo-karen: 968 - btle: 969 - names: 970 - - SuoYinQiu 971 - services: 972 - 00006000-0000-1000-8000-00805f9b34fb: 973 - tx: 00006001-0000-1000-8000-00805f9b34fb 974 - txmode: 00006002-0000-1000-8000-00805f9b34fb 975 - 00006050-0000-1000-8000-00805f9b34fb: 976 - rxpressure: 00006051-0000-1000-8000-00805f9b34fb 977 974 defaults: 978 975 name: Libo Karen 979 976 features: [] 977 + communication: 978 + - btle: 979 + names: 980 + - SuoYinQiu 981 + services: 982 + 00006000-0000-1000-8000-00805f9b34fb: 983 + tx: 00006001-0000-1000-8000-00805f9b34fb 984 + txmode: 00006002-0000-1000-8000-00805f9b34fb 985 + 00006050-0000-1000-8000-00805f9b34fb: 986 + rxpressure: 00006051-0000-1000-8000-00805f9b34fb 980 987 libo-vibes: 981 - btle: 982 - names: 983 - - XiaoLu 984 - - LuXiaoHan 985 - - BaiHu 986 - - Gugudai 987 - - Yuyi 988 - - LuWuShuang 989 - - LiBo 990 - - QingTing 991 - - Huohu 992 - - Yuyi 993 - - Haima 994 - services: 995 - 00006000-0000-1000-8000-00805f9b34fb: 996 - tx: 00006001-0000-1000-8000-00805f9b34fb 997 - txmode: 00006002-0000-1000-8000-00805f9b34fb 998 988 defaults: 999 989 name: Libo Vibes Device 1000 990 features: ··· 1092 1082 - 3 1093 1083 messages: 1094 1084 - ScalarCmd 1085 + communication: 1086 + - btle: 1087 + names: 1088 + - XiaoLu 1089 + - LuXiaoHan 1090 + - BaiHu 1091 + - Gugudai 1092 + - Yuyi 1093 + - LuWuShuang 1094 + - LiBo 1095 + - QingTing 1096 + - Huohu 1097 + - Yuyi 1098 + - Haima 1099 + services: 1100 + 00006000-0000-1000-8000-00805f9b34fb: 1101 + tx: 00006001-0000-1000-8000-00805f9b34fb 1102 + txmode: 00006002-0000-1000-8000-00805f9b34fb 1095 1103 magic-motion-1: 1096 - btle: 1097 - names: 1098 - - Smart Mini Vibe* 1099 - - Flamingo 1100 - - Flamingo T 1101 - - Smart Bean 1102 - - Smart Bean3 1103 - - Magic Cell 1104 - - Magic Wand 1105 - - Fugu 1106 - - Fugu2 1107 - - Gballs2 1108 - - GBalls3 1109 - - FM-LILAC-101 1110 - - Xone 1111 - - CBT002 1112 - services: 1113 - 78667579-7b48-43db-b8c5-7928a6b0a335: 1114 - tx: 78667579-a914-49a4-8333-aa3c0cd8fedc 1115 - 0000180f-0000-1000-8000-00805f9b34fb: 1116 - rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 1117 1104 defaults: 1118 1105 name: Magic Motion V1 Device 1119 1106 features: ··· 1194 1181 - identifier: 1195 1182 - CBT002 1196 1183 name: FunTown Caleo 1184 + communication: 1185 + - btle: 1186 + names: 1187 + - Smart Mini Vibe* 1188 + - Flamingo 1189 + - Flamingo T 1190 + - Smart Bean 1191 + - Smart Bean3 1192 + - Magic Cell 1193 + - Magic Wand 1194 + - Fugu 1195 + - Fugu2 1196 + - Gballs2 1197 + - GBalls3 1198 + - FM-LILAC-101 1199 + - Xone 1200 + - CBT002 1201 + services: 1202 + 78667579-7b48-43db-b8c5-7928a6b0a335: 1203 + tx: 78667579-a914-49a4-8333-aa3c0cd8fedc 1204 + 0000180f-0000-1000-8000-00805f9b34fb: 1205 + rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 1197 1206 magic-motion-2: 1198 - btle: 1199 - names: 1200 - - Eidolon 1201 - - Lipstick 1202 - - Sword 1203 - - Curve 1204 - - Solstice X 1205 - - funwand 1206 - - CBT001 1207 - services: 1208 - 78667579-7b48-43db-b8c5-7928a6b0a335: 1209 - tx: 78667579-a914-49a4-8333-aa3c0cd8fedc 1210 - 0000180f-0000-1000-8000-00805f9b34fb: 1211 - rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 1212 1207 defaults: 1213 1208 name: Magic Motion V2 Device 1214 1209 features: ··· 1318 1313 - 100 1319 1314 messages: 1320 1315 - SensorReadCmd 1316 + communication: 1317 + - btle: 1318 + names: 1319 + - Eidolon 1320 + - Lipstick 1321 + - Sword 1322 + - Curve 1323 + - Solstice X 1324 + - funwand 1325 + - CBT001 1326 + services: 1327 + 78667579-7b48-43db-b8c5-7928a6b0a335: 1328 + tx: 78667579-a914-49a4-8333-aa3c0cd8fedc 1329 + 0000180f-0000-1000-8000-00805f9b34fb: 1330 + rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 1321 1331 magic-motion-3: 1322 - btle: 1323 - names: 1324 - - Krush 1325 - services: 1326 - 78667579-7b48-43db-b8c5-7928a6b0a335: 1327 - tx: 78667579-a914-49a4-8333-aa3c0cd8fedc 1328 - 0000180f-0000-1000-8000-00805f9b34fb: 1329 - rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 1330 1332 defaults: 1331 1333 name: LoveLife Krush 1332 1334 features: ··· 1345 1347 - 100 1346 1348 messages: 1347 1349 - SensorReadCmd 1350 + communication: 1351 + - btle: 1352 + names: 1353 + - Krush 1354 + services: 1355 + 78667579-7b48-43db-b8c5-7928a6b0a335: 1356 + tx: 78667579-a914-49a4-8333-aa3c0cd8fedc 1357 + 0000180f-0000-1000-8000-00805f9b34fb: 1358 + rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 1348 1359 magic-motion-4: 1349 - btle: 1350 - names: 1351 - - funone 1352 - - Magic Sundi 1353 - - Kegel Coach 1354 - - Magic Lotos 1355 - - nyx 1356 - - umi 1357 - - funkegel 1358 - - bobi2 1359 - services: 1360 - 78667579-7b48-43db-b8c5-7928a6b0a335: 1361 - tx: 78667579-a914-49a4-8333-aa3c0cd8fedc 1362 - 0000180f-0000-1000-8000-00805f9b34fb: 1363 - rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 1364 1360 defaults: 1365 1361 name: Magic Motion V4 Device 1366 1362 features: ··· 1450 1446 - 100 1451 1447 messages: 1452 1448 - SensorReadCmd 1449 + communication: 1450 + - btle: 1451 + names: 1452 + - funone 1453 + - Magic Sundi 1454 + - Kegel Coach 1455 + - Magic Lotos 1456 + - nyx 1457 + - umi 1458 + - funkegel 1459 + - bobi2 1460 + services: 1461 + 78667579-7b48-43db-b8c5-7928a6b0a335: 1462 + tx: 78667579-a914-49a4-8333-aa3c0cd8fedc 1463 + 0000180f-0000-1000-8000-00805f9b34fb: 1464 + rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 1453 1465 mysteryvibe: 1454 - btle: 1455 - names: 1456 - - MV Crescendo 1457 - - 'MV Tenuto ' 1458 - - 'MV Poco ' 1459 - services: 1460 - f0006900-110c-478b-b74b-6f403b364a9c: 1461 - txmode: f0006901-110c-478b-b74b-6f403b364a9c 1462 - txvibrate: f0006903-110c-478b-b74b-6f403b364a9c 1463 1466 defaults: 1464 1467 name: Mysteryvibe Device 1465 1468 features: ··· 1530 1533 - 56 1531 1534 messages: 1532 1535 - ScalarCmd 1536 + communication: 1537 + - btle: 1538 + names: 1539 + - MV Crescendo 1540 + - 'MV Tenuto ' 1541 + - 'MV Poco ' 1542 + services: 1543 + f0006900-110c-478b-b74b-6f403b364a9c: 1544 + txmode: f0006901-110c-478b-b74b-6f403b364a9c 1545 + txvibrate: f0006903-110c-478b-b74b-6f403b364a9c 1533 1546 mysteryvibe-v2: 1534 - btle: 1535 - names: 1536 - - 6907 MV1 1537 - - 6908 MV1 1538 - - 6909 MV1 1539 - - 6914 MV1 1540 - - 6915 MV1 1541 - services: 1542 - f0006900-110c-478b-b74b-6f403b364a9c: 1543 - txmode: f0006901-110c-478b-b74b-6f403b364a9c 1544 - txvibrate: f0006903-110c-478b-b74b-6f403b364a9c 1545 1547 defaults: 1546 1548 name: Mysteryvibe V2 Device 1547 1549 features: ··· 1691 1693 - 56 1692 1694 messages: 1693 1695 - ScalarCmd 1696 + communication: 1697 + - btle: 1698 + names: 1699 + - 6907 MV1 1700 + - 6908 MV1 1701 + - 6909 MV1 1702 + - 6914 MV1 1703 + - 6915 MV1 1704 + services: 1705 + f0006900-110c-478b-b74b-6f403b364a9c: 1706 + txmode: f0006901-110c-478b-b74b-6f403b364a9c 1707 + txvibrate: f0006903-110c-478b-b74b-6f403b364a9c 1694 1708 picobong: 1695 - btle: 1696 - names: 1697 - - Blow hole 1698 - - Picobong Male Toy 1699 - - Diver 1700 - - Picobong Egg 1701 - - Life guard 1702 - - Picobong Ring 1703 - - Surfer 1704 - - Picobong Butt Plug 1705 - - Egg driver 1706 - - Surfer_plug 1707 - services: 1708 - 0000fff0-0000-1000-8000-00805f9b34fb: 1709 - tx: 0000fff1-0000-1000-8000-00805f9b34fb 1710 1709 defaults: 1711 1710 name: Picobong Device 1712 1711 features: ··· 1736 1735 - Egg driver 1737 1736 - Surfer_plug 1738 1737 name: Picobong Surfer 1738 + communication: 1739 + - btle: 1740 + names: 1741 + - Blow hole 1742 + - Picobong Male Toy 1743 + - Diver 1744 + - Picobong Egg 1745 + - Life guard 1746 + - Picobong Ring 1747 + - Surfer 1748 + - Picobong Butt Plug 1749 + - Egg driver 1750 + - Surfer_plug 1751 + services: 1752 + 0000fff0-0000-1000-8000-00805f9b34fb: 1753 + tx: 0000fff1-0000-1000-8000-00805f9b34fb 1739 1754 vibratissimo: 1740 - btle: 1741 - names: 1742 - - Vibratissimo 1743 - services: 1744 - 00001523-1212-efde-1523-785feabcd123: 1745 - txmode: 00001524-1212-efde-1523-785feabcd123 1746 - txvibrate: 00001526-1212-efde-1523-785feabcd123 1747 - rx: 00001527-1212-efde-1523-785feabcd123 1748 - 0000180a-0000-1000-8000-00805f9b34fb: 1749 - rxblemodel: 00002a24-0000-1000-8000-00805f9b34fb 1750 - 0000180f-0000-1000-8000-00805f9b34fb: 1751 - rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 1752 1755 defaults: 1753 1756 name: Vibratissimo Device 1754 1757 features: ··· 1829 1832 - 100 1830 1833 messages: 1831 1834 - SensorReadCmd 1835 + communication: 1836 + - btle: 1837 + names: 1838 + - Vibratissimo 1839 + services: 1840 + 00001523-1212-efde-1523-785feabcd123: 1841 + txmode: 00001524-1212-efde-1523-785feabcd123 1842 + txvibrate: 00001526-1212-efde-1523-785feabcd123 1843 + rx: 00001527-1212-efde-1523-785feabcd123 1844 + 0000180a-0000-1000-8000-00805f9b34fb: 1845 + rxblemodel: 00002a24-0000-1000-8000-00805f9b34fb 1846 + 0000180f-0000-1000-8000-00805f9b34fb: 1847 + rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 1832 1848 wevibe: 1833 - btle: 1834 - names: 1835 - - Cougar 1836 - - 4 Plus 1837 - - 4_Plus 1838 - - 4plus 1839 - - Bloom 1840 - - classic 1841 - - Classic 1842 - - Ditto 1843 - - Gala 1844 - - Jive 1845 - - Nova 1846 - - Pivot 1847 - - Rave 1848 - - Sync 1849 - - Verge 1850 - - Wish 1851 - services: 1852 - f000bb03-0451-4000-b000-000000000000: 1853 - tx: f000c000-0451-4000-b000-000000000000 1854 - rx: f000b000-0451-4000-b000-000000000000 1855 1849 defaults: 1856 1850 name: WeVibe Device 1857 1851 features: ··· 1961 1955 - 15 1962 1956 messages: 1963 1957 - ScalarCmd 1958 + communication: 1959 + - btle: 1960 + names: 1961 + - Cougar 1962 + - 4 Plus 1963 + - 4_Plus 1964 + - 4plus 1965 + - Bloom 1966 + - classic 1967 + - Classic 1968 + - Ditto 1969 + - Gala 1970 + - Jive 1971 + - Nova 1972 + - Pivot 1973 + - Rave 1974 + - Sync 1975 + - Verge 1976 + - Wish 1977 + services: 1978 + f000bb03-0451-4000-b000-000000000000: 1979 + tx: f000c000-0451-4000-b000-000000000000 1980 + rx: f000b000-0451-4000-b000-000000000000 1964 1981 wevibe-8bit: 1965 - btle: 1966 - names: 1967 - - Melt 1968 - - Moxie 1969 - - Vector 1970 - - Wand 1971 - - Bond 1972 - - Nelson 1973 - - Nova2 1974 - - Nova_2 1975 - - Nova 2 1976 - services: 1977 - f000bb03-0451-4000-b000-000000000000: 1978 - tx: f000c000-0451-4000-b000-000000000000 1979 - rx: f000b000-0451-4000-b000-000000000000 1980 1982 defaults: 1981 1983 name: WeVibe 8-bit Device 1982 1984 features: ··· 2063 2065 - 27 2064 2066 messages: 2065 2067 - ScalarCmd 2068 + communication: 2069 + - btle: 2070 + names: 2071 + - Melt 2072 + - Moxie 2073 + - Vector 2074 + - Wand 2075 + - Bond 2076 + - Nelson 2077 + - Nova2 2078 + - Nova_2 2079 + - Nova 2 2080 + services: 2081 + f000bb03-0451-4000-b000-000000000000: 2082 + tx: f000c000-0451-4000-b000-000000000000 2083 + rx: f000b000-0451-4000-b000-000000000000 2066 2084 wevibe-legacy: 2067 - btle: 2068 - names: 2069 - - Reina 2070 - - imassager 2071 - - Interactive Massager 2072 - - '03' 2073 - services: 2074 - f000bb03-0451-4000-b000-000000000000: 2075 - tx: f000c000-0451-4000-b000-000000000000 2076 - rx: f000b000-0451-4000-b000-000000000000 2077 2085 defaults: 2078 2086 name: WeVibe Realm Reina 2079 2087 features: [] 2088 + communication: 2089 + - btle: 2090 + names: 2091 + - Reina 2092 + - imassager 2093 + - Interactive Massager 2094 + - '03' 2095 + services: 2096 + f000bb03-0451-4000-b000-000000000000: 2097 + tx: f000c000-0451-4000-b000-000000000000 2098 + rx: f000b000-0451-4000-b000-000000000000 2080 2099 wevibe-chorus: 2081 - btle: 2082 - names: 2083 - - Chorus 2084 - - skeena 2085 - - Sync 2 2086 - - Sync Lite 2087 - services: 2088 - f000bb03-0451-4000-b000-000000000000: 2089 - tx: f000c000-0451-4000-b000-000000000000 2090 - rx: f000b000-0451-4000-b000-000000000000 2091 2100 defaults: 2092 2101 name: WeVibe Chorus 2093 2102 features: ··· 2135 2144 - 30 2136 2145 messages: 2137 2146 - ScalarCmd 2147 + communication: 2148 + - btle: 2149 + names: 2150 + - Chorus 2151 + - skeena 2152 + - Sync 2 2153 + - Sync Lite 2154 + services: 2155 + f000bb03-0451-4000-b000-000000000000: 2156 + tx: f000c000-0451-4000-b000-000000000000 2157 + rx: f000b000-0451-4000-b000-000000000000 2138 2158 youcups: 2139 - btle: 2140 - names: 2141 - - Youcups 2142 - services: 2143 - 0000fee9-0000-1000-8000-00805f9b34fb: 2144 - tx: d44bc439-abfd-45a2-b575-925416129600 2145 2159 defaults: 2146 2160 name: Youcups Warrior II 2147 2161 features: ··· 2152 2166 - 8 2153 2167 messages: 2154 2168 - ScalarCmd 2169 + communication: 2170 + - btle: 2171 + names: 2172 + - Youcups 2173 + services: 2174 + 0000fee9-0000-1000-8000-00805f9b34fb: 2175 + tx: d44bc439-abfd-45a2-b575-925416129600 2155 2176 cueme: 2156 - btle: 2157 - names: 2158 - - FUNCODE_* 2159 - services: 2160 - 0000fff0-0000-1000-8000-00805f9b34fb: 2161 - tx: 0000fff1-0000-1000-8000-00805f9b34fb 2162 2177 defaults: 2163 2178 name: Cueme Device 2164 2179 features: ··· 2257 2272 - 15 2258 2273 messages: 2259 2274 - ScalarCmd 2275 + communication: 2276 + - btle: 2277 + names: 2278 + - FUNCODE_* 2279 + services: 2280 + 0000fff0-0000-1000-8000-00805f9b34fb: 2281 + tx: 0000fff1-0000-1000-8000-00805f9b34fb 2260 2282 kiiroo-v2-vibrator: 2261 - btle: 2262 - names: 2263 - - Pearl2 2264 - - Pearl2+ 2265 - - Fuse 2266 - - Virtual Blowbot 2267 - - Titan 2268 - - Virtual Rabbit 2269 - services: 2270 - 88f82580-0000-01e6-aace-0002a5d5c51b: 2271 - tx: 88f82581-0000-01e6-aace-0002a5d5c51b 2272 - rxtouch: 88f82582-0000-01e6-aace-0002a5d5c51b 2273 - rxaccel: 88f82584-0000-01e6-aace-0002a5d5c51b 2274 2283 defaults: 2275 2284 name: Kiiroo V2 Vibrator Device 2276 2285 features: ··· 2397 2406 - 100 2398 2407 messages: 2399 2408 - ScalarCmd 2409 + communication: 2410 + - btle: 2411 + names: 2412 + - Pearl2 2413 + - Pearl2+ 2414 + - Fuse 2415 + - Virtual Blowbot 2416 + - Titan 2417 + - Virtual Rabbit 2418 + services: 2419 + 88f82580-0000-01e6-aace-0002a5d5c51b: 2420 + tx: 88f82581-0000-01e6-aace-0002a5d5c51b 2421 + rxtouch: 88f82582-0000-01e6-aace-0002a5d5c51b 2422 + rxaccel: 88f82584-0000-01e6-aace-0002a5d5c51b 2400 2423 kiiroo-v21: 2401 - btle: 2402 - names: 2403 - - Titan1.1 2404 - - Cliona 2405 - - Pearl2.1 2406 - - OhMiBod 4.0 2407 - - OhMiBod LUMEN 2408 - - OhMiBod NEX3 2409 - - OhMiBod ESCA 2410 - - OhMiBod Foxy 2411 - - OhMiBod Chill Panty Vibe 2412 - - OhMiBod Sphinx 2413 - - Pulse Interactive 2414 - - Fuse1.1 2415 - services: 2416 - 00001900-0000-1000-8000-00805f9b34fb: 2417 - whitelist: 00001901-0000-1000-8000-00805f9b34fb 2418 - tx: 00001902-0000-1000-8000-00805f9b34fb 2419 - rx: 00001903-0000-1000-8000-00805f9b34fb 2420 - a0d70001-4c16-4ba7-977a-d394920e13a3: 2421 - tx: a0d70002-4c16-4ba7-977a-d394920e13a3 2422 - rx: a0d70003-4c16-4ba7-977a-d394920e13a3 2423 2424 defaults: 2424 2425 name: Kiiroo V2.1 Device 2425 2426 features: [] ··· 2561 2562 - 100 2562 2563 messages: 2563 2564 - ScalarCmd 2565 + communication: 2566 + - btle: 2567 + names: 2568 + - Titan1.1 2569 + - Cliona 2570 + - Pearl2.1 2571 + - OhMiBod 4.0 2572 + - OhMiBod LUMEN 2573 + - OhMiBod NEX3 2574 + - OhMiBod ESCA 2575 + - OhMiBod Foxy 2576 + - OhMiBod Chill Panty Vibe 2577 + - OhMiBod Sphinx 2578 + - Pulse Interactive 2579 + - Fuse1.1 2580 + services: 2581 + 00001900-0000-1000-8000-00805f9b34fb: 2582 + whitelist: 00001901-0000-1000-8000-00805f9b34fb 2583 + tx: 00001902-0000-1000-8000-00805f9b34fb 2584 + rx: 00001903-0000-1000-8000-00805f9b34fb 2585 + a0d70001-4c16-4ba7-977a-d394920e13a3: 2586 + tx: a0d70002-4c16-4ba7-977a-d394920e13a3 2587 + rx: a0d70003-4c16-4ba7-977a-d394920e13a3 2564 2588 kiiroo-v21-initialized: 2565 - btle: 2566 - names: 2567 - - Rey 2568 - - We-Vibe Rocketman 2569 - - Realm1.1 2570 - - Onyx2.1 2571 - - Onyx+ 2572 - - KEON 2573 - - Keon R2 2574 - services: 2575 - 00001900-0000-1000-8000-00805f9b34fb: 2576 - whitelist: 00001901-0000-1000-8000-00805f9b34fb 2577 - tx: 00001902-0000-1000-8000-00805f9b34fb 2578 - rx: 00001903-0000-1000-8000-00805f9b34fb 2579 2589 defaults: 2580 2590 name: Kiiroo V2.1 Initialized Device 2581 2591 features: [] ··· 2627 2637 - 99 2628 2638 messages: 2629 2639 - LinearCmd 2640 + communication: 2641 + - btle: 2642 + names: 2643 + - Rey 2644 + - We-Vibe Rocketman 2645 + - Realm1.1 2646 + - Onyx2.1 2647 + - Onyx+ 2648 + - KEON 2649 + - Keon R2 2650 + services: 2651 + 00001900-0000-1000-8000-00805f9b34fb: 2652 + whitelist: 00001901-0000-1000-8000-00805f9b34fb 2653 + tx: 00001902-0000-1000-8000-00805f9b34fb 2654 + rx: 00001903-0000-1000-8000-00805f9b34fb 2630 2655 vorze-cyclone-x: 2631 - hid: 2632 - - vendor-id: 1155 2633 - product-id: 22352 2634 2656 defaults: 2635 2657 name: Vorze Cyclone X10 Device 2636 2658 features: ··· 2641 2663 - 10 2642 2664 messages: 2643 2665 - RotateCmd 2666 + communication: 2667 + - hid: 2668 + pairs: 2669 + - vendor-id: 1155 2670 + product-id: 22352 2644 2671 rez-trancevibrator: 2645 - usb: 2646 - - vendor-id: 2889 2647 - product-id: 1615 2648 2672 defaults: 2649 2673 name: Rez TranceVibrator 2650 2674 features: ··· 2655 2679 - 255 2656 2680 messages: 2657 2681 - ScalarCmd 2682 + communication: 2683 + - usb: 2684 + pairs: 2685 + - vendor-id: 2889 2686 + product-id: 1615 2658 2687 kiiroo-v1: 2659 - btle: 2660 - names: 2661 - - ONYX 2662 - - PEARL 2663 - services: 2664 - 49535343-fe7d-4ae5-8fa9-9fafd205e455: 2665 - rx: 49535343-1e4d-4bd9-ba61-23c647249616 2666 - tx: 49535343-8841-43f4-a8d4-ecbe34729bb3 2667 - command: 49535343-aca3-481c-91ec-d85e28a60318 2668 2688 defaults: 2669 2689 name: Kiiroo V1 Device 2670 2690 features: [] ··· 2691 2711 - 4 2692 2712 messages: 2693 2713 - LinearCmd 2714 + communication: 2715 + - btle: 2716 + names: 2717 + - ONYX 2718 + - PEARL 2719 + services: 2720 + 49535343-fe7d-4ae5-8fa9-9fafd205e455: 2721 + rx: 49535343-1e4d-4bd9-ba61-23c647249616 2722 + tx: 49535343-8841-43f4-a8d4-ecbe34729bb3 2723 + command: 49535343-aca3-481c-91ec-d85e28a60318 2694 2724 vorze-sa: 2695 - btle: 2696 - names: 2697 - - Bach smart 2698 - - CycSA 2699 - - UFOSA 2700 - - UFO-TW 2701 - - VorzePiston 2702 - - ROCKET 2703 - services: 2704 - 40ee1111-63ec-4b7f-8ce7-712efd55b90e: 2705 - tx: 40ee2222-63ec-4b7f-8ce7-712efd55b90e 2706 2725 defaults: 2707 2726 name: Vorze Device 2708 2727 features: [] ··· 2780 2799 - 99 2781 2800 messages: 2782 2801 - LinearCmd 2802 + communication: 2803 + - btle: 2804 + names: 2805 + - Bach smart 2806 + - CycSA 2807 + - UFOSA 2808 + - UFO-TW 2809 + - VorzePiston 2810 + - ROCKET 2811 + services: 2812 + 40ee1111-63ec-4b7f-8ce7-712efd55b90e: 2813 + tx: 40ee2222-63ec-4b7f-8ce7-712efd55b90e 2783 2814 youou: 2784 - btle: 2785 - names: 2786 - - VX001_* 2787 - services: 2788 - 0000fff0-0000-1000-8000-00805f9b34fb: 2789 - tx: 0000fff6-0000-1000-8000-00805f9b34fb 2790 2815 defaults: 2791 2816 name: Youou Wand Vibrator 2792 2817 features: ··· 2797 2822 - 255 2798 2823 messages: 2799 2824 - ScalarCmd 2825 + communication: 2826 + - btle: 2827 + names: 2828 + - VX001_* 2829 + services: 2830 + 0000fff0-0000-1000-8000-00805f9b34fb: 2831 + tx: 0000fff6-0000-1000-8000-00805f9b34fb 2800 2832 realtouch: 2801 - hid: 2802 - - vendor-id: 8020 2803 - product-id: 1 2804 2833 defaults: 2805 2834 name: RealTouch 2806 2835 features: ··· 2811 2840 - 99 2812 2841 messages: 2813 2842 - LinearCmd 2843 + communication: 2844 + - hid: 2845 + pairs: 2846 + - vendor-id: 8020 2847 + product-id: 1 2814 2848 prettylove: 2815 - btle: 2816 - names: 2817 - - Aogu BLE * 2818 - services: 2819 - 0000ffe5-0000-1000-8000-00805f9b34fb: 2820 - tx: 0000ffe9-0000-1000-8000-00805f9b34fb 2821 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 2822 2849 defaults: 2823 2850 name: Pretty Love Device 2824 2851 features: ··· 2829 2856 - 3 2830 2857 messages: 2831 2858 - ScalarCmd 2859 + communication: 2860 + - btle: 2861 + names: 2862 + - Aogu BLE * 2863 + services: 2864 + 0000ffe5-0000-1000-8000-00805f9b34fb: 2865 + tx: 0000ffe9-0000-1000-8000-00805f9b34fb 2866 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 2832 2867 svakom: 2833 - btle: 2834 - names: 2835 - - Aogu SUV 2836 - - Aogu SCB 2837 - - Emma NEO 2838 - - Phoenix NEO 2839 - services: 2840 - 0000ffe0-0000-1000-8000-00805f9b34fb: 2841 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 2842 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 2843 2868 defaults: 2844 2869 name: Svakom Device 2845 2870 features: ··· 2860 2885 - identifier: 2861 2886 - Emma NEO 2862 2887 name: Svakom Emma Neo 2888 + communication: 2889 + - btle: 2890 + names: 2891 + - Aogu SUV 2892 + - Aogu SCB 2893 + - Emma NEO 2894 + - Phoenix NEO 2895 + services: 2896 + 0000ffe0-0000-1000-8000-00805f9b34fb: 2897 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 2898 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 2863 2899 svakom-v2: 2864 - btle: 2865 - names: 2866 - - '116' 2867 - - '117' 2868 - - '118' 2869 - - Viviana 2870 - - Ella NEO 2871 - - S38A 2872 - - Vick NEO 2873 - - Vick Neo 2874 - - STG05A 2875 - - QH-SJ007A 2876 - services: 2877 - 0000ffe0-0000-1000-8000-00805f9b34fb: 2878 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 2879 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 2880 2900 defaults: 2881 2901 name: Svakom Device v2 2882 2902 features: ··· 2916 2936 - identifier: 2917 2937 - QH-SJ007A 2918 2938 name: Svakom Winni 2 2939 + communication: 2940 + - btle: 2941 + names: 2942 + - '116' 2943 + - '117' 2944 + - '118' 2945 + - Viviana 2946 + - Ella NEO 2947 + - S38A 2948 + - Vick NEO 2949 + - Vick Neo 2950 + - STG05A 2951 + - QH-SJ007A 2952 + services: 2953 + 0000ffe0-0000-1000-8000-00805f9b34fb: 2954 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 2955 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 2919 2956 svakom-v3: 2920 - btle: 2921 - names: 2922 - - Phoenix Neo 2 2923 - - FK008A 2924 - - Hannes NEO 2925 - - QH-SX007E 2926 - services: 2927 - 0000ffe0-0000-1000-8000-00805f9b34fb: 2928 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 2929 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 2930 2957 defaults: 2931 2958 name: Svakom Device v3 2932 2959 features: ··· 2982 3009 - 1 2983 3010 messages: 2984 3011 - ScalarCmd 3012 + communication: 3013 + - btle: 3014 + names: 3015 + - Phoenix Neo 2 3016 + - FK008A 3017 + - Hannes NEO 3018 + - QH-SX007E 3019 + services: 3020 + 0000ffe0-0000-1000-8000-00805f9b34fb: 3021 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3022 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 2985 3023 svakom-v4: 2986 - btle: 2987 - names: 2988 - - B2CM6 2989 - - ERICA 2990 - services: 2991 - 0000ffe0-0000-1000-8000-00805f9b34fb: 2992 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 2993 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 2994 3024 defaults: 2995 3025 name: Svakom Device v4 2996 3026 features: ··· 3015 3045 - identifier: 3016 3046 - ERICA 3017 3047 name: Svakom Erica 3048 + communication: 3049 + - btle: 3050 + names: 3051 + - B2CM6 3052 + - ERICA 3053 + services: 3054 + 0000ffe0-0000-1000-8000-00805f9b34fb: 3055 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3056 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 3018 3057 svakom-sam: 3019 - btle: 3020 - names: 3021 - - Sam Neo 3022 - services: 3023 - 0000ae00-0000-1000-8000-00805f9b34fb: 3024 - tx: 0000ae01-0000-1000-8000-00805f9b34fb 3025 - rx: 0000ae02-0000-1000-8000-00805f9b34fb 3026 - txmode: 0000ae10-0000-1000-8000-00805f9b34fb 3027 - 0000ffac-0000-1000-8000-00805f9b34fb: 3028 - firmware: 0000ffb4-0000-1000-8000-00805f9b34fb 3029 3058 defaults: 3030 3059 name: Svakom Sam Neo 3031 3060 features: ··· 3043 3072 - 1 3044 3073 messages: 3045 3074 - ScalarCmd 3075 + communication: 3076 + - btle: 3077 + names: 3078 + - Sam Neo 3079 + services: 3080 + 0000ae00-0000-1000-8000-00805f9b34fb: 3081 + tx: 0000ae01-0000-1000-8000-00805f9b34fb 3082 + rx: 0000ae02-0000-1000-8000-00805f9b34fb 3083 + txmode: 0000ae10-0000-1000-8000-00805f9b34fb 3084 + 0000ffac-0000-1000-8000-00805f9b34fb: 3085 + firmware: 0000ffb4-0000-1000-8000-00805f9b34fb 3046 3086 svakom-alex: 3047 - btle: 3048 - names: 3049 - - Alex NEO 3050 - - S63E Alex NEO 3051 - services: 3052 - 0000ffe0-0000-1000-8000-00805f9b34fb: 3053 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3054 3087 defaults: 3055 3088 name: Svakom Alex Neo 3056 3089 features: ··· 3061 3094 - 3 3062 3095 messages: 3063 3096 - ScalarCmd 3097 + communication: 3098 + - btle: 3099 + names: 3100 + - Alex NEO 3101 + - S63E Alex NEO 3102 + services: 3103 + 0000ffe0-0000-1000-8000-00805f9b34fb: 3104 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3064 3105 svakom-alex-v2: 3065 - btle: 3066 - names: 3067 - - Alex NEO 2 3068 - services: 3069 - 0000ffe0-0000-1000-8000-00805f9b34fb: 3070 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3071 3106 defaults: 3072 3107 name: Svakom Alex Neo 2 3073 3108 features: ··· 3078 3113 - 3 3079 3114 messages: 3080 3115 - ScalarCmd 3116 + communication: 3117 + - btle: 3118 + names: 3119 + - Alex NEO 2 3120 + services: 3121 + 0000ffe0-0000-1000-8000-00805f9b34fb: 3122 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3081 3123 svakom-dt250a: 3082 - btle: 3083 - names: 3084 - - DT250A 3085 - services: 3086 - 0000ffe0-0000-1000-8000-00805f9b34fb: 3087 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3088 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 3089 3124 defaults: 3090 3125 name: Coleur Dor DT250A 3091 3126 features: ··· 3110 3145 - 2 3111 3146 messages: 3112 3147 - ScalarCmd 3148 + communication: 3149 + - btle: 3150 + names: 3151 + - DT250A 3152 + services: 3153 + 0000ffe0-0000-1000-8000-00805f9b34fb: 3154 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3155 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 3113 3156 svakom-iker: 3114 - btle: 3115 - names: 3116 - - Iker* 3117 - manufacturer-data: 3118 - - company: 39 3119 - data: 3120 - - 83 3121 - - 86 3122 - - 65 3123 - - 1 3124 - - 11 3125 - - 18 3126 - - 1 3127 - - 51 3128 - - 68 3129 - - 85 3130 - - 202 3131 - - 8 3132 - services: 3133 - 0000ffe0-0000-1000-8000-00805f9b34fb: 3134 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3135 3157 defaults: 3136 3158 name: Svakom Iker 3137 3159 features: ··· 3149 3171 - 5 3150 3172 messages: 3151 3173 - ScalarCmd 3174 + communication: 3175 + - btle: 3176 + names: 3177 + - Iker* 3178 + manufacturer-data: 3179 + - company: 39 3180 + data: 3181 + - 83 3182 + - 86 3183 + - 65 3184 + - 1 3185 + - 11 3186 + - 18 3187 + - 1 3188 + - 51 3189 + - 68 3190 + - 85 3191 + - 202 3192 + - 8 3193 + services: 3194 + 0000ffe0-0000-1000-8000-00805f9b34fb: 3195 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3152 3196 svakom-pulse: 3153 - btle: 3154 - names: 3155 - - SWK-SX013A 3156 - - Pulse Union 3157 - - Pulse Galaxie 3158 - - SX033APP 3159 - - BX288A 3160 - - QH-SX045A-B 3161 - services: 3162 - 0000ffe0-0000-1000-8000-00805f9b34fb: 3163 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3164 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 3165 3197 defaults: 3166 3198 name: Svakom Pulse Device 3167 3199 features: ··· 3191 3223 - identifier: 3192 3224 - QH-SX045A-B 3193 3225 name: Coleur Dor VX045A 3226 + communication: 3227 + - btle: 3228 + names: 3229 + - SWK-SX013A 3230 + - Pulse Union 3231 + - Pulse Galaxie 3232 + - SX033APP 3233 + - BX288A 3234 + - QH-SX045A-B 3235 + services: 3236 + 0000ffe0-0000-1000-8000-00805f9b34fb: 3237 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3238 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 3194 3239 svakom-suitcase: 3195 - btle: 3196 - names: 3197 - - VX357A-BLE-V1.0 3198 - - VX236A-BLE-V1.0 3199 - services: 3200 - 0000ffe0-0000-1000-8000-00805f9b34fb: 3201 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3202 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 3203 3240 defaults: 3204 3241 name: Svakom Magic Suitcase 3205 3242 features: ··· 3221 3258 - identifier: 3222 3259 - VX236A-BLE-V1.0 3223 3260 name: Coleur Dor VX236A 3261 + communication: 3262 + - btle: 3263 + names: 3264 + - VX357A-BLE-V1.0 3265 + - VX236A-BLE-V1.0 3266 + services: 3267 + 0000ffe0-0000-1000-8000-00805f9b34fb: 3268 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3269 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 3224 3270 svakom-tarax: 3225 - btle: 3226 - names: 3227 - - SX218A 3228 - services: 3229 - 0000ffe0-0000-1000-8000-00805f9b34fb: 3230 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3231 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 3232 3271 defaults: 3233 3272 name: ToyCod Tara X 3234 3273 features: ··· 3248 3287 - 3 3249 3288 messages: 3250 3289 - ScalarCmd 3290 + communication: 3291 + - btle: 3292 + names: 3293 + - SX218A 3294 + services: 3295 + 0000ffe0-0000-1000-8000-00805f9b34fb: 3296 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3297 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 3251 3298 svakom-avaneo: 3252 - btle: 3253 - names: 3254 - - SX218A 3255 - - Ava Neo 3256 - services: 3257 - 0000ffe0-0000-1000-8000-00805f9b34fb: 3258 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3259 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 3260 3299 defaults: 3261 3300 name: Svakom Ava Neo 3262 3301 features: ··· 3274 3313 - 1 3275 3314 messages: 3276 3315 - ScalarCmd 3316 + communication: 3317 + - btle: 3318 + names: 3319 + - SX218A 3320 + - Ava Neo 3321 + services: 3322 + 0000ffe0-0000-1000-8000-00805f9b34fb: 3323 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3324 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 3277 3325 svakom-barnard: 3278 - btle: 3279 - names: 3280 - - DG239A 3281 - services: 3282 - 0000ffe0-0000-1000-8000-00805f9b34fb: 3283 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3284 3326 defaults: 3285 3327 name: Fantasy Cup Barnard 3286 3328 features: ··· 3298 3340 - 3 3299 3341 messages: 3300 3342 - ScalarCmd 3343 + communication: 3344 + - btle: 3345 + names: 3346 + - DG239A 3347 + services: 3348 + 0000ffe0-0000-1000-8000-00805f9b34fb: 3349 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3301 3350 realov: 3302 - btle: 3303 - names: 3304 - - REALOV_VIBE 3305 - services: 3306 - 0000ffe0-0000-1000-8000-00805f9b34fb: 3307 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3308 3351 defaults: 3309 3352 name: Realov Device 3310 3353 features: ··· 3315 3358 - 50 3316 3359 messages: 3317 3360 - ScalarCmd 3361 + communication: 3362 + - btle: 3363 + names: 3364 + - REALOV_VIBE 3365 + services: 3366 + 0000ffe0-0000-1000-8000-00805f9b34fb: 3367 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 3318 3368 motorbunny: 3319 - btle: 3320 - names: 3321 - - MB Controller 3322 - - MB LINK 201 3323 - services: 3324 - 0000fff0-0000-1000-8000-00805f9b34fb: 3325 - tx: 0000fff6-0000-1000-8000-00805f9b34fb 3326 3369 defaults: 3327 3370 name: Motorbunny Device 3328 3371 features: ··· 3347 3390 - identifier: 3348 3391 - MB LINK 201 3349 3392 name: Motorbunny Buck 3393 + communication: 3394 + - btle: 3395 + names: 3396 + - MB Controller 3397 + - MB LINK 201 3398 + services: 3399 + 0000fff0-0000-1000-8000-00805f9b34fb: 3400 + tx: 0000fff6-0000-1000-8000-00805f9b34fb 3350 3401 zalo: 3351 - btle: 3352 - names: 3353 - - ZALO-Queen 3354 - - ZALO-King 3355 - - ZALO-Jeanne 3356 - services: 3357 - 0000fff0-0000-1000-8000-00805f9b34fb: 3358 - tx: 0000fff1-0000-1000-8000-00805f9b34fb 3359 3402 defaults: 3360 3403 name: Zalo Device 3361 3404 features: ··· 3406 3449 - identifier: 3407 3450 - ZALO-Jeanne 3408 3451 name: Zalo Jeanne 3452 + communication: 3453 + - btle: 3454 + names: 3455 + - ZALO-Queen 3456 + - ZALO-King 3457 + - ZALO-Jeanne 3458 + services: 3459 + 0000fff0-0000-1000-8000-00805f9b34fb: 3460 + tx: 0000fff1-0000-1000-8000-00805f9b34fb 3409 3461 sayberx: 3410 - btle: 3411 - names: 3412 - - SayberX 3413 - - X-Ring * 3414 - services: 3415 - 0000fff0-0000-1000-8000-00805f9b34fb: 3416 - tx: 0000fff6-0000-1000-8000-00805f9b34fb 3417 - rx: 0000fff8-0000-1000-8000-00805f9b34fb 3418 3462 defaults: 3419 3463 name: SayberX Device 3420 3464 features: [] ··· 3433 3477 - identifier: 3434 3478 - X-Ring 3435 3479 name: Sayber X-Ring 3480 + communication: 3481 + - btle: 3482 + names: 3483 + - SayberX 3484 + - X-Ring * 3485 + services: 3486 + 0000fff0-0000-1000-8000-00805f9b34fb: 3487 + tx: 0000fff6-0000-1000-8000-00805f9b34fb 3488 + rx: 0000fff8-0000-1000-8000-00805f9b34fb 3436 3489 muse: 3437 - btle: 3438 - names: 3439 - - WB-ZDB-WST 3440 - - WB-TDD 3441 - services: 3442 - 0000aaa0-0000-1000-8000-00805f9b34fb: 3443 - tx: 0000aaa1-0000-1000-8000-00805f9b34fb 3444 3490 defaults: 3445 3491 name: Muse Device 3446 3492 features: ··· 3458 3504 - identifier: 3459 3505 - WB-TDD 3460 3506 name: Galaku Panty Vib 3507 + communication: 3508 + - btle: 3509 + names: 3510 + - WB-ZDB-WST 3511 + - WB-TDD 3512 + services: 3513 + 0000aaa0-0000-1000-8000-00805f9b34fb: 3514 + tx: 0000aaa1-0000-1000-8000-00805f9b34fb 3461 3515 lelo-f1s: 3462 - btle: 3463 - names: 3464 - - F1s 3465 - services: 3466 - 0000fff0-0000-1000-8000-00805f9b34fb: 3467 - tx: 0000fff1-0000-1000-8000-00805f9b34fb 3468 - rx: 00000aa4-0000-1000-8000-00805f9b34fb 3469 3516 defaults: 3470 3517 name: Lelo F1s 3471 3518 features: ··· 3483 3530 - 100 3484 3531 messages: 3485 3532 - ScalarCmd 3533 + communication: 3534 + - btle: 3535 + names: 3536 + - F1s 3537 + services: 3538 + 0000fff0-0000-1000-8000-00805f9b34fb: 3539 + tx: 0000fff1-0000-1000-8000-00805f9b34fb 3540 + rx: 00000aa4-0000-1000-8000-00805f9b34fb 3486 3541 lelo-f1sv2: 3487 - btle: 3488 - names: 3489 - - F1SV2A 3490 - - F1SV2X 3491 - services: 3492 - 0000fff0-0000-1000-8000-00805f9b34fb: 3493 - tx: 0000fff1-0000-1000-8000-00805f9b34fb 3494 - whitelist: 00000a10-0000-1000-8000-00805f9b34fb 3495 - rx: 00000a04-0000-1000-8000-00805f9b34fb 3496 3542 defaults: 3497 3543 name: Lelo F1s V2 3498 3544 features: ··· 3510 3556 - 100 3511 3557 messages: 3512 3558 - ScalarCmd 3559 + communication: 3560 + - btle: 3561 + names: 3562 + - F1SV2A 3563 + - F1SV2X 3564 + services: 3565 + 0000fff0-0000-1000-8000-00805f9b34fb: 3566 + tx: 0000fff1-0000-1000-8000-00805f9b34fb 3567 + whitelist: 00000a10-0000-1000-8000-00805f9b34fb 3568 + rx: 00000a04-0000-1000-8000-00805f9b34fb 3513 3569 lelo-harmony: 3514 - btle: 3515 - names: 3516 - - IdaWave 3517 - - Ida Wave 3518 - - TianiHarmony 3519 - - Tiani Harmony 3520 - - TOR3 3521 - - Hugo2 3522 - services: 3523 - 0000fff0-0000-1000-8000-00805f9b34fb: 3524 - command: 0000fff1-0000-1000-8000-00805f9b34fb 3525 - tx: 0000fff2-0000-1000-8000-00805f9b34fb 3526 - whitelist: 00000a11-0000-1000-8000-00805f9b34fb 3527 3570 defaults: 3528 3571 name: Lelo Tiani Harmony 3529 3572 features: ··· 3575 3618 - identifier: 3576 3619 - Hugo2 3577 3620 name: Lelo Hugo 2 3621 + communication: 3622 + - btle: 3623 + names: 3624 + - IdaWave 3625 + - Ida Wave 3626 + - TianiHarmony 3627 + - Tiani Harmony 3628 + - TOR3 3629 + - Hugo2 3630 + services: 3631 + 0000fff0-0000-1000-8000-00805f9b34fb: 3632 + command: 0000fff1-0000-1000-8000-00805f9b34fb 3633 + tx: 0000fff2-0000-1000-8000-00805f9b34fb 3634 + whitelist: 00000a11-0000-1000-8000-00805f9b34fb 3578 3635 aneros: 3579 - btle: 3580 - names: 3581 - - Massage Demo 3582 - services: 3583 - 0000ff00-0000-1000-8000-00805f9b34fb: 3584 - tx: 0000ff01-0000-1000-8000-00805f9b34fb 3585 3636 defaults: 3586 3637 name: Aneros Vivi 3587 3638 features: ··· 3601 3652 - 127 3602 3653 messages: 3603 3654 - ScalarCmd 3655 + communication: 3656 + - btle: 3657 + names: 3658 + - Massage Demo 3659 + services: 3660 + 0000ff00-0000-1000-8000-00805f9b34fb: 3661 + tx: 0000ff01-0000-1000-8000-00805f9b34fb 3604 3662 lovehoney-desire: 3605 - btle: 3606 - names: 3607 - - PROSTATE VIBE 3608 - - KNICKER VIBE 3609 - - LOVE EGG 3610 - services: 3611 - 0000ff00-0000-1000-8000-00805f9b34fb: 3612 - tx: 0000ff01-0000-1000-8000-00805f9b34fb 3613 3663 defaults: 3614 3664 name: Lovehoney Device 3615 3665 features: ··· 3653 3703 - 127 3654 3704 messages: 3655 3705 - ScalarCmd 3706 + communication: 3707 + - btle: 3708 + names: 3709 + - PROSTATE VIBE 3710 + - KNICKER VIBE 3711 + - LOVE EGG 3712 + services: 3713 + 0000ff00-0000-1000-8000-00805f9b34fb: 3714 + tx: 0000ff01-0000-1000-8000-00805f9b34fb 3656 3715 twerkingbutt: 3657 - btle: 3658 - names: 3659 - - BODIKANG 3660 - - Twerking Butt 3661 - - TwerkingButt 3662 - services: 3663 - 00000a60-0000-1000-8000-00805f9b34fb: 3664 - tx: 00000a66-0000-1000-8000-00805f9b34fb 3665 - rx: 00000a67-0000-1000-8000-00805f9b34fb 3666 3716 defaults: 3667 3717 name: Twerking Butt 3668 3718 features: [] 3719 + communication: 3720 + - btle: 3721 + names: 3722 + - BODIKANG 3723 + - Twerking Butt 3724 + - TwerkingButt 3725 + services: 3726 + 00000a60-0000-1000-8000-00805f9b34fb: 3727 + tx: 00000a66-0000-1000-8000-00805f9b34fb 3728 + rx: 00000a67-0000-1000-8000-00805f9b34fb 3669 3729 maxpro: 3670 - btle: 3671 - names: 3672 - - M2 3673 - services: 3674 - 6e400001-b5a3-f393-e0a9-e50e24dcca9e: 3675 - tx: 6e400002-b5a3-f393-e0a9-e50e24dcca9e 3676 3730 defaults: 3677 3731 name: MaxPro 2 3678 3732 features: ··· 3683 3737 - 100 3684 3738 messages: 3685 3739 - ScalarCmd 3740 + communication: 3741 + - btle: 3742 + names: 3743 + - M2 3744 + services: 3745 + 6e400001-b5a3-f393-e0a9-e50e24dcca9e: 3746 + tx: 6e400002-b5a3-f393-e0a9-e50e24dcca9e 3686 3747 nobra: 3687 - btle: 3688 - names: 3689 - - NobraControl* 3690 - services: 3691 - 0000abf0-0000-1000-8000-00805f9b34fb: 3692 - tx: 0000abf1-0000-1000-8000-00805f9b34fb 3693 - serial: 3694 - - port: default 3695 - baud-rate: 19200 3696 - data-bits: 8 3697 - parity: 'N' 3698 - stop-bits: 1 3699 3748 defaults: 3700 3749 name: Nobra's Silicone Dreams Toy 3701 3750 features: ··· 3706 3755 - 15 3707 3756 messages: 3708 3757 - ScalarCmd 3758 + communication: 3759 + - btle: 3760 + names: 3761 + - NobraControl* 3762 + services: 3763 + 0000abf0-0000-1000-8000-00805f9b34fb: 3764 + tx: 0000abf1-0000-1000-8000-00805f9b34fb 3765 + - serial: 3766 + ports: 3767 + - port: default 3768 + baud-rate: 19200 3769 + data-bits: 8 3770 + parity: 'N' 3771 + stop-bits: 1 3709 3772 thehandy: 3710 - btle: 3711 - names: 3712 - - The Handy 3713 - services: 3714 - 1775244d-6b43-439b-877c-060f2d9bed07: 3715 - firmware: 1775ff51-6b43-439b-877c-060f2d9bed07 3716 - tx: 1775ff55-6b43-439b-877c-060f2d9bed07 3717 3773 defaults: 3718 3774 name: The Handy 3719 3775 features: ··· 3724 3780 - 100 3725 3781 messages: 3726 3782 - LinearCmd 3783 + communication: 3784 + - btle: 3785 + names: 3786 + - The Handy 3787 + services: 3788 + 1775244d-6b43-439b-877c-060f2d9bed07: 3789 + firmware: 1775ff51-6b43-439b-877c-060f2d9bed07 3790 + tx: 1775ff55-6b43-439b-877c-060f2d9bed07 3727 3791 cachito: 3728 - btle: 3729 - names: 3730 - - CCTSK 3731 - - CCTXueGao 3732 - services: 3733 - 0000fff0-0000-1000-8000-00805f9b34fb: 3734 - tx: 0000fff2-0000-1000-8000-00805f9b34fb 3735 3792 defaults: 3736 3793 name: Cachito Device 3737 3794 features: ··· 3756 3813 - identifier: 3757 3814 - CCTXueGao 3758 3815 name: Cachito Ice Cream 3816 + communication: 3817 + - btle: 3818 + names: 3819 + - CCTSK 3820 + - CCTXueGao 3821 + services: 3822 + 0000fff0-0000-1000-8000-00805f9b34fb: 3823 + tx: 0000fff2-0000-1000-8000-00805f9b34fb 3759 3824 jejoue: 3760 - btle: 3761 - names: 3762 - - Je Joue 3763 - services: 3764 - 0000fff0-0000-1000-8000-00805f9b34fb: 3765 - tx: 0000fff1-0000-1000-8000-00805f9b34fb 3766 3825 defaults: 3767 3826 name: Je Joue Device 3768 3827 features: ··· 3780 3839 - 5 3781 3840 messages: 3782 3841 - ScalarCmd 3842 + communication: 3843 + - btle: 3844 + names: 3845 + - Je Joue 3846 + services: 3847 + 0000fff0-0000-1000-8000-00805f9b34fb: 3848 + tx: 0000fff1-0000-1000-8000-00805f9b34fb 3783 3849 lovenuts: 3784 - btle: 3785 - names: 3786 - - Love_Nuts 3787 - services: 3788 - 0000fff0-0000-1000-8000-00805f9b34fb: 3789 - tx: 0000fff1-0000-1000-8000-00805f9b34fb 3790 3850 defaults: 3791 3851 name: Love Nut 3792 3852 features: ··· 3797 3857 - 15 3798 3858 messages: 3799 3859 - ScalarCmd 3860 + communication: 3861 + - btle: 3862 + names: 3863 + - Love_Nuts 3864 + services: 3865 + 0000fff0-0000-1000-8000-00805f9b34fb: 3866 + tx: 0000fff1-0000-1000-8000-00805f9b34fb 3800 3867 patoo: 3801 - btle: 3802 - names: 3803 - - PTVEA* 3804 - - PBT* 3805 - - PCS* 3806 - - PHT* 3807 - services: 3808 - f000aa64-0451-4000-b000-000000000000: 3809 - txmode: f000aa65-0451-4000-b000-000000000000 3810 - tx: f000aa68-0451-4000-b000-000000000000 3811 3868 defaults: 3812 3869 name: Patoo Device 3813 3870 features: ··· 3846 3903 - 100 3847 3904 messages: 3848 3905 - ScalarCmd 3906 + communication: 3907 + - btle: 3908 + names: 3909 + - PTVEA* 3910 + - PBT* 3911 + - PCS* 3912 + - PHT* 3913 + services: 3914 + f000aa64-0451-4000-b000-000000000000: 3915 + txmode: f000aa65-0451-4000-b000-000000000000 3916 + tx: f000aa68-0451-4000-b000-000000000000 3849 3917 tcode-v03: 3850 - serial: 3851 - - port: default 3852 - baud-rate: 115200 3853 - data-bits: 8 3854 - parity: 'N' 3855 - stop-bits: 1 3856 3918 defaults: 3857 3919 name: TCode v0.3 (Single Linear Axis) 3858 3920 features: ··· 3863 3925 - 100 3864 3926 messages: 3865 3927 - LinearCmd 3928 + communication: 3929 + - serial: 3930 + ports: 3931 + - port: default 3932 + baud-rate: 115200 3933 + data-bits: 8 3934 + parity: 'N' 3935 + stop-bits: 1 3866 3936 fredorch: 3867 - btle: 3868 - names: 3869 - - YXlinksSPP 3870 - services: 3871 - 0000ffb0-0000-1000-8000-00805f9b34fb: 3872 - tx: 0000ffb1-0000-1000-8000-00805f9b34fb 3873 - rx: 0000ffb2-0000-1000-8000-00805f9b34fb 3874 3937 defaults: 3875 3938 name: Fredorch Device 3876 3939 features: ··· 3881 3944 - 150 3882 3945 messages: 3883 3946 - LinearCmd 3947 + communication: 3948 + - btle: 3949 + names: 3950 + - YXlinksSPP 3951 + services: 3952 + 0000ffb0-0000-1000-8000-00805f9b34fb: 3953 + tx: 0000ffb1-0000-1000-8000-00805f9b34fb 3954 + rx: 0000ffb2-0000-1000-8000-00805f9b34fb 3884 3955 fredorch-rotary: 3885 - btle: 3886 - names: 3887 - - M1_* 3888 - services: 3889 - 0000ae10-0000-1000-8000-00805f9b34fb: 3890 - tx: 0000ae01-0000-1000-8000-00805f9b34fb 3891 - rx: 0000ae02-0000-1000-8000-00805f9b34fb 3892 3956 defaults: 3893 3957 name: Fredorch Rotary Device 3894 3958 features: ··· 3900 3964 - 20 3901 3965 messages: 3902 3966 - ScalarCmd 3967 + communication: 3968 + - btle: 3969 + names: 3970 + - M1_* 3971 + services: 3972 + 0000ae10-0000-1000-8000-00805f9b34fb: 3973 + tx: 0000ae01-0000-1000-8000-00805f9b34fb 3974 + rx: 0000ae02-0000-1000-8000-00805f9b34fb 3903 3975 mizzzee: 3904 - btle: 3905 - names: 3906 - - NFY008 3907 - services: 3908 - 0000eea0-0000-1000-8000-00805f9b34fb: 3909 - tx: 0000eea1-0000-1000-8000-00805f9b34fb 3910 3976 defaults: 3911 3977 name: Mizz Zee Device 3912 3978 features: ··· 3917 3983 - 68 3918 3984 messages: 3919 3985 - ScalarCmd 3986 + communication: 3987 + - btle: 3988 + names: 3989 + - NFY008 3990 + services: 3991 + 0000eea0-0000-1000-8000-00805f9b34fb: 3992 + tx: 0000eea1-0000-1000-8000-00805f9b34fb 3920 3993 mizzzee-v2: 3921 - btle: 3922 - names: 3923 - - XHT 3924 - services: 3925 - 0000eea0-0000-1000-8000-00805f9b34fb: 3926 - tx: 0000ee01-0000-1000-8000-00805f9b34fb 3927 3994 defaults: 3928 3995 name: Mizz Zee Device 3929 3996 features: ··· 3934 4001 - 68 3935 4002 messages: 3936 4003 - ScalarCmd 4004 + communication: 4005 + - btle: 4006 + names: 4007 + - XHT 4008 + services: 4009 + 0000eea0-0000-1000-8000-00805f9b34fb: 4010 + tx: 0000ee01-0000-1000-8000-00805f9b34fb 3937 4011 mizzzee-v3: 3938 - btle: 3939 - names: 3940 - - XHTKJ 3941 - services: 3942 - 0000ff10-0000-1000-8000-00805f9b34fb: 3943 - tx: 0000ff12-0000-1000-8000-00805f9b34fb 3944 4012 defaults: 3945 4013 name: Mizz Zee Device 3946 4014 features: ··· 3951 4019 - 1000 3952 4020 messages: 3953 4021 - ScalarCmd 4022 + communication: 4023 + - btle: 4024 + names: 4025 + - XHTKJ 4026 + services: 4027 + 0000ff10-0000-1000-8000-00805f9b34fb: 4028 + tx: 0000ff12-0000-1000-8000-00805f9b34fb 3954 4029 htk_bm: 3955 - btle: 3956 - names: 3957 - - HTK-BLE-BM001 3958 - services: 3959 - 0000180f-0000-1000-8000-00805f9b34fb: 3960 - rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 3961 - 00001802-0000-1000-8000-00805f9b34fb: 3962 - tx: 00002a06-0000-1000-8000-00805f9b34fb 3963 4030 defaults: 3964 4031 name: HTK Breast Massager 3965 4032 features: ··· 3977 4044 - 1 3978 4045 messages: 3979 4046 - ScalarCmd 4047 + communication: 4048 + - btle: 4049 + names: 4050 + - HTK-BLE-BM001 4051 + services: 4052 + 0000180f-0000-1000-8000-00805f9b34fb: 4053 + rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 4054 + 00001802-0000-1000-8000-00805f9b34fb: 4055 + tx: 00002a06-0000-1000-8000-00805f9b34fb 3980 4056 ankni: 3981 - btle: 3982 - names: 3983 - - DSJM 3984 - services: 3985 - 0000fe00-0000-1000-8000-00805f9b34fb: 3986 - tx: 0000fe01-0000-1000-8000-00805f9b34fb 3987 - 0000fffe-0000-1000-8000-00805f9b34fb: 3988 - tx: 0000fe02-0000-1000-8000-00805f9b34fb 3989 - 0000180a-0000-1000-8000-00805f9b34fb: 3990 - generic0: 00002a50-0000-1000-8000-00805f9b34fb 3991 4057 defaults: 3992 4058 name: Roselex Device 3993 4059 features: ··· 3998 4064 - 3 3999 4065 messages: 4000 4066 - ScalarCmd 4067 + communication: 4068 + - btle: 4069 + names: 4070 + - DSJM 4071 + services: 4072 + 0000fe00-0000-1000-8000-00805f9b34fb: 4073 + tx: 0000fe01-0000-1000-8000-00805f9b34fb 4074 + 0000fffe-0000-1000-8000-00805f9b34fb: 4075 + tx: 0000fe02-0000-1000-8000-00805f9b34fb 4076 + 0000180a-0000-1000-8000-00805f9b34fb: 4077 + generic0: 00002a50-0000-1000-8000-00805f9b34fb 4001 4078 hgod: 4002 - btle: 4003 - names: 4004 - - AMN NEO 4005 - services: 4006 - 0000ffe3-0000-1000-8000-00805f9b34fb: 4007 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 4008 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 4009 4079 defaults: 4010 4080 name: Hgod Device 4011 4081 features: ··· 4016 4086 - 10 4017 4087 messages: 4018 4088 - ScalarCmd 4089 + communication: 4090 + - btle: 4091 + names: 4092 + - AMN NEO 4093 + services: 4094 + 0000ffe3-0000-1000-8000-00805f9b34fb: 4095 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 4096 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 4019 4097 lovedistance: 4020 - btle: 4021 - names: 4022 - - REACH G 4023 - - REACH 4024 - - MAG 4025 - - SPAN 4026 - - RANGE 4027 - services: 4028 - 0000ff00-0000-1000-8000-00805f9b34fb: 4029 - tx: 0000ff01-0000-1000-8000-00805f9b34fb 4030 - rx: 0000ff02-0000-1000-8000-00805f9b34fb 4031 4098 defaults: 4032 4099 name: Love Distance Device 4033 4100 features: ··· 4054 4121 - identifier: 4055 4122 - RANGE 4056 4123 name: Love Distance Range 4124 + communication: 4125 + - btle: 4126 + names: 4127 + - REACH G 4128 + - REACH 4129 + - MAG 4130 + - SPAN 4131 + - RANGE 4132 + services: 4133 + 0000ff00-0000-1000-8000-00805f9b34fb: 4134 + tx: 0000ff01-0000-1000-8000-00805f9b34fb 4135 + rx: 0000ff02-0000-1000-8000-00805f9b34fb 4057 4136 satisfyer: 4058 - btle: 4059 - names: 4060 - - SF * 4061 - manufacturer-data: 4062 - - company: 93 4063 - data: 4064 - - 0 4065 - - 0 4066 - - 39 4067 - - company: 93 4068 - data: 4069 - - 0 4070 - - 0 4071 - - 40 4072 - services: 4073 - 0000180a-0000-1000-8000-00805f9b34fb: 4074 - rxblemodel: 00002a24-0000-1000-8000-00805f9b34fb 4075 - 51361500-c5e7-47c7-8a6e-47ebc99d80e8: 4076 - command: 51361501-c5e7-47c7-8a6e-47ebc99d80e8 4077 - tx: 51361502-c5e7-47c7-8a6e-47ebc99d80e8 4078 4137 defaults: 4079 4138 name: Satisfyer Device 4080 4139 features: ··· 5121 5180 - 100 5122 5181 messages: 5123 5182 - ScalarCmd 5183 + communication: 5184 + - btle: 5185 + names: 5186 + - SF * 5187 + manufacturer-data: 5188 + - company: 93 5189 + data: 5190 + - 0 5191 + - 0 5192 + - 39 5193 + - company: 93 5194 + data: 5195 + - 0 5196 + - 0 5197 + - 40 5198 + services: 5199 + 0000180a-0000-1000-8000-00805f9b34fb: 5200 + rxblemodel: 00002a24-0000-1000-8000-00805f9b34fb 5201 + 51361500-c5e7-47c7-8a6e-47ebc99d80e8: 5202 + command: 51361501-c5e7-47c7-8a6e-47ebc99d80e8 5203 + tx: 51361502-c5e7-47c7-8a6e-47ebc99d80e8 5124 5204 mannuo: 5125 - btle: 5126 - names: 5127 - - Sex toys 5128 - - Sex Toys 5129 - - LXCDVP 5130 - - MANO PRODUCT 5131 - services: 5132 - 0000fff0-0000-1000-8000-00805f9b34fb: 5133 - tx: 0000fff1-0000-1000-8000-00805f9b34fb 5134 - rx: 0000fff4-0000-1000-8000-00805f9b34fb 5135 5205 defaults: 5136 5206 name: ManNuo Device 5137 5207 features: ··· 5142 5212 - 3 5143 5213 messages: 5144 5214 - ScalarCmd 5215 + communication: 5216 + - btle: 5217 + names: 5218 + - Sex toys 5219 + - Sex Toys 5220 + - LXCDVP 5221 + - MANO PRODUCT 5222 + services: 5223 + 0000fff0-0000-1000-8000-00805f9b34fb: 5224 + tx: 0000fff1-0000-1000-8000-00805f9b34fb 5225 + rx: 0000fff4-0000-1000-8000-00805f9b34fb 5145 5226 kgoal-boost: 5146 - btle: 5147 - names: 5148 - - Boost 5149 - services: 5150 - 0000180f-0000-1000-8000-00805f9b34fb: 5151 - rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 5152 - 8e7c6065-7656-17ad-1b41-b53d1a548e0d: 5153 - rxpressure: 10c2be2d-d2d5-b7a8-5f42-e2468c9ebbf5 5154 5227 defaults: 5155 5228 name: KGoal Boost 5156 5229 features: ··· 5162 5235 - 100 5163 5236 messages: 5164 5237 - SensorReadCmd 5238 + communication: 5239 + - btle: 5240 + names: 5241 + - Boost 5242 + services: 5243 + 0000180f-0000-1000-8000-00805f9b34fb: 5244 + rxblebattery: 00002a19-0000-1000-8000-00805f9b34fb 5245 + 8e7c6065-7656-17ad-1b41-b53d1a548e0d: 5246 + rxpressure: 10c2be2d-d2d5-b7a8-5f42-e2468c9ebbf5 5165 5247 meese: 5166 - btle: 5167 - names: 5168 - - Meese-V389 5169 - - Meese-cd 5170 - services: 5171 - 0000ffe0-0000-1000-8000-00805f9b34fb: 5172 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 5173 5248 defaults: 5174 5249 name: Meese Device 5175 5250 features: ··· 5202 5277 - 10 5203 5278 messages: 5204 5279 - ScalarCmd 5280 + communication: 5281 + - btle: 5282 + names: 5283 + - Meese-V389 5284 + - Meese-cd 5285 + services: 5286 + 0000ffe0-0000-1000-8000-00805f9b34fb: 5287 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 5205 5288 hismith: 5206 - btle: 5207 - names: 5208 - - HISMITH 5209 - - Wildolo 5210 - - "\aHISMITH" 5211 - services: 5212 - 0000ffe5-0000-1000-8000-00805f9b34fb: 5213 - tx: 0000ffe9-0000-1000-8000-00805f9b34fb 5214 - 0000ff90-0000-1000-8000-00805f9b34fb: 5215 - rxblemodel: 0000ff96-0000-1000-8000-00805f9b34fb 5216 5289 defaults: 5217 5290 name: Hismith device 5218 5291 features: ··· 5264 5337 - 100 5265 5338 messages: 5266 5339 - ScalarCmd 5340 + communication: 5341 + - btle: 5342 + names: 5343 + - HISMITH 5344 + - Wildolo 5345 + - "\aHISMITH" 5346 + services: 5347 + 0000ffe5-0000-1000-8000-00805f9b34fb: 5348 + tx: 0000ffe9-0000-1000-8000-00805f9b34fb 5349 + 0000ff90-0000-1000-8000-00805f9b34fb: 5350 + rxblemodel: 0000ff96-0000-1000-8000-00805f9b34fb 5267 5351 hismith-mini: 5268 - btle: 5269 - names: 5270 - - Auxfun-Box 5271 - - Sinloli 5272 - - Sinloli-Sherry 5273 - - Eropair * 5274 - - HISMITH S1 5275 - services: 5276 - 0000ffe5-0000-1000-8000-00805f9b34fb: 5277 - tx: 0000ffe9-0000-1000-8000-00805f9b34fb 5278 - 0000ff90-0000-1000-8000-00805f9b34fb: 5279 - rxblemodel: 0000ff96-0000-1000-8000-00805f9b34fb 5280 5352 defaults: 5281 5353 name: Hismith Mini device 5282 5354 features: ··· 5375 5447 - 100 5376 5448 messages: 5377 5449 - ScalarCmd 5450 + communication: 5451 + - btle: 5452 + names: 5453 + - Auxfun-Box 5454 + - Sinloli 5455 + - Sinloli-Sherry 5456 + - Eropair * 5457 + - HISMITH S1 5458 + services: 5459 + 0000ffe5-0000-1000-8000-00805f9b34fb: 5460 + tx: 0000ffe9-0000-1000-8000-00805f9b34fb 5461 + 0000ff90-0000-1000-8000-00805f9b34fb: 5462 + rxblemodel: 0000ff96-0000-1000-8000-00805f9b34fb 5378 5463 hismith-servo: 5379 - btle: 5380 - names: 5381 - - HISMITH S2 5382 - services: 5383 - 0000ffe5-0000-1000-8000-00805f9b34fb: 5384 - tx: 0000ffe9-0000-1000-8000-00805f9b34fb 5385 - 0000ff90-0000-1000-8000-00805f9b34fb: 5386 - rxblemodel: 0000ff96-0000-1000-8000-00805f9b34fb 5387 5464 defaults: 5388 5465 name: Hismith servo device 5389 5466 features: ··· 5399 5476 - identifier: 5400 5477 - '1101' 5401 5478 name: Hismith Servo 5479 + communication: 5480 + - btle: 5481 + names: 5482 + - HISMITH S2 5483 + services: 5484 + 0000ffe5-0000-1000-8000-00805f9b34fb: 5485 + tx: 0000ffe9-0000-1000-8000-00805f9b34fb 5486 + 0000ff90-0000-1000-8000-00805f9b34fb: 5487 + rxblemodel: 0000ff96-0000-1000-8000-00805f9b34fb 5402 5488 wetoy: 5403 - btle: 5404 - names: 5405 - - WeToy 5406 - services: 5407 - 0000fff0-0000-1000-8000-00805f9b34fb: 5408 - tx: 0000fff3-0000-1000-8000-00805f9b34fb 5409 5489 defaults: 5410 5490 name: WeToy MiNa 5411 5491 features: ··· 5416 5496 - 3 5417 5497 messages: 5418 5498 - ScalarCmd 5499 + communication: 5500 + - btle: 5501 + names: 5502 + - WeToy 5503 + services: 5504 + 0000fff0-0000-1000-8000-00805f9b34fb: 5505 + tx: 0000fff3-0000-1000-8000-00805f9b34fb 5419 5506 pink_punch: 5420 - btle: 5421 - names: 5422 - - Pink_Punch 5423 - - PinkPunch_Peachu 5424 - services: 5425 - 0000ffe0-0000-1000-8000-00805f9b34fb: 5426 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 5427 5507 defaults: 5428 5508 name: Pink Punch Sunset Mushroom 5429 5509 configurations: ··· 5438 5518 - 100 5439 5519 messages: 5440 5520 - ScalarCmd 5521 + communication: 5522 + - btle: 5523 + names: 5524 + - Pink_Punch 5525 + - PinkPunch_Peachu 5526 + services: 5527 + 0000ffe0-0000-1000-8000-00805f9b34fb: 5528 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 5441 5529 sakuraneko: 5442 - btle: 5443 - names: 5444 - - sakuraneko-01 5445 - - sakuraneko-02 5446 - - sakuraneko-03 5447 - - sakuraneko-04 5448 - services: 5449 - 0000ffe0-0000-1000-8000-00805f9b34fb: 5450 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 5451 5530 defaults: 5452 5531 name: Sakuraneko Device 5453 5532 features: ··· 5486 5565 - 100 5487 5566 messages: 5488 5567 - ScalarCmd 5568 + communication: 5569 + - btle: 5570 + names: 5571 + - sakuraneko-01 5572 + - sakuraneko-02 5573 + - sakuraneko-03 5574 + - sakuraneko-04 5575 + services: 5576 + 0000ffe0-0000-1000-8000-00805f9b34fb: 5577 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 5489 5578 synchro: 5490 - btle: 5491 - names: 5492 - - Shinkuro 5493 - - synchro2 5494 - - synchro EX 5495 - services: 5496 - 0000ffe0-0000-1000-8000-00805f9b34fb: 5497 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 5498 5579 defaults: 5499 5580 name: Synchro 5500 5581 features: ··· 5509 5590 - identifier: 5510 5591 - synchro EX 5511 5592 name: Synchro Exchange 5593 + communication: 5594 + - btle: 5595 + names: 5596 + - Shinkuro 5597 + - synchro2 5598 + - synchro EX 5599 + services: 5600 + 0000ffe0-0000-1000-8000-00805f9b34fb: 5601 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 5512 5602 tryfun: 5513 - btle: 5514 - names: 5515 - - TRYFUN-ONE 5516 - services: 5517 - 0000ff10-0000-1000-8000-00805f9b34fb: 5518 - tx: 0000fff1-0000-1000-8000-00805f9b34fb 5519 5603 defaults: 5520 5604 name: TryFun Yuan Series 5521 5605 features: ··· 5533 5617 - 9 5534 5618 messages: 5535 5619 - ScalarCmd 5620 + communication: 5621 + - btle: 5622 + names: 5623 + - TRYFUN-ONE 5624 + services: 5625 + 0000ff10-0000-1000-8000-00805f9b34fb: 5626 + tx: 0000fff1-0000-1000-8000-00805f9b34fb 5536 5627 metaxsire: 5537 - btle: 5538 - names: 5539 - - Rex 5540 - - Cali 5541 - - Olis 5542 - - LY213A01 5543 - services: 5544 - 0000ffe0-0000-1000-8000-00805f9b34fb: 5545 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 5546 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 5547 5628 defaults: 5548 5629 name: metaXsire Device 5549 5630 features: ··· 5619 5700 - 255 5620 5701 messages: 5621 5702 - ScalarCmd 5703 + communication: 5704 + - btle: 5705 + names: 5706 + - Rex 5707 + - Cali 5708 + - Olis 5709 + - LY213A01 5710 + services: 5711 + 0000ffe0-0000-1000-8000-00805f9b34fb: 5712 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 5713 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 5622 5714 metaxsire-repeat: 5623 - btle: 5624 - names: 5625 - - LY199B01 5626 - - LY234A01 5627 - - LY271A01 5628 - - LY270A01 5629 - services: 5630 - 0000ffe0-0000-1000-8000-00805f9b34fb: 5631 - tx: 0000ffe1-0000-1000-8000-00805f9b34fb 5632 - rx: 0000ffe2-0000-1000-8000-00805f9b34fb 5633 5715 defaults: 5634 5716 name: Cooxer Bullet Vibe 5635 5717 features: ··· 5653 5735 - identifier: 5654 5736 - LY270A01 5655 5737 name: metaXsire Una 5738 + communication: 5739 + - btle: 5740 + names: 5741 + - LY199B01 5742 + - LY234A01 5743 + - LY271A01 5744 + - LY270A01 5745 + services: 5746 + 0000ffe0-0000-1000-8000-00805f9b34fb: 5747 + tx: 0000ffe1-0000-1000-8000-00805f9b34fb 5748 + rx: 0000ffe2-0000-1000-8000-00805f9b34fb 5656 5749 metaxsire-v2: 5657 - btle: 5658 - names: 5659 - - LY272A01 5660 - services: 5661 - 0000bae0-0000-1000-8000-00805f9b34fb: 5662 - tx: 0000bae1-0000-1000-8000-00805f9b34fb 5663 5750 defaults: 5664 5751 name: metaXsire Nolan 5665 5752 features: ··· 5677 5764 - 20 5678 5765 messages: 5679 5766 - ScalarCmd 5767 + communication: 5768 + - btle: 5769 + names: 5770 + - LY272A01 5771 + services: 5772 + 0000bae0-0000-1000-8000-00805f9b34fb: 5773 + tx: 0000bae1-0000-1000-8000-00805f9b34fb 5680 5774 metaxsire-v3: 5681 - btle: 5682 - names: 5683 - - TAY001 5684 - services: 5685 - 0000fff0-0000-1000-8000-00805f9b34fb: 5686 - tx: 0000fe02-0000-1000-8000-00805f9b34fb 5687 5775 defaults: 5688 5776 name: metaXsire Tay 5689 5777 features: ··· 5694 5782 - 20 5695 5783 messages: 5696 5784 - ScalarCmd 5785 + communication: 5786 + - btle: 5787 + names: 5788 + - TAY001 5789 + services: 5790 + 0000fff0-0000-1000-8000-00805f9b34fb: 5791 + tx: 0000fe02-0000-1000-8000-00805f9b34fb 5697 5792 cowgirl: 5698 - btle: 5699 - names: 5700 - - THE COWGIRL 5701 - - THE UNICORN 5702 - services: 5703 - 0000fe00-0000-1000-8000-00805f9b34fb: 5704 - tx: 0000fe01-0000-1000-8000-00805f9b34fb 5705 5793 defaults: 5706 5794 name: The Cowgirl Device 5707 5795 features: ··· 5726 5814 - identifier: 5727 5815 - THE UNICORN 5728 5816 name: The Unicorn 5817 + communication: 5818 + - btle: 5819 + names: 5820 + - THE COWGIRL 5821 + - THE UNICORN 5822 + services: 5823 + 0000fe00-0000-1000-8000-00805f9b34fb: 5824 + tx: 0000fe01-0000-1000-8000-00805f9b34fb 5729 5825 galaku-pump: 5730 - btle: 5731 - names: 5732 - - V415 5733 - services: 5734 - 00001000-0000-1000-8000-00805f9b34fb: 5735 - tx: 00001001-0000-1000-8000-00805f9b34fb 5736 5826 defaults: 5737 5827 name: Galaku Device 5738 5828 features: ··· 5754 5844 - identifier: 5755 5845 - V415 5756 5846 name: Galaku Nebula 5847 + communication: 5848 + - btle: 5849 + names: 5850 + - V415 5851 + services: 5852 + 00001000-0000-1000-8000-00805f9b34fb: 5853 + tx: 00001001-0000-1000-8000-00805f9b34fb 5757 5854 xibao: 5758 - btle: 5759 - names: 5760 - - CCYB_* 5761 - services: 5762 - 0000fff0-0000-1000-8000-00805f9b34fb: 5763 - tx: 0000fff2-0000-1000-8000-00805f9b34fb 5764 5855 defaults: 5765 5856 name: Xibao Smart Masturbation Cup 5766 5857 features: ··· 5771 5862 - 99 5772 5863 messages: 5773 5864 - ScalarCmd 5865 + communication: 5866 + - btle: 5867 + names: 5868 + - CCYB_* 5869 + services: 5870 + 0000fff0-0000-1000-8000-00805f9b34fb: 5871 + tx: 0000fff2-0000-1000-8000-00805f9b34fb 5774 5872 sensee: 5775 - btle: 5776 - names: 5777 - - CTY222S4 5778 - services: 5779 - 0000fff0-0000-1000-8000-00805f9b34fb: 5780 - tx: 0000fff5-0000-1000-8000-00805f9b34fb 5781 5873 defaults: 5782 5874 name: Sensee Diandou Rabbit 5783 5875 features: ··· 5788 5880 - 100 5789 5881 messages: 5790 5882 - ScalarCmd 5883 + communication: 5884 + - btle: 5885 + names: 5886 + - CTY222S4 5887 + services: 5888 + 0000fff0-0000-1000-8000-00805f9b34fb: 5889 + tx: 0000fff5-0000-1000-8000-00805f9b34fb 5791 5890 sensee-capsule: 5792 - btle: 5793 - names: 5794 - - CCPA10S2 5795 - services: 5796 - 0000fff0-0000-1000-8000-00805f9b34fb: 5797 - tx: 0000fff5-0000-1000-8000-00805f9b34fb 5798 5891 defaults: 5799 5892 name: Sensee Capsule 5800 5893 features: ··· 5812 5905 - 3 5813 5906 messages: 5814 5907 - ScalarCmd 5908 + communication: 5909 + - btle: 5910 + names: 5911 + - CCPA10S2 5912 + services: 5913 + 0000fff0-0000-1000-8000-00805f9b34fb: 5914 + tx: 0000fff5-0000-1000-8000-00805f9b34fb 5815 5915 fox: 5816 - btle: 5817 - names: 5818 - - FOX 5819 - - FOX M70 Pro 5820 - - FoxM70Pro 5821 - services: 5822 - 0000ae00-0000-1000-8000-00805f9b34fb: 5823 - tx: 0000ae01-0000-1000-8000-00805f9b34fb 5824 5916 defaults: 5825 5917 name: Fox Device 5826 5918 features: ··· 5831 5923 - 3 5832 5924 messages: 5833 5925 - ScalarCmd 5926 + communication: 5927 + - btle: 5928 + names: 5929 + - FOX 5930 + - FOX M70 Pro 5931 + - FoxM70Pro 5932 + services: 5933 + 0000ae00-0000-1000-8000-00805f9b34fb: 5934 + tx: 0000ae01-0000-1000-8000-00805f9b34fb 5834 5935 kizuna: 5835 - serial: 5836 - - port: default 5837 - baud-rate: 19200 5838 - data-bits: 8 5839 - parity: 'N' 5840 - stop-bits: 1 5841 5936 defaults: 5842 5937 name: Kizuna Smart 5843 5938 features: ··· 5848 5943 - 9 5849 5944 messages: 5850 5945 - ScalarCmd 5946 + communication: 5947 + - serial: 5948 + ports: 5949 + - port: default 5950 + baud-rate: 19200 5951 + data-bits: 8 5952 + parity: 'N' 5953 + stop-bits: 1 5851 5954 xiuxiuda: 5852 - btle: 5853 - names: 5854 - - XXD-Lush* 5855 - services: 5856 - 53300001-0023-4bd4-bbd5-a6920e4c5653: 5857 - tx: 53300003-0023-4bd4-bbd5-a6920e4c5653 5858 5955 defaults: 5859 5956 name: Xiuxiuda Device 5860 5957 features: ··· 5865 5962 - 19 5866 5963 messages: 5867 5964 - ScalarCmd 5965 + communication: 5966 + - btle: 5967 + names: 5968 + - XXD-Lush* 5969 + services: 5970 + 53300001-0023-4bd4-bbd5-a6920e4c5653: 5971 + tx: 53300003-0023-4bd4-bbd5-a6920e4c5653 5868 5972 longlosttouch: 5869 - btle: 5870 - names: 5871 - - RS-KNW 5872 - services: 5873 - 0000cb60-0000-1000-8000-00805f9b34fb: 5874 - tx: 0000cb61-0000-1000-8000-00805f9b34fb 5875 - rx: 0000cb62-0000-1000-8000-00805f9b34fb 5876 5973 defaults: 5877 5974 name: Long Lost Touch Possible Kiss 5878 5975 features: ··· 5890 5987 - 100 5891 5988 messages: 5892 5989 - ScalarCmd 5990 + communication: 5991 + - btle: 5992 + names: 5993 + - RS-KNW 5994 + services: 5995 + 0000cb60-0000-1000-8000-00805f9b34fb: 5996 + tx: 0000cb61-0000-1000-8000-00805f9b34fb 5997 + rx: 0000cb62-0000-1000-8000-00805f9b34fb 5893 5998 adrienlastic: 5894 - btle: 5895 - names: 5896 - - Placeholder to avoid conflict with bad attempt to clone a Lovense Lush 5897 - advertised-services: 5898 - - 00001320-0000-1000-8000-00805f9b34fb 5899 - services: 5900 - 6e400001-b5a3-f393-e0a9-e50e24dcca9e: 5901 - tx: 6e400002-b5a3-f393-e0a9-e50e24dcca9e 5902 5999 defaults: 5903 6000 name: Adrien Lastic Device 5904 6001 features: ··· 5916 6013 - identifier: 5917 6014 - LVS-S002 5918 6015 name: Adrien Lastic Revelation 6016 + communication: 6017 + - btle: 6018 + names: 6019 + - >- 6020 + Placeholder to avoid conflict with bad attempt to clone a Lovense 6021 + Lush 6022 + advertised-services: 6023 + - 00001320-0000-1000-8000-00805f9b34fb 6024 + services: 6025 + 6e400001-b5a3-f393-e0a9-e50e24dcca9e: 6026 + tx: 6e400002-b5a3-f393-e0a9-e50e24dcca9e 5919 6027 nintendo-joycon: 5920 - hid: 5921 - - vendor-id: 1406 5922 - product-id: 8199 5923 - - vendor-id: 1406 5924 - product-id: 8198 5925 - - vendor-id: 1406 5926 - product-id: 8201 5927 6028 defaults: 5928 6029 name: Nintendo Joycon 5929 6030 features: ··· 5934 6035 - 1000 5935 6036 messages: 5936 6037 - ScalarCmd 6038 + communication: 6039 + - hid: 6040 + pairs: 6041 + - vendor-id: 1406 6042 + product-id: 8199 6043 + - vendor-id: 1406 6044 + product-id: 8198 6045 + - vendor-id: 1406 6046 + product-id: 8201 5937 6047 foreo: 5938 - btle: 5939 - names: 5940 - - FOFO 5941 - - LUNA fofo 5942 - - LUNA FOFO 5943 - - LUNA PLAY SMART 5944 - - LUNA PLAYSMART2 5945 - - LUNA PLAY SMART2 5946 - - LUNA play smart2 5947 - - LUNA play smart 2 5948 - - LUNA 3 5949 - - LUNA3 5950 - - LUNA3PLUS 5951 - - LUNA3 PLUS 5952 - - LUNA 3 PLUS 5953 - - LUNA 3 plus 5954 - - LUNA 3 MEN 5955 - - LUNA3MEN 5956 - - LUNA MINI3 5957 - - LUNA MINI 3 5958 - - LUNA mini 3 5959 - - LUNA4PLUS 5960 - - LUNA4 5961 - - LUNA 4 5962 - - LUNA4PLUS 5963 - - LUNA4 PLUS 5964 - - LUNA 4 plus 5965 - - LUNA4MEN 5966 - - LUNA 4 MEN 5967 - - LUNA 4 FOR MEN 5968 - - LUNA MINI4 5969 - - LUNA MINI 4 5970 - - LUNA mini 4 5971 - - LUNA 4 mini 5972 - - UFO 5973 - - UFO mini 5974 - - UFO MINI 5975 - - UFO MIN 5976 - - UFO2 5977 - - UFO 2 5978 - - UFOMINI2 5979 - - UFO mini 2 5980 - - UFO3 5981 - - UFO3mini 5982 - - UFO3go 5983 - - UFO3led 5984 - - BEAR 5985 - - BEAR_MINI 5986 - - BEAR MINI 5987 - - BEAR mini 5988 - - BEAR2 5989 - - BEAR 2 5990 - - BEAR2go 5991 - - BEAR2body 5992 - - BEAR2eyes 5993 - - KIWI 5994 - - KIWI derma 5995 - services: 5996 - 0000fff0-0000-1000-8000-00805f9b34fb: 5997 - tx: 0000fff1-0000-1000-8000-00805f9b34fb 5998 6048 defaults: 5999 6049 name: Foreo Device 6000 6050 features: ··· 6112 6162 - identifier: 6113 6163 - KIWI derma 6114 6164 name: Foreo KIWI derma 6165 + communication: 6166 + - btle: 6167 + names: 6168 + - FOFO 6169 + - LUNA fofo 6170 + - LUNA FOFO 6171 + - LUNA PLAY SMART 6172 + - LUNA PLAYSMART2 6173 + - LUNA PLAY SMART2 6174 + - LUNA play smart2 6175 + - LUNA play smart 2 6176 + - LUNA 3 6177 + - LUNA3 6178 + - LUNA3PLUS 6179 + - LUNA3 PLUS 6180 + - LUNA 3 PLUS 6181 + - LUNA 3 plus 6182 + - LUNA 3 MEN 6183 + - LUNA3MEN 6184 + - LUNA MINI3 6185 + - LUNA MINI 3 6186 + - LUNA mini 3 6187 + - LUNA4PLUS 6188 + - LUNA4 6189 + - LUNA 4 6190 + - LUNA4PLUS 6191 + - LUNA4 PLUS 6192 + - LUNA 4 plus 6193 + - LUNA4MEN 6194 + - LUNA 4 MEN 6195 + - LUNA 4 FOR MEN 6196 + - LUNA MINI4 6197 + - LUNA MINI 4 6198 + - LUNA mini 4 6199 + - LUNA 4 mini 6200 + - UFO 6201 + - UFO mini 6202 + - UFO MINI 6203 + - UFO MIN 6204 + - UFO2 6205 + - UFO 2 6206 + - UFOMINI2 6207 + - UFO mini 2 6208 + - UFO3 6209 + - UFO3mini 6210 + - UFO3go 6211 + - UFO3led 6212 + - BEAR 6213 + - BEAR_MINI 6214 + - BEAR MINI 6215 + - BEAR mini 6216 + - BEAR2 6217 + - BEAR 2 6218 + - BEAR2go 6219 + - BEAR2body 6220 + - BEAR2eyes 6221 + - KIWI 6222 + - KIWI derma 6223 + services: 6224 + 0000fff0-0000-1000-8000-00805f9b34fb: 6225 + tx: 0000fff1-0000-1000-8000-00805f9b34fb 6115 6226 monsterpub: 6116 - btle: 6117 - names: 6118 - - MonsterPub 6119 - services: 6120 - 00006000-0000-1000-8000-00805f9b34fb: 6121 - tx: 00006001-0000-1000-8000-00805f9b34fb 6122 - txmode: 00006002-0000-1000-8000-00805f9b34fb 6123 - txvibrate: 00006003-0000-1000-8000-00805f9b34fb 6124 - 00006010-0000-1000-8000-00805f9b34fb: 6125 - rxblemodel: 00006014-0000-1000-8000-00805f9b34fb 6126 - 00008000-0000-1000-8000-00805f9b34fb: 6127 - rx: 00008001-0000-1000-8000-00805f9b34fb 6128 6227 defaults: 6129 6228 name: Sistalk MonsterPub Device 6130 6229 features: ··· 6214 6313 - identifier: 6215 6314 - MP1N_QC_TL_P2 6216 6315 name: Sistalk MonsterPub BeatHeart 6316 + communication: 6317 + - btle: 6318 + names: 6319 + - MonsterPub 6320 + services: 6321 + 00006000-0000-1000-8000-00805f9b34fb: 6322 + tx: 00006001-0000-1000-8000-00805f9b34fb 6323 + txmode: 00006002-0000-1000-8000-00805f9b34fb 6324 + txvibrate: 00006003-0000-1000-8000-00805f9b34fb 6325 + 00006010-0000-1000-8000-00805f9b34fb: 6326 + rxblemodel: 00006014-0000-1000-8000-00805f9b34fb 6327 + 00008000-0000-1000-8000-00805f9b34fb: 6328 + rx: 00008001-0000-1000-8000-00805f9b34fb 6217 6329 joyhub: 6218 - btle: 6219 - names: 6220 - - J-Petalwish2 6221 - - J-VortexTongue 6222 - - J-Velocity 6223 - - JOYHUB-ROSELLA2 6224 - - J-VibSiren 6225 - - J-ElixirEgg 6226 - - J-RetroGuard 6227 - - J-TrueForm3 6228 - services: 6229 - 0000ffa0-0000-1000-8000-00805f9b34fb: 6230 - tx: 0000ffa1-0000-1000-8000-00805f9b34fb 6231 6330 defaults: 6232 6331 name: JoyHub Device 6233 6332 features: ··· 6325 6424 - 255 6326 6425 messages: 6327 6426 - ScalarCmd 6427 + communication: 6428 + - btle: 6429 + names: 6430 + - J-Petalwish2 6431 + - J-VortexTongue 6432 + - J-Velocity 6433 + - JOYHUB-ROSELLA2 6434 + - J-VibSiren 6435 + - J-ElixirEgg 6436 + - J-RetroGuard 6437 + - J-TrueForm3 6438 + services: 6439 + 0000ffa0-0000-1000-8000-00805f9b34fb: 6440 + tx: 0000ffa1-0000-1000-8000-00805f9b34fb 6328 6441 joyhub-v2: 6329 - btle: 6330 - names: 6331 - - J-Pearlconch 6332 - - J-PetiteRose 6333 - - J-MoonHorn 6334 - - J-VibTrefoil 6335 - - J-Panther 6336 - - J-Mecha 6337 - - J-Lagoon 6338 - - J-Firedragon 6339 - services: 6340 - 0000ffa0-0000-1000-8000-00805f9b34fb: 6341 - tx: 0000ffa1-0000-1000-8000-00805f9b34fb 6342 6442 defaults: 6343 6443 name: JoyHub Device 6344 6444 features: ··· 6499 6599 - 255 6500 6600 messages: 6501 6601 - ScalarCmd 6602 + communication: 6603 + - btle: 6604 + names: 6605 + - J-Pearlconch 6606 + - J-PetiteRose 6607 + - J-MoonHorn 6608 + - J-VibTrefoil 6609 + - J-Panther 6610 + - J-Mecha 6611 + - J-Lagoon 6612 + - J-Firedragon 6613 + services: 6614 + 0000ffa0-0000-1000-8000-00805f9b34fb: 6615 + tx: 0000ffa1-0000-1000-8000-00805f9b34fb 6502 6616 itoys: 6503 - btle: 6504 - names: 6505 - - 26-021-B 6506 - services: 6507 - 0000ffa0-0000-1000-8000-00805f9b34fb: 6508 - tx: 0000ffa1-0000-1000-8000-00805f9b34fb 6509 6617 defaults: 6510 6618 name: iToys Seagull 6511 6619 features: ··· 6516 6624 - 3 6517 6625 messages: 6518 6626 - ScalarCmd 6627 + communication: 6628 + - btle: 6629 + names: 6630 + - 26-021-B 6631 + services: 6632 + 0000ffa0-0000-1000-8000-00805f9b34fb: 6633 + tx: 0000ffa1-0000-1000-8000-00805f9b34fb 6519 6634 leten: 6520 - btle: 6521 - names: 6522 - - T528-LT 6523 - - F537-LT 6524 - - F520B-LT 6525 - - F520A-LT 6526 - services: 6527 - 0000fff0-0000-1000-8000-00805f9b34fb: 6528 - tx: 0000fff1-0000-1000-8000-00805f9b34fb 6529 - 0000ffe0-0000-1000-8000-00805f9b34fb: 6530 - rx: 0000ffe1-0000-1000-8000-00805f9b34fb 6531 6635 defaults: 6532 6636 name: Leten Device 6533 6637 features: ··· 6538 6642 - 25 6539 6643 messages: 6540 6644 - ScalarCmd 6645 + communication: 6646 + - btle: 6647 + names: 6648 + - T528-LT 6649 + - F537-LT 6650 + - F520B-LT 6651 + - F520A-LT 6652 + services: 6653 + 0000fff0-0000-1000-8000-00805f9b34fb: 6654 + tx: 0000fff1-0000-1000-8000-00805f9b34fb 6655 + 0000ffe0-0000-1000-8000-00805f9b34fb: 6656 + rx: 0000ffe1-0000-1000-8000-00805f9b34fb 6541 6657 vibcrafter: 6542 - btle: 6543 - names: 6544 - - be gentle 6545 - services: 6546 - 53300051-0060-4bd4-bbe5-a6920e4c5663: 6547 - tx: 53300052-0060-4bd4-bbe5-a6920e4c5663 6548 - rx: 53300053-0060-4bd4-bbe5-a6920e4c5663 6549 6658 defaults: 6550 6659 name: VibCrafter Device 6551 6660 features: ··· 6563 6672 - 99 6564 6673 messages: 6565 6674 - ScalarCmd 6675 + communication: 6676 + - btle: 6677 + names: 6678 + - be gentle 6679 + services: 6680 + 53300051-0060-4bd4-bbe5-a6920e4c5663: 6681 + tx: 53300052-0060-4bd4-bbe5-a6920e4c5663 6682 + rx: 53300053-0060-4bd4-bbe5-a6920e4c5663
+68 -30
buttplug/src/server/device/configuration/specifier.rs
··· 256 256 } 257 257 } 258 258 259 - /// Specifier for HID (USB, Bluetooth) devices 260 - /// 261 - /// Handles devices managed by the operating system's HID manager. 262 259 #[derive( 263 260 Serialize, Deserialize, Debug, PartialEq, Eq, Clone, Copy, Getters, Setters, MutGetters, 264 261 )] 265 - #[getset(get = "pub", set = "pub", get_mut = "pub(crate)")] 266 - pub struct HIDSpecifier { 262 + pub struct VIDPIDPair { 267 263 #[serde(rename = "vendor-id")] 268 264 vendor_id: u16, 269 265 #[serde(rename = "product-id")] 270 266 product_id: u16, 271 267 } 272 268 273 - impl HIDSpecifier { 269 + /// Specifier for HID (USB, Bluetooth) devices 270 + /// 271 + /// Handles devices managed by the operating system's HID manager. 272 + #[derive( 273 + Serialize, Deserialize, Debug, Eq, Clone, Getters, Setters, MutGetters, 274 + )] 275 + #[getset(get = "pub", set = "pub", get_mut = "pub(crate)")] 276 + pub struct VIDPIDSpecifier { 277 + pairs: Vec<VIDPIDPair> 278 + } 279 + 280 + impl VIDPIDSpecifier { 274 281 pub fn new(vendor_id: u16, product_id: u16) -> Self { 275 282 Self { 276 - vendor_id, 277 - product_id, 283 + pairs: vec![VIDPIDPair { 284 + vendor_id, 285 + product_id, 286 + }] 287 + } 288 + } 289 + } 290 + 291 + impl PartialEq for VIDPIDSpecifier { 292 + fn eq(&self, other: &Self) -> bool { 293 + for pair in &self.pairs { 294 + for other_pair in &other.pairs { 295 + if *pair == *other_pair { 296 + return true; 297 + } 298 + } 278 299 } 300 + false 279 301 } 280 302 } 281 303 282 - /// Specifier for Serial devices 283 - /// 284 - /// Handles serial port device identification (via port names) and configuration. 285 304 #[derive(Serialize, Deserialize, Debug, Clone, Default, Getters, Setters, MutGetters)] 286 305 #[getset(get = "pub", set = "pub", get_mut = "pub(crate)")] 287 - pub struct SerialSpecifier { 306 + pub struct SerialPortInfo { 288 307 #[serde(rename = "baud-rate")] 289 308 baud_rate: u32, 290 309 #[serde(rename = "data-bits")] ··· 295 314 port: String, 296 315 } 297 316 317 + impl PartialEq for SerialPortInfo { 318 + fn eq(&self, other: &Self) -> bool { 319 + self.port == other.port 320 + } 321 + } 322 + 323 + /// Specifier for Serial devices 324 + /// 325 + /// Handles serial port device identification (via port names) and configuration. 326 + #[derive(Serialize, Deserialize, Debug, Clone, Default, Getters, Setters, MutGetters)] 327 + #[getset(get = "pub", set = "pub", get_mut = "pub(crate)")] 328 + pub struct SerialSpecifier { 329 + ports: Vec<SerialPortInfo> 330 + } 331 + 298 332 impl SerialSpecifier { 299 333 /// Given a serial port name (the only identifier we have for this type of device), create a 300 334 /// specifier instance. 301 335 pub fn new_from_name(port: &str) -> Self { 302 - SerialSpecifier { 303 - port: port.to_owned(), 304 - ..Default::default() 336 + Self { 337 + ports: vec![SerialPortInfo { 338 + port: port.to_owned(), 339 + ..Default::default() 340 + }] 305 341 } 306 342 } 307 343 } 308 344 309 345 impl PartialEq for SerialSpecifier { 310 346 fn eq(&self, other: &Self) -> bool { 311 - self.port == other.port 347 + for port in &self.ports { 348 + for other_port in &other.ports { 349 + if *port == *other_port { 350 + return true; 351 + } 352 + } 353 + } 354 + false 312 355 } 313 - } 314 - 315 - /// Specifier for USB devices 316 - #[derive( 317 - Serialize, Deserialize, Debug, PartialEq, Eq, Clone, Copy, Getters, Setters, MutGetters, 318 - )] 319 - #[getset(get = "pub", set = "pub", get_mut = "pub(crate)")] 320 - pub struct USBSpecifier { 321 - #[serde(rename = "vendor-id")] 322 - vendor_id: u16, 323 - #[serde(rename = "product-id")] 324 - product_id: u16, 325 356 } 326 357 327 358 /// Specifier for Websocket Device Manager devices ··· 366 397 /// devices against the list of known devices for a protocol. 367 398 #[derive(Serialize, Deserialize, Debug, Clone)] 368 399 pub enum ProtocolCommunicationSpecifier { 400 + #[serde(rename="btle")] 369 401 BluetoothLE(BluetoothLESpecifier), 370 - HID(HIDSpecifier), 371 - USB(USBSpecifier), 402 + #[serde(rename="hid")] 403 + HID(VIDPIDSpecifier), 404 + #[serde(rename="usb")] 405 + USB(VIDPIDSpecifier), 406 + #[serde(rename="serial")] 372 407 Serial(SerialSpecifier), 408 + #[serde(rename="xinput")] 373 409 XInput(XInputSpecifier), 410 + #[serde(rename="lovense-connect-service")] 374 411 LovenseConnectService(LovenseConnectServiceSpecifier), 412 + #[serde(rename="websocket")] 375 413 Websocket(WebsocketSpecifier), 376 414 } 377 415
+2 -2
buttplug/src/server/device/hardware/communication/hid/hid_device_impl.rs
··· 2 2 use crate::{ 3 3 core::errors::ButtplugDeviceError, 4 4 server::device::{ 5 - configuration::{HIDSpecifier, ProtocolCommunicationSpecifier}, 5 + configuration::{VIDPIDSpecifier, ProtocolCommunicationSpecifier}, 6 6 hardware::{ 7 7 Endpoint, 8 8 GenericHardwareSpecializer, ··· 63 63 self.device_info.vendor_id(), 64 64 self.device_info.product_id() 65 65 ); 66 - ProtocolCommunicationSpecifier::HID(HIDSpecifier::new( 66 + ProtocolCommunicationSpecifier::HID(VIDPIDSpecifier::new( 67 67 self.device_info.vendor_id(), 68 68 self.device_info.product_id(), 69 69 ))
+8 -3
buttplug/src/server/device/hardware/communication/serialport/serialport_hardware.rs
··· 186 186 // If we've gotten this far, we can expect we have a serial port definition. 187 187 let mut port_def = None; 188 188 for specifier in specifiers { 189 - if let ProtocolCommunicationSpecifier::Serial(serial) = specifier { 190 - if port_info.port_name == *serial.port() { 191 - port_def = Some(serial.clone()); 189 + if let ProtocolCommunicationSpecifier::Serial(serial_list) = specifier { 190 + for serial in serial_list.ports() { 191 + if port_info.port_name == *serial.port() { 192 + port_def = Some(serial.clone()); 193 + break; 194 + } 195 + } 196 + if port_def.is_some() { 192 197 break; 193 198 } 194 199 }
+10 -88
buttplug/src/util/device_configuration.rs
··· 11 11 server::device::configuration::{ 12 12 BaseDeviceDefinition, 13 13 BaseDeviceIdentifier, 14 - BluetoothLESpecifier, 15 14 DeviceConfigurationManager, 16 15 DeviceConfigurationManagerBuilder, 17 - HIDSpecifier, 18 - LovenseConnectServiceSpecifier, 19 16 ProtocolCommunicationSpecifier, 20 - SerialSpecifier, 21 - USBSpecifier, 22 - UserDeviceCustomization, 23 17 UserDeviceDefinition, 24 18 UserDeviceIdentifier, 25 - WebsocketSpecifier, 26 - XInputSpecifier, 27 19 }, 28 20 }; 29 21 use getset::{CopyGetters, Getters, MutGetters, Setters}; ··· 78 70 #[derive(Deserialize, Serialize, Debug, Clone, Default, Getters, Setters, MutGetters)] 79 71 #[getset(get = "pub", set = "pub", get_mut = "pub(crate)")] 80 72 struct ProtocolDefinition { 81 - // Can't get serde flatten specifiers into a String/DeviceSpecifier map, so 82 - // they're kept separate here, and we return them in specifiers(). Feels 83 - // very clumsy, but we really don't do this a bunch during a session. 84 73 #[serde(skip_serializing_if = "Option::is_none")] 85 - usb: Option<Vec<USBSpecifier>>, 74 + pub communication: Option<Vec<ProtocolCommunicationSpecifier>>, 86 75 #[serde(skip_serializing_if = "Option::is_none")] 87 - btle: Option<BluetoothLESpecifier>, 88 - #[serde(skip_serializing_if = "Option::is_none")] 89 - serial: Option<Vec<SerialSpecifier>>, 90 - #[serde(skip_serializing_if = "Option::is_none")] 91 - hid: Option<Vec<HIDSpecifier>>, 92 - #[serde(skip_serializing_if = "Option::is_none")] 93 - xinput: Option<XInputSpecifier>, 94 - #[serde(skip_serializing_if = "Option::is_none")] 95 - websocket: Option<WebsocketSpecifier>, 96 - #[serde(skip_serializing_if = "Option::is_none")] 97 - #[serde(rename = "lovense-connect-service")] 98 - lovense_connect_service: Option<LovenseConnectServiceSpecifier>, 99 - #[serde(skip_serializing_if = "Option::is_none")] 100 - defaults: Option<ProtocolAttributes>, 76 + pub defaults: Option<ProtocolAttributes>, 101 77 #[serde(default)] 102 - configurations: Vec<ProtocolAttributes>, 78 + pub configurations: Vec<ProtocolAttributes>, 103 79 } 104 80 105 - #[derive(Deserialize, Serialize, Debug, Clone, Default, Getters, Setters, MutGetters)] 81 + #[derive(Deserialize, Serialize, Debug, Clone, Getters, Setters, MutGetters)] 106 82 #[getset(get = "pub", set = "pub", get_mut = "pub(crate)")] 107 83 struct UserDeviceConfigPair { 108 - identifier: UserConfigDeviceIdentifier, 109 - config: UserDeviceConfig, 84 + identifier: UserDeviceIdentifier, 85 + config: UserDeviceDefinition, 110 86 } 111 87 112 88 #[derive(Deserialize, Serialize, Debug, Clone, Default, Getters, Setters, MutGetters)] ··· 128 104 129 105 impl From<ProtocolDefinition> for ProtocolDeviceConfiguration { 130 106 fn from(protocol_def: ProtocolDefinition) -> Self { 131 - // Make a vector out of the protocol definition specifiers 132 - let mut specifiers = vec![]; 133 - if let Some(usb_vec) = &protocol_def.usb { 134 - usb_vec 135 - .iter() 136 - .for_each(|spec| specifiers.push(ProtocolCommunicationSpecifier::USB(*spec))); 137 - } 138 - if let Some(serial_vec) = &protocol_def.serial { 139 - serial_vec 140 - .iter() 141 - .for_each(|spec| specifiers.push(ProtocolCommunicationSpecifier::Serial(spec.clone()))); 142 - } 143 - if let Some(hid_vec) = &protocol_def.hid { 144 - hid_vec 145 - .iter() 146 - .for_each(|spec| specifiers.push(ProtocolCommunicationSpecifier::HID(*spec))); 147 - } 148 - if let Some(btle) = &protocol_def.btle { 149 - specifiers.push(ProtocolCommunicationSpecifier::BluetoothLE(btle.clone())); 150 - } 151 - if let Some(xinput) = &protocol_def.xinput { 152 - specifiers.push(ProtocolCommunicationSpecifier::XInput(*xinput)); 153 - } 154 - if let Some(websocket) = &protocol_def.websocket { 155 - specifiers.push(ProtocolCommunicationSpecifier::Websocket(websocket.clone())); 156 - } 157 - if let Some(lcs) = &protocol_def.lovense_connect_service { 158 - specifiers.push(ProtocolCommunicationSpecifier::LovenseConnectService( 159 - lcs.clone(), 160 - )); 161 - } 162 - 163 107 let mut configurations = HashMap::new(); 164 108 165 109 if let Some(defaults) = protocol_def.defaults() { ··· 194 138 } 195 139 } 196 140 197 - Self::new(specifiers, configurations) 141 + Self::new(protocol_def.communication.unwrap_or_default(), configurations) 198 142 } 199 143 } 200 144 ··· 211 155 continue; 212 156 } 213 157 214 - let base_protocol_def = external_config 158 + external_config 215 159 .protocol_specifiers 216 160 .get_mut(user_config_protocol) 217 - .unwrap(); 218 - 219 - // Make a vector out of the protocol definition specifiers 220 - if let Some(usb_vec) = &protocol_def.usb { 221 - usb_vec 222 - .iter() 223 - .for_each(|spec| base_protocol_def.push(ProtocolCommunicationSpecifier::USB(*spec))); 224 - } 225 - if let Some(serial_vec) = &protocol_def.serial { 226 - serial_vec.iter().for_each(|spec| { 227 - base_protocol_def.push(ProtocolCommunicationSpecifier::Serial(spec.clone())) 228 - }); 229 - } 230 - if let Some(hid_vec) = &protocol_def.hid { 231 - hid_vec 232 - .iter() 233 - .for_each(|spec| base_protocol_def.push(ProtocolCommunicationSpecifier::HID(*spec))); 234 - } 235 - if let Some(btle) = &protocol_def.btle { 236 - base_protocol_def.push(ProtocolCommunicationSpecifier::BluetoothLE(btle.clone())); 237 - } 238 - if let Some(websocket) = &protocol_def.websocket { 239 - base_protocol_def.push(ProtocolCommunicationSpecifier::Websocket(websocket.clone())); 240 - } 161 + .unwrap() 162 + .extend(protocol_def.communication.clone().unwrap_or_default().iter().cloned()) 241 163 } 242 164 } 243 165 if let Some(user_device_configs) = user_config_def.user_device_configs() {