You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by vi...@apache.org on 2017/02/24 19:37:56 UTC

[01/50] incubator-mynewt-core git commit: oic; make oc_endpoint structure size dependent on type of transport. For IPv6 it needs a full v6 address/port, while ble only needs 2 bytes for connection handle.

Repository: incubator-mynewt-core
Updated Branches:
  refs/heads/develop 57fc68bae -> 514797cc3


oic; make oc_endpoint structure size dependent on type of transport.
For IPv6 it needs a full v6 address/port, while ble only needs 2 bytes
for connection handle.


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/9482961d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/9482961d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/9482961d

Branch: refs/heads/develop
Commit: 9482961d3c143dc76a4c83230eda1e74476e5ce3
Parents: 896011d
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Fri Dec 16 15:41:10 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Sun Dec 18 13:56:17 2016 -0800

----------------------------------------------------------------------
 net/oic/src/api/oc_buffer.c              |  2 +-
 net/oic/src/api/oc_client_api.c          |  2 +-
 net/oic/src/api/oc_discovery.c           | 10 ++---
 net/oic/src/port/mynewt/adaptor.c        |  4 +-
 net/oic/src/port/mynewt/ble_adaptor.c    | 46 ++++++++++++---------
 net/oic/src/port/mynewt/ip_adaptor.c     | 19 +++++----
 net/oic/src/port/mynewt/log.c            |  8 ++--
 net/oic/src/port/mynewt/serial_adaptor.c |  4 +-
 net/oic/src/port/oc_connectivity.h       | 59 +++++++++++++++++++--------
 9 files changed, 93 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9482961d/net/oic/src/api/oc_buffer.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_buffer.c b/net/oic/src/api/oc_buffer.c
index 7bca928..1df8b8d 100644
--- a/net/oic/src/api/oc_buffer.c
+++ b/net/oic/src/api/oc_buffer.c
@@ -118,7 +118,7 @@ oc_buffer_tx(struct os_event *ev)
         OC_LOG_DEBUG("oc_buffer_tx: ");
         OC_LOG_ENDPOINT(LOG_LEVEL_DEBUG, OC_MBUF_ENDPOINT(m));
 #ifdef OC_CLIENT
-        if (OC_MBUF_ENDPOINT(m)->flags & MULTICAST) {
+        if (OC_MBUF_ENDPOINT(m)->oe.flags & MULTICAST) {
             oc_send_multicast_message(m);
         } else {
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9482961d/net/oic/src/api/oc_client_api.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_client_api.c b/net/oic/src/api/oc_client_api.c
index bc29fe1..692e0f6 100644
--- a/net/oic/src/api/oc_client_api.c
+++ b/net/oic/src/api/oc_client_api.c
@@ -273,7 +273,7 @@ oc_do_ip_discovery(const char *rt, oc_discovery_cb_t handler)
 
     oc_make_ip_endpoint(mcast, IP | MULTICAST, 5683,
                        0xff, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xfd);
-    mcast.ipv6_addr.scope = 0;
+    mcast.oe_ip.v6.scope = 0;
 
     memcpy(&handle.endpoint, &mcast, sizeof(oc_endpoint_t));
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9482961d/net/oic/src/api/oc_discovery.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_discovery.c b/net/oic/src/api/oc_discovery.c
index be5be0c..6427056 100644
--- a/net/oic/src/api/oc_discovery.c
+++ b/net/oic/src/api/oc_discovery.c
@@ -190,7 +190,7 @@ oc_ri_process_discovery_payload(uint8_t *payload, int len,
       .os_str = NULL
   };
   bool secure = false;
-  uint16_t dtls_port = 0, default_port = endpoint->ipv6_addr.port;
+  uint16_t dtls_port = 0, default_port = endpoint->oe_ip.v6.port;
   oc_string_array_t types = {};
   oc_interface_mask_t interfaces = 0;
   oc_server_handle_t handle;
@@ -269,11 +269,11 @@ oc_ri_process_discovery_payload(uint8_t *payload, int len,
               resource_info = resource_info->next;
             }
             if (secure) {
-              handle.endpoint.ipv6_addr.port = dtls_port;
-              handle.endpoint.flags |= SECURED;
+              handle.endpoint.oe_ip.v6.port = dtls_port;
+              handle.endpoint.oe_ip.flags |= SECURED;
             } else {
-              handle.endpoint.ipv6_addr.port = default_port;
-              handle.endpoint.flags &= ~SECURED;
+              handle.endpoint.oe_ip.v6.port = default_port;
+              handle.endpoint.oe_ip.flags &= ~SECURED;
             }
 
             if (handler(oc_string(di), oc_string(uri), types, interfaces,

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9482961d/net/oic/src/port/mynewt/adaptor.c
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/adaptor.c b/net/oic/src/port/mynewt/adaptor.c
index 22edda3..6f4134e 100644
--- a/net/oic/src/port/mynewt/adaptor.c
+++ b/net/oic/src/port/mynewt/adaptor.c
@@ -75,7 +75,7 @@ oc_send_buffer(struct os_mbuf *m)
 
     oe = OC_MBUF_ENDPOINT(m);
 
-    switch (oe->flags) {
+    switch (oe->oe.flags) {
 #if (MYNEWT_VAL(OC_TRANSPORT_IP) == 1)
     case IP:
         oc_send_buffer_ip(m);
@@ -92,7 +92,7 @@ oc_send_buffer(struct os_mbuf *m)
         break;
 #endif
     default:
-        OC_LOG_ERROR("Unknown transport option %u\n", oe->flags);
+        OC_LOG_ERROR("Unknown transport option %u\n", oe->oe.flags);
         os_mbuf_free_chain(m);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9482961d/net/oic/src/port/mynewt/ble_adaptor.c
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/ble_adaptor.c b/net/oic/src/port/mynewt/ble_adaptor.c
index 39ceac9..8ede614 100644
--- a/net/oic/src/port/mynewt/ble_adaptor.c
+++ b/net/oic/src/port/mynewt/ble_adaptor.c
@@ -117,7 +117,7 @@ int
 oc_ble_reass(struct os_mbuf *om1, uint16_t conn_handle)
 {
     struct os_mbuf_pkthdr *pkt1;
-    struct oc_endpoint *oe;
+    struct oc_endpoint_ble *oe_ble;
     struct os_mbuf *om2;
     struct os_mbuf_pkthdr *pkt2;
     uint8_t hdr[6]; /* sizeof(coap_tcp_hdr32) */
@@ -133,8 +133,8 @@ oc_ble_reass(struct os_mbuf *om1, uint16_t conn_handle)
 
     STAILQ_FOREACH(pkt2, &oc_ble_reass_q, omp_next) {
         om2 = OS_MBUF_PKTHDR_TO_MBUF(pkt2);
-        oe = OC_MBUF_ENDPOINT(om2);
-        if (conn_handle == oe->bt_addr.conn_handle) {
+        oe_ble = (struct oc_endpoint_ble *)OC_MBUF_ENDPOINT(om2);
+        if (conn_handle == oe_ble->conn_handle) {
             /*
              * Data from same connection. Append.
              */
@@ -151,20 +151,25 @@ oc_ble_reass(struct os_mbuf *om1, uint16_t conn_handle)
     }
     if (pkt1) {
         /*
-         * New frame
+         * New frame, need to add oc_endpoint_ble in the front.
+         * Check if there is enough space available. If not, allocate a
+         * new pkthdr.
          */
-        om2 = os_msys_get_pkthdr(0, sizeof(struct oc_endpoint));
-        if (!om2) {
-            OC_LOG_ERROR("oc_gatt_rx: Could not allocate mbuf\n");
-            STATS_INC(oc_ble_stats, ierr);
-            return -1;
+        if (OS_MBUF_USRHDR_LEN(om1) < sizeof(struct oc_endpoint_ble)) {
+            om2 = os_msys_get_pkthdr(0, sizeof(struct oc_endpoint_ble));
+            if (!om2) {
+                OC_LOG_ERROR("oc_gatt_rx: Could not allocate mbuf\n");
+                STATS_INC(oc_ble_stats, ierr);
+                return -1;
+            }
+            OS_MBUF_PKTHDR(om2)->omp_len = pkt1->omp_len;
+            SLIST_NEXT(om2, om_next) = om1;
+        } else {
+            om2 = om1;
         }
-        OS_MBUF_PKTHDR(om2)->omp_len = pkt1->omp_len;
-        SLIST_NEXT(om2, om_next) = om1;
-
-        oe = OC_MBUF_ENDPOINT(om2);
-        oe->flags = GATT;
-        oe->bt_addr.conn_handle = conn_handle;
+        oe_ble = (struct oc_endpoint_ble *)OC_MBUF_ENDPOINT(om2);
+        oe_ble->flags = GATT;
+        oe_ble->conn_handle = conn_handle;
         pkt2 = OS_MBUF_PKTHDR(om2);
 
         if (os_mbuf_copydata(om2, 0, sizeof(hdr), hdr) ||
@@ -239,13 +244,13 @@ oc_ble_coap_conn_del(uint16_t conn_handle)
 {
     struct os_mbuf_pkthdr *pkt;
     struct os_mbuf *m;
-    struct oc_endpoint *oe;
+    struct oc_endpoint_ble *oe_ble;
 
     OC_LOG_DEBUG("oc_gatt endconn %x\n", conn_handle);
     STAILQ_FOREACH(pkt, &oc_ble_reass_q, omp_next) {
         m = OS_MBUF_PKTHDR_TO_MBUF(pkt);
-        oe = OC_MBUF_ENDPOINT(m);
-        if (oe->bt_addr.conn_handle == conn_handle) {
+        oe_ble = (struct oc_endpoint_ble *)OC_MBUF_ENDPOINT(m);
+        if (oe_ble->conn_handle == conn_handle) {
             STAILQ_REMOVE(&oc_ble_reass_q, pkt, os_mbuf_pkthdr, omp_next);
             os_mbuf_free_chain(m);
             break;
@@ -318,8 +323,9 @@ oc_send_buffer_gatt(struct os_mbuf *m)
     uint16_t mtu;
     uint16_t conn_handle;
 
+    assert(OS_MBUF_USRHDR_LEN(m) >= sizeof(struct oc_endpoint_ble));
     oe = OC_MBUF_ENDPOINT(m);
-    conn_handle = oe->bt_addr.conn_handle;
+    conn_handle = oe->oe_ble.conn_handle;
 
 #if (MYNEWT_VAL(OC_CLIENT) == 1)
     OC_LOG_ERROR("oc_gatt send not supported on client");
@@ -330,7 +336,7 @@ oc_send_buffer_gatt(struct os_mbuf *m)
     STATS_INC(oc_ble_stats, oseg);
     STATS_INCN(oc_ble_stats, obytes, OS_MBUF_PKTLEN(m));
 
-    mtu = ble_att_mtu(oe->bt_addr.conn_handle);
+    mtu = ble_att_mtu(conn_handle);
     assert(mtu > 4);
     mtu -= 3; /* # of bytes for ATT notification base */
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9482961d/net/oic/src/port/mynewt/ip_adaptor.c
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/ip_adaptor.c b/net/oic/src/port/mynewt/ip_adaptor.c
index 634417a..9d8a300 100644
--- a/net/oic/src/port/mynewt/ip_adaptor.c
+++ b/net/oic/src/port/mynewt/ip_adaptor.c
@@ -69,13 +69,14 @@ oc_send_buffer_ip_int(struct os_mbuf *m, int is_mcast)
     struct os_mbuf *n;
     int rc;
 
+    assert(OS_MBUF_USRHDR_LEN(m) >= sizeof(struct oc_endpoint_ip));
     oe = OC_MBUF_ENDPOINT(m);
 
     to.msin6_len = sizeof(to);
     to.msin6_family = MN_AF_INET6;
-    to.msin6_port = htons(oe->ipv6_addr.port);
-    to.msin6_scope_id = oe->ipv6_addr.scope;
-    memcpy(&to.msin6_addr, oe->ipv6_addr.address, sizeof(to.msin6_addr));
+    to.msin6_port = htons(oe->oe_ip.v6.port);
+    to.msin6_scope_id = oe->oe_ip.v6.scope;
+    memcpy(&to.msin6_addr, oe->oe_ip.v6.address, sizeof(to.msin6_addr));
 
     if (is_mcast) {
         memset(&itf, 0, sizeof(itf));
@@ -156,7 +157,7 @@ oc_attempt_rx_ip_sock(struct mn_socket *rxsock)
     }
     assert(OS_MBUF_IS_PKTHDR(n));
 
-    m = os_msys_get_pkthdr(0, sizeof(struct oc_endpoint));
+    m = os_msys_get_pkthdr(0, sizeof(struct oc_endpoint_ip));
     if (!m) {
         OC_LOG_ERROR("Could not allocate RX buffer\n");
         goto rx_attempt_err;
@@ -166,11 +167,11 @@ oc_attempt_rx_ip_sock(struct mn_socket *rxsock)
 
     oe = OC_MBUF_ENDPOINT(m);
 
-    oe->flags = IP;
-    memcpy(&oe->ipv6_addr.address, &from.msin6_addr,
-             sizeof(oe->ipv6_addr.address));
-    oe->ipv6_addr.scope = from.msin6_scope_id;
-    oe->ipv6_addr.port = ntohs(from.msin6_port);
+    oe->oe_ip.flags = IP;
+    memcpy(&oe->oe_ip.v6.address, &from.msin6_addr,
+           sizeof(oe->oe_ip.v6.address));
+    oe->oe_ip.v6.scope = from.msin6_scope_id;
+    oe->oe_ip.v6.port = ntohs(from.msin6_port);
 
     return m;
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9482961d/net/oic/src/port/mynewt/log.c
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/log.c b/net/oic/src/port/mynewt/log.c
index b2f1b88..85f7e5d 100644
--- a/net/oic/src/port/mynewt/log.c
+++ b/net/oic/src/port/mynewt/log.c
@@ -34,21 +34,21 @@ oc_log_endpoint(uint16_t lvl, struct oc_endpoint *oe)
 
     (void)tmp;
 
-    switch (oe->flags) {
+    switch (oe->oe.flags) {
 #if (MYNEWT_VAL(OC_TRANSPORT_IP) == 1)
     case IP: {
         int len;
 
-        mn_inet_ntop(MN_PF_INET6, oe->ipv6_addr.address, tmp, sizeof(tmp));
+        mn_inet_ntop(MN_PF_INET6, oe->oe_ip.v6.address, tmp, sizeof(tmp));
         len = strlen(tmp);
-        snprintf(tmp + len, sizeof(tmp) - len, "-%u\n", oe->ipv6_addr.port);
+        snprintf(tmp + len, sizeof(tmp) - len, "-%u\n", oe->oe_ip.v6.port);
         str = tmp;
         break;
     }
 #endif
 #if (MYNEWT_VAL(OC_TRANSPORT_GATT) == 1)
     case GATT:
-        snprintf(tmp, sizeof(tmp), "%u\n", oe->bt_addr.conn_handle);
+        snprintf(tmp, sizeof(tmp), "ble %u\n", oe->oe_ble.conn_handle);
         str = tmp;
         break;
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9482961d/net/oic/src/port/mynewt/serial_adaptor.c
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/serial_adaptor.c b/net/oic/src/port/mynewt/serial_adaptor.c
index 130e26d..6e6450b 100644
--- a/net/oic/src/port/mynewt/serial_adaptor.c
+++ b/net/oic/src/port/mynewt/serial_adaptor.c
@@ -102,7 +102,7 @@ oc_attempt_rx_serial(void)
         return NULL;
     }
 
-    m = os_msys_get_pkthdr(0, sizeof(struct oc_endpoint));
+    m = os_msys_get_pkthdr(0, sizeof(struct oc_endpoint_plain));
     if (!m) {
         OC_LOG_ERROR("Could not allocate OC message buffer\n");
         goto rx_attempt_err;
@@ -111,7 +111,7 @@ oc_attempt_rx_serial(void)
     SLIST_NEXT(m, om_next) = n;
 
     oe = OC_MBUF_ENDPOINT(m);
-    oe->flags = SERIAL;
+    oe->oe.flags = SERIAL;
 
     return m;
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9482961d/net/oic/src/port/oc_connectivity.h
----------------------------------------------------------------------
diff --git a/net/oic/src/port/oc_connectivity.h b/net/oic/src/port/oc_connectivity.h
index 7f50a6b..b86ec19 100644
--- a/net/oic/src/port/oc_connectivity.h
+++ b/net/oic/src/port/oc_connectivity.h
@@ -30,22 +30,47 @@ typedef struct {
     uint8_t scope;
 } oc_ipv6_addr_t;
 
-typedef struct {
+enum oc_transport_flags {
+    IP = 1 << 0,
+    GATT = 1 << 1,
+    IPSP = 1 << 2,
+    MULTICAST = 1 << 3,
+    SECURED = 1 << 4,
+    SERIAL = 1 << 5,
+};
+
+/*
+ * OC endpoint data structure comes in different variations,
+ * depending on flags field.
+ */
+/*
+ * oc_endpoint for IPv6 source
+ */
+struct oc_endpoint_ip {
+    enum oc_transport_flags flags;
+    oc_ipv6_addr_t v6;
+};
+
+/*
+ * oc_endpoint for BLE source.
+ */
+struct oc_endpoint_ble {
+    enum oc_transport_flags flags;
     uint16_t conn_handle;
-} oc_le_addr_t;
+};
+
+/*
+ * oc_endpoint for multicast target and serial port.
+ */
+struct oc_endpoint_plain {
+    enum oc_transport_flags flags;
+};
 
 typedef struct oc_endpoint {
-    enum transport_flags {
-        IP = 1 << 0,
-        GATT = 1 << 1,
-        IPSP = 1 << 2,
-        MULTICAST = 1 << 3,
-        SECURED = 1 << 4,
-        SERIAL = 1 << 5,
-    } flags;
     union {
-        oc_ipv6_addr_t ipv6_addr;
-        oc_le_addr_t bt_addr;
+        struct oc_endpoint_ip oe_ip;
+        struct oc_endpoint_ble oe_ble;
+        struct oc_endpoint_plain oe;
     };
 } oc_endpoint_t;
 
@@ -54,10 +79,10 @@ typedef struct oc_endpoint {
                             sizeof(struct os_mbuf_pkthdr)))
 
 
-#define oc_make_ip_endpoint(__name__, __flags__, __port__, ...)                \
-  oc_endpoint_t __name__ = {.flags = __flags__,                                \
-                            .ipv6_addr = {.port = __port__,                    \
-                                          .address = { __VA_ARGS__ } } }
+#define oc_make_ip_endpoint(__name__, __flags__, __port__, ...)         \
+    oc_endpoint_t __name__ = {.oe_ip = {.flags = __flags__,             \
+                                        .v6 = {.port = __port__,        \
+                                               .address = { __VA_ARGS__ } } } }
 
 typedef struct oc_message {
     oc_endpoint_t endpoint;
@@ -76,7 +101,7 @@ void oc_connectivity_shutdown(void);
 static inline int
 oc_endpoint_use_tcp(struct oc_endpoint *oe)
 {
-    if (oe->flags & GATT) {
+    if (oe->oe.flags & GATT) {
         return 1;
     }
     return 0;


[15/50] incubator-mynewt-core git commit: this closes #147

Posted by vi...@apache.org.
this closes #147


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/ca8be8d3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/ca8be8d3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/ca8be8d3

Branch: refs/heads/develop
Commit: ca8be8d3fc9ac1a7f6cc2166aba904cab8a2d69f
Parents: 7b7941e
Author: Sterling Hughes <st...@apache.org>
Authored: Thu Dec 22 11:15:31 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Thu Dec 22 11:15:31 2016 -0800

----------------------------------------------------------------------

----------------------------------------------------------------------



[32/50] incubator-mynewt-core git commit: Cleaning up

Posted by vi...@apache.org.
Cleaning up


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/e5c20c82
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/e5c20c82
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/e5c20c82

Branch: refs/heads/develop
Commit: e5c20c82c53d6e2c7268e47b37b8bb9e51b8ba1a
Parents: 3559c73
Author: Vipul Rahane <vi...@apache.org>
Authored: Fri Feb 3 16:17:37 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Fri Feb 3 16:17:37 2017 -0800

----------------------------------------------------------------------
 hw/drivers/sensors/tsl2561/src/tsl2561.c | 39 +++++++++------------------
 1 file changed, 12 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/e5c20c82/hw/drivers/sensors/tsl2561/src/tsl2561.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/src/tsl2561.c b/hw/drivers/sensors/tsl2561/src/tsl2561.c
index c9f7531..1fbf905 100644
--- a/hw/drivers/sensors/tsl2561/src/tsl2561.c
+++ b/hw/drivers/sensors/tsl2561/src/tsl2561.c
@@ -58,12 +58,9 @@
 /* ToDo: Add timer based polling in bg and data ready callback (os_event?) */
 /* ToDo: Move values to struct incl. address to allow multiple instances */
 
-#if MYNEWT_VAL(TSL2561_CLI)
 uint8_t g_tsl2561_gain;
 uint8_t g_tsl2561_integration_time;
 uint8_t g_tsl2561_enabled;
-#endif
-
 
 #if MYNEWT_VAL(TSL2561_STATS)
 /* Define the stats section and records */
@@ -224,7 +221,6 @@ err:
     return rc;
 }
 
-#if MYNEWT_VAL(TSL2561_CLI)
 int
 tsl2561_enable(uint8_t state)
 {
@@ -253,14 +249,14 @@ tsl2561_set_integration_time(uint8_t int_time)
     int rc;
 
     rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING,
-                        g_tsl2561_integration_time | g_tsl2561_gain);
+                        int_time | g_tsl2561_gain);
     if (rc) {
-        goto error;
+        goto err;
     }
 
     g_tsl2561_integration_time = int_time;
 
-error:
+err:
     return rc;
 }
 
@@ -278,18 +274,18 @@ tsl2561_set_gain(uint8_t gain)
     if ((gain != TSL2561_LIGHT_GAIN_1X) && (gain != TSL2561_LIGHT_GAIN_16X)) {
         TSL2561_ERR("Invalid gain value\n");
         rc = EINVAL;
-        goto error;
+        goto err;
     }
 
     rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING,
                         g_tsl2561_integration_time | gain);
     if (rc) {
-        goto error;
+        goto err;
     }
 
     g_tsl2561_gain = gain;
 
-error:
+err:
     return rc;
 }
 
@@ -298,8 +294,6 @@ tsl2561_get_gain(void)
 {
     return g_tsl2561_gain;
 }
-#endif
-
 
 int
 tsl2561_get_data(uint16_t *broadband, uint16_t *ir, struct tsl2561 *tsl2561)
@@ -698,27 +692,18 @@ tsl2561_config(struct tsl2561 *tsl2561, struct tsl2561_cfg *cfg)
 {
     int rc;
 
-    if ((cfg->gain != TSL2561_LIGHT_GAIN_1X) &&
-        (cfg->gain != TSL2561_LIGHT_GAIN_16X)) {
-        TSL2561_ERR("Invalid gain value\n");
-        rc = SYS_EINVAL;
-        goto err;
-    }
-
-    /* Overwrite the configuration data. */
-    memcpy(&tsl2561->cfg, cfg, sizeof(*cfg));
+    rc = tsl2561_enable(1);
 
-    /* Enable the device by setting the control bit to 0x03 */
-    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_CONTROL,
-                        TSL2561_CONTROL_POWERON);
+    rc |= tsl2561_set_integration_time(cfg->integration_time);
 
-    /* Set integration time and gain */
-    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING,
-                        cfg->integration_time | cfg->gain);
+    rc |= tsl2561_set_gain(cfg->gain);
     if (rc) {
         goto err;
     }
 
+    /* Overwrite the configuration data. */
+    memcpy(&tsl2561->cfg, cfg, sizeof(*cfg));
+
 err:
     return (rc);
 }


[04/50] incubator-mynewt-core git commit: oic; ble, change reassembly take place in write callback from host. Only allocate oc_endpoint mbuf for the first fragment.

Posted by vi...@apache.org.
oic; ble, change reassembly take place in write callback from host.
Only allocate oc_endpoint mbuf for the first fragment.


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/7bdbd5e9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/7bdbd5e9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/7bdbd5e9

Branch: refs/heads/develop
Commit: 7bdbd5e93fe03fd9e99e7459e7d8b3ee18ad0c03
Parents: f65669d
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Wed Dec 14 16:43:22 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Sun Dec 18 13:56:17 2016 -0800

----------------------------------------------------------------------
 net/oic/src/port/mynewt/ble_adaptor.c | 196 ++++++++++-------------------
 1 file changed, 65 insertions(+), 131 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7bdbd5e9/net/oic/src/port/mynewt/ble_adaptor.c
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/ble_adaptor.c b/net/oic/src/port/mynewt/ble_adaptor.c
index 14128f2..23742b9 100644
--- a/net/oic/src/port/mynewt/ble_adaptor.c
+++ b/net/oic/src/port/mynewt/ble_adaptor.c
@@ -75,8 +75,6 @@ STATS_NAME_START(oc_ble_stats)
     STATS_NAME(oc_ble_stats, oerr)
 STATS_NAME_END(oc_ble_stats)
 
-/* queue to hold mbufs until we get called from oic */
-static struct os_mqueue oc_ble_coap_mq;
 static STAILQ_HEAD(, os_mbuf_pkthdr) oc_ble_reass_q;
 
 #if (MYNEWT_VAL(OC_SERVER) == 1)
@@ -115,6 +113,70 @@ static const struct ble_gatt_svc_def gatt_svr_svcs[] = { {
     },
 };
 
+int
+oc_ble_reass(struct os_mbuf *om1, uint16_t conn_handle)
+{
+    struct os_mbuf_pkthdr *pkt1;
+    struct oc_endpoint *oe;
+    struct os_mbuf *om2;
+    struct os_mbuf_pkthdr *pkt2;
+    uint8_t hdr[6]; /* sizeof(coap_tcp_hdr32) */
+
+    pkt1 = OS_MBUF_PKTHDR(om1);
+    assert(pkt1);
+
+    STATS_INC(oc_ble_stats, iseg);
+    STATS_INCN(oc_ble_stats, ibytes, pkt1->omp_len);
+
+    OC_LOG_DEBUG("oc_gatt rx seg %u-%x-%u\n", conn_handle,
+                 (unsigned)pkt1, pkt1->omp_len);
+
+    STAILQ_FOREACH(pkt2, &oc_ble_reass_q, omp_next) {
+        om2 = OS_MBUF_PKTHDR_TO_MBUF(pkt2);
+        oe = OC_MBUF_ENDPOINT(om2);
+        if (conn_handle == oe->bt_addr.conn_handle) {
+            /*
+             * Data from same connection. Append.
+             */
+            os_mbuf_concat(om2, om1);
+            os_mbuf_copydata(om2, 0, sizeof(hdr), hdr);
+
+            if (coap_tcp_msg_size(hdr, sizeof(hdr)) <= pkt2->omp_len) {
+                STAILQ_REMOVE(&oc_ble_reass_q, pkt2, os_mbuf_pkthdr, omp_next);
+                oc_recv_message(om2);
+            }
+            pkt1 = NULL;
+            break;
+        }
+    }
+    if (pkt1) {
+        /*
+         * New frame
+         */
+        om2 = os_msys_get_pkthdr(0, sizeof(struct oc_endpoint));
+        if (!om2) {
+            OC_LOG_ERROR("oc_gatt_rx: Could not allocate mbuf\n");
+            STATS_INC(oc_ble_stats, ierr);
+            return -1;
+        }
+        OS_MBUF_PKTHDR(om2)->omp_len = pkt1->omp_len;
+        SLIST_NEXT(om2, om_next) = om1;
+
+        oe = OC_MBUF_ENDPOINT(om2);
+        oe->flags = GATT;
+        oe->bt_addr.conn_handle = conn_handle;
+        pkt2 = OS_MBUF_PKTHDR(om2);
+
+        if (os_mbuf_copydata(om2, 0, sizeof(hdr), hdr) ||
+          coap_tcp_msg_size(hdr, sizeof(hdr)) > pkt2->omp_len) {
+            STAILQ_INSERT_TAIL(&oc_ble_reass_q, pkt2, omp_next);
+        } else {
+            oc_recv_message(om2);
+        }
+    }
+    return 0;
+}
+
 static int
 oc_gatt_chr_access(uint16_t conn_handle, uint16_t attr_handle,
                    struct ble_gatt_access_ctxt *ctxt, void *arg)
@@ -127,13 +189,7 @@ oc_gatt_chr_access(uint16_t conn_handle, uint16_t attr_handle,
     case BLE_GATT_ACCESS_OP_WRITE_CHR:
         m = ctxt->om;
 
-        /* stick the conn handle at the end of the frame -- we will
-         * pull it out later */
-        rc = os_mbuf_append(m, &conn_handle, sizeof(conn_handle));
-        if (rc) {
-            return BLE_ATT_ERR_INSUFFICIENT_RES;
-        }
-        rc = os_mqueue_put(&oc_ble_coap_mq, oc_evq_get(), m);
+        rc = oc_ble_reass(m, conn_handle);
         if (rc) {
             return BLE_ATT_ERR_INSUFFICIENT_RES;
         }
@@ -148,60 +204,6 @@ oc_gatt_chr_access(uint16_t conn_handle, uint16_t attr_handle,
     }
     return 0;
 }
-
-static struct os_mbuf *
-oc_attempt_rx_gatt(void)
-{
-    int rc;
-    struct os_mbuf *m;
-    struct os_mbuf *n;
-    struct os_mbuf_pkthdr *pkt;
-    struct oc_endpoint *oe;
-    uint16_t conn_handle;
-
-    /* get an mbuf from the queue */
-    n = os_mqueue_get(&oc_ble_coap_mq);
-    if (NULL == n) {
-        return NULL;
-    }
-
-    pkt = OS_MBUF_PKTHDR(n);
-
-    STATS_INC(oc_ble_stats, iseg);
-    STATS_INCN(oc_ble_stats, ibytes, pkt->omp_len);
-
-    /* get the conn handle from the end of the message */
-    rc = os_mbuf_copydata(n, pkt->omp_len - sizeof(conn_handle),
-                          sizeof(conn_handle), &conn_handle);
-    if (rc != 0) {
-        OC_LOG_ERROR("oc_gatt_rx: Failed to get conn_handle from mbuf\n");
-        goto rx_attempt_err;
-    }
-
-    /* trim conn_handle from the end */
-    os_mbuf_adj(n, - sizeof(conn_handle));
-
-    m = os_msys_get_pkthdr(0, sizeof(struct oc_endpoint));
-    if (!m) {
-        OC_LOG_ERROR("oc_gatt_rx: Could not allocate mbuf\n");
-        goto rx_attempt_err;
-    }
-    OS_MBUF_PKTHDR(m)->omp_len = pkt->omp_len;
-    SLIST_NEXT(m, om_next) = n;
-
-    oe = OC_MBUF_ENDPOINT(m);
-
-    oe->flags = GATT;
-    oe->bt_addr.conn_handle = conn_handle;
-
-    return m;
-
-    /* add the addr info to the message */
-rx_attempt_err:
-    STATS_INC(oc_ble_stats, ierr);
-    os_mbuf_free_chain(n);
-    return NULL;
-}
 #endif
 
 int
@@ -227,60 +229,6 @@ oc_ble_coap_gatt_srv_init(void)
 }
 
 void
-oc_ble_reass(struct os_mbuf *om1)
-{
-    struct os_mbuf_pkthdr *pkt1;
-    struct oc_endpoint *oe1;
-    struct os_mbuf *om2;
-    struct os_mbuf_pkthdr *pkt2;
-    struct oc_endpoint *oe2;
-    int sr;
-    uint8_t hdr[6]; /* sizeof(coap_tcp_hdr32) */
-
-    pkt1 = OS_MBUF_PKTHDR(om1);
-    assert(pkt1);
-    oe1 = OC_MBUF_ENDPOINT(om1);
-
-    OC_LOG_DEBUG("oc_gatt rx seg %d-%x-%u\n", oe1->bt_addr.conn_handle,
-      (unsigned)pkt1, pkt1->omp_len);
-
-    OS_ENTER_CRITICAL(sr);
-    STAILQ_FOREACH(pkt2, &oc_ble_reass_q, omp_next) {
-        om2 = OS_MBUF_PKTHDR_TO_MBUF(pkt2);
-        oe2 = OC_MBUF_ENDPOINT(om2);
-        if (oe1->bt_addr.conn_handle == oe2->bt_addr.conn_handle) {
-            /*
-             * Data from same connection. Append.
-             */
-            os_mbuf_concat(om2, om1);
-            if (os_mbuf_copydata(om2, 0, sizeof(hdr), hdr)) {
-                pkt1 = NULL;
-                break;
-            }
-            if (coap_tcp_msg_size(hdr, sizeof(hdr)) <= pkt2->omp_len) {
-                STAILQ_REMOVE(&oc_ble_reass_q, pkt2, os_mbuf_pkthdr,
-                  omp_next);
-                oc_recv_message(om2);
-            }
-            pkt1 = NULL;
-            break;
-        }
-    }
-    if (pkt1) {
-        /*
-         *
-         */
-        if (os_mbuf_copydata(om1, 0, sizeof(hdr), hdr) ||
-          coap_tcp_msg_size(hdr, sizeof(hdr)) > pkt1->omp_len) {
-            STAILQ_INSERT_TAIL(&oc_ble_reass_q, pkt1, omp_next);
-        } else {
-            oc_recv_message(om1);
-        }
-    }
-    OS_EXIT_CRITICAL(sr);
-}
-
-void
 oc_ble_coap_conn_new(uint16_t conn_handle)
 {
     OC_LOG_DEBUG("oc_gatt newconn %x\n", conn_handle);
@@ -292,10 +240,8 @@ oc_ble_coap_conn_del(uint16_t conn_handle)
     struct os_mbuf_pkthdr *pkt;
     struct os_mbuf *m;
     struct oc_endpoint *oe;
-    int sr;
 
     OC_LOG_DEBUG("oc_gatt endconn %x\n", conn_handle);
-    OS_ENTER_CRITICAL(sr);
     STAILQ_FOREACH(pkt, &oc_ble_reass_q, omp_next) {
         m = OS_MBUF_PKTHDR_TO_MBUF(pkt);
         oe = OC_MBUF_ENDPOINT(m);
@@ -305,23 +251,11 @@ oc_ble_coap_conn_del(uint16_t conn_handle)
             break;
         }
     }
-    OS_EXIT_CRITICAL(sr);
-}
-
-static void
-oc_event_gatt(struct os_event *ev)
-{
-    struct os_mbuf *m;
-
-    while ((m = oc_attempt_rx_gatt()) != NULL) {
-        oc_ble_reass(m);
-    }
 }
 
 int
 oc_connectivity_init_gatt(void)
 {
-    os_mqueue_init(&oc_ble_coap_mq, oc_event_gatt, NULL);
     STAILQ_INIT(&oc_ble_reass_q);
     return 0;
 }


[16/50] incubator-mynewt-core git commit: move #if to beginning of line.

Posted by vi...@apache.org.
move #if to beginning of line.


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/68986fbd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/68986fbd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/68986fbd

Branch: refs/heads/develop
Commit: 68986fbd71a90f779765ca0e5022084c072dff7a
Parents: ca8be8d
Author: Sterling Hughes <st...@apache.org>
Authored: Fri Dec 23 09:18:51 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Fri Dec 23 09:18:51 2016 -0800

----------------------------------------------------------------------
 hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c | 44 ++++++++++-----------
 1 file changed, 22 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/68986fbd/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
index a4f4996..40978c6 100644
--- a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
+++ b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
@@ -111,9 +111,9 @@ lsm303dlhc_write8(uint8_t addr, uint8_t reg, uint32_t value)
     if (rc) {
         LSM303DLHC_ERR("Failed to write to 0x%02X:0x%02X with value 0x%02X\n",
                        addr, reg, value);
-        #if MYNEWT_VAL(LSM303DLHC_STATS)
+#if MYNEWT_VAL(LSM303DLHC_STATS)
         STATS_INC(g_lsm303dlhcstats, errors);
-        #endif
+#endif
     }
 
     return rc;
@@ -146,9 +146,9 @@ lsm303dlhc_read8(uint8_t addr, uint8_t reg, uint8_t *value)
                               OS_TICKS_PER_SEC / 10, 1);
     if (rc) {
         LSM303DLHC_ERR("I2C access failed at address 0x%02X\n", addr);
-        #if MYNEWT_VAL(LSM303DLHC_STATS)
+#if MYNEWT_VAL(LSM303DLHC_STATS)
         STATS_INC(g_lsm303dlhcstats, errors);
-        #endif
+#endif
         goto error;
     }
 
@@ -159,9 +159,9 @@ lsm303dlhc_read8(uint8_t addr, uint8_t reg, uint8_t *value)
     *value = payload;
     if (rc) {
         LSM303DLHC_ERR("Failed to read from 0x%02X:0x%02X\n", addr, reg);
-        #if MYNEWT_VAL(LSM303DLHC_STATS)
+#if MYNEWT_VAL(LSM303DLHC_STATS)
         STATS_INC(g_lsm303dlhcstats, errors);
-        #endif
+#endif
     }
 
 error:
@@ -185,9 +185,9 @@ lsm303dlhc_read48(uint8_t addr, uint8_t reg, int16_t *x, int16_t*y, int16_t *z)
                               OS_TICKS_PER_SEC / 10, 1);
     if (rc) {
         LSM303DLHC_ERR("I2C access failed at address 0x%02X\n", addr);
-        #if MYNEWT_VAL(LSM303DLHC_STATS)
+#if MYNEWT_VAL(LSM303DLHC_STATS)
         STATS_INC(g_lsm303dlhcstats, errors);
-        #endif
+#endif
         goto error;
     }
 
@@ -204,9 +204,9 @@ lsm303dlhc_read48(uint8_t addr, uint8_t reg, int16_t *x, int16_t*y, int16_t *z)
 
     if (rc) {
         LSM303DLHC_ERR("Failed to read from 0x%02X:0x%02X\n", addr, reg);
-        #if MYNEWT_VAL(LSM303DLHC_STATS)
+#if MYNEWT_VAL(LSM303DLHC_STATS)
         STATS_INC(g_lsm303dlhcstats, errors);
-        #endif
+#endif
         goto error;
     }
 
@@ -234,13 +234,13 @@ lsm303dlhc_init(struct os_dev *dev, void *arg)
 
     lsm = (struct lsm303dlhc *) dev;
 
-    #if MYNEWT_VAL(LSM303DLHC_LOG)
+#if MYNEWT_VAL(LSM303DLHC_LOG)
     log_register("lsm303dlhc", &_log, &log_console_handler, NULL, LOG_SYSLEVEL);
-    #endif
+#endif
 
     sensor = &lsm->sensor;
 
-    #if MYNEWT_VAL(LSM303DLHC_STATS)
+#if MYNEWT_VAL(LSM303DLHC_STATS)
     /* Initialise the stats entry */
     rc = stats_init(
         STATS_HDR(g_lsm303dlhcstats),
@@ -250,7 +250,7 @@ lsm303dlhc_init(struct os_dev *dev, void *arg)
     /* Register the entry with the stats registry */
     rc = stats_register("lsm303dlhc", STATS_HDR(g_lsm303dlhcstats));
     SYSINIT_PANIC_ASSERT(rc == 0);
-    #endif
+#endif
 
     rc = sensor_init(sensor, dev);
     if (rc != 0) {
@@ -333,27 +333,27 @@ lsm303dlhc_sensor_read(struct sensor *sensor, sensor_type_t type,
     /* Determine mg per lsb based on range */
     switch(lsm->cfg.accel_range) {
         case LSM303DLHC_ACCEL_RANGE_2:
-            #if MYNEWT_VAL(LSM303DLHC_STATS)
+#if MYNEWT_VAL(LSM303DLHC_STATS)
             STATS_INC(g_lsm303dlhcstats, samples_acc_2g);
-            #endif
+#endif
             mg_lsb = 0.001F;
             break;
         case LSM303DLHC_ACCEL_RANGE_4:
-            #if MYNEWT_VAL(LSM303DLHC_STATS)
+#if MYNEWT_VAL(LSM303DLHC_STATS)
             STATS_INC(g_lsm303dlhcstats, samples_acc_4g);
-            #endif
+#endif
             mg_lsb = 0.002F;
             break;
         case LSM303DLHC_ACCEL_RANGE_8:
-            #if MYNEWT_VAL(LSM303DLHC_STATS)
+#if MYNEWT_VAL(LSM303DLHC_STATS)
             STATS_INC(g_lsm303dlhcstats, samples_acc_8g);
-            #endif
+#endif
             mg_lsb = 0.004F;
             break;
         case LSM303DLHC_ACCEL_RANGE_16:
-            #if MYNEWT_VAL(LSM303DLHC_STATS)
+#if MYNEWT_VAL(LSM303DLHC_STATS)
             STATS_INC(g_lsm303dlhcstats, samples_acc_16g);
-            #endif
+#endif
             mg_lsb = 0.012F;
             break;
         default:


[29/50] incubator-mynewt-core git commit: Adding tsl2561 driver

Posted by vi...@apache.org.
Adding tsl2561 driver


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/674aa7d4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/674aa7d4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/674aa7d4

Branch: refs/heads/develop
Commit: 674aa7d47a4a1ed6d30d0f5d02d0b9ffa52011cf
Parents: fbbad56
Author: Vipul Rahane <vi...@apache.org>
Authored: Wed Jan 25 17:56:30 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Wed Jan 25 17:56:30 2017 -0800

----------------------------------------------------------------------
 .../sensors/tsl2561/include/tsl2561/tsl2561.h   | 186 ++++++++
 hw/drivers/sensors/tsl2561/pkg.yml              |  49 ++
 hw/drivers/sensors/tsl2561/src/tsl2561.c        | 464 +++++++++++++++++++
 hw/drivers/sensors/tsl2561/src/tsl2561_priv.h   |  90 ++++
 hw/drivers/sensors/tsl2561/src/tsl2561_shell.c  | 426 +++++++++++++++++
 hw/drivers/sensors/tsl2561/syscfg.yml           |  41 ++
 6 files changed, 1256 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/674aa7d4/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h b/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h
new file mode 100644
index 0000000..03320e8
--- /dev/null
+++ b/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h
@@ -0,0 +1,186 @@
+/**************************************************************************/
+/*!
+    @file     tsl2561.h
+    @author   ktown (Adafruit Industries)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2016, Adafruit Industries (adafruit.com)
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+    THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+
+#ifndef __ADAFRUIT_TSL2561_H__
+#define __ADAFRUIT_TSL2561_H__
+
+#include <os/os.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+struct tsl2561_i2c {
+    uint8_t i2c_num;
+    uint8_t i2c_addr;
+};
+
+struct tsl2561_cfg {
+    uint8_t gain;
+    uint8_t integration_time;
+    uint8_t enabled;
+};
+
+struct tsl2561_dev {
+    struct tsl2561_i2c i2c;
+    struct tsl2561_cfg cfg;
+};
+*/
+
+/**
+ * Initialize the tsl2561. This function is normally called by sysinit.
+ *
+ * @param dev  Pointer to the tsl2561_dev device descriptor
+ */
+void tsl2561_init(void);
+
+/**
+ * Enable or disables the sensor to save power
+ *
+ * @param state  1 to enable the sensor, 0 to disable it
+ *
+ * @return 0 on success, and non-zero error code on failure
+ */
+int tsl2561_enable(uint8_t state);
+
+/**
+ * Gets the current 'enabled' state for the IC
+ *
+ * @return 1 if the IC is enabled, otherwise 0
+ */
+uint8_t tsl2561_get_enable(void);
+
+/**
+ * Gets a new data sample from the light sensor.
+ *
+ * @param broadband The full (visible + ir) sensor output
+ * @param ir        The ir sensor output
+ *
+ * @return 0 on success, and non-zero error code on failure
+ */
+int tsl2561_get_data(uint16_t *broadband, uint16_t *ir);
+
+/**
+ * Sets the integration time used when sampling light values.
+ *
+ * @param int_time The integration time which can be one of:
+ *                  - 0x00: 13ms
+ *                  - 0x01: 101ms
+ *                  - 0x02: 402ms
+ *
+ * @return 0 on success, and non-zero error code on failure
+ */
+int tsl2561_set_integration_time(uint8_t int_time);
+
+/**
+ * Gets the current integration time used when sampling light values.
+ *
+ * @return The integration time which can be one of:
+ *         - 0x00: 13ms
+ *         - 0x01: 101ms
+ *         - 0x02: 402ms
+ */
+uint8_t tsl2561_get_integration_time(void);
+
+/**
+ * Sets the gain increment used when sampling light values.
+ *
+ * @param gain The gain increment which can be one of:
+ *                  - 0x00: 1x (no gain)
+ *                  - 0x10: 16x gain
+ *
+ * @return 0 on success, and non-zero error code on failure
+ */
+int tsl2561_set_gain(uint8_t gain);
+
+/**
+ * Gets the current gain increment used when sampling light values.
+ *
+ * @return The gain increment which can be one of:
+ *         - 0x00: 1x (no gain)
+ *         - 0x10: 16x gain
+ */
+uint8_t tsl2561_get_gain(void);
+
+/**
+ * Sets the upper and lower interrupt thresholds
+ *
+ * @param rate    Sets the rate of interrupts to the host processor:
+ *                - 0   Every ADC cycle generates interrupt
+ *                - 1   Any value outside of threshold range
+ *                - 2   2 integration time periods out of range
+ *                - 3   3 integration time periods out of range
+ *                - 4   4 integration time periods out of range
+ *                - 5   5 integration time periods out of range
+ *                - 6   6 integration time periods out of range
+ *                - 7   7 integration time periods out of range
+ *                - 8   8 integration time periods out of range
+ *                - 9   9 integration time periods out of range
+ *                - 10  10 integration time periods out of range
+ *                - 11  11 integration time periods out of range
+ *                - 12  12 integration time periods out of range
+ *                - 13  13 integration time periods out of range
+ *                - 14  14 integration time periods out of range
+ *                - 15  15 integration time periods out of range
+ * @param lower   The lower threshold
+ * @param upper   The upper threshold
+ *
+ * @return 0 on success, and non-zero error code on failure
+ */
+int tsl2561_setup_interrupt(uint8_t rate, uint16_t lower, uint16_t upper);
+
+/**
+ * Enables or disables the HW interrupt on the device
+ *
+ * @param enable  0 to disable the interrupt, 1 to enablee it
+ *
+ * @return 0 on success, and non-zero error code on failure
+ */
+int tsl2561_enable_interrupt(uint8_t enable);
+
+/**
+ * Clear an asserted interrupt on the device
+ *
+ * @return 0 on success, and non-zero error code on failure
+ */
+int tsl2561_clear_interrupt(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ADAFRUIT_TSL2561_H__ */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/674aa7d4/hw/drivers/sensors/tsl2561/pkg.yml
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/pkg.yml b/hw/drivers/sensors/tsl2561/pkg.yml
new file mode 100644
index 0000000..e7d0ffd
--- /dev/null
+++ b/hw/drivers/sensors/tsl2561/pkg.yml
@@ -0,0 +1,49 @@
+# The BSD License (BSD)
+#
+# Copyright (c) 2016 Adafruit Industries
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+pkg.name: hw/drivers/sensors/tsl2561
+pkg.description: Driver for the TSL2561 light to digital sensor
+pkg.author: "Adafruit <su...@adafruit.com>"
+pkg.homepage: "http://www.adafruit.com/"
+pkg.keywords:
+    - adafruit
+    - tsl2561
+    - i2c
+    - sensor
+
+pkg.deps:
+    - "@apache-mynewt-core/kernel/os"
+    - "@apache-mynewt-core/hw/hal"
+
+pkg.deps.TSL2561_CLI:
+    - "@apache-mynewt-core/sys/console/full"
+    - "@apache-mynewt-core/sys/shell"
+    - "@apache-mynewt-core/sys/sysinit"
+
+pkg.deps.TSL2561_LOG:
+    - "@apache-mynewt-core/sys/log"
+
+pkg.deps.TSL2561_STATS:
+    - "@apache-mynewt-core/sys/stats"
+
+pkg.init_function: tsl2561_init
+pkg.init_stage: 6

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/674aa7d4/hw/drivers/sensors/tsl2561/src/tsl2561.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/src/tsl2561.c b/hw/drivers/sensors/tsl2561/src/tsl2561.c
new file mode 100644
index 0000000..037ccf8
--- /dev/null
+++ b/hw/drivers/sensors/tsl2561/src/tsl2561.c
@@ -0,0 +1,464 @@
+/*****************************************************************************/
+/*!
+    @file     tsl2561.c
+    @author   ktown (Adafruit Industries)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2016, Adafruit Industries (adafruit.com)
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+    THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/*****************************************************************************/
+
+#include <assert.h>
+#include <stdio.h>
+#include <errno.h>
+#include "sysinit/sysinit.h"
+#include "hal/hal_i2c.h"
+#include "tsl2561/tsl2561.h"
+#include "tsl2561_priv.h"
+
+#if MYNEWT_VAL(TSL2561_LOG)
+#include "log/log.h"
+#endif
+
+#if MYNEWT_VAL(TSL2561_STATS)
+#include "stats/stats.h"
+#endif
+
+/* ToDo: Add timer based polling in bg and data ready callback (os_event?) */
+/* ToDo: Move values to struct incl. address to allow multiple instances */
+
+static uint8_t g_tsl2561_gain;
+static uint8_t g_tsl2561_integration_time;
+static uint8_t g_tsl2561_enabled;
+
+#if MYNEWT_VAL(TSL2561_STATS)
+/* Define the stats section and records */
+STATS_SECT_START(tsl2561_stat_section)
+    STATS_SECT_ENTRY(samples_13ms)
+    STATS_SECT_ENTRY(samples_101ms)
+    STATS_SECT_ENTRY(samples_402ms)
+    STATS_SECT_ENTRY(ints_cleared)
+    STATS_SECT_ENTRY(errors)
+STATS_SECT_END
+
+/* Define stat names for querying */
+STATS_NAME_START(tsl2561_stat_section)
+    STATS_NAME(tsl2561_stat_section, samples_13ms)
+    STATS_NAME(tsl2561_stat_section, samples_101ms)
+    STATS_NAME(tsl2561_stat_section, samples_402ms)
+    STATS_NAME(tsl2561_stat_section, ints_cleared)
+    STATS_NAME(tsl2561_stat_section, errors)
+STATS_NAME_END(tsl2561_stat_section)
+
+/* Global variable used to hold stats data */
+STATS_SECT_DECL(tsl2561_stat_section) g_tsl2561stats;
+#endif
+
+#if MYNEWT_VAL(TSL2561_LOG)
+#define LOG_MODULE_TSL2561    (2561)
+#define TSL2561_INFO(...)     LOG_INFO(&_log, LOG_MODULE_TSL2561, __VA_ARGS__)
+#define TSL2561_ERR(...)      LOG_ERROR(&_log, LOG_MODULE_TSL2561, __VA_ARGS__)
+static struct log _log;
+#else
+#define TSL2561_INFO(...)
+#define TSL2561_ERR(...)
+#endif
+
+int
+tsl2561_write8(uint8_t reg, uint32_t value)
+{
+    int rc;
+    uint8_t payload[2] = { reg, value & 0xFF };
+
+    struct hal_i2c_master_data data_struct = {
+        .address = MYNEWT_VAL(TSL2561_I2CADDR),
+        .len = 2,
+        .buffer = payload
+    };
+
+    rc = hal_i2c_master_write(MYNEWT_VAL(TSL2561_I2CBUS), &data_struct,
+                              OS_TICKS_PER_SEC / 10, 1);
+    if (rc) {
+        TSL2561_ERR("Failed to write @0x%02X with value 0x%02X\n", reg, value);
+    }
+
+    return rc;
+}
+
+int
+tsl2561_write16(uint8_t reg, uint16_t value)
+{
+    int rc;
+    uint8_t payload[3] = { reg, value & 0xFF, (value >> 8) & 0xFF };
+
+    struct hal_i2c_master_data data_struct = {
+        .address = MYNEWT_VAL(TSL2561_I2CADDR),
+        .len = 3,
+        .buffer = payload
+    };
+
+    rc = hal_i2c_master_write(MYNEWT_VAL(TSL2561_I2CBUS), &data_struct,
+                              OS_TICKS_PER_SEC / 10, 1);
+    if (rc) {
+        TSL2561_ERR("Failed to write @0x%02X with value 0x%02X 0x%02X\n",
+                    reg, payload[0], payload[1]);
+    }
+
+    return rc;
+}
+
+int
+tsl2561_read8(uint8_t reg, uint8_t *value)
+{
+    int rc;
+    uint8_t payload;
+
+    struct hal_i2c_master_data data_struct = {
+        .address = MYNEWT_VAL(TSL2561_I2CADDR),
+        .len = 1,
+        .buffer = &payload
+    };
+
+    /* Register write */
+    payload = reg;
+    rc = hal_i2c_master_write(MYNEWT_VAL(TSL2561_I2CBUS), &data_struct,
+                              OS_TICKS_PER_SEC / 10, 1);
+    if (rc) {
+        TSL2561_ERR("Failed to address sensor\n");
+        goto error;
+    }
+
+    /* Read one byte back */
+    payload = 0;
+    rc = hal_i2c_master_read(MYNEWT_VAL(TSL2561_I2CBUS), &data_struct,
+                             OS_TICKS_PER_SEC / 10, 1);
+    *value = payload;
+    if (rc) {
+        TSL2561_ERR("Failed to read @0x%02X\n", reg);
+    }
+
+error:
+    return rc;
+}
+
+int
+tsl2561_read16(uint8_t reg, uint16_t *value)
+{
+    int rc;
+    uint8_t payload[2] = { reg, 0 };
+
+    struct hal_i2c_master_data data_struct = {
+        .address = MYNEWT_VAL(TSL2561_I2CADDR),
+        .len = 1,
+        .buffer = payload
+    };
+
+    /* Register write */
+    rc = hal_i2c_master_write(MYNEWT_VAL(TSL2561_I2CBUS), &data_struct,
+                              OS_TICKS_PER_SEC / 10, 1);
+    if (rc) {
+        TSL2561_ERR("Failed to address sensor\n");
+        goto error;
+    }
+
+    /* Read two bytes back */
+    memset(payload, 0, 2);
+    data_struct.len = 2;
+    rc = hal_i2c_master_read(MYNEWT_VAL(TSL2561_I2CBUS), &data_struct,
+                             OS_TICKS_PER_SEC / 10, 1);
+    *value = (uint16_t)payload[0] | ((uint16_t)payload[1] << 8);
+    if (rc) {
+        TSL2561_ERR("Failed to read @0x%02X\n", reg);
+        goto error;
+    }
+
+    /* ToDo: Log raw reads */
+    // console_printf("0x%04X\n", (uint16_t)payload[0] | ((uint16_t)payload[1] << 8));
+
+error:
+    return rc;
+}
+
+int
+tsl2561_enable(uint8_t state)
+{
+    int rc;
+
+    /* Enable the device by setting the control bit to 0x03 */
+    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_CONTROL,
+                        state ? TSL2561_CONTROL_POWERON :
+                                TSL2561_CONTROL_POWEROFF);
+    if (!rc) {
+        g_tsl2561_enabled = state ? 1 : 0;
+    }
+
+    return rc;
+}
+
+uint8_t
+tsl2561_get_enable (void)
+{
+    return g_tsl2561_enabled;
+}
+
+int
+tsl2561_get_data(uint16_t *broadband, uint16_t *ir)
+{
+    int rc;
+    int delay_ticks;
+
+    /* Wait integration time ms before getting a data sample */
+    switch (g_tsl2561_integration_time) {
+        case TSL2561_INTEGRATIONTIME_13MS:
+            delay_ticks = 14 * OS_TICKS_PER_SEC / 1000;
+        break;
+        case TSL2561_INTEGRATIONTIME_101MS:
+            delay_ticks = 102 * OS_TICKS_PER_SEC / 1000;
+        break;
+        case TSL2561_INTEGRATIONTIME_402MS:
+        default:
+            delay_ticks = 403 * OS_TICKS_PER_SEC / 1000;
+        break;
+    }
+    os_time_delay(delay_ticks);
+
+    *broadband = *ir = 0;
+    rc = tsl2561_read16(TSL2561_COMMAND_BIT | TSL2561_WORD_BIT | TSL2561_REGISTER_CHAN0_LOW,
+                        broadband);
+    if (rc) {
+        goto error;
+    }
+    rc = tsl2561_read16(TSL2561_COMMAND_BIT | TSL2561_WORD_BIT | TSL2561_REGISTER_CHAN1_LOW,
+                        ir);
+    if (rc) {
+        goto error;
+    }
+
+#if MYNEWT_VAL(TSL2561_STATS)
+    switch (g_tsl2561_integration_time) {
+        case TSL2561_INTEGRATIONTIME_13MS:
+            STATS_INC(g_tsl2561stats, samples_13ms);
+        break;
+        case TSL2561_INTEGRATIONTIME_101MS:
+            STATS_INC(g_tsl2561stats, samples_101ms);
+        break;
+        case TSL2561_INTEGRATIONTIME_402MS:
+            STATS_INC(g_tsl2561stats, samples_402ms);
+        default:
+        break;
+    }
+#endif
+
+error:
+    return rc;
+}
+
+int
+tsl2561_set_integration_time(uint8_t int_time)
+{
+    int rc;
+
+    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING,
+                        g_tsl2561_integration_time | g_tsl2561_gain);
+    if (rc) {
+        goto error;
+    }
+
+    g_tsl2561_integration_time = int_time;
+
+error:
+    return rc;
+}
+
+uint8_t
+tsl2561_get_integration_time(void)
+{
+    return g_tsl2561_integration_time;
+}
+
+int
+tsl2561_set_gain(uint8_t gain)
+{
+    int rc;
+
+    if ((gain != TSL2561_GAIN_1X) && (gain != TSL2561_GAIN_16X)) {
+        TSL2561_ERR("Invalid gain value\n");
+        rc = EINVAL;
+        goto error;
+    }
+
+    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING,
+                        g_tsl2561_integration_time | gain);
+    if (rc) {
+        goto error;
+    }
+
+    g_tsl2561_gain = gain;
+
+error:
+    return rc;
+}
+
+uint8_t
+tsl2561_get_gain(void)
+{
+    return g_tsl2561_gain;
+}
+
+int tsl2561_setup_interrupt (uint8_t rate, uint16_t lower, uint16_t upper)
+{
+    int rc;
+    uint8_t intval;
+
+    /* Set lower threshold */
+    rc = tsl2561_write16(TSL2561_COMMAND_BIT | TSL2561_WORD_BIT | TSL2561_REGISTER_THRESHHOLDL_LOW,
+                         lower);
+    if (rc) {
+        goto error;
+    }
+
+    /* Set upper threshold */
+    rc = tsl2561_write16(TSL2561_COMMAND_BIT | TSL2561_WORD_BIT | TSL2561_REGISTER_THRESHHOLDH_LOW,
+                         upper);
+    if (rc) {
+        goto error;
+    }
+
+    /* Set rate */
+    rc = tsl2561_read8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_INTERRUPT, &intval);
+    if (rc) {
+        goto error;
+    }
+    /* Maintain the INTR Control Select bits */
+    rate = (intval & 0xF0) | (rate & 0xF);
+    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_INTERRUPT,
+                        rate);
+    if (rc) {
+        goto error;
+    }
+
+error:
+    return rc;
+}
+
+int tsl2561_enable_interrupt (uint8_t enable)
+{
+    int rc;
+    uint8_t persist_val;
+
+    if (enable > 1) {
+        TSL2561_ERR("Invalid value 0x%02X in tsl2561_enable_interrupt\n",
+                    enable);
+        rc = EINVAL;
+        goto error;
+    }
+
+    /* Read the current value to maintain PERSIST state */
+    rc = tsl2561_read8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_INTERRUPT, &persist_val);
+    if (rc) {
+        goto error;
+    }
+
+    /* Enable (1) or disable (0)  level interrupts */
+    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_INTERRUPT,
+                        ((enable & 0x01) << 4) | (persist_val & 0x0F) );
+    if (rc) {
+        goto error;
+    }
+
+error:
+    return rc;
+}
+
+int tsl2561_clear_interrupt (void)
+{
+    int rc;
+    uint8_t payload = { TSL2561_COMMAND_BIT | TSL2561_CLEAR_BIT };
+
+    struct hal_i2c_master_data data_struct = {
+        .address = MYNEWT_VAL(TSL2561_I2CADDR),
+        .len = 1,
+        .buffer = &payload
+    };
+
+    /* To clear the interrupt set the CLEAR bit in the COMMAND register */
+    rc = hal_i2c_master_write(MYNEWT_VAL(TSL2561_I2CBUS), &data_struct,
+                              OS_TICKS_PER_SEC / 10, 1);
+    if (rc) {
+        goto error;
+    }
+
+#if MYNEWT_VAL(TSL2561_STATS)
+    STATS_INC(g_tsl2561stats, ints_cleared);
+#endif
+
+error:
+    return rc;
+}
+
+void
+tsl2561_init(void)
+{
+    int rc;
+
+#if !MYNEWT_VAL(TSL2561_TASK)
+    return;
+#endif
+
+#if MYNEWT_VAL(TSL2561_LOG)
+    log_register("tsl2561", &_log, &log_console_handler, NULL, LOG_SYSLEVEL);
+#endif
+
+#if MYNEWT_VAL(TSL2561_CLI)
+    rc = tsl2561_shell_init();
+    SYSINIT_PANIC_ASSERT(rc == 0);
+#endif
+
+#if MYNEWT_VAL(TSL2561_STATS)
+    /* Initialise the stats entry */
+    rc = stats_init(
+        STATS_HDR(g_tsl2561stats),
+        STATS_SIZE_INIT_PARMS(g_tsl2561stats, STATS_SIZE_32),
+        STATS_NAME_INIT_PARMS(tsl2561_stat_section));
+    SYSINIT_PANIC_ASSERT(rc == 0);
+    /* Register the entry with the stats registry */
+    rc = stats_register("tsl2561", STATS_HDR(g_tsl2561stats));
+    SYSINIT_PANIC_ASSERT(rc == 0);
+#endif
+
+    /* Enable the device by default */
+    rc = tsl2561_enable(1);
+    SYSINIT_PANIC_ASSERT(rc == 0);
+
+    rc = tsl2561_set_gain(TSL2561_GAIN_1X);
+    SYSINIT_PANIC_ASSERT(rc == 0);
+
+    rc = tsl2561_set_integration_time(TSL2561_INTEGRATIONTIME_13MS);
+    SYSINIT_PANIC_ASSERT(rc == 0);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/674aa7d4/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h b/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h
new file mode 100644
index 0000000..5ead614
--- /dev/null
+++ b/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h
@@ -0,0 +1,90 @@
+/*****************************************************************************/
+/*!
+    @file     tsl2561_priv.h
+    @author   ktown (Adafruit Industries)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2016, Adafruit Industries (adafruit.com)
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+    THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/*****************************************************************************/
+#ifndef __ADAFRUIT_TSL2561_PRIV_H__
+#define __ADAFRUIT_TSL2561_PRIV_H__
+
+#define TSL2561_REGISTER_CONTROL          (0x00)
+#define TSL2561_REGISTER_TIMING           (0x01)
+#define TSL2561_REGISTER_THRESHHOLDL_LOW  (0x02)
+#define TSL2561_REGISTER_THRESHHOLDL_HIGH (0x03)
+#define TSL2561_REGISTER_THRESHHOLDH_LOW  (0x04)
+#define TSL2561_REGISTER_THRESHHOLDH_HIGH (0x05)
+#define TSL2561_REGISTER_INTERRUPT        (0x06)
+#define TSL2561_REGISTER_ID               (0x0A)
+#define TSL2561_REGISTER_CHAN0_LOW        (0x0C)
+#define TSL2561_REGISTER_CHAN0_HIGH       (0x0D)
+#define TSL2561_REGISTER_CHAN1_LOW        (0x0E)
+#define TSL2561_REGISTER_CHAN1_HIGH       (0x0F)
+
+#define TSL2561_CONTROL_POWERON           (0x03)
+#define TSL2561_CONTROL_POWEROFF          (0x00)
+
+#define TSL2561_INTEGRATIONTIME_13MS      (0x00)  /* 13.7ms */
+#define TSL2561_INTEGRATIONTIME_101MS     (0x01)  /* 101ms */
+#define TSL2561_INTEGRATIONTIME_402MS     (0x02)  /* 402ms */
+
+#define TSL2561_GAIN_1X                   (0x00)  /* No gain */
+#define TSL2561_GAIN_16X                  (0x10)  /* 16x gain */
+
+#define TSL2561_COMMAND_BIT               (0x80)  /* Must be 1 */
+#define TSL2561_CLEAR_BIT                 (0x40)  /* 1=Clear any pending int */
+#define TSL2561_WORD_BIT                  (0x20)  /* 1=Read/write word */
+#define TSL2561_BLOCK_BIT                 (0x10)  /* 1=Use block read/write */
+
+#define TSL2561_CONTROL_POWERON           (0x03)
+#define TSL2561_CONTROL_POWEROFF          (0x00)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* tsl2561.c */
+int tsl2561_write8(uint8_t reg, uint32_t value);
+int tsl2561_write16(uint8_t reg, uint16_t value);
+int tsl2561_read8(uint8_t reg, uint8_t *value);
+int tsl2561_read16(uint8_t reg, uint16_t *value);
+
+/* tsl2561_shell.c */
+#if MYNEWT_VAL(TSL2561_CLI)
+int tsl2561_shell_init(void);
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ADAFRUIT_TSL2561_PRIV_H_ */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/674aa7d4/hw/drivers/sensors/tsl2561/src/tsl2561_shell.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/src/tsl2561_shell.c b/hw/drivers/sensors/tsl2561/src/tsl2561_shell.c
new file mode 100644
index 0000000..c485261
--- /dev/null
+++ b/hw/drivers/sensors/tsl2561/src/tsl2561_shell.c
@@ -0,0 +1,426 @@
+/**************************************************************************/
+/*!
+    @file     tsl2561_shell.c
+    @author   ktown (Adafruit Industries)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2016, Adafruit Industries (adafruit.com)
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+    THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+
+#include <string.h>
+#include <errno.h>
+#include "sysinit/sysinit.h"
+#include "console/console.h"
+#include "shell/shell.h"
+#include "hal/hal_gpio.h"
+#include "tsl2561/tsl2561.h"
+#include "tsl2561_priv.h"
+
+#if MYNEWT_VAL(TSL2561_CLI)
+static int tsl2561_shell_cmd(int argc, char **argv);
+
+static struct shell_cmd tsl2561_shell_cmd_struct = {
+    .sc_cmd = "tsl2561",
+    .sc_cmd_func = tsl2561_shell_cmd
+};
+
+/*
+static int
+tsl2561_shell_err_too_few_args(char *cmd_name)
+{
+    console_printf("Error: too few arguments for command \"%s\"\n",
+                   cmd_name);
+    return -1;
+}
+*/
+
+static int
+tsl2561_shell_stol(char *param_val, long min, long max, long *output)
+{
+    char *endptr;
+    long lval;
+
+    lval = strtol(param_val, &endptr, 10); /* Base 10 */
+    if (param_val != '\0' && *endptr == '\0' &&
+        lval >= min && lval <= max) {
+            *output = lval;
+    } else {
+        return EINVAL;
+    }
+
+    return 0;
+}
+
+static int
+tsl2561_shell_err_too_many_args(char *cmd_name)
+{
+    console_printf("Error: too many arguments for command \"%s\"\n",
+                   cmd_name);
+    return EINVAL;
+}
+
+static int
+tsl2561_shell_err_unknown_arg(char *cmd_name)
+{
+    console_printf("Error: unknown argument \"%s\"\n",
+                   cmd_name);
+    return EINVAL;
+}
+
+static int
+tsl2561_shell_err_invalid_arg(char *cmd_name)
+{
+    console_printf("Error: invalid argument \"%s\"\n",
+                   cmd_name);
+    return EINVAL;
+}
+
+static int
+tsl2561_shell_help(void)
+{
+    console_printf("%s cmd [flags...]\n", tsl2561_shell_cmd_struct.sc_cmd);
+    console_printf("cmd:\n");
+    console_printf("\tr    [n_samples]\n");
+    console_printf("\tgain [1|16]\n");
+    console_printf("\ttime [13|101|402]\n");
+    console_printf("\ten   [0|1]\n");
+    console_printf("\tint  pin [p_num(0..255)]\n");
+    console_printf("\tint  on|off|clr\n");
+    console_printf("\tint  set [rate(0..15)] [lower(0..65535)] [upper(0..65535)]\n");
+    console_printf("\tdump\n");
+
+    return 0;
+}
+
+static int
+tsl2561_shell_cmd_read(int argc, char **argv)
+{
+    uint16_t full;
+    uint16_t ir;
+    uint16_t samples = 1;
+    long val;
+    int rc;
+
+    if (argc > 3) {
+        return tsl2561_shell_err_too_many_args(argv[1]);
+    }
+
+    /* Check if more than one sample requested */
+    if (argc == 3) {
+        if (tsl2561_shell_stol(argv[2], 1, UINT16_MAX, &val)) {
+            return tsl2561_shell_err_invalid_arg(argv[2]);
+        }
+        samples = (uint16_t)val;
+    }
+
+    while(samples--) {
+        rc = tsl2561_get_data(&full, &ir);
+        if (rc != 0) {
+            console_printf("Read failed: %d\n", rc);
+            return rc;
+        }
+        console_printf("Full:  %u\n", full);
+        console_printf("IR:    %u\n", ir);
+    }
+
+    return 0;
+}
+
+static int
+tsl2561_shell_cmd_gain(int argc, char **argv)
+{
+    long val;
+
+    if (argc > 3) {
+        return tsl2561_shell_err_too_many_args(argv[1]);
+    }
+
+    /* Display the gain */
+    if (argc == 2) {
+        uint8_t gain = tsl2561_get_gain();
+        console_printf("%u\n", gain ? 16u : 1u);
+    }
+
+    /* Update the gain */
+    if (argc == 3) {
+        if (tsl2561_shell_stol(argv[2], 1, 16, &val)) {
+            return tsl2561_shell_err_invalid_arg(argv[2]);
+        }
+        /* Make sure gain is 1 ot 16 */
+        if ((val != 1) && (val != 16)) {
+            return tsl2561_shell_err_invalid_arg(argv[2]);
+        }
+        tsl2561_set_gain(val ? TSL2561_GAIN_16X : TSL2561_GAIN_1X);
+    }
+
+    return 0;
+}
+
+static int
+tsl2561_shell_cmd_time(int argc, char **argv)
+{
+    uint8_t time;
+    long val;
+
+    if (argc > 3) {
+        return tsl2561_shell_err_too_many_args(argv[1]);
+    }
+
+    /* Display the integration time */
+    if (argc == 2) {
+        time = tsl2561_get_integration_time();
+        switch (time) {
+            case TSL2561_INTEGRATIONTIME_13MS:
+                console_printf("13\n");
+            break;
+            case TSL2561_INTEGRATIONTIME_101MS:
+                console_printf("101\n");
+            break;
+            case TSL2561_INTEGRATIONTIME_402MS:
+                console_printf("402\n");
+            break;
+        }
+    }
+
+    /* Set the integration time */
+    if (argc == 3) {
+        if (tsl2561_shell_stol(argv[2], 13, 402, &val)) {
+            return tsl2561_shell_err_invalid_arg(argv[2]);
+        }
+        /* Make sure val is 13, 102 or 402 */
+        if ((val != 13) && (val != 101) && (val != 402)) {
+            return tsl2561_shell_err_invalid_arg(argv[2]);
+        }
+        switch(val) {
+            case 13:
+                tsl2561_set_integration_time(TSL2561_INTEGRATIONTIME_13MS);
+            break;
+            case 101:
+                tsl2561_set_integration_time(TSL2561_INTEGRATIONTIME_101MS);
+            break;
+            case 402:
+                tsl2561_set_integration_time(TSL2561_INTEGRATIONTIME_402MS);
+            break;
+        }
+    }
+
+    return 0;
+}
+
+static int
+tsl2561_shell_cmd_int(int argc, char **argv)
+{
+    int rc;
+    int pin;
+    long val;
+    uint8_t rate;
+    uint16_t lower;
+    uint16_t upper;
+
+    if (argc > 6) {
+        return tsl2561_shell_err_too_many_args(argv[1]);
+    }
+
+    if (argc == 2) {
+        console_printf("ToDo: Display int details\n");
+        return 0;
+    }
+
+    /* Enable the interrupt */
+    if (argc == 3 && strcmp(argv[2], "on") == 0) {
+        return tsl2561_enable_interrupt(1);
+    }
+
+    /* Disable the interrupt */
+    if (argc == 3 && strcmp(argv[2], "off") == 0) {
+        return tsl2561_enable_interrupt(0);
+    }
+
+    /* Clear the interrupt on 'clr' */
+    if (argc == 3 && strcmp(argv[2], "clr") == 0) {
+        return tsl2561_clear_interrupt();
+    }
+
+    /* Configure the interrupt on 'set' */
+    if (argc == 6 && strcmp(argv[2], "set") == 0) {
+        /* Get rate */
+        if (tsl2561_shell_stol(argv[3], 0, 15, &val)) {
+            return tsl2561_shell_err_invalid_arg(argv[3]);
+        }
+        rate = (uint8_t)val;
+        /* Get lower threshold */
+        if (tsl2561_shell_stol(argv[4], 0, UINT16_MAX, &val)) {
+            return tsl2561_shell_err_invalid_arg(argv[4]);
+        }
+        lower = (uint16_t)val;
+        /* Get upper threshold */
+        if (tsl2561_shell_stol(argv[5], 0, UINT16_MAX, &val)) {
+            return tsl2561_shell_err_invalid_arg(argv[5]);
+        }
+        upper = (uint16_t)val;
+        /* Set the values */
+        rc = tsl2561_setup_interrupt(rate, lower, upper);
+        console_printf("Configured interrupt as:\n");
+        console_printf("\trate: %u\n", rate);
+        console_printf("\tlower: %u\n", lower);
+        console_printf("\tupper: %u\n", upper);
+        return rc;
+    }
+
+    /* Setup INT pin on 'pin' */
+    if (argc == 4 && strcmp(argv[2], "pin") == 0) {
+        /* Get the pin number */
+        if (tsl2561_shell_stol(argv[3], 0, 0xFF, &val)) {
+            return tsl2561_shell_err_invalid_arg(argv[3]);
+        }
+        pin = (int)val;
+        /* INT is open drain, pullup is required */
+        rc = hal_gpio_init_in(pin, HAL_GPIO_PULL_UP);
+        assert(rc == 0);
+        console_printf("Set pin \"%d\" to INPUT with pull up enabled\n", pin);
+        return 0;
+    }
+
+    /* Unknown command */
+    return tsl2561_shell_err_invalid_arg(argv[2]);
+}
+
+static int
+tsl2561_shell_cmd_en(int argc, char **argv)
+{
+    char *endptr;
+    long lval;
+
+    if (argc > 3) {
+        return tsl2561_shell_err_too_many_args(argv[1]);
+    }
+
+    /* Display current enable state */
+    if (argc == 2) {
+        console_printf("%u\n", tsl2561_get_enable());
+    }
+
+    /* Update the enable state */
+    if (argc == 3) {
+        lval = strtol(argv[2], &endptr, 10); /* Base 10 */
+        if (argv[2] != '\0' && *endptr == '\0' &&
+            lval >= 0 && lval <= 1) {
+                tsl2561_enable(lval);
+        } else {
+            return tsl2561_shell_err_invalid_arg(argv[2]);
+        }
+    }
+
+    return 0;
+}
+
+static int
+tsl2561_shell_cmd_dump(int argc, char **argv)
+{
+  uint8_t val;
+
+  if (argc > 3) {
+      return tsl2561_shell_err_too_many_args(argv[1]);
+  }
+
+  /* Dump all the register values for debug purposes */
+  val = 0;
+  assert(0 == tsl2561_read8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_CONTROL, &val));
+  console_printf("0x%02X (CONTROL): 0x%02X\n", TSL2561_REGISTER_CONTROL, val);
+  assert(0 == tsl2561_read8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING, &val));
+  console_printf("0x%02X (TIMING):  0x%02X\n", TSL2561_REGISTER_TIMING, val);
+  assert(0 == tsl2561_read8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_THRESHHOLDL_LOW, &val));
+  console_printf("0x%02X (THRLL):   0x%02X\n", TSL2561_REGISTER_THRESHHOLDL_LOW, val);
+  assert(0 == tsl2561_read8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_THRESHHOLDL_HIGH, &val));
+  console_printf("0x%02X (THRLH):   0x%02X\n", TSL2561_REGISTER_THRESHHOLDL_HIGH, val);
+  assert(0 == tsl2561_read8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_THRESHHOLDH_LOW, &val));
+  console_printf("0x%02X (THRHL):   0x%02X\n", TSL2561_REGISTER_THRESHHOLDH_LOW, val);
+  assert(0 == tsl2561_read8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_THRESHHOLDH_HIGH, &val));
+  console_printf("0x%02X (THRHH):   0x%02X\n", TSL2561_REGISTER_THRESHHOLDH_HIGH, val);
+  assert(0 == tsl2561_read8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_INTERRUPT, &val));
+  console_printf("0x%02X (INTER):   0x%02X\n", TSL2561_REGISTER_INTERRUPT, val);
+  assert(0 == tsl2561_read8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_ID, &val));
+  console_printf("0x%02X (ID):      0x%02X\n", TSL2561_REGISTER_ID, val);
+
+  return 0;
+}
+
+static int
+tsl2561_shell_cmd(int argc, char **argv)
+{
+    if (argc == 1) {
+        return tsl2561_shell_help();
+    }
+
+    /* Read command (get a new data sample) */
+    if (argc > 1 && strcmp(argv[1], "r") == 0) {
+        return tsl2561_shell_cmd_read(argc, argv);
+    }
+
+    /* Gain command */
+    if (argc > 1 && strcmp(argv[1], "gain") == 0) {
+        return tsl2561_shell_cmd_gain(argc, argv);
+    }
+
+    /* Integration time command */
+    if (argc > 1 && strcmp(argv[1], "time") == 0) {
+        return tsl2561_shell_cmd_time(argc, argv);
+    }
+
+    /* Enable */
+    if (argc > 1 && strcmp(argv[1], "en") == 0) {
+        return tsl2561_shell_cmd_en(argc, argv);
+    }
+
+    /* Interrupt */
+    if (argc > 1 && strcmp(argv[1], "int") == 0) {
+        return tsl2561_shell_cmd_int(argc, argv);
+    }
+
+    /* Debug */
+    if (argc > 1 && strcmp(argv[1], "dump") == 0) {
+        return tsl2561_shell_cmd_dump(argc, argv);
+    }
+
+    return tsl2561_shell_err_unknown_arg(argv[1]);
+}
+
+int
+tsl2561_shell_init(void)
+{
+    int rc;
+
+    rc = shell_cmd_register(&tsl2561_shell_cmd_struct);
+    SYSINIT_PANIC_ASSERT(rc == 0);
+
+    return rc;
+}
+
+#endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/674aa7d4/hw/drivers/sensors/tsl2561/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/syscfg.yml b/hw/drivers/sensors/tsl2561/syscfg.yml
new file mode 100644
index 0000000..f6e6801
--- /dev/null
+++ b/hw/drivers/sensors/tsl2561/syscfg.yml
@@ -0,0 +1,41 @@
+# The BSD License (BSD)
+#
+# Copyright (c) 2016 Adafruit Industries
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+syscfg.defs:
+    TSL2561_TASK:
+        description: 'Enable the TSL2561 sensor driver'
+        value: 0
+    TSL2561_I2CADDR:
+        description: 'HW I2C address for the TSL2561 (0x29, 0x39 or 0x49)'
+        value: 0x39
+    TSL2561_I2CBUS:
+        description: 'I2C bus number for the TSL2561'
+        value: -1
+    TSL2561_CLI:
+        description: 'Enable shell support for the TSL2561'
+        value: 0
+    TSL2561_LOG:
+        description: 'Enable TSL2561 logging'
+        value: 0
+    TSL2561_STATS:
+        description: 'Enable TSL2561 statistics'
+        value: 0



[31/50] incubator-mynewt-core git commit: Adding tsl2561 shell back

Posted by vi...@apache.org.
Adding tsl2561 shell back


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/3559c73a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/3559c73a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/3559c73a

Branch: refs/heads/develop
Commit: 3559c73ac1a0de7fd34f9802e401fc8c6c48bfc2
Parents: 9f59c4f
Author: Vipul Rahane <vi...@apache.org>
Authored: Fri Feb 3 15:25:53 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Fri Feb 3 15:25:53 2017 -0800

----------------------------------------------------------------------
 apps/slinky/src/main.c                          |  7 ++
 .../sensors/tsl2561/include/tsl2561/tsl2561.h   |  5 ++
 hw/drivers/sensors/tsl2561/src/tsl2561.c        | 84 ++++++++++++++++++++
 hw/drivers/sensors/tsl2561/src/tsl2561_priv.h   |  5 --
 hw/drivers/sensors/tsl2561/src/tsl2561_shell.c  | 24 ++++--
 5 files changed, 112 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/3559c73a/apps/slinky/src/main.c
----------------------------------------------------------------------
diff --git a/apps/slinky/src/main.c b/apps/slinky/src/main.c
index e87aa0e..718d690 100755
--- a/apps/slinky/src/main.c
+++ b/apps/slinky/src/main.c
@@ -47,6 +47,9 @@
 #include <reboot/log_reboot.h>
 #include <os/os_time.h>
 #include <id/id.h>
+#if MYNEWT_VAL(TSL2561_CLI)
+#include <tsl2561/tsl2561.h>
+#endif
 
 #ifdef ARCH_sim
 #include <mcu/mcu_sim.h>
@@ -377,6 +380,10 @@ main(int argc, char **argv)
     }
 #endif
 
+#if MYNEWT_VAL(TSL2561_CLI)
+    tsl2561_shell_init();
+#endif
+
     config_sensor();
 
     /*

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/3559c73a/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h b/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h
index 2f093be..046967f 100644
--- a/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h
+++ b/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h
@@ -189,6 +189,11 @@ int tsl2561_clear_interrupt(void);
 
 int tsl2561_config(struct tsl2561 *, struct tsl2561_cfg *);
 
+#if MYNEWT_VAL(TSL2561_CLI)
+int tsl2561_shell_init(void);
+#endif
+
+
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/3559c73a/hw/drivers/sensors/tsl2561/src/tsl2561.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/src/tsl2561.c b/hw/drivers/sensors/tsl2561/src/tsl2561.c
index 8f90718..c9f7531 100644
--- a/hw/drivers/sensors/tsl2561/src/tsl2561.c
+++ b/hw/drivers/sensors/tsl2561/src/tsl2561.c
@@ -58,6 +58,13 @@
 /* ToDo: Add timer based polling in bg and data ready callback (os_event?) */
 /* ToDo: Move values to struct incl. address to allow multiple instances */
 
+#if MYNEWT_VAL(TSL2561_CLI)
+uint8_t g_tsl2561_gain;
+uint8_t g_tsl2561_integration_time;
+uint8_t g_tsl2561_enabled;
+#endif
+
+
 #if MYNEWT_VAL(TSL2561_STATS)
 /* Define the stats section and records */
 STATS_SECT_START(tsl2561_stat_section)
@@ -217,6 +224,83 @@ err:
     return rc;
 }
 
+#if MYNEWT_VAL(TSL2561_CLI)
+int
+tsl2561_enable(uint8_t state)
+{
+    int rc;
+
+    /* Enable the device by setting the control bit to 0x03 */
+    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_CONTROL,
+                        state ? TSL2561_CONTROL_POWERON :
+                                TSL2561_CONTROL_POWEROFF);
+    if (!rc) {
+        g_tsl2561_enabled = state ? 1 : 0;
+    }
+
+    return rc;
+}
+
+uint8_t
+tsl2561_get_enable (void)
+{
+    return g_tsl2561_enabled;
+}
+
+int
+tsl2561_set_integration_time(uint8_t int_time)
+{
+    int rc;
+
+    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING,
+                        g_tsl2561_integration_time | g_tsl2561_gain);
+    if (rc) {
+        goto error;
+    }
+
+    g_tsl2561_integration_time = int_time;
+
+error:
+    return rc;
+}
+
+uint8_t
+tsl2561_get_integration_time(void)
+{
+    return g_tsl2561_integration_time;
+}
+
+int
+tsl2561_set_gain(uint8_t gain)
+{
+    int rc;
+
+    if ((gain != TSL2561_LIGHT_GAIN_1X) && (gain != TSL2561_LIGHT_GAIN_16X)) {
+        TSL2561_ERR("Invalid gain value\n");
+        rc = EINVAL;
+        goto error;
+    }
+
+    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING,
+                        g_tsl2561_integration_time | gain);
+    if (rc) {
+        goto error;
+    }
+
+    g_tsl2561_gain = gain;
+
+error:
+    return rc;
+}
+
+uint8_t
+tsl2561_get_gain(void)
+{
+    return g_tsl2561_gain;
+}
+#endif
+
+
 int
 tsl2561_get_data(uint16_t *broadband, uint16_t *ir, struct tsl2561 *tsl2561)
 {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/3559c73a/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h b/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h
index 7d92d5f..7cbe66d 100644
--- a/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h
+++ b/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h
@@ -138,11 +138,6 @@ int tsl2561_write16(uint8_t reg, uint16_t value);
 int tsl2561_read8(uint8_t reg, uint8_t *value);
 int tsl2561_read16(uint8_t reg, uint16_t *value);
 
-/* tsl2561_shell.c */
-#if MYNEWT_VAL(TSL2561_CLI)
-int tsl2561_shell_init(void);
-#endif
-
 
 #ifdef __cplusplus
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/3559c73a/hw/drivers/sensors/tsl2561/src/tsl2561_shell.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/src/tsl2561_shell.c b/hw/drivers/sensors/tsl2561/src/tsl2561_shell.c
index c485261..9d6720e 100644
--- a/hw/drivers/sensors/tsl2561/src/tsl2561_shell.c
+++ b/hw/drivers/sensors/tsl2561/src/tsl2561_shell.c
@@ -44,6 +44,9 @@
 #include "tsl2561_priv.h"
 
 #if MYNEWT_VAL(TSL2561_CLI)
+extern uint8_t g_tsl2561_integration_time;
+extern uint8_t g_tsl2561_gain;
+
 static int tsl2561_shell_cmd(int argc, char **argv);
 
 static struct shell_cmd tsl2561_shell_cmd_struct = {
@@ -127,6 +130,7 @@ tsl2561_shell_cmd_read(int argc, char **argv)
     uint16_t samples = 1;
     long val;
     int rc;
+    struct tsl2561 tsl2561;
 
     if (argc > 3) {
         return tsl2561_shell_err_too_many_args(argv[1]);
@@ -141,7 +145,11 @@ tsl2561_shell_cmd_read(int argc, char **argv)
     }
 
     while(samples--) {
-        rc = tsl2561_get_data(&full, &ir);
+
+        tsl2561.cfg.gain = g_tsl2561_gain;
+        tsl2561.cfg.integration_time = g_tsl2561_integration_time;
+
+        rc = tsl2561_get_data(&full, &ir, &tsl2561);
         if (rc != 0) {
             console_printf("Read failed: %d\n", rc);
             return rc;
@@ -177,7 +185,7 @@ tsl2561_shell_cmd_gain(int argc, char **argv)
         if ((val != 1) && (val != 16)) {
             return tsl2561_shell_err_invalid_arg(argv[2]);
         }
-        tsl2561_set_gain(val ? TSL2561_GAIN_16X : TSL2561_GAIN_1X);
+        tsl2561_set_gain(val ? TSL2561_LIGHT_GAIN_16X : TSL2561_LIGHT_GAIN_1X);
     }
 
     return 0;
@@ -197,13 +205,13 @@ tsl2561_shell_cmd_time(int argc, char **argv)
     if (argc == 2) {
         time = tsl2561_get_integration_time();
         switch (time) {
-            case TSL2561_INTEGRATIONTIME_13MS:
+            case TSL2561_LIGHT_ITIME_13MS:
                 console_printf("13\n");
             break;
-            case TSL2561_INTEGRATIONTIME_101MS:
+            case TSL2561_LIGHT_ITIME_101MS:
                 console_printf("101\n");
             break;
-            case TSL2561_INTEGRATIONTIME_402MS:
+            case TSL2561_LIGHT_ITIME_402MS:
                 console_printf("402\n");
             break;
         }
@@ -220,13 +228,13 @@ tsl2561_shell_cmd_time(int argc, char **argv)
         }
         switch(val) {
             case 13:
-                tsl2561_set_integration_time(TSL2561_INTEGRATIONTIME_13MS);
+                tsl2561_set_integration_time(TSL2561_LIGHT_ITIME_13MS);
             break;
             case 101:
-                tsl2561_set_integration_time(TSL2561_INTEGRATIONTIME_101MS);
+                tsl2561_set_integration_time(TSL2561_LIGHT_ITIME_101MS);
             break;
             case 402:
-                tsl2561_set_integration_time(TSL2561_INTEGRATIONTIME_402MS);
+                tsl2561_set_integration_time(TSL2561_LIGHT_ITIME_402MS);
             break;
         }
     }


[17/50] incubator-mynewt-core git commit: Moved shifts outside read48 to allow for differences with mag values

Posted by vi...@apache.org.
Moved shifts outside read48 to allow for differences with mag values


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/9be6bc81
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/9be6bc81
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/9be6bc81

Branch: refs/heads/develop
Commit: 9be6bc81c04e83036bba123cf80a04307799764a
Parents: 68986fb
Author: microbuilder <co...@microbuilder.eu>
Authored: Fri Dec 23 23:55:56 2016 +0100
Committer: microbuilder <co...@microbuilder.eu>
Committed: Fri Dec 23 23:55:56 2016 +0100

----------------------------------------------------------------------
 hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c  | 31 ++++++++++++++------
 .../sensors/lsm303dlhc/src/lsm303dlhc_priv.h    |  1 +
 2 files changed, 23 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9be6bc81/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
index 40978c6..f9c2dee 100644
--- a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
+++ b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
@@ -169,7 +169,7 @@ error:
 }
 
 int
-lsm303dlhc_read48(uint8_t addr, uint8_t reg, int16_t *x, int16_t*y, int16_t *z)
+lsm303dlhc_read48(uint8_t addr, uint8_t reg, uint8_t *buffer)
 {
     int rc;
     uint8_t payload[7] = { reg | 0x80, 0, 0, 0, 0, 0, 0 };
@@ -180,6 +180,9 @@ lsm303dlhc_read48(uint8_t addr, uint8_t reg, int16_t *x, int16_t*y, int16_t *z)
         .buffer = payload
     };
 
+    /* Clear the supplied buffer */
+    memset(buffer, 0, 6);
+
     /* Register write */
     rc = hal_i2c_master_write(MYNEWT_VAL(LSM303DLHC_I2CBUS), &data_struct,
                               OS_TICKS_PER_SEC / 10, 1);
@@ -197,11 +200,6 @@ lsm303dlhc_read48(uint8_t addr, uint8_t reg, int16_t *x, int16_t*y, int16_t *z)
     rc = hal_i2c_master_read(MYNEWT_VAL(LSM303DLHC_I2CBUS), &data_struct,
                              OS_TICKS_PER_SEC / 10, 1);
 
-    /* Shift 12-bit left-aligned accel values into 16-bit int */
-    *x = ((int16_t)(payload[0] | (payload[1] << 8))) >> 4;
-    *y = ((int16_t)(payload[2] | (payload[3] << 8))) >> 4;
-    *z = ((int16_t)(payload[4] | (payload[5] << 8))) >> 4;
-
     if (rc) {
         LSM303DLHC_ERR("Failed to read from 0x%02X:0x%02X\n", addr, reg);
 #if MYNEWT_VAL(LSM303DLHC_STATS)
@@ -210,6 +208,9 @@ lsm303dlhc_read48(uint8_t addr, uint8_t reg, int16_t *x, int16_t*y, int16_t *z)
         goto error;
     }
 
+    /* Copy the I2C results into the supplied buffer */
+    memcpy(buffer, payload, 6);
+
     /* ToDo: Log raw reads */
     // console_printf("0x%04X\n", (uint16_t)payload[0] | ((uint16_t)payload[1] << 8));
 
@@ -316,6 +317,7 @@ lsm303dlhc_sensor_read(struct sensor *sensor, sensor_type_t type,
     int rc;
     int16_t x, y, z;
     float mg_lsb;
+    uint8_t payload[6];
 
     /* If the read isn't looking for accel data, then don't do anything. */
     if (!(type & SENSOR_TYPE_ACCELEROMETER)) {
@@ -326,9 +328,20 @@ lsm303dlhc_sensor_read(struct sensor *sensor, sensor_type_t type,
     lsm = (struct lsm303dlhc *) SENSOR_GET_DEVICE(sensor);
 
     x = y = z = 0;
-    lsm303dlhc_read48(LSM303DLHC_ADDR_ACCEL,
-                      LSM303DLHC_REGISTER_ACCEL_OUT_X_L_A,
-                      &x, &y, &z);
+    rc = lsm303dlhc_read48(LSM303DLHC_ADDR_ACCEL,
+                          LSM303DLHC_REGISTER_ACCEL_OUT_X_L_A,
+                          payload);
+    if (rc != 0) {
+        goto err;
+    }
+
+    /* Shift raw values based on sensor type */
+    if (type & SENSOR_TYPE_ACCELEROMETER) {
+        /* Shift 12-bit left-aligned accel values into 16-bit int */
+        x = ((int16_t)(payload[0] | (payload[1] << 8))) >> 4;
+        y = ((int16_t)(payload[2] | (payload[3] << 8))) >> 4;
+        z = ((int16_t)(payload[4] | (payload[5] << 8))) >> 4;
+    }
 
     /* Determine mg per lsb based on range */
     switch(lsm->cfg.accel_range) {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9be6bc81/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc_priv.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc_priv.h b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc_priv.h
index 5983096..98b9f21 100644
--- a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc_priv.h
+++ b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc_priv.h
@@ -80,6 +80,7 @@ enum lsm303dlhc_registers_mag {
 
 int lsm303dlhc_write8(uint8_t addr, uint8_t reg, uint32_t value);
 int lsm303dlhc_read8(uint8_t addr, uint8_t reg, uint8_t *value);
+int lsm303dlhc_read48(uint8_t addr, uint8_t reg, uint8_t *buffer);
 
 #ifdef __cplusplus
 }


[20/50] incubator-mynewt-core git commit: Added magnetometer to driver

Posted by vi...@apache.org.
Added magnetometer to driver


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/b04fe061
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/b04fe061
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/b04fe061

Branch: refs/heads/develop
Commit: b04fe06170d78cf21d2cc4b039ab94522772143b
Parents: 616f752
Author: microbuilder <co...@microbuilder.eu>
Authored: Thu Dec 29 02:24:20 2016 +0100
Committer: microbuilder <co...@microbuilder.eu>
Committed: Thu Dec 29 02:24:20 2016 +0100

----------------------------------------------------------------------
 .../lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h  |   3 +-
 hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c  | 236 +++++++++++++++----
 2 files changed, 189 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/b04fe061/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h b/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h
index c5e9601..8bc3307 100644
--- a/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h
+++ b/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h
@@ -70,7 +70,8 @@ enum lsm303dlhc_mag_rate {
 struct lsm303dlhc_cfg {
     enum lsm303dlhc_accel_range accel_range;
     enum lsm303dlhc_accel_rate accel_rate;
-    uint16_t sample_itvl;
+    enum lsm303dlhc_mag_gain mag_gain;
+    enum lsm303dlhc_mag_rate mag_rate;
 };
 
 struct lsm303dlhc {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/b04fe061/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
index f9c2dee..b3821e1 100644
--- a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
+++ b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
@@ -27,6 +27,7 @@
 #include "hal/hal_i2c.h"
 #include "sensor/sensor.h"
 #include "sensor/accel.h"
+#include "sensor/mag.h"
 #include "lsm303dlhc/lsm303dlhc.h"
 #include "lsm303dlhc_priv.h"
 
@@ -45,6 +46,13 @@ STATS_SECT_START(lsm303dlhc_stat_section)
     STATS_SECT_ENTRY(samples_acc_4g)
     STATS_SECT_ENTRY(samples_acc_8g)
     STATS_SECT_ENTRY(samples_acc_16g)
+    STATS_SECT_ENTRY(samples_mag_1_3g)
+    STATS_SECT_ENTRY(samples_mag_1_9g)
+    STATS_SECT_ENTRY(samples_mag_2_5g)
+    STATS_SECT_ENTRY(samples_mag_4_0g)
+    STATS_SECT_ENTRY(samples_mag_4_7g)
+    STATS_SECT_ENTRY(samples_mag_5_6g)
+    STATS_SECT_ENTRY(samples_mag_8_1g)
     STATS_SECT_ENTRY(errors)
 STATS_SECT_END
 
@@ -54,6 +62,13 @@ STATS_NAME_START(lsm303dlhc_stat_section)
     STATS_NAME(lsm303dlhc_stat_section, samples_acc_4g)
     STATS_NAME(lsm303dlhc_stat_section, samples_acc_8g)
     STATS_NAME(lsm303dlhc_stat_section, samples_acc_16g)
+    STATS_NAME(lsm303dlhc_stat_section, samples_mag_1_3g)
+    STATS_NAME(lsm303dlhc_stat_section, samples_mag_1_9g)
+    STATS_NAME(lsm303dlhc_stat_section, samples_mag_2_5g)
+    STATS_NAME(lsm303dlhc_stat_section, samples_mag_4_0g)
+    STATS_NAME(lsm303dlhc_stat_section, samples_mag_4_7g)
+    STATS_NAME(lsm303dlhc_stat_section, samples_mag_5_6g)
+    STATS_NAME(lsm303dlhc_stat_section, samples_mag_8_1g)
     STATS_NAME(lsm303dlhc_stat_section, errors)
 STATS_NAME_END(lsm303dlhc_stat_section)
 
@@ -172,7 +187,7 @@ int
 lsm303dlhc_read48(uint8_t addr, uint8_t reg, uint8_t *buffer)
 {
     int rc;
-    uint8_t payload[7] = { reg | 0x80, 0, 0, 0, 0, 0, 0 };
+    uint8_t payload[7] = { reg, 0, 0, 0, 0, 0, 0 };
 
     struct hal_i2c_master_data data_struct = {
         .address = addr,
@@ -258,12 +273,20 @@ lsm303dlhc_init(struct os_dev *dev, void *arg)
         goto err;
     }
 
+    /* Add the accelerometer */
     rc = sensor_set_driver(sensor, SENSOR_TYPE_ACCELEROMETER,
             (struct sensor_driver *) &g_lsm303dlhc_sensor_driver);
     if (rc != 0) {
         goto err;
     }
 
+    /* Add the magnetometer */
+    rc = sensor_set_driver(sensor, SENSOR_TYPE_MAGNETIC_FIELD,
+            (struct sensor_driver *) &g_lsm303dlhc_sensor_driver);
+    if (rc != 0) {
+        goto err;
+    }
+
     rc = sensor_mgr_register(sensor);
     if (rc != 0) {
         goto err;
@@ -279,10 +302,10 @@ lsm303dlhc_config(struct lsm303dlhc *lsm, struct lsm303dlhc_cfg *cfg)
 {
     int rc;
 
-    /* Overwrite the configuration associated with this generic accelleromter. */
+    /* Overwrite the configuration data. */
     memcpy(&lsm->cfg, cfg, sizeof(*cfg));
 
-    /* Set data rate (or power down) and enable XYZ output */
+    /* Set accel data rate (or power down) and enable XYZ output */
     rc = lsm303dlhc_write8(LSM303DLHC_ADDR_ACCEL,
         LSM303DLHC_REGISTER_ACCEL_CTRL_REG1_A,
         lsm->cfg.accel_rate | 0x07);
@@ -290,7 +313,7 @@ lsm303dlhc_config(struct lsm303dlhc *lsm, struct lsm303dlhc_cfg *cfg)
         goto err;
     }
 
-    /* Set scale */
+    /* Set accel scale */
     rc = lsm303dlhc_write8(LSM303DLHC_ADDR_ACCEL,
         LSM303DLHC_REGISTER_ACCEL_CTRL_REG4_A,
         lsm->cfg.accel_range);
@@ -298,6 +321,30 @@ lsm303dlhc_config(struct lsm303dlhc *lsm, struct lsm303dlhc_cfg *cfg)
         goto err;
     }
 
+    /* Enable the magnetomer (set to continuous conversion mode) */
+    rc = lsm303dlhc_write8(LSM303DLHC_ADDR_MAG,
+        LSM303DLHC_REGISTER_MAG_MR_REG_M,
+        0x00);
+    if (rc != 0) {
+        goto err;
+    }
+
+    /* Set mag rate */
+    rc = lsm303dlhc_write8(LSM303DLHC_ADDR_MAG,
+        LSM303DLHC_REGISTER_MAG_CRA_REG_M,
+        lsm->cfg.mag_rate);
+    if (rc != 0) {
+        goto err;
+    }
+
+    /* Set mag gain */
+    rc = lsm303dlhc_write8(LSM303DLHC_ADDR_MAG,
+        LSM303DLHC_REGISTER_MAG_CRB_REG_M,
+        lsm->cfg.mag_gain);
+    if (rc != 0) {
+        goto err;
+    }
+
 err:
     return (rc);
 }
@@ -314,77 +361,167 @@ lsm303dlhc_sensor_read(struct sensor *sensor, sensor_type_t type,
 {
     struct lsm303dlhc *lsm;
     struct sensor_accel_data sad;
+    struct sensor_mag_data smd;
     int rc;
     int16_t x, y, z;
     float mg_lsb;
+    int16_t gauss_lsb_xy;
+    int16_t gauss_lsb_z;
     uint8_t payload[6];
 
-    /* If the read isn't looking for accel data, then don't do anything. */
-    if (!(type & SENSOR_TYPE_ACCELEROMETER)) {
+    /* If the read isn't looking for accel or mag data, don't do anything. */
+    if (!(type & SENSOR_TYPE_ACCELEROMETER) &&
+       (!(type & SENSOR_TYPE_MAGNETIC_FIELD))) {
         rc = SYS_EINVAL;
         goto err;
     }
 
     lsm = (struct lsm303dlhc *) SENSOR_GET_DEVICE(sensor);
 
-    x = y = z = 0;
-    rc = lsm303dlhc_read48(LSM303DLHC_ADDR_ACCEL,
-                          LSM303DLHC_REGISTER_ACCEL_OUT_X_L_A,
-                          payload);
-    if (rc != 0) {
-        goto err;
-    }
-
-    /* Shift raw values based on sensor type */
+    /* Get a new accelerometer sample */
     if (type & SENSOR_TYPE_ACCELEROMETER) {
+        x = y = z = 0;
+        rc = lsm303dlhc_read48(LSM303DLHC_ADDR_ACCEL,
+                              LSM303DLHC_REGISTER_ACCEL_OUT_X_L_A | 0x80,
+                              payload);
+        if (rc != 0) {
+            goto err;
+        }
+
         /* Shift 12-bit left-aligned accel values into 16-bit int */
         x = ((int16_t)(payload[0] | (payload[1] << 8))) >> 4;
         y = ((int16_t)(payload[2] | (payload[3] << 8))) >> 4;
         z = ((int16_t)(payload[4] | (payload[5] << 8))) >> 4;
-    }
 
-    /* Determine mg per lsb based on range */
-    switch(lsm->cfg.accel_range) {
-        case LSM303DLHC_ACCEL_RANGE_2:
+        /* Determine mg per lsb based on range */
+        switch(lsm->cfg.accel_range) {
+            case LSM303DLHC_ACCEL_RANGE_2:
 #if MYNEWT_VAL(LSM303DLHC_STATS)
-            STATS_INC(g_lsm303dlhcstats, samples_acc_2g);
+                STATS_INC(g_lsm303dlhcstats, samples_acc_2g);
 #endif
-            mg_lsb = 0.001F;
-            break;
-        case LSM303DLHC_ACCEL_RANGE_4:
+                mg_lsb = 0.001F;
+                break;
+            case LSM303DLHC_ACCEL_RANGE_4:
 #if MYNEWT_VAL(LSM303DLHC_STATS)
-            STATS_INC(g_lsm303dlhcstats, samples_acc_4g);
+                STATS_INC(g_lsm303dlhcstats, samples_acc_4g);
 #endif
-            mg_lsb = 0.002F;
-            break;
-        case LSM303DLHC_ACCEL_RANGE_8:
+                mg_lsb = 0.002F;
+                break;
+            case LSM303DLHC_ACCEL_RANGE_8:
 #if MYNEWT_VAL(LSM303DLHC_STATS)
-            STATS_INC(g_lsm303dlhcstats, samples_acc_8g);
+                STATS_INC(g_lsm303dlhcstats, samples_acc_8g);
 #endif
-            mg_lsb = 0.004F;
-            break;
-        case LSM303DLHC_ACCEL_RANGE_16:
+                mg_lsb = 0.004F;
+                break;
+            case LSM303DLHC_ACCEL_RANGE_16:
 #if MYNEWT_VAL(LSM303DLHC_STATS)
-            STATS_INC(g_lsm303dlhcstats, samples_acc_16g);
+                STATS_INC(g_lsm303dlhcstats, samples_acc_16g);
 #endif
-            mg_lsb = 0.012F;
-            break;
-        default:
-            LSM303DLHC_ERR("Unknown accel range: 0x%02X. Assuming +/-2G.\n",
-                lsm->cfg.accel_range);
-            mg_lsb = 0.001F;
-            break;
+                mg_lsb = 0.012F;
+                break;
+            default:
+                LSM303DLHC_ERR("Unknown accel range: 0x%02X. Assuming +/-2G.\n",
+                    lsm->cfg.accel_range);
+                mg_lsb = 0.001F;
+                break;
+        }
+
+        /* Convert from mg to Earth gravity in m/s^2 */
+        sad.sad_x = (float)x * mg_lsb * 9.80665F;
+        sad.sad_y = (float)y * mg_lsb * 9.80665F;
+        sad.sad_z = (float)z * mg_lsb * 9.80665F;
+
+        /* Call data function */
+        rc = data_func(sensor, data_arg, &sad);
+        if (rc != 0) {
+            goto err;
+        }
     }
 
-    /* Convert from mg to Earth gravity in m/s^2 */
-    sad.sad_x = (float)x * mg_lsb * 9.80665F;
-    sad.sad_y = (float)y * mg_lsb * 9.80665F;
-    sad.sad_z = (float)z * mg_lsb * 9.80665F;
-
-    /* Call data function */
-    rc = data_func(sensor, data_arg, &sad);
-    if (rc != 0) {
-        goto err;
+    /* Get a new magnetometer sample */
+    if (type & SENSOR_TYPE_MAGNETIC_FIELD) {
+        x = y = z = 0;
+        rc = lsm303dlhc_read48(LSM303DLHC_ADDR_MAG,
+                              LSM303DLHC_REGISTER_MAG_OUT_X_H_M,
+                              payload);
+        if (rc != 0) {
+            goto err;
+        }
+
+        /* Shift mag values into 16-bit int */
+        x = (int16_t)(payload[1] | ((int16_t)payload[0] << 8));
+        y = (int16_t)(payload[3] | ((int16_t)payload[2] << 8));
+        z = (int16_t)(payload[5] | ((int16_t)payload[4] << 8));
+
+        /* Determine gauss per lsb based on gain */
+        switch (lsm->cfg.mag_gain) {
+            case LSM303DLHC_MAG_GAIN_1_3:
+#if MYNEWT_VAL(LSM303DLHC_STATS)
+                STATS_INC(g_lsm303dlhcstats, samples_mag_1_3g);
+#endif
+                gauss_lsb_xy = 1100;
+                gauss_lsb_z = 980;
+                break;
+            case LSM303DLHC_MAG_GAIN_1_9:
+#if MYNEWT_VAL(LSM303DLHC_STATS)
+                STATS_INC(g_lsm303dlhcstats, samples_mag_1_9g);
+#endif
+                gauss_lsb_xy = 855;
+                gauss_lsb_z = 760;
+                break;
+            case LSM303DLHC_MAG_GAIN_2_5:
+#if MYNEWT_VAL(LSM303DLHC_STATS)
+                STATS_INC(g_lsm303dlhcstats, samples_mag_2_5g);
+#endif
+                gauss_lsb_xy = 670;
+                gauss_lsb_z = 600;
+                break;
+            case LSM303DLHC_MAG_GAIN_4_0:
+#if MYNEWT_VAL(LSM303DLHC_STATS)
+                STATS_INC(g_lsm303dlhcstats, samples_mag_4_0g);
+#endif
+                gauss_lsb_xy = 450;
+                gauss_lsb_z = 400;
+                break;
+            case LSM303DLHC_MAG_GAIN_4_7:
+#if MYNEWT_VAL(LSM303DLHC_STATS)
+                STATS_INC(g_lsm303dlhcstats, samples_mag_4_7g);
+#endif
+                gauss_lsb_xy = 400;
+                gauss_lsb_z = 355;
+                break;
+            case LSM303DLHC_MAG_GAIN_5_6:
+#if MYNEWT_VAL(LSM303DLHC_STATS)
+                STATS_INC(g_lsm303dlhcstats, samples_mag_5_6g);
+#endif
+                gauss_lsb_xy = 330;
+                gauss_lsb_z = 295;
+                break;
+            case LSM303DLHC_MAG_GAIN_8_1:
+#if MYNEWT_VAL(LSM303DLHC_STATS)
+                STATS_INC(g_lsm303dlhcstats, samples_mag_8_1g);
+#endif
+                gauss_lsb_xy = 230;
+                gauss_lsb_z = 205;
+                break;
+            default:
+                LSM303DLHC_ERR("Unknown mag gain: 0x%02X. Assuming +/-1.3g.\n",
+                    lsm->cfg.mag_gain);
+                gauss_lsb_xy = 1100;
+                gauss_lsb_z = 980;
+                break;
+        }
+
+        /* Convert from gauss to micro Tesla */
+        smd.smd_x = (float)x / gauss_lsb_xy * 100.0F;
+        smd.smd_y = (float)y / gauss_lsb_xy * 100.0F;
+        smd.smd_z = (float)z / gauss_lsb_z * 100.0F;
+
+        /* Call data function */
+        rc = data_func(sensor, data_arg, &smd);
+        if (rc != 0) {
+            goto err;
+        }
     }
 
     return (0);
@@ -398,7 +535,8 @@ lsm303dlhc_sensor_get_config(struct sensor *sensor, sensor_type_t type,
 {
     int rc;
 
-    if (type != SENSOR_TYPE_ACCELEROMETER) {
+    if ((type != SENSOR_TYPE_ACCELEROMETER) &&
+        (type != SENSOR_TYPE_MAGNETIC_FIELD)) {
         rc = SYS_EINVAL;
         goto err;
     }


[14/50] incubator-mynewt-core git commit: Merge branch 'microbuilder_sensors_branch' into sensors_branch

Posted by vi...@apache.org.
Merge branch 'microbuilder_sensors_branch' into sensors_branch


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/7b7941e9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/7b7941e9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/7b7941e9

Branch: refs/heads/develop
Commit: 7b7941e97140baa05aca5d058f7cf55853de063e
Parents: 7fdea47 f720b6e
Author: Sterling Hughes <st...@apache.org>
Authored: Thu Dec 22 11:12:12 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Thu Dec 22 11:12:12 2016 -0800

----------------------------------------------------------------------
 .../lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h  |  90 +++++
 hw/drivers/sensors/lsm303dlhc/pkg.yml           |  24 ++
 hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c  | 398 +++++++++++++++++++
 .../sensors/lsm303dlhc/src/lsm303dlhc_priv.h    |  88 ++++
 hw/drivers/sensors/lsm303dlhc/syscfg.yml        |  32 ++
 5 files changed, 632 insertions(+)
----------------------------------------------------------------------



[07/50] incubator-mynewt-core git commit: oic; reverse the order in which fragments are created from original packet. This allows os_mbuf_adj() of original packet to free unused mbufs, when possible.

Posted by vi...@apache.org.
oic; reverse the order in which fragments are created from original
packet. This allows os_mbuf_adj() of original packet to free
unused mbufs, when possible.


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/c8c06dd1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/c8c06dd1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/c8c06dd1

Branch: refs/heads/develop
Commit: c8c06dd14d0adff1f6dc9f61186030d52edc0323
Parents: 7dca12c
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Fri Dec 16 11:08:00 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Sun Dec 18 13:56:17 2016 -0800

----------------------------------------------------------------------
 net/oic/src/port/mynewt/ble_adaptor.c | 16 +++++++---------
 net/oic/src/port/oc_connectivity.h    |  3 +--
 2 files changed, 8 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/c8c06dd1/net/oic/src/port/mynewt/ble_adaptor.c
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/ble_adaptor.c b/net/oic/src/port/mynewt/ble_adaptor.c
index 23742b9..39ceac9 100644
--- a/net/oic/src/port/mynewt/ble_adaptor.c
+++ b/net/oic/src/port/mynewt/ble_adaptor.c
@@ -278,25 +278,22 @@ oc_ble_frag(struct os_mbuf *m, uint16_t mtu)
         STAILQ_NEXT(pkt, omp_next) = NULL;
         return 0;
     }
-    off = mtu;
+    off = pkt->omp_len % mtu;
 
-    while (off < OS_MBUF_PKTLEN(m)) {
+    while (off > mtu) {
         n = os_msys_get_pkthdr(mtu, 0);
         if (!n) {
             goto err;
         }
-
+        STAILQ_NEXT(OS_MBUF_PKTHDR(n), omp_next) = STAILQ_NEXT(pkt, omp_next);
         STAILQ_NEXT(pkt, omp_next) = OS_MBUF_PKTHDR(n);
-        pkt = STAILQ_NEXT(pkt, omp_next);
 
-        blk = OS_MBUF_PKTLEN(m) - off;
-        if (blk > mtu) {
-            blk = mtu;
-        }
+        blk = pkt->omp_len - off;
         if (os_mbuf_appendfrom(n, m, off, blk)) {
             goto err;
         }
-        off += blk;
+        off -= blk;
+        os_mbuf_adj(m, -blk);
     }
     os_mbuf_adj(m, mtu - OS_MBUF_PKTLEN(m));
     return 0;
@@ -334,6 +331,7 @@ oc_send_buffer_gatt(struct os_mbuf *m)
     STATS_INCN(oc_ble_stats, obytes, OS_MBUF_PKTLEN(m));
 
     mtu = ble_att_mtu(oe->bt_addr.conn_handle);
+    assert(mtu > 4);
     mtu -= 3; /* # of bytes for ATT notification base */
 
     if (oc_ble_frag(m, mtu)) {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/c8c06dd1/net/oic/src/port/oc_connectivity.h
----------------------------------------------------------------------
diff --git a/net/oic/src/port/oc_connectivity.h b/net/oic/src/port/oc_connectivity.h
index ea44e3e..7f50a6b 100644
--- a/net/oic/src/port/oc_connectivity.h
+++ b/net/oic/src/port/oc_connectivity.h
@@ -41,9 +41,8 @@ typedef struct oc_endpoint {
         IPSP = 1 << 2,
         MULTICAST = 1 << 3,
         SECURED = 1 << 4,
-        SERIAL = 1 <<5,
+        SERIAL = 1 << 5,
     } flags;
-
     union {
         oc_ipv6_addr_t ipv6_addr;
         oc_le_addr_t bt_addr;


[47/50] incubator-mynewt-core git commit: SensorAPI - Add test app

Posted by vi...@apache.org.
SensorAPI - Add test app

- Add test app: currently is same as Slinky with some more extra code.
- revert slinky now that a seperate app is there


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/60cd598c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/60cd598c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/60cd598c

Branch: refs/heads/develop
Commit: 60cd598c8106fac4f318253a08bc0405b49a79a8
Parents: 8d1bde9
Author: Vipul Rahane <vi...@apache.org>
Authored: Thu Feb 23 14:29:58 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Thu Feb 23 14:29:58 2017 -0800

----------------------------------------------------------------------
 apps/sensors_test/pkg.yml    |  51 +++++
 apps/sensors_test/src/main.c | 437 ++++++++++++++++++++++++++++++++++++++
 apps/sensors_test/syscfg.yml |  57 +++++
 apps/slinky/pkg.yml          |   5 -
 apps/slinky/src/main.c       | 143 -------------
 5 files changed, 545 insertions(+), 148 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/60cd598c/apps/sensors_test/pkg.yml
----------------------------------------------------------------------
diff --git a/apps/sensors_test/pkg.yml b/apps/sensors_test/pkg.yml
new file mode 100644
index 0000000..406ad30
--- /dev/null
+++ b/apps/sensors_test/pkg.yml
@@ -0,0 +1,51 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+pkg.name: apps/sensors_test
+pkg.type: app
+pkg.description: "Example application which uses a variety of mynewt features."
+pkg.author: "Apache Mynewt <de...@mynewt.incubator.apache.org>"
+pkg.homepage: "http://mynewt.apache.org/"
+pkg.keywords:
+
+pkg.deps:
+    - test/flash_test
+    - mgmt/imgmgr
+    - mgmt/newtmgr
+    - mgmt/newtmgr/transport/nmgr_shell
+    - kernel/os
+    - hw/sensor
+    - hw/drivers/sensors/sim
+    - hw/drivers/sensors/lsm303dlhc
+    - hw/drivers/sensors/tsl2561
+    - hw/drivers/sensors/bno055
+    - boot/bootutil
+    - sys/shell
+    - sys/config
+    - sys/console/full
+    - sys/id
+    - sys/log/full
+    - sys/stats/full
+    - boot/split
+
+pkg.deps.CONFIG_NFFS:
+    - fs/nffs
+
+pkg.deps.CONFIG_FCB:
+    - fs/fcb

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/60cd598c/apps/sensors_test/src/main.c
----------------------------------------------------------------------
diff --git a/apps/sensors_test/src/main.c b/apps/sensors_test/src/main.c
new file mode 100755
index 0000000..d17c61a
--- /dev/null
+++ b/apps/sensors_test/src/main.c
@@ -0,0 +1,437 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "syscfg/syscfg.h"
+#include "sysinit/sysinit.h"
+#include "sysflash/sysflash.h"
+#include <os/os.h>
+#include <bsp/bsp.h>
+#include <hal/hal_gpio.h>
+#include <hal/hal_flash.h>
+#include <console/console.h>
+#include <shell/shell.h>
+#include <log/log.h>
+#include <stats/stats.h>
+#include <config/config.h>
+#include <sensor/sensor.h>
+#include <lsm303dlhc/lsm303dlhc.h>
+#include <tsl2561/tsl2561.h>
+#include <bno055/bno055.h>
+#include "flash_map/flash_map.h"
+#include <hal/hal_system.h>
+#if MYNEWT_VAL(SPLIT_LOADER)
+#include "split/split.h"
+#endif
+#include <newtmgr/newtmgr.h>
+#include <bootutil/image.h>
+#include <bootutil/bootutil.h>
+#include <imgmgr/imgmgr.h>
+#include <assert.h>
+#include <string.h>
+#include <flash_test/flash_test.h>
+#include <reboot/log_reboot.h>
+#include <os/os_time.h>
+#include <id/id.h>
+
+#ifdef ARCH_sim
+#include <mcu/mcu_sim.h>
+#endif
+
+/* Task 1 */
+#define TASK1_PRIO (8)
+#define TASK1_STACK_SIZE    OS_STACK_ALIGN(192)
+#define MAX_CBMEM_BUF 600
+static struct os_task task1;
+static volatile int g_task1_loops;
+
+/* Task 2 */
+#define TASK2_PRIO (9)
+#define TASK2_STACK_SIZE    OS_STACK_ALIGN(64)
+static struct os_task task2;
+
+static struct log my_log;
+
+static volatile int g_task2_loops;
+
+/* Global test semaphore */
+static struct os_sem g_test_sem;
+
+/* For LED toggling */
+static int g_led_pin;
+
+STATS_SECT_START(gpio_stats)
+STATS_SECT_ENTRY(toggles)
+STATS_SECT_END
+
+static STATS_SECT_DECL(gpio_stats) g_stats_gpio_toggle;
+
+static STATS_NAME_START(gpio_stats)
+STATS_NAME(gpio_stats, toggles)
+STATS_NAME_END(gpio_stats)
+
+static char *test_conf_get(int argc, char **argv, char *val, int max_len);
+static int test_conf_set(int argc, char **argv, char *val);
+static int test_conf_commit(void);
+static int test_conf_export(void (*export_func)(char *name, char *val),
+  enum conf_export_tgt tgt);
+
+static struct conf_handler test_conf_handler = {
+    .ch_name = "test",
+    .ch_get = test_conf_get,
+    .ch_set = test_conf_set,
+    .ch_commit = test_conf_commit,
+    .ch_export = test_conf_export
+};
+
+static uint8_t test8;
+static uint8_t test8_shadow;
+static char test_str[32];
+static uint32_t cbmem_buf[MAX_CBMEM_BUF];
+static struct cbmem cbmem;
+
+static char *
+test_conf_get(int argc, char **argv, char *buf, int max_len)
+{
+    if (argc == 1) {
+        if (!strcmp(argv[0], "8")) {
+            return conf_str_from_value(CONF_INT8, &test8, buf, max_len);
+        } else if (!strcmp(argv[0], "str")) {
+            return test_str;
+        }
+    }
+    return NULL;
+}
+
+static int
+test_conf_set(int argc, char **argv, char *val)
+{
+    if (argc == 1) {
+        if (!strcmp(argv[0], "8")) {
+            return CONF_VALUE_SET(val, CONF_INT8, test8_shadow);
+        } else if (!strcmp(argv[0], "str")) {
+            return CONF_VALUE_SET(val, CONF_STRING, test_str);
+        }
+    }
+    return OS_ENOENT;
+}
+
+static int
+test_conf_commit(void)
+{
+    test8 = test8_shadow;
+
+    return 0;
+}
+
+static int
+test_conf_export(void (*func)(char *name, char *val), enum conf_export_tgt tgt)
+{
+    char buf[4];
+
+    conf_str_from_value(CONF_INT8, &test8, buf, sizeof(buf));
+    func("test/8", buf);
+    func("test/str", test_str);
+    return 0;
+}
+
+static void
+task1_handler(void *arg)
+{
+    struct os_task *t;
+    int prev_pin_state, curr_pin_state;
+    struct image_version ver;
+
+    /* Set the led pin for the E407 devboard */
+    g_led_pin = LED_BLINK_PIN;
+    hal_gpio_init_out(g_led_pin, 1);
+
+    if (imgr_my_version(&ver) == 0) {
+        console_printf("\nSensors Test %u.%u.%u.%u\n",
+          ver.iv_major, ver.iv_minor, ver.iv_revision,
+          (unsigned int)ver.iv_build_num);
+    } else {
+        console_printf("\nSensors Test\n");
+    }
+
+    while (1) {
+        t = os_sched_get_current_task();
+        assert(t->t_func == task1_handler);
+
+        ++g_task1_loops;
+
+        /* Wait one second */
+        os_time_delay(OS_TICKS_PER_SEC);
+
+        /* Toggle the LED */
+        prev_pin_state = hal_gpio_read(g_led_pin);
+        curr_pin_state = hal_gpio_toggle(g_led_pin);
+        LOG_INFO(&my_log, LOG_MODULE_DEFAULT, "GPIO toggle from %u to %u",
+            prev_pin_state, curr_pin_state);
+        STATS_INC(g_stats_gpio_toggle, toggles);
+
+        /* Release semaphore to task 2 */
+        os_sem_release(&g_test_sem);
+    }
+}
+
+static void
+task2_handler(void *arg)
+{
+    struct os_task *t;
+
+    while (1) {
+        /* just for debug; task 2 should be the running task */
+        t = os_sched_get_current_task();
+        assert(t->t_func == task2_handler);
+
+        /* Increment # of times we went through task loop */
+        ++g_task2_loops;
+
+        /* Wait for semaphore from ISR */
+        os_sem_pend(&g_test_sem, OS_TIMEOUT_NEVER);
+    }
+}
+
+/**
+ * init_tasks
+ *
+ * Called by main.c after sysinit(). This function performs initializations
+ * that are required before tasks are running.
+ *
+ * @return int 0 success; error otherwise.
+ */
+static void
+init_tasks(void)
+{
+    os_stack_t *pstack;
+
+    /* Initialize global test semaphore */
+    os_sem_init(&g_test_sem, 0);
+
+    pstack = malloc(sizeof(os_stack_t)*TASK1_STACK_SIZE);
+    assert(pstack);
+
+    os_task_init(&task1, "task1", task1_handler, NULL,
+            TASK1_PRIO, OS_WAIT_FOREVER, pstack, TASK1_STACK_SIZE);
+
+    pstack = malloc(sizeof(os_stack_t)*TASK2_STACK_SIZE);
+    assert(pstack);
+
+    os_task_init(&task2, "task2", task2_handler, NULL,
+            TASK2_PRIO, OS_WAIT_FOREVER, pstack, TASK2_STACK_SIZE);
+}
+
+#if !ARCH_sim
+static int
+config_sensor(void)
+{
+    struct os_dev *dev;
+    int rc;
+
+#if MYNEWT_VAL(TSL2561_PRESENT)
+    struct tsl2561_cfg tslcfg;
+
+    dev = (struct os_dev *) os_dev_open("light0", OS_TIMEOUT_NEVER, NULL);
+    assert(dev != NULL);
+    rc = tsl2561_init(dev, NULL);
+    if (rc) {
+        os_dev_close(dev);
+        goto err;
+    }
+
+    /* Gain set to 1X and Inetgration time set to 13ms */
+    tslcfg.gain = TSL2561_LIGHT_GAIN_1X;
+    tslcfg.integration_time = TSL2561_LIGHT_ITIME_13MS;
+
+    rc = tsl2561_config((struct tsl2561 *)dev, &tslcfg);
+    if (rc) {
+        os_dev_close(dev);
+        goto err;
+    }
+    os_dev_close(dev);
+#endif
+
+#if MYNEWT_VAL(LSM303DLHC_PRESENT)
+    struct lsm303dlhc_cfg lsmcfg;
+
+    dev = (struct os_dev *) os_dev_open("accel0", OS_TIMEOUT_NEVER, NULL);
+    assert(dev != NULL);
+
+    rc = lsm303dlhc_init(dev, NULL);
+    if (rc) {
+        os_dev_close(dev);
+        goto err;
+    }
+
+    /* read once per sec.  API should take this value in ms. */
+    lsmcfg.accel_rate = LSM303DLHC_ACCEL_RATE_1;
+    lsmcfg.accel_range = LSM303DLHC_ACCEL_RANGE_2;
+
+    rc = lsm303dlhc_config((struct lsm303dlhc *) dev, &lsmcfg);
+    if (rc) {
+        os_dev_close(dev);
+        goto err;
+    }
+    os_dev_close(dev);
+#endif
+
+#if MYNEWT_VAL(BNO055_PRESENT)
+    struct bno055_cfg bcfg;
+
+    dev = (struct os_dev *) os_dev_open("accel1", OS_TIMEOUT_NEVER, NULL);
+    assert(dev != NULL);
+
+    rc = bno055_init(dev, NULL);
+    if (rc) {
+        os_dev_close(dev);
+        assert(0);
+        goto err;
+    }
+
+    bcfg.bc_units = BNO055_ACC_UNIT_MS2   | BNO055_ANGRATE_UNIT_DPS |
+                  BNO055_EULER_UNIT_DEG | BNO055_TEMP_UNIT_DEGC   |
+                  BNO055_DO_FORMAT_ANDROID;
+
+    bcfg.bc_opr_mode = BNO055_OPR_MODE_ACCONLY;
+
+    bcfg.bc_pwr_mode = BNO055_PWR_MODE_NORMAL;
+
+    rc = bno055_config((struct bno055 *) dev, &bcfg);
+    if (rc) {
+        os_dev_close(dev);
+        goto err;
+    }
+    os_dev_close(dev);
+#endif
+
+    return (0);
+err:
+    return rc;
+}
+
+#endif
+
+#ifdef ARCH_sim
+static int
+config_sensor(void)
+{
+    struct os_dev *dev;
+    struct cfg;
+    int rc;
+
+    dev = (struct os_dev *) os_dev_open("simaccel0", OS_TIMEOUT_NEVER, NULL);
+    assert(dev != NULL);
+
+    rc = sim_accel_init(dev, NULL);
+    if (rc != 0) {
+        os_dev_close(dev);
+        goto err;
+    }
+
+    cfg.sac_nr_samples = 10;
+    cfg.sac_nr_axises = 1;
+    /* read once per sec.  API should take this value in ms. */
+    cfg.sac_sample_itvl = OS_TICKS_PER_SEC;
+
+    rc = sim_accel_config((struct sim_accel *) dev, &cfg);
+    if (rc != 0) {
+        os_dev_close(dev);
+        goto err;
+    }
+
+    os_dev_close(dev);
+
+    return (0);
+err:
+    return (rc);
+}
+#endif
+
+/**
+ * main
+ *
+ * The main task for the project. This function initializes the packages, calls
+ * init_tasks to initialize additional tasks (and possibly other objects),
+ * then starts serving events from default event queue.
+ *
+ * @return int NOTE: this function should never return!
+ */
+int
+main(int argc, char **argv)
+{
+    int rc;
+
+#ifdef ARCH_sim
+    mcu_sim_parse_args(argc, argv);
+#endif
+
+    sysinit();
+
+    rc = conf_register(&test_conf_handler);
+    assert(rc == 0);
+
+    cbmem_init(&cbmem, cbmem_buf, MAX_CBMEM_BUF);
+    log_register("log", &my_log, &log_cbmem_handler, &cbmem, LOG_SYSLEVEL);
+
+    stats_init(STATS_HDR(g_stats_gpio_toggle),
+               STATS_SIZE_INIT_PARMS(g_stats_gpio_toggle, STATS_SIZE_32),
+               STATS_NAME_INIT_PARMS(gpio_stats));
+
+    stats_register("gpio_toggle", STATS_HDR(g_stats_gpio_toggle));
+
+    flash_test_init();
+
+    conf_load();
+
+    log_reboot(hal_reset_cause());
+
+    init_tasks();
+
+    /* If this app is acting as the loader in a split image setup, jump into
+     * the second stage application instead of starting the OS.
+     */
+#if MYNEWT_VAL(SPLIT_LOADER)
+    {
+        void *entry;
+        rc = split_app_go(&entry, true);
+        if(rc == 0) {
+            hal_system_restart(entry);
+        }
+    }
+#endif
+
+#if MYNEWT_VAL(TSL2561_CLI)
+    tsl2561_shell_init();
+#endif
+
+#if MYNEWT_VAL(BNO055_CLI)
+    bno055_shell_init();
+#endif
+
+    config_sensor();
+
+    /*
+     * As the last thing, process events from default event queue.
+     */
+    while (1) {
+        os_eventq_run(os_eventq_dflt_get());
+    }
+
+    return (0);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/60cd598c/apps/sensors_test/syscfg.yml
----------------------------------------------------------------------
diff --git a/apps/sensors_test/syscfg.yml b/apps/sensors_test/syscfg.yml
new file mode 100644
index 0000000..5507f28
--- /dev/null
+++ b/apps/sensors_test/syscfg.yml
@@ -0,0 +1,57 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# Package: apps/sensors_test
+
+syscfg.vals:
+    # Enable the shell task.
+    SHELL_TASK: 1
+
+    # Include names for statistics.
+    STATS_NAMES: 1
+
+    # Log reboot messages to a flash circular buffer.
+    REBOOT_LOG_FCB: 1
+    LOG_FCB: 1
+
+    CONFIG_FCB: 1
+
+    # Enable shell commands.
+    STATS_CLI: 1
+    LOG_CLI: 1
+    CONFIG_CLI: 1
+
+    # Enable newtmgr commands.
+    STATS_NEWTMGR: 1
+    LOG_NEWTMGR: 1
+    CONFIG_NEWTMGR: 1
+
+    TSL2561_CLI: 1
+    BNO055_CLI: 1
+
+syscfg.defs:
+    TSL2561_PRESENT:
+        description: 'TSL2561 is present'
+        value : 1
+    LSM303DLHC_PRESENT:
+        description: 'LSM303 is present'
+        value : 1
+    BNO055_PRESENT:
+        description: 'BNO055 is present'
+        value : 1
+

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/60cd598c/apps/slinky/pkg.yml
----------------------------------------------------------------------
diff --git a/apps/slinky/pkg.yml b/apps/slinky/pkg.yml
index db9cc10..3159cb9 100644
--- a/apps/slinky/pkg.yml
+++ b/apps/slinky/pkg.yml
@@ -30,11 +30,6 @@ pkg.deps:
     - mgmt/newtmgr
     - mgmt/newtmgr/transport/nmgr_shell
     - kernel/os
-    - hw/sensor
-    - hw/drivers/sensors/sim
-    - hw/drivers/sensors/lsm303dlhc
-    - hw/drivers/sensors/tsl2561
-    - hw/drivers/sensors/bno055
     - boot/bootutil
     - sys/shell
     - sys/config

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/60cd598c/apps/slinky/src/main.c
----------------------------------------------------------------------
diff --git a/apps/slinky/src/main.c b/apps/slinky/src/main.c
index 0abdcc6..7ab13d6 100755
--- a/apps/slinky/src/main.c
+++ b/apps/slinky/src/main.c
@@ -29,10 +29,6 @@
 #include <log/log.h>
 #include <stats/stats.h>
 #include <config/config.h>
-#include <sensor/sensor.h>
-#include <lsm303dlhc/lsm303dlhc.h>
-#include <tsl2561/tsl2561.h>
-#include <bno055/bno055.h>
 #include "flash_map/flash_map.h"
 #include <hal/hal_system.h>
 #if MYNEWT_VAL(SPLIT_LOADER)
@@ -237,133 +233,6 @@ init_tasks(void)
             TASK2_PRIO, OS_WAIT_FOREVER, pstack, TASK2_STACK_SIZE);
 }
 
-#if !ARCH_sim
-static int
-config_sensor(void)
-{
-    struct os_dev *dev;
-    int rc;
-
-#if MYNEWT_VAL(TSL2561_PRESENT)
-    struct tsl2561_cfg tslcfg;
-
-    dev = (struct os_dev *) os_dev_open("light0", OS_TIMEOUT_NEVER, NULL);
-    assert(dev != NULL);
-    rc = tsl2561_init(dev, NULL);
-    if (rc) {
-        os_dev_close(dev);
-        goto err;
-    }
-
-    /* Gain set to 1X and Inetgration time set to 13ms */
-    tslcfg.gain = TSL2561_LIGHT_GAIN_1X;
-    tslcfg.integration_time = TSL2561_LIGHT_ITIME_13MS;
-
-    rc = tsl2561_config((struct tsl2561 *)dev, &tslcfg);
-    if (rc) {
-        os_dev_close(dev);
-        goto err;
-    }
-    os_dev_close(dev);
-#endif
-
-#if MYNEWT_VAL(LSM303DLHC_PRESENT)
-    struct lsm303dlhc_cfg lsmcfg;
-
-    dev = (struct os_dev *) os_dev_open("accel0", OS_TIMEOUT_NEVER, NULL);
-    assert(dev != NULL);
-
-    rc = lsm303dlhc_init(dev, NULL);
-    if (rc) {
-        os_dev_close(dev);
-        goto err;
-    }
-
-    /* read once per sec.  API should take this value in ms. */
-    lsmcfg.accel_rate = LSM303DLHC_ACCEL_RATE_1;
-    lsmcfg.accel_range = LSM303DLHC_ACCEL_RANGE_2;
-
-    rc = lsm303dlhc_config((struct lsm303dlhc *) dev, &lsmcfg);
-    if (rc) {
-        os_dev_close(dev);
-        goto err;
-    }
-    os_dev_close(dev);
-#endif
-
-#if MYNEWT_VAL(BNO055_PRESENT)
-    struct bno055_cfg bcfg;
-
-    dev = (struct os_dev *) os_dev_open("accel1", OS_TIMEOUT_NEVER, NULL);
-    assert(dev != NULL);
-
-    rc = bno055_init(dev, NULL);
-    if (rc) {
-        os_dev_close(dev);
-        assert(0);
-        goto err;
-    }
-
-    bcfg.bc_units = BNO055_ACC_UNIT_MS2   | BNO055_ANGRATE_UNIT_DPS |
-                  BNO055_EULER_UNIT_DEG | BNO055_TEMP_UNIT_DEGC   |
-                  BNO055_DO_FORMAT_ANDROID;
-
-    bcfg.bc_opr_mode = BNO055_OPR_MODE_ACCONLY;
-
-    bcfg.bc_pwr_mode = BNO055_PWR_MODE_NORMAL;
-
-    rc = bno055_config((struct bno055 *) dev, &bcfg);
-    if (rc) {
-        os_dev_close(dev);
-        //assert(0);
-        goto err;
-    }
-    os_dev_close(dev);
-#endif
-
-    return (0);
-err:
-    return rc;
-}
-
-#endif
-
-#ifdef ARCH_sim
-static int
-config_sensor(void)
-{
-    struct os_dev *dev;
-    struct cfg;
-    int rc;
-
-    dev = (struct os_dev *) os_dev_open("simaccel0", OS_TIMEOUT_NEVER, NULL);
-    assert(dev != NULL);
-
-    rc = sim_accel_init(dev, NULL);
-    if (rc != 0) {
-        os_dev_close(dev);
-        goto err;
-    }
-
-    cfg.sac_nr_samples = 10;
-    cfg.sac_nr_axises = 1;
-    /* read once per sec.  API should take this value in ms. */
-    cfg.sac_sample_itvl = OS_TICKS_PER_SEC;
-
-    rc = sim_accel_config((struct sim_accel *) dev, &cfg);
-    if (rc != 0) {
-        os_dev_close(dev);
-        goto err;
-    }
-
-    os_dev_close(dev);
-
-    return (0);
-err:
-    return (rc);
-}
-#endif
-
 /**
  * main
  *
@@ -417,22 +286,10 @@ main(int argc, char **argv)
     }
 #endif
 
-#if MYNEWT_VAL(TSL2561_CLI)
-    tsl2561_shell_init();
-#endif
-
-#if MYNEWT_VAL(BNO055_CLI)
-    bno055_shell_init();
-#endif
-
-    config_sensor();
-
     /*
      * As the last thing, process events from default event queue.
      */
     while (1) {
         os_eventq_run(os_eventq_dflt_get());
     }
-
-    return (0);
 }


[27/50] incubator-mynewt-core git commit: Adding lsm303dlhc test code to slinky

Posted by vi...@apache.org.
Adding lsm303dlhc test code to slinky

- Adding support for arduino_zero
- Changing shell output to be integer instead of float since
  baslibc does not support printing float.
- Using I2C_5 to talk to LSM303 on the arduino(Device driver creation
  required in the bsp)


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/d983810d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/d983810d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/d983810d

Branch: refs/heads/develop
Commit: d983810dbded549a3f2e9cebe631ac1dc2686a5f
Parents: 2681044
Author: Vipul Rahane <vi...@apache.org>
Authored: Tue Jan 24 18:25:45 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Tue Jan 24 18:25:45 2017 -0800

----------------------------------------------------------------------
 apps/slinky/pkg.yml                             |  1 +
 apps/slinky/src/main.c                          | 46 +++++++++++++++++---
 .../lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h  |  1 +
 hw/sensor/src/sensor_shell.c                    |  6 +--
 4 files changed, 46 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d983810d/apps/slinky/pkg.yml
----------------------------------------------------------------------
diff --git a/apps/slinky/pkg.yml b/apps/slinky/pkg.yml
index 52a08ef..8515446 100644
--- a/apps/slinky/pkg.yml
+++ b/apps/slinky/pkg.yml
@@ -32,6 +32,7 @@ pkg.deps:
     - kernel/os
     - hw/sensor
     - hw/drivers/sensors/sim
+    - hw/drivers/sensors/lsm303dlhc
     - boot/bootutil
     - sys/shell
     - sys/config

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d983810d/apps/slinky/src/main.c
----------------------------------------------------------------------
diff --git a/apps/slinky/src/main.c b/apps/slinky/src/main.c
index 27d6177..cd585a4 100755
--- a/apps/slinky/src/main.c
+++ b/apps/slinky/src/main.c
@@ -30,7 +30,7 @@
 #include <stats/stats.h>
 #include <config/config.h>
 #include <sensor/sensor.h>
-#include <sim/sim_accel.h>
+#include <lsm303dlhc/lsm303dlhc.h>
 #include "flash_map/flash_map.h"
 #include <hal/hal_system.h>
 #if MYNEWT_VAL(SPLIT_LOADER)
@@ -235,11 +235,47 @@ init_tasks(void)
             TASK2_PRIO, OS_WAIT_FOREVER, pstack, TASK2_STACK_SIZE);
 }
 
+#ifdef ARCH_arduino_zero
 static int
-config_sim_sensor(void)
+config_sensor(void)
 {
     struct os_dev *dev;
-    struct sim_accel_cfg cfg;
+    struct lsm303dlhc_cfg cfg;
+    int rc;
+
+    dev = (struct os_dev *) os_dev_open("accel0", OS_TIMEOUT_NEVER, NULL);
+    assert(dev != NULL);
+
+    rc = lsm303dlhc_init(dev, NULL);
+    if (rc != 0) {
+        os_dev_close(dev);
+        goto err;
+    }
+
+    /* read once per sec.  API should take this value in ms. */
+    cfg.accel_rate = LSM303DLHC_ACCEL_RATE_1;
+    cfg.accel_range = LSM303DLHC_ACCEL_RANGE_2;
+
+    rc = lsm303dlhc_config((struct lsm303dlhc *) dev, &cfg);
+    if (rc != 0) {
+        os_dev_close(dev);
+        goto err;
+    }
+
+    os_dev_close(dev);
+
+    return (0);
+err:
+    return (rc);
+}
+#endif
+
+#ifdef ARCH_sim
+static int
+config_sensor(void)
+{
+    struct os_dev *dev;
+    struct cfg;
     int rc;
 
     dev = (struct os_dev *) os_dev_open("simaccel0", OS_TIMEOUT_NEVER, NULL);
@@ -268,7 +304,7 @@ config_sim_sensor(void)
 err:
     return (rc);
 }
-
+#endif
 
 /**
  * main
@@ -323,7 +359,7 @@ main(int argc, char **argv)
     }
 #endif
 
-    config_sim_sensor();
+    config_sensor();
 
     /*
      * As the last thing, process events from default event queue.

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d983810d/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h b/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h
index 8bc3307..453097b 100644
--- a/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h
+++ b/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h
@@ -22,6 +22,7 @@
 
 #include "os/os.h"
 #include "os/os_dev.h"
+#include "sensor/sensor.h"
 
 #ifdef __cplusplus
 extern "C" {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d983810d/hw/sensor/src/sensor_shell.c
----------------------------------------------------------------------
diff --git a/hw/sensor/src/sensor_shell.c b/hw/sensor/src/sensor_shell.c
index 1cf9613..a5ee643 100644
--- a/hw/sensor/src/sensor_shell.c
+++ b/hw/sensor/src/sensor_shell.c
@@ -95,13 +95,13 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
     if (ctx->type == SENSOR_TYPE_ACCELEROMETER) {
         sad = (struct sensor_accel_data *) data;
         if (sad->sad_x != SENSOR_ACCEL_DATA_UNUSED) {
-            console_printf("x = %f, ", sad->sad_x);
+            console_printf("x = %x, ", (uint32_t)sad->sad_x * 1000000000);
         }
         if (sad->sad_y != SENSOR_ACCEL_DATA_UNUSED) {
-            console_printf("y = %f, ", sad->sad_y);
+            console_printf("y = %x, ", (uint32_t)sad->sad_y * 1000000000);
         }
         if (sad->sad_z != SENSOR_ACCEL_DATA_UNUSED) {
-            console_printf("z = %f", sad->sad_z);
+            console_printf("z = %x.", (uint32_t)sad->sad_z * 1000000000);
         }
         console_printf("\n");
     }


[42/50] incubator-mynewt-core git commit: SensorAPI:BNO055-Handle scaling using UNIT_SEL reg

Posted by vi...@apache.org.
SensorAPI:BNO055-Handle scaling using UNIT_SEL reg


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/30b53c06
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/30b53c06
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/30b53c06

Branch: refs/heads/develop
Commit: 30b53c064284042da9063927edc28898b57523af
Parents: 40b9b6b
Author: Vipul Rahane <vi...@apache.org>
Authored: Thu Feb 16 16:46:05 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Thu Feb 16 16:53:41 2017 -0800

----------------------------------------------------------------------
 .../sensors/bno055/include/bno055/bno055.h      |  17 ++++
 hw/drivers/sensors/bno055/src/bno055.c          | 100 +++++++++++++++----
 hw/drivers/sensors/bno055/src/bno055_priv.h     |  11 ++
 hw/drivers/sensors/bno055/src/bno055_shell.c    |  58 +++++++++++
 4 files changed, 167 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/30b53c06/hw/drivers/sensors/bno055/include/bno055/bno055.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/include/bno055/bno055.h b/hw/drivers/sensors/bno055/include/bno055/bno055.h
index 09fa3ec..8aade64 100644
--- a/hw/drivers/sensors/bno055/include/bno055/bno055.h
+++ b/hw/drivers/sensors/bno055/include/bno055/bno055.h
@@ -166,6 +166,23 @@ bno055_set_pwr_mode(uint8_t mode);
 uint8_t
 bno055_get_pwr_mode(void);
 
+/**
+ * Setting units for the bno055 sensor
+ *
+ * @param power mode for the sensor
+ * @return 0 on success, non-zero on failure
+ */
+int
+bno055_set_units(uint8_t val);
+
+/**
+ * Read current power mode of the sensor
+ *
+ * @return mode
+ */
+uint8_t
+bno055_get_units(void);
+
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/30b53c06/hw/drivers/sensors/bno055/src/bno055.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055.c b/hw/drivers/sensors/bno055/src/bno055.c
index bcc880d..014473f 100644
--- a/hw/drivers/sensors/bno055/src/bno055.c
+++ b/hw/drivers/sensors/bno055/src/bno055.c
@@ -104,6 +104,7 @@ static const struct sensor_driver g_bno055_sensor_driver = {
 
 static uint8_t g_bno055_opr_mode;
 static uint8_t g_bno055_pwr_mode;
+static uint8_t g_bno055_units;
 
 /**
  * Writes a single byte to the specified register
@@ -262,19 +263,23 @@ bno055_set_opr_mode(uint8_t mode)
 {
     int rc;
 
+    rc = bno055_write8(BNO055_OPR_MODE_ADDR, BNO055_OPERATION_MODE_CONFIG);
+    if (rc) {
+        goto err;
+    }
+
+    os_time_delay(OS_TICKS_PER_SEC/1000 * 19);
+
     rc = bno055_write8(BNO055_OPR_MODE_ADDR, mode);
     if (rc) {
         goto err;
     }
 
     /* Refer table 3-6 in the datasheet for the delay values */
-    if (mode == BNO055_OPERATION_MODE_CONFIG) {
-        os_time_delay(OS_TICKS_PER_SEC/1000 * 19);
-    } else {
-        os_time_delay(OS_TICKS_PER_SEC/1000 * 7);
-    }
+    os_time_delay(OS_TICKS_PER_SEC/1000 * 7);
 
     g_bno055_opr_mode = mode;
+
     return 0;
 err:
     return rc;
@@ -314,6 +319,39 @@ bno055_get_pwr_mode(void)
 }
 
 /**
+ * Setting units for the bno055 sensor
+ *
+ * @param power mode for the sensor
+ * @return 0 on success, non-zero on failure
+ */
+int
+bno055_set_units(uint8_t val)
+{
+    int rc;
+
+    rc = bno055_write8(BNO055_UNIT_SEL_ADDR, val);
+    if (rc) {
+        goto err;
+    }
+
+    g_bno055_units = val;
+    return 0;
+err:
+    return rc;
+}
+
+/**
+ * Read current power mode of the sensor
+ *
+ * @return mode
+ */
+uint8_t
+bno055_get_units(void)
+{
+    return g_bno055_units;
+}
+
+/**
  * Read current operational mode of the sensor
  *
  * @return mode
@@ -479,7 +517,7 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
     }
 
     if (id != BNO055_ID) {
-        os_time_delay(OS_TICKS_PER_SEC/2);
+        os_time_delay(OS_TICKS_PER_SEC/1000 * 100);
 
         rc = bno055_get_chip_id(&id);
         if (rc) {
@@ -503,11 +541,8 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
         goto err;
     }
 
-    /* Wait for about 100 ms */
-    os_time_delay(OS_TICKS_PER_SEC/1000 * 100);
-
     /* Set to normal power mode */
-    rc = bno055_write8(BNO055_PWR_MODE_ADDR, BNO055_POWER_MODE_NORMAL);
+    rc = bno055_set_pwr_mode(BNO055_POWER_MODE_NORMAL);
     if (rc) {
         goto err;
     }
@@ -529,6 +564,14 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
         goto err;
     }
 
+    /* Setting units and data output format */
+    rc = bno055_set_units(BNO055_ACC_UNIT_MS2 | BNO055_ANGRATE_UNIT_DPS |
+                          BNO055_EULER_UNIT_DEG | BNO055_TEMP_UNIT_DEGC |
+                          BNO055_DO_FORMAT_ANDROID);
+    if (rc) {
+        goto err;
+    }
+
     /* Overwrite the configuration data. */
     memcpy(&bno055->cfg, cfg, sizeof(*cfg));
 
@@ -637,6 +680,11 @@ bno055_get_vector_data(void *datastruct, int type)
     struct sensor_accel_data *sad;
     struct sensor_euler_data *sed;
     uint8_t reg;
+    uint8_t units;
+    float acc_div;
+    float gyro_div;
+    float euler_div;
+
     int rc;
 
     memset (payload, 0, 6);
@@ -657,6 +705,12 @@ bno055_get_vector_data(void *datastruct, int type)
     y = ((int16_t)payload[2]) | (((int16_t)payload[3]) << 8);
     z = ((int16_t)payload[4]) | (((int16_t)payload[5]) << 8);
 
+    units = bno055_get_units();
+
+    acc_div  = units & BNO055_ACC_UNIT_MG ? 1.0:100.0;
+    gyro_div = units & BNO055_ANGRATE_UNIT_RPS ? 900.0:16.0;
+    euler_div = units & BNO055_EULER_UNIT_RAD ? 16.0:900.0;
+
     /**
      * Convert the value to an appropriate range (section 3.6.4)
      */
@@ -671,25 +725,25 @@ bno055_get_vector_data(void *datastruct, int type)
         case SENSOR_TYPE_GYROSCOPE:
             sad = datastruct;
             /* 1rps = 900 LSB */
-            sad->sad_x = ((double)x)/900.0;
-            sad->sad_y = ((double)y)/900.0;
-            sad->sad_z = ((double)z)/900.0;
+            sad->sad_x = ((double)x)/gyro_div;
+            sad->sad_y = ((double)y)/gyro_div;
+            sad->sad_z = ((double)z)/gyro_div;
             break;
         case SENSOR_TYPE_EULER:
             sad = datastruct;
             /* 1 degree = 16 LSB */
-            sed->sed_h = ((double)x)/16.0;
-            sed->sed_r = ((double)y)/16.0;
-            sed->sed_p = ((double)z)/16.0;
+            sed->sed_h = ((double)x)/euler_div;
+            sed->sed_r = ((double)y)/euler_div;
+            sed->sed_p = ((double)z)/euler_div;
             break;
         case SENSOR_TYPE_ACCELEROMETER:
         case SENSOR_TYPE_LINEAR_ACCEL:
         case SENSOR_TYPE_GRAVITY:
             sad = datastruct;
             /* 1m/s^2 = 100 LSB */
-            sad->sad_x = ((double)x)/100.0;
-            sad->sad_y = ((double)y)/100.0;
-            sad->sad_z = ((double)z)/100.0;
+            sad->sad_x = ((double)x)/acc_div;
+            sad->sad_y = ((double)y)/acc_div;
+            sad->sad_z = ((double)z)/acc_div;
             break;
         default:
             BNO055_ERR("Not supported sensor type: %d\n", type);
@@ -712,9 +766,17 @@ int
 bno055_get_temp(int8_t *temp)
 {
     int rc;
+    uint8_t units;
+    uint8_t div;
 
     rc = bno055_read8(BNO055_TEMP_ADDR, (uint8_t *)temp);
 
+    units = bno055_get_units();
+
+    div = units & BNO055_TEMP_UNIT_DEGF ? 2 : 1;
+
+    *temp = *temp/div;
+
     return rc;
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/30b53c06/hw/drivers/sensors/bno055/src/bno055_priv.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_priv.h b/hw/drivers/sensors/bno055/src/bno055_priv.h
index 97f4280..8bb0ea1 100644
--- a/hw/drivers/sensors/bno055/src/bno055_priv.h
+++ b/hw/drivers/sensors/bno055/src/bno055_priv.h
@@ -100,7 +100,18 @@
 
 /* Unit selection register */
 #define BNO055_UNIT_SEL_ADDR                                    0X3B
+
 #define BNO055_DATA_SELECT_ADDR                                 0X3C
+#define BNO055_ACC_UNIT_MS2                                      0x0
+#define BNO055_ACC_UNIT_MG                                       0x1
+#define BNO055_ANGRATE_UNIT_DPS                             (0 << 1)
+#define BNO055_ANGRATE_UNIT_RPS                             (1 << 1)
+#define BNO055_EULER_UNIT_DEG                               (0 << 2)
+#define BNO055_EULER_UNIT_RAD                               (1 << 2)
+#define BNO055_TEMP_UNIT_DEGC                               (0 << 4)
+#define BNO055_TEMP_UNIT_DEGF                               (1 << 4)
+#define BNO055_DO_FORMAT_WINDOWS                            (0 << 7)
+#define BNO055_DO_FORMAT_ANDROID                            (1 << 7)
 
 /* Mode registers */
 #define BNO055_OPR_MODE_ADDR                                    0X3D

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/30b53c06/hw/drivers/sensors/bno055/src/bno055_shell.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_shell.c b/hw/drivers/sensors/bno055/src/bno055_shell.c
index f370655..4e0b3f7 100644
--- a/hw/drivers/sensors/bno055/src/bno055_shell.c
+++ b/hw/drivers/sensors/bno055/src/bno055_shell.c
@@ -159,6 +159,7 @@ bno055_shell_cmd_read(int argc, char **argv)
     struct sensor_quat_data *sqd;
     struct sensor_euler_data *sed;
     struct sensor_accel_data *sad;
+    int8_t *temp;
     int type;
     char tmpstr[13];
 
@@ -211,6 +212,15 @@ bno055_shell_cmd_read(int argc, char **argv)
             console_printf("r:%s ", sensor_ftostr(sed->sed_r, tmpstr, 13));
             console_printf("p:%s\n", sensor_ftostr(sed->sed_p, tmpstr, 13));
 
+        } else if (type == SENSOR_TYPE_TEMPERATURE) {
+            rc = bno055_get_temp(databuf);
+            if (rc) {
+                console_printf("Read failed: %d\n", rc);
+                goto err;
+            }
+            temp = databuf;
+
+            console_printf("Temperature:%u\n", *temp);
         } else {
             rc = bno055_get_vector_data(databuf, type);
             if (rc) {
@@ -307,6 +317,50 @@ err:
 }
 
 static int
+bno055_shell_units_cmd(int argc, char **argv)
+{
+    long val;
+    int rc;
+
+    if (argc > 3) {
+        return bno055_shell_err_too_many_args(argv[1]);
+    }
+
+    /* Display the units */
+    if (argc == 2) {
+        val = bno055_get_units();
+        console_printf("Acc, linear acc, gravity: %s\n"
+                       "Mag field strength: Micro Tesla\n"
+                       "Ang rate: %s\n"
+                       "Euler ang: %s\n",
+                       (uint8_t)val & BNO055_ACC_UNIT_MG ? "mg":"m/s^2",
+                       (uint8_t)val & BNO055_ANGRATE_UNIT_RPS ? "Rps":"Dps",
+                       (uint8_t)val & BNO055_EULER_UNIT_RAD ? "Rad":"Deg");
+        console_printf("Quat: Quat units\n"
+                       "Temp: %s\n"
+                       "Fusion data output: %s\n",
+                       (uint8_t)val & BNO055_TEMP_UNIT_DEGF ? "Deg F":"Deg C",
+                       (uint8_t)val & BNO055_DO_FORMAT_ANDROID ? "Android":"Windows");
+    }
+
+    /* Update the units */
+    if (argc == 3) {
+        if (bno055_shell_stol(argv[2], 0, UINT8_MAX, &val)) {
+            return bno055_shell_err_invalid_arg(argv[2]);
+        }
+
+        rc = bno055_set_units(val);
+        if (rc) {
+            goto err;
+        }
+    }
+
+    return 0;
+err:
+    return rc;
+}
+
+static int
 bno055_shell_cmd_dumpreg(int argc, char **argv)
 {
     long addr;
@@ -427,6 +481,10 @@ bno055_shell_cmd(int argc, char **argv)
     if (argc > 1 && strcmp(argv[1], "i2cscan") == 0) {
         return shell_i2cscan_cmd(argc, argv);
     }
+
+    if (argc > 1 && strcmp(argv[1], "units") == 0) {
+        return bno055_shell_units_cmd(argc, argv);
+    }
     return bno055_shell_err_unknown_arg(argv[1]);
 }
 


[10/50] incubator-mynewt-core git commit: MYNEWT-139: mistaken add in previous commit

Posted by vi...@apache.org.
MYNEWT-139: mistaken add in previous commit


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/7dca12ce
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/7dca12ce
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/7dca12ce

Branch: refs/heads/develop
Commit: 7dca12ce6f8d47114eea37143760f30727cfb519
Parents: 95c57d6
Author: Peter Snyder <pe...@apache.org>
Authored: Thu Dec 15 13:51:52 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Sun Dec 18 13:56:17 2016 -0800

----------------------------------------------------------------------
 test/runtest/src/ctags.list | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7dca12ce/test/runtest/src/ctags.list
----------------------------------------------------------------------
diff --git a/test/runtest/src/ctags.list b/test/runtest/src/ctags.list
deleted file mode 120000
index ff9c2c0..0000000
--- a/test/runtest/src/ctags.list
+++ /dev/null
@@ -1 +0,0 @@
-/Users/peterfs/dev/newt/newt_ci/ctags.list
\ No newline at end of file


[23/50] incubator-mynewt-core git commit: This closes #152

Posted by vi...@apache.org.
This closes #152


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/b6bd73b4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/b6bd73b4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/b6bd73b4

Branch: refs/heads/develop
Commit: b6bd73b451976db019eaf8102fd9de69710c1bc8
Parents: 91000d2
Author: Sterling Hughes <st...@apache.org>
Authored: Wed Jan 4 16:57:30 2017 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Wed Jan 4 16:57:30 2017 -0800

----------------------------------------------------------------------

----------------------------------------------------------------------



[34/50] incubator-mynewt-core git commit: Initial Commit BNO055 Driver

Posted by vi...@apache.org.
Initial Commit BNO055 Driver

- Adding BNO055 Driver
- Also adding a shell for it
- Cleaning up tsl driver


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/5a76b68c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/5a76b68c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/5a76b68c

Branch: refs/heads/develop
Commit: 5a76b68ccc34fe3f342811d512f2d35e7ddb9d0b
Parents: 1b0f375
Author: Vipul Rahane <vi...@apache.org>
Authored: Thu Feb 9 17:55:24 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Thu Feb 9 17:55:24 2017 -0800

----------------------------------------------------------------------
 apps/slinky/pkg.yml                             |   1 +
 apps/slinky/src/main.c                          |  37 +-
 apps/slinky/syscfg.yml                          |   5 +-
 .../sensors/bno055/include/bno055/bno055.h      | 128 +++
 hw/drivers/sensors/bno055/pkg.yml               |  32 +
 hw/drivers/sensors/bno055/src/bno055.c          | 828 +++++++++++++++++++
 hw/drivers/sensors/bno055/src/bno055_priv.h     | 235 ++++++
 hw/drivers/sensors/bno055/src/bno055_shell.c    | 424 ++++++++++
 hw/drivers/sensors/bno055/syscfg.yml            |  35 +
 hw/drivers/sensors/tsl2561/src/tsl2561.c        |   8 +-
 hw/sensor/include/sensor/euler.h                |  50 ++
 hw/sensor/include/sensor/quat.h                 |  50 ++
 hw/sensor/include/sensor/sensor.h               |  18 +-
 13 files changed, 1836 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/apps/slinky/pkg.yml
----------------------------------------------------------------------
diff --git a/apps/slinky/pkg.yml b/apps/slinky/pkg.yml
index 2f84f69..db9cc10 100644
--- a/apps/slinky/pkg.yml
+++ b/apps/slinky/pkg.yml
@@ -34,6 +34,7 @@ pkg.deps:
     - hw/drivers/sensors/sim
     - hw/drivers/sensors/lsm303dlhc
     - hw/drivers/sensors/tsl2561
+    - hw/drivers/sensors/bno055
     - boot/bootutil
     - sys/shell
     - sys/config

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/apps/slinky/src/main.c
----------------------------------------------------------------------
diff --git a/apps/slinky/src/main.c b/apps/slinky/src/main.c
index 718d690..aa58fcb 100755
--- a/apps/slinky/src/main.c
+++ b/apps/slinky/src/main.c
@@ -32,6 +32,7 @@
 #include <sensor/sensor.h>
 #include <lsm303dlhc/lsm303dlhc.h>
 #include <tsl2561/tsl2561.h>
+#include <bno055/bno055.h>
 #include "flash_map/flash_map.h"
 #include <hal/hal_system.h>
 #if MYNEWT_VAL(SPLIT_LOADER)
@@ -47,9 +48,6 @@
 #include <reboot/log_reboot.h>
 #include <os/os_time.h>
 #include <id/id.h>
-#if MYNEWT_VAL(TSL2561_CLI)
-#include <tsl2561/tsl2561.h>
-#endif
 
 #ifdef ARCH_sim
 #include <mcu/mcu_sim.h>
@@ -252,6 +250,10 @@ config_sensor(void)
     dev = (struct os_dev *) os_dev_open("light0", OS_TIMEOUT_NEVER, NULL);
     assert(dev != NULL);
     rc = tsl2561_init(dev, NULL);
+    if (rc) {
+        os_dev_close(dev);
+        goto err;
+    }
 
     /* Gain set to 1X and Inetgration time set to 13ms */
     tslcfg.gain = TSL2561_LIGHT_GAIN_1X;
@@ -271,6 +273,10 @@ config_sensor(void)
     assert(dev != NULL);
 
     rc = lsm303dlhc_init(dev, NULL);
+    if (rc) {
+        os_dev_close(dev);
+        goto err;
+    }
 
     /* read once per sec.  API should take this value in ms. */
     lsmcfg.accel_rate = LSM303DLHC_ACCEL_RATE_1;
@@ -283,6 +289,27 @@ config_sensor(void)
     }
 #endif
 
+#if MYNEWT_VAL(BNO055_PRESENT)
+    struct bno055_cfg bcfg;
+
+    dev = (struct os_dev *) os_dev_open("accel0", OS_TIMEOUT_NEVER, NULL);
+    assert(dev != NULL);
+
+    rc = bno055_init(dev, NULL);
+    if (rc) {
+        os_dev_close(dev);
+        assert(0);
+        goto err;
+    }
+
+    rc = bno055_config((struct bno055 *) dev, &bcfg);
+    if (rc) {
+        os_dev_close(dev);
+        assert(0);
+        goto err;
+    }
+#endif
+
     os_dev_close(dev);
 
     return (0);
@@ -384,6 +411,10 @@ main(int argc, char **argv)
     tsl2561_shell_init();
 #endif
 
+#if MYNEWT_VAL(BNO055_CLI)
+    bno055_shell_init();
+#endif
+
     config_sensor();
 
     /*

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/apps/slinky/syscfg.yml
----------------------------------------------------------------------
diff --git a/apps/slinky/syscfg.yml b/apps/slinky/syscfg.yml
index d324731..d184302 100644
--- a/apps/slinky/syscfg.yml
+++ b/apps/slinky/syscfg.yml
@@ -42,7 +42,7 @@ syscfg.vals:
     CONFIG_NEWTMGR: 1
 
     OS_MAIN_TASK_PRIO: 10
-    OS_MAIN_STACKS_SIZE: 512
+    OS_MAIN_STACK_SIZE: 512
 
 syscfg.defs:
     TSL2561_PRESENT:
@@ -51,3 +51,6 @@ syscfg.defs:
     LSM303DLHC_PRESENT:
         description: 'LSM303 is present'
         value: 0
+    BNO055_PRESENT:
+        description: 'BNO055 is present'
+        value: 0

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/hw/drivers/sensors/bno055/include/bno055/bno055.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/include/bno055/bno055.h b/hw/drivers/sensors/bno055/include/bno055/bno055.h
new file mode 100644
index 0000000..a540628
--- /dev/null
+++ b/hw/drivers/sensors/bno055/include/bno055/bno055.h
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef __BNO055_H__
+#define __BNO055_H__
+
+#include <os/os.h>
+#include "os/os_dev.h"
+#include "sensor/sensor.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct bno055_cfg {
+    uint8_t bc_mode;
+};
+
+struct bno055 {
+    struct os_dev dev;
+    struct sensor sensor;
+    struct bno055_cfg cfg;
+    os_time_t last_read_time;
+};
+
+struct bno055_rev_info {
+     uint8_t bri_accel_rev;
+     uint8_t bri_mag_rev;
+     uint8_t bri_gyro_rev;
+     uint8_t bri_bl_rev;
+     uint16_t bri_sw_rev;
+};
+
+/**
+ * Initialize the bno055. This function is normally called by sysinit.
+ *
+ * @param dev  Pointer to the bno055_dev device descriptor
+ */
+int bno055_init(struct os_dev *dev, void *arg);
+
+int bno055_config(struct bno055 *, struct bno055_cfg *);
+
+int
+bno055_get_vector_data(void *datastruct, int type);
+
+/**
+ * Get quat data from sensor
+ *
+ * @param sensor quat data to be filled up
+ * @return 0 on success, non-zero on error
+ */
+int
+bno055_get_quat_data(void *sqd);
+
+/**
+ * Get temperature from bno055 sensor
+ *
+ * @return temperature in degree celcius
+ */
+int
+bno055_get_temp(int8_t *temp);
+
+/**
+ * Setting mode for the bno055 sensor
+ *
+ * @param Operation mode for the sensor
+ * @return 0 on success, non-zero on failure
+ */
+int
+bno055_set_mode(uint8_t mode);
+
+#if MYNEWT_VAL(BNO055_CLI)
+int bno055_shell_init(void);
+#endif
+
+/**
+ * Get Revision info for different sensors in the bno055
+ *
+ * @param pass the pointer to the revision structure
+ * @return 0 on success, non-zero on error
+ */
+int
+bno055_get_rev_info(struct bno055_rev_info *ri);
+
+/**
+ * Gets system status, test results and errors if any from the sensor
+ *
+ * @param ptr to system status
+ * @param ptr to self test result
+ * @param ptr to system error
+ */
+int
+bno055_get_sys_status(uint8_t *system_status, uint8_t *self_test_result,
+                      uint8_t *system_error);
+
+int
+bno055_get_chip_id(uint8_t *id);
+
+/**
+ * Read current operational mode of the sensor
+ *
+ * @return mode
+ */
+uint8_t
+bno055_get_mode(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BNO055_H__ */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/hw/drivers/sensors/bno055/pkg.yml
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/pkg.yml b/hw/drivers/sensors/bno055/pkg.yml
new file mode 100644
index 0000000..5589276
--- /dev/null
+++ b/hw/drivers/sensors/bno055/pkg.yml
@@ -0,0 +1,32 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+pkg.name: hw/drivers/sensors/bno055
+pkg.description: Driver for the BNO055
+pkg.author: "Adafruit <su...@adafruit.com>"
+pkg.homepage: "http://www.adafruit.com/"
+pkg.keywords:
+    - adafruit
+    - bno055
+    - i2c
+    - sensor
+
+pkg.deps:
+    - "@apache-mynewt-core/kernel/os"
+    - "@apache-mynewt-core/hw/hal"

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/hw/drivers/sensors/bno055/src/bno055.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055.c b/hw/drivers/sensors/bno055/src/bno055.c
new file mode 100644
index 0000000..665db28
--- /dev/null
+++ b/hw/drivers/sensors/bno055/src/bno055.c
@@ -0,0 +1,828 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * resarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "defs/error.h"
+#include "os/os.h"
+#include "sysinit/sysinit.h"
+#include "hal/hal_i2c.h"
+#include "sensor/sensor.h"
+#include "sensor/accel.h"
+#include "sensor/mag.h"
+#include "sensor/quat.h"
+#include "sensor/euler.h"
+#include "bno055/bno055.h"
+#include "bno055_priv.h"
+
+#if MYNEWT_VAL(BNO055_LOG)
+#include "log/log.h"
+#endif
+
+#if MYNEWT_VAL(BNO055_STATS)
+#include "stats/stats.h"
+#endif
+
+#if MYNEWT_VAL(BNO055_STATS)
+/* Define the stats section and records */
+STATS_SECT_START(bno055_stat_section)
+    STATS_SECT_ENTRY(samples_acc_2g)
+    STATS_SECT_ENTRY(samples_acc_4g)
+    STATS_SECT_ENTRY(samples_acc_8g)
+    STATS_SECT_ENTRY(samples_acc_16g)
+    STATS_SECT_ENTRY(samples_mag_1_3g)
+    STATS_SECT_ENTRY(samples_mag_1_9g)
+    STATS_SECT_ENTRY(samples_mag_2_5g)
+    STATS_SECT_ENTRY(samples_mag_4_0g)
+    STATS_SECT_ENTRY(samples_mag_4_7g)
+    STATS_SECT_ENTRY(samples_mag_5_6g)
+    STATS_SECT_ENTRY(samples_mag_8_1g)
+    STATS_SECT_ENTRY(errors)
+STATS_SECT_END
+
+/* Define stat names for querying */
+STATS_NAME_START(bno055_stat_section)
+    STATS_NAME(bno055_stat_section, samples_acc_2g)
+    STATS_NAME(bno055_stat_section, samples_acc_4g)
+    STATS_NAME(bno055_stat_section, samples_acc_8g)
+    STATS_NAME(bno055_stat_section, samples_acc_16g)
+    STATS_NAME(bno055_stat_section, samples_mag_1_3g)
+    STATS_NAME(bno055_stat_section, samples_mag_1_9g)
+    STATS_NAME(bno055_stat_section, samples_mag_2_5g)
+    STATS_NAME(bno055_stat_section, samples_mag_4_0g)
+    STATS_NAME(bno055_stat_section, samples_mag_4_7g)
+    STATS_NAME(bno055_stat_section, samples_mag_5_6g)
+    STATS_NAME(bno055_stat_section, samples_mag_8_1g)
+    STATS_NAME(bno055_stat_section, errors)
+STATS_NAME_END(bno055_stat_section)
+
+/* Global variable used to hold stats data */
+STATS_SECT_DECL(bno055_stat_section) g_bno055stats;
+#endif
+
+#if MYNEWT_VAL(BNO055_LOG)
+#define LOG_MODULE_BNO055 (303)
+#define BNO055_INFO(...)  LOG_INFO(&_log, LOG_MODULE_BNO055, __VA_ARGS__)
+#define BNO055_ERR(...)   LOG_ERROR(&_log, LOG_MODULE_BNO055, __VA_ARGS__)
+static struct log _log;
+#else
+#define BNO055_INFO(...)
+#define BNO055_ERR(...)
+#endif
+
+/* Exports for the sensor interface.
+ */
+static void *bno055_sensor_get_interface(struct sensor *, sensor_type_t);
+static int bno055_sensor_read(struct sensor *, sensor_type_t,
+        sensor_data_func_t, void *, uint32_t);
+static int bno055_sensor_get_config(struct sensor *, sensor_type_t,
+        struct sensor_cfg *);
+
+static const struct sensor_driver g_bno055_sensor_driver = {
+    bno055_sensor_get_interface,
+    bno055_sensor_read,
+    bno055_sensor_get_config
+};
+
+static uint8_t g_bno055_mode;
+
+/**
+ * Writes a single byte to the specified register
+ *
+ * @param The register address to write to
+ * @param The value to write
+ *
+ * @return 0 on success, non-zero error on failure.
+ */
+int
+bno055_write8(uint8_t reg, uint32_t value)
+{
+    int rc;
+    uint8_t payload[2] = { reg, value & 0xFF };
+
+    struct hal_i2c_master_data data_struct = {
+        .address = MYNEWT_VAL(BNO055_I2CADDR),
+        .len = 2,
+        .buffer = payload
+    };
+
+    rc = hal_i2c_master_write(MYNEWT_VAL(BNO055_I2CBUS), &data_struct,
+                              OS_TICKS_PER_SEC / 10, 1);
+    if (rc) {
+        BNO055_ERR("Failed to write to 0x%02X:0x%02X with value 0x%02X\n",
+                       data_struct.address, reg, value);
+#if MYNEWT_VAL(BNO055_STATS)
+        STATS_INC(g_bno055stats, errors);
+#endif
+    }
+
+    return rc;
+}
+
+/**
+ * Reads a single byte from the specified register
+ *
+ * @param The register address to read from
+ * @param Pointer to where the register value should be written
+ *
+ * @return 0 on success, non-zero error on failure.
+ */
+int
+bno055_read8(uint8_t reg, uint8_t *value)
+{
+    int rc;
+    uint8_t payload;
+
+    struct hal_i2c_master_data data_struct = {
+        .address = MYNEWT_VAL(BNO055_I2CADDR),
+        .len = 1,
+        .buffer = &payload
+    };
+
+    /* Register write */
+    payload = reg;
+    rc = hal_i2c_master_write(MYNEWT_VAL(BNO055_I2CBUS), &data_struct,
+                              OS_TICKS_PER_SEC / 10, 1);
+    if (rc) {
+        BNO055_ERR("I2C register write failed at address 0x%02X:0x%02X\n",
+                   data_struct.address, reg);
+#if MYNEWT_VAL(BNO055_STATS)
+        STATS_INC(g_bno055stats, errors);
+#endif
+        goto err;
+    }
+
+    /* Read one byte back */
+    payload = 0;
+    rc = hal_i2c_master_read(MYNEWT_VAL(BNO055_I2CBUS), &data_struct,
+                             OS_TICKS_PER_SEC / 10, 1);
+    *value = payload;
+    if (rc) {
+        BNO055_ERR("Failed to read from 0x%02X:0x%02X\n", addr, reg);
+#if MYNEWT_VAL(BNO055_STATS)
+        STATS_INC(g_bno055stats, errors);
+#endif
+    }
+
+err:
+    return rc;
+}
+
+/**
+ * Read data from the sensor of variable length (MAX: 8 bytes)
+ *
+ *
+ * @param Register to read from
+ * @param Bufer to read into
+ * @param Length of the buffer
+ *
+ * @return 0 on success and non-zero on failure
+ */
+static int
+bno055_readlen(uint8_t reg, uint8_t *buffer, uint8_t len)
+{
+    int rc;
+    uint8_t payload[8] = { reg, 0, 0, 0, 0, 0, 0, 0};
+
+    struct hal_i2c_master_data data_struct = {
+        .address = reg,
+        .len = 1,
+        .buffer = payload
+    };
+
+    if (len > 8) {
+        rc = SYS_EINVAL;
+        goto err;
+    }
+
+    /* Clear the supplied buffer */
+    memset(buffer, 0, 8);
+
+    /* Register write */
+    rc = hal_i2c_master_write(MYNEWT_VAL(BNO055_I2CBUS), &data_struct,
+                              OS_TICKS_PER_SEC / 10, 1);
+    if (rc) {
+        BNO055_ERR("I2C access failed at address 0x%02X\n", addr);
+#if MYNEWT_VAL(BNO055_STATS)
+        STATS_INC(g_bno055stats, errors);
+#endif
+        goto err;
+    }
+
+    /* Read six bytes back */
+    memset(payload, 0, sizeof(payload));
+    data_struct.len = len;
+    rc = hal_i2c_master_read(MYNEWT_VAL(BNO055_I2CBUS), &data_struct,
+                             OS_TICKS_PER_SEC / 10, 1);
+
+    if (rc) {
+        BNO055_ERR("Failed to read from 0x%02X:0x%02X\n", addr, reg);
+#if MYNEWT_VAL(BNO055_STATS)
+        STATS_INC(g_bno055stats, errors);
+#endif
+        goto err;
+    }
+
+    /* Copy the I2C results into the supplied buffer */
+    memcpy(buffer, payload, len);
+
+    return 0;
+err:
+    return rc;
+}
+
+
+/**
+ * Setting mode for the bno055 sensor
+ *
+ * @param Operation mode for the sensor
+ * @return 0 on success, non-zero on failure
+ */
+int
+bno055_set_mode(uint8_t mode)
+{
+    int rc;
+
+    rc = bno055_write8(BNO055_OPR_MODE_ADDR, mode);
+    if (rc) {
+        goto err;
+    }
+
+    if (mode == BNO055_OPERATION_MODE_CONFIG) {
+        os_time_delay(OS_TICKS_PER_SEC/1000 * 19);
+    } else {
+        os_time_delay(OS_TICKS_PER_SEC/1000 * 7);
+    }
+
+    g_bno055_mode = mode;
+    return 0;
+err:
+    return rc;
+}
+
+/**
+ * Read current operational mode of the sensor
+ *
+ * @return mode
+ */
+uint8_t
+bno055_get_mode(void)
+{
+    return g_bno055_mode;
+}
+
+/**
+ * Expects to be called back through os_dev_create().
+ *
+ * @param The device object associated with this accellerometer
+ * @param Argument passed to OS device init, unused
+ *
+ * @return 0 on success, non-zero error on failure.
+ */
+int
+bno055_init(struct os_dev *dev, void *arg)
+{
+    struct bno055 *bno055;
+    struct sensor *sensor;
+    int rc;
+
+    bno055 = (struct bno055 *) dev;
+
+#if MYNEWT_VAL(BNO055_LOG)
+    log_register("bno055", &_log, &log_console_handler, NULL, LOG_SYSLEVEL);
+#endif
+
+    sensor = &bno055->sensor;
+
+#if MYNEWT_VAL(BNO055_STATS)
+    /* Initialise the stats entry */
+    rc = stats_init(
+        STATS_HDR(g_bno055stats),
+        STATS_SIZE_INIT_PARMS(g_bno055stats, STATS_SIZE_32),
+        STATS_NAME_INIT_PARMS(bno055_stat_section));
+    SYSINIT_PANIC_ASSERT(rc == 0);
+    /* Register the entry with the stats registry */
+    rc = stats_register("bno055", STATS_HDR(g_bno055stats));
+    SYSINIT_PANIC_ASSERT(rc == 0);
+#endif
+
+    rc = sensor_init(sensor, dev);
+    if (rc != 0) {
+        goto err;
+    }
+
+    /* Add the accelerometer/magnetometer driver */
+    rc = sensor_set_driver(sensor, SENSOR_TYPE_ACCELEROMETER |
+            SENSOR_TYPE_MAGNETIC_FIELD,
+            (struct sensor_driver *) &g_bno055_sensor_driver);
+    if (rc != 0) {
+        goto err;
+    }
+
+    rc = sensor_mgr_register(sensor);
+    if (rc != 0) {
+        goto err;
+    }
+
+    return (0);
+err:
+    return (rc);
+}
+
+int
+bno055_get_chip_id(uint8_t *id)
+{
+    int rc;
+    uint8_t idtmp;
+
+    /* Check if we can read the chip address */
+    rc = bno055_read8(BNO055_CHIP_ID_ADDR, &idtmp);
+    if (rc) {
+        goto err;
+    }
+
+    *id = idtmp;
+
+    return 0;
+err:
+    return rc;
+}
+
+int
+bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
+{
+    int rc;
+    uint8_t id;
+    uint8_t prev_mode;
+
+    prev_mode = g_bno055_mode;
+
+    /* Check if we can read the chip address */
+    rc = bno055_read8(BNO055_CHIP_ID_ADDR, &id);
+    if (rc) {
+        goto err;
+    }
+
+    if (id != BNO055_ID) {
+        os_time_delay(OS_TICKS_PER_SEC/2);
+
+        rc = bno055_read8(BNO055_CHIP_ID_ADDR, &id);
+        if (rc) {
+            goto err;
+        }
+
+        if(id != BNO055_ID) {
+            goto err;
+        }
+    }
+
+    rc = bno055_set_mode(BNO055_OPERATION_MODE_CONFIG);
+    if (rc) {
+        goto err;
+    }
+
+    /* Reset sensor */
+    rc = bno055_write8(BNO055_SYS_TRIGGER_ADDR, 0x20);
+    if (rc) {
+        goto err;
+    }
+
+    /* Wait for about 100 ms */
+    os_time_delay(OS_TICKS_PER_SEC/1000 * 100);
+
+    /* Set to normal power mode */
+    rc = bno055_write8(BNO055_PWR_MODE_ADDR, BNO055_POWER_MODE_NORMAL);
+    if (rc) {
+        goto err;
+    }
+
+    rc = bno055_write8(BNO055_SYS_TRIGGER_ADDR, 0x0);
+    if (rc) {
+        goto err;
+    }
+
+    os_time_delay(OS_TICKS_PER_SEC/1000 * 10);
+
+    /* Overwrite the configuration data. */
+    memcpy(&bno055->cfg, cfg, sizeof(*cfg));
+
+    /* Change back to previous mode */
+    rc = bno055_set_mode(prev_mode);
+    if (rc) {
+        goto err;
+    }
+
+    os_time_delay(OS_TICKS_PER_SEC/1000 * 20);
+
+    return 0;
+err:
+    return rc;
+}
+
+/**
+ * Get quat data from sensor
+ *
+ * @param sensor quat data to be filled up
+ * @return 0 on success, non-zero on error
+ */
+int
+bno055_get_quat_data(void *datastruct)
+{
+    uint8_t buffer[8];
+    double scale;
+    int rc;
+    struct sensor_quat_data *sqd;
+
+    sqd = (struct sensor_quat_data *)datastruct;
+
+    /* As per Section 3.6.5.5 Orientation (Quaternion) */
+    scale = (1.0 / (1<<14));
+
+    memset (buffer, 0, 8);
+
+    /* Read quat data */
+    rc = bno055_readlen(BNO055_QUATERNION_DATA_W_LSB_ADDR, buffer, 8);
+
+    if (rc) {
+        goto err;
+    }
+
+    sqd->sqd_w = ((((uint16_t)buffer[1]) << 8) | ((uint16_t)buffer[0])) * scale;
+    sqd->sqd_x = ((((uint16_t)buffer[3]) << 8) | ((uint16_t)buffer[2])) * scale;
+    sqd->sqd_y = ((((uint16_t)buffer[5]) << 8) | ((uint16_t)buffer[4])) * scale;
+    sqd->sqd_z = ((((uint16_t)buffer[7]) << 8) | ((uint16_t)buffer[6])) * scale;
+
+    return 0;
+err:
+    return rc;
+}
+
+/**
+ * Find register based on sensor type
+ *
+ * @return register address
+ */
+static int
+bno055_find_reg(sensor_type_t type, uint8_t *reg)
+{
+    int rc;
+
+    rc = 0;
+    switch(type) {
+        case SENSOR_TYPE_ACCELEROMETER:
+            *reg = BNO055_ACCEL_DATA_X_LSB_ADDR;
+            break;
+        case SENSOR_TYPE_GYROSCOPE:
+            *reg = BNO055_GYRO_DATA_X_LSB_ADDR;
+            break;
+        case SENSOR_TYPE_MAGNETIC_FIELD:
+            *reg = BNO055_MAG_DATA_X_LSB_ADDR;
+            break;
+        case SENSOR_TYPE_EULER:
+            *reg = BNO055_EULER_H_LSB_ADDR;
+            break;
+        case SENSOR_TYPE_LINEAR_ACCEL:
+            *reg = BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR;
+            break;
+        case SENSOR_TYPE_GRAVITY:
+            *reg = BNO055_GRAVITY_DATA_X_LSB_ADDR;
+            break;
+        default:
+            BNO055_ERR("Not supported sensor type: %d\n", type);
+            rc = SYS_EINVAL;
+            break;
+    }
+
+    return rc;
+}
+
+int
+bno055_get_vector_data(void *datastruct, int type)
+{
+
+    uint8_t payload[6];
+    int16_t x, y, z;
+    struct sensor_mag_data *smd;
+    struct sensor_accel_data *sad;
+    struct sensor_euler_data *sed;
+    uint8_t reg;
+    int rc;
+
+    memset (payload, 0, 6);
+
+    x = y = z = 0;
+
+    rc = bno055_find_reg(type, &reg);
+    if (rc) {
+        goto err;
+    }
+
+    rc = bno055_readlen(reg, payload, 6);
+    if (rc) {
+        goto err;
+    }
+
+    x = ((int16_t)payload[0]) | (((int16_t)payload[1]) << 8);
+    y = ((int16_t)payload[2]) | (((int16_t)payload[3]) << 8);
+    z = ((int16_t)payload[4]) | (((int16_t)payload[5]) << 8);
+
+    /**
+     * Convert the value to an appropriate range (section 3.6.4)
+     */
+    switch(type) {
+        case SENSOR_TYPE_MAGNETIC_FIELD:
+            smd = datastruct;
+            /* 1uT = 16 LSB */
+            smd->smd_x = ((double)x)/16.0;
+            smd->smd_y = ((double)y)/16.0;
+            smd->smd_z = ((double)z)/16.0;
+            break;
+        case SENSOR_TYPE_GYROSCOPE:
+            sad = datastruct;
+            /* 1rps = 900 LSB */
+            sad->sad_x = ((double)x)/900.0;
+            sad->sad_y = ((double)y)/900.0;
+            sad->sad_z = ((double)z)/900.0;
+            break;
+        case SENSOR_TYPE_EULER:
+            sad = datastruct;
+            /* 1 degree = 16 LSB */
+            sed->sed_h = ((double)x)/16.0;
+            sed->sed_r = ((double)y)/16.0;
+            sed->sed_p = ((double)z)/16.0;
+            break;
+        case SENSOR_TYPE_ACCELEROMETER:
+        case SENSOR_TYPE_LINEAR_ACCEL:
+        case SENSOR_TYPE_GRAVITY:
+            sad = datastruct;
+            /* 1m/s^2 = 100 LSB */
+            sad->sad_x = ((double)x)/100.0;
+            sad->sad_y = ((double)y)/100.0;
+            sad->sad_z = ((double)z)/100.0;
+            break;
+        default:
+            BNO055_ERR("Not supported sensor type: %d\n", type);
+            rc = SYS_EINVAL;
+            goto err;
+    }
+
+    return 0;
+err:
+    return rc;
+}
+
+/**
+ * Get temperature from bno055 sensor
+ *
+ * @return temperature in degree celcius
+ */
+int
+bno055_get_temp(int8_t *temp)
+{
+    int rc;
+
+    rc = bno055_read8(BNO055_TEMP_ADDR, (uint8_t *)temp);
+
+    return rc;
+}
+
+/**
+ * Get sensor data of specific type. This function also allocates a buffer
+ * to fill up the data in.
+ *
+ * @param Sensor structure used by the SensorAPI
+ * @param Sensor type
+ * @param Data function provided by the caler of the API
+ * @param Argument for the data function
+ * @param Timeout if any for reading
+ * @return 0 on success, non-zero on error
+ */
+static int
+bno055_sensor_read(struct sensor *sensor, sensor_type_t type,
+        sensor_data_func_t data_func, void *data_arg, uint32_t timeout)
+{
+    void *databuf;
+    int rc;
+
+    /* Since this is the biggest struct, malloc space for it */
+    databuf = malloc(sizeof(struct sensor_quat_data));
+
+    if (type == SENSOR_TYPE_ROTATION_VECTOR) {
+        /* Quaternion is a rotation vector */
+        rc = bno055_get_quat_data(databuf);
+        if (rc) {
+            goto err;
+        }
+    } else if (type == SENSOR_TYPE_TEMPERATURE) {
+        rc = bno055_get_temp(databuf);
+        if (rc) {
+            goto err;
+        }
+    } else {
+        /* Get vector data, accel or gravity values */
+        rc = bno055_get_vector_data(databuf, type);
+        if (rc) {
+            goto err;
+        }
+    }
+
+    /* Call data function */
+    rc = data_func(sensor, data_arg, databuf);
+    if (rc) {
+        goto err;
+    }
+
+    /* Free the data buffer */
+    free(databuf);
+
+    return 0;
+err:
+    return rc;
+}
+
+/**
+ * Gets system status, test results and errors if any from the sensor
+ *
+ * @param ptr to system status
+ * @param ptr to self test result
+ * @param ptr to system error
+ */
+int
+bno055_get_sys_status(uint8_t *system_status, uint8_t *self_test_result, uint8_t *system_error)
+{
+    int rc;
+
+    rc = bno055_write8(BNO055_PAGE_ID_ADDR, 0);
+    if (rc) {
+        goto err;
+    }
+    /**
+     * System Status (see section 4.3.58)
+     * ---------------------------------
+     * bit 0: Idle
+     * bit 1: System Error
+     * bit 2: Initializing Peripherals
+     * bit 3: System Iniitalization
+     * bit 4: Executing Self-Test
+     * bit 5: Sensor fusion algorithm running
+     * bit 6: System running without fusion algorithms
+     */
+
+    if (system_status != 0) {
+        rc = bno055_read8(BNO055_SYS_STAT_ADDR, system_status);
+        if (rc) {
+            goto err;
+        }
+    }
+
+    /**
+     * Self Test Results (see section )
+     * --------------------------------
+     * 1: test passed, 0: test failed
+     * bit 0: Accelerometer self test
+     * bit 1: Magnetometer self test
+     * bit 2: Gyroscope self test
+     * bit 3: MCU self test
+     *
+     * 0x0F : All Good
+     */
+
+    if (self_test_result != 0) {
+        rc = bno055_read8(BNO055_SELFTEST_RESULT_ADDR, self_test_result);
+        if (rc) {
+            goto err;
+        }
+    }
+
+    /**
+     * System Error (see section 4.3.59)
+     * ---------------------------------
+     * bit 0  : No error
+     * bit 1  : Peripheral initialization error
+     * bit 2  : System initialization error
+     * bit 3  : Self test result failed
+     * bit 4  : Register map value out of range
+     * bit 5  : Register map address out of range
+     * bit 6  : Register map write error
+     * bit 7  : BNO low power mode not available for selected operat ion mode
+     * bit 8  : Accelerometer power mode not available
+     * bit 9  : Fusion algorithm configuration error
+     * bit 10 : Sensor configuration error
+     */
+
+    if (system_error != 0) {
+        rc = bno055_read8(BNO055_SYS_ERR_ADDR, system_error);
+        if (rc) {
+            goto err;
+        }
+    }
+
+    os_time_delay(OS_TICKS_PER_SEC/1000 * 200);
+
+    return 0;
+err:
+    return rc;
+}
+
+/**
+ * Get Revision info for different sensors in the bno055
+ *
+ * @param pass the pointer to the revision structure
+ * @return 0 on success, non-zero on error
+ */
+int
+bno055_get_rev_info(struct bno055_rev_info *ri)
+{
+    uint8_t sw_rev_l, sw_rev_h;
+    int rc;
+
+    memset(ri, 0, sizeof(struct bno055_rev_info));
+
+    /* Check the accelerometer revision */
+    rc = bno055_read8(BNO055_ACCEL_REV_ID_ADDR, &(ri->bri_accel_rev));
+    if (rc) {
+        goto err;
+    }
+
+    /* Check the magnetometer revision */
+    rc = bno055_read8(BNO055_MAG_REV_ID_ADDR, &(ri->bri_mag_rev));
+    if (rc) {
+        goto err;
+    }
+
+    /* Check the gyroscope revision */
+    rc = bno055_read8(BNO055_GYRO_REV_ID_ADDR, &(ri->bri_gyro_rev));
+    if (rc) {
+        goto err;
+    }
+
+    rc = bno055_read8(BNO055_BL_REV_ID_ADDR, &(ri->bri_bl_rev));
+    if (rc) {
+        goto err;
+    }
+
+    /* Check the SW revision */
+    rc = bno055_read8(BNO055_SW_REV_ID_LSB_ADDR, &sw_rev_l);
+    if (rc) {
+        goto err;
+    }
+
+    rc = bno055_read8(BNO055_SW_REV_ID_MSB_ADDR, &sw_rev_h);
+    if (rc) {
+        goto err;
+    }
+
+    ri->bri_sw_rev = (((uint16_t)sw_rev_h) << 8) | ((uint16_t)sw_rev_l);
+
+    return 0;
+err:
+    return rc;
+}
+
+static void *
+bno055_sensor_get_interface(struct sensor *sensor, sensor_type_t type)
+{
+    return (NULL);
+}
+
+static int
+bno055_sensor_get_config(struct sensor *sensor, sensor_type_t type,
+        struct sensor_cfg *cfg)
+{
+    int rc;
+
+    if ((type != SENSOR_TYPE_ACCELEROMETER)   &&
+        (type != SENSOR_TYPE_MAGNETIC_FIELD)  &&
+        (type != SENSOR_TYPE_TEMPERATURE)     &&
+        (type != SENSOR_TYPE_ROTATION_VECTOR) &&
+        (type != SENSOR_TYPE_LINEAR_ACCEL)    &&
+        (type != SENSOR_TYPE_GRAVITY)         &&
+        (type != SENSOR_TYPE_EULER)) {
+        rc = SYS_EINVAL;
+        goto err;
+    }
+
+    cfg->sc_valtype = SENSOR_VALUE_TYPE_FLOAT_TRIPLET;
+
+    return (0);
+err:
+    return (rc);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/hw/drivers/sensors/bno055/src/bno055_priv.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_priv.h b/hw/drivers/sensors/bno055/src/bno055_priv.h
new file mode 100644
index 0000000..3a2da68
--- /dev/null
+++ b/hw/drivers/sensors/bno055/src/bno055_priv.h
@@ -0,0 +1,235 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * resarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/* Page id register definition */
+#define BNO055_PAGE_ID_ADDR                                     0X07
+
+/* PAGE0 REGISTER DEFINITION START*/
+#define BNO055_CHIP_ID_ADDR                                     0x00
+#define BNO055_ACCEL_REV_ID_ADDR                                0x01
+#define BNO055_MAG_REV_ID_ADDR                                  0x02
+#define BNO055_GYRO_REV_ID_ADDR                                 0x03
+#define BNO055_SW_REV_ID_LSB_ADDR                               0x04
+#define BNO055_SW_REV_ID_MSB_ADDR                               0x05
+#define BNO055_BL_REV_ID_ADDR                                   0X06
+/* Accel data register */
+#define BNO055_ACCEL_DATA_X_LSB_ADDR                            0X08
+#define BNO055_ACCEL_DATA_X_MSB_ADDR                            0X09
+#define BNO055_ACCEL_DATA_Y_LSB_ADDR                            0X0A
+#define BNO055_ACCEL_DATA_Y_MSB_ADDR                            0X0B
+#define BNO055_ACCEL_DATA_Z_LSB_ADDR                            0X0C
+#define BNO055_ACCEL_DATA_Z_MSB_ADDR                            0X0D
+
+/* Mag data register */
+#define BNO055_MAG_DATA_X_LSB_ADDR                              0X0E
+#define BNO055_MAG_DATA_X_MSB_ADDR                              0X0F
+#define BNO055_MAG_DATA_Y_LSB_ADDR                              0X10
+#define BNO055_MAG_DATA_Y_MSB_ADDR                              0X11
+#define BNO055_MAG_DATA_Z_LSB_ADDR                              0X12
+#define BNO055_MAG_DATA_Z_MSB_ADDR                              0X13
+
+/* Gyro data registers */
+#define BNO055_GYRO_DATA_X_LSB_ADDR                             0X14
+#define BNO055_GYRO_DATA_X_MSB_ADDR                             0X15
+#define BNO055_GYRO_DATA_Y_LSB_ADDR                             0X16
+#define BNO055_GYRO_DATA_Y_MSB_ADDR                             0X17
+#define BNO055_GYRO_DATA_Z_LSB_ADDR                             0X18
+#define BNO055_GYRO_DATA_Z_MSB_ADDR                             0X19
+
+/* Euler data registers */
+#define BNO055_EULER_H_LSB_ADDR                                 0X1A
+#define BNO055_EULER_H_MSB_ADDR                                 0X1B
+#define BNO055_EULER_R_LSB_ADDR                                 0X1C
+#define BNO055_EULER_R_MSB_ADDR                                 0X1D
+#define BNO055_EULER_P_LSB_ADDR                                 0X1E
+#define BNO055_EULER_P_MSB_ADDR                                 0X1F
+
+/* Quaternion data registers */
+#define BNO055_QUATERNION_DATA_W_LSB_ADDR                       0X20
+#define BNO055_QUATERNION_DATA_W_MSB_ADDR                       0X21
+#define BNO055_QUATERNION_DATA_X_LSB_ADDR                       0X22
+#define BNO055_QUATERNION_DATA_X_MSB_ADDR                       0X23
+#define BNO055_QUATERNION_DATA_Y_LSB_ADDR                       0X24
+#define BNO055_QUATERNION_DATA_Y_MSB_ADDR                       0X25
+#define BNO055_QUATERNION_DATA_Z_LSB_ADDR                       0X26
+#define BNO055_QUATERNION_DATA_Z_MSB_ADDR                       0X27
+
+/* Linear acceleration data registers */
+#define BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR                     0X28
+#define BNO055_LINEAR_ACCEL_DATA_X_MSB_ADDR                     0X29
+#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_ADDR                     0X2A
+#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_ADDR                     0X2B
+#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_ADDR                     0X2C
+#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_ADDR                     0X2D
+
+/* Gravity data registers */
+#define BNO055_GRAVITY_DATA_X_LSB_ADDR                          0X2E
+#define BNO055_GRAVITY_DATA_X_MSB_ADDR                          0X2F
+#define BNO055_GRAVITY_DATA_Y_LSB_ADDR                          0X30
+#define BNO055_GRAVITY_DATA_Y_MSB_ADDR                          0X31
+#define BNO055_GRAVITY_DATA_Z_LSB_ADDR                          0X32
+#define BNO055_GRAVITY_DATA_Z_MSB_ADDR                          0X33
+
+/* Temperature data register */
+#define BNO055_TEMP_ADDR                                        0X34
+
+/* Status registers */
+#define BNO055_CALIB_STAT_ADDR                                  0X35
+#define BNO055_SELFTEST_RESULT_ADDR                             0X36
+#define BNO055_INTR_STAT_ADDR                                   0X37
+
+#define BNO055_SYS_CLK_STAT_ADDR                                0X38
+#define BNO055_SYS_STAT_ADDR                                    0X39
+#define BNO055_SYS_ERR_ADDR                                     0X3A
+
+/* Unit selection register */
+#define BNO055_UNIT_SEL_ADDR                                    0X3B
+#define BNO055_DATA_SELECT_ADDR                                 0X3C
+
+/* Mode registers */
+#define BNO055_OPR_MODE_ADDR                                    0X3D
+#define BNO055_PWR_MODE_ADDR                                    0X3E
+
+#define BNO055_SYS_TRIGGER_ADDR                                 0X3F
+#define BNO055_TEMP_SOURCE_ADDR                                 0X40
+
+/* Axis remap registers */
+#define BNO055_AXIS_MAP_CONFIG_ADDR                             0X41
+#define BNO055_AXIS_MAP_SIGN_ADDR                               0X42
+
+/* SIC registers */
+#define BNO055_SIC_MATRIX_0_LSB_ADDR                            0X43
+#define BNO055_SIC_MATRIX_0_MSB_ADDR                            0X44
+#define BNO055_SIC_MATRIX_1_LSB_ADDR                            0X45
+#define BNO055_SIC_MATRIX_1_MSB_ADDR                            0X46
+#define BNO055_SIC_MATRIX_2_LSB_ADDR                            0X47
+#define BNO055_SIC_MATRIX_2_MSB_ADDR                            0X48
+#define BNO055_SIC_MATRIX_3_LSB_ADDR                            0X49
+#define BNO055_SIC_MATRIX_3_MSB_ADDR                            0X4A
+#define BNO055_SIC_MATRIX_4_LSB_ADDR                            0X4B
+#define BNO055_SIC_MATRIX_4_MSB_ADDR                            0X4C
+#define BNO055_SIC_MATRIX_5_LSB_ADDR                            0X4D
+#define BNO055_SIC_MATRIX_5_MSB_ADDR                            0X4E
+#define BNO055_SIC_MATRIX_6_LSB_ADDR                            0X4F
+#define BNO055_SIC_MATRIX_6_MSB_ADDR                            0X50
+#define BNO055_SIC_MATRIX_7_LSB_ADDR                            0X51
+#define BNO055_SIC_MATRIX_7_MSB_ADDR                            0X52
+#define BNO055_SIC_MATRIX_8_LSB_ADDR                            0X53
+#define BNO055_SIC_MATRIX_8_MSB_ADDR                            0X54
+
+/* Accelerometer Offset registers */
+#define BNO055_ACCEL_OFFSET_X_LSB_ADDR                          0X55
+#define BNO055_ACCEL_OFFSET_X_MSB_ADDR                          0X56
+#define BNO055_ACCEL_OFFSET_Y_LSB_ADDR                          0X57
+#define BNO055_ACCEL_OFFSET_Y_MSB_ADDR                          0X58
+#define BNO055_ACCEL_OFFSET_Z_LSB_ADDR                          0X59
+#define BNO055_ACCEL_OFFSET_Z_MSB_ADDR                          0X5A
+
+/* Magnetometer Offset registers */
+#define BNO055_MAG_OFFSET_X_LSB_ADDR                            0X5B
+#define BNO055_MAG_OFFSET_X_MSB_ADDR                            0X5C
+#define BNO055_MAG_OFFSET_Y_LSB_ADDR                            0X5D
+#define BNO055_MAG_OFFSET_Y_MSB_ADDR                            0X5E
+#define BNO055_MAG_OFFSET_Z_LSB_ADDR                            0X5F
+#define BNO055_MAG_OFFSET_Z_MSB_ADDR                            0X60
+
+/* Gyroscope Offset register s*/
+#define BNO055_GYRO_OFFSET_X_LSB_ADDR                           0X61
+#define BNO055_GYRO_OFFSET_X_MSB_ADDR                           0X62
+#define BNO055_GYRO_OFFSET_Y_LSB_ADDR                           0X63
+#define BNO055_GYRO_OFFSET_Y_MSB_ADDR                           0X64
+#define BNO055_GYRO_OFFSET_Z_LSB_ADDR                           0X65
+#define BNO055_GYRO_OFFSET_Z_MSB_ADDR                           0X66
+
+/* Radius registers */
+#define BNO055_ACCEL_RADIUS_LSB_ADDR                            0X67
+#define BNO055_ACCEL_RADIUS_MSB_ADDR                            0X68
+#define BNO055_MAG_RADIUS_LSB_ADDR                              0X69
+#define BNO055_MAG_RADIUS_MSB_ADDR                              0X6A
+
+/* Power modes */
+#define BNO055_POWER_MODE_NORMAL                                0X00
+#define BNO055_POWER_MODE_LOWPOWER                              0X01
+#define BNO055_POWER_MODE_SUSPEND                               0X02
+
+/* Operation Modes */
+#define BNO055_OPERATION_MODE_CONFIG                            0X00
+#define BNO055_OPERATION_MODE_ACCONLY                           0X01
+#define BNO055_OPERATION_MODE_MAGONLY                           0X02
+#define BNO055_OPERATION_MODE_GYRONLY                           0X03
+#define BNO055_OPERATION_MODE_ACCMAG                            0X04
+#define BNO055_OPERATION_MODE_ACCGYRO                           0X05
+#define BNO055_OPERATION_MODE_MAGGYRO                           0X06
+#define BNO055_OPERATION_MODE_AMG                               0X07
+#define BNO055_OPERATION_MODE_IMUPLUS                           0X08
+#define BNO055_OPERATION_MODE_COMPASS                           0X09
+#define BNO055_OPERATION_MODE_M4G                               0X0A
+#define BNO055_OPERATION_MODE_NDOF_FMC_OFF                      0X0B
+#define BNO055_OPERATION_MODE_NDOF                              0X0C
+
+/* Remap config - Default: 0x24 */
+#define BNO055_REMAP_CONFIG_P0                                  0x21
+#define BNO055_REMAP_CONFIG_P1                                  0x24
+#define BNO055_REMAP_CONFIG_P2                                  0x24
+#define BNO055_REMAP_CONFIG_P3                                  0x21
+#define BNO055_REMAP_CONFIG_P4                                  0x24
+#define BNO055_REMAP_CONFIG_P5                                  0x21
+#define BNO055_REMAP_CONFIG_P6                                  0x21
+#define BNO055_REMAP_CONFIG_P7                                  0x24
+
+/* Remap Sign - Default: 0x00 */
+#define BNO055_REMAP_SIGN_P0                                    0x04
+#define BNO055_REMAP_SIGN_P1                                    0x00
+#define BNO055_REMAP_SIGN_P2                                    0x06
+#define BNO055_REMAP_SIGN_P3                                    0x02
+#define BNO055_REMAP_SIGN_P4                                    0x03
+#define BNO055_REMAP_SIGN_P5                                    0x01
+#define BNO055_REMAP_SIGN_P6                                    0x07
+#define BNO055_REMAP_SIGN_P7                                    0x05
+
+/* PAGE1 REGISTERS DEFINITION START*/
+/* Configuration registers*/
+#define BNO055_ACCEL_CONFIG_ADDR                                0X08
+#define BNO055_MAG_CONFIG_ADDR                                  0X09
+#define BNO055_GYRO_CONFIG_ADDR                                 0X0A
+#define BNO055_GYRO_MODE_CONFIG_ADDR                            0X0B
+#define BNO055_ACCEL_SLEEP_CONFIG_ADDR                          0X0C
+#define BNO055_GYRO_SLEEP_CONFIG_ADDR                           0X0D
+#define BNO055_MAG_SLEEP_CONFIG_ADDR                            0x0E
+
+/* Interrupt Registers */
+#define BNO055_INT_MASK_ADDR                                    0X0F
+#define BNO055_INT_ADDR                                         0X10
+#define BNO055_ACCEL_ANY_MOTION_THRES_ADDR                      0X11
+#define BNO055_ACCEL_INTR_SETTINGS_ADDR                         0X12
+#define BNO055_ACCEL_HIGH_G_DURN_ADDR                           0X13
+#define BNO055_ACCEL_HIGH_G_THRES_ADDR                          0X14
+#define BNO055_ACCEL_NO_MOTION_THRES_ADDR                       0X15
+#define BNO055_ACCEL_NO_MOTION_SET_ADDR                         0X16
+#define BNO055_GYRO_INTR_SETING_ADDR                            0X17
+#define BNO055_GYRO_HIGHRATE_X_SET_ADDR                         0X18
+#define BNO055_GYRO_DURN_X_ADDR                                 0X19
+#define BNO055_GYRO_HIGHRATE_Y_SET_ADDR                         0X1A
+#define BNO055_GYRO_DURN_Y_ADDR                                 0X1B
+#define BNO055_GYRO_HIGHRATE_Z_SET_ADDR                         0X1C
+#define BNO055_GYRO_DURN_Z_ADDR                                 0X1D
+#define BNO055_GYRO_ANY_MOTION_THRES_ADDR                       0X1E
+#define BNO055_GYRO_ANY_MOTION_SET_ADDR                         0X1F
+
+#define BNO055_ID                                               0xA0

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/hw/drivers/sensors/bno055/src/bno055_shell.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_shell.c b/hw/drivers/sensors/bno055/src/bno055_shell.c
new file mode 100644
index 0000000..3f39a38
--- /dev/null
+++ b/hw/drivers/sensors/bno055/src/bno055_shell.c
@@ -0,0 +1,424 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <string.h>
+#include <errno.h>
+#include "sysinit/sysinit.h"
+#include "console/console.h"
+#include "shell/shell.h"
+#include "hal/hal_gpio.h"
+#include "bno055_priv.h"
+#include "bno055/bno055.h"
+#include "sensor/sensor.h"
+#include "sensor/accel.h"
+#include "sensor/mag.h"
+#include "sensor/quat.h"
+#include "sensor/euler.h"
+
+#if MYNEWT_VAL(BNO055_CLI)
+extern uint8_t g_bno055_mode;
+
+static int bno055_shell_cmd(int argc, char **argv);
+
+static struct shell_cmd bno055_shell_cmd_struct = {
+    .sc_cmd = "bno055",
+    .sc_cmd_func = bno055_shell_cmd
+};
+
+static int
+bno055_shell_stol(char *param_val, long min, long max, long *output)
+{
+    char *endptr;
+    long lval;
+
+    lval = strtol(param_val, &endptr, 10); /* Base 10 */
+    if (param_val != '\0' && *endptr == '\0' &&
+        lval >= min && lval <= max) {
+            *output = lval;
+    } else {
+        return EINVAL;
+    }
+
+    return 0;
+}
+
+static int
+bno055_shell_err_too_many_args(char *cmd_name)
+{
+    console_printf("Error: too many arguments for command \"%s\"\n",
+                   cmd_name);
+    return EINVAL;
+}
+
+static int
+bno055_shell_err_unknown_arg(char *cmd_name)
+{
+    console_printf("Error: unknown argument \"%s\"\n",
+                   cmd_name);
+    return EINVAL;
+}
+
+static int
+bno055_shell_err_invalid_arg(char *cmd_name)
+{
+    console_printf("Error: invalid argument \"%s\"\n",
+                   cmd_name);
+    return EINVAL;
+}
+
+static int
+bno055_shell_help(void)
+{
+    console_printf("%s cmd  [flags...]\n", bno055_shell_cmd_struct.sc_cmd);
+    console_printf("cmd:\n");
+    console_printf("\tr     [n_samples] [ 0-acc          | 1 -mag       | 2 -gyro    | 4 -temp   |\n"
+                   "\t                    9-quat         | 26-linearacc | 27-gravity | 28-euler  ]\n\n");
+    console_printf("\tmode  [0-config   | 1-acc          | 2 -mag       | 3 -gyro    | 4 -accmag |\n"
+                   "\t       5-accgyro  | 6-maggyro      | 7 -amg       | 8 -imuplus | 9 -compass|\n"
+                   "\t       9-m4g      |11-NDOF_FMC_OFF | 12-NDOF  ]\n");
+    console_printf("\tchip_id\n");
+    console_printf("\trev\n");
+    console_printf("\treset\n");
+    console_printf("\tpmode [0-normal   | 1-lowpower     | 2-suspend]\n");
+    console_printf("\tdumpreg [addr]\n");
+
+    return 0;
+}
+
+static int
+bno055_shell_cmd_get_chip_id(int argc, char **argv)
+{
+    uint8_t id;
+    int rc;
+
+    if (argc > 3) {
+        return bno055_shell_err_too_many_args(argv[1]);
+    }
+
+    /* Display the chip id */
+    if (argc == 2) {
+        rc = bno055_get_chip_id(&id);
+        if (rc) {
+            console_printf("Read failed %d", rc);
+        }
+        console_printf("%x\n", id ? 16u : 1u);
+    }
+
+    return 0;
+}
+
+static int
+bno055_shell_cmd_get_rev_info(int argc, char **argv)
+{
+    int rc;
+    struct bno055_rev_info ri;
+
+    if (argc > 3) {
+        return bno055_shell_err_too_many_args(argv[1]);
+    }
+
+    /* Display the rev ids */
+    if (argc == 2) {
+        rc = bno055_get_rev_info(&ri);
+        if (rc) {
+            console_printf("Read failed %d", rc);
+        }
+        console_printf("accel_rev:%x\nmag_rev:%x\ngyro_rev:%x\n"
+                       "sw_rev:%x\nbl_rev:%x\n", ri.bri_accel_rev,
+                       ri.bri_mag_rev, ri.bri_gyro_rev, ri.bri_sw_rev,
+                       ri.bri_bl_rev);
+    }
+
+    return 0;
+}
+
+static int
+bno055_shell_cmd_read(int argc, char **argv)
+{
+    uint16_t samples = 1;
+    long val;
+    int rc;
+    void *databuf;
+    struct sensor_quat_data *sqd;
+    struct sensor_euler_data *sed;
+    struct sensor_accel_data *sad;
+    int type;
+
+    type = 0;
+    if (argc > 4) {
+        return bno055_shell_err_too_many_args(argv[1]);
+    }
+
+    /* Since this is the biggest struct, malloc space for it */
+    databuf = malloc(sizeof(*sqd));
+
+
+    /* Check if more than one sample requested */
+    if (argc == 4) {
+        if (bno055_shell_stol(argv[2], 1, UINT16_MAX, &val)) {
+            return bno055_shell_err_invalid_arg(argv[2]);
+        }
+        samples = (uint16_t)val;
+
+        if (bno055_shell_stol(argv[2], 1, UINT16_MAX, &val)) {
+            return bno055_shell_err_invalid_arg(argv[2]);
+        }
+        type = (uint16_t)(1 << val);
+    }
+
+    while(samples--) {
+
+        if (type == SENSOR_TYPE_ROTATION_VECTOR) {
+            rc = bno055_get_quat_data(databuf);
+            if (rc) {
+                console_printf("Read failed: %d\n", rc);
+                goto err;
+            }
+            sqd = databuf;
+            console_printf("x:%u y:%u z:%u w:%u\n", (unsigned int)sqd->sqd_x,
+                          (unsigned int)sqd->sqd_y, (unsigned int)sqd->sqd_z,
+                          (unsigned int)sqd->sqd_w);
+        } else if (type == SENSOR_TYPE_EULER) {
+            rc = bno055_get_vector_data(databuf, type);
+            if (rc) {
+                console_printf("Read failed: %d\n", rc);
+            }
+            sed = databuf;
+            console_printf("h:%u r:%u p:%u\n", (unsigned int)sed->sed_h,
+                          (unsigned int)sed->sed_r, (unsigned int)sed->sed_p);
+        } else {
+            rc = bno055_get_vector_data(databuf, type);
+            if (rc) {
+                console_printf("Read failed: %d\n", rc);
+            }
+            sad = databuf;
+            console_printf("x:%u y:%u z:%u\n", (unsigned int)sad->sad_x,
+                          (unsigned int)sad->sad_y, (unsigned int)sad->sad_z);
+        }
+    }
+
+    return 0;
+err:
+    return rc;
+}
+
+static int
+bno055_shell_cmd_mode(int argc, char **argv)
+{
+    long val;
+    int rc;
+
+    if (argc > 3) {
+        return bno055_shell_err_too_many_args(argv[1]);
+    }
+
+    /* Display the mode */
+    if (argc == 2) {
+        val = bno055_get_mode();
+        console_printf("%u\n", val ? 16u : 1u);
+    }
+
+    /* Update the mode */
+    if (argc == 3) {
+        if (bno055_shell_stol(argv[2], 1, 16, &val)) {
+            return bno055_shell_err_invalid_arg(argv[2]);
+        }
+        /* Make sure mode is */
+        if (val > BNO055_OPERATION_MODE_NDOF) {
+            return bno055_shell_err_invalid_arg(argv[2]);
+        }
+
+        rc = bno055_set_mode(val);
+        if (rc) {
+            goto err;
+        }
+    }
+
+    return 0;
+err:
+    return rc;
+}
+
+#if 0
+static int
+bno055_shell_cmd_int(int argc, char **argv)
+{
+    int rc;
+    int pin;
+    long val;
+    uint8_t rate;
+    uint16_t lower;
+    uint16_t upper;
+
+    if (argc > 6) {
+        return bno055_shell_err_too_many_args(argv[1]);
+    }
+
+    if (argc == 2) {
+        console_printf("ToDo: Display int details\n");
+        return 0;
+    }
+
+    /* Enable the interrupt */
+    if (argc == 3 && strcmp(argv[2], "on") == 0) {
+        return bno055_enable_interrupt(1);
+    }
+
+    /* Disable the interrupt */
+    if (argc == 3 && strcmp(argv[2], "off") == 0) {
+        return bno055_enable_interrupt(0);
+    }
+
+    /* Clear the interrupt on 'clr' */
+    if (argc == 3 && strcmp(argv[2], "clr") == 0) {
+        return bno055_clear_interrupt();
+    }
+
+    /* Configure the interrupt on 'set' */
+    if (argc == 6 && strcmp(argv[2], "set") == 0) {
+        /* Get rate */
+        if (bno055_shell_stol(argv[3], 0, 15, &val)) {
+            return bno055_shell_err_invalid_arg(argv[3]);
+        }
+        rate = (uint8_t)val;
+        /* Get lower threshold */
+        if (bno055_shell_stol(argv[4], 0, UINT16_MAX, &val)) {
+            return bno055_shell_err_invalid_arg(argv[4]);
+        }
+        lower = (uint16_t)val;
+        /* Get upper threshold */
+        if (bno055_shell_stol(argv[5], 0, UINT16_MAX, &val)) {
+            return bno055_shell_err_invalid_arg(argv[5]);
+        }
+        upper = (uint16_t)val;
+        /* Set the values */
+        rc = bno055_setup_interrupt(rate, lower, upper);
+        console_printf("Configured interrupt as:\n");
+        console_printf("\trate: %u\n", rate);
+        console_printf("\tlower: %u\n", lower);
+        console_printf("\tupper: %u\n", upper);
+        return rc;
+    }
+
+    /* Setup INT pin on 'pin' */
+    if (argc == 4 && strcmp(argv[2], "pin") == 0) {
+        /* Get the pin number */
+        if (bno055_shell_stol(argv[3], 0, 0xFF, &val)) {
+            return bno055_shell_err_invalid_arg(argv[3]);
+        }
+        pin = (int)val;
+        /* INT is open drain, pullup is required */
+        rc = hal_gpio_init_in(pin, HAL_GPIO_PULL_UP);
+        assert(rc == 0);
+        console_printf("Set pin \"%d\" to INPUT with pull up enabled\n", pin);
+        return 0;
+    }
+
+    /* Unknown command */
+    return bno055_shell_err_invalid_arg(argv[2]);
+}
+
+static int
+bno055_shell_cmd_dump(int argc, char **argv)
+{
+  uint8_t val;
+
+  if (argc > 3) {
+      return bno055_shell_err_too_many_args(argv[1]);
+  }
+
+  val = 0;
+  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_CONTROL, &val));
+  console_printf("0x%02X (CONTROL): 0x%02X\n", BNO055_REGISTER_CONTROL, val);
+  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_TIMING, &val));
+  console_printf("0x%02X (TIMING):  0x%02X\n", BNO055_REGISTER_TIMING, val);
+  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_THRESHHOLDL_LOW, &val));
+  console_printf("0x%02X (THRLL):   0x%02X\n", BNO055_REGISTER_THRESHHOLDL_LOW, val);
+  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_THRESHHOLDL_HIGH, &val));
+  console_printf("0x%02X (THRLH):   0x%02X\n", BNO055_REGISTER_THRESHHOLDL_HIGH, val);
+  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_THRESHHOLDH_LOW, &val));
+  console_printf("0x%02X (THRHL):   0x%02X\n", BNO055_REGISTER_THRESHHOLDH_LOW, val);
+  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_THRESHHOLDH_HIGH, &val));
+  console_printf("0x%02X (THRHH):   0x%02X\n", BNO055_REGISTER_THRESHHOLDH_HIGH, val);
+  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_INTERRUPT, &val));
+  console_printf("0x%02X (INTER):   0x%02X\n", BNO055_REGISTER_INTERRUPT, val);
+  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_ID, &val));
+  console_printf("0x%02X (ID):      0x%02X\n", BNO055_REGISTER_ID, val);
+
+  return 0;
+}
+#endif
+
+static int
+bno055_shell_cmd(int argc, char **argv)
+{
+    if (argc == 1) {
+        return bno055_shell_help();
+    }
+
+    /* Read command (get a new data sample) */
+    if (argc > 1 && strcmp(argv[1], "r") == 0) {
+        return bno055_shell_cmd_read(argc, argv);
+    }
+
+    /* Mode command */
+    if (argc > 1 && strcmp(argv[1], "mode") == 0) {
+        return bno055_shell_cmd_mode(argc, argv);
+    }
+
+    /* Chip ID command */
+    if (argc > 1 && strcmp(argv[1], "chip_id") == 0) {
+        return bno055_shell_cmd_get_chip_id(argc, argv);
+    }
+
+    /* Rev command */
+    if (argc > 1 && strcmp(argv[1], "rev") == 0) {
+        return bno055_shell_cmd_get_rev_info(argc, argv);
+    }
+#if 0
+    /* Reset command */
+    if (argc > 1 && strcmp(argv[1], "reset") == 0) {
+        return bno055_shell_cmd_reset(argc, argv);
+    }
+
+    /* Power mode command */
+    if (argc > 1 && strcmp(argv[1], "pmode") == 0) {
+        return bno055_shell_cmd_pmode(argc, argv);
+    }
+
+    /* Dump Registers command */
+    if (argc > 1 && strcmp(argv[1], "dumpreg") == 0) {
+        return bno055_shell_cmd_dumpreg(argc, argv);
+    }
+#endif
+    return bno055_shell_err_unknown_arg(argv[1]);
+}
+
+int
+bno055_shell_init(void)
+{
+    int rc;
+
+    rc = shell_cmd_register(&bno055_shell_cmd_struct);
+    SYSINIT_PANIC_ASSERT(rc == 0);
+
+    return rc;
+}
+
+#endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/hw/drivers/sensors/bno055/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/syscfg.yml b/hw/drivers/sensors/bno055/syscfg.yml
new file mode 100644
index 0000000..f6cb228
--- /dev/null
+++ b/hw/drivers/sensors/bno055/syscfg.yml
@@ -0,0 +1,35 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+syscfg.defs:
+    BNO055_I2CADDR:
+        description: 'HW I2C address for the BNO055'
+        value: 0x28
+    BNO055_I2CBUS:
+        description: 'I2C bus number for the BNO055'
+        value: -1
+    BNO055_CLI:
+        description: 'Enable shell support for the BNO055'
+        value: 0
+    BNO055_LOG:
+        description: 'Enable BNO055 logging'
+        value: 0
+    BNO055_STATS:
+        description: 'Enable BNO055 statistics'
+        value: 0

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/hw/drivers/sensors/tsl2561/src/tsl2561.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/src/tsl2561.c b/hw/drivers/sensors/tsl2561/src/tsl2561.c
index b3c7d2d..8ea8ad3 100644
--- a/hw/drivers/sensors/tsl2561/src/tsl2561.c
+++ b/hw/drivers/sensors/tsl2561/src/tsl2561.c
@@ -124,7 +124,11 @@ tsl2561_write8(uint8_t reg, uint32_t value)
     rc = hal_i2c_master_write(MYNEWT_VAL(TSL2561_I2CBUS), &data_struct,
                               OS_TICKS_PER_SEC / 10, 1);
     if (rc) {
-        TSL2561_ERR("Failed to write @0x%02X with value 0x%02X\n", reg, value);
+        TSL2561_ERR("Failed to write 0x%02X:0x%02X with value 0x%02X\n",
+                    data_struct.address, reg, value);
+#if MYNEWT_VAL(TSL2561_STATS)
+        STATS_INC(g_tsl2561stats, errors);
+#endif
     }
 
     return rc;
@@ -273,7 +277,7 @@ tsl2561_set_gain(uint8_t gain)
 
     if ((gain != TSL2561_LIGHT_GAIN_1X) && (gain != TSL2561_LIGHT_GAIN_16X)) {
         TSL2561_ERR("Invalid gain value\n");
-        rc = EINVAL;
+        rc = SYS_EINVAL;
         goto err;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/hw/sensor/include/sensor/euler.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/euler.h b/hw/sensor/include/sensor/euler.h
new file mode 100644
index 0000000..5ddd44f
--- /dev/null
+++ b/hw/sensor/include/sensor/euler.h
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef __SENSOR_EULER_H__
+#define __SENSOR_EULER_H__
+
+#include "os/os.h"
+#include "os/os_dev.h"
+#include "sensor/sensor.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Data representing Euler angles
+ * All values are in Degrees
+ * Heading, Roll and Pitch
+ */
+struct sensor_euler_data {
+    float sed_h;
+    float sed_r;
+    float sed_p;
+} __attribute__((packed));
+
+/**
+ * Accelerometer data is unused for this field.
+ */
+#define SENSOR_ACCEL_DATA_UNUSED (-1)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SENSOR_ACCEL_H__ */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/hw/sensor/include/sensor/quat.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/quat.h b/hw/sensor/include/sensor/quat.h
new file mode 100644
index 0000000..3abb132
--- /dev/null
+++ b/hw/sensor/include/sensor/quat.h
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef __SENSOR_QUAT_H__
+#define __SENSOR_QUAT_H__
+
+#include "os/os.h"
+#include "os/os_dev.h"
+#include "sensor/sensor.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Data representing a singular read from an accelerometer.
+ * All values are in MS^2
+ */
+struct sensor_quat_data {
+    float sqd_x;
+    float sqd_y;
+    float sqd_z;
+    float sqd_w;
+} __attribute__((packed));
+
+/**
+ * Quaternion data is unused for this field.
+ */
+#define SENSOR_QUAT_DATA_UNUSED (-1)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SENSOR_ACCEL_H__ */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/5a76b68c/hw/sensor/include/sensor/sensor.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/sensor.h b/hw/sensor/include/sensor/sensor.h
index 2f99ea2..d707e2b 100644
--- a/hw/sensor/include/sensor/sensor.h
+++ b/hw/sensor/include/sensor/sensor.h
@@ -66,18 +66,18 @@ typedef enum {
     SENSOR_TYPE_ALTITUDE             = (1 << 10),
     /* Weight Supported */
     SENSOR_TYPE_WEIGHT               = (1 << 11),
+    /* Linear Accelerometer (Without Gravity) */
+    SENSOR_TYPE_LINEAR_ACCEL         = (1 << 26),
+    /* Gravity Sensor */
+    SENSOR_TYPE_GRAVITY              = (1 << 27),
+    /* Euler Orientation Sensor */
+    SENSOR_TYPE_EULER                = (1 << 28),
     /* User defined sensor type 1 */
-    SENSOR_TYPE_USER_DEFINED_1       = (1 << 26),
+    SENSOR_TYPE_USER_DEFINED_1       = (1 << 29),
     /* User defined sensor type 2 */
-    SENSOR_TYPE_USER_DEFINED_2       = (1 << 27),
+    SENSOR_TYPE_USER_DEFINED_2       = (1 << 30),
     /* User defined sensor type 3 */
-    SENSOR_TYPE_USER_DEFINED_3       = (1 << 28),
-    /* User defined sensor type 4 */
-    SENSOR_TYPE_USER_DEFINED_4       = (1 << 29),
-    /* User defined sensor type 5 */
-    SENSOR_TYPE_USER_DEFINED_5       = (1 << 30),
-    /* User defined sensor type 6 */
-    SENSOR_TYPE_USER_DEFINED_6       = (1 << 31),
+    SENSOR_TYPE_USER_DEFINED_3       = (1 << 31),
     /* A selector, describes all sensors */
     SENSOR_TYPE_ALL                  = 0xFFFFFFFF
 } sensor_type_t;


[25/50] incubator-mynewt-core git commit: This closes #157

Posted by vi...@apache.org.
This closes #157


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/6247b5af
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/6247b5af
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/6247b5af

Branch: refs/heads/develop
Commit: 6247b5afa876a7e29354eab055fa28ea262f7e1d
Parents: d0ded5a
Author: Sterling Hughes <st...@apache.org>
Authored: Fri Jan 6 14:15:25 2017 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Fri Jan 6 14:15:25 2017 -0800

----------------------------------------------------------------------

----------------------------------------------------------------------



[06/50] incubator-mynewt-core git commit: bleprph_oic; app does not need extra mbufs anymore.

Posted by vi...@apache.org.
bleprph_oic; app does not need extra mbufs anymore.


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/645a5b76
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/645a5b76
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/645a5b76

Branch: refs/heads/develop
Commit: 645a5b760d7f9019370924d3f455a3985f94b8a0
Parents: c8c06dd
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Fri Dec 16 15:38:59 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Sun Dec 18 13:56:17 2016 -0800

----------------------------------------------------------------------
 apps/bleprph_oic/syscfg.yml | 3 ---
 1 file changed, 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/645a5b76/apps/bleprph_oic/syscfg.yml
----------------------------------------------------------------------
diff --git a/apps/bleprph_oic/syscfg.yml b/apps/bleprph_oic/syscfg.yml
index 677c5fe..220978c 100644
--- a/apps/bleprph_oic/syscfg.yml
+++ b/apps/bleprph_oic/syscfg.yml
@@ -38,9 +38,6 @@ syscfg.vals:
     # Disable unused eddystone feature.
     BLE_EDDYSTONE: 0
 
-    # Need to get this down. XXXXX
-    MSYS_1_BLOCK_COUNT: 18
-
     # Log reboot messages to a flash circular buffer.
     REBOOT_LOG_FCB: 1
     LOG_FCB: 1


[30/50] incubator-mynewt-core git commit: Modifying tsl2561 driver

Posted by vi...@apache.org.
Modifying tsl2561 driver

- Changing the driver to match the Sensor API
- Adding it to the shell
- We might want to keep the individual sensor tsl shell as it is. Hence
  keeping the file around for now.
- Current implementation is polling based. We might want to add
  interrupt based sampling to the Sensor API.


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/9f59c4f0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/9f59c4f0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/9f59c4f0

Branch: refs/heads/develop
Commit: 9f59c4f06a7ba1000d53745a7fcaca114e74d4f9
Parents: 674aa7d
Author: Vipul Rahane <vi...@apache.org>
Authored: Wed Feb 1 15:37:39 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Wed Feb 1 15:37:39 2017 -0800

----------------------------------------------------------------------
 apps/slinky/pkg.yml                             |   1 +
 apps/slinky/src/main.c                          |  36 +-
 apps/slinky/syscfg.yml                          |   8 +
 .../sensors/tsl2561/include/tsl2561/tsl2561.h   |  30 +-
 hw/drivers/sensors/tsl2561/pkg.yml              |  14 -
 hw/drivers/sensors/tsl2561/src/tsl2561.c        | 428 +++++++++++++------
 hw/drivers/sensors/tsl2561/src/tsl2561_priv.h   |  81 +++-
 hw/drivers/sensors/tsl2561/syscfg.yml           |   3 -
 hw/sensor/include/sensor/light.h                |  49 +++
 hw/sensor/src/sensor_shell.c                    |  16 +
 sys/shell/src/shell.c                           |   2 +-
 sys/shell/syscfg.yml                            |   2 +-
 12 files changed, 496 insertions(+), 174 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9f59c4f0/apps/slinky/pkg.yml
----------------------------------------------------------------------
diff --git a/apps/slinky/pkg.yml b/apps/slinky/pkg.yml
index 8515446..2f84f69 100644
--- a/apps/slinky/pkg.yml
+++ b/apps/slinky/pkg.yml
@@ -33,6 +33,7 @@ pkg.deps:
     - hw/sensor
     - hw/drivers/sensors/sim
     - hw/drivers/sensors/lsm303dlhc
+    - hw/drivers/sensors/tsl2561
     - boot/bootutil
     - sys/shell
     - sys/config

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9f59c4f0/apps/slinky/src/main.c
----------------------------------------------------------------------
diff --git a/apps/slinky/src/main.c b/apps/slinky/src/main.c
index 4b0e870..e87aa0e 100755
--- a/apps/slinky/src/main.c
+++ b/apps/slinky/src/main.c
@@ -31,6 +31,7 @@
 #include <config/config.h>
 #include <sensor/sensor.h>
 #include <lsm303dlhc/lsm303dlhc.h>
+#include <tsl2561/tsl2561.h>
 #include "flash_map/flash_map.h"
 #include <hal/hal_system.h>
 #if MYNEWT_VAL(SPLIT_LOADER)
@@ -240,33 +241,50 @@ static int
 config_sensor(void)
 {
     struct os_dev *dev;
-    struct lsm303dlhc_cfg cfg;
     int rc;
 
-    dev = (struct os_dev *) os_dev_open("accel0", OS_TIMEOUT_NEVER, NULL);
+#if MYNEWT_VAL(TSL2561_PRESENT)
+    struct tsl2561_cfg tslcfg;
+
+    dev = (struct os_dev *) os_dev_open("light0", OS_TIMEOUT_NEVER, NULL);
     assert(dev != NULL);
+    rc = tsl2561_init(dev, NULL);
 
-    rc = lsm303dlhc_init(dev, NULL);
-    if (rc != 0) {
+    /* Gain set to 1X and Inetgration time set to 13ms */
+    tslcfg.gain = TSL2561_LIGHT_GAIN_1X;
+    tslcfg.integration_time = TSL2561_LIGHT_ITIME_13MS;
+
+    rc = tsl2561_config((struct tsl2561 *)dev, &tslcfg);
+    if (rc) {
         os_dev_close(dev);
         goto err;
     }
+#endif
+
+#if MYNEWT_VAL(LSM303DLHC_PRESENT)
+    struct lsm303dlhc_cfg lsmcfg;
+
+    dev = (struct os_dev *) os_dev_open("accel0", OS_TIMEOUT_NEVER, NULL);
+    assert(dev != NULL);
+
+    rc = lsm303dlhc_init(dev, NULL);
 
     /* read once per sec.  API should take this value in ms. */
-    cfg.accel_rate = LSM303DLHC_ACCEL_RATE_1;
-    cfg.accel_range = LSM303DLHC_ACCEL_RANGE_2;
+    lsmcfg.accel_rate = LSM303DLHC_ACCEL_RATE_1;
+    lsmcfg.accel_range = LSM303DLHC_ACCEL_RANGE_2;
 
-    rc = lsm303dlhc_config((struct lsm303dlhc *) dev, &cfg);
-    if (rc != 0) {
+    rc = lsm303dlhc_config((struct lsm303dlhc *) dev, &lsmcfg);
+    if (rc) {
         os_dev_close(dev);
         goto err;
     }
+#endif
 
     os_dev_close(dev);
 
     return (0);
 err:
-    return (rc);
+    return rc;
 }
 #endif
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9f59c4f0/apps/slinky/syscfg.yml
----------------------------------------------------------------------
diff --git a/apps/slinky/syscfg.yml b/apps/slinky/syscfg.yml
index 1beee37..d324731 100644
--- a/apps/slinky/syscfg.yml
+++ b/apps/slinky/syscfg.yml
@@ -43,3 +43,11 @@ syscfg.vals:
 
     OS_MAIN_TASK_PRIO: 10
     OS_MAIN_STACKS_SIZE: 512
+
+syscfg.defs:
+    TSL2561_PRESENT:
+        description: 'TSL2561 is present'
+        value: 0
+    LSM303DLHC_PRESENT:
+        description: 'LSM303 is present'
+        value: 0

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9f59c4f0/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h b/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h
index 03320e8..2f093be 100644
--- a/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h
+++ b/hw/drivers/sensors/tsl2561/include/tsl2561/tsl2561.h
@@ -38,35 +38,42 @@
 #define __ADAFRUIT_TSL2561_H__
 
 #include <os/os.h>
+#include "os/os_dev.h"
+#include "sensor/sensor.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/*
-struct tsl2561_i2c {
-    uint8_t i2c_num;
-    uint8_t i2c_addr;
+enum tsl2561_light_gain {
+    TSL2561_LIGHT_GAIN_1X         = 0x00,         /* 1X    */
+    TSL2561_LIGHT_GAIN_16X        = 0x01 << 4     /* 16X   */
+};
+
+enum tsl2561_light_itime {
+    TSL2561_LIGHT_ITIME_13MS      = 0x00,         /* 13ms  */
+    TSL2561_LIGHT_ITIME_101MS     = 0x01,         /* 101ms */
+    TSL2561_LIGHT_ITIME_402MS     = 0x01 << 1     /* 402ms */
 };
 
 struct tsl2561_cfg {
     uint8_t gain;
     uint8_t integration_time;
-    uint8_t enabled;
 };
 
-struct tsl2561_dev {
-    struct tsl2561_i2c i2c;
+struct tsl2561 {
+    struct os_dev dev;
+    struct sensor sensor;
     struct tsl2561_cfg cfg;
+    os_time_t last_read_time;
 };
-*/
 
 /**
  * Initialize the tsl2561. This function is normally called by sysinit.
  *
  * @param dev  Pointer to the tsl2561_dev device descriptor
  */
-void tsl2561_init(void);
+int tsl2561_init(struct os_dev *dev, void *arg);
 
 /**
  * Enable or disables the sensor to save power
@@ -89,10 +96,11 @@ uint8_t tsl2561_get_enable(void);
  *
  * @param broadband The full (visible + ir) sensor output
  * @param ir        The ir sensor output
+ * @param tsl2561   Config and OS device structure
  *
  * @return 0 on success, and non-zero error code on failure
  */
-int tsl2561_get_data(uint16_t *broadband, uint16_t *ir);
+int tsl2561_get_data(uint16_t *broadband, uint16_t *ir, struct tsl2561 *tsl2561);
 
 /**
  * Sets the integration time used when sampling light values.
@@ -179,6 +187,8 @@ int tsl2561_enable_interrupt(uint8_t enable);
  */
 int tsl2561_clear_interrupt(void);
 
+int tsl2561_config(struct tsl2561 *, struct tsl2561_cfg *);
+
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9f59c4f0/hw/drivers/sensors/tsl2561/pkg.yml
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/pkg.yml b/hw/drivers/sensors/tsl2561/pkg.yml
index e7d0ffd..cebb755 100644
--- a/hw/drivers/sensors/tsl2561/pkg.yml
+++ b/hw/drivers/sensors/tsl2561/pkg.yml
@@ -33,17 +33,3 @@ pkg.keywords:
 pkg.deps:
     - "@apache-mynewt-core/kernel/os"
     - "@apache-mynewt-core/hw/hal"
-
-pkg.deps.TSL2561_CLI:
-    - "@apache-mynewt-core/sys/console/full"
-    - "@apache-mynewt-core/sys/shell"
-    - "@apache-mynewt-core/sys/sysinit"
-
-pkg.deps.TSL2561_LOG:
-    - "@apache-mynewt-core/sys/log"
-
-pkg.deps.TSL2561_STATS:
-    - "@apache-mynewt-core/sys/stats"
-
-pkg.init_function: tsl2561_init
-pkg.init_stage: 6

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9f59c4f0/hw/drivers/sensors/tsl2561/src/tsl2561.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/src/tsl2561.c b/hw/drivers/sensors/tsl2561/src/tsl2561.c
index 037ccf8..8f90718 100644
--- a/hw/drivers/sensors/tsl2561/src/tsl2561.c
+++ b/hw/drivers/sensors/tsl2561/src/tsl2561.c
@@ -37,8 +37,13 @@
 #include <assert.h>
 #include <stdio.h>
 #include <errno.h>
+
+#include "defs/error.h"
+#include "os/os.h"
 #include "sysinit/sysinit.h"
 #include "hal/hal_i2c.h"
+#include "sensor/sensor.h"
+#include "sensor/light.h"
 #include "tsl2561/tsl2561.h"
 #include "tsl2561_priv.h"
 
@@ -53,10 +58,6 @@
 /* ToDo: Add timer based polling in bg and data ready callback (os_event?) */
 /* ToDo: Move values to struct incl. address to allow multiple instances */
 
-static uint8_t g_tsl2561_gain;
-static uint8_t g_tsl2561_integration_time;
-static uint8_t g_tsl2561_enabled;
-
 #if MYNEWT_VAL(TSL2561_STATS)
 /* Define the stats section and records */
 STATS_SECT_START(tsl2561_stat_section)
@@ -90,6 +91,20 @@ static struct log _log;
 #define TSL2561_ERR(...)
 #endif
 
+/* Exports for the sensor interface.
+ */
+static void *tsl2561_sensor_get_interface(struct sensor *, sensor_type_t);
+static int tsl2561_sensor_read(struct sensor *, sensor_type_t,
+        sensor_data_func_t, void *, uint32_t);
+static int tsl2561_sensor_get_config(struct sensor *, sensor_type_t,
+        struct sensor_cfg *);
+
+static const struct sensor_driver g_tsl2561_sensor_driver = {
+    tsl2561_sensor_get_interface,
+    tsl2561_sensor_read,
+    tsl2561_sensor_get_config
+};
+
 int
 tsl2561_write8(uint8_t reg, uint32_t value)
 {
@@ -151,7 +166,7 @@ tsl2561_read8(uint8_t reg, uint8_t *value)
                               OS_TICKS_PER_SEC / 10, 1);
     if (rc) {
         TSL2561_ERR("Failed to address sensor\n");
-        goto error;
+        goto err;
     }
 
     /* Read one byte back */
@@ -163,7 +178,7 @@ tsl2561_read8(uint8_t reg, uint8_t *value)
         TSL2561_ERR("Failed to read @0x%02X\n", reg);
     }
 
-error:
+err:
     return rc;
 }
 
@@ -184,7 +199,7 @@ tsl2561_read16(uint8_t reg, uint16_t *value)
                               OS_TICKS_PER_SEC / 10, 1);
     if (rc) {
         TSL2561_ERR("Failed to address sensor\n");
-        goto error;
+        goto err;
     }
 
     /* Read two bytes back */
@@ -195,53 +210,28 @@ tsl2561_read16(uint8_t reg, uint16_t *value)
     *value = (uint16_t)payload[0] | ((uint16_t)payload[1] << 8);
     if (rc) {
         TSL2561_ERR("Failed to read @0x%02X\n", reg);
-        goto error;
+        goto err;
     }
 
-    /* ToDo: Log raw reads */
-    // console_printf("0x%04X\n", (uint16_t)payload[0] | ((uint16_t)payload[1] << 8));
-
-error:
+err:
     return rc;
 }
 
 int
-tsl2561_enable(uint8_t state)
-{
-    int rc;
-
-    /* Enable the device by setting the control bit to 0x03 */
-    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_CONTROL,
-                        state ? TSL2561_CONTROL_POWERON :
-                                TSL2561_CONTROL_POWEROFF);
-    if (!rc) {
-        g_tsl2561_enabled = state ? 1 : 0;
-    }
-
-    return rc;
-}
-
-uint8_t
-tsl2561_get_enable (void)
-{
-    return g_tsl2561_enabled;
-}
-
-int
-tsl2561_get_data(uint16_t *broadband, uint16_t *ir)
+tsl2561_get_data(uint16_t *broadband, uint16_t *ir, struct tsl2561 *tsl2561)
 {
     int rc;
     int delay_ticks;
 
     /* Wait integration time ms before getting a data sample */
-    switch (g_tsl2561_integration_time) {
-        case TSL2561_INTEGRATIONTIME_13MS:
+    switch (tsl2561->cfg.integration_time) {
+        case TSL2561_LIGHT_ITIME_13MS:
             delay_ticks = 14 * OS_TICKS_PER_SEC / 1000;
         break;
-        case TSL2561_INTEGRATIONTIME_101MS:
+        case TSL2561_LIGHT_ITIME_101MS:
             delay_ticks = 102 * OS_TICKS_PER_SEC / 1000;
         break;
-        case TSL2561_INTEGRATIONTIME_402MS:
+        case TSL2561_LIGHT_ITIME_402MS:
         default:
             delay_ticks = 403 * OS_TICKS_PER_SEC / 1000;
         break;
@@ -252,85 +242,33 @@ tsl2561_get_data(uint16_t *broadband, uint16_t *ir)
     rc = tsl2561_read16(TSL2561_COMMAND_BIT | TSL2561_WORD_BIT | TSL2561_REGISTER_CHAN0_LOW,
                         broadband);
     if (rc) {
-        goto error;
+        goto err;
     }
     rc = tsl2561_read16(TSL2561_COMMAND_BIT | TSL2561_WORD_BIT | TSL2561_REGISTER_CHAN1_LOW,
                         ir);
     if (rc) {
-        goto error;
+        goto err;
     }
 
 #if MYNEWT_VAL(TSL2561_STATS)
-    switch (g_tsl2561_integration_time) {
-        case TSL2561_INTEGRATIONTIME_13MS:
+    switch (tsl2561->cfg.integration_time) {
+        case TSL2561_LIGHT_ITIME_13MS:
             STATS_INC(g_tsl2561stats, samples_13ms);
         break;
-        case TSL2561_INTEGRATIONTIME_101MS:
+        case TSL2561_LIGHT_ITIME_101MS:
             STATS_INC(g_tsl2561stats, samples_101ms);
         break;
-        case TSL2561_INTEGRATIONTIME_402MS:
+        case TSL2561_LIGHT_ITIME_402MS:
             STATS_INC(g_tsl2561stats, samples_402ms);
         default:
         break;
     }
 #endif
 
-error:
-    return rc;
-}
-
-int
-tsl2561_set_integration_time(uint8_t int_time)
-{
-    int rc;
-
-    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING,
-                        g_tsl2561_integration_time | g_tsl2561_gain);
-    if (rc) {
-        goto error;
-    }
-
-    g_tsl2561_integration_time = int_time;
-
-error:
+err:
     return rc;
 }
 
-uint8_t
-tsl2561_get_integration_time(void)
-{
-    return g_tsl2561_integration_time;
-}
-
-int
-tsl2561_set_gain(uint8_t gain)
-{
-    int rc;
-
-    if ((gain != TSL2561_GAIN_1X) && (gain != TSL2561_GAIN_16X)) {
-        TSL2561_ERR("Invalid gain value\n");
-        rc = EINVAL;
-        goto error;
-    }
-
-    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING,
-                        g_tsl2561_integration_time | gain);
-    if (rc) {
-        goto error;
-    }
-
-    g_tsl2561_gain = gain;
-
-error:
-    return rc;
-}
-
-uint8_t
-tsl2561_get_gain(void)
-{
-    return g_tsl2561_gain;
-}
-
 int tsl2561_setup_interrupt (uint8_t rate, uint16_t lower, uint16_t upper)
 {
     int rc;
@@ -340,30 +278,30 @@ int tsl2561_setup_interrupt (uint8_t rate, uint16_t lower, uint16_t upper)
     rc = tsl2561_write16(TSL2561_COMMAND_BIT | TSL2561_WORD_BIT | TSL2561_REGISTER_THRESHHOLDL_LOW,
                          lower);
     if (rc) {
-        goto error;
+        goto err;
     }
 
     /* Set upper threshold */
     rc = tsl2561_write16(TSL2561_COMMAND_BIT | TSL2561_WORD_BIT | TSL2561_REGISTER_THRESHHOLDH_LOW,
                          upper);
     if (rc) {
-        goto error;
+        goto err;
     }
 
     /* Set rate */
     rc = tsl2561_read8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_INTERRUPT, &intval);
     if (rc) {
-        goto error;
+        goto err;
     }
     /* Maintain the INTR Control Select bits */
     rate = (intval & 0xF0) | (rate & 0xF);
     rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_INTERRUPT,
                         rate);
     if (rc) {
-        goto error;
+        goto err;
     }
 
-error:
+err:
     return rc;
 }
 
@@ -375,24 +313,24 @@ int tsl2561_enable_interrupt (uint8_t enable)
     if (enable > 1) {
         TSL2561_ERR("Invalid value 0x%02X in tsl2561_enable_interrupt\n",
                     enable);
-        rc = EINVAL;
-        goto error;
+        rc = SYS_EINVAL;
+        goto err;
     }
 
     /* Read the current value to maintain PERSIST state */
     rc = tsl2561_read8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_INTERRUPT, &persist_val);
     if (rc) {
-        goto error;
+        goto err;
     }
 
     /* Enable (1) or disable (0)  level interrupts */
     rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_INTERRUPT,
                         ((enable & 0x01) << 4) | (persist_val & 0x0F) );
     if (rc) {
-        goto error;
+        goto err;
     }
 
-error:
+err:
     return rc;
 }
 
@@ -411,34 +349,31 @@ int tsl2561_clear_interrupt (void)
     rc = hal_i2c_master_write(MYNEWT_VAL(TSL2561_I2CBUS), &data_struct,
                               OS_TICKS_PER_SEC / 10, 1);
     if (rc) {
-        goto error;
+        goto err;
     }
 
 #if MYNEWT_VAL(TSL2561_STATS)
     STATS_INC(g_tsl2561stats, ints_cleared);
 #endif
 
-error:
+err:
     return rc;
 }
 
-void
-tsl2561_init(void)
+int
+tsl2561_init(struct os_dev *dev, void *arg)
 {
+    struct tsl2561 *tsl2561;
+    struct sensor *sensor;
     int rc;
 
-#if !MYNEWT_VAL(TSL2561_TASK)
-    return;
-#endif
+    tsl2561 = (struct tsl2561 *) dev;
 
 #if MYNEWT_VAL(TSL2561_LOG)
     log_register("tsl2561", &_log, &log_console_handler, NULL, LOG_SYSLEVEL);
 #endif
 
-#if MYNEWT_VAL(TSL2561_CLI)
-    rc = tsl2561_shell_init();
-    SYSINIT_PANIC_ASSERT(rc == 0);
-#endif
+    sensor = &tsl2561->sensor;
 
 #if MYNEWT_VAL(TSL2561_STATS)
     /* Initialise the stats entry */
@@ -451,14 +386,255 @@ tsl2561_init(void)
     rc = stats_register("tsl2561", STATS_HDR(g_tsl2561stats));
     SYSINIT_PANIC_ASSERT(rc == 0);
 #endif
+    rc = sensor_init(sensor, dev);
+    if (rc != 0) {
+        goto err;
+    }
 
-    /* Enable the device by default */
-    rc = tsl2561_enable(1);
-    SYSINIT_PANIC_ASSERT(rc == 0);
+    /* Add the light driver */
+    rc = sensor_set_driver(sensor, SENSOR_TYPE_LIGHT,
+            (struct sensor_driver *) &g_tsl2561_sensor_driver);
+    if (rc != 0) {
+        goto err;
+    }
 
-    rc = tsl2561_set_gain(TSL2561_GAIN_1X);
-    SYSINIT_PANIC_ASSERT(rc == 0);
+    rc = sensor_mgr_register(sensor);
+    if (rc != 0) {
+        goto err;
+    }
 
-    rc = tsl2561_set_integration_time(TSL2561_INTEGRATIONTIME_13MS);
-    SYSINIT_PANIC_ASSERT(rc == 0);
+    return (0);
+err:
+    return (rc);
+
+}
+
+static void *
+tsl2561_sensor_get_interface(struct sensor *sensor, sensor_type_t type)
+{
+    return (NULL);
+}
+
+static uint32_t
+tsl2561_calculate_lux(uint16_t broadband, uint16_t ir, struct tsl2561_cfg *cfg)
+{
+    uint64_t chscale;
+    uint64_t channel1;
+    uint64_t channel0;
+    uint16_t clipthreshold;
+    uint64_t ratio1;
+    uint64_t ratio;
+    int64_t  b, m;
+    uint64_t temp;
+    uint32_t lux;
+
+    /* Make sure the sensor isn't saturated! */
+    switch (cfg->integration_time) {
+        case TSL2561_LIGHT_ITIME_13MS:
+            clipthreshold = TSL2561_CLIPPING_13MS;
+            break;
+        case TSL2561_LIGHT_ITIME_101MS:
+            clipthreshold = TSL2561_CLIPPING_101MS;
+            break;
+        default:
+            clipthreshold = TSL2561_CLIPPING_402MS;
+            break;
+    }
+
+    /* Return 65536 lux if the sensor is saturated */
+    if ((broadband > clipthreshold) || (ir > clipthreshold)) {
+        return 65536;
+    }
+
+    /* Get the correct scale depending on the intergration time */
+    switch (cfg->integration_time) {
+        case TSL2561_LIGHT_ITIME_13MS:
+            chscale = TSL2561_LUX_CHSCALE_TINT0;
+            break;
+        case TSL2561_LIGHT_ITIME_101MS:
+            chscale = TSL2561_LUX_CHSCALE_TINT1;
+            break;
+        default: /* No scaling ... integration time = 402ms */
+            chscale = (1 << TSL2561_LUX_CHSCALE);
+            break;
+    }
+
+    /* Scale for gain (1x or 16x) */
+    if (!cfg->gain) {
+        chscale = chscale << 4;
+    }
+
+    /* Scale the channel values */
+    channel0 = (broadband * chscale) >> TSL2561_LUX_CHSCALE;
+    channel1 = (ir * chscale) >> TSL2561_LUX_CHSCALE;
+
+    ratio1 = 0;
+    /* Find the ratio of the channel values (Channel1/Channel0) */
+    if (channel0 != 0) {
+        ratio1 = (channel1 << (TSL2561_LUX_RATIOSCALE+1)) / channel0;
+    }
+
+    /* round the ratio value */
+    ratio = (ratio1 + 1) >> 1;
+
+#if MYNEWT_VAL(TSL2561_PACKAGE_CS)
+    if ((ratio >= 0) && (ratio <= TSL2561_LUX_K1C)) {
+        b = TSL2561_LUX_B1C;
+        m = TSL2561_LUX_M1C;
+    } else if (ratio <= TSL2561_LUX_K2C) {
+        b = TSL2561_LUX_B2C;
+        m = TSL2561_LUX_M2C;
+    } else if (ratio <= TSL2561_LUX_K3C) {
+        b = TSL2561_LUX_B3C;
+        m = TSL2561_LUX_M3C;
+    } else if (ratio <= TSL2561_LUX_K4C) {
+        b = TSL2561_LUX_B4C;
+        m = TSL2561_LUX_M4C;
+    } else if (ratio <= TSL2561_LUX_K5C) {
+        b = TSL2561_LUX_B5C;
+        m = TSL2561_LUX_M5C;
+    } else if (ratio <= TSL2561_LUX_K6C) {
+        b = TSL2561_LUX_B6C;
+        m = TSL2561_LUX_M6C;
+    } else if (ratio <= TSL2561_LUX_K7C) {
+        b = TSL2561_LUX_B7C;
+        m = TSL2561_LUX_M7C;
+    } else if (ratio > TSL2561_LUX_K8C) {
+        b = TSL2561_LUX_B8C;
+        m = TSL2561_LUX_M8C;
+    }
+#else
+    if ((ratio >= 0) && (ratio <= TSL2561_LUX_K1T)) {
+        b = TSL2561_LUX_B1T;
+        m = TSL2561_LUX_M1T;
+    } else if (ratio <= TSL2561_LUX_K2T) {
+        b = TSL2561_LUX_B2T;
+        m = TSL2561_LUX_M2T;
+    } else if (ratio <= TSL2561_LUX_K3T) {
+        b = TSL2561_LUX_B3T;
+        m = TSL2561_LUX_M3T;
+    } else if (ratio <= TSL2561_LUX_K4T) {
+        b = TSL2561_LUX_B4T;
+        m = TSL2561_LUX_M4T;
+    } else if (ratio <= TSL2561_LUX_K5T) {
+        b = TSL2561_LUX_B5T;
+        m = TSL2561_LUX_M5T;
+    } else if (ratio <= TSL2561_LUX_K6T) {
+        b = TSL2561_LUX_B6T;
+        m = TSL2561_LUX_M6T;
+    } else if (ratio <= TSL2561_LUX_K7T) {
+        b = TSL2561_LUX_B7T;
+        m = TSL2561_LUX_M7T;
+    } else if (ratio > TSL2561_LUX_K8T) {
+        b = TSL2561_LUX_B8T;
+        m = TSL2561_LUX_M8T;
+    }
+#endif
+
+    temp = ((channel0 * b) - (channel1 * m));
+
+    /* Do not allow negative lux value */
+    if (temp < 0) {
+        temp = 0;
+    }
+    /* Round lsb (2^(LUX_SCALE-1)) */
+    temp += (1 << (TSL2561_LUX_LUXSCALE - 1));
+
+    /* Strip off fractional portion */
+    lux = temp >> TSL2561_LUX_LUXSCALE;
+
+    return lux;
+}
+
+static int
+tsl2561_sensor_read(struct sensor *sensor, sensor_type_t type,
+        sensor_data_func_t data_func, void *data_arg, uint32_t timeout)
+{
+    struct tsl2561 *tsl2561;
+    struct sensor_light_data sld;
+    uint16_t full;
+    uint16_t ir;
+    uint32_t lux;
+    int rc;
+
+    /* If the read isn't looking for accel or mag data, don't do anything. */
+    if (!(type & SENSOR_TYPE_LIGHT)) {
+        rc = SYS_EINVAL;
+        goto err;
+    }
+
+    tsl2561 = (struct tsl2561 *) SENSOR_GET_DEVICE(sensor);
+
+    /* Get a new accelerometer sample */
+    if (type & SENSOR_TYPE_LIGHT) {
+        full = ir = 0;
+
+        rc = tsl2561_get_data(&full, &ir, tsl2561);
+        if (rc) {
+            goto err;
+        }
+
+        lux = tsl2561_calculate_lux(full, ir, &(tsl2561->cfg));
+        sld.sld_full = full;
+        sld.sld_ir = ir;
+        sld.sld_lux = lux;
+
+        /* Call data function */
+        rc = data_func(sensor, data_arg, &sld);
+        if (rc != 0) {
+            goto err;
+        }
+    }
+
+    return 0;
+err:
+    return rc;
+}
+
+static int
+tsl2561_sensor_get_config(struct sensor *sensor, sensor_type_t type,
+        struct sensor_cfg *cfg)
+{
+    int rc;
+
+    if ((type != SENSOR_TYPE_LIGHT)) {
+        rc = SYS_EINVAL;
+        goto err;
+    }
+
+    cfg->sc_valtype = SENSOR_VALUE_TYPE_INT32;
+
+    return (0);
+err:
+    return (rc);
+}
+
+int
+tsl2561_config(struct tsl2561 *tsl2561, struct tsl2561_cfg *cfg)
+{
+    int rc;
+
+    if ((cfg->gain != TSL2561_LIGHT_GAIN_1X) &&
+        (cfg->gain != TSL2561_LIGHT_GAIN_16X)) {
+        TSL2561_ERR("Invalid gain value\n");
+        rc = SYS_EINVAL;
+        goto err;
+    }
+
+    /* Overwrite the configuration data. */
+    memcpy(&tsl2561->cfg, cfg, sizeof(*cfg));
+
+    /* Enable the device by setting the control bit to 0x03 */
+    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_CONTROL,
+                        TSL2561_CONTROL_POWERON);
+
+    /* Set integration time and gain */
+    rc = tsl2561_write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_TIMING,
+                        cfg->integration_time | cfg->gain);
+    if (rc) {
+        goto err;
+    }
+
+err:
+    return (rc);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9f59c4f0/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h b/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h
index 5ead614..7d92d5f 100644
--- a/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h
+++ b/hw/drivers/sensors/tsl2561/src/tsl2561_priv.h
@@ -49,16 +49,6 @@
 #define TSL2561_REGISTER_CHAN1_LOW        (0x0E)
 #define TSL2561_REGISTER_CHAN1_HIGH       (0x0F)
 
-#define TSL2561_CONTROL_POWERON           (0x03)
-#define TSL2561_CONTROL_POWEROFF          (0x00)
-
-#define TSL2561_INTEGRATIONTIME_13MS      (0x00)  /* 13.7ms */
-#define TSL2561_INTEGRATIONTIME_101MS     (0x01)  /* 101ms */
-#define TSL2561_INTEGRATIONTIME_402MS     (0x02)  /* 402ms */
-
-#define TSL2561_GAIN_1X                   (0x00)  /* No gain */
-#define TSL2561_GAIN_16X                  (0x10)  /* 16x gain */
-
 #define TSL2561_COMMAND_BIT               (0x80)  /* Must be 1 */
 #define TSL2561_CLEAR_BIT                 (0x40)  /* 1=Clear any pending int */
 #define TSL2561_WORD_BIT                  (0x20)  /* 1=Read/write word */
@@ -67,6 +57,77 @@
 #define TSL2561_CONTROL_POWERON           (0x03)
 #define TSL2561_CONTROL_POWEROFF          (0x00)
 
+#define TSL2561_LUX_LUXSCALE              (14)      // Scale by 2^14
+#define TSL2561_LUX_RATIOSCALE            (9)       // Scale ratio by 2^9
+#define TSL2561_LUX_CHSCALE               (10)      // Scale channel values by 2^10
+#define TSL2561_LUX_CHSCALE_TINT0         (0x7517)  // 322/11 * 2^TSL2561_LUX_CHSCALE
+#define TSL2561_LUX_CHSCALE_TINT1         (0x0FE7)  // 322/81 * 2^TSL2561_LUX_CHSCALE
+
+// T, FN and CL package values
+#define TSL2561_LUX_K1T                   (0x0040)  // 0.125 * 2^RATIO_SCALE
+#define TSL2561_LUX_B1T                   (0x01f2)  // 0.0304 * 2^LUX_SCALE
+#define TSL2561_LUX_M1T                   (0x01be)  // 0.0272 * 2^LUX_SCALE
+#define TSL2561_LUX_K2T                   (0x0080)  // 0.250 * 2^RATIO_SCALE
+#define TSL2561_LUX_B2T                   (0x0214)  // 0.0325 * 2^LUX_SCALE
+#define TSL2561_LUX_M2T                   (0x02d1)  // 0.0440 * 2^LUX_SCALE
+#define TSL2561_LUX_K3T                   (0x00c0)  // 0.375 * 2^RATIO_SCALE
+#define TSL2561_LUX_B3T                   (0x023f)  // 0.0351 * 2^LUX_SCALE
+#define TSL2561_LUX_M3T                   (0x037b)  // 0.0544 * 2^LUX_SCALE
+#define TSL2561_LUX_K4T                   (0x0100)  // 0.50 * 2^RATIO_SCALE
+#define TSL2561_LUX_B4T                   (0x0270)  // 0.0381 * 2^LUX_SCALE
+#define TSL2561_LUX_M4T                   (0x03fe)  // 0.0624 * 2^LUX_SCALE
+#define TSL2561_LUX_K5T                   (0x0138)  // 0.61 * 2^RATIO_SCALE
+#define TSL2561_LUX_B5T                   (0x016f)  // 0.0224 * 2^LUX_SCALE
+#define TSL2561_LUX_M5T                   (0x01fc)  // 0.0310 * 2^LUX_SCALE
+#define TSL2561_LUX_K6T                   (0x019a)  // 0.80 * 2^RATIO_SCALE
+#define TSL2561_LUX_B6T                   (0x00d2)  // 0.0128 * 2^LUX_SCALE
+#define TSL2561_LUX_M6T                   (0x00fb)  // 0.0153 * 2^LUX_SCALE
+#define TSL2561_LUX_K7T                   (0x029a)  // 1.3 * 2^RATIO_SCALE
+#define TSL2561_LUX_B7T                   (0x0018)  // 0.00146 * 2^LUX_SCALE
+#define TSL2561_LUX_M7T                   (0x0012)  // 0.00112 * 2^LUX_SCALE
+#define TSL2561_LUX_K8T                   (0x029a)  // 1.3 * 2^RATIO_SCALE
+#define TSL2561_LUX_B8T                   (0x0000)  // 0.000 * 2^LUX_SCALE
+#define TSL2561_LUX_M8T                   (0x0000)  // 0.000 * 2^LUX_SCALE
+
+// CS package values
+#define TSL2561_LUX_K1C                   (0x0043)  // 0.130 * 2^RATIO_SCALE
+#define TSL2561_LUX_B1C                   (0x0204)  // 0.0315 * 2^LUX_SCALE
+#define TSL2561_LUX_M1C                   (0x01ad)  // 0.0262 * 2^LUX_SCALE
+#define TSL2561_LUX_K2C                   (0x0085)  // 0.260 * 2^RATIO_SCALE
+#define TSL2561_LUX_B2C                   (0x0228)  // 0.0337 * 2^LUX_SCALE
+#define TSL2561_LUX_M2C                   (0x02c1)  // 0.0430 * 2^LUX_SCALE
+#define TSL2561_LUX_K3C                   (0x00c8)  // 0.390 * 2^RATIO_SCALE
+#define TSL2561_LUX_B3C                   (0x0253)  // 0.0363 * 2^LUX_SCALE
+#define TSL2561_LUX_M3C                   (0x0363)  // 0.0529 * 2^LUX_SCALE
+#define TSL2561_LUX_K4C                   (0x010a)  // 0.520 * 2^RATIO_SCALE
+#define TSL2561_LUX_B4C                   (0x0282)  // 0.0392 * 2^LUX_SCALE
+#define TSL2561_LUX_M4C                   (0x03df)  // 0.0605 * 2^LUX_SCALE
+#define TSL2561_LUX_K5C                   (0x014d)  // 0.65 * 2^RATIO_SCALE
+#define TSL2561_LUX_B5C                   (0x0177)  // 0.0229 * 2^LUX_SCALE
+#define TSL2561_LUX_M5C                   (0x01dd)  // 0.0291 * 2^LUX_SCALE
+#define TSL2561_LUX_K6C                   (0x019a)  // 0.80 * 2^RATIO_SCALE
+#define TSL2561_LUX_B6C                   (0x0101)  // 0.0157 * 2^LUX_SCALE
+#define TSL2561_LUX_M6C                   (0x0127)  // 0.0180 * 2^LUX_SCALE
+#define TSL2561_LUX_K7C                   (0x029a)  // 1.3 * 2^RATIO_SCALE
+#define TSL2561_LUX_B7C                   (0x0037)  // 0.00338 * 2^LUX_SCALE
+#define TSL2561_LUX_M7C                   (0x002b)  // 0.00260 * 2^LUX_SCALE
+#define TSL2561_LUX_K8C                   (0x029a)  // 1.3 * 2^RATIO_SCALE
+#define TSL2561_LUX_B8C                   (0x0000)  // 0.000 * 2^LUX_SCALE
+#define TSL2561_LUX_M8C                   (0x0000)  // 0.000 * 2^LUX_SCALE
+
+// Auto-gain thresholds
+#define TSL2561_AGC_THI_13MS              (4850)    // Max value at Ti 13ms = 5047
+#define TSL2561_AGC_TLO_13MS              (100)
+#define TSL2561_AGC_THI_101MS             (36000)   // Max value at Ti 101ms = 37177
+#define TSL2561_AGC_TLO_101MS             (200)
+#define TSL2561_AGC_THI_402MS             (63000)   // Max value at Ti 402ms = 65535
+#define TSL2561_AGC_TLO_402MS             (500)
+
+// Clipping thresholds
+#define TSL2561_CLIPPING_13MS             (4900)
+#define TSL2561_CLIPPING_101MS            (37000)
+#define TSL2561_CLIPPING_402MS            (65000)
+
 #ifdef __cplusplus
 extern "C" {
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9f59c4f0/hw/drivers/sensors/tsl2561/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/syscfg.yml b/hw/drivers/sensors/tsl2561/syscfg.yml
index f6e6801..d507b79 100644
--- a/hw/drivers/sensors/tsl2561/syscfg.yml
+++ b/hw/drivers/sensors/tsl2561/syscfg.yml
@@ -21,9 +21,6 @@
 # SOFTWARE.
 
 syscfg.defs:
-    TSL2561_TASK:
-        description: 'Enable the TSL2561 sensor driver'
-        value: 0
     TSL2561_I2CADDR:
         description: 'HW I2C address for the TSL2561 (0x29, 0x39 or 0x49)'
         value: 0x39

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9f59c4f0/hw/sensor/include/sensor/light.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/light.h b/hw/sensor/include/sensor/light.h
new file mode 100644
index 0000000..677f5c4
--- /dev/null
+++ b/hw/sensor/include/sensor/light.h
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef __SENSOR_LIGHT_H__
+#define __SENSOR_LIGHT_H__
+
+#include "os/os.h"
+#include "os/os_dev.h"
+#include "sensor/sensor.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Data representing a singular read from a luminosity sensor.
+ * All data is in lux
+ */
+struct sensor_light_data {
+    uint16_t sld_full;
+    uint16_t sld_ir;
+    uint32_t sld_lux;
+} __attribute__((packed));
+
+/**
+ * Luminosity Sensor data is unused for this field.
+ */
+#define SENSOR_LIGHT_DATA_UNUSED (-1)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SENSOR_LIGHT_H__ */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9f59c4f0/hw/sensor/src/sensor_shell.c
----------------------------------------------------------------------
diff --git a/hw/sensor/src/sensor_shell.c b/hw/sensor/src/sensor_shell.c
index 6312f81..c2c68b1 100644
--- a/hw/sensor/src/sensor_shell.c
+++ b/hw/sensor/src/sensor_shell.c
@@ -33,6 +33,7 @@
 #include "sensor/sensor.h"
 #include "sensor/accel.h"
 #include "sensor/mag.h"
+#include "sensor/light.h"
 #include "console/console.h"
 #include "shell/shell.h"
 
@@ -96,6 +97,7 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
     struct sensor_shell_read_ctx *ctx;
     struct sensor_accel_data *sad;
     struct sensor_mag_data *smd;
+    struct sensor_light_data *sld;
     char tmpstr[13];
 
     ctx = (struct sensor_shell_read_ctx *) arg;
@@ -130,6 +132,20 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
         console_printf("\n");
     }
 
+    if (ctx->type == SENSOR_TYPE_LIGHT) {
+        sld = (struct sensor_light_data *) data;
+        if (sld->sld_full != SENSOR_LIGHT_DATA_UNUSED) {
+            console_printf("Full = %u, ", sld->sld_full);
+        }
+        if (sld->sld_ir != SENSOR_LIGHT_DATA_UNUSED) {
+            console_printf("IR = %u, ", sld->sld_ir);
+        }
+        if (sld->sld_lux != SENSOR_LIGHT_DATA_UNUSED) {
+            console_printf("Lux = %u, ", (unsigned int)sld->sld_lux);
+        }
+        console_printf("\n");
+    }
+
     return (0);
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9f59c4f0/sys/shell/src/shell.c
----------------------------------------------------------------------
diff --git a/sys/shell/src/shell.c b/sys/shell/src/shell.c
index f11086b..bc8554e 100644
--- a/sys/shell/src/shell.c
+++ b/sys/shell/src/shell.c
@@ -211,7 +211,7 @@ err:
 static int
 shell_cmd(char *cmd, char **argv, int argc)
 {
-    struct shell_cmd *sc;
+    struct shell_cmd *sc = NULL;
     int rc;
 
     rc = shell_cmd_find(cmd, &sc);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9f59c4f0/sys/shell/syscfg.yml
----------------------------------------------------------------------
diff --git a/sys/shell/syscfg.yml b/sys/shell/syscfg.yml
index c495c58..236a20d 100644
--- a/sys/shell/syscfg.yml
+++ b/sys/shell/syscfg.yml
@@ -27,4 +27,4 @@ syscfg.defs:
         value: 256
     SHELL_DEBUG:
         description: Enables additional error checking in the shell package.
-        value: 1
+        value: 0


[50/50] incubator-mynewt-core git commit: Merge branch 'sensors_branch' of https://github.com/vrahane/incubator-mynewt-core into develop

Posted by vi...@apache.org.
Merge branch 'sensors_branch' of https://github.com/vrahane/incubator-mynewt-core into develop


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/514797cc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/514797cc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/514797cc

Branch: refs/heads/develop
Commit: 514797cc3dc3e4aae06198d7300f621a3a04ba76
Parents: 57fc68b 9cc6a78
Author: Vipul Rahane <vi...@apache.org>
Authored: Fri Feb 24 11:37:12 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Fri Feb 24 11:37:12 2017 -0800

----------------------------------------------------------------------
 apps/bletiny/src/gatt_svr.c                     |    4 +-
 apps/sensors_test/pkg.yml                       |   51 +
 apps/sensors_test/src/main.c                    |  437 ++++++++
 apps/sensors_test/syscfg.yml                    |   57 +
 hw/bsp/native/src/hal_bsp.c                     |   13 +
 .../sensors/bno055/include/bno055/bno055.h      |  291 +++++
 hw/drivers/sensors/bno055/pkg.yml               |   32 +
 hw/drivers/sensors/bno055/src/bno055.c          | 1046 ++++++++++++++++++
 hw/drivers/sensors/bno055/src/bno055_priv.h     |  221 ++++
 hw/drivers/sensors/bno055/src/bno055_shell.c    |  507 +++++++++
 hw/drivers/sensors/bno055/syscfg.yml            |   35 +
 .../lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h  |   92 ++
 hw/drivers/sensors/lsm303dlhc/pkg.yml           |   24 +
 hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c  |  543 +++++++++
 .../sensors/lsm303dlhc/src/lsm303dlhc_priv.h    |   89 ++
 hw/drivers/sensors/lsm303dlhc/syscfg.yml        |   32 +
 hw/drivers/sensors/sim/include/sim/sim_accel.h  |   50 +
 hw/drivers/sensors/sim/include/sim/sim_mag.h    |   50 +
 hw/drivers/sensors/sim/pkg.yml                  |   25 +
 hw/drivers/sensors/sim/src/generic_accel.c      |  178 +++
 hw/drivers/sensors/sim/src/generic_mag.c        |  177 +++
 .../sensors/tsl2561/include/tsl2561/tsl2561.h   |  201 ++++
 hw/drivers/sensors/tsl2561/pkg.yml              |   35 +
 hw/drivers/sensors/tsl2561/src/tsl2561.c        |  724 ++++++++++++
 hw/drivers/sensors/tsl2561/src/tsl2561_priv.h   |  146 +++
 hw/drivers/sensors/tsl2561/src/tsl2561_shell.c  |  434 ++++++++
 hw/drivers/sensors/tsl2561/syscfg.yml           |   38 +
 hw/sensor/include/sensor/accel.h                |   49 +
 hw/sensor/include/sensor/euler.h                |   50 +
 hw/sensor/include/sensor/light.h                |   49 +
 hw/sensor/include/sensor/mag.h                  |   49 +
 hw/sensor/include/sensor/quat.h                 |   50 +
 hw/sensor/include/sensor/sensor.h               |  345 ++++++
 hw/sensor/pkg.yml                               |   28 +
 hw/sensor/src/sensor.c                          |  573 ++++++++++
 hw/sensor/src/sensor_priv.h                     |   29 +
 hw/sensor/src/sensor_shell.c                    |  288 +++++
 hw/sensor/syscfg.yml                            |   28 +
 sys/shell/src/shell.c                           |    2 +-
 sys/shell/syscfg.yml                            |    2 +-
 40 files changed, 7070 insertions(+), 4 deletions(-)
----------------------------------------------------------------------



[03/50] incubator-mynewt-core git commit: os; add owner task to eventq structure. Assert if os_eventq_get() is not done by owner.

Posted by vi...@apache.org.
os; add owner task to eventq structure. Assert if os_eventq_get()
is not done by owner.


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/429ab09c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/429ab09c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/429ab09c

Branch: refs/heads/develop
Commit: 429ab09cb69749781290825764f01636ec0ff149
Parents: 7bdbd5e
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Thu Dec 15 11:02:47 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Sun Dec 18 13:56:17 2016 -0800

----------------------------------------------------------------------
 kernel/os/include/os/os_eventq.h |  3 ++-
 kernel/os/src/os_eventq.c        | 13 ++++++++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/429ab09c/kernel/os/include/os/os_eventq.h
----------------------------------------------------------------------
diff --git a/kernel/os/include/os/os_eventq.h b/kernel/os/include/os/os_eventq.h
index 87b93ea..cfe0d34 100644
--- a/kernel/os/include/os/os_eventq.h
+++ b/kernel/os/include/os/os_eventq.h
@@ -41,7 +41,8 @@ struct os_event {
 #define OS_EVENT_QUEUED(__ev) ((__ev)->ev_queued)
 
 struct os_eventq {
-    struct os_task *evq_task;
+    struct os_task *evq_owner;  /* owner task */
+    struct os_task *evq_task;   /* sleeper; must be either NULL, or the owner */
     STAILQ_HEAD(, os_event) evq_list;
 };
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/429ab09c/kernel/os/src/os_eventq.c
----------------------------------------------------------------------
diff --git a/kernel/os/src/os_eventq.c b/kernel/os/src/os_eventq.c
index 1e76c7c..d443dfd 100644
--- a/kernel/os/src/os_eventq.c
+++ b/kernel/os/src/os_eventq.c
@@ -111,10 +111,21 @@ os_eventq_get(struct os_eventq *evq)
     os_sr_t sr;
     struct os_task *t;
 
+    t = os_sched_get_current_task();
+    if (evq->evq_owner != t) {
+        if (evq->evq_owner == NULL) {
+            evq->evq_owner = t;
+        } else {
+            /*
+             * A task is trying to read from event queue which is handled
+             * by another.
+             */
+            assert(0);
+        }
+    }
     OS_ENTER_CRITICAL(sr);
 pull_one:
     ev = STAILQ_FIRST(&evq->evq_list);
-    t = os_sched_get_current_task();
     if (ev) {
         STAILQ_REMOVE(&evq->evq_list, ev, os_event, ev_next);
         ev->ev_queued = 0;


[12/50] incubator-mynewt-core git commit: don't make shell command a const, it is inserted into a list.

Posted by vi...@apache.org.
don't make shell command a const, it is inserted into a list.


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/7fdea476
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/7fdea476
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/7fdea476

Branch: refs/heads/develop
Commit: 7fdea47688d1f5255dfc0537c37250fb954ae668
Parents: f6b1db0
Author: Sterling Hughes <st...@apache.org>
Authored: Sun Dec 18 14:51:23 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Sun Dec 18 14:51:23 2016 -0800

----------------------------------------------------------------------
 hw/sensor/src/sensor_shell.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/7fdea476/hw/sensor/src/sensor_shell.c
----------------------------------------------------------------------
diff --git a/hw/sensor/src/sensor_shell.c b/hw/sensor/src/sensor_shell.c
index e975da6..dfd926d 100644
--- a/hw/sensor/src/sensor_shell.c
+++ b/hw/sensor/src/sensor_shell.c
@@ -35,7 +35,7 @@
 #include "shell/shell.h"
 
 static int sensor_cmd_exec(int, char **);
-static const struct shell_cmd shell_sensor_cmd = {
+static struct shell_cmd shell_sensor_cmd = {
     .sc_cmd = "sensor",
     .sc_cmd_func = sensor_cmd_exec
 };


[43/50] incubator-mynewt-core git commit: SensorAPI: BNO055 Adding config to the sensor

Posted by vi...@apache.org.
SensorAPI: BNO055 Adding config to the sensor

- some cleanup as well


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/e4d0f04a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/e4d0f04a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/e4d0f04a

Branch: refs/heads/develop
Commit: e4d0f04a2b19691ed5b5e34a09d1d5f5d044ba2c
Parents: 30b53c0
Author: Vipul Rahane <vi...@apache.org>
Authored: Tue Feb 21 18:22:45 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Tue Feb 21 18:22:45 2017 -0800

----------------------------------------------------------------------
 apps/slinky/src/main.c                          |   8 +
 hw/bsp/nrf52dk/src/hal_bsp.c                    |  49 ++++++
 .../sensors/bno055/include/bno055/bno055.h      | 165 +++++++++++++++----
 hw/drivers/sensors/bno055/src/bno055.c          | 155 ++++++++++-------
 hw/drivers/sensors/bno055/src/bno055_priv.h     |  94 -----------
 hw/drivers/sensors/bno055/src/bno055_shell.c    |  19 ++-
 hw/sensor/include/sensor/euler.h                |   4 +-
 hw/sensor/src/sensor_shell.c                    |  50 +++++-
 8 files changed, 350 insertions(+), 194 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/e4d0f04a/apps/slinky/src/main.c
----------------------------------------------------------------------
diff --git a/apps/slinky/src/main.c b/apps/slinky/src/main.c
index 9eef0c0..1bbce7b 100755
--- a/apps/slinky/src/main.c
+++ b/apps/slinky/src/main.c
@@ -304,6 +304,14 @@ config_sensor(void)
         goto err;
     }
 
+    bcfg.bc_units = BNO055_ACC_UNIT_MS2   | BNO055_ANGRATE_UNIT_DPS |
+                  BNO055_EULER_UNIT_DEG | BNO055_TEMP_UNIT_DEGC   |
+                  BNO055_DO_FORMAT_ANDROID;
+
+    bcfg.bc_opr_mode = BNO055_OPR_MODE_ACCONLY;
+
+    bcfg.bc_pwr_mode = BNO055_PWR_MODE_NORMAL;
+
     rc = bno055_config((struct bno055 *) dev, &bcfg);
     if (rc) {
         os_dev_close(dev);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/e4d0f04a/hw/bsp/nrf52dk/src/hal_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf52dk/src/hal_bsp.c b/hw/bsp/nrf52dk/src/hal_bsp.c
index 40ce57b..a2909c3 100644
--- a/hw/bsp/nrf52dk/src/hal_bsp.c
+++ b/hw/bsp/nrf52dk/src/hal_bsp.c
@@ -42,6 +42,20 @@
 #endif
 #include "os/os_dev.h"
 #include "bsp.h"
+#include <lsm303dlhc/lsm303dlhc.h>
+#include <tsl2561/tsl2561.h>
+#include <bno055/bno055.h>
+
+#if MYNEWT_VAL(LSM303DLHC_PRESENT)
+static struct lsm303dlhc lsm303dlhc;
+#endif
+#if MYNEWT_VAL(TSL2561_PRESENT)
+static struct tsl2561 tsl2561;
+#endif
+#if MYNEWT_VAL(BNO055_PRESENT)
+static struct bno055 bno055;
+#endif
+
 
 #if MYNEWT_VAL(UART_0)
 static struct uart_dev os_bsp_uart0;
@@ -151,6 +165,23 @@ hal_bsp_get_nvic_priority(int irq_num, uint32_t pri)
     return cfg_pri;
 }
 
+#if MYNEWT_VAL(LSM303DLHC_PRESENT) || MYNEWT_VAL(BNO055_PRESENT)
+static int
+slinky_accel_init(struct os_dev *dev, void *arg)
+{
+    return (0);
+}
+#endif
+
+#if MYNEWT_VAL(TSL2561_PRESENT)
+static int
+slinky_light_init(struct os_dev *dev, void *arg)
+{
+    return (0);
+}
+#endif
+
+
 void
 hal_bsp_init(void)
 {
@@ -214,4 +245,22 @@ hal_bsp_init(void)
     assert(rc == 0);
 #endif
 
+#if MYNEWT_VAL(LSM303DLHC_PRESENT)
+    rc = os_dev_create((struct os_dev *) &lsm303dlhc, "accel0",
+            OS_DEV_INIT_KERNEL, OS_DEV_INIT_PRIMARY, slinky_accel_init, NULL);
+    assert(rc == 0);
+#endif
+
+#if MYNEWT_VAL(BNO055_PRESENT)
+    rc = os_dev_create((struct os_dev *) &bno055, "accel1",
+            OS_DEV_INIT_KERNEL, OS_DEV_INIT_PRIMARY, slinky_accel_init, NULL);
+    assert(rc == 0);
+#endif
+
+#if MYNEWT_VAL(TSL2561_PRESENT)
+    rc = os_dev_create((struct os_dev *) &tsl2561, "light0",
+            OS_DEV_INIT_KERNEL, OS_DEV_INIT_PRIMARY, slinky_light_init, NULL);
+    assert(rc == 0);
+#endif
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/e4d0f04a/hw/drivers/sensors/bno055/include/bno055/bno055.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/include/bno055/bno055.h b/hw/drivers/sensors/bno055/include/bno055/bno055.h
index 8aade64..b8ceb02 100644
--- a/hw/drivers/sensors/bno055/include/bno055/bno055.h
+++ b/hw/drivers/sensors/bno055/include/bno055/bno055.h
@@ -28,8 +28,106 @@
 extern "C" {
 #endif
 
+/* Power modes */
+#define BNO055_PWR_MODE_NORMAL                                  0X00
+#define BNO055_PWR_MODE_LOWPOWER                                0X01
+#define BNO055_PWR_MODE_SUSPEND                                 0X02
+
+/* Operation Modes */
+#define BNO055_OPR_MODE_CONFIG                                  0X00
+#define BNO055_OPR_MODE_ACCONLY                                 0X01
+#define BNO055_OPR_MODE_MAGONLY                                 0X02
+#define BNO055_OPR_MODE_GYRONLY                                 0X03
+#define BNO055_OPR_MODE_ACCMAG                                  0X04
+#define BNO055_OPR_MODE_ACCGYRO                                 0X05
+#define BNO055_OPR_MODE_MAGGYRO                                 0X06
+#define BNO055_OPR_MODE_AMG                                     0X07
+#define BNO055_OPR_MODE_IMUPLUS                                 0X08
+#define BNO055_OPR_MODE_COMPASS                                 0X09
+#define BNO055_OPR_MODE_M4G                                     0X0A
+#define BNO055_OPR_MODE_NDOF_FMC_OFF                            0X0B
+#define BNO055_OPR_MODE_NDOF                                    0X0C
+
+#define BNO055_ACC_UNIT_MS2                                      0x0
+#define BNO055_ACC_UNIT_MG                                       0x1
+#define BNO055_ANGRATE_UNIT_DPS                             (0 << 1)
+#define BNO055_ANGRATE_UNIT_RPS                             (1 << 1)
+#define BNO055_EULER_UNIT_DEG                               (0 << 2)
+#define BNO055_EULER_UNIT_RAD                               (1 << 2)
+#define BNO055_TEMP_UNIT_DEGC                               (0 << 4)
+#define BNO055_TEMP_UNIT_DEGF                               (1 << 4)
+#define BNO055_DO_FORMAT_WINDOWS                            (0 << 7)
+#define BNO055_DO_FORMAT_ANDROID                            (1 << 7)
+
+/* Accelerometer config */
+#define BNO055_ACC_CFG_2G                                        0x0
+#define BNO055_ACC_CFG_4G                                        0x1
+#define BNO055_ACC_CFG_8G                                        0x2
+#define BNO055_ACC_CFG_16G                                       0x3
+
+#define BNO055_ACC_CFG_BW_7_81HZ                          (0x0 << 2)
+#define BNO055_ACC_CFG_BW_15_63HZ                         (0x1 << 2)
+#define BNO055_ACC_CFG_BW_31_25HZ                         (0x2 << 2)
+#define BNO055_ACC_CFG_BW_6_25HZ                          (0x3 << 2)
+#define BNO055_ACC_CFG_BW_125HZ                           (0x4 << 2)
+#define BNO055_ACC_CFG_BW_250HZ                           (0x5 << 2)
+#define BNO055_ACC_CFG_BW_500HZ                           (0x6 << 2)
+#define BNO055_ACC_CFG_BW_1000HZ                          (0x7 << 2)
+
+#define BNO055_ACC_CFG_OPR_MODE_NORMAL                    (0x0 << 5)
+#define BNO055_ACC_CFG_OPR_MODE_SUSPEND                   (0x1 << 5)
+#define BNO055_ACC_CFG_OPR_MODE_LOWPWR1                   (0x2 << 5)
+#define BNO055_ACC_CFG_OPR_MODE_STD                       (0x3 << 5)
+#define BNO055_ACC_CFG_OPR_MODE_LOWPWR2                   (0x4 << 5)
+#define BNO055_ACC_CFG_OPR_MODE_DSUSPEND                  (0x5 << 5)
+
+/* Gyroscope config */
+#define BNO055_GYR_CFG_RNG_2000DPS                               0x0
+#define BNO055_GYR_CFG_RNG_1000DPS                               0x1
+#define BNO055_GYR_CFG_RNG_500DPS                                0x2
+#define BNO055_GYR_CFG_RNG_250DPS                                0x3
+#define BNO055_GYR_CFG_RNG_125DPS                                0x4
+
+#define BNO055_GYR_CFG_BW_523HZ                           (0x0 << 3)
+#define BNO055_GYR_CFG_BW_230HZ                           (0x1 << 3)
+#define BNO055_GYR_CFG_BW_116HZ                           (0x2 << 3)
+#define BNO055_GYR_CFG_BW_47HZ                            (0x3 << 3)
+#define BNO055_GYR_CFG_BW_23HZ                            (0x4 << 3)
+#define BNO055_GYR_CFG_BW_12HZ                            (0x5 << 3)
+#define BNO055_GYR_CFG_BW_64HZ                            (0x6 << 3)
+#define BNO055_GYR_CFG_BW_32HZ                            (0x7 << 3)
+
+#define BNO055_GYR_CFG_OPR_MODE_NORMAL                    (0x0 << 5)
+#define BNO055_GYR_CFG_OPR_MODE_FAST_PWR_UP               (0x1 << 5)
+#define BNO055_GYR_CFG_OPR_MODE_DSUSPEND                  (0x2 << 5)
+#define BNO055_GYR_CFG_OPR_MODE_SUSPEND                   (0x3 << 5)
+#define BNO055_GYR_CFG_OPR_MODE_ADV_PWR_SAVE              (0x4 << 5)
+
+/* Magnetometer config */
+#define BNO055_MAG_CFG_BW_2HZ                                    0x0
+#define BNO055_MAG_CFG_BW_6HZ                                    0x1
+#define BNO055_MAG_CFG_BW_8HZ                                    0x2
+#define BNO055_MAG_CFG_BW_10HZ                                   0x3
+#define BNO055_MAG_CFG_BW_15HZ                                   0x4
+#define BNO055_MAG_CFG_BW_20HZ                                   0x5
+#define BNO055_MAG_CFG_BW_25HZ                                   0x6
+#define BNO055_MAG_CFG_BW_30HZ                                   0x7
+
+#define BNO055_MAG_CFG_OPR_MODE_LOWPWR                    (0x0 << 3)
+#define BNO055_MAG_CFG_OPR_MODE_REG                       (0x1 << 3)
+#define BNO055_MAG_CFG_OPR_MODE_EREG                      (0x2 << 3)
+#define BNO055_MAG_CFG_OPR_MODE_HIGHACC                   (0x3 << 3)
+
+#define BNO055_MAG_CFG_PWR_MODE_NORMAL                    (0x0 << 5)
+#define BNO055_MAG_CFG_PWR_MODE_SLEEP                     (0x1 << 5)
+#define BNO055_MAG_CFG_PWR_MODE_SUSPEND                   (0x2 << 5)
+#define BNO055_MAG_CFG_PWR_MODE_FORCE_MODE                (0x3 << 5)
+
+
 struct bno055_cfg {
-    uint8_t bc_mode;
+    uint8_t bc_opr_mode;
+    uint8_t bc_pwr_mode;
+    uint8_t bc_units;
 };
 
 struct bno055 {
@@ -121,67 +219,70 @@ int
 bno055_get_rev_info(struct bno055_rev_info *ri);
 
 /**
- * Gets system status, test results and errors if any from the sensor
+ * Set power mode for the sensor
  *
- * @param ptr to system status
- * @param ptr to self test result
- * @param ptr to system error
+ * @return mode
  */
 int
-bno055_get_sys_status(uint8_t *system_status, uint8_t *self_test_result,
-                      uint8_t *system_error);
-
-int
-bno055_get_chip_id(uint8_t *id);
+bno055_set_pwr_mode(uint8_t mode);
 
 /**
- * Read current operational mode of the sensor
+ * Setting units for the bno055 sensor
  *
- * @return mode
+ * @param power mode for the sensor
+ * @return 0 on success, non-zero on failure
  */
-uint8_t
-bno055_get_opr_mode(void);
+int
+bno055_set_units(uint8_t val);
 
 /**
  * Read current power mode of the sensor
  *
- * @return mode
+ * @param ptr to mode variableto fill up
+ * @return 0 on success, non-zero on failure
  */
-uint8_t
-bno055_get_pwr_mode(void);
+int
+bno055_get_pwr_mode(uint8_t *mode);
 
 /**
- * Set power mode for the sensor
+ * Read current operational mode of the sensor
  *
- * @return mode
+ * @param ptr to mode variable to fill up
+ * @return 0 on success, non-zero on failure
  */
 int
-bno055_set_pwr_mode(uint8_t mode);
+bno055_get_opr_mode(uint8_t *mode);
 
 /**
- * Get power mode for the sensor
+ * Get units of the sensor
  *
- * @return mode
+ * @param ptr to the units variable
+ * @return 0 on success, non-zero on failure
  */
-uint8_t
-bno055_get_pwr_mode(void);
+int
+bno055_get_units(uint8_t *units);
 
 /**
- * Setting units for the bno055 sensor
+ * Gets system status, test results and errors if any from the sensor
  *
- * @param power mode for the sensor
- * @return 0 on success, non-zero on failure
+ * @param ptr to system status
+ * @param ptr to self test result
+ * @param ptr to system error
  */
+
 int
-bno055_set_units(uint8_t val);
+bno055_get_sys_status(uint8_t *system_status, uint8_t *self_test_result,
+                      uint8_t *system_error);
 
 /**
- * Read current power mode of the sensor
+ * Get chip ID from the sensor
  *
- * @return mode
+ * @param Pointer to the variable to fill up chip ID in
+ * @return 0 on success, non-zero on failure
  */
-uint8_t
-bno055_get_units(void);
+int
+bno055_get_chip_id(uint8_t *id);
+
 
 #ifdef __cplusplus
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/e4d0f04a/hw/drivers/sensors/bno055/src/bno055.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055.c b/hw/drivers/sensors/bno055/src/bno055.c
index 014473f..d1043f2 100644
--- a/hw/drivers/sensors/bno055/src/bno055.c
+++ b/hw/drivers/sensors/bno055/src/bno055.c
@@ -102,10 +102,6 @@ static const struct sensor_driver g_bno055_sensor_driver = {
     bno055_sensor_get_config
 };
 
-static uint8_t g_bno055_opr_mode;
-static uint8_t g_bno055_pwr_mode;
-static uint8_t g_bno055_units;
-
 /**
  * Writes a single byte to the specified register
  *
@@ -263,12 +259,12 @@ bno055_set_opr_mode(uint8_t mode)
 {
     int rc;
 
-    rc = bno055_write8(BNO055_OPR_MODE_ADDR, BNO055_OPERATION_MODE_CONFIG);
+    rc = bno055_write8(BNO055_OPR_MODE_ADDR, BNO055_OPR_MODE_CONFIG);
     if (rc) {
         goto err;
     }
 
-    os_time_delay(OS_TICKS_PER_SEC/1000 * 19);
+    os_time_delay((OS_TICKS_PER_SEC * 19)/1000 + 1);
 
     rc = bno055_write8(BNO055_OPR_MODE_ADDR, mode);
     if (rc) {
@@ -276,9 +272,7 @@ bno055_set_opr_mode(uint8_t mode)
     }
 
     /* Refer table 3-6 in the datasheet for the delay values */
-    os_time_delay(OS_TICKS_PER_SEC/1000 * 7);
-
-    g_bno055_opr_mode = mode;
+    os_time_delay((OS_TICKS_PER_SEC * 7)/1000 + 1);
 
     return 0;
 err:
@@ -301,7 +295,6 @@ bno055_set_pwr_mode(uint8_t mode)
         goto err;
     }
 
-    g_bno055_pwr_mode = mode;
     return 0;
 err:
     return rc;
@@ -310,12 +303,25 @@ err:
 /**
  * Read current power mode of the sensor
  *
- * @return mode
+ * @param ptr to mode variableto fill up
+ * @return 0 on success, non-zero on failure
  */
-uint8_t
-bno055_get_pwr_mode(void)
+int
+bno055_get_pwr_mode(uint8_t *mode)
 {
-    return g_bno055_pwr_mode;
+    int rc;
+    uint8_t val;
+
+    rc = bno055_read8(BNO055_PWR_MODE_ADDR, &val);
+    if (rc) {
+        goto err;
+    }
+
+    *mode = val;
+
+    return 0;
+err:
+    return rc;
 }
 
 /**
@@ -334,32 +340,57 @@ bno055_set_units(uint8_t val)
         goto err;
     }
 
-    g_bno055_units = val;
     return 0;
 err:
     return rc;
 }
 
 /**
- * Read current power mode of the sensor
+ * Get units of the sensor
  *
- * @return mode
+ * @param ptr to the units variable
+ * @return 0 on success, non-zero on failure
  */
-uint8_t
-bno055_get_units(void)
+int
+bno055_get_units(uint8_t *units)
 {
-    return g_bno055_units;
+    int rc;
+    uint8_t val;
+
+    rc = bno055_read8(BNO055_UNIT_SEL_ADDR, &val);
+    if (rc) {
+        goto err;
+    }
+
+    *units = val;
+
+    return 0;
+err:
+    return rc;
 }
 
 /**
  * Read current operational mode of the sensor
  *
- * @return mode
+ * @param ptr to mode variable to fill up
+ * @return 0 on success, non-zero on failure
  */
-uint8_t
-bno055_get_opr_mode(void)
+int
+bno055_get_opr_mode(uint8_t *mode)
 {
-    return g_bno055_opr_mode;
+    int rc;
+    uint8_t val;
+
+    rc = bno055_read8(BNO055_OPR_MODE_ADDR, &val);
+    if (rc) {
+        goto err;
+    }
+
+    *mode = val;
+
+    return 0;
+err:
+    return rc;
 }
 
 /**
@@ -403,9 +434,11 @@ bno055_init(struct os_dev *dev, void *arg)
     }
 
     /* Add the accelerometer/magnetometer driver */
-    rc = sensor_set_driver(sensor, SENSOR_TYPE_ACCELEROMETER |
-            SENSOR_TYPE_MAGNETIC_FIELD,
-            (struct sensor_driver *) &g_bno055_sensor_driver);
+    rc = sensor_set_driver(sensor, SENSOR_TYPE_ACCELEROMETER         |
+            SENSOR_TYPE_MAGNETIC_FIELD | SENSOR_TYPE_GYROSCOPE       |
+            SENSOR_TYPE_TEMPERATURE    | SENSOR_TYPE_ROTATION_VECTOR |
+            SENSOR_TYPE_GRAVITY        | SENSOR_TYPE_LINEAR_ACCEL    |
+            SENSOR_TYPE_EULER, (struct sensor_driver *) &g_bno055_sensor_driver);
     if (rc != 0) {
         goto err;
     }
@@ -448,23 +481,23 @@ err:
 /**
  * Use external crystal 32.768KHz
  *
+ * @param operational mode of the sensor
  * @return 0 on success, non-zero on failure
  */
 static int
-bno055_set_ext_xtal_use(uint8_t use_xtal)
+bno055_set_ext_xtal_use(uint8_t use_xtal, uint8_t mode)
 {
     int rc;
-    uint8_t prev_mode;
-
-    prev_mode = g_bno055_opr_mode;
 
-    /* Switch to config mode */
-    rc = bno055_set_opr_mode(BNO055_OPERATION_MODE_CONFIG);
-    if (rc) {
-        goto err;
+    if (mode != BNO055_OPR_MODE_CONFIG) {
+        /* Switch to config mode */
+        rc = bno055_set_opr_mode(BNO055_OPR_MODE_CONFIG);
+        if (rc) {
+            goto err;
+        }
     }
 
-    os_time_delay(OS_TICKS_PER_SEC/1000 * 25);
+    os_time_delay((OS_TICKS_PER_SEC * 25)/1000 + 1);
 
     rc = bno055_write8(BNO055_PAGE_ID_ADDR, 0);
     if (rc) {
@@ -485,16 +518,14 @@ bno055_set_ext_xtal_use(uint8_t use_xtal)
         }
     }
 
-    os_time_delay(OS_TICKS_PER_SEC/1000 * 10);
+    os_time_delay((OS_TICKS_PER_SEC * 10)/1000 + 1);
 
     /* Reset to previous operating mode */
-    rc = bno055_set_opr_mode(prev_mode);
+    rc = bno055_set_opr_mode(mode);
     if (rc) {
         goto err;
     }
 
-    os_time_delay(OS_TICKS_PER_SEC/1000 * 20);
-
     return 0;
 err:
     return rc;
@@ -506,9 +537,6 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
 {
     int rc;
     uint8_t id;
-    uint8_t prev_mode;
-
-    prev_mode = g_bno055_opr_mode;
 
     /* Check if we can read the chip address */
     rc = bno055_get_chip_id(&id);
@@ -517,7 +545,7 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
     }
 
     if (id != BNO055_ID) {
-        os_time_delay(OS_TICKS_PER_SEC/1000 * 100);
+        os_time_delay((OS_TICKS_PER_SEC * 100)/1000 + 1);
 
         rc = bno055_get_chip_id(&id);
         if (rc) {
@@ -536,13 +564,13 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
         goto err;
     }
 
-    rc = bno055_set_opr_mode(BNO055_OPERATION_MODE_CONFIG);
+    rc = bno055_set_opr_mode(BNO055_OPR_MODE_CONFIG);
     if (rc) {
         goto err;
     }
 
     /* Set to normal power mode */
-    rc = bno055_set_pwr_mode(BNO055_POWER_MODE_NORMAL);
+    rc = bno055_set_pwr_mode(cfg->bc_pwr_mode);
     if (rc) {
         goto err;
     }
@@ -552,22 +580,20 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
         goto err;
     }
 
-    os_time_delay(OS_TICKS_PER_SEC/1000 * 10);
+    os_time_delay((OS_TICKS_PER_SEC * 10)/1000 + 1);
 
     /**
      * As per Section 5.5 in the BNO055 Datasheet,
      * external crystal should be used for accurate
      * results
      */
-    rc = bno055_set_ext_xtal_use(1);
+    rc = bno055_set_ext_xtal_use(1, BNO055_OPR_MODE_CONFIG);
     if (rc) {
         goto err;
     }
 
     /* Setting units and data output format */
-    rc = bno055_set_units(BNO055_ACC_UNIT_MS2 | BNO055_ANGRATE_UNIT_DPS |
-                          BNO055_EULER_UNIT_DEG | BNO055_TEMP_UNIT_DEGC |
-                          BNO055_DO_FORMAT_ANDROID);
+    rc = bno055_set_units(cfg->bc_units);
     if (rc) {
         goto err;
     }
@@ -575,8 +601,8 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
     /* Overwrite the configuration data. */
     memcpy(&bno055->cfg, cfg, sizeof(*cfg));
 
-    /* Change back to previous mode */
-    rc = bno055_set_opr_mode(prev_mode);
+    /* Change mode to requested mode */
+    rc = bno055_set_opr_mode(cfg->bc_opr_mode);
     if (rc) {
         goto err;
     }
@@ -705,7 +731,10 @@ bno055_get_vector_data(void *datastruct, int type)
     y = ((int16_t)payload[2]) | (((int16_t)payload[3]) << 8);
     z = ((int16_t)payload[4]) | (((int16_t)payload[5]) << 8);
 
-    units = bno055_get_units();
+    rc = bno055_get_units(&units);
+    if (rc) {
+        goto err;
+    }
 
     acc_div  = units & BNO055_ACC_UNIT_MG ? 1.0:100.0;
     gyro_div = units & BNO055_ANGRATE_UNIT_RPS ? 900.0:16.0;
@@ -770,13 +799,21 @@ bno055_get_temp(int8_t *temp)
     uint8_t div;
 
     rc = bno055_read8(BNO055_TEMP_ADDR, (uint8_t *)temp);
+    if (rc) {
+        goto err;
+    }
 
-    units = bno055_get_units();
+    rc = bno055_get_units(&units);
+    if (rc) {
+        goto err;
+    }
 
     div = units & BNO055_TEMP_UNIT_DEGF ? 2 : 1;
 
     *temp = *temp/div;
 
+    return 0;
+err:
     return rc;
 }
 
@@ -911,7 +948,7 @@ bno055_get_sys_status(uint8_t *system_status, uint8_t *self_test_result, uint8_t
         }
     }
 
-    os_time_delay(OS_TICKS_PER_SEC/1000 * 200);
+    os_time_delay((OS_TICKS_PER_SEC * 200)/1000 + 1);
 
     return 0;
 err:
@@ -996,7 +1033,11 @@ bno055_sensor_get_config(struct sensor *sensor, sensor_type_t type,
         goto err;
     }
 
-    cfg->sc_valtype = SENSOR_VALUE_TYPE_FLOAT_TRIPLET;
+    if (type != SENSOR_TYPE_TEMPERATURE) {
+        cfg->sc_valtype = SENSOR_VALUE_TYPE_FLOAT_TRIPLET;
+    } else {
+        cfg->sc_valtype = SENSOR_VALUE_TYPE_INT32;
+    }
 
     return (0);
 err:

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/e4d0f04a/hw/drivers/sensors/bno055/src/bno055_priv.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_priv.h b/hw/drivers/sensors/bno055/src/bno055_priv.h
index 8bb0ea1..d98d3d0 100644
--- a/hw/drivers/sensors/bno055/src/bno055_priv.h
+++ b/hw/drivers/sensors/bno055/src/bno055_priv.h
@@ -102,16 +102,6 @@
 #define BNO055_UNIT_SEL_ADDR                                    0X3B
 
 #define BNO055_DATA_SELECT_ADDR                                 0X3C
-#define BNO055_ACC_UNIT_MS2                                      0x0
-#define BNO055_ACC_UNIT_MG                                       0x1
-#define BNO055_ANGRATE_UNIT_DPS                             (0 << 1)
-#define BNO055_ANGRATE_UNIT_RPS                             (1 << 1)
-#define BNO055_EULER_UNIT_DEG                               (0 << 2)
-#define BNO055_EULER_UNIT_RAD                               (1 << 2)
-#define BNO055_TEMP_UNIT_DEGC                               (0 << 4)
-#define BNO055_TEMP_UNIT_DEGF                               (1 << 4)
-#define BNO055_DO_FORMAT_WINDOWS                            (0 << 7)
-#define BNO055_DO_FORMAT_ANDROID                            (1 << 7)
 
 /* Mode registers */
 #define BNO055_OPR_MODE_ADDR                                    0X3D
@@ -179,26 +169,6 @@
 #define BNO055_MAG_RADIUS_LSB_ADDR                              0X69
 #define BNO055_MAG_RADIUS_MSB_ADDR                              0X6A
 
-/* Power modes */
-#define BNO055_POWER_MODE_NORMAL                                0X00
-#define BNO055_POWER_MODE_LOWPOWER                              0X01
-#define BNO055_POWER_MODE_SUSPEND                               0X02
-
-/* Operation Modes */
-#define BNO055_OPERATION_MODE_CONFIG                            0X00
-#define BNO055_OPERATION_MODE_ACCONLY                           0X01
-#define BNO055_OPERATION_MODE_MAGONLY                           0X02
-#define BNO055_OPERATION_MODE_GYRONLY                           0X03
-#define BNO055_OPERATION_MODE_ACCMAG                            0X04
-#define BNO055_OPERATION_MODE_ACCGYRO                           0X05
-#define BNO055_OPERATION_MODE_MAGGYRO                           0X06
-#define BNO055_OPERATION_MODE_AMG                               0X07
-#define BNO055_OPERATION_MODE_IMUPLUS                           0X08
-#define BNO055_OPERATION_MODE_COMPASS                           0X09
-#define BNO055_OPERATION_MODE_M4G                               0X0A
-#define BNO055_OPERATION_MODE_NDOF_FMC_OFF                      0X0B
-#define BNO055_OPERATION_MODE_NDOF                              0X0C
-
 /* Remap config - Default: 0x24 */
 #define BNO055_REMAP_CONFIG_P0                                  0x21
 #define BNO055_REMAP_CONFIG_P1                                  0x24
@@ -248,68 +218,4 @@
 #define BNO055_GYRO_ANY_MOTION_THRES_ADDR                       0X1E
 #define BNO055_GYRO_ANY_MOTION_SET_ADDR                         0X1F
 
-/* Accelerometer config */
-#define BNO055_ACC_CFG_2G                                        0x0
-#define BNO055_ACC_CFG_4G                                        0x1
-#define BNO055_ACC_CFG_8G                                        0x2
-#define BNO055_ACC_CFG_16G                                       0x3
-
-#define BNO055_ACC_CFG_BW_7_81HZ                          (0x0 << 2)
-#define BNO055_ACC_CFG_BW_15_63HZ                         (0x1 << 2)
-#define BNO055_ACC_CFG_BW_31_25HZ                         (0x2 << 2)
-#define BNO055_ACC_CFG_BW_6_25HZ                          (0x3 << 2)
-#define BNO055_ACC_CFG_BW_125HZ                           (0x4 << 2)
-#define BNO055_ACC_CFG_BW_250HZ                           (0x5 << 2)
-#define BNO055_ACC_CFG_BW_500HZ                           (0x6 << 2)
-#define BNO055_ACC_CFG_BW_1000HZ                          (0x7 << 2)
-
-#define BNO055_ACC_CFG_OPR_MODE_NORMAL                    (0x0 << 5)
-#define BNO055_ACC_CFG_OPR_MODE_SUSPEND                   (0x1 << 5)
-#define BNO055_ACC_CFG_OPR_MODE_LOWPWR1                   (0x2 << 5)
-#define BNO055_ACC_CFG_OPR_MODE_STD                       (0x3 << 5)
-#define BNO055_ACC_CFG_OPR_MODE_LOWPWR2                   (0x4 << 5)
-#define BNO055_ACC_CFG_OPR_MODE_DSUSPEND                  (0x5 << 5)
-
-/* Gyroscope config */
-#define BNO055_GYR_CFG_RNG_2000DPS                               0x0
-#define BNO055_GYR_CFG_RNG_1000DPS                               0x1
-#define BNO055_GYR_CFG_RNG_500DPS                                0x2
-#define BNO055_GYR_CFG_RNG_250DPS                                0x3
-#define BNO055_GYR_CFG_RNG_125DPS                                0x4
-
-#define BNO055_GYR_CFG_BW_523HZ                           (0x0 << 3)
-#define BNO055_GYR_CFG_BW_230HZ                           (0x1 << 3)
-#define BNO055_GYR_CFG_BW_116HZ                           (0x2 << 3)
-#define BNO055_GYR_CFG_BW_47HZ                            (0x3 << 3)
-#define BNO055_GYR_CFG_BW_23HZ                            (0x4 << 3)
-#define BNO055_GYR_CFG_BW_12HZ                            (0x5 << 3)
-#define BNO055_GYR_CFG_BW_64HZ                            (0x6 << 3)
-#define BNO055_GYR_CFG_BW_32HZ                            (0x7 << 3)
-
-#define BNO055_GYR_CFG_OPR_MODE_NORMAL                    (0x0 << 5)
-#define BNO055_GYR_CFG_OPR_MODE_FAST_PWR_UP               (0x1 << 5)
-#define BNO055_GYR_CFG_OPR_MODE_DSUSPEND                  (0x2 << 5)
-#define BNO055_GYR_CFG_OPR_MODE_SUSPEND                   (0x3 << 5)
-#define BNO055_GYR_CFG_OPR_MODE_ADV_PWR_SAVE              (0x4 << 5)
-
-/* Magnetometer config */
-#define BNO055_MAG_CFG_BW_2HZ                                    0x0
-#define BNO055_MAG_CFG_BW_6HZ                                    0x1
-#define BNO055_MAG_CFG_BW_8HZ                                    0x2
-#define BNO055_MAG_CFG_BW_10HZ                                   0x3
-#define BNO055_MAG_CFG_BW_15HZ                                   0x4
-#define BNO055_MAG_CFG_BW_20HZ                                   0x5
-#define BNO055_MAG_CFG_BW_25HZ                                   0x6
-#define BNO055_MAG_CFG_BW_30HZ                                   0x7
-
-#define BNO055_MAG_CFG_OPR_MODE_LOWPWR                    (0x0 << 3)
-#define BNO055_MAG_CFG_OPR_MODE_REG                       (0x1 << 3)
-#define BNO055_MAG_CFG_OPR_MODE_EREG                      (0x2 << 3)
-#define BNO055_MAG_CFG_OPR_MODE_HIGHACC                   (0x3 << 3)
-
-#define BNO055_MAG_CFG_PWR_MODE_NORMAL                    (0x0 << 5)
-#define BNO055_MAG_CFG_PWR_MODE_SLEEP                     (0x1 << 5)
-#define BNO055_MAG_CFG_PWR_MODE_SUSPEND                   (0x2 << 5)
-#define BNO055_MAG_CFG_PWR_MODE_FORCE_MODE                (0x3 << 5)
-
 #define BNO055_ID                                               0xA0

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/e4d0f04a/hw/drivers/sensors/bno055/src/bno055_shell.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_shell.c b/hw/drivers/sensors/bno055/src/bno055_shell.c
index 4e0b3f7..5a74dfd 100644
--- a/hw/drivers/sensors/bno055/src/bno055_shell.c
+++ b/hw/drivers/sensors/bno055/src/bno055_shell.c
@@ -33,7 +33,6 @@
 #include "hal/hal_i2c.h"
 
 #if MYNEWT_VAL(BNO055_CLI)
-extern uint8_t g_bno055_mode;
 
 static int bno055_shell_cmd(int argc, char **argv);
 
@@ -254,8 +253,11 @@ bno055_shell_cmd_opr_mode(int argc, char **argv)
 
     /* Display the mode */
     if (argc == 2) {
-        val = bno055_get_opr_mode();
-        console_printf("%u\n", (unsigned int)val);
+        rc = bno055_get_opr_mode((uint8_t *)&val);
+        if (rc) {
+            goto err;
+        }
+        console_printf("%u\n", ((unsigned int)(*(uint8_t *)&val)));
     }
 
     /* Update the mode */
@@ -264,7 +266,7 @@ bno055_shell_cmd_opr_mode(int argc, char **argv)
             return bno055_shell_err_invalid_arg(argv[2]);
         }
         /* Make sure mode is valid */
-        if (val > BNO055_OPERATION_MODE_NDOF) {
+        if (val > BNO055_OPR_MODE_NDOF) {
             return bno055_shell_err_invalid_arg(argv[2]);
         }
 
@@ -291,7 +293,10 @@ bno055_shell_cmd_pwr_mode(int argc, char **argv)
 
     /* Display the mode */
     if (argc == 2) {
-        val = bno055_get_pwr_mode();
+        rc = bno055_get_pwr_mode((uint8_t *)&val);
+        if (rc) {
+            goto err;
+        }
         console_printf("%u\n", (unsigned int)val);
     }
 
@@ -301,7 +306,7 @@ bno055_shell_cmd_pwr_mode(int argc, char **argv)
             return bno055_shell_err_invalid_arg(argv[2]);
         }
         /* Make sure mode is valid */
-        if (val > BNO055_POWER_MODE_SUSPEND) {
+        if (val > BNO055_PWR_MODE_SUSPEND) {
             return bno055_shell_err_invalid_arg(argv[2]);
         }
 
@@ -328,7 +333,7 @@ bno055_shell_units_cmd(int argc, char **argv)
 
     /* Display the units */
     if (argc == 2) {
-        val = bno055_get_units();
+        rc = bno055_get_units((uint8_t *)&val);
         console_printf("Acc, linear acc, gravity: %s\n"
                        "Mag field strength: Micro Tesla\n"
                        "Ang rate: %s\n"

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/e4d0f04a/hw/sensor/include/sensor/euler.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/euler.h b/hw/sensor/include/sensor/euler.h
index 5ddd44f..0b23ad1 100644
--- a/hw/sensor/include/sensor/euler.h
+++ b/hw/sensor/include/sensor/euler.h
@@ -39,9 +39,9 @@ struct sensor_euler_data {
 } __attribute__((packed));
 
 /**
- * Accelerometer data is unused for this field.
+ * Euler angles data is unused for this field.
  */
-#define SENSOR_ACCEL_DATA_UNUSED (-1)
+#define SENSOR_EULER_DATA_UNUSED (-1)
 
 #ifdef __cplusplus
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/e4d0f04a/hw/sensor/src/sensor_shell.c
----------------------------------------------------------------------
diff --git a/hw/sensor/src/sensor_shell.c b/hw/sensor/src/sensor_shell.c
index bd73cfa..545653f 100644
--- a/hw/sensor/src/sensor_shell.c
+++ b/hw/sensor/src/sensor_shell.c
@@ -34,6 +34,8 @@
 #include "sensor/accel.h"
 #include "sensor/mag.h"
 #include "sensor/light.h"
+#include "sensor/quat.h"
+#include "sensor/euler.h"
 #include "console/console.h"
 #include "shell/shell.h"
 
@@ -48,12 +50,13 @@ sensor_display_help(void)
 {
     console_printf("Possible commands for sensor are:\n");
     console_printf("  list\n");
+    console_printf("  read\n");
 }
 
 static void
 sensor_cmd_display_sensor(struct sensor *sensor)
 {
-    console_printf("sensor dev = %s, type = %lld\n", sensor->s_dev->od_name,
+    console_printf("sensor dev = %s, type = 0x%llx\n", sensor->s_dev->od_name,
             sensor->s_types);
 }
 
@@ -100,13 +103,19 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
     struct sensor_accel_data *sad;
     struct sensor_mag_data *smd;
     struct sensor_light_data *sld;
+    struct sensor_euler_data *sed;
+    struct sensor_quat_data *sqd;
+    int8_t *temperature;
     char tmpstr[13];
 
     ctx = (struct sensor_shell_read_ctx *) arg;
 
     ++ctx->num_entries;
 
-    if (ctx->type == SENSOR_TYPE_ACCELEROMETER) {
+    if (ctx->type == SENSOR_TYPE_ACCELEROMETER ||
+        ctx->type == SENSOR_TYPE_LINEAR_ACCEL  ||
+        ctx->type == SENSOR_TYPE_GRAVITY) {
+
         sad = (struct sensor_accel_data *) data;
         if (sad->sad_x != SENSOR_ACCEL_DATA_UNUSED) {
             console_printf("x = %s ", sensor_ftostr(sad->sad_x, tmpstr, 13));
@@ -148,6 +157,43 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
         console_printf("\n");
     }
 
+    if (ctx->type == SENSOR_TYPE_TEMPERATURE) {
+        temperature = (int8_t *) data;
+        console_printf("temprature = %d", *temperature);
+        console_printf("\n");
+    }
+
+    if (ctx->type == SENSOR_TYPE_EULER) {
+        sed = (struct sensor_euler_data *) data;
+        if (sed->sed_h != SENSOR_EULER_DATA_UNUSED) {
+            console_printf("h = %s", sensor_ftostr(sed->sed_h, tmpstr, 13));
+        }
+        if (sed->sed_r != SENSOR_EULER_DATA_UNUSED) {
+            console_printf("r = %s", sensor_ftostr(sed->sed_r, tmpstr, 13));
+        }
+        if (sed->sed_p != SENSOR_EULER_DATA_UNUSED) {
+            console_printf("p = %s", sensor_ftostr(sed->sed_p, tmpstr, 13));
+        }
+        console_printf("\n");
+    }
+
+    if (ctx->type == SENSOR_TYPE_ROTATION_VECTOR) {
+        sqd = (struct sensor_quat_data *) data;
+        if (sqd->sqd_x != SENSOR_QUAT_DATA_UNUSED) {
+            console_printf("x = %s ", sensor_ftostr(sqd->sqd_x, tmpstr, 13));
+        }
+        if (sqd->sqd_y != SENSOR_QUAT_DATA_UNUSED) {
+            console_printf("y = %s ", sensor_ftostr(sqd->sqd_y, tmpstr, 13));
+        }
+        if (sqd->sqd_z != SENSOR_QUAT_DATA_UNUSED) {
+            console_printf("z = %s ", sensor_ftostr(sqd->sqd_z, tmpstr, 13));
+        }
+        if (sqd->sqd_w != SENSOR_QUAT_DATA_UNUSED) {
+            console_printf("w = %s ", sensor_ftostr(sqd->sqd_w, tmpstr, 13));
+        }
+        console_printf("\n");
+    }
+
     return (0);
 }
 


[28/50] incubator-mynewt-core git commit: Changing sensor API display

Posted by vi...@apache.org.
Changing sensor API display


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/fbbad56b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/fbbad56b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/fbbad56b

Branch: refs/heads/develop
Commit: fbbad56bb178bc6b5dbf0f7e83f15deed5e2f7fd
Parents: d983810
Author: Vipul Rahane <vi...@apache.org>
Authored: Wed Jan 25 16:43:16 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Wed Jan 25 16:43:16 2017 -0800

----------------------------------------------------------------------
 apps/slinky/src/main.c       |  2 +-
 hw/sensor/src/sensor_shell.c | 16 +++++++++++++---
 2 files changed, 14 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/fbbad56b/apps/slinky/src/main.c
----------------------------------------------------------------------
diff --git a/apps/slinky/src/main.c b/apps/slinky/src/main.c
index cd585a4..4b0e870 100755
--- a/apps/slinky/src/main.c
+++ b/apps/slinky/src/main.c
@@ -235,7 +235,7 @@ init_tasks(void)
             TASK2_PRIO, OS_WAIT_FOREVER, pstack, TASK2_STACK_SIZE);
 }
 
-#ifdef ARCH_arduino_zero
+#if !ARCH_sim
 static int
 config_sensor(void)
 {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/fbbad56b/hw/sensor/src/sensor_shell.c
----------------------------------------------------------------------
diff --git a/hw/sensor/src/sensor_shell.c b/hw/sensor/src/sensor_shell.c
index a5ee643..6312f81 100644
--- a/hw/sensor/src/sensor_shell.c
+++ b/hw/sensor/src/sensor_shell.c
@@ -22,6 +22,7 @@
 #if MYNEWT_VAL(SENSOR_CLI)
 
 #include <string.h>
+#include <stdio.h>
 #include <errno.h>
 #include <assert.h>
 
@@ -81,12 +82,21 @@ struct sensor_shell_read_ctx {
     int num_entries;
 };
 
+static char*
+floattostr(float num, char *fltstr, int len)
+{
+    snprintf(fltstr, len, "%s%d.%09ld", num < 0.0 ? "-":"", (int)num,
+             labs((long int)((num - (float)((int)num)) * 1000000000)));
+    return fltstr;
+}
+
 static int
 sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
 {
     struct sensor_shell_read_ctx *ctx;
     struct sensor_accel_data *sad;
     struct sensor_mag_data *smd;
+    char tmpstr[13];
 
     ctx = (struct sensor_shell_read_ctx *) arg;
 
@@ -95,13 +105,13 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
     if (ctx->type == SENSOR_TYPE_ACCELEROMETER) {
         sad = (struct sensor_accel_data *) data;
         if (sad->sad_x != SENSOR_ACCEL_DATA_UNUSED) {
-            console_printf("x = %x, ", (uint32_t)sad->sad_x * 1000000000);
+            console_printf("x = %s ", floattostr(sad->sad_x, tmpstr, 13));
         }
         if (sad->sad_y != SENSOR_ACCEL_DATA_UNUSED) {
-            console_printf("y = %x, ", (uint32_t)sad->sad_y * 1000000000);
+            console_printf("y = %s ", floattostr(sad->sad_y, tmpstr, 13));
         }
         if (sad->sad_z != SENSOR_ACCEL_DATA_UNUSED) {
-            console_printf("z = %x.", (uint32_t)sad->sad_z * 1000000000);
+            console_printf("z = %s", floattostr(sad->sad_z, tmpstr, 13));
         }
         console_printf("\n");
     }


[05/50] incubator-mynewt-core git commit: oic; fix endpoint logging at RX, used wrong pointer as data.

Posted by vi...@apache.org.
oic; fix endpoint logging at RX, used wrong pointer as data.


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/896011d5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/896011d5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/896011d5

Branch: refs/heads/develop
Commit: 896011d558e8b4dd44693db1b5e9cf5afa884f6f
Parents: 645a5b7
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Fri Dec 16 15:39:39 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Sun Dec 18 13:56:17 2016 -0800

----------------------------------------------------------------------
 net/oic/src/api/oc_buffer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/896011d5/net/oic/src/api/oc_buffer.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_buffer.c b/net/oic/src/api/oc_buffer.c
index 7c3b477..7bca928 100644
--- a/net/oic/src/api/oc_buffer.c
+++ b/net/oic/src/api/oc_buffer.c
@@ -160,7 +160,7 @@ oc_buffer_rx(struct os_event *ev)
             goto free_msg;
         }
         OC_LOG_DEBUG("oc_buffer_rx: ");
-        OC_LOG_ENDPOINT(LOG_LEVEL_DEBUG, &msg->endpoint);
+        OC_LOG_ENDPOINT(LOG_LEVEL_DEBUG, OC_MBUF_ENDPOINT(m));
 
         if (OS_MBUF_PKTHDR(m)->omp_len > MAX_PAYLOAD_SIZE) {
             STATS_INC(coap_stats, itoobig);


[49/50] incubator-mynewt-core git commit: Fix accidental free caused by a merge earlier

Posted by vi...@apache.org.
Fix accidental free caused by a merge earlier


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/9cc6a785
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/9cc6a785
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/9cc6a785

Branch: refs/heads/develop
Commit: 9cc6a785e1abb627ea2b18b746c18f011d7bf684
Parents: 0f4d2e8
Author: Vipul Rahane <vi...@apache.org>
Authored: Thu Feb 23 14:55:41 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Thu Feb 23 14:55:41 2017 -0800

----------------------------------------------------------------------
 net/oic/src/messaging/coap/observe.c | 3 ---
 1 file changed, 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/9cc6a785/net/oic/src/messaging/coap/observe.c
----------------------------------------------------------------------
diff --git a/net/oic/src/messaging/coap/observe.c b/net/oic/src/messaging/coap/observe.c
index 499cdb5..234b2da 100644
--- a/net/oic/src/messaging/coap/observe.c
+++ b/net/oic/src/messaging/coap/observe.c
@@ -304,9 +304,6 @@ coap_notify_observers(oc_resource_t *resource,
     if (m) {
         os_mbuf_free_chain(m);
     }
-    if (m) {
-        os_mbuf_free_chain(m);
-    }
     return num_observers;
 }
 /*---------------------------------------------------------------------------*/


[39/50] incubator-mynewt-core git commit: Add power mode command to the bno055 shell

Posted by vi...@apache.org.
Add power mode command to the bno055 shell


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/43179745
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/43179745
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/43179745

Branch: refs/heads/develop
Commit: 43179745c890e6a195440d5050ec21e32f5ed023
Parents: ea2ff6d
Author: Vipul Rahane <vi...@apache.org>
Authored: Wed Feb 15 16:29:39 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Wed Feb 15 16:29:39 2017 -0800

----------------------------------------------------------------------
 .../sensors/bno055/include/bno055/bno055.h      | 29 +++++++++-
 hw/drivers/sensors/bno055/src/bno055.c          | 58 ++++++++++++++++----
 hw/drivers/sensors/bno055/src/bno055_shell.c    | 50 ++++++++++++++---
 3 files changed, 114 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/43179745/hw/drivers/sensors/bno055/include/bno055/bno055.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/include/bno055/bno055.h b/hw/drivers/sensors/bno055/include/bno055/bno055.h
index 1e30ba2..09fa3ec 100644
--- a/hw/drivers/sensors/bno055/include/bno055/bno055.h
+++ b/hw/drivers/sensors/bno055/include/bno055/bno055.h
@@ -99,13 +99,13 @@ int
 bno055_write8(uint8_t reg, uint8_t value);
 
 /**
- * Setting mode for the bno055 sensor
+ * Set operation mode for the bno055 sensor
  *
  * @param Operation mode for the sensor
  * @return 0 on success, non-zero on failure
  */
 int
-bno055_set_mode(uint8_t mode);
+bno055_set_opr_mode(uint8_t mode);
 
 #if MYNEWT_VAL(BNO055_CLI)
 int bno055_shell_init(void);
@@ -140,8 +140,31 @@ bno055_get_chip_id(uint8_t *id);
  * @return mode
  */
 uint8_t
-bno055_get_mode(void);
+bno055_get_opr_mode(void);
 
+/**
+ * Read current power mode of the sensor
+ *
+ * @return mode
+ */
+uint8_t
+bno055_get_pwr_mode(void);
+
+/**
+ * Set power mode for the sensor
+ *
+ * @return mode
+ */
+int
+bno055_set_pwr_mode(uint8_t mode);
+
+/**
+ * Get power mode for the sensor
+ *
+ * @return mode
+ */
+uint8_t
+bno055_get_pwr_mode(void);
 
 #ifdef __cplusplus
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/43179745/hw/drivers/sensors/bno055/src/bno055.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055.c b/hw/drivers/sensors/bno055/src/bno055.c
index 8b31ac6..bcc880d 100644
--- a/hw/drivers/sensors/bno055/src/bno055.c
+++ b/hw/drivers/sensors/bno055/src/bno055.c
@@ -102,7 +102,8 @@ static const struct sensor_driver g_bno055_sensor_driver = {
     bno055_sensor_get_config
 };
 
-static uint8_t g_bno055_mode;
+static uint8_t g_bno055_opr_mode;
+static uint8_t g_bno055_pwr_mode;
 
 /**
  * Writes a single byte to the specified register
@@ -251,13 +252,13 @@ err:
 
 
 /**
- * Setting mode for the bno055 sensor
+ * Setting operation mode for the bno055 sensor
  *
  * @param Operation mode for the sensor
  * @return 0 on success, non-zero on failure
  */
 int
-bno055_set_mode(uint8_t mode)
+bno055_set_opr_mode(uint8_t mode)
 {
     int rc;
 
@@ -273,21 +274,54 @@ bno055_set_mode(uint8_t mode)
         os_time_delay(OS_TICKS_PER_SEC/1000 * 7);
     }
 
-    g_bno055_mode = mode;
+    g_bno055_opr_mode = mode;
     return 0;
 err:
     return rc;
 }
 
 /**
+ * Setting power mode for the bno055 sensor
+ *
+ * @param power mode for the sensor
+ * @return 0 on success, non-zero on failure
+ */
+int
+bno055_set_pwr_mode(uint8_t mode)
+{
+    int rc;
+
+    rc = bno055_write8(BNO055_PWR_MODE_ADDR, mode);
+    if (rc) {
+        goto err;
+    }
+
+    g_bno055_pwr_mode = mode;
+    return 0;
+err:
+    return rc;
+}
+
+/**
+ * Read current power mode of the sensor
+ *
+ * @return mode
+ */
+uint8_t
+bno055_get_pwr_mode(void)
+{
+    return g_bno055_pwr_mode;
+}
+
+/**
  * Read current operational mode of the sensor
  *
  * @return mode
  */
 uint8_t
-bno055_get_mode(void)
+bno055_get_opr_mode(void)
 {
-    return g_bno055_mode;
+    return g_bno055_opr_mode;
 }
 
 /**
@@ -384,10 +418,10 @@ bno055_set_ext_xtal_use(uint8_t use_xtal)
     int rc;
     uint8_t prev_mode;
 
-    prev_mode = g_bno055_mode;
+    prev_mode = g_bno055_opr_mode;
 
     /* Switch to config mode */
-    rc = bno055_set_mode(BNO055_OPERATION_MODE_CONFIG);
+    rc = bno055_set_opr_mode(BNO055_OPERATION_MODE_CONFIG);
     if (rc) {
         goto err;
     }
@@ -416,7 +450,7 @@ bno055_set_ext_xtal_use(uint8_t use_xtal)
     os_time_delay(OS_TICKS_PER_SEC/1000 * 10);
 
     /* Reset to previous operating mode */
-    rc = bno055_set_mode(prev_mode);
+    rc = bno055_set_opr_mode(prev_mode);
     if (rc) {
         goto err;
     }
@@ -436,7 +470,7 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
     uint8_t id;
     uint8_t prev_mode;
 
-    prev_mode = g_bno055_mode;
+    prev_mode = g_bno055_opr_mode;
 
     /* Check if we can read the chip address */
     rc = bno055_get_chip_id(&id);
@@ -464,7 +498,7 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
         goto err;
     }
 
-    rc = bno055_set_mode(BNO055_OPERATION_MODE_CONFIG);
+    rc = bno055_set_opr_mode(BNO055_OPERATION_MODE_CONFIG);
     if (rc) {
         goto err;
     }
@@ -499,7 +533,7 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
     memcpy(&bno055->cfg, cfg, sizeof(*cfg));
 
     /* Change back to previous mode */
-    rc = bno055_set_mode(prev_mode);
+    rc = bno055_set_opr_mode(prev_mode);
     if (rc) {
         goto err;
     }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/43179745/hw/drivers/sensors/bno055/src/bno055_shell.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_shell.c b/hw/drivers/sensors/bno055/src/bno055_shell.c
index 919aa48..9de1ed5 100644
--- a/hw/drivers/sensors/bno055/src/bno055_shell.c
+++ b/hw/drivers/sensors/bno055/src/bno055_shell.c
@@ -222,7 +222,7 @@ err:
 }
 
 static int
-bno055_shell_cmd_mode(int argc, char **argv)
+bno055_shell_cmd_opr_mode(int argc, char **argv)
 {
     long val;
     int rc;
@@ -233,7 +233,7 @@ bno055_shell_cmd_mode(int argc, char **argv)
 
     /* Display the mode */
     if (argc == 2) {
-        val = bno055_get_mode();
+        val = bno055_get_opr_mode();
         console_printf("%u\n", (unsigned int)val);
     }
 
@@ -247,7 +247,44 @@ bno055_shell_cmd_mode(int argc, char **argv)
             return bno055_shell_err_invalid_arg(argv[2]);
         }
 
-        rc = bno055_set_mode(val);
+        rc = bno055_set_opr_mode(val);
+        if (rc) {
+            goto err;
+        }
+    }
+
+    return 0;
+err:
+    return rc;
+}
+
+static int
+bno055_shell_cmd_pwr_mode(int argc, char **argv)
+{
+    long val;
+    int rc;
+
+    if (argc > 3) {
+        return bno055_shell_err_too_many_args(argv[1]);
+    }
+
+    /* Display the mode */
+    if (argc == 2) {
+        val = bno055_get_pwr_mode();
+        console_printf("%u\n", (unsigned int)val);
+    }
+
+    /* Update the mode */
+    if (argc == 3) {
+        if (bno055_shell_stol(argv[2], 0, 16, &val)) {
+            return bno055_shell_err_invalid_arg(argv[2]);
+        }
+        /* Make sure mode is */
+        if (val > BNO055_POWER_MODE_SUSPEND) {
+            return bno055_shell_err_invalid_arg(argv[2]);
+        }
+
+        rc = bno055_set_pwr_mode(val);
         if (rc) {
             goto err;
         }
@@ -349,7 +386,7 @@ bno055_shell_cmd(int argc, char **argv)
 
     /* Mode command */
     if (argc > 1 && strcmp(argv[1], "mode") == 0) {
-        return bno055_shell_cmd_mode(argc, argv);
+        return bno055_shell_cmd_opr_mode(argc, argv);
     }
 
     /* Chip ID command */
@@ -366,14 +403,11 @@ bno055_shell_cmd(int argc, char **argv)
         return bno055_shell_cmd_reset(argc, argv);
     }
 
-#if 0
     /* Power mode command */
     if (argc > 1 && strcmp(argv[1], "pmode") == 0) {
-        return bno055_shell_cmd_pmode(argc, argv);
+        return bno055_shell_cmd_pwr_mode(argc, argv);
     }
 
-#endif
-
     /* Dump Registers command */
     if (argc > 1 && strcmp(argv[1], "dumpreg") == 0) {
         return bno055_shell_cmd_dumpreg(argc, argv);


[40/50] incubator-mynewt-core git commit: Closing devices seperately for each sensor

Posted by vi...@apache.org.
Closing devices seperately for each sensor


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/b483d34d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/b483d34d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/b483d34d

Branch: refs/heads/develop
Commit: b483d34d6f8c936f158ed0a1092384481395132c
Parents: 4317974
Author: Vipul Rahane <vi...@apache.org>
Authored: Wed Feb 15 17:10:09 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Wed Feb 15 17:10:09 2017 -0800

----------------------------------------------------------------------
 apps/slinky/src/main.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/b483d34d/apps/slinky/src/main.c
----------------------------------------------------------------------
diff --git a/apps/slinky/src/main.c b/apps/slinky/src/main.c
index aceca28..9eef0c0 100755
--- a/apps/slinky/src/main.c
+++ b/apps/slinky/src/main.c
@@ -264,6 +264,7 @@ config_sensor(void)
         os_dev_close(dev);
         goto err;
     }
+    os_dev_close(dev);
 #endif
 
 #if MYNEWT_VAL(LSM303DLHC_PRESENT)
@@ -287,6 +288,7 @@ config_sensor(void)
         os_dev_close(dev);
         goto err;
     }
+    os_dev_close(dev);
 #endif
 
 #if MYNEWT_VAL(BNO055_PRESENT)
@@ -308,14 +310,14 @@ config_sensor(void)
         //assert(0);
         goto err;
     }
-#endif
-
     os_dev_close(dev);
+#endif
 
     return (0);
 err:
     return rc;
 }
+
 #endif
 
 #ifdef ARCH_sim


[41/50] incubator-mynewt-core git commit: Printing sensor data as float string

Posted by vi...@apache.org.
Printing sensor data as float string

- Making sensor_ftostr() global, so that it can be used by any shell.
- Adding config settings for ACC, MAG, GYRO as per the datasheet


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/40b9b6b5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/40b9b6b5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/40b9b6b5

Branch: refs/heads/develop
Commit: 40b9b6b511cf624f7a17ba7fc84a6ef4dacc7bf9
Parents: b483d34
Author: Vipul Rahane <vi...@apache.org>
Authored: Thu Feb 16 12:21:21 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Thu Feb 16 12:21:21 2017 -0800

----------------------------------------------------------------------
 hw/drivers/sensors/bno055/src/bno055_priv.h  | 64 +++++++++++++++++++++++
 hw/drivers/sensors/bno055/src/bno055_shell.c | 29 ++++++----
 hw/sensor/include/sensor/sensor.h            |  3 ++
 hw/sensor/src/sensor_shell.c                 | 20 +++----
 4 files changed, 98 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/40b9b6b5/hw/drivers/sensors/bno055/src/bno055_priv.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_priv.h b/hw/drivers/sensors/bno055/src/bno055_priv.h
index 295e83b..97f4280 100644
--- a/hw/drivers/sensors/bno055/src/bno055_priv.h
+++ b/hw/drivers/sensors/bno055/src/bno055_priv.h
@@ -237,4 +237,68 @@
 #define BNO055_GYRO_ANY_MOTION_THRES_ADDR                       0X1E
 #define BNO055_GYRO_ANY_MOTION_SET_ADDR                         0X1F
 
+/* Accelerometer config */
+#define BNO055_ACC_CFG_2G                                        0x0
+#define BNO055_ACC_CFG_4G                                        0x1
+#define BNO055_ACC_CFG_8G                                        0x2
+#define BNO055_ACC_CFG_16G                                       0x3
+
+#define BNO055_ACC_CFG_BW_7_81HZ                          (0x0 << 2)
+#define BNO055_ACC_CFG_BW_15_63HZ                         (0x1 << 2)
+#define BNO055_ACC_CFG_BW_31_25HZ                         (0x2 << 2)
+#define BNO055_ACC_CFG_BW_6_25HZ                          (0x3 << 2)
+#define BNO055_ACC_CFG_BW_125HZ                           (0x4 << 2)
+#define BNO055_ACC_CFG_BW_250HZ                           (0x5 << 2)
+#define BNO055_ACC_CFG_BW_500HZ                           (0x6 << 2)
+#define BNO055_ACC_CFG_BW_1000HZ                          (0x7 << 2)
+
+#define BNO055_ACC_CFG_OPR_MODE_NORMAL                    (0x0 << 5)
+#define BNO055_ACC_CFG_OPR_MODE_SUSPEND                   (0x1 << 5)
+#define BNO055_ACC_CFG_OPR_MODE_LOWPWR1                   (0x2 << 5)
+#define BNO055_ACC_CFG_OPR_MODE_STD                       (0x3 << 5)
+#define BNO055_ACC_CFG_OPR_MODE_LOWPWR2                   (0x4 << 5)
+#define BNO055_ACC_CFG_OPR_MODE_DSUSPEND                  (0x5 << 5)
+
+/* Gyroscope config */
+#define BNO055_GYR_CFG_RNG_2000DPS                               0x0
+#define BNO055_GYR_CFG_RNG_1000DPS                               0x1
+#define BNO055_GYR_CFG_RNG_500DPS                                0x2
+#define BNO055_GYR_CFG_RNG_250DPS                                0x3
+#define BNO055_GYR_CFG_RNG_125DPS                                0x4
+
+#define BNO055_GYR_CFG_BW_523HZ                           (0x0 << 3)
+#define BNO055_GYR_CFG_BW_230HZ                           (0x1 << 3)
+#define BNO055_GYR_CFG_BW_116HZ                           (0x2 << 3)
+#define BNO055_GYR_CFG_BW_47HZ                            (0x3 << 3)
+#define BNO055_GYR_CFG_BW_23HZ                            (0x4 << 3)
+#define BNO055_GYR_CFG_BW_12HZ                            (0x5 << 3)
+#define BNO055_GYR_CFG_BW_64HZ                            (0x6 << 3)
+#define BNO055_GYR_CFG_BW_32HZ                            (0x7 << 3)
+
+#define BNO055_GYR_CFG_OPR_MODE_NORMAL                    (0x0 << 5)
+#define BNO055_GYR_CFG_OPR_MODE_FAST_PWR_UP               (0x1 << 5)
+#define BNO055_GYR_CFG_OPR_MODE_DSUSPEND                  (0x2 << 5)
+#define BNO055_GYR_CFG_OPR_MODE_SUSPEND                   (0x3 << 5)
+#define BNO055_GYR_CFG_OPR_MODE_ADV_PWR_SAVE              (0x4 << 5)
+
+/* Magnetometer config */
+#define BNO055_MAG_CFG_BW_2HZ                                    0x0
+#define BNO055_MAG_CFG_BW_6HZ                                    0x1
+#define BNO055_MAG_CFG_BW_8HZ                                    0x2
+#define BNO055_MAG_CFG_BW_10HZ                                   0x3
+#define BNO055_MAG_CFG_BW_15HZ                                   0x4
+#define BNO055_MAG_CFG_BW_20HZ                                   0x5
+#define BNO055_MAG_CFG_BW_25HZ                                   0x6
+#define BNO055_MAG_CFG_BW_30HZ                                   0x7
+
+#define BNO055_MAG_CFG_OPR_MODE_LOWPWR                    (0x0 << 3)
+#define BNO055_MAG_CFG_OPR_MODE_REG                       (0x1 << 3)
+#define BNO055_MAG_CFG_OPR_MODE_EREG                      (0x2 << 3)
+#define BNO055_MAG_CFG_OPR_MODE_HIGHACC                   (0x3 << 3)
+
+#define BNO055_MAG_CFG_PWR_MODE_NORMAL                    (0x0 << 5)
+#define BNO055_MAG_CFG_PWR_MODE_SLEEP                     (0x1 << 5)
+#define BNO055_MAG_CFG_PWR_MODE_SUSPEND                   (0x2 << 5)
+#define BNO055_MAG_CFG_PWR_MODE_FORCE_MODE                (0x3 << 5)
+
 #define BNO055_ID                                               0xA0

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/40b9b6b5/hw/drivers/sensors/bno055/src/bno055_shell.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_shell.c b/hw/drivers/sensors/bno055/src/bno055_shell.c
index 9de1ed5..f370655 100644
--- a/hw/drivers/sensors/bno055/src/bno055_shell.c
+++ b/hw/drivers/sensors/bno055/src/bno055_shell.c
@@ -160,6 +160,7 @@ bno055_shell_cmd_read(int argc, char **argv)
     struct sensor_euler_data *sed;
     struct sensor_accel_data *sad;
     int type;
+    char tmpstr[13];
 
     type = 0;
     if (argc > 4) {
@@ -192,9 +193,12 @@ bno055_shell_cmd_read(int argc, char **argv)
                 goto err;
             }
             sqd = databuf;
-            console_printf("x:%u y:%u z:%u w:%u\n", (unsigned int)sqd->sqd_x,
-                          (unsigned int)sqd->sqd_y, (unsigned int)sqd->sqd_z,
-                          (unsigned int)sqd->sqd_w);
+
+            console_printf("x:%s ", sensor_ftostr(sqd->sqd_x, tmpstr, 13));
+            console_printf("y:%s ", sensor_ftostr(sqd->sqd_y, tmpstr, 13));
+            console_printf("z:%s ", sensor_ftostr(sqd->sqd_z, tmpstr, 13));
+            console_printf("w:%s\n", sensor_ftostr(sqd->sqd_w, tmpstr, 13));
+
         } else if (type == SENSOR_TYPE_EULER) {
             rc = bno055_get_vector_data(databuf, type);
             if (rc) {
@@ -202,8 +206,11 @@ bno055_shell_cmd_read(int argc, char **argv)
                 goto err;
             }
             sed = databuf;
-            console_printf("h:%u r:%u p:%u\n", (unsigned int)sed->sed_h,
-                          (unsigned int)sed->sed_r, (unsigned int)sed->sed_p);
+
+            console_printf("h:%s ", sensor_ftostr(sed->sed_h, tmpstr, 13));
+            console_printf("r:%s ", sensor_ftostr(sed->sed_r, tmpstr, 13));
+            console_printf("p:%s\n", sensor_ftostr(sed->sed_p, tmpstr, 13));
+
         } else {
             rc = bno055_get_vector_data(databuf, type);
             if (rc) {
@@ -211,11 +218,15 @@ bno055_shell_cmd_read(int argc, char **argv)
                 goto err;
             }
             sad = databuf;
-            console_printf("x:%u y:%u z:%u\n", (unsigned int)sad->sad_x,
-                          (unsigned int)sad->sad_y, (unsigned int)sad->sad_z);
+
+            console_printf("x:%s ", sensor_ftostr(sad->sad_x, tmpstr, 13));
+            console_printf("y:%s ", sensor_ftostr(sad->sad_y, tmpstr, 13));
+            console_printf("z:%s\n", sensor_ftostr(sad->sad_z, tmpstr, 13));
         }
     }
 
+    free(databuf);
+
     return 0;
 err:
     return rc;
@@ -242,7 +253,7 @@ bno055_shell_cmd_opr_mode(int argc, char **argv)
         if (bno055_shell_stol(argv[2], 0, 16, &val)) {
             return bno055_shell_err_invalid_arg(argv[2]);
         }
-        /* Make sure mode is */
+        /* Make sure mode is valid */
         if (val > BNO055_OPERATION_MODE_NDOF) {
             return bno055_shell_err_invalid_arg(argv[2]);
         }
@@ -279,7 +290,7 @@ bno055_shell_cmd_pwr_mode(int argc, char **argv)
         if (bno055_shell_stol(argv[2], 0, 16, &val)) {
             return bno055_shell_err_invalid_arg(argv[2]);
         }
-        /* Make sure mode is */
+        /* Make sure mode is valid */
         if (val > BNO055_POWER_MODE_SUSPEND) {
             return bno055_shell_err_invalid_arg(argv[2]);
         }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/40b9b6b5/hw/sensor/include/sensor/sensor.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/sensor.h b/hw/sensor/include/sensor/sensor.h
index d707e2b..769a148 100644
--- a/hw/sensor/include/sensor/sensor.h
+++ b/hw/sensor/include/sensor/sensor.h
@@ -325,6 +325,9 @@ struct sensor *sensor_mgr_find_next(sensor_mgr_compare_func_t, void *,
 struct sensor *sensor_mgr_find_next_bytype(sensor_type_t, struct sensor *);
 struct sensor *sensor_mgr_find_next_bydevname(char *, struct sensor *);
 
+char*
+sensor_ftostr(float num, char *fltstr, int len);
+
 /**
  * }@
  */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/40b9b6b5/hw/sensor/src/sensor_shell.c
----------------------------------------------------------------------
diff --git a/hw/sensor/src/sensor_shell.c b/hw/sensor/src/sensor_shell.c
index c2c68b1..bd73cfa 100644
--- a/hw/sensor/src/sensor_shell.c
+++ b/hw/sensor/src/sensor_shell.c
@@ -83,10 +83,12 @@ struct sensor_shell_read_ctx {
     int num_entries;
 };
 
-static char*
-floattostr(float num, char *fltstr, int len)
+char*
+sensor_ftostr(float num, char *fltstr, int len)
 {
-    snprintf(fltstr, len, "%s%d.%09ld", num < 0.0 ? "-":"", (int)num,
+    memset(fltstr, 0, len);
+
+    snprintf(fltstr, len, "%s%d.%09ld", num < 0.0 ? "-":"", abs((int)num),
              labs((long int)((num - (float)((int)num)) * 1000000000)));
     return fltstr;
 }
@@ -107,13 +109,13 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
     if (ctx->type == SENSOR_TYPE_ACCELEROMETER) {
         sad = (struct sensor_accel_data *) data;
         if (sad->sad_x != SENSOR_ACCEL_DATA_UNUSED) {
-            console_printf("x = %s ", floattostr(sad->sad_x, tmpstr, 13));
+            console_printf("x = %s ", sensor_ftostr(sad->sad_x, tmpstr, 13));
         }
         if (sad->sad_y != SENSOR_ACCEL_DATA_UNUSED) {
-            console_printf("y = %s ", floattostr(sad->sad_y, tmpstr, 13));
+            console_printf("y = %s ", sensor_ftostr(sad->sad_y, tmpstr, 13));
         }
         if (sad->sad_z != SENSOR_ACCEL_DATA_UNUSED) {
-            console_printf("z = %s", floattostr(sad->sad_z, tmpstr, 13));
+            console_printf("z = %s", sensor_ftostr(sad->sad_z, tmpstr, 13));
         }
         console_printf("\n");
     }
@@ -121,13 +123,13 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
     if (ctx->type == SENSOR_TYPE_MAGNETIC_FIELD) {
         smd = (struct sensor_mag_data *) data;
         if (smd->smd_x != SENSOR_MAG_DATA_UNUSED) {
-            console_printf("x = %i, ", (int)smd->smd_x);
+            console_printf("x = %s ", sensor_ftostr(smd->smd_x, tmpstr, 13));
         }
         if (smd->smd_y != SENSOR_MAG_DATA_UNUSED) {
-            console_printf("y = %i, ", (int)smd->smd_y);
+            console_printf("y = %s ", sensor_ftostr(smd->smd_y, tmpstr, 13));
         }
         if (smd->smd_z != SENSOR_MAG_DATA_UNUSED) {
-            console_printf("z = %i", (int)smd->smd_z);
+            console_printf("z = %s ", sensor_ftostr(smd->smd_z, tmpstr, 13));
         }
         console_printf("\n");
     }


[36/50] incubator-mynewt-core git commit: SensorAPI - Add some more commands for debugging

Posted by vi...@apache.org.
SensorAPI - Add some more commands for debugging

- Add i2cscan command for debugging
- Add register dump command for dumping value of any register


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/521ea9b8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/521ea9b8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/521ea9b8

Branch: refs/heads/develop
Commit: 521ea9b845a443cbc9b16160c812dee0b1114fd0
Parents: 33253b2
Author: Vipul Rahane <vi...@apache.org>
Authored: Mon Feb 13 17:22:11 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Mon Feb 13 17:22:11 2017 -0800

----------------------------------------------------------------------
 apps/slinky/src/main.c                          |  2 +-
 .../sensors/bno055/include/bno055/bno055.h      | 11 +++
 hw/drivers/sensors/bno055/src/bno055.c          | 30 ++++---
 hw/drivers/sensors/bno055/src/bno055_shell.c    | 90 ++++++++++++++------
 4 files changed, 92 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/521ea9b8/apps/slinky/src/main.c
----------------------------------------------------------------------
diff --git a/apps/slinky/src/main.c b/apps/slinky/src/main.c
index 2bdcc76..aceca28 100755
--- a/apps/slinky/src/main.c
+++ b/apps/slinky/src/main.c
@@ -305,7 +305,7 @@ config_sensor(void)
     rc = bno055_config((struct bno055 *) dev, &bcfg);
     if (rc) {
         os_dev_close(dev);
-        assert(0);
+        //assert(0);
         goto err;
     }
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/521ea9b8/hw/drivers/sensors/bno055/include/bno055/bno055.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/include/bno055/bno055.h b/hw/drivers/sensors/bno055/include/bno055/bno055.h
index a540628..64138d5 100644
--- a/hw/drivers/sensors/bno055/include/bno055/bno055.h
+++ b/hw/drivers/sensors/bno055/include/bno055/bno055.h
@@ -77,6 +77,17 @@ int
 bno055_get_temp(int8_t *temp);
 
 /**
+ * Reads a single byte from the specified register
+ *
+ * @param The register address to read from
+ * @param Pointer to where the register value should be written
+ *
+ * @return 0 on success, non-zero error on failure.
+ */
+int
+bno055_read8(uint8_t reg, uint8_t *value);
+
+/**
  * Setting mode for the bno055 sensor
  *
  * @param Operation mode for the sensor

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/521ea9b8/hw/drivers/sensors/bno055/src/bno055.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055.c b/hw/drivers/sensors/bno055/src/bno055.c
index b74fcb2..43e72b8 100644
--- a/hw/drivers/sensors/bno055/src/bno055.c
+++ b/hw/drivers/sensors/bno055/src/bno055.c
@@ -125,7 +125,7 @@ bno055_write8(uint8_t reg, uint32_t value)
     };
 
     rc = hal_i2c_master_write(MYNEWT_VAL(BNO055_I2CBUS), &data_struct,
-                              OS_TICKS_PER_SEC / 10, 1);
+                              OS_TICKS_PER_SEC, 1);
     if (rc) {
         BNO055_ERR("Failed to write to 0x%02X:0x%02X with value 0x%02X\n",
                        data_struct.address, reg, value);
@@ -347,6 +347,12 @@ err:
     return (rc);
 }
 
+/**
+ * Get chip ID from the sensor
+ *
+ * @param Pointer to the variable to fill up chip ID in
+ * @return 0 on success, non-zero on failure
+ */
 int
 bno055_get_chip_id(uint8_t *id)
 {
@@ -431,16 +437,6 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
 
     prev_mode = g_bno055_mode;
 
-    /**
-     * As per Section 5.5 in the BNO055 Datasheet,
-     * external crystal should be used for accurate
-     * results
-     */
-    rc = bno055_set_ext_xtal_use(1);
-    if (rc) {
-        goto err;
-    }
-
     /* Check if we can read the chip address */
     rc = bno055_read8(BNO055_CHIP_ID_ADDR, &id);
     if (rc) {
@@ -467,7 +463,7 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
     }
 
     /* Reset sensor */
-    rc = bno055_write8(BNO055_SYS_TRIGGER_ADDR, 0x20);
+    rc = bno055_write8(BNO055_SYS_TRIGGER_ADDR, BNO055_SYS_TRIGGER_RST_SYS);
     if (rc) {
         goto err;
     }
@@ -488,6 +484,16 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
 
     os_time_delay(OS_TICKS_PER_SEC/1000 * 10);
 
+    /**
+     * As per Section 5.5 in the BNO055 Datasheet,
+     * external crystal should be used for accurate
+     * results
+     */
+    rc = bno055_set_ext_xtal_use(1);
+    if (rc) {
+        goto err;
+    }
+
     /* Overwrite the configuration data. */
     memcpy(&bno055->cfg, cfg, sizeof(*cfg));
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/521ea9b8/hw/drivers/sensors/bno055/src/bno055_shell.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_shell.c b/hw/drivers/sensors/bno055/src/bno055_shell.c
index 3f39a38..48a1196 100644
--- a/hw/drivers/sensors/bno055/src/bno055_shell.c
+++ b/hw/drivers/sensors/bno055/src/bno055_shell.c
@@ -30,6 +30,7 @@
 #include "sensor/mag.h"
 #include "sensor/quat.h"
 #include "sensor/euler.h"
+#include "hal/hal_i2c.h"
 
 #if MYNEWT_VAL(BNO055_CLI)
 extern uint8_t g_bno055_mode;
@@ -333,37 +334,66 @@ bno055_shell_cmd_int(int argc, char **argv)
     /* Unknown command */
     return bno055_shell_err_invalid_arg(argv[2]);
 }
+#endif
 
 static int
-bno055_shell_cmd_dump(int argc, char **argv)
+bno055_shell_cmd_dumpreg(int argc, char **argv)
 {
-  uint8_t val;
-
-  if (argc > 3) {
-      return bno055_shell_err_too_many_args(argv[1]);
-  }
-
-  val = 0;
-  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_CONTROL, &val));
-  console_printf("0x%02X (CONTROL): 0x%02X\n", BNO055_REGISTER_CONTROL, val);
-  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_TIMING, &val));
-  console_printf("0x%02X (TIMING):  0x%02X\n", BNO055_REGISTER_TIMING, val);
-  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_THRESHHOLDL_LOW, &val));
-  console_printf("0x%02X (THRLL):   0x%02X\n", BNO055_REGISTER_THRESHHOLDL_LOW, val);
-  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_THRESHHOLDL_HIGH, &val));
-  console_printf("0x%02X (THRLH):   0x%02X\n", BNO055_REGISTER_THRESHHOLDL_HIGH, val);
-  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_THRESHHOLDH_LOW, &val));
-  console_printf("0x%02X (THRHL):   0x%02X\n", BNO055_REGISTER_THRESHHOLDH_LOW, val);
-  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_THRESHHOLDH_HIGH, &val));
-  console_printf("0x%02X (THRHH):   0x%02X\n", BNO055_REGISTER_THRESHHOLDH_HIGH, val);
-  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_INTERRUPT, &val));
-  console_printf("0x%02X (INTER):   0x%02X\n", BNO055_REGISTER_INTERRUPT, val);
-  assert(0 == bno055_read8(BNO055_COMMAND_BIT | BNO055_REGISTER_ID, &val));
-  console_printf("0x%02X (ID):      0x%02X\n", BNO055_REGISTER_ID, val);
-
-  return 0;
+    long addr;
+    uint8_t val;
+    int rc;
+
+    if (bno055_shell_stol(argv[2], 0, UINT8_MAX, &addr)) {
+        return bno055_shell_err_invalid_arg(argv[2]);
+    }
+    rc = bno055_read8((uint8_t)addr, &val);
+    if (rc) {
+        goto err;
+    }
+    console_printf("0x%02X (ADDR): 0x%02X", (uint8_t)addr, val);
+
+    return 0;
+err:
+    return rc;
+}
+
+static int
+shell_i2cscan_cmd(int argc, char **argv)
+{
+    uint8_t addr;
+    int32_t timeout = OS_TICKS_PER_SEC / 10;
+    uint8_t dev_count = 0;
+    long i2cnum;
+    int rc;
+
+    if (bno055_shell_stol(argv[2], 0, 0xf, &i2cnum)) {
+        return bno055_shell_err_invalid_arg(argv[2]);
+    }
+
+    console_printf("Scanning I2C bus %u\n"
+                   "     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f\n"
+                   "00:          ", (uint8_t)i2cnum);
+
+
+    /* Scan all valid I2C addresses (0x08..0x77) */
+    for (addr = 0x08; addr < 0x78; addr++) {
+        rc = hal_i2c_master_probe((uint8_t)i2cnum, addr, timeout);
+        /* Print addr header every 16 bytes */
+        if (!(addr % 16)) {
+            console_printf("\n%02x: ", addr);
+        }
+        /* Display the addr if a response was received */
+        if (!rc) {
+            console_printf("%02x ", addr);
+            dev_count++;
+        } else {
+            console_printf("-- ");
+        }
+    }
+    console_printf("\nFound %u devices on I2C bus 0\n", dev_count);
+
+    return 0;
 }
-#endif
 
 static int
 bno055_shell_cmd(int argc, char **argv)
@@ -402,11 +432,15 @@ bno055_shell_cmd(int argc, char **argv)
         return bno055_shell_cmd_pmode(argc, argv);
     }
 
+#endif
     /* Dump Registers command */
     if (argc > 1 && strcmp(argv[1], "dumpreg") == 0) {
         return bno055_shell_cmd_dumpreg(argc, argv);
     }
-#endif
+
+    if (argc > 1 && strcmp(argv[1], "i2cscan") == 0) {
+        return shell_i2cscan_cmd(argc, argv);
+    }
     return bno055_shell_err_unknown_arg(argv[1]);
 }
 


[45/50] incubator-mynewt-core git commit: Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/incubator-mynewt-core into sensors_branch

Posted by vi...@apache.org.
Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/incubator-mynewt-core into sensors_branch


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/d21ef0fd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/d21ef0fd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/d21ef0fd

Branch: refs/heads/develop
Commit: d21ef0fdd1215c2cd52871d0b5d5d11be3de1682
Parents: ac59feb 1449ffc
Author: Vipul Rahane <vi...@apache.org>
Authored: Thu Feb 23 13:13:29 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Thu Feb 23 13:13:29 2017 -0800

----------------------------------------------------------------------
 .rat-excludes                                   |  59 +-
 LICENSE                                         | 144 +++--
 NOTICE                                          |   2 +-
 README.md                                       |  10 +-
 apps/blecent/src/main.c                         |  29 +-
 apps/blecent/src/misc.c                         |  40 +-
 apps/blecent/syscfg.yml                         |   1 -
 apps/blehci/syscfg.yml                          |   1 -
 apps/bleprph/pkg.yml                            |   1 +
 apps/bleprph/src/bleprph.h                      |   1 +
 apps/bleprph/src/main.c                         |  38 +-
 apps/bleprph/syscfg.yml                         |   1 -
 apps/bleprph_oic/src/main.c                     |  47 +-
 apps/bleprph_oic/syscfg.yml                     |   2 -
 apps/blesplit/README.md                         |  55 ++
 apps/blesplit/pkg.yml                           |  44 ++
 apps/blesplit/src/blesplit.h                    |  59 ++
 apps/blesplit/src/main.c                        | 287 +++++++++
 apps/blesplit/src/misc.c                        |  43 ++
 apps/blesplit/syscfg.yml                        |  47 ++
 apps/bletest/src/bletest_hci.c                  |  22 +-
 apps/bletest/src/main.c                         |  36 +-
 apps/bletest/syscfg.yml                         |   9 +-
 apps/bletiny/src/bletiny.h                      |  28 +-
 apps/bletiny/src/cmd.c                          | 426 +++++++-----
 apps/bletiny/src/main.c                         | 312 +++++++--
 apps/bletiny/src/misc.c                         |  16 +-
 apps/bletiny/syscfg.yml                         |   1 -
 apps/bleuart/src/main.c                         |  20 +-
 apps/bleuart/syscfg.yml                         |   1 -
 apps/boot/pkg.yml                               |   2 +-
 apps/boot/src/boot.c                            |  20 +-
 apps/boot/syscfg.yml                            |   6 +-
 apps/ocf_sample/src/ocf_ble.c                   |  13 +-
 apps/ocf_sample/syscfg.yml                      |   1 -
 apps/slinky/src/main.c                          |   8 +-
 apps/slinky/syscfg.yml                          |  14 -
 apps/slinky_oic/src/main.c                      |   7 +-
 apps/slinky_oic/syscfg.yml                      |   1 -
 apps/spitest/src/main.c                         |   6 +-
 apps/spitest/syscfg.yml                         |   1 -
 apps/splitty/src/main.c                         |   8 +-
 apps/splitty/syscfg.yml                         |   4 -
 apps/testbench/pkg.yml                          |   1 +
 apps/testbench/src/testbench.c                  |   4 +-
 apps/testbench/src/testbench.h                  |  15 -
 apps/testbench/src/testbench_mutex.c            |  16 +-
 apps/testbench/src/testbench_sem.c              |   8 +-
 apps/testbench/syscfg.yml                       |  19 +-
 apps/timtest/src/main.c                         |   6 +-
 boot/boot_serial/pkg.yml                        |  10 +-
 boot/boot_serial/src/boot_serial.c              | 248 ++++++-
 boot/boot_serial/src/boot_serial_priv.h         |  16 +-
 .../src/testcases/boot_serial_empty_img_msg.c   |   2 +-
 .../test/src/testcases/boot_serial_img_msg.c    |   2 +-
 .../testcases/boot_serial_upload_bigger_image.c |   2 +-
 boot/bootutil/src/bootutil_misc.c               |  19 +-
 boot/bootutil/src/image_ec256.c                 |   2 +-
 boot/bootutil/src/image_rsa.c                   |   2 +
 boot/bootutil/src/loader.c                      | 182 +++---
 boot/bootutil/syscfg.yml                        |   6 +-
 boot/split_app/pkg.yml                          |   4 +
 boot/split_app/src/split_app.c                  |   8 +
 compiler/arm-none-eabi-m4/syscfg.yml            |   4 +
 compiler/gdbmacros/mbuf.gdb                     |  40 +-
 compiler/gdbmacros/os.gdb                       |  38 ++
 fs/fatfs/src/mynewt_glue.c                      |  18 +
 fs/fcb/include/fcb/fcb.h                        |   6 +-
 fs/fcb/src/fcb.c                                |  29 +-
 fs/fcb/test/src/fcb_test.c                      |   5 +-
 fs/fcb/test/src/testcases/fcb_test_last_of_n.c  |  84 +++
 fs/fs/include/fs/fs.h                           |   5 +
 fs/fs/src/fs_dirent.c                           |   3 +-
 fs/fs/src/fs_file.c                             |   2 +-
 fs/fs/src/fs_mount.c                            |  18 +-
 fs/fs/src/fs_nmgr.c                             | 270 ++++++++
 fs/fs/src/fs_priv.h                             |   4 +
 fs/fs/src/fsutil.c                              |   4 +-
 fs/fs/syscfg.yml                                |   6 +-
 fs/nffs/src/nffs.c                              |   5 +-
 fs/nffs/syscfg.yml                              |   4 +-
 hw/bsp/arduino_primo_nrf52/include/bsp/bsp.h    |   4 +-
 hw/bsp/arduino_primo_nrf52/pkg.yml              |   3 +
 hw/bsp/arduino_primo_nrf52/split-primo.ld       |   4 +-
 .../arch/cortex_m4/gcc_startup_nrf52_split.s    |   5 +-
 hw/bsp/arduino_primo_nrf52/src/hal_bsp.c        |   4 +-
 hw/bsp/arduino_primo_nrf52/syscfg.yml           |  46 +-
 hw/bsp/bbc_microbit/boot-nrf51xxac.ld           |  27 +
 hw/bsp/bbc_microbit/bsp.yml                     |  62 ++
 hw/bsp/bbc_microbit/include/bsp/bsp.h           |  50 ++
 hw/bsp/bbc_microbit/include/bsp/cmsis_nvic.h    |  30 +
 hw/bsp/bbc_microbit/microbit_debug.sh           |  37 ++
 hw/bsp/bbc_microbit/microbit_download.sh        |  42 ++
 hw/bsp/bbc_microbit/nrf51xxac.ld                |  30 +
 hw/bsp/bbc_microbit/pkg.yml                     |  88 +++
 hw/bsp/bbc_microbit/split-microbit.ld           | 185 ++++++
 .../src/arch/cortex_m0/gcc_startup_nrf51.s      | 280 ++++++++
 .../arch/cortex_m0/gcc_startup_nrf51_split.s    | 182 ++++++
 hw/bsp/bbc_microbit/src/hal_bsp.c               | 176 +++++
 hw/bsp/bbc_microbit/src/sbrk.c                  |  57 ++
 hw/bsp/bbc_microbit/syscfg.yml                  |  74 +++
 hw/bsp/bmd200/boot-nrf51xxac.ld                 |  27 +
 hw/bsp/bmd200/bsp.yml                           |  62 ++
 hw/bsp/bmd200/include/bsp/boards.h              |  19 +
 hw/bsp/bmd200/include/bsp/bsp.h                 |  53 ++
 hw/bsp/bmd200/include/bsp/cmsis_nvic.h          |  30 +
 hw/bsp/bmd200/nrf51dk_debug.sh                  |  36 ++
 hw/bsp/bmd200/nrf51dk_download.sh               |  41 ++
 hw/bsp/bmd200/nrf51dk_no_boot.ld                | 179 ++++++
 hw/bsp/bmd200/nrf51xxac.ld                      |  25 +
 hw/bsp/bmd200/pkg.yml                           |  90 +++
 hw/bsp/bmd200/split-nrf51dk.ld                  | 185 ++++++
 .../src/arch/cortex_m0/gcc_startup_nrf51.s      | 280 ++++++++
 .../arch/cortex_m0/gcc_startup_nrf51_split.s    | 182 ++++++
 hw/bsp/bmd200/src/hal_bsp.c                     | 189 ++++++
 hw/bsp/bmd200/src/sbrk.c                        |  59 ++
 hw/bsp/bmd200/syscfg.yml                        |  96 +++
 hw/bsp/bmd300eval/pkg.yml                       |   4 +
 hw/bsp/bmd300eval/split-bmd300eval.ld           |   4 +-
 .../arch/cortex_m4/gcc_startup_nrf52_split.s    |   5 +-
 hw/bsp/bmd300eval/src/hal_bsp.c                 |   4 +-
 hw/bsp/bmd300eval/syscfg.yml                    |  22 +-
 hw/bsp/ci40/syscfg.yml                          |  23 +-
 hw/bsp/frdm-k64f/frdm-k64_debug.sh              |   1 +
 hw/bsp/frdm-k64f/frdm-k64_download.sh           |   2 +-
 hw/bsp/frdm-k64f/pkg.yml                        |   4 +-
 hw/bsp/frdm-k64f/syscfg.yml                     |  62 +-
 hw/bsp/nrf51-arduino_101/syscfg.yml             |  27 +-
 .../arch/cortex_m0/gcc_startup_nrf51_split.s    |   5 +
 hw/bsp/nrf51-blenano/syscfg.yml                 |  24 +-
 .../arch/cortex_m0/gcc_startup_nrf51_split.s    |   5 +
 hw/bsp/nrf51dk-16kbram/syscfg.yml               |  24 +-
 hw/bsp/nrf51dk/split-nrf51dk.ld                 |   4 +-
 .../arch/cortex_m0/gcc_startup_nrf51_split.s    |   5 +
 hw/bsp/nrf51dk/syscfg.yml                       |  24 +-
 hw/bsp/nrf52840pdk/pkg.yml                      |   3 +
 .../arch/cortex_m4/gcc_startup_nrf52_split.s    |   5 +-
 hw/bsp/nrf52840pdk/src/hal_bsp.c                |   4 +-
 hw/bsp/nrf52840pdk/syscfg.yml                   |  33 +-
 hw/bsp/nrf52dk/include/bsp/bsp.h                |  11 +
 hw/bsp/nrf52dk/pkg.yml                          |   3 +
 hw/bsp/nrf52dk/split-nrf52dk.ld                 |   4 +-
 .../arch/cortex_m4/gcc_startup_nrf52_split.s    |   5 +-
 hw/bsp/nrf52dk/src/hal_bsp.c                    |   4 +-
 hw/bsp/nrf52dk/syscfg.yml                       |  35 +-
 hw/bsp/nucleo-f401re/pkg.yml                    |   3 +
 hw/bsp/nucleo-f401re/src/hal_bsp.c              |   4 +
 hw/bsp/nucleo-f401re/syscfg.yml                 |  14 +-
 hw/bsp/olimex_stm32-e407_devboard/pkg.yml       |   3 +
 .../run_from_flash.ld                           | 204 ------
 .../run_from_loader.ld                          | 210 ------
 .../olimex_stm32-e407_devboard/run_from_sram.ld | 202 ------
 hw/bsp/olimex_stm32-e407_devboard/src/hal_bsp.c |  48 +-
 hw/bsp/olimex_stm32-e407_devboard/syscfg.yml    |  21 +-
 hw/bsp/rb-nano2/pkg.yml                         |   3 +
 hw/bsp/rb-nano2/split-rb-nano2.ld               |   4 +-
 .../arch/cortex_m4/gcc_startup_nrf52_split.s    |   4 +
 hw/bsp/rb-nano2/src/hal_bsp.c                   |  12 +
 hw/bsp/rb-nano2/syscfg.yml                      |  27 +-
 hw/bsp/stm32f4discovery/pkg.yml                 |   3 +
 hw/bsp/stm32f4discovery/run_from_flash.ld       | 204 ------
 hw/bsp/stm32f4discovery/run_from_loader.ld      | 210 ------
 hw/bsp/stm32f4discovery/run_from_sram.ld        | 202 ------
 hw/bsp/stm32f4discovery/src/hal_bsp.c           |   4 +
 hw/bsp/stm32f4discovery/syscfg.yml              |   5 +-
 hw/bsp/usbmkw41z/boot-mkw41z512.ld              |   4 +-
 hw/bsp/usbmkw41z/mkw41z512.ld                   |   4 +-
 hw/bsp/usbmkw41z/syscfg.yml                     |   2 +-
 hw/drivers/nimble/nrf51/src/ble_hw.c            |  12 +-
 hw/drivers/nimble/nrf52/src/ble_hw.c            |  12 +-
 hw/hal/include/hal/hal_system.h                 |  16 +-
 hw/mcu/native/pkg.yml                           |   2 +-
 hw/mcu/native/src/hal_system.c                  |   3 +-
 hw/mcu/nordic/nrf51xxx/nrf51.ld                 |   4 +-
 hw/mcu/nordic/nrf51xxx/src/hal_i2c.c            |   4 +-
 hw/mcu/nordic/nrf51xxx/src/hal_system_start.c   |  27 +
 hw/mcu/nordic/nrf52xxx/nrf52.ld                 |   4 +-
 hw/mcu/nordic/nrf52xxx/src/hal_i2c.c            |   4 +-
 hw/mcu/nordic/nrf52xxx/src/hal_system_start.c   |  29 +-
 hw/mcu/nxp/MK64F12/src/hal_flash.c              |  57 +-
 hw/mcu/nxp/MK64F12/src/hal_uart.c               | 144 +++--
 hw/mcu/stm/stm32f4xx/stm32f401.ld               |   8 +-
 hw/mcu/stm/stm32f4xx/stm32f407.ld               |   8 +-
 kernel/os/include/os/endian.h                   | 159 ++++-
 kernel/os/include/os/os.h                       |   2 +-
 kernel/os/include/os/os_eventq.h                |   2 -
 kernel/os/include/os/os_fault.h                 |  24 +-
 kernel/os/include/os/os_sched.h                 |   2 +-
 kernel/os/include/os/os_task.h                  |   5 +-
 kernel/os/src/arch/cortex_m4/m4/HAL_CM4.s       |  18 +-
 kernel/os/src/arch/cortex_m4/os_arch_arm.c      |  13 +
 kernel/os/src/arch/cortex_m4/os_fault.c         |  26 +-
 kernel/os/src/endian.c                          | 218 +++++++
 kernel/os/src/os.c                              |  28 +-
 kernel/os/src/os_dev.c                          |  44 +-
 kernel/os/src/os_eventq.c                       |  47 +-
 kernel/os/src/os_mempool.c                      |   8 +
 kernel/os/src/os_msys_init.c                    |   1 +
 kernel/os/src/os_sched.c                        |  15 +-
 kernel/os/src/os_task.c                         |  11 +-
 kernel/os/syscfg.yml                            |  26 +-
 kernel/os/test/src/callout_test.c               |  14 +-
 kernel/os/test/src/callout_test.h               |  16 +-
 kernel/os/test/src/eventq_test.c                |   8 -
 kernel/os/test/src/eventq_test.h                |  28 +-
 kernel/os/test/src/mempool_test.c               |   2 +-
 kernel/os/test/src/mutex_test.c                 |   2 +-
 kernel/os/test/src/os_test.c                    |   2 +-
 kernel/os/test/src/os_test_priv.h               |  16 +-
 kernel/os/test/src/sem_test.c                   |   2 +-
 .../src/testcases/event_test_poll_single_sr.c   |  11 -
 .../os/test/src/testcases/event_test_poll_sr.c  |  11 -
 .../src/testcases/event_test_poll_timeout_sr.c  |  11 -
 kernel/os/test/src/testcases/event_test_src.c   |  11 -
 kernel/os/test/src/testcases/os_callout_test.c  |  12 -
 .../test/src/testcases/os_callout_test_speak.c  |  12 -
 .../test/src/testcases/os_callout_test_stop.c   |  12 -
 libc/baselibc/pkg.yml                           |   3 +-
 libc/baselibc/src/start.c                       |   5 +-
 mgmt/imgmgr/include/imgmgr/imgmgr.h             |  10 +-
 mgmt/imgmgr/src/imgmgr.c                        |  17 +-
 mgmt/imgmgr/src/imgmgr_fs.c                     | 233 -------
 mgmt/imgmgr/src/imgmgr_priv.h                   |   9 -
 mgmt/imgmgr/syscfg.yml                          |   7 +-
 mgmt/mgmt/include/mgmt/mgmt.h                   |   3 +-
 mgmt/newtmgr/include/newtmgr/newtmgr.h          |  13 +-
 mgmt/newtmgr/nmgr_os/src/newtmgr_os.c           |   2 +-
 mgmt/newtmgr/src/newtmgr.c                      |  24 +-
 mgmt/newtmgr/transport/nmgr_shell/pkg.yml       |   2 +-
 mgmt/newtmgr/transport/nmgr_uart/pkg.yml        |   1 +
 .../newtmgr/transport/nmgr_uart/src/nmgr_uart.c |  44 +-
 mgmt/newtmgr/transport/nmgr_uart/syscfg.yml     |   2 +-
 mgmt/oicmgr/src/oicmgr.c                        |   1 +
 .../mn_socket/test/src/testcases/socket_tests.c |   2 +-
 net/nimble/controller/src/ble_ll.c              |   4 +-
 net/nimble/controller/src/ble_ll_adv.c          |  24 +-
 net/nimble/controller/src/ble_ll_conn.c         |  22 +-
 net/nimble/controller/src/ble_ll_conn_hci.c     | 118 ++--
 net/nimble/controller/src/ble_ll_ctrl.c         | 116 ++--
 net/nimble/controller/src/ble_ll_hci.c          |  34 +-
 net/nimble/controller/src/ble_ll_hci_ev.c       |  44 +-
 net/nimble/controller/src/ble_ll_resolv.c       |   2 +-
 net/nimble/controller/src/ble_ll_scan.c         |   8 +-
 net/nimble/controller/syscfg.yml                |  35 +-
 net/nimble/host/include/host/ble_gap.h          |  61 +-
 net/nimble/host/include/host/ble_gatt.h         |   4 +-
 net/nimble/host/include/host/ble_hs.h           |   4 +
 net/nimble/host/include/host/ble_hs_adv.h       |  64 +-
 net/nimble/host/include/host/ble_hs_id.h        |   3 +-
 net/nimble/host/include/host/ble_l2cap.h        | 114 ++++
 net/nimble/host/include/host/ble_store.h        |  23 +-
 net/nimble/host/pts/pts-gatt.txt                |   4 +-
 .../host/services/gatt/src/ble_svc_gatt.c       |   4 +-
 net/nimble/host/src/ble_att.c                   |  38 +-
 net/nimble/host/src/ble_att_clt.c               |  16 +-
 net/nimble/host/src/ble_att_priv.h              |   1 +
 net/nimble/host/src/ble_att_svr.c               |  23 +-
 net/nimble/host/src/ble_eddystone.c             |   9 +-
 net/nimble/host/src/ble_gap.c                   | 480 ++++++--------
 net/nimble/host/src/ble_gap_priv.h              |   9 +-
 net/nimble/host/src/ble_gattc.c                 |  24 +-
 net/nimble/host/src/ble_gatts.c                 |  30 +-
 net/nimble/host/src/ble_hs.c                    |   3 +-
 net/nimble/host/src/ble_hs_adv.c                | 272 +++++---
 net/nimble/host/src/ble_hs_adv_priv.h           |   6 +-
 net/nimble/host/src/ble_hs_conn.c               |  59 +-
 net/nimble/host/src/ble_hs_conn_priv.h          |  25 +-
 net/nimble/host/src/ble_hs_dbg.c                |  72 +--
 net/nimble/host/src/ble_hs_hci.c                |  10 +-
 net/nimble/host/src/ble_hs_hci_cmd.c            | 110 ++--
 net/nimble/host/src/ble_hs_hci_evt.c            |  60 +-
 net/nimble/host/src/ble_hs_hci_util.c           |   8 +-
 net/nimble/host/src/ble_hs_id.c                 |  38 +-
 net/nimble/host/src/ble_hs_misc.c               |  18 +-
 net/nimble/host/src/ble_hs_priv.h               |   1 +
 net/nimble/host/src/ble_hs_startup.c            |   2 +-
 net/nimble/host/src/ble_ibeacon.c               |   4 +-
 net/nimble/host/src/ble_l2cap.c                 | 136 ++--
 net/nimble/host/src/ble_l2cap_coc.c             | 131 ++++
 net/nimble/host/src/ble_l2cap_coc_priv.h        |  68 ++
 net/nimble/host/src/ble_l2cap_priv.h            |  39 +-
 net/nimble/host/src/ble_l2cap_sig.c             | 563 +++++++++++++++-
 net/nimble/host/src/ble_l2cap_sig_cmd.c         |  63 +-
 net/nimble/host/src/ble_l2cap_sig_priv.h        |  44 +-
 net/nimble/host/src/ble_sm.c                    | 475 ++++++++------
 net/nimble/host/src/ble_sm_alg.c                |   2 +-
 net/nimble/host/src/ble_sm_cmd.c                | 633 +-----------------
 net/nimble/host/src/ble_sm_lgcy.c               |  98 ++-
 net/nimble/host/src/ble_sm_priv.h               | 123 +---
 net/nimble/host/src/ble_sm_sc.c                 | 189 +++---
 net/nimble/host/src/ble_store.c                 |  31 +-
 net/nimble/host/src/ble_uuid.c                  |  11 +-
 net/nimble/host/store/ram/src/ble_store_ram.c   |  23 +-
 net/nimble/host/syscfg.yml                      |  12 +
 net/nimble/host/test/src/ble_att_clt_test.c     |  26 +-
 net/nimble/host/test/src/ble_att_svr_test.c     |  41 +-
 net/nimble/host/test/src/ble_gap_test.c         | 560 ++++++++--------
 net/nimble/host/test/src/ble_gatt_disc_c_test.c |   4 +-
 net/nimble/host/test/src/ble_gatt_disc_d_test.c |   2 +-
 net/nimble/host/test/src/ble_gatt_disc_s_test.c |   8 +-
 net/nimble/host/test/src/ble_gatt_find_s_test.c |  10 +-
 net/nimble/host/test/src/ble_gatt_read_test.c   |   2 +-
 .../host/test/src/ble_gatts_notify_test.c       |   6 +-
 net/nimble/host/test/src/ble_hs_adv_test.c      | 640 +++++++------------
 net/nimble/host/test/src/ble_hs_conn_test.c     |  49 +-
 net/nimble/host/test/src/ble_hs_hci_test.c      |   4 +-
 net/nimble/host/test/src/ble_hs_test_util.c     | 185 ++++--
 net/nimble/host/test/src/ble_hs_test_util.h     |  16 +-
 net/nimble/host/test/src/ble_l2cap_test.c       |  38 +-
 net/nimble/host/test/src/ble_os_test.c          |  29 +-
 net/nimble/host/test/src/ble_sm_lgcy_test.c     |  28 +-
 net/nimble/host/test/src/ble_sm_sc_test.c       |  52 +-
 net/nimble/host/test/src/ble_sm_test_util.c     | 390 +++++++++--
 net/nimble/include/nimble/ble.h                 |  68 +-
 net/nimble/src/util.c                           | 219 -------
 net/nimble/transport/uart/syscfg.yml            |  18 +-
 net/oic/pkg.yml                                 |   3 +
 net/oic/src/api/oc_buffer.c                     |   1 +
 net/oic/src/port/mynewt/adaptor.c               |   9 +-
 net/oic/src/port/mynewt/ble_adaptor.c           |   2 +-
 net/wifi/wifi_mgmt/syscfg.yml                   |   2 +-
 sys/config/pkg.yml                              |   2 +-
 sys/config/src/config_fcb.c                     |   2 -
 sys/config/src/config_init.c                    |  30 +-
 sys/config/syscfg.yml                           |  20 +-
 .../src/testcases/config_test_compress_reset.c  |   2 +
 .../src/testcases/config_test_empty_fcb.c       |   1 +
 .../src/testcases/config_test_save_1_fcb.c      |   1 +
 .../src/testcases/config_test_save_2_fcb.c      |   1 +
 .../src/testcases/config_test_save_3_fcb.c      |   1 +
 .../src/testcases/config_test_save_one_fcb.c    |   1 +
 sys/console/full/pkg.yml                        |   2 +-
 sys/console/minimal/include/console/console.h   |  62 ++
 sys/console/minimal/include/console/prompt.h    |  55 ++
 sys/console/minimal/include/console/ticks.h     |  51 ++
 sys/console/minimal/pkg.yml                     |  33 +
 sys/console/minimal/src/cons_tty.c              | 253 ++++++++
 sys/console/minimal/syscfg.yml                  |  33 +
 sys/flash_map/include/flash_map/flash_map.h     |  13 +-
 sys/flash_map/pkg.yml                           |   2 +-
 sys/flash_map/src/flash_map.c                   |  45 +-
 sys/flash_map/syscfg.yml                        |   2 +-
 .../test/src/testcases/flash_map_test_case_1.c  |   6 +-
 .../test/src/testcases/flash_map_test_case_2.c  |   6 +-
 sys/log/full/include/log/log.h                  |  47 +-
 sys/log/full/src/log.c                          | 108 +++-
 sys/log/full/src/log_cbmem.c                    |  12 +-
 sys/log/full/src/log_console.c                  |   9 +-
 sys/log/full/src/log_fcb.c                      |  19 +-
 sys/log/full/src/log_nmgr.c                     |  47 +-
 sys/log/full/src/log_shell.c                    |   3 +-
 sys/log/full/syscfg.yml                         |  12 +-
 sys/log/full/test/src/log_test.c                |   6 +-
 sys/log/full/test/src/log_test.h                |   8 +-
 sys/log/full/test/src/testcases/log_flush_fcb.c |   4 +-
 sys/log/full/test/src/testcases/log_walk_fcb.c  |   4 +-
 sys/mfg/include/mfg/mfg.h                       |   9 +
 sys/reboot/include/reboot/log_reboot.h          |   3 +-
 sys/reboot/pkg.yml                              |   1 -
 sys/reboot/src/log_reboot.c                     |  31 +-
 sys/reboot/syscfg.yml                           |  12 +-
 sys/shell/src/shell.c                           |   3 +-
 sys/shell/syscfg.yml                            |   4 +-
 sys/stats/full/pkg.yml                          |   2 +-
 sys/stats/stub/include/stats/stats.h            |   2 +-
 test/crash_test/syscfg.yml                      |   4 +-
 test/flash_test/src/flash_test/flash_test.c     |  20 +-
 test/runtest/include/runtest/runtest.h          |   5 +
 test/runtest/pkg.yml                            |   3 +-
 test/runtest/src/runtest.c                      |  19 +
 test/runtest/src/runtest_nmgr.c                 |   8 -
 test/runtest/syscfg.yml                         |   4 +-
 test/testutil/src/testutil.c                    |   2 +-
 373 files changed, 10914 insertions(+), 6393 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d21ef0fd/apps/slinky/src/main.c
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d21ef0fd/net/oic/src/api/oc_buffer.c
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d21ef0fd/net/oic/src/port/mynewt/ble_adaptor.c
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d21ef0fd/sys/shell/src/shell.c
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d21ef0fd/sys/shell/syscfg.yml
----------------------------------------------------------------------


[22/50] incubator-mynewt-core git commit: Fixed leftover accel ref

Posted by vi...@apache.org.
Fixed leftover accel ref


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/91000d2d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/91000d2d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/91000d2d

Branch: refs/heads/develop
Commit: 91000d2d4e12b784f7b0f606b9ebd6e0f6ad587c
Parents: 95a34bd
Author: microbuilder <co...@microbuilder.eu>
Authored: Thu Dec 29 15:06:46 2016 +0100
Committer: microbuilder <co...@microbuilder.eu>
Committed: Thu Dec 29 15:06:46 2016 +0100

----------------------------------------------------------------------
 hw/drivers/sensors/sim/src/generic_mag.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/91000d2d/hw/drivers/sensors/sim/src/generic_mag.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/sim/src/generic_mag.c b/hw/drivers/sensors/sim/src/generic_mag.c
index e21f10e..f4eb385 100644
--- a/hw/drivers/sensors/sim/src/generic_mag.c
+++ b/hw/drivers/sensors/sim/src/generic_mag.c
@@ -112,7 +112,7 @@ sim_mag_sensor_read(struct sensor *sensor, sensor_type_t type,
     int i;
     int rc;
 
-    /* If the read isn't looking for accel data, then don't do anything. */
+    /* If the read isn't looking for mag data, then don't do anything. */
     if (!(type & SENSOR_TYPE_MAGNETIC_FIELD)) {
         rc = SYS_EINVAL;
         goto err;
@@ -122,7 +122,7 @@ sim_mag_sensor_read(struct sensor *sensor, sensor_type_t type,
 
     /* When a sensor is "read", we get the last 'n' samples from the device
      * and pass them to the sensor data function.  Based on the sample
-     * interval provided to sim_accel_config() and the last time this function
+     * interval provided to sim_mag_config() and the last time this function
      * was called, 'n' samples are generated.
      */
     now = os_time_get();


[02/50] incubator-mynewt-core git commit: bleprph_oic; increase the number of mbufs allocated.

Posted by vi...@apache.org.
bleprph_oic; increase the number of mbufs allocated.


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/4947fa48
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/4947fa48
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/4947fa48

Branch: refs/heads/develop
Commit: 4947fa48f7ff6a7efdbaebee5fd6e479379d91b7
Parents: 429ab09
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Thu Dec 15 12:26:47 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Sun Dec 18 13:56:17 2016 -0800

----------------------------------------------------------------------
 apps/bleprph_oic/syscfg.yml | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4947fa48/apps/bleprph_oic/syscfg.yml
----------------------------------------------------------------------
diff --git a/apps/bleprph_oic/syscfg.yml b/apps/bleprph_oic/syscfg.yml
index f9ec211..677c5fe 100644
--- a/apps/bleprph_oic/syscfg.yml
+++ b/apps/bleprph_oic/syscfg.yml
@@ -20,15 +20,27 @@ syscfg.vals:
     # Use INFO log level to reduce code size.  DEBUG is too large for nRF51.
     LOG_LEVEL: 0
 
+    BLE_GATT_WRITE_MAX_ATTRS: 6
+    BLE_HCI_EVT_HI_BUF_COUNT: 4
+    BLE_HCI_EVT_LO_BUF_COUNT: 3
+
     # Disable central and observer roles.
     BLE_ROLE_BROADCASTER: 1
     BLE_ROLE_CENTRAL: 0
     BLE_ROLE_OBSERVER: 0
     BLE_ROLE_PERIPHERAL: 1
 
+    # Disable security manager
+    BLE_SM: 0
+    BLE_LL_CFG_FEAT_LE_ENCRYPTION: 0
+    BLE_LL_CFG_FEAT_LL_PRIVACY: 0
+
     # Disable unused eddystone feature.
     BLE_EDDYSTONE: 0
 
+    # Need to get this down. XXXXX
+    MSYS_1_BLOCK_COUNT: 18
+
     # Log reboot messages to a flash circular buffer.
     REBOOT_LOG_FCB: 1
     LOG_FCB: 1
@@ -41,9 +53,9 @@ syscfg.vals:
     # Enable Config.
     CONFIG_NEWTMGR: 1
 
+    # OC server, with bluetooth transport.
     OC_SERVER: 1
     OC_TRANSPORT_GATT: 1
-    OC_TRANSPORT_SERIAL: 1
 
     SHELL_TASK: 1
     STATS_CLI: 1


[44/50] incubator-mynewt-core git commit: revert accidental changes to hal_bsp.c

Posted by vi...@apache.org.
revert accidental changes to hal_bsp.c


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/ac59febd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/ac59febd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/ac59febd

Branch: refs/heads/develop
Commit: ac59febde202d6bc9c23fa967ae01b894bbb4e1a
Parents: e4d0f04
Author: Vipul Rahane <vi...@apache.org>
Authored: Tue Feb 21 18:31:46 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Tue Feb 21 18:31:46 2017 -0800

----------------------------------------------------------------------
 hw/bsp/nrf52dk/src/hal_bsp.c | 49 ---------------------------------------
 1 file changed, 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ac59febd/hw/bsp/nrf52dk/src/hal_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf52dk/src/hal_bsp.c b/hw/bsp/nrf52dk/src/hal_bsp.c
index a2909c3..40ce57b 100644
--- a/hw/bsp/nrf52dk/src/hal_bsp.c
+++ b/hw/bsp/nrf52dk/src/hal_bsp.c
@@ -42,20 +42,6 @@
 #endif
 #include "os/os_dev.h"
 #include "bsp.h"
-#include <lsm303dlhc/lsm303dlhc.h>
-#include <tsl2561/tsl2561.h>
-#include <bno055/bno055.h>
-
-#if MYNEWT_VAL(LSM303DLHC_PRESENT)
-static struct lsm303dlhc lsm303dlhc;
-#endif
-#if MYNEWT_VAL(TSL2561_PRESENT)
-static struct tsl2561 tsl2561;
-#endif
-#if MYNEWT_VAL(BNO055_PRESENT)
-static struct bno055 bno055;
-#endif
-
 
 #if MYNEWT_VAL(UART_0)
 static struct uart_dev os_bsp_uart0;
@@ -165,23 +151,6 @@ hal_bsp_get_nvic_priority(int irq_num, uint32_t pri)
     return cfg_pri;
 }
 
-#if MYNEWT_VAL(LSM303DLHC_PRESENT) || MYNEWT_VAL(BNO055_PRESENT)
-static int
-slinky_accel_init(struct os_dev *dev, void *arg)
-{
-    return (0);
-}
-#endif
-
-#if MYNEWT_VAL(TSL2561_PRESENT)
-static int
-slinky_light_init(struct os_dev *dev, void *arg)
-{
-    return (0);
-}
-#endif
-
-
 void
 hal_bsp_init(void)
 {
@@ -245,22 +214,4 @@ hal_bsp_init(void)
     assert(rc == 0);
 #endif
 
-#if MYNEWT_VAL(LSM303DLHC_PRESENT)
-    rc = os_dev_create((struct os_dev *) &lsm303dlhc, "accel0",
-            OS_DEV_INIT_KERNEL, OS_DEV_INIT_PRIMARY, slinky_accel_init, NULL);
-    assert(rc == 0);
-#endif
-
-#if MYNEWT_VAL(BNO055_PRESENT)
-    rc = os_dev_create((struct os_dev *) &bno055, "accel1",
-            OS_DEV_INIT_KERNEL, OS_DEV_INIT_PRIMARY, slinky_accel_init, NULL);
-    assert(rc == 0);
-#endif
-
-#if MYNEWT_VAL(TSL2561_PRESENT)
-    rc = os_dev_create((struct os_dev *) &tsl2561, "light0",
-            OS_DEV_INIT_KERNEL, OS_DEV_INIT_PRIMARY, slinky_light_init, NULL);
-    assert(rc == 0);
-#endif
-
 }


[35/50] incubator-mynewt-core git commit: SensorAPI - BNO055 Add external crystal support

Posted by vi...@apache.org.
SensorAPI - BNO055 Add external crystal support


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/33253b22
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/33253b22
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/33253b22

Branch: refs/heads/develop
Commit: 33253b22f303eb924e9656a86327f4f3e5b140f6
Parents: 5a76b68
Author: Vipul Rahane <vi...@apache.org>
Authored: Mon Feb 13 11:34:26 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Mon Feb 13 11:34:26 2017 -0800

----------------------------------------------------------------------
 apps/slinky/src/main.c                      |  2 +-
 hw/drivers/sensors/bno055/src/bno055.c      | 82 ++++++++++++++++++++++--
 hw/drivers/sensors/bno055/src/bno055_priv.h |  5 ++
 3 files changed, 84 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/33253b22/apps/slinky/src/main.c
----------------------------------------------------------------------
diff --git a/apps/slinky/src/main.c b/apps/slinky/src/main.c
index aa58fcb..2bdcc76 100755
--- a/apps/slinky/src/main.c
+++ b/apps/slinky/src/main.c
@@ -292,7 +292,7 @@ config_sensor(void)
 #if MYNEWT_VAL(BNO055_PRESENT)
     struct bno055_cfg bcfg;
 
-    dev = (struct os_dev *) os_dev_open("accel0", OS_TIMEOUT_NEVER, NULL);
+    dev = (struct os_dev *) os_dev_open("accel1", OS_TIMEOUT_NEVER, NULL);
     assert(dev != NULL);
 
     rc = bno055_init(dev, NULL);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/33253b22/hw/drivers/sensors/bno055/src/bno055.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055.c b/hw/drivers/sensors/bno055/src/bno055.c
index 665db28..b74fcb2 100644
--- a/hw/drivers/sensors/bno055/src/bno055.c
+++ b/hw/drivers/sensors/bno055/src/bno055.c
@@ -160,7 +160,7 @@ bno055_read8(uint8_t reg, uint8_t *value)
     /* Register write */
     payload = reg;
     rc = hal_i2c_master_write(MYNEWT_VAL(BNO055_I2CBUS), &data_struct,
-                              OS_TICKS_PER_SEC / 10, 1);
+                              OS_TICKS_PER_SEC / 10, 0);
     if (rc) {
         BNO055_ERR("I2C register write failed at address 0x%02X:0x%02X\n",
                    data_struct.address, reg);
@@ -366,6 +366,62 @@ err:
     return rc;
 }
 
+/**
+ * Use external crystal 32.768KHz
+ *
+ * @return 0 on success, non-zero on failure
+ */
+static int
+bno055_set_ext_xtal_use(uint8_t use_xtal)
+{
+    int rc;
+    uint8_t prev_mode;
+
+    prev_mode = g_bno055_mode;
+
+    /* Switch to config mode */
+    rc = bno055_set_mode(BNO055_OPERATION_MODE_CONFIG);
+    if (rc) {
+        goto err;
+    }
+
+    os_time_delay(OS_TICKS_PER_SEC/1000 * 25);
+
+    rc = bno055_write8(BNO055_PAGE_ID_ADDR, 0);
+    if (rc) {
+        goto err;
+    }
+
+    if (use_xtal) {
+        /* Use External Clock */
+        rc = bno055_write8(BNO055_SYS_TRIGGER_ADDR, BNO055_SYS_TRIGGER_CLK_SEL);
+        if (rc) {
+            goto err;
+        }
+    } else {
+        /* Use Internal clock */
+        rc = bno055_write8(BNO055_SYS_TRIGGER_ADDR, 0x00);
+        if (rc) {
+            goto err;
+        }
+    }
+
+    os_time_delay(OS_TICKS_PER_SEC/1000 * 10);
+
+    /* Reset to previous operating mode */
+    rc = bno055_set_mode(prev_mode);
+    if (rc) {
+        goto err;
+    }
+
+    os_time_delay(OS_TICKS_PER_SEC/1000 * 20);
+
+    return 0;
+err:
+    return rc;
+}
+
+
 int
 bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
 {
@@ -375,6 +431,16 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
 
     prev_mode = g_bno055_mode;
 
+    /**
+     * As per Section 5.5 in the BNO055 Datasheet,
+     * external crystal should be used for accurate
+     * results
+     */
+    rc = bno055_set_ext_xtal_use(1);
+    if (rc) {
+        goto err;
+    }
+
     /* Check if we can read the chip address */
     rc = bno055_read8(BNO055_CHIP_ID_ADDR, &id);
     if (rc) {
@@ -390,6 +456,7 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
         }
 
         if(id != BNO055_ID) {
+            rc = SYS_EINVAL;
             goto err;
         }
     }
@@ -430,8 +497,6 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
         goto err;
     }
 
-    os_time_delay(OS_TICKS_PER_SEC/1000 * 20);
-
     return 0;
 err:
     return rc;
@@ -514,6 +579,13 @@ bno055_find_reg(sensor_type_t type, uint8_t *reg)
     return rc;
 }
 
+/**
+ * Get vector data from sensor
+ *
+ * @param pointer to teh structure to be filled up
+ * @param Type of sensor
+ * @return 0 on success, non-zero on error
+ */
 int
 bno055_get_vector_data(void *datastruct, int type)
 {
@@ -592,7 +664,8 @@ err:
 /**
  * Get temperature from bno055 sensor
  *
- * @return temperature in degree celcius
+ * @param pointer to the temperature variable to be filled up
+ * @return 0 on success, non-zero on error
  */
 int
 bno055_get_temp(int8_t *temp)
@@ -826,3 +899,4 @@ bno055_sensor_get_config(struct sensor *sensor, sensor_type_t type,
 err:
     return (rc);
 }
+

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/33253b22/hw/drivers/sensors/bno055/src/bno055_priv.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_priv.h b/hw/drivers/sensors/bno055/src/bno055_priv.h
index 3a2da68..295e83b 100644
--- a/hw/drivers/sensors/bno055/src/bno055_priv.h
+++ b/hw/drivers/sensors/bno055/src/bno055_priv.h
@@ -107,6 +107,11 @@
 #define BNO055_PWR_MODE_ADDR                                    0X3E
 
 #define BNO055_SYS_TRIGGER_ADDR                                 0X3F
+#define BNO055_SYS_TRIGGER_CLK_SEL                              (0x01 << 7)
+#define BNO055_SYS_TRIGGER_RST_INT                              (0x01 << 6)
+#define BNO055_SYS_TRIGGER_RST_SYS                              (0x01 << 5)
+#define BNO055_SYS_TRIGGER_SELF_TEST                            (0x01)
+
 #define BNO055_TEMP_SOURCE_ADDR                                 0X40
 
 /* Axis remap registers */


[38/50] incubator-mynewt-core git commit: SensorAPI - BNO055 fixing bugs with the shell

Posted by vi...@apache.org.
SensorAPI - BNO055 fixing bugs with the shell

- Cleaning up more to remove unused code.


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/ea2ff6d9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/ea2ff6d9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/ea2ff6d9

Branch: refs/heads/develop
Commit: ea2ff6d99fb5474359480d18700c584a20e028ad
Parents: 4f61ce1
Author: Vipul Rahane <vi...@apache.org>
Authored: Wed Feb 15 13:40:47 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Wed Feb 15 13:40:47 2017 -0800

----------------------------------------------------------------------
 hw/drivers/sensors/bno055/src/bno055.c       |  1 +
 hw/drivers/sensors/bno055/src/bno055_shell.c | 90 ++---------------------
 2 files changed, 6 insertions(+), 85 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ea2ff6d9/hw/drivers/sensors/bno055/src/bno055.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055.c b/hw/drivers/sensors/bno055/src/bno055.c
index 3080f7b..8b31ac6 100644
--- a/hw/drivers/sensors/bno055/src/bno055.c
+++ b/hw/drivers/sensors/bno055/src/bno055.c
@@ -266,6 +266,7 @@ bno055_set_mode(uint8_t mode)
         goto err;
     }
 
+    /* Refer table 3-6 in the datasheet for the delay values */
     if (mode == BNO055_OPERATION_MODE_CONFIG) {
         os_time_delay(OS_TICKS_PER_SEC/1000 * 19);
     } else {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ea2ff6d9/hw/drivers/sensors/bno055/src/bno055_shell.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_shell.c b/hw/drivers/sensors/bno055/src/bno055_shell.c
index 82ba7e3..919aa48 100644
--- a/hw/drivers/sensors/bno055/src/bno055_shell.c
+++ b/hw/drivers/sensors/bno055/src/bno055_shell.c
@@ -118,7 +118,7 @@ bno055_shell_cmd_get_chip_id(int argc, char **argv)
         if (rc) {
             console_printf("Read failed %d", rc);
         }
-        console_printf("%x\n", id ? 16u : 1u);
+        console_printf("0x%02X\n", id);
     }
 
     return 0;
@@ -140,8 +140,8 @@ bno055_shell_cmd_get_rev_info(int argc, char **argv)
         if (rc) {
             console_printf("Read failed %d", rc);
         }
-        console_printf("accel_rev:%x\nmag_rev:%x\ngyro_rev:%x\n"
-                       "sw_rev:%x\nbl_rev:%x\n", ri.bri_accel_rev,
+        console_printf("accel_rev:0x%02X\nmag_rev:0x%02X\ngyro_rev:0x%02X\n"
+                       "sw_rev:0x%02X\nbl_rev:0x%02X\n", ri.bri_accel_rev,
                        ri.bri_mag_rev, ri.bri_gyro_rev, ri.bri_sw_rev,
                        ri.bri_bl_rev);
     }
@@ -234,12 +234,12 @@ bno055_shell_cmd_mode(int argc, char **argv)
     /* Display the mode */
     if (argc == 2) {
         val = bno055_get_mode();
-        console_printf("%u\n", val ? 16u : 1u);
+        console_printf("%u\n", (unsigned int)val);
     }
 
     /* Update the mode */
     if (argc == 3) {
-        if (bno055_shell_stol(argv[2], 1, 16, &val)) {
+        if (bno055_shell_stol(argv[2], 0, 16, &val)) {
             return bno055_shell_err_invalid_arg(argv[2]);
         }
         /* Make sure mode is */
@@ -258,86 +258,6 @@ err:
     return rc;
 }
 
-#if 0
-static int
-bno055_shell_cmd_int(int argc, char **argv)
-{
-    int rc;
-    int pin;
-    long val;
-    uint8_t rate;
-    uint16_t lower;
-    uint16_t upper;
-
-    if (argc > 6) {
-        return bno055_shell_err_too_many_args(argv[1]);
-    }
-
-    if (argc == 2) {
-        console_printf("ToDo: Display int details\n");
-        return 0;
-    }
-
-    /* Enable the interrupt */
-    if (argc == 3 && strcmp(argv[2], "on") == 0) {
-        return bno055_enable_interrupt(1);
-    }
-
-    /* Disable the interrupt */
-    if (argc == 3 && strcmp(argv[2], "off") == 0) {
-        return bno055_enable_interrupt(0);
-    }
-
-    /* Clear the interrupt on 'clr' */
-    if (argc == 3 && strcmp(argv[2], "clr") == 0) {
-        return bno055_clear_interrupt();
-    }
-
-    /* Configure the interrupt on 'set' */
-    if (argc == 6 && strcmp(argv[2], "set") == 0) {
-        /* Get rate */
-        if (bno055_shell_stol(argv[3], 0, 15, &val)) {
-            return bno055_shell_err_invalid_arg(argv[3]);
-        }
-        rate = (uint8_t)val;
-        /* Get lower threshold */
-        if (bno055_shell_stol(argv[4], 0, UINT16_MAX, &val)) {
-            return bno055_shell_err_invalid_arg(argv[4]);
-        }
-        lower = (uint16_t)val;
-        /* Get upper threshold */
-        if (bno055_shell_stol(argv[5], 0, UINT16_MAX, &val)) {
-            return bno055_shell_err_invalid_arg(argv[5]);
-        }
-        upper = (uint16_t)val;
-        /* Set the values */
-        rc = bno055_setup_interrupt(rate, lower, upper);
-        console_printf("Configured interrupt as:\n");
-        console_printf("\trate: %u\n", rate);
-        console_printf("\tlower: %u\n", lower);
-        console_printf("\tupper: %u\n", upper);
-        return rc;
-    }
-
-    /* Setup INT pin on 'pin' */
-    if (argc == 4 && strcmp(argv[2], "pin") == 0) {
-        /* Get the pin number */
-        if (bno055_shell_stol(argv[3], 0, 0xFF, &val)) {
-            return bno055_shell_err_invalid_arg(argv[3]);
-        }
-        pin = (int)val;
-        /* INT is open drain, pullup is required */
-        rc = hal_gpio_init_in(pin, HAL_GPIO_PULL_UP);
-        assert(rc == 0);
-        console_printf("Set pin \"%d\" to INPUT with pull up enabled\n", pin);
-        return 0;
-    }
-
-    /* Unknown command */
-    return bno055_shell_err_invalid_arg(argv[2]);
-}
-#endif
-
 static int
 bno055_shell_cmd_dumpreg(int argc, char **argv)
 {


[37/50] incubator-mynewt-core git commit: SensorAPI - BNO055 Cleaning up & fixes

Posted by vi...@apache.org.
SensorAPI - BNO055 Cleaning up & fixes

- Adding prototype for write8
- fixing addressing


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/4f61ce12
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/4f61ce12
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/4f61ce12

Branch: refs/heads/develop
Commit: 4f61ce122f0b55b90a91e32c655d5982fe1c177c
Parents: 521ea9b
Author: Vipul Rahane <vi...@apache.org>
Authored: Tue Feb 14 16:56:48 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Tue Feb 14 16:56:48 2017 -0800

----------------------------------------------------------------------
 .../sensors/bno055/include/bno055/bno055.h      | 11 +++++++
 hw/drivers/sensors/bno055/src/bno055.c          | 16 +++++-----
 hw/drivers/sensors/bno055/src/bno055_shell.c    | 31 ++++++++++++++++----
 3 files changed, 45 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4f61ce12/hw/drivers/sensors/bno055/include/bno055/bno055.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/include/bno055/bno055.h b/hw/drivers/sensors/bno055/include/bno055/bno055.h
index 64138d5..1e30ba2 100644
--- a/hw/drivers/sensors/bno055/include/bno055/bno055.h
+++ b/hw/drivers/sensors/bno055/include/bno055/bno055.h
@@ -88,6 +88,17 @@ int
 bno055_read8(uint8_t reg, uint8_t *value);
 
 /**
+ * Writes a single byte to the specified register
+ *
+ * @param The register address to write to
+ * @param The value to write
+ *
+ * @return 0 on success, non-zero error on failure.
+ */
+int
+bno055_write8(uint8_t reg, uint8_t value);
+
+/**
  * Setting mode for the bno055 sensor
  *
  * @param Operation mode for the sensor

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4f61ce12/hw/drivers/sensors/bno055/src/bno055.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055.c b/hw/drivers/sensors/bno055/src/bno055.c
index 43e72b8..3080f7b 100644
--- a/hw/drivers/sensors/bno055/src/bno055.c
+++ b/hw/drivers/sensors/bno055/src/bno055.c
@@ -113,10 +113,10 @@ static uint8_t g_bno055_mode;
  * @return 0 on success, non-zero error on failure.
  */
 int
-bno055_write8(uint8_t reg, uint32_t value)
+bno055_write8(uint8_t reg, uint8_t value)
 {
     int rc;
-    uint8_t payload[2] = { reg, value & 0xFF };
+    uint8_t payload[2] = { reg, value};
 
     struct hal_i2c_master_data data_struct = {
         .address = MYNEWT_VAL(BNO055_I2CADDR),
@@ -203,7 +203,7 @@ bno055_readlen(uint8_t reg, uint8_t *buffer, uint8_t len)
     uint8_t payload[8] = { reg, 0, 0, 0, 0, 0, 0, 0};
 
     struct hal_i2c_master_data data_struct = {
-        .address = reg,
+        .address = MYNEWT_VAL(BNO055_I2CADDR),
         .len = 1,
         .buffer = payload
     };
@@ -438,7 +438,7 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
     prev_mode = g_bno055_mode;
 
     /* Check if we can read the chip address */
-    rc = bno055_read8(BNO055_CHIP_ID_ADDR, &id);
+    rc = bno055_get_chip_id(&id);
     if (rc) {
         goto err;
     }
@@ -446,7 +446,7 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
     if (id != BNO055_ID) {
         os_time_delay(OS_TICKS_PER_SEC/2);
 
-        rc = bno055_read8(BNO055_CHIP_ID_ADDR, &id);
+        rc = bno055_get_chip_id(&id);
         if (rc) {
             goto err;
         }
@@ -457,13 +457,13 @@ bno055_config(struct bno055 *bno055, struct bno055_cfg *cfg)
         }
     }
 
-    rc = bno055_set_mode(BNO055_OPERATION_MODE_CONFIG);
+    /* Reset sensor */
+    rc = bno055_write8(BNO055_SYS_TRIGGER_ADDR, BNO055_SYS_TRIGGER_RST_SYS);
     if (rc) {
         goto err;
     }
 
-    /* Reset sensor */
-    rc = bno055_write8(BNO055_SYS_TRIGGER_ADDR, BNO055_SYS_TRIGGER_RST_SYS);
+    rc = bno055_set_mode(BNO055_OPERATION_MODE_CONFIG);
     if (rc) {
         goto err;
     }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4f61ce12/hw/drivers/sensors/bno055/src/bno055_shell.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/bno055/src/bno055_shell.c b/hw/drivers/sensors/bno055/src/bno055_shell.c
index 48a1196..82ba7e3 100644
--- a/hw/drivers/sensors/bno055/src/bno055_shell.c
+++ b/hw/drivers/sensors/bno055/src/bno055_shell.c
@@ -177,10 +177,10 @@ bno055_shell_cmd_read(int argc, char **argv)
         }
         samples = (uint16_t)val;
 
-        if (bno055_shell_stol(argv[2], 1, UINT16_MAX, &val)) {
+        if (bno055_shell_stol(argv[3], 0, UINT16_MAX, &val)) {
             return bno055_shell_err_invalid_arg(argv[2]);
         }
-        type = (uint16_t)(1 << val);
+        type = (int)(1 << val);
     }
 
     while(samples--) {
@@ -199,6 +199,7 @@ bno055_shell_cmd_read(int argc, char **argv)
             rc = bno055_get_vector_data(databuf, type);
             if (rc) {
                 console_printf("Read failed: %d\n", rc);
+                goto err;
             }
             sed = databuf;
             console_printf("h:%u r:%u p:%u\n", (unsigned int)sed->sed_h,
@@ -207,6 +208,7 @@ bno055_shell_cmd_read(int argc, char **argv)
             rc = bno055_get_vector_data(databuf, type);
             if (rc) {
                 console_printf("Read failed: %d\n", rc);
+                goto err;
             }
             sad = databuf;
             console_printf("x:%u y:%u z:%u\n", (unsigned int)sad->sad_x,
@@ -361,11 +363,13 @@ static int
 shell_i2cscan_cmd(int argc, char **argv)
 {
     uint8_t addr;
-    int32_t timeout = OS_TICKS_PER_SEC / 10;
+    int32_t timeout;
     uint8_t dev_count = 0;
     long i2cnum;
     int rc;
 
+    timeout = OS_TICKS_PER_SEC / 10;
+
     if (bno055_shell_stol(argv[2], 0, 0xf, &i2cnum)) {
         return bno055_shell_err_invalid_arg(argv[2]);
     }
@@ -389,13 +393,29 @@ shell_i2cscan_cmd(int argc, char **argv)
         } else {
             console_printf("-- ");
         }
+        os_time_delay(OS_TICKS_PER_SEC/1000 * 20);
     }
-    console_printf("\nFound %u devices on I2C bus 0\n", dev_count);
+    console_printf("\nFound %u devices on I2C bus %u\n", dev_count, (uint8_t)i2cnum);
 
     return 0;
 }
 
 static int
+bno055_shell_cmd_reset(int argc, char **argv)
+{
+    int rc;
+    /* Reset sensor */
+    rc = bno055_write8(BNO055_SYS_TRIGGER_ADDR, BNO055_SYS_TRIGGER_RST_SYS);
+    if (rc) {
+        goto err;
+    }
+
+    return 0;
+err:
+    return rc;
+}
+
+static int
 bno055_shell_cmd(int argc, char **argv)
 {
     if (argc == 1) {
@@ -421,18 +441,19 @@ bno055_shell_cmd(int argc, char **argv)
     if (argc > 1 && strcmp(argv[1], "rev") == 0) {
         return bno055_shell_cmd_get_rev_info(argc, argv);
     }
-#if 0
     /* Reset command */
     if (argc > 1 && strcmp(argv[1], "reset") == 0) {
         return bno055_shell_cmd_reset(argc, argv);
     }
 
+#if 0
     /* Power mode command */
     if (argc > 1 && strcmp(argv[1], "pmode") == 0) {
         return bno055_shell_cmd_pmode(argc, argv);
     }
 
 #endif
+
     /* Dump Registers command */
     if (argc > 1 && strcmp(argv[1], "dumpreg") == 0) {
         return bno055_shell_cmd_dumpreg(argc, argv);


[48/50] incubator-mynewt-core git commit: Fixing incomplete merge to the sensors_branch

Posted by vi...@apache.org.
Fixing incomplete merge to the sensors_branch


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/0f4d2e80
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/0f4d2e80
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/0f4d2e80

Branch: refs/heads/develop
Commit: 0f4d2e806f2cebbd3f1a61abec65e654b2735590
Parents: 60cd598
Author: Vipul Rahane <vi...@apache.org>
Authored: Thu Feb 23 14:46:15 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Thu Feb 23 14:46:15 2017 -0800

----------------------------------------------------------------------
 hw/drivers/mmc/include/mmc/mmc.h      | 14 -------
 hw/drivers/mmc/src/mmc.c              | 17 --------
 net/oic/include/oic/oc_ri.h           | 16 --------
 net/oic/src/api/oc_buffer.c           | 66 ------------------------------
 net/oic/src/api/oc_discovery.c        | 24 -----------
 net/oic/src/api/oc_rep.c              | 12 ------
 net/oic/src/api/oc_ri.c               |  4 --
 net/oic/src/api/oc_server_api.c       |  4 --
 net/oic/src/port/mynewt/ble_adaptor.c | 13 ------
 9 files changed, 170 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0f4d2e80/hw/drivers/mmc/include/mmc/mmc.h
----------------------------------------------------------------------
diff --git a/hw/drivers/mmc/include/mmc/mmc.h b/hw/drivers/mmc/include/mmc/mmc.h
index bc60dac..4b14e27 100644
--- a/hw/drivers/mmc/include/mmc/mmc.h
+++ b/hw/drivers/mmc/include/mmc/mmc.h
@@ -21,10 +21,7 @@
 #define __MMC_H__
 
 #include <os/os_dev.h>
-<<<<<<< HEAD
-=======
 #include <disk/disk.h>
->>>>>>> develop
 
 #ifdef __cplusplus
 extern "C" {
@@ -47,11 +44,8 @@ extern "C" {
 #define MMC_ERASE_ERROR       (-11)
 #define MMC_ADDR_ERROR        (-12)
 
-<<<<<<< HEAD
-=======
 extern struct disk_ops mmc_ops;
 
->>>>>>> develop
 /**
  * Initialize the MMC driver
  *
@@ -75,11 +69,7 @@ mmc_init(int spi_num, void *spi_cfg, int ss_pin);
  * @return 0 on success, non-zero on failure
  */
 int
-<<<<<<< HEAD
-mmc_read(uint8_t mmc_id, uint32_t addr, void *buf, size_t len);
-=======
 mmc_read(uint8_t mmc_id, uint32_t addr, void *buf, uint32_t len);
->>>>>>> develop
 
 /**
  * Write data to the MMC
@@ -92,9 +82,6 @@ mmc_read(uint8_t mmc_id, uint32_t addr, void *buf, uint32_t len);
  * @return 0 on success, non-zero on failure
  */
 int
-<<<<<<< HEAD
-mmc_write(uint8_t mmc_id, uint32_t addr, const void *buf, size_t len);
-=======
 mmc_write(uint8_t mmc_id, uint32_t addr, const void *buf, uint32_t len);
 
 /**
@@ -102,7 +89,6 @@ mmc_write(uint8_t mmc_id, uint32_t addr, const void *buf, uint32_t len);
  */
 int
 mmc_ioctl(uint8_t mmc_id, uint32_t cmd, void *arg);
->>>>>>> develop
 
 #ifdef __cplusplus
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0f4d2e80/hw/drivers/mmc/src/mmc.c
----------------------------------------------------------------------
diff --git a/hw/drivers/mmc/src/mmc.c b/hw/drivers/mmc/src/mmc.c
index 1a09f34..cae8c29 100644
--- a/hw/drivers/mmc/src/mmc.c
+++ b/hw/drivers/mmc/src/mmc.c
@@ -19,14 +19,8 @@
 
 #include <hal/hal_spi.h>
 #include <hal/hal_gpio.h>
-<<<<<<< HEAD
-
-#include <mmc/mmc.h>
-
-=======
 #include <disk/disk.h>
 #include <mmc/mmc.h>
->>>>>>> develop
 #include <stdio.h>
 
 #define MIN(n, m) (((n) < (m)) ? (n) : (m))
@@ -366,11 +360,7 @@ wait_busy(struct mmc_cfg *mmc)
  * @return 0 on success, non-zero on failure
  */
 int
-<<<<<<< HEAD
-mmc_read(uint8_t mmc_id, uint32_t addr, void *buf, size_t len)
-=======
 mmc_read(uint8_t mmc_id, uint32_t addr, void *buf, uint32_t len)
->>>>>>> develop
 {
     uint8_t cmd;
     uint8_t res;
@@ -458,11 +448,7 @@ out:
  * @return 0 on success, non-zero on failure
  */
 int
-<<<<<<< HEAD
-mmc_write(uint8_t mmc_id, uint32_t addr, const void *buf, size_t len)
-=======
 mmc_write(uint8_t mmc_id, uint32_t addr, const void *buf, uint32_t len)
->>>>>>> develop
 {
     uint8_t cmd;
     uint8_t res;
@@ -596,8 +582,6 @@ out:
     hal_gpio_write(mmc->ss_pin, 1);
     return (rc);
 }
-<<<<<<< HEAD
-=======
 
 /*
  *
@@ -616,4 +600,3 @@ struct disk_ops mmc_ops = {
     .write = &mmc_write,
     .ioctl = &mmc_ioctl,
 };
->>>>>>> develop

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0f4d2e80/net/oic/include/oic/oc_ri.h
----------------------------------------------------------------------
diff --git a/net/oic/include/oic/oc_ri.h b/net/oic/include/oic/oc_ri.h
index 5a81c52..d2f0f2e 100644
--- a/net/oic/include/oic/oc_ri.h
+++ b/net/oic/include/oic/oc_ri.h
@@ -97,15 +97,6 @@ typedef enum {
 
 typedef struct oc_resource oc_resource_t;
 
-<<<<<<< HEAD
-typedef struct {
-  oc_endpoint_t *origin;
-  oc_resource_t *resource;
-  const char *query;
-  int query_len;
-  oc_response_t *response;
-  void *packet;
-=======
 typedef struct oc_request {
     oc_endpoint_t *origin;
     oc_resource_t *resource;
@@ -113,7 +104,6 @@ typedef struct oc_request {
     int query_len;
     oc_response_t *response;
     struct coap_packet_rx *packet;
->>>>>>> develop
 } oc_request_t;
 
 typedef void (*oc_request_handler_t)(oc_request_t *, oc_interface_mask_t);
@@ -160,16 +150,10 @@ int oc_ri_get_query_value(const char *query, int query_len, const char *key,
 oc_interface_mask_t oc_ri_get_interface_mask(char *iface, int if_len);
 
 typedef struct coap_packet coap_packet_t;
-<<<<<<< HEAD
-bool oc_ri_invoke_coap_entity_handler(coap_packet_t *request,
-                                      coap_packet_t *response,
-                                      int32_t *offset, oc_endpoint_t *endpoint);
-=======
 struct coap_packet_rx;
 bool oc_ri_invoke_coap_entity_handler(struct coap_packet_rx *request,
                                       coap_packet_t *response, int32_t *offset,
                                       oc_endpoint_t *endpoint);
->>>>>>> develop
 
 #ifdef __cplusplus
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0f4d2e80/net/oic/src/api/oc_buffer.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_buffer.c b/net/oic/src/api/oc_buffer.c
index 9bb1ea0..74eca1c 100644
--- a/net/oic/src/api/oc_buffer.c
+++ b/net/oic/src/api/oc_buffer.c
@@ -32,12 +32,6 @@
 
 #include "port/mynewt/adaptor.h"
 
-<<<<<<< HEAD
-static struct os_mempool oc_buffers;
-static uint8_t oc_buffer_area[OS_MEMPOOL_BYTES(1, sizeof(oc_message_t))];
-
-=======
->>>>>>> develop
 static struct os_mqueue oc_inq;
 static struct os_mqueue oc_outq;
 
@@ -56,31 +50,6 @@ oc_allocate_mbuf(struct oc_endpoint *oe)
 }
 
 void
-<<<<<<< HEAD
-oc_message_add_ref(oc_message_t *message)
-{
-    if (message) {
-        message->ref_count++;
-    }
-}
-
-void
-oc_message_unref(oc_message_t *message)
-{
-    if (message) {
-        assert(message->ref_count > 0);
-        message->ref_count--;
-        if (message->ref_count == 0) {
-            os_memblock_put(&oc_buffers, message);
-            OC_LOG_DEBUG("buffer: freed oc_message; free: %d\n",
-              oc_buffers.mp_num_free);
-        }
-    }
-}
-
-void
-=======
->>>>>>> develop
 oc_recv_message(struct os_mbuf *m)
 {
     int rc;
@@ -146,22 +115,6 @@ oc_buffer_rx(struct os_event *ev)
     while ((m = os_mqueue_get(&oc_inq)) != NULL) {
         OC_LOG_DEBUG("oc_buffer_rx: ");
         OC_LOG_ENDPOINT(LOG_LEVEL_DEBUG, OC_MBUF_ENDPOINT(m));
-<<<<<<< HEAD
-
-        if (OS_MBUF_PKTHDR(m)->omp_len > MAX_PAYLOAD_SIZE) {
-            STATS_INC(coap_stats, itoobig);
-            goto free_msg;
-        }
-        if (os_mbuf_copydata(m, 0, OS_MBUF_PKTHDR(m)->omp_len, msg->data)) {
-            STATS_INC(coap_stats, imem);
-            goto free_msg;
-        }
-        memcpy(&msg->endpoint, OC_MBUF_ENDPOINT(m), sizeof(msg->endpoint));
-        msg->length = OS_MBUF_PKTHDR(m)->omp_len;
-        os_mbuf_free_chain(m);
-        m = NULL;
-=======
->>>>>>> develop
 
 #ifdef OC_SECURITY
         /*
@@ -172,16 +125,6 @@ oc_buffer_rx(struct os_event *ev)
             OC_LOG_DEBUG("oc_buffer_rx: encrypted request\n");
             oc_process_post(&oc_dtls_handler, oc_events[UDP_TO_DTLS_EVENT], m);
         } else {
-<<<<<<< HEAD
-            coap_receive(msg);
-        }
-#else
-        coap_receive(msg);
-#endif
-free_msg:
-        if (msg) {
-            oc_message_unref(msg);
-=======
             coap_receive(m);
         }
 #else
@@ -189,10 +132,6 @@ free_msg:
 #endif
         if (m) {
             os_mbuf_free_chain(m);
->>>>>>> develop
-        }
-        if (m) {
-            os_mbuf_free_chain(m);
         }
     }
 }
@@ -200,11 +139,6 @@ free_msg:
 void
 oc_buffer_init(void)
 {
-<<<<<<< HEAD
-    os_mempool_init(&oc_buffers, 1, sizeof(oc_message_t), oc_buffer_area,
-                    "oc_bufs");
-=======
->>>>>>> develop
     os_mqueue_init(&oc_inq, oc_buffer_rx, NULL);
     os_mqueue_init(&oc_outq, oc_buffer_tx, NULL);
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0f4d2e80/net/oic/src/api/oc_discovery.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_discovery.c b/net/oic/src/api/oc_discovery.c
index 3c74ac8..066764c 100644
--- a/net/oic/src/api/oc_discovery.c
+++ b/net/oic/src/api/oc_discovery.c
@@ -136,7 +136,6 @@ oc_core_discovery_handler(oc_request_t *req, oc_interface_mask_t interface)
     rt_len = oc_ri_get_query_value(req->query, req->query_len, "rt", &rt);
 
     oc_uuid_to_str(oc_core_get_device_id(0), uuid, sizeof(uuid));
-<<<<<<< HEAD
 
     switch (interface) {
     case OC_IF_LL: {
@@ -158,29 +157,6 @@ oc_core_discovery_handler(oc_request_t *req, oc_interface_mask_t interface)
 
     int response_length = oc_rep_finalize();
 
-=======
-
-    switch (interface) {
-    case OC_IF_LL: {
-        oc_rep_start_links_array();
-        matches = process_device_object(oc_rep_array(links), uuid, rt, rt_len);
-        oc_rep_end_links_array();
-    } break;
-    case OC_IF_BASELINE: {
-        oc_rep_start_root_object();
-        oc_process_baseline_interface(req->resource);
-        oc_rep_set_array(root, links);
-        matches = process_device_object(oc_rep_array(links), uuid, rt, rt_len);
-        oc_rep_close_array(root, links);
-        oc_rep_end_root_object();
-    } break;
-    default:
-        break;
-    }
-
-    int response_length = oc_rep_finalize();
-
->>>>>>> develop
     if (matches && response_length > 0) {
         req->response->response_buffer->response_length = response_length;
         req->response->response_buffer->code = oc_status_code(OC_STATUS_OK);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0f4d2e80/net/oic/src/api/oc_rep.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_rep.c b/net/oic/src/api/oc_rep.c
index 1337f2e..c7022d8 100644
--- a/net/oic/src/api/oc_rep.c
+++ b/net/oic/src/api/oc_rep.c
@@ -23,11 +23,7 @@
 #include "port/oc_assert.h"
 #include "api/oc_priv.h"
 #include <tinycbor/cbor_mbuf_writer.h>
-<<<<<<< HEAD
-#include <tinycbor/cbor_buf_reader.h>
-=======
 #include <tinycbor/cbor_mbuf_reader.h>
->>>>>>> develop
 
 #ifdef OC_CLIENT
 static struct os_mempool oc_rep_objects;
@@ -35,18 +31,10 @@ static uint8_t oc_rep_objects_area[OS_MEMPOOL_BYTES(EST_NUM_REP_OBJECTS,
       sizeof(oc_rep_t))];
 #endif
 
-<<<<<<< HEAD
-static const CborEncoder g_empty;
-static struct os_mbuf *g_outm;
-CborEncoder g_encoder, root_map, links_array;
-CborError g_err;
-struct CborMbufWriter g_buf_writer;
-=======
 static struct os_mbuf *g_outm;
 CborEncoder g_encoder, root_map, links_array;
 CborError g_err;
 struct cbor_mbuf_writer g_buf_writer;
->>>>>>> develop
 
 void
 oc_rep_new(struct os_mbuf *m)

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0f4d2e80/net/oic/src/api/oc_ri.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_ri.c b/net/oic/src/api/oc_ri.c
index 2266a9b..d6180a6 100644
--- a/net/oic/src/api/oc_ri.c
+++ b/net/oic/src/api/oc_ri.c
@@ -347,11 +347,7 @@ does_interface_support_method(oc_resource_t *resource,
 }
 
 bool
-<<<<<<< HEAD
-oc_ri_invoke_coap_entity_handler(coap_packet_t *request,
-=======
 oc_ri_invoke_coap_entity_handler(struct coap_packet_rx *request,
->>>>>>> develop
                                  coap_packet_t *response, int32_t *offset,
                                  oc_endpoint_t *endpoint)
 {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0f4d2e80/net/oic/src/api/oc_server_api.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_server_api.c b/net/oic/src/api/oc_server_api.c
index 94a5e93..61acdcd 100644
--- a/net/oic/src/api/oc_server_api.c
+++ b/net/oic/src/api/oc_server_api.c
@@ -216,11 +216,7 @@ oc_interate_query(oc_request_t *request, char **key, int *key_len, char **value,
   return 1;
 }
 
-<<<<<<< HEAD
-#if 0 /* XXXX fix this */
-=======
 #if MYNEWT_VAL(OC_SEPARATE_RESPONSES)
->>>>>>> develop
 void
 oc_indicate_separate_response(oc_request_t *request,
                               oc_separate_response_t *response)

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0f4d2e80/net/oic/src/port/mynewt/ble_adaptor.c
----------------------------------------------------------------------
diff --git a/net/oic/src/port/mynewt/ble_adaptor.c b/net/oic/src/port/mynewt/ble_adaptor.c
index 95c7d73..056b11c 100644
--- a/net/oic/src/port/mynewt/ble_adaptor.c
+++ b/net/oic/src/port/mynewt/ble_adaptor.c
@@ -177,10 +177,7 @@ oc_ble_reass(struct os_mbuf *om1, uint16_t conn_handle)
           coap_tcp_msg_size(hdr, sizeof(hdr)) > pkt2->omp_len) {
             STAILQ_INSERT_TAIL(&oc_ble_reass_q, pkt2, omp_next);
         } else {
-<<<<<<< HEAD
-=======
             STATS_INC(oc_ble_stats, iframe);
->>>>>>> develop
             oc_recv_message(om2);
         }
     }
@@ -288,15 +285,9 @@ oc_ble_frag(struct os_mbuf *m, uint16_t mtu)
         STAILQ_NEXT(pkt, omp_next) = NULL;
         return 0;
     }
-<<<<<<< HEAD
-    off = pkt->omp_len % mtu;
-
-    while (off > mtu) {
-=======
 
     off = pkt->omp_len - (pkt->omp_len % mtu);
     while (off >= mtu) {
->>>>>>> develop
         n = os_msys_get_pkthdr(mtu, 0);
         if (!n) {
             goto err;
@@ -347,15 +338,11 @@ oc_send_buffer_gatt(struct os_mbuf *m)
     STATS_INCN(oc_ble_stats, obytes, OS_MBUF_PKTLEN(m));
 
     mtu = ble_att_mtu(conn_handle);
-<<<<<<< HEAD
-    assert(mtu > 4);
-=======
     if (mtu < 4) {
         oc_ble_coap_conn_del(conn_handle);
         os_mbuf_free_chain(m);
         return;
     }
->>>>>>> develop
     mtu -= 3; /* # of bytes for ATT notification base */
 
     if (oc_ble_frag(m, mtu)) {


[26/50] incubator-mynewt-core git commit: merge from develop, and update to support new sysinit

Posted by vi...@apache.org.
merge from develop, and update to support new sysinit


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/2681044e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/2681044e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/2681044e

Branch: refs/heads/develop
Commit: 2681044e84b6446a1a354278d8f5ca69bf6d447d
Parents: 6247b5a 71f7d65
Author: Sterling Hughes <st...@runtime.io>
Authored: Mon Jan 23 19:01:08 2017 -0800
Committer: Sterling Hughes <st...@runtime.io>
Committed: Mon Jan 23 19:01:08 2017 -0800

----------------------------------------------------------------------
 apps/blecent/pkg.yml                            |     4 +-
 apps/blecent/src/blecent.h                      |    12 +-
 apps/blecent/src/main.c                         |    63 +-
 apps/blecent/src/misc.c                         |    26 +-
 apps/blecent/src/peer.c                         |    20 +-
 apps/blecent/syscfg.yml                         |     4 +
 apps/blehci/pkg.yml                             |     2 +-
 apps/blehci/src/main.c                          |     9 +-
 apps/blehci/syscfg.yml                          |    24 +
 apps/bleprph/pkg.yml                            |     6 +-
 apps/bleprph/src/gatt_svr.c                     |   172 +-
 apps/bleprph/src/main.c                         |    64 +-
 apps/bleprph/syscfg.yml                         |     4 +
 apps/bleprph_oic/pkg.yml                        |     4 +-
 apps/bleprph_oic/src/gatt_svr.c                 |    79 +-
 apps/bleprph_oic/src/main.c                     |    57 +-
 apps/bleprph_oic/syscfg.yml                     |     5 +
 apps/bletest/pkg.yml                            |     4 +-
 apps/bletest/src/main.c                         |    47 +-
 apps/bletest/syscfg.yml                         |     6 +-
 apps/bletiny/pkg.yml                            |     7 +-
 apps/bletiny/src/bletiny.h                      |    15 +-
 apps/bletiny/src/cmd.c                          |    98 +-
 apps/bletiny/src/gatt_svr.c                     |   330 +-
 apps/bletiny/src/main.c                         |    90 +-
 apps/bletiny/src/misc.c                         |    20 +-
 apps/bletiny/src/parse.c                        |    27 +-
 apps/bletiny/syscfg.yml                         |     7 +-
 apps/bleuart/pkg.yml                            |     3 +-
 apps/bleuart/src/main.c                         |    44 +-
 apps/bleuart/syscfg.yml                         |     4 +
 apps/boot/syscfg.yml                            |     2 +
 apps/fat2native/pkg.yml                         |     2 +
 apps/ffs2native/pkg.yml                         |     2 +
 apps/ocf_sample/pkg.yml                         |     3 +-
 apps/ocf_sample/src/main.c                      |    86 +-
 apps/ocf_sample/syscfg.yml                      |     3 +
 apps/slinky/pkg.yml                             |    10 +-
 apps/slinky/src/main.c                          |    71 +-
 apps/slinky/syscfg.yml                          |     3 +
 apps/slinky_oic/pkg.yml                         |     6 +-
 apps/slinky_oic/src/main.c                      |    45 +-
 apps/slinky_oic/syscfg.yml                      |     4 +
 apps/spitest/pkg.yml                            |     4 +-
 apps/spitest/src/main.c                         |    40 +-
 apps/spitest/syscfg.yml                         |     4 +
 apps/splitty/pkg.yml                            |    15 +-
 apps/splitty/src/main.c                         |    47 +-
 apps/splitty/syscfg.yml                         |     4 +
 apps/testbench/pkg.yml                          |    57 +
 apps/testbench/src/testbench.c                  |   386 +
 apps/testbench/src/testbench.h                  |   189 +
 apps/testbench/src/testbench_json.c             |    82 +
 apps/testbench/src/testbench_mempool.c          |    98 +
 apps/testbench/src/testbench_mutex.c            |   172 +
 apps/testbench/src/testbench_sem.c              |   141 +
 apps/testbench/syscfg.yml                       |    37 +
 apps/timtest/pkg.yml                            |     4 +-
 apps/timtest/src/main.c                         |    39 +-
 boot/bootutil/design.txt                        |   191 +-
 boot/bootutil/include/bootutil/bootutil.h       |    15 +-
 boot/bootutil/include/bootutil/image.h          |     9 +-
 boot/bootutil/pkg.yml                           |     3 +
 boot/bootutil/signed_images.md                  |    16 +-
 boot/bootutil/src/bootutil_misc.c               |    46 +-
 boot/bootutil/src/image_ec.c                    |     5 +-
 boot/bootutil/src/image_ec256.c                 |   179 +
 boot/bootutil/src/image_validate.c              |    20 +-
 boot/bootutil/src/loader.c                      |   269 +-
 boot/bootutil/syscfg.yml                        |     3 +
 boot/bootutil/test/src/boot_test.c              |     4 +
 boot/bootutil/test/src/boot_test.h              |     1 +
 boot/bootutil/test/src/boot_test_utils.c        |    16 +
 .../test/src/testcases/boot_test_invalid_hash.c |     2 +-
 .../src/testcases/boot_test_no_flag_has_hash.c  |     2 +-
 .../test/src/testcases/boot_test_no_hash.c      |     2 +-
 .../test/src/testcases/boot_test_nv_bs_11.c     |     2 +-
 .../src/testcases/boot_test_nv_bs_11_2areas.c   |     2 +-
 .../test/src/testcases/boot_test_nv_ns_01.c     |     2 +-
 .../test/src/testcases/boot_test_permanent.c    |    53 +
 .../testcases/boot_test_permanent_continue.c    |    62 +
 .../test/src/testcases/boot_test_vb_ns_11.c     |     2 +-
 .../test/src/testcases/boot_test_vm_ns_01.c     |     2 +-
 .../src/testcases/boot_test_vm_ns_11_2areas.c   |     2 +-
 .../test/src/testcases/boot_test_vm_ns_11_b.c   |     2 +-
 boot/split/pkg.yml                              |     4 +-
 boot/split/src/split.c                          |     7 +-
 boot/split_app/pkg.yml                          |    25 +
 boot/split_app/src/split_app.c                  |    46 +
 compiler/arm-none-eabi-m0/compiler.yml          |     2 +-
 compiler/arm-none-eabi-m4/compiler.yml          |     2 +-
 compiler/sim/compiler.yml                       |     4 +-
 crypto/tinycrypt/LICENSE                        |    62 +
 crypto/tinycrypt/README                         |    82 +-
 crypto/tinycrypt/VERSION                        |     1 +
 crypto/tinycrypt/include/tinycrypt/aes.h        |    16 +-
 crypto/tinycrypt/include/tinycrypt/cbc_mode.h   |     8 +-
 crypto/tinycrypt/include/tinycrypt/ccm_mode.h   |    12 +-
 crypto/tinycrypt/include/tinycrypt/cmac_mode.h  |    20 +-
 crypto/tinycrypt/include/tinycrypt/constants.h  |     4 +
 crypto/tinycrypt/include/tinycrypt/ctr_mode.h   |     4 +-
 crypto/tinycrypt/include/tinycrypt/ctr_prng.h   |   167 +
 crypto/tinycrypt/include/tinycrypt/ecc.h        |     8 +-
 crypto/tinycrypt/include/tinycrypt/ecc_dh.h     |    14 +-
 crypto/tinycrypt/include/tinycrypt/ecc_dsa.h    |     8 +-
 crypto/tinycrypt/include/tinycrypt/hmac.h       |    16 +-
 crypto/tinycrypt/include/tinycrypt/hmac_prng.h  |    12 +-
 crypto/tinycrypt/include/tinycrypt/sha256.h     |    12 +-
 crypto/tinycrypt/include/tinycrypt/utils.h      |     8 +-
 crypto/tinycrypt/src/aes_decrypt.c              |     8 +-
 crypto/tinycrypt/src/aes_encrypt.c              |    14 +-
 crypto/tinycrypt/src/cbc_mode.c                 |     8 +-
 crypto/tinycrypt/src/ccm_mode.c                 |    30 +-
 crypto/tinycrypt/src/cmac_mode.c                |    28 +-
 crypto/tinycrypt/src/ctr_mode.c                 |     6 +-
 crypto/tinycrypt/src/ctr_prng.c                 |   308 +
 crypto/tinycrypt/src/hmac.c                     |    24 +-
 crypto/tinycrypt/src/hmac_prng.c                |    16 +-
 crypto/tinycrypt/src/sha256.c                   |    18 +-
 crypto/tinycrypt/src/utils.c                    |     2 +-
 encoding/base64/include/base64/hex.h            |     2 +-
 encoding/base64/src/hex.c                       |     2 +-
 encoding/cborattr/include/cborattr/cborattr.h   |    33 +-
 encoding/cborattr/src/cborattr.c                |   374 +-
 encoding/cborattr/test/pkg.yml                  |    31 +
 encoding/cborattr/test/src/test_cborattr.c      |    48 +
 encoding/cborattr/test/src/test_cborattr.h      |    57 +
 .../cborattr/test/src/test_cborattr_utils.c     |    35 +
 .../test/src/testcases/cborattr_decode1.c       |    83 +
 .../src/testcases/cborattr_decode_bool_array.c  |   101 +
 .../src/testcases/cborattr_decode_int_array.c   |   143 +
 .../src/testcases/cborattr_decode_obj_array.c   |   109 +
 .../test/src/testcases/cborattr_decode_object.c |   198 +
 .../testcases/cborattr_decode_object_array.c    |   126 +
 .../src/testcases/cborattr_decode_partial.c     |    47 +
 .../test/src/testcases/cborattr_decode_simple.c |   123 +
 .../testcases/cborattr_decode_string_array.c    |   135 +
 .../testcases/cborattr_decode_unnamed_array.c   |    99 +
 encoding/json/test/src/test_json.h              |     7 +-
 encoding/json/test/src/test_json_utils.c        |     6 +-
 .../tinycbor/include/tinycbor/cbor_buf_reader.h |     4 +-
 .../tinycbor/include/tinycbor/cbor_buf_writer.h |    12 +-
 .../include/tinycbor/cbor_mbuf_reader.h         |    14 +-
 .../include/tinycbor/cbor_mbuf_writer.h         |     7 +-
 encoding/tinycbor/src/cbor_buf_reader.c         |    25 +-
 encoding/tinycbor/src/cbor_buf_writer.c         |    16 +-
 encoding/tinycbor/src/cbor_mbuf_reader.c        |    55 +-
 encoding/tinycbor/src/cbor_mbuf_writer.c        |     7 +-
 encoding/tinycbor/src/cborencoder.c             |     8 +-
 .../src/cborencoder_close_container_checked.c   |    10 +-
 encoding/tinycbor/src/cborerrorstrings.c        |     2 +-
 encoding/tinycbor/src/cborparser.c              |    10 +-
 encoding/tinycbor/src/cborparser_dup_string.c   |     2 +-
 encoding/tinycbor/src/cborpretty.c              |     6 +-
 encoding/tinycbor/src/cbortojson.c              |     8 +-
 encoding/tinycbor/src/open_memstream.c          |     2 +-
 fs/disk/include/disk/disk.h                     |    56 +
 fs/disk/pkg.yml                                 |    27 +
 fs/disk/src/disk.c                              |   151 +
 fs/fatfs/pkg.yml                                |     9 +-
 fs/fatfs/src/mynewt_glue.c                      |   227 +-
 fs/fs/include/fs/fs_if.h                        |    37 +-
 fs/fs/pkg.yml                                   |     3 +
 fs/fs/src/fs_dirent.c                           |    30 +-
 fs/fs/src/fs_file.c                             |   180 +-
 fs/fs/src/fs_mkdir.c                            |     8 +-
 fs/fs/src/fs_mount.c                            |    59 +-
 fs/fs/src/fs_priv.h                             |     3 +-
 fs/nffs/pkg.yml                                 |     9 +-
 fs/nffs/src/nffs.c                              |    19 +-
 fs/nffs/src/nffs_dir.c                          |     5 +
 fs/nffs/src/nffs_file.c                         |     4 +
 fs/nffs/src/nffs_misc.c                         |     4 +-
 fs/nffs/src/nffs_priv.h                         |     3 +
 fs/nffs/test/pkg.yml                            |     2 +
 hw/bsp/arduino_primo_nrf52/pkg.yml              |     2 -
 hw/bsp/arduino_primo_nrf52/primo_debug.sh       |     3 +-
 .../src/arch/cortex_m4/gcc_startup_nrf52.s      |    10 +
 .../arch/cortex_m4/gcc_startup_nrf52_split.s    |    12 +-
 hw/bsp/arduino_primo_nrf52/src/hal_bsp.c        |    11 +-
 hw/bsp/arduino_primo_nrf52/syscfg.yml           |     7 +-
 hw/bsp/bmd300eval/pkg.yml                       |     2 -
 .../src/arch/cortex_m4/gcc_startup_nrf52.s      |    10 +
 .../arch/cortex_m4/gcc_startup_nrf52_split.s    |    12 +-
 hw/bsp/bmd300eval/src/hal_bsp.c                 |    11 +-
 hw/bsp/bmd300eval/syscfg.yml                    |     7 +-
 hw/bsp/ci40/bsp.yml                             |     4 +-
 hw/bsp/ci40/pkg.yml                             |     6 +
 hw/bsp/frdm-k64f/pkg.yml                        |    17 +-
 hw/bsp/frdm-k64f/src/hal_bsp.c                  |     4 +
 hw/bsp/native/pkg.yml                           |     2 -
 hw/bsp/native/src/hal_bsp.c                     |    13 +
 hw/bsp/nrf51-arduino_101/pkg.yml                |     3 -
 .../src/arch/cortex_m0/gcc_startup_nrf51.s      |    12 +-
 hw/bsp/nrf51-arduino_101/src/hal_bsp.c          |    13 +-
 hw/bsp/nrf51-arduino_101/syscfg.yml             |     7 +-
 hw/bsp/nrf51-blenano/nrf51dk_debug.sh           |     3 +-
 hw/bsp/nrf51-blenano/pkg.yml                    |     2 -
 .../src/arch/cortex_m0/gcc_startup_nrf51.s      |    12 +-
 .../arch/cortex_m0/gcc_startup_nrf51_split.s    |    15 +-
 hw/bsp/nrf51-blenano/src/hal_bsp.c              |    16 +-
 hw/bsp/nrf51-blenano/syscfg.yml                 |     7 +-
 hw/bsp/nrf51dk-16kbram/pkg.yml                  |     2 -
 hw/bsp/nrf51dk-16kbram/split-nrf51dk-16kbram.ld |     2 +-
 .../src/arch/cortex_m0/gcc_startup_nrf51.s      |    14 +-
 .../arch/cortex_m0/gcc_startup_nrf51_split.s    |    14 +-
 hw/bsp/nrf51dk-16kbram/src/hal_bsp.c            |    13 +-
 hw/bsp/nrf51dk-16kbram/syscfg.yml               |     7 +-
 hw/bsp/nrf51dk/pkg.yml                          |     2 -
 .../src/arch/cortex_m0/gcc_startup_nrf51.s      |    12 +-
 .../arch/cortex_m0/gcc_startup_nrf51_split.s    |    13 +-
 hw/bsp/nrf51dk/src/hal_bsp.c                    |    14 +-
 hw/bsp/nrf51dk/syscfg.yml                       |     7 +-
 hw/bsp/nrf52840pdk/boot-nrf52840aa.ld           |    26 +
 hw/bsp/nrf52840pdk/bsp.yml                      |    62 +
 hw/bsp/nrf52840pdk/include/bsp/boards.h         |    19 +
 hw/bsp/nrf52840pdk/include/bsp/bsp.h            |    53 +
 hw/bsp/nrf52840pdk/include/bsp/cmsis_nvic.h     |    29 +
 hw/bsp/nrf52840pdk/nrf52840aa.ld                |    26 +
 hw/bsp/nrf52840pdk/nrf52840pdk_debug.sh         |    46 +
 hw/bsp/nrf52840pdk/nrf52840pdk_download.sh      |    40 +
 hw/bsp/nrf52840pdk/nrf52840pdk_no_boot.ld       |   191 +
 hw/bsp/nrf52840pdk/pkg.yml                      |    94 +
 hw/bsp/nrf52840pdk/split-nrf52840pdk.ld         |   204 +
 .../src/arch/cortex_m4/gcc_startup_nrf52840.s   |   322 +
 .../arch/cortex_m4/gcc_startup_nrf52_split.s    |   161 +
 hw/bsp/nrf52840pdk/src/hal_bsp.c                |   209 +
 hw/bsp/nrf52840pdk/src/sbrk.c                   |    59 +
 hw/bsp/nrf52840pdk/syscfg.yml                   |   104 +
 hw/bsp/nrf52dk/pkg.yml                          |     2 -
 .../src/arch/cortex_m4/gcc_startup_nrf52.s      |    12 +-
 .../arch/cortex_m4/gcc_startup_nrf52_split.s    |    12 +-
 hw/bsp/nrf52dk/src/hal_bsp.c                    |    19 +-
 hw/bsp/nrf52dk/syscfg.yml                       |     7 +-
 hw/bsp/nucleo-f401re/nucleo-f401re_debug.sh     |     2 +-
 .../src/arch/cortex_m4/startup_STM32F40x.s      |    10 +
 hw/bsp/nucleo-f401re/syscfg.yml                 |     4 -
 .../olimex_stm32-e407_devboard_debug.sh         |     2 +-
 hw/bsp/olimex_stm32-e407_devboard/pkg.yml       |     2 -
 .../src/arch/cortex_m4/startup_STM32F40x.s      |    10 +
 hw/bsp/olimex_stm32-e407_devboard/syscfg.yml    |     4 -
 hw/bsp/rb-nano2/pkg.yml                         |     2 -
 hw/bsp/rb-nano2/rb-nano2_debug.sh               |     3 +-
 .../src/arch/cortex_m4/gcc_startup_nrf52.s      |    10 +
 .../arch/cortex_m4/gcc_startup_nrf52_split.s    |    12 +-
 hw/bsp/rb-nano2/src/hal_bsp.c                   |     9 +-
 hw/bsp/rb-nano2/syscfg.yml                      |     8 +-
 .../src/arch/cortex_m4/startup_STM32F40x.s      |    10 +
 .../stm32f4discovery/stm32f4discovery_debug.sh  |     3 +-
 hw/bsp/usbmkw41z/boot-mkw41z512.ld              |   197 +
 hw/bsp/usbmkw41z/bsp.yml                        |    60 +
 hw/bsp/usbmkw41z/include/bsp/bsp.h              |    47 +
 hw/bsp/usbmkw41z/include/bsp/cmsis_nvic.h       |    42 +
 hw/bsp/usbmkw41z/mkw41z512.ld                   |   186 +
 hw/bsp/usbmkw41z/no-boot-mkw41z512.ld           |   197 +
 hw/bsp/usbmkw41z/pkg.yml                        |    35 +
 .../src/arch/cortex_m0/gcc_startup_mkw41z.s     |   240 +
 hw/bsp/usbmkw41z/src/hal_bsp.c                  |    88 +
 hw/bsp/usbmkw41z/src/sbrk.c                     |    59 +
 hw/bsp/usbmkw41z/syscfg.yml                     |    31 +
 hw/bsp/usbmkw41z/usbkw41z_debug.sh              |    36 +
 hw/bsp/usbmkw41z/usbkw41z_download.sh           |    41 +
 hw/drivers/flash/at45db/pkg.yml                 |    27 +
 hw/drivers/flash/at45db/src/at45db.c            |   452 +
 hw/drivers/mmc/include/mmc/mmc.h                |    23 +
 hw/drivers/mmc/src/mmc.c                        |    34 +
 hw/drivers/nimble/nrf51/src/ble_phy.c           |     8 +-
 hw/drivers/nimble/nrf52/src/ble_phy.c           |     8 +-
 hw/hal/include/hal/hal_flash.h                  |     2 +-
 hw/hal/include/hal/hal_flash_int.h              |    18 +-
 hw/hal/include/hal/hal_system.h                 |     3 +
 hw/hal/src/hal_flash.c                          |    20 +-
 hw/mcu/native/src/hal_flash.c                   |    31 +-
 hw/mcu/native/src/hal_system.c                  |    23 +-
 hw/mcu/native/src/hal_uart.c                    |     2 +-
 hw/mcu/nordic/nrf51xxx/src/hal_flash.c          |    28 +-
 hw/mcu/nordic/nrf51xxx/src/hal_os_tick.c        |    84 +-
 hw/mcu/nordic/nrf51xxx/src/hal_system.c         |    63 +
 hw/mcu/nordic/nrf51xxx/src/hal_timer.c          |   239 +-
 hw/mcu/nordic/nrf52xxx/include/mcu/cortex_m4.h  |     5 +
 hw/mcu/nordic/nrf52xxx/include/mcu/mcu.h        |     6 +-
 hw/mcu/nordic/nrf52xxx/src/hal_flash.c          |    30 +-
 hw/mcu/nordic/nrf52xxx/src/hal_gpio.c           |    62 +-
 hw/mcu/nordic/nrf52xxx/src/hal_i2c.c            |     2 -
 hw/mcu/nordic/nrf52xxx/src/hal_os_tick.c        |     2 +-
 hw/mcu/nordic/nrf52xxx/src/hal_spi.c            |     2 +-
 hw/mcu/nordic/nrf52xxx/src/hal_timer.c          |   287 +-
 hw/mcu/nordic/nrf52xxx/src/hal_watchdog.c       |     3 +-
 hw/mcu/nordic/nrf52xxx/src/nrf52_hw_id.c        |     4 +-
 hw/mcu/nordic/nrf52xxx/src/system_nrf52.c       |   175 +-
 .../components/device/nrf.h                     |    25 +-
 .../components/device/nrf51_to_nrf52840.h       |   567 +
 .../components/device/nrf52840.h                |  2417 +++
 .../components/device/nrf52840_bitfields.h      | 14633 +++++++++++++++++
 .../components/device/nrf52840_peripherals.h    |   240 +
 .../components/device/nrf52_to_nrf52840.h       |    88 +
 .../components/toolchain/system_nrf52840.c      |   209 +
 .../components/toolchain/system_nrf52840.h      |    69 +
 hw/mcu/nxp/MK64F12/src/hal_flash.c              |    28 +-
 hw/mcu/nxp/mkw41z/include/mcu/MKW41Z4.h         | 12979 +++++++++++++++
 .../nxp/mkw41z/include/mcu/MKW41Z4_features.h   |  1719 ++
 hw/mcu/nxp/mkw41z/include/mcu/cortex_m0.h       |    41 +
 .../mkw41z/include/mcu/fsl_device_registers.h   |    56 +
 hw/mcu/nxp/mkw41z/include/mcu/mcu.h             |    38 +
 hw/mcu/nxp/mkw41z/include/mcu/mkw41z_hal.h      |    46 +
 hw/mcu/nxp/mkw41z/include/mcu/system_MKW41Z4.h  |   133 +
 hw/mcu/nxp/mkw41z/pkg.yml                       |    31 +
 hw/mcu/nxp/mkw41z/src/hal_gpio.c                |   161 +
 hw/mcu/nxp/mkw41z/src/hal_os_tick.c             |   104 +
 hw/mcu/nxp/mkw41z/src/hal_system.c              |    37 +
 hw/mcu/nxp/mkw41z/src/hal_watchdog.c            |    41 +
 hw/mcu/nxp/mkw41z/src/system_MKW41Z4.c          |   179 +
 hw/mcu/stm/stm32f4xx/src/hal_flash.c            |    30 +-
 hw/scripts/jlink.sh                             |    15 +-
 hw/scripts/openocd.sh                           |     2 +-
 hw/sensor/pkg.yml                               |     3 +
 hw/sensor/src/sensor.c                          |     6 -
 kernel/os/include/os/os.h                       |     3 +
 kernel/os/include/os/os_eventq.h                |     1 -
 kernel/os/include/os/os_fault.h                 |    34 +
 kernel/os/pkg.yml                               |     4 +-
 kernel/os/src/arch/cortex_m0/os_fault.c         |     5 +-
 kernel/os/src/arch/cortex_m4/os_fault.c         |     5 +-
 kernel/os/src/arch/mips/os_fault.c              |     5 +-
 kernel/os/src/arch/sim-mips/os_fault.c          |     9 +-
 kernel/os/src/arch/sim/os_fault.c               |     9 +-
 kernel/os/src/os.c                              |    28 +
 kernel/os/src/os_eventq.c                       |    23 +-
 kernel/os/src/os_heap.c                         |     8 +-
 kernel/os/src/os_mbuf.c                         |    29 +-
 kernel/os/src/os_time.c                         |     9 +
 kernel/os/syscfg.yml                            |     9 +
 kernel/os/test/src/eventq_test.c                |     1 -
 kernel/os/test/src/mempool_test.c               |     1 +
 kernel/os/test/src/mutex_test.c                 |    52 +-
 kernel/os/test/src/os_test.c                    |    37 +-
 kernel/os/test/src/os_test_priv.h               |     4 +
 kernel/os/test/src/sem_test.c                   |   118 +-
 .../test/src/testcases/event_test_poll_0timo.c  |     2 +-
 .../src/testcases/event_test_poll_single_sr.c   |     3 +-
 .../os/test/src/testcases/event_test_poll_sr.c  |     1 +
 .../src/testcases/event_test_poll_timeout_sr.c  |     5 +-
 kernel/os/test/src/testcases/event_test_src.c   |     3 +-
 kernel/os/test/src/testcases/os_callout_test.c  |     7 +-
 .../test/src/testcases/os_callout_test_speak.c  |     7 +-
 .../test/src/testcases/os_callout_test_stop.c   |     9 +-
 .../os/test/src/testcases/os_mutex_test_basic.c |     7 +-
 .../test/src/testcases/os_mutex_test_case_1.c   |    14 +-
 .../test/src/testcases/os_mutex_test_case_2.c   |    24 +-
 .../os/test/src/testcases/os_sem_test_basic.c   |     7 +-
 .../os/test/src/testcases/os_sem_test_case_1.c  |    13 +-
 .../os/test/src/testcases/os_sem_test_case_2.c  |    16 +-
 .../os/test/src/testcases/os_sem_test_case_3.c  |    16 +-
 .../os/test/src/testcases/os_sem_test_case_4.c  |    16 +-
 libc/baselibc/include/assert.h                  |     2 +-
 libc/baselibc/src/start.c                       |    46 +
 mgmt/imgmgr/include/imgmgr/imgmgr.h             |     8 +-
 mgmt/imgmgr/pkg.yml                             |     4 +-
 mgmt/imgmgr/src/imgmgr_cli.c                    |   121 +-
 mgmt/imgmgr/src/imgmgr_state.c                  |    49 +-
 mgmt/newtmgr/nmgr_os/pkg.yml                    |     5 +-
 mgmt/newtmgr/nmgr_os/src/newtmgr_os.c           |     6 +
 mgmt/newtmgr/nmgr_os/syscfg.yml                 |    23 +
 mgmt/newtmgr/pkg.yml                            |     4 +-
 mgmt/newtmgr/src/newtmgr.c                      |     8 +-
 mgmt/newtmgr/transport/ble/pkg.yml              |     4 +-
 mgmt/newtmgr/transport/ble/src/newtmgr_ble.c    |    18 +-
 mgmt/newtmgr/transport/nmgr_shell/pkg.yml       |     4 +-
 mgmt/newtmgr/transport/nmgr_uart/pkg.yml        |     4 +-
 mgmt/oicmgr/pkg.yml                             |     9 +-
 mgmt/oicmgr/src/oicmgr.c                        |    15 +-
 net/ip/mn_socket/test/src/mn_sock_util.c        |     1 +
 .../mn_socket/test/src/testcases/socket_tests.c |     1 +
 net/ip/native_sockets/pkg.yml                   |     4 +-
 .../controller/include/controller/ble_ll_conn.h |     7 +-
 .../controller/include/controller/ble_ll_hci.h  |     4 +-
 net/nimble/controller/pkg.yml                   |     6 +-
 net/nimble/controller/src/ble_ll.c              |    16 +-
 net/nimble/controller/src/ble_ll_adv.c          |     5 +-
 net/nimble/controller/src/ble_ll_conn.c         |   122 +-
 net/nimble/controller/src/ble_ll_conn_priv.h    |     3 -
 net/nimble/controller/src/ble_ll_hci.c          |    16 +-
 net/nimble/controller/src/ble_ll_resolv.c       |    19 +-
 net/nimble/host/include/host/ble_gap.h          |     3 +
 net/nimble/host/include/host/ble_gatt.h         |    49 +-
 net/nimble/host/include/host/ble_store.h        |     1 +
 net/nimble/host/include/host/ble_uuid.h         |    92 +-
 net/nimble/host/pkg.yml                         |    12 +-
 net/nimble/host/profiles/lls/src/ble_svc_lls.c  |     4 +-
 net/nimble/host/pts/README.txt                  |     8 +
 net/nimble/host/pts/pts-gap.txt                 |   370 +
 net/nimble/host/pts/pts-gatt.txt                |   530 +
 net/nimble/host/pts/pts-l2cap.txt               |   223 +
 net/nimble/host/pts/pts-sm.txt                  |   149 +
 .../host/pts/tpg/90359-20161220-172100175.tpg   |  1022 ++
 .../host/pts/tpg/90359-20161220-172113981.pts   |   288 +
 net/nimble/host/services/ans/pkg.yml            |     4 +-
 net/nimble/host/services/ans/src/ble_svc_ans.c  |    14 +-
 .../services/bleuart/include/bleuart/bleuart.h  |     2 +-
 net/nimble/host/services/bleuart/pkg.yml        |     4 +-
 net/nimble/host/services/bleuart/src/bleuart.c  |    28 +-
 net/nimble/host/services/gap/pkg.yml            |     4 +-
 net/nimble/host/services/gap/src/ble_svc_gap.c  |    16 +-
 net/nimble/host/services/gatt/pkg.yml           |     4 +-
 .../host/services/gatt/src/ble_svc_gatt.c       |     4 +-
 net/nimble/host/services/ias/pkg.yml            |     4 +-
 net/nimble/host/services/ias/src/ble_svc_ias.c  |     4 +-
 net/nimble/host/services/lls/src/ble_svc_lls.c  |     4 +-
 net/nimble/host/services/tps/pkg.yml            |     4 +-
 net/nimble/host/services/tps/src/ble_svc_tps.c  |     4 +-
 net/nimble/host/src/ble_att_clt.c               |    19 +-
 net/nimble/host/src/ble_att_cmd_priv.h          |     4 +-
 net/nimble/host/src/ble_att_priv.h              |    20 +-
 net/nimble/host/src/ble_att_svr.c               |   388 +-
 net/nimble/host/src/ble_gap.c                   |    51 +-
 net/nimble/host/src/ble_gattc.c                 |   158 +-
 net/nimble/host/src/ble_gatts.c                 |   182 +-
 net/nimble/host/src/ble_hs.c                    |     5 +-
 net/nimble/host/src/ble_hs_conn.c               |     8 +-
 net/nimble/host/src/ble_hs_conn_priv.h          |     3 +-
 net/nimble/host/src/ble_hs_hci_cmd.c            |     8 +-
 net/nimble/host/src/ble_hs_pvcy.c               |     6 +-
 net/nimble/host/src/ble_sm.c                    |   123 +-
 net/nimble/host/src/ble_sm_alg.c                |    29 +-
 net/nimble/host/src/ble_sm_priv.h               |     6 +-
 net/nimble/host/src/ble_sm_sc.c                 |     6 +-
 net/nimble/host/src/ble_uuid.c                  |   240 +-
 net/nimble/host/src/ble_uuid_priv.h             |     9 +-
 net/nimble/host/store/ram/pkg.yml               |     4 +-
 net/nimble/host/syscfg.yml                      |     4 +
 net/nimble/host/test/pkg.yml                    |     2 +
 net/nimble/host/test/src/ble_att_clt_test.c     |     8 +-
 net/nimble/host/test/src/ble_att_svr_test.c     |   277 +-
 net/nimble/host/test/src/ble_gap_test.c         |    90 +
 net/nimble/host/test/src/ble_gatt_conn_test.c   |    22 +-
 net/nimble/host/test/src/ble_gatt_disc_c_test.c |   150 +-
 net/nimble/host/test/src/ble_gatt_disc_d_test.c |    74 +-
 net/nimble/host/test/src/ble_gatt_disc_s_test.c |   119 +-
 net/nimble/host/test/src/ble_gatt_find_s_test.c |    56 +-
 net/nimble/host/test/src/ble_gatt_read_test.c   |    23 +-
 net/nimble/host/test/src/ble_gatt_write_test.c  |    12 +-
 .../host/test/src/ble_gatts_notify_test.c       |    16 +-
 net/nimble/host/test/src/ble_gatts_read_test.c  |     8 +-
 net/nimble/host/test/src/ble_gatts_reg_test.c   |   190 +-
 net/nimble/host/test/src/ble_hs_test_util.c     |   152 +-
 net/nimble/host/test/src/ble_hs_test_util.h     |    10 +-
 net/nimble/host/test/src/ble_uuid_test.c        |    93 +-
 net/nimble/transport/ram/pkg.yml                |     4 +-
 net/nimble/transport/uart/pkg.yml               |     4 +-
 net/nimble/transport/uart/src/ble_hci_uart.c    |     8 +
 net/oic/include/oic/oc_api.h                    |     5 +
 net/oic/include/oic/oc_client_state.h           |    23 +-
 net/oic/include/oic/oc_gatt.h                   |     8 +-
 net/oic/include/oic/oc_log.h                    |    20 +
 net/oic/include/oic/oc_rep.h                    |     4 +-
 net/oic/include/oic/oc_ri.h                     |    17 +
 net/oic/pkg.yml                                 |     6 +-
 net/oic/src/api/oc_buffer.c                     |    47 +-
 net/oic/src/api/oc_buffer.h                     |     5 -
 net/oic/src/api/oc_discovery.c                  |    33 +-
 net/oic/src/api/oc_main.c                       |     3 -
 net/oic/src/api/oc_rep.c                        |    21 +-
 net/oic/src/api/oc_ri.c                         |   285 +-
 net/oic/src/api/oc_server_api.c                 |    11 +-
 net/oic/src/messaging/coap/coap.c               |   278 +-
 net/oic/src/messaging/coap/coap.h               |   132 +-
 net/oic/src/messaging/coap/constants.h          |     2 +
 net/oic/src/messaging/coap/engine.c             |    51 +-
 net/oic/src/messaging/coap/engine.h             |     2 +-
 net/oic/src/messaging/coap/observe.c            |    39 +-
 net/oic/src/messaging/coap/observe.h            |     2 +-
 net/oic/src/messaging/coap/oc_coap.h            |     2 +-
 net/oic/src/messaging/coap/separate.c           |     6 +-
 net/oic/src/messaging/coap/separate.h           |     5 +-
 net/oic/src/port/mynewt/adaptor.c               |    25 -
 net/oic/src/port/mynewt/adaptor.h               |     3 -
 net/oic/src/port/mynewt/ble_adaptor.c           |    57 +-
 net/oic/src/port/mynewt/ip_adaptor.c            |    88 +-
 net/oic/src/port/mynewt/log.c                   |    30 +
 net/oic/src/port/mynewt/random.c                |     9 +-
 net/oic/src/port/oc_connectivity.h              |     7 -
 net/oic/src/port/oc_network_events_mutex.h      |    34 -
 net/oic/syscfg.yml                              |     4 +
 net/oic/test/pkg.yml                            |    34 +
 net/oic/test/src/test_discovery.c               |   153 +
 net/oic/test/src/test_getset.c                  |   127 +
 net/oic/test/src/test_oic.c                     |    46 +
 net/oic/test/src/test_oic.h                     |    51 +
 net/oic/test/src/testcases/oic_tests.c          |   115 +
 net/oic/test/syscfg.yml                         |    24 +
 sys/config/pkg.yml                              |     4 +-
 sys/config/src/config_init.c                    |    30 +-
 sys/config/test-nffs/pkg.yml                    |     2 +
 sys/console/full/pkg.yml                        |     4 +-
 sys/console/stub/include/console/prompt.h       |    21 +-
 sys/console/stub/include/console/ticks.h        |    16 +-
 sys/flash_map/include/flash_map/flash_map.h     |    13 +-
 sys/flash_map/pkg.yml                           |     5 +-
 sys/flash_map/src/flash_map.c                   |    47 +-
 .../test/src/testcases/flash_map_test_case_1.c  |     2 +-
 .../test/src/testcases/flash_map_test_case_2.c  |     2 +-
 sys/id/pkg.yml                                  |     4 +-
 sys/log/full/include/log/ignore.h               |    64 +
 sys/log/full/include/log/log.h                  |   233 +
 sys/log/full/pkg.yml                            |    44 +
 sys/log/full/src/log.c                          |   236 +
 sys/log/full/src/log_cbmem.c                    |   129 +
 sys/log/full/src/log_console.c                  |    75 +
 sys/log/full/src/log_fcb.c                      |   285 +
 sys/log/full/src/log_nmgr.c                     |   516 +
 sys/log/full/src/log_shell.c                    |   101 +
 sys/log/full/syscfg.yml                         |    37 +
 sys/log/full/test/pkg.yml                       |    30 +
 sys/log/full/test/src/log_test.c                |   109 +
 sys/log/full/test/src/log_test.h                |    54 +
 .../full/test/src/testcases/log_append_fcb.c    |    33 +
 sys/log/full/test/src/testcases/log_flush_fcb.c |    31 +
 sys/log/full/test/src/testcases/log_setup_fcb.c |    39 +
 sys/log/full/test/src/testcases/log_walk_fcb.c  |    30 +
 sys/log/full/test/syscfg.yml                    |    22 +
 sys/log/include/log/ignore.h                    |    64 -
 sys/log/include/log/log.h                       |   223 -
 sys/log/pkg.yml                                 |    41 -
 sys/log/src/log.c                               |   236 -
 sys/log/src/log_cbmem.c                         |   120 -
 sys/log/src/log_console.c                       |    75 -
 sys/log/src/log_fcb.c                           |   275 -
 sys/log/src/log_nmgr.c                          |   524 -
 sys/log/src/log_shell.c                         |   101 -
 sys/log/stub/include/log/ignore.h               |    64 +
 sys/log/stub/include/log/log.h                  |    73 +
 sys/log/stub/pkg.yml                            |    29 +
 sys/log/stub/syscfg.yml                         |    27 +
 sys/log/syscfg.yml                              |    37 -
 sys/log/test/pkg.yml                            |    30 -
 sys/log/test/src/log_test.c                     |   109 -
 sys/log/test/src/log_test.h                     |    54 -
 sys/log/test/src/testcases/log_append_fcb.c     |    33 -
 sys/log/test/src/testcases/log_flush_fcb.c      |    30 -
 sys/log/test/src/testcases/log_setup_fcb.c      |    39 -
 sys/log/test/src/testcases/log_walk_fcb.c       |    29 -
 sys/log/test/syscfg.yml                         |    22 -
 sys/mfg/pkg.yml                                 |     4 +-
 sys/reboot/pkg.yml                              |     6 +-
 sys/shell/pkg.yml                               |     4 +-
 sys/stats/full/include/stats/stats.h            |   142 +
 sys/stats/full/pkg.yml                          |    37 +
 sys/stats/full/src/stats.c                      |   390 +
 sys/stats/full/src/stats_nmgr.c                 |   185 +
 sys/stats/full/src/stats_shell.c                |   119 +
 sys/stats/full/syscfg.yml                       |    32 +
 sys/stats/include/stats/stats.h                 |   140 -
 sys/stats/pkg.yml                               |    35 -
 sys/stats/src/stats.c                           |   390 -
 sys/stats/src/stats_nmgr.c                      |   185 -
 sys/stats/src/stats_shell.c                     |   119 -
 sys/stats/stub/include/stats/stats.h            |    83 +
 sys/stats/stub/pkg.yml                          |    29 +
 sys/stats/syscfg.yml                            |    32 -
 sys/sysinit/include/sysinit/sysinit.h           |    22 +-
 sys/sysinit/pkg.yml                             |     2 +-
 sys/sysinit/src/sysinit.c                       |    15 +
 sys/sysinit/syscfg.yml                          |     4 -
 targets/unittest/pkg.yml                        |     2 +-
 targets/unittest/target.yml                     |     4 +-
 test/crash_test/pkg.yml                         |     4 +-
 test/runtest/pkg.yml                            |     4 +-
 test/testutil/include/testutil/testutil.h       |    27 +-
 test/testutil/src/case.c                        |    26 +-
 test/testutil/src/suite.c                       |     1 +
 test/testutil/src/testutil.c                    |     6 +-
 571 files changed, 53844 insertions(+), 7416 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/apps/bletiny/src/gatt_svr.c
----------------------------------------------------------------------
diff --cc apps/bletiny/src/gatt_svr.c
index af7b00d,936546f..08a0f6c
--- a/apps/bletiny/src/gatt_svr.c
+++ b/apps/bletiny/src/gatt_svr.c
@@@ -441,7 -351,7 +351,7 @@@ gatt_svr_chr_access_sec_test(uint16_t c
   * from 128 bit vendor specific UUID.
   */
  static uint16_t
- extract_uuid16_from_pts_uuid128(const void *uuid128)
 -extract_uuid16_from_pts_uuid128(const ble_uuid_t *uuid)
++xtract_uuid16_from_pts_uuid128(const ble_uuid_t *uuid)
  {
      const uint8_t *u8ptr;
      uint16_t uuid16;
@@@ -456,7 -366,7 +366,7 @@@ static in
  gatt_svr_access_test(uint16_t conn_handle, uint16_t attr_handle,
                       struct ble_gatt_access_ctxt *ctxt,
                       void *arg)
--{
++
      uint16_t uuid16;
      int rc;
  

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/apps/slinky/pkg.yml
----------------------------------------------------------------------
diff --cc apps/slinky/pkg.yml
index ab87296,3159cb9..52a08ef
--- a/apps/slinky/pkg.yml
+++ b/apps/slinky/pkg.yml
@@@ -33,6 -30,6 +30,8 @@@ pkg.deps
      - mgmt/newtmgr
      - mgmt/newtmgr/transport/nmgr_shell
      - kernel/os
++    - hw/sensor
++    - hw/drivers/sensors/sim
      - boot/bootutil
      - sys/shell
      - sys/config

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/apps/slinky/src/main.c
----------------------------------------------------------------------
diff --cc apps/slinky/src/main.c
index 9a2b3ac,956ce38..27d6177
--- a/apps/slinky/src/main.c
+++ b/apps/slinky/src/main.c
@@@ -255,48 -231,8 +233,43 @@@ init_tasks(void
  
      os_task_init(&task2, "task2", task2_handler, NULL,
              TASK2_PRIO, OS_WAIT_FOREVER, pstack, TASK2_STACK_SIZE);
- 
-     pstack = malloc(sizeof(os_stack_t)*TASK3_STACK_SIZE);
-     assert(pstack);
- 
-     os_task_init(&task3, "task3", task3_handler, NULL,
-             TASK3_PRIO, OS_WAIT_FOREVER, pstack, TASK3_STACK_SIZE);
- 
-     /* Initialize eventq and designate it as the default.  Packages that need
-      * to schedule work items will piggyback on this eventq.  Example packages
-      * which do this are sys/shell and mgmt/newtmgr.
-      */
-     os_eventq_init(&slinky_evq);
-     os_eventq_dflt_set(&slinky_evq);
  }
  
 +static int
- slinky_sim_accel_init(struct os_dev *dev, void *arg)
++config_sim_sensor(void)
 +{
++    struct os_dev *dev;
 +    struct sim_accel_cfg cfg;
 +    int rc;
 +
-     rc = sim_accel_init(dev, arg);
++    dev = (struct os_dev *) os_dev_open("simaccel0", OS_TIMEOUT_NEVER, NULL);
++    assert(dev != NULL);
++
++    rc = sim_accel_init(dev, NULL);
 +    if (rc != 0) {
++        os_dev_close(dev);
 +        goto err;
 +    }
 +
 +    cfg.sac_nr_samples = 10;
 +    cfg.sac_nr_axises = 1;
 +    /* read once per sec.  API should take this value in ms. */
 +    cfg.sac_sample_itvl = OS_TICKS_PER_SEC;
 +
 +    rc = sim_accel_config((struct sim_accel *) dev, &cfg);
 +    if (rc != 0) {
++        os_dev_close(dev);
 +        goto err;
 +    }
 +
++    os_dev_close(dev);
++
 +    return (0);
 +err:
 +    return (rc);
 +}
 +
 +
  /**
   * main
   *
@@@ -345,17 -286,10 +323,14 @@@ main(int argc, char **argv
      }
  #endif
  
-     init_tasks();
- 
-     sensor_pkg_init();
- 
-     os_dev_create((struct os_dev *) &sim_accel_sensor, "simaccel0",
-             OS_DEV_INIT_KERNEL, OS_DEV_INIT_PRIMARY, slinky_sim_accel_init, NULL);
++    config_sim_sensor();
 +
-     os_start();
- 
-     /* os start should never return. If it does, this should be an error */
-     assert(0);
+     /*
+      * As the last thing, process events from default event queue.
+      */
+     while (1) {
+         os_eventq_run(os_eventq_dflt_get());
+     }
 +
-     return rc;
++    return (0);
  }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/hw/bsp/native/src/hal_bsp.c
----------------------------------------------------------------------
diff --cc hw/bsp/native/src/hal_bsp.c
index 5f14e1e,5f14e1e..8ef4b6a
--- a/hw/bsp/native/src/hal_bsp.c
+++ b/hw/bsp/native/src/hal_bsp.c
@@@ -30,8 -30,8 +30,11 @@@
  #include "uart_hal/uart_hal.h"
  #include "mcu/native_bsp.h"
  #include "mcu/mcu_hal.h"
++#include "sensor/sensor.h"
++#include "sim/sim_accel.h"
  
  static struct uart_dev os_bsp_uart0;
++struct sim_accel sim_accel_sensor;
  
  const struct hal_flash *
  hal_bsp_flash_dev(uint8_t id)
@@@ -51,11 -51,11 +54,21 @@@ hal_bsp_power_state(int state
      return (0);
  }
  
++static int
++slinky_sim_accel_init(struct os_dev *dev, void *arg)
++{
++    return (0);
++}
++
  void
  hal_bsp_init(void)
  {
      int rc;
  
++    rc = os_dev_create((struct os_dev *) &sim_accel_sensor, "simaccel0",
++            OS_DEV_INIT_KERNEL, OS_DEV_INIT_PRIMARY, slinky_sim_accel_init, NULL);
++    assert(rc == 0);
++
      rc = os_dev_create((struct os_dev *) &os_bsp_uart0, "uart0",
              OS_DEV_INIT_PRIMARY, 0, uart_hal_init, (void *) NULL);
      assert(rc == 0);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/hw/drivers/mmc/include/mmc/mmc.h
----------------------------------------------------------------------
diff --cc hw/drivers/mmc/include/mmc/mmc.h
index d65363d,4b14e27..bc60dac
--- a/hw/drivers/mmc/include/mmc/mmc.h
+++ b/hw/drivers/mmc/include/mmc/mmc.h
@@@ -21,6 -21,7 +21,10 @@@
  #define __MMC_H__
  
  #include <os/os_dev.h>
++<<<<<<< HEAD
++=======
+ #include <disk/disk.h>
++>>>>>>> develop
  
  #ifdef __cplusplus
  extern "C" {
@@@ -43,6 -44,8 +47,11 @@@
  #define MMC_ERASE_ERROR       (-11)
  #define MMC_ADDR_ERROR        (-12)
  
++<<<<<<< HEAD
++=======
+ extern struct disk_ops mmc_ops;
+ 
++>>>>>>> develop
  /**
   * Initialize the MMC driver
   *
@@@ -66,7 -69,7 +75,11 @@@ mmc_init(int spi_num, void *spi_cfg, in
   * @return 0 on success, non-zero on failure
   */
  int
++<<<<<<< HEAD
 +mmc_read(uint8_t mmc_id, uint32_t addr, void *buf, size_t len);
++=======
+ mmc_read(uint8_t mmc_id, uint32_t addr, void *buf, uint32_t len);
++>>>>>>> develop
  
  /**
   * Write data to the MMC
@@@ -79,7 -82,13 +92,17 @@@
   * @return 0 on success, non-zero on failure
   */
  int
++<<<<<<< HEAD
 +mmc_write(uint8_t mmc_id, uint32_t addr, const void *buf, size_t len);
++=======
+ mmc_write(uint8_t mmc_id, uint32_t addr, const void *buf, uint32_t len);
+ 
+ /**
+  * TODO
+  */
+ int
+ mmc_ioctl(uint8_t mmc_id, uint32_t cmd, void *arg);
++>>>>>>> develop
  
  #ifdef __cplusplus
  }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/hw/drivers/mmc/src/mmc.c
----------------------------------------------------------------------
diff --cc hw/drivers/mmc/src/mmc.c
index ca89434,cae8c29..1a09f34
--- a/hw/drivers/mmc/src/mmc.c
+++ b/hw/drivers/mmc/src/mmc.c
@@@ -19,9 -19,8 +19,14 @@@
  
  #include <hal/hal_spi.h>
  #include <hal/hal_gpio.h>
++<<<<<<< HEAD
 +
 +#include <mmc/mmc.h>
 +
++=======
+ #include <disk/disk.h>
+ #include <mmc/mmc.h>
++>>>>>>> develop
  #include <stdio.h>
  
  #define MIN(n, m) (((n) < (m)) ? (n) : (m))
@@@ -361,7 -360,7 +366,11 @@@ wait_busy(struct mmc_cfg *mmc
   * @return 0 on success, non-zero on failure
   */
  int
++<<<<<<< HEAD
 +mmc_read(uint8_t mmc_id, uint32_t addr, void *buf, size_t len)
++=======
+ mmc_read(uint8_t mmc_id, uint32_t addr, void *buf, uint32_t len)
++>>>>>>> develop
  {
      uint8_t cmd;
      uint8_t res;
@@@ -449,7 -448,7 +458,11 @@@ out
   * @return 0 on success, non-zero on failure
   */
  int
++<<<<<<< HEAD
 +mmc_write(uint8_t mmc_id, uint32_t addr, const void *buf, size_t len)
++=======
+ mmc_write(uint8_t mmc_id, uint32_t addr, const void *buf, uint32_t len)
++>>>>>>> develop
  {
      uint8_t cmd;
      uint8_t res;
@@@ -583,3 -582,21 +596,24 @@@ out
      hal_gpio_write(mmc->ss_pin, 1);
      return (rc);
  }
++<<<<<<< HEAD
++=======
+ 
+ /*
+  *
+  */
+ int
+ mmc_ioctl(uint8_t mmc_id, uint32_t cmd, void *arg)
+ {
+     return 0;
+ }
+ 
+ /*
+  *
+  */
+ struct disk_ops mmc_ops = {
+     .read  = &mmc_read,
+     .write = &mmc_write,
+     .ioctl = &mmc_ioctl,
+ };
++>>>>>>> develop

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/hw/sensor/pkg.yml
----------------------------------------------------------------------
diff --cc hw/sensor/pkg.yml
index decf1c9,0000000..4fe022d
mode 100644,000000..100644
--- a/hw/sensor/pkg.yml
+++ b/hw/sensor/pkg.yml
@@@ -1,25 -1,0 +1,28 @@@
 +#
 +# Licensed to the Apache Software Foundation (ASF) under one
 +# or more contributor license agreements.  See the NOTICE file
 +# distributed with this work for additional information
 +# regarding copyright ownership.  The ASF licenses this file
 +# to you under the Apache License, Version 2.0 (the
 +# "License"); you may not use this file except in compliance
 +# with the License.  You may obtain a copy of the License at
 +#
 +#  http://www.apache.org/licenses/LICENSE-2.0
 +#
 +# Unless required by applicable law or agreed to in writing,
 +# software distributed under the License is distributed on an
 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 +# KIND, either express or implied.  See the License for the
 +# specific language governing permissions and limitations
 +# under the License.
 +#
 +
 +pkg.name: hw/sensor
 +pkg.description: Sensor Interface
 +pkg.author: "Apache Mynewt <de...@mynewt.incubator.apache.org>"
 +pkg.homepage: "http://mynewt.apache.org/"
 +pkg.keywords:
 +
++
++pkg.init:
++    sensor_pkg_init: 501

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/hw/sensor/src/sensor.c
----------------------------------------------------------------------
diff --cc hw/sensor/src/sensor.c
index ab4c413,0000000..897b7be
mode 100644,000000..100644
--- a/hw/sensor/src/sensor.c
+++ b/hw/sensor/src/sensor.c
@@@ -1,560 -1,0 +1,554 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one
 + * or more contributor license agreements.  See the NOTICE file
 + * distributed with this work for additional information
 + * regarding copyright ownership.  The ASF licenses this file
 + * to you under the Apache License, Version 2.0 (the
 + * "License"); you may not use this file except in compliance
 + * with the License.  You may obtain a copy of the License at
 + *
 + *  http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing,
 + * software distributed under the License is distributed on an
 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 + * KIND, either express or implied.  See the License for the
 + * specific language governing permissions and limitations
 + * under the License.
 + */
 +
 +#include <string.h>
 +#include <errno.h>
 +#include <assert.h>
 +
 +#include "os/os.h"
 +#include "sysinit/sysinit.h"
 +
 +#include "sensor/sensor.h"
 +
 +#include "sensor_priv.h"
 +
 +struct {
 +    struct os_mutex mgr_lock;
 +
 +    struct os_callout mgr_wakeup_callout;
 +    struct os_eventq *mgr_eventq;
 +
 +    TAILQ_HEAD(, sensor) mgr_sensor_list;
 +} sensor_mgr;
 +
 +int
 +sensor_mgr_lock(void)
 +{
 +    int rc;
 +
 +    rc = os_mutex_pend(&sensor_mgr.mgr_lock, OS_TIMEOUT_NEVER);
 +    if (rc == 0 || rc == OS_NOT_STARTED) {
 +        return (0);
 +    }
 +    return (rc);
 +}
 +
 +void
 +sensor_mgr_unlock(void)
 +{
 +    (void) os_mutex_release(&sensor_mgr.mgr_lock);
 +}
 +
 +static void
 +sensor_mgr_remove(struct sensor *sensor)
 +{
 +    TAILQ_REMOVE(&sensor_mgr.mgr_sensor_list, sensor, s_next);
 +}
 +
 +static void
 +sensor_mgr_insert(struct sensor *sensor)
 +{
 +    struct sensor *cursor;
 +
 +    cursor = NULL;
 +    TAILQ_FOREACH(cursor, &sensor_mgr.mgr_sensor_list, s_next) {
 +        if (cursor->s_next_run == OS_TIMEOUT_NEVER) {
 +            break;
 +        }
 +
 +        if (OS_TIME_TICK_LT(sensor->s_next_run, cursor->s_next_run)) {
 +            break;
 +        }
 +    }
 +
 +    if (cursor) {
 +        TAILQ_INSERT_BEFORE(cursor, sensor, s_next);
 +    } else {
 +        TAILQ_INSERT_TAIL(&sensor_mgr.mgr_sensor_list, sensor, s_next);
 +    }
 +}
 +
 +/**
 + * Register the sensor with the global sensor list.   This makes the sensor
 + * searchable by other packages, who may want to look it up by type.
 + *
 + * @param The sensor to register
 + *
 + * @return 0 on success, non-zero error code on failure.
 + */
 +int
 +sensor_mgr_register(struct sensor *sensor)
 +{
 +    int rc;
 +
 +    rc = sensor_mgr_lock();
 +    if (rc != 0) {
 +        goto err;
 +    }
 +
 +    rc = sensor_lock(sensor);
 +    if (rc != 0) {
 +        goto err;
 +    }
 +
 +    sensor_mgr_insert(sensor);
 +
 +    sensor_unlock(sensor);
 +
 +    sensor_mgr_unlock();
 +
 +    return (0);
 +err:
 +    return (rc);
 +}
 +
 +
 +static os_time_t
 +sensor_mgr_poll_one(struct sensor *sensor, os_time_t now)
 +{
 +    uint32_t sensor_ticks;
 +    int rc;
 +
 +    rc = sensor_lock(sensor);
 +    if (rc != 0) {
 +        goto err;
 +    }
 +
 +    /* Sensor read results.  Every time a sensor is read, all of its
 +     * listeners are called by default.  Specify NULL as a callback,
 +     * because we just want to run all the listeners.
 +     */
 +    sensor_read(sensor, SENSOR_TYPE_ALL, NULL, NULL, OS_TIMEOUT_NEVER);
 +
 +    /* Remove the sensor from the sensor list for insertion sort. */
 +    sensor_mgr_remove(sensor);
 +
 +    /* Set next wakeup, and insertion sort the sensor back into the
 +     * list.
 +     */
 +    os_time_ms_to_ticks(sensor->s_poll_rate, &sensor_ticks);
 +    sensor->s_next_run = now + sensor_ticks;
 +
 +    /* Re-insert the sensor manager, with the new wakeup time. */
 +    sensor_mgr_insert(sensor);
 +
 +    /* Unlock the sensor to allow other access */
 +    sensor_unlock(sensor);
 +
 +    return (sensor->s_next_run);
 +err:
 +    /* Couldn't lock it.  Re-run task and spin until we get result. */
 +    return (0);
 +}
 +
 +/**
 + * Event that wakes up the sensor manager, this goes through the sensor
 + * list and polls any active sensors.
 + */
 +static void
 +sensor_mgr_wakeup_event(struct os_event *ev)
 +{
 +    struct sensor *cursor;
 +    os_time_t now;
 +    os_time_t task_next_wakeup;
 +    os_time_t next_wakeup;
 +    int rc;
 +
 +    now = os_time_get();
 +    task_next_wakeup = now + SENSOR_MGR_WAKEUP_TICKS;
 +
 +    rc = sensor_mgr_lock();
 +    if (rc != 0) {
 +        /* Schedule again in 1 tick, see if we can reacquire the lock */
 +        task_next_wakeup = now + 1;
 +        goto done;
 +    }
 +
 +     TAILQ_FOREACH(cursor, &sensor_mgr.mgr_sensor_list, s_next) {
 +        /* Sensors that are not periodic are inserted at the end of the sensor
 +         * list.
 +         */
 +        if (cursor->s_next_run == OS_TIMEOUT_NEVER) {
 +            break;
 +        }
 +
 +        /* List is sorted by what runs first.  If we reached the first element that
 +         * doesn't run, break out.
 +         */
 +        if (OS_TIME_TICK_LT(now, cursor->s_next_run)) {
 +            break;
 +        }
 +
 +        /* Sensor poll one completes the poll, updates the sensor's "next run,"
 +         * and re-inserts it into the list.  It returns the next wakeup time
 +         * for this sensor.
 +         */
 +        next_wakeup = sensor_mgr_poll_one(cursor, now);
 +
 +        /* If the next wakeup time for this sensor is before the task's next
 +         * scheduled wakeup, move that forward, so we can collect data from that
 +         * sensor
 +         */
 +        if (task_next_wakeup > next_wakeup) {
 +            task_next_wakeup = next_wakeup;
 +        }
 +    }
 +
 +done:
 +    os_callout_reset(&sensor_mgr.mgr_wakeup_callout, task_next_wakeup);
 +}
 +
 +struct os_eventq *
 +sensor_mgr_evq_get(void)
 +{
 +    os_eventq_ensure(&sensor_mgr.mgr_eventq, NULL);
 +
 +    return (sensor_mgr.mgr_eventq);
 +}
 +
 +static void
 +sensor_mgr_init(void)
 +{
 +    memset(&sensor_mgr, 0, sizeof(sensor_mgr));
 +    TAILQ_INIT(&sensor_mgr.mgr_sensor_list);
 +
 +    /**
 +     * Initialize sensor polling callout and set it to fire on boot.
 +     */
 +    os_callout_init(&sensor_mgr.mgr_wakeup_callout, sensor_mgr_evq_get(),
 +            sensor_mgr_wakeup_event, NULL);
 +    os_callout_reset(&sensor_mgr.mgr_wakeup_callout, 0);
 +
 +    os_mutex_init(&sensor_mgr.mgr_lock);
 +}
 +
 +/**
 + * The sensor manager contains a list of sensors, this function returns
 + * the next sensor in that list, for which compare_func() returns successful
 + * (one).  If prev_cursor is provided, the function starts at that point
 + * in the sensor list.
 + *
 + * @warn This function MUST be locked by sensor_mgr_lock/unlock() if the goal is
 + * to iterate through sensors (as opposed to just finding one.)  As the
 + * "prev_cursor" may be resorted in the sensor list, in between calls.
 + *
 + * @param The comparison function to use against sensors in the list.
 + * @param The argument to provide to that comparison function
 + * @param The previous sensor in the sensor manager list, in case of
 + *        iteration.  If desire is to find first matching sensor, provide a
 + *        NULL value.
 + *
 + * @return A pointer to the first sensor found from prev_cursor, or
 + *         NULL, if none found.
 + *
 + */
 +struct sensor *
 +sensor_mgr_find_next(sensor_mgr_compare_func_t compare_func, void *arg,
 +        struct sensor *prev_cursor)
 +{
 +    struct sensor *cursor;
 +    int rc;
 +
 +    cursor = NULL;
 +
 +    /* Couldn't acquire lock of sensor list, exit */
 +    rc = sensor_mgr_lock();
 +    if (rc != 0) {
 +        goto done;
 +    }
 +
 +    cursor = prev_cursor;
 +    if (cursor == NULL) {
 +        cursor = TAILQ_FIRST(&sensor_mgr.mgr_sensor_list);
 +    } else {
 +        cursor = TAILQ_NEXT(prev_cursor, s_next);
 +    }
 +
 +    while (cursor != NULL) {
 +        if (compare_func(cursor, arg)) {
 +            break;
 +        }
 +        cursor = TAILQ_NEXT(cursor, s_next);
 +    }
 +
 +    sensor_mgr_unlock();
 +
 +done:
 +    return (cursor);
 +}
 +
 +
 +
 +static int
 +sensor_mgr_match_bytype(struct sensor *sensor, void *arg)
 +{
 +    sensor_type_t *type;
 +
 +    type = (sensor_type_t *) arg;
 +
 +    /* s_types is a bitmask that contains the supported sensor types for this
 +     * sensor, and type is the bitmask we're searching for.  Compare the two,
 +     * and if there is a match, return true (1).
 +     */
 +    if ((*type & sensor->s_types) != 0) {
 +        return (1);
 +    } else {
 +        return (0);
 +    }
 +}
 +
 +/**
 + * Find the "next" sensor available for a given sensor type.
 + *
 + * If the sensor parameter, is present find the next entry from that
 + * parameter.  Otherwise, find the first matching sensor.
 + *
 + * @param The type of sensor to search for
 + * @param The cursor to search from, or NULL to start from the beginning.
 + *
 + * @return A pointer to the sensor object matching that sensor type, or NULL if
 + *         none found.
 + */
 +struct sensor *
 +sensor_mgr_find_next_bytype(sensor_type_t type, struct sensor *prev_cursor)
 +{
 +    return (sensor_mgr_find_next(sensor_mgr_match_bytype, (void *) &type,
 +                prev_cursor));
 +}
 +
 +static int
 +sensor_mgr_match_bydevname(struct sensor *sensor, void *arg)
 +{
 +    char *devname;
 +
 +    devname = (char *) arg;
 +
 +    if (!strcmp(sensor->s_dev->od_name, devname)) {
 +        return (1);
 +    }
 +
 +    return (0);
 +}
 +
 +
 +/**
 + * Search teh sensor list, and find the next sensor that correspondes
 + * to a given device name.
 + *
 + * @param The device name to search for
 + * @param The previous sensor found with this device name
 + *
 + * @return 0 on success, non-zero error code on failure
 + */
 +struct sensor *
 +sensor_mgr_find_next_bydevname(char *devname, struct sensor *prev_cursor)
 +{
 +    return (sensor_mgr_find_next(sensor_mgr_match_bydevname, devname,
 +            prev_cursor));
 +}
 +
 +/**
 + * Initialize the sensor package, called through SYSINIT.  Note, this function
 + * will assert if called directly, and _NOT_ through the sysinit package.
 + */
 +void
 +sensor_pkg_init(void)
 +{
-     /* Call directly until sysinit has the right hooks for us */
- #if 0
-     /* Ensure this is only called by sysinit */
-     SYSINIT_ASSERT_ACTIVE();
- #endif
- 
 +    sensor_mgr_init();
 +
 +#if MYNEWT_VAL(SENSOR_CLI)
 +    sensor_shell_register();
 +#endif
 +}
 +
 +
 +/**
 + * Lock access to the sensor specified by sensor.  Blocks until lock acquired.
 + *
 + * @param The sensor to lock
 + *
 + * @return 0 on success, non-zero on failure.
 + */
 +int
 +sensor_lock(struct sensor *sensor)
 +{
 +    int rc;
 +
 +    rc = os_mutex_pend(&sensor->s_lock, OS_TIMEOUT_NEVER);
 +    if (rc == 0 || rc == OS_NOT_STARTED) {
 +        return (0);
 +    }
 +    return (rc);
 +}
 +
 +/**
 + * Unlock access to the sensor specified by sensor.  Blocks until lock acquired.
 + *
 + * @param The sensor to unlock access to.
 + */
 +void
 +sensor_unlock(struct sensor *sensor)
 +{
 +    os_mutex_release(&sensor->s_lock);
 +}
 +
 +
 +/**
 + * Initialize a sensor
 + *
 + * @param The sensor to initialize
 + * @param The device to associate with this sensor.
 + *
 + * @return 0 on success, non-zero error code on failure.
 + */
 +int
 +sensor_init(struct sensor *sensor, struct os_dev *dev)
 +{
 +    int rc;
 +
 +    memset(sensor, 0, sizeof(*sensor));
 +
 +    rc = os_mutex_init(&sensor->s_lock);
 +    if (rc != 0) {
 +        goto err;
 +    }
 +    sensor->s_dev = dev;
 +
 +    return (0);
 +err:
 +    return (rc);
 +}
 +
 +
 +/**
 + * Register a sensor listener.  This allows a calling application to receive
 + * callbacks for data from a given sensor object.
 + *
 + * For more information on the type of callbacks available, see the documentation
 + * for the sensor listener structure.
 + *
 + * @param The sensor to register a listener on
 + * @param The listener to register onto the sensor
 + *
 + * @return 0 on success, non-zero error code on failure.
 + */
 +int
 +sensor_register_listener(struct sensor *sensor,
 +        struct sensor_listener *listener)
 +{
 +    int rc;
 +
 +    rc = sensor_lock(sensor);
 +    if (rc != 0) {
 +        goto err;
 +    }
 +
 +    SLIST_INSERT_HEAD(&sensor->s_listener_list, listener, sl_next);
 +
 +    sensor_unlock(sensor);
 +
 +    return (0);
 +err:
 +    return (rc);
 +}
 +
 +int
 +sensor_unregister_listener(struct sensor *sensor,
 +        struct sensor_listener *listener)
 +{
 +    int rc;
 +
 +    rc = sensor_lock(sensor);
 +    if (rc != 0) {
 +        goto err;
 +    }
 +
 +    /* Remove this entry from the list */
 +    SLIST_REMOVE(&sensor->s_listener_list, listener, sensor_listener,
 +            sl_next);
 +
 +    sensor_unlock(sensor);
 +
 +    return (0);
 +err:
 +    return (rc);
 +}
 +
 +
 +struct sensor_read_ctx {
 +    sensor_data_func_t user_func;
 +    void *user_arg;
 +};
 +
 +static int
 +sensor_read_data_func(struct sensor *sensor, void *arg, void *data)
 +{
 +    struct sensor_listener *listener;
 +    struct sensor_read_ctx *ctx;
 +
 +    /* Notify all listeners first */
 +    SLIST_FOREACH(listener, &sensor->s_listener_list, sl_next) {
 +        listener->sl_func(sensor, listener->sl_arg, data);
 +    }
 +
 +    /* Call data function */
 +    ctx = (struct sensor_read_ctx *) arg;
 +    if (ctx->user_func != NULL) {
 +        return (ctx->user_func(sensor, ctx->user_arg, data));
 +    } else {
 +        return (0);
 +    }
 +}
 +
 +/**
 + * Read the data for sensor type "type," from the sensor, "sensor" and
 + * return the result into the "value" parameter.
 + *
 + * @param The senssor to read data from
 + * @param The type of sensor data to read from the sensor
 + * @param The callback to call for data returned from that sensor
 + * @param The argument to pass to this callback.
 + * @param Timeout before aborting sensor read
 + *
 + * @return 0 on success, non-zero on failure.
 + */
 +int
 +sensor_read(struct sensor *sensor, sensor_type_t type,
 +        sensor_data_func_t data_func, void *arg, uint32_t timeout)
 +{
 +    struct sensor_read_ctx src;
 +    int rc;
 +
 +    rc = sensor_lock(sensor);
 +    if (rc != 0) {
 +        goto done;
 +    }
 +
 +    src.user_func = data_func;
 +    src.user_arg = arg;
 +
 +    rc = sensor->s_funcs->sd_read(sensor, type, sensor_read_data_func, &src,
 +            timeout);
 +
 +    sensor_unlock(sensor);
 +
 +done:
 +    return (rc);
 +}
 +

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/net/oic/include/oic/oc_ri.h
----------------------------------------------------------------------
diff --cc net/oic/include/oic/oc_ri.h
index e58af0b,d2f0f2e..5a81c52
--- a/net/oic/include/oic/oc_ri.h
+++ b/net/oic/include/oic/oc_ri.h
@@@ -97,13 -97,13 +97,23 @@@ typedef enum 
  
  typedef struct oc_resource oc_resource_t;
  
++<<<<<<< HEAD
 +typedef struct {
 +  oc_endpoint_t *origin;
 +  oc_resource_t *resource;
 +  const char *query;
 +  int query_len;
 +  oc_response_t *response;
 +  void *packet;
++=======
+ typedef struct oc_request {
+     oc_endpoint_t *origin;
+     oc_resource_t *resource;
+     const char *query;
+     int query_len;
+     oc_response_t *response;
+     struct coap_packet_rx *packet;
++>>>>>>> develop
  } oc_request_t;
  
  typedef void (*oc_request_handler_t)(oc_request_t *, oc_interface_mask_t);
@@@ -150,9 -150,10 +160,16 @@@ int oc_ri_get_query_value(const char *q
  oc_interface_mask_t oc_ri_get_interface_mask(char *iface, int if_len);
  
  typedef struct coap_packet coap_packet_t;
++<<<<<<< HEAD
 +bool oc_ri_invoke_coap_entity_handler(coap_packet_t *request,
 +                                      coap_packet_t *response,
 +                                      int32_t *offset, oc_endpoint_t *endpoint);
++=======
+ struct coap_packet_rx;
+ bool oc_ri_invoke_coap_entity_handler(struct coap_packet_rx *request,
+                                       coap_packet_t *response, int32_t *offset,
+                                       oc_endpoint_t *endpoint);
++>>>>>>> develop
  
  #ifdef __cplusplus
  }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/net/oic/src/api/oc_buffer.c
----------------------------------------------------------------------
diff --cc net/oic/src/api/oc_buffer.c
index 1df8b8d,9857eaf..5a0af49
--- a/net/oic/src/api/oc_buffer.c
+++ b/net/oic/src/api/oc_buffer.c
@@@ -32,9 -32,6 +32,12 @@@
  
  #include "port/mynewt/adaptor.h"
  
++<<<<<<< HEAD
 +static struct os_mempool oc_buffers;
 +static uint8_t oc_buffer_area[OS_MEMPOOL_BYTES(1, sizeof(oc_message_t))];
 +
++=======
++>>>>>>> develop
  static struct os_mqueue oc_inq;
  static struct os_mqueue oc_outq;
  
@@@ -70,28 -50,6 +56,31 @@@ oc_allocate_mbuf(struct oc_endpoint *oe
  }
  
  void
++<<<<<<< HEAD
 +oc_message_add_ref(oc_message_t *message)
 +{
 +    if (message) {
 +        message->ref_count++;
 +    }
 +}
 +
 +void
 +oc_message_unref(oc_message_t *message)
 +{
 +    if (message) {
 +        assert(message->ref_count > 0);
 +        message->ref_count--;
 +        if (message->ref_count == 0) {
 +            os_memblock_put(&oc_buffers, message);
 +            OC_LOG_DEBUG("buffer: freed oc_message; free: %d\n",
 +              oc_buffers.mp_num_free);
 +        }
 +    }
 +}
 +
 +void
++=======
++>>>>>>> develop
  oc_recv_message(struct os_mbuf *m)
  {
      int rc;
@@@ -155,43 -112,25 +143,55 @@@ oc_buffer_rx(struct os_event *ev
  #endif
  
      while ((m = os_mqueue_get(&oc_inq)) != NULL) {
-         msg = oc_allocate_message();
-         if (!msg) {
-             goto free_msg;
-         }
          OC_LOG_DEBUG("oc_buffer_rx: ");
          OC_LOG_ENDPOINT(LOG_LEVEL_DEBUG, OC_MBUF_ENDPOINT(m));
++<<<<<<< HEAD
 +
 +        if (OS_MBUF_PKTHDR(m)->omp_len > MAX_PAYLOAD_SIZE) {
 +            STATS_INC(coap_stats, itoobig);
 +            goto free_msg;
 +        }
 +        if (os_mbuf_copydata(m, 0, OS_MBUF_PKTHDR(m)->omp_len, msg->data)) {
 +            STATS_INC(coap_stats, imem);
 +            goto free_msg;
 +        }
 +        memcpy(&msg->endpoint, OC_MBUF_ENDPOINT(m), sizeof(msg->endpoint));
 +        msg->length = OS_MBUF_PKTHDR(m)->omp_len;
 +        os_mbuf_free_chain(m);
 +        m = NULL;
++=======
++>>>>>>> develop
  
  #ifdef OC_SECURITY
+         /*
+          * XXX make sure first byte is within first mbuf
+          */
          b = m->om_data[0];
          if (b > 19 && b < 64) {
              OC_LOG_DEBUG("oc_buffer_rx: encrypted request\n");
              oc_process_post(&oc_dtls_handler, oc_events[UDP_TO_DTLS_EVENT], m);
          } else {
++<<<<<<< HEAD
 +            coap_receive(msg);
 +        }
 +#else
 +        coap_receive(msg);
 +#endif
 +free_msg:
 +        if (msg) {
 +            oc_message_unref(msg);
++=======
+             coap_receive(m);
+         }
+ #else
+         coap_receive(&m);
+ #endif
+         if (m) {
+             os_mbuf_free_chain(m);
++>>>>>>> develop
 +        }
 +        if (m) {
 +            os_mbuf_free_chain(m);
          }
      }
  }
@@@ -199,8 -138,6 +199,11 @@@
  void
  oc_buffer_init(void)
  {
++<<<<<<< HEAD
 +    os_mempool_init(&oc_buffers, 1, sizeof(oc_message_t), oc_buffer_area,
 +                    "oc_bufs");
++=======
++>>>>>>> develop
      os_mqueue_init(&oc_inq, oc_buffer_rx, NULL);
      os_mqueue_init(&oc_outq, oc_buffer_tx, NULL);
  }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/net/oic/src/api/oc_discovery.c
----------------------------------------------------------------------
diff --cc net/oic/src/api/oc_discovery.c
index 6427056,066764c..3c74ac8
--- a/net/oic/src/api/oc_discovery.c
+++ b/net/oic/src/api/oc_discovery.c
@@@ -136,6 -136,6 +136,7 @@@ oc_core_discovery_handler(oc_request_t 
      rt_len = oc_ri_get_query_value(req->query, req->query_len, "rt", &rt);
  
      oc_uuid_to_str(oc_core_get_device_id(0), uuid, sizeof(uuid));
++<<<<<<< HEAD
  
      switch (interface) {
      case OC_IF_LL: {
@@@ -157,6 -157,6 +158,29 @@@
  
      int response_length = oc_rep_finalize();
  
++=======
++
++    switch (interface) {
++    case OC_IF_LL: {
++        oc_rep_start_links_array();
++        matches = process_device_object(oc_rep_array(links), uuid, rt, rt_len);
++        oc_rep_end_links_array();
++    } break;
++    case OC_IF_BASELINE: {
++        oc_rep_start_root_object();
++        oc_process_baseline_interface(req->resource);
++        oc_rep_set_array(root, links);
++        matches = process_device_object(oc_rep_array(links), uuid, rt, rt_len);
++        oc_rep_close_array(root, links);
++        oc_rep_end_root_object();
++    } break;
++    default:
++        break;
++    }
++
++    int response_length = oc_rep_finalize();
++
++>>>>>>> develop
      if (matches && response_length > 0) {
          req->response->response_buffer->response_length = response_length;
          req->response->response_buffer->code = oc_status_code(OC_STATUS_OK);

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/net/oic/src/api/oc_rep.c
----------------------------------------------------------------------
diff --cc net/oic/src/api/oc_rep.c
index 2e70582,c7022d8..1337f2e
--- a/net/oic/src/api/oc_rep.c
+++ b/net/oic/src/api/oc_rep.c
@@@ -23,7 -23,7 +23,11 @@@
  #include "port/oc_assert.h"
  #include "api/oc_priv.h"
  #include <tinycbor/cbor_mbuf_writer.h>
++<<<<<<< HEAD
 +#include <tinycbor/cbor_buf_reader.h>
++=======
+ #include <tinycbor/cbor_mbuf_reader.h>
++>>>>>>> develop
  
  #ifdef OC_CLIENT
  static struct os_mempool oc_rep_objects;
@@@ -31,11 -31,10 +35,18 @@@ static uint8_t oc_rep_objects_area[OS_M
        sizeof(oc_rep_t))];
  #endif
  
++<<<<<<< HEAD
 +static const CborEncoder g_empty;
 +static struct os_mbuf *g_outm;
 +CborEncoder g_encoder, root_map, links_array;
 +CborError g_err;
 +struct CborMbufWriter g_buf_writer;
++=======
+ static struct os_mbuf *g_outm;
+ CborEncoder g_encoder, root_map, links_array;
+ CborError g_err;
+ struct cbor_mbuf_writer g_buf_writer;
++>>>>>>> develop
  
  void
  oc_rep_new(struct os_mbuf *m)

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/net/oic/src/api/oc_ri.c
----------------------------------------------------------------------
diff --cc net/oic/src/api/oc_ri.c
index 2f0faea,d6180a6..2266a9b
--- a/net/oic/src/api/oc_ri.c
+++ b/net/oic/src/api/oc_ri.c
@@@ -357,7 -347,7 +347,11 @@@ does_interface_support_method(oc_resour
  }
  
  bool
++<<<<<<< HEAD
 +oc_ri_invoke_coap_entity_handler(coap_packet_t *request,
++=======
+ oc_ri_invoke_coap_entity_handler(struct coap_packet_rx *request,
++>>>>>>> develop
                                   coap_packet_t *response, int32_t *offset,
                                   oc_endpoint_t *endpoint)
  {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/net/oic/src/api/oc_server_api.c
----------------------------------------------------------------------
diff --cc net/oic/src/api/oc_server_api.c
index f697f5c,61acdcd..94a5e93
--- a/net/oic/src/api/oc_server_api.c
+++ b/net/oic/src/api/oc_server_api.c
@@@ -216,7 -216,7 +216,11 @@@ oc_interate_query(oc_request_t *request
    return 1;
  }
  
++<<<<<<< HEAD
 +#if 0 /* XXXX fix this */
++=======
+ #if MYNEWT_VAL(OC_SEPARATE_RESPONSES)
++>>>>>>> develop
  void
  oc_indicate_separate_response(oc_request_t *request,
                                oc_separate_response_t *response)

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/net/oic/src/messaging/coap/observe.c
----------------------------------------------------------------------
diff --cc net/oic/src/messaging/coap/observe.c
index 7bc8537,234b2da..499cdb5
--- a/net/oic/src/messaging/coap/observe.c
+++ b/net/oic/src/messaging/coap/observe.c
@@@ -293,11 -297,13 +297,16 @@@ coap_notify_observers(oc_resource_t *re
                      coap_clear_transaction(transaction);
                  }
              }
+ #if MYNEWT_VAL(OC_SEPARATE_RESPONSES)
          }
+ #endif
+     }
+     if (m) {
+         os_mbuf_free_chain(m);
      }
 +    if (m) {
 +        os_mbuf_free_chain(m);
 +    }
      return num_observers;
  }
  /*---------------------------------------------------------------------------*/

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/2681044e/net/oic/src/port/mynewt/ble_adaptor.c
----------------------------------------------------------------------
diff --cc net/oic/src/port/mynewt/ble_adaptor.c
index 8ede614,85eb1f5..6a2ed74
--- a/net/oic/src/port/mynewt/ble_adaptor.c
+++ b/net/oic/src/port/mynewt/ble_adaptor.c
@@@ -176,6 -177,7 +177,10 @@@ oc_ble_reass(struct os_mbuf *om1, uint1
            coap_tcp_msg_size(hdr, sizeof(hdr)) > pkt2->omp_len) {
              STAILQ_INSERT_TAIL(&oc_ble_reass_q, pkt2, omp_next);
          } else {
++<<<<<<< HEAD
++=======
+             STATS_INC(oc_ble_stats, iframe);
++>>>>>>> develop
              oc_recv_message(om2);
          }
      }
@@@ -283,9 -285,9 +288,15 @@@ oc_ble_frag(struct os_mbuf *m, uint16_
          STAILQ_NEXT(pkt, omp_next) = NULL;
          return 0;
      }
++<<<<<<< HEAD
 +    off = pkt->omp_len % mtu;
 +
 +    while (off > mtu) {
++=======
+ 
+     off = pkt->omp_len - (pkt->omp_len % mtu);
+     while (off >= mtu) {
++>>>>>>> develop
          n = os_msys_get_pkthdr(mtu, 0);
          if (!n) {
              goto err;
@@@ -337,7 -338,11 +347,15 @@@ oc_send_buffer_gatt(struct os_mbuf *m
      STATS_INCN(oc_ble_stats, obytes, OS_MBUF_PKTLEN(m));
  
      mtu = ble_att_mtu(conn_handle);
++<<<<<<< HEAD
 +    assert(mtu > 4);
++=======
+     if (mtu < 4) {
+         oc_ble_coap_conn_del(conn_handle);
+         os_mbuf_free_chain(m);
+         return;
+     }
++>>>>>>> develop
      mtu -= 3; /* # of bytes for ATT notification base */
  
      if (oc_ble_frag(m, mtu)) {


[09/50] incubator-mynewt-core git commit: oic; reduce the default number of registrable resources.

Posted by vi...@apache.org.
oic; reduce the default number of registrable resources.


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/e696b98d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/e696b98d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/e696b98d

Branch: refs/heads/develop
Commit: e696b98db70ecafe6d0c1817e595f5d072ce3534
Parents: 4947fa4
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Thu Dec 15 12:27:25 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Sun Dec 18 13:56:17 2016 -0800

----------------------------------------------------------------------
 net/oic/syscfg.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/e696b98d/net/oic/syscfg.yml
----------------------------------------------------------------------
diff --git a/net/oic/syscfg.yml b/net/oic/syscfg.yml
index 3d71e7d..c5dbfa2 100644
--- a/net/oic/syscfg.yml
+++ b/net/oic/syscfg.yml
@@ -52,7 +52,7 @@ syscfg.defs:
 
     OC_APP_RESOURCES:
         description: 'Maximum number of server resources'
-        value: 8
+        value: 3
 
     OC_NUM_DEVICES:
         description: 'Number of devices on the OCF platform'


[13/50] incubator-mynewt-core git commit: First pass at LSM303DLHC sensor driver

Posted by vi...@apache.org.
First pass at LSM303DLHC sensor driver


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/f720b6e4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/f720b6e4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/f720b6e4

Branch: refs/heads/develop
Commit: f720b6e405855ffe720fa86a204a7056f0525963
Parents: 7fdea47
Author: microbuilder <co...@microbuilder.eu>
Authored: Thu Dec 22 12:24:02 2016 +0100
Committer: microbuilder <co...@microbuilder.eu>
Committed: Thu Dec 22 12:24:02 2016 +0100

----------------------------------------------------------------------
 .../lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h  |  90 +++++
 hw/drivers/sensors/lsm303dlhc/pkg.yml           |  24 ++
 hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c  | 398 +++++++++++++++++++
 .../sensors/lsm303dlhc/src/lsm303dlhc_priv.h    |  88 ++++
 hw/drivers/sensors/lsm303dlhc/syscfg.yml        |  32 ++
 5 files changed, 632 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f720b6e4/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h b/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h
new file mode 100644
index 0000000..c5e9601
--- /dev/null
+++ b/hw/drivers/sensors/lsm303dlhc/include/lsm303dlhc/lsm303dlhc.h
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef __SENSOR_LSM303DLHC_H__
+#define __SENSOR_LSM303DLHC_H__
+
+#include "os/os.h"
+#include "os/os_dev.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum lsm303dlhc_accel_range {
+    LSM303DLHC_ACCEL_RANGE_2            = 0x00 << 4, /* +/- 2g  */
+    LSM303DLHC_ACCEL_RANGE_4            = 0x01 << 4, /* +/- 4g  */
+    LSM303DLHC_ACCEL_RANGE_8            = 0x02 << 4, /* +/- 8g  */
+    LSM303DLHC_ACCEL_RANGE_16           = 0x03 << 4, /* +/- 16g */
+};
+
+enum lsm303dlhc_accel_rate {
+    LSM303DLHC_ACCEL_RATE_POWER_DOWN    = 0x00 << 4,
+    LSM303DLHC_ACCEL_RATE_1             = 0x01 << 4,
+    LSM303DLHC_ACCEL_RATE_10            = 0x02 << 4,
+    LSM303DLHC_ACCEL_RATE_25            = 0x03 << 4,
+    LSM303DLHC_ACCEL_RATE_50            = 0x04 << 4,
+    LSM303DLHC_ACCEL_RATE_100           = 0x05 << 4,
+    LSM303DLHC_ACCEL_RATE_200           = 0x06 << 4,
+    LSM303DLHC_ACCEL_RATE_400           = 0x07 << 4,
+    LSM303DLHC_ACCEL_RATE_1620          = 0x08 << 4
+};
+
+enum lsm303dlhc_mag_gain {
+    LSM303DLHC_MAG_GAIN_1_3             = 0x20 << 5, /* +/- 1.3 gauss */
+    LSM303DLHC_MAG_GAIN_1_9             = 0x40 << 5, /* +/- 1.9 gauss */
+    LSM303DLHC_MAG_GAIN_2_5             = 0x60 << 5, /* +/- 2.5 gauss */
+    LSM303DLHC_MAG_GAIN_4_0             = 0x80 << 5, /* +/- 4.0 gauss */
+    LSM303DLHC_MAG_GAIN_4_7             = 0xA0 << 5, /* +/- 4.7 gauss */
+    LSM303DLHC_MAG_GAIN_5_6             = 0xC0 << 5, /* +/- 5.6 gauss */
+    LSM303DLHC_MAG_GAIN_8_1             = 0xE0 << 5  /* +/- 8.1 gauss */
+};
+
+enum lsm303dlhc_mag_rate {
+    LSM303DLHC_MAG_RATE_0_7             = 0x00 << 2,  /* 0.75 Hz */
+    LSM303DLHC_MAG_RATE_1_5             = 0x01 << 2,  /* 1.5 Hz  */
+    LSM303DLHC_MAG_RATE_3_0             = 0x02 << 2,  /* 3.0 Hz  */
+    LSM303DLHC_MAG_RATE_7_5             = 0x03 << 2,  /* 7.5 Hz  */
+    LSM303DLHC_MAG_RATE_15              = 0x04 << 2,  /* 15 Hz   */
+    LSM303DLHC_MAG_RATE_30              = 0x05 << 2,  /* 30 Hz   */
+    LSM303DLHC_MAG_RATE_75              = 0x06 << 2,  /* 75 Hz   */
+    LSM303DLHC_MAG_RATE_220             = 0x07 << 2   /* 220 Hz  */
+};
+
+struct lsm303dlhc_cfg {
+    enum lsm303dlhc_accel_range accel_range;
+    enum lsm303dlhc_accel_rate accel_rate;
+    uint16_t sample_itvl;
+};
+
+struct lsm303dlhc {
+    struct os_dev dev;
+    struct sensor sensor;
+    struct lsm303dlhc_cfg cfg;
+    os_time_t last_read_time;
+};
+
+int lsm303dlhc_init(struct os_dev *, void *);
+int lsm303dlhc_config(struct lsm303dlhc *, struct lsm303dlhc_cfg *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SENSOR_LSM303DLHC_H__ */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f720b6e4/hw/drivers/sensors/lsm303dlhc/pkg.yml
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/pkg.yml b/hw/drivers/sensors/lsm303dlhc/pkg.yml
new file mode 100644
index 0000000..d15d371
--- /dev/null
+++ b/hw/drivers/sensors/lsm303dlhc/pkg.yml
@@ -0,0 +1,24 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+pkg.name: hw/drivers/sensors/lsm303dlhc
+pkg.description: Driver for the LSM303DLHC 3 axis accel/mag
+pkg.author: "Adafruit Industries"
+pkg.homepage: "http://www.adafruit.com"
+pkg.keywords:

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f720b6e4/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
new file mode 100644
index 0000000..a4f4996
--- /dev/null
+++ b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
@@ -0,0 +1,398 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * resarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "defs/error.h"
+#include "os/os.h"
+#include "sysinit/sysinit.h"
+#include "hal/hal_i2c.h"
+#include "sensor/sensor.h"
+#include "sensor/accel.h"
+#include "lsm303dlhc/lsm303dlhc.h"
+#include "lsm303dlhc_priv.h"
+
+#if MYNEWT_VAL(LSM303DLHC_LOG)
+#include "log/log.h"
+#endif
+
+#if MYNEWT_VAL(LSM303DLHC_STATS)
+#include "stats/stats.h"
+#endif
+
+#if MYNEWT_VAL(LSM303DLHC_STATS)
+/* Define the stats section and records */
+STATS_SECT_START(lsm303dlhc_stat_section)
+    STATS_SECT_ENTRY(samples_acc_2g)
+    STATS_SECT_ENTRY(samples_acc_4g)
+    STATS_SECT_ENTRY(samples_acc_8g)
+    STATS_SECT_ENTRY(samples_acc_16g)
+    STATS_SECT_ENTRY(errors)
+STATS_SECT_END
+
+/* Define stat names for querying */
+STATS_NAME_START(lsm303dlhc_stat_section)
+    STATS_NAME(lsm303dlhc_stat_section, samples_acc_2g)
+    STATS_NAME(lsm303dlhc_stat_section, samples_acc_4g)
+    STATS_NAME(lsm303dlhc_stat_section, samples_acc_8g)
+    STATS_NAME(lsm303dlhc_stat_section, samples_acc_16g)
+    STATS_NAME(lsm303dlhc_stat_section, errors)
+STATS_NAME_END(lsm303dlhc_stat_section)
+
+/* Global variable used to hold stats data */
+STATS_SECT_DECL(lsm303dlhc_stat_section) g_lsm303dlhcstats;
+#endif
+
+#if MYNEWT_VAL(LSM303DLHC_LOG)
+#define LOG_MODULE_LSM303DLHC (303)
+#define LSM303DLHC_INFO(...)  LOG_INFO(&_log, LOG_MODULE_LSM303DLHC, __VA_ARGS__)
+#define LSM303DLHC_ERR(...)   LOG_ERROR(&_log, LOG_MODULE_LSM303DLHC, __VA_ARGS__)
+static struct log _log;
+#else
+#define LSM303DLHC_INFO(...)
+#define LSM303DLHC_ERR(...)
+#endif
+
+/* Exports for the sensor interface.
+ */
+static void *lsm303dlhc_sensor_get_interface(struct sensor *, sensor_type_t);
+static int lsm303dlhc_sensor_read(struct sensor *, sensor_type_t,
+        sensor_data_func_t, void *, uint32_t);
+static int lsm303dlhc_sensor_get_config(struct sensor *, sensor_type_t,
+        struct sensor_cfg *);
+
+static const struct sensor_driver g_lsm303dlhc_sensor_driver = {
+    lsm303dlhc_sensor_get_interface,
+    lsm303dlhc_sensor_read,
+    lsm303dlhc_sensor_get_config
+};
+
+/**
+ * Writes a single byte to the specified register
+ *
+ * @param The I2C address to use
+ * @param The register address to write to
+ * @param The value to write
+ *
+ * @return 0 on success, non-zero error on failure.
+ */
+int
+lsm303dlhc_write8(uint8_t addr, uint8_t reg, uint32_t value)
+{
+    int rc;
+    uint8_t payload[2] = { reg, value & 0xFF };
+
+    struct hal_i2c_master_data data_struct = {
+        .address = addr,
+        .len = 2,
+        .buffer = payload
+    };
+
+    rc = hal_i2c_master_write(MYNEWT_VAL(LSM303DLHC_I2CBUS), &data_struct,
+                              OS_TICKS_PER_SEC / 10, 1);
+    if (rc) {
+        LSM303DLHC_ERR("Failed to write to 0x%02X:0x%02X with value 0x%02X\n",
+                       addr, reg, value);
+        #if MYNEWT_VAL(LSM303DLHC_STATS)
+        STATS_INC(g_lsm303dlhcstats, errors);
+        #endif
+    }
+
+    return rc;
+}
+
+/**
+ * Reads a single byte from the specified register
+ *
+ * @param The I2C address to use
+ * @param The register address to read from
+ * @param Pointer to where the register value should be written
+ *
+ * @return 0 on success, non-zero error on failure.
+ */
+int
+lsm303dlhc_read8(uint8_t addr, uint8_t reg, uint8_t *value)
+{
+    int rc;
+    uint8_t payload;
+
+    struct hal_i2c_master_data data_struct = {
+        .address = addr,
+        .len = 1,
+        .buffer = &payload
+    };
+
+    /* Register write */
+    payload = reg;
+    rc = hal_i2c_master_write(MYNEWT_VAL(LSM303DLHC_I2CBUS), &data_struct,
+                              OS_TICKS_PER_SEC / 10, 1);
+    if (rc) {
+        LSM303DLHC_ERR("I2C access failed at address 0x%02X\n", addr);
+        #if MYNEWT_VAL(LSM303DLHC_STATS)
+        STATS_INC(g_lsm303dlhcstats, errors);
+        #endif
+        goto error;
+    }
+
+    /* Read one byte back */
+    payload = 0;
+    rc = hal_i2c_master_read(MYNEWT_VAL(LSM303DLHC_I2CBUS), &data_struct,
+                             OS_TICKS_PER_SEC / 10, 1);
+    *value = payload;
+    if (rc) {
+        LSM303DLHC_ERR("Failed to read from 0x%02X:0x%02X\n", addr, reg);
+        #if MYNEWT_VAL(LSM303DLHC_STATS)
+        STATS_INC(g_lsm303dlhcstats, errors);
+        #endif
+    }
+
+error:
+    return rc;
+}
+
+int
+lsm303dlhc_read48(uint8_t addr, uint8_t reg, int16_t *x, int16_t*y, int16_t *z)
+{
+    int rc;
+    uint8_t payload[7] = { reg | 0x80, 0, 0, 0, 0, 0, 0 };
+
+    struct hal_i2c_master_data data_struct = {
+        .address = addr,
+        .len = 1,
+        .buffer = payload
+    };
+
+    /* Register write */
+    rc = hal_i2c_master_write(MYNEWT_VAL(LSM303DLHC_I2CBUS), &data_struct,
+                              OS_TICKS_PER_SEC / 10, 1);
+    if (rc) {
+        LSM303DLHC_ERR("I2C access failed at address 0x%02X\n", addr);
+        #if MYNEWT_VAL(LSM303DLHC_STATS)
+        STATS_INC(g_lsm303dlhcstats, errors);
+        #endif
+        goto error;
+    }
+
+    /* Read six bytes back */
+    memset(payload, 0, sizeof(payload));
+    data_struct.len = 6;
+    rc = hal_i2c_master_read(MYNEWT_VAL(LSM303DLHC_I2CBUS), &data_struct,
+                             OS_TICKS_PER_SEC / 10, 1);
+
+    /* Shift 12-bit left-aligned accel values into 16-bit int */
+    *x = ((int16_t)(payload[0] | (payload[1] << 8))) >> 4;
+    *y = ((int16_t)(payload[2] | (payload[3] << 8))) >> 4;
+    *z = ((int16_t)(payload[4] | (payload[5] << 8))) >> 4;
+
+    if (rc) {
+        LSM303DLHC_ERR("Failed to read from 0x%02X:0x%02X\n", addr, reg);
+        #if MYNEWT_VAL(LSM303DLHC_STATS)
+        STATS_INC(g_lsm303dlhcstats, errors);
+        #endif
+        goto error;
+    }
+
+    /* ToDo: Log raw reads */
+    // console_printf("0x%04X\n", (uint16_t)payload[0] | ((uint16_t)payload[1] << 8));
+
+error:
+    return rc;
+}
+
+/**
+ * Expects to be called back through os_dev_create().
+ *
+ * @param The device object associated with this accellerometer
+ * @param Argument passed to OS device init, unused
+ *
+ * @return 0 on success, non-zero error on failure.
+ */
+int
+lsm303dlhc_init(struct os_dev *dev, void *arg)
+{
+    struct lsm303dlhc *lsm;
+    struct sensor *sensor;
+    int rc;
+
+    lsm = (struct lsm303dlhc *) dev;
+
+    #if MYNEWT_VAL(LSM303DLHC_LOG)
+    log_register("lsm303dlhc", &_log, &log_console_handler, NULL, LOG_SYSLEVEL);
+    #endif
+
+    sensor = &lsm->sensor;
+
+    #if MYNEWT_VAL(LSM303DLHC_STATS)
+    /* Initialise the stats entry */
+    rc = stats_init(
+        STATS_HDR(g_lsm303dlhcstats),
+        STATS_SIZE_INIT_PARMS(g_lsm303dlhcstats, STATS_SIZE_32),
+        STATS_NAME_INIT_PARMS(lsm303dlhc_stat_section));
+    SYSINIT_PANIC_ASSERT(rc == 0);
+    /* Register the entry with the stats registry */
+    rc = stats_register("lsm303dlhc", STATS_HDR(g_lsm303dlhcstats));
+    SYSINIT_PANIC_ASSERT(rc == 0);
+    #endif
+
+    rc = sensor_init(sensor, dev);
+    if (rc != 0) {
+        goto err;
+    }
+
+    rc = sensor_set_driver(sensor, SENSOR_TYPE_ACCELEROMETER,
+            (struct sensor_driver *) &g_lsm303dlhc_sensor_driver);
+    if (rc != 0) {
+        goto err;
+    }
+
+    rc = sensor_mgr_register(sensor);
+    if (rc != 0) {
+        goto err;
+    }
+
+    return (0);
+err:
+    return (rc);
+}
+
+int
+lsm303dlhc_config(struct lsm303dlhc *lsm, struct lsm303dlhc_cfg *cfg)
+{
+    int rc;
+
+    /* Overwrite the configuration associated with this generic accelleromter. */
+    memcpy(&lsm->cfg, cfg, sizeof(*cfg));
+
+    /* Set data rate (or power down) and enable XYZ output */
+    rc = lsm303dlhc_write8(LSM303DLHC_ADDR_ACCEL,
+        LSM303DLHC_REGISTER_ACCEL_CTRL_REG1_A,
+        lsm->cfg.accel_rate | 0x07);
+    if (rc != 0) {
+        goto err;
+    }
+
+    /* Set scale */
+    rc = lsm303dlhc_write8(LSM303DLHC_ADDR_ACCEL,
+        LSM303DLHC_REGISTER_ACCEL_CTRL_REG4_A,
+        lsm->cfg.accel_range);
+    if (rc != 0) {
+        goto err;
+    }
+
+err:
+    return (rc);
+}
+
+static void *
+lsm303dlhc_sensor_get_interface(struct sensor *sensor, sensor_type_t type)
+{
+    return (NULL);
+}
+
+static int
+lsm303dlhc_sensor_read(struct sensor *sensor, sensor_type_t type,
+        sensor_data_func_t data_func, void *data_arg, uint32_t timeout)
+{
+    struct lsm303dlhc *lsm;
+    struct sensor_accel_data sad;
+    int rc;
+    int16_t x, y, z;
+    float mg_lsb;
+
+    /* If the read isn't looking for accel data, then don't do anything. */
+    if (!(type & SENSOR_TYPE_ACCELEROMETER)) {
+        rc = SYS_EINVAL;
+        goto err;
+    }
+
+    lsm = (struct lsm303dlhc *) SENSOR_GET_DEVICE(sensor);
+
+    x = y = z = 0;
+    lsm303dlhc_read48(LSM303DLHC_ADDR_ACCEL,
+                      LSM303DLHC_REGISTER_ACCEL_OUT_X_L_A,
+                      &x, &y, &z);
+
+    /* Determine mg per lsb based on range */
+    switch(lsm->cfg.accel_range) {
+        case LSM303DLHC_ACCEL_RANGE_2:
+            #if MYNEWT_VAL(LSM303DLHC_STATS)
+            STATS_INC(g_lsm303dlhcstats, samples_acc_2g);
+            #endif
+            mg_lsb = 0.001F;
+            break;
+        case LSM303DLHC_ACCEL_RANGE_4:
+            #if MYNEWT_VAL(LSM303DLHC_STATS)
+            STATS_INC(g_lsm303dlhcstats, samples_acc_4g);
+            #endif
+            mg_lsb = 0.002F;
+            break;
+        case LSM303DLHC_ACCEL_RANGE_8:
+            #if MYNEWT_VAL(LSM303DLHC_STATS)
+            STATS_INC(g_lsm303dlhcstats, samples_acc_8g);
+            #endif
+            mg_lsb = 0.004F;
+            break;
+        case LSM303DLHC_ACCEL_RANGE_16:
+            #if MYNEWT_VAL(LSM303DLHC_STATS)
+            STATS_INC(g_lsm303dlhcstats, samples_acc_16g);
+            #endif
+            mg_lsb = 0.012F;
+            break;
+        default:
+            LSM303DLHC_ERR("Unknown accel range: 0x%02X. Assuming +/-2G.\n",
+                lsm->cfg.accel_range);
+            mg_lsb = 0.001F;
+            break;
+    }
+
+    /* Convert from mg to Earth gravity in m/s^2 */
+    sad.sad_x = (float)x * mg_lsb * 9.80665F;
+    sad.sad_y = (float)y * mg_lsb * 9.80665F;
+    sad.sad_z = (float)z * mg_lsb * 9.80665F;
+
+    /* Call data function */
+    rc = data_func(sensor, data_arg, &sad);
+    if (rc != 0) {
+        goto err;
+    }
+
+    return (0);
+err:
+    return (rc);
+}
+
+static int
+lsm303dlhc_sensor_get_config(struct sensor *sensor, sensor_type_t type,
+        struct sensor_cfg *cfg)
+{
+    int rc;
+
+    if (type != SENSOR_TYPE_ACCELEROMETER) {
+        rc = SYS_EINVAL;
+        goto err;
+    }
+
+    cfg->sc_valtype = SENSOR_VALUE_TYPE_FLOAT_TRIPLET;
+
+    return (0);
+err:
+    return (rc);
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f720b6e4/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc_priv.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc_priv.h b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc_priv.h
new file mode 100644
index 0000000..5983096
--- /dev/null
+++ b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc_priv.h
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef __LSM303DLHC_PRIV_H__
+#define __LSM303DLHC_PRIV_H__
+
+#define LSM303DLHC_ADDR_ACCEL                     (0x19) /* 0011001 */
+#define LSM303DLHC_ADDR_MAG                       (0x1E) /* 0011110 */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum lsm303dlhc_registers_accel {                         /* DEFAULT    TYPE */
+    LSM303DLHC_REGISTER_ACCEL_CTRL_REG1_A         = 0x20, /* 00000111   rw   */
+    LSM303DLHC_REGISTER_ACCEL_CTRL_REG2_A         = 0x21, /* 00000000   rw   */
+    LSM303DLHC_REGISTER_ACCEL_CTRL_REG3_A         = 0x22, /* 00000000   rw   */
+    LSM303DLHC_REGISTER_ACCEL_CTRL_REG4_A         = 0x23, /* 00000000   rw   */
+    LSM303DLHC_REGISTER_ACCEL_CTRL_REG5_A         = 0x24, /* 00000000   rw   */
+    LSM303DLHC_REGISTER_ACCEL_CTRL_REG6_A         = 0x25, /* 00000000   rw   */
+    LSM303DLHC_REGISTER_ACCEL_REFERENCE_A         = 0x26, /* 00000000   r    */
+    LSM303DLHC_REGISTER_ACCEL_STATUS_REG_A        = 0x27, /* 00000000   r    */
+    LSM303DLHC_REGISTER_ACCEL_OUT_X_L_A           = 0x28,
+    LSM303DLHC_REGISTER_ACCEL_OUT_X_H_A           = 0x29,
+    LSM303DLHC_REGISTER_ACCEL_OUT_Y_L_A           = 0x2A,
+    LSM303DLHC_REGISTER_ACCEL_OUT_Y_H_A           = 0x2B,
+    LSM303DLHC_REGISTER_ACCEL_OUT_Z_L_A           = 0x2C,
+    LSM303DLHC_REGISTER_ACCEL_OUT_Z_H_A           = 0x2D,
+    LSM303DLHC_REGISTER_ACCEL_FIFO_CTRL_REG_A     = 0x2E,
+    LSM303DLHC_REGISTER_ACCEL_FIFO_SRC_REG_A      = 0x2F,
+    LSM303DLHC_REGISTER_ACCEL_INT1_CFG_A          = 0x30,
+    LSM303DLHC_REGISTER_ACCEL_INT1_SOURCE_A       = 0x31,
+    LSM303DLHC_REGISTER_ACCEL_INT1_THS_A          = 0x32,
+    LSM303DLHC_REGISTER_ACCEL_INT1_DURATION_A     = 0x33,
+    LSM303DLHC_REGISTER_ACCEL_INT2_CFG_A          = 0x34,
+    LSM303DLHC_REGISTER_ACCEL_INT2_SOURCE_A       = 0x35,
+    LSM303DLHC_REGISTER_ACCEL_INT2_THS_A          = 0x36,
+    LSM303DLHC_REGISTER_ACCEL_INT2_DURATION_A     = 0x37,
+    LSM303DLHC_REGISTER_ACCEL_CLICK_CFG_A         = 0x38,
+    LSM303DLHC_REGISTER_ACCEL_CLICK_SRC_A         = 0x39,
+    LSM303DLHC_REGISTER_ACCEL_CLICK_THS_A         = 0x3A,
+    LSM303DLHC_REGISTER_ACCEL_TIME_LIMIT_A        = 0x3B,
+    LSM303DLHC_REGISTER_ACCEL_TIME_LATENCY_A      = 0x3C,
+    LSM303DLHC_REGISTER_ACCEL_TIME_WINDOW_A       = 0x3D
+};
+
+enum lsm303dlhc_registers_mag {
+    LSM303DLHC_REGISTER_MAG_CRA_REG_M             = 0x00,
+    LSM303DLHC_REGISTER_MAG_CRB_REG_M             = 0x01,
+    LSM303DLHC_REGISTER_MAG_MR_REG_M              = 0x02,
+    LSM303DLHC_REGISTER_MAG_OUT_X_H_M             = 0x03,
+    LSM303DLHC_REGISTER_MAG_OUT_X_L_M             = 0x04,
+    LSM303DLHC_REGISTER_MAG_OUT_Z_H_M             = 0x05,
+    LSM303DLHC_REGISTER_MAG_OUT_Z_L_M             = 0x06,
+    LSM303DLHC_REGISTER_MAG_OUT_Y_H_M             = 0x07,
+    LSM303DLHC_REGISTER_MAG_OUT_Y_L_M             = 0x08,
+    LSM303DLHC_REGISTER_MAG_SR_REG_Mg             = 0x09,
+    LSM303DLHC_REGISTER_MAG_IRA_REG_M             = 0x0A,
+    LSM303DLHC_REGISTER_MAG_IRB_REG_M             = 0x0B,
+    LSM303DLHC_REGISTER_MAG_IRC_REG_M             = 0x0C,
+    LSM303DLHC_REGISTER_MAG_TEMP_OUT_H_M          = 0x31,
+    LSM303DLHC_REGISTER_MAG_TEMP_OUT_L_M          = 0x32
+};
+
+int lsm303dlhc_write8(uint8_t addr, uint8_t reg, uint32_t value);
+int lsm303dlhc_read8(uint8_t addr, uint8_t reg, uint8_t *value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __LSM303DLHC_PRIV_H__ */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f720b6e4/hw/drivers/sensors/lsm303dlhc/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/syscfg.yml b/hw/drivers/sensors/lsm303dlhc/syscfg.yml
new file mode 100644
index 0000000..dcd8f3f
--- /dev/null
+++ b/hw/drivers/sensors/lsm303dlhc/syscfg.yml
@@ -0,0 +1,32 @@
+# The BSD License (BSD)
+#
+# Copyright (c) 2016 Adafruit Industries
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+syscfg.defs:
+    LSM303DLHC_I2CBUS:
+        description: 'I2C bus number for the LSM303DLHC'
+        value: -1
+    LSM303DLHC_LOG:
+        description: 'Enable LSM303DLHC logging'
+        value: 0
+    LSM303DLHC_STATS:
+        description: 'Enable LSM303DLHC statistics'
+        value: 0


[08/50] incubator-mynewt-core git commit: MYNEWT-139: newtmgr cli to execute device tests

Posted by vi...@apache.org.
MYNEWT-139: newtmgr cli to execute device tests

Handle "run test" "run list" commands from newtmgr.
"run list" lists all the registered test suites on device
"run test" takes a specific test or defaults to running all tests.
Optional "token" argument allows log messages to have the specified token
added. Use "run test all token" to run all tests by default.


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/95c57d67
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/95c57d67
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/95c57d67

Branch: refs/heads/develop
Commit: 95c57d6787bfe8be4ff35a646ca0f32065dc4b0b
Parents: e696b98
Author: Peter Snyder <pe...@apache.org>
Authored: Thu Dec 15 13:28:26 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Sun Dec 18 13:56:17 2016 -0800

----------------------------------------------------------------------
 fs/fcb/test/src/fcb_test.c                      |   2 +-
 mgmt/mgmt/include/mgmt/mgmt.h                   |   2 +-
 test/runtest/include/runtest/runtest.h          |  19 +-
 test/runtest/src/ctags.list                     |   1 +
 test/runtest/src/runtest.c                      |  18 +-
 test/runtest/src/runtest_cli.c                  |   4 +-
 test/runtest/src/runtest_nmgr.c                 | 152 +++++++++++----
 test/testreport/include/testreport/testreport.h |  42 ----
 test/testreport/pkg.yml                         |  30 ---
 test/testreport/src/arch/cortex_m4/io.c         |  91 ---------
 test/testreport/src/arch/sim/io.c               | 140 --------------
 test/testreport/src/results.c                   | 190 -------------------
 test/testreport/src/testreport.c                | 131 -------------
 test/testreport/src/testreport_priv.h           |  56 ------
 test/testutil/include/testutil/testutil.h       |  13 +-
 test/testutil/src/suite.c                       |  12 +-
 16 files changed, 167 insertions(+), 736 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/fs/fcb/test/src/fcb_test.c
----------------------------------------------------------------------
diff --git a/fs/fcb/test/src/fcb_test.c b/fs/fcb/test/src/fcb_test.c
index 2cd6a0e..77d2d3e 100644
--- a/fs/fcb/test/src/fcb_test.c
+++ b/fs/fcb/test/src/fcb_test.c
@@ -58,7 +58,6 @@ struct flash_area test_fcb_area[] = {
         .fa_size = 0x4000
     }
 };
-#endif
 
 void
 fcb_test_wipe(void)
@@ -73,6 +72,7 @@ fcb_test_wipe(void)
         TEST_ASSERT(rc == 0);
     }
 }
+#endif
 
 int
 fcb_test_empty_walk_cb(struct fcb_entry *loc, void *arg)

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/mgmt/mgmt/include/mgmt/mgmt.h
----------------------------------------------------------------------
diff --git a/mgmt/mgmt/include/mgmt/mgmt.h b/mgmt/mgmt/include/mgmt/mgmt.h
index 9856405..a6a1c99 100644
--- a/mgmt/mgmt/include/mgmt/mgmt.h
+++ b/mgmt/mgmt/include/mgmt/mgmt.h
@@ -47,7 +47,7 @@ extern "C" {
 #define MGMT_GROUP_ID_LOGS      (4)
 #define MGMT_GROUP_ID_CRASH     (5)
 #define MGMT_GROUP_ID_SPLIT     (6)
-#define MGMT_GROUP_ID_RUNTEST   (7)
+#define MGMT_GROUP_ID_RUN   (7)
 #define MGMT_GROUP_ID_PERUSER   (64)
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/runtest/include/runtest/runtest.h
----------------------------------------------------------------------
diff --git a/test/runtest/include/runtest/runtest.h b/test/runtest/include/runtest/runtest.h
index 59c7ef0..12f3e52 100644
--- a/test/runtest/include/runtest/runtest.h
+++ b/test/runtest/include/runtest/runtest.h
@@ -29,9 +29,24 @@ extern "C" {
 void runtest_init(void);
 
 /*
- * XXX global used to gate starting test - hack
+ * Callback for runtest events - newtmgr uses this to add
+ * run test requests to default queue for test application (e.g., mynewtsanity)
  */
-extern volatile int runtest_start;
+void run_evcb_set(os_event_fn *cb);
+
+/*
+ * Token is append to log messages - for use by ci gateway
+ */
+#define RUNTEST_REQ_SIZE  32
+extern char runtest_test_token[RUNTEST_REQ_SIZE];
+
+/*
+ * Argument struct passed in from "run" requests via newtmgr
+ */
+struct runtest_evq_arg {
+    char* run_testname;
+    char* run_token;
+};
 
 #ifdef __cplusplus
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/runtest/src/ctags.list
----------------------------------------------------------------------
diff --git a/test/runtest/src/ctags.list b/test/runtest/src/ctags.list
new file mode 120000
index 0000000..ff9c2c0
--- /dev/null
+++ b/test/runtest/src/ctags.list
@@ -0,0 +1 @@
+/Users/peterfs/dev/newt/newt_ci/ctags.list
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/runtest/src/runtest.c
----------------------------------------------------------------------
diff --git a/test/runtest/src/runtest.c b/test/runtest/src/runtest.c
index 28657d0..3a68185 100644
--- a/test/runtest/src/runtest.c
+++ b/test/runtest/src/runtest.c
@@ -39,27 +39,25 @@ struct shell_cmd runtest_cmd_struct;
 struct mgmt_group runtest_nmgr_group;
 #endif
 
-int
-runtest()
-{
-    /* XXX */
-
-    return 0;
-}
+extern int run_nmgr_register_group();
 
+/*
+ * Package init routine to register newtmgr "run" commands
+ */
 void
 runtest_init(void)
 {
+    int rc;
+
     /* Ensure this function only gets called by sysinit. */
     SYSINIT_ASSERT_ACTIVE();
 
-    runtest_start = 1;
-
 #if MYNEWT_VAL(RUNTEST_CLI)
     shell_cmd_register(&runtest_cmd_struct);
 #endif
 
 #if MYNEWT_VAL(RUNTEST_NEWTMGR)
-    mgmt_group_register(&runtest_nmgr_group);
+    rc = run_nmgr_register_group();
+    SYSINIT_PANIC_ASSERT(rc == 0);
 #endif
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/runtest/src/runtest_cli.c
----------------------------------------------------------------------
diff --git a/test/runtest/src/runtest_cli.c b/test/runtest/src/runtest_cli.c
index 282663c..739dc2f 100644
--- a/test/runtest/src/runtest_cli.c
+++ b/test/runtest/src/runtest_cli.c
@@ -32,14 +32,14 @@
 
 static int runtest_cli_cmd(int argc, char **argv);
 struct shell_cmd runtest_cmd_struct = {
-    .sc_cmd = "runtest",
+    .sc_cmd = "run",
     .sc_cmd_func = runtest_cli_cmd
 };
 
 static int
 runtest_cli_cmd(int argc, char **argv)
 {
-    console_printf("Usage runtest \n");
+    console_printf("Usage run [list | test testname token] \n");
     return 0;
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/runtest/src/runtest_nmgr.c
----------------------------------------------------------------------
diff --git a/test/runtest/src/runtest_nmgr.c b/test/runtest/src/runtest_nmgr.c
index 625af75..7281e99 100644
--- a/test/runtest/src/runtest_nmgr.c
+++ b/test/runtest/src/runtest_nmgr.c
@@ -25,63 +25,151 @@
 #include "mgmt/mgmt.h"
 #include "cborattr/cborattr.h"
 #include "console/console.h"
+#include "os/os_eventq.h"
+
+#include "testutil/testutil.h"
 
 #include "runtest/runtest.h"
 #include "runtest_priv.h"
 
-static int runtest_nmgr_write(struct mgmt_cbuf *);
+static int run_nmgr_test(struct mgmt_cbuf *);
+static int run_nmgr_list(struct mgmt_cbuf *);
 
-static const struct mgmt_handler runtest_nmgr_handler[] = {
-    [0] = { runtest_nmgr_write, runtest_nmgr_write }
-};
+struct mgmt_group run_nmgr_group;
+
+#define RUN_NMGR_OP_TEST    0
+#define RUN_NMGR_OP_LIST    1
 
-struct mgmt_group runtest_nmgr_group = {
-    .mg_handlers = (struct mgmt_handler *)runtest_nmgr_handler,
-    .mg_handlers_count = 1,
-    .mg_group_id = MGMT_GROUP_ID_RUNTEST
+const struct mgmt_handler run_nmgr_handlers[] = {
+    [RUN_NMGR_OP_TEST] = {NULL, run_nmgr_test},
+    [RUN_NMGR_OP_LIST] = {run_nmgr_list, NULL}
 };
 
+extern void sanity_start_test();
+struct os_event run_test_event;
+
+char run_testname[RUNTEST_REQ_SIZE];
+char run_token[RUNTEST_REQ_SIZE];
+
+static struct os_eventq *run_evq;
+struct runtest_evq_arg runtest_arg;
+os_event_fn *run_callback;
+
+void
+run_evcb_set(os_event_fn *cb)
+{
+    run_callback = cb;
+}
+
+static struct os_eventq *
+run_evq_get(void)
+{
+    os_eventq_ensure(&run_evq, NULL);
+    return run_evq;
+}
+
 /*
- * XXX global used to gate starting test - hack
+ * package "run test" request from newtmgr and enqueue on default queue
+ * of the application which is actually running the tests (e.g., mynewtsanity).
+ * Application callback was initialized by call to run_evb_set() above.
  */
-volatile int runtest_start;
-
 static int
-runtest_nmgr_write(struct mgmt_cbuf *cb)
+run_nmgr_test(struct mgmt_cbuf *cb)
 {
-    char tmp_str[64];
-    const struct cbor_attr_t attr[2] = {
+    int rc;
+
+    const struct cbor_attr_t attr[3] = {
         [0] = {
-            .attribute = "u",
+            .attribute = "testname",
             .type = CborAttrTextStringType,
-            .addr.string = tmp_str,
-            .len = sizeof(tmp_str)
+            .addr.string = run_testname,
+            .len = sizeof(run_testname)
         },
         [1] = {
+            .attribute = "token",
+            .type = CborAttrTextStringType,
+            .addr.string = run_token,
+            .len = sizeof(run_token)
+        },
+        [2] = {
             .attribute = NULL
         }
     };
-    int rc;
 
     rc = cbor_read_object(&cb->it, attr);
     if (rc) {
+        return rc;
+    }
+
+    /*
+     * testname is either a specific test or newtmgr passed "all".
+     * token is appened to log messages.
+     */
+    runtest_arg.run_testname = run_testname;
+    runtest_arg.run_token = run_token;
+
+    run_test_event.ev_arg = &runtest_arg;
+    run_test_event.ev_cb = run_callback;
+
+    os_eventq_put(run_evq_get(), &run_test_event);
+            
+    if (rc) {
         rc = MGMT_ERR_EINVAL;
-    } else {
-        /* XXX ugh - drop out of a loop allowing a test to run in an app */
-        runtest_start = 0;
-        /*
-         * we should be doing something more like this where we call
-         * a named test suite directly
-         */
-#ifdef NOTYET
-        rc = start_test(tmp_str);
-#endif
-        if (rc) {
-            rc = MGMT_ERR_EINVAL;
-        }
     }
+
     mgmt_cbuf_setoerr(cb, rc);
     return 0;
 }
 
-#endif /* MYNEWT_VAL(RUNTEST_NEWTMGR) */
+/*
+ * List all register tests
+ */
+static int
+run_nmgr_list(struct mgmt_cbuf *cb)
+{
+    CborError g_err = CborNoError;
+    CborEncoder *penc = &cb->encoder;
+    CborEncoder rsp, run_list;
+    struct ts_suite *ts;
+
+    g_err |= cbor_encoder_create_map(penc, &rsp, CborIndefiniteLength);
+    g_err |= cbor_encode_text_stringz(&rsp, "rc");
+    g_err |= cbor_encode_int(&rsp, MGMT_ERR_EOK);
+
+    g_err |= cbor_encode_text_stringz(&rsp, "run_list");
+    g_err |= cbor_encoder_create_array(&rsp, &run_list, CborIndefiniteLength);
+
+    SLIST_FOREACH(ts, &g_ts_suites, ts_next) {
+        g_err |= cbor_encode_text_stringz(&run_list, ts->ts_name);
+    }
+
+    g_err |= cbor_encoder_close_container(&rsp, &run_list);
+    g_err |= cbor_encoder_close_container(penc, &rsp);
+
+    if (g_err) {
+        return MGMT_ERR_ENOMEM;
+    }
+    return (0);
+}
+
+/*
+ * Register nmgr group handlers
+ */
+int
+run_nmgr_register_group(void)
+{
+    int rc;
+
+    MGMT_GROUP_SET_HANDLERS(&run_nmgr_group, run_nmgr_handlers);
+    run_nmgr_group.mg_group_id = MGMT_GROUP_ID_RUN;
+
+    rc = mgmt_group_register(&run_nmgr_group);
+    if (rc != 0) {
+        goto err;
+    }
+    return (0);
+
+err:
+    return (rc);
+}
+#endif /* MYNEWT_VAL(RUN_NEWTMGR) */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/testreport/include/testreport/testreport.h
----------------------------------------------------------------------
diff --git a/test/testreport/include/testreport/testreport.h b/test/testreport/include/testreport/testreport.h
deleted file mode 100644
index 3b14da8..0000000
--- a/test/testreport/include/testreport/testreport.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef H_TESTREPORT_
-#define H_TESTREPORT_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nffs_area_desc;
-
-struct tr_config {
-    const char *tc_base_path;
-    const struct nffs_area_desc *tc_area_descs;
-};
-
-extern struct tr_config tr_config;
-
-int tr_init(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/testreport/pkg.yml
----------------------------------------------------------------------
diff --git a/test/testreport/pkg.yml b/test/testreport/pkg.yml
deleted file mode 100644
index 42e8482..0000000
--- a/test/testreport/pkg.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-# 
-#  http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-pkg.name: test/testreport
-pkg.description: Library for recording unit test results to flash.
-pkg.author: "Apache Mynewt <de...@mynewt.incubator.apache.org>"
-pkg.homepage: "http://mynewt.apache.org/"
-pkg.keywords:
-    - unit
-    - test
-
-pkg.deps:
-    - fs/nffs
-    - test/testutil

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/testreport/src/arch/cortex_m4/io.c
----------------------------------------------------------------------
diff --git a/test/testreport/src/arch/cortex_m4/io.c b/test/testreport/src/arch/cortex_m4/io.c
deleted file mode 100644
index 0ae2aa0..0000000
--- a/test/testreport/src/arch/cortex_m4/io.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <stddef.h>
-#include "nffs/nffs.h"
-#include "nffs/nffsutil.h"
-#include "testreport_priv.h"
-
-int
-tr_io_write(const char *path, const void *contents, size_t len)
-{
-    int rc;
-
-    rc = nffsutil_write_file(path, contents, len);
-    if (rc != 0) {
-        return -1;
-    }
-
-    return 0;
-}
-
-int
-tr_io_mkdir(const char *path)
-{
-    int rc;
-
-    rc = nffs_mkdir(path);
-    if (rc != 0 && rc != NFFS_EEXIST) {
-        return -1;
-    }
-
-    return 0;
-}
-
-int
-tr_io_rmdir(const char *path)
-{
-    int rc;
-
-    rc = nffs_unlink(path);
-    if (rc != 0 && rc != NFFS_ENOENT) {
-        return -1;
-    }
-
-    return 0;
-}
-
-int
-tr_io_read(const char *path, void *out_data, size_t len, size_t *out_len)
-{
-    uint32_t u32;
-    int rc;
-
-    rc = nffsutil_read_file(path, 0, len, out_data, &u32);
-    if (rc != 0) {
-        return -1;
-    }
-
-    *out_len = u32;
-
-    return 0;
-}
-
-int
-tr_io_delete(const char *path)
-{
-    int rc;
-
-    rc = nffs_unlink(path);
-    if (rc != 0 && rc != NFFS_ENOENT) {
-        return -1;
-    }
-
-    return 0;
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/testreport/src/arch/sim/io.c
----------------------------------------------------------------------
diff --git a/test/testreport/src/arch/sim/io.c b/test/testreport/src/arch/sim/io.c
deleted file mode 100644
index f28a4dd..0000000
--- a/test/testreport/src/arch/sim/io.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include "testreport_priv.h"
-
-static char tr_io_buf[1024];
-
-int
-tr_io_write(const char *path, const void *contents, size_t len)
-{
-    FILE *fp;
-    int rc;
-
-    fp = NULL;
-
-    fp = fopen(path, "w+");
-    if (fp == NULL) {
-        rc = -1;
-        goto done;
-    }
-
-    if (contents != NULL && len > 0) {
-        rc = fwrite(contents, len, 1, fp);
-        if (rc != 1) {
-            rc = -1;
-            goto done;
-        }
-    }
-
-    rc = 0;
-
-done:
-    if (fp != NULL) {
-        fclose(fp);
-    }
-
-    return rc;
-}
-
-int
-tr_io_mkdir(const char *path)
-{
-    int rc;
-
-    rc = mkdir(path, 0755);
-    if (rc == -1 && errno != EEXIST) {
-        return -1;
-    }
-
-    return 0;
-}
-
-/* XXX security risk, not portable, blah blah blah */
-int
-tr_io_rmdir(const char *path)
-{
-    int rc; 
-
-    rc = snprintf(tr_io_buf, sizeof tr_io_buf,
-                  "rm -rf '%s'", path);
-    if (rc >= sizeof tr_io_buf) {
-        return -1;
-    }
-
-    rc = system(tr_io_buf);
-    if (rc != 0) {
-        return rc;
-    }
-
-    return 0;
-}
-
-int
-tr_io_read(const char *path, void *out_data, size_t len, size_t *out_len)
-{
-    FILE *fp;
-    uint8_t *dst;
-    int rc;
-    int i;
-
-    fp = NULL;
-
-    fp = fopen(path, "rb");
-    if (fp == NULL) {
-        rc = -1;
-        goto done;
-    }
-
-    dst = out_data;
-    for (i = 0; i < len; i++) {
-        rc = getc(fp);
-        if (rc == EOF) {
-            rc = -1;
-            goto done;
-        }
-
-        dst[i] = rc;
-    }
-
-    *out_len = i;
-    rc = 0;
-
-done:
-    if (fp != NULL) {
-        fclose(fp);
-    }
-
-    return rc;
-}
-
-int
-tr_io_delete(const char *path)
-{
-    int rc;
-
-    rc = remove(path);
-
-    return rc;
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/testreport/src/results.c
----------------------------------------------------------------------
diff --git a/test/testreport/src/results.c b/test/testreport/src/results.c
deleted file mode 100644
index bc54bb3..0000000
--- a/test/testreport/src/results.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <stdio.h>
-#include "testutil/testutil.h"
-#include "testreport/testreport.h"
-#include "testreport_priv.h"
-
-#define TU_REPORT_META_DIR          ".meta"
-#define TU_REPORT_STATUS_FILENAME   "status"
-
-static char tr_report_buf[1024];
-
-int
-tr_report_rmdir_results(void)
-{
-    if (tr_config.tc_base_path == NULL) {
-        return 0;
-    }
-
-    return tr_io_rmdir(tr_config.tc_base_path);
-}
-
-int
-tr_report_mkdir_results(void)
-{
-    int rc;
-
-    if (tr_config.tc_base_path == NULL) {
-        return 0;
-    }
-
-    rc = snprintf(tr_report_buf, sizeof tr_report_buf,
-                  "%s", tr_config.tc_base_path);
-    if (rc >= sizeof tr_report_buf) {
-        return -1;
-    }
-    return tr_io_mkdir(tr_report_buf);
-}
-
-int
-tr_report_mkdir_meta(void)
-{
-    int rc;
-
-    if (tr_config.tc_base_path == NULL) {
-        return 0;
-    }
-
-    rc = snprintf(tr_report_buf, sizeof tr_report_buf,
-                  "%s/" TU_REPORT_META_DIR, tr_config.tc_base_path);
-    if (rc >= sizeof tr_report_buf) {
-        return -1;
-    }
-    return tr_io_mkdir(tr_report_buf);
-}
-
-int
-tr_report_mkdir_suite(void)
-{
-    int rc;
-
-    if (tr_config.tc_base_path == NULL) {
-        return 0;
-    }
-
-    rc = snprintf(tr_report_buf, sizeof tr_report_buf,
-                  "%s/%s", tr_config.tc_base_path,
-                  ts_current_config->ts_suite_name);
-    if (rc >= sizeof tr_report_buf) {
-        return -1;
-    }
-
-    rc = tr_io_mkdir(tr_report_buf);
-    if (rc != 0) {
-        return rc;
-    }
-
-    return 0;
-}
-
-int
-tr_report_mkdir_case(void)
-{
-    int rc;
-
-    if (tr_config.tc_base_path == NULL) {
-        return 0;
-    }
-
-    rc = snprintf(tr_report_buf, sizeof tr_report_buf,
-                  "%s/%s/%s", tr_config.tc_base_path,
-                  ts_current_config->ts_suite_name, tu_case_name);
-    if (rc >= sizeof tr_report_buf) {
-        return -1;
-    }
-
-    rc = tr_io_mkdir(tr_report_buf);
-    if (rc != 0) {
-        return rc;
-    }
-
-    return 0;
-}
-
-int
-tr_report_write_file(const char *filename, const uint8_t *data,
-                     size_t data_len)
-{
-    int rc;
-
-    if (tr_config.tc_base_path == NULL) {
-        return 0;
-    }
-
-    rc = snprintf(tr_report_buf, sizeof tr_report_buf,
-                  "%s/%s/%s/%s", tr_config.tc_base_path,
-                  ts_current_config->ts_suite_name, tu_case_name, filename);
-    if (rc >= sizeof tr_report_buf) {
-        return -1;
-    }
-
-    rc = tr_io_write(tr_report_buf, data, data_len);
-    if (rc != 0) {
-        return rc;
-    }
-
-    return 0;
-}
-
-int
-tr_report_read_status(void)
-{
-    size_t bytes_read;
-    int rc;
-
-    rc = snprintf(tr_report_buf, sizeof tr_report_buf,
-                  "%s/%s/%s", tr_config.tc_base_path,
-                  TU_REPORT_META_DIR, TU_REPORT_STATUS_FILENAME);
-    if (rc >= sizeof tr_report_buf) {
-        return -1;
-    }
-
-    rc = tr_io_read(tr_report_buf, &tu_first_idx, sizeof tu_first_idx,
-                    &bytes_read);
-    if (rc != 0 || bytes_read != sizeof tu_first_idx) {
-        return -1;
-    }
-
-    tr_io_delete(tr_report_buf);
-
-    return 0;
-}
-
-int
-tr_report_write_status(void)
-{
-    int rc;
-
-    rc = snprintf(tr_report_buf, sizeof tr_report_buf,
-                  "%s/%s/%s", tr_config.tc_base_path,
-                  TU_REPORT_META_DIR, TU_REPORT_STATUS_FILENAME);
-    if (rc >= sizeof tr_report_buf) {
-        return -1;
-    }
-
-    rc = tr_io_write(tr_report_buf, &tu_first_idx, sizeof tu_first_idx);
-    if (rc != 0) {
-        return -1;
-    }
-
-    return 0;
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/testreport/src/testreport.c
----------------------------------------------------------------------
diff --git a/test/testreport/src/testreport.c b/test/testreport/src/testreport.c
deleted file mode 100644
index 85c1258..0000000
--- a/test/testreport/src/testreport.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <assert.h>
-#include <stdio.h>
-#include "hal/hal_flash.h"
-#include "fs/fs.h"
-#include "nffs/nffs.h"
-#include "testutil/testutil.h"
-#include "testreport/testreport.h"
-#include "testreport_priv.h"
-
-struct tr_config tr_config;
-
-static int tr_case_fail_idx;
-
-static void
-tr_case_init(void *unused)
-{
-    int rc;
-
-    rc = tr_results_mkdir_case();
-    assert(rc == 0);
-}
-
-static void
-tr_case_fail(char *msg, int msg_len, void *unused)
-{
-    char filename[14];
-    int rc;
-
-    rc = snprintf(filename, sizeof filename, "fail-%04d.txt",
-                  tr_case_fail_idx);
-    assert(rc < sizeof filename);
-
-    rc = tr_results_write_file(filename, (uint8_t *)msg, msg_len);
-    assert(rc == 0);
-
-    tr_case_fail_idx++;
-}
-
-static void
-tr_case_pass(char *msg, int msg_len, void *unused)
-{
-    int rc;
-
-    rc = tr_results_write_file("pass.txt", (uint8_t *)msg, msg_len);
-    assert(rc == 0);
-}
-
-static void
-tr_suite_init(void *unused)
-{
-    int rc;
-
-    rc = tr_results_mkdir_suite();
-    assert(rc == 0);
-}
-
-static void
-tr_restart(void *unused)
-{
-    tr_results_write_status();
-}
-
-int
-tr_init(void)
-{
-    int rc;
-
-    if (tr_config.tc_base_path != NULL) {
-        if (tr_config.tc_area_descs != NULL) {
-            rc = hal_flash_init();
-            if (rc != 0) {
-                return -1;
-            }
-
-            rc = nffs_init();
-            if (rc != 0) {
-                return -1;
-            }
-
-            rc = nffs_detect(tr_config.tc_area_descs);
-            if (rc == FS_ECORRUPT) {
-                rc = nffs_format(tr_config.tc_area_descs);
-            }
-            if (rc != 0) {
-                return -1;
-            }
-        }
-
-        rc = tr_results_read_status();
-        if (rc != 0) {
-            tr_results_rmdir_results();
-        }
-
-        rc = tr_results_mkdir_results();
-        if (rc != 0) {
-            return -1;
-        }
-
-        rc = tr_results_mkdir_meta();
-        if (rc != 0) {
-            return -1;
-        }
-    }
-
-    tu_config.tc_case_init_cb = tr_case_init;
-    tu_config.tc_case_fail_cb = tr_case_fail;
-    tu_config.tc_case_pass_cb = tr_case_pass;
-    tu_config.tc_suite_init_cb = tr_suite_init;
-    tu_config.tc_restart_cb = tr_restart;
-
-    return 0;
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/testreport/src/testreport_priv.h
----------------------------------------------------------------------
diff --git a/test/testreport/src/testreport_priv.h b/test/testreport/src/testreport_priv.h
deleted file mode 100644
index 64f95a1..0000000
--- a/test/testreport/src/testreport_priv.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifndef H_TESTREPORT_PRIV_
-#define H_TESTREPORT_PRIV_
-
-#include <stddef.h>
-#include <inttypes.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int tr_results_mkdir_results(void);
-int tr_results_rmdir_results(void);
-
-int tr_results_mkdir_meta(void);
-
-int tr_results_mkdir_suite(void);
-int tr_results_mkdir_case(void);
-
-int tr_results_write_file(const char *filename, const uint8_t *data,
-                          size_t data_len);
-
-int tr_results_read_status(void);
-int tr_results_write_status(void);
-
-int tr_io_read(const char *path, void *out_data, size_t len, size_t *out_len);
-int tr_io_write(const char *path, const void *contents, size_t len);
-
-int tr_io_delete(const char *path);
-
-int tr_io_mkdir(const char *path);
-int tr_io_rmdir(const char *path);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/testutil/include/testutil/testutil.h
----------------------------------------------------------------------
diff --git a/test/testutil/include/testutil/testutil.h b/test/testutil/include/testutil/testutil.h
index 66701f2..4749186 100644
--- a/test/testutil/include/testutil/testutil.h
+++ b/test/testutil/include/testutil/testutil.h
@@ -74,6 +74,8 @@ void tu_suite_pre_test(void);
 void tu_suite_post_test(void);
 void tu_suite_complete(void);
 
+int tu_suite_register(tu_testsuite_fn_t* ts, const char *name);
+
 struct ts_suite {
     SLIST_ENTRY(ts_suite) ts_next;
     const char *ts_name;
@@ -81,8 +83,7 @@ struct ts_suite {
 };
 
 SLIST_HEAD(ts_testsuite_list, ts_suite);
-
-extern struct ts_testsuite_list *ts_suites;
+extern struct ts_testsuite_list g_ts_suites;
 
 struct ts_config {
     int ts_print_results;
@@ -193,10 +194,10 @@ extern int tu_case_failed;
 extern int tu_case_idx;
 extern jmp_buf tu_case_jb;
 
-#define TEST_SUITE_NAME(suite_name) TEST_SUITE##suite_name
+#define TEST_SUITE_DECL(suite_name) extern void suite_name()
 
-#define TEST_SUITE_DECL(suite_name)                         \
-  extern tu_testsuite_fn_t *TEST_SUITE##suite_name()
+#define TEST_SUITE_REGISTER(suite_name)                      \
+  tu_suite_register((tu_testsuite_fn_t*)suite_name, ((const char *)#suite_name));
 
 #define TEST_SUITE(suite_name)                               \
 void                                                         \
@@ -266,7 +267,9 @@ TEST_SUITE_##suite_name(void);                               \
 #define REST_OR_0_AUX_N(first, ...) __VA_ARGS__
 
 #define XSTR(s) STR(s)
+#ifndef STR
 #define STR(s) #s
+#endif
 
 #if MYNEWT_VAL(TESTUTIL_SYSTEM_ASSERT)
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95c57d67/test/testutil/src/suite.c
----------------------------------------------------------------------
diff --git a/test/testutil/src/suite.c b/test/testutil/src/suite.c
index 6cca44a..4ccff7c 100644
--- a/test/testutil/src/suite.c
+++ b/test/testutil/src/suite.c
@@ -25,11 +25,17 @@
 const char *tu_suite_name = 0;
 int tu_suite_failed = 0;
 
+struct ts_testsuite_list g_ts_suites;
+
+/*
+ * tu_suite_register must be called for each test_suite that's to
+ * be run from a list rather than explicitly called.
+ * See mynewtsanity.
+ */
 int
-tu_suite_register(const char *name, tu_testsuite_fn_t* ts)
+tu_suite_register(tu_testsuite_fn_t* ts, const char *name)
 {
     struct ts_suite *tsp;
-    TEST_SUITE_DECL(name);
 
     tsp = (struct ts_suite *)os_malloc(sizeof(*tsp));
     if (!tsp) {
@@ -37,7 +43,7 @@ tu_suite_register(const char *name, tu_testsuite_fn_t* ts)
     }
     tsp->ts_name = name;
     tsp->ts_test = ts;
-    SLIST_INSERT_HEAD(ts_suites, tsp, ts_next);
+    SLIST_INSERT_HEAD(&g_ts_suites, tsp, ts_next);
     return 0;
 }
 


[18/50] incubator-mynewt-core git commit: this closes #149

Posted by vi...@apache.org.
this closes #149


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/5ca8eb3c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/5ca8eb3c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/5ca8eb3c

Branch: refs/heads/develop
Commit: 5ca8eb3ccd833f7a8bebd66f422e7bac93b06c9f
Parents: 9be6bc8
Author: Sterling Hughes <st...@apache.org>
Authored: Mon Dec 26 13:55:35 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Mon Dec 26 13:55:35 2016 -0800

----------------------------------------------------------------------

----------------------------------------------------------------------



[46/50] incubator-mynewt-core git commit: SensorAPI - os_eventq_ensure() has been deprecated

Posted by vi...@apache.org.
SensorAPI - os_eventq_ensure() has been deprecated


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/8d1bde98
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/8d1bde98
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/8d1bde98

Branch: refs/heads/develop
Commit: 8d1bde984ae2043fd8c2d03df955b3cd858d882c
Parents: d21ef0f
Author: Vipul Rahane <vi...@apache.org>
Authored: Thu Feb 23 13:51:25 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Thu Feb 23 13:51:25 2017 -0800

----------------------------------------------------------------------
 hw/sensor/src/sensor.c | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/8d1bde98/hw/sensor/src/sensor.c
----------------------------------------------------------------------
diff --git a/hw/sensor/src/sensor.c b/hw/sensor/src/sensor.c
index 102c0fe..89a19df 100644
--- a/hw/sensor/src/sensor.c
+++ b/hw/sensor/src/sensor.c
@@ -234,8 +234,6 @@ done:
 struct os_eventq *
 sensor_mgr_evq_get(void)
 {
-    os_eventq_ensure(&sensor_mgr.mgr_eventq, NULL);
-
     return (sensor_mgr.mgr_eventq);
 }
 


[33/50] incubator-mynewt-core git commit: Cleaning up, adding comments for public APIs

Posted by vi...@apache.org.
Cleaning up, adding comments for public APIs


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/1b0f3757
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/1b0f3757
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/1b0f3757

Branch: refs/heads/develop
Commit: 1b0f3757634caeb7e8a6615cefa6732c0dee9f2a
Parents: e5c20c8
Author: Vipul Rahane <vi...@apache.org>
Authored: Mon Feb 6 18:22:26 2017 -0800
Committer: Vipul Rahane <vi...@apache.org>
Committed: Mon Feb 6 18:42:00 2017 -0800

----------------------------------------------------------------------
 hw/drivers/sensors/tsl2561/src/tsl2561.c | 17 +++++++++--
 hw/sensor/src/sensor.c                   | 43 ++++++++++++++++++++-------
 2 files changed, 46 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1b0f3757/hw/drivers/sensors/tsl2561/src/tsl2561.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/tsl2561/src/tsl2561.c b/hw/drivers/sensors/tsl2561/src/tsl2561.c
index 1fbf905..b3c7d2d 100644
--- a/hw/drivers/sensors/tsl2561/src/tsl2561.c
+++ b/hw/drivers/sensors/tsl2561/src/tsl2561.c
@@ -347,7 +347,8 @@ err:
     return rc;
 }
 
-int tsl2561_setup_interrupt (uint8_t rate, uint16_t lower, uint16_t upper)
+int
+tsl2561_setup_interrupt (uint8_t rate, uint16_t lower, uint16_t upper)
 {
     int rc;
     uint8_t intval;
@@ -383,7 +384,8 @@ err:
     return rc;
 }
 
-int tsl2561_enable_interrupt (uint8_t enable)
+int
+tsl2561_enable_interrupt (uint8_t enable)
 {
     int rc;
     uint8_t persist_val;
@@ -412,7 +414,8 @@ err:
     return rc;
 }
 
-int tsl2561_clear_interrupt (void)
+int
+tsl2561_clear_interrupt (void)
 {
     int rc;
     uint8_t payload = { TSL2561_COMMAND_BIT | TSL2561_CLEAR_BIT };
@@ -438,6 +441,14 @@ err:
     return rc;
 }
 
+/**
+ * Expects to be called back through os_dev_create().
+ *
+ * @param The device object associated with this accellerometer
+ * @param Argument passed to OS device init, unused
+ *
+ * @return 0 on success, non-zero error on failure.
+ */
 int
 tsl2561_init(struct os_dev *dev, void *arg)
 {

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/1b0f3757/hw/sensor/src/sensor.c
----------------------------------------------------------------------
diff --git a/hw/sensor/src/sensor.c b/hw/sensor/src/sensor.c
index 897b7be..102c0fe 100644
--- a/hw/sensor/src/sensor.c
+++ b/hw/sensor/src/sensor.c
@@ -37,6 +37,14 @@ struct {
     TAILQ_HEAD(, sensor) mgr_sensor_list;
 } sensor_mgr;
 
+struct sensor_read_ctx {
+    sensor_data_func_t user_func;
+    void *user_arg;
+};
+
+/**
+ * Lock sensor manager to access the list of sensors
+ */
 int
 sensor_mgr_lock(void)
 {
@@ -49,6 +57,9 @@ sensor_mgr_lock(void)
     return (rc);
 }
 
+/**
+ * Unlock sensor manager once the list of sensors has been accessed
+ */
 void
 sensor_mgr_unlock(void)
 {
@@ -85,7 +96,7 @@ sensor_mgr_insert(struct sensor *sensor)
 }
 
 /**
- * Register the sensor with the global sensor list.   This makes the sensor
+ * Register the sensor with the global sensor list. This makes the sensor
  * searchable by other packages, who may want to look it up by type.
  *
  * @param The sensor to register
@@ -136,10 +147,10 @@ sensor_mgr_poll_one(struct sensor *sensor, os_time_t now)
      */
     sensor_read(sensor, SENSOR_TYPE_ALL, NULL, NULL, OS_TIMEOUT_NEVER);
 
-    /* Remove the sensor from the sensor list for insertion sort. */
+    /* Remove the sensor from the sensor list for insert. */
     sensor_mgr_remove(sensor);
 
-    /* Set next wakeup, and insertion sort the sensor back into the
+    /* Set next wakeup, and insert the sensor back into the
      * list.
      */
     os_time_ms_to_ticks(sensor->s_poll_rate, &sensor_ticks);
@@ -160,6 +171,8 @@ err:
 /**
  * Event that wakes up the sensor manager, this goes through the sensor
  * list and polls any active sensors.
+ *
+ * @param OS event
  */
 static void
 sensor_mgr_wakeup_event(struct os_event *ev)
@@ -214,6 +227,10 @@ done:
     os_callout_reset(&sensor_mgr.mgr_wakeup_callout, task_next_wakeup);
 }
 
+/**
+ * Get the current eventq, the system is misconfigured if there is still
+ * no parent eventq.
+ */
 struct os_eventq *
 sensor_mgr_evq_get(void)
 {
@@ -348,7 +365,7 @@ sensor_mgr_match_bydevname(struct sensor *sensor, void *arg)
 
 
 /**
- * Search teh sensor list, and find the next sensor that correspondes
+ * Search the sensor list and find the next sensor that corresponds
  * to a given device name.
  *
  * @param The device name to search for
@@ -437,7 +454,7 @@ err:
 
 
 /**
- * Register a sensor listener.  This allows a calling application to receive
+ * Register a sensor listener. This allows a calling application to receive
  * callbacks for data from a given sensor object.
  *
  * For more information on the type of callbacks available, see the documentation
@@ -468,6 +485,16 @@ err:
     return (rc);
 }
 
+/**
+ * Un-register a sensor listener. This allows a calling application to unset
+ * callbacks for a given sensor object.
+ *
+ * @param The sensor object
+ * @param The listener to remove from the sensor listener list
+ *
+ * @return 0 on success, non-zero error code on failure.
+ */
+
 int
 sensor_unregister_listener(struct sensor *sensor,
         struct sensor_listener *listener)
@@ -490,12 +517,6 @@ err:
     return (rc);
 }
 
-
-struct sensor_read_ctx {
-    sensor_data_func_t user_func;
-    void *user_arg;
-};
-
 static int
 sensor_read_data_func(struct sensor *sensor, void *arg, void *data)
 {


[11/50] incubator-mynewt-core git commit: update accel to use floating point numbers, change types of generic sensor interfaces

Posted by vi...@apache.org.
update accel to use floating point numbers, change types of generic sensor interfaces


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/f6b1db0f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/f6b1db0f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/f6b1db0f

Branch: refs/heads/develop
Commit: f6b1db0fcef7036efb761a2b6c59347aa8944bd8
Parents: 9482961
Author: Sterling Hughes <st...@apache.org>
Authored: Sun Dec 18 14:03:52 2016 -0800
Committer: Sterling Hughes <st...@apache.org>
Committed: Sun Dec 18 14:03:52 2016 -0800

----------------------------------------------------------------------
 hw/drivers/sensors/sim/src/generic_accel.c |  8 ++++----
 hw/sensor/include/sensor/accel.h           |  8 ++++----
 hw/sensor/include/sensor/sensor.h          | 11 ++++-------
 hw/sensor/src/sensor_shell.c               |  6 +++---
 4 files changed, 15 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f6b1db0f/hw/drivers/sensors/sim/src/generic_accel.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/sim/src/generic_accel.c b/hw/drivers/sensors/sim/src/generic_accel.c
index cbed0d0..df7316a 100644
--- a/hw/drivers/sensors/sim/src/generic_accel.c
+++ b/hw/drivers/sensors/sim/src/generic_accel.c
@@ -134,15 +134,15 @@ sim_accel_sensor_read(struct sensor *sensor, sensor_type_t type,
      * if number of axises is configured, up to 3-axises of data can be
      * returned.
      */
-    sad.sad_x = 0;
+    sad.sad_x = 0.0;
     sad.sad_y = SENSOR_ACCEL_DATA_UNUSED;
     sad.sad_z = SENSOR_ACCEL_DATA_UNUSED;
 
     if (sa->sa_cfg.sac_nr_axises > 1) {
-        sad.sad_y = 0;
+        sad.sad_y = 0.0;
     }
     if (sa->sa_cfg.sac_nr_axises > 2) {
-        sad.sad_z = 0;
+        sad.sad_z = 0.0;
     }
 
     /* Call data function for each of the generated readings. */
@@ -169,7 +169,7 @@ sim_accel_sensor_get_config(struct sensor *sensor, sensor_type_t type,
         goto err;
     }
 
-    cfg->sc_valtype = SENSOR_VALUE_TYPE_MS2_TRIPLET;
+    cfg->sc_valtype = SENSOR_VALUE_TYPE_FLOAT_TRIPLET;
 
     return (0);
 err:

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f6b1db0f/hw/sensor/include/sensor/accel.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/accel.h b/hw/sensor/include/sensor/accel.h
index 431e05c..17e3561 100644
--- a/hw/sensor/include/sensor/accel.h
+++ b/hw/sensor/include/sensor/accel.h
@@ -32,15 +32,15 @@ extern "C" {
  * All values are in MS^2
  */
 struct sensor_accel_data {
-    int32_t sad_x;
-    int32_t sad_y;
-    int32_t sad_z;
+    float sad_x;
+    float sad_y;
+    float sad_z;
 } __attribute__((packed));
 
 /**
  * Accelerometer data is unused for this field.
  */
-#define SENSOR_ACCEL_DATA_UNUSED (0xFFFFFFFF)
+#define SENSOR_ACCEL_DATA_UNUSED (-1)
 
 #ifdef __cplusplus
 }

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f6b1db0f/hw/sensor/include/sensor/sensor.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/sensor.h b/hw/sensor/include/sensor/sensor.h
index 2ec36f6..2f99ea2 100644
--- a/hw/sensor/include/sensor/sensor.h
+++ b/hw/sensor/include/sensor/sensor.h
@@ -97,16 +97,13 @@ typedef enum {
  */
 #define SENSOR_VALUE_TYPE_FLOAT  (2)
 /**
- * Meters per second squared.
- *
- * 32-bit signed integer, with 0xFFFFFFFF reserved for unused.
+ * 32-bit integer triplet.
  */
-#define SENSOR_VALUE_TYPE_MS2    (3)
+#define SENSOR_VALUE_TYPE_INT32_TRIPLET (3)
 /**
- * Triplet of meters per second squared.
+ * 32-bit floating point number triplet.
  */
-#define SENSOR_VALUE_TYPE_MS2_TRIPLET (4)
-
+#define SENSOR_VALUE_TYPE_FLOAT_TRIPLET (4)
 
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/f6b1db0f/hw/sensor/src/sensor_shell.c
----------------------------------------------------------------------
diff --git a/hw/sensor/src/sensor_shell.c b/hw/sensor/src/sensor_shell.c
index dbde99f..e975da6 100644
--- a/hw/sensor/src/sensor_shell.c
+++ b/hw/sensor/src/sensor_shell.c
@@ -93,13 +93,13 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
     if (ctx->type == SENSOR_TYPE_ACCELEROMETER) {
         sad = (struct sensor_accel_data *) data;
         if (sad->sad_x != SENSOR_ACCEL_DATA_UNUSED) {
-            console_printf("x = %d, ", sad->sad_x);
+            console_printf("x = %f, ", sad->sad_x);
         }
         if (sad->sad_y != SENSOR_ACCEL_DATA_UNUSED) {
-            console_printf("y = %d, ", sad->sad_y);
+            console_printf("y = %f, ", sad->sad_y);
         }
         if (sad->sad_z != SENSOR_ACCEL_DATA_UNUSED) {
-            console_printf("z = %d", sad->sad_z);
+            console_printf("z = %f", sad->sad_z);
         }
         console_printf("\n");
     }


[24/50] incubator-mynewt-core git commit: Fixed accel/mag driver registration

Posted by vi...@apache.org.
Fixed accel/mag driver registration


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/d0ded5a3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/d0ded5a3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/d0ded5a3

Branch: refs/heads/develop
Commit: d0ded5a333aa7c68881d3b50396c2e994efc7adb
Parents: b6bd73b
Author: microbuilder <co...@microbuilder.eu>
Authored: Thu Jan 5 16:33:28 2017 +0100
Committer: microbuilder <co...@microbuilder.eu>
Committed: Thu Jan 5 16:33:28 2017 +0100

----------------------------------------------------------------------
 hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/d0ded5a3/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
index b3821e1..1d5af6c 100644
--- a/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
+++ b/hw/drivers/sensors/lsm303dlhc/src/lsm303dlhc.c
@@ -273,15 +273,9 @@ lsm303dlhc_init(struct os_dev *dev, void *arg)
         goto err;
     }
 
-    /* Add the accelerometer */
-    rc = sensor_set_driver(sensor, SENSOR_TYPE_ACCELEROMETER,
-            (struct sensor_driver *) &g_lsm303dlhc_sensor_driver);
-    if (rc != 0) {
-        goto err;
-    }
-
-    /* Add the magnetometer */
-    rc = sensor_set_driver(sensor, SENSOR_TYPE_MAGNETIC_FIELD,
+    /* Add the accelerometer/magnetometer driver */
+    rc = sensor_set_driver(sensor, SENSOR_TYPE_ACCELEROMETER |
+            SENSOR_TYPE_MAGNETIC_FIELD,
             (struct sensor_driver *) &g_lsm303dlhc_sensor_driver);
     if (rc != 0) {
         goto err;


[19/50] incubator-mynewt-core git commit: Added magnetometer support

Posted by vi...@apache.org.
Added magnetometer support


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/616f7525
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/616f7525
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/616f7525

Branch: refs/heads/develop
Commit: 616f7525c853fd30b98fac7bc46b4ff89406bb69
Parents: 5ca8eb3
Author: microbuilder <co...@microbuilder.eu>
Authored: Thu Dec 29 02:23:47 2016 +0100
Committer: microbuilder <co...@microbuilder.eu>
Committed: Thu Dec 29 02:23:47 2016 +0100

----------------------------------------------------------------------
 hw/sensor/include/sensor/mag.h | 49 +++++++++++++++++++++++++++++++++++++
 hw/sensor/src/sensor_shell.c   | 16 ++++++++++++
 2 files changed, 65 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/616f7525/hw/sensor/include/sensor/mag.h
----------------------------------------------------------------------
diff --git a/hw/sensor/include/sensor/mag.h b/hw/sensor/include/sensor/mag.h
new file mode 100644
index 0000000..8387568
--- /dev/null
+++ b/hw/sensor/include/sensor/mag.h
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef __SENSOR_MAG_H__
+#define __SENSOR_MAG_H__
+
+#include "os/os.h"
+#include "os/os_dev.h"
+#include "sensor/sensor.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Data representing a singular read from a magnetometer.
+ * All values are in uTesla
+ */
+struct sensor_mag_data {
+    float smd_x;
+    float smd_y;
+    float smd_z;
+} __attribute__((packed));
+
+/**
+ * Magnetometer data is unused for this field.
+ */
+#define SENSOR_MAG_DATA_UNUSED (-1)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SENSOR_MAG_H__ */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/616f7525/hw/sensor/src/sensor_shell.c
----------------------------------------------------------------------
diff --git a/hw/sensor/src/sensor_shell.c b/hw/sensor/src/sensor_shell.c
index dfd926d..1cf9613 100644
--- a/hw/sensor/src/sensor_shell.c
+++ b/hw/sensor/src/sensor_shell.c
@@ -31,6 +31,7 @@
 
 #include "sensor/sensor.h"
 #include "sensor/accel.h"
+#include "sensor/mag.h"
 #include "console/console.h"
 #include "shell/shell.h"
 
@@ -85,6 +86,7 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
 {
     struct sensor_shell_read_ctx *ctx;
     struct sensor_accel_data *sad;
+    struct sensor_mag_data *smd;
 
     ctx = (struct sensor_shell_read_ctx *) arg;
 
@@ -104,6 +106,20 @@ sensor_shell_read_listener(struct sensor *sensor, void *arg, void *data)
         console_printf("\n");
     }
 
+    if (ctx->type == SENSOR_TYPE_MAGNETIC_FIELD) {
+        smd = (struct sensor_mag_data *) data;
+        if (smd->smd_x != SENSOR_MAG_DATA_UNUSED) {
+            console_printf("x = %i, ", (int)smd->smd_x);
+        }
+        if (smd->smd_y != SENSOR_MAG_DATA_UNUSED) {
+            console_printf("y = %i, ", (int)smd->smd_y);
+        }
+        if (smd->smd_z != SENSOR_MAG_DATA_UNUSED) {
+            console_printf("z = %i", (int)smd->smd_z);
+        }
+        console_printf("\n");
+    }
+
     return (0);
 }
 


[21/50] incubator-mynewt-core git commit: Added mag simulator

Posted by vi...@apache.org.
Added mag simulator


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/95a34bd3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/95a34bd3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/95a34bd3

Branch: refs/heads/develop
Commit: 95a34bd3ad89cfeba6d3417ec8858405937445c7
Parents: b04fe06
Author: microbuilder <co...@microbuilder.eu>
Authored: Thu Dec 29 15:01:28 2016 +0100
Committer: microbuilder <co...@microbuilder.eu>
Committed: Thu Dec 29 15:01:28 2016 +0100

----------------------------------------------------------------------
 hw/drivers/sensors/sim/include/sim/sim_mag.h |  50 ++++++
 hw/drivers/sensors/sim/src/generic_mag.c     | 177 ++++++++++++++++++++++
 2 files changed, 227 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95a34bd3/hw/drivers/sensors/sim/include/sim/sim_mag.h
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/sim/include/sim/sim_mag.h b/hw/drivers/sensors/sim/include/sim/sim_mag.h
new file mode 100644
index 0000000..c28df97
--- /dev/null
+++ b/hw/drivers/sensors/sim/include/sim/sim_mag.h
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef __SIM_MAG_H__
+#define __SIM_MAG_H__
+
+#include "os/os.h"
+#include "os/os_dev.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct sim_mag_cfg {
+    uint8_t smc_nr_samples;
+    uint8_t smc_nr_axises;
+    uint16_t smc_sample_itvl;
+};
+
+struct sim_mag {
+    struct os_dev sm_dev;
+    struct sensor sm_sensor;
+    struct sim_mag_cfg sm_cfg;
+    os_time_t sm_last_read_time;
+};
+
+int sim_mag_init(struct os_dev *, void *);
+int sim_mag_config(struct sim_mag *, struct sim_mag_cfg *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SIM_MAG_H__ */

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/95a34bd3/hw/drivers/sensors/sim/src/generic_mag.c
----------------------------------------------------------------------
diff --git a/hw/drivers/sensors/sim/src/generic_mag.c b/hw/drivers/sensors/sim/src/generic_mag.c
new file mode 100644
index 0000000..e21f10e
--- /dev/null
+++ b/hw/drivers/sensors/sim/src/generic_mag.c
@@ -0,0 +1,177 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * resarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "defs/error.h"
+
+#include "os/os.h"
+#include "sysinit/sysinit.h"
+
+#include "sensor/sensor.h"
+#include "sensor/mag.h"
+
+#include "sim/sim_mag.h"
+
+/* Exports for the sensor interface.
+ */
+static void *sim_mag_sensor_get_interface(struct sensor *, sensor_type_t);
+static int sim_mag_sensor_read(struct sensor *, sensor_type_t,
+        sensor_data_func_t, void *, uint32_t);
+static int sim_mag_sensor_get_config(struct sensor *, sensor_type_t,
+        struct sensor_cfg *);
+
+static const struct sensor_driver g_sim_mag_sensor_driver = {
+    sim_mag_sensor_get_interface,
+    sim_mag_sensor_read,
+    sim_mag_sensor_get_config
+};
+
+/**
+ * Expects to be called back through os_dev_create().
+ *
+ * @param The device object associated with this magnetometer
+ * @param Argument passed to OS device init, unused
+ *
+ * @return 0 on success, non-zero error on failure.
+ */
+int
+sim_mag_init(struct os_dev *dev, void *arg)
+{
+    struct sim_mag *sm;
+    struct sensor *sensor;
+    int rc;
+
+    sm = (struct sim_mag *) dev;
+
+    sensor = &sm->sm_sensor;
+
+    rc = sensor_init(sensor, dev);
+    if (rc != 0) {
+        goto err;
+    }
+
+    rc = sensor_set_driver(sensor, SENSOR_TYPE_MAGNETIC_FIELD,
+            (struct sensor_driver *) &g_sim_mag_sensor_driver);
+    if (rc != 0) {
+        goto err;
+    }
+
+    rc = sensor_mgr_register(sensor);
+    if (rc != 0) {
+        goto err;
+    }
+
+    return (0);
+err:
+    return (rc);
+}
+
+int
+sim_mag_config(struct sim_mag *sm, struct sim_mag_cfg *cfg)
+{
+    /* Overwrite the configuration associated with this generic magnetometer. */
+    memcpy(&sm->sm_cfg, cfg, sizeof(*cfg));
+
+    return (0);
+}
+
+static void *
+sim_mag_sensor_get_interface(struct sensor *sensor, sensor_type_t type)
+{
+    return (NULL);
+}
+
+
+static int
+sim_mag_sensor_read(struct sensor *sensor, sensor_type_t type,
+        sensor_data_func_t data_func, void *data_arg, uint32_t timeout)
+{
+    struct sim_mag *sm;
+    struct sensor_mag_data smd;
+    os_time_t now;
+    uint32_t num_samples;
+    int i;
+    int rc;
+
+    /* If the read isn't looking for accel data, then don't do anything. */
+    if (!(type & SENSOR_TYPE_MAGNETIC_FIELD)) {
+        rc = SYS_EINVAL;
+        goto err;
+    }
+
+    sm = (struct sim_mag *) SENSOR_GET_DEVICE(sensor);
+
+    /* When a sensor is "read", we get the last 'n' samples from the device
+     * and pass them to the sensor data function.  Based on the sample
+     * interval provided to sim_accel_config() and the last time this function
+     * was called, 'n' samples are generated.
+     */
+    now = os_time_get();
+
+    num_samples = (now - sm->sm_last_read_time) / sm->sm_cfg.smc_sample_itvl;
+    num_samples = min(num_samples, sm->sm_cfg.smc_nr_samples);
+
+    /* By default only readings are provided for 1-axis (x), however,
+     * if number of axises is configured, up to 3-axises of data can be
+     * returned.
+     */
+    smd.smd_x = 0.0;
+    smd.smd_y = SENSOR_MAG_DATA_UNUSED;
+    smd.smd_z = SENSOR_MAG_DATA_UNUSED;
+
+    if (sm->sm_cfg.smc_nr_axises > 1) {
+        smd.smd_y = 0.0;
+    }
+    if (sm->sm_cfg.smc_nr_axises > 2) {
+        smd.smd_z = 0.0;
+    }
+
+    /* Call data function for each of the generated readings. */
+    for (i = 0; i < num_samples; i++) {
+        rc = data_func(sensor, data_arg, &smd);
+        if (rc != 0) {
+            goto err;
+        }
+    }
+
+    return (0);
+err:
+    return (rc);
+}
+
+static int
+sim_mag_sensor_get_config(struct sensor *sensor, sensor_type_t type,
+        struct sensor_cfg *cfg)
+{
+    int rc;
+
+    if (type != SENSOR_TYPE_MAGNETIC_FIELD) {
+        rc = SYS_EINVAL;
+        goto err;
+    }
+
+    cfg->sc_valtype = SENSOR_VALUE_TYPE_FLOAT_TRIPLET;
+
+    return (0);
+err:
+    return (rc);
+}