diff --git a/ChanSort.Api/Utils/Tools.cs b/ChanSort.Api/Utils/Tools.cs index 4fbface..5702936 100644 --- a/ChanSort.Api/Utils/Tools.cs +++ b/ChanSort.Api/Utils/Tools.cs @@ -103,6 +103,7 @@ namespace ChanSort.Api } #endregion + #region HexDecode() public static byte[] HexDecode(string input) { var bytes = new byte[input.Length/2]; @@ -110,11 +111,12 @@ namespace ChanSort.Api { char ch = Char.ToUpper(input[i*2]); var high = Char.IsDigit(ch) ? ch - '0' : ch - 'A' + 10; - ch = input[i*2 + 1]; + ch = Char.ToUpper(input[i*2 + 1]); var low = Char.IsDigit(ch) ? ch - '0' : ch - 'A' + 10; bytes[i] = (byte)((high << 4) | low); } return bytes; } + #endregion } } diff --git a/ChanSort.Loader.GlobalClone/ChanSort.Loader.GlobalClone.csproj b/ChanSort.Loader.GlobalClone/ChanSort.Loader.GlobalClone.csproj index ddc3d54..cbefd3c 100644 --- a/ChanSort.Loader.GlobalClone/ChanSort.Loader.GlobalClone.csproj +++ b/ChanSort.Loader.GlobalClone/ChanSort.Loader.GlobalClone.csproj @@ -70,6 +70,16 @@ + + Resources.de.resx + True + True + + + True + True + Resources.resx + @@ -80,6 +90,18 @@ + + + ResXFileCodeGenerator + Resources.de.Designer.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Bevor Sie Ihre Zeit verschwenden... + +...überprüfen Sie, ob Ihr LG Gerät diese Datei (unmodifiziert) einlesen kann. +Einige LG Geräte exportieren 2 Dateien: eine "Clone" TLL und eine Datei ähnlich wie xxLB550U-ZA00001.TLL. + +Wenn Ihr Gerät 2 Dateien erzeugt, kann es vermutlich nur die xxLB550U-ZA00001.TLL einlesen und Sie sollten deshalb jene Datei bearbeiten. + +Wenn Ihr Gerät nur diese "Clone" Datei erstellt, können Sie mit der Bearbeitung fortfahren. + + \ No newline at end of file diff --git a/ChanSort.Loader.GlobalClone/Resources.resx b/ChanSort.Loader.GlobalClone/Resources.resx new file mode 100644 index 0000000..5e8686a --- /dev/null +++ b/ChanSort.Loader.GlobalClone/Resources.resx @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Before you waste your time... + +...make sure that your LG TV can load this file (without modifications). +Some LG TVs export 2 files, a GlobalClone00001.TLL and file like xxLB550U-ZA00001.TLL. + +If you have both file types, it's likely that the TV can only load the xxLB550U-ZA00001.TLL and you should edit that file instead. + +If your TV only exports a single "Clone" TLL, you're good to continue! + + \ No newline at end of file diff --git a/ChanSort.Loader.GlobalClone/readme.txt b/ChanSort.Loader.GlobalClone/readme.txt index 4fce8f5..e1d29ae 100644 --- a/ChanSort.Loader.GlobalClone/readme.txt +++ b/ChanSort.Loader.GlobalClone/readme.txt @@ -1,15 +1,13 @@ This module allows loading of LG's GlobalClone*.TLL files. -There seem to be different versions of this XML file format around. +There seem to be different versions of this XML file format, depending on Series, Model and/or firmware version. -2014 LB-Series (e.g. Model LB731V, LB630V): -- vchName is a readable text, but sometimes left empty -- contains hex-encoded channel name (not empty even when vchName is empty) -- +2013 LA-Series, 2014 LB55xx and LB56xx: + is binary data inside an UTF8 envelope. Once decoded, this data is correct. +Some higher numbered models seem to exclusively support the GlobalClone and no longer have a binary TLL file, +while lower numbered models export both files and can only load the binary file. + is not included in these models -2014 LB-Series (e.g. 42LB630V-ZA) -- vchName is a readable text -- no extra hex encoded version +2014 LB6xxx and higher: + is a readable text, but sometimes left empty and misses all local characters + may be present, depending on firmware. It contains a hex-encoded DVB encoded channel name with correct data. -2014 LB561V, LB580V -- vchName binary data (with high bit set) -- separate binary TLL file available diff --git a/ChanSort.Loader.LG/ChanSort.Loader.LG.ini b/ChanSort.Loader.LG/ChanSort.Loader.LG.ini index 36a267f..d2691c3 100644 --- a/ChanSort.Loader.LG/ChanSort.Loader.LG.ini +++ b/ChanSort.Loader.LG/ChanSort.Loader.LG.ini @@ -1,6 +1,39 @@ ; FileConfigurationX: overall file and DVB-S data layout ; ACTChannelDataMappingX: analog, DVB-C and DVB-T channel data mapping for data length X +[ACTChannelDataMapping:244] + ; LB550U, LB561V + reorderChannelData = 0 + lenName = 40 + offSignalSource = 8 + offChannelTransponder = 10, 136, 173, 180 + offProgramNr = 12, 176 + offProgramNrPreset = 14, 178 + offFavorites = 20 + offPcrPid = 24, 228 + offAudioPid = 26 + offVideoPid = 36 + offName = 44, 188 + offNameLength = 84, 187 + offServiceId = 86, 184 + offFrequencyLong = 140 + offOriginalNetworkId = 150 + offTransportStreamId = 152 + offFavorites2 = 182 + offDeleted = 182 + maskDeleted = 0x42 + offLock = 183 + maskLock = 0x01 + offSkip = 183 + maskSkip = 0x02 + offHide = 183 + maskHide = 0x04 + offProgNrCustomized = 183 + maskProgNrCustomized = 0x40 + offServiceType = 186 + offAudioPid2 = 230 + + [ACTChannelDataMapping:260] ; LA 2013 series firmware 04.20.29 and later reorderChannelData = 0 @@ -407,6 +440,18 @@ lnbCount = 40 lnbLength = 48 +[DvbsBlock:639532] + ; LB550U, LB561V + satCount = 64 + satLength = 44 + transponderCount = 2400 + transponderLength = 48 + linkedListExtraDataLength = 2 + dvbsChannelCount = 6000 + dvbsChannelLength = 76 + lnbCount = 40 + lnbLength = 48 + [DvbsBlock:687880] ; everything before LM series + LM340S, LM611S, LS560S satCount = 64 @@ -453,7 +498,7 @@ lnbLength = 52 [DvbsBlock:967496] - ; LB series + ; LB580V satCount = 64 satLength = 48 transponderCount = 2400 @@ -499,8 +544,20 @@ offSymbolRate = 29 offSatIndex = 40 +[TransponderDataMapping:48] + ; LB550U, LB561V + offFirstChannelIndex = 0 + offLastChannelIndex = 2 + offChannelCount = 4 + offTransponderIndex = 12 + offFrequency = 16 + offOriginalNetworkId = 26 + offTransportStreamId = 28 + offSymbolRate = 33 + offSatIndex = 44 + [TransponderDataMapping:56] - ; LA + ; LA, LB580V offFirstChannelIndex = 0 offLastChannelIndex = 2 offChannelCount = 4 @@ -574,7 +631,7 @@ [SatChannelDataMapping:76] - ; LN series, LA6136 + ; LN series, LA6136, LB550U, LB561V lenName = 40 offSatelliteNr = 0 offSourceType = 4 @@ -659,7 +716,7 @@ offAudioPid = 74 [SatChannelDataMapping:100] - ; LB series + ; LB580V lenName = 40 offSatelliteNr = 0 offSourceType = 4 @@ -761,6 +818,10 @@ offHotelModeEnabled=13873 offHotelModeDtvUpdate=13883 +[FirmwareData:17808] + ; LB550U, LB561V + offSize = 0 + [FirmwareData:23072] ; LE3300, LD420, LD450, LD550 offSize = 0 @@ -823,3 +884,7 @@ offHotelModeEnabled=38255 offHotelModeDtvUpdate=38266 offHotelMenuAccessCode = 38282 + +[FirmwareData:39680] + ; LB580V + offSize = 0 diff --git a/ChanSort/MainForm.cs b/ChanSort/MainForm.cs index b46156e..39ce593 100644 --- a/ChanSort/MainForm.cs +++ b/ChanSort/MainForm.cs @@ -25,7 +25,7 @@ namespace ChanSort.Ui { public partial class MainForm : XtraForm { - public const string AppVersion = "v2014-05-26 (beta)"; + public const string AppVersion = "v2014-05-29"; private const int MaxMruEntries = 10; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-260-LB.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-244-LB.h similarity index 83% rename from Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-260-LB.h rename to Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-244-LB.h index dd530b7..ed045bb 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-260-LB.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-244-LB.h @@ -20,7 +20,7 @@ typedef TLL52_Lnb TLL_Lnb; #include "tll-satellite.h" -struct LB260_AnalogChannel +struct LB244_AnalogChannel { byte t1[8]; TLL_SignalSource SignalSource; @@ -35,19 +35,23 @@ struct LB260_AnalogChannel word APID1; byte ChannelNumberInBand; byte ChannelBand; - byte t3[10]; + byte t3[18]; char CH_Name1[40]; byte CH_NameLength1; byte t4; word SID1; - byte t5a[42]; + byte t5a[45]; + byte na_NitVersion; + word t5b; word ChannelTransponder2; + word t5c; dword FrequencyDiv50; byte t6[6]; word ONID; word TSID; - byte t7[32]; + byte t7[19]; word ChannelTransponder3; + byte t7b; word ProgramNr2; word LogicalProgramNr2; word ChannelTransponder4; @@ -57,22 +61,22 @@ struct LB260_AnalogChannel byte ServiceType; byte CH_NameLength2; char CH_Name2[40]; - byte t10[12]; + byte t10[0]; word Frequency2Div50; word APID2; word u1; word u2; - byte t11[12]; + byte t11[8]; }; -struct LB260_AnalogBlock +struct LB244_AnalogBlock { dword BlockSize; dword ChannelCount; - LB260_AnalogChannel Channels[ChannelCount]; + LB244_AnalogChannel Channels[ChannelCount]; }; -struct LB260_HotelSettings +struct LB244_HotelSettings { byte HotelModeActive; byte PowerOnStatus; @@ -102,15 +106,15 @@ struct LB260_HotelSettings byte AccessCode[4]; }; -struct LB260_FirmwareBlock +struct LB244_FirmwareBlock { dword BlockSize; - byte u[38251]; - LB260_HotelSettings HotelSettings; - byte Data[BlockSize - 38251 - sizeof(LB260_HotelSettings)]; + byte u[17808]; + // LB244_HotelSettings HotelSettings; + // byte Data[BlockSize - 38251 - sizeof(LB244_HotelSettings)]; }; -struct LB260_DvbCtChannel +struct LB244_DvbCtChannel { byte t1[8]; TLL_SignalSource SignalSource; @@ -125,22 +129,25 @@ struct LB260_DvbCtChannel word APID1; byte t2c[8]; word VPID1; - byte t3[2]; + byte t3[6]; char CH_Name1[40]; byte CH_NameLength1; byte t4; word SID1; - byte t5a[41]; + byte t5a[45]; byte NitVersion; + word t5b; word ChannelTransponder2; + word t5c; dword Frequency; byte t6[6]; word ONID; word TSID; word NID; dword SpecialData; - byte t7[26]; + byte t7[13]; word ChannelTransponder3; + byte t7b; word ProgramNr2; word LogicalProgramNr2; word ChannelTransponder4; @@ -150,19 +157,19 @@ struct LB260_DvbCtChannel byte ServiceType; byte CH_NameLength2; char CH_Name2[40]; - byte t10[12]; + byte t10[0]; word PcrPid2; word APID2; word u1; word u2; - byte t11[12]; + byte t11[8]; }; -struct LB260_DvbCTBlock +struct LB244_DvbCTBlock { dword BlockSize; dword ChannelCount; - LB260_DvbCtChannel Channels[ChannelCount]; + LB244_DvbCtChannel Channels[ChannelCount]; }; struct TLL48_Satellite // ok @@ -236,13 +243,13 @@ struct TLL52_Lnb }; -public struct LB260 +public struct LB244 { byte Header[4]; - LB260_AnalogBlock Analog; - LB260_FirmwareBlock Firmware; - LB260_DvbCTBlock DvbCT; + LB244_AnalogBlock Analog; + LB244_FirmwareBlock Firmware; + LB244_DvbCTBlock DvbCT; TLL_DvbSBlock DvbS; TLL_SettingsBlock Settings; }; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-244-LB550U.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-244-LB550U.h new file mode 100644 index 0000000..b006586 --- /dev/null +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-244-LB550U.h @@ -0,0 +1,241 @@ +#include "tll-common.h" + +#define MAX_SAT_COUNT 64 +struct TLL44_Satellite; +typedef TLL44_Satellite TLL_Satellite; + +#define MAX_TP_COUNT 2400 +struct TLL48_Transponder; +typedef TLL48_Transponder TLL_Transponder; + +#define MAX_DVBS_COUNT 6000 +struct TLL76_SatChannel; +typedef TLL76_SatChannel TLL_SatChannel; + +#define MAX_LNB_COUNT 40 +struct TLL48_Lnb; +typedef TLL48_Lnb TLL_Lnb; + +#define DVBS_CHANNELLIST_PREFIXSIZE 2 + +#include "tll-satellite.h" + +struct LB244_AnalogChannel +{ + byte t1[8]; + TLL_SignalSource SignalSource; + byte t1b; + word ChannelTransponder1; + word ProgramNr; + word LogicalProgramNr1; + byte t2[4]; + byte Favorites1; + byte t2b[3]; + word Frequency1Div50; + word APID1; + byte ChannelNumberInBand; + byte ChannelBand; + byte t3[18]; + char CH_Name1[40]; + byte CH_NameLength1; + byte t4; + word SID1; + byte t5a[45]; + byte na_NitVersion; + word t5b; + word ChannelTransponder2; + word t5c; + dword FrequencyDiv50; + byte t6[6]; + word ONID; + word TSID; + byte t7[19]; + word ChannelTransponder3; + byte t7b; + word ProgramNr2; + word LogicalProgramNr2; + word ChannelTransponder4; + byte Favorites2; + TLL_EditFlags EditFlags; + word SID2; + byte ServiceType; + byte CH_NameLength2; + char CH_Name2[40]; + byte t10[0]; + word Frequency2Div50; + word APID2; + word u1; + word u2; + byte t11[8]; +}; + +struct LB244_AnalogBlock +{ + dword BlockSize; + dword ChannelCount; + LB244_AnalogChannel Channels[ChannelCount]; +}; + +struct LB244_HotelSettings +{ + byte HotelModeActive; + byte PowerOnStatus; + byte SetupMenuDisplay; + byte ProgramChange; + byte InputSourceChange; + byte MenuDisplay; + byte OsdDisplay; + byte LgIrOperation; + byte LocalKeyOp; + byte MaxVolume; + byte Unknown1; + byte DtvChannelUpdate; + byte PowerOnDefault; + byte InputSource; + word Programme; + byte Unknown2; + byte Volume; + byte AvSettings; + byte RadioVideoBlank; + byte unknown3; + byte StartProgNr; + byte unknown4; + byte NumberOfPrograms; + byte RadioNameDisplay; + byte unknown5[2]; + byte AccessCode[4]; +}; + +struct LB244_FirmwareBlock +{ + dword BlockSize; + byte u[17808]; + // LB244_HotelSettings HotelSettings; + // byte Data[BlockSize - 38251 - sizeof(LB244_HotelSettings)]; +}; + +struct LB244_DvbCtChannel +{ + byte t1[8]; + TLL_SignalSource SignalSource; + byte t1b; + word ChannelTransponder1; + word ProgramNr; + word LogicalProgramNr1; + byte t2a[4]; + byte Fav1; + byte t2b[3]; + word PcrPid1; + word APID1; + byte t2c[8]; + word VPID1; + byte t3[6]; + char CH_Name1[40]; + byte CH_NameLength1; + byte t4; + word SID1; + byte t5a[45]; + byte NitVersion; + word t5b; + word ChannelTransponder2; + word t5c; + dword Frequency; + byte t6[6]; + word ONID; + word TSID; + word NID; + dword SpecialData; + byte t7[13]; + word ChannelTransponder3; + byte t7b; + word ProgramNr2; + word LogicalProgramNr2; + word ChannelTransponder4; + byte Favorites2; + TLL_EditFlags EditFlags; + word SID2; + byte ServiceType; + byte CH_NameLength2; + char CH_Name2[40]; + byte t10[0]; + word PcrPid2; + word APID2; + word u1; + word u2; + byte t11[8]; +}; + +struct LB244_DvbCTBlock +{ + dword BlockSize; + dword ChannelCount; + LB244_DvbCtChannel Channels[ChannelCount]; +}; + +struct TLL48_Transponder +{ + word FirstChannelIndex; + word LastChannelIndex; + word ChannelCount; + byte t1[6]; + word TP_Number; + byte t1b[2]; + word TP_Freq; + byte t2[8]; + word NID; + word TID; + byte t3[3]; + word SRateTimes2; + byte t4[9]; + byte SatIndexTimes2; + byte t5[3]; + byte u40[0]; +}; + +struct TLL76_SatChannel +{ + word LnbConfigIndex; + word u2; + byte SourceType; + word TP_Number; + byte u3; + word CH_Number; + word CH_NumberFixed; + word TP_Number2; + byte FavCrypt; + byte LockSkipHide; + word SID; + byte ServiceType; + byte CH_NameLength; + char CH_Name[40]; + word VPID; + word APID; + word APID2; + word XPID; + byte t6[8]; +}; + +struct TLL48_Lnb +{ + byte SettingsID; + byte t2[3]; + byte SatelliteID; + byte t3[3]; + char FrequenceName[12]; + word LOF1; + byte t4[2]; + word LOF2; + byte t5[22]; +}; + + +public struct LB550U +{ + byte Header[4]; + + LB244_AnalogBlock Analog; + LB244_FirmwareBlock Firmware; + LB244_DvbCTBlock DvbCT; + TLL_DvbSBlock DvbS; + TLL_SettingsBlock Settings; +}; diff --git a/readme.txt b/readme.txt index 2bc2a8c..8a1b9ed 100644 --- a/readme.txt +++ b/readme.txt @@ -1,10 +1,10 @@ -Version v2014-05-26 (beta) ================================================ +Version v2014-05-29 ======================================================= Changes: -- supports LG's 2014 LB5xx models' xxLB5*.TLL satellite channel lists - (works for satellite channels. DVB-C/T are not implemented due to lack of - test files) -- supports LG's 2014 LB6xx and higher models' GlobalClone.TLL channel lists +- supports LG LB55xx and LB56xx xxLB*.TLL channel lists +- supports LG LB58xx*.TLL channel lists + (satellite channels ONLY due to lack of DVB-C/T test files) +- supports LG *Clone*.TLL channel lists (e.g. LA8xxx, LB6xxx, LB7xxx models) (deleting channels is not yet implemented) The complete change log can be found at the end of this document @@ -54,8 +54,8 @@ Samsung LG ------ - Series: CS, DM, LA, LD, LE, LH, LK, LM*, LN, LP**, LS, LT, LV, LW, LX, - PM, PN, PT + Series: CS, DM, LA, LB, LD, LE, LH, LK, LM*, LN, LP**, LS, LT, LV, LW, + LX, PM, PN, PT Lists: Analog TV, DTV (DVB-C, DVB-T), Radio (DVB-C/T), Sat-DTV (DVB-S2), Sat-Radio (DVB-S2) @@ -119,11 +119,11 @@ OTHER DEALINGS IN THE SOFTWARE. Change log ================================================================ -2014-05-26 (beta) -- supports LG's 2014 LB5xx models' xxLB5*.TLL satellite channel lists - (works for satellite channels. DVB-C/T are not implemented due to lack of - test files) -- supports LG's 2014 LB6xx and higher models' GlobalClone.TLL channel lists +2014-05-29 +- supports LG LB55xx and LB56xx xxLB*.TLL channel lists +- supports LG LB58xx*.TLL channel lists + (satellite channels ONLY due to lack of DVB-C/T test files) +- supports LG *Clone*.TLL channel lists (e.g. LA8xxx, LB6xxx, LB7xxx models) (deleting channels is not yet implemented) 2014-05-06