You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

966 lines
31 KiB

3 years ago
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
namespace EC.AutoWeightServer.IfManager.LedZK
{
public class LedZKSDK
{
#region
public class bx5k_err
{
public const int ERR_NO = 0; //No Error
public const int ERR_OUTOFGROUP = 1; //Command Group Error
public const int ERR_NOCMD = 2; //Command Not Found
public const int ERR_BUSY = 3; //The Controller is busy now
public const int ERR_MEMORYVOLUME = 4; //Out of the Memory Volume
public const int ERR_CHECKSUM = 5; //CRC16 Checksum Error
public const int ERR_FILENOTEXIST = 6; //File Not Exist
public const int ERR_FLASH = 7;//Flash Access Error
public const int ERR_FILE_DOWNLOAD = 8; //File Download Error
public const int ERR_FILE_NAME = 9; //Filename Error
public const int ERR_FILE_TYPE = 10;//File type Error
public const int ERR_FILE_CRC16 = 11;//File CRC16 Error
public const int ERR_FONT_NOT_EXIST = 12;//Font Library Not Exist
public const int ERR_FIRMWARE_TYPE = 13;//Firmware Type Error (Check the controller type)
public const int ERR_DATE_TIME_FORMAT = 14;//Date Time format error
public const int ERR_FILE_EXIST = 15;//File Exist for File overwrite
public const int ERR_FILE_BLOCK_NUM = 16;//File block number error
public const int ERR_COMMUNICATE = 100;//通信失败
public const int ERR_PROTOCOL = 101;//协议数据不正确
public const int ERR_TIMEOUT = 102;//通信超时
public const int ERR_NETCLOSE = 103;//通信断开
public const int ERR_INVALID_HAND = 104;//无效句柄
public const int ERR_PARAMETER = 105;//参数错误
public const int ERR_SHOULDREPEAT = 106;//需要重复上次数据包
public const int ERR_FILE = 107;//无效文件
}
#endregion
//串口停止位
public enum serial_stopbits : byte
{
COM_ONESTOPBIT = 0,
COM_ONE5STOPBITS = 1,
COM_TWOSTOPBITS = 2,
}
//串口校验模式
public enum serial_parity : byte
{
COM_NOPARITY = 0,
COM_ODDPARITY = 1,
COM_EVENPARITY = 2,
COM_MARKPARITY = 3,
COM_SPACEPARITY = 4,
}
//串口数据位
public enum serial_databits : byte
{
COM_4BITS = 4,
COM_5BITS = 5,
COM_6BITS = 6,
COM_7BITS = 7,
COM_8BITS = 8,
}
//控制器类型
public enum bx_5k_card_type : byte
{
BX_5K1 = 0x51,
BX_5K2 = 0x58,
BX_5MK2 = 0x53,
BX_5MK1 = 0x54,
BX_5K1Q_YY = 0x5c,
BX_Any = 0xFE,
BX_6K1 = 0x61,
BX_6K2 = 0x62,
BX_6K3 = 0x63,
BX_6K1_YY = 0x64,
BX_6K2_YY = 0x65,
BX_6K3_YY = 0x66,
BX_6K1_4G = 0x67,
BX_6K2_4G = 0x68,
}
//-------区域格式------
// area header | data |
//---------------------
//节目内区域定义
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct bx_5k_area_header
{
public byte AreaType;
public ushort AreaX;
public ushort AreaY;
public ushort AreaWidth;
public ushort AreaHeight;
public byte DynamicAreaLoc;
public byte Lines_sizes;
public byte RunMode;
public short Timeout;
public byte Reserved1;
public byte Reserved2;
public byte Reserved3;
public byte SingleLine;
public byte NewLine;
public byte DisplayMode;
public byte ExitMode;
public byte Speed;
public byte StayTime;
public int DataLen;
}
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct bx_5k_sound
{
public byte StoreFlag;
public byte SoundPerson;//一个字节
public byte SoundVolum;
public byte SoundSpeed;
public byte SoundDataMode;
public int SoundReplayTimes;
public int SoundReplayDelay;
public byte SoundReservedParaLen;
public int SoundDataLen;
}
[System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.StdCall)]
public delegate void CallBackClientClose(uint hand, int err);
//初始化动态库
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern void InitSdk(byte minorVer, byte majorVer);
//释放动态库
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern void ReleaseSdk();
//创建广播通讯模式
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern uint CreateBroadCast(byte[] broad_ip, uint broad_port, bx_5k_card_type card_type, byte[] barcode, byte Option, int mode);
//创建固定IP通讯模式
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern uint CreateClient(byte[] led_ip, uint led_port, bx_5k_card_type card_type, int tmout_sec, int mode, CallBackClientClose pCloseFunc);
//创建TCP Modbus通讯
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern uint CreateTcpModbus(byte[] led_ip, bx_5k_card_type card_type, CallBackClientClose pCloseFunc);
//创建串口通讯
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern uint CreateComClient(byte com, uint baudrate, bx_5k_card_type card_type, int mode, ushort ScreenID);
//创建串口Modbus通讯
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern uint CreateComModbus(byte com, uint baudrate, serial_parity Parity, serial_databits DataBits,
serial_stopbits StopBits, bx_5k_card_type card_type, ushort ScreenID);
//销毁通讯
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern void Destroy(uint dwHand);
//设置通讯超时
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern void SetTimeout(uint dwHand, uint nSec);
//ping
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int CON_PING(uint dwHand);
//复位
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int CON_Reset(uint dwHand);
//
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int CON_ControllerStatus(uint dwHand, byte[] pStatus, ref ushort len);
//查询字库信息
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int CON_CheckCurrentFont(uint dwHand, byte[] fontStatus, ref ushort len);
//回读客户信息
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int CON_CheckCurrentCustomer(uint dwHand, byte[] CustomerStatus, ref ushort len);
//参数回读
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int CON_ReadScreen(uint dwHand, byte[] ScreenStatus, ref ushort len);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int CON_SytemClockCorrect(uint dwHand);
//查询固件状态
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int CON_CheckCurrentFirmware(uint dwHand, byte[] FirmwareName, byte[] FirmwareVersion, byte[] FirmwareDateTime);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int OFS_SendFirmWareData(uint dwHand, byte overwrite, byte[] pFileName, byte[] FirmWareData, int FirmWareDataLen, CloseFunc pCloseFunc);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int CON_FirmwareActivate(uint dwHand, byte[] FirmwareName);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int CON_SetScreenID(uint dwHand, ushort newScreenID);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int CON_ReadScreenID(uint dwHand, ref ushort pScreenID);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SCREEN_ForceOnOff(uint dwHand, byte OnOffFlag);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SCREEN_TimeTurnOnOff(uint dwHand, byte[] pTimer, int nGroup);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SCREEN_SetBrightness(uint dwHand, byte BrightnessType, byte CurrentBrightness, byte[] BrightnessValue);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SCREEN_SetWaitTime(uint dwHand, byte WaitTime);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SCREEN_LockProgram(uint dwHand, byte LockFlag, byte StoreMode, byte[] ProgramFileName);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SCREEN_DelDynamicArea(uint dwHand, byte DeleteAreaId);
//动态区
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SCREEN_SendDynamicArea(uint dwHand, bx_5k_area_header header, ushort TextLen, byte[] AreaText);
//语音
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SCREEN_SendSound(uint dwHand, bx_5k_sound sound, int TextLen, byte[] AreaText);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SCREEN_SendSoundDynamicArea(uint dwHand, bx_5k_area_header header, ushort TextLen, byte[] AreaText, byte SoundMode, byte SoundPerson, byte SoundVolume, byte SoundSpeed, int sound_len, byte[] sounddata);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SCREEN_Test(uint dwHand, byte TestTime);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SCREEN_CancelTimeOnOff(uint dwHand);
#region 设置特殊动态区动态
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int BX5MK_SetSpecialAppDynamic(uint dwHand, ushort AreaX, ushort AreaY, ushort AreaW, ushort AreaH,
byte DataType, byte Pagetotal, byte RunState, ushort Timeout, byte SingleLine, byte Lines_sizes, byte NewLine, ushort StayTime);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int BX5MK_SendPageData(uint dwHand, byte PageNum, ushort PageDataLen, byte[] PageData);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int BX5MK_SendLatticeMessage(uint dwHand, byte BlockFlag, ushort BlockAddr, byte[] BlockData, ushort BlockDataLen);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int BX5MK_DelSpecialAppDynamic(uint dwHand);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int BX5MK_SetIPAddress(uint dwHand, byte ConnnectMode, byte[] ip, byte[] SubnetMask, byte[] Gateway, ushort port,
byte ServerMode, byte[] ServerIPAddress, ushort ServerPort, byte[] ServerAccessPassword, ushort HeartBeatInterval, byte[] NetID);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int BX5MK_SetMACAddress(uint dwHand, byte[] MAC);
//设置特殊动态区动态
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int BX5MK_SetSpecialAppDynamic(int dwHand, ushort AreaX, ushort AreaY, ushort AreaW, ushort AreaH, byte DataType, byte Pagetotal,
byte RunState, ushort Timeout, byte SingleLine, byte Lines_sizes, byte NewLine, ushort StayTime);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int BX5MK_WebSearch(uint dwHand, ref ushort Status, ref ushort Error, byte[] IP,
byte[] SubNetMask, byte[] Gate, ref ushort Port, byte[] Mac, byte[] NetID);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int BX5MK_DelPageData(uint dwHand, byte PageLog);
#endregion
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int OFS_Formatting(uint dwHand);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int OFS_DeleteFile(uint dwHand, ushort FileNumber, byte[] pFileNameList);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int OFS_BeginSendMultiFiles(uint dwHand);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int OFS_SendFile(uint dwHand, byte overwrite, byte[] pFilePath);
//发送节目
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int OFS_SendFileData(uint dwHand, byte overwrite, byte[] pFileName, ushort DisplayType, byte PlayTimes,
byte[] ProgramLife, byte ProgramWeek, byte ProgramTime, byte[] Period, byte AreaNum, byte[] AreaDataList, int AreaDataListLen);
//添加扫描
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int OFS_SendScanData(uint dwHand, byte overwrite, byte[] pFileName, byte[] ScanData, int ScanDataLen);
//添加字库
public delegate void CloseFunc(int total, int sendlen);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int OFS_SendFontData(uint dwHand, byte overwrite, byte[] pFileName, byte FontWidth, byte FontHeight,
byte[] LibData, int LibData_len, byte FontEncode, CloseFunc pCloseFunc);
//设置屏参
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int OFS_SendScreenData(uint dwHand, byte overwrite, byte[] pFileName, ushort Address, byte Baudrate,
ushort ScreenWith, ushort ScreenHeight, byte Color, byte MirrorMode, byte OE, byte DA, byte RowOrder, byte FreqPar,
byte OEAngle, byte CommTimeout, byte TipLanguage, byte LatticeMode);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int OFS_EndSendMultiFiles(uint dwHand);
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int CON_SetDispInfo(uint dwHand, byte DispInfo);
//设置客户信息
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int OFS_SetFontInformation(uint dwHand, byte OverWrite, byte[] ClientMsg);
public delegate void CallBackCon(uint dwHand, string pid);
public delegate void CallBackLedClose(uint dwHand, string pid, int err_code);
//启动gprs服务器
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern bool StartGprsServer(uint port, CallBackCon pCallBackCon, CallBackLedClose pCallBackLedClose);
//关闭gprs服务器
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern void CloseGprsServer();
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern void SetGprsAliveTick(uint dwHand, int time_sec);
//扫描
//返回值:0:发送数据正确;ERR_TIMEOUT:通讯超时;其它:返回错误代码。
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SendAndRecvBuff(uint dwHand, byte cmd_group, byte cmd, byte[] cmd_data, ushort data_len, byte[] recv_data, ref short p_recv_len);
//返回值:0:发送数据正确;ERR_TIMEOUT:通讯超时;其它:返回错误代码。
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int SendBuff(uint dwHand, byte cmd_group, byte cmd, byte[] cmd_data, ushort data_len);
// 网络搜索
[DllImport("Led5kSDK.dll", CharSet = CharSet.Unicode)]
public static extern int BX5MK_WebSearch(uint dwHand, byte[] recv_buff, ushort[] recv_len);
}
public class ItemObject
{
public string Text = "";
public uint Value = 0;//可以多个
public ItemObject(string _text, uint _value)
{
Text = _text;
Value = _value;
}
}
public class Led5kstaticArea
{
public LedZKSDK.bx_5k_area_header header;
public string text;
public byte[] AreaToByteArray()
{
//计算header的大小:结构体bx_5k_area_header的大小
LedZKSDK.bx_5k_area_header tu = new LedZKSDK.bx_5k_area_header();
int hsz = Marshal.SizeOf(tu);
//计算len的大小
text = text.Replace("₩₩F", "\\F");
List<byte[]> Byte_Area = new List<byte[]>();
int Byte_t = 0;
string[] str_Area = text.Split('\\');
int font = 0;
for (int n = 0; n < str_Area.Length; n++)
{
if (n > 0 && str_Area[n].Length > 1)
{
if (str_Area[n].Substring(0, 2).Equals("FK"))
{
font = 1;
if (str_Area[n].Length > 5)
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n].Substring(0, 5));
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
string Area_str = str_Area[n].Remove(0, 5);
byte[] Korean = System.Text.Encoding.Unicode.GetBytes(Area_str);
for (int k = 0; k < Korean.Length / 2; k++)
{
byte a = Korean[k * 2];
Korean[k * 2] = Korean[k * 2 + 1];
Korean[k * 2 + 1] = a;
}
Byte_Area.Add(Korean);
Byte_t += Korean.Length;
}
else
{
byte[] special_1 = System.Text.Encoding.GetEncoding("Unicode").GetBytes(str_Area[n]);
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
}
else if (str_Area[n].Substring(0, 2).Equals("FE") || str_Area[n].Substring(0, 2).Equals("FO") || str_Area[n].Substring(0, 2).Equals("WF") || str_Area[n].Substring(0, 2).Equals("WC"))
{
font = 0;
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
else if (str_Area[n].Substring(0, 1).Equals("C") || str_Area[n].Substring(0, 1).Equals("D") || str_Area[n].Substring(0, 1).Equals("B") || str_Area[n].Substring(0, 1).Equals("T"))
{
if (font == 1)
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n].Substring(0, 2));
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
string Area_str = str_Area[n].Remove(0, 2);
byte[] Korean = System.Text.Encoding.Unicode.GetBytes(Area_str);
for (int k = 0; k < Korean.Length / 2; k++)
{
byte a = Korean[k * 2];
Korean[k * 2] = Korean[k * 2 + 1];
Korean[k * 2 + 1] = a;
}
Byte_Area.Add(Korean);
Byte_t += Korean.Length;
}
else
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
}
else if (str_Area[n].Substring(0, 1).Equals("n"))
{
if (font == 1)
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n].Substring(0, 1));
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
string Area_str = str_Area[n].Remove(0, 1);
byte[] Korean = System.Text.Encoding.Unicode.GetBytes(Area_str);
for (int k = 0; k < Korean.Length / 2; k++)
{
byte a = Korean[k * 2];
Korean[k * 2] = Korean[k * 2 + 1];
Korean[k * 2 + 1] = a;
}
Byte_Area.Add(Korean);
Byte_t += Korean.Length;
}
else
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
}
else
{
if (font == 1)
{
byte[] Korean = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
byte[] special = new byte[Korean.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < Korean.Length; c++)
{
special[c + 1] = Korean[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
else
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
}
}
else
{
if (n > 0)
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
else
{
byte[] special = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
Byte_Area.Add(special);
Byte_t += special.Length;
}
}
}
byte[] tmp = new byte[Byte_t];
int g = 0;
for (int n = 0; n < Byte_Area.Count(); n++)
{
if (n > 0)
{
for (int j = 0; j < Byte_Area[n].Length; j++)
{
tmp[g + j] = Byte_Area[n][j];
}
g += Byte_Area[n].Length;
}
else
{
for (int j = 0; j < Byte_Area[n].Length; j++)
{
tmp[j] = Byte_Area[n][j];
}
g += Byte_Area[n].Length;
}
}
int len = tmp.Length + hsz + 4;
header.DataLen = tmp.Length;
//先copy len
byte[] bt = new byte[len];
//byte[] lenToByte = System.BitConverter.GetBytes(len);
byte[] lenToByte = System.BitConverter.GetBytes(len);
lenToByte.CopyTo(bt, 0);
int index = lenToByte.Length;
//再copy header
//分配结构体大小的内存空间
IntPtr structPtr = Marshal.AllocHGlobal(hsz);
//将结构体拷到分配好的内存空间
Marshal.StructureToPtr(header, structPtr, false);
//从内存空间拷到AreaDataList数组
Marshal.Copy(structPtr, bt, index, hsz);
//释放内存空间
Marshal.FreeHGlobal(structPtr);
//copy text
tmp.CopyTo(bt, index + hsz);
return bt;
}
public int getAreaLen()
{
LedZKSDK.bx_5k_area_header tu = new LedZKSDK.bx_5k_area_header();
int hsz = Marshal.SizeOf(tu);
//再考header
text = text.Replace("₩₩F", "\\F");
List<byte[]> Byte_Area = new List<byte[]>();
int Byte_t = 0;
string[] str_Area = text.Split('\\');
int font = 0;
for (int n = 0; n < str_Area.Length; n++)
{
if (n > 0 && str_Area[n].Length > 1)
{
if (str_Area[n].Substring(0, 2).Equals("FK"))
{
font = 1;
if (str_Area[n].Length > 5)
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n].Substring(0, 5));
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
string Area_str = str_Area[n].Remove(0, 5);
byte[] Korean = System.Text.Encoding.Unicode.GetBytes(Area_str);
for (int k = 0; k < Korean.Length / 2; k++)
{
byte a = Korean[k * 2];
Korean[k * 2] = Korean[k * 2 + 1];
Korean[k * 2 + 1] = a;
}
Byte_Area.Add(Korean);
Byte_t += Korean.Length;
}
else
{
byte[] special_1 = System.Text.Encoding.GetEncoding("Unicode").GetBytes(str_Area[n]);
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
}
else if (str_Area[n].Substring(0, 2).Equals("FE") || str_Area[n].Substring(0, 2).Equals("FO") || str_Area[n].Substring(0, 2).Equals("WF") || str_Area[n].Substring(0, 2).Equals("WC"))
{
font = 0;
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
else if (str_Area[n].Substring(0, 1).Equals("C") || str_Area[n].Substring(0, 1).Equals("D") || str_Area[n].Substring(0, 1).Equals("B") || str_Area[n].Substring(0, 1).Equals("T"))
{
if (font == 1)
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n].Substring(0, 2));
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
string Area_str = str_Area[n].Remove(0, 2);
byte[] Korean = System.Text.Encoding.Unicode.GetBytes(Area_str);
for (int k = 0; k < Korean.Length / 2; k++)
{
byte a = Korean[k * 2];
Korean[k * 2] = Korean[k * 2 + 1];
Korean[k * 2 + 1] = a;
}
Byte_Area.Add(Korean);
Byte_t += Korean.Length;
}
else
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
}
else if (str_Area[n].Substring(0, 1).Equals("n"))
{
if (font == 1)
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n].Substring(0, 1));
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
string Area_str = str_Area[n].Remove(0, 1);
byte[] Korean = System.Text.Encoding.Unicode.GetBytes(Area_str);
for (int k = 0; k < Korean.Length / 2; k++)
{
byte a = Korean[k * 2];
Korean[k * 2] = Korean[k * 2 + 1];
Korean[k * 2 + 1] = a;
}
Byte_Area.Add(Korean);
Byte_t += Korean.Length;
}
else
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
}
else
{
if (font == 1)
{
byte[] Korean = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
byte[] special = new byte[Korean.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < Korean.Length; c++)
{
special[c + 1] = Korean[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
else
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
}
}
else
{
if (n > 0)
{
byte[] special_1 = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
byte[] special = new byte[special_1.Length + 1];
special[0] = 0x5c;
for (int c = 0; c < special_1.Length; c++)
{
special[c + 1] = special_1[c];
}
Byte_Area.Add(special);
Byte_t += special.Length;
}
else
{
byte[] special = System.Text.Encoding.GetEncoding("GBK").GetBytes(str_Area[n]);
Byte_Area.Add(special);
Byte_t += special.Length;
}
}
}
byte[] tmp = new byte[Byte_t];
int g = 0;
for (int n = 0; n < Byte_Area.Count(); n++)
{
if (n > 0)
{
for (int j = 0; j < Byte_Area[n].Length; j++)
{
tmp[g + j] = Byte_Area[n][j];
}
g += Byte_Area[n].Length;
}
else
{
for (int j = 0; j < Byte_Area[n].Length; j++)
{
tmp[j] = Byte_Area[n][j];
}
g += Byte_Area[n].Length;
}
}
int len = tmp.Length + hsz + 4;
return len;
}
}
public class Led5kProgram
{
public string name;
public bool overwrite;
public ushort DisplayType;
public byte PlayTimes;
public bool IsValidAlways;
public ushort StartYear;
public byte StartMonth;
public byte StartDay;
public ushort EndYear;
public byte EndMonth;
public byte EndDay;
public byte ProgramWeek;
public bool IsPlayOnTime;
public byte StartHour;
public byte StartMinute;
public byte StartSecond;
public byte EndHour;
public byte EndMinute;
public byte EndSecond;
public byte AreaNum;
public List<Led5kstaticArea> m_arealist = new List<Led5kstaticArea>();
#region//转DCB码
public static byte byte2bcd(byte num)
{
int i = num;
return (byte)(i / 10 * 16 + i % 10);
}
public static byte bcd2byte(byte num)
{
int i = num;
return (byte)(i / 16 * 10 + i % 16);
}
public static byte[] short2bcd(ushort num)
{
int i = num;
byte high = (byte)(i / 100);
byte low = (byte)(i % 100);
byte[] tmp = new byte[2];
tmp[0] = byte2bcd(low);
tmp[1] = byte2bcd(high);
return tmp;
}
#endregion
public int SendProgram(uint hand)
{
byte[] ppFileName;
byte[] ProgramLife;
byte PlayPeriodGrpNum;
byte[] Period;
byte[] AreaDataList;
int AreaDataListLen;
int sum = 0;
foreach (Led5kstaticArea s in m_arealist)
{
sum += s.getAreaLen();
}
AreaDataList = new byte[sum];
int index = 0;
foreach (Led5kstaticArea s in m_arealist)
{
byte[] bt = s.AreaToByteArray();
bt.CopyTo(AreaDataList, index);
index += bt.Length;
}
AreaDataListLen = sum;
if (IsValidAlways == true)
{
ProgramLife = new byte[8];
ProgramLife[0] = 0xff;
ProgramLife[1] = 0xff;
ProgramLife[2] = 0xff;
ProgramLife[3] = 0xff;
ProgramLife[4] = 0xff;
ProgramLife[5] = 0xff;
ProgramLife[6] = 0xff;
ProgramLife[7] = 0xff;
}
else
{
ProgramLife = new byte[8];
byte[] tmp = Led5kProgram.short2bcd(StartYear);
ProgramLife[0] = tmp[0];
ProgramLife[1] = tmp[1];
ProgramLife[2] = byte2bcd(StartMonth);
ProgramLife[3] = byte2bcd(StartDay);
byte[] tmp1 = Led5kProgram.short2bcd(EndYear);
ProgramLife[4] = tmp1[0];
ProgramLife[5] = tmp1[1];
ProgramLife[6] = byte2bcd(EndMonth);
ProgramLife[7] = byte2bcd(EndDay);
}
ppFileName = System.Text.Encoding.Default.GetBytes(name);
if (IsPlayOnTime == true)
{
Period = new byte[7];
Period[0] = byte2bcd(StartHour);
Period[1] = byte2bcd(StartMinute);
Period[2] = byte2bcd(StartSecond);
Period[3] = byte2bcd(EndHour);
Period[4] = byte2bcd(EndMinute);
Period[5] = byte2bcd(EndSecond);
Period[6] = 0;
}
else
{
Period = null;
}
PlayPeriodGrpNum = Convert.ToByte(IsPlayOnTime ? 1 : 0);
return LedZKSDK.OFS_SendFileData(hand, 1, ppFileName, DisplayType, PlayTimes, ProgramLife,
ProgramWeek, PlayPeriodGrpNum, Period, AreaNum, AreaDataList, AreaDataListLen);
}
}
}