Compare commits

..

21 Commits

Author SHA1 Message Date
057adc4d0f SCP binary for NBT 2025-06-23 11:13:10 +02:00
8c591b1e78 NBT/EVO adjustment block tool 2025-05-22 11:18:06 +02:00
440b78190e Vertical Aim Control Disable guide 2025-05-20 14:39:14 +02:00
b09c23f7c7 README update 2025-04-24 12:17:39 +02:00
626b1e4629 TPMS guide 2025-04-24 12:16:47 +02:00
7183a4cedc Update resolution 2025-02-27 10:42:38 +00:00
a1e9f6604b F32 Hero image 2025-02-27 10:40:58 +00:00
0e0c57820d Update README.md 2025-02-26 10:15:12 +00:00
49de09c977 Rev 1.1 Steering error guide 2025-02-26 10:14:47 +00:00
69e6c63312 Rev 1.1 MFL guide 2025-02-26 10:11:36 +00:00
8fecd02a38 Halogen to Led 2024-09-18 15:31:36 +02:00
be73825923 README update 2024-09-16 17:14:40 +02:00
b13f698b30 EDC Delete guide 2024-09-16 17:10:49 +02:00
b1379d19a7 MFL Wrong version coding 2024-09-09 10:14:57 +02:00
658351920c DCC activation 2024-09-08 12:10:52 +02:00
af40a71e00 Maps SWID script 2024-09-08 11:51:05 +02:00
14cd7eb3a6 8TF guide 2024-09-08 11:32:01 +02:00
43ae85b56f NBTEvo Flashing 2024-08-26 12:07:02 +02:00
e4e07214c4 I-Step versions 2024-08-02 13:45:12 +02:00
1ae00b40b9 IKON/Carplay 2024-08-02 12:26:50 +02:00
f1a16c6b33 SLI Coding Guide 2024-07-25 12:32:02 +02:00
17 changed files with 325 additions and 27 deletions

View File

@ -1,41 +1,89 @@
# BMW Coding Guides
# 🚗 BMW Coding Guides
Welcome to the BMW Coding Guides repository! This repository contains a collection of PDF guides designed to help you with various BMW coding tasks, from enabling features to customizing settings in your vehicle.
Welcome to the **BMW Coding Guides** repository! This collection provides easy-to-follow guides and tools for customizing and coding your BMW. Whether youre enabling features or tweaking settings, youll find the resources you need right here.
## Table of Contents
---
- [Introduction](#introduction)
- [Guides](#guides)
- [Tools](#tools)
- [License](#license)
## 📋 Table of Contents
## Introduction
- [ Introduction](#-introduction)
- [📚 Guides](#-guides)
- [📄Available Guides](#available-guides)
- [🔧 Tools](#-tools)
- [🛡️ License](#-license)
This repository aims to provide comprehensive and easy-to-follow guides for coding and customizing BMW vehicles. Each guide is available as a PDF document that can be downloaded and used to enable, modify, or enhance different features of your BMW.
---
## Guides
## ✨ Introduction
The guides are organized in the `guides` directory. Each PDF file in this directory provides step-by-step instructions for a specific coding task or feature enhancement.
This repository aims to provide **comprehensive** and **easy-to-follow** guides for coding and customizing BMW vehicles. Each guide is available as a **PDF document** for download, offering step-by-step instructions to **enable**, **modify**, or **enhance** different features of your BMW.
Feel free to explore the guides and tools we offer below!
---
## 📚 Guides
All the guides are located in the `guides` directory, and each PDF provides step-by-step instructions for specific coding tasks or feature enhancements.
### Available Guides
- [Enabling the Bluetooth Music Option with Combox Module](guides/Enhanced_Bluetooth_Music.pdf)
- [Hacking NBTEVO ID6 Car Image](https://davidpetric.com/2024/06/21/nbt-evo-id6-hacking-the-car-image/)
- [BMW FSC Certificate Extraction Guide](guides/BMW_FSC_Certificate_Extraction_Guide.pdf)
- [FSC Code IDs](guides/BMW_FSC_Code_Number_ID.pdf)
- [F3x/F2x/F1x Cheat Sheet](guides/F3x_F2x_F1x_Cheat_Sheet.pdf)
- [F Series ECUs with Description](guides/BMW_F_Series_ECUs.pdf)
- [BMW Navigation Europe East/West Coverage](guides/BMW_Europe_Navi_East_West_Diff.pdf)
- [E-SYS Manual](guides/E-Sys_Manual_V23_10_ENG.pdf)
- [ENET IP Configuration](guides/BMW_ENET_Static_IP_Setup_Guide.pdf)
Here are some of the popular guides included in this repository:
### Available Tools
- [🎵 Enabling Bluetooth Music with Combox Module](guides/Enhanced_Bluetooth_Music.pdf)
- [🛠️ Hacking NBTEVO ID6 Car Image](https://davidpetric.com/2024/06/21/nbt-evo-id6-hacking-the-car-image/)
- [🔑 BMW FSC Certificate Extraction Guide](guides/BMW_FSC_Certificate_Extraction_Guide.pdf)
- [🗃️ FSC Code IDs](guides/BMW_FSC_Code_Number_ID.pdf)
- [🛡️ F3x/F2x/F1x Cheat Sheet](guides/F3x_F2x_F1x_Cheat_Sheet.pdf)
- [🧩 F Series ECUs with Descriptions](guides/BMW_F_Series_ECUs.pdf)
- [🗺️ BMW Navigation Europe East/West Coverage](guides/BMW_Europe_Navi_East_West_Diff.pdf)
- [📖 E-SYS Manual](guides/E-Sys_Manual_V23_10_ENG.pdf)
- [🌐 ENET IP Configuration Guide](guides/BMW_ENET_Static_IP_Setup_Guide.pdf)
- [🚦 SLI Unsupported Country Coding](guides/BMW_SLI_Unsupported_Country_Coding.pdf)
- [💡 IKON Headlights Retrofit Coding](guides/BMW_IKON_Headlights_Retrofit.pdf)
- [🖥️ CarPlay Compatibility List](guides/BMW_CarPlay_Android_Screen_Mirroring_Compatibility.pdf)
- [🔧 PsDzData I-Step Versions](guides/BMW_ISTA_PSDZData_Versions.pdf)
- [🖼️ Update Guide for Full-Screen CarPlay](guides/Update_Guide_for_Full_Screen_CarPlay.pdf)
- [🚶‍♂️ 8TF Pedestrian Protection Disable](guides/8TF_Pedestrian_Safety_Removal_Guide.pdf)
- [🏎️ M-Sport Steering Wheel Cruise Control Coding](guides/Cruise_Control_Retrofit_M_Sport_Guide.pdf)
- [🔄 MFL * LRE Wrong Version Coding](guides/Disable_MFL_Wrong_Version_Error_Guide.pdf)
- [⚙️ EDC Delete for Coilover Install](guides/EDC_Delete_BMW_FXX_Guide_Updated.pdf)
- [💡 Led Swap Headlight Error Coding](guides/Led_Swap_Headlight_Error_Coding_Guide.pdf)
- [📉 Disable TPMS (RDC) & Enable FTM](guides/TPMS_Disable.pdf)
- [💡 Vertical Aim Control Disable](guides/Disable_Headlight_Vertical_Aim_Guide.pdf)
| Tool Name | Description |
|------------------|------------------------------------------------------|
---
## 🔧 Tools
Below are the tools provided for various BMW-related tasks:
| 🔧 **Tool Name** | **Description** |
|-------------------|-----------------------------------------------------------|
| `fat32format.txt` | Application for formatting USB drives to FAT32. |
| `copie_scr.sh` | Script for pulling the 1b file out of CIC systems. |
| `maps_swid.sh` | CIC/NBT System get FSCShort/SWID from Maps archive. |
| `sysetV850io` | NBT System adjustment block dump tool. |
| `scp` | NBT SCP binary for /bin |
## License
---
This repository is licensed under the MIT License. See the [LICENSE](LICENSE) file for more information.
## 🤝 Contributing
Pull requests are welcome! For major changes, please open an issue first to discuss what youd like to change.
---
## 📞 Need Help?
Feel free to reach out on Instagram:
- [@turbocode_os](https://www.instagram.com/turbocode_os)
- [@almost.m4](https://www.instagram.com/almost.m4)
## 🛡️ License
This repository is licensed under the **MIT License**. For more information, please see the [LICENSE](LICENSE) file.
---
We hope you find these guides helpful! 🚘

BIN
assets/f32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
guides/TPMS_Disable.pdf Normal file

Binary file not shown.

Binary file not shown.

250
tools/maps_swid.sh Normal file
View File

@ -0,0 +1,250 @@
#!/bin/bash
# Set variables
INFO_MAP_FILENAME="Info_Map.imp"
VERBOSE=0
GENERATEXML=0
MAP_FOLDER=""
ARCHIVE_FILE=""
DIRECT_FILE=""
LOG_FILE="./script.log"
DEFAULT=""
DEPENDENCIES=("7z" "hexdump" "awk")
# Functions declaration
# Check if all required commands are available
check_dependencies() {
for cmd in "${DEPENDENCIES[@]}"; do
if ! command -v "$cmd" &> /dev/null; then
echo "ERROR: Required command '$cmd' is not installed. Please install it and try again."
exit 1
fi
done
}
# Log message to console and file
log_message() {
if [[ $VERBOSE -eq 1 ]]; then
echo "$1" | tee -a "$LOG_FILE"
else
echo "$1" >> "$LOG_FILE"
fi
}
# Clean up temporary files when script exits
cleanup() {
if [[ -f "/tmp/$INFO_MAP_FILENAME" ]]; then
rm "/tmp/$INFO_MAP_FILENAME"
fi
log_message "Cleaned up temporary files."
}
trap cleanup EXIT
# Progress bar for long operations
show_progress() {
for i in {1..4}; do
sleep 1
case $i in
1) echo -ne 'Processing: [# ] (0%)\r' ;;
2) echo -ne 'Processing: [##### ] (25%)\r' ;;
3) echo -ne 'Processing: [########## ] (50%)\r' ;;
4) echo -ne 'Processing: [############### ] (75%)\r' ;;
esac
done
echo -ne 'Processing: [####################### ] (100%)\r\n'
}
# Parse Info_Map.imp file
parseInfoMapFile() {
log_message "Parsing file..."
MAP_NAME=$(hexdump -C "$INFOMAP_FILE" | awk -F"|" '{ print $2 }' | tr -d "\n" | cut -c 21-200)
MAP_SWID_FscShort=$(hexdump -C "$INFOMAP_FILE" | awk 'NR==1 {print toupper($10$11$12$13)}')
MAP_REGION=$(hexdump -C "$INFOMAP_FILE" | awk 'NR==1 {print "0x" toupper($11)}')
MAP_YEAR=$(hexdump -C "$INFOMAP_FILE" | awk 'NR==1 {print "0x" toupper($13)}')
log_message "Parsing completed [OK]"
}
# Display map information
showMapInfos() {
echo -e "\n===================== Map Information ========================="
echo -e "Map Name : \"$MAP_NAME\""
echo -e "SWID_FscShort : \"$MAP_SWID_FscShort\""
echo -e "Map Region : \"$MAP_REGION\""
echo -e "Map Year : \"$MAP_YEAR\""
echo -e "===============================================================\n"
}
# Show the XML entry to add
showLookupXMLEntry() {
LONG_MAP_NAME="$MAP_NAME (SWID_FscShort=$MAP_SWID_FscShort, MapRegion=$MAP_REGION, MapYear=$MAP_YEAR)"
echo -e "\n===================== XML Generation ==========================="
echo -e "Add this entry at the end of the maps list in your Lookup.xml file:\n"
echo -e "<SgbmId id=\"NAVD_000024A8_255_007_034\" SWID_FscShort=\"$MAP_SWID_FscShort\" name=\"$LONG_MAP_NAME\" supplier=\"NTQ\" sop=\"01.05.2021\" version=\"10_09\" MapOrderNumberBMW=\"\" MapOrderNumberMINI=\"\" MapOrderNumberRR=\"\" successorMapOrderNumberBMW=\"\" successorMapOrderNumberMINI=\"\" successorMapOrderNumberRR=\"\" NextNo=\"01826\">\n\t<EcuVariant CompatibilityIdentifier=\"NBTevo-HB\" Format=\"CIC\" />\n\t<SwUpdate SwUpdateEntry=\"\"/>\n</SgbmId>"
echo -e "\n===============================================================\n"
}
# Validate input file permissions
validate_file() {
if [[ ! -r "$1" ]]; then
echo "ERROR: Cannot read file $1. Check permissions."
exit 2
fi
}
# Process an archive file
processArchiveFile() {
if [[ ! -f "$ARCHIVE_FILE" ]]; then
log_message "ERROR: Archive file \"$ARCHIVE_FILE\" does not exist"
exit 2
fi
log_message "File archive exists"
PATH_TO_INFOMAP_FILE=$(7z l "$ARCHIVE_FILE" | grep "$INFO_MAP_FILENAME" | grep -v "LIGHT" | awk '{print $NF}')
log_message "Looking for \"$INFO_MAP_FILENAME\" in the archive... [OK] - $PATH_TO_INFOMAP_FILE"
filename=$(basename -- "$ARCHIVE_FILE")
extension="${filename##*.}"
case "$extension" in
"7z"|"7Z")
log_message "Extracting \"$INFO_MAP_FILENAME\" from 7zip archive..."
show_progress
7z -y e "$ARCHIVE_FILE" -o"/tmp" "$PATH_TO_INFOMAP_FILE"
;;
"zip"|"ZIP"|"tar")
show_progress
7z -y e "$ARCHIVE_FILE" -o"/tmp" "$PATH_TO_INFOMAP_FILE" > /dev/null
;;
*)
log_message "Unsupported archive format: $extension"
exit 2
;;
esac
if [[ -f "/tmp/$INFO_MAP_FILENAME" ]]; then
INFOMAP_FILE="/tmp/$INFO_MAP_FILENAME"
else
log_message "ERROR: \"$INFO_MAP_FILENAME\" not found in /tmp"
exit 2
fi
}
# Process map folder
processFolder() {
log_message "Processing folder \"$MAP_FOLDER\"..."
if [[ -d "$MAP_FOLDER/1" ]]; then
INFOMAP_FILE=$(find "$MAP_FOLDER/1" -name "$INFO_MAP_FILENAME" | grep -v "LIGHT" | head -n 1)
if [[ -z "$INFOMAP_FILE" ]]; then
log_message "ERROR: \"$INFO_MAP_FILENAME\" not found in folder(s) 1/INFO*"
exit 2
fi
else
log_message "ERROR: Folder \"$MAP_FOLDER\" does not contain expected map files"
exit 2
fi
}
# Batch process for multiple maps
process_batch() {
for file in "$1"/*; do
if [[ -d "$file" ]]; then
log_message "Processing folder: $file"
processFolder "$file"
elif [[ -f "$file" ]]; then
log_message "Processing archive: $file"
processArchiveFile "$file"
fi
done
}
# Set working directory
setWorkDir() {
if [[ -d "$MAP_FOLDER" ]]; then
cd "$MAP_FOLDER" || exit 1
log_message "Using map folder \"$MAP_FOLDER\"... [OK]"
else
log_message "ERROR: Given folder \"$MAP_FOLDER\" does not exist"
exit 2
fi
}
# Prompt for confirmation before overwriting
prompt_for_confirmation() {
read -p "File $1 exists. Overwrite? (y/n): " choice
case "$choice" in
y|Y ) log_message "Overwriting...";;
n|N ) log_message "Skipping..."; exit 0;;
* ) log_message "Invalid choice"; exit 1;;
esac
}
# Show usage/help message
show_help() {
echo "Usage: InfoMap.sh [OPTIONS]"
echo "Extract hex information from downloaded BMW / Mini / RR Maps"
echo "Options:"
echo " -d <dir> Specify the map folder to process."
echo " -z <file> Specify the archive file to process (zip, 7z, etc.)."
echo " -f <file> Specify the Info_Map.imp file directly."
echo " -v Enable verbose mode."
echo " -x Generate XML entry."
echo " -b <dir> Batch process multiple folders or archives in the directory."
echo " -h Show this help message."
}
############# Main Program Starts #############
# Show help if no arguments are provided
if [[ $# -eq 0 ]]; then
show_help
exit 0
fi
POSITIONAL_ARGS=()
while getopts ":d:z:f:xb:vh" option; do
case $option in
d) MAP_FOLDER="$OPTARG" ;;
z) ARCHIVE_FILE="$OPTARG" ;;
f) DIRECT_FILE="$OPTARG" ;;
v) VERBOSE=1 ;;
x) GENERATEXML=1 ;;
b) process_batch "$OPTARG"; exit 0 ;;
h) show_help; exit 0 ;;
*) echo "Invalid option: -$OPTARG"; show_help; exit 1 ;;
esac
done
shift $((OPTIND-1))
# Check dependencies
check_dependencies
# Processing logic based on provided arguments
if [[ -n "$DIRECT_FILE" ]]; then
validate_file "$DIRECT_FILE"
INFOMAP_FILE="$DIRECT_FILE"
elif [[ -n "$MAP_FOLDER" ]]; then
setWorkDir
processFolder
elif [[ -n "$ARCHIVE_FILE" ]]; then
processArchiveFile
else
log_message "No valid input provided"
exit 1
fi
# Parsing Info_Map.imp file
parseInfoMapFile
# Display map information
showMapInfos
# Generate XML entry if required
if [[ $GENERATEXML -eq 1 ]]; then
showLookupXMLEntry
fi

BIN
tools/scp Normal file

Binary file not shown.

BIN
tools/sysetV850io Normal file

Binary file not shown.