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.