Merge develop into master #1
@@ -1,11 +1,129 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Avans.TI.BLE;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
|
||||||
namespace Hardware
|
namespace Hardware
|
||||||
{
|
{
|
||||||
class BLEReciever
|
class BLEReciever
|
||||||
{
|
{
|
||||||
IDataConverter dataConverter;
|
IDataConverter dataConverter;
|
||||||
|
private BLE bleBike;
|
||||||
|
private BLE bleHeart;
|
||||||
|
public bool running { get; set; }
|
||||||
|
|
||||||
|
public BLEReciever(IDataConverter dataConverter)
|
||||||
|
{
|
||||||
|
this.dataConverter = dataConverter;
|
||||||
|
bool running = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Connect()
|
||||||
|
{
|
||||||
|
BLE bleBike = new BLE();
|
||||||
|
Thread.Sleep(1000); // We need some time to list available devices
|
||||||
|
|
||||||
|
// List available devices
|
||||||
|
List<String> bleBikeList = bleBike.ListDevices();
|
||||||
|
Console.WriteLine("Devices found: ");
|
||||||
|
foreach (var name in bleBikeList)
|
||||||
|
{
|
||||||
|
Console.WriteLine(name);
|
||||||
|
if (name.Contains("Avans Bike"))
|
||||||
|
{
|
||||||
|
Console.WriteLine("connecting to {0}", name);
|
||||||
|
Connect(name);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public async void Connect(string deviceName)
|
||||||
|
{
|
||||||
|
int errorCode = 0;
|
||||||
|
bleBike = new BLE();
|
||||||
|
bleHeart = new BLE();
|
||||||
|
|
||||||
|
errorCode = errorCode = await bleBike.OpenDevice(deviceName);
|
||||||
|
if (errorCode > 0)
|
||||||
|
{
|
||||||
|
disposeBLE();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set service
|
||||||
|
errorCode = await bleBike.SetService("6e40fec1-b5a3-f393-e0a9-e50e24dcca9e");
|
||||||
|
if (errorCode > 0)
|
||||||
|
{
|
||||||
|
disposeBLE();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Subscribe
|
||||||
|
bleBike.SubscriptionValueChanged += BleBike_SubscriptionValueChanged;
|
||||||
|
errorCode = await bleBike.SubscribeToCharacteristic("6e40fec2-b5a3-f393-e0a9-e50e24dcca9e");
|
||||||
|
if (errorCode > 0)
|
||||||
|
{
|
||||||
|
disposeBLE();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Heart rate
|
||||||
|
errorCode = await bleHeart.OpenDevice(deviceName);
|
||||||
|
if (errorCode > 0)
|
||||||
|
{
|
||||||
|
disposeBLE();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
errorCode = await bleHeart.SetService("HeartRate");
|
||||||
|
if (errorCode > 0)
|
||||||
|
{
|
||||||
|
disposeBLE();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bleHeart.SubscriptionValueChanged += BleBike_SubscriptionValueChanged;
|
||||||
|
errorCode = await bleHeart.SubscribeToCharacteristic("HeartRateMeasurement");
|
||||||
|
if (errorCode > 0)
|
||||||
|
{
|
||||||
|
disposeBLE();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine("connected to BLE");
|
||||||
|
this.running = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BleBike_SubscriptionValueChanged(object sender, BLESubscriptionValueChangedEventArgs e)
|
||||||
|
{
|
||||||
|
//Console.WriteLine("Received from {0}: {1}", e.ServiceName,
|
||||||
|
// BitConverter.ToString(e.Data).Replace("-", " "));
|
||||||
|
//send to dataconverter
|
||||||
|
|
||||||
|
if (e.ServiceName == "6e40fec2-b5a3-f393-e0a9-e50e24dcca9e")
|
||||||
|
{
|
||||||
|
byte[] payload = new byte[8];
|
||||||
|
Array.Copy(e.Data, 4, payload, 0, 8);
|
||||||
|
this.dataConverter.Bike(payload);
|
||||||
|
}else if(e.ServiceName == "00002a37-0000-1000-8000-00805f9b34fb")
|
||||||
|
{
|
||||||
|
this.dataConverter.BPM(e.Data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("received data from unknown source {0}", e.ServiceName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disposeBLE()
|
||||||
|
{
|
||||||
|
this.bleBike?.Dispose();
|
||||||
|
this.bleHeart?.Dispose();
|
||||||
|
this.running = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,12 +8,77 @@ namespace Hardware
|
|||||||
{
|
{
|
||||||
public void Bike(byte[] bytes)
|
public void Bike(byte[] bytes)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (bytes == null)
|
||||||
|
{
|
||||||
|
Console.WriteLine("HEY, didn't get bytes!\n-Bike DataConverter");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (bytes.Length == 8)
|
||||||
|
{
|
||||||
|
|
||||||
|
switch (bytes[0])
|
||||||
|
{
|
||||||
|
case 0x10:
|
||||||
|
if (bytes[1] != 25)
|
||||||
|
{
|
||||||
|
Console.WriteLine("WTF this isn't a bike");
|
||||||
|
}
|
||||||
|
Console.WriteLine($"Time since start is: {bytes[2] / 4}s (Rollover every 4s)");
|
||||||
|
Console.WriteLine($"Distance Traveled is : {bytes[3]}m (Rollover every 256m)");
|
||||||
|
|
||||||
|
int input = bytes[4] | (bytes[5] << 8);
|
||||||
|
Console.WriteLine($"Speed is : {input * 0.01}m/s (Range 65.534m/4)");
|
||||||
|
if (bytes[6] != 0xFF)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Heart rate byte: {0}", Convert.ToString(bytes[6],2));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x19:
|
||||||
|
Console.WriteLine($"Event count: {bytes[1]} (Rollover 256)");
|
||||||
|
if (bytes[2] != 0xFF)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Instantaneous cadence: {bytes[2]} RPM (Range 0-254)");
|
||||||
|
|
||||||
|
}
|
||||||
|
int accumPower = bytes[3] | (bytes[4] << 8);
|
||||||
|
|
||||||
|
Console.WriteLine($"Accumulated power: {accumPower} watt (Rollover 65536)");
|
||||||
|
//Console.WriteLine();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Console.WriteLine("HEY, I never heard of data page {0}\n-DataConverter", bytes[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("HEY, I didn't get 8 bytes!\n-DataConverter");
|
||||||
|
}
|
||||||
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BPM(byte[] bytes)
|
public void BPM(byte[] bytes)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (bytes == null)
|
||||||
|
{
|
||||||
|
Console.WriteLine("HEY, didn't get bytes!\n-BPM DataConverter");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (bytes[0] != 0)
|
||||||
|
{
|
||||||
|
Console.WriteLine("HOLY SHIT i got flags!!! {0} now i can't do anything\n-BPM DataConverter", bytes[0]);
|
||||||
|
}
|
||||||
|
else if (bytes.Length != 2)
|
||||||
|
{
|
||||||
|
Console.WriteLine("bytes length is: {0}", bytes.Length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("BPM: {0}", bytes[1]);
|
||||||
|
|
||||||
|
}
|
||||||
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,15 +11,14 @@ namespace FietsDemo
|
|||||||
{
|
{
|
||||||
internal class Program
|
internal class Program
|
||||||
{
|
{
|
||||||
/*static void Main(string[] args)
|
//static void Main(string[] args)
|
||||||
{
|
//{
|
||||||
foo foo = new foo();
|
// foo foo = new foo();
|
||||||
//BLEReceiver bLEReceiver = new BLEReceiver(foo);
|
// BLEReceiver bLEReceiver = new BLEReceiver(foo);
|
||||||
|
|
||||||
|
// bLEReceiver.ConnectToBLE();
|
||||||
//bLEReceiver.ConnectToBLE();
|
// Console.Read();
|
||||||
Console.Read();
|
//}
|
||||||
}*/
|
|
||||||
|
|
||||||
interface IFoo
|
interface IFoo
|
||||||
{
|
{
|
||||||
@@ -151,7 +150,7 @@ namespace FietsDemo
|
|||||||
{
|
{
|
||||||
|
|
||||||
Console.WriteLine("Foo class received {0}", Convert.ToString(bytes));
|
Console.WriteLine("Foo class received {0}", Convert.ToString(bytes));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user