⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prntmain.c

📁 基于ARM与μCOS-II的嵌入式操作系统实现针式和热敏微型打印程序.
💻 C
📖 第 1 页 / 共 3 页
字号:
	prntArabiaOneLine(TXT_TYPE_NOTE, 1);
	str_cat(s_ucprntTSDataBuffer,temptemp);
	str_cat(s_ucprntTSDataBuffer,temptemp);
	bspTSPrntData(&s_ucprntTSDataBuffer[0], str_len(s_ucprntTSDataBuffer), 32, 0);

	return (ET_prntGetState());
}

/*
**********************************************************
*
* 函数名:prntTSPutDataToBuff
*
* 功  能:热敏打印数据存放打印缓存
*
* 输  入:无
*
* 输  出:s_ucprntTSDataBuffer
*		  s_ucprntDataBuffDataIn
*
* 返  回:无
*
***********************************************************
*/
void prntTSPutDataToBuff
(
    UINT1  * _pAdrress,    /* [in]数据起始地址 */
    UINT1    _Lenth        /* 数据长度 */
)
{
	mem_cpy((UINT1 *)(s_ucprntTSDataBuffer + s_ucprntDataBuffDataIn), _pAdrress, _Lenth);
	s_ucprntDataBuffDataIn += _Lenth;
	return;
}

/*
**********************************************************
*
* 函数名:prntDotPrintHZlib
*
* 功  能:针式打印打印汉字库,实现一组数据的打印操作
*
* 输  入:g_ucprinterState
*
* 输  出:无
*
* 返  回:FAULT    处理失败
*		  SUCCESS  处理成功
*
***********************************************************
*/
INT1 prntDotPrintHZlib
(
	UINT1 *_pData,         /* [in]待打印数据 */
	UINT1  _ucLength	   /* 数据包长度 */
)
{
	UINT1 i;
	
	if (_ucLength == 0)
	{
		return FAULT;
	}
	if (g_ucprntState&0x0f)
	{
		g_ucMsgBuffer[0] = 0;
		g_ucMsgBuffer[1] = g_ucprntState; 
		return FAULT;
	}	
	g_ucprntLinePrinted = 0;
	for (i = 0; i < _ucLength; i ++)
	{
		if (_pData[i] == PRINTCOM)
		{
			bspDotprntAndNewline(1, 24);
		}
		else
		{
			bspDotprntPutDataToBuff (&_pData[i], 1);
		}
	}
	/* 穿孔进纸50步,确保打印纸顺利送出 */
	bspDotPrntPFLineSpace (1, 50);				 
	g_ucMsgBuffer[0] = g_ucprntLinePrinted;
	g_ucMsgBuffer[1] = g_ucprntState;
	return SUCCESS;
}

/*
***********************************************************
*
* 函数名:prntTSPrintHZlib
*
* 功  能:热敏打印打印汉字库,实现一组数据的打印操作
*
* 输  入:g_ucPrinterLineSpace
*
* 输  出:无
*
* 返  回:FAULT    处理失败
*		  SUCCESS  处理成功
*
************************************************************
*/
INT1 prntTSPrintHZlib
(
	UINT1 *_pData,         /* [in]待打印数据 */
	UINT1  _ucLength	   /* 数据包长度 */
)
{
	if (_ucLength == 0)
	{
		return FAULT;
	}
	ET_prntGetState();
	if (g_ucprntState &0x0f)
	{
		g_ucMsgBuffer[0] = 0; 
		g_ucMsgBuffer[1] = g_ucprntState; 
		return FAULT;
	}
	g_usTSPrintedLine = 0;
	/* 调用热敏打印函数完成数据打印 */
	bspTSPrntData(_pData, _ucLength, g_ucPrinterLineSpace, 0);
	/* 向维护模块返回打印结果 */
	g_ucMsgBuffer[0] = g_usTSPrintedLine/g_ucPrinterLineSpace;
	g_ucMsgBuffer[1] = g_ucprntState;
	
	return SUCCESS;
}

