Skip to content

Commit 8465790

Browse files
authored
Merge pull request #275 from ShimmerResearch/DEV-706_USB_speed_change
DEV-706 Dock menu for changing S3R USB speed
2 parents 6d4df29 + b643fe4 commit 8465790

2 files changed

Lines changed: 171 additions & 30 deletions

File tree

ShimmerDriver/src/main/java/com/shimmerresearch/driver/ShimmerDevice.java

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.shimmerresearch.driverUtilities.ExpansionBoardDetails;
4444
import com.shimmerresearch.driverUtilities.HwDriverShimmerDeviceDetails;
4545
import com.shimmerresearch.driverUtilities.ConfigOptionDetailsSensor;
46+
import com.shimmerresearch.driverUtilities.EepromSensorSettingsDetails;
4647
import com.shimmerresearch.driverUtilities.SensorDetails;
4748
import com.shimmerresearch.driverUtilities.SensorGroupingDetails;
4849
import com.shimmerresearch.driverUtilities.ShimmerBattStatusDetails;
@@ -132,6 +133,7 @@ public abstract class ShimmerDevice extends BasicProcessWithCallBack implements
132133
public ShimmerVerObject mShimmerVerObject = new ShimmerVerObject();
133134
//TODO use entry in ShimmerVerObject instead?
134135
public ExpansionBoardDetails mExpansionBoardDetails = new ExpansionBoardDetails();
136+
public EepromSensorSettingsDetails mEepromSensorSettingsDetails = new EepromSensorSettingsDetails();
135137
public ShimmerBattStatusDetails mShimmerBattStatusDetails = new ShimmerBattStatusDetails();
136138
public ShimmerSDCardDetails mShimmerSDCardDetails = new ShimmerSDCardDetails();
137139

@@ -208,36 +210,7 @@ public abstract class ShimmerDevice extends BasicProcessWithCallBack implements
208210
public transient CommsProtocolRadio mCommsProtocolRadio = null;
209211
public BT_STATE mBluetoothRadioState = BT_STATE.DISCONNECTED;
210212
public DOCK_STATE mDockState = DOCK_STATE.UNDOCKED;
211-
public BTRADIO_STATE mRadioState = BTRADIO_STATE.UNKNOWN;
212213
private boolean mUpdateOnlyWhenStateChanges=false;
213-
public static int EXP_BOARD_MEMORY_LOCATION_FOR_BTRADIO_STATE = 2018;
214-
public enum BTRADIO_STATE{
215-
216-
BT_CLASSIC_BLE_ENABLED("BT Classic and BLE Enabled"),
217-
BT_CLASSIC_ENABLED("BT Classic Enabled"),
218-
BLE_ENABLED("BLE Enabled"),
219-
NONE_ENABLED("None Enabled"),
220-
UNKNOWN("Unknown");
221-
// RECORDING("Recording");
222-
223-
private final String text;
224-
225-
/**
226-
* @param text
227-
*/
228-
private BTRADIO_STATE(final String text) {
229-
this.text = text;
230-
}
231-
232-
/* (non-Javadoc)
233-
* @see java.lang.Enum#toString()
234-
*/
235-
@Override
236-
public String toString() {
237-
return text;
238-
}
239-
240-
}
241214

