xref: /btstack/src/classic/avrcp_media_item_iterator.c (revision 954cc391b7ff237c6d9460ea14cf8b96b1fbd1e4)
1*954cc391SMilanka Ringwald /*
2*954cc391SMilanka Ringwald  * Copyright (C) 2014 BlueKitchen GmbH
3*954cc391SMilanka Ringwald  *
4*954cc391SMilanka Ringwald  * Redistribution and use in source and binary forms, with or without
5*954cc391SMilanka Ringwald  * modification, are permitted provided that the following conditions
6*954cc391SMilanka Ringwald  * are met:
7*954cc391SMilanka Ringwald  *
8*954cc391SMilanka Ringwald  * 1. Redistributions of source code must retain the above copyright
9*954cc391SMilanka Ringwald  *    notice, this list of conditions and the following disclaimer.
10*954cc391SMilanka Ringwald  * 2. Redistributions in binary form must reproduce the above copyright
11*954cc391SMilanka Ringwald  *    notice, this list of conditions and the following disclaimer in the
12*954cc391SMilanka Ringwald  *    documentation and/or other materials provided with the distribution.
13*954cc391SMilanka Ringwald  * 3. Neither the name of the copyright holders nor the names of
14*954cc391SMilanka Ringwald  *    contributors may be used to endorse or promote products derived
15*954cc391SMilanka Ringwald  *    from this software without specific prior written permission.
16*954cc391SMilanka Ringwald  * 4. Any redistribution, use, or modification is done solely for
17*954cc391SMilanka Ringwald  *    personal benefit and not for any commercial purpose or for
18*954cc391SMilanka Ringwald  *    monetary gain.
19*954cc391SMilanka Ringwald  *
20*954cc391SMilanka Ringwald  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
21*954cc391SMilanka Ringwald  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22*954cc391SMilanka Ringwald  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23*954cc391SMilanka Ringwald  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
24*954cc391SMilanka Ringwald  * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25*954cc391SMilanka Ringwald  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26*954cc391SMilanka Ringwald  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
27*954cc391SMilanka Ringwald  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28*954cc391SMilanka Ringwald  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29*954cc391SMilanka Ringwald  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
30*954cc391SMilanka Ringwald  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31*954cc391SMilanka Ringwald  * SUCH DAMAGE.
32*954cc391SMilanka Ringwald  *
33*954cc391SMilanka Ringwald  * Please inquire about commercial licensing options at
34*954cc391SMilanka Ringwald  * [email protected]
35*954cc391SMilanka Ringwald  *
36*954cc391SMilanka Ringwald  */
37*954cc391SMilanka Ringwald 
38*954cc391SMilanka Ringwald #define __BTSTACK_FILE__ "avrcp_media_item_iterator.c"
39*954cc391SMilanka Ringwald 
40*954cc391SMilanka Ringwald 
41*954cc391SMilanka Ringwald // *****************************************************************************
42*954cc391SMilanka Ringwald //
43*954cc391SMilanka Ringwald // AVRCP Media Item Iterator
44*954cc391SMilanka Ringwald //
45*954cc391SMilanka Ringwald // *****************************************************************************
46*954cc391SMilanka Ringwald 
47*954cc391SMilanka Ringwald #include <stdint.h>
48*954cc391SMilanka Ringwald #include <stdio.h>
49*954cc391SMilanka Ringwald #include <stdlib.h>
50*954cc391SMilanka Ringwald #include <string.h>
51*954cc391SMilanka Ringwald 
52*954cc391SMilanka Ringwald #include "classic/avrcp_media_item_iterator.h"
53*954cc391SMilanka Ringwald #include "btstack_util.h"
54*954cc391SMilanka Ringwald 
55*954cc391SMilanka Ringwald void avrcp_media_item_iterator_init(avrcp_media_item_context_t *context, uint16_t avrcp_media_item_len, const uint8_t * avrcp_media_item_data){
56*954cc391SMilanka Ringwald     context->data = avrcp_media_item_data;
57*954cc391SMilanka Ringwald     context->length = avrcp_media_item_len;
58*954cc391SMilanka Ringwald     context->offset = 0;
59*954cc391SMilanka Ringwald }
60*954cc391SMilanka Ringwald 
61*954cc391SMilanka Ringwald int  avrcp_media_item_iterator_has_more(const avrcp_media_item_context_t * context){
62*954cc391SMilanka Ringwald     return context->offset < context->length;
63*954cc391SMilanka Ringwald }
64*954cc391SMilanka Ringwald 
65*954cc391SMilanka Ringwald void avrcp_media_item_iterator_next(avrcp_media_item_context_t * context){
66*954cc391SMilanka Ringwald     int chunk_len = big_endian_read_16(context->data, context->offset + 6);
67*954cc391SMilanka Ringwald     int new_offset = context->offset + 1 + chunk_len;
68*954cc391SMilanka Ringwald     // avoid uint8_t overrun
69*954cc391SMilanka Ringwald     if (new_offset > 0xffff){
70*954cc391SMilanka Ringwald         new_offset = 0xffff;
71*954cc391SMilanka Ringwald     }
72*954cc391SMilanka Ringwald     context->offset = new_offset;
73*954cc391SMilanka Ringwald }
74*954cc391SMilanka Ringwald 
75*954cc391SMilanka Ringwald uint32_t avrcp_media_item_iterator_get_attr_id(const avrcp_media_item_context_t * context){
76*954cc391SMilanka Ringwald     return big_endian_read_32(context->data, context->offset);
77*954cc391SMilanka Ringwald }
78*954cc391SMilanka Ringwald 
79*954cc391SMilanka Ringwald uint16_t avrcp_media_item_iterator_get_attr_charset(const avrcp_media_item_context_t * context){
80*954cc391SMilanka Ringwald     return big_endian_read_16(context->data, context->offset + 4);
81*954cc391SMilanka Ringwald }
82*954cc391SMilanka Ringwald 
83*954cc391SMilanka Ringwald uint16_t avrcp_media_item_iterator_get_attr_value_len(const avrcp_media_item_context_t * context){
84*954cc391SMilanka Ringwald     return big_endian_read_16(context->data, context->offset + 6);
85*954cc391SMilanka Ringwald }
86*954cc391SMilanka Ringwald 
87*954cc391SMilanka Ringwald const uint8_t * avrcp_media_item_iterator_get_attr_value(const avrcp_media_item_context_t * context){
88*954cc391SMilanka Ringwald     return &context->data[context->offset + 8];
89*954cc391SMilanka Ringwald }
90*954cc391SMilanka Ringwald 
91