]> Git Repo - esp-hosted.git/commitdiff
vendor specific ie control path command added
authorajita.chavan <[email protected]>
Tue, 2 Nov 2021 06:44:06 +0000 (06:44 +0000)
committerajita.chavan <[email protected]>
Wed, 3 Nov 2021 14:53:29 +0000 (20:23 +0530)
Signed-off-by: ajita.chavan <[email protected]>
12 files changed:
common/esp_hosted_config.pb-c.c
common/include/esp_hosted_config.pb-c.h
common/proto/esp_hosted_config.proto
docs/c_api.md
docs/c_demo.md
esp/esp_driver/network_adapter/main/slave_commands.c
host/host_common/commands.c
host/host_common/include/commands.h
host/linux/host_control/c_support/test.c
host/linux/host_control/c_support/test_api.c
host/linux/host_control/c_support/test_api.h
host/linux/host_control/c_support/test_config.h

index 6215e433da94e26df8432e34697e94525bcbd286..f6e3d8cc225420b4e71a37b073937b5050b71523 100644 (file)
@@ -1297,6 +1297,92 @@ void   esp_hosted_resp_otaend__free_unpacked
   assert(message->base.descriptor == &esp_hosted_resp_otaend__descriptor);
   protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
 }
+void   esp_hosted_cmd_set_vendor_specific_ie__init
+                     (EspHostedCmdSetVendorSpecificIE         *message)
+{
+  static EspHostedCmdSetVendorSpecificIE init_value = ESP_HOSTED_CMD_SET_VENDOR_SPECIFIC_IE__INIT;
+  *message = init_value;
+}
+size_t esp_hosted_cmd_set_vendor_specific_ie__get_packed_size
+                     (const EspHostedCmdSetVendorSpecificIE *message)
+{
+  assert(message->base.descriptor == &esp_hosted_cmd_set_vendor_specific_ie__descriptor);
+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
+}
+size_t esp_hosted_cmd_set_vendor_specific_ie__pack
+                     (const EspHostedCmdSetVendorSpecificIE *message,
+                      uint8_t       *out)
+{
+  assert(message->base.descriptor == &esp_hosted_cmd_set_vendor_specific_ie__descriptor);
+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
+}
+size_t esp_hosted_cmd_set_vendor_specific_ie__pack_to_buffer
+                     (const EspHostedCmdSetVendorSpecificIE *message,
+                      ProtobufCBuffer *buffer)
+{
+  assert(message->base.descriptor == &esp_hosted_cmd_set_vendor_specific_ie__descriptor);
+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
+}
+EspHostedCmdSetVendorSpecificIE *
+       esp_hosted_cmd_set_vendor_specific_ie__unpack
+                     (ProtobufCAllocator  *allocator,
+                      size_t               len,
+                      const uint8_t       *data)
+{
+  return (EspHostedCmdSetVendorSpecificIE *)
+     protobuf_c_message_unpack (&esp_hosted_cmd_set_vendor_specific_ie__descriptor,
+                                allocator, len, data);
+}
+void   esp_hosted_cmd_set_vendor_specific_ie__free_unpacked
+                     (EspHostedCmdSetVendorSpecificIE *message,
+                      ProtobufCAllocator *allocator)
+{
+  assert(message->base.descriptor == &esp_hosted_cmd_set_vendor_specific_ie__descriptor);
+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
+}
+void   esp_hosted_resp_set_vendor_specific_ie__init
+                     (EspHostedRespSetVendorSpecificIE         *message)
+{
+  static EspHostedRespSetVendorSpecificIE init_value = ESP_HOSTED_RESP_SET_VENDOR_SPECIFIC_IE__INIT;
+  *message = init_value;
+}
+size_t esp_hosted_resp_set_vendor_specific_ie__get_packed_size
+                     (const EspHostedRespSetVendorSpecificIE *message)
+{
+  assert(message->base.descriptor == &esp_hosted_resp_set_vendor_specific_ie__descriptor);
+  return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
+}
+size_t esp_hosted_resp_set_vendor_specific_ie__pack
+                     (const EspHostedRespSetVendorSpecificIE *message,
+                      uint8_t       *out)
+{
+  assert(message->base.descriptor == &esp_hosted_resp_set_vendor_specific_ie__descriptor);
+  return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
+}
+size_t esp_hosted_resp_set_vendor_specific_ie__pack_to_buffer
+                     (const EspHostedRespSetVendorSpecificIE *message,
+                      ProtobufCBuffer *buffer)
+{
+  assert(message->base.descriptor == &esp_hosted_resp_set_vendor_specific_ie__descriptor);
+  return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer);
+}
+EspHostedRespSetVendorSpecificIE *
+       esp_hosted_resp_set_vendor_specific_ie__unpack
+                     (ProtobufCAllocator  *allocator,
+                      size_t               len,
+                      const uint8_t       *data)
+{
+  return (EspHostedRespSetVendorSpecificIE *)
+     protobuf_c_message_unpack (&esp_hosted_resp_set_vendor_specific_ie__descriptor,
+                                allocator, len, data);
+}
+void   esp_hosted_resp_set_vendor_specific_ie__free_unpacked
+                     (EspHostedRespSetVendorSpecificIE *message,
+                      ProtobufCAllocator *allocator)
+{
+  assert(message->base.descriptor == &esp_hosted_resp_set_vendor_specific_ie__descriptor);
+  protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator);
+}
 void   esp_hosted_config_payload__init
                      (EspHostedConfigPayload         *message)
 {
@@ -2762,7 +2848,122 @@ const ProtobufCMessageDescriptor esp_hosted_resp_otaend__descriptor =
   (ProtobufCMessageInit) esp_hosted_resp_otaend__init,
   NULL,NULL,NULL    /* reserved[123] */
 };