242215
//TODO:
243216
public enum DOCK_STATE{
@@ -2134,7 +2107,15 @@ public boolean isHWAndFWSupportedBtBleControl() {
21342107
}
21352108
return false;
21362109
}
2137-
2110+
2111+
public boolean isHWAndFWSupportedUsbControl() {
2112+
if(isShimmerGen3R() && getFirmwareIdentifier()==ShimmerVerDetails.FW_ID.LOGANDSTREAM
2113+
&& mShimmerVerObject.compareVersions(HW_ID.SHIMMER_3R, FW_ID.LOGANDSTREAM, 1, 0, 55)){
2114+
return true;
2115+
}
2116+
return false;
2117+
}
2118+
21382119
public boolean isLegacySdLog(){
21392120
if (getFirmwareIdentifier()==FW_ID.SDLOG && getFirmwareVersionMajor()==0 && getFirmwareVersionMinor()==5){
21402121
return true;
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
package com.shimmerresearch.driverUtilities;
2+
3+
import java.io.Serializable;
4+
5+
public class EepromSensorSettingsDetails implements Serializable {
6+
7+
private static final long serialVersionUID = -5497659197227328138L;
8+
9+
public static final int EXP_BOARD_MEMORY_LOCATION_FOR_SENSOR_SETTINGS = 2016;
10+
public static final int EXP_BOARD_MEMORY_PAGE_SIZE = 16;
11+
12+
public byte[] mEepromPageArray = new byte[]{};
13+
14+
public int radioHwVer = 0;
15+
public int baudRate = 0;
16+
public BTRADIO_STATE mRadioState = BTRADIO_STATE.BT_CLASSIC_BLE_ENABLED;
17+
public boolean mUsbFullSpeed = true;
18+
19+
public enum EXP_BOARD_ARRAY_BYTE_INDEX {
20+
RADIO_HW_VER,
21+
BAUD_RATE,
22+
SENSOR_OPTIONS1,
23+
BT_CNT_DISCONNECT_WHILE_STREAMING_LSB, // Used for Shimmer3 RN4678 error tracking
24+
BT_CNT_DISCONNECT_WHILE_STREAMING_MSB, // Used for Shimmer3 RN4678 error tracking
25+
BT_CNT_UNSOLICITED_REBOOT_LSB, // Used for Shimmer3 RN4678 error tracking
26+
BT_CNT_UNSOLICITED_REBOOT_MSB, // Used for Shimmer3 RN4678 error tracking
27+
BT_CNT_RTS_LOCKUP_LSB, // Used for Shimmer3 RN4678 error tracking
28+
BT_CNT_RTS_LOCKUP_MSB, // Used for Shimmer3 RN4678 error tracking
29+
BT_CNT_DATA_RATE_TEST_BLOCKAGE_LSB, // Used for Shimmer3 RN4678 error tracking
30+
BT_CNT_DATA_RATE_TEST_BLOCKAGE_MSB, // Used for Shimmer3 RN4678 error tracking
31+
UNUSED_BYTE_INDEX_11,
32+
UNUSED_BYTE_INDEX_12,
33+
UNUSED_BYTE_INDEX_13,
34+
UNUSED_BYTE_INDEX_14,
35+
UNUSED_BYTE_INDEX_15
36+
}
37+
38+
public enum BTRADIO_STATE{
39+
BT_CLASSIC_BLE_ENABLED("BT Classic and BLE Enabled", 0x03),
40+
BT_CLASSIC_ENABLED("BT Classic Enabled", 0x02),
41+
BLE_ENABLED("BLE Enabled", 0x01),
42+
NONE_ENABLED("None Enabled", 0x00);
43+
44+
private String text;
45+
private int bits;
46+
47+
/**
48+
* @param text
49+
* @param bits
50+
*/
51+
private BTRADIO_STATE(final String text, int bits) {
52+
this.text = text;
53+
this.bits = bits;
54+
}
55+
56+
/* (non-Javadoc)
57+
* @see java.lang.Enum#toString()
58+
*/
59+
@Override
60+
public String toString() {
61+
return text;
62+
}
63+
64+
public byte getBitValue() {
65+
return (byte)bits;
66+
}
67+
}
68+
69+
public enum USB_SPEED {
70+
FULL_SPEED("Full-Speed", 0x04),
71+
HIGH_SPEED("High-Speed", 0x00);
72+
73+
private String text;
74+
private int bits;
75+
76+
/**
77+
* @param text
78+
* @param bits
79+
*/
80+
private USB_SPEED(final String text, int bits) {
81+
this.text = text;
82+
this.bits = bits;
83+
}
84+
85+
/* (non-Javadoc)
86+
* @see java.lang.Enum#toString()
87+
*/
88+
@Override
89+
public String toString() {
90+
return text;
91+
}
92+
93+
public byte getBitValue() {
94+
return (byte)bits;
95+
}
96+
}
97+
98+
public EepromSensorSettingsDetails() {
99+
100+
}
101+
102+
public void parseEepromSensorSettingsDetails(byte[] byteArray) {
103+
this.mEepromPageArray = byteArray;
104+
105+
radioHwVer = mEepromPageArray[EXP_BOARD_ARRAY_BYTE_INDEX.RADIO_HW_VER.ordinal()] & 0xFF;
106+
baudRate = mEepromPageArray[EXP_BOARD_ARRAY_BYTE_INDEX.BAUD_RATE.ordinal()] & 0xFF;
107+
108+
int radioStateBits = mEepromPageArray[EXP_BOARD_ARRAY_BYTE_INDEX.SENSOR_OPTIONS1.ordinal()] & 0x03;
109+
if (radioStateBits == BTRADIO_STATE.BT_CLASSIC_BLE_ENABLED.getBitValue()) {
110+
mRadioState = BTRADIO_STATE.BT_CLASSIC_BLE_ENABLED;
111+
} else if (radioStateBits == BTRADIO_STATE.BT_CLASSIC_ENABLED.getBitValue()) {
112+
mRadioState = BTRADIO_STATE.BT_CLASSIC_ENABLED;
113+
} else if (radioStateBits == BTRADIO_STATE.BLE_ENABLED.getBitValue()) {
114+
mRadioState = BTRADIO_STATE.BLE_ENABLED;
115+
} else {
116+
mRadioState = BTRADIO_STATE.NONE_ENABLED;
117+
}
118+
119+
mUsbFullSpeed = (mEepromPageArray[EXP_BOARD_ARRAY_BYTE_INDEX.SENSOR_OPTIONS1.ordinal()] & USB_SPEED.FULL_SPEED.getBitValue()) != 0;
120+
}
121+
122+
public String generateDebugString() {
123+
return (mRadioState.toString() + ", USB Speed: "
124+
+ (mUsbFullSpeed == true ? USB_SPEED.FULL_SPEED.toString() : USB_SPEED.HIGH_SPEED.toString()));
125+
}
126+
127+
public void setBtRadioStateFromString(String option) {
128+
if(option.equals(BTRADIO_STATE.BT_CLASSIC_BLE_ENABLED.toString())) {
129+
mRadioState = BTRADIO_STATE.BT_CLASSIC_BLE_ENABLED;
130+
}else if (option.equals(BTRADIO_STATE.BT_CLASSIC_ENABLED.toString())) {
131+
mRadioState = BTRADIO_STATE.BT_CLASSIC_ENABLED;
132+
}else if (option.equals(BTRADIO_STATE.BLE_ENABLED.toString())) {
133+
mRadioState = BTRADIO_STATE.BLE_ENABLED;
134+
}
135+
136+
updateEepromPageArray();
137+
}
138+
139+
public void setUsbSpeedStateFromString(String option) {
140+
if (option.equals(USB_SPEED.FULL_SPEED.toString())) {
141+
mUsbFullSpeed = true;
142+
} else if (option.equals(USB_SPEED.HIGH_SPEED.toString())) {
143+
mUsbFullSpeed = false;
144+
}
145+
146+
updateEepromPageArray();
147+
}
148+
149+
private void updateEepromPageArray() {
150+
mEepromPageArray[EXP_BOARD_ARRAY_BYTE_INDEX.RADIO_HW_VER.ordinal()] = (byte) radioHwVer;
151+
mEepromPageArray[EXP_BOARD_ARRAY_BYTE_INDEX.BAUD_RATE.ordinal()] = (byte) baudRate;
152+
153+
mEepromPageArray[EXP_BOARD_ARRAY_BYTE_INDEX.SENSOR_OPTIONS1.ordinal()] &= 0xFC; // Clear the existing radio state bits (bits 0 and 1)
154+
mEepromPageArray[EXP_BOARD_ARRAY_BYTE_INDEX.SENSOR_OPTIONS1.ordinal()] |= mRadioState.getBitValue(); // Set the new radio state bits
155+
156+
mEepromPageArray[EXP_BOARD_ARRAY_BYTE_INDEX.SENSOR_OPTIONS1.ordinal()] &= 0xFB; // Clear the existing USB speed bit (bit 2)
157+
mEepromPageArray[EXP_BOARD_ARRAY_BYTE_INDEX.SENSOR_OPTIONS1.ordinal()] |= (mUsbFullSpeed ? USB_SPEED.FULL_SPEED.getBitValue() : USB_SPEED.HIGH_SPEED.getBitValue()); // Set the new USB speed bit
158+
}
159+
160+
}

0 commit comments

Comments
 (0)