Is this the perfect standalone tablet for HA?

Compared to your fire tablet, this unit has:

  • 2x CPU power (8 vs 4 a53 cores)
  • same memory
  • 1/2 storage (8 vs 16gb)

It seems to be a good performer all around. Video, 3d, web content all work great!

Should also point out the quality of the LCD. Much nicer than you see in cheaper devices.

1 Like

Thanks for pointing out the OS topic - if it helps, I would set up a Raspi just for flashing the Lenovo - which OS is recommended? DietPi? Raspbian? Really, this device is great, I am just an Android newbie.

This should be doable fine from Windows. If you are new to Android, Linux will seem as strange initially.

Pretty much any distro will work.

Agreed.

I’m currently at the password stage as well. Currently in the process of inputting the wrong password haha.

As for the initial installation, I’m on Linux (Ubuntu) and I was having some confusing path resolution going on and ended up getting lazy/rage-quit-y - so I just ended putting ALL the files into a single flat directory and running edl qfil rawprogram.xml patch0.xml ./ --loader=prog_emmc_firehose_8953_ddr.mbn.

Handy cheatsheet for navigating without the nav bar
https://gist.github.com/Pulimet/5013acf2cd5b28e55036c82c91bd56d8

navigation commands

== Key event

adb shell input keyevent 3 // Home btn

adb shell input keyevent 4 // Back btn

adb shell input keyevent 5 // Call

adb shell input keyevent 6 // End call

adb shell input keyevent 26 // Turn Android device ON and OFF. It will toggle device to on/off status.

adb shell input keyevent 27 // Camera

adb shell input keyevent 64 // Open browser

adb shell input keyevent 66 // Enter

adb shell input keyevent 67 // Delete (backspace)

adb shell input keyevent 207 // Contacts

adb shell input keyevent 220 / 221 // Brightness down/up

adb shell input keyevent 277 / 278 /279 // Cut/Copy/Paste

2 Likes

Thanks, added link to your post in the instructions above.

1 Like

Sorry, I’m new at this…

If I get these errors:

firehose_client - [qfil] raw programming...
firehose_client - [qfil] programming /Users/monty/kingston-ha-rom/bin/rawprogram.xml
firehose_client
firehose_client - [LIB]: flash/NON-HLOS.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/sbl1.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/sbl1.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/rpm.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/rpm.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/tz.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/tz.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/devcfg.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/devcfg.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/adspso.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/sec.dat doesn't exist!
firehose_client
firehose_client - [LIB]: flash/splash.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/emmc_appsboot.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/emmc_appsboot.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/boot.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/recovery.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/system.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/vendor.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/cache.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/persist.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/oem.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/mdtp.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/lksecapp.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/lksecapp.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/cmnlib_30.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/cmnlib_30.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/cmnlib64_30.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/cmnlib64_30.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/keymaster64.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/keymaster64.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/resource.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/userdata.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/gpt_main0.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/gpt_backup0.bin doesn't exist!
firehose_client - [qfil] raw programming ok.
firehose_client - [qfil] patching...
firehose_client - [qfil] patching with /Users/monty/kingston-ha-rom/bin/patch0.xml
firehose_client - [qfil] patching DISK sector(14), size=8

Can you tell me what step I missed?

Thanks for sharing this! --monty

1 Like

Check your paths. Should be absolute, or relative to the directory from which you run edl.

…or extract the rom in the same directory as your edl binary.

edit: Updated instructions.

1 Like

Thanks again for this, @mattmon! I got it up and running! It runs pretty smooth as well. I might snag a couple more of these for my mom’s setup.

All that is left for me is typical android stuff (that I need to read up on)

  1. I need to figure out how to auto load the HA client app on boot
  2. looking into removing the HA login (or using a long lived token)
1 Like

Wallpanel has an option for start on boot

Here’s a post by @dshokouhi with another option

Have also heard of people doing with an app called tasker. Though it’s not FOSS.

1 Like

Awesome post! Thank you for sharing - just ordered a couple.

(Maybe this is super obvious but)….If this is a conferencing device it has a good mic and speakers, could it be used to voice control HA (like rhaspy?) some kind of wake word detection app, and use a local whisper server?

Has anyone explored this yet?

2 Likes

Have been waiting for someone to ask this, haha

This platform might have built in support for qualcomms “hey snapdragon” wakeword detection (with customizeable hot word).

The software was present on the original rom, though I removed it because it didn’t work right.

I’ll make the SVA app available if anyone wants to try getting it working.

Of course, not the only way to do this, but would be cool to use hardware to do it!

