控制卡SCL程序员手册范本.docx
《控制卡SCL程序员手册范本.docx》由会员分享,可在线阅读,更多相关《控制卡SCL程序员手册范本.docx(16页珍藏版)》请在冰点文库上搜索。
控制卡SCL程序员手册范本
励研科技SCL程序员手册
第一章概述
在本文的叙述中,一般情况下,针对SuperComm进行解释,圆括号中的“SCL2008:
”则表示SCL2008的区别。
SuperComm控制器播放的图象,每个象素的颜色使用两个字节(byte)来表示,称为16位色图片;SCL2008控制器播放的图象,每个象素仅使用两个位(bit)来表示,称为双色图片。
对于相同大小的图片,SCL2008的数据量仅是SuperComm的八分之一左右。
SuperComm系列/SCL2008系列控制器的存储空间采用FAT16文件管理系统。
SuperComm控制器有SD卡(B盘)和RAM(C盘)两个磁盘,SCL2008有FLASH盘(A盘)和RAM(C盘)两个磁盘。
所有待播放的图片都以文件形式存储在控制器的某个磁盘中。
这些图片的播放方式、停留时间等均由节目表文件来控制。
节目表文件的名字必须是PLAYLIST.LY。
控制器上可以存储多达100套节目,不同的节目及相关的图片文件按照节目的索引存放在不同的目录中。
例如,SD卡上的第0套节目存储在B:
\P00子目录下,RAM盘的第8套节目存储在C:
\P08子目录下。
控制器的节目管理遵循如下结构:
1、一共可以存储100套节目,每套节目按其子目录名进行管理,如P00中存放第0套节目,P09子目录中存放第9套节目。
每次给控制器通电时只能播放一套节目,由Config.Ly中的节目索引来指定播放哪一套节目;
第二章节目表文件PLAYLIST.LY和配置文件Config.ly
§2.1 PLAYLIST.LY概述
节目表文件是一个INI类型的文件。
可以用记事本打开并编辑,也可以用程序自动生成该文件。
节目表文件的基本结构如下:
[Program1]
<定时信息>
<主区域索引>
<区域个数>
[Program1_Screen1]
<区域1的位置和大小>
<区域1播放的项数>
<第1项的属性>
<第2项的属性>
<第n项的属性>
[Program1_Screen2]
<区域2的位置和大小>
<区域2的播放项数>
<第1项的属性>
<第2项的属性>
<第m项的属性>
[Program2]
[Program3]
[ProgramN]
这里,N最大可到200(即一个节目表最大可容纳200个节目)
§2.2 PLAYLIST.LY中的定时信息
每个节目可以规定它的播放时段。
控制器在处理该节目前,会先将定时信息与控制器自带的日历时钟进行比较,若当前时间处于节目的定时时段,则该节目将会被播出,否则该节目不会播出。
一个定时项由如下的定义构成:
TimerX=YYyyMMmmDDddWWwwHHNNhhnn,这里X等于1-8,即可给出8个时间段。
YY:
本时间段的开始年份;
yy:
本时间段的结束年份,若定时与年份无关,则YY=00,yy=99;
MM:
本时间段的开始月份;
mm:
本时间段的结束月份,若定时与月份无关,则MM=01,mm=12,表示从1月到12月;
DD:
本时间段的开始日期;
dd:
本时间段的结束日期,若定时与日期无关,则DD=01,dd=31,表示从1日到31日;
WW:
本时间段的开始周日;
ww:
本时间段的结束周日,若定时与星期几无关,则WW=01,ww=07,表示从周一到周日;
HHNN:
本时间段开始的时分;
hhnn:
本时间段结束的时分,若定时与时分无关,则HHNN=0000,hhnn=2359,表示从0点0分到23点59分。
例如,定在7月、8月的10日到25日之间的星期六、星期日的上午8点到中午12点播放的节目,定时项写成:
Timer1=8001200
Timer1-Timer8都应该一一列出,不可缺少,否则控制器上的播放器会因为查找某个定时项而浪费时间,导致节目间切换的时间变得很长。
不用的定时项可以全部写成0,但第一个定时项必须明确给出,尽管可能该节目根本不使用任何定时属性。
不使用定时属性的定时项写成:
Timer1=0002359
Timer2=0000000
Timer3=0000000
Timer4=0000000
Timer5=0000000
Timer6=0000000
Timer7=0000000
Timer8=0000000
§2.3 PLAYLIST.LY中的主区域索引
每个节目都必须有一个区域是主区域,该节目的播放时间以主区域的播放时间为准。
若主区域中的所有节目项都已播放完毕,则该节目结束。
若从区域的节目项都已播放完毕,但主区域尚未完成,则从区域循环从头开始播放。
主区域的定义格式如下:
MainScreen=n,这里n表示该节目的某个区域的索引,可从1-4之间(SCL2008:
1-3之间)取数,但不得大于其后定义的区域数。
§2.4 PLAYLIST.LY中的区域数
一个节目可以分成几个区域来独立播放。
区域数定义了该节目有多少个独立区域。
SuperComm控制器最大支持四个独立区域,SCL2008控制器最大支持三个独立区域。
区域数的定义格式如下:
Screen=n,这里n可从1-4(SCL2008:
1-3)之间取数。
§2.5 PLAYLIST.LY中的区域位置和大小
每个区域的大小和位置可任意指定。
若这些区域间有重叠,则一般情况下是定义靠后的区域可覆盖定义靠前的区域,除非定义靠后的区域没有数据更新,但定义靠前的区域有新的播放项。
区域的位置和大小定义如下:
Position=Left,Top,Width,Height
Left、Top为该区域的左上角坐标,Width和Height分别为该区域的宽和高。
控制器最大控制围为960列(SCL2008:
可显示4032列,部按4096列处理),512行。
一般情况下控制器安装在显示屏的右侧(正面看屏),所以,Left坐标需要往右调整。
显示屏的最左边的坐标为最大控制围-显示屏宽度。
假设显示屏宽度为256列,则最左边的坐标为960-256=704(SCL2008:
4096-256=3840)。
§2.6 PLAYLIST.LY中的播放项数
一个区域可以安排播放多个文件(每个文件称为一个节目项),每个区域最多可安排播放200个节目项。
播放项数的定义为:
ItemCount=n,这里n就是实际的播放项数,可从0-200。
§2.7 PLAYLIST.LY中的节目项属性
节目项是可播放的一个文件。
定义节目项的格式如下:
ItemN=type,Drv:
PathFileName,Entermode,Step,Staytime
其中:
ItemN:
可为Item1-Item255,后面的数字不可大于前面定义的播放项数,否则该项不会被播出;
type:
文件类型,可取值为字母‘F’、‘P’、‘T’、‘X’或‘S’。
‘F’
FLASH类图片,必须快速直接贴到播放区域中
‘P’
普通的图片
‘T’
时钟项,时钟项文件可显示时间、温度、湿度、串口数据、倒计天数等等
‘X’
文本文件,文本文件要求预先上载字库并在Config.LY中定义安装,文本中可以包含扩展显示码,关于字库和扩展显示码,请参见第七章
‘S’
系统命令,可实现节目表之间的跳转和返回(支持多级跳转,仅支持一级返回)
Drv:
节目项文件所在的驱动器,可取值为A(FLASH盘)、B(SD卡)或C(RAM盘),若文件与节目表文件PLAYLIST.LY在同一驱动器中,则这里的Drv可以省略;
Path:
路径,格式为“\Pxx\”或“\”(这里x为数字字符‘0’-‘9’),前者表示某子目录,后者表示根目录。
若无路径,则表示该文件与节目表位于同一子目录;如果
FileName:
节目项文件名。
SuperComm/SCL2008控制器仅支持8.3格
§2.8 PLAYLIST.LY节目表文件示例
一个包含三个节目的完整的节目表文件示如下:
(节目1包含三个区域,节目2包含2个区域,节目3包含1个区域)
[Program1]
Timer1=0002359
Timer2=0000000
Timer3=0000000
Timer4=0000000
Timer5=0000000
Timer6=0000000
Timer7=0000000
Timer8=0000000
MainScreen=1
Screen=3
[Program1_Screen1]
Position=576,0,263,86
ItemCount=1
Item1=P,SUPERC~1.d01,4,1,5
[Program1_Screen2]
Position=576,90,228,167
ItemCount=2
Item1=P,m71a.j01,0,1,3
Item2=P,zr29a.j01,0,1,3
[Program1_Screen3]
Position=808,90,153,167
ItemCount=1
Item1=T,H8W1C1AQ.tmc,1,1,65535
[Program2]
Timer1=0002359
Timer2=0000000
Timer3=0000000
Timer4=0000000
Timer5=0000000
Timer6=0000000
Timer7=0000000
Timer8=0000000
MainScreen=2
Screen=2
[Program2_Screen1]
Position=576,0,384,29
ItemCount=2
Item1=P,0002a.j01,1,1,5
Item2=P,0003a.j01,1,1,5
[Program2_Screen2]
Position=576,30,384,226
ItemCount=3
Item1=P,34a.x01,0,1,5
Item2=P,ANIMAL~1.j01,0,1,5
Item3=P,auto255c.j01,0,1,5
[Program3]
Timer1=0002359
Timer2=0000000
Timer3=0000000
Timer4=0000000
Timer5=0000000
Timer6=0000000
Timer7=0000000
Timer8=0000000
MainScreen=1
Screen=1
[Program3_Screen1]
Position=576,0,384,256
ItemCount=1
Item1=P,zr29a~00.j01,0,1,5
§2.9 Config.LY文件
配置文件也是INI类型的文件。
可以用记事本打开并编辑,某些情况下节目制作程序会自动生成该文件(指定非0的播放索引,或设定温度控制屏体开关或SW2等)。
配置文件的基本格式如下:
[Startup]
Program_Index=n
[Font]
FontCount=x
Font1=FontFileName1,CharCount1,Mode1,width1,height1[,Byte2Start1[,Code1Start1]]
Font2=FontFileName2,CharCount2,Mode2,width2,height2[,Byte2Start2[,Code1Start2]]
……
Fontx=FontFileNamex,CharCountx,Modex,widthx,heightx[,Byte2Startx[,Code1Startx]]
这里,n表示控制器复位或上电时播放的节目索引,可取围是0-99。
它们对应SD卡的P00-P99目录中的节目表。
x表示装载的字库数,不得大于8;FontFileName是可以含路径的字库文件名,允许在除Pxx类的节目表存放路径之外,使用特定的Fon路径存放字库;CharCount是字库中的字符数;Mode表示查表方式,可以指定‘C’或‘A’两种模式之一,‘C’表示双字节编码,‘A’表示直接查表的ASCII字符;width是字符的宽度;height是字符的高度。
对于汉字或其它语言的本地编码,一般都是双字节编码。
且第一个字节的编码大于0x80。
简体汉字的编码的两个字节都从0xA0开始。
Byte2Start给出编码的第二字节的开始代码,例如,简体汉字库为0xA0,此处就直接写A0,繁体汉字库为0x40,此处就写40;Byte1Start给出编码的第一字节的开始码,例如简体汉字为0xA0,则此处直接写A0,繁体汉字库为0x80,此处就写80。
它们的缺省值都是0x80。
Byte2Start和Byte1Start的使用可大大减少字库文件的长度,并且可以更有效的兼容其它语言的编码。
第三章文件格式
§3.1 XMP图片格式
一个XMP图片中象素的存储顺序为先行后列,例如,对下面这个图片,取点顺序为:
Aa,Ba,Ca,Da,……Sa,
Ab,Bb,Cb,Db,……Sb,
.....
Ah,Bh,Ch,Dh,……Sh
16位色XMP:
在SuperComm控制器中,每2个字节表示1个象素。
对于一个高度为H,宽度为W的图片,使用H*W*2个字节存储一个XMP图片。
双色无灰度XMP:
在SCL2008控制器中,每2个位表示1个象素,每个字节可以表示垂直方向的4个象素,对于一个高度为H,宽度为W的图片,使用(H+3)/4*W个字节存储一个XMP图片(这里的/是整除)。
行数较小的存储在字节中位序较小的位置,d7,d5,d3,d1代表绿色,d6,d4,d2,d0代表红色,相邻两位表示一个点。
对于上面的图片,第A行的颜色存储在d1,d0中,第B行的颜色存储在d3,d2中,第C行的颜色存储在d5,d4中…
单色无灰度XMP:
字库则是1位表示1个象素的XMP图片,每个字节可存储垂直方向的8个点,对于一个高度为H,宽度为W的字体,使用(H+7)/8*W表示一个字(这里的/是整除)。
行数较小的存储在字节中位序较大的位置。
对于上面的字形,第A行存储在d7,第B行存储在d6,第C行存储在d5……
§3.2 XMP文件格式
每个XMP格式文件有6字节的文件头:
BYTE XMPType
BYTE PictureCount
WORD Height
WORD Width
其中:
XMPType:
XMP文件的格式类型
PictureCount:
该XMP文件中包含的图片数量
Height:
XMP文件中最大图片的高度,单位:
象素
Width:
XMP文件中最大图片的宽度,单位:
象素
若XMPType=0,表示是16位色XMP图片,在XMP文件头之后,每个XMP图片之前还有4个字节表示该XMP图片的实际高度和宽度;
若XMPType=1,表示是双色无灰度XMP图片,在XMP文件头之后,每个XMP图片之前还有4个字节表示该XMP图片的实际高度和宽度;
若XMPType=2,表示是16位色相同大小的XMP图片,在XMP文件头之后顺序排列各XMP图片。
若XMPType=3,表示是三色无灰度的XMP图片,在XMP文件头之后,每个XMP图片之前还有4个字节表示该XMP图片的实际高度和宽度;
§3.3 TMC文件格式
节目表中,标记为‘T’播放项是时钟项,对应的播放文件是时钟类文件,一般使用后缀“TMC”。
该文件由四部分组成:
[文件头][显示项1][显示项2]……[字库1][字库2]……[背景图]
[文件头],12字节:
[文件版本],2字节
1:
SuperComm的TMC文件,背景图为三色16位色的XMP图片;
2:
SuperComm的TMC文件,背景图为双色16位色的XMP图片;
3:
SCL2008的TMC文件,背景图为双色无灰度XMP图片
4:
保留
5:
SCL2008的TMC文件,背景图为三色无灰度XMP图片
[背景图的高度],2字节
[背景图的宽度],2字节
[文件中的显示项数],2字节
[本文件中包含的字库数],2字节
[背景图在本文件中的偏移量],2字节
[显示项],24字节:
[显示项类型],1字节。
类型代码如下:
1:
年,2:
月,3:
日,4:
星期,5:
时,6:
分,7:
秒,8:
温度,9:
湿度,10:
倒计时,11:
串口数据
[显示颜色],3字节,第一字节为红色,第二字节为绿色,第三字节为蓝色
[使用的字库在本文件中的偏移量],2字节
[显示位数],1字节
[显示项特征],1字节,对倒计时项为计数方向,正计(0)倒计
(1);对串口数据为参数序号(1-8);对‘小时’数据为有符号数,用做显示小时数据的时区偏移值(例如,假设控制器时钟的小时值为‘3’,本字段为-2,则显示为‘1’),对温度数据为摄氏(0)华氏
(1)选择
[倒计时初始值],4字节,长整数
[串口数据的串口编号],1字节,0:
串口1,1:
串口2,2:
串口3
[数字首0不显示标记],1字节,0:
显示首0,1:
不显示首0
[修改本项的年],1字节,对1000取模
[修改本项的月],1字节
[修改本项的日],1字节。
上述三项与初始值配合,用于控制器自动计算倒计时
[未用],1字节
[显示项输出的垂直坐标],2字节
[显示项输出的水平坐标],2字节
[未用],2字节
[字库]:
[字型高度],2字节
[字型宽度],2字节
[每个字使用的字节数],2字节
[字符点阵],按照“先行后列,每个字节表示垂直方向的8点”的格式依序存放字符‘0’-‘9’、‘+’、‘-’、空格、小数点的显示点阵(每个字的点阵是单色XMP图片)
[背景图]:
为一个XMP图片,遵循[文件头]中的图片[高度]和[宽度]。
若[文件版本]=2,则是16位色XMP图片;若[文件版本]=3,则是双色XMP图片。
TMC文件中各类结构的C语言格式如下:
#define WORDunsignedshort;
#define BYTEunsignedchar;
struct Tmc_Head
{
WORD Flag;
WORD AreaHeight;
WORD AreaWidth;
WORD ItemCount;
WORD FontCount;
WORD BkGroundOffset;
};
struct Item_Struct
{
BYTE AType;
BYTE Color_Red;
BYTE Color_Green;
BYTE Color_Blue;
WORD FontOffset;
BYTE BitCount;
Signedchar CountDir;//当AType=5为’时’,此字段为时区偏移
long Value;
BYTE ComPort;
BYTE HideZero;
BYTE Year;
BYTE Month;
BYTE Day;
BYTE NC0;
short YPosi;
short XPosi;
WORD NC1;
};
structFont_Struct
{
WORD CharHeight;
WORD CharWidth;
WORD ByteCount;
BYTE Font[];
};
TMC文件中各类结构的Delphi语言格式如下:
Tmc_Head=PackedRecord
Flag :
WORD;
AreaHeight :
WORD;
AreaWidth :
WORD;
ItemCount :
WORD;
FontCount :
WORD;
BkGroundOffset :
WORD;
End;
Item_Struct=PackedRecord
Atype :
BYTE;
Color_Red :
BYTE;
Color_Green :
BYTE;
Color_Blue :
BYTE;
FontOffset :
WORD;
BitCount :
BYTE;
CountDir :
shortint; //当AType=5为’时’,为时区偏移,
Value :
Integer;
ComPort :
BYTE;
HideZero :
BYTE;
Year :
BYTE;
Month :
BYTE;
Day :
BYTE;
NC0 :
BYTE;
Yposi :
Smallint;
Xposi :
Smallint;
NC1 :
WORD;
End;
Font_Struct=PackedRecord
CharHeight :
WORD;
CharWidth :
WORD;
ByteCount :
WORD;
Font :
ArrayOfBYTE;
End;
§3.4 字库文件格式
所有字的单色无灰度