void BtGapDiscoveryResultCallback(const bd_addr_t *bdAddr)\r
{\r
if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapDiscoveryResultCallback: Mobile Phone Device");\r
- return;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapDiscoveryResultCallback: Mobile Phone Device");\r
+ //return;\r
}\r
\r
if (bdAddr == nullptr) {\r
// 回调:ACL连接状态上报\r
void GapAclStateChangedCallback(const bd_addr_t *bdAddr, gap_acl_state_t state, unsigned int reason)\r
{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x",\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x",\r
bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* mac下标 0 1 2 3 4 5 */\r
bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device");\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device");\r
return;\r
}\r
GraphicService::GetInstance()->PostGraphicEvent(\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsRequestWriteCallback");\r
}\r
\r
+/* 与设备建立A2DP连接 */\r
+static int wstp_a2dp_snk_connect(const bd_addr_t *bd_addr)\r
+{\r
+ int ret = a2dp_snk_connect(bd_addr);\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,"a2dp_snk_connect ret(int): %x\n", ret);\r
+ return ret;\r
+}\r
+\r
+/* 与设备断开A2DP连接 */\r
+static int wstp_a2dp_snk_disconnect(const bd_addr_t *bd_addr)\r
+{\r
+ int ret = a2dp_snk_disconnect(bd_addr);\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,"a2dp_snk_disconnect ret(int): %x\n", ret);\r
+ return ret;\r
+}\r
+\r
static void BtA2dpSnkAcceptTimerStop(void)\r
{\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "stop timer\n");\r
{\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x conn_state: %x\n",\r
bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0], conn_state); /* 3 2 1 0 idx */\r
+ \r
}\r
\r
static void BtA2dpSnkStartStreamReqCb(bd_addr_t *bd_addr)\r
\r
void BtA2dpDeInit(void)\r
{\r
-\r
- \r
- \r
a2dp_src_deregister_callbacks(&g_a2dpSrcCallbacks);\r
a2dp_snk_deregister_callbacks(&g_a2dp_snk_callbacks);\r
\r
#include "build_version.h"\r
#include "custom_runtime.h"\r
#include "custom_utils.h"\r
-\r
+#include "bletest.h"\r
\r
\r
// extern void bts_data_to_uuid_len2(uint16_t uuid_data, bt_uuid_t *out_uuid);\r
uint16_t data2ae3Cmd = 0;//2ae3短指令特征值\r
uint16_t data2ae4Cmd = 0;\r
uint16_t data2ae5Cmd = 0;\r
+uint16_t data2ae2Cmd = 0;//read\r
uint16_t data2ae1Cmd = 0;//安卓消息来电\r
uint16_t data2ae0Cmd = 0;//OTA\r
\r
BLE_CHARACTERISTIC_SNED_LONG_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
BLE_CHARACTERISTIC_SNED_OTA_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
BLE_CHARACTERISTIC_SNED_ANDRIOD_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
- BLE_CHARACTERISTIC_READ_BATTERY_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_READ,\r
+ BLE_CHARACTERISTIC_READ_BATTERY_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_READ|GATT_CHARACTER_PROPERTY_BIT_NOTIFY,\r
};\r
static uint8_t ble_adv_falg = 0;\r
void svr_ble_adv_stop(void)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae2 result->value_handle6 %d\r\n",result->value_handle);\r
// shortCmdChara = result->value_handle;\r
+ if(data2ae2Cmd == 0){\r
+ data2ae2Cmd = result->value_handle;\r
+ }\r
}\r
if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data_2ae4))\r
{\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
g_ble_conn_id, g_ble_server_handle,data_len);\r
\r
- return ret;\r
+ return ret; \r
+}\r
+\r
+errcode_t svr_ble_read_data_value_updata_noyify(void)//2ae2\r
+{\r
+ gatts_ntf_ind_t data_info;\r
+ data_info.attr_handle = data2ae2Cmd;\r
+ static uint8_t battery_point_val[20] = {0};\r
+ // 获取电池电压值\r
+ float voltage = 0.0F;\r
+ uint8_t power = 0;\r
+ power =battery_get_voltage(&voltage);\r
+ battery_point_val[0] +=1;//power ;//power;//电量90\r
+ uint16_t dial = ble_get_dial_id();\r
+ memcpy_s(&battery_point_val[1],2,&dial,2);\r
+\r
+ uint8_t _major,_mid,_minor;\r
+ uapi_get_fw_version(&_major,&_mid,&_minor);\r
+\r
+ battery_point_val[3] = _major;//固件版本号\r
+ battery_point_val[4] = _mid;\r
+ battery_point_val[5] = _minor;\r
+\r
+ bd_addr_t addr_info;\r
+ errcode_t ret = gap_ble_get_local_addr(&addr_info);\r
+ battery_point_val[6] = addr_info.addr[5];\r
+ battery_point_val[7] = addr_info.addr[4];\r
+ battery_point_val[8] = addr_info.addr[3];\r
+ battery_point_val[9] = addr_info.addr[2];\r
+ battery_point_val[10] = addr_info.addr[1];\r
+ battery_point_val[11] = addr_info.addr[0];\r
+\r
+ battery_point_val[12] = 0;//消息推送开关 默认是关闭 0\r
+ battery_point_val[13] = 0;//多媒体开关\r
+ battery_point_val[14] = 5;//客户编号\r
+ battery_point_val[15] = 5;//产品编号\r
+\r
+ battery_point_val[16] = 0;//硬件版本号\r
+ battery_point_val[17] = 1;\r
+\r
+ battery_point_val[18] = 0;//ble版本号\r
+ battery_point_val[19] = 1;\r
+\r
+\r
+ data_info.value = battery_point_val;\r
+ data_info.value_len = 20;\r
+ ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
+ g_ble_conn_id, g_ble_server_handle,20);\r
\r
+ return ret; \r
}\r
+\r
+\r
static void svr_ble_bt_gatts_req_read_cb(uint8_t server_id, uint16_t conn_id, gatts_req_read_cb_t *read_cb_para,\r
errcode_t status)\r
{\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_req_read_cb ret:is_long:%d",read_cb_para->is_long);\r
+\r
+ //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_req_read_cb ret:is_long:%d 2ae2 %d read_cb_para->handle :%d",read_cb_para->is_long,data2ae2Cmd,read_cb_para->handle);\r
+ if(read_cb_para->handle!=data2ae2Cmd)\r
+ return;\r
+\r
+ static uint8_t battery_point_val[20] = {0};\r
+ // 获取电池电压值\r
+ float voltage = 0.0F;\r
+ uint8_t power = 0;\r
+ power =battery_get_voltage(&voltage);\r
+ battery_point_val[0] =power;//power ;//power;//电量90\r
+ uint16_t dial = ble_get_dial_id();\r
+ memcpy_s(&battery_point_val[1],2,&dial,2);\r
+\r
+ uint8_t _major,_mid,_minor;\r
+ uapi_get_fw_version(&_major,&_mid,&_minor);\r
+\r
+ battery_point_val[3] = _major;//固件版本号\r
+ battery_point_val[4] = _mid;\r
+ battery_point_val[5] = _minor;\r
+\r
+ bd_addr_t addr_info;\r
+ errcode_t ret = gap_ble_get_local_addr(&addr_info);\r
+ battery_point_val[6] = addr_info.addr[5];\r
+ battery_point_val[7] = addr_info.addr[4];\r
+ battery_point_val[8] = addr_info.addr[3];\r
+ battery_point_val[9] = addr_info.addr[2];\r
+ battery_point_val[10] = addr_info.addr[1];\r
+ battery_point_val[11] = addr_info.addr[0];\r
+\r
+ battery_point_val[12] = 0;//消息推送开关 默认是关闭 0\r
+ battery_point_val[13] = 0;//多媒体开关\r
+ battery_point_val[14] = 5;//客户编号\r
+ battery_point_val[15] = 5;//产品编号\r
+\r
+ battery_point_val[16] = 0;//硬件版本号\r
+ battery_point_val[17] = 1;\r
+\r
+ battery_point_val[18] = 0;//ble版本号\r
+ battery_point_val[19] = 1;\r
+\r
+ static gatts_ntf_ind_t gatts_ntf_ind;\r
+ gatts_ntf_ind.attr_handle=read_cb_para->handle;\r
+ gatts_ntf_ind.value=battery_point_val;\r
+ gatts_ntf_ind.value_len=20;\r
+ //read_cb_para->need_rsp=0;\r
+ gatts_notify_indicate(server_id,conn_id,&gatts_ntf_ind);\r
}\r
\r
\r
//if(req->data);
uint8 *x= (uint8 *)(req->data);
const power_display_svr_api_t *display_api = power_display_svr_get_api();
- if (display_api->get_screen_state() != SCREEN_ON)
- {
- display_api->turn_on_screen();
- }
- display_api->set_screen_set_keepon_timeout(1000*5);
+
if(*x==3)
{
+ if (display_api->get_screen_state() != SCREEN_ON)
+ {
+ display_api->turn_on_screen();
+ }
+ display_api->set_screen_set_keepon_timeout(1000*5);
//倒计时结束后,直接执行关机动画
low_power_play();
}
else if(*x==0)
{
//提醒低电充电
+ if (display_api->get_screen_state() != SCREEN_ON)
+ {
+ display_api->turn_on_screen();
+ }
+ display_api->set_screen_set_keepon_timeout(1000*5);
+
set_lowpower_falg(0);
- // if (NotificationManager::GetInstance()->HasNotifyShowing())
- // NotificationManager::GetInstance()->StopNotify();
- NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_ONE);
+ NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO);
NotificationManager::GetInstance()->ShowNotify(showlowpowerNotify, (uint16_t)topic, true);
}
else
{
//电量过低,直接提醒关机
+ if (display_api->get_screen_state() != SCREEN_ON)
+ {
+ display_api->turn_on_screen();
+ }
+ display_api->set_screen_set_keepon_timeout(1000*10);
+
set_lowpower_falg(1);
- // if (NotificationManager::GetInstance()->HasNotifyShowing())
- // NotificationManager::GetInstance()->StopNotify();
+ if (NotificationManager::GetInstance()->HasNotifyShowing())
+ NotificationManager::GetInstance()->StopNotify();
+
NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_ONE);
NotificationManager::GetInstance()->ShowNotify(showlowpowerNotify, (uint16_t)topic, true);
#include "battery_service.h"
#include "NativeAbility.h"
#include "custom_utils.h"
+#include "cmsis_os2.h"
+#include "linux/delay.h"
namespace OHOS
{
UIImageView *imageCharge = nullptr;
UIViewGroup *group=nullptr;
UIImageAnimatorView *ShutDownImageAnimatorView=nullptr;
static constexpr char *ShutDownPaths = "/user/res/RebootAndShutDown/ShutDown/"; //关机图片路径
- static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES = 30; // 图片帧数
- static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_TIME = 150; // 图片更新间隔
- ImageAnimatorInfo ShutDownImageInfo[SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES]; // 关机图像的信息
+ #define SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES 30 // 图片帧数
+ static int16_t SHUTDOWN_IMAGE_ANIMATOR_TIME = 130; // 图片更新间隔
+
static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_X = 0;
static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_Y = 0;
static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_W = 466;
static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_H = 466;
const char **ShutDownPathsArray{nullptr}; // 关机图片路径数组
-
+ ImageAnimatorInfo ShutDownImageInfo[SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES]; // 关机图像的信息
#define LOW_POWER_BUTTON "LOW_POWER_BUTTON"
// UIViewGroup *ChargingStatuShow()
// {
// imageCharge->SetVisible(true);
// }
// }
+
+ static void FreeImagePathsArray(const char **imagePaths, const int numImages)
+ {
+ for (int i = 0; i < numImages; i++)
+ {
+ // ImageCacheManager::GetInstance().UnloadSingleRes(imagePaths[i]);
+ delete imagePaths[i];
+ imagePaths[i] = nullptr;
+ }
+ }
+
static const char ** CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages)
{
const char **imagePaths = new const char *[numImages];
return imagePaths;
}
- UIViewGroup * ShowUpShutDownAnimatorView()
+ void ShowUpShutDownAnimatorView()
{
group = new UIViewGroup();
if (group == nullptr)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");
- return nullptr;
+ return ;
}
- group->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+ group->SetPosition(0, 0, 466, 466);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShutDownAnimatorView::ShowUpShutDownAnimatorView");
ShutDownPathsArray = CreateImagePathsArray(ShutDownPaths, "bin", SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
if (ShutDownImageAnimatorView == nullptr)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView new ShutDownImageAnimatorView fail");
- return NULL;
+ return ;
}
+
for (uint8_t i = 0; i < SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES; i++)
{
ShutDownImageInfo[i].imagePath = (ShutDownPathsArray[i]);
ShutDownImageAnimatorView->SetPosition(SHUTDOWN_IMAGE_ANIMATOR_VIEW_X, SHUTDOWN_IMAGE_ANIMATOR_VIEW_Y, SHUTDOWN_IMAGE_ANIMATOR_VIEW_W, SHUTDOWN_IMAGE_ANIMATOR_VIEW_H);
ShutDownImageAnimatorView->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
ShutDownImageAnimatorView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
- ShutDownImageAnimatorView->SetImageAnimatorSrc(ShutDownImageInfo, SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, 100);
+ ShutDownImageAnimatorView->SetImageAnimatorSrc(ShutDownImageInfo, SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, SHUTDOWN_IMAGE_ANIMATOR_TIME);
ShutDownImageAnimatorView->SetRepeat(false);
ShutDownImageAnimatorView->SetRepeatTimes(1);
}
+ UIImageAnimatorView::AnimatorStopListener *stoplistener = static_cast<UIImageAnimatorView::AnimatorStopListener *>(lowppowrAnimatorStopListener::GetInstance());
+ ShutDownImageAnimatorView->SetAnimatorStopListener(stoplistener);
+ if (stoplistener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to Create stoplistener!!");
+ return;
+ }
+
ShutDownImageAnimatorView->SetVisible(true);
//ShutDownImageAnimatorView->Start();
group->SetVisible(false);
group->Add(ShutDownImageAnimatorView);
- return group;
+ return ;
}
static uint8_t battery_falg=0;
if(group)
{
group->RemoveAll();
+ ShutDownImageAnimatorView->Stop();
if(ShutDownImageAnimatorView)
{
delete ShutDownImageAnimatorView;
group = nullptr;
}
+ FreeImagePathsArray(ShutDownPathsArray,SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
RootView::GetInstance()->Remove(UIViewGroup_lowpower);
delete UIViewGroup_lowpower;
if(battery_falg>=3)
{
group->SetVisible(true);
- UIImageAnimatorView::AnimatorStopListener *stoplistener = static_cast<UIImageAnimatorView::AnimatorStopListener *>(lowppowrAnimatorStopListener::GetInstance());
- ShutDownImageAnimatorView->SetAnimatorStopListener(stoplistener);
- if (stoplistener == nullptr)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to Create stoplistener!!");
- return NULL;
- }
ShutDownImageAnimatorView->Start();
}
return UIViewGroup_lowpower;
void lowppowrAnimatorStopListener::OnAnimatorStop(UIView &view)
{
//UNUSED(view);
+ NotificationManager::GetInstance()->StopNotify();
+ msleep(500);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xxxxxxxxxxxxxxxxxxxxOnAnimatorStop");
+
if(battery_falg==4)
uapi_reboot_device();
else
uapi_poweroff_device(); // 关机
+
+
+
//NotificationManager::GetInstance()->StopNotify();
//
// if(strcmp(view.GetViewId(),LOW_POWER_BUTTON)!=0)