[mynewt-core] 01/01: Merge pull request #1510 from mkiiskila/ls_dev

2018-11-14 Thread marko
This is an automated email from the ASF dual-hosted git repository.

marko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit 606bba5372f049fd96fe64cf98306b5ec950d16f
Merge: 91b3b74 958bc45
Author: mkiiskila 
AuthorDate: Wed Nov 14 13:12:06 2018 +0200

Merge pull request #1510 from mkiiskila/ls_dev

shell; add ls_dev command to list OS devices.

 kernel/os/include/os/os_dev.h |  8 
 kernel/os/src/os_dev.c| 12 
 sys/shell/src/shell_os.c  | 27 +++
 3 files changed, 47 insertions(+)




[GitHub] mkiiskila closed pull request #1510: shell; add ls_dev command to list OS devices.

2018-11-14 Thread GitBox
mkiiskila closed pull request #1510: shell; add ls_dev command to list OS 
devices.
URL: https://github.com/apache/mynewt-core/pull/1510
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/kernel/os/include/os/os_dev.h b/kernel/os/include/os/os_dev.h
index c05f6f251f..1dc8f27cea 100644
--- a/kernel/os/include/os/os_dev.h
+++ b/kernel/os/include/os/os_dev.h
@@ -253,6 +253,14 @@ int os_dev_close(struct os_dev *dev);
  */
 void os_dev_reset(void);
 
+/**
+ * Walk through all devices, calling callback for every device.
+ *
+ * @param walk_func Function to call
+ * @aparm arg   Argument to pass to walk_func
+ */
+void os_dev_walk(int (*walk_func)(struct os_dev *, void *), void *arg);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/kernel/os/src/os_dev.c b/kernel/os/src/os_dev.c
index 9c10ed160f..1c8db39ad2 100644
--- a/kernel/os/src/os_dev.c
+++ b/kernel/os/src/os_dev.c
@@ -320,3 +320,15 @@ os_dev_reset(void)
 STAILQ_INIT(_os_dev_list);
 }
 
+void
+os_dev_walk(int (*walk_func)(struct os_dev *, void *), void *arg)
+{
+struct os_dev *dev;
+
+STAILQ_FOREACH(dev, _os_dev_list, od_next) {
+if (walk_func(dev, arg)) {
+break;
+}
+}
+}
+
diff --git a/sys/shell/src/shell_os.c b/sys/shell/src/shell_os.c
index 08a5fde23e..3c325f8e00 100644
--- a/sys/shell/src/shell_os.c
+++ b/sys/shell/src/shell_os.c
@@ -174,6 +174,22 @@ shell_os_reset_cmd(int argc, char **argv)
 return 0;
 }
 
