changed IDataConverter to IDataReceiver

This commit is contained in:
shinichi
2020-09-23 13:22:14 +02:00
parent e315e1cf3f
commit fd36e420d1
4 changed files with 51 additions and 45 deletions

View File

@@ -4,6 +4,7 @@ using System.Text;
using Avans.TI.BLE;
using System.Threading;
using System.Security.Cryptography;
using ProftaakRH;
namespace Hardware
{
@@ -12,7 +13,7 @@ namespace Hardware
/// </summary>
class BLEHandler
{
IDataConverter dataConverter;
IDataReceiver dataReceiver;
private BLE bleBike;
private BLE bleHeart;
public bool Running { get; set; }
@@ -20,10 +21,10 @@ namespace Hardware
/// <summary>
/// Makes a new BLEHandler object
/// </summary>
/// <param name="dataConverter">the dataconverter object</param>
public BLEHandler(IDataConverter dataConverter)
/// <param name="dataReceiver">the dataconverter object</param>
public BLEHandler(IDataReceiver dataReceiver)
{
this.dataConverter = dataConverter;
this.dataReceiver = dataReceiver;
}
/// <summary>
@@ -119,16 +120,16 @@ namespace Hardware
/// <param name="e">the value changed event</param>
private void BleBike_SubscriptionValueChanged(object sender, BLESubscriptionValueChangedEventArgs e)
{
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);
this.dataReceiver.Bike(payload);
}
else if (e.ServiceName == "00002a37-0000-1000-8000-00805f9b34fb")
{
this.dataConverter.BPM(e.Data);
this.dataReceiver.BPM(e.Data);
}
else
{
@@ -164,7 +165,7 @@ namespace Hardware
antMessage[i] = 0xFF;
}
antMessage[11] = (byte)Math.Max(Math.Min(Math.Round(percentage / 0.5), 255), 0);
byte checksum = 0;
for (int i = 0; i < 12; i++)

View File

@@ -1,4 +1,5 @@
using LibNoise.Primitive;
using ProftaakRH;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -11,7 +12,7 @@ namespace Hardware.Simulators
{
class BikeSimulator : IHandler
{
IDataConverter dataConverter;
IDataReceiver dataReceiver;
private int elapsedTime = 0;
private int eventCounter = 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()
{
@@ -41,16 +42,16 @@ namespace Hardware.Simulators
float x = 0.0f;
//Perlin for Random values
ImprovedPerlin improvedPerlin = new ImprovedPerlin(0,LibNoise.NoiseQuality.Best);
ImprovedPerlin improvedPerlin = new ImprovedPerlin(0, LibNoise.NoiseQuality.Best);
while (true)
{
CalculateVariables(improvedPerlin.GetValue(x)+1);
CalculateVariables(improvedPerlin.GetValue(x) + 1);
//Simulate sending data
dataConverter.Bike(GenerateBike0x19());
dataConverter.Bike(GenerateBike0x10());
dataConverter.BPM(GenerateHeart());
dataReceiver.Bike(GenerateBike0x19());
dataReceiver.Bike(GenerateBike0x10());
dataReceiver.BPM(GenerateHeart());
Thread.Sleep(1000);
@@ -65,21 +66,21 @@ namespace Hardware.Simulators
private byte[] GenerateBike0x19()
{
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;
}
//Generate an ANT message for page 0x10
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;
}
//Generate an ANT message for BPM
private byte[] GenerateHeart()
{
byte[] hartByte = { 0x00, Convert.ToByte(BPM)};
byte[] hartByte = { 0x00, Convert.ToByte(BPM) };
return hartByte;
}
@@ -114,13 +115,13 @@ namespace Hardware.Simulators
//Input perlin value
private void CalculateVariables(float perlin)
{
this.speed = perlin * 5 / 0.01 ;
this.speed = perlin * 5 / 0.01;
short sped = (short)speed;
speedArray = BitConverter.GetBytes(sped);
this.distanceTraveled = (distanceTraveled+(speed*0.01)) % 256;
this.BPM = (int) (perlin * 80);
this.cadence = (int)speed/6;
this.power = ((1 + resistance) * speed)/14 % 4094;
this.distanceTraveled = (distanceTraveled + (speed * 0.01)) % 256;
this.BPM = (int)(perlin * 80);
this.cadence = (int)speed / 6;
this.power = ((1 + resistance) * speed) / 14 % 4094;
this.accPower = (this.accPower + this.power) % 65536;
// TO DO power to power LSB & MSN
powerArray = BitConverter.GetBytes((short)this.power);
@@ -131,9 +132,9 @@ namespace Hardware.Simulators
public void setResistance(byte[] bytes)
{
//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;
}
}
}

View File

@@ -1,4 +1,5 @@
using System;
using ProftaakRH;
using System;
using System.Collections.Generic;
using System.Text;
@@ -7,7 +8,7 @@ namespace Hardware
/// <summary>
/// DataConverter class that handles all conversion of received data from the BLE bike.
/// </summary>
class DataConverter : IDataConverter
class DataConverter : IDataReceiver
{
/// <summary>
/// Receives, parses and displays any incoming data from the bike.
@@ -22,7 +23,7 @@ namespace Hardware
else
if (bytes.Length == 8)
{
switch (bytes[0])
{
case 0x10:
@@ -37,7 +38,7 @@ namespace Hardware
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));
Console.WriteLine("Heart rate byte: {0}", Convert.ToString(bytes[6], 2));
}
break;
case 0x19:
@@ -45,17 +46,17 @@ namespace Hardware
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)");
int instantPower = (bytes[5]) | (bytes[6] & 0b00001111)<<8;
int instantPower = (bytes[5]) | (bytes[6] & 0b00001111) << 8;
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 flags = bytes[7] >> 4;
@@ -103,13 +104,4 @@ namespace Hardware
Console.WriteLine();
}
}
/// <summary>
/// Dataconverter interface for handling data received from the bike
/// </summary>
interface IDataConverter
{
void BPM(byte[] bytes);
void Bike(byte[] bytes);
}
}

View 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);
}
}