9 unsigned char byte[MAX_NUM_DEVICES];
13 unsigned int _numConnectors=0;
18 unsigned char _getBytesNumDevices()
20 unsigned char size = 0;
23 for(i=0; i<MAX_BYTES_ID_DEVICES;i++)
24 if(_numDevices.byte[i] != 0)
30 void _reverseArray(
unsigned char *src,
unsigned int sizeSrc,
unsigned char *dest)
48 void _reverseSingleArray(
unsigned char *array,
unsigned int size)
70 _numDevices.integer=0;
77 for(i=0;i<MAX_NUM_DEVICES;i++)
80 _devices[i].sensors=Ss;
81 int *indexS= (
int*) malloc(
sizeof(
int) * MAX_NUM_SENSORS);
82 _devices[i].indexSensors=indexS;
85 _devices[i].actuators=Ac;
86 int *indexA = (
int*) malloc(
sizeof(
int) * MAX_NUM_ACTUATORS);
87 _devices[i].indexActuators=indexA;
93 for(i=0;i<MAX_NUM_DEVICES_DISCOVERY;i++)
96 _discoveredDevices[i].sensors=Ss;
98 _discoveredDevices[i].actuators=Ac;
107 _connectors[ _numConnectors ]=newConnector;
114 unsigned int c=0,d=0, numDiscovered=0, s=0, a=0;
115 for(c=0;c < _numConnectors;c++)
117 numDiscovered = _connectors[c].discovery(_discoveredDevices);
118 for(d=0; d < numDiscovered; d++)
120 _devices[_numDevices.integer].ID.integer = _numDevices.integer;
121 _devices[_numDevices.integer].connector = _connectors[c];
122 _devices[_numDevices.integer].address.integer= _discoveredDevices[d].address.integer;
123 _devices[_numDevices.integer].sizeIO = _discoveredDevices[d].sizeIODevice;
125 _devices[_numDevices.integer].sizeIDSensor = _discoveredDevices[d].sizeIDSensor;
126 _devices[_numDevices.integer].numSensors.integer = _discoveredDevices[d].numSensors;
128 for(s=0;s<_discoveredDevices[d].numSensors;s++)
130 _devices[_numDevices.integer].sensors[s].ID = _discoveredDevices[d].sensors[s].ID;
131 _reverseSingleArray(_devices[_numDevices.integer].sensors[s].ID.byte,_devices[_numDevices.integer].sizeIDSensor);
133 _devices[_numDevices.integer].sensors[s].typeSensor = _discoveredDevices[d].sensors[s].typeSensor;
134 _reverseSingleArray(_devices[_numDevices.integer].sensors[s].typeSensor.byte,SIZE_TYPE_SENSOR);
136 _devices[_numDevices.integer].sensors[s].sizeOutput = _discoveredDevices[d].sensors[s].sizeOutput;
138 _devices[_numDevices.integer].sensors[s].typeOutput = _discoveredDevices[d].sensors[s].typeOutput;
140 _devices[_numDevices.integer].indexSensors[_discoveredDevices[d].sensors[s].ID.integer] = s;
143 _devices[_numDevices.integer].sizeIDActuator = _discoveredDevices[d].sizeIDActuator;
144 _devices[_numDevices.integer].numActuators.integer = _discoveredDevices[d].numActuators;
146 for(a=0; a < _discoveredDevices[d].numActuators; a++)
148 _devices[_numDevices.integer].actuators[a].ID = _discoveredDevices[d].actuators[a].ID;
149 _reverseSingleArray(_devices[_numDevices.integer].actuators[a].ID.byte,_devices[_numDevices.integer].sizeIDActuator);
151 _devices[_numDevices.integer].actuators[a].typeActuator = _discoveredDevices[d].actuators[a].typeActuator;
152 _reverseSingleArray(_devices[_numDevices.integer].actuators[a].typeActuator.byte,SIZE_TYPE_ACTUATOR);
154 _devices[_numDevices.integer].actuators[a].sizeInput = _discoveredDevices[d].actuators[a].sizeInput;
156 _devices[_numDevices.integer].actuators[a].typeInput = _discoveredDevices[d].actuators[a].typeInput;
158 _devices[_numDevices.integer].indexActuators[_discoveredDevices[d].actuators[a].ID.integer] = a;
161 _numDevices.integer++;
299 return _numDevices.integer;
306 for(i=0; i< _numDevices.integer; i++)
308 if(_devices[i].connector.checkDevice(_devices[i].address.byte) == 0)
321 for(i=0;i < MAX_NUM_DEVICES; i++)
323 for(i=0;i < MAX_NUM_DEVICES_DISCOVERY; i++)
324 free(&_discoveredDevices[i]);
333 struct sockaddr_in temp;
335 printf(
"Starting Gateway...\n");
338 sock=socket(AF_INET,SOCK_STREAM,0);
341 temp.sin_family=AF_INET;
342 temp.sin_addr.s_addr=INADDR_ANY;
343 temp.sin_port=htons(port);
349 bind(sock,(
struct sockaddr*) &temp,
sizeof(temp));
351 listen(sock,SIZE_REQUEST_QUEUE);
358 printf(
"Closing Gateway...\n");
367 printf(
"Waiting connections...\n");
368 while ( (client_socket=accept(_df_socket,0,0)) < 0 )
371 return client_socket;
389 if ((read_bytes=read(client_socket,message.byte,1))<0)
391 printf(
"error reading data\n");
393 else if(read_bytes == 0)
395 printf(
"Read 0 byte\n");
399 switch(message.byte[0])
422 printf(
"Get Devices\n");
424 message.byte[0] = _getBytesNumDevices();
425 write(client_socket,message.byte,_getBytesNumDevices());
427 _reverseArray(_numDevices.byte, _getBytesNumDevices(), message.byte);
428 write(client_socket, message.byte, _getBytesNumDevices());
431 for(d=0; d < _numDevices.integer; d++)
434 _reverseArray(_devices[d].ID.byte, _getBytesNumDevices(), message.byte);
435 write(client_socket, message.byte, _getBytesNumDevices());
437 message.byte[0] = _devices[d].sizeIO;
438 write(client_socket, message.byte ,1);
441 message.byte[0] = _devices[d].sizeIDSensor;
442 write(client_socket, message.byte ,1);
444 _reverseArray(_devices[d].numSensors.byte, _devices[d].sizeIDSensor , message.byte);
445 write(client_socket, message.byte, _devices[d].sizeIDSensor);
448 for(s=0;s<_devices[d].numSensors.integer;s++)
450 _reverseArray(_devices[d].sensors[s].ID.byte, _devices[d].sizeIDSensor, message.byte);
451 write(client_socket, message.byte, _devices[d].sizeIDSensor);
453 _reverseArray( _devices[d].sensors[s].typeSensor.byte, SIZE_TYPE_SENSOR, message.byte);
454 write(client_socket, message.byte, SIZE_TYPE_SENSOR);
456 message.byte[0] = _devices[d].sensors[s].sizeOutput;
457 write(client_socket, message.byte, 1);
459 message.byte[0] = _devices[d].sensors[s].typeOutput;
460 write(client_socket, message.byte, 1);
465 message.byte[0] = _devices[d].sizeIDActuator;
466 write(client_socket, message.byte ,1);
468 _reverseArray(_devices[d].numActuators.byte, _devices[d].sizeIDActuator , message.byte);
469 write(client_socket, message.byte, _devices[d].sizeIDActuator);
472 for(a=0;a<_devices[d].numActuators.integer;a++)
474 _reverseArray(_devices[d].actuators[a].ID.byte, _devices[d].sizeIDActuator, message.byte);
475 write(client_socket, message.byte, _devices[d].sizeIDActuator);
477 _reverseArray( _devices[d].actuators[a].typeActuator.byte, SIZE_TYPE_ACTUATOR, message.byte);
478 write(client_socket, message.byte, SIZE_TYPE_ACTUATOR);
480 message.byte[0] = _devices[d].actuators[a].sizeInput;
481 write(client_socket, message.byte, 1);
483 message.byte[0] = _devices[d].actuators[a].typeInput;
484 write(client_socket, message.byte, 1);
489 case GET_SENSOR_VALUE:
490 printf(
"get sensor value\n");
493 read(client_socket, message.byte, _getBytesNumDevices());
495 _reverseArray(message.byte, _getBytesNumDevices(), iddevice.byte);
496 curr_dev = _devices[iddevice.integer];
498 read(client_socket, message.byte, curr_dev.sizeIDSensor);
500 _reverseArray(message.byte, _devices[iddevice.integer].sizeIDSensor, idsensor.byte);
501 curr_sen = curr_dev.sensors[curr_dev.indexSensors[idsensor.integer]];
503 curr_dev.connector.getSensorValue(curr_dev.address.byte,curr_dev.sizeIDSensor,curr_sen.ID.byte,curr_sen.sizeOutput,message.byte);
504 write(client_socket,message.byte,curr_sen.sizeOutput);
506 case SET_ACTUATOR_VALUE:
507 printf(
"set actuator value\n");
508 read(client_socket,message.byte,_getBytesNumDevices());
510 _reverseArray(message.byte, _getBytesNumDevices(), iddevice.byte);
511 curr_dev = _devices[iddevice.integer];
513 read(client_socket, message.byte, curr_dev.sizeIDActuator);
514 idactuator.integer=0;
515 _reverseArray(message.byte, _devices[iddevice.integer].sizeIDActuator, idactuator.byte);
516 curr_act = curr_dev.actuators[curr_dev.indexActuators[idactuator.integer]];
518 read(client_socket, message.byte, curr_act.sizeInput);
519 curr_dev.connector.setActuatorValue(curr_dev.address.byte, curr_dev.sizeIDActuator, curr_act.ID.byte, curr_act.sizeInput,message.byte);
522 printf(
"msg to device\n");
523 read(client_socket,message.byte,_getBytesNumDevices());
525 _reverseArray(message.byte, _getBytesNumDevices(), iddevice.byte);
526 curr_dev = _devices[iddevice.integer];
528 read(client_socket, message.byte, curr_dev.sizeIO);
529 curr_dev.connector.msgToDevice(curr_dev.address.byte, curr_dev.sizeIO, message.byte);
531 case MSG_AND_ANSWER_TO_DEVICE:
532 printf(
"msg to device and answer\n");
533 read(client_socket,message.byte,_getBytesNumDevices());
535 _reverseArray(message.byte, _getBytesNumDevices(), iddevice.byte);
536 curr_dev = _devices[iddevice.integer];
538 read(client_socket, message.byte, curr_dev.sizeIO);
539 curr_dev.connector.msgAndAnswerToDevice(curr_dev.address.byte, curr_dev.sizeIO, message.byte,answer.byte);
540 write(client_socket, answer.byte, curr_dev.sizeIO);
542 case CLOSE_TCP_CONNECTION:
543 printf(
"close tcp connectio\n");
551 close(client_socket);
void create_tcp_server(unsigned int port)
void addConnector(connectorInterface_t newConnector)
void discoveryAndCreateTable()
void load_table(char *path)
unsigned int getNumDevices()
void client_communication(int client_sock)