1
0
Files
moniteur-baie/DataModels/PacketParser.cs
2023-06-21 13:51:38 +02:00

64 lines
3.5 KiB
C#

using MoniteurBaie.Utils;
namespace MoniteurBaie.DataModels;
public static class PacketParser
{
public static SerialDataPacket ParseSerialDataPacket(string s)
{
// "COM,{VB1},{VB2},{VB3},{VB4},{VB5},{VB6},{VBat},{VBmin},{VBmax},{Curr},{Power},{Energy},{Temp_alim},{Temp_cha},{Temp_bat},{DF_TEMP_ALIM},{MEM_DF_TEMP_ALIM},{DF_TEMP_BAT},{MEM_DF_TEMP_BAT},{DF_TEMP_CHA},{MEM_DF_TEMP_CHA},{DF_V_INCOHERENT},{DF_BAD_CELL},{DF_OVERCURRENT},{DF_OVERCURRENT_STOP},{DF_STOP_GENERAL},{DF_GENERAL},{DF_CELL_OVERVOLTAGE},{MEM_DF_CELL_OVERVOLTAGE},{DF_UNBALANCE},{MEM_DF_UNBALANCE},{Buzzer_stop},{DECHARGE},{MEM_DECHARGE},{Compteur_demande_coupure_batterie},{Compteur_demande_coupure_totale},{!digitalRead(S_PowRelay)},{digitalRead(S_ChaRelay)},{digitalRead(S_BatRelay1)},{S_BatRelay_State},{flag_decharge}";
var splitter = new Splitter(s);
var header = splitter.ReadString();
if (header is not "COM")
{
throw new Exception("Invalid packet header.");
}
var VB1 = splitter.ReadFloat();
var VB2 = splitter.ReadFloat();
var VB3 = splitter.ReadFloat();
var VB4 = splitter.ReadFloat();
var VB5 = splitter.ReadFloat();
var VB6 = splitter.ReadFloat();
var VBat = splitter.ReadFloat();
var VBmin = splitter.ReadFloat();
var VBmax = splitter.ReadFloat();
var Curr = splitter.ReadFloat();
var Power = splitter.ReadFloat();
var Energy = splitter.ReadFloat();
var Temp_alim = splitter.ReadFloat();
var Temp_cha = splitter.ReadFloat();
var Temp_bat = splitter.ReadFloat();
var DF_TEMP_ALIM = splitter.ReadBool();
var MEM_DF_TEMP_ALIM = splitter.ReadBool();
var DF_TEMP_BAT = splitter.ReadBool();
var MEM_DF_TEMP_BAT = splitter.ReadBool();
var DF_TEMP_CHA = splitter.ReadBool();
var MEM_DF_TEMP_CHA = splitter.ReadBool();
var DF_V_INCOHERENT = splitter.ReadBool();
var DF_BAD_CELL = splitter.ReadBool();
var DF_OVERCURRENT = splitter.ReadBool();
var DF_OVERCURRENT_STOP = splitter.ReadBool();
var DF_STOP_GENERAL = splitter.ReadBool();
var DF_GENERAL = splitter.ReadBool();
var DF_CELL_OVERVOLTAGE = splitter.ReadBool();
var MEM_DF_CELL_OVERVOLTAGE = splitter.ReadBool();
var DF_UNBALANCE = splitter.ReadBool();
var MEM_DF_UNBALANCE = splitter.ReadBool();
var Buzzer_stop = splitter.ReadBool();
var DECHARGE = splitter.ReadBool();
var MEM_DECHARGE = splitter.ReadBool();
var Compteur_demande_coupure_batterie = splitter.ReadUInt();
var Compteur_demande_coupure_totale = splitter.ReadUInt();
var S_PowRelay = splitter.ReadBool();
var S_ChaRelay = splitter.ReadBool();
var S_BatRelay1 = splitter.ReadBool();
var S_BatRelay_State = splitter.ReadBool();
var Flag_decharge = splitter.ReadBool();
return new(VB1, VB2, VB3, VB4, VB5, VB6, VBat, VBmin, VBmax, Curr, Power, Energy, Temp_alim, Temp_cha, Temp_bat, DF_TEMP_ALIM, MEM_DF_TEMP_ALIM, DF_TEMP_BAT, MEM_DF_TEMP_BAT, DF_TEMP_CHA, MEM_DF_TEMP_CHA, DF_V_INCOHERENT, DF_BAD_CELL, DF_OVERCURRENT, DF_OVERCURRENT_STOP, DF_STOP_GENERAL, DF_GENERAL, DF_CELL_OVERVOLTAGE, MEM_DF_CELL_OVERVOLTAGE, DF_UNBALANCE, MEM_DF_UNBALANCE, Buzzer_stop, DECHARGE, MEM_DECHARGE, Compteur_demande_coupure_batterie, Compteur_demande_coupure_totale, S_PowRelay, S_ChaRelay, S_BatRelay1, S_BatRelay_State, Flag_decharge);
}
}