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

📄 filesystem.lst

📁 ENC28J60 System HTTP
💻 LST
📖 第 1 页 / 共 5 页
字号:
 925:io/filesystem.c **** 	filesystem_fileid = 0;
 926:io/filesystem.c **** 	filesystem_first_block = 0;
 927:io/filesystem.c **** 	filesystem_current_block = 0;
 928:io/filesystem.c **** 	filesystem_file_pos = 0;
 929:io/filesystem.c **** }
 930:io/filesystem.c **** 
 931:io/filesystem.c **** 
 932:io/filesystem.c **** //alocate 264 byte block & store file info header inside:
 933:io/filesystem.c **** unsigned int filesystem_allocate_block(){
 934:io/filesystem.c **** 	//search block
 935:io/filesystem.c **** 	#if FILESYSTEM_DEBUG
 936:io/filesystem.c **** 	softuart_puts_progmem("FS  : searching free block...");
 937:io/filesystem.c **** 	#endif
 180               	37,.LM7-.LFBB2
 181               	.LM7:
 182               	.LFBB2:
 183 0042 CF93      		push r28
 184 0044 DF93      		push r29
 185               	/* prologue: function */
 186               	/* frame size = 0 */
 188               	.LM8:
 189 0046 C2E3      		ldi r28,lo8(50)
 190 0048 D0E0      		ldi r29,hi8(50)
 191               	.L10:
 192               	.LBB2:
 938:io/filesystem.c **** e to buffer
 939:io/filesystem.c **** 		dataflash_copy_page_to_buffer(b, 1);
 940:io/filesystem.c **** 	
 941:io/filesystem.c **** 		//rprintf("FS: checking block: [%d].\r\n",b);
 942:io/filesystem.c **** 		//is it free ? 
 943:io/filesystem.c **** 		//-> ignore b = current block !
 944:io/filesystem.c **** 		if ((dataflash_read_buffer(FILESYSTEM_FILE_FREETAG,1) != 0xE0) && (b != filesystem_current_block)
 193               	944,.LM9-.LFBB2
 194               	.LM9:
 195 004a CE01      		movw r24,r28
 196 004c 61E0      		ldi r22,lo8(1)
 197 004e 0E94 0000 		call dataflash_copy_page_to_buffer
 945:io/filesystem.c ****  free !
 946:io/filesystem.c **** 			#if FILESYSTEM_DEBUG
 947:io/filesystem.c **** 			softuart_puts_progmem(" found block ");
 948:io/filesystem.c **** 			softuart_put_uint16(b);
 949:io/filesystem.c **** 			softuart_putnewline();
 198               	bn	68,0,949,.LM10-.LFBB2
 199               	.LM10:
 200 0052 80E0      		ldi r24,lo8(256)
 201 0054 91E0      		ldi r25,hi8(256)
 202 0056 61E0      		ldi r22,lo8(1)
 203 0058 0E94 0000 		call dataflash_read_buffer
 204 005c 803E      		cpi r24,lo8(-32)
 205 005e 01F0      		breq .L8
 206 0060 8091 0000 		lds r24,filesystem_current_block
 207 0064 9091 0000 		lds r25,(filesystem_current_block)+1
 208 0068 C817      		cp r28,r24
 209 006a D907      		cpc r29,r25
 210 006c 01F4      		brne .L9
 211               	.L8:
 213               	.LM11:
 214 006e 2196      		adiw r28,1
 215 0070 88E0      		ldi r24,hi8(2048)
 216 0072 C030      		cpi r28,lo8(2048)
 217 0074 D807      		cpc r29,r24
 218 0076 01F4      		brne .L10
 219 0078 C0E0      		ldi r28,lo8(0)
 220 007a D0E0      		ldi r29,hi8(0)
 221               	.L9:
 222               	.LBE2:
 950:io/filesystem.c **** ndif
 951:io/filesystem.c **** 			return b;
 952:io/filesystem.c **** 		}
 953:io/filesystem.c **** 	}
 954:io/filesystem.c **** 	//no free block found :(
 955:io/filesystem.c **** 	#if FILESYSTEM_DEBUG
 956:io/filesystem.c **** 	softuart_puts_progmem(" FAILED -> FS FULL ?!");
 957:io/filesystem.c **** 	softuart_putnewline();
 958:io/filesystem.c **** 	#endif
 959:io/filesystem.c **** 	return 0;
 960:io/filesystem.c **** }
 961:io/filesystem.c **** 
 962:io/filesystem.c **** //open a new file:
 963:io/filesystem.c **** unsigned int filesystem_open_file_wr(unsigned char *filename, unsigned char *filename_ext){
 964:io/filesystem.c **** 	//make sure there is no open file !
 965:io/filesystem.c **** 	if (filesystem_status != FILESYSTEM_STATUS_IDLE)
 223               	FBB2
 224               	.LM12:
 225 007c CE01      		movw r24,r28
 226               	/* epilogue start */
 227 007e DF91      		pop r29
 228 0080 CF91      		pop r28
 229 0082 0895      		ret
 231               	.Lscope2:
 234               	.global	filesystem_store_current_block
 236               	filesystem_store_current_block:
 966:io/filesystem.c **** se_file();
 967:io/filesystem.c **** 	
 968:io/filesystem.c **** 	//make file extension lowercase !!
 969:io/filesystem.c **** 	for(unsigned char i=0; i<3 && filename_ext[i] != 0; i++){
 970:io/filesystem.c **** 		if ((filename_ext[i] >= 'A') && (filename_ext[i] <= 'Z'))
 971:io/filesystem.c **** 			filename_ext[i] = filename_ext[i] - 'A' + 'a';
 972:io/filesystem.c **** 	}
 973:io/filesystem.c **** 
 974:io/filesystem.c **** 	//protect filename, only allow a-zA-Z0-9_-
 975:io/filesystem.c **** 	for(unsigned char i=0; i<8; i++){
 976:io/filesystem.c **** 		if (filename[i] == 0)
 977:io/filesystem.c **** 			break;
 978:io/filesystem.c **** 		if (
 979:io/filesystem.c **** 					!((filename[i] >= 'a') && (filename[i] <= 'z')) &&
 980:io/filesystem.c **** 					!((filename[i] >= 'A') && (filename[i] <= 'Z')) &&
 981:io/filesystem.c **** 					!((filename[i] >= '0') && (filename[i] <= '9')) 
 982:io/filesystem.c **** 				){
 983:io/filesystem.c **** 			filename[i] = '_';
 984:io/filesystem.c **** 		}
 985:io/filesystem.c **** 	}
 986:io/filesystem.c **** 
 987:io/filesystem.c **** 	#if FILESYSTEM_DEBUG
 988:io/filesystem.c **** 	softuart_puts_progmem("FS  : new file [");
 989:io/filesystem.c **** 	for(unsigned char i=0; i<8 && filename[i] != 0; i++)
 990:io/filesystem.c **** 		softuart_putc(filename[i]);
 991:io/filesystem.c **** 	softuart_putc('.');
 992:io/filesystem.c **** 	for(unsigned char i=0; i<3 && filename_ext[i] != 0; i++)
 993:io/filesystem.c **** 		softuart_putc(filename_ext[i]);
 994:io/filesystem.c **** 	softuart_putc(']');
 995:io/filesystem.c **** 	softuart_putnewline();
 996:io/filesystem.c **** 	#endif
 997:io/filesystem.c **** 
 998:io/filesystem.c **** 	//check if file exists, returns 0 if file is unknown!
 999:io/filesystem.c **** 	filesystem_fileid = filesystem_search_file(filename, filename_ext);
1000:io/filesystem.c **** 
1001:io/filesystem.c **** 	if (filesystem_fileid != 0){
1002:io/filesystem.c **** 		//file exists !!!
1003:io/filesystem.c **** 		//->delete file & replace it with the new data:
1004:io/filesystem.c **** 		#if FILESYSTEM_DEBUG
1005:io/filesystem.c **** 		softuart_puts_progmem("FS  : WARNING: overwriting existing file !");
1006:io/filesystem.c **** 		softuart_putnewline();
1007:io/filesystem.c **** 		#endif
1008:io/filesystem.c **** 		filesystem_delete_file(filesystem_fileid);
1009:io/filesystem.c **** 	}else{
1010:io/filesystem.c **** 		//new file -> get id:
1011:io/filesystem.c **** 		filesystem_fileid = filesystem_allocate_fileid();
1012:io/filesystem.c **** 	}
1013:io/filesystem.c **** 
1014:io/filesystem.c **** 	filesystem_block_count = 1;
1015:io/filesystem.c **** 
1016:io/filesystem.c **** 	//check for error:
1017:io/filesystem.c **** 	if (filesystem_fileid  == 0)
1018:io/filesystem.c **** 		return 0;
1019:io/filesystem.c **** 
1020:io/filesystem.c **** 	//now search a free block adddress for the first block:
1021:io/filesystem.c **** 	unsigned int block = filesystem_allocate_block();
1022:io/filesystem.c **** 
1023:io/filesystem.c **** 	//check for error:
1024:io/filesystem.c **** 	if (block == 0)
1025:io/filesystem.c **** 		return 0;
1026:io/filesystem.c **** 
1027:io/filesystem.c **** 	//store info:
1028:io/filesystem.c **** 	filesystem_first_block = block;
1029:io/filesystem.c **** 	filesystem_current_block = block;
1030:io/filesystem.c **** 	for (unsigned char i=0; i<8; i++)
1031:io/filesystem.c **** 		filesystem_filename[i] = filename[i];
1032:io/filesystem.c **** 	for (unsigned char i=0; i<3; i++)
1033:io/filesystem.c **** 		filesystem_filename_ext[i] = filename_ext[i];
1034:io/filesystem.c **** 
1035:io/filesystem.c **** 	//return first block:
1036:io/filesystem.c **** 	return block;
1037:io/filesystem.c **** }
1038:io/filesystem.c **** 
1039:io/filesystem.c **** /*unsigned int filesystem_open_file_rd(unsigned char *filename, unsigned char *filename_ext){
1040:io/filesystem.c **** 	unsigned int pos;
1041:io/filesystem.c **** 
1042:io/filesystem.c **** 	//make sure there is no open file !
1043:io/filesystem.c **** 	if (filesystem_status != FILESYSTEM_STATUS_IDLE)
1044:io/filesystem.c **** 		filesystem_close_file();
1045:io/filesystem.c **** 	
1046:io/filesystem.c **** 	//check if file exists, returns 0 if file is unknown!
1047:io/filesystem.c **** 	filesystem_fileid = filesystem_search_file(filename, filename_ext);
1048:io/filesystem.c **** 
1049:io/filesystem.c **** 	if (filesystem_fileid != 0){
1050:io/filesystem.c **** 		//file exists !!!
1051:io/filesystem.c **** 		//->delete file & replace it with the new data:
1052:io/filesystem.c **** 		#if FILESYSTEM_DEBUG
1053:io/filesystem.c **** 		softuart_puts_progmem("FS  : open file for reading!");
1054:io/filesystem.c **** 		softuart_putnewline();
1055:io/filesystem.c **** 		#endif
1056:io/filesystem.c **** 	}else{
1057:io/filesystem.c **** 		//new file -> get id:
1058:io/filesystem.c **** 		#if FILESYSTEM_DEBUG
1059:io/filesystem.c **** 		softuart_puts_progmem("FS  : file not found!");
1060:io/filesystem.c **** 		softuart_putnewline();
1061:io/filesystem.c **** 		#endif
1062:io/filesystem.c **** 		return 0;
1063:io/filesystem.c **** 	}
1064:io/filesystem.c **** 
1065:io/filesystem.c **** 	//pos inside page is ?
1066:io/filesystem.c **** 	pos = 24*((filesystem_fileid-1) % 11);
1067:io/filesystem.c **** 
1068:io/filesystem.c **** 	#if FILESYSTEM_DEBUG
1069:io/filesystem.c **** 	softuart_puts_progmem("FS  : requested fid ");
1070:io/filesystem.c **** 	softuart_put_uint16(filesystem_fileid);
1071:io/filesystem.c **** 	softuart_puts_progmem(", loc on block ");
1072:io/filesystem.c **** 	softuart_put_uint16((filesystem_fileid-1)/11);
1073:io/filesystem.c **** 	softuart_puts_progmem(", pos ");
1074:io/filesystem.c **** 	softuart_put_uint8(pos);
1075:io/filesystem.c **** 	softuart_putnewline();
1076:io/filesystem.c **** 	#endif
1077:io/filesystem.c **** 
1078:io/filesystem.c **** 	//get first block:
1079:io/filesystem.c **** 	filesystem_current_block  = dataflash_read_buffer(pos + FILESYSTEM_FTABLE_BLOCK_START_HI, 0)<<8;
1080:io/filesystem.c **** 	filesystem_current_block |= dataflash_read_buffer(pos + FILESYSTEM_FTABLE_BLOCK_START_LO, 0);
1081:io/filesystem.c **** 
1082:io/filesystem.c **** 	filesystem_first_block = filesystem_current_block;
1083:io/filesystem.c **** 	
1084:io/filesystem.c **** 	for (unsigned char i=0; i<8; i++)
1085:io/filesystem.c **** 		filesystem_filename[i] = filename[i];
1086:io/filesystem.c **** 	for (unsigned char i=0; i<3; i++)
1087:io/filesystem.c **** 		filesystem_filename_ext[i] = filename_ext[i];
1088:io/filesystem.c **** 
1089:io/filesystem.c **** 	filesystem_file_pos = 0;
1090:io/filesystem.c **** 
1091:io/filesystem.c **** 	//return OK
1092:io/filesystem.c **** 	return 1;
1093:io/filesystem.c **** }*/
1094:io/filesystem.c **** 
1095:io/filesystem.c **** 
1096:io/filesystem.c **** //store len bytes of data in current open file. if last==1 close file after write:
1097:io/filesystem.c **** void filesystem_write_data(unsigned char* data, unsigned int len, unsigned char last){
1098:io/filesystem.c **** 	//unsigned int next_block;
1099:io/filesystem.c **** 	//rprintf("FS: writing %d chars.\r\n",len);
1100:io/filesystem.c **** 
1101:io/filesystem.c **** 	//check for invalid fileid:
1102:io/filesystem.c **** 	if (filesystem_fileid == 0)
1103:io/filesystem.c **** 		return;
1104:io/filesystem.c **** 
1105:io/filesystem.c **** 	for( ; len>0; len--){
1106:io/filesystem.c **** 		//save data:
1107:io/filesystem.c **** 		///dataflash_write_to_page_buffer((unsigned int)filesystem_file_pos, 0, (*data));
1108:io/filesystem.c **** 		filesystem_buffer[filesystem_file_pos] = (*data);
1109:io/filesystem.c **** 		//rprintf("FS: saving %c\r\n",(*data));
1110:io/filesystem.c **** 
1111:io/filesystem.c **** 		//block full or end of file ?!
1112:io/filesystem.c **** 		if ((filesystem_file_pos == 255) || (len==1 && last==1)){
1113:io/filesystem.c **** 			//step0: copy buffer to flash:
1114:io/filesystem.c **** 			dataflash_write_n_to_page_buffer(0,0,filesystem_buffer, 256);
1115:io/filesystem.c **** 
1116:io/filesystem.c **** 			//store buffer:
1117:io/filesystem.c **** 			filesystem_store_current_block((filesystem_file_pos == 255) && !(len==1 && last==1));
1118:io/filesystem.c **** 
1119:io/filesystem.c **** 			#if FILESYSTEM_DEBUG
1120:io/filesystem.c **** 			softuart_puts_progmem("FS  : storing block "

⌨️ 快捷键说明

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