/** * @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
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; }