/* 
 | 
 * BlueALSA - hfp.h 
 | 
 * Copyright (c) 2016-2018 Arkadiusz Bokowy 
 | 
 *               2017 Juha Kuikka 
 | 
 * 
 | 
 * This file is a part of bluez-alsa. 
 | 
 * 
 | 
 * This project is licensed under the terms of the MIT license. 
 | 
 * 
 | 
 */ 
 | 
  
 | 
#ifndef BLUEALSA_HFP_H_ 
 | 
#define BLUEALSA_HFP_H_ 
 | 
  
 | 
/* HFP codec IDs */ 
 | 
#define HFP_CODEC_UNDEFINED 0x00 
 | 
#define HFP_CODEC_CVSD      0x01 
 | 
#define HFP_CODEC_MSBC      0x02 
 | 
  
 | 
/* SDP AG feature flags */ 
 | 
#define SDP_HFP_AG_FEAT_TWC    (1 << 0) 
 | 
#define SDP_HFP_AG_FEAT_ECNR   (1 << 1) 
 | 
#define SDP_HFP_AG_FEAT_VREC   (1 << 2) 
 | 
#define SDP_HFP_AG_FEAT_RING   (1 << 3) 
 | 
#define SDP_HFP_AG_FEAT_VTAG   (1 << 4) 
 | 
#define SDP_HFP_AG_FEAT_WBAND  (1 << 5) 
 | 
  
 | 
/* SDP HF feature flags */ 
 | 
#define SDP_HFP_HF_FEAT_ECNR   (1 << 0) 
 | 
#define SDP_HFP_HF_FEAT_TWC    (1 << 1) 
 | 
#define SDP_HFP_HF_FEAT_CLI    (1 << 2) 
 | 
#define SDP_HFP_HF_FEAT_VREC   (1 << 3) 
 | 
#define SDP_HFP_HF_FEAT_VOLUME (1 << 4) 
 | 
#define SDP_HFP_HF_FEAT_WBAND  (1 << 5) 
 | 
  
 | 
/* AG feature flags */ 
 | 
#define HFP_AG_FEAT_TWC    (1 << 0) 
 | 
#define HFP_AG_FEAT_ECNR   (1 << 1) 
 | 
#define HFP_AG_FEAT_VREC   (1 << 2) 
 | 
#define HFP_AG_FEAT_RING   (1 << 3) 
 | 
#define HFP_AG_FEAT_VTAG   (1 << 4) 
 | 
#define HFP_AG_FEAT_REJECT (1 << 5) 
 | 
#define HFP_AG_FEAT_ECS    (1 << 6) 
 | 
#define HFP_AG_FEAT_ECC    (1 << 7) 
 | 
#define HFP_AG_FEAT_EERC   (1 << 8) 
 | 
#define HFP_AG_FEAT_CODEC  (1 << 9) 
 | 
#define HFP_AG_FEAT_HFIND  (1 << 10) 
 | 
#define HFP_AG_FEAT_ESOC   (1 << 11) 
 | 
  
 | 
/* HF feature flags */ 
 | 
#define HFP_HF_FEAT_ECNR   (1 << 0) 
 | 
#define HFP_HF_FEAT_TWC    (1 << 1) 
 | 
#define HFP_HF_FEAT_CLI    (1 << 2) 
 | 
#define HFP_HF_FEAT_VREC   (1 << 3) 
 | 
#define HFP_HF_FEAT_VOLUME (1 << 4) 
 | 
#define HFP_HF_FEAT_ECS    (1 << 5) 
 | 
#define HFP_HF_FEAT_ECC    (1 << 6) 
 | 
#define HFP_HF_FEAT_CODEC  (1 << 7) 
 | 
#define HFP_HF_FEAT_HFIND  (1 << 8) 
 | 
#define HFP_HF_FEAT_ESOC   (1 << 9) 
 | 
  
 | 
/* Apple's extension feature flags */ 
 | 
#define XAPL_FEATURE_BATTERY (1 << 1) 
 | 
#define XAPL_FEATURE_DOCKING (1 << 2) 
 | 
#define XAPL_FEATURE_SIRI    (1 << 3) 
 | 
#define XAPL_FEATURE_DENOISE (1 << 4) 
 | 
  
 | 
/** 
 | 
 * HFP Connection States */ 
 | 
enum __attribute__ ((packed)) hfp_state { 
 | 
    HFP_DISCONNECTED, 
 | 
    HFP_SLC_BRSF_SET, 
 | 
    HFP_SLC_BRSF_SET_OK, 
 | 
    HFP_SLC_BAC_SET_OK, 
 | 
    HFP_SLC_CIND_TEST, 
 | 
    HFP_SLC_CIND_TEST_OK, 
 | 
    HFP_SLC_CIND_GET, 
 | 
    HFP_SLC_CIND_GET_OK, 
 | 
    HFP_SLC_CMER_SET_OK, 
 | 
    /* Established Service Level Connection */ 
 | 
    HFP_SLC_CONNECTED, 
 | 
    HFP_CC_BCS_SET, 
 | 
    HFP_CC_BCS_SET_OK, 
 | 
    /* Established Codec Connection */ 
 | 
    HFP_CC_CONNECTED, 
 | 
    HFP_CONNECTED, 
 | 
}; 
 | 
  
 | 
/** 
 | 
 * HFP Indicators */ 
 | 
enum __attribute__ ((packed)) hfp_ind { 
 | 
    HFP_IND_NULL = 0, 
 | 
    HFP_IND_SERVICE, 
 | 
    HFP_IND_CALL, 
 | 
    HFP_IND_CALLSETUP, 
 | 
    HFP_IND_CALLHELD, 
 | 
    HFP_IND_SIGNAL, 
 | 
    HFP_IND_ROAM, 
 | 
    HFP_IND_BATTCHG, 
 | 
    __HFP_IND_MAX 
 | 
}; 
 | 
  
 | 
/* no Home/Roam network available */ 
 | 
#define HFP_IND_SERVICE_NONE        0 
 | 
/* Home/Roam network available */ 
 | 
#define HFP_IND_SERVICE_ACTIVE      1 
 | 
/* no calls in progress */ 
 | 
#define HFP_IND_CALL_NONE           0 
 | 
/* at least one call is in progress */ 
 | 
#define HFP_IND_CALL_ACTIVE         1 
 | 
/* currently not in call set up */ 
 | 
#define HFP_IND_CALLSETUP_NONE      0 
 | 
/* an incoming call process ongoing */ 
 | 
#define HFP_IND_CALLSETUP_IN        1 
 | 
/* an outgoing call set up is ongoing */ 
 | 
#define HFP_IND_CALLSETUP_OUT       2 
 | 
/* remote party being alerted in an outgoing call */ 
 | 
#define HFP_IND_CALLSETUP_OUT_ALERT 3 
 | 
/* no calls held */ 
 | 
#define HFP_IND_CALLHELD_NONE       0 
 | 
/* call on hold with other active call */ 
 | 
#define HFP_IND_CALLHELD_SWAP       1 
 | 
/* call on hold, no active call */ 
 | 
#define HFP_IND_CALLHELD_HOLD       2 
 | 
/* roaming is not active */ 
 | 
#define HFP_IND_ROAM_NONE           0 
 | 
/* a roaming is active */ 
 | 
#define HFP_IND_ROAM_ACTIVE         1 
 | 
  
 | 
#endif 
 |