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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? leds.c

?? BLUETOOTH Stereo Headset Source Code,含CVC(噪音消除,回聲抵消),可用于開發(fā)藍(lán)牙立體聲耳機(jī),藍(lán)牙車載,經(jīng)過測試.
?? C
字號(hào):
/****************************************************************************
  Copyright (C) Cambridge Silicon Radio Ltd. 2006

This file was autogenerated by ledparse and
provides simple LED indications
*/

#include "leds.h"
#include "headset_private.h"

#include <pio.h>
#include <message.h>
#include <panic.h>

#ifdef DEBUG_LEDS
#define LED_DEBUG(x) DEBUG(x)
#else
#define LED_DEBUG(x) 
#endif

#define ON  (0x1)
#define OFF (0x0)
#define RPT (0x1)

#define LED_UPDATE_MSG (0x0)

typedef struct ledEntryTag
{
    uint16   PioMask ; /*mask of pio's*/
    unsigned On:1    ;
    unsigned Time:15 ; /* ms */   
}ledEntry_t ;

typedef struct ledHeaderTag
{
    unsigned     num_entries:8 ;
    unsigned     reserved:7    ;
    unsigned     repeat:1      ;
} ledHeader_t;    

typedef struct ledbTag 
{
    ledHeader_t  header ;
    ledEntry_t * entries ;
} led_t ;
    

/*All of The LED pins used*/
static const int gLedPinsUsed = LED_BLUE | LED_RED ; 

 /*LEDS_OFF*/ 
static const ledEntry_t pattern_LEDS_OFF [ 1 ] =  
{
    { LED_BLUE | LED_RED , OFF , 0    }  
}; 

/*RED_BLUE_ALT_RPT_FAST*/ 
static const ledEntry_t pattern_RED_BLUE_ALT_RPT_FAST [ 4 ] = 
{
    { LED_RED , ON  , 100  }  , 
    { LED_RED , OFF , 0    }  , 
    { LED_BLUE , ON  , 100  }  , 
    { LED_BLUE , OFF , 0    }  
}; 
/*BLUE_ON*/ 
static const ledEntry_t pattern_BLUE_ON [ 1 ] = 
{
    { LED_BLUE , ON  , 0    }  
};

/*RED_ON*/ 
static const ledEntry_t pattern_RED_ON [ 1 ] = 
{
    { LED_RED , ON  , 0    }  
}; 

/*BLUE_TWO_FLASHES*/ 
static const ledEntry_t pattern_BLUE_TWO_FLASHES [ 4 ] = 
{
    { LED_BLUE , ON  , 2000 }  , 
    { LED_BLUE , OFF , 200  }  , 
    { LED_BLUE , ON  , 2000 }  , 
    { LED_BLUE , OFF , 200  }  
}; 

/*BLUE_ONE_SEC_ON_RPT*/ 
static const ledEntry_t pattern_BLUE_ONE_SEC_ON_RPT [ 2 ] = 
{
    { LED_BLUE , ON  , 1000 }  , 
    { LED_BLUE , OFF , 2000 }  
}; 
/*RED_TWO_FLASHES*/ 
static const ledEntry_t pattern_RED_TWO_FLASHES [ 4 ] = 
{
    { LED_RED , ON  , 2000 }  , 
    { LED_RED , OFF , 200  }  , 
    { LED_RED , ON  , 2000 }  , 
    { LED_RED , OFF , 200  }  
}; 
/*RED_TWO_FLASHES_FAST*/ 
static const ledEntry_t pattern_RED_TWO_FLASHES_FAST [ 4 ] = 
{
    { LED_RED , ON  , 200  }  , 
    { LED_RED , OFF , 200  }  , 
    { LED_RED , ON  , 200  }  , 
    { LED_RED , OFF , 200  }  
}; 
/*RED_ONE_SEC_ON_RPT*/ 
static const ledEntry_t pattern_RED_ONE_SEC_ON_RPT [ 2 ] = 
{
    { LED_RED , ON  , 1000 }  , 
    { LED_RED , OFF , 2000 }  
}; 

