亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cdc.c

?? 一款車載DVD的車機源程序(正在生成中的哦)
?? C
?? 第 1 頁 / 共 2 頁
字號:
     		case C_RANOFF:
     		case C_SCNOFF:
        		CtxBuffer[1] = 0x40;
        		break;
     		case C_RANDOM:
        		CtxBuffer[1] = 0x40;
        		CtxBuffer[2] = 0x20;            /* shuffle */
        		break;
     		case C_DSCRAN:
        		CtxBuffer[1] = 0x40;
        		CtxBuffer[2] = 0x10;            /* disc shuffle */
        		break;
     		case C_SCAN:  
        		CtxBuffer[1] = 0x40;
        		CtxBuffer[2] = 0x80;            /* scan */
        		break;
     		case C_DSCSCN:
        		CtxBuffer[1] = 0x40;
        		CtxBuffer[2] = 0x04;            /* disc scan */
        		break;
  	}
  	ctxcntr = 12;                         /* 12 bits */  
  	iCdc = CtxBuffer[0] & 0x0F;	//Check the OP code then can find out the bits
  	if ((iCdc == 0x01) || (iCdc == 0x02))
  		{
     		ctxcntr = 32;	//The OP code is 0001 or 0010,so the bit is 32 bits
     		if ((CtxBuffer[1] & 0xF0) == 0x10) //Check the Address then can find out the bits 
     			ctxcntr = 24;	//The Address is 0001,so the command memory is "CD control command",so the bit is 24 bits     
  		}
  	jCdc = 0;                             /* make parity */
  	for (iCdc = 0; iCdc < (ctxcntr/4)-1; iCdc++)
  		{
     		if (iCdc % 2)  
     			jCdc ^= (CtxBuffer[iCdc/2] & 0x0F);
     		else  
     			jCdc ^= ((CtxBuffer[iCdc/2] >> 4) & 0x0F);
     		jCdc &= 0x0F;
  		}
  	jCdc = (jCdc +1) & 0x0F;              /* parity nibble */
  	iCdc = ctxcntr / 8;
  	if (ctxcntr % 8)
  		{
     		CtxBuffer[iCdc]  = 0;
     		CtxBuffer[iCdc] += (jCdc << 4);
  		}
  	else
  		{
     		CtxBuffer[iCdc-1] &= 0xF0;
     		CtxBuffer[iCdc-1] += jCdc;
  		}  

  	ctbit = 0;
  	ctbyte = 0;
  	CtxState = CT_LOW;
  	PIN_CdcOut();
  	SetCdcFlg(RdyCtx);
}


/*--------------------------------------------------------------------------
Routine : Cdc1Try
Input   : 
Output  : 
Description 
        - Connect Check Command Handling Routine of CD Changer
--------------------------------------------------------------------------*/ 
static void Cdc1Try (void)
{
	if (!GetCdcFlg1(ConChk) || (TxCntr == 0))
  		{
     		ClrCdcFlg1(ConChk);
     		CdcState = CD_IDLE;
     		return;
  		}
  	if (CdcDelay != 0)  return;
  	if (GetCdcFlg(RdyCtx))  return;
  	if (Cd1Tout != 0)  return;

  	TxCntr--;
     	SetCdcFlg(CdcTx);
     	ctbit = 0;
     	ctbyte = 0;
     	ctxcntr = 12;
     	CtxState = CT_LOW;
     	PIN_CdcOut();
     	SetCdcFlg(RdyCtx);
     	CdcDelay = 2;                  /* Some Delay */
}

/*--------------------------------------------------------------------------
Routine : Cdc1Try1
Input   : 
Output  : 
Description 
        - Back Up Command Handling Routine of CD Changer
--------------------------------------------------------------------------*/ 
static void Cdc1Try1 (void)
{
  	if (!GetCdcFlg1(BckUp) || (TxCntr == 0))
  		{
     		ClrCdcFlg1(BckUp);
     		CdcState = CD_IDLE;
     		return;
  		}
  	if (CdcDelay != 0)  return;
  	if (GetCdcFlg(RdyCtx))  return;
  	if (Cd1Tout != 0)  return;

  	TxCntr--;
     	SetCdcFlg(CdcTx);
     	ctbit = 0;
     	ctbyte = 0;
     	ctxcntr = 12;
     	CtxState = CT_LOW;
     	PIN_CdcOut();
     	SetCdcFlg(RdyCtx);
     	CdcDelay = 2;                  /* Some Delay */
}

