Show HN: Hacking a $20 4G wireless hotspot into a texting device

Show HN: Hacking a $20 4G wireless hotspot into a texting device. The stock device runs Android, but adb is accessible out of the box – and from adb you can go straight to edl and reflash the thing.
What happened
Extracting the running device tree from the running android was a goldmine of information so be sure to do that. Here are a few guides or links I found helpful: OpenStick github openstick. de wvthoog. nl blog – I think I used this kernel for starters extowerk. com blog This project’s GitHub repo might also help you The real pain with openstick starts once you get to the drivers and device trees, but we will talk about that later.
Regarding the protocol, it’s exactly what I expected with my previous experience of working with MFi devices – just a regular USB keyboard with an additional Apple proprietary endpoint which the iPhone can authorize with before allowing the keyboard to go through. So for our device this means that it’s just a regular keyboard. I think the sharp display look great with the high contrast (and it plays well into my use case of a dumb device used only for messaging).
The final PCB ended up handling the USB host mode power, USB host/device mode switching, display power and display signal level conversion. Top, with a the blue lines showing the USB data lines going from the connector and pads to the SOC Bottom, red lines mark where I was planning to cut and the blue circle marks the via for USB data test pads Notice that my right cut (on the bottom picture) cuts off the battery connection line, so this will have to be patched up later.
The wider picture
The device booted up immediately and everything seemed to work. Since I could boot the device and I had the original android device trees, I extracted which pins were used for the display SPI. Same goes for the power supplies (although I tested those by disabling them in the device tree and rebooting) and grounds. Device’s USB Gadget enumerating Immediately following this success, I tried to get the other direction working. Before wiring the SPI lines to the display, I wanted to check if I had correctly reconfigured my device tree.
Encouraged by the major success of power supplies and USB, I carelessly connected the display into the PCB (while the device was on 🤦). Fortunately nothing came of this and the display was fine. (This actually happens every time I turn on the device. Display showing a checkerboard test pattern Rewiring.
What has been reported
Below is what the device tree ended up looking like. 1"; reg = ; interrupts = ; clocks = ; clock-names = "core", "iface"; dmas = ; dma-names = "tx", "rx"; pinctrl-names = "default", "sleep"; pinctrl-0 = ; pinctrl-1 = ; #address-cells = ; #size-cells = ; status = "okay"; sharp_drm@0 { compatible = "sharp-drm"; reg = ; spi-max-frequency = ; cs-gpios = ; }; }; Standard linux console login prompt showed up Issue now is that the driver just rounds pixel color under some value to black, above that to white (or inverted, depends on parameters). For text (or if you do the visuals yourself in your app) this works great – but for a general purpose solution where you want to play videos or show images – this looks like ass.
This was kinda sketchy since apple doesn’t give dimensions of how far the USB-C connector is inside the iPhone – but I got around this by measuring apple standard USB-C cables (which fit snug up to the device) and interpolating from there. The android device trees I copied from the device come predefined with the battery and charger configurations. It also works via the keyboard USB passthrough port, but unfortunately only when the device is booted up.
Main reason is the lack of day-to-day testing of the device, especially with the modem turned on – and the lack of a convenient power button. I’m planning to tackle this in the near future as I begin using the device for my messaging.
What happens next
All in all I’m very happy with the device, but a bit more work would do wonders for the visuals. I try to, but quite often end up with a bunch of stuff on my desk. From various aliexpress orders and projects I’m working on, all the way to gifts and stuff I didn’t have time to find a place for. At one point in time I had, lying on my desk: Various, hopefully openstick compatible, models – namely the: MF800 – one I ended up using UZ801 – OK size, but no battery or sufficienet visible GPIO USB drive form factor one I ditched because of other issues The Clicks Keyboard for iPhone 16 Pro Max (gift from my cousin – too bad I don’t have an appropriate iPhone 🥲) The Adafruit SHARP Memory Display board And of course, my caveman brain combined the 3.
Okay, okay, not to lie I was probably a bit conditioned by knowing about: Beepy by sqfmi Playdate The modem. Due to the mysterious laws of supply and demand, and the magic of supply chains – somehow you can get a 4G modem with WiFi, bluetooth, a display, fully battery powered and completely unlocked – for less than $20 shipped. This, of course, is the cornerstone of our project.


Yep, that true
How so