?? main.c
字號:
//send_char(DECLARE_SECTOR[i]);
if(flash_sector_erase(DECLARE_SECTOR[i]))
return (ERASE_FLASH_FAIL);
display_progress(60+i);
if(low_pwr) return(POWER_OFF);
}//send_char(32);
//SRAM中的PLU、菜單
//display_progress(30);
/*set_value0(&plu,(uint)sizeof(plu));
plu.price=100;
plu.tax_item=g_tax_catalog[0].tax_item;
j=0;
for(i=0;i<MAX_PLU_NUM;i++) //最大PLU數?
{
if(i/80>j)
{
display_progress(37+i/80);
j=i/80;
}
sprintf(plu.name,"商品%u",i+1);
plu.branch=DEFAULT_BRANCH; //缺省為部門1,相當用戶輸入了部門1
sprintf(buf,"%06u",i+1);
memcpy(plu.bar_code,buf,(uint)sizeof(plu.bar_code));
plu.crc=crcxdata((uint)sizeof(plu)-2,&plu);
//plu.lrc=lrcdata((uint)sizeof(plu)-1,1,&plu);
if(write_sramb(PLU_START_ADDR+
(ulong)i*(uint)sizeof(plu),(uint)sizeof(plu),&plu))
return(WRITE_SRAM_FAIL);
if(low_pwr) return(POWER_OFF);
}//send_char(33);
*/
set_value0(&menu,(uint)sizeof(menu));
for(i=0;i<MAX_TABLE_NUM;i++) //最大臺號數?
{
//定金清0
lnum=0;
if(write_sramb(MENU_START_ADDR+(ulong)i*((uint)sizeof(menu)+4),4,
&lnum))
{
return(WRITE_SRAM_FAIL);
}
//菜單清0
if(write_sramb(MENU_START_ADDR+
(ulong)i*((uint)sizeof(menu)+4)+4,
(uint)sizeof(menu),&menu))
{
return(WRITE_SRAM_FAIL);
}
}//send_char(34);
//部門結構
buf[0]=MAX_BRANCH_NUM;
if(write_eeprom(BRANCH_NUM,1,buf))return(WRITE_EEPROM_FAIL);//部門個數
set_value0(&branch,(uint)sizeof(branch));
branch.tax_item=g_tax_catalog[0].tax_item;
//branch.lrc=lrcdata((uint)sizeof(branch)-1,1,&branch);
for (i=0;i<MAX_BRANCH_NUM;i++) //最大部門數 60
{
sprintf(branch.name,"部門%u",i+1);
branch.lrc=lrcdata((uint)sizeof(branch)-1,1,&branch);//共28個字節
//send_char(branch.lrc);
if(write_eeprom(BRANCH_ADDR+i*(uint)sizeof(branch),
(uint)sizeof(branch),&branch))
return(WRITE_EEPROM_FAIL);
if(low_pwr) return(POWER_OFF);
}//send_char(35);
display_progress(100);
g_tax_pin_pass=1;
//rlt=Writ_ctr_rtc(0xe0,0x20);
buf[0]=0x12;
buf[1]=0;
write_eeprom(PRT_MODE,2,buf);
//2005.7.30
buf[0]=0;
write_eeprom(INVO_ROLL_NUM,1,buf);//清除發票卷的記錄
input_plu_barcode=0;//商品號輸入
//time_mode_buf=1;
//校準時鐘
//strcpy(buf,"請輸入當前的時間\r(如23:59:01輸入235901)");
//rlt=set_time(1);
//if(rlt!=CANCEL && rlt!=OK){Write_FAU_data(TIMEUPDATE,1); return(rlt);}
// 初始化本機上最后一次報稅的截止日期(當天的日期減1)
//Write_FAU_data(TIMEUPDATE,0);
read_rtc(buf);
//send_str(14,buf);
calc_date(buf,-1,buf+3);
if(write_eeprom(END_DATE_ADDR,3,buf+3)) //上次申報稅結束日期3BYTES
return(WRITE_EEPROM_FAIL);
if(write_eeprom(END_DATE_TMP_ADDR,3,buf+3)) //上次申報結束日期暫存3BTYES
return(WRITE_EEPROM_FAIL);
for(i=0;i<5;i++)buf[i]=0;
if(write_eeprom(FORMATFILE,5,buf)) //清格式化文件標志
return(WRITE_EEPROM_FAIL);
EX1 = 1;
return(0);
}
//=======================================================================
uchar Get_Info_payer(void)
{
uchar rlt;
uchar xdata buf[120];
rlt=0;
//GetResponse(SAM_CARD,8,buf);//04.11 09改
//if(SelFile_id(SAM_CARD,0x3F00)) return (SAM_OPERATE_FAIL);
//send_char(2);
rlt=SelFile_id(SAM_CARD,0x2F02);//pack="0x60,8,0xda,0,0xa4,0,0,2,0x2f,2,0
//send_char(testbuf[1]);
if(rlt)
{
return(rlt);
}
//send_char(2);
rlt=SelFile_id(SAM_CARD,0xEF02);
//send_char(0xaa);
if(rlt)
{
//testbuf[2]=rlt;
return(rlt);
}
//send_char(3);
//讀稅控卡的基本信息文件
rlt=RW_bin(SAM_CARD,0,0,103,buf);
//send_char(rlt);
if(rlt)
{
//testbuf[3]=rlt;
return(rlt);
}
//send_char(4);
//比較稅控機編號
if(memcmp(&buf[10],g_manufacturer_info.machinery_no,8)!=0)//機器編號
{
return(MACHINE_NO_ERROR);
}
else
{
//2005.8.15
//memcpy(g_user_info.register_no,&buf[2],8); //稅控卡號
memcpy(g_user_info.tax_payer_code,&buf[18],8); //納稅人編號
memcpy(g_user_info.tax_payer_id,&buf[26],20); //納稅人識別號
memcpy(g_user_info.application_date,&buf[46],4); //應用啟用日期
memcpy(g_user_info.application_valid_date,&buf[50],4); //應用有效日期
memcpy(g_user_info.tax_payer_name,&buf[57],40); //納稅人單位名稱
memcpy(g_user_info.levy_dept_code,&buf[97],4); //主管分局代號
g_user_info.declare_way=buf[101]; //申報方式 (01:用戶卡傳遞,02:其他)
g_user_info.pin_using_mode=buf[102]; //機器使用口令標志(00,用原始口令,01 使用隨機口令,每次不同)
}
//2005.07.25
if(memcmp(g_user_info.application_date,g_user_info.application_valid_date,4)>0)return PIN_DATE_ERROR;
read_rtc(buf);
if(memcmp(&g_user_info.application_date[1],buf,3)>0)return PIN_DATE_ERROR;
rlt=SelFile_id(SAM_CARD,0xEF01);
if(rlt) return(rlt);
rlt=RW_bin(SAM_CARD,0,0,23,&buf[10]);
if(rlt) return(rlt);
if(memcmp(buf,&buf[11],3)>0)return PIN_DATE_ERROR;
return 0;
}
/*---------------------------------------------------------------
功能:完成機卡認證(或初試化)
輸出:成功返回0,否則返回其它錯誤
-------------------------------------------------------------*/
uchar init_machine_card()
{
uchar rlt;
uchar xdata cmd[30],cmd2[30],buf[200];
//uchar j;
//uint num;
uint crc;
//struct manufacturer_info_struct g_manufacturer_info;
//struct record_addr_struct xdata record_addr;
//struct invoice_roll_addr_struct xdata invoice_roll_addr;
//struct day_addr_struct xdata day_addr;
//struct delare_addr_struct xdata declare_addr;
//struct branch_struct xdata branch;
//struct plu_struct xdata plu;
//struct receiver_report_struct xdata receiver_report;
//struct day_report_struct xdata day_report;
//struct month_report_struct xdata month_report;
#ifdef C8_VER
struct trade_report_struct xdata trade_report;
#endif
//struct parameter_struct xdata parameter;
//struct money_add_struct xdata money_add;
//struct menu_struct xdata menu[MAX_MENU_NUM];
//struct invoice_roll_struct xdata invoice_roll;
//struct day_struct xdata day;
//struct distribute_invoice_struct xdata distribute_invoice;
//ulong lnum;
rlt=0;
g_tax_pin_pass=0;
/*rlt=init_var(); //得到出廠信息,包括稅控機編號
if(rlt)
{
return(rlt); //0x32 CRC_ERROR
}
*/
//EEPROM中得到稅控機使用口令
if(read_eeprom(PIN_TMP1,10,buf))return(READ_EEPROM_FAIL);
//send_str(10,buf);
if((buf[0]==0|| buf[0]==0xFF) && (buf[1]==0|| buf[1]==0xFF) &&
(buf[2]==0 || buf[2]==0xFF) && (buf[3]==0|| buf[3]==0xFF)&&
(buf[4]==0 || buf[4]==0xFF) && (buf[5]==0|| buf[5]==0xFF) &&
(buf[6]==0 || buf[6]==0xFF) && (buf[7]==0|| buf[7]==0xFF))
//if(Check_init_machine(8,buf))
{
//send_char(0xcc);
clear_lcd(0,MAX_LCD_NUM);
strcpy(buf,"第一次機卡認證和初始化,\r可能要花幾分鐘...");
lcd_disp(2,0,buf);
//sam卡復位應答
if(atr_sam(buf))
{
return(SAM_RESET_FAIL); //0xd SAM_RESET_FAIL
}
set_value0(&g_user_info,(uint)sizeof(g_user_info));
rlt=Get_Info_payer();
if(rlt) return(rlt);
rlt=Writ_ctr_rtc(0xe0,0x20);
for(rlt=0;rlt<8;rlt++)g_key[rlt]=0;//清掉所有的鍵值,防止誤操作
rlt=set_time(1);
if(rlt!=CANCEL && rlt!=OK){Write_FAU_data(TIMEUPDATE,1); return(rlt);}
// 初始化本機上最后一次報稅的截止日期(當天的日期減1)
Write_FAU_data(TIMEUPDATE,0);
/*rlt=SelFile_id(SAM_CARD,0x2F02);//pack="0x60,8,0xda,0,0xa4,0,0,2,0x2f,2,0
if(rlt)
{
return(rlt);
}
rlt=SelFile_id(SAM_CARD,0xEF02);
if(rlt)
{
return(rlt);
}
//讀稅控卡的基本信息文件
rlt=RW_bin(SAM_CARD,0,0,103,buf);
if(rlt)
{
return(rlt);
}
//比較稅控機編號
if(memcmp(&buf[10],g_manufacturer_info.machinery_no,8)!=0)//機器編號
{
return(MACHINE_NO_ERROR);
}
else
{
set_value0(&g_user_info,(uint)sizeof(g_user_info));
memcpy(g_user_info.tax_payer_code,&buf[18],8); //納稅人編號
memcpy(g_user_info.tax_payer_id,&buf[26],20); //納稅人識別號
memcpy(g_user_info.application_date,&buf[46],4); //應用啟用日期
memcpy(g_user_info.application_valid_date,&buf[50],4); //應用有效日期
memcpy(g_user_info.tax_payer_name,&buf[57],40); //納稅人單位名稱
memcpy(g_user_info.levy_dept_code,&buf[97],4); //主管分局代號
g_user_info.declare_way=buf[101]; //申報方式 (01:用戶卡傳遞,02:其他)
g_user_info.pin_using_mode=buf[102]; //機器使用口令標志(00,用原始口令,01 使用隨機口令,每次不同)
}
*/
if(low_pwr) return(POWER_OFF);
//從稅控卡取4字節隨機數、8字節稅控卡編號和4字節MAC供注冊使用
strcpy(cmd,"DBC0F00000");
rlt=pack_cmd(cmd,cmd2,0,0x10);
if(rlt)
{
return(rlt);
}
//send_char(5);
if(sam_iso(cmd))
{
return(SAM_COMM_FAIL);
}
//send_char(6);
if(get_data(cmd)) //返回0X69,0X01,SAM已經注冊
{
return(TAXCARD_MAC_ERROR);
}
//send_char(7);
memcpy(g_user_info.register_no,&cmd[4],8);
if(atr_cupcard(buf))//復位
{
return(CPU_RESET_FAIL);
}
rlt=SelFile_id(USER_CARD,0x2F02);
if(rlt)
{
return(rlt);
}
//向用戶卡發注冊命令
strcpy(cmd2,"DAC0E4000010");
rlt=pack_cmd(cmd2,cmd,16,4);//16=4字節隨機數+8字節稅控卡編號+4字節MAC
if(rlt)
{
return(rlt);
}
if(id_iso(cmd2))
{
return(USR_COMM_FAIL);
}
if(get_data(cmd2)) // 6A 80
{
return(USERCARD_MAC_ERROR);
}
//此時已經得到MAC2號,所以不用再取響應數據,否則卡返回 6F 00,不同的卡也許不一樣
//取響應數據
/*if(GetResponse(USER_CARD,4,cmd2))//04.11 09改
{
return(USERCARD_MAC_ERROR);
}
*/
//向稅控卡發注冊命令
strcpy(cmd,"DAC0F1000004");
rlt=pack_cmd(cmd,cmd2,4,8);
if(rlt)
{
return(rlt);
}
if(sam_iso(cmd))
{
return(SAM_COMM_FAIL);
}
if(get_data(cmd))
{
return(TAXCARD_MAC_ERROR);
}
memcpy(buf,cmd,8);
/*if(GetResponse(SAM_CARD,8,buf))//04.11 09改
{
return(TAXCARD_MAC_ERROR);
}
*/
//得到8字節的稅控機使用口令,存入EEPROM
crc=crcxdata(8,buf);//加校驗
memcpy(&buf[8],(uchar*)&crc,2);
if(write_eeprom(PIN_TMP1,10,buf))
{
return(WRITE_EEPROM_FAIL);
}
//delayms(200);
if(write_eeprom(PIN_TMP2,10,buf))
{
return(WRITE_EEPROM_FAIL);
}
memcpy(g_user_info.password,buf,8); //保存該口令為注冊口令
//讀稅控卡的監控管理文件//保存用戶信息到EEPROM等任務
rlt=read_control_msg(0);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -