Moving a subdirectory from one git repository to an entirely new repository

I use Microsoft Visual Studio as my primary development environment. I’ve got a long-term repository that I maintain on Azure Devops at https://wimsworld.visualstudio.com/. When I create a new test project, I often create it as a subdirectory inside the main repository. That gives me version control, without the hassle of creating a new repository every time.

The downside is that when a project grows into a real program, I want to make public, I have to figure out what to do about the code. I could take a snapshot, losing all of the history, or I could jump through hoops to get the project exported from the Azure git platform and imported into the GitHub platform. I like the history of how I got from the start to where I am, so I chose to go thourgh the hoops.

I should describe this with examples. My default code repository is WimsWorld and I often create projects as directories of that, so WimsWorld/WimsConstructionCam in this case. I created this project in July, and then a couple of months later I realized I should have created the program in WimsWorld/Linux/WimsConstructionCam, so I moved it one level deeper in the repository. Git handles all of that fine and I could trace back the history of the file all the way back to creation.

Now that it’s time for me to decide I may be interested in sharing this project publicly, I looked for step by step instructions and came across a nice video doing what I wanted.

This was easiest to do on a linux box at the command line, and since I have a dev system that has its SSH keys already registered as me in both Azure Devops and GitHub I could repeat the process multiple times to get it right.

git clone WimsWorld@vs-ssh.visualstudio.com:v3/WimsWorld/WimsWorld/WimsWorld
cd WimsWorld/
git remote rm origin
git filter-branch --subdirectory-filter Linux/WimsConstructionCam -- --all
cd ..
mv WimsWorld WimsConstructionCam
cd WimsConstructionCam/
git remote add origin git@github.com:wcbonner/WimsConstructionCam.git
git pull origin master --allow-unrelated-histories
git push origin master

The git –filter-branch –subdirectory command got rid of all of the history except for what was in the Linux/WimsConstructionCam/ directory, which seemed right, since all the files I wanted history on currently lived in that directory.

I had previously created a repository in GitHub and this got what appeared to have history in GitHub. On closer inspection, the history only went back a couple of months, and not back to when I’d created the project. I deleted my project in github, deleted the repository directory on my local machine and started again after some research.

First I tried to manually delete everything I didn’t want from my cloned repository, move all the files to where I wanted, commit them, then connect to the new repo and push. I got a problem message about a file that was too large. Sometime in my past history, I’d managed to push a Visual Studio debug symbol database into my repository and while I’d deleted the file, I’d not deleted the history of the file from the repository. That issue was actually a good thing because it confirmed to me that method of getting the files looking the way I wanted could be leaking credentials that I might have somewhere in my private repository.

I found that I needed the git tool git-filter-repo to do what I needed to do.

wget https://raw.githubusercontent.com/newren/git-filter-repo/main/git-filter-repo
git clone WimsWorld@vs-ssh.visualstudio.com:v3/WimsWorld/WimsWorld/WimsWorld
cd WimsWorld/
git remote rm origin
python3 ~/git-filter-repo --force --path WimsConstructionCam --path Linux/WimsConstructionCam
cd Linux/WimsConstructionCam/
git mv * ../..
cd ../..
git commit .
cd ..
mv WimsWorld WimsConstructionCam
cd WimsConstructionCam/
git remote add origin git@github.com:wcbonner/WimsConstructionCam.git
git pull origin main --allow-unrelated-histories
git push origin master

Using the git-filter-repo program I was able to remove the history of everything that was outside of the original folder and the current folder. Then I moved all of the files from the current subdirectory to the repository root and committed the changes. Then I connected the repository to the new remote repository, pulled the remote, and then pushed to the remote.

A funny issue I ran into during my second try into a brand-new repository in GitHub. I’d originally created an empty repository a few weeks ago and the default branch was called master, which matched the default branch on my old repository. They’ve changed to use the current politically correct term for the default branch, and it’s named main. After I’d got both branches in GitHub, I had to merge the two so I’m working from a single branch.

List of links:

Arducam Red Tint Issue on Raspberry Pi

no tuning file

After writing up my issue yesterday I posted the question on the amazon product details. I received an answer with a link to this page overnight. It references a page with several custom tuning files for their lenses. There did not seem to be a tuning file that matched the 175° FOV lens on the package I got, but there was both a 160° and a 200° version. I downloaded both files and ran a test capture with each. On initial viewing, either will work for my solution. I need to focus the lens to see if there are any noticeable differences.

–tuning-file imx219_160.json
–tuning-file imx219_200.json

The commands I used to download and test the tuning files are

wget https://www.arducam.com/wp-content/uploads/2022/05/imx219_160.json
wget https://www.arducam.com/wp-content/uploads/2022/05/imx219_200.json
libcamera-still -v 2 --nopreview --hflip --vflip --thumb none --tuning-file imx219_160.json --output `hostname`-160.jpg
libcamera-still -v 2 --nopreview --hflip --vflip --thumb none --tuning-file imx219_200.json --output `hostname`-200.jpg

I got a message about the tuning file being an older version, with pointers on how to convert it to the updated version.

WARN RPiController controller.cpp:43 This format of the tuning file will be deprecated soon! Please use the convert_tuning.py utility to update to version 2.0.

I still need to decide how I want to handle this in my automated photo processing, but having the information is hugely useful.

Links in one place:

Arducam 8MP IMX219 175 Degree Ultra Wide Angle Raspberry Pi Camera Module

I’ve been playing with several cameras attached to raspberry pi recently. Getting cameras is easy right now while getting Raspberry Pi is not. I purchased this model from Amazon and have it connected to a Raspberry Pi4. I had to upgrade the unit from running Raspian Buster to Raspian Bullseye to get support for this particular camera.

Amazon Listing

I was doing some searching for red tint problems and fixing them, and it seems to be something that should be able to fix in software. Most of the fixes refer to Jetson Nano, which is not the platform I’m working with, so the fixes don’t align with my platform.

Red Tint Problem on IMX219

I still need to manually focus the lens on this camera. It’s always a frustrating process on a small lens like this because my fingers obscure the view. I’m running with camera_auto_detect=1 while https://www.arducam.com/docs/cameras-for-raspberry-pi/native-raspberry-pi-cameras/8mp-imx219-standard-camera-modules/ recommends modifying /boot/config.txt and setting both camera_auto_detect=0 and dtoverlay=imx219. exiftool reports Camera Model Name : /base/soc/i2c0mux/i2c@1/imx219@10 with the current settings. I’ve verified that using the explicit camera overlay produces the same red tint as well as having exactly the same Model Name in the exif data.

I was able to find the file /usr/share/libcamera/ipa/raspberrypi/imx219.json which may be similar to the ISP files the Jetson platforms were using. I’m still working on the red tint.

Raspberry Pi ZeroW Camera Focus with libcamera-vid

Several years ago I was trying to play with a camera on a Raspberry Pi Zero and was using FFMPEG to stream video to my PC. Now that I’m trying out the Bullseye release of Raspian, I’m attempting to use the camera tools that are installed by default.

I’ve got an Arducam with 160° lens connected to my Pi Zero.

pi@WimPiZeroCamera:~ $ libcamera-vid --list-cameras
[0:01:26.600607679] [701]  INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3544-22656360
[0:01:26.690670361] [702] ERROR CameraSensor camera_sensor.cpp:591 'ov5647 10-0036': Camera sensor does not support test pattern modes.
[0:01:26.842438396] [702]  INFO RPI raspberrypi.cpp:1356 Registered camera /base/soc/i2c0mux/i2c@1/ov5647@36 to Unicam device /dev/media3 and ISP device /dev/media0
Available cameras
-----------------
0 : ov5647 [2592x1944] (/base/soc/i2c0mux/i2c@1/ov5647@36)
    Modes: 'SGBRG10_CSI2P' : 640x480 1296x972 1920x1080 2592x1944 

First I ran the previous command to see that the camera is recognized, then I run the following command to set up the port on the Pi. The program produces no output in the terminal until I connect from my PC.

pi@WimPiZeroCamera:~ $ libcamera-vid --timeout 0 --nopreview --listen --output tcp://0.0.0.0:5000

On the PC, I run VLC

Open Network Stream
tcp/h264://192.168.0.63:5000
View from the camera

looking back at the console output, you can see that it’s defaulting to 640×480 resolution.

pi@WimPiZeroCamera:~ $ libcamera-vid --timeout 0 --nopreview --listen --output tcp://0.0.0.0:5000
[2:02:18.390718603] [16931]  INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3544-22656360
[2:02:18.502791615] [17031] ERROR CameraSensor camera_sensor.cpp:591 'ov5647 10-0036': Camera sensor does not support test pattern modes.
[2:02:18.636067629] [17031]  INFO RPI raspberrypi.cpp:1356 Registered camera /base/soc/i2c0mux/i2c@1/ov5647@36 to Unicam device /dev/media3 and ISP device /dev/media0
[2:02:18.641028629] [16931]  INFO Camera camera.cpp:1029 configuring streams: (0) 640x480-YUV420
[2:02:18.644508629] [17031]  INFO RPI raspberrypi.cpp:760 Sensor: /base/soc/i2c0mux/i2c@1/ov5647@36 - Selected sensor format: 640x480-SGBRG10_1X10 - Selected unicam format: 640x480-pGAA

When I stop the video on the PC, libcamera-vid exits on the Pi.

I can specify the width and height of the output at the Pi, but it seems to be having problems delivering data.

libcamera-vid --timeout 0 --nopreview --width 1920 --height 1080 --inline --listen -o tcp://0.0.0.0:5000
the video starts, but rapidly freezes.
pi@WimPiZeroCamera:~ $ libcamera-vid --timeout 0 --nopreview --width 1920 --height 1080 --inline --listen -o tcp://0.0.0.0:5000 
[0:01:23.973536453] [670]  INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3544-22656360
[0:01:24.087323064] [704] ERROR CameraSensor camera_sensor.cpp:591 'ov5647 10-0036': Camera sensor does not support test pattern modes.
[0:01:24.241746679] [704]  INFO RPI raspberrypi.cpp:1356 Registered camera /base/soc/i2c0mux/i2c@1/ov5647@36 to Unicam device /dev/media3 and ISP device /dev/media0
[0:01:24.247247304] [670]  INFO Camera camera.cpp:1029 configuring streams: (0) 1920x1080-YUV420
[0:01:24.250886379] [704]  INFO RPI raspberrypi.cpp:760 Sensor: /base/soc/i2c0mux/i2c@1/ov5647@36 - Selected sensor format: 1920x1080-SGBRG10_1X10 - Selected unicam format: 1920x1080-pGAA

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.204113] Internal error: Oops: 80000005 [#1] ARM

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.205952] Process libcamera-vid (pid: 704, stack limit = 0x5546931d)

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.205993] Stack: (0xc2d2de10 to 0xc2d2e000)

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206027] de00:                                     c2d2de3b c1b70ea0 c2d2de5c 00000000

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206068] de20: 00000000 00000000 00000000 00000000 c3b2ed20 b58bc074 00c9c038 00000003

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206104] de40: 00000002 00278d00 00004002 00000001 00000000 00000056 00000000 000180b5

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206140] de60: 00000000 00000000 00000000 00000000 00000000 00000000 00000004 0000001d

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206178] de80: 00278d00 00000000 00000000 c2d2de98 c0046c80 c000b100 c13b6014 c1b70ea0

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206216] dea0: c0c2b2c0 c1888ea0 00000000 c41df8c0 c2d2dedc c2d2dec0 c0013798 0a121acf

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206253] dec0: 00000000 bf1d1d50 c3b2ed21 00000000 c3b2ed20 c0c1f028 b58bc074 0000000e

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206292] dee0: c2d2defc c2d2def0 bf1d1d6c bf1d17b4 c2d2df14 c2d2df00 bf1c9148 bf1d1d5c

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206330] df00: c044560f c3b2ed21 c2d2dfa4 c2d2df18 c021fda0 bf1c9108 00000000 c0c1f028

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206369] df20: c0008ff0 00c5387d c2d2df6c c2d2df38 c0014720 c001377c 00000000 00000000

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206406] df40: 00000000 00000000 c0c9c038 60000010 c0008ff0 00c5387d 00000000 c0009104

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206444] df60: c2d2df94 c2d2df70 c00f8f20 c00fa1fc b6968a5c 0a121acf ffffffff b58bc074

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206481] df80: b4f11558 b4f0ba30 00000036 c00083e4 c2d2c000 00000000 00000000 c2d2dfa8

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206518] dfa0: c0008260 c021fc98 b58bc074 b4f11558 0000000e c044560f b58bc074 b6dfb788

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206555] dfc0: b58bc074 b4f11558 b4f0ba30 00000036 0bde9f08 00000014 b6ad9124 01167c88

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206595] dfe0: b6aabe94 b58bc04c b6a354a0 b6bcb1ac 60000010 0000000e 00000000 00000000

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206625] Backtrace: 

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206653] [<bf1d17a8>] (video_usercopy [videodev]) from [<bf1d1d6c>] (video_ioctl2+0x1c/0x24 [videodev])

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.207763]  r10:0000000e r9:b58bc074 r8:c0c1f028 r7:c3b2ed20 r6:00000000 r5:c3b2ed21

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.207800]  r4:bf1d1d50

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.207820] [<bf1d1d50>] (video_ioctl2 [videodev]) from [<bf1c9148>] (v4l2_ioctl+0x4c/0x64 [videodev])

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.208594] [<bf1c90fc>] (v4l2_ioctl [videodev]) from [<c021fda0>] (sys_ioctl+0x114/0x9b0)

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209024]  r5:c3b2ed21 r4:c044560f

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209047] [<c021fc8c>] (sys_ioctl) from [<c0008260>] (ret_fast_syscall+0x0/0x1c)

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209094] Exception stack(0xc2d2dfa8 to 0xc2d2dff0)

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209128] dfa0:                   b58bc074 b4f11558 0000000e c044560f b58bc074 b6dfb788

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209167] dfc0: b58bc074 b4f11558 b4f0ba30 00000036 0bde9f08 00000014 b6ad9124 01167c88

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209202] dfe0: b6aabe94 b58bc04c b6a354a0 b6bcb1ac

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209233]  r10:00000000 r9:c2d2c000 r8:c00083e4 r7:00000036 r6:b4f0ba30 r5:b4f11558

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209261]  r4:b58bc074

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209294] Code: bad PC value

I’m including the output of dmesg here in case anyone has a solution to my problem. Most likely I’m going to switch back to the Buster release of raspian and see if everything works properly there.

pi@WimPiZeroCamera:~ $ dmesg 
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 5.15.32+ (dom@buildbot) (arm-linux-gnueabihf-gcc-8 (Ubuntu/Linaro 8.4.0-3ubuntu1) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #1538 Thu Mar 31 19:37:58 BST 2022
[    0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
[    0.000000] OF: fdt: Machine model: Raspberry Pi Zero W Rev 1.1
[    0.000000] random: fast init done
[    0.000000] Memory policy: Data cache writeback
[    0.000000] Reserved memory: created CMA memory pool at 0x0bc00000, size 256 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x000000001bffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000001bffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000001bffffff]
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 113680
[    0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 video=Composite-1:720x480@60i smsc95xx.macaddr=B8:27:EB:B0:8B:F5 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000  console=ttyS0,115200 console=tty1 root=PARTUUID=fb77dacb-02 rootfstype=ext4 fsck.repair=yes rootwait
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 177232K/458752K available (8994K kernel code, 1338K rwdata, 2932K rodata, 436K init, 546K bss, 19376K reserved, 262144K cma-reserved)
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] ftrace: allocating 31774 entries in 94 pages
[    0.000000] ftrace: allocated 94 pages with 5 groups
[    0.000000] trace event string verifier disabled
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] random: get_random_bytes called from start_kernel+0x474/0x6d8 with crng_init=1
[    0.000006] sched_clock: 32 bits at 1000kHz, resolution 1000ns, wraps every 2147483647500ns
[    0.000103] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275 ns
[    0.000218] bcm2835: system timer (irq = 27)
[    0.001053] Console: colour dummy device 80x30
[    0.001743] printk: console [tty1] enabled
[    0.001850] Calibrating delay loop... 697.95 BogoMIPS (lpj=3489792)
[    0.060393] pid_max: default: 32768 minimum: 301
[    0.060674] LSM: Security Framework initializing
[    0.060954] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.061048] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.063506] cgroup: Disabling memory control group subsystem
[    0.064019] CPU: Testing write buffer coherency: ok
[    0.066192] Setting up static identity map for 0x8220 - 0x8258
[    0.067811] devtmpfs: initialized
[    0.083783] VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5
[    0.084268] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.084378] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
[    0.127092] pinctrl core: initialized pinctrl subsystem
[    0.129535] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.134406] DMA: preallocated 1024 KiB pool for atomic coherent allocations
[    0.142234] audit: initializing netlink subsys (disabled)
[    0.143981] thermal_sys: Registered thermal governor 'step_wise'
[    0.145036] hw-breakpoint: found 6 breakpoint and 1 watchpoint registers.
[    0.145154] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.145493] Serial: AMBA PL011 UART driver
[    0.151112] audit: type=2000 audit(0.140:1): state=initialized audit_enabled=0 res=1
[    0.160187] bcm2835-mbox 2000b880.mailbox: mailbox enabled
[    0.191113] raspberrypi-firmware soc:firmware: Attached to firmware from 2022-03-24T13:20:54, variant start
[    0.201153] raspberrypi-firmware soc:firmware: Firmware hash is e5a963efa66a1974127860b42e913d2374139ff5
[    0.262032] Kprobes globally optimized
[    0.272466] bcm2835-dma 20007000.dma: DMA legacy API manager, dmachans=0x1
[    0.276096] SCSI subsystem initialized
[    0.276738] usbcore: registered new interface driver usbfs
[    0.276920] usbcore: registered new interface driver hub
[    0.277084] usbcore: registered new device driver usb
[    0.277674] usb_phy_generic phy: supply vcc not found, using dummy regulator
[    0.278596] pps_core: LinuxPPS API ver. 1 registered
[    0.278672] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.278771] PTP clock support registered
[    0.281877] clocksource: Switched to clocksource timer
[    0.370365] VFS: Disk quotas dquot_6.6.0
[    0.370608] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.370926] FS-Cache: Loaded
[    0.371393] CacheFiles: Loaded
[    0.372730] simple-framebuffer 1eaa9000.framebuffer: framebuffer at 0x1eaa9000, 0x151800 bytes
[    0.372839] simple-framebuffer 1eaa9000.framebuffer: format=a8r8g8b8, mode=720x480x32, linelength=2880
[    2.316040] Console: switching to colour frame buffer device 90x30
[    2.325233] simple-framebuffer 1eaa9000.framebuffer: fb0: simplefb registered!
[    2.350708] NET: Registered PF_INET protocol family
[    2.354867] IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    2.360331] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
[    2.367949] TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
[    2.371976] TCP bind hash table entries: 4096 (order: 2, 16384 bytes, linear)
[    2.375979] TCP: Hash tables configured (established 4096 bind 4096)
[    2.380172] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
[    2.384369] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
[    2.388971] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    2.394705] RPC: Registered named UNIX socket transport module.
[    2.398827] RPC: Registered udp transport module.
[    2.402805] RPC: Registered tcp transport module.
[    2.406660] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    2.412559] armv6-pmu arm-pmu: hw perfevents: no irqs for PMU, sampling events not supported
[    2.420478] hw perfevents: enabled with armv6_1176 PMU driver, 3 counters available
[    2.429866] Initialise system trusted keyrings
[    2.434734] workingset: timestamp_bits=14 max_order=17 bucket_order=3
[    2.454069] zbud: loaded
[    2.461621] FS-Cache: Netfs 'nfs' registered for caching
[    2.467344] NFS: Registering the id_resolver key type
[    2.471447] Key type id_resolver registered
[    2.475469] Key type id_legacy registered
[    2.479543] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    2.483449] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[    2.489597] Key type asymmetric registered
[    2.493540] Asymmetric key parser 'x509' registered
[    2.497458] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
[    2.501169] io scheduler mq-deadline registered
[    2.504848] io scheduler kyber registered
[    2.524068] bcm2835-rng 20104000.rng: hwrng registered
[    2.528560] vc-mem: phys_addr:0x00000000 mem_base=0x1ec00000 mem_size:0x20000000(512 MiB)
[    2.538148] gpiomem-bcm2835 20200000.gpiomem: Initialised: Registers at 0x20200000
[    2.566824] brd: module loaded
[    2.585348] loop: module loaded
[    2.590544] Loading iSCSI transport class v2.0-870.
[    2.597691] usbcore: registered new interface driver smsc95xx
[    2.601558] dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
[    3.334020] Core Release: 2.80a
[    3.337668] Setting default values for core params
[    3.341198] Finished setting default values for core params
[    3.545225] Using Buffer DMA mode
[    3.548723] Periodic Transfer Interrupt Enhancement - disabled
[    3.552244] Multiprocessor Interrupt Enhancement - disabled
[    3.555760] OTG VER PARAM: 0, OTG VER FLAG: 0
[    3.559326] Dedicated Tx FIFOs mode

