diff --git a/src/btstack_defines.h b/src/btstack_defines.h index ce27a0081..586dd386b 100644 --- a/src/btstack_defines.h +++ b/src/btstack_defines.h @@ -2875,10 +2875,10 @@ typedef uint8_t sm_key_t[16]; #define MESH_SUBEVENT_MESSAGE_NOT_ACKNOWLEDGED 0x30 /** - * @format 114114 + * @format 121114 * @param subevent_code - * @param element_index - * @param model_identifier + * @param dest + * @param status * @param present_value * @param target_value optional, if value > 0, than remaining_time_ms must be read * @param remaining_time_ms @@ -2886,10 +2886,10 @@ typedef uint8_t sm_key_t[16]; #define MESH_SUBEVENT_GENERIC_ON_OFF_STATUS 0x31 /** - * @format 114224 + * @format 121224 * @param subevent_code - * @param element_index - * @param model_identifier + * @param dest + * @param status * @param present_value * @param target_value optional, if value > 0, than remaining_time_ms must be read * @param remaining_time_ms @@ -2915,4 +2915,12 @@ typedef uint8_t sm_key_t[16]; */ #define MESH_SUBEVENT_HEALTH_ATTENTION_TIMER_CHANGED 0x34 +/** + * @format 1211 + * @param subevent_code + * @param dest + * @param status + * @param transition_time_gdtt + */ +#define MESH_SUBEVENT_GENERIC_DEFAULT_TRANSITION_TIME_STATUS 0x35 #endif diff --git a/src/btstack_event.h b/src/btstack_event.h index daaa45a79..59975fd61 100644 --- a/src/btstack_event.h +++ b/src/btstack_event.h @@ -7824,22 +7824,22 @@ static inline uint16_t mesh_subevent_message_not_acknowledged_get_dest(const uin } /** - * @brief Get field element_index from event MESH_SUBEVENT_GENERIC_ON_OFF_STATUS + * @brief Get field dest from event MESH_SUBEVENT_GENERIC_ON_OFF_STATUS * @param event packet - * @return element_index - * @note: btstack_type 1 + * @return dest + * @note: btstack_type 2 */ -static inline uint8_t mesh_subevent_generic_on_off_status_get_element_index(const uint8_t * event){ - return event[3]; +static inline uint16_t mesh_subevent_generic_on_off_status_get_dest(const uint8_t * event){ + return little_endian_read_16(event, 3); } /** - * @brief Get field model_identifier from event MESH_SUBEVENT_GENERIC_ON_OFF_STATUS + * @brief Get field status from event MESH_SUBEVENT_GENERIC_ON_OFF_STATUS * @param event packet - * @return model_identifier - * @note: btstack_type 4 + * @return status + * @note: btstack_type 1 */ -static inline uint32_t mesh_subevent_generic_on_off_status_get_model_identifier(const uint8_t * event){ - return little_endian_read_32(event, 4); +static inline uint8_t mesh_subevent_generic_on_off_status_get_status(const uint8_t * event){ + return event[5]; } /** * @brief Get field present_value from event MESH_SUBEVENT_GENERIC_ON_OFF_STATUS @@ -7848,7 +7848,7 @@ static inline uint32_t mesh_subevent_generic_on_off_status_get_model_identifier( * @note: btstack_type 1 */ static inline uint8_t mesh_subevent_generic_on_off_status_get_present_value(const uint8_t * event){ - return event[8]; + return event[6]; } /** * @brief Get field target_value from event MESH_SUBEVENT_GENERIC_ON_OFF_STATUS @@ -7857,7 +7857,7 @@ static inline uint8_t mesh_subevent_generic_on_off_status_get_present_value(cons * @note: btstack_type 1 */ static inline uint8_t mesh_subevent_generic_on_off_status_get_target_value(const uint8_t * event){ - return event[9]; + return event[7]; } /** * @brief Get field remaining_time_ms from event MESH_SUBEVENT_GENERIC_ON_OFF_STATUS @@ -7866,26 +7866,26 @@ static inline uint8_t mesh_subevent_generic_on_off_status_get_target_value(const * @note: btstack_type 4 */ static inline uint32_t mesh_subevent_generic_on_off_status_get_remaining_time_ms(const uint8_t * event){ - return little_endian_read_32(event, 10); + return little_endian_read_32(event, 8); } /** - * @brief Get field element_index from event MESH_SUBEVENT_GENERIC_LEVEL_STATUS + * @brief Get field dest from event MESH_SUBEVENT_GENERIC_LEVEL_STATUS * @param event packet - * @return element_index - * @note: btstack_type 1 + * @return dest + * @note: btstack_type 2 */ -static inline uint8_t mesh_subevent_generic_level_status_get_element_index(const uint8_t * event){ - return event[3]; +static inline uint16_t mesh_subevent_generic_level_status_get_dest(const uint8_t * event){ + return little_endian_read_16(event, 3); } /** - * @brief Get field model_identifier from event MESH_SUBEVENT_GENERIC_LEVEL_STATUS + * @brief Get field status from event MESH_SUBEVENT_GENERIC_LEVEL_STATUS * @param event packet - * @return model_identifier - * @note: btstack_type 4 + * @return status + * @note: btstack_type 1 */ -static inline uint32_t mesh_subevent_generic_level_status_get_model_identifier(const uint8_t * event){ - return little_endian_read_32(event, 4); +static inline uint8_t mesh_subevent_generic_level_status_get_status(const uint8_t * event){ + return event[5]; } /** * @brief Get field present_value from event MESH_SUBEVENT_GENERIC_LEVEL_STATUS @@ -7894,7 +7894,7 @@ static inline uint32_t mesh_subevent_generic_level_status_get_model_identifier(c * @note: btstack_type 2 */ static inline uint16_t mesh_subevent_generic_level_status_get_present_value(const uint8_t * event){ - return little_endian_read_16(event, 8); + return little_endian_read_16(event, 6); } /** * @brief Get field target_value from event MESH_SUBEVENT_GENERIC_LEVEL_STATUS @@ -7903,7 +7903,7 @@ static inline uint16_t mesh_subevent_generic_level_status_get_present_value(cons * @note: btstack_type 2 */ static inline uint16_t mesh_subevent_generic_level_status_get_target_value(const uint8_t * event){ - return little_endian_read_16(event, 10); + return little_endian_read_16(event, 8); } /** * @brief Get field remaining_time_ms from event MESH_SUBEVENT_GENERIC_LEVEL_STATUS @@ -7912,7 +7912,7 @@ static inline uint16_t mesh_subevent_generic_level_status_get_target_value(const * @note: btstack_type 4 */ static inline uint32_t mesh_subevent_generic_level_status_get_remaining_time_ms(const uint8_t * event){ - return little_endian_read_32(event, 12); + return little_endian_read_32(event, 10); } /** @@ -7980,6 +7980,34 @@ static inline uint8_t mesh_subevent_health_attention_timer_changed_get_element_i return event[3]; } +/** + * @brief Get field dest from event MESH_SUBEVENT_GENERIC_DEFAULT_TRANSITION_TIME_STATUS + * @param event packet + * @return dest + * @note: btstack_type 2 + */ +static inline uint16_t mesh_subevent_generic_default_transition_time_status_get_dest(const uint8_t * event){ + return little_endian_read_16(event, 3); +} +/** + * @brief Get field status from event MESH_SUBEVENT_GENERIC_DEFAULT_TRANSITION_TIME_STATUS + * @param event packet + * @return status + * @note: btstack_type 1 + */ +static inline uint8_t mesh_subevent_generic_default_transition_time_status_get_status(const uint8_t * event){ + return event[5]; +} +/** + * @brief Get field transition_time_gdtt from event MESH_SUBEVENT_GENERIC_DEFAULT_TRANSITION_TIME_STATUS + * @param event packet + * @return transition_time_gdtt + * @note: btstack_type 1 + */ +static inline uint8_t mesh_subevent_generic_default_transition_time_status_get_transition_time_gdtt(const uint8_t * event){ + return event[6]; +} + /* API_END */ diff --git a/src/mesh/mesh_generic_level_client.c b/src/mesh/mesh_generic_level_client.c index 4dfb18367..09e4139f6 100644 --- a/src/mesh/mesh_generic_level_client.c +++ b/src/mesh/mesh_generic_level_client.c @@ -230,18 +230,13 @@ static void generic_level_status_handler(mesh_model_t *mesh_model, mesh_pdu_t * remaining_time_gdtt = mesh_access_parser_get_u8(&parser); } - uint8_t event[16]; - int pos = 0; - event[pos++] = HCI_EVENT_MESH_META; - // reserve for size - pos++; - event[pos++] = MESH_SUBEVENT_GENERIC_LEVEL_STATUS; - - // element index - event[pos++] = mesh_model->element->element_index; - // model_id - little_endian_store_32(event, pos, mesh_model->model_identifier); - pos += 4; + uint8_t event[14] = {HCI_EVENT_MESH_META, 12, MESH_SUBEVENT_GENERIC_LEVEL_STATUS}; + + int pos = 3; + // dest + little_endian_store_16(event, pos, mesh_pdu_src(pdu)); + pos += 2; + event[pos++] = ERROR_CODE_SUCCESS; little_endian_store_16(event, pos, present_value); pos += 2; @@ -250,8 +245,7 @@ static void generic_level_status_handler(mesh_model_t *mesh_model, mesh_pdu_t * little_endian_store_32(event, pos, (uint32_t) mesh_access_time_gdtt2ms(remaining_time_gdtt)); pos += 4; - event[1] = pos - 2; - + (*mesh_model->model_packet_handler)(HCI_EVENT_PACKET, 0, event, pos); mesh_access_message_processed(pdu); } diff --git a/src/mesh/mesh_generic_on_off_client.c b/src/mesh/mesh_generic_on_off_client.c index 580e46012..0ff941afc 100644 --- a/src/mesh/mesh_generic_on_off_client.c +++ b/src/mesh/mesh_generic_on_off_client.c @@ -155,25 +155,18 @@ static void generic_on_off_status_handler(mesh_model_t *mesh_model, mesh_pdu_t * remaining_time_gdtt = mesh_access_parser_get_u8(&parser); } - uint8_t event[14] = {HCI_EVENT_MESH_META, 12, MESH_SUBEVENT_GENERIC_ON_OFF_STATUS}; - int pos = 0; - event[pos++] = HCI_EVENT_MESH_META; - // reserve for size - pos++; - event[pos++] = MESH_SUBEVENT_GENERIC_ON_OFF_STATUS; - - // element index - event[pos++] = mesh_model->element->element_index; - // model_id - little_endian_store_32(event, pos, mesh_model->model_identifier); - pos += 4; + uint8_t event[12] = {HCI_EVENT_MESH_META, 10, MESH_SUBEVENT_GENERIC_ON_OFF_STATUS}; + int pos = 3; + // dest + little_endian_store_16(event, pos, mesh_pdu_src(pdu)); + pos += 2; + event[pos++] = ERROR_CODE_SUCCESS; event[pos++] = present_value; event[pos++] = target_value; little_endian_store_32(event, pos, (uint32_t) mesh_access_time_gdtt2ms(remaining_time_gdtt)); pos += 4; - event[1] = pos - 2; - + (*mesh_model->model_packet_handler)(HCI_EVENT_PACKET, 0, event, pos); mesh_access_message_processed(pdu); }