Home | History | Annotate | Download | only in general_test
      1 /*
      2  * Copyright (C) 2017 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 #include <general_test/cell_info_cdma.h>
     17 
     18 namespace general_test {
     19 
     20 bool CellInfoCdma::validateIdentity(
     21     const struct chreWwanCellIdentityCdma identity) {
     22   bool valid = false;
     23   constexpr int32_t max = INT32_MAX;
     24 
     25   if (!isBoundedInt32(identity.networkId, 0, 65535, max)) {
     26     sendFatalFailureInt32(
     27         "Invalid CDMA Network Id: %d", identity.networkId);
     28   } else if (!isBoundedInt32(identity.systemId, 0, 32767, max)) {
     29     sendFatalFailureInt32(
     30         "Invalid CDMA System Id: %d", identity.systemId);
     31   } else if (!isBoundedInt32(identity.basestationId, 0, 65535, max)) {
     32     sendFatalFailureInt32("Invalid CDMA Base Station Id: %d",
     33                           identity.basestationId);
     34   } else if (!isBoundedInt32(identity.longitude, -2592000, 2592000, max)) {
     35     sendFatalFailureInt32("Invalid CDMA Longitude: %d", identity.longitude);
     36   } else if (!isBoundedInt32(identity.latitude, -1296000, 1296000, max)) {
     37     sendFatalFailureInt32("Invalid CDMA Latitude: %d", identity.latitude);
     38   } else {
     39     valid = true;
     40   }
     41 
     42   return valid;
     43 }
     44 
     45 bool CellInfoCdma::validateSignalStrengthCdma(
     46     const struct chreWwanSignalStrengthCdma strength) {
     47   bool valid = false;
     48 
     49   // TODO: Find exact limits on dbm and ecio
     50   if ((strength.dbm < 0) || (strength.dbm > 160)) {
     51     sendFatalFailureInt32("Invalid CDMA/CDMA dbm: %d", strength.dbm);
     52   } else if ((strength.ecio < 0) || (strength.ecio > 1600)) {
     53     sendFatalFailureInt32("Invalid CDMA/CDMA ecio: %d", strength.ecio);
     54   } else {
     55     valid = true;
     56   }
     57 
     58   return valid;
     59 }
     60 
     61 bool CellInfoCdma::validateSignalStrengthEvdo(
     62     const struct chreWwanSignalStrengthEvdo strength) {
     63   bool valid = false;
     64 
     65   // TODO: Find exact limits on dbm and ecio
     66   if ((strength.dbm < 0) || (strength.dbm > 160)) {
     67     sendFatalFailureInt32("Invalid CDMA/EVDO dbm: %d", strength.dbm);
     68   } else if ((strength.ecio < 0) || (strength.ecio > 1600)) {
     69     sendFatalFailureInt32("Invalid CDMA/EVDO ecio: %d", strength.ecio);
     70   } else if ((strength.signalNoiseRatio < 0)
     71              || (strength.signalNoiseRatio > 8)) {
     72     sendFatalFailureInt32("Invalid evdo signal noise ratio: %d",
     73                           strength.signalNoiseRatio);
     74   } else {
     75     valid = true;
     76   }
     77 
     78   return valid;
     79 }
     80 
     81 bool CellInfoCdma::validate(const struct chreWwanCellInfoCdma& cell) {
     82   return (validateIdentity(cell.cellIdentityCdma)
     83           && validateSignalStrengthCdma(cell.signalStrengthCdma)
     84           && validateSignalStrengthEvdo(cell.signalStrengthEvdo));
     85 }
     86 
     87 } // namespace general_test
     88