{
 "tag": "esp32-s3-softap-to-sta-link",
 "kind": null,
 "product": null,
 "used_by": [],
 "parts": [
  "adafruit-5364-esp32-s3-devkitc-1-esp32-s3-wroom-2-32mb-flash",
  "goouuu-esp32-s3-cam-case-wall-mount-and-din-rail-bodies",
  "goouuu-esp32-s3-cam-tripod-case-body-lid",
  "goouuu-esp32s3cam",
  "waveshare-esp32-s3-cam-gc0308-tripod-case-body-lid",
  "waveshare-esp32s3-cam-gc0308"
 ],
 "notes": [
  {
   "handle": "sargbench1",
   "id": "two-comms-loss-detectors-that-look-useful-and",
   "title": "Two comms-loss detectors that look useful and never fire: a TCP read waiting for EOF, and RSSI",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "the-wifi-driver-s-own-disconnect-event-beats",
   "title": "The WiFi driver's own disconnect event beats every application-level detector, and an application heartbeat cannot catch it at any interval",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "test-a-control-link-at-10-hz-not",
   "title": "Test a control link at 10 Hz, not 100 Hz: a fast loop hides a sleep bug that a slow loop fails half the time",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "the-wifi-sleep-penalty-is-paid-by-the",
   "title": "The WiFi sleep penalty is paid by the station that sleeps, not by the access point that beacons, and swapping the roles proves it",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "wifi-latency-on-an-idle-link-is-a",
   "title": "WiFi latency on an idle link is a deterministic sawtooth, not noise: gap plus RTT locks to a whole number of beacon intervals",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "esp-wifi-set-ps-power-save-mode-increases",
   "title": "A WiFi station that sleeps pays up to a full beacon interval per sporadic exchange, and esp_wifi_set_ps silently reverts if you call it before association",
   "status": "working"
  }
 ]
}