-static const ProtobufCFieldDescriptor esp_hosted_config_payload__field_descriptors[35] =
+static const ProtobufCFieldDescriptor esp_hosted_cmd_set_vendor_specific_ie__field_descriptors[4] =
+{
+  {
+    "enable",
+    1,
+    PROTOBUF_C_LABEL_OPTIONAL,
+    PROTOBUF_C_TYPE_BOOL,
+    offsetof(EspHostedCmdSetVendorSpecificIE, has_enable),
+    offsetof(EspHostedCmdSetVendorSpecificIE, enable),
+    NULL,
+    NULL,
+    0,             /* flags */
+    0,NULL,NULL    /* reserved1,reserved2, etc */
+  },
+  {
+    "type",
+    2,
+    PROTOBUF_C_LABEL_OPTIONAL,
+    PROTOBUF_C_TYPE_ENUM,
+    offsetof(EspHostedCmdSetVendorSpecificIE, has_type),
+    offsetof(EspHostedCmdSetVendorSpecificIE, type),
+    &esp_hosted_vendor_ietype__descriptor,
+    NULL,
+    0,             /* flags */
+    0,NULL,NULL    /* reserved1,reserved2, etc */
+  },
+  {
+    "idx",
+    3,
+    PROTOBUF_C_LABEL_OPTIONAL,
+    PROTOBUF_C_TYPE_ENUM,
+    offsetof(EspHostedCmdSetVendorSpecificIE, has_idx),
+    offsetof(EspHostedCmdSetVendorSpecificIE, idx),
+    &esp_hosted_ieid__descriptor,
+    NULL,
+    0,             /* flags */
+    0,NULL,NULL    /* reserved1,reserved2, etc */
+  },
+  {
+    "vendor_ie_data",
+    4,
+    PROTOBUF_C_LABEL_OPTIONAL,
+    PROTOBUF_C_TYPE_BYTES,
+    offsetof(EspHostedCmdSetVendorSpecificIE, has_vendor_ie_data),
+    offsetof(EspHostedCmdSetVendorSpecificIE, vendor_ie_data),
+    NULL,
+    NULL,
+    0,             /* flags */
+    0,NULL,NULL    /* reserved1,reserved2, etc */
+  },
+};
+static const unsigned esp_hosted_cmd_set_vendor_specific_ie__field_indices_by_name[] = {
+  0,   /* field[0] = enable */
+  2,   /* field[2] = idx */
+  1,   /* field[1] = type */
+  3,   /* field[3] = vendor_ie_data */
+};
+static const ProtobufCIntRange esp_hosted_cmd_set_vendor_specific_ie__number_ranges[1 + 1] =
+{
+  { 1, 0 },
+  { 0, 4 }
+};
+const ProtobufCMessageDescriptor esp_hosted_cmd_set_vendor_specific_ie__descriptor =
+{
+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
+  "EspHostedCmdSetVendorSpecificIE",
+  "EspHostedCmdSetVendorSpecificIE",
+  "EspHostedCmdSetVendorSpecificIE",
+  "",
+  sizeof(EspHostedCmdSetVendorSpecificIE),
+  4,
+  esp_hosted_cmd_set_vendor_specific_ie__field_descriptors,
+  esp_hosted_cmd_set_vendor_specific_ie__field_indices_by_name,
+  1,  esp_hosted_cmd_set_vendor_specific_ie__number_ranges,
+  (ProtobufCMessageInit) esp_hosted_cmd_set_vendor_specific_ie__init,
+  NULL,NULL,NULL    /* reserved[123] */
+};
+static const ProtobufCFieldDescriptor esp_hosted_resp_set_vendor_specific_ie__field_descriptors[1] =
+{
+  {
+    "resp",
+    1,
+    PROTOBUF_C_LABEL_OPTIONAL,
+    PROTOBUF_C_TYPE_INT32,
+    offsetof(EspHostedRespSetVendorSpecificIE, has_resp),
+    offsetof(EspHostedRespSetVendorSpecificIE, resp),
+    NULL,
+    NULL,
+    0,             /* flags */
+    0,NULL,NULL    /* reserved1,reserved2, etc */
+  },
+};
+static const unsigned esp_hosted_resp_set_vendor_specific_ie__field_indices_by_name[] = {
+  0,   /* field[0] = resp */
+};
+static const ProtobufCIntRange esp_hosted_resp_set_vendor_specific_ie__number_ranges[1 + 1] =
+{
+  { 1, 0 },
+  { 0, 1 }
+};
+const ProtobufCMessageDescriptor esp_hosted_resp_set_vendor_specific_ie__descriptor =
+{
+  PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC,
+  "EspHostedRespSetVendorSpecificIE",
+  "EspHostedRespSetVendorSpecificIE",
+  "EspHostedRespSetVendorSpecificIE",
+  "",
+  sizeof(EspHostedRespSetVendorSpecificIE),
+  1,
+  esp_hosted_resp_set_vendor_specific_ie__field_descriptors,
+  esp_hosted_resp_set_vendor_specific_ie__field_indices_by_name,
+  1,  esp_hosted_resp_set_vendor_specific_ie__number_ranges,
+  (ProtobufCMessageInit) esp_hosted_resp_set_vendor_specific_ie__init,
+  NULL,NULL,NULL    /* reserved[123] */
+};
+static const ProtobufCFieldDescriptor esp_hosted_config_payload__field_descriptors[37] =
 {
   {
     "msg",
@@ -3184,6 +3385,30 @@ static const ProtobufCFieldDescriptor esp_hosted_config_payload__field_descripto
     0 | PROTOBUF_C_FIELD_FLAG_ONEOF,             /* flags */
     0,NULL,NULL    /* reserved1,reserved2, etc */
   },
+  {
+    "cmd_set_vendor_specific_ie",
+    44,
+    PROTOBUF_C_LABEL_OPTIONAL,
+    PROTOBUF_C_TYPE_MESSAGE,
+    offsetof(EspHostedConfigPayload, payload_case),
+    offsetof(EspHostedConfigPayload, cmd_set_vendor_specific_ie),
+    &esp_hosted_cmd_set_vendor_specific_ie__descriptor,
+    NULL,
+    0 | PROTOBUF_C_FIELD_FLAG_ONEOF,             /* flags */
+    0,NULL,NULL    /* reserved1,reserved2, etc */
+  },
+  {
+    "resp_set_vendor_specific_ie",
+    45,
+    PROTOBUF_C_LABEL_OPTIONAL,
+    PROTOBUF_C_TYPE_MESSAGE,
+    offsetof(EspHostedConfigPayload, payload_case),
+    offsetof(EspHostedConfigPayload, resp_set_vendor_specific_ie),
+    &esp_hosted_resp_set_vendor_specific_ie__descriptor,
+    NULL,
+    0 | PROTOBUF_C_FIELD_FLAG_ONEOF,             /* flags */
+    0,NULL,NULL    /* reserved1,reserved2, etc */
+  },
 };
 static const unsigned esp_hosted_config_payload__field_indices_by_name[] = {
   21,   /* field[21] = cmd_connected_stas_list */
@@ -3201,6 +3426,7 @@ static const unsigned esp_hosted_config_payload__field_indices_by_name[] = {
   23,   /* field[23] = cmd_set_mac_address */
   25,   /* field[25] = cmd_set_power_save_mode */
   13,   /* field[13] = cmd_set_softap_config */
+  35,   /* field[35] = cmd_set_vendor_specific_ie */
   5,   /* field[5] = cmd_set_wifi_mode */
   17,   /* field[17] = cmd_stop_softap */
   0,   /* field[0] = msg */
@@ -3219,6 +3445,7 @@ static const unsigned esp_hosted_config_payload__field_indices_by_name[] = {
   24,   /* field[24] = resp_set_mac_address */
   26,   /* field[26] = resp_set_power_save_mode */
   14,   /* field[14] = resp_set_softap_config */
+  36,   /* field[36] = resp_set_vendor_specific_ie */
   6,   /* field[6] = resp_set_wifi_mode */
   18,   /* field[18] = resp_stop_softap */
 };
@@ -3226,7 +3453,7 @@ static const ProtobufCIntRange esp_hosted_config_payload__number_ranges[2 + 1] =
 {
   { 1, 0 },
   { 10, 1 },
-  { 0, 35 }
+  { 0, 37 }
 };
 const ProtobufCMessageDescriptor esp_hosted_config_payload__descriptor =
 {
@@ -3236,7 +3463,7 @@ const ProtobufCMessageDescriptor esp_hosted_config_payload__descriptor =
   "EspHostedConfigPayload",
   "",
   sizeof(EspHostedConfigPayload),
-  35,
+  37,
   esp_hosted_config_payload__field_descriptors,
   esp_hosted_config_payload__field_indices_by_name,
   2,  esp_hosted_config_payload__number_ranges,
@@ -3315,7 +3542,69 @@ const ProtobufCEnumDescriptor esp_hosted_status__descriptor =
   esp_hosted_status__value_ranges,
   NULL,NULL,NULL,NULL   /* reserved[1234] */
 };
-static const ProtobufCEnumValue esp_hosted_config_msg_type__enum_values_by_number[34] =
+static const ProtobufCEnumValue esp_hosted_vendor_ietype__enum_values_by_number[5] =
+{
+  { "VND_IE_TYPE_BEACON", "ESP_HOSTED_VENDOR_IETYPE__VND_IE_TYPE_BEACON", 0 },
+  { "VND_IE_TYPE_PROBE_REQ", "ESP_HOSTED_VENDOR_IETYPE__VND_IE_TYPE_PROBE_REQ", 1 },
+  { "VND_IE_TYPE_PROBE_RESP", "ESP_HOSTED_VENDOR_IETYPE__VND_IE_TYPE_PROBE_RESP", 2 },
+  { "VND_IE_TYPE_ASSOC_REQ", "ESP_HOSTED_VENDOR_IETYPE__VND_IE_TYPE_ASSOC_REQ", 3 },
+  { "VND_IE_TYPE_ASSOC_RESP", "ESP_HOSTED_VENDOR_IETYPE__VND_IE_TYPE_ASSOC_RESP", 4 },
+};
+static const ProtobufCIntRange esp_hosted_vendor_ietype__value_ranges[] = {
+{0, 0},{0, 5}
+};
+static const ProtobufCEnumValueIndex esp_hosted_vendor_ietype__enum_values_by_name[5] =
+{
+  { "VND_IE_TYPE_ASSOC_REQ", 3 },
+  { "VND_IE_TYPE_ASSOC_RESP", 4 },
+  { "VND_IE_TYPE_BEACON", 0 },
+  { "VND_IE_TYPE_PROBE_REQ", 1 },
+  { "VND_IE_TYPE_PROBE_RESP", 2 },
+};
+const ProtobufCEnumDescriptor esp_hosted_vendor_ietype__descriptor =
+{
+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
+  "EspHostedVendorIEType",
+  "EspHostedVendorIEType",
+  "EspHostedVendorIEType",
+  "",
+  5,
+  esp_hosted_vendor_ietype__enum_values_by_number,
+  5,
+  esp_hosted_vendor_ietype__enum_values_by_name,
+  1,
+  esp_hosted_vendor_ietype__value_ranges,
+  NULL,NULL,NULL,NULL   /* reserved[1234] */
+};
+static const ProtobufCEnumValue esp_hosted_ieid__enum_values_by_number[2] =
+{
+  { "VND_IE_ID_0", "ESP_HOSTED_IEID__VND_IE_ID_0", 0 },
+  { "VND_IE_ID_1", "ESP_HOSTED_IEID__VND_IE_ID_1", 1 },
+};
+static const ProtobufCIntRange esp_hosted_ieid__value_ranges[] = {
+{0, 0},{0, 2}
+};
+static const ProtobufCEnumValueIndex esp_hosted_ieid__enum_values_by_name[2] =
+{
+  { "VND_IE_ID_0", 0 },
+  { "VND_IE_ID_1", 1 },
+};
+const ProtobufCEnumDescriptor esp_hosted_ieid__descriptor =
+{
+  PROTOBUF_C__ENUM_DESCRIPTOR_MAGIC,
+  "EspHostedIEID",
+  "EspHostedIEID",
+  "EspHostedIEID",
+  "",
+  2,
+  esp_hosted_ieid__enum_values_by_number,
+  2,
+  esp_hosted_ieid__enum_values_by_name,
+  1,
+  esp_hosted_ieid__value_ranges,
+  NULL,NULL,NULL,NULL   /* reserved[1234] */
+};
+static const ProtobufCEnumValue esp_hosted_config_msg_type__enum_values_by_number[36] =
 {
   { "TypeCmdGetMACAddress", "ESP_HOSTED_CONFIG_MSG_TYPE__TypeCmdGetMACAddress", 0 },
   { "TypeRespGetMACAddress", "ESP_HOSTED_CONFIG_MSG_TYPE__TypeRespGetMACAddress", 1 },
@@ -3351,11 +3640,13 @@ static const ProtobufCEnumValue esp_hosted_config_msg_type__enum_values_by_numbe
   { "TypeRespOTAWrite", "ESP_HOSTED_CONFIG_MSG_TYPE__TypeRespOTAWrite", 31 },
   { "TypeCmdOTAEnd", "ESP_HOSTED_CONFIG_MSG_TYPE__TypeCmdOTAEnd", 32 },
   { "TypeRespOTAEnd", "ESP_HOSTED_CONFIG_MSG_TYPE__TypeRespOTAEnd", 33 },
+  { "TypeCmdSetVendorSpecificIE", "ESP_HOSTED_CONFIG_MSG_TYPE__TypeCmdSetVendorSpecificIE", 34 },
+  { "TypeRespSetVendorSpecificIE", "ESP_HOSTED_CONFIG_MSG_TYPE__TypeRespSetVendorSpecificIE", 35 },
 };
 static const ProtobufCIntRange esp_hosted_config_msg_type__value_ranges[] = {
-{0, 0},{0, 34}
+{0, 0},{0, 36}
 };
-static const ProtobufCEnumValueIndex esp_hosted_config_msg_type__enum_values_by_name[34] =
+static const ProtobufCEnumValueIndex esp_hosted_config_msg_type__enum_values_by_name[36] =
 {
   { "TypeCmdDisconnectAP", 14 },
   { "TypeCmdGetAPConfig", 6 },
@@ -3372,6 +3663,7 @@ static const ProtobufCEnumValueIndex esp_hosted_config_msg_type__enum_values_by_
   { "TypeCmdSetMacAddress", 22 },
   { "TypeCmdSetPowerSaveMode", 24 },
   { "TypeCmdSetSoftAPConfig", 12 },
+  { "TypeCmdSetVendorSpecificIE", 34 },
   { "TypeCmdSetWiFiMode", 4 },
   { "TypeCmdStopSoftAP", 16 },
   { "TypeRespDisconnectAP", 15 },
@@ -3389,6 +3681,7 @@ static const ProtobufCEnumValueIndex esp_hosted_config_msg_type__enum_values_by_
   { "TypeRespSetMacAddress", 23 },
   { "TypeRespSetPowerSaveMode", 25 },
   { "TypeRespSetSoftAPConfig", 13 },
+  { "TypeRespSetVendorSpecificIE", 35 },
   { "TypeRespSetWiFiMode", 5 },
   { "TypeRespStopSoftAP", 17 },
 };
@@ -3399,9 +3692,9 @@ const ProtobufCEnumDescriptor esp_hosted_config_msg_type__descriptor =
   "EspHostedConfigMsgType",
   "EspHostedConfigMsgType",
   "",
-  34,
+  36,
   esp_hosted_config_msg_type__enum_values_by_number,
-  34,
+  36,
   esp_hosted_config_msg_type__enum_values_by_name,
   1,
   esp_hosted_config_msg_type__value_ranges,
index a855a7f6458f4808620c76a22367a2141e281ae9..dd6568fd4e895129d1d999204c86a1673f591727 100644 (file)
@@ -45,6 +45,8 @@ typedef struct _EspHostedCmdOTAWrite EspHostedCmdOTAWrite;
 typedef struct _EspHostedRespOTAWrite EspHostedRespOTAWrite;
 typedef struct _EspHostedCmdOTAEnd EspHostedCmdOTAEnd;
 typedef struct _EspHostedRespOTAEnd EspHostedRespOTAEnd;
+typedef struct _EspHostedCmdSetVendorSpecificIE EspHostedCmdSetVendorSpecificIE;
+typedef struct _EspHostedRespSetVendorSpecificIE EspHostedRespSetVendorSpecificIE;
 typedef struct _EspHostedConfigPayload EspHostedConfigPayload;
 
 
@@ -68,6 +70,19 @@ typedef enum _EspHostedStatus {
   ESP_HOSTED_STATUS__TYPE_CONNECTION_FAIL = 3
     PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(ESP_HOSTED_STATUS)
 } EspHostedStatus;
+typedef enum _EspHostedVendorIEType {
+  ESP_HOSTED_VENDOR_IETYPE__VND_IE_TYPE_BEACON = 0,
+  ESP_HOSTED_VENDOR_IETYPE__VND_IE_TYPE_PROBE_REQ = 1,
+  ESP_HOSTED_VENDOR_IETYPE__VND_IE_TYPE_PROBE_RESP = 2,
+  ESP_HOSTED_VENDOR_IETYPE__VND_IE_TYPE_ASSOC_REQ = 3,
+  ESP_HOSTED_VENDOR_IETYPE__VND_IE_TYPE_ASSOC_RESP = 4
+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(ESP_HOSTED_VENDOR_IETYPE)
+} EspHostedVendorIEType;
+typedef enum _EspHostedIEID {
+  ESP_HOSTED_IEID__VND_IE_ID_0 = 0,
+  ESP_HOSTED_IEID__VND_IE_ID_1 = 1
+    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(ESP_HOSTED_IEID)
+} EspHostedIEID;
 typedef enum _EspHostedConfigMsgType {
   ESP_HOSTED_CONFIG_MSG_TYPE__TypeCmdGetMACAddress = 0,
   ESP_HOSTED_CONFIG_MSG_TYPE__TypeRespGetMACAddress = 1,
@@ -102,7 +117,9 @@ typedef enum _EspHostedConfigMsgType {
   ESP_HOSTED_CONFIG_MSG_TYPE__TypeCmdOTAWrite = 30,
   ESP_HOSTED_CONFIG_MSG_TYPE__TypeRespOTAWrite = 31,
   ESP_HOSTED_CONFIG_MSG_TYPE__TypeCmdOTAEnd = 32,
-  ESP_HOSTED_CONFIG_MSG_TYPE__TypeRespOTAEnd = 33
+  ESP_HOSTED_CONFIG_MSG_TYPE__TypeRespOTAEnd = 33,
+  ESP_HOSTED_CONFIG_MSG_TYPE__TypeCmdSetVendorSpecificIE = 34,
+  ESP_HOSTED_CONFIG_MSG_TYPE__TypeRespSetVendorSpecificIE = 35
     PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(ESP_HOSTED_CONFIG_MSG_TYPE)
 } EspHostedConfigMsgType;
 
@@ -485,6 +502,34 @@ struct  _EspHostedRespOTAEnd
     , 0,0 }
 
 
+struct  _EspHostedCmdSetVendorSpecificIE
+{
+  ProtobufCMessage base;
+  protobuf_c_boolean has_enable;
+  protobuf_c_boolean enable;
+  protobuf_c_boolean has_type;
+  EspHostedVendorIEType type;
+  protobuf_c_boolean has_idx;
+  EspHostedIEID idx;
+  protobuf_c_boolean has_vendor_ie_data;
+  ProtobufCBinaryData vendor_ie_data;
+};
+#define ESP_HOSTED_CMD_SET_VENDOR_SPECIFIC_IE__INIT \
+ { PROTOBUF_C_MESSAGE_INIT (&esp_hosted_cmd_set_vendor_specific_ie__descriptor) \
+    , 0,0, 0,0, 0,0, 0,{0,NULL} }
+
+
+struct  _EspHostedRespSetVendorSpecificIE
+{
+  ProtobufCMessage base;
+  protobuf_c_boolean has_resp;
+  int32_t resp;
+};
+#define ESP_HOSTED_RESP_SET_VENDOR_SPECIFIC_IE__INIT \
+ { PROTOBUF_C_MESSAGE_INIT (&esp_hosted_resp_set_vendor_specific_ie__descriptor) \
+    , 0,0 }
+
+
 typedef enum {
   ESP_HOSTED_CONFIG_PAYLOAD__PAYLOAD__NOT_SET = 0,
   ESP_HOSTED_CONFIG_PAYLOAD__PAYLOAD_CMD_GET_MAC_ADDRESS = 10,
@@ -521,6 +566,8 @@ typedef enum {
   ESP_HOSTED_CONFIG_PAYLOAD__PAYLOAD_RESP_OTA_WRITE = 41,
   ESP_HOSTED_CONFIG_PAYLOAD__PAYLOAD_CMD_OTA_END = 42,
   ESP_HOSTED_CONFIG_PAYLOAD__PAYLOAD_RESP_OTA_END = 43,
+  ESP_HOSTED_CONFIG_PAYLOAD__PAYLOAD_CMD_SET_VENDOR_SPECIFIC_IE = 44,
+  ESP_HOSTED_CONFIG_PAYLOAD__PAYLOAD_RESP_SET_VENDOR_SPECIFIC_IE = 45,
 } EspHostedConfigPayload__PayloadCase;
 
 struct  _EspHostedConfigPayload
@@ -564,6 +611,8 @@ struct  _EspHostedConfigPayload
     EspHostedRespOTAWrite *resp_ota_write;
     EspHostedCmdOTAEnd *cmd_ota_end;
     EspHostedRespOTAEnd *resp_ota_end;
+    EspHostedCmdSetVendorSpecificIE *cmd_set_vendor_specific_ie;
+    EspHostedRespSetVendorSpecificIE *resp_set_vendor_specific_ie;
   };
 };
 #define ESP_HOSTED_CONFIG_PAYLOAD__INIT \
@@ -1141,6 +1190,44 @@ EspHostedRespOTAEnd *
 void   esp_hosted_resp_otaend__free_unpacked
                      (EspHostedRespOTAEnd *message,
                       ProtobufCAllocator *allocator);
+/* EspHostedCmdSetVendorSpecificIE methods */
+void   esp_hosted_cmd_set_vendor_specific_ie__init
+                     (EspHostedCmdSetVendorSpecificIE         *message);
+size_t esp_hosted_cmd_set_vendor_specific_ie__get_packed_size
+                     (const EspHostedCmdSetVendorSpecificIE   *message);
+size_t esp_hosted_cmd_set_vendor_specific_ie__pack
+                     (const EspHostedCmdSetVendorSpecificIE   *message,
+                      uint8_t             *out);
+size_t esp_hosted_cmd_set_vendor_specific_ie__pack_to_buffer
+                     (const EspHostedCmdSetVendorSpecificIE   *message,
+                      ProtobufCBuffer     *buffer);
+EspHostedCmdSetVendorSpecificIE *
+       esp_hosted_cmd_set_vendor_specific_ie__unpack
+                     (ProtobufCAllocator  *allocator,
+                      size_t               len,
+                      const uint8_t       *data);
+void   esp_hosted_cmd_set_vendor_specific_ie__free_unpacked
+                     (EspHostedCmdSetVendorSpecificIE *message,
+                      ProtobufCAllocator *allocator);
+/* EspHostedRespSetVendorSpecificIE methods */
+void   esp_hosted_resp_set_vendor_specific_ie__init
+                     (EspHostedRespSetVendorSpecificIE         *message);
+size_t esp_hosted_resp_set_vendor_specific_ie__get_packed_size
+                     (const EspHostedRespSetVendorSpecificIE   *message);
+size_t esp_hosted_resp_set_vendor_specific_ie__pack
+                     (const EspHostedRespSetVendorSpecificIE   *message,
+                      uint8_t             *out);
+size_t esp_hosted_resp_set_vendor_specific_ie__pack_to_buffer
+                     (const EspHostedRespSetVendorSpecificIE   *message,
+                      ProtobufCBuffer     *buffer);
+EspHostedRespSetVendorSpecificIE *
+       esp_hosted_resp_set_vendor_specific_ie__unpack
+                     (ProtobufCAllocator  *allocator,
+                      size_t               len,
+                      const uint8_t       *data);
+void   esp_hosted_resp_set_vendor_specific_ie__free_unpacked
+                     (EspHostedRespSetVendorSpecificIE *message,
+                      ProtobufCAllocator *allocator);
 /* EspHostedConfigPayload methods */
 void   esp_hosted_config_payload__init
                      (EspHostedConfigPayload         *message);
@@ -1252,6 +1339,12 @@ typedef void (*EspHostedCmdOTAEnd_Closure)
 typedef void (*EspHostedRespOTAEnd_Closure)
                  (const EspHostedRespOTAEnd *message,
                   void *closure_data);
+typedef void (*EspHostedCmdSetVendorSpecificIE_Closure)
+                 (const EspHostedCmdSetVendorSpecificIE *message,
+                  void *closure_data);
+typedef void (*EspHostedRespSetVendorSpecificIE_Closure)
+                 (const EspHostedRespSetVendorSpecificIE *message,
+                  void *closure_data);
 typedef void (*EspHostedConfigPayload_Closure)
                  (const EspHostedConfigPayload *message,
                   void *closure_data);
@@ -1263,6 +1356,8 @@ typedef void (*EspHostedConfigPayload_Closure)
 
 extern const ProtobufCEnumDescriptor    esp_hosted_encryption_mode__descriptor;
 extern const ProtobufCEnumDescriptor    esp_hosted_status__descriptor;
+extern const ProtobufCEnumDescriptor    esp_hosted_vendor_ietype__descriptor;
+extern const ProtobufCEnumDescriptor    esp_hosted_ieid__descriptor;
 extern const ProtobufCEnumDescriptor    esp_hosted_config_msg_type__descriptor;
 extern const ProtobufCMessageDescriptor esp_hosted_cmd_get_mac_address__descriptor;
 extern const ProtobufCMessageDescriptor esp_hosted_resp_get_mac_address__descriptor;
@@ -1294,6 +1389,8 @@ extern const ProtobufCMessageDescriptor esp_hosted_cmd_otawrite__descriptor;
 extern const ProtobufCMessageDescriptor esp_hosted_resp_otawrite__descriptor;
 extern const ProtobufCMessageDescriptor esp_hosted_cmd_otaend__descriptor;
 extern const ProtobufCMessageDescriptor esp_hosted_resp_otaend__descriptor;
+extern const ProtobufCMessageDescriptor esp_hosted_cmd_set_vendor_specific_ie__descriptor;
+extern const ProtobufCMessageDescriptor esp_hosted_resp_set_vendor_specific_ie__descriptor;
 extern const ProtobufCMessageDescriptor esp_hosted_config_payload__descriptor;
 
 PROTOBUF_C__END_DECLS
index a28b3d32d318913a26a939b1e066c71191b6e7ad..63dec1e6dcf1b45d62a8212d0d0c9f2b099666b9 100644 (file)
@@ -164,6 +164,30 @@ message EspHostedRespOTAEnd {
     int32 resp = 1;
 }
 
+enum EspHostedVendorIEType {
+    VND_IE_TYPE_BEACON = 0;
+    VND_IE_TYPE_PROBE_REQ = 1;
+    VND_IE_TYPE_PROBE_RESP = 2;
+    VND_IE_TYPE_ASSOC_REQ = 3;
+    VND_IE_TYPE_ASSOC_RESP = 4;
+}
+
+enum EspHostedIEID {
+    VND_IE_ID_0 = 0;
+    VND_IE_ID_1 = 1;
+}
+
+message EspHostedCmdSetVendorSpecificIE {
+    bool enable = 1;
+    EspHostedVendorIEType type = 2;
+    EspHostedIEID idx = 3;
+    bytes vendor_ie_data = 4;
+}
+
+message EspHostedRespSetVendorSpecificIE {
+    int32 resp = 1;
+}
+
 enum EspHostedConfigMsgType {
     TypeCmdGetMACAddress = 0;
     TypeRespGetMACAddress = 1;
@@ -199,6 +223,8 @@ enum EspHostedConfigMsgType {
     TypeRespOTAWrite = 31;
     TypeCmdOTAEnd = 32;
     TypeRespOTAEnd = 33;
+    TypeCmdSetVendorSpecificIE = 34;
+    TypeRespSetVendorSpecificIE = 35;
 }
 
 message EspHostedConfigPayload {
@@ -238,5 +264,7 @@ message EspHostedConfigPayload {
         EspHostedRespOTAWrite resp_ota_write = 41;
         EspHostedCmdOTAEnd cmd_ota_end = 42;
         EspHostedRespOTAEnd resp_ota_end = 43;
+        EspHostedCmdSetVendorSpecificIE cmd_set_vendor_specific_ie = 44;
+        EspHostedRespSetVendorSpecificIE resp_set_vendor_specific_ie = 45;
     }
 }
index 1b695e5b20f8e4f3e5ee08f414c1d377f2f2c7dd..b1ed304433cfbe69c99b9a6812d8d608a0735944 100644 (file)
@@ -112,6 +112,24 @@ BSSID or MAC address of station of length 17. ex. "XX:XX:XX:XX:XX:XX".
 - `int rssi` :
 RSSI signal strength of station.
 
+---
+
+_struct_ `vendor_ie_data_t`:
+
+This contains vendor information element to ESP32 softAP.
+
+*Public Members*
+- `uint8_t element_id` :
+Should be set to WIFI_VENDOR_IE_ELEMENT_ID (0xDD).
+- `uint8_t length` :
+Length of all bytes in the element data (payload) following this field. Minimum 4(offset for `vendor_oui` and `vendor_oui_type` field).
+- `uint8_t vendor_oui[3]` :
+Vendor identifier (OUI).
+- `uint8_t vendor_oui_type` :
+Vendor-specific OUI type.
+- `uint8_t payload[0]` :
+Payload. Length is equal to value in 'length' field, minus 4.
+
 ---
 ## 2. Functions
 
@@ -124,7 +142,7 @@ This is used to get the MAC address of station or softAP interface of ESP32
 - `mode` :
   - `WIFI_MODE_STA` : station
   - `WIFI_MODE_AP` : softAP
-- `mac` : 
+- `mac` :
 String in form of "XX:XX:XX:XX:XX:XX" in success case.
 It should be large enough to store string in form "XX:XX:XX:XX:XX:XX"
 
@@ -420,6 +438,27 @@ User should free `esp_hosted_wifi_connected_stations_list` handler after use.
 
 ---
 
+### 2.15 `int wifi_set_vendor_specific_ie(bool enable, wifi_vendor_ie_type_t type, wifi_vendor_ie_id_t idx, void* vnd_ie, uint16_t vnd_ie_size)`
+Function set 802.11 Vendor-Specific Information Element. This function needs to get called before starting of ESP32 softAP.
+
+#### Parameters
+- `enable` :
+If true, specified IE is enabled. If false, specified IE is removed.
+- `type` :
+Information Element type. Determines the frame type to associate with the IE. Uses `wifi_vendor_ie_type_t` enum.
+- `idx` :
+Index to set or clear. Each IE type can be associated with up to two elements (indices 0 & 1). Uses `wifi_vendor_ie_id_t` enum.
+- `vnd_ie` :
+Pointer to vendor specific element data. First 6 bytes should be a header with fields matching vendor_ie_data_t. If enable is false, this argument is ignored and can be NULL.
+- `vnd_ie_size` :
+size of vnd_ie data
+
+#### Return
+- 0 : SUCCESS
+- -1 : FAILURE
+
+---
+
 ## 3. Enumerations
 
 ### 3.1 _enum_ `wifi_mode_t`
@@ -473,6 +512,27 @@ Invalid power save mode
 
 ---
 
+### 3.5 _enum_ `wifi_vendor_ie_type_t` :
+
+Vendor information element type. Determines the frame type that the IE will be associated with.
+_Values_ :
+- `WIFI_VND_IE_TYPE_BEACON` = 0 : Type beacon
+- `WIFI_VND_IE_TYPE_PROBE_REQ` : Type probe request
+- `WIFI_VND_IE_TYPE_PROBE_RESP` : Type probe response
+- `WIFI_VND_IE_TYPE_ASSOC_REQ` : Type association request
+- `WIFI_VND_IE_TYPE_ASSOC_RESP` : Type association response
+
+---
+
+### 3.6 _enum_ `wifi_vendor_ie_id_t` :
+
+Vendor Information Element index. Each IE type can have up to two associated vendor ID elements.
+_Values_ :
+- `WIFI_VND_IE_ID_0` = 0 : ID 0
+- `WIFI_VND_IE_ID_1` : ID 1
+
+---
+
 ## 4. Unions
 
 ### 4.1 _union_ `esp_hosted_control_config_t` :
index 66bfe9b3dbcc8a80eff482df9e1d2a95076c576a..77ef72f65bd64a3de6090ad949bd41299917203c 100644 (file)
@@ -10,6 +10,7 @@
 | ap_stop | Stop ESP32 softAP stop and down `ethap0` interface |
 | scan | Scan external access points |
 | sta_list | List external stations connected to softAP |
+| ap_vendor_ie | Set vendor information element for ESP32 softAP |
 
 It uses APIs present in [test_api.c](../host/linux/host_control/c_support/test_api.c). User should first modify configuration parameters in [test_config.h](../host/linux/host_control/c_support/test_config.h). Then run `make` in [c_support](../host/linux/host_control/c_support) to compile `test.c`.
 
@@ -18,7 +19,7 @@ Please execute `test.out` as below.
 
 ```
 ex.
-sudo ./test.out sta_connect sta_disconnect ap_start ap_stop scan sta_list
+sudo ./test.out sta_connect sta_disconnect ap_vendor_ie ap_start ap_stop scan sta_list
 ```
 Note:
 * After `sta_connect`, User needs to run DHCP client to obtain IP address from an external AP. Then network data path will be open for higher applications to use `ethsta0` interface for data communication. For an example as below.
@@ -29,6 +30,11 @@ sudo dhclient ethsta0 -r
 sudo dhclient ethsta0 -v
 ```
 
+* `ap_vendor_ie` needs to get called before starting of ESP32 softAP, please edit function `test_set_vendor_specific_ie` in `test_api.c`.
+`ap_vendor_ie` should get configured only once till ESP32 reboot. To remove
+previous configuration set `enable` flag to `false` in `wifi_set_vendor_specific_ie` API.
+After that re-configuration possible of Vendor IE.
+
 * After `ap_start` to start data connection, set up a DHCP server on the Raspberry Pi, or configure a static IP address for AP interface (`ethap0`). For an example as below:
 
 ```
@@ -50,6 +56,7 @@ sudo ifconfig ethap0 192.168.4.5
 | ap_stop | Stop ESP32 softAP stop and down `ethap0` interface |
 | scan | Scan external access points |
 | sta_list | List external stations connected to softAP |
+| ap_vendor_ie | Set vendor information element for ESP32 softAP |
 
  Run `make stress` in [c_support](../host/linux/host_control/c_support) directory to compile `stress.c`.
 
@@ -58,5 +65,5 @@ Please execute `stress.out` as below.
 
 ```
 ex.
-sudo ./stress.out 1 sta_connect sta_disconnect ap_start ap_stop scan sta_list
+sudo ./stress.out 1 sta_connect sta_disconnect ap_vendor_ie ap_start ap_stop scan sta_list
 ```
index b078f33a860cc7335fc5483a2496d8bad6ba19c3..8773db71588308c9762ac74f1358730b0ba0ced4 100644 (file)
@@ -1543,6 +1543,43 @@ err:
     return ESP_OK;
 }
 
+// Function vendor specific ie
+static esp_err_t cmd_set_vender_specific_ie_handler (EspHostedConfigPayload *req,
+        EspHostedConfigPayload *resp, void *priv_data)
+{
+    esp_err_t ret = ESP_OK;
+    EspHostedRespSetVendorSpecificIE *resp_payload = NULL;
+
+    if (!req || !resp || !req->cmd_set_vendor_specific_ie || 
+        !req->cmd_set_vendor_specific_ie->vendor_ie_data.len ||
+        !req->cmd_set_vendor_specific_ie->vendor_ie_data.data) {
+        ESP_LOGE(TAG, "Invalid parameters");
+        return ESP_FAIL;
+    }
+
+    resp_payload = (EspHostedRespSetVendorSpecificIE *)
+              calloc(1,sizeof(EspHostedRespSetVendorSpecificIE));
+    if (!resp_payload) {
+        ESP_LOGE(TAG,"Failed to allocate memory");
+        return ESP_ERR_NO_MEM;
+    }
+    esp_hosted_resp_set_vendor_specific_ie__init(resp_payload);
+    resp->payload_case = ESP_HOSTED_CONFIG_PAYLOAD__PAYLOAD_RESP_SET_VENDOR_SPECIFIC_IE;
+    resp->resp_set_vendor_specific_ie = resp_payload;
+    resp_payload->has_resp = true;
+
+    ret = esp_wifi_set_vendor_ie(req->cmd_set_vendor_specific_ie->enable,
+        req->cmd_set_vendor_specific_ie->type, req->cmd_set_vendor_specific_ie->idx,
+        req->cmd_set_vendor_specific_ie->vendor_ie_data.data);
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "Failed to set vendor information element %d \n", ret);
+        resp_payload->resp = FAILURE;
+        return ESP_OK;
+    }
+    resp_payload->resp = SUCCESS;
+    return ESP_OK;
+}
+
 static esp_hosted_config_cmd_t cmd_table[] = {
     {
         .cmd_num = ESP_HOSTED_CONFIG_MSG_TYPE__TypeCmdGetMACAddress ,
@@ -1612,6 +1649,10 @@ static esp_hosted_config_cmd_t cmd_table[] = {
         .cmd_num = ESP_HOSTED_CONFIG_MSG_TYPE__TypeCmdOTAEnd,
         .command_handler = cmd_ota_end_handler
     },
+    {
+        .cmd_num = ESP_HOSTED_CONFIG_MSG_TYPE__TypeCmdSetVendorSpecificIE,
+        .command_handler = cmd_set_vender_specific_ie_handler
+    },
 };
 
 
@@ -1761,6 +1802,10 @@ static void esp_hosted_config_cleanup(EspHostedConfigPayload *resp)
             mem_free(resp->resp_ota_end);
             break;
         }
+        case (ESP_HOSTED_CONFIG_MSG_TYPE__TypeRespSetVendorSpecificIE) : {
+            mem_free(resp->resp_set_vendor_specific_ie);
+            break;
+        }
         default:
             ESP_LOGE(TAG, "Unsupported response type");
             break;
index 173f8521632b25e0efa4c49c78b95f68e9da993f..a6893e09cd54c2b2dfcce3def876470004a85c19 100644 (file)
@@ -1136,6 +1136,95 @@ err2:
     return FAILURE;
 }
 
+// Function set 802.11 Vendor-Specific Information Element
+int wifi_set_vendor_specific_ie(bool enable, wifi_vendor_ie_type_t type, 
+        wifi_vendor_ie_id_t idx, void* vnd_ie, uint16_t vnd_ie_size)
+{
+    EspHostedConfigPayload req, *resp = NULL;
+    uint32_t tx_len = 0, rx_len = 0;
+    uint8_t *tx_data = NULL, *rx_data = NULL;
+
+    if ((type > WIFI_VND_IE_TYPE_ASSOC_RESP) || (type < WIFI_VND_IE_TYPE_BEACON)) {
+        command_log("Invalid vendor ie type \n");
+        return FAILURE;
+    }
+
+    if ((idx > WIFI_VND_IE_ID_1) || (idx < WIFI_VND_IE_ID_0)) {
+        command_log("Invalid vendor ie ID index \n");
+        return FAILURE;
+    }
+    if (!vnd_ie) {
+        command_log("Invalid vendor IE buffer \n");
+        return FAILURE;
+    }
+
+    esp_hosted_config_payload__init (&req);
+    req.has_msg = true;
+    req.msg = ESP_HOSTED_CONFIG_MSG_TYPE__TypeCmdSetVendorSpecificIE;
+    req.payload_case = ESP_HOSTED_CONFIG_PAYLOAD__PAYLOAD_CMD_SET_VENDOR_SPECIFIC_IE;
+
+    EspHostedCmdSetVendorSpecificIE *req_payload = (EspHostedCmdSetVendorSpecificIE *)
+        esp_hosted_calloc(1, sizeof(EspHostedCmdSetVendorSpecificIE));
+    if (!req_payload) {
+        command_log("Failed to allocate memory for req_payload\n");
+        return FAILURE;
+    }
+    esp_hosted_cmd_set_vendor_specific_ie__init(req_payload);
+    req_payload->has_enable = true;
+    req_payload->enable = enable; 
+    req_payload->has_type = true;
+    req_payload->type = type;
+    req_payload->has_idx = true;
+    req_payload->idx = idx;
+    req_payload->has_vendor_ie_data = true;
+    req_payload->vendor_ie_data.len = vnd_ie_size;
+    req_payload->vendor_ie_data.data = vnd_ie;
+    req.cmd_set_vendor_specific_ie = req_payload;
+    tx_len = esp_hosted_config_payload__get_packed_size(&req);
+    if (!tx_len) {
+        command_log("Invalid tx length\n");
+        goto err3;
+    }
+
+    tx_data = (uint8_t *)esp_hosted_calloc(1, tx_len);
+    if (!tx_data) {
+        command_log("Failed to allocate memory for tx_data\n");
+        goto err3;
+    }
+
+    esp_hosted_config_payload__pack(&req, tx_data);
+
+    rx_data = transport_pserial_data_handler(tx_data, tx_len,
+            TIMEOUT_PSERIAL_RESP, &rx_len);
+    if (!rx_data || !rx_len) {
+        command_log("Failed to process rx_data\n");
+        goto err2;
+    }
+
+    resp = esp_hosted_config_payload__unpack(NULL, rx_len, rx_data);
+    if ((!resp) || (!resp->resp_set_vendor_specific_ie)) {
+        command_log("Failed to unpack rx_data\n");
+        goto err1;
+    }
+
+    if (resp->resp_set_vendor_specific_ie->resp) {
+        command_log("Failed to set vendor specific information element\n");
+        goto err1;
+    }
+
+    mem_free(tx_data);
+    mem_free(rx_data);
+    mem_free(req_payload);
+    return SUCCESS;
+err1:
+    mem_free(rx_data);
+err2:
+    mem_free(tx_data);
+err3:
+    mem_free(req_payload);
+    return FAILURE;
+}
+
 // Function performs an OTA begin for ESP32
 int esp_ota_begin()
 {
@@ -1318,3 +1407,4 @@ err2:
     mem_free(tx_data);
     return FAILURE;
 }
