- support for Samsung FreesatD channel list

- support for LG LP series (hotel TV)
- hotel-mode/dtv-update flag editable for all known LG models
- added skip/hide column to left list
- use color in left grid to indicate skipped/hidden channels
This commit is contained in:
hbeham
2013-10-07 16:32:16 +02:00
parent 4c15388012
commit df59285d07
22 changed files with 2635 additions and 87 deletions

View File

@@ -118,7 +118,7 @@
offAudioPid2 = 198
[ACTChannelDataMapping:192]
; LM series with Firmware 4.x (all except LM611S and LM340S)
; LM, LS, PM series with Firmware 4.x (all except LM611S and LM340S)
reorderChannelData = 0
lenName = 40
offSignalSource = 8
@@ -147,7 +147,7 @@
offAudioPid2 = 182
[ACTChannelDataMapping:188]
; LM series with Firmware 3.x (LM611S with exceptions, LM340S)
; CS and LM series with Firmware 3.x (CS460s, LM611S with exceptions, LM340S)
reorderChannelData = 0
lenName = 40
offSignalSource = 8
@@ -176,8 +176,7 @@
offAudioPid2 = 182
[ACTChannelDataMapping:184]
; LV470S,LV570S,LV579S(with exceptions), LW5500,LW5590,LW570S,LW579S,LW650S,LW659S(with exceptions)
; LK950S, CS460S, PM670S, LM611S(with exceptions)
; LV, LW (except LW4500, LW5400), LK950S, PM670S
reorderChannelData = 0
lenName = 40
offSignalSource = 8
@@ -335,17 +334,6 @@
lnbCount = 40
lnbLength = 48
[DvbsBlock:687880]
; everything before LM series + LM340S, LM611S, LS560S
satCount = 64
satLength = 44
transponderCount = 2400
transponderLength = 40
dvbsChannelCount = 7520
dvbsChannelLength = 68
lnbCount = 40
lnbLength = 44
[DvbsBlock:629932]
; LN
satCount = 64
@@ -358,6 +346,16 @@
lnbCount = 40
lnbLength = 48
[DvbsBlock:687880]
; everything before LM series + LM340S, LM611S, LS560S
satCount = 64
satLength = 44
transponderCount = 2400
transponderLength = 40
dvbsChannelCount = 7520
dvbsChannelLength = 68
lnbCount = 40
lnbLength = 44
[DvbsBlock:717960]
; LM, LS and PM series except LM611S, LM340S LS560S
@@ -370,6 +368,18 @@
lnbCount = 40
lnbLength = 44
[DvbsBlock:757800]
; LP series
satCount = 64
satLength = 44
satIndexFactor = 1
transponderCount = 2400
transponderLength = 44
dvbsChannelCount = 7520
dvbsChannelLength = 76
lnbCount = 40
lnbLength = 48
[DvbsBlock:907336]
; LA series
satCount = 64
@@ -394,6 +404,18 @@
offSymbolRate = 25
offSatIndex = 36
[TransponderDataMapping:44LP]
; LP
offFirstChannelIndex = 0
offLastChannelIndex = 2
offChannelCount = 4
offTransponderIndex = 10
offFrequency = 12
offOriginalNetworkId = 18
offTransportStreamId = 20
offSymbolRate = 25
offSatIndex = 38
[TransponderDataMapping:44]
; LN
offFirstChannelIndex = 0
@@ -508,6 +530,35 @@
offVideoPid = 60
offAudioPid = 62
[SatChannelDataMapping:76LP]
; LP series
lenName = 40
offSatelliteNr = 0
offSourceType = 4
offTransponderIndex = 6, 12
offProgramNr = 8
offProgramNrPreset = 10
offFavorites2 = 16
offDeleted = 16
maskDeleted = 0x42
offEncrypted = 16
maskEncrypted = 0x80
offLock = 17
maskLock = 0x01
offSkip = 17
maskSkip = 0x02
offHide = 17
maskHide = 0x04
offProgNrCustomized = 17
maskProgNrCustomized = 0x40
offServiceId = 20
offServiceType = 22
offNameLength = 23
offName = 24
offVideoPid = 64
offAudioPid = 66
[SatChannelDataMapping:92]
; LA series
lenName = 40
@@ -582,7 +633,19 @@
offHotelModeDtvUpdate=12613
[FirmwareData:16024]
; LM611S, LM340S, CS460S
; CS460S, LM611S, LM340S, LS560S
offSize = 0
offHotelModeEnabled=12639
offHotelModeDtvUpdate=12649
[FirmwareData:16232]
; LT
offSize = 0
offHotelModeEnabled=12639
offHotelModeDtvUpdate=12649
[FirmwareData:16376]
; LP
offSize = 0
offHotelModeEnabled=12639
offHotelModeDtvUpdate=12649
@@ -591,10 +654,16 @@
; LN
offSize = 0
offHotelModeEnabled=13627
offHotelModeDtvUpdate=13629
offHotelModeDtvUpdate=13637
[FirmwareData:17240]
; PN
offSize = 0
offHotelModeEnabled=13873
offHotelModeDtvUpdate=13883
[FirmwareData:23072]
; LD420, LD450, LD550
; LE3300, LD420, LD450, LD550
offSize = 0
offHotelModeEnabled=19721
offHotelModeDtvUpdate=19731

