Android -Вещи: перенос функций gpiocallback для приостановки функций - PullRequest
0 голосов
/ 20 апреля 2020

Следуя примеру на фотографии ниже, я хочу перенести функцию с обратным вызовом в функцию SuspendeCoroutine:

Example migration callback function to coroutine function

1) Можно ли перенести приведенный ниже код в SuspendCoroutine? (Я спрашиваю, почему могут быть зарезервированные коды из библиотеки, введите: onGpioEdge и registerGpioCallback.

2) Как я могу это сделать?

class ButtonActivity : Activity() {
  // GPIO port wired to the button
  private lateinit var buttonGpio: Gpio
  // Step 4. Register an event callback.
  private val callback = object : GpioCallback() {
    fun onGpioEdge(gpio: Gpio): Boolean {
      Log.i(TAG, "GPIO changed, button pressed")
      // Step 5. Return true to keep callback active.
      return true
    }
  }

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val manager = PeripheralManager.getInstance()
    try {
      // Step 1. Create GPIO connection.
      buttonGpio = manager.openGpio(BUTTON_PIN_NAME)
      // Step 2. Configure as an input.
      buttonGpio.setDirection(Gpio.DIRECTION_IN)
      // Step 3. Enable edge trigger events.
      buttonGpio.setEdgeTriggerType(Gpio.EDGE_FALLING)
      // Step 4. Register an event callback.
      buttonGpio.registerGpioCallback(mCallback)
    } catch (e: IOException) {
      Log.e(TAG, "Error on PeripheralIO API", e)
    }
  }

  override fun onDestroy() {
    super.onDestroy()
    // Step 6. Close the resource
    if (buttonGpio != null)
    {
      buttonGpio.unregisterGpioCallback(mCallback)
      try {
        buttonGpio.close()
      } catch (e: IOException) {
        Log.e(TAG, "Error on PeripheralIO API", e)
      }
    }
  }

1 Ответ

0 голосов
/ 21 апреля 2020

Это интересная идея, но я не уверен, что сопрограммы лучше всего подходят для GPIO.

Сопрограммы отлично работают для асинхронных операций, которые возвращают значение, таких как вызовы API. GPIO - это больше всего слушатель, который может произойти в любое время, это другой тип обратного вызова. Я бы сравнил его с onClickListeners, и я не думаю, что они также подходят для сопрограмм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...