Android-Things:将gpiocallback函数迁移到suspendcoroutine函数
Android-Things: Migrate gpiocallback functions to suspendcoroutine functions
按照下图中的例子,我想将一个带有回调的函数迁移到一个 SuspendeCoroutine 函数:
1) 是否可以将下面的代码转置为SuspendCoroutine? (请问为什么可能有库预留码,输入:onGpioEdge and 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)
}
}
}
这是一个有趣的想法,但我不确定协程是否最适合 GPIO。
协程非常适合 return 值的异步操作,例如 API 调用。 GPIO 更像是随时可能发生的监听器,它是一种不同类型的回调。我会将其与 onClickListeners 进行比较,但我认为它们也不适合协程。
按照下图中的例子,我想将一个带有回调的函数迁移到一个 SuspendeCoroutine 函数:
1) 是否可以将下面的代码转置为SuspendCoroutine? (请问为什么可能有库预留码,输入:onGpioEdge and 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)
}
}
}
这是一个有趣的想法,但我不确定协程是否最适合 GPIO。
协程非常适合 return 值的异步操作,例如 API 调用。 GPIO 更像是随时可能发生的监听器,它是一种不同类型的回调。我会将其与 onClickListeners 进行比较,但我认为它们也不适合协程。