View File

@@ -15,6 +15,7 @@
public readonly int lnbLength;
public readonly int[] dvbsSubblockLength;
public readonly int dvbsBlockTotalLength;
public readonly int satIndexFactor;
public int LnbBlockHeaderSize = 12;
@@ -30,6 +31,9 @@
this.dvbsChannelLength = iniSection.GetInt("dvbsChannelLength");
this.lnbCount = iniSection.GetInt("lnbCount");
this.lnbLength = iniSection.GetInt("lnbLength");
this.satIndexFactor = iniSection.GetInt("satIndexFactor");
if (satIndexFactor == 0)
satIndexFactor = 2;
this.dvbsSubblockLength = new[]
{

View File

@@ -20,7 +20,7 @@ namespace ChanSort.Loader.LG
private int firstChannelIndex;
private int lastChannelIndex;
public SatTransponder(int index, DataMapping mapping, DataRoot dataRoot) : base(index)
public SatTransponder(int index, DataMapping mapping, DataRoot dataRoot, int satIndexFactor) : base(index)
{
this.mapping = mapping;
this.data = mapping.Data;
@@ -38,7 +38,7 @@ namespace ChanSort.Loader.LG
this.symbolRate = (this.symbolRate/100 + 1)*100;
// note: a correction factor is applied later after all transponders were loaded (*0.5, *1, *2)
this.Satellite = dataRoot.Satellites.TryGet(mapping.GetByte(_SatIndex)/2);
this.Satellite = dataRoot.Satellites.TryGet(mapping.GetByte(_SatIndex)/satIndexFactor);
}
public int FirstChannelIndex

View File

@@ -12,6 +12,8 @@ namespace ChanSort.Loader.LG
{
public partial class TllFileSerializer : SerializerBase
{
enum SpecialHandlingModels { Standard, LH3000, PN, LP, LT };
private const long DVBS_S2 = 0x0032532D53425644; // reverse of "DVBS-S2\0"
private const long MaxFileSize = 2000000;
private readonly string ERR_fileTooBig = Resource.TllFileSerializerPlugin_ERR_fileTooBig;
@@ -35,6 +37,7 @@ namespace ChanSort.Loader.LG
private readonly ChannelList satRadioChannels = new ChannelList(SignalSource.DvbS | SignalSource.Radio, "Sat Radio");
private byte[] fileContent;
private SpecialHandlingModels specialModel = SpecialHandlingModels.Standard;
private int analogBlockOffset;
private int firmwareBlockOffset;
@@ -132,6 +135,18 @@ namespace ChanSort.Loader.LG
public override void Load()
{
string basename = (Path.GetFileNameWithoutExtension(this.FileName) ?? "").ToUpper();
if (basename.StartsWith("XXLH3000"))
this.specialModel = SpecialHandlingModels.LH3000;
else if (basename.StartsWith("XXPN"))
this.specialModel = SpecialHandlingModels.PN;
else if (basename.StartsWith("XXLP"))
this.specialModel = SpecialHandlingModels.LP;
else if (basename.StartsWith("XXLT"))
this.specialModel = SpecialHandlingModels.LT;
else
this.specialModel = SpecialHandlingModels.Standard;
long fileSize = new FileInfo(this.FileName).Length;
if (fileSize > MaxFileSize)
throw new FileLoadException(string.Format(ERR_fileTooBig, fileSize, MaxFileSize));
@@ -142,7 +157,7 @@ namespace ChanSort.Loader.LG
this.ReadFileHeader(ref off);
this.ReadAnalogChannelBlock(ref off);
this.ReadFirmwareDataBlock(ref off);
this.ReadLtSeriesExtraBlock(ref off);
this.ReadHotelModelExtraBlock(ref off);
this.ReadDvbCtChannels(ref off);
this.ReadDvbSBlock(ref off);
this.ReadSettingsBlock(ref off);
@@ -198,17 +213,16 @@ namespace ChanSort.Loader.LG
}
#endregion
#region ReadLtSeriesExtraBlock()
private void ReadLtSeriesExtraBlock(ref int off)
#region ReadHotelModelExtraBlock()
private void ReadHotelModelExtraBlock(ref int off)
{
if (!(this.specialModel == SpecialHandlingModels.LT || this.specialModel == SpecialHandlingModels.LP))
return;
int size = BitConverter.ToInt32(this.fileContent, off);
int count = BitConverter.ToInt32(this.fileContent, off + 4);
if (size == 4 + count*72 && this.actChannelSize == 212)
{
this.extraBlockOffset = off;
this.extraBlockSize = size;
off += 4 + size;
}
this.extraBlockOffset = off;
this.extraBlockSize = size;
off += 4 + size;
}
#endregion
@@ -273,18 +287,13 @@ namespace ChanSort.Loader.LG
{
int blockSize = this.GetBlockSize(off, minSize: 2);
off += 4;
channelCount = BitConverter.ToInt32(fileContent, off);
off += 4;
if (channelCount == 0) return;
recordSize = GetActChannelRecordSize(off, blockSize, channelCount);
var key = recordSize.ToString();
string basename = (Path.GetFileNameWithoutExtension(this.FileName) ?? "").ToUpper();
if (basename.StartsWith("XXLH3000"))
key += "LH3000";
else if (basename.StartsWith("XXPN"))
key += "PN";
var actMapping = this.actMappings.GetMapping(key);
var actMapping = GetActChannelMapping(recordSize);
this.reorderPhysically = actMapping.Settings.GetInt("reorderChannelData") != 0;
for (int i = 0; i < channelCount; i++)
@@ -298,6 +307,20 @@ namespace ChanSort.Loader.LG
off += recordSize;
}
}
#endregion
#region GetActChannelMapping()
private DataMapping GetActChannelMapping(int recordSize)
{
var key = recordSize.ToString();
if (this.specialModel == SpecialHandlingModels.LH3000)
key += "LH3000";
else if (this.specialModel == SpecialHandlingModels.PN)
key += "PN";
var actMapping = this.actMappings.GetMapping(key);
return actMapping;
}
#endregion
#region GetBlockSize()
@@ -422,11 +445,11 @@ namespace ChanSort.Loader.LG
{
dvbsSymbolRateFactor = 1;
var dvbsSymbolRateMask = 0x7FFFF;
var mapping = this.dvbsTransponderMappings.GetMapping(this.satConfig.transponderLength);
var mapping = GetTransponderMapping();
for (int i=0; i<satConfig.transponderCount; i++)
{
mapping.SetDataPtr(this.fileContent, off + i*satConfig.transponderLength);
SatTransponder transponder = new SatTransponder(i, mapping, this.DataRoot);
SatTransponder transponder = new SatTransponder(i, mapping, this.DataRoot, this.satConfig.satIndexFactor);
if (transponder.Satellite == null)
continue;
@@ -453,6 +476,16 @@ namespace ChanSort.Loader.LG
off += this.satConfig.transponderCount * this.satConfig.transponderLength;
}
private DataMapping GetTransponderMapping()
{
string key = this.satConfig.transponderLength.ToString();
if (this.specialModel == SpecialHandlingModels.LP)
key += "LP";
var mapping = this.dvbsTransponderMappings.GetMapping(key);
return mapping;
}
#endregion
#region ReadDvbsChannelLinkedList()
@@ -476,7 +509,7 @@ namespace ChanSort.Loader.LG
#region ReadDvbsChannels()
private void ReadDvbsChannels(ref int off, int startIndex)
{
var mapping = this.dvbsMappings.GetMapping(satConfig.dvbsChannelLength);
var mapping = GetDvbsChannelMapping();
int index = startIndex;
for (int i = 0; i < this.dvbsChannelCount; i++)
{
@@ -518,6 +551,18 @@ namespace ChanSort.Loader.LG
}
off += satConfig.dvbsMaxChannelCount * satConfig.dvbsChannelLength;
}
#endregion
#region GetDvbsChannelMapping()
private DataMapping GetDvbsChannelMapping()
{
var key = satConfig.dvbsChannelLength.ToString();
if (this.specialModel == SpecialHandlingModels.LP)
key += "LP";
var mapping = this.dvbsMappings.GetMapping(key);
return mapping;
}
#endregion
#region GetSatLocation()
@@ -901,7 +946,7 @@ namespace ChanSort.Loader.LG
{
if ((proxy.SignalSource & SignalSource.Sat) != 0)
{
var mapping = this.dvbsMappings.GetMapping(this.satConfig.dvbsChannelLength);
var mapping = this.GetDvbsChannelMapping();
var channel = SatChannel.CreateFromProxy(proxy, this.DataRoot, mapping, this.satConfig.dvbsChannelLength);
if (channel != null)
this.mustReorganizeDvbs = true;

View File

@@ -25,6 +25,7 @@ namespace ChanSort.Loader.Samsung
private readonly ChannelList dvbcChannels = new ChannelList(SignalSource.DvbC | SignalSource.TvAndRadio, "Digital Cable");
private readonly ChannelList dvbsChannels = new ChannelList(SignalSource.DvbS | SignalSource.TvAndRadio, "Satellite");
private readonly ChannelList hdplusChannels = new ChannelList(SignalSource.HdPlusD | SignalSource.TvAndRadio, "Astra HD+");
private readonly ChannelList freesatChannels = new ChannelList(SignalSource.HdPlusD | SignalSource.TvAndRadio, "Freesat");
private readonly ChannelList primeChannels = new ChannelList(SignalSource.CablePrimeD | SignalSource.TvAndRadio, "Cable Prime");
private readonly Dictionary<int, decimal> avbtFrequency = new Dictionary<int, decimal>();
@@ -39,6 +40,7 @@ namespace ChanSort.Loader.Samsung
private byte[] dvbsFileContent;
private byte[] hdplusFileContent;
private byte[] primeFileContent;
private byte[] freesatFileContent;
private ModelConstants c;
#region ctor()
@@ -102,11 +104,12 @@ namespace ChanSort.Loader.Samsung
ReadDvbTransponderFrequenciesFromPtc(zip, "PTCCABLE", this.dvbcFrequency);
ReadDvbctChannels(zip, "map-CableD", this.dvbcChannels, out this.dvbcFileContent, this.dvbcFrequency);
ReadDvbctChannels(zip, "map-CablePrime_D", this.primeChannels, out this.primeFileContent, this.dvbcFrequency);
ReadDvbctChannels(zip, "map-FreesatD", this.freesatChannels, out this.freesatFileContent, this.dvbcFrequency);
ReadSatellites(zip);
ReadTransponder(zip, "TransponderDataBase.dat");
ReadTransponder(zip, "UserTransponderDataBase.dat");
ReadDvbsChannels(zip);
ReadAstraHdPlusChannels(zip);
ReadAstraHdPlusChannels(zip);
}
}
#endregion
@@ -124,7 +127,7 @@ namespace ChanSort.Loader.Samsung
#region DetectModelFromFileName()
private bool DetectModelFromFileName()
{
string file = Path.GetFileName(this.FileName);
string file = Path.GetFileName(this.FileName)??"";
System.Text.RegularExpressions.Regex regex =
new System.Text.RegularExpressions.Regex("channel_list_(?:[A-Z]{2}[0-9]{2}|BD-)([A-Z])[0-9A-Z]+_[0-9]{4}.*\\.scm");
var match = regex.Match(file);
@@ -539,6 +542,7 @@ namespace ChanSort.Loader.Samsung
this.SaveChannels(zip, "map-SateD", this.dvbsChannels, ref this.dvbsFileContent);
this.SaveChannels(zip, "map-AstraHDPlusD", this.hdplusChannels, ref this.hdplusFileContent);
this.SaveChannels(zip, "map-CablePrime_D", this.primeChannels, ref this.primeFileContent);
this.SaveChannels(zip, "map-FreesatD", this.freesatChannels, ref this.freesatFileContent);
zip.CommitUpdate();
}
}

View File

@@ -167,6 +167,8 @@
this.grpSubList = new DevExpress.XtraEditors.GroupControl();
this.tabSubList = new DevExpress.XtraTab.XtraTabControl();
this.pageProgNr = new DevExpress.XtraTab.XtraTabPage();
this.colOutSkip = new DevExpress.XtraGrid.Columns.GridColumn();
this.colOutHide = new DevExpress.XtraGrid.Columns.GridColumn();
((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).BeginInit();
this.splitContainerControl1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.grpOutputList)).BeginInit();
@@ -211,7 +213,7 @@
resources.ApplyResources(this.splitContainerControl1.Panel1, "splitContainerControl1.Panel1");
this.splitContainerControl1.Panel2.Controls.Add(this.grpInputList);
resources.ApplyResources(this.splitContainerControl1.Panel2, "splitContainerControl1.Panel2");
this.splitContainerControl1.SplitterPosition = 386;
this.splitContainerControl1.SplitterPosition = 453;
//
// grpOutputList
//
@@ -259,7 +261,9 @@
this.colOutName,
this.colOutFav,
this.colUid1,
this.colOutLock});
this.colOutLock,
this.colOutSkip,
this.colOutHide});
this.gviewLeft.GridControl = this.gridLeft;
this.gviewLeft.Name = "gviewLeft";
this.gviewLeft.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.MouseDown;
@@ -1589,6 +1593,18 @@
this.pageProgNr.Name = "pageProgNr";
resources.ApplyResources(this.pageProgNr, "pageProgNr");
//
// colOutSkip
//
resources.ApplyResources(this.colOutSkip, "colOutSkip");
this.colOutSkip.FieldName = "Skip";
this.colOutSkip.Name = "colOutSkip";
//
// colOutHide
//
resources.ApplyResources(this.colOutHide, "colOutHide");
this.colOutHide.FieldName = "Hidden";
this.colOutHide.Name = "colOutHide";
//
// MainForm
//
resources.ApplyResources(this, "$this");
@@ -1782,6 +1798,8 @@
private DevExpress.XtraTab.XtraTabControl tabSubList;
private DevExpress.XtraTab.XtraTabPage pageProgNr;
private DevExpress.XtraBars.BarButtonItem miAddFromRefList;
private DevExpress.XtraGrid.Columns.GridColumn colOutSkip;
private DevExpress.XtraGrid.Columns.GridColumn colOutHide;
private DevExpress.XtraSplashScreen.SplashScreenManager splashScreenManager1;
}
}

View File

@@ -25,7 +25,7 @@ namespace ChanSort.Ui
{
public partial class MainForm : XtraForm
{
public const string AppVersion = "v2013-09-15";
public const string AppVersion = "v2013-10-07";
private const int MaxMruEntries = 5;
@@ -2009,6 +2009,16 @@ namespace ChanSort.Ui
e.Appearance.ForeColor = Color.Red;
e.Appearance.Options.UseForeColor = true;
}
else if (channel.Hidden)
{
e.Appearance.ForeColor = Color.LightGray;
e.Appearance.Options.UseForeColor = true;
}
else if (channel.Skip)
{
e.Appearance.ForeColor = Color.Blue;
e.Appearance.Options.UseForeColor = true;
}
}
#endregion

View File

@@ -432,4 +432,10 @@
<data name="grpInputList.Text" xml:space="preserve">
<value>Alle Sender</value>
</data>
<data name="colOutSkip.Caption" xml:space="preserve">
<value>Über- springen</value>
</data>
<data name="colOutHide.Caption" xml:space="preserve">
<value>Ver- steckt</value>
</data>
</root>

View File

@@ -361,4 +361,10 @@
<data name="btnToggleLock.ToolTip" xml:space="preserve">
<value>Parental lock</value>
</data>
<data name="colOutSkip.Caption" xml:space="preserve">
<value>Sal- tar</value>
</data>
<data name="colOutHide.Caption" xml:space="preserve">
<value>Esc- onder</value>
</data>
</root>

View File

@@ -227,6 +227,30 @@
<data name="colOutLock.Width" type="System.Int32, mscorlib">
<value>35</value>
</data>
<data name="colOutSkip.Caption" xml:space="preserve">
<value>Skip</value>
</data>
<data name="colOutSkip.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="colOutSkip.VisibleIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="colOutSkip.Width" type="System.Int32, mscorlib">
<value>35</value>
</data>
<data name="colOutHide.Caption" xml:space="preserve">
<value>Hide</value>
</data>
<data name="colOutHide.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="colOutHide.VisibleIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="colOutHide.Width" type="System.Int32, mscorlib">
<value>35</value>
</data>
<data name="repositoryItemTextEdit1.AutoHeight" type="System.Boolean, mscorlib">
<value>False</value>
</data>
@@ -234,7 +258,7 @@
<value>Numeric</value>
</data>
<data name="gridLeft.Size" type="System.Drawing.Size, System.Drawing">
<value>382, 418</value>
<value>449, 418</value>
</data>
<data name="gridLeft.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@@ -516,7 +540,7 @@
<data name="barManager1.Categories" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v13.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMy4xLCBWZXJzaW9uPTEz
LjEuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEZpbGUE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC
X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICKaPJ5gsBeU2NTSFe
@@ -526,7 +550,7 @@
<data name="barManager1.Categories1" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v13.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMy4xLCBWZXJzaW9uPTEz
LjEuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEhlbHAE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC
X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICdEVVDegwMU2acNpw
@@ -536,7 +560,7 @@
<data name="barManager1.Categories2" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v13.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMy4xLCBWZXJzaW9uPTEz
LjEuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEVkaXQE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC
X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICZMTu18lZRU+IqmAu
@@ -546,7 +570,7 @@
<data name="barManager1.Categories3" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v13.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMy4xLCBWZXJzaW9uPTEz
LjEuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAAB09wdGlvbnME/P///wtTeXN0ZW0uR3VpZAsAAAACX2EC
X2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICXJMOh9nzAkKc
@@ -651,7 +675,7 @@
<value>Default</value>
</data>
<data name="rbInsertSwap.Size" type="System.Drawing.Size, System.Drawing">
<value>48, 19</value>
<value>47, 19</value>
</data>
<data name="rbInsertSwap.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
@@ -678,7 +702,7 @@
<value>after</value>
</data>
<data name="rbInsertAfter.Size" type="System.Drawing.Size, System.Drawing">
<value>47, 19</value>
<value>46, 19</value>
</data>
<data name="rbInsertAfter.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
@@ -702,7 +726,7 @@
<value>before</value>
</data>
<data name="rbInsertBefore.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 19</value>
<value>54, 19</value>
</data>
<data name="rbInsertBefore.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
@@ -1505,6 +1529,18 @@
<data name="&gt;&gt;timerEditDelay.Type" xml:space="preserve">
<value>System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;colOutSkip.Name" xml:space="preserve">
<value>colOutSkip</value>
</data>
<data name="&gt;&gt;colOutSkip.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;colOutHide.Name" xml:space="preserve">
<value>colOutHide</value>
</data>
<data name="&gt;&gt;colOutHide.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>MainForm</value>
</data>
@@ -1512,7 +1548,7 @@
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="SharedImageCollection.Timestamp" type="System.DateTime, mscorlib">
<value>07/19/2013 17:03:01</value>
<value>10/07/2013 15:04:39</value>
</data>
<data name="SharedImageCollection.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
@@ -1806,7 +1842,7 @@
<value>2, 21</value>
</data>
<data name="pnlEditControls.Size" type="System.Drawing.Size, System.Drawing">
<value>382, 33</value>
<value>449, 33</value>
</data>
<data name="pnlEditControls.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -1830,7 +1866,7 @@
<value>0, 0</value>
</data>
<data name="grpOutputList.Size" type="System.Drawing.Size, System.Drawing">
<value>386, 491</value>
<value>453, 491</value>
</data>
<data name="grpOutputList.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -2166,7 +2202,7 @@
<value>Signal source</value>
</data>
<data name="gridRight.Size" type="System.Drawing.Size, System.Drawing">
<value>1079, 418</value>
<value>1012, 418</value>
</data>
<data name="gridRight.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@@ -2331,7 +2367,7 @@
<value>2, 21</value>
</data>
<data name="panelControl3.Size" type="System.Drawing.Size, System.Drawing">
<value>1079, 33</value>
<value>1012, 33</value>
</data>
<data name="panelControl3.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -2355,7 +2391,7 @@
<value>0, 0</value>
</data>
<data name="grpInputList.Size" type="System.Drawing.Size, System.Drawing">
<value>1083, 491</value>
<value>1016, 491</value>
</data>
<data name="grpInputList.TabIndex" type="System.Int32, mscorlib">
<value>0</value>

