| | |
| | | pKBus->KBusSendPacket = KBusSendPacket; |
| | | pKBus->nCurPollId = 1; |
| | | |
| | | for (int i=0;i<MAX_CLIENT;i++) |
| | | { |
| | | memset(&pKBus->KBusChnStats[i],0,sizeof(stChnStat)); |
| | | } |
| | | for (int i=0;i<MAX_CLIENT;i++) |
| | | { |
| | | KBusMakeDefaultClildInfo(pKBus, i); |
| | | } |
| | | /* |
| | | stDeviceInfo * pDeviceInfo = &pKBus->DeviceInfos[1]; |
| | | |
| | | pDeviceInfo->DeviceType = 0; |
| | | pDeviceInfo->DeviceVer = 0; |
| | | pDeviceInfo->InBitCount = 16; |
| | | pDeviceInfo->OutBitCount = 16; |
| | | pDeviceInfo->AIWCount = 0; |
| | | pDeviceInfo->AQWCount = 0; |
| | | pDeviceInfo->DWStartAddr = 0; |
| | | pDeviceInfo->OutDWCount = 0; |
| | | */ |
| | | pKBus->KBusPort = (stPortDef){.nPortHardType = 4, .nPortUseType = 3, .bEnable = 1, .bRunning =1, .StationId = 0, .bMaster = 1, .nMaxStations = nChildCount, |
| | | .pInstance=pKBus , .ReqCommFunc = (CommFuncDef)KBusReqService}; |
| | | |
| | | KMRegisterPort(1,&pKBus->KBusPort); |
| | | return iRet; |
| | | }; |
| | | |
| | |
| | | pKBus->KBusEvCBFunc = NULL; |
| | | pKBus->KBusSvCBFunc=NULL; |
| | | pKBus->KBusSendPacket = KBusSendPacket; |
| | | |
| | | /* |
| | | for (int i=0;i<MAX_CLIENT;i++) |
| | | { |
| | | memset(&pKBus->KBusChnStats[i],0,sizeof(stChnStat)); |
| | | } |
| | | } |
| | | */ |
| | | |
| | | pKBus->KBusPort = (stPortDef){.nPortHardType = 4, .nPortUseType = 3, .bEnable = 1, .bRunning =1, .StationId = nStationId, .bMaster = 0, .pInstance = pKBus}; |
| | | KMRegisterPort(1,&pKBus->KBusPort); |
| | | |
| | | return iRet; |
| | | } |
| | | |
| | |
| | | return 0; |
| | | } |
| | | |
| | | //unsigned char tempdata [8] = {11,12,13,14,25,26,27,28}; |
| | | int KBusReqService (stKBusDef * pKBus, int ReqId, int nParam1, int nParam2, void **pData, unsigned short * len1) |
| | | { |
| | | |
| | | switch (ReqId) { |
| | | case ReqStartDiag: |
| | | break; |
| | | case ReqStopDiag: |
| | | break; |
| | | case ReqPortChnInfo: |
| | | *pData = &pKBus->KBusChnStats[nParam1]; |
| | | *len1 = sizeof(stChnStat); |
| | | break; |
| | | case ReqPortChildInfo: |
| | | *pData = &pKBus->DeviceInfos[nParam1]; |
| | | *len1 = sizeof(stDeviceInfo); |
| | | |
| | | // *pData = tempdata; |
| | | // *len1 = sizeof(tempdata); |
| | | break; |
| | | case ReqBlinkLED: |
| | | if (pKBus->bReq == 1) return -1; |
| | | if (nParam1 != 0xff && nParam1> pKBus->nChildCount) return -2; |
| | | if (pKBus->bReq != 1 ) { |
| | | pKBus->bReq=1; |
| | | pKBus->nReqSvrId = ReqId; |
| | | pKBus->nReqChildId = nParam1; |
| | | pKBus->nReqParam = nParam2; |
| | | pKBus->nReqReCount = 0; |
| | | } |
| | | break; |
| | | |
| | | case ReqTransBlink: |
| | | if (pKBus->bReq == 1) return -1; |
| | | if (nParam1 != 0xff && nParam1> pKBus->nChildCount) return -2; |
| | | if (pKBus->bReq != 1 ) { |
| | | pKBus->bReq=1; |
| | | pKBus->nReqSvrId = ReqId; |
| | | pKBus->nReqChildId = nParam1; |
| | | pKBus->nReqParam = nParam2; |
| | | pKBus->nReqReCount = 0; |
| | | } |
| | | break; |
| | | |
| | | case ReqTransCfg: |
| | | break; |
| | | case ReqUpdateFirm: |
| | | if (pKBus->bReq == 1) return -1; |
| | | if (nParam1> pKBus->nChildCount) return -2; |
| | | if (pKBus->bReq != 1 ) { |
| | | pKBus->bReq=1; |
| | | pKBus->nReqSvrId = ReqId; |
| | | pKBus->nReqChildId = nParam1; |
| | | pKBus->nReqParam = nParam2; |
| | | pKBus->nReqReCount = 0; |
| | | if (*len1>0) { |
| | | memcpy(pKBus->pReqDatas,*pData,*len1); |
| | | pKBus->nReqDataLen = *len1; |
| | | pKBus->nReqDataOff = 0; |
| | | } |
| | | } |
| | | |
| | | break; |
| | | |
| | | case ReqTransFirmware: |
| | | break; |
| | | default: |
| | | if (pKBus->bReq == 1) return -1; |
| | | if (nParam1 != 0xff && nParam1> pKBus->nChildCount) return -2; |
| | | if (pKBus->bReq != 1 ) { |
| | | pKBus->bReq=1; |
| | | pKBus->nReqSvrId = ReqId; |
| | | pKBus->nReqChildId = nParam1; |
| | | pKBus->nReqParam = nParam2; |
| | | pKBus->nReqReCount = 0; |
| | | if (*len1>0) { |
| | | memcpy(pKBus->pReqDatas,*pData,*len1); |
| | | pKBus->nReqDataLen = *len1; |
| | | pKBus->nReqDataOff = 0; |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | int KBusStart(stKBusDef * pKBus) |
| | | { |
| | | int iRet = 0; |
| | |
| | | int iRet = 0; |
| | | if (pKBus->bMaster) |
| | | { |
| | | if (pKBus->nChildCount>0) KBusMasterFunc(&KBus1); |
| | | } |
| | | if (pKBus->bSlave) |
| | | { |
| | | KBusSlaveFunc(&KBus1); |
| | | } |
| | | if (pKBus->bRepeater) |
| | | { |
| | | } |
| | | |
| | | if (pKBus->RunStat) {pKBus->RunStat--;} |
| | | if (pKBus->ErrStat) {pKBus->ErrStat--;} |
| | | return iRet; |
| | | } |
| | | |
| | |
| | | return 0; |
| | | } |
| | | |
| | | int KBusUpdateChildInfo(stKBusDef * pKBus, int nCild, stDeviceInfo * pInfoBlock) |
| | | int KBusUpdateChildInfo(stKBusDef * pKBus, int nChild, stDeviceInfo * pInfoBlock) |
| | | { |
| | | stDeviceInfo * pDeviceInfo = &pKBus->DeviceInfos[nCild]; |
| | | |
| | | pDeviceInfo->DeviceType = pInfoBlock->DeviceType; |
| | | pDeviceInfo->DeviceVer = pInfoBlock->DeviceVer; |
| | | pDeviceInfo->InBitCount = pInfoBlock->InBitCount; |
| | | pDeviceInfo->OutBitCount = pInfoBlock->OutBitCount ; |
| | | pDeviceInfo->AIWCount = pInfoBlock->AIWCount; |
| | | pDeviceInfo->AQWCount = pInfoBlock->AQWCount; |
| | | pDeviceInfo->DWStartAddr = pInfoBlock->DWStartAddr; |
| | | pDeviceInfo->OutDWCount = pInfoBlock->OutDWCount; |
| | | |
| | | pKBus->DeviceInfos[nChild] = *pInfoBlock; |
| | | return 0; |
| | | } |
| | | |
| | | int KBusMakeDefaultClildInfo(stKBusDef * pKBus, int nCild) |
| | | int KBusMakeDefaultClildInfo(stKBusDef * pKBus, int nChild) |
| | | { |
| | | unsigned DefaultInBitCount = 8; |
| | | unsigned DefaultOutBitCount = 8; |
| | | stDeviceInfo * pDeviceInfo = &pKBus->DeviceInfos[nCild]; |
| | | // unsigned DefaultInBitCount = 8; |
| | | // unsigned DefaultOutBitCount = 8; |
| | | |
| | | // stDeviceInfo * pDeviceInfo = &pKBus->DeviceInfos[nChild]; |
| | | pKBus->DeviceInfos[nChild] = (stDeviceInfo){ |
| | | .DeviceType=0, |
| | | .DeviceVer=0, |
| | | .InBitCount=8, |
| | | .OutBitCount=8, |
| | | .AIWCount=0, |
| | | .AQWCount=0, |
| | | .DWStartAddr=0, |
| | | .OutDWCount=0 |
| | | }; |
| | | |
| | | pDeviceInfo->DeviceType = 0; |
| | | pDeviceInfo->DeviceVer = 0; |
| | | pDeviceInfo->InBitCount = DefaultInBitCount; |
| | | pDeviceInfo->OutBitCount = DefaultOutBitCount; |
| | | pDeviceInfo->AIWCount = 0; |
| | | pDeviceInfo->AQWCount = 0; |
| | | pDeviceInfo->DWStartAddr = 0; |
| | | pDeviceInfo->OutDWCount = 0; |
| | | return 0; |
| | | } |
| | | |
| | |
| | | int KBusSearchChildProc(stKBusDef * pKBus) |
| | | { |
| | | int iRet = 0; |
| | | uint32_t tick1=HAL_GetTick(); |
| | | uint32_t thisuS=GetuS(); |
| | | |
| | | pKBus->MyStat = KBusStatReady; |
| | | return iRet; |
| | | if (!pKBus->bMasterSent) { |
| | | // Sent Query Packet for CurPollId; |
| | | //pKBus->nCurPollId; |
| | | pKBus->bMasterSent=1; |
| | | pKBus->SendTimeuS = thisuS; |
| | | } |
| | | uint32_t tick1=GetTick(); |
| | | // uint32_t thisuS=GetuS(); |
| | | int nThisPollId = pKBus->nCurPollId; |
| | | if (pKBus->bMasterSent) { |
| | | if (pKBus->bMasterRecved) { |
| | | |
| | | } |
| | | |
| | | if (!pKBus->bMasterRecved && thisuS- pKBus->SendTimeuS > 1000) |
| | | { |
| | | // timeOut, |
| | | pKBus->bMasterSent=0; // no wait any more; |
| | | if (pKBus->RetryCount <3) { |
| | | // resent query packet for curPollId; |
| | | pKBus->bMasterSent=1; |
| | | pKBus->SendTimeuS = thisuS; |
| | | } |
| | | if (pKBus->RetryCount >3 ) { |
| | | // Set Cur Child As Default |
| | | KBusMakeDefaultClildInfo(pKBus,pKBus->nCurPollId); |
| | | KBusAddChildAddrByInfo(pKBus,pKBus->nCurPollId,&pKBus->DeviceInfos[pKBus->nCurPollId]); |
| | | |
| | | // Next Child; |
| | | pKBus->nCurPollId++; |
| | | if (pKBus->nCurPollId > pKBus->nChildCount) |
| | | pKBus->bMasterSent=0; |
| | | pKBus->RetryCount=0; |
| | | nThisPollId++; |
| | | pKBus->nCurPollId = nThisPollId; |
| | | if (nThisPollId > pKBus->nChildCount) |
| | | { |
| | | // all query done, next stage |
| | | pKBus->nCurPollId = 1; |
| | | pKBus->MyStat = KBusStatReady; |
| | | // CallBack |
| | | if (pKBus->KBusEvCBFunc) pKBus->KBusEvCBFunc(pKBus, KBusEvStateChange,0,0); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | if (!pKBus->bMasterRecved && tick1- pKBus->SendTimeTick > KBUS_WAIT_TIME_OUT1) |
| | | { |
| | | /* |
| | | // timeOut, |
| | | if (pKBus->RetryCount <3) { |
| | | pKBus->RetryCount++; |
| | | // resent query packet for curPollId; |
| | | pKBus->bMasterSent=0; // no wait any more; |
| | | // pKBus->bMasterSent=1; |
| | | // pKBus->SendTimeTick = tick1; |
| | | } |
| | | if (pKBus->RetryCount >3 ) |
| | | // */ |
| | | { |
| | | // Set Cur Child As Default |
| | | KBusMakeDefaultClildInfo(pKBus,nThisPollId); |
| | | KBusAddChildAddrByInfo(pKBus,nThisPollId,&pKBus->DeviceInfos[nThisPollId]); |
| | | |
| | | // Next Child; |
| | | pKBus->RetryCount=0; |
| | | nThisPollId++; |
| | | pKBus->nCurPollId = nThisPollId; |
| | | if (nThisPollId > pKBus->nChildCount) |
| | | { |
| | | // all query done, next stage |
| | | pKBus->nCurPollId = 1; |
| | | pKBus->MyStat = KBusStatReady; |
| | | // CallBack |
| | | if (pKBus->KBusEvCBFunc) pKBus->KBusEvCBFunc(pKBus, KBusEvStateChange,0,0); |
| | | } |
| | | pKBus->bMasterSent=0; |
| | | } |
| | | |
| | | } |
| | | }else { // ! pKBus->bMasterSent 还没有发送 |
| | | // Sent Query Packet for CurPollId; |
| | | //pKBus->nCurPollId; |
| | | |
| | | unStatus ThisStatus; |
| | | ThisStatus.nSeq = pKBus->nSeq; |
| | | ThisStatus.nErr1 = (pKBus->KBusChnStats[nThisPollId].MStat==0); |
| | | |
| | | int len1=KBusMakePacket((pKBPacket)pKBus->PacketBuf2,0,nThisPollId,cmdQuery,ThisStatus.nStatus,0,NULL); |
| | | // LL_USART_SetBaudRate(USART2,48000000,LL_USART_OVERSAMPLING_8,DefaultUart2Baud); |
| | | pKBus->KBusSendPacket(pKBus->PacketBuf2, len1); |
| | | pKBus->KBusChnStats[nThisPollId].SendPackets++; |
| | | pKBus->KBusChnStats[nThisPollId].SendTimeInterval=pKBus->SendTimeTick-pKBus->KBusChnStats[nThisPollId].LastSentTimeTick; |
| | | pKBus->KBusChnStats[nThisPollId].LastSentTimeTick=pKBus->SendTimeTick; |
| | | // PacketLength = len1; |
| | | pKBus->SendTime=tick1; |
| | | |
| | | pKBus->bMasterRecved=0; |
| | | pKBus->bMasterRecvOK=0; |
| | | |
| | | pKBus->bMasterSent=1; |
| | | pKBus->SendTimeTick = tick1; |
| | | } |
| | | |
| | | |
| | | // pKBus->MyStat = KBusStatReady; |
| | | |
| | | return iRet; |
| | | } |
| | | |
| | | int KBusPacketSendDone(stKBusDef * pKBus) |
| | | { |
| | | switch (pKBus->MyStat){ |
| | | case KBusStatUnInited: |
| | | break; |
| | | case KBusStatInited: |
| | | break; |
| | | case KBusStatConfig: |
| | | break; |
| | | case KBusStatReady: |
| | | break; |
| | | case KBusStatRunning: |
| | | switch(pKBus->nRunStep) { |
| | | case KBusRunStepBroadCastCfg: |
| | | pKBus->nRunStep = KBusRunStepTimeSync; |
| | | break; |
| | | case KBusRunStepTimeSync: |
| | | pKBus->nRunStep = KBusRunStepMultiDataPoll; |
| | | break; |
| | | case KBusRunStepMultiDataPoll: |
| | | pKBus->nRunStep = KBusRunStepUniDataPoll; |
| | | break; |
| | | case KBusRunStepUniDataPoll: |
| | | |
| | | break; |
| | | case KBusRunStepUniDataTranster: |
| | | |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | // KBusDataPoll(pKBus); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | |
| | | |
| | | int GoStep(stKBusDef * pKBus, enKBusRunStep NextStep) |
| | | { |
| | | pKBus->nRunStep = NextStep; |
| | | pKBus->TimeOutCount=0; |
| | | return 0; |
| | | } |
| | | |
| | | int KBusMasterFunc(stKBusDef * pKBus) |
| | | { |
| | | int len1; |
| | | uint32_t tick1=GetTick(); |
| | | ushort DataLen = 0; |
| | | switch (pKBus->MyStat){ |
| | | case KBusStatUnInited: |
| | | KBusLoadSavedConfig(pKBus); |
| | | pKBus->MyStat = KBusStatInited; |
| | | pKBus->TimeOutCount=0; |
| | | break; |
| | | case KBusStatInited: |
| | | pKBus->TimeOutCount++; |
| | | if (pKBus->TimeOutCount>30){ |
| | | pKBus->MyStat = KBusStatConfig; |
| | | pKBus->TimeOutCount = 0; |
| | | } |
| | | break; |
| | | case KBusStatConfig: |
| | | KBusSearchChildProc(pKBus); |
| | | break; |
| | | case KBusStatReady: |
| | | pKBus->MyStat = KBusStatRunning; |
| | | pKBus->nRunStep = KBusRunStepBroadCastCfg; |
| | | pKBus->TimeOutCount=0; |
| | | break; |
| | | case KBusStatRunning: |
| | | KBusDataPoll(pKBus); |
| | | switch(pKBus->nRunStep) { |
| | | case KBusRunStepBroadCastCfg: |
| | | pKBus->TimeOutCount++; |
| | | if (pKBus->TimeOutCount>4){ |
| | | pKBus->nRunStep = KBusRunStepTimeSync; |
| | | pKBus->TimeOutCount = 0; |
| | | } |
| | | break; |
| | | case KBusRunStepTimeSync: |
| | | pKBus->Datas[0]=tick1&0xff; |
| | | pKBus->Datas[1]=(tick1>>8)&0xff; |
| | | pKBus->Datas[2]=(tick1>>16)&0xff; |
| | | pKBus->Datas[3]=(tick1>>24)&0xff; |
| | | len1=KBusMakePacket((pKBPacket)pKBus->PacketBuf2,0,0xff,cmdSyncTime,pKBus->nSeq,4,pKBus->Datas); |
| | | pKBus->KBusSendPacket(pKBus->PacketBuf2, len1); |
| | | |
| | | pKBus->nRunStep = KBusRunStepTimeSyncWait; |
| | | pKBus->TimeOutCount=0; |
| | | break; |
| | | case KBusRunStepTimeSyncWait: |
| | | pKBus->TimeOutCount++; |
| | | if (pKBus->TimeOutCount>2){ |
| | | pKBus->nRunStep = KBusRunStepMultiDataPoll; |
| | | pKBus->TimeOutCount=0; |
| | | } |
| | | break; |
| | | case KBusRunStepMultiDataPoll: |
| | | pKBus->TimeOutCount++; |
| | | if (pKBus->TimeOutCount>1){ |
| | | pKBus->nCurPollId = 1; |
| | | pKBus->nRunStep = KBusRunStepUniDataPoll; |
| | | pKBus->TimeOutCount=0; |
| | | } |
| | | break; |
| | | case KBusRunStepUniDataPoll: |
| | | KBusDataPoll(pKBus); |
| | | break; |
| | | case KBusRunStepUniDataTranster: |
| | | // 看是否有远程请求 |
| | | if (pKBus->bReq &&pKBus->nReqReCount<1) |
| | | { |
| | | pKBus->nReqDataHdr[0]=0; |
| | | pKBus->nReqDataHdr[1]=0; |
| | | pKBus->nReqDataHdr[2]=pKBus->nReqSvrId; |
| | | pKBus->nReqDataHdr[3]=pKBus->nReqParam; |
| | | // [4] Addr |
| | | // [5] Addr |
| | | // [6] nCount |
| | | DataLen = pKBus->nReqDataLen+2; |
| | | len1=KBusMakePacket((pKBPacket)pKBus->PacketBuf2,0,pKBus->nReqChildId,cmdRemoteReq,pKBus->nSeq,DataLen,&pKBus->nReqDataHdr[2]); |
| | | pKBus->KBusSendPacket(pKBus->PacketBuf2, len1); |
| | | pKBus->nReqReCount++; |
| | | }else { |
| | | |
| | | } |
| | | pKBus->nRunStep = KBusRunStepUniDataTransterWait; |
| | | pKBus->TimeOutCount=0; |
| | | break; |
| | | case KBusRunStepUniDataTransterWait: |
| | | pKBus->TimeOutCount++; |
| | | if (pKBus->TimeOutCount>4){ |
| | | if (pKBus->bReq ==1) {pKBus->bReq = 3;} |
| | | pKBus->nRunStep = KBusRunStepBroadCastCfg; |
| | | pKBus->TimeOutCount=0; |
| | | |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | int KBusDataPoll(stKBusDef * pKBus) |
| | | { |
| | | int iRet = 0; |
| | | uint32_t tick1=HAL_GetTick(); |
| | | uint32_t thisuS=GetuS(); |
| | | uint32_t tick1=GetTick(); |
| | | // uint32_t thisuS=GetuS(); |
| | | int len1=0; |
| | | int nThisPollId = pKBus->nCurPollId; |
| | | |
| | | stChnStat * pChnStat = &pKBus->KBusChnStats[nThisPollId]; |
| | | if ((pKBus->bMasterRecved && pKBus->bMasterRecvOK && thisuS-pKBus->SendTimeuS>50) || thisuS-pKBus->SendTimeuS>1000u) |
| | | if (!pKBus->bMasterSent){ |
| | | pKBus->Datas[0]=KBusMem.WLYB[nThisPollId -1 ]; |
| | | for (int i=1; i*8 < pKBus->DeviceInfos[nThisPollId].OutBitCount;i++){ |
| | | pKBus->Datas[0+i]=KBusMem.WLYB[nThisPollId -1 + i]; |
| | | } |
| | | |
| | | // pKBus->Datas[1]=KBusMem.WLYB[nThisPollId ];; |
| | | // pKBus->Datas[2]=KBusMem.WLYB[nThisPollId + 1 ]; //KBusChnStats[nCurPollId].Stat; |
| | | // pKBus->Datas[3]=KBusMem.WLYB[nThisPollId + 2 ]; |
| | | pKBus->Datas[4]=tick1&0xff; |
| | | pKBus->Datas[5]=(tick1>>8)&0xff; |
| | | pKBus->Datas[6]=(tick1>>16)&0xff; |
| | | pKBus->Datas[7]=(tick1>>24)&0xff; |
| | | |
| | | pKBus->SendTimeTick=tick1; |
| | | unStatus ThisStatus; |
| | | ThisStatus.nStatus= pChnStat->MStat; |
| | | ThisStatus.nSeq = pKBus->nSeq; |
| | | //ThisStatus.nErr1 = (pChnStat->MStat==0); |
| | | // ThisStatus.nErr1 = 0; |
| | | len1=KBusMakePacket((pKBPacket)pKBus->PacketBuf2,0,nThisPollId,cmdUniExChgData,ThisStatus.nStatus,8,pKBus->Datas); |
| | | // LL_USART_SetBaudRate(USART2,48000000,LL_USART_OVERSAMPLING_8,DefaultUart2Baud); |
| | | |
| | | pKBus->KBusSendPacket(pKBus->PacketBuf2, len1); |
| | | pChnStat->SendPackets++; |
| | | pChnStat->SendTimeInterval=pKBus->SendTimeTick - pChnStat->LastSentTimeTick; |
| | | pChnStat->LastSentTimeTick=pKBus->SendTimeTick; |
| | | // PacketLength = len1; |
| | | pKBus->SendTime=tick1; |
| | | pKBus->bMasterSent = 1; |
| | | pKBus->bMasterRecved=0; |
| | | pKBus->bMasterRecvOK=0; |
| | | // LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_5); |
| | | //ToggleErrLed(); |
| | | // ToggleOut8(); |
| | | }else |
| | | { |
| | | |
| | | if ((pKBus->bMasterRecved && pKBus->bMasterRecvOK && tick1-pKBus->SendTimeTick>1) || tick1-pKBus->SendTimeTick>KBUS_WAIT_TIME_OUT2) |
| | | { |
| | | if (!pKBus->bMasterRecvOK) |
| | | { |
| | | pKBus->TimeOutCount++; |
| | | Uart2Stat.TimeOutErr++; |
| | | // Uart2Stat.TimeOutErr++; |
| | | pChnStat->LostPackets++; |
| | | pChnStat->CtnLstPkts++; |
| | | if (!pKBus->bMasterRecved) {pChnStat->TimeOutErr++;} |
| | |
| | | {pChnStat->MaxCtnLstPkts = pChnStat->CtnLstPkts;} |
| | | if (pChnStat->CtnLstPkts>3) |
| | | { |
| | | pChnStat->Stat = 0; |
| | | pChnStat->MStat = 0; |
| | | pKBus->ErrStat=200; |
| | | KBusMem.WLXB[nThisPollId]=0; |
| | | if (pKBus->KBusEvCBFunc) pKBus->KBusEvCBFunc(pKBus, KBusEvStateChange,0,0); |
| | |
| | | // LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_7); |
| | | }else |
| | | { |
| | | pChnStat->Stat=1; |
| | | // pChnStat->CtnLstPkts = 0; |
| | | // pKBus->KBusChnStats[nThisPollId].CtnLstPkts=0; |
| | | pChnStat->MStat=1; |
| | | |
| | | pKBus->RunStat=100; |
| | | } |
| | | if (pKBus->DeviceInfos[nThisPollId].InBitCount >8 || pKBus->DeviceInfos[nThisPollId].OutBitCount > 8) { |
| | | //nThisPollId += 2; |
| | | nThisPollId ++; |
| | | nThisPollId += 2; |
| | | //nThisPollId ++; |
| | | }else { |
| | | nThisPollId ++; |
| | | } |
| | |
| | | // 数据轮询完, 周期间隙,插入其他处理数据. 每次处理的时间间隙, 一问 一答 时间. |
| | | // 分成几种类型, 轮流进行 |
| | | // 时间同步, 查询新子机, 处理带外数据, ,处理额外的事情, 或者跳过. |
| | | pKBus->CircleTime=thisuS-pKBus->LastCircleStartTime; |
| | | pKBus->LastCircleStartTime=thisuS; |
| | | pKBus->CircleTime=tick1-pKBus->LastCircleStartTime; |
| | | pKBus->LastCircleStartTime=tick1; |
| | | pKBus->nSeq++; |
| | | nThisPollId=1; |
| | | GoStep(pKBus,KBusRunStepUniDataTranster); |
| | | //nThisPollId=1; |
| | | }else { |
| | | pKBus->nCurPollId = nThisPollId; |
| | | } |
| | | pKBus->nCurPollId = nThisPollId; |
| | | |
| | | pKBus->Datas[0]=KBusMem.WLYB[nThisPollId -1 ]; |
| | | pKBus->Datas[1]=KBusMem.WLYB[nThisPollId ];; |
| | | |
| | | pKBus->Datas[2]=KBusMem.WLYB[nThisPollId + 1 ]; //KBusChnStats[nCurPollId].Stat; |
| | | pKBus->Datas[3]=KBusMem.WLYB[nThisPollId + 2 ]; |
| | | pKBus->Datas[4]=tick1&0xff; |
| | | pKBus->Datas[5]=(tick1>>8)&0xff; |
| | | pKBus->Datas[6]=(tick1>>16)&0xff; |
| | | pKBus->Datas[7]=(tick1>>24)&0xff; |
| | | |
| | | pKBus->SendTimeuS=thisuS; |
| | | unStatus nStatus; |
| | | nStatus.nSeq = pKBus->nSeq; |
| | | nStatus.nErr1 = (pKBus->KBusChnStats[nThisPollId].Stat==0); |
| | | |
| | | |
| | | len1=KBusMakePacket((pKBPacket)pKBus->PacketBuf1,0,nThisPollId,cmdUniExChgData,nStatus.nStatus,8,pKBus->Datas); |
| | | // LL_USART_SetBaudRate(USART2,48000000,LL_USART_OVERSAMPLING_8,DefaultUart2Baud); |
| | | |
| | | pKBus->KBusSendPacket(pKBus->PacketBuf1, len1); |
| | | pKBus->KBusChnStats[pKBus->nCurPollId].SendPackets++; |
| | | pKBus->KBusChnStats[pKBus->nCurPollId].SendTimeInterval=pKBus->SendTimeuS-pKBus->KBusChnStats[pKBus->nCurPollId].LastSentTimeuS; |
| | | pKBus->KBusChnStats[pKBus->nCurPollId].LastSentTimeuS=pKBus->SendTimeuS; |
| | | // PacketLength = len1; |
| | | pKBus->SendTime=tick1; |
| | | |
| | | pKBus->bMasterRecved=0; |
| | | pKBus->bMasterRecvOK=0; |
| | | // LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_5); |
| | | //ToggleErrLed(); |
| | | // ToggleOut8(); |
| | | |
| | | pKBus->bMasterSent = 0; |
| | | } |
| | | |
| | | } |
| | | return iRet; |
| | | } |
| | | |
| | | int KBusSlaveFunc(stKBusDef * pKBus) |
| | | { |
| | | int ThisuS=GetuS(); |
| | | int thisRecvTime=pKBus->RecvTimeuS; |
| | | // int ThisuS=GetuS(); |
| | | int ThisTick = GetTick(); |
| | | int thisRecvTime=pKBus->RecvTimeTick; |
| | | if (pKBus->nStationId >0) { |
| | | if (pKBus->bSlaveRecved) |
| | | { |
| | | pKBus->RunStat=8000; |
| | | pKBus->bSlaveRecved=0; |
| | | }else if ((ThisuS - thisRecvTime) >12000u) |
| | | }else if ((ThisTick - thisRecvTime) > KBUS_SLAVE_TIME_OUT) // 30u |
| | | { |
| | | pKBus->ErrStat=8000; |
| | | }else if ( ThisuS > (thisRecvTime + 12000u)) |
| | | pKBus->ErrStat=7000; |
| | | }else if ( ThisTick > (thisRecvTime + KBUS_SLAVE_TIME_OUT)) // 30u |
| | | { |
| | | pKBus->ErrStat=8000; |
| | | pKBus->ErrStat=7100; |
| | | } |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | |
| | | |
| | | int KBusCheckPacket(stKBusDef * pKBus, pKBPacket p1, int nLen1) |
| | | { |
| | |
| | | |
| | | if (p3->Sign != KBStartSign) |
| | | { |
| | | Uart2Stat.NotPacketErr++; |
| | | // pKBus->NotPacketErr++; |
| | | KMem.WDB[0x40]=pKBus->nCurPollId; |
| | | KMem.WDB[0x41]=nLen1; |
| | | memcpy(&KMem.WDB[0x42],p1,nLen1); |
| | | |
| | | pKBus->KBusChnStats[pKBus->nCurPollId].NotPkgErr++; |
| | | if (pKBus->KBusDiagnosis) { |
| | | if (pKBus->KBusSnapPos == 0) { |
| | |
| | | int DataLen=p3->DataLen; |
| | | if (DataLen>KBMaxPacketLength) |
| | | { |
| | | Uart2Stat.LengthErr++; |
| | | // Uart2Stat.LengthErr++; |
| | | pKBus->KBusChnStats[pKBus->nCurPollId].PkgLenErr++; |
| | | return -1; |
| | | } |
| | |
| | | //len4=sprintf(str3,"%d < %d + %d \r\n",len2,DataLen,sizeof(stKBPacket)); |
| | | //PutStr(str3,len4); |
| | | pKBus->KBusChnStats[pKBus->nCurPollId].PkgLenErr++; |
| | | Uart2Stat.LengthErr++; |
| | | // Uart2Stat.LengthErr++; |
| | | return -3; //not long enough |
| | | } |
| | | // if (p3->data[DataLen+1] != EndSign) |
| | |
| | | unsigned char thisBCC=KBusBCC(p1,sizeof(stKBPacket)+DataLen-1); |
| | | if (thisBCC != p3->data[DataLen]) |
| | | {//BCC Error; |
| | | Uart2Stat.BCCerr++; |
| | | // Uart2Stat.BCCerr++; |
| | | pKBus->KBusChnStats[pKBus->nCurPollId].BCCErr++; |
| | | return -4; |
| | | } |
| | |
| | | |
| | | if (p3->Sign != KBStartSign) |
| | | { |
| | | Uart2Stat.NotPacketErr++; |
| | | // Uart2Stat.NotPacketErr++; |
| | | pKBus->KBusChnStats[0].ClientNotPktErr++; |
| | | return -1; |
| | | } |
| | | int DataLen=p3->DataLen; |
| | | if (DataLen>KBMaxPacketLength) |
| | | { |
| | | Uart2Stat.LengthErr++; |
| | | // Uart2Stat.LengthErr++; |
| | | pKBus->KBusChnStats[0].ClientPkgLenErr++; |
| | | return -1; |
| | | } |
| | |
| | | //len4=sprintf(str3,"%d < %d + %d \r\n",len2,DataLen,sizeof(stKBPacket)); |
| | | //PutStr(str3,len4); |
| | | pKBus->KBusChnStats[0].ClientPkgLenErr++; |
| | | Uart2Stat.LengthErr++; |
| | | // Uart2Stat.LengthErr++; |
| | | return -3; //not long enough |
| | | } |
| | | // if (p3->data[DataLen+1] != EndSign) |
| | |
| | | unsigned char thisBCC=KBusBCC(p1,sizeof(stKBPacket)+DataLen-1); |
| | | if (thisBCC != p3->data[DataLen]) |
| | | {//BCC Error; |
| | | Uart2Stat.BCCerr++; |
| | | // Uart2Stat.BCCerr++; |
| | | pKBus->KBusChnStats[0].ClientBccErr++; |
| | | return -4; |
| | | } |
| | |
| | | //LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_6); |
| | | int nCurPollId = pKBus->nCurPollId; |
| | | int ChildId=p1->SrcAddr; |
| | | int ThisuS = GetuS(); |
| | | // int ThisuS = GetuS(); |
| | | int ThisTick = GetTick(); |
| | | unsigned char nIndex; |
| | | switch (p1->nCMD) |
| | | { |
| | |
| | | break; |
| | | case cmdQueryRply: |
| | | DataLen=sizeof(stDeviceInfo); |
| | | KBusUpdateChildInfo(pKBus,pKBus->nCurPollId,(stDeviceInfo *)&p1->data[0]); |
| | | pKBus->KBusChnStats[0].ClientSendPkts++; |
| | | KBusUpdateChildInfo(pKBus,nCurPollId,(stDeviceInfo *)&p1->data[0]); |
| | | pKBus->KBusChnStats[nCurPollId].ClientSendPkts++; |
| | | break; |
| | | case cmdSetCfgRply: |
| | | break; |
| | |
| | | case cmdPing: |
| | | break; |
| | | case cmdPingReply: |
| | | pKBus->DelayuS=ThisuS-pKBus->SendTimeuS; |
| | | if (pKBus->DelayuS > pKBus->nMaxDelayuS) pKBus->nMaxDelayuS = pKBus->DelayuS; |
| | | pKBus->DelayTick = ThisTick - pKBus->SendTimeTick; |
| | | if (pKBus->DelayTick > pKBus->nMaxDelayTick) pKBus->nMaxDelayTick = pKBus->DelayTick; |
| | | |
| | | KBusMem.WLXB[ChildId]=p1->data[0]; |
| | | |
| | | //RunStat=100; |
| | | pKBus->KBusChnStats[pKBus->nCurPollId].CtnLstPkts=0; |
| | | pKBus->KBusChnStats[pKBus->nCurPollId].Delay=pKBus->DelayuS; |
| | | if (pKBus->DelayuS > pKBus->KBusChnStats[pKBus->nCurPollId].MaxDelay) |
| | | pKBus->KBusChnStats[pKBus->nCurPollId].MaxDelay=pKBus->DelayuS; |
| | | pKBus->KBusChnStats[nCurPollId].CtnLstPkts=0; |
| | | pKBus->KBusChnStats[nCurPollId].Delay=pKBus->DelayTick; |
| | | if (pKBus->DelayTick > pKBus->KBusChnStats[nCurPollId].MaxDelay) |
| | | pKBus->KBusChnStats[nCurPollId].MaxDelay=pKBus->DelayTick; |
| | | //PutOutput(outputvalue); |
| | | pKBus->bMasterRecvOK=1; |
| | | break; |
| | |
| | | |
| | | break; |
| | | case cmdExChgDataReply: |
| | | pKBus->DelayuS=ThisuS-pKBus->SendTimeuS; |
| | | if (pKBus->DelayuS > pKBus->nMaxDelayuS) pKBus->nMaxDelayuS = pKBus->DelayuS; |
| | | |
| | | KBusMem.WLXB[ChildId-1]=p1->data[0];; |
| | | KBusMem.WLXB[ChildId ]=p1->data[1]; |
| | | KBusMem.WLXB[ChildId+1]=p1->data[2]; |
| | | KBusMem.WLXB[ChildId+2]=p1->data[3];; |
| | | KBusMem.WLXB[ChildId+3]=p1->data[4]; |
| | | KBusMem.WLXB[ChildId+4]=p1->data[5]; |
| | | KBusMem.WLXB[ChildId+5]=p1->data[6]; |
| | | KBusMem.WLXB[ChildId+6]=p1->data[7]; |
| | | |
| | | pKBus->DelayTick = ThisTick - pKBus->SendTimeTick; |
| | | if (pKBus->DelayTick > pKBus->nMaxDelayTick) pKBus->nMaxDelayTick = pKBus->DelayTick; |
| | | KBusMem.WLXB[ChildId - 1 ]=p1->data[0]; |
| | | for (int i=1; i*8 < pKBus->DeviceInfos[ChildId].InBitCount;i++){ |
| | | KBusMem.WLXB[ChildId - 1 + i]=p1->data[0 + i];; |
| | | } |
| | | // KBusMem.WLXB[ChildId+0]=p1->data[1]; |
| | | // KBusMem.WLXB[ChildId+1]=p1->data[2]; |
| | | // KBusMem.WLXB[ChildId+2]=p1->data[3];; |
| | | // KBusMem.WLXB[ChildId+3]=p1->data[4]; |
| | | // KBusMem.WLXB[ChildId+4]=p1->data[5]; |
| | | // KBusMem.WLXB[ChildId+5]=p1->data[6]; |
| | | // KBusMem.WLXB[ChildId+6]=p1->data[7]; |
| | | //Call Back |
| | | if (pKBus->KBusEvCBFunc) pKBus->KBusEvCBFunc(pKBus, KBusEvDataUpdate,0,0); |
| | | //RunStat=100; |
| | | pKBus->KBusChnStats[nCurPollId].CtnLstPkts=0; |
| | | pKBus->KBusChnStats[nCurPollId].Delay=pKBus->DelayuS; |
| | | if (pKBus->DelayuS > pKBus->KBusChnStats[nCurPollId].MaxDelay) |
| | | pKBus->KBusChnStats[nCurPollId].MaxDelay=pKBus->DelayuS; |
| | | pKBus->KBusChnStats[nCurPollId].Delay=pKBus->DelayTick; |
| | | if (pKBus->DelayTick > pKBus->KBusChnStats[nCurPollId].MaxDelay) |
| | | pKBus->KBusChnStats[nCurPollId].MaxDelay=pKBus->DelayTick; |
| | | //PutOutput(outputvalue); |
| | | |
| | | if (DataLen>=14) { |
| | |
| | | pKBus->bMasterRecvOK=1; |
| | | |
| | | break; |
| | | |
| | | case cmdRemoteReqReply: |
| | | pKBus->bReq = 2; |
| | | |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | |
| | | Len1--; |
| | | } |
| | | |
| | | Uart2Stat.OKPacket++; |
| | | int DataLen=p1->DataLen; |
| | | // Uart2Stat.OKPacket++; |
| | | unsigned short Addr; |
| | | unsigned short DataLen=p1->DataLen; |
| | | //int nSrcAddr=p1->SrcAddr; |
| | | int nDstHost=p1->DstHost; |
| | | |
| | |
| | | // KBusSlaveRecved=1; |
| | | |
| | | pKBPacket p2=(pKBPacket)pKBus->PacketBuf2; |
| | | |
| | | void * pData = 0; |
| | | int PacketLen=0; |
| | | unsigned char nIndex;// = p1->nStatus & 0x07; |
| | | if (nDstHost!=pKBus->nStationId && nDstHost != 0xff) |
| | |
| | | pKBus->KBusChnStats[0].ClientMisIdPkts++; |
| | | return -1; |
| | | } |
| | | int ThisuS = GetuS(); |
| | | if (nDstHost==pKBus->nStationId || nDstHost==0xff) |
| | | // int ThisuS = GetuS(); |
| | | int ThisTick = GetTick(); |
| | | if (nDstHost==0xff){ |
| | | pKBus->RecvTimeTick=ThisTick; |
| | | pKBus->bSlaveRecved=1; |
| | | switch (p1->nCMD) |
| | | { |
| | | case cmdNone: |
| | | break; |
| | | case cmdBroadCastCfg: |
| | | |
| | | break; |
| | | case cmdMuExchgData: |
| | | |
| | | break; |
| | | case cmdToSafeMode: |
| | | |
| | | break; |
| | | case cmdHeartBeat: |
| | | break; |
| | | case cmdSyncRead: |
| | | break; |
| | | case cmdSyncWrite: |
| | | break; |
| | | case cmdSequenRead: |
| | | break; |
| | | case cmdSyncTime: |
| | | pKBus->nSlaveTick=p1->data[0]+(p1->data[1]<<8)+(p1->data[2]<<16)+(p1->data[3]<<24); |
| | | if (pKBus->KBusEvCBFunc) pKBus->KBusEvCBFunc(pKBus, KBusEvTimeSync,0,0); |
| | | break; |
| | | case cmdRemoteReq: //收到Remote请求 |
| | | // KBusSlaveRunRemoteReq(pKBus,p1->data[0],p1->data, DataLen); |
| | | // data[0] -> reqSvr; |
| | | // data[1] -> param; |
| | | switch (p1->data[0]) { |
| | | case ReqBlinkLED: |
| | | case ReqTransBlink: |
| | | KMRunStat.bLEDFlick=p1->data[1]; |
| | | DataLen = 0; |
| | | PacketLen=KBusMakePacket(p2,pKBus->nStationId,0,cmdRemoteReqReply,p1->nStatus,DataLen,p1->data); |
| | | pKBus->KBusSendPacket((uchar *)p2, PacketLen); |
| | | break; |
| | | case ReqUpdateFirm: //37个字节 |
| | | DataLen = 0; |
| | | PacketLen=KBusMakePacket(p2,pKBus->nStationId,0,cmdRemoteReqReply,p1->nStatus,DataLen,p1->data); |
| | | pKBus->KBusSendPacket((uchar *)p2, PacketLen); |
| | | pData = &p1->data[5]; |
| | | Addr = p1->data[2] + (p1->data[3] <<8); |
| | | DataLen = p1->data[4] ; |
| | | KMRunService(p1->data[0],Addr,0,&pData,&DataLen); |
| | | DataLen=0; |
| | | break; |
| | | case ReqUpdateFirmInfo: |
| | | DataLen = 0; |
| | | PacketLen=KBusMakePacket(p2,pKBus->nStationId,0,cmdRemoteReqReply,p1->nStatus,DataLen,p1->data); |
| | | pKBus->KBusSendPacket((uchar *)p2, PacketLen); |
| | | pData = &p1->data[5]; |
| | | Addr = p1->data[2] + (p1->data[3] <<8); |
| | | DataLen = p1->data[4] ; |
| | | KMRunService(p1->data[0],Addr,0,&pData,&DataLen); |
| | | DataLen=0; |
| | | break; |
| | | default: |
| | | pData = &p1->data[5]; |
| | | Addr = p1->data[2] + (p1->data[3] <<8); |
| | | DataLen = p1->data[4] ; |
| | | KMRunService(p1->data[0],p1->data[1],0,&pData,&DataLen); |
| | | DataLen = 0; |
| | | PacketLen=KBusMakePacket(p2,pKBus->nStationId,0,cmdRemoteReqReply,p1->nStatus,DataLen,p1->data); |
| | | pKBus->KBusSendPacket((uchar *)p2, PacketLen); |
| | | DataLen=0; |
| | | |
| | | break; |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | } |
| | | |
| | | if (nDstHost==pKBus->nStationId) |
| | | { |
| | | pKBus->RecvTimeuS=ThisuS; |
| | | pKBus->RecvTimeTick=ThisTick; |
| | | pKBus->bSlaveRecved=1; |
| | | switch (p1->nCMD) |
| | | { |
| | |
| | | //PutOutput(outputvalue); |
| | | //memcpy(DispBuf,p1->data+2,8); |
| | | p1->data[0]=KBusMem.WLXB[0]; |
| | | pKBus->RecvTimeuS=ThisuS; |
| | | //pKBus->RecvTimeuS=ThisuS; |
| | | PacketLen=KBusMakePacket(p2,pKBus->nStationId,0,cmdPingReply,p1->nStatus,DataLen,p1->data); |
| | | pKBus->KBusChnStats[0].ClientSendPkts++; |
| | | pKBus->KBusSendPacket((uchar *)p2, PacketLen); |
| | |
| | | KBusMem.WLYB[2]=p1->data[2]; |
| | | KBusMem.WLYB[3]=p1->data[3]; |
| | | |
| | | pKBus->nSlaveTick=p1->data[4]+(p1->data[5]<<8);//+(p1->data[6]<<16)+(p1->data[7]<<24); |
| | | // pKBus->nSlaveTick=p1->data[4]+(p1->data[5]<<8);//+(p1->data[6]<<16)+(p1->data[7]<<24); |
| | | |
| | | if (pKBus->KBusEvCBFunc) pKBus->KBusEvCBFunc(pKBus, KBusEvTimeSync,0,0); |
| | | |
| | |
| | | if (pKBus->nClientDataIndex >= 10) { pKBus->nClientDataIndex=0;} |
| | | unStatus nStatus; |
| | | nStatus.nStatus = p1->nStatus; |
| | | if (nStatus.nErr1) { pKBus->ErrStat=8000;} |
| | | if (nStatus.nErr1) { pKBus->ErrStat=8100;} |
| | | PacketLen=KBusMakePacket(p2,pKBus->nStationId,0,cmdExChgDataReply,p1->nStatus,DataLen,p1->data); |
| | | pKBus->KBusChnStats[0].ClientSendPkts++; |
| | | pKBus->KBusSendPacket((uchar *)p2, PacketLen); |
| | |
| | | case cmdSequenRead: |
| | | break; |
| | | case cmdSyncTime: |
| | | pKBus->nSlaveTick=p1->data[0]+(p1->data[1]<<8)+(p1->data[2]<<16)+(p1->data[3]<<24); |
| | | if (pKBus->KBusEvCBFunc) pKBus->KBusEvCBFunc(pKBus, KBusEvTimeSync,0,0); |
| | | break; |
| | | |
| | | case cmdRemoteReq: //收到Remote请求 |
| | | // KBusSlaveRunRemoteReq(pKBus,p1->data[0],p1->data, DataLen); |
| | | // data[0] -> reqSvr; |
| | | // data[1] -> param; |
| | | switch (p1->data[0]) { |
| | | case ReqBlinkLED: |
| | | case ReqTransBlink: |
| | | KMRunStat.bLEDFlick=p1->data[1]; |
| | | DataLen = 0; |
| | | PacketLen=KBusMakePacket(p2,pKBus->nStationId,0,cmdRemoteReqReply,p1->nStatus,DataLen,p1->data); |
| | | pKBus->KBusSendPacket((uchar *)p2, PacketLen); |
| | | break; |
| | | case ReqUpdateFirm: //37个字节 |
| | | DataLen = 0; |
| | | PacketLen=KBusMakePacket(p2,pKBus->nStationId,0,cmdRemoteReqReply,p1->nStatus,DataLen,p1->data); |
| | | pKBus->KBusSendPacket((uchar *)p2, PacketLen); |
| | | pData = &p1->data[5]; |
| | | Addr = p1->data[2] + (p1->data[3] <<8); |
| | | DataLen = p1->data[4] ; |
| | | KMRunService(p1->data[0],Addr,0,&pData,&DataLen); |
| | | DataLen=0; |
| | | break; |
| | | case ReqUpdateFirmInfo: |
| | | DataLen = 0; |
| | | PacketLen=KBusMakePacket(p2,pKBus->nStationId,0,cmdRemoteReqReply,p1->nStatus,DataLen,p1->data); |
| | | pKBus->KBusSendPacket((uchar *)p2, PacketLen); |
| | | pData = &p1->data[5]; |
| | | Addr = p1->data[2] + (p1->data[3] <<8); |
| | | DataLen = p1->data[4] ; |
| | | KMRunService(p1->data[0],Addr,0,&pData,&DataLen); |
| | | DataLen=0; |
| | | break; |
| | | default: |
| | | pData = &p1->data[5]; |
| | | Addr = p1->data[2] + (p1->data[3] <<8); |
| | | DataLen = p1->data[4] ; |
| | | KMRunService(p1->data[0],p1->data[1],0,&pData,&DataLen); |
| | | DataLen = 0; |
| | | PacketLen=KBusMakePacket(p2,pKBus->nStationId,0,cmdRemoteReqReply,p1->nStatus,DataLen,p1->data); |
| | | pKBus->KBusSendPacket((uchar *)p2, PacketLen); |
| | | DataLen=0; |
| | | |
| | | break; |
| | | } |
| | | break; |
| | | |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | int KBusSlaveRunRemoteReq(stKBusDef * pKBus, int nReqSvrId, unsigned char * pData , int Len1) |
| | | { |
| | | int PacketLen; |
| | | switch (nReqSvrId) { |
| | | case ReqTransBlink: |
| | | KMRunStat.bLEDFlick=5; |
| | | // PacketLen=KBusMakePacket(pKBus->PacketBuf2,pKBus->nStationId,0,cmdRemoteReq,p1->nStatus,DataLen,p1->data); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | |
| | | Result=KBusCheckPacket(pKBus, p1, Len1); |
| | | if (Result != S_OK) |
| | | { |
| | | |
| | | return Result; |
| | | } |
| | | pKBus->bMasterRecvOK=1; |