84 lines
2.9 KiB
C
84 lines
2.9 KiB
C
#ifndef THREAD_DATASET_H
|
|
#define THREAD_DATASET_H
|
|
|
|
#include <string.h>
|
|
|
|
#include "openthread/dataset.h"
|
|
#include "openthread/ip6.h"
|
|
|
|
/*
|
|
* TODO pro studenty:
|
|
* - nastavte parametry site Thread podle README.md
|
|
*/
|
|
#define THREAD_NETWORK_NAME "TODO_NETWORK_NAME"
|
|
#define THREAD_CHANNEL 0
|
|
#define THREAD_PANID 0x0000
|
|
#define THREAD_MESH_LOCAL_PREFIX_STRING "fd00:0000:0000:0000"
|
|
#define THREAD_GATEWAY_STATIC_ADDR THREAD_MESH_LOCAL_PREFIX_STRING "::1"
|
|
#define THREAD_NODE_STATIC_ADDR THREAD_MESH_LOCAL_PREFIX_STRING "::10"
|
|
#define THREAD_GATEWAY_COAP_URL "coap://[" THREAD_GATEWAY_STATIC_ADDR "]:5683/sensor"
|
|
|
|
static inline void thread_dataset_get_active(otOperationalDataset *dataset)
|
|
{
|
|
/*
|
|
* TODO:
|
|
* - doplnte Network Key podle README.md
|
|
* - doplnte Extended PAN ID podle README.md
|
|
* - zkontrolujte Mesh-Local prefix podle README.md
|
|
*/
|
|
static const uint8_t network_key[OT_NETWORK_KEY_SIZE] = {
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
static const uint8_t ext_pan_id[OT_EXT_PAN_ID_SIZE] = {
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
static const uint8_t mesh_local_prefix[OT_MESH_LOCAL_PREFIX_SIZE] = {
|
|
0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
memset(dataset, 0, sizeof(*dataset));
|
|
|
|
dataset->mActiveTimestamp.mSeconds = 1;
|
|
dataset->mActiveTimestamp.mTicks = 0;
|
|
dataset->mActiveTimestamp.mAuthoritative = true;
|
|
memcpy(dataset->mNetworkKey.m8, network_key, sizeof(network_key));
|
|
memcpy(dataset->mExtendedPanId.m8, ext_pan_id, sizeof(ext_pan_id));
|
|
memcpy(dataset->mMeshLocalPrefix.m8, mesh_local_prefix, sizeof(mesh_local_prefix));
|
|
memcpy(dataset->mNetworkName.m8, THREAD_NETWORK_NAME, sizeof(THREAD_NETWORK_NAME));
|
|
dataset->mPanId = THREAD_PANID;
|
|
dataset->mChannel = THREAD_CHANNEL;
|
|
|
|
dataset->mComponents.mIsActiveTimestampPresent = true;
|
|
dataset->mComponents.mIsNetworkKeyPresent = true;
|
|
dataset->mComponents.mIsNetworkNamePresent = true;
|
|
dataset->mComponents.mIsExtendedPanIdPresent = true;
|
|
dataset->mComponents.mIsMeshLocalPrefixPresent = true;
|
|
dataset->mComponents.mIsPanIdPresent = true;
|
|
dataset->mComponents.mIsChannelPresent = true;
|
|
}
|
|
|
|
static inline otError thread_add_static_unicast_address(otInstance *instance, const char *address)
|
|
{
|
|
otIp6Address parsed_address;
|
|
otIp6InterfaceIdentifier iid;
|
|
|
|
/* Studenti si zde mohou overit, jak se IPv6 adresa mapuje do IID. */
|
|
if (otIp6AddressFromString(address, &parsed_address) != OT_ERROR_NONE) {
|
|
return OT_ERROR_INVALID_ARGS;
|
|
}
|
|
|
|
memcpy(iid.mFields.m8, &parsed_address.mFields.m8[8], sizeof(iid.mFields.m8));
|
|
return otIp6SetMeshLocalIid(instance, &iid);
|
|
}
|
|
|
|
static inline void thread_dataset_get_tlvs(otOperationalDatasetTlvs *dataset_tlvs)
|
|
{
|
|
otOperationalDataset dataset;
|
|
|
|
thread_dataset_get_active(&dataset);
|
|
otDatasetConvertToTlvs(&dataset, dataset_tlvs);
|
|
}
|
|
|
|
#endif
|