cmdchannel.h 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #ifndef CMDCHANNEL_H
  2. #define CMDCHANNEL_H
  3. #include "thread.h"
  4. #include "CCarLifeLibWrapper.h"
  5. using namespace CommonUtilH;
  6. enum ModuleId
  7. {
  8. CARLIFE_PHONE_MODULE_ID=1,
  9. CARLIFE_NAVI_MODULE_ID=2,
  10. CARLIFE_MUSIC_MODULE_ID=3,
  11. CARLIFE_VR_MODULE_ID=4, //
  12. CARLIFE_CONNECT_MODULE_ID=5,
  13. CARLIFE_MIC_MODULE_ID=6,
  14. CARLIFE_MEDIAPCM_MODULE_ID=7,
  15. CARLIFE_EDOG_MODULE_ID=8,
  16. CARLIFE_CRUISE_ID=9,
  17. };
  18. void setCarlifeConfig(int foucs, int wakeup);
  19. class CmdChannel : public Thread
  20. {
  21. public:
  22. virtual ~CmdChannel();
  23. static CmdChannel *instance();
  24. void SetCmdStatusCallback(void (*callback)(int, void*), void *parameter);
  25. void SetCmdPhoneNumberCallback(void (*callback)(string, void*), void *parameter);
  26. void SetCmdMediaInfoCallback(void (*callback)(string,string,string, void*), void *parameter);
  27. bool GetBlueToothUnmanaged() const {return m_bt_unmanaged;}
  28. void SendCarBluetooth(const string& name, const string& address, const string& pin);
  29. protected:
  30. virtual void run(); //线程执行函数
  31. private:
  32. CmdChannel();
  33. //数据接收回调函数
  34. static void recvProtocolVersionMatchStatus(S_PROTOCOL_VERSION_MATCH_SATUS *); //接收手机端发送给车机端的协议版本匹配结果
  35. static void recvMDInfo(S_MD_INFO *); //接收手机端发送给车机端的手机系统信息
  36. static void recvMdAuthenResponse(S_AUTHEN_RESPONSE *); //手机CarLife将接收到的车机随机数使用私有密钥进行加密
  37. static void recvMdAuthenResult(S_MD_AUTHEN_RESULT *); //手机端CarLife将验证结果发送给车机端
  38. static void recvFeatureConfigRequest(); //双方握手认证通过后,手机端会发送该消息来请求车机端的功能定制项
  39. static void recvModuleStatus(S_MODULE_STATUS_LIST_MOBILE *); //接收手机端通知车机端音乐、导航、电话、VR等模块的状态
  40. static void recvVideoEncoderInitDone(S_VIDEO_ENCODER_INIT_DONE *); //接收手机端通知车机端视频编码器初始化完成
  41. static void recvVideoEncoderFrameRateChangeDone(S_VIDEO_ENCODER_FRAME_RATE_CHANGE_DONE *); //接收手机端通知车机端视频编码器帧率调整完成
  42. static void recvCarDataSubscribe(S_VEHICLE_INFO_LIST *); //接收手机端通知车机端需要订阅的车身信息
  43. static void recvCarDataSubscribeStart(S_VEHICLE_INFO_LIST *); //接收手机端通知车机端开始发送订阅信息
  44. static void recvCarDataSubscribeStop(S_VEHICLE_INFO_LIST *); //接收手机端通知车机端停止发送车身订阅信息
  45. static void recvCarLifeDataSubscribeDone(S_SUBSCRIBE_MOBILE_CARLIFE_INFO_LIST *); //接收移动设备针对车机订阅CarLife相关数据的反馈信息
  46. static void recvNaviNextTurnInfo(S_NAVI_NEXT_TURN_INFO *); //接收手机端通知车机端导航在路况转向的信息
  47. static void recvNaviAssistantGuideInfo(S_NAVI_ASSITANT_GUIDE_INFO *); //接收移动设备发送给车机的导航辅助诱导信息
  48. // static void recvMDBTPairInfo(S_BT_PAIR_INFO *); //接收手机端蓝牙匹配信息
  49. static void recvMDBTPairInfo(S_MD_BT_PAIR_INFO *); //接收手机端蓝牙匹配信息
  50. // static void recvMDBTOOBInfro(S_MD_BT_OOB_INFO *); //接收手机端发送给车机端的手机蓝牙信息
  51. static void recvStartBtAutoPairRequest(S_BT_START_PAIR_REQ *); //手机端发送给车机,断开已经存在的HFP连接,并开始蓝牙自动匹配的流程。
  52. //如果是IOS则不需要开始自动匹配流程
  53. static void recvBTIdentifyResultInd(S_BT_INDENTIFY_RESULT_IND *); //手机发送给车机,告诉车机 蓝牙标识的结果,同时当标识状态发生变化时,通知车机
  54. static void recvBtHfpRequest(S_BT_HFP_REQUEST *); //车机发送给移动设备,用来告诉移动设备蓝牙电话的状态信息。其中需要指明该状态是来自于那个蓝牙设备
  55. static void recvBTHfpStatusRequest(S_BT_HFP_STATUS_REQUEST *); //手机发送该消息来获取指定的状态,目前主要用来获取车机MIC的状态
  56. static void recvTelStateChangeIdle(); //接收手机端通知车机端电话空闲
  57. static void recvTelStateChangeIncoming(); //接收手机端通知车机端有电话接入
  58. static void recvTelStateChangeOutGoing(); //接收手机端通知车机端有电话打出
  59. static void recvTelStateChangeInCalling(); //接收手机端通知车机端手机处于通话中
  60. static void recvScreenOn(); //接收手机端通知车机端手机屏幕点亮
  61. static void recvScreenOff(); //接收手机端通知车机端手机屏幕关闭
  62. static void recvScreenUserPresent(); //接收手机端通知车机端手机屏幕解锁
  63. static void recvForeground(); //接收手机端通知车机端手机CarLife处于前台
  64. static void recvBackground(); //接收手机端通知车机端手机CarLife处于后台
  65. static void recvGoToDesktop(); //接收手机端通知车机端手机恢复到主界面
  66. static void recvGotoForgroundResponse(); //接收carlife切换到前台的应答
  67. //车机端发送MSG_CMD_GO_TO_FOREGROUND消息给移动设备端将CarLife切回到前台以后,
  68. //移动设备端如果在5秒内没有切换成功则发送该条消息
  69. static void recvRequestGoToForeground(); //手机端通知车机端将手机端CarLife提升到前台运行
  70. static void recvMicRecordWakeupStart(); //接收手机端通知车机端手机开始VR的唤醒录音
  71. static void recvMicRecordEnd(); //接收手机端通知车机端手机结束VR的录音
  72. static void recvMicRecordRecogStart(); //接收手机端通知车机端手机开始VR的识别后录音
  73. static void recvMediaInfo(S_MEDIA_INFO *); //接收手机端通知车机端当前的媒体播放信息
  74. static void recvMediaProgressBar(S_MEDIA_PROGRESS_BAR *); //接收手机端通知车机端媒体播放进度条信息
  75. static void recvUIActionSound(); //接收手机端通知车机端发出焦点点中通知声
  76. static void recvConnectException(S_CONNECTION_EXCEPTION *); //接收手机端通知车机端连接异常信息
  77. static void cmdMdExit();
  78. private:
  79. static CmdChannel *mInstance;
  80. static void ReadBTInfo(string& addr, string& pin);
  81. void (*m_music_status_callback)(int, void*);
  82. void (*m_cmd_status_callback)(int, void*);
  83. void (*m_cmd_phonenumber_callback)(string ,void*);
  84. void (*m_cmd_mediainfo_callback)(string,string,string, void*);
  85. void *m_parameter;
  86. static bool m_bCall;
  87. static bool m_bBTConnect;
  88. static bool m_bt_unmanaged;
  89. string mAddress;
  90. string mPin;
  91. };
  92. #endif // CMDCHANNEL_H