Kok Chen, W7AY [w7ay (at) arrl (dot) net]
Last updated: November 5, 2008
cocoaPTT 2.0 is an AppleScriptable application to provide push-to-transmit (PTT) capability to applications that don't natively support the PTT function. In addition to the AppleScript path, the application also provides a small control panel interface to directly key the PTT line on or off.
cocoaPTT 2.0 is built as a Universal Binary application and works natively with both PowerPC and Intel based Macintoshes. You can download cocoaPTT 2.0 here.
The original cocoaPTT application controlled PTT through the Request To Send (RTS) or the Data Terminal Ready (DTR) pin of a serial port. In addition to the RTS/DTR serial control lines, cocoaPTT 2.0 now supports PTT through the ÁH Router, the MacLoggerDX PTT scripts, and a user defined set of AppleScripts to handle other PTT situations.
cocoaPTT 2.0 is not a supported program. For non-commercial use, the Xcode project and sources are available at the download page.
Before calling cocoaPTT 2.0 from another application, you will need to configure the interface. First make sure that any PTT device that you might use (microKeyer, serial port, etc) are connected before launching cocoaPTT.
Select the Preferences... menu item in the cocoaPTT menu in the Menu Bar (or use the Command-comma keyboard shortcut) to bring up the Preference panel.
The preferences panel contains a tab view. You use the tab view to select which PTT device to use.
When Off is selected,
cocoaPTT will accept AppleScripts normally, but it will not
perform any PTT activity.
When Serial Port is
selected, you are presented with an interface that is
similar to the original cocoaPTT.
The popup menu has a list of available serial ports. If you don’t see the port you need, double check that your serial port is connected to the ISB bus. Then select the Off tab and the Serial Port tab again to make cocoaPTT rescan for devices.
If you still don;t see the device, you can try to look for it in the System Profiler (an application that is in the MacOS Utilities folder). If you cannot find a serial port port in the System Profiler, cocoaPTT will not be able to find it either. Please be aware that most USB serial port adapters will require a manufacturer supplied driver that works in the version of Mac OS X that you are running.
The above figure the preference panel after a Keyspan USB PDA adapter (KeySerial1) is selected.
In addition to choosing which
serial port to use, you can also choose whether to use the
RTS or the DTR pin of the port. You can also choose whether
the polarity of the RS-232 signal is high (positive voltage
at the serial port pin) to key PTT, or low (negative
voltage at the serial port pin) to key the PTT line of the
transceiver. The choice of polarity depends on how
you’ve designed your interface and what the
There is a third choice under RTS and DTR. This allows you to key both RTS and DTR at the same time. You can use this selection if you are not sure if RTS or DTR is the signal that is being used and both signals are not being used by other applications, or if the PTT device has wired-ORed the hardware RTS and DTR signals, as with the RIGblaster nomic.
Please note that different drivers / serial ports will launch to either active or inactive states (and might cause your transceiver to key before cocoaPTT is launched). There is not much you can do about that except to invert the logic state before the keying signal to the transceiver.
When the ÁH Router tab
is selected, cocoaPTT 2.0 will launch the ÁH Router application to perform PTT
on the microHAM keyers. As seen in the above figure, you
can select the DIGI KEYER, the microKeyer (original or
version II) or the CW keyer. Please note that the
microHAM USB Interface II is a simple serial
port device; you should use the Serial Port tab
instead of the ÁH Router tab to control the USB
If you select MacLoggerDX tab, cocoaPTT will send AppleScripts to the MacLoggerDX application to perform PTT.
The User Defined tab,
shown above, behaves in the same way as the User Defined PTT mechanism in
cocoaModem. This allows you to execute custom scripts to
command other applications (such as TS2K) to perform PTT.
The User Defined PTT tab allows you to place three script files, called pttKey.scpt, pttUnkey.scpt and pttQuit.scpt in a folder. The last script file is not mandatory and can be absent. When you send cocoaPTT a key or unkey AppleScript, cocoaPTT will run the script files that are in the designated folder.
Notice that the preference panel includes a checkbox called "Ignore Quit AppleScript." This checkbox allows you to set cocoaPTT to ignore any "Quit" AppleScript message. It can be useful when there are more than one application using cocoaPTT and not all of them have set the connection count (see AppleScript Interface below).
When in the idle state, the cocoaPTT control panel looks like the following.
Click on the Key button to
activate PTT. The interface turns into the following. Click
on the Unkey button to get back to the idle state.
This panel can be closed (use
the red button at the left of the panel’s title bar)
if you don’t need to look at it -- for example when
you are controlling cocoaPTT through a separate application
using the AppleScript interface.
To reopen the control panel, make the cocoaPTT app active and then select the Show PTT Control Panel menu item in the Window menu in cocoaPTT’s menu bar.
You can also reopen the control panel by selecting the Show PTT Control Panel menu item that is displayed when you hold down the mouse button over the cocoaPTT item in the Dock (see figure below):
The serial port and RTS/DTR
selections and the control panel position are saved to a
property list file called w7ay.cocoaPTT.plist in
your user Preferences folder when you quit cocoaPTT.
cocoaPTT can be controlled through AppleScript. The following is a script to activate PTT on the currently selected device (the selected tab view in the Preferences panel). This is the same script as the one in the old cocoPTT.
The following is a script to deactivate PTT.
In addition, you can control individual devices directly. This will bypass the control panel (i.e., the control panel will not show the correct PTT state). An example is
The above will key the PTT on the serial port. Setting the pttState to 0 will unkey the PTT line on the serial port. The other devices are addressed by using routerPTT, mldxPTT and userDefinedPTT.
This allows multiple applications to share cocoaPTT 2.0. To prevent an application from causing cocoaPTT to quit while another application is still using it, you can use the following script to keep a "retain count" for your application:
Each connect message will increase the connection count in cocoaPTT by 1. As long as the connection count is non-zero, cocoaPTT will not quit through AppleScript.
When your application has finished using cocoaPTT, you should send a disconnect message to reduce the connection count by 1:
Both connect and disconnect returns an integer of the updated connection count.
Finally, you can send a quit message:
This will cause cocoaPTT to quit if there are no longer any active connections. The script returns the number of active connections. If a zero is returned, cocoaPTT would quit within 2 seconds upon receiving the quit message.