⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch375hft.c

📁 一些经常用到的单片机底层驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	
	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 + -