Article 11550 of comp.sys.palmtops: | |
Path: | doc.ic.ac.uk!dds |
From: | dds@doc.ic.ac.uk (Diomidis Spinellis) |
Newsgroups: | comp.sys.palmtops |
Subject: | Universal Remote Control for the HP-100LX |
Date: | 17 Jan 1994 21:58:57 GMT |
Organization: | Dept of Computing, Imperial College, England |
Lines: | 321 |
Distribution: | world |
Message-ID: | <2hf1n1$jar@frigate.doc.ic.ac.uk> |
NNTP-Posting-Host: | dirty.doc.ic.ac.uk |
Content-Length: | 12257 |
I uploaded rc.zip, a universal remote control system for the HP 100 LX
onto eddie.mit.edu and it is now available via anonymous ftp on
eddie.mit.edu:distrib/hp95lx/hp100lx/rc.zip. Do not forget to set
binary mode when transfering the file. I am including the README file
from the distribution at the end of this article.
Diomidis
----------------------------------------------------------------------
Remote Control 100 Version 1.0
------------------------------
Introduction
Rc converts your HP-100LX into a universal remote control. The output
of most remote control units can be captured by pointing them from a
distance of about 1-2 inches to the plastic opening on the right of the
"/" key. The remote control signal can then be sent back to the device
to be controlled. Remote control definition files allow you to program
complicated interfaces to control a number of devices.
0. Package Contents
The package contains the following files. As a minimum only rc.exm
needs to be installed on the system (possibly with the rc.icn icon
file).
readme This file
rc.icn Program icon
rc.exm Program executable (System Manager compliant)
rc.exe Program executable (DOS version)
bitconv.exe Recording format conversion program
keycode.exe Keyboard scan code program
rc.rcf Example definition file (7-bit compatible)
rc.rc8 Example definition file (8-bit)
1. Program Usage
There are two versions of the program. A DOS version and a System
Manager compliant version. The DOS version is to be run from the
DOS prompt, while the system manager version is run from within
the system manager. In addition there are two ways to represent
the remote control signals. One way uses 7-bit characters and is
compatible with all ASCII editors (appart from line length problems),
while the other method uses a more compact 8-bit representation.
The "memo" editor that comes with the 100LX can use both formats,
so you will probably want to use the 8 bit representation to save
space (8 bit files are about half the size of the 7 bit equivalent
files). The program can read both forms without any additional
specifications. When recording, the user can specify which recording
mode is to be used. An external DOS program is provided to convert
betweem the two recording formats.
The DOS version of the remote control (rc.exe) is used as follows:
rc definition-file [entry-routine]
rc -r[c] recording-file
The first form starts the remote control with a given remote command
definition file. The optional second argument can specify the
program's entry point. The program will execute the contents of
the defintion file.
The second form starts the remote control program in recording
operation. In this mode the program will enter a loop and accept
key strokes and associated remote control signals. These will then
be recorded in the recording file in the form of a trivial remote
control program. Any previus contents of the recording file will
be erased. If the -rc option is used in place of the -c, the
recording is done using the 7 bit compatible format.
In order to use the system manager compliant version (rc.exm) the
program is added to the list of programs using the "Application
Manager" (&..., File, Application, Add). The program is started
using a hot-key, or via the Application Manager. The files used
by the program can not be specified, and are hard coded as follows:
Definition file:c:\_dat\rc.rcf
Recording file: c:\dat_\record.rcf
In order to start recording in the system manager compliant version,
press ALT-R to generate an 8-bit program or ALT-C to generate a 7-bit
compatible file.
2. Definition Files
The program's operation is based on the remote control definition
files. These files contain commands to draw the screen and key
bindings to send the appropriate remote control codes. The following
paragraphs contain more details on the definition files.
2.1. Lexical Structure
A remote-100 definition file consists of a set of commands. Every
command must start on a new line. Blank lines and white-space is
ignored. Lines that begin using the '#' character are regarded as
comments and are ignored.
2.2. Program Structure
The commands inside a remote-100 definition file are organised as
procedure definitions. No other commands are allowed outside the
scope of a procedure definition. A procedure definition is structured
as follows:
define <procname>
<command>
...
end
This construct defines a procedure named <procname>. The commands
are executed when the procedure is invoked using the "call <procname>"
command. The procedure "main" is the starting point for the
interpretation of the definition file.
A minimal file for the control of a simple on/off device could be
the following:
# Minimal remote control file
define main
print 0 0 "+):On -):Off ESC):Quit"
key 0x1b exit
key '+ send "##'##[##'#%+##'##X##'##X"
key '- send "##'##[##'#%+##'##X##'##Y"
end
A remote control file for controling two devices with a mode change
can be implemented as follows:
define main
cls
clkey
print 0 0 "t) TV v) Video ESC) Quit"
key 't call tv
key 'v call video
key 0x1b exit
end
define tv
print 0 0 "ESC) Main"
cls
clkey
key 0x1b call main
# TV commands are place here
end
defive video
...
The remote control files can be used to create new features that
are not available in the original products. As an example the
following sequence implements a "zap" command that cycles through
three tv stations:
define z1
send "##'##[##'#%+##'##X##'##Y"
key 'z call z2
end
define z2
send "##'##[##'#%+##'##A##'##B"
key 'z call z3
end
define z3
send "##'##[##'#%+##'##M##'##N"
key 'z call z1
end
main
key 'z call z1
...
A complete, sophisticated control file with mode changes
and global key definitions is provided in the file rc.rcf.
2.3. Command Description
- define <procname>
Begins a procedure definition. Following this command other commands
except for the "define" command can be placed.
- end
Terminates a procedure
- call <procname>
Uppon execution of this command control is transfered to the procedure
<procname>. When the "end" statement is reached in <procname> control
is transfered back to the command after the "call" command.
- clkey
Clears all key bindings. The key binding table is entirely cleared.
As a minimum a key binding that results in the program's termination
(via an "exit" command) needs to be installed.
- cls
Clears the screen contents.
- print <row> <column> "<string>"
Prints a string is the row and column specified. The size of the
screen can be changed when the program is started using the Fn-Zoom
key combination. Rows and columns are numbered from (0,0).
- exit
Terminates the program.
- key '<character> <command>
key <number> <command>
Installs a key binding for the specified key. ASCII keys are
specified using the '<character> notation. Other keys (arrows,
ALT combinations etc.) are specified by giving the key's scan code
in the top byte of the <number> as in 0x2e00. (The 0x prefix is
used to specify hexadecimal numbers). The scan codes can be found
using the "keycode" program or in a technical reference manual for
PC computers. The scan codes are also automaticaly generated during
the record operation. The command specified can be any command
appart from "define" and "end".
- send "<string>"
Sends the code signals specified by the string to the infrared
control port. There are two possible string encodings depending
on the amount of portability desired. The fully portable 7-bit
format encodes 16-bit integers as three ASCII characters with values
ranging from 0-63 with 0 represented as '#'.
The compact format is represented as follows:
Values 0-127 are represented by a single character where 0 is '\x80'
up to 126 being '\xfe'. 127 is represented by '~'.
Values 128-3711 are represented by two characters using base 128
notation. The value of the first character is given by representing
1 with 'c', while the value of the second character is represented
as above.
Values 3712 and above are represented using the three byte 7-bit
portable encoding.
Both kinds of encoding can contain embedded spaces to allow for a
bug in the HP 100-LX Memo program which introduces spaces inside
very long strings.
2.4. Run-time Semantics
Program execution normaly starts from the procedure called "main".
Control proceeds serialy from that point transfering control when
a "call" command is encountered. When the called procedure has
been executed (i.e. the "end" command has been reached) control is
transfered back to the command immediately following the "call"
command. As the language does not provide any imperative input
statements the "main" procedure normaly terminates after some
initial processing. After that stage the system enters an event
loop (yes they do crop up everywhere) which transfers control based
on keyboard input events and the corresponding key definitions.
The program terminates when the "exit" command is executed.
All execution is performed directly from the file. The file is
not read into memory and thus occupies no additional storage. A
16 element cache stores the last 16 procedures that have been used.
For this reason any initial slugish performance will smooth as the
cache is filled in. Keys are also directly associated with file
position. A maximum of 200 key bindings can be stored in the table.
The definition file must not be modified while the program is
running.
3. The Record Format Conversion Program
Bitconv converts definition files from the 8-bit format to the 7-bit
compatible format.
To convert from 8-bit to 7-bit run the program as follows:
bitconv -c <input_file >output_file
To convert from 7-bit to 8-bit run the program as follows:
bitconv <input_file >output_file
4. The keyboard scan code program
In order to find out the scan code of a key run the "keycode" program.
Press any key to see its scan code definition printed out. Terminate
the program by pressing CTRL-BREAK.
5. Author Contact
The programs have been written by:
Diomidis Spinellis
Myrsinis 1
GR-145 62 Kifissia
GREECE
E-mail: dds@doc.ic.ac.uk
Many thanks to Steve Loughran and Gilles Kohl for their assistance.
6. Copyright and Disclaimer
Copyright (c) 1993, 1994 Diomidis Spinellis. All rights reserved.
Redistribution and use in binary form, without modification, is
permitted provided that the following conditions are met:
1. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
2. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
3. Redistribution for profit is not allowed.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
IN PARTICULAR, NOTE THAT SENDING INCORRECT CODES TO THE REMOTE
CONTROL LED OF THE HP-100LX MAY PERMANENTLY DAMAGE THE DEVICE.
--
Diomidis Spinellis Internet: <dds@doc.ic.ac.uk> UUCP: ...!uknet!icdoc!dds
Department of Computing, Imperial College, London SW7 #include "/dev/tty"
Newsgroup comp.sys.palmtops contents
Newsgroup list
Diomidis Spinellis home page
Unless otherwise expressly stated, all original material on this page created by Diomidis Spinellis is licensed under a Creative Commons Attribution-Share Alike 3.0 Greece License.