Home | History | Annotate | Download | only in gap
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2009-2013 Broadcom Corporation
      4  *
      5  *  Licensed under the Apache License, Version 2.0 (the "License");
      6  *  you may not use this file except in compliance with the License.
      7  *  You may obtain a copy of the License at:
      8  *
      9  *  http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  *
     17  ******************************************************************************/
     18 
     19 #include <string.h>
     20 #include "bt_target.h"
     21 #include "bt_utils.h"
     22 #include "gap_int.h"
     23 
     24 /*******************************************************************************
     25 **
     26 ** Function         gap_allocate_cb
     27 **
     28 ** Description      Look through the GAP Control Blocks for a free one.
     29 **
     30 ** Returns          Pointer to the control block or NULL if not found
     31 **
     32 *******************************************************************************/
     33 tGAP_INFO *gap_allocate_cb (void)
     34 {
     35     tGAP_INFO     *p_cb = &gap_cb.blk[0];
     36     UINT8        x;
     37 
     38     for (x = 0; x < GAP_MAX_BLOCKS; x++, p_cb++)
     39     {
     40         if (!p_cb->in_use)
     41         {
     42             memset (p_cb, 0, sizeof (tGAP_INFO));
     43 
     44             p_cb->in_use = TRUE;
     45             p_cb->index = x;
     46             p_cb->p_data = (void *)NULL;
     47             return (p_cb);
     48         }
     49     }
     50 
     51     /* If here, no free control blocks found */
     52     return (NULL);
     53 }
     54 
     55 
     56 /*******************************************************************************
     57 **
     58 ** Function         gap_free_cb
     59 **
     60 ** Description      Release GAP control block.
     61 **
     62 ** Returns          Pointer to the control block or NULL if not found
     63 **
     64 *******************************************************************************/
     65 void gap_free_cb (tGAP_INFO *p_cb)
     66 {
     67     if (p_cb)
     68     {
     69         p_cb->gap_cback = NULL;
     70         p_cb->in_use = FALSE;
     71     }
     72 }
     73 
     74 
     75 /*******************************************************************************
     76 **
     77 ** Function         gap_is_service_busy
     78 **
     79 ** Description      Look through the GAP Control Blocks that are in use
     80 **                  and check to see if the event waiting for is the command
     81 **                  requested.
     82 **
     83 ** Returns          TRUE if already in use
     84 **                  FALSE if not busy
     85 **
     86 *******************************************************************************/
     87 BOOLEAN gap_is_service_busy (UINT16 request)
     88 {
     89     tGAP_INFO   *p_cb = &gap_cb.blk[0];
     90     UINT8        x;
     91 
     92     for (x = 0; x < GAP_MAX_BLOCKS; x++, p_cb++)
     93     {
     94         if (p_cb->in_use && p_cb->event == request)
     95             return (TRUE);
     96     }
     97 
     98     /* If here, service is not busy */
     99     return (FALSE);
    100 }
    101 
    102 
    103 /*******************************************************************************
    104 **
    105 ** Function         gap_convert_btm_status
    106 **
    107 ** Description      Converts a BTM error status into a GAP error status
    108 **
    109 **
    110 ** Returns          GAP_UNKNOWN_BTM_STATUS is returned if not recognized
    111 **
    112 *******************************************************************************/
    113 UINT16 gap_convert_btm_status (tBTM_STATUS btm_status)
    114 {
    115     switch (btm_status)
    116     {
    117     case BTM_SUCCESS:
    118         return (BT_PASS);
    119 
    120     case BTM_CMD_STARTED:
    121         return (GAP_CMD_INITIATED);
    122 
    123     case BTM_BUSY:
    124         return (GAP_ERR_BUSY);
    125 
    126     case BTM_MODE_UNSUPPORTED:
    127     case BTM_ILLEGAL_VALUE:
    128         return (GAP_ERR_ILL_PARM);
    129 
    130     case BTM_WRONG_MODE:
    131         return (GAP_DEVICE_NOT_UP);
    132 
    133     case BTM_UNKNOWN_ADDR:
    134         return (GAP_BAD_BD_ADDR);
    135 
    136     case BTM_DEVICE_TIMEOUT:
    137         return (GAP_ERR_TIMEOUT);
    138 
    139     default:
    140         return (GAP_ERR_PROCESSING);
    141     }
    142 }
    143