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

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

?? ag_servicerecord.c

?? bluetooth audio gateway
?? C
字號:
#include "ag_private.h"
#include "ag.h"

#include <message.h>
#include <sdp_parse.h>
#include <stdlib.h>
#include <string.h>



/*
    This structure defines the service record for the Audio Gateway;
    it contains a blank space for the RFCOMM server channel since this
    will be filled in at run time.

    Note that attrIds are specified as being 16 bit ints.
*/
static const uint8 serviceRecord[] =
{
    /* Service class ID list */
    0x09,0x00,0x01, /* AttrID , ServiceClassIDList */
    0x35,0x06, /* 6 bytes in total DataElSeq */
    0x19,0x00,0x00,/* 2 byte UUID, Service class = Voice gateway */
    0x19,0x12,0x03,/* 2 byte UUID Service class = GenericAudio */
    
    /* protocol descriptor list */
    0x09,0x00,0x04,/* AttrId ProtocolDescriptorList */
    0x35,0x0c, /* 12 bytes in total DataElSeq */
    0x35,0x03, /*3 bytes in DataElSeq */
    0x19, 0x01,0x00,/* 2 byte UUID, Protocol = L2CAP */
    
    0x35,0x05, /* 5 bytes in DataElSeq */
    0x19, 0x00, 0x03,   /* 1 byte UUID Protocol = RFCOMM */
    0x08, 0x00, /* 1 byte UINT - server channel template value 0 - to be filled in by app */    
    
    /* profile descriptor list */
    0x09,0x00,0x09, /* AttrId, ProfileDescriptorList */
    0x35,0x08, /* 8 bytes in total DataElSeq */
    0x35,0x06, /* 6 bytes in total DataElSeq */
    0x19, 0x00,0x00, /* 2 byte UUID, Service class = Voice gateway */
    0x09, 0x01,0x00, /* 2 byte uint, version = 100 */
    
    /* service name */
    0x09, 0x01, 0x00, /* AttrId - Service Name */
    0x25, 0x0D, /* 13 byte string */
    'V','o','i','c','e',' ','G','a','t','e','w','a','y'            
};


static const uint8 handsFreeExtra[] =
{
    /* Network */
    0x09, 0x03, 0x01, /* AttrID - Network */
    0x08, 0x00,       /* 1 byte UINT - GSM like */

    /* Supported Features (init to profile defaults) */
    0x09, 0x03, 0x11,   /* AttrId - Supported Features */
    0x09, 0x00, 0x09    /* 2 byte UINT - Supported features */
                        /* 3 way calls              - 1 (LSB) */
                        /* EC and/or NR fn          - 0 */
                        /* Voice recognition fn     - 0 */
                        /* In-band ring tone        - 1 */
                        /* Attach phone num to tag  - 0 */
};


/*
    customizeServiceRecord

    Fill in the profile specific fields in the service record
*/
static uint16 customizeServiceRecord(uint16 *len, uint8 **s_ptr, ag_profile_role_t dev_type)
{
    uint8_t *ptr;
    uint8_t *endptr;
    
    /* Set the ptrs for sdp_parse function calls */
    ptr = *s_ptr;
    endptr = ptr + *len;
    
    /* start by looking for the first UUID as this is the service class */
    ptr = SdpFindElement(SDP_TYPE_UUID, ptr, endptr);
        
    /* Check for null ptr access and return 0 to indicate something is wrong */
    if (!ptr)            
        return 0;    

    /* write the service class and move on from that element */
    if (dev_type == agHeadsetProfile)
    {
        SdpSetData(ptr, (uint32_t) 0x1112);
    }
    else if (dev_type == agHandsFreeProfile)
    {
        /* device must be hands free or we wouldn't get this far */
        SdpSetData(ptr, (uint32_t) 0x111F);
    }
	else
	{
		return 0;
	}
    
    /* Skip the next UUIDs until we reach the one we're interested in */
    for(;;)
    {     
        /* Find the next UUID */
        ptr = SdpFindElement(SDP_TYPE_UUID, ptr, endptr);
        
        if (!ptr)
            return 0;
        
            /* 
            We're looking for the UUID after the RFCOMM UUID but unfortunately
            it hasn't been set yet so we can't look for it directly
        */
        if (SdpGetData(ptr) == SDP_UUID_RFCOMM)
        {            
            ptr = SdpSkipElement(ptr);
            ptr = SdpFindElement(SDP_TYPE_UUID, ptr, endptr);
            if (ptr)
            {
                if (dev_type == agHeadsetProfile)                 
                {
                    SdpSetData(ptr, (uint32_t) 0x1108);                        
                }
                else if (dev_type == agHandsFreeProfile)                    
                {
                    SdpSetData(ptr, (uint32_t) 0x111E);                        
                    
                    /* 
                    For hands free profile also need to insert the supported features
                    the external driver passed in 
                    */    
                    ptr = SdpFindElement(SDP_TYPE_STR, ptr, endptr);
                    ptr = SdpSkipElement(ptr);
                    ptr = SdpFindElement(SDP_TYPE_UINT, ptr, endptr);
                    ptr = SdpSkipElement(ptr);
                    
                    if (!ptr)
                        return 0;
                    
                    /* Set the network type */
                    SdpSetData(ptr, (uint32_t) (AGState.hfAgSupportedFeatures>>8));        
                    
                    /* Skip along */
                    ptr = SdpSkipElement(ptr);
                    
                    /* Find the next uint that contains the supported features */
                    ptr = SdpFindElement(SDP_TYPE_UINT, ptr, endptr);          
                    ptr = SdpSkipElement(ptr);
                    
                    if (!ptr)
                        return 0;
                    
                    /* Only the 5 LSBs of the LSW are valid so mask the rest off */
                    SdpSetData(ptr, (uint32_t) (AGState.hfAgSupportedFeatures & 0x001f));
                }
                else                
                {
                    return 0;
                }
                
                break ;
            }
        }
        else
        {
            /* Skip to the next element and try our luck there */
            ptr = SdpSkipElement(ptr);
        }
    }           

    return 1;
}


