3D-printed WALL-E replica - Wi-Fi controlled using ESP32, with OLED display and audio output.
main controller: ESP32 DEVKIT (with local web server) motors: 2x 37GB520 (wheels/tracks - driven using TB6612FNG) and 7x MG90S servos other accessories: 1x OLED display, 1x microSD interface, 1x audio-amplifier
Cheap CMSIS-DAP/DAPLink SWD module based on NS32F103CBT6 (an STM32-clone?). It has both a debugger and a serial/UART port on a single USB device just like the J-Link OB v2 debugger (based on STM32F072) - better than those ST-Link debugger clones.
MCU interface:
SWD (with pull-up resistors to 3V3)
PB10 - CLK
PB11 - DAT
CDC-UART (UART1)
PA9 - TXD
PA10 - RXD
LEDs (active high)
PA2 - running status
PA3 - connected status
USB:
PA11
PA12 (with fixed pull-up resistor)
Firmwares: (*should work also on chips with smaller ROM STM32F103C8 (like the BluePill C8)
Tested only on Ubuntu host. sample kernel logs if using original FW:
usb 1-1: new full-speed USB device number 44 using xhci_hcd usb 1-1: New USB device found, idVendor=c251, idProduct=f001, bcdDevice= 1.00 usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 1-1: Product: CMSIS_DAP usb 1-1: Manufacturer: CMSIS-DAP by ARM usb 1-1: SerialNumber: 202108120001 cdc_acm 1-1:1.0: ttyACM0: USB ACM device hid-generic 0003:C251:F001.0015: hiddev0,hidraw2: USB HID v1.00 Device [CMSIS-DAP by ARM CMSIS_DAP] on usb-0000:00:14.0-1/input2
Sample kernel logs if using the modified FW:
usb 1-1: new full-speed USB device number 52 using xhci_hcd usb 1-1: device descriptor read/64, error -71 usb 1-1: new full-speed USB device number 53 using xhci_hcd usb 1-1: New USB device found, idVendor=0d28, idProduct=0204, bcdDevice= 1.00 usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 1-1: Product: DAPLink CMSIS-DAP usb 1-1: Manufacturer: ARM usb 1-1: SerialNumber: 20220218979699080605210b3030153632303030 cdc_acm 1-1:1.0: ttyACM0: USB ACM device usbcore: registered new interface driver cdc_acm usbhid 1-1:1.2: couldn't find an input interrupt endpoint usbcore: registered new interface driver usbhid usbhid: USB HID core driver
Sample openocd configuration:
source [find interface/cmsis-dap.cfg] transport select swd source [find target/stm32f4x.cfg] adapter speed 4000 init targets reset halt
If using the original FW, need to add these on the configuration:
Teardown of ABS-CBN TVplus Go USB dongle. This dongle looks like ADTH DGI 1011 (*although the PCB indicates "DGI1012_RevD" instead).
dmesg log when plugged:
[ 2555.447630] usb 1-1: new high-speed USB device number 13 using xhci_hcd
[ 2555.601320] usb 1-1: New USB device found, idVendor=048d, idProduct=9308, bcdDevice= 1.00
[ 2555.601325] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2555.601329] usb 1-1: Product: DGI1011
[ 2555.601331] usb 1-1: Manufacturer: Atlanta DTH, Inc.
[ 2555.601333] usb 1-1: SerialNumber: 000000
The USB chip has a marking of "Tolka101" - most probably developed by Tolka Taiwan Inc.- same company who develops the tvplus go app (?). Beside this chip looks like an external EEPROM chip. (*there are no markings on the RF frontend chip).
For simple modification, I replaced the micro-USB connector with an "older" (but more reliable) type-A USB connector+cable - more suitable since I'm using the dongle on laptop or PC more often than my android phone.
Watch free ISDB-T digital TV on laptop (or any x86_64 computer) using the ABS-CBN TVplus Go USB dongle.
As of this writing, the TVplus Go dongle only works on Android operating system. So the way to make it work on an x86 platform is either install the Android-x86 or simply use an Android emulator. This demo will use the official emulator running on Ubuntu 18.04 64-bit host OS. Other OS types, like Windows 10, might also work but will still initially require *nix-based tools for modifying the virtual device's ramdisk cpio archive and system ext4 image file.
The TVplus Go Android app, as of version 1.0.28, only works on ARM CPUs (armeabi-v7a and arm64-v8a only). Running the ARM emulator is not advisable because it's too slow and unusable. So the only option now is to install libhoudini (ARM translator) on the x86 emulator.
3. Download the emulator, platform-tools, and the system-image. Android Nougat (API-25) is selected because easier to modify compared to with the recent versions.
4. Go to $ANDROID_SDK_ROOT/system-images/android-25/google_apis/x86_64 and increase the size of the system.img (create a backup first!). Allocate at least 128MB for the additional files.
7. Enable access to the TVPlus Go USB dongle (vendor id 0x048d, product id 0x9308)
$ echo '<permissions><feature name="android.hardware.usb.host"/></permissions>' | sudo tee systemfs/etc/permissions/android.hardware.usb.host.xml
$ echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="048d", ATTRS{idProduct}=="9308", GROUP="kvm"' | sudo tee /etc/udev/rules.d/89-usb-android.rules
$ sudo udevadm control --reload-rules
8. Hide from "root-detection" and "running-on-emulator-detection"
i. rename the su executable
$ sudo mv systemfs/xbin/su systemfs/xbin/_s_u
ii. edit again build.prop, check these answers on which properties to be modified. Replace, at least, the "generic" string from ro.product.device and ro.build.fingerprint. (not the actual workaround)
iii. (optional) Install Google Play, if you want to watch the encrypted channels - need to pay P20 for the registration (in-app purchase). Copy "Phonesky.apk" from opengapps.org to systemfs/priv-app/Phonesky