msgqueue.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #ifndef MSGQUEUE_H
  2. #define MSGQUEUE_H
  3. #include <pthread.h>
  4. #include <stdint.h>
  5. #include <semaphore.h>
  6. //#include <QObject>
  7. //#include "arkcommon.h"
  8. #include "util.h"
  9. #define QUEUE_SIZE 100
  10. #define QUEUE_LOG_DISABLE 1
  11. #define uint32 uint32_t
  12. #define uint8 uint8_t
  13. typedef struct Msg_s
  14. {
  15. uint32 type;
  16. uint8 *pdata;
  17. uint32 len;
  18. } Msg_t;
  19. typedef struct Queue_s
  20. {
  21. int head;
  22. int rear;
  23. sem_t sem;
  24. Msg_t data[QUEUE_SIZE];
  25. }Queue_t;
  26. class MsgQueue
  27. {
  28. public:
  29. MsgQueue();
  30. virtual ~MsgQueue();
  31. static MsgQueue *instance();
  32. /*
  33. signals:
  34. void sendSignal(int type, int status);
  35. void sendDialNumberSignal(int type, QString number);
  36. void sendMediaInfoSignal(int type, QString song, QString artist, QString album);
  37. */
  38. public:
  39. //void sendLinkStatus(const int type, const int status);
  40. //void sendPhoneNumber(const int type, QString& number);
  41. //void sendMediaInfo(const int type, QString& song, QString& artist, QString& album);
  42. int InitMessage(void *paramter);
  43. int SendMessage(int MsgID, char* pMsgData = NULL, int MsgLen = 0);
  44. int HandlerMessage(int MsgID, char *pMsgData, int MsgLen);
  45. void SetCallback(void (*callback)(int, void*, int, void*, void *), void *parameter);
  46. private:
  47. int MsgQueueInit(Queue_t* Q);
  48. int MsgDeQueue(Queue_t* Q, Msg_t* msg);
  49. int MsgEnQueue(Queue_t* Q, Msg_t* msg);
  50. static void* SendMsgFunc(void *parameter);
  51. static void* MsgHandlerFunc(void *parameter);
  52. private:
  53. void (*m_callback)(int,void *,int,void*,void*);
  54. void* m_parameter_player;
  55. void* m_parameter;
  56. Queue_t m_MsgQueue;
  57. Msg_t m_Msg;
  58. sem_t m_sSem;
  59. static MsgQueue *mInstance;
  60. };
  61. #endif // MSGQUEUE_H