forked from len0rd/rockbox
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
This commit is contained in:
parent
ed2cfb8c1d
commit
155584fb78
1 changed files with 27 additions and 40 deletions
67
apps/iap.c
67
apps/iap.c
|
|
@ -63,6 +63,19 @@ static int responselen;
|
||||||
|
|
||||||
static char cur_dbrecord[5] = {0};
|
static char cur_dbrecord[5] = {0};
|
||||||
|
|
||||||
|
static void put_u32(unsigned char *buf, uint32_t data)
|
||||||
|
{
|
||||||
|
buf[0] = (data >> 24) & 0xFF;
|
||||||
|
buf[1] = (data >> 16) & 0xFF;
|
||||||
|
buf[2] = (data >> 8) & 0xFF;
|
||||||
|
buf[3] = (data >> 0) & 0xFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t get_u32(const unsigned char *buf)
|
||||||
|
{
|
||||||
|
return (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
|
||||||
|
}
|
||||||
|
|
||||||
static void iap_task(void)
|
static void iap_task(void)
|
||||||
{
|
{
|
||||||
static int count = 0;
|
static int count = 0;
|
||||||
|
|
@ -210,10 +223,7 @@ void iap_periodic(void)
|
||||||
iap_updateflag = true;
|
iap_updateflag = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
data[4] = time_elapsed >> 24;
|
put_u32(&data[4], time_elapsed);
|
||||||
data[5] = time_elapsed >> 16;
|
|
||||||
data[6] = time_elapsed >> 8;
|
|
||||||
data[7] = time_elapsed;
|
|
||||||
iap_send_pkt(data, sizeof(data));
|
iap_send_pkt(data, sizeof(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -312,10 +322,7 @@ static void iap_handlepkt_mode0(void)
|
||||||
{
|
{
|
||||||
cmd_ok_mode0(cmd);
|
cmd_ok_mode0(cmd);
|
||||||
|
|
||||||
uint32_t lingoes = (serbuf[3] << 24) |
|
uint32_t lingoes = get_u32(&serbuf[3]);
|
||||||
(serbuf[4] << 16) |
|
|
||||||
(serbuf[5] << 8) |
|
|
||||||
(serbuf[6] << 0);
|
|
||||||
|
|
||||||
if (lingoes == 0x35)
|
if (lingoes == 0x35)
|
||||||
/* FM transmitter sends this: */
|
/* FM transmitter sends this: */
|
||||||
|
|
@ -638,10 +645,7 @@ static void iap_handlepkt_mode4(void)
|
||||||
num = 1;
|
num = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
data[3] = num >> 24;
|
put_u32(&data[3], num);
|
||||||
data[4] = num >> 16;
|
|
||||||
data[5] = num >> 8;
|
|
||||||
data[6] = num;
|
|
||||||
iap_send_pkt(data, sizeof(data));
|
iap_send_pkt(data, sizeof(data));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -654,8 +658,7 @@ static void iap_handlepkt_mode4(void)
|
||||||
{0x04, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00,
|
{0x04, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x00,
|
||||||
'R', 'O', 'C', 'K', 'B', 'O', 'X', '\0'};
|
'R', 'O', 'C', 'K', 'B', 'O', 'X', '\0'};
|
||||||
|
|
||||||
unsigned long item_offset = (serbuf[5] << 24) | (serbuf[6] << 16) |
|
unsigned long item_offset = get_u32(&serbuf[5]);
|
||||||
(serbuf[7] << 8) | serbuf[8];
|
|
||||||
|
|
||||||
get_playlist_name(data + 7, item_offset, MAX_PATH);
|
get_playlist_name(data + 7, item_offset, MAX_PATH);
|
||||||
/*Remove file extension*/
|
/*Remove file extension*/
|
||||||
|
|
@ -677,14 +680,8 @@ static void iap_handlepkt_mode4(void)
|
||||||
unsigned long time_total = id3->length;
|
unsigned long time_total = id3->length;
|
||||||
unsigned long time_elapsed = id3->elapsed;
|
unsigned long time_elapsed = id3->elapsed;
|
||||||
int status = audio_status();
|
int status = audio_status();
|
||||||
data[3] = time_total >> 24;
|
put_u32(&data[3], time_total);
|
||||||
data[4] = time_total >> 16;
|
put_u32(&data[7], time_elapsed);
|
||||||
data[5] = time_total >> 8;
|
|
||||||
data[6] = time_total;
|
|
||||||
data[7] = time_elapsed >> 24;
|
|
||||||
data[8] = time_elapsed >> 16;
|
|
||||||
data[9] = time_elapsed >> 8;
|
|
||||||
data[10] = time_elapsed;
|
|
||||||
if (status == AUDIO_STATUS_PLAY)
|
if (status == AUDIO_STATUS_PLAY)
|
||||||
data[11] = 0x01; /* play */
|
data[11] = 0x01; /* play */
|
||||||
else if (status & AUDIO_STATUS_PAUSE)
|
else if (status & AUDIO_STATUS_PAUSE)
|
||||||
|
|
@ -702,10 +699,7 @@ static void iap_handlepkt_mode4(void)
|
||||||
playlist_pos -= playlist_get_first_index(NULL);
|
playlist_pos -= playlist_get_first_index(NULL);
|
||||||
if(playlist_pos < 0)
|
if(playlist_pos < 0)
|
||||||
playlist_pos += playlist_amount();
|
playlist_pos += playlist_amount();
|
||||||
data[3] = playlist_pos >> 24;
|
put_u32(&data[3], playlist_pos);
|
||||||
data[4] = playlist_pos >> 16;
|
|
||||||
data[5] = playlist_pos >> 8;
|
|
||||||
data[6] = playlist_pos;
|
|
||||||
iap_send_pkt(data, sizeof(data));
|
iap_send_pkt(data, sizeof(data));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -721,9 +715,8 @@ static void iap_handlepkt_mode4(void)
|
||||||
struct mp3entry id3;
|
struct mp3entry id3;
|
||||||
int fd;
|
int fd;
|
||||||
size_t len;
|
size_t len;
|
||||||
long tracknum = (signed long)serbuf[4] << 24 |
|
long tracknum = get_u32(&serbuf[4]);
|
||||||
(signed long)serbuf[5] << 16 |
|
|
||||||
(signed long)serbuf[6] << 8 | serbuf[7];
|
|
||||||
data[2] = cmd + 1;
|
data[2] = cmd + 1;
|
||||||
memcpy(&id3, audio_current_track(), sizeof(id3));
|
memcpy(&id3, audio_current_track(), sizeof(id3));
|
||||||
tracknum += playlist_get_first_index(NULL);
|
tracknum += playlist_get_first_index(NULL);
|
||||||
|
|
@ -777,10 +770,8 @@ static void iap_handlepkt_mode4(void)
|
||||||
{
|
{
|
||||||
case 0x01:
|
case 0x01:
|
||||||
{/*Playlist*/
|
{/*Playlist*/
|
||||||
unsigned long item_offset = (cur_dbrecord[1] << 24)|
|
unsigned long item_offset = get_u32(&cur_dbrecord[1]);
|
||||||
(cur_dbrecord[2] << 16)|
|
|
||||||
(cur_dbrecord[3] << 8) |
|
|
||||||
cur_dbrecord[4];
|
|
||||||
unsigned char selected_playlist
|
unsigned char selected_playlist
|
||||||
[sizeof(global_settings.playlist_catalog_dir)
|
[sizeof(global_settings.playlist_catalog_dir)
|
||||||
+ 1
|
+ 1
|
||||||
|
|
@ -940,10 +931,7 @@ static void iap_handlepkt_mode4(void)
|
||||||
/* ReturnNumPlayingTracks */
|
/* ReturnNumPlayingTracks */
|
||||||
unsigned char data[] = {0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00};
|
unsigned char data[] = {0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00};
|
||||||
unsigned long playlist_amt = playlist_amount();
|
unsigned long playlist_amt = playlist_amount();
|
||||||
data[3] = playlist_amt >> 24;
|
put_u32(&data[3], playlist_amt);
|
||||||
data[4] = playlist_amt >> 16;
|
|
||||||
data[5] = playlist_amt >> 8;
|
|
||||||
data[6] = playlist_amt;
|
|
||||||
iap_send_pkt(data, sizeof(data));
|
iap_send_pkt(data, sizeof(data));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -952,9 +940,8 @@ static void iap_handlepkt_mode4(void)
|
||||||
case 0x0037:
|
case 0x0037:
|
||||||
{
|
{
|
||||||
int paused = (is_wps_fading() || (audio_status() & AUDIO_STATUS_PAUSE));
|
int paused = (is_wps_fading() || (audio_status() & AUDIO_STATUS_PAUSE));
|
||||||
long tracknum = (signed long)serbuf[4] << 24 |
|
long tracknum = get_u32(&serbuf[4]);
|
||||||
(signed long)serbuf[5] << 16 |
|
|
||||||
(signed long)serbuf[6] << 8 | serbuf[7];
|
|
||||||
audio_pause();
|
audio_pause();
|
||||||
audio_skip(tracknum - playlist_next(0));
|
audio_skip(tracknum - playlist_next(0));
|
||||||
if (!paused)
|
if (!paused)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue