📄 filesystem.lst
字号:
431:io/filesystem.c **** if (c)
432:io/filesystem.c **** softuart_putc(c);
433:io/filesystem.c **** else
434:io/filesystem.c **** break;
435:io/filesystem.c **** }
436:io/filesystem.c **** softuart_putnewline();
437:io/filesystem.c **** #endif
438:io/filesystem.c ****
439:io/filesystem.c **** }
440:io/filesystem.c **** }
441:io/filesystem.c **** }
442:io/filesystem.c **** #if FILESYSTEM_DEBUG
443:io/filesystem.c **** softuart_putnewline();
444:io/filesystem.c **** softuart_putnewline();
445:io/filesystem.c **** #endif
446:io/filesystem.c **** }*/
447:io/filesystem.c ****
448:io/filesystem.c **** unsigned char filesystem_filename_to_buffer(unsigned char *buffer, unsigned int fnpos){
449:io/filesystem.c **** unsigned int pos = 0;
450:io/filesystem.c **** unsigned char k;
451:io/filesystem.c ****
452:io/filesystem.c **** //add filename
453:io/filesystem.c **** for (k=0; k<8; k++){
454:io/filesystem.c **** buffer[pos] = dataflash_read_buffer(fnpos*24 + FILESYSTEM_FTABLE_FILENAME_START + k, 0);
455:io/filesystem.c ****
456:io/filesystem.c **** if (buffer[pos] == 0)
457:io/filesystem.c **** break;
458:io/filesystem.c ****
459:io/filesystem.c **** pos++;
460:io/filesystem.c **** }
461:io/filesystem.c ****
462:io/filesystem.c **** //add '.'
463:io/filesystem.c **** buffer[pos++] = '.';
464:io/filesystem.c ****
465:io/filesystem.c **** for (k=0; k<3; k++){
466:io/filesystem.c **** buffer[pos] = dataflash_read_buffer(fnpos*24 + FILESYSTEM_FTABLE_FILENAME_START + 8 + k, 0);
467:io/filesystem.c ****
468:io/filesystem.c **** if (buffer[pos] == 0)
469:io/filesystem.c **** break;
470:io/filesystem.c ****
471:io/filesystem.c **** pos++;
472:io/filesystem.c **** }
473:io/filesystem.c **** return pos;
474:io/filesystem.c **** }
475:io/filesystem.c ****
476:io/filesystem.c ****
477:io/filesystem.c **** //generate filesystem index
478:io/filesystem.c **** unsigned int filesystem_generate_index(unsigned char *buffer, unsigned int datapos, unsigned int *l
479:io/filesystem.c **** unsigned int i;
480:io/filesystem.c **** unsigned char j,k;
481:io/filesystem.c **** unsigned int tmp;
482:io/filesystem.c **** unsigned int id;
483:io/filesystem.c ****
484:io/filesystem.c **** //every entry looks like:
485:io/filesystem.c **** //IIIII_SSSSS_<a href="/fs/FFFFFFFF.EEE">FFFFFFFF.EEE</a><br>
486:io/filesystem.c **** //-> 5+1+5+1+8+1+3+4 +25 +6= 28+25+6 bytes
487:io/filesystem.c **** //unsigned int skip_files = 0;
488:io/filesystem.c **** //while((*offset) >= 59){
489:io/filesystem.c **** // (*offset) = (*offset) - 59;
490:io/filesystem.c **** // skip_files++;
491:io/filesystem.c **** //}
492:io/filesystem.c ****
493:io/filesystem.c **** //file entry buffer:
494:io/filesystem.c **** unsigned char list_entry[60];
495:io/filesystem.c **** unsigned char list_pos = 0;
496:io/filesystem.c ****
497:io/filesystem.c **** //search all filesystem table entries:
498:io/filesystem.c **** //-> slow !! we always walk through the whole list!! -> FIXME
499:io/filesystem.c **** for(i=0; i<FILESYSTEM_TABLE_SIZE; i++){
500:io/filesystem.c **** //copy page i to dataflash buffer 0
501:io/filesystem.c **** dataflash_copy_page_to_buffer(i, 0);
502:io/filesystem.c ****
503:io/filesystem.c **** //now read 11 filesystem entries:
504:io/filesystem.c **** for(j=0; j<11; j++){
505:io/filesystem.c **** //check if there is already a file with our id:
506:io/filesystem.c **** id = dataflash_read_buffer(j*24 + FILESYSTEM_FTABLE_ID_HI, 0)<<8;
507:io/filesystem.c **** id |= dataflash_read_buffer(j*24 + FILESYSTEM_FTABLE_ID_LO, 0);
508:io/filesystem.c ****
509:io/filesystem.c **** if (id != 0x0000){
510:io/filesystem.c **** //if (skip_files == 0){
511:io/filesystem.c **** #if FILESYSTEM_DEBUG
512:io/filesystem.c **** softuart_puts_progmem("FS : found id ");
513:io/filesystem.c **** softuart_put_uint16(id);
514:io/filesystem.c **** #endif
515:io/filesystem.c **** //we expect this file -> print info!
516:io/filesystem.c ****
517:io/filesystem.c **** //intitialise entry buffer pos
518:io/filesystem.c **** list_pos = 0;
519:io/filesystem.c ****
520:io/filesystem.c **** //add file id
521:io/filesystem.c **** //string_uint16_to_buffer(&list_entry[list_pos], id);
522:io/filesystem.c **** //list_pos += 5;
523:io/filesystem.c **** string_progmem_to_buffer(PSTR("<img src=\"/site/ficon.gif\" align=middle> "), &list_entry[list
524:io/filesystem.c **** list_pos += 41;
525:io/filesystem.c ****
526:io/filesystem.c **** //add <a href="/fs/
527:io/filesystem.c **** string_progmem_to_buffer(PSTR("<a href=\"/fs/"), &list_entry[list_pos], 13);
528:io/filesystem.c **** list_pos += 13;
529:io/filesystem.c ****
530:io/filesystem.c **** //now copy requested data from list_entry buffer to
531:io/filesystem.c **** //tcp buffer:
532:io/filesystem.c **** //if (list_pos>=60) softuart_puts_progmem("FS: OVERFLOW: ");softuart_put_uint8(list_pos);
533:io/filesystem.c **** for(k=0; k<list_pos; k++){
534:io/filesystem.c **** if ((*offset) > 0){
535:io/filesystem.c **** (*offset)--;
536:io/filesystem.c **** }else{
537:io/filesystem.c **** buffer[datapos++] = list_entry[k];
538:io/filesystem.c **** (*len)--;
539:io/filesystem.c **** if ((*len) == 0)
540:io/filesystem.c **** return 0;
541:io/filesystem.c **** }
542:io/filesystem.c **** }
543:io/filesystem.c **** list_pos = 0;
544:io/filesystem.c ****
545:io/filesystem.c **** //add filename
546:io/filesystem.c **** list_pos += filesystem_filename_to_buffer(&list_entry[list_pos], j);
547:io/filesystem.c ****
548:io/filesystem.c **** //add ">
549:io/filesystem.c **** string_progmem_to_buffer(PSTR("\">"), &list_entry[list_pos], 2);
550:io/filesystem.c **** list_pos += 2;
551:io/filesystem.c ****
552:io/filesystem.c **** //add filename again
553:io/filesystem.c **** list_pos += filesystem_filename_to_buffer(&list_entry[list_pos], j);
554:io/filesystem.c ****
555:io/filesystem.c **** //add </a><br>
556:io/filesystem.c **** string_progmem_to_buffer(PSTR("</a>"), &list_entry[list_pos], 4);
557:io/filesystem.c **** list_pos += 4;
558:io/filesystem.c ****
559:io/filesystem.c **** //add ' '
560:io/filesystem.c **** list_entry[list_pos++] = ' ';
561:io/filesystem.c ****
562:io/filesystem.c **** tmp = dataflash_read_buffer(j*24 + FILESYSTEM_FTABLE_BLOCK_COUNT_HI, 0)<<8;
563:io/filesystem.c **** tmp += dataflash_read_buffer(j*24 + FILESYSTEM_FTABLE_BLOCK_COUNT_LO, 0);
564:io/filesystem.c ****
565:io/filesystem.c **** //convert to kbyte
566:io/filesystem.c **** tmp = tmp / 4; //*256/1024 = /4
567:io/filesystem.c **** if (tmp == 0)
568:io/filesystem.c **** tmp = 1;
569:io/filesystem.c **** //add file size
570:io/filesystem.c **** string_uint16_to_buffer(&list_entry[list_pos], tmp);
571:io/filesystem.c **** list_pos += 5;
572:io/filesystem.c ****
573:io/filesystem.c **** //add ' '
574:io/filesystem.c **** string_progmem_to_buffer(PSTR("KB "), &list_entry[list_pos], 3);
575:io/filesystem.c **** list_pos += 3;
576:io/filesystem.c ****
577:io/filesystem.c **** //now copy requested data from list_entry buffer to
578:io/filesystem.c **** //tcp buffer:
579:io/filesystem.c **** //if (list_pos>=60) softuart_puts_progmem("FS: OVERFLOW: ");softuart_put_uint8(list_pos);
580:io/filesystem.c **** for(k=0; k<list_pos; k++){
581:io/filesystem.c **** if ((*offset) > 0){
582:io/filesystem.c **** (*offset)--;
583:io/filesystem.c **** }else{
584:io/filesystem.c **** buffer[datapos++] = list_entry[k];
585:io/filesystem.c **** (*len)--;
586:io/filesystem.c **** if ((*len) == 0)
587:io/filesystem.c **** return 0;
588:io/filesystem.c **** }
589:io/filesystem.c **** }
590:io/filesystem.c ****
591:io/filesystem.c **** //now add next data, reuse buffer, we do not want to use another 59byte buf !
592:io/filesystem.c **** list_pos = 0;
593:io/filesystem.c ****
594:io/filesystem.c **** //add a href part of remove file link:
595:io/filesystem.c **** string_progmem_to_buffer(PSTR(" <a href=\"/adm/rm/"), &list_entry[list_pos], 18);
596:io/filesystem.c **** list_pos += 18;
597:io/filesystem.c ****
598:io/filesystem.c **** //add filename
599:io/filesystem.c **** //list_pos += filesystem_filename_to_buffer(&list_entry[list_pos], j);
600:io/filesystem.c **** //add file id:
601:io/filesystem.c **** string_uint16_to_buffer(&list_entry[list_pos], id);
602:io/filesystem.c **** list_pos += 5;
603:io/filesystem.c ****
604:io/filesystem.c **** //add rest of href:
605:io/filesystem.c **** string_progmem_to_buffer(PSTR("\">remove</a><br>"), &list_entry[list_pos], 16);
606:io/filesystem.c **** list_pos += 16;
607:io/filesystem.c ****
608:io/filesystem.c **** //now copy requested data from list_entry buffer to
609:io/filesystem.c **** //tcp buffer:
610:io/filesystem.c **** //if (list_pos>=60) softuart_puts_progmem("FS: OVERFLOW: ");softuart_put_uint8(list_pos);
611:io/filesystem.c **** for(k=0; k<list_pos; k++){
612:io/filesystem.c **** if ((*offset) > 0){
613:io/filesystem.c **** (*offset)--;
614:io/filesystem.c **** }else{
615:io/filesystem.c **** buffer[datapos++] = list_entry[k];
616:io/filesystem.c **** (*len)--;
617:io/filesystem.c **** if ((*len) == 0)
618:io/filesystem.c **** return 0;
619:io/filesystem.c **** }
620:io/filesystem.c **** }
621:io/filesystem.c ****
622:io/filesystem.c **** #if FILESYSTEM_DEBUG
623:io/filesystem.c **** softuart_puts_progmem(" data created.\r\n");
624:io/filesystem.c **** #endif
625:io/filesystem.c **** //}else{
626:io/filesystem.c **** // skip_files--;
627:io/filesystem.c **** //}
628:io/filesystem.c **** }
629:io/filesystem.c **** }
630:io/filesystem.c **** }
631:io/filesystem.c **** return datapos;
632:io/filesystem.c **** }
633:io/filesystem.c ****
634:io/filesystem.c **** //read next byte to data ptr !
635:io/filesystem.c **** //return: 0 if eof file
636:io/filesystem.c **** // 1 otherwise
637:io/filesystem.c **** unsigned char filesystem_get_next_byte(unsigned char *data){
638:io/filesystem.c **** //unsigned int tmp;
639:io/filesystem.c ****
640:io/filesystem.c **** //copy flash to buffer
641:io/filesystem.c **** if (filesystem_file_pos == 0){
642:io/filesystem.c **** dataflash_copy_page_to_buffer(filesystem_current_block, 0);
643:io/filesystem.c **** for(unsigned char p=0; p<255; p++)
644:io/filesystem.c **** filesystem_buffer[p] = dataflash_read_buffer(p,0);
645:io/filesystem.c **** }
646:io/filesystem.c ****
647:io/filesystem.c **** *data = filesystem_buffer[filesystem_file_pos];
648:io/filesystem.c **** filesystem_file_pos++;
649:io/filesystem.c ****
650:io/filesystem.c **** //block end or end of file ?!
651:io/filesystem.c **** if ((filesystem_file_pos == 255)){
652:io/filesystem.c **** filesystem_file_pos = 0;
653:io/filesystem.c ****
654:io/filesystem.c **** //load next block:
655:io/filesystem.c **** filesystem_current_block = dataflash_read_buffer(FILESYSTEM_FILE_NEXT_HI, 0)<<8;
656:io/filesystem.c **** filesystem_current_block |= dataflash_read_buffer(FILESYSTEM_FILE_NEXT_LO, 0);
657:io/filesystem.c ****
658:io/filesystem.c **** #if FILESYSTEM_DEBUG
659:io/filesystem.c **** //softuart_puts_progmem("FS : next block read: ");
660:io/filesystem.c **** //softuart_put_uint16(filesystem_current_block);
661:io/filesystem.c **** //softuart_putnewline();
662:io/filesystem.c **** #endif
663:io/filesystem.c **** if (filesystem_current_block == 0x0000)
664:io/filesystem.c **** return 0; //eof file
665:io/filesystem.c **** }
666:io/filesystem.c **** return 1;
667:io/filesystem.c **** }
668:io/filesystem.c ****
669:io/filesystem.c ****
670:io/filesystem.c **** unsigned int filesystem_get_data_startat(unsigned char *buffer, unsigned int datapos, unsigned int
671:io/filesystem.c **** // sunsigned int tmp;
672:io/filesystem.c **** unsigned int count;
673:io/filesystem.c **** //unsigned int pos;
674:io/filesystem.c **** unsigned int i;
675:io/filesystem.c **** while (*data_ptr != 0x0000){
676:io/filesystem.c **** //copy block to buffer0:
677:io/filesystem.c **** dataflash_copy_page_to_buffer(*data_ptr, 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -