Skip to content

CrossInk-Carousel on locked Xteink X4 is not recognized as CrossInk-compatible: is_crossink=false, device never requests /firmware/firmware.bin #5

@hazeyi

Description

@hazeyi

Device / environment

  • Device: Xteink X4 / locked batch
  • Current firmware on device: CrossInk-ESP32-1.2.9.4-tiny
  • Firmware repo requested by device: chintanvajariya/CrossInk-Carousel
  • Flashing method available: OTA only via CrossPoint/Xteink Unlocker
  • Browser/WebSerial flashing is not available on this locked batch
  • Tested on both macOS and Windows
  • Tested with multiple target firmware files, including CrossInk variants and CrossPoint firmware

Problem

The unlocker hotspot starts successfully, and the device connects to it.

The device also successfully sends a GitHub release API request to the unlocker, so DNS/hotspot interception seems to be working.

However, after the unlocker serves the release manifest, the device shows update failed.

The device never requests the actual firmware file:

GET /firmware/firmware.bin


So the OTA process appears to stop at the manifest parsing/validation stage, before firmware download begins.

Minimal reproduction
Restart the unlocker.
Select one firmware only, for example CrossInk no_emoji or CrossPoint official firmware.
Connect the Xteink X4 to the unlocker hotspot.
Tap update on the device.
Wait until the device shows update failed.
Save the unlocker helper log immediately.
Search the log for:
GET /firmware/firmware.bin
Observed unlocker log behavior

The unlocker receives the release API request:

GET /repos/chintanvajariya/CrossInk-Carousel/releases/latest
Host: api.github.com
UA: CrossInk-ESP32-1.2.9.4-tiny

The unlocker responds with a manifest containing:

download_url=http://unlocker.crosspointreader.com/firmware/firmware.bin
tag=99.9.9
is_crossink=false
is_inx=false

But the device never sends:

GET /firmware/firmware.bin

Instead, the device immediately reports update failed.

Expected behavior

After receiving the release manifest, the device should request:

GET /firmware/firmware.bin

Then the unlocker should serve the selected firmware binary.

Suspected cause

It looks like the unlocker does not classify chintanvajariya/CrossInk-Carousel as CrossInk-compatible.

The helper log shows:

is_crossink=false
is_inx=false

Because of that, the unlocker may be returning a generic release asset / manifest instead of the CrossInk-style variant assets expected by this firmware.

Since the current firmware is:

CrossInk-ESP32-1.2.9.4-tiny

it may be looking for a matching CrossInk variant asset, such as a tiny, no_emoji, or xlarge firmware asset. If the manifest does not contain the expected CrossInk-style asset names or metadata, the firmware may reject the update and never request /firmware/firmware.bin.

Request

Could the unlocker treat CrossInk-Carousel as CrossInk-compatible when building the fake GitHub release manifest?

For example, instead of only matching the official CrossInk repo name, it could also recognize:

repo == "CrossInk-Carousel"

as CrossInk-compatible, so the generated manifest uses CrossInk-style variant assets.

The key symptom is:

Unlocker receives GitHub release API request
Unlocker serves manifest
Log shows is_crossink=false
Device never requests /firmware/firmware.bin
Device shows update failed

I can provide the full unlocker-helper.log if needed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions