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