diff --git a/threadnetwork/aidl/default/main.cpp b/threadnetwork/aidl/default/main.cpp index 6514184f77..1df455eb0f 100644 --- a/threadnetwork/aidl/default/main.cpp +++ b/threadnetwork/aidl/default/main.cpp @@ -18,11 +18,11 @@ #include #include #include -#include -#include -#include #include +#include +#include #include +#include #include "service.hpp" #include "thread_chip.hpp" @@ -30,13 +30,19 @@ using aidl::android::hardware::threadnetwork::IThreadChip; using aidl::android::hardware::threadnetwork::ThreadChip; -#define THREADNETWORK_COPROCESSOR_SIMULATION_PATH "/apex/com.android.hardware.threadnetwork/bin/ot-rcp" +#define THREADNETWORK_COPROCESSOR_SIMULATION_PATH \ + "/apex/com.android.hardware.threadnetwork/bin/ot-rcp" namespace { + +bool isInterfaceExists(const char* interfaceName) { + return if_nametoindex(interfaceName) != 0; +} + void addThreadChip(int id, const char* url) { binder_status_t status; const std::string serviceName(std::string() + IThreadChip::descriptor + "/chip" + - std::to_string(id)); + std::to_string(id)); ALOGI("ServiceName: %s, Url: %s", serviceName.c_str(), url); @@ -50,19 +56,24 @@ void addThreadChip(int id, const char* url) { void addSimulatedThreadChip() { char local_interface[PROP_VALUE_MAX]; - - CHECK_GT(property_get("persist.vendor.otsim.local_interface", - local_interface, "eth1"), 0); - int node_id = property_get_int32("ro.boot.openthread_node_id", 0); - CHECK_GT(node_id,0); - std::string url = std::string("spinel+hdlc+forkpty://" \ - THREADNETWORK_COPROCESSOR_SIMULATION_PATH "?forkpty-arg=-L") \ - + local_interface + "&forkpty-arg=" + std::to_string(node_id); + CHECK_GT(node_id, 0); + + std::string url = std::string("spinel+hdlc+forkpty://" THREADNETWORK_COPROCESSOR_SIMULATION_PATH + "?forkpty-arg=") + + std::to_string(node_id); + + CHECK_GT(property_get("persist.vendor.otsim.local_interface", local_interface, "eth1"), 0); + if (isInterfaceExists(local_interface)) { + url += std::string("&forkpty-arg=-L") + local_interface; + } else { + ALOGI("Interface %s doesn't exist!", local_interface); + } + addThreadChip(0, url.c_str()); } -} +} // namespace int main(int argc, char* argv[]) { aidl::android::hardware::threadnetwork::Service service;