INT1 prntTSHZTest(void)
{
	UINT1 temp[198];
	UINT1 i,m;
	UINT1 j,k,line;
	
	m = 0;
	line = '0';
	j = 0;
	mem_set(temp, 0 , 198);
	for (k = 0x20; k < 0x7F; k++ )
	{	
		temp[j++] = k;	
	}
	prntTest(temp,(0x7F-0x20),1);	
	
	while (1)
	{
		mem_set(temp, 0 , 198);
		j = 0;
				
		for (k = 0; k < 5; k++ )
		{	
			for (i = 0; i < 16; i ++)
			{
				temp[j] = 0xb0 + m;
				temp[j+1] = 0xa1 + 16*k + i;
				
				if (i == 15)
				{
					temp[j] = line++;temp[j+1] =0x20;
					if (line >= 0x3a)
						line = 0x30;
				}
				
				if (temp[j+1]==0xfe)
				{
					m ++;
				}
				j = j + 2;	
				if ((0xb0 + m) > 0xf7) 
					return SUCCESS;
			}		
		}
		prntTest(temp,161,1);
	}
}


/*
**************************************************
*
* 函数名:prntTest
*
* 功  能:维护模块打印测试函数
*
* 输  入:无
*
* 输  出:无
*
* 返  回:FAULT    打印失败
*		  SUCCESS  打印成功
**************************************************
*/
INT1 prntTest
(
	UINT1 *_pData,         /* [in]待打印数据 */
	UINT1  _ucLength,	   /* 数据包长度 */
	UINT1  _ucPrinterType  /* 打印机类型(0穿孔、1热敏)*/
)
{
	UINT1 i;
	INT1 ucState;

	ET_prntGetState();
	if (g_ucprntState & 0x0f)
	{
		return g_ucprntState;
	}
	if(PRINTER_TYPE) /* 穿孔机芯 */
	{
		for (i = 0; i < _ucLength; i ++)
		{
			if (_pData[i] == PRINTCOM)
			{
				bspDotprntAndNewline(1, 24);
			}
			else
			{
				bspDotprntPutDataToBuff (&_pData[i], 1);
			}
		}
	}
	else
	{
		bspTSPrntData(_pData, _ucLength, 32, 0);
	}
	ucState = ET_prntGetState();
	if (0 == (ucState & 0x0f))
	{
		return SUCCESS;
	}
	else
	{
		return FAULT;
	}
}

/*
**********************************************************
*
* 函数名:prntSendMsgToMntn
*
* 功  能:向维护模块发送打印状态消息
*
* 输  入:g_ucMsgBuffer
*
* 输  出:无
*
* 返  回:ucRet
*
***********************************************************
*/
UINT1 prntSendMsgToMntn(void)
{
	UINT1 ucRet;
	
	PrntResMsg.id = MSG_MNTN_PRINT_STATE_PRNT;
	PrntResMsg.len = 2;             			
	PrntResMsg.p = g_ucMsgBuffer;
	PrntResMsg.sign = 1;
	ucRet = OSQPost(pMntnQEvent,(void *)&PrntResMsg);	
	return ucRet;
}

