• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 package com.android.server.wifi;
18 
19 import android.annotation.NonNull;
20 import android.hardware.wifi.V1_6.IWifiChip;
21 
22 import org.json.JSONArray;
23 import org.json.JSONException;
24 import org.json.JSONObject;
25 
26 import java.util.ArrayList;
27 
28 /**
29  * Utility methods for HalDeviceManager.
30  */
31 public class HalDeviceManagerUtil {
32     static class StaticChipInfo {
33         private int mChipId;
34         private long mChipCapabilities;
35         private @NonNull ArrayList<android.hardware.wifi.V1_6.IWifiChip.ChipMode> mAvailableModes =
36                 new ArrayList<>();
37 
StaticChipInfo( int chipId, long chipCapabilities, @NonNull ArrayList<android.hardware.wifi.V1_6.IWifiChip.ChipMode> availableModes)38         StaticChipInfo(
39                 int chipId,
40                 long chipCapabilities,
41                 @NonNull ArrayList<android.hardware.wifi.V1_6.IWifiChip.ChipMode> availableModes) {
42             mChipId = chipId;
43             mChipCapabilities = chipCapabilities;
44             if (availableModes != null) {
45                 mAvailableModes = availableModes;
46             }
47         }
48 
getChipId()49         int getChipId() {
50             return mChipId;
51         }
52 
getChipCapabilities()53         long getChipCapabilities() {
54             return mChipCapabilities;
55         }
56 
getAvailableModes()57         ArrayList<android.hardware.wifi.V1_6.IWifiChip.ChipMode> getAvailableModes() {
58             return mAvailableModes;
59         }
60     }
61 
62     private static final String KEY_CHIP_ID = "chipId";
63     private static final String KEY_CHIP_CAPABILITIES = "chipCapabilities";
64     private static final String KEY_AVAILABLE_MODES = "availableModes";
65 
staticChipInfoToJson(@onNull StaticChipInfo staticChipInfo)66     static JSONObject staticChipInfoToJson(@NonNull StaticChipInfo staticChipInfo)
67             throws JSONException {
68         JSONObject jsonObject = new JSONObject();
69         jsonObject.put(KEY_CHIP_ID, staticChipInfo.getChipId());
70         jsonObject.put(KEY_CHIP_CAPABILITIES, staticChipInfo.getChipCapabilities());
71         JSONArray availableModesJson = new JSONArray();
72         for (android.hardware.wifi.V1_6.IWifiChip.ChipMode mode
73                 : staticChipInfo.getAvailableModes()) {
74             availableModesJson.put(chipModeToJson(mode));
75         }
76         jsonObject.put(KEY_AVAILABLE_MODES, availableModesJson);
77         return jsonObject;
78     }
79 
jsonToStaticChipInfo(JSONObject jsonObject)80     static StaticChipInfo jsonToStaticChipInfo(JSONObject jsonObject) throws JSONException {
81         ArrayList<IWifiChip.ChipMode> availableModes =
82                 new ArrayList<>();
83         int chipId = jsonObject.getInt(KEY_CHIP_ID);
84         long chipCapabilities = jsonObject.getLong(KEY_CHIP_CAPABILITIES);
85         JSONArray modesJson = jsonObject.getJSONArray(KEY_AVAILABLE_MODES);
86         for (int i = 0; i < modesJson.length(); i++) {
87             availableModes.add(jsonToChipMode(modesJson.getJSONObject(i)));
88         }
89         return new StaticChipInfo(chipId, chipCapabilities, availableModes);
90     }
91 
92     private static final String KEY_ID = "id";
93     private static final String KEY_AVAILABLE_COMBINATIONS = "availableCombinations";
94 
chipModeToJson(android.hardware.wifi.V1_6.IWifiChip.ChipMode chipMode)95     private static JSONObject chipModeToJson(android.hardware.wifi.V1_6.IWifiChip.ChipMode chipMode)
96             throws JSONException {
97         JSONObject jsonObject = new JSONObject();
98         jsonObject.put(KEY_ID, chipMode.id);
99         JSONArray availableCombinationsJson = new JSONArray();
100         for (IWifiChip.ChipConcurrencyCombination combo
101                 : chipMode.availableCombinations) {
102             availableCombinationsJson.put(chipConcurrencyCombinationToJson(combo));
103         }
104         jsonObject.put(KEY_AVAILABLE_COMBINATIONS, availableCombinationsJson);
105         return jsonObject;
106     }
107 
jsonToChipMode( JSONObject jsonObject)108     private static android.hardware.wifi.V1_6.IWifiChip.ChipMode jsonToChipMode(
109             JSONObject jsonObject) throws JSONException  {
110         android.hardware.wifi.V1_6.IWifiChip.ChipMode chipMode =
111                 new android.hardware.wifi.V1_6.IWifiChip.ChipMode();
112         chipMode.id = jsonObject.getInt(KEY_ID);
113         JSONArray availableCombinationsJson =
114                 jsonObject.getJSONArray(KEY_AVAILABLE_COMBINATIONS);
115         for (int i = 0; i < availableCombinationsJson.length(); i++) {
116             chipMode.availableCombinations.add(jsonToChipConcurrencyCombination(
117                     availableCombinationsJson.getJSONObject(i)));
118         }
119         return chipMode;
120     }
121 
122     private static final String KEY_CONCURRENCY_LIMITS = "limits";
123 
chipConcurrencyCombinationToJson( IWifiChip.ChipConcurrencyCombination combo)124     private static JSONObject chipConcurrencyCombinationToJson(
125             IWifiChip.ChipConcurrencyCombination combo) throws JSONException {
126         JSONObject jsonObject = new JSONObject();
127         JSONArray limitsJson = new JSONArray();
128         for (IWifiChip.ChipConcurrencyCombinationLimit limit : combo.limits) {
129             limitsJson.put(chipConcurrencyCombinationLimitToJson(limit));
130         }
131         jsonObject.put(KEY_CONCURRENCY_LIMITS, limitsJson);
132         return jsonObject;
133     }
134 
jsonToChipConcurrencyCombination( JSONObject jsonObject)135     private static IWifiChip.ChipConcurrencyCombination jsonToChipConcurrencyCombination(
136             JSONObject jsonObject) throws JSONException {
137         IWifiChip.ChipConcurrencyCombination combo = new IWifiChip.ChipConcurrencyCombination();
138         combo.limits = new ArrayList<>();
139         JSONArray limitsJson = jsonObject.getJSONArray(KEY_CONCURRENCY_LIMITS);
140         for (int i = 0; i < limitsJson.length(); i++) {
141             combo.limits.add(
142                     jsonToChipConcurrencyCombinationLimit(limitsJson.getJSONObject(i)));
143         }
144         return combo;
145     }
146 
147     private static final String KEY_MAX_IFACES = "maxIfaces";
148     private static final String KEY_TYPES = "types";
149 
chipConcurrencyCombinationLimitToJson( IWifiChip.ChipConcurrencyCombinationLimit limit)150     private static JSONObject chipConcurrencyCombinationLimitToJson(
151             IWifiChip.ChipConcurrencyCombinationLimit limit) throws JSONException {
152         JSONObject jsonObject = new JSONObject();
153         jsonObject.put(KEY_MAX_IFACES, limit.maxIfaces);
154         jsonObject.put(KEY_TYPES, new JSONArray(limit.types));
155         return jsonObject;
156     }
157 
jsonToChipConcurrencyCombinationLimit( JSONObject jsonObject)158     private static IWifiChip.ChipConcurrencyCombinationLimit jsonToChipConcurrencyCombinationLimit(
159             JSONObject jsonObject) throws JSONException {
160         IWifiChip.ChipConcurrencyCombinationLimit
161                 limit = new IWifiChip.ChipConcurrencyCombinationLimit();
162         limit.maxIfaces = jsonObject.getInt(KEY_MAX_IFACES);
163         limit.types = new ArrayList<>();
164         JSONArray limitsJson = jsonObject.getJSONArray(KEY_TYPES);
165         for (int i = 0; i < limitsJson.length(); i++) {
166             limit.types.add(limitsJson.getInt(i));
167         }
168         return limit;
169     }
170 }
171 
172