Untitled

 avatar
unknown
csharp
5 months ago
1.9 kB
4
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