What I did over the past week XVIII

Home:

  • Replaced kitchen faucet and installed a drinking water filter. This was a real PITA due to limited access and seized bolts. I ended up using a Dremel to cut off the supply lines, and an angle grinder to take off the faucet from the top. Unfortunately, I managed to gouge the sink in the process. It was already pretty beat up so it's not the end of the world.
  • More yard work! Literally hammered the leaf sweeper back into working condition, cleaned out the gutters yet again, swept up several more loads of leaves, and hauled off the first 20 bags of this new season before Eta's effects began to hit us.

Vehicular Stuff:

  • Replaced the Kubota's taillights with standard 6" oval LED fixtures, for much improved nighttime visibility. Daytime too, as the old bulbs were pretty dinky.

Rockbox-specific:

  • Got rid of last python2 scripts involved in WWW site.
  • Added a heuristic to determine if ATA devices are actually solid-state.
  • Updated a 7-year-old patch for iPods to restore factory hard drive timings, but made it apply only when solid-state drives were in use.
  • Nuked a few more remnants of the old Archos players.
  • Fixed a scroll wheel regression on the Eros Q and clones.
  • A little progress on the Patch / Bug backlog.

Printing-related:

Sony UP-D898 family working!

241106:362363

I got my hands on a UP-D898MD on Thursday, and after some head-scratching bug fixing, I'm pleased to say it now works reasonably well under Linux, including custom print sizes and status reporting.

It's worth noting that other the other members of the '898 family (the non-MD versions, as well as the UP-X898 and UP-D898DC) might have their own quirks, but only time will tell.

There are still some missing features I haven't yet figured out -- For example, how to control the copy count and things like brightness/contrast from the host side.

Along the way, I landed bug fixes that affect other "Sony UPD Neo" printers (such as the UP-DR80MD and UP-CR20L).

To take advantage of this support, you'll need to grab Gutenprint out of git (or a snapshot/release dated after 2020-11-07).

Oh, the aptly-chosen test print is from Episode 91 of Sanesparza's "How To: Comics"

Update 2020-11-08: Fixed copy count

Autumn light

I missed the awesome light by about 45 seconds, but it still looks nice enough.

241105:362361

Incidentally, this is the first recreational photo I've taken since New Year's.

What I did over the past week XVII

Wow, four months of these weekly updates!

Home:

  • Replaced the fuel line and filter on the leaf blower. Now starts and runs a lot better, but can't sustain full throttle. It's a net improvement, but I will have to put that diagnosis off until next weekend.
  • Cleaned out the gutters and vainly attempted to keep up with the falling leaves. Also gathered up various fallen tree bits.
  • Added another shelf to the server rack, relocated all of my test equipment onto it, and tidied up more of the wiring.
  • Further reorganized my home office; moved some work stuff from my desk to the top of the rack, and shifted around storage a bit. Still need to improve the new cabling flow to be more cat-friendly.
  • Upgraded the beastly server and my workstation to Fedora 33.

Vehicular Stuff:

  • Oil change on the Prius. Made a huge mess, and had to degrease the driveway afterwards
  • Re-mounted the Subaru's rear view mirror the day after it fell off. Again.
  • Cleaned the Kubota's windshield for the first time.
  • Fixed the Kubota's left tail light. Manufacturing defect, apparently!
  • Affixed reflective strips to the read and sides of the Kubota and flatbed trailer.

Rockbox-specific:

  • Fixed multiple potential crash bugs exposed by -fdelete-null-pointer-checks.
  • Back ported a pile of bug fixes to the WMA Pro codec.
  • Globally disabled -fno-delete-null-pointer-checks.
  • Triaged a few more bug tickets and gerrit change sets.
  • Forward-ported and applied multiple old fixes out of Gerrit.
  • Consolidated more code common to HibyOS players.
  • Removed pcm_play_pause() and associated APIs.
  • Some initial Bluetooth platform integration work
  • Purchased some Allwinner V3/S3 dev boards

What I did over the past week XVI

Home:

  • Finally migrated the home server to a dual E6-2650v2 beast
  • Upgraded three systems to Fedora 33
  • Disassembled the ice maker in the fridge, thawed out the motor and gave the whole assembly a good cleaning.
  • Cleaned up more of the garage, giving away or tossing out stuff.
  • Two more loads of leaves swept up, a new pile is growing!
  • Made a top cover/shelf for my server rack out of an old sheet of 1/4" plywood.

Vehicular Stuff:

  • Changed the truck's oil

