1 /*
2  * Copyright (c) 2023 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 #include "dev/graphic_dev.h"
16 #include "charger_log.h"
17 #include "dev/drm_driver.h"
18 #include "dev/fbdev_driver.h"
19 #include <unistd.h>
20 
21 namespace OHOS {
22 namespace PowerMgr {
MakeDrv(DevType devType)23 std::unique_ptr<DisplayDrv> GraphicDev::MakeDrv(DevType devType)
24 {
25     std::unique_ptr<DisplayDrv> drv = nullptr;
26     switch (devType) {
27         case DevType::DRM_DEVICE:
28             drv = std::make_unique<DrmDriver>();
29             break;
30         case DevType::FB_DEVICE:
31             drv = std::make_unique<FbdevDriver>();
32             break;
33         default:
34             BATTERY_HILOGE(FEATURE_CHARGING, "not support device type");
35             break;
36     }
37     return drv;
38 }
39 
Flip(const uint8_t * buf)40 void GraphicDev::Flip(const uint8_t* buf)
41 {
42     if (buf == nullptr) {
43         BATTERY_HILOGE(FEATURE_CHARGING, "buf is null pointer");
44         return;
45     }
46     if (drv_ != nullptr) {
47         drv_->Flip(buf);
48     }
49 }
50 
GetDevType()51 DevType GraphicDev::GetDevType()
52 {
53     if (access(DRM_DEV_PATH, 0) == 0) {
54         return DevType::DRM_DEVICE;
55     } else if (access(FB_DEV_PATH, 0) == 0) {
56         return DevType::FB_DEVICE;
57     }
58     return DevType::UNKNOW_DEVICE;
59 }
60 
Init()61 bool GraphicDev::Init()
62 {
63     drv_ = MakeDrv(GetDevType());
64     if (drv_ != nullptr) {
65         return drv_->Init();
66     }
67     return false;
68 }
69 
Blank(bool blank)70 void GraphicDev::Blank(bool blank)
71 {
72     if (drv_ != nullptr) {
73         drv_->Blank(blank);
74     }
75 }
76 
Exit()77 void GraphicDev::Exit()
78 {
79     if (drv_ != nullptr) {
80         drv_->Exit();
81     }
82 }
83 
GetScreenSize(uint16_t & w,uint16_t & h)84 void GraphicDev::GetScreenSize(uint16_t& w, uint16_t& h)
85 {
86     DisplayInfo dsInfo {0};
87     if (drv_ != nullptr) {
88         drv_->GetDisplayInfo(dsInfo);
89     }
90     w = dsInfo.width;
91     h = dsInfo.height;
92 }
93 } // namespace PowerMgr
94 } // namespace OHOS
95