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

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

?? sja1000.c

?? CAN例程 源碼 CAN例程 源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
            pTxMsg = (struct TxMsg *)pDev->pCtrl->csData;            retLen = pTxMsg->len;        }    }    return retLen;}/************************************************************************** SJA1000_WriteData - write "len" bytes of data to the channel** This function writes "len" bytes of data to the channel. An error is returned* if the number of bytes to be written exceed 8. The mode of the channel must* WNCAN_CHN_TRANSMIT.** RETURNS:        ERROR if an input parameter is invalid, OK otherwise.*   * ERRNO:          S_can_illegal_channel_no,*                 S_can_illegal_config,*                 S_can_illegal_data_length,*                 S_can_null_input_buffer**/static STATUSSJA1000_WriteData(struct WNCAN_Device *pDev, UCHAR channelNum,                 UCHAR *data, UCHAR len){    STATUS retCode = ERROR; /* pessimistic */    struct TxMsg    *pTxMsg;    UINT            i;    if (channelNum >= SJA1000_MAX_MSG_OBJ)    {        errnoSet(S_can_illegal_channel_no);        return retCode;    }    if(pDev->pCtrl->chnMode[channelNum] != WNCAN_CHN_TRANSMIT)    {        errnoSet(S_can_illegal_config);        return retCode;    }    if(len > 8)    {       errnoSet(S_can_illegal_data_length);       return retCode;    }    if(data == NULL)    {       errnoSet(S_can_null_input_buffer);       return retCode;    }    pTxMsg = (struct TxMsg *)pDev->pCtrl->csData;    pTxMsg->len  = len;    for(i = 0 ; i < pTxMsg->len; i++)        pTxMsg->data[i] = data[i];    retCode = OK;    return retCode;}/************************************************************************** SJA1000_TxMsg - transmits a CAN message** This function performs the same function as the following series* of function calls:** 1. CAN_WriteID(context,channelNum,canID,ext);* 2. CAN_WriteData(context,channelNum,data,len);* 3. CAN_Tx(context,channel);** The mode of the channel must be WNCAN_CHN_TRANSMIT. If the length* specified exceeds 8 byes an error will be returned.** RETURNS:        ERROR if an input parameter is invalid, OK otherwise.*   * ERRNO:          S_can_illegal_channel_no,*                 S_can_illegal_config*                 S_can_illegal_data_length,*                 S_can_null_input_buffer**/static STATUS SJA1000_TxMsg      (	  struct WNCAN_Device *pDev,	  UCHAR channelNum,      ULONG canId,	  BOOL ext,	  UCHAR *data,	  UCHAR len       ){    UCHAR  value;    UINT   i;    UINT   ndx;    struct TxMsg *pTxMsg;    STATUS retCode = ERROR; /* pessimistic */    if (channelNum >= SJA1000_MAX_MSG_OBJ)    {       errnoSet(S_can_illegal_channel_no);       return retCode;    }     	if(pDev->pCtrl->chnMode[channelNum] != WNCAN_CHN_TRANSMIT)               {		errnoSet(S_can_illegal_config);		return retCode;	}    if(len > 8)    {      errnoSet(S_can_illegal_data_length);      return retCode;    }    if(data == NULL)    {     errnoSet(S_can_null_input_buffer);     return retCode;    }    /* check if tx request is set before transmitting */     value = pDev->pBrd->canInByte(pDev, SJA1000_SR);	if((value & SR_TBS) == 0)	{		errnoSet(S_can_busy);		return retCode;	}	/* save a copy */	pTxMsg = (struct TxMsg *)pDev->pCtrl->csData;	pTxMsg->id = canId;	pTxMsg->ext = ext;	pTxMsg->len = len;		/*	* write data if channel mode is WNCAN_CHN_TX	*/	for(i = 0 ; i < len ; i++)		pTxMsg->data[i] = data[i];		/* set up the frame info reg. */	value = (ext)? 0x80 : 0;	if(pTxMsg->rtr)		value |= 0x40;	value |= len;	pDev->pBrd->canOutByte(pDev, SJA1000_SFF, value);	/* write the ID */	ndx = SJA1000_TXID;	if (ext == TRUE)	{		value = canId >> (24 - 3);		pDev->pBrd->canOutByte(pDev, ndx++, value);		value = canId >> (16 - 3);		pDev->pBrd->canOutByte(pDev, ndx++, value);		value = canId >> (8 - 3);		pDev->pBrd->canOutByte(pDev, ndx++, value);		value = canId << 3;		pDev->pBrd->canOutByte(pDev, ndx++, value);	}	else	{		value = canId >> ( 8 - 5);		pDev->pBrd->canOutByte(pDev, ndx++, value);		value = canId << 5;		pDev->pBrd->canOutByte(pDev, ndx++, value);	}	/* write data */	for(i = 0 ; i < len ; i++)		pDev->pBrd->canOutByte(pDev, ndx++, data[i]);	/* Request a transmission */	pDev->pBrd->canOutByte(pDev, SJA1000_CMR, CMR_TR);	retCode = OK;    return retCode;}/************************************************************************** SJA1000_Tx - transmit the CAN message** This function transmits the CAN Id and data currently in the channel of* the specified controller on the device. The mode of the channel must be* WNCAN_CHN_TRANSMIT** RETURNS:        OK, or ERROR** ERRNO:          S_can_illegal_channel_no, S_can_illegal_config**/static STATUS SJA1000_Tx      (	  struct WNCAN_Device *pDev,	  UCHAR channelNum	  ){    UCHAR        value;    UINT         ndx;    UINT         i;    struct TxMsg *pTxMsg;    STATUS retCode = ERROR; /* pessimistic */    if (channelNum >= SJA1000_MAX_MSG_OBJ)    {        errnoSet(S_can_illegal_channel_no);		return retCode;    }    	if(pDev->pCtrl->chnMode[channelNum] != WNCAN_CHN_TRANSMIT)         {        errnoSet(S_can_illegal_config);		return retCode;    }	/* Check the transmit request buffer. If locked, return CAN_BUSY. */	value = pDev->pBrd->canInByte(pDev, SJA1000_SR);	if ((value & SR_TBS) == 0)	{		errnoSet(S_can_busy);		return retCode;	}	pTxMsg = (struct TxMsg *)pDev->pCtrl->csData;	value = (pTxMsg->ext)? 0x80 : 0;	if(pTxMsg->rtr)		value |= 0x40;	value |= pTxMsg->len;	pDev->pBrd->canOutByte(pDev, SJA1000_SFF, value);	ndx = SJA1000_TXID;	/* write the identifier */	if(pTxMsg->ext)	{		pDev->pBrd->canOutByte(pDev, ndx++, pTxMsg->id >> (24 - 3));		pDev->pBrd->canOutByte(pDev, ndx++, pTxMsg->id >> (16 - 3));		pDev->pBrd->canOutByte(pDev, ndx++, pTxMsg->id >> (8 - 3));		pDev->pBrd->canOutByte(pDev, ndx++, pTxMsg->id << 3);	}	else	{		pDev->pBrd->canOutByte(pDev, ndx++, pTxMsg->id >> (8 - 5));		pDev->pBrd->canOutByte(pDev, ndx++, pTxMsg->id << 5);	}	/* write data */	for (i = 0; i < pTxMsg->len ; i++)		pDev->pBrd->canOutByte(pDev, ndx++, pTxMsg->data[i]);	/* Request a transmission */	pDev->pBrd->canOutByte(pDev, SJA1000_CMR, CMR_TR);	retCode = OK;    return retCode;}/************************************************************************** SJA1000_SetGlobalRxFilter - set the global receive filter** This function sets the global HW filter mask for incoming messages on the * device controller. If the controller does not have a global filter this* function is a no-op. If the ext parameter is TRUE, the mask value applies* to extended messages; otherwise, the mask values applies to standard * messages. A value of "0" for a particular bit position of the mask means * don't care (i.e. the incoming message Id could have a value of zero or * one for this bit position); otherwise, a value of 1 means the * corresponding bit of the message Id must match identically.** WARNING: Only one global filter exists on the controller. This is shared* by standard and extended identifiers. These routines cannot be called from* an interript level.** RETURNS: OK ** ERRNO:   N/A**/static STATUS SJA1000_SetGlobalRxFilter(    struct WNCAN_Device *pDev,    long  inputMask,    BOOL  ext){	STATUS      retCode=OK;    UCHAR       value;    UCHAR       regMod;	ULONG       mask;   /* Take the complement of the mask because a 1      means don't care with the SJA1000 */    mask = ~inputMask;    /* Put the controller into reset mode */    regMod = pDev->pBrd->canInByte(pDev, SJA1000_MOD);    pDev->pBrd->canOutByte(pDev, SJA1000_MOD, regMod | MOD_RM);    if (ext == FALSE)    {		value = mask >> 3;        pDev->pBrd->canOutByte(pDev, SJA1000_AMR0, value);        value = (mask << 5) | 0x1f;	        pDev->pBrd->canOutByte(pDev, SJA1000_AMR1, value);         /* write don't care in the rest */        pDev->pBrd->canOutByte(pDev, SJA1000_AMR2, 0xff);        pDev->pBrd->canOutByte(pDev, SJA1000_AMR3, 0xff);		    }    else    {        value = mask  >> (24-3);        pDev->pBrd->canOutByte(pDev, SJA1000_AMR0, value);        value = mask  >> (16-3);        pDev->pBrd->canOutByte(pDev, SJA1000_AMR1, value);        value = mask  >> (8-3);        pDev->pBrd->canOutByte(pDev, SJA1000_AMR2, value);        value = (mask  << 3) | 0x07;	        pDev->pBrd->canOutByte(pDev, SJA1000_AMR3, value);    }    /* put controller back into normal mode */    pDev->pBrd->canOutByte(pDev,  SJA1000_MOD, regMod);    /* Wait until the controller comes out of reset */    while(pDev->pBrd->canInByte(pDev, SJA1000_MOD) != regMod) {};    /* Wait for Bus OK*/        if(SJA1000_GetBusStatus != WNCAN_BUS_OK)		taskDelay(1);    return retCode;}/************************************************************************** SJA1000_GetGlobalRxFilter - Gets the global HW filter mask programmed.** This function return the programmed value in the Global filter resgiter* Based on the value of ext passed to the function, this function reads the * appropriate format of the global mask, and returns the value in the specified,* extended or standard identifier format.* If the controller does not have a global mask, a value of -1 is returned.** RETURNS: long: mask** ERRNO:   N/A**/static long SJA1000_GetGlobalRxFilter(    struct WNCAN_Device *pDev,    BOOL   ext){	ULONG       mask;    	UCHAR       value;    UCHAR       regMod;        /* Put the controller into reset mode */    regMod = pDev->pBrd->canInByte(pDev, SJA1000_MOD);    pDev->pBrd->canOutByte(pDev, SJA1000_MOD, regMod | MOD_RM);        if(ext == FALSE)    {        value = pDev->pBrd->canInByte(pDev, SJA1000_AMR0);        mask  = (UINT)(value) << 3;                value = pDev->pBrd->canInByte(pDev, SJA1000_AMR1) & 0xe0;        mask |= ((UINT)(value) >> 5);                /* Take the complement of the mask because a 1            means don't care with the SJA1000 */        mask = (~mask) & 0x000007ff;            }    else    {                value = pDev->pBrd->canInByte(pDev, SJA1000_AMR0);        mask  = (UINT)(value) << (24-3);                value = pDev->pBrd->canInByte(pDev, SJA1000_AMR1);        mask |= (UINT)(value) << (16-3);                value = pDev->pBrd->canInByte(pDev, SJA1000_AMR2);        mask |= (UINT)value << (8-3);                value = pDev->pBrd->canInByte(pDev, SJA1000_AMR3) & 0xf8;        mask |= ((UINT)(value) >> 3);                /* Take the complement of the mask because a 1            means don't care with the SJA1000 */        mask = (~mask) & 0x1fffffff;            }        /* put controller back into normal mode */    pDev->pBrd->canOutByte(pDev,  SJA1000_MOD, regMod);        /* Wait until the controller comes out of reset */    while(pDev->pBrd->canInByte(pDev, SJA1000_MOD) != regMod) {};        /* Wait for Bus OK or a count of 1000*/        if(SJA1000_GetBusStatus != WNCAN_BUS_OK)        taskDelay(1);        return (long)mask;}/************************************************************************* SJA1000_SetLocalMsgFilter -  set local message object filter** This function sets a local message object filter for incoming messages on a * particular channel. ** If the ext parameter is TRUE, the mask value applies to extended messages;* otherwise, the mask value applies to standard messages. A value of "0" for* a particular bit position of the mask means don't care (i.e. the incoming* message Id could have a value of zero or one for this bit position);* otherwise, a value of 1 means the corresponding bit of the message Id must* match identically. Channel number is provided for controllers that have* more than one local message object filter. ** RETURNS: ERROR** ERRNO: S_can_hwfeature_not_available**/static STATUS SJA1000_SetLocalMsgFilter      (	  struct WNCAN_Device *pDev, 	  UCHAR channel,	  long mask,	  BOOL ext	  ){	errnoSet(S_can_hwfeature_not_available);    return ERROR;}/************************************************************************** SJA1000_GetLocalMsgFilter -  get local message object filter** This function returns the programmed value in the local filter resgiter* Based on the value of ext passed to the function, this function reads the * appropriate format of the local mask, and returns the value in the specified,* extended or standard identifier format.* The channel argument identifies the local filter associated with the particular* channel number** If the controller does not have a global mask, a value of -1 is returned.* This is not a valid CAN ID.** RETURNS: -1 ** ERRNO: S_can_hwfeature_not_available**/static long SJA1000_GetLocalMsgFilter      (	  struct WNCAN_Device *pDev,	  UCHAR channel,	  BOOL ext	  ){	errnoSet(S_can_hwfeature_not_available);    return -1;}/************************************************************************** SJA1000_IsMessageLost - test if the message is lost** This function tests if the current message data in the channel overwrote * the old message data before CAN_ReadData() was called. Valid only for * channels with mode = WNCAN_CHN_RECEIVE.** RETURNS:        0 if FALSE, 1 if TRUE, or -1 if ERROR** ERRNO:          S_can_illegal_channel_no, S_can_illegal_config**/static int SJA1000_IsMessageLost      (	  struct WNCAN_Device *pDev,	  UCHAR channelNum	  ){    int retCode = -1; /* pessimistic */    UCHAR  value;    if (channelNum >= SJA1000_MAX_MSG_OBJ)    {        errnoSet(S_can_illegal_channel_no);    }    else if(pDev->pCtrl->chnMode[channelNum] != WNCAN_CHN_RECEIVE)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产综合久久久久久| 日韩欧美一级二级三级| 91精品免费观看| 欧美激情一区二区三区| 午夜av一区二区| 成+人+亚洲+综合天堂| 日韩欧美美女一区二区三区| 亚洲精品免费播放| 高潮精品一区videoshd| 日韩一级片在线播放| 一区二区三区av电影| 6080yy午夜一二三区久久| 国产精品剧情在线亚洲| 久久99精品国产麻豆婷婷洗澡| 91国产丝袜在线播放| 国产精品色呦呦| 国内外成人在线| 日韩一级免费一区| 视频一区欧美日韩| 欧美日韩你懂得| 夜夜嗨av一区二区三区四季av | 欧美电影免费观看完整版| 一级特黄大欧美久久久| 91视频.com| 国产精品久久久久久户外露出| 国产精品自在在线| 精品国产一区二区三区久久久蜜月| 五月婷婷综合网| 欧美精品日韩精品| 日韩专区在线视频| 日韩一区二区三区电影| 五月天一区二区三区| 欧美精品丝袜久久久中文字幕| 亚洲综合男人的天堂| 91国模大尺度私拍在线视频| 亚洲精品中文字幕在线观看| 日本电影欧美片| 亚洲国产综合人成综合网站| 欧美日韩一级黄| 日本麻豆一区二区三区视频| 欧美高清视频在线高清观看mv色露露十八 | 国产精品一区二区男女羞羞无遮挡 | 国产精品久久久久毛片软件| 成人免费毛片高清视频| 亚洲特黄一级片| 在线观看网站黄不卡| 日韩综合小视频| 久久久久久夜精品精品免费| 国产一区二区三区在线看麻豆| 国产亚洲成av人在线观看导航| 成人动漫精品一区二区| 亚洲嫩草精品久久| 在线成人午夜影院| 国产综合色产在线精品| 一区二区中文视频| 欧美日韩国产片| 激情成人综合网| 亚洲欧洲成人av每日更新| 在线视频欧美区| 一本一道综合狠狠老| 五月综合激情网| 国产午夜亚洲精品午夜鲁丝片| 99天天综合性| 日韩电影在线看| 国产三级欧美三级| 91电影在线观看| 另类小说视频一区二区| 国产精品久久久久一区二区三区| 欧美三电影在线| 国产精品综合视频| 亚洲国产精品一区二区尤物区| 欧美一卡二卡三卡四卡| www.亚洲人| 麻豆国产一区二区| 亚洲人xxxx| 日韩精品在线网站| 色偷偷久久一区二区三区| 另类人妖一区二区av| 亚洲免费观看高清| 26uuu精品一区二区三区四区在线| 97精品久久久午夜一区二区三区 | 蜜臀99久久精品久久久久久软件| 久久久精品中文字幕麻豆发布| 91成人网在线| 懂色av一区二区三区免费看| 五月天久久比比资源色| 亚洲人成在线观看一区二区| 精品国产sm最大网站免费看| 欧美性感一类影片在线播放| 成人在线视频首页| 黄页网站大全一区二区| 亚洲超碰精品一区二区| 亚洲天堂2016| 欧美国产在线观看| 欧美v日韩v国产v| 欧美在线三级电影| 91在线免费播放| 国产高清一区日本| 激情综合亚洲精品| 免费一区二区视频| 天堂va蜜桃一区二区三区 | 欧美一级欧美三级在线观看| 91传媒视频在线播放| 99久久婷婷国产综合精品| 国产精品18久久久久久久久| 美女视频黄 久久| 日韩vs国产vs欧美| 天天色综合天天| 亚洲高清免费观看| 亚洲自拍偷拍欧美| 亚洲韩国精品一区| 五月婷婷色综合| 日本欧美一区二区三区乱码| 成人app在线| 国产99精品国产| 国产suv精品一区二区883| 国产永久精品大片wwwapp| 国产乱码精品1区2区3区| 国产一区二区精品在线观看| 国产一区欧美一区| 国产不卡视频在线播放| 成人激情免费电影网址| 91在线观看美女| 在线视频一区二区免费| 欧美年轻男男videosbes| 91精品婷婷国产综合久久性色| 欧美区视频在线观看| 91精品国产福利| 精品国产髙清在线看国产毛片| 精品福利av导航| 国产精品系列在线| 亚洲同性gay激情无套| 亚洲国产精品麻豆| 蜜臀a∨国产成人精品| 国产精品一级二级三级| 成人福利在线看| 欧美天堂一区二区三区| 91精品国产一区二区人妖| 久久免费电影网| 最好看的中文字幕久久| 偷拍一区二区三区四区| 精品一区二区在线视频| 波波电影院一区二区三区| 欧美午夜免费电影| 精品福利一二区| 亚洲精品中文在线观看| 免费人成精品欧美精品| 国产**成人网毛片九色 | 欧美高清一级片在线| 欧美精品一区二区三区在线播放| 中文字幕电影一区| 一区二区三区欧美| 精品一区二区影视| 91丨porny丨国产| 这里是久久伊人| 国产精品国模大尺度视频| 日本午夜一本久久久综合| 成人精品鲁一区一区二区| 91精品欧美久久久久久动漫| 中文乱码免费一区二区| 五月激情综合色| 不卡视频一二三| 日韩亚洲欧美一区| 亚洲欧美日韩中文播放 | 国产成人一区二区精品非洲| 欧美性色黄大片| 国产欧美日韩另类视频免费观看| 亚洲国产日韩a在线播放| 国产成人免费视频网站| 777久久久精品| 亚洲欧美激情视频在线观看一区二区三区| 婷婷亚洲久悠悠色悠在线播放| 国产精品夜夜嗨| 亚洲图片欧美视频| 成人午夜av在线| 日韩精品一区二区三区在线播放| 亚洲美女少妇撒尿| 成人丝袜高跟foot| 久久久亚洲综合| 免费看黄色91| 欧美日韩精品一区二区在线播放| 国产精品久久福利| 国产福利不卡视频| 日韩欧美中文字幕精品| 亚洲妇熟xx妇色黄| 欧美主播一区二区三区美女| 国产精品萝li| 丰满亚洲少妇av| 久久久不卡影院| 久久爱另类一区二区小说| 9191精品国产综合久久久久久| 一区二区三区中文字幕电影| av一本久道久久综合久久鬼色| 久久精品视频在线免费观看| 国产一区 二区| 国产亚洲精久久久久久| 国产一二三精品| 日本一区二区三区国色天香| 国产大片一区二区| 国产精品视频yy9299一区|