Rdk-b Integration With Non-native Wi-fi Socs - __top__

They wrote a Python daemon, qca-bridge-d , that listened to Redis (where RDK-B caches its data model), translated Device.WiFi.SSID.1.Enable into dbus-send --system --dest=org.qualcomm.wpa /org/qualcomm/wpa/1 org.qualcomm.wpa.SetEnable boolean:true .

// libHalBridge: Translating Broadcom-style sync calls to nl80211 async int WIFI_HAL_TriggerScan_Shim(char *interface, int freq_list[]) { // Step 1: Convert RDK-B params to nl80211 scan request struct nl_msg *msg = nl80211_cmd_alloc(interface, NL80211_CMD_TRIGGER_SCAN); nla_put_u32(msg, NL80211_ATTR_SCAN_FLAGS, NL80211_SCAN_FLAG_AP); // Step 2: Send async, but block using a conditional variable pthread_mutex_lock(&scan_mutex); scan_complete = 0; nl80211_send(msg); rdk-b integration with non-native wi-fi socs

Using gdb on the target, Mira found the culprit: the CcspWifiSsp thread had a blocking call to WIFI_HAL_GetStationList() that took 800ms on the QCA (because the shim had to dump the entire station table via netlink and translate it). During those 800ms, the main event loop starved. A background scan event arrived, but the HAL mutex was held. Deadlock. They wrote a Python daemon, qca-bridge-d , that

Mira shrugged. "The stack doesn't care about vendor loyalty," she said. "It only cares about the abstraction. Build a good enough bridge, and any chip can sing RDK-B's song." A background scan event arrived, but the HAL mutex was held

After the talk, a Qualcomm architect approached her. "You basically re-invented our internal qca-rdk-adapter ," he said, smiling. "But yours works better."