Exemple #1
0
 int _WriteLgxData(Eip_Session *session,Eip_Connection *connection,
                            char *adress,LGX_Data_Type datatype,void *data,
                            /*int datasize,*/CIP_UINT number)
{ int requestsize;
	CommonDataService_Reply *rep=NULL;
	int datasize=number*_GetLGXDataSize(datatype);
	WriteDataService_Request *request=_BuildLgxWriteDataRequest(adress,datatype,data,datasize,number,&requestsize);
	Eip_CDI *DataItem=_ConnectedSend(session,connection,request,requestsize);
	free(request);
	if (DataItem==NULL) return(Error);
	rep=_GetService_Reply((Eip_Item*)DataItem,0);
	if (rep==NULL) return(Error);
	if (rep->Status!=0)
	{
		CIPERROR(AB_Error,rep->Status,_GetExtendedStatus(rep));
		free(DataItem);
		return(Error);
	}	else
	{
		int result=_GetService_ReplyNumber((Eip_Item*)DataItem);
		free(DataItem);
		return(result);
	}
	//return(DataItem->Length);
}
Exemple #2
0
LGX_Read *_DecodeLGX(CommonDataService_Reply *reply, int replysize)
{
	void *data = NULL;
	LGX_Read *result = (LGX_Read *)malloc(sizeof(LGX_Read));
	if (result==NULL) {
		CIPERROR(Sys_Error, errno, 0);
		return NULL;
	}
	memset(result, 0, sizeof(LGX_Read));
	result->type = _GetLGXDataType(reply);
	result->elementsize = _GetLGXDataSize(result->type);
	data = _GetData(reply);
	if (result->elementsize <= 0 || data==NULL) {
		CIPERROR(Internal_Error, E_LGX, __LINE__);
		free(result);
		return NULL;
	}
	result->totalsize = replysize - (int)((char *)data - (char *)reply);
	result->Varcount = result->totalsize / result->elementsize;
	if (result->Varcount < 1) {
		CIPERROR(Internal_Error, E_LGX, __LINE__);
		free(result);
		return NULL;
	}
	result = (LGX_Read *)realloc(result, sizeof(LGX_Read) + result->totalsize);
	if (result == NULL) {
		CIPERROR(Sys_Error, errno, 0);
		return NULL;
	}
	memcpy((char*)result + sizeof(LGX_Read), data, result->totalsize);
	return result;
}