From: Nicolas B. <nbo...@us...> - 2006-02-24 21:49:25
|
Update of /cvsroot/ddccontrol/ddccontrol/src/ddccontrol In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12880/src/ddccontrol Modified Files: main.c Log Message: Fix bug reported by Hubai Tamas (delays not respected by ddccontrol). Index: main.c =================================================================== RCS file: /cvsroot/ddccontrol/ddccontrol/src/ddccontrol/main.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -d -r1.32 -r1.33 --- main.c 23 Feb 2006 22:21:16 -0000 1.32 +++ main.c 24 Feb 2006 21:49:22 -0000 1.33 @@ -97,6 +97,35 @@ } } +/* Find the delay we must respect after writing to an address in the database. */ +static int find_write_delay(struct monitor* mon, char ctrl) { + struct monitor_db* monitor = mon->db; + struct group_db* group; + struct subgroup_db* subgroup; + struct control_db* control; + + if (monitor) + { + /* loop through groups */ + for (group = monitor->group_list; group != NULL; group = group->next) + { + /* loop through subgroups inside group */ + for (subgroup = group->subgroup_list; subgroup != NULL; subgroup = subgroup->next) + { + /* loop through controls inside subgroup */ + for (control = subgroup->control_list; control != NULL; control = control->next) + { + /* check for control id */ + if (control->address == ctrl) + { + return control->delay; } + } + } + } + } + return -1; +} + static void usage(char *name) { fprintf(stderr,_( @@ -382,9 +411,16 @@ if (ctrl >= 0) { if (value >= 0) { - fprintf(stdout, _("\nWriting 0x%02x, 0x%02x(%d)...\n"), - ctrl, value, value); - ddcci_writectrl(&mon, ctrl, value, 0); + int delay = find_write_delay(&mon, ctrl); + if (delay >= 0) { + fprintf(stdout, _("\nWriting 0x%02x, 0x%02x(%d) (%dms delay)...\n"), + ctrl, value, value, delay); + } + else { + fprintf(stdout, _("\nWriting 0x%02x, 0x%02x(%d)...\n"), + ctrl, value, value); + } + ddcci_writectrl(&mon, ctrl, value, delay); } else { fprintf(stdout, _("\nReading 0x%02x...\n"), ctrl); } |