/**
 * @brief Populate the descriptors (if any) for this characteristic.
 */
void BLERemoteCharacteristic::retrieveDescriptors() {
	ESP_LOGD(LOG_TAG, ">> retrieveDescriptors() for characteristic: %s", getUUID().toString().c_str());

	removeDescriptors();   // Remove any existing descriptors.

	// Loop over each of the descriptors within the service associated with this characteristic.
	// For each descriptor we find, create a BLERemoteDescriptor instance.
	uint16_t offset = 0;
	esp_gattc_descr_elem_t result;
	while(1) {
		uint16_t count = 1;
		esp_gatt_status_t status = ::esp_ble_gattc_get_all_descr(
			getRemoteService()->getClient()->getGattcIf(),
			getRemoteService()->getClient()->getConnId(),
			getHandle(),
			&result,
			&count,
			offset
		);

		if (status == ESP_GATT_INVALID_OFFSET) {   // We have reached the end of the entries.
			break;
		}

		if (status != ESP_GATT_OK) {
			ESP_LOGE(LOG_TAG, "esp_ble_gattc_get_all_descr: %s", BLEUtils::gattStatusToString(status).c_str());
			break;
		}

		if (count == 0) {
			break;
		}
		ESP_LOGE(LOG_TAG, "");
		ESP_LOGD(LOG_TAG, "Found a descriptor: Handle: %d, UUID: %s", result.handle, BLEUUID(result.uuid).toString().c_str());

		// We now have a new characteristic ... let us add that to our set of known characteristics
		BLERemoteDescriptor *pNewRemoteDescriptor = new BLERemoteDescriptor(
			result.handle,
			BLEUUID(result.uuid),
			this
		);

		m_descriptorMap.insert(std::pair<std::string, BLERemoteDescriptor*>(pNewRemoteDescriptor->getUUID().toString(), pNewRemoteDescriptor));

		offset++;
	} // while true
	//m_haveCharacteristics = true; // Remember that we have received the characteristics.
	ESP_LOGD(LOG_TAG, "<< retrieveDescriptors(): Found %d descriptors.", offset);
} // getDescriptors
/**
 *@brief Destructor.
 */
BLERemoteCharacteristic::~BLERemoteCharacteristic() {
	removeDescriptors();   // Release resources for any descriptor information we may have allocated.
} // ~BLERemoteCharacteristic
Esempio n. 3
0
int indexDocuments(Configuration c, Extension extension) {


	/*Cette fonction permet pour une extension définie de :
	- Recuperer la liste des fichiers de cette extension
	- Recuperer la liste des fichiers deja indexes
	- Comparer ces deux listes afin de supprimer les descripteurs ou indexer les nouveaux fichiers si necessaire
	*/

	//Dans l'integralité des fonctions gerant les "listes de fichiers", celles-ci étant des listes de chaines de caractères
	//on utilisera non pas un tableau à deux dimension mais un tableau à une dimension de cette forme :
	// |---PATH1---|---PATH2---|---PATH3---|--- avec chaque path de taille maximale PATH_SIZE (macro)
	//(ce choix a ete notamment fait pour simplifier la gestion dynamique de la memoire)

	//Recuperation de la liste des fichiers textes présent dans le répertoire indexé
	char* dir_file_list;
	int nbFiles_Dir = getDirectoryFileList(&dir_file_list, c.rootPath, extension);

	//Récuperation de la liste des fichiers textes déjà indexés (infos présentes dans ./data/liste_base_texte)
	char* indexed_file_list;
	int nbFiles_Indexed = getIndexedFileList(&indexed_file_list, extension);
	
	//Comparaison des deux listes pour générer la liste des fichiers à indexés et la liste des descripteurs devant être supprimés

	if(nbFiles_Dir==0 && nbFiles_Indexed==0) {
		free(dir_file_list);
		free(indexed_file_list);
		return 1; //Cas OK () mais rien à faire
	}

	char* toIndex;
	char* toDelete;
	int* nbComp;
	nbComp = compareDirAndIndexedFiles(dir_file_list, nbFiles_Dir, indexed_file_list, nbFiles_Indexed, &toIndex, &toDelete);
	int nbFilesToIndex = nbComp[0];
	int nbDescToDelete = nbComp[1];
	free(nbComp);

	//Supression des descripteurs
	//Parcours de liste_base : récuperation de l'id descripteur et suppression de la ligne pour chaque fichier à "desindexer"
	//Parcours de base : suppression des descripteur dont les ids ont été récupéré lors du parcours de liste_base
	removeDescriptors(toDelete, nbDescToDelete, extension);
	free(toDelete);

	//Indexation des fichiers et ajout à la base de données

	switch(extension) {
		case TEXTE:
		indexTextFiles(toIndex, nbFilesToIndex, c);
		break;
		case IMAGE:
		indexImageFiles(toIndex, nbFilesToIndex, c);
		break;
		case AUDIO:
		indexAudioFiles(toIndex, nbFilesToIndex, c);
		break;
	}
	free(toIndex);

	free(dir_file_list);
	free(indexed_file_list);
	return 1;
}