Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,7 @@ public async void WritePasskeyConfigurationButton()

if (isSetToClinicalTrial.IsChecked)
{
prodConfig.SetPasskey("");
prodConfig.SetPasskeyID("");
prodConfig.SetAdvertisingNamePrefix("");
prodConfig.EnableClinicalTrialPasskey();
Array.Copy(prodConfig.GetPayload(), 3, prodConfigByteArray, 0, 55);
await device.ExecuteRequest(RequestType.WriteProductionConfig, prodConfigByteArray);
}
Expand Down Expand Up @@ -181,10 +179,21 @@ public async void WritePasskeyConfigurationButton()
await DisplayAlert("Error!", errorString, "OK");
return;
}

prodConfig.SetPasskey(passkey.Text);
prodConfig.SetPasskeyID(passkeyId.Text);
prodConfig.SetAdvertisingNamePrefix(deviceAdvertisingNamePrefix.Text);
try
{
if (String.IsNullOrEmpty(passkey.Text))
{
prodConfig.EnableNoPasskey(deviceAdvertisingNamePrefix.Text, passkeyId.Text);
}
else
{
prodConfig.EnableDefaultPasskey(deviceAdvertisingNamePrefix.Text, passkeyId.Text);
}
} catch (Exception ex)
{
await DisplayAlert("Error!", ex.Message, "OK");
}

Array.Copy(prodConfig.GetPayload(), 3, prodConfigByteArray, 0, 55);
await device.ExecuteRequest(RequestType.WriteProductionConfig, prodConfigByteArray);
}
Expand Down
100 changes: 93 additions & 7 deletions ShimmerBLE/ShimmerBLEAPI/Models/ProdConfigPayload.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,55 @@ public ProdConfigPayload()

}

public void SetPasskeyID(string passkeyId)
public void EnableClinicalTrialPasskey()
{
try
{
SetAdvertisingNamePrefix("");
SetPasskey("");
SetPasskeyID("");
} catch (Exception ex)
{
throw ex;
}
}

public void EnableNoPasskey(string advertisingName, string passkeyID)
{
try
{
if (advertisingName.Equals("Verisense"))
{
advertisingName = "";
}
SetAdvertisingNamePrefix(advertisingName);
SetPasskey("");
SetPasskeyID(passkeyID);
}
catch (Exception ex)
{
throw ex;
}
}

public void EnableDefaultPasskey(string advertisingName, string passkeyID)
{
try
{
if (advertisingName.Equals("Verisense"))
{
advertisingName = "";
}
SetAdvertisingNamePrefix(advertisingName);
SetPasskey("123456");
SetPasskeyID(passkeyID);
} catch (Exception ex)
{
throw ex;
}
}

protected void SetPasskeyID(string passkeyId)
{
byte[] payloadArray = GetPayload();
if (string.IsNullOrEmpty(passkeyId))
Expand All @@ -48,6 +96,10 @@ public void SetPasskeyID(string passkeyId)
else if (passkeyId.Length == 2)
{
byte[] passkeyIdArray = Encoding.UTF8.GetBytes(passkeyId);
if (HasAnFF(passkeyIdArray))
{
throw new Exception("Passkey ID has a byte value of 0xFF which is not permitted");
}
for (int i = 0; i < passkeyIdArray.Length; i++)
{
payloadArray[i + 18] = passkeyIdArray[i];
Expand All @@ -56,7 +108,7 @@ public void SetPasskeyID(string passkeyId)
Payload = BitConverter.ToString(payloadArray);
}

public void SetPasskey(string passkey)
protected void SetPasskey(string passkey)
{
byte[] payloadArray = GetPayload();
if (string.IsNullOrEmpty(passkey))
Expand All @@ -68,16 +120,22 @@ public void SetPasskey(string passkey)
}
else if (passkey.Length == 6)
{
if (!int.TryParse(passkey, out _))
{
throw new Exception("Passkey Must Be Numeric Values");
}

byte[] passkeyArray = Encoding.UTF8.GetBytes(passkey);
for (int i = 0; i < passkeyArray.Length; i++)
{
payloadArray[i + 20] = passkeyArray[i];
}
}
Payload = BitConverter.ToString(payloadArray);

}

public void SetAdvertisingNamePrefix(string advertisingNamePrefix)
protected void SetAdvertisingNamePrefix(string advertisingNamePrefix)
{
byte[] payloadArray = GetPayload();
if (string.IsNullOrEmpty(advertisingNamePrefix))
Expand All @@ -90,6 +148,10 @@ public void SetAdvertisingNamePrefix(string advertisingNamePrefix)
else if (advertisingNamePrefix.Length <= 32)
{
byte[] advertisingNamePrefixByteArray = Encoding.UTF8.GetBytes(advertisingNamePrefix);
if (HasAnFF(advertisingNamePrefixByteArray))
{
throw new Exception("Advertising name has a byte value of 0xFF which is not permitted");
}
for (int i = 0; i < advertisingNamePrefixByteArray.Length; i++)
{
payloadArray[i + 26] = advertisingNamePrefixByteArray[i];
Expand All @@ -103,6 +165,30 @@ public void SetAdvertisingNamePrefix(string advertisingNamePrefix)
Payload = BitConverter.ToString(payloadArray);
}

protected bool IsAllFFs(byte[] byteArray)
{
foreach (byte b in byteArray)
{
if (b != 0xFF)
{
return false;
}
}
return true;
}

protected bool HasAnFF(byte[] byteArray)
{
foreach (byte b in byteArray)
{
if (b == 0xFF)
{
return true;
}
}
return false;
}

public new bool ProcessPayload(byte[] response)
{
try
Expand Down Expand Up @@ -144,7 +230,7 @@ public void SetAdvertisingNamePrefix(string advertisingNamePrefix)
REV_HW_INTERNAL = BitConverter.ToUInt16(hwInternalArray, 0);

byte[] passkeyIdArray = reader.ReadBytes(2);
if (passkeyIdArray[0] == 0xFF)
if (IsAllFFs(passkeyIdArray))
{
PasskeyID = "";
}
Expand All @@ -154,7 +240,7 @@ public void SetAdvertisingNamePrefix(string advertisingNamePrefix)
}

byte[] passkeyArray = reader.ReadBytes(6);
if (passkeyArray[0] == 0xFF || passkeyArray[0] == 0x00)
if (IsAllFFs(passkeyArray) || passkeyArray[0] == 0x00)
{
Passkey = "";
}
Expand All @@ -164,9 +250,9 @@ public void SetAdvertisingNamePrefix(string advertisingNamePrefix)
}

byte[] advertisingNamePrefixArrayOriginal = reader.ReadBytes(32);
if (advertisingNamePrefixArrayOriginal[0] == 0xFF)
if (IsAllFFs(advertisingNamePrefixArrayOriginal))
{
AdvertisingNamePrefix = "";
AdvertisingNamePrefix = "Verisense";
}
else
{
Expand Down