linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4l-utils]: ir-ctl: remove quirky -rmw command line parsing
@ 2025-05-25 15:41 Sean Young
  0 siblings, 0 replies; only message in thread
From: Sean Young @ 2025-05-25 15:41 UTC (permalink / raw)
  To: linux-media

The receive option takes an optional file name, even when specified as a
short option without an `='. So, ir-ctl -rmw saves the output to a file
called mw. You would expect the -r, -m, and -w options to be specified.

This commit removes the file argument completely. Saving to a file is
confusing and does not really have a good use-case. I've never heard of
anyone using this feature.

On top of that, I'm implementing a ir-ctl compatibility mode in cir[1],
and clap does not support short options with an optional value without
`='; see the note[2].

[1] https://gitlab.freedesktop.org/linux-media/tools/cir
[2] https://docs.rs/clap/latest/clap/struct.Arg.html#method.default_missing_value

Signed-off-by: Sean Young <sean@mess.org>
---
 utils/ir-ctl/ir-ctl.1.in |  9 +++-----
 utils/ir-ctl/ir-ctl.c    | 46 ++++++++++++----------------------------
 2 files changed, 17 insertions(+), 38 deletions(-)

diff --git a/utils/ir-ctl/ir-ctl.1.in b/utils/ir-ctl/ir-ctl.1.in
index f1ed2640..8fe74675 100644
--- a/utils/ir-ctl/ir-ctl.1.in
+++ b/utils/ir-ctl/ir-ctl.1.in
@@ -18,7 +18,7 @@ ir\-ctl \- a swiss\-knife tool to handle raw IR and to set lirc options
 [\fIOPTION\fR]... \fI\-\-keycode\fR [\fIkeycode to send\fR]
 .br
 .B ir\-ctl
-[\fIOPTION\fR]... \fI\-\-receive\fR [\fIsave to file\fR]
+[\fIOPTION\fR]... \fI\-\-receive\fR
 .SH DESCRIPTION
 ir\-ctl is a tool that allows one to list the features of a lirc device,
 set its options, receive raw IR, and send IR.
@@ -36,9 +36,8 @@ lirc device to control, /dev/lirc0 by default
 \fB\-f\fR, \fB\-\-features\fR
 List the features of the lirc device.
 .TP
-\fB\-r\fR, \fB\-\-receive\fR[=\fIFILE\fR]
-Receive IR and print to standard output if no file is specified, else
-save to the filename.
+\fB\-r\fR, \fB\-\-receive\fR
+Receive IR and print to standard output.
 .TP
 \fB\-s\fR, \fB\-\-send\fR=\fIFILE\fR
 Send IR in text file. It must be in the format described below. If this
@@ -238,8 +237,6 @@ To show the IR of the first button press on a remote in learning mode:
 .br
 	\fBir\-ctl \-r \-m \-w\fR
 .PP
-Note that \fBir\-ctl \-rmw\fR would receive to a file called \fBmw\fR.
-.PP
 To restore the normal (longer distance) receiver:
 .br
 	\fBir\-ctl \-n \-M\fR
