mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 23:21:54 +00:00 
			
		
		
		
	preen
This commit is contained in:
		| @@ -127,13 +127,14 @@ void BluetoothConnection::send_service_for_discovery_() { | |||||||
|  |  | ||||||
|   // Dynamic batching based on actual size |   // Dynamic batching based on actual size | ||||||
|   static constexpr size_t MAX_PACKET_SIZE = 1390;  // MTU limit for API messages |   static constexpr size_t MAX_PACKET_SIZE = 1390;  // MTU limit for API messages | ||||||
|   static constexpr size_t NEXT_SERVICE_BUFFER = 400;  // Reserve space for next service |  | ||||||
|  |  | ||||||
|   // Keep running total of actual message size |   // Keep running total of actual message size | ||||||
|   size_t current_size = 0; |   size_t current_size = 0; | ||||||
|   api::ProtoSize size; |   api::ProtoSize size; | ||||||
|   resp.calculate_size(size); |   resp.calculate_size(size); | ||||||
|   current_size = size.get_size(); |   current_size = size.get_size(); | ||||||
|  |   ESP_LOGD(TAG, "[%d] [%s] Starting batch with base size: %d", this->connection_index_, this->address_str().c_str(), | ||||||
|  |            current_size); | ||||||
|  |  | ||||||
|   while (this->send_service_ < this->service_count_) { |   while (this->send_service_ < this->service_count_) { | ||||||
|     esp_gattc_service_elem_t service_result; |     esp_gattc_service_elem_t service_result; | ||||||
| @@ -257,7 +258,10 @@ void BluetoothConnection::send_service_for_discovery_() { | |||||||
|     }  // end if (total_char_count > 0) |     }  // end if (total_char_count > 0) | ||||||
|  |  | ||||||
|     // Calculate the actual size of just this service |     // Calculate the actual size of just this service | ||||||
|     current_size += get_service_size(service_resp) + 1;  // +1 for field tag |     size_t service_size = get_service_size(service_resp) + 1;  // +1 for field tag | ||||||
|  |     current_size += service_size; | ||||||
|  |     ESP_LOGD(TAG, "[%d] [%s] Service %d size: %d, total size now: %d", this->connection_index_, | ||||||
|  |              this->address_str().c_str(), this->send_service_ - 1, service_size, current_size); | ||||||
|  |  | ||||||
|     // Check if we've exceeded the limit (worst case scenario) |     // Check if we've exceeded the limit (worst case scenario) | ||||||
|     // Our estimation above should have caught this, but if we're here it means |     // Our estimation above should have caught this, but if we're here it means | ||||||
| @@ -278,15 +282,11 @@ void BluetoothConnection::send_service_for_discovery_() { | |||||||
|  |  | ||||||
|     // Successfully added this service, increment counter |     // Successfully added this service, increment counter | ||||||
|     this->send_service_++; |     this->send_service_++; | ||||||
|  |  | ||||||
|     // Check if we have room for another service |  | ||||||
|     if (current_size > MAX_PACKET_SIZE - NEXT_SERVICE_BUFFER) { |  | ||||||
|       // Getting close to limit, send this batch |  | ||||||
|       break; |  | ||||||
|     } |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   // Send the message with dynamically batched services |   // Send the message with dynamically batched services | ||||||
|  |   ESP_LOGD(TAG, "[%d] [%s] Sending batch with %d services, total size %d", this->connection_index_, | ||||||
|  |            this->address_str().c_str(), resp.services.size(), current_size); | ||||||
|   api_conn->send_message(resp, api::BluetoothGATTGetServicesResponse::MESSAGE_TYPE); |   api_conn->send_message(resp, api::BluetoothGATTGetServicesResponse::MESSAGE_TYPE); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user