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

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

?? main.c

?? 藍牙點對點通信程序
?? C
字號:
/*
  SPP master
*/

#include <cm_rfcomm.h>
#include <message.h>
#include <panic.h>
#include <pio.h>
#include <ps.h>
#include <sched.h>
#include <stream.h>
#include <timer.h>
#include <vm.h>

/* Don't enable this on chip; the application will stop running */
/* #define DEBUG_PRINT_ENABLED */
#include <print.h>

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

#include "spp_master_service_record.h" /* Autogenerated from spp_master.sdp */

#include "../spp_common/config.h"
#include "../spp_common/invalid.h"
#include "../spp_common/lights.h"
#include "../spp_common/store.h"
#include "../spp_common/transport.h"

/* The UID of the SerialPort profile */

#define SERIAL_PORT 0x1101

/* The pin key. You probably want to change this */

static const uint16 THE_PIN[8] = { 'N', 'o', 'P', 'i', 'n', 'S', 'e', 't' };

/* Program state */

static enum { starting, inquiring, pairing, connecting, active } state = starting;
static uint16 have_paired = 0;

/* Report current state of play */

#ifdef DEBUG_PRINT_ENABLED
static void status(const char *s)
{
    PRINT(("State %d, far addr %lx %x %x, event %s\n", state, far_addr.lap, far_addr.nap, far_addr.uap, s));
}
#else
#define status(s) (void) 0
#endif

/* Send requests to the connection manager */

static void cm_init_req(void)
{
    /* Send first message to connection manager before starting scheduler */
    MAKE_MSG(CM_INIT_REQ);
    MessagePut(CM, msg);
}

static void cm_open_req(void)
{
    MAKE_MSG(CM_OPEN_REQ);
    msg->sizeServiceRecord = sizeof(spp_master_service_record);
    msg->serviceRecord = PanicNull(malloc(sizeof(spp_master_service_record)));
    memcpy(msg->serviceRecord, spp_master_service_record, sizeof(spp_master_service_record));
    msg->classOfDevice = 0;
    MessagePut(CM, msg);
}

static void cm_write_cod(void)
{
    MAKE_MSG(CM_WRITE_COD_REQ); 
    msg->class_of_device = CLASS_OF_DEVICE;
    MessagePut(CM, msg);
}

static void cm_connect_as_master_req(void)
{
    MAKE_MSG(CM_CONNECT_AS_MASTER_REQ);
    config_use(&msg->use);
    config_park(&msg->park);
    config_sniff(&msg->sniff);
    /* Look for a serial port at the far end */
    msg->bd_addr       = far_addr;
    msg->target        = SERIAL_PORT;
    msg->timeout       = D_SEC(60);
    msg->max_framesize = MAX_FRAMESIZE;
    MessagePut(CM, msg);
}

static void cm_cancel_req(void)
{
    MAKE_MSG(CM_CANCEL_REQ);
    MessagePut(CM, msg);
}

static void cm_disconnect_req(void)
{
    MAKE_MSG(CM_DISCONNECT_REQ);
    msg->link_type = RfcommConnection;
    msg->addr      = far_addr;
    MessagePut(CM, msg);
}

static void cm_inquiry_req(void)
{
    MAKE_MSG(CM_INQUIRY_REQ);
    msg->max_responses   = 8;
    msg->inq_timeout     = D_SEC(60);
    msg->class_of_device = CLASS_OF_DEVICE;
    msg->remote_name_request_enabled = 0;
    MessagePut(CM, msg);
}

static void cm_pair_req(void)
{
    MAKE_MSG(CM_PAIR_REQ);
    msg->role           = CmMaster;
    msg->timeout        = D_SEC(10);
    msg->authentication = 1;
    msg->bd_addr        = far_addr;
    MessagePut(CM, msg);
}

static void cm_add_sm_device_req(const uint8 *link_key)
{
    MAKE_MSG(CM_ADD_SM_DEVICE_REQ);
    msg->addr = far_addr;
    memcpy(msg->link_key, link_key, SIZE_LINK_KEY);
    msg->trust = 1;
    MessagePut(CM, msg);
}

static void cm_pin_code_res(const BD_ADDR_T *addr)
{
    MAKE_MSG(CM_PIN_CODE_RES);
    bool accept = !know_far_addr() || (far_addr.nap == addr->nap && far_addr.lap == addr->lap && far_addr.uap == addr->uap);
    msg->addr = *addr;
    msg->pin_length = accept ? sizeof(THE_PIN) < 8 ? sizeof(THE_PIN) : 8 : 0;
    memcpy(msg->pin, THE_PIN, msg->pin_length);
    MessagePut(CM, msg);
}

