Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /**
  2. * Copyright (c) 2022 Brian Starkey <stark3y@gmail.com>
  3. *
  4. * Based on the Pico W tcp_server example:
  5. * Copyright (c) 2022 Raspberry Pi (Trading) Ltd.
  6. *
  7. * SPDX-License-Identifier: BSD-3-Clause
  8. */
  9. #include <string.h>
  10. #include <stdlib.h>
  11. #include "pico/stdlib.h"
  12. #include "pico/cyw43_arch.h"
  13. #include "tcp_comm.h"
  14. extern const char *wifi_ssid;
  15. extern const char *wifi_pass;
  16. #define TCP_PORT 4242
  17. #define MAX_LEN 2048
  18. #define CMD_SYNC (('S' << 0) | ('Y' << 8) | ('N' << 16) | ('C' << 24))
  19. #define RSP_SYNC (('W' << 0) | ('O' << 8) | ('T' << 16) | ('A' << 24))
  20. static uint32_t handle_sync(uint32_t *args_in, uint8_t *data_in, uint32_t *resp_args_out, uint8_t *resp_data_out)
  21. {
  22. return RSP_SYNC;
  23. }
  24. const struct comm_command util_sync_cmd = {
  25. .opcode = CMD_SYNC,
  26. .nargs = 0,
  27. .resp_nargs = 0,
  28. .size = NULL,
  29. .handle = &handle_sync,
  30. };
  31. int main()
  32. {
  33. stdio_init_all();
  34. sleep_ms(1000);
  35. if (cyw43_arch_init()) {
  36. printf("failed to initialise\n");
  37. return 1;
  38. }
  39. cyw43_arch_enable_sta_mode();
  40. printf("Connecting to WiFi...\n");
  41. if (cyw43_arch_wifi_connect_timeout_ms(wifi_ssid, wifi_pass, CYW43_AUTH_WPA2_AES_PSK, 30000)) {
  42. printf("failed to connect.\n");
  43. return 1;
  44. } else {
  45. printf("Connected.\n");
  46. }
  47. const struct comm_command *cmds[] = {
  48. &util_sync_cmd,
  49. };
  50. struct tcp_comm_ctx *tcp = tcp_comm_new(cmds, 1, CMD_SYNC);
  51. for ( ; ; ) {
  52. err_t err = tcp_comm_listen(tcp, TCP_PORT);
  53. if (err != ERR_OK) {
  54. printf("Failed to start server: %d\n", err);
  55. sleep_ms(1000);
  56. continue;
  57. }
  58. while (!tcp_comm_server_done(tcp)) {
  59. cyw43_arch_poll();
  60. sleep_ms(10);
  61. }
  62. }
  63. cyw43_arch_deinit();
  64. return 0;
  65. }