2

Leshanサーバーで動作するLwM2M Wakaamaクライアントがあります。ファームウェア更新オブジェクト 5 のパッケージ リソースの書き込みオプションを使用して巨大な 16 進文字列を送信しようとすると、クライアント側で次のエラー メッセージが表示されます。

「Block1 は実装されていません」。

wakaama クライアントには block1 が実装されておらず、block2 のみが実装されているとのことですが、その理由をご存知の方はいらっしゃいますか?

また、Leshan Server と Wakaama Client でパッケージ リソースを使用したファームウェア アップデートを行うにはどうすればよいですか?

Leshan Server を BLOCK2 タイプのリクエストを送信するように変更するか (UI が制限されているため、どうすればよいかわかりません)、Wakaama LWM2M クライアントで BLOCK1 のサポートを追加できると思います。

誰もこれを試しましたか?

4

2 に答える 2

0

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) )
于 2016-01-04T23:53:29.740 に答える