hal-socket.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // SPDX-License-Identifier: Apache-2.0
  2. /*
  3. * Copyright (C) 2013 Intel Corporation
  4. *
  5. */
  6. #define _GNU_SOURCE
  7. #include <stdbool.h>
  8. #include <stdint.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include "hal-ipc.h"
  12. #include "hal-log.h"
  13. #include "hal-msg.h"
  14. #include "hal-utils.h"
  15. #include "hal.h"
  16. static bt_status_t socket_listen(btsock_type_t type, const char *service_name,
  17. const uint8_t *uuid, int chan,
  18. int *sock, int flags)
  19. {
  20. struct hal_cmd_socket_listen cmd;
  21. if (!sock)
  22. return BT_STATUS_PARM_INVALID;
  23. DBG("uuid %s chan %d sock %p type %d service_name %s flags 0x%02x",
  24. btuuid2str(uuid), chan, sock, type, service_name, flags);
  25. memset(&cmd, 0, sizeof(cmd));
  26. /* type match IPC type */
  27. cmd.type = type;
  28. cmd.flags = flags;
  29. cmd.channel = chan;
  30. if (uuid)
  31. memcpy(cmd.uuid, uuid, sizeof(cmd.uuid));
  32. if (service_name)
  33. memcpy(cmd.name, service_name, strlen(service_name));
  34. return hal_ipc_cmd(HAL_SERVICE_ID_SOCKET, HAL_OP_SOCKET_LISTEN,
  35. sizeof(cmd), &cmd, NULL, NULL, sock);
  36. }
  37. static bt_status_t socket_connect(const bt_bdaddr_t *bdaddr, btsock_type_t type,
  38. const uint8_t *uuid, int chan,
  39. int *sock, int flags)
  40. {
  41. struct hal_cmd_socket_connect cmd;
  42. if (!sock)
  43. return BT_STATUS_PARM_INVALID;
  44. DBG("bdaddr %s uuid %s chan %d sock %p type %d flags 0x%02x",
  45. bdaddr2str(bdaddr), btuuid2str(uuid), chan, sock, type, flags);
  46. memset(&cmd, 0, sizeof(cmd));
  47. /* type match IPC type */
  48. cmd.type = type;
  49. cmd.flags = flags;
  50. cmd.channel = chan;
  51. if (uuid)
  52. memcpy(cmd.uuid, uuid, sizeof(cmd.uuid));
  53. if (bdaddr)
  54. memcpy(cmd.bdaddr, bdaddr, sizeof(cmd.bdaddr));
  55. return hal_ipc_cmd(HAL_SERVICE_ID_SOCKET, HAL_OP_SOCKET_CONNECT,
  56. sizeof(cmd), &cmd, NULL, NULL, sock);
  57. }
  58. static btsock_interface_t socket_if = {
  59. sizeof(socket_if),
  60. socket_listen,
  61. socket_connect
  62. };
  63. btsock_interface_t *bt_get_socket_interface(void)
  64. {
  65. return &socket_if;
  66. }