static void cm_link_key_res(const BD_ADDR_T *other)
{
    MAKE_MSG(CM_LINK_KEY_RES);
    msg->accept = far_addr.lap == other->lap
        && far_addr.nap == other->nap
        && far_addr.uap == other->uap
        && read_link_key(msg->key_val);
    msg->addr = *other;
    if(!msg->accept) memset(msg->key_val, 0, SIZE_LINK_KEY);
    MessagePut(CM, msg);
}

/* Keep a list of addresses we've tried before without success */

enum { FAILED_SIZE = 8 };
static BD_ADDR_T failed_addr[FAILED_SIZE];

static uint16 tried_and_failed(const BD_ADDR_T *addr)
{
    static uint16 failed_next;
    uint16 i;
    for(i = 0; i < FAILED_SIZE; ++i)
        if(failed_addr[i].lap == addr->lap
           && failed_addr[i].nap == addr->nap
           && failed_addr[i].uap == addr->uap)
            return 1;
    failed_addr[failed_next] = *addr;
    ++failed_next;
    if(failed_next == FAILED_SIZE) failed_next = 0;
    return 0;
}

/* Handle incoming messages from the connection manager */

static void forward(void)
{
    if(!know_far_addr())
    {
        /* If we don't know who we're meant to be talking to, start looking. */
        status("Inquiring");
        cm_inquiry_req();
        state = inquiring;
        lights_inquiring();
    }
    else if(!have_paired)
    {
        /* If we know who is at the far end, but we're not paired, do that now. */
        status("Pairing");
        cm_pair_req();
        state = pairing;
        lights_pairing();
    }
    else
    {
        /* If we get here, we know who's at the far end and we've paired with them. Connect. */
        status("Connecting");
        cm_connect_as_master_req();
        state = connecting;
        lights_connecting();
    }
}

DECLARE_TASK(1)
{
    MessageType type ;
    void * msg = MessageGet(1,&type) ;
    if (msg)
    {
        switch (type) 
        {
        case CM_INIT_CFM:
            status("init_cfm");
            cm_open_req();
            break;

        case CM_OPEN_CFM:
            status("open_cfm");
            cm_write_cod();
            forward();
            break;

        case CM_SERVICE_REGISTER_CFM:
            /* Don't care */
            break;

        case CM_CONNECT_CFM:
        {
            CM_CONNECT_CFM_T *prim = (CM_CONNECT_CFM_T *) msg;
            connect_status_t result = prim->status;
            if(result == CmConnectComplete)
            {
                Source rfcomm_source = prim->source;
                Sink rfcomm_sink = prim->sink;
                status("connect_cfm complete");

                PanicFalse(TransportConnect(rfcomm_source, rfcomm_sink));

                state = active;
                lights_connected();
            }
            else
            {
                status("connect_cfm failure");
                forward();
            }
        }
        break;

        case CM_CONNECT_STATUS_IND:
            /* Disconnected. Start again. */
            status("connect_status_ind");
            forward();
            break;

        case CM_INQUIRY_RESULT_IND:
        {
            CM_INQUIRY_RESULT_IND_T *prim = (CM_INQUIRY_RESULT_IND_T *) msg;
            status("inquiry_result_ind");
            if(!tried_and_failed(&prim->inq_result.bd_addr))
            {
                far_addr = prim->inq_result.bd_addr;
                cm_cancel_req();
                /* Will issue next request after INQUIRY_COMPLETE_CFM */
            }
        }
        break;

        case CM_INQUIRY_COMPLETE_CFM:
        {
            status("inquiry_complete_cfm");
            forward();
        }
        break;

        case CM_PAIR_CFM:
        {
            CM_PAIR_CFM_T *prim = (CM_PAIR_CFM_T *) msg;
            status("pair_cfm");
            switch(prim->status)
            {
            case CmPairingNotFinished:
                /* We get the link key here */
                write_link_key(prim->link_key);
                break;
            case CmPairingComplete:
                /* But pairing isn't complete until this message arrives */
                write_far_addr();
                have_paired = 1;
                forward();
                break;
            case CmPairingTimeout:
            case CmPairingCancelled:
            case CmPairingFail:
                /* Didn't work */
                have_paired = 0;
                clear_far_addr();
                forward();
                break;
            }
        }  
        break;

        case CM_PIN_CODE_REQ:
            status("cm_pin_code_req");
            cm_pin_code_res(&((CM_PIN_CODE_REQ_T *) msg)->addr);
            break;

        case CM_LINK_KEY_REQ:
            status("cm_link_key_req");
            cm_link_key_res(&((CM_LINK_KEY_REQ_T *) msg)->addr);
            break;

        case CM_CONTROL_IND:
            TransportModemStatusControl((CM_CONTROL_IND_T *)msg);
            break;

        case CM_ERROR_IND:
        {
            cm_error_t error = ((CM_ERROR_IND_T *) msg)->error;
            if(error >= CmWarnLocalSniffNotEnabled || error == CmErrorCancelWhenIdle)
            {
                /* Ignore warnings */
                break;
            }
            PRINT(("Error %d\n", error));
        }
        /*lint -fallthrough and panic */
        default:
            /* Unexpected message */
            PRINT(("Type %d\n", type));
            status("Panic");
            Panic();
            break;
        }
        MessageDestroy(msg);
    }
}