View File

@@ -0,0 +1,2 @@
DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v13.1, Version=13.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -0,0 +1,181 @@
#include "tll-common.h"
#define MAX_SAT_COUNT 64
struct TLL44_Satellite;
typedef TLL44_Satellite TLL_Satellite;
#define MAX_TP_COUNT 2400
struct TLL44_Transponder;
typedef TLL44_Transponder TLL_Transponder;
#define DVBS_CHANNELLIST_PREFIXSIZE 0
#define MAX_DVBS_COUNT 7520
struct TLL76_SatChannel;
typedef TLL76_SatChannel TLL_SatChannel;
#define MAX_LNB_COUNT 40
struct TLL48_Lnb;
typedef TLL48_Lnb TLL_Lnb;
#include "tll-satellite.h"
struct LP84_AnalogChannel
{
byte unknown[84];
/*
byte t1[8];
TLL_SignalSource SignalSource;
byte t1b;
word ChannelTransponder1;
word ProgramNr;
word LogicalProgramNr;
byte t2[4];
byte Favorites1;
byte t2b[3];
word Frequency1Div50;
word APID1;
byte ChannelNumberInBand;
byte ChannelBand;
byte t3[10];
char CH_Name1[40];
byte CH_NameLength1;
byte t4;
word SID1;
byte t5a[38];
word ChannelTransponder2;
dword FrequencyDiv50;
byte t6[6];
word ONID;
word TSID;
byte t7[32];
word ChannelTransponder3;
word ProgramNr2;
word LogicalProgramNr2;
word ChannelTransponder4;
byte Favorites2;
byte LockSkipHide;
word SID2;
byte ServiceType;
byte CH_NameLength2;
char CH_Name2[40];
byte t10[12];
word Frequency2Div50;
word APID2;
word u1;
word u2;
byte t11[12];
*/
};
struct LP84_AnalogBlock
{
dword BlockSize;
dword ChannelCount;
LP84_AnalogChannel Channels[ChannelCount];
};
struct LP84_FirmwareBlock
{
dword BlockSize;
byte Data1[12635];
TLL_HotelSettings HotelSettings;
byte Data2[BlockSize - 12635 - sizeof(TLL_HotelSettings)];
};
struct LP84_DvbCtChannel
{
};
struct LP84_DvbCTBlock
{
dword BlockSize;
dword ChannelCount;
LP84_DvbCtChannel Channels[ChannelCount];
};
struct TLL44_Transponder
{
word FirstChannelIndex;
word LastChannelIndex;
word ChannelCount;
word t1a;
word t1b;
word TP_Number;
word TP_Freq;
byte t2[4];
word NID;
word TID;
word t3;
struct TP_Flags1
{
byte Unknown : 6;
byte IsHorizontal : 1;
} Flags1;
word SRate;
struct TP_Flags2
{
enum E_FEC : byte
{
FEC2_3 = 2,
FEC3_4 = 3,
FEC5_6 = 4,
FEC7_8 = 5,
FEC9_10 = 9
} FEC : 4;
byte S2 : 1;
} Flags2;
byte t4[10];
byte SatIndexTimes1;
byte t5[5];
};
struct TLL76_SatChannel
{
word LnbIndex;
word t1;
TLL_SignalSource SignalSource;
word TP_Number;
byte t2;
word ChannelNumber;
word LogicalChannelNumber;
word TP_Number2;
byte t3[2];
byte FavDelCrypt;
byte LockSkipHide;
byte t4[2];
word SID;
byte ServiceType;
byte CH_NameLength;
char CH_Name[40];
word VID;
word AID;
word AID_Times8;
byte t6[6];
};
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 LP84
{
byte Header[4];
LP84_AnalogBlock Analog;
LP84_FirmwareBlock Firmware;
TLL_SettingsBlock HotelData;
LP84_DvbCTBlock DvbCT;
TLL_DvbSBlock DvbS;
TLL_SettingsBlock Settings;
};

View File

@@ -69,9 +69,7 @@ struct LT212_HotelSettings
byte Volume;
byte AvSettings;
byte RadioVideoBlank;
// byte unknown1;
byte StartProgNr;
// byte unknown2;
byte NumberOfPrograms;
byte RadioNameDisplay;
byte unknown3[2];
@@ -81,9 +79,9 @@ struct LT212_HotelSettings
struct LT212_FirmwareBlock
{
dword BlockSize;
byte u1[13623];
byte u1[12635];
LT212_HotelSettings HotelSettings;
byte Data[BlockSize - sizeof(HotelSettings) - 13623];
byte Data[BlockSize - sizeof(HotelSettings) - 12635];
};
struct LT212_UnknownBlock

View File

@@ -101,9 +101,9 @@ struct PN212_HotelSettings
struct PN212_FirmwareBlock
{
dword BlockSize;
byte u1[13623];
byte u1[13869];
PN212_HotelSettings HotelSettings;
byte Data[BlockSize - sizeof(HotelSettings) - 13623];
byte Data[BlockSize - sizeof(HotelSettings) - 13869];
};
struct PN212_UnknownBlock
@@ -203,12 +203,6 @@ struct TLL48_Lnb
byte t5[22];
};
struct PN212_SettingsBlock
{
dword BlockSize;
byte Data[BlockSize];
};
public struct PN212
{
byte Header[4];

View File

@@ -97,7 +97,7 @@ struct TLL72_SatChannel
word ChannelNumber;
word LogicalChannelNumber;
word TP_Number2;
byte FavCrypt;
byte FavDelCrypt;
byte LockSkipHide;
word SID;
byte ServiceType;
@@ -105,7 +105,7 @@ struct TLL72_SatChannel
char CH_Name[40];
word VID;
word AID;
word AID_Times8;
word AID_Times16;
byte t6[6];
};

View File

@@ -0,0 +1,16 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Test.Loader.LG
{
[TestClass]
public class TestLP : TestBase
{
[TestMethod]
public void TestLP632H_Sat76TR()
{
// "KristianStolze"
//this.GenerateTestFiles("LP/xxLP632H-ZA00001");
this.ExecuteTest("LP/xxLP632H-ZA00001");
}
}
}

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -79,6 +79,7 @@
<Compile Include="LK\TestLK.cs" />
<Compile Include="LM\TestLM.cs" />
<Compile Include="LN\TestLN.cs" />
<Compile Include="LP\TestLP.cs" />
<Compile Include="LS\TestLS.cs" />
<Compile Include="LT\TestLT.cs" />
<Compile Include="LV\TestLV.cs" />

View File

@@ -1,9 +1,11 @@
Version v2013-09-15 ======================================================
Version v2013-10-07 ======================================================
Changes:
- Added support for LG PN-series satellite channel lists
- Fixed: use last selected character set when loading LG channel lists
- Fixed missing translations
- Added support for Samsung "FreesatD" channel lists
- Added support for LG LP-series sat channel lists (DVB-C/T not supported)
- Added columns for "skip" and "hide" channel flags to left list
- skipped/hidden channels are now display with blue/light grey color
- LG hotel-mode/DTV-update settings editable for all supported LG models
The complete change log can be found at the end of this document
@@ -33,9 +35,9 @@ Samsung
-------
Series: B*, C, D, E, F
Lists: Air analog, Air digital, Cable analog, Cable digital,
Cable prime, Sat digital, Astra HD+,
Cable prime, Sat digital, Astra HD+, Freesat digital
* NOTE: the "Air Analog"-list of the B-Series doesn't support all
* NOTE: the "Air Analog"-list of the B-series doesn't support all
editing features due to a lack of test files. If you have such a file,
please send it to me.
@@ -44,12 +46,14 @@ Samsung
LG
------
Series: CS, DM, LA, LD, LE, LH, LK, LM*, LN, LS, LT, LV, LW, LX, PM, PT
Lists: Analog TV, DTV (DVB-C, DVB-T), Radio (DVB-C/T), Sat-DTV (DVB-S2),
Sat-Radio (DVB-S2)
Series: CS, DM, LA, 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)
* NOTE: See system requirements for LM-Series.
* NOTE: See system requirements for LM-series.
Model xxLM640T is not supported due to its broken firmware.
**: Only satellite channels supported
Other models might also work, but have not been tested. If you have a
.TLL file of a series not listed here, please send it to me.
@@ -109,13 +113,20 @@ OTHER DEALINGS IN THE SOFTWARE.
Change log ================================================================
2013-10-07
- Added support for Samsung "FreesatD" channel lists
- Added support for LG LP-series sat channel lists (DVB-C/T not supported)
- Added columns for "skip" and "hide" channel flags to left list
- skipped/hidden channels are now display with blue/light grey color
- LG hotel-mode/DTV-update settings editable for all supported LG models
2013-09-15
- Added support for LG PN-series satellite channel lists
- Fixed: use last selected character set when loading LG channel lists
- Fixed missing translations
2013-08-21
- Added support for LG PN Series (tested with PN6500)
- Added support for LG PN-series (tested with PN6500)
2013-08-19
- Fixed loading Samsung B-series channel lists
@@ -170,7 +181,7 @@ Change log ================================================================
- FIX: Resizing a column caused an exception
- FIX: Deleting satellite channels from an SCM file did not work correctly
- Improved SCM file format detection
- Samsung E/F-Series: channels in the favorite lists now use their prog#
- Samsung E/F-series: channels in the favorite lists now use their prog#
instead of all being put at #1
(in a future version the fav lists may be sorted separately)
@@ -257,7 +268,7 @@ Change log ================================================================
- FIX: first channel list only got populated after switching between tabs
2013-04-08
- Added support for Samsung F-Series.
- Added support for Samsung F-series.
- Added online check for updated program version
2013-04-07