message.h
上传用户:fy98168
上传日期:2015-06-26
资源大小:13771k
文件大小:4k
源码类别:

DVD

开发平台:

C/C++

  1. /*
  2.  * message.h
  3.  *
  4.  * Copyright (C) SGS-THOMSON Microelectronics Ltd. 1997
  5.  *
  6.  * Message passing.
  7.  */
  8. #ifndef __os20_message_h
  9. #define __os20_message_h
  10. #include "semaphor.h" /* Needed for semaphore_t */
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. #ifndef __size_t
  15. #define __size_t 1
  16. typedef unsigned int size_t;
  17. #endif
  18. struct message_queue_class_s;
  19. typedef struct message_hdr_s
  20. {
  21.   struct message_hdr_s* message_hdr_next;
  22. } message_hdr_t;
  23. typedef struct message_half_s
  24. {
  25.    message_hdr_t*       message_half_head;
  26.    message_hdr_t*       message_half_tail;
  27.    semaphore_t          message_half_sem;
  28. } message_half_t;
  29. typedef struct message_queue_s
  30. {
  31.    const struct message_queue_class_s* message_queue_class;
  32.    struct message_queue_s*             message_queue_next;
  33.    message_half_t                      message_queue_free;
  34.    message_half_t                      message_queue_queue;
  35.    void*                               message_queue_memory;
  36. } message_queue_t;
  37. #define MESSAGE_MEMSIZE_QUEUE(maxMessageSize, maxMessages) 
  38.   (((((maxMessageSize) + 3) & ~3) + sizeof(message_hdr_t)) * (maxMessages))
  39. #ifdef __CORE__
  40. #pragma ST_translate(message_send, "message_send%os")
  41. #pragma ST_translate(message_receive, "message_receive%os")
  42. #pragma ST_translate(message_receive_timeout, "message_receive_timeout%os")
  43. #pragma ST_translate(message_claim, "message_claim%os")
  44. #pragma ST_translate(message_claim_timeout, "message_claim_timeout%os")
  45. #pragma ST_translate(message_release, "message_release%os")
  46. #pragma ST_translate(message_init_queue, "message_init_queue%os")
  47. #pragma ST_translate(message_create_queue, "message_create_queue%os")
  48. #pragma ST_translate(message_init_queue_timeout, "message_init_queue_timeout%os")
  49. #pragma ST_translate(message_create_queue_timeout, "message_create_queue_timeout%os")
  50. #pragma ST_translate(message_delete_queue, "message_delete_queue%os")
  51. #else
  52. #pragma IMS_translate(message_send, "message_send%os")
  53. #pragma IMS_translate(message_receive, "message_receive%os")
  54. #pragma IMS_translate(message_receive_timeout, "message_receive_timeout%os")
  55. #pragma IMS_translate(message_claim, "message_claim%os")
  56. #pragma IMS_translate(message_claim_timeout, "message_claim_timeout%os")
  57. #pragma IMS_translate(message_release, "message_release%os")
  58. #pragma IMS_translate(message_init_queue, "message_init_queue%os")
  59. #pragma IMS_translate(message_create_queue, "message_create_queue%os")
  60. #pragma IMS_translate(message_init_queue_timeout, "message_init_queue_timeout%os")
  61. #pragma IMS_translate(message_create_queue_timeout, "message_create_queue_timeout%os")
  62. #pragma IMS_translate(message_delete_queue, "message_delete_queue%os")
  63. #endif
  64. void         message_send (message_queue_t*  MessageQueue, void* Message);
  65. void*        message_receive (message_queue_t* MessageQueue);
  66. void*        message_receive_timeout (message_queue_t* MessageQueue,
  67.                                       const clock_t* time);
  68. void*        message_claim (message_queue_t* MessageQueue);
  69. void*        message_claim_timeout (message_queue_t* MessageQueue,
  70.                                     const clock_t* time);
  71. void         message_release (message_queue_t* MessageQueue, void* Message);
  72. void         message_init_queue(message_queue_t* MessageQueue, void* memory,
  73.                                 size_t ElementSize, unsigned int NoElements);
  74. message_queue_t* message_create_queue (size_t ElementSize,
  75.                                        unsigned int NoElements);
  76. void         message_init_queue_timeout(message_queue_t* MessageQueue,
  77.                     void* memory, size_t ElementSize, unsigned int NoElements);
  78. message_queue_t* message_create_queue_timeout(size_t ElementSize,
  79.                                               unsigned int NoElements);
  80. void         message_delete_queue(message_queue_t* MessageQueue);
  81. #ifdef __cplusplus
  82. }
  83. #endif
  84. #endif /* __os20_message_h */