.. | .. |
---|
211 | 211 | fn->wifi_get_tx_pkt_fates = wifi_get_tx_pkt_fates; |
---|
212 | 212 | fn->wifi_get_rx_pkt_fates = wifi_get_rx_pkt_fates; |
---|
213 | 213 | fn->wifi_get_packet_filter_capabilities = wifi_get_packet_filter_capabilities; |
---|
| 214 | + fn->wifi_get_wake_reason_stats = wifi_get_wake_reason_stats; |
---|
214 | 215 | fn->wifi_set_packet_filter = wifi_set_packet_filter; |
---|
215 | 216 | return WIFI_SUCCESS; |
---|
216 | 217 | } |
---|
.. | .. |
---|
1115 | 1116 | ALOGE("no vendor data in GetFeatureSetCommand response; ignoring it"); |
---|
1116 | 1117 | return NL_SKIP; |
---|
1117 | 1118 | } |
---|
1118 | | - if(feature_type == ANDR_WIFI_ATTRIBUTE_NUM_FEATURE_SET) { |
---|
1119 | | - void *data = reply.get_vendor_data(); |
---|
1120 | | - if(!fset) { |
---|
| 1119 | + if (feature_type == ANDR_WIFI_ATTRIBUTE_NUM_FEATURE_SET) { |
---|
| 1120 | + if (!fset) { |
---|
1121 | 1121 | ALOGE("Buffers pointers not set"); |
---|
1122 | 1122 | return NL_SKIP; |
---|
1123 | 1123 | } |
---|
1124 | | - memcpy(fset, data, min(len, (int) sizeof(*fset))); |
---|
| 1124 | + |
---|
| 1125 | + nl_iterator it(vendor_data); |
---|
| 1126 | + if (it.get_type() == ANDR_WIFI_ATTRIBUTE_NUM_FEATURE_SET) { |
---|
| 1127 | + memcpy(fset, it.get_data(), min(it.get_len(), (int) sizeof(*fset))); |
---|
| 1128 | + } else { |
---|
| 1129 | + ALOGE("Unknown attribute: %d expecting %d", |
---|
| 1130 | + it.get_type(), ANDR_WIFI_ATTRIBUTE_NUM_FEATURE_SET); |
---|
| 1131 | + return NL_SKIP; |
---|
| 1132 | + } |
---|
| 1133 | + ALOGD("wifi feature set: 0x%08X", *(int *)fset); |
---|
1125 | 1134 | } else { |
---|
1126 | 1135 | int num_features_set = 0; |
---|
1127 | 1136 | int i = 0; |
---|