Lcd_osd.c
上传用户:xmyjxjd
上传日期:2013-05-04
资源大小:1517k
文件大小:125k
开发平台:

C/C++

  1. #define __OSD__
  2. #include "reg52.h" 
  3. #include "HeaderMAIN_DEF.H"
  4. #include "HeaderCONFIG.H"
  5. #include "HeaderACCESS.H"
  6. #include "HeaderLCD_FUNC.H"
  7. #include "HeaderLCD_AUTO.H"
  8. #include "HeaderLCD_MSG.H"
  9. #include "HeaderLCD_MAIN.H"
  10. #include "HeaderLCD_OSD.H"
  11. #include "HeaderFONT.H"
  12. #include "HeaderOSD.H"
  13. #include "HeaderSRC_CTRL.H"
  14. #include "HeaderOSD_TREE.H"
  15. #include "Headerrgb_echo.H"
  16. #if (TV_CHIP != TV_NONE)
  17. #include "TUNER.H"
  18. #endif
  19. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  20. // OSD Process Dispatch Table
  21. // In this code, when input source is not VGA, AUTO CONFIG page will not be shown.
  22. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  23. unsigned char GetNextPageIdx(unsigned char ucPageCurr)
  24. {
  25.     switch (stGUD1.INPUT_SOURCE & 0x07)
  26.     {
  27.     case SOURCE_VGA :
  28.         return (5 <= ucPageCurr) ? 1 : ucPageCurr + 1;
  29.     case SOURCE_DVI :
  30.         return (5 <= ucPageCurr) ? 1 : ucPageCurr + 1;
  31.     case SOURCE_AV  :
  32.         return (5 <= ucPageCurr) ? 1 : ucPageCurr + 1;
  33.     case SOURCE_SV  :
  34.         return (5 <= ucPageCurr) ? 1 : ucPageCurr + 1;
  35.     case SOURCE_YUV :
  36.         return (5 <= ucPageCurr) ? 1 : ucPageCurr + 1;
  37.     default :
  38.         return 1;
  39.     }
  40.     
  41. }
  42. unsigned char GetPrevPageIdx(unsigned char ucPageCurr)
  43. {
  44.    switch (stGUD1.INPUT_SOURCE & 0x07)
  45.     {
  46.     case SOURCE_VGA :
  47.         return (1 >= ucPageCurr) ? 5 : ucPageCurr - 1;
  48.     case SOURCE_DVI :
  49.         return (1 >= ucPageCurr) ? 5 : ucPageCurr - 1;
  50.     case SOURCE_AV  :
  51.         return (1 >= ucPageCurr) ? 5 : ucPageCurr - 1;
  52.     case SOURCE_SV  :
  53.         return (1 >= ucPageCurr) ? 5 : ucPageCurr - 1;
  54.     case SOURCE_YUV :
  55.         return (1 >= ucPageCurr) ? 5 : ucPageCurr - 1;
  56.     default :
  57.         return 1;
  58.     }
  59. }
  60. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  61. // OSD Process Public Function
  62. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  63. //  OSD Window : Control OSD Windows
  64. //  win_no     : bit 2 ~ 0   Window Number 0 ~ 7
  65. //  row_start  : bit 10 ~ 0  Window Row Start Address
  66. //  row_end    : bit 10 ~ 0  Window Row End Address
  67. //  col_start  : bit 10 ~ 0  Window Column Start Address
  68. //  col_end    : bit 10 ~ 0  Window Column End Address
  69. //  width      : bit 2 ~ 0   shadow/border width or 3D button thickness in pixel unit 1~8 pixel
  70. //  height     : bit 2 ~ 0   shadow/border height in line unit , it must the same with width for 3D button thickness
  71. //  color      : bit 3 ~ 0   window color index in 16-color LUT
  72. //  color_sb   : bit 7 ~ 4   shadow color or left-top/bottom border color for 3D window
  73. //             : bit 3 ~ 0   border color or right-bottom/top border color
  74. //  gradient   : bit 7       R Gradient Polarity 0 : Decrease  1 : Increase
  75. //             : bit 6       G Gradient Polarity 0 : Decrease  1 : Increase
  76. //             : bit 5       B Gradient Polarity 0 : Decrease  1 : Increase
  77. //             : bit 4 ~ 3   Gradient level      00~11 : 1 step ~ 4 setp per level
  78. //             : bit 2       Enable Red Color Gradient
  79. //             : bit 1       Enable Green Color Gradient
  80. //             : bit 0       Enable Blue Color Gradient
  81. //  gra_level  : bit 2~0     111 ~ 001 : 7 level ~ 1 level per gradient, 000 : 8 level per gradient
  82. //  attr       : bit 6       1 - Enable Gradient function      0 - Disable Gradient function
  83. //             : bit 5       1 - Vertical Gradient             0 - Horizontal Gradient
  84. //             : bit 4       1 - Enable Shadow/Border/3D button   0 - Disable
  85. //             : bit 3 ~ 1   000 : Shadow Type 1
  86. //                           001 : Shadow Type 2
  87. //                           010 : Shadow Type 3
  88. //                           011 : Shadow Type 4
  89. //                           100 : 3D Button Type 1
  90. //                           101 : 3D Button Type 2
  91. //                           110 : Reserved
  92. //                           111 : Border
  93. //             : bit 0       1 - Enable Window            0 - Disable Window
  94. void OSD_Window(unsigned char win_no, unsigned int row_start, unsigned int row_end, unsigned int col_start, unsigned int col_end,
  95. unsigned char width, unsigned char height, unsigned char color, unsigned char color_sb, unsigned char gradient,
  96. unsigned char gray_level,unsigned char attr)
  97. {
  98. if(win_no > 7)  
  99. return;
  100. Data[0]     = 5;
  101. Data[1]     = Y_INC;
  102. Data[2]     = OSD_ADDR_MSB_90;
  103. Data[3]     = 0xc1;
  104. Data[4]     = (win_no << 2);
  105. Data[5]     = 0;
  106. RTDWrite(Data);
  107. Data[0]     = 6;
  108. Data[1]     = N_INC;
  109. Data[2]     = OSD_DATA_92;
  110. Data[3]     = ((width & 0x07) << 3) | (height & 0x07);
  111. Data[4]     = color_sb;
  112. Data[5]     = gradient;
  113. Data[6]     = 0;
  114. RTDWrite(Data);
  115. Data[0]     = 5;
  116. Data[1]     = Y_INC;
  117. Data[2]     = OSD_ADDR_MSB_90;
  118. Data[3]     = 0xe1;
  119. Data[4]     = (win_no << 2) + 1;
  120. Data[5]     = 0;
  121. RTDWrite(Data);
  122. Data[0]     = 9;
  123. Data[1]     = N_INC;
  124. Data[2]     = OSD_DATA_92;
  125. Data[3]     = (unsigned char)((unsigned int)(row_start & 0x003f) << 2);
  126. Data[4]     = (unsigned char)((unsigned int)(col_start & 0x0007) << 5) | 
  127.       (unsigned char)((unsigned int)(row_start & 0x07c0) >> 6);
  128. Data[5]     = (unsigned char)((unsigned int)(col_start & 0x07f8) >> 3);
  129. Data[6]     = (unsigned char)((unsigned int)(row_end & 0x003f) << 2);
  130. Data[7]    = (unsigned char)((unsigned int)(col_end & 0x0007) << 5) | 
  131.   (unsigned char)((unsigned int)(row_end & 0x07c0) >> 6);
  132. Data[8]    = (unsigned char)((unsigned int)(col_end & 0x07f8) >> 3);
  133. Data[9]     = 0;
  134. RTDWrite(Data);
  135. Delay_Xms(25);
  136. /*
  137. do
  138. {
  139. RTDRead(0x94, 0x01, Y_INC);
  140. }
  141. while( ((Data[0] >> 5) & 0x01) );
  142. */
  143. Data[0]     = 5;
  144. Data[1]     = Y_INC;
  145. Data[2]     = OSD_ADDR_MSB_90;
  146. Data[3]     = 0xc1;
  147. Data[4]     = (win_no << 2) + 3;
  148. Data[5]     = 0;
  149. RTDWrite(Data);
  150. Data[0]     = 6;
  151. Data[1]     = N_INC;
  152. Data[2]     = OSD_DATA_92;
  153. Data[3]    = 0x00;
  154. Data[4]    = (unsigned char)((gray_level & 0x07) << 4) |( color & 0x0f);
  155. Data[5]    = attr;
  156. Data[6]    = 0;
  157. RTDWrite(Data);
  158. }
  159. /////////////////////////////////////////////////////////////////////////////////////
  160. //anson
  161. /////////////////////////////////////////////////////////////////////////////////////
  162. void OSD_Fact_Line(unsigned char row, unsigned char col, unsigned char length,
  163.               unsigned char value, unsigned char indicate)
  164. {
  165. unsigned int idata usStart_Addr;
  166. unsigned char idata ucTemp;
  167. usStart_Addr = FONT_SELECT_ADDRESS;
  168. //The address of the first character Cn1 in Row n = FONT_SELECT_ADDRESS + Row0_length + Row1_length +...+Row(n-1)_length
  169. for(ucTemp = 1; ucTemp < row+1; ucTemp ++)
  170. usStart_Addr += FactRow_Info[0][ucTemp];
  171. Data[0] = 5;
  172. Data[1] = Y_INC;
  173. Data[2] = OSD_ADDR_MSB_90;
  174. if( (col+1) > FactRow_Info[0][row + 1]) // if column_start > row_length, then return
  175. return;
  176. else if((col + 1 + length) > FactRow_Info[0][row + 1]) // if column_start + length > row_length, then re-calculate the length
  177. length = FactRow_Info[0][row + 1] - col;
  178. // indicate : 0, 1, 2, 3 set byte 0, 1, 2 and all byte
  179. Data[3] = (unsigned char)( ((usStart_Addr + col)  & 0x0fff) >> 8 ) | (((indicate << 2) + 1) << 4);
  180. Data[4] = (unsigned char)((usStart_Addr + col) & 0x00ff);
  181. Data[5] = 0;
  182. RTDWrite(Data);
  183. Data[0]     = (indicate == 3) ? length * 3 + 3 : length + 3;
  184. Data[1]     = BURST;
  185. Data[2]     = OSD_DATA_92;
  186. Data[3]     = value;
  187. Data[4]     = 0;
  188. RTDWrite(Data);
  189. }
  190. void OSD_Fact_Clear(unsigned char row_start, unsigned char height, unsigned char col_start, unsigned char width)
  191. {
  192. width = width;
  193. if (height)
  194. {
  195. do
  196. {
  197. OSD_Fact_Line(row_start, col_start, FactRow_Info[0][row_start+1], 0x00, 3);
  198. //OSD_Line(row_start, col_start, width, 0x00, 3);
  199. row_start++;
  200. }
  201. while (--height);
  202. }
  203. }
  204. void ShowValue(unsigned char row, unsigned char col,unsigned char value, unsigned char color)
  205. {
  206. unsigned int idata usStart_Addr;
  207. unsigned char idata ucTemp;
  208. usStart_Addr = FONT_SELECT_ADDRESS;
  209. //The address of the first character Cn1 in Row n = FONT_SELECT_ADDRESS + Row0_length + Row1_length +...+Row(n-1)_length
  210. for(ucTemp = 1; ucTemp < row+1; ucTemp ++)
  211. usStart_Addr += FactRow_Info[0][ucTemp];
  212. Data[10] = value/100;
  213. Data[11] = (value - (Data[10]*100))/10;
  214. Data[12] = value - (Data[10]*100) - (Data[11]*10);
  215. if(0 != Data[10])
  216. {
  217. Data[10] += _0_;
  218. Data[11] += _0_;
  219. }
  220. else
  221. {
  222. if(0 != Data[11]) Data[11] += _0_;
  223. }
  224. Data[12] += _0_;
  225. //Byte1
  226. Data[0] = 5;
  227. Data[1] = Y_INC;
  228. Data[2] = OSD_ADDR_MSB_90;
  229. Data[3] = (unsigned char)( ((usStart_Addr + col)  & 0x0fff) >> 8 ) | 0x50;
  230. Data[4] = (unsigned char)((usStart_Addr + col) & 0x00ff);
  231. Data[5] = 0;
  232. RTDWrite(Data);
  233. Data[0]     = 6;
  234. Data[1]     = N_INC;
  235. Data[2]     = OSD_DATA_92;
  236. Data[3]     = Data[10];
  237. Data[4]     = Data[11];
  238. Data[5]     = Data[12];
  239. Data[6]     = 0;
  240. RTDWrite(Data);
  241. //Byte2
  242. Data[0] = 5;
  243. Data[1] = Y_INC;
  244. Data[2] = OSD_ADDR_MSB_90;
  245. Data[3] = (unsigned char)( ((usStart_Addr + col)  & 0x0fff) >> 8 ) | 0x90;
  246. Data[4] = (unsigned char)((usStart_Addr + col) & 0x00ff);
  247. Data[5] = 0;
  248. RTDWrite(Data);
  249. Data[0]     = 6;
  250. Data[1]     = N_INC;
  251. Data[2]     = OSD_DATA_92;
  252. Data[3]     = color;
  253. Data[4]     = color;
  254. Data[5]     = color;
  255. Data[6]     = 0;
  256. RTDWrite(Data);
  257. }
  258. void Value_Adjust(unsigned char *Var, unsigned char Key, unsigned char VMax, unsigned char VMin)
  259. {
  260. if(NOTIFY_LEFT_KEY == Key)
  261. {
  262. if(bKeyTurbo)
  263. *Var   = (*Var < (VMax - 1)) ? (*Var + 2) : VMax;
  264. else
  265. *Var   = (*Var < VMax) ? (*Var + 1) : VMax;
  266. }
  267. else
  268. {
  269. if(bKeyTurbo)
  270. *Var   = (*Var > (VMin + 1)) ? *Var - 2 : VMin;
  271. else
  272. *Var   = (*Var > VMin) ? (*Var - 1) : VMin;
  273. }
  274. }
  275. void SPREAD_Adjust(unsigned char* variable,unsigned char Key)
  276. {
  277. if (NOTIFY_LEFT_KEY == Key)
  278. {
  279. if (15 <= *variable)
  280. return;
  281.  
  282. if (!bKeyTurbo)
  283. *variable   = 15 > *variable ? *variable + 1 : 15;
  284. else
  285. *variable   = 14 > *variable ? *variable + 2 : 15;
  286. }
  287. else
  288. {
  289. if (0 == *variable)
  290. return;
  291. if (!bKeyTurbo)
  292. *variable   = 0 < *variable ? *variable - 1 : 0;
  293. else
  294. *variable   = 1 < *variable ? *variable - 2 : 0;
  295. }
  296. }
  297. /////////////////////////////////////////////////////////////////////////////////////
  298. /////////////////////////////////////////////////////////////////////////////////////
  299. void Get_OSD_Margin(void)
  300. {
  301. unsigned char ucH_Min, ucH_Max, ucV_Max;
  302. #if (DISP_ALIGN)
  303. RTDRead(DH_ACT_STA_27, 0x02, Y_INC);
  304. Data[2] = Data[1] & 0x07;
  305. Data[3] = Data[0];
  306. ucH_Min = (((unsigned int *)Data)[1] / 4) + 1;
  307. ucH_Max = OSD_HMAX;
  308. #else
  309. RTDRead(DH_ACT_END_29, 0x02, Y_INC);
  310. Data[2] = Data[1] & 0x07;
  311. Data[3] = Data[0];
  312. //ucH_Max = ((((unsigned int *)Data)[1] - 312 - 8 - 16) / 4) + 1;
  313. ucH_Max = ((((unsigned int *)Data)[1] - 512) / 4) + 1; 
  314. ucH_Min = OSD_HMIN;
  315. #endif
  316. RTDRead(DV_ACT_END_34, 0x02, Y_INC);
  317. Data[2] = Data[1] & 0x07;
  318. Data[3] = Data[0];
  319. ucV_Max = (((unsigned int *)Data)[1] - DV_ACT_STA_POS - 250 - 14) / 4;
  320. Data[0] = ucH_Min;
  321. Data[1] = ucH_Max;
  322. Data[2] = OSD_VMIN;
  323. Data[3] = ucV_Max;
  324. }
  325. // OSD_Position : Restore OSD position according to global settings
  326. // para : OSD font parameter
  327. // OSD_GLOBAL_BLINK    : 0x10
  328. // OSD_DISP_ZONE_LEFT  : 0x04
  329. // OSD_DISP_ZONE_RIGHT : 0x08
  330. // OSD_ROTATE          : 0x02
  331. // OSD_ENABLE          : 0x01
  332. void OSD_Position(unsigned char para)
  333. {
  334. Get_OSD_Margin();
  335. if (Data[0] > stGUD1.OSD_POSH || Data[1] < stGUD1.OSD_POSH ||
  336. Data[2] > stGUD1.OSD_POSV || Data[3] < stGUD1.OSD_POSV)
  337. {
  338. stGUD1.OSD_POSV = OSD_VMID;
  339. stGUD1.OSD_POSH = OSD_HMID;
  340. Save_GUD1();
  341. }
  342. if(ucOSD_Page_Index == PAGE_Factory) //anson
  343. {
  344. stGUD1.OSD_POSH = 230;
  345. stGUD1.OSD_POSV = 100;
  346. }
  347. Wait_For_Event(EVENT_DEN_STOP);
  348. Data[0]     = 5;
  349. Data[1]     = Y_INC;
  350. Data[2]     = OSD_ADDR_MSB_90;
  351. Data[3]     = 0xc0;
  352. Data[4]     = 0x00;
  353. Data[5]     = 6;
  354. Data[6]     = N_INC;
  355. Data[7]     = OSD_DATA_92;
  356. Data[8]     = stGUD1.OSD_POSV >> 1;
  357. Data[9]     = (unsigned char)(stGUD1.OSD_POSH >> 2);
  358. Data[10]    = ((unsigned char)(stGUD1.OSD_POSH & 0x0003) << 6) | ((stGUD1.OSD_POSV & 0x01) << 5) | para;
  359. //+ (unsigned char)(OSD_Enable[10] & 0x1e) + osd_en;
  360. Data[11]    = 0;
  361. RTDWrite(Data);
  362. }
  363. void OSD_Line(unsigned char row, unsigned char col, unsigned char length,
  364.               unsigned char value, unsigned char indicate)
  365. {
  366. unsigned int idata usStart_Addr;
  367. unsigned char idata ucTemp;
  368. usStart_Addr = FONT_SELECT_ADDRESS;
  369. //The address of the first character Cn1 in Row n = FONT_SELECT_ADDRESS + Row0_length + Row1_length +...+Row(n-1)_length
  370. for(ucTemp = 1; ucTemp < row+1; ucTemp ++)
  371. usStart_Addr += Row_Info[0][ucTemp];
  372. Data[0] = 5;
  373. Data[1] = Y_INC;
  374. Data[2] = OSD_ADDR_MSB_90;
  375. if( (col+1) > Row_Info[0][row + 1]) // if column_start > row_length, then return
  376. return;
  377. else if((col + 1 + length) > Row_Info[0][row + 1]) // if column_start + length > row_length, then re-calculate the length
  378. length = Row_Info[0][row + 1] - col;
  379.     
  380. // indicate : 0, 1, 2, 3 set byte 0, 1, 2 and all byte
  381. Data[3] = (unsigned char)( ((usStart_Addr + col)  & 0x0fff) >> 8 ) | (((indicate << 2) + 1) << 4);
  382. Data[4] = (unsigned char)((usStart_Addr + col) & 0x00ff);
  383. Data[5] = 0;  
  384. RTDWrite(Data);
  385. Data[0]     = (indicate == 3) ? length * 3 + 3 : length + 3;
  386. Data[1]     = BURST; 
  387. Data[2]     = OSD_DATA_92;
  388. Data[3]     = value;
  389. Data[4]     = 0;
  390. RTDWrite(Data);
  391. }     
  392. void OSD_Slider(unsigned char row, unsigned char col, unsigned char length, unsigned char value, unsigned char range,
  393.                 unsigned char color, unsigned char color_slider)
  394. {
  395. unsigned int idata usStart_Addr;
  396. unsigned char idata ucTemp;
  397. unsigned int bound;
  398. usStart_Addr = FONT_SELECT_ADDRESS;
  399. for(ucTemp = 1; ucTemp < row+1; ucTemp ++)
  400. usStart_Addr += Row_Info[0][ucTemp];
  401. length = length -5;
  402. bound   = ((length-2)*6 + 2*3) * value;
  403. // Set color
  404. Data[0] = 6;
  405. Data[1] = Y_INC;
  406. Data[2] = OSD_ADDR_MSB_90;
  407. Data[3] = (unsigned char)((((usStart_Addr + col) >>8 ) & 0x0f ) | 0x90);
  408. Data[4] = (unsigned char)( (usStart_Addr + col) & 0x00ff);
  409. Data[5] = (color << 4) & 0xf0;
  410. Data[6] = 0;
  411. RTDWrite(Data);
  412. Data[0] = 5;
  413. Data[1] = N_INC;
  414. Data[2] = OSD_DATA_92;
  415. Data[3] = (color << 4) & 0xf0;
  416. Data[4] = (color << 4) & 0xf0;
  417. Data[5] = 0;
  418. RTDWrite(Data);
  419. OSD_Line(row,col+5,12,((color_slider<<4) & 0xf0),2);
  420. Data[0] = 6;
  421. Data[1] = Y_INC;
  422. Data[2] = OSD_ADDR_MSB_90;
  423. Data[6] = 0;
  424.   for (row = 0; row < length; row++)
  425.      {
  426. Data[3] = (unsigned char)((((usStart_Addr + col + row + 5) >> 8 ) & 0x0f ) | 0x50);
  427.      Data[4] = (unsigned char)( (usStart_Addr + col + row + 5) & 0x00ff);
  428. if( row == 0 || row == (length-1) )
  429. {
  430. if( bound )
  431. {
  432. if( bound >= (range*3) )
  433. {
  434. Data[5] = (row==0) ? 0x13 : 0x1e;
  435. bound = bound - range*3;
  436. }
  437. else
  438. {
  439.         color   = (bound << 4) / (range*3);
  440. bound = 0;
  441. if (4 > color)
  442. Data[5] = (row==0) ? 0x10 : 0x1b;
  443. else if (8 > color)
  444. Data[5] = (row==0) ? 0x11 : 0x1c;
  445. else if (12 > color)
  446. Data[5] = (row==0) ? 0x12 : 0x1d;
  447. else
  448. Data[5] = (row==0) ? 0x13 : 0x1e;
  449. }
  450. }
  451. else
  452. {
  453. Data[5] = (row==0) ? 0x10 : 0x1b;
  454. }
  455. }
  456. else
  457. {
  458. if( bound )
  459. {
  460. if( bound >= (range*6) )
  461. {
  462. Data[5] = 0x1a;
  463. bound = bound - range*6;
  464. }
  465. else
  466. {
  467. color   = (bound << 4) / (range*6);
  468. bound = 0;
  469. if (1 > color)
  470. Data[5] = 0x14;
  471. else if (4 > color)
  472. Data[5] = 0x15;
  473. else if (6 > color)
  474. Data[5] = 0x16;
  475. else if (9 > color)
  476. Data[5] = 0x17;
  477. else if (11 > color)
  478. Data[5] = 0x18;
  479. else if (14 > color)
  480. Data[5] = 0x19;
  481. else
  482. Data[5] = 0x1a;
  483. }
  484. }
  485. else
  486. {
  487. Data[5] = 0x14;
  488. }
  489. }
  490. RTDWrite(Data);
  491. }
  492. range = value / 10;
  493. row = value - (range * 10); // x1
  494. color = range / 10; // x100
  495. range = range - (color * 10); // x10
  496. row = row + 0x01;
  497. range = (range || color) ? range + 0x01 : 0x00;
  498. color = color ? color + 0x01 : 0x00;
  499. Data[0] = 5;
  500. Data[1] = Y_INC;
  501. Data[2] = OSD_ADDR_MSB_90;
  502. Data[3] = (unsigned char)((((usStart_Addr + col) >>8 ) & 0x0f ) | 0x50);
  503. Data[4] = (unsigned char)( (usStart_Addr + col ) & 0x00ff);
  504. Data[5] = 0;
  505. RTDWrite(Data);
  506. Data[0] = 6;
  507. Data[1] = N_INC;
  508. Data[2] = OSD_DATA_92;
  509. Data[3] = color; // Number x100
  510. Data[4] = range; // Number x10
  511. Data[5] = row; // Number x1
  512. Data[6] = 0;
  513. RTDWrite(Data);
  514. }
  515. void Init_Page(unsigned char index)
  516. {
  517. index = index;
  518. OSD_Position(OSD_ENABLE);
  519. OSD_Clear(5, 11, 15, 1); //Need to be modified case by case.
  520. if( ucOSD_Page_Index == 1)
  521. RTDOSDW(OSD_Window_Setting);
  522. }
  523. void Show_Osd_Page(unsigned char Page_Num,unsigned char* Page_Attr,unsigned char OSD_Table_Num)
  524. {
  525. Init_Page(Page_Num);
  526. RTDOSDW(Page_All_Atb);
  527. RTDOSDW(OSD_PAGE_All_TABLE[0][stGUD1.FUNCTION & 0x07]);
  528. RTDOSDW(Page_Attr);
  529. RTDOSDW(OSD_PAGE_TABLE[OSD_Table_Num][stGUD1.FUNCTION & 0x07]);
  530. Show_Mode();
  531. }
  532. void OSD_Clear(unsigned char row_start, unsigned char height, unsigned char col_start, unsigned char width)
  533. {
  534. width = width;
  535. if (height)
  536. {
  537. do
  538. {
  539. OSD_Line(row_start, col_start, Row_Info[0][row_start+1], 0x00, 3);
  540. //OSD_Line(row_start, col_start, width, 0x00, 3);
  541. row_start++;
  542. }
  543. while (--height);
  544. }
  545. }
  546. void Bright_Contrast_Adjust(unsigned char* variable,unsigned char Key)
  547. {
  548. // if (NOTIFY_RIGHT_KEY == Key)
  549.     if (NOTIFY_LEFT_KEY == Key)
  550. {
  551. if (100 <= *variable)
  552. return;
  553.  
  554. if (KEY_TURBO_ENABLE > ucKey_Issued)
  555. *variable   = 100 > *variable ? *variable + 1 : 100;
  556. else
  557. *variable   = 99 > *variable ? *variable + 2 : 100;
  558. }
  559. else
  560. {
  561. if (0 == *variable)
  562. return;
  563. if (KEY_TURBO_ENABLE > ucKey_Issued)
  564. *variable   = 0 < *variable ? *variable - 1 : 0;
  565. else
  566. *variable   = 1 < *variable ? *variable - 2 : 0;
  567. }
  568. }
  569. void Osd_Change_Item(unsigned char Pess_Key,unsigned char Item_Num)
  570. {
  571. if (ucOSD_Item_Index0)
  572. {
  573. // Select and highlight the next/previous item
  574. //OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
  575. // , 0, 0, 14, 251, 0, 1, 0);
  576. if (NOTIFY_RIGHT_KEY == Pess_Key)
  577. ucOSD_Item_Index0   = (Item_Num == ucOSD_Item_Index0) ? 1 : (ucOSD_Item_Index0 + 1);
  578. else
  579. ucOSD_Item_Index0   = (1 == ucOSD_Item_Index0) ? Item_Num : (ucOSD_Item_Index0 - 1);
  580. // Move window 6
  581. OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
  582. , 1, 1, 14, 251, 0, 1, 25);
  583. }
  584. else
  585. {
  586. // Change to next/previous main page
  587. //OSD_Window( 5, 150, 282, (54 + (ucOSD_Page_Index-1)*(29+4)), (84 + (ucOSD_Page_Index-1)*(29+4))
  588. // , 0, 0, 14, 251, 0, 1, 0);
  589. if (NOTIFY_RIGHT_KEY == Pess_Key)
  590. ucOSD_Page_Index    = GetNextPageIdx(ucOSD_Page_Index);
  591. else
  592. ucOSD_Page_Index    = GetPrevPageIdx(ucOSD_Page_Index);
  593. }
  594. void Show_Mode(void)
  595. {
  596. unsigned int idata usStart_Addr;
  597. unsigned char idata ucTemp;
  598. OSD_Line(3, 12, 15, 0, 1);                       // Attribute
  599. usStart_Addr = FONT_SELECT_ADDRESS;
  600. //The address of the first character Cn1 in Row n = FONT_SELECT_ADDRESS + Row0_length + Row1_length +...+Row(n-1)_length
  601. for(ucTemp = 1; ucTemp < 3+1; ucTemp ++)
  602. usStart_Addr += Row_Info[0][ucTemp];
  603. Data[0] = 5;
  604. Data[1] = Y_INC;
  605. Data[2] = OSD_ADDR_MSB_90;
  606. Data[3] = (unsigned char)( (((usStart_Addr + 12)  & 0x0fff) >> 8 ) | 0x50);
  607. Data[4] = (unsigned char)( (usStart_Addr + 12) & 0x00ff);
  608. Data[5] = 0;
  609. RTDWrite(Data);
  610. switch (ucMode_Curr)
  611. {   
  612. /*
  613. case MODE_NOSIGNAL:     // NO SIGNAL
  614. OSD_Line(11, 2, 24, CHINESE_T <= (stGUD1.FUNCTION & 0x07) ? 0x80 | COLOR_BLUE : COLOR_BLUE, 0);
  615. if ((SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07)) && (VGA_ONLINE != bVGA_CONNECT))
  616. RTDOSDW(OSD_REMK_TABLE[0][stGUD1.FUNCTION & 0x07]);
  617. else
  618. RTDOSDW(OSD_REMK_TABLE[1][stGUD1.FUNCTION & 0x07]);
  619. break;
  620. case MODE_UNDEFINED0:
  621. case MODE_UNDEFINED1:
  622. case MODE_NOSUPPORT:
  623. OSD_Line(11, 2, 24, CHINESE_T <= (stGUD1.FUNCTION & 0x07) ? 0x80 | COLOR_BLUE : COLOR_BLUE, 0);
  624. RTDOSDW(OSD_REMK_TABLE[2][stGUD1.FUNCTION & 0x07]);
  625. break;
  626. case MODE_VIDEO60HZ:    // NTSC 60HZ
  627. OSD_Line(11, 2, 24, COLOR_BLUE, 0);     // Set characters to blue
  628. RTDCodeW(Remark_Mode);
  629. switch(ucAV_Mode)
  630. {
  631. case 0x01:  RTDCodeW(Remark_V60_0); break;
  632. case 0x11:  RTDCodeW(Remark_V60_1); break;
  633. case 0x21:  RTDCodeW(Remark_V60_2); break;
  634. case 0x31:  RTDCodeW(Remark_V60_3); break;
  635. case 0x41:  RTDCodeW(Remark_V60_4); break;
  636. case 0x03:  RTDCodeW(Remark_V60_5); break;
  637. }
  638. break;
  639. case MODE_VIDEO50HZ:    // PAL 50HZ
  640. OSD_Line(11, 2, 24, COLOR_BLUE, 0);     // Set characters to blue
  641. RTDCodeW(Remark_Mode);
  642. switch(ucAV_Mode)
  643. {   
  644. case 0x02:  RTDCodeW(Remark_V50_0); break;
  645. case 0x12:  RTDCodeW(Remark_V50_1); break;
  646. case 0x22:  RTDCodeW(Remark_V50_2); break;
  647. case 0x32:  RTDCodeW(Remark_V50_3); break;
  648. case 0x03:  RTDCodeW(Remark_V50_5); break;
  649. }
  650. break;
  651. case MODE_YUV60HZ:
  652. case MODE_YUV50HZ:
  653. break;
  654. */
  655. default :
  656. //OSD_Line(11, 2, 24, COLOR_BLUE, 0);     // Set characters to blue
  657. {
  658. unsigned int    usHwid;
  659. unsigned char   ucTemp;
  660. usHwid  = usIPH_ACT_WID;
  661. if (SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07))
  662. {
  663. if (MODE_1600x1200x60HZ == ucMode_Curr)
  664. {
  665. usHwid  = 1600;
  666. }
  667. else 
  668. {
  669. if (MODE_1600x1200x60HZ > ucMode_Curr)
  670. {
  671. if (MODE_1280x0960x60HZ <= ucMode_Curr)
  672. usHwid  = 1280;
  673. else if (MODE_1152x0864x75HZ <= ucMode_Curr)
  674. usHwid  = 1152;
  675. }
  676. else
  677. {
  678. if (MODE_USER1600x1200 == ucMode_Curr)
  679. usHwid  = 1600;
  680. else if (MODE_USER1280x960 <= ucMode_Curr)
  681. usHwid  = 1280;
  682. else if (MODE_USER1152x864 <= ucMode_Curr)
  683. usHwid  = 1152;
  684. }
  685. }
  686. //anson 050512
  687. if ((MODE_0640x0400x70HZ == ucMode_Curr)||(MODE_0720x0400x70HZ == ucMode_Curr))
  688. {
  689. if(stGUD1.FUNCTION & 0x10)
  690. usHwid  = 640;
  691. else
  692. usHwid  = 720;
  693. }
  694. }
  695. //RTDCodeW(Remark_Mode);
  696. Data[0] = 12;
  697. Data[1] = N_INC;
  698. Data[2] = OSD_DATA_92;
  699. ucTemp  = usHwid / 100;
  700. if (10 <= ucTemp)
  701. {
  702. Data[3] = _1_;
  703. Data[4] = ucTemp - 10 + _0_;
  704. }
  705. else
  706. {
  707. Data[3] = 0;
  708. Data[4] = ucTemp + _0_;
  709. }
  710. ucTemp  = usHwid - ((unsigned int)100 * ucTemp);
  711.         
  712. Data[5] = ucTemp / 10;
  713. Data[6] = ucTemp - (10 * Data[5]) + _0_;
  714. Data[5] = Data[5] + _0_;
  715. Data[7] = 0x0e;
  716. ucTemp      = usIPV_ACT_LEN / 100;
  717. Data[12]    = usIPV_ACT_LEN - ((unsigned int)100 * ucTemp);
  718. if (10 <= ucTemp)
  719. {
  720. Data[0]     = 13;
  721. Data[8]     = _1_;
  722. Data[9]     = ucTemp - 10 + _0_;
  723. Data[10]    = Data[12] / 10;
  724. Data[11]    = Data[12] - (10 * Data[10]) + _0_;
  725. Data[10]    = Data[10] + _0_;
  726. Data[12]    = 0x00;
  727. Data[13]    = 0;
  728. }
  729. else
  730. {
  731. Data[8]     = ucTemp + _0_;
  732. Data[9]     = Data[12] / 10;
  733. Data[10]    = Data[12] - (10 * Data[9]) + _0_;
  734. Data[9]     = Data[9] + _0_;
  735. Data[11]    = 0x00;
  736. Data[12]    = 0;
  737. }
  738. Data[12]    = 0;
  739. RTDWrite(Data);
  740. // Show Refresh Rate
  741. //RTDCodeW(Remark_Rate);
  742. Data[0] = 7;
  743. Data[1] = N_INC;
  744. Data[2] = OSD_DATA_92;
  745. Data[3] = ucRefresh / 10;
  746. Data[4] = ucRefresh - (Data[3] * 10) + _0_;
  747. Data[3] = Data[3] + _0_;
  748. Data[5] = 0x27;
  749. Data[6] = 0x59;
  750. Data[7] = 0;
  751. RTDWrite(Data);
  752. if (10 <= ucTemp)
  753. OSD_Line( 3, 21, 1, 0x8c, 0);
  754. else
  755. OSD_Line( 3, 20, 1, 0x8c, 0);
  756. }
  757. break;
  758. }
  759. }   
  760. ///////////////////////////////////////////////////////////////////////////////////////////
  761. //anson
  762. ///////////////////////////////////////////////////////////////////////////////////////////
  763. void FACTORY_Key_Key(void)
  764. {
  765. ucOSD_Page_Index = PAGE_Factory;
  766. ucOSD_Item_Index0 = PAGEFact_ITEM_Recall;
  767. }
  768. ///////////////////////////////////////////////////////////////////////////////////////////
  769. ///////////////////////////////////////////////////////////////////////////////////////////
  770. void Page0_Left_Right_Key(unsigned char Key)
  771. {
  772. //    RTDSetByte(HOSTCTRL_02, 0x40);  // Wake RTD up
  773. // Although you can add ending animation here, I don't think it is necessary.
  774. //    RTDSetBit(OVL_CTRL_6D, 0xfe, 0x00);
  775. //    RTDOSDW(OSD_Reset);            // Clear OSD
  776. //usOSD_Timer         = 5;     // 20 sec
  777.     if (!b_rgb_VOLUME_STATUS)
  778.     {
  779.       OSD_Position(OSD_ENABLE);
  780.       RTDOSDW(rgb_OSD_VOLUME);
  781. RTDOSDW(strTabVOLUME_Atb[stGUD1.FUNCTION & 0x07]); //anson
  782.       RTDSetBit(OVL_CTRL_6D, 0xfe, 0x01);
  783.       b_rgb_VOLUME_STATUS = 1;
  784.     }
  785. //OSD_Window( 5, 10, 136, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  786. if(NOTIFY_LEFT_KEY == Key)
  787. {
  788.         if (stGUD3.VOLUME > 0x00) stGUD3.VOLUME--;
  789.         SetVolume();
  790.         Save_GUD3();
  791. rgb_OSD_Slider(0, 7, 24, 0x1f - stGUD3.VOLUME, 0x1f, 4, 14);
  792. }
  793. else if(NOTIFY_RIGHT_KEY == Key)
  794. {
  795.         if (stGUD3.VOLUME < 0x1f) stGUD3.VOLUME++;
  796.         SetVolume();
  797.         Save_GUD3();
  798. rgb_OSD_Slider(0, 7, 24, 0x1f - stGUD3.VOLUME, 0x1f, 4, 14);
  799.     }
  800. }
  801. void Page0_Enter_Key(void)
  802. {
  803. if((stGUD3.TV_SETTING & 0x08) == 0x08 )//Factory Mode //anson
  804. {
  805. //Into Factory mode
  806. ucOSD_Page_Index    = PAGE_Factory;
  807. ucOSD_Item_Index0   = PAGEFact_ITEM_Recall;
  808. ucOSD_Item_Index1   = 0;
  809. ucOSD_Item_Index2   = 0;
  810. }
  811. else
  812. {
  813. // Change to OSD Main Page 1 and Main Program will show it
  814. ucOSD_Page_Index    = 1;
  815. ucOSD_Item_Index0   = 0;
  816. ucOSD_Item_Index1   = 0;
  817. ucOSD_Item_Index2   = 0;
  818. b_rgb_VOLUME_STATUS = 0;
  819. }
  820. }
  821. void Page0_LR_Key(void)
  822. {
  823. // Go to Hidden Function Page
  824. if (SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07))
  825. {
  826. ucOSD_Page_Index    = 8;
  827. ucOSD_Item_Index0   = 1;
  828. ucOSD_Item_Index1   = 0;
  829. ucOSD_Item_Index2   = 0;
  830. }
  831. }
  832. void Page1_Enter_Key(void)
  833. {
  834. if (0 == ucOSD_Item_Index0)
  835. {
  836. if (MODE_NOSIGNAL != ucMode_Curr && MODE_NOSUPPORT != ucMode_Curr)
  837. {
  838. // Select and highlight the first item
  839. ucOSD_Item_Index0   = PAGE1_ITEM_CONTRAST;
  840. ucOSD_Item_Index1   = 0;
  841. //Enable window 6 and draw it
  842. //OSD_Window( 6, 150, 282, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  843. // win_no, row_start, row_end,col_start,col_end, width, height, color, color_sb, gradient, gray_level, attr
  844.             OSD_Window( 6, 150, 282, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  845. }
  846. }
  847. else
  848. {
  849. if (ucOSD_Item_Index1)
  850. {
  851. // Leave the item and reset text color
  852. switch (ucOSD_Item_Index0)
  853. {
  854. case PAGE1_ITEM_AUTOBAL :
  855.                     if (ucOSD_Item_Index1 == 1 ) //1 : Yes  ,   2 : No
  856.                     {
  857. if (ERROR_INPUT == Auto_Balance())
  858. {
  859. ucMode_Curr = MODE_OSDFORCE;
  860. return ;
  861. }
  862.                     }
  863. OSD_Line( 13, 36 + (ucOSD_Item_Index1-1)*(6+1), 4, 0x40, 2);
  864. break;
  865. case PAGE1_ITEM_CONTRAST :
  866. // Redraw slider and make the number become black.
  867. OSD_Slider(5, 31, 17, stGUD0.CONTRAST, 100, 4, 14);
  868. break;
  869. case PAGE1_ITEM_BRIGHT :
  870. // Redraw slider and make the number become black.
  871. OSD_Slider(7, 31, 17, stGUD0.BRIGHT, 100, 4, 14);
  872. break;
  873. case PAGE1_ITEM_COLORTEMP :
  874. //Set words color to black
  875. OSD_Line( 11, 36 + (ucOSD_Item_Index1-1)*(4+1), 4, 0x40, 2);
  876. break;
  877. case PAGE1_ITEM_GAMMA :
  878. //Set words color to black
  879. OSD_Line( 9, 36 + (ucOSD_Item_Index1-1)*(2+1), 1, 0x40, 2);
  880. break;
  881. }
  882. ucOSD_Item_Index1   = 0;
  883. }
  884. else
  885. {
  886. if (PAGE1_ITEM_EXIT == ucOSD_Item_Index0)
  887. {
  888. // Disable highlight window 6
  889. OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
  890. , 0, 0, 14, 251, 0, 1, 0);
  891. // De-select the page item and disable the hightlight window
  892. ucOSD_Item_Index0   = 0;
  893. ucOSD_Item_Index1   = 0;
  894. }
  895. else if (MODE_NOSIGNAL != ucMode_Curr && MODE_NOSUPPORT != ucMode_Curr)
  896. {
  897. switch (ucOSD_Item_Index0)
  898. {
  899. case PAGE1_ITEM_AUTOBAL :
  900.                         ucOSD_Item_Index1  = 2;
  901. OSD_Line( 13, 36 + (ucOSD_Item_Index1-1)*(6+1), 4, 0x20, 2);
  902. break;
  903. case PAGE1_ITEM_CONTRAST :
  904. ucOSD_Item_Index1   = 1;
  905. // Redraw slider and make the number become Red.
  906. OSD_Slider(5, 31, 17, stGUD0.CONTRAST, 100, 2, 14);
  907. break;
  908. case PAGE1_ITEM_BRIGHT :
  909. ucOSD_Item_Index1   = 1;
  910. // Redraw slider and make the number become Red.
  911. OSD_Slider(7, 31, 17, stGUD0.BRIGHT, 100, 2, 14);
  912. break;
  913. case PAGE1_ITEM_COLORTEMP :
  914. ucOSD_Item_Index1 = ((stGUD1.INPUT_SOURCE & 0x18) >> 3) + 1;
  915. //Here we can only change the color in Byte 2 for necessary words
  916. OSD_Line( 11, 36 + (ucOSD_Item_Index1-1)*(4+1), 4, 0x20, 2);
  917. break;
  918. case PAGE1_ITEM_GAMMA :
  919. ucOSD_Item_Index1   = ((stGUD1.FUNCTION >> 5) & 0x03) + 1;
  920. //Here we can only change the color in Byte 2 for necessary words
  921. OSD_Line( 9, 36 + (ucOSD_Item_Index1-1)*(2+1), 1, 0x20, 2);
  922. break;
  923. case PAGE1_ITEM_RGBADJ :
  924. OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
  925. , 0, 0, 14, 251, 0, 1, 0);
  926. ucOSD_Item_Index1   = PAGE1B_ITEM_RED;
  927. ucOSD_Item_Index2   = 0;
  928. OSD_Proc_B(NOTIFY_SHOW);       // Show the sub-page
  929. break;
  930. }
  931. }
  932. }
  933. }
  934. }
  935. void Page1_Left_Right_Key(unsigned char Key)
  936. {
  937. if (ucOSD_Item_Index1)
  938. {
  939. switch (ucOSD_Item_Index0)
  940. {
  941.      case PAGE1_ITEM_AUTOBAL :
  942. //            ucOSD_Item_Index1   = (NOTIFY_LEFT_KEY == Key) ? 1 : 2;
  943.             ucOSD_Item_Index1   = (NOTIFY_RIGHT_KEY == Key) ? 1 : 2;
  944. OSD_Line( 13, 36, 14, 0x40, 2); //Set color to black
  945. OSD_Line( 13, 36 + (ucOSD_Item_Index1-1)*(6+1), 4, 0x20, 2);
  946. break;
  947. case PAGE1_ITEM_CONTRAST :
  948. Bright_Contrast_Adjust(&stGUD0.CONTRAST,Key);
  949. OSD_Slider(5, 31, 17, stGUD0.CONTRAST, 100, 2, 14);
  950. #if(ANALOG_CONTRAST)
  951. if((stGUD1.INPUT_SOURCE & 0x07) == SOURCE_VGA)
  952. SetADC_Gain();
  953. else
  954. Set_Bright_Contrast();
  955. #else
  956. Set_Bright_Contrast();
  957. #endif
  958. Save_GUD0();
  959. break;
  960. case PAGE1_ITEM_BRIGHT :
  961. Bright_Contrast_Adjust(&stGUD0.BRIGHT,Key);
  962. OSD_Slider(7, 31, 17, stGUD0.BRIGHT, 100, 2, 14);
  963. Set_Bright_Contrast();
  964. Save_GUD0();
  965. break;
  966. case PAGE1_ITEM_COLORTEMP:
  967. // if(NOTIFY_RIGHT_KEY == Key)
  968. if(NOTIFY_LEFT_KEY == Key)
  969. ucOSD_Item_Index1 = (ucOSD_Item_Index1 == 4) ? 4 : ucOSD_Item_Index1 + 1;
  970. else
  971. ucOSD_Item_Index1 = (ucOSD_Item_Index1 == 1) ? 1 : ucOSD_Item_Index1 - 1;
  972. stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xe7 ) | ((ucOSD_Item_Index1 - 1) << 3);
  973. //Here we can only change the color in Byte 2 for necessary words
  974. OSD_Line( 11, 36, 20, 0x40, 2); //Set color to black
  975. OSD_Line( 11, 36 + (ucOSD_Item_Index1-1)*(4+1), 4, 0x20, 2);
  976. Set_Bright_Contrast();
  977. Save_GUD1();
  978. break;
  979. case PAGE1_ITEM_GAMMA :
  980. // if (NOTIFY_RIGHT_KEY == Key)
  981. if (NOTIFY_LEFT_KEY == Key)
  982. {
  983. if (4 <= ucOSD_Item_Index1)
  984. break;
  985. ucOSD_Item_Index1   = ucOSD_Item_Index1 + 1;
  986. }
  987. else
  988. {
  989. if (1 >= ucOSD_Item_Index1)
  990. break;
  991. ucOSD_Item_Index1   = ucOSD_Item_Index1 - 1;
  992. }
  993. stGUD1.FUNCTION = (stGUD1.FUNCTION & 0x9f) | ((ucOSD_Item_Index1 - 1) << 5);
  994. //Here we can only change the color in Byte 2 for necessary words
  995. OSD_Line( 9, 36, 14, 0x40, 2); //Set color to black
  996. OSD_Line( 9, 36 + (ucOSD_Item_Index1-1)*(2+1), 1, 0x20, 2);
  997. Set_Gamma();
  998. Save_GUD1();
  999. break;
  1000.             
  1001. }
  1002. }
  1003. else
  1004. {
  1005. Osd_Change_Item(Key,PAGE1_ITEM_NUM);
  1006. }
  1007. }
  1008. void Page1_Show(void)
  1009. {
  1010. Show_Osd_Page(0,Page1_Atb,0);
  1011. //Set Window 5 to select "Colour"
  1012. OSD_Window( 5, 10, 136, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  1013. if (MODE_NOSIGNAL == ucMode_Curr || MODE_NOSUPPORT == ucMode_Curr)
  1014. {
  1015. //ucOSD_Item_Index0   = 0;
  1016. //ucOSD_Item_Index1   = 0;
  1017. }
  1018. OSD_Slider(5, 31, 17, stGUD0.CONTRAST, 100, 4, 14);
  1019. OSD_Slider(7, 31, 17, stGUD0.BRIGHT, 100, 4, 14);
  1020. switch (ucOSD_Item_Index0)
  1021. {
  1022. case PAGE1_ITEM_CONTRAST :
  1023. break;
  1024. case PAGE1_ITEM_BRIGHT :
  1025. break;
  1026. case PAGE1_ITEM_GAMMA :
  1027. break;
  1028. case PAGE1_ITEM_RGBADJ :
  1029. OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
  1030. , 1, 1, 14, 251, 0, 1, 25);
  1031. break;
  1032. }
  1033. }
  1034. void Page1B_Enter_Key(void)
  1035. {
  1036. ucOSD_Page_Index = 7;
  1037. if (PAGE1B_ITEM_EXIT == ucOSD_Item_Index1)
  1038. {
  1039. // De-select the page item and disable the hightlight window
  1040. OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
  1041. , 0, 0, 14, 251, 0, 1, 0);
  1042. ucOSD_Item_Index1   = 0;
  1043. ucOSD_Item_Index2   = 0;
  1044. }
  1045. else
  1046. {
  1047. if (ucOSD_Item_Index2)
  1048. {
  1049. ucOSD_Item_Index2   = 0; // Leave the item
  1050. switch (ucOSD_Item_Index1)
  1051. {
  1052. case PAGE1B_ITEM_RED :
  1053. OSD_Slider(5, 31, 17, stGUD0.RTD_R_CONTRAST, 100, 4, 2);
  1054. break;
  1055. case PAGE1B_ITEM_GREEN :
  1056. OSD_Slider(7, 31, 17, stGUD0.RTD_G_CONTRAST, 100, 4, 12);
  1057. break;
  1058. case PAGE1B_ITEM_BLUE :
  1059. OSD_Slider(9, 31, 17, stGUD0.RTD_B_CONTRAST, 100, 4, 3);
  1060. break;
  1061. }
  1062. }
  1063. else if (MODE_NOSIGNAL != ucMode_Curr && MODE_NOSUPPORT != ucMode_Curr)
  1064. {
  1065. ucOSD_Item_Index2   = 1; // Enter the item
  1066. //Draw the selected slider
  1067. switch (ucOSD_Item_Index1)
  1068. {
  1069. case PAGE1B_ITEM_RED :
  1070. OSD_Slider(5, 31, 17, stGUD0.RTD_R_CONTRAST, 100, 2, 2);
  1071. break;
  1072. case PAGE1B_ITEM_GREEN :
  1073. OSD_Slider(7, 31, 17, stGUD0.RTD_G_CONTRAST, 100, 12, 12);
  1074. break;
  1075. case PAGE1B_ITEM_BLUE :
  1076. OSD_Slider(9, 31, 17, stGUD0.RTD_B_CONTRAST, 100, 3, 3);
  1077. break;
  1078. }
  1079. }
  1080. }
  1081. ucOSD_Page_Index = 1;
  1082. }
  1083. void Page1B_Left_Right_Key(unsigned char Key)
  1084. {
  1085. ucOSD_Page_Index = 7;
  1086. if (ucOSD_Item_Index2)
  1087. {
  1088. switch (ucOSD_Item_Index1)
  1089. {
  1090. case PAGE1B_ITEM_RED :
  1091. Bright_Contrast_Adjust(&stGUD0.RTD_R_CONTRAST,Key);
  1092. OSD_Slider(5, 31, 17, stGUD0.RTD_R_CONTRAST, 100, 2, 2);
  1093. break;
  1094. case PAGE1B_ITEM_GREEN :
  1095. Bright_Contrast_Adjust(&stGUD0.RTD_G_CONTRAST,Key);
  1096. OSD_Slider(7, 31, 17, stGUD0.RTD_G_CONTRAST, 100, 12, 12);
  1097. break;
  1098. case PAGE1B_ITEM_BLUE :
  1099. Bright_Contrast_Adjust(&stGUD0.RTD_B_CONTRAST,Key);
  1100. OSD_Slider(9, 31, 17, stGUD0.RTD_B_CONTRAST, 100, 3, 3);
  1101. break;
  1102. }
  1103. Set_Bright_Contrast();
  1104. Save_GUD0();
  1105. }
  1106. else
  1107. {
  1108. // Select and highlight the next/previous item
  1109. if (NOTIFY_RIGHT_KEY == Key)
  1110. ucOSD_Item_Index1   = (PAGE1B_ITEM_NUM == ucOSD_Item_Index1) ? 1 : (ucOSD_Item_Index1 + 1);
  1111. else
  1112. ucOSD_Item_Index1   = (1 == ucOSD_Item_Index1) ? PAGE1B_ITEM_NUM : (ucOSD_Item_Index1 - 1);
  1113.             
  1114. OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index1-1)*(29+4)), (84 + (ucOSD_Item_Index1-1)*(29+4))
  1115. , 1, 1, 14, 251, 0, 1, 25);
  1116. }
  1117. ucOSD_Page_Index = 1;
  1118. }
  1119. void Page1B_Show(void)
  1120. {
  1121. Show_Osd_Page(0,Page7_Atb,6);
  1122. // Set window 6 to Highlight the select item
  1123. OSD_Window( 6, 150, 282, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  1124. if (MODE_NOSIGNAL == ucMode_Curr || MODE_NOSUPPORT == ucMode_Curr)      
  1125. ucOSD_Item_Index2   = 0;
  1126. if (0 == ucOSD_Item_Index2)
  1127. {
  1128. ucOSD_Page_Index = 7;
  1129. OSD_Slider(5, 31, 17, stGUD0.RTD_R_CONTRAST, 100, 4, 2);
  1130. OSD_Slider(7, 31, 17, stGUD0.RTD_G_CONTRAST, 100, 4, 12);
  1131. OSD_Slider(9, 31, 17, stGUD0.RTD_B_CONTRAST, 100, 4, 3);
  1132. ucOSD_Page_Index = 1;
  1133. }
  1134. else
  1135. {
  1136. //Set the active slider (Red, Greed, Blue)
  1137. /*
  1138. OSD_Slider(11, 2, 20,
  1139. (PAGE1B_ITEM_RED == ucOSD_Item_Index1) ? stGUD0.RTD_R_CONTRAST 
  1140. : (PAGE1B_ITEM_GREEN == ucOSD_Item_Index1) ? stGUD0.RTD_G_CONTRAST
  1141. : stGUD0.RTD_B_CONTRAST, 100, 0x61);
  1142. */
  1143. }
  1144. }
  1145. void Page2_Enter_Key()
  1146. {
  1147. if (0 == ucOSD_Item_Index0)
  1148. {
  1149. if (MODE_NOSIGNAL != ucMode_Curr && MODE_NOSUPPORT != ucMode_Curr)
  1150. {
  1151. // Select and highlight the first item
  1152. ucOSD_Item_Index0   = PAGE2_ITEM_POSH;
  1153. ucOSD_Item_Index1   = 0;
  1154. //Enable Window 6 and Draw it
  1155. OSD_Window( 6, 150, 282, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  1156. }
  1157. }
  1158. else
  1159. {
  1160. if (ucOSD_Item_Index1)
  1161. {
  1162. switch (ucOSD_Item_Index0)
  1163. {
  1164. case PAGE2_ITEM_POSH :
  1165. OSD_Slider(5, 31, 17, ucH_Max_Margin - stMUD.H_POSITION, ucH_Max_Margin - ucH_Min_Margin, 4, 14);
  1166. break;
  1167. case PAGE2_ITEM_POSV :
  1168. OSD_Slider(7, 31, 17, (unsigned int)(stMUD.V_POSITION - ucV_Min_Margin) * 50 / (128 - ucV_Min_Margin), 100, 4, 14);
  1169. break;
  1170. case PAGE2_ITEM_PHASE :
  1171. #if(MORE_PHASE)
  1172. OSD_Slider(11, 31, 17, stMUD.PHASE, 127, 4, 14);
  1173. #else
  1174. OSD_Slider(11, 31, 17, (stMUD.PHASE & 0x7c) >> 2, 31, 4, 14);
  1175. #endif
  1176. break;
  1177. case PAGE2_ITEM_CLOCK :
  1178. #if(ALIGN_LEFT == CLOCK_ALIGN)
  1179.                     OSD_Slider(13, 31, 17, stMUD.CLOCK - 78, 100, 4, 14);
  1180. #else
  1181. OSD_Slider(13, 31, 17, stMUD.CLOCK - 28, 200, 4, 14);
  1182. #endif
  1183. break;
  1184. case PAGE2_ITEM_SHARP :
  1185. OSD_Line( 9, 36 + (ucOSD_Item_Index1-1)*(2+1), 1, 0x40, 2);
  1186. break;
  1187. }
  1188. ucOSD_Item_Index1   = 0;    // Leave the item
  1189. }
  1190. else
  1191. {
  1192. if (PAGE2_ITEM_EXIT == ucOSD_Item_Index0)
  1193. {
  1194. // Disable Window 6 and Draw it
  1195. OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
  1196. , 0, 0, 14, 251, 0, 1, 0);
  1197. // De-select the page item and disable the hightlight window
  1198. ucOSD_Item_Index0   = 0;
  1199. ucOSD_Item_Index1   = 0;
  1200. }
  1201. else if (MODE_NOSIGNAL != ucMode_Curr && MODE_NOSUPPORT != ucMode_Curr)
  1202. {
  1203. if (SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07) || PAGE2_ITEM_SHARP == ucOSD_Item_Index0)
  1204. {
  1205. switch (ucOSD_Item_Index0)
  1206. {
  1207. case PAGE2_ITEM_POSH :
  1208. ucOSD_Item_Index1   = 1;    // Enter the item
  1209. OSD_Slider(5, 31, 17, ucH_Max_Margin - stMUD.H_POSITION, ucH_Max_Margin - ucH_Min_Margin, 2, 14);
  1210. break;
  1211. case PAGE2_ITEM_POSV :
  1212. ucOSD_Item_Index1   = 1;    // Enter the item
  1213. OSD_Slider(7, 31, 17, (unsigned int)(stMUD.V_POSITION - ucV_Min_Margin) * 50 / (128 - ucV_Min_Margin), 100, 2, 14);
  1214. break;
  1215. case PAGE2_ITEM_PHASE :
  1216. ucOSD_Item_Index1   = 1;    // Enter the item
  1217. #if(MORE_PHASE)
  1218. OSD_Slider(11, 31, 17, stMUD.PHASE, 127, 2, 14);
  1219. #else
  1220. OSD_Slider(11, 31, 17, (stMUD.PHASE & 0x7c) >> 2, 31, 2, 14);
  1221. #endif
  1222. break;
  1223. case PAGE2_ITEM_CLOCK :
  1224. ucOSD_Item_Index1   = 1;    // Enter the item
  1225. #if(ALIGN_LEFT == CLOCK_ALIGN)
  1226.                             OSD_Slider(13, 31, 17, stMUD.CLOCK - 78, 100, 2, 14);
  1227. #else
  1228. OSD_Slider(13, 31, 17, stMUD.CLOCK - 28, 200, 2, 14);
  1229. #endif
  1230. break;
  1231. case PAGE2_ITEM_SHARP :
  1232. ucOSD_Item_Index1   = stGUD1.FILTER + 1;
  1233. OSD_Line( 9, 36 + (ucOSD_Item_Index1-1)*(2+1), 1, 0x20, 2);
  1234. break;
  1235. }
  1236. }
  1237. }
  1238. }
  1239. }
  1240. }
  1241. void Page2_Left_Right_Key(unsigned char Key)
  1242. {
  1243. if (ucOSD_Item_Index1)
  1244. {
  1245. switch (ucOSD_Item_Index0)
  1246. {
  1247. case PAGE2_ITEM_POSH :
  1248. // if (NOTIFY_RIGHT_KEY == Key)
  1249. if (NOTIFY_LEFT_KEY == Key)
  1250. {
  1251. if (ucH_Min_Margin >= stMUD.H_POSITION)
  1252. break;
  1253. if (KEY_TURBO_ENABLE > ucKey_Issued)
  1254. stMUD.H_POSITION    = stMUD.H_POSITION > ucH_Min_Margin ? stMUD.H_POSITION - 1 : ucH_Min_Margin;
  1255. else
  1256. stMUD.H_POSITION    = stMUD.H_POSITION > (ucH_Min_Margin + 2) ? stMUD.H_POSITION - 3 : ucH_Min_Margin;
  1257. }
  1258. else
  1259. {
  1260. if (ucH_Max_Margin <= stMUD.H_POSITION)
  1261. break;
  1262. if (KEY_TURBO_ENABLE > ucKey_Issued)
  1263. stMUD.H_POSITION    = stMUD.H_POSITION < ucH_Max_Margin ? stMUD.H_POSITION + 1 : ucH_Max_Margin;
  1264. else
  1265. stMUD.H_POSITION    = stMUD.H_POSITION < (ucH_Max_Margin - 2) ? stMUD.H_POSITION + 3 : ucH_Max_Margin;
  1266. }
  1267. OSD_Slider(5, 31, 17, ucH_Max_Margin - stMUD.H_POSITION, ucH_Max_Margin - ucH_Min_Margin, 2, 14);
  1268. Set_H_Position();
  1269. Set_Phase(stMUD.PHASE);
  1270. Save_MUD(ucMode_Curr);
  1271. break;
  1272. case PAGE2_ITEM_POSV :
  1273. // if (NOTIFY_RIGHT_KEY == Key)
  1274. if (NOTIFY_LEFT_KEY == Key)
  1275. {
  1276. if ((unsigned int)256 - ucV_Min_Margin <= stMUD.V_POSITION)
  1277. break;
  1278. stMUD.V_POSITION    += 1;
  1279. }
  1280. else
  1281. {
  1282. if (ucV_Min_Margin >= stMUD.V_POSITION)
  1283. break;
  1284. stMUD.V_POSITION    -= 1;
  1285. }
  1286. OSD_Slider(7, 31, 17, (unsigned int)(stMUD.V_POSITION - ucV_Min_Margin) * 50 / (128 - ucV_Min_Margin), 100, 2, 14);
  1287. Set_V_Position();
  1288. Save_MUD(ucMode_Curr);
  1289. break;
  1290. case PAGE2_ITEM_PHASE :
  1291. #if(MORE_PHASE)
  1292. // if (NOTIFY_RIGHT_KEY == Key)
  1293. if (NOTIFY_LEFT_KEY == Key)
  1294. {
  1295. if (0x7f <= stMUD.PHASE)
  1296. break;
  1297. stMUD.PHASE += 1;
  1298. }
  1299. else
  1300. {
  1301. if (0x00 == stMUD.PHASE)
  1302. break;
  1303. stMUD.PHASE -= 1;
  1304. }
  1305. OSD_Slider(11, 31, 17, stMUD.PHASE, 127, 2, 14);
  1306. #else
  1307. stMUD.PHASE     &= 0x7c;
  1308. // if (NOTIFY_RIGHT_KEY == Key)
  1309. if (NOTIFY_LEFT_KEY == Key)
  1310. {
  1311. if (0x7c <= stMUD.PHASE)
  1312. break;
  1313. stMUD.PHASE += 4;
  1314. }
  1315. else
  1316. {
  1317. if (0x00 == stMUD.PHASE)
  1318. break;
  1319. stMUD.PHASE -= 4;
  1320. }
  1321. OSD_Slider(11, 31, 17, (stMUD.PHASE & 0x7c) >> 2, 31, 2, 14);
  1322. #endif
  1323. Set_Phase(stMUD.PHASE);
  1324. Save_MUD(ucMode_Curr);
  1325. break;
  1326. case PAGE2_ITEM_CLOCK :
  1327. #if(ALIGN_LEFT == CLOCK_ALIGN)
  1328. // if (NOTIFY_RIGHT_KEY == Key)
  1329. if (NOTIFY_LEFT_KEY == Key)
  1330. {
  1331. if (178 <= stMUD.CLOCK)
  1332. break;
  1333. if (KEY_TURBO_ENABLE > ucKey_Issued)
  1334. stMUD.CLOCK = (177 >= stMUD.CLOCK) ? stMUD.CLOCK + 1 : 178;
  1335. else
  1336. stMUD.CLOCK = (176 >= stMUD.CLOCK) ? stMUD.CLOCK + 2 : 178;
  1337.                     
  1338. Set_Clock();
  1339. Set_H_Position();
  1340. }
  1341. else
  1342. {
  1343. if (78 >= stMUD.CLOCK)
  1344. break;
  1345. if (KEY_TURBO_ENABLE > ucKey_Issued)
  1346. stMUD.CLOCK = (79 <= stMUD.CLOCK) ? stMUD.CLOCK - 1 : 78;
  1347. else
  1348. stMUD.CLOCK = (80 <= stMUD.CLOCK) ? stMUD.CLOCK - 2 : 78;
  1349. Set_H_Position();
  1350. Set_Clock();
  1351. }
  1352. OSD_Slider(13, 31, 17, stMUD.CLOCK - 78, 100, 2, 14);
  1353. #else
  1354. // if (NOTIFY_RIGHT_KEY == Key)
  1355. if (NOTIFY_LEFT_KEY == Key)
  1356. {
  1357. if (228 <= stMUD.CLOCK)
  1358. break;
  1359. if (KEY_TURBO_ENABLE > ucKey_Issued)
  1360. stMUD.CLOCK = (227 >= stMUD.CLOCK) ? stMUD.CLOCK + 1 : 228;
  1361. else
  1362. stMUD.CLOCK = (226 >= stMUD.CLOCK) ? stMUD.CLOCK + 2 : 228;
  1363.                     
  1364. Set_Clock();
  1365. Set_H_Position();
  1366. }
  1367. else
  1368. {
  1369. if (28 >= stMUD.CLOCK)
  1370. break;
  1371. if (KEY_TURBO_ENABLE > ucKey_Issued)
  1372. stMUD.CLOCK = (29 <= stMUD.CLOCK) ? stMUD.CLOCK - 1 : 28;
  1373. else
  1374. stMUD.CLOCK = (30 <= stMUD.CLOCK) ? stMUD.CLOCK - 2 : 28;
  1375. Set_H_Position();
  1376. Set_Clock();
  1377. }
  1378. OSD_Slider(13, 31, 17, stMUD.CLOCK - 28, 200, 2, 14);
  1379. #endif
  1380. Save_MUD(ucMode_Curr);
  1381. break;
  1382. case PAGE2_ITEM_SHARP :
  1383. // if (NOTIFY_RIGHT_KEY == Key)
  1384. if (NOTIFY_LEFT_KEY == Key)
  1385. {
  1386. if (5 <= ucOSD_Item_Index1)
  1387. break;
  1388. ucOSD_Item_Index1   = ucOSD_Item_Index1 + 1;
  1389. }
  1390. else
  1391. {
  1392. if (1 >= ucOSD_Item_Index1)
  1393. break;
  1394. ucOSD_Item_Index1   = ucOSD_Item_Index1 - 1;
  1395. }
  1396. OSD_Line( 9, 36, 14, 0x40, 2); //Set color to black
  1397. OSD_Line( 9, 36 + (ucOSD_Item_Index1-1)*(2+1), 1, 0x20, 2);
  1398. stGUD1.FILTER    = ucOSD_Item_Index1 - 1;
  1399. Sharpness();
  1400.                 
  1401. if((usIPH_ACT_WID == 1280) && (DISP_SIZE == DISP_1280x1024) && (stGUD1.FILTER == 0x02))
  1402. RTDSetBit(SCALE_CTRL_15, 0xff, 0x01);   // Turn on H scale-up
  1403. else if((usIPH_ACT_WID == 1280) && (DISP_SIZE == DISP_1280x1024) && (stGUD1.FILTER != 0x02))
  1404. RTDSetBit(SCALE_CTRL_15, 0xfe, 0x00);   // Turn off H scale-up
  1405.                  Save_GUD1();
  1406. break;
  1407. }
  1408. }
  1409. else
  1410. {
  1411. Osd_Change_Item(Key,PAGE2_ITEM_NUM);
  1412. }
  1413. }
  1414. void Page2_Show()
  1415. {
  1416. Show_Osd_Page(1,Page2_Atb,1);
  1417. //Set Window 5 to select "Picture"
  1418. OSD_Window( 5, 10, 136, 87, 117, 1, 1, 14, 251, 0, 1, 25);
  1419. if (MODE_NOSIGNAL == ucMode_Curr || MODE_NOSUPPORT == ucMode_Curr)
  1420. {
  1421. ucOSD_Item_Index0   = 0;
  1422. ucOSD_Item_Index1   = 0;
  1423. }
  1424. if (SOURCE_VGA != (stGUD1.INPUT_SOURCE & 0x07) && PAGE2_ITEM_SHARP != ucOSD_Item_Index0)
  1425. {
  1426. ucOSD_Item_Index1   = 0;
  1427. }
  1428. if (0 == ucOSD_Item_Index1)
  1429. {
  1430. OSD_Slider(5, 31, 17, ucH_Max_Margin - stMUD.H_POSITION, ucH_Max_Margin - ucH_Min_Margin, 4, 14);
  1431. OSD_Slider(7, 31, 17, (unsigned int)(stMUD.V_POSITION - ucV_Min_Margin) * 50 / (128 - ucV_Min_Margin), 100, 4, 14);
  1432. #if(MORE_PHASE)
  1433. OSD_Slider(11, 31, 17, stMUD.PHASE, 127, 4, 14);
  1434. #else
  1435. OSD_Slider(11, 31, 17, (stMUD.PHASE & 0x7c) >> 2, 31, 4, 14);
  1436. #endif
  1437. #if(ALIGN_LEFT == CLOCK_ALIGN)
  1438.         OSD_Slider(13, 31, 17, stMUD.CLOCK - 78, 100, 4, 14);
  1439. #else
  1440. OSD_Slider(13, 31, 17, stMUD.CLOCK - 28, 200, 4, 14);
  1441. #endif
  1442. }
  1443. else
  1444. {
  1445. switch (ucOSD_Item_Index0)
  1446. {
  1447. case PAGE2_ITEM_POSH :
  1448. break;
  1449. case PAGE2_ITEM_POSV :
  1450. break;
  1451. case PAGE2_ITEM_PHASE :
  1452. break;
  1453. case PAGE2_ITEM_CLOCK :
  1454. break;
  1455. case PAGE2_ITEM_SHARP :
  1456. break;
  1457. }
  1458. }
  1459. }
  1460. /*
  1461. bit Page3_Enter_Key(void)
  1462. {
  1463. if (0 == ucOSD_Item_Index0)
  1464. {
  1465. if ((MODE_NOSIGNAL != ucMode_Curr) && (MODE_NOSUPPORT != ucMode_Curr) && (SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07)))
  1466. {
  1467. // Select and highlight the first item
  1468. ucOSD_Item_Index0   = PAGE3_ITEM_AUTOCFG;
  1469. ucOSD_Item_Index1   = 0;
  1470. OSD_Window( 6, 150, 282, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  1471. }
  1472. }
  1473. else
  1474. {
  1475. if (PAGE3_ITEM_EXIT == ucOSD_Item_Index0)
  1476. {
  1477. // Disable highlight window
  1478. OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
  1479. , 0, 0, 14, 251, 0, 1, 0);
  1480. // De-select the page item and disable the hightlight window
  1481. ucOSD_Item_Index0   = 0;
  1482. ucOSD_Item_Index1   = 0;
  1483. }
  1484. else if (ucOSD_Item_Index1)
  1485. {
  1486. if (1 == ucOSD_Item_Index1)
  1487. {
  1488. switch (ucOSD_Item_Index0)
  1489. {
  1490. case PAGE3_ITEM_AUTOCFG :
  1491. if (MODE_0640x0350x70HZ <= ucMode_Curr && MODE_0720x0400x70HZ >= ucMode_Curr)
  1492. {
  1493. unsigned char ucResult;
  1494. stMUD.CLOCK = 128;
  1495. Set_H_Position();
  1496. Set_Clock();
  1497. Save_MUD(ucMode_Curr);
  1498. ucResult    = Auto_Phase();
  1499. if (ERROR_SUCCEED == ucResult)
  1500. {
  1501. ucResult    = Auto_Position();
  1502. }
  1503. if (ERROR_INPUT == ucResult)
  1504. {
  1505. ucMode_Curr = MODE_OSDFORCE;
  1506. return 0;
  1507. }
  1508. }
  1509. else
  1510. {
  1511. if (ERROR_INPUT == Auto_Config())
  1512.                             {
  1513. ucMode_Curr = MODE_OSDFORCE;
  1514. return 0;
  1515. }
  1516. }
  1517. OSD_Line( 5, 36 + (ucOSD_Item_Index1-1)*(6+1), 4, 0x40, 2);
  1518. break;
  1519. case PAGE3_ITEM_AUTOBAL :
  1520. if (ERROR_INPUT == Auto_Balance())
  1521. {
  1522. ucMode_Curr = MODE_OSDFORCE;
  1523. return 0;
  1524. }
  1525. OSD_Line( 7, 36 + (ucOSD_Item_Index1-1)*(6+1), 4, 0x40, 2);
  1526. break;
  1527. }
  1528. }
  1529. switch (ucOSD_Item_Index0)
  1530. {
  1531. case PAGE3_ITEM_AUTOCFG :
  1532. OSD_Line( 5, 36, 14, 0x40, 2); //Set color to black
  1533. break;
  1534. case PAGE3_ITEM_AUTOBAL :
  1535. OSD_Line( 7, 36, 14, 0x40, 2); //Set color to black
  1536. break;
  1537. }
  1538. ucOSD_Item_Index1   = 0;    // Leave the item
  1539. //Show_Mode();
  1540. }
  1541. else
  1542. {
  1543. if (MODE_NOSIGNAL == ucMode_Curr || MODE_NOSUPPORT == ucMode_Curr)  
  1544. return 1;//break;
  1545. ucOSD_Item_Index1   = 2;    // Enter the item, default NO
  1546. switch (ucOSD_Item_Index0)
  1547. {
  1548. case PAGE3_ITEM_AUTOCFG :
  1549. OSD_Line( 5, 36 + (ucOSD_Item_Index1-1)*(6+1), 4, 0x20, 2);
  1550. break;
  1551. case PAGE3_ITEM_AUTOBAL :
  1552. OSD_Line( 7, 36 + (ucOSD_Item_Index1-1)*(6+1), 4, 0x20, 2);
  1553. break;
  1554. }
  1555. }
  1556. }
  1557. }
  1558. */
  1559. /*
  1560. void Page3_Left_Right_Key(unsigned char Key)
  1561. {
  1562. if (ucOSD_Item_Index1)
  1563. {
  1564. ucOSD_Item_Index1   = (NOTIFY_LEFT_KEY == Key) ? 1 : 2;
  1565. switch (ucOSD_Item_Index0)
  1566. {
  1567. case PAGE3_ITEM_AUTOCFG :
  1568. OSD_Line( 5, 36, 14, 0x40, 2); //Set color to black
  1569. OSD_Line( 5, 36 + (ucOSD_Item_Index1-1)*(6+1), 4, 0x20, 2);
  1570. break;
  1571. case PAGE3_ITEM_AUTOBAL :
  1572. OSD_Line( 7, 36, 14, 0x40, 2); //Set color to black
  1573. OSD_Line( 7, 36 + (ucOSD_Item_Index1-1)*(6+1), 4, 0x20, 2);
  1574. break;
  1575. }
  1576. }
  1577. else
  1578. {
  1579. Osd_Change_Item(Key,PAGE3_ITEM_NUM);
  1580. }
  1581. }
  1582. void Page3_Show(void)
  1583. {
  1584. Show_Osd_Page(2,Page3_Atb,2);
  1585. //Set Window 5 to select "Functuin"
  1586. OSD_Window( 5, 10, 136, 120, 150, 1, 1, 14, 251, 0, 1, 25);
  1587. if (MODE_NOSIGNAL == ucMode_Curr || MODE_NOSUPPORT == ucMode_Curr)
  1588. {
  1589. ucOSD_Item_Index0   = 0;
  1590. ucOSD_Item_Index1   = 0;
  1591. }
  1592. }
  1593. */
  1594. void Page4_Enter_Key(void)
  1595. {
  1596. if (0 == ucOSD_Item_Index0)
  1597. {
  1598. // Select and highlight the first item
  1599. ucOSD_Item_Index0   = PAGE4_ITEM_LANGUAGE;
  1600. ucOSD_Item_Index1   = 0;
  1601. OSD_Window( 6, 150, 282, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  1602. }
  1603. else
  1604. {
  1605. switch (ucOSD_Item_Index0)
  1606. {
  1607. case PAGE4_ITEM_LANGUAGE :
  1608. ucOSD_Item_Index1 = (stGUD1.FUNCTION & 0x07) + 1;
  1609. OSD_Proc_B(NOTIFY_SHOW); // Show the sub-page
  1610. break;
  1611. case PAGE4_ITEM_OSDH :
  1612. if (ucOSD_Item_Index1)
  1613. {
  1614. ucOSD_Item_Index1 = 0; // Leave the item
  1615. Get_OSD_Margin();
  1616. OSD_Slider(7, 31, 17, stGUD1.OSD_POSH - Data[0], Data[1] - Data[0], 4, 14);
  1617. }
  1618. else
  1619. {
  1620. ucOSD_Item_Index1 = 1;    // Enter the item, show slider
  1621. Get_OSD_Margin();
  1622. OSD_Slider(7, 31, 17, stGUD1.OSD_POSH - Data[0], Data[1] - Data[0], 2, 14);
  1623. }
  1624. break;
  1625. case PAGE4_ITEM_OSDV :
  1626. if (ucOSD_Item_Index1)
  1627. {
  1628. ucOSD_Item_Index1   = 0;    // Leave the item
  1629. Get_OSD_Margin();
  1630. OSD_Slider(9, 31, 17, stGUD1.OSD_POSV - Data[2], Data[3] - Data[2], 4, 14);
  1631. }
  1632. else
  1633. {
  1634. ucOSD_Item_Index1   = 1;    // Enter the item, slider
  1635. Get_OSD_Margin();
  1636. OSD_Slider(9, 31, 17, stGUD1.OSD_POSV - Data[2], Data[3] - Data[2], 2, 14);
  1637. }
  1638. break;
  1639. case PAGE4_ITEM_TIMEOUT :
  1640. if(ucOSD_Item_Index2)
  1641. {
  1642. ucOSD_Item_Index2   = 0;
  1643. ucOSD_Item_Index1   = 0;    // Leave the item
  1644. //Redraw the ON/OFF words
  1645. OSD_Line( 11, 31, 3, 0x40, 2);
  1646. OSD_Line( 11, 31, 3, 0x00, 1);
  1647. OSD_Line( 11, 36, 12, 0x8a, 0);
  1648. OSD_Line( 11, 36, 12, 0x00, 1);
  1649. switch( stGUD1.FUNCTION & 0x07 )
  1650. {
  1651. case 5:
  1652. OSD_Line( 11, 37, 1, 0x8c, 0);
  1653. OSD_Line( 11, 37, 1, 0xb3, 1);
  1654. OSD_Line( 11, 43, 1, 0x8c, 0);
  1655. OSD_Line( 11, 43, 1, 0xc9, 1);
  1656. break;
  1657. case 6:
  1658. OSD_Line( 11, 37, 1, 0x8c, 0);
  1659. OSD_Line( 11, 37, 1, 0xdb, 1);
  1660. OSD_Line( 11, 43, 1, 0x8c, 0);
  1661. OSD_Line( 11, 43, 1, 0xe5, 1);
  1662. break;
  1663. case 7:
  1664. OSD_Line( 11, 37, 1, 0x8c, 0);
  1665. OSD_Line( 11, 37, 1, 0x9b, 1);
  1666. OSD_Line( 11, 43, 1, 0x8c, 0);
  1667. OSD_Line( 11, 43, 1, 0x9c, 1);
  1668. break;
  1669. default:
  1670. OSD_Line( 11, 37, 1, 0x2e, 1);
  1671. OSD_Line( 11, 38, 1, 0x2d, 1);
  1672. OSD_Line( 11, 43, 1, 0x2e, 1);
  1673. OSD_Line( 11, 44, 2, 0x25, 1);
  1674. break;
  1675. }
  1676. OSD_Line( 11, 36, 12, 0x40, 2);
  1677. OSD_Line( 11, 35, 1, 0x00, 1);
  1678. OSD_Line( 11, 48, 1, 0x00, 1);
  1679. OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
  1680. , 1, 1, 14, 251, 0, 1, 25);
  1681. }
  1682. else if (ucOSD_Item_Index1)
  1683. {
  1684. if(ucOSD_Item_Index1 == 2)
  1685. {
  1686. OSD_Line( 11, 36 + (ucOSD_Item_Index1-1)*(6+1), 3, 0x40, 2);
  1687. ucOSD_Item_Index1 = 0;
  1688. }
  1689. else
  1690. {
  1691. ucOSD_Item_Index2    = 1;
  1692. if(stGUD1.OSD_TIMEOUT < 5)
  1693. {
  1694. stGUD1.OSD_TIMEOUT = 20; //reset to 20 seconds
  1695. usOSD_Timer         = 1020; //20*51     
  1696. Save_GUD1();
  1697. }
  1698.                         
  1699. OSD_Line( 11, 36, 12, 0xe0, 2);
  1700. OSD_Line( 11, 36, 12, 0x8c, 0);
  1701. OSD_Line( 11, 35, 1, 0x40, 2);
  1702. OSD_Line( 11, 35, 1, 0x0d, 1);
  1703. OSD_Line( 11, 48, 1, 0x40, 2);
  1704. OSD_Line( 11, 48, 1, 0x0c, 1);
  1705. OSD_Slider(11, 31, 17, stGUD1.OSD_TIMEOUT, 60, 2, 14);
  1706. }
  1707. }
  1708. else
  1709. {
  1710. ucOSD_Item_Index1   = stGUD1.OSD_TIMEOUT ? 1 : 2;
  1711. OSD_Line( 11, 36 + (ucOSD_Item_Index1-1)*(6+1), 3, 0x20, 2);
  1712. }
  1713. break;
  1714. case PAGE4_ITEM_TRANSLU :
  1715. if (ucOSD_Item_Index1)
  1716. {
  1717. ucOSD_Item_Index1   = 0;    // Leave the item
  1718. OSD_Slider(13, 31, 17, (stGUD1.INPUT_SOURCE & 0xe0) >> 5, 7, 4, 14);
  1719. }
  1720. else
  1721. {
  1722. ucOSD_Item_Index1   = 1;
  1723. OSD_Slider(13, 31, 17, (stGUD1.INPUT_SOURCE & 0xe0) >> 5, 7, 2, 14);
  1724. }
  1725. break;
  1726. case PAGE4_ITEM_EXIT :
  1727. // Disable highlight window 6
  1728. OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
  1729. , 0, 0, 14, 251, 0, 1, 0);
  1730. // De-select the page item and disable the hightlight window
  1731. ucOSD_Item_Index0   = 0;
  1732. ucOSD_Item_Index1   = 0;
  1733. break;
  1734. }
  1735. }
  1736. }
  1737. void Page4_Left_Right_Key(unsigned char Key)
  1738. {
  1739. if (ucOSD_Item_Index1)
  1740. {
  1741. switch (ucOSD_Item_Index0)
  1742. {
  1743. case PAGE4_ITEM_OSDH :
  1744. Get_OSD_Margin();
  1745. // if (NOTIFY_RIGHT_KEY == Key)
  1746. if (NOTIFY_LEFT_KEY == Key)
  1747. {
  1748. if (Data[1] <= stGUD1.OSD_POSH)
  1749. break;
  1750. if (KEY_TURBO_ENABLE > ucKey_Issued)
  1751. stGUD1.OSD_POSH   = Data[1] > stGUD1.OSD_POSH ? stGUD1.OSD_POSH + 1 : Data[1];
  1752. else
  1753. stGUD1.OSD_POSH   = (Data[1] - 1) > stGUD1.OSD_POSH ? stGUD1.OSD_POSH + 2 : Data[1];
  1754. }
  1755. else
  1756. {
  1757. if (Data[0] >= stGUD1.OSD_POSH)
  1758. break;
  1759. if (KEY_TURBO_ENABLE > ucKey_Issued)
  1760. stGUD1.OSD_POSH   = Data[0] < stGUD1.OSD_POSH ? stGUD1.OSD_POSH - 1 : Data[0];
  1761. else
  1762. stGUD1.OSD_POSH   = (Data[0] + 1) < stGUD1.OSD_POSH ? stGUD1.OSD_POSH - 2 : Data[0];
  1763. }
  1764. OSD_Slider(7, 31, 17, stGUD1.OSD_POSH - Data[0], Data[1] - Data[0], 2, 14);
  1765. OSD_Position(OSD_ENABLE);
  1766. Save_GUD1();
  1767. break;
  1768. case PAGE4_ITEM_OSDV :
  1769. Get_OSD_Margin();
  1770. // if (NOTIFY_RIGHT_KEY == Key)
  1771. if (NOTIFY_LEFT_KEY == Key)
  1772. {
  1773. if (Data[3] <= stGUD1.OSD_POSV)
  1774. break;
  1775. if (KEY_TURBO_ENABLE > ucKey_Issued)
  1776. stGUD1.OSD_POSV   = Data[3] > stGUD1.OSD_POSV ? stGUD1.OSD_POSV + 1 : Data[3];
  1777. else
  1778. stGUD1.OSD_POSV   = (Data[3] - 1) > stGUD1.OSD_POSV ? stGUD1.OSD_POSV + 2 : Data[3];
  1779. }
  1780. else
  1781. {
  1782. if (Data[2] >= stGUD1.OSD_POSV)
  1783. break;
  1784. if (KEY_TURBO_ENABLE > ucKey_Issued)
  1785. stGUD1.OSD_POSV   = Data[2] < stGUD1.OSD_POSV ? stGUD1.OSD_POSV - 1 : Data[2];
  1786. else
  1787. stGUD1.OSD_POSV   = (Data[2] + 1) < stGUD1.OSD_POSV ? stGUD1.OSD_POSV - 2 : Data[2];
  1788. }
  1789. OSD_Slider(9, 31, 17, stGUD1.OSD_POSV - Data[2], Data[3] - Data[2], 2, 14);
  1790. OSD_Position(OSD_ENABLE);
  1791. Save_GUD1();
  1792. break;
  1793. case PAGE4_ITEM_TIMEOUT :
  1794. // if (NOTIFY_RIGHT_KEY == Key)
  1795. if (NOTIFY_LEFT_KEY == Key)
  1796. {
  1797. if(ucOSD_Item_Index2)
  1798. {
  1799. stGUD1.OSD_TIMEOUT = (stGUD1.OSD_TIMEOUT == 60) ? 60 : stGUD1.OSD_TIMEOUT + 1;
  1800. OSD_Slider(11, 31, 17, stGUD1.OSD_TIMEOUT, 60, 2, 14);
  1801. }
  1802. else if(ucOSD_Item_Index1)
  1803. {
  1804. //if (2 == ucOSD_Item_Index1)     break;
  1805. ucOSD_Item_Index1  = 2;
  1806. stGUD1.OSD_TIMEOUT  = 0;
  1807. OSD_Line( 11, 36, 14, 0x40, 2);
  1808. OSD_Line( 11, 36 + (ucOSD_Item_Index1-1)*(6+1), 3, 0x20, 2);
  1809. }
  1810. }
  1811. else
  1812. {
  1813. if(ucOSD_Item_Index2)
  1814. {
  1815. stGUD1.OSD_TIMEOUT = (stGUD1.OSD_TIMEOUT == 5) ? 5 : stGUD1.OSD_TIMEOUT - 1;
  1816. OSD_Slider(11, 31, 17, stGUD1.OSD_TIMEOUT, 60, 2, 14);
  1817. }
  1818. else if(ucOSD_Item_Index1)
  1819. {
  1820. //if (1 == ucOSD_Item_Index1)     break;
  1821. ucOSD_Item_Index1   = 1;
  1822. OSD_Line( 11, 36, 14, 0x40, 2);
  1823. OSD_Line( 11, 36 + (ucOSD_Item_Index1-1)*(6+1), 3, 0x20, 2);
  1824. }
  1825. }
  1826. usOSD_Timer         = (unsigned int)stGUD1.OSD_TIMEOUT * 51;     // 20 sec
  1827. //stGUD1.OSD_TIMEOUT  = (1 == ucOSD_Item_Index1) ? 2 : 0;
  1828. Save_GUD1();
  1829. break;
  1830. case PAGE4_ITEM_TRANSLU :
  1831. Data[0] = (stGUD1.INPUT_SOURCE & 0xe0) >> 5;
  1832. // if(NOTIFY_RIGHT_KEY  == Key)
  1833. if (NOTIFY_LEFT_KEY == Key)
  1834. {
  1835. if(ucOSD_Item_Index1)
  1836. {
  1837. Data[0] = (Data[0] == 0x07) ? 0x07 : Data[0] + 1;
  1838. stGUD1.INPUT_SOURCE = stGUD1.INPUT_SOURCE & 0x1f | (Data[0] << 5);
  1839. }
  1840. }
  1841. else
  1842. {
  1843. if(ucOSD_Item_Index1)
  1844. {
  1845. Data[0] = (Data[0] == 0x00) ? 0x00 : Data[0] - 1;
  1846. stGUD1.INPUT_SOURCE = stGUD1.INPUT_SOURCE & 0x1f | (Data[0] << 5);
  1847. }
  1848. }
  1849. RTDSetBit(OVL_CTRL_6D, 0xc7, Data[0] << 3);
  1850. OSD_Slider(13, 31, 17, Data[0] , 7, 2, 14);
  1851. Save_GUD1();
  1852. break;
  1853. }
  1854. }
  1855. else
  1856. {
  1857. Osd_Change_Item(Key,PAGE4_ITEM_NUM);
  1858. }
  1859. }
  1860. void Page4_Show(void)
  1861. {
  1862. Show_Osd_Page(2,Page4_Atb,3);
  1863. //Set Window 5 to select "OSD Menu"
  1864. // OSD_Window( 5, 10, 136, 153, 183, 1, 1, 14, 251, 0, 1, 25);
  1865. OSD_Window( 5, 10, 136, 120, 150, 1, 1, 14, 251, 0, 1, 25);
  1866. if (0 == ucOSD_Item_Index1)
  1867. {
  1868. Get_OSD_Margin();
  1869. OSD_Slider(7, 31, 17, stGUD1.OSD_POSH - Data[0], Data[1] - Data[0], 4, 14);
  1870. Get_OSD_Margin();
  1871. OSD_Slider(9, 31, 17, stGUD1.OSD_POSV - Data[2], Data[3] - Data[2], 4, 14);
  1872. OSD_Slider(13, 31, 17, (stGUD1.INPUT_SOURCE & 0xe0) >> 5, 7, 4, 14);
  1873. if( ucOSD_Item_Index0 == PAGE4_ITEM_LANGUAGE)
  1874. OSD_Window( 6, 150, 282, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  1875. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x01);
  1876. }
  1877. else
  1878. {
  1879. switch (ucOSD_Item_Index0)
  1880. {
  1881. case PAGE4_ITEM_OSDH :
  1882. //Get_OSD_Margin();
  1883. //OSD_Slider(11, 2, 17, stGUD1.OSD_POSH - Data[0], Data[1] - Data[0], 0x02);
  1884. break;
  1885. case PAGE4_ITEM_OSDV :
  1886. //Get_OSD_Margin();
  1887. //OSD_Slider(11, 2, 17, stGUD1.OSD_POSV - Data[2], Data[3] - Data[2], 0x02);
  1888. break;
  1889. case PAGE4_ITEM_TIMEOUT :
  1890. //ucOSD_Item_Index1   = stGUD1.OSD_TIMEOUT ? 1 : 2;
  1891. //OSD_Line( 10, 15 + (ucOSD_Item_Index1-1)*(4+1), 4, 0x00, 2);
  1892. break;
  1893. case PAGE4_ITEM_TRANSLU :
  1894. //ucOSD_Item_Index1   = (stGUD1.INPUT_SOURCE & 0x80) ? 1 : 2;     // 1-On, 2-Off
  1895. //OSD_Line( 10, 15 + (ucOSD_Item_Index1-1)*(4+1), 4, 0x00, 2);
  1896. break;
  1897. }
  1898. }
  1899. }
  1900. void Page4B_Enter_Key(void)
  1901. {
  1902. if ((stGUD1.FUNCTION & 0x07) != (ucOSD_Item_Index1 - 1))
  1903. {
  1904. stGUD1.FUNCTION = (stGUD1.FUNCTION & 0xf8) | ((ucOSD_Item_Index1 - 1) & 0x07);
  1905. Save_GUD1();
  1906. switch (stGUD1.FUNCTION & 0x07)
  1907. {
  1908. case CHINESE_T :
  1909. case CHINESE_S :
  1910. //RTDCodeW(OSD_Reset);
  1911. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x00);
  1912. Load_VLC_Font(Font_East_C, 0x5a9, 0x45);
  1913. Page4_Show();
  1914. //RTDSetBit(OVL_CTRL_6D, 0xfe, 0x01);
  1915. //RTDCodeW(OSD_Enable);
  1916. break;
  1917. case JAPANESS :
  1918. //RTDCodeW(OSD_Reset);
  1919. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x00);
  1920. Load_VLC_Font(Font_East_J, 0x573, 0x4B);
  1921. Page4_Show();
  1922. //RTDSetBit(OVL_CTRL_6D, 0xfe, 0x01);
  1923. //RTDCodeW(OSD_Enable);
  1924. break;
  1925. default :
  1926. break;
  1927. }
  1928. }
  1929. ucOSD_Item_Index1   = 0;    // Quit Sub-Page
  1930. }
  1931. void Page4B_Left_Right_Key(unsigned char Key)
  1932. {
  1933. // Select and highlight the next/previous item
  1934. OSD_Window( 6, 150 + ((ucOSD_Item_Index1-1)/4)*170, 282 + ((ucOSD_Item_Index1-1)/4)*170, 
  1935. 54 + ((ucOSD_Item_Index1-1)%4)*33, 84 + ((ucOSD_Item_Index1-1)%4)*33, 0, 0, 14, 251, 0, 1, 0);
  1936. if (NOTIFY_RIGHT_KEY == Key)
  1937. ucOSD_Item_Index1   = (PAGE4B_ITEM_NUM == ucOSD_Item_Index1) ? 1 : (ucOSD_Item_Index1 + 1);
  1938. else
  1939. ucOSD_Item_Index1   = (1 == ucOSD_Item_Index1) ? PAGE4B_ITEM_NUM : (ucOSD_Item_Index1 - 1);
  1940. OSD_Window( 6, 150 + ((ucOSD_Item_Index1-1)/4)*170, 282 + ((ucOSD_Item_Index1-1)/4)*170, 
  1941. 54 + ((ucOSD_Item_Index1-1)%4)*33, 84 + ((ucOSD_Item_Index1-1)%4)*33, 1, 1, 14, 251, 0, 1, 25);
  1942. }
  1943. void Page4B_Show(void)
  1944. {
  1945. Show_Osd_Page(3,Page8_Atb,7);
  1946. RTDOSDW(Page8_Content);
  1947. // Set Window 6
  1948. OSD_Window( 6, 150 + ((ucOSD_Item_Index1-1)/4)*170, 282 + ((ucOSD_Item_Index1-1)/4)*170, 
  1949. 54 + ((ucOSD_Item_Index1-1)%4)*33, 84 + ((ucOSD_Item_Index1-1)%4)*33, 1, 1, 14, 251, 0, 1, 25);
  1950. }
  1951. void Page5_Enter_Key(void)
  1952. {
  1953. if (0 == ucOSD_Item_Index0)
  1954. {
  1955. // Select and highlight the first item
  1956. ucOSD_Item_Index0   = PAGE5_ITEM_SOURCE;
  1957. ucOSD_Item_Index1   = 0;
  1958. OSD_Window( 6, 150, 282, 54, 84, 1, 1, 14, 251, 0, 1, 0);
  1959. OSD_Window( 6, 150, 282, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  1960. }
  1961. else
  1962. {
  1963. switch (ucOSD_Item_Index0)
  1964. {
  1965. case PAGE5_ITEM_SOURCE :
  1966. Data[0]             = stGUD1.INPUT_SOURCE & 0x07;
  1967. ucOSD_Item_Index1   = (SOURCE_DVI == Data[0])   ? PAGE5B_ITEM_DVI 
  1968. : (SOURCE_AV == Data[0])    ? PAGE5B_ITEM_CVBS 
  1969. : (SOURCE_SV == Data[0])    ? PAGE5B_ITEM_SV 
  1970. : (SOURCE_YUV == Data[0])   ? PAGE5B_ITEM_YUV 
  1971. : (SOURCE_TV == Data[0])    ? PAGE5B_ITEM_TV : PAGE5B_ITEM_DSUB;
  1972. OSD_Proc_B(NOTIFY_SHOW);   // Show the sub-page
  1973. break;
  1974. case PAGE5_ITEM_OPTION :
  1975. if (ucOSD_Item_Index1)
  1976. {
  1977. OSD_Line( 7, 36 + (ucOSD_Item_Index1-1)*(7+1), 7, 0x40, 2);
  1978. //ucOSD_Item_Index1   = (1 == ucOSD_Item_Index1) ? 0x00 : 0x80;
  1979.                     Data[0]   = (1 == ucOSD_Item_Index1) ? 0x00 : 0x10;
  1980. //stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0x7f) | ucOSD_Item_Index1;
  1981.                     stGUD1.FUNCTION = stGUD1.FUNCTION & 0xef | Data[0];
  1982. ucOSD_Item_Index1   = 0;
  1983. Save_GUD1();
  1984. if (SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07) && 400 == usIPV_ACT_LEN &&
  1985. MODE_0640x0400x56HZ != ucMode_Curr && MODE_USER720x400 != ucMode_Curr)
  1986. {
  1987. //if (stGUD1.INPUT_SOURCE & 0x80)
  1988. /* if (stGUD1.FUNCTION & 0x10)
  1989. {
  1990. if (720 == usIPH_ACT_WID)
  1991. ucMode_Curr = MODE_OSDFORCE;    // Force to VGA search mode again
  1992. }
  1993. else
  1994. {
  1995. if (640 == usIPH_ACT_WID)
  1996. ucMode_Curr = MODE_OSDFORCE;    // Force to VGA search mode again
  1997. }
  1998. */
  1999. if (stGUD1.FUNCTION & 0x10) //anson
  2000. {
  2001. stGUD1.FUNCTION = (stGUD1.FUNCTION & 0xef);
  2002. ucMode_Curr = MODE_OSDFORCE;
  2003. }
  2004. else
  2005. {
  2006. stGUD1.FUNCTION = (stGUD1.FUNCTION | 0x10);
  2007. ucMode_Curr = MODE_OSDFORCE;
  2008. }
  2009. }
  2010. }
  2011. else
  2012. {
  2013. ucOSD_Item_Index1   = (stGUD1.FUNCTION & 0x10) ? 2 : 1;     // 1-720, 2-640//(stGUD1.INPUT_SOURCE & 0x80) ? 2 : 1;     // 1-720, 2-640
  2014. OSD_Line( 7, 36 + (ucOSD_Item_Index1-1)*(7+1), 7, 0x20, 2);
  2015. }
  2016. break;
  2017. case PAGE5_ITEM_RECALL :
  2018. if (ucOSD_Item_Index1)
  2019. {
  2020. if (1 == ucOSD_Item_Index1)
  2021. {
  2022.                          {
  2023. unsigned char   ucTemp1, ucTemp2;
  2024. // Save the global settings we don't want to reset
  2025. ucTemp1 = stGUD1.FUNCTION & 0x07;       // Language select
  2026. ucTemp2 = stGUD1.INPUT_SOURCE & 0x07;   // Source select
  2027. if (JAPANESS < ucTemp1)
  2028. ucTemp1 = ENGLISH;
  2029. // Reset OSD time-out timer
  2030. usOSD_Timer = (unsigned int)2 << 9;     // 20 sec
  2031. // Reset global settings to default
  2032. Init_GUD();
  2033. // Reset OSD time-out timer
  2034. usOSD_Timer = (unsigned int)stGUD1.OSD_TIMEOUT << 9;
  2035. // Restore the global settings we don't want to reset
  2036. stGUD1.FUNCTION     = (stGUD1.FUNCTION & 0xf8) | ucTemp1;
  2037. stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | ucTemp2;
  2038. Save_GUD1();
  2039. // Reset brightness and contrast to default
  2040. Set_Bright_Contrast();
  2041. #if (AUDIO_TYPE != AUDIO_NONE)
  2042. SetVolume();
  2043. #endif
  2044. // Reset OSD position
  2045. OSD_Position(OSD_ENABLE);
  2046. }
  2047. // Reset all mode settings to default
  2048. Init_MUD();
  2049. // Read default settings for current mode
  2050. Load_MUD(ucMode_Curr);
  2051. // Leave current mode and search mode again
  2052. ucMode_Curr = MODE_OSDFORCE;
  2053. }
  2054. OSD_Line( 9, 36 + (ucOSD_Item_Index1-1)*(6+1), 4, 0x40, 2);
  2055. ucOSD_Item_Index1   = 0;    // Leave the item
  2056. }
  2057. else
  2058. {
  2059. ucOSD_Item_Index1   = 2;    // Enter the item, Default NO
  2060. OSD_Line( 9, 36 + (ucOSD_Item_Index1-1)*(6+1), 4, 0x20, 2);
  2061. }
  2062. break;
  2063. case PAGE5_ITEM_VOLUME :
  2064. if (ucOSD_Item_Index1)
  2065. {
  2066. ucOSD_Item_Index1   = 0;    // Leave the item
  2067. OSD_Slider(11, 31, 17, 0x1f - stGUD3.VOLUME, 0x1f, 4, 14);
  2068. }
  2069. else
  2070. {
  2071. ucOSD_Item_Index1   = 1;    // Enter the item, show slider
  2072. stGUD3.VOLUME   &= 0x1f;
  2073. OSD_Slider(11, 31, 17, 0x1f - stGUD3.VOLUME, 0x1f, 2, 14);
  2074. }
  2075. break;
  2076. case PAGE5_ITEM_EXIT :
  2077. // Disable highlight window
  2078. OSD_Window( 6, 150, 282, (54 + (ucOSD_Item_Index0-1)*(29+4)), (84 + (ucOSD_Item_Index0-1)*(29+4))
  2079. , 0, 0, 14, 251, 0, 1, 0);
  2080. // De-select the page item and disable the hightlight window
  2081. ucOSD_Item_Index0   = 0;
  2082. ucOSD_Item_Index1   = 0;
  2083. break;
  2084. }
  2085. }
  2086. }
  2087. void Page5_Left_Right_Key(unsigned char Key)
  2088. {
  2089. if (ucOSD_Item_Index1)
  2090. {
  2091. switch (ucOSD_Item_Index0)
  2092. {
  2093. case PAGE5_ITEM_OPTION :
  2094. ucOSD_Item_Index1   = (NOTIFY_LEFT_KEY == Key) ? 2 : 1;      // 1-720, 2-640
  2095. OSD_Line( 7, 36 , 16, 0x40, 2);
  2096. OSD_Line( 7, 36 + (ucOSD_Item_Index1-1)*(7+1), 7, 0x20, 2);
  2097. //RTDOSDW((1 == ucOSD_Item_Index1) ? OSD_MODE_V720 : OSD_MODE_V640);
  2098. break;
  2099. case PAGE5_ITEM_RECALL :
  2100. // ucOSD_Item_Index1   = (NOTIFY_LEFT_KEY == Key) ? 1 : 2;
  2101. ucOSD_Item_Index1   = (NOTIFY_RIGHT_KEY == Key) ? 1 : 2;
  2102. OSD_Line( 9, 36 , 14, 0x40, 2);
  2103. OSD_Line( 9, 36 + (ucOSD_Item_Index1-1)*(6+1), 4, 0x20, 2);
  2104. //RTDOSDW(OSD_YESNO_TABLE[ucOSD_Item_Index1 - 1][stGUD1.FUNCTION & 0x07]);
  2105. break;
  2106. case PAGE5_ITEM_VOLUME :
  2107. // if (NOTIFY_RIGHT_KEY == Key)
  2108. if (NOTIFY_LEFT_KEY == Key)
  2109. {
  2110. if (0x00 == stGUD3.VOLUME)
  2111. break;
  2112. stGUD3.VOLUME   = stGUD3.VOLUME - 1;
  2113. }
  2114. else
  2115. {
  2116. if (0x1f <= stGUD3.VOLUME)
  2117. break;
  2118. stGUD3.VOLUME   = stGUD3.VOLUME + 1;
  2119. }
  2120. OSD_Slider(11, 31, 17, 0x1f - stGUD3.VOLUME, 0x1f, 2, 14);
  2121. SetVolume();
  2122. Save_GUD3();
  2123. break;
  2124. default :
  2125. break;
  2126. }
  2127. }
  2128. else
  2129. {
  2130. Osd_Change_Item(Key,PAGE5_ITEM_NUM);
  2131. }
  2132. }
  2133. void Page5_Show(void)
  2134. {
  2135. Show_Osd_Page(3,Page5_Atb,4);
  2136. //Set Window 5 to select "Misc."
  2137. // OSD_Window( 5, 10, 136, 186, 216, 1, 1, 14, 251, 0, 1, 25);
  2138. OSD_Window( 5, 10, 136, 153, 183, 1, 1, 14, 251, 0, 1, 25);
  2139. #if (AUDIO_TYPE != AUDIO_NONE)
  2140. OSD_Slider(11, 31, 17, 0x1f - stGUD3.VOLUME, 0x1f, 4, 14);
  2141. #endif
  2142. if (0 == ucOSD_Item_Index1)
  2143. {
  2144. if( ucOSD_Item_Index0 == PAGE5_ITEM_SOURCE)
  2145. OSD_Window( 6, 150, 282, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  2146. }
  2147. else
  2148. {
  2149. switch (ucOSD_Item_Index0)
  2150. {
  2151. case PAGE5_ITEM_OPTION :
  2152. //OSD_Line( 10, 15 + (ucOSD_Item_Index1-1)*(4+1), 4, 0x00, 2);
  2153. //RTDOSDW((1 == ucOSD_Item_Index1) ? OSD_MODE_V720 : OSD_MODE_V640);
  2154. break;
  2155. case PAGE5_ITEM_RECALL :
  2156. //OSD_Line( 10, 15 + (ucOSD_Item_Index1-1)*(4+1), 4, 0x00, 2);
  2157. //RTDOSDW(OSD_YESNO_TABLE[ucOSD_Item_Index1 - 1][stGUD1.FUNCTION & 0x07]);
  2158. break;
  2159. case PAGE5_ITEM_VOLUME :
  2160. //stGUD3.VOLUME   &= 0x1f;
  2161. //OSD_Slider(11, 2, 20, 0x1f - stGUD3.VOLUME, 0x1f, 0x61);
  2162. break;
  2163. default :
  2164. break;
  2165. }
  2166. }
  2167. }
  2168. void Page5B_Enter_Key()
  2169. {
  2170. Data[0] = (PAGE5B_ITEM_DVI == ucOSD_Item_Index1) ?  SOURCE_DVI 
  2171. : (PAGE5B_ITEM_CVBS == ucOSD_Item_Index1) ? SOURCE_AV
  2172. : (PAGE5B_ITEM_SV == ucOSD_Item_Index1) ?   SOURCE_SV 
  2173. : (PAGE5B_ITEM_YUV == ucOSD_Item_Index1) ?  SOURCE_YUV 
  2174. : (PAGE5B_ITEM_TV == ucOSD_Item_Index1) ?   SOURCE_TV : SOURCE_VGA;
  2175. if(Data[0] != ucInputSrc)
  2176. {
  2177. Change_Source(Data[0]);
  2178. ucOSD_Page_Index = 0;
  2179. }
  2180. else
  2181. {
  2182. ucOSD_Item_Index1 = 0;            // Quit Sub-Page
  2183. }
  2184. }
  2185. void Page5B_Left_Right_Key(unsigned char Key)
  2186. {
  2187. // Select and highlight the next/previous item
  2188. OSD_Window( 6, 150 + ((ucOSD_Item_Index1-1)/4)*170, 282 + ((ucOSD_Item_Index1-1)/4)*170, 
  2189. 54 + ((ucOSD_Item_Index1-1)%4)*33, 84 + ((ucOSD_Item_Index1-1)%4)*33, 0, 0, 14, 251, 0, 1, 0);
  2190. if (NOTIFY_RIGHT_KEY == Key)
  2191. ucOSD_Item_Index1   = (PAGE5B_ITEM_NUM == ucOSD_Item_Index1) ? 1 : (ucOSD_Item_Index1 + 1);
  2192. else
  2193. ucOSD_Item_Index1   = (1 == ucOSD_Item_Index1) ? PAGE5B_ITEM_NUM : (ucOSD_Item_Index1 - 1);
  2194. OSD_Window( 6, 150 + ((ucOSD_Item_Index1-1)/4)*170, 282 + ((ucOSD_Item_Index1-1)/4)*170, 
  2195. 54 + ((ucOSD_Item_Index1-1)%4)*33, 84 + ((ucOSD_Item_Index1-1)%4)*33, 1, 1, 14, 251, 0, 1, 25);
  2196. }
  2197. void Page5B_Show()
  2198. {
  2199. Show_Osd_Page(4,Page9_Atb,8);
  2200. RTDOSDW(Page9_Content);
  2201. OSD_Window( 6, 150 + ((ucOSD_Item_Index1-1)/4)*170, 282 + ((ucOSD_Item_Index1-1)/4)*170, 
  2202. 54 + ((ucOSD_Item_Index1-1)%4)*33, 84 + ((ucOSD_Item_Index1-1)%4)*33, 1, 1, 14, 251, 0, 1, 25);
  2203. // Highlight the select item
  2204. // Set Window 6
  2205. //OSD_Window( 6, 152, 282, 56, 86, 2, 2, 14, 251, 0, 1, 25);
  2206. }
  2207. void Page6_Left_Right_Key(unsigned char Key)
  2208. {
  2209. if(Key == NOTIFY_RIGHT_KEY)
  2210. ucOSD_Page_Index    = GetNextPageIdx(ucOSD_Page_Index);
  2211. else
  2212. ucOSD_Page_Index    = GetPrevPageIdx(ucOSD_Page_Index);
  2213. }
  2214. void Page6_Show(void)
  2215. {
  2216. //Init_Page(5);
  2217. //RTDOSDW(OSD_PAGE_TABLE[5][stGUD1.FUNCTION & 0x07]);
  2218. Show_Osd_Page(4,Page6_Atb,5);
  2219. //Set Window 5 to select "Exit"
  2220. // OSD_Window( 5, 10, 136, 219, 249, 1, 1, 14, 251, 0, 1, 25);
  2221. OSD_Window( 5, 10, 136, 186, 216, 1, 1, 14, 251, 0, 1, 25);
  2222. }
  2223. //////////////////////////////////////////////////////////////////////////////////
  2224. //anson
  2225. //////////////////////////////////////////////////////////////////////////////////
  2226. void PageFactory_Show(void)
  2227. {
  2228. OSD_Fact_Clear( 0,20, 0,30);
  2229. OSD_Position(OSD_ENABLE);
  2230. OSD_Position(OSD_ENABLE);
  2231. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x00);
  2232. RTDOSDW(OSD_Reset);
  2233. RTDOSDW(OSD_Clean_All);
  2234. RTDOSDW(FactoryPageAtbFont);
  2235. OSD_Fact_Line( 3, 0, 15, 0x20, 2);
  2236. RTDOSDW(Version_Panel);
  2237. ShowValue( 5,12, stGUD0.CONTRAST, 0x13 ); //Contrast
  2238. ShowValue( 6,12, stGUD0.BRIGHT, 0x13 ); //Brightness
  2239. ShowValue( 7,12, stGUD3.SPREAD, 0x13 ); //Spread
  2240. ShowValue( 8,  9, stGUD4.C2_R, 0x13 ); //R-6500K
  2241. ShowValue( 8,15, stGUD4.C2_G, 0x13 ); //G-6500K
  2242. ShowValue( 8,21, stGUD4.C2_B, 0x13 ); //B-6500K
  2243. }
  2244. void PageFactory_Enter_Key(void)
  2245. {
  2246. if (ucOSD_Item_Index1)
  2247. {
  2248. if (ucOSD_Item_Index2)
  2249. {
  2250. switch(ucOSD_Item_Index1)
  2251. {
  2252. case 1:
  2253. OSD_Fact_Line( 8,  9, 3, 0x13, 2);
  2254. ucOSD_Item_Index2   = 0;
  2255. break;
  2256. case 2:
  2257. OSD_Fact_Line( 8,15, 3, 0x13, 2);
  2258. ucOSD_Item_Index2   = 0;
  2259. break;
  2260. case 3:
  2261. OSD_Fact_Line( 8,21, 3, 0x13, 2);
  2262. ucOSD_Item_Index2   = 0;
  2263. break;
  2264. }
  2265. }
  2266. else //ucOSD_Item_Index2 = 0 
  2267. {
  2268. switch (ucOSD_Item_Index0)
  2269. {
  2270. case PAGEFact_ITEM_Contrast:
  2271. ShowValue(5,12, stGUD0.CONTRAST, 0x13 );
  2272. ucOSD_Item_Index1   = 0;
  2273. break;
  2274. case PAGEFact_ITEM_Brightness:
  2275. ShowValue(6,12, stGUD0.BRIGHT, 0x13 );
  2276. ucOSD_Item_Index1   = 0;
  2277. break;
  2278. case PAGEFact_ITEM_Spread:
  2279. ShowValue(7,12, stGUD3.SPREAD, 0x13 );
  2280. ucOSD_Item_Index1   = 0;
  2281. break;
  2282. case PAGEFact_ITEM_6500K:
  2283. switch(ucOSD_Item_Index1)
  2284. {
  2285. case 1:
  2286. OSD_Fact_Line( 8,  9, 3, 0x23, 2);
  2287. ucOSD_Item_Index2   = 1;
  2288. break;
  2289. case 2:
  2290. OSD_Fact_Line( 8,15, 3, 0x23, 2);
  2291. ucOSD_Item_Index2   = 1;
  2292. break;
  2293. case 3:
  2294. OSD_Fact_Line( 8,21, 3, 0x23, 2);
  2295. ucOSD_Item_Index2   = 1;
  2296. break;
  2297. case 4:
  2298. OSD_Fact_Line( 8,25, 4, 0x13, 2);
  2299. ucOSD_Item_Index1   = 0;
  2300. break;
  2301. }
  2302. break;
  2303. }
  2304. }
  2305. }
  2306. else //into ucOSD_Item_Index1 = 1 ;
  2307. {
  2308. switch (ucOSD_Item_Index0)
  2309. {
  2310. case PAGEFact_ITEM_Recall:
  2311. Init_FACTORY();
  2312. ShowValue( 5,12, stGUD0.CONTRAST, 0x13 ); //Contrast
  2313. ShowValue( 6,12, stGUD0.BRIGHT, 0x13 ); //Brightness
  2314. ShowValue( 8,  9, stGUD4.C2_R, 0x13 ); //R-6500K
  2315. ShowValue( 8,15, stGUD4.C2_G, 0x13 ); //G-6500K
  2316. ShowValue( 8,21, stGUD4.C2_B, 0x13 ); //B-6500K
  2317. stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xE7 ) | 0x08;  //6500 mode
  2318. Set_Bright_Contrast();
  2319. RTDOSDW(RecallOK);
  2320. break;
  2321. case PAGEFact_ITEM_Auto_Color:
  2322. Auto_Balance();
  2323. RTDOSDW(AutoOK);
  2324. break;
  2325. case PAGEFact_ITEM_Contrast:
  2326. ShowValue(5,12, stGUD0.CONTRAST, 0x23 );
  2327. ucOSD_Item_Index1   = 1;
  2328. break;
  2329. case PAGEFact_ITEM_Brightness:
  2330. ShowValue(6,12, stGUD0.BRIGHT, 0x23 );
  2331. ucOSD_Item_Index1   = 1;
  2332. break;
  2333. case PAGEFact_ITEM_Spread:
  2334. ShowValue(7,12, stGUD3.SPREAD, 0x23 );
  2335. ucOSD_Item_Index1   = 1;
  2336. break;
  2337. case PAGEFact_ITEM_6500K:
  2338. OSD_Fact_Line( 8, 7, 1, 0x23, 2);
  2339. ucOSD_Item_Index1   = 1;
  2340. break;
  2341. case PAGEFact_ITEM_EXIT:
  2342. ucOSD_Page_Index  = 0;
  2343. ucOSD_Item_Index0   = 0;
  2344. ucOSD_Item_Index1   = 0;
  2345. ucOSD_Item_Index2   = 0;
  2346. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x00);
  2347. RTDOSDW(OSD_Reset);
  2348. break;
  2349. }
  2350. }
  2351. }
  2352. void PageFactory_Left_Right_Key(unsigned char Key)
  2353. {
  2354. if (ucOSD_Item_Index1)
  2355. {
  2356. if (ucOSD_Item_Index2)
  2357. {
  2358. switch (ucOSD_Item_Index0)
  2359. {
  2360. //select 6500K value;
  2361. case PAGEFact_ITEM_6500K:
  2362. switch(ucOSD_Item_Index1)
  2363. {
  2364. case 1:
  2365. Value_Adjust(&stGUD4.C2_R,Key,255,0);
  2366. ShowValue( 8,  9, stGUD4.C2_R, 0x23 );
  2367. break;
  2368. case 2:
  2369. Value_Adjust(&stGUD4.C2_G,Key,255,0);
  2370. ShowValue( 8,15, stGUD4.C2_G, 0x23 );
  2371. break;
  2372. case 3:
  2373. Value_Adjust(&stGUD4.C2_B,Key,255,0);
  2374. ShowValue( 8,21, stGUD4.C2_B, 0x23 );
  2375. break;
  2376. }
  2377. Set_Bright_Contrast();
  2378. Save_GUD4();
  2379. break;
  2380. }
  2381. }
  2382. else //ucOSD_Item_Index1 = 1 , ucOSD_Item_Index2 = 0
  2383. {
  2384. switch (ucOSD_Item_Index0)
  2385. {
  2386. if(NOTIFY_RIGHT_KEY == Key)
  2387. ucOSD_Item_Index0 = (ucOSD_Item_Index0 == 1) ? 7 : ucOSD_Item_Index0 - 1;
  2388. else
  2389. ucOSD_Item_Index0 = (ucOSD_Item_Index0 == 7) ? 1 : ucOSD_Item_Index0 + 1;
  2390. //select Contrast value;
  2391. case PAGEFact_ITEM_Contrast:
  2392. Bright_Contrast_Adjust(&stGUD0.CONTRAST,Key);
  2393. ShowValue(5,12, stGUD0.CONTRAST, 0x23 );
  2394. #if(ANALOG_CONTRAST)
  2395. if((stGUD1.INPUT_SOURCE & 0x07) == SOURCE_VGA)
  2396. SetADC_Gain();
  2397. else
  2398. Set_Bright_Contrast();
  2399. #else
  2400. Set_Bright_Contrast();
  2401. #endif
  2402. Save_GUD0();
  2403. break;
  2404. //select Brightness value;
  2405. case PAGEFact_ITEM_Brightness:
  2406. Bright_Contrast_Adjust(&stGUD0.BRIGHT,Key);
  2407. ShowValue(6,12, stGUD0.BRIGHT, 0x23 );
  2408. Set_Bright_Contrast();
  2409. Save_GUD0();
  2410. break;
  2411. case PAGEFact_ITEM_Spread:
  2412. SPREAD_Adjust(&stGUD3.SPREAD,Key);
  2413. ShowValue(7,12, stGUD3.SPREAD, 0x23 );
  2414. Set_Spread();
  2415. Save_GUD3();
  2416. break;
  2417. //select 6500K R,G,B,Exit ;
  2418. case PAGEFact_ITEM_6500K:
  2419. if(NOTIFY_RIGHT_KEY == Key)
  2420. ucOSD_Item_Index1 = (ucOSD_Item_Index1 == 4) ? 1 : ucOSD_Item_Index1 + 1;
  2421. else
  2422. ucOSD_Item_Index1 = (ucOSD_Item_Index1 == 1) ? 4 : ucOSD_Item_Index1 - 1;
  2423. switch(ucOSD_Item_Index1)
  2424. {
  2425. case 1:
  2426. OSD_Fact_Line( 8,  7, 1, 0x23, 2);
  2427. OSD_Fact_Line( 8,13, 1, 0x13, 2);
  2428. OSD_Fact_Line( 8,25, 4, 0x13, 2);
  2429. break;
  2430. case 2:
  2431. OSD_Fact_Line( 8,  7, 1, 0x13, 2);
  2432. OSD_Fact_Line( 8,13, 1, 0x23, 2);
  2433. OSD_Fact_Line( 8,19, 1, 0x13, 2);
  2434. break;
  2435. case 3:
  2436. OSD_Fact_Line( 8,13, 1, 0x13, 2);
  2437. OSD_Fact_Line( 8,19, 1, 0x23, 2);
  2438. OSD_Fact_Line( 8,25, 4, 0x13, 2);
  2439. break;
  2440. case 4:
  2441. OSD_Fact_Line( 8,  7, 1, 0x13, 2);
  2442. OSD_Fact_Line( 8,19, 1, 0x13, 2);
  2443. OSD_Fact_Line( 8,25, 4, 0x23, 2);
  2444. break;
  2445. }
  2446. break;
  2447. }
  2448. }
  2449. }
  2450. else //ucOSD_Item_Index1 = 0
  2451. {
  2452. //select Factory Main menu ;
  2453. if(NOTIFY_RIGHT_KEY == Key)
  2454. ucOSD_Item_Index0 = (ucOSD_Item_Index0 == 7) ? 1 : ucOSD_Item_Index0 + 1;
  2455. else
  2456. ucOSD_Item_Index0 = (ucOSD_Item_Index0 == 1) ? 7 : ucOSD_Item_Index0 - 1;
  2457. switch (ucOSD_Item_Index0)
  2458. {
  2459. case PAGEFact_ITEM_Recall:
  2460. OSD_Fact_Line( 9, 1,  7, 0x10, 2);
  2461. OSD_Fact_Line( 3, 1, 14, 0x20, 2);
  2462. OSD_Fact_Line( 4, 1, 10, 0x10, 2);
  2463. break;
  2464. case PAGEFact_ITEM_Auto_Color:
  2465. OSD_Fact_Line( 3, 1, 14, 0x10, 2);
  2466. OSD_Fact_Line( 4, 1, 10, 0x20, 2);
  2467. OSD_Fact_Line( 5, 1, 10, 0x10, 2);
  2468. break;
  2469. case PAGEFact_ITEM_Contrast:
  2470. OSD_Fact_Line( 4, 1, 10, 0x10, 2);
  2471. OSD_Fact_Line( 5, 1, 10, 0x20, 2);
  2472. OSD_Fact_Line( 6, 1, 10, 0x10, 2);
  2473. break;
  2474. case PAGEFact_ITEM_Brightness:
  2475. OSD_Fact_Line( 5, 1, 10, 0x10, 2);
  2476. OSD_Fact_Line( 6, 1, 10, 0x20, 2);
  2477. OSD_Fact_Line( 7, 1, 10, 0x10, 2);
  2478. break;
  2479. case PAGEFact_ITEM_Spread:
  2480. OSD_Fact_Line( 6, 1, 10, 0x10, 2);
  2481. OSD_Fact_Line( 7, 1, 10, 0x20, 2);
  2482. OSD_Fact_Line( 8, 1,   5, 0x10, 2);
  2483. break;
  2484. case PAGEFact_ITEM_6500K:
  2485. OSD_Fact_Line( 7, 1,10, 0x10, 2);
  2486. OSD_Fact_Line( 8, 1,  5, 0x20, 2);
  2487. OSD_Fact_Line( 9, 1,  7, 0x10, 2);
  2488. Set_Bright_Contrast();
  2489. break;
  2490. case PAGEFact_ITEM_EXIT:
  2491. OSD_Fact_Line( 8, 1,  5, 0x10, 2);
  2492. OSD_Fact_Line( 9, 1,  7, 0x20, 2);
  2493. OSD_Fact_Line( 3, 1,14, 0x10, 2);
  2494. break;
  2495. }
  2496. }
  2497. }
  2498. //////////////////////////////////////////////////////////////////////////////////
  2499. //////////////////////////////////////////////////////////////////////////////////
  2500. void PageADC_Left_Right_Key(unsigned char Key)
  2501. {
  2502. if (ucOSD_Item_Index1)
  2503. {
  2504. switch (ucOSD_Item_Index0)
  2505. {
  2506. case PAGEH_ITEM_REDGAIN :
  2507. if (NOTIFY_RIGHT_KEY == Key)
  2508. {
  2509. if (0xff == stGUD2.AD_R_GAIN)
  2510. return;
  2511. stGUD2.AD_R_GAIN    += 1;
  2512. }
  2513. else
  2514. {
  2515. if (0x00 == stGUD2.AD_R_GAIN)
  2516. return;
  2517. stGUD2.AD_R_GAIN    -= 1;
  2518. }
  2519. OSD_Slider(5, 36, 17, stGUD2.AD_R_GAIN, 0xff, 2, 14);
  2520. SetADC_Gain();
  2521. break;
  2522. case PAGEH_ITEM_GREENGAIN :
  2523. if (NOTIFY_RIGHT_KEY == Key)
  2524. {
  2525. if (0xff == stGUD2.AD_G_GAIN)
  2526. return;
  2527. stGUD2.AD_G_GAIN    += 1;
  2528. }
  2529. else
  2530. {
  2531. if (0x00 == stGUD2.AD_G_GAIN)
  2532. return;
  2533. stGUD2.AD_G_GAIN    -= 1;
  2534. }
  2535. OSD_Slider(7, 36, 17, stGUD2.AD_R_GAIN, 0xff, 2, 14);
  2536. SetADC_Gain();
  2537. break;
  2538. case PAGEH_ITEM_BLUEGAIN :
  2539. if (NOTIFY_RIGHT_KEY == Key)
  2540. {
  2541. if (0xff == stGUD2.AD_B_GAIN)
  2542. return;
  2543. stGUD2.AD_B_GAIN    += 1;
  2544. }
  2545. else
  2546. {
  2547. if (0x00 == stGUD2.AD_B_GAIN)
  2548. return;
  2549. stGUD2.AD_B_GAIN    -= 1;
  2550. }
  2551. OSD_Slider(9, 36, 17, stGUD2.AD_R_GAIN, 0xff, 2, 14);
  2552. SetADC_Gain();
  2553. break;
  2554. case PAGEH_ITEM_REDOFFSET :
  2555. if (NOTIFY_RIGHT_KEY == Key)
  2556. {
  2557. if (0xff == stGUD2.AD_R_OFFSET)
  2558. return;
  2559. stGUD2.AD_R_OFFSET  += 1;
  2560. }
  2561. else
  2562. {
  2563. if (0x00 == stGUD2.AD_R_OFFSET)
  2564. return;
  2565. stGUD2.AD_R_OFFSET  -= 1;
  2566. }
  2567. OSD_Slider(11, 36, 17, stGUD2.AD_R_GAIN, 0xff, 2, 14);
  2568. SetADC_Offset();
  2569. break;
  2570. case PAGEH_ITEM_GREENOFFSET :
  2571. if (NOTIFY_RIGHT_KEY == Key)
  2572. {
  2573. if (0xff == stGUD2.AD_G_OFFSET)
  2574. return;
  2575. stGUD2.AD_G_OFFSET  += 1;
  2576. }
  2577. else
  2578. {
  2579. if (0x00 == stGUD2.AD_G_OFFSET)
  2580. return;
  2581. stGUD2.AD_G_OFFSET  -= 1;
  2582. }
  2583. OSD_Slider(13, 36, 17, stGUD2.AD_R_GAIN, 0xff, 2, 14);
  2584. SetADC_Offset();
  2585. break;
  2586. case PAGEH_ITEM_BLUEOFFSET :
  2587. if (NOTIFY_RIGHT_KEY == Key)
  2588. {
  2589. if (0xff == stGUD2.AD_B_OFFSET)
  2590. return;
  2591. stGUD2.AD_B_OFFSET  += 1;
  2592. }
  2593. else
  2594. {
  2595. if (0x00 == stGUD2.AD_B_OFFSET)
  2596. return;
  2597. stGUD2.AD_B_OFFSET  -= 1;
  2598. }
  2599. OSD_Slider(15, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 2, 14);
  2600. SetADC_Offset();
  2601. break;
  2602. }
  2603. Save_GUD2();
  2604. }
  2605. else
  2606. {
  2607. if (ucOSD_Item_Index0)
  2608. {
  2609. // Select and highlight the next/previous item
  2610. if (NOTIFY_RIGHT_KEY == Key)
  2611. ucOSD_Item_Index0   = (PAGEH_ITEM_NUM == ucOSD_Item_Index0) ? 1 : (ucOSD_Item_Index0 + 1);
  2612. else
  2613. ucOSD_Item_Index0   = (1 == ucOSD_Item_Index0) ? PAGEH_ITEM_NUM : (ucOSD_Item_Index0 - 1);
  2614. OSD_Window( 6, 0, 476, 0, 252, 4, 4, 0, 1, 231, 1, 113);
  2615. }
  2616. }
  2617. }
  2618. void PageADC_Enter_Key(void)
  2619. {
  2620. if (0 == ucOSD_Item_Index0)
  2621. {
  2622. // Select and highlight the first item
  2623. ucOSD_Item_Index0   = PAGEH_ITEM_REDGAIN;
  2624. ucOSD_Item_Index1   = 0;
  2625. OSD_Window( 6, 152, 282, 56, 86, 2, 2, 14, 251, 0, 1, 25);
  2626. }
  2627. else
  2628. {
  2629. if (PAGEH_ITEM_EXIT == ucOSD_Item_Index0)
  2630. {                
  2631. ucOSD_Page_Index    = 0;        // Close OSD
  2632. }
  2633. else
  2634. {
  2635. if (ucOSD_Item_Index1)
  2636. {
  2637. ucOSD_Item_Index1   = 0;    // Leave the item, Show Mode
  2638. RTDOSDW(OSD_Version);
  2639. }
  2640. else
  2641. {
  2642. ucOSD_Item_Index1   = 1;    // Enter the item, Show slider
  2643. switch (ucOSD_Item_Index0)
  2644. {
  2645. case PAGEH_ITEM_REDGAIN :
  2646. OSD_Slider(5, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 2, 14);
  2647. break;
  2648. case PAGEH_ITEM_GREENGAIN :
  2649. OSD_Slider(7, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 2, 14);
  2650. break;
  2651. case PAGEH_ITEM_BLUEGAIN :
  2652. OSD_Slider(9, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 2, 14);
  2653. break;
  2654. case PAGEH_ITEM_REDOFFSET :
  2655. OSD_Slider(11, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 2, 14);
  2656. break;
  2657. case PAGEH_ITEM_GREENOFFSET :
  2658. OSD_Slider(13, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 2, 14);
  2659. break;
  2660. case PAGEH_ITEM_BLUEOFFSET :
  2661. OSD_Slider(15, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 2, 14);
  2662. break;
  2663. }
  2664. }
  2665. }
  2666. }
  2667. }
  2668. void PageADC_Show(void)
  2669. {
  2670. Init_Page(0);
  2671. RTDOSDW(PageADC_Atb);
  2672. RTDOSDW(PageADC_ENG);
  2673. // Highlight the select item
  2674. //OSD_Window( 5, 0, 476, 0, 252, 4, 4, 0, 1, 231, 1, 113); //Set Window 5
  2675. if (0 == ucOSD_Item_Index1)
  2676. {
  2677. RTDOSDW(OSD_Version);
  2678. }
  2679. else
  2680. {
  2681. switch (ucOSD_Item_Index0)
  2682. {
  2683. case PAGEH_ITEM_REDGAIN :
  2684. OSD_Slider(5, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 4, 14);
  2685. break;
  2686. case PAGEH_ITEM_GREENGAIN :
  2687. OSD_Slider(7, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 4, 14);
  2688. break;
  2689. case PAGEH_ITEM_BLUEGAIN :
  2690. OSD_Slider(9, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 4, 14);
  2691. break;
  2692. case PAGEH_ITEM_REDOFFSET :
  2693. OSD_Slider(11, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 4, 14);
  2694. break;
  2695. case PAGEH_ITEM_GREENOFFSET :
  2696. OSD_Slider(13, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 4, 14);
  2697. break;
  2698. case PAGEH_ITEM_BLUEOFFSET :
  2699. OSD_Slider(15, 36, 17, stGUD2.AD_B_OFFSET, 0xff, 4, 14);
  2700. break;
  2701. }
  2702. }
  2703. }
  2704. unsigned char Page1_Goto_Subpage(unsigned char Key)
  2705. {
  2706. if (PAGE1_ITEM_RGBADJ == ucOSD_Item_Index0 && ucOSD_Item_Index1)
  2707. {
  2708. if (MODE_NOSIGNAL == ucMode_Curr || MODE_NOSUPPORT == ucMode_Curr)
  2709. {
  2710. ucOSD_Item_Index1   = 0;
  2711. ucOSD_Item_Index2   = 0;
  2712. }
  2713. else
  2714. {
  2715. // When RGB adjust sub-page is open, just re-direct the message to the sub-page process
  2716. OSD_Proc_B(Key);
  2717. }
  2718. if (ucOSD_Item_Index1)  
  2719. return  0; // RGB adjust sub-Page still in work
  2720. ucOSD_Item_Index2   = 0;
  2721. //Key  = NOTIFY_SHOW;  // Redraw itself when returned from sub-page
  2722. return 1;
  2723. }
  2724. return 2;
  2725. }
  2726. unsigned char Page4_Goto_Subpage(unsigned char Key)
  2727. {
  2728. if (PAGE4_ITEM_LANGUAGE == ucOSD_Item_Index0 && 0 != ucOSD_Item_Index1)
  2729. {
  2730. if (NOTIFY_SHOW != Key)
  2731. {
  2732. // When language setting sub-page is open, just re-direct the message to the sub-page process
  2733. OSD_Proc_B(Key);
  2734. if (ucOSD_Item_Index1)  
  2735. return 0;     // Language Setting Sub-Page still in work
  2736. //action  = NOTIFY_SHOW;              // Redraw itself when returned from sub-page
  2737. return 1;
  2738. }
  2739. else
  2740. {
  2741. // Quit language sub-page if signal changed.
  2742. ucOSD_Item_Index1   = 0;
  2743. }
  2744. }
  2745. return 2;
  2746. }
  2747. unsigned char Page5_Goto_Subpage(unsigned char Key)
  2748. {
  2749. if (PAGE5_ITEM_SOURCE == ucOSD_Item_Index0 && 0 != ucOSD_Item_Index1)
  2750. {
  2751. if (NOTIFY_SHOW != Key)
  2752. {
  2753. // When source select sub-page is open, just re-direct the message to the sub-page process
  2754. OSD_Proc_B(Key);
  2755. if (ucOSD_Item_Index1)  return 0;     // Source select sub-Page still in work
  2756. //action  = NOTIFY_SHOW;              // Redraw itself when returned from sub-page
  2757. return 1;
  2758. }
  2759. else
  2760. {
  2761. // Quit source select sub-page if signal changed.
  2762. ucOSD_Item_Index1   = 0;
  2763. }
  2764. }
  2765. return 2;
  2766. }
  2767. #if(VIDEO_CHIP != VDC_NONE)
  2768. void PageVDC_Enter_Key(void)
  2769. {
  2770.            if (0 == ucOSD_Item_Index0)
  2771.         {
  2772.             // Select and highlight the first item
  2773.             ucOSD_Item_Index0   = PAGEV_ITEM_CONTRAST;
  2774.             ucOSD_Item_Index1   = 0;
  2775.             //OSD_Window(1, (2 + ucOSD_Item_Index0), (2 + ucOSD_Item_Index0), 7, 23, 7, COLOR_CYAN);
  2776.             OSD_Window( 5, 10, 136, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  2777.         }
  2778.         else
  2779.         {
  2780.             if (PAGEV_ITEM_EXIT == ucOSD_Item_Index0)
  2781.             {                
  2782.                 ucOSD_Page_Index    = 0;        // Close OSD
  2783.             }
  2784.             else
  2785.             {
  2786.                 if (ucOSD_Item_Index1)
  2787.                 {
  2788.                     ucOSD_Item_Index1   = 0;    // Leave the item, Show Mode
  2789.                     
  2790.                     RTDOSDW(OSD_Version);
  2791.                 }
  2792.                 else    // if (MODE_NOSIGNAL != ucMode_Curr && MODE_NOSUPPORT != ucMode_Curr)
  2793.                 {
  2794.                     ucOSD_Item_Index1   = 1;    // Enter the item, Show slider
  2795.                     switch (ucOSD_Item_Index0)
  2796.                     {
  2797.                     case PAGEV_ITEM_CONTRAST :
  2798.                         //OSD_Slider(11, 2, 20, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VCONTRAST, 0xff, 0x61);
  2799.                         OSD_Slider(11, 36, 17, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VCONTRAST, 0xff, 2, 14);
  2800.                         break;
  2801.                     case PAGEV_ITEM_BRIGHT :
  2802.                         //OSD_Slider(11, 2, 20, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VBRIGHT, 0xff, 0x61);
  2803.                         OSD_Slider(11, 36, 17, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VBRIGHT, 0xff, 2, 14);
  2804.                         break;
  2805.                     case PAGEV_ITEM_HUE :
  2806.                         //OSD_Slider(11, 2, 20, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VHUE, 0xff, 0x61);
  2807.                         OSD_Slider(11, 36, 17, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VHUE, 0xff, 2, 14);
  2808.                         break;
  2809.                     case PAGEV_ITEM_SATURATION :
  2810.                         //OSD_Slider(11, 2, 20, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VSATURATION, 0xff, 0x61);
  2811.                         OSD_Slider(11, 36, 17, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VSATURATION, 0xff, 2, 14);
  2812.                         break;
  2813.                     }
  2814.                 }
  2815.             }
  2816.         }
  2817. }
  2818. void PageVDC_Left_Right_Key(unsigned char Key)
  2819. {
  2820.    if (ucOSD_Item_Index1)
  2821.         {
  2822.             switch (ucOSD_Item_Index0)
  2823.             {            
  2824.             case PAGEV_ITEM_CONTRAST :
  2825.                 if (NOTIFY_RIGHT_KEY == Key)
  2826.                 {
  2827.                     if (0xff == ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VCONTRAST)   return;
  2828.                     ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VCONTRAST    += 1;
  2829.                 }
  2830.                 else
  2831.                 {
  2832.                     if (0x00 == ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VCONTRAST)   return;
  2833.                     ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VCONTRAST    -= 1;
  2834.                 }
  2835.                 //OSD_Slider(11, 2, 20, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VCONTRAST, 0xff, 0x61);
  2836.                 OSD_Slider(11, 36, 17, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VCONTRAST, 0xff, 2, 14);
  2837.                 break;
  2838.             case PAGEV_ITEM_BRIGHT :
  2839.                 if (NOTIFY_RIGHT_KEY == Key)
  2840.                 {
  2841.                     if (0xff == ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VBRIGHT)     return;
  2842.                     ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VBRIGHT  += 1;
  2843.                 }
  2844.                 else
  2845.                 {
  2846.                     if (0x00 == ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VBRIGHT)     return;
  2847.                     ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VBRIGHT  -= 1;
  2848.                 }
  2849.                 //OSD_Slider(11, 2, 20, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VBRIGHT, 0xff, 0x61);
  2850.                 OSD_Slider(11, 36, 17, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VBRIGHT, 0xff, 2, 14);
  2851.                 break;
  2852.             case PAGEV_ITEM_HUE :
  2853.                 if (NOTIFY_RIGHT_KEY == Key)
  2854.                 {
  2855.                     if (0xff == ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VHUE)        return;
  2856.                     ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VHUE += 1;
  2857.                 }
  2858.                 else
  2859.                 {
  2860.                     if (0x00 == ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VHUE)        return;
  2861.                     ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VHUE -= 1;
  2862.                 }
  2863.                 //OSD_Slider(11, 2, 20, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VHUE, 0xff, 0x61);
  2864.                 OSD_Slider(11, 36, 17, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VHUE, 0xff, 2, 14);
  2865.                 break;
  2866.             case PAGEV_ITEM_SATURATION :
  2867.                 if (NOTIFY_RIGHT_KEY == Key)
  2868.                 {
  2869.                     if (0xff == ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VSATURATION)     return;
  2870.                     ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VSATURATION  += 1;
  2871.                 }
  2872.                 else
  2873.                 {
  2874.                     if (0x00 == ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VSATURATION)     return;
  2875.                     ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VSATURATION  -= 1;
  2876.                 }
  2877.                 //OSD_Slider(11, 2, 20, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VSATURATION, 0xff, 0x61);
  2878.                 OSD_Slider(11, 36, 17, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VSATURATION, 0xff, 2, 14);
  2879.                 break;
  2880.             }
  2881.             SetVDC_Color();
  2882.             Save_MUD(ucMode_Curr);
  2883.         }
  2884.         else
  2885.         {
  2886.             if (ucOSD_Item_Index0)
  2887.             {
  2888.                 // Select and highlight the next/previous item
  2889.                 if (NOTIFY_RIGHT_KEY == Key)
  2890.                     ucOSD_Item_Index0   = (PAGEV_ITEM_NUM == ucOSD_Item_Index0) ? 1 : (ucOSD_Item_Index0 + 1);
  2891.                 else
  2892.                     ucOSD_Item_Index0   = (1 == ucOSD_Item_Index0) ? PAGEV_ITEM_NUM : (ucOSD_Item_Index0 - 1);
  2893.                 //OSD_Window(1, (2 + ucOSD_Item_Index0), (2 + ucOSD_Item_Index0), 7, 23, 7, COLOR_CYAN);
  2894.                   Osd_Change_Item(Key,PAGEV_ITEM_NUM);
  2895.             }
  2896.         }
  2897. }
  2898. void PageVDC_Show(void)
  2899. {
  2900.           Init_Page(0);
  2901.         RTDOSDW(PageVDC_Atb);
  2902.         RTDOSDW(PageVDC_ENG);
  2903.         // Highlight the select item
  2904.         //OSD_Window(1, (2 + ucOSD_Item_Index0), (2 + ucOSD_Item_Index0), 7, 23, (ucOSD_Item_Index0 ? 7 : 3), COLOR_CYAN);
  2905.         OSD_Window( 5, 10, 136, 54, 84, 1, 1, 14, 251, 0, 1, 25);
  2906.         if (0 == ucOSD_Item_Index1)
  2907.         {
  2908.             RTDOSDW(OSD_Version);
  2909.         }
  2910.         else
  2911.         {
  2912.             switch (ucOSD_Item_Index0)
  2913.             {
  2914.             case PAGEV_ITEM_CONTRAST :
  2915.                 //OSD_Slider(11, 2, 20, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VCONTRAST, 0xff, 0x61);
  2916.                 OSD_Slider(11, 36, 17, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VCONTRAST, 0xff, 2, 14);
  2917.                 break;
  2918.             case PAGEV_ITEM_BRIGHT :
  2919.                 //OSD_Slider(11, 2, 20, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VBRIGHT, 0xff, 0x61);
  2920.                 OSD_Slider(11, 36, 17, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VBRIGHT, 0xff, 2, 14);
  2921.                 break;
  2922.             case PAGEV_ITEM_HUE :
  2923.                 //OSD_Slider(11, 2, 20, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VHUE, 0xff, 0x61);
  2924.                 OSD_Slider(11, 36, 17, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VHUE, 0xff, 2, 14);
  2925.                 break;
  2926.             case PAGEV_ITEM_SATURATION :
  2927.                 //OSD_Slider(11, 2, 20, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VSATURATION, 0xff, 0x61);
  2928.                 OSD_Slider(11, 36, 17, ((LP_VIDEO_MODE_USER_DATA)&stMUD)->VSATURATION, 0xff, 2, 14);
  2929.                 break;
  2930.             }
  2931.         }
  2932. }
  2933. #endif
  2934. unsigned char Sub_Page_Process(unsigned char Key)
  2935. {
  2936. unsigned char ucTemp = 2;
  2937. switch(ucOSD_Page_Index)
  2938. {
  2939. case 1:
  2940. ucTemp = Page1_Goto_Subpage(Key); 
  2941. break;
  2942. // case 4:
  2943. case 3:     
  2944. ucTemp = Page4_Goto_Subpage(Key);
  2945. break;
  2946. // case 5:     
  2947. case 4:
  2948. ucTemp = Page5_Goto_Subpage(Key);
  2949. break;
  2950. default:
  2951. break;
  2952. }
  2953. return ucTemp;
  2954. }
  2955. ///////////////////////////////////////////////////////////////////////////////////////////
  2956. //anson
  2957. ///////////////////////////////////////////////////////////////////////////////////////////
  2958. void FACTORY_Key_Process(void)    //anson
  2959. {
  2960. switch(ucOSD_Page_Index)
  2961. {
  2962. case 0:
  2963. FACTORY_Key_Key();
  2964. break;
  2965.         }
  2966. }
  2967. ///////////////////////////////////////////////////////////////////////////////////////////
  2968. ///////////////////////////////////////////////////////////////////////////////////////////
  2969. void Enter_Key_Process(void)
  2970. {
  2971. switch(ucOSD_Page_Index)
  2972. {
  2973. case 0:
  2974. Page0_Enter_Key();
  2975. break;
  2976. case 1:
  2977. Page1_Enter_Key();
  2978. break;
  2979. case 2:
  2980. Page2_Enter_Key();
  2981. break;
  2982. /*
  2983. case 3:
  2984. if(Page3_Enter_Key())  
  2985. break;
  2986. else
  2987. return;
  2988. break;
  2989. */
  2990. case 3:
  2991. Page4_Enter_Key();
  2992. break;
  2993. case 4:
  2994. Page5_Enter_Key();
  2995. break;
  2996. case 5:
  2997. // Just set ucOSD_Page_Index to 0 and wait for main program to clear screen
  2998. ucOSD_Page_Index    = 0;
  2999. break;
  3000. case 8:
  3001. if((stGUD1.INPUT_SOURCE & 0x07) == SOURCE_VGA)
  3002. PageADC_Enter_Key();
  3003. #if(VIDEO_CHIP != VDC_NONE)
  3004. else
  3005. PageVDC_Enter_Key();
  3006. #endif
  3007. break;
  3008. case PAGE_Factory:
  3009. PageFactory_Enter_Key();
  3010. break;
  3011. }
  3012. }
  3013. void Enter_Key_B_Process(void)
  3014. {
  3015. switch(ucOSD_Page_Index)
  3016. {
  3017. case 1:
  3018. Page1B_Enter_Key();
  3019. break;
  3020. // case 4:
  3021. case 3:     
  3022. Page4B_Enter_Key();
  3023. break;
  3024. // case 5:    
  3025.         case 4:
  3026. Page5B_Enter_Key();
  3027. break;
  3028. }
  3029. }
  3030. void Left_Right_Key_Process(unsigned char Key)
  3031. {
  3032. switch(ucOSD_Page_Index)
  3033. {
  3034. case 0:
  3035. Page0_Left_Right_Key(Key);
  3036. break;
  3037. case 1:        
  3038. Page1_Left_Right_Key(Key);
  3039. break;
  3040. case 2:        
  3041. Page2_Left_Right_Key(Key);
  3042. break;
  3043. /*
  3044. case 3:        
  3045. Page3_Left_Right_Key(Key);
  3046. break;
  3047. */
  3048. case 3:        
  3049. Page4_Left_Right_Key(Key);
  3050. break;
  3051. case 4:        
  3052. Page5_Left_Right_Key(Key);
  3053. break;
  3054. case 5:        
  3055. Page6_Left_Right_Key(Key);
  3056. break;
  3057. case 8:
  3058. if((stGUD1.INPUT_SOURCE & 0x07) == SOURCE_VGA)
  3059. PageADC_Left_Right_Key(Key);
  3060. #if(VIDEO_CHIP != VDC_NONE)
  3061. else
  3062. PageVDC_Left_Right_Key(Key);
  3063. #endif
  3064. break;
  3065. case PAGE_Factory:
  3066. PageFactory_Left_Right_Key(Key);
  3067. break;
  3068. }
  3069. }
  3070. void Left_Right_Key_B_Process(unsigned char Key)
  3071. {
  3072. switch(ucOSD_Page_Index)
  3073. {
  3074. case 1:      
  3075. Page1B_Left_Right_Key(Key);
  3076. break;
  3077. // case 4:      
  3078. case 3:     
  3079. Page4B_Left_Right_Key(Key);
  3080. break;
  3081. // case 5:      
  3082. case 4:     
  3083. Page5B_Left_Right_Key(Key);
  3084. break;
  3085. }
  3086. }
  3087. void Show_Process(void)
  3088. {
  3089. switch(ucOSD_Page_Index)
  3090. {
  3091. case 1:      
  3092. Page1_Show();
  3093. break;
  3094. case 2:      
  3095. Page2_Show();
  3096. break;
  3097. /*
  3098. case 3:      
  3099. Page3_Show();
  3100. break;
  3101. */
  3102. case 3:      
  3103. Page4_Show();
  3104. break;
  3105. case 4:      
  3106. Page5_Show();
  3107. break;
  3108. case 5:      
  3109. Page6_Show();
  3110. break;
  3111. case 8:
  3112. if((stGUD1.INPUT_SOURCE & 0x07) == SOURCE_VGA)
  3113. PageADC_Show();
  3114. #if(VIDEO_CHIP != VDC_NONE)
  3115. else
  3116. PageVDC_Show();
  3117. #endif
  3118. break;
  3119. case PAGE_Factory:
  3120. PageFactory_Show();
  3121. break;
  3122. }
  3123. }
  3124. void Show_B_Process(void)
  3125. {
  3126. switch(ucOSD_Page_Index)
  3127. {
  3128. case 1:
  3129. Page1B_Show();
  3130. break;
  3131. // case 4:     
  3132. case 3:     
  3133. Page4B_Show();
  3134. break;
  3135. // case 5:     
  3136. case 4:     
  3137. Page5B_Show();
  3138. break;
  3139. }
  3140. }
  3141. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  3142. // OSD Process Routine
  3143. //////////////////////////////////////////////////////////////////////////////////////////////////////////////
  3144. // In all OSD main page process, you CANNOT call other main page process directly.
  3145. // You CAN only change ucOSD_Page_Index to indicate other main page.
  3146. // Main program will detect the change of ucOSD_Page_Index and send NOTIFY_SHOW to the new page.
  3147. // The only constraint is YOU CANNOT change ucOSD_Page_Index when receive NOTIFY_SHOW.
  3148. // p.s. You can call sub-page process directly.
  3149. // OSD_Proc0 handles messages when there is no OSD window on screen (ucOSD_Page_Index = 0)
  3150. void OSD_Proc(unsigned char action)
  3151. {
  3152. #if (TV_CHIP != TV_NONE)
  3153.        if(ucOSD_Page_Index == 0)
  3154.    {
  3155.   //if (SOURCE_TV == (stGUD1.INPUT_SOURCE & 0x07) && OSD_Proc[1][stGUD1.INPUT_SOURCE & 0x07])
  3156.   if (SOURCE_TV == (stGUD1.INPUT_SOURCE & 0x07))
  3157.   {
  3158.   // Change to OSD Main Page 1 and Main Program will show it
  3159.   ucOSD_Page_Index    = 1;
  3160.   ucOSD_Item_Index0   = 0;
  3161.   ucOSD_Item_Index1   = 0;
  3162.   ucOSD_Item_Index2   = 0;
  3163.                b_rgb_VOLUME_STATUS = 0;
  3164.   return;
  3165.   }
  3166.   }
  3167. #endif
  3168. Data[0] = Sub_Page_Process(action);
  3169. if(Data[0] == 1)
  3170. action = NOTIFY_SHOW; // Redraw itself when returned from sub-page
  3171. else if(Data[0] == 0)
  3172. return; // Source select sub-Page still in work
  3173.        
  3174. if((MODE_NOSIGNAL != ucMode_Curr)&&(MODE_NOSUPPORT != ucMode_Curr)) //anson
  3175. {
  3176. switch(action)
  3177. {
  3178. case NOTIFY_AUTO_KEY :
  3179. // if ((b_rgb_VOLUME_STATUS)|(ucOSD_Page_Index)) //eric test
  3180. // {
  3181. // ucOSD_Page_Index    = 0;
  3182. // ucOSD_Item_Index0   = 0;
  3183. // ucOSD_Item_Index1   = 0;
  3184. // ucOSD_Item_Index2   = 0;
  3185. // b_rgb_VOLUME_STATUS = 0;
  3186. // RTDSetBit(OVL_CTRL_6D, 0xfe, 0x00);
  3187. //               
  3188. // }
  3189. // else
  3190. // {
  3191. if (SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07) && MODE_NOSIGNAL != ucMode_Curr && MODE_NOSUPPORT != ucMode_Curr)
  3192. {
  3193. RTDOSDW(OSD_Reset);
  3194. OSD_Position(OSD_ENABLE);
  3195. RTDOSDW(OSD_AUTO);
  3196. RTDOSDW(strTabAuto_Atb[stGUD1.FUNCTION & 0x07]); //anson
  3197. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x01);
  3198. if (MODE_0640x0350x70HZ <= ucMode_Curr && MODE_0720x0400x70HZ >= ucMode_Curr)
  3199. {
  3200. stMUD.CLOCK = 128;
  3201. Set_H_Position();
  3202. Set_Clock();
  3203. Save_MUD(ucMode_Curr);
  3204. if (ERROR_INPUT == Auto_Phase())
  3205. ucMode_Curr = MODE_OSDFORCE;
  3206. if (ERROR_INPUT == Auto_Position())
  3207. ucMode_Curr = MODE_OSDFORCE;
  3208. }
  3209. else
  3210. {
  3211. if (ERROR_INPUT == Auto_Config())   ucMode_Curr = MODE_OSDFORCE;
  3212. //if (ERROR_INPUT == Auto_Phase())   ucMode_Curr = MODE_OSDFORCE;
  3213. }
  3214. b_rgb_VOLUME_STATUS = 0;
  3215. ucOSD_Page_Index    = 0;
  3216. RTDSetByte(HOSTCTRL_02, 0x40);  // Wake RTD up
  3217. // Although you can add ending animation here, I don't think it is necessary.
  3218. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x00);
  3219. RTDOSDW(OSD_Reset);            // Clear OSD
  3220. // }
  3221. }
  3222. break;
  3223. case NOTIFY_ENTER_KEY:
  3224. b_rgb_VOLUME_STATUS = 0;
  3225. Enter_Key_Process();
  3226. break;
  3227. case NOTIFY_RIGHT_KEY:
  3228. case NOTIFY_LEFT_KEY:
  3229. Left_Right_Key_Process(action);
  3230. break;
  3231. case NOTIFY_EXIT_KEY :
  3232. rgb_EXIT_KEY();
  3233. break;
  3234. case NOTIFY_SHOW:
  3235. Show_Process();
  3236. break;
  3237. case NOTIFY_LR_KEY:
  3238. if(ucOSD_Page_Index == 0)
  3239. Page0_LR_Key();
  3240. break;
  3241. case NOTIFY_FACTORY_KEY:             //anson 
  3242. if((stGUD3.TV_SETTING & 0x08) == 0x08 )//Factory Mode
  3243. {
  3244. FACTORY_Key_Process();
  3245. }
  3246. break;
  3247. default:
  3248. break;
  3249. }
  3250. }
  3251. }
  3252. void OSD_Proc_B(unsigned char action)
  3253. {
  3254. switch(action)
  3255. {
  3256. case NOTIFY_ENTER_KEY:
  3257. Enter_Key_B_Process();
  3258. break;
  3259. case NOTIFY_RIGHT_KEY:
  3260. case NOTIFY_LEFT_KEY:
  3261. Left_Right_Key_B_Process(action);
  3262. break;
  3263.         case NOTIFY_EXIT_KEY :
  3264.            rgb_EXIT_KEY();
  3265. case NOTIFY_SHOW:
  3266. Show_B_Process();
  3267. break;
  3268. default:
  3269. break;
  3270. }
  3271. }
  3272. #if (TV_NONE != TV_CHIP)
  3273. void TV_AutoScan(void)
  3274. {
  3275.     unsigned char   ucTemp0, ucTemp1, ucTemp2;
  3276.     RTDOSDW(OSD_Reset); 
  3277.     RTDCodeW(FreeV);                        // FreeRun V registers & Background & disable
  3278.     RTDSetBit(VGIP_CTRL_04, 0xfe, 0x00);    // Input Run Disable
  3279.     RTDSetBit(VDIS_SIGINV_21, 0x0f, 0x10| DISP_EO_SWAP | DISP_RB_SWAP | DISP_ML_SWAP);
  3280.     I2CWrite(AV_DETECT);
  3281.     I2CWrite(TV_SOURCE_SEL);
  3282.     I2CWrite(TV_SCAN_GAIN);
  3283.     RTDCodeW(OSD_Enable);
  3284.     ucTemp0 = 0;
  3285.     ucTemp1 = 0;
  3286.     ucTemp2 = stGUD3.CURR_CHANNEL;
  3287.     stGUD3.CURR_CHANNEL = 1;
  3288.     while (1)
  3289.     {
  3290.         Set_TV_Channel();
  3291.         Show_TV_Info(stGUD3.CURR_CHANNEL, 2);
  3292.         if (0 == (ucTemp0 & 0x07))
  3293.         {
  3294.             I2CRead(ADDR_EROM1, 0xd0 + (ucTemp0 >> 3), 0x01);
  3295.             ucTemp1 = Data[0];
  3296.         }
  3297.         
  3298.         Data[1] = 12;
  3299.         do
  3300.         {
  3301.             Delay_Xms(50);
  3302.             I2CRead(ADDR_VIDEO, 0x1f, 0x01);
  3303.             if (Data[0] & 0x40)     break;
  3304.         }
  3305.         while (--Data[1]);
  3306.         
  3307.         if (Data[1])
  3308.         {
  3309.             ucTemp1 &= 0xff - (1 << (7 - (ucTemp0 & 0x07)));
  3310.         }
  3311.         else
  3312.         {
  3313.             ucTemp1 |= 1 << (7 - (ucTemp0 & 0x07));
  3314.         }      
  3315.         
  3316.         Data[0] = 4;
  3317.         Data[1] = ADDR_EROM1;
  3318.         Data[2] = 0xd0 + (ucTemp0 >> 3);
  3319.         Data[3] = ucTemp1;
  3320.         I2CWrite(Data);
  3321.         if (stGUD3.TV_SETTING & 0x01)
  3322.         {
  3323.             if (MAX_CATV_NUM == stGUD3.CURR_CHANNEL)    break;
  3324.         }
  3325.         else
  3326.         {
  3327.             if (MAX_AIR_NUM == stGUD3.CURR_CHANNEL)     break;
  3328.         }
  3329.         stGUD3.CURR_CHANNEL += 1;
  3330.         ucTemp0             += 1;
  3331.     }        
  3332.     stGUD3.CURR_CHANNEL = ucTemp2;
  3333.     Set_TV_Channel();
  3334.     Show_TV_Info(stGUD3.CURR_CHANNEL, 2);
  3335.     Delay_Xms(SET_2404_DELAY);
  3336. }
  3337. void Show_TV_Info(unsigned channel, unsigned char option)
  3338. {
  3339.     RTDSetBit(OVL_CTRL_6D, 0xfd, 0x00);     // Set the OSD become two times of original width (dual pixel)
  3340.     if (2 < option)     option  = 2;
  3341.     RTDOSDW(OSD_CHANNEL);
  3342.     Show_TV_Number(channel, 1, 5 - option, option);
  3343.     if (stGUD3.TV_SETTING & 0x02)
  3344.     {
  3345.         RTDOSDW(OSD_MUTE);
  3346.     }
  3347.     else
  3348.     {
  3349.         RTDOSDW((stGUD3.TV_SETTING & 0x04) ? OSD_SAP : OSD_STEREO);
  3350.     }
  3351. }
  3352. void Show_TV_Number(unsigned char num, unsigned char row, unsigned char col, unsigned char option)
  3353. {
  3354.     RTDSetBit(OVL_CTRL_6D, 0xfd, 0x00);     // Set the OSD become two times of original width (dual pixel)
  3355.     Data[0]     = 5;
  3356.     Data[1]     = Y_INC;
  3357.     Data[2]     = OSD_ROW_90;
  3358.     Data[3]     = 0x80 | row;
  3359.     Data[4]     = col;
  3360.     Data[6]     = N_INC;
  3361.     Data[7]     = OSD_DATA_92;
  3362.     if (1 < option)
  3363.     {
  3364.         Data[5]     = 6;
  3365.         Data[11]    = 0;
  3366.         Data[8]     = num / 100;
  3367.         num         = num - (Data[8] * 100);
  3368.         Data[9]     = num / 10;
  3369.         Data[10]    = num - (Data[9] * 10) + _0_;        
  3370.         Data[8]     = Data[8] + _0_;
  3371.         Data[9]     = Data[9] + _0_;
  3372.     }
  3373.     else if (1 == option)
  3374.     {
  3375.         Data[5]     = 5;
  3376.         Data[10]    = 0;
  3377.         Data[8]     = num / 10;
  3378.         Data[9]     = num - (Data[8] * 10) + _0_;
  3379.         Data[8]     = Data[8] + _0_;
  3380.     }
  3381.     else
  3382.     {
  3383.         Data[5]     = 4;
  3384.         Data[9]     = 0;
  3385.         Data[8]     = num + _0_;
  3386.     }
  3387.     RTDWrite(Data);
  3388. }
  3389. void OSD_TV_Proc(unsigned char action)
  3390. {
  3391.     switch (ucOSD_Item_Index0)
  3392.     {
  3393.     case 1 :
  3394.         // ucOSD_Item_Index0 will be 1 when we are in TV control menu
  3395.         OSD_TV_Menu(action);
  3396.         if (ucOSD_Item_Index0)  return;
  3397.         ucOSD_Item_Index1   = 0;
  3398.         ucOSD_Item_Index2   = 0;
  3399.         if (NOTIFY_ENTER_KEY == action || NOTIFY_IR_MENU == action || NOTIFY_NONE == action)    action  = NOTIFY_SHOW;
  3400.         OSD_Clear(0, 15, 0, 30);
  3401.         Show_TV_Info(stGUD3.CURR_CHANNEL, 2);
  3402.         break;
  3403.     case 2 :
  3404.         // ucOSD_Item_Index0 will be 2 when volume level is shown on screen.
  3405.         if (ucOSD_Item_Index2)      ucOSD_Item_Index2   -= 1;
  3406.         if (0 == ucOSD_Item_Index2 || (NOTIFY_NONE != action && NOTIFY_IR_VOLINC != action && NOTIFY_IR_VOLDEC != action))
  3407.         {
  3408.             ucOSD_Item_Index0   = 0;
  3409.             ucOSD_Item_Index1   = 0;
  3410.             ucOSD_Item_Index2   = 0;
  3411.             OSD_Clear(0, 15, 0, 30);
  3412.             Show_TV_Info(stGUD3.CURR_CHANNEL, 2);
  3413.         }
  3414.         break;
  3415.     case 3 :
  3416.         // ucOSD_Item_Index0 will be 3 when channel number is not shown on screen.
  3417.         ucOSD_Item_Index1   = 0;
  3418.         ucOSD_Item_Index2   = 0;
  3419.         break;
  3420.     default :
  3421.         // ucOSD_Item_Index0 is 0xff~0xfd and ucOSD_Item_Index1 is non-zero when user inputs channel number.
  3422.         // We will issue NOTIFY_IR_ENTER automatically to end input when channel no. is identified or key is timeout.
  3423.         // We will abort if any other key is pressed.
  3424.         if (0xfd < ucOSD_Item_Index0)
  3425.         {
  3426.             if (0 == ucOSD_Item_Index2)
  3427.                 ucOSD_Item_Index0   = 0xfd;
  3428.             else
  3429.                 ucOSD_Item_Index2   = ucOSD_Item_Index2 - 1;
  3430.             if (NOTIFY_NONE != action && NOTIFY_SHOW != action && 
  3431.                 NOTIFY_IR_ENTER != action && (NOTIFY_IR_NUM0 > action || NOTIFY_IR_NUM9 < action))
  3432.             {
  3433.                 ucOSD_Item_Index0   = 0;
  3434.                 ucOSD_Item_Index1   = 0;
  3435.                 ucOSD_Item_Index2   = 0;
  3436.                 Show_TV_Info(stGUD3.CURR_CHANNEL, 2);
  3437.             }
  3438.         }
  3439.         if (0xfd == ucOSD_Item_Index0)
  3440.         {
  3441.             ucOSD_Item_Index2   = 0;
  3442.             action              = NOTIFY_IR_ENTER;
  3443.         }
  3444.         break;
  3445.     }
  3446.     switch (action)
  3447.     {
  3448.     case NOTIFY_SHOW :
  3449.         OSD_Clear(0, 15, 0, 30);
  3450.         if (0xfd > ucOSD_Item_Index0)
  3451.         {
  3452.             if (3 != ucOSD_Item_Index0)
  3453.             {
  3454.                 ucOSD_Item_Index0   = 0;
  3455.                 ucOSD_Item_Index1   = 0;
  3456.                 ucOSD_Item_Index2   = 0;
  3457.                 Show_TV_Info(stGUD3.CURR_CHANNEL, 2);
  3458.             }
  3459.         }
  3460.         else
  3461.         {
  3462.             Show_TV_Info(ucOSD_Item_Index1, 0xff - ucOSD_Item_Index0);
  3463.         }
  3464.         break;
  3465.     case NOTIFY_ENTER_KEY :
  3466.     case NOTIFY_IR_MENU :
  3467.         ucOSD_Item_Index0   = 1;
  3468.         ucOSD_Item_Index1   = 1;
  3469.         ucOSD_Item_Index2   = 0;
  3470.         OSD_TV_Menu(NOTIFY_SHOW);
  3471.         break;
  3472.     case NOTIFY_RIGHT_KEY :
  3473.     case NOTIFY_IR_CHINC :
  3474.         // Increase the channel
  3475.         Next_Channel();
  3476.         Save_GUD3();
  3477.         Show_TV_Info(stGUD3.CURR_CHANNEL, 2);
  3478.         ucOSD_Item_Index0   = 0;
  3479.         ucOSD_Item_Index1   = 0;
  3480.         ucOSD_Item_Index2   = 0;
  3481.         break;
  3482.     case NOTIFY_LEFT_KEY :
  3483.     case NOTIFY_IR_CHDEC :
  3484.         // Decrease the channel
  3485.         Prev_Channel();
  3486.         Save_GUD3();
  3487.         Show_TV_Info(stGUD3.CURR_CHANNEL, 2);
  3488.         ucOSD_Item_Index0   = 0;
  3489.         ucOSD_Item_Index1   = 0;
  3490.         ucOSD_Item_Index2   = 0;
  3491.         break;
  3492.     case NOTIFY_IR_JUMP :
  3493.         Data[0]             = stGUD3.CURR_CHANNEL;
  3494.         stGUD3.CURR_CHANNEL = stGUD3.PREV_CHANNEL;
  3495.         stGUD3.PREV_CHANNEL = Data[0];
  3496.         Set_TV_Channel();
  3497.         Save_GUD3();
  3498.         Show_TV_Info(stGUD3.CURR_CHANNEL, 2);
  3499.         ucOSD_Item_Index0   = 0;
  3500.         ucOSD_Item_Index1   = 0;
  3501.         ucOSD_Item_Index2   = 0;
  3502.         break;
  3503.     case NOTIFY_IR_VOLINC :
  3504.     case NOTIFY_IR_VOLDEC :
  3505.         // Disable mute when changing volume
  3506.         stGUD3.TV_SETTING   = stGUD3.TV_SETTING & 0xfd;
  3507.         if (NOTIFY_IR_VOLINC == action)
  3508.             stGUD3.VOLUME   = 31 > stGUD3.VOLUME ? stGUD3.VOLUME + 1 : 31;
  3509.         else
  3510.             stGUD3.VOLUME   = 0 < stGUD3.VOLUME ? stGUD3.VOLUME - 1 : 0;
  3511.         SetVolume();
  3512.         Save_GUD3();
  3513.         RTDOSDW(OSD_VOLUME);
  3514.         Show_TV_Number(stGUD3.VOLUME, 2, 4, 1);
  3515.         ucOSD_Item_Index0   = 2;
  3516.         ucOSD_Item_Index1   = 0;
  3517.         ucOSD_Item_Index2   = 50;   // For time-out counter
  3518.         break;
  3519.     case NOTIFY_IR_MUTE :
  3520.         stGUD3.TV_SETTING   = stGUD3.TV_SETTING ^ 0x02;
  3521.         SetVolume();
  3522.         Save_GUD3();
  3523.         Show_TV_Info(stGUD3.CURR_CHANNEL, 2);
  3524.         ucOSD_Item_Index0   = 0;
  3525.         ucOSD_Item_Index1   = 0;
  3526.         ucOSD_Item_Index2   = 0;
  3527.         break;
  3528.     case NOTIFY_IR_ENTER :
  3529.         if (ucOSD_Item_Index1)
  3530.         {
  3531.             ucOSD_Item_Index0   = 0;
  3532.             if (stGUD3.TV_SETTING & 0x01)
  3533.             {
  3534.                 if (MAX_CATV_NUM >= ucOSD_Item_Index1)
  3535.                 {
  3536.                     stGUD3.PREV_CHANNEL = stGUD3.CURR_CHANNEL;
  3537.                     stGUD3.CURR_CHANNEL = ucOSD_Item_Index1;
  3538.                     ucOSD_Item_Index0   = 1;    // Valid channel
  3539.                 }
  3540.             }
  3541.             else
  3542.             {
  3543.                 if (MAX_AIR_NUM >= ucOSD_Item_Index1)
  3544.                 {
  3545.                     stGUD3.PREV_CHANNEL = stGUD3.CURR_CHANNEL;
  3546.                     stGUD3.CURR_CHANNEL = ucOSD_Item_Index1;
  3547.                     ucOSD_Item_Index0   = 1;    // Valid channel
  3548.                 }
  3549.             }
  3550.             if (ucOSD_Item_Index0)
  3551.             {
  3552.                 Set_TV_Channel();
  3553.                 if (stGUD3.PREV_CHANNEL != stGUD3.CURR_CHANNEL)
  3554.                 {
  3555.                     // Disable mute when changing channel
  3556.                     stGUD3.TV_SETTING   = stGUD3.TV_SETTING & 0xfd;
  3557.                     SetVolume();
  3558.                 }
  3559.                 Save_GUD3();
  3560.             }
  3561.         }
  3562.         ucOSD_Item_Index0   = 0;
  3563.         ucOSD_Item_Index1   = 0;
  3564.         ucOSD_Item_Index2   = 0;
  3565.         Show_TV_Info(stGUD3.CURR_CHANNEL, 2);
  3566.         break;
  3567.     case NOTIFY_IR_DISP :
  3568.         ucOSD_Item_Index1   = 0;
  3569.         ucOSD_Item_Index2   = 0;
  3570.         OSD_Clear(0, 15, 0, 30);
  3571.         if (ucOSD_Item_Index0)
  3572.         {
  3573.             ucOSD_Item_Index0   = 0;
  3574.             Show_TV_Info(stGUD3.CURR_CHANNEL, 2);
  3575.         }
  3576.         else
  3577.         {
  3578.             ucOSD_Item_Index0   = 3;
  3579.         }
  3580.         break;
  3581.     default :
  3582.         // We handle IR messages
  3583.         if (NOTIFY_IR_NUM0 <= action && NOTIFY_IR_NUM9 >= action)
  3584.         {
  3585.             if (0xfd > ucOSD_Item_Index0)
  3586.             {
  3587.                 ucOSD_Item_Index0   = 0xff;
  3588.                 ucOSD_Item_Index1   = action - NOTIFY_IR_NUM0;
  3589.             }
  3590.             else
  3591.             {
  3592.                 ucOSD_Item_Index0   = ucOSD_Item_Index0 - 1;
  3593.                 ucOSD_Item_Index1   = (ucOSD_Item_Index1 * 10) + (action - NOTIFY_IR_NUM0);
  3594.             }
  3595.             ucOSD_Item_Index2   = 80;   // For time-out counter
  3596.             if (6 < ucOSD_Item_Index1)
  3597.             {
  3598. #if (TV_SYSTEM == TV_NTSC)
  3599.                 if (0 == (stGUD3.TV_SETTING & 0x01) || 12 < ucOSD_Item_Index1)
  3600. #endif
  3601.                 {
  3602.                     ucOSD_Item_Index0   = 0xfd;
  3603.                 }
  3604.             }
  3605.             Show_TV_Info(ucOSD_Item_Index1, 0xff - ucOSD_Item_Index0);
  3606.         }
  3607.         break;
  3608.     }
  3609. }
  3610. void Highlight_Item(unsigned char index1, unsigned char index2)
  3611. {
  3612.     switch (index1)
  3613.     {
  3614.     case PAGE_TV_ITEM_SYSTEM :
  3615.         if (index2)
  3616.             OSD_Window(1, 0, 0, 0x13, 0x18, 7, COLOR_CYAN);
  3617.         else
  3618.             OSD_Window(1, 0, 0, 0x0a, 0x0e, 7, COLOR_CYAN);
  3619.         break;
  3620.     case PAGE_TV_ITEM_CONTRAST :
  3621.         OSD_Window(1, 2, 2, 0x0a, 0x0e, 7, COLOR_CYAN);
  3622.         break;
  3623.     case PAGE_TV_ITEM_BRIGHT :
  3624.         OSD_Window(1, 4, 4, 0x0a, 0x0e, 7, COLOR_CYAN);
  3625.         break;
  3626.     case PAGE_TV_ITEM_SOUND :
  3627.         if (index2)
  3628.             OSD_Window(1, 6, 6, 0x13, 0x17, 7, COLOR_CYAN);
  3629.         else
  3630.             OSD_Window(1, 6, 6, 0x0a, 0x11, 7, COLOR_CYAN);
  3631.         break;
  3632.     case PAGE_TV_ITEM_CHANNEL :
  3633.         OSD_Window(1, 8, 8, 0x0a, 0x0e, 7, COLOR_CYAN);
  3634.         break;
  3635.     case PAGE_TV_ITEM_VOLUME :
  3636.         OSD_Window(1, 10, 10, 0x0a, 0x0d, 7, COLOR_CYAN);
  3637.         break;
  3638.     case PAGE_TV_ITEM_AUTOSCAN :
  3639.         if (index2)
  3640.             OSD_Window(1, 12, 12, 0x13, 0x17, 7, COLOR_CYAN);
  3641.         else
  3642.             OSD_Window(1, 12, 12, 0x0a, 0x0d, 7, COLOR_CYAN);
  3643.         break;
  3644.     case PAGE_TV_ITEM_EXIT :
  3645.         OSD_Window(1, 14, 14, 0x00, 0x03, 7, COLOR_CYAN);
  3646.         break;
  3647.     }        
  3648. }
  3649. void OSD_TV_Menu(unsigned char action)
  3650. {
  3651.     switch (action)
  3652.     {
  3653.     case NOTIFY_ENTER_KEY :
  3654.         switch (ucOSD_Item_Index1)
  3655.         {
  3656.         case PAGE_TV_ITEM_SYSTEM :
  3657.             ucOSD_Item_Index1   = PAGE_TV_ITEM_CONTRAST;
  3658.             break;
  3659.         case PAGE_TV_ITEM_CONTRAST :
  3660.             ucOSD_Item_Index1   = PAGE_TV_ITEM_BRIGHT;
  3661.             break;
  3662.         case PAGE_TV_ITEM_BRIGHT :
  3663.             ucOSD_Item_Index1   = PAGE_TV_ITEM_SOUND;
  3664.             ucOSD_Item_Index2   = (stGUD3.TV_SETTING & 0x04) ? 1 : 0;
  3665.             break;
  3666.         case PAGE_TV_ITEM_SOUND :
  3667.             ucOSD_Item_Index1   = PAGE_TV_ITEM_CHANNEL;
  3668.             break;
  3669.         case PAGE_TV_ITEM_CHANNEL :
  3670.             ucOSD_Item_Index1   = PAGE_TV_ITEM_VOLUME;  
  3671.             break;
  3672.         case PAGE_TV_ITEM_VOLUME :
  3673.             ucOSD_Item_Index1   = PAGE_TV_ITEM_AUTOSCAN;
  3674.             ucOSD_Item_Index2   = 0;
  3675.             break;
  3676.         case PAGE_TV_ITEM_AUTOSCAN :
  3677.             if (ucOSD_Item_Index2)
  3678.             {
  3679.                 TV_AutoScan();
  3680.                 
  3681.                 ucMode_Curr = MODE_OSDFORCE;
  3682.                 return;                 // Return, not break
  3683.             }
  3684.             else
  3685.             {
  3686.                 ucOSD_Item_Index1   = PAGE_TV_ITEM_EXIT;
  3687.             }
  3688.             break;
  3689.         case PAGE_TV_ITEM_EXIT:
  3690.             ucOSD_Item_Index0   = 0;
  3691.             ucOSD_Item_Index1   = 0;
  3692.             ucOSD_Item_Index2   = 0;
  3693.             RTDOSDW(OSD_Reset);
  3694.             RTDCodeW(OSD_Enable);
  3695.             return;                     // Return, not break
  3696.         }
  3697.         // Hightlight next item if not returned
  3698.         Highlight_Item(ucOSD_Item_Index1, ucOSD_Item_Index2);
  3699.         break;
  3700.     case NOTIFY_RIGHT_KEY :     // Right-key to Increase; Left-key to Decrease
  3701.     case NOTIFY_LEFT_KEY :
  3702.         switch (ucOSD_Item_Index1)
  3703.         {
  3704.         case PAGE_TV_ITEM_SYSTEM :
  3705.             ucOSD_Item_Index2   = ucOSD_Item_Index2 ? 0 : 1;
  3706.             stGUD3.TV_SETTING   = ucOSD_Item_Index2 ? (stGUD3.TV_SETTING | 0x01) : (stGUD3.TV_SETTING & 0xfe);
  3707.             Set_TV_Channel();
  3708.             Save_GUD3();
  3709.             break;
  3710.         case PAGE_TV_ITEM_CONTRAST :
  3711.             if (NOTIFY_RIGHT_KEY == action)
  3712.             {
  3713.                 if (KEY_TURBO_ENABLE > ucKey_Issued)
  3714.                     stGUD0.CONTRAST   = 100 > stGUD0.CONTRAST ? stGUD0.CONTRAST + 1 : 100;
  3715.                 else
  3716.                     stGUD0.CONTRAST   = 99 > stGUD0.CONTRAST ? stGUD0.CONTRAST + 2 : 100;
  3717.             }
  3718.             else
  3719.             {
  3720.                 if (KEY_TURBO_ENABLE > ucKey_Issued)
  3721.                     stGUD0.CONTRAST   = 0 < stGUD0.CONTRAST ? stGUD0.CONTRAST - 1 : 0;
  3722.                 else
  3723.                     stGUD0.CONTRAST   = 1 < stGUD0.CONTRAST ? stGUD0.CONTRAST - 2 : 0;
  3724.             }
  3725.             Show_TV_Number(stGUD0.CONTRAST, 0x02, 0x0b, 0x02);
  3726.             Set_Bright_Contrast();
  3727.             Save_GUD0();
  3728.             break;
  3729.         case PAGE_TV_ITEM_BRIGHT :
  3730.             if (NOTIFY_RIGHT_KEY == action)
  3731.             {
  3732.                 if (KEY_TURBO_ENABLE > ucKey_Issued)
  3733.                     stGUD0.BRIGHT   = 100 > stGUD0.BRIGHT ? stGUD0.BRIGHT + 1 : 100;
  3734.                 else
  3735.                     stGUD0.BRIGHT   = 99 > stGUD0.BRIGHT ? stGUD0.BRIGHT + 2 : 100;
  3736.             }
  3737.             else
  3738.             {
  3739.                 if (KEY_TURBO_ENABLE > ucKey_Issued)
  3740.                     stGUD0.BRIGHT   = 0 < stGUD0.BRIGHT ? stGUD0.BRIGHT - 1 : 0;
  3741.                 else
  3742.                     stGUD0.BRIGHT   = 1 < stGUD0.BRIGHT ? stGUD0.BRIGHT - 2 : 0;
  3743.             }
  3744.             Show_TV_Number(stGUD0.BRIGHT, 0x04, 0x0b, 0x02);
  3745.             Set_Bright_Contrast();
  3746.             Save_GUD0();
  3747.             break;
  3748.         case PAGE_TV_ITEM_SOUND :
  3749.             ucOSD_Item_Index2   = ucOSD_Item_Index2 ? 0 : 1;
  3750.             stGUD3.TV_SETTING   = ucOSD_Item_Index2 ? (stGUD3.TV_SETTING | 0x04) : (stGUD3.TV_SETTING & 0xfb);
  3751.             // Disable mute when changing TV sound mode
  3752.             stGUD3.TV_SETTING   = stGUD3.TV_SETTING & 0xfd;
  3753.             SetVolume();
  3754.             Save_GUD3();
  3755.             break;
  3756.         case PAGE_TV_ITEM_CHANNEL :
  3757.             if (NOTIFY_RIGHT_KEY == action)
  3758.                 Next_Channel();
  3759.             else
  3760.                 Prev_Channel();
  3761.             Show_TV_Number(stGUD3.CURR_CHANNEL, 0x08, 0x0b, 0x02);
  3762.             Save_GUD3();
  3763.             break;
  3764.         case PAGE_TV_ITEM_VOLUME :
  3765.             if (NOTIFY_RIGHT_KEY == action)
  3766.                 stGUD3.VOLUME   = (31 == stGUD3.VOLUME) ? 31 : stGUD3.VOLUME + 1;
  3767.             else
  3768.                 stGUD3.VOLUME   = (0 == stGUD3.VOLUME) ? 0 : stGUD3.VOLUME - 1;
  3769.             Show_TV_Number(stGUD3.VOLUME, 0x0a, 0x0b, 0x01);
  3770.             SetVolume();
  3771.             Save_GUD3();
  3772.             break;
  3773.         case PAGE_TV_ITEM_AUTOSCAN :
  3774.             ucOSD_Item_Index2   = ucOSD_Item_Index2 ? 0 : 1;
  3775.             break;
  3776.         } 
  3777.         Highlight_Item(ucOSD_Item_Index1, ucOSD_Item_Index2);
  3778.         break;
  3779.     case NOTIFY_SHOW :
  3780.         OSD_Clear(0, 15, 0, 30);
  3781.         RTDSetBit(OVL_CTRL_6D, 0xfd, 0x00);     // Set the OSD become two times of original width (dual pixel)
  3782.         RTDOSDW(OSD_PageTV);    
  3783.         
  3784.         switch (ucOSD_Item_Index1)
  3785.         {
  3786.         case PAGE_TV_ITEM_SYSTEM :
  3787.             ucOSD_Item_Index2   = (stGUD3.TV_SETTING & 0x01) ? 1 : 0;
  3788.             break;
  3789.         case PAGE_TV_ITEM_SOUND :
  3790.             ucOSD_Item_Index2   = (stGUD3.TV_SETTING & 0x04) ? 1 : 0;
  3791.             break;
  3792.         }        
  3793.         Highlight_Item(ucOSD_Item_Index1, ucOSD_Item_Index2);
  3794.         Show_TV_Number(stGUD0.CONTRAST, 0x02, 0x0b, 0x02);
  3795.         Show_TV_Number(stGUD0.BRIGHT, 0x04, 0x0b, 0x02);
  3796.         Show_TV_Number(stGUD3.CURR_CHANNEL, 0x08, 0x0b, 0x02);
  3797.         Show_TV_Number(stGUD3.VOLUME, 0x0a, 0x0b, 0x01);
  3798.         break;
  3799.     default :
  3800.         // We don't handle other messages
  3801.         if (NOTIFY_NONE != action || (0 == usOSD_Timer && 0 != stGUD1.OSD_TIMEOUT))
  3802.         {
  3803.             ucOSD_Item_Index0   = 0;
  3804.             ucOSD_Item_Index1   = 0;
  3805.             ucOSD_Item_Index2   = 0;
  3806.             RTDOSDW(OSD_Reset);
  3807.             RTDCodeW(OSD_Enable);
  3808.         }
  3809.         break;
  3810.     }
  3811. }
  3812. #endif
  3813. void OSD_Opening(void)
  3814. {
  3815. int idata num;
  3816. //OSD_Position(OSD_ENABLE);
  3817. OSD_Window( 7, 0 , 488, 0, 264,
  3818.  0, 0, 14, 251, 0, 1, 1);
  3819. Delay_Xms(128);
  3820. RTDCodeW(OSD_Enable);
  3821. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x01);
  3822. for(num = 0;num < 112; num+=6)
  3823. {
  3824. OSD_Window( 7, 0 + num*2, 488 - num*2 , 0 + num, 264 - num,
  3825.  0, 0, 14, 251, 0, 1, 1);
  3826. }
  3827. OSD_Window( 7, 0 + num*2, 488 - num*2 , 0 + num, 264 - num,
  3828.  0, 0, 14, 251, 0, 1, 0);
  3829. /*
  3830. #if (1)
  3831.     RTDCodeW(OSD_Enable);
  3832. #else
  3833.     // For OSD animetion
  3834.     RTDCodeW(Palette_Open);
  3835.     RTDCodeW(Palette_1);
  3836.     RTDCodeW(OSD_Enable);
  3837.     
  3838.     Delay_Xms(16);
  3839.     Wait_For_Event(EVENT_DEN_STOP);     // Wait for Frame End                                    
  3840.     RTDCodeW(Palette_2);
  3841.     Delay_Xms(16);
  3842.     Wait_For_Event(EVENT_DEN_STOP);     // Wait for Frame End
  3843.     RTDCodeW(Palette_3);
  3844.     
  3845.     Delay_Xms(28);
  3846.     Wait_For_Event(EVENT_DEN_STOP);     // Wait for Frame End
  3847.     RTDCodeW(Palette_4);
  3848.     
  3849.     Delay_Xms(28);
  3850.     Wait_For_Event(EVENT_DEN_STOP);     // Wait for Frame End
  3851.     RTDCodeW(Palette_5);
  3852.     Delay_Xms(28);
  3853.     Wait_For_Event(EVENT_DEN_STOP);     // Wait for Frame End
  3854.     RTDCodeW(Palette_6);
  3855.     Delay_Xms(28);
  3856.     Wait_For_Event(EVENT_DEN_STOP);     // Wait for Frame End
  3857.     RTDCodeW(Palette_7);
  3858.     RTDCodeW(Palette_Close);
  3859. #endif
  3860. */
  3861. }
  3862. void OSD_Ending(void)
  3863. {
  3864. int idata num;
  3865. for(num = 112;num > 0; num-=6)
  3866. {
  3867. OSD_Window( 7, 0 + num*2, 488 - num*2 , 0 + num, 264 - num,
  3868.  0, 0, 14, 251, 0, 1, 1);
  3869. }
  3870. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x00);     
  3871. RTDOSDW(OSD_Reset);            // Clear OSD
  3872. //Delay_Xms(128);
  3873. OSD_Window( 7, 0 + num*2, 488 - num*2 , 0 + num, 264 - num,
  3874.  0, 0, 14, 251, 0, 1, 0);
  3875. #if (0)
  3876.     // For OSD animetion
  3877.     unsigned char ucTemp;
  3878.     // First, clear debug information drawn by OSD_Show_Check()
  3879.     OSD_Line(13, 2, 24, 0x00, 0);
  3880.     OSD_Line(13, 2, 24, 0x00, 1);
  3881.     // Close unused window
  3882.     OSD_Window(0, 0, 0, 0, 0, 0, 0);
  3883.     OSD_Window(1, 0, 0, 0, 0, 0, 0);
  3884.     OSD_Window(2, 0, 0, 0, 0, 0, 0);
  3885.     OSD_Line(11, 2, 24, 0x00, 0);
  3886.     OSD_Line(11, 2, 24, 0x00, 1);
  3887.     for (ucTemp = 0; ucTemp < 5; ucTemp ++)
  3888.     {
  3889.         OSD_Line(ucTemp, 2, 24, 0x00, 0);          // Attribute
  3890.         OSD_Line(ucTemp, 2, 24, 0x00, 1);          // Display
  3891.         OSD_Line(10 - ucTemp, 2, 24, 0x00, 0);     // Attribute
  3892.         OSD_Line(10 - ucTemp, 2, 24, 0x00, 1);     // Display
  3893.         OSD_Window(3, ucTemp + 1, 9 - ucTemp, 2, 25,
  3894.             OSD_WINDOW_ENABLE | OSD_WINDOW_SHADOWING, COLOR_CYAN);  // Main OSD window
  3895.         Wait_For_Event(EVENT_DEN_STOP);     // Wait for Frame End
  3896.     }
  3897.     OSD_Line(5, 2, 24, 0x00, 0);    // Attribute
  3898.     OSD_Line(5, 2, 24, 0x00, 1);    // Display
  3899.     for (ucTemp = 0; ucTemp < 12; ucTemp += 2)
  3900.     {
  3901.         OSD_Window(3, 5, 5, ucTemp + 3, 23 - ucTemp,
  3902.             OSD_WINDOW_ENABLE | OSD_WINDOW_SHADOWING, COLOR_CYAN);
  3903.         Wait_For_Event(EVENT_DEN_STOP);     // Wait for Frame End
  3904.     }
  3905. #endif
  3906. }
  3907. //Not modified yet
  3908. void Show_Note(void)
  3909. {
  3910. RTDSetByte(HOSTCTRL_02, 0x40);  // Wake RTD up
  3911. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x00);
  3912. //RTDCodeW(OSD_Reset);
  3913. OSD_Position(OSD_ENABLE);
  3914. // When input format changed, OSD will be cleared by Detect_VGA_Mode() and Detect_AV_Mode()
  3915. switch (stGUD1.INPUT_SOURCE & 0x07)
  3916. {
  3917. case SOURCE_VGA:
  3918. //#if (VIDEO_CHIP != VDC_NONE)
  3919. RTDOSDW(OSD_RGB);  // OSD RGB note
  3920. //#endif
  3921. break;
  3922. case SOURCE_DVI:
  3923. RTDOSDW(OSD_DVI);  // OSD DVI note
  3924. break;
  3925. case SOURCE_AV:
  3926. RTDOSDW(OSD_AV);   // OSD AV note
  3927. break;
  3928. case SOURCE_SV:
  3929. RTDOSDW(OSD_SV);   // OSD S-Video note
  3930. break;
  3931. case SOURCE_YUV:
  3932. RTDOSDW(OSD_YUV);  // OSD YUV note
  3933. break;
  3934. case SOURCE_TV:
  3935. RTDOSDW(OSD_TV);
  3936. break;
  3937. }
  3938. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x01);
  3939. //RTDCodeW(OSD_Enable);
  3940. }
  3941. //Not modified yet
  3942. void Show_Hint(void)
  3943. {
  3944. if (MODE_NOSIGNAL == ucMode_Curr)
  3945. {
  3946. RTDSetByte(HOSTCTRL_02, 0x40);  // Wake RTD up
  3947. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x00);
  3948. //RTDCodeW(OSD_Reset);
  3949. #if(MCU_TYPE == MCU_WINBOND)
  3950. if ((SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07)) && (VGA_ONLINE != bVGA_CONNECT))
  3951. #else
  3952. if ((SOURCE_VGA == (stGUD1.INPUT_SOURCE & 0x07)) && (VGA_ONLINE != MCU_ReadVgaConnect()))
  3953. #endif
  3954. {
  3955. RTDOSDW(OSD_HINT_TABLE[0][stGUD1.FUNCTION & 0x07]);
  3956. }
  3957. else
  3958. {
  3959. RTDOSDW(OSD_Clean_All);
  3960. RTDOSDW(OSD_HINT_TABLE[1][stGUD1.FUNCTION & 0x07]);
  3961. }
  3962. //RTDCodeW(OSD_Enable);
  3963. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x01);
  3964. }
  3965. else if ((MODE_NOSUPPORT == ucMode_Curr) || bOverSpec)
  3966. {
  3967. RTDSetByte(HOSTCTRL_02, 0x40);  // Wake RTD up
  3968. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x00);
  3969. //RTDCodeW(OSD_Reset);
  3970. RTDOSDW(OSD_HINT_TABLE[2][stGUD1.FUNCTION & 0x07]);
  3971. //RTDCodeW(OSD_Enable);
  3972. RTDSetBit(OVL_CTRL_6D, 0xfe, 0x01);
  3973. }
  3974. }
  3975. #if (SHOW_CHECK)
  3976. void OSD_Show_Check(void)
  3977. {
  3978. OSD_Line(17, 2, 38, 0, 1);                       // Attribute
  3979. //OSD_Show_Num(0x02, ucOSD_Page_Index);                       // Status
  3980. //OSD_Show_Num(0x02, ucDebug_Value0);                       // Status
  3981. OSD_Show_Num(0x02, ucDebug_Value0);                       // Status
  3982. OSD_Show_Num(0x05, ucDebug_Value1);                    // ucMode_Curr
  3983. //OSD_Show_Num(0x05, stMUD.V_POSITION);                    // ucMode_Curr
  3984. OSD_Show_Num(0x08, ucDebug_Value2);
  3985.     //OSD_Show_Num(0x08, ucMode_Curr);
  3986. RTDRead(LAST_LINE_H_2C, 1, N_INC);                  // Last Line Length
  3987. Data[15]    = Data[0] & 0xf8;
  3988. OSD_Show_Num(0x0b, Data[15] >> 6);
  3989. RTDRead(LAST_LINE_L_26, 1, N_INC);
  3990. OSD_Show_Num(0x0d, (Data[15] << 2) | (Data[0] >> 3));
  3991. #if (RTDDEBUG)
  3992. OSD_Show_Num(0x10, (unsigned char)(usPE_Sum >> 8));
  3993. OSD_Show_Num(0x12, (unsigned char)usPE_Sum);
  3994. OSD_Show_Num(0x17, (unsigned char)ucPE_Level);
  3995. #else
  3996. OSD_Show_Num(0x10, (unsigned char)(usHsync >> 8));  // usHsync
  3997. OSD_Show_Num(0x12, (unsigned char)usHsync);
  3998. OSD_Show_Num(0x15, (unsigned char)(usVsync >> 8));  // usVsync
  3999. OSD_Show_Num(0x17, (unsigned char)usVsync);   
  4000. #endif
  4001. }
  4002. void OSD_Show_Num(unsigned char column, unsigned char no)
  4003. {
  4004. unsigned int idata usStart_Addr;
  4005. unsigned char idata ucTemp;
  4006. usStart_Addr = FONT_SELECT_ADDRESS;
  4007. //The address of the first character Cn1 in Row n = FONT_SELECT_ADDRESS + Row0_length + Row1_length +...+Row(n-1)_length
  4008. for(ucTemp = 1; ucTemp < 17+1; ucTemp ++)
  4009. usStart_Addr += Row_Info[0][ucTemp];
  4010. Data[0]     = 5;
  4011. Data[1]     = Y_INC;
  4012. Data[2]     = OSD_ROW_90;
  4013. Data[3] = (unsigned char)( (((usStart_Addr + column)  & 0x0fff) >> 8 ) | 0x50);
  4014. Data[4] = (unsigned char)( (usStart_Addr + column) & 0x00ff);
  4015. Data[5]     = 0;                 
  4016. RTDWrite(Data);
  4017. column  = no / 16;              // Bit 7~4
  4018. no      = no - (column * 16);   // Bit 3~0
  4019. column  = (9 < column) ? (column + (0x20 - 10)) : (column + _0_);
  4020. no      = (9 < no) ? (no + (0x20 - 10)) : (no + _0_);
  4021.     
  4022. Data[0] = 5;
  4023. Data[1] = N_INC;
  4024. Data[2] = OSD_DATA_92;
  4025. Data[3] = column;
  4026. Data[4] = no;
  4027. Data[5] = 0;
  4028. RTDWrite(Data);
  4029. }
  4030. #endif