CANopen FD Master Library
Making your systems precise, reliable and high-quality - 5.10.01
com_demo_sdo.c

//============================================================================//
// File: com_demo_sdo.c //
// Description: Examples for SDO service in CANopen Master stack //
// //
// Copyright (C) MicroControl GmbH & Co. KG //
// 53844 Troisdorf - Germany //
// www.microcontrol.net //
// //
//----------------------------------------------------------------------------//
// The copyright to the computer program(s) herein is the property of //
// MicroControl GmbH & Co. KG, Germany. The program(s) may be used //
// and/or copied only with the written permission of MicroControl GmbH & //
// Co. KG or in accordance with the terms and conditions stipulated in //
// the agreement/contract under which the program(s) have been supplied. //
// //
//============================================================================//
#include "com_sdo_cln.h" // CANopen Master SDO client service
#include <stdio.h> // for sprintf() function
uint32_t ulIdx1000G;
uint8_t ubIdx1001G;
char szIdx1008G[64];
uint16_t uwIdx1017G;
uint32_t ulIdx1018_1G;
uint32_t ulObjCntG;
uint32_t ulIdx1400_1G;
uint8_t ubIdx1400_2G;
uint32_t ulIdx1800_1G;
uint8_t ubIdx1800_2G;
uint16_t uwIdx1800_5G;
CoObject_ts atsObjDictReadG[] = {
{ 0x1000, 0x00, 0x00, 4, &ulIdx1000G },
{ 0x1001, 0x00, 0x00, 1, &ubIdx1001G },
{ 0x1008, 0x00, 0x00, 32, &szIdx1008G },
{ 0x1017, 0x00, 0x00, 2, &uwIdx1017G },
{ 0x1018, 0x01, 0x00, 4, &ulIdx1018_1G }
};
CoObject_ts atsObjDictWriteG[] = {
{ 0x1017, 0x00, 0x00, 2, &uwIdx1017G },
{ 0x1400, 0x01, 0x00, 4, &ulIdx1400_1G },
{ 0x1400, 0x02, 0x00, 1, &ubIdx1400_2G },
{ 0x1800, 0x01, 0x00, 4, &ulIdx1800_1G },
{ 0x1800, 0x02, 0x00, 1, &ubIdx1800_2G },
{ 0x1800, 0x05, 0x00, 2, &uwIdx1800_5G }
};
//----------------------------------------------------------------------------//
// DemoComSdoObjectRead() //
// Read all Objects defined in the list 'atsObjDictReadG' //
//----------------------------------------------------------------------------//
ComStatus_tv ComDemoSdoObjectRead(uint8_t ubNetV, uint8_t ubNodeIdV)
{
ComStatus_tv tvStatusT;
uint8_t ubSdoClientT;
ubSdoClientT = ComSdoGetClient(ubNetV);
ulObjCntG = sizeof(atsObjDictReadG) / sizeof (CoObject_ts);
tvStatusT = ComSdoReadObject( ubNetV, ubSdoClientT, ubNodeIdV,
&atsObjDictReadG[0], &ulObjCntG);
return(tvStatusT);
}
//----------------------------------------------------------------------------//
// DemoComSdoObjectWrite() //
// Write all Objects defined in the list 'atsObjDictWriteG' //
//----------------------------------------------------------------------------//
ComStatus_tv ComDemoSdoObjectWrite(uint8_t ubNetV, uint8_t ubNodeIdV)
{
ComStatus_tv tvStatusT;
uwIdx1017G = 500;
ulIdx1400_1G = 0x211;
ubIdx1400_2G = 0xFF;
ulIdx1800_1G = 0x191;
ubIdx1800_2G = 0xFF;
uwIdx1800_5G = 100;;
ulObjCntG = sizeof(atsObjDictWriteG) / sizeof (CoObject_ts);
tvStatusT = ComSdoWriteObject( ubNetV, 0, ubNodeIdV,
&atsObjDictWriteG[0], &ulObjCntG);
return(tvStatusT);
}
//----------------------------------------------------------------------------//
// DemoComNmtPrintNodeState() //
// Print node state in text buffer //
//----------------------------------------------------------------------------//
void ComDemoSdoPrintStatus(uint8_t ubNodeIdV, uint8_t ubSdoV, char * szBufferV)
{
ComStatus_tv tvStatusT;
uint32_t ulAbortT;
tvStatusT = ComSdoGetStatus(ubNodeIdV, ubSdoV);
switch(tvStatusT)
{
sprintf(szBufferV, "NID %d: %s", ubNodeIdV, "OK ");
break;
ComSdoGetAbortCode(ubNodeIdV, ubSdoV, &ulAbortT);
sprintf(szBufferV, "NID %d: (a)%08ulX", ubNodeIdV, (unsigned int) ulAbortT);
break;
sprintf(szBufferV, "NID %d: Timeout", ubNodeIdV);
break;
sprintf(szBufferV, "NID %d: Prot. Error", ubNodeIdV);
break;
sprintf(szBufferV, "NID %d: Data size fail", ubNodeIdV);
break;
default:
sprintf(szBufferV, "NID %d: Error - state unknown", ubNodeIdV);
break;
}
} // DemoComSdoPrintStatus