#define FEATURE_SET_MATRIX 1
#define ATTR_NODFS_VALUE 3
#define ATTR_COUNTRY_CODE 4
+#define ATTR_LOW_LATENCY_MODE 5
static int internal_no_seq_check(nl_msg *msg, void *arg);
static int internal_valid_message_handler(nl_msg *msg, void *arg);
class AndroidPktFilterCommand : public WifiCommand {
private:
- const u8* mProgram;
- u32 mProgramLen;
- u32* mVersion;
- u32* mMaxLen;
- u32 mSourceOffset;
- u8 *mHostDestination;
- u32 mLength;
- int mReqType;
+ const u8* mProgram = NULL;
+ u32 mProgramLen = 0;
+ u32* mVersion = NULL;
+ u32* mMaxLen = 0;
+ u32 mSourceOffset = 0;
+ u8 *mHostDestination = NULL;
+ u32 mLength = 0;
+ int mReqType = 0;
public:
AndroidPktFilterCommand(wifi_interface_handle handle,
u32* version, u32* max_len)
int createSetPktFilterRequest(WifiRequest& request) {
u8 *program = new u8[mProgramLen];
+ nlattr *data = NULL;
NULL_CHECK_RETURN(program, "memory allocation failure", WIFI_ERROR_OUT_OF_MEMORY);
int result = request.create(GOOGLE_OUI, SLSI_NL80211_VENDOR_SUBCMD_APF_SET_FILTER);
- if (result < 0) {
- return result;
- }
+ if (result < 0)
+ goto exit;
- nlattr *data = request.attr_start(NL80211_ATTR_VENDOR_DATA);
+ data = request.attr_start(NL80211_ATTR_VENDOR_DATA);
result = request.put_u32(APF_ATTRIBUTE_PROGRAM_LEN, mProgramLen);
- if (result < 0) {
- return result;
- }
+ if (result < 0)
+ goto exit;
+
memcpy(program, mProgram, mProgramLen);
result = request.put(APF_ATTRIBUTE_PROGRAM, program, mProgramLen);
- if (result < 0) {
- return result;
- }
+ if (result < 0)
+ goto exit;
request.attr_end(data);
+
+exit:
delete[] program;
return result;
}
fn->wifi_nan_register_handler = nan_register_handler;
fn->wifi_nan_get_version = nan_get_version;
fn->wifi_nan_get_capabilities = nan_get_capabilities;
+ fn->wifi_nan_data_interface_create = nan_data_interface_create;
+ fn->wifi_nan_data_interface_delete = nan_data_interface_delete;
+ fn->wifi_nan_data_request_initiator = nan_data_request_initiator;
+ fn->wifi_nan_data_indication_response = nan_data_indication_response;
+ fn->wifi_nan_data_end = nan_data_end;
fn->wifi_get_roaming_capabilities = wifi_get_roaming_capabilities;
fn->wifi_enable_firmware_roaming = wifi_enable_firmware_roaming;
fn->wifi_get_packet_filter_capabilities = wifi_get_packet_filter_capabilities;
fn->wifi_set_packet_filter = wifi_set_packet_filter;
fn->wifi_read_packet_filter = wifi_read_packet_filter;
+ fn->wifi_set_latency_mode = wifi_set_latency_mode;
return WIFI_SUCCESS;
}
};
+class SetLatencyLockCommand : public WifiCommand {
+private:
+ wifi_latency_mode mMode;
+public:
+ SetLatencyLockCommand(wifi_interface_handle handle, wifi_latency_mode mode)
+ : WifiCommand(handle, 0) {
+ mMode = mode;
+ }
+ virtual int create() {
+ int ret;
+
+ ret = mMsg.create(GOOGLE_OUI, SLSI_NL80211_VENDOR_SUBCMD_SET_LATENCY_MODE);
+ if (ret < 0) {
+ ALOGE("Can't create message to send to driver - %d", ret);
+ return ret;
+ }
+ nlattr *data = mMsg.attr_start(NL80211_ATTR_VENDOR_DATA);
+ ret = mMsg.put_u8(ATTR_LOW_LATENCY_MODE, mMode);
+ if (ret < 0) {
+ return ret;
+ }
+
+ mMsg.attr_end(data);
+ return WIFI_SUCCESS;
+ }
+};
static int wifi_get_multicast_id(wifi_handle handle, const char *name, const char *group)
{
return (wifi_error) command.requestResponse();
}
-
+wifi_error wifi_set_latency_mode(wifi_interface_handle handle, wifi_latency_mode mode) {
+ SetLatencyLockCommand cmd(handle, mode);
+ return (wifi_error) cmd.requestResponse();
+}
/////////////////////////////////////////////////////////////////////////////