Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | None | 0 0
  1. #include <iostream>
  2. #include <pigpio.h>
  3. #include <topic.hpp>
  4. #include <structs.h>
  5.  
  6. int main(int argc, const char *argv[]) {
  7.  
  8.     std::cout << "start daemon" << std::endl;
  9.  
  10.     std::string service_name = "/gpiod";
  11.     auto handler = service::create_async_server<8, 4>(service_name, 10, 10);
  12.  
  13.     if (nullptr == handler) return -1;
  14.  
  15.     if (gpioInitialise() < 0) {
  16.         std::cout << "init failed" << std::endl;
  17.     } else {
  18.         std::cout << "init ok" << std::endl;
  19.  
  20.         while (!tpc::interrupted) {
  21.  
  22.             auto q = handler->wait_request();
  23.             if (nullptr == q) continue;
  24.  
  25.             if (sizeof(gpio_struct) < q->size()) continue;
  26.  
  27.             auto msg = (gpio_struct *) q->data();
  28.  
  29.             switch (msg->fname) {
  30.                 case (0x00): {
  31.                     auto result = gpioInitialise();
  32.                     if (q->requires_answer()) q->answer(&result, sizeof(result));
  33.                     break;
  34.                 }
  35.                 case (0x01): {
  36.                     auto result = gpioSetMode(msg->int_arg[0], msg->int_arg[1]);
  37.                     if (q->requires_answer()) q->answer(&result, sizeof(result));
  38.                     break;
  39.                 }
  40.                 case (0x02): {
  41.                     auto result = gpioWrite(msg->int_arg[0], msg->int_arg[1]);
  42.                     if (q->requires_answer()) q->answer(&result, sizeof(result));
  43.                     break;
  44.                 }
  45.                 case (0x03): {
  46.                     gpioTerminate();
  47.                     break;
  48.                 }
  49.                 default:
  50.                     break;
  51.             }
  52.         }
  53.     }
  54.     std::cout << "terminate daemon" << std::endl;
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement