Målgruppe: Denne artikel er henvendt firmwareingeniører, lokaliseringprogramledere og B2B-indkøbere, der sourcinger arabiske, hebræiske, urdu- eller persiske udgaver af B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 og Y6 læsepenne på tværs af de 47 lande, vi aktuelt leverer til. Den forudsætter, at du ved, hvad en sprogpakke er, men ønsker præcis at vide, hvordan vores to on-device tekstmotorer — RTL (legacy) og RTL2 (Unicode-konform bidi med shaping) — adskiller sig med hensyn til pris, RAM-forbrug, OTA-størrelse og testdækning.
Når en golfstatsdistributør onboarder et skoleudbud på 12.000 enheder og spørger, "Understøtter denne arabiske udgave korrekt bogstavsammensætning, kontekstuelle former og bidirektionel nummerorden?", er svaret ikke "ja, den understøtter arabisk." Det ærlige svar er hvilken build-pipeline, hvilken motor, hvilken font-undermængde og hvilken signeringskæde. Vi har leveret to forskellige højre-mod-venstre-stakke siden firmware-versioneringen nåede 1.6.x, og afstanden mellem dem — i pris, testtid, on-flash-størrelse og renderingkvalitet — er præcis den slags detaljer, der afgør, om en udrulning på 40.000 enheder dumper inspektionen på dag ét, eller kører i seks år uden en eneste font-relateret RMA.
Denne guide gennemgår, hvordan RTL og RTL2 er arkitekteret inde i læsepennens firmware, hvor de divergerer, hvordan hver sprogpakke signeres og pakkes, hvad BOM-påvirkningen er ved en MOQ på 2.000 stk. i specialfarve, og hvordan indkøbere bør stressteste den arabiske/hebræiske/urdu/persiske udgave, inden de underskriver en PO. Forvent blokdiagrammer, reelle tal fra vores produktionstelemetri (47.000+ penne leveret, 86 firmware-releases, 12 aktive sprogversioner) og den 30-sekunders tjekliste, du kan indsætte i din næste e-mail.
1. Hvorfor højre-mod-venstre-understøttelse er en separat motor og ikke en font
En udbredt misforståelse er, at RTL blot er et glyf-retningsflag. Det er det ikke. Arabisk, hebræisk, urdu og persisk kræver alle:
- Bidirektionel (bidi) algoritme — Unicode UAX #9. Blandede strenge som "Chapter 3 - الفصل الثالث" kræver baseretning, indlejringsniveauer og eksplicit override-håndtering.
- Bogstavsammensætning / kontekstuel shaping — Arabiske bogstaver har op til 4 former (isoleret, initial, medial, final), der afhænger af naboerne. Uden shaping gengives "كتاب" som fire ødelagte glyfer.
- Lam-Alef ligaturer — لا skal være en enkelt glyf, ellers er den visuelle orden forkert.
- Tal-shaping — Arabic-Indic-cifre (٠١٢) vs. Eastern Arabic-Indic (۰۱۲) vs. latinske cifre (012) i samme afsnit.
- Diakritisk stabling — Tashkil og hebræisk niqqud kan stable 2–4 mærker pr. basisbogstav.
Vi behandler dette som et motorproblem, ikke et fontproblem. En font er blot den glyftabel, motoren forespørger. Motoren afgør hvornår og hvilken glyf der skal bruges.
2. RTL (Legacy Motor) — Hvordan den blev bygget, og hvorfor den stadig findes
2.1 Arkitekturoversigt
RTL er vores førstegenerations bidi-motor, skrevet i 2019 mod en MIT-licenseret bidi-reference. Den arbejder på 2-byte UTF-16 codepoint-strømme, har ingen shaping og bruger præ-rasteriserede bitmaps til de 256 mest almindelige arabiske/hebræiske ord.
| Element | Specifikation |
|---|---|
| Codepoint-model | UTF-16, enkelt kodeenhed |
| Bidirektionel algoritme | Forenklet UAX #9 (ingen eksplicitte niveauer L4–L7) |
| Bogstavsammensætning | Ingen — fast isoleret form pr. bogstav |
| Lam-Alef-ligatur | Opslagstabel, 4 former (لا, لأ, لإ, لٱ) |
| Tal | Kun ASCII 0–9, LTR-løb inde i RTL-afsnit |
| Font-format | 8-bit indeks i 224 KB bitmap-tabel (kun 1 størrelse) |
| Motorstørrelse (flash) | 312 KB |
| Motorstørrelse (RAM) | 18 KB arbejdssæt |
| Signering | MD5 + leverandørnøgle (legacy) |
| Aktive SKU'er | B1 (firmware 2.4.7), B2 (2.4.7), P2 (2.0.3) |
| Antal aktive sprogpakker | 4 (ar-SA legacy, ar-EG legacy, he-IL, ur-PK) |
2.2 Hvorfor den stadig leveres på B1, B2 og P2
Tre årsager holder RTL i live. Pris: B1 og B2 bruger en 4 MB NOR-flash, og RTL-motoren efterlader 1,1 MB til indhold. Et skift til RTL2 ville forbruge yderligere 540 KB og tvinge os til at droppe den 4. OID-bogplads. Strøm: B1 trækker 700 mAh, og legacy-motoren tilføjer 0,4 mA gennemsnitlig strøm mod 1,1 mA for RTL2 — meningsfuldt ved 5,0 timers udholdenhedsmærket. Kompatibilitet: 14 eksisterende golfstatsdistributører driver B1-flåder; vi vil ikke bryde dem.
Indkøbertip: Hvis din kanal er prisfølsom (landet pris under $8), og dit indhold er Alif-Baa og grundlæggende historiebøger med korte sætninger er B1/B2 legacy RTL-build den korrekte kommercielle løsning. Betal ikke for RTL2, som du ikke vil bruge.
3. RTL2 (Unicode-konform motor) — erstatningen fra 2024
3.1 Arkitekturoversigt
RTL2 er vores andengenerationsmotor, bygget på den åbne HarfBuzz shaping-kerne (BSD-licens) pakket ind i en tynd leverandørskal. Den håndterer fulde UAX #9-niveauer L1–L7, OpenType GSUB/GPOS-shaping, fallback med fire fonte og et 32 KB shaping-cache.
| Element | Specifikation |
|---|---|
| Codepoint-model | UTF-8 internt, codepoint 0–0x10FFFF |
| Bidi-algoritme | Fuld UAX #9 med eksplicitte niveauer L1–L7 |
| Sammenføjning | Fuld OpenType-shaping, 4 kontekstuelle former |
| Lam-Alef-ligatur | OpenType GSUB-opslag, 12 former inklusive diakritiske |
| Tal | Konfigurerbar ASCII / Arabic-Indic / Eastern Arabic-Indic pr. afsnit |
| Fontformat | WOFF2-subset, 4 skærestørrelser (24/32/40/56 px) |
| Motorstørrelse (flash) | 852 KB |
| Motorstørrelse (RAM) | 46 KB arbejdssæt, 32 KB shaping-cache |
| Signering | Ed25519 + leverandørrod + per-region subnøgle |
| Aktive SKU'er | F8 (3.1.2), K7 (1.9.5), KF1 (1.9.5), L5 (4.2.0), Q6 (3.3.1), Q8 (3.3.1), T2 (2.6.4), Y6 (2.6.4) |
| Antal aktive sprogpakker | 8 (ar-SA modern, ar-AE modern, he-IL modern, ur-PK modern, fa-IR, ps-AF, sd-IN, dvu-NP) |
3.2 Hvorfor RTL2 erstatter RTL på otte modeller
Drivkraften var SFDA-inspektionscyklen i Saudi-Arabien i 2023. En saudiarabisk distributørs udrulning på 9.000 enheder havde synlige bogstavformdefekter ved 11 mm skærmfonte, og vi leverede en korrigerende OTA inden for 21 dage. Undersøgelsen førte tilbage til manglende kontekstuelle former i den gamle motor. Fra firmware 3.x og frem er alle arabiske/hebraiske/urdu/farsi-sprogpakker RTL2.
4. Side om side: RTL vs RTL2 på rigtigt indhold
Vi benchmarkede begge motorer på det samme indholdssæt — 12 arabiske OID-bøger (cover, 18 sider, 240 ord i gennemsnit) og 4 hebraiske begynderbøger.
| Metrik | RTL (legacy) | RTL2 (moderne) | Forskel |
|---|---|---|---|
| Motor-flash | 312 KB | 852 KB | +540 KB |
| Motor-RAM-spids | 18 KB | 78 KB | +60 KB |
| Koldstart til første ord | 0,41 s | 0,62 s | +0,21 s |
| Gns. ordopslag | 6,2 ms | 4,8 ms | -22 % |
| Shaping-dækning | 64 % former | 100 % former | +36 point |
| Bitmap-fontstørrelse | 224 KB | 1,12 MB (WOFF2-subset) | +896 KB |
| Samlet flash-forbrug pr. sprog | 0,54 MB | 1,97 MB | +1,43 MB |
| Batteriforbrug pr. times brug | 0,4 mA | 1,1 mA | +0,7 mA |
| OTA-payload | 0,6 MB | 2,1 MB | +250 % |
Kolonnen "delta" er præcis det, din programmanager vil spørge om. På B1 tvinger motoren på +540 KB et indholdsmæssigt kompromis; på T2 (2500 mAh Li-ion 18650, 14 timers drift) er +0,7 mA usynligt. Match motoren til SKU'en, ikke til landet.
5. Sprogpakkens filformat og signeringskæde
Hver sprogpakke, der sendes til produktion, er en signeret bundle. Det interne layout er identisk på tværs af motorer; kun det motorbindende felt ændres.
LP-AR-SA-RTL2-v3.2.1.spenlp
├── header.bin (256 B, version, sku_mask, engine_flag)
├── manifest.json (engine_id, fonts[], shaping_tables[])
├── font_24.woff2 (subset, ~280 KB)
├── font_32.woff2 (~310 KB)
├── font_40.woff2 (~340 KB)
├── font_56.woff2 (~410 KB)
├── shaping.bin (HarfBuzz-tabeller, ~520 KB)
├── dictionary.dict (sorteret lemma-liste, 12–88 MB afhængigt af sprog)
├── voice_tts_en.bin (valgfri tværsproglig TTS-fallback, 1,8 MB)
└── signature.sig (Ed25519, 64 B)
Signeringskæden er forankret i vores HSM i Shenzhen. Per-region undernøgler udstedes for Saudi-Arabien (SFDA), UAE (TDRA), Israel (IMOC) og Pakistan (PTA). En distributør kan ikke installere en sprogpakke, der ikke er signeret til deres region — bootloaderen afviser signaturen 38 ms efter mount, og enheden falder tilbage til en 17-sprogs engelsk pakke.
Køber-tip: Bed altid om SHA-256 for sprogpakken og den offentlige undernøgle-ID, før du accepterer en prøve. Vi sender begge dele med følgesedlen.
6. Lagringslayout pr. model — hvor sprogpakken bor
Placeringen af dictionary.dict på flash påvirker læseforsinkelse og OTA-omkostninger ved gensendelse. Nedenfor er det faktiske layout, vi leverer i firmware 3.3.1 (Q6/Q8).
| Model | Flash-type | LP-partition | Reservepartition | Slidbudget |
|---|---|---|---|---|
| B1 | 4 MB NOR | 0x000C0000–0x003F0000 | 0x003F0000–0x00400000 (64 KB A/B) | 10K cyklusser |
| B2 | 4 MB NOR | 0x000C0000–0x003F0000 | 0x003F0000–0x00400000 (64 KB A/B) | 10K cyklusser |
| F8 | 8 MB NAND | partition 4 (1,9 MB) | partition 5 (1,9 MB A/B) | 60K cyklusser |
| K7 / KF1 | 8 MB NAND | partition 4 (1,9 MB) | partition 5 (1,9 MB A/B) | 60K cyklusser |
| L5 | 16 MB NAND | partition 6 (3,6 MB) | partition 7 (3,6 MB A/B) | 100K cyklusser |
| P2 | 4 MB NOR | 0x000C0000–0x003F0000 | 0x003F0000–0x00400000 (64 KB A/B) | 10K cyklusser |
| Q6 / Q8 | 16 MB NAND | partition 6 (3,6 MB) | partition 7 (3,6 MB A/B) | 100K cyklusser |
| T2 / Y6 | 32 MB NAND | partition 8 (6,4 MB) | partition 9 (6,4 MB A/B) | 100K cyklusser |
A/B betyder, at bootloaderen bevarer den tidligere, fungerende sprogpakke på reservepartitionen, så en mislykket installation falder tilbage på 0,6 s.
7. Tjeklisten på 30 sekunder, før du køber en arabisk/hebræisk/urdu-udgave
Brug den i dit næste opkald til en leverandør. Det er den samme tjekliste, som vores OEM-team bruger til at godkende en prøve, før den godkendes.
- Engine version — Åbn Settings → About → Engine. Skal vise
RTL2-3.xpå F8/K7/KF1/L5/Q6/Q8/T2/Y6. B1/B2/P2 kan viseRTL-2.x. - Shaping-test — Tryk på ordet "كتاب". Bogstaverne skal være forbundne: kaaf, beh i slutform, alef forbundet. Hvis du ser fire isolerede bogstaver, er RTL2 ikke aktiv.
- Lam-Alef-test — Tryk på "لا". Skal være én glyph med korrekt grundlinje, ikke to stablede.
- Test med blandet retning — Tryk på "الدرس 3". Tal skal vises LTR i RTL-afsnittet, med den visuelle rækkefølge "الدرس 3".
- Test af talform — Skift til "Arabic-Indic digits" i Settings → Display. Tallene ٠-٩ skal vises med de korrekte cifre.
- Public subkey ID — Sammenlign den med den subkey, vi offentliggør på OEM-portalen. Mismatch = forfalsket LP.
Hvis alle seks består, er din PO sikker. Hvis én af dem fejler, er det grundlag for at afvise partiet i henhold til vores 1,0 % AQL Major-klausul.
8. Hvor arkitekturen er på vej hen (firmware 4.x-roadmap)
Tre ændringer lander mellem Q4 2026 og Q2 2027:
- Højre-til-venstre-mærker i ordbogssøgning — RTL2 bruger i øjeblikket latinsk sorteringsrækkefølge på ordbogsindekset. Vi er ved at skifte til ICU collator med locale-bevidst sortering, hvilket forventes at reducere arabisk ordopslag fra 4,8 ms til 3,1 ms.
- Per-ord glyph-cache — En vedvarende cache på 64 KB fjerner behovet for gentagen shaping af almindelige ord og sparer ~0,3 mA pr. aktiv minut.
- WOFF2 variabel skrifttype — En enkelt variabel fil på 540 KB erstatter fire faste størrelser og sparer ~580 KB på L5/Q6/Q8/T2/Y6.
Den ældre RTL-motor modtager kun sikkerhedsvedligeholdelse frem til 2027. Derefter vil B1/B2/P2-firmware ≥3.0 blive leveret med RTL2 på basis af betalt re-flash.
9. Indvirkning på pris og leveringstid ved valg af RTL2
Sprogpakker licenseres pr. region, ikke pr. enhed. Forskellen i fabrikkens omkostninger mellem en RTL- og en RTL2-pakke på samme hardware ligger i BOM-linjerne, ikke i enhedsprisen.
| Vare | RTL (ældre) | RTL2 (moderne) |
|---|---|---|
| Sprogpakkelicens pr. enhed | inkluderet i firmware | inkluderet i firmware |
| Udstedelsesgebyr for signeringsnøgle (engangsbeløb) | fritaget | 480 $ pr. region |
| Leveringstid for prøve (eksisterende region) | 7 dage | 7 dage |
| Leveringstid for prøve (ny region) | 21 dage | 21 dage |
| Leveringstid for masseproduktion | 28 dage | 28 dage |
| Tilpasset ordbogstilføjelse (10K ord) | 1.400 $ engangsbeløb | 1.400 $ engangsbeløb |
| Genunderskrivning ved opdatering af ordbog | $0 (MD5) | $0 (Ed25519, gratis pipeline) |
Det gebyr på $480 dækker vores signeringsceremoni på HSM-siden. Det er en engangsomkostning, regionsbestemt, og amortiseres på tværs af hele den flåde, du leverer til den pågældende region.
10. Visuel fordeling af sprogpakker på de 11 aktive SKU'er
Diagrammet nedenfor viser, hvilke RTL/RTL2-pakker der ligger på hvilke af de 11 forsendelsesklare SKU'er. Tre af SKU'erne (K7, KF1, Q6/Q8) leveres kun med RTL2. Den omkostningsfølsomme trio B1/B2/P2 har den ældre motor. F8, L5, T2 og Y6 har begge motorer til købere, der kører tosprogede flåder (f.eks. arabisk + urdu).
11. Appendiks: Detaljeret RTL2-ydeevnetelemetri fra produktionsflåder
Mellem januar 2024 og august 2026 indsamlede vi anonymiserede timingdata fra 11.420 RTL2-udstyrede enheder på tværs af vores distributionskanaler i Saudi-Arabien, UAE, Israel, Pakistan og Iran. Tallene nedenfor er ikke syntetiserede — de kommer direkte fra den diagnostiske perfmon.dump-blok, som firmwaren skriver til reservepartitionen, når en session afsluttes uden fejl. Det er de samme tal, som vores pålidelighedsteam gennemgår hver mandag morgen.
11.1 Cold Start-fordeling pr. model
| Model | n enheder | p50 cold start | p95 cold start | p99 cold start |
|---|---|---|---|---|
| F8 | 2.840 | 0,58 s | 0,79 s | 1,12 s |
| K7 / KF1 | 3.120 | 0,61 s | 0,83 s | 1,18 s |
| L5 | 1.460 | 0,55 s | 0,74 s | 1,04 s |
| Q6 / Q8 | 2.210 | 0,60 s | 0,81 s | 1,15 s |
| T2 / Y6 | 1.790 | 0,64 s | 0,88 s | 1,27 s |
Cold start defineres som intervallet fra brugeren trykker på tænd/sluk-knappen til det første ord i den første OID-bog gengives korrekt på skærmen, inklusive diakritiske tegn. Enheder over p99 markeres til garantiombytning af NOR-opstartspartitionen.
11.2 Ordopslagsventetid pr. sprog
Vi sampler hvert ordopslag via bidi.lookup-tracepunktet. Tabellen viser gennemsnittet over en 30-minutters læsessession.
| Sprog | p50 | p95 | p99 |
|---|---|---|---|
| Arabisk (ar-SA, ar-AE) | 4,6 ms | 7,1 ms | 12,4 ms |
| Hebraisk (he-IL) | 4,2 ms | 6,6 ms | 11,0 ms |
| Urdu (ur-PK) | 5,1 ms | 7,8 ms | 13,6 ms |
| Persisk (fa-IR) | 4,9 ms | 7,5 ms | 13,1 ms |
| Pashto (ps-AF) | 6,3 ms | 9,4 ms | 16,2 ms |
| Sindhi (sd-IN) | 6,7 ms | 9,9 ms | 17,0 ms |
| Divehi (dvu-NP) | 7,4 ms | 10,8 ms | 18,5 ms |
Pashto, Sindhi og Divehi ligger i den høje hale, fordi deres ordbøger er 18–34 % mindre end de veludrustede arabiske pakker, hvilket betyder, at lemma-indekset har lavere cache-lokalitet. Vi prioriterer disse tre i 4.x-firmware-cyklussen med en tilpasset præfiks-komprimeringsmetode, der bør bringe p99 under 13 ms.
11.3 Batteriomkostning ved kontinuerlig RTL2-brug
Vi instrumenterede 240 enheder (60 pr. modelfamilie) med en integreret strømshunt og kørte dem gennem en syntetisk 60-minutters kontinuerlig test med tryk, der simulerer et barn, der læser med 40 ord pr. minut. Resultaterne er gennemsnitligt strømforbrug over det passive grundforbrug.
| Model | Passivt grundforbrug | RTL2 aktiv | Delta |
|---|---|---|---|
| F8 | 38 mA | 39,1 mA | +1,1 mA |
| K7 / KF1 | 41 mA | 42,2 mA | +1,2 mA |
| L5 | 36 mA | 37,0 mA | +1,0 mA |
| Q6 / Q8 | 39 mA | 40,0 mA | +1,0 mA |
| T2 / Y6 | 33 mA | 34,0 mA | +1,0 mA |
I et 700 mAh B1-celle svarer +1,1 mA til et fald i driftstid på 5 %. I en 2500 mAh T2-celle ligger det under målestøjen. Dette er det tekniske grundlag for at holde B1, B2 og P2 på den ældre RTL-motor, selv efter at RTL2 er fuldt valideret.
11.4 Fejlkategorier i rendering observeret i felten
På tværs af 47.000+ sendte penne fordeler den 0,21 % felt-returneringsrate for RTL2-enheder sig på fire kategorier. Forståelse af disse kategorier hjælper distributører med at opbygge deres egne indgående inspektionsprocedurer.
- Lam-Alef grundlinje-drift (0,06 %) — kun synlig ved 56 px-skærestørrelsen, forårsaget af et manglende GPOS-mærke i v3.0.x shaping-tabellen. Rettet i v3.1.0.
- Klipning af diakritisk stak (0,05 %) — kasra + shadda + fatha-kombinationer over 4 mærker klipper toppen af glyfen. Rettet ved at hæve linje-boks-målet i v3.1.2.
- Tovejs nummerorden i overskrifter med blandede skriftsprog (0,04 %) — sjælden, forekommer kun når en OID-bog er oprettet med en tilpasset skrifttype, der mangler en
DirectionGSUB-funktion. Bogen afvises ved indholdsindlæsning. - Hængen ved formnings-cache-miss (0,06 %) — første-tryk-latens over 800 ms på Divehi og Sindhi. Afhjulpet i v3.2.0 ved at varme cachen op ved opstart.
Alle fire kategorier har leverede rettelser og kan påvises med 30-sekunders tjeklisten i afsnit 7.