service.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /**
  2. * RT-Thread RuiChing
  3. *
  4. * COPYRIGHT (C) 2024-2025 Shanghai Real-Thread Electronic Technology Co., Ltd.
  5. * All rights reserved.
  6. *
  7. * The license and distribution terms for this file may be
  8. * found in the file LICENSE in this distribution.
  9. */
  10. #ifndef __service_H__
  11. #define __service_H__
  12. #include <rtthread.h>
  13. /* service flag */
  14. #define SERVICE_FLAG_RDONLY 0x02
  15. #define SERVICE_FLAG_WRONLY 0x04
  16. #define SERVICE_FLAG_RDWR 0x08
  17. #define SERVICE_FLAG_STANDALONE 0x10
  18. #define SERVICE_FLAG_MASK 0xFF
  19. /* service open flag */
  20. #define SERVICE_OFLAG_CLOSE 0x01
  21. #define SERVICE_OFLAG_RDONLY 0x02
  22. #define SERVICE_OFLAG_WRONLY 0x04
  23. #define SERVICE_OFLAG_RDWR 0x08
  24. #define SERVICE_OFLAG_OPEN 0x10
  25. #define SERVICE_OFLAG_MASK 0xFF
  26. /* service cmd */
  27. #define SERVICE_CMD_GET_STATUS 0x01
  28. #define SERVICE_CMD_SET_MODE 0x02
  29. #define SERVICE_CMD_RESET 0x03
  30. typedef enum
  31. {
  32. NETWORK_service = 0x01,
  33. } service_type_t;
  34. struct service_core;
  35. struct service_core_ops
  36. {
  37. rt_err_t (*open)(struct service_core *service, rt_uint16_t oflag);
  38. rt_err_t (*close)(struct service_core *service);
  39. rt_ssize_t (*read)(struct service_core *service,
  40. rt_off_t pos,
  41. void *buffer,
  42. rt_size_t size);
  43. rt_ssize_t (*write)(struct service_core *service,
  44. rt_off_t pos,
  45. const void *buffer,
  46. rt_size_t size);
  47. rt_err_t (*control)(struct service_core *service, int cmd, void *args);
  48. };
  49. struct service_core
  50. {
  51. struct rt_object parent;
  52. struct rt_mutex mutex;
  53. rt_uint16_t flag;
  54. rt_uint16_t type;
  55. rt_uint16_t open_flag;
  56. rt_uint8_t ref_count;
  57. rt_uint8_t service_id;
  58. rt_err_t (*rx_indicate)(struct service_core *service, rt_size_t size);
  59. rt_err_t (*tx_complete)(struct service_core *service, void *buffer);
  60. const struct service_core_ops *ops;
  61. void *user_data;
  62. };
  63. typedef struct service_core *(*__kpi_service_find)(const char *name);
  64. typedef rt_err_t (*__kpi_service_register)(struct service_core *service,
  65. const char *name,
  66. rt_uint16_t flags,
  67. void *user_data);
  68. typedef rt_err_t (*__kpi_service_unregister)(struct service_core *service);
  69. typedef struct service_core *(*__kpi_service_create)(int type, int attach_size);
  70. typedef void (*__kpi_service_destroy)(struct service_core *service);
  71. typedef rt_err_t (*__kpi_service_open)(
  72. struct service_core *service, rt_uint16_t oflag);
  73. typedef rt_err_t (*__kpi_service_close)(struct service_core *service);
  74. typedef rt_ssize_t (*__kpi_service_read)(
  75. struct service_core *service, rt_off_t pos, void *buffer, rt_size_t size);
  76. typedef rt_ssize_t (*__kpi_service_write)(struct service_core *service,
  77. rt_off_t pos,
  78. const void *buffer,
  79. rt_size_t size);
  80. typedef rt_err_t (*__kpi_service_control)(
  81. struct service_core *service, int cmd, void *arg);
  82. typedef rt_err_t (*__kpi_service_set_rx_indicate)(struct service_core *service,
  83. rt_err_t (*rx_ind)(struct service_core *service, rt_size_t size));
  84. typedef rt_err_t (*__kpi_service_set_tx_complete)(struct service_core *service,
  85. rt_err_t (*tx_done)(struct service_core *service, void *buffer));
  86. typedef rt_err_t (*__kpi_service_lock)(struct service_core *service);
  87. typedef rt_err_t (*__kpi_service_unlock)(struct service_core *service);
  88. KPI_EXTERN(service_find);
  89. KPI_EXTERN(service_register);
  90. KPI_EXTERN(service_unregister);
  91. KPI_EXTERN(service_create);
  92. KPI_EXTERN(service_destroy);
  93. KPI_EXTERN(service_open);
  94. KPI_EXTERN(service_close);
  95. KPI_EXTERN(service_read);
  96. KPI_EXTERN(service_write);
  97. KPI_EXTERN(service_control);
  98. KPI_EXTERN(service_set_rx_indicate);
  99. KPI_EXTERN(service_set_tx_complete);
  100. KPI_EXTERN(service_lock);
  101. KPI_EXTERN(service_unlock);
  102. #endif /* __service_H__ */