亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产一区二区三区综合| 国产精品久久久久婷婷二区次| 91精品在线一区二区| 亚洲国产激情av| 免费观看成人av| 欧美三级电影在线看| 国产精品青草综合久久久久99| 国产酒店精品激情| 色婷婷精品久久二区二区蜜臂av | 丁香六月久久综合狠狠色| 欧美日韩不卡在线| 亚洲女人的天堂| 成人福利在线看| 国产亚洲欧洲997久久综合 | 日韩欧美国产系列| 亚洲伊人伊色伊影伊综合网| 粉嫩av一区二区三区在线播放| 4hu四虎永久在线影院成人| 亚洲精品视频在线观看网站| 成av人片一区二区| 国产日韩三级在线| 国产一区二区三区四区在线观看| 717成人午夜免费福利电影| 亚洲一二三四在线观看| 色婷婷狠狠综合| 一区二区三区日韩欧美精品| 成人av中文字幕| 亚洲欧洲韩国日本视频 | 蜜臂av日日欢夜夜爽一区| 欧美日韩一级片网站| 亚洲一区二区三区免费视频| 欧美色中文字幕| 亚洲成a人片在线不卡一二三区| 91在线观看免费视频| 亚洲男人的天堂网| 色999日韩国产欧美一区二区| 亚洲视频中文字幕| 在线观看一区二区精品视频| 亚洲午夜久久久久久久久电影院 | 国产91清纯白嫩初高中在线观看| 国产日韩欧美在线一区| 国产成人av电影免费在线观看| 久久久久久久久久美女| 国产91精品在线观看| 中文字幕一区二区三区在线观看| 成人国产免费视频| 一区二区三区四区av| 欧美一区三区二区| 狠狠久久亚洲欧美| 中文字幕视频一区| 欧美艳星brazzers| 美女久久久精品| 中文字幕欧美激情一区| 91免费在线视频观看| 亚洲成人777| 久久亚洲春色中文字幕久久久| 国产99精品国产| 亚洲综合免费观看高清完整版 | 蜜臀a∨国产成人精品| 久久综合九色综合97_久久久| 国产成人aaa| 亚洲高清视频中文字幕| 精品三级在线看| 91免费看片在线观看| 婷婷成人激情在线网| 久久久久久久久97黄色工厂| 色综合久久综合网欧美综合网| 视频在线观看一区二区三区| 久久精品一区八戒影视| 91国偷自产一区二区三区观看| 青草av.久久免费一区| 中文成人综合网| 欧美色图激情小说| 国产高清不卡一区| 亚洲va韩国va欧美va精品| 久久中文字幕电影| 欧美日韩在线播放一区| 国产福利电影一区二区三区| 亚洲国产精品久久艾草纯爱| 国产人伦精品一区二区| 欧美日韩成人综合在线一区二区| 国产精品99久久久久| 天堂一区二区在线| 亚洲天堂成人在线观看| 精品999在线播放| 欧美高清dvd| 97国产精品videossex| 精品午夜久久福利影院| 一卡二卡三卡日韩欧美| 欧美国产综合一区二区| 日韩美女主播在线视频一区二区三区| www.欧美日韩| 国产成人午夜99999| 首页国产丝袜综合| 亚洲综合成人在线视频| 国产精品久久久久久妇女6080| 精品国内片67194| 欧美电影一区二区| 日本国产一区二区| 95精品视频在线| 丁香婷婷深情五月亚洲| 精品一区二区成人精品| 日本在线播放一区二区三区| 亚洲午夜精品在线| 尤物av一区二区| 最新中文字幕一区二区三区| 日本一区二区三区在线不卡| 亚洲精品一区二区三区福利| 在线不卡免费欧美| 欧美日韩高清一区| 欧美三级资源在线| 欧美性一级生活| 在线观看视频91| 在线一区二区三区做爰视频网站| eeuss国产一区二区三区| 国产精品456露脸| 国产电影一区二区三区| 国产精品一区二区三区网站| 国产乱码精品一区二区三区av| 日韩一区欧美二区| 蜜臀久久99精品久久久久久9| 午夜精品久久久久久久久| 天天综合日日夜夜精品| 日韩精品一区第一页| 日本中文字幕一区二区有限公司| 男人的天堂亚洲一区| 麻豆国产91在线播放| 国内成人自拍视频| 国产一区二区三区在线观看免费视频 | 国产真实乱偷精品视频免| 麻豆一区二区三| 国产精品一区二区久久不卡 | 4438x亚洲最大成人网| 日韩女优电影在线观看| 国产亚洲欧美在线| **网站欧美大片在线观看| 午夜精品成人在线视频| 韩国三级电影一区二区| 国产91精品免费| 在线影院国内精品| 日韩精品一区二区三区在线| 国产日韩欧美综合在线| 亚洲精品久久嫩草网站秘色| 日本成人在线看| 国产精品一区二区久激情瑜伽| 91视频在线观看免费| 这里只有精品99re| 久久精品一区二区三区不卡| 一区二区三区免费在线观看| 日本亚洲欧美天堂免费| 国产成人av一区二区三区在线观看| 99久久99久久免费精品蜜臀| 欧美日韩高清一区二区三区| 国产欧美一区二区在线观看| 亚洲最新视频在线观看| 精品一区二区综合| 色视频成人在线观看免| 精品国产一区二区精华| 亚洲精品福利视频网站| 国产精品伊人色| 欧美人与性动xxxx| 中文字幕av免费专区久久| 亚洲午夜久久久久中文字幕久| 激情久久五月天| 在线精品视频一区二区| 国产色婷婷亚洲99精品小说| 亚洲va欧美va天堂v国产综合| 成人深夜福利app| 91精品国产aⅴ一区二区| 国产精品国产成人国产三级| 麻豆成人免费电影| 欧美中文字幕不卡| 国产精品久久久久婷婷| 激情小说欧美图片| 制服丝袜在线91| 亚洲免费观看在线视频| 国产精品亚洲午夜一区二区三区 | 免费欧美日韩国产三级电影| 91视频在线观看| 午夜伊人狠狠久久| 91亚洲精品久久久蜜桃网站| 精品88久久久久88久久久| 亚洲a一区二区| 色天使久久综合网天天| 国产精品久久一卡二卡| 国产一区二区三区四| 日韩片之四级片| 丝袜美腿亚洲一区| 欧美日韩国产精品自在自线| 亚洲欧美成aⅴ人在线观看| 波波电影院一区二区三区| 久久综合色8888| 国产精品一区一区三区| 精品国免费一区二区三区| 另类人妖一区二区av| 日韩手机在线导航| 久久精品免费看| 精品免费日韩av| 狠狠色狠狠色综合系列| 日韩一卡二卡三卡|