mirror of
https://github.com/PredatH0r/ChanSort.git
synced 2026-01-16 12:22:03 +01:00
- cleanup (renamed directories to match project structure)
- tested and fixed Samsung favorites and locks for C,D,AstraHD
This commit is contained in:
19
ChanSort.Loader.TllFile/AnalogChannel.cs
Normal file
19
ChanSort.Loader.TllFile/AnalogChannel.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using ChanSort.Api;
|
||||
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
public class AnalogChannel : TllChannelBase
|
||||
{
|
||||
private const string _Freqency = "offPcrPid";
|
||||
private const string _FreqBand = "offVideoPid";
|
||||
|
||||
public AnalogChannel(int slot, DataMapping data) : base(data)
|
||||
{
|
||||
this.InitCommonData(slot, SignalSource.AnalogCT, data);
|
||||
|
||||
this.FreqInMhz = (decimal)data.GetWord(_Freqency) / 20;
|
||||
int channelAndBand = data.GetWord(_FreqBand);
|
||||
this.ChannelOrTransponder = ((channelAndBand>>8) == 0 ? "E" : "S") + (channelAndBand&0xFF).ToString("d2");
|
||||
}
|
||||
}
|
||||
}
|
||||
140
ChanSort.Loader.TllFile/ChanSort.Loader.TllFile.csproj
Normal file
140
ChanSort.Loader.TllFile/ChanSort.Loader.TllFile.csproj
Normal file
@@ -0,0 +1,140 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ChanSort.Loader.TllFile</RootNamespace>
|
||||
<AssemblyName>ChanSort.Loader.TllFile</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<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>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||
<CodeAnalysisFailOnMissingRules>true</CodeAnalysisFailOnMissingRules>
|
||||
</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>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisFailOnMissingRules>true</CodeAnalysisFailOnMissingRules>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="DevExpress.Data.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||
<Reference Include="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||
<Reference Include="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AnalogChannel.cs" />
|
||||
<Compile Include="DtvChannel.cs" />
|
||||
<Compile Include="DvbsDataLayout.cs" />
|
||||
<Compile Include="FirmwareData.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Resource.de.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resource.de.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Resource.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resource.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="SatChannel.cs" />
|
||||
<Compile Include="SatChannelListHeader.cs" />
|
||||
<Compile Include="SatTransponder.cs" />
|
||||
<Compile Include="TllChannelBase.cs" />
|
||||
<Compile Include="TllFileSerializer.cs" />
|
||||
<Compile Include="TllFileSerializer.sql.cs" />
|
||||
<Compile Include="TllFileSerializerPlugin.cs" />
|
||||
<Compile Include="TvSettingsForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="TvSettingsForm.Designer.cs">
|
||||
<DependentUpon>TvSettingsForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj">
|
||||
<Project>{DCCFFA08-472B-4D17-BB90-8F513FC01392}</Project>
|
||||
<Name>ChanSort.Api</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="ChanSort.Loader.TllFile.ini">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Properties\licenses.licx" />
|
||||
<EmbeddedResource Include="Resource.de.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resource.de.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Resource.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resource.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="TvSettingsForm.de.resx">
|
||||
<DependentUpon>TvSettingsForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="TvSettingsForm.resx">
|
||||
<DependentUpon>TvSettingsForm.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
</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>
|
||||
340
ChanSort.Loader.TllFile/ChanSort.Loader.TllFile.ini
Normal file
340
ChanSort.Loader.TllFile/ChanSort.Loader.TllFile.ini
Normal file
@@ -0,0 +1,340 @@
|
||||
; FileConfigurationX: overall file and DVB-S data layout
|
||||
; ACTChannelDataMappingX: analog, DVB-C and DVB-T channel data mapping for data length X
|
||||
|
||||
|
||||
[ACTChannelDataMapping:192]
|
||||
; LM series with Firmware 4.x (all except LM611S and LM340S)
|
||||
reorderChannelData = 0
|
||||
lenName = 40
|
||||
offChannelTransponder = 10, 94, 126, 132
|
||||
offProgramNr = 12, 128
|
||||
offFavorites = 20
|
||||
offPcrPid = 22, 180
|
||||
offAudioPid = 24
|
||||
offVideoPid = 26
|
||||
offName = 30, 140
|
||||
offNameLength = 70, 139
|
||||
offServiceId = 72, 136
|
||||
offFrequencyLong = 96
|
||||
offOriginalNetworkId = 102
|
||||
offTransportStreamId = 104
|
||||
offFavorites2 = 134
|
||||
offDeleted = 134
|
||||
maskDeleted = 0x42
|
||||
offLock = 135
|
||||
maskLock = 0x01
|
||||
offSkip = 135
|
||||
maskSkip = 0x02
|
||||
offHide = 135
|
||||
maskHide = 0x04
|
||||
offServiceType = 138
|
||||
offAudioPid2 = 182
|
||||
|
||||
[ACTChannelDataMapping:188]
|
||||
; LM series with Firmware 3.x (LM611S with exceptions, LM340S)
|
||||
reorderChannelData = 0
|
||||
lenName = 40
|
||||
offChannelTransponder = 10, 94, 125, 132
|
||||
offProgramNr = 12, 128
|
||||
offFavorites = 20
|
||||
offPcrPid = 22, 180
|
||||
offAudioPid = 24
|
||||
offVideoPid = 26
|
||||
offName = 30, 140
|
||||
offNameLength = 70, 139
|
||||
offServiceId = 72, 136
|
||||
offFrequencyLong = 96
|
||||
offOriginalNetworkId = 102
|
||||
offTransportStreamId = 104
|
||||
offFavorites2 = 134
|
||||
offDeleted = 134
|
||||
maskDeleted = 0x42
|
||||
offLock = 135
|
||||
maskLock = 0x01
|
||||
offSkip = 135
|
||||
maskSkip = 0x02
|
||||
offHide = 135
|
||||
maskHide = 0x04
|
||||
offServiceType = 138
|
||||
offAudioPid2 = 182
|
||||
|
||||
[ACTChannelDataMapping:184]
|
||||
; LV470S,LV570S,LV579S(with exceptions), LW5500,LW5590,LW570S,LW579S,LW650S,LW659S(with exceptions)
|
||||
; LK950S, CS460S, PM670S, LM611S(with exceptions)
|
||||
reorderChannelData = 0
|
||||
lenName = 40
|
||||
offChannelTransponder = 10, 90, 121, 128
|
||||
offProgramNr = 12, 124
|
||||
offFavorites = 20
|
||||
offPcrPid = 22, 176
|
||||
offAudioPid = 24
|
||||
offVideoPid = 26
|
||||
offName = 30, 136
|
||||
offNameLength = 70, 135
|
||||
offServiceId = 72, 132
|
||||
offFrequencyLong = 92
|
||||
offOriginalNetworkId = 98
|
||||
offTransportStreamId = 100
|
||||
offFavorites2 = 130
|
||||
offDeleted = 130
|
||||
maskDeleted = 0x42
|
||||
offLock = 131
|
||||
maskLock = 0x01
|
||||
offSkip = 131
|
||||
maskSkip = 0x02
|
||||
offHide = 131
|
||||
maskHide = 0x04
|
||||
offServiceType = 134
|
||||
offAudioPid2 = 178
|
||||
|
||||
[ACTChannelDataMapping:180]
|
||||
; PT
|
||||
reorderChannelData = 0
|
||||
lenName = 40
|
||||
offChannelTransponder = 10, 90, 124
|
||||
offProgramNr = 12
|
||||
offFavorites = 20
|
||||
offPcrPid = 22, 172
|
||||
offAudioPid = 24
|
||||
offVideoPid = 26
|
||||
offName = 30, 132
|
||||
offNameLength = 70, 131
|
||||
offServiceId = 72, 128
|
||||
offFrequencyLong = 92
|
||||
offOriginalNetworkId = 98
|
||||
offTransportStreamId = 100
|
||||
offProgramNr2 = 120
|
||||
offFavorites2 = 126
|
||||
offDeleted = 126
|
||||
maskDeleted = 0x42
|
||||
offLock = 127
|
||||
maskLock = 0x01
|
||||
offSkip = 127
|
||||
maskSkip = 0x02
|
||||
offHide = 127
|
||||
maskHide = 0x04
|
||||
offServiceType = 130
|
||||
offAudioPid2 = 172
|
||||
|
||||
[ACTChannelDataMapping:176]
|
||||
; LD, LE, LX series, LK450, LW4500, LW5400
|
||||
reorderChannelData = 0
|
||||
lenName = 40
|
||||
offChannelTransponder = 10, 86, 120
|
||||
offProgramNr = 12
|
||||
offFavorites = 20
|
||||
offPcrPid = 22, 168
|
||||
offAudioPid = 24
|
||||
offVideoPid = 26
|
||||
offName = 30, 128
|
||||
offNameLength = 70, 127
|
||||
offServiceId = 72, 124
|
||||
offFrequencyLong = 88
|
||||
offOriginalNetworkId = 94
|
||||
offTransportStreamId = 96
|
||||
offProgramNr2 = 116
|
||||
offFavorites2 = 122
|
||||
offDeleted = 122
|
||||
maskDeleted = 0x42
|
||||
offLock = 123
|
||||
maskLock = 0x01
|
||||
offSkip = 123
|
||||
maskSkip = 0x02
|
||||
offHide = 123
|
||||
maskHide = 0x04
|
||||
offServiceType = 126
|
||||
offAudioPid2 = 170
|
||||
|
||||
[ACTChannelDataMapping:164]
|
||||
; DM and LH series
|
||||
reorderChannelData = 1
|
||||
lenName = 40
|
||||
offChannelTransponder = 9, 112
|
||||
offProgramNr = 10
|
||||
offFavorites = 18
|
||||
offPcrPid = 20, 156
|
||||
offAudioPid = 22
|
||||
offVideoPid = 24
|
||||
offName = 28, 116
|
||||
offNameLength = 68
|
||||
offServiceId = 70
|
||||
offOriginalNetworkId = 86
|
||||
offTransportStreamId = 88
|
||||
offFrequencyLong = 96
|
||||
offProgramNr2 = 108
|
||||
offFavorites2 = 113
|
||||
offDeleted = 113
|
||||
maskDeleted = 0x42
|
||||
offLock = 113
|
||||
maskLock =
|
||||
offSkip = 113
|
||||
maskSkip = 0x20
|
||||
offHide = 113
|
||||
maskHide =
|
||||
offServiceType = 115
|
||||
offAudioPid2 = 158
|
||||
|
||||
[DvbsBlock:687880]
|
||||
; everything before LM series (but including LM611S and LM340S)
|
||||
satCount = 64
|
||||
satLength = 44
|
||||
transponderCount = 2400
|
||||
transponderLength = 40
|
||||
dvbsChannelCount = 7520
|
||||
dvbsChannelLength = 68
|
||||
lnbCount = 40
|
||||
lnbLength = 44
|
||||
|
||||
[DvbsBlock:717960]
|
||||
; LM and PM series except LM611S and LM340S
|
||||
satCount = 64
|
||||
satLength = 44
|
||||
transponderCount = 2400
|
||||
transponderLength = 40
|
||||
dvbsChannelCount = 7520
|
||||
dvbsChannelLength = 72
|
||||
lnbCount = 40
|
||||
lnbLength = 44
|
||||
|
||||
[SatChannelDataMapping:68]
|
||||
lenName = 40
|
||||
offSatelliteNr = 0
|
||||
offSourceType = 4
|
||||
offTransponderIndex = 5, 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 = 60
|
||||
offAudioPid = 62
|
||||
|
||||
[SatChannelDataMapping:72]
|
||||
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 = 60
|
||||
offAudioPid = 62
|
||||
|
||||
[FirmwareData:6944]
|
||||
; LH series
|
||||
offSize = 0
|
||||
offHotelModeEnabled=6543
|
||||
offHotelModeDtvUpdate=6553
|
||||
|
||||
[FirmwareData:11008]
|
||||
; DM (2350D)
|
||||
offSize = 0
|
||||
offHotelModeEnabled=10563
|
||||
offHotelModeDtvUpdate=10573
|
||||
|
||||
[FirmwareData:15936]
|
||||
; PT
|
||||
offSize = 0
|
||||
offHotelModeEnabled=12601
|
||||
offHotelModeDtvUpdate=12611
|
||||
|
||||
[FirmwareData:15960]
|
||||
; LW4500, LW5400
|
||||
offSize = 0
|
||||
offHotelModeEnabled=12603
|
||||
offHotelModeDtvUpdate=12613
|
||||
|
||||
[FirmwareData:16024]
|
||||
; LM611S, LM340S, CS460S
|
||||
offSize = 0
|
||||
offHotelModeEnabled=12639
|
||||
offHotelModeDtvUpdate=12649
|
||||
|
||||
[FirmwareData:23072]
|
||||
; LD420, LD450, LD550
|
||||
offSize = 0
|
||||
offHotelModeEnabled=19721
|
||||
offHotelModeDtvUpdate=19731
|
||||
|
||||
[FirmwareData:23088]
|
||||
; LK450
|
||||
offSize = 0
|
||||
offHotelModeEnabled=19723
|
||||
offHotelModeDtvUpdate=19733
|
||||
|
||||
[FirmwareData:23096]
|
||||
; LE5500, LD750
|
||||
offSize = 0
|
||||
offHotelModeEnabled=19721
|
||||
offHotelModeDtvUpdate=19731
|
||||
|
||||
[FirmwareData:23144]
|
||||
; LX9500
|
||||
offSize = 0
|
||||
offHotelModeEnabled=19721
|
||||
offHotelModeDtvUpdate=19731
|
||||
|
||||
[FirmwareData:35504]
|
||||
; LV,LW,LK950S
|
||||
offSize = 0
|
||||
offSystemLock =
|
||||
offTvPassword =
|
||||
offHbbTvEnabled =
|
||||
offHotelModeEnabled=34643
|
||||
offHotelModeDtvUpdate=34653
|
||||
offHotelMenuAccessCode = 34668
|
||||
offHotelMenuPin = 34714
|
||||
|
||||
[FirmwareData:36856]
|
||||
; LM860V
|
||||
offSize = 0
|
||||
offSystemLock = 171
|
||||
offTvPassword = 173
|
||||
offHbbTvEnabled = 35096
|
||||
offHotelModeEnabled=35635
|
||||
offHotelModeDtvUpdate=35645
|
||||
offHotelMenuAccessCode = 35660
|
||||
offHotelMenuPin = 35706
|
||||
offSettingsChannelUpdate=36544
|
||||
|
||||
[FirmwareData:36864]
|
||||
; LM (except LM611S,LM340S and LM860V),PM,LS
|
||||
offSize = 0
|
||||
offSystemLock = 171
|
||||
offTvPassword = 173
|
||||
offHbbTvEnabled = 35096
|
||||
offHotelModeEnabled=35635
|
||||
offHotelModeDtvUpdate=35645
|
||||
offHotelMenuAccessCode = 35660
|
||||
offHotelMenuPin = 35706
|
||||
offSettingsChannelUpdate=36544
|
||||
24
ChanSort.Loader.TllFile/DtvChannel.cs
Normal file
24
ChanSort.Loader.TllFile/DtvChannel.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using ChanSort.Api;
|
||||
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
public class DtvChannel : TllChannelBase
|
||||
{
|
||||
private const string _ChannelOrTransponder = "offChannelTransponder";
|
||||
private const string _FrequencyLong = "offFrequencyLong";
|
||||
|
||||
/*
|
||||
offFavorites2 = 134
|
||||
offAudioPid2 = 182
|
||||
*/
|
||||
|
||||
public DtvChannel(int slot, DataMapping data) : base(data)
|
||||
{
|
||||
this.InitCommonData(slot, SignalSource.DvbCT, data);
|
||||
this.InitDvbData(data);
|
||||
|
||||
this.ChannelOrTransponder = data.GetByte(_ChannelOrTransponder).ToString("d2");
|
||||
this.FreqInMhz = (decimal)data.GetDword(_FrequencyLong) / 1000;
|
||||
}
|
||||
}
|
||||
}
|
||||
65
ChanSort.Loader.TllFile/DvbsDataLayout.cs
Normal file
65
ChanSort.Loader.TllFile/DvbsDataLayout.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
public class DvbsDataLayout
|
||||
{
|
||||
public readonly int satCount;
|
||||
public readonly int satLength;
|
||||
public readonly int sizeOfTransponderBlockHeader;
|
||||
public readonly int transponderCount;
|
||||
public readonly int transponderLength;
|
||||
public readonly int sizeOfChannelLinkedListEntry = 8;
|
||||
public readonly int dvbsMaxChannelCount;
|
||||
public readonly int dvbsChannelLength;
|
||||
public readonly int lnbCount;
|
||||
public readonly int lnbLength;
|
||||
public readonly int[] dvbsSubblockLength;
|
||||
|
||||
public int LnbBlockHeaderSize = 12;
|
||||
|
||||
public DvbsDataLayout(Api.IniFile.Section iniSection)
|
||||
{
|
||||
this.satCount = iniSection.GetInt("satCount");
|
||||
this.satLength = iniSection.GetInt("satLength");
|
||||
this.transponderCount = iniSection.GetInt("transponderCount");
|
||||
this.transponderLength = iniSection.GetInt("transponderLength");
|
||||
this.sizeOfTransponderBlockHeader = 14 + transponderCount/8 + transponderCount*6 + 2;
|
||||
this.dvbsMaxChannelCount = iniSection.GetInt("dvbsChannelCount");
|
||||
this.dvbsChannelLength = iniSection.GetInt("dvbsChannelLength");
|
||||
this.lnbCount = iniSection.GetInt("lnbCount");
|
||||
this.lnbLength = iniSection.GetInt("lnbLength");
|
||||
|
||||
this.dvbsSubblockLength = new[]
|
||||
{
|
||||
12, // header
|
||||
14 + 2 + this.satCount + this.satCount*this.satLength, // satellites
|
||||
sizeOfTransponderBlockHeader - 4 + transponderCount * transponderLength, // transponder
|
||||
12 + dvbsMaxChannelCount/8 + dvbsMaxChannelCount*sizeOfChannelLinkedListEntry + dvbsMaxChannelCount * dvbsChannelLength, // channels
|
||||
LnbBlockHeaderSize - 4 + lnbCount * lnbLength // sat/LNB-Config
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// relative to start of DVBS-Block (including the intial 4 length bytes)
|
||||
/// </summary>
|
||||
public int ChannelListHeaderOffset
|
||||
{
|
||||
get { return 4 + this.dvbsSubblockLength[0] + this.dvbsSubblockLength[1] + this.dvbsSubblockLength[2]; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// relative to start of DVBS-Block (including the intial 4 length bytes)
|
||||
/// </summary>
|
||||
public int SequenceTableOffset
|
||||
{
|
||||
get { return ChannelListHeaderOffset + 12 + dvbsMaxChannelCount/8; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// relative to start of DVBS-Block (including the intial 4 length bytes)
|
||||
/// </summary>
|
||||
public int ChannelListOffset
|
||||
{
|
||||
get { return SequenceTableOffset + dvbsMaxChannelCount*sizeOfChannelLinkedListEntry; }
|
||||
}
|
||||
}
|
||||
}
|
||||
65
ChanSort.Loader.TllFile/FirmwareData.cs
Normal file
65
ChanSort.Loader.TllFile/FirmwareData.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
using ChanSort.Api;
|
||||
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
public class FirmwareData : DataMapping
|
||||
{
|
||||
private const string offSize = "offSize";
|
||||
private const string offSystemLock = "offSystemLock";
|
||||
private const string offTvPassword = "offTvPassword";
|
||||
private const string offHbbTvEnabled = "offHbbTvEnabled";
|
||||
private const string offHotelModeEnabled = "offHotelModeEnabled";
|
||||
private const string offHotelModeDtvUpdate = "offHotelModeDtvUpdate";
|
||||
private const string offSettingsChannelUpdate = "offSettingsChannelUpdate";
|
||||
|
||||
public FirmwareData(IniFile.Section settings) :
|
||||
base(settings)
|
||||
{
|
||||
}
|
||||
|
||||
public bool SupportsHbbTv { get { return this.GetOffsets(offHbbTvEnabled).Length > 0; } }
|
||||
public bool SupportsHotelMenu { get { return this.GetOffsets(offHotelModeEnabled).Length > 0; } }
|
||||
public bool SupportsAutoChannelUpdate { get { return this.GetOffsets(offSettingsChannelUpdate).Length > 0; } }
|
||||
|
||||
public long Size { get { return this.GetDword(offSize); } }
|
||||
public bool SystemLocked { get { return this.GetByte(offSystemLock) != 0; } }
|
||||
public string TvPassword { get { return CodeToString((uint)this.GetDword(offTvPassword)); } }
|
||||
|
||||
public bool SettingsAutomaticChannelUpdate
|
||||
{
|
||||
get { return this.GetByte(offSettingsChannelUpdate) != 0; }
|
||||
set { this.SetByte(offSettingsChannelUpdate, (byte) (value ? 1 : 0)); }
|
||||
}
|
||||
|
||||
|
||||
public bool HbbTvEnabled
|
||||
{
|
||||
get { return this.GetByte(offHbbTvEnabled) != 0; }
|
||||
set { this.SetByte(offHbbTvEnabled, (byte)(value ? 1 : 0)); }
|
||||
}
|
||||
|
||||
|
||||
public bool HotelModeEnabled
|
||||
{
|
||||
get { return this.GetByte(offHotelModeEnabled) != 0; }
|
||||
set { this.SetByte(offHotelModeEnabled, (byte) (value ? 1 : 0)); }
|
||||
}
|
||||
|
||||
public bool HotelModeDtvUpdate
|
||||
{
|
||||
get { return this.GetByte(offHotelModeDtvUpdate) != 0; }
|
||||
set { this.SetByte(offHotelModeDtvUpdate, (byte)(value ? 1 : 0)); }
|
||||
}
|
||||
|
||||
private string CodeToString(uint val)
|
||||
{
|
||||
var code = "";
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
code += (char)(33 + (val & 0x0f));
|
||||
val >>= 8;
|
||||
}
|
||||
return code;
|
||||
}
|
||||
}
|
||||
}
|
||||
38
ChanSort.Loader.TllFile/Properties/AssemblyInfo.cs
Normal file
38
ChanSort.Loader.TllFile/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
[assembly: InternalsVisibleTo("Test.Loader.TllFile")]
|
||||
|
||||
// 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.TllFile")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("ChanSort.Loader.TllFile")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2012")]
|
||||
[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("387d8661-ecb3-4957-afca-9a156a90f384")]
|
||||
|
||||
// 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")]
|
||||
4
ChanSort.Loader.TllFile/Properties/licenses.licx
Normal file
4
ChanSort.Loader.TllFile/Properties/licenses.licx
Normal file
@@ -0,0 +1,4 @@
|
||||
DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||
DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||
DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||
108
ChanSort.Loader.TllFile/Resource.Designer.cs
generated
Normal file
108
ChanSort.Loader.TllFile/Resource.Designer.cs
generated
Normal file
@@ -0,0 +1,108 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.586
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace ChanSort.Loader.TllFile {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resource {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resource() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ChanSort.Loader.TllFile.Resource", typeof(Resource).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Channel #{0} (Pr# {1}) was erased because it is a duplicate of channel #{2} (Pr# {3}): {4}.
|
||||
/// </summary>
|
||||
internal static string TllFileSerializer_ERR_dupeChannel {
|
||||
get {
|
||||
return ResourceManager.GetString("TllFileSerializer_ERR_dupeChannel", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Wrong checksum: calculated {1:x8} but file has {0:x8}.
|
||||
/// </summary>
|
||||
internal static string TllFileSerializer_ERR_wrongChecksum {
|
||||
get {
|
||||
return ResourceManager.GetString("TllFileSerializer_ERR_wrongChecksum", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to File size {0} is larger than allowed maxiumum of {1}.
|
||||
/// </summary>
|
||||
internal static string TllFileSerializerPlugin_ERR_fileTooBig {
|
||||
get {
|
||||
return ResourceManager.GetString("TllFileSerializerPlugin_ERR_fileTooBig", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The file content doesn't match any supported model.
|
||||
/// </summary>
|
||||
internal static string TllFileSerializerPlugin_ERR_modelUnknown {
|
||||
get {
|
||||
return ResourceManager.GetString("TllFileSerializerPlugin_ERR_modelUnknown", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to LG-Electronics *.tll Loader.
|
||||
/// </summary>
|
||||
internal static string TllFileSerializerPlugin_PluginName {
|
||||
get {
|
||||
return ResourceManager.GetString("TllFileSerializerPlugin_PluginName", resourceCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
0
ChanSort.Loader.TllFile/Resource.de.Designer.cs
generated
Normal file
0
ChanSort.Loader.TllFile/Resource.de.Designer.cs
generated
Normal file
135
ChanSort.Loader.TllFile/Resource.de.resx
Normal file
135
ChanSort.Loader.TllFile/Resource.de.resx
Normal file
@@ -0,0 +1,135 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="TllFileSerializer_ERR_wrongChecksum" xml:space="preserve">
|
||||
<value>Prüfsummenfehler: berechnet wurde {1:x8} aber Datei enthält {0:x8}</value>
|
||||
</data>
|
||||
<data name="TllFileSerializerPlugin_ERR_modelUnknown" xml:space="preserve">
|
||||
<value>Der Dateiinhalt entstpricht keinem bekannten Modell</value>
|
||||
</data>
|
||||
<data name="TllFileSerializerPlugin_ERR_fileTooBig" xml:space="preserve">
|
||||
<value>Dateigröße {0} überschreitet das erlaubte Maximum von {1}</value>
|
||||
</data>
|
||||
<data name="TllFileSerializerPlugin_PluginName" xml:space="preserve">
|
||||
<value>LG-Electronics *.tll Loader</value>
|
||||
</data>
|
||||
<data name="TllFileSerializer_ERR_dupeChannel" xml:space="preserve">
|
||||
<value>Sender #{0} (Pr# {1}) wurde gelöscht da er ein Duplikat von Sender #{2} (Pr# {3}) ist: {4}</value>
|
||||
</data>
|
||||
</root>
|
||||
116
ChanSort.Loader.TllFile/Resource.resx
Normal file
116
ChanSort.Loader.TllFile/Resource.resx
Normal file
@@ -0,0 +1,116 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 1.3
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">1.3</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1">this is my long string</data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
[base64 mime encoded serialized .NET Framework object]
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
[base64 mime encoded string representing a byte array form of the .NET Framework object]
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>1.3</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="TllFileSerializer_ERR_wrongChecksum" xml:space="preserve">
|
||||
<value>Wrong checksum: calculated {1:x8} but file has {0:x8}</value>
|
||||
</data>
|
||||
<data name="TllFileSerializerPlugin_ERR_modelUnknown" xml:space="preserve">
|
||||
<value>The file content doesn't match any supported model</value>
|
||||
</data>
|
||||
<data name="TllFileSerializerPlugin_ERR_fileTooBig" xml:space="preserve">
|
||||
<value>File size {0} is larger than allowed maxiumum of {1}</value>
|
||||
</data>
|
||||
<data name="TllFileSerializerPlugin_PluginName" xml:space="preserve">
|
||||
<value>LG-Electronics *.tll Loader</value>
|
||||
</data>
|
||||
<data name="TllFileSerializer_ERR_dupeChannel" xml:space="preserve">
|
||||
<value>Channel #{0} (Pr# {1}) was erased because it is a duplicate of channel #{2} (Pr# {3}): {4}</value>
|
||||
</data>
|
||||
</root>
|
||||
44
ChanSort.Loader.TllFile/SatChannel.cs
Normal file
44
ChanSort.Loader.TllFile/SatChannel.cs
Normal file
@@ -0,0 +1,44 @@
|
||||
using ChanSort.Api;
|
||||
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
class SatChannel : TllChannelBase
|
||||
{
|
||||
private const string _SatConfigIndex = "offSatelliteNr";
|
||||
private const string _TransponderIndex = "offTransponderIndex";
|
||||
|
||||
public bool InUse { get; private set; }
|
||||
|
||||
public SatChannel(int order, int slot, DataMapping data, DataRoot dataRoot) : base(data)
|
||||
{
|
||||
this.InUse = data.GetWord(_SatConfigIndex) != 0xFFFF;
|
||||
if (!InUse)
|
||||
return;
|
||||
|
||||
this.InitCommonData(slot, SignalSource.DvbS, data);
|
||||
this.InitDvbData(data);
|
||||
|
||||
int transponderIndex = data.GetWord(_TransponderIndex);
|
||||
Transponder transponder = dataRoot.Transponder.TryGet(transponderIndex);
|
||||
Satellite sat = transponder.Satellite;
|
||||
|
||||
this.Satellite = sat.Name;
|
||||
this.SatPosition = sat.OrbitalPosition;
|
||||
this.RecordOrder = order;
|
||||
this.TransportStreamId = transponder.TransportStreamId;
|
||||
this.OriginalNetworkId = transponder.OriginalNetworkId;
|
||||
this.SymbolRate = transponder.SymbolRate;
|
||||
this.Polarity = transponder.Polarity;
|
||||
this.FreqInMhz = transponder.FrequencyInMhz;
|
||||
}
|
||||
|
||||
public override void UpdateRawData()
|
||||
{
|
||||
base.UpdateRawData();
|
||||
|
||||
// bool deleted = this.NewProgramNr == 0;
|
||||
// if (deleted)
|
||||
// mapping.SetWord(_SatConfigIndex, 0xFFFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
19
ChanSort.Loader.TllFile/SatChannelListHeader.cs
Normal file
19
ChanSort.Loader.TllFile/SatChannelListHeader.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
internal class SatChannelListHeader
|
||||
{
|
||||
private readonly byte[] data;
|
||||
private readonly int baseOffset;
|
||||
public SatChannelListHeader(byte[] data, int offset) { this.data = data; this.baseOffset = offset; }
|
||||
|
||||
public uint Checksum { get { return BitConverter.ToUInt32(data, baseOffset + 0); } }
|
||||
public int LinkedListStartIndex { get { return BitConverter.ToInt16(data, baseOffset + 8); }}
|
||||
public int LinkedListEndIndex1 { get { return BitConverter.ToInt16(data, baseOffset + 10); } }
|
||||
public int LinkedListEndIndex2 { get { return BitConverter.ToInt16(data, baseOffset + 12); } }
|
||||
public int ChannelCount { get { return BitConverter.ToInt16(data, baseOffset + 14); } }
|
||||
|
||||
public int Size { get { return 16; } }
|
||||
}
|
||||
}
|
||||
31
ChanSort.Loader.TllFile/SatTransponder.cs
Normal file
31
ChanSort.Loader.TllFile/SatTransponder.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
internal class SatTransponder
|
||||
{
|
||||
private readonly byte[] data;
|
||||
public int BaseOffset { get; set; }
|
||||
|
||||
public SatTransponder(byte[] data)
|
||||
{
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public int Frequency { get { return BitConverter.ToInt16(data, BaseOffset + 12); } }
|
||||
public int OriginalNetworkId { get { return BitConverter.ToInt16(data, BaseOffset + 18); } }
|
||||
public int TransportStreamId { get { return BitConverter.ToInt16(data, BaseOffset + 20); } }
|
||||
|
||||
public int SymbolRate
|
||||
{
|
||||
get { return BitConverter.ToInt16(data, BaseOffset + 25); }
|
||||
set
|
||||
{
|
||||
data[BaseOffset + 25] = (byte)value;
|
||||
data[BaseOffset + 26] = (byte)(value >> 8);
|
||||
}
|
||||
}
|
||||
|
||||
public int SatIndex { get { return data[BaseOffset + 36]; } }
|
||||
}
|
||||
}
|
||||
132
ChanSort.Loader.TllFile/TllChannelBase.cs
Normal file
132
ChanSort.Loader.TllFile/TllChannelBase.cs
Normal file
@@ -0,0 +1,132 @@
|
||||
using ChanSort.Api;
|
||||
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
public class TllChannelBase : ChannelInfo
|
||||
{
|
||||
// common
|
||||
private const string _ProgramNr = "offProgramNr";
|
||||
private const string _ProgramNr2 = "offProgramNr2"; // not for DVB-S
|
||||
private const string _Name = "offName";
|
||||
private const string _NameLength = "offNameLength";
|
||||
private const string _Favorites = "offFavorites"; // not for DVB-S (which only uses Favorite2)
|
||||
|
||||
private const string _Deleted = "Deleted";
|
||||
private const string _Favorites2 = "offFavorites2";
|
||||
private const string _Encrypted = "Encrypted";
|
||||
|
||||
private const string _Lock = "Lock";
|
||||
private const string _Skip = "Skip";
|
||||
private const string _Hide = "Hide";
|
||||
private const string _Moved = "ProgNrCustomized";
|
||||
|
||||
// DVB
|
||||
private const string _ServiceId = "offServiceId";
|
||||
private const string _VideoPid = "offVideoPid";
|
||||
private const string _AudioPid = "offAudioPid";
|
||||
private const string _OriginalNetworkId = "offOriginalNetworkId";
|
||||
private const string _TransportStreamId = "offTransportStreamId";
|
||||
private const string _ServiceType = "offServiceType";
|
||||
|
||||
protected readonly DataMapping mapping;
|
||||
protected readonly byte[] rawData;
|
||||
internal readonly int baseOffset;
|
||||
|
||||
protected TllChannelBase(DataMapping data)
|
||||
{
|
||||
this.mapping = data;
|
||||
this.rawData = data.Data;
|
||||
this.baseOffset = data.BaseOffset;
|
||||
}
|
||||
|
||||
#region InitCommonData()
|
||||
protected void InitCommonData(int slot, SignalSource signalSource, DataMapping data)
|
||||
{
|
||||
this.RecordIndex = slot;
|
||||
this.SignalSource = signalSource;
|
||||
var nr = data.GetWord(_ProgramNr);
|
||||
this.SignalType = this.GetSignalType(nr);
|
||||
this.OldProgramNr = (nr & 0x3FFF);
|
||||
|
||||
this.ParseNames();
|
||||
|
||||
this.Favorites = (Favorites)((data.GetByte(_Favorites2) & 0x3C) >> 2);
|
||||
this.Lock = data.GetFlag(_Lock);
|
||||
this.Skip = data.GetFlag(_Skip);
|
||||
this.Hidden = data.GetFlag(_Hide);
|
||||
this.Encrypted = data.GetFlag(_Encrypted);
|
||||
this.IsDeleted = data.GetFlag(_Deleted);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region InitDvbData()
|
||||
protected void InitDvbData(DataMapping data)
|
||||
{
|
||||
this.ServiceId = data.GetWord(_ServiceId);
|
||||
//this.PcrPid = data.GetWord(_PcrPid);
|
||||
this.VideoPid = data.GetWord(_VideoPid);
|
||||
this.AudioPid = data.GetWord(_AudioPid);
|
||||
this.OriginalNetworkId = data.GetWord(_OriginalNetworkId);
|
||||
this.TransportStreamId = data.GetWord(_TransportStreamId);
|
||||
this.ServiceType = data.GetByte(_ServiceType);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetSignalType()
|
||||
protected SignalType GetSignalType(uint programNr)
|
||||
{
|
||||
if ((programNr & 0x4000) != 0)
|
||||
return SignalType.Radio;
|
||||
return SignalType.Tv;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ParseNames()
|
||||
private void ParseNames()
|
||||
{
|
||||
mapping.SetDataPtr(this.rawData, this.baseOffset);
|
||||
DvbStringDecoder dec = new DvbStringDecoder(mapping.DefaultEncoding);
|
||||
string longName, shortName;
|
||||
dec.GetChannelNames(this.rawData, this.baseOffset + mapping.GetOffsets(_Name)[0], mapping.GetByte(_NameLength),
|
||||
out longName, out shortName);
|
||||
this.Name = longName;
|
||||
this.ShortName = shortName;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateRawData()
|
||||
public override void UpdateRawData()
|
||||
{
|
||||
mapping.SetDataPtr(this.rawData, this.baseOffset);
|
||||
mapping.SetWord(_ProgramNr, this.NewProgramNr + (this.SignalType == SignalType.Radio ? 0x4000 : 0));
|
||||
mapping.SetWord(_ProgramNr2, (mapping.GetWord(_ProgramNr2) & 0x0003) | (this.NewProgramNr << 2));
|
||||
if (this.IsNameModified)
|
||||
{
|
||||
mapping.SetString(_Name, this.Name, 40);
|
||||
mapping.SetByte(_NameLength, this.Name.Length);
|
||||
this.IsNameModified = false;
|
||||
}
|
||||
mapping.SetByte(_Favorites2, (mapping.GetByte(_Favorites2)) & 0xC3 | ((byte) this.Favorites << 2));
|
||||
mapping.SetByte(_Favorites, (mapping.GetByte(_Favorites) & 0xF0) | (byte)this.Favorites);
|
||||
mapping.SetFlag(_Skip, this.Skip);
|
||||
mapping.SetFlag(_Lock, this.Lock);
|
||||
mapping.SetFlag(_Hide, this.Hidden);
|
||||
if (this.NewProgramNr == 0)
|
||||
{
|
||||
mapping.SetFlag(_Deleted, true);
|
||||
mapping.SetByte("off"+_Moved, 0); //skip,lock,hide,moved
|
||||
}
|
||||
else
|
||||
mapping.SetFlag(_Moved, true);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ChangeEncoding()
|
||||
public override void ChangeEncoding(System.Text.Encoding encoding)
|
||||
{
|
||||
this.mapping.DefaultEncoding = encoding;
|
||||
this.ParseNames();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
727
ChanSort.Loader.TllFile/TllFileSerializer.cs
Normal file
727
ChanSort.Loader.TllFile/TllFileSerializer.cs
Normal file
@@ -0,0 +1,727 @@
|
||||
#define SYMBOL_RATE_ROUNDING
|
||||
#undef STORE_DVBS_CHANNELS_IN_DATABASE
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using ChanSort.Api;
|
||||
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
public partial class TllFileSerializer : SerializerBase
|
||||
{
|
||||
private const long MaxFileSize = 2000000;
|
||||
private readonly string ERR_fileTooBig = Resource.TllFileSerializerPlugin_ERR_fileTooBig;
|
||||
private readonly string ERR_modelUnknown = Resource.TllFileSerializerPlugin_ERR_modelUnknown;
|
||||
private readonly string ERR_wrongChecksum = Resource.TllFileSerializer_ERR_wrongChecksum;
|
||||
private readonly string ERR_dupeChannel = Resource.TllFileSerializer_ERR_dupeChannel;
|
||||
|
||||
private readonly MappingPool<DataMapping> actMappings = new MappingPool<DataMapping>("Analog and DVB-C/T");
|
||||
private readonly MappingPool<DataMapping> dvbsMappings = new MappingPool<DataMapping>("DVB-S");
|
||||
private readonly MappingPool<FirmwareData> firmwareMappings = new MappingPool<FirmwareData>("Firmware");
|
||||
private readonly Dictionary<int, DvbsDataLayout> satConfigs = new Dictionary<int, DvbsDataLayout>();
|
||||
|
||||
private byte[] fileContent;
|
||||
|
||||
private int analogBlockOffset;
|
||||
private int firmwareBlockOffset;
|
||||
private int dvbctBlockOffset;
|
||||
private int dvbsBlockOffset;
|
||||
private int[] dvbsSubblockCrcOffset;
|
||||
private int settingsBlockOffset;
|
||||
|
||||
private int actChannelSize;
|
||||
private bool reorderPhysically;
|
||||
|
||||
private int analogChannelCount;
|
||||
private int dvbctChannelCount;
|
||||
private int dvbsChannelCount;
|
||||
|
||||
private DvbsDataLayout satConfig;
|
||||
private bool isDvbsSymbolRateDiv2;
|
||||
|
||||
private Dictionary<int, int> nextChannelIndex;
|
||||
private int firmwareBlockSize;
|
||||
private int dvbsBlockSize;
|
||||
private int settingsBlockSize;
|
||||
private string countryCode;
|
||||
|
||||
private int duplicateChannels;
|
||||
private int deletedChannelsHard;
|
||||
private int deletedChannelsSoft;
|
||||
private int dvbsChannelsAtPr0;
|
||||
|
||||
private bool removeDeletedActChannels = false;
|
||||
|
||||
#region ctor()
|
||||
public TllFileSerializer(string inputFile) : base(inputFile)
|
||||
{
|
||||
|
||||
this.Features.ChannelNameEdit = true;
|
||||
this.Features.EraseChannelData = true;
|
||||
this.Features.FileInformation = true;
|
||||
this.Features.DeviceSettings = true;
|
||||
this.SupportedTvCountryCodes = new List<string>
|
||||
{
|
||||
"___ (None)", "AUT (Austria)", "BEL (Belgium)", "CHE (Switzerland)",
|
||||
"DEU (Germany)", "ESP (Spain)", "FRA (France)", "GBR (Great Britain)",
|
||||
"GRC (Greece)", "IRL (Ireland)", "ITA (Italy)", "LUX (Luxembourg)",
|
||||
"NLD (Netherlands)", "PRT (Portugal)", "SVN (Slovenia)"
|
||||
};
|
||||
|
||||
this.ReadConfigurationFromIniFile();
|
||||
}
|
||||
#endregion
|
||||
|
||||
public IList<string> SupportedTvCountryCodes { get; private set; }
|
||||
|
||||
#region ReadConfigurationFromIniFile()
|
||||
|
||||
private void ReadConfigurationFromIniFile()
|
||||
{
|
||||
string iniFile = Assembly.GetExecutingAssembly().Location.Replace(".dll", ".ini");
|
||||
IniFile ini = new IniFile(iniFile);
|
||||
foreach (var section in ini.Sections)
|
||||
{
|
||||
int idx = section.Name.IndexOf(":");
|
||||
int recordLength = idx < 0 ? 0 : int.Parse(section.Name.Substring(idx + 1));
|
||||
if (section.Name.StartsWith("DvbsBlock"))
|
||||
this.satConfigs.Add(recordLength, new DvbsDataLayout(section));
|
||||
else if (section.Name.StartsWith("ACTChannelDataMapping"))
|
||||
actMappings.AddMapping(recordLength, new DataMapping(section));
|
||||
else if (section.Name.StartsWith("SatChannelDataMapping"))
|
||||
dvbsMappings.AddMapping(recordLength, new DataMapping(section));
|
||||
else if (section.Name.StartsWith("FirmwareData"))
|
||||
firmwareMappings.AddMapping(recordLength, new FirmwareData(section));
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region DisplayName
|
||||
public override string DisplayName { get { return "TLL loader"; } }
|
||||
#endregion
|
||||
|
||||
#region Load()
|
||||
|
||||
public override void Load()
|
||||
{
|
||||
long fileSize = new FileInfo(this.FileName).Length;
|
||||
if (fileSize > MaxFileSize)
|
||||
throw new InvalidOperationException(string.Format(ERR_fileTooBig, fileSize, MaxFileSize));
|
||||
|
||||
this.fileContent = File.ReadAllBytes(this.FileName);
|
||||
int off = 0;
|
||||
|
||||
this.ReadFileHeader(ref off);
|
||||
this.ReadAnalogChannelBlock(ref off);
|
||||
this.ReadFirmwareDataBlock(ref off);
|
||||
this.ReadDvbCtChannels(ref off);
|
||||
this.ReadDvbSBlock(ref off);
|
||||
this.ReadSettingsBlock(ref off);
|
||||
|
||||
#if STORE_DVBS_CHANNELS_IN_DATABASE
|
||||
this.StoreToDatabase();
|
||||
#endif
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ReadFileHeader()
|
||||
private void ReadFileHeader(ref int off)
|
||||
{
|
||||
if (fileContent.Length < 4)
|
||||
throw new InvalidOperationException(ERR_modelUnknown);
|
||||
if (BitConverter.ToUInt32(fileContent, off) == 0x5A5A5A5A)
|
||||
off += 4;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReadAnalogChannelBlock()
|
||||
|
||||
private void ReadAnalogChannelBlock(ref int off)
|
||||
{
|
||||
this.analogBlockOffset = off;
|
||||
this.ReadActChannelBlock(ref off, out analogChannelCount, out actChannelSize,
|
||||
(slot, data) => new AnalogChannel(slot, data));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReadFirmwareDataBlock()
|
||||
private void ReadFirmwareDataBlock(ref int off)
|
||||
{
|
||||
this.firmwareBlockOffset = off;
|
||||
this.firmwareBlockSize = this.GetBlockSize(off);
|
||||
off += 4 + this.firmwareBlockSize;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReadDvbCtChannels()
|
||||
private void ReadDvbCtChannels(ref int off)
|
||||
{
|
||||
this.dvbctBlockOffset = off;
|
||||
this.ReadActChannelBlock(ref off, out dvbctChannelCount, out actChannelSize,
|
||||
(slot, data) => new DtvChannel(slot, data));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReadDvbSBlock()
|
||||
private void ReadDvbSBlock(ref int off)
|
||||
{
|
||||
int blockSize;
|
||||
if (!IsDvbsBlock(off, out blockSize))
|
||||
return;
|
||||
|
||||
this.dvbsBlockSize = blockSize;
|
||||
this.dvbsBlockOffset = off;
|
||||
off += 4;
|
||||
|
||||
this.satConfig = this.satConfigs.TryGet(blockSize);
|
||||
if (satConfig != null)
|
||||
this.ReadDvbsSubblocks(ref off);
|
||||
else
|
||||
{
|
||||
this.DataRoot.Warnings.AppendFormat("DVB-S data format is not supported (size={0})\n", blockSize);
|
||||
off += blockSize;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReadSettingsBlock()
|
||||
private void ReadSettingsBlock(ref int off)
|
||||
{
|
||||
this.settingsBlockOffset = off;
|
||||
if (this.settingsBlockOffset >= fileContent.Length)
|
||||
{
|
||||
this.settingsBlockOffset = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
this.settingsBlockSize = this.GetBlockSize(off);
|
||||
off += 4;
|
||||
if (settingsBlockSize >= 8)
|
||||
{
|
||||
StringBuilder code = new StringBuilder();
|
||||
for (int i = 6; i >= 4; i--)
|
||||
code.Append((char)fileContent[off + i]);
|
||||
this.countryCode = code.ToString();
|
||||
}
|
||||
off += settingsBlockSize;
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region ReadActChannelBlock()
|
||||
private void ReadActChannelBlock(ref int off, out int channelCount, out int recordSize,
|
||||
Func<int, DataMapping, ChannelInfo> channelFactory)
|
||||
{
|
||||
recordSize = 0;
|
||||
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 actMapping = this.actMappings.GetMapping(recordSize);
|
||||
this.reorderPhysically = actMapping.Settings.GetInt("reorderChannelData") != 0;
|
||||
|
||||
for (int i = 0; i < channelCount; i++)
|
||||
{
|
||||
actMapping.SetDataPtr(fileContent, off);
|
||||
ChannelInfo ci = channelFactory(i, actMapping);
|
||||
|
||||
var list = this.DataRoot.GetChannelList(ci.SignalSource, ci.SignalType, true);
|
||||
this.DataRoot.AddChannel(list, ci);
|
||||
|
||||
off += recordSize;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetBlockSize()
|
||||
private int GetBlockSize(int off, int minSize = 0)
|
||||
{
|
||||
long len = BitConverter.ToUInt32(fileContent, off);
|
||||
if (len < minSize || off + 4 + len > fileContent.Length)
|
||||
throw new InvalidOperationException(ERR_modelUnknown);
|
||||
return (int)len;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetActChannelRecordSize()
|
||||
private int GetActChannelRecordSize(int off, int blockSize, int channelCount)
|
||||
{
|
||||
if ((blockSize - 4) % channelCount != 0)
|
||||
throw new InvalidOperationException(ERR_modelUnknown);
|
||||
int recordSize = (blockSize - 4) / channelCount;
|
||||
if (off + channelCount * recordSize > fileContent.Length)
|
||||
throw new InvalidOperationException(ERR_modelUnknown);
|
||||
return recordSize;
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region IsDvbsBlock()
|
||||
private bool IsDvbsBlock(int off, out int blockSize)
|
||||
{
|
||||
blockSize = 0;
|
||||
if (off >= fileContent.Length)
|
||||
return false;
|
||||
blockSize = this.GetBlockSize(off);
|
||||
if (blockSize < 12)
|
||||
return false;
|
||||
ulong blockId = BitConverter.ToUInt64(fileContent, off + 8);
|
||||
if (blockId != 0x0032532D53425644) // reverse "DVBS-S2\0"
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReadDvbsSubblocks()
|
||||
private void ReadDvbsSubblocks(ref int off)
|
||||
{
|
||||
this.ScanDvbSSubBlockChecksums(off);
|
||||
|
||||
// subblock 1 (DVBS header)
|
||||
off += 16;
|
||||
|
||||
// subblock 2 (satellites)
|
||||
off += 84; // irrelevant data
|
||||
this.ReadSatellites(ref off);
|
||||
|
||||
// subblock 3 (transponder)
|
||||
off += satConfig.sizeOfTransponderBlockHeader;
|
||||
this.ReadTransponderData(ref off);
|
||||
|
||||
// subblock 4 (channels)
|
||||
SatChannelListHeader header = new SatChannelListHeader(fileContent, off);
|
||||
this.dvbsChannelCount = header.ChannelCount;
|
||||
off += header.Size;
|
||||
off += satConfig.dvbsMaxChannelCount/8; // skip allocation bitmap
|
||||
this.ReadDvbsChannelLinkedList(ref off);
|
||||
|
||||
this.ReadDvbSChannels(ref off, header.LinkedListStartIndex);
|
||||
|
||||
// subblock 5 (satellite/LNB config)
|
||||
off += satConfig.LnbBlockHeaderSize + satConfig.lnbCount*satConfig.lnbLength;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ScanDvbSSubBlockChecksums()
|
||||
private void ScanDvbSSubBlockChecksums(int off)
|
||||
{
|
||||
this.dvbsSubblockCrcOffset = new int[satConfig.dvbsSubblockLength.Length];
|
||||
for (int i = 0; i < dvbsSubblockCrcOffset.Length; i++)
|
||||
{
|
||||
this.dvbsSubblockCrcOffset[i] = off;
|
||||
int subblockLength = satConfig.dvbsSubblockLength[i];
|
||||
uint fileCrc = BitConverter.ToUInt32(fileContent, off);
|
||||
uint calcCrc = Crc32.CalcCrc32(fileContent, off + 4, subblockLength);
|
||||
if (fileCrc != calcCrc)
|
||||
throw new IOException(string.Format(ERR_wrongChecksum, calcCrc, fileCrc));
|
||||
off += 4 + subblockLength;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReadSatellites()
|
||||
private void ReadSatellites(ref int off)
|
||||
{
|
||||
for (int i = 0; i < satConfig.satCount; i++)
|
||||
{
|
||||
Satellite sat = new Satellite(i);
|
||||
string satName = Encoding.ASCII.GetString(fileContent, off + 0, 32).TrimEnd('\0');
|
||||
sat.Name = satName;
|
||||
sat.OrbitalPosition = GetSatLocation(fileContent[off + 32], fileContent[off + 33]);
|
||||
this.DataRoot.AddSatellite(sat);
|
||||
off += satConfig.satLength;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReadTransponderData()
|
||||
private void ReadTransponderData(ref int off)
|
||||
{
|
||||
var data = new SatTransponder(fileContent);
|
||||
data.BaseOffset = off;
|
||||
for (int i=0; i<satConfig.transponderCount; i++)
|
||||
{
|
||||
if (data.SatIndex == 0xFF)
|
||||
continue;
|
||||
#if SYMBOL_RATE_ROUNDING
|
||||
ushort sr = (ushort)(data.SymbolRate & 0x7FFF);
|
||||
if (sr % 100 >= 95)
|
||||
data.SymbolRate = (ushort)((data.SymbolRate & 0x8000) | ((sr / 100 + 1) * 100));
|
||||
#endif
|
||||
|
||||
Transponder transponder = new Transponder(i);
|
||||
transponder.FrequencyInMhz = data.Frequency;
|
||||
transponder.OriginalNetworkId = data.OriginalNetworkId;
|
||||
transponder.TransportStreamId = data.TransportStreamId;
|
||||
transponder.SymbolRate = data.SymbolRate & 0x7FFF;
|
||||
if (data.SymbolRate == 11000)
|
||||
this.isDvbsSymbolRateDiv2 = true;
|
||||
|
||||
var sat = this.DataRoot.Satellites.TryGet(data.SatIndex/2);
|
||||
this.DataRoot.AddTransponder(sat, transponder);
|
||||
|
||||
data.BaseOffset += satConfig.transponderLength;
|
||||
}
|
||||
|
||||
if (this.isDvbsSymbolRateDiv2)
|
||||
{
|
||||
foreach (var transponder in this.DataRoot.Transponder.Values)
|
||||
transponder.SymbolRate *= 2;
|
||||
}
|
||||
|
||||
off += this.satConfig.transponderCount * this.satConfig.transponderLength;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReadDvbsChannelLinkedList()
|
||||
private void ReadDvbsChannelLinkedList(ref int off)
|
||||
{
|
||||
this.nextChannelIndex = new Dictionary<int, int>();
|
||||
for (int i = 0; i < satConfig.dvbsMaxChannelCount; i++)
|
||||
{
|
||||
int offEntry = off + i*satConfig.sizeOfChannelLinkedListEntry;
|
||||
int cur = BitConverter.ToUInt16(fileContent, offEntry + 4);
|
||||
if (cur != i)
|
||||
break;
|
||||
this.nextChannelIndex.Add(cur, BitConverter.ToUInt16(fileContent, offEntry + 2));
|
||||
}
|
||||
off += satConfig.dvbsMaxChannelCount*satConfig.sizeOfChannelLinkedListEntry;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReadDvbSChannels()
|
||||
private void ReadDvbSChannels(ref int off, int startIndex)
|
||||
{
|
||||
var mapping = this.dvbsMappings.GetMapping(satConfig.dvbsChannelLength);
|
||||
int index = startIndex;
|
||||
for (int i = 0; i < this.dvbsChannelCount; i++)
|
||||
{
|
||||
int recordOffset = off + index*satConfig.dvbsChannelLength;
|
||||
mapping.SetDataPtr(fileContent, recordOffset);
|
||||
SatChannel ci = new SatChannel(i, index, mapping, this.DataRoot);
|
||||
if (!ci.InUse)
|
||||
++this.deletedChannelsHard;
|
||||
else if (ci.IsDeleted)
|
||||
++this.deletedChannelsSoft;
|
||||
else
|
||||
{
|
||||
var list = this.DataRoot.GetChannelList(ci.SignalSource, ci.SignalType, true);
|
||||
var dupes = list.GetChannelByUid(ci.Uid);
|
||||
if (dupes.Count == 0)
|
||||
{
|
||||
if (ci.OldProgramNr == 0)
|
||||
++this.dvbsChannelsAtPr0;
|
||||
this.DataRoot.AddChannel(list, ci);
|
||||
}
|
||||
else
|
||||
{
|
||||
// duplicate channels (ONID,TSID,SSID) cause the TV to randomly reorder channels and show wrong ones in the
|
||||
// program list, so we erase all dupes here
|
||||
this.DataRoot.Warnings.AppendFormat(ERR_dupeChannel, ci.RecordIndex, ci.OldProgramNr, dupes[0].RecordIndex,
|
||||
dupes[0].OldProgramNr, dupes[0].Name).AppendLine();
|
||||
this.EraseDuplicateDvbsChannel(recordOffset, satConfig);
|
||||
++this.duplicateChannels;
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.nextChannelIndex.TryGetValue(index, out index) || index == -1)
|
||||
break;
|
||||
}
|
||||
off += satConfig.dvbsMaxChannelCount * satConfig.dvbsChannelLength;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region EraseDuplicateDvbsChannel()
|
||||
private void EraseDuplicateDvbsChannel(int off, DvbsDataLayout c)
|
||||
{
|
||||
for (int i = 0; i < c.dvbsChannelLength; i++)
|
||||
fileContent[off++] = 0xFF;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetSatLocation()
|
||||
private string GetSatLocation(byte degree, byte fractionAndOrientation)
|
||||
{
|
||||
return string.Format("{0}.{1}{2}", degree, fractionAndOrientation & 0x0f, fractionAndOrientation < 16 ? "W" : "E");
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region Save()
|
||||
public override void Save(string tvOutputFile, string csvOutputFile)
|
||||
{
|
||||
int newAnalogChannelCount;
|
||||
int newDvbctChannelCount;
|
||||
this.UpdateRawChannelData(out newAnalogChannelCount, out newDvbctChannelCount);
|
||||
|
||||
if (!removeDeletedActChannels)
|
||||
{
|
||||
newAnalogChannelCount = this.analogChannelCount;
|
||||
newDvbctChannelCount = this.dvbctChannelCount;
|
||||
}
|
||||
|
||||
if (this.reorderPhysically || this.removeDeletedActChannels)
|
||||
this.ReorderActChannelsPhysically();
|
||||
|
||||
if (satConfig != null)
|
||||
this.UpdateDvbsChecksums();
|
||||
|
||||
using (var file = new BinaryWriter(new FileStream(tvOutputFile, FileMode.Create, FileAccess.Write)))
|
||||
{
|
||||
// header
|
||||
file.Write(this.fileContent, 0, this.analogBlockOffset);
|
||||
|
||||
// analog
|
||||
file.Write(newAnalogChannelCount*this.actChannelSize + 4);
|
||||
file.Write(newAnalogChannelCount);
|
||||
file.Write(fileContent, this.analogBlockOffset + 8, newAnalogChannelCount*this.actChannelSize);
|
||||
|
||||
// firmware
|
||||
file.Write(fileContent, this.firmwareBlockOffset, this.firmwareBlockSize + 4);
|
||||
|
||||
// DVB-CT
|
||||
file.Write(newDvbctChannelCount*this.actChannelSize + 4);
|
||||
file.Write(newDvbctChannelCount);
|
||||
file.Write(fileContent, this.dvbctBlockOffset + 8, newDvbctChannelCount * this.actChannelSize);
|
||||
|
||||
// DVB-S
|
||||
if (this.dvbsBlockOffset != 0)
|
||||
file.Write(fileContent, this.dvbsBlockOffset, this.dvbsBlockSize + 4);
|
||||
|
||||
// rest (including settings)
|
||||
file.Write(fileContent, this.settingsBlockOffset, fileContent.Length - this.settingsBlockOffset);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateRawChannelData()
|
||||
private void UpdateRawChannelData(out int newAnalogChannelCount, out int newDvbctChannelCount)
|
||||
{
|
||||
newAnalogChannelCount = 0;
|
||||
newDvbctChannelCount = 0;
|
||||
foreach (var list in this.DataRoot.ChannelLists)
|
||||
{
|
||||
foreach (TllChannelBase channel in list.Channels)
|
||||
{
|
||||
if (channel.NewProgramNr != 0)
|
||||
{
|
||||
if ((channel.SignalSource & SignalSource.Digital) == 0)
|
||||
++newAnalogChannelCount;
|
||||
else if (channel.SignalSource != SignalSource.DvbS)
|
||||
++newDvbctChannelCount;
|
||||
}
|
||||
channel.OldProgramNr = channel.NewProgramNr;
|
||||
channel.UpdateRawData();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ReorderActChannelsPhysically()
|
||||
private void ReorderActChannelsPhysically()
|
||||
{
|
||||
var analogTv = this.DataRoot.GetChannelList(SignalSource.AnalogCT, SignalType.Tv, false);
|
||||
var analogRadio = this.DataRoot.GetChannelList(SignalSource.AnalogCT, SignalType.Radio, false);
|
||||
var analog = analogTv.Channels.Union(analogRadio.Channels).ToList();
|
||||
this.ReorderChannelData(this.analogBlockOffset + 8, this.actChannelSize, this.analogChannelCount, analog);
|
||||
|
||||
var dvbCtTv = this.DataRoot.GetChannelList(SignalSource.DvbCT, SignalType.Tv, false);
|
||||
var dvbCtRadio = this.DataRoot.GetChannelList(SignalSource.DvbCT, SignalType.Radio, false);
|
||||
var dvbCt = dvbCtTv.Channels.Union(dvbCtRadio.Channels).ToList();
|
||||
this.ReorderChannelData(this.dvbctBlockOffset + 8, this.actChannelSize, this.dvbctChannelCount, dvbCt);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region ReorderChannelData()
|
||||
private void ReorderChannelData(int channelDataOffset, int channelDataLength, int recordCount, IList<ChannelInfo> sortedList)
|
||||
{
|
||||
if (sortedList.Count == 0) return;
|
||||
byte[] copy = new byte[recordCount * channelDataLength];
|
||||
Array.Copy(fileContent, channelDataOffset, copy, 0, copy.Length);
|
||||
|
||||
int pTarget = channelDataOffset;
|
||||
int slot = 0;
|
||||
foreach (ChannelInfo appChannel in sortedList)
|
||||
{
|
||||
if (appChannel.NewProgramNr <= 0 && this.removeDeletedActChannels)
|
||||
continue;
|
||||
if (appChannel.RecordIndex != slot)
|
||||
{
|
||||
Array.Copy(copy, appChannel.RecordIndex*channelDataLength, fileContent, pTarget, channelDataLength);
|
||||
appChannel.RecordIndex = slot;
|
||||
}
|
||||
++slot;
|
||||
pTarget += channelDataLength;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UpdateDvbsChecksums()
|
||||
private void UpdateDvbsChecksums()
|
||||
{
|
||||
for (int i = 0; i < this.dvbsSubblockCrcOffset.Length; i++)
|
||||
{
|
||||
uint crc32 = Crc32.CalcCrc32(fileContent, this.dvbsSubblockCrcOffset[i] + 4, satConfig.dvbsSubblockLength[i]);
|
||||
var bytes = BitConverter.GetBytes(crc32);
|
||||
for (int j = 0; j < bytes.Length; j++)
|
||||
fileContent[this.dvbsSubblockCrcOffset[i] + j] = bytes[j];
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region DefaultEncoding
|
||||
public override Encoding DefaultEncoding
|
||||
{
|
||||
get { return base.DefaultEncoding; }
|
||||
set
|
||||
{
|
||||
if (Equals(value, this.DefaultEncoding))
|
||||
return;
|
||||
base.DefaultEncoding = value;
|
||||
if (this.DataRoot.IsEmpty)
|
||||
return;
|
||||
ChangeEncoding();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ChangeEncoding()
|
||||
|
||||
private void ChangeEncoding()
|
||||
{
|
||||
foreach (var list in DataRoot.ChannelLists)
|
||||
{
|
||||
foreach (var channel in list.Channels)
|
||||
channel.ChangeEncoding(this.DefaultEncoding);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
// TvSettingsForm
|
||||
|
||||
#region GetFileInformation()
|
||||
public override string GetFileInformation()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine("ANALOG");
|
||||
sb.Append("Number of data records: ").Append(this.analogChannelCount).AppendLine();
|
||||
sb.Append("Length of data record: ").Append(this.actChannelSize).AppendLine();
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("DVB-C/T");
|
||||
sb.Append("Number of data records: ").Append(this.dvbctChannelCount).AppendLine();
|
||||
sb.Append("Length of data record: ").Append(this.actChannelSize).AppendLine();
|
||||
sb.AppendLine();
|
||||
|
||||
sb.AppendLine();
|
||||
sb.AppendLine("DVB-S");
|
||||
if (satConfig != null)
|
||||
{
|
||||
int numberOfDupePrNr;
|
||||
CountDuplicateRecords(out numberOfDupePrNr);
|
||||
sb.Append("Max number of data records: ").Append(satConfig.dvbsMaxChannelCount).AppendLine();
|
||||
sb.Append("Length of data record: ").Append(satConfig.dvbsChannelLength).AppendLine();
|
||||
sb.Append("Channel records in use: ").Append(dvbsChannelCount).AppendLine();
|
||||
sb.Append("Channel records marked hard-deleted: ").Append(this.deletedChannelsHard).AppendLine();
|
||||
sb.Append("Channel records marked soft-deleted: ").Append(this.deletedChannelsSoft).AppendLine();
|
||||
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();
|
||||
}
|
||||
else
|
||||
sb.AppendLine("not present");
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private void CountDuplicateRecords(out int numberOfDupePrNr)
|
||||
{
|
||||
numberOfDupePrNr = 0;
|
||||
foreach (var list in this.DataRoot.ChannelLists)
|
||||
{
|
||||
if ((list.SignalSource & SignalSource.Sat) != 0)
|
||||
numberOfDupePrNr += list.DuplicateProgNrCount;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region TvCountryCode
|
||||
public string TvCountryCode
|
||||
{
|
||||
get { return this.countryCode; }
|
||||
set
|
||||
{
|
||||
if (value.Length < 3 || this.settingsBlockOffset == 0 || this.settingsBlockSize < 8) return;
|
||||
value = value.ToUpper();
|
||||
int off = this.settingsBlockOffset + 4 + 4 + 2;
|
||||
for (int i = 0; i < 3; i++)
|
||||
this.fileContent[off--] = (byte)value[i];
|
||||
this.countryCode = value;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ShowDeviceSettingsForm()
|
||||
public override void ShowDeviceSettingsForm(object parentWindow)
|
||||
{
|
||||
using (var dlg = new TvSettingsForm(this))
|
||||
{
|
||||
dlg.ShowDialog((Form)parentWindow);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetFirmwareMapping()
|
||||
public FirmwareData GetFirmwareMapping()
|
||||
{
|
||||
var mapping = this.firmwareMappings.GetMapping(this.firmwareBlockSize, false);
|
||||
if (mapping == null) return null;
|
||||
mapping.SetDataPtr(this.fileContent, this.firmwareBlockOffset);
|
||||
return mapping;
|
||||
}
|
||||
#endregion
|
||||
|
||||
// Testing
|
||||
|
||||
#region GetHotelMenuOffset()
|
||||
public int GetHotelMenuOffset()
|
||||
{
|
||||
int off = this.firmwareBlockOffset;
|
||||
for (int i = 6500; i < this.FirmwareBlockSize - 3; i++)
|
||||
{
|
||||
if (BitConverter.ToUInt32(this.fileContent, off + i) == 0x05000101) // 1,1,0,5
|
||||
{
|
||||
for (int j = 5; j < 20; j++) // backtrack to find Volume/MaxVolue pattern
|
||||
{
|
||||
if (fileContent[off + i - j] == 101 && fileContent[off + i - j - 6] == 100)
|
||||
// check for Volume/MaxVolue to be 101/100
|
||||
return i - j - 15;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endregion
|
||||
|
||||
internal int ACTChannelLength { get { return this.actChannelSize; } }
|
||||
internal bool HasDvbs { get { return dvbsBlockOffset != 0; } }
|
||||
internal int SatChannelLength { get { return satConfig != null ? satConfig.dvbsChannelLength : 0; } }
|
||||
internal bool SatSymbolRateDiv2 { get { return this.isDvbsSymbolRateDiv2; } }
|
||||
internal int FirmwareBlockSize { get { return this.firmwareBlockSize; } }
|
||||
}
|
||||
}
|
||||
221
ChanSort.Loader.TllFile/TllFileSerializer.sql.cs
Normal file
221
ChanSort.Loader.TllFile/TllFileSerializer.sql.cs
Normal file
@@ -0,0 +1,221 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Data.SqlClient;
|
||||
using System.Text;
|
||||
using ChanSort.Api;
|
||||
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
/// <summary>
|
||||
/// For research purposes this class writes DVB-S channel information into a database
|
||||
/// It is not used for production.
|
||||
/// </summary>
|
||||
public partial class TllFileSerializer
|
||||
{
|
||||
#region SQL (create table)
|
||||
|
||||
/*
|
||||
|
||||
create table list (
|
||||
listid int not null,
|
||||
filename varchar(100),
|
||||
created datetime,
|
||||
primary key (listid))
|
||||
|
||||
create table channel (
|
||||
listid int not null,
|
||||
slot int not null,
|
||||
isdel bit not null,
|
||||
seq int,
|
||||
progmask int not null,
|
||||
prognr int not null,
|
||||
name varchar(40) not null,
|
||||
tpnr int not null,
|
||||
satnr int,
|
||||
onid int not null,
|
||||
tsid int not null,
|
||||
ssid int not null,
|
||||
uid varchar(25),
|
||||
favcrypt int,
|
||||
lockskiphide int,
|
||||
progfix int,
|
||||
primary key (listid, slot))
|
||||
|
||||
create table chanseq(
|
||||
listid int not null,
|
||||
seq int not null,
|
||||
slot int not null,
|
||||
primary key (listid, seq))
|
||||
|
||||
|
||||
update channel
|
||||
set seq=s.seq
|
||||
from channel c inner join chanseq s on s.listid=c.listid and s.slot=c.slot
|
||||
|
||||
|
||||
*/
|
||||
#endregion
|
||||
|
||||
#region StoreToDatabase()
|
||||
private void StoreToDatabase()
|
||||
{
|
||||
if (this.dvbsBlockSize == 0)
|
||||
return;
|
||||
|
||||
var list = this.DataRoot.GetChannelList(SignalSource.DvbS, SignalType.Tv, false);
|
||||
if (list == null)
|
||||
return;
|
||||
|
||||
using (var conn = SqlClientFactory.Instance.CreateConnection())
|
||||
{
|
||||
conn.ConnectionString = "server=(local);database=ChanSort;Integrated Security=true";
|
||||
conn.Open();
|
||||
|
||||
using (var cmd = conn.CreateCommand())
|
||||
{
|
||||
var listId = InsertListData(cmd);
|
||||
|
||||
InsertChannelLinkedList(cmd, listId);
|
||||
InsertChannelData(cmd, listId);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region InsertListData()
|
||||
private int InsertListData(DbCommand cmd)
|
||||
{
|
||||
cmd.CommandText = "select max(listid) from list";
|
||||
var maxObj = cmd.ExecuteScalar();
|
||||
int listId = maxObj == DBNull.Value ? 1 : (int) maxObj + 1;
|
||||
|
||||
cmd.CommandText = "insert into list(listid, filename, created) values (" + listId + ", @filename, getdate())";
|
||||
var parm = cmd.CreateParameter();
|
||||
parm.ParameterName = "@filename";
|
||||
parm.DbType = DbType.String;
|
||||
parm.Value = this.FileName;
|
||||
cmd.Parameters.Add(parm);
|
||||
cmd.ExecuteNonQuery();
|
||||
return listId;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region InsertChannelLinkedList()
|
||||
private void InsertChannelLinkedList(DbCommand cmd, int listId)
|
||||
{
|
||||
cmd.Parameters.Clear();
|
||||
cmd.CommandText = "insert into chanseq(listid,seq,slot) values (" + listId + ",@seq,@slot)";
|
||||
var pSeq = cmd.CreateParameter();
|
||||
pSeq.ParameterName = "@seq";
|
||||
pSeq.DbType = DbType.Int32;
|
||||
cmd.Parameters.Add(pSeq);
|
||||
var pSlot = cmd.CreateParameter();
|
||||
pSlot.ParameterName = "@slot";
|
||||
pSlot.DbType = DbType.Int32;
|
||||
cmd.Parameters.Add(pSlot);
|
||||
|
||||
SatChannelListHeader header = new SatChannelListHeader(this.fileContent,
|
||||
this.dvbsBlockOffset + this.satConfig.ChannelListHeaderOffset);
|
||||
int seq = 0;
|
||||
int tableIndex = header.LinkedListStartIndex;
|
||||
int linkedListOffset = this.satConfig.SequenceTableOffset;
|
||||
while (tableIndex != 0xFFFF)
|
||||
{
|
||||
int entryOffset = linkedListOffset + tableIndex * satConfig.sizeOfChannelLinkedListEntry;
|
||||
pSeq.Value = seq;
|
||||
if (BitConverter.ToInt16(this.fileContent, entryOffset + 4) != tableIndex)
|
||||
break;
|
||||
pSlot.Value = tableIndex;
|
||||
cmd.ExecuteNonQuery();
|
||||
|
||||
tableIndex = BitConverter.ToInt16(this.fileContent, entryOffset + 2);
|
||||
++seq;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region InsertChannelData()
|
||||
private void InsertChannelData(DbCommand cmd, int listId)
|
||||
{
|
||||
PrepareChannelInsert(cmd);
|
||||
|
||||
DvbStringDecoder decoder = new DvbStringDecoder(this.DefaultEncoding);
|
||||
DataMapping dvbsMapping = this.dvbsMappings.GetMapping(this.dvbsBlockSize);
|
||||
dvbsMapping.SetDataPtr(this.fileContent, this.dvbsBlockOffset + this.satConfig.ChannelListOffset);
|
||||
for (int slot = 0; slot < this.dvbsChannelCount; slot++)
|
||||
{
|
||||
cmd.Parameters["@listid"].Value = listId;
|
||||
cmd.Parameters["@slot"].Value = slot;
|
||||
cmd.Parameters["@seq"].Value = DBNull.Value;
|
||||
cmd.Parameters["@isdel"].Value = dvbsMapping.GetFlag("InUse") ? 0 : 1;
|
||||
cmd.Parameters["@progmask"].Value = dvbsMapping.GetWord("offProgramNr");
|
||||
cmd.Parameters["@prognr"].Value = dvbsMapping.GetWord("offProgramNr") & 0x3FFF;
|
||||
cmd.Parameters["@progfix"].Value = dvbsMapping.GetWord("offProgramNrPreset");
|
||||
int absNameOffset = dvbsMapping.BaseOffset + dvbsMapping.GetOffsets("offName")[0];
|
||||
string longName, shortName;
|
||||
decoder.GetChannelNames(fileContent, absNameOffset, dvbsMapping.GetByte("offNameLength"), out longName, out shortName);
|
||||
cmd.Parameters["@name"].Value = longName;
|
||||
cmd.Parameters["@tpnr"].Value = dvbsMapping.GetWord("offTransponderIndex");
|
||||
var transp = this.DataRoot.Transponder.TryGet(dvbsMapping.GetWord("offTransponderIndex"));
|
||||
cmd.Parameters["@satnr"].Value = transp == null ? (object)DBNull.Value : transp.Satellite.Id;
|
||||
cmd.Parameters["@onid"].Value = transp == null ? (object)DBNull.Value : transp.OriginalNetworkId;
|
||||
cmd.Parameters["@tsid"].Value = transp == null ? (object)DBNull.Value : transp.TransportStreamId;
|
||||
cmd.Parameters["@ssid"].Value = (int)dvbsMapping.GetWord("offServiceId");
|
||||
cmd.Parameters["@uid"].Value = transp == null
|
||||
? (object) DBNull.Value
|
||||
: transp.TransportStreamId + "-" + transp.OriginalNetworkId + "-" +
|
||||
dvbsMapping.GetWord("offServiceId");
|
||||
cmd.Parameters["@favcrypt"].Value = (int)dvbsMapping.GetByte("offFavorites");
|
||||
cmd.Parameters["@lockskiphide"].Value = (int)dvbsMapping.GetByte("offLock");
|
||||
cmd.ExecuteNonQuery();
|
||||
dvbsMapping.BaseOffset += this.satConfig.dvbsChannelLength;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region PrepareChannelInsert()
|
||||
private static void PrepareChannelInsert(DbCommand cmd)
|
||||
{
|
||||
var cols = new[] { "listid", "slot", "seq", "isdel", "progmask", "prognr", "progfix", "name", "tpnr", "satnr", "onid", "tsid", "ssid", "uid", "favcrypt", "lockskiphide" };
|
||||
|
||||
cmd.Parameters.Clear();
|
||||
|
||||
var sb = new StringBuilder();
|
||||
sb.Append("insert into channel (");
|
||||
var comma = "";
|
||||
foreach (var col in cols)
|
||||
{
|
||||
sb.Append(comma).Append(col);
|
||||
comma = ",";
|
||||
}
|
||||
sb.Append(") values (");
|
||||
comma = "";
|
||||
foreach (var col in cols)
|
||||
{
|
||||
sb.Append(comma).Append('@').Append(col);
|
||||
comma = ",";
|
||||
}
|
||||
sb.Append(")");
|
||||
cmd.CommandText = sb.ToString();
|
||||
|
||||
foreach (var col in cols)
|
||||
{
|
||||
DbParameter parm = cmd.CreateParameter();
|
||||
parm.ParameterName = "@" + col;
|
||||
if (col == "name" || col == "uid")
|
||||
{
|
||||
parm.DbType = DbType.String;
|
||||
parm.Size = 40;
|
||||
}
|
||||
else
|
||||
parm.DbType = DbType.Int32;
|
||||
cmd.Parameters.Add(parm);
|
||||
}
|
||||
|
||||
cmd.Prepare();
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
27
ChanSort.Loader.TllFile/TllFileSerializerPlugin.cs
Normal file
27
ChanSort.Loader.TllFile/TllFileSerializerPlugin.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using System.IO;
|
||||
using ChanSort.Api;
|
||||
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
public class TllFileSerializerPlugin : ISerializerPlugin
|
||||
{
|
||||
private const int MAX_FILE_SIZE = 16*1000*1000;
|
||||
private readonly string ERR_fileTooBig = Resource.TllFileSerializerPlugin_ERR_fileTooBig;
|
||||
|
||||
|
||||
public string PluginName { get { return Resource.TllFileSerializerPlugin_PluginName; } }
|
||||
public string FileFilter { get { return "*.TLL"; } }
|
||||
|
||||
#region CreateSerializer()
|
||||
public SerializerBase CreateSerializer(string inputFile)
|
||||
{
|
||||
long fileSize = new FileInfo(inputFile).Length;
|
||||
if (fileSize > MAX_FILE_SIZE)
|
||||
throw new IOException(string.Format(ERR_fileTooBig, fileSize, MAX_FILE_SIZE));
|
||||
|
||||
return new TllFileSerializer(inputFile);
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
234
ChanSort.Loader.TllFile/TvSettingsForm.Designer.cs
generated
Normal file
234
ChanSort.Loader.TllFile/TvSettingsForm.Designer.cs
generated
Normal file
@@ -0,0 +1,234 @@
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
partial class TvSettingsForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TvSettingsForm));
|
||||
this.grpOption = new DevExpress.XtraEditors.GroupControl();
|
||||
this.cbHbbTv = new DevExpress.XtraEditors.CheckEdit();
|
||||
this.cbCustomCountry = new DevExpress.XtraEditors.CheckEdit();
|
||||
this.comboBoxEdit1 = new DevExpress.XtraEditors.ComboBoxEdit();
|
||||
this.labelControl1 = new DevExpress.XtraEditors.LabelControl();
|
||||
this.btnOk = new DevExpress.XtraEditors.SimpleButton();
|
||||
this.btnCancel = new DevExpress.XtraEditors.SimpleButton();
|
||||
this.grpHotelMode = new DevExpress.XtraEditors.GroupControl();
|
||||
this.labelControl3 = new DevExpress.XtraEditors.LabelControl();
|
||||
this.labelControl2 = new DevExpress.XtraEditors.LabelControl();
|
||||
this.cbDtvUpdate = new DevExpress.XtraEditors.CheckEdit();
|
||||
this.cbHotelMode = new DevExpress.XtraEditors.CheckEdit();
|
||||
this.cbAutoChannelUpdate = new DevExpress.XtraEditors.CheckEdit();
|
||||
this.grpSetup = new DevExpress.XtraEditors.GroupControl();
|
||||
this.grpInformation = new DevExpress.XtraEditors.GroupControl();
|
||||
this.labelControl4 = new DevExpress.XtraEditors.LabelControl();
|
||||
this.lblHotelMenuAutoDetect = new DevExpress.XtraEditors.LabelControl();
|
||||
((System.ComponentModel.ISupportInitialize)(this.grpOption)).BeginInit();
|
||||
this.grpOption.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cbHbbTv.Properties)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cbCustomCountry.Properties)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit1.Properties)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.grpHotelMode)).BeginInit();
|
||||
this.grpHotelMode.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cbDtvUpdate.Properties)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cbHotelMode.Properties)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cbAutoChannelUpdate.Properties)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.grpSetup)).BeginInit();
|
||||
this.grpSetup.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.grpInformation)).BeginInit();
|
||||
this.grpInformation.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// grpOption
|
||||
//
|
||||
this.grpOption.Controls.Add(this.cbHbbTv);
|
||||
this.grpOption.Controls.Add(this.cbCustomCountry);
|
||||
this.grpOption.Controls.Add(this.comboBoxEdit1);
|
||||
this.grpOption.Controls.Add(this.labelControl1);
|
||||
resources.ApplyResources(this.grpOption, "grpOption");
|
||||
this.grpOption.Name = "grpOption";
|
||||
//
|
||||
// cbHbbTv
|
||||
//
|
||||
resources.ApplyResources(this.cbHbbTv, "cbHbbTv");
|
||||
this.cbHbbTv.Name = "cbHbbTv";
|
||||
this.cbHbbTv.Properties.Caption = resources.GetString("cbHbbTv.Properties.Caption");
|
||||
//
|
||||
// cbCustomCountry
|
||||
//
|
||||
resources.ApplyResources(this.cbCustomCountry, "cbCustomCountry");
|
||||
this.cbCustomCountry.Name = "cbCustomCountry";
|
||||
this.cbCustomCountry.Properties.Caption = resources.GetString("cbCustomCountry.Properties.Caption");
|
||||
this.cbCustomCountry.CheckedChanged += new System.EventHandler(this.cbCustomCountry_CheckedChanged);
|
||||
//
|
||||
// comboBoxEdit1
|
||||
//
|
||||
resources.ApplyResources(this.comboBoxEdit1, "comboBoxEdit1");
|
||||
this.comboBoxEdit1.Name = "comboBoxEdit1";
|
||||
this.comboBoxEdit1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
|
||||
new DevExpress.XtraEditors.Controls.EditorButton(((DevExpress.XtraEditors.Controls.ButtonPredefines)(resources.GetObject("comboBoxEdit1.Properties.Buttons"))))});
|
||||
this.comboBoxEdit1.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
|
||||
//
|
||||
// labelControl1
|
||||
//
|
||||
resources.ApplyResources(this.labelControl1, "labelControl1");
|
||||
this.labelControl1.Name = "labelControl1";
|
||||
//
|
||||
// btnOk
|
||||
//
|
||||
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);
|
||||
//
|
||||
// btnCancel
|
||||
//
|
||||
resources.ApplyResources(this.btnCancel, "btnCancel");
|
||||
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnCancel.Name = "btnCancel";
|
||||
//
|
||||
// grpHotelMode
|
||||
//
|
||||
this.grpHotelMode.Controls.Add(this.labelControl3);
|
||||
this.grpHotelMode.Controls.Add(this.labelControl2);
|
||||
this.grpHotelMode.Controls.Add(this.cbDtvUpdate);
|
||||
this.grpHotelMode.Controls.Add(this.cbHotelMode);
|
||||
resources.ApplyResources(this.grpHotelMode, "grpHotelMode");
|
||||
this.grpHotelMode.Name = "grpHotelMode";
|
||||
//
|
||||
// labelControl3
|
||||
//
|
||||
resources.ApplyResources(this.labelControl3, "labelControl3");
|
||||
this.labelControl3.Name = "labelControl3";
|
||||
//
|
||||
// labelControl2
|
||||
//
|
||||
resources.ApplyResources(this.labelControl2, "labelControl2");
|
||||
this.labelControl2.Name = "labelControl2";
|
||||
//
|
||||
// cbDtvUpdate
|
||||
//
|
||||
resources.ApplyResources(this.cbDtvUpdate, "cbDtvUpdate");
|
||||
this.cbDtvUpdate.Name = "cbDtvUpdate";
|
||||
this.cbDtvUpdate.Properties.Caption = resources.GetString("cbDtvUpdate.Properties.Caption");
|
||||
//
|
||||
// cbHotelMode
|
||||
//
|
||||
resources.ApplyResources(this.cbHotelMode, "cbHotelMode");
|
||||
this.cbHotelMode.Name = "cbHotelMode";
|
||||
this.cbHotelMode.Properties.Caption = resources.GetString("cbHotelMode.Properties.Caption");
|
||||
//
|
||||
// cbAutoChannelUpdate
|
||||
//
|
||||
resources.ApplyResources(this.cbAutoChannelUpdate, "cbAutoChannelUpdate");
|
||||
this.cbAutoChannelUpdate.Name = "cbAutoChannelUpdate";
|
||||
this.cbAutoChannelUpdate.Properties.Caption = resources.GetString("cbAutoChannelUpdate.Properties.Caption");
|
||||
//
|
||||
// grpSetup
|
||||
//
|
||||
this.grpSetup.Controls.Add(this.cbAutoChannelUpdate);
|
||||
resources.ApplyResources(this.grpSetup, "grpSetup");
|
||||
this.grpSetup.Name = "grpSetup";
|
||||
//
|
||||
// grpInformation
|
||||
//
|
||||
this.grpInformation.Controls.Add(this.labelControl4);
|
||||
resources.ApplyResources(this.grpInformation, "grpInformation");
|
||||
this.grpInformation.Name = "grpInformation";
|
||||
//
|
||||
// labelControl4
|
||||
//
|
||||
resources.ApplyResources(this.labelControl4, "labelControl4");
|
||||
this.labelControl4.Name = "labelControl4";
|
||||
//
|
||||
// lblHotelMenuAutoDetect
|
||||
//
|
||||
resources.ApplyResources(this.lblHotelMenuAutoDetect, "lblHotelMenuAutoDetect");
|
||||
this.lblHotelMenuAutoDetect.Appearance.ForeColor = ((System.Drawing.Color)(resources.GetObject("labelControl5.Appearance.ForeColor")));
|
||||
this.lblHotelMenuAutoDetect.Name = "lblHotelMenuAutoDetect";
|
||||
this.lblHotelMenuAutoDetect.Click += new System.EventHandler(this.lblHotelMenuAutoDetect_Click);
|
||||
//
|
||||
// TvSettingsForm
|
||||
//
|
||||
this.AcceptButton = this.btnOk;
|
||||
this.Appearance.Options.UseBackColor = true;
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnCancel;
|
||||
this.Controls.Add(this.lblHotelMenuAutoDetect);
|
||||
this.Controls.Add(this.grpHotelMode);
|
||||
this.Controls.Add(this.btnCancel);
|
||||
this.Controls.Add(this.btnOk);
|
||||
this.Controls.Add(this.grpOption);
|
||||
this.Controls.Add(this.grpSetup);
|
||||
this.Controls.Add(this.grpInformation);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "TvSettingsForm";
|
||||
this.Load += new System.EventHandler(this.TvSettingsForm_Load);
|
||||
((System.ComponentModel.ISupportInitialize)(this.grpOption)).EndInit();
|
||||
this.grpOption.ResumeLayout(false);
|
||||
this.grpOption.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cbHbbTv.Properties)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cbCustomCountry.Properties)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit1.Properties)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.grpHotelMode)).EndInit();
|
||||
this.grpHotelMode.ResumeLayout(false);
|
||||
this.grpHotelMode.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cbDtvUpdate.Properties)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cbHotelMode.Properties)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cbAutoChannelUpdate.Properties)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.grpSetup)).EndInit();
|
||||
this.grpSetup.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.grpInformation)).EndInit();
|
||||
this.grpInformation.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private DevExpress.XtraEditors.GroupControl grpOption;
|
||||
private DevExpress.XtraEditors.ComboBoxEdit comboBoxEdit1;
|
||||
private DevExpress.XtraEditors.LabelControl labelControl1;
|
||||
private DevExpress.XtraEditors.SimpleButton btnOk;
|
||||
private DevExpress.XtraEditors.SimpleButton btnCancel;
|
||||
private DevExpress.XtraEditors.CheckEdit cbCustomCountry;
|
||||
private DevExpress.XtraEditors.GroupControl grpHotelMode;
|
||||
private DevExpress.XtraEditors.CheckEdit cbHbbTv;
|
||||
private DevExpress.XtraEditors.CheckEdit cbDtvUpdate;
|
||||
private DevExpress.XtraEditors.CheckEdit cbHotelMode;
|
||||
private DevExpress.XtraEditors.CheckEdit cbAutoChannelUpdate;
|
||||
private DevExpress.XtraEditors.GroupControl grpSetup;
|
||||
private DevExpress.XtraEditors.LabelControl labelControl3;
|
||||
private DevExpress.XtraEditors.LabelControl labelControl2;
|
||||
private DevExpress.XtraEditors.GroupControl grpInformation;
|
||||
private DevExpress.XtraEditors.LabelControl labelControl4;
|
||||
private DevExpress.XtraEditors.LabelControl lblHotelMenuAutoDetect;
|
||||
}
|
||||
}
|
||||
84
ChanSort.Loader.TllFile/TvSettingsForm.cs
Normal file
84
ChanSort.Loader.TllFile/TvSettingsForm.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
using System;
|
||||
using DevExpress.XtraEditors;
|
||||
using DevExpress.XtraEditors.Controls;
|
||||
|
||||
namespace ChanSort.Loader.TllFile
|
||||
{
|
||||
public partial class TvSettingsForm : XtraForm
|
||||
{
|
||||
private readonly TllFileSerializer tvSerializer;
|
||||
|
||||
public TvSettingsForm(TllFileSerializer tvSerializer)
|
||||
{
|
||||
this.tvSerializer = tvSerializer;
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void TvSettingsForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
var items = tvSerializer.SupportedTvCountryCodes;
|
||||
foreach(var item in items)
|
||||
this.comboBoxEdit1.Properties.Items.Add(item);
|
||||
this.comboBoxEdit1.Text = this.tvSerializer.TvCountryCode;
|
||||
|
||||
var mapping = this.tvSerializer.GetFirmwareMapping();
|
||||
if (mapping != null)
|
||||
{
|
||||
this.grpInformation.Visible = false;
|
||||
this.Height -= this.grpInformation.Height;
|
||||
}
|
||||
|
||||
if (mapping == null || !mapping.SupportsAutoChannelUpdate)
|
||||
{
|
||||
this.grpSetup.Visible = false;
|
||||
this.Height -= this.grpSetup.Height;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.cbAutoChannelUpdate.Checked = mapping.SettingsAutomaticChannelUpdate;
|
||||
}
|
||||
|
||||
if (mapping == null || !mapping.SupportsHbbTv)
|
||||
this.cbHbbTv.Enabled = false;
|
||||
else
|
||||
this.cbHbbTv.Checked = mapping.HbbTvEnabled;
|
||||
|
||||
if (mapping == null || !mapping.SupportsHotelMenu)
|
||||
{
|
||||
this.grpHotelMode.Visible = false;
|
||||
this.Height -= this.grpHotelMode.Height;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.cbHotelMode.Checked = mapping.HotelModeEnabled;
|
||||
this.cbDtvUpdate.Checked = mapping.HotelModeDtvUpdate;
|
||||
}
|
||||
}
|
||||
|
||||
private void btnOk_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.tvSerializer.TvCountryCode = this.comboBoxEdit1.Text;
|
||||
|
||||
var mapping = this.tvSerializer.GetFirmwareMapping();
|
||||
if (mapping != null)
|
||||
{
|
||||
mapping.SettingsAutomaticChannelUpdate = this.cbAutoChannelUpdate.Checked;
|
||||
mapping.HbbTvEnabled = this.cbHbbTv.Checked;
|
||||
mapping.HotelModeEnabled = this.cbHotelMode.Checked;
|
||||
mapping.HotelModeDtvUpdate = this.cbDtvUpdate.Checked;
|
||||
}
|
||||
}
|
||||
|
||||
private void cbCustomCountry_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.comboBoxEdit1.Properties.TextEditStyle = this.cbCustomCountry.Checked
|
||||
? TextEditStyles.Standard
|
||||
: TextEditStyles.DisableTextEditor;
|
||||
}
|
||||
|
||||
private void lblHotelMenuAutoDetect_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.lblHotelMenuAutoDetect.Text = this.tvSerializer.GetHotelMenuOffset().ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
325
ChanSort.Loader.TllFile/TvSettingsForm.de.resx
Normal file
325
ChanSort.Loader.TllFile/TvSettingsForm.de.resx
Normal file
@@ -0,0 +1,325 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="cbHbbTv.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbHbbTv.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="cbHbbTv.Properties.AutoHeight" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="cbHbbTv.Properties.Caption" xml:space="preserve">
|
||||
<value>HbbTV aktivieren (funktioniert nur mit den Ländereinstellungen DEU, FRA, NED und ESP)</value>
|
||||
</data>
|
||||
<data name="cbHbbTv.Properties.DisplayValueChecked" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbHbbTv.Properties.DisplayValueGrayed" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbHbbTv.Properties.DisplayValueUnchecked" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbCustomCountry.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbCustomCountry.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbCustomCountry.Properties.AutoHeight" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="cbCustomCountry.Properties.Caption" xml:space="preserve">
|
||||
<value>Eigene Werte erlauben (auf eigene Gefahr!)</value>
|
||||
</data>
|
||||
<data name="cbCustomCountry.Properties.DisplayValueChecked" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbCustomCountry.Properties.DisplayValueGrayed" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbCustomCountry.Properties.DisplayValueUnchecked" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="comboBoxEdit1.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="comboBoxEdit1.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="comboBoxEdit1.Properties.AutoHeight" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="comboBoxEdit1.Properties.NullValuePrompt" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="comboBoxEdit1.Properties.NullValuePromptShowForEmptyValue" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="labelControl1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>27, 13</value>
|
||||
</data>
|
||||
<data name="labelControl1.Text" xml:space="preserve">
|
||||
<value>Land:</value>
|
||||
</data>
|
||||
<data name="grpSettings.Text" xml:space="preserve">
|
||||
<value>OPTION Menü</value>
|
||||
</data>
|
||||
<data name="btnCancel.Text" xml:space="preserve">
|
||||
<value>Abbrechen</value>
|
||||
</data>
|
||||
<data name="labelControl3.Text" xml:space="preserve">
|
||||
<value>HINWEIS: Bei aktivem Hotel-Modus kann man in der EPG nicht zum gewählten Sender wechseln und die Funktion "Werkseinstellungen" ist gesperrt.</value>
|
||||
</data>
|
||||
<data name="labelControl2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>341, 13</value>
|
||||
</data>
|
||||
<data name="labelControl2.Text" xml:space="preserve">
|
||||
<value>Die folgenden Einstellungen funktionieren nur bei aktivem Hotel-Modus:</value>
|
||||
</data>
|
||||
<data name="cbDtvUpdate.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbDtvUpdate.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbDtvUpdate.Properties.AutoHeight" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="cbDtvUpdate.Properties.Caption" xml:space="preserve">
|
||||
<value>D-TV Senderliste automatisch aktualisieren (empfohlen: AUS)</value>
|
||||
</data>
|
||||
<data name="cbDtvUpdate.Properties.DisplayValueChecked" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbDtvUpdate.Properties.DisplayValueGrayed" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbDtvUpdate.Properties.DisplayValueUnchecked" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbHotelMode.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbHotelMode.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbHotelMode.Properties.AutoHeight" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="cbHotelMode.Properties.Caption" xml:space="preserve">
|
||||
<value>Hotel Modus aktivieren (empfohlen: EIN)</value>
|
||||
</data>
|
||||
<data name="cbHotelMode.Properties.DisplayValueChecked" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbHotelMode.Properties.DisplayValueGrayed" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbHotelMode.Properties.DisplayValueUnchecked" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="grpHotelMode.Text" xml:space="preserve">
|
||||
<value>Hotel Modus</value>
|
||||
</data>
|
||||
<data name="cbAutoChannelUpdate.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbAutoChannelUpdate.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbAutoChannelUpdate.Properties.AutoHeight" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="cbAutoChannelUpdate.Properties.Caption" xml:space="preserve">
|
||||
<value>Senderliste automatisch aktualisieren (empfohlen: AUS)</value>
|
||||
</data>
|
||||
<data name="cbAutoChannelUpdate.Properties.DisplayValueChecked" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbAutoChannelUpdate.Properties.DisplayValueGrayed" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="cbAutoChannelUpdate.Properties.DisplayValueUnchecked" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="groupControl1.Text" xml:space="preserve">
|
||||
<value>EINST. Menü</value>
|
||||
</data>
|
||||
<data name="labelControl4.Text" xml:space="preserve">
|
||||
<value>Das Dateiformat Ihres TV-Modells wird nicht vollständig unterstützt. Deshalb sind viele Einstellungen in diesem Dialog gesperrt.</value>
|
||||
</data>
|
||||
<data name="textEdit1.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="textEdit1.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="textEdit1.Properties.AutoHeight" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
||||
<data name="textEdit1.Properties.Mask.AutoComplete" type="DevExpress.XtraEditors.Mask.AutoCompleteType, DevExpress.XtraEditors.v12.2">
|
||||
<value>Default</value>
|
||||
</data>
|
||||
<data name="textEdit1.Properties.Mask.BeepOnError" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="textEdit1.Properties.Mask.EditMask" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="textEdit1.Properties.Mask.IgnoreMaskBlank" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="textEdit1.Properties.Mask.MaskType" type="DevExpress.XtraEditors.Mask.MaskType, DevExpress.XtraEditors.v12.2">
|
||||
<value>None</value>
|
||||
</data>
|
||||
<data name="textEdit1.Properties.Mask.PlaceHolder" type="System.Char, mscorlib" xml:space="preserve">
|
||||
<value>_</value>
|
||||
</data>
|
||||
<data name="textEdit1.Properties.Mask.SaveLiteral" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="textEdit1.Properties.Mask.ShowPlaceHolders" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="textEdit1.Properties.Mask.UseMaskAsDisplayFormat" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="textEdit1.Properties.NullValuePrompt" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name="textEdit1.Properties.NullValuePromptShowForEmptyValue" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="TvSettingsForm.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
|
||||
<value>Horizontal</value>
|
||||
</data>
|
||||
<data name="TvSettingsForm.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>TV Einstellungen</value>
|
||||
</data>
|
||||
</root>
|
||||
599
ChanSort.Loader.TllFile/TvSettingsForm.resx
Normal file
599
ChanSort.Loader.TllFile/TvSettingsForm.resx
Normal file
@@ -0,0 +1,599 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="cbHbbTv.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="cbHbbTv.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 64</value>
|
||||
</data>
|
||||
<data name="cbHbbTv.Properties.Caption" xml:space="preserve">
|
||||
<value>Enable HbbTV (only works with country settings DEU, FRA, NED and ESP)</value>
|
||||
</data>
|
||||
<data name="cbHbbTv.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>456, 19</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="cbHbbTv.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>cbHbbTv.Name" xml:space="preserve">
|
||||
<value>cbHbbTv</value>
|
||||
</data>
|
||||
<data name=">>cbHbbTv.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>cbHbbTv.Parent" xml:space="preserve">
|
||||
<value>grpOption</value>
|
||||
</data>
|
||||
<data name=">>cbHbbTv.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="cbCustomCountry.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="cbCustomCountry.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>150, 30</value>
|
||||
</data>
|
||||
<data name="cbCustomCountry.Properties.Caption" xml:space="preserve">
|
||||
<value>allow custom value (at your own risk!)</value>
|
||||
</data>
|
||||
<data name="cbCustomCountry.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>320, 19</value>
|
||||
</data>
|
||||
<data name="cbCustomCountry.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>cbCustomCountry.Name" xml:space="preserve">
|
||||
<value>cbCustomCountry</value>
|
||||
</data>
|
||||
<data name=">>cbCustomCountry.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>cbCustomCountry.Parent" xml:space="preserve">
|
||||
<value>grpOption</value>
|
||||
</data>
|
||||
<data name=">>cbCustomCountry.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="comboBoxEdit1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>72, 29</value>
|
||||
</data>
|
||||
<assembly alias="DevExpress.Utils.v12.2" name="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
||||
<data name="comboBoxEdit1.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v12.2">
|
||||
<value>Combo</value>
|
||||
</data>
|
||||
<data name="comboBoxEdit1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>72, 20</value>
|
||||
</data>
|
||||
<data name="comboBoxEdit1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>comboBoxEdit1.Name" xml:space="preserve">
|
||||
<value>comboBoxEdit1</value>
|
||||
</data>
|
||||
<data name=">>comboBoxEdit1.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>comboBoxEdit1.Parent" xml:space="preserve">
|
||||
<value>grpOption</value>
|
||||
</data>
|
||||
<data name=">>comboBoxEdit1.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="labelControl1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 32</value>
|
||||
</data>
|
||||
<data name="labelControl1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>43, 13</value>
|
||||
</data>
|
||||
<data name="labelControl1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelControl1.Text" xml:space="preserve">
|
||||
<value>Country:</value>
|
||||
</data>
|
||||
<data name=">>labelControl1.Name" xml:space="preserve">
|
||||
<value>labelControl1</value>
|
||||
</data>
|
||||
<data name=">>labelControl1.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>labelControl1.Parent" xml:space="preserve">
|
||||
<value>grpOption</value>
|
||||
</data>
|
||||
<data name=">>labelControl1.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="grpOption.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="grpOption.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 142</value>
|
||||
</data>
|
||||
<data name="grpOption.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>480, 106</value>
|
||||
</data>
|
||||
<data name="grpOption.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="grpOption.Text" xml:space="preserve">
|
||||
<value>OPTION Menu</value>
|
||||
</data>
|
||||
<data name=">>grpOption.Name" xml:space="preserve">
|
||||
<value>grpOption</value>
|
||||
</data>
|
||||
<data name=">>grpOption.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>grpOption.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>grpOption.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="btnOk.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="btnOk.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>310, 413</value>
|
||||
</data>
|
||||
<data name="btnOk.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnOk.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="btnOk.Text" xml:space="preserve">
|
||||
<value>Ok</value>
|
||||
</data>
|
||||
<data name=">>btnOk.Name" xml:space="preserve">
|
||||
<value>btnOk</value>
|
||||
</data>
|
||||
<data name=">>btnOk.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>btnOk.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>btnOk.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="btnCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Right</value>
|
||||
</data>
|
||||
<data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>395, 413</value>
|
||||
</data>
|
||||
<data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="btnCancel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="btnCancel.Text" xml:space="preserve">
|
||||
<value>Cancel</value>
|
||||
</data>
|
||||
<data name=">>btnCancel.Name" xml:space="preserve">
|
||||
<value>btnCancel</value>
|
||||
</data>
|
||||
<data name=">>btnCancel.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>btnCancel.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>btnCancel.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
|
||||
<data name="labelControl3.AutoSizeMode" type="DevExpress.XtraEditors.LabelAutoSizeMode, DevExpress.XtraEditors.v12.2">
|
||||
<value>Vertical</value>
|
||||
</data>
|
||||
<data name="labelControl3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 26</value>
|
||||
</data>
|
||||
<data name="labelControl3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>458, 26</value>
|
||||
</data>
|
||||
<data name="labelControl3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="labelControl3.Text" xml:space="preserve">
|
||||
<value>NOTE: When Hotel Mode is active, you can no longer activate a channel from inside the EPG and the "Factory Reset" function becomes disabled.</value>
|
||||
</data>
|
||||
<data name=">>labelControl3.Name" xml:space="preserve">
|
||||
<value>labelControl3</value>
|
||||
</data>
|
||||
<data name=">>labelControl3.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>labelControl3.Parent" xml:space="preserve">
|
||||
<value>grpHotelMode</value>
|
||||
</data>
|
||||
<data name=">>labelControl3.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="labelControl2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>41, 93</value>
|
||||
</data>
|
||||
<data name="labelControl2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>315, 13</value>
|
||||
</data>
|
||||
<data name="labelControl2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="labelControl2.Text" xml:space="preserve">
|
||||
<value>The settings below are only effective when Hotel Mode is enabled</value>
|
||||
</data>
|
||||
<data name=">>labelControl2.Name" xml:space="preserve">
|
||||
<value>labelControl2</value>
|
||||
</data>
|
||||
<data name=">>labelControl2.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>labelControl2.Parent" xml:space="preserve">
|
||||
<value>grpHotelMode</value>
|
||||
</data>
|
||||
<data name=">>labelControl2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="cbDtvUpdate.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="cbDtvUpdate.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>39, 112</value>
|
||||
</data>
|
||||
<data name="cbDtvUpdate.Properties.Caption" xml:space="preserve">
|
||||
<value>Automatic D-TV channel update (recommended: OFF)</value>
|
||||
</data>
|
||||
<data name="cbDtvUpdate.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>431, 19</value>
|
||||
</data>
|
||||
<data name="cbDtvUpdate.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>cbDtvUpdate.Name" xml:space="preserve">
|
||||
<value>cbDtvUpdate</value>
|
||||
</data>
|
||||
<data name=">>cbDtvUpdate.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>cbDtvUpdate.Parent" xml:space="preserve">
|
||||
<value>grpHotelMode</value>
|
||||
</data>
|
||||
<data name=">>cbDtvUpdate.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="cbHotelMode.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="cbHotelMode.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>10, 58</value>
|
||||
</data>
|
||||
<data name="cbHotelMode.Properties.Caption" xml:space="preserve">
|
||||
<value>Enable Hotel Mode (recommended: ON)</value>
|
||||
</data>
|
||||
<data name="cbHotelMode.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>456, 19</value>
|
||||
</data>
|
||||
<data name="cbHotelMode.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>cbHotelMode.Name" xml:space="preserve">
|
||||
<value>cbHotelMode</value>
|
||||
</data>
|
||||
<data name=">>cbHotelMode.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>cbHotelMode.Parent" xml:space="preserve">
|
||||
<value>grpHotelMode</value>
|
||||
</data>
|
||||
<data name=">>cbHotelMode.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="grpHotelMode.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="grpHotelMode.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 248</value>
|
||||
</data>
|
||||
<data name="grpHotelMode.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>480, 151</value>
|
||||
</data>
|
||||
<data name="grpHotelMode.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="grpHotelMode.Text" xml:space="preserve">
|
||||
<value>Hotel Mode</value>
|
||||
</data>
|
||||
<data name=">>grpHotelMode.Name" xml:space="preserve">
|
||||
<value>grpHotelMode</value>
|
||||
</data>
|
||||
<data name=">>grpHotelMode.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>grpHotelMode.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>grpHotelMode.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="cbAutoChannelUpdate.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="cbAutoChannelUpdate.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 35</value>
|
||||
</data>
|
||||
<data name="cbAutoChannelUpdate.Properties.Caption" xml:space="preserve">
|
||||
<value>Automatic Channel Update (recommended: OFF)</value>
|
||||
</data>
|
||||
<data name="cbAutoChannelUpdate.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>456, 19</value>
|
||||
</data>
|
||||
<data name="cbAutoChannelUpdate.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>cbAutoChannelUpdate.Name" xml:space="preserve">
|
||||
<value>cbAutoChannelUpdate</value>
|
||||
</data>
|
||||
<data name=">>cbAutoChannelUpdate.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>cbAutoChannelUpdate.Parent" xml:space="preserve">
|
||||
<value>grpSetup</value>
|
||||
</data>
|
||||
<data name=">>cbAutoChannelUpdate.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="grpSetup.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="grpSetup.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 71</value>
|
||||
</data>
|
||||
<data name="grpSetup.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>480, 71</value>
|
||||
</data>
|
||||
<data name="grpSetup.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="grpSetup.Text" xml:space="preserve">
|
||||
<value>SETUP Menu</value>
|
||||
</data>
|
||||
<data name=">>grpSetup.Name" xml:space="preserve">
|
||||
<value>grpSetup</value>
|
||||
</data>
|
||||
<data name=">>grpSetup.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>grpSetup.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>grpSetup.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="labelControl4.AutoSizeMode" type="DevExpress.XtraEditors.LabelAutoSizeMode, DevExpress.XtraEditors.v12.2">
|
||||
<value>Vertical</value>
|
||||
</data>
|
||||
<data name="labelControl4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>11, 29</value>
|
||||
</data>
|
||||
<data name="labelControl4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>458, 26</value>
|
||||
</data>
|
||||
<data name="labelControl4.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="labelControl4.Text" xml:space="preserve">
|
||||
<value>Your TV model's TLL file format is not fully supported. Therefore many features in this dialog are disabled.</value>
|
||||
</data>
|
||||
<data name=">>labelControl4.Name" xml:space="preserve">
|
||||
<value>labelControl4</value>
|
||||
</data>
|
||||
<data name=">>labelControl4.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>labelControl4.Parent" xml:space="preserve">
|
||||
<value>grpInformation</value>
|
||||
</data>
|
||||
<data name=">>labelControl4.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="grpInformation.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="grpInformation.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="grpInformation.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>480, 71</value>
|
||||
</data>
|
||||
<data name="grpInformation.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="grpInformation.Text" xml:space="preserve">
|
||||
<value>Information</value>
|
||||
</data>
|
||||
<data name=">>grpInformation.Name" xml:space="preserve">
|
||||
<value>grpInformation</value>
|
||||
</data>
|
||||
<data name=">>grpInformation.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>grpInformation.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>grpInformation.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="lblHotelMenuAutoDetect.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="labelControl5.Appearance.ForeColor" type="System.Drawing.Color, System.Drawing">
|
||||
<value>LightGray</value>
|
||||
</data>
|
||||
<data name="lblHotelMenuAutoDetect.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>11, 422</value>
|
||||
</data>
|
||||
<data name="lblHotelMenuAutoDetect.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>117, 13</value>
|
||||
</data>
|
||||
<data name="lblHotelMenuAutoDetect.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="lblHotelMenuAutoDetect.Text" xml:space="preserve">
|
||||
<value>Auto-Detect Hotel-Menu</value>
|
||||
</data>
|
||||
<data name=">>lblHotelMenuAutoDetect.Name" xml:space="preserve">
|
||||
<value>lblHotelMenuAutoDetect</value>
|
||||
</data>
|
||||
<data name=">>lblHotelMenuAutoDetect.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
<data name=">>lblHotelMenuAutoDetect.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>lblHotelMenuAutoDetect.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 13</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>480, 448</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterParent</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>TV Settings</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>TvSettingsForm</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
</data>
|
||||
</root>
|
||||
Reference in New Issue
Block a user