Proactive UICC / CAT command encoding and state machine.
Layer: Composition | no_std: yes | Status: Implemented
sequenceDiagram
participant T as Terminal
participant U as UICC
T->>U: Any APDU
U-->>T: SW=91 XX
T->>U: FETCH (Le=XX)
U-->>T: BER-TLV command (tag D0)
T->>U: TERMINAL RESPONSE
U-->>T: SW=90 00
| Spec | Coverage |
|---|---|
| ETSI TS 102 223 V18.2.0 | Card Application Toolkit |
| 3GPP TS 31.111 V19.3.0 | USIM Application Toolkit |
| Crate | Purpose |
|---|---|
| simrs-bertlv | BER-TLV encoding of proactive commands |
| Crate | Uses |
|---|---|
| simrs-usim | ProactiveState, SW override |
REFRESH, MORE TIME, POLL INTERVAL, POLLING OFF, SET UP EVENT LIST, SET UP CALL, SEND SS, SEND USSD, SEND SHORT MESSAGE, SEND DTMF, LAUNCH BROWSER, GEOGRAPHICAL LOCATION REQUEST, PLAY TONE, DISPLAY TEXT, GET INKEY, GET INPUT, SELECT ITEM, SET UP MENU, PROVIDE LOCAL INFORMATION, TIMER MANAGEMENT, SET UP IDLE MODE TEXT, LANGUAGE NOTIFICATION, PERFORM CARD APDU, POWER ON CARD, POWER OFF CARD, GET READER STATUS, RUN AT COMMAND, OPEN CHANNEL, CLOSE CHANNEL, RECEIVE DATA, SEND DATA, GET CHANNEL STATUS, SERVICE SEARCH, GET SERVICE INFORMATION, DECLARE SERVICE, SET FRAMES, GET FRAMES STATUS, RETRIEVE MULTIMEDIA MESSAGE, SUBMIT MULTIMEDIA MESSAGE, DISPLAY MULTIMEDIA MESSAGE, ACTIVATE, CONTACTLESS STATE CHANGED, COMMAND CONTAINER, ENCAPSULATED SESSION CONTROL, LSI COMMAND, END OF PROACTIVE UICC SESSION.
ProactiveCommandenum -- 46 variants covering all command types listed aboveencode(cmd, cmd_number, buf) -> Result<usize, ProactiveError>-- BER-TLV encoding into caller-provided bufferencoded_len(cmd, cmd_number) -> usize-- dry-run length calculation (no buffer needed)ProactiveState-- pending command buffer,91 XXSW override, FETCH/TERMINAL RESPONSE cycleProactiveState::queue_command()/.fetch()/.override_status()ProactiveState::handle_envelope()-- menu selection and event download parsingProactiveState::handle_terminal_response()-- result extraction- GSM 7-bit default alphabet encoding (
gsm7module)