Skip to content

Commit a2052f2

Browse files
committed
feat: add support for multiple Samsung firmware formats including TAR and bundle directory formats
1 parent ebe8ea6 commit a2052f2

1 file changed

Lines changed: 204 additions & 0 deletions

File tree

‎SUPPORTED_FIRMWARE_FORMATS.md‎

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
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

Comments
 (0)