你好,我想知道是否有方法分辨USB连接是否断开。我现在正在使用suspend的事件,但一旦遇到需要远程唤醒的时候,suspend和断开这两种事件就无法分开了。想请问一下是否有什么方法可以分辨这两种情况?
还有就是我这边正在尝试将蓝牙低功耗模式和USB一起使用,具体的方案是在检测到USB断开后就进入低功耗模式,而连接上后重新启用USB并不再进入低功耗模式。我现在使用的代码片段如下,这段代码在部分设备上可以正常工作而部分设备上无法正确识别USB设备,想请问一下代码逻辑是否正确?
static void before_lowpower() { // Disable USB R8_UDEV_CTRL = 0; R8_USB_CTRL = 0; // 监听USB GPIO状态,如果接入则唤醒设备 GPIO_ConfBit(USB_PIN, GPIO_ModeIN_PU); GPIO_ItBit(USB_PIN, GPIO_ITMode_FallEdge); } static void after_lowpower() { // 检查USB是否接入,如果接入则尝试重新初始化USB if (!GPIO_ReadBit(USB_PIN)) { // Reset USB SIE R8_USB_CTRL |= RB_UC_RESET_SIE | RB_UC_CLR_ALL; R8_USB_CTRL &= ~(RB_UC_RESET_SIE | RB_UC_CLR_ALL); USB_DeviceInit(); } } /** * @brief 处理LowPower事件 * * @param time * @return uint32_t */ uint32_t LowPowerHandler(uint32_t time) { // 在USB工作的情况下,不能进入芯片的睡眠模式 if (!usb_is_connected) { before_lowpower(); uint32_t fail = CH57X_LowPower(time); // 睡眠后由于掉电,部分外设需要重新初始化。 after_lowpower(); return fail; } // 没有睡眠,ref: http://www.wch.cn/bbs/thread-73139-1.html return 1; }