登录  注册 退出 English
鼎恩光彩LED显示屏{www.deanled.cn}
400-886-2386
  1. 首页 > 资料下载 > 二次开发

二次开发包 BX-6系列控制器 版本号:V20200720

二次开发包 BX-6系列控制器 版本号:V20200720支持BX-6系列控制器1. 支持静态区域的二次开发2. 静态区和动态区提供C# 、JAVA 、VB、C++整套的开发工具3...
作者:小编 上传时间:2020-08-22 浏览量:174
文件下载列表 : 下载包(1)
详细介绍

二次开发包 BX-6系列控制器 版本号:V20200720


支持BX-6系列控制器
1. 支持静态区域的二次开发
2. 静态区和动态区提供C# 、JAVA 、VB、C++整套的开发工具
3. JAVA开发包支持windows, linux, android
4.Java开发包支持语音功能(必须控制卡也支持语音功能)
支持型号:BX-6M系列/6U系列/6A系列/6A&G系列/6W系列/6S系列/6Q系列/6X系列/
6M-YY系列/6U-YY系列/6A-YY系列/BX-6E1/BX-6E2/BX-6E3/BX-6E1X/BX-6E2X


+++++++++++++++++++++++++++++++++++++++++++++++++++++



using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.InteropServices;


namespace LedSDKDemo_CSharp

{

    public class bxdualsdk

    {

        public enum E_ScreenColor_G56

        {

            eSCREEN_COLOR_SINGLE = 1,    //单基色

            eSCREEN_COLOR_DOUBLE,      //双基色

            eSCREEN_COLOR_THREE,       //七彩色

            eSCREEN_COLOR_FULLCOLOR,   //全彩色

        }

        public enum E_DoubleColorPixel_G56 : int

        {

            eDOUBLE_COLOR_PIXTYPE_1 = 1, //双基色1:G+R

            eDOUBLE_COLOR_PIXTYPE_2,   //双基色2:R+G

        }


        public enum E_arrMode : int

        {

            eSINGLELINE,   //单行

            eMULTILINE,    //多行

        }


        public enum E_DateStyle : int

        {

            eYYYY_MM_DD_MINUS,   //YYYY-MM-DD

            eYYYY_MM_DD_VIRGURE, //YYYY/MM/DD

            eDD_MM_YYYY_MINUS,   //DD-MM-YYYY

            eDD_MM_YYYY_VIRGURE, //DD/MM/YYYY

            eMM_DD_MINUS,        //MM-DD

            eMM_DD_VIRGURE,      //MM/DD

            eMM_DD_CHS,          //MM月DD日

            eYYYY_MM_DD_CHS,     //YYYY年MM月DD日

        }


        public enum E_TimeStyle : int

        {

            eHH_MM_SS_COLON,  //HH:MM:SS

            eHH_MM_SS_CHS,    //HH时MM分SS秒

            eHH_MM_COLON,     //HH:MM

            eHH_MM_CHS,       //HH时MM分

            eAM_HH_MM,        //AM HH:MM

            eHH_MM_AM,        //HH:MM AM

        };


        public enum E_WeekStyle : int

        {

            eMonday = 1,    //Monday

            eMon,         //Mon.

            eMonday_CHS,  //星期一

        }


        public enum E_Color_G56

        {

            eBLACK,     //黑色

            eRED,       //红色

            eGREEN,     //绿色

            eYELLOW,    //黄色

            eBLUE, //蓝色

            eMAGENTA, //品红/洋红

            eCYAN, //青色

            eWHITE, //白色

        }  //5代时间区只支持四种颜色



        public enum E_ClockStyle

        {

            eLINE,     //线形

            eSQUARE,   //方形

            eCIRCLE,   //圆形

        };//表盘样式


        public enum E_txtDirection

        {

            pNORMAL,       //正常

            pROTATERIGHT,  //向右旋转

            pMIRROR,       //镜像

            pROTATELEFT,   //向左旋转

        };//图文区文字方向---暂不支持


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct ConfigFile

        {

            public byte FileType; //文件类型

            public byte[] ControllerName; // 控制器名称

            ushort Address; //控制器地址

            public byte Baudrate; /* 串口波特率 

     0x00 –保持原有波特率不变

     0x01 –强制设置为 9600

     0x02 –强制设置为 57600*/

            ushort ScreenWidth; //显示屏宽度

            ushort ScreenHeight; // 显示屏高度

            public byte Color; /* 显示屏颜色定义 Bit0 表示红, bit1 表示绿, bit2 表示

         蓝, 对于每一个 Bit, 0 表示灭, 1 表示亮*/

            public byte MirrorMode; // 0x00 –无镜向 0x01 –镜向

            public byte OEPol; //OE 极性,0x00 – OE 低有效   0x01 – OE 高有效

            public byte DAPol; // 数据极性, 0x00 –数据低有效, 0x01 –数据高有效

            public byte RowOrder; /*行序模式, 该值范围为 0-31

     0-15 代表正序

     0 代表从第 0 行开始顺序扫描

     1 代表从第 1 行开始顺序扫描

     .....

     16-31 代表逆序

     0 代表从第 0 行开始逆序扫描

     1 代表从第 1 行开始逆序扫描*/

            public byte FreqPar; /*CLK 分频倍数

    注意: 针对于 AX 系列, 为后级分频

    数值为 0~15, 共 16 个等级。*/

            public byte OEWidth; // OE 宽度

            public byte OEAngle; // OE 提前角

            public byte FaultProcessMode; /*控制器的错误处理模式

     0x00 –自动处理

     0x01 –手动处理(此模式仅供调试人员

     使用)*/

            public byte CommTimeoutValue; /*通讯超时设置(单位秒)

     建议值:

     串口– 2S

     TCP/IP – 6S

     GPRS – 30S*/

            public byte RunningMode; /*控制器运行模式, 具体定义如下:

    0x00 –正常模式

    0x01 –调试模式*/

            public byte LoggingMode; /*日志记录模式

    0x00 –无日志

    0x01 –只对控制器错误及对错误进行

    的错误进行记录

    0x02 –对控制器的所有操作进行记

    录, 包括: 控制器接收的各条指令、

    发生的错误及错误处理*/

            public byte GrayFlag; /*灰度标志(仅 5Q 卡时有该字节)

     0x00–无灰度

     0x01–灰度*/

            public byte CascadeMode; /*级联模式: (仅 5Q 卡时有该字节)

    0x00–非级联模式

    0x01–级联模式*/

            public byte Default_brightness; /*AX 系列控制器专用, 表示上电时, 默

       认的亮度等级值。 根据不同的屏幕类

       型有所不同。*/

            public byte HUBConfig;  /*HUB 板设置(仅 6E 控制器支持)

       0x00–HUB512 默认项

       0x01–HUB256*/

            public byte Language; /*控制器多语言显示区。

     0x00 ----简体中文显示。

     0x01 ----非中文显示, 控制器显示图

     形加英文字符。

     其他值保留。*/

            public byte Backup; // 备用字节

            ushort CRC16; //整个文件的 CRC16 校验

        }



        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct ConfigFile_G6

        {

            public byte FileType; //文件类型

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]

