Quozl's Open Source

Quozl works in outback Australia as a firmware and test engineer for a non-profit in Miami that makes laptops for children, and for a business as a systems administrator.

Quozl worked on Open Firmware (IEEE 1275-1994), which uses the Forth programming language. For many years Quozl maintained the version that is used on the One Laptop per Child computers, the most complete and extensive version ever.

| top | all articles in one page | summary by date | summary by category |

Fluke PTi120 Calibrating

Electronics
Quozl found his Fluke PTi120 thermal imager would pause to calibrate every few seconds. Often this got in the way of measurements.

A fix was to use adb shell to set boolean auto_shutter_switch to false in the file /data/data/com.guide.pocket.main.pocketmeasure/shared_prefs/com_guide_pocketmeasure_expert_settings.xml, if necessary by adding it, and then rebooting.

However, measurements after a while are affected by temperature changes and another recalibration will be needed; by rebooting as there's no user interface for the feature.

(22 July 2025)

C Forth for PlatformIO

Forth Programming
Quozl brought up C Forth on PlatformIO for these target boards;
  • Raspberry Pi Pico RP2040,
  • Adafruit Feather M0,
  • Teensy 3.1, 3.2, 3.5, 3.6, and 4.0,
  • Espressif ESP32.
C Forth is a Forth language environment optimised for embedded use in semi-constrained systems such as System-on-Chip processors.

See Mitch Bradley's C Forth repository on GitHub.

(19 November 2022)

IP over serial on Raspberry Pi

Electronics
How to set up IP over 3.3V serial between a Raspberry Pi and a host computer running Linux.

Prepare the host computer;

  • install the ppp package
    sudo apt install --yes ppp
  • attach a USB to 3.3V serial adapter to the appropriate GPIO pins, and plug it in to the computer,
  • identify the device, let's assume it appears as /dev/ttyUSB0,
  • run as root
    pppd nodetach debug noauth nocrtscts local passive /dev/ttyUSB0 115200 lcp-max-configure 10000

    (this will repeatedly try to establish a connection, because the LCP configure-request transmission count is set very high).
Prepare the Raspberry Pi;

  • install the ppp package
    sudo apt install --yes ppp
  • add two lines to /etc/rc.local before the exit
    systemctl stop serial-getty@ttyAMA0.service
    pppd updetach debug nocrtscts noauth local 10.1.0.1:10.1.0.2 /dev/ttyAMA0 115200
  • reboot
The link will be established, and you can ping or SSH to 10.1.0.1.

Use different addresses if required.

What it looks like on the host computer

using channel 9
Using interface ppp0
Connect: ppp0 <--> /dev/ttyUSB0
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xa67760f> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0xa67760f> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
sent [LCP EchoReq id=0x0 magic=0x25b9b80a]
sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x25b9b80a> <pcomp> <accomp>]
rcvd [LCP EchoReq id=0x0 magic=0xa67760f]
sent [LCP EchoRep id=0x0 magic=0x25b9b80a]
rcvd [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
sent [CCP ConfAck id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
rcvd [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 10.1.0.1>]
sent [IPCP ConfAck id=0x1 <compress VJ 0f 01> <addr 10.1.0.1>]
rcvd [LCP EchoRep id=0x0 magic=0xa67760f]
rcvd [CCP ConfAck id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
Deflate (15) compression enabled
rcvd [IPCP ConfNak id=0x1 <addr 10.1.0.2>]
sent [IPCP ConfReq id=0x2 <compress VJ 0f 01> <addr 10.1.0.2>]
rcvd [IPCP ConfAck id=0x2 <compress VJ 0f 01> <addr 10.1.0.2>]
local  IP address 10.1.0.2
remote IP address 10.1.0.1
Script /etc/ppp/ip-up started (pid 80399)
Script /etc/ppp/ip-up finished (pid 80399), status = 0x0
  
(25 September 2022)

| top | all the other articles | summary by date | summary by category |


quozl@us.netrek.org