:mod:`gammu.worker` - Asynchronous communication to phone.
==========================================================

.. module:: gammu.worker
    :synopsis: Asynchronous communication to phone.

Mostly you should use only :class:`GammuWorker` class, others are only helpers
which are used by this class.


.. class:: GammuCommand(command, params=None, percentage=100)
   :module: gammu.worker

   Storage of single command for gammu.


   .. method:: GammuCommand.get_command()
      :module: gammu.worker

      Returns command name.


   .. method:: GammuCommand.get_params()
      :module: gammu.worker

      Returns command params.


   .. method:: GammuCommand.get_percentage()
      :module: gammu.worker

      Returns percentage of current task.


.. class:: GammuTask(name, commands)
   :module: gammu.worker

   Storage of task for gammu.


   .. method:: GammuTask.get_name()
      :module: gammu.worker

      Returns task name.


   .. method:: GammuTask.get_next()
      :module: gammu.worker

      Returns next command to be executed as :class:`GammuCommand`.


.. class:: GammuThread(queue, config, callback)
   :module: gammu.worker

   Thread for phone communication.


   .. method:: GammuThread.join(timeout=None)
      :module: gammu.worker

      Terminates thread and waits for it.


   .. method:: GammuThread.kill()
      :module: gammu.worker

      Forces thread end without emptying queue.


   .. method:: GammuThread.run()
      :module: gammu.worker

      Thread body, which handles phone communication. This should not
      be used from outside.


.. class:: GammuWorker(callback)
   :module: gammu.worker

   Wrapper class for asynchronous communication with Gammu. It spawns
   own thread and then passes all commands to this thread. When task is
   done, caller is notified via callback.


   .. method:: GammuWorker.abort()
      :module: gammu.worker

      Aborts any remaining operations.


   .. method:: GammuWorker.configure(config)
      :module: gammu.worker

      Configures gammu instance according to config.

      :param config: Gammu configuration, same as :meth:`gammu.StateMachine.SetConfig` accepts.
      :type config: hash


   .. method:: GammuWorker.enqueue(command, params=None, commands=None)
      :module: gammu.worker

      Enqueues command or task.

      :param command: Command(s) to execute. Each command is tuple containing function name and it's parameters.
      :type command: tuple of list of tuples
      :param params: Parameters to command.
      :type params: tuple or string
      :param commands: List of commands to execute. When this is not none, params are ignored and command is taken as task name.
      :type commands: list of tuples or strings


   .. method:: GammuWorker.enqueue_command(command, params)
      :module: gammu.worker

      Enqueues command.

      :param command: Command(s) to execute. Each command is tuple containing function name and it's parameters.
      :type command: tuple of list of tuples
      :param params: Parameters to command.
      :type params: tuple or string


   .. method:: GammuWorker.enqueue_task(command, commands)
      :module: gammu.worker

      Enqueues task.

      :param command: Command(s) to execute. Each command is tuple containing function name and it's parameters.
      :type command: tuple of list of tuples
      :param commands: List of commands to execute.
      :type commands: list of tuples or strings


   .. method:: GammuWorker.initiate()
      :module: gammu.worker

      Connects to phone.


   .. method:: GammuWorker.terminate(timeout=None)
      :module: gammu.worker

      Terminates phone connection.


.. exception:: InvalidCommand(value)
   :module: gammu.worker

   Exception indicating invalid command.


.. function:: check_worker_command(command)
   :module: gammu.worker

   Checks whether command is valid.

   :param command: Name of command.
   :type command: string
