Skip to content

# anyRemote

# Configuration file format: AT mode

## Configuration file examples

You may find some predefined configuration files in cfg-data/AT-mode directory. After investigation of these configuration files You became more familiar with its format.

## Format

Line starting with a % considered as a comment line.

    %This is a comment

Long command can be splitted into the several lines. You have to put backslash (\) as the last character to continue a command to the next line.

    1=Exec(echo "this is first line");\
    Exec(echo "this is second line");

## Parameters section

GuiAppName="application name"

GuiAppBinary="name of executable"|"command which returns name of executable"

GuiAppRun="command do determine is application running or not; must returns OK or NOK"

GuiAppIcon="icon name"

GuiAppType=Application|Custom|Example

GuiAppModes=Server|AT|Bemused

GuiAppDesc=Some text

These parameters is used by GUI frontends only.

    GuiAppName=Amarok
    GuiAppBinary=amarok
    GuiAppRun=echo 'A=`dcop | grep amarok`; \
       if [ "x$A" == "x" ]; then echo NOK; \
       else echo OK; fi' | bash -f -s
    GuiAppIcon=amarok.png
    GuiAppType=Application
    GuiAppModes=AT
    GuiAppDesc=Application decription

    [Protocol]=AT
    One=Exec(echo "Hello world!");
    ...

## [Protocol] section

A short example:

    [Protocol]=AT
    (Init)=Exec(kdialog --msgbox "Initialized");
    (InCall)=Exec(kdialog --msgbox "A call from $(CallId)");\
             Make(remote,off);
    (EndCall)=Make(remote,on);Exec(kdialog --msgbox CALL_END)
    (Connect)=Exec(kdialog --msgbox "Connected")
    (Disconnect)=Exec(kdialog --msgbox "Disconnected")
    1=Exec(kdialog --msgbox 1)
    2=Exec(kdialog --msgbox 2)
    3=Exec(kdialog --msgbox 3)
    4=Exec(kdialog --msgbox 4)
    5=Exec(kdialog --msgbox 5)
    [End]

### Format:

Key_Codes=Command1;Command2;Command3;....

Where CommandX could be:

- Exec(...);
- Emulate(...);
- Exit;
- Macro(...);
- Make(...);
- Timer(...);
- Load(...);
- Include(...);
- SendCKPD(...);

### Exec() command

    1=Exec(kdialog --msgbox 1)
    2=Exec(kdialog --msgbox 2)

anyRemore uses popen system call in Exec() command. This means that command will be executed inside /bin/sh command interpreter.

It is possible to define multi-key commands

    3 1=Exec(kdialog --msgbox 3_1)
    3 2=Exec(kdialog --msgbox 3_2)
    3 3 1=Exec(kdialog --msgbox 3_3_1)

It is not good idea to define:

    3 3=Exec(kdialog --msgbox 3_3)
    3 3 1=Exec(kdialog --msgbox 3_3_1)

simultaneously, since only one command will works (which one - depends on search order).

It is possible to group keymappings in so-called "mode" to set more than one command to the key:

    1=Exec(kdialog --msgbox 1)
    2=Exec(kdialog --msgbox 2)
    [Mode]=1
    1=Exec(kdialog --msgbox 1_in_Mode_1)
    2=Exec(kdialog --msgbox 2_in_Mode_1)
    [ModeEnd]
    [Mode]=2
    1=Exec(kdialog --msgbox 1_in_Mode_2)
    2=Exec(kdialog --msgbox 2_in_Mode_2)
    [ModeEnd]

If current mode is not default mode (see Make(mode ...); command), then firstly key will be searched in current mode and if not found then it will be searched in default mode. As a result it needs to use (EnterMode) and (ExitMode) "events" very carefully in default mode.

It is possible to write quite complex commands inside Exec(), for example:

    1=Exec(echo 'D=`dcop | grep digikam`; \
         if [ "x$D" == "x" ]; then digikam \
         else dcop $D MainApplication-Interface quit;' | bash -f -s)

### Macro() command

This command used to create new keymapping:

    1=Macro(Macro1)
    Macro1=Exec(kdialog --msgbox 1);Exec(kdialog --msgbox 2)

Macro() command can contains condition:

    0=Make(var,macro_test,echo "0");
    1=Macro(Macro1,by_value,$(macro_test));
    2=Macro(Macro2, if [ -f /tmp/file_name ];\
                    then true; else false; fi; echo $?)
    Macro2=Exec(kdialog --msgbox "Condition is OK")

Conditional Macro() will be execute only if a result of variable substitution or execution of the command is equal to string "0".

Note: In shells result code of command execution stored in $? environment variable.

### Timer() command

Format:

Timer(key, timeout, maxTimes) or

Timer(key, cancel|pause|continue)

This command sets/removes a timer for the key specified. A command sequence, associated with this key will be executed periodically.

For example, the following commands run 'ls -1' command 2 times with timeout equal to 5 seconds:

    7=Timer(TimerCmd, 5, 2)
    TimerCmd=Exec(ls -1)

The following command run 'date' command every 10 seconds:

    8=Timer(Timer2, 10, 0)
    Timer2=Exec(date)

It is impossible to have two active timer commands with the same key.

To delete existing timer use the following command:

    9=Timer(TimerName,cancel)

### Load() command

This command used to load commands from file and execute them:

    1=Load(file_name.cmds)

### Include() command

This command used to include definitions from external configuration file:

    1=Include(xmms.cfg)

Definitions from included file will not rewrite any of existing definitions.

### Make() command

Format:

Make(flush|disconnect|mode|remote|var|alarm[,....])

This command used control local state of anyRemote.

    0=Make(flush)
    1=Make(mode,mode_2)
    2=Make(remote,on)
    3=Make(var,my_var,date)

See detailed description here.

### SendCKPD() command

    1=Exec(kdialog --msgbox 1);SendCKPD(E PAUSE E)

This command sends CKPD sequence back to phone and could be useful if You can't lock the keyboard and needs to clean-up phone screen after each key pressing on phone keypad. It is possible to use word PAUSE to make a 1-second pause before next CKPD command will be sent. This command works when anyRemote is in AT-mode.

### Exit

Exit command used to exit from application.

    2=Exit;

### Event handlers

There are several "events" could be triggered. See Event handlers page for details.

### Variable substitution

In Exec(), Make(var,...), Load(), Include() commands is it possible to use internal "variables". See Variable substitution page for details.

Maintained by anyRemote. Website by m.lettner.