+static int
+shell_os_ls_dev(struct os_dev *dev, void *arg)
+{
+console_printf("%4d %3x %s\n",
+   dev->od_open_ref, dev->od_flags, dev->od_name);
+return 0;
+}
+
+int
+shell_os_ls_dev_cmd(int argc, char **argv)
+{
+console_printf("%4s %3s %s\n", "ref", "flg", "name");
+os_dev_walk(shell_os_ls_dev, NULL);
+return 0;
+}
+
 #if MYNEWT_VAL(SHELL_CMD_HELP)
 static const struct shell_param tasks_params[] = {
 {"", "task name"},
@@ -220,6 +236,10 @@ static const struct shell_cmd_help reset_help = {
 .usage = NULL,
 .params = reset_params,
 };
+
+static const struct shell_cmd_help ls_dev_help = {
+.summary = "list OS devices"
+};
 #endif
 
 static const struct shell_cmd os_commands[] = {
@@ -249,6 +269,13 @@ static const struct shell_cmd os_commands[] = {
 .sc_cmd_func = shell_os_reset_cmd,
 #if MYNEWT_VAL(SHELL_CMD_HELP)
 .help = _help,
+#endif
+},
+{
+.sc_cmd = "lsdev",
+.sc_cmd_func = shell_os_ls_dev_cmd,
+#if MYNEWT_VAL(SHELL_CMD_HELP)
+.help = _dev_help,
 #endif
 },
 { NULL, NULL, NULL },


 


This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services


[mynewt-core] branch master updated (91b3b74 -> 606bba5)

2018-11-14 Thread marko
This is an automated email from the ASF dual-hosted git repository.

marko pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git.


from 91b3b74  Merge pull request #1503 from wes3/nrf_hfxo_request
 add fce872a  shell; add ls_dev command to list OS devices.
 add 2d04af9  os; add void * argument and breakout option for device walk.
 add 958bc45  shell; change "ls_dev" command to "lsdev".
 new 606bba5  Merge pull request #1510 from mkiiskila/ls_dev

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 kernel/os/include/os/os_dev.h |  8 
 kernel/os/src/os_dev.c| 12 
 sys/shell/src/shell_os.c  | 27 +++
 3 files changed, 47 insertions(+)



[GitHub] vrahane commented on issue #1394: hw/drivers/lis2dh12: Add sensor notifications support to LIS2DH12 driver

2018-11-14 Thread GitBox
vrahane commented on issue #1394: hw/drivers/lis2dh12: Add sensor notifications 
support to LIS2DH12 driver
URL: https://github.com/apache/mynewt-core/pull/1394#issuecomment-438877111
 
 
   This was merged as part of https://github.com/apache/mynewt-core/pull/1520


This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services


[GitHub] vrahane closed pull request #1394: hw/drivers/lis2dh12: Add sensor notifications support to LIS2DH12 driver

2018-11-14 Thread GitBox
vrahane closed pull request #1394: hw/drivers/lis2dh12: Add sensor 
notifications support to LIS2DH12 driver
URL: https://github.com/apache/mynewt-core/pull/1394
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/hw/drivers/sensors/lis2dh12/include/lis2dh12/lis2dh12.h 
b/hw/drivers/sensors/lis2dh12/include/lis2dh12/lis2dh12.h
index 82a1e1dd30..9340869da3 100644
--- a/hw/drivers/sensors/lis2dh12/include/lis2dh12/lis2dh12.h
+++ b/hw/drivers/sensors/lis2dh12/include/lis2dh12/lis2dh12.h
@@ -77,18 +77,186 @@ extern "C" {
 #define LIS2DH12_FS_8G  0x20
 #define LIS2DH12_FS_16G 0x30
 
+#define LIS2DH12_CLICK_SRC_IA   (1 << 6)
+#define LIS2DH12_CLICK_SRC_DCLICK   (1 << 5)
+#define LIS2DH12_CLICK_SRC_SCLICK   (1 << 4)
+#define LIS2DH12_CLICK_SRC_SIGN (1 << 3)
+#define LIS2DH12_CLICK_SRC_Z(1 << 2)
+#define LIS2DH12_CLICK_SRC_Y(1 << 1)
+#define LIS2DH12_CLICK_SRC_X(1 << 0)
+
+#define LIS2DH12_CTRL_REG6_I2_CLICK (1 << 7)
+#define LIS2DH12_CTRL_REG6_I2_IA1   (1 << 6)
+#define LIS2DH12_CTRL_REG6_I2_IA2   (1 << 5)
+#define LIS2DH12_CTRL_REG6_I2_BOOT  (1 << 4)
+#define LIS2DH12_CTRL_REG6_I2_ACT   (1 << 3)
+#define LIS2DH12_CTRL_REG6_INT_POLARITY (1 << 1)
+
+#define LIS2DH12_INT1_IA(1 << 6)
+#define LIS2DH12_INT1_ZH(1 << 5)
+#define LIS2DH12_INT1_ZL(1 << 4)
+#define LIS2DH12_INT1_YH(1 << 3)
+#define LIS2DH12_INT1_YL(1 << 2)
+#define LIS2DH12_INT1_XH(1 << 1)
+#define LIS2DH12_INT1_XL(1 << 0)
+
+#define LIS2DH12_INT2_IA(1 << 6)
+#define LIS2DH12_INT2_ZH(1 << 5)
+#define LIS2DH12_INT2_ZL(1 << 4)
+#define LIS2DH12_INT2_YH(1 << 3)
+#define LIS2DH12_INT2_YL(1 << 2)
+#define LIS2DH12_INT2_XH(1 << 1)
+#define LIS2DH12_INT2_XL(1 << 0)
+
+#define LIS2DH12_NOTIF_SRC_INT1_IA  (LIS2DH12_INT1_IA)
+#define LIS2DH12_NOTIF_SRC_INT1_ZH  (LIS2DH12_INT1_ZH)
+#define LIS2DH12_NOTIF_SRC_INT1_ZL  (LIS2DH12_INT1_ZL)
+#define LIS2DH12_NOTIF_SRC_INT1_YH  (LIS2DH12_INT1_YH)
+#define LIS2DH12_NOTIF_SRC_INT1_YL  (LIS2DH12_INT1_YL)
+#define LIS2DH12_NOTIF_SRC_INT1_XH  (LIS2DH12_INT1_XH)
+#define LIS2DH12_NOTIF_SRC_INT1_XL  (LIS2DH12_INT1_XL)
+#define LIS2DH12_NOTIF_SRC_INT2_IA  (LIS2DH12_INT2_IA << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_ZH  (LIS2DH12_INT2_ZH << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_ZL  (LIS2DH12_INT2_ZL << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_YH  (LIS2DH12_INT2_YH << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_YL  (LIS2DH12_INT2_YL << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_XH  (LIS2DH12_INT2_XH << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_XL  (LIS2DH12_INT2_XL << 8)
+
+#define LIS2DH12_CTRL_REG3_I1_CLICK (1 << 7)
+#define LIS2DH12_CTRL_REG3_I1_IA1   (1 << 6)
+#define LIS2DH12_CTRL_REG3_I1_IA2   (1 << 5)
+#define LIS2DH12_CTRL_REG3_I1_ZYXDA (1 << 4)
+#define LIS2DH12_CTRL_REG3_I1_WTM   (1 << 2)
+#define LIS2DH12_CTRL_REG3_I1_OVERRUN   (1 << 1)
+
+enum lis2dh12_read_mode {
+LIS2DH12_READ_M_POLL = 0,
+LIS2DH12_READ_M_STREAM = 1,
+};
+
+struct lis2dh12_notif_cfg {
+sensor_event_type_t event;
+uint8_t int_num;
+uint16_t notif_src;
+uint8_t int_cfg;
+};
+
+struct lis2dh12_tap_settings {
+uint8_t en_xs  : 1; // Interrupt on X single tap
+uint8_t en_ys  : 1; // Interrupt on Y single tap
+uint8_t en_zs  : 1; // Interrupt on Z single tap
+uint8_t en_xd  : 1; // Interrupt on X double tap
+uint8_t en_yd  : 1; // Interrupt on Y double tap
+uint8_t en_zd  : 1; // Interrupt on Z double tap
+uint8_t hpf: 1; // High pass filter enable
+
+/* ths data is 7 bits, fs = +-2g */
+int8_t click_ths;
+/* shock is maximum time data can be over threshold to register as tap
+   LSB = 1/ODR */
+int8_t time_limit;
+
+/* latency is time between taps in double tap, LSB = 1/ODR */
+uint8_t time_latency;
+/* quiet is time after tap data is just below threshold
+   LSB = 1/ODR */
+uint8_t time_window;
+};
+
+struct lis2dh12_int_cfg {
+   uint8_t cfg;
+   uint8_t ths;
+   uint8_t dur;
+};
+
+/* Read mode configuration */
+struct lis2dh12_read_mode_cfg {
+enum lis2dh12_read_mode mode;
+uint8_t int_num:1;
+uint8_t int_cfg;
+};
+
 struct lis2dh12_cfg {
 uint8_t lc_rate;
 uint8_t lc_fs;
+
+uint8_t reference;
+/* Tap config */

[GitHub] vrahane closed pull request #1520: Lis2dh12 driver

2018-11-14 Thread GitBox
vrahane closed pull request #1520: Lis2dh12 driver
URL: https://github.com/apache/mynewt-core/pull/1520
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/hw/drivers/sensors/lis2dh12/include/lis2dh12/lis2dh12.h 
b/hw/drivers/sensors/lis2dh12/include/lis2dh12/lis2dh12.h
index 7e13fcb9fd..ab4b807148 100644
--- a/hw/drivers/sensors/lis2dh12/include/lis2dh12/lis2dh12.h
+++ b/hw/drivers/sensors/lis2dh12/include/lis2dh12/lis2dh12.h
@@ -77,18 +77,191 @@ extern "C" {
 #define LIS2DH12_FS_8G  0x20
 #define LIS2DH12_FS_16G 0x30
 
+#define LIS2DH12_CLICK_SRC_IA   (1 << 6)
+#define LIS2DH12_CLICK_SRC_DCLICK   (1 << 5)
+#define LIS2DH12_CLICK_SRC_SCLICK   (1 << 4)
+#define LIS2DH12_CLICK_SRC_SIGN (1 << 3)
+#define LIS2DH12_CLICK_SRC_Z(1 << 2)
+#define LIS2DH12_CLICK_SRC_Y(1 << 1)
+#define LIS2DH12_CLICK_SRC_X(1 << 0)
+
+#define LIS2DH12_CTRL_REG6_I2_CLICK (1 << 7)
+#define LIS2DH12_CTRL_REG6_I2_IA1   (1 << 6)
+#define LIS2DH12_CTRL_REG6_I2_IA2   (1 << 5)
+#define LIS2DH12_CTRL_REG6_I2_BOOT  (1 << 4)
+#define LIS2DH12_CTRL_REG6_I2_ACT   (1 << 3)
+#define LIS2DH12_CTRL_REG6_INT_POLARITY (1 << 1)
+
+/* int1_src */
+#define LIS2DH12_INT1_IA(1 << 6)
+#define LIS2DH12_INT1_ZH(1 << 5)
+#define LIS2DH12_INT1_ZL(1 << 4)
+#define LIS2DH12_INT1_YH(1 << 3)
+#define LIS2DH12_INT1_YL(1 << 2)
+#define LIS2DH12_INT1_XH(1 << 1)
+#define LIS2DH12_INT1_XL(1 << 0)
+
+/* int2_src */
+#define LIS2DH12_INT2_IA(1 << 6)
+#define LIS2DH12_INT2_ZH(1 << 5)
+#define LIS2DH12_INT2_ZL(1 << 4)
+#define LIS2DH12_INT2_YH(1 << 3)
+#define LIS2DH12_INT2_YL(1 << 2)
+#define LIS2DH12_INT2_XH(1 << 1)
+#define LIS2DH12_INT2_XL(1 << 0)
+
+/* int_src */
+#define LIS2DH12_NOTIF_SRC_INT1_IA  (LIS2DH12_INT1_IA)
+#define LIS2DH12_NOTIF_SRC_INT1_ZH  (LIS2DH12_INT1_ZH)
+#define LIS2DH12_NOTIF_SRC_INT1_ZL  (LIS2DH12_INT1_ZL)
+#define LIS2DH12_NOTIF_SRC_INT1_YH  (LIS2DH12_INT1_YH)
+#define LIS2DH12_NOTIF_SRC_INT1_YL  (LIS2DH12_INT1_YL)
+#define LIS2DH12_NOTIF_SRC_INT1_XH  (LIS2DH12_INT1_XH)
+#define LIS2DH12_NOTIF_SRC_INT1_XL  (LIS2DH12_INT1_XL)
+#define LIS2DH12_NOTIF_SRC_INT2_IA  (LIS2DH12_INT2_IA << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_ZH  (LIS2DH12_INT2_ZH << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_ZL  (LIS2DH12_INT2_ZL << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_YH  (LIS2DH12_INT2_YH << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_YL  (LIS2DH12_INT2_YL << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_XH  (LIS2DH12_INT2_XH << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_XL  (LIS2DH12_INT2_XL << 8)
+
+/* int1 pin config - generate either data ready or in */
+#define LIS2DH12_CTRL_REG3_I1_CLICK (1 << 7)
+#define LIS2DH12_CTRL_REG3_I1_IA1   (1 << 6)
+#define LIS2DH12_CTRL_REG3_I1_IA2   (1 << 5)
+#define LIS2DH12_CTRL_REG3_I1_ZYXDA (1 << 4)
+#define LIS2DH12_CTRL_REG3_I1_WTM   (1 << 2)
+#define LIS2DH12_CTRL_REG3_I1_OVERRUN   (1 << 1)
+
+enum lis2dh12_read_mode {
+LIS2DH12_READ_M_POLL = 0,
+LIS2DH12_READ_M_STREAM = 1,
+};
+
+struct lis2dh12_notif_cfg {
+sensor_event_type_t event;
+uint8_t int_num;
+uint16_t notif_src;
+uint8_t int_cfg;
+};
+
+struct lis2dh12_tap_settings {
+uint8_t en_xs  : 1; // Interrupt on X single tap
+uint8_t en_ys  : 1; // Interrupt on Y single tap
+uint8_t en_zs  : 1; // Interrupt on Z single tap
+uint8_t en_xd  : 1; // Interrupt on X double tap
+uint8_t en_yd  : 1; // Interrupt on Y double tap
+uint8_t en_zd  : 1; // Interrupt on Z double tap
+uint8_t hpf: 1; // High pass filter enable
+
+/* ths data is 7 bits, fs = +-2g */
+int8_t click_ths;
+/* shock is maximum time data can be over threshold to register as tap
+   LSB = 1/ODR */
+int8_t time_limit;
+
+/* latency is time between taps in double tap, LSB = 1/ODR */
+uint8_t time_latency;
+/* quiet is time after tap data is just below threshold
+   LSB = 1/ODR */
+uint8_t time_window;
+};
+
+struct lis2dh12_int_cfg {
+uint8_t cfg;
+uint8_t ths;
+uint8_t dur;
+};
+
+/* Read mode configuration */
+struct lis2dh12_read_mode_cfg {
+enum lis2dh12_read_mode mode;
+uint8_t int_num:1;
+uint8_t int_cfg;
+};
+
 struct lis2dh12_cfg {
 uint8_t lc_rate;
 uint8_t lc_fs;
+
+

[mynewt-core] branch master updated: Lis2dh12 driver (#1520)

2018-11-14 Thread vipulrahane
This is an automated email from the ASF dual-hosted git repository.

vipulrahane pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git


The following commit(s) were added to refs/heads/master by this push:
 new 151bb20  Lis2dh12 driver (#1520)
151bb20 is described below

commit 151bb202f317409319c1ca10ca11ca32d03f866a
Author: JustineKH <35044800+justin...@users.noreply.github.com>
AuthorDate: Wed Nov 14 16:59:18 2018 -0800

Lis2dh12 driver (#1520)

- Add notifications support and various fixes
---
 .../sensors/lis2dh12/include/lis2dh12/lis2dh12.h   |  316 -
 hw/drivers/sensors/lis2dh12/src/lis2dh12.c | 1472 ++--
 hw/drivers/sensors/lis2dh12/src/lis2dh12_priv.h|   37 +-
 hw/drivers/sensors/lis2dh12/src/lis2dh12_shell.c   |  387 +
 hw/drivers/sensors/lis2dh12/syscfg.yml |   37 +-
 5 files changed, 2092 insertions(+), 157 deletions(-)

diff --git a/hw/drivers/sensors/lis2dh12/include/lis2dh12/lis2dh12.h 
b/hw/drivers/sensors/lis2dh12/include/lis2dh12/lis2dh12.h
index 7e13fcb..ab4b807 100644
--- a/hw/drivers/sensors/lis2dh12/include/lis2dh12/lis2dh12.h
+++ b/hw/drivers/sensors/lis2dh12/include/lis2dh12/lis2dh12.h
@@ -77,18 +77,191 @@ extern "C" {
 #define LIS2DH12_FS_8G  0x20
 #define LIS2DH12_FS_16G 0x30
 
+#define LIS2DH12_CLICK_SRC_IA   (1 << 6)
+#define LIS2DH12_CLICK_SRC_DCLICK   (1 << 5)
+#define LIS2DH12_CLICK_SRC_SCLICK   (1 << 4)
+#define LIS2DH12_CLICK_SRC_SIGN (1 << 3)
+#define LIS2DH12_CLICK_SRC_Z(1 << 2)
+#define LIS2DH12_CLICK_SRC_Y(1 << 1)
+#define LIS2DH12_CLICK_SRC_X(1 << 0)
+
+#define LIS2DH12_CTRL_REG6_I2_CLICK (1 << 7)
+#define LIS2DH12_CTRL_REG6_I2_IA1   (1 << 6)
+#define LIS2DH12_CTRL_REG6_I2_IA2   (1 << 5)
+#define LIS2DH12_CTRL_REG6_I2_BOOT  (1 << 4)
+#define LIS2DH12_CTRL_REG6_I2_ACT   (1 << 3)
+#define LIS2DH12_CTRL_REG6_INT_POLARITY (1 << 1)
+
+/* int1_src */
+#define LIS2DH12_INT1_IA(1 << 6)
+#define LIS2DH12_INT1_ZH(1 << 5)
+#define LIS2DH12_INT1_ZL(1 << 4)
+#define LIS2DH12_INT1_YH(1 << 3)
+#define LIS2DH12_INT1_YL(1 << 2)
+#define LIS2DH12_INT1_XH(1 << 1)
+#define LIS2DH12_INT1_XL(1 << 0)
+
+/* int2_src */
+#define LIS2DH12_INT2_IA(1 << 6)
+#define LIS2DH12_INT2_ZH(1 << 5)
+#define LIS2DH12_INT2_ZL(1 << 4)
+#define LIS2DH12_INT2_YH(1 << 3)
+#define LIS2DH12_INT2_YL(1 << 2)
+#define LIS2DH12_INT2_XH(1 << 1)
+#define LIS2DH12_INT2_XL(1 << 0)
+
+/* int_src */
+#define LIS2DH12_NOTIF_SRC_INT1_IA  (LIS2DH12_INT1_IA)
+#define LIS2DH12_NOTIF_SRC_INT1_ZH  (LIS2DH12_INT1_ZH)
+#define LIS2DH12_NOTIF_SRC_INT1_ZL  (LIS2DH12_INT1_ZL)
+#define LIS2DH12_NOTIF_SRC_INT1_YH  (LIS2DH12_INT1_YH)
+#define LIS2DH12_NOTIF_SRC_INT1_YL  (LIS2DH12_INT1_YL)
+#define LIS2DH12_NOTIF_SRC_INT1_XH  (LIS2DH12_INT1_XH)
+#define LIS2DH12_NOTIF_SRC_INT1_XL  (LIS2DH12_INT1_XL)
+#define LIS2DH12_NOTIF_SRC_INT2_IA  (LIS2DH12_INT2_IA << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_ZH  (LIS2DH12_INT2_ZH << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_ZL  (LIS2DH12_INT2_ZL << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_YH  (LIS2DH12_INT2_YH << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_YL  (LIS2DH12_INT2_YL << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_XH  (LIS2DH12_INT2_XH << 8)
+#define LIS2DH12_NOTIF_SRC_INT2_XL  (LIS2DH12_INT2_XL << 8)
+
+/* int1 pin config - generate either data ready or in */
+#define LIS2DH12_CTRL_REG3_I1_CLICK (1 << 7)
+#define LIS2DH12_CTRL_REG3_I1_IA1   (1 << 6)
+#define LIS2DH12_CTRL_REG3_I1_IA2   (1 << 5)
+#define LIS2DH12_CTRL_REG3_I1_ZYXDA (1 << 4)
+#define LIS2DH12_CTRL_REG3_I1_WTM   (1 << 2)
+#define LIS2DH12_CTRL_REG3_I1_OVERRUN   (1 << 1)
+
+enum lis2dh12_read_mode {
+LIS2DH12_READ_M_POLL = 0,
+LIS2DH12_READ_M_STREAM = 1,
+};
+
+struct lis2dh12_notif_cfg {
+sensor_event_type_t event;
+uint8_t int_num;
+uint16_t notif_src;
+uint8_t int_cfg;
+};
+
+struct lis2dh12_tap_settings {
+uint8_t en_xs  : 1; // Interrupt on X single tap
+uint8_t en_ys  : 1; // Interrupt on Y single tap
+uint8_t en_zs  : 1; // Interrupt on Z single tap
+uint8_t en_xd  : 1; // Interrupt on X double tap
+uint8_t en_yd  : 1; // Interrupt on Y double tap
+uint8_t en_zd  : 1; // Interrupt on Z double tap
+uint8_t hpf: 1; // High pass filter enable
+
+/* ths data is 7 bits, fs = +-2g */
+int8_t click_ths;
+/* shock is maximum time data can be over threshold to register as tap
+

[GitHub] vrahane commented on issue #1520: Lis2dh12 driver

2018-11-14 Thread GitBox
vrahane commented on issue #1520: Lis2dh12 driver
URL: https://github.com/apache/mynewt-core/pull/1520#issuecomment-438891104
 
 
   @kasjer and @andrzej-kaczmarek Sorry guys since I squashed and merged, the 
committers for intermittent commits are not shown.


This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services


[GitHub] mkiiskila opened a new pull request #239: docs; give examples about how to use extrajtagcmd to debug multiple b…

2018-11-14 Thread GitBox
mkiiskila opened a new pull request #239: docs; give examples about how to use 
extrajtagcmd to debug multiple b…
URL: https://github.com/apache/mynewt-newt/pull/239
 
 
   …oards simultaneously.


This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services


[GitHub] mkiiskila opened a new pull request #1521: hw/scripts; if port was passed as last parameter in --extrajtagcmd,

2018-11-14 Thread GitBox
mkiiskila opened a new pull request #1521: hw/scripts; if port was passed as 
last parameter in --extrajtagcmd,
URL: https://github.com/apache/mynewt-core/pull/1521
 
 
   and the target uses openocd, PORT was extracted incorrectly.
   
   E.g
   ```
   newt target show blinky_stm32f3
   targets/blinky_stm32f3
   app=apps/blinky
   bsp=@apache-mynewt-core/hw/bsp/stm32f3discovery
   build_profile=debug
   ```
   And then:
   ```
   newt debug blinky_stm32f3 --extrajtagcmd="-port 3334"
   ```


This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services


[mynewt-nimble] 02/05: [porting][linux] Added required APIs to build glue.c for BLE Mesh app

2018-11-14 Thread rymek
This is an automated email from the ASF dual-hosted git repository.

rymek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git

commit 55e2c86357202927d48c5a3b7d437a462030b3cb
Author: Mehul Hirpara 
AuthorDate: Wed Oct 24 17:31:27 2018 +0530

[porting][linux] Added required APIs to build glue.c for BLE Mesh app
---
 porting/npl/linux/src/os_callout.c | 27 +++
 porting/npl/linux/src/os_eventq.cc | 12 
 porting/npl/linux/src/os_time.c|  7 +++
 3 files changed, 46 insertions(+)

diff --git a/porting/npl/linux/src/os_callout.c 
b/porting/npl/linux/src/os_callout.c
index 1804705..d3091fa 100644
--- a/porting/npl/linux/src/os_callout.c
+++ b/porting/npl/linux/src/os_callout.c
@@ -129,3 +129,30 @@ ble_npl_callout_get_ticks(struct ble_npl_callout *co)
 {
 return co->c_ticks;
 }
+
+void
+ble_npl_callout_set_arg(struct ble_npl_callout *co, void *arg)
+{
+co->c_ev.ev_arg = arg;
+}
+
+uint32_t
+ble_npl_callout_remaining_ticks(struct ble_npl_callout *co,
+ble_npl_time_t now)
+{
+ble_npl_time_t rt;
+uint32_t exp;
+
+struct itimerspec its;
+timer_gettime(co->c_timer, );
+
+exp = its.it_value.tv_sec * 1000;
+
+if (exp > now) {
+rt = exp - now;
+} else {
+rt = 0;
+}
+
+return rt;
+}
diff --git a/porting/npl/linux/src/os_eventq.cc 
b/porting/npl/linux/src/os_eventq.cc
index 0415836..2ede70b 100644
--- a/porting/npl/linux/src/os_eventq.cc
+++ b/porting/npl/linux/src/os_eventq.cc
@@ -46,6 +46,18 @@ ble_npl_eventq_init(struct ble_npl_eventq *evq)
 evq->q = new wqueue_t();
 }
 
+bool
+ble_npl_eventq_is_empty(struct ble_npl_eventq *evq)
+{
+wqueue_t *q = static_cast(evq->q);
+
+if (q->size()) {
+return 1;
+} else {
+return 0;
+}
+}
+
 int
 ble_npl_eventq_inited(const struct ble_npl_eventq *evq)
 {
diff --git a/porting/npl/linux/src/os_time.c b/porting/npl/linux/src/os_time.c
index 613e299..6df2e25 100644
--- a/porting/npl/linux/src/os_time.c
+++ b/porting/npl/linux/src/os_time.c
@@ -23,6 +23,7 @@
 #include "os/os.h"
 #include "nimble/nimble_npl.h"
 
+#include 
 #include 
 
 /**
@@ -63,3 +64,9 @@ uint32_t ble_npl_time_ticks_to_ms32(ble_npl_time_t ticks)
 {
 return ticks;
 }
+
+void
+ble_npl_time_delay(ble_npl_time_t ticks)
+{
+sleep(ble_npl_time_ticks_to_ms32(ticks)/1000);
+}



[mynewt-nimble] 04/05: [porting][linux] Added timeout support to Eventq Get API

2018-11-14 Thread rymek
This is an automated email from the ASF dual-hosted git repository.

rymek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git

commit 4b5c5ef468ba0840ba22e3bc13e55c6e1736d0b1
Author: Mehul Hirpara 
AuthorDate: Wed Oct 24 17:56:11 2018 +0530

[porting][linux] Added timeout support to Eventq Get API

This change helps to get event from eventq with 0 timeout period.
---
 porting/npl/linux/src/os_eventq.cc |  7 +--
 porting/npl/linux/src/wqueue.h | 18 +-
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/porting/npl/linux/src/os_eventq.cc 
b/porting/npl/linux/src/os_eventq.cc
index 2ede70b..a3c4b96 100644
--- a/porting/npl/linux/src/os_eventq.cc
+++ b/porting/npl/linux/src/os_eventq.cc
@@ -83,8 +83,11 @@ struct ble_npl_event *ble_npl_eventq_get(struct 
ble_npl_eventq *evq,
 struct ble_npl_event *ev;
 wqueue_t *q = static_cast(evq->q);
 
-ev = q->get();
-ev->ev_queued = 0;
+ev = q->get(tmo);
+
+if (ev) {
+ev->ev_queued = 0;
+}
 
 return ev;
 }
diff --git a/porting/npl/linux/src/wqueue.h b/porting/npl/linux/src/wqueue.h
index 8eb23b7..0a1e7cc 100644
--- a/porting/npl/linux/src/wqueue.h
+++ b/porting/npl/linux/src/wqueue.h
@@ -54,13 +54,21 @@ public:
 pthread_mutex_unlock(_mutex);
 }
 
-T get() {
+T get(uint32_t tmo) {
 pthread_mutex_lock(_mutex);
-while (m_queue.size() == 0) {
-pthread_cond_wait(_condv, _mutex);
+if (tmo) {
+while (m_queue.size() == 0) {
+pthread_cond_wait(_condv, _mutex);
+}
 }
-T item = m_queue.front();
-m_queue.pop_front();
+
+T item = NULL;
+
+if (m_queue.size() != 0) {
+item = m_queue.front();
+m_queue.pop_front();
+}
+
 pthread_mutex_unlock(_mutex);
 return item;
 }



[mynewt-newt] branch master updated (4353b71 -> 88ad5de)

2018-11-14 Thread ccollins
This is an automated email from the ASF dual-hosted git repository.

ccollins pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git.


from 4353b71  Update newt version: 1.4. --> 1.5.9900
 new a1d3d27  resolve: Maintain reverse dependency list per-pkg
 new 88ad5de  resolve: Prune orphan packages during dep resolutn

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 newt/resolve/resolve.go | 158 +++-
 1 file changed, 115 insertions(+), 43 deletions(-)



[mynewt-newt] 01/02: resolve: Maintain reverse dependency list per-pkg

2018-11-14 Thread ccollins
This is an automated email from the ASF dual-hosted git repository.

ccollins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit a1d3d2722a36e76779a929fb9c3074dfd9ea26f1
Author: Christopher Collins 
AuthorDate: Wed Nov 7 09:46:18 2018 -0800

resolve: Maintain reverse dependency list per-pkg

Replace `ResolvePackage`'s reference count with a reverse dependency
list (implemented as map).  This is less error prone, and it allows for
package removal to be more efficient.
---
 newt/resolve/resolve.go | 34 ++
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/newt/resolve/resolve.go b/newt/resolve/resolve.go
index a85c97e..02d69f9 100644
--- a/newt/resolve/resolve.go
+++ b/newt/resolve/resolve.go
@@ -89,9 +89,9 @@ type ResolvePackage struct {
 
depsResolved bool
 
-   // Tracks this package's number of dependents.  If this number reaches 
0,
-   // this package can be deleted from the resolver.
-   refCount int
+   // Tracks this package's dependents (things that depend on us).  If this
+   // map becomes empty, this package can be deleted from the resolver.
+   revDeps map[*ResolvePackage]struct{}
 }
 
 type ResolveSet struct {
@@ -169,6 +169,7 @@ func NewResolvePkg(lpkg *pkg.LocalPackage) *ResolvePackage {
Lpkg:  lpkg,
reqApiMap: map[string]resolveReqApi{},
Deps:  map[*ResolvePackage]*ResolveDep{},
+   revDeps:   map[*ResolvePackage]struct{}{},
}
 }
 
@@ -187,17 +188,17 @@ func (r *Resolver) resolveDep(dep *pkg.Dependency, 
depender string) (*pkg.LocalP
 // @return  true if the package's dependency list was
 //  modified.
 func (rpkg *ResolvePackage) AddDep(
-   apiPkg *ResolvePackage, api string, expr string) bool {
+   depPkg *ResolvePackage, api string, expr string) bool {
 
-   if dep := rpkg.Deps[apiPkg]; dep != nil {
+   if dep := rpkg.Deps[depPkg]; dep != nil {
if dep.Api != "" && api == "" {
dep.Api = api
} else {
return false
}
} else {
-   rpkg.Deps[apiPkg] = {
-   Rpkg: apiPkg,
+   rpkg.Deps[depPkg] = {
+   Rpkg: depPkg,
Api:  api,
Expr: expr,
}
@@ -212,7 +213,8 @@ func (rpkg *ResolvePackage) AddDep(
rpkg.reqApiMap[api] = apiReq
}
 
-   apiPkg.refCount++
+   depPkg.revDeps[rpkg] = struct{}{}
+
return true
 }
 
@@ -339,16 +341,16 @@ func (r *Resolver) deletePkg(rpkg *ResolvePackage) error {
r.cfg.DeletePkg(rpkg.Lpkg)
 
// If the deleted package is the only depender for any other packages
-   // (i.e., if any of its dependencies have a reference count of one), 
delete
-   // them as well.
+   // (i.e., if any of its dependencies have only one reverse dependency),
+   // delete them as well.
for rdep, _ := range rpkg.Deps {
-   if rdep.refCount <= 0 {
+   if len(rdep.revDeps) == 0 {
return util.FmtNewtError(
-   "package %s unexpectedly has refcount <= 0",
+   "package %s unexpectedly has 0 reverse 
dependencies",
rdep.Lpkg.FullName())
}
-   rdep.refCount--
-   if rdep.refCount == 0 {
+   delete(rdep.revDeps, rpkg)
+   if len(rdep.revDeps) == 0 {
if err := r.deletePkg(rdep); err != nil {
return nil
}
@@ -406,12 +408,12 @@ func (r *Resolver) loadDepsForPkg(rpkg *ResolvePackage) 
(bool, error) {
for rdep, _ := range rpkg.Deps {
if _, ok := seen[rdep]; !ok {
delete(rpkg.Deps, rdep)
-   rdep.refCount--
+   delete(rdep.revDeps, rpkg)
changed = true
 
// If we just deleted the last reference to a package, 
remove the
// package entirely from the resolver and syscfg.
-   if rdep.refCount == 0 {
+   if len(rdep.revDeps) == 0 {
if err := r.deletePkg(rdep); err != nil {
return true, err
}



[GitHub] ccollins476ad closed issue #233: Circular dependencies may cause extraneous packages to get pulled into build

2018-11-14 Thread GitBox
ccollins476ad closed issue #233: Circular dependencies may cause extraneous 
packages to get pulled into build
URL: https://github.com/apache/mynewt-newt/issues/233
 
 
   


This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services


[GitHub] ccollins476ad closed pull request #235: resolve: Prune orphan packages during dependency resolution

2018-11-14 Thread GitBox
ccollins476ad closed pull request #235:  resolve: Prune orphan packages during 
dependency resolution
URL: https://github.com/apache/mynewt-newt/pull/235
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/newt/resolve/resolve.go b/newt/resolve/resolve.go
index a85c97e5..ef13e6a4 100644
--- a/newt/resolve/resolve.go
+++ b/newt/resolve/resolve.go
@@ -58,6 +58,7 @@ type resolveReqApi struct {
 type Resolver struct {
apis map[string]resolveApi
pkgMap   map[*pkg.LocalPackage]*ResolvePackage
+   seedPkgs []*pkg.LocalPackage
injectedSettings map[string]string
flashMap flash.FlashMap
cfg  syscfg.Cfg
@@ -89,9 +90,9 @@ type ResolvePackage struct {
 
depsResolved bool
 
-   // Tracks this package's number of dependents.  If this number reaches 
0,
-   // this package can be deleted from the resolver.
-   refCount int
+   // Tracks this package's dependents (things that depend on us).  If this
+   // map becomes empty, this package can be deleted from the resolver.
+   revDeps map[*ResolvePackage]struct{}
 }
 
 type ResolveSet struct {
@@ -134,6 +135,7 @@ func newResolver(
r := {
apis: map[string]resolveApi{},
pkgMap:   map[*pkg.LocalPackage]*ResolvePackage{},
+   seedPkgs: seedPkgs,
injectedSettings: injectedSettings,
flashMap: flashMap,
cfg:  syscfg.NewCfg(),
@@ -169,6 +171,7 @@ func NewResolvePkg(lpkg *pkg.LocalPackage) *ResolvePackage {
Lpkg:  lpkg,
reqApiMap: map[string]resolveReqApi{},
Deps:  map[*ResolvePackage]*ResolveDep{},
+   revDeps:   map[*ResolvePackage]struct{}{},
}
 }
 
@@ -187,17 +190,17 @@ func (r *Resolver) resolveDep(dep *pkg.Dependency, 
depender string) (*pkg.LocalP
 // @return  true if the package's dependency list was
 //  modified.
 func (rpkg *ResolvePackage) AddDep(
-   apiPkg *ResolvePackage, api string, expr string) bool {
+   depPkg *ResolvePackage, api string, expr string) bool {
 
-   if dep := rpkg.Deps[apiPkg]; dep != nil {
+   if dep := rpkg.Deps[depPkg]; dep != nil {
if dep.Api != "" && api == "" {
dep.Api = api
} else {
return false
}
} else {
-   rpkg.Deps[apiPkg] = {
-   Rpkg: apiPkg,
+   rpkg.Deps[depPkg] = {
+   Rpkg: depPkg,
Api:  api,
Expr: expr,
}
@@ -212,7 +215,8 @@ func (rpkg *ResolvePackage) AddDep(
rpkg.reqApiMap[api] = apiReq
}
 
-   apiPkg.refCount++
+   depPkg.revDeps[rpkg] = struct{}{}
+
return true
 }
 
@@ -338,19 +342,25 @@ func (r *Resolver) deletePkg(rpkg *ResolvePackage) error {
// Delete the package from syscfg.
r.cfg.DeletePkg(rpkg.Lpkg)
 
-   // If the deleted package is the only depender for any other packages
-   // (i.e., if any of its dependencies have a reference count of one), 
delete
-   // them as well.
-   for rdep, _ := range rpkg.Deps {
-   if rdep.refCount <= 0 {
+   // Remove all dependencies on the deleted package.
+   for revdep, _ := range rpkg.revDeps {
+   delete(revdep.Deps, rpkg)
+   }
+
+   // Remove all reverse dependencies pointing to the deleted package.  If 
the
+   // deleted package is the only depender for any other packages (i.e., if
+   // any of its dependencies have only one reverse dependency),
+   // delete them as well.
+   for dep, _ := range rpkg.Deps {
+   if len(dep.revDeps) == 0 {
return util.FmtNewtError(
-   "package %s unexpectedly has refcount <= 0",
-   rdep.Lpkg.FullName())
+   "package %s unexpectedly has 0 reverse 
dependencies",
+   dep.Lpkg.FullName())
}
-   rdep.refCount--
-   if rdep.refCount == 0 {
-   if err := r.deletePkg(rdep); err != nil {
-   return nil
+   delete(dep.revDeps, rpkg)
+   if len(dep.revDeps) == 0 {
+   if err := r.deletePkg(dep); err != nil {
+   return err
}
}
}
@@ -406,12 +416,12 @@ func (r *Resolver) loadDepsForPkg(rpkg *ResolvePackage) 

[mynewt-newt] 02/02: resolve: Prune orphan packages during dep resolutn

2018-11-14 Thread ccollins
This is an automated email from the ASF dual-hosted git repository.

ccollins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit 88ad5de6f0826c71f961adba6c907e27e18755b4
Author: Christopher Collins 
AuthorDate: Tue Nov 6 17:18:02 2018 -0800

resolve: Prune orphan packages during dep resolutn

This fixes #233.

Detect orphan packages as follows: starting from each seed package,
recursively traverse the package's dependency list, keeping track of
which packages were visited.  After the traversal is complete, any
non-visited package in the resolver are orphans and can be removed.
---
 newt/resolve/resolve.go | 132 
 1 file changed, 101 insertions(+), 31 deletions(-)

diff --git a/newt/resolve/resolve.go b/newt/resolve/resolve.go
index 02d69f9..ef13e6a 100644
--- a/newt/resolve/resolve.go
+++ b/newt/resolve/resolve.go
@@ -58,6 +58,7 @@ type resolveReqApi struct {
 type Resolver struct {
apis map[string]resolveApi
pkgMap   map[*pkg.LocalPackage]*ResolvePackage
+   seedPkgs []*pkg.LocalPackage
injectedSettings map[string]string
flashMap flash.FlashMap
cfg  syscfg.Cfg
@@ -134,6 +135,7 @@ func newResolver(
r := {
apis: map[string]resolveApi{},
pkgMap:   map[*pkg.LocalPackage]*ResolvePackage{},
+   seedPkgs: seedPkgs,
injectedSettings: injectedSettings,
flashMap: flashMap,
cfg:  syscfg.NewCfg(),
@@ -340,19 +342,25 @@ func (r *Resolver) deletePkg(rpkg *ResolvePackage) error {
// Delete the package from syscfg.
r.cfg.DeletePkg(rpkg.Lpkg)
 
-   // If the deleted package is the only depender for any other packages
-   // (i.e., if any of its dependencies have only one reverse dependency),
+   // Remove all dependencies on the deleted package.
+   for revdep, _ := range rpkg.revDeps {
+   delete(revdep.Deps, rpkg)
+   }
+
+   // Remove all reverse dependencies pointing to the deleted package.  If 
the
+   // deleted package is the only depender for any other packages (i.e., if
+   // any of its dependencies have only one reverse dependency),
// delete them as well.
-   for rdep, _ := range rpkg.Deps {
-   if len(rdep.revDeps) == 0 {
+   for dep, _ := range rpkg.Deps {
+   if len(dep.revDeps) == 0 {
return util.FmtNewtError(
"package %s unexpectedly has 0 reverse 
dependencies",
-   rdep.Lpkg.FullName())
+   dep.Lpkg.FullName())
}
-   delete(rdep.revDeps, rpkg)
-   if len(rdep.revDeps) == 0 {
-   if err := r.deletePkg(rdep); err != nil {
-   return nil
+   delete(dep.revDeps, rpkg)
+   if len(dep.revDeps) == 0 {
+   if err := r.deletePkg(dep); err != nil {
+   return err
}
}
}
@@ -478,31 +486,94 @@ func (r *Resolver) reloadCfg() (bool, error) {
return false, nil
 }
 
-func (r *Resolver) resolveDepsOnce() (bool, error) {
-   // Circularly resolve dependencies, APIs, and required APIs until no new
-   // ones exist.
-   newDeps := false
-   for {
-   reprocess := false
-   for _, rpkg := range r.pkgMap {
-   newDeps, err := r.resolvePkg(rpkg)
-   if err != nil {
+// @return bool True if any packages were pruned, false
+//  otherwise.
+// @return err  Error
+func (r *Resolver) pruneOrphans() (bool, error) {
+   seenMap := map[*ResolvePackage]struct{}{}
+
+   // This function traverses the specified package's dependency list,
+   // recording each visited packges in `seenMap`.
+   var visit func(rpkg *ResolvePackage)
+   visit = func(rpkg *ResolvePackage) {
+   if _, ok := seenMap[rpkg]; ok {
+   return
+   }
+
+   seenMap[rpkg] = struct{}{}
+   for dep, _ := range rpkg.Deps {
+   visit(dep)
+   }
+   }
+
+   // Starting from each seed package, recursively traverse the package's
+   // dependency list, keeping track of which packages were visited.
+   for _, lpkg := range r.seedPkgs {
+   rpkg := r.pkgMap[lpkg]
+   if rpkg == nil {
+   panic("Resolver lacks mapping for seed package " + 
lpkg.FullName())
+   }
+
+   visit(rpkg)
+   }
+
+   // Any non-visited packages in the resolver are 

[GitHub] rymanluk closed pull request #230: [porting][linux] Add support for BLE Mesh app on linux platform

2018-11-14 Thread GitBox
rymanluk closed pull request #230: [porting][linux] Add support for BLE Mesh 
app on linux platform
URL: https://github.com/apache/mynewt-nimble/pull/230
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/nimble/host/mesh/src/adv.h b/nimble/host/mesh/src/adv.h
index d37e0d41..8e76e419 100644
--- a/nimble/host/mesh/src/adv.h
+++ b/nimble/host/mesh/src/adv.h
@@ -17,7 +17,7 @@
 #define BT_MESH_ADV_DATA_SIZE 31
 
 /* The user data is a pointer (4 bytes) to struct bt_mesh_adv */
-#define BT_MESH_ADV_USER_DATA_SIZE 4
+#define BT_MESH_ADV_USER_DATA_SIZE (sizeof(struct bt_mesh_adv *))
 
 #define BT_MESH_MBUF_HEADER_SIZE (sizeof(struct os_mbuf_pkthdr) + \
 BT_MESH_ADV_USER_DATA_SIZE +\
diff --git a/nimble/host/mesh/src/testing.c b/nimble/host/mesh/src/testing.c
index 096cff63..4a0f1da2 100644
--- a/nimble/host/mesh/src/testing.c
+++ b/nimble/host/mesh/src/testing.c
@@ -97,7 +97,7 @@ void bt_test_print_credentials(void)
struct bt_mesh_subnet *sub;
struct bt_mesh_app_key *app_key;
 
-   console_printf("IV Index: %08lx\n", bt_mesh.iv_index);
+   console_printf("IV Index: %08lx\n", (long) bt_mesh.iv_index);
console_printf("Dev key: %s\n", bt_hex(bt_mesh.dev_key, 16));
 
for (i = 0; i < MYNEWT_VAL(BLE_MESH_SUBNET_COUNT); ++i)
@@ -157,7 +157,11 @@ void bt_test_print_credentials(void)
 
 int bt_test_shell_init(void)
 {
+#if MYNEWT_VAL(BLE_MESH_SHELL)
return cmd_mesh_init(0, NULL);
+#else
+   return -ENOTSUP;
+#endif
 }
 
 int bt_test_bind_app_key_to_model(struct bt_mesh_model *model, u16_t key_idx, 
u16_t id)
diff --git a/porting/npl/linux/include/console/console.h 
b/porting/npl/linux/include/console/console.h
new file mode 100644
index ..ccbfc015
--- /dev/null
+++ b/porting/npl/linux/include/console/console.h
@@ -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.
+ */
+
+#ifndef __CONSOLE_H__
+#define __CONSOLE_H__
+
+#include 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define console_printf(_fmt, ...) printf(_fmt, ##__VA_ARGS__)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CONSOLE_H__ */
diff --git a/porting/npl/linux/src/os_callout.c 
b/porting/npl/linux/src/os_callout.c
index ead7ff1d..2d77c9e1 100644
--- a/porting/npl/linux/src/os_callout.c
+++ b/porting/npl/linux/src/os_callout.c
@@ -130,3 +130,30 @@ ble_npl_callout_get_ticks(struct ble_npl_callout *co)
 {
 return co->c_ticks;
 }
+
+void
+ble_npl_callout_set_arg(struct ble_npl_callout *co, void *arg)
+{
+co->c_ev.ev_arg = arg;
+}
+
+uint32_t
+ble_npl_callout_remaining_ticks(struct ble_npl_callout *co,
+ble_npl_time_t now)
+{
+ble_npl_time_t rt;
+uint32_t exp;
+
+struct itimerspec its;
+timer_gettime(co->c_timer, );
+
+exp = its.it_value.tv_sec * 1000;
+
+if (exp > now) {
+rt = exp - now;
+} else {
+rt = 0;
+}
+
+return rt;
+}
diff --git a/porting/npl/linux/src/os_eventq.cc 
b/porting/npl/linux/src/os_eventq.cc
index a1459bdf..15ec4ef6 100644
--- a/porting/npl/linux/src/os_eventq.cc
+++ b/porting/npl/linux/src/os_eventq.cc
@@ -46,6 +46,18 @@ ble_npl_eventq_init(struct ble_npl_eventq *evq)
 evq->q = new wqueue_t();
 }
 
+bool
+ble_npl_eventq_is_empty(struct ble_npl_eventq *evq)
+{
+wqueue_t *q = static_cast(evq->q);
+
+if (q->size()) {
+return 1;
+} else {
+return 0;
+}
+}
+
 int
 ble_npl_eventq_inited(const struct ble_npl_eventq *evq)
 {
@@ -71,8 +83,11 @@ struct ble_npl_event *ble_npl_eventq_get(struct 
ble_npl_eventq *evq,
 struct ble_npl_event *ev;
 wqueue_t *q = static_cast(evq->q);
 
-ev = q->get();
-ev->ev_queued = 0;
+ev = q->get(tmo);
+
+if (ev) {
+ev->ev_queued = 0;
+}
 
 return ev;
 }
diff --git a/porting/npl/linux/src/os_time.c b/porting/npl/linux/src/os_time.c
index 55cbb61a..3c2e4faa 100644
--- a/porting/npl/linux/src/os_time.c
+++ b/porting/npl/linux/src/os_time.c
@@ -22,6 +22,7 @@
 

[mynewt-nimble] branch master updated (dc9fb25 -> ba6ce7d)

2018-11-14 Thread rymek
This is an automated email from the ASF dual-hosted git repository.

rymek pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git.


from dc9fb25  Merge pull request #237 from wes3/nrf_hfxo_request
 new dfe8035  [porting][linux] Fixed build errors when BLE Mesh Shell is 
disabled
 new 55e2c86  [porting][linux] Added required APIs to build glue.c for BLE 
Mesh app
 new e6fd6e9  Dynamically considering pointer size to support multiple 
platforms
 new 4b5c5ef  [porting][linux] Added timeout support to Eventq Get API
 new ba6ce7d  Fixed build error of Mesh stack for 64-bit machine

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 nimble/host/mesh/src/adv.h |  2 +-
 nimble/host/mesh/src/testing.c |  6 -
 .../npl/linux/include/console/console.h| 10 
 porting/npl/linux/src/os_callout.c | 27 ++
 porting/npl/linux/src/os_eventq.cc | 19 +--
 porting/npl/linux/src/os_time.c|  7 ++
 porting/npl/linux/src/wqueue.h | 18 +++
 7 files changed, 75 insertions(+), 14 deletions(-)
 copy nimble/transport/ram/include/transport/ram/ble_hci_ram.h => 
porting/npl/linux/include/console/console.h (85%)



[mynewt-nimble] 03/05: Dynamically considering pointer size to support multiple platforms

2018-11-14 Thread rymek
This is an automated email from the ASF dual-hosted git repository.

rymek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git

commit e6fd6e948a4d49263d280127241680b636ed344a
Author: Mehul Hirpara 
AuthorDate: Wed Oct 24 17:48:07 2018 +0530

Dynamically considering pointer size to support multiple platforms

This change helps filling bt_mesh_adv buffer correctly while sending
secure beacons (on Linux platform).
---
 nimble/host/mesh/src/adv.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/nimble/host/mesh/src/adv.h b/nimble/host/mesh/src/adv.h
index d37e0d4..8e76e41 100644
--- a/nimble/host/mesh/src/adv.h
+++ b/nimble/host/mesh/src/adv.h
@@ -17,7 +17,7 @@
 #define BT_MESH_ADV_DATA_SIZE 31
 
 /* The user data is a pointer (4 bytes) to struct bt_mesh_adv */
-#define BT_MESH_ADV_USER_DATA_SIZE 4
+#define BT_MESH_ADV_USER_DATA_SIZE (sizeof(struct bt_mesh_adv *))
 
 #define BT_MESH_MBUF_HEADER_SIZE (sizeof(struct os_mbuf_pkthdr) + \
 BT_MESH_ADV_USER_DATA_SIZE +\



[mynewt-nimble] 05/05: Fixed build error of Mesh stack for 64-bit machine

2018-11-14 Thread rymek
This is an automated email from the ASF dual-hosted git repository.

rymek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git

commit ba6ce7dfddd55da4b82e48de9b194357eb63f753
Author: Mehul Hirpara 
AuthorDate: Thu Nov 1 09:20:47 2018 +0530

Fixed build error of Mesh stack for 64-bit machine
---
 nimble/host/mesh/src/testing.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/nimble/host/mesh/src/testing.c b/nimble/host/mesh/src/testing.c
index caf55dd..4a0f1da 100644
--- a/nimble/host/mesh/src/testing.c
+++ b/nimble/host/mesh/src/testing.c
@@ -97,7 +97,7 @@ void bt_test_print_credentials(void)
struct bt_mesh_subnet *sub;
struct bt_mesh_app_key *app_key;
 
-   console_printf("IV Index: %08lx\n", bt_mesh.iv_index);
+   console_printf("IV Index: %08lx\n", (long) bt_mesh.iv_index);
console_printf("Dev key: %s\n", bt_hex(bt_mesh.dev_key, 16));
 
for (i = 0; i < MYNEWT_VAL(BLE_MESH_SUBNET_COUNT); ++i)



[GitHub] saulpw commented on a change in pull request #239: docs; give examples about how to use extrajtagcmd to debug multiple b…

2018-11-14 Thread GitBox
saulpw commented on a change in pull request #239: docs; give examples about 
how to use extrajtagcmd to debug multiple b…
URL: https://github.com/apache/mynewt-newt/pull/239#discussion_r233559093
 
 

 ##
 File path: docs/newt_ops.rst
 ##
 @@ -67,3 +67,13 @@ through the ``-h`` or ``--help`` options.
   -v, --verbose   Enable verbose output when executing commands
 
 Use "newt target [command] --help" for more information about a 
command.
+
+
+It is possible to use *newt* to debug multiple boards simultaneously. To do 
that, you'll need to select TCP port gdb uses to talk with JTAG adapter 
software, and also pick the JTAG adapter to use. Selected TCP ports should be 
unique, and available for use. These can be passed within parameter 
``-extrajtagcmd`` wnen invoking ``newt load``, ``newt debug`` or ``newt run``.
+
+Here are few examples:
+
+.. code-block:: console
+
+newt debug blinky_nrf52 --extrajtagcmd="-port 3338 -select 
usb=682223238"
+   newt run slinky_zero 4.0 --extrajtagcmd="cmsis_dap_serial 
AZE01422 -port 3400"
 
 Review comment:
   Note that `` is the gdb port, but `+1` is also used as the 
telnet port, making it unavailable.  This bit me when I chose consecutive ports 
for the two sessions.
   
   I also had to add ` ; tcl_port ` and specify a third port, which is not 
auto-specified by newt like the telnet port is, and will collide if not 
specified (defaults to ).  Note also the spaces around the `;`, which seem 
to be necessary for openocd.
   
   Finally, maybe a mention of how to get the serial of the device?  On Linux, 
I used `lsusb -v` and found the `iSerial` property on the adapter.


This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services


[mynewt-newt] 03/03: Allow key list to be specified in `newt run`.

2018-11-14 Thread ccollins
This is an automated email from the ASF dual-hosted git repository.

ccollins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit 9041b05ac66832d5ad617bcc667d269087ab1c6a
Author: Christopher Collins 
AuthorDate: Mon Nov 12 12:45:50 2018 -0800

Allow key list to be specified in `newt run`.
---
 newt/cli/run_cmds.go | 15 +--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/newt/cli/run_cmds.go b/newt/cli/run_cmds.go
index 49a2e4d..d3f3ed9 100644
--- a/newt/cli/run_cmds.go
+++ b/newt/cli/run_cmds.go
@@ -88,11 +88,20 @@ func runRunCmd(cmd *cobra.Command, args []string) {
}
 
if len(version) > 0 {
-   _, _, err = b.CreateImages(version, "", 0)
+   var keystrs []string
+   var keyId uint8
+
+   if len(args) > 2 {
+   keystrs, keyId, err = parseKeyArgs(args[2:])
+   if err != nil {
+   NewtUsage(cmd, err)
+   }
+   }
+
+   _, _, err = b.CreateImages(version, keystrs, keyId)
if err != nil {
NewtUsage(cmd, err)
}
-
}
 
if err := b.Load(extraJtagCmd); err != nil {
@@ -113,6 +122,8 @@ func AddRunCommands(cmd *cobra.Command) {
" - debug \n\n" +
"Note if version number is omitted, create-image step is 
skipped\n"
runHelpEx := "  newt run  []\n"
+   runHelpEx +=
+   "  newt run -2 my_target1 1.3.0.3 private-1.pem private-2.pem\n"
 
runCmd := {
Use: "run",



[mynewt-newt] 01/03: Some cosmetic changes

2018-11-14 Thread ccollins
This is an automated email from the ASF dual-hosted git repository.

ccollins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit 1831dd3621cc0a3dbae22d23a7f43c61992c5209
Author: Christopher Collins 
AuthorDate: Mon Nov 12 12:54:38 2018 -0800

Some cosmetic changes

Run gofmt, use `FmtNewtError()` instead of
`NewNewtError(fmt.Sprintf())`, etc.
---
 newt/builder/build.go |   5 +-
 newt/image/image.go   | 189 --
 2 files changed, 94 insertions(+), 100 deletions(-)

diff --git a/newt/builder/build.go b/newt/builder/build.go
index ff6d505..9336465 100644
--- a/newt/builder/build.go
+++ b/newt/builder/build.go
@@ -285,7 +285,7 @@ func (b *Builder) newCompiler(bpkg *BuildPackage,
return nil, err
}
 
-   log.Warnf("Unsupported build profile for package, using default 
build profile " +
+   log.Warnf("Unsupported build profile for package, using default 
build profile "+
"(pkg=\"%s\" build_profile=\"%s\" OS=\"%s\")",
bpkg.rpkg.Lpkg.FullName(), buildProfile, runtime.GOOS)
 
@@ -814,8 +814,7 @@ func (b *Builder) CreateImage(version string,
}
 
img.HeaderSize = uint(b.targetBuilder.target.HeaderSize)
-   err = img.Generate(loaderImg)
-   if err != nil {
+   if err := img.Generate(loaderImg); err != nil {
return nil, err
}
 
diff --git a/newt/image/image.go b/newt/image/image.go
index bbc6b5a..557448b 100644
--- a/newt/image/image.go
+++ b/newt/image/image.go
@@ -327,8 +327,8 @@ func ParsePrivateKey(keyBytes []byte) (interface{}, error) {
 */
privKey, err = x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
-   return nil, util.NewNewtError(fmt.Sprintf("Private key 
parsing "+
-   "failed: %s", err))
+   return nil, util.FmtNewtError(
+   "Private key parsing failed: %s", err)
}
}
if block != nil && block.Type == "EC PRIVATE KEY" {
@@ -337,8 +337,8 @@ func ParsePrivateKey(keyBytes []byte) (interface{}, error) {
 */
privKey, err = x509.ParseECPrivateKey(block.Bytes)
if err != nil {
-   return nil, util.NewNewtError(fmt.Sprintf("Private key 
parsing "+
-   "failed: %s", err))
+   return nil, util.FmtNewtError(
+   "Private key parsing failed: %s", err)
}
}
if block != nil && block.Type == "PRIVATE KEY" {
@@ -347,8 +347,8 @@ func ParsePrivateKey(keyBytes []byte) (interface{}, error) {
// the key itself.
privKey, err = x509.ParsePKCS8PrivateKey(block.Bytes)
if err != nil {
-   return nil, util.NewNewtError(fmt.Sprintf("Private key 
parsing "+
-   "failed: %s", err))
+   return nil, util.FmtNewtError(
+   "Private key parsing failed: %s", err)
}
}
if block != nil && block.Type == "ENCRYPTED PRIVATE KEY" {
@@ -487,14 +487,14 @@ func (image *Image) sigTlvType() uint8 {
 func (image *Image) ReSign() error {
srcImg, err := os.Open(image.SourceImg)
if err != nil {
-   return util.NewNewtError(fmt.Sprintf("Can't open image file %s: 
%s",
-   image.SourceImg, err.Error()))
+   return util.FmtNewtError("Can't open image file %s: %s",
+   image.SourceImg, err.Error())
}
 
srcInfo, err := srcImg.Stat()
if err != nil {
-   return util.NewNewtError(fmt.Sprintf("Can't stat image file %s: 
%s",
-   image.SourceImg, err.Error()))
+   return util.FmtNewtError("Can't stat image file %s: %s",
+   image.SourceImg, err.Error())
}
 
var hdr1 ImageHdrV1
@@ -508,15 +508,15 @@ func (image *Image) ReSign() error {
err = binary.Read(srcImg, binary.LittleEndian, )
}
if err != nil {
-   return util.NewNewtError(fmt.Sprintf("Failing to access image 
%s: %s",
-   image.SourceImg, err.Error()))
+   return util.FmtNewtError("Failing to access image %s: %s",
+   image.SourceImg, err.Error())
}
if hdr1.Magic == IMAGEv1_MAGIC {
if uint32(srcInfo.Size()) !=
uint32(hdr1.HdrSz)+hdr1.ImgSz+uint32(hdr1.TlvSz) {
 
-   return util.NewNewtError(fmt.Sprintf("File %s is not an 
image\n",
-   image.SourceImg))
+   return util.FmtNewtError("File %s is not an image\n",
+

[mynewt-newt] branch master updated (88ad5de -> 9041b05)

2018-11-14 Thread ccollins
This is an automated email from the ASF dual-hosted git repository.

ccollins pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git.


from 88ad5de  resolve: Prune orphan packages during dep resolutn
 new 1831dd3  Some cosmetic changes
 new 426c006  Support arbitrary lists of signing keys
 new 9041b05  Allow key list to be specified in `newt run`.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 newt/builder/build.go   |  17 +-
 newt/builder/targetbuild.go |   6 +-
 newt/cli/image_cmds.go  |  49 ++--
 newt/cli/run_cmds.go|  15 +-
 newt/image/image.go | 702 +++-
 5 files changed, 425 insertions(+), 364 deletions(-)



[GitHub] ccollins476ad closed pull request #238: Support arbitrary lists of signing keys

2018-11-14 Thread GitBox
ccollins476ad closed pull request #238: Support arbitrary lists of signing keys
URL: https://github.com/apache/mynewt-newt/pull/238
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/newt/builder/build.go b/newt/builder/build.go
index ff6d5054..9db22135 100644
--- a/newt/builder/build.go
+++ b/newt/builder/build.go
@@ -285,7 +285,7 @@ func (b *Builder) newCompiler(bpkg *BuildPackage,
return nil, err
}
 
-   log.Warnf("Unsupported build profile for package, using default 
build profile " +
+   log.Warnf("Unsupported build profile for package, using default 
build profile "+
"(pkg=\"%s\" build_profile=\"%s\" OS=\"%s\")",
bpkg.rpkg.Lpkg.FullName(), buildProfile, runtime.GOOS)
 
@@ -794,7 +794,8 @@ func (b *Builder) buildRomElf(common *symbol.SymbolMap) 
error {
 }
 
 func (b *Builder) CreateImage(version string,
-   keystr string, keyId uint8, loaderImg *image.Image) (*image.Image, 
error) {
+   keystrs []string, keyId uint8,
+   loaderImg *image.Image) (*image.Image, error) {
 
img, err := image.NewImage(b.AppBinPath(), b.AppImgPath())
if err != nil {
@@ -806,16 +807,18 @@ func (b *Builder) CreateImage(version string,
return nil, err
}
 
-   if keystr != "" {
-   err = img.SetSigningKey(keystr, keyId)
-   if err != nil {
+   if len(keystrs) == 1 {
+   if err := img.SetKeyV1(keystrs[0], keyId); err != nil {
+   return nil, err
+   }
+   } else {
+   if err := img.SetKeys(keystrs); err != nil {
return nil, err
}
}
 
img.HeaderSize = uint(b.targetBuilder.target.HeaderSize)
-   err = img.Generate(loaderImg)
-   if err != nil {
+   if err := img.Generate(loaderImg); err != nil {
return nil, err
}
 
diff --git a/newt/builder/targetbuild.go b/newt/builder/targetbuild.go
index 9ee7317d..f5fa8e64 100644
--- a/newt/builder/targetbuild.go
+++ b/newt/builder/targetbuild.go
@@ -867,7 +867,7 @@ func (t *TargetBuilder) verifyImgSizes(li *image.Image, ai 
*image.Image) error {
 
 // @return  app-image, loader-image, error
 func (t *TargetBuilder) CreateImages(version string,
-   keystr string, keyId uint8) (*image.Image, *image.Image, error) {
+   keystrs []string, keyId uint8) (*image.Image, *image.Image, error) {
 
if err := t.Build(); err != nil {
return nil, nil, err
@@ -883,7 +883,7 @@ func (t *TargetBuilder) CreateImages(version string,
}
 
if t.LoaderBuilder != nil {
-   loaderImg, err = t.LoaderBuilder.CreateImage(version, keystr, 
keyId,
+   loaderImg, err = t.LoaderBuilder.CreateImage(version, keystrs, 
keyId,
nil)
if err != nil {
return nil, nil, err
@@ -900,7 +900,7 @@ func (t *TargetBuilder) CreateImages(version string,
}
}
 
-   appImg, err = t.AppBuilder.CreateImage(version, keystr, keyId, 
loaderImg)
+   appImg, err = t.AppBuilder.CreateImage(version, keystrs, keyId, 
loaderImg)
if err != nil {
return nil, nil, err
}
diff --git a/newt/cli/image_cmds.go b/newt/cli/image_cmds.go
index 3063d3e7..73459ed4 100644
--- a/newt/cli/image_cmds.go
+++ b/newt/cli/image_cmds.go
@@ -32,9 +32,28 @@ import (
 var useV1 bool
 var useV2 bool
 
+func parseKeyArgs(args []string) ([]string, uint8, error) {
+   if len(args) == 0 {
+   return nil, 0, nil
+   }
+
+   if len(args) == 1 {
+   return args, 0, nil
+   }
+
+   if image.UseV1 {
+   keyId64, err := strconv.ParseUint(args[1], 10, 8)
+   if err != nil {
+   return nil, 0, util.NewNewtError("Key ID must be 
between 0-255")
+   }
+   return args[:1], uint8(keyId64), nil
+   }
+
+   return args, 0, nil
+}
+
 func createImageRunCmd(cmd *cobra.Command, args []string) {
var keyId uint8
-   var keystr string
 
if len(args) < 2 {
NewtUsage(cmd, util.NewNewtError("Must specify target and 
version"))
@@ -59,26 +78,18 @@ func createImageRunCmd(cmd *cobra.Command, args []string) {
 
version := args[1]
 
-   if len(args) > 2 {
-   if len(args) > 3 {
-   keyId64, err := strconv.ParseUint(args[3], 10, 8)
-   if err != nil {
-   NewtUsage(cmd,
-   util.NewNewtError("Key ID must be 
between 0-255"))
-

[mynewt-newt] 02/03: Support arbitrary lists of signing keys

2018-11-14 Thread ccollins
This is an automated email from the ASF dual-hosted git repository.

ccollins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit 426c006c3b9229f3cda4a84605f112e10f1e1458
Author: Christopher Collins 
AuthorDate: Mon Nov 12 12:41:02 2018 -0800

Support arbitrary lists of signing keys

Prior to this commit, newt allowed one RSA key and / or one ECC key per
image.

This commit allows images to be signed by an arbitrary list of keys
(e.g., 3 RSA keys and 2 ECC keys).
---
 newt/builder/build.go   |  12 +-
 newt/builder/targetbuild.go |   6 +-
 newt/cli/image_cmds.go  |  49 +++--
 newt/image/image.go | 513 
 4 files changed, 318 insertions(+), 262 deletions(-)

diff --git a/newt/builder/build.go b/newt/builder/build.go
index 9336465..9db2213 100644
--- a/newt/builder/build.go
+++ b/newt/builder/build.go
@@ -794,7 +794,8 @@ func (b *Builder) buildRomElf(common *symbol.SymbolMap) 
error {
 }
 
 func (b *Builder) CreateImage(version string,
-   keystr string, keyId uint8, loaderImg *image.Image) (*image.Image, 
error) {
+   keystrs []string, keyId uint8,
+   loaderImg *image.Image) (*image.Image, error) {
 
img, err := image.NewImage(b.AppBinPath(), b.AppImgPath())
if err != nil {
@@ -806,9 +807,12 @@ func (b *Builder) CreateImage(version string,
return nil, err
}
 
-   if keystr != "" {
-   err = img.SetSigningKey(keystr, keyId)
-   if err != nil {
+   if len(keystrs) == 1 {
+   if err := img.SetKeyV1(keystrs[0], keyId); err != nil {
+   return nil, err
+   }
+   } else {
+   if err := img.SetKeys(keystrs); err != nil {
return nil, err
}
}
diff --git a/newt/builder/targetbuild.go b/newt/builder/targetbuild.go
index 9ee7317..f5fa8e6 100644
--- a/newt/builder/targetbuild.go
+++ b/newt/builder/targetbuild.go
@@ -867,7 +867,7 @@ func (t *TargetBuilder) verifyImgSizes(li *image.Image, ai 
*image.Image) error {
 
 // @return  app-image, loader-image, error
 func (t *TargetBuilder) CreateImages(version string,
-   keystr string, keyId uint8) (*image.Image, *image.Image, error) {
+   keystrs []string, keyId uint8) (*image.Image, *image.Image, error) {
 
if err := t.Build(); err != nil {
return nil, nil, err
@@ -883,7 +883,7 @@ func (t *TargetBuilder) CreateImages(version string,
}
 
if t.LoaderBuilder != nil {
-   loaderImg, err = t.LoaderBuilder.CreateImage(version, keystr, 
keyId,
+   loaderImg, err = t.LoaderBuilder.CreateImage(version, keystrs, 
keyId,
nil)
if err != nil {
return nil, nil, err
@@ -900,7 +900,7 @@ func (t *TargetBuilder) CreateImages(version string,
}
}
 
-   appImg, err = t.AppBuilder.CreateImage(version, keystr, keyId, 
loaderImg)
+   appImg, err = t.AppBuilder.CreateImage(version, keystrs, keyId, 
loaderImg)
if err != nil {
return nil, nil, err
}
diff --git a/newt/cli/image_cmds.go b/newt/cli/image_cmds.go
index 3063d3e..73459ed 100644
--- a/newt/cli/image_cmds.go
+++ b/newt/cli/image_cmds.go
@@ -32,9 +32,28 @@ import (
 var useV1 bool
 var useV2 bool
 
+func parseKeyArgs(args []string) ([]string, uint8, error) {
+   if len(args) == 0 {
+   return nil, 0, nil
+   }
+
+   if len(args) == 1 {
+   return args, 0, nil
+   }
+
+   if image.UseV1 {
+   keyId64, err := strconv.ParseUint(args[1], 10, 8)
+   if err != nil {
+   return nil, 0, util.NewNewtError("Key ID must be 
between 0-255")
+   }
+   return args[:1], uint8(keyId64), nil
+   }
+
+   return args, 0, nil
+}
+
 func createImageRunCmd(cmd *cobra.Command, args []string) {
var keyId uint8
-   var keystr string
 
if len(args) < 2 {
NewtUsage(cmd, util.NewNewtError("Must specify target and 
version"))
@@ -59,26 +78,18 @@ func createImageRunCmd(cmd *cobra.Command, args []string) {
 
version := args[1]
 
-   if len(args) > 2 {
-   if len(args) > 3 {
-   keyId64, err := strconv.ParseUint(args[3], 10, 8)
-   if err != nil {
-   NewtUsage(cmd,
-   util.NewNewtError("Key ID must be 
between 0-255"))
-   }
-   keyId = uint8(keyId64)
-   }
-   keystr = args[2]
-   }
-
b, err := builder.NewTargetBuilder(t)
if err != nil {
NewtUsage(nil, err)
}
 
-   if _, _, err := b.CreateImages(version, keystr, keyId); err != nil {
+