?? fiscal.c
字號:
///////////////////////////////////////////////////////////////////////////////
// fiscal.c
//
// Copyright (c) 2004, WeiHua Technology Co., Ltd.
// All rights reserved.
//
// Created by: Chen Huahai 2004-10-15
//
// Desription: NE-2 (Turkey) fiscal operation
///////////////////////////////////////////////////////////////////////////////
#include "ECRSYS.h"
#include "ftype.h"
#include "data.h"
#include "sysdata.h"
#if SW_VER == SW_NE2
#define FIRM_CODE_BASE 1
#define FIRM_CODE_LEN 12
#define FIRM_CODE_EMPTY 0xff
// only for debug
#define TURKEY_CHAR_MAX 10
const byte m_TurkeyCharacterTable[TURKEY_CHAR_MAX] = {
0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a
};
///////////////////////////////////////////////////////////////////////////////
// Descript: check fm exist and fm head & tail
// Return: true / false
///////////////////////////////////////////////////////////////////////////////
bool CheckFmExist(void)
{
if (Fm_Exist() == true)
{
if ((Fm_ReadByte(FM_HEAD_ADDR) == FM_HEAD_INFO) &&
(Fm_ReadByte(FM_TAIL_ADDR) == FM_TAIL_INFO))
{
return true;
}
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Descript: check firm code whether not preset
// Return: true / false
///////////////////////////////////////////////////////////////////////////////
bool CheckFirmCodeNotPreset(void)
{
dword addr;
for (addr = FIRM_CODE_BASE; addr < (FIRM_CODE_BASE + FIRM_CODE_LEN); addr++)
{
if (Fm_ReadByte(addr) != FIRM_CODE_EMPTY)
{
return false;
}
}
return true;
}
///////////////////////////////////////////////////////////////////////////////
// Descript: check the front of firm code(Turkey Characters) that user input
// whether valid
// In para: byte* userInput
// Return: true / false
///////////////////////////////////////////////////////////////////////////////
bool CheckFrontOfFirmCodeValid(byte* userInput)
{
byte turkeyChar1, turkeyChar2;
byte i;
if (numcnt == 4)
{
bool turkeyChar1Valid = false;
bool turkeyChar2Valid = false;
turkeyChar1 = (userInput[0] << 4) + userInput[1];
turkeyChar2 = (userInput[2] << 4) + userInput[3];
for (i=0; i<TURKEY_CHAR_MAX; i++)
{
if (m_TurkeyCharacterTable[i] == turkeyChar1)
{
turkeyChar1Valid = true;
}
if (m_TurkeyCharacterTable[i] == turkeyChar2)
{
turkeyChar2Valid = true;
}
}
if ((turkeyChar1Valid == true) && (turkeyChar2Valid == true))
{
return true;
}
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Descript: firm code (serial number) program
// [P] - [ABCD] - [PO] - [DDDDDDDD] - [SUBTTL] - [CHECK] - [SUBTTL/CASH]
// ABCD: the code for characters, use the Turkey character table.
///////////////////////////////////////////////////////////////////////////////
void FirmCodeProgram(void)
{
byte firmCode[FIRM_CODE_LEN+1];
if (CheckFmExist() != true)
{
errorType(ERR_FM_NOT_EXIST);
return;
}
if (CheckFirmCodeNotPreset() != true)
{
errorType(ERR_FIRM_CODE_PRESET);
return;
}
if (numcnt != 4)
{
errorType(ERR_INPUT_DIGIT);
return;
}
if (CheckFrontOfFirmCodeValid(In_Buff) != true)
{
errorType(ERR_INVALID_TURKEY_CHAR);
return;
}
firmCode[0] = (In_Buff[0] << 4) + In_Buff[1];
firmCode[1] = (In_Buff[2] << 4) + In_Buff[3];
firmCode[2] = ' ';
firmCode[3] = ' ';
// wait user input 8 digit and check it
while (true)
{
if (GetIn() == NG)
{
continue;
}
// check user whether quit
if ((GetMainMode() != CurrMode) || (InCmd == KD_CASH))
{
return;
}
switch (InCmd)
{
case KD_SUBTTL:
if ((numcnt == 8) && (lnum == 0))
{
errorType(ERR_FIRM_CODE_ZERO);
}
else if (numcnt == 8)
{
byte i;
for (i=0; i<8; i++)
{
firmCode[4+i] = In_Buff[i] + '0';
}
firmCode[FIRM_CODE_LEN] = '\0';
// print it and wait user affirm
Prn_InsStr("FIS NO: ", 1, NM_FONT_PRN, FLUSH_LEFT);
Prn_InsStr(firmCode, MAX_PRN_LEN, NM_FONT_PRN, FLUSH_RIGHT);
Prn_Str(1);
Prn_InsStr("Are you Sure ?", MAX_PRN_LEN/2, NM_FONT_PRN, FLUSH_MID);
Prn_Str(1);
prn_Stamp();
while (Key_Poll_Chk() == FALSE);
if (GetKey() == KD_CHECK)
{
// write to fm, print and display result.
if (Fm_WriteStr(FIRM_CODE_BASE, firmCode, FIRM_CODE_LEN) == OK)
{
Prn_InsStr("FIS NO Setup Success!", 1, NM_FONT_PRN, FLUSH_LEFT);
Prn_Str(1);
Prn_InsStr("FIS NO: ", 1, NM_FONT_PRN, FLUSH_LEFT);
Prn_InsStr(firmCode, MAX_PRN_LEN, NM_FONT_PRN, FLUSH_RIGHT);
Prn_Str(1);
prn_Stamp();
Clr_Dsp_Data();
disp_Char_Str("FIS NO OK!", 0); // only for debug
bellcnt = 0xfe;
while (Key_Poll_Chk() == FALSE);
GetKey();
}
else
{
errorType(ERR_FM_WRITE);
}
}
return;
}
else
{
errorType(ERR_INPUT_DIGIT);
}
break;
default:
bellcnt = 100;
break;
}
Clr_Dsp_Data();
RightDisp(0L, 0);
}
}
///////////////////////////////////////////////////////////////////////////////
// Descript: preset fm head & tail
// Return: true / false
///////////////////////////////////////////////////////////////////////////////
bool PresetFmHeadTail(void)
{
if (Fm_Exist() == true)
{
if ((Fm_WriteByte(FM_HEAD_ADDR, FM_HEAD_INFO) == OK) &&
(Fm_WriteByte(FM_TAIL_ADDR, FM_TAIL_INFO) == OK))
{
if (CheckFmExist() == true)
{
return true;
}
}
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Descript: read firm code from fm
// Out Param: byte* firmCode (FIRM_CODE_LEN)
// Return: true / false
///////////////////////////////////////////////////////////////////////////////
bool ReadFirmCode(byte* firmCode)
{
if (CheckFmExist() == true)
{
Fm_ReadStr(firmCode, FIRM_CODE_BASE, FIRM_CODE_LEN);
return true;
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
// Descript: enter fiscal mode
///////////////////////////////////////////////////////////////////////////////
void FiscalStart(void)
{
if (CheckFmExist() != true)
{
errorType(ERR_FM_NOT_EXIST);
return;
}
if (CheckFirmCodeNotPreset() == true)
{
errorType(ERR_FIRM_CODE_NOT_PRESET);
return;
}
// check whether fiscal mode now
// check fm fiscal mode area whether blank
// prompt and wait user assure
// write fm fiscal mode area (need write "code info" ???) // only for debug
// prompt user fiscal start success
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -