📄 drawer.c
字号:
/*******************************************************
钱箱驱动函数库
钱箱控制类型共2种:1:主板控制,2:打印机控制;
在主板控制时,需设置主板型号,共4种:1:370,2:560,3:563,4:760;5:9575
在打印机控制时,需设置打印机端口,共6种:COM1,COM2,COM3,COM4,LPT1,LPT2
对钱箱的操作类型共3种: 1:初始化,2:打开,3:检测开关状态
对370,9575主板控制的钱箱,每次开机后必须进行一次初始化,其他的钱箱
可以直接打开或检测开关状态.
修改时间: 2003-05-22
对于563/564/760/761/85610/6921驱动方式同563/760主板
第二次修改:2004-10-18
*********************************************************/
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <dos.h>
#include <bios.h>
int OpenMBDrawer(int iType);
int CheckMBDrawerStatus(int iType);
int OpenPrnDrawer(int iPtType,int iPt);
int CheckPrnDrawerStatus(int iPtType,int iPt);
int Init370Drawer(void);
int Init9575Drawer(void);
int SendStrToPrn(int iPtType,int iPt,char *str,int iLen);
//生成的DOS下的EXE可执行程序,参数为3个字符串,
//第1个参数为下列值之一:'MB','PRN',分别对应2种钱箱控制类型:1:主板控制,2:打印机控制;
//第2个参数为下列值之一:'370','560','563','760','9575',分别对应4种主板型号
// 或下列值之一:'COM1','COM2','COM3','COM4','LPT1','LPT2',分别对应6种打印机端口
//第3个参数为下列值之一:'I','O','C',分别对应对钱箱的3种操作类型:1:初始化,2:打开,3:检测状态.
//返回:初始化和打开时,1:成功,-1:失败;
// 检测状态时,1:关,0:开,-1:失败
int main(int argc,char *argv[])
{
int iDrawerType=0; //钱箱控制类型
int iMBType=0; //主板型号
int iPrnPt=0; //打印机端口
int iEvent=0; //对钱箱的操作
int iRes; //返回值
int i;
char *sDrawerType[2]={"MB","PRN"};
char *sMBType[5]={"370","560","563","760","9575"};
char *sPrnPt[6]={"COM1","COM2","COM3","COM4","LPT1","LPT2"};
char *sEvent[3]={"I","O","C"};
if(argc!=4)
return iRes=-1;
for(i=0;i<=1;i++)
{
if(!strcmp(argv[1],sDrawerType[i]))
{
iDrawerType=i+1;
break;
}
}
if(iDrawerType==0)
return iRes=-1;
else if(iDrawerType==1)
{
for(i=0;i<=4;i++)
{
if(!strcmp(argv[2],sMBType[i]))
{
iMBType=i+1;
break;
}
}
if(iMBType==0)
return iRes=-1;
}
else
{
for(i=0;i<=5;i++)
{
if(!strcmp(argv[2],sPrnPt[i]))
{
iPrnPt=i+1;
break;
}
}
if(iPrnPt==0)
return iRes=-1;
}
for(i=0;i<=2;i++)
{
if(!strcmp(argv[3],sEvent[i]))
{
iEvent=i+1;
break;
}
}
if(iEvent==0)
return iRes=-1;
if(iDrawerType==1) //主板控制
switch(iEvent)
{
case 1: //初始化
if(iMBType==1)
iRes=Init370Drawer();
else if (iMBType==5)
iRes=Init9575Drawer();
else
iRes=1;
break;
case 2: //打开
iRes=OpenMBDrawer(iMBType);
break;
case 3: //检测
iRes=CheckMBDrawerStatus(iMBType);
break;
}
else if ( (iDrawerType==2) && (iPrnPt<=4)) //串口打印机控制
switch(iEvent)
{
case 1: //初始化
iRes=1;
break;
case 2: //打开
iRes=OpenPrnDrawer(1,iPrnPt);
break;
case 3: //检测
iRes=CheckPrnDrawerStatus(1,iPrnPt);
break;
}
else if ( (iDrawerType==2) && (iPrnPt>=5)) //并口打印机控制
switch(iEvent)
{
case 1: //初始化
iRes=1;
break;
case 2: //打开
iRes=OpenPrnDrawer(2,iPrnPt-4);
break;
case 3: //检测
iRes=CheckPrnDrawerStatus(2,iPrnPt-4);
break;
}
else
iRes=-1;
printf("%d\n",iRes);
return iRes;
}
/*===========================================================================
钱箱接口函数库
===========================================================================*/
//函数: OpenMBDrawer
//功能: 打开由主板控制的钱箱
//参数: iType:主板型号,1:370,2:560,3:563,4:760,5:9575
//返回: -1:无相应主板型号;1:成功
//说明: 若主板类型为370,控制位为D7,指令为先送0x80,再送0.
// 若主板类型为9575,控制位为D7,指令为先送0,再送0x80.
// 若主板类型为560,控制位为D0,开钱箱的指令为先送1再送0
// 若主板类型为563或760,控制位为D0,开钱箱的指令为先送0再送1;
int OpenMBDrawer(int iType)
{
if(iType==1) //370
{
outportb(0x220,0x80);
delay(200);
outportb(0x220,0);
}
else if(iType==2) //560
{ outportb(0x220,1);
delay(200);
outportb(0x220,0);
}
else if((iType==3)||(iType==4)) //563,760
{
outportb(0x220,0);
delay(200);
outportb(0x220,1);
}
else if(iType==5) //9575
{
outportb(0x220,0x00);
delay(200);
outportb(0x220,0x80);
}
else
return -1;
return 1;
}
//函数:CheckMBDrawerStatus
//功能:检查由主板控制的钱箱状态
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -