Date   

BLE encryption : Which AES 128 decryptor to be used?

frv
 

Hi,


If I want to use "bt_encrypt_le", what should be the specification to find the right AES decryptor?


I thought I could use the AES_ECB_decrypt from the tiny-AES-C library see : https://github.com/bricke/tiny-AES-C

github.com
Tiny AES in C. This is a small and portable implementation of the AES ECB and CBC encryption algorithms written in C. The API is very simple and looks like this (I am using C99 <stdint.h>-style annotated types):

But without success so far.


I also see that the encrypted data done with both functions: bt_encrypt_le and  AES_ECB_encrypt are not the same.


Nevertheless I can use tiny-AES-C on Zephyr. Just wondering why both are not compatible.



u8_t enc_data[16];
        u8_t key[]       = { 0x01, 0x02, 0x03, 0x04, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7 };
        u8_t plaintext[] = { 0x01, 0x02, 0x03, 0x04, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };

        AES_ECB_encrypt(plaintext, key, enc_data, 16);
        printk("encrypted text = %x %x %x %x %x\n", enc_data[0], enc_data[1], enc_data[2], enc_data[3], enc_data[4]);

        if (bt_encrypt_le(key, plaintext, enc_data) != 0)
        {
           printk("Encryption failed for passkey");
        }
        else
        {
           printk("encrypted text = %x %x %x %x %x\n", enc_data[0], enc_data[1], enc_data[2], enc_data[3],                                                                                            enc_data[4]);
        }


Any idea?


Thanks in advance,

Best regards,

Frank


Re: NFC support Zephyr voor LE OOB secured pairing...

frv
 

Hi Joakim,

Thanks for your feedback on the topic.

Indeed currently I'm using "passkey authorization" during the pairing process. Although I don't have a keyboard or display on my BLE devices I have created an "automated pairing" process based on passkey verification.

On my Zephyr board acting as BLE peripheral I set a random generated passkey (6 digits).

static void auth_passkey_entry(struct bt_conn *conn, unsigned int passkey)
{       
        bt_passkey_set(random_key);
}

This passkey will be transmitted encrypted by AES 128 via the BLE advertisement. Only a BLE central device having the same private  AES key will be able to decrypt it.

On my BLE central I'm running a BLE QT application that manages to set the passkey automatically without user interaction. When the BLE central tries to pair with the BLE peripheral (Zephyr), the BLE central application injects automatically the passkey (BlueZ Dbus API) when asked.  

So I just need the NFC process on the Zephyr board for receiving the private AES key during the commissioning phase. 

Best regards,
Frank


BLE Advertising raw data via scan response - bt_le_adv_start

frv
 

Hi,


I don't know what I'm doing wrong when trying to advertise raw data via the scan_response function parameter in bt_le_adv_start, probably overlooking something stupid, but I don't get this to work at least if I try to use the bd1 as parameter in the "bt_le_adv_start" function :



       struct bt_data bd[] = { BT_DATA_BYTES(0x00, 0x22, 0x0a, 0x01, 0x02, 0x03, 0x0a, 0x33), };

        u8_t bdData[] = {0x22, 0x0a, 0x01, 0x02, 0x03, 0x0a, 0x33};

        struct bt_data bd1[0];
        bd1[0].type = 0x0;
        bd1[0].data = bdData;
        bd1[0].data_len = sizeof(bdData);

        printk("size of data = %d\n", sizeof(bdData));
        //printk("data = %s\n length = %d", bd[0].data, bd[0].data_len);

        err = bt_le_adv_start(BT_LE_ADV_CONN_NAME, ad, ARRAY_SIZE(ad), bd, ARRAY_SIZE(bd));
        if (err) {
                printk("Advertising failed to start (err %d)\n", err);
                return;
        }

However it works when constructing the data via BT_DATA_BYTES thus via  using the bd data variable (see first line of coding) ...

Any idea what I'm doing wrong?

Thanks in advance,
Best regards,
Frank



Build improperly does a partial discard of 'const' defined variables

David Leach
 

I have run across a build problem that appears to impact Arm platforms. The problem involves improper discarding of ‘const’ defined variables that are only referenced within a single file getting partially optimized out by the final linker stage. The map file shows the symbol in the Discard section but there is code still referencing that variable so the result is that the variable is located at address 0… all const variables that have this problem are located at address zero because the final linker stage didn’t fixup the address with a proper location.

 

This problem can be seen in the ‘hello world’ sample by looking at what the linker does with _main_thread defined in init.c. The map file shows it as a discarded symbol but it is still in the elf file and you can inspect it with gdb and see that it is at address 0.

 

The final link stage links some of the libraries using the –whole-archive flag and some of the others using the –no-whole-archive flag so as an experiment I linked all libraries using just the whole-archive flag and it appeared to properly place the const variable.

 

Also note that this doesn’t seem to be a problem when building for x86 targets.

 

I added a bug report on this: https://github.com/zephyrproject-rtos/zephyr/issues/12905

 

 

David Leach

 

NXP Semiconductors

phone: +1.210.241.6761

Email: david.leach@...

 

 

** PROPRIETARY & COMPANY-CONFIDENTIAL **

 


Increasing minimum Zephyr Python version?

Marti Bolivar <marti@...>
 

Hi everyone,

I recently saw this while running test cases for west in Shippable:

DEPRECATION: Python 3.4 support has been deprecated. pip 19.1 will be
the last one supporting it. Please upgrade your Python as Python 3.4
won't be maintained after March 2019

At what point do we think we might want to move up to at least 3.5?
Are there any developers of Python code in the Zephyr tree who feel
hamstrung by limitations in Python 3.4?

Thanks,
Marti


https://scan.coverity.com/ is back online in read-only mode

Nashif, Anas
 

Hi,

 

The service is back in read-only mode. If you have any issues assigned to you, please take the chance to look at the details of the issue and fix as soon as possible.

List of the open coverity issues is available here:

 

https://github.com/zephyrproject-rtos/zephyr/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3ACoverity

 

 

 

Thanks,

Anas

 

 

 


Zephyr/BLE stack: Problem pairing/bonding more than one device, whilst the first device is still connected.

Declan Traill <declan.traill@...>
 

Hi Zephyr group,

 

    We have found on our Zephyr system that the first device (Android or iOS) pairs/bonds with not problems, but a second (or third etc) device fails to pair/bond most of the time.
Sometimes it works ok & both devices become paired/bonded and stay connected, but most of the time it fails and the second device is disconnected as soon as the pairing key has been entered on the device.

Here is some debug output for when the pairing/bonding of the first device works, and then when it fails for the second device:

 

WHEN IT WORKS (FOR THE FIRST DEVICE):

 

[ble_p] [INF] ble_p_connected: 1/4, 00:00:46:00:00:01 (public) is NOT bonded

passkey display 520717

[] [INF] rvmn_ui_bt_auth_pairing_complete: 00:00:46:00:00:01 (public), bonded:1

[] [ERR] rvmn_ui_bt_auth_pairing_complete: not bonded

 

 

WHEN IT DOESN’T WORK (FOR THE SECOND DEVICE):

 

ble_p] [INF] ble_p_connected: 2/4, d4:61:9d:ee:41:53 (public) is NOT bonded

passkey display 183049

[ble_p] [INF] ble_p_disconnected: 2/4, d4:61:9d:ee:41:53 (public) is NOT bonded

[ble_p] [ERR] ble_p_disconnected: 1/4, d4:61:9d:ee:41:53 (public) NOT

[ble_p] [DBG] ble_p_disconnected: d4:61:9d:ee:41:53 (public), reason 0x08: BT_HCI_ERR_CONN_TIMEOUT

 

 

 

I investigated the cause of the disconnection in the Zephyr BLE stack, and found it to be caused by trx_done  not being TRUE when the isr() function is called (in ctrl.c) whilst in STATE_RX  _radio.state:

 

The trx_done is set based on the value of NRF_RADIO->EVENTS_END.

It seems that when the second device tries to pair, we get a BLE isr() occur whilst in STATE_RX, but NRF_RADIO->EVENTS_END is not set.
Thus it appears to not have completed a Tx/Rx in the Radio?

Why is this happening, and is there some configuration/setting we can change to fix this, or is it a Zephyr BLE stack bug?

 

 

 

Here is the code:

 

 

u32_t radio_is_done(void)

{

       if (NRF_RADIO->EVENTS_END != 0) {

              /* On packet END event increment last packet end time value.

              * Note: this depends on the function being called exactly once

              * in the ISR function.

              */

              last_pdu_end_us += EVENT_TIMER->CC[2];

              return 1;

       } else {

              return 0;

       }

}

 

#else /* !CONFIG_BT_CTLR_SW_SWITCH_SINGLE_TIMER */

u32_t radio_is_done(void)

{

       return (NRF_RADIO->EVENTS_END != 0);

}

#endif /* !CONFIG_BT_CTLR_SW_SWITCH_SINGLE_TIMER */

 

 

 

static void isr(void)

{

       u8_t trx_done;

       u8_t crc_ok;

       u8_t devmatch_ok;

       u8_t devmatch_id;

       u8_t irkmatch_ok;

       u8_t irkmatch_id;

       u8_t rssi_ready;

 

       DEBUG_RADIO_ISR(1);

 

       /* Read radio status and events */

       trx_done = radio_is_done();

       if (trx_done) {

 

#if defined(CONFIG_BT_CTLR_PROFILE_ISR)

              /* sample the packet timer here, use it to calculate ISR latency

              * and generate the profiling event at the end of the ISR.

              */

              radio_tmr_sample();

#endif /* CONFIG_BT_CTLR_PROFILE_ISR */

 

              crc_ok = radio_crc_is_valid();

              devmatch_ok = radio_filter_has_match();

              devmatch_id = radio_filter_match_get();

              irkmatch_ok = radio_ar_has_match();

              irkmatch_id = radio_ar_match_get();

              rssi_ready = radio_rssi_is_ready();

       } else {

              crc_ok = devmatch_ok = irkmatch_ok = rssi_ready = 0;

              devmatch_id = irkmatch_id = 0xFF;

       }

 

       /* Clear radio status and events */

       radio_status_reset();

       radio_tmr_status_reset();

       radio_filter_status_reset();

       radio_ar_status_reset();

       radio_rssi_status_reset();

 

#if defined(CONFIG_BT_CTLR_GPIO_PA_PIN) || \

    defined(CONFIG_BT_CTLR_GPIO_LNA_PIN)

       radio_gpio_pa_lna_disable();

#endif /* CONFIG_BT_CTLR_GPIO_PA_PIN || CONFIG_BT_CTLR_GPIO_LNA_PIN */

 

       switch (_radio.state) {

       case STATE_TX:

              isr_radio_state_tx();

              break;

 

       case STATE_RX:

              isr_radio_state_rx(trx_done, crc_ok, devmatch_ok, devmatch_id,

                              irkmatch_ok, irkmatch_id, rssi_ready);

              break;

 

       case STATE_ABORT:

       case STATE_STOP:

       case STATE_CLOSE:

              isr_radio_state_close();

              break;

 

       case STATE_NONE:

              /* Ignore Duplicate Radio Disabled IRQ due to forced stop

              * using Radio Disable task.

              */

              break;

 

       default:

              LL_ASSERT(0);

              break;

       }

 

       DEBUG_RADIO_ISR(0);

}

 

 

