]>
cloudbase.mooo.com Git - z180-stamp.git/blob - avr/cmd_sd.c
55acf2f89c26ac590c1f8b1825c6c441b7b5a7b6
7 #include "print-utils.h"
10 static const FLASH
char * const FLASH rc_names
[] = {
20 FSTR("INVALID_OBJECT"),
21 FSTR("WRITE_PROTECTED"),
22 FSTR("INVALID_DRIVE"),
24 FSTR("NO_FILE_SYSTEM"),
28 FSTR("NOT_ENOUGH_CORE"),
29 FSTR("TOO_MANY_OPEN_FILES")
33 void put_rc (FRESULT rc
)
36 printf_P(PSTR("rc=%u FR_%S\n"), rc
, rc_names
[rc
]);
38 printf_P(PSTR("rc=%u FR_"), rc
);
39 my_puts_P(rc_names
[rc
]);
46 #define BUFF_SIZE 1024
47 BYTE Buff
[BUFF_SIZE
]; /* Working buffer */
49 static DWORD last_sect
;
53 * dd <pd#> [<sector>] - Dump sector
56 command_ret_t
do_dd(cmd_tbl_t
*cmdtp
, int flag
, int argc
, char * const argv
[])
62 (void) cmdtp
; (void) flag
;
67 dev
= (BYTE
) strtoul(argv
[1], 0, 10);
70 sec
= strtoul(argv
[2], 0, 10);
74 res
= disk_read(dev
, Buff
, sec
, 1);
77 printf_P(PSTR("rc=%.2x\n"), res
);
78 return CMD_RET_FAILURE
;
82 printf_P(PSTR("Sector:%lu\n"), sec
);
83 dump_ram((uint32_t) (size_t) Buff
, 0, 0x200, NULL
);
85 return CMD_RET_SUCCESS
;
89 * di <pd#> - Initialize disk
92 command_ret_t
do_di(cmd_tbl_t
*cmdtp
, int flag
, int argc
, char * const argv
[])
97 (void) cmdtp
; (void) flag
;
100 return CMD_RET_USAGE
;
102 dev
= (BYTE
) strtoul(argv
[1], 0, 10);
103 res
= disk_status(dev
);
104 printf_P(PSTR("disk_status=%.2x\n"), res
);
106 if ((res
& STA_NODISK
) == 0) {
107 res
= disk_initialize(dev
);
109 printf_P(PSTR("rc=%.2x\n"), res
);
111 return CMD_RET_FAILURE
;
114 return CMD_RET_SUCCESS
;
118 * ds <pd#> - Show disk status
121 command_ret_t
do_ds(cmd_tbl_t
*cmdtp
, int flag
, int argc
, char * const argv
[])
130 (void) cmdtp
; (void) flag
;
133 return CMD_RET_USAGE
;
135 dev
= (BYTE
) strtoul(argv
[1], 0, 10);
138 if (disk_ioctl(dev
, GET_SECTOR_COUNT
, &dat
.lval
) == RES_OK
)
139 printf_P(PSTR("Drive size: %lu sectors\n"), dat
.lval
);
141 if (disk_ioctl(dev
, GET_BLOCK_SIZE
, &dat
.lval
) == RES_OK
)
142 printf_P(PSTR("Erase block: %lu sectors\n"), dat
.lval
);
144 if (disk_ioctl(dev
, MMC_GET_TYPE
, &dat
.cval
) == RES_OK
)
145 printf_P(PSTR("Card type: %u\n"), dat
.cval
);
147 if (disk_ioctl(dev
, MMC_GET_CSD
, Buff
) == RES_OK
)
148 dump_ram((uint32_t) (size_t) Buff
, 0, 16, "CSD:");
150 if (disk_ioctl(dev
, MMC_GET_CID
, Buff
) == RES_OK
)
151 dump_ram((uint32_t) (size_t) Buff
, 0, 16, "CID:");
153 if (disk_ioctl(dev
, MMC_GET_OCR
, Buff
) == RES_OK
)
154 dump_ram((uint32_t) (size_t) Buff
, 0, 4, "OCR:");
156 if (disk_ioctl(dev
, MMC_GET_SDSTAT
, Buff
) == RES_OK
)
157 dump_ram((uint32_t) (size_t) Buff
, 0, 64, "SD Status:");
159 if (disk_ioctl(dev
, ATA_GET_MODEL
, Buff
) == RES_OK
) {
161 printf_P(PSTR("Model: %s\n"), Buff
);
163 if (disk_ioctl(dev
, ATA_GET_SN
, Buff
) == RES_OK
) {
164 Buff
[20] = '\0'; printf_P(PSTR("S/N: %s\n"), Buff
);
167 return CMD_RET_SUCCESS
;
174 * dcs <pd#> - CTRL_SYNC
177 command_ret_t
do_dcs(cmd_tbl_t
*cmdtp
, int flag
, int argc
, char * const argv
[])
181 (void) cmdtp
; (void) flag
;
184 return CMD_RET_USAGE
;
186 dev
= (BYTE
) strtoul(argv
[1], 0, 10);
187 printf_P(PSTR("rc=%.2x\n"), disk_ioctl(dev
, CTRL_SYNC
, 0));
189 return CMD_RET_SUCCESS
;
194 command_ret_t
do_test(cmd_tbl_t
*cmdtp
, int flag
, int argc
, char * const argv
[])
196 (void) cmdtp
; (void) flag
;
197 (void) argc
; (void) argv
;
199 printf_P(_USE_LFN
? PSTR("LFN Enabled") : PSTR("LFN Disabled"));
200 printf_P(PSTR(", Code page: %u\n"), _CODE_PAGE
);
202 for (FRESULT i
=0; i
<19; i
++)
206 return CMD_RET_SUCCESS
;
209 extern command_ret_t
do_echo(cmd_tbl_t
*, int, int, char * const []);
213 command_ret_t
do_help(cmd_tbl_t
*cmdtp
, int flag
, int argc
, char * const argv
[]);
215 cmd_tbl_t cmd_sd_sub
[] = {
217 dd
, CONFIG_SYS_MAXARGS
, 1, do_dd
,
233 "Device control: SYNC",
237 echo
, CONFIG_SYS_MAXARGS
, 1, do_echo
,
238 "sane as echo (simple test)", ""
241 test
, CONFIG_SYS_MAXARGS
, 1, do_test
,
242 "print some compiled in parameters", ""
245 help
, CONFIG_SYS_MAXARGS
, 1, do_help
,
246 "print sub command description/usage",
248 " - print brief description of all sub commands\n"
249 "sd help command ...\n"
250 " - print detailed usage of sub cmd 'command'"
253 /* This does not use the CMD_TBL_ITEM macro as ? can't be used in symbol names */
254 {FSTR("?"), CONFIG_SYS_MAXARGS
, 1, do_help
,
255 FSTR("alias for 'help'"),
256 #ifdef CONFIG_SYS_LONGHELP
258 #endif /* CONFIG_SYS_LONGHELP */
259 #ifdef CONFIG_AUTO_COMPLETE
266 command_ret_t
do_help(cmd_tbl_t
*cmdtp
, int flag
, int argc
, char * const argv
[])
268 return _do_help(cmd_sd_sub
, ARRAY_SIZE(cmd_sd_sub
), cmdtp
, flag
, argc
, argv
);
272 command_ret_t
do_sd(cmd_tbl_t
*cmdtp
, int flag
, int argc
, char * const argv
[])
277 return CMD_RET_USAGE
;
279 /* drop initial "sd" arg */
283 cp
= find_cmd_tbl(argv
[0], cmd_sd_sub
, ARRAY_SIZE(cmd_sd_sub
));
286 return cp
->cmd(cmdtp
, flag
, argc
, argv
);
288 return CMD_RET_USAGE
;