int de_state_size(uint8_t eventByte, de_state_t *de_state) { if (de_state->in_state_GET_DE_HEADER_LENGTH) { de_state->addon_header_bytes = de_get_header_size(&eventByte) - 1; de_state->de_size = 0; de_state->de_offset = 0; if (de_state->addon_header_bytes == 0) { de_state->de_size = de_get_data_size(&eventByte); if (de_state->de_size == 0) { log_error(" ERROR: ID size is zero"); } // log_info("Data element payload is %d bytes.", de_state->de_size); return 1; } de_state->in_state_GET_DE_HEADER_LENGTH = 0; return 0; } if (de_state->addon_header_bytes > 0) { de_state->de_size = (de_state->de_size << 8) | eventByte; de_state->addon_header_bytes--; } if (de_state->addon_header_bytes > 0) return 0; // log_info("Data element payload is %d bytes.", de_state->de_size); de_state->in_state_GET_DE_HEADER_LENGTH = 1; return 1; }
static char * get_string_from_data_element(uint8_t * element){ de_size_t de_size = de_get_size_type(element); int pos = de_get_header_size(element); int len = 0; switch (de_size){ case DE_SIZE_VAR_8: len = element[1]; break; case DE_SIZE_VAR_16: len = big_endian_read_16(element, 1); break; default: break; } char * str = (char*)malloc(len+1); memcpy(str, &element[pos], len); str[len] ='\0'; return str; }