-
-
Save aknik/3934415fff3cb13d23ac6de3f4657bdd to your computer and use it in GitHub Desktop.
ESP32 raw packets
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <WiFi.h> | |
#include "wifi_headers.h" | |
#include <esp_wifi.h> | |
//#include <esp_wifi_internal.h> | |
#include <lwip/err.h> | |
typedef union { | |
uint8_t fix_rate; | |
uint8_t b5; | |
uint8_t b4; | |
struct { | |
uint8_t b3; | |
uint8_t b2; | |
} b1; | |
struct { | |
uint32_t a1; | |
uint8_t a2; | |
uint8_t a3; | |
uint8_t a4; | |
uint8_t a5; | |
struct { | |
uint8_t a6; | |
uint8_t a7; | |
} a8[4]; | |
uint8_t a9; | |
uint8_t a10; | |
uint8_t a11; | |
uint8_t a12; | |
} a13; | |
} wifi_internal_rate_t; | |
#define RATE_MCS4_SP 28 // N 43.3Mb MCS4 SP | |
// buffer: Raw IEEE 802.11 packet to send | |
// len: Length of IEEE 802.11 packet | |
// en_sys_seq: see https://github.com/espressif/esp-idf/blob/master/docs/api-guides/wifi.rst#wi-fi-80211-packet-send for details | |
extern "C" { | |
esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq); | |
esp_err_t esp_wifi_internal_set_rate(int a, int b, int c, wifi_internal_rate_t *d); | |
} | |
mac_t BCAST(true); | |
mac_t ME; | |
void setup() { | |
Serial.begin(115200); | |
Serial.println("Start"); | |
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); | |
esp_wifi_init(&cfg); | |
esp_wifi_set_mode(WIFI_MODE_NULL); | |
wifi_internal_rate_t rate; | |
rate.fix_rate = RATE_MCS4_SP; | |
esp_wifi_internal_set_rate(100, 1, 4, &rate); | |
esp_wifi_start(); | |
esp_wifi_set_ps(WIFI_PS_NONE); | |
Serial.println("Done setup"); | |
WiFi.macAddress(ME.mac); | |
} | |
void loop() { | |
byte data[sizeof(WiFiHeader) + 20]; | |
WiFiHeader* pkt = (WiFiHeader*)data; | |
pkt->frame_control.type = WIFI_TYPE_DATA; | |
pkt->frame_control.subtype = 0; | |
pkt->frame_control.to_ds = 1; | |
pkt->address_1 = BCAST; | |
pkt->address_2 = ME; | |
pkt->address_3 = ME; | |
memset(data + sizeof(WiFiHeader), 40, 20); | |
int result = esp_wifi_80211_tx(WIFI_IF_AP, data, sizeof(data), true); | |
switch (result) { | |
case ERR_OK: Serial.println("ERR_OK"); break; | |
case ERR_MEM: Serial.println("ERR_MEM"); break; | |
case ERR_IF: Serial.println("ERR_IF"); break; | |
case ERR_ARG: Serial.println("ERR_ARG"); break; | |
default: Serial.println(result); | |
} | |
delay(1000); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment