179 lines
6.9 KiB
C#
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();
|
|
}
|
|
}
|
|
} |