├── .gitignore ├── 02.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── _config.yml ├── address.md ├── bmbt ├── 06.md ├── 32.md ├── 47.md ├── 48.md ├── 49.md ├── 4f.md └── controls │ └── bmbt_info_vm_gt.JPG ├── cdc └── 39.md ├── gm ├── 76.md ├── 79.md └── 7a.md ├── gt ├── 05.md ├── 40.md ├── 41.md ├── 45.md ├── audio_obc │ ├── C24_BM_0.png │ ├── C24_BM_1.png │ └── menu_C23BM.jpg ├── obc │ ├── aux_direct_heat.jpg │ ├── aux_direct_vent.jpg │ ├── aux_timer_1159pm.jpg │ ├── aux_timer_2359.jpg │ ├── code_9999.jpg │ ├── date_2092.jpg │ ├── date_311220.jpg │ ├── distance_9999.jpg │ ├── limit_299.jpg │ ├── time_12h_1159pm.jpg │ └── time_24h_2359.jpg └── service_mode │ ├── 00_service_mode.jpg │ ├── 01_service_mode_obc.jpg │ ├── 10_service_mode_version.jpg │ ├── 20_service_mode_key.jpg │ ├── 30_service_mode_brightness.jpg │ └── 50_set_brightness.jpg ├── guide.md ├── ike ├── 57 │ ├── bc_button.jpg │ └── check_button.jpg ├── 10.md ├── 11.md ├── 12.md ├── 13.md ├── 14.md ├── 15.md ├── 16.md ├── 17.md ├── 19.md ├── 1d.md ├── 24.md ├── 2a.md ├── 42.md ├── 53.md ├── 54.md ├── 55.md ├── 57.md ├── charset │ ├── 1.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ └── 9.png ├── obc │ ├── aux_direct.jpg │ ├── aux_indicator.jpg │ ├── auxiliary.jpg │ ├── code.jpg │ ├── code_deactivation.jpg │ ├── date_time.jpg │ ├── memo.jpg │ ├── obc.jpg │ ├── obc_limit.jpg │ └── obc_timer.jpg ├── prog │ └── prog.jpg ├── properties.md ├── redundant │ ├── lcm_coding.jpg │ └── redundant_data_storage.jpg └── region │ └── settings.jpg ├── lcm ├── 51 │ ├── brakes_red_stop.jpg │ ├── brakes_under_the_hood.jpg │ ├── cc.jpg │ ├── oil_level_yellow_check.jpg │ ├── oil_level_yellow_stop.jpg │ ├── oil_pressure_red_stop.jpg │ └── seatbelt_red_reminder.jpg ├── 1a.md ├── 1a │ └── cc.jpg ├── 51.md ├── 5a.md ├── 5b.md └── 5b │ ├── cc_low.jpg │ ├── fog_front.jpg │ ├── fog_rear.jpg │ ├── high.jpg │ └── left_right.jpg ├── mfl ├── 32.md └── 3b.md ├── nav ├── 1f.md ├── a2.md ├── gpst │ ├── gps_status_date_error.jpg │ ├── gps_version.jpg │ └── gps_week_roll_over_issue_20170926.jpg └── telematics │ ├── coordinates.jpg │ └── coordinates.png ├── radio ├── 23 │ ├── analogue_old.jpg │ ├── cdc_old.jpg │ ├── digital_old.jpg │ └── tape_vm.jpg ├── 36 │ ├── balance.jpg │ ├── bass.jpg │ ├── fader.jpg │ ├── meanwhile_in_munich.gif │ └── treble.jpg ├── 37 │ ├── bm53_cdc.png │ ├── bm53_eq.png │ ├── bm53_rad.png │ ├── c23_cdc.jpg │ ├── c23_eq.png │ ├── c23_rad.jpg │ ├── c23_tape.png │ ├── max.jpg │ ├── min.jpg │ └── neutral.jpg ├── 46 │ ├── c23_select_cdc.jpg │ ├── c23_select_radio.jpg │ └── c23_tone.jpg ├── 23.md ├── 36.md ├── 37.md ├── 46.md ├── arbitration.md ├── arbitration │ ├── 0905_11mg.jpg │ ├── 0905_2mg.jpg │ ├── 0905_3mg.jpg │ ├── 0905_4mg.jpg │ ├── 0905_7mg.jpg │ └── updated_ui.jpg ├── audio_obc │ ├── mk1_gt │ │ ├── audio_obc_disabled.JPG │ │ ├── audio_obc_enabled.JPG │ │ └── set_audio_obc.JPG │ └── vm_gt │ │ ├── audio_obc_enabled.JPG │ │ └── set_audio_obc.JPG └── service_mode.md ├── rls └── 59.md └── telephone ├── 20 ├── dial_new.JPG ├── dial_old.JPG ├── main_menu.JPG └── top_8_old.JPG ├── 21 ├── 42.JPG ├── 43.JPG ├── 80.JPG ├── f0.jpeg ├── f1.jpeg └── reference_pairing.jpg ├── 23 ├── 00.JPG ├── 05.JPG ├── 42_0.JPG ├── 42_1.JPG ├── 43.JPG ├── 80.JPG ├── c6.JPG ├── c7.JPG └── c8.JPG ├── 24 └── 90.JPG ├── 20.md ├── 21.md ├── 23.md ├── 24.md ├── 2b.md ├── 2c.md ├── 2c ├── active │ ├── active_chars.JPG │ ├── active_directory.JPG │ └── active_telephone.JPG ├── handsfree │ ├── handsfree_char.JPG │ ├── handsfree_directory.JPG │ └── handsfree_telephone.JPG └── incoming │ ├── incoming.JPG │ └── incoming_title.JPG ├── 2d.md ├── a5.md ├── a6.md ├── a6 └── icon.JPG ├── default.md ├── default ├── default_create.JPG └── default_error.JPG ├── detail.md ├── detail ├── message_button_left.JPG ├── message_button_right.JPG ├── message_button_update_add.JPG ├── message_button_update_remove.JPG ├── message_buttons.JPG ├── message_cr.JPG ├── message_create.JPG └── reference_sms_message.jpeg ├── dial.md ├── dial ├── dial_create.JPG └── dial_update_digits.JPG ├── directory.md ├── directory ├── directory_21.JPG ├── directory_31.JPG ├── directory_create.JPG ├── directory_name.JPG └── directory_number.JPG ├── info.md ├── info ├── info_create.JPG ├── info_subset.JPG └── info_title.JPG ├── last_numbers.md ├── last_numbers ├── last_numbers_create.JPG ├── last_numbers_destroy.JPG ├── number.JPG └── open.JPG ├── list.md ├── list ├── index_create.JPG ├── index_custom_id.JPG ├── index_custom_id_input.JPG ├── index_default.JPG ├── index_input_hold.JPG ├── index_input_press.JPG ├── index_input_release.JPG ├── index_title.JPG ├── reference_pairing.jpg └── reference_sms_index.jpeg ├── pin.md ├── pin ├── pin_create.JPG ├── pin_gt.JPG ├── pin_ike.JPG └── pin_update.JPG ├── sms.md ├── sms ├── 2004_1_main_menu.jpeg ├── 2004_2_phone_menu.jpeg ├── 2004_3_sms_selection.jpeg ├── 2004_4_message.jpeg ├── directory_fake.JPG ├── directory_real.JPG └── sms_emergency.jpg ├── top_8.md └── top_8 ├── top_8_21.JPG ├── top_8_31.JPG ├── top_8_create.JPG ├── top_8_name.JPG └── top_8_number.JPG /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/osx 3 | 4 | tmp 5 | log 6 | offline 7 | 8 | # Bundler 9 | .bundle 10 | 11 | ### OSX ### 12 | # General 13 | .DS_Store 14 | .AppleDouble 15 | .LSOverride 16 | 17 | # Icon must end with two \r 18 | Icon 19 | 20 | # Thumbnails 21 | ._* 22 | 23 | # Files that might appear in the root of a volume 24 | .DocumentRevisions-V100 25 | .fseventsd 26 | .Spotlight-V100 27 | .TemporaryItems 28 | .Trashes 29 | .VolumeIcon.icns 30 | .com.apple.timemachine.donotpresent 31 | 32 | # Directories potentially created on remote AFP share 33 | .AppleDB 34 | .AppleDesktop 35 | Network Trash Folder 36 | Temporary Items 37 | .apdisk 38 | 39 | 40 | # End of https://www.gitignore.io/api/osx 41 | ext 42 | 43 | # Ignore application configuration 44 | /config/application.yml 45 | -------------------------------------------------------------------------------- /02.md: -------------------------------------------------------------------------------- 1 | # `0x02` "Pong" 2 | 3 | This command has two purposes: 4 | 5 | 1. Annoucing the presence of a module on the bus. 6 | 2. "Pong" in response to a "Ping" `0x01`. 7 | 8 | ### Related Commands 9 | 10 | - `0x01` "Ping" 11 | 12 | ### Example Frames 13 | 14 | 60 04 F0 02 00 96 15 | 3B 04 C8 02 10 E5 16 | C8 04 FF 02 31 00 17 | 18 | ## Parameters 19 | 20 | Fixed length. 1-byte bitfield. 21 | 22 | ANNOUNCE = 0b0000_0001 23 | VARIANT = 0b1111_1000 24 | 25 | ### Announce `0b0000_0001` 26 | 27 | REPLY = 0b0000_0000 28 | ANNOUNCE = 0b0000_0001 29 | 30 | ### Variant `0b1111_1000` 31 | 32 | GT_VM = 0b0001_0 33 | GT_NAV = 0b0100_0 # incl. MK1 34 | 35 | NAV_MK4 = 0b0100_0 36 | NAV_MK4_ASSIST = 0b1100_0 37 | 38 | TEL_CMT = 0b0000_0 # CMT3000 39 | TEL_MOTO_V = 0b0011_0 # Motorola V-Series 40 | TEL_TCU = 0b0011_1 # Everest 41 | 42 | BMBT_4_3 = 0b0000_0 43 | BMBT_16_9 = 0b0011_0 44 | 45 | ## Use Cases 46 | 47 | ### Announce 48 | 49 | The announce bit is set when a module becomes active on the bus. This is most frequently seen at ignition with modules commonly powered/activated by ignition circuits (KL-R, KL-15). 50 | 51 | C8 04 FF 02 31 00 # Telephone broadcasting an announcement 52 | 53 | The announcement is what determines the availability of numerous features. For example, Television, Telephone, and DSP will all appear in the BMBT main menu following the announcement by the respective modules. 54 | 55 | An annoucement also allows the new module to establish it's state. and any applicable modules will respond as necessary. The response will depend on the announcing module, but will at minimum, include ignition state `0x11` from the cluster. 56 | 57 | ### "Pong" 58 | 59 | After a module has announced, it's ongoing presence will be checked by interested modules via `0x01` "Ping". 60 | 61 | C8 04 FF 02 31 00 # Telephone broadcasts announcement 62 | [...] 63 | 50 03 C8 01 9A # MFL pings Telephone 64 | C8 04 50 02 30 AE # Telephone replies to MFL with a pong 65 | 66 | ED 04 FF 02 01 15 # TV broadcasts announcement 67 | [...] 68 | 3B 03 ED 01 D4 # BMBT pings TV 69 | ED 04 3B 02 00 D0 # TV replies to BMBT with a pong 70 | 71 | If the ping is not acknowledged, features will be disabled. For example, the availability of the "Television" menu item requires the TV continue to reply to pings. 72 | 73 | ### Module Variant Identification 74 | 75 | In the case that a module has variants, and that variant affects behaviour of other modules on the bus, a "signature" is used to allow variants to be identified. 76 | 77 | A good working example of this is the BMBT which was introduced with the 4x3 display, and was later upgraded to the larger 16x9 display. In order for the navi. computer/video module to output a video signal with the correct aspect ratio, it must be able to identify the BMBT variant. 78 | 79 | #### GT `0x3b` 80 | 81 | Module|Variant|Signature|Frame| 82 | :---|:---|:---|:---| 83 | GT|Video Module GT|`0x10`|`3B 04 FF 02 11 D3` 84 | GT|Nav. GT (incl. MK1)|`0x40`|`3B 04 BF 02 41 C3` 85 | 86 | #### Nav. Computer `0x7f` 87 | 88 | Module|Variant|Signature|Frame| 89 | :---|:---|:---|:---| 90 | Nav.|MK4?|`0x40`|`7F 04 BF 02 41 87` 91 | Nav.|MK4? + BMW Assist|`0xc0`|`7F 04 BF 02 C1 07` 92 | 93 | - telephone to presumably configure BMW Assist 94 | - may affect MRS and sending impact notification 95 | 96 | #### Telephone `0xc8` 97 | 98 | Module|Variant|Signature|Frame| 99 | :---|:---|:---|:---| 100 | Telephone|CMT3000|`0x00`|`C8 04 FF 02 01 30` 101 | Telephone|Motorola V-Series|`0x30`|`C8 04 FF 02 31 00` 102 | Telephone|Everest Module with Bluetooth|`0x38`|`C8 04 BF 02 38 49` 103 | 104 | - nav. computer will send telematics data `0xa2`, `0xa4` 105 | 106 | #### BMBT `0xf0` 107 | 108 | Module|Variant|Signature|Frame| 109 | :---|:---|:---|:---| 110 | BMBT|4x3|`0x00`|`F0 04 BF 02 01 48` 111 | BMBT|16x9|`0x30`|`F0 04 BF 02 31 78` 112 | 113 | - GT/VM will set correct aspect ratio and encoding. 114 | 115 | #### No Variants 116 | 117 | While the need for a signature is likely predicated upon a module hardware/software revision, *it's only in the case that the module must be differentiated on the bus that a signature will be used*. Some modules, despite having one or more revisions, will not distinguish variants. 118 | 119 | The following module variants do not appear to have a signature. 120 | 121 | Module|Address|Variant|Signature|Frame| 122 | :---|:---|:---|:---|:---| 123 | GM|`0x00`|GM III (E39)|`0x00`|`00 04 BF 02 01 B8` 124 | CDC|`0x18`|All?|`0x00`|`18 04 BF 02 01 A0` 125 | CCM|`0x30`|All?|`0x00`|`30 04 BF 02 01 88` 126 | PDC|`0x60`|All?|`0x00`|`60 04 BF 02 01 D8` 127 | Radio|`0x68`|C23 BM|`0x00`|`68 04 FF 02 01 90` 128 | Radio|`0x68`|BM53|`0x00`|`68 04 BF 02 01 D0` 129 | IKE|`0x80`|IKE, IKI, KOMBI|`0x00`|`80 04 BF 02 01 38` 130 | EHC|`0xaC`|All?|`0x00`|`AC 04 BF 02 01 14` 131 | LCM|`0xd0`|LCM III (E39)|`0x00`|`D0 04 BF 02 01 68` 132 | TV|`0xeD`|MK1 VM, "MK3" VM|`0x00`|`ED 04 FF 02 01 15` -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ## Getting Started 4 | 5 | If you would like to contribute to this project: 6 | 7 | 1. Open an [issue](https://github.com/piersholt/wilhelm-docs/issues) to discuss what you'd like to contribute. Some documentation may already be in development, so it's best to confirm the contribution before getting started. 8 | 9 | 1. Please use refer to this [format guide](guide.md). The documentation format has admittedly changed over time and continues to evolve, however this guide reflects the current format. 10 | 11 | 1. I would ask that contributions are limited to completed documentation. If you need assistance to complete a piece of documentation, open an issue and I will do my best to answer any questions. 12 | 13 | 1. When you're ready to submit your contribution: 14 | 1. make a PR for each documentation topic, i.e. a PR for each command 15 | 1. name the PR as per the document title, e.g. *"0xID Command Name"* 16 | 17 | ## Notes 18 | 19 | 1. Please do not submit documentation that has been transposed from another source, irrespective of licensing or copyright. 20 | 21 | 1. Be prepared to have your documentation modified to some degree. 22 | 23 | 1. I have a great deal of time for those with questions. If you are unsure of something- ask! -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /address.md: -------------------------------------------------------------------------------- 1 | ## Device Index 2 | 3 | - 8-bit addressing (256 unique addressess). 4 | - Multicast, and broadcast addresses. 5 | - Addresses are preallocated, and remain fixed. 6 | - The adress pool is shared by all models that utilise this bus system. i.e. once the address `0x69` was allocated to the E31 body module, it was not reallocated, even on models to which the device was not applicable to. 7 | - Variants of a device will have the same address, e.g. the address `0x80` is used by the low cluster (KOMBI), high clusters (IKE, IKI). 8 | - All buses are within the 8-bit scope, i.e. an address is unique across the I, K, and D buses. 9 | 10 | *Only common I and K bus device addresses are listed.* 11 | 12 | Device|Bus|Description 13 | ------|---|----------- 14 | `0x00`|K|General Module (GM) 15 | `0x08`|K|Tilt/Slide Sunroof (SHD) 16 | `0x10`|D|Engine Management 17 | `0x11`|D|Centrol Body Electronics [ZKE1, ZKE2] 18 | `0x12`|D|Engine Management 19 | `0x13`|D|Engine Management 20 | `0x14`|D|Engine Management 21 | `0x15`|D|Double Sunroof (DDSHD) [E34] 22 | `0x16`|D|Thermal Level Oil Sensor [E36] 23 | `0x18`|K|CD Changer (CDC) 24 | `0x19`|D|*Rover Automatic Transmission Control Unit* 25 | `0x20`|D|Electronic Engine Power Control (EML) [M70] 26 | `0x21`|D|Central locking module [E34, E36] 27 | `0x22`|D|Electronic Engine Power Control (EML) [M73] 28 | `0x23`|-| 29 | `0x24`|K|Trunk Lid Module (HKM) [E38] 30 | `0x28`|K|Radio Controlled Clock (RCC) 31 | `0x2e`|K|Electronic Damper Control (EDC) 32 | `0x30`|K|Check Control Module (CCM) [E38] 33 | `0x31`|D|*MINI EHPR50* 34 | `0x32`|D|Transmission 35 | `0x35`|D|Steering Column Memory (LSM) [E31/E32/E34] 36 | `0x3b`|K|Graphics Stage (GT) 37 | `0x3f`|K/I|Diagnostics (via [gateway](#)) 38 | `0x40`|K|Remote Control for Central Locking 39 | `0x44`|K|Drive Away Protection System (EWS) 40 | `0x45`|K|Anti-Theft System (DWA) 41 | `0x46`|K|Central Information Display (CID) [E83/E85] 42 | `0x47`|K|Rear Compartment Monitor (RCM) 43 | `0x48`|K|Telephone (Japan) 44 | `0x50`|K|Multifunction Steering Wheel (MFL) 45 | `0x51`|K|Mirror Memory: Passenger (ZKE5) 46 | `0x5b`|K|Automatic Heating/Air Conditioning (IHKA) 47 | `0x60`|K|Park Distance Control (PDC) 48 | `0x66`|K|Active Light Control (ALC) 49 | `0x68`|K|Radio 50 | `0x69`|K|Body Module [E31] 51 | `0x6a`|K|Digital Sound Processor (DSP) 52 | `0x6b`|K|Auxiliary Heating "Webasto" (D-Bus?) 53 | `0x70`|K|Tire Pressure Control/Warning (RDC) 54 | `0x71`|K|Mirror Memory: Driver (ZKE5) 55 | `0x72`|K|Seat Memory: Driver (ZKE5) 56 | `0x76`|K|CD Player (Business) 57 | `0x7f`|K|Navigation 58 | `0x80`|K|Instrument Cluster (IKE/KOMBI) 59 | `0x9a`|K|Automatic Headlight Vertical Aim Control (LWR) 60 | `0xa0`|K|Rear Multi-information Display (MID) [E38] 61 | `0xa4`|K|Multiple Restraint System (MRS) 62 | `0xa7`|K|Rear Compartment Heating/Air Conditioning 63 | `0xac`|K|Electronic Height Control (EHC) 64 | `0xb0`|K|Speech Recognition System (SES) 65 | `0xb9`|K|Compact Remote Control (RF/IR) 66 | `0xbb`|K|Navigation (Japan) 67 | `0xbf`|K|Broadcast 📣 68 | `0xc0`|K|Multi-information Display (MID) 69 | `0xc8`|K|Telephone 70 | `0xcd`|K|Multi Information Display (OBC) [E31] 71 | `0xd0`|K|Lamp Check Module (LCM), Light Switch Center (LSZ) 72 | `0xda`|K|Seat Memory: Passenger (ZKE5) 73 | `0xe0`|K|Integrated Radio and Information System (IRIS) 74 | `0xe7`|K|Multicast: Displays 📣 75 | `0xe8`|K|Rain/Driving Light Sensor (RLS) 76 | `0xea`|K|DSP Controler [E38] 77 | `0xed`|K|Video Module 78 | `0xf0`|K|On-board Computer Control Panel (BMBT) 79 | `0xf5`|K|Lamp control module [E31] 80 | `0xff`|K|Broadcast 📣 -------------------------------------------------------------------------------- /bmbt/06.md: -------------------------------------------------------------------------------- 1 | # `0x06` BMBT Service Mode Reply 2 | 3 | ![Service Mode OBC Menu](../gt/service_mode/01_service_mode_obc.jpg) 4 | 5 | BMBT `0xf0` → GT `0x3b` 6 | 7 | *This is only applicable to vehicles equipped with BMBT.* 8 | 9 | This command is seemingly to support the service mode functions of the BMBT (`0xf0`). 10 | 11 | The message exchange format appears to mirror that of the D-Bus. i.e. the replies are 'stateful', thus the meaning of the reply must be inferred from the request. 12 | 13 | ### Related Commands 14 | 15 | - `0x05` [BMBT Service Mode Request](../gt/05.md) 16 | - `0x4f` [BMBT Monitor Control](4f.md) 17 | 18 | ### Example Frames 19 | 20 | F0 04 3B 06 00 C9 21 | F0 04 3B 06 18 D1 22 | F0 04 3B 06 3C F5 23 | F0 04 3B 06 FF 36 24 | F0 06 3B 06 FF 0D FE C7 25 | F0 13 3B 06 86 91 33 87 43 00 31 10 22 01 17 42 00 00 00 00 69 26 | 27 | ## Parameters 28 | 29 | The message length will vary depending on use case. 30 | 31 | Note: the meaning of the data is inferred from the preceding request (`0x05`). See Use Cases for detailed parameter mapping. 32 | 33 | Parameter|Index|Length|Type 34 | :--------|:----|:------|:------ 35 | **Data** |`0` |`-1` |Various 36 | 37 | ## Use Cases 38 | 39 | ### Settings 40 | 41 | #### Brightness (`>=3-1/..`) 42 | 43 | ![Service Mode OBC Menu](../gt/service_mode/50_set_brightness.jpg) 44 | 45 | When the user (first) opens the 'Set' menu, the GT will (lazily) request the current brightness value from the BMBT. 46 | 47 | 3B 05 F0 05 40 01 8A # Request brightness 48 | F0 04 3B 06 18 D1 # Reply brightness 49 | 50 | The brightness value is used to set the current brightness value on the slider UI. 51 | 52 | The MK4 uses following brightness steps: 53 | 54 | F0 04 3B 06 FF 36 # "Min" 55 | F0 04 3B 06 EC 25 56 | F0 04 3B 05 E0 CS 57 | F0 04 3B 05 D4 CS 58 | F0 04 3B 05 C8 CS 59 | F0 04 3B 05 BC CS 60 | F0 04 3B 06 B0 79 61 | F0 04 3B 05 A4 CS 62 | F0 04 3B 06 98 51 63 | F0 04 3B 06 8C 45 64 | F0 04 3B 06 80 49 65 | F0 04 3B 06 0C C5 66 | F0 04 3B 06 18 D1 67 | F0 04 3B 06 24 ED 68 | F0 04 3B 05 3C CS 69 | F0 04 3B 06 3C F5 70 | F0 04 3B 05 48 CS 71 | F0 04 3B 05 54 CS 72 | F0 04 3B 06 60 A9 73 | F0 04 3B 06 6C A5 74 | F0 04 3B 06 7F B6 # "Max" 75 | 76 | ### Service Mode: On-board Computer 77 | 78 | #### Version 79 | 80 | Version reply appears similar (if not identical?) to a diagnostic ident. 81 | 82 | Property |Index|Length|Type|INPA Property 83 | :--------------------------|:----|:-----|:---|:------ 84 | *BMW Part Number* |`0` |`4` |BCD |BMW Part Number 85 | **HW level** |`4` |`1` |BCD |Hardware Number 86 | **Encoding index** |`5` |`1` |BCD |Coding Index 87 | **DIAG index** |`6` |`1` |BCD |Diagnostic Index 88 | **BUS index** |`7` |`1` |BCD |Bus Index 89 | *Date of Manufacture* |`8` |`2` |BCD |Date of Manufacture 90 | **Supplier** |`10` |`1` |BCD |Supplier 91 | **SW Level** |`11` |`1` |BCD |Software No. 92 | *TBC* |`12` |`4` |-- |TBC 93 | 94 | ##### Example 95 | 96 | ![Service Mode OBC Menu](../gt/service_mode/10_service_mode_version.jpg) 97 | 98 | # GT requests BMBT version data 99 | 3B 04 F0 05 00 CA 100 | 101 | # BMBT replies with version (ident) data 102 | F0 13 3B 06 86 91 33 87 43 00 31 10 22 01 17 42 00 00 00 00 69 103 | 104 | Property|BMW Part No. |HW No.|CI |DI |BI |Month/Year|Sup.|SW No. 105 | --------|-------------|------|--- |----|----|----------|----|------ 106 | **Data**|`86 91 33 87`|`43` |`00`|`31`|`10`|`22 01` |`17`|`42` 107 | 108 | #### Key Function 109 | 110 | ![Service Mode OBC Menu](../gt/service_mode/20_service_mode_key.jpg) 111 | 112 | Parameter |Index|Length|Type 113 | :--------------------------|:----|:-----|:--- 114 | **Key** |`0` |`1` |Map 115 | **OBM increm. sensor** |`1` |`1` |Integer 116 | **Radio increment sens** |`2` |`1` |Integer 117 | 118 | All values are sent each time, irrespective of which property is being updated. 119 | 120 | # GT requests BMBT start key function diagnostic 121 | 3B 05 F0 05 0B 01 C1 122 | 123 | # BMBT replies with function initial values 124 | F0 06 3B 06 FF 00 00 34 125 | 126 | The key function ends after a timeout period, at which point the functions menu is displayed again. This is accompanied by the following message: 127 | 128 | F0 04 3B 06 00 C9 # BMBT Key function timeout 129 | 130 | ##### "Key" 131 | 132 | # Key 133 | # Note: no 'hold' or 'release' states 134 | # Note: different button IDs to button commands 135 | 136 | KEY_NONE = 0xFF # Default value when no button is pressed 137 | KEY_INFO_LEFT = 0x01 138 | KEY_INFO_RIGHT = 0x02 139 | KEY_DISC_1 = 0x03 140 | KEY_DISC_4 = 0x04 141 | KEY_DISC_2 = 0x05 142 | KEY_DISC_5 = 0x06 143 | KEY_DISC_3 = 0x07 144 | KEY_DISC_6 = 0x08 145 | KEY_FM = 0x09 146 | KEY_AM = 0x10 147 | KEY_MODE = 0x11 148 | KEY_OVERLAY = 0x12 149 | KEY_DIAL_VOL = 0x13 150 | KEY_EJECT = 0x14 151 | KEY_TEL = 0x16 152 | KEY_TAPE_SWITCH = 0x17 153 | KEY_AUX = 0x18 154 | KEY_TONE = 0x19 155 | KEY_SELECT = 0x20 156 | KEY_BACK = 0x21 157 | KEY_FORWARD = 0x22 158 | KEY_MENU_LEFT = 0x23 159 | KEY_MENU_RIGHT = 0x24 160 | KEY_DIAL_NAV = 0x25 161 | 162 | ##### "OBM increm. sensor" 163 | 164 | # OBM increm. sensor (Navigation Dial) 165 | 166 | # Value just increases/decreases with a right/left turn of the dial. 167 | # Turning the dial quickly will cause the value to jump. 168 | 169 | ##### "Radio increment sens" 170 | 171 | # Radio increment sens (Volume Dial) 172 | 173 | # As per navigation dial test. 174 | 175 | #### Brightness ("Contrast") 176 | 177 | ![Service Mode OBC Menu](../gt/service_mode/30_service_mode_brightness.jpg) 178 | 179 | # GT requests BMBT current 'contrast' value 180 | # Note: if value has already been loaded via Set menu.. then there's no request! 181 | 3B 05 F0 05 40 01 8A 182 | 183 | # BMBT replies with current 'constast' value which is displayed via UI 184 | 3B 06 F0 05 41 01 98 10 # Example: -2 185 | -------------------------------------------------------------------------------- /bmbt/32.md: -------------------------------------------------------------------------------- 1 | # `0x32` BMBT Volume (Dial) 2 | 3 | BMBT `0xf0` → Radio `0x68` 4 | BMBT `0xf0` → Telephone `0xc8` 5 | 6 | ### Related Commands 7 | 8 | - `0x32` [MFL Volume](../mfl/32.md) 9 | - `0x3b` [MFL Buttons](../mfl/3b.md) 10 | - `0x47` [BMBT "Soft" Buttons](47.md) 11 | - `0x48` [BMBT Buttons](48.md) 12 | - `0x49` [BMBT Navigation Dial](49.md) 13 | 14 | ### Example Frames 15 | 16 | F0 04 68 32 10 BE 17 | F0 04 68 32 30 9E 18 | F0 04 C8 32 11 1F 19 | 20 | ## Parameters 21 | 22 | Fixed length. One byte bit field. 23 | 24 | DIRECTION = 0b0000_0001 25 | STEPS = 0b1111_0000 26 | 27 | ### Direction `0b000_0001` 28 | 29 | DIRECTION_DOWN = 0b0 30 | DIRECTION_UP = 0b1 31 | 32 | ### Steps `0b1111_0000` 33 | 34 | Velocity of the control, i.e. the faster the control is turned, the greater the number of steps. 35 | 36 | STEPS_MIN = 0b0001 37 | ... 38 | STEPS_MAX = 0b1111 39 | 40 | ## Use Cases 41 | 42 | #### Radio Volume 43 | 44 | Radio volume control is the default behaviour. 45 | 46 | # Radio Volume Down 47 | F0 04 68 32 10 BE # -1 step 48 | F0 04 68 32 20 8E # -2 steps 49 | F0 04 68 32 30 9E # -3 steps 50 | F0 04 68 32 40 EE # -4 steps and so on... 51 | 52 | # Radio Volume Up 53 | F0 04 68 32 11 BF # +1 step 54 | F0 04 68 32 21 8F # +2 steps 55 | F0 04 68 32 31 9F # +3 steps 56 | F0 04 68 32 41 EF # +4 steps and so on... 57 | 58 | #### Telephone Volume (Handsfree) 59 | 60 | In order for BMBT to send volume commands to Telephone `0xc8`, [telephone status](../telephone/2c.md) must have "active" and "handsfree" bits set. 61 | 62 | # Telephone Volume Down 63 | F0 04 C8 32 10 1E # 1 step etc.. 64 | 65 | # Telephone Volume Up 66 | F0 04 C8 32 11 1F # 1 step etc.. 67 | -------------------------------------------------------------------------------- /bmbt/47.md: -------------------------------------------------------------------------------- 1 | # `0x47` BMBT "Soft" Buttons 2 | 3 | BMBT `0xf0` → Broadcast `0xbf` 4 | 5 | In order to reduce the number of BMBT variants, the widescreen BMBT eliminated equipment dependent dedicated buttons, i.e. *TRAFFIC*, *RDS*. 6 | 7 | Features that previously had a dedicated button were now controlled via a menu which was accessed by the new *INFO* button. 8 | 9 | ![Example Dial Layout](controls/bmbt_info_vm_gt.JPG) 10 | 11 | ### Related Commands 12 | 13 | - `0x48` [BMBT Buttons](bmbt/48.md) 14 | - `0x49` [BMBT Navigation Dial](bmbt/49.md) 15 | 16 | ### Example Frames 17 | 18 | F0 05 FF 47 00 38 75 19 | F0 05 FF 47 00 B8 F5 20 | 21 | ## Parameters 22 | 23 | Fixed length. 1-byte bit field. 24 | 25 | BUTTON = 0b0011_1111 26 | STATE = 0b1100_0000 27 | 28 | ### Button `0b0011_1111` 29 | 30 | BUTTON_SELECT = 0b0000_1111 31 | BUTTON_INFO = 0b0011_1000 32 | 33 | ### State `0b1100_0000` 34 | 35 | STATE_PRESS = 0b0000_0000 36 | STATE_HOLD = 0b0100_0000 37 | STATE_RELEASE = 0b1000_0000 38 | 39 | ## Use Cases 40 | 41 | ### Info 42 | 43 | > The "INFO" button reduces the number of variants. Traffic information can be called up using the "INFO" button. The country-specific functions will be activated or deactivated depending on the country variant set. 44 | > *-- BMW Service Training* 45 | 46 | The *INFO* button will open a new menu and list any supported features such as RDS, and TP. Upon selecting a feature, the GT will emulate a button press from the legacy BMBT. i.e. Selecting "RDS" from the Info menu would send `0x48` with the button ID for RDS `0x22`. 47 | 48 | # Info "Soft" Button 49 | F0 05 FF 47 00 38 75 # Press 50 | F0 05 FF 47 00 78 35 # Hold 51 | F0 05 FF 47 00 B8 F5 # Release 52 | 53 | ### Select 54 | 55 | The *SELECT* button is no longer sent via `0x48`. (No variance in behaviour compared to legacy BMBT?) 56 | 57 | # Select "Soft" Button 58 | F0 05 FF 47 00 0F 42 # Press 59 | F0 05 FF 47 00 4F 02 # Hold 60 | F0 05 FF 47 00 8F C2 # Release -------------------------------------------------------------------------------- /bmbt/48.md: -------------------------------------------------------------------------------- 1 | # `0x48` BMBT Buttons 2 | 3 | BMBT `0xf0` → GT `0x3b` 4 | BMBT `0xf0` → Radio `0x68` 5 | BMBT `0xf0` → Broadcast `0xff` 6 | 7 | This command is sent whenever BMBT buttons are pressed. It's applicable to all variants of the BMBT. 8 | 9 | ### Related Commands 10 | 11 | - `0x32` [BMBT Volume](32.md) & [MFL Volume](../mfl/32.md) 12 | - `0x3b` [MFL Buttons](../mfl/3b.md) 13 | - `0x47` [BMBT "Soft" Buttons](47.md) 14 | - `0x49` [BMBT Navigation Dial](49.md) 15 | 16 | ### Example Frames 17 | 18 | F0 04 3B 48 05 82 19 | F0 04 68 48 21 F5 20 | F0 04 FF 48 08 4B 21 | 22 | ## Parameters 23 | 24 | Fixed length. One byte bit field. 25 | 26 | BUTTON = 0b0011_1111 27 | STATE = 0b1100_0000 28 | 29 | ### Button `0b0011_1111` 30 | 31 | BUTTON_TONE = 0b00_0100 32 | BUTTON_SELECT = 0b10_0000 # 4x3 only! 33 | BUTTON_PREV = 0b01_0000 34 | BUTTON_NEXT = 0b00_0000 35 | BUTTON_PRESET_1 = 0b01_0001 36 | BUTTON_PRESET_2 = 0b00_0001 37 | BUTTON_PRESET_3 = 0b01_0010 38 | BUTTON_PRESET_4 = 0b00_0010 39 | BUTTON_PRESET_5 = 0b01_0011 40 | BUTTON_PRESET_6 = 0b00_0011 41 | BUTTON_AM = 0b10_0001 42 | BUTTON_FM = 0b11_0001 43 | BUTTON_MODE_PREV = 0b10_0011 44 | BUTTON_MODE_NEXT = 0b11_0011 # 4x3 only! 45 | BUTTON_OVERLAY = 0b11_0000 46 | BUTTON_POWER = 0b00_0110 # Volume dial button 47 | BUTTON_TAPE_EJECT = 0b10_0100 48 | BUTTON_TAPE_SIDE = 0b01_0100 49 | BUTTON_TP = 0b11_0010 # Alt: DOLBY C 50 | BUTTON_RDS = 0b10_0010 # Alt: DOLBY B 51 | 52 | BUTTON_TELEPHONE = 0b00_1000 53 | BUTTON_AUX_HEAT = 0b00_0111 # "Clock" 54 | 55 | BUTTON_MENU = 0b11_0100 56 | BUTTON_CONFIRM = 0b00_0101 # Navigation dial button 57 | 58 | ### State `0b1100_0000` 59 | 60 | STATE_PRESS = 0b00 61 | STATE_HOLD = 0b01 62 | STATE_RELEASE = 0b10 63 | 64 | ## Use Cases 65 | 66 | Note: Press, Hold, Release events respectively. 67 | 68 | ### General 69 | 70 | # Menu 71 | F0 04 FF 48 34 77 72 | F0 04 FF 48 74 37 73 | F0 04 FF 48 B4 F7 74 | 75 | # Confirm (Navi. dial button) 76 | F0 04 3B 48 05 82 77 | F0 04 3B 48 45 C2 78 | F0 04 3B 48 85 02 79 | 80 | ### Vehicle 81 | 82 | # Aux. Heat/"Clock" 83 | F0 04 FF 48 07 44 84 | F0 04 FF 48 47 04 85 | F0 04 FF 48 87 C4 86 | 87 | ### Telephone 88 | 89 | # Telephone 90 | F0 04 FF 48 08 4B 91 | F0 04 FF 48 48 0B 92 | F0 04 FF 48 88 CB 93 | 94 | ### Radio 95 | 96 | # Preset 1 97 | F0 04 68 48 11 C5 98 | F0 04 68 48 51 85 99 | F0 04 68 48 91 45 100 | 101 | # Preset 2 102 | F0 04 68 48 01 D5 103 | F0 04 68 48 41 95 104 | F0 04 68 48 81 55 105 | 106 | # Preset 3 107 | F0 04 68 48 12 C6 108 | F0 04 68 48 52 86 109 | F0 04 68 48 92 46 110 | 111 | # Preset 4 112 | F0 04 68 48 02 D6 113 | F0 04 68 48 42 96 114 | F0 04 68 48 82 56 115 | 116 | # Preset 5 117 | F0 04 68 48 13 C7 118 | F0 04 68 48 53 87 119 | F0 04 68 48 93 47 120 | 121 | # Preset 6 122 | F0 04 68 48 03 D7 123 | F0 04 68 48 43 97 124 | F0 04 68 48 83 57 125 | 126 | # FM 127 | F0 04 68 48 31 E5 128 | F0 04 68 48 71 A5 129 | F0 04 68 48 B1 65 130 | 131 | # AM 132 | F0 04 68 48 21 F5 133 | F0 04 68 48 61 B5 134 | F0 04 68 48 A1 75 135 | 136 | # Mode (Mode Prev. on 4x3 BMBT) 137 | F0 04 68 48 23 F7 138 | F0 04 68 48 63 B7 139 | F0 04 68 48 A3 77 140 | 141 | # Mode Next (4x3 BMBT only!) 142 | F0 04 68 48 33 E7 143 | F0 04 68 48 73 A7 144 | F0 04 68 48 B3 67 145 | 146 | # Overlay 147 | F0 04 68 48 30 E4 148 | F0 04 68 48 70 A4 149 | F0 04 68 48 B0 64 150 | 151 | # Power (Vol. dial button) 152 | F0 04 68 48 06 D2 153 | F0 04 68 48 46 92 154 | F0 04 68 48 86 52 155 | 156 | # Tape Eject 157 | F0 04 68 48 24 F0 158 | F0 04 68 48 64 B0 159 | F0 04 68 48 A4 70 160 | 161 | # Tape Side 162 | F0 04 68 48 14 C0 163 | F0 04 68 48 54 80 164 | F0 04 68 48 94 40 165 | 166 | # Tone 167 | F0 04 68 48 04 D0 168 | F0 04 68 48 44 90 169 | F0 04 68 48 84 50 170 | 171 | # Select 172 | F0 04 68 48 20 F4 173 | F0 04 68 48 60 B4 174 | F0 04 68 48 A0 74 175 | 176 | # Previous 177 | F0 04 68 48 10 C4 178 | F0 04 68 48 50 84 179 | F0 04 68 48 90 44 180 | 181 | # Next 182 | F0 04 68 48 00 D4 183 | F0 04 68 48 40 94 184 | F0 04 68 48 80 54 185 | 186 | # RDS/Dolby B 187 | F0 04 68 48 22 F6 188 | F0 04 68 48 62 B6 189 | F0 04 68 48 A2 76 190 | 191 | # TP/Dolby C 192 | F0 04 68 48 32 E6 193 | F0 04 68 48 72 A6 194 | F0 04 68 48 B2 66 -------------------------------------------------------------------------------- /bmbt/49.md: -------------------------------------------------------------------------------- 1 | # `0x49` BMBT Navigation Dial 2 | 3 | One byte bit field. Reversed fields as compared to volume control `0x32`, but otherwise the same in operation. 4 | 5 | Always sent to GT `0x3b`. 6 | 7 | Bit|7|6-4|3-0 8 | ---|---|---|--- 9 | Use|Direction|--| Steps 10 | 11 | # Direction 12 | LEFT = 0b0000_0000 13 | RIGHT = 0b1000_0000 14 | 15 | # Steps (variable) 16 | MIN = 0b0000_0001 17 | MAX = 0b0000_1111 18 | 19 | # Left 20 | F0 04 3B 49 01 87 # 1 step 21 | F0 04 3B 49 02 84 # 2 steps etc... 22 | 23 | # Right 24 | F0 04 3B 49 81 07 # 1 step 25 | F0 04 3B 49 82 04 # 2 steps etc... 26 | -------------------------------------------------------------------------------- /bmbt/4f.md: -------------------------------------------------------------------------------- 1 | # `0x4f` Monitor Control 2 | 3 | GT `0x3b` → BMBT `0xf0` 4 | TV `0xed` → BMBT `0xf0` 5 | 6 | This command is used to control, and configure the BMBT monitor. 7 | 8 | It's very helpful when testing navigation computers, and video modules which might not support automatic encoding, and aspect ratio switching. 9 | 10 | ### Related Commands 11 | 12 | - `0x2b` [Telephone LEDs](../telephone/2b.md) 13 | - `0x4a` Tape Control/Radio LED 14 | 15 | ### Example Frames 16 | 17 | # GT 18 | 3B 04 F0 4F 10 90 # Monitor on at KL-R 19 | 3B 04 F0 4F 00 80 # Select "Monitor Off" 20 | 21 | # TV 22 | ED 05 F0 4F 11 12 54 # Open "Television" (On, TV, 16x9, NTSC) 23 | ED 05 F0 4F 12 11 54 # Return to Main Menu (On, Nav. GT, 16x9, PAL) 24 | 25 | ## Parameters 26 | 27 | Two byte bitfield, although the second byte is often negated by GT. 28 | 29 | # Byte 1 30 | SOURCE = 0b0000_0011 << 8 31 | POWER = 0b0001_0000 << 8 32 | 33 | # Byte 2 (Optional) 34 | ENCODING = 0b0000_0011 << 0 35 | ASPECT_RATIO = 0b0011_0000 << 0 36 | 37 | ### Source `0b0000_0011 << 8` 38 | 39 | SOURCE_NAV_GT = 0b0000_0000 40 | SOURCE_TV = 0b0000_0001 41 | SOURCE_VID_GT = 0b0000_0010 42 | 43 | The input source switching in handled by the video module, but each source has it's own brightness settings which is recalled. 44 | 45 | ### Power `0b0001_0000 << 8` 46 | 47 | POWER_OFF = 0b0000_0000 48 | POWER_ON = 0b0001_0000 49 | 50 | This will turn the monitor on, or off accordingly. 51 | 52 | The GT will turn the monitor on at ignition position 1 (KL-R), and off at ignitition position 0. 53 | 54 | ### Encoding `0b0000_0011 << 0` 55 | 56 | ENCODING_NTSC = 0b0000_0001 57 | ENCODING_PAL = 0b0000_0010 58 | 59 | Encoding issues are commonly seen when switching between different generation navigation computers, or video modules, as there did seem to be a switch between PAL and NTSC as the encoding for navigation computer video. Incorrect encoding is usually denoted by "scrolling" video image. 60 | 61 | ### Aspect Radio `0b0011_0000 << 0` 62 | 63 | ASPECT_4_3 = 0b0000_0000 64 | ASPECT_16_9 = 0b0001_0000 65 | ASPECT_ZOOM = 0b0011_0000 -------------------------------------------------------------------------------- /bmbt/controls/bmbt_info_vm_gt.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/bmbt/controls/bmbt_info_vm_gt.JPG -------------------------------------------------------------------------------- /gm/76.md: -------------------------------------------------------------------------------- 1 | # `0x76` Visual Indicators 2 | 3 | GM `0x00` → Broadcast `0xbf` 4 | 5 | This command is used to trigger the visual indicators for various Anti-Theft (DWA) and Cental Locking events. 6 | 7 | The GM coding determines which indicators are triggered. 8 | 9 | ### Related Commands 10 | 11 | - `0x72` Remote (Keyless) Entry 12 | - `0x74` Key Status 13 | 14 | ### Example Frames 15 | 16 | 00 04 BF 76 00 CD 17 | 00 04 BF 76 02 CF 18 | 00 04 BF 76 82 4F 19 | 20 | ## Parameters 21 | 22 | Fixed length. One byte bitfield. 23 | 24 | VISUAL_OFF = 0b0000_0000 25 | 26 | VISUAL_HAZARDS = 0b0000_0001 # Hazard warning flashers 27 | VISUAL_TURN_SIGNALS = 0b0000_0010 # Turn signals flashing 28 | VISUAL_LOW_BEAMS = 0b0000_0100 # Low beams flashing 29 | VISUAL_HIGH_BEAMS = 0b0000_1000 # High beams flashing 30 | 31 | VISUAL_UNKNOWN = 0b1000_0000 32 | 33 | ### Visual Off `0b0000_0000` 34 | 35 | Visual indicators will remain active until they are deactivated. 36 | 37 | ### Visual Hazards `0b0000_0001` 38 | 39 | This is akin to manually activating the hazard warning flashers via the central console. 40 | 41 | ### Visual Turn Signals `0b0000_0010` 42 | 43 | Unlike the hazard warning flashers, there are no interior indicators, i.e. the cluster turn signal indicators are not activated. 44 | 45 | ### Visual Low Beams `0b0000_0100` 46 | 47 | Low beams flashing at the same interval as the turn signals. 48 | 49 | ### Visual High Beams `0b0000_1000` 50 | 51 | High beams flashing at the same interval as the turn signals. 52 | 53 | ### Visual Unknown? `0b1000_0000` 54 | 55 | No apparent effect. I thought this may have been the acoustic indicator, but I believe that's via alarm siren which is controlled by GM, so I don't know! 56 | 57 | ## Use Cases 58 | 59 | ### Anti-Theft (DWA) 60 | 61 | Any combination of the hazard warning lights, low beams, and high beams can be coded as visual indicators. 62 | 63 | # General Module Coding: Anti-Theft (DWA) Indicators 64 | # ZKE3 (GM3.C05) 65 | 66 | ALARM_OPT_WARNBLINKER # "Alarm Visual Warning Flashers" 67 | ALARM_OPT_ABBLENDLICHT # "Alarm Visual Low Beam" 68 | ALARM_OPT_FERNLICHT # "Alarm Visual High Beam" 69 | 70 | *Disabling the warning blinkers seems to be a bit tricky. TBC...* 71 | 72 | ### Central Locking 73 | 74 | # General Module Coding: Central Locking Indicators 75 | # ZKE3 (GM3.C05) 76 | # Translations via NCS Dummy 77 | 78 | QUIT_OPT_SCHAERF # VISUAL LOCKING ACKNOWLEDGE (SINGLE TURN SIGNAL FLASH) 79 | QUIT_OPT_ENTSCH # VISUAL UNLOCKING ACKNOWLEDGE (TWO TURN SIGNAL FLASHES) 80 | 81 | The same command is used to activate both a single, and double flash of the turn signals. The GM will simply allow one, or two cycles of the turn signals before deactivating. 82 | 83 | # Central Locking 84 | 00 04 BF 76 02 CF # Turn signals activated 85 | 00 04 BF 76 00 CD # Turn signals deactivated 86 | 87 | *LM doesn't report turn signals via `0x5b`... perhaps time based?* 88 | 89 | -------------------------------------------------------------------------------- /gm/79.md: -------------------------------------------------------------------------------- 1 | # `0x79` Door/Lid Request 2 | 3 | Various → General Module `0x00` 4 | 5 | Request Door/Lid Status `0x7a` from General Module `0x00` 6 | 7 | ### Related Commands 8 | 9 | - `0x7a` 10 | 11 | ### Example Frames 12 | 13 | 30 03 00 79 4A 14 | F0 03 00 79 8A 15 | 16 | ## Parameters 17 | 18 | Fixed length. No parameters. 19 | 20 | ## Use Cases 21 | 22 | ... -------------------------------------------------------------------------------- /gt/05.md: -------------------------------------------------------------------------------- 1 | # `0x05` BMBT Service Mode Request 2 | 3 | ![Service Mode OBC Menu](service_mode/01_service_mode_obc.jpg) 4 | 5 | GT `0x3b` → BMBT `0xf0` 6 | 7 | *This is only applicable to vehicles equipped with BMBT.* 8 | 9 | This command is seemingly to support the service mode functions of the BMBT. 10 | 11 | The message exchange format appears to mirror that of the D-Bus. 12 | 13 | Note: independent of automatic brighness adjustment when instrument backlighting (58G) is activated. 14 | 15 | ### Related 16 | 17 | - `0x06` [BMBT Service Mode Reply](../bmbt/06.md) 18 | - `0x4f` [BMBT Monitor Control](../bmbt/4f.md) 19 | 20 | ### Examples 21 | 22 | 3B 04 ED 05 00 D7 23 | 3B 04 F0 05 00 CA 24 | 3B 05 F0 05 0B 01 C1 25 | 3B 05 F0 05 40 01 8A 26 | 3B 06 F0 05 41 01 6C E4 27 | 3B 06 F0 05 42 01 D4 5F 28 | 29 | ## Parameters 30 | 31 | The message length will vary depending on use case. 32 | 33 | Parameter|Index|Length|Type 34 | :-------|:----|:-----|:--- 35 | **Property ID**|`0`|`1`|Bitfield? 36 | **Data**|`1`|`-1`|Various 37 | 38 | ### Property ID 39 | 40 | ID|Property 41 | :--|------- 42 | `0x00`|Ident Request 43 | `0x0b`|Key Function Request 44 | `0x40`|Brightness Request 45 | `0x41`|Brightness Set (BMBT?) 46 | `0x42`|Brightness Set (E85/6 Flip-Up/RCM?) 47 | 48 | ## Use Cases 49 | 50 | ### Settings 51 | 52 | #### Brightness (`>=3-1/..`) 53 | 54 | Brightness control via the 'Set' menu. 55 | 56 | ![Service Mode OBC Menu](service_mode/50_set_brightness.jpg) 57 | 58 | Brightness was originally only adjustable via service mode, and not made available via 'Set' until a later build of the updated UI. As such, the use case effectively mirrors brightness adjustment via service mode. 59 | 60 | When the user (first) opens the 'Set' menu, the GT will (lazily) request the current brightness value from the BMBT. 61 | 62 | 3B 05 F0 05 40 01 8A # Request brightness 63 | F0 04 3B 06 18 D1 # Reply brightness 64 | 65 | The GT then sets the Brightness level as per the value returned via `0x06`. 66 | 67 | As the user adjusts the brightness level (via `0x31`): 68 | 69 | # Note: both commands are send with each adjustment. 70 | 3B 06 F0 05 41 01 6C E4 # 0x41 appears to represent the BMBT. 71 | 3B 06 F0 05 42 01 6C E7 # 0x42 may represent the RCM, or E85/6 flip-up display. 72 | 73 | The MK4 uses following brightness steps: 74 | 75 | # Note: same encoding as via Service Mode 76 | 3B 06 F0 05 41 01 FF 77 # "Min" 77 | 3B 06 F0 05 41 01 EC 64 78 | 3B 06 F0 05 41 01 E0 68 79 | 3B 06 F0 05 41 01 D4 5C 80 | 3B 06 F0 05 41 01 C8 40 81 | 3B 06 F0 05 41 01 BC 34 82 | 3B 06 F0 05 41 01 B0 38 83 | 3B 06 F0 05 41 01 A4 2C 84 | 3B 06 F0 05 41 01 98 10 85 | 3B 06 F0 05 41 01 8C 04 86 | 3B 06 F0 05 41 01 80 08 87 | 3B 06 F0 05 41 01 0C 84 88 | 3B 06 F0 05 41 01 18 90 89 | 3B 06 F0 05 41 01 24 AC 90 | 3B 06 F0 05 41 01 30 B8 91 | 3B 06 F0 05 41 01 3C B4 92 | 3B 06 F0 05 41 01 48 C0 93 | 3B 06 F0 05 41 01 54 DC 94 | 3B 06 F0 05 41 01 60 E8 95 | 3B 06 F0 05 41 01 6C E4 96 | 3B 06 F0 05 41 01 7F F7 # "Max" 97 | 98 | ### Service Mode: On-board Computer 99 | 100 | BMBT service mode offers the following functions: 101 | 102 | - Version 103 | - Key function 104 | - Brightness 105 | 106 | #### Version 107 | 108 | ![Service Mode OBC Menu](service_mode/10_service_mode_version.jpg) 109 | 110 | # "Version" => "ON-BOARD COMPUTER VERSION" 111 | 3B 04 ED 05 00 D7 112 | 113 | #### Key Function 114 | 115 | ![Service Mode OBC Menu](service_mode/20_service_mode_key.jpg) 116 | 117 | # "Key function" => "ON-BOARD MONITOR KEY FUNCT." 118 | 3B 05 F0 05 0B 01 C1 119 | 120 | #### Brightness ("Contrast") 121 | 122 | ![Service Mode OBC Menu](service_mode/30_service_mode_brightness.jpg) 123 | 124 | # "Brightness" => "ON-BOARD COMPUTER CONTRAST" 125 | 3B 05 F0 05 40 01 8A 126 | 127 | Note: if the brightness value already been lazily loaded via Set menu, then the GT will not send above the request. 128 | 129 | As the user changes the brightness level via the slider: 130 | 131 | # Note: same encoding as via 'Set' 132 | 3B 06 F0 05 41 01 FF 77 # -10 133 | 3B 06 F0 05 41 01 EC 64 # -9 134 | 3B 06 F0 05 41 01 E0 68 # -8 135 | 3B 06 F0 05 41 01 D4 5C # -7 136 | 3B 06 F0 05 41 01 C8 40 # -6 137 | 3B 06 F0 05 41 01 BC 34 # -5 138 | 3B 06 F0 05 41 01 B0 38 # -4 139 | 3B 06 F0 05 41 01 A4 2C # -3 140 | 3B 06 F0 05 41 01 98 10 # -2 141 | 3B 06 F0 05 41 01 8C 04 # -1 142 | 143 | 3B 06 F0 05 41 01 80 08 # 0 144 | 145 | 3B 06 F0 05 41 01 0C 84 # +1 146 | 3B 06 F0 05 41 01 18 90 # +2 147 | 3B 06 F0 05 41 01 24 AC # +3 148 | 3B 06 F0 05 41 01 30 B8 # +4 149 | 3B 06 F0 05 41 01 3C B4 # +5 150 | 3B 06 F0 05 41 01 48 C0 # +6 151 | 3B 06 F0 05 41 01 54 DC # +7 152 | 3B 06 F0 05 41 01 60 E8 # +8 153 | 3B 06 F0 05 41 01 6C E4 # +9 154 | 3B 06 F0 05 41 01 7F F7 # +10 155 | 156 | Note: quick adjustment via the dial will 'jump' brightness levels. 157 | 158 | When the user exits the slider, the GT will then send both `0x41` and `0x42`, presumably setting the multiple displays to a uniform brightness level. 159 | 160 | 3B 06 F0 05 41 01 24 AC # BMBT? 161 | 3B 06 F0 05 42 01 24 AF # E85/6 Flip-Up or RCM? -------------------------------------------------------------------------------- /gt/41.md: -------------------------------------------------------------------------------- 1 | # `0x41` OBC Control 2 | 3 | GT `0x3b` → Cluster `0x80` 4 | 5 | This is applicable to the BMBT only. 6 | 7 | ## Examples 8 | 9 | 3B 05 80 41 03 01 FD 10 | 3B 05 80 41 07 01 F9 11 | 3B 05 80 41 09 03 F5 12 | 3B 05 80 41 0D 02 F0 13 | 3B 05 80 41 0F 01 F1 14 | 3B 05 80 41 0F 02 F2 15 | 3B 04 80 41 11 EF 16 | 3B 04 80 41 13 ED 17 | 3B 05 80 41 1B 02 E6 18 | 3B 05 80 41 1B 03 E7 19 | 20 | # MRS (E46) 21 | A4 05 80 41 01 01 60 22 | A4 05 80 41 02 01 63 23 | 24 | # Radio (E46 CD53) 25 | 68 05 80 41 01 01 AC 26 | 27 | ## Properties 28 | 29 | Fixed length*. Two byte bitfield. 30 | 31 | Property|Index|Length|Type 32 | :-------|:----|:-----|:--- 33 | **Property [ID]**|`0`|`1`|Bitfield 34 | **Control**|`1`|`1`|Bitfield 35 | 36 | *\* with one exception discussed in [Use Cases](#use-cases).* 37 | 38 | ### Property ID 39 | 40 | TIME = 0x01 41 | DATE = 0x02 42 | TEMPERATURE = 0x03 43 | CONSUMP_1 = 0x04 44 | CONSUMP_2 = 0x05 45 | RANGE = 0x06 46 | DISTANCE = 0x07 47 | ARRIVAL = 0x08 48 | LIMIT = 0x09 49 | AVG_SPEED = 0x0a 50 | MEMO = 0x0c 51 | CODE = 0x0d 52 | TIMER = 0x0e 53 | AUX_TIMER_1 = 0x0f 54 | AUX_TIMER_2 = 0x10 55 | AUX_HEAT_OFF = 0x11 56 | AUX_HEAT_ON = 0x12 57 | AUX_VENT_OFF = 0x13 58 | AUX_VENT_ON = 0x14 59 | TIMER_LAP = 0x1a 60 | AUX_STATUS = 0x1b 61 | 62 | ### Control 63 | 64 | REQUEST_TEXT = 0b0000_0001 # 0x01 65 | REQUEST_STATUS = 0b0000_0010 # 0x02 66 | ACTIVATE = 0b0000_0100 # 0x04 67 | DEACTIVATE = 0b0000_1000 # 0x08 68 | RECALCULATE = 0b0001_0000 # 0x10 69 | SET_AS_CURRENT_SPEED = 0b0010_0000 # 0x20 70 | 71 | #### Request Text `0b0000_0001` 72 | 73 | A request for a given property to be populated. The cluster will reply with [`0x24`](../ike/24.md). 74 | 75 | This is used by GT at ignition to initilise various properties, or if the GT cache has expired, requiring a property be updated. 76 | 77 | 3B 05 80 41 01 01 FF # Time: Request Text 78 | 3B 05 80 41 02 01 FC # Date: Request Text 79 | 80 | 3B 05 80 41 03 01 FD # Temp.: Request Text 81 | 3B 05 80 41 04 01 FA # Consump. 1: Request Text 82 | 3B 05 80 41 05 01 FB # Consump. 2: Request Text 83 | 3B 05 80 41 06 01 F8 # Range: Request Text 84 | 3B 05 80 41 07 01 F9 # Distance: Request Text 85 | 3B 05 80 41 09 01 F7 # Limit: Request Text 86 | 3B 05 80 41 0A 01 F4 # Avg. Speed: Request Text 87 | 3B 05 80 41 0E 01 F0 # Timer: Request Text 88 | 3B 05 80 41 1A 01 E4 # Timer (Lap): Request Text 89 | 90 | 3B 05 80 41 0F 01 F1 # Aux. Timer 1: Request Text 91 | 3B 05 80 41 10 01 EE # Aux. Timer 2: Request Text 92 | 93 | #### Request Status `0b0000_0010` 94 | 95 | A request for the status of a given property. The cluster will reply with [`0x2a`](../ike/2a.md). 96 | 97 | Note: *Aux. Status* `0x1b` represents both aux. heat, and ventilation. 98 | 99 | 3B 05 80 41 0C 02 F1 # Memo: Request Status 100 | 101 | 3B 05 80 41 09 02 F4 # Limit: Request Status 102 | 3B 05 80 41 0E 02 F3 # Timer: Request Status 103 | 104 | 3B 05 80 41 0F 02 F2 # Aux. Timer 1: Request Status 105 | 3B 05 80 41 10 02 ED # Aux. Timer 2: Request Status 106 | 3B 05 80 41 1B 02 E6 # Aux. Status: Request Status 107 | 108 | 3B 05 80 41 0D 02 F0 # Code: Request Status 109 | 110 | #### Activate `0b0000_0100` 111 | 112 | The nuances of verbiage aside, basically "activate" the given property. 113 | 114 | Note: direct operation of aux. heating, or ventilation is not controlled in this manner. See [Use Cases](#use-cases). 115 | 116 | 3B 05 80 41 0C 04 F7 # Memo: On 117 | 118 | 3B 05 80 41 09 04 F2 # Speed Limit: On 119 | 3B 05 80 41 0E 04 F5 # Timer: Start 120 | 121 | 3B 05 80 41 0F 04 F4 # Aux. Timer 1: On 122 | 3B 05 80 41 10 04 EB # Aux. Timer 2: On 123 | 124 | #### Deactivate `0b0000_1000` 125 | 126 | This (surprisingly!) is the inverse of *Activate*. 127 | 128 | 3B 05 80 41 0C 08 FB # Memo: Off 129 | 130 | 3B 05 80 41 09 08 FE # Speed Limit: Off 131 | 3B 05 80 41 0E 08 F9 # Timer: Stop 132 | 133 | 3B 05 80 41 0F 08 F8 # Aux. Timer 1: Off 134 | 3B 05 80 41 10 08 E7 # Aux. Timer 2: Off 135 | 136 | #### Recalculate `0b0001_0000` 137 | 138 | Recalculate the given property. 139 | 140 | 3B 05 80 41 04 10 EB # Consump. 1: Recalculate 141 | 3B 05 80 41 05 10 EA # Consump. 2: Recalculate 142 | 3B 05 80 41 0A 10 E5 # Avg. Speed: Recalculate 143 | 144 | #### Set As Current Speed `0b0010_0000` 145 | 146 | This seems to have a single use, thus the specificity. 147 | 148 | 3B 05 80 41 09 20 D6 # Speed Limit: Set As Current Speed 149 | 150 | ## Use Cases 151 | 152 | ### Independent Ventilation and Heating 153 | 154 | ![Aux. Direct Operation](../ike/obc/aux_direct.jpg) 155 | 156 | Direct operation of aux. heating, and ventilation deviates from standard usage. 157 | 158 | There is a dedicated property ID to *activate*, and *deactivate*. 159 | 160 | # Dedicated property IDs 161 | AUX_HEAT_OFF = 0x11 162 | AUX_HEAT_ON = 0x12 163 | AUX_VENT_OFF = 0x13 164 | AUX_VENT_ON = 0x14 165 | 166 | This negates the second bitfield which is omitted, thus reducing the message length by 1 byte. 167 | 168 | ### Aux. Heating: Direct Mode 169 | 170 | ![Aux. Direct Operation](obc/aux_direct_heat.jpg) 171 | 172 | 3B 04 80 41 11 EF # Aux. Heat Direct Mode: Off 173 | 3B 04 80 41 12 EC # Aux. Heat Direct Mode: On 174 | 175 | ### Aux. Vent: Direct Mode 176 | 177 | ![Aux. Direct Operation](obc/aux_direct_vent.jpg) 178 | 179 | 3B 04 80 41 13 ED # Aux. Vent. Direct Mode: Off 180 | 3B 04 80 41 14 EA # Aux. Vent. Direct Mode: On 181 | 182 | -------------------------------------------------------------------------------- /gt/45.md: -------------------------------------------------------------------------------- 1 | # `0x45` Set Radio UI 2 | 3 | GT `0x3b` → Radio `0x68` 4 | 5 | `0x45` is, for the best part, to manage *when* the radio is in the foreground, and to a lesser extent, *how* it behaves in the foreground. 6 | 7 | It's ostensibly the GT equivalent of `0x20`. 8 | 9 | ### Related 10 | 11 | - `0x46` [Request Radio UI](../radio/46.md) 12 | 13 | ### Examples 14 | 15 | # C23 BM 16 | 3B 04 68 45 00 12 17 | 3B 04 68 45 02 10 18 | 3B 04 68 45 03 11 19 | 20 | # BM53 21 | 3B 04 68 45 0A 18 22 | 3B 04 68 45 0E 1C 23 | 24 | ## Parameters 25 | 26 | Single byte bitfield. 27 | 28 | PRIORITY = 0b0000_0001 29 | AUDIO_OBC = 0b0000_0010 30 | 31 | # Only applicable to MK3 (3-1/40+), MK4 32 | NEW_UI = 0b0001_0000 33 | NEW_UI_HIDE = 0b1000_0000 34 | 35 | ### Priority `0b0000_0001` 36 | 37 | PRIORITY_RAD = 0 38 | PRIORITY_GT = 1 39 | 40 | When set to `1`, the radio will still draw to display on user input i.e. changing radio station, but will relinquish the display after approx. 8 seconds. 41 | 42 | When set to `0`, the radio will remain in the foreground. 43 | 44 | ### Audio+OBC `0b0000_0010` 45 | 46 | AUDIO_OBC_OFF = 0 47 | AUDIO_OBC_ON = 1 48 | 49 | When set to `1`, the radio will relinquish the lower portion of the display that is otherwise allocated to menus. 50 | 51 | The feature was removed with the introduction of the NG radios/updated UI. 52 | 53 | *The functional equivalence of the 8-bit bitfield between `0x45` and `0x46` suggests this bit might be better described as "only show header"* 54 | 55 | ### New UI `0b0001_0000` 56 | 57 | *MK3 `3-1/40+` and MK4 only!* 58 | 59 | Flag to signify the new UI that was introduced in ~2001 (`3-1/40+`). 60 | 61 | I'm unaware of what effect this flag has. Allowing the radio to differentiate between the UI versions might suggest some degree of backwards compatibility- possibly related to the video module GT. 62 | 63 | ### New UI (On Hide) `0b1000_0000` 64 | 65 | *MK3 `3-1/40+` and MK4 only!* 66 | 67 | This flag is set whenever `BACKGROUND` is set to `1`, i.e. when MENU is pressed. 68 | 69 | Like above, I'm not sure what effect this has. 70 | 71 | ## Use Cases 72 | 73 | ### Main Menu 74 | 75 | A *MENU* button press does not get sent to radio, but is broadcast, and instead handled by the GT `0x3b`, which will in turn, message the Radio `0x68`, requesting it relegate itself to the background. 76 | 77 | F0 04 FF 48 34 77 # MENU button press 78 | 3B 04 68 45 91 83 # GT (4-1/00) requesting radio relinquish foreground 79 | 68 04 3B 46 01 10 # Radio relinquishing foreground 80 | 81 | ### Resume at KL-R 82 | 83 | The GT requesting the radio draw the radio UI at KL-R if the radio was on at ignition off 84 | 85 | 3B 04 68 45 00 12 # Request radio to foreground 86 | 87 | For legacy GT, you may also see this with the Audio+OBC flag set (as per below). 88 | 89 | 3B 04 68 45 02 10 # Request radio to foreground (Audio+OBC enabled) 90 | 91 | If the radio was not on at ignition off, and thus not on at KL-R, the radio will tell the GT that it is not writing to the display. 92 | 93 | 68 04 3B 46 01 10 94 | 95 | ### Audio OBC 96 | 97 | The Audio and Onboard Computer (OBC) display "Audio+OBC" is a feature of the original UI, and allowed OBC data to be displayed alongside radio information. 98 | 99 | ![Audio+OBC](../radio/audio_obc/vm_gt/audio_obc_enabled.JPG) 100 | _Audio+OBC: The Video Module GT, and BM53 with the Audio+OBC feature enabled._ 101 | 102 | The feature is largely the responsibility of the radio, with the GT simply flagging whether the feature is turned on. 103 | 104 | Ostensibly, if enabled, the radio just doesn't display menus during playback, thus not overwriting the lower portion of the display, which allows the OBC to remain in the foreground. 105 | 106 | #### Regional Equipment and Audio OBC 107 | 108 | The value of this feature mightn't be inherently obvious in some regions. 109 | 110 | Radios such as the C23 BM, and BM53 do not use menus, e.g. radio presets, CDC discs, thus this area of the display is essentially always blank in the absence of the OBC. 111 | 112 | ![Audio+OBC](audio_obc/menu_C23BM.jpg) 113 | _Video GT with C23 BM which does not use menus by default._ -------------------------------------------------------------------------------- /gt/audio_obc/C24_BM_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/audio_obc/C24_BM_0.png -------------------------------------------------------------------------------- /gt/audio_obc/C24_BM_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/audio_obc/C24_BM_1.png -------------------------------------------------------------------------------- /gt/audio_obc/menu_C23BM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/audio_obc/menu_C23BM.jpg -------------------------------------------------------------------------------- /gt/obc/aux_direct_heat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/obc/aux_direct_heat.jpg -------------------------------------------------------------------------------- /gt/obc/aux_direct_vent.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/obc/aux_direct_vent.jpg -------------------------------------------------------------------------------- /gt/obc/aux_timer_1159pm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/obc/aux_timer_1159pm.jpg -------------------------------------------------------------------------------- /gt/obc/aux_timer_2359.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/obc/aux_timer_2359.jpg -------------------------------------------------------------------------------- /gt/obc/code_9999.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/obc/code_9999.jpg -------------------------------------------------------------------------------- /gt/obc/date_2092.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/obc/date_2092.jpg -------------------------------------------------------------------------------- /gt/obc/date_311220.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/obc/date_311220.jpg -------------------------------------------------------------------------------- /gt/obc/distance_9999.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/obc/distance_9999.jpg -------------------------------------------------------------------------------- /gt/obc/limit_299.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/obc/limit_299.jpg -------------------------------------------------------------------------------- /gt/obc/time_12h_1159pm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/obc/time_12h_1159pm.jpg -------------------------------------------------------------------------------- /gt/obc/time_24h_2359.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/obc/time_24h_2359.jpg -------------------------------------------------------------------------------- /gt/service_mode/00_service_mode.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/service_mode/00_service_mode.jpg -------------------------------------------------------------------------------- /gt/service_mode/01_service_mode_obc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/service_mode/01_service_mode_obc.jpg -------------------------------------------------------------------------------- /gt/service_mode/10_service_mode_version.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/service_mode/10_service_mode_version.jpg -------------------------------------------------------------------------------- /gt/service_mode/20_service_mode_key.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/service_mode/20_service_mode_key.jpg -------------------------------------------------------------------------------- /gt/service_mode/30_service_mode_brightness.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/service_mode/30_service_mode_brightness.jpg -------------------------------------------------------------------------------- /gt/service_mode/50_set_brightness.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/gt/service_mode/50_set_brightness.jpg -------------------------------------------------------------------------------- /guide.md: -------------------------------------------------------------------------------- 1 | # `0xID` Command Name 2 | 3 | ### Senders/Receivers 4 | 5 | List of possible recipients. 6 | 7 | A given command mightn't be limited to a single sender, or receiver. 8 | 9 | #### Example: `0x23` [Title Text: Radio](radio/23.md). 10 | 11 | > Radio `0x68` → GT `0x3b` 12 | > Radio `0x68` → IKE `0x80` 13 | > Radio `0x68` → Broadcast `0xff` 14 | 15 | ### Overview 16 | 17 | General overview of the command, and it's purpose. Detailed usage can be discussed in *Use Cases*. 18 | 19 | #### Example: `0x37` [Radio Tone/Select](radio/37.md). 20 | 21 | > This command allows the radio to load the appropriate **Tone** (EQ) and **Select** (playback options) menus. 22 | > 23 | > The Tone and Select functionality as introduced with the C23/C24 was almost unusable owing to the counterintuitive UX. Thankfully, the NG radios, and the accompanying UI update (`3-1/40+`) implemented a number of changes to make the functionality somewhat suitable for humans. 24 | 25 | ### Related Commands 26 | 27 | Any given command usually relates to a specific feature set, for which there's usually a number of applicable commands. 28 | 29 | #### Example: `0x21` [Menu Text: Telephone](telephone/21.md). 30 | 31 | > - `0x21` Menu Text: Radio 32 | > - `0x21` Menu Text: Cluster 33 | > - `0x23` [Title Text: Telephone](radio/23.md) 34 | > - `0x24` [Property Text: Telephone](telephone/24.md) 35 | > - `0x31` Menu Button: Telephone 36 | > - `0xa5` [Body Text: Telephone](telephone/a5.md) 37 | 38 | ### Example Frames 39 | 40 | A representative sample of frames. 41 | 42 | #### Example: `0x7a` [Door/Lid Status](gm/7a.md) 43 | 44 | 00 05 BF 7A 51 1F 8E 45 | 00 05 BF 7A 30 1F EF 46 | 00 05 BF 7A 54 30 A4 47 | [...] 48 | 49 | #### Example: `0x13` [Sensors](ike/13.md) 50 | 51 | Be aware that some commands did evolve over the lifetime of the bus system. If so, try to denote how they're distinguished 52 | 53 | Here the command varies with cluster type: 54 | 55 | # High Cluster (IKE) 56 | 80 06 BF 13 03 00 00 29 57 | 80 06 BF 13 03 B0 00 99 58 | [...] 59 | 60 | # High Cluster (IKI) 61 | 80 0A BF 13 00 00 00 00 00 00 47 61 62 | 80 0A BF 13 02 B0 00 00 00 00 47 D3 63 | [...] 64 | 65 | #### Example: Data Leak! 66 | 67 | Make sure you don't unwittingly publish personal data! 68 | 69 | Good examples of this risk are: 70 | 71 | - Your location via `0xa2` [Telematics: Coordinates](nav/a2.md) 72 | - Your telephone contacts via `0x23` [Title Text: Telephone](telephone/23.md) 73 | 74 | ## Parameters 75 | 76 | The formatting of the parameters section is quite inconsistent. It's evolved as the documentation has grown. 77 | 78 | As a rule of thumb, the formatting depends on the number of parameters, and the number of data types. *The more parameters/data types, the more detailed the format.* 79 | 80 | This general rule is demonstrated in the following examples: 81 | 82 | - `0xa2` [Telematics: Coordinates](nav/a2.md) has a large number of parameters and numerous types, so it's broken down in detail. 83 | - `0x21` [Menu Text: Telephone](telephone/21.md) has a medium number of parameters/types, so it's not broken down to the same degree as `0xa2`. 84 | - `0x7a` [Door/Lid Status](gm/7a.md) has a small number of parameters of only the bitfield type. As the bitfield is comprised of multiple, smaller combination bitfields, each combination bitfield broken down in detail. 85 | - `0x5b` [Cluster Indicators](lcm/5b.md), like `0x7a`, has a small number of parameters, but has *effectively* no combination bitfields, i.e. 1 bit = 1 distinct thing. 86 | 87 | ## Use Cases 88 | 89 | This section is a newer addition to the documentation format. It arose from needing to decouple the **what** (a feature) from the **how** (a parameter). 90 | 91 | *Use Cases* provide a natural fit for worked examples of the command. 92 | 93 | Good examples of *Use Cases* are: 94 | 95 | - `0x36` [Radio EQ](radio/36.md): _Set EQ Treble_ 96 | - `0x40` [OBC Input](gt/40.md): _Setting Time_ 97 | - `0x42` [OBC Remote Control](ike/42.md): _Edit Configuration_ -------------------------------------------------------------------------------- /ike/10.md: -------------------------------------------------------------------------------- 1 | # `0x10` Ignition Request 2 | 3 | Request the ignition status from the cluster. 4 | 5 | ### Related 6 | 7 | - `0x11` [Ignition](11.md) 8 | 9 | ### Examples 10 | 11 | 18 03 80 10 8B # CDC 12 | 30 03 80 10 A3 # CCM 13 | 3B 03 80 10 A8 # GT 14 | AC 03 80 10 3F # EHC 15 | ED 03 80 10 7E # TV 16 | F0 03 80 10 63 # BMBT 17 | 18 | ## Parameters 19 | 20 | None! -------------------------------------------------------------------------------- /ike/11.md: -------------------------------------------------------------------------------- 1 | # `0x11` Ignition 2 | 3 | Cluster `0x80` → Broadcast `0xbf` 4 | 5 | The cluster will broadcast the ignition status: 6 | 7 | - when the ignition switch position changes 8 | - periodically while at KL-R (position 1) or greater 9 | - periodically at KL-30 (position 0) while bus remains active 10 | - in response to a module announcement `0x02` 11 | - in reply to a ignition request `0x10` 12 | 13 | A number of modules will not activate unless the required ignition status is broadcast by the cluster. For example, while the navigation computer has a KL-R supply circuit, it will not wake until the cluster broadcasts a KL-R ignition status. 14 | 15 | ##### Check your fuses! 16 | 17 | It's not the ignition switch position itself that drives the ignition status, but the associated supply circuit to the cluster that the switch closes. Thus, if the applicable supply is not closed due to a blown fuse, the cluster will not broadcast the applicable igntition status. 18 | 19 | ### Related 20 | 21 | - `0x10` [Ignition Request](10.md) 22 | 23 | ### Examples 24 | 25 | 80 04 BF 11 00 2A # KL-30 26 | 80 04 BF 11 01 2B # KL-R 27 | 80 04 BF 11 03 29 # KL-15 28 | 80 04 BF 11 07 2D # KL-50 29 | 30 | ## Parameters 31 | 32 | 1-byte bit field. Fixed length. 33 | 34 | IGNITION = 0b0000_0111 35 | 36 | ### Ignition `0b0000_0111` 37 | 38 | IGNITION_KL_30 = 0b0000_0000 # Key Position 0 39 | IGNITION_KL_R = 0b0000_0001 # Key Position 1 40 | IGNITION_KL_15 = 0b0000_0011 # Key Position 2 41 | IGNITION_KL_50 = 0b0000_0111 # Key Position 3 -------------------------------------------------------------------------------- /ike/12.md: -------------------------------------------------------------------------------- 1 | # `0x12` Sensors Request 2 | 3 | Request sensor status `0x13` from cluster. 4 | 5 | ### Related 6 | 7 | `0x13` [Sensors](13.md) 8 | 9 | ### Examples 10 | 11 | 30 03 80 12 A1 # CCM 12 | 5B 03 80 12 CA # IHKA 13 | 60 03 80 12 F1 # PDC 14 | AC 03 80 12 3D # EHC 15 | ED 03 80 12 7C # TV 16 | 17 | ## Parameters 18 | 19 | None! 20 | 21 | ## Use Cases 22 | 23 | ### Check Control 24 | 25 | ...? 26 | 27 | ### EHC 28 | 29 | ...? 30 | 31 | ### IHKA 32 | 33 | - Request aux. heating/ventilation activation status. 34 | 35 | ### PDC 36 | 37 | - Request gear if PDC coded to activate on reverse. 38 | 39 | ### TV 40 | 41 | - Request ignition status (disable while in motion?) 42 | - Request handbrake status (enable when handbrake?) -------------------------------------------------------------------------------- /ike/13.md: -------------------------------------------------------------------------------- 1 | # `0x13` Sensors 2 | 3 | Cluster `0x80` → Broadcast `0xbf` 4 | 5 | This command changed during production. Specifically, four bytes were appended to the bitfield, taking it's size from three bytes to seven bytes. 6 | 7 | The earliest example I've seen of the increased size was an IKI (Oct 01), which might suggest the change occured with introduction of IKI (Sep 97), or with the 1998 production break (PU98), which marked the transition from M52 (MS41), to M52TU (MS42) etc. 8 | 9 | The examples I've seen appear to be backwards compatible. 10 | 11 | ### Related 12 | 13 | `0x12` [Sensors Request](12.md) 14 | 15 | ### Examples 16 | 17 | # High Cluster (IKE) 18 | 80 06 BF 13 03 00 00 29 19 | 80 06 BF 13 03 B0 00 99 20 | 80 06 BF 13 01 71 00 5A 21 | 80 06 BF 13 E0 B1 00 7B 22 | 23 | # High Cluster (IKI) 24 | 80 0A BF 13 00 00 00 00 00 00 47 61 25 | 80 0A BF 13 02 B0 00 00 00 00 47 D3 26 | 80 0A BF 13 03 B0 00 02 00 00 47 D0 27 | 80 0A BF 13 00 B0 00 00 00 00 47 D1 28 | 80 0A BF 13 01 11 00 00 00 00 46 70 29 | 30 | 31 | ## Parameters 32 | 33 | Fixed length. 3 byte bit field. 34 | 35 | # Byte 1 36 | 37 | HANDBRAKE = 0b0000_0001 << 16 38 | OIL_PRESSURE = 0b0000_0010 << 16 39 | BRAKE_PADS = 0b0000_0100 << 16 40 | TRANSMISSION = 0b0001_0000 << 16 41 | 42 | # Byte 2 43 | 44 | IGNITION = 0b0000_0001 << 8 45 | DOOR = 0b0000_0010 << 8 46 | GEAR = 0b1111_0000 << 8 47 | 48 | # Byte 3 49 | 50 | AUX_VENT = 0b0000_1000 51 | AUX_HEAT = 0b0000_0100 52 | 53 | # Byte 7 (IKI only) 54 | 55 | FUEL_LEVEL = 0b1111_1111 56 | 57 | # IKI (E39-KMBI_E38.C12) 58 | # Fuel tank lid open warning? 59 | # Seat belt warning? 60 | 61 | --- 62 | 63 | ### Handbrake `0b0000_0001 << 16` 64 | 65 | Microswitch located on the handbrake mechanism. 66 | 67 | HANDBRAKE_OFF = 0 68 | HANDBRAKE_ON = 1 69 | 70 | ### Oil Pressure `0b0000_0010 << 16` 71 | 72 | This mirrors the cluster's oil pressure warning lamp behaviour. As such, a fault will be indicated at KL-15 until ignition, at which point oil pressure (should) be obtained. 73 | 74 | OIL_PRESSURE_OK = 0 75 | OIL_PRESSURE_FAULT = 1 76 | 77 | ### Brake Pads `0b0000_0100 << 16` 78 | 79 | Brake pad wear sensors. 80 | 81 | In the case of the E39, there are two sensors. Front left brake pad sensor [B16], rear right brake pad sensor [B17]. 82 | 83 | BRAKE_PADS_OK = 0 84 | BRAKE_PADS_FAULT = 1 85 | 86 | ### Transmission `0b0000_0100 << 16` 87 | 88 | *Transmission Emergency Program*. 89 | 90 | TRANSMISSION_OK = 0 91 | TRANSMISSION_FAULT = 1 92 | 93 | --- 94 | 95 | ### Ignition `0b0000_0001 << 8` 96 | 97 | Denotes that the engine is running. 98 | 99 | IGNITION_OFF = 0 100 | IGNITION_ON = 1 # Engine running 101 | 102 | ### Door `0b0000_0010 << 8` 103 | 104 | Replicates the driver's door open field of `0x7a`. 105 | 106 | DOOR_CLOSED = 0 107 | DOOR_OPEN = 1 # Driver's door open 108 | 109 | ### Gear `0b1111_0000 << 8` 110 | 111 | Only at KL-15 and above. Presumably doesn't apply to manual transmissions, but may apply to SMG. 112 | 113 | GEAR_NONE = 0b0000_0000 # KL-30/KL-R 114 | GEAR_PARK = 0b1011_0000 115 | GEAR_REVERSE = 0b0001_0000 116 | GEAR_NEUTRAL = 0b0111_0000 117 | GEAR_DRIVE = 0b1000_0000 118 | GEAR_FIRST = 0b0010_0000 119 | GEAR_SECOND = 0b0110_0000 120 | GEAR_THIRD = 0b1101_0000 121 | GEAR_FOURTH = 0b1100_0000 122 | GEAR_FIFTH = 0b1110_0000 123 | GEAR_SIXTH = 0b1111_0000 # Only a guess! 124 | 125 | --- 126 | 127 | ### Aux. Ventilation `0b0000_1000` 128 | 129 | Activation of aux. ventilation. 130 | 131 | AUX_VENT_OFF = 0 132 | AUX_VENT_ON = 1 133 | 134 | ### Aux. Heating `0b0000_0100` 135 | 136 | Activation of aux. heating. 137 | 138 | AUX_HEAT_OFF = 0 139 | AUX_HEAT_ON = 1 140 | 141 | ## Use Cases 142 | 143 | ### Check Control 144 | 145 | > The check control receives information from the IKE for the following messages. 146 | > 147 | > - Transmission emergency program 148 | > - Release parking brake 149 | > - Check brake pad 150 | > - Stop! Engine oil pressure 151 | 152 | The driver's door warning is activated by the door status reported with `0x7a`. 153 | 154 | ### PDC 155 | 156 | In the case of automatic vehicles, PDC activation is dependent on gear. For example, rear PDC will activate when reverse gear is selected. 157 | 158 | ### Aux. Heating/Ventilation 159 | 160 | The cluster is responsible for control of aux. ventilation and heating. Both modes of activation- timer and direct, are accomplished with this command. 161 | -------------------------------------------------------------------------------- /ike/14.md: -------------------------------------------------------------------------------- 1 | # `0x14` Language & Region Request 2 | 3 | 30 03 80 14 A7 # Check Control Module 4 | 3B 03 80 14 AC # GT 5 | 68 03 80 14 FF # Radio 6 | C8 03 80 14 5F # Telephone -------------------------------------------------------------------------------- /ike/16.md: -------------------------------------------------------------------------------- 1 | # `0x16` Odometer Request 2 | 3 | ### Related Commands 4 | 5 | - `0x17` [Odometer](17.md) 6 | 7 | ### Examples 8 | 9 | 44 03 80 16 D1 # EWS 10 | 11 | ## Parameters 12 | 13 | None. Fixed length. 14 | 15 | ## Use Cases 16 | 17 | ### EWS 18 | 19 | > Requests the odometer for increasing mileage in EWS and inserted key -------------------------------------------------------------------------------- /ike/17.md: -------------------------------------------------------------------------------- 1 | # `0x17` Odometer 2 | 3 | Cluster `0x80` → Broadcast `0xbf` 4 | 5 | The cluster will broadcast the odometer if requested. 6 | 7 | ### Related Commands 8 | 9 | - `0x16` [Odometer Request](16.md) 10 | 11 | ### Example Frame 12 | 13 | 80 0A BF 17 FA 34 0C 00 1F 32 CC 01 14 | 15 | ## Parameters 16 | 17 | Fixed length. 3 data bytes. 18 | 19 | Parameter | Index | Length | Type | Note 20 | :----------|:------|:-------|:--------|:----- 21 | Mileage | `0-2` | `3` | Integer | km 22 | 23 | ### Mileage 24 | 25 | The mileage consists of 3 bytes. It can be calculated into a readable integer using the following formular: 26 | 27 | mileage = (byte3 * 655536) + (byte2 * 256) + byte1 28 | 29 | mileage = (0x0C * 65536) + (0x34 * 256) + 0xFA 30 | 31 | mileage = (12 * 65536) + (52 * 256) + 250 32 | 33 | mileage = 799994 34 | 35 | ## Example 36 | 37 | # Example Odometer Frame 38 | 80 0A BF 17 FA 34 0C 00 1F 32 CC 01 39 | 40 | Property | Mileage 41 | -----------|------------ 42 | **Data** | `FA 34 0C` 43 | **Value** | 799994 km 44 | 45 | ## Use Cases 46 | 47 | ### EWS 48 | 49 | > Increases the mileage in EWS and inserted key -------------------------------------------------------------------------------- /ike/19.md: -------------------------------------------------------------------------------- 1 | # `0x19` Temperature 2 | 3 | Cluster `0x80` → Broadcast `0xbf` 4 | 5 | The cluster will periodically broadcast the ambient, and coolant temperatures while the bus is active. 6 | 7 | Temperature values use the Celsius scale (℃) by default. The scale not affected by `0x15` [Language & Region](15.md). For example, if the user sets temperature to ℉, this command will continue to use ℃. 8 | 9 | ### Related Commands 10 | 11 | - `0x1d` [Temperature Request](1d.md) 12 | 13 | ### Example Frames 14 | 15 | 80 06 BF 19 0F 54 00 7B 16 | 80 06 BF 19 0A E2 00 C8 17 | 80 06 BF 19 17 37 00 00 18 | 19 | ## Parameters 20 | 21 | Fixed length. 3 data bytes. 22 | 23 | Parameter|Index|Length|Type |Note 24 | :--------|:----|:-----|:------|:--- 25 | Ambient |`0` |`1` |Integer (signed)|℃ 26 | Coolant |`1` |`1` |Integer|℃ 27 | NA |`2` |`1` |-- |Default `0x00` 28 | 29 | ### Ambient 30 | 31 | The cluster receives analogue input from a remote temperature sensor mounted to the engine undertray (E39). 32 | 33 | While the cluster does display the temperature to the nearest half degree (i.e. 20.5), this value is a whole number, rounded down (i.e. 20). 34 | 35 | ### Coolant 36 | 37 | The cluster receives analogue input from the remote coolant temperature sensor which is mounted to the engine head (M52). 38 | 39 | ### NA 40 | 41 | I've not seen any logs to suggest this byte has any use. 42 | 43 | ## Example 44 | 45 | # Example Temperature Frame 1 46 | 80 06 BF 19 17 37 00 00 47 | 48 | Property|Ambient|Coolant|NA 49 | --------|-------|-------|---- 50 | **Data**|`17` |`37` |`00` 51 | **Value**|23℃|55℃|-- 52 | 53 | # Example Temperature Frame 2 54 | # The engine had been removed when this frame was captured, phew! 55 | 80 06 BF 19 0A E2 00 C8 56 | 57 | Property|Ambient|Coolant|NA 58 | --------|-------|-------|---- 59 | **Data**|`0A` |`E2` |`00` 60 | **Value**|10℃|226℃|-- 61 | 62 | ## Use Cases 63 | 64 | ### Check Control 65 | 66 | > The check control receives information from the IKE for the following messages. [...] 67 | 68 | > **Coolant temperature** 69 | > *The coolant is overheated. Stop the vehicle and switch off the engine immediately.* 70 | -------------------------------------------------------------------------------- /ike/1d.md: -------------------------------------------------------------------------------- 1 | # `0x1d` Temperature Request 2 | 3 | ### Related Commands 4 | 5 | - `0x19` [Temperature](19.md) 6 | 7 | ### Examples 8 | 9 | 5B 03 80 1D C5 # IHKA 10 | D0 03 80 1D 4E # LCM 11 | 12 | ## Parameters 13 | 14 | None. Fixed length. 15 | 16 | ## Use Cases 17 | 18 | ### LCM 19 | 20 | - Coding: Temperature Limit 21 | - Coding: Engine Overheating -------------------------------------------------------------------------------- /ike/24.md: -------------------------------------------------------------------------------- 1 | # `0x24` OBC Text 2 | 3 | Cluster `0x80` → Displays (Multicast) `0xe7` 4 | 5 | Unlike the radio or telephone which sends display data at the time it's required, the cluster will send display data at regular intervals irrespective of what is being displayed. 6 | 7 | Essentially, radio and telephone displays are "lazily loaded", and the cluster displays are "eager loaded". 8 | 9 | ## Examples 10 | 11 | 80 0A E7 24 03 00 2B 32 34 2E 35 7C 12 | 80 0F E7 24 05 30 36 66 36 24 79 58 67 6C 2D 54 68 13 | 80 0C E7 24 06 00 2D 2D 2D 20 4B 4D 20 62 14 | 80 0D E7 24 09 00 2D 2D 2D 20 4D 50 48 20 3F 15 | 80 0E E7 24 0A 00 20 30 2E 37 20 4B 4D 2F 48 0F 16 | 80 0C E7 24 0F 00 31 30 3A 31 30 20 20 7A 17 | 18 | ## Properties 19 | 20 | The message length will vary depending on the property ID. 21 | 22 | Property|Index|Length|Type 23 | :-------|:----|:-----|:--- 24 | **Property [ID]**|`0`|`1`|Bitfield 25 | **Unknown**|`1`|`1`|_Default `00`_ 26 | **String**|`2`|`-1`|String 27 | 28 | ### Property ID 29 | 30 | ID|Property 31 | :--|------- 32 | `0x01`|Time 33 | `0x02`|Date 34 | `0x03`|Temperature 35 | `0x04`|Consump. 1 36 | `0x05`|Consump. 2 37 | `0x06`|Range 38 | `0x07`|Distance 39 | `0x08`|Arrival 40 | `0x09`|Limit 41 | `0x0a`|Avg. Speed 42 | `0x0e`|Timer 43 | `0x0f`|Aux. Timer 1 44 | `0x10`|Aux. Timer 2 45 | `0x16`|Code: Emergency Deactivation 46 | `0x1a`|Timer: Lap 47 | 48 | ### Unknown 49 | 50 | Seemingly always `0x00`. 51 | 52 | ### String 53 | 54 | - ASCII encoding. 55 | - The length is determined by the property. 56 | - The unit/format of the property will be as per `0x15`, i.e. 24H vs. 12H etc. 57 | - GT will parse some strings (presumably to generate a native object), thus the string format is restricted. 58 | 59 | ## Use Cases 60 | 61 | ### Date & Time 62 | 63 | ![Date & Time](obc/date_time.jpg) 64 | 65 | # Time (0x01) 66 | # Note: GT will parse the string 67 | 80 0C E7 24 01 00 20 33 3A 34 33 50 4D 7D # " 3:43PM" 68 | 69 | # Date (0x02) 70 | 80 0F E7 24 02 00 30 35 2F 32 35 2F 32 30 32 30 4C # "05/25/2020" 71 | 72 | ### On-board Computer (OBC) 73 | 74 | ![OBC](obc/obc.jpg) 75 | 76 | # Temperature (0x03) 77 | 80 0A [3B] 24 03 00 2B 31 32 2E 33 [A3] # "+12.3" 78 | 79 | # Consump. 1 (0x04) 80 | 80 0F [3B] 24 04 00 31 32 2E 33 20 4C 2F 31 30 30 F8 # "12.3 L/100" 81 | 82 | # Consump. 2 (0x05) 83 | 80 0F [3B] 24 05 00 34 35 2E 36 20 4C 2F 31 30 30 FE # "45.6 L/100" 84 | 85 | # Range (0x06) 86 | 80 0C 3B 24 06 00 31 32 33 20 4B 4D 20 A3 # "123 KM " 87 | 88 | # Distance (0x07) 89 | 80 0D 3B 24 07 00 31 32 33 34 20 4B 4D 20 97 # "1234 KM " 90 | 91 | # Arrival (0x08) 92 | 80 0C 3B 24 08 00 31 32 3A 33 34 50 4D B8 # "12:34PM" 93 | 94 | # Limit (0x09) 95 | 80 0D E7 24 09 00 31 32 33 20 4B 4D 2F 48 36 # "123 KM/H" 96 | 97 | # Avg. Speed (0x0a) 98 | 80 0E [3B] 24 0A 00 31 32 2E 33 20 4B 4D 2F 48 C4 # "12.3 KM/H" 99 | 100 | #### OBC: Timer 101 | 102 | ![OBC: Timer](obc/obc_timer.jpg) 103 | 104 | # Timer (0x0e) 105 | 80 0F 3B 24 0E 00 34 35 2E 36 20 20 53 45 43 20 F2 # "45.6 SEC " 106 | 107 | # Timer: Lap (0x1a) 108 | 80 0F 3B 24 1A 00 31 32 2E 33 20 20 53 45 43 20 E1 # "12.3 SEC " 109 | 110 | After one minute has elapsed, the format will change to `"1:00 MIN"`. 111 | 112 | ### Independent Ventilation and Heating 113 | 114 | ![Aux Timers](obc/auxiliary.jpg) 115 | 116 | # Aux. Timer 1 (0x0f) 117 | 80 0C E7 24 0F 00 20 31 3A 32 33 41 4D 66 # " 1:23AM" 118 | 119 | # Aux. Timer 2 (0x10) 120 | 80 0C E7 24 10 00 20 34 3A 35 36 50 4D 6F # " 4:56PM" 121 | 122 | ### Code 123 | 124 | ![Code: Emergency Deactivation](obc/code_deactivation.jpg) 125 | 126 | # Code: Emergency Deactivation 127 | 80 0A E7 24 16 00 30 39 3A 35 32 6B # "09:52" 128 | -------------------------------------------------------------------------------- /ike/2a.md: -------------------------------------------------------------------------------- 1 | # `0x2a` OBC Status 2 | 3 | Cluster `0x80` → Displays `0xe7`. 4 | 5 | This command reports the status of various functions controlled by the cluster, predominately for the purposes of controlling visual indicators (icons, LEDs etc). 6 | 7 | ## Examples 8 | 9 | 80 05 E7 2A 00 00 48 10 | 80 05 E7 2A 00 08 40 11 | 80 05 E7 2A 02 00 4A 12 | 80 05 E7 2A 08 00 40 13 | 80 05 E7 2A 20 00 68 14 | 15 | ## Properties 16 | 17 | Fixed length. Two byte bitfield. 18 | 19 | # Byte 1 20 | MEMO = 0b0010_0000 << 8 # 0x20 21 | TIMER = 0b0000_1000 << 8 # 0x08 22 | LIMIT = 0b0000_0010 << 8 # 0x02 23 | 24 | # Byte 2 25 | CODE = 0b0100_0000 << 0 # 0x40 26 | AUX_HEATING = 0b0010_0000 << 0 # 0x20 27 | AUX_TIMER_2 = 0b0001_0000 << 0 # 0x10 28 | AUX_VENTILATION = 0b0000_1000 << 0 # 0x08 29 | AUX_TIMER_1 = 0b0000_0100 << 0 # 0x04 30 | 31 | ## Use Cases 32 | 33 | ### Settings 34 | 35 | #### Memo `0b0010_0000 << 8` 36 | 37 | ![Memo: On](obc/memo.jpg) 38 | 39 | MEMO_ON = 1 40 | MEMO_OFF = 0 41 | 42 | 80 05 E7 2A 20 00 68 # Memo: On 43 | 44 | When memo is on `1`, an icon will be displayed in the navigation status bar as pictured above. The *Memo* option in Set[tings] will be set to *on*. 45 | 46 | --- 47 | 48 | ### On-board Computer (OBC) 49 | 50 | #### Timer `0b0000_1000 << 8` 51 | 52 | TIMER_RUNNING = 1 53 | TIMER_STOPPED = 0 54 | 55 | 80 05 E7 2A 08 00 40 # Timer: On 56 | 57 | #### Limit `0b0000_0010 << 8` 58 | 59 | ![OBC Limit: Enabled](obc/obc_limit.jpg) 60 | 61 | LIMIT_ENABLED = 1 62 | LIMIT_DISABLED = 0 63 | 64 | 80 05 E7 2A 02 00 4A # Limit: On 65 | 66 | --- 67 | 68 | ### Independent Ventilation and Heating 69 | 70 | ![Aux Timers, and Direct Operation](obc/aux_direct.jpg) 71 | 72 | In addition to the UI, an indicator lamp on BMBT is activated, as discussed in the owner's manual. 73 | 74 | > ![Aux. Indicator Lamp](obc/aux_indicator.jpg) 75 | 76 | #### Aux. Timer 1 `0b0000_0100 << 0` 77 | 78 | AUX_TIMER_1_ON = 1 79 | AUX_TIMER_1_OFF = 0 80 | 81 | 80 05 E7 2A 00 04 4C # Aux. Timer 1: Enabled 82 | 83 | #### Aux. Timer 2 `0b0001_0000 << 0` 84 | 85 | AUX_TIMER_2_ON = 1 86 | AUX_TIMER_2_OFF = 0 87 | 88 | 80 05 E7 2A 00 10 58 # Aux. Timer 2: Enabled 89 | 90 | #### Aux. Heating `0b0010_0000 << 0` 91 | 92 | AUX_HEATING_ON = 1 93 | AUX_HEATING_OFF = 0 94 | 95 | 80 05 E7 2A 00 20 68 # Aux. Heating: On 96 | 97 | #### Aux. Ventilation `0b0000_1000 << 0` 98 | 99 | AUX_VENTILATION_ON = 1 100 | AUX_VENTILATION_OFF = 0 101 | 102 | 80 05 E7 2A 00 08 40 # Aux. Ventilation: On 103 | 104 | --- 105 | 106 | ### Code `0b0100_0000 << 0` 107 | 108 | ![Code: Enabled](obc/code.jpg) 109 | 110 | CODE_LOCKED = 1 111 | CODE_UNLOCKED = 0 112 | 113 | 80 05 E7 2A 00 40 08 # Code: Locked 114 | 115 | This is the crux of the code function. When enabled `1`, the nav. is effectively "locked" with only the option to input a code. 116 | 117 | When the correct code is entered, this is disabled `0`, thus "unlocking" the nav. 118 | -------------------------------------------------------------------------------- /ike/42.md: -------------------------------------------------------------------------------- 1 | # `0x42` OBC Remote Control 2 | 3 | Cluster `0x80` → GT `0x3b` 4 | GT `0x3b` → Cluster `0x80` 5 | 6 | This command is used to configure which of the 12 available functions are recalled on the high (IKE) cluster character display. 7 | 8 | No.|Function|Display 9 | :--|--------|------- 10 | 1.|Clock|`"TIME 2:40PM"` 11 | 2.|Date|`"DATE 12/02/2020"` 12 | 3.|Consump. 1|`"CONS1 10.1 L/100"` 13 | 4.|Consump. 2|`"CONS2 13.2 L/100"` 14 | 5.|Range|`"RANGE 22 KM"` 15 | 6.|Distance|`"DIST 17 KM"` 16 | 7.|Arrival|`"ARRIVAL 3:22PM"` 17 | 8.|Limit|`"LIMIT 60 KM/H"` 18 | 9.|Avg. Speed|`"SPEED 59.9 KM/H"` 19 | 10.|Timer (Stopwatch)|`"STOPW 2:02 MIN"` 20 | 11.|Auxiliary Timer 1|`"*TIMER1 11:03 PM"` 21 | 12.|Auxiliary Timer 2|`" TIMER2 2:54 AM"` 22 | 23 | It has two use cases which work in sequence: 24 | 25 | 1. edit the configuration via the GT/BMBT (Cluster `0x80` → GT `0x3b`) 26 | 2. memorise the configuration to the IKE (GT `0x3b` → Cluster `0x80`) 27 | 28 | ### Examples 29 | 30 | 80 0F 3B 42 06 02 01 09 07 0F 0E 05 04 0A 08 10 EF 31 | 80 0F 3B 42 10 0F 0E FF FF FF FF FF FF FF FF FF 18 32 | 3B 0F 80 42 09 04 07 0F 01 0E 06 02 10 08 0A 05 EF 33 | 3B 0F 80 42 01 02 FF FF FF FF FF FF FF FF FF FF F5 34 | 35 | ### Related 36 | 37 | - `0x24` [OBC Text](24.md) 38 | - `0x40` [OBC Input](../gt/40.md) 39 | - `0x41` [OBC Control](../gt/41.md) 40 | 41 | ## Parameters 42 | 43 | The message length is fixed, irrespective of the number of enabled functions. Any redundant trailing bytes have a known void value of `0xff`. 44 | 45 | Parameter|Index|Length|Type 46 | :---|:---|:---|:--- 47 | **Function 1**|`0`|`1`|Bitfield 48 | **Function 2**|`1`|`1`|Bitfield 49 | **Function 3**|`2`|`1`|Bitfield 50 | **Function 4**|`3`|`1`|Bitfield 51 | **Function 5**|`4`|`1`|Bitfield 52 | **Function 6**|`5`|`1`|Bitfield 53 | **Function 7**|`6`|`1`|Bitfield 54 | **Function 8**|`7`|`1`|Bitfield 55 | **Function 9**|`8`|`1`|Bitfield 56 | **Function 10**|`9`|`1`|Bitfield 57 | **Function 11**|`10`|`1`|Bitfield 58 | **Function 12**|`11`|`1`|Bitfield 59 | 60 | 78 | 79 | ### Function 1 - 12 80 | 81 | 1 byte. Combination Bitfield. 82 | 83 | # Function bitmasks 84 | TIME = 0b0000_0001 # 0x01 85 | DATE = 0b0000_0010 # 0x02 86 | CONSUMP_1 = 0b0000_0100 # 0x04 87 | CONSUMP_2 = 0b0000_0101 # 0x05 88 | RANGE = 0b0000_0110 # 0x06 89 | DISTANCE = 0b0000_0111 # 0x07 90 | ARRIVAL = 0b0000_1000 # 0x08 91 | LIMIT = 0b0000_1001 # 0x09 92 | AVG_SPEED = 0b0000_1010 # 0x0a 93 | TIMER = 0b0000_1110 # 0x0e 94 | AUX_TIMER_1 = 0b0000_1111 # 0x0f 95 | AUX_TIMER_2 = 0b0001_0000 # 0x10 96 | 97 | VOID = 0b1111_1111 # 0xff 98 | 99 | ## Use Cases 100 | 101 | ### Edit Configuration 102 | 103 | Cluster `0x80` → GT `0x3b` 104 | 105 | IKE will send the current configuration to GT, which in turn will load the "Remote Control" screen with applicable functions preselected. 106 | 107 | Note: the options *Delete all* and *Memorise* are handled by the GT, so neither will return `0x31` like radio or telephone menus. 108 | 109 | ![Remote Control Programming](prog/prog.jpg) 110 | 111 | #### Example 112 | 113 | # Load "Remote Control" configuration (Distance, Limit) 114 | 80 0F 3B 42 07 09 FF FF FF FF FF FF FF FF FF FF F8 115 | 116 | Parameter|Func.|Func.|F.|F.|F.|F.|F.|F.|F.|F.|F.|F. 117 | ---|---|---|---|---|---|---|---|---|---|---|---|--- 118 | **Data**|`07`|`09`|`FF`|`FF`|`FF`|`FF`|`FF`|`FF`|`FF`|`FF`|`FF`|`FF` 119 | **Function**|`Distance`|`Limit`|`--`|`--`|`--`|`--`|`--`|`--`|`--`|`--`|`--`|`--` 120 | 121 | ### Memorise Configuration 122 | 123 | GT `0x3b` → Cluster `0x80` 124 | 125 | GT will send the selected functions to IKE, at which point the configuration is updated. 126 | 127 | The order of the functions will reflect the sequence in which they were selected. This will also be the order in which they are recalled for display. 128 | 129 | #### Example 130 | 131 | # Memorise "Remote Control" selected functions 132 | 3B 0F 80 42 10 02 06 FF FF FF FF FF FF FF FF FF 1D 133 | 134 | Parameter|Func.|Func.|F.|F.|F.|F.|F.|F.|F.|F.|F.|F. 135 | ---|---|---|---|---|---|---|---|---|---|---|---|--- 136 | **Data**|`10`|`02`|`06`|`FF`|`FF`|`FF`|`FF`|`FF`|`FF`|`FF`|`FF`|`FF` 137 | **Function**|`[Aux.] Timer 2`|`Date`|`Range`|`--`|`--`|`--`|`--`|`--`|`--`|`--`|`--`|`--` -------------------------------------------------------------------------------- /ike/53.md: -------------------------------------------------------------------------------- 1 | # `0x53` Redundant Data Request 2 | 3 | > ![INPA > LCM > Coding > SII](redundant/redundant_data_storage.jpg) 4 | 5 | The cluster will request the redundant data from the LCM at ignition (KL-15), as discussed in BMW training documentation: 6 | 7 | > This data is compared each time KL15 is switched on. If the data check reveals a mismatch, the manipulation DOT is illuminated. 8 | 9 | The command has no arguments (that I'm aware of), so the frame should always be: 10 | 11 | 80 03 D0 53 00 # Redundant Data Request 0x53 -------------------------------------------------------------------------------- /ike/54.md: -------------------------------------------------------------------------------- 1 | # `0x54` Redundant Data 2 | 3 | The LCM will send this command in response to a *Redundant Data Request `0x53`* from the cluster. 4 | 5 | Reviewing the LCM coding via INPA provides a good overview of the stored data, and it's structure: 6 | 7 | > ![INPA > LCM > Coding > SII](redundant/lcm_coding.jpg) 8 | 9 | ### Properties 10 | 11 | Property|Index|Length|Note 12 | :---|:---|:---|:--- 13 | **VIN**|`0`|`5`| 14 | **Mileage**|`5`|`2`| 15 | **TBC**|`7`|`1`|First byte of *"read SII-trip-counter"*. To date always a value of `0x40`; possibly a bit field to represent type of service? 16 | **Fuel**|`8`|`1`|Second byte of *"read SII-trip-counter"*. By reviewing IKE coding in INPA, it's evident this is the consumed fuel quantity. 17 | **Oil**|`9`|`2`| No examples of this being used, but based on INPA this is presumably *"last oilservice at".* | 18 | **Time**|`11`|`2`| 19 | 20 | #### Example 21 | 22 | # Frame 23 | D0 10 80 54 41 42 12 34 50 09 86 40 46 00 00 04 03 EF 24 | 25 | Property|VIN|Mileage|TBC|Fuel|Oil|Time 26 | ---|---|---|---|---|---|--- 27 | **Data**|`41 42 12 34 50`|`09 86`|`40`|`46`|`00 00`|`04 03` 28 | 29 | ## VIN 30 | 31 | The VIN follows a standard format of: 32 | 33 | 1. two character prefix, e.g. `"AB"` 34 | 2. five digit suffix, e.g. `"12345"` 35 | 36 | Each character is in ASCII encoding, thus one byte in size. 37 | 38 | The five digits are base 10, and 4 bits in size. Thus each byte represents two digits. The lowest four bits in the last byte are discarded. 39 | 40 | #### Example: `"AB12345"` 41 | 42 | Data|`0x41`|`0x42`|`0x12`|`0x34`|`0x50` 43 | :---|:---|:---|:---|:---|:--- 44 | **VIN**|`"A"`|`"B"`|`"12"`|`"34"`| `"5"` 45 | 46 | #### Example: `"XY98765"` 47 | 48 | Data|`0x58`|`0x59`|`0x98`|`0x76`|`0x50` 49 | :---|:---|:---|:---|:---|:--- 50 | **VIN**|`"X"`|`"Y"`|`"98"`|`"76"`| `"5"` 51 | 52 | ## Mileage Indicator 53 | The mileage figure stored by the LCM is only to the nearest 100km of actual mileage. As discussed in BMW training: 54 | > The LCM mileage data [...] is updated every 60 miles (100 km) 55 | 56 | The mileage is as a 16 bit (2 byte) integer. 57 | 58 | Take care when working with streams to shift the leading byte! i.e. `[0x20, 0x30] => 0x2030`. 59 | 60 | #### Examples 61 | 62 | Byte 1|Byte 2|16 bit integer|Value|Mileage 63 | :---|:---|:---|:---|:--- 64 | `0x09`|`0x86`|`0x0986`|`2430`| *243,800 km* 65 | `0x08`|`0xde`|`0x08de`|`2270`| *227,000 km* 66 | 67 | ## Consumed Fuel Quantity 68 | 69 | To the nearest 10 litres. 70 | 71 | 8 bit (1 byte) integer. 72 | 73 | #### Examples 74 | 75 | Byte|8 bit integer|Value|Fuel 76 | :---|:---|:---|:--- 77 | `0x46`|`0x46`|`70`| *700 litres* 78 | 79 | ## Time Inspection Counter 80 | 81 | Day intervals. 82 | 83 | 16 bit (2 byte) integer. 84 | 85 | #### Examples 86 | 87 | Byte 1|Byte 2|16 bit integer|Value|Time 88 | :---|:---|:---|:---|:--- 89 | `0x05`|`0xee`|`0x05ee`|`1518`| *1,518 days* 90 | -------------------------------------------------------------------------------- /ike/55.md: -------------------------------------------------------------------------------- 1 | # `0x55` Replicate Data 2 | 3 | The cluster will update the LCM when **any** property interval rolls over. 4 | 5 | Examples of *fuel*, and *day* being updated within the same mileage interval. 6 | 7 | # Fuel Update 8 | 80 0B D0 55 09 83 40 40 00 00 02 74 F2 # 243,500km, 640 litres, 628 days 9 | 80 0B D0 55 09 83 40 41 00 00 02 74 F3 # 243,500km, 650 litres, 628 days 10 | 11 | # Day Update 12 | 80 0B D0 55 09 84 40 42 00 00 02 CD 4E # 243,600km, 660 litres, 717 days 13 | 80 0B D0 55 09 84 40 42 00 00 02 CE 4D # 243,600km, 660 litres, 718 days 14 | 15 | ### Properties 16 | 17 | The data sent by the cluster has the same structure as that returned by the LCM. The only difference is the absence of the VIN. 18 | 19 | Property|Index|Length 20 | :---|:---|:--- 21 | **Mileage**|`0`|`2`| 22 | **TBC**|`2`|`1` 23 | **Fuel**|`3`|`1`| 24 | **Oil**|`4`|`2`| 25 | **Time**|`6`|`2`| -------------------------------------------------------------------------------- /ike/57.md: -------------------------------------------------------------------------------- 1 | # `0x57` Cluster Buttons 2 | 3 | Cluster `0x80` → Broadcast `0xff` 4 | 5 | ### Related Commands 6 | 7 | - `0x3b` [MFL Buttons](../mfl/3b.md) 8 | - `0x48` [BMBT Buttons](../bmbt/48.md) 9 | 10 | ### Example Frames 11 | 12 | 80 04 FF 57 01 2D 13 | 80 04 FF 57 41 6D 14 | 80 04 FF 57 02 2E 15 | 16 | ## Parameters 17 | 18 | Fixed length. 1-byte bitfield. 19 | 20 | STATE = 0b0100_0000 21 | BUTTON = 0b0000_0011 22 | 23 | ### State `0b0100_0000` 24 | 25 | Unlike the BMBT or MFL buttons, the cluster buttons do not have a 'hold' event. 26 | 27 | STATE_PRESS = 0 28 | STATE_RELEASE = 1 29 | 30 | ### Button `0b0000_0011` 31 | 32 | BUTTON_CHECK = 0b01 # CHECK button on high clusters 33 | BUTTON_STALK = 0b10 # 'BC' button on stalk 34 | 35 | There's only two buttons based on my testing to date. 36 | 37 | ## Use Cases 38 | 39 | ### Check Control 40 | 41 | This is only applicable to vehicles equipped with the high cluster (IKE/IKI). 42 | 43 | The CHECK button is used to control the check control messages on the high cluster's alphanumeric display. 44 | 45 | The check control messages themselves are generated by another module. The module responsible for the messages will vary by production year, hence why the message is broadcast rather than being addressed to a specific module. 46 | 47 | ![CHECK Button](57/check_button.jpg) 48 | 49 | 80 04 FF 57 01 2D # CHECK button press 50 | 80 04 FF 57 41 6D # CHECK button release 51 | 52 | ### OBC Remote Control 53 | 54 | > [...] you can call up information from the on-board computer using the button in the turn signal lever. 55 | 56 | While the functionality activated by this button will vary depending on cluster type, the behaviour of the button itself remains the same. 57 | 58 | ![BC Button](57/bc_button.jpg) 59 | 60 | 80 04 FF 57 02 2E # BC remote press -------------------------------------------------------------------------------- /ike/57/bc_button.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/57/bc_button.jpg -------------------------------------------------------------------------------- /ike/57/check_button.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/57/check_button.jpg -------------------------------------------------------------------------------- /ike/charset/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/1.png -------------------------------------------------------------------------------- /ike/charset/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/10.png -------------------------------------------------------------------------------- /ike/charset/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/11.png -------------------------------------------------------------------------------- /ike/charset/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/12.png -------------------------------------------------------------------------------- /ike/charset/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/13.png -------------------------------------------------------------------------------- /ike/charset/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/2.png -------------------------------------------------------------------------------- /ike/charset/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/3.png -------------------------------------------------------------------------------- /ike/charset/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/4.png -------------------------------------------------------------------------------- /ike/charset/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/5.png -------------------------------------------------------------------------------- /ike/charset/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/6.png -------------------------------------------------------------------------------- /ike/charset/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/7.png -------------------------------------------------------------------------------- /ike/charset/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/8.png -------------------------------------------------------------------------------- /ike/charset/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/charset/9.png -------------------------------------------------------------------------------- /ike/obc/aux_direct.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/obc/aux_direct.jpg -------------------------------------------------------------------------------- /ike/obc/aux_indicator.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/obc/aux_indicator.jpg -------------------------------------------------------------------------------- /ike/obc/auxiliary.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/obc/auxiliary.jpg -------------------------------------------------------------------------------- /ike/obc/code.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/obc/code.jpg -------------------------------------------------------------------------------- /ike/obc/code_deactivation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/obc/code_deactivation.jpg -------------------------------------------------------------------------------- /ike/obc/date_time.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/obc/date_time.jpg -------------------------------------------------------------------------------- /ike/obc/memo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/obc/memo.jpg -------------------------------------------------------------------------------- /ike/obc/obc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/obc/obc.jpg -------------------------------------------------------------------------------- /ike/obc/obc_limit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/obc/obc_limit.jpg -------------------------------------------------------------------------------- /ike/obc/obc_timer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/obc/obc_timer.jpg -------------------------------------------------------------------------------- /ike/prog/prog.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/prog/prog.jpg -------------------------------------------------------------------------------- /ike/properties.md: -------------------------------------------------------------------------------- 1 | The properties maintained by the cluster have a unique ID that is used by several commands. 2 | 3 | The table below denotes which properties are applicable to which commands. 4 | 5 | ID|Property|`0x24`|`0x2a`|`0x40`|`0x41`|`0x42` 6 | :--|-------|------|------|------|------|------ 7 | `0x01`|Time|✅|❌|✅|✅|✅ 8 | `0x02`|Date|✅|❌|✅|✅|✅ 9 | `0x03`|Temperature|✅|❌|❌|✅|❌ 10 | `0x04`|Consump. 1|✅|❌|❌|✅|✅ 11 | `0x05`|Consump. 2|✅|❌|❌|✅|✅ 12 | `0x06`|Range|✅|❌|❌|✅|✅ 13 | `0x07`|Distance|✅|❌|✅|✅|✅ 14 | `0x08`|Arrival|✅|❌|❌|✅|✅ 15 | `0x09`|Limit|✅|✅|✅|✅|✅ 16 | `0x0a`|Avg. Speed|✅|❌|❌|✅|✅ 17 | `0x0b`|_PROG_|❌|❌|❌|❌|❌ 18 | `0x0c`|Memo|❌|✅|❌|✅|❌ 19 | `0x0d`|Code|✅|✅|✅|✅|❌ 20 | `0x0e`|Timer|✅|✅|❌|✅|✅ 21 | `0x0f`|Aux. Timer 1|✅|✅|✅|✅|✅ 22 | `0x10`|Aux. Timer 2|✅|✅|✅|✅|✅ 23 | `0x11`|Aux. Heat. (Off)|❌|✅|❌|✅|❌ 24 | `0x12`|Aux. Heat. (On)|❌|✅|❌|✅|❌ 25 | `0x13`|Aux. Vent. (Off)|❌|✅|❌|✅|❌ 26 | `0x14`|Aux. Vent. (On)|❌|✅|❌|✅|❌ 27 | `0x16`|Emergency Disarm|✅|❌|❌|❌|❌ 28 | `0x1a`|Timer (Lap)|✅|❌|❌|✅|❌ 29 | `0x1b`|Aux. Status|❌|❌|❌|✅|❌ 30 | 31 | # `0x24` Output String 32 | 33 | Cluster `0x80` → Displays `0xe7` 34 | 35 | ## Properties 36 | 37 | Variable length. 38 | 39 | Property|Index|Length|Note 40 | :---|:---|:---|:--- 41 | **Property**|`0`|`1`|_See table above_ 42 | **Unknown**|`1`|`1`|_Default `00`_ 43 | **String**|`2`|`-1`|_Length is fixed for given property_ 44 | 45 | ### Examples 46 | 47 | 80 0C E7 24 01 00 20 38 3A 33 31 50 4D 73 # Time 48 | 80 0F E7 24 02 00 2D 2D 2F 2D 2D 2F 32 30 32 30 4E # Date 49 | 80 0A E7 24 03 00 2B 32 34 2E 35 7C # Temp. 50 | 80 0F E7 24 04 00 32 30 2E 36 20 4C 2F 31 30 30 20 # Consump. 1 51 | 80 0F E7 24 05 30 36 66 36 24 79 58 67 6C 2D 54 68 # Consump. 2 52 | 80 0C E7 24 06 00 2D 2D 2D 20 4B 4D 20 62 # Range 53 | 80 0D E7 24 07 00 33 34 33 38 20 4B 4D 20 43 # Distance 54 | 80 0C E7 24 08 00 2D 2D 3A 2D 2D 20 20 7D # Arrival 55 | 80 0D E7 24 09 00 2D 2D 2D 20 4D 50 48 20 3F # Limit 56 | 80 0E E7 24 0A 00 20 30 2E 37 20 4B 4D 2F 48 0F # Avg. Speed 57 | 80 09 E7 24 0D 00 00 00 00 00 47 # Code 58 | 80 0F E7 24 0E 00 31 30 3A 31 30 20 4D 49 4E 20 32 # Timer 59 | 80 0C E7 24 0F 00 31 30 3A 31 30 20 20 7A # Aux. Timer 1 60 | 80 0C E7 24 10 00 31 32 3A 30 36 41 4D 6C # Aux. Timer 2 61 | 80 0A E7 24 16 00 30 36 3A 30 30 63 # Emer. Deact. 62 | 80 0F E7 24 1A 00 32 34 2E 38 20 20 53 45 43 20 33 # Timer (Lap) 63 | 64 | # `0x2A` Output Boolean 65 | 66 | Cluster `0x80` → Displays `0xe7` 67 | 68 | ## Properties 69 | 70 | Fixed length. Two byte bitfield. 71 | 72 | # Basically, 1 = ON, 0 = OFF. 73 | 74 | # Byte 1 75 | 76 | MEMO = 0b0010_0000 << 8 77 | TIMER = 0b0000_1000 << 8 78 | LIMIT = 0b0000_0010 << 8 79 | 80 | # Byte 2 81 | 82 | CODE = 0b0100_0000 << 0 83 | AUX_HEATING = 0b0010_0000 << 0 84 | AUX_TIMER_2 = 0b0001_0000 << 0 85 | AUX_VENTILATION = 0b0000_1000 << 0 86 | AUX_TIMER_1 = 0b0000_0100 << 0 87 | 88 | # `0x40` Input String 89 | 90 | GT `0x3b` → Cluster `0x80` 91 | 92 | ## Properties 93 | 94 | Property|Index|Length|Note 95 | :---|:---|:---|:--- 96 | **Property**|`0`|`1`|_See table above_ 97 | **String**|`1`|`-1`|_Fixed length for given property_ 98 | 99 | ### Examples 100 | 101 | 3B 07 80 40 01 8A 2B 2D 71 # Time 102 | 3B 07 80 40 02 19 03 14 F0 # Date 103 | 3B 06 80 40 07 00 00 FA # Distance 104 | 3B 06 80 40 09 00 14 E0 # Sped Limit 105 | 3B 06 80 40 0D 27 0F D8 # Code "9999" 106 | 3B 06 80 40 0F 8B 00 79 # Aux. Timer 1 107 | 3B 06 80 40 10 02 36 D9 # Aux. Timer 2 108 | 109 | 110 | # `0x41` Input Boolean 111 | 112 | GT `0x3b` → Cluster `0x80` 113 | 114 | ## Properties 115 | 116 | Fixed length. Two byte bitfield. 117 | 118 | # Byte 1 119 | 120 | PROPERTY = 0b0001_1111 # See table above 121 | 122 | # Byte 2 123 | 124 | REQUEST_STRING = 0b0000_0001 125 | REQUEST_BOOLEAN = 0b0000_0010 126 | ON_START = 0b0000_0100 127 | OFF_STOP = 0b0000_1000 128 | RECALCULATE = 0b0001_0000 129 | SET_AS_CURRENT_SPEED = 0b0010_0000 130 | 131 | ## Request String `0b0000_0001` 132 | A request for a given property to be writen to the display. The cluster will reply with `0x24`. 133 | 134 | This is most frequently used by GT at ignition to request trip computer properties. 135 | 136 | Other properties are lazy loaded when user requests a display that requires the selected property, i.e. aux. timers. 137 | 138 | ## Request Boolean `0b0000_0010` 139 | 140 | A request for the status of a given property. The cluster will reply with `0x2a`. 141 | 142 | ## On/Start `0b0000_0100` 143 | 144 | The nuances of verbiage aside, basically "activate" the given property. There will be an applicable "activated" UI state. 145 | 146 | - Memo: On. 147 | - Speed Limit: On 148 | - Timer: Start 149 | - Aux. Timer 1: On 150 | - Aux. Timer 2: On 151 | 152 | **Aux. vent., aux. heating do not use these flags!** 153 | 154 | ## Off/Stop `0b0000_1000` 155 | 156 | You guessed it... the opposite of On/Start! 157 | 158 | ## Recalculate `0b0001_0000` 159 | 160 | Does what it says on the tin. 161 | 162 | - Consump. 1 163 | - Consump. 2 164 | - Avg. Speed 165 | 166 | ## Set As Current Speed `0b0010_0000` 167 | 168 | - Limit: set limit to current vehicle speed 169 | 170 | ## Overview 171 | 172 | ID|Property|String|Boolean|On|Off|Recalc.|Set. 173 | :--|-------|------|------|------|------|------|------ 174 | `0x01`|Time|✅||||| 175 | `0x02`|Date|✅||||| 176 | `0x03`|Temperature|✅||||| 177 | `0x04`|Consump. 1|✅||||✅| 178 | `0x05`|Consump. 2|✅||||✅| 179 | `0x06`|Range|✅||||| 180 | `0x07`|Distance|✅||||| 181 | `0x08`|Arrival|✅||||| 182 | `0x09`|Limit|✅|✅|✅|✅||✅ 183 | `0x0a`|Avg. Speed|✅||||✅| 184 | `0x0b`|_PROG_|||||| 185 | `0x0c`|Memo|✅|✅|✅|✅|| 186 | `0x0d`|Code||✅|||| 187 | `0x0e`|Timer|✅|✅|✅|✅|| 188 | `0x0f`|Aux. Timer 1|✅|✅|✅|✅|| 189 | `0x10`|Aux. Timer 2|✅|✅|✅|✅|| 190 | `0x11`|Aux. Heat. (Off)|||⚠️|⚠️|| 191 | `0x12`|Aux. Heat. (On)|||⚠️|⚠️|| 192 | `0x13`|Aux. Vent. (Off)|||⚠️|⚠️|| 193 | `0x14`|Aux. Vent. (On)|||⚠️|⚠️|| 194 | `0x16`|Emergency Disarm|||||| 195 | `0x1a`|Timer (Lap)|✅||||| 196 | `0x1b`|Aux. Status|✅|✅|||| -------------------------------------------------------------------------------- /ike/redundant/lcm_coding.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/redundant/lcm_coding.jpg -------------------------------------------------------------------------------- /ike/redundant/redundant_data_storage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/redundant/redundant_data_storage.jpg -------------------------------------------------------------------------------- /ike/region/settings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/ike/region/settings.jpg -------------------------------------------------------------------------------- /lcm/1a/cc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/1a/cc.jpg -------------------------------------------------------------------------------- /lcm/51.md: -------------------------------------------------------------------------------- 1 | # `0x51` Check Control Status 2 | 3 | CCM `0x30` → Broadcast `0xbf` 4 | 5 | *Only applies to low cluster (KOMBI)!* 6 | 7 | ![Check Control Overview](51/cc.jpg) 8 | 9 | The Check Control Module (CCM) reports certain sensors to cluster, such as *Washer Fluid Low*, *Brake Fluid Low* etc. Later models, like the E46 have all these sensors connected directly to the IKE. 10 | 11 | Note: The CCM was originally a discrete module in early E38s, but it was soon integrated into the light module which is found on later E38s, E39s, E46 etc. 12 | 13 | #### Examples 14 | 15 | 30 04 BF 51 01 DB 16 | 30 04 BF 51 02 D8 17 | 18 | ### Related Commands 19 | 20 | - `0x1a` [Check Control Message](1a.md) 21 | - `0x1b` Check Control Priority 22 | - `0x50` Check Control Status Request 23 | - `0x52` Check Control Message Relay 24 | 25 | ## Parameters 26 | 27 | Fixed length. 1-byte bitfield for `LCM_III` (and I'd guess earlier variants). 28 | 29 | BRAKE_FLUID_LOW = 0b0000_0001 30 | FASTEN_SEATBELT = 0b0000_0010 31 | KEY_IN_IGNITION = 0b0000_0100 32 | UNKNOWN = 0b0000_1000 33 | 34 | WASHER_FLUID_LOW = 0b0001_0000 35 | UNKNOWN = 0b0010_0000 36 | OIL_LEVEL = 0b0100_0000 37 | UNKNOWN = 0b1000_0000 38 | 39 | ## Use Cases 40 | 41 | ### Indicator and warning lamps 42 | 43 | > Many of the systems of your BMW monitor themselves automatically, both during engine starts and while you are driving. Indicator and warning lamps that are identified by "●" are tested for proper functioning whenever the ignition key is turned. They each light up once for different periods of time. 44 | 45 | #### Brake Fluid 46 | 47 | ![Check Control Overview](51/brakes_under_the_hood.jpg) 48 | 49 | 30 04 BF 51 01 DB # Turn on Brake Fluid low indicator (Red exclamation sign) 50 | 51 | #### Fasten Seatbelt 52 | 53 | ![Check Control Overview](51/seatbelt_red_reminder.jpg) 54 | 55 | 30 04 BF 51 02 D8 # Turn on Fasten Seatbelt indicator 56 | 57 | #### Engine Oil Level 58 | 59 | While using the same icon, the oil level indicator is yellow, while the oil pressure indicator is red. 60 | 61 | ##### Yellow: Stop immediately 62 | 63 | ![Check Control Overview](51/oil_level_yellow_check.jpg) 64 | 65 | ##### Yellow: Check as soon as possible 66 | 67 | ![Check Control Overview](51/oil_level_yellow_stop.jpg) 68 | 69 | 30 04 BF 51 40 FA # Turn on Engine Oil Level indicator 70 | 71 | ### Check Control (Low/KOMBI) 72 | 73 | ![Check Control Overview](51/cc.jpg) 74 | 75 | > On vehicles with the basic system, information is indicated not in the form of text messages but rather by warning lamps and symbols in the LC display field for check control messages in the instrument cluster. 76 | 77 | The following warning lamps/symbols are dependent on this command. 78 | 79 | > 2\. Add washer fluid (goes out after approx. 1 minute) 80 | 81 | The following warning signal sounds are also dependent on this command. 82 | 83 | > When you open the door after stopping, a warning signal sounds without a visual indicator for: 84 | > > - KEY IN IGNITION LOCK 85 | 86 | #### Washer Fluid 87 | 88 | > The following alerts or status messages are displayed symbolically from ignition key position 2 and up until the defects are corrected: 89 | > 90 | > 2\. Add washer fluid (goes out after approx. 1 minute) 91 | 92 | 30 04 BF 51 10 CA # Turn on Washer Fluid Low indicator 93 | 94 | #### Key In Ignition 95 | 96 | > When you open the door after stopping, a warning signal sounds without a visual indicator for: 97 | > > - KEY IN IGNITION LOCK. 98 | 99 | 30 04 BF 51 04 DE # Cluster will play chime when door opens 100 | -------------------------------------------------------------------------------- /lcm/51/brakes_red_stop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/51/brakes_red_stop.jpg -------------------------------------------------------------------------------- /lcm/51/brakes_under_the_hood.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/51/brakes_under_the_hood.jpg -------------------------------------------------------------------------------- /lcm/51/cc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/51/cc.jpg -------------------------------------------------------------------------------- /lcm/51/oil_level_yellow_check.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/51/oil_level_yellow_check.jpg -------------------------------------------------------------------------------- /lcm/51/oil_level_yellow_stop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/51/oil_level_yellow_stop.jpg -------------------------------------------------------------------------------- /lcm/51/oil_pressure_red_stop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/51/oil_pressure_red_stop.jpg -------------------------------------------------------------------------------- /lcm/51/seatbelt_red_reminder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/51/seatbelt_red_reminder.jpg -------------------------------------------------------------------------------- /lcm/5a.md: -------------------------------------------------------------------------------- 1 | # `0x5a` Cluster Indicators Request 2 | 3 | Any → LM `0xd0` 4 | 5 | Request cluster indicator status from LM. 6 | 7 | ### Related 8 | 9 | - `0x5b` [Cluster Indicators](5b.md) 10 | 11 | ### Example Frames 12 | 13 | 3B 03 D0 5A B2 14 | 60 03 D0 5A E9 15 | 16 | ## Parameters 17 | 18 | None. 19 | 20 | ## Use Cases 21 | 22 | ### GT 23 | 24 | I've not the faintest idea...? 25 | 26 | ### PDC 27 | 28 | Absolutely no idea why PDC makes this request... -------------------------------------------------------------------------------- /lcm/5b/cc_low.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/5b/cc_low.jpg -------------------------------------------------------------------------------- /lcm/5b/fog_front.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/5b/fog_front.jpg -------------------------------------------------------------------------------- /lcm/5b/fog_rear.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/5b/fog_rear.jpg -------------------------------------------------------------------------------- /lcm/5b/high.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/5b/high.jpg -------------------------------------------------------------------------------- /lcm/5b/left_right.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/lcm/5b/left_right.jpg -------------------------------------------------------------------------------- /mfl/32.md: -------------------------------------------------------------------------------- 1 | # `0x32` MFL Volume (Buttons) 2 | 3 | The **MFL** `0x50` uses the same command as **BMBT** `0xf0` for volume control. 4 | 5 | The MFL's momentary buttons can only emulate the BMBT's rotary encoder output. They will emit a direction, but do not support velocity/rate of change. The "step" will always be `1` regardless of the rate at which the switch is used. 6 | 7 | Pushing the volume buttons at a higher frequency of use will simply send single step commands at a corresponding higher frequency. Holding the volume buttons down will continuously send the same command at a fixed rate. 8 | 9 | The R/T mode has no effect on volume. Whether radio or telephone is the recipient of volume commands is based on [telephone status](../2c.md); specifically the the "active", and "handsfree" bits being set (as per an active call on speakerphone). 10 | 11 | Bit|7-5|4|3|2|1|0 12 | :---|:---|:---|:---|:---|:---|:--- 13 | Use|--|Step|--|--|--|Direction| 14 | 15 | # Direction 16 | DOWN = 0b0000_0000 17 | UP = 0b0000_0001 18 | 19 | # Steps 20 | STEPS = 0b0001_0000 # fixed value! 21 | 22 | #### Radio (Default) 23 | 24 | 50 04 68 32 10 1E # Volume Down 25 | 50 04 68 32 11 1F # Volume Up 26 | 27 | 28 | #### Telephone (active call on handsfree) 29 | 30 | 50 04 C8 32 10 BE # Volume Down 31 | 50 04 C8 32 11 BF # Volume Up -------------------------------------------------------------------------------- /mfl/3b.md: -------------------------------------------------------------------------------- 1 | # `0x3B` MFL Buttons 2 | 3 | MFL `0x50` → Radio `0x68` 4 | MFL `0x50` → Telephone `0xc8` 5 | 6 | ### Related Commands 7 | 8 | - `0x32` [MFL Volume](32.md) 9 | 10 | ### Examples 11 | 12 | 50 04 68 3B 08 0F 13 | 50 04 68 3B 28 2F 14 | 50 04 68 3B 01 06 15 | 50 04 68 3B 21 26 16 | 17 | 50 04 C8 3B 00 A7 18 | 50 04 C8 3B 40 E7 19 | 50 04 C8 3B 01 A6 20 | 50 04 C8 3B 21 86 21 | 50 04 C8 3B 80 27 22 | 50 04 C8 3B A0 07 23 | 24 | # Radio (E46 CD53) 25 | 68 04 FF 3B 00 A8 26 | 27 | ## Parameters 28 | 29 | Fixed length. One byte bit field. 30 | 31 | BUTTON = 0b1100_1001 32 | STATE = 0b0011_0000 33 | 34 | ### Button `0b1100_1001` 35 | 36 | BUTTON_FORWARD = 0b0000_0001 # 0x01 37 | BUTTON_BACK = 0b0000_1000 # 0x08 38 | 39 | BUTTON_RT = 0b0100_0000 # 0x40 40 | BUTTON_TEL = 0b1000_0000 # 0x80 41 | 42 | ### State `0b0011_0000` 43 | 44 | STATE_PRESS = 0b0000_0000 # 0x00 45 | STATE_HOLD = 0b0001_0000 # 0x10 46 | STATE_RELEASE = 0b0010_0000 # 0x20 47 | 48 | ## Use Cases 49 | 50 | ### Radio/Telephone (R/T) Mode 51 | 52 | The **R/T** button will determine if Radio `0x68` or Telephone `0xc8` is the recipient of applicable messages. 53 | 54 | It's use is dependent on Telephone `0xc8` being active on the bus, and MFL `0x50` will periodically check for it's presence: 55 | 56 | # MFL Telephone presence check 57 | 50 03 C8 01 9A 58 | 59 | The **R/T** button behaves like a toggle switch, i.e. it does not have press, hold, or release states. Each time **R/T** it is pressed, a single bit `0b0100_0000` is flipped, thus allowing for only one of two messages: 60 | 61 | # Telephone Mode 62 | 50 04 C8 3B 40 E7 # 0b0100_0000 (0x40) 63 | 64 | # Radio Mode 65 | 50 04 C8 3B 00 A7 # 0b0000_0000 (0x00) 66 | 67 | The bit will only be set for the **R/T** button press, and not with any other button presses. For example, if **R/T** is pressed (select telephone mode), and then **Forward** is pressed (next contact), the bit will not be set in the subsequent messages: 68 | 69 | 50 04 C8 3B 40 E7 # Select "Telephone Mode" 70 | 50 04 C8 3B 01 A6 # Next contact press (R/T bit not set!) 71 | 72 | **R/T** selecting telephone mode will also turn a telephone on. 73 | 74 | ### Radio 75 | 76 | #### Navigation 77 | 78 | As per the back/forward buttons on the MID/BMBT- radio preset selection, CD track navigation etc 79 | 80 | # Radio Forward 81 | 50 04 68 3B 01 06 # Press 82 | 50 04 68 3B 11 16 # Hold 83 | 50 04 68 3B 21 26 # Release 84 | 85 | # Radio Back 86 | 50 04 68 3B 08 0F # Press 87 | 50 04 68 3B 18 1F # Hold 88 | 50 04 68 3B 28 2F # Release 89 | 90 | ### Telephone 91 | 92 | #### Quick Contact Selection 93 | 94 | # Telephone Contact Forward 95 | 50 04 C8 3B 01 A6 # Press 96 | 50 04 C8 3B 11 B6 # Hold 97 | 50 04 C8 3B 21 86 # Release 98 | 99 | # Telephone Contact Back 100 | 50 04 C8 3B 08 AF # Press 101 | 50 04 C8 3B 18 BF # Hold 102 | 50 04 C8 3B 28 8F # Release 103 | 104 | ### Answer, Dial, Hang-up & Voice Act. 105 | 106 | Note: depending on year, and options, the button icon may be either a "telephone", or "speaking". 107 | 108 | # Telephone Answer/Dial/Hang-up 109 | 50 04 C8 3B 00 A7 # Press 110 | 50 04 C8 3B 80 27 # Hold 111 | 50 04 C8 3B A0 07 # Release 112 | -------------------------------------------------------------------------------- /nav/1f.md: -------------------------------------------------------------------------------- 1 | # `0x1f` GPS Time 2 | 3 | With sufficient GPS signal strength, the navigation computer will begin sending GPS [date and] time. 4 | 5 | - Dependent on GPS signal 6 | - Time is expressed as a **24-hour clock** 7 | - Time is in **UTC** 8 | - Sent at the **top of every minute**, e.g. `17:23:00`, `17:24:00` 9 | - The message recipient is the instrument cluster `0x80` 10 | - The message length is fixed at 13 bytes 11 | 12 | ## Examples 13 | 14 | 7F 0B 80 1F 40 07 16 26 00 01 20 19 A4 15 | 7F 0B 80 1F 40 05 40 18 00 01 20 19 CE 16 | 7F 0B 80 1F 40 12 30 17 00 03 20 00 BD 17 | 18 | ## Properties 19 | 20 | Property|Index|Length|Type|Note 21 | :---|:---|:---|:---|:--- 22 | **Unknown**|`0`|`1`|-|Default of `0x40`? 23 | **Hour**|`1`|`1`|Packed BCD| `hh` 24 | **Minute**|`2`|`1`|Packed BCD| `mm` 25 | **Day**|`3`|`1`|Packed BCD| `DD` 26 | **Unknown**|`4`|`1`|-|Default of `0x00`? 27 | **Month**|`5`|`1`|Packed BCD| `MM` 28 | **Year**|`6`|`2`|Packed BCD| `YYYY` 29 | 30 | ### Example 31 | 32 | 7F 0B 80 1F 40 10 18 27 00 01 20 19 BC # GPST frame 33 | 34 | Property|--|Hour|Minute|Day|--|Month|Year 35 | ---|---|---|---|---|---|---|--- 36 | **Data**|`40`|`10`|`18`|`27`|`00`|`01`|`2019` 37 | 38 | **Time**: 10:18am 39 | **Date**: 27 January 2019 40 | 41 | **ISO 8601**: `2019-01-27T10:18:00+00:00` 42 | 43 | ## GPS Week Number Rollover 44 | 45 | As of *7 April 2019*, navigation computers shipped from 1999, or older units that have been updated since ~1999, will no longer report the correct date. 46 | 47 | ![GPS Status Date Error](gpst/gps_status_date_error.jpg) 48 | 49 | An example of this above, whereby an MK4 (`4-1/00`) navigation computer in service mode is reporting an incorrect date of **1 June 2000** (`01.06.00`) on **16 January 2020** (`16.01.2020`). 50 | 51 | This is a result of [GPS week number rollover](https://en.wikipedia.org/wiki/GPS_Week_Number_Rollover), a known limitation in GPS. 52 | 53 | ### The Problem 54 | 55 | GPS expresses time as: 56 | 57 | - **number of weeks** since the GPS epoch on 6 January 1980 58 | - **number of seconds** into the given week 59 | 60 | The number of weeks is represented by a 10-bit integer, and herein lies the problem. 61 | 62 | 10 bits allows for 1024 possible values (`2^10`), or 0 to 1023 weeks since the GPS epoch. Thus, on 21 August 1999, after 1024 weeks, or ~19.7 years, the GPS date would effectively reset. 63 | 64 | GPS obsolesence not withstanding, this reset or rollover will occur every 1024 weeks in perputuity, and as of January 2020, has occured twice. 65 | 66 | Epoch|Start|End|Duration 67 | :---|:---|:---|:--- 68 | **1**|`1980-01-06`|`1999-08-21`|1024 weeks 69 | **2**|`1999-08-22`|`2019-04-06`|1024 weeks 70 | **3**|`2019-04-07`|`...`|`...` 71 | 72 | ### The Solution 73 | 74 | It is the responsibility of GPS receivers to correct the date for the current epoch. and presumably a navigation OS software update was released in anticipation of the first rollover event in 1999, but in the absence of another update, the navigation computer will continue to calculate the date as if GPS is in the second epoch. 75 | 76 | However, the date correction can be handled by applying the same logic that is otherwise the responsibility of the navigation computer. 77 | 78 | As of `V30` or `4-1/00`, navigation computers should be configured for epoch 2. So to correct for epoch 3, the reported date can simply be offset by 1 epoch. `2 + 1 = 3 # Wow! :D` 79 | 80 | In the case of ruby, the base unit for time is seconds, so to get a period of 1 epoch, calculate the number of seconds in one week, and multiply it by 1024. 81 | 82 | epoch_size = 2**10 # 1024 83 | week_secs = 60 * 60 * 24 * 7 # 604800 seconds 84 | 85 | epoch_offset = epoch_size * week_secs # 619315200 seconds (1024 weeks) 86 | 87 | The date reported by the navigation computer can be offset by 1 epoch: 88 | 89 | gpst = Time.new("2000-06-01 06:52") # 1 June 2000 90 | corrected_gpst = gpst + epoch_offset # Offset by 1 epoch 91 | print corrected_gpst # 16 January 2020 92 | 93 | *Drive off into sunset.* -------------------------------------------------------------------------------- /nav/a2.md: -------------------------------------------------------------------------------- 1 | # `0xa2` Telematics: Coordinates 2 | 3 | Nav. `0x7f` → Telephone `0xc8` 4 | 5 | The relevance of coordinates to telephone is in the role of telematics. 6 | 7 | Later navigation computers should send coordinates irrespective of what telephone equipment is installed. 8 | 9 | ### Related 10 | 11 | - `0x1f` [GPS Time](1f.md) 12 | - `0xa4` Telematics: Location 13 | 14 | ### Examples 15 | 16 | 7F 14 C8 A2 00 00 36 01 36 50 01 15 09 02 61 00 00 00 00 00 00 2E 17 | 7F 14 C8 A2 00 00 38 48 16 60 00 77 10 03 61 00 00 00 15 38 00 2F 18 | 7F 14 C8 A2 01 00 49 48 03 50 00 08 44 19 80 02 30 00 16 10 51 E2 19 | 7F 14 C8 A2 01 00 51 28 35 20 00 00 56 58 11 00 46 00 17 00 32 10 20 | 7F 14 C8 A2 01 00 37 51 21 41 01 45 02 29 70 00 46 00 00 02 12 4F 21 | 22 | ## Parameters 23 | 24 | Fixed length. 17 data bytes. 25 | 26 | Parameter|Index|Length 27 | :--------|:----|:--- 28 | Signal|`0`|`1`| 29 | Latitude|`1`|`5`| 30 | Longitude|`6`|`5`| 31 | Altitude|`11`|`2`| 32 | NA|`13`|`1`| 33 | Time|`14`|`3`| 34 | 35 | ### Signal 36 | 37 | If signal has not been acquired, or is temporarily lost, the coordinates and/or time may be inaccurate, or default to `00 00...`. 38 | 39 | Parameter|Index|Length|Type 40 | :--------|:----|:-----|:--- 41 | Signal|`0`|`1`|Bitfield 42 | 43 | # Signal 44 | # Index: 0, Length: 1 45 | SIGNAL_FALSE = 0x00 46 | SIGNAL_TRUE = 0x01 47 | 48 | ### Latitude 49 | 50 | Parameter|Index|Length (byte)|Length (bit)|Type 51 | :---|:---|:---|:---|:--- 52 | Degrees|`1`|`2`|`16`|Packed BCD 53 | Minutes|`3`|`1`|`8`|Packed BCD 54 | Seconds|`4`|`1`|`8`|Packed BCD 55 | Fractional Sec.|`5`|`1`|`4 MSB`|BCD 56 | Sign (N/S)|`5`|`1`|`4 LSB`|Bitfield 57 | 58 | # Sign (North/South) 59 | # Index: 5, Length: 1 (4 LSBs) 60 | SIGN_POS_NORTH = 0b0000 61 | SIGN_NEG_SOUTH = 0b0001 62 | 63 | ### Longitude 64 | 65 | Parameter|Index|Length (byte)|Length (bit)|Type 66 | :---|:---|:---|:---|:--- 67 | Degrees|`6`|`2`|`16`|Packed BCD 68 | Minutes|`8`|`1`|`8`|Packed BCD 69 | Seconds|`9`|`1`|`8`|Packed BCD 70 | Fractional Sec.|`10`|`1`|`4 MSB`|BCD 71 | Sign (E/W)|`10`|`1`|`4 LSB`|Bitfield 72 | 73 | # Sign (East/West) 74 | # Index: 10, Length 1 (4 LSBs) 75 | SIGN_POS_EAST = 0b0000 76 | SIGN_NEG_WEST = 0b0001 77 | 78 | ### Altitude 79 | 80 | Parameter|Index|Length|Note 81 | :---|:---|:---|:--- 82 | Altitude (metre)|`11`|`2`|Packed BCD 83 | 84 | ### NA 85 | 86 | Parameter |Index|Length|Note 87 | :---|:---|:---|:--- 88 | NA|`13`|`1`|Default `00` 89 | 90 | ### Time 91 | 92 | Similar to `0x1f` GPS Time. 93 | 94 | - Time is expressed as a **24-hour clock** 95 | - Time is in **UTC** 96 | - Unlike GPS-T, is **not** sent at the top of the minute, thus seconds will not be limited to `:00` 97 | - Sent at 30 second intervals, e.g. `:15` and `:45`, or `:51` and `:21`. 98 | 99 | Property|Index|Length|Type 100 | :---|:---|:---|:--- 101 | Hour|`14`|`1`|Packed BCD 102 | Minute|`15`|`1`|Packed BCD 103 | Second|`16`|`1`|Packed BCD 104 | 105 | ### Example 106 | 107 | # Telematics: Coordinates frame 108 | 7F 14 C8 A2 01 00 37 51 21 41 01 45 02 29 70 00 46 00 00 02 12 4F 109 | 110 | Parameter|Data|Parsed 111 | :-------|:---|:--- 112 | Signal|`01`|`TRUE` 113 | Lat: Degrees|`00 37`|`37°` 114 | Lat: Minutes|`51`|`51′` 115 | Lat: Seconds|`21`|`21` 116 | Lat: Fractional Sec.|`41 & 0b1111_0000 => 40`|`.4″` 117 | Lat: Sign (N/S)|`41 & 0b0000_1111 => 01`|`S` 118 | Long: Degrees|`01 45`|`145°` 119 | Long: Minutes|`02`|`02′` 120 | Long: Seconds|`29`|`20` 121 | Long: Fractional Sec.|`70 & 0b1111_0000 => 70`|`.7″` 122 | Long: Sign (E/W)|`70 & 0b0000_1111 => 00`|`E` 123 | Altitude|`00 46`|`46m` 124 | NA|`00`|-- 125 | Time: Hour|`00`|`00` 126 | Time: Minute|`02`|`:02` 127 | Time: Seconds|`12`|`:12` 128 | 129 | # Telematics: Coordinates parsed 130 | 37°51′21.4″S 145°02′29.7″E 46m 131 | 00:02:12+00:00 132 | 133 | ## Use Cases 134 | 135 | ### Emergency Call 136 | 137 | ![Emergency Coordinates](telematics/coordinates.jpg) 138 | *Source: [BimmerNav](http://www.bimmernav.com/btfunctions.html)* 139 | 140 | Earlier telephone modules will display location and coordinates when making a manual emergency call. 141 | 142 | ### BMW Assist: Emergency Call 143 | > In addition, the TCU accompanies *[manual and automatic*] emergency calls with an SMS text message providing the **location coordinates** of the vehicle to the service provider. 144 | 145 | > The following data are transmitted in the SMS: - **Location of vehicle** - Vehicle identification number - Telephone number (from mobile phone) - Licence number, colour, model (if specified) 146 | 147 | ### BMW Assist: Roadside Assistance > A breakdown call is sent by selecting the menu point BMW roadside assistance service, i.e. data are sent to the BMW roadside assistance service together with the **current location** and vehicle profile. -------------------------------------------------------------------------------- /nav/gpst/gps_status_date_error.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/nav/gpst/gps_status_date_error.jpg -------------------------------------------------------------------------------- /nav/gpst/gps_version.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/nav/gpst/gps_version.jpg -------------------------------------------------------------------------------- /nav/gpst/gps_week_roll_over_issue_20170926.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/nav/gpst/gps_week_roll_over_issue_20170926.jpg -------------------------------------------------------------------------------- /nav/telematics/coordinates.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/nav/telematics/coordinates.jpg -------------------------------------------------------------------------------- /nav/telematics/coordinates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/nav/telematics/coordinates.png -------------------------------------------------------------------------------- /radio/23/analogue_old.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/23/analogue_old.jpg -------------------------------------------------------------------------------- /radio/23/cdc_old.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/23/cdc_old.jpg -------------------------------------------------------------------------------- /radio/23/digital_old.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/23/digital_old.jpg -------------------------------------------------------------------------------- /radio/23/tape_vm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/23/tape_vm.jpg -------------------------------------------------------------------------------- /radio/36.md: -------------------------------------------------------------------------------- 1 | # `0x36` Radio EQ 2 | 3 | Radio `0x68` → GT `0x3b` 4 | 5 | 6 | 7 | *BMBT only.* 8 | 9 | The radio uses this command to update the **Tone** (EQ) display as the properties are adjusted. 10 | 11 | ![Tone](36/treble.jpg) 12 | 13 | ### Related Commands 14 | 15 | - `0x37` [Radio Tone/Select](37.md) 16 | - `0x46` Radio UI 17 | 18 | ### Example Frames 19 | 20 | 68 04 3B 36 40 21 21 | 68 04 3B 36 44 25 22 | 68 04 3B 36 54 35 23 | 68 04 3B 36 55 34 24 | 68 04 3B 36 6A 0B 25 | 68 04 3B 36 72 13 26 | 68 04 3B 36 78 19 27 | 68 04 3B 36 85 E4 28 | 68 04 3B 36 98 F9 29 | 68 04 3B 36 C2 A3 30 | 31 | ## Parameters 32 | 33 | Fixed length. One byte bitfield. 34 | 35 | PROPERTY = 0b1110_0000 36 | VALUE = 0b0001_1111 37 | 38 | ### Property `0b1110_0000` 39 | 40 | PROPERTY_BALANCE = 0b0100_0000 # 0x40 41 | PROPERTY_BASS = 0b0110_0000 # 0x60 42 | PROPERTY_FADER = 0b1000_0000 # 0x80 43 | PROPERTY_TREBLE = 0b1100_0000 # 0xc0 44 | 45 | ### Value `0b0001_1111` 46 | 47 | The property value is encoded with [signed magnitude representation](https://en.wikipedia.org/wiki/Signed_number_representations#Signed_magnitude_representation). 48 | 49 | # 5-bit signed magnitude encoding 50 | SIGN = 0b0001_0000 # Sign 51 | MAGNITUDE = 0b0000_1111 # Magnitude (absolute value) 52 | 53 | Each property has a fixed number of intervals. *Treble* and *Bass* have 13 intervals (±6), while *Fader* and *Balance* have 21 intervals (±10). 54 | 55 | A *magnitude* of zero `0b0000` represents "neutral" (as denoted by the visual indicator), with *sign* representing the change relative to neutral. 56 | 57 | SIGN_POSITIVE = 0b0_0000 # "Max", "Front", "Left" 58 | SIGN_NEGATIVE = 0b1_0000 # "Min", "Rear", "Right" 59 | 60 | The step number will not necessarily equal the encoded number. i.e. the sixth step is not encoded as `0b0110 # 0x6`. The respective encoded intervals are summarised below: 61 | 62 | Property|Step (encoded) [neutral to upper limit] 63 | :-------|:----------------------------- 64 | Bass / Treble|`0 2 4 6 8 a c` 65 | Fader / Balance|`0 1 2 3 4 5 8 a c e f` 66 | 67 | Just to *really* fuck with you; while adjusting *Fader*, *Treble*, or *Bass* to the left (visually) is "negative", *Balance* is "positive". 68 | 69 | Up is down, and down is up. (Did you know that Willy Wonka & the Chocolate Factory was filmed in Munich? Seems apt...) 70 | 71 | ![Meanwhile, in Munich...](36/meanwhile_in_munich.gif) 72 | 73 | As a respite from German humour, here is a table of the encoded intervals, laid out as they appear visually. 74 | 75 |          |    |                               |`▼` |                               |      76 | :--------|----|------------------------------:|:----:|-------------------------------|----- 77 | *Balance*|Left|`0f 0e 0c 0a 08 05 04 03 02 01`|`00`|`11 12 13 14 15 18 1a 1c 1e 1f`|Right 78 | *Fader*  |Rear|`1f 1e 1c 1a 18 15 14 13 12 11`|`10`|`01 02 03 04 05 08 0a 0c 0e 0f`|Front 79 | *Treble* |min |`1c 1a 18 16 14 12`|`10`|`02 04 06 08 0a 0c`|max 80 | *Bass*   |min |`1c 1a 18 16 14 12`|`10`|`02 04 06 08 0a 0c`|max 81 | 82 | *For an additional layer of mind fuckery, the encoding is not consistent with DSP. A number of steps have a different binary value, including neutral (zero), which may switch between negative and positive.* 83 | 84 | *I mean, of course it would.* 85 | 86 | ## Use Cases 87 | 88 | ### Tone 89 | 90 | #### Balance 91 | 92 | ![Balance Adjustment](36/balance.jpg) 93 | 94 | # BALANCE 95 | 68 04 3B 36 4F 2E # +10 LEFT 96 | 68 04 3B 36 4E 2F # +9 97 | 68 04 3B 36 4C 2D # +8 98 | 68 04 3B 36 4A 2B # +7 99 | 68 04 3B 36 48 29 # +6 100 | 68 04 3B 36 45 24 # +5 101 | 68 04 3B 36 44 25 # +4 102 | 68 04 3B 36 43 22 # +3 103 | 68 04 3B 36 42 23 # +2 104 | 68 04 3B 36 41 20 # +1 105 | 68 04 3B 36 40 21 # +0 106 | 68 04 3B 36 51 30 # -1 107 | 68 04 3B 36 52 33 # -2 108 | 68 04 3B 36 53 32 # -3 109 | 68 04 3B 36 54 35 # -4 110 | 68 04 3B 36 55 34 # -5 111 | 68 04 3B 36 58 39 # -6 112 | 68 04 3B 36 5A 3B # -7 113 | 68 04 3B 36 5C 3D # -8 114 | 68 04 3B 36 5E 3F # -9 115 | 68 04 3B 36 5F 3E # -10 RIGHT 116 | 117 | #### Fader 118 | 119 | ![Fader Adjustment](36/fader.jpg) 120 | 121 | # FADER 122 | 68 04 3B 36 9F FE # -10 REAR 123 | 68 04 3B 36 9E FF # -9 124 | 68 04 3B 36 9C FD # -8 125 | 68 04 3B 36 9A FB # -7 126 | 68 04 3B 36 98 F9 # -6 127 | 68 04 3B 36 95 F4 # -5 128 | 68 04 3B 36 94 F5 # -4 129 | 68 04 3B 36 93 F2 # -3 130 | 68 04 3B 36 92 F3 # -2 131 | 68 04 3B 36 91 F0 # -1 132 | 68 04 3B 36 90 F1 # +0 133 | 68 04 3B 36 81 E0 # +1 134 | 68 04 3B 36 82 E3 # +2 135 | 68 04 3B 36 83 E2 # +3 136 | 68 04 3B 36 84 E5 # +4 137 | 68 04 3B 36 85 E4 # +5 138 | 68 04 3B 36 88 E9 # +6 139 | 68 04 3B 36 8A EB # +7 140 | 68 04 3B 36 8C ED # +8 141 | 68 04 3B 36 8E EF # +9 142 | 68 04 3B 36 8F EE # +10 FRONT 143 | 144 | #### Treble 145 | 146 | ![Treble Adjustment](36/treble.jpg) 147 | 148 | # TREBLE 149 | 68 04 3B 36 DC BD # -6 MIN 150 | 68 04 3B 36 DA BB # -5 151 | 68 04 3B 36 D8 B9 # -4 152 | 68 04 3B 36 D6 B7 # -3 153 | 68 04 3B 36 D4 B5 # -2 154 | 68 04 3B 36 D2 B3 # -1 155 | 68 04 3B 36 D0 B1 # -0 156 | 68 04 3B 36 C2 A3 # +1 157 | 68 04 3B 36 C4 A5 # +2 158 | 68 04 3B 36 C6 A7 # +3 159 | 68 04 3B 36 C8 A9 # +4 160 | 68 04 3B 36 CA AB # +5 161 | 68 04 3B 36 CC AD # +6 MAX 162 | 163 | #### Bass 164 | 165 | ![Bass Adjustment](36/bass.jpg) 166 | 167 | # Bass: Min to Max 168 | 68 04 3B 36 7C 1D # -6 MIN 169 | 68 04 3B 36 7A 1B # -5 170 | 68 04 3B 36 78 19 # -4 171 | 68 04 3B 36 76 17 # -3 172 | 68 04 3B 36 74 15 # -2 173 | 68 04 3B 36 72 13 # -1 174 | 68 04 3B 36 70 11 # -0 175 | 68 04 3B 36 62 03 # +1 176 | 68 04 3B 36 64 05 # +2 177 | 68 04 3B 36 66 07 # +3 178 | 68 04 3B 36 68 09 # +4 179 | 68 04 3B 36 6A 0B # +5 180 | 68 04 3B 36 6C 0D # +6 MAX -------------------------------------------------------------------------------- /radio/36/balance.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/36/balance.jpg -------------------------------------------------------------------------------- /radio/36/bass.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/36/bass.jpg -------------------------------------------------------------------------------- /radio/36/fader.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/36/fader.jpg -------------------------------------------------------------------------------- /radio/36/meanwhile_in_munich.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/36/meanwhile_in_munich.gif -------------------------------------------------------------------------------- /radio/36/treble.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/36/treble.jpg -------------------------------------------------------------------------------- /radio/37/bm53_cdc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/37/bm53_cdc.png -------------------------------------------------------------------------------- /radio/37/bm53_eq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/37/bm53_eq.png -------------------------------------------------------------------------------- /radio/37/bm53_rad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/37/bm53_rad.png -------------------------------------------------------------------------------- /radio/37/c23_cdc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/37/c23_cdc.jpg -------------------------------------------------------------------------------- /radio/37/c23_eq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/37/c23_eq.png -------------------------------------------------------------------------------- /radio/37/c23_rad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/37/c23_rad.jpg -------------------------------------------------------------------------------- /radio/37/c23_tape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/37/c23_tape.png -------------------------------------------------------------------------------- /radio/37/max.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/37/max.jpg -------------------------------------------------------------------------------- /radio/37/min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/37/min.jpg -------------------------------------------------------------------------------- /radio/37/neutral.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/37/neutral.jpg -------------------------------------------------------------------------------- /radio/46.md: -------------------------------------------------------------------------------- 1 | # `0x46` Request Radio UI 2 | 3 | Radio `0x68` → GT `0x3b` 4 | 5 | The radio has limited control of the display in order to manage it's own interface. 6 | 7 | However, the radio is ultimately subserveant to the GT and it's UI state will always be overridden by `0x45`. 8 | 9 | ### Related 10 | 11 | - `0x37` [Radio Tone/Select](37.md) 12 | - `0x45` [Set Radio UI](../gt/45.md) 13 | 14 | ### Examples 15 | 16 | 68 04 3B 46 01 10 17 | 68 04 3B 46 02 13 18 | 68 04 3B 46 04 15 19 | 68 04 3B 46 08 19 20 | 68 04 3B 46 0C 1D 21 | 68 04 3B 46 0E 1F 22 | 23 | ## Parameters 24 | 25 | Fixed length. One byte bitfield. 26 | 27 | PRIORITY = 0b0000_0001 28 | HIDE_HEADER = 0b0000_0010 29 | HIDE_BODY = 0b0000_1100 30 | 31 | ### Priority `0b0000_0001` 32 | 33 | PRIORITY_RAD = 0 34 | PRIORITY_GT = 1 35 | 36 | When set to `1`, the radio is relinquishing the display. 37 | 38 | When set to `0`, the radio is managing it's own display functions (outlined in Use Cases). 39 | 40 | Note: the radio won't ever set `0` of it's own accord. When the radio is turned on, it will just assume control of the display and begin writing to it, at which point the GT is inherently aware of the radio being in the foreground. 41 | 42 | ### Hide Header `0b0000_0010` 43 | 44 | HIDE_HEADER = 0b0000_0010 45 | 46 | ### Hide Body `0b0000_1100` 47 | 48 | HIDE_BODY_SELECT = 0b0000_0100 49 | HIDE_BODY_TONE = 0b0000_1000 50 | HIDE_BODY_MENU = 0b0000_1100 51 | 52 | ## Use Cases 53 | 54 | ### Hide Tone 55 | 56 | #### C23 BM 57 | 58 | ![Hide Tone C23 BM](46/c23_tone.jpg) 59 | 60 | F0 04 68 48 04 D0 # TONE button: Press 61 | F0 04 68 48 84 50 # TONE button: Release 62 | 68 07 3B 37 80 00 00 10 F3 # Show Tone (and set parameters) 63 | # Timeout... 64 | 68 04 3B 46 08 19 # Hide Tone 65 | 66 | #### BM53 67 | 68 | ![Hide Tone BM53](37/neutral.jpg) 69 | 70 | F0 04 68 48 04 D0 # TONE button: Press 71 | F0 04 68 48 84 50 # TONE button: Release 72 | 68 07 3B 37 90 10 01 01 E3 # Show Tone (and set parameters) 73 | # Timeout... 74 | 68 04 3B 46 08 19 # Hide Tone 75 | 68 04 3B 46 0C 1D # Hide Menu 76 | 77 | ### Hide Select 78 | 79 | #### C23 BM 80 | 81 | ![Hide Select C23 BM](46/c23_select_cdc.jpg) 82 | 83 | F0 04 68 48 20 F4 # SELECT button: Press 84 | F0 04 68 48 A0 74 # SELECT button: Release 85 | 68 04 3B 37 40 20 # Show Select 86 | # Timeout... 87 | 68 04 3B 46 04 15 # Hide Select 88 | 89 | #### BM53 90 | 91 | ![Hide Select BM53](37/c23_cdc.jpg) 92 | 93 | F0 05 FF 47 00 0F 42 # SELECT button: Press 94 | 68 04 3B 37 04 64 # Show Select 95 | F0 05 FF 47 00 8F C2 # SELECT button: Release 96 | # Timeout... 97 | 68 04 3B 46 04 15 # Hide Select 98 | 68 04 3B 46 0C 1D # Hide Menu 99 | 100 | ### Main Menu 101 | 102 | A MENU press does not get sent to radio, but is broadcast, and instead handled by the GT `0x3b`, which will in turn, message the radio `0x68`, requesting it relegate itself to the background. 103 | 104 | If the radio is on, but in the background, it will still write to the display for certain events (e.g. changing radio station, CD track etc), but will automatically return to the background after an ~8 second timeout. 105 | 106 | GT will only send `0x45` if radio is on. 107 | 108 | #### C23 BM 109 | 110 | F0 04 FF 48 34 77 # MENU button: press 111 | 3B 04 68 45 01 13 # GT (legacy) requesting radio relinquish display 112 | 68 04 3B 46 01 10 # Radio relinquishing display 113 | 114 | # Note the additional 0x45 bit set if Audio OBC enabled: 115 | F0 04 FF 48 34 77 116 | 3B 04 68 45 03 11 117 | 68 04 3B 46 01 10 118 | 119 | #### BM53 120 | 121 | Similar to the C23 BM, however with one quirk- the BM53 sends `0x46` twice. (I suspect this is something to do with the updated UI.) 122 | 123 | F0 04 FF 48 34 77 # MENU button press 124 | 3B 04 68 45 91 83 # GT (4-1/00) requesting radio relinquish foreground 125 | 68 04 3B 46 01 10 # Radio relinquishing foreground 126 | 68 04 3B 46 01 10 # Note: BM53 sends this command TWICE 127 | 128 | ### Hide Overlay 129 | 130 | When pressing the OVERLAY button, the radio relinquishes the display. The radio will still write titles, but automatically hide overlay again after ~8 seconds 131 | 132 | Unlike a MENU button press, the OVERLAY button press is sent directly to the radio. 133 | 134 | #### BM C23 135 | 136 | F0 04 68 48 30 E4 # BMBT Overlay button press 137 | 68 04 3B 46 0E 1F # Radio exits overlay mode 138 | 139 | The radio will still write titles, but relinquish the display again after the timeout: 140 | 141 | # Radio writes to display: "FM ☐101.1☐ " 142 | 68 12 3B 23 40 20 46 4D 20 03 31 30 31 2E 31 04 20 20 20 21 143 | 144 | # 8 seconds pass... 145 | 146 | # Radio automatically hides overlay 147 | 68 04 3B 46 0E 1F 148 | 149 | #### BM53 150 | 151 | Similar to C23 BM, but `0x46` is sent twice. 152 | 153 | # BMBT Overlay button press 154 | F0 04 68 48 30 E4 155 | 156 | # Radio hides overlay 157 | 68 04 3B 46 02 13 158 | 68 04 3B 46 0C 1D 159 | 160 | The BM53 will still write titles, but relinquish the display after a timeout. 161 | 162 | # "☐ 90.7☐ " 163 | 68 12 3B 23 62 10 03 20 39 30 2E 37 04 20 20 20 20 20 20 27 164 | 165 | # 8 seconds pass... 166 | 167 | # Radio hides overlay 168 | 68 04 3B 46 02 13 169 | 68 04 3B 46 0C 1D 170 | 171 | ### Radio Off 172 | 173 | #### C23 BM 174 | 175 | F0 04 68 48 06 D2 # POWER button: Press 176 | 68 04 F0 4A 00 D6 # BMBT radio LED: Off 177 | 68 04 3B 46 0E 1F # Hide Menu, Hide Header 178 | F0 04 68 4B 05 D2 # Tape: none 179 | F0 04 68 48 86 52 # POWER button: Release 180 | 181 | #### BM53 182 | 183 | F0 04 68 48 06 D2 # POWER button: press 184 | 68 04 F0 4A 00 D6 # BMBT radio LED: off 185 | 68 04 3B 46 0E 1F # Hide Menu, Hide Header 186 | F0 04 68 4B 05 D2 # Tape: none 187 | F0 04 68 48 86 52 # POWER button: Release -------------------------------------------------------------------------------- /radio/46/c23_select_cdc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/46/c23_select_cdc.jpg -------------------------------------------------------------------------------- /radio/46/c23_select_radio.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/46/c23_select_radio.jpg -------------------------------------------------------------------------------- /radio/46/c23_tone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/46/c23_tone.jpg -------------------------------------------------------------------------------- /radio/arbitration/0905_11mg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/arbitration/0905_11mg.jpg -------------------------------------------------------------------------------- /radio/arbitration/0905_2mg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/arbitration/0905_2mg.jpg -------------------------------------------------------------------------------- /radio/arbitration/0905_3mg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/arbitration/0905_3mg.jpg -------------------------------------------------------------------------------- /radio/arbitration/0905_4mg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/arbitration/0905_4mg.jpg -------------------------------------------------------------------------------- /radio/arbitration/0905_7mg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/arbitration/0905_7mg.jpg -------------------------------------------------------------------------------- /radio/arbitration/updated_ui.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/arbitration/updated_ui.jpg -------------------------------------------------------------------------------- /radio/audio_obc/mk1_gt/audio_obc_disabled.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/audio_obc/mk1_gt/audio_obc_disabled.JPG -------------------------------------------------------------------------------- /radio/audio_obc/mk1_gt/audio_obc_enabled.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/audio_obc/mk1_gt/audio_obc_enabled.JPG -------------------------------------------------------------------------------- /radio/audio_obc/mk1_gt/set_audio_obc.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/audio_obc/mk1_gt/set_audio_obc.JPG -------------------------------------------------------------------------------- /radio/audio_obc/vm_gt/audio_obc_enabled.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/audio_obc/vm_gt/audio_obc_enabled.JPG -------------------------------------------------------------------------------- /radio/audio_obc/vm_gt/set_audio_obc.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/radio/audio_obc/vm_gt/set_audio_obc.JPG -------------------------------------------------------------------------------- /radio/service_mode.md: -------------------------------------------------------------------------------- 1 | # Radio: Service Mode 2 | 3 | ## Parameters 4 | 5 | SOURCE = 0b1110_0000 6 | CONFIG = 0b0001_1111 7 | 8 | ### Source `0b1110_0000` 9 | 10 | SOURCE_SERVICE = 0b000 << 5 # 0x00 11 | 12 | ### Config `0b0001_1111` 13 | 14 | CONFIG_SERIAL_NUMBER = 0b0_0010 15 | CONFIG_SOFTWARE_VERSION = 0b0_0011 16 | CONFIG_GAL = 0b0_0100 17 | CONFIG_FQ = 0b0_0101 18 | CONFIG_DSP = 0b0_0110 19 | CONFIG_SEEK_LEVEL = 0b0_0111 20 | CONFIG_TP_VOLUME = 0b0_1000 21 | CONFIG_AF = 0b0_1001 22 | CONFIG_REGION = 0b0_1010 23 | 24 | ## Use Cases 25 | 26 | The MK1 GT has support for service mode despite C23 not using it? 27 | 28 | Parameters |Description 29 | :--------------------|:---------- 30 | **Serial Number** | Displays the radio serial number. (PN?) 31 | **Software Version** | Displays the radio software version in format (mm/yy?) 32 | **GAL** | Speed dependent volume control 33 | **F & Q** | Field Strength (F) & Quality (Q) 34 | **DSP** | DSP 35 | **Seek Level** | ??? 36 | **TP Volume** | Provides adjustment for traffic report minimum value. 37 | **AF** | Alternative-frequency radio setting 38 | **Region** | View/edit radio region. -------------------------------------------------------------------------------- /rls/59.md: -------------------------------------------------------------------------------- 1 | # `0x59` Light Sensor Status 2 | 3 | RLS `0xe8` → LCM `0xd0`. 4 | 5 | This command reports the status and demand for the light state to the LCM. 6 | 7 | ## Examples 8 | 9 | E8 04 D0 50 00 6C 10 | E8 04 D0 21 02 1F 11 | E8 04 D0 11 01 1F 12 | 13 | ## Properties 14 | 15 | Fixed length. Two byte bitfield. 16 | 17 | # Byte 1 18 | 19 | INTENSITY = 0b0111_0000 20 | LIGHT_STATE = 0b0000_0001 21 | 22 | # Byte 2 23 | 24 | REASON = 0b0001_1111 25 | 26 | 27 | #### Intensity `0b0111_0000` 28 | 29 | INTENSITY_1 = 0x10 30 | INTENSITY_2 = 0x20 31 | INTENSITY_3 = 0x30 32 | INTENSITY_4 = 0x40 33 | INTENSITY_5 = 0x50 34 | INTENSITY_6 = 0x60 35 | 36 | #### Light State `0b0000_0001` 37 | 38 | LIGHTS_ON = 0x01 39 | LIGHTS_OFF = 0x00 40 | 41 | --- 42 | 43 | #### Reason `0b0001_1111` 44 | 45 | TWILIGHT = 0x01 46 | DARKNESS = 0x02 47 | RAIN = 0x04 48 | TUNNEL = 0x08 49 | GARAGE = 0x10 50 | -------------------------------------------------------------------------------- /telephone/20.md: -------------------------------------------------------------------------------- 1 | # `0x20` Menu > Telephone 2 | 3 | ![Main Menu](20/main_menu.JPG) 4 | 5 | When Telephone is selected from the main menu, the graphics stage (GT) `0x3b` sends to broadcast high `0xff` the command: 6 | 7 | # Select Telephone from Main Menu 8 | 3B 05 FF 20 02 0C EF 9 | 10 | I'd hazard a guess that the MID would send the same- perhaps even with button states, i.e. press, hold, release, as I believe there's a dedicated button. 11 | 12 | #### Version 18 UI Update (MK3 3-1/40+, and MK4) 13 | 14 | It's important to note that the same command is sent when **Top 8** is selected from within the Telephone submenu. 15 | 16 | This isn't an issue on the MID and MK1, MK2, and MK3 <= 3-1/31, as **Top 8** is the default Telephone home screen. Whether you select Telephone from the main menu, or Top 8 from the Telephone submenu, the result is the same. Everyone is happy. 17 | 18 | ![Top 8 4x3](20/top_8_old.JPG) 19 | 20 | However, following the UI update, the MK3 (<= 3-1/40) and MK4 would open the **Dial** interface which was redesigned to double as Telephone home screen. Bye bye stateless commands... 21 | 22 | ![Redesigned Dial Layout](20/dial_new.JPG) 23 | 24 | ![Original Dial Layout](20/dial_old.JPG) 25 | 26 | The telephone emulation will just need to maintain a session state as to be able to differentiate between opening Telephone from the main menu, vs. opening **Top 8** from the Telephone submenu. Not the end of the world, but required if emulating existing behaviour. 27 | -------------------------------------------------------------------------------- /telephone/20/dial_new.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/20/dial_new.JPG -------------------------------------------------------------------------------- /telephone/20/dial_old.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/20/dial_old.JPG -------------------------------------------------------------------------------- /telephone/20/main_menu.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/20/main_menu.JPG -------------------------------------------------------------------------------- /telephone/20/top_8_old.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/20/top_8_old.JPG -------------------------------------------------------------------------------- /telephone/21.md: -------------------------------------------------------------------------------- 1 | # `0x21` Menu Text: Telephone 2 | 3 | Telephone `0xc8` → GT `0x3b` 4 | Telephone `0xc8` → MID `0xc0` 5 | 6 | *Only BMBT (GT) usage is discussed!* 7 | 8 | ### Related 9 | 10 | - `0x21` Menu Text: Radio 11 | - `0x21` Menu Text: Cluster 12 | - `0x23` [Title Text: Telephone](23.md) 13 | - `0x24` [Property Text: Telephone](24.md) 14 | - `0x31` Menu Button: Telephone 15 | - `0xa5` [Body Text: Telephone](a5.md) 16 | 17 | ### Example Frames 18 | 19 | # Telephone: CMT4000 20 | C8 06 3B 21 42 02 20 B4 21 | C8 1E 3B 21 43 01 60 06 43 61 6C 6C 43 6F 6E 6E 65 63 74 06 4D 65 73 73 61 67 65 42 61 6E 6B FF 22 | C8 18 3B 21 43 01 04 06 4D 55 4D 06 59 65 6C 6C 6F 77 50 61 67 65 73 44 69 90 23 | C8 16 3B 21 80 01 60 06 43 61 6C 6C 43 6F 6E 6E 65 63 74 06 4D 55 4D 0C 24 | C8 20 3B 21 80 01 04 06 4D 65 73 73 61 67 65 42 61 6E 6B 06 59 65 6C 6C 6F 77 50 61 67 65 73 44 69 53 25 | 26 | 32 | 33 | ## Parameters 34 | 35 | Length will vary with *String*. 36 | 37 | Property|Index|Length|Type 38 | :-------|:----|:-----|:--- 39 | Layout|`0`|`1`|Bitfield 40 | Function|`1`|`1`|Bitfield 41 | Options|`2`|`1`|Bitfield 42 | String|`3`|`-1`|String 43 | 44 | --- 45 | 46 | ### Layout 47 | 48 | DIAL = 0x42 49 | DIRECTORY = 0x43 50 | TOP_8 = 0x80 51 | LIST = 0xf0 # SMS: Index, "Bluetooth Pairing" 52 | DETAIL = 0xf1 # SMS: Message, SOS/Emergency 53 | 54 | `0xf0` and `0xf1` were introduced later in production, and had multiple use cases. 55 | 56 | --- 57 | 58 | ### Function 59 | 60 | NULL = 0x00 61 | CONTACT = 0x01 62 | DIGIT = 0x02 63 | SOS = 0x05 64 | NAVIGATION = 0x07 65 | INFO = 0x08 66 | 67 | Presumably to help differentiate the the function of a given layout and index returned by `0x31`. 68 | 69 | --- 70 | 71 | ### Options 72 | 73 | INDEX = 0b0001_1111 # Index of field to write to 74 | CLEAR = 0b0010_0000 # Clear layout 75 | BUFFER = 0b0100_0000 # Buffer the write 76 | HIGHLIGHT = 0b1000_0000 # Highlight given field 77 | 78 | #### Index `0b0001_1111` 79 | 80 | Each layout has a given number of fields, each of which is represented by a known index. 81 | 82 | This might also be thought of as a cursor position from which to start writing. The control character `0x06` will move the cursor to the next index. 83 | 84 | #### Clear `0b0010_0000` 85 | 86 | Setting this bit will clear the given layout, including the buffer. As such, it's only set on the *first* message. 87 | 88 | Careful omission of this bit allows the updating the rendered display. However, the factory implementation seemingly always writes the display in it's entirity, thus always clearing the display when commencing writing. 89 | 90 | #### Buffer `0b0100_0000` 91 | 92 | As populating a display requires multiple messages, the GT `0x3b` will buffer preliminary messages until the entire display is ready to be rendered. 93 | 94 | All but the last message will have this bit set. The absense of the bit in the final messages is what triggers the GT `0x3b` to render the buffer. 95 | 96 | #### Highlight `0b1000_0000` 97 | 98 | The field with the given index will be highlighted. 99 | 100 | I've not seen this used in the factory implementation. If omitted, the first, or last selected field (for the given layout) will be highlighted. 101 | 102 | --- 103 | 104 | ### String 105 | 106 | Code Point|Name|Description 107 | :--|:--|:-- 108 | `0x00`|NUL|Null-terminated string 109 | `0x06`|LF|Line Feed 110 | 111 | ## Use Cases 112 | 113 | Given that several commands are associated with each use case, they're discussed in their own respective documentation. 114 | 115 | ### Dial 116 | 117 | [Telephone: Dial](dial.md) 118 | 119 | ![Directory](21/42.JPG) 120 | 121 | ### Directory 122 | 123 | [Telephone: Directory](directory.md) 124 | 125 | ![Directory](21/43.JPG) 126 | 127 | ### Top 8 128 | 129 | [Telephone: Top 8](top_8.md) 130 | 131 | ![Top 8](21/80.JPG) 132 | 133 | ### SMS: Index 134 | 135 | [Telephone: SMS Index](list.md) 136 | 137 | ![SMS Index](21/f0.jpeg) 138 | 139 | ### Bluetooth Pairing 140 | 141 | [Telephone: SMS Index](list.md) 142 | 143 | ![Bluetooth Pairing](21/reference_pairing.jpg) 144 | 145 | ### SMS: Message 146 | 147 | [Telephone: SMS Message](detail.md) 148 | 149 | ![SMS Detail](21/f1.jpeg) 150 | 151 | ### SOS/Emergency 152 | 153 | [Telephone: Emergency](detail.md) 154 | 155 | ![SOS/Emergency](sms/sms_emergency.jpg) -------------------------------------------------------------------------------- /telephone/21/42.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/21/42.JPG -------------------------------------------------------------------------------- /telephone/21/43.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/21/43.JPG -------------------------------------------------------------------------------- /telephone/21/80.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/21/80.JPG -------------------------------------------------------------------------------- /telephone/21/f0.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/21/f0.jpeg -------------------------------------------------------------------------------- /telephone/21/f1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/21/f1.jpeg -------------------------------------------------------------------------------- /telephone/21/reference_pairing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/21/reference_pairing.jpg -------------------------------------------------------------------------------- /telephone/23.md: -------------------------------------------------------------------------------- 1 | # `0x23` Title Text: Telephone 2 | 3 | Telephone `0xc8` → GT `0x3b` 4 | Telephone `0xc8` → MID `0xc0` 5 | Telephone `0xc8` → IKE `0x80` 6 | Telephone `0xc8` → Multicast: Displays `0xe7` 7 | 8 | *Only BMBT (GT) usage is discussed!* 9 | 10 | ### Related 11 | 12 | - `0x1b` Check Control Priority 13 | - `0x21` [Menu Text: Telephone](21.md) 14 | - `0x24` [Property Text: Telephone](24.md) 15 | - `0xa5` [Body Text: Telephone](a5.md) 16 | 17 | ### Example Frames 18 | 19 | C8 11 3B 23 00 20 49 4E 53 45 52 54 20 43 41 52 44 21 E3 20 | C8 05 3B 23 80 20 75 21 | 22 | ## Parameters 23 | 24 | Length will vary with *String*. 25 | 26 | Property|Index|Length|Type 27 | :-------|:----|:-----|:--- 28 | Layout|`0`|`1`|Bitfield 29 | Options|`1`|`1`|Bitfield 30 | String|`2`|`-1`|String 31 | 32 | --- 33 | 34 | ### Layout 35 | 36 | # GT 37 | DEFAULT = 0x00 # "INSERT CARD!" 38 | 39 | PIN_DIGITS = 0x05 40 | 41 | DIR_NAME = 0x52 # "Jerry" 42 | DIR_NUMBER = 0x53 # "5551234" 43 | 44 | DIAL_CLEAR = 0x61 45 | DIAL_NUMBER = 0x63 46 | 47 | TOP_8_CLEAR = 0x80 48 | TOP_8_NAME = 0x81 49 | TOP_8_NUMBER = 0x82 50 | 51 | SOS = 0xc0 # "SOS: 112!" 52 | 53 | # IKE (Quick Contacts) 54 | IKE_CLEAR = 0x40 55 | IKE_CLEAR_RT = 0x41 56 | IKE_NAME = 0x42 # "TEL1-Jerry" 57 | IKE_NUMBER = 0x43 # "TEL1-5551234" 58 | # "TEL 5551234" 59 | 60 | # ANZV (Call Status) 61 | ON_CALL = 0x01 # "\xC6\xC7" 62 | ON_CALL_HFS = 0x02 # "\xC6" 63 | 64 | --- 65 | 66 | ### Options 67 | 68 | UPDATE = 0x20 69 | SET = 0x30 70 | 71 | --- 72 | 73 | ### String 74 | 75 | Code Point|Name|Description 76 | :--|:--|:-- 77 | `0xc6`|Handsfree|![ALT TEXT](23/c6.JPG) 78 | `0xc7`|On Call (Left)|![ALT TEXT](23/c7.JPG) 79 | `0xc8`|On Call (Right)|![ALT TEXT](23/c8.JPG) 80 | 81 | ## Use Cases 82 | 83 | ### Call Status Indicators 84 | 85 | #### Call 86 | 87 | C8 07 E7 23 01 00 "C7 C8" 05 # Start Call 88 | C8 07 E7 23 01 00 "20 20" 0A # End Call 89 | 90 | #### Handsfree 91 | 92 | C8 07 E7 23 02 00 "C6" 05 # HFS On 93 | C8 06 E7 23 02 00 "20" 28 # HFS Off 94 | 95 | --- 96 | 97 | ### Quick Contacts 98 | 99 | #### Directory 100 | 101 | # Quick Name 102 | C0 80 23 42 20 "TEL1-Jerry" 103 | 104 | # Quick Number 105 | C0 80 23 43 20 "TEL1-5551234" 106 | 107 | #### Dial 108 | 109 | # Clear: End Call 110 | C0 80 23 40 20 "" 111 | 112 | # Dial Contact 113 | C0 80 23 43 20 "TEL 5551234" 114 | 115 | #### Exit 116 | 117 | # Clear: R/T Radio Mode 118 | C0 80 23 41 20 "" 119 | 120 | --- 121 | 122 | *Given that several commands are associated with each use case, they're discussed in their own respective documentation.* 123 | 124 | ### Dial 125 | 126 | [Telephone: Dial](dial.md) 127 | 128 | ![PIN](23/42_0.JPG) 129 | 130 | ### Last Numbers 131 | 132 | [Telephone: Last Numbers](last_numbers.md) 133 | 134 | ![Last Numbers](23/42_1.JPG) 135 | 136 | ### Directory 137 | 138 | [Telephone: Directory](directory.md) 139 | 140 | ![Last Numbers](23/43.JPG) 141 | 142 | ### Top 8 143 | 144 | [Telephone: Top 8](top_8.md) 145 | 146 | ![Last Numbers](23/80.JPG) 147 | 148 | ### Default 149 | 150 | [Telephone: Default](default.md) 151 | 152 | ![Default](23/00.JPG) 153 | 154 | ### PIN 155 | 156 | [Telephone: PIN](pin.md) 157 | 158 | ![PIN](23/05.JPG) -------------------------------------------------------------------------------- /telephone/23/00.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/23/00.JPG -------------------------------------------------------------------------------- /telephone/23/05.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/23/05.JPG -------------------------------------------------------------------------------- /telephone/23/42_0.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/23/42_0.JPG -------------------------------------------------------------------------------- /telephone/23/42_1.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/23/42_1.JPG -------------------------------------------------------------------------------- /telephone/23/43.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/23/43.JPG -------------------------------------------------------------------------------- /telephone/23/80.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/23/80.JPG -------------------------------------------------------------------------------- /telephone/23/c6.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/23/c6.JPG -------------------------------------------------------------------------------- /telephone/23/c7.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/23/c7.JPG -------------------------------------------------------------------------------- /telephone/23/c8.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/23/c8.JPG -------------------------------------------------------------------------------- /telephone/24.md: -------------------------------------------------------------------------------- 1 | # `0x24` Property Text: Telephone 2 | 3 | Telephone `0xc8` → GT `0x3b` 4 | Telephone `0xc8` → MID `0xc0` 5 | 6 | *Only BMBT (GT) usage is discussed!* 7 | 8 | ### Related 9 | 10 | - `0x21` [Menu Text: Telephone](21.md) 11 | - `0x23` [Title Text: Telephone](23.md) 12 | - `0xa5` [Body Text: Telephone](a5.md) 13 | 14 | ### Example Frames 15 | 16 | C8 0C 3B 24 91 00 B8 B8 B8 B8 B8 B8 B8 F2 17 | C8 0B 3B 24 93 00 20 20 20 20 20 30 5F 18 | C8 0C 3B 24 94 00 20 20 20 20 20 20 30 7F 19 | C8 08 3B 24 96 00 20 20 30 79 20 | C8 07 3B 24 97 00 20 30 57 21 | 22 | ## Parameters 23 | 24 | Length will vary with *String*. 25 | 26 | Property|Index|Length|Type 27 | :-------|:----|:-----|:--- 28 | Layout|`0`|`1`|Bitfield 29 | Options|`1`|`1`|Default `0x00` 30 | String|`2`|`-1`|String 31 | 32 | ### Layout 33 | 34 | INFO_SIGNAL_STRENGTH = 0x91 35 | 36 | INFO_CALL_COST = 0x92 # MID only (TBC) 37 | INFO_CALL_COST_CURRENT = 0x93 38 | INFO_CALL_COST_TOTAL = 0x94 39 | 40 | INFO_CALL_TIME = 0x95 # MID only 41 | INFO_CALL_TIME_MINUTES = 0x96 42 | INFO_CALL_TIME_SECONDS = 0x97 43 | 44 | ### Options 45 | 46 | Default value of `0x00` for both BMBT and MID. 47 | 48 | ### String 49 | 50 | Special characters for signal... 51 | 52 | ## Use Cases 53 | 54 | Given that several commands are associated with each use case, they're discussed in their own respective documentation. 55 | 56 | ### Info 57 | 58 | [Telephone: Info](info.md) 59 | 60 | ![Info](24/90.JPG) -------------------------------------------------------------------------------- /telephone/24/90.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/24/90.JPG -------------------------------------------------------------------------------- /telephone/2b.md: -------------------------------------------------------------------------------- 1 | # `0x2b` Telephone LEDs 2 | 3 | Telephone `0xc8` → Displays (Multicast) `0xe7` 4 | 5 | This command controls the BMBT and MID telephone indicators. 6 | 7 | ### Related Commands 8 | 9 | - `0x4a` Tape Control/Radio LED 10 | - `0x4f` [BMBT Monitor Control](../bmbt/4f.md) 11 | 12 | ### Example Frames 13 | 14 | C8 04 E7 2B 00 00 15 | C8 04 E7 2B 10 10 16 | C8 04 E7 2B 14 14 17 | 18 | ## Parameters 19 | 20 | The message length is a fixed. The single data byte is a bitfield. 21 | 22 | LED_RED = 0b0000_0011 23 | LED_YELLOW = 0b0000_1100 24 | LED_GREEN = 0b0011_0000 25 | 26 | ### Red `0b0000_0011` 27 | 28 | LED_RED_OFF = 0b0000_0000 29 | LED_RED_ON = 0b0000_0001 30 | LED_RED_BLINK = 0b0000_0011 31 | 32 | ### Yellow `0b0000_1100` 33 | 34 | LED_YELLOW_OFF = 0b0000_0000 35 | LED_YELLOW_ON = 0b0000_0100 36 | LED_YELLOW_BLINK = 0b0000_1100 37 | 38 | ### Green `0b0011_0000` 39 | 40 | LED_GREEN_OFF = 0b0000_0000 41 | LED_GREEN_ON = 0b0001_0000 42 | LED_GREEN_BLINK = 0b0011_0000 43 | 44 | ## Use Cases 45 | 46 | More so "usage" than "use cases", but anyhow.. 47 | 48 | C8 04 E7 2B 01 01 # Red: On 49 | C8 04 E7 2B 03 03 # Red: Blink 50 | 51 | C8 04 E7 2B 04 04 # Yellow: On 52 | C8 04 E7 2B 0C 0C # Yellow: Blink 53 | 54 | C8 04 E7 2B 10 10 # Green: On 55 | C8 04 E7 2B 30 30 # Green: Blink -------------------------------------------------------------------------------- /telephone/2c.md: -------------------------------------------------------------------------------- 1 | # `0x2c` Telephone Status 2 | 3 | The telephone reports it's status to ANZV `0xe7` via command `0x2c`. 4 | 5 | ## Examples 6 | 7 | C8 04 E7 2C 00 07 8 | C8 04 E7 2C 12 15 9 | C8 04 E7 2C 10 17 10 | 11 | ## Properties 12 | 13 | Fixed length bitfield of one byte. 14 | 15 | # Bitmasks 16 | HANDSFREE = 0b0000_0001 17 | UNKNOWN = 0b0000_0010 18 | ESTABLISHING_CALL = 0b0000_0100 19 | 20 | POWER = 0b0001_0000 21 | ON_CALL = 0b0010_0000 22 | 23 | ## Handsfree `0b0000_0001` 24 | 25 | Denotes whether the call is taking place via handset, or via handsfree (speaker phone). This flag has several effects discussed below. 26 | 27 | HANDSET = 0b0000_0000 28 | HANDSFREE = 0b0000_0001 29 | 30 | ### Handsfree Icon (BMBT) 31 | When handsfree is active the BMBT displays the speaker phone icon. 32 | 33 | ![ALT TEXT](2c/handsfree/handsfree_telephone.JPG) 34 | 35 | ### Handsfree Icon (MID) 36 | 37 | I've noticed that switching between handset/handsfree also causes the following to be sent: 38 | 39 | # Handsfree On 40 | C8 07 E7 23 02 00 "C6" 05 41 | 42 | # Handsfree Off 43 | C8 06 E7 23 02 00 "20" 28 44 | 45 | This is likely for **MID**, as `0xc6` is the character code for the speaker icon. 46 | 47 | ![ALT TEXT](2c/handsfree/handsfree_char.JPG) 48 | 49 | ### Volume Control 50 | 51 | When handsfree is active, the BMBT and MFL will send volume control commands to telephone instead of radio. 52 | 53 | # Handsfree: volume control sent to telephone 54 | F0 04 C8 32 21 2F # BMBT 55 | 50 04 C8 32 11 BF # MFL 56 | 57 | # Handset: volume conrol sent to radio 58 | F0 04 68 32 21 8F # BMBT 59 | 50 04 68 32 11 1F # MFL 60 | 61 | This is due to the telephone having an audio output that- unlike most audio sources, is not routed via the radio, thus requiring independent volume control. 62 | 63 | ## Unknown `0b0000_0010` 64 | 65 | I've not been able to discern what this represents. It might be related to an action on the handset. 66 | 67 | NFI_OFF = 0b0000_0000 68 | NFI_ON = 0b0000_0001 69 | 70 | ## Establishing Call `0b0000_0100` 71 | 72 | This denotes an incoming, or outgoing call. 73 | 74 | # INACTIVE = 0b0000_0000 75 | # ESTABLISHING = 0b0000_0100 76 | 77 | When set, the following screen is displayed: 78 | 79 | ![ALT TEXT](2c/incoming/incoming_title.JPG) 80 | 81 | ### Caller ID 82 | 83 | The layout will have no text, but this can be added via: 84 | 85 | C8 E7 23 80 20 "Incoming Call" 86 | C8 E7 23 81 20 "Incoming Call" 87 | C8 E7 23 82 20 "Incoming Call" 88 | 89 | ## Power `0b0001_0000` 90 | 91 | # TELEPHONE_OFF = 0b0000_0000 92 | # TELEPHONE_ON = 0b0001_0000 93 | 94 | _Note: If bit is not set, GT will default to Main Menu. For example, if active bit is set for a call, upon setting to 0, GT will close Telephone and return to Main Menu._ 95 | 96 | ## On Call `0b0010_0000` 97 | 98 | Denotes if the a call is active. 99 | 100 | # NO_CALL = 0b0000_0000 101 | # ON_CALL = 0b0010_0000 102 | 103 | ### On Call Icon (BMBT) 104 | When on a call the telephone icon on the BMBT will change to red, denoting "end call". 105 | 106 | ![ALT TEXT](2c/active/active_telephone.JPG) 107 | 108 | ### On Call Icon (MID) 109 | Like Handsfree, there's an additional message sent to ANZV, which may be for the **MID**. 110 | 111 | # Start Call 112 | C8 07 E7 23 01 00 "C7 C8" 05 113 | 114 | # End Call 115 | C8 07 E7 23 01 00 "20 20" 0A 116 | 117 | ![ALT TEXT](2c/active/active_chars.JPG) 118 | -------------------------------------------------------------------------------- /telephone/2c/active/active_chars.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/2c/active/active_chars.JPG -------------------------------------------------------------------------------- /telephone/2c/active/active_directory.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/2c/active/active_directory.JPG -------------------------------------------------------------------------------- /telephone/2c/active/active_telephone.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/2c/active/active_telephone.JPG -------------------------------------------------------------------------------- /telephone/2c/handsfree/handsfree_char.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/2c/handsfree/handsfree_char.JPG -------------------------------------------------------------------------------- /telephone/2c/handsfree/handsfree_directory.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/2c/handsfree/handsfree_directory.JPG -------------------------------------------------------------------------------- /telephone/2c/handsfree/handsfree_telephone.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/2c/handsfree/handsfree_telephone.JPG -------------------------------------------------------------------------------- /telephone/2c/incoming/incoming.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/2c/incoming/incoming.JPG -------------------------------------------------------------------------------- /telephone/2c/incoming/incoming_title.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/2c/incoming/incoming_title.JPG -------------------------------------------------------------------------------- /telephone/2d.md: -------------------------------------------------------------------------------- 1 | # `0x2d` Direct Dial 2 | 3 | GT `0x3b` → Telephone `0xc8` 4 | 5 | 6 | Note: This command only seems to work with BMW Assist compatible phones. 7 | - Motorola HW 06 and SW 05 (or higher) 8 | - BIT HW 02 and SW 04 (or higher) 9 | 10 | ### Example Frames 11 | 12 | 3B 13 C8 2D 00 11 2B 34 39 38 39 31 32 35 30 31 36 30 30 30 CA # +4989125016000 (BMW Germany) 13 | 3B 11 C8 2D 00 11 2B 31 38 30 30 38 33 31 31 31 31 37 C0 # +18008311117 (BMW USA) 14 | 15 | ## Parameters 16 | 17 | Length will vary with *String*. 18 | 19 | Property| Index |Length|Type 20 | :-------|:------|:-----|:--- 21 | Phone Number| `2` |`-1`|String 22 | 23 | 24 | ## Use Cases 25 | 26 | ### Navigation POI List 27 | 28 | > The user can directly dial a number of a service center, fuel station or any other POI with a phone number. 29 | 30 | ### BMW Assist 31 | 32 | > BMW Assist probably uses this command too, but this is unconfirmed. -------------------------------------------------------------------------------- /telephone/a5.md: -------------------------------------------------------------------------------- 1 | # `0xa5` Body Text: Telephone 2 | 3 | Telephone `0xc8` → GT `0x3b` 4 | 5 | This command was seemingly introduced to support the telematics and SMS displays. (It also supported the Radio's MP3 display which was introduced later.) 6 | 7 | These new displays meant the maximum character count for a given index could not be written without exceeding a soft frame size limit, which if exceeded, can cause a GT buffer overflow. 8 | 9 | The command allows specifying a cursor offset for a given index (line), thus allowing multiple writes to said line, the cursor position being advanced for each successive write. 10 | 11 | The usage is otherwise identical to `0x21`, so much so that `0xa5` and `0x21` can effectively be used interchangeably, albeit with possible unintended consequences. 12 | 13 | ### Related 14 | 15 | - `0x21` Menu Text: Radio 16 | - `0x21` Menu Text: Cluster 17 | - `0xa5` Body Text: Radio 18 | 19 | ### Example Frames 20 | 21 | C8 1F 3B A5 F1 05 60 59 6F 75 72 20 63 75 72 72 65 6E 74 20 70 6F 73 69 74 69 6F 6E 20 69 73 3A 9C 22 | C8 14 3B A5 F1 05 41 4D 45 4C 42 4F 55 52 4E 45 2C 20 56 49 43 E2 23 | C8 11 3B A5 F1 05 42 43 4F 4C 4C 49 4E 53 20 53 54 3B B5 24 | C8 19 3B A5 F1 05 44 33 37 B0 20 34 38 27 20 35 31 2E 36 22 20 53 6F 75 74 68 2B 25 | C8 19 3B A5 F1 05 45 31 34 34 B0 20 35 38 27 20 31 34 2E 35 22 20 45 61 73 74 6A 26 | 27 | ## Parameters 28 | 29 | Length will vary with *String*. 30 | 31 | Property|Index|Length|Type 32 | :-------|:----|:-----|:--- 33 | Layout|`0`|`1`|Bitfield 34 | Offset|`1`|`1`|Bitfield 35 | Options|`2`|`1`|Bitfield 36 | String|`3`|`-1`|String 37 | 38 | --- 39 | 40 | ### Layout 41 | 42 | DETAIL = 0xf1 # SMS: Message, SOS/Emergency 43 | 44 | --- 45 | 46 | ### Offset 47 | 48 | The 5 LSBs represent the offset, thus allowing an offset between 0 and 31 characters (`2^5`). 49 | 50 | # Note: an offset of 0 chars is _not_ 0x00! 51 | 52 | 0b0000_0001 # 0 chars offset 53 | 0b0000_0010 # 1 chars offset 54 | 0b0000_0011 # 2 chars offset 55 | # [...] 56 | 0b0001_1101 # 29 chars offset 57 | 0b0001_1110 # 30 chars offset 58 | 0b0001_1111 # 31 chars offset 59 | 60 | --- 61 | 62 | ### Options 63 | 64 | INDEX = 0b0001_1111 # Index of field to write to 65 | CLEAR = 0b0010_0000 # Clear layout 66 | BUFFER = 0b0100_0000 # Buffer the write 67 | HIGHLIGHT = 0b1000_0000 # Highlight given field 68 | 69 | *See `0x21` for usage.* 70 | 71 | --- 72 | 73 | ### String 74 | 75 | Code Point|Name|Description 76 | :--|:--|:-- 77 | `0x00`|NUL|Null-terminated string 78 | `0x06`|LF|Line Feed 79 | 80 | ## Use Cases 81 | 82 | Given that several commands are associated with each use case, they're discussed in their own respective documentation. 83 | 84 | ### SMS: Message 85 | 86 | [Telephone: SMS Message](detail.md) 87 | 88 | ![SMS Detail](21/f1.jpeg) 89 | 90 | ### SOS/Emergency 91 | 92 | [Telephone: Emergency](detail.md) 93 | 94 | ![SOS/Emergency](sms/sms_emergency.jpg) -------------------------------------------------------------------------------- /telephone/a6.md: -------------------------------------------------------------------------------- 1 | # `0xa6` SMS Icon 2 | 3 | ![icon](a6/icon.JPG) 4 | 5 | This icon is displayed when an SMS has been received and not yet read. 6 | 7 | # Show icon 8 | C8 05 E7 A6 00 01 8D 9 | 10 | # Hide icon 11 | C8 05 E7 A6 00 00 8D 12 | 13 | This appears to be the only icon available having iterated `00 00` through `FF FF`. 14 | -------------------------------------------------------------------------------- /telephone/a6/icon.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/a6/icon.JPG -------------------------------------------------------------------------------- /telephone/default.md: -------------------------------------------------------------------------------- 1 | # Telephone: Default 2 | 3 | This is the fallback layout which I believe is only used in the event of a Telephone error. 4 | 5 | ![Default Layout Example](default/default_error.JPG) 6 | 7 | The CMT4000 in the 528i would (prior to sourcing a SIM card the size of a surfboard) display "INSERT CARD!" using this layout. 8 | 9 | I stumbled upon another message "Phone Connected?" in a random YouTube video which I presume is for the later Motorola V-Series cradles with detachable handsets. 10 | 11 | ## Create/Update 12 | 13 | - can only be created by `0x23` 14 | - there is only a single line 15 | - not possible to use carriage return/link break 16 | 17 | ![Create Default Layout](default/default_create.JPG) 18 | 19 | 20 | C8 3B 23 00 00 "23 00 Default Layout" 21 | 22 | 23 | ### Flashing Text 24 | 25 | [![Default Flash](http://img.youtube.com/vi/Zh3U35ADoQg/0.jpg)](https://www.youtube.com/watch?v=Zh3U35ADoQg) 26 | 27 | # Prefix string with control character 0x01 28 | C8 3B 23 00 00 "Here is some..." 01 "flashing text!" 29 | 30 | 31 | ## Inputs 32 | 33 | Default > SOS > SOS 3B 06 C8 31 00 05 08 # Press 34 | -------------------------------------------------------------------------------- /telephone/default/default_create.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/default/default_create.JPG -------------------------------------------------------------------------------- /telephone/default/default_error.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/default/default_error.JPG -------------------------------------------------------------------------------- /telephone/detail.md: -------------------------------------------------------------------------------- 1 | # Telephone: SMS Message & Emergency 2 | 3 | ![SMS Message Reference](detail/reference_sms_message.jpeg) 4 | 5 | ## Create 6 | 7 | This is, near as makes no difference, the same as creating radio layouts with a few minor differences. 8 | 9 | ![Create SMS Layout](detail/message_create.JPG) 10 | 11 | # Lines 12 | C8 3B 21 F1 00 60 "Line 0" # Always grey! 13 | C8 3B 21 F1 00 41 "Line 1" 14 | C8 3B 21 F1 00 42 "Line 2" 15 | C8 3B 21 F1 00 43 "Line 3" 16 | C8 3B 21 F1 00 44 "Line 4" 17 | C8 3B 21 F1 00 45 "Line 5" 18 | 19 | # Back 20 | # I use 0x01 just as to more easily identify Back 21 | # Factory may use something else all together. 22 | C8 3B 21 F1 50 01 23 | 24 | # Buttons 25 | C8 3B 21 F1 51 "LEFT" 26 | C8 3B 21 F1 52 "RIGHT" 27 | C8 3B 21 F1 53 "CENTRE" 28 | 29 | # 0x23 won't render like with some Radio layouts 30 | # 0xA5 will both set the title and render layout 31 | C8 3B A5 F1 00 00 "a5 F1 00 00 Title" 32 | 33 | ### Offset 34 | 35 | The `0xa5` command was seemingly introduced to allow defining an offset (akin to string buffer cursor pos). This allows writing to a the same index/line where using a single message will exceed the frame limit, thus causing buffer overflow. 36 | 37 | # Offset 38 | # 5 LSBs in first argument can be used to pad text 39 | 40 | C8 3B A5 01 00 # Offset 0 41 | C8 3B A5 02 00 # Offset 1 42 | C8 3B A5 03 00 # Offset 2 43 | C8 3B A5 04 00 # Offset 3 44 | C8 3B A5 05 00 # Offset 4 45 | C8 3B A5 06 00 # Offset 5 46 | 47 | ### Buttons 48 | - the buttons will only be displayed if their label is set 49 | - this includes the "Back" button, which can also be omitted 50 | 51 | ![Subset Of Buttons](detail/message_buttons.JPG) 52 | 53 | # Display only "Back" and middle buttons 54 | # Lines... 55 | C8 3B 21 F1 00 50 01 56 | C8 3B 21 F1 00 53 "21 F1 00 53" 57 | # Render... 58 | 59 | 60 | ### User Defined Button ID 61 | 62 | It's possible to set the value returned by `0x31` when an item is selected. 63 | 64 | This might be important in the event that telematics are still active in the vehicle! As the Emergency function (seemingly) uses the same layout, it's worth double checking how the telephone distinguishes between SMS and Emergency. 65 | 66 | 67 | # Set Left button ID to 0x77 68 | C8 3B 21 F1 77 51 "LEFT" 69 | 70 | # ID 0x77 returned by 0x31 when button selected! 71 | 3B C8 31 F1 77 11 # Press 72 | 73 | #### WARNING! 74 | **I've since noticed that once the button ID is set, _it cannot be changed_! I've tried updating the button label, hiding then showing it again, etc etc, but it's only after GT renders Main menu that the ID can be changed. This caught me out as I was using ID to keep everything stateless.** 75 | 76 | #### _Warning!_ 77 | _Once the button ID is set, it cannot be changed!_ It's not until GT renders Main Menu, that this value can be changed. Updating the button label, or removing the button altogether before attempting to change the value had no effect. 78 | 79 | ### Default Selected Button 80 | 81 | Set the highlighted button: 82 | 83 | ![Default Button](detail/message_button_left.JPG) 84 | 85 | # Select LEFT button by default 86 | 87 | # Add 0b1000_0000 (0x80) to third argument (0x51) 88 | # Bitwise OR 89 | # 0b1000_0000 (0x80) 90 | # 0b0101_0001 (0x51) 91 | # ----------- 92 | # 0b1101_0001 (0xd1) 93 | # =========== 94 | 95 | C8 3B 21 F1 00 D1 "0xd1" 96 | C8 3B A5 F1 00 00 "Vote Left! 0xd1" 97 | 98 | 99 | ![Default Button 2](detail/message_button_right.JPG) 100 | 101 | # Select RIGHT button by default 102 | # 0b1000_000|0x52 => 0xd2 103 | 104 | C8 3B 21 F1 00 D2 "0xd2" 105 | C8 3B A5 F1 00 00 "Vote Right! 0xd2" 106 | 107 | 108 | ### Line Breaks 109 | 110 | These must be used with care. The GT definitely has a fixed buffer size, and exceeding it causes all kinds of mayhem! 111 | 112 | ![Line Break](detail/message_cr.JPG) 113 | 114 | # Line Break 115 | C8 3B 21 F1 00 60 "Line 0" 116 | C8 3B 21 F1 00 41 "Not quite auto wrap but" 06 117 | "in the circumstances, we'll take it!" 118 | 119 | C8 3B A5 F1 00 00 "Line Break" 120 | 121 | 122 | ## Inputs 123 | 124 | # Back 125 | SMS Show > > Back 3B 06 C8 31 f1 10 126 | 127 | # Buttons 128 | SMS Show > > Left 3B 06 C8 31 f1 11 129 | SMS Show > > Right 3B 06 C8 31 f1 12 130 | SMS Show > > Middle 3B 06 C8 31 f1 13 131 | 132 | 133 | ## Updates 134 | 135 | It's possible to update effectively any subset of fields, thus mitigating the need to write the entire display again. 136 | 137 | Ensure the "flush" bit isn't set on any commands, which will otherwise clear the entire display. 138 | 139 | ### Add Button 140 | 141 | ![Add Button](detail/message_button_update_add.JPG) 142 | 143 | # Add a button 144 | C8 3B 21 F1 00 52 "I'm new" 145 | C8 3B A5 F1 00 00 "New button!" 146 | 147 | # To select the new button add 0b1000_0000 148 | C8 3B 21 F1 00 D2 "I'm new" 149 | C8 3B A5 F1 00 00 "New button!" 150 | 151 | ### Remove Button 152 | 153 | ![Remove Button](detail/message_button_update_remove.JPG) 154 | 155 | # Remove a button 156 | # Use null-terminated string 157 | # https://en.wikipedia.org/wiki/Null-terminated_string 158 | 159 | C8 3B 21 F1 00 50 00 # remove centre button 160 | C8 3B 21 F1 00 51 "hello?" # add left button 161 | C8 3B A5 F1 00 00 "Late to the party..." 162 | -------------------------------------------------------------------------------- /telephone/detail/message_button_left.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/detail/message_button_left.JPG -------------------------------------------------------------------------------- /telephone/detail/message_button_right.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/detail/message_button_right.JPG -------------------------------------------------------------------------------- /telephone/detail/message_button_update_add.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/detail/message_button_update_add.JPG -------------------------------------------------------------------------------- /telephone/detail/message_button_update_remove.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/detail/message_button_update_remove.JPG -------------------------------------------------------------------------------- /telephone/detail/message_buttons.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/detail/message_buttons.JPG -------------------------------------------------------------------------------- /telephone/detail/message_cr.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/detail/message_cr.JPG -------------------------------------------------------------------------------- /telephone/detail/message_create.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/detail/message_create.JPG -------------------------------------------------------------------------------- /telephone/detail/reference_sms_message.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/detail/reference_sms_message.jpeg -------------------------------------------------------------------------------- /telephone/dial.md: -------------------------------------------------------------------------------- 1 | # Telephone: Dial 2 | 3 | ![Example Dial Layout](dial/dial_create.JPG) 4 | 5 | ## Create 6 | 7 | There's not a great deal one can do here. 8 | 9 | I have attempted to update the various fields to set a new value that is returned by `0x31`, but without success. 10 | 11 | Maybe the only thing worth noting is that the second argument is `0x02`, which is what is returned by `0x31` when a digit is selected (as it is with Pin-Code). Also, that the third argument- `0x20`, has the flush bit set. These might be used by the older GT, or MID? 12 | 13 | # Open Dial/Home 14 | C8 06 3B 21 42 02 20 B4 15 | # ^ * 16 | # ^ value returned by 0x31 17 | # * flush bit set 0b0010_0000 => 0x20 18 | 19 | ## Input 20 | 21 | _NOTE: Last Numbers is in a separate doc._ 22 | 23 | # Press event 24 | Input > Dial > Digit > 0 3B 06 C8 31 42 02 00 25 | Input > Dial > Digit > 1 3B 06 C8 31 42 02 01 26 | Input > Dial > Digit > 2 3B 06 C8 31 42 02 02 27 | Input > Dial > Digit > 3 3B 06 C8 31 42 02 03 28 | Input > Dial > Digit > 4 3B 06 C8 31 42 02 04 29 | Input > Dial > Digit > 5 3B 06 C8 31 42 02 05 30 | Input > Dial > Digit > 6 3B 06 C8 31 42 02 06 31 | Input > Dial > Digit > 7 3B 06 C8 31 42 02 07 32 | Input > Dial > Digit > 8 3B 06 C8 31 42 02 08 33 | Input > Dial > Digit > 9 3B 06 C8 31 42 02 09 34 | Input > Dial > Digit > <- 3B 06 C8 31 42 02 0a 35 | Input > Dial > Digit > * 3B 06 C8 31 42 02 1a 36 | Input > Dial > Digit > # 3B 06 C8 31 42 02 1b 37 | 38 | Input > Dial > SOS > SOS 3B 06 C8 31 42 05 08 39 | 40 | Input > Dial > Open > Messaging 3B 06 C8 31 42 07 1d 41 | Input > Dial > Open > Directory 3B 06 C8 31 42 07 1f 42 | 43 | Input > Dial > Info > Info 3B 06 C8 31 42 08 0a 44 | 45 | # Note: selecting Top 8 sends command 0x20 46 | 47 | # Hold and Release add 0x20 and 0x40 respectively to last byte 48 | # Example: Input Dial Digit 7 49 | 3B 06 C8 31 42 02 07 # Press 50 | 3B 06 C8 31 42 02 27 # Hold 51 | 3B 06 C8 31 42 02 47 # Release 52 | 53 | ## Update 54 | 55 | ### Digits 56 | 57 | ![Dial Layout Digits](dial/dial_update_digits.JPG) 58 | 59 | # Dial number buffer 60 | # factory telephone has leading character "_", i.e. "123_" 61 | C8 3B 23 63 00 "5551234" 62 | 63 | # Clear number buffer 64 | C8 05 3B 23 61 20 94 65 | # ^ 66 | # Factory unit sets IKE argument regardless of sending to GT, 67 | # or broadcast. 68 | 69 | 70 | The factory usually has a leading character \"_\" 71 | -------------------------------------------------------------------------------- /telephone/dial/dial_create.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/dial/dial_create.JPG -------------------------------------------------------------------------------- /telephone/dial/dial_update_digits.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/dial/dial_update_digits.JPG -------------------------------------------------------------------------------- /telephone/directory.md: -------------------------------------------------------------------------------- 1 | # Telephone: Directory 2 | 3 | ![Directory Example](directory/directory_create.JPG) 4 | 5 | ## Create 6 | 7 | - Unlike Radio menus it's not possible to specify the index of the target field. 8 | - Each individual field must be prefixed with the delimiter character `0x06`. 9 | 10 | ![Directory Delimiter](directory/directory_21.JPG) 11 | 12 | C8 3B 21 43 01 60 06 "A" 06 "B" 13 | C8 3B 21 43 01 44 06 "A" 06 "B" 14 | C8 3B 21 43 01 50 06 "A" 06 "B" 15 | C8 3B 21 43 01 14 06 "A" 06 "B" 16 | 17 | I believe the seemingly ignored index value is for use by the MID. It's possible to omit it entirely and still have the directory render correctly on the BMBT- although, I'm not quite sure 18 | what effect this has on the MID! 19 | 20 | C8 3B 21 43 01 60 06 "A" 06 "B" 21 | C8 3B 21 43 01 40 06 "A" 06 "B" 22 | C8 3B 21 43 01 40 06 "A" 06 "B" 23 | C8 3B 21 43 01 00 06 "A" 06 "B" 24 | # ^ 25 | # the 3 MSBs are still required for clearing/buffering! 26 | 27 | If the MID isn't on the radar, there's no need to write contacts in pairs. 28 | 29 | C8 3B 21 43 01 20 06 "A" 06 "B" 06 "C" 06 "D" 30 | 31 | Just be mindful that the GT will crash long before the frame size limit of 257 bytes is reached. Writing more than about 40 characters isn't recommended. Although this shouldn't be an issue as there's (allowing for the variable width type face) only 11 characters or so per field. 32 | 33 | 34 | ## Inputs 35 | 36 | Much like Radio menus, GT `0x3B` will send `0x31` to TEL `0xC8`. 37 | 38 | ![Directory Inputs](directory/directory_31.JPG) 39 | 40 | # Press Events 41 | 42 | # Contacts 43 | Directory > Contact > 1 3B 06 C8 31 43 01 00 44 | Directory > Contact > 2 3B 06 C8 31 43 01 02 45 | Directory > Contact > 3 3B 06 C8 31 43 01 04 46 | Directory > Contact > 4 3B 06 C8 31 43 01 06 47 | 48 | Directory > Contact > 5 3B 06 C8 31 43 01 10 49 | Directory > Contact > 6 3B 06 C8 31 43 01 12 50 | Directory > Contact > 7 3B 06 C8 31 43 01 14 51 | Directory > Contact > 8 3B 06 C8 31 43 01 16 52 | 53 | # Previous/Next 54 | Directory > Default > << 3B 06 C8 31 43 00 0c 55 | Directory > Default > >> 3B 06 C8 31 43 00 0d 56 | 57 | # Back 58 | Directory > Open > Dial 3B 06 C8 31 43 07 1e 59 | 60 | ## Updates 61 | 62 | ### Menu 63 | 64 | - Attempting to update a single menu item will cause the entire menu to be cleared. 65 | - Unlike Radio menus, whereby calling `0xA5` can recall a display, the Directory isn't cached, meaning, if for any reason the screen is closed (i.e. returning to Main Menu), the menu must be drawn again. 66 | 67 | ### Contact Selection 68 | 69 | #### Directory Contact Name 70 | ![Directory Contact Name](directory/directory_name.JPG) 71 | 72 | # Contact Name 73 | C8 3B 23 52 00 "F.Fatty" 74 | 75 | #### Directory Contact Number 76 | ![Directory Contact Number](directory/directory_number.JPG) 77 | 78 | # Contact Number 79 | C8 3B 23 53 00 "555 999" 80 | -------------------------------------------------------------------------------- /telephone/directory/directory_21.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/directory/directory_21.JPG -------------------------------------------------------------------------------- /telephone/directory/directory_31.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/directory/directory_31.JPG -------------------------------------------------------------------------------- /telephone/directory/directory_create.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/directory/directory_create.JPG -------------------------------------------------------------------------------- /telephone/directory/directory_name.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/directory/directory_name.JPG -------------------------------------------------------------------------------- /telephone/directory/directory_number.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/directory/directory_number.JPG -------------------------------------------------------------------------------- /telephone/info.md: -------------------------------------------------------------------------------- 1 | # Telephone: Info 2 | 3 | ![Info Example](info/info_create.JPG) 4 | 5 | ## Create 6 | 7 | # Strength 0 bars: (0 through 7 bars) 8 | C8 3B 24 91 b8 5a 5a 5a 5a 5a 5a 9 | C8 3B 24 91 5f 5a 5a 5a 5a 5a 5a 10 | C8 3B 24 91 b7 5a 5a 5a 5a 5a 5a 11 | C8 3B 24 91 b6 5a 5a 5a 5a 5a 5a 12 | C8 3B 24 91 b5 5a 5a 5a 5a 5a 5a 13 | C8 3B 24 91 b4 5a 5a 5a 5a 5a 5a 14 | C8 3B 24 91 b3 5a 5a 5a 5a 5a 5a 15 | C8 3B 24 91 b2 5a 5a 5a 5a 5a 5a 16 | 17 | # Call cost current C8 3B 24 93 18 | # Call cost total C8 3B 24 94 19 | 20 | # Call time minutes C8 3B 24 96 21 | # Call time seconds C8 3B 24 97 22 | 23 | ### Subset of fields 24 | 25 | - only the fields which are written will be displayed 26 | - to exclude costs for example, simply omit fields `0x93` and `0x94` 27 | - once a field is set, it's not possible to hide it. 28 | - _TODO: try null-terminated string!_ 29 | 30 | ![Info Subset](info/info_subset.JPG) 31 | 32 | # Subset of Info fields 33 | C8 11 3B 24 91 b3 5a 5a 5a 5a 5a 5a # Strength 34 | C8 06 3B 24 96 "47" # call minutes 35 | C8 06 3B 24 97 "02" # call seconds 36 | 37 | ### Usage? 38 | I'm not entirely sure if this is displayed automatically upon accepting a call, but if so, presumably the text might be the caller name/number. 39 | 40 | ![NOT FOUND](info/info_title.JPG) 41 | 42 | # Info Title 43 | C8 3B 24 91 00 "Info Title" 44 | 45 | ## Inputs 46 | 47 | # Back 48 | Info > Open > Dial 3B 06 C8 31 90 07 1e # Press 49 | 50 | ## Updates 51 | 52 | Each field can be written any given number of times as to update it. 53 | 54 | # Info call timer 55 | C8 05 3B 24 96 "0" # 0:-- 56 | C8 05 3B 24 97 "00" # 0:00 57 | C8 05 3B 24 97 "01" # 0:01 58 | # ... 59 | C8 05 3B 24 97 "58" # 0:58 60 | C8 05 3B 24 97 "59" # 0:59 61 | C8 05 3B 24 96 "1" # 1:59 62 | C8 05 3B 24 97 "00" # 1:00 63 | C8 05 3B 24 97 "01" # 1:01 64 | -------------------------------------------------------------------------------- /telephone/info/info_create.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/info/info_create.JPG -------------------------------------------------------------------------------- /telephone/info/info_subset.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/info/info_subset.JPG -------------------------------------------------------------------------------- /telephone/info/info_title.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/info/info_title.JPG -------------------------------------------------------------------------------- /telephone/last_numbers.md: -------------------------------------------------------------------------------- 1 | # Telephone: Last Numbers 2 | 3 | Squeezed into **Dial** is **Last Numbers**. 4 | 5 | ## Inputs 6 | 7 | ![Last Numbers Example](last_numbers/open.JPG) 8 | 9 | # Open "Last Numbers" 10 | 3B 06 C8 31 00 00 0D C8 11 | 12 | As this command is also used for "next" last number, a number is rendered upon open. 13 | 14 | ![Open Last Numbers](last_numbers/last_numbers_create.JPG) 15 | 16 | 17 | # Close "Last Numbers" 18 | # No input received! 19 | 20 | Last Numbers is closed by confirming with the rotary knob. A `0x31` command isn't sent to the telephone, meaning the last written number remains on the display unless otherwise cleared. This may be normal behaviour, but TBC. 21 | 22 | 23 | ![Close Last Numbers](last_numbers/last_numbers_destroy.JPG) 24 | 25 | Navigating the numbers is then done with the rotary knob. Unlike volume controls, there's no "magnitude", and rotating the control at a faster rate simply sends the same command at a higher frequency. 26 | 27 | ![NOT FOUND](last_numbers/number.JPG) 28 | 29 | # Previous Number (Rotary Left Turn) 30 | 3B 06 C8 31 00 00 0C C9 31 | # C8 3B 23 ... 32 | 33 | # Next Number (Rotary Right Turn) 34 | 3B 06 C8 31 00 00 0D C8 35 | # C8 3B 23 ... 36 | 37 | 38 | ### Conflict with Directory Input 39 | 40 | **Last Numbers** is a bit of a pain in that the command sent to go back/forward is identical to that sent when "<<" and ">>" are selected in **Directory**. 41 | 42 | # Directory "<<" (Press) 43 | 3B 06 C8 31 00 00 0C C9 44 | 45 | # Directory ">>" (Press) 46 | 3B 06 C8 31 00 00 0D C8 47 | 48 | This is similar to **Main Menu** vs. **Top-8**, which also use the same commands. As in that case, by having telephone maintain a state/session, it can differentiate the commands appropriately. This could be based on which layout was drawn last, i.e. **Dial** `0x42`, **Directory** `0x43` etc. 49 | 50 | ## Update 51 | 52 | This is identical to setting/cleaning the dial digits. 53 | 54 | # Set Number 55 | C8 3B 23 63 20 "555 1234" 56 | 57 | # Clear Number 58 | C8 05 3B 23 61 20 94 59 | -------------------------------------------------------------------------------- /telephone/last_numbers/last_numbers_create.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/last_numbers/last_numbers_create.JPG -------------------------------------------------------------------------------- /telephone/last_numbers/last_numbers_destroy.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/last_numbers/last_numbers_destroy.JPG -------------------------------------------------------------------------------- /telephone/last_numbers/number.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/last_numbers/number.JPG -------------------------------------------------------------------------------- /telephone/last_numbers/open.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/last_numbers/open.JPG -------------------------------------------------------------------------------- /telephone/list.md: -------------------------------------------------------------------------------- 1 | # Telephone: SMS Index 2 | 3 | ![SMS Index Example](list/reference_sms_index.jpeg) 4 | 5 | ## Create 6 | 7 | This is very similar to using radio layouts. 8 | 9 | ![SMS Index Create](list/index_create.JPG) 10 | 11 | 12 | # Items 13 | C8 3B 21 F0 00 60 14 | C8 3B 21 F0 00 41 15 | C8 3B 21 F0 00 42 16 | C8 3B 21 F0 00 43 17 | C8 3B 21 F0 00 44 18 | C8 3B 21 F0 00 45 19 | C8 3B 21 F0 00 46 20 | C8 3B 21 F0 00 47 21 | C8 3B 21 F0 00 48 22 | C8 3B 21 F0 00 49 23 | C8 3B 21 F0 00 53 # Lonely item in top right 24 | 25 | # Back Button 26 | C8 3B 21 F0 00 50 27 | 28 | # Title and render layout 29 | C8 3B A5 F0 01 00 30 | 31 | 32 | ### Default Selected Item 33 | 34 | ![Default Item](list/index_default.JPG) 35 | 36 | # Highlight 5th Item 37 | # Add 0b1000_0000 (0x80) to last argument (0x44) 38 | # 0x44 | 0x80 = 0xC4 39 | 40 | C8 3B 21 F0 00 C4 # I am chosen! 41 | 42 | ### User Defined Item ID 43 | 44 | The value returned by `0x31` can be specified. 45 | 46 | ![User Defined IDs](list/index_custom_id.JPG) 47 | 48 | # User Defined IDs denoted by: [XX] 49 | 50 | # Items 51 | C8 3B 21 F0 [FF] 60 "21 F0 FF 60" 52 | C8 3B 21 F0 [EE] 41 "21 F0 EE 41" 53 | C8 3B 21 F0 [DD] 42 "21 F0 DD 42" 54 | C8 3B 21 F0 [CC] 43 "21 F0 CC 43" 55 | C8 3B 21 F0 [BB] 44 "21 F0 BB 44" 56 | C8 3B 21 F0 [AA] 45 "21 F0 AA 45" 57 | C8 3B 21 F0 [99] 46 "21 F0 99 46" 58 | C8 3B 21 F0 [88] 47 "21 F0 88 47" 59 | C8 3B 21 F0 [77] 48 "21 F0 77 48" 60 | C8 3B 21 F0 [66] 49 "21 F0 66 49" 61 | C8 3B 21 F0 [44] 53 "21 F0 44 53" # Out of order field 62 | 63 | # Back button accepts ID! 64 | C8 3B 21 F0 [55] 50 "21 F0 55 50" 65 | 66 | # Title and render layout 67 | C8 3B A5 F0 00 00 "User Defined ID" 68 | 69 | **User Defined IDs Returned by `0x31`** 70 | ![User Defined IDs](list/index_custom_id_input.JPG) 71 | 72 | 73 | #### _Warning!_ 74 | _Once the button ID is set, it cannot be changed!_ It's not until GT renders Main Menu, that this value can be changed. Updating the button label, or removing the button altogether before attempting to change the value had no effect. 75 | 76 | ### Title Only 77 | 78 | Lines and Inputs can be omitted, and just the title set, ala "BLUETOOTH PAIRING". 79 | 80 | ![Title Only Reference](list/reference_pairing.jpg) 81 | 82 | 83 | ![Title Only](list/index_title.JPG) 84 | 85 | # Title Only 86 | C8 3B A5 F0 00 00 "BLUETOOTH PAIRING" 87 | 88 | ## Inputs 89 | 90 | ![Input Press](list/index_input_press.JPG) 91 | 92 | # Press 93 | 3B C8 31 F0 00 00 94 | 3B C8 31 F0 00 01 95 | 3B C8 31 F0 00 02 96 | 3B C8 31 F0 00 03 97 | 3B C8 31 F0 00 04 98 | 3B C8 31 F0 00 05 99 | 3B C8 31 F0 00 06 100 | 3B C8 31 F0 00 07 101 | 3B C8 31 F0 00 08 102 | 3B C8 31 F0 00 09 103 | 104 | 3B C8 31 F0 00 10 # Back Button 105 | 3B C8 31 F0 00 13 # Top Right 106 | 107 | ![Input Hold](list/index_input_hold.JPG) 108 | 109 | # Add 0x20 to last byte 110 | 111 | ![Input Release](list/index_input_release.JPG) 112 | 113 | # Add 0x40 to last byte 114 | 115 | ## Update 116 | 117 | ### Selected Item 118 | 119 | [![Default Flash](http://img.youtube.com/vi/T4AsDjLhfvk/0.jpg)](https://www.youtube.com/watch?v=T4AsDjLhfvk) 120 | 121 | **TODO** 122 | -------------------------------------------------------------------------------- /telephone/list/index_create.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/list/index_create.JPG -------------------------------------------------------------------------------- /telephone/list/index_custom_id.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/list/index_custom_id.JPG -------------------------------------------------------------------------------- /telephone/list/index_custom_id_input.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/list/index_custom_id_input.JPG -------------------------------------------------------------------------------- /telephone/list/index_default.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/list/index_default.JPG -------------------------------------------------------------------------------- /telephone/list/index_input_hold.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/list/index_input_hold.JPG -------------------------------------------------------------------------------- /telephone/list/index_input_press.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/list/index_input_press.JPG -------------------------------------------------------------------------------- /telephone/list/index_input_release.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/list/index_input_release.JPG -------------------------------------------------------------------------------- /telephone/list/index_title.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/list/index_title.JPG -------------------------------------------------------------------------------- /telephone/list/reference_pairing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/list/reference_pairing.jpg -------------------------------------------------------------------------------- /telephone/list/reference_sms_index.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/list/reference_sms_index.jpeg -------------------------------------------------------------------------------- /telephone/pin.md: -------------------------------------------------------------------------------- 1 | # Telephone: Pin-Code 2 | 3 | This may have only been pertinent to the earlier factory built in phones, but it's useful for other purposes. 4 | 5 | ![BMBT Pin-Code Example](pin/pin_gt.JPG) 6 | 7 | ![IKE Pin-Code Example](pin/pin_ike.JPG) 8 | 9 | ## Create 10 | 11 | - single line 12 | - does not support carriage return/line break 13 | - similar to other uses of `0x23` in sending to broadcast `0xff` or `0xbf` will also write to IKE character display 14 | 15 | ![Create Pin-Code Layout](pin/pin_create.JPG) 16 | 17 | # Pin-code 18 | C8 3B 23 05 00 "23 05 Layout Pin-Code" 19 | 20 | # Pin-code GT and IKE 21 | C8 BF 23 05 20 "Pin IKE" 22 | C8 BF 23 05 30 "Pin IKE Update" 23 | 24 | ### Flashing Text 25 | 26 | [![Pin-Code Flash](http://img.youtube.com/vi/ZQdGoz0Pd7c/0.jpg)](https://www.youtube.com/watch?v=ZQdGoz0Pd7c) 27 | 28 | # Prefix string with control character 0x01 29 | C8 3B 23 05 00 "Here is some..." 01 "flashing text!" 30 | 31 | 32 | ## Inputs 33 | 34 | # Press 35 | Pin-Code > Digit > 0 3B 06 C8 31 05 02 00 36 | Pin-Code > Digit > 1 3B 06 C8 31 05 02 01 37 | Pin-Code > Digit > 2 3B 06 C8 31 05 02 02 38 | Pin-Code > Digit > 3 3B 06 C8 31 05 02 03 39 | Pin-Code > Digit > 4 3B 06 C8 31 05 02 04 40 | Pin-Code > Digit > 5 3B 06 C8 31 05 02 05 41 | Pin-Code > Digit > 6 3B 06 C8 31 05 02 06 42 | Pin-Code > Digit > 7 3B 06 C8 31 05 02 07 43 | Pin-Code > Digit > 8 3B 06 C8 31 05 02 08 44 | Pin-Code > Digit > 9 3B 06 C8 31 05 02 09 45 | Pin-Code > Digit > <- 3B 06 C8 31 05 02 0a 46 | Pin-Code > Digit > OK 3B 06 C8 31 05 02 1b 47 | 48 | Pin-Code > SOS > SOS 3B 06 C8 31 05 05 08 49 | 50 | # Hold/Release 51 | # Add 0x20, and 0x40 to final byte for hold and release respectively. 52 | 53 | 54 | ## Updates 55 | 56 | ![Enter PIN](pin/pin_update.JPG) 57 | 58 | 59 | # Set Pin 60 | # Note: factory implementation will use mask, i.e. "****" 61 | C8 3B 23 05 00 "1234" 62 | -------------------------------------------------------------------------------- /telephone/pin/pin_create.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/pin/pin_create.JPG -------------------------------------------------------------------------------- /telephone/pin/pin_gt.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/pin/pin_gt.JPG -------------------------------------------------------------------------------- /telephone/pin/pin_ike.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/pin/pin_ike.JPG -------------------------------------------------------------------------------- /telephone/pin/pin_update.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/pin/pin_update.JPG -------------------------------------------------------------------------------- /telephone/sms.md: -------------------------------------------------------------------------------- 1 | # SMS Overview 2 | 3 | ![Telephone SMS Option](dial/dial_create.JPG) 4 | 5 | When I installed the MK4, the Telephone menu had a new option **SMS** which sparked my interest. 6 | 7 | SMS readily pops up in TIS in reference to ULF, Everest etc, but there was no clues as to usage. 8 | 9 | As for the web, there was unusually little mentioned of it (with respect to I/K-Bus vehicles). There was anecdotal suggestions that it was not available in NA (CDMA/GSM compatibility perhaps?), but the introduction being relatively late in the lifecycle of E38/E39/E46 might also come into play. 10 | 11 | Nonetheless, I did find one [useful thread from 2004](https://www.bimmerfest.com/forums/showthread.php?t=69485), and dug up the thread attachments from Google cached results and found the following: 12 | 13 | ![SMS Example 1](sms/2004_1_main_menu.jpeg) 14 | ![SMS Example 2](sms/2004_2_phone_menu.jpeg) 15 | ![SMS Example 3](sms/2004_3_sms_selection.jpeg) 16 | ![SMS Example 4](sms/2004_4_message.jpeg) 17 | 18 | **Hurrah!** 19 | 20 | The implementation does feel like a bit of an afterthought considering most functionality via the BMBT has custom layouts (DSP, Aux. Heat/Vent, OBC, Settings etc), but given MOST was already in production vehicles, and the 68k, OS-9 based VDO/Dayton platform was already long in the tooth, I'm not entirely surprised. 21 | 22 | The functionality itself isn't particularly useful- particularly without a factory phone. However the layouts introduce more options for custom UIs. 23 | 24 | ## SMS Index `0xf0` 25 | 26 | The **SMS index** layout is seemingly a repurposed **Directory/Top 8**, which I say because the top right cell (where the phone icon usually is) is addressed with an out of order index. 27 | 28 | **Simulated *Directory* with `0xf0`** 29 | 30 | ![Fake Directory](sms/directory_fake.JPG) 31 | 32 | **Standard *Directory* `0x42`** 33 | 34 | ![Real Directory](sms/directory_real.JPG) 35 | 36 | ## SMS View/Emergency `0xf0` 37 | 38 | The **SMS view** layout appears to just a repurposed **SOS/Emergency** layout. 39 | 40 | 41 | ![Example SMS](detail/reference_sms_message.jpeg) 42 | 43 | ![Example SOS](sms/sms_emergency.jpg) 44 | -------------------------------------------------------------------------------- /telephone/sms/2004_1_main_menu.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/sms/2004_1_main_menu.jpeg -------------------------------------------------------------------------------- /telephone/sms/2004_2_phone_menu.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/sms/2004_2_phone_menu.jpeg -------------------------------------------------------------------------------- /telephone/sms/2004_3_sms_selection.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/sms/2004_3_sms_selection.jpeg -------------------------------------------------------------------------------- /telephone/sms/2004_4_message.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/sms/2004_4_message.jpeg -------------------------------------------------------------------------------- /telephone/sms/directory_fake.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/sms/directory_fake.JPG -------------------------------------------------------------------------------- /telephone/sms/directory_real.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/sms/directory_real.JPG -------------------------------------------------------------------------------- /telephone/sms/sms_emergency.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/sms/sms_emergency.jpg -------------------------------------------------------------------------------- /telephone/top_8.md: -------------------------------------------------------------------------------- 1 | # Telephone: Top 8 2 | 3 | Top 8 is essentially identical to Directory, with only the absence of "<<" and ">>" inputs. It still has a limit of 8 contacts. 4 | 5 | ![Top 8 Example](top_8/top_8_create.JPG) 6 | 7 | ## Create 8 | 9 | ![Create Top 8 Layout](top_8/top_8_21.JPG) 10 | 11 | # Identical to Directory- just replace 0x43 with 0x80 12 | C8 3B 21 43 01 60 06 "A" 06 "B" # Directory 13 | C8 3B 21 80 01 60 06 "A" 06 "B" # Top 8 14 | 15 | 16 | ## Inputs 17 | 18 | ![Top 8 Inputs](top_8/top_8_31.JPG) 19 | 20 | # Identical to Directory- just expect 0x80 in place of 0x43. 21 | # Note: Press event only! 22 | Input > Top 8 > Contact > 1 31 80 01 00 23 | Input > Top 8 > Contact > 2 31 80 01 02 24 | Input > Top 8 > Contact > 3 31 80 01 04 25 | Input > Top 8 > Contact > 4 31 80 01 06 26 | Input > Top 8 > Contact > 5 31 80 01 10 27 | Input > Top 8 > Contact > 6 31 80 01 12 28 | Input > Top 8 > Contact > 7 31 80 01 14 29 | Input > Top 8 > Contact > 8 31 80 01 16 30 | 31 | Input > Top 8 > Open > Dial 31 80 07 1e 32 | 33 | 34 | ## Updates 35 | 36 | ### Contact Selection 37 | #### Top 8 Contact Name 38 | 39 | ![Top 8 Contact Name](top_8/top_8_name.JPG) 40 | 41 | 42 | # Contact Name 43 | C8 3B 23 81 00 "C.Cockatoo" 44 | 45 | 46 | ##### Top 8 Contact Number 47 | 48 | ![Top 8 Contact Number](top_8/top_8_number.JPG) 49 | 50 | # Contact Number 51 | C8 3B 23 82 00 "555 1234" 52 | -------------------------------------------------------------------------------- /telephone/top_8/top_8_21.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/top_8/top_8_21.JPG -------------------------------------------------------------------------------- /telephone/top_8/top_8_31.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/top_8/top_8_31.JPG -------------------------------------------------------------------------------- /telephone/top_8/top_8_create.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/top_8/top_8_create.JPG -------------------------------------------------------------------------------- /telephone/top_8/top_8_name.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/top_8/top_8_name.JPG -------------------------------------------------------------------------------- /telephone/top_8/top_8_number.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/piersholt/wilhelm-docs/96c4bf6c90c45d0f219370decb5985c3d8901e3c/telephone/top_8/top_8_number.JPG --------------------------------------------------------------------------------