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<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);