What I did over the past week XXXX


  • Properly cleaned the garage workbench of debris going back four months
  • Emptied the last of the pre-reflooring box-o-stuff in my home office
  • Installed an 8" exhaust vent (and 740CFM fan) for the garage. It's currently switched with the attic lighting but I will change that once I figure out a sane way to drop a switch into the garage


  • On the RTV900, replaced the broken parking brake switch, the rusted-away throttle return springs, and the beginning-to-fail fuel stop solenoid
  • Pressure-washed the mildew off of the truck's bed mat. Nasty.


  • Bug triage and patch review
  • Volume limit setting wasn't respecting decimal places properly
  • Fix a stack corruption issue in the list scroll bar code
  • Enabled easy use of AddressSanitizer in sim builds
  • Rework how the Eros Q (and clones) handle software-based volume scaling
  • Make sure Eros Q keeps screen awake when mucking with the scroll wheel
  • Workaround for the very-hot 6Vpp EROS Q/K line out
  • Workaround for the mildly-hot 4.3Vpp xDuoo X3 line out
  • Fixed iBasso DX50/DX90 filesystem regression and properly handle hot-swap of the SD card


  • Fixes for the HiTi P510 series, getting closer to being able to print

Photo Organizer:

  • Make sure EXIF tags are stripped off of generated thumbnails

What I did over the past week XXXIX

After several years of procrastination, I finally ran this blog through a spell-checker, resulting in a truly embarrassing number of corrections.


  • Fixed the filament sensor on the 3D printer; it survived a 2-hour print of a more complex shape. Now only the bed proximity sensor is shot.
  • Pressure-washed nearly all of the driveway. Ran out of hose, so the last ~15ft and oil stains in the street will have to wait a bit longer.


  • Forgot to tighten the oil drain plug on the RTV900. Oops!
  • Discovered that the crankcase vent on the secondhand valve cover I put on the RTV900 isn't working properly, and the screws holding down the diaphragm cover on both the old and "new" one refuse to budge. It does seem to be getting better but I should probably plan on a new one.


  • More patch reviews
  • Helped fix some problems with cache invalidation on PortalPlayer-based devices
  • Fixed a stack overflow on the Toshiba Gigabeat-S that prevented boot up
  • Minor build system quality-of-life improvements
  • Added ability to disable/lock the touch pad on the Linux M3K port
  • Stabilization efforts with the very creaky Wiki: Purged all of the TWiki remnants and got rid of the TWikiCompatibility plugin, fixed up a lot of URLs to Rockbox addresses, and other cleanups
  • Upgraded the gerrit and forum instances to close security holes
  • Black-holed a lot of IP ranges that were collectively pounding the server; it's already made a noticeable improvement in bandwidth usage


  • Minor fixes to cutter control on DS620, DS820, and QW410
  • Progress towards continuous panorama support on the DS820 and DS620

What I did over the past week XXXVIII


  • Got my "new" inherited 3D printer working. Two sensors are flaky; after bypassing them and re-calibrating everything, it successfully created a test object. As I don't have any projects in mind beyond establishing that this thing was basically operational, this machine will get relegated to the back burner for the time being.
  • Fired up the recently-rebuilt pressure washer and used it to clean off the very mildewed path to the front door and the large pad in front of the garage. The spinny scrubber thingey did wonders, though it was not quite enough to lift the hydraulic fluid stains off the concrete. That's probably going to take some chemicals...


  • The RTV900 lives! All of the parts (and tools) I needed arrived early, so I reassembled everything over the weekend. It fired up without any fuss, so I put it all back together.


  • More patch review, including a native FiiO M3K port!
  • Added the bits needed for an M3K UISim build
  • Added the M3K builds to the build farm and theme site
  • Tweak build system to not regenerate autoconf.h unless necessary
  • A few cleanups in makefiles
  • Generic read alignment bounce buffer in the FAT code, and enabled its use by all MIPS and rk27xx ports


  • I was loaned a Fujifilm DX100 for some low-level evaluation. I know it's essentially a re-branded Epson SureColor D700, but likely with a unique inkset and possibly command protocol tweaks. I'm not sure what direction this will take, but figuring that out is kinda the point here. In the mean time, I've managed to shoehorn it into my office and will start poking at it as time permits.

