IdList *_GetIdList(Eip_Session *session,BYTE routepath[],int routepathsize) { int replysize=0,MRrequestsize=0; int mrdatasize=0;int count=0; void *MRData=NULL; IdList *result=NULL; BYTE path[4]={0x20,OBJECT_PROP,0x24,0x00}; //BYTE routepath[2]={0x01,0x00}; MR_Request *MRrequest=_BuildMRRequest(CIP_LIST_ALL_OBJECTS,path,sizeof(path),NULL,0,&MRrequestsize); MR_Reply *reply=UnconnectedSend(session,MRrequest,MRrequestsize,routepath,routepathsize,&replysize); free(MRrequest); if (reply!=NULL) { //_CipFlushBuffer(reply,replysize); MRData=_GetMRData(reply); mrdatasize=replysize-sizeof(MR_Reply)-reply->Add_Status_Size; if (mrdatasize>0) { count=mrdatasize/4; result=(IdList *)malloc(sizeof(result->IdCount)+mrdatasize); if (result!=NULL) { result->IdCount=count; memcpy(&(result->Id[0]),MRData,mrdatasize); } else { CIPERROR(Sys_Error,errno,0); } } //printf("replysize : %d : %d\n",replysize,mrdatasize); free(reply); return(result); } else return(NULL); }
MR_Reply *_SendMRRequest(Eip_Session *session,CIP_USINT service,BYTE *path, CIP_USINT requestpathsize,void *requestdata,int requestdatasize,int *replysize) { int mrsize=0; MR_Request *request=_BuildMRRequest(service,path,requestpathsize,requestdata,requestdatasize,&mrsize); MR_Reply *reply=_ExSendMRRequest(session,request,mrsize,replysize); free(request); return(reply); }