+
index ccb71ea02a781f0ebcc4d9ad1e8acb312cc0cc2c..c315ad663e6bc79daf952b614ad4101d36838e31 100644 (file)
@@ -50,6 +50,19 @@ typedef enum {
     WIFI_PS_INVALID,
 } wifi_ps_type_t;
 
+typedef enum {
+    WIFI_VND_IE_TYPE_BEACON = 0,
+    WIFI_VND_IE_TYPE_PROBE_REQ,
+    WIFI_VND_IE_TYPE_PROBE_RESP,
+    WIFI_VND_IE_TYPE_ASSOC_REQ,
+    WIFI_VND_IE_TYPE_ASSOC_RESP,
+} wifi_vendor_ie_type_t;
+
+typedef enum {
+    WIFI_VND_IE_ID_0,
+    WIFI_VND_IE_ID_1,
+} wifi_vendor_ie_id_t;
+
 typedef struct {
     uint8_t ssid[SSID_LENGTH];
     uint8_t pwd[PASSWORD_LENGTH];
@@ -90,6 +103,13 @@ typedef struct {
     int rssi;
 } esp_hosted_wifi_connected_stations_list;
 
+typedef struct {
+    uint8_t element_id;      /**< Should be set to WIFI_VENDOR_IE_ELEMENT_ID (0xDD) */
+    uint8_t length;          /**< Length of all bytes in the element data following this field. Minimum 4. */
+    uint8_t vendor_oui[3];   /**< Vendor identifier (OUI). */ 
+    uint8_t vendor_oui_type; /**< Vendor-specific OUI type. */ 
+    uint8_t payload[0];      /**< Payload. Length is equal to value in 'length' field, minus 4. */
+} vendor_ie_data_t;
 
 /* wifi get mac function returns status SUCCESS(0) or FAILURE(-1)
  * Input parameter
@@ -266,6 +286,19 @@ int wifi_set_power_save_mode(int power_save_mode);
  */
 int wifi_get_power_save_mode(int *power_save_mode);
 
+/*
+ * wifi set vendor specific ie function set 802.11 Vendor-Specific Information Element
+ * returns SUCCESS(0) or FAILURE(-1)
+ *  Input parameter:
+ *      enable      : If true, specified IE is enabled. If false, specified IE is removed.
+ *      type        : Information Element type. Determines the frame type to associate with the IE.
+ *      idx         : Index to set or clear. Each IE type can be associated with up to two elements (indices 0 & 1).
+ *      vnd_ie      : Pointer to vendor specific element data. First 6 bytes should be a header with fields matching vendor_ie_data_t. If enable is false, this argument is ignored and can be NULL.
+ *      vnd_ie_size : size of vnd_ie data
+ */
+int wifi_set_vendor_specific_ie(bool enable, wifi_vendor_ie_type_t type,
+        wifi_vendor_ie_id_t idx, void* vnd_ie, uint16_t vnd_ie_size);
+
 /*
  * esp ota begin function performs an OTA begin operation for ESP32
  * which sets partition for OTA write and erase it.
@@ -290,5 +323,4 @@ int esp_ota_write(uint8_t* ota_data, uint32_t ota_data_len);
  * returns SUCCESS(0) or FAILURE(-1)
  */
 int esp_ota_end();
-
 #endif
index 72b75ec4bf15622a829fec2d7e58112c7359e24a..506c1b1c59742b53e77da26024de6e9864098b29 100644 (file)
@@ -32,10 +32,10 @@ int main(int argc, char *argv[])
         exit(0);
     }
 
