Untitled
unknown
csharp
a year ago
1.9 kB
5
Indexable
private static string ParseManometerData(string dataReceived, out int checksum, out int computedChecksum, out string io)
{
string data;
io = "0"; //RandomGenerator.Next(0,4).ToString(CultureInfo.InvariantCulture);
checksum = int.MinValue;
computedChecksum = int.MinValue;
// Regex validates following inputformats that can be received from the device:
//
// "data\t\r" --> Reaction from Manometer without Checksum
// "data\t*checksum\r" --> Reaction from Manometer with checksum. data may be empty.
// "data\t*checksum\rIO\n" --> Reaction with new Manometer wireless connection framework.
var regexStr = "^(?<Data>.*?)[\t|\r]{1,2}(\\*(?<Checksum>[^\r]+)\r)?(?<io>[0-9A-F]{0,2}?)[\r|\n]?$";
var m = Regex.Match(dataReceived, regexStr, RegexOptions.Compiled);
if (m.Success)
{
data = m.Groups["Data"].ToString();
io = m.Groups["io"].ToString();
CommunicationLogger.Debug($"Data received : {dataReceived.Replace("\r", "[CR]").Replace("\n", "[LF]")}");
CommunicationLogger.Debug($"Data : {data}");
CommunicationLogger.Debug($"Checksum : {m.Groups["Checksum"]}");
CommunicationLogger.Debug($"IO status : {io}\n");
try
{
var requiresChecksumValidation = m.Groups["Checksum"].Success;
if (requiresChecksumValidation)
{
checksum = int.Parse(m.Groups["Checksum"].ToString(), CultureInfo.InvariantCulture);
computedChecksum = ComputeChecksum(data + "\t*");
}
}
catch (Exception)
{
throw new InvalidDataException("Invalid manometer data received.");
}
}
else
{
throw new InvalidDataException("Invalid manometer data received.");
}
return data;
}
Editor is loading...
Leave a Comment