Advertisement
zhivko

Untitled

Oct 21st, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.94 KB | None | 0 0
  1. component udp "Connects to laser esp8266 of laser distance sensor (ODSL 9/D26-450-S12 - Optical distance sensor)";
  2.  
  3. //http://www.leuze.com/selector/ci_pages/downloads.php?supplier_aid=50111159&key=9f0f255e2c9fb97529e5d7196847f76a174a9a206b9ec072f3d0228255151e6f
  4.  
  5. pin in float pos_cmd0;
  6. pin in float pos_cmd1;
  7. pin in float pos_cmd2;
  8.  
  9. pin out float pos_fb0;
  10. pin out float pos_fb1;
  11. pin out float pos_fb2;
  12.  
  13. instanceparam int pincount = 6;
  14.  
  15. option MAXCOUNT 16;
  16.  
  17. function _;
  18.  
  19. option extra_inst_setup yes;
  20. variable int sockfd;
  21.  
  22. author "test";
  23. license "GPL"; // indicates GPL v2 or later
  24. ;;
  25. #define MAX_DEV 3
  26.  
  27. RTAPI_MP_ARRAY_STRING(ip, MAX_DEV, "IP of sensor")
  28. RTAPI_MP_ARRAY_INT(port, MAX_DEV, "UDP port")
  29.  
  30. #include <arpa/inet.h>
  31. #include <ifaddrs.h>
  32. EXTRA_INST_SETUP(){
  33.     rtapi_print("hallo\n");
  34.  
  35.     int ret;
  36.  
  37.     sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
  38.     if (sockfd < 0) {
  39.         rtapi_print("ERROR: can't open socket: %s\n", strerror(errno));
  40.         return -errno;
  41.     }
  42.  
  43.     struct sockaddr_in server_addr;
  44.     struct sockaddr_in local_addr;
  45.  
  46.     server_addr.sin_family = AF_INET;
  47.     server_addr.sin_port = htons(port[extra_arg]);
  48.     server_addr.sin_addr.s_addr = inet_addr(ip[extra_arg]);
  49.  
  50.     local_addr.sin_family      = AF_INET;
  51.     local_addr.sin_addr.s_addr = INADDR_ANY;
  52.  
  53.     ret = connect(sockfd, (struct sockaddr *) &server_addr, sizeof(struct sockaddr_in));
  54.     if (ret < 0) {
  55.         rtapi_print("ERROR: can't connect: %s\n", strerror(errno));
  56.         return -errno;
  57.     }
  58.  
  59.    
  60.  
  61.     struct timeval timeout;
  62.     timeout.tv_sec = 0;
  63.     timeout.tv_usec = 10;
  64.  
  65.     ret = setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));
  66.     if (ret < 0) {
  67.         rtapi_print("ERROR: can't set socket option: %s\n", strerror(errno));
  68.         return -errno;
  69.     }
  70.  
  71.     timeout.tv_usec = 10;
  72.     setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout));
  73.     if (ret < 0) {
  74.         rtapi_print("ERROR: can't set socket option: %s\n", strerror(errno));
  75.         return -errno;
  76.     }
  77.  
  78.  
  79.     return 0;
  80. }
  81.  
  82. FUNCTION(_) {
  83.     pos_fb0 = pos_cmd0;
  84.     pos_fb1 = pos_cmd1;
  85.     pos_fb2 = pos_cmd2;
  86.     uint8_t buf[16];
  87.  
  88.     buf[0] = 0x01;
  89.     buf[1] = 0x42;
  90.     buf[2] = 0x00;
  91.     buf[3] = 0x01;
  92.  
  93.     int ret = send(sockfd,buf,4,0);
  94.     if (ret < 0) {
  95.         rtapi_print("send fail %s\n", strerror(errno));
  96.     }
  97. }
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112. Error:
  113. machinekit@beaglebone:~$ instcomp --install ./components/udp.icomp
  114. Compiling realtime udp.c
  115. In file included from /home/machinekit/git/machinekit/include/rtapi.h:1027:0,
  116.                  from udp.c:4:
  117. ./components/udp.icomp:27:23: error: ‘ip’ undeclared here (not in a function)
  118. /home/machinekit/git/machinekit/include/rtapi_export.h:32:30: note: in definition of macro ‘MODULE_INFO2’
  119.      t rtapi_info_##a##_##b = c; EXPORT_SYMBOL(rtapi_info_##a##_##b);
  120.                               ^
  121. /home/machinekit/git/machinekit/include/rtapi.h:1067:3: note: in expansion of macro ‘MODULE_PARM’
  122.    MODULE_PARM(var,"1-" RTAPI_STRINGIFY(num) "s");  \
  123.    ^
  124. ./components/udp.icomp:27:1: note: in expansion of macro ‘RTAPI_MP_ARRAY_STRING’
  125. ./components/udp.icomp:28:20: error: ‘port’ undeclared here (not in a function)
  126. /home/machinekit/git/machinekit/include/rtapi_export.h:32:30: note: in definition of macro ‘MODULE_INFO2’
  127.      t rtapi_info_##a##_##b = c; EXPORT_SYMBOL(rtapi_info_##a##_##b);
  128.                               ^
  129. /home/machinekit/git/machinekit/include/rtapi.h:1059:3: note: in expansion of macro ‘MODULE_PARM’
  130.    MODULE_PARM(var,"1-" RTAPI_STRINGIFY(num) "i");  \
  131.    ^
  132. ./components/udp.icomp:28:1: note: in expansion of macro ‘RTAPI_MP_ARRAY_INT’
  133. ./components/udp.icomp: In function ‘extra_inst_setup’:
  134. ./components/udp.icomp:47:36: error: ‘extra_arg’ undeclared (first use in this function)
  135. ./components/udp.icomp:47:36: note: each undeclared identifier is reported only once for each function it appears in
  136. /home/machinekit/git/machinekit/src/Makefile.modinc:123: recipe for target 'udp.o' failed
  137. make: *** [udp.o] Error 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement