123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /*
- * Copyright 2022 Google LLC. All Rights Reserved.
- *
- * 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 <chre_host/host_protocol_host.h>
- #include <chre_host/socket_client.h>
- #include "proto/capo.pb.h"
- using android::sp;
- using android::chre::HostProtocolHost;
- using android::chre::IChreMessageHandlers;
- using android::chre::SocketClient;
- // following convention of CHRE code.
- namespace fbs = ::chre::fbs;
- namespace android {
- namespace chre {
- #define NS_FROM_MS(x) ((x)*1000000)
- struct CapoMDParams {
- uint64_t still_time_threshold_ns;
- uint32_t window_width_ns;
- float motion_confidence_threshold;
- float still_confidence_threshold;
- float var_threshold;
- float var_threshold_delta;
- };
- class CapoDetector : public android::chre::SocketClient::ICallbacks,
- public android::chre::IChreMessageHandlers,
- public android::chre::SocketClient {
- public:
- // Typedef declaration for callback function.
- typedef std::function<void(uint8_t)> cb_fn_t;
- // Called when initializing connection with CHRE socket.
- static android::sp<CapoDetector> start();
- // Called when the socket is successfully (re-)connected.
- // Reset the position and try to send NanoappList request.
- void onConnected() override;
- // Called when we have failed to (re-)connect the socket after many attempts
- // and are giving up.
- void onConnectionAborted() override;
- // Invoked when the socket is disconnected, and this connection loss
- // was not the result of an explicit call to disconnect().
- // Reset the position while disconnecting.
- void onDisconnected() override;
- // Decode unix socket msgs to CHRE messages, and call the appropriate
- // callback depending on the CHRE message.
- void onMessageReceived(const void *data, size_t length) override;
- // Listen for messages from capo nanoapp and handle the message.
- void handleNanoappMessage(const ::chre::fbs::NanoappMessageT &message) override;
- // Handle the response of a NanoappList request.
- // Ensure that capo nanoapp is running.
- void handleNanoappListResponse(const ::chre::fbs::NanoappListResponseT &response) override;
- // Send enabling message to the nanoapp.
- void enable();
- // Get last carried position type.
- uint8_t getCarriedPosition() { return last_position_type_; }
- // Get the host endpoint.
- uint16_t getHostEndPoint() { return kHostEndpoint; }
- // Get the capo nanoapp ID.
- uint64_t getNanoppAppId() { return kCapoNanoappId; }
- // Set up callback_func_ if needed.
- void setCallback(cb_fn_t cb) { callback_func_ = cb; }
- private:
- // Nanoapp ID of capo, ref: go/nanoapp-id-tracker.
- static constexpr uint64_t kCapoNanoappId = 0x476f6f676c001020ULL;
- // String of socket name for connecting chre.
- static constexpr char kChreSocketName[] = "chre";
- // The host endpoint we use when sending message.
- // Set with 0x9020 based on 0x8000 AND capo_app_id(1020).
- // Ref: go/host-endpoint-id-tracker.
- static constexpr uint16_t kHostEndpoint = 0x9020;
- // Using for hal layer callback function.
- cb_fn_t callback_func_ = nullptr;
- // Last carried position received from the nano app
- capo::PositionType last_position_type_ = capo::PositionType::UNKNOWN;
- // Motion detector parameters for host-driven capo config
- const struct CapoMDParams mCapoDetectorMDParameters {
- .still_time_threshold_ns = NS_FROM_MS(500),
- .window_width_ns = NS_FROM_MS(100),
- .motion_confidence_threshold = 0.98f,
- .still_confidence_threshold = 0.99f,
- .var_threshold = 0.0125f,
- .var_threshold_delta = 0.0125f,
- };
- };
- } // namespace chre
- } // namespace android
|