Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/ctrlm.h
Original file line number Diff line number Diff line change
Expand Up @@ -508,6 +508,7 @@ void ctrlm_update_last_key_info(int controller_id, ctrlm_key_source_t sou
ctrlm_irdb_interface_t* ctrlm_main_irdb_get();
ctrlm_auth_t* ctrlm_main_auth_get();
void ctrlm_main_auth_start_poll();
void ctrlm_main_network_ready_list_get(std::vector<ctrlm_obj_network_t *> *networks);
std::string ctrlm_device_id_get();
std::string ctrlm_stb_name_get();
std::string ctrlm_device_mac_get();
Expand Down
22 changes: 22 additions & 0 deletions src/ctrlm_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -877,6 +877,28 @@ void ctrlm_main_ir_last_keypress_get(ctrlm_ir_last_keypress_t *last_key_info) {
}
}

void ctrlm_main_network_ready_list_get(std::vector<ctrlm_obj_network_t *> *networks) {
if (NULL == networks) {
XLOGD_ERROR("NULL parameter");
return;
}

if (g_ctrlm.main_thread != g_thread_self ()) {
XLOGD_ERROR("not called from ctrlm_main_thread!!!!!");
if(!ctrlm_is_production_build()) {
g_assert(0);
}
return;
}

networks->clear();
for (auto const &network_it : g_ctrlm.networks) {
if (network_it.second && network_it.second->is_ready()) {
networks->push_back(network_it.second);
}
}
}

void ctrlm_utils_sem_wait(){
sem_wait(&g_ctrlm.ctrlm_utils_sem);
}
Expand Down
47 changes: 45 additions & 2 deletions src/ipc/ctrlm_rcp_ipc_iarm_thunder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

#include "algorithm"
#include "ctrlm_rcp_ipc_iarm_thunder.h"
#include "ctrlm.h"
#include "ctrlm_network.h"
#include "ctrlm_log.h"
#include <uuid/uuid.h>
Expand Down Expand Up @@ -115,10 +116,52 @@ bool ctrlm_rcp_ipc_iarm_thunder_t::on_status(const ctrlm_rcp_ipc_net_status_t &n
return(false);
}

json_t *ret = json_object();
json_t *ret = json_object();
json_t *status = json_object();
json_t *net_type_supported = json_array();
json_t *remote_array = json_array();
std::vector<ctrlm_obj_network_t *> networks;
std::vector<ctrlm_rcp_ipc_controller_status_t> remotes;

ctrlm_network_type_t type = CTRLM_NETWORK_TYPE_INVALID;
ctrlm_ir_state_t ir_prog_state = CTRLM_IR_STATE_UNKNOWN;
ctrlm_rf_pair_state_t rf_pair_state = CTRLM_RF_PAIR_STATE_UNKNOWN;
int err = 0;

err |= json_object_set_new_nocheck(ret, STATUS, net_status.to_json());
ctrlm_main_network_ready_list_get(&networks);

for (auto const &it : ctrlm_network_types_get()) {
err |= json_array_append_new(net_type_supported, json_integer(it));
}
for (auto *network : networks) {
ctrlm_rcp_ipc_net_status_t network_status;
network_status.populate_status(*network);
network_status.get_controller_status_list(remotes);
}
for (const auto &remote : remotes) {
err |= json_array_append_new(remote_array, remote.to_json());
}
// For now default to RF4CE network reporting if available
for (auto *network : networks) {
ctrlm_rcp_ipc_net_status_t network_status;
network_status.populate_status(*network);

ir_prog_state = network_status.get_ir_prog_state();
rf_pair_state = network_status.get_rf_pair_state();
type = network_status.get_type();

if (type == CTRLM_NETWORK_TYPE_RF4CE) {
break;
}
}

err |= json_object_set_new_nocheck(status, REMOTE_DATA, remote_array);
err |= json_object_set_new_nocheck(status, NET_TYPES_SUPPORTED, net_type_supported);
err |= json_object_set_new_nocheck(status, NET_TYPE, json_integer(type));
err |= json_object_set_new_nocheck(status, IR_PROG_STATE, json_string(ctrlm_ir_state_str(ir_prog_state)));
err |= json_object_set_new_nocheck(status, PAIRING_STATE, json_string(ctrlm_rf_pair_state_str(rf_pair_state)));

err |= json_object_set_new_nocheck(ret, STATUS, status);

if (err) {
XLOGD_ERROR("JSON object set error");
Expand Down
Loading