--- /dev/null
+/**
+ * \file
+ * <!--
+ * This file is part of BeRTOS.
+ *
+ * Bertos is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction. Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License. This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ *
+ * Copyright 2010 Develer S.r.l. (http://www.develer.com/)
+ * All Rights Reserved.
+ * -->
+ *
+ * \brief Configuration file for keytag module.
+ *
+ * \author Daniele Basile <asterix@develer.com>
+ */
+
+#ifndef CFG_KEYTAG_H
+#define CFG_KEYTAG_H
+
+/**
+ * Module logging level.
+ * $WIZ$ type = "enum"
+ * $WIZ$ value_list = "log_level"
+ */
+#define CONFIG_KEYTAG_LOG_LEVEL LOG_LVL_ERR
+/**
+ * Module logging format.
+ * $WIZ$ type = "enum"
+ * $WIZ$ value_list = "log_format"
+ */
+#define CONFIG_KEYTAG_LOG_FORMAT LOG_FMT_TERSE
+
+/**
+ * Max buffer lenght
+ * $WIZ$ type = "int"
+ */
+#define CONFIG_TAG_MAX_LEN 14
+
+/**
+ * Label to put before the tag code.
+ * $WIZ$ type = "string"
+ */
+#define CONFIG_TAG_LABEL "tag "
+
+#endif /* CFG_KEYTAG_H */
+
#include "keytag.h"
+#include <cfg/debug.h>
+// Define log settings for cfg/log.h
+#define LOG_LEVEL CONFIG_KEYTAG_LOG_LEVEL
+#define LOG_FORMAT CONFIG_KEYTAG_LOG_FORMAT
+#include <cfg/log.h>
+#include <cfg/macros.h>
+
#include <kern/kfile.h>
-#include <drv/timer.h>
-#include <drv/ser.h>
+/**
+ * Starting communication char (STX).
+ */
+#define TAG_STX 0x02
-#include <cfg/macros.h>
-#include <cfg/debug.h>
+/**
+ * Ending communication char (ETX).
+ */
+#define TAG_ETX 0x03
static void keytag_clearPkt(struct TagPacket *pkt)
{
{
/* When STX is found a new packet begins */
if (pkt->sync)
- kprintf("TAG double sync!\n");
+ LOG_WARN("TAG double sync!\n");
keytag_clearPkt(pkt);
pkt->sync = true;
}
/* Check for end of packet */
if (c == TAG_ETX)
{
- pkt->buf[TAG_MAX_PRINT_CHARS] = '\x0';
+ /* Terminate the tag string */
+ uint16_t len = MIN((uint16_t)CONFIG_TAG_MAX_LEN, pkt->len);
+ pkt->buf[len] = '\0';
/* Write read TAG on communication serial */
- kfile_printf(pkt->host, "tag %s", pkt->buf);
+ kfile_printf(pkt->host, "%s%s", CONFIG_TAG_LABEL, pkt->buf);
pkt->sync = false;
}
else
{
/* Check for buffer overflow */
- if (pkt->len >= TAG_MAX_LEN)
+ if (pkt->len >= CONFIG_TAG_MAX_LEN)
{
- kprintf("TAG buffer overflow\n");
+ LOG_ERR("TAG buffer overflow\n");
pkt->sync = false;
}
else
}
if (kfile_error(pkt->tag) != 0)
{
- kprintf("Error %08x\n", kfile_error(pkt->tag));
+ LOG_ERR("Error %08x\n", kfile_error(pkt->tag));
kfile_clearerr(pkt->tag);
}
* \author Andrea Grandi <andrea@develer.com>
*
* \brief Tag protocol. (interface).
+ *
+ * $WIZ$ module_name = "keytag"
+ * $WIZ$ module_configuration = "bertos/cfg/cfg_keytag.h"
+ * $WIZ$ module_depends = "kfile"
+ * $WIZ$ module_hw = ""
*/
#ifndef NET_KEYTAG_H
#define NET_KEYTAG_H
-#include <kern/kfile.h>
-#include <drv/ser.h>
-
-/**
- * Starting communication char (STX).
- */
-#define TAG_STX 0x02
-
-/**
- * Ending communication char (ETX).
- */
-#define TAG_ETX 0x03
-
-/**
- * Max buffer lenght
- */
-#define TAG_MAX_LEN 14
+#include <cfg/cfg_keytag.h>
+#include <kern/kfile.h>
-/**
- * Max number of chars to print in the communication serial
- */
-#define TAG_MAX_PRINT_CHARS 12
/**
* Structure of a Tag packet
*/
typedef struct TagPacket
{
- KFile *tag; ///< Tag communication channel
- KFile *host; ///< Host communication channel
- bool sync; ///< Status flag: true if we find an STX
- uint16_t len; ///< Packet lenght
- uint8_t buf[TAG_MAX_LEN]; ///< Reception buffer
+ KFile *tag; ///< Tag communication channel
+ KFile *host; ///< Host communication channel
+ bool sync; ///< Status flag: true if we find an STX
+ uint16_t len; ///< Packet lenght
+ uint8_t buf[CONFIG_TAG_MAX_LEN]; ///< Reception buffer
} TagPacket;
void keytag_init(struct TagPacket *pkt, struct KFile *comm, struct KFile *tag);