- added code to read binary TLL file for LB5xx series

- added code to read GlobalClone XML file for LB6xx and later series
This commit is contained in:
hbeham
2014-05-25 16:13:15 +02:00
parent e2c24b4847
commit eedda0111c
15 changed files with 13635 additions and 5 deletions

View File

@@ -102,5 +102,19 @@ namespace ChanSort.Api
return ((input & 0x000000FF) << 24) | ((input & 0x0000FF00) << 8) | ((input & 0x00FF0000) >> 8) | ((input & 0xFF000000) >> 24);
}
#endregion
public static byte[] HexDecode(string input)
{
var bytes = new byte[input.Length/2];
for (int i = 0, c = input.Length/2; i < c; i++)
{
char ch = Char.ToUpper(input[i*2]);
var high = Char.IsDigit(ch) ? ch - '0' : ch - 'A' + 10;
ch = input[i*2 + 1];
var low = Char.IsDigit(ch) ? ch - '0' : ch - 'A' + 10;
bytes[i] = (byte)((high << 4) | low);
}
return bytes;
}
}
}

View File

@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ChanSort.Loader.GlobalClone</RootNamespace>
<AssemblyName>ChanSort.Loader.GlobalClone</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>..\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="GcChannel.cs" />
<Compile Include="GcSerializer.cs" />
<Compile Include="GcSerializerPlugin.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj">
<Project>{dccffa08-472b-4d17-bb90-8f513fc01392}</Project>
<Name>ChanSort.Api</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="readme.txt" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,21 @@
using System.Xml;
using ChanSort.Api;
namespace ChanSort.Loader.GlobalClone
{
internal class GcChannel : ChannelInfo
{
internal int Index;
internal XmlNode XmlNode;
#region ctor()
internal GcChannel(SignalSource source, int index, XmlNode node)
{
this.SignalSource = source;
this.Index = index;
this.XmlNode = node;
}
#endregion
}
}

View File

@@ -0,0 +1,217 @@
using System.IO;
using System.Text;
using System.Xml;
using ChanSort.Api;
namespace ChanSort.Loader.GlobalClone
{
class GcSerializer : SerializerBase
{
private readonly ChannelList atvChannels = new ChannelList(SignalSource.AnalogCT | SignalSource.TvAndRadio, "Analog");
private readonly ChannelList dtvTvChannels = new ChannelList(SignalSource.DvbCT | SignalSource.Tv, "DTV");
private readonly ChannelList dtvRadioChannels = new ChannelList(SignalSource.DvbCT | SignalSource.Radio, "Radio");
private readonly ChannelList satTvChannels = new ChannelList(SignalSource.DvbS | SignalSource.Tv, "Sat-TV");
private readonly ChannelList satRadioChannels = new ChannelList(SignalSource.DvbS | SignalSource.Radio, "Sat-Radio");
private XmlDocument doc;
private DvbStringDecoder dvbStringDecoder = new DvbStringDecoder(Encoding.Default);
#region ctor()
public GcSerializer(string inputFile) : base(inputFile)
{
this.Features.ChannelNameEdit = false;
this.DataRoot.AddChannelList(this.atvChannels);
this.DataRoot.AddChannelList(this.dtvTvChannels);
this.DataRoot.AddChannelList(this.dtvRadioChannels);
this.DataRoot.AddChannelList(this.satTvChannels);
this.DataRoot.AddChannelList(this.satRadioChannels);
}
#endregion
#region DisplayName
public override string DisplayName { get { return "LG GlobalClone loader"; } }
#endregion
#region Load()
public override void Load()
{
bool fail = false;
try
{
this.doc = new XmlDocument();
doc.Load(this.FileName);
}
catch
{
fail = true;
}
var root = doc.FirstChild;
if (root is XmlDeclaration)
root = root.NextSibling;
if (fail || root == null || root.LocalName != "TLLDATA")
throw new FileLoadException("\"" + this.FileName + "\" is not a supported GlobalClone XML file");
foreach (XmlNode child in root.ChildNodes)
{
switch (child.LocalName)
{
case "CHANNEL":
this.ReadChannelLists(child);
break;
}
}
}
#endregion
#region ReadChannelLists()
private void ReadChannelLists(XmlNode channelNode)
{
foreach (XmlNode chanListNode in channelNode.ChildNodes)
{
switch (chanListNode.LocalName)
{
case "ATV":
this.ReadChannelList(chanListNode, true);
break;
case "DTV":
this.ReadChannelList(chanListNode, false);
break;
}
}
}
#endregion
#region ReadChannelList()
private void ReadChannelList(XmlNode node, bool analog)
{
int i = -1;
foreach (XmlNode itemNode in node.ChildNodes)
{
if (itemNode.LocalName != "ITEM")
continue;
++i;
GcChannel ch = new GcChannel(analog ? SignalSource.AnalogCT | SignalSource.Tv : SignalSource.Digital, i, itemNode);
foreach (XmlNode info in itemNode.ChildNodes)
ParseChannelInfoNode(info, ch);
var list = this.DataRoot.GetChannelList(ch.SignalSource);
this.DataRoot.AddChannel(list, ch);
}
}
#endregion
#region ParseChannelInfoNode()
private void ParseChannelInfoNode(XmlNode info, ChannelInfo ch)
{
switch (info.LocalName)
{
// common to ATV and DTV
case "prNum":
ch.OldProgramNr = int.Parse(info.InnerText) & 0x3FFF;
break;
case "vchName":
ch.Name = ParseName(info.InnerText);
break;
case "sourceIndex":
var source = int.Parse(info.InnerText);
if (source == 2)
ch.SignalSource |= SignalSource.Cable;
else if (source == 7)
ch.SignalSource |= SignalSource.Sat;
else
ch.SignalSource |= SignalSource.Antenna;
break;
case "isBlocked":
ch.Lock = int.Parse(info.InnerText) == 1;
break;
case "isSkipped":
ch.Skip = int.Parse(info.InnerText) == 1;
break;
// ATV
case "pllData":
ch.FreqInMhz = (decimal)int.Parse(info.InnerText) / 20;
break;
// DTV
case "original_network_id":
ch.OriginalNetworkId = int.Parse(info.InnerText);
break;
case "transport_id":
ch.TransportStreamId = int.Parse(info.InnerText);
break;
case "service_id":
ch.ServiceId = int.Parse(info.InnerText);
break;
case "serviceType":
ch.ServiceType = int.Parse(info.InnerText);
ch.SignalSource |= LookupData.Instance.IsRadioOrTv(ch.ServiceType);
break;
case "frequency":
ch.FreqInMhz = int.Parse(info.InnerText);
if ((ch.SignalSource & SignalSource.Sat) == 0)
ch.FreqInMhz /= 1000;
break;
case "isInvisable": // that spelling error is part of the XML
ch.Hidden = int.Parse(info.InnerText) == 1;
break;
case "isDisabled":
ch.IsDeleted = int.Parse(info.InnerText) != 0;
break;
// not present in all XML files
case "hexVchName":
var bytes = Tools.HexDecode(info.InnerText);
string longName, shortName;
dvbStringDecoder.GetChannelNames(bytes, 0, bytes.Length, out longName, out shortName);
ch.Name = longName;
ch.ShortName = shortName;
break;
}
}
#endregion
private string ParseName(string input)
{
return input;
}
#region Save()
public override void Save(string tvOutputFile)
{
foreach (var list in this.DataRoot.ChannelLists)
{
foreach (var channel in list.Channels)
{
var ch = channel as GcChannel;
if (ch == null) continue; // ignore proxy channels from reference lists
foreach (XmlNode node in ch.XmlNode.ChildNodes)
{
switch (node.LocalName)
{
case "prNum":
var nr = ch.NewProgramNr;
if ((ch.SignalSource & SignalSource.Radio) != 0)
nr |= 0x4000;
node.InnerText = nr.ToString();
break;
case "isDisabled":
node.InnerText = ch.IsDeleted ? "1" : "0";
break;
case "isUserSelCHNo":
node.InnerText = "1";
break;
}
}
}
}
doc.Save(tvOutputFile);
}
#endregion
}
}

View File

