1 #include "ipClientConnector.h" 5 #include <sys/socket.h> 7 #include <netinet/in.h> 17 unsigned char _ip[UNISASA_SIZE_IPV4];
21 unsigned char byte[256];
24 void copyArray(
unsigned char* src,
unsigned char *dest,
unsigned int len)
34 unsigned char message[256];
36 message[0]= DISCOVERY;
37 send(_socket,message,1,0);
54 recv(_socket,message,1,0);
55 unsigned int sizeAddress = message[0];
57 recv(_socket,message,sizeAddress,0);
60 devs[0].address.integer=_socket;
62 recv(_socket,message,1,0);
63 devs[0].sizeIODevice=message[0];
65 recv(_socket,message,1,0);
66 devs[0].sizeIDSensor=message[0];
68 recv(_socket,message,devs[0].sizeIDSensor,0);
70 copyArray(message,converter.byte,devs[0].sizeIDSensor);
71 devs[0].numSensors=converter.integer;
74 for(s=0;s<devs[0].numSensors;s++)
76 recv(_socket,message,devs[0].sizeIDSensor,0);
78 copyArray(message,converter.byte,devs[0].sizeIDSensor);
79 devs[0].sensors[s].ID.integer=converter.integer;
81 recv(_socket,message,SIZE_TYPE_SENSOR,0);
83 copyArray(message,converter.byte,SIZE_TYPE_SENSOR);
84 devs[0].sensors[s].typeSensor.integer=converter.integer;
86 recv(_socket,message,1,0);
87 devs[0].sensors[s].sizeOutput=message[0];
89 recv(_socket,message,1,0);
90 devs[0].sensors[s].typeOutput=message[0];
93 recv(_socket,message,1,0);
94 devs[0].sizeIDActuator=message[0];
96 recv(_socket,message,devs[0].sizeIDActuator,0);
98 copyArray(message,converter.byte,devs[0].sizeIDActuator);
99 devs[0].numActuators=converter.integer;
102 for(a=0;a<devs[0].numActuators;a++)
104 recv(_socket,message,devs[0].sizeIDSensor,0);
106 copyArray(message,converter.byte,devs[0].sizeIDSensor);
107 devs[0].sensors[a].ID.integer=converter.integer;
109 recv(_socket,message,SIZE_TYPE_SENSOR,0);
111 copyArray(message,converter.byte,SIZE_TYPE_SENSOR);
112 devs[0].sensors[a].typeSensor.integer=converter.integer;
114 recv(_socket,message,1,0);
115 devs[0].sensors[a].sizeOutput=message[0];
117 recv(_socket,message,1,0);
118 devs[0].sensors[a].typeOutput=message[0];
125 int checkDeviceSockTCPImpl (
unsigned char* addr)
127 unsigned int ad = (addr[0] << 8) + addr[1];
129 if(ad == 35 || ad == 5 || ad == 500)
134 void msgToDeviceSockTCPImpl (
unsigned char* addr,
unsigned char sizeData,
unsigned char* data)
136 unsigned char msg[256];
139 copyArray(addr,converter.byte,UNISASA_SIZE_IPV4);
140 unsigned int sockInt = converter.integer;
141 msg[0] = MSG_TO_DEVICE;
142 send(sockInt,msg,SIZE_OPERATION,0);
143 send(sockInt,data,sizeData,0);
146 void msgAndAnswerToDeviceSockTCPImpl (
unsigned char* addr,
unsigned char sizeReqAns,
unsigned char* request,
unsigned char* answer)
148 unsigned char msg[256];
151 copyArray(addr,converter.byte,UNISASA_SIZE_IPV4);
152 unsigned int sockInt = converter.integer;
153 msg[0] = MSG_AND_ANSWER_TO_DEVICE;
154 send(sockInt,msg,SIZE_OPERATION,0);
155 send(sockInt,request,sizeReqAns,0);
157 recv(sockInt,answer,sizeReqAns,0);
160 void getSensorValueSockTCPImpl (
unsigned char* addr,
unsigned char sizeIDSen,
unsigned char* IDSen,
unsigned char sizeValue,
unsigned char* value)
162 unsigned char msg[256];
165 copyArray(addr,converter.byte,UNISASA_SIZE_IPV4);
166 unsigned int sockInt = converter.integer;
167 msg[0] = GET_SENSOR_VALUE;
168 send(sockInt,msg,SIZE_OPERATION,0);
169 send(sockInt,IDSen,sizeIDSen,0);
171 recv(sockInt,value,sizeValue,0);
174 void setActuatorValueSockTCPImpl (
unsigned char* addr,
unsigned char sizeIDAct,
unsigned char* IDAct,
unsigned char sizeValue ,
unsigned char* value)
176 unsigned char msg[256];
179 copyArray(addr,converter.byte,UNISASA_SIZE_IPV4);
180 unsigned int sockInt = converter.integer;
181 msg[0] = GET_SENSOR_VALUE;
182 send(sockInt,msg,SIZE_OPERATION,0);
183 send(sockInt,IDAct,sizeIDAct,0);
184 send(sockInt,value,sizeValue,0);
188 connectorInterface_t createSocketClientConnector(
const char *IP,
unsigned int port,
int typeSocket)
191 struct sockaddr_in temp;
195 temp.sin_family=AF_INET;
196 temp.sin_port=htons(port);
203 bcopy(h->h_addr,&temp.sin_addr,h->h_length);
205 if(typeSocket == CREATE_TCP)
206 _socket=socket(AF_INET,SOCK_STREAM,0);
208 _socket=socket(AF_INET,SOCK_DGRAM,0);
211 connect(_socket, (
struct sockaddr*) &temp,
sizeof(temp));
216 conn.name =
"SocketTCPConnector";
217 conn.sizeAddress =
sizeof(int);
218 conn.discovery = discoverySockTCPImpl;
219 conn.checkDevice = checkDeviceSockTCPImpl;
220 conn.msgToDevice = msgToDeviceSockTCPImpl;
221 conn.msgAndAnswerToDevice = msgAndAnswerToDeviceSockTCPImpl;
222 conn.getSensorValue = getSensorValueSockTCPImpl;
223 conn.setActuatorValue = setActuatorValueSockTCPImpl;
230 return createSocketClientConnector(IP,port,CREATE_TCP);
235 return createSocketClientConnector(IP,port,CREATE_UDP);