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

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

?? jadrclai.c

?? 在Freescale16位單片機MC9s12dp256上移植了J1939源碼和操作系統(ucOSII)。
?? C
字號:
/******************************************************************************
*
* File Name:      JAdrClai.c
*
* Description:    Address Claiming functions
*                 
*
* Comments:       
*                 
*
* Version  Date           Author           Comments
* -------  ------------   --------------   ------------------------------
*   0.9  18.12.98         Ft               Create
*   1.0  24.04.99         Ft               C167CR and Tasking compiler
*   1.1  31.05.2001       Ma               merge Stack with CANopen driver
*   2.0  18.06.2001       Ma               Version 2.0 new buffer concept and
*                                          documented for doxygen  
*   2.1  15.08.2001       Ma               added var to control the post online
*                                          state
*   2.2  03.06.2003       Ma               changed ADC handling
*
* Copyright (c) 1998 - 2003 Vector Informatik GmbH
*****************************************************************************/
#include "Includes.h"

#include "Portab.h"
#include "Types.h"
#include "J1939.h"
#include "J1939CFG.h"
#include "J1939PGN.h"
#include "J1939TRA.h"
#include "J1939EXT.h"
#include "JCancntrl.h"
#include "Jbuffer.h"

/*!
  \brief Compares the 64 bit name of a device

   Compare name with own device name and check priority.

  \param   - 
  \retval  >0 if name has higher priority than own name
  \retval  =0 if name has lower priority than own name
  \retval  <0 if both names are equal
*/
signed char CompareJ1939Name(struct VJ1939DeviceName*name)
{
  signed char i;
  
  for (i=7; i>=0; i--)
  {
    if ( *(((unsigned char*)name)+i) < *(((unsigned char*)&gDeviceName)+i) )
      return 1;
    else if ( *(((unsigned char*)name)+i) > *(((unsigned char*)&gDeviceName)+i) )
      return 0;
  }
  /* Both names are equal */
  return -1;
}

/*!
  \brief Sends the Address Claimed message

  \param   -
  \retval  -
*/
void SendAddressClaimed(void)
{
  unsigned char i;
  if (gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mPGState == PG_TX_REQ) 
  {
    /* If buffer is not free, throw away */
  }
  else
  {
    gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mPGState = PG_TX_REQ;  /* Use buffer */
    gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mPDUF = 238;  /* PDU Format */
    gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mPDUS = J1939GLOBALADDRESS; /* PDU Specific */
    gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mSource = gDeviceAddress;
    gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mPriority = 6; /* 3Bit Priority */
    gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mTransType = TT_ASYNC; /* TT_CYCLIC, TT_ASYNC */
    gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mTransRate = 0;  /* Trans. rate in ms, only for cyclic */
    gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mDataLength = 8; /* number of databytes */
#ifdef _TSK_C166_
    for (i=0; i<8 ;i++)  /* Copy data (name) */
#else
    for (i=0; i<sizeof(struct VJ1939PGN_DATA_EE00) ;i++)  /* Copy data (name) */
#endif /* _TSK_C166_ */
    {
      (((unsigned char*)(gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mData))[i]) = (((unsigned char*)&gDeviceName)[i]);
    } /* for */
  }
}

/*!
  \brief Sends the Cannot Claim Address message

  \param   -
  \retval  -
*/
void SendCannotClaimAddress(void)
{
  unsigned char i;
  
  /* Use buffer */
  gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mPGState = PG_TX_REQ;  /* Use buffer */
  gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mPDUF = 238;  /* PDU Format */
  gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mPDUS = J1939GLOBALADDRESS; /* PDU Specific */
  gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mSource = J1939NULLADDRESS;
  gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mPriority = 6; /* 3Bit Priority */
  gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mTransType = TT_ASYNC; /* TT_CYCLIC, TT_ASYNC */
  gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mTransRate = 0;  /* Trans. rate in ms, only for cyclic */
  gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mDataLength = 8; /* number of databytes */

  for (i=0; i<8 ;i++)  /* Copy data (name) */
  {
    ((unsigned char*)(gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mData))[i] = ((unsigned char*)&gDeviceName)[i];
  } /* for */
}

