xref: /btstack/chipset/em9301/btstack_chipset_em9301.c (revision faa6c1f625806f77d213afda856e452e3e27fee8)
1*faa6c1f6SMatthias Ringwald /*
2*faa6c1f6SMatthias Ringwald  * Copyright (C) 2014 BlueKitchen GmbH
3*faa6c1f6SMatthias Ringwald  *
4*faa6c1f6SMatthias Ringwald  * Redistribution and use in source and binary forms, with or without
5*faa6c1f6SMatthias Ringwald  * modification, are permitted provided that the following conditions
6*faa6c1f6SMatthias Ringwald  * are met:
7*faa6c1f6SMatthias Ringwald  *
8*faa6c1f6SMatthias Ringwald  * 1. Redistributions of source code must retain the above copyright
9*faa6c1f6SMatthias Ringwald  *    notice, this list of conditions and the following disclaimer.
10*faa6c1f6SMatthias Ringwald  * 2. Redistributions in binary form must reproduce the above copyright
11*faa6c1f6SMatthias Ringwald  *    notice, this list of conditions and the following disclaimer in the
12*faa6c1f6SMatthias Ringwald  *    documentation and/or other materials provided with the distribution.
13*faa6c1f6SMatthias Ringwald  * 3. Neither the name of the copyright holders nor the names of
14*faa6c1f6SMatthias Ringwald  *    contributors may be used to endorse or promote products derived
15*faa6c1f6SMatthias Ringwald  *    from this software without specific prior written permission.
16*faa6c1f6SMatthias Ringwald  * 4. Any redistribution, use, or modification is done solely for
17*faa6c1f6SMatthias Ringwald  *    personal benefit and not for any commercial purpose or for
18*faa6c1f6SMatthias Ringwald  *    monetary gain.
19*faa6c1f6SMatthias Ringwald  *
20*faa6c1f6SMatthias Ringwald  * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
21*faa6c1f6SMatthias Ringwald  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22*faa6c1f6SMatthias Ringwald  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23*faa6c1f6SMatthias Ringwald  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
24*faa6c1f6SMatthias Ringwald  * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25*faa6c1f6SMatthias Ringwald  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26*faa6c1f6SMatthias Ringwald  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
27*faa6c1f6SMatthias Ringwald  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28*faa6c1f6SMatthias Ringwald  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29*faa6c1f6SMatthias Ringwald  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
30*faa6c1f6SMatthias Ringwald  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31*faa6c1f6SMatthias Ringwald  * SUCH DAMAGE.
32*faa6c1f6SMatthias Ringwald  *
33*faa6c1f6SMatthias Ringwald  * Please inquire about commercial licensing options at
34*faa6c1f6SMatthias Ringwald  * [email protected]
35*faa6c1f6SMatthias Ringwald  *
36*faa6c1f6SMatthias Ringwald  */
37*faa6c1f6SMatthias Ringwald 
38*faa6c1f6SMatthias Ringwald /*
39*faa6c1f6SMatthias Ringwald  *  bt_control_em9301.c
40*faa6c1f6SMatthias Ringwald  *
41*faa6c1f6SMatthias Ringwald  *  Adapter to use em9301-based chipsets with BTstack
42*faa6c1f6SMatthias Ringwald  *
43*faa6c1f6SMatthias Ringwald  *  Allows to set public BD ADDR
44*faa6c1f6SMatthias Ringwald  */
45*faa6c1f6SMatthias Ringwald 
46*faa6c1f6SMatthias Ringwald #include "btstack_config.h"
47*faa6c1f6SMatthias Ringwald #include "bt_control_em9301.h"
48*faa6c1f6SMatthias Ringwald 
49*faa6c1f6SMatthias Ringwald #include <stddef.h>   /* NULL */
50*faa6c1f6SMatthias Ringwald #include <stdio.h>
51*faa6c1f6SMatthias Ringwald #include <string.h>   /* memcpy */
52*faa6c1f6SMatthias Ringwald #include "hci.h"
53*faa6c1f6SMatthias Ringwald 
54*faa6c1f6SMatthias Ringwald // should go to some common place
55*faa6c1f6SMatthias Ringwald #define OPCODE(ogf, ocf) (ocf | ogf << 10)
56*faa6c1f6SMatthias Ringwald 
57*faa6c1f6SMatthias Ringwald 
58*faa6c1f6SMatthias Ringwald static void chipset_set_bd_addr_command(bd_addr_t addr, uint8_t *hci_cmd_buffer){
59*faa6c1f6SMatthias Ringwald     bt_store_16(hci_cmd_buffer, 0, OPCODE(OGF_VENDOR, 0x02));
60*faa6c1f6SMatthias Ringwald     hci_cmd_buffer[2] = 0x06;
61*faa6c1f6SMatthias Ringwald     bt_flip_addr(&hci_cmd_buffer[3], addr);
62*faa6c1f6SMatthias Ringwald }
63*faa6c1f6SMatthias Ringwald 
64*faa6c1f6SMatthias Ringwald static const btstack_chipset_t btstack_chipset_em9301 = {
65*faa6c1f6SMatthias Ringwald     "EM9301",
66*faa6c1f6SMatthias Ringwald     NULL, // chipset_init not used
67*faa6c1f6SMatthias Ringwald     NULL, // chipset_next_command not used
68*faa6c1f6SMatthias Ringwald     NULL, // chipset_set_baudrate_command not needed as we're connected via SPI
69*faa6c1f6SMatthias Ringwald     chipset_set_bd_addr_command,
70*faa6c1f6SMatthias Ringwald };
71*faa6c1f6SMatthias Ringwald 
72*faa6c1f6SMatthias Ringwald // MARK: public API
73*faa6c1f6SMatthias Ringwald const btstack_chipset_t * btstack_chipset_em9301_instance(void){
74*faa6c1f6SMatthias Ringwald     return &btstack_chipset_em9301;
75*faa6c1f6SMatthias Ringwald }
76