mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			cordio LL adaptation and config
							parent
							
								
									1e8010dd81
								
							
						
					
					
						commit
						11abc6704f
					
				| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
{
 | 
			
		||||
    "name": "cordio-controller",
 | 
			
		||||
    "config": {
 | 
			
		||||
        "uart-hci": {
 | 
			
		||||
            "help": "Does the board have a UART HCI. Valid values are 0 (need to provide your own HCI driver) and 1 (HCI trhough UART).",
 | 
			
		||||
            "value": 0,
 | 
			
		||||
            "macro_name": "CHCI_TR_UART"
 | 
			
		||||
        },
 | 
			
		||||
        "handle-vendor-specific-hci-commands": {
 | 
			
		||||
            "help": "Handle VS HCI commands. Valid values are 0 (ignore) and 1 (handle).",
 | 
			
		||||
            "value": 0,
 | 
			
		||||
            "macro_name": "LHCI_ENABLE_VS"
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
/* Copyright (c) 2009-2019 Arm Limited
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "mbed.h"
 | 
			
		||||
#include "fake_lhci_drv.h"
 | 
			
		||||
#include "chci_tr.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
uint16_t FakeChciTrRead(uint8_t prot, uint8_t type, uint16_t len, uint8_t *pData) {
 | 
			
		||||
    chciTrRecv(prot, type, pData);
 | 
			
		||||
    return len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,32 @@
 | 
			
		|||
/* Copyright (c) 2009-2019 Arm Limited
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef FAKE_LHCI_DRV_H_
 | 
			
		||||
#define FAKE_LHCI_DRV_H_
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
uint16_t FakeChciTrRead(uint8_t prot, uint8_t type, uint16_t len, uint8_t *pData);
 | 
			
		||||
 | 
			
		||||
uint16_t FakeChciTrWrite(uint8_t prot, uint8_t type, uint16_t len, uint8_t *pData);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* FAKE_LHCI_DRV_H_ */
 | 
			
		||||
| 
						 | 
				
			
			@ -28,10 +28,9 @@
 | 
			
		|||
// Cordio Includes
 | 
			
		||||
#include "ll_init_api.h"
 | 
			
		||||
#include "ll_defs.h"
 | 
			
		||||
#include "chci_drv.h"
 | 
			
		||||
#include "fake_lhci_drv.h"
 | 
			
		||||
#include "pal_bb.h"
 | 
			
		||||
#include "lhci_api.h"
 | 
			
		||||
#include "platform_api.h"
 | 
			
		||||
#include "platform_ble_api.h"
 | 
			
		||||
#include "wsf_assert.h"
 | 
			
		||||
#include "wsf_buf.h"
 | 
			
		||||
#include "wsf_timer.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -215,6 +214,8 @@ ble::vendor::cordio::buf_pool_desc_t NRFCordioHCIDriver::get_buffer_pool_descrip
 | 
			
		|||
    return buf_pool_desc_t(buffer, pool_desc);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PlatformLoadBdAddress(uint8_t *pDevAddr);
 | 
			
		||||
 | 
			
		||||
void NRFCordioHCIDriver::do_initialize()
 | 
			
		||||
{
 | 
			
		||||
	if(_is_init) {
 | 
			
		||||
| 
						 | 
				
			
			@ -280,7 +281,7 @@ void NRFCordioHCIDriver::do_initialize()
 | 
			
		|||
    // If a submodule does not have enough space to allocate its memory from buffer, it will still allocate its memory (and do a buffer overflow) and return 0 (as in 0 byte used)
 | 
			
		||||
    // however that method will still continue which will lead to undefined behaviour
 | 
			
		||||
    // So whenever a change of configuration is done, it's a good idea to set CORDIO_LL_MEMORY_FOOTPRINT to a high value and then reduce accordingly
 | 
			
		||||
    uint32_t mem_used = LlInitControllerExtInit(&ll_init_cfg);
 | 
			
		||||
    uint32_t mem_used = LlInitControllerInit(&ll_init_cfg);
 | 
			
		||||
    if( mem_used < CORDIO_LL_MEMORY_FOOTPRINT )
 | 
			
		||||
    {
 | 
			
		||||
        // Sub-optimal, give warning
 | 
			
		||||
| 
						 | 
				
			
			@ -338,12 +339,6 @@ ble::vendor::cordio::CordioHCIDriver& ble_cordio_get_hci_driver() {
 | 
			
		|||
    return hci_driver;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Do not handle any vendor specific command
 | 
			
		||||
extern "C" bool_t lhciCommonVsStdDecodeCmdPkt(LhciHdr_t *pHdr, uint8_t *pBuf)
 | 
			
		||||
{
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Nordic implementation
 | 
			
		||||
void PlatformLoadBdAddress(uint8_t *pDevAddr)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,8 +23,7 @@
 | 
			
		|||
#include "wsf_math.h"
 | 
			
		||||
#include "chci_api.h"
 | 
			
		||||
#include "chci_tr.h"
 | 
			
		||||
#include "chci_tr_serial.h"
 | 
			
		||||
#include "chci_drv.h"
 | 
			
		||||
#include "fake_lhci_drv.h"
 | 
			
		||||
#include "hci_defs.h"
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -47,9 +46,7 @@ void NRFCordioHCITransportDriver::terminate()
 | 
			
		|||
 | 
			
		||||
uint16_t NRFCordioHCITransportDriver::write(uint8_t type, uint16_t len, uint8_t *pData)
 | 
			
		||||
{
 | 
			
		||||
    chciTrSerialRxIncoming(&type, 1);
 | 
			
		||||
    chciTrSerialRxIncoming(pData, len);
 | 
			
		||||
    return len;
 | 
			
		||||
    return FakeChciTrRead(CHCI_TR_PROT_BLE, type, len, pData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" void chciDrvInit(void)
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +55,7 @@ extern "C" void chciDrvInit(void)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// Callback from Cordio stack
 | 
			
		||||
extern "C" uint16_t chciDrvWrite(uint8_t prot, uint8_t type, uint16_t len, uint8_t *pData)
 | 
			
		||||
extern "C" uint16_t FakeChciTrWrite(uint8_t prot, uint8_t type, uint16_t len, uint8_t *pData)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t ctype = (type == CHCI_TR_TYPE_EVT) ? HCI_EVT_TYPE : HCI_ACL_TYPE;
 | 
			
		||||
    CordioHCITransportDriver::on_data_received(&ctype, 1);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue