Skip to content

Commit 3d5f01a

Browse files
committed
Allow customizing all them ISOTP options
1 parent 89c4383 commit 3d5f01a

File tree

5 files changed

+305
-10
lines changed

5 files changed

+305
-10
lines changed

src/main/java/tel/schich/javacan/IsotpCanSocketOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ private IsotpCanSocketOptions() {}
4242
public static final SocketOption<IsotpOptions> OPTS = new CanSocketOption<>("OPTS", IsotpOptions.class, new LinuxSocketOptionHandler<IsotpOptions>() {
4343
@Override
4444
public void set(int sock, IsotpOptions val) throws IOException {
45-
SocketCAN.setIsotpOpts(sock, val.getFlags(), val.getFrameTransmissionTime(), val.getExtendedTransmissionAddress(), val.getTransmissionPadding(), val.getReceivePadding(), val.getExtendedReceiveAddress());
45+
SocketCAN.setIsotpOpts(sock, val.getRawFlags(), val.getFrameTransmissionTime(), val.getExtendedTransmissionAddress(), val.getTransmissionPadding(), val.getReceivePadding(), val.getExtendedReceiveAddress());
4646
}
4747

4848
@Override

src/main/java/tel/schich/javacan/IsotpFlowControlOptions.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@
3030
* This class represents ISOTP's flow control options.
3131
*/
3232
public class IsotpFlowControlOptions {
33+
34+
public static final IsotpFlowControlOptions DEFAULT = new IsotpFlowControlOptions(
35+
(byte) 0,
36+
(byte) 0x00,
37+
(byte) 0
38+
);
39+
3340
private final byte blockSize;
3441
private final byte minimumSeparationTime;
3542
private final byte maximumWaitFrameTransmission;
@@ -45,14 +52,50 @@ public byte getBlockSize() {
4552
return blockSize;
4653
}
4754

55+
public IsotpFlowControlOptions withBlockSize(byte blockSize) {
56+
return new IsotpFlowControlOptions(
57+
blockSize,
58+
minimumSeparationTime,
59+
maximumWaitFrameTransmission
60+
);
61+
}
62+
63+
public IsotpFlowControlOptions withBlockSize(int blockSize) {
64+
return withBlockSize((byte) blockSize);
65+
}
66+
4867
public byte getMinimumSeparationTime() {
4968
return minimumSeparationTime;
5069
}
5170

71+
public IsotpFlowControlOptions withMinimumSeparationTime(byte minimumSeparationTime) {
72+
return new IsotpFlowControlOptions(
73+
blockSize,
74+
minimumSeparationTime,
75+
maximumWaitFrameTransmission
76+
);
77+
}
78+
79+
public IsotpFlowControlOptions withMinimumSeparationTime(int minimumSeparationTime) {
80+
return withMinimumSeparationTime((byte) minimumSeparationTime);
81+
}
82+
5283
public byte getMaximumWaitFrameTransmission() {
5384
return maximumWaitFrameTransmission;
5485
}
5586

87+
public IsotpFlowControlOptions withMaximumWaitFrameTransmission(byte maximumWaitFrameTransmission) {
88+
return new IsotpFlowControlOptions(
89+
blockSize,
90+
minimumSeparationTime,
91+
maximumWaitFrameTransmission
92+
);
93+
}
94+
95+
public IsotpFlowControlOptions withMaximumWaitFrameTransmission(int maximumWaitFrameTransmission) {
96+
return withMaximumWaitFrameTransmission((byte) maximumWaitFrameTransmission);
97+
}
98+
5699
@Override
57100
public boolean equals(Object o) {
58101
if (this == o)

src/main/java/tel/schich/javacan/IsotpLinkLayerOptions.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@
3030
* This class represents ISOTP's link layer options.
3131
*/
3232
public class IsotpLinkLayerOptions {
33+
34+
public static final IsotpLinkLayerOptions DEFAULT = new IsotpLinkLayerOptions(
35+
(byte) RawCanChannel.MTU,
36+
(byte) CanFrame.MAX_DATA_LENGTH,
37+
(byte) 0
38+
);
39+
3340
private final byte maximumTransmissionUnit;
3441
private final byte transmissionDataLength;
3542
private final byte transmissionFlags;
@@ -45,14 +52,50 @@ public byte getMaximumTransmissionUnit() {
4552
return maximumTransmissionUnit;
4653
}
4754

55+
public IsotpLinkLayerOptions withMaximumTransmissionUnit(byte maximumTransmissionUnit) {
56+
return new IsotpLinkLayerOptions(
57+
maximumTransmissionUnit,
58+
transmissionDataLength,
59+
transmissionFlags
60+
);
61+
}
62+
63+
public IsotpLinkLayerOptions withMaximumTransmissionUnit(int maximumTransmissionUnit) {
64+
return withMaximumTransmissionUnit((byte) maximumTransmissionUnit);
65+
}
66+
4867
public byte getTransmissionDataLength() {
4968
return transmissionDataLength;
5069
}
5170

71+
public IsotpLinkLayerOptions withTransmissionDataLength(byte transmissionDataLength) {
72+
return new IsotpLinkLayerOptions(
73+
maximumTransmissionUnit,
74+
transmissionDataLength,
75+
transmissionFlags
76+
);
77+
}
78+
79+
public IsotpLinkLayerOptions withTransmissionDataLength(int transmissionDataLength) {
80+
return withTransmissionDataLength((byte) transmissionDataLength);
81+
}
82+
5283
public byte getTransmissionFlags() {
5384
return transmissionFlags;
5485
}
5586

87+
public IsotpLinkLayerOptions withTransmissionFlags(byte transmissionFlags) {
88+
return new IsotpLinkLayerOptions(
89+
maximumTransmissionUnit,
90+
transmissionDataLength,
91+
transmissionFlags
92+
);
93+
}
94+
95+
public IsotpLinkLayerOptions withTransmissionFlags(int transmissionFlags) {
96+
return withTransmissionFlags((byte) transmissionFlags);
97+
}
98+
5699
@Override
57100
public boolean equals(Object o) {
58101
if (this == o)

0 commit comments

Comments
 (0)