• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 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 #ifndef DVB_MANAGER_H_
18 #define DVB_MANAGER_H_
19 
20 #include <jni.h>
21 #include <map>
22 
23 #include "mutex.h"
24 #include "tunertvinput_jni.h"
25 
26 class DvbManager {
27     static const int NUM_POLLFDS = 1;
28     static const int FE_LOCK_CHECK_INTERNAL_US = 100 * 1000;
29     static const int FE_CONSECUTIVE_LOCK_SUCCESS_COUNT = 1;
30     static const int DVB_ERROR_RETRY_INTERVAL_MS = 100 * 1000;
31     static const int DVB_TUNE_STOP_DELAY_MS = 100 * 1000;
32     static const int PAT_PID = 0;
33 
34     static const int FILTER_TYPE_OTHER =
35             com_android_usbtuner_TunerHal_FILTER_TYPE_OTHER;
36     static const int FILTER_TYPE_AUDIO =
37             com_android_usbtuner_TunerHal_FILTER_TYPE_AUDIO;
38     static const int FILTER_TYPE_VIDEO =
39             com_android_usbtuner_TunerHal_FILTER_TYPE_VIDEO;
40     static const int FILTER_TYPE_PCR =
41             com_android_usbtuner_TunerHal_FILTER_TYPE_PCR;
42 
43     int mFeFd;
44     int mDemuxFd;
45     int mDvrFd;
46     int mPatFilterFd;
47     bool mFeHasLock;
48     std::map<int, int> mPidFilters;
49     Mutex mFilterLock;
50     jmethodID mOpenDvbFrontEndMethodID;
51     jmethodID mOpenDvbDemuxMethodID;
52     jmethodID mOpenDvbDvrMethodID;
53 
54 public:
55     DvbManager(JNIEnv *env, jobject thiz);
56     ~DvbManager();
57     int tune(JNIEnv *env, jobject thiz,
58             const int frequency, const char *modulationStr, int timeout_ms);
59     int stopTune();
60     int readTsStream(JNIEnv *env, jobject thiz,
61             uint8_t *tsBuffer, int tsBufferSize, int timeout_ms);
62     int startTsPidFilter(JNIEnv *env, jobject thiz, int pid, int filterType);
63     void closeAllDvbPidFilter();
64 
65 private:
66     int openDvbFe(JNIEnv *env, jobject thiz);
67     int openDvbDvr(JNIEnv *env, jobject thiz);
68     void closePatFilter();
69     void closeDvbFe();
70     void closeDvbDvr();
71     void reset();
72     void resetExceptFe();
73     bool isFeLocked();
74     // Call to java method
75     int openDvbFeFromSystemApi(JNIEnv *env, jobject thiz);
76     int openDvbDemuxFromSystemApi(JNIEnv *env, jobject thiz);
77     int openDvbDvrFromSystemApi(JNIEnv *env, jobject thiz);
78 };
79 
80 #endif  // DVB_MANAGER_H_
81