At the start of the function isr_radio_state_rx, trx_done is tested, and if not true, _radio.state is set to STATE_CLOSE, then the connection is closed

 

static inline void isr_radio_state_rx(u8_t trx_done, u8_t crc_ok,

                                 u8_t devmatch_ok, u8_t devmatch_id,

                                 u8_t irkmatch_ok, u8_t irkmatch_id,

                                 u8_t rssi_ready)

{

       u32_t err;

       u8_t  rl_idx;

 

       if (!((trx_done) || ((SILENT_CONNECTION) &&

                          (_radio.role == ROLE_SLAVE)))) {

              _radio.state = STATE_CLOSE;

              radio_disable();

 

              return;

       }

 

 

 

static inline void isr_radio_state_close(void)

{

       u32_t dont_close = 0;

 

       switch (_radio.role) {

       case ROLE_ADV:

              dont_close = isr_close_adv();

              break;

 

       case ROLE_SCAN:

              dont_close = isr_close_scan();

              break;

 

       case ROLE_SLAVE:

       case ROLE_MASTER:

              isr_close_conn();

              break;

 

 

This is the function called from code above, resulting in the connection being closed with a BT_HCI_ERR_CONN_TIMEOUT

 

static inline void isr_close_conn(void)

{

       u16_t ticks_drift_plus;

       u16_t ticks_drift_minus;

       u16_t latency_event;

       u16_t elapsed_event;

       u8_t reason_peer;

       u16_t lazy;

       u8_t force;

 

       /* Local initiated terminate happened */

       if (_radio.conn_curr == 0) {

              return;

       }

 

       /* Master transmitted ack for the received terminate ind or

       * Slave received terminate ind.

       */

       reason_peer = _radio.conn_curr->llcp_terminate.reason_peer;

       if (reason_peer && ((_radio.role == ROLE_SLAVE) ||

                         _radio.conn_curr->master.terminate_ack)) {

              terminate_ind_rx_enqueue(_radio.conn_curr, reason_peer);

 

              connection_release(_radio.conn_curr);

              _radio.conn_curr = NULL;

 

              return;

       }

 

       ticks_drift_plus = 0;

       ticks_drift_minus = 0;

       latency_event = _radio.conn_curr->latency_event;

       elapsed_event = latency_event + 1;

 

       /* calculate drift if anchor point sync-ed */

       if (_radio.packet_counter &&

           (!SILENT_CONNECTION || (_radio.packet_counter != 0xFF))) {

              if (_radio.role == ROLE_SLAVE) {

                     u32_t start_to_address_expected_us;

                     u32_t start_to_address_actual_us;

                     u32_t window_widening_event_us;

                     u32_t preamble_to_addr_us;

 

                     /* calculate the drift in ticks */

                     start_to_address_actual_us = radio_tmr_aa_restore() -

                                              radio_tmr_ready_get();

                     window_widening_event_us =

                           _radio.conn_curr->slave.window_widening_event_us;

#if defined(CONFIG_BT_CTLR_PHY)

                     preamble_to_addr_us =

                           addr_us_get(_radio.conn_curr->phy_rx);

#else /* !CONFIG_BT_CTLR_PHY */

                     preamble_to_addr_us = addr_us_get(0);

#endif /* !CONFIG_BT_CTLR_PHY */

                     start_to_address_expected_us = RADIO_TICKER_JITTER_US +

                           (RADIO_TICKER_JITTER_US << 1) +

                           preamble_to_addr_us +

                           window_widening_event_us;

                     if (start_to_address_actual_us <=

                         start_to_address_expected_us) {

                           ticks_drift_plus = HAL_TICKER_US_TO_TICKS(

                                  window_widening_event_us);

                           ticks_drift_minus = HAL_TICKER_US_TO_TICKS(

                                  (start_to_address_expected_us -

                                  start_to_address_actual_us));

                     } else {

                           ticks_drift_plus = HAL_TICKER_US_TO_TICKS(

                                  start_to_address_actual_us);

                           ticks_drift_minus = HAL_TICKER_US_TO_TICKS(

                                  RADIO_TICKER_JITTER_US +

                                  (RADIO_TICKER_JITTER_US << 1) +

                                  preamble_to_addr_us);

                     }

 

                     /* Reset window widening, as anchor point sync-ed */

                     _radio.conn_curr->slave.window_widening_event_us = 0;

                     _radio.conn_curr->slave.window_size_event_us = 0;

 

                     /* apply latency if no more data */

                     if (_radio.conn_curr->pkt_tx_head) {

                           struct pdu_data *pdu_data_tx;

 

                           pdu_data_tx = (void *)

                                  _radio.conn_curr->pkt_tx_head->pdu_data;

                           if (pdu_data_tx->len ||

                               _radio.conn_curr->packet_tx_head_offset) {

                                  _radio.conn_curr->latency_event = 0;

                           }

                     } else if (_radio.conn_curr->slave.latency_enabled) {

                           _radio.conn_curr->latency_event =

                                  _radio.conn_curr->latency;

                     }

              } else if (reason_peer) {

                     _radio.conn_curr->master.terminate_ack = 1;

              }

 

              /* Reset connection failed to establish procedure */

              _radio.conn_curr->connect_expire = 0;

       }

 

       /* check connection failed to establish */

       else if (_radio.conn_curr->connect_expire) {

              if (_radio.conn_curr->connect_expire > elapsed_event) {

                     _radio.conn_curr->connect_expire -= elapsed_event;

              } else {

                     terminate_ind_rx_enqueue(_radio.conn_curr,

                                         BT_HCI_ERR_CONN_FAIL_TO_ESTAB);

 

                     connection_release(_radio.conn_curr);

                     _radio.conn_curr = NULL;

 

                     return;

              }

       }

 

       /* if anchor point not sync-ed, start supervision timeout, and break

       * latency if any.

       */

       else {

              /* Start supervision timeout, if not started already */

              if (!_radio.conn_curr->supervision_expire) {

                     _radio.conn_curr->supervision_expire =

                           _radio.conn_curr->supervision_reload;

              }

       }

 

       /* check supervision timeout */

       force = 0;

       if (_radio.conn_curr->supervision_expire) {

              if (_radio.conn_curr->supervision_expire > elapsed_event) {

                     _radio.conn_curr->supervision_expire -= elapsed_event;

 

                     /* break latency */

                     _radio.conn_curr->latency_event = 0;

 

                     /* Force both master and slave when close to

                     * supervision timeout.

                     */

                     if (_radio.conn_curr->supervision_expire <= 6) {

                           force = 1;

                     }

                     /* use randomness to force slave role when anchor

                     * points are being missed.

                     */

                     else if (_radio.role == ROLE_SLAVE) {

                           if (latency_event != 0) {

                                  force = 1;

                           } else {

                                  force = _radio.conn_curr->slave.force & 0x01;

 

                                  /* rotate force bits */

                                  _radio.conn_curr->slave.force >>= 1;

                                  if (force) {

                                         _radio.conn_curr->slave.force |=

                                                ((u32_t)1 << 31);

                                  }

                           }

                     }

              } else {

                     terminate_ind_rx_enqueue(_radio.conn_curr,

                                         BT_HCI_ERR_CONN_TIMEOUT);

 

                     connection_release(_radio.conn_curr);

                     _radio.conn_curr = NULL;

 

                     return;

              }

       }

 

   Thanks for any help you can provide…

 

Regards,

Declan Traill
Embedded Firmware Engineer
declan.traill@...

SETEC Pty Ltd
19 Henderson Road, Knoxfield 3180, Victoria, Australia
Phone: +61 3 9763 0962
Fax: +61 3 9763 8789
Direct: +61 3 9213 8458
setec.com.au | teambmpro.com

SETEC on Facebook     SETEC on Instagram     SETEC on LinkedIn     SETEC on YouTube
SETEC Celebrating 50 Years



Email from setec.com.au does not necessarily represent the official policy of SETEC Pty Ltd.
See Email Disclaimer 20060629 for details.



Re: warning: TEST_RANDOM_GENERATOR

alpi@...
 

Hi,
The native_posix board does not use the Bluetooth simulator.
Its random generator is deterministic, but can be seeded ( --seed=<random_seed>) to enable reproducible tests(*1).

The nrf52_bsim board (*2) does use the Bluetooth simulator (BabbleSim, a.k.a. bsim (*3)), and has another random generator (a model of the nRF5x RNG HW) which is also deterministic and can be seeded.

What these 2 Zephyr targets have in common is that both are based on the POSIX architecture. So the result of building targeting these boards is actually a native executable for the host computer, which the developer can run and debug like a normal Linux program.
Apart from this, the nrf52_bsim RADIO HW models, use the BabbleSim physical layer simulator to simulate the radio activity, and communicate with other simulated devices.

1 https://docs.zephyrproject.org/latest/boards/posix/native_posix/doc/board.html#peripherals
2 https://docs.zephyrproject.org/latest/boards/posix/nrf52_bsim/doc/board.html
3 https://babblesim.github.io

BR
Alberto

-----Original Message-----
From: Paul Sokolovsky [mailto:paul.sokolovsky@linaro.org]
Sent: Wednesday 30 January 2019 08:22
To: Alberto Escolar Piedras (ALPI) <ALPI@oticon.com>; devel@lists.zephyrproject.org
Subject: Re: [Zephyr-devel] warning: TEST_RANDOM_GENERATOR

Hello Alberto,

On Wed, 30 Jan 2019 07:15:41 +0000
"Alberto Escolar Piedras (ALPI)" <ALPI@oticon.com> wrote:

Regarding "predictable random number generator", that's interesting
idea for some kinds of testing, but I'm personally not aware of us
using such advanced and cunning test methods in Zephyr.
That's the native posix one ;)
D'oh, I stand corrected. Now I remember it, Bluetooth simulation support, right?

[]

--
Best Regards,
Paul

Linaro.org | Open source software for ARM SoCs Follow Linaro: http://www.facebook.com/pages/Linaro
http://twitter.com/#!/linaroorg - http://www.linaro.org/linaro-blog


Re: warning: TEST_RANDOM_GENERATOR

Paul Sokolovsky
 

Hello Alberto,

On Wed, 30 Jan 2019 07:15:41 +0000
"Alberto Escolar Piedras (ALPI)" <ALPI@oticon.com> wrote:

Regarding "predictable random number generator", that's interesting
idea for some kinds of testing, but I'm personally not aware of us
using such advanced and cunning test methods in Zephyr.
That's the native posix one ;)
D'oh, I stand corrected. Now I remember it, Bluetooth simulation
support, right?

[]

--
Best Regards,
Paul

Linaro.org | Open source software for ARM SoCs
Follow Linaro: http://www.facebook.com/pages/Linaro
http://twitter.com/#!/linaroorg - http://www.linaro.org/linaro-blog


Code Freeze for 1.14 on Friday Feb 1st

Kumar Gala
 

All,

Just wanted to remind everyone that the code freeze for 1.14 will be this Friday. Please tag any PR as with 1.14 milestone that you feel should try and get merged as part of 1.14.

Thanks

- k


Re: warning: TEST_RANDOM_GENERATOR

Paul Sokolovsky
 

Hello Andrei,

On Tue, 29 Jan 2019 13:35:19 +0000
"Andrei Gansari" <andrei.gansari@nxp.com> wrote:

Hello everyone,

I have a question regarding TEST_RANDOM_GENERATOR.
When building networking samples for boards with entropy devices is
get the warning: warning: TEST_RANDOM_GENERATOR (defined at
subsys/random/Kconfig:8) was assigned the value 'y' but got the value
'n'.

We find in subsys/random/Kconfig
TEST_RANDOM_GENERATOR depends on !ENTROPY_HAS_DRIVER
ENTROPY_DEVICE_RANDOM_GENERATOR depends on ENTROPY_HAS_DRIVER

Most networking samples have set TEST_RANDOM_GENERATOR=y and as I
understand it's for pseudo-random number generation. Boards that have
entropy devices (ENTROPY_HAS_DRIVER) will disable
TEST_RANDOM_GENERATOR.

When setting TEST_RANDOM_GENERATOR we just want a random generator or
we want a predictable/intuitive random number generator?
We want to have a "random generator" device be present in Zephyr
setup, which various subsystems then can use (instead of failing). So,
TEST_RANDOM_GENERATOR is a fallback choice which is always available.
For example, it's available in qemu_* boards, which otherwise don't
have a "real" randomgen. That's why you see TEST_RANDOM_GENERATOR in
many networking samples - the only way to make networking samples
accessing to *anyone* is to make sure they run with qemu networking.

Regarding "predictable random number generator", that's interesting
idea for some kinds of testing, but I'm personally not aware of us
using such advanced and cunning test methods in Zephyr.

If we want
both type of generators, then we could remove ENTROPY_HAS_DRIVER
check on TEST_RANDOM_GENERATOR?

Is this an issue?


Andrei G.
[]

--
Best Regards,
Paul

Linaro.org | Open source software for ARM SoCs
Follow Linaro: http://www.facebook.com/pages/Linaro
http://twitter.com/#!/linaroorg - http://www.linaro.org/linaro-blog


warning: TEST_RANDOM_GENERATOR

Andrei Gansari
 

Hello everyone,

 

I have a question regarding TEST_RANDOM_GENERATOR.

When building networking samples for boards with entropy devices is get the warning:

warning: TEST_RANDOM_GENERATOR (defined at subsys/random/Kconfig:8) was assigned the value 'y' but got the value 'n'.

 

We find in subsys/random/Kconfig

TEST_RANDOM_GENERATOR depends on !ENTROPY_HAS_DRIVER

ENTROPY_DEVICE_RANDOM_GENERATOR depends on ENTROPY_HAS_DRIVER

 

Most networking samples have set TEST_RANDOM_GENERATOR=y and as I understand it's for pseudo-random number generation. Boards that have entropy devices (ENTROPY_HAS_DRIVER) will disable TEST_RANDOM_GENERATOR.

 

When setting TEST_RANDOM_GENERATOR we just want a random generator or we want a predictable/intuitive random number generator?

If we want both type of generators, then we could remove ENTROPY_HAS_DRIVER check on TEST_RANDOM_GENERATOR?

 

Is this an issue?

 

 

Andrei G.


More datails about HAL architecture

Francesco Franchina <cescus92@...>
 

Hello everyone!

I'm new to Zephyr and I'm considering to use it to build my next wearable project that will be based on the nRF5 SoC.

Having studied a bit the architecture of features of the project it seems a pretty good choice to me but I still have a doubt that I could not solve reading the documentation and looking around in the web.

I've read about the policy of adopting the HALs of different vendors but I didn't understand:
1) Are there some development policies that ensure that they will not interfere with my code? (e.g. do they mess with interrupts, registers or tasks?)
2) Do they behave consistently across all the supported board or I should expect some slightly different behaviors?

Thanks in advance for your time!

Francesco


Re: [Zephyr-users] Introducing west, Zephyr's meta-tool

Carles Cufi
 

Hi Luiz,

-----Original Message-----
From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
Sent: 29 January 2019 12:25
To: Cufi, Carles <Carles.Cufi@nordicsemi.no>
Cc: Jamie Mccrae <Jamie.Mccrae@lairdtech.com>; zephyr-devel <zephyr-
devel@lists.zephyrproject.org>; zephyr-users@lists.zephyrproject.org
Subject: Re: [Zephyr-devel] [Zephyr-users] Introducing west, Zephyr's
meta-tool

Hi Carles,
On Tue, Jan 29, 2019 at 11:40 AM Cufi, Carles
<Carles.Cufi@nordicsemi.no> wrote:

Hi Jamie, Luiz,

-----Original Message-----
From: Jamie Mccrae <Jamie.Mccrae@lairdtech.com>
Sent: 29 January 2019 10:35
To: Luiz Augusto von Dentz <luiz.dentz@gmail.com>; Cufi, Carles
<Carles.Cufi@nordicsemi.no>
Cc: zephyr-devel <zephyr-devel@lists.zephyrproject.org>; zephyr-
users@lists.zephyrproject.org
Subject: RE: [Zephyr-devel] [Zephyr-users] Introducing west,
Zephyr's meta-tool

Hi Carles,
Note that we have not at any point considered moving away from
GitHub. The plan is to adapt to what the service offers and try to
find a solution that works well with it. This is also one of the
reasons we are first introducing west without actually splitting the
ext/ folder into multiple external repos: we want to expose users to
west before we start doing more radical changes.

Well good, though Im not sure what problem does west solves then?
For pulling it sounds like submodules is the preferable solution
(to linux folks at least):
https://public-inbox.org/git/338901fc-6dc8-2684-c116-393e603f85e9@
suse
.de/t/
I agree with Luiz here, what does west provide that submodules
doesn't provide? Why do I and others now need yet another piece of
software to build Zephyr code (python)?
There are a number of reasons why we don't use Git submodules, all of
which are described in the GitHub issue describing multi-repo:
https://github.com/zephyrproject-rtos/zephyr/issues/6770
Well I didn't have to go as far since someone already commented similar
thing:

https://github.com/zephyrproject-rtos/zephyr/issues/6770#issuecomment-
445496706

So attached vs detached approach, there seems to be quite many on the
camp that we need to have the repositories attached while some
considered the detached approach a must have. As individual contributor
I think using the attached approach is a must, specially if one wants to
actually run sanity checks which sometimes is necessary e.g. when you
are actually writing a test case which depends on a feature from a
different repository.
If by "attached" you mean that projects in the manifest are locked at a particular SHA, then that is exactly what we will do upstream (https://github.com/zephyrproject-rtos/zephyr/blob/master/west.yml#L37). That is not to say that some downstreams may choose to free float on the tip of a branch, but this is *not* going to be the case for upstream Zephyr. I will edit the body of the issue to make that clear.

Regards,

Carles


Re: [Zephyr-users] Introducing west, Zephyr's meta-tool

Luiz Augusto von Dentz
 

Hi Carles,
On Tue, Jan 29, 2019 at 11:40 AM Cufi, Carles <Carles.Cufi@nordicsemi.no> wrote:

Hi Jamie, Luiz,

-----Original Message-----
From: Jamie Mccrae <Jamie.Mccrae@lairdtech.com>
Sent: 29 January 2019 10:35
To: Luiz Augusto von Dentz <luiz.dentz@gmail.com>; Cufi, Carles
<Carles.Cufi@nordicsemi.no>
Cc: zephyr-devel <zephyr-devel@lists.zephyrproject.org>; zephyr-
users@lists.zephyrproject.org
Subject: RE: [Zephyr-devel] [Zephyr-users] Introducing west, Zephyr's
meta-tool

Hi Carles,
Note that we have not at any point considered moving away from
GitHub. The plan is to adapt to what the service offers and try to find
a solution that works well with it. This is also one of the reasons we
are first introducing west without actually splitting the ext/ folder
into multiple external repos: we want to expose users to west before we
start doing more radical changes.

Well good, though Im not sure what problem does west solves then? For
pulling it sounds like submodules is the preferable solution (to linux
folks at least):
https://public-inbox.org/git/338901fc-6dc8-2684-c116-393e603f85e9@suse
.de/t/
I agree with Luiz here, what does west provide that submodules doesn't
provide? Why do I and others now need yet another piece of software to
build Zephyr code (python)?
There are a number of reasons why we don't use Git submodules, all of which are described in the GitHub issue describing multi-repo:
https://github.com/zephyrproject-rtos/zephyr/issues/6770
Well I didn't have to go as far since someone already commented similar thing:

https://github.com/zephyrproject-rtos/zephyr/issues/6770#issuecomment-445496706

So attached vs detached approach, there seems to be quite many on the
camp that we need to have the repositories attached while some
considered the detached approach a must have. As individual
contributor I think using the attached approach is a must, specially
if one wants to actually run sanity checks which sometimes is
necessary e.g. when you are actually writing a test case which depends
on a feature from a different repository.

I encourage you to read through the (admittedly quite long) list of comments there and continue the conversation.

Regards,

Carles

--
Luiz Augusto von Dentz


Re: Introducing west, Zephyr's meta-tool

Carles Cufi
 

Hi all,

West is now merged to master.

The documentation build has completed but the new set of documents have not yet been published to docs.zephyrproject.org. As soon as those are updated online (should take a few hours) you can refer to:

https://docs.zephyrproject.org/latest/getting_started/getting_started.html
and
https://docs.zephyrproject.org/latest/tools/west/index.html

for the west documentation.

Thanks to everybody who has contributed or given feedback so far!

Regards,

Carles

-----Original Message-----
From: Cufi, Carles
Sent: 28 January 2019 09:43
To: zephyr-devel <zephyr-devel@lists.zephyrproject.org>; zephyr-
users@lists.zephyrproject.org
Subject: Introducing west, Zephyr's meta-tool

Hi all,

For a few months now we have been working on a meta-tool named west,
designed to act both as a command-line tool to build, flash an debug
Zephyr-based applications and also to manage the additional Git
repositories that Zephyr will require in order to build in the near
future.

West is written in Python 3, lives in its own repository [1] and its
bootstrapper is available on PyPi [2].
As soon as we merge the topic-west [3] branch into master (which should
happen in the next few days) you will need to install west in order to
flash and debug, since those commands will rely on havig west present as
part of your Zephyr workflow.

The updated west documentation will be online in the Zephyr
documentation website [4] as soon as the topic-west branch is merged
into master. In the meantime you can also look at the unrendered
documentation sources in the topic-west branch [5] and the existing
GitHub issues [6][7].

In order to install the west boostrapper (which you can do today) run:

# On Linux
pip3 install --user west

# On macOS and Windows
pip3 install west

Once the west bootstrapper is installed and the topic-west branch is
merged into master, you will have 2 choices to get a west main
installation.

1. Clone a new copy of the zephyr repository using west:

west init zephyrproject
cd zephyrproject
west update

2. Install west around an existing local zephyr clone:

Move the cloned zephyr/ repository to an empty enclosing folder (for
example zephyrproject/zephyr/), and from this enclosing folder
zephyrproject/ run:

west init -l zephyr/
west update
The -l <path to zephyr> parameter instructs west to use an existing
local copy instead of cloning a remote repository.

Feedback and patches are welcome, but note that the feature will likely
be merged as-is since we consider we have left ample time to raise any
major issues regarding the workflow and decisions taken during the
development of west. This is however only the beginning of west's
(hopefully) long existence as the Zephyr command-line meta-tool, and it
will certainly evolve and change considerably in the future with the
help of the community.

Please submit feedback in the form of GitHub issues on the west
repository itself [1] unless it affects features or functionality in the
zephyr repository directly.

I will reply to this email once the topic-west branch is merged into
master.

Thank you to everybody who has contributed so far!

Regards,

Carles

[1] https://github.com/zephyrproject-rtos/west
[2] https://pypi.org/project/west/
[3] https://github.com/zephyrproject-rtos/zephyr/tree/topic-west
[4] https://docs.zephyrproject.org/latest/tools/west/index.html
[5] https://github.com/zephyrproject-rtos/zephyr/tree/topic-
west/doc/tools/west
[6] https://github.com/zephyrproject-rtos/zephyr/issues/6205
[7] https://github.com/zephyrproject-rtos/zephyr/issues/6770


Re: [Zephyr-users] Introducing west, Zephyr's meta-tool

Carles Cufi
 

Hi Jamie, Luiz,

-----Original Message-----
From: Jamie Mccrae <Jamie.Mccrae@lairdtech.com>
Sent: 29 January 2019 10:35
To: Luiz Augusto von Dentz <luiz.dentz@gmail.com>; Cufi, Carles
<Carles.Cufi@nordicsemi.no>
Cc: zephyr-devel <zephyr-devel@lists.zephyrproject.org>; zephyr-
users@lists.zephyrproject.org
Subject: RE: [Zephyr-devel] [Zephyr-users] Introducing west, Zephyr's
meta-tool

Hi Carles,
Note that we have not at any point considered moving away from
GitHub. The plan is to adapt to what the service offers and try to find
a solution that works well with it. This is also one of the reasons we
are first introducing west without actually splitting the ext/ folder
into multiple external repos: we want to expose users to west before we
start doing more radical changes.

Well good, though Im not sure what problem does west solves then? For
pulling it sounds like submodules is the preferable solution (to linux
folks at least):
https://public-inbox.org/git/338901fc-6dc8-2684-c116-393e603f85e9@suse
.de/t/
I agree with Luiz here, what does west provide that submodules doesn't
provide? Why do I and others now need yet another piece of software to
build Zephyr code (python)?
There are a number of reasons why we don't use Git submodules, all of which are described in the GitHub issue describing multi-repo:
https://github.com/zephyrproject-rtos/zephyr/issues/6770

I encourage you to read through the (admittedly quite long) list of comments there and continue the conversation.

Regards,

Carles


USB audio #nrf52840

marcus
 

Hi,

I am wondering about any plans regarding USB audio and isochronous endpoints.
See github issue: https://github.com/zephyrproject-rtos/zephyr/issues/12775


Re: [Zephyr-users] Introducing west, Zephyr's meta-tool

lairdjm
 

Hi Carles,
Note that we have not at any point considered moving away from GitHub. The plan is to adapt to what the service offers and try to find a solution that works well with it. This is also one of the reasons we are first introducing west without actually splitting the ext/ folder into multiple external repos: we want to expose users to west before we start doing more radical changes.
Well good, though Im not sure what problem does west solves then? For
pulling it sounds like submodules is the preferable solution (to linux
folks at least):
https://public-inbox.org/git/338901fc-6dc8-2684-c116-393e603f85e9@suse.de/t/
I agree with Luiz here, what does west provide that submodules doesn't provide? Why do I and others now need yet another piece of software to build Zephyr code (python)?
Thanks,
Jamie


Re: [Zephyr-users] Introducing west, Zephyr's meta-tool

Luiz Augusto von Dentz
 

Hi Carles,

On Mon, Jan 28, 2019 at 10:54 PM Cufi, Carles <Carles.Cufi@nordicsemi.no> wrote:

Hi Luiz,

-----Original Message-----
From: devel@lists.zephyrproject.org <devel@lists.zephyrproject.org> On
Behalf Of Luiz Augusto von Dentz
Sent: 28 January 2019 21:00
Subject: Re: [Zephyr-devel] [Zephyr-users] Introducing west, Zephyr's
meta-tool

Hi Carles,

How about pull request, how does west deals with them? Or it doesn't and
which case we have to deal with individual git repositories and issue
git push ourselves? This looks like repo which I never liked.
You can see that dealing with Pull Requests is listed as an unresolved issue in the description here:
https://github.com/zephyrproject-rtos/zephyr/issues/6770

There are several possibilities to deal with this, but first and since that you mention Google repo let me make an important distinction. With repo you typically (though not always) track the tip of master on multiple repositories. With west, although that is also possible, we will require specific SHAs for all repos (projects) that are not the main zephyr repo (i.e. the manifest repo).

Options we have (informally, in calls and chats) considered:
1. Send 2 PRs to the 2 repos affected (say for example zephyr + mbedtls), where the branch name used matches. Then CI running in zephyr could look at all repositories listed in the manifest and check if an outstanding PR for it exists with the same GitHub username and branch name.
2. Send the PR to the external project (mbedtls in our example) and another PR to zephyr with the manifest modified so that it points to the fork and branch name of the project's PR. When those are merged, CI could then replace the contents of the manifest with the proper SHA.
3. Introduce some sort of per-PR ChangeId that CI knows how to parse.
4. GitHub adds support for cross-repository PRs. There have been multiple hints that this is coming, but obviously we cannot know when, if ever, this feature will be available.
From these alternatives I only see 4 really working in practice, but
it is limited to repositories being in github in which case the PR
requests can perhaps be generated from a single clone and github could
then forward to each individual project but still tracking on the
original. For other options even if west learn how to properly
separate each PR the user still needs its own repository for each of
those if they are hosted in github which would have to be tracked
individually, or in case it is not hosted in github it may have to
deal with mailing list, gerrit, etc.

Note that we have not at any point considered moving away from GitHub. The plan is to adapt to what the service offers and try to find a solution that works well with it. This is also one of the reasons we are first introducing west without actually splitting the ext/ folder into multiple external repos: we want to expose users to west before we start doing more radical changes.
Well good, though Im not sure what problem does west solves then? For
pulling it sounds like submodules is the preferable solution (to linux
folks at least):

https://public-inbox.org/git/338901fc-6dc8-2684-c116-393e603f85e9@suse.de/t/

Ideas and feedback welcome!

Thanks,

Carles


On Mon, Jan 28, 2019 at 10:43 AM Cufi, Carles
<carles.cufi@nordicsemi.no> wrote:

Hi all,

For a few months now we have been working on a meta-tool named west,
designed to act both as a command-line tool to build, flash an debug
Zephyr-based applications and also to manage the additional Git
repositories that Zephyr will require in order to build in the near
future.

West is written in Python 3, lives in its own repository [1] and its
bootstrapper is available on PyPi [2].
As soon as we merge the topic-west [3] branch into master (which
should happen in the next few days) you will need to install west in
order to flash and debug, since those commands will rely on havig west
present as part of your Zephyr workflow.

The updated west documentation will be online in the Zephyr
documentation website [4] as soon as the topic-west branch is merged
into master. In the meantime you can also look at the unrendered
documentation sources in the topic-west branch [5] and the existing
GitHub issues [6][7].

In order to install the west boostrapper (which you can do today) run:

# On Linux
pip3 install --user west

# On macOS and Windows
pip3 install west

Once the west bootstrapper is installed and the topic-west branch is
merged into master, you will have 2 choices to get a west main
installation.

1. Clone a new copy of the zephyr repository using west:

west init zephyrproject
cd zephyrproject
west update

2. Install west around an existing local zephyr clone:

Move the cloned zephyr/ repository to an empty enclosing folder (for
example zephyrproject/zephyr/), and from this enclosing folder
zephyrproject/ run:

west init -l zephyr/
west update
The -l <path to zephyr> parameter instructs west to use an existing
local copy instead of cloning a remote repository.

Feedback and patches are welcome, but note that the feature will
likely be merged as-is since we consider we have left ample time to
raise any major issues regarding the workflow and decisions taken during
the development of west. This is however only the beginning of west's
(hopefully) long existence as the Zephyr command-line meta-tool, and it
will certainly evolve and change considerably in the future with the
help of the community.

Please submit feedback in the form of GitHub issues on the west
repository itself [1] unless it affects features or functionality in the
zephyr repository directly.

I will reply to this email once the topic-west branch is merged into
master.

Thank you to everybody who has contributed so far!

Regards,

Carles

[1] https://github.com/zephyrproject-rtos/west
[2] https://pypi.org/project/west/
[3] https://github.com/zephyrproject-rtos/zephyr/tree/topic-west
[4] https://docs.zephyrproject.org/latest/tools/west/index.html
[5]
https://github.com/zephyrproject-rtos/zephyr/tree/topic-west/doc/tools
/west [6] https://github.com/zephyrproject-rtos/zephyr/issues/6205
[7] https://github.com/zephyrproject-rtos/zephyr/issues/6770



--
Luiz Augusto von Dentz


--
Luiz Augusto von Dentz

2541 - 2560 of 8183