SalesConnect Waveshare ESP32-P4 notification component

STATUS: Source component prepared. Exact board integration and hardware testing
are pending the owner's Waveshare model and revision. This is not a flash-ready
binary. Do not flash an unrelated board example or replace the C6/C5 firmware.

1. Start with the official Waveshare ESP-IDF Wi-Fi + audio example for YOUR exact
board/revision. Verify its speaker and networking work first. ESP32-P4 boards
can use different companion Wi-Fi chips and ES8311 codec wiring.
2. Copy this folder into that project's components/sales_notifier/ folder.
The existing project must provide esp_codec_dev and its correct BSP drivers.
Enable the ESP x509 certificate bundle in menuconfig. Initialize SNTP and wait
for a valid clock before making HTTPS requests. Never disable certificate checks.
3. Initialize the speaker with the verified BSP. Once Wi-Fi and the clock are
ready, call sales_notifier_start(speaker_handle, DEVICE_TOKEN). This component
opens the codec for 16 kHz, mono, signed16-bit PCM. Ensure the BSP is configured
for that format; pass its speaker playback handle, not a microphone handle.
Do not let another task use the speaker simultaneously.
4. In sales.polywinkle.com, sign in, expand Device notifications, create a token.
It is shown only once. Store it in your local private device configuration/NVS.
Do not publish it or your Wi-Fi password in source repositories or screenshots.
The server stores only the token hash. The token expires after one year; revoke
it from SalesConnect immediately if a device is lost.
5. After integration, build with idf.py set-target esp32p4, idf.py build.
Use the vendor's documented USB port/boot procedure and idf.py -p YOUR_PORT flash.
Back up any working firmware/config first; no board has been flashed by us.
6. Confirm a real/test fixture notification before relying on it. Customer
message = two falling notes. New order = three rising notes. It checks HTTPS
every30seconds and repeats both sounds while either count remains nonzero.
Mark the relevant records Seen in SalesConnect to stop their alert next poll.
Network/authentication failures do NOT sound a new-customer alert.

Web use: Enable sound once after opening SalesConnect (browser requirement).
Browser background tabs can throttle timers. Keep the dedicated device powered
for dependable repeated checks. Browser notifications show generic counts only.
Email accepted by SMTP is not proof of inbox delivery. Replies to those emails
still arrive in the configured mailbox; full IMAP inbox sync is not included.

Protocol: GET https://polywinkle.com/cgi-bin/salesconnect/api.py?action=device_poll
Authorization: Bearer YOUR_DEVICE_TOKEN
Response: {"messages":0,"orders":0,"total":0,"pollSeconds":30}
This token cannot view customer records, download packages, send email, or mark
records seen. No credentials are included in this download.

References:
https://docs.waveshare.com/ (select the exact P4 board)
https://docs.espressif.com/projects/esp-idf/en/stable/esp32p4/api-reference/protocols/esp_http_client.html
