A skeleton file is an external XML file with the driver properties already defined. This tutorial illustrates how to create a driver from a skeleton file and parse/process the properties. The skeleton file name is tutorial_four_sk.xml
#if 0
Simple Skeleton - Tutorial Four
Demonstration of libindi v0.7 capabilities.
Copyright (C) 2010 Jasem Mutlaq (mutlaqja@ikarustech.com)
This library is free software;
you can redistribute it and / or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation;
either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT
ANY WARRANTY;
without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library;
if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301 USA
#endif
#include <cstdlib>
#include <cstring>
#include <memory>
#include <sys/stat.h>
{
DefaultDevice::initProperties();
const char *skelFileName = "/usr/share/indi/tutorial_four_sk.xml";
struct stat st;
char *skel = getenv("INDISKEL");
if (skel != nullptr)
else if (stat(skelFileName, &st) == 0)
else
"No skeleton file was specified. Set environment variable INDISKEL to the skeleton path and try again.\n");
int i = 0;
IDLog(
"Property #%d: %s\n", i++, oneProperty.getName());
number.
onUpdate([number,
this]()
mutable
{
{
number.
apply(
"Cannot change property while device is disconnected.");
return;
}
});
{
{
menu.
apply(
"Cannot change property while device is disconnected.");
return;
}
if (index < 0)
return;
});
{
{
blob.
apply(
"Cannot change property while device is disconnected.");
return;
}
IDLog(
"Received BLOB with name %s, format %s, and size %d, and bloblen %d\n",
blob[0].getName(), blob[0].getFormat(), blob[0].getSize(), blob[0].getBlobLen());
"##################################\n"
"%s\n"
"##################################\n",
blob[0].getBlobAsString().c_str());
blob[0].setSize(0);
});
return true;
}
{
static int configLoaded = 0;
if (configLoaded == 0)
{
configLoaded = 1;
}
}
{
return true;
}
{
return true;
}
{
return "Simple Skeleton";
}
INDI::PropertyNumber getNumber(const char *name) const
bool buildSkeleton(const char *filename)
Build driver properties from a skeleton file.
INDI::PropertySwitch getSwitch(const char *name) const
INDI::PropertyBlob getBLOB(const char *name) const
INDI::PropertyLight getLight(const char *name) const
Properties getProperties()
Return a list of all properties in the device.
virtual void ISGetProperties(const char *dev)
define the driver's properties to the client. Usually, only a minimum set of properties are defined t...
virtual bool loadConfig(bool silent=false, const char *property=nullptr)
Load the last saved configuration file.
void addAuxControls()
Add Debug, Simulation, and Configuration options to the driver.
void setState(IPState state)
void apply(const char *format,...) const ATTRIBUTE_FORMAT_PRINTF(2
int findOnSwitchIndex() const
void onUpdate(const std::function< void()> &callback)
bool initProperties() override
Initilize properties initial state and value. The child class must implement this function.
bool Connect() override
Connect to the device. INDI::DefaultDevice implementation connects to appropriate connection interfac...
const char * getDefaultName() override
bool Disconnect() override
Disconnect from device.
void ISGetProperties(const char *dev) override
define the driver's properties to the client. Usually, only a minimum set of properties are defined t...
void IDLog(const char *fmt,...)
std::unique_ptr< SimpleSkeleton > simpleSkeleton(new SimpleSkeleton())
Construct a basic INDI CCD device that demonstrates ability to define properties from a skeleton file...