/*!
  \brief Checks the reception of an Address Claimed message

  Function checks the name and sends the corresponding Address Claim
  message
  
  \param   -
  \retval  -
*/

void CheckRxAddressClaimed(void)
{
  if (gAddressClaimed)
  {
    if (gRxPGTable[RX_PGN_ADDRESS_CLAIMED].mSource == J1939GLOBALADDRESS)
    {
      SendAddressClaimed();
    }
    else if (gRxPGTable[RX_PGN_ADDRESS_CLAIMED].mSource == gDeviceAddress)
    {
      /* Get priority information */
      if (CompareJ1939Name(gRxPGTable[RX_PGN_ADDRESS_CLAIMED].mData) > 0)
      {
        /* Own name has lower priority */
        SendCannotClaimAddress();
        gAddressClaimed = 0; /* Reset address claimed */
      }
      else
      {
        /* Own name has higher priority */
        SendAddressClaimed();
      }
    }
  }
}

/*!
  \brief The function executes the Address Claiming
  
  After sending the 1. AddressClaimed message we wait 250 ms for other
  AC messages. If there was no response with the same adress, we set our
  address valid. Then we have successful claimed the address

  \param   -
  \retval  The current Device Address
*/
BOOLEAN J1939AddressClaiming(unsigned char *address)
{
  static unsigned char step = 0;
  static unsigned char nFlag = 0;
  unsigned char i;
  
  if(step == 0)
  {
    loop1:

    gTxPGTable[RX_PGN_ADDRESS_CLAIMED].mSource = J1939AppGetAddress(); /* Get default address */
    gTxPGTable[RX_PGN_ADDRESS_CLAIMED].mPDUS = J1939GLOBALADDRESS; /* Global receiver */
    for (i=0; i<gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mDataLength; i++) /* Copy device name to data */
    {
      ((unsigned char*)gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mData)[i] = ((unsigned char*)&gDeviceName)[i];
    }
  
    gCB_SendSysPG(&gTxPGTable[TX_PGN_ADDRESS_CLAIMED]); /* Transmit PGN */
    step++;
  } /* if state == 0 */

  if ((step==1))
  {
    if(gCB_CheckSysPGSend()) /* Wait until transmitted */
    {
      step++;
    } /* while */
    else
    {
      if(gCan_GetCanStatus()== CAN_STS_BUS_OFF)
      {
        gCANBusOff = 1;
        return(FALSE);
      } /* if */
    } /* else */
  } /* if state == 1*/

  if( step == 2)
  {
    gAddressClaimTimer = Tim_GetCurrentTime(); /* Load/start timer 250ms */
    nFlag = 0;
    step++;
  } /* if step == 2 */

  if(step == 3)
  {
    gCB_DequeueElm();
    if ((gRxPGTable[RX_PGN_ADDRESS_CLAIMED].mPGState == PG_RX_FULL) && (nFlag == 0)) 
    {
      if (gRxPGTable[RX_PGN_ADDRESS_CLAIMED].mSource == J1939AppGetAddress())
      {
        if (CompareJ1939Name((struct VJ1939DeviceName*)gRxPGTable[RX_PGN_ADDRESS_CLAIMED].mData)>0) /* check priority */
        {
          /* Other name has higher priority than own name. */
          gRxPGTable[RX_PGN_ADDRESS_CLAIMED].mPGState = PG_RX_FREE; /* Free buffer */
          gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mSource = J1939NULLADDRESS;
          /*gTxPGTable[TX_PGN_ADDRESS_CLAIMED].mPDUS = J1939GLOBALADDRESS;*/
          gCB_SendSysPG(&gTxPGTable[TX_PGN_ADDRESS_CLAIMED]); /* Transmit PGN */
          gAddressClaimed = 0; /* cannot claim address */
          *address = J1939NULLADDRESS; /* return new address */
          nFlag = 1;
          return FALSE;
        }
        else
        {
          /* Other name has lower priority than own name */
          gRxPGTable[RX_PGN_ADDRESS_CLAIMED].mPGState = PG_RX_FREE; /* Free buffer */
          step=0;
          goto loop1; /* Restart address claiming */
        }
      }
      gRxPGTable[RX_PGN_ADDRESS_CLAIMED].mPGState = PG_RX_FREE; /* Free buffer */
    } /* if */

    if(Tim_CheckTimeOut(gAddressClaimTimer,Tim_GetCurrentTime(),ADDRESSCLAIMTIMEOUT)) /* timer still running */
    {
      if(nFlag==0)
      {
        step++;
      }
      else
      {
        step = 0;
      }
    }
  } /* if step == 3 */

  if(step == 4)
  {
  /* Now the device address is valid */
    *address = J1939AppGetAddress();
    gAddressClaimed = 1; /* address claimed */
    gOnlineMarker = 1;  /* sign the first online state */
    step = 0;
    return TRUE; /* return the new address */
  } /* if step == 4 */
  return(FALSE);
}

/*!
  \file
  \brief Basic routines for the AddressClaim Handling

  \date Last modification 04/07/2001
  \author (c) 2001 by Vector Informatik GmbH. All rights reserved

  This module uses the timer and buffer module independendly against the stack
  module. It dequeues the system parameter group queue!
*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久免费观看| 99精品黄色片免费大全| 91精品国产全国免费观看| 亚洲色图一区二区| 国产精品白丝jk黑袜喷水| 久久综合色播五月| 成人精品电影在线观看| 国产精品嫩草99a| 在线观看亚洲成人| 日本中文字幕不卡| 久久这里只有精品视频网| 肉肉av福利一精品导航| 欧美精品在线一区二区| 不卡av在线网| 久热成人在线视频| 亚洲天堂成人网| 欧美一区二区在线不卡| 九九**精品视频免费播放| 精品免费国产一区二区三区四区| 国产美女在线观看一区| 亚洲一区在线免费观看| 欧美一区二区三区小说| 成人夜色视频网站在线观看| ㊣最新国产の精品bt伙计久久| 欧美理论片在线| www.亚洲精品| 国产成人午夜电影网| 精品亚洲国产成人av制服丝袜| 亚洲人吸女人奶水| 国产欧美日韩在线看| 日韩欧美国产午夜精品| 99久久er热在这里只有精品15 | 欧美高清在线一区| 欧美情侣在线播放| 欧美日韩国产一二三| 91福利资源站| 欧美伊人精品成人久久综合97| 黄色日韩三级电影| 午夜精品久久久久久久| 亚洲精品久久久蜜桃| 亚洲视频免费看| 午夜精品一区二区三区三上悠亚| 亚洲综合免费观看高清完整版在线| 国产精品国产三级国产a | 日韩电影在线看| 久久精品国产精品亚洲精品| 免费观看日韩av| 国产精品资源在线观看| 成人黄色在线看| 欧美性极品少妇| 欧美电影免费观看高清完整版在| 日韩免费观看2025年上映的电影| 精品国产自在久精品国产| 久久久午夜精品理论片中文字幕| 国产精品无码永久免费888| 亚洲国产综合视频在线观看| 日av在线不卡| 欧美日韩一区二区三区四区五区| 日韩写真欧美这视频| 中文字幕一区二区不卡| 蜜桃视频第一区免费观看| 国产真实乱偷精品视频免| 色999日韩国产欧美一区二区| 在线观看日韩电影| 精品国产一区二区三区不卡| 国产精品视频yy9299一区| 青青草国产成人av片免费| 91黄色小视频| 亚洲视频小说图片| 不卡的av中国片| 久久综合一区二区| 五月天精品一区二区三区| 97精品电影院| 亚洲同性同志一二三专区| 国产成人在线免费观看| 久久久亚洲精华液精华液精华液| 日韩精品每日更新| 日韩一区二区三区电影在线观看| 一区二区三区波多野结衣在线观看| 国产精品99久久久久久久女警| 欧美一二三四区在线| 视频一区二区欧美| 91精品国产综合久久香蕉的特点 | 懂色av一区二区三区免费观看 | 91国模大尺度私拍在线视频| 亚洲欧洲综合另类在线| 国产91清纯白嫩初高中在线观看| 2023国产精品| 91在线观看视频| 国产精品久久久久三级| 91蜜桃免费观看视频| 三级影片在线观看欧美日韩一区二区| 精品视频在线免费看| 日本va欧美va精品发布| 欧美不卡在线视频| 波多野洁衣一区| 亚洲电影中文字幕在线观看| 欧美电视剧在线观看完整版| 成人中文字幕在线| 国产精品传媒入口麻豆| 欧美视频一区二区| 国产自产视频一区二区三区| 亚洲欧洲色图综合| 欧美一区二区视频免费观看| 欧美猛男超大videosgay| 国产精品丝袜黑色高跟| 国产麻豆9l精品三级站| 精品一区二区三区影院在线午夜| 亚洲一卡二卡三卡四卡无卡久久 | 久久精品男人的天堂| 成人激情免费视频| 日韩高清在线电影| 一区二区在线电影| 久久久久久一二三区| 日韩视频一区二区在线观看| 欧美综合色免费| 成年人午夜久久久| 高清视频一区二区| 麻豆国产精品一区二区三区| 日韩不卡在线观看日韩不卡视频| 亚洲美女淫视频| 亚洲免费在线观看视频| 最新欧美精品一区二区三区| 国产亚洲精品aa| **性色生活片久久毛片| 亚洲精品日韩综合观看成人91| 玉足女爽爽91| 亚洲高清不卡在线观看| 一区二区成人在线观看| 国产精品一区在线观看你懂的| 久久九九99视频| 国产白丝精品91爽爽久久| 91麻豆免费看| 国产精品久久久久婷婷二区次| 久久国产精品一区二区| 粗大黑人巨茎大战欧美成人| 在线播放中文一区| 国产精品国产自产拍在线| 亚洲成av人影院| 成人亚洲一区二区一| 精品少妇一区二区| 国产精品国产三级国产专播品爱网| 亚洲欧美日韩精品久久久久| 免费在线欧美视频| 在线免费观看日韩欧美| 亚洲青青青在线视频| 成人av午夜电影| 久久免费看少妇高潮| 天堂成人国产精品一区| 色哟哟欧美精品| 一色桃子久久精品亚洲| 国模套图日韩精品一区二区| 91在线免费看| 中文字幕一区二区不卡| 久久99热这里只有精品| 欧美无人高清视频在线观看| 欧美激情综合在线| 国产成人av一区二区| 欧美成人伊人久久综合网| 日日夜夜精品视频天天综合网| 色999日韩国产欧美一区二区| 中文字幕乱码一区二区免费| 99久久亚洲一区二区三区青草| 国产精品乱码妇女bbbb| 欧美裸体bbwbbwbbw| 久久国产精品无码网站| 玉足女爽爽91| 一区二区三区在线高清| 国产三级欧美三级| 久久美女艺术照精彩视频福利播放| 亚洲国产精品一区二区www| 国产成人在线免费观看| 成人欧美一区二区三区视频网页| www.性欧美| 久久精品国产精品亚洲红杏| 久久久青草青青国产亚洲免观| 99精品久久99久久久久| 久久精品国产免费| 一区二区三区精品久久久| 久久九九99视频| 欧美一区二区三区啪啪| 色嗨嗨av一区二区三区| 成人精品视频一区二区三区尤物| 午夜欧美一区二区三区在线播放| 久久精品av麻豆的观看方式| 欧美一级欧美一级在线播放| 精品国产乱码91久久久久久网站| 国产福利一区二区三区在线视频| 亚洲综合男人的天堂| 欧美久久久久免费| 91麻豆国产福利在线观看| 欧美日韩一级黄| 精品国产免费一区二区三区香蕉| 久久视频一区二区| 最新国产成人在线观看| 日本欧美一区二区在线观看| 成人动漫视频在线| 日韩欧美一级片| 亚洲综合在线五月| 成人激情文学综合网|