如何从LWM2M乐山服务器发送固件包到LWM2M Wakaama客户端?
How to send firmware package from LWM2M Leshan server to LWM2M Wakaama client?
我有一个使用乐山服务器的 LwM2M Wakaama 客户端。当我尝试通过固件更新对象 5 的包资源上的写入选项发送一个巨大的十六进制字符串时,我在客户端收到以下错误消息:
"Block1 NOT IMPLEMENTED".
我了解到 wakaama 客户端上没有实现 block1,只实现了 block2,有人知道为什么吗?
另外,乐山服务器和Wakaama客户端如何使用包资源进行固件更新?
我相信我可以更改 Leshan 服务器以发送 BLOCK2 类型的请求(我不知道如何从有限的 UI 做?)或在 Wakaama LWM2M 客户端上添加对 BLOCK1 的支持。
有人试过吗?
您使用的 wakaama 版本是最新的吗?最后一个master应该支持block transfer
通过在 Paket.c ~ 第 234-263 行中的函数 lwm2m_handle_packet 中进行以下更改来添加 Block1 支持:
/* get offset for blockwise transfers */
if (coap_get_header_block2(message, &block_num, NULL, &block_size, &block_offset))
{
LOG("Blockwise2: block request %u (%u/%u) @ %u bytes\n", block_num, block_size, REST_MAX_CHUNK_SIZE, block_offset);
block_size = MIN(block_size, REST_MAX_CHUNK_SIZE);
new_offset = block_offset;
}
++else if (coap_get_header_block1(message, &block_num, NULL, &block_size, &block_offset))
++{
++LOG("Blockwise1: block request %u (%u/%u) @ %u bytes\n", block_num, block_size, REST_MAX_CHUNK_SIZE, block_offset);
++block_size = MIN(block_size, REST_MAX_CHUNK_SIZE);
++new_offset = block_offset;
++}
coap_error_code = handle_request(contextP, fromSessionH, message, response);
if (coap_error_code==NO_ERROR)
{
/* Apply blockwise transfers. */
if ( IS_OPTION(message, COAP_OPTION_BLOCK1) && response->code<BAD_REQUEST_4_00 && !IS_OPTION(response, COAP_OPTION_BLOCK1) )
{
++//LOG("Block1 NOT IMPLEMENTED\n");
++//coap_error_code = NOT_IMPLEMENTED_5_01;
++//coap_error_message = "NoBlock1Support";
++LOG("Block1 IMPLEMENTED\n");
++coap_set_header_block1(response, block_num, 0, block_size);
}
else if ( IS_OPTION(message, COAP_OPTION_BLOCK2) )
我有一个使用乐山服务器的 LwM2M Wakaama 客户端。当我尝试通过固件更新对象 5 的包资源上的写入选项发送一个巨大的十六进制字符串时,我在客户端收到以下错误消息:
"Block1 NOT IMPLEMENTED".
我了解到 wakaama 客户端上没有实现 block1,只实现了 block2,有人知道为什么吗?
另外,乐山服务器和Wakaama客户端如何使用包资源进行固件更新?
我相信我可以更改 Leshan 服务器以发送 BLOCK2 类型的请求(我不知道如何从有限的 UI 做?)或在 Wakaama LWM2M 客户端上添加对 BLOCK1 的支持。
有人试过吗?
您使用的 wakaama 版本是最新的吗?最后一个master应该支持block transfer
通过在 Paket.c ~ 第 234-263 行中的函数 lwm2m_handle_packet 中进行以下更改来添加 Block1 支持:
/* get offset for blockwise transfers */
if (coap_get_header_block2(message, &block_num, NULL, &block_size, &block_offset))
{
LOG("Blockwise2: block request %u (%u/%u) @ %u bytes\n", block_num, block_size, REST_MAX_CHUNK_SIZE, block_offset);
block_size = MIN(block_size, REST_MAX_CHUNK_SIZE);
new_offset = block_offset;
}
++else if (coap_get_header_block1(message, &block_num, NULL, &block_size, &block_offset))
++{
++LOG("Blockwise1: block request %u (%u/%u) @ %u bytes\n", block_num, block_size, REST_MAX_CHUNK_SIZE, block_offset);
++block_size = MIN(block_size, REST_MAX_CHUNK_SIZE);
++new_offset = block_offset;
++}
coap_error_code = handle_request(contextP, fromSessionH, message, response);
if (coap_error_code==NO_ERROR)
{
/* Apply blockwise transfers. */
if ( IS_OPTION(message, COAP_OPTION_BLOCK1) && response->code<BAD_REQUEST_4_00 && !IS_OPTION(response, COAP_OPTION_BLOCK1) )
{
++//LOG("Block1 NOT IMPLEMENTED\n");
++//coap_error_code = NOT_IMPLEMENTED_5_01;
++//coap_error_message = "NoBlock1Support";
++LOG("Block1 IMPLEMENTED\n");
++coap_set_header_block1(response, block_num, 0, block_size);
}
else if ( IS_OPTION(message, COAP_OPTION_BLOCK2) )