Esempio n. 1
0
        public async Task SetupTest(string aDeviceName, bool aShouldInitialize = true)
        {
            bleInfo = new T();

            // Assume for now that we're using a device's nameprefix as its actual name if we have one.
            (bleInfo.Names.Length > 0 ? bleInfo.Names : bleInfo.NamePrefixes).Should().Contain(aDeviceName);

            bleIface  = new TestBluetoothDeviceInterface(aDeviceName);
            bleDevice = bleInfo.CreateDevice(new ButtplugLogManager(), bleIface);

            if (!aShouldInitialize)
            {
                return;
            }

            await Initialize();
        }
Esempio n. 2
0
        public void WeVibeTest()
        {
            var bleInfo = new WeVibeBluetoothInfo();

            foreach (var chr in new[]
            {
                WeVibeBluetoothInfo.Chrs.Rx,
                WeVibeBluetoothInfo.Chrs.Tx,
            })
            {
                Assert.True(bleInfo.Characteristics.Length > (uint)chr);
                Assert.NotNull(bleInfo.Characteristics[(uint)chr]);
            }

            Assert.NotNull(bleInfo.Services);
            Assert.True(bleInfo.Services.Any());
            Assert.NotNull(bleInfo.Services[0]);

            Assert.NotNull(bleInfo.Names);

            // Test the Ditto
            var inter = new TestBluetoothDeviceInterface("Ditto", 2);
            var dev   = bleInfo.CreateDevice(new ButtplugLogManager(), inter);

            Assert.AreEqual(3, dev.GetAllowedMessageTypes().Count());
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(StopDeviceCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(StopDeviceCmd)));
            Assert.Null(dev.GetMessageAttrs(typeof(StopDeviceCmd)).FeatureCount);
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(SingleMotorVibrateCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(SingleMotorVibrateCmd)));
            Assert.Null(dev.GetMessageAttrs(typeof(SingleMotorVibrateCmd)).FeatureCount);
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(VibrateCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(VibrateCmd)));
            Assert.AreEqual(1, dev.GetMessageAttrs(typeof(VibrateCmd)).FeatureCount);

            Assert.True(dev.ParseMessage(new StopDeviceCmd(4, 4)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(0, inter.LastWriten.Count);

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 0.5, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)WeVibeBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x0f, 0x03, 0x00, 0x88, 0x00, 0x03, 0x00, 0x00 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 0.5, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(0, inter.LastWriten.Count);

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 1, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)WeVibeBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x0f, 0x03, 0x00, 0xff, 0x00, 0x03, 0x00, 0x00 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 0.25, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)WeVibeBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x0f, 0x03, 0x00, 0x44, 0x00, 0x03, 0x00, 0x00 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new StopDeviceCmd(4, 9)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(9, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)WeVibeBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new VibrateCmd(4,
                                                        new List <VibrateCmd.VibrateSubcommand>
            {
                new VibrateCmd.VibrateSubcommand(0, 0.75),
                new VibrateCmd.VibrateSubcommand(1, 0.75),
            }, 8)).GetAwaiter().GetResult() is Error);
            Assert.True(dev.ParseMessage(new VibrateCmd(4,
                                                        new List <VibrateCmd.VibrateSubcommand>
            {
                new VibrateCmd.VibrateSubcommand(1, 0.75),
            }, 8)).GetAwaiter().GetResult() is Error);
        }
        public void FleshlightLaunchTest()
        {
            var bleInfo = new FleshlightLaunchBluetoothInfo();

            foreach (var chr in new[]
            {
                FleshlightLaunchBluetoothInfo.Chrs.Rx,
                FleshlightLaunchBluetoothInfo.Chrs.Tx,
                FleshlightLaunchBluetoothInfo.Chrs.Cmd,
            })
            {
                Assert.True(bleInfo.Characteristics.Length > (uint)chr);
                Assert.NotNull(bleInfo.Characteristics[(uint)chr]);
            }

            Assert.NotNull(bleInfo.Services);
            Assert.True(bleInfo.Services.Any());
            Assert.NotNull(bleInfo.Services[0]);

            Assert.NotNull(bleInfo.Names);

            // Test the Launch
            var inter = new TestBluetoothDeviceInterface("Launch", 2);
            var dev   = bleInfo.CreateDevice(new ButtplugLogManager(), inter);

            Assert.AreEqual(3, dev.GetAllowedMessageTypes().Count());
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(StopDeviceCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(StopDeviceCmd)));
            Assert.Null(dev.GetMessageAttrs(typeof(StopDeviceCmd)).FeatureCount);
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(FleshlightLaunchFW12Cmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(FleshlightLaunchFW12Cmd)));
            Assert.Null(dev.GetMessageAttrs(typeof(FleshlightLaunchFW12Cmd)).FeatureCount);
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(LinearCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(LinearCmd)));
            Assert.AreEqual(1, dev.GetMessageAttrs(typeof(LinearCmd)).FeatureCount);

            Assert.True(dev.Initialize().GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(0, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)FleshlightLaunchBluetoothInfo.Chrs.Cmd],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x00 }, inter.LastWriten[0].Value);
            Assert.True(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new StopDeviceCmd(4, 4)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(0, inter.LastWriten.Count);

            Assert.True(dev.ParseMessage(new FleshlightLaunchFW12Cmd(4, 50, 50, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)FleshlightLaunchBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x32, 0x32 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new FleshlightLaunchFW12Cmd(4, 50, 50, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)FleshlightLaunchBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x32, 0x32 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new FleshlightLaunchFW12Cmd(4, 99, 99, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)FleshlightLaunchBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x63, 0x63 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new LinearCmd(4, new List <LinearCmd.VectorSubcommands>
            {
                new LinearCmd.VectorSubcommands(0, 500, 0),
            }, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)FleshlightLaunchBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x00, 0x29 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new StopDeviceCmd(4, 9)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(0, inter.LastWriten.Count);

            Assert.True(dev.ParseMessage(new LinearCmd(4,
                                                       new List <LinearCmd.VectorSubcommands>
            {
                new LinearCmd.VectorSubcommands(0, 500, 0.75),
                new LinearCmd.VectorSubcommands(1, 500, 0.75),
            }, 8)).GetAwaiter().GetResult() is Error);
            Assert.True(dev.ParseMessage(new LinearCmd(4,
                                                       new List <LinearCmd.VectorSubcommands>
            {
                new LinearCmd.VectorSubcommands(1, 500, 0.75),
            }, 8)).GetAwaiter().GetResult() is Error);
        }
Esempio n. 4
0
        public void YoucupsTest()
        {
            var bleInfo = new YoucupsBluetoothInfo();

            Assert.True(bleInfo.Characteristics.Length > (uint)YoucupsBluetoothInfo.Chrs.Tx);
            Assert.NotNull(bleInfo.Characteristics[(uint)YoucupsBluetoothInfo.Chrs.Tx]);

            Assert.NotNull(bleInfo.Services);
            Assert.True(bleInfo.Services.Any());
            Assert.NotNull(bleInfo.Services[0]);

            Assert.NotNull(bleInfo.Names);

            // Test the Warrior II
            var inter = new TestBluetoothDeviceInterface("Youcups", 2);
            var dev   = bleInfo.CreateDevice(new ButtplugLogManager(), inter);

            Assert.AreEqual(3, dev.GetAllowedMessageTypes().Count());
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(StopDeviceCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(StopDeviceCmd)));
            Assert.Null(dev.GetMessageAttrs(typeof(StopDeviceCmd)).FeatureCount);
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(SingleMotorVibrateCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(SingleMotorVibrateCmd)));
            Assert.Null(dev.GetMessageAttrs(typeof(SingleMotorVibrateCmd)).FeatureCount);
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(VibrateCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(VibrateCmd)));
            Assert.AreEqual(1, dev.GetMessageAttrs(typeof(VibrateCmd)).FeatureCount);

            Assert.True(dev.ParseMessage(new StopDeviceCmd(4, 4)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(0, inter.LastWriten.Count);

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 0.5, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)YoucupsBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual("$SYS,4?", Encoding.ASCII.GetString(inter.LastWriten[0].Value));
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 0.5, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(0, inter.LastWriten.Count);

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 1, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)YoucupsBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual("$SYS,8?", Encoding.ASCII.GetString(inter.LastWriten[0].Value));
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 0.25, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)YoucupsBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual("$SYS,2?", Encoding.ASCII.GetString(inter.LastWriten[0].Value));
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new StopDeviceCmd(4, 9)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(9, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)YoucupsBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual("$SYS,0?", Encoding.ASCII.GetString(inter.LastWriten[0].Value));
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new VibrateCmd(4,
                                                        new List <VibrateCmd.VibrateSubcommand>
            {
                new VibrateCmd.VibrateSubcommand(0, 0.75),
                new VibrateCmd.VibrateSubcommand(1, 0.75),
            }, 8)).GetAwaiter().GetResult() is Error);
            Assert.True(dev.ParseMessage(new VibrateCmd(4,
                                                        new List <VibrateCmd.VibrateSubcommand>
            {
                new VibrateCmd.VibrateSubcommand(1, 0.75),
            }, 8)).GetAwaiter().GetResult() is Error);
        }
        public void VorzeA10CycloneTest()
        {
            var bleInfo = new VorzeA10CycloneInfo();

            Assert.True(bleInfo.Characteristics.Length > (uint)VorzeA10CycloneInfo.Chrs.Tx);
            Assert.NotNull(bleInfo.Characteristics[(uint)VorzeA10CycloneInfo.Chrs.Tx]);

            Assert.NotNull(bleInfo.Services);
            Assert.True(bleInfo.Services.Any());
            Assert.NotNull(bleInfo.Services[0]);

            Assert.NotNull(bleInfo.Names);

            // Test the Ditto
            var inter = new TestBluetoothDeviceInterface("CycSA", 2);
            var dev   = bleInfo.CreateDevice(new ButtplugLogManager(), inter);

            Assert.AreEqual(3, dev.GetAllowedMessageTypes().Count());
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(StopDeviceCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(StopDeviceCmd)));
            Assert.Null(dev.GetMessageAttrs(typeof(StopDeviceCmd)).FeatureCount);
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(VorzeA10CycloneCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(VorzeA10CycloneCmd)));
            Assert.Null(dev.GetMessageAttrs(typeof(VorzeA10CycloneCmd)).FeatureCount);
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(RotateCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(RotateCmd)));
            Assert.AreEqual(1, dev.GetMessageAttrs(typeof(RotateCmd)).FeatureCount);

            Assert.True(dev.ParseMessage(new StopDeviceCmd(4, 4)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(0, inter.LastWriten.Count);

            Assert.True(dev.ParseMessage(new VorzeA10CycloneCmd(4, 50, true, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)VorzeA10CycloneInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x01, 0x01, 0xb2 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new VorzeA10CycloneCmd(4, 50, true, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(0, inter.LastWriten.Count);

            Assert.True(dev.ParseMessage(new VorzeA10CycloneCmd(4, 99, true, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)VorzeA10CycloneInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x01, 0x01, 0xe3 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new VorzeA10CycloneCmd(4, 25, false, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)VorzeA10CycloneInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x01, 0x01, 0x19 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new StopDeviceCmd(4, 9)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(9, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)VorzeA10CycloneInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x01, 0x01, 0x00 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new RotateCmd(4,
                                                       new List <RotateCmd.RotateSubcommand>
            {
                new RotateCmd.RotateSubcommand(0, 0.75, true),
                new RotateCmd.RotateSubcommand(1, 0.75, false),
            }, 8)).GetAwaiter().GetResult() is Error);
            Assert.True(dev.ParseMessage(new RotateCmd(4,
                                                       new List <RotateCmd.RotateSubcommand>
            {
                new RotateCmd.RotateSubcommand(1, 0.75, false),
            }, 8)).GetAwaiter().GetResult() is Error);
        }
        public void BlowbotTest()
        {
            var bleInfo = new KiirooGen2VibeBluetoothInfo();

            foreach (var chr in new[]
            {
                KiirooGen2VibeBluetoothInfo.Chrs.Tx,
                KiirooGen2VibeBluetoothInfo.Chrs.RxTouch,
                KiirooGen2VibeBluetoothInfo.Chrs.RxAccel,
            })
            {
                Assert.True(bleInfo.Characteristics.Length > (uint)chr);
                Assert.NotNull(bleInfo.Characteristics[(uint)chr]);
            }

            Assert.NotNull(bleInfo.Services);
            Assert.True(bleInfo.Services.Any());
            Assert.NotNull(bleInfo.Services[0]);

            Assert.NotNull(bleInfo.Names);

            // Test the BlowBot
            var inter = new TestBluetoothDeviceInterface("Virtual Blowbot", 2);
            var dev   = bleInfo.CreateDevice(new ButtplugLogManager(), inter);

            Assert.AreEqual("PornHub Virtual Blowbot", dev.Name);
            Assert.AreEqual(3, dev.GetAllowedMessageTypes().Count());
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(StopDeviceCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(StopDeviceCmd)));
            Assert.Null(dev.GetMessageAttrs(typeof(StopDeviceCmd)).FeatureCount);
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(SingleMotorVibrateCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(SingleMotorVibrateCmd)));
            Assert.Null(dev.GetMessageAttrs(typeof(SingleMotorVibrateCmd)).FeatureCount);
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(VibrateCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(VibrateCmd)));
            Assert.AreEqual(3, dev.GetMessageAttrs(typeof(VibrateCmd)).FeatureCount);

            Assert.True(dev.ParseMessage(new StopDeviceCmd(4, 4)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(0, inter.LastWriten.Count);

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 0.5, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)KiirooGen2VibeBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x32, 0x32, 0x32 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 0.5, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(0, inter.LastWriten.Count);

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 1, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)KiirooGen2VibeBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x64, 0x64, 0x64 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 0.25, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)KiirooGen2VibeBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x19, 0x19, 0x19 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new VibrateCmd(4,
                                                        new List <VibrateCmd.VibrateSubcommand>
            {
                new VibrateCmd.VibrateSubcommand(0, 0.75),
                new VibrateCmd.VibrateSubcommand(1, 0.25),
                new VibrateCmd.VibrateSubcommand(2, 0.25),
            }, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)KiirooGen2VibeBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x4B, 0x19, 0x19 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new VibrateCmd(4,
                                                        new List <VibrateCmd.VibrateSubcommand>
            {
                new VibrateCmd.VibrateSubcommand(0, 0.75),
                new VibrateCmd.VibrateSubcommand(1, 0.25),
                new VibrateCmd.VibrateSubcommand(2, 0.25),
            }, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(0, inter.LastWriten.Count);

            Assert.True(dev.ParseMessage(new StopDeviceCmd(4, 9)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(9, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)KiirooGen2VibeBluetoothInfo.Chrs.Tx],
                            inter.LastWriten[0].Characteristic);
            Assert.AreEqual(new byte[] { 0x00, 0x00, 0x00 }, inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new VibrateCmd(4,
                                                        new List <VibrateCmd.VibrateSubcommand>
            {
                new VibrateCmd.VibrateSubcommand(0, 0.75),
                new VibrateCmd.VibrateSubcommand(1, 0.75),
                new VibrateCmd.VibrateSubcommand(2, 0.75),
                new VibrateCmd.VibrateSubcommand(3, 0.75),
            }, 8)).GetAwaiter().GetResult() is Error);
            Assert.True(dev.ParseMessage(new VibrateCmd(4,
                                                        new List <VibrateCmd.VibrateSubcommand>
            {
                new VibrateCmd.VibrateSubcommand(3, 0.75),
            }, 8)).GetAwaiter().GetResult() is Error);
        }