static void appPioEvent(uint16 pressed)
{
    if(BUTTON_DOWN(pressed))
    {
        have_paired = 0;
        clear_far_addr();
        clear_link_key();
        memset(failed_addr, 0, sizeof(failed_addr));

        status("button pressed");

        switch(state)
        {
        case starting:
            break;
        case pairing:
        case connecting:
        case inquiring:
            cm_cancel_req();
            break;
        case active:
            cm_disconnect_req();
            break;
        }
        state = starting;
    }
    invalid_update(pressed);
}

static const uint16 INPUT = BUTTON | INVALID;

const SchedPioEntry applicationPioEntry = { &INPUT, appPioEvent };

int main(void)
{
    /* Refuse to run unless the transport has been successfully initialised */
    if(TransportInit())
    {
        /* Tell scheduler we are using our pio entry */
        SchedPioEntryChanged();
        
        /* Enable the LEDs as outputs, other lines as inputs */
        PioSetDir(LED_CONNECT|LED_POWER|BUTTON|INVALID, LED_CONNECT|LED_POWER);

#ifdef CSR_APPLICATION_HARDWARE
        PioSet(BUTTON|INVALID, ~0);  /* Enable VERY weak pull-ups */
        PioSet(LED_CONNECT | LED_POWER, LED_CONNECT); /* only power on initially */
#else
        PioSet(LED_CONNECT, 0);
#endif
        invalid_update(PioGet());
        read_far_addr();
        if(know_far_addr())
        {
            uint8 link_key[SIZE_LINK_KEY];
            if(read_link_key(link_key))
            {
                cm_add_sm_device_req(link_key);
                have_paired = 1;
            }
        }
        status("Init");
        TimerInit();
        cm_init_req();
        Sched();
    }
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色94色欧美sute亚洲线路一ni| 精品国产乱码久久久久久久| 极品少妇xxxx精品少妇| 亚洲天堂网中文字| 久久久久久黄色| 日韩一区二区三区三四区视频在线观看 | 国产一区二区91| 日韩黄色免费电影| 欧美sm美女调教| 欧美日韩午夜精品| 色综合天天综合色综合av | 色香色香欲天天天影视综合网| 久久国产视频网| 亚洲成av人片在线| 亚洲精品成人在线| 国产精品电影院| 国产欧美精品在线观看| 日韩午夜激情av| 欧美一区二区三级| 欧美老女人第四色| 欧美色图在线观看| 色综合av在线| 91同城在线观看| caoporen国产精品视频| 成人免费视频免费观看| 国产精品一区二区无线| 精品亚洲国内自在自线福利| 日日欢夜夜爽一区| 无吗不卡中文字幕| 婷婷国产在线综合| 亚洲成人av电影| 日韩专区一卡二卡| 日本伊人午夜精品| 蜜臀久久久久久久| 蜜臀a∨国产成人精品| 裸体在线国模精品偷拍| 麻豆成人av在线| 黄色精品一二区| 国产高清不卡二三区| 国产成人8x视频一区二区| 国产黄色91视频| 国产成人免费av在线| 国产91精品露脸国语对白| 成人av影院在线| 91麻豆成人久久精品二区三区| 91美女片黄在线观看| 色屁屁一区二区| 欧美日韩精品一区二区三区四区| 欧美肥妇毛茸茸| 日韩欧美亚洲国产精品字幕久久久 | av亚洲精华国产精华| 91麻豆精品在线观看| 欧美色精品在线视频| 91精品国产综合久久国产大片| 日韩无一区二区| 中文字幕成人av| 一区二区三区在线视频观看58| 香港成人在线视频| 国产一区二区精品久久91| 成人av电影观看| 欧美日韩一区二区三区在线看 | 日韩亚洲欧美高清| 久久久精品综合| 亚洲男人电影天堂| 五月婷婷另类国产| 国产精品123区| 日本道色综合久久| 欧美一区二区精美| 国产精品午夜春色av| 亚洲成a天堂v人片| 国产传媒一区在线| 在线免费av一区| 日韩精品中文字幕一区| 亚洲天堂免费在线观看视频| 日韩精品久久理论片| 国产iv一区二区三区| 欧美色偷偷大香| 国产拍揄自揄精品视频麻豆| 亚洲一区二区三区四区在线观看 | 亚洲视频一二三| 日本不卡一二三| 91在线观看美女| 欧美一区二区精品在线| 最近日韩中文字幕| 精品无码三级在线观看视频| 91麻豆精东视频| 久久久精品免费免费| 香蕉影视欧美成人| fc2成人免费人成在线观看播放| 欧美一区二区三区免费大片 | 日韩电影免费一区| 91丨porny丨户外露出| www精品美女久久久tv| 亚洲一区国产视频| av电影在线观看一区| 精品乱码亚洲一区二区不卡| 一区二区三区在线播放| 成人小视频在线观看| 日韩网站在线看片你懂的| 亚洲国产另类av| 99r精品视频| 国产欧美日韩在线观看| 日本亚洲三级在线| 在线观看区一区二| 亚洲三级电影网站| 不卡视频一二三| 国产欧美一区二区精品性色超碰| 奇米色一区二区| 欧美肥妇free| 亚洲 欧美综合在线网络| 日本高清视频一区二区| 一区在线中文字幕| 国产成人亚洲精品青草天美| 日韩亚洲欧美中文三级| 亚洲国产日韩a在线播放 | 久久综合九色综合欧美98| 亚洲gay无套男同| 在线视频欧美精品| 亚洲欧美另类久久久精品2019| 成人午夜激情影院| 国产精品婷婷午夜在线观看| 国产乱理伦片在线观看夜一区| 日韩精品专区在线影院重磅| 蜜臀精品久久久久久蜜臀 | 色综合一区二区三区| 中文字幕日本乱码精品影院| voyeur盗摄精品| 中文成人综合网| 欧美一卡二卡在线| 日韩影院免费视频| 91精品国产综合久久婷婷香蕉| 午夜av区久久| 日韩免费视频一区| 国产美女主播视频一区| 国产亚洲美州欧州综合国| 国产福利一区二区三区视频在线| 国产亚洲综合性久久久影院| 豆国产96在线|亚洲| 亚洲欧洲日韩女同| 91久久精品一区二区三| 亚洲一卡二卡三卡四卡 | 精品国产伦一区二区三区免费| 久久se这里有精品| 国产三级三级三级精品8ⅰ区| 国产成人综合在线观看| 国产精品不卡在线| 91成人在线观看喷潮| 日韩精品一卡二卡三卡四卡无卡| 91精品国产欧美一区二区| 久久成人久久鬼色| 久久久午夜电影| 波波电影院一区二区三区| 一区二区三区在线观看国产| 91精品麻豆日日躁夜夜躁| 理论片日本一区| 中文字幕精品一区二区精品绿巨人 | 亚洲视频一区二区免费在线观看| 欧美在线|欧美| 免费在线视频一区| 国产视频视频一区| 色婷婷激情综合| 久久机这里只有精品| 亚洲国产激情av| 欧美日本一区二区| 国内精品国产三级国产a久久| 国产精品人成在线观看免费 | 不卡在线观看av| 亚瑟在线精品视频| 国产偷国产偷亚洲高清人白洁| 97aⅴ精品视频一二三区| 日韩福利电影在线| 国产精品国产精品国产专区不片| 欧美乱熟臀69xxxxxx| 国产不卡高清在线观看视频| 一区二区三区在线观看欧美| 26uuu国产一区二区三区| 一本久久a久久免费精品不卡| 青青草97国产精品免费观看 | 亚洲线精品一区二区三区| 日韩一区二区麻豆国产| 99精品视频在线观看| 捆绑调教美女网站视频一区| 亚洲精品大片www| 久久久久免费观看| 337p亚洲精品色噜噜| 成人激情视频网站| 青青国产91久久久久久| 亚洲精品亚洲人成人网| 久久久久久夜精品精品免费| 欧美日韩在线电影| 99re66热这里只有精品3直播| 久久国产精品无码网站| 亚洲黄色免费网站| 日本一区二区三区四区在线视频 | 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲啪啪综合av一区二区三区| 久久蜜桃一区二区| 91精品免费在线观看| 色噜噜狠狠成人中文综合 | 欧美日韩国产片|