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

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

?? wncan.c

?? cpc-1631的BSP包for VxWorks操作系統
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* wnCAN.c - implementation of Windnet CAN Interface */

/* Copyright 2001 Wind River Systems, Inc. */

/*
modification history
--------------------
01a,06oct05,lsg  fix warning
09nov01,dnb modified for integration into Tornado
12jul01,jac written

*/

/*

DESCRIPTION
This file contains the functions that implement the interface defined in the
wnCAN.h header file.

*/

/* includes */
#include <vxWorks.h>
#include <errnoLib.h>
#include <CAN/wnCAN.h>

#include <CAN/canBoard.h>
#include <CAN/canController.h>
#include <CAN/canFixedLL.h>

/* global variables */
const static WNCAN_VersionInfo info = {1,3};

/************************************************************************
*
* WNCAN_GetVersion - return current major and minor revision
*
*
* RETURNS:pointer to WNCAN_VersionInfo
*
* ERRNO: N/A
*
*/

const WNCAN_VersionInfo *WNCAN_GetVersion(void)
{
    return &info;
}

/************************************************************************
*
* defaultISRCallBack - do nothing but return
*
* The default ISR callback serves as a placeholder and does nothing
*
* RETURNS: N/A
*
* ERRNO: N/A
*
*/
static void defaultISRCallback
(
    WNCAN_DEVICE *pDev,
    WNCAN_IntType stat,
    UCHAR chnNum)
{
    return;
}

/************************************************************************
*
* establishLinks - initialize function pointers in the Device structure
*
* This routine connects the function pointers in the CAN_Device
* data structure to the appropriate routines.
*
* RETURNS: OK or ERROR
*
* ERRNO: S_can_invalid_parameter
*
*/

STATUS CAN_DEVICE_establishLinks
(
    WNCAN_DEVICE *pDev,
    WNCAN_BoardType brdType,
    WNCAN_ControllerType ctrlType
)
{
    STATUS retCode = OK;

    /* check for null pointer */
    if(pDev == 0)
    {
        errnoSet(S_can_invalid_parameter);
        retCode = ERROR;
    }
    else
    {
        /* save board and controller types */
        pDev->pCtrl->ctrlType = ctrlType;
        pDev->pBrd->brdType = brdType;

        /* establish controller links */
        retCode = WNCAN_Controller_establishLinks(pDev, ctrlType);

        /* establish board links */
        retCode = WNCAN_Board_establishLinks(pDev, brdType);

        /* set default isr callback */
        pDev->pISRCallback = defaultISRCallback;
    }
    return retCode;
}

/************************************************************************
*
* CAN_InstallISRCallback - initialize ISR callback
*
* RETURNS: OK or ERROR
*
* ERRNO: S_can_invalid_parameter
*
*/

STATUS CAN_InstallISRCallback
(
    struct WNCAN_Device *pDev,
    void (*pFun)(struct WNCAN_Device *pDev2,WNCAN_IntType
                 intStatus, UCHAR channelNum)
)
{
   if(!pDev || !pFun)
   {
        errnoSet(S_can_invalid_parameter);
        return ERROR;
    }
    else
        pDev->pISRCallback = pFun;

    return OK;
}


/************************************************************************
*
* WNCAN_Open - return a handle to the requested WNCAN_DEVICE
*
* RETURNS: pointer to valid WNCAN_DEVICE, or 0 if an error occurred
*
* ERRNO: N/A
*
*/

struct WNCAN_Device *WNCAN_Open
(
    unsigned int brdType,
    unsigned int brdNdx,
    unsigned int ctrlNdx
)
{
    return  WNCAN_Board_Open(brdType, brdNdx, ctrlNdx);
}

/************************************************************************
*
* WNCAN_Close - close the handle to the requested WNCAN_DEVICE
*
* RETURNS: N/A
*
* ERRNO: N/A
*
*/

void WNCAN_Close
(
struct WNCAN_Device *pDev
)
{
        if(pDev != NULL)
                WNCAN_Board_Close(pDev);

    return;
}

/************************************************************************
*
* WNCAN_GetMode - get the channel mode
*
* This routine returns the mode of the channel.
*
* RETURNS: the channel mode
*
* ERRNO:   N/A
*
*/
WNCAN_ChannelMode WNCAN_GetMode(struct WNCAN_Device *pDev, UCHAR chn)
{

    WNCAN_ChannelMode cm = WNCAN_CHN_INVALID;

    if(chn < pDev->pCtrl->numChn)
        cm = pDev->pCtrl->chnMode[chn];

    return cm;
}


/************************************************************************
* WNCAN_SetMode - set the mode of the channel.
*
* This function sets the mode of the channel to one of five values:
* WNCAN_CHN_TRANSMIT, WNCAN_CHN_RECEIVE, WNCAN_CHN_INACTIVE, 
* and in addition for advanced controllers,
* WNCAN_CHN_RTR_REQUESTER, or WNCAN_CHN_RTR_RESPONDER.
* All available channels can be configured to be WNCAN_CHN_INACTIVE.
* The channels available for transmitting or receiving messages are
* determined by the device hardware, and therefore ,may or may not be
* configurable with this function call. If an attempt is made to set the mode 
* of a channel to WNCAN_CHN_RTR_RESPONDER or WNCAN_CHN_RTR_REQUESTER for a
* simple CAN controller such as SJA1000, WNCAN_CHN_INVALID is returned and an
* and errorno is set to reflect the error. 
* The preferred approach is to allow the device driver to manage the channels 
* internally using the CAN_GetTxChannel(), CAN_GetRxChannel(), 
* CAN_GetRTRRequesterChannel(), CAN_GetRTRResponderChannel() and
* CAN_FreeChannel() function calls.
*
* WNCAN_SetMode, does not affect channel setting in hardware.
*
* RETURNS: ERROR if the requested channel number is out of range,
*           OK otherwise 
*
* ERRNO: S_can_illegal_channel_no
*
*/
STATUS WNCAN_SetMode(struct WNCAN_Device *pDev, UCHAR channelNum,
                                         WNCAN_ChannelMode mode)
{
    STATUS retCode = OK;
        
    if(channelNum >= pDev->pCtrl->numChn)
    {
        errnoSet(S_can_illegal_channel_no);
        retCode = ERROR;
    }
    else
    {
        switch(mode)
        {
                case WNCAN_CHN_TRANSMIT:
                        if((pDev->pCtrl->chnType[channelNum] == WNCAN_CHN_TRANSMIT) ||
                                (pDev->pCtrl->chnType[channelNum] == WNCAN_CHN_TRANSMIT_RECEIVE))
                        {
                                pDev->pCtrl->chnMode[channelNum] = WNCAN_CHN_TRANSMIT;
                        }
                        else
                        {
                                errnoSet(S_can_illegal_config);
                                retCode = ERROR;
                        }
                        
                        break;
                        
                case WNCAN_CHN_RECEIVE:
                        if((pDev->pCtrl->chnType[channelNum] == WNCAN_CHN_RECEIVE) ||
                                (pDev->pCtrl->chnType[channelNum] == WNCAN_CHN_TRANSMIT_RECEIVE))
                        {
                                
                                pDev->pCtrl->chnMode[channelNum] = WNCAN_CHN_RECEIVE;
                        }
                        else
                        {
                                errnoSet(S_can_illegal_config);
                                retCode = ERROR;
                        }
                        
                        break;
                        
                case WNCAN_CHN_RTR_REQUESTER:
                /* The hardware type of the channel will be transmit and receive only
                        in advanced controllers such as TouCAN and I82527 */
                        if(pDev->pCtrl->chnType[channelNum] == WNCAN_CHN_TRANSMIT_RECEIVE)
                        {
                                pDev->pCtrl->chnMode[channelNum] = WNCAN_CHN_RTR_REQUESTER;
                        }
                        else
                        {
                                errnoSet(S_can_rtr_mode_not_supported);
                                retCode = ERROR;
                        }
                        
                        break;
                        
                case WNCAN_CHN_RTR_RESPONDER:
                        /* The hardware type of the channel will be transmit and receive only
                        in advanced controllers such as TouCAN and I82527 */            
                        if(pDev->pCtrl->chnType[channelNum] == WNCAN_CHN_TRANSMIT_RECEIVE)
                        {
                                pDev->pCtrl->chnMode[channelNum] = WNCAN_CHN_RTR_RESPONDER;
                        }
                        else
                        {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产性色一区二区| 欧美日韩1234| 激情久久五月天| 五月天欧美精品| 亚洲成av人影院在线观看网| 亚洲精品乱码久久久久久黑人| 日本一区二区综合亚洲| 久久久久国产精品麻豆ai换脸| 精品剧情在线观看| 精品国产伦一区二区三区观看方式| 欧美一区二区福利视频| 日韩亚洲欧美综合| 精品成人一区二区三区| 亚洲欧美中日韩| 亚洲欧美区自拍先锋| 樱花影视一区二区| 日本中文字幕一区二区有限公司| 日韩电影在线免费观看| 精品一区精品二区高清| 福利一区二区在线| 色先锋aa成人| 欧美一区二区三区人| 日韩欧美一区在线| 久久久久久日产精品| 国产精品福利一区二区| 伊人色综合久久天天| 亚洲 欧美综合在线网络| 另类调教123区| 成人深夜福利app| 欧美丝袜自拍制服另类| 欧美成人a在线| 综合久久久久久| 视频一区免费在线观看| 国产成人免费高清| 欧洲av一区二区嗯嗯嗯啊| 日韩欧美资源站| 国产精品理论片在线观看| 日韩欧美一区在线| 男女视频一区二区| 成人精品视频一区二区三区尤物| 在线观看日韩av先锋影音电影院| 日韩精品一区二区在线| 亚洲另类中文字| 九色porny丨国产精品| 色一情一乱一乱一91av| 欧美精品一区二区三区久久久| 亚洲人成小说网站色在线 | 国产风韵犹存在线视精品| 91玉足脚交白嫩脚丫在线播放| 欧美高清一级片在线| 亚洲欧洲成人精品av97| 久久国产成人午夜av影院| 欧美性极品少妇| 中文字幕欧美日韩一区| 韩国一区二区视频| 欧美日本在线观看| 《视频一区视频二区| 国产一区二区三区四区五区美女| 欧美日韩亚洲综合一区 | 在线亚洲人成电影网站色www| 精品国内片67194| 午夜伊人狠狠久久| 色一情一乱一乱一91av| 中文字幕在线一区二区三区| 国产成人免费视频精品含羞草妖精| 777午夜精品视频在线播放| 一区二区三区四区在线免费观看 | 在线观看日韩国产| 日韩一区中文字幕| 成人性生交大合| 国产三级精品三级| 国产麻豆日韩欧美久久| 精品国内片67194| 极品少妇一区二区| 欧美精品一区二区三区蜜桃| 国内一区二区在线| 26uuu精品一区二区在线观看| 麻豆freexxxx性91精品| 精品少妇一区二区三区免费观看| 日本免费新一区视频| 5月丁香婷婷综合| 日韩国产欧美一区二区三区| 91精品国产综合久久婷婷香蕉| 天天综合色天天综合色h| 欧美乱妇15p| 捆绑调教美女网站视频一区| 久久影院午夜论| 成人免费视频国产在线观看| 国产精品网友自拍| 在线亚洲一区二区| 日韩国产成人精品| 欧美本精品男人aⅴ天堂| 国产一区二区女| 亚洲人成影院在线观看| 欧美日本免费一区二区三区| 麻豆免费精品视频| 国产欧美精品一区二区色综合 | 不卡av电影在线播放| 亚洲欧美一区二区三区国产精品 | 色综合天天综合网天天狠天天| 欧美伊人精品成人久久综合97| 91精品国产综合久久福利软件| 日韩欧美中文一区二区| 亚洲人成精品久久久久| 国产精品麻豆网站| 欧美aaaaaa午夜精品| 日韩黄色一级片| 91精品国产欧美一区二区成人| 日韩欧美高清在线| **网站欧美大片在线观看| 久久99精品久久只有精品| 欧美日韩亚洲综合| 一区二区三区欧美久久| 日韩精品一二三区| 色综合中文综合网| 91小视频在线| 亚洲国产精品久久久久秋霞影院| 92精品国产成人观看免费| 日韩欧美中文字幕一区| 亚洲欧美电影院| 波多野结衣亚洲| 亚洲国产精品国自产拍av| 日韩国产精品久久久久久亚洲| 99精品在线免费| 久久久蜜桃精品| 激情欧美一区二区| 日韩欧美一区二区三区在线| 日韩综合一区二区| 欧美久久高跟鞋激| 亚洲精品国产一区二区精华液 | 成人免费不卡视频| 4438x成人网最大色成网站| 视频一区欧美日韩| 91精品国产高清一区二区三区| 亚洲一区二区成人在线观看| 91蜜桃免费观看视频| 亚洲婷婷综合久久一本伊一区| 国产美女精品在线| 免费在线观看成人| 韩国成人福利片在线播放| 成人av动漫在线| 国产婷婷色一区二区三区在线| 国产成人精品免费| 国产精品18久久久| 欧美亚洲动漫精品| 欧美性淫爽ww久久久久无| 欧美日本一道本在线视频| 国产成人精品免费网站| 国产一区二区三区高清播放| 奇米色一区二区| 日本中文字幕一区二区视频 | 男女男精品视频| 五月婷婷综合激情| 亚洲一区在线观看免费观看电影高清 | 久久99精品久久久| 日本一区二区视频在线| 在线播放日韩导航| 欧美视频自拍偷拍| 99re这里只有精品6| 久久电影网站中文字幕| 亚洲欧美日韩国产综合在线| 26uuu国产在线精品一区二区| 欧美一级理论片| 日韩天堂在线观看| 日本不卡免费在线视频| 在线国产电影不卡| 亚洲午夜久久久久久久久电影网 | 欧美一激情一区二区三区| 亚洲综合激情另类小说区| 国产91富婆露脸刺激对白| 国产嫩草影院久久久久| 国产69精品一区二区亚洲孕妇| 99精品久久免费看蜜臀剧情介绍| 国产精品一区二区三区四区| 蜜桃视频一区二区三区| 午夜视频一区二区三区| 一区二区三区中文免费| 一卡二卡欧美日韩| 国产在线播精品第三| 美女脱光内衣内裤视频久久网站| 午夜欧美在线一二页| 日韩av成人高清| 国产电影精品久久禁18| 一本久道久久综合中文字幕| 欧美久久久久久久久中文字幕| 国产亚洲欧美一区在线观看| 亚洲精品一区二区三区精华液| 国产午夜亚洲精品不卡| 亚洲黄色免费电影| 久久99日本精品| 99在线精品一区二区三区| 在线不卡免费欧美| 中国色在线观看另类| 亚瑟在线精品视频| 福利一区二区在线| 日韩一区二区三区免费观看| 国产精品成人一区二区艾草| 日韩电影免费一区| 99精品国产热久久91蜜凸| 日韩免费高清电影|