Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <pigpio.h>
- #include <topic.hpp>
- #include <structs.h>
- int main(int argc, const char *argv[]) {
- std::cout << "start daemon" << std::endl;
- std::string service_name = "/gpiod";
- auto handler = service::create_async_server<8, 4>(service_name, 10, 10);
- if (nullptr == handler) return -1;
- if (gpioInitialise() < 0) {
- std::cout << "init failed" << std::endl;
- } else {
- std::cout << "init ok" << std::endl;
- while (!tpc::interrupted) {
- auto q = handler->wait_request();
- if (nullptr == q) continue;
- if (sizeof(gpio_struct) < q->size()) continue;
- auto msg = (gpio_struct *) q->data();
- switch (msg->fname) {
- case (0x00): {
- auto result = gpioInitialise();
- if (q->requires_answer()) q->answer(&result, sizeof(result));
- break;
- }
- case (0x01): {
- auto result = gpioSetMode(msg->int_arg[0], msg->int_arg[1]);
- if (q->requires_answer()) q->answer(&result, sizeof(result));
- break;
- }
- case (0x02): {
- auto result = gpioWrite(msg->int_arg[0], msg->int_arg[1]);
- if (q->requires_answer()) q->answer(&result, sizeof(result));
- break;
- }
- case (0x03): {
- gpioTerminate();
- break;
- }
- default:
- break;
- }
- }
- }
- std::cout << "terminate daemon" << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement