/*************************************************************************************************/ /*! * \file hci_vs.c * * \brief HCI vendor specific functions for generic controllers. * * Copyright (c) 2011-2018 Arm Ltd. All Rights Reserved. * * Copyright (c) 2019 Packetcraft, Inc. * * 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. * * This module implements vendor-specific features for the reset sequence and vendor-specific * HCI commands and events. */ /*************************************************************************************************/ #include "hci_core.h" #include "hci_api.h" #include "hci_main.h" #include "hci_cmd.h" #include "hci_mbed_os_adaptation.h" /* PORTING: reset handling code has been removed since it's handled by the mbed-os driver */ /*************************************************************************************************/ /*! * \fn hciCoreResetStart * * \brief Start the HCI reset sequence. * * \return None. */ /*************************************************************************************************/ void hciCoreResetStart(void) { /* PORTING: reset sequence handled by mbed-os */ hci_mbed_os_start_reset_sequence(); } /*************************************************************************************************/ /*! * \fn hciCoreResetSequence * * \brief Implement the HCI reset sequence. * * \param pMsg HCI event message from previous command in the sequence. * * \return None. */ /*************************************************************************************************/ void hciCoreResetSequence(uint8_t *pMsg) { /* PORTING: reset sequence handled by mbed-os */ hci_mbed_os_handle_reset_sequence(pMsg); } void hci_mbed_os_signal_reset_sequence_done(void) { /* last command in sequence; set resetting state and call callback */ wsfMsgHdr_t hdr; hciCb.resetting = FALSE; hdr.param = 0; hdr.event = HCI_RESET_SEQ_CMPL_CBACK_EVT; (*hciCb.evtCback)((hciEvt_t *) &hdr); } /*************************************************************************************************/ /*! * \fn hciCoreVsCmdCmplRcvd * * \brief Perform internal HCI processing of vendor specific command complete events. * * \param opcode HCI command opcode. * \param pMsg Pointer to input HCI event parameter byte stream. * \param len Parameter byte stream length. * * \return HCI callback event code or zero. */ /*************************************************************************************************/ uint8_t hciCoreVsCmdCmplRcvd(uint16_t opcode, uint8_t *pMsg, uint8_t len) { return HCI_VENDOR_SPEC_CMD_CMPL_CBACK_EVT; } /*************************************************************************************************/ /*! * \fn hciCoreVsEvtRcvd * * \brief Perform internal HCI processing of vendor specific HCI events. * * \param p Pointer to input HCI event parameter byte stream. * \param len Parameter byte stream length. * * \return HCI callback event code or zero. */ /*************************************************************************************************/ uint8_t hciCoreVsEvtRcvd(uint8_t *p, uint8_t len) { return HCI_VENDOR_SPEC_EVT; } /*************************************************************************************************/ /*! * \fn hciCoreHwErrorRcvd * * \brief Perform internal HCI processing of hardware error event. * * \param p Pointer to input HCI event parameter byte stream. * * \return HCI callback event code or zero. */ /*************************************************************************************************/ uint8_t hciCoreHwErrorRcvd(uint8_t *p) { return 0; } /*************************************************************************************************/ /*! * \fn HciVsInit * * \brief Vendor-specific controller initialization function. * * \param param Vendor-specific parameter. * * \return None. */ /*************************************************************************************************/ void HciVsInit(uint8_t param) { hciCoreCb.extResetSeq = NULL; }