/*
    agCreateServiceRecord 

    Create a copy of the service record; the Connection Manager will
    fill in the RFCOMM channel for us since it knows about such things
    we need to supply the length of the record also.
*/
uint8 *agCreateServiceRecord(uint16 *len, ag_profile_role_t dev_type)
{
    uint8 *sr_ptr = 0;
    uint16 sr_len=0;
    uint16 return_flag = 1;

    /* 
        Copy the relevant service record. Note that the hands free one record
        has a number of extra fields so needs to be handled separately 
    */
    if (dev_type == agHeadsetProfile)
    {
        sr_len = sizeof(serviceRecord);
        sr_ptr = (uint8 *)agAlloc(sr_len);
        memcpy(sr_ptr,(void*) serviceRecord, sr_len);
        *len = sr_len;        

        /* Fill in the headset specific fields into the service record */
        if (!customizeServiceRecord(len, &sr_ptr, agHeadsetProfile))
            return_flag = 0;        
    }
    else if (dev_type == agHandsFreeProfile)
    {
        sr_len = sizeof(serviceRecord) + sizeof(handsFreeExtra);
        sr_ptr = (uint8 *)agAlloc(sr_len);
        memcpy(sr_ptr, (void*) serviceRecord, sizeof(serviceRecord));
        memcpy(sr_ptr+sizeof(serviceRecord), (void*) handsFreeExtra, sizeof(handsFreeExtra));
        *len = sr_len;

        /* Fill in the hands free specific fields into the service record */
        if (!customizeServiceRecord(len, &sr_ptr, agHandsFreeProfile))
            return_flag = 0;
    }
    else
    {
        /* Unknown ervice type requested */        
        return_flag = 0;
    }
        
    if (!return_flag)
    {
        /* Failed to create the service record */
        *len = 0;
        free(sr_ptr);
        return 0;
    }
    
    return sr_ptr;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av在线发布| 一区二区三区加勒比av| 欧美综合视频在线观看| 国产精品一色哟哟哟| 日韩电影在线免费看| 亚洲人亚洲人成电影网站色| 精品国产一区二区三区av性色| 91美女片黄在线| 国产成人综合在线播放| 日韩精品一二三| 亚洲亚洲人成综合网络| 中文字幕五月欧美| 国产精品第五页| 国产精品国产三级国产普通话三级| 久久男人中文字幕资源站| 精品欧美久久久| 久久亚洲一区二区三区四区| 日韩精品一区二区三区在线播放 | 亚洲成人先锋电影| 一区二区三区国产精品| 亚洲国产成人av| 亚洲国产欧美日韩另类综合| 五月婷婷欧美视频| 久久精品理论片| 国产福利一区二区三区| 99久久久久免费精品国产| 99视频在线精品| 69精品人人人人| 国产亚洲精品资源在线26u| 国产精品久久久一本精品| 有码一区二区三区| 久久99精品网久久| 91影院在线观看| 日韩一区二区三区电影| 国产免费久久精品| 亚洲v日本v欧美v久久精品| 久久99精品视频| 色美美综合视频| 2021久久国产精品不只是精品| 中文字幕 久热精品 视频在线| 亚洲精品国产一区二区精华液| 麻豆极品一区二区三区| 97久久精品人人做人人爽| 欧美一二三四区在线| 综合欧美亚洲日本| 国内精品免费**视频| 欧美综合一区二区三区| 国产精品丝袜黑色高跟| 美国精品在线观看| 欧美日韩一区在线| 中文字幕日韩欧美一区二区三区| 日本 国产 欧美色综合| 欧美在线你懂的| 一区二区三区久久| 成人福利电影精品一区二区在线观看| 欧美色倩网站大全免费| 亚洲欧美日本在线| 91天堂素人约啪| 亚洲美女偷拍久久| 色天天综合久久久久综合片| 亚洲日本乱码在线观看| 成人av手机在线观看| 欧美国产精品中文字幕| 国产精品资源在线看| 国产欧美精品在线观看| 国产成人自拍在线| 欧美韩国日本不卡| 91美女在线看| 亚洲精品菠萝久久久久久久| 91久久线看在观草草青青 | 亚洲丝袜制服诱惑| 一本大道久久a久久综合| 亚洲国产sm捆绑调教视频| 欧美日韩免费高清一区色橹橹 | 日本久久电影网| 午夜激情久久久| 精品久久久久久久人人人人传媒| 九九国产精品视频| 久久久久久久久一| 一本到高清视频免费精品| 亚洲国产精品天堂| 26uuu国产日韩综合| 99re在线视频这里只有精品| 亚洲丰满少妇videoshd| 日韩一区二区三区视频在线观看| 成人丝袜18视频在线观看| 一区二区三区美女| 国产欧美一区二区在线| 欧美日韩亚洲综合在线 | 国产成人午夜视频| 亚洲成人激情综合网| 久久久国产一区二区三区四区小说| 91丝袜呻吟高潮美腿白嫩在线观看| 洋洋成人永久网站入口| 久久综合色之久久综合| 欧美人妖巨大在线| 91色.com| 成人高清视频在线| 国产自产v一区二区三区c| 亚洲18色成人| 一区二区激情小说| 国产精品私人影院| 国产欧美视频一区二区| 精品久久五月天| 欧美成人福利视频| 日韩欧美一区中文| 欧美一区永久视频免费观看| 欧美手机在线视频| 日本久久一区二区| 91丨九色丨尤物| 99久久99久久精品免费观看 | 日av在线不卡| 日本美女一区二区三区视频| 亚洲综合久久av| 亚洲二区在线视频| 五月婷婷激情综合| 日本在线不卡视频| 久久精品久久99精品久久| 蜜桃精品视频在线| 国精产品一区一区三区mba视频| 卡一卡二国产精品| 国产精品一区2区| 国产99久久久国产精品潘金| 国产精品一区在线观看乱码| 精品一区二区三区视频| 精品一区二区日韩| 成人免费看片app下载| www.久久精品| 欧美日韩一区二区三区视频| 91精品婷婷国产综合久久 | 亚洲最快最全在线视频| 亚洲男女一区二区三区| 五月激情六月综合| 国产河南妇女毛片精品久久久| 成人免费高清在线| 日本道免费精品一区二区三区| 91麻豆精品国产91| 免费不卡在线观看| 成人av电影在线| 欧美男男青年gay1069videost| 欧美v国产在线一区二区三区| 欧美国产欧美综合| 蜜桃久久av一区| av男人天堂一区| 欧美xxxxx裸体时装秀| 亚洲美女区一区| 成人性色生活片| 日韩免费福利电影在线观看| 亚洲美女少妇撒尿| 国产成人精品在线看| 6080日韩午夜伦伦午夜伦| 国产精品成人网| 国产成人av网站| 欧美sm极限捆绑bd| 天堂va蜜桃一区二区三区| 成人午夜精品一区二区三区| 日韩免费一区二区| 天天综合天天做天天综合| 91香蕉视频在线| 亚洲免费av观看| 日本精品一区二区三区四区的功能| 久久久久综合网| 美国毛片一区二区| 日韩欧美资源站| 久久国产三级精品| 日韩欧美视频一区| 日本一道高清亚洲日美韩| 91精品国产综合久久久蜜臀粉嫩 | 国产精品系列在线播放| 精品国产一区二区三区忘忧草 | 福利一区福利二区| 欧美高清一级片在线观看| 国产成人免费视频网站高清观看视频| 国产亚洲欧洲一区高清在线观看| 国产精品一级片在线观看| 国产精品天天看| 色久综合一二码| 亚洲成人手机在线| 欧美一区二区二区| 国产成人av在线影院| 亚洲人被黑人高潮完整版| 欧美色网一区二区| 美女视频网站久久| 国产欧美日韩亚州综合| 99国产精品久| 日韩精品视频网| 国产精品久久久久一区 | 91精品婷婷国产综合久久竹菊| 韩国毛片一区二区三区| 亚洲国产精品黑人久久久| 色系网站成人免费| 老司机精品视频在线| 中文字幕中文字幕在线一区 | 亚洲青青青在线视频| 欧美丰满一区二区免费视频| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲人成网站精品片在线观看| 欧美一区二区三区在| 99re6这里只有精品视频在线观看| 日韩国产欧美一区二区三区|