-    if (!argc) {
-        printf("Usage: %s [%s] [%s] [%s] [%s] [%s] [%s]\n", argv[0],
+    if (argc == 1) {
+        printf("Usage: %s [%s] [%s] [%s] [%s] [%s] [%s] [%s] [%s]\n", argv[0],
         STA_CONNECT, STA_DISCONNECT, AP_START, AP_STOP,
-        SCAN, STA_LIST);
+        SCAN, STA_LIST, OTA, AP_VENDOR_IE);
                return -1;
     }
 
@@ -54,12 +54,15 @@ int main(int argc, char *argv[])
             test_softap_mode_connected_clients_info();
         else if (0 == strncasecmp(OTA, argv[i], sizeof(OTA)))
             test_ota(argv[i+1]);
+        else if (0 == strncasecmp(AP_VENDOR_IE, argv[i], sizeof(AP_VENDOR_IE)))
+            test_set_vendor_specific_ie();
         else if ((0 == strncasecmp("--help", argv[i], sizeof("--help"))) ||
                  (0 == strncasecmp("-h", argv[i], sizeof("-h")))) {
-            printf("Usage: %s [%s] [%s] [%s] [%s] [%s] [%s]\n", argv[0],
-                STA_CONNECT, STA_DISCONNECT, AP_START, AP_STOP, SCAN, STA_LIST);
+            printf("Usage: %s [%s] [%s] [%s] [%s] [%s] [%s] [%s] [%s]\n", argv[0],
+                STA_CONNECT, STA_DISCONNECT, AP_START, AP_STOP, SCAN, STA_LIST,
+                OTA, AP_VENDOR_IE);
                        return(0);
-               }
+        }
     }
 
     return 0;