diff --git a/utils/ir-ctl/ir-ctl.c b/utils/ir-ctl/ir-ctl.c
index e662651e..8600fbe6 100644
--- a/utils/ir-ctl/ir-ctl.c
+++ b/utils/ir-ctl/ir-ctl.c
@@ -100,7 +100,6 @@ struct arguments {
 	struct keymap *keymap;
 	struct send *send;
 	bool oneshot;
-	char *savetofile;
 	int wideband;
 	unsigned carrier_low, carrier_high;
 	unsigned timeout;
@@ -115,7 +114,7 @@ struct arguments {
 static const struct argp_option options[] = {
 	{ "device",	'd',	N_("DEV"),	0,	N_("lirc device to use") },
 	{ "features",	'f',	0,		0,	N_("list lirc device features") },
-	{ "receive",	'r',	N_("FILE"),	OPTION_ARG_OPTIONAL,	N_("receive IR to stdout or file") },
+	{ "receive",	'r',	0,		0,	N_("receive IR to stdout") },
 	{ "send",	's',	N_("FILE"),	0,	N_("send IR pulse and space file") },
 	{ "scancode",	'S',	N_("SCANCODE"),	0,	N_("send IR scancode in protocol specified") },
 	{ "keycode",	'K',	N_("KEYCODE"),	0,	N_("send IR keycode from keymap") },
@@ -140,7 +139,7 @@ static const struct argp_option options[] = {
 
 static const char args_doc[] = N_(
 	"--features\n"
-	"--receive [save to file]\n"
+	"--receive\n"
 	"--send [file to send]\n"
 	"--scancode [scancode to send]\n"
 	"--keycode [keycode to send]\n"
@@ -602,12 +601,6 @@ static error_t parse_opt(int k, char *arg, struct argp_state *state)
 			argp_error(state, _("receive can not be combined with features or send option"));
 
 		arguments->receive = true;
-		if (arg) {
-			if (arguments->savetofile)
-				argp_error(state, _("receive filename already set"));
-
-			arguments->savetofile = arg;
-		}
 		break;
 	case '1':
 		arguments->oneshot = true;
@@ -1126,7 +1119,6 @@ static int lirc_send(struct arguments *args, int fd, unsigned features, struct s
 int lirc_receive(struct arguments *args, int fd, unsigned features)
 {
 	char *dev = args->device;
-	FILE *out = stdout;
 	int rc = EX_IOERR;
 	int mode = LIRC_MODE_MODE2;
 
@@ -1141,13 +1133,6 @@ int lirc_receive(struct arguments *args, int fd, unsigned features)
 		return EX_IOERR;
 	}
 
-	if (args->savetofile) {
-		out = fopen(args->savetofile, "w");
-		if (!out) {
-			fprintf(stderr, _("%s: failed to open for writing: %m\n"), args->savetofile);
-			return EX_CANTCREAT;
-		}
-	}
 	unsigned buf[LIRCBUF_SIZE];
 
 	bool keep_reading = true;
@@ -1188,20 +1173,20 @@ int lirc_receive(struct arguments *args, int fd, unsigned features)
 			if (args->mode2) {
 				switch (msg) {
 				case LIRC_MODE2_TIMEOUT:
-					fprintf(out, "timeout %u\n", val);
+					printf("timeout %u\n", val);
 					leading_space = true;
 					break;
 				case LIRC_MODE2_PULSE:
-					fprintf(out, "pulse %u\n", val);
+					printf("pulse %u\n", val);
 					break;
 				case LIRC_MODE2_SPACE:
-					fprintf(out, "space %u\n", val);
+					printf("space %u\n", val);
 					break;
 				case LIRC_MODE2_FREQUENCY:
-					fprintf(out, "carrier %u\n", val);
+					printf("carrier %u\n", val);
 					break;
 				case LIRC_MODE2_OVERFLOW:
-					fprintf(out, "overflow\n");
+					printf("overflow\n");
 					leading_space = true;
 					break;
 				}
@@ -1209,41 +1194,38 @@ int lirc_receive(struct arguments *args, int fd, unsigned features)
 				switch (msg) {
 				case LIRC_MODE2_TIMEOUT:
 					if (carrier)
-						fprintf(out, "-%u # carrier %uHz\n", val, carrier);
+						printf("-%u # carrier %uHz\n", val, carrier);
 					else
-						fprintf(out, "-%u\n", val);
+						printf("-%u\n", val);
 					leading_space = true;
 					carrier = 0;
 					break;
 				case LIRC_MODE2_PULSE:
-					fprintf(out, "+%u ", val);
+					printf("+%u ", val);
 					break;
 				case LIRC_MODE2_SPACE:
-					fprintf(out, "-%u ", val);
+					printf("-%u ", val);
 					break;
 				case LIRC_MODE2_FREQUENCY:
 					carrier = val;
 					break;
 				case LIRC_MODE2_OVERFLOW:
 					if (carrier)
-						fprintf(out, "# carrier %uHz, overflow\n", carrier);
+						printf("# carrier %uHz, overflow\n", carrier);
 					else
-						fprintf(out, "# overflow\n");
+						printf("# overflow\n");
 					leading_space = true;
 					carrier = 0;
 					break;
 				}
 			}
 
-			fflush(out);
+			fflush(stdout);
 		}
 	}
 
 	rc = 0;
 err:
-	if (args->savetofile)
-		fclose(out);
-
 	return rc;
 }
 
-- 
2.49.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2025-05-25 15:50 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-25 15:41 [PATCH v4l-utils]: ir-ctl: remove quirky -rmw command line parsing Sean Young

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).