Esempio n. 7
0
        public void LovenseV7Test()
        {
            var bleInfo = new LovenseRev7BluetoothInfo();

            foreach (var chr in new[]
            {
                LovenseRev7BluetoothInfo.Chrs.Rx,
                LovenseRev7BluetoothInfo.Chrs.Tx,
            })
            {
                Assert.True(bleInfo.Characteristics.Length > (uint)chr);
                Assert.NotNull(bleInfo.Characteristics[(uint)chr]);
            }

            Assert.NotNull(bleInfo.Services);
            Assert.True(bleInfo.Services.Any());
            Assert.NotNull(bleInfo.Services[0]);

            Assert.NotNull(bleInfo.Names);

            // Test the Hush
            var inter = new TestBluetoothDeviceInterface("LVS-S35", 2);
            var dev   = bleInfo.CreateDevice(new ButtplugLogManager(), inter);

            Assert.AreEqual(3, dev.GetAllowedMessageTypes().Count());
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(StopDeviceCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(StopDeviceCmd)));
            Assert.Null(dev.GetMessageAttrs(typeof(StopDeviceCmd)).FeatureCount);
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(SingleMotorVibrateCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(SingleMotorVibrateCmd)));
            Assert.Null(dev.GetMessageAttrs(typeof(SingleMotorVibrateCmd)).FeatureCount);
            Assert.True(dev.GetAllowedMessageTypes().Contains(typeof(VibrateCmd)));
            Assert.NotNull(dev.GetMessageAttrs(typeof(VibrateCmd)));
            Assert.AreEqual(1, dev.GetMessageAttrs(typeof(VibrateCmd)).FeatureCount);

            Assert.True(dev.ParseMessage(new StopDeviceCmd(4, 4)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(0, inter.LastWriten.Count);

            Assert.True(dev.ParseMessage(new SingleMotorVibrateCmd(4, 0.5, 6)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(6, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)LovenseRev7BluetoothInfo.Chrs.Tx], inter.LastWriten[0].Characteristic);
            Assert.AreEqual(Encoding.ASCII.GetBytes("Vibrate:10;"), inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new StopDeviceCmd(4, 9)).GetAwaiter().GetResult() is Ok);
            Assert.AreEqual(1, inter.LastWriten.Count);
            Assert.AreEqual(9, inter.LastWriten[0].MsgId);
            Assert.AreEqual(bleInfo.Characteristics[(uint)LovenseRev7BluetoothInfo.Chrs.Tx], inter.LastWriten[0].Characteristic);
            Assert.AreEqual(Encoding.ASCII.GetBytes("Vibrate:0;"), inter.LastWriten[0].Value);
            Assert.False(inter.LastWriten[0].WriteWithResponse);
            inter.LastWriten.Clear();

            Assert.True(dev.ParseMessage(new VibrateCmd(4,
                                                        new List <VibrateCmd.VibrateSubcommand>
            {
                new VibrateCmd.VibrateSubcommand(0, 0.75),
                new VibrateCmd.VibrateSubcommand(1, 0.75),
            }, 8)).GetAwaiter().GetResult() is Error);
            Assert.True(dev.ParseMessage(new VibrateCmd(4,
                                                        new List <VibrateCmd.VibrateSubcommand>
            {
                new VibrateCmd.VibrateSubcommand(1, 0.75),
            }, 8)).GetAwaiter().GetResult() is Error);
        }