summaryrefslogtreecommitdiff
Diffstat
-rw-r--r--Android.mk26
-rw-r--r--tv_input.cpp246
-rw-r--r--tvapi/Android.mk1
-rw-r--r--tvapi/android/Android.mk1
-rw-r--r--tvapi/android/include/ITv.h51
-rw-r--r--tvapi/android/include/ITvClient.h30
-rw-r--r--tvapi/android/include/ITvService.h35
-rw-r--r--tvapi/android/include/Tv.h82
-rw-r--r--tvapi/android/include/tvcmd.h594
-rw-r--r--tvapi/android/jni/Android.mk66
-rw-r--r--tvapi/android/jni/android_amlogic_tv.cpp456
-rw-r--r--tvapi/android/jni/cfbc_jni.cpp167
-rw-r--r--tvapi/android/jni/cfbc_test.cpp43
-rw-r--r--tvapi/android/libtvbinder/Android.mk24
-rw-r--r--tvapi/android/libtvbinder/ITv.cpp145
-rw-r--r--tvapi/android/libtvbinder/ITvClient.cpp59
-rw-r--r--tvapi/android/libtvbinder/ITvService.cpp51
-rw-r--r--tvapi/android/libtvbinder/Tv.cpp189
-rw-r--r--tvapi/android/tvserver/Android.mk85
-rw-r--r--tvapi/android/tvserver/TvService.cpp4375
-rw-r--r--tvapi/android/tvserver/TvService.h83
-rw-r--r--tvapi/android/tvserver/main.cpp23
-rw-r--r--tvapi/build/include/.gitignore0
-rw-r--r--tvapi/build/include/xxxconfig.h1
-rw-r--r--tvapi/docs/TVMiddleware初期.wps252
-rw-r--r--tvapi/docs/tv.uml6093
-rw-r--r--tvapi/libtv/Android.mk224
-rw-r--r--tvapi/libtv/audio/audio_alsa.cpp1213
-rw-r--r--tvapi/libtv/audio/audio_alsa.h131
-rw-r--r--tvapi/libtv/audio/audio_android.cpp1035
-rw-r--r--tvapi/libtv/audio/audio_android.h79
-rw-r--r--tvapi/libtv/audio/audio_android_effect.cpp591
-rw-r--r--tvapi/libtv/audio/audio_android_effect.h66
-rw-r--r--tvapi/libtv/audio/audio_api.cpp2470
-rw-r--r--tvapi/libtv/audio/audio_api.h324
-rw-r--r--tvapi/libtv/audio/audio_effect.cpp228
-rw-r--r--tvapi/libtv/audio/audio_effect.h32
-rw-r--r--tvapi/libtv/include/amstream.h263
-rw-r--r--tvapi/libtv/include/amvecm.h68
-rw-r--r--tvapi/libtv/include/cm.h153
-rw-r--r--tvapi/libtv/include/hdmirx_cec.h331
-rw-r--r--tvapi/libtv/include/ve.h219
-rw-r--r--tvapi/libtv/projects/Android.mk1
-rw-r--r--tvapi/libtv/projects/haier_360_v1/CTvHaierDtmb360.cpp83
-rw-r--r--tvapi/libtv/projects/haier_360_v1/CTvHaierDtmb360.h18
-rw-r--r--tvapi/libtv/projects/haier_360_v1/haier_360_v1.h0
-rw-r--r--tvapi/libtv/projects/ref_n300_v1/Android.mk48
-rw-r--r--tvapi/libtv/projects/ref_n300_v1/CTvRefN300.cpp12
-rw-r--r--tvapi/libtv/projects/ref_n300_v1/CTvRefN300.h8
-rw-r--r--tvapi/libtv/projects/ref_n300_v1/ref_n300_v1.h1
-rw-r--r--tvapi/libtv/projects/skyworth_n310_v1/Android.mk48
-rw-r--r--tvapi/libtv/projects/skyworth_n310_v1/CTvSkyworthDtmbN310.cpp88
-rw-r--r--tvapi/libtv/projects/skyworth_n310_v1/CTvSkyworthDtmbN310.h18
-rw-r--r--tvapi/libtv/projects/skyworth_n310_v1/skyworth_n310_v1.h1
-rw-r--r--tvapi/libtv/tv/AutoBackLight.cpp213
-rw-r--r--tvapi/libtv/tv/AutoBackLight.h49
-rw-r--r--tvapi/libtv/tv/CAv.cpp381
-rw-r--r--tvapi/libtv/tv/CAv.h148
-rw-r--r--tvapi/libtv/tv/CFbcCommunication.cpp1700
-rw-r--r--tvapi/libtv/tv/CFbcCommunication.h382
-rw-r--r--tvapi/libtv/tv/CFrontEnd.cpp568
-rw-r--r--tvapi/libtv/tv/CFrontEnd.h160
-rw-r--r--tvapi/libtv/tv/CTv.cpp5385
-rw-r--r--tvapi/libtv/tv/CTv.h636
-rw-r--r--tvapi/libtv/tv/CTvBooking.cpp162
-rw-r--r--tvapi/libtv/tv/CTvBooking.h84
-rw-r--r--tvapi/libtv/tv/CTvDmx.cpp24
-rw-r--r--tvapi/libtv/tv/CTvDmx.h18
-rw-r--r--tvapi/libtv/tv/CTvEpg.cpp216
-rw-r--r--tvapi/libtv/tv/CTvEpg.h160
-rw-r--r--tvapi/libtv/tv/CTvEv.cpp11
-rw-r--r--tvapi/libtv/tv/CTvEv.h192
-rw-r--r--tvapi/libtv/tv/CTvLog.cpp20
-rw-r--r--tvapi/libtv/tv/CTvLog.h35
-rw-r--r--tvapi/libtv/tv/CTvRecord.cpp276
-rw-r--r--tvapi/libtv/tv/CTvRecord.h47
-rw-r--r--tvapi/libtv/tv/CTvSatellite.h22
-rw-r--r--tvapi/libtv/tv/CTvScanner.cpp1146
-rw-r--r--tvapi/libtv/tv/CTvScanner.h183
-rw-r--r--tvapi/libtv/tv/CTvScreenCapture.cpp530
-rw-r--r--tvapi/libtv/tv/CTvScreenCapture.h177
-rw-r--r--tvapi/libtv/tv/CTvSubtitle.cpp348
-rw-r--r--tvapi/libtv/tv/CTvSubtitle.h236
-rw-r--r--tvapi/libtv/tv/CTvTime.cpp15
-rw-r--r--tvapi/libtv/tv/CTvTime.h102
-rw-r--r--tvapi/libtv/tv/CTvVchipCheck.cpp161
-rw-r--r--tvapi/libtv/tv/CTvVchipCheck.h50
-rw-r--r--tvapi/libtv/tv/CUpgradeFBC.cpp556
-rw-r--r--tvapi/libtv/tv/CUpgradeFBC.h143
-rw-r--r--tvapi/libtv/tvconfig/CIniFile.cpp353
-rw-r--r--tvapi/libtv/tvconfig/CIniFile.h73
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.conf30
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.cpp53
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.h20
-rw-r--r--tvapi/libtv/tvdb/CTvChannel.cpp347
-rw-r--r--tvapi/libtv/tvdb/CTvChannel.h288
-rw-r--r--tvapi/libtv/tvdb/CTvDatabase.cpp259
-rw-r--r--tvapi/libtv/tvdb/CTvDatabase.h96
-rw-r--r--tvapi/libtv/tvdb/CTvDimension.cpp644
-rw-r--r--tvapi/libtv/tvdb/CTvDimension.h99
-rw-r--r--tvapi/libtv/tvdb/CTvEvent.cpp241
-rw-r--r--tvapi/libtv/tvdb/CTvEvent.h86
-rw-r--r--tvapi/libtv/tvdb/CTvGroup.cpp44
-rw-r--r--tvapi/libtv/tvdb/CTvGroup.h31
-rw-r--r--tvapi/libtv/tvdb/CTvProgram.cpp883
-rw-r--r--tvapi/libtv/tvdb/CTvProgram.h536
-rw-r--r--tvapi/libtv/tvdb/CTvRegion.cpp183
-rw-r--r--tvapi/libtv/tvdb/CTvRegion.h43
-rw-r--r--tvapi/libtv/tvin/CHDMIRxCEC.cpp654
-rw-r--r--tvapi/libtv/tvin/CSourceConnectDetect.cpp312
-rw-r--r--tvapi/libtv/tvin/CTvin.cpp3292
-rw-r--r--tvapi/libtv/tvin/CTvin.h1379
-rw-r--r--tvapi/libtv/tvsetting/CBlobDevice.cpp27
-rw-r--r--tvapi/libtv/tvsetting/CBlobDevice.h51
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceE2prom.cpp353
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceE2prom.h77
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceFile.cpp80
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceFile.h27
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceRam.cpp129
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceRam.h38
-rw-r--r--tvapi/libtv/tvsetting/CTvSetting.cpp2212
-rw-r--r--tvapi/libtv/tvsetting/CTvSetting.h251
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingCfg.h371
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingDeviceFactory.cpp187
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingDeviceFactory.h23
-rw-r--r--tvapi/libtv/tvsetting/TvKeyData.cpp1392
-rw-r--r--tvapi/libtv/tvsetting/TvKeyData.h62
-rw-r--r--tvapi/libtv/tvsetting/audio_cfg.cpp1853
-rw-r--r--tvapi/libtv/tvsetting/audio_cfg.h169
-rw-r--r--tvapi/libtv/tvutils/CCondition.h91
-rw-r--r--tvapi/libtv/tvutils/CFile.cpp191
-rw-r--r--tvapi/libtv/tvutils/CFile.h47
-rw-r--r--tvapi/libtv/tvutils/CHdmiCecCmd.cpp15
-rw-r--r--tvapi/libtv/tvutils/CHdmiCecCmd.h10
-rw-r--r--tvapi/libtv/tvutils/CMsgQueue.cpp116
-rw-r--r--tvapi/libtv/tvutils/CMsgQueue.h54
-rw-r--r--tvapi/libtv/tvutils/CMutex.h116
-rw-r--r--tvapi/libtv/tvutils/CSerialCommunication.cpp126
-rw-r--r--tvapi/libtv/tvutils/CSerialCommunication.h50
-rw-r--r--tvapi/libtv/tvutils/CSerialPort.cpp357
-rw-r--r--tvapi/libtv/tvutils/CSerialPort.h55
-rw-r--r--tvapi/libtv/tvutils/CSqlite.cpp152
-rw-r--r--tvapi/libtv/tvutils/CSqlite.h186
-rw-r--r--tvapi/libtv/tvutils/CThread.cpp165
-rw-r--r--tvapi/libtv/tvutils/CThread.h62
-rw-r--r--tvapi/libtv/tvutils/CTvInput.cpp156
-rw-r--r--tvapi/libtv/tvutils/CTvInput.h39
-rw-r--r--tvapi/libtv/tvutils/serial_base.cpp466
-rw-r--r--tvapi/libtv/tvutils/serial_base.h17
-rw-r--r--tvapi/libtv/tvutils/serial_operate.cpp229
-rw-r--r--tvapi/libtv/tvutils/serial_operate.h36
-rw-r--r--tvapi/libtv/tvutils/tvutils.cpp1912
-rw-r--r--tvapi/libtv/tvutils/tvutils.h119
-rw-r--r--tvapi/libtv/tvutils/zepoll.cpp88
-rw-r--r--tvapi/libtv/tvutils/zepoll.h49
-rw-r--r--tvapi/libtv/version/version.cpp94
-rw-r--r--tvapi/libtv/version/version.h11
-rw-r--r--tvapi/libtv/vpp/CPQdb.cpp1535
-rw-r--r--tvapi/libtv/vpp/CPQdb.h161
-rw-r--r--tvapi/libtv/vpp/CVpp.cpp3711
-rw-r--r--tvapi/libtv/vpp/CVpp.h438
-rw-r--r--tvapi/libtv/vpp/pqdata.cpp143
-rw-r--r--tvapi/libtv/vpp/pqdata.h30
-rw-r--r--tvapi/script/setenv.sh54
-rw-r--r--tvapi/tvtests/Android.mk49
-rw-r--r--tvapi/tvtests/android_tvtest.cpp33
-rw-r--r--tvapi/tvtests/comm_test.cpp33
-rw-r--r--tvapi/tvtests/ssm_test.cpp210
-rw-r--r--tvapi/tvtests/tvconfig_test.cpp427
169 files changed, 64432 insertions, 116 deletions
diff --git a/tvapi/libtv/tvdb/CTvDimension.cpp b/tvapi/libtv/tvdb/CTvDimension.cpp
new file mode 100644
index 0000000..176dde8
--- a/dev/null
+++ b/tvapi/libtv/tvdb/CTvDimension.cpp
@@ -0,0 +1,644 @@
+
+#include "CTvDimension.h"
+#include "CTvProgram.h"
+#include "CTvTime.h"
+#include "CTvEvent.h"
+#include "../tvconfig/tvconfig.h"
+
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "CTvDimension"
+
+/**
+ *TV ATSC rating dimension
+ */
+
+void CTvDimension::createFromCursor(CTvDatabase::Cursor &c)
+{
+ int col;
+
+ col = c.getColumnIndex("db_id");
+ this->id = c.getInt(col);
+
+ col = c.getColumnIndex("index_j");
+ this->indexj = c.getInt(col);
+
+ col = c.getColumnIndex("rating_region");
+ this->ratingRegion = c.getInt(col);
+
+ col = c.getColumnIndex("graduated_scale");
+ this->graduatedScale = c.getInt(col);
+
+ col = c.getColumnIndex("name");
+ this->name = c.getString(col);
+
+ col = c.getColumnIndex("rating_region_name");
+ this->ratingRegionName = c.getString(col);
+
+ col = c.getColumnIndex("values_defined");
+ this->valuesDefined = c.getInt(col);
+ this->lockValues = new int[valuesDefined];
+ this->abbrevValues = new String8[valuesDefined];
+ this->textValues = new String8[valuesDefined];
+ char temp[256];
+ for (int i = 0; i < valuesDefined; i++) {
+ sprintf(temp, "abbrev%d", i);
+ col = c.getColumnIndex(temp);
+ this->abbrevValues[i] = c.getString(col);
+ sprintf(temp, "text%d", i);
+ col = c.getColumnIndex(temp);
+ this->textValues[i] = c.getString(col);
+ sprintf(temp, "locked%d", i);
+ col = c.getColumnIndex(temp);
+ this->lockValues[i] = c.getInt(col);
+ }
+
+ if (ratingRegion == REGION_US && !strcmp(name, "All")) {
+ isPGAll = true;
+ } else {
+ isPGAll = false;
+ }
+}
+
+CTvDimension::CTvDimension(CTvDatabase::Cursor &c)
+{
+ createFromCursor(c);
+}
+CTvDimension::CTvDimension()
+{
+
+}
+CTvDimension::~CTvDimension()
+{
+ if (lockValues != NULL) {
+ delete []lockValues;
+ }
+ if (textValues != NULL) {
+ delete []textValues;
+ }
+ if (abbrevValues != NULL) {
+ delete []abbrevValues;
+ }
+}
+
+/* 'All' is a very special case, it links to dimension0 & dimension5 */
+int CTvDimension::getUSPGAllLockStatus(String8 abbrev)
+{
+ int len = 0;
+ CTvDimension dm5;
+ int j = 0;
+ selectByIndex(dm5, CTvDimension::REGION_US, 5);
+ len = dm5.getDefinedValue();
+ String8 dm5Abbrev[len - 1];
+ dm5.getAbbrev(dm5Abbrev);
+ for (j = 0; j < len - 1; j++) {
+ if (dm5Abbrev[j] == abbrev) {
+ return dm5.getLockStatus(j + 1);
+ }
+ }
+ CTvDimension dm0;
+ selectByIndex(dm0, CTvDimension::REGION_US, 0);
+ len = dm0.getDefinedValue();
+ String8 dm0Abbrev[len - 1];
+ dm0.getAbbrev(dm0Abbrev);
+ for (j = 0; j < len - 1; j++) {
+ if (dm0Abbrev[j] == abbrev) {
+ return dm0.getLockStatus(j + 1);
+ }
+ }
+ return -1;
+}
+
+void CTvDimension::setUSPGAllLockStatus(String8 abbrev, int lock)
+{
+
+ int len = 0;
+ int j = 0;
+
+ CTvDimension dm5;
+
+ selectByIndex(dm5, REGION_US, 5);
+ len = dm5.getDefinedValue();
+ String8 dm5Abbrev[len - 1];
+ dm5.getAbbrev(dm5Abbrev);
+
+ for (j = 0; j < len - 1; j++) {
+ if (abbrev == dm5Abbrev[j]) {
+ dm5.setLockStatus(j + 1, lock);
+ return;
+ }
+ }
+
+ CTvDimension dm0;
+ selectByIndex(dm0, REGION_US, 0);
+ len = dm0.getDefinedValue();
+ String8 dm0Abbrev[len - 1];
+ dm0.getAbbrev(dm0Abbrev);
+
+ for (j = 0; j < len - 1; j++) {
+ if (abbrev == dm0Abbrev[j]) {
+ dm0.setLockStatus(j + 1, lock);
+ return;
+ }
+ }
+ return;
+}
+
+
+
+/**
+ *根据记录ID取得对应的TVDimension
+ *@param context 当前Context
+ *@param id 记录ID
+ *@return 返回ID对应的TVDimension对象
+ */
+void CTvDimension::selectByID(CTvDimension &dm, int id)
+{
+ String8 cmd = String8("select * from dimension_table where evt_table.db_id = ") + String8::format("%d", id);
+ CTvDatabase::Cursor c;
+ int ret = CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if (c.moveToFirst()) {
+ dm.createFromCursor(c);
+ LOGD("%s, %d success", "TV", __LINE__);
+ } else {
+ LOGD("%s, %d fail", "TV", __LINE__);
+ c.close();
+ return;
+ }
+ c.close();
+
+}
+
+/**
+ *根据记录ID取得对应的TVDimension
+ *@param context 当前Context
+ *@param ratingRegionID rating region ID
+ *@return 返回ID对应的TVDimension对象
+ */
+void CTvDimension::selectByRatingRegion(CTvDimension &dm, int ratingRegionID)
+{
+ String8 cmd = String8("select * from dimension_table where rating_region = ") + String8::format("%d", ratingRegionID);
+ CTvDatabase::Cursor c;
+ int ret = CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if (c.moveToFirst()) {
+ dm.createFromCursor(c);
+ LOGD("%s, %d success", "TV", __LINE__);
+ } else {
+ LOGD("%s, %d fail", "TV", __LINE__);
+ c.close();
+ return;
+ }
+ c.close();
+}
+
+/**
+ *根据记录ID取得对应的TVDimension
+ *@param context 当前Context
+ *@param ratingRegionID rating region ID
+ *@param index RRT中对应的index_j
+ *@return 返回对应的TVDimension对象
+ */
+int CTvDimension::selectByIndex(CTvDimension &dm, int ratingRegionID, int index)
+{
+ String8 cmd = String8("select * from dimension_table where rating_region = ") + String8::format("%d", ratingRegionID);
+ cmd += String8(" and index_j=") + String8::format("%d", index);
+ CTvDatabase::Cursor c;
+ int ret = CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if (c.moveToFirst()) {
+ dm.createFromCursor(c);
+ LOGD("%s, %d success", "TV", __LINE__);
+ } else {
+ LOGD("%s, %d fail", "TV", __LINE__);
+ c.close();
+ return -1;
+ }
+ c.close();
+
+ return 0;
+}
+
+/**
+ *根据ID和名字取得对应的TVDimension
+ *@param context 当前Context
+ *@param ratingRegionID rating region ID
+ *@param dimensionName dimension的名称
+ *@return 返回对应的TVDimension对象
+ */
+void CTvDimension::selectByName(CTvDimension &dm, int ratingRegionID, String8 dimensionName)
+{
+ String8 cmd = String8("select * from dimension_table where rating_region = ") + String8::format("%d", ratingRegionID);
+ cmd += String8(" and name='") + dimensionName + String8("'");
+ CTvDatabase::Cursor c;
+ CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if (c.moveToFirst()) {
+ LOGD("%s, %d success", "TV", __LINE__);
+ dm.createFromCursor(c);
+ } else {
+ LOGD("%s, %d fail", "TV", __LINE__);
+ c.close();
+ return;
+ }
+ c.close();
+
+ return;
+}
+
+
+/**
+ *判断指定rating_value是否需要block
+ *@param context 当前Context
+ *@param definedRating content_advisory_descr中定义的级别信息
+ *@return 是否block
+ */
+bool CTvDimension::isBlocked(CTvDimension &dm, VChipRating *definedRating)
+{
+ int ret = 0;
+ ret = selectByIndex(dm, definedRating->getRegion(), definedRating->getDimension());
+ if (ret != -1) {
+ LOGD("%s, %d, index=%d", "TV", __LINE__, definedRating->getValue());
+ return (dm.getLockStatus(definedRating->getValue()) == 1);
+ }
+
+ return false;
+}
+
+/**
+ *取得事件的ID
+ *@return 返回事件的ID
+ */
+int CTvDimension::getID()
+{
+ return id;
+}
+
+/**
+ *取得 rating region ID
+ *@return 返回 rating region ID
+ */
+int CTvDimension::getRatingRegion()
+{
+ return ratingRegion;
+}
+
+int CTvDimension::getDefinedValue()
+{
+ return valuesDefined;
+}
+/**
+ *取得 rating region 名称
+ *@return 返回 rating region 名称
+ */
+String8 CTvDimension::getRatingRegionName()
+{
+ return ratingRegionName;
+}
+
+/**
+ *取得Dimension名称
+ *@return 返回Dimension名称
+ */
+String8 CTvDimension::getName()
+{
+ return name;
+}
+
+/**
+ *取得graduated scale标志
+ *@return 返回graduated scale标志
+ */
+int CTvDimension::getGraduatedScale()
+{
+ return graduatedScale;
+}
+
+/**
+ *取得该dimension的所有values的加锁状态
+ *@return 返回所有values的加锁状态,0-未加锁,-1-无效值,即不能对该项进行设置,其他-已加锁
+ */
+#if 0
+int *CTvDimension::getLockStatus()
+{
+ int len = getDefinedValue();
+ if (len > 1) {
+ if (isPGAll) {
+ return getUSPGAllLockStatus(abbrevValues);
+ } else {
+ int *lock = new int[len - 1];
+ //System.arraycopy(lockValues, 1, l, 0, l.length);
+ for (int i = 0; i < len - 1; i++)
+ lock[i] = lockValues[1 + i];
+ return lock;
+ }
+ } else {
+ return NULL;
+ }
+}
+#endif
+/**
+ *取得该dimension的指定value的加锁状态
+ *@param valueIndex value索引
+ *@return 返回指定value的加锁状态,0-未加锁,-1-无效值,即不能对该项进行设置,其他-已加锁
+ */
+int CTvDimension::getLockStatus(int valueIndex)
+{
+ int len = getDefinedValue();
+ if (valueIndex >= len) {
+ return -1;
+ } else {
+ return lockValues[valueIndex];
+ }
+}
+
+/**
+ *取得该dimension的指定几个values的加锁状态
+ *@param abbrevs 需要获取的value的abbrev集合
+ *@return 返回指定values的加锁状态,0-未加锁,-1-无效值,即不能对该项进行设置,其他-已加锁
+ */
+void CTvDimension::getLockStatus(String8 abbrevs[], int lock[], int *array_len)
+{
+ int i = 0;
+ int len = getDefinedValue();
+
+ if (abbrevs != NULL && lock != NULL) {
+ for (int i = 0; i < *array_len; i++) {
+ *(lock + i) = -1;
+ for (int j = 0; j < len; j++) {
+ if (abbrevs[i] == abbrevValues[j]) {
+ *(lock + i) = lockValues[j];
+ break;
+ }
+ }
+ }
+ }
+ *array_len = len;
+}
+
+/**
+ *取得该dimension的所有values的abbrev text
+ *@return 返回所有values的abbrev text
+ */
+int CTvDimension::getAbbrev(String8 abb[])
+{
+ /* the first rating_value must be not visible to user */
+ int len = getDefinedValue();
+ if (len > 1) {
+ for (int i = 0; i < len - 1; i++)
+ abb[i] = abbrevValues[i + 1];
+ return 0;
+ } else {
+ return -1;
+ }
+}
+
+/**
+ *取得该dimension指定value的abbrev text
+ *@return 返回abbrev text
+ */
+String8 CTvDimension::getAbbrev(int valueIndex)
+{
+ int len = getDefinedValue();
+ if (valueIndex >= len)
+ return String8("");
+ else
+ return abbrevValues[valueIndex];
+}
+
+/**
+ *取得该dimension的所有values的value text
+ *@return 返回所有values的value text
+ */
+int CTvDimension::getText(String8 tx[])
+{
+ int len = getDefinedValue();
+ if (len > 1) {
+ for (int i = 0; i < len - 1; i++)
+ tx[i] = textValues[i + 1];
+ return 0;
+ } else {
+ return -1;
+ }
+}
+
+/**
+ *取得该dimension指定value的value text
+ *@return 返回value text
+ */
+String8 CTvDimension::getText(int valueIndex)
+{
+ int len = getDefinedValue();
+ if (valueIndex >= len)
+ return String8("");
+ else
+ return textValues[valueIndex];
+}
+
+/**
+ *设置指定value的加锁状态
+ *@param valueIndex value索引
+ *@param status 加锁状态
+ */
+void CTvDimension::setLockStatus(int valueIndex, int status)
+{
+ int len = getDefinedValue();
+ if (valueIndex >= len)
+ return;
+
+ if (lockValues[valueIndex] != -1 && lockValues[valueIndex] != status) {
+ lockValues[valueIndex] = status;
+ String8 cmd = String8("update dimension_table set locked") + String8::format("%d", valueIndex);
+ cmd += String8("=") + String8::format("%d", status) + String8(" where db_id = ") + String8::format("%d", id);
+
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+ }
+}
+
+/**
+ *设置该dimension所有values的加锁状态
+ *@param status 加锁状态
+ */
+void CTvDimension::setLockStatus(int status[])
+{
+ int len = getDefinedValue();
+ if (status == NULL) {
+ LOGD("Cannot set lock status, invalid param");
+ return;
+ }
+ for (int i = 0; i < len; i++) {
+ setLockStatus(i + 1, status[i]);
+ }
+}
+
+/**
+ *设置指定values的加锁状态
+ *@param abbrevs abbrev集合
+ *@param locks 需要修改的与abbrev对应的加锁状态集合
+ */
+void CTvDimension::setLockStatus(String8 abbrevs[], int locks[], int abb_size)
+{
+ int len = getDefinedValue();
+ if (abbrevs == NULL || locks == NULL)
+ return;
+
+ for (int i = 0; i < abb_size; i++) {
+ for (int j = 0; j < len; j++) {
+ if (abbrevs[i] == abbrevValues[j]) {
+ setLockStatus(j, locks[i]);
+ break;
+ }
+ }
+ }
+}
+
+CTvDimension::VChipRating::VChipRating(int region, int dimension, int value)
+{
+ this->region = region;
+ this->dimension = dimension;
+ this->value = value;
+}
+CTvDimension::VChipRating::VChipRating()
+{
+}
+
+CTvDimension::VChipRating::~VChipRating()
+{
+}
+int CTvDimension::VChipRating::getRegion()
+{
+ return region;
+}
+
+int CTvDimension::VChipRating::getDimension()
+{
+ return dimension;
+}
+
+int CTvDimension::VChipRating::getValue()const
+{
+ return value;
+}
+
+String8 CTvDimension::getCurdimension()
+{
+ return CurvchipDimension;
+}
+String8 CTvDimension::getCurAbbr()
+{
+ return CurvchipAbbrev;
+
+}
+String8 CTvDimension::getCurText()
+{
+ return CurvchipText;
+}
+
+void CTvDimension::insertNewDimension(const int region, String8 regionName, String8 name,
+ int indexj, int *lock, const char **abbrev, const char **text, int size)
+{
+ String8 cmd = String8("insert into dimension_table(rating_region,rating_region_name,name,graduated_scale,");
+ cmd += String8("values_defined,index_j,version,abbrev0,text0,locked0,abbrev1,text1,locked1,abbrev2,text2,locked2,");
+ cmd += String8("abbrev3,text3,locked3,abbrev4,text4,locked4,abbrev5,text5,locked5,abbrev6,text6,locked6,");
+ cmd += String8("abbrev7,text7,locked7,abbrev8,text8,locked8,abbrev9,text9,locked9,abbrev10,text10,locked10,");
+ cmd += String8("abbrev11,text11,locked11,abbrev12,text12,locked12,abbrev13,text13,locked13,abbrev14,text14,locked14,");
+ cmd += String8("abbrev15,text15,locked15) values(") + String8::format("%d", region) + String8(",'") + regionName.string();
+ cmd += String8("','") + name.string() + String8("',0,") + String8::format("%d", size) + String8(",") + String8::format("%d", indexj) + String8(",0");
+ for (int i = 0; i < 16; i++) {
+ if (i < size) {
+ cmd += String8(",'") + String8::format("%s", abbrev[i]) + String8("'");
+ cmd += String8(",'") + String8::format("%s", text[i]) + String8("'");
+ cmd += String8(",'") + String8::format("%d", lock[i]) + String8("'");
+ } else {
+ cmd += String8(",''");
+ cmd += String8(",''");
+ cmd += String8(",-1");
+ }
+ }
+ cmd += String8(")");
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+}
+/**
+ * ??????Standard ATSC V-Chip Dimensions
+ */
+void CTvDimension::builtinAtscDimensions()
+{
+ CTvDatabase::GetTvDb()->exeSql("delete from dimension_table");
+
+ /* Add U.S. Rating region 0x1 */
+ const char *abbrev0[] = {"", "None", "TV-G", "TV-PG", "TV-14", "TV-MA"};
+ const char *text0[] = {"", "None", "TV-G", "TV-PG", "TV-14", "TV-MA"};
+ int lock0[] = { -1, -1, 0, 0, 0, 0};
+ const char *abbrev1[] = {"", "D", "TV-G", "TV-PG", "TV-14", "TV-MA"};
+ const char *text1[] = {"", "D", "TV-G", "TV-PG", "TV-14", "TV-MA"};
+ int lock1[] = { -1, -1, -1, 0, 0, -1};
+ const char *abbrev2[] = {"", "L", "TV-G", "TV-PG", "TV-14", "TV-MA"};
+ const char *text2[] = {"", "L", "TV-G", "TV-PG", "TV-14", "TV-MA"};
+ int lock2[] = { -1, -1, -1, 0, 0, 0};
+ const char *abbrev3[] = {"", "S", "TV-G", "TV-PG", "TV-14", "TV-MA"};
+ const char *text3[] = {"", "S", "TV-G", "TV-PG", "TV-14", "TV-MA"};
+ int lock3[] = { -1, -1, -1, 0, 0, 0};
+ const char *abbrev4[] = {"", "V", "TV-G", "TV-PG", "TV-14", "TV-MA"};
+ const char *text4[] = {"", "V", "TV-G", "TV-PG", "TV-14", "TV-MA"};
+ int lock4[] = { -1, -1, -1, 0, 0, 0};
+ const char *abbrev5[] = {"", "TV-Y", "TV-Y7"};
+ const char *text5[] = {"", "TV-Y", "TV-Y7"};
+ int lock5[] = { -1, 0, 0};
+ const char *abbrev6[] = {"", "FV", "TV-Y7"};
+ const char *text6[] = {"", "FV", "TV-Y7"};
+ int lock6[] = { -1, -1, 0};
+ const char *abbrev7[] = {"", "N/A", "G", "PG", "PG-13", "R", "NC-17", "X", "NR"};
+ const char *text7[] = {"", "MPAA Rating Not Applicable", "Suitable for AllAges",
+ "Parental GuidanceSuggested", "Parents Strongly Cautioned",
+ "Restricted, under 17 must be accompanied by adult",
+ "No One 17 and Under Admitted", "No One 17 and Under Admitted",
+ "no Rated by MPAA"
+ };
+ int lock7[] = { -1, -1, 0, 0, 0, 0, 0, 0, 0};
+ /*Extra for 'All' */
+ const char *abbrevall[] = {"TV-Y", "TV-Y7", "TV-G", "TV-PG", "TV-14", "TV-MA"};
+ const char *textall[] = {"TV-Y", "TV-Y7", "TV-G", "TV-PG", "TV-14", "TV-MA"};
+ int lockall[] = {0, 0, 0, 0, 0, 0};
+
+ insertNewDimension(CTvDimension::REGION_US, String8("US (50 states + possessions)"),
+ String8("Entire Audience"), 0, lock0, abbrev0, text0, sizeof(lock0) / sizeof(int));
+ insertNewDimension(CTvDimension::REGION_US, String8("US (50 states + possessions)"),
+ String8("Dialogue"), 1, lock1, abbrev1, text1, sizeof(lock1) / sizeof(int));
+ insertNewDimension(CTvDimension::REGION_US, String8("US (50 states + possessions)"),
+ String8("Language"), 2, lock2, abbrev2, text2, sizeof(lock2) / sizeof(int));
+ insertNewDimension(CTvDimension::REGION_US, String8("US (50 states + possessions)"),
+ String8("Sex"), 3, lock3, abbrev3, text3, sizeof(lock3) / sizeof(int));
+ insertNewDimension(CTvDimension::REGION_US, String8("US (50 states + possessions)"),
+ String8("Violence"), 4, lock4, abbrev4, text4, sizeof(lock4) / sizeof(int));
+ insertNewDimension(CTvDimension::REGION_US, String8("US (50 states + possessions)"),
+ String8("Children"), 5, lock5, abbrev5, text5, sizeof(lock5) / sizeof(int));
+ insertNewDimension(CTvDimension::REGION_US, String8("US (50 states + possessions)"),
+ String8("Fantasy violence"), 6, lock6, abbrev6, text6, sizeof(lock6) / sizeof(int));
+ insertNewDimension(CTvDimension::REGION_US, String8("US (50 states + possessions)"),
+ String8("MPAA"), 7, lock7, abbrev7, text7, sizeof(lock7) / sizeof(int));
+ insertNewDimension(CTvDimension::REGION_US, String8("US (50 states + possessions)"),
+ String8("All"), -1, lockall, abbrevall, textall, sizeof(lockall) / sizeof(int));
+ /* Add Canadian Rating region 0x2 */
+ const char *cabbrev0[] = {"E", "C", "C8+", "G", "PG", "14+", "18+"};
+ const char *ctext0[] = {"Exempt", "Children", "8+", "General", "PG", "14+", "18+"};
+ int clock0[] = {0, 0, 0, 0, 0, 0, 0};
+ const char *cabbrev1[] = {"E", "G", "8 ans+", "13 ans+", "16 ans+", "18 ans+"};
+ const char *ctext1[] = {"Exempt??es", "Pour tous", "8+", "13+", "16+", "18+"};
+ int clock1[] = {0, 0, 0, 0, 0, 0};
+
+ insertNewDimension(CTvDimension::REGION_CANADA, String8("Canada"),
+ String8("Canadian English Language Rating"), 0, clock0, cabbrev0, ctext0, sizeof(clock0) / sizeof(int));
+ insertNewDimension(CTvDimension::REGION_CANADA, String8("Canada"),
+ String8("Codes francais du Canada"), 1, clock1, cabbrev1, ctext1, sizeof(clock1) / sizeof(int));
+}
+
+int CTvDimension::isDimensionTblExist()
+{
+ String8 cmd = String8("select * from dimension_table");
+ CTvDatabase::Cursor c;
+ CTvDatabase::GetTvDb()->select(cmd, c);
+ return c.moveToFirst();
+}