You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lirc/lirc-add-resume-switch-to-i...

110 lines
3.4 KiB

From d5f3f9853d87c319c33ade71811c225db11855f7 Mon Sep 17 00:00:00 2001
From: Mathias Hasselmann <mathias@openismus.com>
Date: Wed, 13 Feb 2008 21:23:43 +0100
Subject: Add --resume switch to irrecord.
This switch asks irrecord to take hardware parameters from the provided
template file, instead of trying to interactively discover them.
This change is needed for gnome-lirc-properties to allow it having a
self-contained key-code learning mode, that's consistent with
gnome-keybinding-properties.
The 'remotes==NULL' check for LIRC_MODE_MODE2 seems to indicate, that its
author had a similar behaviour in mind. Still I prefer having that switch,
instead of silently switching to --resume behaviour when a templates file
was found, for backwards compability and for being able to detect that
feature.
---
daemons/irrecord.c | 17 ++++++++++++-----
1 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/daemons/irrecord.c b/daemons/irrecord.c
index df03c7b..a2420a8 100644
--- a/daemons/irrecord.c
+++ b/daemons/irrecord.c
@@ -192,6 +192,7 @@ int main(int argc,char **argv)
lirc_t min_remaining_gap, max_remaining_gap;
int force;
int retries;
+ int resume;
struct ir_remote *remotes=NULL;
char *device=NULL;
#ifdef DEBUG
@@ -200,6 +201,7 @@ int main(int argc,char **argv)
progname=argv[0];
force=0;
+ resume=0;
hw_choose_driver(NULL);
while(1)
{
@@ -211,6 +213,7 @@ int main(int argc,char **argv)
{"device",required_argument,NULL,'d'},
{"driver",required_argument,NULL,'H'},
{"force",no_argument,NULL,'f'},
+ {"resume",no_argument,NULL,'r'},
#ifdef DEBUG
{"pre",no_argument,NULL,'p'},
{"post",no_argument,NULL,'P'},
@@ -221,9 +224,9 @@ int main(int argc,char **argv)
{0, 0, 0, 0}
};
#ifdef DEBUG
- c = getopt_long(argc,argv,"hvd:H:fpPtiT",long_options,NULL);
+ c = getopt_long(argc,argv,"hvd:H:frpPtiT",long_options,NULL);
#else
- c = getopt_long(argc,argv,"hvd:H:f",long_options,NULL);
+ c = getopt_long(argc,argv,"hvd:H:fr",long_options,NULL);
#endif
if(c==-1)
break;
@@ -234,6 +237,7 @@ int main(int argc,char **argv)
printf("\t -h --help\t\tdisplay this message\n");
printf("\t -v --version\t\tdisplay version\n");
printf("\t -f --force\t\tforce raw mode\n");
+ printf("\t -r --resume\t\tcontinue recording\n");
printf("\t -H --driver=driver\tuse given driver\n");
printf("\t -d --device=device\tread from given device\n");
exit(EXIT_SUCCESS);
@@ -254,6 +258,9 @@ int main(int argc,char **argv)
case 'f':
force=1;
break;
+ case 'r':
+ resume=1;
+ break;
#ifdef DEBUG
case 'p':
get_pre=1;
@@ -460,7 +467,7 @@ int main(int argc,char **argv)
switch(hw.rec_mode)
{
case LIRC_MODE_MODE2:
- if(remotes==NULL && !get_lengths(&remote,force))
+ if((!remotes || !resume) && !get_lengths(&remote,force))
{
if(remote.gap==0)
{
@@ -494,7 +501,7 @@ int main(int argc,char **argv)
case LIRC_MODE_LIRCCODE:
if(hw.rec_mode==LIRC_MODE_CODE) remote.bits=CHAR_BIT;
else remote.bits=hw.code_length;
- if(!get_gap_length(&remote))
+ if((!remotes || !resume) && !get_gap_length(&remote))
{
fprintf(stderr,"%s: gap not found,"
" can't continue\n",progname);
@@ -767,7 +774,7 @@ int main(int argc,char **argv)
exit(EXIT_FAILURE);
}
- if(!has_toggle_bit_mask(remotes))
+ if((!remotes || !resume) && !has_toggle_bit_mask(remotes))
{
get_toggle_bit_mask(remotes);
}
--
1.5.3.7