@@ -0,0 +1,15 @@
using ChanSort.Api;
namespace ChanSort.Loader.GlobalClone
{
public class GcSerializerPlugin : ISerializerPlugin
{
public string PluginName { get { return "LG GlobalClone"; } }
public string FileFilter { get { return "GlobalClone*.tll"; } }
public SerializerBase CreateSerializer(string inputFile)
{
return new GcSerializer(inputFile);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ChanSort.Loader.GlobalClone")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ChanSort.Loader.GlobalClone")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("7c411d93-c493-49e0-af8a-520d759af994")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,15 @@
This module allows loading of LG's GlobalClone*.TLL files.
There seem to be different versions of this XML file format around.
2014 LB-Series (e.g. Model LB731V, LB630V):
- vchName is a readable text, but sometimes left empty
- <hexVchName> contains hex-encoded channel name (not empty even when vchName is empty)
- <notConvertedLengthOfVchName>
2014 LB-Series (e.g. 42LB630V-ZA)
- vchName is a readable text
- no extra hex encoded version
2014 LB561V, LB580V
- vchName binary data (with high bit set)
- separate binary TLL file available

View File

@@ -452,6 +452,16 @@
lnbCount = 40
lnbLength = 52
[DvbsBlock:967496]
; LB series
satCount = 64
satLength = 48
transponderCount = 2400
transponderLength = 56
dvbsChannelCount = 7520
dvbsChannelLength = 100
lnbCount = 40
lnbLength = 52
[TransponderDataMapping:40]
; everything up to LM
@@ -648,6 +658,34 @@
offVideoPid = 72
offAudioPid = 74
[SatChannelDataMapping:100]
; LB series
lenName = 40
offSatelliteNr = 0
offSourceType = 4
offTransponderIndex = 6, 12
offProgramNr = 8
offProgramNrPreset = 10
offFavorites2 = 14
offDeleted = 14
maskDeleted = 0x42
offEncrypted = 14
maskEncrypted = 0x80
offLock = 15
maskLock = 0x01
offSkip = 15
maskSkip = 0x02
offHide = 15
maskHide = 0x04
offProgNrCustomized = 15
maskProgNrCustomized = 0x40
offServiceId = 16
offServiceType = 18
offNameLength = 19
offName = 20
offVideoPid = 72
offAudioPid = 74
[LnbMapping:44]
; all except LA
offSettingId = 0

View File

@@ -5,10 +5,12 @@ VisualStudioVersion = 12.0.30110.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort", "ChanSort\ChanSort.csproj", "{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}"
ProjectSection(ProjectDependencies) = postProject
{74A18C6F-09FF-413E-90D9-827066FA5B36} = {74A18C6F-09FF-413E-90D9-827066FA5B36}
{68DA8072-3A29-4076-9F64-D66F38349585} = {68DA8072-3A29-4076-9F64-D66F38349585}
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5} = {A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}
{F6F02792-07F1-48D5-9AF3-F945CA5E3931} = {F6F02792-07F1-48D5-9AF3-F945CA5E3931}
{E972D8A1-2F5F-421C-AC91-CFF45E5191BE} = {E972D8A1-2F5F-421C-AC91-CFF45E5191BE}
{5361C8CB-F737-4709-AF8C-E1F0456F3C5B} = {5361C8CB-F737-4709-AF8C-E1F0456F3C5B}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Api", "ChanSort.Api\ChanSort.Api.csproj", "{DCCFFA08-472B-4D17-BB90-8F513FC01392}"
@@ -32,79 +34,130 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.Loader.LG", "Test.Load
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Loader.VDR", "ChanSort.Loader.VDR\ChanSort.Loader.VDR.csproj", "{74A18C6F-09FF-413E-90D9-827066FA5B36}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChanSort.Loader.GlobalClone", "ChanSort.Loader.GlobalClone\ChanSort.Loader.GlobalClone.csproj", "{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|Mixed Platforms = Release|Mixed Platforms
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}.Debug|Mixed Platforms.Build.0 = Debug|x86
{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}.Debug|x86.ActiveCfg = Debug|x86
{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}.Debug|x86.Build.0 = Debug|x86
{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}.Release|Any CPU.Build.0 = Release|Any CPU
{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}.Release|Mixed Platforms.ActiveCfg = Release|x86
{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}.Release|Mixed Platforms.Build.0 = Release|x86
{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}.Release|x86.ActiveCfg = Release|x86
{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}.Release|x86.Build.0 = Release|x86
{DCCFFA08-472B-4D17-BB90-8F513FC01392}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DCCFFA08-472B-4D17-BB90-8F513FC01392}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DCCFFA08-472B-4D17-BB90-8F513FC01392}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{DCCFFA08-472B-4D17-BB90-8F513FC01392}.Debug|Mixed Platforms.Build.0 = Debug|x86
{DCCFFA08-472B-4D17-BB90-8F513FC01392}.Debug|x86.ActiveCfg = Debug|x86
{DCCFFA08-472B-4D17-BB90-8F513FC01392}.Debug|x86.Build.0 = Debug|x86
{DCCFFA08-472B-4D17-BB90-8F513FC01392}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DCCFFA08-472B-4D17-BB90-8F513FC01392}.Release|Any CPU.Build.0 = Release|Any CPU
{DCCFFA08-472B-4D17-BB90-8F513FC01392}.Release|Mixed Platforms.ActiveCfg = Release|x86
{DCCFFA08-472B-4D17-BB90-8F513FC01392}.Release|Mixed Platforms.Build.0 = Release|x86
{DCCFFA08-472B-4D17-BB90-8F513FC01392}.Release|x86.ActiveCfg = Release|Any CPU
{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}.Debug|Mixed Platforms.Build.0 = Debug|x86
{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}.Debug|x86.ActiveCfg = Debug|x86
{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}.Debug|x86.Build.0 = Debug|x86
{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}.Release|Any CPU.Build.0 = Release|Any CPU
{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}.Release|Mixed Platforms.ActiveCfg = Release|x86
{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}.Release|Mixed Platforms.Build.0 = Release|x86
{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}.Release|x86.ActiveCfg = Release|Any CPU
{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}.Debug|Mixed Platforms.Build.0 = Debug|x86
{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}.Debug|x86.ActiveCfg = Debug|x86
{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}.Debug|x86.Build.0 = Debug|x86
{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}.Release|Any CPU.Build.0 = Release|Any CPU
{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}.Release|Mixed Platforms.ActiveCfg = Release|x86
{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}.Release|Mixed Platforms.Build.0 = Release|x86
{68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2}.Release|x86.ActiveCfg = Release|Any CPU
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}.Debug|Mixed Platforms.Build.0 = Debug|x86
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}.Debug|x86.ActiveCfg = Debug|x86
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}.Debug|x86.Build.0 = Debug|x86
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}.Release|Any CPU.Build.0 = Release|Any CPU
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}.Release|Mixed Platforms.ActiveCfg = Release|x86
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}.Release|Mixed Platforms.Build.0 = Release|x86
{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}.Release|x86.ActiveCfg = Release|Any CPU
{F6F02792-07F1-48D5-9AF3-F945CA5E3931}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F6F02792-07F1-48D5-9AF3-F945CA5E3931}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F6F02792-07F1-48D5-9AF3-F945CA5E3931}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{F6F02792-07F1-48D5-9AF3-F945CA5E3931}.Debug|Mixed Platforms.Build.0 = Debug|x86
{F6F02792-07F1-48D5-9AF3-F945CA5E3931}.Debug|x86.ActiveCfg = Debug|x86
{F6F02792-07F1-48D5-9AF3-F945CA5E3931}.Debug|x86.Build.0 = Debug|x86
{F6F02792-07F1-48D5-9AF3-F945CA5E3931}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F6F02792-07F1-48D5-9AF3-F945CA5E3931}.Release|Any CPU.Build.0 = Release|Any CPU
{F6F02792-07F1-48D5-9AF3-F945CA5E3931}.Release|Mixed Platforms.ActiveCfg = Release|x86
{F6F02792-07F1-48D5-9AF3-F945CA5E3931}.Release|Mixed Platforms.Build.0 = Release|x86
{F6F02792-07F1-48D5-9AF3-F945CA5E3931}.Release|x86.ActiveCfg = Release|Any CPU
{68DA8072-3A29-4076-9F64-D66F38349585}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{68DA8072-3A29-4076-9F64-D66F38349585}.Debug|Any CPU.Build.0 = Debug|Any CPU
{68DA8072-3A29-4076-9F64-D66F38349585}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{68DA8072-3A29-4076-9F64-D66F38349585}.Debug|Mixed Platforms.Build.0 = Debug|x86
{68DA8072-3A29-4076-9F64-D66F38349585}.Debug|x86.ActiveCfg = Debug|x86
{68DA8072-3A29-4076-9F64-D66F38349585}.Debug|x86.Build.0 = Debug|x86
{68DA8072-3A29-4076-9F64-D66F38349585}.Release|Any CPU.ActiveCfg = Release|Any CPU
{68DA8072-3A29-4076-9F64-D66F38349585}.Release|Any CPU.Build.0 = Release|Any CPU
{68DA8072-3A29-4076-9F64-D66F38349585}.Release|Mixed Platforms.ActiveCfg = Release|x86
{68DA8072-3A29-4076-9F64-D66F38349585}.Release|Mixed Platforms.Build.0 = Release|x86
{68DA8072-3A29-4076-9F64-D66F38349585}.Release|x86.ActiveCfg = Release|Any CPU
{F943DBFE-D3C3-4885-A38B-375148012FEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F943DBFE-D3C3-4885-A38B-375148012FEC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F943DBFE-D3C3-4885-A38B-375148012FEC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{F943DBFE-D3C3-4885-A38B-375148012FEC}.Debug|Mixed Platforms.Build.0 = Debug|x86
{F943DBFE-D3C3-4885-A38B-375148012FEC}.Debug|x86.ActiveCfg = Debug|x86
{F943DBFE-D3C3-4885-A38B-375148012FEC}.Debug|x86.Build.0 = Debug|x86
{F943DBFE-D3C3-4885-A38B-375148012FEC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F943DBFE-D3C3-4885-A38B-375148012FEC}.Release|Any CPU.Build.0 = Release|Any CPU
{F943DBFE-D3C3-4885-A38B-375148012FEC}.Release|Mixed Platforms.ActiveCfg = Release|x86
{F943DBFE-D3C3-4885-A38B-375148012FEC}.Release|Mixed Platforms.Build.0 = Release|x86
{F943DBFE-D3C3-4885-A38B-375148012FEC}.Release|x86.ActiveCfg = Release|Any CPU
{74A18C6F-09FF-413E-90D9-827066FA5B36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{74A18C6F-09FF-413E-90D9-827066FA5B36}.Debug|Any CPU.Build.0 = Debug|Any CPU
{74A18C6F-09FF-413E-90D9-827066FA5B36}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{74A18C6F-09FF-413E-90D9-827066FA5B36}.Debug|Mixed Platforms.Build.0 = Debug|x86
{74A18C6F-09FF-413E-90D9-827066FA5B36}.Debug|x86.ActiveCfg = Debug|x86
{74A18C6F-09FF-413E-90D9-827066FA5B36}.Debug|x86.Build.0 = Debug|x86
{74A18C6F-09FF-413E-90D9-827066FA5B36}.Release|Any CPU.ActiveCfg = Release|Any CPU
{74A18C6F-09FF-413E-90D9-827066FA5B36}.Release|Any CPU.Build.0 = Release|Any CPU
{74A18C6F-09FF-413E-90D9-827066FA5B36}.Release|Mixed Platforms.ActiveCfg = Release|x86
{74A18C6F-09FF-413E-90D9-827066FA5B36}.Release|Mixed Platforms.Build.0 = Release|x86
{74A18C6F-09FF-413E-90D9-827066FA5B36}.Release|x86.ActiveCfg = Release|x86
{74A18C6F-09FF-413E-90D9-827066FA5B36}.Release|x86.Build.0 = Release|x86
{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}.Debug|x86.ActiveCfg = Debug|x86
{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}.Debug|x86.Build.0 = Debug|x86
{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}.Release|Any CPU.Build.0 = Release|Any CPU
{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{5361C8CB-F737-4709-AF8C-E1F0456F3C5B}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -25,7 +25,7 @@ namespace ChanSort.Ui
{
public partial class MainForm : XtraForm
{
public const string AppVersion = "v2014-05-06";
public const string AppVersion = "v2014-05-25";
private const int MaxMruEntries = 10;
@@ -351,12 +351,15 @@ namespace ChanSort.Ui
XtraMessageBox.Show(this, String.Format(Resources.MainForm_LoadTll_SourceTllNotFound, inputFileName));
return null;
}
string extension = (Path.GetExtension(inputFileName) ?? "").ToUpper();
string upperFileName = (Path.GetFileName(inputFileName) ??"").ToUpper();
foreach (var plugin in this.plugins)
{
if ((plugin.FileFilter.ToUpper()+"|").Contains("*"+extension) || plugin.FileFilter.ToUpper() == upperFileName)
return plugin;
foreach (var filter in plugin.FileFilter.ToUpper().Split('|'))
{
var regex = filter.Replace(".", "\\.").Replace("*", ".*").Replace("?", ".");
if (System.Text.RegularExpressions.Regex.IsMatch(upperFileName, regex))
return plugin;
}
}
XtraMessageBox.Show(this, String.Format(Resources.MainForm_LoadTll_SerializerNotFound, inputFileName));

View File

@@ -0,0 +1,248 @@
#include "tll-common.h"
#define MAX_SAT_COUNT 64
struct TLL48_Satellite;
typedef TLL48_Satellite TLL_Satellite;
#define MAX_TP_COUNT 2400
struct TLL56_Transponder;
typedef TLL56_Transponder TLL_Transponder;
#define MAX_DVBS_COUNT 7520
struct TLL100_SatChannel;
typedef TLL100_SatChannel TLL_SatChannel;
#define MAX_LNB_COUNT 40
struct TLL52_Lnb;
typedef TLL52_Lnb TLL_Lnb;
#define DVBS_CHANNELLIST_PREFIXSIZE 0
#include "tll-satellite.h"
struct LB260_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[10];
char CH_Name1[40];
byte CH_NameLength1;
byte t4;
word SID1;
byte t5a[42];
word ChannelTransponder2;
dword FrequencyDiv50;
byte t6[6];
word ONID;
word TSID;
byte t7[32];
word ChannelTransponder3;
word ProgramNr2;
word LogicalProgramNr2;
word ChannelTransponder4;
byte Favorites2;
TLL_EditFlags EditFlags;
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 LB260_AnalogBlock
{
dword BlockSize;
dword ChannelCount;
LB260_AnalogChannel Channels[ChannelCount];
};
struct LB260_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 LB260_FirmwareBlock
{
dword BlockSize;
byte u[38251];
LB260_HotelSettings HotelSettings;
byte Data[BlockSize - 38251 - sizeof(LB260_HotelSettings)];
};
struct LB260_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[2];
char CH_Name1[40];
byte CH_NameLength1;
byte t4;
word SID1;
byte t5a[41];
byte NitVersion;
word ChannelTransponder2;
dword Frequency;
byte t6[6];
word ONID;
word TSID;
word NID;
dword SpecialData;
byte t7[26];
word ChannelTransponder3;
word ProgramNr2;
word LogicalProgramNr2;
word ChannelTransponder4;
byte Favorites2;
TLL_EditFlags EditFlags;
word SID2;
byte ServiceType;
byte CH_NameLength2;
char CH_Name2[40];
byte t10[12];
word PcrPid2;
word APID2;
word u1;
word u2;
byte t11[12];
};
struct LB260_DvbCTBlock
{
dword BlockSize;
dword ChannelCount;
LB260_DvbCtChannel Channels[ChannelCount];
};
struct TLL48_Satellite // ok
{
char Name[32];
byte PosDeg;
byte PosCDeg;
byte LnbIndex;
byte FactoryDefault;
word TransponderHead;
word TransponderTail;
word TransponderCount;
word Unknown4;
word Unknown5;
word Unknown6;
};
struct TLL56_Transponder
{
byte t1[10];
word TP_Number;
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[12];
};
struct TLL100_SatChannel
{
word LnbIndex;
word t1;
TLL_SignalSource SignalSource;
byte t2;
word TP_Number;
word CH_Number;
word CH_NumberFixed;
word TP_Number2;
byte FavCrypt;
TLL_EditFlags EditFlags;
word SID;
byte ServiceType;
byte CH_NameLength;
char CH_Name[52];
word VPID;
word APID;
word t3;
word t4;
byte t5[20];
};
struct TLL52_Lnb
{
byte SettingsID;
byte t2[3];
byte SatelliteID;
byte ScanSearchType;
byte NetworkSearch;
byte BlindSearch;
byte t3[4];
char FrequencyName[12];
word LOF1;
byte t4[2];
word LOF2;
byte t5[22];
};
public struct LB260
{
byte Header[4];
LB260_AnalogBlock Analog;
LB260_FirmwareBlock Firmware;
LB260_DvbCTBlock DvbCT;
TLL_DvbSBlock DvbS;
TLL_SettingsBlock Settings;
};

File diff suppressed because it is too large Load Diff

View File

@@ -109,7 +109,9 @@
<Name>ChanSort.Loader.LG</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Content Include="GlobalClone.xml" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View File

@@ -78,6 +78,10 @@
<Name>ChanSort.Api</Name>
<Private>True</Private>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.GlobalClone\ChanSort.Loader.GlobalClone.csproj">
<Project>{5361c8cb-f737-4709-af8c-e1f0456f3c5b}</Project>
<Name>ChanSort.Loader.GlobalClone</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.Toshiba\ChanSort.Loader.Toshiba.csproj">
<Project>{F6F02792-07F1-48D5-9AF3-F945CA5E3931}</Project>
<Name>ChanSort.Loader.Toshiba</Name>