merge Develop into master #9
@@ -4,6 +4,7 @@ using System.Text;
|
|||||||
using Avans.TI.BLE;
|
using Avans.TI.BLE;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
|
using ProftaakRH;
|
||||||
|
|
||||||
namespace Hardware
|
namespace Hardware
|
||||||
{
|
{
|
||||||
@@ -12,7 +13,7 @@ namespace Hardware
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
class BLEHandler
|
class BLEHandler
|
||||||
{
|
{
|
||||||
IDataConverter dataConverter;
|
IDataReceiver dataReceiver;
|
||||||
private BLE bleBike;
|
private BLE bleBike;
|
||||||
private BLE bleHeart;
|
private BLE bleHeart;
|
||||||
public bool Running { get; set; }
|
public bool Running { get; set; }
|
||||||
@@ -20,10 +21,10 @@ namespace Hardware
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Makes a new BLEHandler object
|
/// Makes a new BLEHandler object
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="dataConverter">the dataconverter object</param>
|
/// <param name="dataReceiver">the dataconverter object</param>
|
||||||
public BLEHandler(IDataConverter dataConverter)
|
public BLEHandler(IDataReceiver dataReceiver)
|
||||||
{
|
{
|
||||||
this.dataConverter = dataConverter;
|
this.dataReceiver = dataReceiver;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -124,11 +125,11 @@ namespace Hardware
|
|||||||
{
|
{
|
||||||
byte[] payload = new byte[8];
|
byte[] payload = new byte[8];
|
||||||
Array.Copy(e.Data, 4, payload, 0, 8);
|
Array.Copy(e.Data, 4, payload, 0, 8);
|
||||||
this.dataConverter.Bike(payload);
|
this.dataReceiver.Bike(payload);
|
||||||
}
|
}
|
||||||
else if (e.ServiceName == "00002a37-0000-1000-8000-00805f9b34fb")
|
else if (e.ServiceName == "00002a37-0000-1000-8000-00805f9b34fb")
|
||||||
{
|
{
|
||||||
this.dataConverter.BPM(e.Data);
|
this.dataReceiver.BPM(e.Data);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using LibNoise.Primitive;
|
using LibNoise.Primitive;
|
||||||
|
using ProftaakRH;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -11,7 +12,7 @@ namespace Hardware.Simulators
|
|||||||
{
|
{
|
||||||
class BikeSimulator : IHandler
|
class BikeSimulator : IHandler
|
||||||
{
|
{
|
||||||
IDataConverter dataConverter;
|
IDataReceiver dataReceiver;
|
||||||
private int elapsedTime = 0;
|
private int elapsedTime = 0;
|
||||||
private int eventCounter = 0;
|
private int eventCounter = 0;
|
||||||
private double distanceTraveled = 0;
|
private double distanceTraveled = 0;
|
||||||
@@ -29,9 +30,9 @@ namespace Hardware.Simulators
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
public BikeSimulator(IDataConverter dataConverter)
|
public BikeSimulator(IDataReceiver dataReceiver)
|
||||||
{
|
{
|
||||||
this.dataConverter = dataConverter;
|
this.dataReceiver = dataReceiver;
|
||||||
}
|
}
|
||||||
public void StartSimulation()
|
public void StartSimulation()
|
||||||
{
|
{
|
||||||
@@ -41,16 +42,16 @@ namespace Hardware.Simulators
|
|||||||
float x = 0.0f;
|
float x = 0.0f;
|
||||||
|
|
||||||
//Perlin for Random values
|
//Perlin for Random values
|
||||||
ImprovedPerlin improvedPerlin = new ImprovedPerlin(0,LibNoise.NoiseQuality.Best);
|
ImprovedPerlin improvedPerlin = new ImprovedPerlin(0, LibNoise.NoiseQuality.Best);
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
CalculateVariables(improvedPerlin.GetValue(x)+1);
|
CalculateVariables(improvedPerlin.GetValue(x) + 1);
|
||||||
|
|
||||||
//Simulate sending data
|
//Simulate sending data
|
||||||
dataConverter.Bike(GenerateBike0x19());
|
dataReceiver.Bike(GenerateBike0x19());
|
||||||
dataConverter.Bike(GenerateBike0x10());
|
dataReceiver.Bike(GenerateBike0x10());
|
||||||
dataConverter.BPM(GenerateHeart());
|
dataReceiver.BPM(GenerateHeart());
|
||||||
|
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
|
|
||||||
@@ -65,21 +66,21 @@ namespace Hardware.Simulators
|
|||||||
private byte[] GenerateBike0x19()
|
private byte[] GenerateBike0x19()
|
||||||
{
|
{
|
||||||
byte statByte = (byte)(powerArray[1] >> 4);
|
byte statByte = (byte)(powerArray[1] >> 4);
|
||||||
byte[] bikeByte = { 0x19, Convert.ToByte(eventCounter%256), Convert.ToByte(cadence%254), accPowerArray[0], accPowerArray[1], powerArray[0], statByte, 0x20 };
|
byte[] bikeByte = { 0x19, Convert.ToByte(eventCounter % 256), Convert.ToByte(cadence % 254), accPowerArray[0], accPowerArray[1], powerArray[0], statByte, 0x20 };
|
||||||
return bikeByte;
|
return bikeByte;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Generate an ANT message for page 0x10
|
//Generate an ANT message for page 0x10
|
||||||
private byte[] GenerateBike0x10()
|
private byte[] GenerateBike0x10()
|
||||||
{
|
{
|
||||||
byte[] bikeByte = { 0x10, Convert.ToByte(equipmentType), Convert.ToByte(elapsedTime*4%64), Convert.ToByte(distanceTraveled), speedArray[0], speedArray[1], Convert.ToByte(BPM), 0xFF };
|
byte[] bikeByte = { 0x10, Convert.ToByte(equipmentType), Convert.ToByte(elapsedTime * 4 % 64), Convert.ToByte(distanceTraveled), speedArray[0], speedArray[1], Convert.ToByte(BPM), 0xFF };
|
||||||
return bikeByte;
|
return bikeByte;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Generate an ANT message for BPM
|
//Generate an ANT message for BPM
|
||||||
private byte[] GenerateHeart()
|
private byte[] GenerateHeart()
|
||||||
{
|
{
|
||||||
byte[] hartByte = { 0x00, Convert.ToByte(BPM)};
|
byte[] hartByte = { 0x00, Convert.ToByte(BPM) };
|
||||||
return hartByte;
|
return hartByte;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,13 +115,13 @@ namespace Hardware.Simulators
|
|||||||
//Input perlin value
|
//Input perlin value
|
||||||
private void CalculateVariables(float perlin)
|
private void CalculateVariables(float perlin)
|
||||||
{
|
{
|
||||||
this.speed = perlin * 5 / 0.01 ;
|
this.speed = perlin * 5 / 0.01;
|
||||||
short sped = (short)speed;
|
short sped = (short)speed;
|
||||||
speedArray = BitConverter.GetBytes(sped);
|
speedArray = BitConverter.GetBytes(sped);
|
||||||
this.distanceTraveled = (distanceTraveled+(speed*0.01)) % 256;
|
this.distanceTraveled = (distanceTraveled + (speed * 0.01)) % 256;
|
||||||
this.BPM = (int) (perlin * 80);
|
this.BPM = (int)(perlin * 80);
|
||||||
this.cadence = (int)speed/6;
|
this.cadence = (int)speed / 6;
|
||||||
this.power = ((1 + resistance) * speed)/14 % 4094;
|
this.power = ((1 + resistance) * speed) / 14 % 4094;
|
||||||
this.accPower = (this.accPower + this.power) % 65536;
|
this.accPower = (this.accPower + this.power) % 65536;
|
||||||
// TO DO power to power LSB & MSN
|
// TO DO power to power LSB & MSN
|
||||||
powerArray = BitConverter.GetBytes((short)this.power);
|
powerArray = BitConverter.GetBytes((short)this.power);
|
||||||
@@ -131,9 +132,9 @@ namespace Hardware.Simulators
|
|||||||
public void setResistance(byte[] bytes)
|
public void setResistance(byte[] bytes)
|
||||||
{
|
{
|
||||||
//TODO check if message is correct
|
//TODO check if message is correct
|
||||||
if(bytes.Length == 13)
|
if (bytes.Length == 13)
|
||||||
{
|
{
|
||||||
this.resistance = Convert.ToDouble(bytes[11])/2;
|
this.resistance = Convert.ToDouble(bytes[11]) / 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using ProftaakRH;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
@@ -7,7 +8,7 @@ namespace Hardware
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// DataConverter class that handles all conversion of received data from the BLE bike.
|
/// DataConverter class that handles all conversion of received data from the BLE bike.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class DataConverter : IDataConverter
|
class DataConverter : IDataReceiver
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Receives, parses and displays any incoming data from the bike.
|
/// Receives, parses and displays any incoming data from the bike.
|
||||||
@@ -37,7 +38,7 @@ namespace Hardware
|
|||||||
Console.WriteLine($"Speed is : {input * 0.01}m/s (Range 65.534m/4)");
|
Console.WriteLine($"Speed is : {input * 0.01}m/s (Range 65.534m/4)");
|
||||||
if (bytes[6] != 0xFF)
|
if (bytes[6] != 0xFF)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Heart rate byte: {0}", Convert.ToString(bytes[6],2));
|
Console.WriteLine("Heart rate byte: {0}", Convert.ToString(bytes[6], 2));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x19:
|
case 0x19:
|
||||||
@@ -51,11 +52,11 @@ namespace Hardware
|
|||||||
|
|
||||||
Console.WriteLine($"Accumulated power: {accumPower} watt (Rollover 65536)");
|
Console.WriteLine($"Accumulated power: {accumPower} watt (Rollover 65536)");
|
||||||
|
|
||||||
int instantPower = (bytes[5]) | (bytes[6] & 0b00001111)<<8;
|
int instantPower = (bytes[5]) | (bytes[6] & 0b00001111) << 8;
|
||||||
|
|
||||||
|
|
||||||
if (instantPower != 0xFFF)
|
if (instantPower != 0xFFF)
|
||||||
Console.WriteLine($"Instant power: {instantPower} watt (Range 0-4094)");
|
Console.WriteLine($"Instant power: {instantPower} watt (Range 0-4094)");
|
||||||
|
|
||||||
int trainerStatus = bytes[6] & 0b11110000; // bit 4-7
|
int trainerStatus = bytes[6] & 0b11110000; // bit 4-7
|
||||||
int flags = bytes[7] >> 4;
|
int flags = bytes[7] >> 4;
|
||||||
@@ -103,13 +104,4 @@ namespace Hardware
|
|||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Dataconverter interface for handling data received from the bike
|
|
||||||
/// </summary>
|
|
||||||
interface IDataConverter
|
|
||||||
{
|
|
||||||
void BPM(byte[] bytes);
|
|
||||||
void Bike(byte[] bytes);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
12
ProftaakRH/IDataReceiver.cs
Normal file
12
ProftaakRH/IDataReceiver.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ProftaakRH
|
||||||
|
{
|
||||||
|
interface IDataReceiver
|
||||||
|
{
|
||||||
|
void BPM(byte[] bytes);
|
||||||
|
void Bike(byte[] bytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user