Instrument Neutral Distributed Interface INDI  2.0.2
Public Member Functions | List of all members
INDI::BaseClient Class Reference

Class to provide basic client functionality. More...

#include <baseclient.h>

Inheritance diagram for INDI::BaseClient:
INDI::AbstractBaseClient INDI::BaseMediator Imager LoaderClient MathPluginManagerClient MyClient MyClient SkySafariClient WatchDogClient

Public Member Functions

 BaseClient ()
 
virtual ~BaseClient ()
 
bool connectServer () override
 Connect to INDI server. More...
 
bool disconnectServer (int exit_code=0) override
 Disconnect from INDI server. Any devices previously created will be deleted and memory cleared. More...
 
void enableDirectBlobAccess (const char *dev=nullptr, const char *prop=nullptr)
 activate zero-copy delivering of the blob content. When enabled, all blob copy will be avoided when possible (depending on the connection). This changes how the IBLOB.data field : More...
 
- Public Member Functions inherited from INDI::AbstractBaseClient
 AbstractBaseClient ()=delete
 
virtual ~AbstractBaseClient ()
 
void setServer (const char *hostname, unsigned int port)
 Set the server host name and port. More...
 
const char * getHost () const
 Get the server host name. More...
 
int getPort () const
 Get the port number. More...
 
bool isServerConnected () const
 Get status of the connection. More...
 
void setConnectionTimeout (uint32_t seconds, uint32_t microseconds)
 setConnectionTimeout Set connection timeout. By default it is 3 seconds. More...
 
void setVerbose (bool enable)
 setVerbose Set verbose mode More...
 
bool isVerbose () const
 isVerbose Is client in verbose mode? More...
 
void watchDevice (const char *deviceName)
 Add a device to the watch list. More...
 
void watchDevice (const char *deviceName, const std::function< void(BaseDevice)> &callback)
 
void watchProperty (const char *deviceName, const char *propertyName)
 watchProperties Add a property to the watch list. When communicating with INDI server. More...
 
void connectDevice (const char *deviceName)
 Disconnect INDI driver. More...
 
void disconnectDevice (const char *deviceName)
 Disconnect INDI driver. More...
 
INDI::BaseDevice getDevice (const char *deviceName)
 
std::vector< INDI::BaseDevicegetDevices () const
 
bool getDevices (std::vector< INDI::BaseDevice > &deviceList, uint16_t driverInterface)
 getDevices Returns list of devices that belong to a particular DRIVER_INTERFACE class. More...
 
void setBLOBMode (BLOBHandling blobH, const char *dev, const char *prop=nullptr)
 Set Binary Large Object policy mode. More...
 
BLOBHandling getBLOBMode (const char *dev, const char *prop=nullptr)
 getBLOBMode Get Binary Large Object policy mode IF set previously by setBLOBMode More...
 
void sendNewProperty (INDI::Property pp)
 Send new Property command to server. More...
 
void sendNewText (INDI::Property pp)
 Send new Text command to server. More...
 
void sendNewText (const char *deviceName, const char *propertyName, const char *elementName, const char *text)
 Send new Text command to server. More...
 
void sendNewNumber (INDI::Property pp)
 Send new Number command to server. More...
 
void sendNewNumber (const char *deviceName, const char *propertyName, const char *elementName, double value)
 Send new Number command to server. More...
 
void sendNewSwitch (INDI::Property pp)
 Send new Switch command to server. More...
 
void sendNewSwitch (const char *deviceName, const char *propertyName, const char *elementName)
 Send new Switch command to server. More...
 
void startBlob (const char *devName, const char *propName, const char *timestamp)
 Send opening tag for BLOB command to server. More...
 
void sendOneBlob (IBLOB *bp)
 Send ONE blob content to server. The BLOB data in raw binary format and will be converted to base64 and sent to server. More...
 
void sendOneBlob (INDI::WidgetViewBlob *blob)
 
void sendOneBlob (const char *blobName, unsigned int blobSize, const char *blobFormat, void *blobBuffer)
 Send ONE blob content to server. The BLOB data in raw binary format and will be converted to base64 and sent to server. More...
 
void finishBlob ()
 Send closing tag for BLOB command to server. More...
 
void sendPingRequest (const char *uid)
 Send one ping request, the server will answer back with the same uuid. More...
 
void sendPingReply (const char *uid)
 Send a ping reply for the given uuid. More...
 
- Public Member Functions inherited from INDI::BaseMediator
virtual ~BaseMediator ()=default
 
virtual void newDevice (INDI::BaseDevice baseDevice)
 Emmited when a new device is created from INDI server. More...
 
virtual void removeDevice (INDI::BaseDevice baseDevice)
 Emmited when a device is deleted from INDI server. More...
 
virtual void newProperty (INDI::Property property)
 Emmited when a new property is created for an INDI driver. More...
 
