AutoLink.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. #ifndef AUTOLINK_H
  2. #define AUTOLINK_H
  3. #include <mutex>
  4. #include "IUserLinkPlayer.h"
  5. #ifdef USE_AUTO
  6. #include "AndroidAuto.h"
  7. #include "IUserAutoCbs.h"
  8. enum AutoAudioStreamType {
  9. AUTO_AUDIO_STREAM_GUIDANCE = 1,
  10. AUTO_AUDIO_STREAM_SYSTEM_AUDIO = 2,
  11. AUTO_AUDIO_STREAM_MEDIA = 3,
  12. AUTO_AUDIO_STREAM_TELEPHONY = 4
  13. };
  14. enum AutoKeyCode {
  15. KEYCODE_UNKNOWN = 0,
  16. KEYCODE_SOFT_LEFT = 1,
  17. KEYCODE_SOFT_RIGHT = 2,
  18. KEYCODE_HOME = 3,
  19. KEYCODE_BACK = 4,
  20. KEYCODE_CALL = 5,
  21. KEYCODE_ENDCALL = 6,
  22. KEYCODE_0 = 7,
  23. KEYCODE_1 = 8,
  24. KEYCODE_2 = 9,
  25. KEYCODE_3 = 10,
  26. KEYCODE_4 = 11,
  27. KEYCODE_5 = 12,
  28. KEYCODE_6 = 13,
  29. KEYCODE_7 = 14,
  30. KEYCODE_8 = 15,
  31. KEYCODE_9 = 16,
  32. KEYCODE_STAR = 17,
  33. KEYCODE_POUND = 18,
  34. KEYCODE_DPAD_UP = 19,
  35. KEYCODE_DPAD_DOWN = 20,
  36. KEYCODE_DPAD_LEFT = 21,
  37. KEYCODE_DPAD_RIGHT = 22,
  38. KEYCODE_DPAD_CENTER = 23,
  39. KEYCODE_VOLUME_UP = 24,
  40. KEYCODE_VOLUME_DOWN = 25,
  41. KEYCODE_POWER = 26,
  42. KEYCODE_CAMERA = 27,
  43. KEYCODE_CLEAR = 28,
  44. KEYCODE_A = 29,
  45. KEYCODE_B = 30,
  46. KEYCODE_C = 31,
  47. KEYCODE_D = 32,
  48. KEYCODE_E = 33,
  49. KEYCODE_F = 34,
  50. KEYCODE_G = 35,
  51. KEYCODE_H = 36,
  52. KEYCODE_I = 37,
  53. KEYCODE_J = 38,
  54. KEYCODE_K = 39,
  55. KEYCODE_L = 40,
  56. KEYCODE_M = 41,
  57. KEYCODE_N = 42,
  58. KEYCODE_O = 43,
  59. KEYCODE_P = 44,
  60. KEYCODE_Q = 45,
  61. KEYCODE_R = 46,
  62. KEYCODE_S = 47,
  63. KEYCODE_T = 48,
  64. KEYCODE_U = 49,
  65. KEYCODE_V = 50,
  66. KEYCODE_W = 51,
  67. KEYCODE_X = 52,
  68. KEYCODE_Y = 53,
  69. KEYCODE_Z = 54,
  70. KEYCODE_COMMA = 55,
  71. KEYCODE_PERIOD = 56,
  72. KEYCODE_ALT_LEFT = 57,
  73. KEYCODE_ALT_RIGHT = 58,
  74. KEYCODE_SHIFT_LEFT = 59,
  75. KEYCODE_SHIFT_RIGHT = 60,
  76. KEYCODE_TAB = 61,
  77. KEYCODE_SPACE = 62,
  78. KEYCODE_SYM = 63,
  79. KEYCODE_EXPLORER = 64,
  80. KEYCODE_ENVELOPE = 65,
  81. KEYCODE_ENTER = 66,
  82. KEYCODE_DEL = 67,
  83. KEYCODE_GRAVE = 68,
  84. KEYCODE_MINUS = 69,
  85. KEYCODE_EQUALS = 70,
  86. KEYCODE_LEFT_BRACKET = 71,
  87. KEYCODE_RIGHT_BRACKET = 72,
  88. KEYCODE_BACKSLASH = 73,
  89. KEYCODE_SEMICOLON = 74,
  90. KEYCODE_APOSTROPHE = 75,
  91. KEYCODE_SLASH = 76,
  92. KEYCODE_AT = 77,
  93. KEYCODE_NUM = 78,
  94. KEYCODE_HEADSETHOOK = 79,
  95. KEYCODE_FOCUS = 80,
  96. KEYCODE_PLUS = 81,
  97. KEYCODE_MENU = 82,
  98. KEYCODE_NOTIFICATION = 83,
  99. KEYCODE_SEARCH = 84,
  100. KEYCODE_MEDIA_PLAY_PAUSE = 85,
  101. KEYCODE_MEDIA_STOP = 86,
  102. KEYCODE_MEDIA_NEXT = 87,
  103. KEYCODE_MEDIA_PREVIOUS = 88,
  104. KEYCODE_MEDIA_REWIND = 89,
  105. KEYCODE_MEDIA_FAST_FORWARD = 90,
  106. KEYCODE_MUTE = 91,
  107. KEYCODE_PAGE_UP = 92,
  108. KEYCODE_PAGE_DOWN = 93,
  109. KEYCODE_PICTSYMBOLS = 94,
  110. KEYCODE_SWITCH_CHARSET = 95,
  111. KEYCODE_BUTTON_A = 96,
  112. KEYCODE_BUTTON_B = 97,
  113. KEYCODE_BUTTON_C = 98,
  114. KEYCODE_BUTTON_X = 99,
  115. KEYCODE_BUTTON_Y = 100,
  116. KEYCODE_BUTTON_Z = 101,
  117. KEYCODE_BUTTON_L1 = 102,
  118. KEYCODE_BUTTON_R1 = 103,
  119. KEYCODE_BUTTON_L2 = 104,
  120. KEYCODE_BUTTON_R2 = 105,
  121. KEYCODE_BUTTON_THUMBL = 106,
  122. KEYCODE_BUTTON_THUMBR = 107,
  123. KEYCODE_BUTTON_START = 108,
  124. KEYCODE_BUTTON_SELECT = 109,
  125. KEYCODE_BUTTON_MODE = 110,
  126. KEYCODE_ESCAPE = 111,
  127. KEYCODE_FORWARD_DEL = 112,
  128. KEYCODE_CTRL_LEFT = 113,
  129. KEYCODE_CTRL_RIGHT = 114,
  130. KEYCODE_CAPS_LOCK = 115,
  131. KEYCODE_SCROLL_LOCK = 116,
  132. KEYCODE_META_LEFT = 117,
  133. KEYCODE_META_RIGHT = 118,
  134. KEYCODE_FUNCTION = 119,
  135. KEYCODE_SYSRQ = 120,
  136. KEYCODE_BREAK = 121,
  137. KEYCODE_MOVE_HOME = 122,
  138. KEYCODE_MOVE_END = 123,
  139. KEYCODE_INSERT = 124,
  140. KEYCODE_FORWARD = 125,
  141. KEYCODE_MEDIA_PLAY = 126,
  142. KEYCODE_MEDIA_PAUSE = 127,
  143. KEYCODE_MEDIA_CLOSE = 128,
  144. KEYCODE_MEDIA_EJECT = 129,
  145. KEYCODE_MEDIA_RECORD = 130,
  146. KEYCODE_F1 = 131,
  147. KEYCODE_F2 = 132,
  148. KEYCODE_F3 = 133,
  149. KEYCODE_F4 = 134,
  150. KEYCODE_F5 = 135,
  151. KEYCODE_F6 = 136,
  152. KEYCODE_F7 = 137,
  153. KEYCODE_F8 = 138,
  154. KEYCODE_F9 = 139,
  155. KEYCODE_F10 = 140,
  156. KEYCODE_F11 = 141,
  157. KEYCODE_F12 = 142,
  158. KEYCODE_NUM_LOCK = 143,
  159. KEYCODE_NUMPAD_0 = 144,
  160. KEYCODE_NUMPAD_1 = 145,
  161. KEYCODE_NUMPAD_2 = 146,
  162. KEYCODE_NUMPAD_3 = 147,
  163. KEYCODE_NUMPAD_4 = 148,
  164. KEYCODE_NUMPAD_5 = 149,
  165. KEYCODE_NUMPAD_6 = 150,
  166. KEYCODE_NUMPAD_7 = 151,
  167. KEYCODE_NUMPAD_8 = 152,
  168. KEYCODE_NUMPAD_9 = 153,
  169. KEYCODE_NUMPAD_DIVIDE = 154,
  170. KEYCODE_NUMPAD_MULTIPLY = 155,
  171. KEYCODE_NUMPAD_SUBTRACT = 156,
  172. KEYCODE_NUMPAD_ADD = 157,
  173. KEYCODE_NUMPAD_DOT = 158,
  174. KEYCODE_NUMPAD_COMMA = 159,
  175. KEYCODE_NUMPAD_ENTER = 160,
  176. KEYCODE_NUMPAD_EQUALS = 161,
  177. KEYCODE_NUMPAD_LEFT_PAREN = 162,
  178. KEYCODE_NUMPAD_RIGHT_PAREN = 163,
  179. KEYCODE_VOLUME_MUTE = 164,
  180. KEYCODE_INFO = 165,
  181. KEYCODE_CHANNEL_UP = 166,
  182. KEYCODE_CHANNEL_DOWN = 167,
  183. KEYCODE_ZOOM_IN = 168,
  184. KEYCODE_ZOOM_OUT = 169,
  185. KEYCODE_TV = 170,
  186. KEYCODE_WINDOW = 171,
  187. KEYCODE_GUIDE = 172,
  188. KEYCODE_DVR = 173,
  189. KEYCODE_BOOKMARK = 174,
  190. KEYCODE_CAPTIONS = 175,
  191. KEYCODE_SETTINGS = 176,
  192. KEYCODE_TV_POWER = 177,
  193. KEYCODE_TV_INPUT = 178,
  194. KEYCODE_STB_POWER = 179,
  195. KEYCODE_STB_INPUT = 180,
  196. KEYCODE_AVR_POWER = 181,
  197. KEYCODE_AVR_INPUT = 182,
  198. KEYCODE_PROG_RED = 183,
  199. KEYCODE_PROG_GREEN = 184,
  200. KEYCODE_PROG_YELLOW = 185,
  201. KEYCODE_PROG_BLUE = 186,
  202. KEYCODE_APP_SWITCH = 187,
  203. KEYCODE_BUTTON_1 = 188,
  204. KEYCODE_BUTTON_2 = 189,
  205. KEYCODE_BUTTON_3 = 190,
  206. KEYCODE_BUTTON_4 = 191,
  207. KEYCODE_BUTTON_5 = 192,
  208. KEYCODE_BUTTON_6 = 193,
  209. KEYCODE_BUTTON_7 = 194,
  210. KEYCODE_BUTTON_8 = 195,
  211. KEYCODE_BUTTON_9 = 196,
  212. KEYCODE_BUTTON_10 = 197,
  213. KEYCODE_BUTTON_11 = 198,
  214. KEYCODE_BUTTON_12 = 199,
  215. KEYCODE_BUTTON_13 = 200,
  216. KEYCODE_BUTTON_14 = 201,
  217. KEYCODE_BUTTON_15 = 202,
  218. KEYCODE_BUTTON_16 = 203,
  219. KEYCODE_LANGUAGE_SWITCH = 204,
  220. KEYCODE_MANNER_MODE = 205,
  221. KEYCODE_3D_MODE = 206,
  222. KEYCODE_CONTACTS = 207,
  223. KEYCODE_CALENDAR = 208,
  224. KEYCODE_MUSIC = 209,
  225. KEYCODE_CALCULATOR = 210,
  226. KEYCODE_ZENKAKU_HANKAKU = 211,
  227. KEYCODE_EISU = 212,
  228. KEYCODE_MUHENKAN = 213,
  229. KEYCODE_HENKAN = 214,
  230. KEYCODE_KATAKANA_HIRAGANA = 215,
  231. KEYCODE_YEN = 216,
  232. KEYCODE_RO = 217,
  233. KEYCODE_KANA = 218,
  234. KEYCODE_ASSIST = 219,
  235. KEYCODE_BRIGHTNESS_DOWN = 220,
  236. KEYCODE_BRIGHTNESS_UP = 221,
  237. KEYCODE_MEDIA_AUDIO_TRACK = 222,
  238. KEYCODE_SLEEP = 223,
  239. KEYCODE_WAKEUP = 224,
  240. KEYCODE_PAIRING = 225,
  241. KEYCODE_MEDIA_TOP_MENU = 226,
  242. KEYCODE_11 = 227,
  243. KEYCODE_12 = 228,
  244. KEYCODE_LAST_CHANNEL = 229,
  245. KEYCODE_TV_DATA_SERVICE = 230,
  246. KEYCODE_VOICE_ASSIST = 231,
  247. KEYCODE_TV_RADIO_SERVICE = 232,
  248. KEYCODE_TV_TELETEXT = 233,
  249. KEYCODE_TV_NUMBER_ENTRY = 234,
  250. KEYCODE_TV_TERRESTRIAL_ANALOG = 235,
  251. KEYCODE_TV_TERRESTRIAL_DIGITAL = 236,
  252. KEYCODE_TV_SATELLITE = 237,
  253. KEYCODE_TV_SATELLITE_BS = 238,
  254. KEYCODE_TV_SATELLITE_CS = 239,
  255. KEYCODE_TV_SATELLITE_SERVICE = 240,
  256. KEYCODE_TV_NETWORK = 241,
  257. KEYCODE_TV_ANTENNA_CABLE = 242,
  258. KEYCODE_TV_INPUT_HDMI_1 = 243,
  259. KEYCODE_TV_INPUT_HDMI_2 = 244,
  260. KEYCODE_TV_INPUT_HDMI_3 = 245,
  261. KEYCODE_TV_INPUT_HDMI_4 = 246,
  262. KEYCODE_TV_INPUT_COMPOSITE_1 = 247,
  263. KEYCODE_TV_INPUT_COMPOSITE_2 = 248,
  264. KEYCODE_TV_INPUT_COMPONENT_1 = 249,
  265. KEYCODE_TV_INPUT_COMPONENT_2 = 250,
  266. KEYCODE_TV_INPUT_VGA_1 = 251,
  267. KEYCODE_TV_AUDIO_DESCRIPTION = 252,
  268. KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP = 253,
  269. KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN = 254,
  270. KEYCODE_TV_ZOOM_MODE = 255,
  271. KEYCODE_TV_CONTENTS_MENU = 256,
  272. KEYCODE_TV_MEDIA_CONTEXT_MENU = 257,
  273. KEYCODE_TV_TIMER_PROGRAMMING = 258,
  274. KEYCODE_HELP = 259,
  275. KEYCODE_NAVIGATE_PREVIOUS = 260,
  276. KEYCODE_NAVIGATE_NEXT = 261,
  277. KEYCODE_NAVIGATE_IN = 262,
  278. KEYCODE_NAVIGATE_OUT = 263,
  279. KEYCODE_DPAD_UP_LEFT = 268,
  280. KEYCODE_DPAD_DOWN_LEFT = 269,
  281. KEYCODE_DPAD_UP_RIGHT = 270,
  282. KEYCODE_DPAD_DOWN_RIGHT = 271,
  283. KEYCODE_SENTINEL = 65535,
  284. KEYCODE_ROTARY_CONTROLLER = 65536,
  285. KEYCODE_MEDIA = 65537,
  286. KEYCODE_NAVIGATION = 65538,
  287. KEYCODE_RADIO = 65539,
  288. KEYCODE_AUTO_TEL = 65540,
  289. KEYCODE_PRIMARY_BUTTON = 65541,
  290. KEYCODE_SECONDARY_BUTTON = 65542,
  291. KEYCODE_TERTIARY_BUTTON = 65543
  292. };
  293. class AutoLink;
  294. class IUserAutoImpl : public IUserAutoCbs
  295. {
  296. public:
  297. IUserAutoImpl(AutoLink* handle);
  298. ~IUserAutoImpl();
  299. void videoStart(int width, int height, int offsetX, int offsetY);
  300. void videoStop();
  301. void videoPlay(char *buf, int len);
  302. void audioStart(int type, int rate, int channels, int bits);
  303. void audioStop(int type);
  304. void audioPlay(int type, char *buf, int len);
  305. void recordStart(int rate, int channels, int bits);
  306. void recordStop();
  307. void recordProc(char *buf, int len);
  308. void notifyStatus(int state);
  309. void notifyPhoneBtInfo(const char *phoneBTAddr, int pairMethod);
  310. void getLocalBtAddr(char* mac);
  311. AudioType ChangeAudioType(AutoAudioStreamType type);
  312. private:
  313. AutoLink* mHandle;
  314. bool mRecStart;
  315. bool mRecBufClearFlag;
  316. int mStartPos;
  317. int mUsedPos;
  318. };
  319. #endif
  320. class AutoLink : public IUserLinkPlayer
  321. {
  322. public:
  323. AutoLink();
  324. virtual ~AutoLink();
  325. #ifdef USE_AUTO
  326. protected:
  327. virtual bool init(LinkMode linkMode);
  328. virtual bool release();
  329. virtual bool start();
  330. virtual bool stop();
  331. virtual bool start_mirror();
  332. virtual bool stop_mirror();
  333. virtual bool set_background();
  334. virtual bool set_foreground();
  335. virtual bool get_audio_focus();
  336. virtual bool release_audio_focus();
  337. virtual void set_inserted(bool inserted, PhoneType phoneType);
  338. virtual void send_screen_size(int width, int height);
  339. virtual void record_audio_callback(unsigned char *data, int len);
  340. virtual void send_car_bluetooth(const string& name, const string& address, const string& pin);
  341. virtual void send_phone_bluetooth(const string& address);
  342. virtual void send_car_wifi(WifiInfo& info);
  343. virtual void send_touch(int x, int y, TouchCode touchCode);
  344. virtual void send_multi_touch(int x1, int y1, TouchCode touchCode1, int x2, int y2, TouchCode touchCode2){}
  345. virtual bool send_key(KeyCode keyCode);
  346. virtual bool send_wheel(WheelCode wheel, bool foucs);
  347. virtual bool send_night_mode(bool night);
  348. virtual bool send_right_hand_driver(bool right);
  349. virtual bool open_page(AppPage appPage);
  350. virtual void request_status(RequestAppStatus requestAppStatus, void *reserved = nullptr);
  351. virtual void send_license(const string& license){}
  352. virtual void send_input_text(const string& text) {}
  353. virtual void send_input_selection(const int start, const int stop){}
  354. virtual void send_input_action(const int acionId, const int keyCode){}
  355. virtual void send_bluetooth_cmd(const string& cmd ){}
  356. virtual void send_broadcast(bool enable){}
  357. virtual void send_delay_record(int millisecond){}
  358. virtual void send_wifi_state_changed(WifiStateAction action, WifiState state, const string& phoneIp, const string& carIp){}
  359. friend class IUserAutoImpl;
  360. protected:
  361. PhoneType getPhoneType() {return mPhoneType;}
  362. string getRecData() {return mRecData;}
  363. void setRecData(string str);
  364. string getCarBtAddress() const {return mbtaddress;}
  365. private:
  366. bool mDefaultWifi;
  367. LinkMode mLinkMode;
  368. AndroidAuto* mHandle;
  369. IUserAutoImpl* mAutoCbs;
  370. PhoneType mPhoneType;
  371. string mRecData;
  372. std::mutex mMutex;
  373. string mbtaddress;
  374. ConnectedStatus mConnectStatus;
  375. #endif
  376. };
  377. #endif // AUTOLINK_H