Rockbox-specific:

  • X20 muting bug fix
  • X3 track skip hang bug fix (likely affected other targets too)
  • Rocker audio hang after screen fade-in "fixed" (kernel bug)
  • Triaged and closed several bug tickets.
  • Added UISim target for Eros Q / K series
  • More FiiO M3K bug fixing
  • Convert FFT plugin to use PluginAction input
  • Fixed volume display in status bar not respecting decimal point
  • Upgraded gerrit instance
  • Heavily reworked hosted ALSA driver:
    • Get rid of non-async (tick task) mode due to complete brokenness
    • Allow device to be switched at runtime
    • Rework driver init vs device init
    • Much better error & under run handling
    • Smaller audio buffers to avoid glitching
    • Don't start audio with silence (no longer needed)
    • Add recording capability (untested)
  • Partial rework of status bar
    • Now tied to SYSFONT size rather than fixed 8px
    • X3ii/X20/Eros targets now display numeric values properly, including volume, battery, and clock!
  • Fixed a regression in the iriver_flash plugin caused by new toolchain

Printing-related:

  • Partial Matte modes for DNP DS620/DS820/QW410

What I did over the past week XV

Home:

  • Finally finished bagging up last season's leaves; a total of 98 bags.
  • Blew out the gutters and swept up another two bags of fresh leaves.
  • Unloaded some old furniture on Craigslist

Rockbox-specific:

  • Bumped arm and m68k targets to use the same GCC 4.9.4 toolchain used by all other targets. Cleaned up the mess that ensued. mostly in various bootloader builds. (This was more than six months in the making; now we need to make sure there are no regressions..)
  • Disabled audio de-emphasis filter on the xDuoo X3.
  • Miscellaneous bug fixes for the M3K; platform is still a complete mess.
  • Fixed occasional shutdown crash on the Rocker.
  • Fixed the LCD backlight speed on the X3ii and Eros Q/K series.
  • Added Rockbox Utility support for ErosQ/K and clones, and published OF image patches.
  • Hosted platforms saw some significant improvements:
    • Multi-drive operation finally works properly
    • Samsung YP-R0/R1 and Sony NWZ targets now properly hide the host filesystem and support hot-swappable SD cards in the same manner as all other targets.
  • Hiby-based hosted targets also saw improvements:
    • Consolidated and bug fixed the USB code
    • Consolidated the common portions of the configuration files
    • Generated updated bootloaders for X3ii/X20/Rocker
    • Can properly hot-swap the SD card
    • Truly seamless integration of hot-swappable external USB storage
  • Research Bluetooth stack options for native targets

What I did over the past week XIV

Home:

  • Another 10 bags of soggy leaves bagged and hauled off (Total: 90)
  • Cut up more fallen tree bits.
  • Flushed the water heater. Lots of fine silt!
  • Took off the doors to the home office closet, added more shelving, and continued organizing things.

Rockbox-specific:

Lots of Rockbox work this week!

  • Purged a little more Archos stuff
  • Exclude audio drivers from bootloader builds
  • Get rid of hacks meant for targets that lack certain keys
  • Land the 'VTX' codec, and enable it on all current floating-point-capable targets
  • X3ii/X20 get larger default system font
  • Landed the reworked M3K port from xVortex.
    • Decent amount of [re]integration rework
    • Don't yet have ability to generate a patched firmware image so it's not actually usable yet
    • Plenty of work still ahead
  • New port to the EROS Q / EROS K players and their clones
    • Including patching stock firmware images!
    • Still needs rbutil integration
  • Many improvements to the "Hiby Linux" platform & bootloader/launcher
    • Much better key mappings
    • On USB attachment, launch last firmware unless ADB is running
    • Allow remounting the SD card
    • Platform-level support for hot-plug SD cards and external USB storage (!)
    • Still banging on it before I regenerate patches for rbutil to use
  • Greatly improved auto-mute in the hosted ALSA PCM driver. X3ii is nearly sane!
  • Clean up "pivot root" path redirection on most hosted targets.
  • Add ROLO support for hosted targets.

What I did over the past week XIII

Fall has arrived, bringing a bout of very Seattle-esque weather. But I kept the blahs away by getting a lot done!

Home:

  • Hauled away another 10 bags of leaves from the pile (total: 80), and swept up another load. Rain prevented any additional work.
  • Cleaned the gutters and the driveway
  • Installed another shelf in a wardrobe
  • Completely emptied out a large tub of old computer stuff, organizing the worthwhile bits and throwing out the rest. All that remains is to tidy up one final cable snarl.
  • Purchased a "New Model M" keyboard from Unicomp to replace the 25-year-old M that was murdered by a glass of Orange juice just before the COVID lock down started. The Cherry keyboard I was using in the mean time was decent, but.. the M remains the best keyboard I've ever used. Meanwhile, the 27-year-old M that I've used for every job of my career remains locked away in the inaccessible $dayjob lab.