index 199af52e4b07c29b2bf0ace98dedca5a2a25a88e..95732375b2813f77db284916d4d3e66df8bba511 100644 (file)
 #include <linux/if_arp.h>
 #include "test_api.h"
 
-#define MAC_LEN              7
-#define MAC_STR_LEN          17
+#define MAC_LEN                     7
+#define MAC_STR_LEN                 17
 
-#define STA_INTERFACE        "ethsta0"
-#define AP_INTERFACE         "ethap0"
-#define MAX_INTERFACE_LEN     10
+#define STA_INTERFACE               "ethsta0"
+#define AP_INTERFACE                "ethap0"
+#define MAX_INTERFACE_LEN           10
+
+#define WIFI_VENDOR_IE_ELEMENT_ID   0xDD
+#define OFFSET                      4
+#define VENDOR_OUI_0                1
+#define VENDOR_OUI_1                2
+#define VENDOR_OUI_2                3
+#define VENDOR_OUI_TYPE             22
 
 // Function converts mac string to byte stream
 static int convert_mac_to_bytes(uint8_t *out, size_t out_len, char *s)
@@ -666,3 +673,43 @@ int test_ota(char* image_path)
 #endif
     return SUCCESS;
 }
+
+int test_set_vendor_specific_ie()
+{ 
+    char *data = "Example vendor IE data";
+    int vnd_ie_size = sizeof(vendor_ie_data_t)+strlen(data)+1;
+    vendor_ie_data_t *vnd_ie = (vendor_ie_data_t *)malloc(vnd_ie_size);
+    if (!vnd_ie) {
+        printf("Failed to allocate memory for vnd_ie\n");
+        return FAILURE;
+    }
+
+    vnd_ie->element_id = WIFI_VENDOR_IE_ELEMENT_ID;
+    vnd_ie->length = strlen(data) + OFFSET;
+    if (vnd_ie->length < OFFSET) {                                                  
+        printf("Length should not be less than %d bytes \n", OFFSET);                        
+        free(vnd_ie);
+        return FAILURE;                                                         
+    } 
+    vnd_ie->vendor_oui[0] = VENDOR_OUI_0;
+    vnd_ie->vendor_oui[1] = VENDOR_OUI_1;
+    vnd_ie->vendor_oui[2] = VENDOR_OUI_2;
+    vnd_ie->vendor_oui_type = VENDOR_OUI_TYPE;
+    memcpy(vnd_ie->payload, data, strlen(data));
+
+    int ret = wifi_set_vendor_specific_ie(true, WIFI_VND_IE_TYPE_BEACON,
+            WIFI_VND_IE_ID_0, vnd_ie, vnd_ie_size);
+
+#ifdef TEST_DEBUG_PRINTS
+    printf("==== %s =>\n",__func__);
+    if (ret == SUCCESS) {
+        printf("Success in set vendor specific ie\n");
+    } else {
+        printf("Failed to set vendor specific ie\n");
+    }
+    printf("====\n\n");
+#endif
+
+    free(vnd_ie);
+    return ret;
+}
index 7feb0faec9eb36eea8a1821d5663c26dce08f9aa..8c987fea5915b2a18a0ef1cdf4c14f97533bacdf 100644 (file)
@@ -74,4 +74,6 @@ int test_ota_write();
 int test_ota_end();
 
 int test_ota(char* image_path);
+
+int test_set_vendor_specific_ie();
 #endif
index 95eed2d529a18f80195456bba5ce2837ed2a4376..d37d1cd511b5149f69cd58b7025a8eab8a44d354 100644 (file)
@@ -28,6 +28,7 @@
 #define SCAN                               "scan"
 #define STA_LIST                           "sta_list"
 #define OTA                                "ota"
+#define AP_VENDOR_IE                       "ap_vendor_ie"
 
 #define MAC_LENGTH                          18
 #define SSID_LENGTH                         32
This page took 0.064127 seconds and 4 git commands to generate.