async_worker.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #ifndef __ASYNC_WORKER__
  2. #define __ASYNCE_WORKER__
  3. #include <stdlib.h>
  4. #include "osi_api.h"
  5. //#include "event.h"
  6. #include "aworker_config.h"
  7. #ifdef CONFIG_AWORKER_SUPPORT
  8. typedef enum aworker_result_code
  9. {
  10. AWRC_FAIL = -1,
  11. AWRC_SUCCESS = 0,
  12. AWRC_PROCESSING = 9876543,
  13. } AWORKER_RC;
  14. struct aworker_request;
  15. typedef struct aworker_request AWORKER_REQ;
  16. /**
  17. * handler return value include AWRC_FAIL, AWRC_SUCCESS, AWRC_PROCESSING,
  18. * AWRC_FAIL, AWRC_SUCCESS means handler complete and give the handled result;
  19. * AWRC_PROCESSING means handler was not completed, such as do asynchrous action
  20. * in this case, it must call aworker_post_result to post result
  21. */
  22. typedef AWORKER_RC (*AWORKER_HANDLER)(AWORKER_REQ *req);
  23. typedef void (*AWORKER_CALLBACK)(int result, uint32_t event, void *param);
  24. struct aworker_request
  25. {
  26. osiThread_t *sender; // sender task handle
  27. uint32_t event;
  28. void *param;
  29. AWORKER_HANDLER handler;
  30. AWORKER_CALLBACK callback;
  31. };
  32. bool aworker_start();
  33. bool aworker_timer_callback(osiCallback_t tm_cb, uint32_t delay_ms, void *arg);
  34. bool aworker_task_callback(osiCallback_t tcb, void *arg);
  35. bool aworker_post_req_delay(AWORKER_REQ *req, uint32_t delay_ms, bool *result);
  36. bool aworker_post_handler(AWORKER_HANDLER handler, void *param, uint32_t delay_ms);
  37. bool aworker_post_result(AWORKER_REQ *req, int result);
  38. AWORKER_REQ *aworker_create_request(osiThread_t *sender, AWORKER_HANDLER handler, AWORKER_CALLBACK callback,
  39. uint32_t event, void *param, uint32_t bufflen);
  40. void aworker_dismiss_request(AWORKER_REQ *req);
  41. void aworker_param_putu32(AWORKER_REQ *req, uint32_t val, bool *result);
  42. void aworker_param_putbytes(AWORKER_REQ *req, uint8_t *barray, uint16_t len, bool *result);
  43. void aworker_param_putstr(AWORKER_REQ *req, char *str, bool *result);
  44. uint32_t aworker_param_getu32(AWORKER_REQ *req, uint8_t index, bool *result);
  45. char *aworker_param_getstr(AWORKER_REQ *req, uint8_t index, bool *result);
  46. uint16_t aworker_param_getbytes(AWORKER_REQ *req, uint8_t index, uint8_t *buffer, uint16_t bufflen, bool *result);
  47. void aworker_dump_bytes(uint8_t *bytes, uint16_t len);
  48. #endif
  49. #endif // __ASYNCE_WORKER__