Vehicular Stuff:

  • Found a large nail in the tire of the RTV while doing yard work, but it didn't actually puncture the knobby off-road tires.

Rockbox-specific:

Lots of Rockbox work this week!

  • LUA plugins can now use buttons on iPod external remotes.
  • Fixed audioscrobbler file location on hosted targets
  • Continued slicing and reworking the M3K code dump:
    • xDuoo X3ii & X20 gained filter roll-off support
    • ALSA PCM driver can now sanely switch sample rates.
    • Support for 176/192KHz playback. (16-bit only still)
    • On hosted targets, turn of LCD when backlight is off.
    • Further cleanup work on the VTX decoder.
    • M3K Port almost ready for merging!
  • Hosted target improvements:
    • Improved LCD and general UI responsiveness.
    • Handle PCM under-run errors when starting a new playback stream.
    • Support muting analog output when PCM is not active (Rocker only for now, X3ii/X20 still have issues)
    • Backlight fading sped up.
  • xDuoo X3ii & X20 audio jacks can be hot-plugged at any time now.
  • xDuoo X3ii & X20 key map and lock switch emulations improved.
  • AGPTek Rocker WPS key map fixes.
  • Improvements for 176/192KHz audio:
    • Heavily reworked support macros.
    • Larger mixer/DMA buffers.
    • Enabled 176/196KHz all most targets that have hardware support and have sufficient free space for expanded buffers.
    • Many bugs will likely be exposed by this addition.
  • Triaged and closed several bug tickets.
  • Set up another build host on an old, slow box.
  • Used Rockbox funds to purchase a new M3K and used Hifiwalker H2 for R&D purposes.
  • Research into various Chinese music players for potential Rockbox porting targets.
  • A lot of thinking and discussions about ensuring Rockbox's long-term sustainability.

Printing-related:

  • Figured out the changes in the recent DNP QW410 firmware (additional paper sizes)
  • const-ified a static data structure

MP3 players, GPL violations, and Rockbox

Recently, as part of my work with Rockbox, I've been acquiring various MP3 players to aid with testing and further reverse engineering work.

Historically, these devices were traditionally implemented using some sort of real-time operating system, but these days all but the lowest-end units are built on top of a customized version of Linux, with the player/interface written as a user space application.

As I type this, in front of me I have five devices that are based on two different Ingenic MIPS-based SoCs. I know of at least five more built on the same underlying Linux software platform, and if you consider "newer" designs that use touchscreen interfaces, there are probably a couple dozen more models to be had -- Not counting those that are built on Android!

The SoC maker (Ingenic) provides the full source code for their reference design platforms, including patches to GCC and modified versions of U-Boot and the Linux kernel. Unfortunately, with one exception [1], none of the device manufacturers even acknowledge that they include GPL-licensed software, much less provide a way to obtain the source code they are supposed to provide.

Why does this matter? I'll leave the philosophical arguments to others, but in more practical terms, without the sources, we can't fix problems in the platform. This isn't a theoretical concern; several of the issues I'm trying to fix on a couple of recent ports are really kernel/driver-level bugs, forcing me to experiment with kludgy workarounds that, due to another kernel bug, forces us to choose between an ear-bursting pop on startup and losing the first two seconds of audio every time we resume from a pause. Bleh.

We would actually prefer to replace the Linux OS with Rockbox's bare-metal OS, allowing us to take advantage of the hardware's full capabilities -- But without sources, we're forced to rely on reverse-engineering, a very time-consuming endeavor which means that the hardware is inevitably obsolete and off the market before we are able to produce a working port.

[1] That one exception is FiiO. On the packaging for their M3K model, they explicitly state that the device contains GPL'd software, and where to go for more information. They also publish their Linux sources on GitHub.

What I did over the past week XII

I didn't get a whole lot done due to suffering an allergy flareup over the weekend and long $dayjob hours.

Home:

  • Another 12 bags of leaves bagged and hauled off. 70 bags down, and the end is in sight! Unfortunately, this is just in time for...
  • Started sweeping up new leaves. Damnit.
  • Relocated trailer to new parking spot, wheels off the ground
  • Finally vacuumed out my home office.
  • Hauled some stuff up to the tick farm, and brought a trunk of stuff back that needed to be sorted.
  • Started sorting four tubs of miscellaneous cables and parts that have accumulated over the past couple of decades or so.

Vehicular Stuff:

  • Replaced camper's overhead and galley light fixtures.
  • Replaced truck's dome and map lights with new LEDs.
  • Replaced car's dome lamp with a much improved LED.

Rockbox-specific:

  • Got the xDuoo X20 UI simulator working.
  • Started slicing up the xVortex FiiO M3K sources into equable bits.
  • Lots of discussions on IRC.

Printing-related:

  • Printed out some stuff, but otherwise, nothing.