Mynewt FAQ - Syntax, Semantics, Configuration
=============================================

.. contents::
  :local:
  :depth: 1

Floating Point in Mynewt
------------------------

**Q**: I am trying to print floating point in Mynewt using ``console_printf("%f", floating_var)`` but I am unable to do so. 
How do I resolve the issue? I'm aware Mynewt uses baselibc - does it even support floating point?

**A**: Baselibc does support floating point formatting, but it is not enabled
by default.  To enable it, set the following syscfg setting to 1 in your
target: ``FLOAT_USER``

However, baselibc's float printf support is a bit limited.  In particular, it
ignores precision specifiers and always prints three digits after the
decimal point.

Ending the Delay of a Task Blocking a Call Early
------------------------------------------------

**Q**: I have a task which is blocking on a call to ``os_time_delay()``. What is the recommended way to end the delay 
early in an ISR (e.g. button press)?

**A**: The best way would be to use a semaphore. Initialize the semaphore with a count of 0 (``os_sem_init()``), then 
block on the semaphore with the maximum delay you want to wait for (``os_sem_pend()``).  The button press event would 
wake the first task up early by calling ``os_sem_release()``.

Random Function / Device
------------------------

**Q**: Does Mynewt have a random function or random device?

**A**: ``baselibc`` has ``rand()``, and ``crypto/tinycrypt`` has ``hmac-prng``.

Setting ``serial`` and ``mfghash``
----------------------------------

**Q**: What is ``mfghash``? How do I set ``serial`` and ``mfghash`` (currently blank in my app)?

**A**: ``mfghash`` is computed if you’re using ``newt mfg`` to construct your flash image, and it identifies the build of 
your bootloader. ``newt mfg`` bundles togetherthe bootloader, target image, and other data you’d want to bundle when creating 
an image to burn to flash. See the ``newt mfg`` :doc:`documentation <../../../../command_list/newt_mfg>` for the construction 
side of things and ``apache-mynewt-core/sys/mfg/src/mfg.c`` for the firmware side. ``serial`` was intended to be used if you 
want to have your own naming scheme per device when building products; i.e. you want something other than the mcu serial 
number, or if you don’t have serial number available.

Leading Zeros Format in ``printf``
----------------------------------

**Q**: Is there a way to make printf and console_printf honor the leading zeros format? As in: 

``console_printf("%.2d", 5);`` 

outputting "05" instead of as for me now: "2d" ?

**A**: ``console_printf("%02d", 5);``

Mynewt Equivalent of UNIX ``sleep(3)``
--------------------------------------

**Q**: Is there an equivalent to the UNIX sleep(3)?
  
**A**: ``os_time_delay(OS_TICKS_PER_SEC * secs)``

Alternatives to ``cmsis_nvic.c``
--------------------------------

**Q**: What do I use instead of the full version of ``cmsis_nvic.c`` (i.e. for setting and getting IRQ priorities)?

**A**: Those functions are in the ``core_cmx.h`` files in ``hw/cmsis-core``.
