void wifi_display_enable(struct wpa_global *global, int enabled) { wpa_printf(MSG_DEBUG, "WFD: Wi-Fi Display %s", enabled ? "enabled" : "disabled"); global->wifi_display = enabled; wifi_display_update_wfd_ie(global); }
void wifi_display_enable(struct wpa_global *global, int enabled) { wpa_printf(MSG_DEBUG, "WFD: Wi-Fi Display %s", enabled ? "enabled" : "disabled"); global->wifi_display = enabled; #ifdef CONFIG_MTK_P2P global->wfd_data_cmd.WfdEnable = enabled; #endif wifi_display_update_wfd_ie(global); }
int wifi_display_subelem_set_from_ies(struct wpa_global *global, struct wpabuf *ie) { int subelements[MAX_WFD_SUBELEMS] = {}; const u8 *pos, *end; int len, subelem; struct wpabuf *e; wpa_printf(MSG_DEBUG, "WFD IEs set: %p - %lu", ie, ie ? (unsigned long) wpabuf_len(ie) : 0); if (ie == NULL || wpabuf_len(ie) < 6) return -1; pos = wpabuf_head(ie); end = pos + wpabuf_len(ie); while (end > pos) { if (pos + 3 > end) break; len = WPA_GET_BE16(pos + 1) + 3; wpa_printf(MSG_DEBUG, "WFD Sub-Element ID %d - len %d", *pos, len - 3); if (pos + len > end) break; subelem = *pos; if (subelem < MAX_WFD_SUBELEMS && subelements[subelem] == 0) { e = wpabuf_alloc_copy(pos, len); if (e == NULL) return -1; wpabuf_free(global->wfd_subelem[subelem]); global->wfd_subelem[subelem] = e; subelements[subelem] = 1; } pos += len; } for (subelem = 0; subelem < MAX_WFD_SUBELEMS; subelem++) { if (subelements[subelem] == 0) { wpabuf_free(global->wfd_subelem[subelem]); global->wfd_subelem[subelem] = NULL; } } return wifi_display_update_wfd_ie(global); }
int wifi_display_subelem_set(struct wpa_global *global, char *cmd) { char *pos; int subelem; size_t len; struct wpabuf *e; pos = os_strchr(cmd, ' '); if (pos == NULL) return -1; *pos++ = '\0'; subelem = atoi(cmd); if (subelem < 0 || subelem >= MAX_WFD_SUBELEMS) return -1; len = os_strlen(pos); if (len & 1) return -1; len /= 2; if (len == 0) { /* Clear subelement */ e = NULL; wpa_printf(MSG_DEBUG, "WFD: Clear subelement %d", subelem); } else { e = wpabuf_alloc(1 + len); if (e == NULL) return -1; wpabuf_put_u8(e, subelem); if (hexstr2bin(pos, wpabuf_put(e, len), len) < 0) { wpabuf_free(e); return -1; } wpa_printf(MSG_DEBUG, "WFD: Set subelement %d", subelem); } wpabuf_free(global->wfd_subelem[subelem]); global->wfd_subelem[subelem] = e; wifi_display_update_wfd_ie(global); return 0; }