/*RED_BLUE_ONE_SEC_ON_RPT*/ 
static const ledEntry_t pattern_RED_BLUE_ONE_SEC_ON_RPT [ 2 ] = 
{
    { LED_RED | LED_BLUE , ON  , 1000  }  , 
    { LED_RED | LED_BLUE , OFF , 2000 }  
}; 

/*RED_CONT_BLUE_ONE_SEC_ON_RPT*/ 
static const ledEntry_t pattern_RED_CONT_BLUE_ONE_SEC_ON_RPT [ 3 ] = 
{
	{ LED_RED , ON  , 0 }  , 
    { LED_BLUE , ON  , 1000  }  , 
    { LED_BLUE , OFF , 2000 }  
}; 


/*BLUE_FOUR_FLASHES_FAST*/ 
static const ledEntry_t pattern_BLUE_FOUR_FLASHES_FAST [ 8 ] = 
{
    { LED_BLUE , ON  , 200 }  , 
    { LED_BLUE , OFF , 200 }  , 
    { LED_BLUE , ON  , 200 }  , 
    { LED_BLUE , OFF , 200 } ,  
	{ LED_BLUE , ON  , 200 }  , 
    { LED_BLUE , OFF , 200 },  
	{ LED_BLUE , ON  , 200 }  , 
    { LED_BLUE , OFF , 200 }  
};
/*BLUE_SHORT_ON_RPT*/	
static const ledEntry_t pattern_BLUE_SHORT_ON_RPT [ 2 ] = 
{
    { LED_BLUE , ON  , 200  }  , 
    { LED_BLUE , OFF , 2000 }  
}; 

/*RED_BLUE_SHORT_ON_RPT*/	
static const ledEntry_t pattern_RED_BLUE_SHORT_ON_RPT [ 2 ] = 
{
    { LED_BLUE | LED_RED , ON  , 200  }  , 
    { LED_BLUE | LED_RED, OFF , 2000 }  
}; 

/*RED_CONT_BLUE_SHORT_ON_RPT*/	
static const ledEntry_t pattern_RED_CONT_BLUE_SHORT_ON_RPT [ 3 ] = 
{
	{ LED_RED , ON  , 0  }  , 
    { LED_BLUE , ON  , 200  }  , 
    { LED_BLUE , OFF , 2000 }  
}; 
#define LED_NUM_PATTERNS ( 15 )

/*The LED entries*/
static const led_t gLeds [ LED_NUM_PATTERNS ] = 
{
    {  { 1,  0x00 , RPT }, (ledEntry_t *) pattern_LEDS_OFF } ,

    {  { 4,  0x00 , RPT }, (ledEntry_t *) pattern_RED_BLUE_ALT_RPT_FAST } ,
	
    {  { 1,  0x00 , RPT }, (ledEntry_t *) pattern_BLUE_ON } ,

    {  { 1,  0x00 , RPT }, (ledEntry_t *) pattern_RED_ON } ,

    {  { 4,  0x00 , OFF }, (ledEntry_t *) pattern_BLUE_TWO_FLASHES } ,

    {  { 2,  0x00 , RPT }, (ledEntry_t *) pattern_BLUE_ONE_SEC_ON_RPT } ,

    {  { 4,  0x00 , OFF }, (ledEntry_t *) pattern_RED_TWO_FLASHES } ,

    {  { 4,  0x00 , OFF }, (ledEntry_t *) pattern_RED_TWO_FLASHES_FAST } ,

    {  { 2,  0x00 , RPT }, (ledEntry_t *) pattern_RED_ONE_SEC_ON_RPT } ,

    {  { 2,  0x00 , RPT }, (ledEntry_t *) pattern_RED_BLUE_ONE_SEC_ON_RPT }, 
	
	{  { 3,  0x00 , RPT }, (ledEntry_t *) pattern_RED_CONT_BLUE_ONE_SEC_ON_RPT }, 
	
	{  { 8,  0x00 , OFF }, (ledEntry_t *) pattern_BLUE_FOUR_FLASHES_FAST }, 
	
	{  { 2,  0x00 , RPT }, (ledEntry_t *) pattern_BLUE_SHORT_ON_RPT } ,
	
	{  { 2,  0x00 , RPT }, (ledEntry_t *) pattern_RED_BLUE_SHORT_ON_RPT } ,
	
	{  { 3,  0x00 , RPT }, (ledEntry_t *) pattern_RED_CONT_BLUE_SHORT_ON_RPT } 
};

