@@ -33,51 +33,52 @@ fn main() -> ! {
3333 sprintln ! ( "Failed to initialize sdcard." ) ;
3434 } else {
3535 sprintln ! ( "OK" ) ;
36- sprint ! ( "SD Card Capacity: " ) ;
37- if let Ok ( size) = sdcard. device ( ) . card_size_bytes ( ) {
38- sprintln ! ( "{} MB" , size / 1000 / 1000 ) ;
39- // open the first partition
40- sprintln ! ( "Partition 0:" ) ;
41- if let Ok ( mut volume) = sdcard. get_volume ( VolumeIdx ( 0 ) ) {
42- // list files in root dir
43- if let Ok ( root_dir) = sdcard. open_root_dir ( & volume) {
44- if let Err ( _) = sdcard. iterate_dir ( & volume, & root_dir, | entry | {
45- sprintln ! ( "{: >5}B {}" , entry. size, entry. name) ;
46- } ) {
47- sprintln ! ( "Error while iterating over files." ) ;
48- }
49- if let Ok ( _) = sdcard. find_directory_entry ( & volume, & root_dir, "W_TST.TXT" ) {
50- // if a file with the name W_TST.TXT is present, do a write test
51- write_test ( & mut sdcard, & mut volume, & root_dir) ;
52- }
53- } else {
54- sprintln ! ( "Could not open root directory." ) ;
55- }
56- } else {
57- sprintln ! ( "Could not open partition 0." ) ;
58- }
59- } else {
60- sprintln ! ( "Failed to read card size." ) ;
36+
37+ let size = sdcard. device ( ) . card_size_bytes ( ) . unwrap ( ) ;
38+ sprintln ! ( "SD Card Capacity: {} MB" , size / 1000 / 1000 ) ;
39+
40+ // open the first partition
41+ sprintln ! ( "Partition 0:" ) ;
42+ let mut volume = sdcard. get_volume ( VolumeIdx ( 0 ) ) . unwrap ( ) ;
43+
44+ // list files in root dir
45+ let root_dir = sdcard. open_root_dir ( & volume) . unwrap ( ) ;
46+ sdcard. iterate_dir ( & volume, & root_dir, | entry | {
47+ sprintln ! ( "{: >5}B {}" , entry. size, entry. name) ;
48+ } ) . unwrap ( ) ;
49+
50+ // if a file with the name SDTST.TXT is present, do a read/write test
51+ if let Ok ( _) = sdcard. find_directory_entry ( & volume, & root_dir, "SDTST.TXT" ) {
52+ read_write_test ( & mut sdcard, & mut volume, & root_dir) ;
6153 }
6254 }
55+ sprintln ! ( "Done" ) ;
6356
64- sprintln ! ( "done." ) ;
6557 loop { }
6658}
6759
68- fn write_test ( sdcard : & mut SdCard , volume : & mut Volume , dir : & Directory ) {
60+ fn read_write_test ( sdcard : & mut SdCard , volume : & mut Volume , dir : & Directory ) {
6961 sprint ! ( "Write test: " ) ;
70- if let Ok ( mut file) = sdcard. open_file_in_dir ( volume, dir, "W_TST.CSV" , embedded_sdmmc:: Mode :: ReadWriteCreateOrTruncate ) {
71- let data = "1,2,3,4,20" ;
72- if let Ok ( size_written) = sdcard. write ( volume, & mut file, data. as_bytes ( ) ) {
73- sprintln ! ( "Success (Wrote {}B)" , size_written) ;
62+ let mut file = sdcard. open_file_in_dir ( volume, dir, "SDTST.CSV" , embedded_sdmmc:: Mode :: ReadWriteCreateOrTruncate ) . unwrap ( ) ;
63+ let data = "1,2,3,4,20" ;
64+ if let Ok ( size_written) = sdcard. write ( volume, & mut file, data. as_bytes ( ) ) {
65+ sprintln ! ( "Success (Wrote {} bytes)" , size_written) ;
66+ } else {
67+ sprintln ! ( "Failed" ) ;
68+ }
69+ sdcard. close_file ( volume, file) . unwrap ( ) ;
70+
71+ sprint ! ( "Read test: " ) ;
72+ let mut file = sdcard. open_file_in_dir ( volume, dir, "SDTST.CSV" , embedded_sdmmc:: Mode :: ReadOnly ) . unwrap ( ) ;
73+ let mut buffer: [ u8 ; 32 ] = [ 0 ; 32 ] ;
74+ if let Ok ( size_read) = sdcard. read ( volume, & mut file, & mut buffer) {
75+ if size_read == data. len ( ) && buffer[ 0 ..size_read] . eq ( data. as_bytes ( ) ) {
76+ sprintln ! ( "Success (Read same {} bytes)" , size_read) ;
7477 } else {
75- sprintln ! ( "Failed" ) ;
76- }
77- if let Err ( _) = sdcard. close_file ( volume, file) {
78- sprintln ! ( "Could not close file." ) ;
78+ sprintln ! ( "Content differs." ) ;
7979 }
8080 } else {
81- sprintln ! ( "Could not open file for writing. " ) ;
81+ sprintln ! ( "Failed " ) ;
8282 }
83+ sdcard. close_file ( volume, file) . unwrap ( ) ;
8384}
0 commit comments