📄 main.c.bak
字号:
for(i=0;i<(uchar)sizeof(DECLARE_SECTOR);i++)//34扇区
{
//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); //保存该口令为注册口令
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -