void* init_socket(void* ptr)
{
- // Hmm, I dunno. Socket stuff, I guess;
+#define STRING_BUFF_SIZE 256
+ // Socket stuff
struct sockaddr_in addr_srv;
struct sockaddr_in addr_client;
int port = 55555;
int yes = 1;
// For reading from socket
- char read_buffer[256];
+ char read_buffer[STRING_BUFF_SIZE];
int received_length = 0;
// For parsing read instructions
- int reg;
+ char reg[STRING_BUFF_SIZE+1];
int val;
+ // ----
+ int status;
+
mf624_state_t* dev = (mf624_state_t*) ptr;
// If no client connected, we will know about it
}
- memset(read_buffer, '\0', 256);
+ memset(read_buffer, '\0', STRING_BUFF_SIZE);
while(1) {
//FIXME what if the socket was closed from client? We get no error message
- received_length = read(dev->socket_tmp, read_buffer, 255);
+ received_length = read(dev->socket_tmp, read_buffer, STRING_BUFF_SIZE-1);
if (received_length < 0) {
perror("read()");
goto exit_close;
//FIXME For client it is not possible to reconnect
goto exit_close;
}
- //printf("rec: [%s]\n", read_buffer);
- //FIXME possible buffer overflow!
- sscanf(read_buffer, "%u=%u", ®, &val);
- printf("reg = %d; val = %d\n", reg, val);
+
+ // REG has "same size +1" as READ_BUFFER to avoid buffer overflow
+ status = sscanf(read_buffer, "%[A-Z]=%u", reg, &val);
+ if (status == 2) {
+ if(!strcmp(reg, "DIN")) {
+ dev->BAR2.DIN = val;
+ }
+ else if(!strcmp(reg, "ADDATA")) {
+ dev->real_world_AD[0] = val;
+ }
+ else if(!strcmp(reg, "ADDATA1")) {
+ dev->real_world_AD[1] = val;
+ }
+ else if(!strcmp(reg, "ADDATA2")) {
+ dev->real_world_AD[2] = val;
+ }
+ else if(!strcmp(reg, "ADDATA3")) {
+ dev->real_world_AD[3] = val;
+ }
+ else if(!strcmp(reg, "ADDATA4")) {
+ dev->real_world_AD[4] = val;
+ }
+ else if(!strcmp(reg, "ADDATA5")) {
+ dev->real_world_AD[5] = val;
+ }
+ else if(!strcmp(reg, "ADDATA6")) {
+ dev->real_world_AD[6] = val;
+ }
+ else if(!strcmp(reg, "ADDATA7")) {
+ dev->real_world_AD[7] = val;
+ }
+ else {
+ printf("reg = %s; val = %d\n", reg, val);
+ }
+ }
}