diff options
author | Bertrik Sikken <bertrik@sikken.nl> | 2011-04-30 18:21:18 +0000 |
---|---|---|
committer | Bertrik Sikken <bertrik@sikken.nl> | 2011-04-30 18:21:18 +0000 |
commit | 155584fb7839cffe0c95266e0405134c72130abe (patch) | |
tree | ae05ecf333d75d77c79d943d4a2928516b0fc9dd | |
parent | ed2cfb8c1d2215fc6ac287dbf03bbd2847ec3ef3 (diff) | |
download | rockbox-155584fb7839cffe0c95266e0405134c72130abe.tar.gz rockbox-155584fb7839cffe0c95266e0405134c72130abe.zip |
iap: introduce functions (put_u32 and get_u32) to convert a uint32_t to a byte array and vice versa
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29799 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | apps/iap.c | 67 |
1 files changed, 27 insertions, 40 deletions
diff --git a/apps/iap.c b/apps/iap.c index 11b57bb606..4d8a34fa57 100644 --- a/apps/iap.c +++ b/apps/iap.c | |||
@@ -63,6 +63,19 @@ static int responselen; | |||
63 | 63 | ||
64 | static char cur_dbrecord[5] = {0}; | 64 | static char cur_dbrecord[5] = {0}; |
65 | 65 | ||
66 | static void put_u32(unsigned char *buf, uint32_t data) | ||
67 | { | ||
68 | buf[0] = (data >> 24) & 0xFF; | ||
69 | buf[1] = (data >> 16) & 0xFF; | ||
70 | buf[2] = (data >> 8) & 0xFF; | ||
71 | buf[3] = (data >> 0) & 0xFF; | ||
72 | } | ||
73 | |||
74 | static uint32_t get_u32(const unsigned char *buf) | ||
75 | { | ||
76 | return (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; | ||
77 | } | ||
78 | |||
66 | static void iap_task(void) | 79 | static void iap_task(void) |
67 | { | 80 | { |
68 | static int count = 0; | 81 | static int count = 0; |
@@ -210,10 +223,7 @@ void iap_periodic(void) | |||
210 | iap_updateflag = true; | 223 | iap_updateflag = true; |
211 | } | 224 | } |
212 | 225 | ||
213 | data[4] = time_elapsed >> 24; | 226 | put_u32(&data[4], time_elapsed); |
214 | data[5] = time_elapsed >> 16; | ||
215 | data[6] = time_elapsed >> 8; | ||
216 | data[7] = time_elapsed; | ||
217 | iap_send_pkt(data, sizeof(data)); | 227 | iap_send_pkt(data, sizeof(data)); |
218 | } | 228 | } |
219 | 229 | ||
@@ -312,10 +322,7 @@ static void iap_handlepkt_mode0(void) | |||
312 | { | 322 | { |
313 | cmd_ok_mode0(cmd); | 323 | cmd_ok_mode0(cmd); |
314 | 324 | ||
315 | uint32_t lingoes = (serbuf[3] << 24) | | 325 | uint32_t lingoes = get_u32(&serbuf[3]); |
316 | (serbuf[4] << 16) | | ||
317 | (serbuf[5] << 8) | | ||
318 | (serbuf[6] << 0); | ||
319 | 326 | ||
320 | if (lingoes == 0x35) | 327 | if (lingoes == 0x35) |
321 | /* FM transmitter sends this: */ | 328 | /* FM transmitter sends this: */ |
@@ -638,10 +645,7 @@ static void iap_handlepkt_mode4(void) | |||
638 | num = 1; | 645 | num = 1; |
639 | break; | 646 | break; |
640 | } | 647 | } |
641 | data[3] = num >> 24; | 648 | put_u32(&data[3], num); |
642 | data[4] = num >> 16; | ||
643 | data[5] = num >> 8; | ||
644 | data[6] = num; | ||
645 | iap_send_pkt(data, sizeof(data)); | 649 | iap_send_pkt(data, sizeof(data)); |
646 | break; | 650 | break; |
647 | } | 651 | } |
@@ -654,8 +658,7 @@ static void iap_handlepkt_mode4(void) | |||
654 | {0x04, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, | 658 | {0x04, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00, |
655 | 'R', 'O', 'C', 'K', 'B', 'O', 'X', '\0'}; | 659 | 'R', 'O', 'C', 'K', 'B', 'O', 'X', '\0'}; |
656 | 660 | ||
657 | unsigned long item_offset = (serbuf[5] << 24) | (serbuf[6] << 16) | | 661 | unsigned long item_offset = get_u32(&serbuf[5]); |
658 | (serbuf[7] << 8) | serbuf[8]; | ||
659 | 662 | ||
660 | get_playlist_name(data + 7, item_offset, MAX_PATH); | 663 | get_playlist_name(data + 7, item_offset, MAX_PATH); |
661 | /*Remove file extension*/ | 664 | /*Remove file extension*/ |
@@ -677,14 +680,8 @@ static void iap_handlepkt_mode4(void) | |||
677 | unsigned long time_total = id3->length; | 680 | unsigned long time_total = id3->length; |
678 | unsigned long time_elapsed = id3->elapsed; | 681 | unsigned long time_elapsed = id3->elapsed; |
679 | int status = audio_status(); | 682 | int status = audio_status(); |
680 | data[3] = time_total >> 24; | 683 | put_u32(&data[3], time_total); |
681 | data[4] = time_total >> 16; | 684 | put_u32(&data[7], time_elapsed); |
682 | data[5] = time_total >> 8; | ||
683 | data[6] = time_total; | ||
684 | data[7] = time_elapsed >> 24; | ||
685 | data[8] = time_elapsed >> 16; | ||
686 | data[9] = time_elapsed >> 8; | ||
687 | data[10] = time_elapsed; | ||
688 | if (status == AUDIO_STATUS_PLAY) | 685 | if (status == AUDIO_STATUS_PLAY) |
689 | data[11] = 0x01; /* play */ | 686 | data[11] = 0x01; /* play */ |
690 | else if (status & AUDIO_STATUS_PAUSE) | 687 | else if (status & AUDIO_STATUS_PAUSE) |
@@ -702,10 +699,7 @@ static void iap_handlepkt_mode4(void) | |||
702 | playlist_pos -= playlist_get_first_index(NULL); | 699 | playlist_pos -= playlist_get_first_index(NULL); |
703 | if(playlist_pos < 0) | 700 | if(playlist_pos < 0) |
704 | playlist_pos += playlist_amount(); | 701 | playlist_pos += playlist_amount(); |
705 | data[3] = playlist_pos >> 24; | 702 | put_u32(&data[3], playlist_pos); |
706 | data[4] = playlist_pos >> 16; | ||
707 | data[5] = playlist_pos >> 8; | ||
708 | data[6] = playlist_pos; | ||
709 | iap_send_pkt(data, sizeof(data)); | 703 | iap_send_pkt(data, sizeof(data)); |
710 | break; | 704 | break; |
711 | } | 705 | } |
@@ -721,9 +715,8 @@ static void iap_handlepkt_mode4(void) | |||
721 | struct mp3entry id3; | 715 | struct mp3entry id3; |
722 | int fd; | 716 | int fd; |
723 | size_t len; | 717 | size_t len; |
724 | long tracknum = (signed long)serbuf[4] << 24 | | 718 | long tracknum = get_u32(&serbuf[4]); |
725 | (signed long)serbuf[5] << 16 | | 719 | |
726 | (signed long)serbuf[6] << 8 | serbuf[7]; | ||
727 | data[2] = cmd + 1; | 720 | data[2] = cmd + 1; |
728 | memcpy(&id3, audio_current_track(), sizeof(id3)); | 721 | memcpy(&id3, audio_current_track(), sizeof(id3)); |
729 | tracknum += playlist_get_first_index(NULL); | 722 | tracknum += playlist_get_first_index(NULL); |
@@ -777,10 +770,8 @@ static void iap_handlepkt_mode4(void) | |||
777 | { | 770 | { |
778 | case 0x01: | 771 | case 0x01: |
779 | {/*Playlist*/ | 772 | {/*Playlist*/ |
780 | unsigned long item_offset = (cur_dbrecord[1] << 24)| | 773 | unsigned long item_offset = get_u32(&cur_dbrecord[1]); |
781 | (cur_dbrecord[2] << 16)| | 774 | |
782 | (cur_dbrecord[3] << 8) | | ||
783 | cur_dbrecord[4]; | ||
784 | unsigned char selected_playlist | 775 | unsigned char selected_playlist |
785 | [sizeof(global_settings.playlist_catalog_dir) | 776 | [sizeof(global_settings.playlist_catalog_dir) |
786 | + 1 | 777 | + 1 |
@@ -940,10 +931,7 @@ static void iap_handlepkt_mode4(void) | |||
940 | /* ReturnNumPlayingTracks */ | 931 | /* ReturnNumPlayingTracks */ |
941 | unsigned char data[] = {0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00}; | 932 | unsigned char data[] = {0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00}; |
942 | unsigned long playlist_amt = playlist_amount(); | 933 | unsigned long playlist_amt = playlist_amount(); |
943 | data[3] = playlist_amt >> 24; | 934 | put_u32(&data[3], playlist_amt); |
944 | data[4] = playlist_amt >> 16; | ||
945 | data[5] = playlist_amt >> 8; | ||
946 | data[6] = playlist_amt; | ||
947 | iap_send_pkt(data, sizeof(data)); | 935 | iap_send_pkt(data, sizeof(data)); |
948 | break; | 936 | break; |
949 | } | 937 | } |
@@ -952,9 +940,8 @@ static void iap_handlepkt_mode4(void) | |||
952 | case 0x0037: | 940 | case 0x0037: |
953 | { | 941 | { |
954 | int paused = (is_wps_fading() || (audio_status() & AUDIO_STATUS_PAUSE)); | 942 | int paused = (is_wps_fading() || (audio_status() & AUDIO_STATUS_PAUSE)); |
955 | long tracknum = (signed long)serbuf[4] << 24 | | 943 | long tracknum = get_u32(&serbuf[4]); |
956 | (signed long)serbuf[5] << 16 | | 944 | |
957 | (signed long)serbuf[6] << 8 | serbuf[7]; | ||
958 | audio_pause(); | 945 | audio_pause(); |
959 | audio_skip(tracknum - playlist_next(0)); | 946 | audio_skip(tracknum - playlist_next(0)); |
960 | if (!paused) | 947 | if (!paused) |