// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 JSPRINTERDLL_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样，源文件中包含此文件的任何其他项目都会将
// JSPRINTERDLL_API 函数视为是从 DLL 导入的，而此 DLL 则将用此宏定义的
// 符号视为是被导出的。

#pragma once

#include <winsock2.h>
#ifdef JSPRINTERDLL_EXPORTS
#define JSPRINTERDLL_API __declspec(dllexport)
#else
#define JSPRINTERDLL_API __declspec(dllimport)
#endif



/********网口打印机操作API*************/

// InitNetSev 初始化网络环境,必须最开始就调用,返回 0 失败 1 成功

// ConnectNetPortByIp 连接打印机,必须是同一网段，打印机默认端口号是9100，连接超时时间5秒，
// 返回一个句柄索引fs,大于等于0 成功，小于0失败

// WriteToNetPort fs句柄由 ConnectNetPortByIp 返回，SendBuf 是要发送的字节缓冲区,SendBufSize 要发送的数据长度，返回小于等于0 表示错误，其他表示发送成功的数据 数据采用ANSCII 编码，其他编码要先转换成 ANSCII 编码

// ReadFromNetPort fs句柄由 ConnectNetPortByIp 返回，RecvBuf 是要接收数据的字节缓冲区,RecvBufSize 是要接收数据的字节缓冲区长度，返回小于等于0 表示错误，其他表示接收的数据长度

// CloseNetPor fs句柄由 ConnectNetPortByIp 返回，返回 0 失败 1 成功 结束发送任务后调用

// CloseNetServ 反初始化网络环境,不通讯后需要调用,返回 0 失败 1 成功

JSPRINTERDLL_API BOOL _stdcall InitNetSev(); //启动SOCKET服务
JSPRINTERDLL_API int _stdcall ConnectNetPortByIp(char *ip, int port=9100, int Timeout=5000);
JSPRINTERDLL_API int _stdcall WriteToNetPort(int fs, char *SendBuf, int SendBufSize);
JSPRINTERDLL_API int _stdcall ReadFromNetPort(int fs, char *RecvBuf, int RecvBufSize);
JSPRINTERDLL_API BOOL _stdcall CloseNetPor(int fs);
JSPRINTERDLL_API BOOL _stdcall CloseNetServ();





/********USB口打印机操作API**************/

// OpenUsbByVidPid 打开指定VIP,PID的USB打印机，返回一个句柄索引fs,fs大于等于0成功，小于0 错误 特殊用途才使用

// OpenUsb 打开本公司的打印机，返回一个句柄索引fs,fs大于等于0成功，小于0 错误。建议使用

// WriteUsb 发送数据，句柄索引fs 由 OpenUsb 或者 OpenUsbByVidPid 返回,SendBuf 要发送的字节缓冲区,SendBufSize 要发送的字节数，数据采用ANSCII 编码，其他编码要先转换成 ANSCII 编码
// 大于0 表示发送的数据，小于等于0 表示错误

// ReadUsb 读取数据，句柄索引fs2 由另外一个 OpenUsb 或者 另外一个OpenUsbByVidPid 返回,不能使用发送数据的句柄fs， ReadBuf 要接收的字节缓冲区,ReadBufSize 字节缓冲区长度
// 

// CloseUsb 关闭写或者读句柄索引，大于0成功，小于等于0失败
// 

JSPRINTERDLL_API int _stdcall OpenUsbByVidPid(int vid, int pid);
JSPRINTERDLL_API int _stdcall OpenUsb();
JSPRINTERDLL_API int _stdcall WriteUsb(int fs, char *SendBuf, int SendBufSize);
JSPRINTERDLL_API int _stdcall ReadUsb(int fs2, char *ReadBuf, int ReadBufSize);
JSPRINTERDLL_API BOOL  _stdcall CloseUsb(int fs);






/********并口打印机操作API**************/
JSPRINTERDLL_API int _stdcall OpenLptW(char* Name);
JSPRINTERDLL_API int  _stdcall OpenLptA(char *lpLptName); 
JSPRINTERDLL_API int _stdcall WriteLpt(int fs, char *SendBuf, int SendBufSize);
JSPRINTERDLL_API int _stdcall ReadLpt(int fs, char *ReadBuf, int ReadBufSize);
JSPRINTERDLL_API BOOL _stdcall CloseLpt(int fs);






/********串口打印机操作API**************/
JSPRINTERDLL_API int _stdcall OpenComW(char *Com,
	int BaudRate,
	UINT8 Parity,
	UINT8 ByteSize,
	UINT8 fDtrControl,
	UINT8 StopBits);
JSPRINTERDLL_API int _stdcall OpenComA(char *lpCom, int BaudRate);
JSPRINTERDLL_API int _stdcall ReadCom(int fs, char *ReadBuf, int SendBufSize);
JSPRINTERDLL_API int _stdcall WriteCom(int fs, char *SendBuf, int WriteSize);
JSPRINTERDLL_API BOOL _stdcall CloseCom(int fs);








/***********************其他操作API,暂时不开放**************/
JSPRINTERDLL_API int _stdcall usbportwrite(char* VId, char* PId, UINT32 iLen, char* Data);
JSPRINTERDLL_API int _stdcall usbportwrite(UINT32 iLen, char* Data);
JSPRINTERDLL_API int _stdcall comportwrite(char *Com,
										UINT32 BaudRate,
										UINT8 Parity,
										UINT8 ByteSize,
										UINT8 fDtrControl,
										UINT8 StopBits,
										UINT32 iLen,
										char* Data);
JSPRINTERDLL_API int _stdcall Netportwrite(UINT32 addr, UINT32 port, UINT32 Timeout, UINT32 iLen, char* Data);
JSPRINTERDLL_API int _stdcall Lptportwrite(char* Name, UINT32 iLen, char* Data);
JSPRINTERDLL_API int _stdcall NetportwriteByIp(char* ip, UINT32 port, UINT32 Timeout, UINT32 iLen, char* Data);


/**byte数组拼接**/
void byteMerger(char array1[], int length1, char array2[], int length2, char *destArray);