User Tools

Site Tools


code:telescope_driver

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision Both sides next revision
code:telescope_driver [2010/01/17 00:00]
code:telescope_driver [2010/01/17 02:40]
pkubanek Changed to new teld.h interface
Line 1: Line 1:
 +====== Tasks in implementing driver ======
  
 +To implement an RTS2 telescope driver, you need to create a child class inherited from [[rts2teld::​Telescope]] abstract class. This class provides pure virtual methods, which you must overwrite. The method names should be self explanatory and are well documented.
 +
 +If you are using a serial port to communicate with your telescope, you can consider using [[Rts2ConnSerial]] class to handle for you communication over serial port. For example how to use this class refer to [[http://​rts-2.svn.sf.net/​viewvc/​rts-2/​trunk/​rts-2/​src/​teld/​gemini.cpp|src/​teld/​gemini.cpp]],​ which uses Rts2ConnSerial for serial port communication.
 +
 +This is a minimal example. Please refer to some real telescope driver for a more realistic example.
 +
 +<code c++>
 +#include "​teld.h"​
 +
 +using namespace rts2teld;
 +
 +class MyTelescope:​ public Telescope
 +{
 +  protected:
 +    virtual int startMove ();
 +    virtual int stopMove ();
 +    virtual int startPark ();
 +    virtual int stopPark ();
 +  public:
 +    MyTelescope (int argc, char ** argv);
 +};
 +
 +int Telescope::​startMove ()
 +{
 +  struct ln_equ_struct tar;
 +  getTarget (&tar);
 +  // do all what is needed to start move to tar.ra tar.dec
 +  // ...
 +  // return -1 in case of failure
 +  return 0;
 +}
 +
 +int MyTelescope::​stopMove ()
 +{
 +  return 0; // success
 +}
 +
 +int MyTelescope::​startPark ()
 +{
 +  // do all what is needed to move telescope to park position
 +  // return -1 in case of failure
 +  return 0;
 +}
 +
 +int MyTelescope::​endPark ()
 +{
 +  return 0;
 +}
 +
 +MyTelescope::​MyTelescope (int argc, char ** argv): Telescope (argc, argv)
 +{
 +
 +}
 +
 +</​code>​
 +
 +====== Main method ======
 +
 +After you implement your class, the main() method is trivial and effectively identical in all RTS2 devices (it basically allows you to pass in commandline arguments):
 +
 +<code c++>
 +int
 +main (int argc, char **argv)
 +{
 +  Rts2DevMyTelescope device = Rts2DevMyTelescope (argc, argv);
 +  return device.run ();
 +}
 +</​code>​
 +
 +====== Adding code to automake ======
 +
 +After you are done with coding, you should add it to Makefile.am,​ so it will be generated. If your telescope driver needs some external routines, please see example provided in [[http://​rts-2.svn.sf.net/​viewvc/​rts-2/​trunk/​rts-2/​src/​teld/​Makefile.am|src/​teld/​Makefile.am]] for Paramount or OpenTPL telescope driver.
 +
 +In Makefile.am,​ please add the name of the new executable for your driver to bin_PROGRAMS. Also add the sourcefile name to rts2_teld_mytel_SOURCES (and edit LDFLAGS and CPPFLAGS, as needed). When you have made these changes, you need to run automake && ./​config.status in rts2 directory to update the affected makefiles.
 +
 +====== Debuging a new code ======
 + 
 +When you need to debug your code, you have two options:
 +
 +  - Attach with attach <pid> command to running code
 +  - Start telescope daemon with -i option, so it will not detach from controlling terminal (set args -i in gdb)
 +
 +If you don't do this, rts2-teld-mytel will start the new daemon process and then exit - and gdb is tracking the parent, not the spawned process.
code/telescope_driver.txt ยท Last modified: 2010/01/17 00:00 (external edit)