static bool emulator_window_network_toggle(void) { qemu_net_disable = !qemu_net_disable; if (android_modem) { amodem_set_data_registration( android_modem, qemu_net_disable ? A_REGISTRATION_UNREGISTERED : A_REGISTRATION_HOME); } return !qemu_net_disable; }
/* Handles UI control command received from the UI. * Param: * corecmd - CoreCmdImpl instance that received the command. * cmd_header - Command header. * cmd_param - Command data. */ static void _coreCmdImpl_handle_command(CoreCmdImpl* corecmd, const UICmdHeader* cmd_header, const uint8_t* cmd_param) { switch (cmd_header->cmd_type) { case AUICMD_SET_COARSE_ORIENTATION: { UICmdSetCoarseOrientation* cmd = (UICmdSetCoarseOrientation*)cmd_param; android_sensors_set_coarse_orientation(cmd->orient); break; } case AUICMD_TOGGLE_NETWORK: qemu_net_disable = !qemu_net_disable; if (android_modem) { amodem_set_data_registration( android_modem, qemu_net_disable ? A_REGISTRATION_UNREGISTERED : A_REGISTRATION_HOME); } break; case AUICMD_TRACE_CONTROL: { UICmdTraceControl* cmd = (UICmdTraceControl*)cmd_param; if (cmd->start) { start_tracing(); } else { stop_tracing(); } break; } case AUICMD_CHK_NETWORK_DISABLED: { UICmdRespHeader resp; resp.resp_data_size = 0; resp.result = qemu_net_disable; _coreCmdImpl_respond(corecmd, &resp, NULL); break; } case AUICMD_GET_NETSPEED: { UICmdRespHeader resp; UICmdGetNetSpeedResp* resp_data = NULL; UICmdGetNetSpeed* cmd = (UICmdGetNetSpeed*)cmd_param; resp.resp_data_size = 0; resp.result = 0; if (cmd->index >= android_netspeeds_count || android_netspeeds[cmd->index].name == NULL) { resp.result = -1; } else { const NetworkSpeed* netspeed = &android_netspeeds[cmd->index]; // Calculate size of the response data: // fixed header + zero-terminated netspeed name. resp.resp_data_size = sizeof(UICmdGetNetSpeedResp) + strlen(netspeed->name) + 1; // Count in zero-terminated netspeed display. if (netspeed->display != NULL) { resp.resp_data_size += strlen(netspeed->display) + 1; } else { resp.resp_data_size++; } // Allocate and initialize response data buffer. resp_data = (UICmdGetNetSpeedResp*)qemu_malloc(resp.resp_data_size); resp_data->upload = netspeed->upload; resp_data->download = netspeed->download; strcpy(resp_data->name, netspeed->name); if (netspeed->display != NULL) { strcpy(resp_data->name + strlen(resp_data->name) + 1, netspeed->display); } else { strcpy(resp_data->name + strlen(resp_data->name) + 1, ""); } } _coreCmdImpl_respond(corecmd, &resp, resp_data); if (resp_data != NULL) { qemu_free(resp_data); } break; } case AUICMD_GET_NETDELAY: { UICmdRespHeader resp; UICmdGetNetDelayResp* resp_data = NULL; UICmdGetNetDelay* cmd = (UICmdGetNetDelay*)cmd_param; resp.resp_data_size = 0; resp.result = 0; if (cmd->index >= android_netdelays_count || android_netdelays[cmd->index].name == NULL) { resp.result = -1; } else { const NetworkLatency* netdelay = &android_netdelays[cmd->index]; // Calculate size of the response data: // fixed header + zero-terminated netdelay name. resp.resp_data_size = sizeof(UICmdGetNetDelayResp) + strlen(netdelay->name) + 1; // Count in zero-terminated netdelay display. if (netdelay->display != NULL) { resp.resp_data_size += strlen(netdelay->display) + 1; } else { resp.resp_data_size++; } // Allocate and initialize response data buffer. resp_data = (UICmdGetNetDelayResp*)qemu_malloc(resp.resp_data_size); resp_data->min_ms = netdelay->min_ms; resp_data->max_ms = netdelay->max_ms; strcpy(resp_data->name, netdelay->name); if (netdelay->display != NULL) { strcpy(resp_data->name + strlen(resp_data->name) + 1, netdelay->display); } else { strcpy(resp_data->name + strlen(resp_data->name) + 1, ""); } } _coreCmdImpl_respond(corecmd, &resp, resp_data); if (resp_data != NULL) { qemu_free(resp_data); } break; } case AUICMD_GET_QEMU_PATH: { UICmdRespHeader resp; UICmdGetQemuPath* cmd = (UICmdGetQemuPath*)cmd_param; char* filepath = NULL; resp.resp_data_size = 0; resp.result = -1; filepath = qemu_find_file(cmd->type, cmd->filename); if (filepath != NULL) { resp.resp_data_size = strlen(filepath) + 1; } _coreCmdImpl_respond(corecmd, &resp, filepath); if (filepath != NULL) { qemu_free(filepath); } break; } case AUICMD_GET_LCD_DENSITY: { UICmdRespHeader resp; resp.resp_data_size = 0; resp.result = android_hw->hw_lcd_density; _coreCmdImpl_respond(corecmd, &resp, NULL); break; } default: derror("Unknown UI control command %d is received by the Core.\n", cmd_header->cmd_type); break; } }