📄 ch375hft.c
字号:
mCmdParam.ByteLocate.mByteOffset = ByteOffset; // 移动指针到读取的数据
i = CH375ByteLocate( );
if(i)
return USB_FALL;
mCmdParam.ByteRead.mByteCount = len;
i=CH375ByteRead( );
if(i)
return USB_FALL;
memcpy(UsbBuf, mCmdParam.ByteWrite.mByteBuffer, len);
//memcpy(mCmdParam.ByteWrite.mByteBuffer,UsbBuf,len);
return 0;
}
//======================================================================
void NoUse()
{
CH375FileLocate();
CH375DiskQuery();
CH375FileEnumer();
CH375FileQuery();
CH375FileReadX();
CH375FileWriteX();
// CH375FileRead();
// CH375FileWrite();
// CH375ByteRead();
}
//======================================================================
uchar usb_dcl_dayrec(uchar *start_date,uchar *end_date)
{
ulong addr;
struct day_addr_struct da_addr;
struct day_struct da;
uchar error,i;
uchar FileName[20];
ulong ByteOffset = 0;
ulong FileLength;
uchar FindOk=0;
//创建索引文件
set_value0(FileName,20);
set_value0(UsbBuf,0x100);
error = OpenFile("/RJYSY.BIN");
if ( error == ERR_SUCCESS ) //文件打开成功
{
//获得文件长度
error = CH375FileQuery( );
if(error)
return USB_FALL;
FileLength = mCmdParam.Modify.mFileSize;
while(1)
{
if(ByteOffset>=FileLength)//文件指针移动到尾,没找到机器号退出
//if(ByteOffset>=50)//文件指针移动到尾,没找到机器号退出
{
FindOk = 0;
break;
}
error = Usb_disk_read(ByteOffset,25);
if(error)
return USB_FALL;
i = memcmp(UsbBuf,g_manufacturer_info.machinery_no,8);
if(i==0) //找到机器号退出
{
FindOk = 1;
FileName[0] = '/';
memcpy(&FileName[1],&UsbBuf[16],8);
memcpy(&FileName[9],".BIN",4);
break;
}
ByteOffset += 25;
}
if(FindOk == 1)
{
//找到以前的记录,更新索引信息
set_value0(UsbBuf,255);
memcpy(UsbBuf,g_manufacturer_info.machinery_no,8);
UsbBuf[8] = 0x20;
memcpy(&UsbBuf[9],start_date,3);
UsbBuf[12] = 0x20;
memcpy(&UsbBuf[13],end_date,3);
memcpy(&UsbBuf[16],&FileName[1],8);
UsbBuf[24] = lrcdata(24,1,UsbBuf);
/*写日交易数据索引文件*/
error = Usb_disk_operation(ByteOffset,25);
if(error)
return USB_FALL;
error = CloseFile( ); //* 关闭文件
if(error)
return USB_FALL;
}
else
{
error = CH375FileClose( ); //索引关闭文件
if(error)
return USB_FALL;
//没找到,追加索引记录,创建新的记录文件
strcpy( FileName, "/RJY00001.BIN" ); /* 文件名,该文件在根目录下 */
error = GetFileName(FileName);
if(error)
return USB_FALL;
error = OpenFile("/RJYSY.BIN");
if(error)
return USB_FALL;
set_value0(UsbBuf,255);
memcpy(UsbBuf,g_manufacturer_info.machinery_no,8);
UsbBuf[8] = 0x20;
memcpy(&UsbBuf[9],start_date,3);
UsbBuf[12] = 0x20;
memcpy(&UsbBuf[13],end_date,3);
memcpy(&UsbBuf[16],&FileName[1],8);
UsbBuf[24] = lrcdata(24,1,UsbBuf);
/*写日交易数据索引文件*/
error = Usb_disk_operation(0xffffffff,25);
if(error)
return USB_FALL;
error = CloseFile( ); //* 关闭文件
if(error)
return USB_FALL;
}
}
else if ( error == ERR_MISS_FILE ) // 没有找到文件,必须新建文件
{
//没找到,追加索引记录,创建新的记录文件
strcpy( FileName, "/RJY00001.BIN" ); /* 文件名,该文件在根目录下 */
error = GetFileName(FileName);
if(error)
return USB_FALL;
strcpy( mCmdParam.Open.mPathName, "/RJYSY.BIN" ); /* 文件名,该文件在根目录下 */
error = CH375FileCreate();
if(error)
return USB_FALL;
set_value0(UsbBuf,255);
memcpy(UsbBuf,g_manufacturer_info.machinery_no,8);
UsbBuf[8] = 0x20;
memcpy(&UsbBuf[9],start_date,3);
UsbBuf[12] = 0x20;
memcpy(&UsbBuf[13],end_date,3);
memcpy(&UsbBuf[16],&FileName[1],8);
UsbBuf[24] = lrcdata(24,1,UsbBuf);
/*写日交易数据索引文件*/
error = Usb_disk_operation(0,25);
if(error)
return USB_FALL;
error = CloseFile( ); //* 关闭文件
if(error)
return USB_FALL;
}
else
{
// 打开文件时出错
return USB_FALL;
}
///////////////////////////////////////////////////
strcpy( mCmdParam.Open.mPathName, FileName ); // 文件名,该文件在根目录下
error = CH375FileCreate( );//删除并创建文件
if(error)
return USB_FALL;
error=read_eeprom(DAY_ADDR1,DAY_ADDR_LEN,&da_addr);//日记录当前地址//累加的天数//CRC校验8BYTE
if(error) return READ_EEPROM_FAIL;
if(da_addr.crc!=crcxdata(DAY_ADDR_LEN-2,&da_addr))
{
error=read_eeprom(DAY_ADDR2,DAY_ADDR_LEN,&da_addr);
if(error) return READ_EEPROM_FAIL;
}
if(da_addr.crc!=crcxdata(DAY_ADDR_LEN-2,&da_addr)) return CRC_ERROR;
set_value0(UsbBuf,255);
//-----读取日记录数据-----------//
for(addr=DAY_START_ADDR;addr<da_addr.day_addr;addr+=DAY_LEN_FH)////192DAY_LEN_FH日记录(明文和密文)在flash中的长度
//前64BYTE为日记录数据,后128为电子签名的数据
{
if(read_flash(addr,DAY_LEN_EM,da.date)) return READ_FLASH_FAIL;//DAY_LEN_EM64//日记录在eeprom中的长度
if(memcmp(da.date,start_date,3)<0)
continue;
else if(memcmp(da.date,end_date,3)>0) break;
UsbBuf[0] = 0x20;
if(read_flash(addr,DAY_LEN_FH,&UsbBuf[1])) return READ_FLASH_FAIL;//DAY_LEN_EM64//日记录在eeprom中的长度
memcpy(&UsbBuf[DAY_LEN_EM],&UsbBuf[DAY_LEN_EM+1],DAY_LEN_FH-DAY_LEN_EM);
error = Usb_disk_operation(0xffffffff,DAY_LEN_FH);
if(error)
return USB_FALL;
}
error = CloseFile( ); //* 关闭文件
if(error)
return USB_FALL;
return 0;
}
//==============================================================================
uchar usb_dcl_detailrec(uchar *start_date,uchar *end_date)
{
uchar result;
struct record_struct record;
//uint crc,crctemp;
ulong addtemp;
uint len;
uint rec_sn;
uint start_sn;
uint end_sn;
uint all_rec;//明细总的记录数
uchar declear_over;//报记录结束标志
uchar FileName[20];
uchar error,i;
ulong ByteOffset = 0;
ulong FileLength;
uchar FindOk=0;
///////////////////////////////////////////////////
result=locate_invoice_by_date(0,start_date,end_date);//找出总的明细条数
if((result)&&(result!=NO_DATA)){return (result);}
all_rec=gb_temp;
if(all_rec==0)
{
return(NO_DATA);//无明细时不用写索引文件
}
///////////////////////////////////////////////////
error = OpenFile("/MXSY.BIN");
if ( error == ERR_SUCCESS ) //文件打开成功
{
//获得文件长度
error = CH375FileQuery( );
if(error)
return USB_FALL;
FileLength = mCmdParam.Modify.mFileSize;
while(1)
{
if(ByteOffset>=FileLength)//文件指针移动到尾,没找到机器号退出
{
FindOk = 0;
break;
}
error = Usb_disk_read(ByteOffset,31);
if(error)
return USB_FALL;
i = memcmp(UsbBuf,g_manufacturer_info.machinery_no,8);
if(i==0) //找到机器号退出
{
FindOk = 1;
FileName[0] = '/';
memcpy(&FileName[1],&UsbBuf[18],8);
memcpy(&FileName[9],".BIN",4);
break;
}
ByteOffset += 31;
}
if(FindOk == 1)
{
//找到以前的记录,更新索引信息
set_value0(UsbBuf,255);
memcpy(UsbBuf,g_manufacturer_info.machinery_no,8);
UsbBuf[8] = 0x20;
memcpy(&UsbBuf[9],start_date,3);
UsbBuf[12] = 0x20;
memcpy(&UsbBuf[13],end_date,3);
memcpy(&UsbBuf[16],&all_rec,2);
// FileName 的第一个数据为路径 下划线
memcpy(&UsbBuf[18],&FileName[1],8);
start_sn = 1;
memcpy(&UsbBuf[26],&start_sn,2);
end_sn = all_rec + start_sn - 1;
memcpy(&UsbBuf[28],&end_sn,2);
UsbBuf[30] = lrcdata(30,1,UsbBuf);
/*写明细数据索引文件*/
error = Usb_disk_operation(ByteOffset,31);
if(error)
return USB_FALL;
error = CloseFile( ); //* 关闭文件
if(error)
return USB_FALL;
}
else
{
error = CH375FileClose( ); //索引关闭文件
if(error)
return USB_FALL;
//没找到,追加索引记录,创建新的记录文件
strcpy( FileName, "/MX000001.BIN" ); /* 文件名,该文件在根目录下 */
error = GetFileName(FileName);
if(error)
return USB_FALL;
error = OpenFile("/MXSY.BIN");
if(error)
return USB_FALL;
set_value0(UsbBuf,255);
memcpy(UsbBuf,g_manufacturer_info.machinery_no,8);
UsbBuf[8] = 0x20;
memcpy(&UsbBuf[9],start_date,3);
UsbBuf[12] = 0x20;
memcpy(&UsbBuf[13],end_date,3);
memcpy(&UsbBuf[16],&all_rec,2);
// FileName 的第一个数据为路径 下划线
memcpy(&UsbBuf[18],&FileName[1],8);
start_sn = 1;
memcpy(&UsbBuf[26],&start_sn,2);
end_sn = all_rec + start_sn - 1;
memcpy(&UsbBuf[28],&end_sn,2);
UsbBuf[30] = lrcdata(30,1,UsbBuf);
/*写明细数据索引文件*/
error = Usb_disk_operation(ByteOffset,31);
if(error)
return USB_FALL;
error = CloseFile( ); //* 关闭文件
if(error)
return USB_FALL;
}
}
else if ( error == ERR_MISS_FILE ) // 没有找到文件,必须新建文件
{
//没找到,追加索引记录,创建新的记录文件
strcpy( FileName, "/MX000001.BIN" ); /* 文件名,该文件在根目录下 */
error = GetFileName(FileName);
if(error)
return USB_FALL;
strcpy( mCmdParam.Open.mPathName, "/MXSY.BIN" ); /* 文件名,该文件在根目录下 */
error = CH375FileCreate();
if(error)
return USB_FALL;
set_value0(UsbBuf,255);
memcpy(UsbBuf,g_manufacturer_info.machinery_no,8);
UsbBuf[8] = 0x20;
memcpy(&UsbBuf[9],start_date,3);
UsbBuf[12] = 0x20;
memcpy(&UsbBuf[13],end_date,3);
memcpy(&UsbBuf[16],&all_rec,2);
// FileName 的第一个数据为路径 下划线
memcpy(&UsbBuf[18],&FileName[1],8);
start_sn = 1;
memcpy(&UsbBuf[26],&start_sn,2);
end_sn = all_rec + start_sn - 1;
memcpy(&UsbBuf[28],&end_sn,2);
UsbBuf[30] = lrcdata(30,1,UsbBuf);
/*写明细数据索引文件*/
error = Usb_disk_operation(ByteOffset,31);
if(error)
return USB_FALL;
error = CloseFile( ); //* 关闭文件
if(error)
return USB_FALL;
}
else
{
// 打开文件时出错
return USB_FALL;
}
///////////////////////////////////////////////////
strcpy( mCmdParam.Open.mPathName, FileName ); // 文件名
error = CH375FileCreate( );//删除并创建文件
if(error)
return USB_FALL;
rec_sn=0;
declear_over=0;
//找出未滚掉的明细的条数
while(all_rec) // 一条记录一写
{
if(rec_sn==0)result=LookUp_inv_list_roll(start_date,end_date,&addtemp,0,&record);//找第一条明细
else result=LookUp_inv_list_roll(start_date,end_date,&addtemp,1,&record); //找非第一条明细
if(result)
{
if(result==OK)
declear_over=1;
else
break;
}
rec_sn++;
len=(RECORD_LENGTH+(uint)(record.item_num)*INVOICE_ITEM_LEN);
UsbBuf[0] = 0xAA;
UsbBuf[1] = len/0x0100;
UsbBuf[2] = len%0x0100;
memcpy(&UsbBuf[3],(uchar*)&record,len+1);//组成明细申报的数据包
len+=4;
//计算文件名
error = Usb_disk_operation(0xffffffff,len);
if(error)
return USB_FALL;
if(declear_over==1)
{
break;
}//找出的是最后一条明细,则退出
}
addtemp=RECORD_START_ADDR; //明细起始地址
declear_over=0;
while(all_rec) //找出滚动后的明细的条数
{
result=LookUp_inv_list(start_date,end_date,&addtemp,&record);
if(result){if(result==OK){declear_over=1;}else break;}
rec_sn++;
len=(RECORD_LENGTH+(uint)(record.item_num)*INVOICE_ITEM_LEN);
UsbBuf[0] = 0xAA;
UsbBuf[1] = len/0x0100;
UsbBuf[2] = len%0x0100;
memcpy(&UsbBuf[3],(uchar*)&record,len+1);//组成明细申报的数据包
len+=4;
error = Usb_disk_operation(0xffffffff,len);
if(error)
return USB_FALL;
if(declear_over==1)
{
break;
}//找出的是最后一条明细,则退出
}
error = CloseFile( ); //关闭文件
if(error)
return USB_FALL;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -