From e5a511ed321d98d86cd753a29f06da977b04a38c Mon Sep 17 00:00:00 2001 From: hui1975 Date: Tue, 8 Nov 2022 19:32:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E6=97=A5=E5=BF=97=E4=B8=AD=E7=9A=84pa?= =?UTF-8?q?ram=E6=94=B9=E6=88=90sendFd;ReceiveData()=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E7=94=A8=E5=88=B0=EF=BC=8C=E5=88=A0=E9=99=A4?= =?UTF-8?q?;=E5=B0=86CreateSensorBasicChannel(MessageParcel=20&data)?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E4=BD=93=E6=94=BE=E5=9C=A8service=5Fstub?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hui1975 Change-Id: I4f4884993c5892848436eba310389473faf86481 --- services/sensor/src/sensor_service_stub.cpp | 19 +++++++--- utils/include/sensor_basic_data_channel.h | 3 +- utils/src/sensor_basic_data_channel.cpp | 39 +++------------------ 3 files changed, 21 insertions(+), 40 deletions(-) diff --git a/services/sensor/src/sensor_service_stub.cpp b/services/sensor/src/sensor_service_stub.cpp index 554843f2..f8a909ea 100644 --- a/services/sensor/src/sensor_service_stub.cpp +++ b/services/sensor/src/sensor_service_stub.cpp @@ -183,10 +183,21 @@ ErrCode SensorServiceStub::CreateDataChannelInner(MessageParcel &data, MessagePa (void)reply; sptr sensorChannel = new (std::nothrow) SensorBasicDataChannel(); CHKPR(sensorChannel, OBJECT_NULL); - auto ret = sensorChannel->CreateSensorBasicChannel(data); - if (ret != ERR_OK) { - SEN_HILOGE("CreateSensorBasicChannel ret:%{public}d", ret); - return OBJECT_NULL; + int32_t sendFd = sensorChannel->GetSendDataFd(); + if (sendFd != -1) { + SEN_HILOGD("sendFd already created, sendFd:%{public}d", sendFd); + } else { + int32_t tmpFd = data.ReadFileDescriptor(); + if (tmpFd < 0) { + SEN_HILOGE("read FileDescriptor is failed"); + return OBJECT_NULL; + } + sendFd = dup(tmpFd); + if (sendFd < 0) { + SEN_HILOGE("dup FileDescriptor is failed"); + return OBJECT_NULL; + } + sensorChannel->SetSendDataFd(sendFd); } sptr sensorClient = data.ReadRemoteObject(); CHKPR(sensorClient, OBJECT_NULL); diff --git a/utils/include/sensor_basic_data_channel.h b/utils/include/sensor_basic_data_channel.h index a98543c2..571089a2 100644 --- a/utils/include/sensor_basic_data_channel.h +++ b/utils/include/sensor_basic_data_channel.h @@ -31,14 +31,13 @@ public: SensorBasicDataChannel(); virtual ~SensorBasicDataChannel(); int32_t CreateSensorBasicChannel(); - int32_t CreateSensorBasicChannel(MessageParcel &data); int32_t DestroySensorBasicChannel(); int32_t GetSendDataFd() const; + void SetSendDataFd(int32_t sendFd); int32_t GetReceiveDataFd() const; int32_t SendToBinder(MessageParcel &data); void CloseSendFd(); int32_t SendData(const void *vaddr, size_t size); - int32_t ReceiveData(void *vaddr, size_t size); bool GetSensorStatus() const; void SetSensorStatus(bool isActive); const std::unordered_map &GetDataCacheBuf() const; diff --git a/utils/src/sensor_basic_data_channel.cpp b/utils/src/sensor_basic_data_channel.cpp index 3532b9cf..a35a2706 100755 --- a/utils/src/sensor_basic_data_channel.cpp +++ b/utils/src/sensor_basic_data_channel.cpp @@ -91,28 +91,6 @@ int32_t SensorBasicDataChannel::CreateSensorBasicChannel() return SENSOR_CHANNEL_SOCKET_CREATE_ERR; } -int32_t SensorBasicDataChannel::CreateSensorBasicChannel(MessageParcel &data) -{ - CALL_LOG_ENTER; - if (sendFd_ != -1) { - SEN_HILOGD("already create socketpair"); - return ERR_OK; - } - int32_t tmpFd = data.ReadFileDescriptor(); - if (tmpFd < 0) { - SEN_HILOGE("ReadFileDescriptor is failed"); - sendFd_ = -1; - return SENSOR_CHANNEL_DUP_ERR; - } - sendFd_ = dup(tmpFd); - if (sendFd_ < 0) { - SEN_HILOGE("dup FileDescriptor is failed"); - sendFd_ = -1; - return SENSOR_CHANNEL_DUP_ERR; - } - return ERR_OK; -} - SensorBasicDataChannel::~SensorBasicDataChannel() { DestroySensorBasicChannel(); @@ -147,7 +125,7 @@ int32_t SensorBasicDataChannel::SendData(const void *vaddr, size_t size) { CHKPR(vaddr, SENSOR_CHANNEL_SEND_ADDR_ERR); if (sendFd_ < 0) { - SEN_HILOGE("failed, param is invalid"); + SEN_HILOGE("failed, sendFd is invalid"); return SENSOR_CHANNEL_SEND_ADDR_ERR; } ssize_t length; @@ -163,21 +141,14 @@ int32_t SensorBasicDataChannel::SendData(const void *vaddr, size_t size) return ERR_OK; } -int32_t SensorBasicDataChannel::ReceiveData(void *vaddr, size_t size) +int32_t SensorBasicDataChannel::GetSendDataFd() const { - CHKPR(vaddr, SENSOR_CHANNEL_SEND_ADDR_ERR); - SEN_HILOGE("failed, vaddr is null or receiveFd_ invalid"); - return SENSOR_CHANNEL_RECEIVE_ADDR_ERR; - ssize_t length; - do { - length = recv(receiveFd_, vaddr, size, MSG_DONTWAIT); - } while (errno == EINTR); - return length; + return sendFd_; } -int32_t SensorBasicDataChannel::GetSendDataFd() const +void SensorBasicDataChannel::SetSendDataFd(int32_t sendFd) { - return sendFd_; + sendFd_ = sendFd; } int32_t SensorBasicDataChannel::GetReceiveDataFd() const -- Gitee