Home | History | Annotate | Download | only in default
      1 /*
      2  * Copyright (C) 2016 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 #define LOG_TAG "GnssHAL_GnssNavigationMessageInterface"
     18 
     19 #include <log/log.h>
     20 
     21 #include "GnssNavigationMessage.h"
     22 
     23 namespace android {
     24 namespace hardware {
     25 namespace gnss {
     26 namespace V1_0 {
     27 namespace implementation {
     28 
     29 sp<IGnssNavigationMessageCallback> GnssNavigationMessage::sGnssNavigationMsgCbIface = nullptr;
     30 
     31 GpsNavigationMessageCallbacks GnssNavigationMessage::sGnssNavigationMessageCb = {
     32     .size = sizeof(GpsNavigationMessageCallbacks),
     33     .navigation_message_callback = nullptr,
     34     .gnss_navigation_message_callback = gnssNavigationMessageCb
     35 };
     36 
     37 GnssNavigationMessage::GnssNavigationMessage(
     38         const GpsNavigationMessageInterface* gpsNavigationMessageIface) :
     39     mGnssNavigationMessageIface(gpsNavigationMessageIface) {}
     40 
     41 void GnssNavigationMessage::gnssNavigationMessageCb(LegacyGnssNavigationMessage* message) {
     42     if (sGnssNavigationMsgCbIface == nullptr) {
     43         ALOGE("%s: GnssNavigation Message Callback Interface configured incorrectly", __func__);
     44         return;
     45     }
     46 
     47     if (message == nullptr) {
     48         ALOGE("%s, received invalid GnssNavigationMessage from GNSS HAL", __func__);
     49         return;
     50     }
     51 
     52     IGnssNavigationMessageCallback::GnssNavigationMessage navigationMsg;
     53 
     54     navigationMsg.svid = message->svid;
     55     navigationMsg.type =
     56             static_cast<IGnssNavigationMessageCallback::GnssNavigationMessageType>(message->type);
     57     navigationMsg.status = message->status;
     58     navigationMsg.messageId = message->message_id;
     59     navigationMsg.submessageId = message->submessage_id;
     60     navigationMsg.data.setToExternal(message->data, message->data_length);
     61 
     62     auto ret = sGnssNavigationMsgCbIface->gnssNavigationMessageCb(navigationMsg);
     63     if (!ret.isOk()) {
     64         ALOGE("%s: Unable to invoke callback", __func__);
     65     }
     66 }
     67 
     68 // Methods from ::android::hardware::gnss::V1_0::IGnssNavigationMessage follow.
     69 Return<GnssNavigationMessage::GnssNavigationMessageStatus> GnssNavigationMessage::setCallback(
     70         const sp<IGnssNavigationMessageCallback>& callback)  {
     71     if (mGnssNavigationMessageIface == nullptr) {
     72         ALOGE("%s: GnssNavigationMessage not available", __func__);
     73         return GnssNavigationMessageStatus::ERROR_GENERIC;
     74     }
     75 
     76     sGnssNavigationMsgCbIface = callback;
     77 
     78     return static_cast<GnssNavigationMessage::GnssNavigationMessageStatus>(
     79             mGnssNavigationMessageIface->init(&sGnssNavigationMessageCb));
     80 }
     81 
     82 Return<void> GnssNavigationMessage::close()  {
     83     if (mGnssNavigationMessageIface == nullptr) {
     84         ALOGE("%s: GnssNavigationMessage not available", __func__);
     85     } else {
     86         mGnssNavigationMessageIface->close();
     87     }
     88     return Void();
     89 }
     90 
     91 }  // namespace implementation
     92 }  // namespace V1_0
     93 }  // namespace gnss
     94 }  // namespace hardware
     95 }  // namespace android
     96