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)
{
(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",
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 */
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 */
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 */
};
{
{ 1, 0 },
{ 10, 1 },
- { 0, 35 }
+ { 0, 37 }
};
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,
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 },
{ "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 },
{ "TypeCmdSetMacAddress", 22 },
{ "TypeCmdSetPowerSaveMode", 24 },
{ "TypeCmdSetSoftAPConfig", 12 },
+ { "TypeCmdSetVendorSpecificIE", 34 },
{ "TypeCmdSetWiFiMode", 4 },
{ "TypeCmdStopSoftAP", 16 },
{ "TypeRespDisconnectAP", 15 },
{ "TypeRespSetMacAddress", 23 },
{ "TypeRespSetPowerSaveMode", 25 },
{ "TypeRespSetSoftAPConfig", 13 },
+ { "TypeRespSetVendorSpecificIE", 35 },
{ "TypeRespSetWiFiMode", 5 },
{ "TypeRespStopSoftAP", 17 },
};
"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,
typedef struct _EspHostedRespOTAWrite EspHostedRespOTAWrite;
typedef struct _EspHostedCmdOTAEnd EspHostedCmdOTAEnd;
typedef struct _EspHostedRespOTAEnd EspHostedRespOTAEnd;
+typedef struct _EspHostedCmdSetVendorSpecificIE EspHostedCmdSetVendorSpecificIE;
+typedef struct _EspHostedRespSetVendorSpecificIE EspHostedRespSetVendorSpecificIE;
typedef struct _EspHostedConfigPayload EspHostedConfigPayload;
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,
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;
, 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,
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
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 \
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);
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);
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;
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
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;
TypeRespOTAWrite = 31;
TypeCmdOTAEnd = 32;
TypeRespOTAEnd = 33;
+ TypeCmdSetVendorSpecificIE = 34;
+ TypeRespSetVendorSpecificIE = 35;
}
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;
}
}
- `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
- `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"
---
+### 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`
---
+### 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` :
| 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`.
```
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.
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:
```
| 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`.
```
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
```
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 ,
.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
+ },
};
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;
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()
{
mem_free(tx_data);
return FAILURE;
}
+
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];
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
*/
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.
* returns SUCCESS(0) or FAILURE(-1)
*/
int esp_ota_end();
-
#endif
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;
}
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;
#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)
#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;
+}
int test_ota_end();
int test_ota(char* image_path);
+
+int test_set_vendor_specific_ie();
#endif
#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