diff --git a/dom/bluetooth/bluedroid/BluetoothInterface.cpp b/dom/bluetooth/bluedroid/BluetoothInterface.cpp index d338263ddd5..e866659ba9e 100644 --- a/dom/bluetooth/bluedroid/BluetoothInterface.cpp +++ b/dom/bluetooth/bluedroid/BluetoothInterface.cpp @@ -13,6 +13,16 @@ #include "nsThreadUtils.h" #include "nsXULAppAPI.h" +#if MOZ_IS_GCC && MOZ_GCC_VERSION_AT_LEAST(4, 7, 0) +/* use designated array initializers if supported */ +#define CONVERT(in_, out_) \ + [in_] = out_ +#else +/* otherwise init array element by position */ +#define CONVERT(in_, out_) \ + out_ +#endif + BEGIN_BLUETOOTH_NAMESPACE template @@ -27,17 +37,17 @@ static nsresult Convert(bt_status_t aIn, BluetoothStatus& aOut) { static const BluetoothStatus sStatus[] = { - [BT_STATUS_SUCCESS] = STATUS_SUCCESS, - [BT_STATUS_FAIL] = STATUS_FAIL, - [BT_STATUS_NOT_READY] = STATUS_NOT_READY, - [BT_STATUS_NOMEM] = STATUS_NOMEM, - [BT_STATUS_BUSY] = STATUS_BUSY, - [BT_STATUS_DONE] = STATUS_DONE, - [BT_STATUS_UNSUPPORTED] = STATUS_UNSUPPORTED, - [BT_STATUS_PARM_INVALID] = STATUS_PARM_INVALID, - [BT_STATUS_UNHANDLED] = STATUS_UNHANDLED, - [BT_STATUS_AUTH_FAILURE] = STATUS_AUTH_FAILURE, - [BT_STATUS_RMT_DEV_DOWN] = STATUS_RMT_DEV_DOWN + CONVERT(BT_STATUS_SUCCESS, STATUS_SUCCESS), + CONVERT(BT_STATUS_FAIL, STATUS_FAIL), + CONVERT(BT_STATUS_NOT_READY, STATUS_NOT_READY), + CONVERT(BT_STATUS_NOMEM, STATUS_NOMEM), + CONVERT(BT_STATUS_BUSY, STATUS_BUSY), + CONVERT(BT_STATUS_DONE, STATUS_DONE), + CONVERT(BT_STATUS_UNSUPPORTED, STATUS_UNSUPPORTED), + CONVERT(BT_STATUS_PARM_INVALID, STATUS_PARM_INVALID), + CONVERT(BT_STATUS_UNHANDLED, STATUS_UNHANDLED), + CONVERT(BT_STATUS_AUTH_FAILURE, STATUS_AUTH_FAILURE), + CONVERT(BT_STATUS_RMT_DEV_DOWN, STATUS_RMT_DEV_DOWN) }; if (aIn >= MOZ_ARRAY_LENGTH(sStatus)) { return NS_ERROR_ILLEGAL_VALUE; @@ -72,8 +82,8 @@ static nsresult Convert(bool aIn, bt_scan_mode_t& aOut) { static const bt_scan_mode_t sScanMode[] = { - [false] = BT_SCAN_MODE_CONNECTABLE, - [true] = BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE + CONVERT(false, BT_SCAN_MODE_CONNECTABLE), + CONVERT(true, BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE) }; if (aIn >= MOZ_ARRAY_LENGTH(sScanMode)) { return NS_ERROR_ILLEGAL_VALUE; @@ -238,10 +248,10 @@ Convert(BluetoothSocketType aIn, btsock_type_t& aOut) // by gcc. Start values in |BluetoothSocketType| at index // 0 to fix this problem. static const btsock_type_t sSocketType[] = { - [0] = static_cast(0), // invalid, [0] required by gcc - [BluetoothSocketType::RFCOMM] = BTSOCK_RFCOMM, - [BluetoothSocketType::SCO] = BTSOCK_SCO, - [BluetoothSocketType::L2CAP] = BTSOCK_L2CAP, + CONVERT(0, static_cast(0)), // invalid, [0] required by gcc + CONVERT(BluetoothSocketType::RFCOMM, BTSOCK_RFCOMM), + CONVERT(BluetoothSocketType::SCO, BTSOCK_SCO), + CONVERT(BluetoothSocketType::L2CAP, BTSOCK_L2CAP), // EL2CAP is not supported by Bluedroid }; if (aIn == BluetoothSocketType::EL2CAP || @@ -256,8 +266,8 @@ static nsresult Convert(BluetoothHandsfreeAtResponse aIn, bthf_at_response_t& aOut) { static const bthf_at_response_t sAtResponse[] = { - [HFP_AT_RESPONSE_ERROR] = BTHF_AT_RESPONSE_ERROR, - [HFP_AT_RESPONSE_OK] = BTHF_AT_RESPONSE_OK + CONVERT(HFP_AT_RESPONSE_ERROR, BTHF_AT_RESPONSE_ERROR), + CONVERT(HFP_AT_RESPONSE_OK, BTHF_AT_RESPONSE_OK) }; if (aIn >= MOZ_ARRAY_LENGTH(sAtResponse)) { return NS_ERROR_ILLEGAL_VALUE; @@ -270,8 +280,9 @@ static nsresult Convert(BluetoothHandsfreeCallAddressType aIn, bthf_call_addrtype_t& aOut) { static const bthf_call_addrtype_t sCallAddressType[] = { - [HFP_CALL_ADDRESS_TYPE_UNKNOWN] = BTHF_CALL_ADDRTYPE_UNKNOWN, - [HFP_CALL_ADDRESS_TYPE_INTERNATIONAL] = BTHF_CALL_ADDRTYPE_INTERNATIONAL + CONVERT(HFP_CALL_ADDRESS_TYPE_UNKNOWN, BTHF_CALL_ADDRTYPE_UNKNOWN), + CONVERT(HFP_CALL_ADDRESS_TYPE_INTERNATIONAL, + BTHF_CALL_ADDRTYPE_INTERNATIONAL) }; if (aIn >= MOZ_ARRAY_LENGTH(sCallAddressType)) { return NS_ERROR_ILLEGAL_VALUE; @@ -284,8 +295,8 @@ static nsresult Convert(BluetoothHandsfreeCallDirection aIn, bthf_call_direction_t& aOut) { static const bthf_call_direction_t sCallDirection[] = { - [HFP_CALL_DIRECTION_OUTGOING] = BTHF_CALL_DIRECTION_OUTGOING, - [HFP_CALL_DIRECTION_INCOMING] = BTHF_CALL_DIRECTION_INCOMING + CONVERT(HFP_CALL_DIRECTION_OUTGOING, BTHF_CALL_DIRECTION_OUTGOING), + CONVERT(HFP_CALL_DIRECTION_INCOMING, BTHF_CALL_DIRECTION_INCOMING) }; if (aIn >= MOZ_ARRAY_LENGTH(sCallDirection)) { return NS_ERROR_ILLEGAL_VALUE; @@ -298,9 +309,9 @@ static nsresult Convert(BluetoothHandsfreeCallMode aIn, bthf_call_mode_t& aOut) { static const bthf_call_mode_t sCallMode[] = { - [HFP_CALL_MODE_VOICE] = BTHF_CALL_TYPE_VOICE, - [HFP_CALL_MODE_DATA] = BTHF_CALL_TYPE_DATA, - [HFP_CALL_MODE_FAX] = BTHF_CALL_TYPE_FAX + CONVERT(HFP_CALL_MODE_VOICE, BTHF_CALL_TYPE_VOICE), + CONVERT(HFP_CALL_MODE_DATA, BTHF_CALL_TYPE_DATA), + CONVERT(HFP_CALL_MODE_FAX, BTHF_CALL_TYPE_FAX) }; if (aIn >= MOZ_ARRAY_LENGTH(sCallMode)) { return NS_ERROR_ILLEGAL_VALUE; @@ -313,8 +324,8 @@ static nsresult Convert(BluetoothHandsfreeCallMptyType aIn, bthf_call_mpty_type_t& aOut) { static const bthf_call_mpty_type_t sCallMptyType[] = { - [HFP_CALL_MPTY_TYPE_SINGLE] = BTHF_CALL_MPTY_TYPE_SINGLE, - [HFP_CALL_MPTY_TYPE_MULTI] = BTHF_CALL_MPTY_TYPE_MULTI + CONVERT(HFP_CALL_MPTY_TYPE_SINGLE, BTHF_CALL_MPTY_TYPE_SINGLE), + CONVERT(HFP_CALL_MPTY_TYPE_MULTI, BTHF_CALL_MPTY_TYPE_MULTI) }; if (aIn >= MOZ_ARRAY_LENGTH(sCallMptyType)) { return NS_ERROR_ILLEGAL_VALUE; @@ -327,13 +338,13 @@ static nsresult Convert(BluetoothHandsfreeCallState aIn, bthf_call_state_t& aOut) { static const bthf_call_state_t sCallState[] = { - [HFP_CALL_STATE_ACTIVE] = BTHF_CALL_STATE_ACTIVE, - [HFP_CALL_STATE_HELD] = BTHF_CALL_STATE_HELD, - [HFP_CALL_STATE_DIALING] = BTHF_CALL_STATE_DIALING, - [HFP_CALL_STATE_ALERTING] = BTHF_CALL_STATE_ALERTING, - [HFP_CALL_STATE_INCOMING] = BTHF_CALL_STATE_INCOMING, - [HFP_CALL_STATE_WAITING] = BTHF_CALL_STATE_WAITING, - [HFP_CALL_STATE_IDLE] = BTHF_CALL_STATE_IDLE + CONVERT(HFP_CALL_STATE_ACTIVE, BTHF_CALL_STATE_ACTIVE), + CONVERT(HFP_CALL_STATE_HELD, BTHF_CALL_STATE_HELD), + CONVERT(HFP_CALL_STATE_DIALING, BTHF_CALL_STATE_DIALING), + CONVERT(HFP_CALL_STATE_ALERTING, BTHF_CALL_STATE_ALERTING), + CONVERT(HFP_CALL_STATE_INCOMING, BTHF_CALL_STATE_INCOMING), + CONVERT(HFP_CALL_STATE_WAITING, BTHF_CALL_STATE_WAITING), + CONVERT(HFP_CALL_STATE_IDLE, BTHF_CALL_STATE_IDLE) }; if (aIn >= MOZ_ARRAY_LENGTH(sCallState)) { return NS_ERROR_ILLEGAL_VALUE; @@ -346,8 +357,8 @@ static nsresult Convert(BluetoothHandsfreeNetworkState aIn, bthf_network_state_t& aOut) { static const bthf_network_state_t sNetworkState[] = { - [HFP_NETWORK_STATE_NOT_AVAILABLE] = BTHF_NETWORK_STATE_NOT_AVAILABLE, - [HFP_NETWORK_STATE_AVAILABLE] = BTHF_NETWORK_STATE_AVAILABLE + CONVERT(HFP_NETWORK_STATE_NOT_AVAILABLE, BTHF_NETWORK_STATE_NOT_AVAILABLE), + CONVERT(HFP_NETWORK_STATE_AVAILABLE, BTHF_NETWORK_STATE_AVAILABLE) }; if (aIn >= MOZ_ARRAY_LENGTH(sNetworkState)) { return NS_ERROR_ILLEGAL_VALUE; @@ -360,8 +371,8 @@ static nsresult Convert(BluetoothHandsfreeServiceType aIn, bthf_service_type_t& aOut) { static const bthf_service_type_t sServiceType[] = { - [HFP_SERVICE_TYPE_HOME] = BTHF_SERVICE_TYPE_HOME, - [HFP_SERVICE_TYPE_ROAMING] = BTHF_SERVICE_TYPE_ROAMING + CONVERT(HFP_SERVICE_TYPE_HOME, BTHF_SERVICE_TYPE_HOME), + CONVERT(HFP_SERVICE_TYPE_ROAMING, BTHF_SERVICE_TYPE_ROAMING) }; if (aIn >= MOZ_ARRAY_LENGTH(sServiceType)) { return NS_ERROR_ILLEGAL_VALUE; @@ -374,8 +385,8 @@ static nsresult Convert(BluetoothHandsfreeVolumeType aIn, bthf_volume_type_t& aOut) { static const bthf_volume_type_t sVolumeType[] = { - [HFP_VOLUME_TYPE_SPEAKER] = BTHF_VOLUME_TYPE_SPK, - [HFP_VOLUME_TYPE_MICROPHONE] = BTHF_VOLUME_TYPE_MIC + CONVERT(HFP_VOLUME_TYPE_SPEAKER, BTHF_VOLUME_TYPE_SPK), + CONVERT(HFP_VOLUME_TYPE_MICROPHONE, BTHF_VOLUME_TYPE_MIC) }; if (aIn >= MOZ_ARRAY_LENGTH(sVolumeType)) { return NS_ERROR_ILLEGAL_VALUE; @@ -389,11 +400,11 @@ static nsresult Convert(ControlPlayStatus aIn, btrc_play_status_t& aOut) { static const btrc_play_status_t sPlayStatus[] = { - [PLAYSTATUS_STOPPED] = BTRC_PLAYSTATE_STOPPED, - [PLAYSTATUS_PLAYING] = BTRC_PLAYSTATE_PLAYING, - [PLAYSTATUS_PAUSED] = BTRC_PLAYSTATE_PAUSED, - [PLAYSTATUS_FWD_SEEK] = BTRC_PLAYSTATE_FWD_SEEK, - [PLAYSTATUS_REV_SEEK] = BTRC_PLAYSTATE_REV_SEEK + CONVERT(PLAYSTATUS_STOPPED, BTRC_PLAYSTATE_STOPPED), + CONVERT(PLAYSTATUS_PLAYING, BTRC_PLAYSTATE_PLAYING), + CONVERT(PLAYSTATUS_PAUSED, BTRC_PLAYSTATE_PAUSED), + CONVERT(PLAYSTATUS_FWD_SEEK, BTRC_PLAYSTATE_FWD_SEEK), + CONVERT(PLAYSTATUS_REV_SEEK, BTRC_PLAYSTATE_REV_SEEK) }; if (aIn >= MOZ_ARRAY_LENGTH(sPlayStatus)) { return NS_ERROR_ILLEGAL_VALUE; @@ -406,10 +417,10 @@ static nsresult Convert(enum BluetoothAvrcpPlayerAttribute aIn, btrc_player_attr_t& aOut) { static const btrc_player_attr_t sPlayerAttr[] = { - [AVRCP_PLAYER_ATTRIBUTE_EQUALIZER] = BTRC_PLAYER_ATTR_EQUALIZER, - [AVRCP_PLAYER_ATTRIBUTE_REPEAT] = BTRC_PLAYER_ATTR_REPEAT, - [AVRCP_PLAYER_ATTRIBUTE_SHUFFLE] = BTRC_PLAYER_ATTR_SHUFFLE, - [AVRCP_PLAYER_ATTRIBUTE_SCAN] = BTRC_PLAYER_ATTR_SCAN + CONVERT(AVRCP_PLAYER_ATTRIBUTE_EQUALIZER, BTRC_PLAYER_ATTR_EQUALIZER), + CONVERT(AVRCP_PLAYER_ATTRIBUTE_REPEAT, BTRC_PLAYER_ATTR_REPEAT), + CONVERT(AVRCP_PLAYER_ATTRIBUTE_SHUFFLE, BTRC_PLAYER_ATTR_SHUFFLE), + CONVERT(AVRCP_PLAYER_ATTRIBUTE_SCAN, BTRC_PLAYER_ATTR_SCAN) }; if (aIn >= MOZ_ARRAY_LENGTH(sPlayerAttr)) { return NS_ERROR_ILLEGAL_VALUE; @@ -422,11 +433,11 @@ static nsresult Convert(enum BluetoothAvrcpStatus aIn, btrc_status_t& aOut) { static const btrc_status_t sStatus[] = { - [AVRCP_STATUS_BAD_COMMAND] = BTRC_STS_BAD_CMD, - [AVRCP_STATUS_BAD_PARAMETER] = BTRC_STS_BAD_PARAM, - [AVRCP_STATUS_NOT_FOUND] = BTRC_STS_NOT_FOUND, - [AVRCP_STATUS_INTERNAL_ERROR] = BTRC_STS_INTERNAL_ERR, - [AVRCP_STATUS_SUCCESS] = BTRC_STS_NO_ERROR + CONVERT(AVRCP_STATUS_BAD_COMMAND, BTRC_STS_BAD_CMD), + CONVERT(AVRCP_STATUS_BAD_PARAMETER, BTRC_STS_BAD_PARAM), + CONVERT(AVRCP_STATUS_NOT_FOUND, BTRC_STS_NOT_FOUND), + CONVERT(AVRCP_STATUS_INTERNAL_ERROR, BTRC_STS_INTERNAL_ERR), + CONVERT(AVRCP_STATUS_SUCCESS, BTRC_STS_NO_ERROR) }; if (aIn >= MOZ_ARRAY_LENGTH(sStatus)) { return NS_ERROR_ILLEGAL_VALUE; @@ -439,12 +450,12 @@ static nsresult Convert(enum BluetoothAvrcpEvent aIn, btrc_event_id_t& aOut) { static const btrc_event_id_t sEventId[] = { - [AVRCP_EVENT_PLAY_STATUS_CHANGED] = BTRC_EVT_PLAY_STATUS_CHANGED, - [AVRCP_EVENT_TRACK_CHANGE] = BTRC_EVT_TRACK_CHANGE, - [AVRCP_EVENT_TRACK_REACHED_END] = BTRC_EVT_TRACK_REACHED_END, - [AVRCP_EVENT_TRACK_REACHED_START] = BTRC_EVT_TRACK_REACHED_START, - [AVRCP_EVENT_PLAY_POS_CHANGED] = BTRC_EVT_PLAY_POS_CHANGED, - [AVRCP_EVENT_APP_SETTINGS_CHANGED] = BTRC_EVT_APP_SETTINGS_CHANGED + CONVERT(AVRCP_EVENT_PLAY_STATUS_CHANGED, BTRC_EVT_PLAY_STATUS_CHANGED), + CONVERT(AVRCP_EVENT_TRACK_CHANGE, BTRC_EVT_TRACK_CHANGE), + CONVERT(AVRCP_EVENT_TRACK_REACHED_END, BTRC_EVT_TRACK_REACHED_END), + CONVERT(AVRCP_EVENT_TRACK_REACHED_START, BTRC_EVT_TRACK_REACHED_START), + CONVERT(AVRCP_EVENT_PLAY_POS_CHANGED, BTRC_EVT_PLAY_POS_CHANGED), + CONVERT(AVRCP_EVENT_APP_SETTINGS_CHANGED, BTRC_EVT_APP_SETTINGS_CHANGED) }; if (aIn >= MOZ_ARRAY_LENGTH(sEventId)) { return NS_ERROR_ILLEGAL_VALUE; @@ -457,8 +468,8 @@ static nsresult Convert(enum BluetoothAvrcpNotification aIn, btrc_notification_type_t& aOut) { static const btrc_notification_type_t sNotificationType[] = { - [AVRCP_NTF_INTERIM] = BTRC_NOTIFICATION_TYPE_INTERIM, - [AVRCP_NTF_CHANGED] = BTRC_NOTIFICATION_TYPE_CHANGED + CONVERT(AVRCP_NTF_INTERIM, BTRC_NOTIFICATION_TYPE_INTERIM), + CONVERT(AVRCP_NTF_CHANGED, BTRC_NOTIFICATION_TYPE_CHANGED) }; if (aIn >= MOZ_ARRAY_LENGTH(sNotificationType)) { return NS_ERROR_ILLEGAL_VALUE;