[PATCH skeleton v5 4/5] Solve auto power on issue, confirm GPIO status before send the signal
Cyril Bur
cyrilbur at gmail.com
Tue Jan 19 10:00:03 AEDT 2016
On Sun, 17 Jan 2016 20:40:34 -0600
OpenBMC Patches <openbmc-patches at stwcx.xyz> wrote:
> From: Ken <ken.sk.lai at mail.foxconn.com>
>
Hi Ken,
Sorry I responded to this patch in v3 but my comments are still relevant here.
Apologies,
Cyril
> ---
> objects/button_power_obj.c | 37 ++++++++++++++++++++++++-------------
> 1 file changed, 24 insertions(+), 13 deletions(-)
> mode change 100644 => 100755 objects/button_power_obj.c
>
> diff --git a/objects/button_power_obj.c b/objects/button_power_obj.c
> old mode 100644
> new mode 100755
> index 94f8922..4c986a1
> --- a/objects/button_power_obj.c
> +++ b/objects/button_power_obj.c
> @@ -1,4 +1,5 @@
> #include <stdio.h>
> +#include <stdlib.h>
> #include "interfaces/openbmc_intf.h"
> #include "gpio.h"
> #include "openbmc.h"
> @@ -42,7 +43,11 @@ on_button_interrupt( GIOChannel *channel,
>
> GError *error = 0;
> gsize bytes_read = 0;
> - gchar buf[2];
> + gchar buf[2];
> +
> + uint8_t val;
> + int rc1 = GPIO_OK;
> +
> buf[1] = '\0';
> g_io_channel_seek_position( channel, 0, G_SEEK_SET, 0 );
> GIOStatus rc = g_io_channel_read_chars( channel,
> @@ -50,7 +55,7 @@ on_button_interrupt( GIOChannel *channel,
> &bytes_read,
> &error );
> printf("%s\n",buf);
> -
> +
> time_t current_time = time(NULL);
> if (gpio_button.irq_inited)
> {
> @@ -65,19 +70,25 @@ on_button_interrupt( GIOChannel *channel,
> {
> long press_time = current_time-button_get_timer(button);
> printf("Power Button released, held for %ld seconds\n",press_time);
> - if (press_time > LONG_PRESS_SECONDS)
> - {
> - button_emit_pressed_long(button);
> - } else {
> - button_emit_released(button);
> - }
> + // if (press_time > LONG_PRESS_SECONDS)
> + // {
> + // button_emit_pressed_long(button);
> + // } else {
> + rc1 = gpio_open(&gpio_button);
> + rc1 = gpio_read(&gpio_button,&val);
> + if (val == 1)
> + button_emit_released(button);
> +
> + // if (press_time > 1)
> + // sleep(1);
> + //}
> }
> - }
> + }
> else { gpio_button.irq_inited = true; }
>
> return TRUE;
> }
> -static void
> +static void
> on_bus_acquired (GDBusConnection *connection,
> const gchar *name,
> gpointer user_data)
> @@ -110,7 +121,7 @@ on_bus_acquired (GDBusConnection *connection,
> G_CALLBACK (on_button_press),
> NULL); /* 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);
> @@ -130,7 +141,7 @@ on_bus_acquired (GDBusConnection *connection,
> {
> printf("ERROR PowerButton: GPIO setup (rc=%d)\n",rc);
> }
> - emit_object_added((GDBusObjectManager*)manager);
> + emit_object_added((GDBusObjectManager*)manager);
> }
>
> static void
> @@ -171,7 +182,7 @@ main (gint argc, gchar *argv[])
> NULL);
>
> g_main_loop_run (loop);
> -
> +
> g_bus_unown_name (id);
> g_main_loop_unref (loop);
> return 0;
More information about the openbmc
mailing list