/*END_OF_INSERTED_CODE*/


/*the leds task data*/
typedef struct
{
	TaskData task;
        
    LedPattern_t gCurrentPattern ; /*which of the patterns we are currently playing*/
    uint16 gCurrentPatternPosition ;    /*how far through the current pattern we are*/
    
    LedPattern_t gRepeatingPattern ; /*the currently repeating pattern*/
    uint16 gRepeatingPatternPosition ;    /*how far through the repeating pattern we were*/
    
} LedState_t;


/*This is the main LED state - initialised when used*/
LedState_t * LED = NULL ;

/*local functions*/
static void ledsInit ( void ) ;
static void ledsSet ( uint16 pLedMask , bool pOnOrOff ) ;
static void ledsSetPio ( uint16 pPIOMask , bool pOnOrOff  ) ;
static void ledsHandler (Task task, MessageId id, Message data) ;
static bool ledsConfigPattern ( LedPattern_t  pNewPattern  )  ;


/****************************************************************************
NAME	
	ledsPlay

DESCRIPTION
    Play an LED pattern. 
    
    If a repeating pattern is already playing 
    - then this will be interuppted and the new pattern (non repeating or repeating)
      will be played. If the new pattern is non-repeating then the interrupted
      pattern will be resumed after completion of the non-repeating pattern
    
    If a non-repeating pattern is currently playing    
    - if the new pattern is also a non-repeating pattern, then returns false 
      (caller is responsible for queuing LEDS)
    - if the new pattern is a repeating pattern, then this will be played on completion 
      of the non-repeating current pattern
    
RETURNS
	void
*/
bool ledsPlay ( LedPattern_t pNewPattern  ) 
{
    bool lUpdate ;
    
       /*Init the LED structure if required*/
    if ( ! LED )
    {
        ledsInit() ;
    }
        /*ensure range is valid*/
    if (pNewPattern > (LED_NUM_PATTERNS-1) ) 
        return FALSE ;
    
        /*fn which configs the requested pattern if possible*/
    lUpdate = ledsConfigPattern ( pNewPattern  )  ;
    
    if (lUpdate)
    {
        MessageFlushTask ( &LED->task ) ;
                       
        LED_DEBUG(("LED: Play [%d]\n", pNewPattern)) ;
       
        ledsSet ( gLedPinsUsed , OFF ) ;
                  
        MessageSend ( &LED->task , LED_UPDATE_MSG , 0 ) ;
    }
    
    return lUpdate ;
}

/****************************************************************************
NAME	
	ledsHandler

DESCRIPTION
    Update the LED playback
    Turn the Leds On or Off according to the next element in the pattern
    If the pattern has completed and is non repeating, then restarts the pattern 
RETURNS
	void
*/
static void ledsHandler(Task task, MessageId id, Message data) 
{
/*    LED_DEBUG(("LED: [%d][%d][%d]\n " , LED->gCurrentPattern , LED->gCurrentPatternPosition , gLeds[LED->gCurrentPattern].header.num_entries )) ;*/
          
    switch (id)
    {
        case ( LED_UPDATE_MSG ) :
        {

            /*LED_DEBUG(("LED Mask[%x] On[%d] Time[%d]\n" , gLeds[LED->gCurrentPattern].entries[LED->gCurrentPatternPosition].PioMask , 
                                                          gLeds[LED->gCurrentPattern].entries[LED->gCurrentPatternPosition].On ,
                                                          gLeds[LED->gCurrentPattern].entries[LED->gCurrentPatternPosition].Time)) ;   */                 
                /*the pattern has completed*/
            if (LED->gCurrentPatternPosition >= gLeds[LED->gCurrentPattern].header.num_entries)
            {  
                if (gLeds[LED->gCurrentPattern].header.repeat)
                {      /*reset the repeating pattern*/
                    LED_DEBUG(("LED: Repeat\n")) ;
                    LED->gCurrentPatternPosition = 0 ;
                }
                else
                {       /*one shot pattern is complete*//*return to playing the repeating pattern*/
                    LED->gCurrentPattern         = LED->gRepeatingPattern ;
                    LED->gCurrentPatternPosition = LED->gRepeatingPatternPosition ;       
                    
                    if (gLeds[LED->gCurrentPattern].header.repeat)
                    {      /*reset the repeating pattern*/
                        LED_DEBUG(("LED: Repeat 2\n")) ;
                        LED->gCurrentPatternPosition = 0 ;
                    }       
                }
            }               
                 /*Cancel all pending LED update messages*/
            MessageFlushTask ( task ) ;            

            ledsSet ( gLeds[LED->gCurrentPattern].entries[LED->gCurrentPatternPosition].PioMask , 
                      gLeds[LED->gCurrentPattern].entries[LED->gCurrentPatternPosition].On ) ;
            
                    
                /*only send a message if we are not a permanently on or off pattern*/   
            if ( ( gLeds[LED->gCurrentPattern].header.num_entries) != 1 ) 
            {
                MessageSendLater ( task , LED_UPDATE_MSG  , 0 , (gLeds[LED->gCurrentPattern].entries[LED->gCurrentPatternPosition].Time ) ) ;
            }
            
            LED->gCurrentPatternPosition ++ ;                   
        }
        break ;
        
        default:
        break ;
    }  
}

