void sendBatteryStatus(void) { nyx_battery_status_t status; if(!battDev) return; nyx_error_t err = nyx_battery_query_battery_status(battDev,&status); if(err != NYX_ERROR_NONE) { POWERDLOG(LOG_ERR,"%s: nyx_charger_query_battery_status returned with error : %d",__func__,err); } int percent_ui = getUiPercent(status.percentage); POWERDLOG(LOG_INFO, "(%fmAh, %d%%, %d%%_ui, %dC, %dmA, %dmV)\n", status.capacity, status.percentage, percent_ui, status.temperature, status.current, status.voltage); GString *buffer = g_string_sized_new(500); g_string_append_printf(buffer,"{\"percent\":%d,\"percent_ui\":%d," "\"temperature_C\":%d,\"current_mA\":%d,\"voltage_mV\":%d," "\"capacity_mAh\":%f}", status.percentage, percent_ui, status.temperature, status.current, status.voltage, status.capacity); char *payload = g_string_free(buffer, FALSE); POWERDLOG(LOG_DEBUG,"%s: Sending payload : %s",__func__,payload); LSError lserror; LSErrorInit(&lserror); bool retVal = LSSignalSend(GetLunaServiceHandle(), "luna://com.palm.powerd/com/palm/power/batteryStatus", payload, &lserror); if (!retVal) { LSErrorPrint(&lserror, stderr); LSErrorFree(&lserror); } g_free(payload); return; }
static void send_shutdown_services() { bool retVal; LSError lserror; LSErrorInit(&lserror); retVal = LSSignalSend(GetLunaServiceHandle(), "luna://com.palm.sleep/shutdown/shutdownServices", "{}", &lserror); if (!retVal) { g_critical("%s Could not send shutdown applications", __FUNCTION__); LSErrorPrint(&lserror, stderr); LSErrorFree(&lserror); } }
void machineShutdown(void) { char *payload = g_strdup_printf("{\"reason\":\"Battery level is critical\"}"); LSError lserror; LSErrorInit(&lserror); POWERDLOG(LOG_DEBUG,"%s: Sending payload : %s",__func__,payload); bool retVal = LSSignalSend(GetLunaServiceHandle(), "luna://com.palm.power/shutdown/machineOff", payload, &lserror); g_free(payload); if (!retVal) { LSErrorPrint(&lserror, stderr); LSErrorFree(&lserror); } }
void Handle::sendSignal(const char *uri, const char *payload, bool typecheck) const { Error error; if (typecheck) { if (!LSSignalSend(_handle, uri, payload, error.get())) { throw error; } } else { if (!LSSignalSendNoTypecheck(_handle, uri, payload, error.get())) { throw error; } } }
static void SendSignal(LSFilterFunc callback, const char *uri, const char *payload, ...) { bool retVal; char *buffer; LSError lserror; LSErrorInit(&lserror); va_list args; va_start(args, payload); buffer = g_strdup_vprintf(payload, args); va_end(args); retVal = LSSignalSend(gServiceHandle, uri, buffer, &lserror); if (!retVal) { LSErrorPrint(&lserror, stderr); LSErrorFree(&lserror); } g_free(buffer); }
int main(int argc, char **argv) { bool interactive = false; bool timing = false; bool signal = false; bool use_public_bus = false; char *serviceName = NULL; int optionCount = 0; int opt; while ((opt = getopt(argc, argv, "hdisPrlfn:t:m:a:q:")) != -1) { switch (opt) { case 'i': interactive = true; optionCount++; break; case 's': signal = true; optionCount++; break; case 'P': use_public_bus = true; optionCount++; break; case 'd': sLogLevel = G_LOG_LEVEL_DEBUG; optionCount++; break; case 'n': interactive = true; count = atoi(optarg); optionCount+=2; break; case 't': timing = true; count = atoi(optarg); optionCount+=2; break; case 'm': serviceName = g_strdup(optarg); optionCount+=2; break; case 'a': appId = g_strdup(optarg); optionCount+=2; break; case 'l': line_number = true; optionCount++; break; case 'f': format_response = true; optionCount++; break; case 'q': query_list = g_list_append(query_list, g_strdup(optarg)); optionCount+=2; break; case 'h': default: PrintUsage(argv[0]); return 0; } } if (argc < 3 + optionCount) { PrintUsage(argv[0]); return 0; } g_log_set_default_handler(g_log_filter, NULL); GMainLoop *mainLoop = g_main_loop_new(NULL, FALSE); if (mainLoop == NULL) { g_critical("Unable to create mainloop"); exit(EXIT_FAILURE); } LSError lserror; LSErrorInit(&lserror); LSHandle *sh = NULL; bool serviceInit = LSRegisterPubPriv(serviceName, &sh, use_public_bus, &lserror); if (!serviceInit) goto exit; bool gmainAttach = LSGmainAttach(sh, mainLoop, &lserror); if (!gmainAttach) goto exit; url = g_strdup(argv[optionCount + 1]); message = g_strdup(argv[optionCount + 2]); LSMessageToken sessionToken; bool retVal; if (timing) { /* Timing loop */ clock_gettime(CLOCK_MONOTONIC, &startTime); retVal = LSCallFromApplication(sh, url, message, appId, timingServiceResponse, mainLoop, &sessionToken, &lserror); if (!retVal) goto exit; g_main_loop_run(mainLoop); printf("Total time %.02f ms, %d iterations, %.02f ms per iteration\n", roundtripTime * 1000.0, roundtripCount, (roundtripTime / roundtripCount) * 1000.0); printf("%d bytes sent, %d bytes received\n", sentBytes, rcvdBytes); } else { if (signal) { retVal = LSSignalSend(sh, url, message, &lserror); } else { /* Basic sending */ retVal = LSCallFromApplication(sh, url, message, appId, serviceResponse, mainLoop, &sessionToken, &lserror); } if (!retVal) goto exit; if (interactive && !signal) { g_io_add_watch(g_io_channel_unix_new(0), G_IO_ERR|G_IO_HUP, input_closed, mainLoop); g_main_loop_run(mainLoop); } else if (!signal) { /* * NOV-93580: In the non-interactive case, we can't guarantee that * an LSCall() will necessarily get the QueryNameReply before * shutting down if it does not wait for (or have) a reply from the * far side. */ g_critical("WARNING: you must always call luna-send with \"-i\" or \"-n\". Exiting with failure return code."); exit(EXIT_FAILURE); } } exit: if (LSErrorIsSet(&lserror)) { LSErrorPrint(&lserror, stderr); LSErrorFree(&lserror); } if (sh != NULL) { if (!LSUnregister(sh, &lserror)) { LSErrorPrint(&lserror, stderr); LSErrorFree(&lserror); } } g_main_loop_unref(mainLoop); if (url) g_free (url); if (message) g_free (message); return 0; }
void sendChargerStatus(void) { nyx_charger_status_t status; if(!nyxDev) return; nyx_error_t err = nyx_charger_query_charger_status(nyxDev,&status); if(err != NYX_ERROR_NONE) { POWERDLOG(LOG_ERR,"%s: nyx_charger_query_charger_status returned with error : %d",__func__,err); } POWERDLOG(LOG_DEBUG,"In %s connected : %d:%d, powered : %d:%d",__func__,currStatus.connected,status.connected,currStatus.powered,status.powered); if(currStatus.connected != status.connected || currStatus.powered != status.powered) { LSError lserror; LSErrorInit(&lserror); char *payload = g_strdup_printf("{\"DockConnected\":%s,\"DockPower\":%s,\"DockSerialNo\":\"%s\"," "\"USBConnected\":%s,\"USBName\":\"%s\",\"Charging\":%s}",(status.connected & NYX_CHARGER_INDUCTIVE_CONNECTED) ? "true" : "false", (status.powered & NYX_CHARGER_INDUCTIVE_POWERED) ? "true" :"false",(strlen(status.dock_serial_number)) ? status.dock_serial_number : "NULL", (status.powered & NYX_CHARGER_USB_POWERED) ? "true" : "false",ChargerNameToString(status.connected), (status.is_charging) ? "true":"false"); POWERDLOG(LOG_DEBUG,"%s: Sending payload : %s",__func__,payload); bool retVal = LSSignalSend(GetLunaServiceHandle(), "luna://com.palm.powerd/com/palm/power/USBDockStatus", payload, &lserror); if (!retVal) { LSErrorPrint(&lserror, stderr); LSErrorFree(&lserror); g_free(payload); return; } g_free(payload); payload = g_strdup_printf("{\"type\":\"%s\",\"name\":\"%s\",\"connected\":%s,\"current_mA\":%d,\"message_source\":\"powerd\"}", ChargerTypeToString(status.powered), ChargerNameToString(status.connected), status.connected ? "true" : "false", status.charger_max_current); POWERDLOG(LOG_DEBUG,"%s: Sending payload : %s",__func__,payload); retVal = LSSignalSend(GetLunaServiceHandle(), "luna://com.palm.powerd/com/palm/power/chargerStatus", payload, &lserror); if (!retVal) { LSErrorPrint(&lserror, stderr); LSErrorFree(&lserror); } g_free(payload); } if(currStatus.connected != status.connected) { char *payload = g_strdup_printf("{\"connected\":%s}", status.connected ? "true" : "false"); LSError lserror; LSErrorInit(&lserror); POWERDLOG(LOG_DEBUG,"%s: Sending payload : %s",__func__,payload); bool retVal = LSSignalSend(GetLunaServiceHandle(), "luna://com.palm.power/com/palm/power/chargerConnected", payload, &lserror); g_free(payload); if (!retVal) { LSErrorPrint(&lserror, stderr); LSErrorFree(&lserror); } } memcpy(&currStatus,&status,sizeof(nyx_charger_status_t)); // Iterate through both charging as well as battery state machines. Is this required ?? // ChargingLogicUpdate(NYX_NO_NEW_EVENT); return; }