From c46f98c91241a9459c2006235c614d998b7511ba Mon Sep 17 00:00:00 2001 From: asterix Date: Mon, 17 Mar 2008 14:31:39 +0000 Subject: [PATCH] Use kfile interface. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@1193 38d2e660-2303-0410-9eaa-f027e97ec537 --- app/triface/protocol.c | 81 ++++++++++++++++++++++-------------------- app/triface/protocol.h | 7 ++-- app/triface/triface.c | 26 ++++++++------ app/triface/triface.mk | 3 +- net/keytag.c | 10 +++--- net/keytag.h | 6 ++-- 6 files changed, 71 insertions(+), 62 deletions(-) diff --git a/app/triface/protocol.c b/app/triface/protocol.c index 7dc434e6..6a415118 100644 --- a/app/triface/protocol.c +++ b/app/triface/protocol.c @@ -39,30 +39,35 @@ * \author Giovanni Bajo * \author Marco Benelli * \author Bernardo Innocenti + * \author Daniele Basile */ #include "protocol.h" - +#include "cmd_ctor.h" // MAKE_CMD, REGISTER_CMD +#include "verstag.h" #include #include +#include +#include +#include + #include #include + #include #include -#include -#include + +#include + #include "hw_adc.h" +#include "hw_input.h" #include #include //#include -#include "cmd_ctor.h" // MAKE_CMD, REGISTER_CMD -#include "hw_input.h" -#include "verstag.h" -#include // Define the format string for ADC #define ADC_FORMAT_STR "dddd" @@ -88,25 +93,25 @@ uint8_t reg_status_dout; * * \param err human-readable description of the error for debug purposes. */ -INLINE void NAK(Serial *ser, const char *err) +INLINE void NAK(KFile *fd, const char *err) { #ifdef _DEBUG - ser_printf(ser, "NAK \"%s\"\r\n", err); + kfile_printf(fd, "NAK \"%s\"\r\n", err); #else - ser_printf(ser, "NAK\r\n"); + kfile_printf(fd, "NAK\r\n"); #endif } -static void protocol_prompt(Serial *ser) +static void protocol_prompt(KFile *fd) { - ser_print(ser, ">> "); + kfile_print(fd, ">> "); } /* * Print args on s, with format specified in t->result_fmt. * Return number of valid arguments or -1 in case of error. */ -static bool protocol_reply(Serial *s, const struct CmdTemplate *t, +static bool protocol_reply(KFile *fd, const struct CmdTemplate *t, const parms *args) { unsigned short offset = strlen(t->arg_fmt) + 1; @@ -116,11 +121,11 @@ static bool protocol_reply(Serial *s, const struct CmdTemplate *t, { if (t->result_fmt[i] == 'd') { - ser_printf(s, " %ld", args[offset+i].l); + kfile_printf(fd, " %ld", args[offset+i].l); } else if (t->result_fmt[i] == 's') { - ser_printf(s, " %s", args[offset+i].s); + kfile_printf(fd, " %s", args[offset+i].s); } else @@ -128,11 +133,11 @@ static bool protocol_reply(Serial *s, const struct CmdTemplate *t, abort(); } } - ser_printf(s, "\r\n"); + kfile_printf(fd, "\r\n"); return true; } -static void protocol_parse(Serial *ser, const char *buf) +static void protocol_parse(KFile *fd, const char *buf) { const struct CmdTemplate *templ; @@ -140,8 +145,8 @@ static void protocol_parse(Serial *ser, const char *buf) templ = parser_get_cmd_template(buf); if (!templ) { - ser_print(ser, "-1 Invalid command.\r\n"); - protocol_prompt(ser); + kfile_print(fd, "-1 Invalid command.\r\n"); + protocol_prompt(fd); return; } @@ -150,26 +155,26 @@ static void protocol_parse(Serial *ser, const char *buf) /* Args Check. TODO: Handle different case. see doc/PROTOCOL . */ if (!parser_get_cmd_arguments(buf, templ, args)) { - ser_print(ser, "-2 Invalid arguments.\r\n"); - protocol_prompt(ser); + kfile_print(fd, "-2 Invalid arguments.\r\n"); + protocol_prompt(fd); return; } /* Execute. */ if(!parser_execute_cmd(templ, args)) { - NAK(ser, "Error in executing command."); + NAK(fd, "Error in executing command."); } - if (!protocol_reply(ser, templ, args)) + if (!protocol_reply(fd, templ, args)) { - NAK(ser, "Invalid return format."); + NAK(fd, "Invalid return format."); } - protocol_prompt(ser); + protocol_prompt(fd); return; } -void protocol_run(Serial *ser) +void protocol_run(KFile *fd) { /** * \todo to be removed, we could probably access the serial FIFO @@ -179,10 +184,10 @@ void protocol_run(Serial *ser) if (!interactive) { - ser_gets(ser, linebuf, sizeof(linebuf)); + kfile_gets(fd, linebuf, sizeof(linebuf)); // reset serial port error anyway - ser_setstatus(ser, 0); + kfile_clearerr(fd); // check message minimum length if (linebuf[0]) @@ -194,12 +199,11 @@ void protocol_run(Serial *ser) if (linebuf[0] == 0x1B && linebuf[1] == 0x1B) // ESC { interactive = true; - ser_printf(ser, - "Entering interactive mode\r\n"); + kfile_printf(fd, "Entering interactive mode\r\n"); } else { - protocol_parse(ser, linebuf); + protocol_parse(fd, linebuf); } } } @@ -228,8 +232,7 @@ void protocol_run(Serial *ser) if (!strcmp(buf, "exit") || !strcmp(buf, "quit")) { rl_clear_history(&rl_ctx); - ser_printf(ser, - "Leaving interactive mode...\r\n"); + kfile_printf(fd, "Leaving interactive mode...\r\n"); interactive = FORCE_INTERACTIVE; } else @@ -240,7 +243,7 @@ void protocol_run(Serial *ser) strncpy(linebuf + 2, buf, sizeof(linebuf) - 3); linebuf[sizeof(linebuf) - 1] = '\0'; - protocol_parse(ser, linebuf); + protocol_parse(fd, linebuf); } } } @@ -358,20 +361,20 @@ static void protocol_registerCmds(void) } /* Initialization: readline context, parser and register commands. */ -void protocol_init(Serial *ser) +void protocol_init(KFile *fd) { interactive = FORCE_INTERACTIVE; rl_init_ctx(&rl_ctx); //rl_setprompt(&rl_ctx, ">> "); - rl_sethook_get(&rl_ctx, (getc_hook)ser_getchar, ser); - rl_sethook_put(&rl_ctx, (putc_hook)ser_putchar, ser); + rl_sethook_get(&rl_ctx, (getc_hook)kfile_getc, fd); + rl_sethook_put(&rl_ctx, (putc_hook)kfile_putc, fd); rl_sethook_match(&rl_ctx, parser_rl_match, NULL); - rl_sethook_clear(&rl_ctx, (clear_hook)ser_clearstatus,ser); + rl_sethook_clear(&rl_ctx, (clear_hook)kfile_clearerr,fd); parser_init(); protocol_registerCmds(); - protocol_prompt(ser); + protocol_prompt(fd); } diff --git a/app/triface/protocol.h b/app/triface/protocol.h index ee758555..a752ee82 100644 --- a/app/triface/protocol.h +++ b/app/triface/protocol.h @@ -42,10 +42,9 @@ #ifndef PROTOCOL_H #define PROTOCOL_H -// fwd decl -struct Serial; +#include -void protocol_init(struct Serial *ser); -void protocol_run(struct Serial *ser); +void protocol_init(KFile *fd); +void protocol_run(KFile *fd); #endif // PROTOOCOL_H diff --git a/app/triface/triface.c b/app/triface/triface.c index 00c1a580..eb47d8fa 100644 --- a/app/triface/triface.c +++ b/app/triface/triface.c @@ -26,7 +26,7 @@ * invalidate any other reasons why the executable file might be covered by * the GNU General Public License. * - * Copyright 2003, 2004, 2006 Develer S.r.l. (http://www.develer.com/) + * Copyright 2003, 2004, 2006, 2008 Develer S.r.l. (http://www.develer.com/) * Copyright 2000 Bernardo Innocenti * * --> @@ -35,6 +35,7 @@ * * \author Marco Benelli * \author Bernardo Innocenti + * \author Daniele Basile * * \brief Windowing system test. */ @@ -43,15 +44,19 @@ #include #include #include +#include + #include #include #include -#include #include "protocol.h" #include "hw_input.h" #include "hw_adc.h" + +static KFileSerial fd_ser; + int main(void) { /* SPI Port Initialization */ @@ -69,24 +74,25 @@ int main(void) TagPacket pkt; /* Open the main communication port */ - Serial *host_port = ser_open(CONFIG_SER_HOSTPORT); - ser_setbaudrate(host_port, CONFIG_SER_HOSTPORTBAUDRATE); + ser_init(&fd_ser, CONFIG_SER_HOSTPORT); + ser_setbaudrate(&fd_ser, CONFIG_SER_HOSTPORTBAUDRATE); - pkt.tag_ser = ser_open(TAG_SER_PORT); + ser_init(pkt.tag_ser, TAG_SER_PORT); ser_setbaudrate(pkt.tag_ser, TAG_SER_BAUDRATE); - pkt.comm_ser = host_port; - keytag_init(&pkt); - + pkt.comm_ser = &fd_ser; + keytag_init(&pkt); - protocol_init(host_port); + protocol_init(&fd_ser.fd); // Main loop for(;;) { - protocol_run(host_port); + protocol_run(&fd_ser.fd); keytag_poll(&pkt); } return 0; } + + diff --git a/app/triface/triface.mk b/app/triface/triface.mk index b7c19cc4..887acc8a 100644 --- a/app/triface/triface.mk +++ b/app/triface/triface.mk @@ -40,10 +40,11 @@ triface_CSRC = \ triface_PCSRC += mware/formatwr.c -triface_CFLAGS = -O2 -D'ARCH=0' -Iapp/triface/hw -Iapp/triface -Icpu/avr +triface_CFLAGS = -O2 -D'ARCH=0' -fno-strict-aliasing -Iapp/triface/hw -Iapp/triface -Icpu/avr triface_LDFLAGS = -Wl triface_MCU = atmega64 +triface_CROSS = avr- # Debug stuff ifeq ($(triface_DEBUG),1) diff --git a/net/keytag.c b/net/keytag.c index afc21b18..3542aafd 100644 --- a/net/keytag.c +++ b/net/keytag.c @@ -56,12 +56,12 @@ static void keytag_clearPkt(struct TagPacket *pkt) pkt->len = 0; } -void keytag_init(struct TagPacket *pkt) -{ - keytag_clearPkt(pkt); -} + void keytag_init(struct TagPacket *pkt) + { + keytag_clearPkt(pkt); + } -void keytag_poll(struct TagPacket *pkt) + void keytag_poll(struct TagPacket *pkt) { int c; diff --git a/net/keytag.h b/net/keytag.h index 651f134c..ab87be21 100644 --- a/net/keytag.h +++ b/net/keytag.h @@ -61,15 +61,15 @@ */ #define TAG_MAX_PRINT_CHARS 12 -#include +#include /** * Structure of a Tag packet */ typedef struct TagPacket { - struct Serial *tag_ser; // Tag serial - struct Serial *comm_ser; // Communication serial + KFileSerial *tag_ser; // Tag serial + KFileSerial *comm_ser; // Communication serial bool sync; // Status flag: true if we find an STX uint16_t len; // Packet lenght uint8_t buf[TAG_MAX_LEN]; // Reception buffer -- 2.25.1