Alisator

Linux Client TCP/IP for Modelica

Sep 2nd, 2016
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <arpa/inet.h>
  7. #include <unistd.h>
  8.  
  9. #include <string.h>
  10.  
  11. double RPI(double val, double m_time) {
  12.  
  13.     // logging
  14.     FILE *log = fopen("/home/czajos/MOS/log.txt", "a+");
  15.     if (log == NULL) {
  16.         return -1;
  17.     }
  18.     // time log
  19.     fprintf(log, "time %f\r\n", m_time);
  20.  
  21.     int sd, portno, n;
  22.     struct sockaddr_in serv_addr;
  23.     struct hostent *server;
  24.    
  25.     char buffer[256];
  26.    
  27.     // Create a socket point
  28.     sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  29.    
  30.     if (sd < 0) {
  31.         fprintf(log, "opening socket FAILED\r\n");
  32.         return 1;
  33.     }
  34.    
  35.     // setup socket
  36.     serv_addr.sin_family = AF_INET;
  37.     serv_addr.sin_addr.s_addr = inet_addr("192.168.0.14");
  38.     serv_addr.sin_port = htons(8888);
  39.  
  40.     // connect
  41.     if (connect(sd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
  42.         fprintf(log, "connecting FAILED\r\n");
  43.         return 1;
  44.     }
  45.    
  46.     // turn led on/off depending on the value
  47.     int slen = sprintf(buffer, "%d", (int)(val) % 2) + 1;
  48.  
  49.     // send value to RPI
  50.     int bwrote = write(sd, buffer, slen);
  51.     if (bwrote < 0) {
  52.         fprintf(log, "writing to socket FAILED\r\n");
  53.     }
  54.     // shutdown write ops.
  55.     shutdown(sd, SHUT_WR);
  56.  
  57.     // receive RPI temperature
  58.     double temp = -1;
  59.     int bread = read(sd, buffer, 256);
  60.     if (bread > 0) {
  61.         fprintf(log, "%d received\r\n", bread);
  62.         temp = atof(buffer);
  63.     } else if (bread == 0) {
  64.         fprintf(log, "none received\r\n");
  65.     } else {
  66.         fprintf(log, "receive FAILED\r\n");
  67.     }
  68.  
  69.     // shutdown read ops.
  70.     shutdown(sd, SHUT_RD);
  71.     // close socket
  72.     int result = close(sd);
  73.     if (result == 0) {
  74.         fprintf(log, "close OK\r\n");
  75.     } else {
  76.         fprintf(log, "close FAILED\r\n");
  77.     }
  78.    
  79.     // optional sleep
  80.     usleep(100*1000);
  81.    
  82.     // return temperature
  83.     return temp;
  84. }
Add Comment
Please, Sign In to add comment