1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 //! Implementation of IMicrofuchsiaService that runs microfuchsia in AVF when
18 //! created.
19 
20 use crate::instance_manager::InstanceManager;
21 use crate::instance_starter::MicrofuchsiaInstance;
22 use android_system_microfuchsiad::aidl::android::system::microfuchsiad::IMicrofuchsiaService::{
23     BnMicrofuchsiaService, IMicrofuchsiaService,
24 };
25 use anyhow::Context;
26 use binder::{self, BinderFeatures, Interface, Strong};
27 
28 #[allow(unused)]
29 pub struct MicrofuchsiaService {
30     instance_manager: InstanceManager,
31     microfuchsia: MicrofuchsiaInstance,
32 }
33 
new_binder(mut instance_manager: InstanceManager) -> Strong<dyn IMicrofuchsiaService>34 pub fn new_binder(mut instance_manager: InstanceManager) -> Strong<dyn IMicrofuchsiaService> {
35     let microfuchsia = instance_manager.start_instance().context("Starting Microfuchsia").unwrap();
36     let service = MicrofuchsiaService { instance_manager, microfuchsia };
37     BnMicrofuchsiaService::new_binder(service, BinderFeatures::default())
38 }
39 
40 impl Interface for MicrofuchsiaService {}
41 
42 impl IMicrofuchsiaService for MicrofuchsiaService {}
43