]> git.scottworley.com Git - tattlekey/log
tattlekey
2 years agoclient: Rename: set_send_alarm → set_resend_alarm
Scott Worley [Tue, 10 Oct 2023 04:42:11 +0000 (21:42 -0700)]
client: Rename: set_send_alarm → set_resend_alarm

2 years agoclient: Rename the event enum values
Scott Worley [Tue, 10 Oct 2023 04:39:06 +0000 (21:39 -0700)]
client: Rename the event enum values

2 years agoclient: Rename: send_report -> send_report_packet
Scott Worley [Tue, 10 Oct 2023 04:33:44 +0000 (21:33 -0700)]
client: Rename: send_report -> send_report_packet

2 years agoclient: Extract set_send_alarm()
Scott Worley [Tue, 10 Oct 2023 04:29:10 +0000 (21:29 -0700)]
client: Extract set_send_alarm()

2 years agoclient: next_scheduled_send()
Scott Worley [Tue, 10 Oct 2023 02:46:28 +0000 (19:46 -0700)]
client: next_scheduled_send()

2 years agoclient: create_send()
Scott Worley [Tue, 10 Oct 2023 00:10:27 +0000 (17:10 -0700)]
client: create_send()

2 years agoclient: Start moving pending-sends logic out to sends.c
Scott Worley [Mon, 9 Oct 2023 23:51:08 +0000 (16:51 -0700)]
client: Start moving pending-sends logic out to sends.c

2 years agoclient: Exponential backoff resend intervals
Scott Worley [Mon, 9 Oct 2023 22:17:04 +0000 (15:17 -0700)]
client: Exponential backoff resend intervals

2 years agoclient: Stop sleeping separately for each re-send
Scott Worley [Mon, 9 Oct 2023 21:53:25 +0000 (14:53 -0700)]
client: Stop sleeping separately for each re-send

Instead, determine when the next send, in the whole pile of sends,
needs to happen and sleep until then.

This is the first functionality in this project that is more than simple
glue code.  This is the first non-trivial functionality that has some
internal logic to it.

I'd really like to write a test for it.

