-
Notifications
You must be signed in to change notification settings - Fork 0
LWC 裸系统(MCU)SDK接入
BigBang-Core edited this page Dec 4, 2020
·
1 revision
区块链模组作为扩展接入MCU主控时,模组需要借助MCU提供的通讯能力与LWS进行通讯,MCU主控的固件在编译时需要引入两个源码文件,以支持LWS协议报文的生成与解析,这两个文件分别是——lws_protocol.c
和lws_protocol.h
,项目地址:lws-protocol-sdk-c。
MCU主控向上与LWS同步交易状态,向下通过硬件接口与区块链模组合作产生交易数据。其中与硬件交互的方法请参阅 安全硬件操作接口。本文将着重阐述MCU主控与LWS通讯的过程与方法。
-
NonceGet
SDK初始化时,需要注册一个产生uint32_t类型随机数的函数,SDK运行时会调用该函数来获取随机数。
typedef unsigned int (*NonceGet)(const void *ctx);
int hook_nonce_get(const NonceGet callback, void *ctx);
实现示例:
// 实现
unsigned int lwsiot_nonce_get(const void *ctx) { return lwsiot_rand(); }
// 注册
hook_nonce_get(lwsiot_nonce_get, lws_client);
-
DatetimeGet
SDK初始化时,注册一个产生uint32_t类型时间戳的函数,SDK运行期间调用该函数获得时间戳。
typedef unsigned int (*DatetimeGet)(const void *ctx);
int hook_datetime_get(const DatetimeGet callback, void *ctx);
实现示例:
// 实现
unsigned int lwsiot_datetime_get(const void *ctx)
{
time_t now_time;
time(&now_time);
return now_time;
}
// 注册
hook_datetime_get(lwsiot_datetime_get, lws_client);
-
DeviceIDGet
注册一个获得设备id的函数,SDK运行期间调用该函数获得id。
typedef int (*DeviceIDGet)(const void *ctx, char *id);
int hook_device_id_get(const DeviceIDGet callback, void *ctx);
实现示例:
// 实现
static int lwsiot_device_id_get(const void *ctx, char *id)
{
if (NULL != id) {
strncpy(id, "12345", 5);
return 0;
}
return -1;
}
// 注册
hook_device_id_get(lwsiot_device_id_get, lws_client);
typedef int (*ForkGet)(const void *ctx, big_num fork_out);
int hook_fork_get(const ForkGet callback, void *ctx);
typedef int (*PublicKeyGet)(const void *ctx, ed25519_public_key pk_out);
int hook_public_key_get(const PublicKeyGet callback, void *ctx);
typedef int (*SharedKeyGet)(const void *ctx, const key_seed seed, const unsigned char *data, const size_t size, shared_key key);
int hook_shared_key_get(const SharedKeyGet callback, void *ctx);
typedef int (*Blake2bGet)(const void *ctx, const unsigned char *data, const size_t len, blake2b_hash hash);
int hook_blake2b_get(const Blake2bGet callback, void *ctx);
typedef int (*SignEd25519)(const void *ctx, const unsigned char *data, const size_t len, ed25519_signature signature);
int hook_public_sign_ed25519(const SignEd25519 callback, void *ctx);