/****************************************************************************
NAME	
	ledsInit

DESCRIPTION
            initialise the LED Library
    
RETURNS
	void
*/
static void ledsInit( void ) 
{   
    LED = PanicUnlessNew ( LedState_t ) ;
    
	LED->task.handler              = ledsHandler;
	LED->gCurrentPatternPosition   = 0 ;
	LED->gCurrentPattern           = 0 ;
	LED->gCurrentPatternPosition   = 0 ;
	LED->gRepeatingPattern         = 0 ;
	LED->gRepeatingPatternPosition = 0 ;
}

/****************************************************************************
NAME	
	ledsSet

DESCRIPTION
   Set / Clear the LED pins or PIOs
    
RETURNS
	void
*/
static void ledsSet (uint16 pLedMask , bool pOnOrOff ) 
{	
    uint16 lMask = 0xffff ;
    
#ifdef SPECIAL_LED_PINS    

  /* LED pins are special cases*/
    if ( pLedMask & 0x8000 )        
        PioSetLed0 ( pOnOrOff ) ;
    if ( pLedMask & 0x4000 )
        PioSetLed1 ( pOnOrOff ) ;

        /*set the remaining pios*/    
    lMask = 0x3fff ;
#endif

        /*set the pios*/    
    ledsSetPio ( ( pLedMask & lMask ) , pOnOrOff ) ;
    
}

/****************************************************************************
NAME	
	ledsSetPio

DESCRIPTION
    Fn to set / clear the mask of PIOs required
    
RETURNS
	void
*/
static void ledsSetPio ( uint16 pPioMask , bool pOnOrOff  ) 
{
    uint16 lPinVals = 0 ;
    
    if ( pOnOrOff == TRUE )    
    {
        lPinVals = pPioMask  ;
    }
    else
    {
        lPinVals = 0x0000;/*clr the corresponding bit*/
    }
      	/*(mask,bits) setting bit to a '1' sets the corresponding port as an output*/
    PioSetDir( pPioMask , pPioMask );   
    	/*set the value of the pin to the corresponding value*/         
    PioSet ( pPioMask , lPinVals ) ;     
}

