From 8ce26520ac36c50fc117d20c2eddd8d5095f091c Mon Sep 17 00:00:00 2001 From: hbeham Date: Tue, 12 Nov 2013 18:25:15 +0100 Subject: [PATCH] changes: - experimental support for modifying LG channel lists which contain LCNs - reverted some Samsung flag-handling due to user reports --- ChanSort.Api/ChanSort.Api.csproj | 1 - ChanSort.Api/Controller/SerializerBase.cs | 1 + ChanSort.Api/Model/ChannelInfo.cs | 1 + ChanSort.Api/Model/ChannelList.cs | 4 + ChanSort.Api/Utils/DvbChannelMappingBase.cs | 125 ------------------ ChanSort.Loader.LG/ChanSort.Loader.LG.ini | 13 +- .../PresetProgramNrDialog.Designer.cs | 1 + ChanSort.Loader.LG/PresetProgramNrDialog.cs | 6 + ChanSort.Loader.LG/PresetProgramNrDialog.resx | 14 +- ChanSort.Loader.LG/SatChannel.cs | 3 - ChanSort.Loader.LG/TllChannelBase.cs | 7 +- ChanSort.Loader.LG/TllFileSerializer.cs | 21 ++- ChanSort.Loader.Samsung/ScmChannelBase.cs | 2 + ChanSort.Loader.Samsung/ScmSerializer.cs | 2 +- .../chansort.h | 10 ++ .../tll-164_LH3000.h | 26 ++-- .../tll-164_LH_LU_LF.h | 12 +- ...E_LK.h => tll-176-LD_LE_LK_LX_LW45_LW54.h} | 16 ++- .../tll-180-PT.h | 13 +- .../tll-184-LV_LW_LK950S.h | 11 +- .../tll-188-LM611S.h | 9 +- .../tll-192-LM_LS.h | 4 +- .../tll-212-LT.h | 9 +- .../tll-212-PN.h | 9 +- .../tll-224-LN.h | 9 +- .../tll-256-LA.h | 4 +- .../tll-common.h | 4 +- Information/LG+Samsung Model Info.xlsx | Bin 27072 -> 34975 bytes Test.Loader/LgTest.cs | 8 +- 29 files changed, 137 insertions(+), 208 deletions(-) delete mode 100644 ChanSort.Api/Utils/DvbChannelMappingBase.cs rename Information/FileStructures_for_HHD_Hex_Editor_Neo/{tll-176-LD_LE_LK.h => tll-176-LD_LE_LK_LX_LW45_LW54.h} (90%) diff --git a/ChanSort.Api/ChanSort.Api.csproj b/ChanSort.Api/ChanSort.Api.csproj index 05552f8..bd5d3bb 100644 --- a/ChanSort.Api/ChanSort.Api.csproj +++ b/ChanSort.Api/ChanSort.Api.csproj @@ -90,7 +90,6 @@ - diff --git a/ChanSort.Api/Controller/SerializerBase.cs b/ChanSort.Api/Controller/SerializerBase.cs index 7d8ca3d..b669359 100644 --- a/ChanSort.Api/Controller/SerializerBase.cs +++ b/ChanSort.Api/Controller/SerializerBase.cs @@ -46,6 +46,7 @@ namespace ChanSort.Api { sb.Append(list.ShortCaption).AppendLine("-----"); sb.Append("number of channels: ").AppendLine(list.Count.ToString()); + sb.Append("number of predefined channel numbers: ").AppendLine(list.PresetProgramNrCount.ToString()); sb.Append("number of duplicate program numbers: ").AppendLine(list.DuplicateProgNrCount.ToString()); sb.Append("number of duplicate channel identifiers: ").AppendLine(list.DuplicateUidCount.ToString()); int deleted = 0; diff --git a/ChanSort.Api/Model/ChannelInfo.cs b/ChanSort.Api/Model/ChannelInfo.cs index 1d327b6..ad4e262 100644 --- a/ChanSort.Api/Model/ChannelInfo.cs +++ b/ChanSort.Api/Model/ChannelInfo.cs @@ -41,6 +41,7 @@ namespace ChanSort.Api public string SatPosition { get; set; } public Transponder Transponder { get; set; } public IList FavIndex { get; private set; } + public int ProgramNrPreset { get; set; } public bool IsNameModified { get; set; } diff --git a/ChanSort.Api/Model/ChannelList.cs b/ChanSort.Api/Model/ChannelList.cs index 7cc4d0c..cb12524 100644 --- a/ChanSort.Api/Model/ChannelList.cs +++ b/ChanSort.Api/Model/ChannelList.cs @@ -30,6 +30,7 @@ namespace ChanSort.Api public int DuplicateProgNrCount { get { return duplicateProgNrCount; } } public bool ReadOnly { get; set; } public int MaxChannelNameLength { get; set; } + public int PresetProgramNrCount { get; private set; } #region Caption public string Caption @@ -93,6 +94,9 @@ namespace ChanSort.Api } byNameList.Add(ci); + if (ci.ProgramNrPreset != 0) + ++this.PresetProgramNrCount; + this.channels.Add(ci); return warning2; diff --git a/ChanSort.Api/Utils/DvbChannelMappingBase.cs b/ChanSort.Api/Utils/DvbChannelMappingBase.cs deleted file mode 100644 index d64c1aa..0000000 --- a/ChanSort.Api/Utils/DvbChannelMappingBase.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System.Text; - -namespace ChanSort.Api -{ - public class DvbChannelMappingBase : ChannelMappingBase - { - protected const string offChannelTransponder = "offChannelTransponder"; - protected const string offPcrPid = "offPcrPid"; - protected const string offVideoPid = "offVideoPid"; - protected const string offAudioPid = "offAudioPid"; - protected const string offServiceId = "offServiceId"; - protected const string offOriginalNetworkId = "offOriginalNetworkId"; - protected const string offTransportStreamId = "offTransportStreamId"; - protected const string offServiceType = "offServiceType"; - protected const string offSymbolRate = "offSymbolRate"; - protected const string offEncrypted = "offEncrypted"; - protected const string maskEncrypted = "maskEncrypted"; - protected const string offShortName = "offShortName"; - protected const string offShortNameLength = "offShortNameLength"; - protected const string lenShortName = "lenShortName"; - - - #region ctor() - public DvbChannelMappingBase(IniFile.Section settings, int dataLength, Encoding stringEncoding) - : base(settings, dataLength, stringEncoding) - { - } - #endregion - - #region ChannelOrTransponder - public virtual byte ChannelOrTransponder - { - get { return this.GetByte(offChannelTransponder); } - set { this.SetByte(offChannelTransponder, value); } - } - #endregion - - #region ShortName - public int ShortNameLength - { - get - { - var off = this.GetOffsets(offShortNameLength); - if (off.Length > 0) - return this.GetWord(off[0]); - off = this.GetOffsets(lenShortName); // not an offset! - return off.Length > 0 ? off[0] : 0; - } - } - - public override string ShortName { get { return this.GetString(offShortName, this.ShortNameLength); } } - #endregion - - #region PcrPid - public virtual ushort PcrPid - { - get { return this.GetWord(offPcrPid); } - set { this.SetWord(offPcrPid, value); } - } - #endregion - - #region VideoPid - public virtual ushort VideoPid - { - get { return this.GetWord(offVideoPid); } - set { this.SetWord(offVideoPid, value); } - } - #endregion - - #region AudioPid - public virtual ushort AudioPid - { - get { return this.GetWord(offAudioPid); } - set { this.SetWord(offAudioPid, value); } - } - #endregion - - #region ServiceId - public virtual ushort ServiceId - { - get { return this.GetWord(offServiceId); } - set { this.SetWord(offServiceId, value); } - } - #endregion - - #region OriginalNetworkId - public virtual ushort OriginalNetworkId - { - get { return this.GetWord(offOriginalNetworkId); } - set { this.SetWord(offOriginalNetworkId, value); } - } - #endregion - - #region TransportStreamId - public virtual ushort TransportStreamId - { - get { return this.GetWord(offTransportStreamId); } - set { this.SetWord(offTransportStreamId, value); } - } - #endregion - - #region ServiceType - public virtual byte ServiceType - { - get { return this.GetByte(offServiceType); } - set { this.SetByte(offServiceType, value); } - } - #endregion - - #region SymbolRate - public virtual ushort SymbolRate - { - get { return this.GetWord(offSymbolRate); } - set { this.SetWord(offSymbolRate, value); } - } - #endregion - - #region Encrypted - public virtual bool Encrypted - { - get { return this.GetFlag(offEncrypted, maskEncrypted); } - } - #endregion - } -} diff --git a/ChanSort.Loader.LG/ChanSort.Loader.LG.ini b/ChanSort.Loader.LG/ChanSort.Loader.LG.ini index a3d0e58..6486e57 100644 --- a/ChanSort.Loader.LG/ChanSort.Loader.LG.ini +++ b/ChanSort.Loader.LG/ChanSort.Loader.LG.ini @@ -8,6 +8,7 @@ offSignalSource = 8 offChannelTransponder = 10, 122, 170, 176 offProgramNr = 12, 172 + offProgramNrPreset = 14, 174 offFavorites = 20 offPcrPid = 24, 236 offAudioPid = 26 @@ -37,6 +38,7 @@ offSignalSource = 8 offChannelTransponder = 10, 118, 153, 160 offProgramNr = 12, 156 + offProgramNrPreset = 14, 158 offFavorites = 20 offPcrPid = 24, 208 offAudioPid = 26 @@ -66,6 +68,7 @@ offSignalSource = 8 offChannelTransponder = 10, 106, 141, 148 offProgramNr = 12, 144 + offProgramNrPreset = 14, 146 offFavorites = 20 offPcrPid = 22, 200 offAudioPid = 24 @@ -95,6 +98,7 @@ offSignalSource = 8 offChannelTransponder = 10, 110, 141, 148 offProgramNr = 12, 144 + offProgramNrPreset = 14, 146 offFavorites = 22 offPcrPid = 24, 196 offAudioPid = 26 @@ -124,6 +128,7 @@ offSignalSource = 8 offChannelTransponder = 10, 94, 126, 132 offProgramNr = 12, 128 + offProgramNrPreset = 14, 130 offFavorites = 20 offPcrPid = 22, 180 offAudioPid = 24 @@ -153,6 +158,7 @@ offSignalSource = 8 offChannelTransponder = 10, 94, 125, 132 offProgramNr = 12, 128 + offProgramNrPreset = 14, 130 offFavorites = 20 offPcrPid = 22, 180 offAudioPid = 24 @@ -182,6 +188,7 @@ offSignalSource = 8 offChannelTransponder = 10, 90, 121, 128 offProgramNr = 12, 124 + offProgramNrPreset = 14, 126 offFavorites = 20 offPcrPid = 22, 176 offAudioPid = 24 @@ -211,6 +218,7 @@ offSignalSource = 8 offChannelTransponder = 10, 90, 124 offProgramNr = 12 + offProgramNrPreset = 14 offFavorites = 20 offPcrPid = 22, 172 offAudioPid = 24 @@ -241,6 +249,7 @@ offSignalSource = 8 offChannelTransponder = 10, 86, 120 offProgramNr = 12 + offProgramNrPreset = 14 offFavorites = 20 offPcrPid = 22, 168 offAudioPid = 24 @@ -265,11 +274,12 @@ offAudioPid2 = 170 [ACTChannelDataMapping:164] - ; DM and LH series (except LH3000) + ; DM, LF, LH, LU (except LH3000) reorderChannelData = 1 lenName = 40 offChannelTransponder = 9, 112 offProgramNr = 10 + offProgramNrPreset = 12 offFavorites = 18 offPcrPid = 20, 156 offAudioPid = 22 @@ -299,6 +309,7 @@ lenName = 40 offChannelTransponder = 9, 108 offProgramNr = 10 + offProgramNrPreset = 12 offFavorites = 18 offPcrPid = 20, 152 offAudioPid = 22 diff --git a/ChanSort.Loader.LG/PresetProgramNrDialog.Designer.cs b/ChanSort.Loader.LG/PresetProgramNrDialog.Designer.cs index 3451a1a..cee708e 100644 --- a/ChanSort.Loader.LG/PresetProgramNrDialog.Designer.cs +++ b/ChanSort.Loader.LG/PresetProgramNrDialog.Designer.cs @@ -90,6 +90,7 @@ resources.ApplyResources(this.btnOk, "btnOk"); this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK; this.btnOk.Name = "btnOk"; + this.btnOk.Click += new System.EventHandler(this.btnOk_Click); // // labelControl2 // diff --git a/ChanSort.Loader.LG/PresetProgramNrDialog.cs b/ChanSort.Loader.LG/PresetProgramNrDialog.cs index e1a5f0a..16fa98a 100644 --- a/ChanSort.Loader.LG/PresetProgramNrDialog.cs +++ b/ChanSort.Loader.LG/PresetProgramNrDialog.cs @@ -19,5 +19,11 @@ namespace ChanSort.Loader.LG } catch { } } + + private void btnOk_Click(object sender, System.EventArgs e) + { + if (ModifierKeys == (Keys.Alt|Keys.Control)) + this.DialogResult = DialogResult.Yes; + } } } diff --git a/ChanSort.Loader.LG/PresetProgramNrDialog.resx b/ChanSort.Loader.LG/PresetProgramNrDialog.resx index 2616fb6..9aa4ff8 100644 --- a/ChanSort.Loader.LG/PresetProgramNrDialog.resx +++ b/ChanSort.Loader.LG/PresetProgramNrDialog.resx @@ -112,12 +112,12 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + Top, Left, Right @@ -125,14 +125,14 @@ Vertical - + 10, 49 560, 26 - + 0 @@ -326,7 +326,7 @@ linkDetails - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -391,7 +391,7 @@ 0 - + True diff --git a/ChanSort.Loader.LG/SatChannel.cs b/ChanSort.Loader.LG/SatChannel.cs index c4f94ed..953530c 100644 --- a/ChanSort.Loader.LG/SatChannel.cs +++ b/ChanSort.Loader.LG/SatChannel.cs @@ -6,10 +6,8 @@ namespace ChanSort.Loader.LG { private const string _SatConfigIndex = "offSatelliteNr"; private const string _TransponderIndex = "offTransponderIndex"; - private const string _ProgramNrPreset = "offProgramNrPreset"; public bool InUse { get; private set; } - public int ProgramNrPreset { get; private set; } public SatChannel(int order, int slot, DataMapping data, DataRoot dataRoot) : base(data) { @@ -20,7 +18,6 @@ namespace ChanSort.Loader.LG this.InitCommonData(slot, SignalSource.DvbS, data); this.InitDvbData(data); - this.ProgramNrPreset = data.GetWord(_ProgramNrPreset); int transponderIndex = data.GetWord(_TransponderIndex); Transponder transponder = dataRoot.Transponder.TryGet(transponderIndex); Satellite sat = transponder.Satellite; diff --git a/ChanSort.Loader.LG/TllChannelBase.cs b/ChanSort.Loader.LG/TllChannelBase.cs index 59731e8..333ff13 100644 --- a/ChanSort.Loader.LG/TllChannelBase.cs +++ b/ChanSort.Loader.LG/TllChannelBase.cs @@ -7,6 +7,7 @@ namespace ChanSort.Loader.LG // common protected const string _ProgramNr = "offProgramNr"; protected const string _ProgramNr2 = "offProgramNr2"; // not for DVB-S + protected const string _ProgramNrPreset = "offProgramNrPreset"; protected const string _Name = "offName"; protected const string _NameLength = "offNameLength"; protected const string _Favorites = "offFavorites"; // not for DVB-S (which only uses Favorite2) @@ -68,6 +69,7 @@ namespace ChanSort.Loader.LG this.OriginalNetworkId = data.GetWord(_OriginalNetworkId); this.TransportStreamId = data.GetWord(_TransportStreamId); this.ServiceType = data.GetByte(_ServiceType); + this.ProgramNrPreset = data.GetWord(_ProgramNrPreset); } #endregion @@ -91,6 +93,7 @@ namespace ChanSort.Loader.LG int progNr = this.NewProgramNr == -1 ? 0 : this.NewProgramNr; mapping.SetWord(_ProgramNr, progNr | ((this.SignalSource & SignalSource.Radio) != 0 ? 0x4000 : 0)); mapping.SetWord(_ProgramNr2, (mapping.GetWord(_ProgramNr2) & 0x0003) | (progNr << 2)); + mapping.SetWord(_ProgramNrPreset, 0); if (this.IsNameModified) { mapping.SetString(_Name, this.Name, 40); @@ -105,10 +108,12 @@ namespace ChanSort.Loader.LG if (this.NewProgramNr == -1) { mapping.SetFlag(_Deleted, true); - mapping.SetByte("off"+_Moved, 0); //skip,lock,hide,moved + mapping.SetByte("off" + _Moved, 0); //skip,lock,hide,moved } else + { mapping.SetFlag(_Moved, true); + } this.OldProgramNr = this.NewProgramNr; } diff --git a/ChanSort.Loader.LG/TllFileSerializer.cs b/ChanSort.Loader.LG/TllFileSerializer.cs index 3eb8f83..8512fbc 100644 --- a/ChanSort.Loader.LG/TllFileSerializer.cs +++ b/ChanSort.Loader.LG/TllFileSerializer.cs @@ -67,7 +67,6 @@ namespace ChanSort.Loader.LG private int deletedChannelsHard; private int deletedChannelsSoft; private int dvbsChannelsAtPr0; - private int presetChannels; private bool removeDeletedActChannels = false; private bool mustReorganizeDvbs = false; @@ -161,16 +160,17 @@ namespace ChanSort.Loader.LG this.ReadDvbSBlock(ref off); this.ReadSettingsBlock(ref off); - if (this.presetChannels > 0) + if (this.satTvChannels.PresetProgramNrCount > 0 || this.satRadioChannels.PresetProgramNrCount > 0) { - this.satTvChannels.ReadOnly = true; - this.satRadioChannels.ReadOnly = true; foreach (var channel in this.satTvChannels.Channels) channel.NewProgramNr = channel.OldProgramNr; foreach (var channel in this.satRadioChannels.Channels) channel.NewProgramNr = channel.OldProgramNr; - if (!IsTesting) - new PresetProgramNrDialog().ShowDialog(); + if (IsTesting || new PresetProgramNrDialog().ShowDialog() != DialogResult.Yes) + { + this.satTvChannels.ReadOnly = true; + this.satRadioChannels.ReadOnly = true; + } } #if STORE_DVBS_CHANNELS_IN_DATABASE @@ -540,9 +540,6 @@ namespace ChanSort.Loader.LG ++this.duplicateChannels; } this.DataRoot.AddChannel(list, ci); - - if (ci.ProgramNrPreset != 0) - ++this.presetChannels; } if (!this.nextChannelIndex.TryGetValue(index, out index) || index == -1) @@ -941,6 +938,7 @@ namespace ChanSort.Loader.LG #endregion + #region CreateChannelFromProxy() private ChannelInfo CreateChannelFromProxy(ChannelInfo proxy) { if ((proxy.SignalSource & SignalSource.Sat) != 0) @@ -953,6 +951,7 @@ namespace ChanSort.Loader.LG } return null; } + #endregion #region ReorderActChannelsPhysically() private void ReorderActChannelsPhysically() @@ -1047,6 +1046,8 @@ namespace ChanSort.Loader.LG public override string GetFileInformation() { StringBuilder sb = new StringBuilder(); + sb.AppendLine(base.GetFileInformation()); + sb.AppendLine("ANALOG"); sb.Append("Number of data records: ").Append(this.analogChannelCount).AppendLine(); sb.Append("Length of data record: ").Append(this.actChannelSize).AppendLine(); @@ -1072,7 +1073,6 @@ namespace ChanSort.Loader.LG sb.Append("Channel records erased (duplicates): ").Append(this.duplicateChannels).AppendLine(); sb.Append("Channel records with Pr# 0: ").Append(dvbsChannelsAtPr0).AppendLine(); sb.Append("Channel records with duplicate Pr#: ").Append(numberOfDupePrNr).AppendLine(); - sb.Append("Channel records with preset Pr#: ").Append(this.presetChannels).AppendLine(); } else sb.AppendLine("not present"); @@ -1156,6 +1156,5 @@ namespace ChanSort.Loader.LG internal int SatChannelLength { get { return satConfig != null ? satConfig.dvbsChannelLength : 0; } } internal decimal DvbsSymbolRateCorrectionFactor { get { return this.dvbsSymbolRateFactor; } } internal int FirmwareBlockSize { get { return this.firmwareBlockSize; } } - internal bool HasPresetDvbsChannelNumbers { get { return this.presetChannels > 0; } } } } diff --git a/ChanSort.Loader.Samsung/ScmChannelBase.cs b/ChanSort.Loader.Samsung/ScmChannelBase.cs index 07a86da..2145381 100644 --- a/ChanSort.Loader.Samsung/ScmChannelBase.cs +++ b/ChanSort.Loader.Samsung/ScmChannelBase.cs @@ -58,6 +58,8 @@ namespace ChanSort.Loader.Samsung this.Lock = data.GetFlag(_Lock); this.Encrypted = data.GetFlag(_Encrypted); this.IsDeleted = data.GetFlag(_Deleted); + if (this.IsDeleted) + this.OldProgramNr = -1; } #endregion diff --git a/ChanSort.Loader.Samsung/ScmSerializer.cs b/ChanSort.Loader.Samsung/ScmSerializer.cs index 86e7056..700250c 100644 --- a/ChanSort.Loader.Samsung/ScmSerializer.cs +++ b/ChanSort.Loader.Samsung/ScmSerializer.cs @@ -401,7 +401,7 @@ namespace ChanSort.Loader.Samsung for (int slotIndex = 0; slotIndex < count; slotIndex++) { DigitalChannel ci = new DigitalChannel(slotIndex, isCable, rawChannel, frequency, c.SortedFavorites); - if (ci.InUse && !ci.IsDeleted) + if (ci.InUse && !ci.IsDeleted && ci.OldProgramNr > 0) this.DataRoot.AddChannel(list, ci); rawChannel.BaseOffset += entrySize; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/chansort.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/chansort.h index 593c4bb..8e30a9c 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/chansort.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/chansort.h @@ -2,3 +2,13 @@ typedef unsigned char byte; typedef unsigned short word; typedef unsigned int dword; typedef big_endian unsigned short uc16be; + +enum ServiceType : byte +{ + SDTV = 1, + Radio = 2, + Data = 12, + SDTV_MPEG4 = 22, + HDTV = 25, + Option = 211 +}; \ No newline at end of file diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-164_LH3000.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-164_LH3000.h index a2f2022..12b15a9 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-164_LH3000.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-164_LH3000.h @@ -8,7 +8,8 @@ struct LH3000_AnalogChannel byte t1b[6]; byte ChannelTransponder1; word ProgramNr; - word t2[3]; + word LogicalProgramNr1; + word t2[2]; byte Favorites1; byte t2d; word Freqency1Div50; @@ -20,23 +21,23 @@ struct LH3000_AnalogChannel byte CH_NameLength1; byte t4; word SID1; - byte t5a[14]; // ! + byte t5a[14]; word ONID; word TSID; - byte t5b[6]; - dword Frequency; - byte t6[8]; - word ProgramNr2; - byte t7[2]; + byte t5b[14]; + word ProgramNrTimes4; + word LogicalProgramNr2; byte ChannelTransponder4; byte _Favorites2; byte LockSkipHide; - byte ServiceType; + byte CH_NameLength2; char CH_Name2[40]; word Frequency2Div50; word APID2; word t11; word t12; + ServiceType ServiceType; + byte t13[3]; }; @@ -47,7 +48,7 @@ struct LH3000_DvbCtChannel byte t1b[6]; byte ChannelTransponder1; word ProgramNr; - word LogicalChannelNumber; + word LogicalProgramNr1; word t2[2]; byte Favorites1; byte t2d; @@ -62,7 +63,9 @@ struct LH3000_DvbCtChannel byte t5a[14]; word ONID; word TSID; - byte t5b[18]; + byte t5b[14]; + word ProgramNrTimes4; + word LocicalProgramNr2; byte ChannelTransponder4; byte _Favorites2; byte LockSkipHide; @@ -72,7 +75,8 @@ struct LH3000_DvbCtChannel word APID2; word t11; word SID2; - byte t13[4]; + ServiceType ServiceType; + byte t13[3]; }; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-164_LH_LU_LF.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-164_LH_LU_LF.h index 7b3205c..d1e0752 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-164_LH_LU_LF.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-164_LH_LU_LF.h @@ -7,7 +7,7 @@ struct LH164_AnalogChannel byte t1b[6]; byte ChannelTransponder1; word ProgramNr; - word t2[3]; + word LogicalProgramNr1; byte Favorites1; byte t2d; word Freqency1Div50; @@ -25,8 +25,8 @@ struct LH164_AnalogChannel byte t5b[6]; dword Frequency; byte t6[8]; - word ProgramNr2; - byte t7[2]; + word ProgramNrTimes4; + word LogicalProgramNr2; byte ChannelTransponder4; byte _Favorites2; byte LockSkipHide; @@ -46,7 +46,7 @@ struct LH164_DvbCtChannel byte t1b[6]; byte ChannelTransponder1; word ProgramNr; - word LogicalChannelNumber; + word LogicalProgramNr2; word t2[2]; byte Favorites1; byte t2d; @@ -64,8 +64,8 @@ struct LH164_DvbCtChannel byte t5b[6]; dword Frequency; byte t6[8]; - word ProgramNr2; - byte t7[2]; + word ProgramNrTimes4; + word LogicalProgramNr2; byte ChannelTransponder4; byte _Favorites2; byte LockSkipHide; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-176-LD_LE_LK.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-176-LD_LE_LK_LX_LW45_LW54.h similarity index 90% rename from Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-176-LD_LE_LK.h rename to Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-176-LD_LE_LK_LX_LW45_LW54.h index df45f90..c6f7388 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-176-LD_LE_LK.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-176-LD_LE_LK_LX_LW45_LW54.h @@ -7,7 +7,8 @@ struct LD176_AnalogChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word t2[3]; + word LogicalProgramNr1; + word t2[2]; byte Favorites1; byte t2d; word Freqency1Div50; @@ -26,9 +27,9 @@ struct LD176_AnalogChannel byte t6[2]; word ONID; word TSID; - byte t7[19]; - word ProgramNr2; - byte t8; + byte t7[18]; + word ProgramNrTimes4; + word LogicalProgramNr2; word ChannelTransponder4; byte Favorites2; byte LockSkipHide; @@ -48,7 +49,8 @@ struct LD176_DvbCtChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word t2[3]; + word LogicalProgramNr1; + word t2[2]; byte Favorites1; byte t2d; word PcrPid; @@ -66,8 +68,8 @@ struct LD176_DvbCtChannel word ONID; word TSID; byte t7[18]; - word ProgramNr2; - byte t8[2]; + word ProgramNrTimes4; + word LogicalProgramNr2; word ChannelTransponder4; byte Favorites2; byte LockSkipHide; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-180-PT.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-180-PT.h index 8cfe1c5..d1bd1f7 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-180-PT.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-180-PT.h @@ -7,7 +7,8 @@ struct PT180_AnalogChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word t2[3]; + word LogicalProgramNr1; + word t2[2]; byte Favorites1; byte t2b; word Frequency1Div50; @@ -26,8 +27,8 @@ struct PT180_AnalogChannel word ONID; word TSID; byte t7[18]; - word ProgramNr2; - byte t8[2]; + word ProgramNrTimes4; + word LogicalProgramNr2; word ChannelTransponder4; byte Favorites2; byte LockSkipHide; @@ -48,7 +49,7 @@ struct PT180_DvbCtChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word LogicalChannelNumber; + word LogicalProgramNr2; word t2[2]; byte Favorites1; byte t2d; @@ -67,8 +68,8 @@ struct PT180_DvbCtChannel word ONID; word TSID; byte t7[18]; - word ProgramNr2; - byte t8[2]; + word ProgramNrTimes4; + word LogicalProgramNr2; word ChannelTransponder4; byte Favorites2; byte LockSkipHide; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-184-LV_LW_LK950S.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-184-LV_LW_LK950S.h index 10b95b2..1c48c2f 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-184-LV_LW_LK950S.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-184-LV_LW_LK950S.h @@ -12,7 +12,8 @@ struct LV184_AnalogChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word t2[3]; + word LogicalProgramNr1; + word t2[2]; byte Favorites1; byte t2b; word Frequency1Div50; @@ -33,7 +34,8 @@ struct LV184_AnalogChannel byte t7[19]; word ChannelTransponder3; word ProgramNr2; - byte t8b[3]; + word LogicalProgramNr2; + byte t8b; word ChannelTransponder4; byte Favorites2; byte LockSkipHide; @@ -54,7 +56,7 @@ struct LV184_DvbCtChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word LogicalChannelNumber; + word LogicalProgramNr2; word t2[2]; byte Favorites1; byte t2d; @@ -75,7 +77,8 @@ struct LV184_DvbCtChannel byte t7[19]; word ChannelTransponder3; word ProgramNr2; - byte t8b[3]; + word LogicalProgramNr2; + byte t8b; word ChannelTransponder4; byte Favorites2; byte LockSkipHide; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-188-LM611S.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-188-LM611S.h index eb73b2c..2a8603d 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-188-LM611S.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-188-LM611S.h @@ -14,7 +14,8 @@ struct LM188_AnalogChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word t2[3]; + word LogicalProgramNr1; + word t2[2]; byte t2b; byte Favorites1; word Frequency1Div50; @@ -36,7 +37,7 @@ struct LM188_AnalogChannel byte t7[17]; word ChannelTransponder3; word ProgramNr2; - byte t8b[2]; + word LogicalProgramNr2; word ChannelTransponder4; byte Favorites2; byte LockSkipHide; @@ -56,7 +57,7 @@ struct LM188_DvbCtChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word LogicalChannelNumber; + word LogicalProgramNr1; word t2[2]; byte t2b; byte Favorites1; @@ -80,7 +81,7 @@ struct LM188_DvbCtChannel word ChannelTransponder3; byte t8a; word ProgramNr2; - byte t8b[2]; + word LogicalProgramNr2; word ChannelTransponder4; byte Favorites2; byte LockSkipHide; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-192-LM_LS.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-192-LM_LS.h index 609311d..521262f 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-192-LM_LS.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-192-LM_LS.h @@ -18,6 +18,8 @@ typedef TLL72_SatChannel TLL_SatChannel; struct TLL44_Lnb; typedef TLL44_Lnb TLL_Lnb; +#define DVBS_CHANNELLIST_PREFIXSIZE 0 + #include "tll-satellite.h" @@ -115,7 +117,7 @@ struct LM192_DvbCtChannel byte t7[20]; word ChannelTransponder3; word ProgramNr2; - byte t8b[2]; + word LogicalProgramNr2; word ChannelTransponder4; byte Favorites2; byte LockSkipHide; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-212-LT.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-212-LT.h index e784731..7ac3a85 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-212-LT.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-212-LT.h @@ -7,7 +7,8 @@ struct LT212_AnalogChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word t2[3]; + word LogicalProgramNr1; + word t2[2]; byte Favorites1; byte t2d; word Frequency1Div50; @@ -29,7 +30,7 @@ struct LT212_AnalogChannel word ChannelTransponder3; byte t7b; word ProgramNr2; - byte t8[2]; + word LogicalProgramNr2; word ChannelTransponder4; byte t8b[4]; byte Favorites2; @@ -97,7 +98,7 @@ struct LT212_DvbCtChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word LogicalChannelNr; + word LogicalChannelNr1; word t2[2]; byte Favorites1; byte t2d; @@ -120,7 +121,7 @@ struct LT212_DvbCtChannel word ChannelTransponder3; byte t7b; word ProgramNr2; - byte t8[2]; + word LogicalProgramNr2; word ChannelTransponder4; byte t8b[4]; byte Favorites2; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-212-PN.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-212-PN.h index 39db4f1..e6b0ef8 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-212-PN.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-212-PN.h @@ -27,7 +27,8 @@ struct PN212_AnalogChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word t2[3]; + word LogicalProgramNr1; + word t2[2]; byte Favorites1; byte t2d; word Frequency1Div50; @@ -49,7 +50,7 @@ struct PN212_AnalogChannel word ChannelTransponder3; byte t7b; word ProgramNr2; - byte t8[2]; + word LogicalProgramNr2; word ChannelTransponder4; byte t8b[4]; byte Favorites2; @@ -119,7 +120,7 @@ struct PN212_DvbCtChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word LogicalChannelNr; + word LogicalProgramNr1; byte t2[6]; byte Favorites1; byte t2d; @@ -145,7 +146,7 @@ struct PN212_DvbCtChannel word ChannelTransponder3; byte t7b; word ProgramNr2; - word LogicalChannelNr2; + word LogicalProgramNr2; word ChannelTransponder4; byte t8b[0]; byte Favorites2; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-224-LN.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-224-LN.h index 6fb0304..3890fd9 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-224-LN.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-224-LN.h @@ -12,7 +12,8 @@ struct LN224_AnalogChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word t2[3]; + word LogicalProgramNr1; + word t2[2]; byte Favorites1; byte t2d; word Frequency1Div50; @@ -33,7 +34,7 @@ struct LN224_AnalogChannel byte t7[20]; word ChannelTransponder3; word ProgramNr2; - byte t8b[2]; + word LogicalProgramNr2; word ChannelTransponder4; byte Favorites2; byte LockSkipHide; @@ -96,7 +97,7 @@ struct LN224_DvbCtChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word LogicalChannelNumber; + word LogicalProgramNr1; word t2[2]; byte Favorites1; byte t2b[3]; @@ -119,7 +120,7 @@ struct LN224_DvbCtChannel word ChannelTransponder3; byte t7b; word ProgramNr2; - byte t8b[2]; + word LogicalProgramNr2; word ChannelTransponder4; byte Favorites2; byte LockSkipHide; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-256-LA.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-256-LA.h index 616e131..697d663 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-256-LA.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-256-LA.h @@ -25,7 +25,7 @@ struct LA256_AnalogChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word LogicalProgramNr; + word LogicalProgramNr1; byte t2[4]; byte Favorites1; byte t2b[3]; @@ -115,7 +115,7 @@ struct LA256_DvbCtChannel byte t1b; word ChannelTransponder1; word ProgramNr; - word LogicalChannelNumber; + word LogicalProgramNr1; byte t2a[4]; byte Fav1; byte t2b[3]; diff --git a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-common.h b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-common.h index fb56652..73d3a16 100644 --- a/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-common.h +++ b/Information/FileStructures_for_HHD_Hex_Editor_Neo/tll-common.h @@ -1,6 +1,4 @@ -typedef unsigned char byte; -typedef unsigned short word; -typedef unsigned int dword; +#include "chansort.h" struct TLL_HotelSettings { diff --git a/Information/LG+Samsung Model Info.xlsx b/Information/LG+Samsung Model Info.xlsx index ca3c07cd323dfde3c77611b660f9afa718f466cb..93e8b3d9304e0546576c1d1c47567ddd54414e9a 100644 GIT binary patch delta 27082 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 V5=^UbaCorq`U^O?s>nY_{|^{(y_Wz0 delta 19236 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 z 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 R83e)(URmHg*uB0z{SBTh&ZhtX diff --git a/Test.Loader/LgTest.cs b/Test.Loader/LgTest.cs index 17de06c..c1a4003 100644 --- a/Test.Loader/LgTest.cs +++ b/Test.Loader/LgTest.cs @@ -50,7 +50,9 @@ namespace Test.Loader "\t" + (dvbcList != null && dvbcList.Count > 0) + "\t" + serializer.SatChannelLength + "\t" + (satChannelList != null && satChannelList.Count > 0) + - "\t" + serializer.HasPresetDvbsChannelNumbers + + "\t" + (dvbtList != null && dvbtList.PresetProgramNrCount > 0) + + "\t" + (dvbcList != null && dvbcList.PresetProgramNrCount > 0) + + "\t" + (satChannelList != null && satChannelList.PresetProgramNrCount > 0) + "\t" + serializer.TvCountryCode; string relPath = Path.GetFileName(Path.GetDirectoryName(file))+"\\"+fileName; @@ -61,7 +63,9 @@ namespace Test.Loader "\t" + (dvbtList == null ? 0 : dvbtList.Count) + "\t" + (dvbcList == null ? 0 : dvbcList.Count) + "\t" + (satChannelList == null ? 0 : satChannelList.Count) + - "\t" + serializer.HasPresetDvbsChannelNumbers + + "\t" + (dvbtList == null ? 0 : dvbtList.PresetProgramNrCount) + + "\t" + (dvbcList == null ? 0 : dvbcList.PresetProgramNrCount) + + "\t" + (satChannelList == null ? 0 : satChannelList.PresetProgramNrCount) + "\t" + serializer.TvCountryCode + "\t" + serializer.DvbsSymbolRateCorrectionFactor + "\t" + relPath;