Home | History | Annotate | Download | only in nanoapp
      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 
     17 #include "chre/util/nanoapp/wifi.h"
     18 
     19 #include <cctype>
     20 #include <cinttypes>
     21 #include <cstdio>
     22 #include <cstring>
     23 
     24 namespace chre {
     25 
     26 bool parseSsidToStr(char *buffer, size_t bufferLen,
     27                     const uint8_t *ssid, uint8_t ssidLen) {
     28   // Ensure that there is enough space in the buffer to copy the SSID and
     29   // null-terminate it.
     30   bool success = (bufferLen >= static_cast<size_t>(ssidLen + 1));
     31 
     32   if (success) {
     33     // Verify that the ssid is entirely printable characters and ASCII spaces.
     34     for (uint8_t i = 0; i < ssidLen; i++) {
     35       if (!isgraph(ssid[i]) && ssid[i] != ' ') {
     36         success = false;
     37         break;
     38       }
     39     }
     40   }
     41 
     42   if (success) {
     43     // Copy the SSID to the buffer and null-terminate.
     44     memcpy(buffer, ssid, ssidLen + 1);
     45     buffer[ssidLen] = '\0';
     46   }
     47 
     48   return success;
     49 }
     50 
     51 bool parseBssidToStr(const uint8_t bssid[CHRE_WIFI_BSSID_LEN],
     52                      char *buffer, size_t bufferLen) {
     53   const char *kFormat = "%02" PRIx8 ":%02" PRIx8 ":%02" PRIx8
     54                         ":%02" PRIx8 ":%02" PRIx8 ":%02" PRIx8;
     55 
     56   bool success = false;
     57   if (bufferLen >= kBssidStrLen) {
     58     success = true;
     59     snprintf(buffer, bufferLen, kFormat, bssid[0], bssid[1], bssid[2],
     60              bssid[3], bssid[4], bssid[5]);
     61   }
     62 
     63   return success;
     64 }
     65 
     66 const char *parseChreWifiBand(uint8_t band) {
     67   switch (band) {
     68     case CHRE_WIFI_BAND_2_4_GHZ:
     69       return "2.4GHz";
     70     case CHRE_WIFI_BAND_MASK_5_GHZ:
     71       return "5GHz";
     72     default:
     73       return "<invalid>";
     74   }
     75 }
     76 
     77 }  // namespace chre
     78