/****************************************************************************
NAME	
	ledsConfigPattern

DESCRIPTION
    Fn to configure the led that has been requested, returns false if the led cannot 
    be played at this time
    
RETURNS
	bool (is an update to the LEDS required)
*/
static bool ledsConfigPattern ( LedPattern_t  pNewPattern  ) 
{
    bool lUpdate = TRUE ;

    LED_DEBUG(("LED: Play Curr[%x] New [%x]\n" , gLeds[LED->gCurrentPattern].header.repeat  , 
                                                 gLeds[pNewPattern].header.repeat )) ;    
        /*if current pattern is repeating*/
    if ( gLeds[LED->gCurrentPattern].header.repeat )
    {       
        LED_DEBUG(("1\n")) ;
            /*if new pattern is repeating*/
        if ( gLeds[pNewPattern].header.repeat )
        {       /*then interrupt the pattern with the new repeating pattern*/
            LED_DEBUG(("2\n")) ;            
            LED->gCurrentPatternPosition   = 0 ;
            LED->gCurrentPattern           = pNewPattern ;
            
            LED->gRepeatingPattern         = pNewPattern ;
            LED->gRepeatingPatternPosition = 0 ;            
        }
        else /*interrupt the current pattern with a repeating pattern*/
        {
            LED_DEBUG(("3\n")) ;
               /*then store the current pattern to be resumed*/
            LED->gRepeatingPattern         = LED->gCurrentPattern ;
            LED->gRepeatingPatternPosition = LED->gCurrentPatternPosition ; 
                /*and start the requested pattern*/
            LED->gCurrentPattern = pNewPattern ;
            LED->gCurrentPatternPosition = 0 ;            
        }
    }
    else /*current pattern is non repeating*/
    {
            /*if the new pattern is repeating*/
        if ( gLeds[pNewPattern].header.repeat ) 
        {       /*then store this to be resumed*/
            LED_DEBUG(("4\n")) ;            
            LED->gRepeatingPattern         = pNewPattern ;
            LED->gRepeatingPatternPosition = 0 ;            
        }
        else    /*the new pattern is also non-repeating and cant be currently played*/
        {
            LED_DEBUG(("5\n")) ;                
            lUpdate = FALSE ;
        }
    }       
    return lUpdate ;
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品电影在线播放| 成人午夜看片网址| 亚洲一区二区三区小说| 国产精品理论片在线观看| 国产精品区一区二区三区 | 一区二区三区欧美激情| 日韩一区有码在线| 一区二区三区四区蜜桃| 亚洲国产精品一区二区尤物区| 又紧又大又爽精品一区二区| 亚洲精品成人悠悠色影视| 亚洲精品乱码久久久久久日本蜜臀| 成人欧美一区二区三区小说| 一区二区三区四区蜜桃| 日韩成人一级大片| 国产麻豆精品在线| 大尺度一区二区| 色婷婷av久久久久久久| 777午夜精品免费视频| 欧美大肚乱孕交hd孕妇| 国产精品三级在线观看| 一区二区三区四区在线播放| 天天综合色天天综合| 激情综合色综合久久| 成人黄色国产精品网站大全在线免费观看| 成人黄色小视频在线观看| 欧美系列一区二区| 国产肉丝袜一区二区| 一区二区三区欧美在线观看| 日本不卡视频在线观看| 国产精品99久久久久久有的能看 | 国产精品福利一区二区三区| 一区二区三区在线免费| 国产在线视视频有精品| 色悠久久久久综合欧美99| 日韩午夜激情视频| 亚洲欧洲日韩女同| 久久99最新地址| 在线一区二区观看| 久久综合色8888| 午夜激情一区二区三区| 成人av在线看| 日韩精品在线一区二区| 一区二区在线免费观看| 国产精品一区在线观看乱码| 欧美日韩1234| 亚洲三级理论片| 国产高清不卡二三区| 欧美三级韩国三级日本一级| 中文子幕无线码一区tr| 久久精品国产99| 69久久夜色精品国产69蝌蚪网| 欧美国产日韩a欧美在线观看 | 99视频在线精品| 日韩欧美国产一区二区在线播放 | 不卡的av在线播放| 欧美精品一区二区三区很污很色的 | 精品视频色一区| 亚洲视频一区二区在线观看| 国模大尺度一区二区三区| 在线成人高清不卡| 亚洲国产精品久久人人爱 | 色呦呦国产精品| 18成人在线视频| 国产成a人亚洲精品| 26uuuu精品一区二区| 麻豆91在线播放| 制服丝袜中文字幕一区| 午夜av电影一区| 在线观看亚洲专区| 亚洲精品国产精华液| 色综合激情久久| 亚洲视频香蕉人妖| 色婷婷久久99综合精品jk白丝| 国产精品毛片a∨一区二区三区| 国产一区二区三区国产| 26uuu国产日韩综合| 国产精品一区二区视频| 国产午夜精品一区二区| 国产一区二区在线观看免费| 久久亚洲一区二区三区明星换脸| 国产又粗又猛又爽又黄91精品| 日韩免费一区二区| 国产一区二区导航在线播放| 久久一区二区三区国产精品| 国产成人av福利| 国产精品九色蝌蚪自拍| 色丁香久综合在线久综合在线观看| 亚洲欧美一区二区三区国产精品| av高清不卡在线| 亚洲一区精品在线| 欧美精品久久99| 黄色日韩网站视频| 1区2区3区精品视频| 欧美在线观看18| 久久99久久久久久久久久久| 久久久99精品久久| 99久久99久久精品国产片果冻 | 欧美一区二区三区电影| 理论电影国产精品| 国产精品第一页第二页第三页 | 免费在线观看一区| 国产丝袜美腿一区二区三区| 99久久久国产精品免费蜜臀| 亚洲成av人片一区二区三区| 久久久久久毛片| 日本韩国精品在线| 国模一区二区三区白浆| 一区二区三区国产精品| 日韩精品一区二区三区四区| 成人高清视频在线观看| 秋霞影院一区二区| 中文字幕视频一区| 精品日韩一区二区三区免费视频| 成人a级免费电影| 免费在线观看不卡| 一区二区免费在线| 久久精品欧美日韩| 91麻豆精品国产自产在线观看一区| 国产盗摄视频一区二区三区| 亚洲一级二级在线| 国产日韩av一区二区| 91精品国产欧美一区二区18 | 国产一二精品视频| 亚洲18影院在线观看| 国产女主播一区| 精品国产亚洲一区二区三区在线观看| av福利精品导航| 成人精品视频一区二区三区| 蜜桃一区二区三区在线| 亚洲综合成人在线| 亚洲免费在线观看视频| 国产亚洲一区二区三区四区| 777亚洲妇女| 欧美日韩电影一区| 在线观看91精品国产入口| 波多野洁衣一区| 高清不卡一区二区在线| 国产伦精品一区二区三区在线观看| 午夜av一区二区| 亚洲国产成人porn| 亚洲福利电影网| 亚洲一区二区三区自拍| 亚洲激情在线激情| 成人免费一区二区三区在线观看| 国产情人综合久久777777| 国产日韩精品一区二区浪潮av| 亚洲精品在线电影| 欧美精品一区二区不卡| 久久综合久久综合亚洲| 久久久精品综合| 日本一区二区三区四区在线视频| 亚洲精品在线观看网站| 久久久欧美精品sm网站| 久久久www成人免费无遮挡大片| 精品少妇一区二区三区| 欧美精品一区二区不卡| 久久精品夜色噜噜亚洲a∨| 国产视频一区二区在线观看| 国产精品每日更新| 一区二区三区精品视频在线| 性欧美疯狂xxxxbbbb| 日本欧美一区二区| 国产一区二区看久久| 成人网页在线观看| 99riav久久精品riav| 欧美色网站导航| 精品电影一区二区| 欧美国产成人在线| 亚洲激情成人在线| 蜜桃传媒麻豆第一区在线观看| 麻豆视频观看网址久久| 国产精品77777| 99re66热这里只有精品3直播| 在线观看中文字幕不卡| 欧美成人女星排行榜| 国产精品成人免费| 亚洲成人激情av| 国产乱妇无码大片在线观看| 91色在线porny| 欧美一区二区三区视频免费| 26uuu久久天堂性欧美| 中文字幕五月欧美| 麻豆免费看一区二区三区| 不卡高清视频专区| 8x8x8国产精品| 亚洲图片另类小说| 亚洲成人免费在线| 粉嫩aⅴ一区二区三区四区| 色婷婷久久一区二区三区麻豆| 日韩欧美一区中文| 亚洲伦理在线精品| 精品一区二区三区av| 成人久久久精品乱码一区二区三区 | 中文乱码免费一区二区| 午夜精品国产更新| 99综合影院在线| 精品国产网站在线观看| 亚洲综合在线免费观看| 国产69精品一区二区亚洲孕妇|