|
| 1 | +# Supported Firmware Formats |
| 2 | + |
| 3 | +## Overview |
| 4 | + |
| 5 | +The firmware system now supports **multiple Samsung firmware formats** used across Odin, SamFW, and direct downloads. |
| 6 | + |
| 7 | +## Supported Formats |
| 8 | + |
| 9 | +### 1. SAMFW ZIP Format ✅ |
| 10 | + |
| 11 | +**Pattern:** `SAMFW.COM_{Model}_{CSC}_{APVersion}_{Variant}.zip` |
| 12 | + |
| 13 | +**Example:** |
| 14 | +``` |
| 15 | +SAMFW.COM_SM-G996B_EGY_G996BXXSJHZC2_fac.zip |
| 16 | +SAMFW.COM_SM-S921B_XEU_S921BXXU6GUB1_fac.zip |
| 17 | +``` |
| 18 | + |
| 19 | +**Extracted:** |
| 20 | +- Model: `SM-G996B` |
| 21 | +- CSC (Region): `EGY` |
| 22 | +- AP Version: `G996BXXSJHZC2` |
| 23 | +- Variant: `fac` (factory) |
| 24 | + |
| 25 | +### 2. Samsung TAR Format ✅ (NEW) |
| 26 | + |
| 27 | +**Pattern:** `{COMPONENT}_{APVersion}_{CSCVersion}_{Metadata}.{tar|tar.md5}` |
| 28 | + |
| 29 | +**Example:** |
| 30 | +``` |
| 31 | +AP_S721BXXS3AYB8_S721BXXS3AYB8_MQB93088282_REV00_user_low_ship_MULTI_CERT_meta_OS14.tar.md5 |
| 32 | +AP_S921BXXU6GUB1_S921BOXM6GUB1_MQB93088282_REV00_user_low_ship_MULTI_CERT_meta_OS14.tar |
| 33 | +BL_R900XXU1AUGA_R900OYM1AUGA_MQB12345678_REV00.tar.md5 |
| 34 | +CSC_S721BXXS3AYB8_S721BXXS3AYB8_MQB93088282_REV00.tar.md5 |
| 35 | +``` |
| 36 | + |
| 37 | +**Components:** |
| 38 | +- `AP` - Application Processor (main firmware) |
| 39 | +- `BL` - Bootloader |
| 40 | +- `CSC` - Country/region specific configuration |
| 41 | +- `MODEM` - Modem firmware |
| 42 | + |
| 43 | +**Extracted:** |
| 44 | +- Component: `AP`, `BL`, `CSC`, or `MODEM` |
| 45 | +- AP Version: `S721BXXS3AYB8` |
| 46 | +- CSC Version: `S721BXXS3AYB8` |
| 47 | +- Device Model (auto): `SM-S721B` (from S721B prefix) |
| 48 | + |
| 49 | +### 3. Samsung Bundle Directory Format ✅ |
| 50 | + |
| 51 | +**Pattern:** `{APVersion}_{CSCVersion}_{SALES}` |
| 52 | + |
| 53 | +**Example:** |
| 54 | +``` |
| 55 | +G996BXXSJHZA6_G996BOXMJHZA6_XSG/ |
| 56 | +S921BXXU6GUB1_S921BOXM6GUB1_XEU/ |
| 57 | +``` |
| 58 | + |
| 59 | +**Note:** Directories are automatically detected and indexed. |
| 60 | + |
| 61 | +## Mixed Format Support |
| 62 | + |
| 63 | +You can have **all formats in the same directory**: |
| 64 | + |
| 65 | +``` |
| 66 | +firmware/ |
| 67 | +├── SAMFW.COM_SM-G996B_EGY_G996BXXSJHZC2_fac.zip |
| 68 | +├── AP_S721BXXS3AYB8_S721BXXS3AYB8_MQB93088282_REV00_user_low_ship_MULTI_CERT_meta_OS14.tar.md5 |
| 69 | +├── AP_S921BXXU6GUB1_S921BOXM6GUB1_MQB93088282_REV00_user_low_ship.tar |
| 70 | +└── G996BXXSJHZA6_G996BOXMJHZA6_XSG/ |
| 71 | +``` |
| 72 | + |
| 73 | +The system will **automatically detect and index all formats**. |
| 74 | + |
| 75 | +## Database Integration |
| 76 | + |
| 77 | +All formats are stored in the same database: |
| 78 | + |
| 79 | +```sql |
| 80 | +SELECT device_model, ap_version, source, package_variant, filename |
| 81 | +FROM firmware_entries; |
| 82 | +``` |
| 83 | + |
| 84 | +| device_model | ap_version | source | package_variant | filename | |
| 85 | +|--|--|--|--|--| |
| 86 | +| SM-G996B | G996BXXSJHZC2 | samfw | fac | SAMFW.COM_SM-G996B_EGY_G996BXXSJHZC2_fac.zip | |
| 87 | +| SM-S721B | S721BXXS3AYB8 | samsung_tar | ap_tar.md5 | AP_S721BXXS3AYB8_... | |
| 88 | +| SM-S921B | S921BXXU6GUB1 | samsung_tar | ap_tar | AP_S921BXXU6GUB1_... | |
| 89 | + |
| 90 | +## UI Handling |
| 91 | + |
| 92 | +### Firmware List |
| 93 | +All formats displayed together in "Available Firmware" section: |
| 94 | +- Shows model, AP version, CSC version |
| 95 | +- Shows source (SAMFW, Samsung TAR, etc.) |
| 96 | +- Shows file type (ZIP, TAR, TAR.MD5) |
| 97 | + |
| 98 | +### Manual Entry |
| 99 | +Can manually add firmware via "Add Firmware Entry" form: |
| 100 | +- Specify model, CSC, AP version |
| 101 | +- Any source type supported |
| 102 | +- Notes field for reference |
| 103 | + |
| 104 | +### Sync |
| 105 | +"Sync Disk" button scans all formats and imports new ones to database. |
| 106 | + |
| 107 | +## Format Detection Algorithm |
| 108 | + |
| 109 | +1. **Check SAMFW ZIP**: `SAMFW.COM_*.zip` pattern |
| 110 | +2. **Check Samsung TAR**: `{AP|BL|CSC|MODEM}_*.(tar|tar.md5)` pattern |
| 111 | +3. **Check Bundle DIR**: `*_*_{SALES}` directory pattern |
| 112 | +4. **Fallback**: Manual entry required |
| 113 | + |
| 114 | +## Example: Using TAR Format |
| 115 | + |
| 116 | +### Download TAR Firmware |
| 117 | +1. Place file: `firmware/AP_S721BXXS3AYB8_S721BXXS3AYB8_MQB93088282.tar.md5` |
| 118 | +2. Click "Sync Disk" in UI |
| 119 | +3. Entry auto-indexed in database |
| 120 | +4. Available in "Firmware Catalog" |
| 121 | + |
| 122 | +### Extract Model from Filename |
| 123 | +``` |
| 124 | +AP_S721BXXS3AYB8_... |
| 125 | + ↓ |
| 126 | + S721B (pattern: {Letter}{Digits}{Letter}) |
| 127 | + ↓ |
| 128 | + SM-S721B ✅ |
| 129 | +``` |
| 130 | + |
| 131 | +### Create Fingerprint Entry |
| 132 | +If you want to use this firmware for a device: |
| 133 | + |
| 134 | +1. Create device (e.g., SM-S721B) |
| 135 | +2. Go to Fingerprint tab |
| 136 | +3. Select "SM-S721B" from model dropdown |
| 137 | +4. System will find matching firmware entries |
| 138 | +5. Select or manually enter AP version |
| 139 | +6. Apply fingerprint |
| 140 | + |
| 141 | +## Troubleshooting |
| 142 | + |
| 143 | +### Format Not Recognized |
| 144 | +**Error:** File not showing in "Available Firmware" |
| 145 | + |
| 146 | +**Solution:** |
| 147 | +1. Check filename pattern matches examples above |
| 148 | +2. Use underscores (not spaces) in filename |
| 149 | +3. Use uppercase for model/CSC/version |
| 150 | +4. Try manual entry in "Add Firmware Entry" form |
| 151 | + |
| 152 | +### Model Not Detected |
| 153 | +**Error:** `device_model` is `null` in database |
| 154 | + |
| 155 | +**For TAR formats:** AP version must start with model prefix |
| 156 | +- `S721BXXS3AYB8` → `S721B` → `SM-S721B` ✅ |
| 157 | +- `ABC123XYZ` → Cannot extract model ❌ |
| 158 | + |
| 159 | +**Solution:** Manually enter model in "Add Firmware Entry" |
| 160 | + |
| 161 | +### CSC Version Mismatch |
| 162 | +Both AP and CSC versions are extracted from TAR filename. If they don't match, that's valid (e.g., different regional CSC). |
| 163 | + |
| 164 | +## Best Practices |
| 165 | + |
| 166 | +1. **Keep original filenames**: Don't rename firmware files |
| 167 | +2. **Use consistent format**: Pick ZIP or TAR, don't mix per device |
| 168 | +3. **Verify checksums**: TAR.MD5 includes checksum in filename |
| 169 | +4. **Organize by model**: Create subdirectories like `firmware/S721/`, `firmware/S921/` |
| 170 | +5. **Document source**: Use notes field when adding entries manually |
| 171 | + |
| 172 | +## Adding New Format Support |
| 173 | + |
| 174 | +To add support for a new firmware format: |
| 175 | + |
| 176 | +1. Add regex pattern to `samfw.py` |
| 177 | +2. Implement `parse_{format}_filename()` function |
| 178 | +3. Add to `resolve_firmware_meta()` fallback chain |
| 179 | +4. Update `iter_firmware_packages()` glob patterns |
| 180 | +5. Test with `python tests/test_firmware_sources.py` |
| 181 | + |
| 182 | +Example: |
| 183 | +```python |
| 184 | +# samfw.py |
| 185 | +_MY_FORMAT = re.compile(r"^pattern_here$") |
| 186 | + |
| 187 | +def parse_my_format_filename(filename): |
| 188 | + # Extract and return dict |
| 189 | + return {...} |
| 190 | + |
| 191 | +# samfw.py - resolve_firmware_meta() |
| 192 | +return ( |
| 193 | + parse_samfw_filename(basename) |
| 194 | + or parse_samsung_tar_filename(basename) |
| 195 | + or parse_my_format_filename(basename) # Add here |
| 196 | + or parse_samsung_bundle_dirname(basename) |
| 197 | +) |
| 198 | + |
| 199 | +# scan.py - iter_firmware_packages() |
| 200 | +for pattern in ["*.custom", "*.ext"]: # Add here |
| 201 | + for p in sorted(scan_root.glob(pattern)): |
| 202 | + meta = parse_my_format_filename(p.name) |
| 203 | + # ... same processing |
| 204 | +``` |
0 commit comments