2 Likes

This looks like an awesome project so I snagged one and started my journey. Flashed fine but I can’t seem to get adb after the flash. Any suggestions?

Yes I ordered 2, but the economics of ordering from Amazon is different here, but that is still cheap at NZ $100 each.

Try re-inserting the usbc cable or using another one.

Inspect edl’s output and make sure that each included .bin file was successfully flashed.

EDIT: Got it! My adb was too new apparently as I switched to my other computer that has older adb software on it and it picked it right up. Sorry for the confusion.

Tried a different cable but to no avail. I’m an android user who performs flashes on my pixel each month so pretty confident in my cables. I’ve attached the edl output below and all looks ok to me but not familiar with edl tbh:

[15:07](ttys000):kingston-ha-rom[0]$ edl qfil bin/rawprogram.xml bin/patch0.xml flash/ --loader=bin/prog_emmc_firehose_8953_ddr.mbn
Capstone library is missing (optional).
Keystone library is missing (optional).
Qualcomm Sahara / Firehose Client V3.62 (c) B.Kerler 2018-2023.
main - Using loader bin/prog_emmc_firehose_8953_ddr.mbn ...
main - Waiting for the device
......
main - Hint:   Press and hold vol up+dwn, connect usb. For some, only use vol up.
main - Xiaomi: Press and hold vol dwn + pwr, in fastboot mode connect usb.
        Run "./fastpwn oem edl".
main - Other:  Run "adb reboot edl".

........main - Device detected :)
sahara - Protocol version: 2, Version supported: 1
main - Mode detected: sahara
sahara - 
Version 0x2
------------------------
HWID:              0x000660e160008000 (MSM_ID:0x000660e1,OEM_ID:0x6000,MODEL_ID:0x8000)
CPU detected:      "APQ8053"
PK_HASH:           0xb9eca30dfea4693497b6ac7eec81d006967281e259eb9ac239f9ce6dabb70c14
Serial:            0x5f9184ea

sahara - Protocol version: 2, Version supported: 1
sahara - Uploading loader bin/prog_emmc_firehose_8953_ddr.mbn ...
sahara - 32-Bit mode detected.
sahara - Firehose mode detected, uploading...
sahara - Loader successfully uploaded.
main - Trying to connect to firehose loader ...
firehose_client
firehose_client - [LIB]: No --memory option set, we assume "eMMC" as default ..., if it fails, try using "--memory" with "UFS","NAND" or "spinor" instead !
firehose - TargetName=MSM8953
firehose - MemoryName=eMMC
firehose - Version=1
firehose - Trying to read first storage sector...
firehose - Running configure...
firehose - Storage report:
firehose - total_blocks:15269888
firehose - block_size:512
firehose - page_size:512
firehose - num_physical:3
firehose - mfr_id:21
firehose - serial_num:4093595192
firehose - fw_version:6
firehose - mem_type:eMMC
firehose - prod_name:8GTF4R
firehose_client - Supported functions:
-----------------
firehose_client - [qfil] raw programming...
firehose_client - [qfil] programming bin/rawprogram.xml
firehose_client
firehose_client - [LIB]: flash/NON-HLOS.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/sbl1.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/sbl1.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/rpm.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/rpm.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/tz.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/tz.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/devcfg.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/devcfg.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/adspso.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/sec.dat doesn't exist!
firehose_client - [qfil] programming flash/splash.bin to partition(0)@sector(655360)...
firehose - 
Writing to physical partition 0, sector 655360, sectors 327
Progress: |██████████| 100.0% Write (Sector 0x146 of 0x146, ) 2.57 MB/s                                                                                                                                                                                   
firehose_client
firehose_client - [LIB]: flash/emmc_appsboot.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/emmc_appsboot.bin doesn't exist!
firehose_client - [qfil] programming flash/boot.bin to partition(0)@sector(790528)...
firehose - 
Writing to physical partition 0, sector 790528, sectors 65536
Progress: |██████████| 100.0% Write (Sector 0x10000 of 0x10000, ) 3.46 MB/s                                                                                                                                                                               
firehose_client
firehose_client - [LIB]: flash/recovery.bin doesn't exist!
firehose_client - [qfil] programming flash/system.bin to partition(0)@sector(923648)...
firehose - 
Writing to physical partition 0, sector 923648, sectors 3145728
Progress: |██████████| 100.0% Write (Sector 0x300000 of 0x300000, ) 4.48 MB/s                                                                                                                                                                             
firehose_client - [qfil] programming flash/vendor.bin to partition(0)@sector(4069376)...
firehose - 
Writing to physical partition 0, sector 4069376, sectors 786432
Progress: |██████████| 100.0% Write (Sector 0xC0000 of 0xC0000, ) 4.44 MB/s                                                                                                                                                                               
firehose_client
firehose_client - [LIB]: flash/cache.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/persist.bin doesn't exist!
firehose_client - [qfil] programming flash/oem.bin to partition(0)@sector(5307456)...
firehose - 
Writing to physical partition 0, sector 5307456, sectors 204800
Progress: |██████████| 100.0% Write (Sector 0x32000 of 0x32000, ) 4.38 MB/s                                                                                                                                                                               
firehose_client
firehose_client - [LIB]: flash/mdtp.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/lksecapp.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/lksecapp.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/cmnlib_30.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/cmnlib_30.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/cmnlib64_30.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/cmnlib64_30.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/keymaster64.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/keymaster64.bin doesn't exist!
firehose_client - [qfil] programming flash/resource.bin to partition(0)@sector(6161424)...
firehose - 
Writing to physical partition 0, sector 6161424, sectors 729088
Progress: |██████████| 100.0% Write (Sector 0xB2000 of 0xB2000, ) 4.45 MB/s                                                                                                                                                                               
firehose_client
firehose_client - [LIB]: flash/userdata.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/gpt_main0.bin doesn't exist!
firehose_client
firehose_client - [LIB]: flash/gpt_backup0.bin doesn't exist!
firehose_client - [qfil] raw programming ok.
firehose_client - [qfil] patching...
firehose_client - [qfil] patching with bin/patch0.xml
firehose_client - [qfil] patching DISK sector(14), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="296" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="14" value="NUM_DISK_SECTORS-34." what="Update last partition 51 'userdata' with actual size in Primary Header." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-21.), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="296" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-21." value="NUM_DISK_SECTORS-34." what="Update last partition 51 'userdata' with actual size in Backup Header." />
   </data>
