summaryrefslogtreecommitdiff
path: root/avr/cmd_attach.c
diff options
context:
space:
mode:
Diffstat (limited to 'avr/cmd_attach.c')
-rw-r--r--avr/cmd_attach.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/avr/cmd_attach.c b/avr/cmd_attach.c
index e1a3b2c..9fbfa1e 100644
--- a/avr/cmd_attach.c
+++ b/avr/cmd_attach.c
@@ -5,7 +5,7 @@
*/
/*
- * attach chanels to devices
+ * attach channels to devices
*/
#include "common.h"
@@ -15,11 +15,6 @@
#include "command.h"
#include "z180-serv.h"
#include "getopt-min.h"
-//#include "print-utils.h"
-//#include "con-utils.h"
-//#include "timer.h"
-//#include "z80-if.h"
-//#include "debug.h"
static const FLASH char * const FLASH rc_messages[] = {
@@ -68,17 +63,17 @@ command_ret_t do_attach(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[
uint8_t unit;
char *filename = NULL;
bool detach = false;
+ bool detach_all = false;
drv_opt_t options = 0;
int res;
(void) cmdtp; (void) flag;
- if (argv[0][0] == 'd')
+ if (argv[0][0] == 'd') {
/* we are called as 'detach' */
detach = true;
-
- if (argc == 1) {
+ } else if (argc == 1) {
/* no arguments */
drv_list();
return CMD_RET_SUCCESS;
@@ -88,11 +83,14 @@ command_ret_t do_attach(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[
optind = 1;
int opt;
- while ((opt = getopt(argc, argv, PSTR("drwo:"))) != -1) {
+ while ((opt = getopt(argc, argv, PSTR("darwo:"))) != -1) {
switch (opt) {
case 'd':
detach = true;
break;
+ case 'a':
+ detach_all = true;
+ break;
case 'r':
options |= DRV_OPT_RO;
break;
@@ -128,21 +126,26 @@ command_ret_t do_attach(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[
/* remaining arguments */
argc -= optind;
- if ( !((detach && argc == 1) ||
- ((options & DRV_OPT_REATTATCH) && argc == 1) ||
- argc == 2) )
+ if ( !( (argc == 0 && detach && detach_all) ||
+ (argc == 1 && detach) ||
+ (argc == 1 && (options & DRV_OPT_REATTATCH)) ||
+ argc == 2) )
return CMD_RET_USAGE;
- if ((strlen(argv[optind]) != 4) ||
+ if (argc > 0 && ((strlen(argv[optind]) != 4) ||
strncmp_P(argv[optind], PSTR("dsk"), 3) ||
- (unit = argv[optind][3] - '0') >= CONFIG_CPM_MAX_DRIVE) {
+ (unit = argv[optind][3] - '0') >= CONFIG_CPM_MAX_DRIVE)) {
printf_P(PSTR("Unknown device: '%s'\n"), argv[optind]);
return CMD_RET_FAILURE;
}
if (detach) {
- res = drv_detach(unit);
+ if (detach_all)
+ for (uint8_t i = 0; i < CONFIG_CPM_MAX_DRIVE; i++)
+ drv_detach(i);
+ else
+ drv_detach(unit);
return CMD_RET_SUCCESS;
}