📄 osdsm.c
字号:
{
ucNumColor=ucNumColor;
COsdFxHLine(ucRow, ucCol, ucLength, ((ucColor & 0x0f) << 4), _WRITE_BYTE2);
COsdFxSliderMU(ucRow, ucCol, ucLength, usValue, usRange + usMin, usMin);
COsdFxChange1bitColor(ucRow, ucCol + ucLength + 3, WIDTH(3), HEIGHT(1),_MUCP_TEXT,_MUCP_TEXTBG);
COsdFxShowNumberMU(ucRow, ucCol + ucLength + 3, usValue - usMin, (_ALIGN_RIGHT | _FORCE_SHOW_NUMBER_OFF| _SHOW_3));
}
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
void COsdFxSliderMU(BYTE ucRow, BYTE ucCol, BYTE ucLength, BYTE usValue, BYTE usMax, BYTE usMin)
{
BYTE cnt;
usValue = usValue - usMin;
pData[0] = _L_BAR;
for(cnt=1;cnt<(ucLength - 1);cnt++)
pData[cnt] = _0_BAR;
pData[ucLength - 1] = _R_BAR;
cnt =((WORD)(usValue * (ucLength - 2))) / (usMax - usMin);
if(cnt < (ucLength - 2))
pData[cnt + 1] = (_0_BAR) + (((((WORD)(usValue * (ucLength - 2))) * _SLIDER_RESOLUTION) / (usMax - usMin)) % _SLIDER_RESOLUTION);
for(;cnt>0;cnt--)
pData[cnt] = _0_BAR + _SLIDER_RESOLUTION - 1;
COsdFxCalcStartAddress(ucRow, ucCol, _WRITE_BYTE1);
CScalerWrite(_OSD_DATA_PORT_92, ucLength, pData, _NON_AUTOINC);
}
//--------------------------------------------------
// Description :
// Input Value :
// Output Value :
//--------------------------------------------------
void COsdFxLoadTextMU(BYTE ucRow, BYTE ucCol, BYTE ucSelect, BYTE code *pArray)
{
BYTE cnt, cnt1, cnt2, ss, temp, temp1, temp2, temp3;
WORD length;
length = cnt = cnt1 = cnt2 = ss = temp = temp1 = 0;
while(_TRUE)
{
if(*(pArray + cnt) == _END_)
{
if(temp == ucSelect)
break;
else
{
pArray += (cnt + 1);
cnt = 0;
}
temp++;
}
cnt++;
}
cnt = cnt1 = cnt2 = temp1 = 0;
temp3 = ucRow;
COsdFxCalcStartAddress(ucRow, ucCol, _WRITE_BYTE0);
while(*(pArray + cnt) != _END_)
{
switch(*(pArray + cnt))
{
case _EXT_:
if(*(pArray + cnt + 1) > 3)
return;
temp = _EXT_ + *(pArray + cnt + 1);
cnt += 2;
break;
case _REPEAT_:
if(temp1 < (*(pArray + cnt + 1) - 1))
temp1++;
else
{
cnt += 2;
temp1 = 0;
continue;
}
break;
case _NEXT_:
if(length%12)
{
COsdFxCalcStartAddress(ucRow, ucCol + cnt1, _WRITE_BYTEALL);
pData[0] = 0x00;
pData[1] = ((12 - length%12) < 4) ? (12 - length%12) + 12 : (12 - length%12);
pData[2] = 0x00;
CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
}
cnt++;
COsdFxCalcStartAddress(++ucRow, ucCol, _WRITE_BYTE0);
length = 0;
cnt1 = 0;
continue;
default:
temp = *(pArray + cnt);
cnt++;
break;
}
cnt1++;
ss = 0;
temp2 = 0;
while(_TRUE)
{
if((temp == (tOSD_CHARWIDTH_TABLE[0])[ss*2]) && ((tOSD_CHARWIDTH_TABLE[0])[ss*2+1] != _END_))
{
pData[0] = (8<<4) | 12;//(tOSD_CHARWIDTH_TABLE[0])[ss*2+1];
length += 12;//((tOSD_CHARWIDTH_TABLE[0])[ss*2+1] & 0x0f);
CScalerWrite(_OSD_DATA_PORT_92, 1, pData, _NON_AUTOINC);
break;
}
else
{
if(((tOSD_CHARWIDTH_TABLE[0])[ss*2] == _END_) && ((tOSD_CHARWIDTH_TABLE[0])[ss*2+1] == _END_))
{
temp2 = 1;
break;
}
}
ss++;
}
ss = 0;
while(temp2 == 1)
{
if((temp == (tOSD_CHARWIDTH_TABLE[ucSelect+1])[ss*2]) && ((tOSD_CHARWIDTH_TABLE[ucSelect+1])[ss*2+1] != _END_))
{
pData[0] = (8<<4) | 12;//(tOSD_CHARWIDTH_TABLE[ucSelect+1])[ss*2+1];
length += 12;//((tOSD_CHARWIDTH_TABLE[ucSelect+1])[ss*2+1] & 0x0f);
CScalerWrite(_OSD_DATA_PORT_92, 1, pData, _NON_AUTOINC);
break;
}
else
{
if(((tOSD_CHARWIDTH_TABLE[ucSelect+1])[ss*2] == _END_) && ((tOSD_CHARWIDTH_TABLE[ucSelect+1])[ss*2+1] == _END_))
{
COsdFxCalcStartAddress(ucRow, ucCol + cnt1, _WRITE_BYTE0);
length += 12;
break;
}
}
ss++;
}
}
if(length%12)
{
COsdFxCalcStartAddress(ucRow, ucCol + cnt1, _WRITE_BYTEALL);
pData[0] = 0x00;
pData[1] = ((12 - length%12) < 4) ? (12 - length%12) + 12 : (12 - length%12);
pData[2] = 0x00;
CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
}
ucRow = temp3;
cnt = 0;
temp1 = 0;
COsdFxCalcStartAddress(ucRow, ucCol, _WRITE_BYTE1);
while(*(pArray + cnt) != _END_)
{
switch(*(pArray + cnt))
{
case _EXT_:
if(*(pArray + cnt + 1) > 3)
return;
temp = _EXT_ + *(pArray + cnt + 1);
cnt += 2;
break;
case _REPEAT_:
if(temp1 < (*(pArray + cnt + 1) - 1))
temp1++;
else
{
cnt += 2;
temp1 = 0;
continue;
}
break;
case _NEXT_:
cnt++;
COsdFxCalcStartAddress(++ucRow, ucCol, _WRITE_BYTE1);
continue;
default:
temp = *(pArray + cnt);
cnt++;
break;
}
CScalerWrite(_OSD_DATA_PORT_92, 1, &temp, _NON_AUTOINC);
}
}
//--------------------------------------------------
// Description :
// Input Value :
// ucPar:
// bit 0 (Align left or right) [ 0: Align left 1: Align right ]
// bit 1 (Force to show number) [ 0: Disable 1: Enable ]
// bit 4 ~ 6 (Show numbers) [ 0 ~ 7: Show 1 ~ 8 numbers ]
// Output Value :
//--------------------------------------------------
void COsdFxShowNumberMU(BYTE ucRow, BYTE ucCol, BYTE usValue, BYTE ucPar)
{
BYTE index, temp, i;
pData[2] = (_0_ + (usValue)/100);
pData[1] = (_0_ + (usValue%100)/10);
pData[0] = (_0_ + (usValue%10));
for(index=0;index<3;index++)
{
if(pData[2 - index] != ((bit)(ucPar & _BIT1) ? 0x00 : _0_))
{
index = 2 - index;
break;
}
}
if((bit)(ucPar & _BIT1))
{
temp = (ucPar & 0x70) >> 4;
index = (ucPar & 0x70) >> 4;
}
else
{
temp = (ucPar & 0x70) >> 4;
if(temp < index)
temp = index;
}
if(usValue == 0 && !((bit)(ucPar & 0x02)) )
index = 0;
if((bit)(ucPar & 0x01)) // Align Right
COsdFxCalcStartAddress(ucRow, ucCol - temp, _WRITE_BYTE1);
else // Align Left
COsdFxCalcStartAddress(ucRow, ucCol, _WRITE_BYTE1);
for(i=0;i<=temp;i++)
{
if(index >= temp)
{
pData[i + 6] = pData[index - i];
}
else
{
if(i < (temp - index))
pData[i + 6] = 0x00;
else
pData[i + 6] = pData[index - (i - (temp - index))];
}
}
CScalerWrite(_OSD_DATA_PORT_92, (temp + 1), &pData[6], _NON_AUTOINC);
//return temp + 1;
}
//for ir
void CIrActionMute(void)
{
if (ucCurrState != _ACTIVE_STATE)
return;
if (ucOsdState == _MENU_NONE) {
//clear original text, may not need
COsdDispClearText(ROW(0), COL(0),WIDTH(34), HEIGHT(1));
//apply osd map
COsdFxApplyMapSetting(_OSD_MAP4);
//border color
COsdFxPWMCtlCommand(ADDRESS(3), _WRITE_BYTE1, (_OSD_BORDER_COLOR<<4));
COsdMUMenuSetPosition();
//construct:
COsdMUMenuSaturation();
COsdMULeftMute();
COsdFxEnableOsd();
}
else if (ucOsdState == _MENU_MU_MUTE) {
COsdMULeftMute();
}
CTimerReactiveTimerEvent(SEC(stOsdUserData.OsdTimeout),COsdDispOsdTimerEvent);
}
void LED_Message_HaoZhen(BYTE msg)
{
#if (_PCB_TYPE == _PCB_PV013BA1)
#if (_PCB_RIGHTECH_A_USE_PV013BA1 == _TRUE)
msg = msg;
return;
#else
switch(msg)
{
case LED_MSG_GREEN:
bLEDGREEN = _LED_ON;
break;
case LED_MSG_BLACK:
bLEDGREEN = _LED_OFF;
}
#endif
#else
switch(msg)
{
case LED_MSG_GREEN:
bLEDGREEN = _LED_ON;
break;
case LED_MSG_BLACK:
bLEDGREEN = _LED_OFF;
}
#endif
}
//----------------------------------------------------------------------------------------------------
#endif //end of #if(_OSD_SM_ENABLE)
#endif //end of #if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)
#endif //end of #if(_VIDEO_SUPPORT == _ON)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -