- improved IniFile and Mapping to better handle missing settings

- working on philips *.db/FLASH* file format (identified 3 different variations so far)
This commit is contained in:
Horst Beham
2021-09-15 10:59:05 +02:00
parent 44749acaf0
commit ece2cd7e66
15 changed files with 968 additions and 354 deletions

View File

@@ -15,36 +15,36 @@ struct SHeader
struct SChannel_fta
{
uint32 curProgNr;
uint32 u1;
uint8 u2[8];
uint32 favNr;
uint32 curProgNr;
uint32 u1;
uint8 u2[8];
uint32 favNr;
char chName1[200];
uint16 u3;
uint8 u3b[208];
uint8 u3c[2];
uint16 u3d;
uint8 u4[10];
uint32 freqInMhz1;
//uint16 u5;
uint16 u6;
uint16 symRate;
uint32 oldProgNr;
uint32 channelIndex;
uint16 tsid;
uint16 u7;
uint16 sid;
uint16 onid;
uint16 freqInMhz2;
uint8 padding[6];
uint16 u3;
uint8 u3b[208];
uint8 u3c[2];
uint16 u3d;
uint8 u4[10];
uint32 freqInMhz1;
//uint16 u5;
uint16 u6;
uint16 symRate;
uint32 oldProgNr;
uint32 channelIndex;
uint16 tsid;
uint16 u7;
uint16 sid;
uint16 onid;
uint16 freqInMhz2;
uint8 padding[6];
};
struct SFooter
{
uint32 numDataBlocks;
uint32 numDataBlockBytes;
uint16 bytesumFrom0;
uint16 u_zero;
uint32 numDataBlocks;
uint32 numDataBlockBytes;
uint16 bytesumFrom0;
uint16 u_zero;
};
#pragma script("get_doc_size.js")
@@ -54,95 +54,127 @@ public struct Philips_mgr_chan_s_fta
var docSize = GetDocumentSize();
char filename[32];
SHeader header;
SHeader header;
var recordCount = header.channelBlockSize / sizeof(SChannel_fta);
var recordCount = header.channelBlockSize / sizeof(SChannel_fta);
SChannel_fta channels[recordCount];
SFooter footer;
SFooter footer;
};
//#########################################################
struct SChannel_pkg
struct SChannel_pkg_476
{
uint32 curProgNr;
uint32 u1;
uint8 u2[8];
uint32 favNr;
uint32 curProgNr;
uint32 u1;
uint8 u2[8];
uint32 favNr;
char chName1[200];
uint16 u3;
uint8 u3b[208];
uint8 u3c[2];
uint16 u3d;
uint8 u4[10];
uint32 freqInMhz1;
//uint16 u5;
uint16 u6;
uint16 symRate;
uint32 oldProgNr;
uint32 channelIndex;
uint16 tsid;
uint16 u7;
uint16 sid;
uint16 onid;
uint16 freqInMhz2;
uint8 padding[10];
uint16 u3;
uint8 u3b[208];
uint8 u3c[2];
uint16 u3d;
uint8 u4[10];
uint32 freqInMhz1;
uint16 u6;
uint16 symRate;
uint32 oldProgNr;
uint32 channelIndex;
uint16 tsid;
uint16 u7;
uint16 sid;
uint16 onid;
uint16 freqInMhz2;
uint8 padding[6];
// some files have this additional size of 4 bytes
//uint8 padding2[4];
};
public struct Philips_mgr_chan_s_pkg
public struct Philips_mgr_chan_s_pkg_476
{
var docSize = GetDocumentSize();
char filename[32];
SHeader header;
SHeader header;
var recordCount = header.channelBlockSize / sizeof(SChannel_pkg_476);
SChannel_pkg_476 channels[recordCount];
SFooter footer;
};
var recordCount = header.channelBlockSize / sizeof(SChannel_pkg);
SChannel_pkg channels[recordCount];
SFooter footer;
struct SChannel_pkg_480
{
uint32 curProgNr;
uint32 u1;
uint8 u2[8];
uint32 favNr;
char chName1[200];
uint16 u3;
uint8 u3b[208];
uint8 u3c[2];
uint16 u3d;
uint8 u4[10];
uint32 freqInMhz1;
uint16 u6;
uint16 symRate;
uint32 oldProgNr;
uint32 channelIndex;
uint16 tsid;
uint16 u7;
uint16 sid;
uint16 onid;
uint16 freqInMhz2;
uint8 padding[6];
// some files have this additional size of 4 bytes
uint8 padding2[4];
};
public struct Philips_mgr_chan_s_pkg_480
{
char filename[32];
SHeader header;
var recordCount = header.channelBlockSize / sizeof(SChannel_pkg_480);
SChannel_pkg_480 channels[recordCount];
SFooter footer;
};
//#########################################################
struct CChannel
{
uint32 curProgNr;
uint32 u1;
uint8 u2[8];
uint32 favNr;
union
{
char chName1[200];
uint32 curProgNr;
uint32 u1;
uint8 u2[8];
uint32 favNr;
union
{
char chName1[200];
#pragma byte_order (BigEndian)
big_endian wchar_t chName2[100];
big_endian wchar_t chName2[100];
#pragma byte_order ()
struct
{
uint8 zero;
wchar_t chName3[99];
uint8 zero2;
} chName4;
} chName;
uint16 u3;
uint16 u3b;
char provider[200];
uint8 u4[16];
uint32 freqInHz;
uint16 u6;
uint16 not_symRate;
uint32 oldProgNr;
uint8 u7[4];
uint32 channelIndex;
uint16 tsid;
uint16 symRate_maybe;
uint16 sid;
uint16 onid;
//uint16 freqInMhz2;
//uint16 u9;
uint32 u10;
struct
{
uint8 zero;
wchar_t chName3[99];
uint8 zero2;
} chName4;
} chName;
uint16 u3;
uint16 u3b;
char provider[200];
uint8 u4[16];
uint32 freqInHz;
uint16 u6;
uint16 not_symRate;
uint32 oldProgNr;
uint8 u7[4];
uint32 channelIndex;
uint16 tsid;
uint16 symRate_maybe;
uint16 sid;
uint16 onid;
//uint16 freqInMhz2;
//uint16 u9;
uint32 u10;
};
@@ -151,75 +183,225 @@ public struct Philips_mgr_chan_dvbt
var docSize = GetDocumentSize();
char filename[32];
SHeader header;
SHeader header;
var recordCount = header.channelBlockSize / sizeof(CChannel);
var recordCount = header.channelBlockSize / sizeof(CChannel);
CChannel channels[recordCount];
SFooter footer;
SFooter footer;
};
#pragma byte_order(LittleEndian)
//*****************************************************************************************
// FLASH files
//*****************************************************************************************
struct ProgNr
{
WORD nr : 14;
WORD flags : 2;
WORD nr : 14;
WORD flags : 2;
};
struct s_channelTransponder
{
struct
{
WORD u1 : 3;
WORD isRadio: 1;
WORD u2 : 1;
WORD transponderId : 11;
} info;
WORD channelId;
};
struct s_transponder
{
WORD id;
BYTE source_maybe;
BYTE satId_maybe;
WORD freqInMhz;
WORD symbolRate;
BYTE u2[2];
WORD onid;
WORD tsid;
WORD nid;
BYTE u3[5];
WORD freqInMhz2;
BYTE u4[8];
// optional:
BYTE u5[5];
};
struct s_satTransponder
{
WORD satId_maybe;
WORD transponderId;
};
struct s_unknown
{
WORD u1;
BYTE u2[2];
DWORD zero;
};
struct s_channel
{
WORD id;
BYTE u1[4];
BYTE u2[2];
WORD sid;
WORD pcrPid;
WORD vpid;
BYTE u3[8];
ProgNr progNr;
BYTE u3b[7];
WORD apid1_maybe;
char lang1[3];
BYTE u4[45];
WORD apid2_maybe;
char lang2[3];
BYTE u5[3];
// optional
BYTE u6[4];
};
struct s_channelBlock
{
char ddtc[4];
s_channel channels[734];
BYTE filler[0x20000-0x1ff32];
};
#define numChannelTransponderMap 5000
#define numSatTransponderMap 1090
#define numTransponder 1100
#define numSatData 4592
#define numUnknown 310*8
public struct Philips_FLASH_DTVINFO_S_FTA
{
char ddtc[4];
var off0 = current_offset;
struct
{
struct
{
WORD u1 : 3;
WORD isRadio: 1;
WORD u2 : 1;
WORD transponderIndex : 11;
} info;
WORD chanIdx;
} chanIndexInfo[(0x5f2c - off0)/4];
off0 = current_offset;
struct s_transponder
{
var off1 = current_offset;
WORD id;
WORD u1;
WORD freqInMhz;
WORD symbolRate;
BYTE u2[2];
WORD onid;
WORD tsid;
WORD nid;
BYTE u3[5];
WORD freqInMhz2;
BYTE u4[8];
} transponder[(0x10000 - off0)/sizeof(s_transponder)];
BYTE filler[4];
char ddtc2[4];
struct s_channel
{
WORD idx1;
BYTE u1[4];
BYTE u2[2];
WORD sid;
WORD pcrPid;
WORD vpid;
BYTE u3[8];
ProgNr progNr;
BYTE u3b[7];
WORD apid1_maybe;
char lang1[3];
BYTE u4[45];
WORD apid2_maybe;
char lang2[3];
BYTE u5[3];
} channel[*];
};
char ddtc[4];
s_channelTransponder channelTranponderMap[numChannelTransponderMap];
s_satTransponder satTransponderMap[numSatTransponderMap];
s_transponder transponder[numTransponder];
BYTE satData[numSatData];
s_unknown unkData[numUnknown];
s_channelBlock channelBlocks[*];
};
#undef numChannelTransponderMap
#define numChannelTransponderMap 2000
#undef numSatTransponderMap
#define numSatTransponderMap 590
#undef numTransponder
#define numTransponder 550
#undef numSatData
#define numSatData 4592
#undef numUnknown
#define numUnknown 310
public struct Philips_FLASH_DTVINFO_S_PKG
{
char ddtc[4];
s_channelTransponder channelTranponderMap[numChannelTransponderMap];
s_satTransponder satTransponderMap[numSatTransponderMap];
s_transponder transponder[numTransponder];
BYTE satData[numSatData];
var off0 = current_offset;
BYTE unk[0x10000 - off0];
s_channelBlock channelBlocks[*];
};
/////////////////////////////////////////////////////////////////
struct s_channelTransponder2
{
struct
{
WORD u1 : 3;
WORD isRadio: 1;
WORD u2 : 1;
WORD transponderId : 11;
} info;
WORD channelId;
};
struct s_transponder2
{
WORD id;
BYTE source_maybe;
BYTE satId_maybe;
WORD freqInMhz;
WORD symbolRate;
BYTE u2[2];
WORD onid;
WORD tsid;
WORD nid;
BYTE u3[5];
WORD freqInMhz2;
BYTE u4[8];
BYTE u5[5];
};
struct s_satTransponder2
{
WORD satId_maybe;
WORD transponderId;
};
struct s_unknown2
{
WORD u1;
BYTE u2[2];
DWORD zero;
};
struct s_channel2
{
WORD id;
BYTE u1[4];
BYTE u2[2];
WORD sid;
WORD pcrPid;
WORD vpid;
BYTE u3[10];
ProgNr progNr;
BYTE u3b[8];
WORD apid1_maybe;
char lang1[3];
BYTE u4[45];
WORD apid2_maybe;
char lang2[3];
BYTE u5[3];
BYTE u6[1];
};
struct s_channelBlock2
{
char ddtc[4];
s_channel2 channels[703];
BYTE filler[0x20000 - 0x1ff67];
};
#undef numChannelTransponderMap
#define numChannelTransponderMap 5000
#undef numSatTransponderMap
#define numSatTransponderMap 60
#undef numTransponder
#define numTransponder 1100
#undef numSatData
#define numSatData 3512
#undef numUnknown
#define numUnknown 2180
public struct Philips_FLASH_DTVINFO_S_FTA_for_pkg
{
char ddtc[4];
s_channelTransponder2 channelTranponderMap[numChannelTransponderMap];
s_satTransponder2 satTransponderMap[numSatTransponderMap];
s_transponder2 transponder[numTransponder];
BYTE satData[numSatData];
BYTE unknown[numUnknown];
s_channelBlock2 channelBlocks[*];
};