56 PROTO_WAKAAMA_ACCESS_READ = (1 << 0),
57 PROTO_WAKAAMA_ACCESS_WRITE = (1 << 1),
58 PROTO_WAKAAMA_ACCESS_EXECUTE = (1 << 2),
59 PROTO_WAKAAMA_ACCESS_RW = 3,
60 PROTO_WAKAAMA_ACCESS_RWE = 7,
63 static constexpr size_t RX_BUFFER_SIZE = 2048;
64 static constexpr size_t IO_CHUNK_CAP = RX_BUFFER_SIZE;
68 WAKAAMA_OBJECT_DEVICE = 3,
69 WAKAAMA_OBJECT_CONNECTIVITY_MONITORING = 4,
70 WAKAAMA_OBJECT_FIRMWARE_UPDATE = 5,
71 WAKAAMA_OBJECT_SOFTWARE_MANAGEMENT = 9,
72 WAKAAMA_OBJECT_CELLULAR_CONNECTIVITY = 10,
73 WAKAAMA_OBJECT_BINARY_APP_DATA_CONTAINER = 19,
74 WAKAAMA_OBJECT_DIGITAL_INPUT = 3200,
75 WAKAAMA_OBJECT_DIGITAL_OUTPUT = 3201,
76 WAKAAMA_OBJECT_ANALOG_INPUT = 3202,
77 WAKAAMA_OBJECT_ANALOG_OUTPUT = 3203,
78 WAKAAMA_OBJECT_GENERIC_SENSOR = 3300,
79 WAKAAMA_OBJECT_ILLUMINANCE = 3301,
80 WAKAAMA_OBJECT_LIGHT = 3301,
81 WAKAAMA_OBJECT_TEMPERATURE = 3303,
82 WAKAAMA_OBJECT_HUMIDITY = 3304,
83 WAKAAMA_OBJECT_ACTUATION = 3306,
84 WAKAAMA_OBJECT_LIGHT_CONTROL = 3311,
85 WAKAAMA_OBJECT_ACCELEROMETER = 3313,
86 WAKAAMA_OBJECT_MAGNETOMETER = 3314,
87 WAKAAMA_OBJECT_BAROMETER = 3315,
88 WAKAAMA_OBJECT_VOLTAGE = 3316,
89 WAKAAMA_OBJECT_CURRENT = 3317,
90 WAKAAMA_OBJECT_PRESSURE = 3323,
91 WAKAAMA_OBJECT_GYROMETER = 3334,
96 WAKAAMA_DEVICE_RESOURCE_MANUFACTURER = 0,
97 WAKAAMA_DEVICE_RESOURCE_MODEL_NUMBER = 1,
98 WAKAAMA_DEVICE_RESOURCE_SERIAL_NUMBER = 2,
99 WAKAAMA_DEVICE_RESOURCE_FIRMWARE_VERSION = 3,
100 WAKAAMA_DEVICE_RESOURCE_POWER_SOURCE_VOLTAGE = 7,
101 WAKAAMA_DEVICE_RESOURCE_BATTERY_LEVEL = 9,
102 WAKAAMA_DEVICE_RESOURCE_ERROR_CODE = 11,
103 WAKAAMA_DEVICE_RESOURCE_CURRENT_TIME = 13,
104 WAKAAMA_DEVICE_RESOURCE_BINDING_MODES = 16,
105 WAKAAMA_DEVICE_RESOURCE_BATTERY_STATUS = 20,
110 WAKAAMA_RESOURCE_BINARY_APP_DATA = 0,
111 WAKAAMA_RESOURCE_BINARY_APP_DATA_PRIORITY = 1,
112 WAKAAMA_RESOURCE_BINARY_APP_DATA_CREATION_TIME = 2,
113 WAKAAMA_RESOURCE_BINARY_APP_DATA_DESCRIPTION = 3,
114 WAKAAMA_RESOURCE_BINARY_APP_DATA_FORMAT = 4,
115 WAKAAMA_RESOURCE_BINARY_APP_ID = 5,
117 WAKAAMA_RESOURCE_FIRMWARE_PACKAGE = 0,
118 WAKAAMA_RESOURCE_FIRMWARE_PACKAGE_URI = 1,
119 WAKAAMA_RESOURCE_FIRMWARE_UPDATE = 2,
120 WAKAAMA_RESOURCE_FIRMWARE_STATE = 3,
121 WAKAAMA_RESOURCE_FIRMWARE_UPDATE_RESULT = 5,
122 WAKAAMA_RESOURCE_FIRMWARE_PACKAGE_NAME = 6,
123 WAKAAMA_RESOURCE_FIRMWARE_PACKAGE_VERSION = 7,
124 WAKAAMA_RESOURCE_FIRMWARE_PROTOCOL_SUPPORT = 8,
125 WAKAAMA_RESOURCE_FIRMWARE_DELIVERY_METHOD = 9,
126 WAKAAMA_RESOURCE_FIRMWARE_CANCEL = 10,
128 WAKAAMA_RESOURCE_SOFTWARE_PACKAGE_NAME = 0,
129 WAKAAMA_RESOURCE_SOFTWARE_PACKAGE_VERSION = 1,
130 WAKAAMA_RESOURCE_SOFTWARE_PACKAGE = 2,
131 WAKAAMA_RESOURCE_SOFTWARE_PACKAGE_URI = 3,
132 WAKAAMA_RESOURCE_SOFTWARE_INSTALL = 4,
133 WAKAAMA_RESOURCE_SOFTWARE_UNINSTALL = 6,
134 WAKAAMA_RESOURCE_SOFTWARE_UPDATE_STATE = 7,
135 WAKAAMA_RESOURCE_SOFTWARE_UPDATE_RESULT = 9,
136 WAKAAMA_RESOURCE_SOFTWARE_ACTIVATE = 10,
137 WAKAAMA_RESOURCE_SOFTWARE_DEACTIVATE = 11,
138 WAKAAMA_RESOURCE_SOFTWARE_ACTIVATION_STATE = 12,
140 WAKAAMA_RESOURCE_DIGITAL_INPUT_STATE = 5500,
141 WAKAAMA_RESOURCE_DIGITAL_INPUT_COUNTER = 5501,
142 WAKAAMA_RESOURCE_DIGITAL_INPUT_POLARITY = 5502,
143 WAKAAMA_RESOURCE_DIGITAL_INPUT_DEBOUNCE = 5503,
144 WAKAAMA_RESOURCE_DIGITAL_INPUT_EDGE_SELECTION = 5504,
145 WAKAAMA_RESOURCE_DIGITAL_INPUT_COUNTER_RESET = 5505,
146 WAKAAMA_RESOURCE_DIGITAL_OUTPUT_STATE = 5550,
147 WAKAAMA_RESOURCE_DIGITAL_OUTPUT_POLARITY = 5551,
148 WAKAAMA_RESOURCE_ANALOG_INPUT_CURRENT_VALUE = 5600,
149 WAKAAMA_RESOURCE_ANALOG_OUTPUT_CURRENT_VALUE = 5650,
150 WAKAAMA_RESOURCE_SENSOR_VALUE = 5700,
151 WAKAAMA_RESOURCE_UNITS = 5701,
152 WAKAAMA_RESOURCE_SENSOR_UNITS = 5701,
153 WAKAAMA_RESOURCE_COLOUR = 5706,
154 WAKAAMA_RESOURCE_COLOR = 5706,
155 WAKAAMA_RESOURCE_APPLICATION_TYPE = 5750,
156 WAKAAMA_RESOURCE_SENSOR_TYPE = 5751,
157 WAKAAMA_RESOURCE_MIN_MEASURED_VALUE = 5601,
158 WAKAAMA_RESOURCE_MAX_MEASURED_VALUE = 5602,
159 WAKAAMA_RESOURCE_MIN_RANGE_VALUE = 5603,
160 WAKAAMA_RESOURCE_MAX_RANGE_VALUE = 5604,
161 WAKAAMA_RESOURCE_RESET_MIN_MAX_MEASURED_VALUES = 5605,
162 WAKAAMA_RESOURCE_X_VALUE = 5702,
163 WAKAAMA_RESOURCE_Y_VALUE = 5703,
164 WAKAAMA_RESOURCE_Z_VALUE = 5704,
165 WAKAAMA_RESOURCE_TIMESTAMP = 5518,
166 WAKAAMA_RESOURCE_ON_OFF = 5850,
167 WAKAAMA_RESOURCE_DIMMER = 5851,
168 WAKAAMA_RESOURCE_ON_TIME = 5852,
173 PROTO_WAKAAMA_CFG_FIRST = 0,
174 PROTO_WAKAAMA_CFG_ENDPOINT = 1,
175 PROTO_WAKAAMA_CFG_SERVER_HOST = 2,
176 PROTO_WAKAAMA_CFG_SERVER_PORT = 3,
177 PROTO_WAKAAMA_CFG_LOCAL_PORT = 4,
178 PROTO_WAKAAMA_CFG_LIFETIME = 5,
179 PROTO_WAKAAMA_CFG_IOBIND = 6,
180 PROTO_WAKAAMA_CFG_DEVICE_MANUFACTURER = 7,
181 PROTO_WAKAAMA_CFG_DEVICE_MODEL_NUMBER = 8,
182 PROTO_WAKAAMA_CFG_DEVICE_SERIAL_NUMBER = 9,
183 PROTO_WAKAAMA_CFG_DEVICE_FIRMWARE_VERSION = 10,
184 PROTO_WAKAAMA_CFG_SERVER = 11,
185 PROTO_WAKAAMA_CFG_DEVICE_BATTERY_VOLTAGE = 12,
186 PROTO_WAKAAMA_CFG_DEVICE_BATTERY_LEVEL = 13,
187 PROTO_WAKAAMA_CFG_DEVICE_BATTERY_STATUS = 14,
188 PROTO_WAKAAMA_CFG_QUEUE_MODE = 15,
189 PROTO_WAKAAMA_CFG_LAST = 31
194 WAKAAMA_SERVER_SCHEME_COAP = 0,
195 WAKAAMA_SERVER_SCHEME_COAPS = 1,
201#ifdef CONFIG_DAWN_OBJECT_HAS_NAME
202 const char *getClassNameStr()
const override
215 const char *deviceManufacturer()
const
217 return manufacturer.c_str();
220 const char *deviceModelNumber()
const
222 return modelNumber.c_str();
225 const char *deviceSerialNumber()
const
227 return serialNumber.c_str();
230 const char *deviceFirmwareVersion()
const
232 return firmwareVersion.c_str();
242 return this->
getIO(
id);
262#ifdef CONFIG_DAWN_IO_NOTIFY
263 void queueResourceChanged(uint16_t objectId, uint16_t instanceId, uint16_t resourceId);
358 friend class wakaama_internal::ClientRuntime;
359 friend class wakaama_internal::ObjectBinding;
360 friend class wakaama_internal::Transport;
365 std::string pskIdentity;
366 std::vector<uint8_t> pskKey;
369 uint16_t shortServerId;
370 uint16_t securityInstanceId;
371 uint16_t serverInstanceId;
373 uint32_t bootstrapTimeout;
375 uint8_t securityMode;
380#ifdef CONFIG_DAWN_IO_NOTIFY
381 struct ChangedResource
389 wakaama_internal::ClientRuntime *runtime;
390 wakaama_internal::Transport *transport;
391 std::vector<wakaama_internal::ObjectBinding *> objects;
392 SDeviceIoBind devBattVoltage;
393 SDeviceIoBind devBattLevel;
394 SDeviceIoBind devBattStatus;
395 std::string endpoint;
396 std::string serverHost;
397 std::string manufacturer;
398 std::string modelNumber;
399 std::string serialNumber;
400 std::string firmwareVersion;
404 uint16_t shortServerId;
406 std::vector<ServerConfig> servers;
407#ifdef CONFIG_DAWN_IO_NOTIFY
408 std::mutex changedResourcesMutex;
409 std::vector<ChangedResource> changedResources;
410 size_t changedResourcesCapacity;
411 std::atomic_bool acceptChangedResources;
414 int configureDesc(
const CDescObject &desc);
415 int configureServer(
const SObjectCfg::SObjectCfgItem *item);
416 void addDefaultServer();
418 void destroyObjects();
419 int initConnectionPool();
423 void closeAllConnections();
424 void destroyConnectionPool();
426 size_t serverPoolCapacity()
const;
427 std::string serverUri(
const ServerConfig &server)
const;
428 const ServerConfig *findServer(uint16_t securityInstanceId)
const;
429#ifdef CONFIG_DAWN_IO_NOTIFY
430 void processChangedResources();