Sample communication application – Beijer Electronics SCOM Protocol EN User Manual

Page 141

Advertising
background image

Sample Communication Application

Elektronik-Systeme Lauer, MAEN976

141

aucSCOM[_SCOM_MSG_OFS_ATTN]=_ATTN_CMD;

aucSCOM[_SCOM_MSG_OFS_LEN]=i;

aucSCOM[_SCOM_MSG_OFS_ICHK]=getICHKH(aucSCOM);

aucSCOM[_SCOM_MSG_OFS_DATA+i]=getICHKD(aucSCOM,(unsigned char)i);

#ifdef _WIN32

WSAStartup(MAKEWORD(2,2),&wsad);

#endif /* _WIN32 */

/* === SEND SCOM MESSAGE === */

printf("> Opening UDP socket for sending."_);

s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

if (s!=-1)

{

iso=1;

setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char*)&iso,sizeof(iso));

memset(&sai,0,sizeof(sai));

sai.sin_family=AF_INET;

sai.sin_port=htons(10000);

sai.sin_addr.s_addr=htonl(INADDR_BROADCAST);

printf("> Sending SCOM message."_);

iBytesToSend=_SCOM_MSG_HDR_SIZE+i+1;

if (iBytesToSend)

{

printf("> %d byte(s) to send. Dumping data:"_,iBytesToSend);

printf(" HEX : ");

for (i=0;i<iBytesToSend;i++)

printf("%02X ",aucSCOM[i]);

printf(_);

printf(" ASCII: ");

for (i=0;i<iBytesToSend;i++)

aucSCOM[i]<32?printf(". "):printf("%c ",aucSCOM[i]);

printf(_);

}

else

printf("> No data to send."_);

sendto(s,aucSCOM,iBytesToSend,0,(struct sockaddr*)&sai,sizeof(sai));

close(s);

printf("> Send socket closed."_);

/* === RECEIVE RESPONSE MESSAGE === */

printf("> Opening UDP socket for receiving."_);

s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

if (s!=-1)

{

sai.sin_family=AF_INET;

sai.sin_port=htons(10001);

sai.sin_addr.s_addr=htonl(INADDR_ANY);

if (!bind(s,(struct sockaddr*)&sai,sizeof(sai)))

{

memset(aucSCOM,0,sizeof(aucSCOM));

printf("> Receiving response message (press <CTRL>+<C> to abort)."_);

iBytesRead=recv(s,aucSCOM,sizeof(aucSCOM),0);

close(s);

if (iBytesRead)

{

printf("> %d byte(s) received. Dumping data:"_,iBytesRead);

Advertising