/*--------------------------------------------------------------------------
Routine : Cdc1Stop
Input   : 
Output  : 
Description 
        - 'Stop afte Stop' Handling Routine of CD Changer
--------------------------------------------------------------------------*/ 
static void Cdc1Stop (void)
{
	if (GetCdcFlg(ReqCtx))
  		{
     		CdcState = CD_IDLE;
     		return;
  		}
  	if (CdcDelay != 0)  return;
  
  	CdcState = CD_IDLE;
  	if (GetCdcFlg(CdcStop))  
  		return;
  	CdcCmd = C_STOP;
  	SetCdcFlg(ReqCtx);
}

/*--------------------------------------------------------------------------
Routine : ReadCdc1
Input   : 
Output  : 
Description 
        - Read SANYO CD Changer Status
--------------------------------------------------------------------------*/ 
void ReadCdc1 (void)
{ 
	if ((CdcTout == 0) && !GetCdcStat1(NoMgzn))  
  		SetCdcFlg(NoCdc);
  	if (GetCdcFlg(RdyCrx))	//Check new data
  		{
     		Cd1Delay = 130;                 /* //980709 2 sec delay for check command */     
     		jCdc = 0;     
     		for (iCdc = 0; iCdc < ((Crxbits / 4)-1); iCdc++)  //980709
     			{
        		if (iCdc % 2)  
        			jCdc ^= (CrxBuffer[iCdc/2] & 0x0F);
        		else  
        			jCdc ^= ((CrxBuffer[iCdc/2] >> 4) & 0x0F);
        		jCdc &= 0x0F;
     			}
     		jCdc = (jCdc + 1) & 0x0F;
     		if (Crxbits % 8)  
     			iCdc = (CrxBuffer[Crxbits/8]) & 0x0F;
     		else              
     			iCdc = CrxBuffer[(Crxbits / 8) -1] & 0x0F;
     
     		if (jCdc != iCdc)                     /* parity error */
     			{
        		ClrCdcFlg(RdyCrx); 
        		if(GetCdcStat(fplay))
        			{
           			SetCdcFlg(ReqCtx);       // Florent - uncommented
           			CdcCmd = C_PLAY;
        			}   
        		return;
     			}
         
     		switch (CrxBuffer[0] & 0x0F)
     			{
        		case CS_CDC:
           			if (GetCdcFlg1(SusTm))
           				{
              			ClrCdcFlg1(SusTm);
              			break;
           				}
           			CdcStatus = 0;
           			if (CrxBuffer[6] & 0x80)  
           				SetCdcStat(fscn);
           			if (CrxBuffer[6] & 0x04)  
           				SetCdcStat(fdscn);
           			if (CrxBuffer[7] & 0x10)  
           				SetCdcStat(fplay);
           			if (CrxBuffer[7] & 0x20)  
           				SetCdcStat(fpaus);
           			if (CrxBuffer[7] & 0x40)  
           				SetCdcFlg(CdcStop);           
           			if (CrxBuffer[5] & 0x04)  
           				SetCdcStat(frpt);
           			if (CrxBuffer[5] & 0x08)  
           				SetCdcStat(fdrpt);
           			if (CrxBuffer[6] & 0x20)  
           				SetCdcStat(frdm);
           			if (CrxBuffer[6] & 0x10)  
           				SetCdcStat(fdrdm);
           			CurDisc  = (CrxBuffer[3] >> 4) & 0x0F;
           			CdcTrack = (CrxBuffer[1] << 4) & 0xF0;
           			CdcTrack += ((CrxBuffer[2] >> 4) & 0x0F);
           
//++Nov.10 cdc time info adding
           			CdcMin = (CrxBuffer[3] << 4) & 0xF0;
           			CdcMin += ((CrxBuffer[4] >> 4) & 0x0F);
           			CdcSec = (CrxBuffer[4] << 4) & 0xF0;
           			CdcSec += ((CrxBuffer[5] >> 4) & 0x0F);
//++Nov.10 cdc time info adding  
          
           			if ((CurDisc != 0) && (CdcTrack != 0))
           				{
              			Err4Cnt = 0;
           				}
           			ClrCdcFlg(NoCdc);
           			break;
        		case CS_MGZ:
           			ClrCdcStat1(NoDsk);
           			CdcDiscs = 0;
           			if (CrxBuffer[6] & 0x80)  
           				SetBit(CdcDiscs,0);
           			if (CrxBuffer[6] & 0x40)  
           				SetBit(CdcDiscs,1);
           			if (CrxBuffer[6] & 0x20)  
           				SetBit(CdcDiscs,2);
           			if (CrxBuffer[6] & 0x10)  
           				SetBit(CdcDiscs,3);
           			if (CrxBuffer[6] & 0x08)  
           				SetBit(CdcDiscs,4);
           			if (CrxBuffer[6] & 0x04)  
           				SetBit(CdcDiscs,5);
           			if (CrxBuffer[6] & 0x02)  
           				SetBit(CdcDiscs,6);
           			if (CrxBuffer[6] & 0x01)  
           				SetBit(CdcDiscs,7);
           			if (CrxBuffer[7] & 0x80)  
           				SetBit(CdcDiscs,8);
           			if (CrxBuffer[7] & 0x40)  
           				SetBit(CdcDiscs,9);
           			if (CdcDiscs == 0)           
           				{
              			if (!GetCdcStat1(DscChn)) 
              				SetCdcStat1(NoDsk);
           				}
           			DiscNo = 0;
           			for (iCdc = 0; iCdc < 10; iCdc++)
           				if (ValBit(CdcDiscs, iCdc)) 
           					DiscNo++;           
           			ClrCdcFlg1(BckUp);
           			break;
        		case CS_CON:
           			ClrCdcFlg1(ConChk);
           			break;
        		case CS_TOC:
           			StaMusic = (CrxBuffer[1] << 4) & 0xF0;
           			StaMusic += ((CrxBuffer[2] >> 4) & 0x0F);
           			EndMusic = (CrxBuffer[2] << 4) & 0xF0;
           			EndMusic += ((CrxBuffer[3] >> 4) & 0x0F);
           			break;
        		case CS_DSC:
           			ClrCdcStat1(NoMgzn);
           			ClrCdcStat1(DscChn);
           			iCdc = CrxBuffer[3] & 0x10;
           			if (iCdc != 0)   
           				SetCdcStat1(DscChn);
                                        /* Under Disc Change ? */
           			iCdc = CrxBuffer[3] & 0xA0;
           			if (iCdc != 0)
           				{
              			SetCdcStat1(NoMgzn);      /* No Magazine ? */
              			ClrCdcStat1(NoDsk);              
           				}
           			break;
        		case CS_ERR:
           			CdcErr = 0;
           			iCdc = CrxBuffer[1];
           			if (iCdc == 0x01)  
           				CdcErr = 1;
           			if (iCdc == 0x30)  
           				CdcErr = 2;
///           if ((iCdc == 0x07) && (CdcDiscs != 0))
           			if (iCdc == 0x07)  CdcErr = 4;
        		default:
           			break;
     		}
     		ClrCdcFlg(RdyCrx);
     		ClrCdcFlg(NoCdc);
     		CdcTout = 430;                 /* 4.3 sec delay for CDC Time Out */
               
     		if (GetCdcFlg(CdcStop))  return;
     		if (!BitVal(PinAUD_TelDet))
     			{
         		ClrCdcFlg1(DspLtr);
         		return;
     			}
     		if (GetCdcFlg1(DspLtr))
     			{
         		ClrCdcFlg1(DspLtr);
     			}
     		}
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Routine : Get/Set/ClrCdcStat
Description
        - Get/Set/Clr the flag in CdcStatus
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 
unsigned char GetCdcStat (unsigned char thebit)
{
  return(ValBit(CdcStatus, thebit));
}
void SetCdcStat (unsigned char thebit)
{
  SetBit(CdcStatus, thebit);
}
void ClrCdcStat (unsigned char thebit)
{
  ClrBit(CdcStatus, thebit);
}

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Routine : Get/Set/ClrCdcStat1
Description
        - Get/Set/Clr the flag in CdcStatus1
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 
unsigned char GetCdcStat1 (unsigned char thebit)
{
  return(ValBit(CdcStatus1, thebit));
}
void SetCdcStat1 (unsigned char thebit)
{
  SetBit(CdcStatus1, thebit);
}
void ClrCdcStat1 (unsigned char thebit)
{
  ClrBit(CdcStatus1, thebit);
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Routine : Get/Set/ClrCdcFlg
Description
        - Get/Set/Clr the flag in CdcFlag
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 
unsigned char GetCdcFlg (unsigned char thebit)
{
  return(ValBit(CdcFlag, thebit));
}
void SetCdcFlg (unsigned char thebit)
{
  SetBit(CdcFlag, thebit);
}
void ClrCdcFlg (unsigned char thebit)
{
  ClrBit(CdcFlag, thebit);
}

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Routine : Get/Set/ClrCdcFlg1
Description
        - Get/Set/Clr the flag in CdcFlag1
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ 
unsigned char GetCdcFlg1 (unsigned char thebit)
{
  return(ValBit(CdcFlag1, thebit));
}
void SetCdcFlg1 (unsigned char thebit)
{
  SetBit(CdcFlag1, thebit);
}
void ClrCdcFlg1 (unsigned char thebit)
{
  ClrBit(CdcFlag1, thebit);
}
/*-----------------------------------------------------------------------------
ROUTINE NAME : PIN_CdcOut
INPUT/OUTPUT : None  
DESCRIPTION  : CD Changer data line change to output open drain.
COMMENTS     : I/O configured always as Input unless data has to be sent.
-----------------------------------------------------------------------------*/ 
void PIN_CdcOut(void)
{
  SetBit(PB_DDR,CDC_BUS);                /* Configure CDC data pin (PB4) to out OD.*/
  ClrBit(PB_OR,CDC_BUS);                
}
/*-----------------------------------------------------------------------------
ROUTINE NAME : PIN_CdcIn
INPUT/OUTPUT : None  
DESCRIPTION  : CD Changer data line change to input w/ interrupt and pull-up.
COMMENTS     : I/O configured always as Input unless data has to be sent.
-----------------------------------------------------------------------------*/ 
void PIN_CdcIn(void)
{
  ClrBit(PB_DDR,CDC_BUS);      /* Configure CDC data pin (PB4) to input w/ PU & IT */ 
  SetBit(PB_OR,CDC_BUS);      
}
/******************************* End of File *******************************/



















?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品日韩一| 国产激情一区二区三区| 久久国产福利国产秒拍| av亚洲精华国产精华精华| 欧美一区二区视频在线观看| 国产欧美一区二区精品仙草咪| 日韩av一级电影| 国产宾馆实践打屁股91| 91精品国产91久久久久久最新毛片 | 国产一区啦啦啦在线观看| 91色.com| 中文字幕一区在线观看| 国产一区二区三区观看| 欧美一级在线观看| 亚洲国产精品久久人人爱蜜臀| 国产大片一区二区| 精品嫩草影院久久| 另类小说图片综合网| 欧亚洲嫩模精品一区三区| 亚洲欧洲精品一区二区三区 | 日韩一区二区在线看片| 夜夜嗨av一区二区三区四季av| 成人激情视频网站| 国产亚洲欧美日韩俺去了| 久久99精品久久只有精品| 91.麻豆视频| 天天综合色天天综合色h| 一本色道久久综合精品竹菊| 国产精品激情偷乱一区二区∴| 国产一区二区三区久久悠悠色av| 日韩一区二区精品| 免费在线观看不卡| 日韩欧美国产三级| 蜜臀久久久99精品久久久久久| 欧美人xxxx| 日本不卡中文字幕| 精品少妇一区二区三区免费观看| 日韩二区三区在线观看| 91精品国产91久久久久久一区二区 | 中文字幕巨乱亚洲| 成人av中文字幕| 国产精品不卡一区二区三区| 91啦中文在线观看| 亚洲制服丝袜av| 欧美日韩日日夜夜| 91猫先生在线| 国产精品国产三级国产a| 91网址在线看| 亚洲一级不卡视频| 欧美日韩国产天堂| 免费av成人在线| 久久午夜色播影院免费高清| 国产精品乡下勾搭老头1| 国产精品久久久久天堂| 欧美性猛交xxxxxx富婆| 青青草成人在线观看| 久久中文字幕电影| 91在线观看免费视频| 亚洲一区免费视频| 91精品国产综合久久蜜臀| 狠狠色丁香婷婷综合久久片| 日本一区二区在线不卡| 色婷婷av一区| 日本怡春院一区二区| 欧美国产欧美亚州国产日韩mv天天看完整 | 日韩欧美电影在线| 国产麻豆成人传媒免费观看| 一色屋精品亚洲香蕉网站| 欧美日韩另类国产亚洲欧美一级| 视频一区欧美日韩| 久久久www成人免费毛片麻豆| 97久久久精品综合88久久| 日日夜夜免费精品视频| 国产亚洲短视频| 欧美日韩免费观看一区二区三区| 久久99国产精品久久| 综合分类小说区另类春色亚洲小说欧美 | 久久伊人蜜桃av一区二区| 97国产精品videossex| 秋霞成人午夜伦在线观看| 亚洲国产精品传媒在线观看| 欧美高清dvd| 国产大陆a不卡| 亚洲成人先锋电影| 中文字幕欧美区| 欧美肥大bbwbbw高潮| 成人av在线资源网站| 久久国产精品第一页| 依依成人综合视频| 欧美国产日韩一二三区| 日韩欧美资源站| 色噜噜久久综合| 成人午夜激情片| 国产一区二区三区久久久| 丝袜诱惑亚洲看片| 一区二区三区产品免费精品久久75| 日本最新不卡在线| 成人妖精视频yjsp地址| 午夜精品国产更新| 亚洲欧美日韩国产综合| 亚洲午夜av在线| 欧美国产成人在线| 国产区在线观看成人精品| 欧美男男青年gay1069videost | 久久老女人爱爱| 欧美精品日韩综合在线| 欧美性xxxxxxxx| 日本高清不卡在线观看| av电影天堂一区二区在线观看| 精品一区二区三区免费播放| 青椒成人免费视频| 美腿丝袜在线亚洲一区 | 欧美一级黄色大片| 日韩三级在线免费观看| 91精品国产高清一区二区三区蜜臀| 欧美在线不卡一区| 一本久道久久综合中文字幕 | 久久99精品久久久久婷婷| 日产精品久久久久久久性色| 午夜精品久久久久久不卡8050| 亚洲第一电影网| 日本午夜精品视频在线观看| 青青草原综合久久大伊人精品优势| 日韩精品亚洲专区| 久久99久久99精品免视看婷婷| 美女在线观看视频一区二区| 久久精品99国产国产精| 久久精品国产亚洲高清剧情介绍| 裸体健美xxxx欧美裸体表演| 久久99蜜桃精品| 成人丝袜视频网| 在线视频欧美精品| 3d成人h动漫网站入口| 日韩三级视频在线看| 精品国产成人在线影院| 国产欧美久久久精品影院| 国产精品拍天天在线| 一区二区在线观看免费| 亚洲成人av一区二区| 免费在线欧美视频| 国产成人精品亚洲午夜麻豆| 色综合中文字幕| 5566中文字幕一区二区电影| 久久久电影一区二区三区| 日韩美女久久久| 日本人妖一区二区| 福利一区福利二区| 欧美日韩的一区二区| 久久新电视剧免费观看| 亚洲视频中文字幕| 蜜臀av在线播放一区二区三区| 成人午夜视频福利| 欧美肥妇bbw| 国产精品久99| 免费人成网站在线观看欧美高清| 丁香六月久久综合狠狠色| 精品视频1区2区| 中文字幕成人网| 日本少妇一区二区| 91久久精品网| 久久夜色精品国产欧美乱极品| 亚洲免费在线观看| 国产麻豆一精品一av一免费| 欧美在线观看视频在线| 国产三级欧美三级| 午夜私人影院久久久久| 大陆成人av片| 日韩欧美国产小视频| 国产一区亚洲一区| 欧美三片在线视频观看| 国产精品久久久久四虎| 蜜桃视频免费观看一区| 91久久精品一区二区三| 国产精品久线在线观看| 激情六月婷婷久久| 91麻豆精品国产91久久久使用方法| 国产精品二三区| 国产在线视频一区二区三区| 欧美日韩国产电影| 玉足女爽爽91| 91丨九色丨黑人外教| 久久精品在线观看| 久久超碰97中文字幕| 欧美疯狂做受xxxx富婆| 一二三四社区欧美黄| 国产.欧美.日韩| 久久久久久久久久看片| 久久精品国产久精国产| 欧美日本不卡视频| 一区二区三区中文字幕电影| 91在线视频免费91| 亚洲国产激情av| 成人在线视频一区| 国产视频视频一区| 成人伦理片在线| 国产精品午夜在线| 成人三级在线视频| 国产精品不卡视频| 91视频com| 又紧又大又爽精品一区二区|