Native assistant research¶
The text-capacity chart shows the measured stock and patched limits against the existing buffer.
The stock assistant path transports phone-produced instructions to a native watch UI. The phone-side serializer, BES-side decoder, and Bluetooth framing all preserve strings longer than 300 characters. The observed truncation occurs in the main firmware's UTF-8 to UTF-16 conversion.
Verified handler¶
The relevant handler starts near runtime 0x0813024c. For instruction/message
type 8, it clears an 800-byte inline buffer and then passes capacity 300 to
the converter at runtime 0x081f88c8:
08130344 mov.w r2, #800 ; memset size in bytes
08130348 mov r0, r7
0813034a bl memset
0813034e movs r3, #42 ; replacement character '*'
08130350 mov.w r2, #300 ; UTF-16 capacity
08130354 mov r1, r7
08130356 ldr r0, [r6, #4] ; UTF-8 source
08130358 bl 0x081f88c8 ; UTF-8 -> UTF-16
The converter reserves one code unit for a NUL terminator. Capacity 300 therefore produces at most 299 visible UTF-16 code units.
Object layout¶
Observed fields relative to the containing object:
| Offset | Meaning |
|---|---|
+0x2b80 |
State flag |
+0x2b82 |
Converted/displayed length |
+0x2b84 |
Additional flag |
+0x2b86 |
Start of 800-byte inline text buffer |
The object size is 0x2ea8 bytes. The text buffer ends immediately before the
object boundary; it cannot safely hold more than 400 UTF-16 code units.
Conservative capacity patch¶
At component file offset 0x130350:
old instruction bytes: 4f f4 96 72 ; mov.w r2, #300
new instruction bytes: 4f f4 c8 72 ; mov.w r2, #400
Only byte 0x130352 changes. The safe maximum becomes 399 visible code units.
Setting a larger immediate would write beyond the object and is not a valid way
to remove the limit.
Going beyond 399 in one response requires either enlarging every dependent object layout or allocating a separate dynamic buffer and redirecting all producers and consumers. That work is not complete.