16#include <pybind11/pybind11.h>
17#include <pybind11/stl.h>
20namespace py = pybind11;
32 using IDaasApiEvent::IDaasApiEvent;
35 void dinAcceptedEvent(
din_t din)
override {
36 PYBIND11_OVERRIDE_PURE(
void, IDaasApiEvent, dinAcceptedEvent, din);
40 void ddoReceivedEvent(
int payload_size,
typeset_t t,
din_t din)
override {
41 PYBIND11_OVERRIDE_PURE(
void, IDaasApiEvent, ddoReceivedEvent, payload_size, t, din);
45 void frisbeeReceivedEvent(
din_t din)
override {
46 PYBIND11_OVERRIDE_PURE(
void, IDaasApiEvent, frisbeeReceivedEvent, din);
50 void nodeStateReceivedEvent(
din_t din)
override {
51 PYBIND11_OVERRIDE_PURE(
void, IDaasApiEvent, nodeStateReceivedEvent, din);
55 void atsSyncCompleted(
din_t din)
override {
56 PYBIND11_OVERRIDE_PURE(
void, IDaasApiEvent, atsSyncCompleted, din);
60 void frisbeeDperfCompleted(
din_t din, uint32_t packets_sent, uint32_t block_size)
override {
61 PYBIND11_OVERRIDE_PURE(
void, IDaasApiEvent, frisbeeDperfCompleted, din, packets_sent, block_size);
75PYBIND11_MODULE(pydaasiot, m) {
76 m.doc() =
"Python bindings for libdaas.a (DaaS-IoT SDK)";
82 py::enum_<daas_error_t>(m,
"daas_error_t")
106 py::enum_<link_t>(m,
"link_t")
119 py::enum_<performs_mode_t>(m,
"performs_mode_t")
128 py::class_<DDO>(m,
"DDO")
129 .def(py::init<>(),
"Default constructor")
130 .def(py::init<typeset_t>(),
"Constructor with a typeset")
131 .def(py::init<typeset_t, stime_t>(),
"Constructor with typeset and timestamp")
140 .def(
"appendPayloadData",
141 [](
DDO &self, py::bytes data) {
142 std::string buffer = data;
145 "Append binary data to the payload")
147 .def(
"getPayloadAsBinary",
150 std::vector<uint8_t> buf(size);
152 return py::bytes(
reinterpret_cast<char*
>(buf.data()), size);
154 "Return the payload as a Python bytes object");
160 py::class_<IDaasApiEvent, PyIDaasApiEvent>(m,
"IDaasApiEvent")
161 .def(py::init<>(),
"Base class for DaaS event handlers");
167 py::class_<DaasWrapper>(m,
"DaasWrapper")
170 }),
"Default constructor with no configuration and no event handler")
172 .def(py::init<const char*, IDaasApiEvent*>(),
173 py::arg(
"config") =
nullptr,
174 py::arg(
"eventHandler") =
nullptr,
175 "Construct a DaaS wrapper with configuration and optional event handler")
178 py::arg(
"sid"), py::arg(
"din"),
179 "Initialize the DaaS node with SID and DIN")
182 py::arg(
"mode"),
"Start internal execution loop")
193 py::arg(
"link"), py::arg(
"driver"),
194 "Enable a driver on this node")
198 py::arg(
"sid"), py::arg(
"din"), py::arg(
"link"), py::arg(
"uri"),
199 "Configure and start a node (direct parameters)")
203 py::arg(
"configFilePath"),
204 "Configure and start a node using a JSON config file")
209 "Fetch state from a remote node")
213 "Store configuration (requires C++ IDepot)")
216 "Load configuration (requires C++ IDepot)")
221 .def(
"map", py::overload_cast<din_t, link_t, const char*>(&
DaasWrapper::map),
222 py::arg(
"din"), py::arg(
"link"), py::arg(
"uri"),
223 "Map a node with link and URI")
225 .def(
"map", py::overload_cast<din_t, link_t, const char*, const char*>(&
DaasWrapper::map),
226 py::arg(
"din"), py::arg(
"link"), py::arg(
"uri"), py::arg(
"securityKey"),
227 "Map a node with link, URI and security key")
233 py::arg(
"din"), py::arg(
"count"),
234 "Return the number of available packets from a remote node")
237 DDO* ddo_ptr =
nullptr;
239 if (err !=
ERROR_NONE || ddo_ptr ==
nullptr) {
240 return py::make_tuple(err, py::none());
242 return py::make_tuple(err, ddo_ptr);
244 "Pull a DDO from a remote node; returns (err, ddo)")
247 return self.
push(din, outboundDDO);
248 }, py::arg(
"din"), py::arg(
"outboundDDO"),
249 "Push a DDO to a remote node")
253 "Send a frisbee ping to a node")
256 "Get active network interfaces")
259 "List all network interfaces on the system");
void setTimestamp(stime_t tstamp)
void setTypeset(typeset_t)
uint32_t getPayloadSize(void)
uint32_t allocatePayload(uint32_t size_)
uint32_t appendPayloadData(const void *data_, uint32_t size_)
uint32_t getPayloadAsBinary(uint8_t *pbuffer_, unsigned offset_, uint32_t maxSize_)
Classe wrapper che incapsula la logica di utilizzo della libreria libdaas.a.
std::vector< std::string > getActiveInterfaces()
daas_error_t pull(din_t din, DDO **inboundDDO)
Riceve un pacchetto DDO dal nodo remoto.
daas_error_t doPerform(performs_mode_t mode)
Attiva l'esecuzione interna del nodo.
daas_error_t enableDriver(link_t link, const char *driver)
Abilita un driver su uno specifico link.
const nodestate_t & fetch(din_t din, uint16_t opts)
daas_error_t doInit(din_t sid, din_t din)
Inizializza il nodo DaaS con SID e DIN.
daas_error_t setupNode(din_t sid, din_t din, link_t link, const char *uri)
daas_error_t map(din_t din)
Mappa un nodo con DIN noto nella rete (formato base)
daas_error_t remove(din_t din)
Rimuove un nodo precedentemente mappato.
daas_error_t doEnd()
Termina le attivitą del nodo.
bool loadConfiguration(IDepot *storage_interface)
Carica la configurazione usando un'interfaccia IDepot.
const nodestate_t & status(din_t din)
daas_error_t doReset()
Resetta lo stato del nodo.
bool storeConfiguration(IDepot *storage_interface)
Salva la configurazione corrente usando un'interfaccia IDepot.
const char * getVersion()
Restituisce la versione della libreria libdaas.a.
std::vector< InterfaceInfo > listSystemInterfaces()
daas_error_t availablesPull(din_t din, uint32_t &count)
Restituisce il numero di pacchetti disponibili da ricevere.
const char * listAvailableDrivers()
daas_error_t push(din_t din, DDO *outboundDDO)
Invia un pacchetto DDO al nodo remoto.
daas_error_t locate(din_t din)
Localizza un nodo in rete.
daas_error_t frisbee(din_t din)
Esegue un invio rapido (fire-and-forget)
@ ERROR_THREADS_ALREADY_STARTED
@ ERROR_CANNOT_INITIALIZE
@ ERROR_INVALID_USER_TYPESET
@ ERROR_CORE_ALREADY_INITIALIZED
@ ERROR_CANNOT_CREATE_NODE
@ ERROR_DIN_ALREADY_EXIST