
#ifndef YkPosdll
#define YkPosdll


typedef int (__stdcall *CallBack)(unsigned char  pParam);

#ifdef __cplusplus
extern "C"
{
#endif

#define	PRINTER_TYPE 0   ///  1  清单打印机关干部 0   发票打印机


///串口
#define COM1	1
#define COM2	2
#define COM3	3
#define COM4	4
#define COM5	5
#define COM6	6
#define COM7	7
#define COM8	8
#define COM9	9
#define COM10	10
///并口
#define LPT1	11
#define LPT2	12

///USB 口
#define USB		13

///(有线或无线WIFI)网络 打印机
#define NET		14


///打印机状态（缺纸，机械故障等）
#define  S_SUCCESS  0     ///状态正常
#define S_COVER_OPEN  0x0001   ///机盖（抬杆）打开  
#define S_CUTTER_ERR  0x0002   ///切刀错误
#define S_WARNINGUP_ERR  0x0004   ///机头温度过高，稍停顿打印会恢复正常
#define S_PAPER_EMPTY  0x0008   ///缺纸
#define S_OTHER_ERR  0x0010   ///其他错误

///状态码   清单打印机
#if PRINTER_TYPE==1

#define S_COMMUNICATION_OK	1000   ///正常
#define S_COMMUNICATION_FAILED	-1000    ///通讯故障
#define S_DEVICE_FAULT	1001    ///设备故障
#define S_PAPER_OUT	1002    ////缺纸
#define S_PAPER_JAM		1003     ///卡纸
#define S_PAPER_NEAR_END	1004   ///纸将尽

#else   ///发票打印机

#define S_COMMUNICATION_OK	1000   ///正常
#define S_COMMUNICATION_FAILED	-1010    ///通讯故障
#define S_DEVICE_FAULT	1011    ///设备故障
#define S_PAPER_OUT	1012    ////缺纸
#define S_PAPER_JAM		1013     ///卡纸
#define S_PAPER_NEAR_END	1014   ///纸将尽



#endif

HANDLE OpenUsbPrinterByName(LPCTSTR PrinterName);



//函数功能：连接打印机设备
//参数: iport -- 设备通信接口号，如COM1 - 1 COM2 - 2   如此类推；
//参数：baud -- 波特率 9600 , 38400 , 115200  or 工作端口号 (网络)
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkOpenDevice(int iport,int baud);

//函数功能：断开打印设备
//参数：无
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkCloseDevice();

//函数功能：获取设备的操作句柄
//参数：无
//返回值：>0 -- 句柄值   -1  --  失败
int __stdcall YkGetDeviceHandle();


//函数功能：设备是否已经到连接计算机(仅支持USB口打印机)
//参数：无
//返回值：>0 -- 连接   -1  --  没有连接
int __stdcall YkIsConnected();



//函数功能：初始化打印机 〈详见命令：ESC @〉
//参数：无
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkInitPrinter();

//函数功能：把将要打印的字符串送入打印机缓冲区(注: 达到满行时会自动打印出来)
//参数：pstr -- 将要送打印机的字符串数据缓冲，len -- 字符串数据长度
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkPrintStr(char *pstr);

//函数功能：打印并回车,但不走纸〈详见命令：CR〉
//参数：无
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkEnter();

//函数功能：打印并换行，走纸到下一行首〈详见命令：LF〉
//参数：无
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkFeedPaper();

//函数功能：页模式下，取消打印数据〈详见命令：CAN〉
//参数：无
//返回值：0 -- 成功   -1  --  失败
int  __stdcall YkCancelPrintInPM();

//函数功能：实时响应主机请求,  〈详见命令：DLE ENQ n〉
//参数：n=1：从错误状态恢复，从错误状态出现的行重新开始打印。
//参数：n=2：清除接收缓冲区，打印缓冲区内容。
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkResponse(int n);

//函数功能：Tab水平定位,从下一个水平定位点位置开始打印。〈详见命令：HT〉
//参数：无 
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkTabMove(); 

//函数功能：页模式下，打印数据〈详见命令：ESC FF〉
//参数：无 
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkPrintInPM();          

//函数功能：设置西文字符右间距，以半点为设定单位〈详见命令：ESC SP n〉
//参数：n = 0~255 ,default = 0
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetCharRightSpace(int n=0);

//函数功能：设置字符打印方式〈详见命令：ESC ! n〉
//参数：n = 0~255 ,default = 0
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetFontStyle(int n=0);

//函数功能：设置绝对打印位置，〈详见命令:ESC $ nL nH〉
//参数：nL -- 位置数值的低字节，nH -- 位置数值的高字节 ,0 ≤ (nL + nH × 256) ≤ 65535 (0 ≤ nL ≤ 255 , 0 ≤ nH ≤ 255)
//返回值：0 -- 成功   -1  --  失败
int YkSetAbsPrnPos(int nL,int nH);

//函数功能：使能/禁用用户自定义字符户〈详见命令:ESC % n〉
//参数：n = 0~255 ,default = 0
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkEnableUserDefineChar(int n=0);

//函数功能：设置用户自定义字符， 〈详见命令：ESC & y c1 c2 [ x1 d1...d(y×x1)]...[ xk d1...d(y×xk)]〉
//参数：c1, c2分别为起始码和终止码，最多为95个。
//参数：字符宽度，以点为单位，视用什么字体大小而定
//参数：code --自定义字符的内码值，例：使用Font B字体,把空格定义为黑块 内码为c1=0x20，c2=0x20，code[0]=0xff，code[1]=0xff...code[26]=0xff
// YkSetUserDefineChar(0x20,0x20,9,code);
///以下数据详见说明书
//y==3
//0 ≤ x ≤ 12 [Font A (12 × 24)]
//0 ≤ x ≤ 9 [Font B (9 × 17)]
//k = c2 – c1 +1
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetUserDefineChar(int c1,int c2,int x, unsigned char code[]);

//函数功能：使能或禁用字符加下画线功能   〈详见命令：ESC - n〉
//参数：n=1 使能，n=0 禁用，默认值n＝0。  
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkEnableUnderLine(int n=0);           

//函数功能：设置字符行距为默认值3.75毫米 〈详见命令：ESC 2〉
//参数：无
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetDefaultLineSpace();

//设置字符行距 〈详见命令：ESC 3 n〉
//参数：n=0~255,默认 n=30
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetLineSpace(int n=30);

//函数功能：取消用户自定义字符, 〈详见命令：ESC ? n〉
//参数：n=32~126
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkCancelUserDefChar(int n);  

//函数功能：设置水平制表位置 〈详见命令：ESC D〉
//参数：tabstr --tab 位置值组成的字符串序列，如
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetTabPos(char * tabstr);   

//函数功能：使能或禁用加重打印模式 〈详见命令： ESC E n〉
//参数：n =0 禁用 n=1 使能
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetEmphasized(int n);

//函数功能：使能或禁用重叠打印模式 〈详见命令： ESC G〉
//参数：n =0 禁用 n=1 使能
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkOverlap(int n);

//函数功能：打印后走纸 n 点行(注：可以精确走纸 1点行=0.125mm) 〈详见命令： ESC J n〉
//参数：n =0~255
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkPrnAndFeedPaper(int n);

//函数功能：进入页模式工作 〈详见命令：ESC L〉
//参数：无
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkEnablePM();

//函数功能：选择字符字型  〈详见命令：ESC M〉
//参数：n=0  选择字型 A (12×24); n=1 选择字型 B (9×17)
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSelectFont(int n);

//函数功能：设置11个国家的不同ASCII字符集 〈详见命令：ESC R n〉
//参数： n 国家代号
/*
	n	 International character set

	0	 U.S.A.
	1	 France
	2	 Germany
	3	 U.K.
	4	 Denmark I
	5	 Sweden
	6	 Italy
	7	 Spain I
	8	 Japan
	9	 Norway
	10	 Denmark II
	11	 Spain II
	12	 Latin America
	13	 Korea
	14	 Slovenia / Croatia
	15	 China
*/
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetInterCharSet(int n=0);

//函数功能：从页模式切换到标准模式 〈详见命令：ESC S〉
//参数：无
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkEnterSM();

//函数功能：页模式下，设置打印方向,  〈详见命令：ESC T n〉
//参数：n=0~3 ; 
/*
	n	Print direction		Starting position
	0	Left to right		Upper left
	1	Bottom to top		Lower left
	2	Right to left		Lower right
	3	Top to bottom		Upper right
*/
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetDirectionInPM(int n);

//函数功能：使能或禁用顺时针90度旋转字符打印,  〈详见命令：ESC V n〉
//参数：n=0禁用顺时针90度旋转打印 n=1 使能顺时针90度旋转打印
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkClockwiseD90(int n);

//函数功能：页模式下，设置设置打印区域，打印页长度范围(76~185mm),打印宽度(最大72mm) 〈详见命令：ESC W xL xH yL yH dxL dxH dyL dyH〉
//参数：left 打印区域左上角x坐标 top 打印区域左上角y坐标 width  打印区域宽度 height 打印区域高度
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetPrnAreaInPM(int left,int top,int width,int height);

//函数功能：设置相对打印位置     〈详见命令：ESC \ nL nH〉
//参数：nL ,nH ;  实际位置= (nL + nH x 256)x0.125 毫米
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetRelPrnPos(int nL,int nH);

//函数功能：设置打印时的对齐方式   〈详见命令：ESC  a n〉
//参数：n=0 左对齐    n=1 居中  n=2	右对齐
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetAlign(int n);

//函数功能：设置测纸传感器输出缺纸信号   〈详见命令：ESC c 3 n〉
//参数：n=0~255 , 各位定义，详见命令说明书表格说明
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetPaperSensor(int n);

//函数功能：设置纸尽时停止打印    〈详见命令：ESC c 4 n〉
//参数：n=0~255 , 各位定义，详见命令说明书表格说明
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetSensorToStopPrint(int n);

//函数功能：使能或禁用打印机面板上的开关  〈详见命令：ESC c 5 n〉
//参数：n=0 禁用 n=1 使能
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkEnablePanelButton(int n=0);

//函数功能：打印后走纸n字符行   〈详见命令：ESC d n〉
//参数：n 字符行数
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkPrnAndFeedLine(int n); 

//函数功能：设置字符代码表      〈详见命令：ESC t n〉
//参数：n 代码表代号 取值范围：0 ≤ n ≤ 5 , 16 ≤ n ≤ 19 , n = 255
/*
n	Character code table
0	Page 0 [PC437 (USA: Standard Europe)]
1	Page 1 [Katakana]
2	Page 2 [PC850 (Multilingual)]
3	Page 3 [PC860 (Portuguese)]
4	Page 4 [PC863 (Canadian-French)
5	Page 5 [PC865 (Nordic)]
16	Page 16 [WPC1252]
17	Page 17 [PC866 (Cyrillic #2)]
18	Page 18 [PC852 (Latin 2)]
19	Page 19 [PC858 (Euro)]
255 Page 255 [User-defined page]
*/
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetCharCodeTable(int n);

//函数功能：走黑标纸到打印起始位置    〈详见命令：GS FF〉
//参数：无
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkFeedToStartPos();

//函数功能：设置字符倍数             〈详见命令：GS ! n〉
//参数：hsize 水平放大倍数 vsize 垂直放在倍数 ,取值范围0~7 
/*
hsize ,vsize 值与倍数对应关系
0	1倍（原大小）
1	2倍
2	3倍
3	4倍
4	5倍
5	6倍
6	7倍
7	8倍
*/
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetCharSize(int hsize,int vsize);

//函数功能：页模式下，设置打印区域内绝对垂直打印起始位置    〈详见命令：GS $ nL nH〉
//参数：nL nH 位置值  位置 = (nL + nH x256) x 0.125 毫米
//返回值：0 -- 成功   -1  --  失败
int YkSetAbsVertPosInPM(int nL,int nH);

//函数功能：进行测试打印         〈详见命令：GS ( A pL pH n m〉
//参数：n,m
/*
	n 指定测试时的纸张来源

	0	Basic sheet (roll paper)
	1	Roll paper
	2	Roll paper

	m 指定测试样式

	1	Hexadecimal dump print
	2	Printer status print
	3	Rolling pattern print

*/
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkDoTestPrint(int n,int m);



//函数功能：进入或退出用户设置模式    〈详见命令:GS ( E pL pH 〉
//参数：m=1 进入  m=2 退出
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkUserDefCmd(int m);



//函数功能：设置MemorySwitch开关                    〈详见命令:GS ( E pL pH 〉 
//参数：n=0~7对应MemorySwitch开关1～8。
//参数：数组memory[]对应memory1~8每个开关值。             
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetMemorySwitch(int n, int memory[]);  ///???

//函数功能：读取MemorySwitch开关值      〈详见命令:GS ( E pL pH〉
//参数：n=0~7对应MemorySwitch开关1～8。
//参数：数组memory[]用于存储读回来对应memory1~8每个开关值。             
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkGetMemorySwitch(int n,unsigned char memory[11]); ///???

//函数功能：设置黑标的切撕纸位置和起始打印位置        〈详见命令:GS ( F pL pH a m〉
//参数a =1 设置起始打印位置的设定值 a=2 设置开始切纸位置的设定值
//参数m = 0 指定为前向进纸的方向 m = 1 指定为逆向进纸的方向
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetBlackMarkParam(int a,int m,int nL,int nH);

//函数功能：(注：按工作状态功能有所不同)〈详见命令：FF〉
//	页模式：打印后返回到标准模式
//	黑标模式：打印后走黑标到打印起始位置。 
//参数：无
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkPrnAndBackToStd();

//函数功能：定制打印机控制值。         〈详见命令:GS ( M pL pH a n m〉
//参数：
/*
	保存或者载入命令所定义的数据。

	n	功能

	1	将命令GS ( F 所设置的数据保存到用户NV 存储器。
	2	从用户NV 存储器载入命令GS ( F 所设置的数据。
	3	指定在初始设定时禁止或允许自动数据载入程序。

	m 指定数据如下：

	m = 0	与该规格参考手册所叙述的GS ( F 命令的初始设定值相同。
	m = 1	将被保存的存储区。
*/
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkDefineControl(int n,int m);

//函数功能：设置条码HRI字符的打印位置             〈详见命令:GS H n〉
//参数：n=0 不打印,n=1 条形码上方,n=2条形码下方,n=3条形码的上方和下方
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetHRIPos(int n=0);

//函数功能：读取打印机ID         〈详见命令:GS I n〉
//参数：n=1~3   不同型号机型，具体内容不同，请查说明书
/*
n	打印机ID
1	打印机型号ID 
2	类型ID 见说明书类型表
3	固件版本ID 
*/
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkGetPrinterID(int n);

//函数功能：设置左边距             〈详见命令:GS L nL nH〉
//参数：nL nH  左边距=(nL + nH x 256) x 0.125 毫米
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetLeftMargin(int nL,int nH);


//函数功能：打印位置设置为打印行起点         〈详见命令:GS T n〉
//参数：n=0 删除打印缓冲区中的所有数据后设置打印位置为打印行起始点 n=1 将打印缓冲区中的所有数据打印后设置打印位置为打印行起始点
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkToLineHome(int n);

//函数功能：执行切纸动作，包括进纸    〈详见命令：GS V m〉
//参数：m=66 n:打印机进纸到(切纸位置+ [n × 0.125 毫米{0.0049英寸}])并切纸，一般n=0
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkCutPaper(int m,int n);

//函数功能：设置打印区域宽度。           〈详见命令：GS W nL nH〉
//参数：nL --打印区域宽度低字节 nH -- 打印区域宽度高字节
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetPrnAreaWidth(int nL,int nH);

//函数功能：页模式下，设置相对于当前位置的垂直打印起点位置  〈详见命令：GS \ nL nH〉
//参数：nL --位置低字节 nH -- 位置高字节
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetRelVertPosInPM(int nL,int nH);

//函数功能：使能或禁用自动状态回复功能(ASB)        〈详见命令：GS a n〉
//参数：0 -- 禁用  1 -- 使能
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkEnableASB(int n);

//函数功能：使能或禁用平滑模式       〈详见命令：GS b n〉
//参数：0 -- 禁用  1 -- 使能
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkEnableSmoothPrn(int n);

// 函数功能：设置条码的HRI字符字型          〈详见命令：GS f n〉
//参数：0 -- 字体A (12 × 24)  1 -- 字体B (9 × 17)
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetHRICharStyle(int n);

//函数功能：设置条码高度             〈详见命令：GS h n〉
//参数：n=1~255  垂直方向的点数
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetBarCodeHeight(int n);

//函数功能：打印条码                  〈详见命令：GS k m n d1 ... dn〉
//参数：m=65~75
/*
m	条形码系统		字符个数			备注
65	UPC-A			11 ≤ n ≤ 12		48 ≤ d ≤ 57
66	UPC-E			11 ≤ n ≤ 12		48 ≤ d ≤ 57
67	JAN13 (EAN13)	12 ≤ n ≤ 13		48 ≤ d ≤ 57
68	JAN8 (EAN8)		7 ≤ n ≤ 8			48 ≤ d ≤ 57
69	CODE39			1 ≤ n ≤ 255		48 ≤ d ≤ 57, 65 ≤ d ≤ 90, 32, 36,37, 43, 45, 46, 47
70	ITF				1 ≤ n ≤ 255 (n 为偶数) 48 ≤ d ≤ 57
71	CODABAR			1 ≤ n ≤ 255		48 ≤ d ≤ 57, 65 ≤ d ≤ 68, 36, 43,45, 46, 47, 58
72	CODE93			1 ≤ n ≤ 255		0 ≤ d ≤ 127
73	CODE128			1 ≤ n ≤ 255		0 ≤ d ≤ 127
74	标准EAN13		12 ≤ n ≤ 13		48 ≤ d ≤ 57
75	标准EAN8		7 ≤ n ≤ 8			48 ≤ d ≤ 57
*/
//参数：n 上表中字符个数
//参数：barcode 要转化为条码的数据
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkPrintBarCode(int m,int n,char * barcode);

//函数功能：获取打印机状态,   〈详见命令：DLE EOT  n〉
//参数：n = 1~5 
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkGetStatus(unsigned char n);

//函数功能：读取打印机状态                   〈详见命令：GS r n〉
//参数：n=1 传送打印纸传感器状态
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkGetPrinterStatus(unsigned char n);

//函数功能：设置条码宽度              〈详见命令：GS w n〉
//参数：参数n=2~6
/*
											二元条形码
  n		多元条形码单位宽度(毫米)	窄条宽度(毫米)		宽条宽度(毫米)
  2		0.250						0.250				0.625
  3		0.375						0.375				1.000
  4		0.560						0.500				1.250
  5		0.625						0.625				1.625
  6		0.750						0.750				2.000
*/
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetBarCodeWidth(int n);

//函数功能：设置汉字字符打印模式组合。〈详见命令：FS ! n〉
//参数：n=0~255 详见命令说明书中表格
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetChineseFontStyle(int n);

//函数功能：进入汉字打印方式。〈详见命令：FS &〉
//参数：无
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkEnableChineseMode();


//函数功能：退出汉字打印方式。〈详见命令：FS .〉
//参数：无
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkDisableChineseMode();

//函数功能：使能或禁用汉字下划线模式。〈详见命令：FS - n〉
//参数：n=0 禁用 n=1 使能
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkEnableChineseUnderLine(int n);


//函数功能：定义用户自定义汉字 〈详见命令：FS 2 c1 c2 d1...dk〉
//参数：c1、c2汉字用户自定义汉字区内的区位码，详见说明书表格，如汉字区GB18030,c1 = FE A1 ≤ c2 ≤ FE  ,k=72,数组d元素取值范围0~255
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetUserDefChinese(int c1,int c2,int code[]);

//函数功能：设置用户自定义字符代码系统    〈详见命令：FS C n〉
//参数：自定义字符代码系统代号 n= 0~1
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetUserDefChineseArea(int n);

//函数功能：设置汉字字符左右间距   〈详见命令：FS S n1 n2〉
//参数：左间距n1,右间距n2,0 ≤ n1 ≤ 255,0 ≤ n2 ≤ 255
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetChineseLeftRightSpace(int n1,int n2);

//函数功能：使能或禁用汉字四倍大小打印。〈详见命令：FS W n〉
//参数：n=0 禁用 n=1 使能
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetChinese4TimesSize(int n);

//函数功能：使能或禁用颠倒打印模式〈详见命令: ESC { n〉
//参数：n=0 禁用 n=1 使能
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkEnableUpsidedown(int n);

//函数功能：打印预定义位图      〈详见命令: FS p n m〉
//参数：m 打印密度
/*  m	效果	垂直密度(dpi)	水平密度(dpi)
	0	普通	203				203
	1	倍宽	203				101
	2	倍高	101				203
	3	4倍		101				101
*/
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkPrintDefineBitmap(int m,int n); 

//函数功能：下载预定义位图      〈详见命令: FS q n〉
//参数：szBmpFile，要下载的位图的全路径。
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkDefineBitmap(char *szBmpFile);

//函数功能：即时打印BMP图象。    〈详见命令:ESC * m nL nH d1...dk 〉
//参数：szBmpFile，要下载的位图的全路径。
/*
	m		垂直密度	水平密度
	0		60			90
	1		60			180
	32		180			90
	33		180			180
	一般 m=33
*/
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkPrintBitmap(char *szBmpFile,int m);

//函数功能：下装图形后即时打印。       〈详见命令：先执行GS * ，后执行 GS / m〉
//参数：szBmpFile，要下载的位图的全路径。
/*
	m	效果	垂直密度(dpi)	水平密度(dpi)
	0	普通	180			180
	1	倍宽	180			90
	2	倍高	90			180
	3	四倍	90			90
	一般 m=0
*/
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkDownloadBitmapAndPrint(char *szBmpFile,int m);


///函数功能：设置钱箱驱动方式    〈详见命令： ESC p m t1 t2〉
//参数：使用那个管脚输出脉冲  m=0  2脚  m=1  5脚    脉冲宽度为 t1*2ms t2*2ms ，其中要求 t1 < t2 ，一般 t1=150 t2=250
//返回值：0 -- 成功   -1  --  失败
int YkSetCashBoxDriveMode(int m,int t1,int t2);


//函数功能：设置单状态回调函数(注：适用于能返回状态的打印机型号，如串口打印机)
//参数：pCallBack -- 回调函数指针
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkSetCallBack(CallBack pCallBack);

//函数功能：使能打印状态回调函数，方便在回调函数根据打印机状态处理业务流程
//参数：enable = 1 ，使能  =0 禁用
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkEnableCallBack(int enable=0);


//函数功能：直接与设备数据交互通信(注: 不熟悉设备功能，不建议直接使用)
//参数：pdata -- 将要送打印机的数据缓冲，len -- 数据长度
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkDirectIO(unsigned char *pdata,int len);


//函数功能：写入打印机序列号（仅使用于杭州宽达公司）
//参数：pdata -- 将要写入的打印机序列号的的数据缓冲,字符串以0结尾
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkWriteSerialNo(char *pdata);

//函数功能：读取打印机序列号（仅使用于杭州宽达公司）
//参数：pdata -- 将要接收打印机序列号的的数据缓冲,字符串以0结尾
//返回值：0 -- 成功   -1  --  失败
int __stdcall YkReadSerialNo(char *pdata);

int __stdcall YkPrintRasterBmp(char *szBmpFile);

int __stdcall YkGetState();

////通用函数

/*
函数描述：设置字体
		 变量名称			类型		变量含义		备注
入口参数：
		iInDoubleHieght		int			倍高
		iInDoubleWide		int			倍宽
			iInCharB		int			字符B		在默认高度和宽度下：
													0:每行52字符
													1:每行70字符
返回值：					int						0:成功
													1:失败					
*/

int __stdcall SetFont(int iInDoubleHeight,int iInDoubleWide,int iInCharB);


/*
函数描述：设置左边距
		 变量名称			类型		变量含义		备注
入口参数：
		iInDistance			int			左边距单位		 单位：0.1mm
返回值：					int							0:成功
														1:失败					
*/

int __stdcall SetLeftDistance(int iInDistance);

/*
函数描述：设置行高
		 变量名称			类型		变量含义		备注
入口参数：
		iInDistance			int			行间距		 单位：0.1mm 等于0时默认高3.75mm
返回值：					int							0:成功
														1:失败					
*/

int __stdcall SetRowDistance(int iInDistance);


/*
函数描述：打印位图LOGO
		 变量名称			类型		变量含义		备注
入口参数：
		pcInBmpFile			char*		Bmp文件名		支持相对路径和绝对路径，图片采用黑白单色bmp格式(一点占一位),分辩率300*100左右,大小不超过5k
返回值：					int							0:成功
														1:失败					
*/

int __stdcall PrintBmp(char* pcInBmpFile);


/*
函数描述：打印字符
		 变量名称			类型		变量含义		备注
入口参数：
		pcInstring			char*		需打印字符		不自动换行
返回值：					int							0:成功
														1:失败					
*/

int __stdcall PrintString(char* pcInstring);


/*
函数描述：打印字符
		 变量名称			类型		变量含义				备注
入口参数：
		pcInstring			char*		需打印的一行字符		自动换行
返回值：					int							0:成功
														1:失败					
*/

int __stdcall PrintLine(char* pcInstring);


/*
函数描述：切纸
		 变量名称			类型		变量含义				备注
入口参数：
		iInCutMode			int		切纸方式		0:全切  1:半切
返回值：					int							0:成功
														1:失败					
*/

int __stdcall CutPaper(int iInCutMode);


/*
函数描述：设置黑标切纸位置
		 变量名称			类型		变量含义				备注
入口参数：
		iInn				int			黑标切纸位置		单位:0.1mm n=0:切纸到黑标位置 n>0切纸位置在黑标下边 n<0 切纸位置在黑标上边
返回值：					int								0:成功
															1:失败					
*/

int __stdcall SetBlackMark(int iInn);


/*
函数描述：走纸
		 变量名称			类型		变量含义				备注
入口参数：
		iInDistance			int			0.1mm		单位:0.1mm 
返回值：					int								0:成功
															1:失败					
*/

int __stdcall FeedPaper(int iInDistance);




#ifdef __cplusplus
}
#endif

#endif