1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <hdf_log.h>
17 #include <hdf_base.h>
18 #include <osal_mem.h>
19 #include <hdf_device_desc.h>
20 #include "camera_host_service_stub.h"
21
22 #define HDF_LOG_TAG camera_service
23
24 using HdfCameraService = struct _HdfCameraService {
25 struct IDeviceIoService ioservice;
26 void *instance;
27 };
28
CameraServiceDispatch(struct HdfDeviceIoClient * client,int cmdId,struct HdfSBuf * data,struct HdfSBuf * reply)29 static int32_t CameraServiceDispatch(struct HdfDeviceIoClient *client, int cmdId,
30 struct HdfSBuf *data, struct HdfSBuf *reply)
31 {
32 HdfCameraService *hdfCameraService = CONTAINER_OF(client->device->service, HdfCameraService, ioservice);
33 return CameraHostServiceOnRemoteRequest(hdfCameraService->instance, cmdId, data, reply);
34 }
35
HdfCameraHostDriverInit(struct HdfDeviceObject * deviceObject)36 int HdfCameraHostDriverInit(struct HdfDeviceObject *deviceObject)
37 {
38 return HDF_SUCCESS;
39 }
40
HdfCameraHostDriverBind(HdfDeviceObject * deviceObject)41 int HdfCameraHostDriverBind(HdfDeviceObject *deviceObject)
42 {
43 HDF_LOGI("HdfCameraHostDriverBind enter!");
44 if (deviceObject == nullptr) {
45 HDF_LOGE("HdfCameraHostDriverBind: HdfDeviceObject is NULL !");
46 return HDF_FAILURE;
47 }
48
49 HdfCameraService *hdfCameraService =
50 reinterpret_cast<HdfCameraService *>(OsalMemAlloc(sizeof(HdfCameraService)));
51 if (hdfCameraService == nullptr) {
52 HDF_LOGE("HdfCameraHostDriverBind OsalMemAlloc HdfCameraService failed!");
53 return HDF_FAILURE;
54 }
55
56 hdfCameraService->ioservice.Dispatch = CameraServiceDispatch;
57 hdfCameraService->ioservice.Open = nullptr;
58 hdfCameraService->ioservice.Release = nullptr;
59 hdfCameraService->instance = CameraHostStubInstance();
60
61 deviceObject->service = &hdfCameraService->ioservice;
62 return HDF_SUCCESS;
63 }
64
HdfCameraHostDriverRelease(HdfDeviceObject * deviceObject)65 void HdfCameraHostDriverRelease(HdfDeviceObject *deviceObject)
66 {
67 if (deviceObject == nullptr || deviceObject->service == nullptr ) {
68 HDF_LOGE("HdfCameraHostDriverRelease: deviceObject or deviceObject->service is NULL!");
69 return;
70 }
71 HdfCameraService *hdfCameraService = CONTAINER_OF(deviceObject->service, HdfCameraService, ioservice);
72 if (hdfCameraService == nullptr) {
73 HDF_LOGE("HdfCameraHostDriverRelease: hdfCameraService is NULL!");
74 return;
75 }
76 OsalMemFree(hdfCameraService);
77 }
78
79 struct HdfDriverEntry g_cameraHostDriverEntry = {
80 .moduleVersion = 1,
81 .moduleName = "camera_service",
82 .Bind = HdfCameraHostDriverBind,
83 .Init = HdfCameraHostDriverInit,
84 .Release = HdfCameraHostDriverRelease,
85 };
86
87 #ifndef __cplusplus
88 extern "C" {
89 #endif
90
91 HDF_INIT(g_cameraHostDriverEntry);
92
93 #ifndef __cplusplus
94 }
95 #endif
96