Skip to content

file /Users/ios_developer/workspace/coldwave-os/build/_deps/flake-src/inc/Object.h

Types

Name
classflake::Indication
classflake::Confirmation
classflake::IndicationSink
classflake::ConfirmationSink
classflake::ConnectedObject
classflake::Stream
classflake::Object
classflake::ObjectDelegate

Defines

Name
EMPTY_ADDR
TYPE_UUID_SERVICE
MAX_OBJECT_POOL

Macros Documentation

define EMPTY_ADDR

cpp
#define EMPTY_ADDR UINT16_C(0xFFFFU)

define TYPE_UUID_SERVICE

cpp
#define TYPE_UUID_SERVICE "00000000-0000-0000-0000-000000000000"

define MAX_OBJECT_POOL

cpp
#define MAX_OBJECT_POOL (4UL)

Source code

cpp
/*******************************************************************************
 * @file     Object.h
 * @license   This file is part of the ImagineOn Flake software package
 *            licensed under the ImagineOn software-licensing terms available
 *            under https://www.imagineon.de/de/info/licensing-terms
 * @copyright Copyright (c) 2025 ImagineOn GmbH. www.imagineon.de.
*******************************************************************************/

#ifndef FLAKE_OBJECT_H_
#define FLAKE_OBJECT_H_

#include "FlakeTypes.h"
#include <functional>

#define EMPTY_ADDR UINT16_C(0xFFFFU)

#define TYPE_UUID_SERVICE "00000000-0000-0000-0000-000000000000"

#define MAX_OBJECT_POOL (4UL)

namespace flake
{
    class Table;
    class ObjectImpl;
    class Indication
    {
    public:
        virtual ~Indication() noexcept = default;
        virtual uint8_t
        type() const = 0;

        virtual addr_t
        source() const = 0;

        virtual addr_t
        destination() const = 0;

        virtual const PropArray&
        getData() const = 0;

        virtual void
        ack(int8_t result, const PropArray& va = PropArray()) const = 0;

        virtual bool
        acknowledged() const = 0;
    };

    typedef uint16_t Token;

    class Confirmation
    {
    public:
        virtual ~Confirmation() noexcept = default;
        virtual uint8_t
        type() const = 0;

        virtual addr_t
        source() const = 0;

        virtual addr_t
        destination() const = 0;

        virtual const PropArray&
        getData() const = 0;

        virtual int8_t
        result() const = 0;

        virtual Token
        token() const = 0;
    };

    class IndicationSink
    {
    protected:
        ~IndicationSink() = default;

    public:
        virtual void
        onIndication(const Indication& indication) = 0;
    };

    class ConfirmationSink
    {
    protected:
        ~ConfirmationSink() = default;

    public:
        virtual void
        onConfirmation(const Confirmation& confirmation) = 0;
    };

    class ConnectedObject : public IndicationSink, public ConfirmationSink
    {
    protected:
        ~ConnectedObject() noexcept = default;

    public:
       // static const addr_t EMPTY_ADDR;

        virtual addr_t addr() const = 0;

        virtual addr_t broadcastAddr() const = 0;

        virtual addr_t parentAddr() const = 0;

    };

    class Stream
    {
    protected:
        ~Stream() noexcept = default;

    public:
        virtual int write(uint8_t* data, unsigned int len) = 0;

        virtual int read(uint8_t* data, unsigned int* len, unsigned int max_len) = 0;


        virtual int seek(unsigned int pos) = 0;

        virtual unsigned int pos() = 0;

        virtual int close() = 0;

        virtual uint32_t streamId() = 0;
    };

    class Object
    {
        friend class ConnectionImpl;
    protected:
        ~Object() noexcept = default;
        virtual ObjectImpl* impl() = 0;
    public:

        virtual int
        invoke(std::string command, PropArray& params,
               bool blocking, PropArray& reply) = 0;

        virtual int
        broadcast(const std::string command, PropArray& params) = 0;

        virtual int
        getProperties(PropArray& properties) = 0;

        virtual int
        setProperties(PropArray& properties) = 0;

        virtual int
        setProperty(const Property& property) = 0;

        virtual void
        getProperty(Property& property) = 0;

        virtual int
        openProperty(const uint32_t propTag, Stream** stream) = 0;


        virtual int
        subscribe(std::function<void (const Indication&)> f) = 0;   //NOLINT: MISRA 7-3-1 not detected right

        virtual void
        unsubscribe() = 0;

        virtual int
        sync(unsigned timeout_ms, bool block) = 0;

        virtual void
        defer() = 0;

        virtual int
        syncDeferred(unsigned timeout_ms, bool block) = 0;

        virtual bool
        hasDeferred() = 0;

        virtual void
        clear() = 0;

    };

    class ObjectDelegate
    {
    public:
        virtual ~ObjectDelegate() = default;
        virtual Object* handle() = 0;

        virtual int8_t
        handleCustomMessage(std::string name, const PropArray& data, PropArray& outProps) = 0;

        virtual int8_t
        handleStreamOpen(Stream* s) = 0;

        virtual int8_t
        handleStreamClose(Stream* s) = 0;

        virtual int8_t
        handleStreamWrite(Stream* s, uint8_t* cb, uint16_t len) = 0;

        virtual int8_t
        handleStreamRead(Stream* s, uint8_t* cb, uint16_t* len, uint16_t max_len) = 0;

        virtual int
        setPropertyRequested(uint32_t tag, Property& value, const PropArray& transaction, bool internal) = 0;

        virtual int
        getPropertyRequested(uint32_t tag, Property& value) = 0;

        virtual void
        propertyChanged(const Property&) = 0;

        virtual void
        onInitialized() = 0;
    };
}

#endif /* FLAKE_OBJECT_H */