A little step forward.

There's a "buttond_service.pyc" that seems to be able to handle the button
pressing:

class ButtondService(persistent_service.PersistentService):
    """ Buttond Service Class """
[...]
    def _worker(self):
        """
        _worker method (override from superclass)
        """
        input = self.__button.get_data()
        event_struct_size = struct.calcsize(FORMAT_INPUT_EVENT)
        event_num = len(input) / event_struct_size
        event_queue = Queue.Queue()
[...]
                            if button[BTN_ACTION_TYPE] == 'internal':
                                try:
                                    action_func =
self.__action_functions[button[BTN_ACTION_NAME]]

But... I can't find when that _worker method will get called.
I don't see where this service is somehow registered to receive button
events.

Can anybody help?


On Mon, Oct 6, 2014 at 10:18 AM, Dario Piantanida <
[email protected]> wrote:

> Hello, I have an LG NAS based on Debian 6, armel arch.
> I have root access on it.
>
> I recently broke a couple of things on it, but now it's almost back.
> I found it is highly customized about services to start and other system
> handling.
>
> The last thing I haven't been able to restore is the handling of the
> powerbutton: before me touching things, I could turn it off keeping it
> pressed for 2/3 seconds; a longer press would turn it off immediately.
>
> Now it loose the 2/3 seconds reaction, I must log in and shutdown manually.
>
> I found some ACPI scripts and services, but they all start with a testing
> of an env variable "micom" that it must not be set to "emul", otherwise
> they exit instantly.
>
> As "micom" is not "emul", they are useless.
> I even tried starting "acpid -f" from command line, but it says it lacks
> some "input" file somewhere, so the handling must be something custom again.
>
> The whole NAS platform is started from a bunch of python scripts and I
> found they do list the button reactions, listing "shutdown" with code 45,
> but I can't understand how it gets called.
>
> This is the action defined:
>     @classmethod
>     def action_shutdown(cls):
>         """ action shutdown - evnet code: 45 """
>         buzzer.Buzzer().enable()
>         initd.Initd().shutdown()
>
> If I search for "action_shutdown" in the scripts, I find:
>
> class ButtondService(persistent_service.PersistentService):
>     """ Buttond Service Class """
>     _sleep_duration = 0
>     __button = None
>     __action_functions = {'IP_DHCP':
> button_action.ButtonAction.action_ip_dhcp,
> [...]
>      'SHUTDOWN': button_action.ButtonAction.action_shutdown,
> [...]
>     __conf_table = []
>     __conf_table_file = '/etc/nas/button.conf'
>
> /etc/nas/button.conf is a list of buttons and codes.
>
> Searching for SHUTDOWN, I find it is used in here:
>     @classmethod
>     def _shutdown(cls, args):
>         """ Stop all service and umount volumes under platformd
>
> This function is mapped in an array:
> class SystemService(EphemeralService):
>     """ System Service Class """
>     _locked = False
>     _actions = {'get_greeting': ['_get_greeting', ()],
> [...]
>      'shutdown': ['_shutdown', ()],
>
> I then lose traces of the calls and I'm not sure what really should
> triggers these calls.
>
> Can anybody suggest any string I could search for to understand what
> system event would trigger a powerbutton press reaction?
>
> Thank you!
>

Reply via email to