player.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673
  1. #include <rtgui/rtgui.h>
  2. #include <rtgui/image.h>
  3. #include <rtgui/rtgui_system.h>
  4. #include <rtgui/widgets/view.h>
  5. #include <rtgui/widgets/workbench.h>
  6. #include <string.h>
  7. #include "listview.h"
  8. #include "filelist.h"
  9. static const char * next_xpm[] = {
  10. "24 24 149 2",
  11. " c None",
  12. ". c #373737",
  13. "+ c #383838",
  14. "@ c #3A3A3A",
  15. "# c #393939",
  16. "$ c #434343",
  17. "% c #676767",
  18. "& c #9D9D9D",
  19. "* c #C1C1C1",
  20. "= c #D3D3D3",
  21. "- c #404040",
  22. "; c #707070",
  23. "> c #EDEDED",
  24. ", c #F5F5F5",
  25. "' c #4A4A4A",
  26. ") c #909090",
  27. "! c #D9D9D9",
  28. "~ c #4B4B4B",
  29. "{ c #939393",
  30. "] c #CECECE",
  31. "^ c #E4E4E4",
  32. "/ c #E5E5E5",
  33. "( c #444444",
  34. "_ c #8B8B8B",
  35. ": c #ABABAB",
  36. "< c #DCDCDC",
  37. "[ c #D4D4D4",
  38. "} c #D2D2D2",
  39. "| c #DDDDDD",
  40. "1 c #DEDEDE",
  41. "2 c #DFDFDF",
  42. "3 c #414141",
  43. "4 c #B8B8B8",
  44. "5 c #BBBBBB",
  45. "6 c #ADADAD",
  46. "7 c #B7B7B7",
  47. "8 c #CFCFCF",
  48. "9 c #D8D8D8",
  49. "0 c #D6D6D6",
  50. "a c #B2B2B2",
  51. "b c #AEAEAE",
  52. "c c #B6B6B6",
  53. "d c #4C4C4C",
  54. "e c #989898",
  55. "f c #9E9E9E",
  56. "g c #CDCDCD",
  57. "h c #C5C5C5",
  58. "i c #C7C7C7",
  59. "j c #A1A1A1",
  60. "k c #B3B3B3",
  61. "l c #9F9F9F",
  62. "m c #A2A2A2",
  63. "n c #CACACA",
  64. "o c #696969",
  65. "p c #A0A0A0",
  66. "q c #B1B1B1",
  67. "r c #F1F1F1",
  68. "s c #E3E3E3",
  69. "t c #CCCCCC",
  70. "u c #C6C6C6",
  71. "v c #D1D1D1",
  72. "w c #C2C2C2",
  73. "x c #464646",
  74. "y c #848484",
  75. "z c #A4A4A4",
  76. "A c #A9A9A9",
  77. "B c #BFBFBF",
  78. "C c #959595",
  79. "D c #EFEFEF",
  80. "E c #EEEEEE",
  81. "F c #929292",
  82. "G c #808080",
  83. "H c #CBCBCB",
  84. "I c #858585",
  85. "J c #B9B9B9",
  86. "K c #A5A5A5",
  87. "L c #494949",
  88. "M c #A7A7A7",
  89. "N c #B0B0B0",
  90. "O c #888888",
  91. "P c #EAEAEA",
  92. "Q c #777777",
  93. "R c #6C6C6C",
  94. "S c #C4C4C4",
  95. "T c #757575",
  96. "U c #A8A8A8",
  97. "V c #A3A3A3",
  98. "W c #949494",
  99. "X c #9C9C9C",
  100. "Y c #EBEBEB",
  101. "Z c #575757",
  102. "` c #4D4D4D",
  103. " . c #ACACAC",
  104. ".. c #6B6B6B",
  105. "+. c #9A9A9A",
  106. "@. c #E9E9E9",
  107. "#. c #D7D7D7",
  108. "$. c #BDBDBD",
  109. "%. c #515151",
  110. "&. c #E8E8E8",
  111. "*. c #E2E2E2",
  112. "=. c #9B9B9B",
  113. "-. c #4E4E4E",
  114. ";. c #B4B4B4",
  115. ">. c #525252",
  116. ",. c #BEBEBE",
  117. "'. c #8C8C8C",
  118. "). c #AAAAAA",
  119. "!. c #AFAFAF",
  120. "~. c #E7E7E7",
  121. "{. c #5D5D5D",
  122. "]. c #7E7E7E",
  123. "^. c #616161",
  124. "/. c #C8C8C8",
  125. "(. c #747474",
  126. "_. c #B5B5B5",
  127. ":. c #6D6D6D",
  128. "<. c #4F4F4F",
  129. "[. c #5A5A5A",
  130. "}. c #A6A6A6",
  131. "|. c #919191",
  132. "1. c #8D8D8D",
  133. "2. c #DBDBDB",
  134. "3. c #7F7F7F",
  135. "4. c #E0E0E0",
  136. "5. c #C0C0C0",
  137. "6. c #828282",
  138. "7. c #595959",
  139. "8. c #C9C9C9",
  140. "9. c #E1E1E1",
  141. "0. c #E6E6E6",
  142. "a. c #D5D5D5",
  143. "b. c #626262",
  144. "c. c #ECECEC",
  145. "d. c #636363",
  146. "e. c #646464",
  147. "f. c #F0F0F0",
  148. "g. c #F3F3F3",
  149. "h. c #F4F4F4",
  150. "i. c #F6F6F6",
  151. "j. c #F7F7F7",
  152. "k. c #5E5E5E",
  153. "l. c #898989",
  154. "m. c #F9F9F9",
  155. "n. c #F8F8F8",
  156. "o. c #8A8A8A",
  157. "p. c #656565",
  158. "q. c #5C5C5C",
  159. "r. c #5F5F5F",
  160. " . + @ @ + . ",
  161. " # $ % & * = = * & % $ # ",
  162. " - ; * > , , , , , , > * ; - ",
  163. " ' ) ! > > > > > > > > > > ! ) ' ",
  164. " ~ { ] ^ ^ / / / / / / / / / / ] { ~ ",
  165. " ( _ : < [ } | 1 2 2 2 2 1 | < < < : _ ( ",
  166. " 3 ; & 4 = 5 6 7 8 9 ! ! ! 0 a b c = 4 & ; 3 ",
  167. " d e f 4 g b h i j k ] [ [ g l } m n 4 f e d ",
  168. " o & p q i j * r s b { k t u ) v { w q j f o ",
  169. "x y l z A B C 4 D D E v F _ : G H I J A K j y x ",
  170. "L { m M : N O N > > > > P 4 Q R S T U : U V W L ",
  171. "~ X K A b 6 ; K Y Y Y Y Y Y 2 k S Z K b : M & ~ ",
  172. "` f M .N N ..+.@.@.@.@.@.@.#.f $.%.M a k q V ` ",
  173. "` e U b a a R +.&.&.&.&.*.=.-.( ;.>.b ,.,.$.f ` ",
  174. "-.'.).!.;.;.R +.&.&.~.7 {.Z ].L ;.^.B /./.i ) -.",
  175. " (.).N _.;.:.+.&.] T <.G ).A %.h _ n } } i (. ",
  176. " [.}.q _.;.:.|.) ` :.K B t /.1.= l [ 2.2.c [. ",
  177. " >.G _.B B 3.[.o =.,.= 4./ 2.K 5.k | s #.6.>. ",
  178. " 7.l S H 7 q 8.#.9.0.@.@./ g H a.&.0.M 7. ",
  179. " b. .8 a.9 1 ^ &.Y c.E > c.c.E > 7 d. ",
  180. " e.}.= s ~.Y > f.r g.h.i.j.@. .e. ",
  181. " k.l.5.1 E g.i.j.m.n.Y /.o.k. ",
  182. " [.p.6.m 5 H H ,.z 6.p.[. ",
  183. " q.k.r.r.k.q. "};
  184. static const char * prev_xpm[] = {
  185. "24 24 153 2",
  186. " c None",
  187. ". c #373737",
  188. "+ c #383838",
  189. "@ c #3A3A3A",
  190. "# c #393939",
  191. "$ c #434343",
  192. "% c #676767",
  193. "& c #9D9D9D",
  194. "* c #C1C1C1",
  195. "= c #D3D3D3",
  196. "- c #404040",
  197. "; c #707070",
  198. "> c #EDEDED",
  199. ", c #F5F5F5",
  200. "' c #4A4A4A",
  201. ") c #909090",
  202. "! c #D9D9D9",
  203. "~ c #4B4B4B",
  204. "{ c #939393",
  205. "] c #CECECE",
  206. "^ c #E5E5E5",
  207. "/ c #E4E4E4",
  208. "( c #444444",
  209. "_ c #8B8B8B",
  210. ": c #ABABAB",
  211. "< c #DCDCDC",
  212. "[ c #DDDDDD",
  213. "} c #DEDEDE",
  214. "| c #DFDFDF",
  215. "1 c #D5D5D5",
  216. "2 c #D2D2D2",
  217. "3 c #DADADA",
  218. "4 c #414141",
  219. "5 c #B8B8B8",
  220. "6 c #D4D4D4",
  221. "7 c #BBBBBB",
  222. "8 c #AEAEAE",
  223. "9 c #AFAFAF",
  224. "0 c #D0D0D0",
  225. "a c #D8D8D8",
  226. "b c #ADADAD",
  227. "c c #B5B5B5",
  228. "d c #B7B7B7",
  229. "e c #4C4C4C",
  230. "f c #989898",
  231. "g c #9E9E9E",
  232. "h c #AAAAAA",
  233. "i c #CCCCCC",
  234. "j c #A3A3A3",
  235. "k c #D1D1D1",
  236. "l c #A1A1A1",
  237. "m c #CDCDCD",
  238. "n c #A5A5A5",
  239. "o c #C5C5C5",
  240. "p c #696969",
  241. "q c #A0A0A0",
  242. "r c #B1B1B1",
  243. "s c #C8C8C8",
  244. "t c #C9C9C9",
  245. "u c #949494",
  246. "v c #CACACA",
  247. "w c #B9B9B9",
  248. "x c #959595",
  249. "y c #A7A7A7",
  250. "z c #F1F1F1",
  251. "A c #969696",
  252. "B c #BCBCBC",
  253. "C c #464646",
  254. "D c #848484",
  255. "E c #9F9F9F",
  256. "F c #A4A4A4",
  257. "G c #A9A9A9",
  258. "H c #C2C2C2",
  259. "I c #868686",
  260. "J c #8E8E8E",
  261. "K c #8C8C8C",
  262. "L c #EFEFEF",
  263. "M c #C6C6C6",
  264. "N c #888888",
  265. "O c #B2B2B2",
  266. "P c #494949",
  267. "Q c #A2A2A2",
  268. "R c #828282",
  269. "S c #777777",
  270. "T c #737373",
  271. "U c #E7E7E7",
  272. "V c #C0C0C0",
  273. "W c #797979",
  274. "X c #A8A8A8",
  275. "Y c #9C9C9C",
  276. "Z c #B0B0B0",
  277. "` c #686868",
  278. " . c #B6B6B6",
  279. ".. c #EBEBEB",
  280. "+. c #5D5D5D",
  281. "@. c #9A9A9A",
  282. "#. c #4D4D4D",
  283. "$. c #ACACAC",
  284. "%. c #B3B3B3",
  285. "&. c #636363",
  286. "*. c #CFCFCF",
  287. "=. c #E9E9E9",
  288. "-. c #575757",
  289. ";. c #515151",
  290. ">. c #E8E8E8",
  291. ",. c #BEBEBE",
  292. "'. c #BDBDBD",
  293. "). c #4E4E4E",
  294. "!. c #B4B4B4",
  295. "~. c #646464",
  296. "{. c #525252",
  297. "]. c #5F5F5F",
  298. "^. c #565656",
  299. "/. c #666666",
  300. "(. c #C7C7C7",
  301. "_. c #747474",
  302. ":. c #929292",
  303. "<. c #555555",
  304. "[. c #6B6B6B",
  305. "}. c #C3C3C3",
  306. "|. c #5A5A5A",
  307. "1. c #A6A6A6",
  308. "2. c #C4C4C4",
  309. "3. c #BABABA",
  310. "4. c #838383",
  311. "5. c #DBDBDB",
  312. "6. c #808080",
  313. "7. c #BFBFBF",
  314. "8. c #858585",
  315. "9. c #5E5E5E",
  316. "0. c #E0E0E0",
  317. "a. c #E2E2E2",
  318. "b. c #D7D7D7",
  319. "c. c #595959",
  320. "d. c #E3E3E3",
  321. "e. c #E6E6E6",
  322. "f. c #626262",
  323. "g. c #D6D6D6",
  324. "h. c #ECECEC",
  325. "i. c #EEEEEE",
  326. "j. c #EAEAEA",
  327. "k. c #F0F0F0",
  328. "l. c #F3F3F3",
  329. "m. c #F4F4F4",
  330. "n. c #F6F6F6",
  331. "o. c #F7F7F7",
  332. "p. c #898989",
  333. "q. c #F9F9F9",
  334. "r. c #F8F8F8",
  335. "s. c #8A8A8A",
  336. "t. c #656565",
  337. "u. c #CBCBCB",
  338. "v. c #5C5C5C",
  339. " . + @ @ + . ",
  340. " # $ % & * = = * & % $ # ",
  341. " - ; * > , , , , , , > * ; - ",
  342. " ' ) ! > > > > > > > > > > ! ) ' ",
  343. " ~ { ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ / / ] { ~ ",
  344. " ( _ : < < < [ } } | | | } } 1 2 3 : _ ( ",
  345. " 4 ; & 5 6 7 8 9 0 a ! ! ! = 7 b c 0 d & ; 4 ",
  346. " e f g 5 ] h i j * k 6 k 5 l * m n o d g f e ",
  347. " p & q r s & t u c v w x y } z m A B 9 l g p ",
  348. "C D E F G * ) H I q J K v > L L M N O y n l D C ",
  349. "P { Q y : O R 7 S T 9 U > > > > V W E X X j u P ",
  350. "~ Y n G 8 Z ` . .3 ............ .+.@.: : y & ~ ",
  351. "#.g y $.r %.&.b j *.=.=.=.=.=.=.8 -.& Z %.r j #.",
  352. "#.f X 8 %.c &.X ;.' ) } >.>.>.>.8 -.j B ,.'.g #.",
  353. ").K h 9 !.d ~.X {.W ].^.$.^ >.>.8 /. .(.s (.) ).",
  354. " _.h Z c 5 ~.X {.:.O :.<.[.o =.H J }.0 2 (._. ",
  355. " |.1.r c 5 ~.X {.f 2.i 3.4.T !.s Q ] ! 5. .|. ",
  356. " {.6.c 7.H S 8.9.n *.} 0.[ *.O X .! a.b.R {. ",
  357. " c.E 2.m .j G m 0.U =.=.U d.b.b.e.e.y c. ",
  358. " f.$.0 g.g.a | U ..h.i.i.L i.L h.d &. ",
  359. " ~.1.= d.U j.> k.z l.m.n.o.=.$.~. ",
  360. " 9.p.V } i.l.n.o.q.r...s s.9. ",
  361. " |.t.R Q 7 u.u.,.F R t.|. ",
  362. " v.9.].].9.v. "};
  363. static rtgui_image_t *background = RT_NULL;
  364. static rtgui_image_t *next = RT_NULL, *prev = RT_NULL;
  365. static struct rtgui_view* function_view;
  366. static struct rtgui_view* home_view;
  367. static struct rtgui_workbench* workbench;
  368. void player_play_list(const char** list);
  369. void player_play_file(const char * fn);
  370. void player_next(void);
  371. void player_prev(void);
  372. void function_filelist(void* parameter)
  373. {
  374. rtgui_rect_t rect;
  375. filelist_view_t *view;
  376. rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect);
  377. view = filelist_view_create(workbench, "/", "*.*", &rect);
  378. if (view != RT_NULL)
  379. {
  380. if (rtgui_view_show(RTGUI_VIEW(view), RT_TRUE) == RTGUI_MODAL_OK)
  381. {
  382. char fn[64];
  383. /* get open file */
  384. rt_kprintf("dir %s\n", view->current_directory);
  385. rt_kprintf("item %s\n", view->items[view->current_item].name);
  386. rt_snprintf(fn, 64, "%s/%s", view->current_directory,
  387. view->items[view->current_item].name);
  388. rtgui_view_show(home_view, RT_FALSE);
  389. player_play_file(fn);
  390. }
  391. /* destroy view */
  392. filelist_view_destroy(view);
  393. }
  394. return;
  395. }
  396. void function_device(void* parameter)
  397. {
  398. rtgui_view_t *view;
  399. extern rtgui_view_t* device_view_create(rtgui_workbench_t* workbench);
  400. view = device_view_create(workbench);
  401. if (view != RT_NULL)
  402. {
  403. rtgui_view_show(view, RT_FALSE);
  404. }
  405. return;
  406. }
  407. void function_player(void* parameter)
  408. {
  409. rtgui_view_show(home_view, RT_FALSE);
  410. return;
  411. }
  412. void function_action(void* parameter)
  413. {
  414. rt_kprintf("item action!\n");
  415. return;
  416. }
  417. struct list_item function_list[] =
  418. {
  419. {"选择电台", RT_NULL, function_action, RT_NULL},
  420. {"更新电台", RT_NULL, function_action, RT_NULL},
  421. {"播放文件", RT_NULL, function_filelist, RT_NULL},
  422. {"设备信息", RT_NULL, function_device, RT_NULL},
  423. {"返回播放器", RT_NULL, function_player, RT_NULL},
  424. };
  425. static rt_bool_t home_view_event_handler(struct rtgui_widget* widget, struct rtgui_event* event)
  426. {
  427. if (event->type == RTGUI_EVENT_PAINT)
  428. {
  429. struct rtgui_dc* dc;
  430. struct rtgui_rect rect;
  431. dc = rtgui_dc_begin_drawing(widget);
  432. if (dc == RT_NULL) return RT_FALSE;
  433. rtgui_widget_get_rect(widget, &rect);
  434. /* draw background */
  435. background = rtgui_image_create_from_file("hdc",
  436. "/resource/bg.hdc", RT_FALSE);
  437. if (background != RT_NULL)
  438. {
  439. rtgui_image_blit(background, dc, &rect);
  440. rtgui_image_destroy(background);
  441. background = RT_NULL;
  442. }
  443. else
  444. {
  445. rtgui_dc_fill_rect(dc, &rect);
  446. }
  447. /* draw playing information */
  448. rect.x1 = 10; rect.y1 = 260;
  449. rect.x2 = 25; rect.y2 = 285;
  450. if (prev != RT_NULL) rtgui_image_blit(prev, dc, &rect);
  451. if (next != RT_NULL)
  452. {
  453. rect.x2 = 230; rect.x1 = rect.x2 - 25;
  454. rtgui_image_blit(next, dc, &rect);
  455. }
  456. rect.x1 = 35; rect.y1 = 260;
  457. rect.x2 = 205; rect.y2 = 285;
  458. rtgui_dc_fill_rect(dc, &rect);
  459. rtgui_dc_end_drawing(dc);
  460. return RT_FALSE;
  461. }
  462. else if (event->type == RTGUI_EVENT_KBD)
  463. {
  464. struct rtgui_event_kbd* ekbd = (struct rtgui_event_kbd*)event;
  465. if (ekbd->type == RTGUI_KEYDOWN)
  466. {
  467. switch (ekbd->key)
  468. {
  469. case RTGUIK_RIGHT:
  470. case RTGUIK_LEFT:
  471. break;
  472. case RTGUIK_DOWN:
  473. rtgui_view_show(function_view, RT_FALSE);
  474. break;
  475. }
  476. }
  477. return RT_FALSE;
  478. }
  479. return rtgui_view_event_handler(widget, event);
  480. }
  481. rt_bool_t today_workbench_event_handler(rtgui_widget_t *widget, rtgui_event_t *event)
  482. {
  483. if (event->type == RTGUI_EVENT_KBD)
  484. {
  485. struct rtgui_event_kbd* ekbd = (struct rtgui_event_kbd*)event;
  486. if ((ekbd->type == RTGUI_KEYUP) && ekbd->key == RTGUIK_HOME)
  487. {
  488. /* active home view */
  489. if (workbench->current_view != home_view)
  490. {
  491. rtgui_view_show(home_view, RT_FALSE);
  492. return RT_FALSE;
  493. }
  494. }
  495. }
  496. return rtgui_workbench_event_handler(widget, event);
  497. }
  498. static void player_entry(void* parameter)
  499. {
  500. rt_mq_t mq;
  501. rtgui_rect_t rect;
  502. mq = rt_mq_create("qPlayer", 256, 4, RT_IPC_FLAG_FIFO);
  503. rtgui_thread_register(rt_thread_self(), mq);
  504. next = rtgui_image_create_from_mem("xpm", (rt_uint8_t*)next_xpm,
  505. sizeof(next_xpm));
  506. prev = rtgui_image_create_from_mem("xpm", (rt_uint8_t*)prev_xpm,
  507. sizeof(prev_xpm));
  508. workbench = rtgui_workbench_create("main", "workbench");
  509. if (workbench == RT_NULL) return;
  510. rtgui_widget_set_event_handler(RTGUI_WIDGET(workbench), today_workbench_event_handler);
  511. /* add home view */
  512. home_view = rtgui_view_create("Home");
  513. rtgui_widget_set_event_handler(RTGUI_WIDGET(home_view), home_view_event_handler);
  514. rtgui_workbench_add_view(workbench, home_view);
  515. /* this view can be focused */
  516. RTGUI_WIDGET(home_view)->flag |= RTGUI_WIDGET_FLAG_FOCUSABLE;
  517. /* set widget focus */
  518. rtgui_widget_focus(RTGUI_WIDGET(home_view));
  519. rtgui_view_show(home_view, RT_FALSE);
  520. /* add function view */
  521. rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect);
  522. function_view = (struct rtgui_view*)list_view_create(function_list,
  523. sizeof(function_list)/sizeof(struct list_item),
  524. &rect);
  525. rtgui_workbench_add_view(workbench, function_view);
  526. rtgui_workbench_event_loop(workbench);
  527. rtgui_thread_deregister(rt_thread_self());
  528. rt_mq_delete(mq);
  529. }
  530. enum PLAYER_MODE
  531. {
  532. PLAYER_SINGLE,
  533. PLAYER_FILE,
  534. PLAYER_RADIO,
  535. };
  536. enum PLAYER_REQUEST_TYPE
  537. {
  538. PLAYER_REQUEST_PLAY_SINGLE_FILE,
  539. PLAYER_REQUEST_PLAY_LIST,
  540. PLAYER_REQUEST_STOP,
  541. PLAYER_REQUEST_NEXT,
  542. PLAYER_REQUEST_PREV,
  543. };
  544. struct player_request
  545. {
  546. enum PLAYER_REQUEST_TYPE type;
  547. char fn[64];
  548. };
  549. static rt_mq_t player_thread_mq;
  550. void player_play_list(const char** list)
  551. {
  552. }
  553. void player_play_file(const char* fn)
  554. {
  555. struct player_request request;
  556. request.type = PLAYER_REQUEST_PLAY_SINGLE_FILE;
  557. strncpy(request.fn, fn, sizeof(request.fn));
  558. /* send to message queue */
  559. rt_mq_send(player_thread_mq, (void*)&request, sizeof(struct player_request));
  560. }
  561. void player_stop()
  562. {
  563. }
  564. void player_next()
  565. {
  566. }
  567. void player_prev()
  568. {
  569. }
  570. void player_thread(void* parameter)
  571. {
  572. rt_err_t result;
  573. struct player_request request;
  574. while(1)
  575. {
  576. /* get request from message queue */
  577. result = rt_mq_recv(player_thread_mq, (void*)&request,
  578. sizeof(struct player_request), RT_WAITING_FOREVER);
  579. if (result == RT_EOK)
  580. {
  581. switch (request.type)
  582. {
  583. case PLAYER_REQUEST_PLAY_SINGLE_FILE:
  584. if ((strstr(request.fn, ".mp3") != RT_NULL) ||
  585. (strstr(request.fn, ".MP3") != RT_NULL))
  586. {
  587. mp3(request.fn);
  588. }
  589. else if ((strstr(request.fn, ".wav") != RT_NULL) ||
  590. (strstr(request.fn, ".WAV") != RT_NULL))
  591. {
  592. wav(request.fn);
  593. }
  594. break;
  595. }
  596. }
  597. }
  598. }
  599. void player_init()
  600. {
  601. rt_thread_t tid;
  602. tid = rt_thread_create("player",
  603. player_entry, RT_NULL,
  604. 2048, RTGUI_APP_THREAD_PRIORITY, RTGUI_APP_THREAD_TIMESLICE);
  605. if (tid != RT_NULL) rt_thread_startup(tid);
  606. /* create player thread */
  607. player_thread_mq = rt_mq_create("player", sizeof(struct player_request),
  608. 8, RT_IPC_FLAG_FIFO);
  609. RT_ASSERT(player_thread_mq != RT_NULL);
  610. tid = rt_thread_create("pthread", player_thread, RT_NULL,
  611. 2048, RTGUI_APP_THREAD_PRIORITY, RTGUI_APP_THREAD_TIMESLICE);
  612. if (tid != RT_NULL) rt_thread_startup(tid);
  613. }