static bool
clientCancel(LSHandle *sh, LSMessage *message, void *ctx)
{
    LSCall(GetLunaServiceHandle(), SLEEPD_SUSPEND_SERVICE"clientCancelByName",
	       		LSMessageGetPayload(message), NULL,(void *)message, NULL, NULL);
    return true;
}
Exemple #2
0
static int
_power_timeout_init(void)
{
    /* Set up luna service */


    psh = GetPalmService();

    LSError lserror;
    LSErrorInit(&lserror);
    if (!LSPalmServiceRegisterCategory(psh,
                "/timeout", timeout_methods /*public*/, NULL /*private*/, NULL, NULL, &lserror)) {
        POWERDLOG(LOG_ERR, "%s could not register category: %s",
                __FUNCTION__, lserror.message);
        LSErrorFree(&lserror);
        goto error;
    }

    if (!LSRegisterCategory(GetLunaServiceHandle(),
          "/time", time_methods, NULL, NULL, &lserror))
      {
          goto error;
      }

    UEventListen("/com/palm/powerd/timechange/uevent", _timechange_callback);

    return 0;

error:
    return -1;
}
Exemple #3
0
static int
shutdown_init(void)
{
    sClientList = g_new0(ShutdownClientList, 1);
    sClientList->applications = g_hash_table_new_full(g_str_hash, g_str_equal,
                        NULL, (GDestroyNotify)client_free);
    sClientList->services = g_hash_table_new_full(g_str_hash, g_str_equal,
                        NULL, (GDestroyNotify)client_free);
    sClientList->num_ack = 0;
    sClientList->num_nack = 0;

    shutdown_timer = g_timer_new();

    gCurrentState = &kStateMachine[kPowerShutdownNone];
    
    LSError lserror;
    LSErrorInit(&lserror);

    if (!LSRegisterCategory(GetLunaServiceHandle(),
            "/shutdown", shutdown_methods, shutdown_signals, NULL, &lserror))
    {
        goto error;
    }

    return 0;

error:
    LSErrorPrint(&lserror, stderr);
    LSErrorFree(&lserror);
    return -1;
}
/**
 * @brief Start an activity.
 */
bool
activityStartCallback(LSHandle *sh, LSMessage *message, void *user_data)
{
	LSMessageRef(message);
	LSCall(GetLunaServiceHandle(), SLEEPD_SUSPEND_SERVICE"activityStart",
					       		LSMessageGetPayload(message), suspend_ipc_method_cb,(void *)message, NULL, NULL);
	return true;
}
bool
prepareSuspendRegister(LSHandle *sh, LSMessage *message, void *data)
{
	LSMessageRef(message);
	LSCall(GetLunaServiceHandle(), SLEEPD_SUSPEND_SERVICE"prepareSuspendRegister",
					       		LSMessageGetPayload(message), suspend_ipc_method_cb,(void *)message, NULL, NULL);
	return true;
}
Exemple #6
0
/** 
* @brief Called by test code to reset state machine to square 1.
* 
* @retval
*/
static bool
TESTresetShutdownState(LSHandle *sh, LSMessage *message, void *user_data)
{
    LSMessageRef(message);
    LSCallOneReply(GetLunaServiceHandle(), SLEEPD_SHUTDOWN_SERVICE"TESTresetShutdownState",
                   LSMessageGetPayload(message), shutdown_method_cb,(void *)message, NULL, NULL);
    return true;
}
/** 
* @brief Turn on/off visual leds suspend via luna-service.
* 
* @retval
*/
bool
visualLedSuspendCallback(LSHandle *sh, LSMessage *message, void *data)
{
	LSMessageRef(message);
	LSCall(GetLunaServiceHandle(), SLEEPD_SUSPEND_SERVICE"visualLedSuspend",
				       		LSMessageGetPayload(message), suspend_ipc_method_cb,(void *)message, NULL, NULL);
	return true;
}
Exemple #8
0
/**
 * @brief Ack the "shutdownApplications" signal.
 */
static bool
shutdownApplicationsAck(LSHandle *sh, LSMessage *message,
                             void *user_data)
{
    LSMessageRef(message);
    LSCallOneReply(GetLunaServiceHandle(), SLEEPD_SHUTDOWN_SERVICE"shutdownApplicationsAck",
                   LSMessageGetPayload(message), shutdown_method_cb,(void *)message, NULL, NULL);
    return true;
}
Exemple #9
0
static bool
alarmRemove(LSHandle *sh, LSMessage *message, void *ctx)
{
	LSMessageRef(message);
	LSCallOneReply(GetLunaServiceHandle(), "palm://com.palm.sleep/time/alarmRemove",
			LSMessageGetPayload(message), alarms_timeout_cb, (void *)message, NULL, NULL);

	return true;
}
Exemple #10
0
/**
 * @brief Add a new alarm based on calender time. Sets the callback function based on the "subscribe" option value.
 */
static bool
alarmAddCalendar(LSHandle *sh, LSMessage *message, void *ctx)
{
	struct json_object *object=NULL;

	object = json_tokener_parse(LSMessageGetPayload(message));
	if ( is_error(object) )
	{
		goto malformed_json;
	}

	struct json_object *subscribe_json =
	            json_object_object_get(object, "subscribe");

	bool subscribe = json_object_get_boolean(subscribe_json);

	LSMessageRef(message);
	if(subscribe) {
		struct context *alrm_ctx=NULL;
		alrm_ctx = malloc(sizeof(struct context));
		if(!alrm_ctx) goto error;
		memset(alrm_ctx,0,sizeof(struct context));

		alrm_ctx->replyMessage = message;
		LSCall(GetLunaServiceHandle(), "palm://com.palm.sleep/time/alarmAddCalender",
					LSMessageGetPayload(message), alarms_timeout_subscribe_cb, (void *)alrm_ctx, &alrm_ctx->call_token, NULL);
	}
	else
		LSCallOneReply(GetLunaServiceHandle(), "palm://com.palm.sleep/time/alarmAddCalender",
			LSMessageGetPayload(message), alarms_timeout_cb, (void *)message, NULL, NULL);

	goto cleanup;

malformed_json:
	LSMessageReplyErrorBadJSON(sh, message);
	goto cleanup;
error:
	POWERDLOG(LOG_ERR,"Failed to allocate memory");
	LSMessageReplyErrorUnknown(sh, message);
cleanup:
	if (!is_error(object)) json_object_put(object);
	return true;

}
Exemple #11
0
static bool
alarms_timeout_subscribe_cb(LSHandle *sh, LSMessage *message, void *ctx)
{
	bool retVal;
	bool fired = false;
	struct context *alrm_ctx = (struct context *)ctx;

	const char *payload = LSMessageGetPayload(message);
	struct json_object *object = json_tokener_parse(payload);
	if (is_error(object))
	{
		POWERDLOG(LOG_CRIT,"%s: invalid json from sleep daemon",__func__);
	}
	else
	{
		fired = json_object_get_boolean(json_object_object_get(object, "fired"));
	}

	POWERDLOG(LOG_INFO,"%s: response with payload %s, count : %d", __FUNCTION__, payload, alrm_ctx->count);

	if(alrm_ctx->replyMessage)
	{
		if(fired)
		{
			retVal = LSMessageReply(GetLunaServiceHandle(), alrm_ctx->replyMessage, payload, NULL);
			if (!retVal)
			{
				POWERDLOG(LOG_WARNING, "%s could not send reply.", __FUNCTION__);
			}
		}
		else if(LSMessageGetConnection(alrm_ctx->replyMessage))
		{
			retVal = LSMessageReply(LSMessageGetConnection(alrm_ctx->replyMessage), alrm_ctx->replyMessage, payload, NULL);
			if (!retVal)
			{
				POWERDLOG(LOG_WARNING, "%s could not send reply.", __FUNCTION__);
			}
		}
		alrm_ctx->count++;
	}
	else
		POWERDLOG(LOG_CRIT,"%s: replyMessage is NULL",__func__);

	if(alrm_ctx->count == 2) {
		if(!LSCallCancel(sh, alrm_ctx->call_token, NULL))
		{
			POWERDLOG(LOG_WARNING, "%s could not cancel luna-service alarm call.", __FUNCTION__);
		}
		LSMessageUnref(alrm_ctx->replyMessage);
		free(alrm_ctx);
	}

	if (!is_error(object)) json_object_put(object);

    return true;
}
Exemple #12
0
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;
}
Exemple #13
0
/**
* @brief Add a new alarm to the queue.
*
* @param  id
* @param  calendar_time
* @param  expiry
* @param  serviceName
* @param  applicationName
*
* @retval
*/
static bool
alarm_queue_add(uint32_t id, const char *key, bool calendar_time,
                time_t expiry, const char *serviceName,
                const char *applicationName,
                bool subscribe, LSMessage *message)
{
	_Alarm *alarm = g_new0(_Alarm, 1);

	alarm->key = g_strdup(key);
	alarm->id = id;
	alarm->calendar = calendar_time;
	alarm->expiry = expiry;
	alarm->serviceName = g_strdup(serviceName);
	alarm->applicationName = g_strdup(applicationName);

	if (subscribe)
	{
		LSError lserror;
		LSErrorInit(&lserror);
		bool retVal = LSSubscriptionAdd(
		                  GetLunaServiceHandle(), "alarm", message, &lserror);

		if (!retVal)
		{
			LSErrorPrint(&lserror, stderr);
			LSErrorFree(&lserror);
			goto error;
		}

		LSMessageRef(message);
		alarm->message = message;
	}

	alarm_print(alarm);

	if (alarm->id >= gAlarmQueue->seq_id)
	{
		gAlarmQueue->seq_id = alarm->id + 1;
	}

	g_sequence_insert_sorted(gAlarmQueue->alarms,
	                         alarm, (GCompareDataFunc)alarm_cmp_func,
	                         NULL);

	update_alarms();
	return true;
error:
	return false;
}
Exemple #14
0
static int
SuspendIPCInit(void)
{
    bool retVal;
    LSError lserror;
    LSErrorInit(&lserror);

    retVal = LSSubscriptionSetCancelFunction(GetLunaServiceHandle(),
        clientCancel, NULL, &lserror);
    if (!retVal)
    {
        LSErrorPrint(&lserror, stderr);
        LSErrorFree(&lserror);
    }
    return 0;
}
Exemple #15
0
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);
    }
}
Exemple #16
0
/**
* @brief Init registers with bus and udev.
*
*/
int
alarm_init(void)
{
    LSError lserror;
    LSErrorInit(&lserror);
    if (!LSRegisterCategory(GetLunaServiceHandle(),
                            "/time", time_methods, NULL, NULL, &lserror))
    {
        goto error;
    }

    alarm_queue_create();
    alarm_read_db();

    update_alarms();
    return 0;
error:
    return -1;
}
Exemple #17
0
static int
shutdown_init(void)
{
    LSError lserror;
    LSErrorInit(&lserror);

    if (!LSRegisterCategory(GetLunaServiceHandle(),
            "/shutdown", shutdown_methods, NULL, NULL, &lserror))
    {
        goto error;
    }

    return 0;

error:
    LSErrorPrint(&lserror, stderr);
    LSErrorFree(&lserror);
    return -1;
}
Exemple #18
0
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);
	}
}
Exemple #19
0
static bool
shutdownServicesRegister(LSHandle *sh, LSMessage *message,
                             void *user_data)
{
    LSMessageRef(message);
    LSCallOneReply(GetLunaServiceHandle(), SLEEPD_SHUTDOWN_SERVICE"shutdownServicesRegister",
                   LSMessageGetPayload(message), shutdown_method_cb,(void *)message, NULL, NULL);
    bool retVal;
    LSError lserror;
    LSErrorInit(&lserror);

    retVal = LSSubscriptionAdd(sh, "shutdownClient", message, &lserror);
    if (!retVal)
    {
        g_critical("LSSubscriptionAdd failed.");
        LSErrorPrint(&lserror, stderr);
        LSErrorFree(&lserror);
    }
    return true;
}
Exemple #20
0
/**
 * @brief Register a new client.
 */
bool
identifyCallback(LSHandle *sh, LSMessage *message, void *data)
{
	LSMessageRef(message);
	LSCall(GetLunaServiceHandle(), SLEEPD_SUSPEND_SERVICE"identify",
					       		LSMessageGetPayload(message), suspend_ipc_method_cb,(void *)message, NULL, NULL);

	struct json_object *object = json_tokener_parse(LSMessageGetPayload(message));
	if ( is_error(object) ) {
		goto out;
	}

	bool subscribe = json_object_get_boolean(json_object_object_get(object, "subscribe"));

	if (subscribe)
	{
		LSSubscriptionAdd(sh, "PowerdClients", message, NULL);
	}
out:
	return true;
}
Exemple #21
0
static bool
state_shutdown_action(ShutdownEvent *event, ShutdownState *next)
{
    bool retVal =
        LSMessageReply(GetLunaServiceHandle(), shutdown_message,
            "{\"success\":true}", NULL);
    if (!retVal)
    {
        g_critical("%s: Could not send shutdown success message",
                __FUNCTION__);
    }

    if (shutdown_message)
    {
        LSMessageUnref(shutdown_message);
        shutdown_message = NULL;
    }

    nyx_system_set_alarm(GetNyxSystemDevice(),0,NULL,NULL);

    return false;  
}
Exemple #22
0
/**
* @brief Sends a "/alarm" message to the service associated with this alarm.
*
* {"alarmId":1,"fired":true,"key":"appkey"}
*
* @param  alarm
*/
static void
fire_alarm(_Alarm *alarm)
{
	bool retVal;
	char buf_alarm[STD_ASCTIME_BUF_SIZE];

	struct tm tm_alarm;
	time_t rtctime = 0;

	gmtime_r(&alarm->expiry, &tm_alarm);
	asctime_r(&tm_alarm, buf_alarm);

	nyx_system_query_rtc_time(GetNyxSystemDevice(), &rtctime);

	SLEEPDLOG_DEBUG("fire_alarm() : Alarm (%s %s %s) fired at %s (rtc %ld)",
	                alarm->serviceName,
	                alarm->applicationName, alarm->key, buf_alarm, rtctime);

	GString *payload = g_string_sized_new(255);
	g_string_append_printf(payload, "{\"alarmId\":%d,\"fired\":true", alarm->id);

	if (alarm->key)
	{
		g_string_append_printf(payload, ",\"key\":\"%s\"", alarm->key);
	}

	if (alarm->applicationName && strcmp(alarm->applicationName, "") != 0)
	{
		g_string_append_printf(payload, ",\"applicationName\":\"%s\"",
		                       alarm->applicationName);
	}

	g_string_append_printf(payload, "}");

	LSError lserror;
	LSErrorInit(&lserror);

	if (alarm->serviceName && strcmp(alarm->serviceName, "") != 0)
	{
		char *uri = g_strdup_printf("luna://%s/alarm", alarm->serviceName);
		retVal = LSCall(GetLunaServiceHandle(), uri, payload->str,
		                NULL, NULL, NULL, &lserror);

		if (!retVal)
		{
			LSErrorPrint(&lserror, stderr);
			LSErrorFree(&lserror);
		}

		g_free(uri);
	}

	if (alarm->message)
	{
		retVal = LSMessageReply(GetLunaServiceHandle(), alarm->message,
		                        payload->str, &lserror);

		if (!retVal)
		{
			LSErrorPrint(&lserror, stderr);
			LSErrorFree(&lserror);
		}
	}

	g_string_free(payload, TRUE);
}
Exemple #23
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;
}
Exemple #24
0
int BatteryInit(void)
{
	int ret = 0;
	nyx_error_t error = NYX_ERROR_NONE;
	nyx_device_iterator_handle_t iteraror = NULL;

	error = nyx_device_get_iterator(NYX_DEVICE_BATTERY, NYX_FILTER_DEFAULT, &iteraror);
	if(error != NYX_ERROR_NONE || iteraror == NULL) {
		 goto error;
	}
	else if (error == NYX_ERROR_NONE)
	{
		nyx_device_id_t id = NULL;

		while ((error = nyx_device_iterator_get_next_id(iteraror,
			&id)) == NYX_ERROR_NONE && NULL != id)
		{
			g_debug("Powerd: Battery device id \"%s\" found",id);
			error = nyx_device_open(NYX_DEVICE_BATTERY, id, &battDev);
			if(error != NYX_ERROR_NONE)
			{
				goto error;
			}
			break;
		}
	}

	LSError lserror;
	LSErrorInit(&lserror);
	bool retVal;
    retVal = LSCall(GetLunaServiceHandle(),
        "luna://com.palm.lunabus/signal/addmatch",
            "{\"category\":\"/com/palm/power\","
             "\"method\":\"batteryStatusQuery\"}",
             batteryStatusQuerySignal,
             NULL, NULL, &lserror);
    if (!retVal)
    	goto lserror;

    if (gChargeConfig.fake_battery)
    {
        retVal = LSCall(GetLunaServiceHandle(),
            "luna://com.palm.lunabus/signal/addmatch",
                "{\"category\":\"/com/palm/power\","
                 "\"method\":\"fakeBatteryStatus\"}",
                 fakeBatteryStatus,
                 NULL, NULL, &lserror);
        if (!retVal) goto lserror;
    }

	nyx_battery_register_battery_status_callback(battDev,notifyBatteryStatus,NULL);

out:
	if(iteraror)
		free(iteraror);
	return ret;

lserror:
	LSErrorPrint (&lserror, stderr);
	LSErrorFree (&lserror);
	ret = -1;
	goto out;

error:
	g_critical("Powerd: No battery device found\n");
	battDev = NULL;
//	abort();
	return 0;
}
Exemple #25
0
int ChargerInit(void)
{
	int ret = 0;
	nyx_init();

	nyx_error_t error = NYX_ERROR_NONE;
	nyx_device_iterator_handle_t iteraror = NULL;

	error = nyx_device_get_iterator(NYX_DEVICE_CHARGER, NYX_FILTER_DEFAULT, &iteraror);
	if(error != NYX_ERROR_NONE || iteraror == NULL) {
	   goto error;
	}
	else if (error == NYX_ERROR_NONE)
	{
		nyx_device_id_t id = NULL;
		while ((error = nyx_device_iterator_get_next_id(iteraror,
			&id)) == NYX_ERROR_NONE && NULL != id)
		{
			g_debug("Powerd: Charger device id \"%s\" found",id);
			error = nyx_device_open(NYX_DEVICE_CHARGER, id, &nyxDev);
			if(error != NYX_ERROR_NONE)
			{
				goto error;
			}
			break;
		}
	}

	memset(&currStatus,0,sizeof(nyx_charger_status_t));

	LSError lserror;
	LSErrorInit(&lserror);
	bool retVal;

	retVal = LSCall(GetLunaServiceHandle(),
		"luna://com.palm.lunabus/signal/addmatch",
			"{\"category\":\"/com/palm/power\","
			 "\"method\":\"chargerStatusQuery\"}",
			 chargerStatusQuerySignal, NULL, NULL, &lserror);
	if (!retVal)
		goto lserror;

	nyx_charger_register_charger_status_callback(nyxDev,notifyChargerStatus,NULL);

    if (!gChargeConfig.skip_battery_check && !gChargeConfig.disable_charging)
    	nyx_charger_register_state_change_callback(nyxDev,notifyStateChange,NULL);

out:
	if(iteraror)
		free(iteraror);
	return ret;

lserror:
	LSErrorPrint (&lserror, stderr);
	LSErrorFree (&lserror);
	ret = -1;
	goto out;

error:
	g_critical("Powerd: No charger device found\n");
	gChargeConfig.skip_battery_check = 1;
//	abort();
	return 0;
}