📄 printer.c
字号:
/*************************************************************************/
/* */
/* Copyright (c) 1993-2002 YULONG COMPUTER */
/* TELECOMMUNICATION SCIENTIFIC CO.,LTD. */
/* 宇龙计算机通信科技(深圳)有限公司 版权所有 1993-2002 */
/* PROPRIETARY RIGHTS of eWayCyber Technologies are involved in the */
/* subject matter of this material. All manufacturing, reproduction, */
/* use, and sales rights pertaining to this subject matter are governed */
/* by the license agreement. The recipient of this software implicitly */
/* accepts the terms of the license. */
/* 本软件文档资料是宇龙计算机通信科技(深圳)有限公司的资产,任何人士阅读和 */
/* 使用本资料必须获得相应的书面授权,承担保密责任和接受相应的法律约束. */
/* */
/*************************************************************************/
//===========================================================================
//
// Product : YuLong PDA application Example for EOS
// Module : Application.c
// Version : 1.00
//
//---------------------------------------------------------------------------
//
// Description : 应用程序的基本例子
//
//---------------------------------------------------------------------------
//
// Author : yang sheng qian
// developed on : 2004.07.26
//
//===========================================================================
#include "config.h"
//* some standard include files
#include "eosgui.h"
#include "Eos_Uart.h"
//* some standard include files
#include "nucleus.h"
#include "guisys.h"
#include "stdio.h"
#include "fs.h"
#include "hwdev.h"
#include "MPK1200_GA.h"
#include "MPK1200.h"
#include "MPK1210.h"
#include "printer.h"
////////////////////////////////////////////////////////////////////////////////////////////
Int16 PR_OpenComm(Int16 hWndId, Int32 nComCBR)
{
DCB dcb;
Int16 i16ComId = -1;
i16ComId = CreateFile(DRIVER_UART1_ID, 0, 0);
if(0 <= i16ComId) {
//* 获得DCB状态
MemSet(&dcb, 0, sizeof(DCB));
if(0 != GetCommState(i16ComId, &dcb)) {
//* 设置波特率
//* 设置波特率
dcb.BaudRate = nComCBR;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
//Setup the flow control
dcb.fDsrSensitivity = FALSE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fOutX = TRUE;
dcb.fInX = TRUE;
dcb.XonChar = 0x11;
dcb.XoffChar = 0x13;
dcb.XoffLim = 512;
dcb.XonLim = 512;
if(0 != SetCommState(i16ComId, &dcb)) {
//* 设置Mask
if(0 != SetCommMask(i16ComId, EV_RXCHAR|EV_ERR)) {
//* 系统通知
Sys_IONotify(i16ComId, EV_RXCHAR|EV_ERR, hWndId);
return i16ComId;
}
}
}
Close(i16ComId);
}
return -1;
}
Int32 PR_GetComCBR(Int32 nPrintId)
{
if(1 == nPrintId) return MPK1200GA_GetComCBR();
if(2 == nPrintId) return MPK1200_GetComCBR();
if(3 == nPrintId) return MPK1210_GetComCBR();
return 0;
}
Boolean PR_InitEnvironment(void)
{
EOS_Delete(PR_FILENAME);
return TRUE;
}
/*****************************************************************************************
入口参数: n-灰度等级(0 <= n <= 10,缺省n=5)
描 述: 调整打印对比度
*****************************************************************************************/
void PR_setdarkness(Char n)
{
Handle hFile = -1;
Char icmd[4];
hFile = EOS_Open(PR_FILENAME, PO_BINARY|PO_WRONLY, PS_IWRITE);
if(0 > hFile) hFile = EOS_Open(PR_FILENAME, PO_CREAT|PO_BINARY|PO_RDWR, PS_IREAD|PS_IWRITE);
if(0 <= hFile) {
EOS_Seek(hFile, 0, SEEK_END);
icmd[0] = 0x1B;
icmd[1] = 0x01;
icmd[2] = n;
icmd[3] = 0x00;
EOS_Write(hFile, icmd, sizeof(icmd));
EOS_Close(hFile);
}
}
/*****************************************************************************************
入口参数: n-字符间隔的尺寸(0 <= n <= 15,缺省n=0,间隔尺寸=n/8毫米)
描 述: 设置字符间隔
*****************************************************************************************/
void PR_setcharspace(Char n)
{
Handle hFile = -1;
Char icmd[4];
hFile = EOS_Open(PR_FILENAME, PO_BINARY|PO_WRONLY, PS_IWRITE);
if(0 > hFile) hFile = EOS_Open(PR_FILENAME, PO_CREAT|PO_BINARY|PO_RDWR, PS_IREAD|PS_IWRITE);
if(0 <= hFile) {
EOS_Seek(hFile, 0, SEEK_END);
icmd[0] = 0x1B;
icmd[1] = 0x02;
icmd[2] = n;
icmd[3] = 0x00;
EOS_Write(hFile, icmd, sizeof(icmd));
EOS_Close(hFile);
}
}
/*****************************************************************************************
入口参数: n-ASCII字体(0 <= n <= 3,缺省n=1 14X24 ASCII字体)
n=0, 8X13 ASCII字体
n=1,14X24 ASCII字体
n=2,22X36 ASCII字体
n=3,24X24 Shift-JIS编码的KANJI字体
描 述: 设置打印机的ASCII字体
*****************************************************************************************/
void PR_selectASCIIfont(Char n)
{
Handle hFile = -1;
Char icmd[4];
hFile = EOS_Open(PR_FILENAME, PO_BINARY|PO_WRONLY, PS_IWRITE);
if(0 > hFile) hFile = EOS_Open(PR_FILENAME, PO_CREAT|PO_BINARY|PO_RDWR, PS_IREAD|PS_IWRITE);
if(0 <= hFile) {
EOS_Seek(hFile, 0, SEEK_END);
icmd[0] = 0x1B;
icmd[1] = 0x03;
icmd[2] = n;
icmd[3] = 0x00;
EOS_Write(hFile, icmd, sizeof(icmd));
EOS_Close(hFile);
}
}
/*****************************************************************************************
入口参数: dw-指示是否横向放大一倍
dh-指示是否纵向放大一倍
描 述: 设置字符纵的横向放大
*****************************************************************************************/
void PR_enlargefont(Char dw, Char dh)
{
Handle hFile = -1;
Char icmd[4];
hFile = EOS_Open(PR_FILENAME, PO_BINARY|PO_WRONLY, PS_IWRITE);
if(0 > hFile) hFile = EOS_Open(PR_FILENAME, PO_CREAT|PO_BINARY|PO_RDWR, PS_IREAD|PS_IWRITE);
if(0 <= hFile) {
EOS_Seek(hFile, 0, SEEK_END);
icmd[0] = 0x1B;
icmd[1] = 0x04;
icmd[2] = dw;
icmd[3] = dh;
EOS_Write(hFile, icmd, sizeof(icmd));
EOS_Close(hFile);
}
}
/*****************************************************************************************
入口参数: x-自左边界算起
y-忽略
描 述: 设定每行打印的绝对起始位置
*****************************************************************************************/
void PR_moveto(Char x, Char y)
{
Handle hFile = -1;
Char icmd[4];
hFile = EOS_Open(PR_FILENAME, PO_BINARY|PO_WRONLY, PS_IWRITE);
if(0 > hFile) hFile = EOS_Open(PR_FILENAME, PO_CREAT|PO_BINARY|PO_RDWR, PS_IREAD|PS_IWRITE);
if(0 <= hFile) {
EOS_Seek(hFile, 0, SEEK_END);
icmd[0] = 0x1B;
icmd[1] = 0x05;
icmd[2] = x;
icmd[3] = y;
EOS_Write(hFile, icmd, sizeof(icmd));
EOS_Close(hFile);
}
}
/*****************************************************************************************
入口参数: pdata-字符串地址
描 述: 打印指定长度的字符串
*****************************************************************************************/
void PR_print(Char *data)
{
Handle hFile = -1;
Int16 len = (Int16)StrLen(data);
Char icmd[4];
hFile = EOS_Open(PR_FILENAME, PO_BINARY|PO_WRONLY, PS_IWRITE);
if(0 > hFile) hFile = EOS_Open(PR_FILENAME, PO_CREAT|PO_BINARY|PO_RDWR, PS_IREAD|PS_IWRITE);
if(0 <= hFile) {
EOS_Seek(hFile, 0, SEEK_END);
icmd[0] = 0x1B;
icmd[1] = 0xff;
icmd[2] = (Char)((len >> 8) & 0xff);
icmd[3] = (Char)((len & 0xff));
EOS_Write(hFile, icmd, sizeof(icmd));
EOS_Write(hFile, data, StrLen(data));
EOS_Close(hFile);
}
}
void PR_printfile(Int16 i16ComId, Int32 nPrintId)
{
Handle hFile = -1;
Char *pszInnerBuf = NULL, icmd[4], szBuf[100];
Int16 len = 512, m, n;
if(0 <= i16ComId) {
hFile = EOS_Open(PR_FILENAME, PO_BINARY|PO_RDONLY, PS_IREAD|PS_IWRITE);
if(0 <= hFile) {
while(sizeof(icmd) == EOS_Read(hFile, icmd, sizeof(icmd))) {
if(0x1B == icmd[0]) {
switch(icmd[1]) {
case 0x01: //调整打印对比度
if(1 == nPrintId) MPK1200GA_setdarkness(i16ComId, icmd[2]);
if(2 == nPrintId) MPK1200_setdarkness(i16ComId, icmd[2]);
if(3 == nPrintId) MPK1210_setdarkness(i16ComId, icmd[2]);
break;
case 0x02: //设置字符间隔
if(1 == nPrintId) MPK1200GA_setcharspace(i16ComId, icmd[2]);
if(2 == nPrintId) MPK1200_setcharspace(i16ComId, icmd[2]);
if(3 == nPrintId) MPK1210_setcharspace(i16ComId, icmd[2]);
break;
case 0x03: //设置打印机的ASCII字体
if(1 == nPrintId) MPK1200GA_selectASCIIfont(i16ComId, icmd[2]);
if(2 == nPrintId) MPK1200_selectASCIIfont(i16ComId, icmd[2]);
if(3 == nPrintId) MPK1210_selectASCIIfont(i16ComId, icmd[2]);
break;
case 0x04: //设置字符纵的横向放大
if(1 == nPrintId) MPK1200GA_enlargefont(i16ComId, icmd[2], icmd[3]);
if(2 == nPrintId) MPK1200_enlargefont(i16ComId, icmd[2], icmd[3]);
if(3 == nPrintId) MPK1210_enlargefont(i16ComId, icmd[2], icmd[3]);
break;
case 0x05: //设定每行打印的绝对起始位置
if(1 == nPrintId) MPK1200GA_moveto(i16ComId, icmd[2], icmd[3]);
if(2 == nPrintId) MPK1200_moveto(i16ComId, icmd[2], icmd[3]);
if(3 == nPrintId) MPK1210_moveto(i16ComId, icmd[2], icmd[3]);
break;
case 0xff: //打印指定长度的字符串
len = icmd[2]*256 + icmd[3];
pszInnerBuf = (Char *)mcMalloc(len + 1);
if(NULL != pszInnerBuf) {
MemSet(pszInnerBuf, 0, len + 1);
if(len == EOS_Read(hFile, pszInnerBuf, len)) {
m = 0;
while(m < len) {
n = 0;
MemSet(szBuf, 0, sizeof(szBuf));
while(m < len && m < 100) {
if('\n' == pszInnerBuf[m]) break;
szBuf[n ++] = pszInnerBuf[m ++];
}
if(1 == nPrintId) MPK1200GA_print(i16ComId, szBuf);
if(2 == nPrintId) MPK1200_print(i16ComId, szBuf);
if(3 == nPrintId) MPK1210_print(i16ComId, szBuf);
if(m < len && m < 100 && '\n' == pszInnerBuf[m]) {
if(1 == nPrintId) MPK1200GA_feedCR(i16ComId);
if(2 == nPrintId) MPK1200_feedCR(i16ComId);
if(3 == nPrintId) MPK1210_feedCR(i16ComId);
}
}
}
mcFree(pszInnerBuf); pszInnerBuf = NULL;
}
break;
}
}
}
EOS_Close(hFile);
}
}
}
void PR_DoPrint(Int16 nId, WindowEventHandlerExType winEventHandler)
{
WinHandle hDlgWnd = WinCreateWindowByResId(nId);
if(NULL!= hDlgWnd) {
WinSetEventHandlerEx(hDlgWnd, winEventHandler);
WinDoDialog(hDlgWnd); //显示打印设置窗口
WinDeleteWindow(hDlgWnd, FALSE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -