?? radiomodulerdsapi.c
字號(hào):
int GroupType1B_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
#ifdef Radio_Module_GUI
FM_RDS_VAL_F |= (RDS_PI_F|RDS_TP_F|RDS_PTY_F|RDS_PIN_F);
#endif
RDSInfo.DAY = (FmRDSData.BlockD & DAY_Mask) >> 11;
RDSInfo.HOUR = (FmRDSData.BlockD & HOUR_Mask) >> 6;
RDSInfo.MIN = FmRDSData.BlockD & MIN_Mask;
return OK;
}
int GroupType2A_proc(FmRDSDataStruct FmRDSData)
{
RM_U8 CUR_AB_F;
RM_U8 CAdd;
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
#ifdef Radio_Module_GUI
FM_RDS_VAL_F |= (RDS_PI_F|RDS_TP_F|RDS_PTY_F|RDS_RT_F);
#endif
CUR_AB_F = (FmRDSData.BlockB & RT_AB_Mask) >> 4;
if(CUR_AB_F != RDSInfo.RT_AB_F)
{
RDSInfo.RT_AB_F = CUR_AB_F;
#ifdef Radio_Module_Console_Debug
#ifdef Radio_Module_GUI
Init_RT_seg();
#endif
#endif
}
CAdd = FmRDSData.BlockB & CAdd_Mask;
RDSInfo.RT[CAdd*4] = (FmRDSData.BlockC & RT_H_Mask) >> 8;
RDSInfo.RT[CAdd*4+1] = FmRDSData.BlockC & RT_L_Mask;
RDSInfo.RT[CAdd*4+2] = (FmRDSData.BlockD & RT_H_Mask) >> 8;
RDSInfo.RT[CAdd*4+3] = FmRDSData.BlockD & RT_L_Mask;
return OK;
}
int GroupType2B_proc(FmRDSDataStruct FmRDSData)
{
RM_U8 CUR_AB_F;
RM_U8 CAdd;
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
#ifdef Radio_Module_GUI
FM_RDS_VAL_F |= (RDS_PI_F|RDS_TP_F|RDS_PTY_F|RDS_RT_F);
#endif
CUR_AB_F = (FmRDSData.BlockB & RT_AB_Mask) >> 4;
if(CUR_AB_F != RDSInfo.RT_AB_F)
{
RDSInfo.RT_AB_F = CUR_AB_F;
#ifdef Radio_Module_Console_Debug
#ifdef Radio_Module_GUI
Init_RT_seg();
#endif
#endif
}
CAdd = FmRDSData.BlockB & CAdd_Mask;
RDSInfo.RT[CAdd*4] = (FmRDSData.BlockD & RT_H_Mask) >> 8;
RDSInfo.RT[CAdd*4+1] = FmRDSData.BlockD & RT_L_Mask;
return OK;
}
int GroupType3A_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
return OK;
}
int GroupType3B_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
return OK;
}
int GroupType4A_proc(FmRDSDataStruct FmRDSData)
{
RM_U32 MJD;
RM_U8 K;
RM_U16 Yp,Mp,D;
RM_U8 Tmp[8];
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
#ifdef Radio_Module_GUI
FM_RDS_VAL_F |= (RDS_PI_F|RDS_CT_F);
#endif
MJD = ((FmRDSData.BlockB & CT_MJD_H_Mask) << 15) | ((FmRDSData.BlockC & CT_MJD_L_Mask) >> 1);
//printf("MJD=%d\n",MJD);
RDSInfo.CT_HOUR = ((FmRDSData.BlockC & CT_HOUR_H_Mask) << 4) | ((FmRDSData.BlockD & CT_HOUR_L_Mask) >> 12);
RDSInfo.CT_MIN = ((FmRDSData.BlockD & CT_Min_Mask) >> 6);
RDSInfo.CT_P_M_F = FmRDSData.BlockD & CT_P_M_Mask;
RDSInfo.CT_LTO = FmRDSData.BlockD & CT_LTO_Mask;
Yp = (RM_U16)((MJD - 15078.2)/365.25);
Mp = (RM_U16)((MJD - 14956.1 - (RM_U16)(Yp * 365.25))/30.6001);
D = (RM_U16)(MJD-14956 -(RM_U16)(Yp * 365.25) - (RM_U16)(Mp * 30.6001));
if((Mp == 14) || (Mp == 15))
K = 1;
else
K = 0;
RDSInfo.CT_YEAR = (RM_U16)(1900 + Yp + K);
RDSInfo.CT_MON = (RM_U8)((Mp - 1 - (K * 12)) & 0xff);
RDSInfo.CT_DAY = (RM_U8)(D & 0xff);
RDSInfo.CT_WEEK = ((MJD + 2) % 7) + 1;
Tmp[0] = 0x00;
Tmp[1] = RDSInfo.CT_MIN;
Tmp[2] = RDSInfo.CT_HOUR;
Tmp[3] = RDSInfo.CT_WEEK;
Tmp[4] = RDSInfo.CT_DAY;
Tmp[5] = RDSInfo.CT_MON;
Tmp[6] = (unsigned char)(RDSInfo.CT_YEAR & 0xff);
Tmp[7] = (unsigned char)((RDSInfo.CT_YEAR & 0xff00) >> 8);
SetRTC(Tmp);
return OK;
}
int GroupType5A_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
return OK;
}
int GroupType5B_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
return OK;
}
int GroupType6A_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
return OK;
}
int GroupType6B_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
return OK;
}
int GroupType7A_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
return OK;
}
int GroupType8A_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
return OK;
}
int GroupType9A_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
return OK;
}
int GroupType14A_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
return OK;
}
int GroupType14B_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
return OK;
}
int GroupType15B_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
return OK;
}
int GroupType_Undef_proc(FmRDSDataStruct FmRDSData)
{
#ifdef Radio_Module_Console_Debug
Debug_RDS_Data(FmRDSData);
#endif
#ifdef Radio_Module_GUI
LCD_printf(10,66,Level_3_Color,0x0000,AlignLeft,True,False,"ProcError");
Init_RDSInfo();
#endif
return RDSProcessError;
}
#ifdef Radio_Module_Console_Debug
void Debug_RDS_Data(FmRDSDataStruct FmRDSData)
{
printf("%.4x . %.4x . %.4x . %.4x %s\n",FmRDSData.BlockA, FmRDSData.BlockB, FmRDSData.BlockC, FmRDSData.BlockD,
RDS_PROC_ARRAY[((FmRDSData.BlockB & GroupType_Mask) >> 11)].GroupType);
}
void Debug_RDS_Decoded_Info(void)
{
RM_U8 i;
if(RDSInfo.Available == True)
{
printf("RDS.PS :%s\n",RDSInfo.PS);
printf("RDS.MS :%s\n",MS_Info[RDSInfo.MS]);
printf("RDS.DI :0x%x.%s\n",RDSInfo.DI,DI_EXP[RDSInfo.DI]);
printf("RDS.PTY :%d.%s\n",RDSInfo.PTY,PTY_Name[RDSInfo.PTY]);
printf("RDS.TPTA:%s\n",TP_TA_EXP[RDSInfo.TP_TA]);
printf("RDS.AFs :%d\n",RDSInfo.AF_Number);
puts("RDS.AFT :");
for(i=0;i<25;i++)
{
if(RDSInfo.AF_Table[i]<10000)
printf(" %.2d.%.2d ",RDSInfo.AF_Table[i]/100,RDSInfo.AF_Table[i]%100);
else
printf("%.3d.%.2d ",RDSInfo.AF_Table[i]/100,RDSInfo.AF_Table[i]%100);
if(i%8==7)
{
puts("\n ");
}
}
putch('\n');
printf("RDS.DHM:%d-%d:%d, LA:%d\n",RDSInfo.DAY,RDSInfo.HOUR,RDSInfo.MIN,RDSInfo.LA);
printf("RDS.ECC:0x%.2x, TMC_ID:0x%.3x, PG_ID:0x%.3x, LangCode:0x%.3x, EWS_ID:0x%.3x\n",RDSInfo.ECC,RDSInfo.TMC_ID,RDSInfo.PG_ID,RDSInfo.LangCode,RDSInfo.EWS_ID);
printf("RDS.RT:%s\n",RDSInfo.RT);
printf("RDS.CT:%.4d-%.2d-%.2d Week%d %.2d:%.2d %c %.2d:00\n",RDSInfo.CT_YEAR,
RDSInfo.CT_MON,
RDSInfo.CT_DAY,
RDSInfo.CT_WEEK,
RDSInfo.CT_HOUR,
RDSInfo.CT_MIN,
((RDSInfo.CT_P_M_F != 0)?'-':'+'),
RDSInfo.CT_LTO);
puts("\n ");
}
}
#endif
#ifdef Radio_Module_GUI
void Init_RDSInfo(void)
{
RM_U8 i,j;
RM_U8 *addr;
i = sizeof(RDSInfo);
addr = (RM_U8 *)(&RDSInfo);
for(j=0;j<i;j++)
{
*addr++ = 0;
}
}
void Init_RT_seg(void)
{
RM_U8 i;
RM_U8 *addr;
addr = (RM_U8 *)(&RDSInfo.RT[0]);
for(i=0;i<65;i++)
{
*addr++ = 0;
}
}
void LCD_Disp_RDS_Decoded_Info(void)
{
RM_U8 i;
if(MemChk((RM_U32)(&PreRDSInfo),(RM_U32)(&RDSInfo),sizeof(RDSInfoStruct))!=0)
{
MemCpy((RM_U32)(&PreRDSInfo),(RM_U32)(&RDSInfo),sizeof(RDSInfoStruct));
Draw_RDS_Info_BK();
if(RDSInfo.Available == True)
{
LCD_printf(6,98,RDS_Name_Color,List_1_Color,AlignLeft,False,False,"PS:");LCD_printf(25,98,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"%s",RDSInfo.PS);
LCD_printf(92,98,RDS_Name_Color,List_1_Color,AlignLeft,False,False,"MS:");LCD_printf(111,98,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"%s",MS_Info[RDSInfo.MS]);
LCD_printf(166,98,RDS_Name_Color,List_1_Color,AlignLeft,False,False,"PTY:");LCD_printf(191,98,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"%d.%s",RDSInfo.PTY,PTY_Name[RDSInfo.PTY]);
LCD_printf(6,114,RDS_Name_Color,List_2_Color,AlignLeft,False,False,"TP.TA:");LCD_printf(43,114,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"%d.%d",((RDSInfo.TP_TA & 2) >> 1),(RDSInfo.TP_TA & 1));
LCD_printf(77,114,RDS_Name_Color,List_2_Color,AlignLeft,False,False,"DI:");LCD_printf(96,114,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"0x%x",RDSInfo.DI);
LCD_printf(130,114,RDS_Name_Color,List_2_Color,AlignLeft,False,False,"AF Number:");LCD_printf(191,114,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"%.2d",RDSInfo.AF_Number);
LCD_printf(233,114,RDS_Name_Color,List_2_Color,AlignLeft,False,False,"AF list:");
if(RDSInfo.AF_Table[0]<10000)
LCD_printf(282,114,RDS_AFT_Color,Title_Fr_Color,AlignLeft,True,False," %.2d.%.2d",RDSInfo.AF_Table[0]/100,RDSInfo.AF_Table[0]%100);
else
LCD_printf(282,114,RDS_AFT_Color,Title_Fr_Color,AlignLeft,True,False,"%.3d.%.2d",RDSInfo.AF_Table[0]/100,RDSInfo.AF_Table[0]%100);
for(i=0;i<24;i++)
{
if(RDSInfo.AF_Table[i+1]<10000)
LCD_printf(2+(i%8)*40,130+((i-(i%8))*2),RDS_AFT_Color,Title_Fr_Color,AlignLeft,True,False," %.2d.%.2d",RDSInfo.AF_Table[i+1]/100,RDSInfo.AF_Table[i+1]%100);
else
LCD_printf(2+(i%8)*40,130+((i-(i%8))*2),RDS_AFT_Color,Title_Fr_Color,AlignLeft,True,False,"%.3d.%.2d",RDSInfo.AF_Table[i+1]/100,RDSInfo.AF_Table[i+1]%100);
}
LCD_printf(6,178,RDS_Name_Color,List_2_Color,AlignLeft,False,False,"DHM:");LCD_printf(31,178,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"%.2d-%.2d:%.2d",RDSInfo.DAY,RDSInfo.HOUR,RDSInfo.MIN);
LCD_printf(91,178,RDS_Name_Color,List_2_Color,AlignLeft,False,False,"ECC:");LCD_printf(116,178,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"0x%.2x",RDSInfo.ECC);
LCD_printf(156,178,RDS_Name_Color,List_2_Color,AlignLeft,False,False,"TMC_ID:");LCD_printf(199,178,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"0x%.3x",RDSInfo.TMC_ID);
LCD_printf(245,178,RDS_Name_Color,List_2_Color,AlignLeft,False,False,"PG_ID:");LCD_printf(282,178,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"0x%.3x",RDSInfo.PG_ID);
LCD_printf(6,194,RDS_Name_Color,List_1_Color,AlignLeft,False,False,"LANG:");LCD_printf(37,194,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"0x%.3x",RDSInfo.LangCode);
LCD_printf(79,194,RDS_Name_Color,List_1_Color,AlignLeft,False,False,"EWS_ID:");LCD_printf(122,194,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"0x%.3x",RDSInfo.EWS_ID);
LCD_printf(164,194,RDS_Name_Color,List_1_Color,AlignLeft,False,False,"LA:");LCD_printf(183,194,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"%d",RDSInfo.LA);
LCD_printf(6,210,RDS_Name_Color,List_2_Color,AlignLeft,False,False,"RT:");
for(i=0;i<47;i++)
LCD_printf(25+(i*6),210,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"%c",RDSInfo.RT[i]);
LCD_printf(213,194,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"%s",(RM_U8 *)(&RDSInfo.RT[47]));
RM_DrawColorWindow(RDS_Name_Color,308,211,3,1);RM_DrawColorWindow(RDS_Name_Color,308,221,3,1);RM_DrawColorWindow(RDS_Name_Color,311,211,1,11);
RM_DrawColorWindow(RDS_Name_Color,209,195,3,1);RM_DrawColorWindow(RDS_Name_Color,209,205,3,1);RM_DrawColorWindow(RDS_Name_Color,208,195,1,11);
RM_DrawColorWindow(RDS_Name_Color,204,208,111,1);RM_DrawColorWindow(RDS_Name_Color,204,200,1,8);RM_DrawColorWindow(RDS_Name_Color,315,208,1,8);
RM_DrawColorWindow(RDS_Name_Color,204,200,5,1);RM_DrawColorWindow(RDS_Name_Color,311,216,5,1);
LCD_printf(6,226,RDS_Name_Color,List_1_Color,AlignLeft,False,False,"CT:");
LCD_printf(25,226,Level_3_Color,Title_Fr_Color,AlignLeft,True,False,"%.4d-%.2d-%.2d (Week%d) %.2d:%.2d %c %.2d:00",RDSInfo.CT_YEAR,
RDSInfo.CT_MON,
RDSInfo.CT_DAY,
RDSInfo.CT_WEEK,
RDSInfo.CT_HOUR,
RDSInfo.CT_MIN,
((RDSInfo.CT_P_M_F != 0)?'-':'+'),
RDSInfo.CT_LTO);
}
}
}
RM_U8 MemChk(RM_U32 b1add,RM_U32 b2add,RM_U32 bcsize)
{
RM_U32 i;
for(i=0;i<bcsize;i++)
{
if (*((RM_U8 *)(b1add+i)) != *((RM_U8 *)(b2add+i)))
return 1;
}
return 0;
}
void MemCpy(RM_U32 b1add,RM_U32 b2add,RM_U32 bcsize)
{
RM_U32 i;
for(i=0;i<bcsize;i++)
{
*((RM_U8 *)(b1add+i)) = *((RM_U8 *)(b2add+i));
}
return;
}
#endif
/////////////////////////////////************************** App ************************////////////////////////////////////
unsigned char APP_Set_RDS_Data(unsigned char *BlockAH, FmRDSDataStruct *RDSData)
{
unsigned char TempChar;
TempChar = *(BlockAH+8);
if(((TempChar & 0x3)==0x0) && ((TempChar & 0xc)==0x0) && ((TempChar & 0x30)==0x0) && ((TempChar & 0xc0)==0x0))//數(shù)據(jù)都是正確的
{
RDSData->BlockA = (*BlockAH)<<8 | (*(BlockAH+1));
RDSData->BlockB = (*(BlockAH+2))<<8 | (*(BlockAH+3));
RDSData->BlockC = (*(BlockAH+4))<<8 | (*(BlockAH+5));
RDSData->BlockD = (*(BlockAH+6))<<8 | (*(BlockAH+7));
return OK;
}
return RDSDataIncUncorrectErr;
}
void App_RDS_Data_Proc(FmRDSDataStruct *RDSData,RM_U8 RDSDataLen)
{
RM_U8 i;
if(RDSDataLen!=0)
{
RDSInfo.RDS_PI = RDSData->BlockA;
RDS_logo_View();
}
RDSInfo.Available = False;
for(i=0;i<RDSDataLen;i++)
{
RDSInfo.Available = True;
if(((RDSData+i)->BlockA) != RDSInfo.RDS_PI)//得到錯(cuò)誤的PI碼
{
RDSInfo.Available = False;
return;
}
if(RDS_PROC_ARRAY[(((RDSData+i)->BlockB & GroupType_Mask) >> 11)].proc(*(RDSData+i))!=OK)
{
RDSInfo.Available = False;
return;
}
}
return;
}
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -