Skip to content

Commit ba8c39d

Browse files
chore: Fix the InputCmd stuff to match ic3b3
1 parent 71566e7 commit ba8c39d

12 files changed

Lines changed: 57 additions & 64 deletions

File tree

buttplug4j.connectors.javax.websocket.client/src/test/java/io/github/blackspherefollower/buttplug4j/connectors/javax/websocket/client/ButtplugWSClientMockTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.junit.jupiter.api.Test;
1212

1313
import java.net.URI;
14+
import java.util.concurrent.TimeUnit;
1415

1516
import static org.junit.jupiter.api.Assertions.*;
1617

@@ -49,7 +50,6 @@ public void TestConnect() throws Exception {
4950
}
5051

5152
@Test
52-
@Disabled("See https://github.com/buttplugio/buttplug/issues/801")
5353
public void TestBattery() throws Exception {
5454
try (IntifaceEngineWrapper wrapper = new IntifaceEngineWrapper()) {
5555
Thread.sleep(500);
@@ -65,7 +65,7 @@ public void TestBattery() throws Exception {
6565
for (ButtplugClientDevice dev : client.getDevices()) {
6666
for (ButtplugClientDeviceFeature feat : dev.getDeviceFeatures().values()) {
6767
if (feat.HasBattery()) {
68-
ButtplugMessage res = feat.ReadBattery().get();
68+
ButtplugMessage res = feat.ReadBattery().get(2, TimeUnit.SECONDS);
6969
if (res instanceof InputReading && ((InputReading) res).getData() instanceof InputReading.BatteryData) {
7070
InputReading.BatteryData reading = (InputReading.BatteryData) ((InputReading) res).getData();
7171
int battery = reading.getValue();

buttplug4j.connectors.jetty.websocket.client/src/test/java/io/github/blackspherefollower/buttplug4j/connectors/jetty/websocket/client/ButtplugClientWSJettyClientTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.junit.jupiter.api.Test;
1212

1313
import java.net.URI;
14+
import java.util.concurrent.TimeUnit;
1415

1516
import static org.junit.jupiter.api.Assertions.*;
1617

@@ -52,7 +53,6 @@ public void TestConnect() throws Exception {
5253
}
5354

5455
@Test
55-
@Disabled("See https://github.com/buttplugio/buttplug/issues/801")
5656
public void TestBattery() throws Exception {
5757
try (IntifaceEngineWrapper wrapper = new IntifaceEngineWrapper()) {
5858
Thread.sleep(500);
@@ -68,7 +68,7 @@ public void TestBattery() throws Exception {
6868
for (ButtplugClientDevice dev : client.getDevices()) {
6969
for (ButtplugClientDeviceFeature feat : dev.getDeviceFeatures().values()) {
7070
if (feat.HasBattery()) {
71-
ButtplugMessage res = feat.ReadBattery().get();
71+
ButtplugMessage res = feat.ReadBattery().get(2, TimeUnit.SECONDS);
7272
if (res instanceof InputReading && ((InputReading) res).getData() instanceof InputReading.BatteryData) {
7373
InputReading.BatteryData reading = (InputReading.BatteryData) ((InputReading) res).getData();
7474
int battery = reading.getValue();

buttplug4j/src/main/java/io/github/blackspherefollower/buttplug4j/client/ButtplugClientDeviceFeature.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ private int GetStepFromFloat(final String type, final float value) throws Buttpl
4343
steps *= value;
4444
return (int) Math.floor(steps);
4545
} else if (desc instanceof DeviceFeature.PositionWithDuration) {
46-
double steps = ((DeviceFeature.PositionWithDuration) desc).getPosition()[1];
46+
double steps = ((DeviceFeature.PositionWithDuration) desc).getValue()[1];
4747
steps *= value;
4848
return (int) Math.floor(steps);
4949
} else {
@@ -61,11 +61,6 @@ private void CheckStepRange(final String type, final float value) throws Buttplu
6161
if (value > steps || value < 0) {
6262
throw new ButtplugDeviceFeatureException("Range error");
6363
}
64-
} else if (desc instanceof DeviceFeature.PositionWithDuration) {
65-
int steps = ((DeviceFeature.PositionWithDuration) desc).getPosition()[1];
66-
if (value > steps || value < 0) {
67-
throw new ButtplugDeviceFeatureException("Range error");
68-
}
6964
} else {
7065
throw new ButtplugDeviceFeatureException(type);
7166
}

buttplug4j/src/main/java/io/github/blackspherefollower/buttplug4j/protocol/messages/DeviceFeature.java

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -189,30 +189,20 @@ public Position() {
189189
}
190190
}
191191

192-
public static class PositionWithDuration implements OutputDescriptor {
193-
@JsonProperty(value = "Position", required = true)
194-
private int[] position;
192+
public static class PositionWithDuration extends SteppedOutputDescriptor {
195193
@JsonProperty(value = "Duration", required = true)
196194
private int[] duration;
197195

198-
public PositionWithDuration(int[] position, int[] duration) {
199-
this.position = position;
196+
public PositionWithDuration(int[] value, int[] duration) {
197+
super(value);
200198
this.duration = duration;
201199
}
202200

203201
public PositionWithDuration() {
204-
this.position = new int[]{0, 0};
202+
super(new int[]{0, 0});
205203
this.duration = new int[]{0, 0};
206204
}
207205

208-
public int[] getPosition() {
209-
return position;
210-
}
211-
212-
public void setPosition(int[] position) {
213-
this.position = position;
214-
}
215-
216206
public int[] getDuration() {
217207
return duration;
218208
}
@@ -230,7 +220,7 @@ public boolean equals(Object o) {
230220
return false;
231221
}
232222
PositionWithDuration that = (PositionWithDuration) o;
233-
return java.util.Arrays.equals(position, that.position) && java.util.Arrays.equals(duration, that.duration);
223+
return java.util.Arrays.equals(getValue(), that.getValue()) && java.util.Arrays.equals(duration, that.duration);
234224
}
235225
}
236226

@@ -243,7 +233,7 @@ public boolean equals(Object o) {
243233
@JsonSubTypes.Type(value = DeviceFeature.PositionInput.class, name = "Position")
244234
})
245235
public static class InputDescriptor {
246-
@JsonProperty(value = "InputCommands", required = true)
236+
@JsonProperty(value = "Command", required = true)
247237
private ArrayList<InputCommandType> input;
248238

249239
public InputDescriptor(ArrayList<InputCommandType> input) {
@@ -260,7 +250,7 @@ public void setInput(ArrayList<InputCommandType> input) {
260250
}
261251

262252
public static class RangedInputDescriptor extends InputDescriptor {
263-
@JsonProperty(value = "ValueRange", required = true)
253+
@JsonProperty(value = "Value", required = true)
264254
private int[][] valueRange;
265255

266256
public RangedInputDescriptor(ArrayList<InputCommandType> input, int[][] valueRange) {

buttplug4j/src/main/java/io/github/blackspherefollower/buttplug4j/protocol/messages/InputCmd.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ public class InputCmd extends ButtplugDeviceMessage {
88
@JsonProperty(value = "FeatureIndex", required = true)
99
private int featureIndex;
1010

11-
@JsonProperty(value = "InputType", required = true)
11+
@JsonProperty(value = "Type", required = true)
1212
private String inputType;
1313

14-
@JsonProperty(value = "InputCommand", required = true)
14+
@JsonProperty(value = "Command", required = true)
1515
private InputCommandType inputCommand;
1616

1717
public InputCmd(int id, final long deviceIndex, final int featureIndex, final String inputType, final InputCommandType inputCommand) {

buttplug4j/src/main/java/io/github/blackspherefollower/buttplug4j/protocol/messages/InputReading.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
package io.github.blackspherefollower.buttplug4j.protocol.messages;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import com.fasterxml.jackson.annotation.JsonSubTypes;
5+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
46
import io.github.blackspherefollower.buttplug4j.protocol.ButtplugDeviceMessage;
57

68
public class InputReading extends ButtplugDeviceMessage {
79

810
@JsonProperty(value = "FeatureIndex", required = true)
911
private int featureIndex;
10-
@JsonProperty(value = "Data", required = true)
12+
@JsonProperty(value = "Reading", required = true)
1113
private InputData data;
1214

1315
public InputReading(int id, long deviceIndex, int featureIndex) {
1416
super(id, deviceIndex);
1517
this.featureIndex = featureIndex;
1618
}
19+
public InputReading() {
20+
super(-1, -1);
21+
this.featureIndex = -1;
22+
}
1723

1824
public InputData getData() {
1925
return data;
@@ -31,11 +37,19 @@ public void setFeatureIndex(int featureIndex) {
3137
this.featureIndex = featureIndex;
3238
}
3339

34-
public interface InputData {
40+
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
41+
@JsonSubTypes({
42+
@JsonSubTypes.Type(value = BatteryData.class, name = "Battery"),
43+
@JsonSubTypes.Type(value = RssiData.class, name = "RSSI"),
44+
@JsonSubTypes.Type(value = ButtonData.class, name = "Button"),
45+
@JsonSubTypes.Type(value = PresureData.class, name = "Pressure"),
46+
@JsonSubTypes.Type(value = Position.class, name = "Position"),
47+
})
48+
public static class InputData {
3549
}
3650

37-
static public class InputIntegerData {
38-
@JsonProperty(value = "Data", required = true)
51+
static public class InputIntegerData extends InputData {
52+
@JsonProperty(value = "Value", required = true)
3953
int value;
4054

4155
public int getValue() {
@@ -58,4 +72,6 @@ static public class ButtonData extends InputIntegerData {
5872

5973
static public class PresureData extends InputIntegerData {
6074
}
75+
static public class Position extends InputIntegerData {
76+
}
6177
}

buttplug4j/src/main/java/io/github/blackspherefollower/buttplug4j/protocol/messages/OutputCmd.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ public abstract static class ValueCommand implements IOutputCommand {
6161
protected ValueCommand(int value) {
6262
this.value = value;
6363
}
64+
protected ValueCommand() {
65+
this.value = 0;
66+
}
6467

6568
public int getValue() {
6669
return value;
@@ -151,30 +154,20 @@ public Position() {
151154
}
152155
}
153156

154-
public static class PositionWithDuration implements IOutputCommand {
155-
@JsonProperty(value = "Position", required = true)
156-
private int position;
157+
public static class PositionWithDuration extends ValueCommand {
157158
@JsonProperty(value = "Duration", required = true)
158159
private int duration;
159160

160-
public PositionWithDuration(int position, int duration) {
161-
this.position = position;
161+
public PositionWithDuration(int value, int duration) {
162+
super(value);
162163
this.duration = duration;
163164
}
164165

165166
public PositionWithDuration() {
166-
this.position = 0;
167+
super();
167168
this.duration = 0;
168169
}
169170

170-
public int getPosition() {
171-
return position;
172-
}
173-
174-
public void setPosition(int position) {
175-
this.position = position;
176-
}
177-
178171
public int getDuration() {
179172
return duration;
180173
}

buttplug4j/src/test/java/io/github/blackspherefollower/buttplug4j/client/ButtplugClientDeviceFeatureTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ void testPositionWithDurationWithValidStep() throws Exception {
238238
ArgumentCaptor<OutputCmd.IOutputCommand> captor = ArgumentCaptor.forClass(OutputCmd.IOutputCommand.class);
239239
verify(mockDevice).sendOutputCommand(eq(0), captor.capture());
240240
assertInstanceOf(OutputCmd.PositionWithDuration.class, captor.getValue());
241-
assertEquals(15, ((OutputCmd.PositionWithDuration) captor.getValue()).getPosition());
241+
assertEquals(15, ((OutputCmd.PositionWithDuration) captor.getValue()).getValue());
242242
assertEquals(500, ((OutputCmd.PositionWithDuration) captor.getValue()).getDuration());
243243
}
244244

@@ -257,7 +257,7 @@ void testPositionWithDurationFloatWithValidValue() throws Exception {
257257
ArgumentCaptor<OutputCmd.IOutputCommand> captor = ArgumentCaptor.forClass(OutputCmd.IOutputCommand.class);
258258
verify(mockDevice).sendOutputCommand(eq(0), captor.capture());
259259
assertInstanceOf(OutputCmd.PositionWithDuration.class, captor.getValue());
260-
assertEquals(20, ((OutputCmd.PositionWithDuration) captor.getValue()).getPosition());
260+
assertEquals(20, ((OutputCmd.PositionWithDuration) captor.getValue()).getValue());
261261
assertEquals(500, ((OutputCmd.PositionWithDuration) captor.getValue()).getDuration());
262262
}
263263

buttplug4j/src/test/java/io/github/blackspherefollower/buttplug4j/protocol/messages/DeviceListTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public static void setup() throws IOException {
3333

3434
@Test
3535
public void test() throws IOException, ButtplugProtocolException {
36-
String testStr = "[{\"DeviceList\":{\"Id\":5,\"Devices\":{\"0\":{\"DeviceIndex\":0,\"DeviceName\":\"Test Vibrator\",\"DeviceMessageTimingGap\":100,\"DeviceFeatures\":{\"0\":{\"FeatureIndex\":0,\"FeatureDescription\":\"Clitoral Stimulator\",\"Output\":{\"Vibrate\":{\"Value\":[0,20]}}},\"1\":{\"FeatureIndex\":1,\"FeatureDescription\":\"Insertable Stimulator\",\"Output\":{\"Vibrate\":{\"Value\":[0,20]}}},\"2\":{\"FeatureIndex\":2,\"FeatureDescription\":\"Battery\",\"Input\":{\"Battery\":{\"InputCommands\":[\"Read\"],\"ValueRange\":[[0,0],[0,100]]}}}}},\"2\":{\"DeviceIndex\":2,\"DeviceName\":\"Test Stroker\",\"DeviceMessageTimingGap\":100,\"DeviceDisplayName\":\"User set name\",\"DeviceFeatures\":{\"0\":{\"FeatureIndex\":0,\"FeatureDescription\":\"Stroker\",\"Output\":{\"Oscillate\":{\"Value\":[0,20]},\"PositionWithDuration\":{\"Position\":[0,100],\"Duration\":[0,2000]}},\"Input\":{\"Position\":{\"InputCommands\":[\"Subscribe\",\"Read\"],\"ValueRange\":[[0,0],[0,100]]}}},\"1\":{\"FeatureIndex\":1,\"FeatureDescription\":\"Bluetooth Radio RSSI\",\"Input\":{\"RSSI\":{\"InputCommands\":[\"Read\"],\"ValueRange\":[[-10,0],[-100,0]]}}}}}}}}]";
36+
String testStr = "[{\"DeviceList\":{\"Id\":5,\"Devices\":{\"0\":{\"DeviceIndex\":0,\"DeviceName\":\"Test Vibrator\",\"DeviceMessageTimingGap\":100,\"DeviceFeatures\":{\"0\":{\"FeatureIndex\":0,\"FeatureDescription\":\"Clitoral Stimulator\",\"Output\":{\"Vibrate\":{\"Value\":[0,20]}}},\"1\":{\"FeatureIndex\":1,\"FeatureDescription\":\"Insertable Stimulator\",\"Output\":{\"Vibrate\":{\"Value\":[0,20]}}},\"2\":{\"FeatureIndex\":2,\"FeatureDescription\":\"Battery\",\"Input\":{\"Battery\":{\"Command\":[\"Read\"],\"Value\":[[0,0],[0,100]]}}}}},\"2\":{\"DeviceIndex\":2,\"DeviceName\":\"Test Stroker\",\"DeviceMessageTimingGap\":100,\"DeviceDisplayName\":\"User set name\",\"DeviceFeatures\":{\"0\":{\"FeatureIndex\":0,\"FeatureDescription\":\"Stroker\",\"Output\":{\"Oscillate\":{\"Value\":[0,20]},\"PositionWithDuration\":{\"Value\":[0,100],\"Duration\":[0,2000]}},\"Input\":{\"Position\":{\"Command\":[\"Subscribe\",\"Read\"],\"Value\":[[0,0],[0,100]]}}},\"1\":{\"FeatureIndex\":1,\"FeatureDescription\":\"Bluetooth Radio RSSI\",\"Input\":{\"RSSI\":{\"Command\":[\"Read\"],\"Value\":[[-10,0],[-100,0]]}}}}}}}}]";
3737

3838
Validator.Result result = new ValidatorFactory().validate(schema, testStr);
3939
assertTrue(result.isValid(), result.getErrors().stream().map(error -> error.getError() + " - " + error.getInstanceLocation()).collect(Collectors.joining("\n")));

buttplug4j/src/test/java/io/github/blackspherefollower/buttplug4j/protocol/messages/InputCmdTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public static void setup() throws IOException {
3434

3535
@Test
3636
public void testInputCmdSubscribe() throws IOException, ButtplugProtocolException {
37-
String testStr = "[{\"InputCmd\":{\"Id\":1,\"DeviceIndex\":0,\"FeatureIndex\":0,\"InputType\":\"Battery\",\"InputCommand\":\"Subscribe\"}}]";
37+
String testStr = "[{\"InputCmd\":{\"Id\":1,\"DeviceIndex\":0,\"FeatureIndex\":0,\"Type\":\"Battery\",\"Command\":\"Subscribe\"}}]";
3838

3939
Validator.Result result = new ValidatorFactory().validate(schema, testStr);
4040
assertTrue(result.isValid(), result.getErrors().stream().map(Error::getError).collect(Collectors.joining("\n")));
@@ -59,7 +59,7 @@ public void testInputCmdSubscribe() throws IOException, ButtplugProtocolExceptio
5959

6060
@Test
6161
public void testInputCmdUnsubscribe() throws IOException, ButtplugProtocolException {
62-
String testStr = "[{\"InputCmd\":{\"Id\":2,\"DeviceIndex\":1,\"FeatureIndex\":1,\"InputType\":\"RSSI\",\"InputCommand\":\"Unsubscribe\"}}]";
62+
String testStr = "[{\"InputCmd\":{\"Id\":2,\"DeviceIndex\":1,\"FeatureIndex\":1,\"Type\":\"RSSI\",\"Command\":\"Unsubscribe\"}}]";
6363

6464
Validator.Result result = new ValidatorFactory().validate(schema, testStr);
6565
assertTrue(result.isValid(), result.getErrors().stream().map(Error::getError).collect(Collectors.joining("\n")));
@@ -84,7 +84,7 @@ public void testInputCmdUnsubscribe() throws IOException, ButtplugProtocolExcept
8484

8585
@Test
8686
public void testInputCmdRead() throws IOException, ButtplugProtocolException {
87-
String testStr = "[{\"InputCmd\":{\"Id\":3,\"DeviceIndex\":0,\"FeatureIndex\":0,\"InputType\":\"Button\",\"InputCommand\":\"Read\"}}]";
87+
String testStr = "[{\"InputCmd\":{\"Id\":3,\"DeviceIndex\":0,\"FeatureIndex\":0,\"Type\":\"Button\",\"Command\":\"Read\"}}]";
8888

8989
Validator.Result result = new ValidatorFactory().validate(schema, testStr);
9090
assertTrue(result.isValid(), result.getErrors().stream().map(Error::getError).collect(Collectors.joining("\n")));

0 commit comments

Comments
 (0)