summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/iap.c67
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
64static char cur_dbrecord[5] = {0}; 64static char cur_dbrecord[5] = {0};
65 65
66static 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
74static uint32_t get_u32(const unsigned char *buf)
75{
76 return (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
77}
78
66static void iap_task(void) 79static 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)