first commit
This commit is contained in:
83
src/thread_dataset.h
Normal file
83
src/thread_dataset.h
Normal file
@ -0,0 +1,83 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user