source: svn/trunk/zasc/app/DST_DB.cpp @ 2

Last change on this file since 2 was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
File size: 17.3 KB
Line 
1#include "DST_DB.h"
2#include "sqlite3.h"
3#include "DST_CommonAPI.h"
4#include "DST_ChannelTune.h"
5#include "DST_HostInterface.h"
6#include "DST_DB_Engine.h"
7
8
9void DST_GetAVState(DS_U8 *RF, DS_U16 *SourceID, DS_U8 *Mode, DS_U8 *State);
10int CT_DB_GetTSID(DS_U8 RF);
11DS_U32* DST_UTF82Uni(DS_U8 *utf);
12void CT_DB_GetVideoPid(DS_U8 RF, DS_U16 sID,DS_U16* pcr, DS_U16* pid, DS_U8* type);
13void CT_ChMapUpdate();
14int CT_ChMapCount();
15
16#ifdef SQLITE_SYSTEM_MALLOC
17static void sqlite3MemSetDefault(void);
18#endif
19
20static SkipList g_skip[1000];
21static int g_skip_count = 0;
22
23SkipList* DST_DB_GetSkipChannel(int *size)
24{
25        *size = g_skip_count;
26        return g_skip;
27
28}
29int DST_DB_GetSkipChannelCount()
30{
31        return g_skip_count;
32}
33
34void DST_DB_MakeSkipChannel()
35{
36        CDB db;
37        db.GetTable("select rf, program_number from skip_list");
38        g_skip_count = db.GetRow();
39       
40        memset(g_skip,0,sizeof(SkipList)*(g_skip_count));
41        if(g_skip_count < 1) return;   
42        for(int i=0;i<(g_skip_count);i++)
43        {
44                g_skip[i].rf= atoi(db.GetResult( (i+1)*db.GetCol() + 0  ));
45                g_skip[i].program_number= atoi(db.GetResult( (i+1)*db.GetCol() + 1  ));
46        }
47}
48
49void DST_DB_SetSkipChannel(int rf, int program_number, bool bAdd)
50{
51        CDB db;
52        if(bAdd) db.Query("INSERT OR REPLACE INTO skip_list  VALUES (%d, %d)",rf, program_number);
53        else db.Query("delete from skip_list where rf=%d and program_number=%d",rf, program_number);
54        CT_ChMapUpdate(); // Skip ¸®½ºÆ®¿¡ µû¸¥ ä³Î ¾÷´Ù¿î ¸ñ·ÏÀ» °»½ÅÇÑ´Ù.
55}
56
57bool DST_DB_PresentChMap()
58{
59        return (CT_ChMapCount() > 0);
60}
61
62int DST_DB_GetMajor(DS_U8 RF, DS_U16 program_number)
63{
64        CDB db;
65        db.GetTable("select major from channel_db where rf=%d and program_number=%d", RF, program_number);
66        return (db.GetRow() < 1) ? 0 : atoi(db.GetResult(1));
67}
68
69int DST_DB_GetMinor(DS_U8 RF, DS_U16 program_number)
70{
71        CDB db;
72        db.GetTable("select minor from channel_db where rf=%d and program_number=%d", RF, program_number);
73        return (db.GetRow() < 1) ? 0 : atoi(db.GetResult(1));
74}
75
76void DST_DB_ChannelUpDn(bool bUp)
77{
78        T();
79        CDB db;
80        int rf = DST_EEPROM_GetRF();
81        int major = rf;
82        int minor = 1;
83        int program_number = DST_EEPROM_GetProgramNumber();
84       
85        db.GetTable("select major,minor from channel_updn where rf =%d and program_number=%d", rf, program_number);
86        if (db.GetRow()) 
87        {
88                major = atoi(db.GetResult(2));
89                minor = atoi(db.GetResult(3));
90        }
91       
92        if (bUp)
93        {
94                // ¹Ù·Î À§ ä³Î ã¾Æº¸ÀÚ
95                db.GetTable("select rf, program_number from channel_updn where " 
96                        "(major > %d) or (major >=%d and minor > %d) or (major>=%d and minor >=%d and rf > %d) "
97                        "order by major, minor, rf limit 1",
98                        major, major, minor, major, minor, rf);
99                if (db.GetRow() == 0) // ¹Ø¿¡¼­ ù¹øÂ° ä³Î ã¾Æº¸ÀÚ
100                {
101                        db.GetTable("select rf, program_number from channel_updn order by major, minor, rf limit 1");
102                } 
103        }
104        else
105        {
106                // ¹Ù·Î ¾Æ·¡  ä³Î ã¾Æº¸ÀÚ
107                db.GetTable("select rf, program_number from channel_updn where " 
108                        "(major < %d) or (major <=%d and minor < %d) or (major<=%d and minor <=%d and rf < %d) "
109                        "order by major desc, minor desc, rf desc limit 1",
110                        major, major, minor, major, minor, rf);
111                if (db.GetRow() == 0) // À§¿¡¼­ ù¹øÂ° ä³Î ã¾Æº¸ÀÚ
112                {
113                        db.GetTable("select rf, program_number from channel_updn order by major desc, minor desc, rf desc limit 1");
114                } 
115        }
116        if (db.GetRow() > 0) DST_UI_ChannelTune(atoi(db.GetResult(2)), atoi(db.GetResult(3)));
117}
118
119ChannelMap* DST_DB_GetChannelMapForChEdit(int *nChannels)
120{
121        CDB db;
122        db.GetTable("select rf, program_number, major, minor, name from channel_db order by major,minor,rf");
123       
124        *nChannels = db.GetRow();
125        if(*nChannels < 1) return 0;
126        ChannelMap* chMap = (ChannelMap *)DST_OS_Malloc(sizeof(ChannelMap) * (*nChannels));
127        memset(chMap, 0, sizeof(ChannelMap) * (*nChannels));
128        for(int i=0;i<(*nChannels);i++)
129        {
130                chMap[i].rf = atoi(db.GetResult( (i+1)*db.GetCol() ));
131                if(atoi(db.GetResult( (i+1)*db.GetCol()+3 )) == 0)
132                        sprintf(chMap[i].num, "%d", atoi(db.GetResult( (i+1)*db.GetCol()+2 )));
133                else
134                        sprintf(chMap[i].num, "%d-%d", atoi(db.GetResult( (i+1)*db.GetCol()+2 )), atoi(db.GetResult( (i+1)*db.GetCol()+3 )));
135                chMap[i].number = atoi(db.GetResult( (i+1)*db.GetCol()+1 ));
136                strcpy((char*)chMap[i].name, db.GetResult((i+1)*db.GetCol()+4));
137        }
138        return chMap;
139}
140
141int DST_DB_GetChannelCount()
142{
143        return CT_ChMapCount();
144}
145
146bool DST_DB_GetCurrentChannelInfo(char* chNum, DS_U32* chName, int *num)
147{
148        if (chNum) chNum[0] = 0;
149        if (chName) chName[0] = 0;
150
151#if 0           
152        DS_U8 RF= DST_EEPROM_GetRF();
153        DS_U16 program_number = DST_EEPROM_GetProgramNumber();
154#else
155        DS_U8  RF= 0;
156        DS_U16 program_number = 0;
157        DST_GetAVState(&RF, &program_number);
158#endif
159       
160        if (program_number == 0)
161        {
162                if (num) *num = DST_GetFrequencyNumberbyIndex(RF);
163                if (chNum) sprintf(chNum,"%d", DST_GetFrequencyNumberbyIndex(RF));
164                return false;
165        }
166        CDB db;
167        db.GetTable("select major, minor, name from channel_db where rf =%d and program_number=%d", RF, program_number);
168        if (db.GetRow() < 1)
169        {
170                if (num) *num = DST_GetFrequencyNumberbyIndex(RF);
171                if (chNum) sprintf(chNum,"%d", DST_GetFrequencyNumberbyIndex(RF));
172                return false;
173        }
174       
175        int major = atoi(db.GetResult(3));
176        int minor = atoi(db.GetResult(4));
177        if (chName)
178        {
179                DS_U32 *strText32 = DST_UTF82Uni((DS_U8*)db.GetResult(5)); // È£ÃâÇÑ ÂÊ¿¡¼­ ¸Þ¸ð¸® ÇØÁ¦
180                if (strText32) strcpy32(chName, strText32);
181        }
182        if (minor == 0)
183        {
184                sprintf(chNum,"%d (%d) ", major, DST_GetFrequencyNumberbyIndex(RF));
185        }
186        else
187        {
188                sprintf(chNum,"%d-%d(%d) ", major, minor, DST_GetFrequencyNumberbyIndex(RF));
189        }
190        return true;
191}
192
193// ºÎÆÃ ÈÄ È¤Àº ¿ÀÅä ½ºÄµ ÈÄ È£Ã⠵ȴÙ.
194void DST_DB_TuneFirstChannel()
195{
196        if (DST_DB_PresentChMap() == false)
197        {
198                DST_UI_ChannelTune(DST_MinRF(), 0);
199                return;
200        }
201        CDB db;
202        // RF ¹øÈ£¿Í ÇÁ·Î±×·¥³Ñ¹ö ÀÏÄ¡Çϴ ä³ÎÀ» ã´Â´Ù.
203        int rf = DST_EEPROM_GetRF();
204        int program_number = DST_EEPROM_GetProgramNumber();
205        db.GetTable("select rf, program_number from channel_db where rf =%d and program_number=%d", rf,  program_number);
206        if (db.GetRow()) 
207                {
208                DST_UI_ChannelTune(atoi(db.GetResult(2)), atoi(db.GetResult(3)));
209                        return;
210                }
211        // RF ¹øÈ£ ÀÏÄ¡Çϴ ä³ÎÀ» ã´Â´Ù.
212        db.GetTable("select rf, program_number from channel_db where rf =%d", rf);
213        if (db.GetRow()) 
214                {
215                DST_UI_ChannelTune(atoi(db.GetResult(2)), atoi(db.GetResult(3)));
216                        return;
217                }
218        // ù¹øÂ° ä³Î
219        db.GetTable("select rf, program_number from channel_db");
220        if (db.GetRow()) 
221        {
222                DST_UI_ChannelTune(atoi(db.GetResult(2)), atoi(db.GetResult(3)));
223                return;
224        }
225        DST_UI_ChannelTune(DST_MinRF(), 0);
226}
227
228int DST_DB_GetProgramNumber(int major, int minor)
229{
230        CDB db;
231        int program_number = 0;
232        db.GetTable("select program_number from channel_db where major =%d and minor=%d order by major,minor,rf", major,  minor);
233        if(db.GetRow() < 1)
234        {       
235                db.GetTable("select program_number from channel_db where major =%d order by major,minor,rf", major);
236        }
237               
238        if (db.GetRow() > 0) program_number = atoi(db.GetResult(1));
239
240        return program_number;
241}
242
243int DST_DB_GetProgramNumber(int rf)
244{
245        CDB db;
246        db.GetTable("select program_number from channel_db where rf =%d order by minor", rf);
247        return (db.GetRow() > 0) ?  atoi(db.GetResult(1)) : 0; 
248}
249
250void DST_DB_Del()
251{
252        CDB db,db1;
253        db.GetTable("select tbl_name from sqlite_master where type='table'");
254        for (int i= 0; i < db.GetRow(); i++) 
255        {
256                db1.Query("delete from %s", db.GetResult(i+1));
257        }
258}
259
260void DST_DB_Del(DS_U8 RF)
261{
262        CDB db,db1;
263        db.GetTable("select tbl_name from sqlite_master where type='table'");
264        for (int i= 0; i < db.GetRow(); i++)
265        {
266                db1.GetTable("pragma table_info(%s)", db.GetResult(i+1));
267                bool bFind = false;
268                for (int j= 0; j < db1.GetRow(); j++)
269                {
270                        // rf¶ó´Â À̸§À» °¡Áø field°¡ ÀÖ´Â Å×À̺íÀÇ ³»¿ëÀ» ¸ðµÎ Áö¿î´Ù.
271                        if (strcmp("rf", db1.GetResult((j+1)*db1.GetCol()+1))) continue;
272                        bFind = true;
273                        break;
274                }
275                if (bFind) db1.Query("delete from %s where rf = %d", db.GetResult(i+1), RF);
276        }
277}
278
279// FLASH ¸Þ¸ð¸® ÀúÀå
280
281static DS_U32 DST_CRC32(DS_U8 *data, int len)
282{
283        static DS_U32 crcTable[256];
284        static bool bFirst=true;
285        if (bFirst)
286        {
287                bFirst = false;
288                for (int i=0; i<256; i++) {
289                        DS_U32 crc = 0;
290                        for (int j=7; j>=0; j--) {
291                                if (((i >> j) ^ (crc >> 31)) & 1) crc=(crc<<1)^0x04C11DB7;
292                                else crc<<=1;
293                        }
294                        crcTable[i] = crc;
295                }
296        }
297        DS_U32 crc = 0xFFFFFFFF;
298        for (int i = 0; i < len; ++i) crc = (crc << 8) ^ crcTable[(crc >> 24) ^ (*data++)];
299        return crc;
300}
301
302// FLASH MEMORY LOW LEVEL ACCESS FUNCTION
303static char *strFlash = 0; // [FLASH_DB_SIZE];
304#define FLASH_DB_ADDR0 FLASH_CH_MAP_POS
305#define FLASH_DB_ADDR1 (FLASH_CH_MAP_POS + FLASH_DB_SIZE)
306
307static void DST_Flash_Read(int bank)
308{
309        if (strFlash) DST_OS_Free(&strFlash);
310        strFlash = (char*)DHL_Flash_Read(bank ?  FLASH_DB_ADDR1 : FLASH_DB_ADDR0, FLASH_DB_SIZE);
311}
312
313static void DST_Flash_Write()
314{
315        DHL_Flash_Write(FLASH_DB_ADDR0, strlen(strFlash)+1, (DS_U8*)strFlash);
316        DHL_Flash_Write(FLASH_DB_ADDR1, strlen(strFlash)+1, (DS_U8*)strFlash);
317}
318
319class CString
320{
321private:
322        char* strText;
323public:
324        CString()
325        {
326                strText = (char*)DST_OS_Calloc(1,1);
327        }
328        ~CString()
329        {
330                DST_OS_Free(&strText);
331        }
332        int Add(const char* strSQL, ...)
333        {
334                if (strSQL == 0) return 0;
335                va_list ap;
336                char *z;
337                va_start(ap, strSQL);
338                z = sqlite3_vmprintf(strSQL, ap);
339                va_end(ap);
340                int nLen = strlen(strText) + strlen(z) + 1;
341                char* strTmp = (char*)DST_OS_Calloc(nLen,1);
342                sprintf(strTmp, "%s%s",strText, z);
343                DST_OS_Free(&strText);
344                sqlite3_free(z);
345                strText = strTmp;       
346                return nLen;
347        }
348        char* Get()
349        {
350                return strText;
351        }
352};
353
354static void DST_DB_TableToString(const char* strTableName, CString &strQ)
355{
356        CDB db;
357        CDB db_type;
358        db.GetTable("select sql from sqlite_master where name=%Q", strTableName);
359        if (db.GetRow() < 1) return;
360       
361        strQ.Add("drop table if exists %s;\n%s;\n", strTableName, db.GetResult(1)); // »ý¼º Äõ¸®
362       
363        db.GetTable("select * from %s", strTableName);
364        // Çʵ尡 integer ÇüÀÎÁö text ÇüÀÎÁö ¾Ë±â À§Çؼ­ Äõ¸®¹®À» ¸¸µç´Ù.
365        if (db.GetRow() < 1) return;
366        CString strT;
367        strT.Add("select ");
368        for (int i = 0; i < db.GetCol(); i++) strT.Add("typeof(%s)%c", db.GetResult(i), (i < db.GetCol()-1) ? ',' : ' ');
369        strT.Add(" from %s", strTableName);
370        //DST_Printf("%s\n", strT);
371        db_type.GetTable(strT.Get());
372        // °¢ ¶óÀκ°·Î Äõ¸®¸¦ ÃßÃâÇÑ´Ù.
373        for (int i = 0; i < db.GetRow(); i++)
374        {
375                strQ.Add("insert into %s values(", strTableName);
376                for (int j = 0; j < db.GetCol(); j++)
377                {
378                        char* strData = db.GetResult((i+1)*db.GetCol() + j);
379                        bool IsText = (db_type.GetResult(j + db.GetCol())[0] == 't');
380                        strQ.Add(IsText ? "%Q%c" : "%s%c", strData, (j < db.GetCol()-1) ? ',' : ' ');
381                }
382                strQ.Add(");\n");
383        }
384        //DST_Printf("%s\n", strQ);
385}
386
387static void DST_DB_QueryFile_Save()
388{
389        CString strQ;
390        DST_DB_TableToString("pat", strQ);
391        DST_DB_TableToString("pmt", strQ);
392//      DST_DB_TableToString("signal", strQ);
393        DST_DB_TableToString("config", strQ);
394        DST_DB_TableToString("skip_list", strQ);
395        DST_DB_TableToString("tvct", strQ);
396        DST_DB_TableToString("tvct_sub", strQ);
397        char *strData = strQ.Get();
398        //DST_Printf("\n%s\n", strData);
399       
400        CString strH;
401        strH.Add("VERSION %d\nLENGTH %d\nCRC %d\n", FLASH_VERSION, strlen(strData)+1, (int)DST_CRC32((DS_U8*)strData, strlen(strData)+1));
402        strH.Add("-------------------------------------------------------------------------------------------------");
403        char *strHead = strH.Get();
404        strHead[63] = '\n';
405       
406        if (memcmp(strFlash, strHead, 64) == 0 && memcmp(&strFlash[64], strData, strlen(strData)+1) == 0) return; // ÀÌ¹Ì ÀúÀåµÈ µ¥ÀÌÅÍ¿Í °°´Ù.
407        memcpy(strFlash, strHead, 64);
408        memcpy(&strFlash[64], strData, strlen(strData)+1);
409        DST_Flash_Write();
410}
411
412static bool DST_DB_QueryFile_Load(int bank)
413{
414        // Flash memory¿¡¼­ Àоî¿Â´Ù.
415        DST_Flash_Read(bank);
416        int nLen = 0;
417        for (int i = 0; i< FLASH_DB_SIZE; i++)
418        {
419                if (strFlash[i] != 0) continue;
420                nLen = i;
421                break;
422        }
423        T();
424        if (nLen== 0) return false;
425        T();
426        if (memcmp("VERSION", strFlash, strlen("VERSION")) != 0) return false;
427        T();
428        char strName[6][20];
429        memset(strName, 0, sizeof(strName));
430        int nStart = 0;
431        int nPos = 0;
432        int nstrFlashLen = (int)strlen(strFlash);
433        for (int i = 0; i < nstrFlashLen; i++)
434        {
435                if (strFlash[i] == ' ' || strFlash[i] == '\n')
436                {
437                        memcpy(strName[nPos],  &strFlash[nStart], i-nStart);
438                        strName[nPos][i-nStart] = 0;
439                        nPos++;
440                        nStart = i+1;
441                        if (nPos >= 6) break; 
442                }
443                if (i-nStart >= 19) break;
444        }
445        //char strName[3][20];
446        //char strValue[3][20];
447        //sscanf(strFlash, "%s%s%s%s%s%s", strName[0], strValue[0],strName[1], strValue[1],strName[2], strValue[2]);
448        DST_Printf("strName[0] = %s\n", strName[0]);
449        DST_Printf("strValue[0] = %s\n", strName[1]);
450        DST_Printf("strName[1] = %s\n", strName[2]);
451        DST_Printf("strValue[1] = %s\n", strName[3]);
452        DST_Printf("strName[2] = %s\n", strName[4]);
453        DST_Printf("strValue[2] = %s\n", strName[5]);
454        int version = atoi(strName[1]);
455        nLen = atoi(strName[3]);
456        int crc1 = atoi(strName[5]);
457       
458        if (version!= FLASH_VERSION) return false;
459        T();
460        if (nLen == 0 || nLen >= FLASH_DB_SIZE) return false; 
461        int crc2 =DST_CRC32((DS_U8*)&strFlash[64], nLen);
462        T();
463        DST_Printf("crc1= %d crc2=%d\n", crc1, crc2);
464        if (crc1 != crc2) return false;
465        T();
466        return true;
467       
468}
469
470static DS_U32 g_sync_request_time = 0;
471static DS_U32 g_Sync_finish_time = 0;
472
473void DST_DB_Sync()
474{
475        g_sync_request_time = DST_OS_GetTickCount();
476}
477
478bool DST_DB_IsSync()
479{
480        return (g_Sync_finish_time < g_sync_request_time) ? false : true;
481}
482
483static void tDB_Sync()
484{
485        while (1)
486        {
487                DST_OS_Delay(DST_OS_GetTicksPerSecond());
488                if (DST_DB_IsSync()) continue;
489                T();
490                DST_DB_QueryFile_Save();
491                T();
492                g_Sync_finish_time = DST_OS_GetTickCount();
493        }
494}
495
496extern sqlite3 *g_db;
497void DST_DB_Open()
498{
499        if (g_db) return;
500#ifdef SQLITE_SYSTEM_MALLOC
501        sqlite3MemSetDefault();
502#endif
503#ifdef SQLITE_OS_OTHER
504        sqlite3_open((char*)":memory:", &g_db);
505#else
506        sqlite3_open((char*)"tmp_isdbt.db", &g_db);
507#endif
508#ifdef SQLITE_ENABLE_MEMSYS5
509        void *pBuf = DST_OS_Malloc(1024*1024);   
510        sqlite3_config(SQLITE_CONFIG_HEAP, pBuf, 1024*1024, 4);
511#endif 
512        if (g_db == 0)
513        {
514                DST_Printf("%s|%d|Can not open database try\n", __func__, __LINE__);
515        }
516        CDB db;
517//      db.Query("create table if not exists signal (rf int, signal_strength int, bera int, berb int, block int)");
518        db.Query("create table if not exists pat (rf int, program_number int, pid int, crc int)");
519        db.Query("create table if not exists pmt(rf int, program_number int, pcr_pid int, ca_pid int, video_pid int, video_type int, minor int, crc int)");
520        db.Query("create table if not exists eit(rf int, id int, source_id int, version_number int, crc int)");
521        db.Query("create table if not exists eit_sub(rf int, id int, source_id int, event_id int, start_time int, length_in_seconds int, title text)");
522        db.Query("create table if not exists ett(rf int, source_id int, event_id int,  title text, crc int)");
523        db.Query("create table if not exists skip_list(rf int, program_number int, primary key(rf, program_number))");
524
525        db.Query("create table if not exists cvct(rf int unique, transport_stream_id int, version_number int, crc32)"); 
526        db.Query("create table if not exists cvct_sub("
527                "rf int, short_name text, long_name text, major_channel_number int, minor_channel_number int, "
528                "modulation_mode int, carrier_frequency int, channel_TSID int, program_number int, ETM_location int, "
529                "access_controlled int, hidden int, show_guide int, service_type int, source_id int)");
530 
531        db.Query("create table if not exists tvct(rf int unique, transport_stream_id int, version_number int, crc32)"); 
532        db.Query("create table if not exists tvct_sub("
533                "rf int, short_name text, long_name text, major_channel_number int, minor_channel_number int, "
534                "modulation_mode int, carrier_frequency int, channel_TSID int, program_number int, ETM_location int, "
535                "access_controlled int, hidden int, show_guide int,  service_type int, source_id int)");
536                                       
537        bool bValidDB = false;
538        if (DST_DB_QueryFile_Load(0) == true)  bValidDB = true;
539        if (bValidDB == false) if (DST_DB_QueryFile_Load(1) == true) bValidDB = true;
540        if (bValidDB == true)
541        {
542                DST_Printf("%s", &strFlash[64]);
543                T();
544                db.Query(&strFlash[64]);
545                T();
546                // CT_ChMapUpdate();
547                T();
548                DST_DB_MakeSkipChannel();
549        }
550        DST_OS_SpawnTask( (void(*) (void *))tDB_Sync, (char*)"tDB_Sync", APP_TASK_PRIO_EEPROM_SYNC, WIN_MGR_TASK_STACKSIZE,  0);
551}
552
553void DST_DB_Close()
554{
555        if(g_db) sqlite3_close(g_db);
556        g_db = 0;
557}
558
559int DST_DB_GetRF(int major, int minor, bool* bFound)
560{
561        CDB db;
562        db.GetTable("select rf from channel_db where major=%d and minor=%d order by major,minor,rf",major, minor);
563        if(db.GetRow() < 1)
564        {       
565                db.GetTable("select rf from channel_db where major=%d  order by major,minor,rf",major);
566        }
567        if(db.GetRow() < 1)
568        {
569                *bFound = false;
570                return 0;
571        }
572       
573        return atoi(db.GetResult(1));
574}
575int DST_DB_AvailableChannelCount(int major)
576{
577        CDB db;
578        db.GetTable("select major from channel_db where ( major=%d or (major >= %d and major < %d))  ", major,major*10,major*10+9);
579       
580        return db.GetRow();
581
582}
583
584bool DST_DB_PresentMatchChannel(int rf, int major, int minor)
585{
586        CDB db;
587        if(minor == 0)
588                db.GetTable("select * from channel_db where rf=%d and major=%d ", rf, major );
589        else
590                db.GetTable("select * from channel_db where rf=%d and major=%d and minor=%d ", rf, major, minor );
591        DST_Printf("rf=%d and major=%d and minor=%d\n", rf, major, minor);
592        return (db.GetRow() < 1 ? false: true);
593}
594
595#ifdef SQLITE_SYSTEM_MALLOC
596
597static int sqlite3MemRoundup(int n)
598{
599  return ((n+7) & (~7));
600}
601
602static int sqlite3MemInit(void *)
603{
604  return SQLITE_OK;
605}
606
607static void sqlite3MemShutdown(void *)
608{
609  return;
610}
611
612static void sqlite3MemSetDefault(void)
613{
614  static const sqlite3_mem_methods defaultMethods = {
615     DST_OS_MallocDirect,
616     DST_OS_FreeDirect,
617     DST_OS_ReallocDirect,
618     DST_OS_MemSize,
619     sqlite3MemRoundup,
620     sqlite3MemInit,
621     sqlite3MemShutdown,
622     0
623  };
624  sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
625}
626
627#endif /* SQLITE_SYSTEM_MALLOC */
628
629
Note: See TracBrowser for help on using the repository browser.