📄 sk.c
字号:
}//---------------------------------------------------------------------------//清除Eeprom 全部内容//ESC,CMD81,SUB10,LEN=5,CheckSum//ESC,CMD81,SUB10,LEN=6,err,CheckSumint EraseEeprom(void){ int err; unsigned char erese_eeprom_command[] = {0x1b,0x81,0x10,5,0,0}; unsigned char return_buf[20]; memset(return_buf,0x0,20); err = SendCommand(erese_eeprom_command,erese_eeprom_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } return err;}//---------------------------------------------------------------------------// 税控卡--用户卡 注册 int TB_TaxInit( void );//ESC,CMD81,SUB82,LEN=5,CheckSum//ESC,CMD81,SUB82,LEN=6,err,CheckSum ->0:初始化成功; !=0:见错误表//税控初始化命令int TaxCtrInitCommand(void){ int err; unsigned char tax_ctr_init_command[10] = {0x1b,0x81,0x82,5,0,0}; unsigned char return_buf[20]; err = SendCommand(tax_ctr_init_command,tax_ctr_init_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } return err;}//---------------------------------------------------------------------------//(cpu)分发发票号 DISTRIBUTE_INVOICE_NB//ESC,CMD81,SUB83,LEN=5,CheckSum//ESC,CMD81,SUB83,LEN=6,err,CheckSum ->0:成功; !=0:见错误表int YHDistributeBillNo(void){ int err=0; unsigned char distribute_billNo_command[] = {0x1b,0x81,0x83,5,0,0}; unsigned char return_buf[20]; memset(return_buf,0x0,20); err = SendCommand(distribute_billNo_command,distribute_billNo_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } return err;}//---------------------------------------------------------------------------//(sam)录入发票号 INPUT_INVOICE_NB 数据从#define FlashNowBillRollUseInfo_11Add读出(22)//ESC,CMD81,SUB84,LEN=5,CheckSum//ESC,CMD81,SUB84,LEN=6,err,CheckSum ->0:成功; !=0:见错误表int SKRegisterBillNo(void){ int err; unsigned char register_billNo_command[] = {0x1b,0x81,0x84,5,0,0}; unsigned char return_buf[20]; err = SendCommand(register_billNo_command,register_billNo_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } return err;}//---------------------------------------------------------------------------//(sam)开票 ISSUE_INVOICE命令用于生成发票税控码//ESC,CMD81,SUB85,LEN=5,CheckSum//ESC,CMD81,SUB85,LEN=6,err,CheckSum ->0:成功; !=0:见错误表int MakeOutOnInvoice(void){ int err; char make_out_an_invoice_command[] = {0x1b,0x81,0x85,5,0,0}; char return_buf[100]; memset(return_buf,0x0,100); err = SendCommand(make_out_an_invoice_command,make_out_an_invoice_command[3],return_buf); if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } memmove(prevent_forge_code,&return_buf[5],8); return err;}//---------------------------------------------------------------------------//(sam)日汇 //pro_flg=0->日交易累计记录签名,=1->其他数据签名 //dat_addr->(pro_flg==0时:指向 日交易数据),(pro_flg==1时:指向其他数据签名区)//ESC,CMD81,SUB86,LEN=5,CheckSum//ESC,CMD81,SUB86,LEN=6,err,CheckSum ->0:成功; !=0:见错误表//"日汇"操作过程: 1.)先将'pro_flg(1个字节)、日汇总数据Flash存储地址(4个字节)'写入Eeprom的EepromAdd_15// 2.)再发送日汇总命令int DayCollect(unsigned char proFlag,int daySellDataAddress){ unsigned char day_collect_file_command[20] = {0x1b,0x81,0x86,5,0,0}; unsigned char tmp_buf[100]; int err; memset(tmp_buf,0x0,100); tmp_buf[0] = proFlag; //日交易累计记录签名标志 memmove(&tmp_buf[1],(unsigned char *)&daySellDataAddress,4); //日汇总数据Flash存储地址 err = WriteEeprom(EepromAdd_15,5,tmp_buf); if(err) return err; err = SendCommand(day_collect_file_command,day_collect_file_command[3],tmp_buf); //接收数据 if(err || tmp_buf[4]) { if(err) return err; else return tmp_buf[4]; } return err;}//---------------------------------------------------------------------------//(sam)生成申报数据 DECLARE_DUTY 命令用于生成申报数据//ESC,CMD81,SUB87,LEN=5,CheckSum//ESC,CMD81,SUB87,LEN=6,err,CheckSum ->0:成功; !=0:见错误表//功能:谁控卡口令验证int SKCardDeclare(void){ int err=0; unsigned char SKcard_declare_command[] = {0x1b,0x81,0x87,5,0,0}; unsigned char return_buf[20]; memset(return_buf,0x0,20); err = SendCommand(SKcard_declare_command,SKcard_declare_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } return err;}//---------------------------------------------------------------------------//(cpu)汇总申报数据 DATA_COLLECT//ESC,CMD81,SUB88,LEN=5,CheckSum//ESC,CMD81,SUB88,LEN=6,err,CheckSum ->0:成功; !=0:见错误表int YHCardDeclareCollect(void){ int err=0; unsigned char YHCard_declare_collect_command[] = {0x1b,0x81,0x88,5,0,0}; unsigned char return_buf[20]; memset(return_buf,0x0,20); err = SendCommand(YHCard_declare_collect_command,YHCard_declare_collect_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } usleep(500); return err;}//---------------------------------------------------------------------------//0x89 (必须在税控初始化之后才允许进行) -> 卡 复位!!!// sam 卡口令验证//ESC,CMD81,SUB89,LEN=5,CheckSum//ESC,CMD81,SUB89,LEN=6,err,CheckSum ->0:成功; !=0:见错误表//功能:税控卡口令验证int SKCardPasswordValidate(void){ int err=0; unsigned char sk_password_validate_command[] = {0x1b,0x81,0x89,5,0,0}; unsigned char return_buf[20]; memset(return_buf,0x0,20); err = SendCommand(sk_password_validate_command,sk_password_validate_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } return err;}//---------------------------------------------------------------------------//0x8A (必须在税控初始化之后才允许进行) -> 卡 复位!!//(cpu)验证口令 VERIFY命令用于校验命令数据域的PIN的正确性。//ESC,CMD81,SUB8A,LEN=5,CheckSum//ESC,CMD81,SUB8A,LEN=6,err,CheckSum ->0:成功; !=0:见错误表//功能:用户卡口令验证int YHCardPasswordValidate(void){ int err=0; unsigned char yh_password_validate_command[] = {0x1b,0x81,0x8a,5,0,0}; unsigned char return_buf[20]; memset(return_buf,0x0,20); err = SendCommand(yh_password_validate_command,yh_password_validate_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } usleep(100); return err;}//---------------------------------------------------------------------------//卡 复位 char SAMorCPU =0->(税控卡)SAM卡,=1->(用户卡)CPU卡,=2->(税务管理卡)CPU卡//ESC,CMD81,SUB8B,LEN=6,SAMorCPU,CheckSum//ESC,CMD81,SUB8B,LEN=6,err,CheckSum ->0:成功; !=0:见错误表int CardReseat(unsigned char cardType){ int err=0; unsigned char card_reseat_command[20] = {0x1b,0x81,0x8b,6,0,0,0}; unsigned char return_buf[200]; memset(return_buf,0x0,20); err = SendCommand(card_reseat_command,card_reseat_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } usleep(800); return err;}//---------------------------------------------------------------------------//(sam)读监控信息文件密文//ESC,CMD81,SUB8C,LEN=5,CheckSum//ESC,CMD81,SUB8C,LEN=6,err,CheckSum ->0:成功; !=0:见错误表int ReadVigilFileToFlash(void){ int err=0; unsigned char read_vigil_file_command[] = {0x1b,0x81,0x8c,5,0,0}; unsigned char return_buf[20]; memset(return_buf,0x0,20); err = SendCommand(read_vigil_file_command,read_vigil_file_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } usleep(500); return err;}//---------------------------------------------------------------------------//(sam)更新监控数据 UPDATE_CONTROLS//ESC,CMD81,SUB8D,LEN=5,CheckSum//ESC,CMD81,SUB8D,LEN=6,err,CheckSum ->0:成功; !=0:见错误表int UpdateVigilFile(void){ int err=0; unsigned char update_vigil_file_command[] = {0x1b,0x81,0x8d,5,0,0}; unsigned char return_buf[20]; memset(return_buf,0x0,20); err = SendCommand(update_vigil_file_command,update_vigil_file_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } usleep(800); return err;}//---------------------------------------------------------------------------//读 二进制文件//ESC,CMD81,SUB8E,LEN=5,CheckSum//ESC,CMD81,SUB8E,LEN=6,err,CheckSum ->0:成功; !=0:见错误表//读文件操作过程: 1.)先将以下五项 大/小卡、文件ID、所读文件内部的偏移地址、长度、写入地址 写入Eeprom的EepromAdd_15// 2.)再发送读文件命令// 参数: 大/小卡(char)、文件ID(char)、所读文件内部的偏移地址(char)、长度(char)、写入地址(long)// char SAMorCPU =0x12->大卡用户卡或管理卡(此处的大卡是用户卡还是管理卡自己判断) =0x13->小卡税控卡// char FileID 文件号// char Offset 所读文件内部的偏移地址// char Len 读出长度(从地址0读)// long write_address 读出内容写入的地址(FLASH ROM)int ReadTaxFile(unsigned char cardType,unsigned char fileId,unsigned char fileOffset,unsigned char fileLength,int writeAddress){ int err=0; unsigned char read_tax_file_command[20] = {0x1b,0x81,0x8e,5,0,0}; unsigned char tmp_buf[10]; unsigned char return_buf[200]; //参数: 大/小卡(char)、文件ID(char)、所读文件内部的偏移地址(char)、长度(char)、写入地址(long) //char SAMorCPU =0x12->大卡用户卡或管理卡(此处的大卡是用户卡还是管理卡自己判断) =0x13->小卡税控卡 //char FileID 文件号 //char Offset 所读文件内部的偏移地址 //char Len 读出长度(从地址0读) //long write_address 读出内容写入的地址(FLASH ROM) memset(tmp_buf,0x0,10); tmp_buf[0] = cardType; //卡类型 tmp_buf[1] = fileId; //文件编号 tmp_buf[2] = fileOffset; //读文件偏移地址 tmp_buf[3] = fileLength; //文件长度 memmove(&tmp_buf[4],(unsigned char *)&writeAddress,4); //读数据起始地址 err = WriteEeprom(EepromAdd_15,8,tmp_buf); if(err) return err; memset(return_buf,0x0,200); err = SendCommand(read_tax_file_command,read_tax_file_command[3],return_buf); //发送命令 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } return err;}//---------------------------------------------------------------------------//身份认证:税务管理卡与被核查税控收款机的税控卡进行身份认证//ESC,CMD81,SUB8F,LEN=5,CheckSum//ESC,CMD81,SUB8F,LEN=6,err,CheckSum ->0:成功; !=0:见错误表int TQStatusAttestation(void){ int err=0; unsigned char TQstatus_attestation_command[] = {0x1b,0x81,0x8f,5,0,0}; unsigned char return_buf[20]; memset(return_buf,0x0,20); err = SendCommand(TQstatus_attestation_command,TQstatus_attestation_command[3],return_buf); //发送命令 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } return err;}//---------------------------------------------------------------------------//将 flash rom (FlashGLCardFile3Add)地址(len=233),处的稽查数据,写入核查文件(按记录)//ESC,CMD81,SUB90,LEN=5,CheckSum//ESC,CMD81,SUB90,LEN=6,err,CheckSum ->0:成功; !=0:见错误表 此处如果返回0xa0也正确 表明当前的管理卡已满需要更换管理卡int WriteTQCardCheckFile(void){ int err=0; unsigned char write_TQCard_check_file_command[] = {0x1b,0x81,0x90,5,0,0}; unsigned char return_buf[20]; memset(return_buf,0x0,20); err = SendCommand(write_TQCard_check_file_command,write_TQCard_check_file_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } usleep(500); return err;}//---------------------------------------------------------------------------//读 税种税目索引文件02,47/rec (200条记录)->FlashYHCardFile3Add//ESC,CMD81,SUB91,LEN=5,CheckSum//ESC,CMD81,SUB91,LEN=6,err,CheckSum ->0:成功; !=0:见错误表int ReadTaxkindFileToFlash(void){ int err=0; unsigned char read_taxkind_file_command[] = {0x1b,0x81,0x91,5,0,0}; unsigned char return_buf[20]; memset(return_buf,0x0,20); err = SendCommand(read_taxkind_file_command,read_taxkind_file_command[3],return_buf); //接收数据 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; } usleep(500); return err;}//---------------------------------------------------------------------------//读 定长记录文件//ESC,CMD92,SUB8E,LEN=5,CheckSum//ESC,CMD92,SUB8E,LEN=6,err,CheckSum ->0:成功; !=0:见错误表//读文件操作过程: 1.)先将以下五项 大/小卡、文件ID、记录编号(char)(必须从一开始)、长度、写入地址 写入Eeprom的EepromAdd_15// 2.)再发送读文件命令//参数: 大/小卡(char)、文件ID(char)、记录(char)、长度(char)、写入地址(long)//char SAMorCPU =0x13->(税控卡)SAM卡,=0x12->(用户卡)CPU卡,=0x12->(税务管理卡)CPU卡//char FileID 文件号//char recNum 记录//char Len 读出长度//long WriteAddr 读出内容写入的地址(FLASH ROM)int ReadNoteFile(unsigned char cardType,unsigned char fileId,unsigned char fileNoteNumber,unsigned char fileLength,int writeAddress){ int err=0; unsigned char read_note_file_command[20] = {0x1b,0x81,0x92,5,0,0}; unsigned char tmp_buf[10]; unsigned char return_buf[200]; memset(tmp_buf,0x0,10); tmp_buf[0] = cardType; //卡类型 tmp_buf[1] = fileId; //文件编号 tmp_buf[2] = fileNoteNumber; //所读'文件纪录'的编号 tmp_buf[3] = fileLength; //文件长度 memmove(&tmp_buf[4],(unsigned char *)&writeAddress,4); //读数据起始地址 err = WriteEeprom(EepromAdd_15,8,tmp_buf); if(err) return err; memset(return_buf,0x0,200); err = SendCommand(read_note_file_command,read_note_file_command[3],return_buf); //发送命令 if(err || return_buf[4]) { if(err) return err; else return return_buf[4]; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -