OmniRemote build tool

Introduction

ORbuild is a command-line tool that can build a .PDB file for OmniRemote, containing placed buttons, labels and macros from semihigh and high level descriptions in a text file.

Codes supported include Sony-style IR data, Pioneer-style IR data (both high-level with automatic byte-reversal and mirroring, and low-level raw data) and a special mode for the PocketStation game Chocobo World.

My main use for this have been two:

  • Help upgrading the rank of my very rare (in Sweden) PocketStation's Chocobo World game
  • Remove region protection on a couple of DVD players.
My old PalmPilot is hardly good enough to use as a generic remote control...

If you find any use whatsoever for this thing, please drop me a line and let me know! This cost me an insane amount of time to make (around 30 hours effective time, at a wild guess), especially considering the limited usefulness of the whole thing. It's always encouraging to hear that someone else except me has used it.

Building the program

The source code can be found in the attached archive.

To build, run

./configure
followed by
make
After compiling, you can install the program by running
make install

Running the program

The command format is simple:

ORbuild -i <infile> -o <outfile>

If you want to see some debug output, add one or more "-v" to the command line.

Configuration file format

The file is line-oriented and the first character on each line determines the record type. Unrecognized record types will simply be ignored.

Buttons

Every record type except for "G" (Category) is associated with a button, defined by its upper left corner plus width and height. There is also a field where an icon can be selected. Here is the general format of a button record:

<type>:<cat>:<label>:<icon>:<x>:<y>:<width>:<height>:<data>
  • The "type" field defines the record type. See below.
  • The "cat" field selects the category page to which this button belongs.
  • The "label" field holds the button label. The label (but not the button frame) can be hidden by putting a "/" (slash) in front of the label. Total maximum length of a label is 15 characters.
  • The "icon" field, if not empty, selects an icon from a set of predefined (by OmniRemote) icons. Possible values are:
    • play
    • stop
    • record
    • pause
    • ff
    • rewind
    • next
    • previous
    • revplay
    • eject
    • up
    • down
    • right
    • left
  • "x" and "y" are the coordinates of the upper-left corner of the button, in the 160x160 coordinate system of the Palm screen. "y" has to be at least 24, to clear the title bar.
  • "width" and "height" define the size of the buttons, and have to be at least 12.
  • The "data" field contains record-specific data.

Comments

Lines starting with "#" are comment lines and will be ignored.

G - Category record

A line starting with "G" defines a category, which will get its own page in OmniRemote. Each category has a number and a name, and the number has to manually assigned.

Total maximum length of a category name is 15 characters.

Example:

G:4:Pioneer DVD

Defines category number 4, with the name "Pioneer DVD".

C - category link

This defines a button that links to another category page. The page to link to is identified by its name. Example:

C:1:u:up:144:24:12:12:Mac

This defines a category link, linking from category 1 to the category named "Mac". It uses the "up" icon and will thus be shown as an up arrow symbol, regardless of the label text.

L - label

This defines a label, which is represented by its label string only, with no border. Example:

L:2:Sony DVD::38:24:85:12

This defines a label on category page 2, with the text "Sony DVD" at the given position.

M - macro

This defines a macro. The "data" field should contain a colon-separated list of button names to run in sequence. An empty element represents a pause. Button names can be prepended by a category name, delimited by a "/". Example:

M:1:2 (ID=777)::82:60:60:14:0//cw2:::0//cwA

This produces a macro button on category page 1, with the label "2 (ID=777)" that will run first the button "/cw2" on category page 0, then pause, then run "/cwA" on page 0. Note the double slashes - the first one is to delimit the page number from the button name, the second one is part of the button name and serves to hide its label.

N/R - Normal/Repeating button

This produces a normal code button (or a repeating one, if "R" is used). The "data" field here contains a list of codes and other instructions to use in construction the final data block.

The data will always use a carrier frequency of 39200Hz.

The list is colon-separated and the possible values are as follows:

  • <mode=(mode)> selects the encoding method for any following data blocks. Possible values of (mode) are:
    sony for Sony-style encoding
    pioneer_ll for Pioneer style encoding
    pioneer for high-level Pioneer encoding. Each byte will be bit-reversed, and a inverted copy of each 16-bit word will be added.
  • <pause=(length)> creates a pause of a given length, expressed in bytes, each representing a delay of around 1 millisecond.
  • <repeat=(count)> will repeat whatever's been assembled so far, a certain number of times.
  • (hexadecimal data) will create a block according to the current encoding method, complete with lead-in and lead-out.
  • <cwch=(local hidden id),(system id),(weapon),(hp)> creates a challenge for Chocobo World for the Pocketstation. Note that these values will be parsed as hexadecimal BCD values, without any preceding "0x". If the values are out of normal range, it's anybody's guess what Chocobo World will do with them.
  • <cwack=(local hidden id),(remote hidden id)> creates an ACK packet for Chocobo World for the Pocketstation. Note that you need the "hidden ID" for your own Chocobo World game for this. If you have OmniRemote, you may be able to use the "cwsearch" program included in the package to get hold of this. Otherwise, let me know if you have OmniRemote and need help finding out your ID.
Examples:
N:0:/cw2::7:24:5:5:<cwch=feedbeef,777,1111,1>
creates a Chocobo World challenge with the local hidden ID 0xFEEDBEEF, system ID 777, weapon 1111 and HP 1.
R:4:Enter:record:74:58:12:12:<mode=pioneer>:A399:AFEF:<repeat=2>
makes a pioneer equipment button (using the "record" icon) which sends out two copies of the codes for the "Enter" button on a Pioneer DVD remote control.
R:4:Deprot::50:142:60:14:<mode=pioneer>:A399:<mode=pioneer_ll>:F50AB54B:<repeat=2>
makes a button sending out the pioneer device code A399 followed by the (not entirely well-formed) pioneer code for removing DVD region protection.
N:0:/sd1::42:24:5:5:FEB92:<pause=6>:<repeat=4>
N:0:/sd2::47:24:5:5:A6B92:<pause=6>:<repeat=4>
N:0:/sd3::52:24:5:5:AAB92:<pause=6>:<repeat=4>
N:0:/sd4::57:24:5:5:FAB92:<pause=6>:<repeat=4>
N:0:/sdpower::62:24:5:5:A8B92:<pause=6>:<repeat=4>
M:2:Deprotect::45:64:70:14:0//sd1:::0//sd2:::0//sd3:::0//sd4:::0//sdpower:::
defines on category page 0 five different codes comprising the sequence needed to remove region protection on a Sony DVD player, and on category page 2 a macro button which "pushes" them all in sequence.
AttachmentSize
ORbuild-1.2.tar.gz7.35 KB