Original Reddit post

Some time ago I bought this Canon Printer model G3010 and found out when it was delivered home that it didn’t have proper drivers for macOS. After doing some archeology on the internet, I found a .pkg from another model that made print work, but not scanning. The solution was to just scan using the Canon iPhone app and Airdop it to my computer whenever I needed. Eventually I left my job, the company left their laptop to me and I had to erase everything and start from scratch. I decided to just keep using the iPhone app for everything. Fast-forward to a few days ago, I realized that I could just build a driver for it using Claude Code. Initially it thought it had to reverse-engineer SANE pixma backend, the C driver in the sane-backends project that handles Canon PIXMA scanners on Linux. But it turns out the Wi-Fi protocol is completely different and proprietary. So Claude guided me through setting up packet capture on my iPhone and it reverse-engineered the scanner driver while I was telling it what was working and what didn’t. It came up with a Rust bridge daemon that translates between macOS’s eSCL/AirScan and Canon’s CHMP protocol. I didn’t touch a single line of Rust code. Regarding printing , The G3010 isn’t in Apple’s AirPrint-certified list, and Canon never shipped a macOS PPD/driver for it. The CLI sidesteps this entirely - it bypasses macOS’s printer setup and talks IPP directly. And the installer’s postinstall script registers it with CUPS via lpadmin -m everywhere, which forces CUPS to treat it as a driverless printer without macOS’s driver-matching step. What is most amazing about this history is that it would be completely not worth it to work on this before AI. Now, I did it as a between-builds project. github.com/pdrgds/pixma-rs submitted by /u/_pdrgds

Originally posted by u/_pdrgds on r/ClaudeCode