using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.Interfaces.Ports.PortCore; using Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments; using Xylem.Common.Hardware.Interfaces.Ports.SerialPorts; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore; using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; namespace IrdaDemo { internal class Program { private static readonly String CurrentConfigDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ProgramConfig.GenesisBaseFolder); private const String CurrentConfigFile = ProgramConfig.NlogConfig; private static void Main(string[] args) { //for (int i = 1; i <= 10; i++) //{ // a.ReadRegister(""); //} ////MeterBatch mb = new MeterBatch(); ////var meter = new GenesisMeter(); ////meter.SetupFromConfigFile(1, false); ////mb.AddMeter(meter); ////meter.SyncStreamingBuffer(SyncMarkRecord.DecodeEveryPackage); ////Console.ReadLine(); ////2018-12-12 16:13:08.5276 | Debug | Slot:0, Port:COM240, Protocol:Request, Type:IrDA - SentData(0F-01-04-03-00-42-46-45-41-43-33-43-39-44-42-32-33) ////2018 - 12 - 12 16:13:08.5366 | Debug | Slot:0, Port: COM240, Protocol: Request, Type: IrDA - DecodeRecord(10 - 00 - 00 - 03 - 00 - 42 - 46 - 45 - 41 - 43 - 33 - 43 - 39 - 44 - 42 - 32 - 33) //Console.WriteLine("Enter Comport Number"); //var result = $"COM{Console.ReadLine()}"; //Console.WriteLine("Enter Password"); //var password = Console.ReadLine(); ////Console.WriteLine("Press 1 for PcbID error"); ////Console.WriteLine("Press 2 for freeze meter with write/read"); ////Console.WriteLine("Press 3 for 00-00-00-1A write error"); //////var meter = new GenesisMeter(0, ////// new PortConfig() ////// {BaudRate = 115200, PortName = result, Type = typeof(IrdaSerialPort).ToString()}, null); ////switch (Console.ReadLine()) ////{ //// case "1": //// testPcb(result); //// break; //// case "2": //// testWriteRead(result, password); //// break; //// case "3": // testWriteError(result, password); //// break; //// default: //// Console.WriteLine("unknown test number"); //// break; ////} //var applicationDataPath = Path.Combine(CurrentConfigDir, CurrentConfigFile); //var currentApplicationFolder = // Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), // CurrentConfigFile); //if (File.Exists(currentApplicationFolder)) //{ // Console.WriteLine(currentApplicationFolder); //} //if (File.Exists(applicationDataPath)) //{ // Console.WriteLine(applicationDataPath); //} Console.WriteLine("done"); Console.ReadLine(); } private static void testWriteError(string comport, string password) { using (var meterBatch = new MeterBatch()) { var meter = new GenesisMeter(0, new PortConfig() { PortName = comport, Type = typeof(IrdaSerialPort).ToString() }, null); meterBatch.AddMeter(meter); if (!string.IsNullOrEmpty(password)) { meter.Login(password); } else { meter.Login(); } Console.WriteLine(meter.ReadRegister(Register.Genesisflow.LedMode).Length > 0 ? "connected" : "not connected"); var input = "Y"; meter.RequestPort.OnRawRecordReceived += delegate (Object sender, BasePortDataEventArgs args) { var data = args.GetData(); if (data.GetType() == typeof(List)) { Console.WriteLine($"Date{args.GetReceivedTime().ToString("HH:mm:ss:ffff")}; Meter>PC OnRawRecordReceived={BitConverter.ToString(((List)data).ToArray())}"); } }; meter.RequestPort.OnRawRecordSendOut += delegate (Object sender, BasePortDataEventArgs args) { var data = args.GetData(); if (data.GetType() == typeof(List)) { Console.WriteLine($"Date{args.GetReceivedTime().ToString("HH:mm:ss:ffff")}; PC>Meter OnRawRecordSendOut={BitConverter.ToString(((List)data).ToArray())}"); } }; while (input.ToUpper() == "Y") { Console.Clear(); var value = new Byte[] { 0x03, 0x00, 0x00, 0x00 }; WriteAndLog(meter, value); value = new Byte[] { 0x06, 0x00, 0x00, 0x00 }; WriteAndLog(meter, value); value = new Byte[] { 0x00, 0x00, 0x00, 0x00 }; WriteAndLog(meter, value); Console.WriteLine($"retry? (Y/N)"); input = Console.ReadLine(); } } } private static void WriteAndLog(GenesisMeter meter, Byte[] value) { Console.WriteLine($"####################{BitConverter.ToString(value)}##################################"); Console.WriteLine($"Date{DateTimeOffset.UtcNow.ToString("HH:mm:ss:ffff")}; Write={BitConverter.ToString(value)}"); var start = DateTimeOffset.UtcNow; meter.WriteRegister(Register.Genesisflow.LedMode, value); var resultRead = meter.ReadRegister(Register.Genesisflow.LedMode); if (resultRead.Length == 0) { Console.WriteLine($"!!!!!!!!!!ReadError!!!!!!!!"); } else if (resultRead[0] != value[0]) { Console.WriteLine($"!!!!!!!!!!WriteError!!!!!!!!"); } var end = DateTimeOffset.UtcNow; Console.WriteLine($"Date{DateTimeOffset.UtcNow.ToString("HH:mm:ss:ffff")}; read ={BitConverter.ToString(resultRead)}"); Console.WriteLine($"Date{DateTimeOffset.UtcNow.ToString("HH:mm:ss:ffff")}; duration in ms {(end - start).TotalMilliseconds}"); Console.WriteLine($"########################################################"); } private static void testPcb(string comport) { using (var meterBatch = new MeterBatch()) { var meter = new GenesisMeter(0, new PortConfig() { PortName = comport, Type = typeof(IrdaSerialPort).ToString() }, null); meterBatch.AddMeter(meter); Console.WriteLine($"read just pcb: {meter.GetPcbId()}"); Console.WriteLine($"read just pcb: {meter.GetPcbId()}"); Console.WriteLine($"read just pcb: {meter.GetPcbId()}"); Console.WriteLine($"read Register.Configexchange.Privilege"); meter.ReadRegister(Register.Configexchange.Privilege); Console.WriteLine($"read just pcb: {meter.GetPcbId()}"); } } private static void testWriteRead(string comport, string password) { using (var meterBatch = new MeterBatch()) { var meter = new GenesisMeter(0, new PortConfig() { PortName = comport, Type = typeof(IrdaSerialPort).ToString() }, null); meterBatch.AddMeter(meter); if (!string.IsNullOrEmpty(password)) { meter.Login(password); } else { meter.Login(); } Console.WriteLine(meter.ReadRegister(Register.Genesisflow.LedMode).Length > 0 ? "connected" : "not connected"); var initValue = meter.ReadRegister(Register.Genesisflow.CalFactor1); for (int i = 0; i < 500; i++) { meter.ReadRegister(Register.Genesisflow.CalFactor1); var result = meter.WriteRegister(Register.Genesisflow.CalFactor1, initValue, checkRegister: true); Console.WriteLine($"try nr{i} succeed {result}"); } } } } }