?? bspdotprnt.c
字號:
if (g_ucprntCheckedBMark)
{
if (1 == g_ucPrntCheckBMInt)
{
g_ucPrntCheckBMInt = 0;
DelayXus(PD); /* 上電初始化找到黑標后,即停機 */
ucPFRunMode = 2;
}
else
{
ucPFRunSteps = 0;
g_usprntPaperLen1 = g_usprntPaperLen2;
usPFBMStep = g_usprntPaperLen1;
if (g_usPrintLocatOffset <= usPFBMStep)
{
DelayXus(PD);
ucPFRunMode = 2;
}
else
{
ucPFRunMode = 5; /* 找到黑標后進入流程5走紙到起始位置 */
}
}
}
else
{
/* 未找到黑標走滿整頁紙后停機*/
DelayXus(PD);
ucPFRunMode = 2;
}
}
break;
case 5: /* 進紙到打印起始位置 */
bspDotPrntPFPhase(_ucDirection ,g_ucPaperType);
ucPFRunSteps ++;
if (ucPFRunSteps ==(g_usPrintLocatOffset - usPFBMStep))
{
DelayXus(PD);
ucPFRunMode = 2;
}
else if (ucPFRunSteps <= 4) /* 加速運行 */
{
DelayXus(prntPFSpeedUp[ucPFRunSteps - 1]);
}
else if (ucPFRunSteps <= (g_usPrintLocatOffset - usPFBMStep - 4)) /* 勻速運行 */
{
DelayXus(PF_SPEED_TIMER);
}
else if (ucPFRunSteps < (g_usPrintLocatOffset - usPFBMStep)) /* 減速運行 */
{
DelayXus(prntPFSpeedUp[g_usPrintLocatOffset - usPFBMStep - ucPFRunSteps]);
}
if(ucPFRunSteps > 500)
{
DelayXus(PD);/* 容錯處理,異常停機處理流程*/
ucPFRunMode = 2;
}
break;
default:
break;
}
bspPrntCheckBM(0);
}
}
/*
*****************************************************
*
* 函數名:bspDotSetWidthCoordinate
*
* 功 能:定向橫向打印坐標
*
* 輸 入:s_ucPrntDoubleWidth
*
* 輸 出:s_usprntPatternCount
* g_usPatternCount
*
* 返 回:N/A
*
******************************************************
*/
void bspDotSetWidthCoordinate
(
UINT1 ucSetWidth, /* 設置橫向定位坐標點 (mm) */
UINT2 usPatternCount /* 待打印數據結尾坐標點 */
)
{
UINT1 i;
UINT2 usCount;
UINT1 ucPatternWidth = 10;
UINT1 uctemp[1] = {0x20};
/* 關系式盡量減少橫向定位誤差 */
usCount = (7*ucSetWidth - (ucSetWidth*3+4)/10)-usPatternCount;
if (usPatternCount == 0)
{
/* 定位左側首位打印橫坐標 */
s_usprntPatternCount = usCount + 5;
}
else
{
usCount = usCount - s_usprntPatternCount;
if (s_ucPrntDoubleWidth)
{
ucPatternWidth = 20;
}
for (i = 0; i < (usCount + 4)/ucPatternWidth; i ++)
{
bspDotprntPutDataToBuff (uctemp ,1);
}
g_usPatternCount = g_usPatternCount + ucPatternWidth*i;
}
return;
}
/*
*****************************************************
*
* 函數名:bspDotPrntMode
*
* 功 能:根據打印命令選擇打印模式
*
* 輸 入:無
*
* 輸 出:s_ucPrntDoubleWidth
* s_ucPrntDoubleWidth
* s_ucPrntDoubleHigh
* s_ucPrntDoubleHigh
*
* 返 回:N/A
*
******************************************************
*/
void bspDotPrntMode
(
UINT1 _ucFontMode /* 打印模式判斷 */
)
{
switch (_ucFontMode)
{
case 0x0b:
s_ucPrntDoubleWidth = 1;
break;
case 0x14:
s_ucPrntDoubleWidth = 0;
break;
case 0x0f:
s_ucPrntDoubleHigh = 1;
break;
case 0x15:
s_ucPrntDoubleHigh = 0;
default:
break;
}
return;
}
/*
*****************************************************
*
* 函數名:bspDotPrntOrientation
*
* 功 能:同步解析數據存儲坐標定位
*
* 輸 入:s_ucPrntDoubleWidth
* s_ucprntCharSpace
*
* 輸 出:g_usPatternCount
*
* 返 回:N/A
*
******************************************************
*/
void bspDotPrntOrientation
(
UINT1 *_pData /* [in]待解析打印數據 */
)
{
bspDotPrntMode(*_pData);
if (*_pData >= 0x20)
{
if (*_pData <= 0x7f)
{
/* 統計字模緩沖區數據占用字模計數點相對于打印橫向定位點 */
g_usPatternCount = g_usPatternCount + (s_ucPrntDoubleWidth + 1)*(10 + s_ucprntCharSpace);
}
else
{
g_usPatternCount = g_usPatternCount + (s_ucPrntDoubleWidth + 1)*(16 + s_ucprntCharSpace)/2;
}
}
if (g_usPatternCount > 360)
{
g_usPatternCount = 0;
}
}
/*
*****************************************************
*
* 函數名:bspDotPrntGetPattern
*
* 功 能:穿孔打印機取字模函數
*
* 輸 入:s_ucprntBuffDataIn
* s_ucprntDataBuffer
* s_ucprntCharSpace
* g_ucPrntWidthAdjust
*
* 輸 出:g_ucprntPattern1
* g_ucprntPattern2
* s_usprntPatternCount
*
* 返 回:處理的字節數
*
******************************************************
*/
UINT1 bspDotPrntGetPattern
(
UINT1 _ucStart /* 開始取字模的位置 */
)
{
UINT1 i;
UINT1 tempData;
UINT4 offset;
for (i = _ucStart; i < s_ucprntBuffDataIn; i ++)
{
tempData = s_ucprntDataBuffer[i];
bspDotPrntMode(tempData);
if (tempData >= 0x20)
{
if (tempData <= 0x7f)
{
if ((s_usprntPatternCount + (s_ucPrntDoubleWidth + 1)*(10 + s_ucprntCharSpace)) > (PRNT_WIDTH - 2*g_ucPrntWidthAdjust))
{
s_ucprntBufferFull = 1;
return (i - _ucStart);
}
bspDotASCIIGetPattern(tempData);
}
else
{
if (g_ucPrntChoiceLang == 0x01) /* 阿拉伯語 */
{
if ((s_usprntPatternCount + (s_ucPrntDoubleWidth + 1)*(16 + s_ucprntCharSpace)) > (PRNT_WIDTH - 2*g_ucPrntWidthAdjust))
{
s_ucprntBufferFull = 1;
return (i - _ucStart);
}
bspDotArabiaGetPattern(tempData);
}
else
{
if ((tempData >= 0xa1)&&(s_ucprntDataBuffer[i + 1] >= 0xa1)&&(tempData <= 0xf7)&&(s_ucprntDataBuffer[i + 1] <= 0xfe))
{
if ((s_usprntPatternCount + (s_ucPrntDoubleWidth + 1)*(16 + s_ucprntCharSpace)) > (PRNT_WIDTH - 2*g_ucPrntWidthAdjust))
{
s_ucprntBufferFull = 1;
return (i - _ucStart);
}
offset = (tempData - 0xa1) * 94 + s_ucprntDataBuffer[++i] - 0xa1;
offset = offset * 32 + GB2312_16_ADDR;
bspDotChineseDealPattern(offset);
}
}
}
s_usprntPatternCount += s_ucprntCharSpace;/* 字符間距 */
}
}
return (i - _ucStart);
}
/*
*****************************************************
*
* 函數名:bspDotASCIIGetPattern
*
* 功 能:穿孔打印機ASCII取字模處理函數
*
* 輸 入:g_ucPrntOrderMode
*
* 輸 出:
*
* 返 回:SUCCESS
*
******************************************************
*/
UINT1 bspDotASCIIGetPattern
(
UINT1 _ucTempData /* 開始取字模的地址 */
)
{
if (!g_ucPrntOrderMode)
{
bspDotArabChacDealPattern (_ucTempData, 0);
}
else
{
bspDotReverseDealPattern (_ucTempData, 0);
}
return SUCCESS;
}
/*
*****************************************************
*
* 函數名:bspDotArabiaGetPattern
*
* 功 能:穿孔打印機Arabia取字模處理函數
*
* 輸 入:g_ucPrntOrderMode
*
* 輸 出:
*
* 返 回:SUCCESS
*
******************************************************
*/
UINT1 bspDotArabiaGetPattern
(
UINT1 _ucTempData /* 開始取字模的地址 */
)
{
if (!g_ucPrntOrderMode)
{
bspDotArabChacDealPattern (_ucTempData, 1);
}
else
{
bspDotReverseDealPattern (_ucTempData, 1);
}
return SUCCESS;
}
/*
*****************************************************
*
* 函數名:bspDotArabChacDealPattern
*
* 功 能:穿孔打印機阿拉伯或ASCII正向字模處理函數
*
* 輸 入:s_ucPrntDoubleHigh
* s_ucprntCharSpace
* s_ucPrntDoubleWidth
*
* 輸 出:g_ucprntPattern1
* g_ucprntPattern3
* s_usprntPatternCount
*
* 返 回:SUCCESS
*
******************************************************
*/
UINT1 bspDotArabChacDealPattern
(
UINT1 _ucTempData, /* 開始取字模的地址 */
UINT1 _ucLangType /* 語言類型(0 ASCII 1阿拉伯語) */
)
{
UINT1 i,j,k;
UINT1 ucByteCount;
UINT2 usTempWidth;
UINT4 offset;
UINT1 ucaData[BYTE_ARABIA] = {0};
UINT1 ucDealData[BYTE_ARABIA] = {0};
mem_set(ucDealData,0,sizeof(ucDealData));
if (_ucLangType)/* 阿拉伯語 */
{
ucByteCount = BYTE_ARABIA;
mem_cpy(ucaData, (UINT1 *)g_ArabFont16X8[_ucTempData-0x80], ucByteCount);
}
else /* ASCII字符 */
{
ucByteCount = BYTE_ASCII;
offset = (_ucTempData - 0x20) * ucByteCount + ASCII_7MUL9_ADDR + 0x240; /* 7x9 字體*/
mem_cpy(ucaData, (UINT4 *)offset, ucByteCount);
}
if (ucByteCount == BYTE_ARABIA)
{
for (j = 0; j < 8; j ++)
{
for (i = 0; i < 8; i ++)
{
bspDotprntBitWrite(ucDealData + j, 7 - i, bspDotprntBitRead(ucaData[2*i],7 - j));
bspDotprntBitWrite(ucDealData + 8 + j, 7 - i, bspDotprntBitRead(ucaData[2*i + 1],7 - j));
}
}
for ( j = 1; j < 8; j ++ )
{
ucDealData[j] &= ~(ucDealData[j] & ucDealData[j - 1]);
ucDealData[8 + j] &= ~(ucDealData[8 + j] & ucDealData[8 + j - 1]);
}
for ( k = 0; k < 8; k ++)
{
g_ucprntPattern1 [s_usprntPatternCount] = ucDealData[7 - k];
g_ucprntPattern2 [s_usprntPatternCount] = ucDealData[15 - k];
s_usprntPatternCount ++;
}
}
else
{
for (k = 0; k < ucByteCount; k++)
{
ucDealData[k] |= ((ucaData[k] & 0x01)<<7)|((ucaData[k] & 0x02)<<5)|((ucaData[k] & 0x04)<<3)|((ucaData[k] & 0x08)<<1);
ucDealData[k] |= ((ucaData[k] & 0x10)>>1)|((ucaData[k] & 0x20)>>3)|((ucaData[k] & 0x40)>>5)|((ucaData[k] & 0x80)>>7);
#if 0
for (i = 0; i < 8; i ++)
{
if (ucaData[k] & 0x01)
{
ucDealData[k] |= (0x80 >> i);
}
ucaData[k] = ucaData[k]>>1;
}
#endif
}
for ( j = 1; j < ucByteCount; j ++ )
{
ucDealData[j] = (( ucDealData[j])|(ucDealData[j - 1])) - (ucDealData[j - 1]);
}
for (j = 0; j < ucByteCount; j ++)
{
if (!s_ucPrntDoubleHigh)
{
g_ucprntPattern1 [s_usprntPatternCount] = ucDealData[j];
s_usprntPatternCount ++;
if (s_ucPrntDoubleWidth) /* 倍寬打印*/
{
g_ucprntPattern1 [s_usprntPatternCount] = 0;
s_usprntPatternCount ++;
}
}
else /* 倍高打印 */
{
s_ucRequestDoubleHigh = 1;
g_ucprntPattern1[s_usprntPatternCount] = bspDotByteToWord(ucDealData[j]&0x0f);
g_ucprntPattern3[s_usprntPatternCount] = bspDotByteToWord(ucDealData[j]>>4);
s_usprntPatternCount ++;
if (s_ucPrntDoubleWidth) /* 倍寬打印*/
{
g_ucprntPattern1 [s_usprntPatternCount] = 0;
g_ucprntPattern3 [s_usprntPatternCount] = 0;
s_usprntPatternCount ++;
}
}
}
if (s_ucPrntDoubleWidth) /* 倍寬打印 */
{
usTempWidth = s_usprntPatternCount;
s_usprntPatternCount -= 2;
for (j = 0; j < (ucByteCount - 1); j++)
{
g_ucprntPattern1[s_usprntPatternCount] = g_ucprntPattern1[s_usprntPatternCount]
|g_ucprntPattern1[s_usprntPatternCount - 2];
g_ucprntPattern3[s_usprntPatternCount] = g_ucprntPattern3[s_usprntPatternCount]
|g_ucprntPattern3[s_usprntPatternCount - 2];
s_usprntPatternCount -= 2;
}
s_usprntPatternCount = usTempWidth;
}
}
return SUCCESS;
}
/*
*****************************************************
*
* 函數名:bspDotReverseDealPattern
*
* 功 能:穿孔打印機阿拉伯或ASCII逆向字模處理函數
*
* 輸 入:s_ucPrntDoubleHigh
* s_ucprntCharSpace
* s_ucPrntDoubleWidth
*
* 輸 出:g_ucprntPattern1
* g_ucprntPattern3
* s_usprntPatternCount
*
* 返 回:SUCCESS
*
******************************************************
*/
UINT1 bspDotReverseDealPattern
(
UINT1 _ucTempData, /* 開始取字模的地址 */
UINT1 _ucLangType /* 語言類型(0 ASCII 1阿拉伯語) */
)
{
UINT1 i,j,k;
UINT1 ucByteCount;
UINT2 usTempWidth;
UINT4 offset;
UINT1 ucaData[BYTE_ARABIA] = {0};
UINT1 ucDealData[BYTE_ARABIA] = {0};
mem_set(ucDealData,0,sizeof(ucDealData));
if (_ucLangType)/* 阿拉伯語 */
{
ucByteCount = BYTE_ARABIA;
mem_cpy(ucaData, (UINT1 *)g_ArabFont16X8[_ucTempData-0x80], ucByteCount);
}
else /* ASCII字符 */
{
ucByteCount = BYTE_ASCII;
offset = (_ucTempData - 0x20) * ucByteCount + ASCII_7MUL9_ADDR + 0x240; /* 7x9 字體*/
mem_cpy(ucaData, (UINT4 *)offset, ucByteCount);
}
if (ucByteCount == BYTE_ARABIA)
{
for (j = 0; j < 8; j ++)
{
for (i = 0; i < 8; i ++)
{
bspDotprntBitWrite(ucDealData + j, 7 - i, bspDotprntBitRead(ucaData[2*i],7 - j));
bspDotprntBitWrite(ucDealData + 8 + j, 7 - i, bspDotprntBitRead(ucaData[2*i + 1],7 - j));
}
}
for ( j = 1; j < 8; j ++ )
{
ucDealData[j] &= ~(ucDealData[j] & ucDealData[j - 1]);
ucDealData[8 + j] &= ~(ucDealData[8 + j] & ucDealData[8 + j - 1]);
}
for ( k = 0; k < 8; k ++)
{
g_ucprntPattern1 [PRNT_WIDTH - s_usprntPatternCount] = ucDealData[7 - k];
g_ucprntPattern2 [PRNT_WIDTH - s_usprntPatternCount] = ucDealData[15 - k];
s_usprntPatternCount ++;
}
}
else
{
/* 處理字模字節首尾互換 */
for (k = 0; k < ucByteCount; k++)
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -