X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/8a2b0da07c62b1ab1d9d2240268fbf71f59421dd..86ee5f8bc4c5a4c204be6fff004ef6bf6b839dcd:/avr/cmd_sd.c diff --git a/avr/cmd_sd.c b/avr/cmd_sd.c index 248a878..b192215 100644 --- a/avr/cmd_sd.c +++ b/avr/cmd_sd.c @@ -1,18 +1,17 @@ /* - * (C) Copyright 2014 Leo C. + * (C) Copyright 2014, 2018 Leo C. * * SPDX-License-Identifier: GPL-2.0 */ -#include "common.h" -//#include +#include "cmd_sd.h" -#include "command.h" #include "diskio.h" #include "ff.h" #include "eval_arg.h" #include "print-utils.h" #include "z80-if.h" +#include "errnum.h" /* @@ -20,7 +19,7 @@ * */ static -command_ret_t do_status(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_status(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[]) { DSTATUS res; BYTE dev; @@ -42,7 +41,7 @@ command_ret_t do_status(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ * */ static -command_ret_t do_init(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_init(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[]) { DSTATUS res; BYTE dev; @@ -54,10 +53,8 @@ command_ret_t do_init(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) dev = (BYTE) eval_arg(argv[1], NULL); - if (disk_status(dev) & STA_NODISK) { - printf_P(PSTR("No Disk\n")); - return CMD_RET_FAILURE; - } + if (disk_status(dev) & STA_NODISK) + cmd_error(CMD_RET_FAILURE, 0, PSTR("No disk")); res = disk_initialize(dev); printf_P(PSTR("rc=%.2x\n"), res); @@ -73,7 +70,7 @@ command_ret_t do_init(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) * */ static -command_ret_t do_info(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_info(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[]) { DSTATUS res; BYTE dev; @@ -122,7 +119,7 @@ command_ret_t do_info(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) * */ static -command_ret_t do_dump(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_dump(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[]) { static BYTE dev_last; static DWORD sec_last; @@ -156,10 +153,8 @@ command_ret_t do_dump(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) for ( ; count; count--, sec++) { res = disk_read(dev, buffer, sec, 1); - if (res) { - printf_P(PSTR("rc=%.2x\n"), res); - return CMD_RET_FAILURE; - } + if (res) + cmd_error(CMD_RET_FAILURE, 0, PSTR("rc=%.2x"), res); sprintf_P(header, PSTR("Sector: %lu"), sec); dump_ram(buffer, 0, FF_MAX_SS, header); @@ -175,7 +170,7 @@ command_ret_t do_dump(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) * */ static -command_ret_t do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_read(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[]) { DRESULT res; BYTE dev; @@ -210,10 +205,9 @@ command_ret_t do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) for (nr = 0; nr < count;) { nr++; if ((res = disk_read(dev, buffer, sec, 1)) == RES_OK) { - if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { - my_puts_P(PSTR("Bus timeout\n")); - return CMD_RET_FAILURE; - } + if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) + cmd_error(CMD_RET_FAILURE, EBUSTO, NULL); + z80_write_block(buffer, addr /*+ base*/, FF_MAX_SS); z80_bus_cmd(Release); sec++; addr += FF_MAX_SS; @@ -237,7 +231,7 @@ command_ret_t do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) * */ static -command_ret_t do_write(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_write(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[]) { DRESULT res; BYTE dev; @@ -271,10 +265,9 @@ command_ret_t do_write(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[] for (nr = 0; nr < count;) { nr++; - if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { - my_puts_P(PSTR("Bus timeout\n")); - return CMD_RET_FAILURE; - } + if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) + cmd_error(CMD_RET_FAILURE, EBUSTO, NULL); + z80_read_block(buffer, addr /*+ base*/, FF_MAX_SS); z80_bus_cmd(Release); @@ -300,7 +293,7 @@ command_ret_t do_write(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[] * */ static -command_ret_t do_ioctl_sync(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_ioctl_sync(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[]) { BYTE dev; @@ -316,48 +309,45 @@ command_ret_t do_ioctl_sync(cmd_tbl_t *cmdtp, int flag, int argc, char * const a } -static -command_ret_t do_help(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); - -cmd_tbl_t cmd_sd_sub[] = { +cmd_tbl_t cmd_tbl_sd[] = { CMD_TBL_ITEM( - status, 2, 1, do_status, - "Socket staus", + status, 2, CTBL_RPT, do_status, + "Socket status", "drive" ), CMD_TBL_ITEM( - init, 2, 1, do_init, + init, 2, CTBL_RPT, do_init, "Initialize disk", "drive" ), CMD_TBL_ITEM( - info, 2, 1, do_info, + info, 2, CTBL_RPT, do_info, "Disk info", "drive" ), CMD_TBL_ITEM( - dump, CONFIG_SYS_MAXARGS, 1, do_dump, + dump, CONFIG_SYS_MAXARGS, CTBL_RPT, do_dump, "Dump sector(s)", "drive [sector [count ]]" ), CMD_TBL_ITEM( - read, 2, 1, do_read, + read, 2, CTBL_RPT, do_read, "Read disk sector(s) into meomory", "drive [sector [count [memaddr]]]" ), CMD_TBL_ITEM( - write, 2, 1, do_write, + write, 2, CTBL_RPT, do_write, "Write sector(s) from meomory to disk", "drive [sector [count [memaddr]]]" ), CMD_TBL_ITEM( - sync, 2, 1, do_ioctl_sync, + sync, 2, CTBL_RPT, do_ioctl_sync, "Device control: SYNC", "drive" ), CMD_TBL_ITEM( - help, CONFIG_SYS_MAXARGS, 1, do_help, + help, CONFIG_SYS_MAXARGS, CTBL_RPT, do_help, "Print sub command description/usage", "\n" " - print brief description of all sub commands\n" @@ -367,38 +357,22 @@ CMD_TBL_ITEM( /* This does not use the CMD_TBL_ITEM macro as ? can't be used in symbol names */ {FSTR("?"), CONFIG_SYS_MAXARGS, 1, do_help, - FSTR("Alias for 'help'"), + NULL, #ifdef CONFIG_SYS_LONGHELP FSTR(""), #endif /* CONFIG_SYS_LONGHELP */ + NULL, #ifdef CONFIG_AUTO_COMPLETE - 0, + NULL, #endif }, +/* Mark end of table */ +CMD_TBL_END(cmd_tbl_sd) }; -static -command_ret_t do_help(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - return _do_help(cmd_sd_sub, ARRAY_SIZE(cmd_sd_sub), cmdtp, flag, argc, argv); -} - -command_ret_t do_sd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_sd(cmd_tbl_t *cmdtp UNUSED, uint_fast8_t flag UNUSED, int argc UNUSED, char * const argv[] UNUSED) { - cmd_tbl_t *cp; - - if (argc < 2) - return CMD_RET_USAGE; - - /* drop initial "sd" arg */ - argc--; - argv++; - - cp = find_cmd_tbl(argv[0], cmd_sd_sub, ARRAY_SIZE(cmd_sd_sub)); - - if (cp) - return cp->cmd(cmdtp, flag, argc, argv); - + puts_P(PSTR("Huch?")); return CMD_RET_USAGE; }