Sample communication application – Beijer Electronics SCOM Protocol EN User Manual
Page 141
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 printf("%02X ",aucSCOM[i]); printf(_); printf(" ASCII: "); for (i=0;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 iBytesRead=recv(s,aucSCOM,sizeof(aucSCOM),0); close(s); if (iBytesRead) { printf("> %d byte(s) received. Dumping data:"_,iBytesRead);