This environment (C, CMake, pico-sdk) makes testing hard!  :(

I'd like to build the test as a host/native executable and run it on the
build machine at build time, even though the primary/production use of
the code under test would be on the pico, cross-compiled.

I know testing this way is imperfect: It would fail to catch the entire
class of bugs that are caused by the code under test making architecture
assumptions that are valid on the build host but invalid on the cross
target.  But it would still be very useful for all other classes of bugs!

This usage is very much not supported:

1. CMake doesn't support it at all: One toolchain per language:
   https://discourse.cmake.org/t/compile-unit-test-natively-and-cross-compile-code-for-embedded-target/3607
   https://discourse.cmake.org/t/using-multiple-toolchains-in-the-same-project/1505

2. Even if I'm confident in my ability to write portable C that runs
   correctly on both build-host and cross-target architectures, I can't
   rely on pico-sdk's pheap library to be portable in this way.  It is
   super-not-portable-at-all; it will never run on the build host.

3. If I use a different, portable heap library, I'm duplicating code
   already in the pico-sdk standard library.  The pico is small enough
   already.  I'd rather not deploy two heap libraries.

4. I could define an interface to a heap library & use the pico's heap
   library when deploying to the pico & some other heap library when testing
   on the native machine, but

   a. My interface-to-pico's-heap-library code goes untested.
   b. The interface-to-a-heap-library code would likely add overhead.
   c. That's a bunch of extra code to write.  :(

5. Even if I worked through the interfacing-with-pico's-heap library issue
   and made this a separate, independent, portable library, I'd still
   be left with the problem of composing the two pieces.  Do I build
   a library .so separately, spinning up a separate Debian VM for that?
   Does pico-sdk even support building libraries?  Or do I copy the source
   of the library into the executable's source tree & make building the
   library part of the executable's build process?  Ick.  :(

6. Other option: Build a test intended to run on the pico.  It's nuts
   that this is the least-nuts option.  :(

I am very discouraged.  :(

I don't even bother to keep this functionality separate with a clean
interface for the test harness.  :(

So, no tests.  :~(

For now.

Advice welcome.

2 years agoclient: Extract pending-send object as send_t
Scott Worley [Mon, 9 Oct 2023 20:35:11 +0000 (13:35 -0700)]
client: Extract pending-send object as send_t

2 years agoclient: Move queue servicing to service_queue()
Scott Worley [Mon, 9 Oct 2023 19:51:43 +0000 (12:51 -0700)]
client: Move queue servicing to service_queue()

2 years agoclient: Interleave accepting new button presses & re-sends
Scott Worley [Mon, 9 Oct 2023 19:35:15 +0000 (12:35 -0700)]
client: Interleave accepting new button presses & re-sends

2 years agoclient: queue_try_add_ignoring_errors()
Scott Worley [Mon, 9 Oct 2023 19:34:29 +0000 (12:34 -0700)]
client: queue_try_add_ignoring_errors()

2 years agoclient: Set up for multiple types of events to go into the queue
Scott Worley [Mon, 9 Oct 2023 18:56:40 +0000 (11:56 -0700)]
client: Set up for multiple types of events to go into the queue

2 years agoclient: Prefix all the config settings with "config_"
Scott Worley [Mon, 9 Oct 2023 18:32:22 +0000 (11:32 -0700)]
client: Prefix all the config settings with "config_"

2 years agoclient: Calculate 'ago' with a clock
Scott Worley [Mon, 9 Oct 2023 08:02:32 +0000 (01:02 -0700)]
client: Calculate 'ago' with a clock

2 years agoclient: Work in 1-second granularity
Scott Worley [Mon, 9 Oct 2023 07:49:54 +0000 (00:49 -0700)]
client: Work in 1-second granularity

2 years agoclient: Send each report multiple times
Scott Worley [Mon, 9 Oct 2023 03:49:43 +0000 (20:49 -0700)]
client: Send each report multiple times

UDP is unreliable.

It would be better to re-send over a much longer interval, interleaving
re-sends from different presses.  Do this simple re-sending for now.

2 years agoclient: Less chatty with the LED
Scott Worley [Mon, 9 Oct 2023 03:42:35 +0000 (20:42 -0700)]
client: Less chatty with the LED

2 years agoclient: debounce
Scott Worley [Mon, 9 Oct 2023 02:15:49 +0000 (19:15 -0700)]
client: debounce

2 years agoclient: Initial wifi connection time: 10s → 90s
Scott Worley [Sun, 8 Oct 2023 07:14:57 +0000 (00:14 -0700)]
client: Initial wifi connection time: 10s → 90s

No reason to give up so aggressively.

Be robust against the AP restarting, which takes ~1 minute.

2 years agoclient: Don't sleep in interrupt context
Scott Worley [Sun, 8 Oct 2023 07:13:36 +0000 (00:13 -0700)]
client: Don't sleep in interrupt context

2 years agoclient: Respond to button press
Scott Worley [Sun, 8 Oct 2023 06:29:49 +0000 (23:29 -0700)]
client: Respond to button press

2 years agoclient: Explain config settings
Scott Worley [Sun, 8 Oct 2023 04:45:13 +0000 (21:45 -0700)]
client: Explain config settings

2 years agoclient: net: Fix port byte order
Scott Worley [Sun, 8 Oct 2023 04:34:50 +0000 (21:34 -0700)]
client: net: Fix port byte order

Docs ( https://www.nongnu.org/lwip/2_0_x/group__udp__raw.html ) say
"ipaddr & port are expected to be in the same byte order as in the pcb,"
which apparently means _don't_ run it through htons().

2 years agoclient: Send UDP packets
Scott Worley [Sun, 8 Oct 2023 04:08:58 +0000 (21:08 -0700)]
client: Send UDP packets

2 years agoclient: Move config to config.c
Scott Worley [Sun, 8 Oct 2023 01:18:39 +0000 (18:18 -0700)]
client: Move config to config.c

2 years agohousing: Extra length for cord grip
Scott Worley [Sat, 7 Oct 2023 18:28:42 +0000 (11:28 -0700)]
housing: Extra length for cord grip

2 years agohousing: Grip board tighter
Scott Worley [Sat, 7 Oct 2023 18:16:00 +0000 (11:16 -0700)]
housing: Grip board tighter

2 years agohousing: Flatten
Scott Worley [Sat, 7 Oct 2023 18:11:57 +0000 (11:11 -0700)]
housing: Flatten

2 years agohousing: Adjust board fit
Scott Worley [Sat, 7 Oct 2023 15:33:13 +0000 (08:33 -0700)]
housing: Adjust board fit

2 years agohousing: Basic shape
Scott Worley [Sat, 7 Oct 2023 09:08:54 +0000 (02:08 -0700)]
housing: Basic shape

Not solved yet: Cord grip/anchor

2 years agohousing: Start
Scott Worley [Sat, 7 Oct 2023 08:18:21 +0000 (01:18 -0700)]
housing: Start

2 years agoclient: Move blink stuff to separate file
Scott Worley [Sat, 30 Sep 2023 01:48:53 +0000 (18:48 -0700)]
client: Move blink stuff to separate file

2 years agoclient: Connect to wifi
Scott Worley [Fri, 29 Sep 2023 21:56:48 +0000 (14:56 -0700)]
client: Connect to wifi

2 years agoclient: Fancier blinking
Scott Worley [Fri, 29 Sep 2023 21:48:28 +0000 (14:48 -0700)]
client: Fancier blinking

2 years agoclient: Build wifi deps
Scott Worley [Fri, 29 Sep 2023 21:40:01 +0000 (14:40 -0700)]
client: Build wifi deps

2 years agoclient: Get lwipopts.h from pico-examples
Scott Worley [Fri, 29 Sep 2023 21:39:32 +0000 (14:39 -0700)]
client: Get lwipopts.h from pico-examples

2 years agoclient: Build in a Debian VM
Scott Worley [Fri, 29 Sep 2023 19:37:21 +0000 (12:37 -0700)]
client: Build in a Debian VM

This finally makes it work.  Hurray!

Other things I tried that didn't help:
  * Other versions of cross gcc (8, 9, 10, 11 12)
  * Other versions of host gcc (10)
  * Other versions of pico-sdk (1.3.1, 1.4.0)

arm-none-eabi-gcc as packaged in Debian works.
arm-none-eabi-gcc as packaged in Nix doesn't.
I haven't yet looked further into why.

2 years agoclient: Use standard <nixpkgs>
Scott Worley [Fri, 29 Sep 2023 19:31:25 +0000 (12:31 -0700)]
client: Use standard <nixpkgs>

Do the "fetchSubmodules = true;" override here

2 years agoclient: Install the .uf2
Scott Worley [Fri, 29 Sep 2023 19:21:25 +0000 (12:21 -0700)]
client: Install the .uf2

2 years agoclient: Switch to pico_w blink example
Scott Worley [Fri, 29 Sep 2023 19:20:53 +0000 (12:20 -0700)]
client: Switch to pico_w blink example

2 years agoclient: Start with the 'blink' example
Scott Worley [Thu, 28 Sep 2023 00:46:26 +0000 (17:46 -0700)]
client: Start with the 'blink' example