The RTV900 lives again!

Today, the RTV900 left my garage under its own power, no worse for the wear after ingesting a nitrite glove.

I got lucky; there was no damage to the head, valve train, or piston; the bulk of the glove was stuck to the underside of the valves of the second cylinder, with a little bit still wrapped around the valve stems. Here's what came out.


The partially disassembled D902 head. One set of valve springs is off to the side, but I left the rest in the head. I also didn't remove the injectors or glow plugs as there seemed no need, but everything else is off:


And the top end of the block still in the RTV:


As all the parts (and tools) I needed arrived by Saturday, I decided to go ahead and start putting everything back together. This included:

  • Clean up any remaining glove material on the valves/seats
  • Valve springs & retainers on cylinder 2
  • Mating surface cleanup on the head
  • Mating surface cleanup on the block (including some nasty fused crud)
  • Intake and exhaust manifolds, including new gaskets and anti-seize
  • Replaced the bolt that snapped off when removing the exhaust manifold
  • New head gasket, then head, and tightened all bolts to spec
  • Push rods and valve rocker arm assembly, torqued to spec
  • Replacement valve cover (original one broke due to a seized bolt), with a new gasket and plenty of anti-seize
  • Reattached the glow plug bus bar, cleaning up all mating surface
  • Blew out fuel lines and reconnected them, but left one end loose to make bleeding easier
  • Reattached the muffler, with plenty of anti-seize on the bolts
  • Fuel stop solenoid (very important on a diesel!)
  • Alternator bracket and fan belt
  • Several coolant and breather hoses
  • Air filter housing (let's not make this mistake twice!)
  • Filled it up with clean oil
  • Connected the battery
  • Crossed fingers and toes

I cranked it until fuel started oozing out of the injector lines, then tightened them down. The motor fired up instantly and sounded like its usual loud clattery self. At this point I shut it down, filled up the radiator (with fresh 50/50 antifreeze), and let it run to warm up and circulate the oil.

While it was warming up, I bled the air out of the hydraulic steering, finally bringing my original repair to its conclusion.

Once the motor warmed up up enough for the cooling fan to kick in (demonstrating a lack of leaks), I reassembled the rest of the cab while letting the motor run to properly break in the head gasket:

  • Center cover
  • Side covers
  • Seat belt latches
  • Seat belts
  • Seat base
  • Seat back (using a zip tie to replace the fastener that broke off
  • Floor mat (which shrank, so it's only secured on one side now. wtf..)
  • Access panel behind the air filter housing
  • Steering wheel (flipped 180 so the third spoke points up, finally resolving one of those little annoyances)

Then I shut it down, cleaned up my workspace, and put away any remaining tools. The next day, after the motor was good and cold, I re-torqued the head bolts:

  • Remove glow plug bus bar
  • Pull the valve cover (and breather hose)
  • Remove rocker assembly
  • Torque all 14 head bolts to spec
  • Reattach rocker assembly, torque to spec
  • Reattach valve cover (& breather hose), torque to spec
  • Reattach glow plug bus bar

After making sure the valve cover was not leaking, I moved everything out of the way and the RTV900 emerged from my garage under its own power. A quick lap around my yard in 4WD mode showed everything acting as it should, with no lasting damage except to my pride. And wallet:

  • All five hydraulic hoses for the steering system
  • Second-hand valve cover
  • Top-end gasket set
  • One valve cover bolt
  • One exhaust manifold bolt

This pile of parts came to about $420. I also picked up a valve spring compressor tool for about $30, and some additional portable utility lighting that I've wanted for a while anyway.

But I also used a bunch of other stuff I had lying around:

  • About 1 gallon of hydraulic fluid
  • 3 quarts of 10W-30 oil
  • 1/2 gallon of antifreeze
  • PB blaster, WD-40, anti-seize, thread locker, and more zip ties than I care to mention
  • Lots of nitrite gloves, all but one of which stayed outside the motor!

Additionally, I discovered a broken throttle return spring, and the parking brake warning switch went kaput when I was reassembling everything. Those are now on order (about another $30 including shipping) but won't get here for about two weeks. I also need another two quarts of hydraulic fluid to top off the power steering reservoir.

But these are minor problems for another day. The partially-rusted floor is more concerning, but that too will have to wait.

Meanwhile. It did occur to me that the various stages of this project would have been good to film, or at least take proper photos at significant stages. But manipulating a camera when smeared with any manner of gunk isn't terribly appealing, and I don't think there's enough of an interested audience to make the effort of shooting (and editing!) video worthwhile.

What I did over the past week XXXVII


  • Internet access was down from Thursday afternoon until Monday afternoon. After five calls, they finally dispatched someone, who in turn spent over three hours on the phone with their internal support team before finally reaching someone who had the authority to actually fix the already-identified problem instead of just reading from their scripts. Feh.
  • Continued sorting out the jars-o-stuff in the garage; now I'm down to a single jar of mostly larger items.
  • Inherited a 3D printer that $dayjob wasn't using any more; did some further office reorganization to make room to set it up. After un-b0rking it from its last failed print (over two years ago!) I got it re-calibrated and tried a test print. Which failed due to supposed filament feed problems. The most likely explanation is a failed sensor that can be bypassed, but further diagnosis and testing will have to wait until I have the time for more tinkering.


  • Put the front-end (and windshield, dashboard, roll cage, and roof) back onto the RTV900 after replacing all of the steering system's hydraulic lines. Relocated the aux lights to top-mounts. Unfortunately, I didn't put the middle section (other than the floor) back together because...
  • ...because after connecting the dashboard, I boneheadedly cranked the motor prior to attaching the air filter assembly, sucking a thin nitrile glove into its unprotected intake. Suffice it to say that this was... bad.
  • After pulling the head off of the RTV's motor (destroying the valve cover in the process, thank-you-two-seized-bolts), I freed the charred glove remnants from cylinder 2's valves, discovering a notable lack of damage to the valves or head. The piston appears fine too, and the motor turns over smoothly, but there's always a possibility of damage to a rod or the crank/bearings. Still, diesel motors are notoriously tough, so it's worth picking up the parts I need to get everything back together. (Secondhand valve cover, one valve cover bolt, one exhaust manifold bolt, and a set of top-end gaskets. Plus the throttle return spring that rusted apart at some point..) I won't likely have everything I need until next week, but I'm beginning to feel cautiously optimistic. Fingers crossed!


  • Reviewed a few more patches before my internet connection crapped out.
  • Re-enabled xDuoo X3's ADC shutdown on ROLO.


  • Report the main firmware version in the status dump on the Mitsubishi CP-D90 and CP-M1 families.
  • The Kodak 8810 now supports panorama print sizes (8x14 all the way to 8x36). Untested.

What I did over the past week XXXVI


  • Mounted a 44-drawer storage unit above my workbench in the garage, and emptied and sorted over half of my "miscellaneous jars" (and a bunch of other packages of doodads) into properly labeled drawers. Most of what remains is a large pile of loose screws. I have mixed feelings about this; on one hand it's clearly a huge and necessary organizational improvement. On the other hand... this is one of those "I'm officially old" milestones..


  • Got the WRX's air conditioning system back together, evacuated and recharged it, and now it's blowing properly cold air for the first time in many months. This was just as much of a PITA as it was when I did this about two years ago. While time will tell if there remains a slow leak, it's clear that if I'd used the OEM o-rings the last time this repeat ordeal wouldn't have been necessary. Bleh.
  • While hunting for a dropped o-ring, I discovered one of the WRX's front sub-frame mounting bolts had backed out about 1/4 of an inch.
    Yowza. Checked all the others.
  • Wrangled the rudderless RTV900 into the garage so I could replace the blown high pressure power steering hose. I'll pick up the final hose in the morning, and the plan is to get it back together over the next couple of evenings.


  • Reviewed more patches; I hope this increased pace of contributions continues!
  • Got the xDuoo X3II working with inline remote controls.
  • Consolidated and sped up some battery query code on the Hiby-based players.
  • Made the powersave-disabling workarounds for the FC1307A ATA->SD chipsets (as used by the popular iFlash adapters) more nuanced so that we can properly power down the entire ATA subsystem when idle.
  • Quality-of-life improvements to daily build download page.
  • Key map improvements to the X3ii, X20, and EROS Q/K.


  • The Kodak 8810 now supports panorama print sizes (8x14 all the way to 8x36). Untested.
  • Added backend support for the new Fujifilm ASK-500. Untested.

Beauty beneath the skin


This is what my Kubota RTV900 looks like under its skin.

Last weekend, when doing yard work, I lost steering control and nearly hit a tree. To make a long story short, the high pressure hose feeding the power steering sprung a major leak. In keeping with the RTV's tractor underpinnings, its steering system is purely hydraulic, so no pressure means no steering.

In the grand scheme of things this is no big deal; the replacement hose was about $40, but it turns out that in order to replace that hose... a lot has to come off:

The roof, auxiliary lights, windshield, front half of the roll cage, hood, front cowling, steering wheel, dashboard (including all of the electrical connections), floor mat, part of the floor, backrest, seat, seat belts, fuel cap, both side covers, center cover, air intake, air filter housing, and another cowling covering the hydraulic pump. Phew.

Given the equal vintage of the other hoses in the steering system, I decided it was prudent to go and replace everything since I had it all apart anyway -- which meant also removing the engine coolant reservoir, power steering reservoir, and finally, the "steering controller" itself, just so I would have enough clearance to access its rearmost fittings.

I took this photo after replacing four of the five hoses, including the one that blew. Once the fifth hose arrives (on Monday) I'll hook it up, refill the hydraulic fluid, hook up enough of the wiring to get it started, and if there are no leaks, put everything back together.

I had a major setback though; after I'd removed the busted hose, I heard a metallic clunk like something had fallen out. I didn't see anything obvious, but looking at the service manual it looked like there was supposed to be a check ball. Two hours later I found the ball bearing on top of the strut tower, but that wouldn't stay in. So after finally hunting down the OE service manual for the controller, I realized the "ball retainer" doodad was also missing, and most likely hidden in the substantial pile of rust, paint flakes, and other detritus around the RTV. After sweeping it all up and carefully sorting through the piles, hours later I decided to take a second look around the strut tower.. and found the missing part peeking out from the front frame rail, visible from only one side. Had I not found it... suffice it to say the PITA factor (and/or outright dollar cost) would have gone way up. I got lucky!

But yeah, there was a lot of rust. The center panel is solid, though one of its bolts had seized and needed to be cut off.. but the panels to either side, especially the driver's, have some major rust holes. There's nothing to be done about this in the short term, but perhaps fabricating some new panels will be the excuse I need to finally buy a welder? Thankfully the frame is sound, so this workhorse still has a long life ahead of it.

EDIT: Rewrote a bit of this to flow a bit better. And to spell 'reservoir' properly.

EDIT2: I fucked up, big time. When reassembling the dash, I forgot to reattach the air filter before cranking the motor and it ingested a nitrile glove. I'm pretty sure the head is toast, but I'm not holding out hope that the bottom end escaped unscathed. I'll know more when I get the head off.

What I did over the past week XXXV


  • Gave shaftnet its quarterly maintenance.
  • Removed a broken branch dangling over the driveway and chainsaw'd a different ~15' branch that came down earlier in the week.
  • Rerouted the extension cord supplying power to the camper across the garage ceiling instead of across the floor.
  • Greased the wheels on the garage door. Marginally quieter now.
  • Continued organizational improvements in the garage, making more efficient use of of the shelving.
  • Cleaned out the gutters and burned another barrelful of yard detritus while sweeping up a couple more loads of leaves.. until the RTV broke.


  • One of the truck's headlight bulbs literally exploded. Replaced.
  • Replaced the WRX's radiator cap with a proper OEM unit.
  • Identified the source of the WRX's A/C leak: bad O-rings at the evaporator coil/expansion valve junction. Unfortunately the new valve had the same type of not-quite-right O-rings, so the car remains inoperable while a complete OEM set remains on order with dealer.
  • Since I had the dashboard opened up anyway, I used the opportunity to re-route the dashcam power, radio auxiliary input, and Bluetooth wiring neatly out of the way, in a properly secured manner.
  • While sweeping up leaves, the RTV blew the high pressure hydraulic supply line to the steering system. As this model has no mechanical linkage to the steering rack, this resulted in a total loss of steering control. Given the utter PITA factor involved in replacing the blown hose (have to remove the windshield, roof, roll bars, front cowling, seat belts, seats, floor, air filter housing, both side cowlings, auxiliary lighting, steering wheel, and dashboard...) and the equal vintage of the rest of the steering hoses, it seemed prudent to replace all five at the same time. Parts on order.


  • Bug fixes to the MIPS caching code (a collaborative effort)
  • Fixed long-standing issue with ROLO when voice prompts are enabled.
  • Some minor code janitorial work.
  • Fixed the broken en-US "translation" that resulted in an invalid voicefile being generated. Tweaked the build scripts to properly handle (and properly report) this class of error.
  • Fixed an unrelated language dependency issue that could local changes to result in incorrect non-English language files.
  • Fixed a settings menu bug with the USB mode selection.
  • Added the ability to set the relative volume of the voice prompts.
  • Reviewed and merged several more patches.


  • Minor documentation updates.

What I did over the past week XXXIV


  • Finally filed my taxes after a third pass.
  • Reworked a few things about the home network, fixing multiple issues that prevented zeroconf/avahi from working reliably.
  • Major tune-up on the leaf blower; it's finally running well.
  • Got the other three small motor-powered tools running and warmed up.
  • Replaced the recessed light over the master shower with a fixture containing a fan. Very cramped quarters, foot-thick blown-in insulation, and beams/studs in unexpected places made this far more of a PITA than it needed to be. Still sore three days later.


  • Reviewed and merged a bunch of patches.
  • Fixed a crash in the perceptual bass enhancement code.
  • Fixed longstanding dependency bug in the build system.
  • Fixed a SWCODEC-removal-related bug in the standalone database tool that prevented non-mp3 metadata parsers from being included.


  • selphy_print regression suite made slightly stricter.
  • Fixed a couple of minor memory leaks in the Kodak 1400 and 605 backends.
  • Enable support for HiTi P510, P518, and P728 series (all untested!)

What I did over the past week XXXIII


  • Further office storage consolidation, now with labels!
  • Wrapped the fiber-optic cables for a work system with a split-loom harness to protect them from a certain kitty who thinks they are made of noms.
  • Second pass on my taxes; It's now up to 15 forms and schedules.
  • Picked up an old steel barrel, punched holes in it and burned up a big load of yard trash.
  • Cleaned out the gutters and hauled off 10 more bags of leaves (total: 80)
  • Picked up a pressure washer with a catastrophically-blown pump. Removing what was left of the old pump was an unexpected ordeal; its internal seals had failed, causing the end of the shaft to corrode and seize. I ended up cutting away the casing with an angle grinder to expose the pump's swash plate and shaft, after which I judiciously applied a blow torch, PB Blaster, and a slide hammer. It's now ready for a new pump; I'll be replacing the failed axial cam unit with a more robust triplex unit.


  • Cleaned up the truck's under-hood wiring using some spare split looms.
  • Rewound the cable on the RTV's winch, liberally dousing it with WD-40 to help prevent further rusting, and bent the fairlead mount back into the correct position. Finally picked up a proper winch cover too.


  • Minor fix in the MPEG-4 metadata decoder