16c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen/* 26c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * Copyright (C) 2012 The Android Open Source Project 36c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * 46c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * Licensed under the Apache License, Version 2.0 (the "License"); 56c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * you may not use this file except in compliance with the License. 66c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * You may obtain a copy of the License at 76c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * 86c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * http://www.apache.org/licenses/LICENSE-2.0 96c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * 106c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * Unless required by applicable law or agreed to in writing, software 116c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * distributed under the License is distributed on an "AS IS" BASIS, 126c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * See the License for the specific language governing permissions and 146c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen * limitations under the License. 156c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen */ 166c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 176c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen#ifndef __COMMON_CLOCK_H__ 186c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen#define __COMMON_CLOCK_H__ 196c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 206c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen#include <stdint.h> 216c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 226c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen#include <utils/Errors.h> 236c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen#include <utils/LinearTransform.h> 246c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen#include <utils/threads.h> 256c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 266c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chennamespace android { 276c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 286c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chenclass CommonClock { 296c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen public: 306c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen CommonClock(); 316c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 326c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen bool init(uint64_t local_freq); 336c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 346c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen status_t localToCommon(int64_t local, int64_t *common_out) const; 356c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen status_t commonToLocal(int64_t common, int64_t *local_out) const; 366c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen int64_t localDurationToCommonDuration(int64_t localDur) const; 376c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen uint64_t getCommonFreq() const { return kCommonFreq; } 386c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen bool isValid() const { return cur_trans_valid_; } 396c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen status_t setSlew(int64_t change_time, int32_t ppm); 406c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen void setBasis(int64_t local, int64_t common); 416c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen void resetBasis(); 426c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen private: 436c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen mutable Mutex lock_; 446c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 456c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen int32_t cur_slew_; 466c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen uint32_t local_to_common_freq_numer_; 476c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen uint32_t local_to_common_freq_denom_; 486c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 496c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen LinearTransform duration_trans_; 506c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen LinearTransform cur_trans_; 516c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen bool cur_trans_valid_; 526c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 536c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen static const uint64_t kCommonFreq = 1000000ull; 546c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen}; 556c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 566c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen} // namespace android 576c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen#endif // __COMMON_CLOCK_H__ 58