【问题标题】:How to send firmware package from LWM2M Leshan server to LWM2M Wakaama client?如何将固件包从 LWM2M 乐山服务器发送到 LWM2M Wakaama 客户端?
【发布时间】:2015-11-19 23:46:48
【问题描述】:

我有一个使用乐山服务器的 LwM2M Wakaama 客户端。当我尝试通过固件更新对象 5 的包资源上的写入选项发送一个巨大的十六进制字符串时,我在客户端收到以下错误消息:

“区块 1 未实施”。

我知道在 wakaama 客户端上没有实现 block1,只实现了 block2,有人知道为什么吗?

另外,如何使用包资源进行固件更新与乐山服务器和 Wakaama 客户端一起使用?

我相信我可以更改乐山服务器以发送 BLOCK2 类型的请求(我不知道如何从有限的 UI 中执行此操作?)或在 Wakaama LWM2M 客户端上添加对 BLOCK1 的支持。

有人试过吗?

【问题讨论】:

    标签: iot coap lwm2m


    【解决方案1】:

    您使用的 wakaama 版本是最新的吗?最后一个master应该支持块传输

    【讨论】:

    • 是的,它是最新版本。问题似乎出在 Paket.c ~ 第 245 行中的函数 lwm2m_handle_packet 中。if ( IS_OPTION(message, COAP_OPTION_BLOCK1) && response->code<BAD_REQUEST_4_00 && !IS_OPTION(response, COAP_OPTION_BLOCK1) ) { LOG("Block1 NOT IMPLEMENTED\n"); ... . 我可以看到 BLOCK2 有效负载有一些实现,但我没有办法在乐山服务器 UI 中指定它。
    【解决方案2】:

    通过对 Paket.c 中的函数 lwm2m_handle_packet 进行以下更改来添加 Block1 支持 ~ 第 234-263 行:

           /* 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) )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      相关资源
      最近更新 更多