#include "xbasic_types.h" #include "xparameters.h" #include "xstatus.h" #include "osd.h" #include "xosd.h" #include "stdio.h"
/* * Device related constants. Defined in xparameters.h */ #define OSD_DEVICE_ID XPAR_OSD_0_DEVICE_ID
/* * OSD Device related data structures */ XOSD Osd; /* OSD Device driver instance */ XOSD_Config *OsdCfgPtr; /* OSD device configuration pointer */
/* * Color table definition */ u32 ColorData[16] = { 0x00000000, 0xa0a25f58, 0xa08080ff, 0xa0808010, 0xa0ef5a51, 0x00000000, 0xa0465289, 0x00000000, 0xa065ba6b, 0x00000000, 0xa09017c5, 0xa0a9c860, 0xa0bc3198, 0xa010a5a9, 0xa0808080, 0xa0ada1ab };
/* * Text table definition */ char __attribute__ ((aligned (4))) TextData[8][32] = { "OV5640", //"String #1", "OV7725", //"String #2", "MT9V034 CAMER TEST", "www.osrc.cn" "Xilinx", "String #5", "String #6", "String #7" // "String #8" };
/* * Font definition */ unsigned char __attribute__ ((aligned (4))) Font[128][8] = { {0x00, 0x36, 0x7F, 0x7F, 0x3E, 0x1C, 0x08, 0x00}, // NULL {0x18, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x18}, {0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}, {0x18, 0x18, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x00}, {0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18}, {0x00, 0x00, 0x00, 0xF8, 0xF8, 0x18, 0x18, 0x18}, {0x03, 0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0xC0}, {0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03}, {0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF}, {0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F}, {0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF}, {0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00}, {0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00}, {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, {0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0}, {0x00, 0x1C, 0x1C, 0x77, 0x77, 0x08, 0x1C, 0x00}, {0x00, 0x00, 0x00, 0x1F, 0x1F, 0x18, 0x18, 0x18}, {0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00}, {0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18}, {0x00, 0x00, 0x3C, 0x7E, 0x7E, 0x7E, 0x3C, 0x00}, {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}, {0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0}, {0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x18, 0x18}, {0x18, 0x18, 0x18, 0xFF, 0xFF, 0x00, 0x00, 0x00}, {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0}, {0x18, 0x18, 0x18, 0x1F, 0x1F, 0x00, 0x00, 0x00}, {0x78, 0x60, 0x78, 0x60, 0x7E, 0x18, 0x1E, 0x00}, {0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x00}, {0x00, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00}, {0x00, 0x18, 0x30, 0x7E, 0x30, 0x18, 0x00, 0x00}, {0x00, 0x18, 0x0C, 0x7E, 0x0C, 0x18, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // Space {0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00}, {0x00, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x66, 0xFF, 0x66, 0x66, 0xFF, 0x66, 0x00}, {0x18, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x18, 0x00}, {0x00, 0x66, 0x6C, 0x18, 0x30, 0x66, 0x46, 0x00}, {0x1C, 0x36, 0x1C, 0x38, 0x6F, 0x66, 0x3B, 0x00}, {0x00, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x0E, 0x1C, 0x18, 0x18, 0x1C, 0x0E, 0x00}, {0x00, 0x70, 0x38, 0x18, 0x18, 0x38, 0x70, 0x00}, {0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, {0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30}, {0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00}, {0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00},// / {0x00, 0x3C, 0x66, 0x6E, 0x76, 0x66, 0x3C, 0x00},// 0 {0x00, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7E, 0x00},//1 {0x00, 0x3C, 0x66, 0x0C, 0x18, 0x30, 0x7E, 0x00},//2 {0x00, 0x7E, 0x0C, 0x18, 0x0C, 0x66, 0x3C, 0x00},//3 {0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0x7E, 0x0C, 0x00},//4 {0x00, 0x7E, 0x60, 0x7C, 0x06, 0x66, 0x3C, 0x00},//5 {0x00, 0x3C, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0x00},//6 {0x00, 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x00},//7 {0x00, 0x3C, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00},//8 {0x00, 0x3C, 0x66, 0x3E, 0x06, 0x0C, 0x38, 0x00},//9 {0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00}, {0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30}, {0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, {0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00}, {0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60, 0x00}, {0x00, 0x3C, 0x66, 0x0C, 0x18, 0x00, 0x18, 0x00},
{0x00, 0x3C, 0x66, 0x6E, 0x6E, 0x60, 0x3E, 0x00}, // @ {0x00, 0x18, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x00}, // A {0x00, 0x7C, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00}, {0x00, 0x3C, 0x66, 0x60, 0x60, 0x66, 0x3C, 0x00}, {0x00, 0x78, 0x6C, 0x66, 0x66, 0x6C, 0x78, 0x00}, {0x00, 0x7E, 0x60, 0x7C, 0x60, 0x60, 0x7E, 0x00}, {0x00, 0x7E, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x00}, {0x00, 0x3E, 0x60, 0x60, 0x6E, 0x66, 0x3E, 0x00}, {0x00, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00}, {0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00}, {0x00, 0x06, 0x06, 0x06, 0x06, 0x66, 0x3C, 0x00}, {0x00, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0x00}, {0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x00}, {0x00, 0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x00}, {0x00, 0x66, 0x76, 0x7E, 0x7E, 0x6E, 0x66, 0x00}, {0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, {0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00}, {0x00, 0x3C, 0x66, 0x66, 0x66, 0x6C, 0x36, 0x00}, {0x00, 0x7C, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x00}, {0x00, 0x3C, 0x60, 0x3C, 0x06, 0x06, 0x3C, 0x00}, {0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, {0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x00}, {0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00}, {0x00, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, {0x00, 0x66, 0x66, 0x3C, 0x3C, 0x66, 0x66, 0x00}, {0x00, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00}, {0x00, 0x7E, 0x0C, 0x18, 0x30, 0x60, 0x7E, 0x00},//Z {0x00, 0x1E, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, {0x00, 0x40, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00}, {0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00}, {0x00, 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00},
{0x40, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, // ` {0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00}, // a {0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x00}, {0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x00}, {0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00}, {0x00, 0x0E, 0x18, 0x3E, 0x18, 0x18, 0x18, 0x00}, {0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x7C}, {0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x00}, {0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3C, 0x00}, {0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3C}, {0x00, 0x60, 0x60, 0x6C, 0x78, 0x6C, 0x66, 0x00}, {0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00}, {0x00, 0x00, 0x66, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, {0x00, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00}, {0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00}, {0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60}, {0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06}, {0x00, 0x00, 0x7C, 0x66, 0x60, 0x60, 0x60, 0x00}, {0x00, 0x00, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x00}, {0x00, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x0E, 0x00}, {0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00}, {0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00}, {0x00, 0x00, 0x63, 0x6B, 0x7F, 0x3E, 0x36, 0x00}, {0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00}, {0x00, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x0C, 0x78}, {0x00, 0x00, 0x7E, 0x0C, 0x18, 0x30, 0x7E, 0x00},
{0x14, 0x10, 0x10, 0x40, 0x10, 0x10, 0x14, 0x00}, // { {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, {0x50, 0x10, 0x10, 0x04, 0x10, 0x10, 0x50, 0x00}, // } {0x11, 0x11, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00}, // ~ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 127 DEL };
/* * Function prototypes */ int OsdInit(int DeviceID); void external_OsdConfig(u8 layer,u16 Screen_width,u16 Screen_height,u16 Camera_width,u16 Camera_height,u16 xpos_start,u16 ypos_start); void internal_Graphics_setting(u8 Gcindex,u16 Screen_width,u16 Screen_height,u16 Xpos_start,u16 Ypos_start,u8 BankIndex); void OsdDrawText(int Gcindex,int x_pos, int y_pos, int color, int string_index, int text_size,u8 BankIndex); void OsdDrawBox(int Gcindex,u16 x_start, u16 y_start, u16 x_last, u16 y_last, u8 color,u8 BankIndex);
void Camera_osd_init(void) { int bOsdInitialized = 0;
if ( !bOsdInitialized ) { OsdInit(OSD_DEVICE_ID); external_OsdConfig(0,1280,720,640,480,0,140); //外部输入图层配置 external_OsdConfig(1,1280,720,640,480,640,140);//外部输入图层配置 internal_Graphics_setting(2,1280,720,0,0,0); //内出输入图层配置 internal_Graphics_setting(3,1280,720,0,0,0); //内出输入图层配置 bOsdInitialized = 1; }
OsdDrawText(2,30,40,8,2,8,0); //添加文字 OsdDrawBox(3,25,25,1255,115, 8,0);//添加框 }
/*****************************************************************************/ /** * * This function initializes the OSD device and its driver instance. * * @param DeviceID is the device ID of the OSD device. * * @return 0 if the initialization is successful; 1 otherwise. * * @note None. * ******************************************************************************/ int OsdInit(int DeviceID) { int Status;
/* Initialize the OSD instance */
OsdCfgPtr = XOSD_LookupConfig(DeviceID); Status = XOSD_CfgInitialize(&Osd, OsdCfgPtr, OsdCfgPtr->BaseAddress); if (Status != XST_SUCCESS) return 1;
/* Reset the devices */
XOSD_Reset(&Osd);
/* Enable the OSD device and tell it to pick up the register changes */
XOSD_Enable(&Osd); XOSD_RegUpdateEnable(&Osd);
return 0; }
void internal_Graphics_setting(u8 Gcindex,u16 Screen_width,u16 Screen_height,u16 Xpos_start,u16 Ypos_start,u8 BankIndex) { u16 width = Screen_width; u16 height = Screen_height;
int LayerAlphaValue = 0xFF; int LayerGlobalAlphaEnable = 0; int LayerPriority;
u8 ColorBankIndex=BankIndex; u8 CharBankIndex=BankIndex; u8 TextBankIndex=BankIndex; u8 InstructionBankIndex=BankIndex;
if(Gcindex==0) LayerPriority = XOSD_LAYER_PRIORITY_0; else if(Gcindex==1) LayerPriority = XOSD_LAYER_PRIORITY_1; else if(Gcindex==2) LayerPriority = XOSD_LAYER_PRIORITY_2; else if(Gcindex==3) LayerPriority = XOSD_LAYER_PRIORITY_3; else if(Gcindex==4) LayerPriority = XOSD_LAYER_PRIORITY_4; else if(Gcindex==5) LayerPriority = XOSD_LAYER_PRIORITY_5; else if(Gcindex==6) LayerPriority = XOSD_LAYER_PRIORITY_6; else if(Gcindex==7) LayerPriority = XOSD_LAYER_PRIORITY_7; else xil_printf("Para err!");
/* Set up Layer's Alpha, Priority, Dimension and enable it */ XOSD_SetLayerAlpha(&Osd, Gcindex, LayerGlobalAlphaEnable, LayerAlphaValue); XOSD_SetLayerPriority(&Osd, Gcindex, LayerPriority); XOSD_SetLayerDimension(&Osd, Gcindex, Xpos_start, Xpos_start, width, height); XOSD_EnableLayer(&Osd, Gcindex);
/* Load color, font and text and set the active banks */
XOSD_LoadColorLUTBank(&Osd, Gcindex, BankIndex, ColorData); XOSD_LoadCharacterSetBank(&Osd, Gcindex, BankIndex, (u32 *)Font); XOSD_LoadTextBank(&Osd, Gcindex, BankIndex, (u32 *)TextData); XOSD_SetActiveBank(&Osd, Gcindex, ColorBankIndex, CharBankIndex, TextBankIndex, InstructionBankIndex);
}
/*****************************************************************************/ /** * * This function does the general configuration on an OSD device. The * configuration includes: * * - Screen Size * - Background Color * - Layer 0 setup: Alpha, Priority, Dimension and enabling * - Layer 1 setup: Alpha, Priority, Dimension and enabling * - Loading Color/Font/Text configuration * * @param None. * * @return None. * * @note None. * ******************************************************************************/ void external_OsdConfig(u8 layer,u16 Screen_width,u16 Screen_height,u16 Camera_width,u16 Camera_height,u16 xpos_start,u16 ypos_start) { /* Background color definition */
u16 screen_width = Screen_width; u16 screen_height = Screen_height; u16 camera_width = Camera_width; u16 camera_height = Camera_height;
u8 Red = 0x0; //0xFF; u8 Blue = 0x0; //0; u8 Green = 0x0; //0;
/* Layer property definition */
int LayerAlphaValue = 0xFF; int LayerGlobalAlphaEnable = 1; int LayerPriority;
if(layer==0) LayerPriority = XOSD_LAYER_PRIORITY_0; else if(layer==1) LayerPriority = XOSD_LAYER_PRIORITY_1; else if(layer==2) LayerPriority = XOSD_LAYER_PRIORITY_2; else if(layer==3) LayerPriority = XOSD_LAYER_PRIORITY_3; else if(layer==4) LayerPriority = XOSD_LAYER_PRIORITY_4; else if(layer==5) LayerPriority = XOSD_LAYER_PRIORITY_5; else if(layer==6) LayerPriority = XOSD_LAYER_PRIORITY_6; else if(layer==7) LayerPriority = XOSD_LAYER_PRIORITY_7; else xil_printf("Para err!");
xil_printf("OsdConfig(%d,%d) Start\r\n", screen_width, screen_height);
/* Set screen size */ xil_printf("-- Set screen size ...\r\n" );
XOSD_SetScreenSize(&Osd, screen_width, screen_height);
/* Set Background color */ xil_printf("-- Set Background color ...\r\n" );
XOSD_SetBackgroundColor(&Osd, Red, Blue, Green);
/* Set up Layer's Alpha, Priority, Dimension and enable it */ xil_printf("-- Set up Layer 0's Alpha, Priority, Dimension and enable it ...\r\n" ); XOSD_SetLayerAlpha(&Osd, layer, LayerGlobalAlphaEnable, LayerAlphaValue); XOSD_SetLayerPriority(&Osd, layer, LayerPriority); XOSD_SetLayerDimension(&Osd, layer, xpos_start, ypos_start, camera_width, camera_height); XOSD_EnableLayer(&Osd, layer);
/* Enable the OSD device and tell it to pick up the register changes */ xil_printf("-- Enable the OSD device ...\r\n" );
//XOSD_Enable(&Osd);
xil_printf("OsdConfig Done\r\n" ); return; } /*****************************************************************************/ /** * * This function draws text using the OSD device * * @param None. * * @return None. * * @note None. * ******************************************************************************/ void OsdDrawText(int Gcindex,int x_pos, int y_pos, int color, int string_index, int text_size,u8 BankIndex) { xil_printf("OsdDrawText Start\r\n" );
/* Instruction buffer */ u32 Instruction[XOSD_INS_SIZE];
u16 ObjType = XOSD_INS_OPCODE_TXT; /* A text string XOSD_INS_OPCODE_TXT*/ u8 ObjSize = (text_size<<4); /* Text Scale factor (1x, 2x, 4x, 8x) */ u16 XStart = x_pos; /* Horizontal start pixel of the text */ u16 YStart = y_pos; /* Vertical start line of the text */ u16 XEnd = x_pos; /* Horizontal end pixel of the text (not used) */ u16 YEnd = y_pos; /* Vertical end line of the text (must be same as YStart) */ u8 TextIndex = string_index; /* Index of Text String */ u8 ColorIndex = color; /* Color used to draw text */
/* Create a text command instruction */ xil_printf("-- Create a box command instruction ...\r\n" );
XOSD_CreateInstruction(&Osd, Instruction, Gcindex, ObjType, ObjSize, XStart, YStart, XEnd, YEnd, TextIndex, ColorIndex);
/* Load the instruction to draw the box in the OSD output */ xil_printf("-- Load the instruction to draw the box in the OSD output ...\r\n" );
XOSD_LoadInstructionList(&Osd, Gcindex, BankIndex, Instruction, 1);
xil_printf("OsdDrawBox Done\r\n" ); return; } /*****************************************************************************/ /** * * This function draws a box using the OSD device * * @param None. * * @return None. * * @note None. * ******************************************************************************/ void OsdDrawBox(int Gcindex,u16 x_start, u16 y_start, u16 x_last, u16 y_last, u8 color,u8 BankIndex) { xil_printf("OsdDrawBox Start\r\n" );
/* Instruction buffer */ u32 Instruction[XOSD_INS_SIZE];
/* Instruction property definition */ xil_printf("-- Instruction property definition ...\r\n" );
u16 ObjType = XOSD_INS_OPCODE_BOX; /* A box */ u8 ObjSize = 2; /* Box boarder width */ u16 XStart = x_start; /* Horizontal start pixel of the box */ u16 YStart = y_start; /* Vertical start line of the box */ u16 XEnd = x_last; /* Horizontal end pixel of the box */ u16 YEnd = y_last; /* Vertical end line of the box */ u8 TextIndex = 0; /* Ignored in box instruction case */ u8 ColorIndex = color; /* Color used to draw the box */
/* Create a box command instruction */ xil_printf("-- Create a box command instruction ...\r\n" );
XOSD_CreateInstruction(&Osd, Instruction, 2, ObjType, ObjSize, XStart, YStart, XEnd, YEnd, TextIndex, ColorIndex);
/* Load the instruction to draw the box in the OSD output */ xil_printf("-- Load the instruction to draw the box in the OSD output ...\r\n" );
XOSD_LoadInstructionList(&Osd,Gcindex, BankIndex, Instruction, 1);
xil_printf("OsdDrawBox Done\r\n" ); return; }
|