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

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

?? mcdemo.c

?? pic單片機驅動mcp2510源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
 */
void checkMsg(void) {
    ulong id;
    unsigned char dlc;
    unsigned char buf[8];
    unsigned int flags;
    canStatus stat;
    int i;

    stat = canRead(&id, buf, &dlc, &flags);
    if (stat == canOK) {
        //  printf("Message rcvd: id=%d, dlc=%d, {%d,%d,%d,...}\r\n", (int)id, dlc, buf[0], buf[1], buf[2]);
        for (i = 0; i < FOLDER_COUNT; i++)
            if (checkFolderEnable(i) && folder_env[i] == id)
                break;
        if (i < FOLDER_COUNT) {
            if (flags & canMSG_RTR) {
                // An RTR message
                switch(i) {
                    case doc_MayorsDocument:
                        mpPending = 0; // txMP(0);
                        break;
                    case doc_Inputs:
                        txInputs();
                        break;
                }
            } else {
                // An ordinary message
                switch(i) {
                    case doc_KingsDocument: // KP
                        if (dlc == 8)
                            rxKP(buf);
                        break;
                    case doc_ParamSetting: // Parameter setting
                        if (dlc == 8)
                            rxParam(buf);
                        break;
                    case doc_LEDcontrol: // LED control
                        if (dlc >= 1) {
                            LEDsave = (uchar)(buf[0] & 3);
                            setLEDs(LEDsave);
                        }
                        break;
                    case doc_RequestInputs: // Request Inputs
                        txInputs();
                        break;
                }
                if (mpPending != 255) {
                    txMP(mpPending);
                    mpPending = 255;
                }
            }
        }
    }
}

// Extracts an Envelop number from a message; it starts at buf[0].
// The highest bit decides if it is an extended CAN id or not and is kept,
// the other two reserved or control bits are cleared.
// We support extended CAN as we must be able to detect 0x1fffffff for an
// undefined base number.
ulong extractEnvelope(uchar *buf) {
    return buf[0] + ((buf[1] + ((buf[2] +((buf[3] & 0x9f) << 8)) << 8)) << 8);
}
// Handle a King's Page. In buf, there is an 8 byte message.
void rxKP(uchar *buf) {
    ulong env; // Has to be long, even if we support only standard CAN.
    uchar i, folderNo, enableF, cmd;

    if (buf[0] == 0 || buf[0] == nodeNo) {
        switch(buf[1]) {
            case 0:  // KP0: Selects Action and Communication mode.
                if (buf[2] && buf[2] < 4)
                    actMode = (actModesT)buf[2];
                if (buf[3] && buf[3] < 4)
                    commMode = (commModesT)buf[3];

                switch(actMode) {
                    case ckReset:
#ifdef __WIN32__
                        // doReset() won't return, so we must show the status now.
                        mcThread->showCKStatus();
#endif
                        doReset();
                        break;
                    case ckFreeze:
                        doFreeze();
                        break;
                    case ckRunning:
                        doRun();
                        break;
                }
                canSetCommMode(commMode);
#ifdef __WIN32__
                mcThread->showCKStatus();
#endif
                break;

            case 1: // KP1: Provides the Base numbers, asks for a Mayor's response.
                env = extractEnvelope(buf+4);
                if ((env & 0x1fffffff) == 0x1fffffff)
                    baseNo = envInvalid;
                else if (env != 0)
                    baseNo = env;
                fixMPEnv();
                if (buf[2] != 0xff) {
                    mpPending = buf[2]; //  txMP(buf[2]);
                }
#ifdef __WIN32__
                mcThread->showCKStatus();
                mcThread->showFolders();
#endif
                break;

            case 2: // Assigns an Envelope to a Folder
                env = extractEnvelope(buf+2);
                folderNo = buf[6];
                enableF = (uchar)(buf[7] & 1);
                cmd = (uchar)(buf[7] >> 1); // We demand the reserved bits to be zero.

                // Find the folder with envelope env. Should there be more than one
                // folder with this envelope, all will not be found.
                for (i = 0; i < FOLDER_COUNT; i++)
                    if (folder_env[i] == env)
                        break;

                switch(cmd) {
                    case 0: // Keep current assignment, ignore folderNo, only regard enableF.
                        if (i < FOLDER_COUNT)
                            setFolderEnable(i, enableF);
                        break;
                    case 1: // Assign the envelope env to the folder folderNo.
                        // We do not allow more than one envelope per folder.
                        if (folderNo < FOLDER_COUNT) {
                            folder_env[folderNo] = env;
                            setFolderEnable(folderNo, enableF);
                        }
                        break;
                    case 3: // Transfer the envelope env to to the folder folderNo.
                        // The old assignment is cancelled.
                        if (i < FOLDER_COUNT) {
                            folder_env[i] = envInvalid;
                            setFolderEnable(i, 0);
                        }
                        if (folderNo < FOLDER_COUNT) {
                            folder_env[folderNo] = env;
                            setFolderEnable(folderNo, enableF);
                        }
                        break;

                    case 2: // Expel this envelope from any assignment. Folder No is ignored.
                        if (!enableF) { // AAE has to be 100.
                            if (i < FOLDER_COUNT) {
                                setFolderEnable(i, 0);
                                folder_env[i] = envInvalid;
                            }
                        }
                        break;

                    default:
                        break;
                }
#ifdef __WIN32__
                mcThread->showFolders();
#endif
                break;

            case 9:
                nodeNo = buf[3];
                fixMPEnv();
                if (buf[2] != 0xff) {
                    mpPending = buf[2]; // txMP(buf[2]);
                }
#ifdef __WIN32__
                mcThread->showCKStatus();
                mcThread->showFolders();
#endif

            case 16:
                // As the connection between folder and document is fixed, we do
                // not use these fields. We just make it possible to enable/disable
                // a folder without having to specify the envelope number.
                folderNo = buf[2];
                if (buf[4]) {
                    enableF = (uchar)(buf[4] & 0x40);
                    if (folderNo < FOLDER_COUNT)
                        setFolderEnable(folderNo, enableF);
#ifdef __WIN32__
                    mcThread->showFolders();
#endif
                }
                break;

            default:
                break;
        }
    }
}

void txMP(uchar pageNo) {
    uchar buf[8];
    buf[0] = 0;
    buf[1] = pageNo;
    if (commMode != ckSilent && pageNo < 2 &&
        folder_env[doc_MayorsDocument] != envInvalid) {
        switch(pageNo) {
            case 0:
                strcpy((char*)buf+2, "!EAN!"); // Clears buf[7] as well.
                break;
            case 1:
                strcpy((char*)buf+2, "SerNo"); // Clears buf[7] as well
                break;
        }
        if (canWrite(folder_env[doc_MayorsDocument], buf, 8, 0) != canOK)
            ; // canWriteFailures++;
    }
}


// Read the input variables (buttons, analogue value) and transmit a message.
//     Inputs    DLC = 2   RTR always enabled
//          line 0: Bit 0..1 Current LED status
//                  Bit 2..4 Buttons 0..2, current value
//                  Bit 5..7 Buttons 0..2, sticky (cleared at Tx).
//          line 1: Analog value, 0..255

void txInputs(void) {
    uchar buf[2];
    if (actMode == ckRunning && commMode == ckCommunicate &&
        folder_env[doc_Inputs] != envInvalid && checkFolderEnable(doc_Inputs)) {
        buf[0] = (uchar)((LEDsave & 3) | (getButtons() << 2) | (buttonsSticky << 5));
        buf[1] = (uchar)getAnalogue();
        if (canWrite(folder_env[doc_Inputs], buf, 2, 0) == canOK)
            buttonsSticky = 0;
        else
            ; // canWriteFailures++;
    }
}

// Parse a paramter setting doucument.
//      Parameter settings   DLC = 8
//        Page 0
//          line 0: 0 (page number)
//          line 1:  Period to transmit the Inputs document, 1..255, 0 no transmissions
//          line 2..7: 0
//
void rxParam(uchar *buf) {
    unsigned int pSave = txPeriod;
    txPeriod = buf[1] + (buf[2] << 8);
    if (pSave == 0 && txPeriod != 0) // Make sure a message is transmitted at once.
        txLastTime = timerValue()-txPeriod;

#ifdef __WIN32__
    mcThread->showModuleStatus();
#endif
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩片之四级片| av激情综合网| 色一区在线观看| 欧美一区二视频| 日本一区二区成人| 亚洲综合成人在线| 国产麻豆视频一区| 欧美在线观看视频在线| 欧美精品一区二区三区久久久| 精品免费国产一区二区三区四区| 国产精品福利一区| 日本vs亚洲vs韩国一区三区二区 | 久久综合色8888| 亚洲免费三区一区二区| 国产一区二区三区在线观看精品| 欧美精品日日鲁夜夜添| 亚洲欧美另类久久久精品| 国产精品夜夜嗨| 欧美tickling挠脚心丨vk| 日韩精品一二三区| 欧美亚洲一区二区在线观看| 国产精品美日韩| 国产成人免费高清| 欧美精品一区二区三区在线| 美女免费视频一区二区| 欧美蜜桃一区二区三区| 亚洲一区在线观看免费 | 久久精品国产精品亚洲精品| 欧美亚洲国产一区二区三区va| 国产婷婷精品av在线| 精品一区二区久久| 日韩欧美中文一区| 亚洲成人黄色小说| 欧美日韩亚洲综合一区| av不卡在线播放| 日本一区二区免费在线观看视频 | 玉足女爽爽91| 91年精品国产| 亚洲欧洲综合另类| 91视频一区二区三区| 亚洲欧美另类久久久精品2019 | 午夜一区二区三区视频| 欧洲精品在线观看| 亚洲一区免费观看| 精品视频全国免费看| 亚洲一本大道在线| 欧美日韩免费一区二区三区视频| 亚洲在线成人精品| 欧美日韩免费观看一区二区三区| 亚洲国产精品影院| 欧美日韩色综合| 日韩有码一区二区三区| 欧美一区二区播放| 精品中文av资源站在线观看| 日韩精品一区二| 国产最新精品免费| 中文在线资源观看网站视频免费不卡 | 欧美日韩免费观看一区二区三区| 午夜精品久久久久久久久| 91精品国产综合久久婷婷香蕉| 日韩成人午夜电影| 欧美成人vr18sexvr| 国产乱对白刺激视频不卡| 国产免费成人在线视频| 一本大道av伊人久久综合| 亚洲成人动漫在线免费观看| 日韩亚洲欧美综合| 国产大陆亚洲精品国产| 成人免费小视频| 欧美色国产精品| 久久国产日韩欧美精品| 国产女人水真多18毛片18精品视频| av成人免费在线观看| 亚洲成a人片综合在线| 精品国产一区二区三区忘忧草 | 日韩av网站在线观看| 久久先锋影音av| 91网站最新网址| 亚洲成av人**亚洲成av**| 精品美女被调教视频大全网站| 成人国产一区二区三区精品| 一区二区三区四区亚洲| 欧美一区三区二区| 成人午夜精品一区二区三区| 亚洲一级在线观看| 日韩一级片在线观看| jlzzjlzz亚洲女人18| 亚洲国产成人va在线观看天堂| 精品国产伦一区二区三区观看体验| 成人福利电影精品一区二区在线观看| 亚洲男人的天堂网| 麻豆高清免费国产一区| 中文字幕欧美激情| 欧美美女视频在线观看| 国产成人午夜高潮毛片| 亚洲国产美国国产综合一区二区| 精品久久久久久久一区二区蜜臀| 大白屁股一区二区视频| 亚洲va中文字幕| 国产目拍亚洲精品99久久精品| 欧美性受极品xxxx喷水| 国产精品综合二区| 亚洲一级二级在线| 亚洲国产精品高清| 欧美一级黄色片| 色婷婷国产精品久久包臀 | 亚洲你懂的在线视频| 久久亚洲一区二区三区明星换脸| 色哟哟一区二区| 国产伦精一区二区三区| 亚洲网友自拍偷拍| 欧美激情综合在线| 日韩欧美国产一区二区在线播放 | 日韩成人精品视频| 亚洲视频你懂的| 欧美不卡一二三| 欧洲激情一区二区| 成人免费视频caoporn| 麻豆中文一区二区| 亚洲最新在线观看| 国产精品久久久一区麻豆最新章节| 777奇米成人网| 91极品视觉盛宴| 国产99久久久国产精品潘金网站| 日本亚洲电影天堂| 亚洲一区在线免费观看| 18成人在线观看| 国产日本亚洲高清| 欧美成人一区二区三区片免费| 欧美最新大片在线看 | 三级一区在线视频先锋| 亚洲欧美成人一区二区三区| 国产欧美精品国产国产专区| 日韩欧美高清一区| 69堂成人精品免费视频| 欧美亚洲一区二区在线观看| 91免费观看视频| 粉嫩aⅴ一区二区三区四区 | 亚洲嫩草精品久久| 国产精品大尺度| 国产清纯美女被跳蛋高潮一区二区久久w | 国产91综合一区在线观看| 狂野欧美性猛交blacked| 天天做天天摸天天爽国产一区| 亚洲裸体在线观看| 最新国产の精品合集bt伙计| 国产激情视频一区二区三区欧美| 蜜芽一区二区三区| 婷婷国产v国产偷v亚洲高清| 亚洲一区二区三区不卡国产欧美| 一区二区三区在线高清| 亚洲免费资源在线播放| 亚洲精品久久久蜜桃| 亚洲精选在线视频| 一区二区三区波多野结衣在线观看| 自拍偷拍亚洲综合| 亚洲免费观看高清在线观看| 亚洲日本在线看| 亚洲视频小说图片| 一区二区三区日韩| 一级精品视频在线观看宜春院| 亚洲欧美激情小说另类| 一区二区久久久| 亚洲综合免费观看高清完整版| 亚洲男人的天堂av| 亚洲小说欧美激情另类| 亚洲五月六月丁香激情| 五月综合激情网| 日本在线不卡视频| 久久国产精品色| 国产成人综合在线| 成人高清在线视频| 一本久久精品一区二区| 欧美亚洲自拍偷拍| 欧美一区二视频| 日韩一区二区三| 欧美精品一区二区高清在线观看| 精品国产91乱码一区二区三区| 久久亚洲精精品中文字幕早川悠里| 久久久精品国产免费观看同学| 亚洲国产精品黑人久久久| 亚洲免费观看高清完整版在线| 亚洲激情在线播放| 视频一区二区国产| 国产综合色产在线精品| 不卡免费追剧大全电视剧网站| 91麻豆福利精品推荐| 欧美三级电影网站| 日韩欧美激情在线| 国产精品三级视频| 亚洲精品菠萝久久久久久久| 日韩精品视频网| 国产精品自拍网站| av欧美精品.com| 欧美写真视频网站| 精品久久久网站| 亚洲欧洲av在线| 天天综合色天天综合| 国产精品一区二区在线播放| 色综合久久天天|