Skip to content
Snippets Groups Projects
  1. Dec 06, 2019
  2. Dec 05, 2019
  3. Nov 25, 2019
  4. Nov 19, 2019
  5. Nov 13, 2019
  6. Nov 10, 2019
  7. Nov 03, 2019
    • rahix's avatar
      chore(fatfs): Port to new mutex API · 86c7418a
      rahix authored
      
      Using a bare FreeRTOS mutex is deprecated.  Replace it with the new
      `struct mutex`.  This should increase stability of the module.  In the
      process of switching, also remove the `EPIC_FAT_STATIC_SEMAPHORE` define
      as it is no longer needed with the new mutex API.
      
      Signed-off-by: default avatarRahix <rahix@rahix.de>
      Verified
      86c7418a
    • rahix's avatar
      chore(api-lock): Port to new mutex API · 75278836
      rahix authored
      
      Using a bare FreeRTOS mutex is deprecated.  Replace it with the new
      `struct mutex`.  This should increase stability.
      
      Additionally, fix a bug in `lifecycle.c:do_load()` where the function
      would return without unlocking the API mutex if `hardware_reset()`
      returns an error.
      
      Signed-off-by: default avatarRahix <rahix@rahix.de>
      Verified
      75278836
    • rahix's avatar
      chore(sensor-streams): Port to new mutex API · 44ea81f2
      rahix authored
      
      Using a bare FreeRTOS mutex is deprecated.  Replace it with the new
      `struct mutex`.  This should increase stability of the module.
      
      Signed-off-by: default avatarRahix <rahix@rahix.de>
      Verified
      44ea81f2
    • rahix's avatar
      chore(lifecycle): Port to new mutex API · cc5f0e29
      rahix authored
      
      Using a bare FreeRTOS mutex is deprecated.  Replace it with the new
      `struct mutex`.  This should increase stability of the module.
      
      Signed-off-by: default avatarRahix <rahix@rahix.de>
      Verified
      cc5f0e29
    • rahix's avatar
      feat(epicardium): Add a proper mutex implementation · 9a5a46cd
      rahix authored
      
      In the current firmware, different locking mechanisms a littered around
      the code-base.  Among them are bare FreeRTOS mutexes and the hw-locks.
      The callers for these often specify timeouts but don't make much effort
      in A) picking robust values for the timeout and B) recovering gracefully
      from a timeout happening.  Most of the time, we return -EBUSY to _Python
      code_.  This is really really bad API design.  The firmware needs to
      have enough integrity to ensure these situations can't ever occur.
      
      To combat this, add a new locking primitive: The `struct mutex`.  The
      intention is to replace all other locking and synchronization APIs with
      this one.  This will provide one central place to debug any sort of
      locking issues.
      
      The `struct mutex` API is based on a few assumptions about locking.
      Those are detailed in `Documentation/epicardium/mutex.rst`, which is
      part of this commit.  The most important one is:
      
          Locking can **never** fail.
      
      By requiring this to be true, we eliminate the need for drivers to
      contain (often incorrect) logic for dealing with locking fails.  This
      should drastically improve the stability of the firmware in regards to
      lock-related bugs.
      
      This commit does not introduce any functional changes yet.
      
      Signed-off-by: default avatarRahix <rahix@rahix.de>
      Verified
      9a5a46cd
  8. Oct 19, 2019
  9. Oct 06, 2019
  10. Oct 05, 2019
    • fleur's avatar
      led feedback on top and bottom pcb on boot for people with broken displays · 31a8277b
      fleur authored and dx's avatar dx committed
      31a8277b
    • rahix's avatar
      fix(docs): Fix a docs-build warning · 51d40ee1
      rahix authored
      
      Signed-off-by: default avatarRahix <rahix@rahix.de>
      Verified
      51d40ee1
    • rahix's avatar
      chore(epicardium): Use panic() for all critical errors · 0e5c6243
      rahix authored
      
      Unify unrecoverable errors to use panic() in all cases.  This will allow
      further changes to panic() to work for all critical errors.
      
      Signed-off-by: default avatarRahix <rahix@rahix.de>
      Verified
      0e5c6243
    • rahix's avatar
      chore(epicardium): Switch from MXC_ASSERT to assert · 070867f8
      rahix authored
      
      Newlib assert uses __assert_func and thus our panic() function while
      MXC_ASSERT uses a custom assertion logic.  Newlib assert is also more
      portable as it works in expression position while MXC_ASSERT only works
      as a statement.
      
      Signed-off-by: default avatarRahix <rahix@rahix.de>
      Verified
      070867f8
    • rahix's avatar
      feat(epicardium): Use panic() for assertion failures · 9d44017b
      rahix authored
      
      Define `__assert_func()` so a failing `assert()` will trigger a panic.
      
      Signed-off-by: default avatarRahix <rahix@rahix.de>
      Verified
      9d44017b
    • rahix's avatar
      feat(epicardium): Add a panic() function · 1536da34
      rahix authored
      
      In unrecoverable situations we should provide a common way to output the
      cause of the error and then reset the CPU.  The panic() function is
      mean to be exactly that.  It outputs the error-cause, stack-trace, and
      firmware revision, accompanied by a link to the issue-tracker to
      encourage people to report the error.  After a timeout of ~1.5s it
      resets the CPU and reboots.
      
      Future Work:
      
       - Right now, the stack-trace only has a depth of one which is the
         return address from where panic() was called.  In the future it might
         make sense to provide a deeper stack-trace if a robust implementation
         is possible.
       - Integration of @msgctl's faultscreen (!79) so users who don't have
         the serial console open at all times can also see what happened.
      
      Signed-off-by: default avatarRahix <rahix@rahix.de>
      Verified
      1536da34
    • rahix's avatar
      feat(serial): Add function to switch serial to synchronous · 5e25bc89
      rahix authored
      
      In severe error conditions, asynchronous prints will never work.  For
      such cases we need a way to make prints happen synchronously again, the
      same way it works during early boot.  Add a serial_return_to_synchronous()
      function which unconditionally switches the serial driver code to
      synchronous mode.
      
      Only use this function in unrecoverable error conditions!
      
      Signed-off-by: default avatarRahix <rahix@rahix.de>
      5e25bc89
    • Philip Stewart's avatar
      fix(gfx/display): Draw partially clipped primitives · 14d5abcc
      Philip Stewart authored and rahix's avatar rahix committed
      Fix two bugs in the display/gfx module:
      
      1. The animation of the simple_menu used in the main menu had the issue
         that there is a black line visible at the top.  This is due the
         gfx_puts method ignoring lines, where the top pixel of the string is
         above the top of the screen.  As gfx_puts uses gfx_setpixel which in
         turn ignores pixels outside of the screen, remove the check in
         gfx_puts.
      2. X and Y coordinates were cast to unsigned-ints before being given to
         the gfx-library which means calls like circ(0, -10, 30) would be draw
         at coordinates like [0,65526].  Fix this by changing the data-type of
         all coordinates to signed-integers.
      
      Also remove the x and y ranges from the documentation of the individual
      python functions and instead add a general documentation about the
      screen and it's size/coordinate system.
      14d5abcc
  11. Oct 04, 2019
  12. Oct 03, 2019
Loading