[    3.564631] WARN::dwc_otg_hcd_init:1074: FIQ DMA bounce buffers: virt = cbd04000 dma = 0x8bd04000 len=9024
[    3.575023] FIQ FSM acceleration enabled for :
               Non-periodic Split Transactions
               Periodic Split Transactions
               High-Speed Isochronous Endpoints
               Interrupt/Control Split Transaction hack enabled
[    3.591752] dwc_otg: Microframe scheduler enabled

[    3.592119] WARN::hcd_init_fiq:457: FIQ on core 0

[    3.598562] WARN::hcd_init_fiq:458: FIQ ASM at c0685988 length 36

[    3.604610] WARN::hcd_init_fiq:497: MPHI regs_base at dc810000
[    3.610870] dwc_otg 20980000.usb: DWC OTG Controller
[    3.614171] dwc_otg 20980000.usb: new USB bus registered, assigned bus number 1
[    3.617505] dwc_otg 20980000.usb: irq 56, io mem 0x00000000
[    3.620707] Init: Port Power? op_state=1
[    3.623880] Init: Power Port (0)
[    3.627538] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15
[    3.633926] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    3.637264] usb usb1: Product: DWC OTG Controller
[    3.640556] usb usb1: Manufacturer: Linux 5.15.32+ dwc_otg_hcd
[    3.643942] usb usb1: SerialNumber: 20980000.usb
[    3.648695] hub 1-0:1.0: USB hub found
[    3.652208] hub 1-0:1.0: 1 port detected
[    3.656876] dwc_otg: FIQ enabled
[    3.656917] dwc_otg: NAK holdoff enabled
[    3.656934] dwc_otg: FIQ split-transaction FSM enabled
[    3.656969] Module dwc_common_port init
[    3.657671] usbcore: registered new interface driver usb-storage
[    3.661498] mousedev: PS/2 mouse device common for all mice
[    3.669132] sdhci: Secure Digital Host Controller Interface driver
[    3.672648] sdhci: Copyright(c) Pierre Ossman
[    3.676899] sdhci-pltfm: SDHCI platform and OF driver helper
[    3.681762] ledtrig-cpu: registered to indicate activity on CPUs
[    3.686524] hid: raw HID events driver (C) Jiri Kosina
[    3.690276] usbcore: registered new interface driver usbhid
[    3.693802] usbhid: USB HID core driver
[    3.705200] Initializing XFRM netlink socket
[    3.709139] NET: Registered PF_PACKET protocol family
[    3.712860] Key type dns_resolver registered
[    3.717207] registered taskstats version 1
[    3.720496] Loading compiled-in X.509 certificates
[    3.742539] uart-pl011 20201000.serial: cts_event_workaround enabled
[    3.746175] 20201000.serial: ttyAMA0 at MMIO 0x20201000 (irq = 81, base_baud = 0) is a PL011 rev2
[    3.757468] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer
[    3.761772] bcm2835-power bcm2835-power: Broadcom BCM2835 power domains driver
[    3.768052] mmc-bcm2835 20300000.mmcnr: mmc_debug:0 mmc_debug2:0
[    3.771535] mmc-bcm2835 20300000.mmcnr: DMA channel allocated
[    3.803125] sdhost: log_buf @ (ptrval) (8bd03000)
[    3.855698] mmc0: sdhost-bcm2835 loaded - DMA enabled (>1)
[    3.883185] of_cfs_init
[    3.887392] of_cfs_init: OK
[    3.893814] Waiting for root device PARTUUID=fb77dacb-02...
[    3.963217] mmc0: host does not support reading read-only switch, assuming write-enable
[    3.969841] mmc0: new high speed SDHC card at address aaaa
[    3.975484] mmcblk0: mmc0:aaaa SU32G 29.7 GiB 
[    3.985296]  mmcblk0: p1 p2
[    3.990746] mmcblk0: mmc0:aaaa SU32G 29.7 GiB
[    4.021138] mmc1: new high speed SDIO card at address 0001
[    4.025652] EXT4-fs (mmcblk0p2): INFO: recovery required on readonly filesystem
[    4.029180] EXT4-fs (mmcblk0p2): write access will be enabled during recovery
[    4.645008] EXT4-fs (mmcblk0p2): recovery complete
[    4.652774] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
[    4.659908] VFS: Mounted root (ext4 filesystem) readonly on device 179:2.
[    4.672891] devtmpfs: mounted
[    4.683522] Freeing unused kernel image (initmem) memory: 436K
[    4.687220] Kernel memory protection not selected by kernel config.
[    4.690800] Run /sbin/init as init process
[    4.694317]   with arguments:
[    4.694341]     /sbin/init
[    4.694360]   with environment:
[    4.694373]     HOME=/
[    4.694388]     TERM=linux
[    5.343914] systemd[1]: System time before build time, advancing clock.
[    5.519817] NET: Registered PF_INET6 protocol family
[    5.526214] Segment Routing with IPv6
[    5.529914] In-situ OAM (IOAM) with IPv6
[    5.645623] systemd[1]: systemd 247.3-7+rpi1 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)
[    5.658634] systemd[1]: Detected architecture arm.
[    5.697216] systemd[1]: Set hostname to <WimPiZeroCamera.WimsWorld>.
[    8.823552] systemd[1]: Queued start job for default target Multi-User System.
[    8.832343] random: systemd: uninitialized urandom read (16 bytes read)
[    8.845466] systemd[1]: Created slice system-getty.slice.
[    8.855414] random: systemd: uninitialized urandom read (16 bytes read)
[    8.862590] systemd[1]: Created slice system-modprobe.slice.
[    8.871824] random: systemd: uninitialized urandom read (16 bytes read)
[    8.879006] systemd[1]: Created slice system-systemd\x2dfsck.slice.
[    8.890763] systemd[1]: Created slice User and Session Slice.
[    8.901199] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[    8.911716] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[    8.924537] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.
[    8.939726] systemd[1]: Reached target Local Encrypted Volumes.
[    8.950927] systemd[1]: Reached target Paths.
[    8.961450] systemd[1]: Reached target Slices.
[    8.971718] systemd[1]: Reached target Swap.
[    8.992662] systemd[1]: Listening on Syslog Socket.
[    9.004199] systemd[1]: Listening on fsck to fsckd communication Socket.
[    9.014989] systemd[1]: Listening on initctl Compatibility Named Pipe.
[    9.027787] systemd[1]: Listening on Journal Audit Socket.
[    9.039590] systemd[1]: Listening on Journal Socket (/dev/log).
[    9.051807] systemd[1]: Listening on Journal Socket.
[    9.064158] systemd[1]: Listening on udev Control Socket.
[    9.075266] systemd[1]: Listening on udev Kernel Socket.
[    9.086732] systemd[1]: Condition check resulted in Huge Pages File System being skipped.
[    9.105301] systemd[1]: Mounting POSIX Message Queue File System...
[    9.142938] systemd[1]: Mounting RPC Pipe File System...
[    9.196885] systemd[1]: Mounting Kernel Debug File System...
[    9.263061] systemd[1]: Mounting Kernel Trace File System...
[    9.283089] systemd[1]: Condition check resulted in Kernel Module supporting RPCSEC_GSS being skipped.
[    9.326171] systemd[1]: Starting Restore / save the current clock...
[    9.375407] systemd[1]: Starting Set the console keyboard layout...
[    9.444206] systemd[1]: Starting Create list of static device nodes for the current kernel...
[    9.573546] systemd[1]: Starting Load Kernel Module configfs...
[    9.644045] systemd[1]: Starting Load Kernel Module drm...
[    9.715011] systemd[1]: Starting Load Kernel Module fuse...
[    9.772720] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.
[    9.883008] systemd[1]: Starting File System Check on Root Device...
[    9.959381] fuse: init (API version 7.34)
[   10.056397] systemd[1]: Starting Journal Service...
[   10.173562] systemd[1]: Starting Load Kernel Modules...
[   10.293577] systemd[1]: Starting Coldplug All udev Devices...
[   10.497717] systemd[1]: Mounted POSIX Message Queue File System.
[   10.568086] systemd[1]: Mounted RPC Pipe File System.
[   10.656644] systemd[1]: Mounted Kernel Debug File System.
[   10.735604] systemd[1]: Mounted Kernel Trace File System.
[   10.825311] systemd[1]: Finished Restore / save the current clock.
[   10.894803] systemd[1]: Finished Create list of static device nodes for the current kernel.
[   10.961170] systemd[1]: modprobe@configfs.service: Succeeded.
[   11.025586] systemd[1]: Finished Load Kernel Module configfs.
[   11.079411] systemd[1]: modprobe@drm.service: Succeeded.
[   11.132309] systemd[1]: Finished Load Kernel Module drm.
[   11.185670] systemd[1]: modprobe@fuse.service: Succeeded.
[   11.242902] systemd[1]: Finished Load Kernel Module fuse.
[   11.312343] systemd[1]: Finished Load Kernel Modules.
[   11.428197] systemd[1]: Mounting FUSE Control File System...
[   11.602844] systemd[1]: Mounting Kernel Configuration File System...
[   11.723998] systemd[1]: Started File System Check Daemon to report status.
[   11.863618] systemd[1]: Starting Apply Kernel Variables...
[   12.002325] systemd[1]: Finished File System Check on Root Device.
[   12.076580] systemd[1]: Mounted FUSE Control File System.
[   12.137696] systemd[1]: Mounted Kernel Configuration File System.
[   12.283330] systemd[1]: Starting Remount Root and Kernel File Systems...
[   12.454112] systemd[1]: Finished Apply Kernel Variables.
[   12.531005] systemd[1]: Started Journal Service.
[   13.322293] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null). Quota mode: none.
[   13.886004] systemd-journald[100]: Received client request to flush runtime journal.
[   13.928907] systemd-journald[100]: File /var/log/journal/68fa56d97f7c4ad18b377cc5780ee614/system.journal corrupted or uncleanly shut down, renaming and replacing.
[   18.180305] mc: Linux media interface: v0.10
[   18.288049] vc_sm_cma: module is from the staging directory, the quality is unknown, you have been warned.
[   18.290893] bcm2835_vc_sm_cma_probe: Videocore shared memory driver
[   18.290953] [vc_sm_connected_init]: start
[   18.343502] [vc_sm_connected_init]: installed successfully
[   18.492369] videodev: Linux video capture interface: v2.00
[   18.606837] bcm2835_mmal_vchiq: module is from the staging directory, the quality is unknown, you have been warned.
[   18.610017] bcm2835_mmal_vchiq: module is from the staging directory, the quality is unknown, you have been warned.
[   18.622220] bcm2835_mmal_vchiq: module is from the staging directory, the quality is unknown, you have been warned.
[   18.648452] bcm2835_isp: module is from the staging directory, the quality is unknown, you have been warned.
[   18.651155] bcm2835_v4l2: module is from the staging directory, the quality is unknown, you have been warned.
[   18.707824] bcm2835-isp bcm2835-isp: Device node output[0] registered as /dev/video13
[   18.723636] bcm2835-isp bcm2835-isp: Device node capture[0] registered as /dev/video14
[   18.726664] bcm2835-isp bcm2835-isp: Device node capture[1] registered as /dev/video15
[   18.736682] bcm2835-isp bcm2835-isp: Device node stats[2] registered as /dev/video16
[   18.738200] bcm2835-isp bcm2835-isp: Register output node 0 with media controller
[   18.738293] bcm2835-isp bcm2835-isp: Register capture node 1 with media controller
[   18.738336] bcm2835-isp bcm2835-isp: Register capture node 2 with media controller
[   18.738374] bcm2835-isp bcm2835-isp: Register capture node 3 with media controller
[   18.740160] bcm2835_codec: module is from the staging directory, the quality is unknown, you have been warned.
[   18.758906] snd_bcm2835: module is from the staging directory, the quality is unknown, you have been warned.
[   18.782242] bcm2835-isp bcm2835-isp: Device node output[0] registered as /dev/video20
[   18.803152] bcm2835_audio bcm2835_audio: there is not valid maps for state default
[   18.806862] bcm2835-isp bcm2835-isp: Device node capture[0] registered as /dev/video21
[   18.809409] bcm2835-isp bcm2835-isp: Device node capture[1] registered as /dev/video22
[   18.823238] bcm2835-isp bcm2835-isp: Device node stats[2] registered as /dev/video23
[   18.823323] bcm2835-isp bcm2835-isp: Register output node 0 with media controller
[   18.823374] bcm2835-isp bcm2835-isp: Register capture node 1 with media controller
[   18.823412] bcm2835-isp bcm2835-isp: Register capture node 2 with media controller
[   18.823447] bcm2835-isp bcm2835-isp: Register capture node 3 with media controller
[   18.825769] bcm2835-isp bcm2835-isp: Loaded V4L2 bcm2835-isp
[   18.840766] bcm2835-codec bcm2835-codec: Device registered as /dev/video10
[   18.840912] bcm2835-codec bcm2835-codec: Loaded V4L2 decode
[   18.871541] bcm2835-codec bcm2835-codec: Device registered as /dev/video11
[   18.871647] bcm2835-codec bcm2835-codec: Loaded V4L2 encode
[   18.907048] bcm2835-codec bcm2835-codec: Device registered as /dev/video12
[   18.907151] bcm2835-codec bcm2835-codec: Loaded V4L2 isp
[   18.924107] bcm2835-codec bcm2835-codec: Device registered as /dev/video18
[   18.924213] bcm2835-codec bcm2835-codec: Loaded V4L2 image_fx
[   18.947826] bcm2835-codec bcm2835-codec: Device registered as /dev/video31
[   18.947931] bcm2835-codec bcm2835-codec: Loaded V4L2 encode_image
[   19.858213] i2c i2c-11: Added multiplexed i2c bus 0
[   19.859223] i2c 10-0036: Fixing up cyclic dependency with 20801000.csi
[   19.860015] i2c i2c-11: Added multiplexed i2c bus 10
[   21.188839] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[   21.706164] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[   21.750115] cfg80211: loaded regulatory.db is malformed or signature is missing/invalid
[   22.412389] brcmfmac: F1 signature read @0x18000000=0x1541a9a6
[   22.561652] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[   22.563589] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43430-sdio.raspberrypi,model-zero-w.bin failed with error -2
[   22.572818] usbcore: registered new interface driver brcmfmac
[   22.885833] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[   22.886140] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[   22.899684] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43430/1 wl0: Jul 19 2021 03:24:18 version 7.45.98 (TOB) (56df937 CY) FWID 01-8e14b897
[   23.403642] checking generic (1eaa9000 151800) vs hw (0 ffffffff)
[   23.403700] fb0: switching to vc4 from simple
[   23.460836] Console: switching to colour dummy device 80x30
[   23.502302] vc4-drm soc:gpu: bound 20400000.hvs (ops vc4_hvs_ops [vc4])
[   23.572366] Registered IR keymap rc-cec
[   23.572797] rc rc0: vc4 as /devices/platform/soc/20902000.hdmi/rc/rc0
[   23.573285] input: vc4 as /devices/platform/soc/20902000.hdmi/rc/rc0/input0
[   28.080722] 8021q: 802.1Q VLAN Support v1.8
[   29.503575] uart-pl011 20201000.serial: no DMA platform data
[   29.815882] Adding 102396k swap on /var/swap.  Priority:-2 extents:4 across:249856k SSFS
[   30.952146] random: crng init done
[   30.952182] random: 7 urandom warning(s) missed due to ratelimiting
[   33.878808] Bluetooth: Core ver 2.22
[   33.878983] NET: Registered PF_BLUETOOTH protocol family
[   33.879004] Bluetooth: HCI device and connection manager initialized
[   33.879041] Bluetooth: HCI socket layer initialized
[   33.879065] Bluetooth: L2CAP socket layer initialized
[   33.879109] Bluetooth: SCO socket layer initialized
[   33.898769] Bluetooth: HCI UART driver ver 2.3
[   33.898816] Bluetooth: HCI UART protocol H4 registered
[   33.898969] Bluetooth: HCI UART protocol Three-wire (H5) registered
[   33.899327] Bluetooth: HCI UART protocol Broadcom registered
[   34.402009] cam-dummy-reg: disabling
[   34.922194] vc4-drm soc:gpu: bound 20400000.hvs (ops vc4_hvs_ops [vc4])
[   34.942692] Registered IR keymap rc-cec
[   34.942995] rc rc0: vc4 as /devices/platform/soc/20902000.hdmi/rc/rc0
[   34.943342] input: vc4 as /devices/platform/soc/20902000.hdmi/rc/rc0/input1
[   34.951397] vc4-drm soc:gpu: bound 20902000.hdmi (ops vc4_hdmi_ops [vc4])
[   34.962416] vc4-drm soc:gpu: bound 20004000.txp (ops vc4_txp_ops [vc4])
[   34.963176] vc4-drm soc:gpu: bound 20206000.pixelvalve (ops vc4_crtc_ops [vc4])
[   34.963844] vc4-drm soc:gpu: bound 20207000.pixelvalve (ops vc4_crtc_ops [vc4])
[   34.964501] vc4-drm soc:gpu: bound 20807000.pixelvalve (ops vc4_crtc_ops [vc4])
[   34.965047] vc4-drm soc:gpu: bound 20c00000.v3d (ops vc4_v3d_ops [vc4])
[   35.004689] [drm] Initialized vc4 0.0.0 20140616 for soc:gpu on minor 0
[   35.005276] vc4-drm soc:gpu: [drm] Cannot find any crtc or sizes
[   36.267635] ov5647 10-0036: Consider updating driver ov5647 to match on endpoints
[   37.037078] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   37.037123] Bluetooth: BNEP filters: protocol multicast
[   37.037157] Bluetooth: BNEP socket layer initialized
[   37.216575] NET: Registered PF_ALG protocol family
[   39.103893] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save enabled
[   40.789395] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[   42.261353] ICMPv6: process `dhcpcd' is using deprecated sysctl (syscall) net.ipv6.neigh.wlan0.retrans_time - use net.ipv6.neigh.wlan0.retrans_time_ms instead
[   45.282398] vc4-drm soc:gpu: [drm] Cannot find any crtc or sizes
[   86.203912] 8<--- cut here ---
[   86.203998] Unable to handle kernel paging request at virtual address bfa0dc9c
[   86.204036] pgd = 4ed01598
[   86.204067] [bfa0dc9c] *pgd=00000000
[   86.204113] Internal error: Oops: 80000005 [#1] ARM
[   86.204142] Modules linked in: cmac algif_hash aes_arm aes_generic ecb algif_skcipher af_alg bnep ov5647 snd_soc_hdmi_codec hci_uart btbcm bluetooth ecdh_generic ecc libaes 8021q garp stp llc vc4 brcmfmac cec brcmutil sha256_generic libsha256 drm_kms_helper cfg80211 snd_soc_core snd_compress snd_pcm_dmaengine syscopyarea rfkill sysfillrect i2c_mux_pinctrl sysimgblt raspberrypi_hwmon fb_sys_fops i2c_mux bcm2835_unicam v4l2_dv_timings v4l2_fwnode v4l2_async snd_bcm2835(C) bcm2835_codec(C) i2c_bcm2835 bcm2835_v4l2(C) v4l2_mem2mem bcm2835_isp(C) bcm2835_mmal_vchiq(C) snd_pcm videobuf2_vmalloc videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 snd_timer videobuf2_common snd vc_sm_cma(C) videodev mc uio_pdrv_genirq fixed uio fuse drm drm_panel_orientation_quirks backlight ip_tables x_tables ipv6
[   86.204627] CPU: 0 PID: 704 Comm: libcamera-vid Tainted: G         C        5.15.32+ #1538
[   86.204667] Hardware name: BCM2835
[   86.204687] PC is at 0xbfa0dc9c
[   86.204718] LR is at video_usercopy+0x4e8/0x5a8 [videodev]
[   86.205310] pc : [<bfa0dc9c>]    lr : [<bf1d1c90>]    psr: 60000013
[   86.205338] sp : c2d2de10  ip : c2d2de10  fp : c2d2deec
[   86.205362] r10: c0c1f028  r9 : 00000000  r8 : 00000000
[   86.205386] r7 : c2d2de3c  r6 : 00000000  r5 : c044560f  r4 : c050560f
[   86.205411] r3 : 00000000  r2 : bf1f3a40  r1 : 0a121acf  r0 : c399c2e8
[   86.205437] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
[   86.205467] Control: 00c5387d  Table: 059d0008  DAC: 00000055
[   86.205490] Register r0 information: slab kmalloc-8k start c399c000 pointer offset 744 size 8192
[   86.205564] Register r1 information: non-paged memory
[   86.205597] Register r2 information: 58-page vmalloc region starting at 0xbf1c9000 allocated at load_module+0xa74/0x25f8
[   86.205667] Register r3 information: NULL pointer
[   86.205696] Register r4 information: non-slab/vmalloc memory
[   86.205727] Register r5 information: non-slab/vmalloc memory
[   86.205755] Register r6 information: NULL pointer
[   86.205780] Register r7 information: non-slab/vmalloc memory
[   86.205809] Register r8 information: NULL pointer
[   86.205834] Register r9 information: NULL pointer
[   86.205862] Register r10 information: non-slab/vmalloc memory
[   86.205896] Register r11 information: non-slab/vmalloc memory
[   86.205924] Register r12 information: non-slab/vmalloc memory
[   86.205952] Process libcamera-vid (pid: 704, stack limit = 0x5546931d)
[   86.205993] Stack: (0xc2d2de10 to 0xc2d2e000)
[   86.206027] de00:                                     c2d2de3b c1b70ea0 c2d2de5c 00000000
[   86.206068] de20: 00000000 00000000 00000000 00000000 c3b2ed20 b58bc074 00c9c038 00000003
[   86.206104] de40: 00000002 00278d00 00004002 00000001 00000000 00000056 00000000 000180b5
[   86.206140] de60: 00000000 00000000 00000000 00000000 00000000 00000000 00000004 0000001d
[   86.206178] de80: 00278d00 00000000 00000000 c2d2de98 c0046c80 c000b100 c13b6014 c1b70ea0
[   86.206216] dea0: c0c2b2c0 c1888ea0 00000000 c41df8c0 c2d2dedc c2d2dec0 c0013798 0a121acf
[   86.206253] dec0: 00000000 bf1d1d50 c3b2ed21 00000000 c3b2ed20 c0c1f028 b58bc074 0000000e
[   86.206292] dee0: c2d2defc c2d2def0 bf1d1d6c bf1d17b4 c2d2df14 c2d2df00 bf1c9148 bf1d1d5c
[   86.206330] df00: c044560f c3b2ed21 c2d2dfa4 c2d2df18 c021fda0 bf1c9108 00000000 c0c1f028
[   86.206369] df20: c0008ff0 00c5387d c2d2df6c c2d2df38 c0014720 c001377c 00000000 00000000
[   86.206406] df40: 00000000 00000000 c0c9c038 60000010 c0008ff0 00c5387d 00000000 c0009104
[   86.206444] df60: c2d2df94 c2d2df70 c00f8f20 c00fa1fc b6968a5c 0a121acf ffffffff b58bc074
[   86.206481] df80: b4f11558 b4f0ba30 00000036 c00083e4 c2d2c000 00000000 00000000 c2d2dfa8
[   86.206518] dfa0: c0008260 c021fc98 b58bc074 b4f11558 0000000e c044560f b58bc074 b6dfb788
[   86.206555] dfc0: b58bc074 b4f11558 b4f0ba30 00000036 0bde9f08 00000014 b6ad9124 01167c88
[   86.206595] dfe0: b6aabe94 b58bc04c b6a354a0 b6bcb1ac 60000010 0000000e 00000000 00000000
[   86.206625] Backtrace: 
[   86.206653] [<bf1d17a8>] (video_usercopy [videodev]) from [<bf1d1d6c>] (video_ioctl2+0x1c/0x24 [videodev])
[   86.207763]  r10:0000000e r9:b58bc074 r8:c0c1f028 r7:c3b2ed20 r6:00000000 r5:c3b2ed21
[   86.207800]  r4:bf1d1d50
[   86.207820] [<bf1d1d50>] (video_ioctl2 [videodev]) from [<bf1c9148>] (v4l2_ioctl+0x4c/0x64 [videodev])
[   86.208594] [<bf1c90fc>] (v4l2_ioctl [videodev]) from [<c021fda0>] (sys_ioctl+0x114/0x9b0)
[   86.209024]  r5:c3b2ed21 r4:c044560f
[   86.209047] [<c021fc8c>] (sys_ioctl) from [<c0008260>] (ret_fast_syscall+0x0/0x1c)
[   86.209094] Exception stack(0xc2d2dfa8 to 0xc2d2dff0)
[   86.209128] dfa0:                   b58bc074 b4f11558 0000000e c044560f b58bc074 b6dfb788
[   86.209167] dfc0: b58bc074 b4f11558 b4f0ba30 00000036 0bde9f08 00000014 b6ad9124 01167c88
[   86.209202] dfe0: b6aabe94 b58bc04c b6a354a0 b6bcb1ac
[   86.209233]  r10:00000000 r9:c2d2c000 r8:c00083e4 r7:00000036 r6:b4f0ba30 r5:b4f11558
[   86.209261]  r4:b58bc074
[   86.209294] Code: bad PC value
[   86.209325] ---[ end trace 573ed3b4c982bd9e ]---

Adding the verbose option gets some interesting information.

pi@WimPiZeroCamera:~ $ libcamera-vid --verbose --timeout 0 --nopreview --listen --output tcp://0.0.0.0:5000
Options:
    verbose: 1
    info_text:#%frame (%fps fps) exp %exp ag %ag dg %dg
    timeout: 0
    width: 640
    height: 480
    output: tcp://0.0.0.0:5000
    post_process_file: 
    rawfull: 0
    preview: none
    qt-preview: 0
    transform: identity
    roi: all
    metering: centre
    exposure: normal
    ev: 0
    awb: auto
    flush: false
    wrap: 0
    brightness: 0
    contrast: 1
    saturation: 1
    sharpness: 1
    framerate: 30
    denoise: auto
    viewfinder-width: 0
    viewfinder-height: 0
    tuning-file: (libcamera)
    lores-width: 0
    lores-height: 0
    mode: unspecified
    viewfinder-mode: unspecified
    bitrate: 0
    profile: 
    level:  
    intra: 0
    inline: 0
    save-pts: 
    codec: h264
    quality (for MJPEG): 50
    keypress: 0
    signal: 0
    initial: record
    split: 0
    segment: 0
    circular: 0
Waiting for client to connect...
Client connection accepted
Running without preview window
Opening camera...
[0:01:26.152722968] [676]  INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3544-22656360
[0:01:26.265051532] [688] ERROR CameraSensor camera_sensor.cpp:591 'ov5647 10-0036': Camera sensor does not support test pattern modes.
[0:01:26.418635710] [688]  INFO RPI raspberrypi.cpp:1356 Registered camera /base/soc/i2c0mux/i2c@1/ov5647@36 to Unicam device /dev/media3 and ISP device /dev/media0
Acquired camera /base/soc/i2c0mux/i2c@1/ov5647@36
Configuring video...
[0:01:26.426674609] [676]  INFO Camera camera.cpp:1029 configuring streams: (0) 640x480-YUV420
[0:01:26.430277012] [688]  INFO RPI raspberrypi.cpp:760 Sensor: /base/soc/i2c0mux/i2c@1/ov5647@36 - Selected sensor format: 640x480-SGBRG10_1X10 - Selected unicam format: 640x480-pGAA
Camera streams configured
Buffers allocated and mapped
Video setup complete
Opened H264Encoder on /dev/video11 as fd 25
Got 6 output buffers
Got 12 capture buffers
Codec streaming started
Requests created
Camera started!
Viewfinder frame 0
NetOutput: output buffer 0xb3463000 size 10770
Viewfinder frame 1
NetOutput: output buffer 0xb33e3000 size 5366
Viewfinder frame 2
NetOutput: output buffer 0xb3363000 size 5147
Viewfinder frame 3
NetOutput: output buffer 0xb32e3000 size 8520
Viewfinder frame 4
NetOutput: output buffer 0xb3263000 size 14873
Viewfinder frame 5
NetOutput: output buffer 0xb31e3000 size 17447
Viewfinder frame 6
NetOutput: output buffer 0xb3163000 size 17869
Viewfinder frame 7
NetOutput: output buffer 0xb30e3000 size 17804
Viewfinder frame 8
NetOutput: output buffer 0xb3063000 size 18022
Viewfinder frame 9
NetOutput: output buffer 0xb2fe3000 size 17997
Viewfinder frame 10
NetOutput: output buffer 0xb2f63000 size 17849
Viewfinder frame 11
NetOutput: output buffer 0xb2ee3000 size 17926
Viewfinder frame 12
NetOutput: output buffer 0xb3463000 size 18017
Viewfinder frame 13
NetOutput: output buffer 0xb33e3000 size 18010
Viewfinder frame 14
NetOutput: output buffer 0xb3363000 size 18047

Each time I try higher resolution, the pi program crashes, and sometimes it leaves the pi completely nonresponsive on the network, requiring a power cycle to recover it.

Govee H5074 and VPD data

I was playing with a couple of brand new H5074 devices and realized that the iOS app now includes two new charts, Dew Point, and VPD.

VPD

The new devices report as hardware version 2.00.01 firmware version 1.00.01. My older devices all report hardware version 1.00.01 and firmware version 1.01.00.

The pressure and dew point are available in both the new and old H5074 devices, but not with any of the other units I’ve got connected. (H5177 or H5075)

I’ve not been able to find details on the data. I don’t know if it’s packed into the BLE advertising data, or only available in the connected download data.

Govee H5183 Bluetooth Wireless Meat Thermometer

GVH5183

I recently came across the Govee Meat Thermometer on sale at amazon and decided to give it a try and see if the communication protocol was similar to any of the other Govee thermometers I’ve bought, the H5177, H5075 or H5074.

The Bluetooth communication protocol is different from any of the other devices I’ve got, but after a day of staring at raw data I was able to figure out some of the details and add support to my monitoring program https://github.com/wcbonner/GoveeBTTempLogger/ . The Bluetooth announcements from the device include both the current temperature and the set alarm temperature. I’ve not yet figured out the battery strength data. The phone app displays the battery, so I know it should be available.

There’s an orange button on one side to turn the unit on. Hold for three seconds. It will beep indicating it’s on. The LED will start flashing green, and the device will periodically send Bluetooth announcements including the temperature and alarm temperature. If you connect to the device with the phone app, the LED will switch to flashing blue, indicating that it’s in a connected state. While the device is in a connected state, it doesn’t not send out announcements. To return it to standard mode, simply exit back to the top level of the app. The app will still alarm when the probe gets to set temperature. Holding the button for three seconds when it’s on will turn it off, with beeps to confirm the change.

A nice feature of this device is that it has a magnet built in, enough to hold the device to the front of a metal oven.

Details from the Amazon listing:

  • Useful Smart Alerts: If temperatures fall out of your preset range, an alarm will sound, and you will get a phone alerts notification via the Govee Home app. The probe measuring range is 0° to 300°C /32° to 572°F. Note: press and hold the orange button for 3 seconds to power on.
  • Convenient Remote Monitoring: Tired of waiting near a hot grill, With a 230ft/70m smart Bluetooth wireless control range(no obstructions), you are free to relax and check your temperatures on your smartphone at a glance. Remember to remove the protective tip before use.
  • Performance Review: Detailed temperature data and easy-to-read charts are generated within 2 hours. (Charts can’t be stored/downloaded) Perfect for a quick review or an in-depth analysis of temperature performance. Improve your cooking and temperature with calibration at ±5°C.
  • Temperature Made Easy: 28 temperature recommendations for 14 types of foods take the hassle out of cooking. Ideal for both beginner cooks and pro chefs.
  • Practical Features: Temperature switching between Fahrenheit and Celcius. (The default unit is Fahrenheit) Mute alarm function and countdown timer on the Govee Home app. The magnetic back can easily be attached to the refrigerator, oven or grill, or any other metal surface. Note: Please keep the meat thermometer unit safe from heat sources and very hot surfaces to protect its internal batteries and exterior shell.
  • Part Number: B5183011

SVG, CSS Style, dark-mode, and Apple

In my recent GoveeBTTempLogger Project I’ve been writing SVG files as temperature graphs. I realized I could organize the color combinations with CSS Style descriptions inside the SVG instead of fully describing each element of the graphic. I am using transparent backgrounds by default, and loading the SVG files in a simple index html file like any other image.

Playing with CSS in the HTML, I came across the ability to support dark-mode. I thought that this would be really nice for when I bring up the graphs on my phone late at night, not having everything being in a bright white background.

    @media screen and (prefers-color-scheme: dark) {
        body {
            background-color: black;
            color: grey;
        }
    }

I added the previous block to my style in the index.html file, which overrides the default body style of background-color: white and color: black. It works nicely at the top level, but now the black lines and text in my SVG became invisible, since now they match the background.

I tried something similar in the style for my SVG and it was working great in Chrome or Microsoft Edge. But then I realized that it doesn’t work on my phone. After realizing that it wasn’t working correctly on the phone, I decided to try switching the defaults so my default used grey, and if light mode was selected it would use black. It still didn’t work! It seems that apple is paying attention to my color-scheme selection, but doing something different from any other browser.

	<style>
		text { font-family: sans-serif; font-size: 12px; fill: grey; }
		line { stroke: grey; }
		polygon { fill-opacity: 0.5; }
	@media screen and (prefers-color-scheme: light) {
		text { fill: black; }
		line { stroke: black; }
	}
	</style>

I had a friend who works primarily on a Mac test to see if the problem was specific to the iPhone, or if it occurred in Safari on the desktop as well. Yes. Apple is handling my styles differently from the other browsers I tried.

Safari on Mac
Chrome on Mac
Firefox on Mac

You can see my choices displaying the way I want on Chrome and Firefox, with grey lines and text on a black background, while Safari isn’t showing the grey. Am I doing something explicitly wrong in my style that Chrome and Firefox are forgiving? Or is Apple not supporting the feature properly?

The frustrating thing is that all browsers on iPhones use the Apple rendering engine. That means there’s no way I know to get the functionality I want on my phone, where the phone uses dark mode overnight, but light mode during the day.

GoveeBTTempLogger as a Debian Package

After getting my program to listen and log Bluetooth Low Energy advertisements from Govee thermometers running reliably, I needed to figure out how to make the program automatically start when my Raspberry was rebooted. I was led down two paths to get things working, systemd unit files, and debian package files created with dpkg-deb.

The final file structure I came up with is visible in https://github.com/wcbonner/GoveeBTTempLogger but still can use some explanation as to what I did.

To create the debian package, I created a file structure under my source repository that mimicked what I wanted to put on the target system.

\GOVEEBTTEMPLOGGER\GOVEEBTTEMPLOGGER
├───DEBIAN
│       control
│       postinst
│       postrm
│       prerm
│
├───etc
│   └───systemd
│       └───system
│               goveebttemplogger.service
│
├───usr
│   └───local
│       └───bin
│               goveebttemplogger
│
└───var
    └───log
        └───goveebttemplogger
                gvh507x.txt

I had decided I wanted my executable to be located in /usr/local/bin. It’s the file named goveebttemplogger. I wanted it to write log files into /var/log/goveebttemplogger/ and the easiest way to make sure that directory was created was to put a zero length file in that directory, gvh507x.txt.

The files in the DEBIAN directory are used by the dpkg-deb program when building the distributable package. More on those later.

To get the program configured to automatically run when the machine boots, and properly stop when it shuts down, I settled on the systemd unit files as the both the easiest and most reliable method. I’ve been around linux long enough to first think of /etc/rc.local manipulation, then script files for various runlevels in the /etc/init.d/ directories, and was amazed at both the power and ease of setting up to use the systemd unit files. The hardest part was figuring out what other services my program must have already started. I knew it was dependent on Bluetooth, but the specific services was a bit of a guess.

# Contents of /etc/systemd/system/goveebttemplogger.service
[Unit]
Description=GoveeBTTempLogger service
After=bluetooth.target dbus-org.bluez.service network.target
Requires=bluetooth.target
KillSignal=SIGINT

[Service]
Type=simple
Restart=always
ExecStart=/usr/local/bin/goveebttemplogger -v 0 -l /var/log/goveebttemplogger/

[Install]
WantedBy=multi-user.target

After creating that file in the specified location, I was able to issue the following commands to make systemd start the program.

sudo systemctl daemon-reload
sudo systemctl enable goveebttemplogger.service
sudo systemctl start goveebttemplogger.service

The most unique bit of my unit file is that I specifically want my program to be sent the SIGINT signal to kill it, since I will recognize that and flush the log files before exiting. The ExecStart line is the command line to run my program, which I’m also specifying the log directory as one of the parameters.

I had the systemd unit file and the initial DEBIAN/control file figured out pretty easily. I’d come across this https://linuxconfig.org/easy-way-to-create-a-debian-package-and-local-package-repository article which helped understanding the control file.

Package: GoveeBTTempLogger
Version: 1.20200725-1
Section: custom
Priority: optional
Architecture: armhf
Essential: no
Installed-Size: 95
Maintainer: wcbonner@users.noreply.github.com
Description: Listen and log Govee Thermometer Bluetooth Low Energy Advertisments
Depends: libbluetooth3

What took me a while to figure out was how to get the systemctl commands to be run after the files were put in place by the package manager. There are four script commands, which I’m using three. preinst, postinst, prerm, and postrm. Each of them is a simple script and needs to be marked executable in the file system. They are each run at various stages by the package manager, Pre-Installation, Post-Installation, Pre-Removal, and Post-Removal.

#!/bin/sh
# POSTINST script for goveebttemplogger

echo "\033[36m HI I'M A POSTINST SCRIPT `date +"%s"` \033[39m"
systemctl daemon-reload
systemctl enable goveebttemplogger.service
systemctl start goveebttemplogger.service

exit 0

After installation of my program and the systemd unit file, I reload the systemd database, enable my service, and start my service.

#!/bin/sh
# PRERM script for goveebttemplogger

echo "\033[36m HI I'M A PRERM SCRIPT `date +"%s"` \033[39m"
systemctl stop goveebttemplogger.service
systemctl disable goveebttemplogger.service

exit 0

Before removal of my program, I stop the service and disable the service.

#!/bin/sh
# POSTRM script for goveebttemplogger

echo "\033[36m HI I'M A POSTRM SCRIPT `date +"%s"` \033[39m"
systemctl daemon-reload

exit 0

After removal of my program, I reload the systemd database, to make sure it’s not got my unit file in its database any longer.

When I retrieve a copy of my code with the command git clone https://github.com/wcbonner/GoveeBTTempLogger I then have a subdirectory below the GoveeBTTempLogger that is also named GoveeBTTempLogger. That deeper directory is the structure that will be created into the package.


GoveeBTTempLogger/usr/local/bin/goveebttemplogger: goveebttemplogger.cpp
        mkdir -p GoveeBTTempLogger/usr/local/bin
        g++ -lbluetooth goveebttemplogger.cpp -o GoveeBTTempLogger/usr/local/bin/goveebttemplogger

deb: GoveeBTTempLogger/usr/local/bin/goveebttemplogger GoveeBTTempLogger/DEBIAN/control GoveeBTTempLogger/etc/systemd/system/goveebttemplogger.service
        mkdir -p GoveeBTTempLogger/var/log/goveebttemplogger
        touch GoveeBTTempLogger/var/log/goveebttemplogger/gvh507x.txt
        chmod a+x GoveeBTTempLogger/DEBIAN/postinst GoveeBTTempLogger/DEBIAN/postrm GoveeBTTempLogger/DEBIAN/prerm
        dpkg-deb --build GoveeBTTempLogger

I made the very simple makefile above to both compile the code and build the debian package with the simple command of make deb. It produces the package ‘goveebttemplogger’ in ‘GoveeBTTempLogger.deb’.

I can then install the package and start it running with the command sudo apt-get install ./GoveeBTTempLogger.deb

I can stop and either remove it or purge it with the command sudo apt-get remove goveebttemplogger or sudo apt-get purge goveebttemplogger.

Govee GVH5075 Thermometer Hygrometer

Last week I came across a deal on a small thermometer with display and Bluetooth access for under $10 so I had to give it a try. The fact that the data is available via bluetooth instead of via a web service was a major selling point for me. I am hoping to be able to to log the data via a Raspberry Pi4.

GVH5070 near my Raspberry Pi4

I installed the Govee Home app on my iPhone and it was able to find the device, communicate with it, and pull both current and accumulated data.

When I attempted to find it from my Pi4 it was much more difficult. I live in an apartment with units all around. I’m not just dealing with my own devices that may be visible, but my neighbors as well.

I managed to find the device using linux command line tools, but was not able to successfully connect. A friend suggested BLE Scanner 4.0 for my iPhone for discovering the details, and it was at least able to confirm what I should be looking for using the linux command line tools. I still had timeout issues with the iPhone app, but at least was able to confirm that I could connect to the device and retrieve GUID information.

This is my first time attempting to gather data from a Bluetooth device. I’m still in the research and test phase. I’m listing a bunch of the URLS I’ve found that have been helpful.

https://www.reddit.com/r/Govee/comments/e8ljbp/work_to_access_data_from_a_govee_h5075_indoor/
https://www.jaredwolff.com/get-started-with-bluetooth-low-energy/
https://github.com/neilsheps/GoveeTemperatureAndHumidity
https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=241686
https://www.cnet.com/how-to/how-to-setup-bluetooth-on-a-raspberry-pi-3/
https://www.real-world-systems.com/docs/hcitool.1.html

From the command line on my Pi4 I already had the tools installed to try several Bluetooth commands. I believe they were installed as part of the bluez package. The first two commands below get details on the Raspberry Pi Bluetooth hardware, then the hcitool lescan command produced a lot of devices, and I found the line referencing the GVH5075 so I could use the address in further commands.

pi@WimPi4:~ $ sudo hcitool dev
Devices:
        hci0    DC:A6:32:1C:B5:74

pi@WimPi4:~ $ sudo hciconfig -a
hci0:   Type: Primary  Bus: UART
        BD Address: DC:A6:32:1C:B5:74  ACL MTU: 1021:8  SCO MTU: 64:1
        UP RUNNING 
        RX bytes:21284 acl:25 sco:0 events:791 errors:0
        TX bytes:4401 acl:26 sco:0 commands:172 errors:0
        Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
        Link policy: RSWITCH SNIFF 
        Link mode: SLAVE ACCEPT 
        Name: 'WimPi4'
        Class: 0x000000
        Service Classes: Unspecified
        Device Class: Miscellaneous, 
        HCI Version: 5.0 (0x9)  Revision: 0x13b
        LMP Version: 5.0 (0x9)  Subversion: 0x6119
        Manufacturer: Cypress Semiconductor Corporation (305)

pi@WimPi4:~ $ sudo hcitool lescan
LE Scan ...
7B:F9:68:96:C4:92 (unknown)
57:FA:0A:E7:61:A4 (unknown)
A4:C1:38:37:BC:AE GVH5075_BCAE
A4:C1:38:37:BC:AE (unknown)
15:FF:0C:3F:E7:35 (unknown)
57:FA:0A:E7:61:A4 (unknown)

pi@WimPi4:~ $ sudo hcitool leinfo A4:C1:38:37:BC:AE
Requesting information ...
        Handle: 64 (0x0040)
        LMP Version: 4.2 (0x8) LMP Subversion: 0x22bb
        Manufacturer: Telink Semiconductor Co. Ltd (529)
        Features: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

Another command that I attempted before I used the hcitool command was the bluetoothctl command. It scrolls a lot of data, but now that I have an idea what I’m looking at, I may be able to see announcement data from the thermometer periodically in the stream by filtering just to see the data coming from the MAC address.

pi@WimPi4:~ $ sudo bluetoothctl
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller DC:A6:32:1C:B5:74 Discovering: yes
[NEW] Device 57:75:EA:B6:EC:2B 57-75-EA-B6-EC-2B
[NEW] Device E7:E7:B4:AB:4A:1F 846B219FB80338A3E9
[NEW] Device 48:56:2E:FF:59:45 48-56-2E-FF-59-45
[NEW] Device 46:53:2F:D4:6F:A1 46-53-2F-D4-6F-A1
[NEW] Device 5C:C9:C5:C9:70:5F 5C-C9-C5-C9-70-5F
[NEW] Device 48:CF:F7:19:4A:3A 48-CF-F7-19-4A-3A
[NEW] Device 4E:30:D1:5D:0F:48 4E-30-D1-5D-0F-48
[NEW] Device 7D:4A:A3:81:32:22 7D-4A-A3-81-32-22
[NEW] Device 7E:0F:63:2B:DC:3E 7E-0F-63-2B-DC-3E
[NEW] Device 7F:5D:37:A2:4E:BA 7F-5D-37-A2-4E-BA
[NEW] Device 7F:6B:44:CD:3A:E5 7F-6B-44-CD-3A-E5
[NEW] Device 00:07:80:37:BD:35 00-07-80-37-BD-35
[NEW] Device 04:52:C7:BC:1C:E3 LE-Bose Revolve SoundLink
[NEW] Device 4F:84:D2:AC:59:FF 4F-84-D2-AC-59-FF
[NEW] Device 4E:F0:6A:DD:3D:7E 4E-F0-6A-DD-3D-7E
[NEW] Device 75:25:34:3F:B9:29 75-25-34-3F-B9-29
[NEW] Device 60:EC:A4:49:B6:67 60-EC-A4-49-B6-67
[NEW] Device 98:D6:BB:20:EB:3B 98-D6-BB-20-EB-3B
[NEW] Device 78:13:28:A8:0A:FF 78-13-28-A8-0A-FF
[NEW] Device 56:6F:B2:E0:40:E3 56-6F-B2-E0-40-E3
[NEW] Device 69:D9:38:44:5C:04 69-D9-38-44-5C-04
[NEW] Device 56:63:50:90:82:D6 56-63-50-90-82-D6
[CHG] Device A4:C1:38:37:BC:AE RSSI: -43
[CHG] Device A4:C1:38:37:BC:AE ManufacturerData Key: 0xec88
[CHG] Device A4:C1:38:37:BC:AE ManufacturerData Value:
00 03 32 62 64 00 ..2bd.
[CHG] Device A4:C1:38:37:BC:AE ManufacturerData Key: 0x004c
[CHG] Device A4:C1:38:37:BC:AE ManufacturerData Value:
02 15 49 4e 54 45 4c 4c 49 5f 52 4f 43 4b 53 5f ..INTELLI_ROCKS_
48 57 50 75 f2 ff c2 HWPu…
[CHG] Device 75:25:34:3F:B9:29 RSSI: -83
[NEW] Device 47:10:2F:15:99:2E 47-10-2F-15-99-2E
[NEW] Device B8:31:B5:8B:12:D2 ETOBAN386
[NEW] Device F0:6E:0B:D1:1B:BF ELRWLK345
[CHG] Device 75:25:34:3F:B9:29 RSSI: -72
[CHG] Device 7D:4A:A3:81:32:22 RSSI: -89
[CHG] Device 7D:4A:A3:81:32:22 RSSI: -81
[CHG] Device 98:D6:BB:20:EB:3B RSSI: -94
[NEW] Device A4:83:E7:20:06:5B A4-83-E7-20-06-5B
[CHG] Device E7:E7:B4:AB:4A:1F ManufacturerData Key: 0x05a7
[CHG] Device E7:E7:B4:AB:4A:1F ManufacturerData Value:
03 13 31 68 39 63 51 6f 4b 76 54 34 00 ..1h9cQoKvT4.
[NEW] Device 00:07:80:37:CA:7D 00-07-80-37-CA-7D
[CHG] Device E7:E7:B4:AB:4A:1F ManufacturerData Key: 0x05a7
[CHG] Device E7:E7:B4:AB:4A:1F ManufacturerData Value:
03 12 78 4d 32 49 31 6d 31 6a 6f 32 67 ..xM2I1m1jo2g
[CHG] Device E7:E7:B4:AB:4A:1F ManufacturerData Key: 0x05a7
[CHG] Device E7:E7:B4:AB:4A:1F ManufacturerData Value:
03 10 01 99 44 de ad be ef 00 0a 00 ca ….D……..
[CHG] Device 4E:30:D1:5D:0F:48 ManufacturerData Key: 0x004c
[CHG] Device 4E:30:D1:5D:0F:48 ManufacturerData Value:
10 06 10 1e b0 2a e1 be …..*..
[CHG] Device 98:D6:BB:20:EB:3B RSSI: -85
[NEW] Device 00:07:80:37:BE:C9 523
[CHG] Device 5C:C9:C5:C9:70:5F ManufacturerData Key: 0x004c
[CHG] Device 5C:C9:C5:C9:70:5F ManufacturerData Value:
10 06 5a 1e 56 a0 e1 eb ..Z.V…
[CHG] Device E7:E7:B4:AB:4A:1F ManufacturerData Key: 0x05a7
[CHG] Device E7:E7:B4:AB:4A:1F ManufacturerData Value:
03 13 31 68 39 63 51 6f 4b 76 54 34 00 ..1h9cQoKvT4.
[CHG] Device 75:25:34:3F:B9:29 RSSI: -81
[NEW] Device 6B:C2:D2:28:1E:A5 6B-C2-D2-28-1E-A5
[CHG] Device 5C:C9:C5:C9:70:5F ManufacturerData Key: 0x004c
[CHG] Device 5C:C9:C5:C9:70:5F ManufacturerData Value:
0c 0e 00 41 32 56 c8 79 5a 01 9d 63 d5 79 c7 80 …A2V.yZ..c.y..
10 06 56 1e 56 a0 e1 eb ..V.V…
[CHG] Device A4:C1:38:37:BC:AE RSSI: -35
[CHG] Device A4:C1:38:37:BC:AE ManufacturerData Key: 0xec88
[CHG] Device A4:C1:38:37:BC:AE ManufacturerData Value:
00 03 32 61 64 00 ..2ad.
[CHG] Device A4:C1:38:37:BC:AE ManufacturerData Key: 0x004c
[CHG] Device A4:C1:38:37:BC:AE ManufacturerData Value:
02 15 49 4e 54 45 4c 4c 49 5f 52 4f 43 4b 53 5f ..INTELLI_ROCKS_
48 57 50 75 f2 ff c2 HWPu…
[CHG] Device 48:CF:F7:19:4A:3A RSSI: -76
[CHG] Device E7:E7:B4:AB:4A:1F ManufacturerData Key: 0x05a7
[CHG] Device E7:E7:B4:AB:4A:1F ManufacturerData Value:
03 10 01 99 44 de ad be ef 00 0a 00 ca ….D……..
[NEW] Device 78:11:F9:E8:7A:DA 78-11-F9-E8-7A-DA
[CHG] Device 47:10:2F:15:99:2E RSSI: -84
[CHG] Device 69:D9:38:44:5C:04 RSSI: -83
[CHG] Device 47:10:2F:15:99:2E ManufacturerData Key: 0x004c
[CHG] Device 47:10:2F:15:99:2E ManufacturerData Value:
10 06 1c 1e 9a e0 28 9b ……(.
[CHG] Device 5C:C9:C5:C9:70:5F ManufacturerData Key: 0x004c
[CHG] Device 5C:C9:C5:C9:70:5F ManufacturerData Value:
0c 0e 00 42 32 7b fc b2 b6 a1 46 31 82 0f 67 02 …B2{….F1..g.
10 06 56 1e 56 a0 e1 eb ..V.V…
[CHG] Device 75:25:34:3F:B9:29 RSSI: -73
[CHG] Device E7:E7:B4:AB:4A:1F ManufacturerData Key: 0x05a7
[CHG] Device E7:E7:B4:AB:4A:1F ManufacturerData Value:
03 13 31 68 39 63 51 6f 4b 76 54 34 00 ..1h9cQoKvT4.
[CHG] Device 47:10:2F:15:99:2E ManufacturerData Key: 0x004c
[CHG] Device 47:10:2F:15:99:2E ManufacturerData Value:
10 06 14 1e 9a e0 28 9b ……(.
[NEW] Device 5C:53:86:8D:A4:61 5C-53-86-8D-A4-61
[NEW] Device 42:32:EC:5F:59:C5 42-32-EC-5F-59-C5
[bluetooth]# scan off
Discovery stopped
[CHG] Device E7:E7:B4:AB:4A:1F TxPower is nil
[CHG] Device E7:E7:B4:AB:4A:1F RSSI is nil
[DEL] Device E7:E7:B4:AB:4A:1F 846B219FB80338A3E9
[CHG] Controller DC:A6:32:1C:B5:74 Discovering: no
[CHG] Device 42:32:EC:5F:59:C5 TxPower is nil
[CHG] Device 42:32:EC:5F:59:C5 RSSI is nil
[CHG] Device 5C:53:86:8D:A4:61 RSSI is nil
[CHG] Device 78:11:F9:E8:7A:DA TxPower is nil
[CHG] Device 78:11:F9:E8:7A:DA RSSI is nil
[CHG] Device 6B:C2:D2:28:1E:A5 TxPower is nil
[CHG] Device 6B:C2:D2:28:1E:A5 RSSI is nil
[CHG] Device 00:07:80:37:BE:C9 RSSI is nil
[CHG] Device 00:07:80:37:CA:7D RSSI is nil
[CHG] Device A4:83:E7:20:06:5B RSSI is nil
[CHG] Device F0:6E:0B:D1:1B:BF TxPower is nil
[CHG] Device F0:6E:0B:D1:1B:BF RSSI is nil
[CHG] Device B8:31:B5:8B:12:D2 TxPower is nil
[CHG] Device B8:31:B5:8B:12:D2 RSSI is nil
[CHG] Device 47:10:2F:15:99:2E TxPower is nil
[CHG] Device 47:10:2F:15:99:2E RSSI is nil
[CHG] Device A4:C1:38:37:BC:AE RSSI is nil
[CHG] Device 56:63:50:90:82:D6 RSSI is nil
[CHG] Device 69:D9:38:44:5C:04 TxPower is nil
[CHG] Device 69:D9:38:44:5C:04 RSSI is nil
[CHG] Device 56:6F:B2:E0:40:E3 TxPower is nil
[CHG] Device 56:6F:B2:E0:40:E3 RSSI is nil
[CHG] Device 78:13:28:A8:0A:FF TxPower is nil
[CHG] Device 78:13:28:A8:0A:FF RSSI is nil
[CHG] Device 98:D6:BB:20:EB:3B RSSI is nil
[CHG] Device 60:EC:A4:49:B6:67 TxPower is nil
[CHG] Device 60:EC:A4:49:B6:67 RSSI is nil
[CHG] Device 75:25:34:3F:B9:29 TxPower is nil
[CHG] Device 75:25:34:3F:B9:29 RSSI is nil
[CHG] Device 4E:F0:6A:DD:3D:7E TxPower is nil
[CHG] Device 4E:F0:6A:DD:3D:7E RSSI is nil
[CHG] Device 4F:84:D2:AC:59:FF TxPower is nil
[CHG] Device 4F:84:D2:AC:59:FF RSSI is nil
[CHG] Device 04:52:C7:BC:1C:E3 TxPower is nil
[CHG] Device 04:52:C7:BC:1C:E3 RSSI is nil
[CHG] Device 00:07:80:37:BD:35 RSSI is nil
[CHG] Device 7F:6B:44:CD:3A:E5 TxPower is nil
[CHG] Device 7F:6B:44:CD:3A:E5 RSSI is nil
[CHG] Device 7F:5D:37:A2:4E:BA TxPower is nil
[CHG] Device 7F:5D:37:A2:4E:BA RSSI is nil
[CHG] Device 7E:0F:63:2B:DC:3E TxPower is nil
[CHG] Device 7E:0F:63:2B:DC:3E RSSI is nil
[CHG] Device 7D:4A:A3:81:32:22 TxPower is nil
[CHG] Device 7D:4A:A3:81:32:22 RSSI is nil
[CHG] Device 4E:30:D1:5D:0F:48 TxPower is nil
[CHG] Device 4E:30:D1:5D:0F:48 RSSI is nil
[CHG] Device 48:CF:F7:19:4A:3A TxPower is nil
[CHG] Device 48:CF:F7:19:4A:3A RSSI is nil
[CHG] Device 5C:C9:C5:C9:70:5F TxPower is nil
[CHG] Device 5C:C9:C5:C9:70:5F RSSI is nil
[CHG] Device 46:53:2F:D4:6F:A1 TxPower is nil
[CHG] Device 46:53:2F:D4:6F:A1 RSSI is nil
[CHG] Device 48:56:2E:FF:59:45 TxPower is nil
[CHG] Device 48:56:2E:FF:59:45 RSSI is nil
[CHG] Device 57:75:EA:B6:EC:2B TxPower is nil
[CHG] Device 57:75:EA:B6:EC:2B RSSI is nil
[DEL] Device 57:75:EA:B6:EC:2B 57-75-EA-B6-EC-2B
[DEL] Device 48:56:2E:FF:59:45 48-56-2E-FF-59-45
[DEL] Device 46:53:2F:D4:6F:A1 46-53-2F-D4-6F-A1
[DEL] Device 5C:C9:C5:C9:70:5F 5C-C9-C5-C9-70-5F
[DEL] Device 48:CF:F7:19:4A:3A 48-CF-F7-19-4A-3A
[DEL] Device 4E:30:D1:5D:0F:48 4E-30-D1-5D-0F-48
[DEL] Device 7D:4A:A3:81:32:22 7D-4A-A3-81-32-22
[DEL] Device 7E:0F:63:2B:DC:3E 7E-0F-63-2B-DC-3E
[DEL] Device 7F:5D:37:A2:4E:BA 7F-5D-37-A2-4E-BA
[DEL] Device 7F:6B:44:CD:3A:E5 7F-6B-44-CD-3A-E5
[DEL] Device 00:07:80:37:BD:35 00-07-80-37-BD-35
[DEL] Device 04:52:C7:BC:1C:E3 LE-Bose Revolve SoundLink
[DEL] Device 4F:84:D2:AC:59:FF 4F-84-D2-AC-59-FF
[DEL] Device 4E:F0:6A:DD:3D:7E 4E-F0-6A-DD-3D-7E
[DEL] Device 75:25:34:3F:B9:29 75-25-34-3F-B9-29
[DEL] Device 60:EC:A4:49:B6:67 60-EC-A4-49-B6-67
[DEL] Device 98:D6:BB:20:EB:3B 98-D6-BB-20-EB-3B
[DEL] Device 78:13:28:A8:0A:FF 78-13-28-A8-0A-FF
[DEL] Device 56:6F:B2:E0:40:E3 56-6F-B2-E0-40-E3
[DEL] Device 69:D9:38:44:5C:04 69-D9-38-44-5C-04
[DEL] Device 56:63:50:90:82:D6 56-63-50-90-82-D6
[DEL] Device 47:10:2F:15:99:2E 47-10-2F-15-99-2E
[DEL] Device B8:31:B5:8B:12:D2 ETOBAN386
[DEL] Device F0:6E:0B:D1:1B:BF ELRWLK345
[DEL] Device A4:83:E7:20:06:5B A4-83-E7-20-06-5B
[DEL] Device 00:07:80:37:CA:7D 00-07-80-37-CA-7D
[DEL] Device 00:07:80:37:BE:C9 523
[DEL] Device 6B:C2:D2:28:1E:A5 6B-C2-D2-28-1E-A5
[DEL] Device 78:11:F9:E8:7A:DA 78-11-F9-E8-7A-DA
[DEL] Device 5C:53:86:8D:A4:61 5C-53-86-8D-A4-61
[DEL] Device 42:32:EC:5F:59:C5 42-32-EC-5F-59-C5
[bluetooth]# exit

I’m posting all of this here and hopefully will be able to make progress on retrieving the data in the next few days.

iTunes, Microsoft Store, COM Interface Type Library

Several years ago I’d written a program to manipulate data in the iTunes library using the approved Apple COM API. Part of the way this works in a C program is to include a type library in the headers defining all of the function calls. When iTunes is installed in the traditional way, Apple embedded the type library in the executable, and the executable was installed in a traditional location.

#import "C:/Program Files (x86)/iTunes/iTunes.exe"
using namespace iTunesLib;

With the installation of iTunes from the Microsoft store, the iTunes executable no longer lives in that location. Today my application builds properly with the following import command, but it may change mysteriously with version changes and automatic updates via the store.

#import "C:/Program Files/WindowsApps/AppleInc.iTunes_12093.3.37141.0_x64__nzyj5cx40ttqa/iTunes.exe"
using namespace iTunesLib;

My program builds and runs more reliably than it used to, which I’m assuming is in part due to the fact that I appear to now be using a 64 bit version of iTunes, and all the extra work Apple put in to make iTunes more reliable on windows in general.

Finding the iTunes application itself was the hardest part of the transition. I’m happy the API still exists because Apple no longer hosts easy access to the documentation for the API, and http://www.joshkunz.com/iTunesControl/ seems to be the most complete and searchable information.