User Tools

Site Tools


code:telescope_driver

Differences

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


Previous revision
Next revision
code:telescope_driver [2010/01/17 02:40] – Changed to new teld.h interface pkubanek
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)