/* * Copyright (c) 2020 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #ifndef BT_GATT_OTS_OACP_H_ #define BT_GATT_OTS_OACP_H_ #ifdef __cplusplus extern "C" { #endif #include #include #include #include /* Types of Object Action Control Point Procedures. */ enum bt_gatt_ots_oacp_proc_type { /** Create object.*/ BT_GATT_OTS_OACP_PROC_CREATE = 0x01, /** Delete object.*/ BT_GATT_OTS_OACP_PROC_DELETE = 0x02, /** Calculate Checksum.*/ BT_GATT_OTS_OACP_PROC_CHECKSUM_CALC = 0x03, /** Execute Object.*/ BT_GATT_OTS_OACP_PROC_EXECUTE = 0x04, /** Read object.*/ BT_GATT_OTS_OACP_PROC_READ = 0x05, /** Write object.*/ BT_GATT_OTS_OACP_PROC_WRITE = 0x06, /** Abort object.*/ BT_GATT_OTS_OACP_PROC_ABORT = 0x07, /** Procedure response.*/ BT_GATT_OTS_OACP_PROC_RESP = 0x60 }; /* Object Action Control Point return codes. */ enum bt_gatt_ots_oacp_res_code { /** Success.*/ BT_GATT_OTS_OACP_RES_SUCCESS = 0x01, /** Not supported*/ BT_GATT_OTS_OACP_RES_OPCODE_NOT_SUP = 0x02, /** Invalid parameter*/ BT_GATT_OTS_OACP_RES_INV_PARAM = 0x03, /** Insufficient resources.*/ BT_GATT_OTS_OACP_RES_INSUFF_RES = 0x04, /** Invalid object.*/ BT_GATT_OTS_OACP_RES_INV_OBJ = 0x05, /** Channel unavailable.*/ BT_GATT_OTS_OACP_RES_CHAN_UNAVAIL = 0x06, /** Unsupported procedure.*/ BT_GATT_OTS_OACP_RES_UNSUP_TYPE = 0x07, /** Procedure not permitted.*/ BT_GATT_OTS_OACP_RES_NOT_PERMITTED = 0x08, /** Object locked.*/ BT_GATT_OTS_OACP_RES_OBJ_LOCKED = 0x09, /** Operation Failed.*/ BT_GATT_OTS_OACP_RES_OPER_FAILED = 0x0A }; #define BT_GATT_OTS_OACP_PROC_WRITE_MODE_TRUNC 1 #define BT_GATT_OTS_OACP_PROC_WRITE_MODE_GET_TRUNC(mode) \ ((mode) & BIT(BT_GATT_OTS_OACP_PROC_WRITE_MODE_TRUNC)) #define BT_GATT_OTS_OACP_PROC_WRITE_MODE_GET_RFU(mode) \ ((mode) & ~BIT(BT_GATT_OTS_OACP_PROC_WRITE_MODE_TRUNC)) /* Object Action Control Point procedure definition. */ struct bt_gatt_ots_oacp_proc { enum bt_gatt_ots_oacp_proc_type type; union { struct bt_gatt_ots_oacp_create_params { uint32_t size; struct bt_ots_obj_type type; } create_params; struct bt_gatt_ots_oacp_cs_calc_params { uint32_t offset; uint32_t len; } cs_calc_params; struct bt_gatt_ots_oacp_read_params { uint32_t offset; uint32_t len; } read_params; struct bt_gatt_ots_oacp_write_params { uint32_t offset; uint32_t len; uint8_t mode; } write_params; }; }; /* Size of the generic part of the Object Action Control Point create procedure */ #define BT_GATT_OTS_OACP_CREATE_GENERIC_PARAMS_SIZE 4 /* Size of Object Action Control Point checksum calculation procedure */ #define BT_GATT_OTS_OACP_CS_CALC_PARAMS_SIZE 8 /* Size of Object Action Control Point read procedure */ #define BT_GATT_OTS_OACP_READ_PARAMS_SIZE 8 /* Size of Object Action Control Point write procedure */ #define BT_GATT_OTS_OACP_WRITE_PARAMS_SIZE 9 ssize_t bt_gatt_ots_oacp_write(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, uint16_t len, uint16_t offset, uint8_t flags); void bt_gatt_ots_oacp_cfg_changed(const struct bt_gatt_attr *attr, uint16_t value); #ifdef __cplusplus } #endif #endif /* BT_GATT_OTS_OACP_H_ */