45 lines
1.4 KiB
C
45 lines
1.4 KiB
C
|
/*
|
||
|
* Copyright (c) 2020 Nordic Semiconductor ASA
|
||
|
*
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
*/
|
||
|
|
||
|
#define BT_MESH_DFU_OP_UPDATE_INFO_GET BT_MESH_MODEL_OP_2(0x83, 0x08)
|
||
|
#define BT_MESH_DFU_OP_UPDATE_INFO_STATUS BT_MESH_MODEL_OP_2(0x83, 0x09)
|
||
|
|
||
|
#define BT_MESH_DFU_OP_UPDATE_METADATA_CHECK BT_MESH_MODEL_OP_2(0x83, 0x0a)
|
||
|
#define BT_MESH_DFU_OP_UPDATE_METADATA_STATUS BT_MESH_MODEL_OP_2(0x83, 0x0b)
|
||
|
|
||
|
#define BT_MESH_DFU_OP_UPDATE_GET BT_MESH_MODEL_OP_2(0x83, 0x0c)
|
||
|
#define BT_MESH_DFU_OP_UPDATE_START BT_MESH_MODEL_OP_2(0x83, 0x0d)
|
||
|
#define BT_MESH_DFU_OP_UPDATE_CANCEL BT_MESH_MODEL_OP_2(0x83, 0x0e)
|
||
|
#define BT_MESH_DFU_OP_UPDATE_APPLY BT_MESH_MODEL_OP_2(0x83, 0x0f)
|
||
|
#define BT_MESH_DFU_OP_UPDATE_STATUS BT_MESH_MODEL_OP_2(0x83, 0x10)
|
||
|
|
||
|
#define DFU_UPDATE_INFO_STATUS_MSG_MINLEN (4 + CONFIG_BT_MESH_DFU_FWID_MAXLEN + \
|
||
|
CONFIG_BT_MESH_DFU_URI_MAXLEN)
|
||
|
#define DFU_UPDATE_START_MSG_MAXLEN (12 + CONFIG_BT_MESH_DFU_METADATA_MAXLEN)
|
||
|
|
||
|
static inline uint16_t dfu_metadata_checksum(struct net_buf_simple *buf)
|
||
|
{
|
||
|
/* Simple Fletcher-16 checksum to ensure duplicate start messages don't
|
||
|
* have different metadata.
|
||
|
*/
|
||
|
struct net_buf_simple_state state;
|
||
|
uint8_t sum[2] = {0, 0};
|
||
|
|
||
|
net_buf_simple_save(buf, &state);
|
||
|
|
||
|
|
||
|
while (buf->len) {
|
||
|
uint8_t byte = net_buf_simple_pull_u8(buf);
|
||
|
|
||
|
sum[0] += byte;
|
||
|
sum[1] += sum[0];
|
||
|
}
|
||
|
|
||
|
net_buf_simple_restore(buf, &state);
|
||
|
|
||
|
return (sum[0] << 8U) | sum[1];
|
||
|
}
|