firehose_client - [qfil] patching DISK sector(1), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="48" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-34." what="Update Primary Header with LastUseableLBA." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-1.), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="48" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-34." what="Update Backup Header with LastUseableLBA." />
   </data>
firehose_client - [qfil] patching DISK sector(1), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="32" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="1" value="NUM_DISK_SECTORS-1." what="Update Primary Header with BackupGPT Header Location." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-1.), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="24" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1." value="NUM_DISK_SECTORS-1." what="Update Backup Header with CurrentLBA." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-1), size=8
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="72" filename="DISK" physical_partition_number="0" size_in_bytes="8" start_sector="NUM_DISK_SECTORS-1" value="NUM_DISK_SECTORS-33." what="Update Backup Header with Partition Array Location." />
   </data>
firehose_client - [qfil] patching DISK sector(1), size=4
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="88" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="1" value="CRC32(2,6656)" what="Update Primary Header with CRC of Partition Array." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-1.), size=4
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="88" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-33.,6656)" what="Update Backup Header with CRC of Partition Array." />
   </data>
firehose_client - [qfil] patching DISK sector(1), size=4
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="16" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="1" value="0" what="Zero Out Header CRC in Primary Header." />
   </data>
firehose_client - [qfil] patching DISK sector(1), size=4
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="16" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="1" value="CRC32(1,92)" what="Update Primary Header with CRC of Primary Header." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-1.), size=4
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="16" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="0" what="Zero Out Header CRC in Backup Header." />
   </data>
firehose_client - [qfil] patching DISK sector(NUM_DISK_SECTORS-1.), size=4
<?xml version="1.0" ?><data>
 <patch SECTOR_SIZE_IN_BYTES="512" byte_offset="16" filename="DISK" physical_partition_number="0" size_in_bytes="4" start_sector="NUM_DISK_SECTORS-1." value="CRC32(NUM_DISK_SECTORS-1.,92)" what="Update Backup Header with CRC of Backup Header." />
 </data>
firehose_client - [qfil] patching ok
firehose - Setbootablestoragedrive succeeded.
firehose_client - [qfil] partition(0) is now bootable

1 Like

Brilliant work, thanks @mattmon!

I picked one up, and got it flashed on Windows using the EDL you’re linking to. I am not able to rotate the boot animation though as ‘adb remount’ for some reason is hanging (‘adb root’ works).

Anyone seen the same behavior ? Latest Android Studio.

Thanks again!

1 Like

Congrats for flashing it with Windows - how did you manage to install UsbDk so that it is recognized? In took the installer msi and installed, does it need any special install options?

What version?