You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by pe...@apache.org on 2016/12/21 00:38:24 UTC

incubator-mynewt-core git commit: MYNEWT-516: add "last" keyword to newtmgr protocol

Repository: incubator-mynewt-core
Updated Branches:
  refs/heads/develop 1b4601c1a -> b907f9843


MYNEWT-516: add "last" keyword to newtmgr protocol

mynewt interprets a "-1" for the timestamp of a log read request to mean that only the last log entry is requested. This is passed to the appropriate log implementation and the last record is passed back over the nmgr connection.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/b907f984
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/b907f984
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/b907f984

Branch: refs/heads/develop
Commit: b907f98431b021be6e84d63aa46d6d75f9b731b8
Parents: 1b4601c
Author: Peter Snyder <pe...@apache.org>
Authored: Tue Dec 20 16:35:29 2016 -0800
Committer: Peter Snyder <pe...@apache.org>
Committed: Tue Dec 20 16:35:29 2016 -0800

----------------------------------------------------------------------
 sys/log/include/log/log.h | 10 ++++++++++
 sys/log/src/log_cbmem.c   | 27 ++++++++++++++++++---------
 sys/log/src/log_fcb.c     | 18 ++++++++++++++----
 sys/log/src/log_nmgr.c    | 12 ++++++++----
 4 files changed, 50 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/b907f984/sys/log/include/log/log.h
----------------------------------------------------------------------
diff --git a/sys/log/include/log/log.h b/sys/log/include/log/log.h
index 1411ab4..5d35d45 100644
--- a/sys/log/include/log/log.h
+++ b/sys/log/include/log/log.h
@@ -78,6 +78,16 @@ struct log_entry_hdr {
 }__attribute__((__packed__));
 #define LOG_ENTRY_HDR_SIZE (sizeof(struct log_entry_hdr))
 
+/*
+ * Encode request - packages log entry request and response
+ */
+struct encode_off {
+    void *eo_encoder; /* typecast CborEncoder */
+    int64_t eo_ts;
+    uint8_t eo_index;
+    uint32_t rsp_len;
+};
+
 #define LOG_LEVEL_DEBUG    (0)
 #define LOG_LEVEL_INFO     (1)
 #define LOG_LEVEL_WARN     (2)

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/b907f984/sys/log/src/log_cbmem.c
----------------------------------------------------------------------
diff --git a/sys/log/src/log_cbmem.c b/sys/log/src/log_cbmem.c
index 6c93254..e512895 100644
--- a/sys/log/src/log_cbmem.c
+++ b/sys/log/src/log_cbmem.c
@@ -60,6 +60,7 @@ log_cbmem_walk(struct log *log, log_walk_func_t walk_func, void *arg)
     struct cbmem *cbmem;
     struct cbmem_entry_hdr *hdr;
     struct cbmem_iter iter;
+    struct encode_off *encode_off = (struct encode_off *)arg;
     int rc;
 
     cbmem = (struct cbmem *) log->l_arg;
@@ -69,16 +70,24 @@ log_cbmem_walk(struct log *log, log_walk_func_t walk_func, void *arg)
         goto err;
     }
 
-    cbmem_iter_start(cbmem, &iter);
-    while (1) {
-        hdr = cbmem_iter_next(cbmem, &iter);
-        if (!hdr) {
-            break;
-        }
-
+    /*
+     * if timestamp for request is < 1, return last log entry
+     */
+    if (encode_off->eo_ts < 0) {
+        hdr = cbmem->c_entry_end;
         rc = walk_func(log, arg, (void *)hdr, hdr->ceh_len);
-        if (rc == 1) {
-            break;
+    } else {
+        cbmem_iter_start(cbmem, &iter);
+        while (1) {
+            hdr = cbmem_iter_next(cbmem, &iter);
+            if (!hdr) {
+                break;
+            }
+
+            rc = walk_func(log, arg, (void *)hdr, hdr->ceh_len);
+            if (rc == 1) {
+                break;
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/b907f984/sys/log/src/log_fcb.c
----------------------------------------------------------------------
diff --git a/sys/log/src/log_fcb.c b/sys/log/src/log_fcb.c
index 9cf4dfa..1db2d92 100644
--- a/sys/log/src/log_fcb.c
+++ b/sys/log/src/log_fcb.c
@@ -103,6 +103,8 @@ log_fcb_walk(struct log *log, log_walk_func_t walk_func, void *arg)
 {
     struct fcb *fcb;
     struct fcb_entry loc;
+    struct fcb_entry *locp;
+    struct encode_off *encode_off = (struct encode_off *)arg;
     int rc;
 
     rc = 0;
@@ -110,10 +112,18 @@ log_fcb_walk(struct log *log, log_walk_func_t walk_func, void *arg)
 
     memset(&loc, 0, sizeof(loc));
 
-    while (fcb_getnext(fcb, &loc) == 0) {
-        rc = walk_func(log, arg, (void *) &loc, loc.fe_data_len);
-        if (rc) {
-            break;
+    /*
+     * if timestamp for request is < 1, return last log entry
+     */
+    if (encode_off->eo_ts < 0) {
+        locp = &fcb->f_active;
+        rc = walk_func(log, arg, (void *)locp, locp->fe_data_len);
+    } else {
+        while (fcb_getnext(fcb, &loc) == 0) {
+            rc = walk_func(log, arg, (void *) &loc, loc.fe_data_len);
+            if (rc) {
+                break;
+            }
         }
     }
     return (rc);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/b907f984/sys/log/src/log_nmgr.c
----------------------------------------------------------------------
diff --git a/sys/log/src/log_nmgr.c b/sys/log/src/log_nmgr.c
index ee77f91..e6e255f 100644
--- a/sys/log/src/log_nmgr.c
+++ b/sys/log/src/log_nmgr.c
@@ -34,7 +34,6 @@
  * this file is compiled out for code size.
  */
 
-
 static int log_nmgr_read(struct mgmt_cbuf *njb);
 static int log_nmgr_clear(struct mgmt_cbuf *njb);
 static int log_nmgr_module_list(struct mgmt_cbuf *njb);
@@ -54,12 +53,17 @@ static struct mgmt_handler log_nmgr_group_handlers[] = {
     [LOGS_NMGR_OP_LOGS_LIST] = {log_nmgr_logs_list, NULL}
 };
 
+#if 0
+/*
+ * Encode request - packages log entry request and response
+ */
 struct encode_off {
-    CborEncoder *eo_encoder;
+    void *eo_encoder;
     int64_t eo_ts;
     uint8_t eo_index;
     uint32_t rsp_len;
 };
+#endif
 
 /**
  * Log encode entry
@@ -76,7 +80,7 @@ log_nmgr_encode_entry(struct log *log, void *arg, void *dptr, uint16_t len)
     int rc;
     int rsp_len;
     CborError g_err = CborNoError;
-    CborEncoder *penc = encode_off->eo_encoder;
+    CborEncoder *penc = (CborEncoder*)encode_off->eo_encoder;
     CborEncoder rsp;
     struct CborCntWriter cnt_writer;
     CborEncoder cnt_encoder;
@@ -188,7 +192,7 @@ log_encode_entries(struct log *log, CborEncoder *cb,
     g_err |= cbor_encode_text_stringz(cb, "entries");
     g_err |= cbor_encoder_create_array(cb, &entries, CborIndefiniteLength);
 
-    encode_off.eo_encoder  = &entries;
+    encode_off.eo_encoder  = (void*)&entries;
     encode_off.eo_index    = index;
     encode_off.eo_ts       = ts;
     encode_off.rsp_len = rsp_len;