Пример #1
0
Network::msg_l3_status_t BaseRFApplication::sendPropertyReport(univmsg_l7_any_t* msg, bool cmd_mc_last,
		uint8_t clusterID, uint8_t endpointID) {
	MW_LOG_DEBUG_TRACE(MW_LOG_BASERF);

	//6.a.1) GET: create empty endpoint_value_t and call getProperty
	Endpoint::endpoint_value_t value;
	value.len = BASERF_MESSAGE_PAYLOAD_MAXLEN - BASERF_MESSAGE_PAYLOAD_HEADERLEN - 2;//12
	uint8_t maxLen = value.len;//12
	value.pvalue = &msg->data[2];//reusing the allocated buffer with a proper offset
	Endpoint* endpoint = m_device->getCluster(clusterID)->getEndpoint(endpointID);
	endpoint->getProperty(&value);

	int result = ERROR_INVALID_DATA;

	MW_LOG_DEBUG_TRACE(MW_LOG_BASERF) << PSTR("Endpoint value len: ") << value.len;
	if ( value.len > 0 && value.len <= maxLen ) {
		//prepare the message structure
		msg->msg_header.cmd_id = BASERF_CMD_PROPERTY_REP;
		msg->msg_header.cmd_mc = cmd_mc_last ? false : true;
		msg->msg_header.dataLen = value.len + 2;//extra bytes in the header

		msg->data[0] = clusterID;
		msg->data[1] = endpointID;

		result = sendMessage(msg);
	} else {
		MW_LOG_WARNING(MW_LOG_BASERF, "No report sent! Invalid data for C:E=%d:%d", clusterID, endpointID);
	}
	MW_LOG_DEBUG_TRACE(MW_LOG_BASERF) << PSTR("result=") << result;
	return result;
}