From 3e746efaab452de17e130786d31d8cbb4cfeb089 Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Sat, 31 Dec 2011 18:24:05 +0100 Subject: [PATCH] Sample argument parser inproved. --- client/clcc.c | 46 ++++++++++++++++++++++++++++++++++------- firmware/globals.h | 1 + tools/param2HexFrame.pl | 7 ++++--- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/client/clcc.c b/client/clcc.c index d30b977..c84413b 100644 --- a/client/clcc.c +++ b/client/clcc.c @@ -23,7 +23,7 @@ // External functions to control the ledcube. extern void lc_setFrame(unsigned long); extern void lc_setMode(int); -extern void lc_saveFrame(unsigned long, int); +extern int lc_saveFrame(unsigned long, int, int); extern void lc_init(void); extern void lc_close(void); @@ -32,17 +32,47 @@ int main(int argc, char **argv) lc_init(); - lc_setMode(MODE_ANIMATION_STOP); - // TODO parse commandline parameters - unsigned int frame = 0; - if ( sscanf((char*)argv[1], "0x%08x", &frame) ) + //lc_close(); + + //return 0; + if (argc == 2 && !strcmp((char*)argv[1], "--stop")) { - printf("0x%08x\n", frame); - lc_setFrame(frame); + printf("stop animation loop\n"); + lc_setMode(MODE_ANIMATION_STOP); + } + else if (argc == 2 && !strcmp((char*)argv[1], "--loop")) + { + printf("starting animation loop\n"); + lc_setMode(MODE_ANIMATION_LOOP); + } + else if (argc == 5 && !strcmp((char*)argv[1], "--save")) + { + + lc_setMode(MODE_ANIMATION_STOP); + + /*printf(">>> %s <<<\n", argv[1]); + printf(">>> %s <<<\n", argv[2]); + printf(">>> %s <<<\n", argv[3]);*/ + // TODO parse commandline parameters + unsigned int pos = 0; + if ( sscanf((char*)argv[2], "%d", &pos) ) + { + unsigned int delay = 0; + if ( sscanf((char*)argv[3], "%d", &delay) ) + { + unsigned int frame = 0; + if ( sscanf((char*)argv[4], "0x%08x", &frame) ) + { + printf("saving frame: index=%d delay=%d frame=0x%08x\n", pos, delay, frame); + //lc_setFrame(frame); + lc_saveFrame(frame, delay, pos); + } + } + } + } - //lc_setMode(MODE_ANIMATION_LOOP); lc_close(); return 0; diff --git a/firmware/globals.h b/firmware/globals.h index d91181f..ecc30fa 100644 --- a/firmware/globals.h +++ b/firmware/globals.h @@ -12,6 +12,7 @@ #define MODE_ANIMATION_SINGLE 1 #define MODE_ANIMATION_LOOP 2 +// 32 * 4 byte (32bit unsigned integer) = 128 byte eeprom #define MAX_EEPROM_FRAMES 32 #ifndef EEMEM diff --git a/tools/param2HexFrame.pl b/tools/param2HexFrame.pl index e49290d..505a65f 100644 --- a/tools/param2HexFrame.pl +++ b/tools/param2HexFrame.pl @@ -79,8 +79,9 @@ for (my $i=0; $i<=$#ARGV; $i++) printf("0b%032b\n", $frame); my $tmp = ""; $tmp = sprintf("0x%08x", $frame); - system("../client/clcc $tmp"); - #print("../client/clcc $tmp\n"); - usleep(250000); + system("../client/clcc --save $i ". ($frame >> 27)." $tmp"); + #print("../client/clcc --save $i ". ($frame >> 27)." $tmp\n"); + #usleep(250000); + sleep 1; }