Clean up. Refactor module implementing keytag_recv.
authorasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 7 May 2010 13:31:47 +0000 (13:31 +0000)
committerasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 7 May 2010 13:31:47 +0000 (13:31 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3625 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/cfg/cfg_keytag.h
bertos/net/keytag.c
bertos/net/keytag.h

index 7c72875fbc6726bbefd882a8da14e5ad74248c7c..8bedadf6a3aa3bff618ddf84b2eb2ffd42c5b497 100644 (file)
  * Max buffer lenght
  * $WIZ$ type = "int"
  */
-#define CONFIG_TAG_MAX_LEN 14
-
-/**
- * Label to put before the tag code.
- */
-#define CONFIG_TAG_LABEL "tag "
+#define CONFIG_TAG_MAX_LEN 14U
 
 #endif /* CFG_KEYTAG_H */
 
index f686a7aaa27d43c0383d66ce13df7d9ccae13c7c..2376305a07424ebfb4cf2c733f2a9d18ad57b924 100644 (file)
@@ -53,6 +53,7 @@
 
 #include <kern/kfile.h>
 
+#include <string.h>
 /**
  * Starting communication char (STX).
  */
@@ -69,14 +70,22 @@ static void keytag_clearPkt(struct TagPacket *pkt)
        pkt->len = 0;
 }
 
-void keytag_init(struct TagPacket *pkt, struct KFile *comm, struct KFile *tag)
+/**
+ * DEPRECATED FUCNTIONS
+ * To read the tag string from device you shoul use the keytag_recv
+ * fuction, that return the string if we had received it.
+ */
+void keytag_poll(struct TagPacket *pkt)
 {
-       keytag_clearPkt(pkt);
-       pkt->host = comm;
-       pkt->tag = tag;
+       #warning __FILTER_NEXT_WARNING__
+       #warning keytag_poll function is depreca use keytag_recv instead
+       uint8_t buf[CONFIG_TAG_MAX_LEN];
+       int len;
+       if ((len = keytag_recv(pkt, buf, sizeof(buf))) != EOF)
+               kfile_write(pkt->host, buf, len);
 }
 
-void keytag_poll(struct TagPacket *pkt)
+int keytag_recv(struct TagPacket *pkt, uint8_t *tag, size_t len)
 {
        int c;
 
@@ -98,11 +107,12 @@ void keytag_poll(struct TagPacket *pkt)
                        if (c == TAG_ETX)
                        {
                                /* 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, "%s%s", CONFIG_TAG_LABEL, pkt->buf);
+                               size_t tag_len = MIN(len, pkt->len);
+
+                               /* Save read tag */
+                               memcpy(tag, pkt->buf, tag_len);
                                pkt->sync = false;
+                               return tag_len;
                        }
                        else
                        {
@@ -126,8 +136,20 @@ void keytag_poll(struct TagPacket *pkt)
        }
        if (kfile_error(pkt->tag) != 0)
        {
-               LOG_ERR("Error %08x\n", kfile_error(pkt->tag));
+               LOG_ERR("Error %04x\n", kfile_error(pkt->tag));
                kfile_clearerr(pkt->tag);
        }
 
+       return EOF;
 }
+
+/**
+ * Init the keytag module.
+ */
+void keytag_init(struct TagPacket *pkt, struct KFile *comm, struct KFile *tag)
+{
+       keytag_clearPkt(pkt);
+       pkt->tag = tag;
+       pkt->host = comm;
+}
+
index 375b490e9e32325243451495a897422828898a7e..f086bc3419b1a856ae7e6245a01d31f406c4cc04 100644 (file)
@@ -56,11 +56,13 @@ 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
+       size_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);
+int keytag_recv(struct TagPacket *pkt, uint8_t *tag, size_t len);
+
 void keytag_poll(struct TagPacket *pkt);
 
 #endif /* NET_TAG_H */