diff --git a/threadnetwork/aidl/default/main.cpp b/threadnetwork/aidl/default/main.cpp index 26683bf079..6514184f77 100644 --- a/threadnetwork/aidl/default/main.cpp +++ b/threadnetwork/aidl/default/main.cpp @@ -18,7 +18,11 @@ #include #include #include +#include +#include #include +#include +#include #include "service.hpp" #include "thread_chip.hpp" @@ -26,6 +30,8 @@ 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" + namespace { void addThreadChip(int id, const char* url) { binder_status_t status; @@ -41,14 +47,36 @@ void addThreadChip(int id, const char* url) { status = AServiceManager_addService(threadChip->asBinder().get(), serviceName.c_str()); CHECK_EQ(status, STATUS_OK); } + +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); + addThreadChip(0, url.c_str()); +} } int main(int argc, char* argv[]) { - CHECK_GT(argc, 1); aidl::android::hardware::threadnetwork::Service service; - for (int id = 0; id < argc - 1; id++) { - addThreadChip(id, argv[id + 1]); + if (argc > 1) { + for (int id = 0; id < argc - 1; id++) { + addThreadChip(id, argv[id + 1]); + } + } else { + struct stat sb; + + CHECK_EQ(stat(THREADNETWORK_COPROCESSOR_SIMULATION_PATH, &sb), 0); + CHECK(sb.st_mode & S_IXUSR); + addSimulatedThreadChip(); } ALOGI("Thread Network HAL is running"); diff --git a/threadnetwork/aidl/default/threadnetwork-service.rc b/threadnetwork/aidl/default/threadnetwork-service.rc index 3b889eb23a..a2ac0f718e 100644 --- a/threadnetwork/aidl/default/threadnetwork-service.rc +++ b/threadnetwork/aidl/default/threadnetwork-service.rc @@ -1,3 +1,3 @@ -service vendor.threadnetwork_hal /apex/com.android.hardware.threadnetwork/bin/hw/android.hardware.threadnetwork-service spinel+hdlc+forkpty:///apex/com.android.hardware.threadnetwork/bin/ot-rcp?forkpty-arg=1 +service vendor.threadnetwork_hal /apex/com.android.hardware.threadnetwork/bin/hw/android.hardware.threadnetwork-service class hal user thread_network