Files
PR_PRM_GUI/LFP_Manager_PRM/Function/csCanFwUpdateFunction.cs
2026-02-11 10:10:43 +09:00

276 lines
7.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LFP_Manager.Function
{
// 1. Define the data type
public struct PACKET_HEADER_DN
{
public byte Rsvd; // 3
public byte PR; // 3 Priority
public byte FC; // 4 Function Code
public byte NO; // 8 Number
public byte SID; // 7 Source ID
public byte DID; // 7 Destination ID
}
public struct PACKET_DN
{
public UInt32 hdr; // Header
public byte[] data; // Data
}
class csCanFwUpdateFunction
{
// Function Code Define
public const int DL_START_CODE = 0; // Start Fw Update
public const int DL_SECTOR_ERASE_CODE = 1; // Sector Erase Code
public const int DL_SET_ADDRESS_CODE = 2; // Flash Address Set Code
public const int DL_READ_DATA_CODE = 3; // Flash Data Read Code
public const int DL_WRITE_DATA_CODE = 4; // Flash Data Write Code
public const int DL_WRITE_DATA_CSUM_CODE = 5; // Flash Data Write Checksum Code
public const int DL_IMAGE_CSUM_CODE = 6; // Fw Image Checksum Code
public const int DL_RESTART_CODE = 7; // Restart
public static PACKET_HEADER_DN CovertPtoH(UInt32 id)
{
PACKET_HEADER_DN hdr = new PACKET_HEADER_DN();
hdr.PR = (byte)((id >> 26) & 0x07);
hdr.FC = (byte)((id >> 22) & 0x07);
hdr.NO = (byte)((id >> 14) & 0xFF);
hdr.SID = (byte)((id >> 7) & 0x7F);
hdr.DID = (byte)((id >> 0) & 0x7F);
return hdr;
}
public static UInt32 CovertHtoP(PACKET_HEADER_DN hdr)
{
UInt32 Packet = 0;
Packet = (((UInt32)hdr.PR << 26)
| ((UInt32)hdr.FC << 22)
| ((UInt32)hdr.NO << 14)
| ((UInt32)hdr.SID << 7)
| ((UInt32)hdr.DID << 0)
);
return Packet;
}
unsafe public static PACKET_DN FwUpdateStartPacket(UInt32 dev_id, byte[] fwver, UInt32 fwlen)
{
PACKET_DN result;
PACKET_HEADER_DN hdr;
result = new PACKET_DN();
result.data = new byte[8];
hdr = new PACKET_HEADER_DN();
hdr.PR = 4;
hdr.FC = DL_START_CODE;
hdr.NO = 0;
hdr.SID = 0;
hdr.DID = (byte)dev_id;
result.hdr = CovertHtoP(hdr);
result.data[0] = fwver[0];
result.data[1] = fwver[1];
result.data[2] = fwver[2];
result.data[3] = fwver[3];
result.data[4] = (byte)(fwlen >> 24);
result.data[5] = (byte)(fwlen >> 16);
result.data[6] = (byte)(fwlen >> 8);
result.data[7] = (byte)(fwlen >> 0);
return result;
}
unsafe public static PACKET_DN SectorErasePacket(UInt32 dev_id, UInt32 fAddr)
{
PACKET_DN result;
PACKET_HEADER_DN hdr;
result = new PACKET_DN();
result.data = new byte[8];
hdr = new PACKET_HEADER_DN();
hdr.PR = 4;
hdr.FC = DL_SECTOR_ERASE_CODE;
hdr.NO = 0;
hdr.SID = 0;
hdr.DID = (byte)dev_id;
result.hdr = CovertHtoP(hdr);
result.data[0] = (byte)(fAddr >> 24);
result.data[1] = (byte)(fAddr >> 16);
result.data[2] = (byte)(fAddr >> 8);
result.data[3] = (byte)(fAddr >> 0);
result.data[4] = 0;
result.data[5] = 0;
result.data[6] = 0;
result.data[7] = 0;
return result;
}
unsafe public static PACKET_DN SetAddrPacket(UInt32 dev_id, UInt32 sAddr, UInt32 sLen)
{
PACKET_DN result;
PACKET_HEADER_DN hdr;
result = new PACKET_DN();
result.data = new byte[8];
hdr = new PACKET_HEADER_DN();
hdr.PR = 4;
hdr.FC = DL_SET_ADDRESS_CODE;
hdr.NO = 0;
hdr.SID = 0;
hdr.DID = (byte)dev_id;
result.hdr = CovertHtoP(hdr);
result.data[0] = (byte)(sAddr >> 24);
result.data[1] = (byte)(sAddr >> 16);
result.data[2] = (byte)(sAddr >> 8);
result.data[3] = (byte)(sAddr >> 0);
result.data[4] = (byte)(sLen >> 24);
result.data[5] = (byte)(sLen >> 16);
result.data[6] = (byte)(sLen >> 8);
result.data[7] = (byte)(sLen >> 0);
return result;
}
unsafe public static PACKET_DN WritePacket(UInt32 dev_id, byte dno, byte[] data)
{
PACKET_DN result;
PACKET_HEADER_DN hdr;
result = new PACKET_DN();
result.data = new byte[8];
hdr = new PACKET_HEADER_DN();
hdr.PR = 4;
hdr.FC = DL_WRITE_DATA_CODE;
hdr.NO = dno;
hdr.SID = 0;
hdr.DID = (byte)dev_id;
result.hdr = CovertHtoP(hdr);
for (int i = 0; i < 8; i++)
{
result.data[i] = data[i];
}
return result;
}
unsafe public static PACKET_DN WriteChkSumPacket(UInt32 dev_id, UInt32 waddr, UInt32 csum)
{
PACKET_DN result;
PACKET_HEADER_DN hdr;
result = new PACKET_DN();
result.data = new byte[8];
hdr = new PACKET_HEADER_DN();
hdr.PR = 4;
hdr.FC = DL_WRITE_DATA_CSUM_CODE;
hdr.NO = 0;
hdr.SID = 0;
hdr.DID = (byte)dev_id;
result.hdr = CovertHtoP(hdr);
result.data[0] = (byte)(waddr >> 24);
result.data[1] = (byte)(waddr >> 16);
result.data[2] = (byte)(waddr >> 8);
result.data[3] = (byte)(waddr >> 0);
result.data[4] = (byte)(csum >> 24);
result.data[5] = (byte)(csum >> 16);
result.data[6] = (byte)(csum >> 8);
result.data[7] = (byte)(csum >> 0);
return result;
}
unsafe public static PACKET_DN FwImageChkSumPacket(UInt32 dev_id, UInt32 fwlen, UInt32 csum)
{
PACKET_DN result;
PACKET_HEADER_DN hdr;
result = new PACKET_DN();
result.data = new byte[8];
hdr = new PACKET_HEADER_DN();
hdr.PR = 4;
hdr.FC = DL_IMAGE_CSUM_CODE;
hdr.NO = 0;
hdr.SID = 0;
hdr.DID = (byte)dev_id;
result.hdr = CovertHtoP(hdr);
result.data[0] = (byte)(fwlen >> 24);
result.data[1] = (byte)(fwlen >> 16);
result.data[2] = (byte)(fwlen >> 8);
result.data[3] = (byte)(fwlen >> 0);
result.data[4] = (byte)(csum >> 24);
result.data[5] = (byte)(csum >> 16);
result.data[6] = (byte)(csum >> 8);
result.data[7] = (byte)(csum >> 0);
return result;
}
unsafe public static PACKET_DN UpdateRestartPacket(UInt32 dev_id, byte option)
{
PACKET_DN result;
PACKET_HEADER_DN hdr;
result = new PACKET_DN();
result.data = new byte[8];
hdr = new PACKET_HEADER_DN();
hdr.PR = 4;
hdr.FC = DL_RESTART_CODE;
hdr.NO = 0;
hdr.SID = 0;
hdr.DID = (byte)dev_id;
result.hdr = CovertHtoP(hdr);
result.data[0] = option;
result.data[1] = 0x00;
result.data[2] = 0x00;
result.data[3] = 0x00;
result.data[4] = 0x00;
result.data[5] = 0x00;
result.data[6] = 0x00;
result.data[7] = 0x00;
return result;
}
}
}