Использование состояния gpio в условии if - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть функция, и внутри этой функции я использую usleep ().Однако я хотел бы использовать usleep () только при условии, что определенный gpio имеет значение ноль.Вот код, который у меня есть:

const char *const amplifierGPIO = "/sys/class/gpio/gpio107/value";
const char *const hardwareID = "/sys/class/gpio/gpiox/value";

    bool isWM8750()
    {
      std::ifstream id(hardwareID);
      if (id.is_open())
      {
        const char *const value;
        id >> value;

        if (value == "0")
        {
          return true;
        }
      }
      return false;
    }

    void amplifierUnmute()
    {
      std::ofstream amp(amplifierGPIO);
      if (amp.is_open())
      {
        amp << "1";
        amp.close();
      }

      if(isWM8750())
      {
        usleep(50000);
      }
    }

Я получаю сообщение об ошибке, не знаю, как решить:

sound_p51.cpp:38: error: no match for 'operator>>' in 'id >> value'
sound_p51.cpp:40: warning: comparison with string literal results in unspecified behaviour

1 Ответ

0 голосов
/ 13 февраля 2019

Вы пытаетесь поместить данные в переменную const char * const.Const char * const - это указатель на строку, где указатель не может измениться, а строковые данные, на которые он указывает, не могут измениться, следовательно, const

Предупреждение связано с тем, что нет перегруженного оператора == для const char *.Для этого типа сравнения обычно вы будете использовать strcmp().

Однако, поскольку вы используете c ++, вы, вероятно, захотите использовать std::string, который должен решить оба упомянутых компилятора.такие сообщения:

#include <string>
// ...
bool isWM8750()
    {
      std::ifstream id(hardwareID);
      if (id.is_open())
      {
        std::string value;
        id >> value;
        id.close();

        if (value == "0")
        {
          return true;
        }
      }
      return false;
    }

Еще несколько примеров с Raspberry Pi gpios здесь: http://www.hertaville.com/introduction-to-accessing-the-raspberry-pis-gpio-in-c.html

...