Exemple #1
0
/* Callback function that check the read SDO demand */
void CheckReadInfoSDO(CO_Data* d, UNS8 nodeid)
{
	UNS32 abortCode;
	UNS32 data=0;
	UNS32 size=64;

	if(getReadResultNetworkDict(CANOpenShellOD_Data, nodeid, &data, &size, &abortCode) != SDO_FINISHED)
		printf("Master : Failed in getting information for slave %2.2x, AbortCode :%4.4x \n", nodeid, abortCode);
	else
	{
		/* Display data received */
		switch(get_info_step)
		{
			case 1:
					printf("Device type     : %x\n", data);
					break;
			case 2:
					printf("Vendor ID       : %x\n", data);
					break;
			case 3:
					printf("Product Code    : %x\n", data);
					break;
			case 4:
					printf("Revision Number : %x\n", data);
					break;
		}
	}
	/* Finalize last SDO transfer with this node */
	closeSDOtransfer(CANOpenShellOD_Data, nodeid, SDO_CLIENT);

	GetSlaveNodeInfo(nodeid);
}
Exemple #2
0
/* Callback function that check the read SDO demand */
void SDO_read_callback(CO_Data* d, UNS8 nodeid)
{

	SDO_read_data_size = 255;
	SDO_read_callback_result = getReadResultNetworkDict(CANOpenShellOD_Data, nodeid, &SDO_read_data, &SDO_read_data_size, &SDO_read_callback_abortCode);

	SDO_read_data[SDO_read_data_size] = 0;
	/* Finalize last SDO transfer with this node */
	closeSDOtransfer(CANOpenShellOD_Data, nodeid, SDO_CLIENT);
	sem_post(&Read_sem);
}
Exemple #3
0
/**
**
**
** @param d
** @param nodeId
*/
static void CheckSDOAndContinue(CO_Data* d, UNS8 nodeId)
{
    UNS32 abortCode = 0;
    UNS8 buf[4], match = 0, node;
    UNS32 size=4;
    if(d->dcf_status == DCF_STATUS_READ_CHECK){
        // printf("DCF_STATUS_READ_CHECK \n");
        if(getReadResultNetworkDict (d, nodeId, buf, &size, &abortCode) != SDO_FINISHED)
            goto dcferror;
        /* Check if data received match the DCF */
        if(size == d->dcf_size){
            match = 1;
            while(size--)
                if(buf[size] != d->dcf_data[size])
                    match = 0;
        }
        if(match) {
            if(read_consise_dcf_next_entry(d, nodeId) == 0){
                start_and_seek_node(d, nodeId);
            }
        }
        else { /* Data received does not match : start rewriting all */
            if((init_consise_dcf(d, nodeId) == 0) || (write_consise_dcf_next_entry(d, nodeId) == 0))
                goto dcferror;                
            d->dcf_status = DCF_STATUS_WRITE;
        }
    }
    else if(d->dcf_status == DCF_STATUS_WRITE){
        // printf("DCF_STATUS_WRITE \n");
        if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED)
            goto dcferror;
        if(write_consise_dcf_next_entry(d, nodeId) == 0){
#ifdef DCF_SAVE_NODE
            SaveNode(d, nodeId);
            d->dcf_status = DCF_STATUS_SAVED;
#else //DCF_SAVE_NODE
           start_and_seek_node(d,nodeId);
#endif //DCF_SAVE_NODE
        }
    }
    else if(d->dcf_status == DCF_STATUS_SAVED){
        // printf("DCF_STATUS_SAVED \n");
        if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED)
            goto dcferror;
        masterSendNMTstateChange (d, nodeId, NMT_Reset_Node);
        d->dcf_status = DCF_STATUS_INIT;
        d->NMTable[nodeId] = Unknown_state;
    }
    return;
dcferror:
    MSG_ERR(0x1A01, "SDO error in consise DCF", abortCode);
    MSG_WAR(0x2A02, "server node : ", nodeId);
    d->NMTable[nodeId] = Unknown_state;
}
Exemple #4
0
/* Callback function that check the read SDO demand */
void CheckReadSDO(CO_Data* d, UNS8 nodeid)
{
	UNS32 abortCode;
	UNS32 data=0;
	UNS32 size=64;

	if(getReadResultNetworkDict(CANOpenShellOD_Data, nodeid, &data, &size, &abortCode) != SDO_FINISHED)
		printf("\nResult : Failed in getting information for slave %2.2x, AbortCode :%4.4x \n", nodeid, abortCode);
	else
		printf("\nResult : %x\n", data);

	/* Finalize last SDO transfer with this node */
	closeSDOtransfer(CANOpenShellOD_Data, nodeid, SDO_CLIENT);
}
Exemple #5
0
void QCAN::CheckLowReadSDO(CO_Data* d, UNS8 nodeid)
{
    UNS32 abortCode;
    UNS32 data=0;
    UNS32 size=sizeof(data);

    if(getReadResultNetworkDict(d, nodeid, &data, &size, &abortCode) != SDO_FINISHED)
        printf("\nResult : Failed in getting information for slave %2.2x, AbortCode :%4.4x \n", nodeid, abortCode);
    else {
        QCAN* can = (QCAN*)d->classObject;
        emit can->low2057Values(data);
    }
    closeSDOtransfer(d, nodeid, SDO_CLIENT);
}
Exemple #6
0
void QCAN::CheckReadPWM(CO_Data* d, UNS8 nodeid)
{
    UNS32 abortCode;
    UNS16 data;
    UNS32 size=sizeof(data);

    QCAN* can = (QCAN*)d->classObject;
    if(getReadResultNetworkDict(d, nodeid, &data, &size, &abortCode) != SDO_FINISHED) {
        printf("\nResult : Failed in getting information for slave %2.2x, AbortCode :%4.4x \n", nodeid, abortCode);
    } else {
        can->mPwmDuty = data;
    }
    closeSDOtransfer(d, nodeid, SDO_CLIENT);
    can->signal();
}
Exemple #7
0
void QCAN::CheckReadTitle(CO_Data* d, UNS8 nodeid)
{
    UNS32 abortCode;
    char data[255];
    UNS32 size=sizeof(data);

    QCAN* can = (QCAN*)d->classObject;
    if(getReadResultNetworkDict(d, nodeid, data, &size, &abortCode) != SDO_FINISHED) {
        printf("Master : Failed in getting information for slave %2.2x, AbortCode :%4.4x \n", nodeid, abortCode);
    } else {
        can->mTitle = QString((const char*)data);
    }
    closeSDOtransfer(d, nodeid, SDO_CLIENT);
    can->signal();
}
Exemple #8
0
void CheckReadTitleSDO(CO_Data* d, UNS8 nodeid)
{
	UNS32 abortCode;
    	char data[255];
	UNS32 size=sizeof(data);;

	if(getReadResultNetworkDict(CANOpenShellOD_Data, nodeid, data, &size, &abortCode) != SDO_FINISHED)
		printf("Master : Failed in getting information for slave %2.2x, AbortCode :%4.4x \n", nodeid, abortCode);
	else
	{
		printf("Device title     : %s\n", data);
	}
	/* Finalize last SDO transfer with this node */
	closeSDOtransfer(CANOpenShellOD_Data, nodeid, SDO_CLIENT);
}
Exemple #9
0
void QCan::CheckReadId(CO_Data* d, UNS8 nodeid)
{
    UNS32 abortCode;
    UNS32 data=0;
    UNS32 size=64;

    QCan* can = (QCan*)d->classObject;
    if(getReadResultNetworkDict(d, nodeid, &data, &size, &abortCode) != SDO_FINISHED) {
        printf("Master : Failed in reading information for slave %2.2x, AbortCode :%4.4x \n", nodeid, abortCode);
    } else {
        can->mID = data;
    }
    closeSDOtransfer(d, nodeid, SDO_CLIENT);
    can->signal();
}
Exemple #10
0
UNS8 ReadSDO(UNS8 nodeId, UNS16 index, UNS8 subIndex, UNS8 dataType, void* data, UNS8* size)
   {
   UNS32 abortCode = 0;
   UNS8 res = SDO_UPLOAD_IN_PROGRESS;
   // Read SDO
   UNS8 err = readNetworkDict (&win32test_Data, nodeId, index, subIndex, dataType);
   if (err)
      return 0xFF;
   for(;;)
      {
      res = getReadResultNetworkDict (&win32test_Data, nodeId, data, size, &abortCode);
      if (res != SDO_UPLOAD_IN_PROGRESS)
         break;   
      sleep_proc(1);
      continue;
      }
   closeSDOtransfer(&win32test_Data, nodeId, SDO_CLIENT);
   if (res == SDO_FINISHED)
      return 0;
   return 0xFF;   
   }
Exemple #11
0
void CANUi::mReadResultNetworkDict(CO_Data* d, UNS8 nodeId)
{
    UNS32 abortCode;

    UNS32 _dataSize;
    UNS8 _dataType = this->ui->comboBox_sdoDatatype->currentData().value<UNS8>();

    if(_dataType == uint8){
        _dataSize = sizeof(UNS8);
    }
    else if(_dataType == uint16){
        _dataSize = sizeof(UNS16);
    }
    else{
        _dataSize = sizeof(UNS32);
    }
    UNS32 data;

    if(getReadResultNetworkDict (d, nodeId, &data, &_dataSize,
                                      &abortCode)!=SDO_FINISHED){

    }

    if(_dataType == uint8){
        ui->spinBox_sdoData->setValue((UNS8)data);
    }
    else if(_dataType == uint16){
        ui->spinBox_sdoData->setValue((UNS16)data);
    }
    else{
        ui->spinBox_sdoData->setValue((UNS32)data);
    }


    /* Finalise last SDO transfer with this node */
    closeSDOtransfer(&master_Data, nodeId, SDO_CLIENT);

}