Pebble: add dev option to force latest notification protocol usage

When enabled it forces to use 3.x notifications on FW 3.x (2.x notifcations on FW 2.x)
When disabled 2.x notification on FW 2.x and 1.x notifications on FW 2.x are used (which is recommended)

This allows Pebble Time users to do further tests.
live-sensor-data
Andreas Shimokawa 2015-06-19 12:34:33 +02:00
parent e562fa9870
commit 7e1700250f
5 changed files with 39 additions and 4 deletions

View File

@ -115,6 +115,10 @@ public class PebbleIoThread extends GBDeviceIoThread {
mBtSocket = null;
return false;
}
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getContext());
mPebbleProtocol.setForceProtocol(sharedPrefs.getBoolean("pebble_force_protocol", false));
gbDevice.setState(GBDevice.State.CONNECTED);
gbDevice.sendDeviceUpdateIntent(getContext());

View File

@ -165,6 +165,8 @@ public class PebbleProtocol extends GBDeviceProtocol {
private static Random mRandom = new Random();
boolean isFw3x = false;
boolean mForceProtocol = false;
byte last_id = -1;
private ArrayList<UUID> tmpUUIDS = new ArrayList<>();
@ -221,13 +223,16 @@ public class PebbleProtocol extends GBDeviceProtocol {
ts += (SimpleTimeZone.getDefault().getOffset(ts));
ts /= 1000;
if (isFw3x) {
if (isFw3x && mForceProtocol) {
String[] parts = {from, null, body};
return encodeBlobdbNotification((int) (ts & 0xffffffff), parts);
} else {
} else if (!isFw3x && !mForceProtocol) {
String[] parts = {from, body, ts.toString()};
return encodeMessage(ENDPOINT_NOTIFICATION, NOTIFICATION_SMS, 0, parts);
}
String[] parts = {from, null, body};
return encodeExtensibleNotification(mRandom.nextInt(), (int) (ts & 0xffffffff), parts);
}
@Override
@ -236,13 +241,16 @@ public class PebbleProtocol extends GBDeviceProtocol {
ts += (SimpleTimeZone.getDefault().getOffset(ts));
ts /= 1000;
if (isFw3x) {
if (isFw3x && mForceProtocol) {
String[] parts = {from, subject, body};
return encodeBlobdbNotification((int) (ts & 0xffffffff), parts);
} else {
} else if (!isFw3x && !mForceProtocol) {
String[] parts = {from, body, ts.toString(), subject};
return encodeMessage(ENDPOINT_NOTIFICATION, NOTIFICATION_EMAIL, 0, parts);
}
String[] parts = {from, subject, body};
return encodeExtensibleNotification(mRandom.nextInt(), (int) (ts & 0xffffffff), parts);
}
@Override
@ -913,4 +921,9 @@ public class PebbleProtocol extends GBDeviceProtocol {
return cmd;
}
public void setForceProtocol(boolean force) {
LOG.info("setting force protocol to " + force);
mForceProtocol = force;
}
}

View File

@ -93,4 +93,5 @@
<string name="pref_header_vibration_count">Anzahl der Vibrationen</string>
<string name="pref_write_logfiles">Log-Dateien schreiben (Neustart erforderlich)</string>
<string name="title_activity_sleepmonitor">Schlafmonitor</string>
<string name="pref_title_pebble_settings">Pebble Einstellungen</string>
</resources>

View File

@ -42,6 +42,10 @@
<string name="pref_header_development">Developer Options</string>
<string name="pref_title_development_miaddr">Mi Band address</string>
<string name="pref_title_pebble_settings">Pebble Settings</string>
<string name="pref_title_pebble_forceprotocol">Force Notification Protocol</string>
<string name="pref_summary_pebble_forceprotocol">This option forces using the latest notification protocol depending on the firmware version. ENABLE ONLY IF YOU KNOW WHAT YOU ARE DOING!</string>
<string name="not_connected">not connected</string>
<string name="connecting">connecting</string>

View File

@ -59,6 +59,19 @@
<Preference
android:key="pref_key_miband"
android:title="@string/preferences_miband_settings" />
<PreferenceScreen
android:key="pref_key_pebble"
android:title="@string/pref_title_pebble_settings" >
<PreferenceCategory
android:key="pref_key_development"
android:title="@string/pref_header_development">
<CheckBoxPreference
android:defaultValue="false"
android:key="pebble_force_protocol"
android:title="@string/pref_title_pebble_forceprotocol"
android:summary="@string/pref_summary_pebble_forceprotocol" />
</PreferenceCategory>
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory