blob: a6489c12ecb7b25d35e7f771b3529e98f1ad5b1a [file] [log] [blame]
/*
* Copyright (C) 2013 The Android Open Source Project
*
* 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.
*/
package com.android.cts.verifier.bluetooth;
import com.android.cts.verifier.PassFailButtons;
import com.android.cts.verifier.R;
import java.lang.Math;
import java.util.Set;
import java.util.Map;
import java.util.HashMap;
import android.bluetooth.le.AdvertiseSettings;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
public class BleScannerPowerLevelActivity extends PassFailButtons.Activity {
private static final String TAG = "BleScannerPowerLevel";
private Map<Integer, TextView> mMacText;
private Map<Integer, TextView> mCountText;
private Map<Integer, TextView> mRssiText;
private Map<Integer, TextView> mSetPowerText;
private Map<Integer, Integer> mCount;
private int[] mPowerLevel;
private TextView mTimerText;
private CountDownTimer mTimer;
private static final long REFRESH_MAC_TIME = 930000; // 15.5 min
private static final int[] POWER_DBM = {-21, -15, -7, 1, 9};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ble_scanner_power_level);
setPassFailButtonClickListeners();
setInfoResources(R.string.ble_power_level_name,
R.string.ble_power_level_info, -1);
mTimerText = (TextView)findViewById(R.id.ble_timer);
mTimer = new CountDownTimer(REFRESH_MAC_TIME, 1000) {
@Override
public void onTick(long millis) {
int min = (int)millis / 60000;
int sec = ((int)millis / 1000) % 60;
mTimerText.setText(min + ":" + sec);
}
@Override
public void onFinish() {
mTimerText.setTextColor(getResources().getColor(R.color.red));
mTimerText.setText("Time is up!");
}
};
mRssiText = new HashMap<Integer, TextView>();
mCountText = new HashMap<Integer, TextView>();
mCount = null;
mMacText = new HashMap<Integer, TextView>();
mSetPowerText = new HashMap<Integer, TextView>();
mPowerLevel = new int[]{AdvertiseSettings.ADVERTISE_TX_POWER_ULTRA_LOW,
AdvertiseSettings.ADVERTISE_TX_POWER_LOW,
AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM,
AdvertiseSettings.ADVERTISE_TX_POWER_HIGH};
mMacText.put(AdvertiseSettings.ADVERTISE_TX_POWER_ULTRA_LOW,
(TextView)findViewById(R.id.ble_ultra_low_mac));
mMacText.put(AdvertiseSettings.ADVERTISE_TX_POWER_LOW,
(TextView)findViewById(R.id.ble_low_mac));
mMacText.put(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM,
(TextView)findViewById(R.id.ble_medium_mac));
mMacText.put(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH,
(TextView)findViewById(R.id.ble_high_mac));
mCountText.put(AdvertiseSettings.ADVERTISE_TX_POWER_ULTRA_LOW,
(TextView)findViewById(R.id.ble_ultra_low_count));
mCountText.put(AdvertiseSettings.ADVERTISE_TX_POWER_LOW,
(TextView)findViewById(R.id.ble_low_count));
mCountText.put(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM,
(TextView)findViewById(R.id.ble_medium_count));
mCountText.put(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH,
(TextView)findViewById(R.id.ble_high_count));
mRssiText.put(AdvertiseSettings.ADVERTISE_TX_POWER_ULTRA_LOW,
(TextView)findViewById(R.id.ble_ultra_low_rssi));
mRssiText.put(AdvertiseSettings.ADVERTISE_TX_POWER_LOW,
(TextView)findViewById(R.id.ble_low_rssi));
mRssiText.put(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM,
(TextView)findViewById(R.id.ble_medium_rssi));
mRssiText.put(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH,
(TextView)findViewById(R.id.ble_high_rssi));
mSetPowerText.put(AdvertiseSettings.ADVERTISE_TX_POWER_ULTRA_LOW,
(TextView)findViewById(R.id.ble_ultra_low_set_power));
mSetPowerText.put(AdvertiseSettings.ADVERTISE_TX_POWER_LOW,
(TextView)findViewById(R.id.ble_low_set_power));
mSetPowerText.put(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM,
(TextView)findViewById(R.id.ble_medium_set_power));
mSetPowerText.put(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH,
(TextView)findViewById(R.id.ble_high_set_power));
Intent intent = new Intent(this, BleScannerService.class);
intent.putExtra(BleScannerService.EXTRA_COMMAND, BleScannerService.COMMAND_POWER_LEVEL);
startService(intent);
}
@Override
public void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction(BleScannerService.BLE_POWER_LEVEL);
filter.addAction(BleScannerService.BLE_PRIVACY_NEW_MAC_RECEIVE);
registerReceiver(onBroadcast, filter);
}
@Override
public void onPause() {
super.onPause();
unregisterReceiver(onBroadcast);
}
@Override
public void onDestroy() {
super.onDestroy();
stopService(new Intent(this, BleScannerService.class));
}
private BroadcastReceiver onBroadcast = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case BleScannerService.BLE_POWER_LEVEL:
int powerLevelBit = intent.getIntExtra(
BleScannerService.EXTRA_POWER_LEVEL_BIT, -1);
int powerLevel = intent.getIntExtra(BleScannerService.EXTRA_POWER_LEVEL, -2);
if (powerLevelBit < 0 || powerLevelBit > 3) {
Toast.makeText(context, "Invalid power level", Toast.LENGTH_SHORT).show();
break;
}
if (mCount == null) {
mCount = new HashMap<Integer, Integer>();
for (int i : mPowerLevel) {
mCount.put(i, 0);
}
mTimer.start();
}
Integer t = mCount.get(powerLevelBit) + 1;
mCount.put(powerLevelBit, t);
mCountText.get(powerLevelBit).setText(t.toString());
mMacText.get(powerLevelBit)
.setText(intent.getStringExtra(BleScannerService.EXTRA_MAC_ADDRESS));
mRssiText.get(powerLevelBit)
.setText(intent.getStringExtra(BleScannerService.EXTRA_RSSI));
if (Math.abs(POWER_DBM[powerLevelBit] - powerLevel) < 2) {
mSetPowerText.get(powerLevelBit).setText("Valid power level");
} else {
mSetPowerText.get(powerLevelBit)
.setText("Unknown BLe advertise tx power: " + powerLevel);
}
break;
case BleScannerService.BLE_PRIVACY_NEW_MAC_RECEIVE:
Toast.makeText(context, "New MAC address detected", Toast.LENGTH_SHORT)
.show();
mTimerText.setTextColor(getResources().getColor(R.color.green));
mTimerText.append(" Get new MAC address.");
mTimer.cancel();
getPassButton().setEnabled(true);
break;
}
}
};
}