276 lines
7.9 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|