⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radio.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 5 页
字号:
        InfoRect.rect.wTop = RADIO_INFO_START_V-2;
        InfoRect.rect.wRight = InfoRect.rect.wLeft+RADIO_INFO_WIDTH-1;
        InfoRect.rect.wBottom = InfoRect.rect.wTop+RADIO_INFO_HEIGHT+3;
        // Clear info region.
        GDI_FillRect(0, &InfoRect);
*/        
        DrawBitmap.bBitmapID = 3;        
        DrawBitmap.wDestX = RADIO_INFO_START_H;
        DrawBitmap.wDestY = RADIO_INFO_START_V;        
        DrawBitmap.bDestRegion = 0;
        // Clear info region.   
        GDI_DrawZipBitmap(&DrawBitmap, _aRADIOArray, (PBYTE)RADIO_UNZIP_ADDR, RADIO_UNZIP_WINDOW_ADDR);       
    }

    switch (_bRADIOMode)
    {
#ifdef SUPPORT_RADIO_RDS    
    case RADIO_MODE_NORMAL:
    case RADIO_MODE_FAVORITE:
        _RADIO_UpdateRDSInfo(bDrawBG);
        break;
#endif		
    case RADIO_MODE_RECORD:        
        _RADIO_UpdateRecordInfo(bDrawBG, bListBGType, RADIO_COLOR_HIGHLIGHT);
        break;
    case RADIO_MODE_SCAN:		
        _RADIO_UpdateScanInfo(bDrawBG);
        break;
    case RADIO_MODE_SELECTION:
#ifdef SUPPORT_RADIO_RDS		
        if ((_bRADIOBackupMode == RADIO_MODE_NORMAL) || (_bRADIOBackupMode == RADIO_MODE_FAVORITE))
        {
            _RADIO_UpdateRDSInfo(bDrawBG);
        }
        else
#endif			
        if (_bRADIOBackupMode == RADIO_MODE_RECORD)
        {
            _RADIO_UpdateRecordInfo(bDrawBG, RADIO_COLOR_NORMAL, RADIO_COLOR_HIGHLIGHT);
        }
        break;
    default:
        break;
    }
}

//*********************************************************************************************************
//  Function    :   _RADIO_UpdateRDSInfo
//  Abstract    :   Call this function to update and display RDS info.
//  Arguments  :   bDrawBG: 1: draw background  0: not draw background
//  Return	 :   
//  Side Effect :   none.
//  Notes       :
//*********************************************************************************************************
#ifdef SUPPORT_RADIO_RDS
void _RADIO_UpdateRDSInfo(BYTE bDrawBG)
{
    PARM_RECT RDSRect;
    PARM_DRAW_STRING RDSStrAttr;
    BYTE bTemp1, bTemp2;
    WORD wNum;
    WORD RDSDataLength;
    BYTE bIndex;
    BYTE bCharWidth;
    PARM_BITMAP_COPY RDSBitmapCopy;

    if (bDrawBG)
    {
        RDSRect.bColor = RADIO_PALETTE_ENTRY_FREQ_FRAME_BG;
        RDSRect.rect.wLeft = RADIO_RDS_START_H;
        RDSRect.rect.wTop = RADIO_RDS_START_V;
        RDSRect.rect.wRight = RDSRect.rect.wLeft+RADIO_RDS_WIDTH-1;
        RDSRect.rect.wBottom = RDSRect.rect.wTop+RADIO_RDS_HEIGHT-1;
        // Fill RDS frame.
        GDI_FillRoundRect(0, RADIO_BAND_FRAME_ARC_VALUE, &RDSRect);
    
        RDSRect.bColor = RADIO_PALETTE_ENTRY_FREQ_FRAME_BG_OUTLINE;
        RDSRect.rect.wLeft = RDSRect.rect.wLeft-RADIO_ARC_PIXEL;
        RDSRect.rect.wTop = RDSRect.rect.wTop-RADIO_ARC_PIXEL;
        RDSRect.rect.wRight = RDSRect.rect.wRight+RADIO_ARC_PIXEL;
        RDSRect.rect.wBottom = RDSRect.rect.wBottom+RADIO_ARC_PIXEL;
        // Draw RDS frame ourter line.
        GDI_DrawRoundRect(0, RADIO_BAND_FRAME_OUTER_ARC_VALUE, RADIO_BAND_FRAME_ARC_VALUE, &RDSRect);        
    }
    // Update each RDS info.
    for (bTemp1 = 0; bTemp1 < SUPPORT_RDS_TYPE_NUMBER; bTemp1++)
    {
        if ((bTemp1 == _bCurRDSType) && (_bRDSDataRemainNum != 0)) // Current displaying RDS info. can't update.
            continue;
        if (RADIODRV_RDSTYPE(SupportRDSType[bTemp1]))  // If support this type?
        { 		
            if (RADIODRV_UpdateRDS(SupportRDSType[bTemp1], aGetRDSData)) // RDS data ready?
            {
                if (SupportRDSType[bTemp1] == RDS_CT) // Data need change to ASCII
                {
                    OSDUTL_PrepareOutputString();	
                    wNum = ((WORD)aGetRDSData[1]) << 8;
                    wNum |= (WORD)aGetRDSData[2];
                    OSDUTL_OutputNumFromIndex(wNum);  // Year
                    OSDUTL_CopyStringFromIndex(aRADIOSolidus); // "/"
                    OSDUTL_OutputNumFromIndex(aGetRDSData[3]); // Month	
                    OSDUTL_CopyStringFromIndex(aRADIOSolidus); // "/"
                    OSDUTL_OutputNumFromIndex(aGetRDSData[4]); // Date
                    OSDUTL_CopyStringFromIndex(aRADIOSpace); // " "
                    OSDUTL_CopyStringFromIndex(aWeekDay[aGetRDSData[5]-1]);
                    OSDUTL_CopyStringFromIndex(aRADIOSpace); // " "
                    OSDUTL_OutputNumFromIndex(aGetRDSData[6]); // Hour                    
                    OSDUTL_CopyStringFromIndex(aRADIOColon); // " "
                    OSDUTL_OutputNumFromIndex(aGetRDSData[7]); // Minute                      
                    
                    aConvRDSData[bTemp1][0] = __wOSDUTLStringBuf[0];                    
    		
                    for (bTemp2 = 1; bTemp2 <= aConvRDSData[bTemp1][0]; bTemp2++)
                    {                  
                        aConvRDSData[bTemp1][bTemp2] = __wOSDUTLStringBuf[bTemp2];
                    }	
                }
                else  // ASCII
                {
                    aConvRDSData[bTemp1][0] = aGetRDSData[0];
    		
                    for (bTemp2 = 1; bTemp2 <= aConvRDSData[bTemp1][0]; bTemp2++)
                    {                  
                        aConvRDSData[bTemp1][bTemp2] = CONVCHAR_ASCII_To_CTK(aGetRDSData[bTemp2]);
                    }	
                }
				
                RDSUpdateStatus[bTemp1] = 1;				
            }
        }
    }

    if (_bRDSDataRemainNum == 0) // Prepare RDS info. display.
    {
        if ((OS_GetSysTimer()-_dwRDSWaitTime) < RADIO_RDS_WAIT_TIME) // Wait for RDS data ready.
            return;
        if (_bCurRDSType >= SUPPORT_RDS_TYPE_NUMBER)
        {
            _bCurRDSType = 0;				
        }	

        if (RDSUpdateStatus[_bCurRDSType] == 0) // Non updated.
        {
            _bCurRDSType++;
            return;
        }
		
        RDSUpdateStatus[_bCurRDSType] = 0; // Clear the update status. the RDS info. will be showed.		
        _bRDSDataRemainNum = aConvRDSData[_bCurRDSType][0];
        _wRDSDataPos = RADIO_RDS_INFO_START_H;           
    }
    else // RDS info. display.
    {
        if ((_wRDSDataPos-RADIO_RDS_MOVE_STEP) < RADIO_RDS_INFO_BOUNDARY_LEFT) // The first character have reached the left boundry.
        {
            _bRDSDataRemainNum--;
            if (_bRDSDataRemainNum == 0) // Finish current RDS string display. 
            {
                _dwRDSWaitTime = OS_GetSysTimer();
                _bCurRDSType++;                       
                /*				
                RDSRect.bColor = RADIO_PALETTE_ENTRY_FREQ_FRAME_BG;
                RDSRect.rect.wLeft = RADIO_RDS_START_H;
                RDSRect.rect.wTop = RADIO_RDS_START_V;
                RDSRect.rect.wRight = RDSRect.rect.wLeft+RADIO_RDS_WIDTH-1;
                RDSRect.rect.wBottom = RDSRect.rect.wTop+RADIO_RDS_HEIGHT-1;
                // Clear RDS frame.        
                GDI_FillRoundRect(0, RADIO_BAND_FRAME_ARC_VALUE, &RDSRect);
                */
                return;
            }
      			
            _wRDSDataPos = _wRDSDataPos + GDI_GetCharWidth(aShowRDSData[1]) - RADIO_RDS_MOVE_STEP;            
            bTemp1 = 1;	
            // Check if the following characters also reached left boundy. 
            while (_wRDSDataPos < RADIO_RDS_INFO_BOUNDARY_LEFT)
            {
                _bRDSDataRemainNum--;                
                if (_bRDSDataRemainNum == 0) // Finish current RDS string display. 
                {
                    _dwRDSWaitTime = OS_GetSysTimer();
                    _bCurRDSType++;
                    /*
                    RDSRect.bColor = RADIO_PALETTE_ENTRY_FREQ_FRAME_BG;
                    RDSRect.rect.wLeft = RADIO_RDS_START_H;
                    RDSRect.rect.wTop = RADIO_RDS_START_V;
                    RDSRect.rect.wRight = RDSRect.rect.wLeft+RADIO_RDS_WIDTH-1;
                    RDSRect.rect.wBottom = RDSRect.rect.wTop+RADIO_RDS_HEIGHT-1;
                    // Clear RDS frame.        
                    GDI_FillRoundRect(0, RADIO_BAND_FRAME_ARC_VALUE, &RDSRect);
                    */
                    return;
                }
                bTemp1++;	
                _wRDSDataPos = _wRDSDataPos + GDI_GetCharWidth(aShowRDSData[bTemp1]);	
            }
        }
        else
        {
            _wRDSDataPos = _wRDSDataPos - RADIO_RDS_MOVE_STEP;
        }

        RDSDataLength = RADIO_RDS_INFO_BOUNDARY_RIGHT - _wRDSDataPos;
        bIndex = 0;
        // Grab characters for display.
        for (bTemp2 = 1; bTemp2 <= _bRDSDataRemainNum; bTemp2++)
        {
            bCharWidth = GDI_GetCharWidth(aConvRDSData[_bCurRDSType][aConvRDSData[_bCurRDSType][0]-_bRDSDataRemainNum+bTemp2]);
            if (bCharWidth <= RDSDataLength)
            {
                RDSDataLength -= bCharWidth;                
                bIndex++;
                aShowRDSData[bIndex] = aConvRDSData[_bCurRDSType][aConvRDSData[_bCurRDSType][0]-_bRDSDataRemainNum+bTemp2];
            }
            else
                break;
        }   
		
        aShowRDSData[0] = bIndex;        
	
        RDSRect.bColor = RADIO_PALETTE_ENTRY_FREQ_FRAME_BG;
        RDSRect.rect.wLeft = RADIO_RDS_INFO_DISPLAY_LEFT;
        RDSRect.rect.wTop = RADIO_RDS_INFO_DISPLAY_TOP;
        RDSRect.rect.wRight = RADIO_RDS_INFO_DISPLAY_RIGHT;
        RDSRect.rect.wBottom = RADIO_RDS_INFO_DISPLAY_BOTTOM;
        // Clear RDS frame.        
        GDI_FillRect(4, &RDSRect);

        RDSStrAttr.bTextColor = RADIO_PALETTE_ENTRY_TEXT_BLACK;       
        RDSStrAttr.bBackground = RDSRect.bColor;
        RDSStrAttr.bColorKey = 0;
        RDSStrAttr.bShadow1 = PAL_ENTRY_COLOR_TRANSPARENT;
        RDSStrAttr.bShadow2 = PAL_ENTRY_COLOR_TRANSPARENT;    
        RDSStrAttr.wX = _wRDSDataPos;
        RDSStrAttr.wY = RADIO_RDS_INFO_DISPLAY_TOP+((RADIO_RDS_HEIGHT-GDI_GetStringHeight(aShowRDSData))>>1);
        // Show RDS info.
        GDI_DrawString_909(4, &RDSStrAttr, aShowRDSData);

        RDSBitmapCopy.bSrcRegion = 4;
        RDSBitmapCopy.bDestRegion = 0;        
        RDSBitmapCopy.SrcRect.wLeft = RADIO_RDS_INFO_DISPLAY_LEFT;
        RDSBitmapCopy.SrcRect.wTop = RADIO_RDS_INFO_DISPLAY_TOP;
        RDSBitmapCopy.SrcRect.wRight = RADIO_RDS_INFO_DISPLAY_RIGHT;
        RDSBitmapCopy.SrcRect.wBottom = RADIO_RDS_INFO_DISPLAY_BOTTOM;
        RDSBitmapCopy.wDestX = RADIO_RDS_START_H+15;
        RDSBitmapCopy.wDestY = RADIO_RDS_START_V;
        // Show RDS info.
        GDI_BitmapCopy(&RDSBitmapCopy);
/*

        RDSRect.bColor = RADIO_PALETTE_ENTRY_FREQ_FRAME_BG;
        RDSRect.rect.wLeft = RADIO_RDS_START_H;
        RDSRect.rect.wTop = RADIO_RDS_START_V;
        RDSRect.rect.wRight = RDSRect.rect.wLeft+RADIO_RDS_WIDTH-1;
        RDSRect.rect.wBottom = RDSRect.rect.wTop+RADIO_RDS_HEIGHT-1;
        // Clear RDS frame.        
        GDI_FillRoundRect(0, RADIO_BAND_FRAME_ARC_VALUE, &RDSRect);

        RDSStrAttr.bTextColor = RADIO_PALETTE_ENTRY_TEXT_BLACK;       
        RDSStrAttr.bBackground = RDSRect.bColor;
        RDSStrAttr.bColorKey = 0;
        RDSStrAttr.bShadow1 = PAL_ENTRY_COLOR_TRANSPARENT;
        RDSStrAttr.bShadow2 = PAL_ENTRY_COLOR_TRANSPARENT;    
        RDSStrAttr.wX = _wRDSDataPos;
        RDSStrAttr.wY = RADIO_RDS_START_V+((RADIO_RDS_HEIGHT-GDI_GetStringHeight(aShowRDSData))>>1);
        // Show RDS info.
        GDI_DrawString_909(0, &RDSStrAttr, aShowRDSData);

        RDSRect.rect.wLeft = RADIO_RDS_INFO_BOUNDARY_LEFT;
        RDSRect.rect.wTop = RDSStrAttr.wY;
        RDSRect.rect.wRight = RDSRect.rect.wLeft+20-1;
        RDSRect.rect.wBottom = RDSRect.rect.wTop+GDI_GetStringHeight(aShowRDSData)-1;
        // Clear left part of the string that exceed display region.
        GDI_FillRect(0, &RDSRect);

        RDSRect.rect.wLeft = RADIO_RDS_INFO_START_H;       
        RDSRect.rect.wRight = RDSRect.rect.wLeft+20-1;     
        // Clear right part of the string that exceed display region.
        GDI_FillRect(0, &RDSRect);
*/
/*
        RDSRect.bColor = RADIO_PALETTE_ENTRY_FREQ_FRAME_BG_OUTLINE;
        RDSRect.rect.wLeft = RADIO_RDS_START_H-RADIO_ARC_PIXEL;
        RDSRect.rect.wTop = RADIO_RDS_START_V-RADIO_ARC_PIXEL;
        RDSRect.rect.wRight = RADIO_RDS_START_H+RADIO_RDS_WIDTH-1+RADIO_ARC_PIXEL;
        RDSRect.rect.wBottom = RADIO_RDS_START_V+RADIO_RDS_HEIGHT-1+RADIO_ARC_PIXEL;
        // Draw RDS frame ourter line.
        GDI_DrawRoundRect(0, RADIO_BAND_FRAME_OUTER_ARC_VALUE, RADIO_BAND_FRAME_ARC_VALUE, &RDSRect);        
*/        
    }
	
    _dwRDSFlashTime = OS_GetSysTimer();
}

//*********************************************************************************************************
//  Function    :   _RADIO_ResetRDS
//  Abstract    :   Call this function to reset RDS status
//  Arguments  :   bClear: 1: Clear the displaying RDS scrolling text  0: not Clear
//  Return	 :   
//  Side Effect :   none.
//  Notes       :
//*********************************************************************************************************
void _RADIO_ResetRDS(BYTE bClear)
{
    PARM_RECT RDSRect;
    BYTE bTemp;

    _bRDSDataRemainNum = 0;
    _bCurRDSType = 0;	
			
    for (bTemp = 0; bTemp < RDS_TYPE_NUMBER; bTemp++)
    {
        RDSUpdateStatus[bTemp] = 0; //Initial the RDS update status.
    }   

    if (bClear)		
    {
        RDSRect.bColor = RADIO_PALETTE_ENTRY_FREQ_FRAME_BG;
        RDSRect.rect.wLeft = RADIO_RDS_START_H;
        RDSRect.rect.wTop = RADIO_RDS_START_V;
        RDSRect.rect.wRight = RDSRect.rect.wLeft+RADIO_RDS_WIDTH-1;
        RDSRect.rect.wBottom = RDSRect.rect.wTop+RADIO_RDS_HEIGHT-1;
        // Clear RDS frame.        
        GDI_FillRoundRect(0, RADIO_BAND_FRAME_ARC_VALUE, &RDSRect);
    }

    //_dwRDSFlashTime = OS_GetSysTimer();	
}
#endif	

void _RADIO_UpdateRecordInfo(BYTE bDrawBG, BYTE bListBGType, BYTE bTextType)
{
    PARM_RECT RecordRect;
    PARM_DRAW_STRING RecordStrAttr;

    if (bDrawBG)
    {
        RecordRect.bColor = RADIO_PALETTE_ENTRY_FREQ_FRAME_BG;
        RecordRect.rect.wLeft = RADIO_RECORD_START_H;
        RecordRect.rect.wTop = RADIO_RECORD_START_V;
        RecordRect.rect.wRight = RecordRect.rect.wLeft+RADIO_RECORD_WIDTH-1;
        RecordRect.rect.wBottom = RecordRect.rect.wTop+RADIO_RECORD_HEIGHT-1;
        // Fill record frame.
        GDI_FillRoundRect(0, RADIO_BAND_FRAME_ARC_VALUE, &RecordRect);
    
        RecordRect.bColor = RADIO_PALETTE_ENTRY_FREQ_FRAME_BG_OUTLINE;
        RecordRect.rect.wLeft = RecordRect.rect.wLeft-RADIO_ARC_PIXEL;
        RecordRect.rect.wTop = RecordRect.rect.wTop-RADIO_ARC_PIXEL;
        RecordRect.rect.wRight = RecordRect.rect.wRight+RADIO_ARC_PIXEL;
        RecordRect.rect.wBottom = RecordRect.rect.wBottom+RADIO_ARC_PIXEL;
        // Draw record frame ourter line.
        GDI_DrawRoundRect(0, RADIO_BAND_FRAME_OUTER_ARC_VALUE, RADIO_BAND_FRAME_ARC_VALUE, &RecordRect);
    
        RecordRect.rect.wLeft = RADI

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -