FireBirdLib - Topfield TMS PVR TAP Programming Library
FlashServiceLowLevel.c
Go to the documentation of this file.
1#include <string.h>
2#include "FBLib_flash.h"
3
4static bool FlashServiceDecode_ST_TMSS(TYPE_Service_TMSS *Data, tFlashService *Service)
5{
6 char *Text;
7
9
10 memset(Service, 0, sizeof(tFlashService));
11 Service->SatIndex = Data->SatIdx;
12 Service->VideoStreamType = Data->VideoStreamType;
13 Service->FlagDelete = Data->DelFlag;
14 Service->FlagCAS = Data->CASFlag;
15 Service->FlagLock = Data->LockFlag;
16 Service->FlagSkip = Data->SkipFlag;
17 Service->Tuner = Data->TunerNum;
18 Service->TransponderIndex= Data->TPIdx;
19 Service->ServiceID = Data->SVCID;
20 Service->PMTPID = Data->PMTPID;
21 Service->PCRPID = Data->PCRPID;
22 Service->VideoPID = Data->VideoPID;
23 Service->AudioPID = Data->AudioPID;
24 Service->AudioTypeFlag = Data->AudioTypeFlag;
25 Service->AudioAutoSelect = Data->AudioAutoSelect;
26 Service->LCN = Data->LCN;
27 Service->AudioStreamType = Data->AudioStreamType;
28 Service->NameLock = Data->NameLock;
29 Service->Flags2 = Data->Flags2;
30 memcpy(Service->unknown2, Data->unknown2, 6);
31
32 Text = (char*)(FIS_vFlashBlockServiceName() + Data->NameOffset);
33 strncpy(Service->ServiceName, Text, MAX_SvcName);
34
35 if(Data->ProviderIdx < 256)
36 {
37 Text = (char*)(FIS_vFlashBlockProviderInfo() + 21 * Data->ProviderIdx);
38 strncpy(Service->ProviderName, Text, 20);
39 }
40
41 TRACEEXIT();
42 return TRUE;
43}
44
45static bool FlashServiceDecode_ST_TMST(TYPE_Service_TMST *Data, tFlashService *Service)
46{
47 bool ret;
48
49 TRACEENTER();
50
51 //The TV and radio service structures are identical
52 ret = FlashServiceDecode_ST_TMSS(Data, Service);
53
54 TRACEEXIT();
55 return ret;
56}
57
58static bool FlashServiceDecode_ST_TMSC(TYPE_Service_TMSC *Data, tFlashService *Service)
59{
60 bool ret;
61
62 TRACEENTER();
63
64 //The TV and radio service structures are identical
65 ret = FlashServiceDecode_ST_TMSS(Data, Service);
66
67 TRACEEXIT();
68 return ret;
69}
70
71bool FlashServiceDecode(void *Data, tFlashService *Service)
72{
73 TRACEENTER();
74
75 bool ret;
76
77 //Service is NULL
78 if(!Data || !Service)
79 {
80 TRACEEXIT();
81 return FALSE;
82 }
83
84 ret = FALSE;
85 switch(GetSystemType())
86 {
87 //Unknown and old 5k/6k systems are not supported
88 case ST_UNKNOWN:
89 case ST_S:
90 case ST_ST:
91 case ST_T:
92 case ST_C:
93 case ST_CT:
94 case ST_T5700:
95 case ST_T5800:
96 case ST_TF7k7HDPVR: break;
97
98 case ST_TMSS: ret = FlashServiceDecode_ST_TMSS(Data, Service); break;
99 case ST_TMST: ret = FlashServiceDecode_ST_TMST(Data, Service); break;
100 case ST_TMSC: ret = FlashServiceDecode_ST_TMSC(Data, Service); break;
101
102 case ST_NRTYPES: break;
103 }
104
105 TRACEEXIT();
106 return ret;
107}
108
109
110static bool FlashServiceEncode_ST_TMSS(TYPE_Service_TMSS *Data, tFlashService *Service)
111{
112 bool isRadio;
113 int ServiceIndex;
114
115 char *(*Appl_AddSvcName)(char const*);
116 void (*Appl_DeleteTvSvcName)(unsigned short, bool);
117 void (*Appl_DeleteRadioSvcName)(unsigned short, bool);
118 word (*Appl_SetProviderName)(char const*);
119
120 TRACEENTER();
121
122 isRadio = (dword)Data >= FIS_vFlashBlockRadioServices();
123
124 //Change the service name if necessary
125 if(isRadio)
126 {
127 ServiceIndex = ((dword)Data - FIS_vFlashBlockRadioServices()) / sizeof(TYPE_Service_TMSS);
128 Appl_DeleteRadioSvcName = (void*)FIS_fwAppl_DeleteRadioSvcName();
129 if(Appl_DeleteRadioSvcName) Appl_DeleteRadioSvcName(ServiceIndex, FALSE);
130 }
131 else
132 {
133 ServiceIndex = ((dword)Data - FIS_vFlashBlockTVServices()) / sizeof(TYPE_Service_TMSS);
134 Appl_DeleteTvSvcName = (void*)FIS_fwAppl_DeleteTvSvcName();
135 if(Appl_DeleteTvSvcName) Appl_DeleteTvSvcName(ServiceIndex, FALSE);
136 }
137
138 memset(Data, 0, sizeof(TYPE_Service_TMSS));
139 Data->SatIdx = Service->SatIndex;
140 Data->VideoStreamType = Service->VideoStreamType;
141 Data->DelFlag = Service->FlagDelete;
142 Data->CASFlag = Service->FlagCAS;
143 Data->LockFlag = Service->FlagLock;
144 Data->SkipFlag = Service->FlagSkip;
145 Data->TunerNum = Service->Tuner;
146 Data->TPIdx = Service->TransponderIndex;
147 Data->SVCID = Service->ServiceID;
148 Data->PMTPID = Service->PMTPID;
149 Data->PCRPID = Service->PCRPID;
150 Data->VideoPID = Service->VideoPID;
151 Data->AudioPID = Service->AudioPID;
152 Data->AudioTypeFlag = Service->AudioTypeFlag;
153 Data->AudioAutoSelect = Service->AudioAutoSelect;
154 Data->LCN = Service->LCN;
155 Data->AudioStreamType = Service->AudioStreamType;
156 Data->NameLock = Service->NameLock;
157 Data->Flags2 = Service->Flags2;
158 memcpy(Data->unknown2, Service->unknown2, 6);
159
160 Appl_AddSvcName = (void*)FIS_fwAppl_AddSvcName();
161 if(Appl_AddSvcName) Data->NameOffset = (dword)Appl_AddSvcName(Service->ServiceName);
162
163 //Update the provider name
164 Appl_SetProviderName = (void*)FIS_fwAppl_SetProviderName();
165 if(Appl_SetProviderName) Data->ProviderIdx = Appl_SetProviderName(Service->ProviderName);
166
167 TRACEEXIT();
168 return TRUE;
169}
170
171static bool FlashServiceEncode_ST_TMST(TYPE_Service_TMST *Data, tFlashService *Service)
172{
173 bool ret;
174
175 TRACEENTER();
176
177 //The TV and radio service structures are identical
178 ret = FlashServiceEncode_ST_TMSS(Data, Service);
179
180 TRACEEXIT();
181 return ret;
182}
183
184static bool FlashServiceEncode_ST_TMSC(TYPE_Service_TMSC *Data, tFlashService *Service)
185{
186 bool ret;
187
188 TRACEENTER();
189
190 //The TV and radio service structures are identical
191 ret = FlashServiceEncode_ST_TMSS(Data, Service);
192
193 TRACEEXIT();
194 return ret;
195}
196
197bool FlashServiceEncode(void *Data, tFlashService *Service)
198{
199 bool ret;
200
201 TRACEENTER();
202
203 //Service is NULL
204 if(!Data || !Service)
205 {
206 TRACEEXIT();
207 return FALSE;
208 }
209
210 ret = FALSE;
211 switch(GetSystemType())
212 {
213 //Unknown and old 5k/6k systems are not supported
214 case ST_UNKNOWN:
215 case ST_S:
216 case ST_ST:
217 case ST_T:
218 case ST_C:
219 case ST_CT:
220 case ST_T5700:
221 case ST_T5800:
222 case ST_TF7k7HDPVR: break;
223
224 case ST_TMSS: ret = FlashServiceEncode_ST_TMSS(Data, Service); break;
225 case ST_TMST: ret = FlashServiceEncode_ST_TMST(Data, Service); break;
226 case ST_TMSC: ret = FlashServiceEncode_ST_TMSC(Data, Service); break;
227
228 case ST_NRTYPES: break;
229 }
230
231 TRACEEXIT();
232 return ret;
233}
234
235
236static bool FlashServiceDelete_ST_TMSS(TYPE_Service_TMSS *Data)
237{
238 TYPE_Service_TMSS *NextData;
239
240 TRACEENTER();
241
242 NextData = Data + 1;
243
244 while(NextData->TunerNum != 0)
245 {
246 memcpy(Data, NextData, sizeof(TYPE_Service_TMSS));
247 Data++;
248 NextData++;
249 }
250 memset(Data, 0, sizeof(TYPE_Service_TMSS));
251
252 TRACEEXIT();
253 return TRUE;
254}
255
256static bool FlashServiceDelete_ST_TMST(TYPE_Service_TMST *Data)
257{
258 bool ret;
259
260 TRACEENTER();
261
262 //The TV and radio service structures are identical
263 ret = FlashServiceDelete_ST_TMSS(Data);
264
265 TRACEEXIT();
266 return ret;
267}
268
269static bool FlashServiceDelete_ST_TMSC(TYPE_Service_TMSC *Data)
270{
271 bool ret;
272
273 TRACEENTER();
274
275 //The TV and radio service structures are identical
276 ret = FlashServiceDelete_ST_TMSS(Data);
277
278 TRACEEXIT();
279 return ret;
280}
281
282bool FlashServiceDelete(void *Data)
283{
284 bool ret;
285
286 TRACEENTER();
287
288 //Service is NULL
289 if(!Data)
290 {
291 TRACEEXIT();
292 return FALSE;
293 }
294
295 ret = FALSE;
296 switch(GetSystemType())
297 {
298 //Unknown and old 5k/6k systems are not supported
299 case ST_UNKNOWN:
300 case ST_S:
301 case ST_ST:
302 case ST_T:
303 case ST_C:
304 case ST_CT:
305 case ST_T5700:
306 case ST_T5800:
307 case ST_TF7k7HDPVR: break;
308
309 case ST_TMSS: ret = FlashServiceDelete_ST_TMSS(Data); break;
310 case ST_TMST: ret = FlashServiceDelete_ST_TMST(Data); break;
311 case ST_TMSC: ret = FlashServiceDelete_ST_TMSC(Data); break;
312
313 case ST_NRTYPES: break;
314 }
315
316 TRACEEXIT();
317 return ret;
318}
319
320bool FlashServiceDelServiceName(int SvcType, int SvcNum)
321{
322 void (*Appl_DeleteTvSvcName)(unsigned short, bool);
323 void (*Appl_DeleteRadioSvcName)(unsigned short, bool);
324
325 TRACEENTER();
326
327 if(SvcType == SVC_TYPE_Tv)
328 {
329 Appl_DeleteTvSvcName = (void*)FIS_fwAppl_DeleteTvSvcName();
330 if(!Appl_DeleteTvSvcName)
331 {
332 TRACEEXIT();
333
334 return FALSE;
335 }
336 Appl_DeleteTvSvcName(SvcNum, FALSE);
337 }
338 else
339 {
340 Appl_DeleteRadioSvcName = (void*)FIS_fwAppl_DeleteRadioSvcName();
341 if(!Appl_DeleteRadioSvcName)
342 {
343 TRACEEXIT();
344
345 return FALSE;
346 }
347 Appl_DeleteRadioSvcName(SvcNum, FALSE);
348 }
349
350 TRACEEXIT();
351 return TRUE;
352}
#define bool
Definition: ELF.h:26
#define TYPE_Service_TMST
Definition: FBLib_flash.h:42
#define TYPE_Service_TMSC
Definition: FBLib_flash.h:43
dword FIS_fwAppl_AddSvcName(void)
dword FIS_fwAppl_DeleteRadioSvcName(void)
dword FIS_fwAppl_DeleteTvSvcName(void)
dword FIS_fwAppl_SetProviderName(void)
dword FIS_vFlashBlockProviderInfo(void)
dword FIS_vFlashBlockRadioServices(void)
dword FIS_vFlashBlockServiceName(void)
dword FIS_vFlashBlockTVServices(void)
bool FlashServiceDelete(void *Data)
bool FlashServiceDecode(void *Data, tFlashService *Service)
bool FlashServiceEncode(void *Data, tFlashService *Service)
bool FlashServiceDelServiceName(int SvcType, int SvcNum)
SYSTEM_TYPE GetSystemType(void)
Definition: GetSystemType.c:3
#define TRACEEXIT()
Definition: libFireBird.h:1244
#define TRACEENTER()
Definition: libFireBird.h:1243
@ ST_CT
Definition: libFireBird.h:77
@ ST_T
Definition: libFireBird.h:69
@ ST_TMSC
Definition: libFireBird.h:74
@ ST_UNKNOWN
Definition: libFireBird.h:67
@ ST_T5700
Definition: libFireBird.h:71
@ ST_TMST
Definition: libFireBird.h:73
@ ST_T5800
Definition: libFireBird.h:75
@ ST_TMSS
Definition: libFireBird.h:72
@ ST_ST
Definition: libFireBird.h:76
@ ST_NRTYPES
Definition: libFireBird.h:79
@ ST_TF7k7HDPVR
Definition: libFireBird.h:78
@ ST_S
Definition: libFireBird.h:68
@ ST_C
Definition: libFireBird.h:70
word AudioStreamType
Definition: libFireBird.h:1532
byte unknown2[6]
Definition: libFireBird.h:1539
char ServiceName[MAX_SvcName+1]
Definition: libFireBird.h:1533
word AudioAutoSelect
Definition: libFireBird.h:1530
byte VideoStreamType
Definition: libFireBird.h:1517
char ProviderName[40]
Definition: libFireBird.h:1534
word TransponderIndex
Definition: libFireBird.h:1523