            public byte[] ControllerName; // 控制器名称

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)]

            byte[] ScreenAddress; //屏幕安装地址限制为 24个字节长度

            ushort Address; //控制器地址

            public byte Baudrate; /* 串口波特率 

     0x00 –保持原有波特率不变

     0x01 –强制设置为 9600

     0x02 –强制设置为 57600*/

            ushort ScreenWidth; //显示屏宽度

            ushort ScreenHeight; // 显示屏高度

            public byte Color; /* 显示屏颜色定义 Bit0 表示红, bit1 表示绿, bit2 表示

         蓝, 对于每一个 Bit, 0 表示灭, 1 表示亮*/

            public byte modeofdisp; // 6Q 系列显示模式: 0为888, 1为565,对其余控制卡该字节为0

            public byte TipLanguage; //0 表示上位机软件是中文版,底层固件在显示提示信息时需调用内置的中文提示信息

            //1 表示上位机软件是英文版,底层固件在显示提示信息时需调用内置的英文提示信息

            //255 表示上位机软件是其他语言版,底层固件在显示提示信息时需调用自定义提示信息

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]

            public byte[] Reserved; // 5个备用字节

            public byte FaultProcessMode; /*控制器的错误处理模式

0x00 –自动处理

0x01 –手动处理(此模式仅供调试人员使用)*/

            public byte CommTimeoutValue; /*通讯超时设置(单位秒)

建议值:

串口– 2S

TCP/IP – 6S

GPRS – 30S*/

            public byte RunningMode; /* 控制器运行模式,具体定义如下:

0x00 –正常模式

0x01 –调试模式*/

            public byte LoggingMode; /*日志记录模式

0x00 –无日志

0x01 –只对控制器错误及对错误进行

的错误进行记录

0x02 –对控制器的所有操作进行记

录, 包括: 控制器接收的各条指令、

发生的错误及错误处理*/

            public byte DevideScreenMode; /*针对 6Q2 卡的分屏模式

对其余的卡为保留字节 0*/

            public byte Reserved2; //备用字节

            public byte Default_brightness;  /*AX 系列控制器专用,表示上电时,默

认的亮度等级值。其余的控制卡该字

节为保留字 0*/

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]

            public byte[] Backup; // 备用值字节

            public ushort CRC16; //整个文件的 CRC16 校验

        };


        [StructLayout(LayoutKind.Sequential, Pack = 1)]

        public struct Ping_data

        {

            // 控制器类型

            //小端存储低位在前高位在后, 比如 0x254 反着取,低位表示系列,高位编号  [0x54, 0x02] 【系列,编号】

            public ushort ControllerType;

            // 固件版本号            

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]

            public byte[] FirmwareVersion;

            // 控制器参数文件状态 0x00 –控制器中没有参数配置文件,以下返回的是控制器的默认参数。 此时, PC 软件应提示用户必须先加载屏参。0x01 –控制器中有参数配置文件

            public byte ScreenParaStatus;

            // 控制器地址

            public ushort uAddress;

            // 波特率

            public byte Baudrate;

            // 屏宽

            public ushort ScreenWidth;

            // 屏高

            public ushort ScreenHeight;

            // 显示屏颜色定义

            public byte Color;

            //当前亮度值   整数1-16

            public byte CurrentBrigtness;

            // 控制器开关机状态   0 关机  1开机?

            public byte CurrentOnOffStatus;

            // 扫描配置编号

            public ushort ScanConfNumber;

            // 第一个自己一路数据代几行,其他基本用不上,如有需要可参考协议取相应的字节

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 9)]

            public byte[] reversed;

            // 控制器ip地址

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]

            public byte[] ipAdder;

        }



        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct heartbeatData

        {

            public string password;    //密码

            public string ip;          //控制器IP地址

            public string subNetMask;  // 子网掩码

            public string gate;           // 网关

            public short port;            // 端口

            public string mac;           // MAC地址

            public string netID;       // 控制器网络ID

        }



        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct NetSearchCmdRet

        {

            //Oint8 CmdGroup; //1 0xA4 命令组 //public byte Cmd; //1 0x83 命令编号 //public ushort Status; //2 控制器状态//public ushort Error; //2 错误状态寄存器//public ushort DataLen; // 2 0xA4 数据长度

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]

            public byte[] Mac; //6 Mac 地址

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public byte[] IP; //4 控制器 IP 地址

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public byte[] SubNetMask; //4 子网掩码

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public byte[] Gate; //4 网关

            //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            public ushort Port; //2 端口

            public byte IPMode; //1 1 表示 DHCP 2 表示手动设置

            public byte IPStatus; //1 0 表示 IP 设置失败 1 表示 IP 设置成功

            public byte ServerMode; //1 0 Bit[0]表示服务器模式是否使能:1 –使能,0 –禁止 Bit[1]表示服务器模式:1 –web 模式,0 –普通模式

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public byte[] ServerIPAddress;// 4 服务器 IP 地址

            public ushort ServerPort; //2 服务器端口号

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]

            public byte[] ServerAccessPassword;// 8 服务器访问密码

            public ushort HeartBeatInterval;//2 20S 心跳时间间隔(单位:秒)

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]

            public byte[] CustomID; //12 用户自定义 ID,作为网络 ID 的前半部分,便于用户识别其控制卡

            //Web 模式下参见下面的数据结构:NetSearchCmdRet_Web   返回下述 5 项的实际值,否则不上传下述 5 项

            //public byte WebUserID[128];// 128 0 WEB 平台用户 id//Oint32 GroupNum;// 4 0 屏幕组号//public byte DomainFlag;// 1 0 域名标志 0 - 无域名,1—域名//public byte DomainName[128];// 128 域名名称 当 DomainFlag 为 1 时下发//public byte WebControllerName[128];// 128 LED00001 WEB 平台控制器名称

            //Web 模式下返回结束 ==================================================

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]

            public byte[] BarCode; //16 条形码,作为网络 ID 的后半部分,用以实现网络 ID 的唯一性

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            public byte[] ControllerType; //2 其中低位字节表示设备系列,而高位字节表示设备编号,例如 BX - 6Q2 应表示为[0x66, 0x02],其它型号依此类推。

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]

            public byte[] FirmwareVersion;// 8 Firmware 版本号

            public byte ScreenParaStatus; //1 控制器参数文件状态 0x00 –控制器中没有参数配置文件,以下返回的是控制器的默认参数。此时,PC软件应提示用户必须先加载屏参。0x01 –控制器中有参数配置文件

            public ushort Address; //2 0x0001 控制器地址控制器出厂默认地址为 0x0001(0x0000 地址将保留)控制除了对发送给自身地址的数据包进行处理外,还需对广播数据包进行处理。

            public byte Baudrate; //1 0x00 波特率 0x00 –保持原有波特率不变 0x01 –强制设置为 9600 0x02 –强制设置为 57600

            public ushort ScreenWidth; //2 192 显示屏宽度

            public ushort ScreenHeight; //2 96 显示屏高度

            public byte Color; //1 0x01 对于无灰度系统,单色时返回 1,双色时返回 3,三色时返回 7;对于有灰度系统,返回 255

            public byte BrightnessAdjMode;// 1 调亮模式 0x00 –手动调亮 0x01 –定时调亮 0x02 –自动调亮

            public byte CurrentBrigtness; // 1 当前亮度值

            public byte TimingOnOff; //1 Bit0 –定时开关机状态,0 表示无定时开关机,1 表示有定时开关机

            public byte CurrentOnOffStatus;//1 开关机状态

            public ushort ScanConfNumber; //2 扫描配置编号

            public byte RowsPerChanel; //1 一路数据带几行

            public byte GrayFlag; //1 对于无灰度系统,返回 0;对于有灰度系

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            public byte[] UnitWidth; //2 最小单元宽度

            public byte modeofdisp; //1 6Q 显示模式 : 0 为 888, 1 为 565,其余卡为 0

            public byte NetTranMode; //1 当该字节为 0 时,网口通讯使用老的模式,即 UDP 和 TCP 均根据下面的PackageMode 字节确定包长,并且 UDP通讯时,将大包分为小包,每发送一小包做一下延时当该字节不为 0 时,网口通讯使用新的模式,即 UDP 的包长等于UDPPackageMode * 8KBYTE,且不再分为小包,将整包数据丢给协议栈TCP 的包长等于 PackageMode * 16KBYTE

            public byte PackageMode; //1 包模式。0 小包模式,分包 600 byte。1 大包模式,分包 16K byte。

            public byte BarcodeFlag; //1 是否设置了条码 ID如果设置了,该字节第 0 位为 1,否则为0

            public ushort ProgramNumber; //2 控制器上已有节目个数

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public byte[] CurrentProgram; //4 当前节目名

            public byte ScreenLockStatus; //1 Bit0 –是否屏幕锁定,1b’0 –无屏幕锁定,1b’1 –屏幕锁定

            public byte ProgramLockStatus;//1 Bit0 –是否节目锁定,1b’0 –无节目锁定,1’b1 –节目锁定

            public byte RunningMode; //1 控制器运行模式

            public byte RTCStatus; //1 RTC 状态 0x00 – RTC 异常 0x01 – RTC 正常

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            public byte[] RTCYear; //2 年

            public byte RTCMonth; //1 月

            public byte RTCDate; //1 日

            public byte RTCHour; //1 小时

            public byte RTCMinute; //1 分钟

            public byte RTCSecond; //1 秒

            public byte RTCWeek; //1 星期,范围为 1~7,7 表示周日

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]

            public byte[] Temperature1; //3 温度传感器当前值

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]

            public byte[] Temperature2; //3 温度传感器当前值

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            public byte[] Humidity; //2 湿度传感器当前值

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            public byte[] Noise; //2 噪声传感器当前值(除以 10 为当前值)针对 BX - ZS(485) 0xffff 时无效

            public byte Reserved; //1 保留字节

            public byte LogoFlag; //1 0:表示未设置 Logo 节目 1:表示设置了 Logo 节目

            public ushort PowerOnDelay; //2 0:未设置开机延时 1:开机延时时长

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            public byte[] WindSpeed; //2 风速(除以 10 为当前值) 0xfffff 时无效

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            public byte[] WindDirction; //2 风向(当前值) 0xfffff 时无效

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            public byte[] PM2_5; //2 PM2.5 值(当前值)0xfffff 时无效

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            public byte[] PM10;         //2 PM10 值(当前值)0xfffff 时无效

            //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)]

            //public byte[] Reserved2; //24 保留字

            public ushort ExtendParaLen; // 2 0x40 扩展参数长度

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]

            public byte[] ControllerName; // 16 LEDCON01 控制器名称限制为 16 个字节长度(全是 0x00 表示屏参丢失,参数无效,上位机空白显示)

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 44)]

            public byte[] ScreenLocation; // 44 0 屏幕安装地址限制为 44 个字节长度(全是 0x00 表示屏参丢失,参数无效,上位机空白显示)

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public byte[] NameLocalationCRC32;// 4 控制器和屏幕安装地址共 60 个字节的CRC32 校验值,该值是为了便于上位机区分此处 64 个字节是表示控制器名称还是用来表示控制器名称和屏幕安装地址,进而采取不同的处理策略为了保持兼容,下位机不对该值进行验证

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            public byte[] PM100; //2 风向(当前值) 0xfffff 时无效

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            public byte[] AtmosphericPressure ; //2 PM2.5 值(当前值)0xfffff 时无效

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public byte[] illumination;         //2 PM10 值(当前值)0xfffff 时无效

        }



        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct NetSearchCmdRet_Web

        {

            //byte CmdGroup; //1 0xA4 命令组 //byte Cmd; //1 0x83 命令编号 //Oint16 Status; //2 控制器状态//Oint16 Error; //2 错误状态寄存器//Oint16 DataLen; // 2 0xA4 数据长度


            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]

            //        byte Mac[6];           //6 Mac 地址

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            //        Ouint8 IP[4];           //4 控制器 IP 地址

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            //        Ouint8 SubNetMask[4];   //4 子网掩码

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            //        Ouint8 Gate[4];         //4 网关

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            //        Ouint8 Port[2];         //2 端口

            //byte IPMode;           //1 1 表示 DHCP 2 表示手动设置

            //byte IPStatus;         //1 0 表示 IP 设置失败 1 表示 IP 设置成功

            //byte ServerMode;       //1 0 Bit[0]表示服务器模式是否使能:1 –使能,0 –禁止 Bit[1]表示服务器模式:1 –web 模式,0 –普通模式

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            //        Ouint8 ServerIPAddress[4];// 4 服务器 IP 地址

            //        Oint16 ServerPort;      //2 服务器端口号

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]

            //        byte ServerAccessPassword[8];// 8 服务器访问密码

            //        public ushort HeartBeatInterval;//2 20S 心跳时间间隔(单位:秒)

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]

            //        byte CustomID[12];     //12 用户自定义 ID,作为网络 ID 的前半部分,便于用户识别其控制卡

            //                                //Web 模式下返回下述 5 项的实际值,否则不上传下述 5 项

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]

            //        byte WebUserID[128];   // 128 0 WEB 平台用户 id

            //        public int GroupNum;        // 4 0 屏幕组号

            //byte DomainFlag;       // 1 0 域名标志 0 - 无域名,1—域名

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]

            //        byte DomainName[128];  // 128 域名名称 当 DomainFlag 为 1 时下发

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]

            //        byte WebControllerName[128];// 128 LED00001 WEB 平台控制器名称

            //                                     //Web 模式下返回下述 5 项 结束 ###################

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 18)]

            //        byte BarCode[16];      //16 条形码,作为网络 ID 的后半部分,用以实现网络 ID 的唯一性

            //Oint16 ControllerType;  //2 其中低位字节表示设备系列,而高位字节表示设备编号,例如 BX - 6Q2 应表示为[0x66, 0x02],其它型号依此类推。

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]

            //        byte FirmwareVersion[8];// 8 Firmware 版本号

            //byte ScreenParaStatus; //1 控制器参数文件状态 0x00 –控制器中没有参数配置文件,以下返回的是控制器的默认参数。此时,PC软件应提示用户必须先加载屏参。0x01 –控制器中有参数配置文件

            //Oint16 Address;         //2 0x0001 控制器地址控制器出厂默认地址为 0x0001(0x0000 地址将保留)控制除了对发送给自身地址的数据包进行处理外,还需对广播数据包进行处理。

            //byte Baudrate;         //1 0x00 波特率 0x00 –保持原有波特率不变 0x01 –强制设置为 9600 0x02 –强制设置为 57600

            //Oint16 ScreenWidth;     //2 192 显示屏宽度

            //Oint16 ScreenHeight;    //2 96 显示屏高度

            //byte Color;            //1 0x01 对于无灰度系统,单色时返回 1,双色时返回 3,三色时返回 7;对于有灰度系统,返回 255

            //byte BrightnessAdjMode;//1 调亮模式 0x00 –手动调亮 0x01 –定时调亮 0x02 –自动调亮

            //byte CurrentBrigtness; //1 当前亮度值

            //byte TimingOnOff;      //1 Bit0 –定时开关机状态,0 表示无定时开关机,1 表示有定时开关机

            //byte CurrentOnOffStatus;//1 开关机状态

            //Oint16 ScanConfNumber;  //2 扫描配置编号

            //byte RowsPerChanel;    //1 一路数据带几行

            //byte GrayFlag;         //1 对于无灰度系统,返回 0;对于有灰度系

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            //        byte UnitWidth[2];     //2 最小单元宽度

            //byte modeofdisp;       //1 6Q 显示模式 : 0 为 888, 1 为 565,其余卡为 0

            //byte NetTranMode;      //1 当该字节为 0 时,网口通讯使用老的模式,即 UDP 和 TCP 均根据下面的PackageMode 字节确定包长,并且 UDP通讯时,将大包分为小包,每发送一小包做一下延时当该字节不为 0 时,网口通讯使用新的模式,即 UDP 的包长等于UDPPackageMode * 8KBYTE,且不再分为小包,将整包数据丢给协议栈TCP 的包长等于 PackageMode * 16KBYTE

            //byte PackageMode;      //1 包模式。0 小包模式,分包 600 byte。1 大包模式,分包 16K byte。

            //byte BarcodeFlag;      //1 是否设置了条码 ID如果设置了,该字节第 0 位为 1,否则为0

            //Oint16 ProgramNumber;   //2 控制器上已有节目个数

            //int CurrentProgram;  //4 当前节目名

            //byte ScreenLockStatus; //1 Bit0 –是否屏幕锁定,1b’0 –无屏幕锁定,1b’1 –屏幕锁定

            //byte ProgramLockStatus;//1 Bit0 –是否节目锁定,1b’0 –无节目锁定,1’b1 –节目锁定

            //byte RunningMode;      //1 控制器运行模式

            //byte RTCStatus;        //1 RTC 状态 0x00 – RTC 异常 0x01 – RTC 正常

            //Oint16 RTCYear;         //2 年

            //byte RTCMonth;         //1 月

            //byte RTCDate;          //1 日

            //byte RTCHour;          //1 小时

            //byte RTCMinute;        //1 分钟

            //byte RTCSecond;        //1 秒

            //byte RTCWeek;          //1 星期,范围为 1~7,7 表示周日

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]

            //        byte Temperature1[3];  //3 温度传感器当前值

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]

            //        byte Temperature2[3];  //3 温度传感器当前值

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            //        byte Humidity[2];      //2 湿度传感器当前值

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]

            //        byte Noise[2];         //2 噪声传感器当前值(除以 10 为当前值)针对 BX - ZS(485) 0xffff 时无效

            //byte Reserved;         //1 保留字节

            //byte LogoFlag;         //1 0:表示未设置 Logo 节目 1:表示设置了 Logo 节目

            //Oint16 PowerOnDelay;    //2 0:未设置开机延时 1:开机延时时长

            //Oint16 WindSpeed;       //2 风速(除以 10 为当前值) 0xfffff 时无效

            //Oint16 WindDirction;    //2 风向(当前值) 0xfffff 时无效

            //Oint16 PM2_5;           //2 PM2.5 值(当前值)0xfffff 时无效

            //Oint16 PM10;            //2 PM10 值(当前值)0xfffff 时无效

            //                        //byte Reserved2[24]; //24 保留字

            //Oint16 ExtendParaLen;   // 2 0x40 扩展参数长度

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]

            //        byte ControllerName[16];   // 16 LEDCON01 控制器名称限制为 16 个字节长度(全是 0x00 表示屏参丢失,参数无效,上位机空白显示)

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 44)]

            //        byte ScreenLocation[44];   // 44 0 屏幕安装地址限制为 44 个字节长度(全是 0x00 表示屏参丢失,参数无效,上位机空白显示)

            //        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            //        byte NameLocalationCRC32[4];// 4 控制器和屏幕安装地址共 60 个字节的CRC32 校验值,该值是为了便于上位机区分此处 64 个字节是表示控制器名称还是用来表示控制器名称和屏幕安装地址,进而采取不同的处理策略为了保持兼容,下位机不对该值进行验证

        };


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct TimingOnOff

        {

            public byte onHour;   // 开机小时

            public byte onMinute; // 开机分钟

            public byte offHour;  // 关机小时

            public byte offMinute; // 关机分钟

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct Brightness

        {

            /*

             0x00 –手动调亮

             0x01 –定时调亮 注:以下的亮度值表,在定时调亮和手 动调亮时控制器才需处理。但在协议上 不论什么模式,此表都需要发送给控制 器

             0x00 –手动调亮

             0x01 –定时调亮 注:以下的亮度值表,在定时调亮和手 动调亮时控制器才需处理。但在协议上 不论什么模式,此表都需要发送给控制 器

             */

            public byte BrightnessMode;


            //00:00 – 00:29 的亮度值, 0x00 – 0x0f

            public byte HalfHourValue0;

            public byte HalfHourValue1;

            public byte HalfHourValue2;

            public byte HalfHourValue3;

            public byte HalfHourValue4;

            public byte HalfHourValue5;

            public byte HalfHourValue6;

            public byte HalfHourValue7;

            public byte HalfHourValue8;

            public byte HalfHourValue9;

            public byte HalfHourValue10;

            public byte HalfHourValue11;

            public byte HalfHourValue12;

            public byte HalfHourValue13;

            public byte HalfHourValue14;

            public byte HalfHourValue15;

            public byte HalfHourValue16;

            public byte HalfHourValue17;

            public byte HalfHourValue18;

            public byte HalfHourValue19;

            public byte HalfHourValue20;

            public byte HalfHourValue21;

            public byte HalfHourValue22;

            public byte HalfHourValue23;

            public byte HalfHourValue24;

            public byte HalfHourValue25;

            public byte HalfHourValue26;

            public byte HalfHourValue27;

            public byte HalfHourValue28;

            public byte HalfHourValue29;

            public byte HalfHourValue30;

            public byte HalfHourValue31;

            public byte HalfHourValue32;

            public byte HalfHourValue33;

            public byte HalfHourValue34;

            public byte HalfHourValue35;

            public byte HalfHourValue36;

            public byte HalfHourValue37;

            public byte HalfHourValue38;

            public byte HalfHourValue39;

            public byte HalfHourValue40;

            public byte HalfHourValue41;

            public byte HalfHourValue42;

            public byte HalfHourValue43;

            public byte HalfHourValue44;

            public byte HalfHourValue45;

            public byte HalfHourValue46;

            public byte HalfHourValue47;

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct ControllerStatus_G56

        {

            public byte onoffStatus; // 开关机状态 Bit 0 –开机/关机, 0 表示关机, 1 表示开机

            public byte timingOnOff; // 定时开关机状态 0 表示无定时开关机, 1 表示有定时开关机

            public byte brightnessAdjMode; //亮度模式 0x00 –手动调亮 0x01 –定时调亮 0x02 –自动调亮

            public byte brightness;// 当前亮度值

            public short programeNumber;// 控制器上已有节目个数

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public byte[] currentProgram;//当前节目名

            public byte screenLockStatus;//是否屏幕锁定,0 –无屏幕锁定, 1 –屏幕锁定

            public byte programLockStatus; //是否节目锁定, 0 –无节目锁定,1 –节目锁定

            public byte runningMode;//控制器运行模式

            public byte RTCStatus;//RTC 状态0x00 – RTC 异常 0x01 – RTC 正常

            public short RTCYear;//年

            public byte RTCMonth;//月

            public byte RTCDate;//日

            public byte RTCHour;//时

            public byte RTCMinute;//分

            public byte RTCSecond;//秒

            public byte RTCWeek;//星期 1--7

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]

            public byte[] temperature1;//温度1传感器当前值

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]

            public byte[] temperature2;//温度2传感器当前值

            public short humidity;//湿度传感器当前值

            public short noise;//噪声传感器当前值

            public byte switchStatus; //测试按钮状态 0 –打开 1 –闭合

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]

            public byte[] CustomID; //用户自定义 ID,作为网络 ID 的前半部分,便于用户识别其控制卡

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]

            public byte[] BarCode; //条形码,作为网络 ID 的后半部分,用以实现网络 ID 的唯一性

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct TimingReset

        {

            public byte rstMode; //复位模式 0x00 –取消定时复位功能 0x01 –周期复位, 此时 RstInterval 字段有效 0x02 –只在指定时间复位

            uint RstInterval;//复位周期, 单位: 分钟如此字段为 0, 不进行复位操作

            public byte rstHour1; //小时 0Xff–表示此组无效, 下同

            public byte rstMin1;

            public byte rstHour2;

            public byte rstMin2;

            public byte rstHour3;

            public byte rstMin3;

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct BattleTime

        {

            public short BattleRTCYear; //年

            public byte BattleRTCMonth;//月

            public byte BattleRTCDate;//日

            public byte BattleRTCHour;//时

            public byte BattleRTCMinute;//分

            public byte BattleRTCSecond;//秒

            public byte BattleRTCWeek;//星期

        }

        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQprogrampTime_G56

        {

            public byte StartHour;

            public byte StartMinute;

            public byte StartSecond;

            public byte EndHour;

            public byte EndMinute;

            public byte EndSecond;

        };//节目的播放时段

        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQprogramppGrp_G56

        {

            public byte playTimeGrpNum; //播放时间有效组数 0 没有播放时段全天播放 最大值8 

            public EQprogrampTime_G56 timeGrp0;

            public EQprogrampTime_G56 timeGrp1;

            public EQprogrampTime_G56 timeGrp2;

            public EQprogrampTime_G56 timeGrp3;

            public EQprogrampTime_G56 timeGrp4;

            public EQprogrampTime_G56 timeGrp5;

            public EQprogrampTime_G56 timeGrp6;

            public EQprogrampTime_G56 timeGrp7;

        };//播放时段共有8组


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQprogramHeader

        {

            /*

             默认:0x00

             LOGO文件:0x08

             扫描配置文件:0x02

             日志文件:0x06

             字库文件:0x05

             提示信息库文件: 0x07

             */

            public byte FileType; //文件类型

            public uint ProgramID;//节目ID


            /*

             Bit0 –全局节目标志位

             Bit1 –动态节目标志位

             Bit2 –屏保节目标志位

             */

            public byte ProgramStyle;//节目类型


            //注:带播放时段的节目优先级为 1,不 带播放时段的节目优先级为 0

            public byte ProgramPriority; //节目等级

            public byte ProgramPlayTimes;//节目重播放次数

            public ushort ProgramTimeSpan; //播放的方式

            public byte ProgramWeek;      //节目星期属性

            public ushort ProgramLifeSpan_sy;//年

            public byte ProgramLifeSpan_sm;//月

            public byte ProgramLifeSpan_sd;//日

            public ushort ProgramLifeSpan_ey;//结束年

            public byte ProgramLifeSpan_em;//结束日

            public byte ProgramLifeSpan_ed;//结束天

            //public byte PlayPeriodGrpNum;//播放时段的组数

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQscreenframeHeader

        {

            public byte FrameDispFlag;

            public byte FrameDispStyle;

            public byte FrameDispSpeed;

            public byte FrameMoveStep;

            public byte FrameWidth;

            public ushort FrameBackup;

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQareaframeHeader

        {

            public byte AreaFFlag;

            public byte AreaFDispStyle;

            public byte AreaFDispSpeed;

            public byte AreaFMoveStep;

            public byte AreaFWidth;

            public ushort AreaFBackup;

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQareaHeader

        {

            /*

             字库区域:0x01

             透明文本:0x06

         

             时间区:0x02

         

             图文字幕:0x00

         

             战斗时间:0x09

             噪声区:0x05

             温度区:0x03

             霓虹区:0x08

             湿度区:0x04

             */

            public byte AreaType; //区域类型


            public ushort AreaX; //区域X坐标

            public ushort AreaY; //区域Y坐标

            public ushort AreaWidth; //区域宽

            public ushort AreaHeight;//区域高

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQpageHeader

        {

            //请参考协议 图文字幕区数据格式

            public byte PageStyle; //数据页类型

            public byte DisplayMode; //显示方式 (特效)

            public byte ClearMode; // 退出方式/清屏方式

            public byte Speed; // 速度等级/背景速度等级

            public ushort StayTime; // 停留时间, 单位为 10ms

            public byte RepeatTime;//重复次数/背景拼接步长(左右拼接下为宽度, 上下拼接为高度)

            public ushort ValidLen;  //用法比较复杂请参考协议

            public E_arrMode arrMode; //排列方式--单行多行

            public ushort fontSize; //字体大小

            public uint color;//字体颜色

            public byte fontBold; //是否为粗体

            public byte fontItalic;//是否为斜体

            public E_txtDirection tdirection;//文字方向

            public ushort txtSpace; //文字间隔 

            public byte Valign;

            public byte Halign;

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQprogram

        {

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public byte[] fileName; //文件名

            public byte fileType; //文件类型

            public uint fileLen; //文件长度

            public IntPtr fileAddre; // 文件所在的缓存地址

            public uint fileCRC32; //文件CRC32校验码

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct getPageData

        {

            ushort allPageNub;

            uint pageLen;

            public byte[] fileAddre;

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQunitHeader

        {

            ushort UnitX;

            ushort UnitY;

            public byte UnitType;

            public byte Align;

            public byte UnitColor;

            public byte UnitMode;

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQtimeAreaData_G56

        {

            public E_arrMode linestyle; //排列方式,单行还是多行

            public uint color; //字体颜色

            public string fontName;           //字体名字

            public ushort fontSize;           //字体大小

            public byte fontBold;           //字体加粗

            public byte fontItalic;         //斜体

            public byte fontUnderline;      //字体加下划线

            public byte fontAlign;          //对齐方式--多行有效

            public byte date_enable;        //是否添加日期

            public E_DateStyle datestyle; //日期格式

            public byte time_enable;        //是否添加时间---默认添加

            public E_TimeStyle timestyle; //时间格式

            public byte week_enable;        //是否添加星期

            public E_WeekStyle weekstyle; //星期格式

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQAnalogClockHeader_G56

        {

            public ushort OrignPointX;    //原点横坐标

            public ushort OrignPointY;    //原点纵坐标

            public byte UnitMode;       //表针模式

            public byte HourHandWidth;  //时针宽度

            public byte HourHandLen;    //时针长度

            public uint HourHandColor;  //时针颜色

            public byte MinHandWidth;   //分针宽度

            public byte MinHandLen;     //分针长度

            public uint MinHandColor;   //分针颜色

            public byte SecHandWidth;   //秒针宽度

            public byte SecHandLen;     //秒针长度

            public uint SecHandColor;   //秒针颜色

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQprogramHeader_G6

        {

            /*

             默认:0x00

             LOGO文件:0x08

             扫描配置文件:0x02

             日志文件:0x06

             字库文件:0x05

             提示信息库文件: 0x07

             */

            public byte FileType; //文件类型

            public uint ProgramID;//节目ID


            /*

             Bit0 –全局节目标志位

             Bit1 –动态节目标志位

             Bit2 –屏保节目标志位

             */

            public byte ProgramStyle; //节目类型


            //注:带播放时段的节目优先级为 1,不带播放时段的节目优先级为 0

            public byte ProgramPriority; //节目等级

            public byte ProgramPlayTimes; //节目重播放次数

            public ushort ProgramTimeSpan; //播放的方式

            public byte SpecialFlag; //特殊节目标

            public byte CommExtendParaLen; //扩展参数长度,默认为0x00

            public ushort ScheduNum; //节目调度  

            public ushort LoopValue; //调度规则循环次数

            public byte Intergrate; //调度相关

            public byte TimeAttributeNum; //时间属性组数

            public ushort TimeAttribute0Offset; //第一组时间属性偏移量--目前只支持一组

            public byte ProgramWeek; //节目星期属性

            public ushort ProgramLifeSpan_sy; //年

            public byte ProgramLifeSpan_sm; //月

            public byte ProgramLifeSpan_sd; //日

            public ushort ProgramLifeSpan_ey; //结束年

            public byte ProgramLifeSpan_em; //结束日

            public byte ProgramLifeSpan_ed; //结束天

            public byte PlayPeriodGrpNum; //播放时段的组数

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQscreenframeHeader_G6

        {

            public byte FrameDispStype;    //边框显示方式

            public byte FrameDispSpeed;    //边框显示速度

            public byte FrameMoveStep;     //边框移动步长

            public byte FrameUnitLength;   //边框组元长度

            public byte FrameUnitWidth;    //边框组元宽度

            public byte FrameDirectDispBit;//上下左右边框显示标志位,目前只支持6QX-M卡    

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQSound_6G

        {

            public byte SoundFlag; //1 0x00 是否使能语音播放;0 表示不使能语音; 1 表示播放下文中 SoundData 部分内容;

            //SoundData 部分内容---------------------------------------------------------------------------------------------------------------------------------------------------

            public byte SoundPerson; //1 0x00 发音人 该值范围是 0 - 5,共 6 种选择只有 SoundFlag(是否使能语音播放)为 1 时才发送该字节,否则不发送该值默认为 0

            public byte SoundVolum; //1 0x05 音量该值范围是 0~10,共 11 种,0表示静音只有 SoundFlag(是否使能语音播放)为 1 时才发送该字节,否则不发送该值默认为 5

            public byte SoundSpeed; //1 0x05 语速该值范围是 0~10,共 11 种只有 SoundFlag(是否使能语音播放)为 1 时才发送该字节,否则不发送该值默认为 5

            public byte SoundDataMode; //1 0x00 SoundData 的编码格式:该值意义如下:0x00 GB2312; 0x01 GBK; 0x02 BIG5; 0x03 UNICODE只有 SoundFlag(是否使能语音播放)为 1 时才发送该字节,否则不发送

            public int SoundReplayTimes; // 4 0x00000000 重播次数该值为 0,表示播放 1 次该值为 1,表示播放 2 次

            //......

            //该值为 0xffffffff,表示播放无限次只有 SoundFlag(是否使能语播放)为 1 时才发送该字节,否则不发送该值默认为 0

            public int SoundReplayDelay;// 4 0x00000000 重播时间间隔该值表示两次播放语音的时间间隔,单位为 10ms只有 SoundFlag(是否使能语音播放)为 1 时才发送该字节,否则不发送该值默认为 0

            public byte SoundReservedParaLen;// 1 0x03 语音参数保留参数长度

            public byte Soundnumdeal; // 1 0 0:自动判断1:数字作号码处理 2:数字作数值处理只有当 SoundFlag 为 1 且SoundReservedParaLen不为 0才发送此参数

            public byte Soundlanguages; // 1 0 0:自动判断语种1:阿拉伯数字、度量单位、特殊符号等合成为中文2:阿拉伯数字、度量单位、特殊符号等合成为英文只有当 SoundFlag 为 1 且 SoundReservedParaLen不为 0才发送此参数(目前只支持中英文)

            public byte Soundwordstyle; // 1 0 0:自动判断发音方式1:字母发音方式2:单词发音方式;只有当 SoundFlag 为 1 且SoundReservedParaLen不为 0才发送此参数

            public int SoundDataLen; // 4 语音数据长度; 只有 SoundFlag(是否使能语音播放)为 1 时才发送该字节,否则不发送

            public IntPtr SoundData; // N 语音数据只有 SoundFlag(是否使能语音播放)为 1 时才发送该字节,否则不发送

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct ClockColor_G56

        {

            public uint Color369; //369点颜色

            public uint ColorDot; //点颜色

            public uint ColorBG;  //表盘外圈颜色 模式没有圈泽此颜色无效

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQareaHeader_G6

        {

            public byte AreaType; //区域类型

            public ushort AreaX; //区域左上角横坐标

            public ushort AreaY; //区域左上角纵坐标

            public ushort AreaWidth; //区域宽度

            public ushort AreaHeight; //区域高度

            public byte BackGroundFlag; //是否有背景

            public byte Transparency;   //透明度

            public byte AreaEqual;      //前景、背景区域大小是否相同


            //语音内容

            //使用语音功能时:部分卡需要配置串口为语音模式!!!

            public EQSound_6G stSoundData;

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQPicAreaSoundHeader_G6

        {

            public byte SoundPerson;           //发音人,范围0~5,共6种选择

            public byte SoundVolum;            //音量,范围0~10

            public byte SoundSpeed;            //语速,范围0~10

            public byte SoundDataMode;         //语音数据的编码格式

            public uint SoundReplayTimes;      //重播次数

            public uint SoundReplayDelay;      //重播时间间隔

            public byte SoundReservedParaLen;  //语音参数保留参数长度,默认0x03

            public byte Soundnumdeal;          //详情见协议

            public byte Soundlanguages;        //详情见协议

            public byte Soundwordstyle;        //详情见协议

        }//图文分区播放语音


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQTimeAreaBattle_G6

        {

            public ushort BattleStartYear;     //起始年份(BCD格式,下同)

            public byte BattleStartMonth;    //起始月份

            public byte BattleStartDate;     //起始日期

            public byte BattleStartHour;     //起始小时

            public byte BattleStartMinute;   //起始分钟

            public byte BattleStartSecond;   //起始秒钟

            public byte BattleStartWeek;     //起始星期值

            public byte StartUpMode;         //启动模式

        } //时间分区战斗时间


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQpageHeader_G6

        {

            public byte PageStyle; //数据页类型

            public byte DisplayMode; //显示方式

            public byte ClearMode; //退出方式/清屏方式

            public byte Speed; //速度等级

            public ushort StayTime; //停留时间

            public byte RepeatTime; //重复次数

            public ushort ValidLen; //此字段只在左移右移方式下有效

            public byte CartoonFrameRate;  //特技为动画方式时,该值代表其帧率

            public byte BackNotValidFlag;  //背景无效标志

            public E_arrMode arrMode; //排列方式--单行多行

            public ushort fontSize; //字体大小

            public uint color; //字体颜色

            public byte fontBold; //是否为粗体 0:false 1:true

            public byte fontItalic; //是否为斜体

            public E_txtDirection tdirection; //文字方向

            public ushort txtSpace; //文字间隔   

            public byte Valign;

            public byte Halign;

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQprogram_G6

        {

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public byte[] fileName; //节目参数文件名

            public byte fileType; //文件类型

            public uint fileLen; //参数文件长度

            public IntPtr fileAddre;   //文件所在的缓存地址

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public byte[] dfileName;//节目数据文件名

            public byte dfileType;   //节目数据文件类型

            public uint dfileLen; //数据文件长度

            public IntPtr dfileAddre;  //数据文件缓存地址

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct GetDirBlock_G56

        {

            public byte fileType;   //要获取的文件类型

            public ushort fileNumber; //返回有多少个文件

            public IntPtr dataAddre;  //返回文件列表地址

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct FileAttribute_G56

        {

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]

            public byte[] fileName;  //文件名

            public byte fileType;     //文件类型

            public int fileLen;      //文件长度

            public int fileCRC;      //文件CRC校验

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQdynamicHeader

        {

            public byte RunMode;

            ushort Timeout;

            public byte ImmePlay;

            public byte AreaType;

            ushort AreaX;

            ushort AreaY;

            ushort AreaWidth;

            ushort AreaHeight;

        }



        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct EQSoundDepend_6G

        {

            public byte VoiceID; // 1 1 语音队列中每个语音的 ID,从 0 开始

            public EQSound_6G stSound;

        }



        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct FileCRC16_G56

        {

            IntPtr fileAddre;     //文件地址指針

            ushort fileLen;        //文件长度

            ushort fileCRC16;      //文件CRC16校验

        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct FileCRC32_G56

        {

            IntPtr fileAddre;     //文件地址指針

            ushort fileLen;        //文件长度

            ushort fileCRC32;      //文件CRC32校验

        }



        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct DynamicAreaParams

        {

            public byte uAreaId;

            public bxdualsdk.EQareaHeader_G6 oAreaHeader_G6;

            public bxdualsdk.EQpageHeader_G6 stPageHeader;

            public IntPtr fontName;

            public IntPtr strAreaTxtContent;

        }

        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

        public struct BxAreaFrmae_Dynamic_G6

        {


        public byte AreaFFlag;       // 1 0x00 区域边框标志位;

        public EQscreenframeHeader_G6 oAreaFrame;

        public byte[] pStrFramePathFile;

    };

        /// <summary>

        /// windows平台需要初始化SDK(默认如果没有初始化会自动初始化)

        /// </summary>

        /// <returns></returns>

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_InitSdk();

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern void bxDual_ReleaseSdk();


        

        /// <summary>

        /// 设置目标地址,即设置屏号/设置屏地址/设置控制器的屏号

        /// </summary>

        /// <param name="usDstAddr">2个字节长度,默认值0xfffe 为地址通配符</param>

        /// <returns></returns>

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_set_screenNum_G56(ushort usDstAddr);

        

        /// <summary>

        /// 用于设置控制各种通讯方式每一包最大长度

        /// 注:5E,6E,6Q系列最大数据长途64K(建议最大不要超过63*1024) 其他系列最大长度1K(1204)

        /// </summary>

        /// <param name="packetLen">数据包长度</param>

        /// <returns></returns>

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_set_packetLen(ushort packetLen);



        

        /// <summary>

        /// 搜索控制器命令

        /// </summary>

        /// <param name="retData">请参考结构体Ping_data 所有回读参数都会通过结构体回调</param>

        /// <returns></returns>

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_searchController(ref Ping_data retData);


        /// <summary>

        /// 搜索控制器命令-串口

        /// </summary>

        /// <param name="retData">请参考结构体Ping_data 所有回读参数都会通过结构体回调</param>

        /// <param name="uartPort">串口号</param>

        /// <returns></returns>

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_searchController(ref Ping_data retData, byte[] uartPort);




        /*! ***********************************************************************************************************************

        * 函数名:cmd_uart_search_Net_6G()

        * 参数名:

        *        uartPort 端口号,如:"COM3"

        * nBaudRateType 1:9600;   2:57600;

        * 命令结果放在了 retData 中;NetSearchCmdRet:参考结构体声明中的注释;

        * 返回值:0 成功, 其他值为错误号

        * 功  能: 网络搜索命令,返回:温度传感器,空气,PM2.5等信息,详见 NetSearchCmdRet:参考结构体声明中的注释;

        * 注:   针对 6代卡 的网络搜索命令

        ***************************************************************************************************************************/

        /// <summary>

        ///  网络搜索命令,返回:温度传感器,空气,PM2.5等信息,详见 NetSearchCmdRet:参考结构体声明中的注释;

        ///   针对 6代卡 的网络搜索命令

        /// </summary>

        /// <param name="retData">NetSearchCmdRet:参考结构体声明中的注释;</param>

        /// <param name="uartPort">串口号,如:"COM3"</param>

        /// <param name="nBaudRateType">1:9600;   2:57600;</param>

        /// <returns></returns>

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_search_Net_6G(ref NetSearchCmdRet retData, byte[] uartPort, ushort nBaudRateType);

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_search_Net_6G_Web(ref NetSearchCmdRet_Web retData, byte[] uartPort, ushort nBaudRateType);




        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_ofsFormat()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        * 返回值:0 成功, 其他值为错误号

        * 功 能:文件系统格式化

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_ofsFormat(byte[] uartPort, byte baudRate);


        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_ofsStartFileTransf()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        * 返回值:0 成功, 其他值为错误号

        * 功 能:开始批量写文件

        * 注:

        * 发送节目前调用

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_ofsStartFileTransf(byte[] uartPort, byte baudRate);


        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_ofsEndFileTransf()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        * 返回值:0 成功, 其他值为错误号

        * 功 能:写文件结束

        * 注:

        * 发送节目后调用

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_ofsEndFileTransf(byte[] uartPort, byte baudRate);


        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_ofsDeleteFormatFile()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        * fileNub:要删除的文件个数

        * fileName:要删除的文件名

        * 返回值:0 成功, 其他值为错误号

        * 功 能:删除文件

        * 注:

        * fileName是4个字节 fileNub值为N就要把N个fileName拼接 fileName大小 = fileName(4byte)*N

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_ofsDeleteFormatFile(byte[] uartPort, byte baudRate, short fileNub, byte[] fileName);



        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_confDeleteFormatFile()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        * fileNub:要删除的文件个数

        * fileName:要删除的文件名

        * 返回值:0 成功, 其他值为错误号

        * 功 能:删除文件

        * 注:此函数用于对存储在固定位置的文件进行处理, 例

        如: Firmware 文件、 控制器参数配置文件、 扫描配置文件等。

        * fileName是4个字节 fileNub值为N就要把N个fileName拼接 fileName大小 = fileName(4byte)*N

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_confDeleteFormatFile(byte[] uartPort, byte baudRate, short fileNub, byte[] fileName);



        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_ofsGetMemoryVolume()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        * totalMemVolume:全部空间大小

        * availableMemVolume:剩余空间大小

        * 返回值:0 成功, 其他值为错误号

        * 功 能:获取控制空间大小和剩余空间

        * 注:

        * 发节目前需要查询防止空间不够用

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_ofsGetMemoryVolume(byte[] uartPort, byte baudRate, int[] totalMemVolume, int[] availableMemVolume);


        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_ofsWriteFile()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        * fileName:文件名

        * fileType:文件类型

        * fileLen:文件长度

        * fileAddre:文件所在的缓存地址

        * overwrite:是否覆盖控制上的文件 1覆盖 0不覆盖 建议发1

        * 返回值:0 成功, 其他值为错误号

        * 功 能:写文件到控制

        * 注:用于对存储在 OFS 中的文件的处理, 例如: 节目文件, 字库文件、 播放列表文件等

        * 内部包含多条命令注意返回状态方便查找问题

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_ofsWriteFile(byte[] uartPort, byte baudRate, byte[] fileName, byte fileType, uint fileLen, byte overwrite, IntPtr fileAddre);


        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_confWriteFile()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        * fileName:文件名

        * fileType:文件类型

        * fileLen:文件长度

        * fileAddre:文件所在的缓存地址

        * overwrite:是否覆盖控制上的文件 1覆盖 0不覆盖 建议发1

        * 返回值:0 成功, 其他值为错误号

        * 功 能:写文件到控制

        * 注:此函数用于对存储在固定位置的文件进行处理, 例

        如: Firmware 文件、 控制器参数配置文件、 扫描配置文件等。

        * 内部包含多条命令注意返回状态方便查找问题

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_confWriteFile(byte[] uartPort, byte baudRate, byte[] fileName, byte fileType, int fileLen, byte overwrite, byte[] fileAddre);


        /*! ***************************************************************

        * 函数名:       bxDual_cmd_ofsStartReedFile()

        * 参数名:ip:控制器IP, port:控制器端口

        * fileName:需要读取的文件名

        * fileSize:回读文件大小

        * fileCrc:回读的文件CRC

        * 返回值:0 成功, 其他值为错误号

        * 功 能:开始读文件

        * 注:

        *

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_ofsStartReedFile(byte[] uartPort, byte baudRate, byte[] fileName, int[] fileSize, int[] fileCrc);


        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_confStartReedFile()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        * fileName:需要读取的文件名

        * fileSize:回读文件大小

        * fileCrc:回读的文件CRC

        * 返回值:0 成功, 其他值为错误号

        * 功 能:开始读文件

        * 注:此函数用于对存储在固定位置的文件进行处理, 例

        如: Firmware 文件、 控制器参数配置文件、 扫描配置文件等。

        *

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_confStartReedFile(byte[] uartPort, byte baudRate, byte[] fileName, int[] fileSize, int[] fileCrc);



        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_ofsReedFileBlock()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        * fileName:需要读取的文件名

        * fileAddre:传入读文件写的位置

        * 返回值:0 成功, 其他值为错误号

        * 功 能:读文件

        * 注:用于对存储在 OFS 中的文件的处理, 例如: 节目文件, 字库文件、 播放列表文件等

        * fileAddre大小根据cmd_ofsStartReedFile函数回调值确定

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_ofsReedFileBlock(byte[] uartPort, byte baudRate, byte[] fileName, byte[] fileAddre);


        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_confReedFileBlock()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        * fileName:需要读取的文件名

        * fileAddre:传入读文件写的位置

        * 返回值:0 成功, 其他值为错误号

        * 功 能:读文件

        * 注:此函数用于对存储在固定位置的文件进行处理, 例

        如: Firmware 文件、 控制器参数配置文件、 扫描配置文件等。

        * fileAddre大小根据cmd_ofsStartReedFile函数回调值确定

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_confReedFileBlock(byte[] uartPort, byte baudRate, byte[] fileName, byte[] fileAddre);


        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_ofsReedDirBlock()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        * fileName:需要读取的文件名

        * fileAddre:传入读文件写的位置

        * 返回值:0 成功, 其他值为错误号

        * 功 能:下面两条命令搭配使用可以获取所有文件名

        * 注:

        * 下面两条命令用法比较复杂请配合协议使用不做嗷述

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_ofsReedDirBlock(byte[] uartPort, byte baudRate, ref GetDirBlock_G56 dirBlock);


        /*! ***************************************************************

        * 函数名:  bxDual_cmd_ofs_freeDirBlock()

        * 参数名:

        * dirBlock: 上述两条命令所有使用的结构体

        * 返回值:0 成功, 其他值为错误号

        * 功 能:释放cmd_ofsReedDirBlock所创建的节目列表dirBlock

        * 注:

        * dirBlock 上述两条命令调用完成后dirBlock不再使用时用此函数释放文件列表

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_ofsFreeDirBlock(ref GetDirBlock_G56 dirBlock);


        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_ofsGetTransStatus(byte[] uartPort, byte baudRate, byte[] r_w, byte[] fileName, int[] fileCrc, int[] fileOffset);



        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_sendConfigFile()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        configData 请参考结构体ConfigFile

        * 返回值:0 成功, 其他值为错误号

        * 功 能:发送配置文件到控制器

        * 注:

        *

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_sendConfigFile(byte[] uartPort, byte baudRate, ref ConfigFile configData);


        /*! ***************************************************************

        * 函数名:       bxDual_cmd_uart_programLock()

        * 参数名:uartPort:串口端口号, baudRate:波特率

        *         nonvolatile: 状态是否掉电保存 0x00 –掉电不保存  0x01 –掉电保存

        *         lock:0x00 –解锁  0x01 –锁定

        *         name: 节目名称4(byte)个字节

        *         lockDuration: 节目锁定时间长度, 单位为 10 毫秒, 例

        *         如当该值为 100 时表示锁定节目 1 秒.注意: 当该值为 0xffffffff 时表示节目锁定无时间长度限制

        * 返回值:0 成功, 其他值为错误号

        * 功 能:节目锁定

        * 注:

        * 具体使用方法参考协议

        ******************************************************************/

        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_programLock(byte[] uartPort, byte baudRate, byte nonvolatile, byte locked, byte[] name, int lockDuration);



        [DllImport("bx_sdk_dual_server.dll", CharSet = CharSet.Unicode)]

        public static extern int bxDual_cmd_uart_programLock_6G(byte[] uartPort, byte baudRate, byte nonvolatile, byte locked, byte[] name, int lockDuration);




        /*! ***************************************************************

        **  串口通讯命令 end **

        /*! ***************************************************************/




随便看看