/*
**************************************************
*
* 函数名:prntAdjustPrintMode
*
* 功  能:穿孔打印效果调节模式
*
* 输  入:g_ucprntAdjustLevel
*
* 输  出:无
*
* 返  回:0  打印机正常
*         -1 打印机缺纸
*         -2 打印机机械故障
*
**************************************************
*/
INT1 prntAdjustPrintMode (void)
{
	UINT1	ucTemplen, i;
	UINT1	temp;
	UINT1	ucTempbuff[5];
  	const char *PhaseItemChar[] =
  	{
		"多业务电子交易终端针式打印机打印效果补偿,请选择设定最佳效果的调节等级",	/*0*/
		"调节等级:",								/*1*/
		"欢迎您使用打印效果调节功能",				/*2*/
		"0",										/*3*/
		"1",										/*4*/
		"2",										/*5*/
		"3",										/*6*/
		"4",										/*7*/
		"5",										/*8*/
		"6",										/*9*/
		"7",										/*10*/ 
		"8",										/*11*/
		"当前的调节等级是:"					        /*12*/
  	};	
	ET_prntGetState();	
	g_ucPrinterLineSpace = 24;
	temp = g_ucprntAdjustLevel;
	
	ucTemplen = str_len ((UINT1 *)PhaseItemChar[2]);
	bspDotprntPutDataToBuff(( UINT1 *)PhaseItemChar[2], ucTemplen);
	bspDotprntAndNewline(1, 24);
	ET_prntGetState();

	ucTemplen = str_len ((UINT1 *)PhaseItemChar[12]);
	bspDotprntPutDataToBuff(( UINT1 *)PhaseItemChar[12], ucTemplen);
	ucTemplen = s_printf ((UINT1 *)ucTempbuff, (UINT1 *)"%u", ( UINT2 )temp );
	bspDotprntPutDataToBuff ( ucTempbuff,ucTemplen);
	bspDotprntAndNewline(1, 24);
	ET_prntGetState();

	for ( i = 0; i < 8; i ++ )
	{
		/* 打印调整步数 */
		g_ucprntAdjustLevel = i;
		g_ucPrinterLineSpace = 24;
	    ucTemplen = str_len ((UINT1 *)PhaseItemChar[1]);
		bspDotprntPutDataToBuff ((UINT1 *)PhaseItemChar[1], ucTemplen);
		ucTemplen = str_len ((UINT1 *)PhaseItemChar[3 + i]);
		bspDotprntPutDataToBuff ((UINT1 *)PhaseItemChar[3 + i], ucTemplen);
		bspDotprntAndNewline(1, 24);
		ET_prntGetState();

		/* 打印中文 */
		ucTemplen = str_len ((UINT1 *)PhaseItemChar[0]);
		bspDotprntPutDataToBuff ((UINT1 *)PhaseItemChar[0], ucTemplen);
		bspDotprntAndNewline(1, 24);
		ET_prntGetState();
	}
	g_ucprntAdjustLevel = temp;
	bspDotprntAndNewline(1, 100);
	return g_ucprntState;
}

/*
**********************************************************
*
* 函数名:prntFeedPaper
*
* 功  能:按键进纸函数
*
* 输  入:无
*
* 输  出:无
*
* 返  回:无
*
**********************************************************
*/
void prntFeedPaper (void)
{
	if (bspTimer1GetSta() == 1)
	{
		return; /* 定时器1资源被占用 */
	}
	else
	{
		if (!PRINTER_TYPE)
		{
			if (bspTsResponseKey()==0)
			{
				/* 热敏单步进纸距离为4mm */
				bspTSPrntPFLineSpace (1, 32*4);
			}
		}
		else
		{
			/* 穿孔打印单步进纸距离4.23mm */
			bspDotPrntPFLineSpace (1, 24);
		}
		bspTimer1NotUse();/* 清除定时器1占用标志 */
	}
}

/*
**********************************************************
*
* 函数名:prntFeedBackPaper
*
* 功  能:按键退纸函数
*
* 输  入:无
*
* 输  出:无
*
* 返  回:无
*
***********************************************************
*/
void prntFeedBackPaper (void)
{
	if (bspTimer1GetSta() == 1)
	{
		return;/* 定时器1资源被占用 */
	}
	else
	{
		/* 占用定时器1资源 */
		if (!PRINTER_TYPE)
		{
			if (bspTsResponseKey()==0)
			{
				bspTSPrntPFLineSpace (0, 32*4);
			}
		}
		else
		{
			bspDotPrntPFLineSpace (0, 24);
		}
		bspTimer1NotUse();		/* 清除定时器1占用标志 */
	}
}

/*
***********************************************************
*
* 函数名: prntDealPowerOff
*
* 功能:	处理关机和掉电
*
* 输入:	无
*
* 输出:	无
*
* 返回:	SUCCESS 成功
*
***********************************************************
*/
INT1 prntDealPowerOff(void)
{
	/* 发送消息给主控模块 安全退出 */
	OSQPost(pSyscQEvent, (void *)MSG_SYSC_QUIT_PRNT);
	/* 挂起本任务 */
	OSTaskSuspend(TASK_PRNT_PRIO);
	return SUCCESS;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -