SCM-Dateiformat für Samsung-Programmlisten
Ich habe auf der Arbeit viel mit Samsung-Flatscreens zu tun. Da ist die Funktion ''Senderliste übertragen'' schon echt praktisch. So muss ich nicht bei jedem neuen Gerät, oder wenn der Kunde mal wieder alle Sender gelöscht hat, einen Suchlauf starten und dann tausende Programme sortieren. Allerdings ist das Erstellen von neuen Listen bzw. das Einpflegen von neuen Sendern eine quälerei.
Mit dem inzwischen veröffentlichten Senderlisteneditor ''chlpced'' geht's am PC etwas schneller als mit der Fernbedienung, ist aber immer noch ein ziemlicher Aufwand. Nach einem kompletten Suchlauf muss man ja wieder komplett von vorne anfangen. Im Kabel dann auch noch mit einer alphabetischen Reihenfolge...
Aus diesem Grund habe ich mich mal rangesetzt und versucht das SCM-Dateiformat zu entschlüsseln. Ein erster Einblick mit einem Hex-Editor brachte schonmal was: Die Datei fängt mit ''PK'' an, scheint also eine Zip-Datei zu sein. Schnell entpackt mit 7zip - und siehe da, es stimmt!
Heraus kommen einige weitere Dateien, je nach Modell und vorhandenen Senderlisten (Sat, Kabel, Antenne etc.) unterschiedlich viele. Die Merkmale, die für mich von Belang sind und die ich bisher entziffern konnte, habe ich nachfolgend zusammengefasst.
Die .scm-Datei
--------------
Die eigentliche SCM-Datei ist eine einfache ZIP-Datei mit der Endung .scm.
Sie enthaelt je nach Fernsehermodell leicht unterschiedliche Dateien.
Interessant sind u.A. die folgenden:
map-SateD : Enthaelt die digitale Satellitenprogrammliste
map-CableD : Enthaelt die digitale Kabelprogrammliste
ServiceProviders : Enthaelt die Liste der Programmanbieter
TransponderDataBase.dat : Enthaelt die Transponderliste
Die unterschiedlichen Modellserien arbeiten mit unterschiedlichen Dateiformaten:
1001 = Serie C
1101 = Serie D
1201 = Serie E, F, H
Die Datei "map-SateD"
---------------------
Die Datei enthaelt feste Datensaetze mit einer Laenge von:
1001 = 144 Bytes
1101 = 172 Bytes
1201 = 168 Bytes
Die Anzahl scheint in 1000er-Bloecken festzuliegen, wobei die letzten, nicht
belegten Saetze nur 0x00 enthalten.
Die Bytereihenfolge von Zahlenwerten ist LITTLE ENDIAN, soll heissen dass der
Wert '0x1A2B' als '0x2B1A' gespeichert wird.
Nachfolgend eine Aufschluesselung der mir bisher bekannten Bytepositionen.
BYTE INHALT
---- ------
001-002 Programmplatznummer
003-004 VPID
005-006 PCR
007 0x00=SD, 0x01=HD
014 0x00=frei, 0x01=gesperrt ("locked")
015 0x01=SD, 0x02=Radio, 0x19=HD
017-018 SID
019 Transpondernummer, siehe Datei "TransponderDataBase.dat"
025-026 TSID
037-136 Programmname im UNICODE-Format (100 Bytes = 50 Zeichen)
137 0x00=FTA, 0x01=PayTV
139 Service Provider, siehe Datei "ServiceProviders"
-1 Favoritenplatz. 0x01=1, 0x02=2, 0x04=3, 0x08=4 (0x0C=3+4)
-0 Checksumme
Negative Werte fuer BYTE zaehlen vom Ende des jeweiligen Datensatzes.
Die Datei "map-CableD"
----------------------
Die Datei enthaelt feste Datensaetze mit einer Laenge von:
1001 = 292 Bytes
1101 = 320 Bytes
1201 = 320 Bytes
Die Anzahl scheint in 1000er-Bloecken festzuliegen, wobei die letzten, nicht
belegten Saetze nur 0x00 enthalten.
Die Bytereihenfolge von Zahlenwerten ist LITTLE ENDIAN, soll heissen dass der
Wert '0x1A 0x2B' als '0x2B 0x1A' gespeichert wird.
Nachfolgend eine Aufschluesselung der mir bisher bekannten Bytepositionen.
BYTE INHALT
---- ------
001-002 Programmplatznummer
003-004 VPID
005-006 PCR
007-008 SID
013 Modulation. 0x01=64QAM, 0x02=256QAM
015 0x01=TV, 0x02=Radio
025 0x00=FTA, 0x01=PayTV
029-030 Symbolrate in kS/s
041 Provider
043 Frequenz.
001=114MHz in 8MHz-Schritten bis 098=890MHz
099=110MHz in 8MHz-Schritten bis 193=862MHz
194=113MHz 195=121MHz 196=143MHz
197=256MHz 198=346MHz
049-050 TSID
065-264 Programmname (100 Zeichen UNICODE = 200 Bytes)
265-282 Kurzname (9 Zeichen UNICODE = 18 Bytes)
-0 Checksumme
Negative Werte fuer BYTE zaehlen vom Ende des jeweiligen Datensatzes.
Die Datei "ServiceProviders"
----------------------------
Die Datei enthaelt feste Datensaetze mit einer Laenge von 108 Bytes.
BYTE INHALT
---- ------
001 0x01=Kabel, 0x03=Satellit, 0x08=Satellit HD
003 Providernummer
005 ?
007 Laenge des Providernamens
009-108 Providername im UNICODE-Format (Laenge beachten, Rest ist
mit undefinierten Zeichen aufgefuellt!)
Die Datei "TransponderDataBase.dat"
-----------------------------------
Die Datei enthaelt feste Datensaetze mit einer Laenge von 45 Bytes, wobei
die ersten vier Bytes separat sind. Dieselben vier Bytes finden sich auch
am Anfang von "SatDataBase.dat" und "UserTransponderDataBase.dat".
Werte in Klammern sind relativ zum Dateianfang, die anderen zum Anfang
des jeweiligen Datensatzes.
BYTE INHALT
---- ------
001
(005) Scheinbar immer das Zeichen "U"
002
(006) Transpondernummer
006
(010) Vermutlich Satellitennummer (siehe "SatDataBase.dat")
010-013
(014-017) Frequenz in kHz
014-017
(018-021) Symbolrate in kS/s
018
(022) 0x00=H, 0x01=V
Die Datei "SatDataBase.dat"
---------------------------
Die Datei enthaelt feste Datensaetze mit einer Laenge von 145 Bytes, wobei
die ersten vier Bytes separat sind. Dieselben vier Bytes finden sich auch
am Anfang von "TransponderDataBase.dat" und "UserTransponderDataBase.dat".
Werte in Klammern sind relativ zum Dateianfang, die anderen zum Anfang
des jeweiligen Datensatzes.
BYTE INHALT
---- ------
001
(005) Scheinbar immer das Zeichen "U"
002
(006) Satellitennummer
009-136
(013-140) Satellitenname (64 Zeichen UNICODE = 128 Bytes)
138
(142) 0x00=Westen, 0x01=Osten
Die Datei "map-ChKey"
---------------------------
Enthaelt vier Bytes, die moeglicherweise die einzelnen Versionen kennzeichnen.
Beim Versuch, eine aktuelle 1201er Liste in eine 1101er zu konvertieren, musste
diese Datei der jeweiligen Version entsprechen, damit die Liste vom Fernseher
korrekt gelesen wurde.
1001 = Serie C 0x2F 46 0F 00
1101 = Serie D 0xCC CC 10 00
1201 = Serie E, F, H 0x6D 53 12 00
Die Datei "CloneInfo"
---------------------------
Enthaelt die Laenderinformation und die Bezeichnung des Geraetes.
BYTE INHALT
---- ------
001-003 Laendercode in LITTLE ENDIAN, 0x00-Terminiert
"UED " = "DEU" fuer Deutschland
"RGB " = "GBR" fuer England
005 Geraetebezeichnung, eventuell mit 0x00 aufgefuellt auf 64 Bytes
Damit kann man sich schon mal einen Editor basteln. Meinen habe ich zwar schon seit 2011 im Einsatz, das Ding ist aber immer noch ziemlich im Alpha-Stadium. Deshalb gibt's jetzt auch keinen Source zu sehen :P.