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

📄 filesystem.lst

📁 ENC28J60 System HTTP
💻 LST
📖 第 1 页 / 共 5 页
字号:
 678:io/filesystem.c **** 
 679:io/filesystem.c **** 		//get bytes used inside this block:
 680:io/filesystem.c **** 		count = dataflash_read_buffer(FILESYSTEM_FILE_BLOCK_USAGE,0)+1;
 681:io/filesystem.c **** 
 682:io/filesystem.c **** 		//dump block:
 683:io/filesystem.c **** 		i=0;
 684:io/filesystem.c **** 
 685:io/filesystem.c **** 		//calc first startbyte:
 686:io/filesystem.c **** 		if (inside_block_pos != 0){
 687:io/filesystem.c **** 			count = count - inside_block_pos;
 688:io/filesystem.c **** 			i = inside_block_pos;
 689:io/filesystem.c **** 			inside_block_pos = 0;
 690:io/filesystem.c **** 		}
 691:io/filesystem.c **** 
 692:io/filesystem.c **** 		if ((count == 256) && (i == 0) && (len >=256)){
 693:io/filesystem.c **** 			dataflash_read_n_to_buffer(&buffer[datapos], 0);
 694:io/filesystem.c **** 			datapos += 256;
 695:io/filesystem.c **** 			len -= 256;
 696:io/filesystem.c **** 			//i+=...
 697:io/filesystem.c **** 			if (len == 0)
 698:io/filesystem.c **** 				return 0;
 699:io/filesystem.c **** 		}else{
 700:io/filesystem.c **** 			while (count > 0){
 701:io/filesystem.c **** 				buffer[datapos++] = dataflash_read_buffer(i,0);
 702:io/filesystem.c **** 				len--;
 703:io/filesystem.c **** 				//no more data allowed
 704:io/filesystem.c **** 				if (len == 0)
 705:io/filesystem.c **** 					return 0;
 706:io/filesystem.c **** 				count--;
 707:io/filesystem.c **** 				i++;
 708:io/filesystem.c **** 			}
 709:io/filesystem.c **** 		}
 710:io/filesystem.c **** 		//calc next block:
 711:io/filesystem.c **** 		*data_ptr  = dataflash_read_buffer(FILESYSTEM_FILE_NEXT_HI, 0)<<8;
 712:io/filesystem.c **** 		*data_ptr  = (*data_ptr) | dataflash_read_buffer(FILESYSTEM_FILE_NEXT_LO, 0);
 713:io/filesystem.c **** 		
 714:io/filesystem.c **** 		//tmp should be zero if this is the last block. but we have a flag for last block, too:
 715:io/filesystem.c **** 		if (dataflash_read_buffer(FILESYSTEM_FILE_BLOCKTAG,0) == 0xEE)
 716:io/filesystem.c **** 			*data_ptr = 0x0000; //last block!
 717:io/filesystem.c **** 	}
 718:io/filesystem.c **** 	return datapos;
 719:io/filesystem.c **** }
 720:io/filesystem.c **** 
 721:io/filesystem.c **** 
 722:io/filesystem.c **** 
 723:io/filesystem.c **** 
 724:io/filesystem.c **** 
 725:io/filesystem.c **** 
 726:io/filesystem.c **** 
 727:io/filesystem.c **** 
 728:io/filesystem.c **** 
 729:io/filesystem.c **** 
 730:io/filesystem.c **** unsigned int filesystem_get_data(unsigned char *buffer, unsigned int datapos, unsigned int len, uns
 731:io/filesystem.c **** 	//file was requested, search file:
 732:io/filesystem.c **** 	//unsigned int tmp;
 733:io/filesystem.c **** 	unsigned int count;
 734:io/filesystem.c **** 	unsigned int pos;
 735:io/filesystem.c **** 
 736:io/filesystem.c **** 
 737:io/filesystem.c **** 	//invalid fileid ?
 738:io/filesystem.c **** 	if (fileid == 0){
 739:io/filesystem.c **** 		#if FILESYSTEM_DEBUG
 740:io/filesystem.c **** 		softuart_puts_progmem("FS  : file not found.");
 741:io/filesystem.c **** 		softuart_putnewline();
 742:io/filesystem.c **** 		#endif
 743:io/filesystem.c **** 		return datapos;
 744:io/filesystem.c **** 	}
 745:io/filesystem.c **** 
 746:io/filesystem.c **** 	//copy lookuptable page to dataflash buffer 0
 747:io/filesystem.c **** 	dataflash_copy_page_to_buffer(((fileid-1)/11), 0);
 748:io/filesystem.c **** 	
 749:io/filesystem.c **** 	//pos inside page is ?
 750:io/filesystem.c **** 	pos = 24*((fileid-1) % 11);
 751:io/filesystem.c **** 
 752:io/filesystem.c **** 	#if FILESYSTEM_DEBUG
 753:io/filesystem.c **** 	softuart_puts_progmem("FS  : requested fid ");
 754:io/filesystem.c **** 	softuart_put_uint16(fileid);
 755:io/filesystem.c **** 	softuart_puts_progmem(", loc on block ");
 756:io/filesystem.c **** 	softuart_put_uint16((fileid-1)/11);
 757:io/filesystem.c **** 	softuart_puts_progmem(", pos ");
 758:io/filesystem.c **** 	softuart_put_uint8(pos);
 759:io/filesystem.c **** 	softuart_putnewline();
 760:io/filesystem.c **** 	#endif
 761:io/filesystem.c **** 
 762:io/filesystem.c **** 	//get first block:
 763:io/filesystem.c **** 	*data_ptr  = dataflash_read_buffer(pos + FILESYSTEM_FTABLE_BLOCK_START_HI, 0)<<8;
 764:io/filesystem.c **** 	*data_ptr  = (*data_ptr) | dataflash_read_buffer(pos + FILESYSTEM_FTABLE_BLOCK_START_LO, 0);
 765:io/filesystem.c **** 
 766:io/filesystem.c **** 	if (*data_ptr == 0x0000){
 767:io/filesystem.c **** 		buffer[datapos++] = '4';
 768:io/filesystem.c **** 		buffer[datapos++] = '0';
 769:io/filesystem.c **** 		buffer[datapos++] = '4';
 770:io/filesystem.c **** 		return datapos;
 771:io/filesystem.c **** 	}
 772:io/filesystem.c **** 
 773:io/filesystem.c **** 	while (*data_ptr != 0x0000){
 774:io/filesystem.c **** 		//copy block to buffer0:
 775:io/filesystem.c **** 		dataflash_copy_page_to_buffer(*data_ptr, 0);
 776:io/filesystem.c **** 
 777:io/filesystem.c **** 		//is this block requested ?
 778:io/filesystem.c **** 		if (streampos < 255){
 779:io/filesystem.c **** 			//get bytes used inside this block:
 780:io/filesystem.c **** 			count = dataflash_read_buffer(FILESYSTEM_FILE_BLOCK_USAGE,0)+1;
 781:io/filesystem.c **** 	
 782:io/filesystem.c **** 			//dump block:
 783:io/filesystem.c **** 			unsigned int i=0;
 784:io/filesystem.c **** 
 785:io/filesystem.c **** 			//calc first startbyte:
 786:io/filesystem.c **** 			if (streampos != 0){
 787:io/filesystem.c **** 				count = count - streampos;
 788:io/filesystem.c **** 				i += streampos;
 789:io/filesystem.c **** 				streampos = 0;
 790:io/filesystem.c **** 			}
 791:io/filesystem.c **** 			
 792:io/filesystem.c **** 			while (count > 0){
 793:io/filesystem.c **** 				//if (streampos > 0){
 794:io/filesystem.c **** 				//	//FIXME: could be done muuuch faster (calculate skip count etc...) FIXME
 795:io/filesystem.c **** 				//	streampos--;
 796:io/filesystem.c **** 				//}else{
 797:io/filesystem.c **** 					buffer[datapos++] = dataflash_read_buffer(i,0);
 798:io/filesystem.c **** 					len--;
 799:io/filesystem.c **** 					//no more data allowed
 800:io/filesystem.c **** 					if (len == 0)
 801:io/filesystem.c **** 						return 0;
 802:io/filesystem.c **** 				//}
 803:io/filesystem.c **** 				count--;
 804:io/filesystem.c **** 				i++;
 805:io/filesystem.c **** 			}
 806:io/filesystem.c **** 		}else{
 807:io/filesystem.c **** 			//we skip this block -> decrease streampos:
 808:io/filesystem.c **** 			streampos -= 256;
 809:io/filesystem.c **** 		}
 810:io/filesystem.c **** 
 811:io/filesystem.c **** 		//calc next block:
 812:io/filesystem.c **** 		*data_ptr  = dataflash_read_buffer(FILESYSTEM_FILE_NEXT_HI, 0)<<8;
 813:io/filesystem.c **** 		*data_ptr  = (*data_ptr) | dataflash_read_buffer(FILESYSTEM_FILE_NEXT_LO, 0);
 814:io/filesystem.c **** 		
 815:io/filesystem.c **** 		//tmp should be zero if this is the last block. but we have a flag for last block, too:
 816:io/filesystem.c **** 		if (dataflash_read_buffer(FILESYSTEM_FILE_BLOCKTAG,0) == 0xEE)
 817:io/filesystem.c **** 			*data_ptr = 0x0000; //last block!
 818:io/filesystem.c **** 	}
 819:io/filesystem.c **** 	#if FILESYSTEM_DEBUG
 820:io/filesystem.c **** 	softuart_puts_progmem("FS  : file sent.");
 821:io/filesystem.c **** 	softuart_putnewline();
 822:io/filesystem.c **** 	#endif
 823:io/filesystem.c **** 
 824:io/filesystem.c **** 
 825:io/filesystem.c **** 	return datapos;
 826:io/filesystem.c **** }
 827:io/filesystem.c **** 
 828:io/filesystem.c **** //search file table for the next free file id:
 829:io/filesystem.c **** unsigned int filesystem_allocate_fileid(){
 830:io/filesystem.c **** 	unsigned int id;
 831:io/filesystem.c **** 	unsigned int tmp;
 832:io/filesystem.c **** 	unsigned char i,j;
 833:io/filesystem.c **** 
 834:io/filesystem.c **** 	//start with invalid file id 
 835:io/filesystem.c **** 	id = 0;
 836:io/filesystem.c **** 
 837:io/filesystem.c **** 	#if FILESYSTEM_DEBUG
 838:io/filesystem.c **** 	softuart_puts_progmem("FS: searching free id...");
 839:io/filesystem.c **** 	#endif
 840:io/filesystem.c **** 
 841:io/filesystem.c **** 	//search all filesystem table entries:
 842:io/filesystem.c **** 	for(i=0; i<FILESYSTEM_TABLE_SIZE; i++){
 843:io/filesystem.c **** 		//copy page i to dataflash buffer 0
 844:io/filesystem.c **** 		dataflash_copy_page_to_buffer(i, 0);
 845:io/filesystem.c **** 
 846:io/filesystem.c **** 		//now read 11 filesystem entries:
 847:io/filesystem.c **** 		for(j=0; j<11; j++){
 848:io/filesystem.c **** 			//check if there is already a file with our id:
 849:io/filesystem.c **** 			tmp  = dataflash_read_buffer(j*24 + FILESYSTEM_FTABLE_ID_HI, 0)<<8;
 850:io/filesystem.c **** 			tmp |= dataflash_read_buffer(j*24 + FILESYSTEM_FTABLE_ID_LO, 0);
 851:io/filesystem.c **** 			
 852:io/filesystem.c **** 			//if current file has an id of 0 -> this slot is empty -> use this id !
 853:io/filesystem.c **** 			if (tmp == 0){
 854:io/filesystem.c **** 				id = 1 + i*11 + j; //fileid valid from 1...50*11-1 = 1...549
 855:io/filesystem.c **** 				#if FILESYSTEM_DEBUG
 856:io/filesystem.c **** 				softuart_puts_progmem(" found id ");
 857:io/filesystem.c **** 				softuart_put_uint16(id);
 858:io/filesystem.c **** 				softuart_putnewline();
 859:io/filesystem.c **** 				#endif
 860:io/filesystem.c **** 				return id;
 861:io/filesystem.c **** 			}
 862:io/filesystem.c **** 		}	
 863:io/filesystem.c **** 	}
 864:io/filesystem.c **** 
 865:io/filesystem.c **** 	#if FILESYSTEM_DEBUG
 866:io/filesystem.c **** 	softuart_puts_progmem(" failed. FS FULL!");
 867:io/filesystem.c **** 	softuart_putnewline();
 868:io/filesystem.c **** 	#endif
 869:io/filesystem.c **** 	return 0; //FAILED
 870:io/filesystem.c **** }
 871:io/filesystem.c **** 
 872:io/filesystem.c **** //close file & story lookup info
 873:io/filesystem.c **** void filesystem_close_file(){
 874:io/filesystem.c **** 	unsigned int pos;
 875:io/filesystem.c **** 	unsigned char i;
 876:io/filesystem.c **** 
 877:io/filesystem.c **** 	#if FILESYSTEM_DEBUG
 878:io/filesystem.c **** 	softuart_puts_progmem("FS  : closing file ");
 879:io/filesystem.c **** 	softuart_put_uint16(filesystem_fileid);
 880:io/filesystem.c **** 	softuart_putnewline();
 881:io/filesystem.c **** 	#endif
 882:io/filesystem.c **** 
 883:io/filesystem.c **** 	//check for invalid fileid:
 884:io/filesystem.c **** 	if (filesystem_fileid == 0)
 885:io/filesystem.c **** 		return;
 886:io/filesystem.c **** 
 887:io/filesystem.c **** 	//store active buffer:
 888:io/filesystem.c **** 	dataflash_write_n_to_page_buffer(0,0,filesystem_buffer, filesystem_file_pos);
 889:io/filesystem.c **** 	filesystem_store_current_block(0);
 890:io/filesystem.c **** 
 891:io/filesystem.c **** 	//store file info in lookup table!
 892:io/filesystem.c **** 	
 893:io/filesystem.c **** 	//copy lookuptable page to dataflash buffer 0
 894:io/filesystem.c **** 	dataflash_copy_page_to_buffer(((filesystem_fileid-1)/11), 0);
 895:io/filesystem.c **** 	
 896:io/filesystem.c **** 	//pos inside page is ?
 897:io/filesystem.c **** 	pos = 24*((filesystem_fileid-1) % 11);
 898:io/filesystem.c **** 
 899:io/filesystem.c **** 	//step1: write file id:
 900:io/filesystem.c **** 	dataflash_write_to_page_buffer(pos + FILESYSTEM_FTABLE_ID_HI, 0, (filesystem_fileid>>8)&0xFF);
 901:io/filesystem.c **** 	dataflash_write_to_page_buffer(pos + FILESYSTEM_FTABLE_ID_LO, 0, (filesystem_fileid   )&0xFF);
 902:io/filesystem.c **** 	
 903:io/filesystem.c **** 	//step2: write timestamp
 904:io/filesystem.c **** 	///NOT SUPPORTED RIGHT NOW///
 905:io/filesystem.c **** 	
 906:io/filesystem.c **** 	//step3: write filename + ext:
 907:io/filesystem.c **** 	for(i=0; i<8; i++)
 908:io/filesystem.c **** 		dataflash_write_to_page_buffer(pos + FILESYSTEM_FTABLE_FILENAME_START + i, 0, filesystem_filename
 909:io/filesystem.c **** 	for(i=0; i<3; i++)
 910:io/filesystem.c **** 		dataflash_write_to_page_buffer(pos + FILESYSTEM_FTABLE_FILENAME_START + i + 8, 0, filesystem_file
 911:io/filesystem.c **** 
 912:io/filesystem.c **** 	//step4: write start block address:
 913:io/filesystem.c **** 	dataflash_write_to_page_buffer(pos + FILESYSTEM_FTABLE_BLOCK_START_HI, 0, (filesystem_first_block>
 914:io/filesystem.c **** 	dataflash_write_to_page_buffer(pos + FILESYSTEM_FTABLE_BLOCK_START_LO, 0, (filesystem_first_block 
 915:io/filesystem.c **** 
 916:io/filesystem.c **** 	//step5: write block count:
 917:io/filesystem.c **** 	dataflash_write_to_page_buffer(pos + FILESYSTEM_FTABLE_BLOCK_COUNT_HI, 0, (filesystem_block_count>
 918:io/filesystem.c **** 	dataflash_write_to_page_buffer(pos + FILESYSTEM_FTABLE_BLOCK_COUNT_LO, 0, (filesystem_block_count 
 919:io/filesystem.c **** 
 920:io/filesystem.c **** 	//store data on flash:
 921:io/filesystem.c **** 	dataflash_copy_buffer_to_page((filesystem_fileid-1)/11,0);
 922:io/filesystem.c **** 
 923:io/filesystem.c **** 	//reset vars:
 924:io/filesystem.c **** 	filesystem_status = FILESYSTEM_STATUS_IDLE;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -