added download and flashing status
diff --git a/objects/flash_bios_obj.c b/objects/flash_bios_obj.c
index ebc71aa..d9ad04d 100644
--- a/objects/flash_bios_obj.c
+++ b/objects/flash_bios_obj.c
@@ -5,15 +5,15 @@
#include "openbmc.h"
/* ---------------------------------------------------------------------------------------------------- */
-static const gchar* dbus_object_path = "/org/openbmc/flash";
-static const gchar* dbus_name = "org.openbmc.flash.Bios";
+static const gchar* dbus_object_path = "/org/openbmc/control/flash";
+static const gchar* dbus_name = "org.openbmc.control.Flash";
static const gchar* FLASHER_BIN = "flasher.exe";
static const gchar* DLOAD_BUS = "org.openbmc.managers.Download";
static const gchar* DLOAD_OBJ = "/org/openbmc/managers/Download";
static GDBusObjectManagerServer *manager = NULL;
-int update(Flash* flash)
+int update(Flash* flash, const char* obj_path)
{
pid_t pid;
int status=-1;
@@ -24,7 +24,7 @@
const gchar* name = flash_get_flasher_name(flash);
const gchar* inst = flash_get_flasher_instance(flash);
const gchar* filename = flash_get_filename(flash);
- status = execl(path, name, inst, filename, NULL);
+ status = execl(path, name, inst, filename, obj_path, NULL);
return status;
}
return 0;
@@ -38,11 +38,16 @@
flash_complete_init(f,invocation);
//tune flash
- flash_set_filename(f,"");
- int rc = update(f);
- if (rc==-1)
+ printf(" >>>>>>>>>> %s\n",flash_get_flasher_instance(f));
+ if (strcmp(flash_get_flasher_instance(f),"bios") == 0)
{
- printf("ERROR FlashControl_0: Unable to init\n");
+ flash_set_filename(f,"");
+ const gchar* obj_path = g_dbus_object_get_object_path((GDBusObject*)user_data);
+ int rc = update(f,obj_path);
+ if (rc==-1)
+ {
+ printf("ERROR FlashControl: Unable to init\n");
+ }
}
return TRUE;
}
@@ -110,15 +115,49 @@
else
{
printf("Flashing BIOS from TFTP: %s,%s\n",url,write_file);
- shared_resource_set_lock(lock,true);
- shared_resource_set_name(lock,dbus_object_path);
flash_set_filename(flash,write_file);
flash_emit_download(flash,url,write_file);
+ flash_set_status(flash,"Downloading");
}
return TRUE;
}
static gboolean
+on_error (Flash *flash,
+ GDBusMethodInvocation *invocation,
+ gchar* error_msg,
+ gpointer user_data)
+{
+ int rc = 0;
+ SharedResource *lock = object_get_shared_resource((Object*)user_data);
+ gboolean locked = shared_resource_get_lock(lock);
+ flash_set_status(flash, error_msg);
+ flash_complete_error(flash,invocation);
+ printf("ERROR: %s. Clearing locks\n",error_msg);
+ shared_resource_set_lock(lock,false);
+ shared_resource_set_name(lock,"");
+
+ return TRUE;
+}
+static gboolean
+on_done (Flash *flash,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ int rc = 0;
+ SharedResource *lock = object_get_shared_resource((Object*)user_data);
+ gboolean locked = shared_resource_get_lock(lock);
+ flash_set_status(flash, "Flash Done");
+ flash_complete_done(flash,invocation);
+ printf("Flash Done. Clearing locks\n");
+ shared_resource_set_lock(lock,false);
+ shared_resource_set_name(lock,"");
+
+ return TRUE;
+}
+
+
+static gboolean
on_update (Flash *flash,
GDBusMethodInvocation *invocation,
gchar* write_file,
@@ -127,6 +166,7 @@
int rc = 0;
SharedResource *lock = object_get_shared_resource((Object*)user_data);
gboolean locked = shared_resource_get_lock(lock);
+ flash_set_status(flash,"Flashing");
flash_complete_update(flash,invocation);
if (locked)
{
@@ -136,10 +176,12 @@
else
{
printf("Flashing BIOS from: %s\n",write_file);
+ flash_set_status(flash, "Flashing");
shared_resource_set_lock(lock,true);
shared_resource_set_name(lock,dbus_object_path);
flash_set_filename(flash,write_file);
- rc = update(flash);
+ const gchar* obj_path = g_dbus_object_get_object_path((GDBusObject*)user_data);
+ rc = update(flash,obj_path);
if (!rc)
{
shared_resource_set_lock(lock,false);
@@ -148,33 +190,6 @@
}
return TRUE;
}
-
-static void
-on_download_complete (GDBusConnection* connection,
- const gchar* sender_name,
- const gchar* object_path,
- const gchar* interface_name,
- const gchar* signal_name,
- GVariant* parameters,
- gpointer user_data)
-{
- Flash *flash = object_get_flash((Object*)user_data);
- SharedResource *lock = object_get_shared_resource((Object*)user_data);
-
- GVariantIter *iter = g_variant_iter_new(parameters);
- GVariant* v_fullname = g_variant_iter_next_value(iter);
- gsize size;
- const gchar* fullname = g_variant_get_string(v_fullname,&size);
- int rc;
- flash_set_filename(flash,fullname);
- rc = update(flash);
- if (!rc)
- {
- shared_resource_set_lock(lock,false);
- shared_resource_set_name(lock,"");
- }
-}
-
static void
on_flash_progress (GDBusConnection* connection,
const gchar* sender_name,
@@ -191,7 +206,11 @@
GVariant* v_progress = g_variant_iter_next_value(iter);
uint8_t progress = g_variant_get_byte(v_progress);
- printf("Progress: %d\n",progress);
+
+ gchar *s;
+ s = g_strdup_printf ("Flashing: %d%%",progress);
+ flash_set_status(flash,s);
+ g_free(s);
}
static void
@@ -208,6 +227,7 @@
printf("Flash succeeded; unlocking flash\n");
shared_resource_set_lock(lock,false);
shared_resource_set_name(lock,"");
+ flash_set_status(flash,"Flash Done");
}
static void
@@ -249,17 +269,31 @@
{
ObjectSkeleton *object;
cmdline *cmd = user_data;
- if (cmd->argc < 2)
- {
- g_print("No objects created. Put object name(s) on command line\n");
- return;
- }
manager = g_dbus_object_manager_server_new (dbus_object_path);
int i=0;
- for (i=1;i<cmd->argc;i++)
+
+ //TODO: don't use fixed buffer
+ char flasher_path[512];
+ memset(flasher_path, '\0', sizeof(flasher_path));
+ bool found = false;
+ gchar *flasher_file;
+ int c = strlen(cmd->argv[0]);
+ while(c>0)
+ {
+ if (cmd->argv[0][c] == '/')
+ {
+ strncpy(flasher_path,cmd->argv[0],c);
+ flasher_file = g_strdup_printf ("%s/%s",flasher_path,FLASHER_BIN);
+ break;
+ }
+ c--;
+ }
+
+ const char* inst[] = {"bios","bmc"};
+ for (i=0;i<2;i++)
{
- gchar *s;
- s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[i]);
+ gchar* s;
+ s = g_strdup_printf ("%s/%s",dbus_object_path,inst[i]);
object = object_skeleton_new (s);
g_free (s);
@@ -274,33 +308,10 @@
shared_resource_set_lock(lock,false);
shared_resource_set_name(lock,"");
- int c = strlen(cmd->argv[0]);
-
- //TODO: don't use fixed buffer
- char buf[512];
- memset(buf, '\0', sizeof(buf));
- bool found = false;
- while(c>0)
- {
- if (cmd->argv[0][c] == '/')
- {
- strncpy(buf,cmd->argv[0],c);
- s = g_strdup_printf ("%s/%s",buf,FLASHER_BIN);
- break;
- }
- c--;
- }
- if (c==0)
- {
- printf("ERROR FlashBios: Invalid Path = %s\n",cmd->argv[0]);
- }
- else
- {
- flash_set_flasher_path(flash,s);
- flash_set_flasher_name(flash,FLASHER_BIN);
- flash_set_flasher_instance(flash,cmd->argv[i]);
- }
- g_free (s);
+ flash_set_flasher_path(flash,flasher_file);
+ flash_set_flasher_name(flash,FLASHER_BIN);
+ flash_set_flasher_instance(flash,inst[i]);
+ //g_free (s);
//define method callbacks here
@@ -321,6 +332,17 @@
"handle-update",
G_CALLBACK (on_update),
object); /* user_data */
+
+ g_signal_connect (flash,
+ "handle-error",
+ G_CALLBACK (on_error),
+ object); /* user_data */
+
+ g_signal_connect (flash,
+ "handle-done",
+ G_CALLBACK (on_done),
+ object); /* user_data */
+
g_signal_connect (flash,
"handle-update-via-tftp",
G_CALLBACK (on_update_via_tftp),
@@ -329,47 +351,9 @@
g_signal_connect (flash,
"handle-init",
G_CALLBACK (on_init),
- NULL); /* user_data */
+ object); /* user_data */
- g_dbus_connection_signal_subscribe(connection,
- DLOAD_BUS, DLOAD_BUS, "DownloadComplete",
- DLOAD_OBJ,NULL,G_DBUS_SIGNAL_FLAGS_NONE,
- (GDBusSignalCallback) on_download_complete,
- object,
- NULL );
- g_dbus_connection_signal_subscribe(connection,
- DLOAD_BUS, DLOAD_BUS, "DownloadError",
- DLOAD_OBJ,NULL,G_DBUS_SIGNAL_FLAGS_NONE,
- (GDBusSignalCallback) on_download_error,
- object,
- NULL );
-
- s = g_strdup_printf ("/org/openbmc/control/%s",cmd->argv[i]);
- g_dbus_connection_signal_subscribe(connection,
- NULL,
- "org.openbmc.FlashControl",
- "Done",
- s,
- NULL,
- G_DBUS_SIGNAL_FLAGS_NONE,
- (GDBusSignalCallback) on_flash_done,
- object,
- NULL );
- g_free(s);
- s = g_strdup_printf ("/org/openbmc/control/%s",cmd->argv[i]);
- g_dbus_connection_signal_subscribe(connection,
- NULL,
- "org.openbmc.FlashControl",
- "Error",
- s,
- NULL,
- G_DBUS_SIGNAL_FLAGS_NONE,
- (GDBusSignalCallback) on_flash_error,
- object,
- NULL );
-
- g_free(s);
- s = g_strdup_printf ("/org/openbmc/control/%s",cmd->argv[i]);
+ s = g_strdup_printf ("/org/openbmc/control/%s",inst[i]);
g_dbus_connection_signal_subscribe(connection,
NULL,
"org.openbmc.FlashControl",
@@ -389,7 +373,7 @@
g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
g_object_unref (object);
}
-
+ g_free(flasher_file);
/* Export all objects */
g_dbus_object_manager_server_set_connection (manager, connection);
}