laatzen/Common/CommonConsole/Program.cs
2024-01-31 16:31:42 +01:00

179 lines
6.9 KiB
C#

namespace CommonConsole
{
using OmniPlus;
using OmniPlus.Connections;
using OmniPlus.Features;
using OmniPlus.Features.Enums;
using System;
using System.Linq;
using System.Text;
public static class Program
{
public static void Main()
{
var template = new byte[] { (byte)'F', (byte)'a', (byte)'c', (byte)'t', (byte)'o', (byte)'r', (byte)'y' };
var request = default(byte[]);
var response = default(byte[]);
var ssss = new byte[2];
var iiii = new byte[2];
var cccc = new byte[2];
var vvvv = new byte[2];
var connection = new OmniUniProConnection("COM16");
connection.StateChenged += state =>
{
Console.WriteLine(state);
};
connection.Open();
Console.WriteLine($"{"Sealed",25}: {connection.ViewFactorySeal().Sealed}");
Console.WriteLine();
/// 1. ssss: (seconds active >> 8) & 0xFFFF
request = new byte[] { 0xFD, 0x3D };
Console.WriteLine($"1.{"View seconds active",23}:");
Console.WriteLine($"{"Request",25}: {BitConverter.ToString(request)}");
response = connection.Send(request);
Console.WriteLine($"{"Response",25}: {BitConverter.ToString(response)}");
Console.WriteLine($"{"Status",25}: {(Status)response[0]}");
if (response != null && response.Length == 5 && response[0] == 0x01)
{
var secondsActive = BitConverter.ToUInt32(response, 1);
Console.WriteLine($"{"UInt32",25}: {secondsActive}");
secondsActive = (secondsActive >> 8) & 0xFFFF;
Console.WriteLine($"{"(x >> 8) & 0xFFFF",25}: {secondsActive}");
ssss = BitConverter.GetBytes((ushort)secondsActive);
Console.WriteLine($"{"SSSS",25}: {BitConverter.ToString(ssss)}");
}
Console.WriteLine();
/// 2. iiii: crc16_iperl from the Factory ID
request = new byte[] { 0x01 };
Console.WriteLine($"2.{"View Factory ID",23}:");
Console.WriteLine($"{"Request",25}: {BitConverter.ToString(request)}");
response = connection.Send(request);
Console.WriteLine($"{"Response",25}: {BitConverter.ToString(response)}");
Console.WriteLine($"{"Status",25}: {(Status)response[0]}");
if (response != null && response.Length > 0 && response[0] == 0x01)
{
var length = response.Length - 1;
iiii = response.CalculateCRC16(1, (ushort)length);
Console.WriteLine($"{"CRC_16_iPERL",25}: {BitConverter.ToString(iiii)}");
Console.WriteLine($"{"IIII",25}: {BitConverter.ToString(iiii)}");
}
Console.WriteLine();
/// 3. cccc: customer text little endian
request = new byte[] { 0x07 };
Console.WriteLine($"3.{"View customer text",23}:");
Console.WriteLine($"{"Request",25}: {BitConverter.ToString(request)}");
response = connection.Send(request);
Console.WriteLine($"{"Response",25}: {BitConverter.ToString(response)}");
Console.WriteLine($"{"Status",25}: {(Status)response[0]}");
if (response != null && response.Length > 0 && response[0] == 0x01)
{
var length = response.Length - 1;
var temp = new byte[template.Length];
template.CopyTo(temp, 0);
// TODO: if not working try ignoring the '\0' charachters
Array.Copy(response, 1, temp, 0, Math.Min(template.Length, length));
Console.WriteLine($"{"Text",25}: {Encoding.ASCII.GetString(temp, 0, 4)}");
var bits1 = temp[0].GetBits();
var bits2 = temp[1].GetBits();
var bits3 = temp[2].GetBits();
var bits4 = temp[3].GetBits();
Console.WriteLine($"{"Bits",25}: {string.Join("", bits1)} {string.Join("", bits2)} {string.Join("", bits3)} {string.Join("", bits4)}");
var firstByteBits = new byte[8];
var firstI = ((byte)bits1.Count(x => x == 1)).GetBits();
var firstII = ((byte)bits2.Count(x => x == 1)).GetBits();
Array.Copy(firstI, 0, firstByteBits, 4, 4);
Array.Copy(firstII, 0, firstByteBits, 0, 4);
var secondByteBits = new byte[8];
var secondI = ((byte)bits3.Count(x => x == 1)).GetBits();
var secondII = ((byte)bits4.Count(x => x == 1)).GetBits();
Array.Copy(secondI, 0, secondByteBits, 4, 4);
Array.Copy(secondII, 0, secondByteBits, 0, 4);
cccc[0] = firstByteBits.ToUint8();
cccc[1] = secondByteBits.ToUint8();
Console.WriteLine($"{"CCCC",25}: {BitConverter.ToString(cccc)}");
}
Console.WriteLine();
/// 4. vvvv: reading preset [3-6]
request = new byte[] { 0x13 };
Console.WriteLine($"4.{"View reading preset",23}:");
Console.WriteLine($"{"Request",25}: {BitConverter.ToString(request)}");
response = connection.Send(request);
Console.WriteLine($"{"Response",25}: {BitConverter.ToString(response)}");
Console.WriteLine($"{"Status",25}: {(Status)response[0]}");
if (response != null && response.Length > 6 && response[0] == 0x01)
{
var bytes = new byte[4];
bytes[3] = response[3];
bytes[2] = response[4];
bytes[1] = response[5];
bytes[0] = response[6];
var _uint = BitConverter.ToUInt32(bytes, 0);
Console.WriteLine($"{"UInt32",25}: {_uint}");
var mod11 = BitConverter.ToUInt32(bytes, 0) % 11;
Console.WriteLine($"{"UInt32 % 11",25}: {mod11}");
vvvv = BitConverter.GetBytes((ushort)mod11);
Console.WriteLine($"{"VVVV",25}: {BitConverter.ToString(vvvv)}");
}
Console.WriteLine();
request = new byte[11];
request[0] = 0xFD;
request[1] = 0x64;
request[2] = 0x00;
Array.Copy(ssss, 0, request, 3, 2);
Array.Copy(iiii, 0, request, 5, 2);
Array.Copy(cccc, 0, request, 7, 2);
Array.Copy(vvvv, 0, request, 9, 2);
response = connection.Send(request);
Console.WriteLine($"{"Request",25}: {BitConverter.ToString(request)}");
Console.WriteLine($"{"Response",25}: {(Status)response[0]}");
Console.WriteLine();
Console.WriteLine($"{"Sealed",25}: {connection.ViewFactorySeal().Sealed}");
Console.WriteLine();
connection.Close();
}
}
}