From 1ee1ba5aaa2106d041fb851cf7cb815cd8ee1a6e Mon Sep 17 00:00:00 2001 From: wuzhihuitmac Date: Thu, 19 May 2022 11:21:52 +0000 Subject: [PATCH 1/2] =?UTF-8?q?dumper=E6=95=B0=E6=8D=AEbug=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuzhihuitmac Change-Id: Id1f3ffbb3f1ece21358928148ce6be46f4858945 --- services/sensor/include/client_info.h | 4 +- services/sensor/include/sensor_dump.h | 2 +- services/sensor/src/client_info.cpp | 20 ++++- services/sensor/src/sensor_dump.cpp | 116 ++++++++++---------------- 4 files changed, 62 insertions(+), 80 deletions(-) diff --git a/services/sensor/include/client_info.h b/services/sensor/include/client_info.h index f2d2e0db..85f4fde7 100644 --- a/services/sensor/include/client_info.h +++ b/services/sensor/include/client_info.h @@ -71,7 +71,7 @@ public: void UpdateCmd(uint32_t sensorId, int32_t uid, int32_t cmdType); void DestroyCmd(int32_t uid); void UpdateDataQueue(int32_t sensorId, struct SensorEvent &event); - std::unordered_map> GetDumpQueue(); + std::unordered_map> GetDumpQueue(); void ClearDataQueue(int32_t sensorId); int32_t GetUidByPid(int32_t pid); @@ -91,7 +91,7 @@ private: std::unordered_map appThreadInfoMap_; std::map, int32_t> clientPidMap_; std::unordered_map>> cmdMap_; - std::unordered_map> dumpQueue_; + std::unordered_map> dumpQueue_; }; } // namespace Sensors } // namespace OHOS diff --git a/services/sensor/include/sensor_dump.h b/services/sensor/include/sensor_dump.h index 310a21bf..b44b5a6a 100755 --- a/services/sensor/include/sensor_dump.h +++ b/services/sensor/include/sensor_dump.h @@ -44,7 +44,7 @@ private: DISALLOW_COPY_AND_MOVE(SensorDump); void DumpCurrentTime(int32_t fd); int32_t DataSizeBySensorId(uint32_t sensorId); - std::string GetDataBySensorId(uint32_t sensorId, struct SensorEvent &sensorData); + std::string GetDataBySensorId(uint32_t sensorId, struct TransferSensorEvents &sensorData); static std::unordered_map sensorMap_; }; } // namespace Sensors diff --git a/services/sensor/src/client_info.cpp b/services/sensor/src/client_info.cpp index 3b99d873..84b0bd73 100644 --- a/services/sensor/src/client_info.cpp +++ b/services/sensor/src/client_info.cpp @@ -656,20 +656,32 @@ void ClientInfo::UpdateDataQueue(int32_t sensorId, struct SensorEvent &event) return; } std::lock_guard queueLock(dataQueueMutex_); + struct TransferSensorEvents transferEvent = { + .sensorTypeId = event.sensorTypeId, + .version = event.version, + .timestamp = event.timestamp, + .option = event.option, + .mode = event.mode, + .dataLen = event.dataLen + }; + if (memcpy_s(transferEvent.data, event.dataLen, event.data, event.dataLen) != EOK) { + SEN_HILOGE("Copy data failed"); + return; + } auto it = dumpQueue_.find(sensorId); if (it == dumpQueue_.end()) { - std::queue q; - q.push(event); + std::queue q; + q.push(transferEvent); dumpQueue_.insert(std::make_pair(sensorId, q)); return; } - it->second.push(event); + it->second.push(transferEvent); if (it->second.size() > MAX_DUMP_DATA_SIZE) { it->second.pop(); } } -std::unordered_map> ClientInfo::GetDumpQueue() +std::unordered_map> ClientInfo::GetDumpQueue() { return dumpQueue_; } diff --git a/services/sensor/src/sensor_dump.cpp b/services/sensor/src/sensor_dump.cpp index df09f2d9..0a6f64b0 100644 --- a/services/sensor/src/sensor_dump.cpp +++ b/services/sensor/src/sensor_dump.cpp @@ -29,41 +29,30 @@ namespace { constexpr HiLogLabel LABEL = { LOG_CORE, SensorsLogDomain::SENSOR_SERVICE, "SensorDump" }; constexpr uint32_t MAX_DUMP_DATA_SIZE = 10; constexpr uint32_t MS_NS = 1000000; -constexpr uint32_t ACCELEROMETER = 256; -constexpr uint32_t ACCELEROMETER_UNCALIBRATED = 65792; -constexpr uint32_t LINEAR_ACCELERATION = 131328; -constexpr uint32_t GRAVITY = 196864; -constexpr uint32_t GYROSCOPE = 262400; -constexpr uint32_t GYROSCOPE_UNCALIBRATED = 327936; -constexpr uint32_t SIGNIFICANT_MOTION = 393472; -constexpr uint32_t DROP_DETECTION = 459008; -constexpr uint32_t PEDOMETER_DETECTION = 524544; -constexpr uint32_t PEDOMETER = 590080; -constexpr uint32_t AMBIENT_TEMPERATURE = 16777472; -constexpr uint32_t MAGNETIC_FIELD = 16843008; -constexpr uint32_t MAGNETIC_FIELD_UNCALIBRATED = 16908544; -constexpr uint32_t HUMIDITY = 16974080; -constexpr uint32_t BAROMETER = 17039616; -constexpr uint32_t SAR = 17105152; -constexpr uint32_t SIXDOF_ATTITUDE = 33554688; -constexpr uint32_t SCREEN_ROTATION = 33620224; -constexpr uint32_t DEVICE_ORIENTATION = 33685760; -constexpr uint32_t ORIENTATION = 33751296; -constexpr uint32_t ROTATION_VECTOR = 33816832; -constexpr uint32_t GAME_ROTATION_VECTOR = 33882368; -constexpr uint32_t GEOMAGNETIC_ROTATION_VECTOR = 33947904; -constexpr uint32_t PROXIMITY = 50331904; -constexpr uint32_t TOF = 50397440; -constexpr uint32_t AMBIENT_LIGHT = 50462976; -constexpr uint32_t COLOR_TEMPERATURE = 50528512; -constexpr uint32_t COLOR_RGB = 50594048; -constexpr uint32_t COLOR_XYZ = 50659584; -constexpr uint32_t HALL = 67109120; -constexpr uint32_t GRIP_DETECTOR = 67174656; -constexpr uint32_t MAGNET_BRACKET = 67240192; -constexpr uint32_t PRESSURE_DETECTOR = 67305728; -constexpr uint32_t HEART_RATE = 83886336; -constexpr uint32_t WEAR_DETECTION = 83951872; +constexpr uint32_t ACCELEROMETER = 1; +constexpr uint32_t ACCELEROMETER_UNCALIBRATED = 281; +constexpr uint32_t LINEAR_ACCELERATION = 258; +constexpr uint32_t GRAVITY = 257; +constexpr uint32_t GYROSCOPE = 2; +constexpr uint32_t GYROSCOPE_UNCALIBRATED = 263; +constexpr uint32_t SIGNIFICANT_MOTION = 264; +constexpr uint32_t PEDOMETER_DETECTION = 265; +constexpr uint32_t PEDOMETER = 266; +constexpr uint32_t AMBIENT_TEMPERATURE = 260; +constexpr uint32_t MAGNETIC_FIELD = 6; +constexpr uint32_t MAGNETIC_FIELD_UNCALIBRATED = 261; +constexpr uint32_t HUMIDITY = 13; +constexpr uint32_t BAROMETER = 8; +constexpr uint32_t DEVICE_ORIENTATION = 279; +constexpr uint32_t ORIENTATION = 256; +constexpr uint32_t ROTATION_VECTOR = 259; +constexpr uint32_t GAME_ROTATION_VECTOR = 262; +constexpr uint32_t GEOMAGNETIC_ROTATION_VECTOR = 277; +constexpr uint32_t PROXIMITY = 12; +constexpr uint32_t AMBIENT_LIGHT = 5; +constexpr uint32_t HALL = 10; +constexpr uint32_t HEART_RATE = 278; +constexpr uint32_t WEAR_DETECTION = 280; enum { SOLITARIES_DIMENSION = 1, @@ -83,7 +72,6 @@ std::unordered_map SensorDump::sensorMap_ = { { GYROSCOPE, "GYROSCOPE" }, { GYROSCOPE_UNCALIBRATED, "GYROSCOPE UNCALIBRATED" }, { SIGNIFICANT_MOTION, "SIGNIFICANT MOTION" }, - { DROP_DETECTION, "DROP DETECTION" }, { PEDOMETER_DETECTION, "PEDOMETER DETECTION" }, { PEDOMETER, "PEDOMETER" }, { AMBIENT_TEMPERATURE, "AMBIENT TEMPERATURE" }, @@ -91,24 +79,14 @@ std::unordered_map SensorDump::sensorMap_ = { { MAGNETIC_FIELD_UNCALIBRATED, "MAGNETIC FIELD UNCALIBRATED" }, { HUMIDITY, "HUMIDITY" }, { BAROMETER, "BAROMETER" }, - { SAR, "SAR" }, - { SIXDOF_ATTITUDE, "6DOF ATTITUDE" }, - { SCREEN_ROTATION, "SCREEN ROTATION" }, { DEVICE_ORIENTATION, "DEVICE ORIENTATION" }, { ORIENTATION, "ORIENTATION" }, { ROTATION_VECTOR, "ROTATION VECTOR" }, { GAME_ROTATION_VECTOR, "GAME ROTATION VECTOR" }, { GEOMAGNETIC_ROTATION_VECTOR, "GEOMAGNETIC ROTATION VECTOR" }, { PROXIMITY, "PROXIMITY" }, - { TOF, "TOF" }, { AMBIENT_LIGHT, "AMBIENT LIGHT" }, - { COLOR_TEMPERATURE, "COLOR TEMPERATURE" }, - { COLOR_RGB, "COLOR RGB" }, - { COLOR_XYZ, "COLOR XYZ" }, { HALL, "HALL" }, - { GRIP_DETECTOR, "GRIP DETECTOR" }, - { MAGNET_BRACKET, "MAGNET BRACKET" }, - { PRESSURE_DETECTOR, "PRESSURE DETECTOR" }, { HEART_RATE, "HEART RATE" }, { WEAR_DETECTION, "WEAR DETECTION" }, }; @@ -213,6 +191,7 @@ bool SensorDump::DumpSensorData(int32_t fd, ClientInfo &clientInfo, const std::v auto data = sensorData.second.front(); sensorData.second.pop(); timespec time = { 0, 0 }; + clock_gettime(CLOCK_REALTIME, &time); struct tm *timeinfo = localtime(&(time.tv_sec)); CHKPF(timeinfo); dprintf(fd, " %2d (ts=%.9f, time=%02d:%02d:%02d.%03d) | data:%s", ++j, data.timestamp / 1e9, @@ -236,50 +215,41 @@ void SensorDump::DumpCurrentTime(int32_t fd) int32_t SensorDump::DataSizeBySensorId(uint32_t sensorId) { switch (sensorId) { - case SIXDOF_ATTITUDE: - return POSE_6DOF_DIMENSION; - case ACCELEROMETER_UNCALIBRATED: - case MAGNETIC_FIELD_UNCALIBRATED: - case GYROSCOPE_UNCALIBRATED: - return UNCALIBRATED_DIMENSION; - case GEOMAGNETIC_ROTATION_VECTOR: - case GAME_ROTATION_VECTOR: - case ROTATION_VECTOR: - return VECTOR_DIMENSION; + case AMBIENT_LIGHT: + case BAROMETER: + case HALL: + case PROXIMITY: + case HUMIDITY: + case AMBIENT_TEMPERATURE: case SIGNIFICANT_MOTION: case PEDOMETER_DETECTION: case PEDOMETER: - case AMBIENT_TEMPERATURE: - case HUMIDITY: case HEART_RATE: - case DEVICE_ORIENTATION: case WEAR_DETECTION: return SOLITARIES_DIMENSION; + case ROTATION_VECTOR: + return VECTOR_DIMENSION; + case MAGNETIC_FIELD_UNCALIBRATED: + case GYROSCOPE_UNCALIBRATED: + case ACCELEROMETER_UNCALIBRATED: + return UNCALIBRATED_DIMENSION; default: return COMMON_DIMENSION; } } -std::string SensorDump::GetDataBySensorId(uint32_t sensorId, struct SensorEvent &sensorData) +std::string SensorDump::GetDataBySensorId(uint32_t sensorId, struct TransferSensorEvents &sensorData) { SEN_HILOGD("sensorId: %{public}u", sensorId); std::string buffer; int32_t dataLen = DataSizeBySensorId(sensorId); + auto data = reinterpret_cast(sensorData.data); for (int32_t i = 0; i < dataLen; ++i) { - if (sensorId >= ACCELEROMETER && sensorId <= PEDOMETER) { - buffer.append(std::to_string(sensorData.data[i])); - } else if (sensorId >= AMBIENT_TEMPERATURE && sensorId <= SAR) { - buffer.append(std::to_string(sensorData.data[i])); - } else if (sensorId >= SIXDOF_ATTITUDE && sensorId <= GEOMAGNETIC_ROTATION_VECTOR) { - buffer.append(std::to_string(sensorData.data[i])); - } else if (sensorId >= PROXIMITY && sensorId <= COLOR_XYZ) { - buffer.append(std::to_string(sensorData.data[i])); - } else if (sensorId >= HALL && sensorId <= PRESSURE_DETECTOR) { - buffer.append(std::to_string(sensorData.data[i])); - } else if (sensorId >= HEART_RATE && sensorId <= WEAR_DETECTION) { - buffer.append(std::to_string(sensorData.data[i])); + buffer.append(std::to_string(*data)); + if (i != dataLen - 1) { + buffer.append(","); } - buffer.append(","); + ++data; } buffer.append("\n"); return buffer; -- Gitee From 680d29603c249805df2ee24f49ce3df97e64480f Mon Sep 17 00:00:00 2001 From: wuzhihuitmac Date: Fri, 20 May 2022 08:47:15 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuzhihuitmac Change-Id: I7bd3450976e1d28ac9ba02dbc6048325aeec81ca --- services/sensor/src/client_info.cpp | 2 +- services/sensor/src/sensor_dump.cpp | 41 +++++++++++++++-------------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/services/sensor/src/client_info.cpp b/services/sensor/src/client_info.cpp index 2a69550a..5af8601d 100644 --- a/services/sensor/src/client_info.cpp +++ b/services/sensor/src/client_info.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * 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 diff --git a/services/sensor/src/sensor_dump.cpp b/services/sensor/src/sensor_dump.cpp index 0a6f64b0..a06006c4 100644 --- a/services/sensor/src/sensor_dump.cpp +++ b/services/sensor/src/sensor_dump.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * 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 @@ -30,29 +30,29 @@ constexpr HiLogLabel LABEL = { LOG_CORE, SensorsLogDomain::SENSOR_SERVICE, "Sens constexpr uint32_t MAX_DUMP_DATA_SIZE = 10; constexpr uint32_t MS_NS = 1000000; constexpr uint32_t ACCELEROMETER = 1; -constexpr uint32_t ACCELEROMETER_UNCALIBRATED = 281; -constexpr uint32_t LINEAR_ACCELERATION = 258; -constexpr uint32_t GRAVITY = 257; constexpr uint32_t GYROSCOPE = 2; -constexpr uint32_t GYROSCOPE_UNCALIBRATED = 263; -constexpr uint32_t SIGNIFICANT_MOTION = 264; -constexpr uint32_t PEDOMETER_DETECTION = 265; -constexpr uint32_t PEDOMETER = 266; -constexpr uint32_t AMBIENT_TEMPERATURE = 260; +constexpr uint32_t AMBIENT_LIGHT = 5; constexpr uint32_t MAGNETIC_FIELD = 6; -constexpr uint32_t MAGNETIC_FIELD_UNCALIBRATED = 261; -constexpr uint32_t HUMIDITY = 13; constexpr uint32_t BAROMETER = 8; -constexpr uint32_t DEVICE_ORIENTATION = 279; +constexpr uint32_t HALL = 10; +constexpr uint32_t PROXIMITY = 12; +constexpr uint32_t HUMIDITY = 13; constexpr uint32_t ORIENTATION = 256; +constexpr uint32_t GRAVITY = 257; +constexpr uint32_t LINEAR_ACCELERATION = 258; constexpr uint32_t ROTATION_VECTOR = 259; +constexpr uint32_t AMBIENT_TEMPERATURE = 260; +constexpr uint32_t MAGNETIC_FIELD_UNCALIBRATED = 261; constexpr uint32_t GAME_ROTATION_VECTOR = 262; +constexpr uint32_t GYROSCOPE_UNCALIBRATED = 263; +constexpr uint32_t SIGNIFICANT_MOTION = 264; +constexpr uint32_t PEDOMETER_DETECTION = 265; +constexpr uint32_t PEDOMETER = 266; constexpr uint32_t GEOMAGNETIC_ROTATION_VECTOR = 277; -constexpr uint32_t PROXIMITY = 12; -constexpr uint32_t AMBIENT_LIGHT = 5; -constexpr uint32_t HALL = 10; constexpr uint32_t HEART_RATE = 278; +constexpr uint32_t DEVICE_ORIENTATION = 279; constexpr uint32_t WEAR_DETECTION = 280; +constexpr uint32_t ACCELEROMETER_UNCALIBRATED = 281; enum { SOLITARIES_DIMENSION = 1, @@ -234,6 +234,7 @@ int32_t SensorDump::DataSizeBySensorId(uint32_t sensorId) case ACCELEROMETER_UNCALIBRATED: return UNCALIBRATED_DIMENSION; default: + SEN_HILOGW("sensorId: %{public}u,size: %{public}d", sensorId, COMMON_DIMENSION); return COMMON_DIMENSION; } } @@ -241,18 +242,18 @@ int32_t SensorDump::DataSizeBySensorId(uint32_t sensorId) std::string SensorDump::GetDataBySensorId(uint32_t sensorId, struct TransferSensorEvents &sensorData) { SEN_HILOGD("sensorId: %{public}u", sensorId); - std::string buffer; + std::string str; int32_t dataLen = DataSizeBySensorId(sensorId); auto data = reinterpret_cast(sensorData.data); for (int32_t i = 0; i < dataLen; ++i) { - buffer.append(std::to_string(*data)); + str.append(std::to_string(*data)); if (i != dataLen - 1) { - buffer.append(","); + str.append(","); } ++data; } - buffer.append("\n"); - return buffer; + str.append("\n"); + return str; } } // namespace Sensors } // namespace OHOS -- Gitee