virtual void updateProperty (INDI::Property property)
 Emmited when a new property value arrives from INDI server. More...
 
virtual void removeProperty (INDI::Property property)
 Emmited when a property is deleted for an INDI driver. More...
 
virtual void newMessage (INDI::BaseDevice baseDevice, int messageID)
 Emmited when a new message arrives from INDI server. More...
 
virtual void serverConnected ()
 Emmited when the server is connected. More...
 
virtual void serverDisconnected (int exit_code)
 Emmited when the server gets disconnected. More...
 
virtual void newDevice (INDI::BaseDevice *dp)
 Emmited when a new device is created from INDI server. More...
 
virtual void removeDevice (INDI::BaseDevice *dp)
 Emmited when a device is deleted from INDI server. More...
 
virtual void newProperty (INDI::Property *property)
 Emmited when a new property is created for an INDI driver. More...
 
virtual void removeProperty (INDI::Property *property)
 Emmited when a property is deleted for an INDI driver. More...
 
virtual void newSwitch (ISwitchVectorProperty *svp)
 Emmited when a new switch value arrives from INDI server. More...
 
virtual void newNumber (INumberVectorProperty *nvp)
 Emmited when a new number value arrives from INDI server. More...
 
virtual void newText (ITextVectorProperty *tvp)
 Emmited when a new text value arrives from INDI server. More...
 
virtual void newLight (ILightVectorProperty *lvp)
 Emmited when a new light value arrives from INDI server. More...
 
virtual void newBLOB (IBLOB *bp)
 Emmited when a new property value arrives from INDI server. More...
 
virtual void newMessage (INDI::BaseDevice *dp, int messageID)
 Emmited when a new message arrives from INDI server. More...
 

Additional Inherited Members

- Protected Member Functions inherited from INDI::AbstractBaseClient
virtual void newPingReply (std::string uid)
 pingReply are sent by the server on response to pingReply (see above). More...
 
virtual void newUniversalMessage (std::string message)
 newUniversalMessage Universal messages are sent from INDI server without a specific device. It is addressed to the client overall. More...
 
 AbstractBaseClient (std::unique_ptr< AbstractBaseClientPrivate > &&dd)
 
- Protected Attributes inherited from INDI::AbstractBaseClient
std::unique_ptr< AbstractBaseClientPrivated_ptr_indi
 

Detailed Description

Class to provide basic client functionality.

BaseClient enables accelerated development of INDI Clients by providing a framework that facilitates communication, device handling, and event notification. By subclassing BaseClient, clients can quickly connect to an INDI server, and query for a set of INDI::BaseDevice devices, and read and write properties seamlessly. Event driven programming is possible due to notifications upon reception of new devices or properties.

Upon connecting to an INDI server, it creates a dedicated thread to handle all incoming traffic. The thread is terminated when disconnectServer() is called or when a communication error occurs.

Attention
All notifications functions defined in INDI::BaseMediator must be implemented in the client class even if they are not used because these are pure virtual functions.
See also
INDI Client Tutorial for more details.
Author
Jasem Mutlaq
Ludovic Pollet
Examples
tutorial_client.h.

Definition at line 51 of file baseclient.h.

Constructor & Destructor Documentation

◆ BaseClient()

INDI::BaseClient::BaseClient ( )

Definition at line 288 of file baseclient.cpp.

◆ ~BaseClient()

INDI::BaseClient::~BaseClient ( )
virtual

Definition at line 292 of file baseclient.cpp.

Member Function Documentation

◆ connectServer()

bool INDI::BaseClient::connectServer ( )
overridevirtual

Connect to INDI server.

Returns
True if the connection is successful, false otherwise.
Note
This function blocks until connection is either successull or unsuccessful.

Implements INDI::AbstractBaseClient.

Examples
tutorial_client.cpp.

Definition at line 308 of file baseclient.cpp.

◆ disconnectServer()

bool INDI::BaseClient::disconnectServer ( int  exit_code = 0)
overridevirtual

Disconnect from INDI server. Any devices previously created will be deleted and memory cleared.

Returns
True if disconnection is successful, false otherwise.

Implements INDI::AbstractBaseClient.

Definition at line 343 of file baseclient.cpp.

◆ enableDirectBlobAccess()

void INDI::BaseClient::enableDirectBlobAccess ( const char *  dev = nullptr,
const char *  prop = nullptr 
)

activate zero-copy delivering of the blob content. When enabled, all blob copy will be avoided when possible (depending on the connection). This changes how the IBLOB.data field :

  • it will point to readonly data: The client must not try to modify its content or realloc it
  • when freeing is required, the function IDSharedBlobFree must be used instead of free/realloc.
Parameters
devname of device, can be NULL to all devs
propproperty name, can be NULL to activate for all property of dev
Examples
tutorial_client.cpp.

Definition at line 360 of file baseclient.cpp.


The documentation for this class was generated from the following files: