lots of changes
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index 835ed7a..53df62d 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -21,9 +21,9 @@
static GDBusObjectManagerServer *manager = NULL;
-guint tmp_pgood = 0;
-guint last_pgood = 0;
-guint pgood_timeout_count = 0;
+//guint tmp_pgood = 0;
+//guint last_pgood = 0;
+time_t pgood_timeout_start = 0;
static gboolean poll_pgood(gpointer user_data)
{
@@ -38,21 +38,22 @@
guint poll_int = control_get_poll_interval(control);
if (poll_int == 0)
{
- event_log_emit_event_log(event_log, LOG_ALERT, "Poll interval cannot be 0");
+ event_log_emit_event_log(event_log, LOG_ALERT, "Poll interval cannot be 0",0);
return FALSE;
}
- //calculate timeout count
- guint pgood_timeout = control_power_get_pgood_timeout(control_power)/poll_int;
-
- if (pgood_timeout_count > pgood_timeout)
+ //handle timeout
+ time_t current_time = time(NULL);
+ if (difftime(current_time,pgood_timeout_start) > control_power_get_pgood_timeout(control_power)
+ && pgood_timeout_start != 0)
{
- event_log_emit_event_log(event_log, LOG_ALERT, "Pgood poll timeout");
+ event_log_emit_event_log(event_log, LOG_ALERT, "Pgood poll timeout",0);
// set timeout to 0 so timeout doesn't happen again
control_power_set_pgood_timeout(control_power,0);
- pgood_timeout_count = 0;
+ pgood_timeout_start = 0;
return TRUE;
}
//For simulation, remove
+ /*
if (tmp_pgood!=last_pgood) {
if (tmp_pgood == 1) {
control_emit_goto_system_state(control,"POWERED_ON");
@@ -60,10 +61,14 @@
control_emit_goto_system_state(control,"POWERED_OFF");
}
}
-
+
last_pgood = tmp_pgood;
+ */
uint8_t gpio;
- int rc = gpio_read(&pgood,&gpio);
+
+ int rc = gpio_open(&pgood);
+ rc = gpio_read(&pgood,&gpio);
+ gpio_close(&pgood);
if (rc == GPIO_OK)
{
//if changed, set property and emit signal
@@ -82,18 +87,21 @@
}
}
} else {
- event_log_emit_event_log(event_log, LOG_ALERT, "GPIO read error");
+ event_log_emit_event_log(event_log, LOG_ALERT, "GPIO read error",rc);
//return FALSE;
}
//pgood is not at desired state yet
+ g_print("GPIO: %d; %d\n",gpio,control_power_get_state(control_power));
if (gpio != control_power_get_state(control_power) &&
- control_power_get_pgood_timeout(control_power) != 0)
+ control_power_get_pgood_timeout(control_power) > 0)
{
- pgood_timeout_count++;
+ if (pgood_timeout_start == 0 ) {
+ pgood_timeout_start = current_time;
+ }
}
else
{
- pgood_timeout_count = 0;
+ pgood_timeout_start = 0;
}
return TRUE;
}
@@ -126,13 +134,13 @@
{
g_print("Set power state: %d\n",state);
//temporary until real hardware works
- tmp_pgood = state;
+ //tmp_pgood = state;
int error = 0;
do {
error = gpio_open(&power_pin);
- if (error != GPIO_OK) { break; }
+ if (error != GPIO_OK) { break; }
error = gpio_write(&power_pin,!state);
- if (error != GPIO_OK) { break; }
+ if (error != GPIO_OK) { break; }
gpio_close(&power_pin);
control_power_set_state(pwr,state);
if (state == 1) {
@@ -143,7 +151,7 @@
} while(0);
if (error != GPIO_OK)
{
- event_log_emit_event_log(event_log, LOG_ALERT, "GPIO setup error");
+ event_log_emit_event_log(event_log, LOG_ALERT, "GPIO set power state error",error);
}
}
return TRUE;
@@ -154,6 +162,7 @@
GDBusMethodInvocation *invocation,
gpointer user_data)
{
+ pgood_timeout_start = 0;
guint poll_interval = control_get_poll_interval(control);
g_timeout_add(poll_interval, poll_pgood, user_data);
control_complete_init(control,invocation);
@@ -184,49 +193,45 @@
return;
}
manager = g_dbus_object_manager_server_new (dbus_object_path);
- int i=0;
- for (i=1;i<cmd->argc;i++)
- {
- gchar *s;
- s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[i]);
- g_print("%s\n",s);
- object = object_skeleton_new (s);
- g_free (s);
+ gchar *s;
+ s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[1]);
+ g_print("%s\n",s);
+ object = object_skeleton_new (s);
+ g_free (s);
- ControlPower* control_power = control_power_skeleton_new ();
- object_skeleton_set_control_power (object, control_power);
- g_object_unref (control_power);
+ ControlPower* control_power = control_power_skeleton_new ();
+ object_skeleton_set_control_power (object, control_power);
+ g_object_unref (control_power);
+
+ Control* control = control_skeleton_new ();
+ object_skeleton_set_control (object, control);
+ g_object_unref (control);
- Control* control = control_skeleton_new ();
- object_skeleton_set_control (object, control);
- g_object_unref (control);
+ EventLog* event_log = event_log_skeleton_new ();
+ object_skeleton_set_event_log (object, event_log);
+ g_object_unref (event_log);
- EventLog* event_log = event_log_skeleton_new ();
- object_skeleton_set_event_log (object, event_log);
- g_object_unref (event_log);
+ //define method callbacks here
+ g_signal_connect (control_power,
+ "handle-set-power-state",
+ G_CALLBACK (on_set_power_state),
+ object); /* user_data */
- //define method callbacks here
- g_signal_connect (control_power,
- "handle-set-power-state",
- G_CALLBACK (on_set_power_state),
- object); /* user_data */
+ g_signal_connect (control_power,
+ "handle-get-power-state",
+ G_CALLBACK (on_get_power_state),
+ NULL); /* user_data */
- g_signal_connect (control_power,
- "handle-get-power-state",
- G_CALLBACK (on_get_power_state),
- NULL); /* user_data */
-
- g_signal_connect (control,
- "handle-init",
- G_CALLBACK (on_init),
- object); /* user_data */
+ g_signal_connect (control,
+ "handle-init",
+ G_CALLBACK (on_init),
+ object); /* user_data */
+ /* Export the object (@manager takes its own reference to @object) */
+ g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
+ g_object_unref (object);
- /* Export the object (@manager takes its own reference to @object) */
- g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
- g_object_unref (object);
- }
/* Export all objects */
g_dbus_object_manager_server_set_connection (manager, connection);
@@ -239,12 +244,21 @@
rc = gpio_init(connection,&pgood);
if (rc != GPIO_OK) { break; }
rc = gpio_open(&pgood);
- if (rc != GPIO_OK) { break; }
+
} while(0);
if (rc != GPIO_OK)
{
- //event_log_emit_event_log(event_log, LOG_ALERT, "GPIO setup error");
+ event_log_emit_event_log(event_log, LOG_ALERT, "GPIO setup error",rc);
}
+ int rc = gpio_open(&pgood);
+ rc = gpio_read(&pgood,&gpio);
+ gpio_close(&pgood);
+ if (rc == GPIO_OK) {
+ control_power_set_pgood(control_power,gpio);
+
+ } else {
+ }
+
}
static void