/*! \fn displayCurrentSearchLoginTexts(char* text) * \brief Display current search login text * \param text Text to be displayed * \param resultsarray Pointer to the array in which to store the addresses * \return Number of matching parents we displayed */ uint8_t displayCurrentSearchLoginTexts(char* text, uint16_t* resultsarray) { uint16_t tempNodeAddr; pNode temp_pnode; uint8_t i; // Set font for search text oledSetFont(FONT_PROFONT_18); // Clear current text oledFillXY(100, 14, 50, 24, 0x00); // Display new search text oledPutstrXY(148, 14, OLED_RIGHT, text); // Set default font oledSetFont(FONT_DEFAULT); // Find the address of the first match tempNodeAddr = searchForServiceName((uint8_t*)text, COMPARE_MODE_COMPARE, SERVICE_CRED_TYPE); if (tempNodeAddr != last_matching_parent_addr) { last_matching_parent_addr = tempNodeAddr; for (i = 0; i < 4; i++) { oledFillXY((i&1)*175, 6+(i&2)*19, 81, 14, 0x00); } // Print the next 4 services i = 0; while ((tempNodeAddr != NODE_ADDR_NULL) && (i != 4)) { resultsarray[i] = tempNodeAddr; readParentNode(&temp_pnode, tempNodeAddr); displayServiceAtGivenSlot(i, (const char*)temp_pnode.service); tempNodeAddr = temp_pnode.nextParentAddress; i++; } // Store and return number of children last_matching_parent_number = i; } return last_matching_parent_number; }
/*! \fn displayCurrentSearchLoginTexts(char* text) * \brief Display current search login text * \param text Text to be displayed * \param resultsarray Pointer to the array in which to store the addresses * \param search_index Current search index (aka strlen(text)) * \return Number of matching parents we displayed */ static inline uint8_t displayCurrentSearchLoginTexts(char* text, uint16_t* resultsarray, uint8_t search_index) { uint16_t tempNodeAddr; pNode temp_pnode; uint8_t i, j; // Set font for search text oledSetFont(FONT_PROFONT_18); // Clear current text oledFillXY(100, 18, 50, 23, 0x00); // Display new search text oledPutstrXY(148, 17, OLED_RIGHT, text); // Set default font oledSetFont(FONT_DEFAULT); // Find the address of the first match tempNodeAddr = searchForServiceName((uint8_t*)text, COMPARE_MODE_COMPARE, SERVICE_CRED_TYPE); // Only change display if the first displayed service changed if (tempNodeAddr != last_matching_parent_addr) { last_matching_parent_addr = tempNodeAddr; for (i = 0; i < 4; i++) { oledFillXY((i&1)*170, 2+(i&2)*23, 84, 14, 0x00); } // Print the next 4 services (loop is until 5 for additional checks) i = 0; uint8_t temp_bool = TRUE; while ((temp_bool != FALSE) && (i != 5)) { resultsarray[i] = tempNodeAddr; readParentNode(&temp_pnode, tempNodeAddr); // Display only first 4 services if (i < 4) { displayCredentialAtSlot(i, (char*)temp_pnode.service, INDEX_TRUNCATE_SERVICE_SEARCH); } // Loop around if (temp_pnode.nextParentAddress == NODE_ADDR_NULL) { tempNodeAddr = getStartingParentAddress(); } else { tempNodeAddr = temp_pnode.nextParentAddress; } i++; // Check that we haven't already displayed the next node for (j = 0; j < i; j++) { if (resultsarray[j] == tempNodeAddr) { temp_bool = FALSE; } } } // Check if we could read 5 services after the given search text to know if we need to show the right arrow if (i == 5) { // Compare our text with the last service text and see if they match if (strncmp(text, (char*)temp_pnode.service, search_index + 1) == 0) { // show arrow oledBitmapDrawFlash(176, 24, BITMAP_LOGIN_RARROW, 0); } else { // hide arrow oledFillXY(176, 24, 16, 16, 0); i = 4; } } // Store and return number of children last_matching_parent_number = i; } // If the text is 4 chars long no need to display right arrow if ((search_index == SEARCHTEXT_MAX_LENGTH - 1) && (last_matching_parent_number > 4)) { // hide arrow last_matching_parent_number = 4; oledFillXY(176, 24, 16, 16, 0); } return last_matching_parent_number; }