📄 poskb.c
字号:
///////////////////////////////////////////////////////////////////////////////
// poskb.c
//
// Copyright (c) 2004, WeiHua Technology Co., Ltd.
// All rights reserved.
//
// Created by:
// Modified by: Chen Huahai 2004-09-03
//
// Desription:
///////////////////////////////////////////////////////////////////////////////
#include "ecrsys.h"
#include "keydef.h"
#include "data.h"
#include "ftype.h"
#include "sysdata.h"
#include "lcd2.h"
#include "lcd_pop.h"
#include "font.h"
#include "program.h"
#include <string.h>
void Get_Bar_Char(char *dst, byte *srcbar);
/*
///////////////////////////////////////////////////////////////////////////////
POS键盘:
键盘定义:
键值获取与转换:
键值预设:
PC软件键值预设:
串口功能设置与转换:
DPLU初始化,设置和销售.
///////////////////////////////////////////////////////////////////////////////
*/
/*
///////////////////////////////////////////////////////////////////////////////
修改记录
更新: 2004.10.21
0. 增加文件: ps2.c, poskb.h, poskb.c
1. ecrsys.h
#define MAX_KEY_CNT 38
==>>
#define MAX_EXTEND_KEY 128
#define MAX_KEY_CNT (38 + MAX_EXTEND_KEY)
#define FF_KEY_NUM 62+1
==>>
#define FF_KEY_NUM (62+1+MAX_EXTEND_KEY)
#define FF_KEY_NUM 56+1
==>>
#define FF_KEY_NUM (56+1+MAX_EXTEND_KEY)
增加了一个 MAX_KEY_WD1 宏定义
1.1 print.c
把MAX_KEY_CNT改成了MAX_KEY_WD1
2. key.c
const char Deft_Key_Tabl[MAX_KEY_CNT] 后面追加:
,
KD_DPLU001, KD_DPLU02, KD_DPLU03, KD_DPLU04, KD_DPLU05, KD_DPLU06, KD_DPLU07, KD_DPLU08,
KD_FEED, KD_RCPT_ON, KD_RA, KD_PO, KD_OPEN, KD_SUSPEND, KD_TNSFER, KD_NS,
KD_DPLU09, KD_DPLU10, KD_DPLU11, KD_DPLU12, KD_DPLU13, KD_DPLU14, KD_DPLU15, KD_DPLU16,
KD_TAXSFT1, KD_TAXSFT2, KD_TAX_EMP, KD_PCASH1, KD_PCASH2, KD_PCASH3, KD_PCASH4, KD_MISC,
KD_DPLU17, KD_DPLU18, KD_DPLU19, KD_DPLU20, KD_DPLU21, KD_DPLU22, KD_DPLU23, KD_DPLU24,
KD_DPSF, KD_RM, KD_PER1, KD_PER2, KD_CLEAR, KD_XTIME, KD_CELRK, KD_CHARGE,
KD_DPLU25, KD_DPLU26, KD_DPLU27, KD_DPLU28, KD_DPLU29, KD_DPLU30, KD_DPLU31, KD_DPLU32,
KD_DP4, KD_DP8, KD_PER3, KD_PLU, KD_7, KD_8, KD_9, KD_CHECK,
KD_DPLU33, KD_DPLU34, KD_DPLU35, KD_DPLU36, KD_DPLU37, KD_DPLU38, KD_DPLU39, KD_DPLU40,
KD_DP3, KD_DP7, KD_REFUND, KD_EC, KD_4, KD_5, KD_6, KD_SUBTTL,
KD_DPLU41, KD_DPLU42, KD_DPLU43, KD_DPLU44, KD_DPLU45, KD_DPLU46, KD_DPLU47, KD_DPLU48,
KD_DP2, KD_DP6, KD_AMOUNT, KD_TRS_VOID,KD_1, KD_2, KD_3, KD_CASH,
KD_DPLU49, KD_DPLU50, KD_DPLU51, KD_DPLU52, KD_DPLU53, KD_DPLU54, KD_DPLU55, KD_DPLU56,
KD_DP1, KD_DP5, KD_VOID, KD_T0, KD_0, KD_D0, KD_DEC, KD_CASH
3. key.c
const char key_logic[MAX_KEY_CNT] = 后面追加:
,
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,
0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
4. key.c
void key_matrx_init(void) 最后增加:
PS2_GetFeedCode();
5. key.c
KeyScan() 函数最后,增加:
if (PS2_ChkKeyIn(&work) == OK)
{
key_rngset(work);
}
6. key.c
const char Modify_Key_Tabl[FF_KEY_NUM] 最后增加:
,
KD_DPLU001, KD_DPLU02, KD_DPLU03, KD_DPLU04, KD_DPLU05, KD_DPLU06,
KD_DPLU07, KD_DPLU08, KD_DPLU09, KD_DPLU10, KD_DPLU11, KD_DPLU12,
KD_DPLU13, KD_DPLU14, KD_DPLU15, KD_DPLU16, KD_DPLU17, KD_DPLU18,
KD_DPLU19, KD_DPLU20, KD_DPLU21, KD_DPLU22, KD_DPLU23, KD_DPLU24,
KD_DPLU25, KD_DPLU26, KD_DPLU27, KD_DPLU28, KD_DPLU29, KD_DPLU30,
KD_DPLU31, KD_DPLU32, KD_DPLU33, KD_DPLU34, KD_DPLU35, KD_DPLU36,
KD_DPLU37, KD_DPLU38, KD_DPLU39, KD_DPLU40, KD_DPLU41, KD_DPLU42,
KD_DPLU43, KD_DPLU44, KD_DPLU45, KD_DPLU46, KD_DPLU47, KD_DPLU48,
KD_DPLU49, KD_DPLU50, KD_DPLU51, KD_DPLU52, KD_DPLU53, KD_DPLU54,
KD_DPLU55, KD_DPLU56, KD_DPLU57, KD_DPLU58, KD_DPLU59, KD_DPLU60,
KD_DPLU61, KD_DPLU62, KD_DPLU63, KD_DPLU64, KD_DPLU65, KD_DPLU66,
KD_DPLU67, KD_DPLU68, KD_DPLU69, KD_DPLU70, KD_DPLU71, KD_DPLU72,
KD_DPLU73, KD_DPLU74, KD_DPLU75, KD_DPLU76, KD_DPLU77, KD_DPLU78,
KD_DPLU79, KD_DPLU80, KD_DPLU81, KD_DPLU82, KD_DPLU83, KD_DPLU84,
KD_DPLU85, KD_DPLU86, KD_DPLU87, KD_DPLU88, KD_DPLU89, KD_DPLU90,
KD_DPLU91, KD_DPLU92, KD_DPLU93, KD_DPLU94, KD_DPLU95, KD_DPLU96,
KD_DPLU97, KD_DPLU98, KD_DPLU99, KD_DPLU100, KD_DPLU101, KD_DPLU102,
KD_DPLU103, KD_DPLU104, KD_DPLU105, KD_DPLU106, KD_DPLU107, KD_DPLU108,
KD_DPLU109, KD_DPLU110, KD_DPLU111, KD_DPLU112, KD_DPLU113, KD_DPLU114,
KD_DPLU115, KD_DPLU116, KD_DPLU117, KD_DPLU118, KD_DPLU119, KD_DPLU120,
KD_DPLU121, KD_DPLU122, KD_DPLU123, KD_DPLU124, KD_DPLU125, KD_DPLU126,
KD_DPLU127, KD_DPLU128
7. key.c
const char Prn_Key_Tabl[FF_KEY_NUM][11+1] 最后增加:
,
"DPLU01", "DPLU02", "DPLU03", "DPLU04", "DPLU05", "DPLU06",
"DPLU07", "DPLU08", "DPLU09", "DPLU10", "DPLU11", "DPLU12",
"DPLU13", "DPLU14", "DPLU15", "DPLU16", "DPLU17", "DPLU18",
"DPLU19", "DPLU20", "DPLU21", "DPLU22", "DPLU23", "DPLU24",
"DPLU25", "DPLU26", "DPLU27", "DPLU28", "DPLU29", "DPLU30",
"DPLU31", "DPLU32", "DPLU33", "DPLU34", "DPLU35", "DPLU36",
"DPLU37", "DPLU38", "DPLU39", "DPLU40", "DPLU41", "DPLU42",
"DPLU43", "DPLU44", "DPLU45", "DPLU46", "DPLU47", "DPLU48",
"DPLU49", "DPLU50", "DPLU51", "DPLU52", "DPLU53", "DPLU54",
"DPLU55", "DPLU56", "DPLU57", "DPLU58", "DPLU59", "DPLU60",
"DPLU61", "DPLU62", "DPLU63", "DPLU64", "DPLU65", "DPLU66",
"DPLU67", "DPLU68", "DPLU69", "DPLU70", "DPLU71", "DPLU72",
"DPLU73", "DPLU74", "DPLU75", "DPLU76", "DPLU77", "DPLU78",
"DPLU79", "DPLU80", "DPLU81", "DPLU82", "DPLU83", "DPLU84",
"DPLU85", "DPLU86", "DPLU87", "DPLU88", "DPLU89", "DPLU90",
"DPLU91", "DPLU92", "DPLU93", "DPLU94", "DPLU95", "DPLU96",
"DPLU97", "DPLU98", "DPLU99", "DPLU100", "DPLU101", "DPLU102",
"DPLU103", "DPLU104", "DPLU105", "DPLU106", "DPLU107", "DPLU108",
"DPLU109", "DPLU110", "DPLU111", "DPLU112", "DPLU113", "DPLU114",
"DPLU115", "DPLU116", "DPLU117", "DPLU118", "DPLU119", "DPLU120",
"DPLU121", "DPLU122", "DPLU123", "DPLU124", "DPLU125", "DPLU126",
"DPLU127", "DPLU128"
8. keydef.h
增加:
#include "poskb.h" // Hard PLU define
9. serial.c
将原来的
byte Uart_SetBaudRate(byte port, word baud);
分解成:
byte Uart_SetBaudRate(byte port, word baud);
byte Uart_SaveBaudRate(byte port, word baud);
并修改protest.c, serial.c, program.c中的Uart_SetBaudRate()相关语句.
并在ftype.h中增加Uart_SaveBaudRate()的声明.
10. program.c
(1) void FFkey_Update(void) 最后增加:
PS2_GetFeedCode();
(2) 在progmain()的 case KD_CASH: 中增加:
else if (lnum == 8000)
{
}
else if (lnum == 8001)
{
PS2_SetPortFunc(1);
}
else if (lnum == 8002)
{
}
else if (lnum == 8010)
{
PS2_GetKBScanCode(); // 获取POS键盘扫描码.
}
11. pc_comm.c
(1) 在 case KEY_LAYOUT_DWN: 之后增加:
case KB_POS_LAYOUT_DWN:
Do_KB_POS_Layout_Dwn(); // POS Keyboard layout down-load
break;
(2) 在 case KEY_LAYOUT_UP: 之后增加:
case KB_POS_LAYOUT_UP:
Do_KB_POS_Layout_Up(); // POS Keyboard layout up-load
break;
(3) 替换两个函数,
void Do_Key_Layout_Dwn(void);
void Do_Key_Layout_Up(void);
并增加两个函数,
void Do_KB_POS_Layout_Up(void);
void Do_KB_POS_Layout_Dwn(void);
在pc_comm.h增加上述两个函数声明及以下宏定义.
#define KB_POS_LAYOUT_DWN 0x07 // POS Keyboard layout down-load
#define KB_POS_LAYOUT_UP 0x37 // POS Keyboard layout up-load
12. program.c
progmain() 函数:
default:
errorType(ERR_KEY_ILLEGAL);
break;
==>>
default:
if ((InCmd >= KD_DPLU001) && (InCmd <= KD_DPLU120))
{
lnum = InCmd - KD_DPLU001;
Prg_DrPlu(lnum);
lastincmd = KD_PLU;
}
else
{
errorType(ERR_KEY_ILLEGAL);
}
break;
13. protest.c
Init_PLU() 函数,最后增加:
DPlu_Init();
14. sale.c
salemain() 函数:
default:
errorType(ERR_KEY_ILLEGAL);
break;
==>>
default:
if ((InCmd >= KD_DPLU001) && (InCmd <= KD_DPLU120) && (numcnt == 0))
{
numcnt = 4;
lnum = DPlu_GetLink(InCmd-KD_DPLU001+1);
if (lnum != 0)
{
Do_PLU();
lastincmd = KD_PLU;
}
}
else
{
errorType(ERR_KEY_ILLEGAL);
}
break;
15. ftype.h
增加:
byte PS2_ChkKeyIn(byte *keyCode);
void PS2_GetFeedCode(void);
void PS2_GetKBScanCode(void); // 调试用.
void PS2_SetPortFunc(byte flag);
void Prg_DrPlu(word num);
void DPlu_Init(void);
word DPlu_GetLink(word num);
16. ps2.c
根据具体版本的不同,可能需要调整串口设置语句.
Uart_SetBaudRate()
17. 注: 在WD1+中, 编程直接PLU, 并没有用这里自带的函数, 而是用了小郭所写的函数, 不过把那些所写的函数也都全部的放到这里面来了.
交易模式下面, 处理方式有点不一样, 更改了一点点.
增加了报表下面的处理方式.
具体的参考sale.c和xzreport.c中的第一个default中的地方.
.. 全编译.
///////////////////////////////////////////////////////////////////////////////
*/
//// public function
//void Prg_DrPlu(word num);
//void DPlu_Init(void);
//word DPlu_GetLink(word num);
//
//#define MAX_DPLU_CNT 120
//static word dPluLink[MAX_DPLU_CNT];
//
/////////////////////////////////////////////////////////////////////////////////
//// Descript: get defined No. linked PLU
//// In Param: num --- DPLU No.
//// Out Param: void
//// Return: PLU No. 0 means Error!
/////////////////////////////////////////////////////////////////////////////////
//word DPlu_GetLink(word num)
//{
// num -= 1;
// if (num >= MAX_DPLU_CNT)
// {
// return 0;
// }
// if ((dPluLink[num] == 0) || (dPluLink[num] > MAX_PLU_CNT))
// {
// return 0;
// }
// return dPluLink[num];
//}
//
/////////////////////////////////////////////////////////////////////////////////
//// Descript: initial DPLU linked plu to default.
//// In Param: void
//// Out Param: void
//// Return: void
/////////////////////////////////////////////////////////////////////////////////
//void DPlu_Init(void)
//{
// word i;
//
// for (i=0; i<MAX_DPLU_CNT; i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -