using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using DevExpress.XtraEditors; using LFP_Manager.DataStructure; using LFP_Manager.Function; using LFP_Manager.Controls; using LFP_Manager.Utils; namespace LFP_Manager.Forms { public delegate void InvDataUpdateEvent(object sendor); public delegate void InvDateCmdEvent(int sId, int mode, int index, int flag, ref DeviceInforation wData); public delegate void InvDateCmdEventBySnmp(int mode, string wData); public partial class fmxInventoryConfig : DevExpress.XtraEditors.XtraForm { #region VARIABLES int SystemId = 0; int CmdResult = 0; CommConfig Config; DeviceSystemData SystemData; DeviceInforation wInvData; public event InvDataUpdateEvent OnUpdate = null; public event InvDateCmdEvent OnCommand = null; public event SendDataUartEvent OnSendUartData = null; #endregion #region CONSTRUCTORS public fmxInventoryConfig() { InitializeComponent(); } public fmxInventoryConfig(int sId, ref CommConfig aConfig, ref DeviceSystemData aSystemData) { InitializeComponent(); SystemId = sId; SystemData = aSystemData; Config = aConfig; switch (Config.CommType) { case csConstData.CommType.COMM_UART: nManuDate.Enabled = true; BtnManuDateWrite.Enabled = true; nSerialNo.Enabled = true; BtnSerialNoWrite.Enabled = true; break; case csConstData.CommType.COMM_RS485: nManuDate.Enabled = false; BtnManuDateWrite.Enabled = false; nSerialNo.Enabled = false; BtnSerialNoWrite.Enabled = false; break; case csConstData.CommType.COMM_SNMP: nManuDate.Enabled = false; BtnManuDateWrite.Enabled = false; nSerialNo.Enabled = false; BtnSerialNoWrite.Enabled = false; break; default: break; } tmrDisplay.Enabled = true; } #endregion #region INIT DATA void InitData() { wInvData = new DeviceInforation { BMS_SN = new byte[16], Module_SN = new byte[24] }; //22.06.30 Byul 32->16, 32->24 } #endregion #region DISPLAY DATA private void DisplayValue() { // Manufacture Date lbMDate.Text = String.Format("Manufacture Date: {0}", SystemData.Information.ManufacturingDate); // Device Address% lbSerialNo.Text = String.Format("Serial No: {0}", SystemData.Information.HwSerialNumber); } #endregion #region TIMER ENVENT private void tmrDisplay_Tick(object sender, EventArgs e) { DisplayValue(); if (OnUpdate != null) { OnUpdate(this); } } #endregion #region PUBLIC FUCTIONS public void UpdateData(ref DeviceSystemData aSystemData) { SystemData = aSystemData; } public void RecvData(string result, bool error) { Cmd_Result(result, error); } public void Cmd_Result(string result, bool error) { if (this.InvokeRequired) { this.Invoke(new MethodInvoker(delegate () { if (error) MessageBox.Show(result, "Result", MessageBoxButtons.OK, MessageBoxIcon.Error); else MessageBox.Show(result, "Result", MessageBoxButtons.OK, MessageBoxIcon.Information); })); } else { if (error) MessageBox.Show(result, "Result", MessageBoxButtons.OK, MessageBoxIcon.Error); else MessageBox.Show(result, "Result", MessageBoxButtons.OK, MessageBoxIcon.Information); } } #endregion #region BUTTON EVENT private void btnClose_Click(object sender, EventArgs e) { Close(); } private void BtnManuDateWrite_Click(object sender, EventArgs e) { if ((nManuDate.Text == "") || (nManuDate.Text.Length > 8)) { MessageBox.Show("Check Manufacture Date Format", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } byte[] crc; ushort addr = 0x00A3; int i = 0; // Normal mode --> Bootloader mode byte[] sdata = new byte[7 + 8 + 2]; sdata[i++] = (byte)SystemId; // Dev Address sdata[i++] = 0x10; // Function Code sdata[i++] = (byte)(addr >> 8); // Address H sdata[i++] = (byte)(addr >> 0); // Address L sdata[i++] = 0x00; // Number of Register H sdata[i++] = 0x04; // Number of Register L sdata[i++] = 0x08; // Byte Count string str = nManuDate.Text; byte[] aData = Encoding.UTF8.GetBytes(str); for (int j = 0; j < 8; j++) { sdata[i++] = aData[j]; } crc = csSerialCommFunction.GetCRC(sdata, i); sdata[i++] = crc[1]; // CRCH sdata[i++] = crc[0]; // CRCL OnSendUartData?.Invoke(addr, sdata, false, 1); } private void BtnSerialNoWrite_Click(object sender, EventArgs e) { if ((nSerialNo.Text == "") || (nSerialNo.Text.Length > 16)) { MessageBox.Show("Check Serial Number format", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } byte[] crc; ushort addr = 0x0078; int i = 0; // Normal mode --> Bootloader mode byte[] sdata = new byte[7 + 16 + 2]; sdata[i++] = (byte)SystemId; // Dev Address sdata[i++] = 0x10; // Function Code sdata[i++] = (byte)(addr >> 8); // Address H sdata[i++] = (byte)(addr >> 0); // Address L sdata[i++] = 0x00; // Number of Register H sdata[i++] = 0x08; // Number of Register L sdata[i++] = 0x10; // Byte Count string str = nSerialNo.Text; byte[] aData = Encoding.UTF8.GetBytes(str); for (int j = 0; j < aData.Length; j++) { sdata[i + j] = aData[j]; } i += 16; crc = csSerialCommFunction.GetCRC(sdata, i); sdata[i++] = crc[1]; // CRCH sdata[i++] = crc[0]; // CRCL OnSendUartData?.Invoke(addr, sdata, false, 1); } #endregion } }