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/threads.h> 246c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 2526fddcd74252bdda95dd7c3f819353e79c622012Mathias Agopian#include "LinearTransform.h" 2626fddcd74252bdda95dd7c3f819353e79c622012Mathias Agopian 276c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chennamespace android { 286c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 296c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chenclass CommonClock { 306c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen public: 316c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen CommonClock(); 326c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 336c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen bool init(uint64_t local_freq); 346c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 356c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen status_t localToCommon(int64_t local, int64_t *common_out) const; 366c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen status_t commonToLocal(int64_t common, int64_t *local_out) const; 376c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen int64_t localDurationToCommonDuration(int64_t localDur) const; 386c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen uint64_t getCommonFreq() const { return kCommonFreq; } 396c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen bool isValid() const { return cur_trans_valid_; } 406c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen status_t setSlew(int64_t change_time, int32_t ppm); 416c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen void setBasis(int64_t local, int64_t common); 426c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen void resetBasis(); 436c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen private: 446c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen mutable Mutex lock_; 456c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 466c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen int32_t cur_slew_; 476c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen uint32_t local_to_common_freq_numer_; 486c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen uint32_t local_to_common_freq_denom_; 496c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 506c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen LinearTransform duration_trans_; 516c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen LinearTransform cur_trans_; 526c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen bool cur_trans_valid_; 536c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 546c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen static const uint64_t kCommonFreq = 1000000ull; 556c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen}; 566c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen 576c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen} // namespace android 586c929510474caa14dc9d56826b2c65552861d6b3Mike J. Chen#endif // __COMMON_CLOCK_H__ 59