?? filesystem.lst
字號:
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;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -