// // Copyright 2017, The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at: // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #include "android/os/parcel_uuid.h" using android::OK; using android::Parcel; using android::status_t; using ::bluetooth::Uuid; namespace android { namespace os { namespace { static uint64_t uuid_lsb(const Uuid& uuid) { uint64_t lsb = 0; auto uu = uuid.To128BitBE(); for (int i = 8; i <= 15; i++) { lsb <<= 8; lsb |= uu[i]; } return lsb; } static uint64_t uuid_msb(const Uuid& uuid) { uint64_t msb = 0; auto uu = uuid.To128BitBE(); for (int i = 0; i <= 7; i++) { msb <<= 8; msb |= uu[i]; } return msb; } } // namespace status_t ParcelUuid::writeToParcel(Parcel* parcel) const { status_t status = parcel->writeInt64(uuid_msb(uuid)); if (status != OK) return status; status = parcel->writeInt64(uuid_lsb(uuid)); return status; } status_t ParcelUuid::readFromParcel(const Parcel* parcel) { int64_t uuid_msb, uuid_lsb; status_t status = parcel->readInt64(&uuid_msb); if (status != OK) return status; status = parcel->readInt64(&uuid_lsb); if (status != OK) return status; std::array uu; for (int i = 0; i < 8; i++) { uu[7 - i] = (uuid_msb >> (8 * i)) & 0xFF; uu[15 - i] = (uuid_lsb >> (8 * i)) & 0xFF; } uuid = Uuid::From128BitBE(uu); return OK; } } // namespace os } // namespace android