summaryrefslogtreecommitdiff
authorKieth Liu <kieth.liu@amlogic.com>2015-09-17 02:01:53 (GMT)
committer Kieth Liu <kieth.liu@amlogic.com>2015-09-17 02:01:53 (GMT)
commit2f2a5755ca37edbcaad527897662ac9120b53999 (patch)
treea7483d4062008a460176193add4623f91991d851
parentfde1c32aee5fbd4eddc6cd70ec5d7b0a1f9f397a (diff)
downloadtv_input-2f2a5755ca37edbcaad527897662ac9120b53999.zip
tv_input-2f2a5755ca37edbcaad527897662ac9120b53999.tar.gz
tv_input-2f2a5755ca37edbcaad527897662ac9120b53999.tar.bz2
fix compile error with dvb branch tv-arch-next
Change-Id: I6df6e57c200d7874d3a85f579f69cec17dc184fc
Diffstat
-rw-r--r--tv_input.cpp45
-rw-r--r--tvapi/android/Android.mk2
-rw-r--r--tvapi/android/include/ITv.h100
-rw-r--r--tvapi/android/include/ITvClient.h58
-rw-r--r--tvapi/android/include/ITvService.h68
-rw-r--r--tvapi/android/include/Tv.h161
-rw-r--r--tvapi/android/include/tvcmd.h1188
-rw-r--r--tvapi/android/jni/Android.mk132
-rw-r--r--tvapi/android/jni/android_amlogic_tv.cpp911
-rw-r--r--tvapi/android/jni/cfbc_jni.cpp214
-rw-r--r--tvapi/android/jni/cfbc_test.cpp86
-rw-r--r--tvapi/android/libtvbinder/Android.mk48
-rw-r--r--tvapi/android/libtvbinder/ITv.cpp289
-rw-r--r--tvapi/android/libtvbinder/ITvClient.cpp117
-rw-r--r--tvapi/android/libtvbinder/ITvService.cpp101
-rw-r--r--tvapi/android/libtvbinder/Tv.cpp378
-rw-r--r--tvapi/android/tvserver/Android.mk162
-rw-r--r--tvapi/android/tvserver/TvService.cpp8755
-rw-r--r--tvapi/android/tvserver/TvService.h164
-rw-r--r--tvapi/android/tvserver/main.cpp46
-rwxr-xr-x[-rw-r--r--]tvapi/build/include/.gitignore0
-rw-r--r--tvapi/docs/tv.uml12156
-rw-r--r--tvapi/libtv/Android.mk3
-rw-r--r--tvapi/libtv/audio/audio_alsa.cpp2426
-rw-r--r--tvapi/libtv/audio/audio_alsa.h261
-rw-r--r--tvapi/libtv/audio/audio_android.cpp2070
-rw-r--r--tvapi/libtv/audio/audio_android.h157
-rw-r--r--tvapi/libtv/audio/audio_android_effect.cpp1182
-rw-r--r--tvapi/libtv/audio/audio_android_effect.h131
-rw-r--r--tvapi/libtv/audio/audio_api.cpp4940
-rw-r--r--tvapi/libtv/audio/audio_api.h647
-rw-r--r--tvapi/libtv/audio/audio_effect.cpp456
-rw-r--r--tvapi/libtv/audio/audio_effect.h63
-rw-r--r--tvapi/libtv/include/amstream.h526
-rw-r--r--tvapi/libtv/include/amvecm.h136
-rw-r--r--tvapi/libtv/include/cm.h306
-rw-r--r--tvapi/libtv/include/hdmirx_cec.h508
-rw-r--r--tvapi/libtv/include/ve.h438
-rw-r--r--tvapi/libtv/tv/AutoBackLight.cpp426
-rw-r--r--tvapi/libtv/tv/AutoBackLight.h47
-rw-r--r--tvapi/libtv/tv/CAv.cpp484
-rw-r--r--tvapi/libtv/tv/CAv.h194
-rw-r--r--tvapi/libtv/tv/CFbcCommunication.cpp2326
-rw-r--r--tvapi/libtv/tv/CFbcCommunication.h680
-rw-r--r--tvapi/libtv/tv/CFrontEnd.cpp838
-rw-r--r--tvapi/libtv/tv/CFrontEnd.h227
-rw-r--r--tvapi/libtv/tv/CTv.cpp10755
-rw-r--r--tvapi/libtv/tv/CTv.h1269
-rw-r--r--tvapi/libtv/tv/CTvBooking.cpp324
-rw-r--r--tvapi/libtv/tv/CTvBooking.h167
-rw-r--r--tvapi/libtv/tv/CTvDmx.cpp8
-rw-r--r--tvapi/libtv/tv/CTvDmx.h15
-rw-r--r--tvapi/libtv/tv/CTvEpg.cpp260
-rw-r--r--tvapi/libtv/tv/CTvEpg.h280
-rw-r--r--tvapi/libtv/tv/CTvEv.cpp2
-rw-r--r--tvapi/libtv/tv/CTvEv.h314
-rw-r--r--tvapi/libtv/tv/CTvLog.h8
-rw-r--r--tvapi/libtv/tv/CTvRecord.cpp552
-rw-r--r--tvapi/libtv/tv/CTvRecord.h93
-rw-r--r--tvapi/libtv/tv/CTvSatellite.h43
-rw-r--r--tvapi/libtv/tv/CTvScanner.cpp1417
-rw-r--r--tvapi/libtv/tv/CTvScanner.h319
-rw-r--r--tvapi/libtv/tv/CTvScreenCapture.cpp1060
-rw-r--r--tvapi/libtv/tv/CTvScreenCapture.h351
-rw-r--r--tvapi/libtv/tv/CTvSubtitle.cpp272
-rw-r--r--tvapi/libtv/tv/CTvSubtitle.h469
-rw-r--r--tvapi/libtv/tv/CTvTime.h137
-rw-r--r--tvapi/libtv/tv/CTvVchipCheck.cpp250
-rw-r--r--tvapi/libtv/tv/CTvVchipCheck.h43
-rw-r--r--tvapi/libtv/tv/CUpgradeFBC.cpp974
-rw-r--r--tvapi/libtv/tv/CUpgradeFBC.h284
-rw-r--r--tvapi/libtv/tvconfig/CIniFile.cpp706
-rw-r--r--tvapi/libtv/tvconfig/CIniFile.h79
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.conf58
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.cpp106
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.h40
-rw-r--r--tvapi/libtv/tvdb/CTvChannel.cpp694
-rw-r--r--tvapi/libtv/tvdb/CTvChannel.h575
-rw-r--r--tvapi/libtv/tvdb/CTvDatabase.cpp300
-rw-r--r--tvapi/libtv/tvdb/CTvDatabase.h190
-rw-r--r--tvapi/libtv/tvdb/CTvDimension.cpp714
-rw-r--r--tvapi/libtv/tvdb/CTvDimension.h196
-rw-r--r--tvapi/libtv/tvdb/CTvEvent.cpp482
-rw-r--r--tvapi/libtv/tvdb/CTvEvent.h171
-rw-r--r--tvapi/libtv/tvdb/CTvGroup.cpp88
-rw-r--r--tvapi/libtv/tvdb/CTvGroup.h61
-rw-r--r--tvapi/libtv/tvdb/CTvProgram.cpp1766
-rw-r--r--tvapi/libtv/tvdb/CTvProgram.h1065
-rw-r--r--tvapi/libtv/tvdb/CTvRegion.cpp366
-rw-r--r--tvapi/libtv/tvdb/CTvRegion.h85
-rw-r--r--tvapi/libtv/tvin/CHDMIRxCEC.cpp830
-rw-r--r--tvapi/libtv/tvin/CSourceConnectDetect.cpp448
-rw-r--r--tvapi/libtv/tvin/CTvin.cpp4240
-rw-r--r--tvapi/libtv/tvin/CTvin.h2222
-rw-r--r--tvapi/libtv/tvsetting/CBlobDevice.cpp54
-rw-r--r--tvapi/libtv/tvsetting/CBlobDevice.h101
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceE2prom.cpp706
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceE2prom.h153
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceFile.cpp160
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceFile.h53
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceRam.cpp258
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceRam.h75
-rw-r--r--tvapi/libtv/tvsetting/CTvSetting.cpp4424
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingCfg.h742
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingDeviceFactory.cpp38
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingDeviceFactory.h11
-rw-r--r--tvapi/libtv/tvsetting/TvKeyData.cpp2784
-rw-r--r--tvapi/libtv/tvsetting/audio_cfg.cpp3706
-rw-r--r--tvapi/libtv/tvsetting/audio_cfg.h338
-rw-r--r--tvapi/libtv/tvutils/CCondition.h87
-rw-r--r--tvapi/libtv/tvutils/CFile.cpp250
-rw-r--r--tvapi/libtv/tvutils/CFile.h53
-rw-r--r--tvapi/libtv/tvutils/CHdmiCecCmd.cpp6
-rw-r--r--tvapi/libtv/tvutils/CHdmiCecCmd.h9
-rw-r--r--tvapi/libtv/tvutils/CMsgQueue.cpp144
-rw-r--r--tvapi/libtv/tvutils/CMsgQueue.h44
-rw-r--r--tvapi/libtv/tvutils/CMutex.h116
-rw-r--r--tvapi/libtv/tvutils/CSerialCommunication.cpp118
-rw-r--r--tvapi/libtv/tvutils/CSerialCommunication.h98
-rw-r--r--tvapi/libtv/tvutils/CSerialPort.cpp568
-rw-r--r--tvapi/libtv/tvutils/CSerialPort.h45
-rw-r--r--tvapi/libtv/tvutils/CSqlite.cpp126
-rw-r--r--tvapi/libtv/tvutils/CSqlite.h292
-rw-r--r--tvapi/libtv/tvutils/CThread.cpp212
-rw-r--r--tvapi/libtv/tvutils/CThread.h79
-rw-r--r--tvapi/libtv/tvutils/CTvInput.cpp196
-rw-r--r--tvapi/libtv/tvutils/CTvInput.h49
-rw-r--r--tvapi/libtv/tvutils/serial_base.cpp560
-rw-r--r--tvapi/libtv/tvutils/serial_base.h34
-rw-r--r--tvapi/libtv/tvutils/serial_operate.cpp336
-rw-r--r--tvapi/libtv/tvutils/serial_operate.h72
-rw-r--r--tvapi/libtv/tvutils/tvutils.cpp3822
-rw-r--r--tvapi/libtv/tvutils/tvutils.h238
-rw-r--r--tvapi/libtv/tvutils/zepoll.cpp66
-rw-r--r--tvapi/libtv/tvutils/zepoll.h57
-rw-r--r--tvapi/libtv/version/version.cpp188
-rw-r--r--tvapi/libtv/version/version.h22
-rw-r--r--tvapi/libtv/vpp/CPQdb.cpp3183
-rw-r--r--tvapi/libtv/vpp/CPQdb.h321
-rw-r--r--tvapi/libtv/vpp/CVpp.cpp4772
-rw-r--r--tvapi/libtv/vpp/CVpp.h683
-rw-r--r--tvapi/libtv/vpp/pqdata.cpp216
-rw-r--r--tvapi/tvtests/Android.mk98
-rw-r--r--tvapi/tvtests/android_tvtest.cpp30
-rw-r--r--tvapi/tvtests/comm_test.cpp42
-rw-r--r--tvapi/tvtests/ssm_test.cpp420
-rw-r--r--tvapi/tvtests/tvconfig_test.cpp854
147 files changed, 55964 insertions, 55946 deletions
diff --git a/tv_input.cpp b/tv_input.cpp
index b7aa6e8..0cfc0b4 100644
--- a/tv_input.cpp
+++ b/tv_input.cpp
@@ -32,8 +32,7 @@
__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__); }
-typedef struct tv_input_private
-{
+typedef struct tv_input_private {
tv_input_device_t device;
// Callback related data
@@ -138,8 +137,7 @@ static int notify_HDMI_stream_configurations_change(tv_input_private_t *priv, in
static tv_stream_config_t mconfig[2];
static int get_stream_configs(int dev_id, int *num_configurations, const tv_stream_config_t **configs)
{
- switch (dev_id)
- {
+ switch (dev_id) {
case SOURCE_TV:
mconfig[0].stream_id = NORMAL_STREAM_ID;
mconfig[0].type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE ;
@@ -227,8 +225,7 @@ static int get_tv_stream(tv_stream_t *stream)
}
stream->type = TV_STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE;
stream->sideband_stream_source_handle = h;
- }
- else if (stream->stream_id == NORMAL_STREAM_ID) {
+ } else if (stream->stream_id == NORMAL_STREAM_ID) {
stream->type = TV_STREAM_TYPE_BUFFER_PRODUCER;
}
return 0;
@@ -237,14 +234,12 @@ static int get_tv_stream(tv_stream_t *stream)
static int tv_input_device_open(const struct hw_module_t *module,
const char *name, struct hw_device_t **device);
-static struct hw_module_methods_t tv_input_module_methods =
-{
+static struct hw_module_methods_t tv_input_module_methods = {
open:
tv_input_device_open
};
-tv_input_module_t HAL_MODULE_INFO_SYM =
-{
+tv_input_module_t HAL_MODULE_INFO_SYM = {
common:
{
tag:
@@ -267,13 +262,11 @@ methods:
static int tv_input_initialize(struct tv_input_device *dev,
const tv_input_callback_ops_t *callback, void *data)
{
- if (dev == NULL || callback == NULL)
- {
+ if (dev == NULL || callback == NULL) {
return -EINVAL;
}
tv_input_private_t *priv = (tv_input_private_t *)dev;
- if (priv->callback != NULL)
- {
+ if (priv->callback != NULL) {
return -EEXIST;
}
@@ -305,8 +298,7 @@ static int tv_input_get_stream_configurations(const struct tv_input_device *dev,
int device_id, int *num_configurations,
const tv_stream_config_t **configs)
{
- if (get_stream_configs(device_id, num_configurations, configs) == 0)
- {
+ if (get_stream_configs(device_id, num_configurations, configs) == 0) {
return 0;
}
return -EINVAL;
@@ -316,10 +308,8 @@ static int tv_input_open_stream(struct tv_input_device *dev, int device_id,
tv_stream_t *stream)
{
tv_input_private_t *priv = (tv_input_private_t *)dev;
- if (priv)
- {
- if (get_tv_stream(stream) != 0)
- {
+ if (priv) {
+ if (get_tv_stream(stream) != 0) {
return -EINVAL;
}
if (stream->stream_id == NORMAL_STREAM_ID) {
@@ -327,8 +317,7 @@ static int tv_input_open_stream(struct tv_input_device *dev, int device_id,
priv->pTv->StartTvLock();
priv->pTv->SetSourceSwitchInput((tv_source_input_t) device_id);
return 0;
- }
- else if (stream->stream_id == FRAME_CAPTURE_STREAM_ID) {
+ } else if (stream->stream_id == FRAME_CAPTURE_STREAM_ID) {
return 0;
}
}
@@ -339,8 +328,7 @@ static int tv_input_close_stream(struct tv_input_device *dev, int device_id,
int stream_id)
{
tv_input_private_t *priv = (tv_input_private_t *)dev;
- if (priv)
- {
+ if (priv) {
LOGD ( "%s, SetSourceSwitchInput id = %d\n", __FUNCTION__, device_id );
priv->pTv->StopTvLock();
return 0;
@@ -364,12 +352,10 @@ static int tv_input_cancel_capture(struct tv_input_device *, int, int, uint32_t)
static int tv_input_device_close(struct hw_device_t *dev)
{
tv_input_private_t *priv = (tv_input_private_t *)dev;
- if (priv->pTv != NULL)
- {
+ if (priv->pTv != NULL) {
delete priv->pTv;
}
- if (priv)
- {
+ if (priv) {
free(priv);
}
return 0;
@@ -381,8 +367,7 @@ static int tv_input_device_open(const struct hw_module_t *module,
const char *name, struct hw_device_t **device)
{
int status = -EINVAL;
- if (!strcmp(name, TV_INPUT_DEFAULT_DEVICE))
- {
+ if (!strcmp(name, TV_INPUT_DEFAULT_DEVICE)) {
tv_input_private_t *dev = (tv_input_private_t *)malloc(sizeof(*dev));
/* initialize our state here */
diff --git a/tvapi/android/Android.mk b/tvapi/android/Android.mk
index 5053e7d..7ae3545 100644
--- a/tvapi/android/Android.mk
+++ b/tvapi/android/Android.mk
@@ -1 +1 @@
-include $(call all-subdir-makefiles)
+include $(call all-subdir-makefiles)
diff --git a/tvapi/android/include/ITv.h b/tvapi/android/include/ITv.h
index 2fd6f6d..39cd654 100644
--- a/tvapi/android/include/ITv.h
+++ b/tvapi/android/include/ITv.h
@@ -1,51 +1,49 @@
-#ifndef ANDROID_AMLOGIC_ITV_H
-#define ANDROID_AMLOGIC_ITV_H
-
-#include <utils/RefBase.h>
-#include <binder/IInterface.h>
-#include <binder/Parcel.h>
-#include <binder/IMemory.h>
-#include <utils/String8.h>
-#include <include/Tv.h>
-
-using namespace android;
-
-class ITvClient;
-
-class ITv: public IInterface
-{
-public:
- DECLARE_META_INTERFACE(Tv);
-
- virtual void disconnect() = 0;
-
- // connect new client with existing tv remote
- virtual status_t connect(const sp<ITvClient> &client) = 0;
-
- // prevent other processes from using this ITv interface
- virtual status_t lock() = 0;
-
- // allow other processes to use this ITv interface
- virtual status_t unlock() = 0;
-
- virtual status_t processCmd(const Parcel &p, Parcel *r) = 0;
-
- //share mem for subtitle bmp
- virtual status_t createSubtitle(const sp<IMemory> &share_mem) = 0;
- //share mem for video/hdmi bmp
- virtual status_t createVideoFrame(const sp<IMemory> &share_mem) = 0;
-
-};
-
-// ----------------------------------------------------------------------------
-
-class BnTv: public BnInterface<ITv>
-{
-public:
- virtual status_t onTransact( uint32_t code,
- const Parcel &data,
- Parcel *reply,
- uint32_t flags = 0);
-};
-
-#endif
+#ifndef ANDROID_AMLOGIC_ITV_H
+#define ANDROID_AMLOGIC_ITV_H
+
+#include <utils/RefBase.h>
+#include <binder/IInterface.h>
+#include <binder/Parcel.h>
+#include <binder/IMemory.h>
+#include <utils/String8.h>
+#include <include/Tv.h>
+
+using namespace android;
+
+class ITvClient;
+
+class ITv: public IInterface {
+public:
+ DECLARE_META_INTERFACE(Tv);
+
+ virtual void disconnect() = 0;
+
+ // connect new client with existing tv remote
+ virtual status_t connect(const sp<ITvClient> &client) = 0;
+
+ // prevent other processes from using this ITv interface
+ virtual status_t lock() = 0;
+
+ // allow other processes to use this ITv interface
+ virtual status_t unlock() = 0;
+
+ virtual status_t processCmd(const Parcel &p, Parcel *r) = 0;
+
+ //share mem for subtitle bmp
+ virtual status_t createSubtitle(const sp<IMemory> &share_mem) = 0;
+ //share mem for video/hdmi bmp
+ virtual status_t createVideoFrame(const sp<IMemory> &share_mem) = 0;
+
+};
+
+// ----------------------------------------------------------------------------
+
+class BnTv: public BnInterface<ITv> {
+public:
+ virtual status_t onTransact( uint32_t code,
+ const Parcel &data,
+ Parcel *reply,
+ uint32_t flags = 0);
+};
+
+#endif
diff --git a/tvapi/android/include/ITvClient.h b/tvapi/android/include/ITvClient.h
index fcebd6c..7142f04 100644
--- a/tvapi/android/include/ITvClient.h
+++ b/tvapi/android/include/ITvClient.h
@@ -1,30 +1,28 @@
-#ifndef ANDROID_AMLOGIC_ITV_CLIENT_H
-#define ANDROID_AMLOGIC_ITV_CLIENT_H
-
-#include <utils/RefBase.h>
-#include <binder/IInterface.h>
-#include <binder/Parcel.h>
-#include <binder/IMemory.h>
-#include <utils/Timers.h>
-
-using namespace android;
-
-class ITvClient: public IInterface
-{
-public:
- DECLARE_META_INTERFACE(TvClient);
-
- virtual void notifyCallback(int32_t msgType, const Parcel &p) = 0;
-};
-
-
-class BnTvClient: public BnInterface<ITvClient>
-{
-public:
- virtual status_t onTransact(uint32_t code,
- const Parcel &data,
- Parcel *reply,
- uint32_t flags = 0);
-};
-
-#endif
+#ifndef ANDROID_AMLOGIC_ITV_CLIENT_H
+#define ANDROID_AMLOGIC_ITV_CLIENT_H
+
+#include <utils/RefBase.h>
+#include <binder/IInterface.h>
+#include <binder/Parcel.h>
+#include <binder/IMemory.h>
+#include <utils/Timers.h>
+
+using namespace android;
+
+class ITvClient: public IInterface {
+public:
+ DECLARE_META_INTERFACE(TvClient);
+
+ virtual void notifyCallback(int32_t msgType, const Parcel &p) = 0;
+};
+
+
+class BnTvClient: public BnInterface<ITvClient> {
+public:
+ virtual status_t onTransact(uint32_t code,
+ const Parcel &data,
+ Parcel *reply,
+ uint32_t flags = 0);
+};
+
+#endif
diff --git a/tvapi/android/include/ITvService.h b/tvapi/android/include/ITvService.h
index cd0d366..a4ce989 100644
--- a/tvapi/android/include/ITvService.h
+++ b/tvapi/android/include/ITvService.h
@@ -1,35 +1,33 @@
-#ifndef ANDROID_AMLOGIC_ITVSERVICE_H
-#define ANDROID_AMLOGIC_ITVSERVICE_H
-
-#include <utils/RefBase.h>
-#include <binder/IInterface.h>
-#include <binder/Parcel.h>
-#include <include/ITvClient.h>
-#include <include/ITv.h>
-
-using namespace android;
-
-
-class ITvService : public IInterface
-{
-public:
- enum {
- CONNECT = IBinder::FIRST_CALL_TRANSACTION,
- };
-
-public:
- DECLARE_META_INTERFACE(TvService);
-
- virtual sp<ITv> connect(const sp<ITvClient> &tvClient) = 0;
-};
-
-class BnTvService: public BnInterface<ITvService>
-{
-public:
- virtual status_t onTransact(uint32_t code,
- const Parcel &data,
- Parcel *reply,
- uint32_t flags = 0);
-};
-
-#endif
+#ifndef ANDROID_AMLOGIC_ITVSERVICE_H
+#define ANDROID_AMLOGIC_ITVSERVICE_H
+
+#include <utils/RefBase.h>
+#include <binder/IInterface.h>
+#include <binder/Parcel.h>
+#include <include/ITvClient.h>
+#include <include/ITv.h>
+
+using namespace android;
+
+
+class ITvService : public IInterface {
+public:
+ enum {
+ CONNECT = IBinder::FIRST_CALL_TRANSACTION,
+ };
+
+public:
+ DECLARE_META_INTERFACE(TvService);
+
+ virtual sp<ITv> connect(const sp<ITvClient> &tvClient) = 0;
+};
+
+class BnTvService: public BnInterface<ITvService> {
+public:
+ virtual status_t onTransact(uint32_t code,
+ const Parcel &data,
+ Parcel *reply,
+ uint32_t flags = 0);
+};
+
+#endif
diff --git a/tvapi/android/include/Tv.h b/tvapi/android/include/Tv.h
index ed6b324..f620b21 100644
--- a/tvapi/android/include/Tv.h
+++ b/tvapi/android/include/Tv.h
@@ -1,82 +1,79 @@
-#ifndef ANDROID_AMLOGIC_TV_H
-#define ANDROID_AMLOGIC_TV_H
-
-#include <utils/Timers.h>
-#include <include/ITvClient.h>
-#include <binder/MemoryHeapBase.h>
-#include <binder/MemoryBase.h>
-#include <utils/threads.h>
-
-using namespace android;
-
-class ITvService;
-class ITv;
-
-// ref-counted object for callbacks
-class TvListener: virtual public RefBase
-{
-public:
- virtual void notify(int32_t msgType, const Parcel &ext) = 0;
-};
-
-class Tv : public BnTvClient, public IBinder::DeathRecipient
-{
-public:
- // construct a tv client from an existing remote
- static sp<Tv> create(const sp<ITv> &tv);
- static sp<Tv> connect();
- ~Tv();
- void init();
- status_t reconnect();
- void disconnect();
- status_t lock();
- status_t unlock();
-
- status_t getStatus()
- {
- return mStatus;
- }
- status_t processCmd(const Parcel &p, Parcel *r);
- status_t createSubtitle(const sp<IMemory> &share_mem);
- status_t createVideoFrame(const sp<IMemory> &share_mem);
- void setListener(const sp<TvListener> &listener);
-
- // ITvClient interface
- virtual void notifyCallback(int32_t msgType, const Parcel &p);
-
- sp<ITv> remote();
-
-private:
- Tv();
- Tv(const Tv &);
- Tv &operator = (const Tv);
- virtual void binderDied(const wp<IBinder> &who);
-
- class DeathNotifier: public IBinder::DeathRecipient
- {
- public:
- DeathNotifier() {}
- virtual void binderDied(const wp<IBinder> &who);
- };
-
- static sp<DeathNotifier> mDeathNotifier;
-
- // helper function to obtain tv service handle
- static const sp<ITvService> &getTvService();
-
- sp<ITv> mTv;
- status_t mStatus;
-
- sp<TvListener> mListener;
-
- friend class DeathNotifier;
-
- static Mutex mLock;
- static sp<ITvService> mTvService;
-
- sp<MemoryHeapBase> mBmpMemHeap;
- sp<MemoryBase> mBmpMemBase;
-};
-
-
-#endif
+#ifndef ANDROID_AMLOGIC_TV_H
+#define ANDROID_AMLOGIC_TV_H
+
+#include <utils/Timers.h>
+#include <include/ITvClient.h>
+#include <binder/MemoryHeapBase.h>
+#include <binder/MemoryBase.h>
+#include <utils/threads.h>
+
+using namespace android;
+
+class ITvService;
+class ITv;
+
+// ref-counted object for callbacks
+class TvListener: virtual public RefBase {
+public:
+ virtual void notify(int32_t msgType, const Parcel &ext) = 0;
+};
+
+class Tv : public BnTvClient, public IBinder::DeathRecipient {
+public:
+ // construct a tv client from an existing remote
+ static sp<Tv> create(const sp<ITv> &tv);
+ static sp<Tv> connect();
+ ~Tv();
+ void init();
+ status_t reconnect();
+ void disconnect();
+ status_t lock();
+ status_t unlock();
+
+ status_t getStatus()
+ {
+ return mStatus;
+ }
+ status_t processCmd(const Parcel &p, Parcel *r);
+ status_t createSubtitle(const sp<IMemory> &share_mem);
+ status_t createVideoFrame(const sp<IMemory> &share_mem);
+ void setListener(const sp<TvListener> &listener);
+
+ // ITvClient interface
+ virtual void notifyCallback(int32_t msgType, const Parcel &p);
+
+ sp<ITv> remote();
+
+private:
+ Tv();
+ Tv(const Tv &);
+ Tv &operator = (const Tv);
+ virtual void binderDied(const wp<IBinder> &who);
+
+ class DeathNotifier: public IBinder::DeathRecipient {
+ public:
+ DeathNotifier() {}
+ virtual void binderDied(const wp<IBinder> &who);
+ };
+
+ static sp<DeathNotifier> mDeathNotifier;
+
+ // helper function to obtain tv service handle
+ static const sp<ITvService> &getTvService();
+
+ sp<ITv> mTv;
+ status_t mStatus;
+
+ sp<TvListener> mListener;
+
+ friend class DeathNotifier;
+
+ static Mutex mLock;
+ static sp<ITvService> mTvService;
+
+ sp<MemoryHeapBase> mBmpMemHeap;
+ sp<MemoryBase> mBmpMemBase;
+};
+
+
+#endif
diff --git a/tvapi/android/include/tvcmd.h b/tvapi/android/include/tvcmd.h
index a105926..5a3f28a 100644
--- a/tvapi/android/include/tvcmd.h
+++ b/tvapi/android/include/tvcmd.h
@@ -1,594 +1,594 @@
-#ifndef ANDROID_AMLOGIC_TVCMD_H
-#define ANDROID_AMLOGIC_TVCMD_H
-
-enum tvcmd_e {
- // Tv function
- OPEN_TV = 1,
- CLOSE_TV = 2,
- START_TV = 3,
- STOP_TV = 4,
- GET_TV_STATUS = 5,
- GET_LAST_SOURCE_INPUT = 6,
- GET_CURRENT_SOURCE_INPUT = 7,
- GET_CURRENT_SOURCE_INPUT_TYPE = 8,
- GET_CURRENT_SIGNAL_INFO = 9,
- IS_SOURCE_SWTICH_DONE = 10,
- SET_SOURCE_INPUT = 11,
- RUN_ADC_AUTO_CALIBRATION = 12,
- IS_DVI_SIGNAL = 13,
- IS_VGA_TIMEING_IN_HDMI = 14,
- GET_VIDEO_PATH_STATUS = 15,
- GET_VIDEO_STREAM_STATUS = 16,
- GET_FIRST_START_SWITCH_TYPE = 17,
- SET_PREVIEW_WINDOW = 18,
- GET_SOURCE_CONNECT_STATUS = 19,
- //Tv function END
-
- // VGA
- RUN_VGA_AUTO_ADJUST = 20,
- GET_VGA_AUTO_ADJUST_STATUS = 21,
- IS_VGA_AUTO_ADJUST_DONE = 22,
- SET_VGA_HPOS = 23,
- GET_VGA_HPOS = 24,
- SET_VGA_VPOS = 25,
- GET_VGA_VPOS = 26,
- SET_VGA_CLOCK = 27,
- GET_VGA_CLOCK = 28,
- SET_VGA_PHASE = 29,
- GET_VGA_PHASE = 30,
- SET_VGA_AJUST_PARA = 31,
- GET_VGA_AJUST_PARA = 32,
- SET_VGAPARAM_DEFAULT = 33,
-
- // 3D
- SET_3D_MODE = 61,
- GET_3D_MODE = 62,
- SET_3D_LR_SWITH = 63,
- GET_3D_LR_SWITH = 64,
- SET_3D_TO_2D_MODE = 65,
- GET_3D_TO_2D_MODE = 66,
- SET_3D_DEPTH = 67,
- GET_3D_DEPTH = 68,
- GET_3D_AUTO_DETECT = 69,
- SET_3D_AUTO_DETECT = 70,
- // 3D END
-
- //Screen related
- SET_VIDEO_DISABLE = 80,
-
- // PQ
- SET_SCENEMODE = 192,
- GET_SCENEMODE = 193,
- SET_BRIGHTNESS = 194,
- GET_BRIGHTNESS = 195,
- SAVE_BRIGHTNESS = 196,
- SET_CONTRAST = 197,
- GET_CONTRAST = 198,
- SAVE_CONTRAST = 199,
- SET_SATUATION = 200,
- GET_SATUATION = 201,
- SAVE_SATUATION = 202,
- SET_HUE = 203,
- GET_HUE = 204,
- SAVE_HUE = 205,
- SET_PQMODE = 206,
- GET_PQMODE = 207,
- SAVE_PQMODE = 208,
- SET_SHARPNESS = 209,
- GET_SHARPNESS = 210,
- SAVE_SHARPNESS = 211,
- SET_BACKLIGHT = 212,
- GET_BACKLIGHT = 213,
- SAVE_BACKLIGHT = 214,
- SET_COLOR_MODE = 215,
- GET_COLOR_MODE = 216,
- SAVE_COLOR_MODE = 217,
- SET_COLOR_TEMPERATURE = 218,
- GET_COLOR_TEMPERATURE = 219,
- SAVE_COLOR_TEMPERATURE = 220,
- SET_DISPLAY_MODE = 221,
- GET_DISPLAY_MODE = 222,
- SAVE_DISPLAY_MODE = 223,
- SET_NOISE_REDUCTION_MODE = 224,
- GET_NOISE_REDUCTION_MODE = 225,
- SAVE_NOISE_REDUCTION_MODE = 226,
- SETRGBOGO_POSTOFFSET = 227,
- //SETRGBOGO_POSTOFFSET_G = 228,
- //SETRGBOGO_POSTOFFSET_B = 229,
- SETRGBOGO_GAIN = 230,
- //SETRGBOGO_GAIN_G = 231,
- //SETRGBOGO_GAIN_B = 232,
- GETRGBOGO_POSTOFFSET = 233,
- //GETRGBOGO_POSTOFFSET_G = 234,
- //GETRGBOGO_POSTOFFSET_B = 235,
- GETRGBOGO_GAIN = 236,
- //GETRGBOGO_GAIN_G = 237,
- //GETRGBOGO_GAIN_B = 238,
-
- // FACTORY
- FACTORY_SETPQMODE_BRIGHTNESS = 240,
- FACTORY_GETPQMODE_BRIGHTNESS = 241,
- FACTORY_SETPQMODE_CONTRAST = 242,
- FACTORY_GETPQMODE_CONTRAST = 243,
- FACTORY_SETPQMODE_SATURATION = 244,
- FACTORY_GETPQMODE_SATURATION = 245,
- FACTORY_SETPQMODE_HUE = 246,
- FACTORY_GETPQMODE_HUE = 247,
- FACTORY_SETPQMODE_SHARPNESS = 248,
- FACTORY_GETPQMODE_SHARPNESS = 249,
- FACTORY_SETCOLORTEMP_RGAIN = 250,
- FACTORY_SAVECOLORTEMP_RGAIN = 251,
- FACTORY_GETCOLORTEMP_RGAIN = 252,
- FACTORY_SETCOLORTEMP_GGAIN = 253,
- FACTORY_SAVECOLORTEMP_GGAIN = 254,
- FACTORY_GETCOLORTEMP_GGAIN = 255,
- FACTORY_SETCOLORTEMP_BGAIN = 256,
- FACTORY_SAVECOLORTEMP_BGAIN = 257,
- FACTORY_GETCOLORTEMP_BGAIN = 258,
- FACTORY_SETCOLORTEMP_ROFFSET = 259,
- FACTORY_SAVECOLORTEMP_ROFFSET = 260,
- FACTORY_GETCOLORTEMP_ROFFSET = 261,
- FACTORY_SETCOLORTEMP_GOFFSET = 262,
- FACTORY_SAVECOLORTEMP_GOFFSET = 263,
- FACTORY_GETCOLORTEMP_GOFFSET = 264,
- FACTORY_SETCOLORTEMP_BOFFSET = 265,
- FACTORY_SAVECOLORTEMP_BOFFSET = 266,
- FACTORY_GETCOLORTEMP_BOFFSET = 267,
- FACTORY_SETTESTPATTERN = 268,
- FACTORY_GETTESTPATTERN = 269,
- FACTORY_RESETPQMODE = 270,
- FACTORY_RESETCOLORTEMP = 271,
- FACTORY_RESETPAMAMSDEFAULT = 272,
- FACTORY_SETDDRSSC = 273,
- FACTORY_GETDDRSSC = 274,
- FACTORY_SETLVDSSSC = 275,
- FACTORY_GETLVDSSSC = 276,
- FACTORY_SETNOLINEPARAMS = 277,
- FACTORY_GETNOLINEPARAMS = 278,
- FACTORY_SETOVERSCAN = 279,
- FACTORY_GETOVERSCAN = 280,
- FACTORY_SET_OUT_DEFAULT = 281,
- FACTORY_GETGLOBALOGO_RGAIN = 282,
- FACTORY_GETGLOBALOGO_GGAIN = 283,
- FACTORY_GETGLOBALOGO_BGAIN = 284,
- FACTORY_GETGLOBALOGO_ROFFSET = 285,
- FACTORY_GETGLOBALOGO_GOFFSET = 286,
- FACTORY_GETGLOBALOGO_BOFFSET = 287,
- FACTORY_SETGLOBALOGO_RGAIN = 288,
- FACTORY_SETGLOBALOGO_GGAIN = 289,
- FACTORY_SETGLOBALOGO_BGAIN = 290,
- FACTORY_SETGLOBALOGO_ROFFSET = 291,
- FACTORY_SETGLOBALOGO_GOFFSET = 292,
- FACTORY_SETGLOBALOGO_BOFFSET = 293,
- FACTORY_CLEAN_ALL_TABLE_FOR_PROGRAM = 294,
-
-
- // FACTORY END
-
- // AUDIO
- // AUDIO MUTE
- SET_AUDIO_MUTEKEY_STATUS = 301,
- GET_AUDIO_MUTEKEY_STATUS = 302,
- SET_AUDIO_FORCE_MUTE_STATUS = 303,
- GET_AUDIO_FORCE_MUTE_STATUS = 304,
- SET_AUDIO_AVOUT_MUTE_STATUS = 305,
- GET_AUDIO_AVOUT_MUTE_STATUS = 306,
- SET_AUDIO_SPDIF_MUTE_STATUS = 307,
- GET_AUDIO_SPDIF_MUTE_STATUS = 308,
- // AUDIO MASTER VOLUME
- SET_AUDIO_MASTER_VOLUME = 309,
- GET_AUDIO_MASTER_VOLUME = 310,
- SAVE_CUR_AUDIO_MASTER_VOLUME = 311,
- GET_CUR_AUDIO_MASTER_VOLUME = 312,
- // AUDIO BALANCE
- SET_AUDIO_BALANCE = 313,
- GET_AUDIO_BALANCE = 314,
- SAVE_CUR_AUDIO_BALANCE = 315,
- GET_CUR_AUDIO_BALANCE = 316,
- // AUDIO SUPPERBASS VOLUME
- SET_AUDIO_SUPPER_BASS_VOLUME = 317,
- GET_AUDIO_SUPPER_BASS_VOLUME = 318,
- SAVE_CUR_AUDIO_SUPPER_BASS_VOLUME = 319,
- GET_CUR_AUDIO_SUPPER_BASS_VOLUME = 320,
- // AUDIO SUPPERBASS SWITCH
- SET_AUDIO_SUPPER_BASS_SWITCH = 321,
- GET_AUDIO_SUPPER_BASS_SWITCH = 322,
- SAVE_CUR_AUDIO_SUPPER_BASS_SWITCH = 323,
- GET_CUR_AUDIO_SUPPER_BASS_SWITCH = 324,
- // AUDIO SRS SURROUND SWITCH
- SET_AUDIO_SRS_SURROUND = 325,
- GET_AUDIO_SRS_SURROUND = 326,
- SAVE_CUR_AUDIO_SRS_SURROUND = 327,
- GET_CUR_AUDIO_SRS_SURROUND = 328,
- // AUDIO SRS DIALOG CLARITY
- SET_AUDIO_SRS_DIALOG_CLARITY = 329,
- GET_AUDIO_SRS_DIALOG_CLARITY = 330,
- SAVE_CUR_AUDIO_SRS_DIALOG_CLARITY = 331,
- GET_CUR_AUDIO_SRS_DIALOG_CLARITY = 332,
- // AUDIO SRS TRUBASS
- SET_AUDIO_SRS_TRU_BASS = 333,
- GET_AUDIO_SRS_TRU_BASS = 334,
- SAVE_CUR_AUDIO_SRS_TRU_BASS = 335,
- GET_CUR_AUDIO_SRS_TRU_BASS = 336,
- // AUDIO BASS
- SET_AUDIO_BASS_VOLUME = 337,
- GET_AUDIO_BASS_VOLUME = 338,
- SAVE_CUR_AUDIO_BASS_VOLUME = 339,
- GET_CUR_AUDIO_BASS_VOLUME = 340,
- // AUDIO TREBLE
- SET_AUDIO_TREBLE_VOLUME = 341,
- GET_AUDIO_TREBLE_VOLUME = 342,
- SAVE_CUR_AUDIO_TREBLE_VOLUME = 343,
- GET_CUR_AUDIO_TREBLE_VOLUME = 344,
- // AUDIO SOUND MODE
- SET_AUDIO_SOUND_MODE = 345,
- GET_AUDIO_SOUND_MODE = 346,
- SAVE_CUR_AUDIO_SOUND_MODE = 347,
- GET_CUR_AUDIO_SOUND_MODE = 348,
- // AUDIO WALL EFFECT
- SET_AUDIO_WALL_EFFECT = 349,
- GET_AUDIO_WALL_EFFECT = 350,
- SAVE_CUR_AUDIO_WALL_EFFECT = 351,
- GET_CUR_AUDIO_WALL_EFFECT = 352,
- // AUDIO EQ MODE
- SET_AUDIO_EQ_MODE = 353,
- GET_AUDIO_EQ_MODE = 354,
- SAVE_CUR_AUDIO_EQ_MODE = 355,
- GET_CUR_AUDIO_EQ_MODE = 356,
- // AUDIO EQ GAIN
- GET_AUDIO_EQ_RANGE = 357,
- GET_AUDIO_EQ_BAND_COUNT = 358,
- SET_AUDIO_EQ_GAIN = 359,
- GET_AUDIO_EQ_GAIN = 360,
- GET_CUR_EQ_GAIN = 361,
- SAVE_CUR_AUDIO_EQ_GAIN = 362,
- SET_AUDIO_EQ_SWITCH = 363,
- // AUDIO SPDIF SWITCH
- SET_AUDIO_SPDIF_SWITCH = 364,
- GET_AUDIO_SPDIF_SWITCH = 365,
- SAVE_CUR_AUDIO_SPDIF_SWITCH = 366,
- GET_CUR_AUDIO_SPDIF_SWITCH = 367,
- // AUDIO SPDIF MODE
- SET_AUDIO_SPDIF_MODE = 368,
- GET_AUDIO_SPDIF_MODE = 369,
- SAVE_CUR_AUDIO_SPDIF_MODE = 370,
- GET_CUR_AUDIO_SPDIF_MODE = 371,
- // amAudio
- OPEN_AMAUDIO = 372,
- CLOSE_AMAUDIO = 373,
- SET_AMAUDIO_INPUT_SR = 374,
- SET_AMAUDIO_OUTPUT_MODE = 375,
- SET_AMAUDIO_MUSIC_GAIN = 376,
- SET_AMAUDIO_LEFT_GAIN = 377,
- SET_AMAUDIO_RIGHT_GAIN = 378,
- SET_AMAUDIO_REV1 = 379,
- SET_AMAUDIO_REV2 = 380,
- SET_AMAUDIO_REV3 = 381,
- SET_AMAUDIO_REV4 = 382,
- SET_AMAUDIO_REV5 = 383,
- //AUDIO INPUT LEVEL SWITCH
- SELECT_LINE_IN_CHANNEL = 384,
- SET_LINE_IN_CAPTURE_VOL = 385,
- HANDLE_AUDIO_HEADSET_PLUG_IN = 386,
- HANDLE_AUDIO_HEADSET_PULL_OUT = 387,
- SET_AUDIO_VOL_COMP = 388,
- GET_AUDIO_VOL_COMP = 389,
- SET_NOISE_GATE_THRESHOLD = 390,
- SAVE_AUDIO_VOL_COMP = 391,
- SET_KALAOK_IO_LEVEL = 392,
- AUDIO_SET_DOUBLE_OUTPUT_ENABLE = 393,
- USB_AUDIO_OUPUT_MODULE_ENABLE = 394,
- GET_USB_AUDIO_DOUBLE_OUPUT_MODULE_ENABLE = 395,
- GET_USB_AUDIO_OUPUT_MODULE_ENABLE = 396,
- SET_AUDIO_SOURCE_FOR_KARAOKE = 397,
- //AUDIO END
-
- // CALLBACK
- SEARCH_CALLBACK = 501,
- SIGLE_DETECT_CALLBACK = 502,
- VGA_CALLBACK = 503,
- DREAM_PANEL_CALLBACK = 504,
- ADC_CALIBRATION_CALLBACK = 505,
- SOURCE_SWITCH_CALLBACK = 506,
- CHANNEL_SELECT_CALLBACK = 507,
- STATUS_3D_CALLBACK = 508,
- DTV_AV_PLAYBACK_CALLBACK = 509,
- SOURCE_CONNECT_CALLBACK = 510,
- HDMIRX_CEC_CALLBACK = 511,
- SERIAL_COMMUNICATION_CALLBACK = 512,
- CLOSE_CAPTION_CALLBACK = 514,
- VCHIP_CALLBACK = 515,
- UPGRADE_FBC_CALLBACK = 516,
- HEADSET_STATUS_CALLBACK = 517,
-
- RELEASE_RESOURCE_CALLBACK = 530,
- RESOURCES_STATE_CHANGED_CALLBACK = 531,
- RESOURCE_STATE_CHANGED_LISTEN_NOFIFY_CALLBACK = 532,
-
- SUBTITLE_UPDATE_CALLBACK = 540,
- SCAN_EVENT_CALLBACK = 541,
- EPG_EVENT_CALLBACK = 542,
- VFRAME_BMP_EVENT_CALLBACK = 543,
- // CALLBACK END
-
- // SSM
- SSM_INIT_DEVICE = 600,
- SSM_SAVE_ONE_BYTE = 601,
- SSM_READ_ONE_BYTE = 602,
- SSM_SAVE_N_BYTES = 603,
- SSM_READ_N_BYTES = 604,
- SSM_SAVE_POWER_ON_OFF_CHANNEL = 605,
- SSM_READ_POWER_ON_OFF_CHANNEL = 606,
- SSM_SAVE_SOURCE_INPUT = 607,
- SSM_READ_SOURCE_INPUT = 608,
- SSM_SAVE_LAST_SOURCE_INPUT = 609,
- SSM_READ_LAST_SOURCE_INPUT = 610,
- SSM_SAVE_SYS_LANGUAGE = 611,
- SSM_READ_SYS_LANGUAGE = 612,
- SSM_SAVE_AGING_MODE = 613,
- SSM_READ_AGING_MODE = 614,
- SSM_SAVE_PANEL_TYPE = 615,
- SSM_READ_PANEL_TYPE = 616,
- SSM_SAVE_MAC_ADDR = 617,
- SSM_READ_MAC_ADDR = 618,
- SSM_SAVE_BAR_CODE = 619,
- SSM_READ_BAR_CODE = 620,
- SSM_SAVE_POWER_ON_MUSIC_SWITCH = 623,
- SSM_READ_POWER_ON_MUSIC_SWITCH = 624,
- SSM_SAVE_POWER_ON_MUSIC_VOL = 625,
- SSM_READ_POWER_ON_MUSIC_VOL = 626,
- SSM_SAVE_SYS_SLEEP_TIMER = 627,
- SSM_READ_SYS_SLEEP_TIMER = 628,
- SSM_SET_BUS_STATUS = 629,
- SSM_GET_BUS_STATUS = 630,
- SSM_SAVE_INPUT_SRC_PARENTAL_CTL = 631,
- SSM_READ_INPUT_SRC_PARENTAL_CTL = 632,
- SSM_SAVE_PARENTAL_CTL_SWITCH = 633,
- SSM_READ_PARENTAL_CTL_SWITCH = 634,
- SSM_SAVE_PARENTAL_CTL_PASS_WORD = 635,
- SSM_READ_PARENTAL_CTL_PASS_WORD = 636,
- SSM_SAVE_USING_DEF_HDCP_KEY_FLAG = 637,
- SSM_READ_USING_DEF_HDCP_KEY_FLAG = 638,
- SSM_GET_CUSTOMER_DATA_START = 639,
- SSM_GET_CUSTOMER_DATA_LEN = 640,
- SSM_SAVE_STANDBY_MODE = 641,
- SSM_READ_STANDBY_MODE = 642,
- SSM_SAVE_LOGO_ON_OFF_FLAG = 643,
- SSM_READ_LOGO_ON_OFF_FLAG = 644,
- SSM_SAVE_HDMIEQ_MODE = 645,
- SSM_READ_HDMIEQ_MODE = 646,
- SSM_SAVE_HDMIINTERNAL_MODE = 647,
- SSM_READ_HDMIINTERNAL_MODE = 648,
- SSM_SAVE_DISABLE_3D = 649,
- SSM_READ_DISABLE_3D = 650,
- SSM_SAVE_GLOBAL_OGOENABLE = 651,
- SSM_READ_GLOBAL_OGOENABLE = 652,
- SSM_SAVE_LOCAL_DIMING_STATUS = 653,
- SSM_READ_LOCAL_DIMING_STATUS = 654,
- SSM_SAVE_NON_STANDARD_STATUS = 655,
- SSM_READ_NON_STANDARD_STATUS = 656,
- SSM_SAVE_ADB_SWITCH_STATUS = 657,
- SSM_READ_ADB_SWITCH_STATUS = 658,
- SSM_SAVE_SERIAL_CMD_SWITCH_STATUS = 659,
- SSM_READ_SERIAL_CMD_SWITCH_STATUS = 660,
- SSM_SET_HDCP_KEY = 661,
- SSM_SAVE_CHROMA_STATUS = 662,
- SSM_SAVE_CA_BUFFER_SIZE = 663,
- SSM_READ_CA_BUFFER_SIZE = 664,
- SSM_GET_ATV_DATA_START = 665,
- SSM_GET_ATV_DATA_LEN = 666,
- SSM_GET_VPP_DATA_START = 667,
- SSM_GET_VPP_DATA_LEN = 668,
- SSM_SAVE_NOISE_GATE_THRESHOLD_STATUS = 669,
- SSM_READ_NOISE_GATE_THRESHOLD_STATUS = 670,
- SSM_SAVE_PROJECT_ID = 673,
- SSM_READ_PROJECT_ID = 674,
- SSM_SAVE_HDCPKEY = 675,
- SSM_READ_HDCPKEY = 676,
- SSM_READ_BLACKOUT_ENABLE = 677,
- SSM_REFRESH_HDCPKEY = 678,
-
- // Misc
- MISC_PROP_SET = 701,
- MISC_PROP_GET = 702,
- MISC_CFG_SET = 703,
- MISC_CFG_GET = 704,
- MISC_READ_ADC_VAL = 707,
- MISC_SET_WDT_USER_PET = 708,
- MISC_SET_WDT_USER_COUNTER = 709,
- MISC_SET_WDT_USER_PET_RESET_ENABLE = 710,
- MISC_GET_TV_API_VERSION = 713,
- MISC_GET_DVB_API_VERSION = 714,
- MISC_SERIAL_SWITCH = 715,
- MISC_SERIAL_SEND_DATA = 716,
- MISC_CHANNEL_EXPORT = 721,
- MISC_CHANNEL_IMPORT = 722,
- MISC_GET_PROJECT_INFO = 723,
- MISC_GET_PLATFORM_TYPE = 724,
-
- //Extra
- FORMAT_PARTITION = 801,
- DELETE_DIR_FILES = 802,
- REQUEST_RESOURCES = 803,
- RELEASED_RESOURCES = 804,
- SET_LISTEN_TO_RESOURCE = 805,
- QUERY_RESOURCE_STATE = 806,
- GET_DISPLAY_RESOLUTION_CONFIG = 808,
- GET_DISPLAY_RESOLUTION_INFO = 809,
- HDMIRX_CEC_SEND_CUSTOM_MESSAGE = 810,
- HDMIRX_CEC_SEND_CUSTOM_WAIT_REPLY_MESSAGE = 811,
- HDMIRX_CEC_SEND_BROADCAST_STANDBY_MESSAGE = 812,
- HDMIRX_CEC_SEND_GIVE_CEC_VERSION_MESSAGE = 813,
- HDMIRX_CEC_SEND_GIVE_DEV_VENDOR_ID_MESSAGE = 814,
- HDMIRX_CEC_SEND_GIVE_OSD_NAME_MESSAGE = 815,
- GET_HDMI_KSV_INFO = 816,
-
- //Fac_FBC
- FACTORY_FBC_UPGRADE = 900,
- FACTORY_FBC_SET_BRIGHTNESS = 901,
- FACTORY_FBC_GET_BRIGHTNESS = 902,
- FACTORY_FBC_SET_CONTRAST = 903,
- FACTORY_FBC_GET_CONTRAST = 904,
- FACTORY_FBC_SET_SATURATION = 905,
- FACTORY_FBC_GET_SATURATION = 906,
- FACTORY_FBC_SET_HUE = 907,
- FACTORY_FBC_GET_HUE = 908,
- FACTORY_FBC_SET_BACKLIGHT = 909,
- FACTORY_FBC_GET_BACKLIGHT = 910,
- FACTORY_FBC_SET_PIC_MODE = 911,
- FACTORY_FBC_GET_PIC_MODE = 912,
- FACTORY_FBC_SET_GAIN_RED = 913,
- FACTORY_FBC_GET_GAIN_RED = 914,
- FACTORY_FBC_SET_GAIN_GREEN = 915,
- FACTORY_FBC_GET_GAIN_GREEN = 916,
- FACTORY_FBC_SET_GAIN_BLUE = 917,
- FACTORY_FBC_GET_GAIN_BLUE = 918,
- FACTORY_FBC_SET_OFFSET_RED = 919,
- FACTORY_FBC_GET_OFFSET_RED = 920,
- FACTORY_FBC_SET_OFFSET_GREEN = 921,
- FACTORY_FBC_GET_OFFSET_GREEN = 922,
- FACTORY_FBC_SET_OFFSET_BLUE = 923,
- FACTORY_FBC_GET_OFFSET_BLUE = 924,
- FACTORY_FBC_SET_COLORTEMP_MODE = 925,
- FACTORY_FBC_GET_COLORTEMP_MODE = 926,
- FACTORY_FBC_SET_WB_INIT = 927,
- FACTORY_FBC_GET_WB_INIT = 928,
- FACTORY_FBC_SET_TEST_PATTERN = 929,
- FACTORY_FBC_GET_TEST_PATTERN = 930,
- FACTORY_FBC_SET_BACKLIGHT_EN = 931,
- FACTORY_FBC_GET_BACKLIGHT_EN = 932,
- FACTORY_FBC_SET_LVDS_SSG = 933,
- FACTORY_FBC_SET_ELEC_MODE = 934,
- FACTORY_FBC_GET_MAINCODE_VERSION = 935,
- FACTORY_FBC_PANEL_POWER_SWITCH = 936,
- FACTORY_FBC_PANEL_GET_INFO = 937,
- FACTORY_FBC_PANEL_SUSPEND = 938,
- FACTORY_FBC_SEND_KEY_TO_FBC = 939,
- FACTORY_FBC_POWER_REBOOT = 940,
- FACTORY_FBC_GET_ELEC_MODE = 941,
- FACTORY_FBC_PANEL_USER_SETTING_DEFAULT = 942,
- FACTORY_FBC_SET_BACKLIGHT_N360 = 943,
- FACTORY_FBC_GET_BACKLIGHT_N360 = 944,
- FACTORY_FBC_SET_COLORTEMP_MODE_N360 = 945,
- FACTORY_FBC_GET_COLORTEMP_MODE_N360 = 946,
-
- //T868 for cvt
- FACTORY_SETBACKLIGHT_PWM_FREQUENCY = 1000,
- FACTORY_GETBACKLIGHT_PWM_FREQUENCY = 1001,
- FACTORY_SETBACKLIGHT_SWITCH_STATUS = 1002,
- FACTORY_GETBACKLIGHT_SWITCH_STATUS = 1003,
- FACTORY_SETBACKLIGHT_PWM_DUTY = 1004,
- FACTORY_GETBACKLIGHT_PWM_DUTY = 1005,
- FACTORY_SETLVDS_COLOR_DEPTH = 1006,
- FACTORY_GETLVDS_COLOR_DEPTH = 1007,
- FACTORY_SETLVDS_DITHER_STATUS = 1008,
- FACTORY_GETLVDS_DITHER_STATUS = 1009,
- FACTORY_SETLVDS_MAPPING_STATUS = 1010,
- FACTORY_GETLVDS_MAPPING_STATUS = 1011,
- FACTORY_SETLVDS_PORT_SWAP_STATUS = 1012,
- FACTORY_GETLVDS_PORT_SWAP_STATUS = 1013,
- FACTORY_SET_SN = 1014,
- FACTORY_GET_SN = 1015,
-
- //Uniform White Balance
- FACTORY_WHITE_BALANCE_SET_GAIN_RED = 1100,
- FACTORY_WHITE_BALANCE_GET_GAIN_RED = 1101,
- FACTORY_WHITE_BALANCE_SET_GAIN_GREEN = 1102,
- FACTORY_WHITE_BALANCE_GET_GAIN_GREEN = 1103,
- FACTORY_WHITE_BALANCE_SET_GAIN_BLUE = 1104,
- FACTORY_WHITE_BALANCE_GET_GAIN_BLUE = 1105,
- FACTORY_WHITE_BALANCE_SET_OFFSET_RED = 1106,
- FACTORY_WHITE_BALANCE_GET_OFFSET_RED = 1107,
- FACTORY_WHITE_BALANCE_SET_OFFSET_GREEN = 1108,
- FACTORY_WHITE_BALANCE_GET_OFFSET_GREEN = 1109,
- FACTORY_WHITE_BALANCE_SET_OFFSET_BLUE = 1110,
- FACTORY_WHITE_BALANCE_GET_OFFSET_BLUE = 1111,
- FACTORY_WHITE_BALANCE_GET_COLOR_TMP = 1112,
- FACTORY_WHITE_BALANCE_SET_COLOR_TMP = 1113,
- FACTORY_WHITE_BALANCE_SAVE_PRAMAS = 1114,
- FACTORY_WHITE_BALANCE_SET_WB_INIT = 1115,
- FACTORY_WHITE_BALANCE_GET_WB_INIT = 1116,
- FACTORY_WHITE_BALANCE_SET_GRAY_PATTERN = 1117,
- FACTORY_WHITE_BALANCE_GET_GRAY_PATTERN = 1118,
- FACTORY_WHITE_BALANCE_OPEN_GRAY_PATTERN = 1119,
- FACTORY_WHITE_BALANCE_CLOSE_GRAY_PATTERN = 1120,
- FACTORY_WHITE_BALANCE_GET_ALL_PRAMAS = 1121,
-
- //dtv
- ATV_GET_CURRENT_PROGRAM_ID = 1389,
- DTV_GET_CURRENT_PROGRAM_ID = 1390,
- ATV_SAVE_PROGRAM_ID = 1391,
- DTV_SCAN_MANUAL_BETWEEN_FREQ = 1392,
- ATV_GET_MIN_MAX_FREQ = 1393,
- DTV_GET_SCAN_FREQUENCY_LIST = 1394,
- DTV_GET_CHANNEL_INFO = 1395,
- ATV_GET_CHANNEL_INFO = 1396,
- ATV_SCAN_MANUAL = 1397,
- ATV_SCAN_MANUAL_BY_NUMBER = 1387,
- ATV_SCAN_AUTO = 1398,
- DTV_SCAN_MANUAL = 1399,
- DTV_SCAN_AUTO = 1400,
- TV_SUBTITLE_DRAW_END = 1401,
- PLAY_PROGRAM = 1402,
- STOP_PROGRAM_PLAY = 1403,
- GET_PROGRAM_LIST = 1404,
- STOP_SCAN = 1405,
- DTV_GET_SNR = 1406,
- DTV_GET_BER = 1407,
- DTV_GET_STRENGTH = 1408,
- DTV_GET_AUDIO_TRACK_NUM = 1409,
- DTV_GET_AUDIO_TRACK_INFO = 1410,
- DTV_SWITCH_AUDIO_TRACK = 1411,
- DTV_GET_EPG_UTC_TIME = 1412,
- DTV_GET_CUR_FREQ = 1413,
- DTV_GET_EPG_INFO_POINT_IN_TIME = 1414,
- DTV_GET_EPG_INFO_DURATION = 1415,
- SET_FRONTEND_PARA = 1416,
- DTV_SET_PROGRAM_NAME = 1417,
- DTV_SET_PROGRAM_SKIPPED = 1418,
- DTV_SET_PROGRAM_FAVORITE = 1419,
- DTV_DETELE_PROGRAM = 1420,
- DTV_SWAP_PROGRAM = 1421,
- DTV_SET_PROGRAM_LOCKED = 1422,
- DTV_SET_BOOKING_FLAG = 1423,
- DTV_GET_BOOKED_EVENT = 1424,
- DTV_GET_CURR_AUDIO_TRACK_INDEX = 1425,
- DTV_SET_AUDIO_CHANNEL_MOD = 1426,
- DTV_GET_AUDIO_CHANNEL_MOD = 1427,
- DTV_GET_FREQ_BY_PROG_ID = 1428,
- DTV_GET_VIDEO_FMT_INFO = 1429,
- DTV_START_RECORD = 1430,
- DTV_STOP_RECORD = 1431,
- DTV_SET_RECORD_ALL_TS = 1432,
- DTV_SCAN_AUTO_ATSC = 1433,
- DTV_TEST_1 = 1451,
- DTV_TEST_2 = 1452,
- DTV_TEST_3 = 1453,
- TV_CLEAR_ALL_PROGRAM = 1454,
- SET_BLACKOUT_ENABLE = 1455,
- START_AUTO_BACKLIGHT = 1456,
- STOP_AUTO_BACKLIGHT = 1457,
- IS_AUTO_BACKLIGHTING = 1458,
- TV_PRINT_DEBUG_INFO = 2000,
-
- //customer interface
- FACTROY_FBC_SET_LIGHT_SENSOR_STATUS_N310 = 3000,
- FACTROY_FBC_GET_LIGHT_SENSOR_STATUS_N310 = 3001,
- FACTROY_FBC_SET_DREAM_PANEL_STATUS_N310 = 3002,
- FACTROY_FBC_GET_DREAM_PANEL_STATUS_N310 = 3003,
- SSM_EEPROM_SAVE_ONE_BYTE_N310_N311 = 3004,
- SSM_EEPROM_READ_ONE_BYTE_N310_N311 = 3005,
- SSM_EEPROM_SAVE_N_BYTES_N310_N311 = 3006,
- SSM_EEPROM_READ_N_BYTES_N310_N311 = 3007,
- SSM_FLASH_SAVE_ONE_BYTE_N310_N311 = 3008,
- SSM_FLASH_READ_ONE_BYTE_N310_N311 = 3009,
- SSM_FLASH_SAVE_N_BYTES_N310_N311 = 3010,
- SSM_FLASH_READ_N_BYTES_N310_N311 = 3011,
- FACTROY_FBC_SET_MULT_PQ_STATUS_N310 = 3012,
- FACTROY_FBC_GET_MULT_PQ_STATUS_N310 = 3013,
- FACTROY_FBC_SET_MEMC_STATUS_N310 = 3014,
- FACTROY_FBC_GET_MEMC_STATUS_N310 = 3015,
-
-};
-
-#endif //ANDROID_AMLOGIC_TVCMD_H
+#ifndef ANDROID_AMLOGIC_TVCMD_H
+#define ANDROID_AMLOGIC_TVCMD_H
+
+enum tvcmd_e {
+ // Tv function
+ OPEN_TV = 1,
+ CLOSE_TV = 2,
+ START_TV = 3,
+ STOP_TV = 4,
+ GET_TV_STATUS = 5,
+ GET_LAST_SOURCE_INPUT = 6,
+ GET_CURRENT_SOURCE_INPUT = 7,
+ GET_CURRENT_SOURCE_INPUT_TYPE = 8,
+ GET_CURRENT_SIGNAL_INFO = 9,
+ IS_SOURCE_SWTICH_DONE = 10,
+ SET_SOURCE_INPUT = 11,
+ RUN_ADC_AUTO_CALIBRATION = 12,
+ IS_DVI_SIGNAL = 13,
+ IS_VGA_TIMEING_IN_HDMI = 14,
+ GET_VIDEO_PATH_STATUS = 15,
+ GET_VIDEO_STREAM_STATUS = 16,
+ GET_FIRST_START_SWITCH_TYPE = 17,
+ SET_PREVIEW_WINDOW = 18,
+ GET_SOURCE_CONNECT_STATUS = 19,
+ //Tv function END
+
+ // VGA
+ RUN_VGA_AUTO_ADJUST = 20,
+ GET_VGA_AUTO_ADJUST_STATUS = 21,
+ IS_VGA_AUTO_ADJUST_DONE = 22,
+ SET_VGA_HPOS = 23,
+ GET_VGA_HPOS = 24,
+ SET_VGA_VPOS = 25,
+ GET_VGA_VPOS = 26,
+ SET_VGA_CLOCK = 27,
+ GET_VGA_CLOCK = 28,
+ SET_VGA_PHASE = 29,
+ GET_VGA_PHASE = 30,
+ SET_VGA_AJUST_PARA = 31,
+ GET_VGA_AJUST_PARA = 32,
+ SET_VGAPARAM_DEFAULT = 33,
+
+ // 3D
+ SET_3D_MODE = 61,
+ GET_3D_MODE = 62,
+ SET_3D_LR_SWITH = 63,
+ GET_3D_LR_SWITH = 64,
+ SET_3D_TO_2D_MODE = 65,
+ GET_3D_TO_2D_MODE = 66,
+ SET_3D_DEPTH = 67,
+ GET_3D_DEPTH = 68,
+ GET_3D_AUTO_DETECT = 69,
+ SET_3D_AUTO_DETECT = 70,
+ // 3D END
+
+ //Screen related
+ SET_VIDEO_DISABLE = 80,
+
+ // PQ
+ SET_SCENEMODE = 192,
+ GET_SCENEMODE = 193,
+ SET_BRIGHTNESS = 194,
+ GET_BRIGHTNESS = 195,
+ SAVE_BRIGHTNESS = 196,
+ SET_CONTRAST = 197,
+ GET_CONTRAST = 198,
+ SAVE_CONTRAST = 199,
+ SET_SATUATION = 200,
+ GET_SATUATION = 201,
+ SAVE_SATUATION = 202,
+ SET_HUE = 203,
+ GET_HUE = 204,
+ SAVE_HUE = 205,
+ SET_PQMODE = 206,
+ GET_PQMODE = 207,
+ SAVE_PQMODE = 208,
+ SET_SHARPNESS = 209,
+ GET_SHARPNESS = 210,
+ SAVE_SHARPNESS = 211,
+ SET_BACKLIGHT = 212,
+ GET_BACKLIGHT = 213,
+ SAVE_BACKLIGHT = 214,
+ SET_COLOR_MODE = 215,
+ GET_COLOR_MODE = 216,
+ SAVE_COLOR_MODE = 217,
+ SET_COLOR_TEMPERATURE = 218,
+ GET_COLOR_TEMPERATURE = 219,
+ SAVE_COLOR_TEMPERATURE = 220,
+ SET_DISPLAY_MODE = 221,
+ GET_DISPLAY_MODE = 222,
+ SAVE_DISPLAY_MODE = 223,
+ SET_NOISE_REDUCTION_MODE = 224,
+ GET_NOISE_REDUCTION_MODE = 225,
+ SAVE_NOISE_REDUCTION_MODE = 226,
+ SETRGBOGO_POSTOFFSET = 227,
+ //SETRGBOGO_POSTOFFSET_G = 228,
+ //SETRGBOGO_POSTOFFSET_B = 229,
+ SETRGBOGO_GAIN = 230,
+ //SETRGBOGO_GAIN_G = 231,
+ //SETRGBOGO_GAIN_B = 232,
+ GETRGBOGO_POSTOFFSET = 233,
+ //GETRGBOGO_POSTOFFSET_G = 234,
+ //GETRGBOGO_POSTOFFSET_B = 235,
+ GETRGBOGO_GAIN = 236,
+ //GETRGBOGO_GAIN_G = 237,
+ //GETRGBOGO_GAIN_B = 238,
+
+ // FACTORY
+ FACTORY_SETPQMODE_BRIGHTNESS = 240,
+ FACTORY_GETPQMODE_BRIGHTNESS = 241,
+ FACTORY_SETPQMODE_CONTRAST = 242,
+ FACTORY_GETPQMODE_CONTRAST = 243,
+ FACTORY_SETPQMODE_SATURATION = 244,
+ FACTORY_GETPQMODE_SATURATION = 245,
+ FACTORY_SETPQMODE_HUE = 246,
+ FACTORY_GETPQMODE_HUE = 247,
+ FACTORY_SETPQMODE_SHARPNESS = 248,
+ FACTORY_GETPQMODE_SHARPNESS = 249,
+ FACTORY_SETCOLORTEMP_RGAIN = 250,
+ FACTORY_SAVECOLORTEMP_RGAIN = 251,
+ FACTORY_GETCOLORTEMP_RGAIN = 252,
+ FACTORY_SETCOLORTEMP_GGAIN = 253,
+ FACTORY_SAVECOLORTEMP_GGAIN = 254,
+ FACTORY_GETCOLORTEMP_GGAIN = 255,
+ FACTORY_SETCOLORTEMP_BGAIN = 256,
+ FACTORY_SAVECOLORTEMP_BGAIN = 257,
+ FACTORY_GETCOLORTEMP_BGAIN = 258,
+ FACTORY_SETCOLORTEMP_ROFFSET = 259,
+ FACTORY_SAVECOLORTEMP_ROFFSET = 260,
+ FACTORY_GETCOLORTEMP_ROFFSET = 261,
+ FACTORY_SETCOLORTEMP_GOFFSET = 262,
+ FACTORY_SAVECOLORTEMP_GOFFSET = 263,
+ FACTORY_GETCOLORTEMP_GOFFSET = 264,
+ FACTORY_SETCOLORTEMP_BOFFSET = 265,
+ FACTORY_SAVECOLORTEMP_BOFFSET = 266,
+ FACTORY_GETCOLORTEMP_BOFFSET = 267,
+ FACTORY_SETTESTPATTERN = 268,
+ FACTORY_GETTESTPATTERN = 269,
+ FACTORY_RESETPQMODE = 270,
+ FACTORY_RESETCOLORTEMP = 271,
+ FACTORY_RESETPAMAMSDEFAULT = 272,
+ FACTORY_SETDDRSSC = 273,
+ FACTORY_GETDDRSSC = 274,
+ FACTORY_SETLVDSSSC = 275,
+ FACTORY_GETLVDSSSC = 276,
+ FACTORY_SETNOLINEPARAMS = 277,
+ FACTORY_GETNOLINEPARAMS = 278,
+ FACTORY_SETOVERSCAN = 279,
+ FACTORY_GETOVERSCAN = 280,
+ FACTORY_SET_OUT_DEFAULT = 281,
+ FACTORY_GETGLOBALOGO_RGAIN = 282,
+ FACTORY_GETGLOBALOGO_GGAIN = 283,
+ FACTORY_GETGLOBALOGO_BGAIN = 284,
+ FACTORY_GETGLOBALOGO_ROFFSET = 285,
+ FACTORY_GETGLOBALOGO_GOFFSET = 286,
+ FACTORY_GETGLOBALOGO_BOFFSET = 287,
+ FACTORY_SETGLOBALOGO_RGAIN = 288,
+ FACTORY_SETGLOBALOGO_GGAIN = 289,
+ FACTORY_SETGLOBALOGO_BGAIN = 290,
+ FACTORY_SETGLOBALOGO_ROFFSET = 291,
+ FACTORY_SETGLOBALOGO_GOFFSET = 292,
+ FACTORY_SETGLOBALOGO_BOFFSET = 293,
+ FACTORY_CLEAN_ALL_TABLE_FOR_PROGRAM = 294,
+
+
+ // FACTORY END
+
+ // AUDIO
+ // AUDIO MUTE
+ SET_AUDIO_MUTEKEY_STATUS = 301,
+ GET_AUDIO_MUTEKEY_STATUS = 302,
+ SET_AUDIO_FORCE_MUTE_STATUS = 303,
+ GET_AUDIO_FORCE_MUTE_STATUS = 304,
+ SET_AUDIO_AVOUT_MUTE_STATUS = 305,
+ GET_AUDIO_AVOUT_MUTE_STATUS = 306,
+ SET_AUDIO_SPDIF_MUTE_STATUS = 307,
+ GET_AUDIO_SPDIF_MUTE_STATUS = 308,
+ // AUDIO MASTER VOLUME
+ SET_AUDIO_MASTER_VOLUME = 309,
+ GET_AUDIO_MASTER_VOLUME = 310,
+ SAVE_CUR_AUDIO_MASTER_VOLUME = 311,
+ GET_CUR_AUDIO_MASTER_VOLUME = 312,
+ // AUDIO BALANCE
+ SET_AUDIO_BALANCE = 313,
+ GET_AUDIO_BALANCE = 314,
+ SAVE_CUR_AUDIO_BALANCE = 315,
+ GET_CUR_AUDIO_BALANCE = 316,
+ // AUDIO SUPPERBASS VOLUME
+ SET_AUDIO_SUPPER_BASS_VOLUME = 317,
+ GET_AUDIO_SUPPER_BASS_VOLUME = 318,
+ SAVE_CUR_AUDIO_SUPPER_BASS_VOLUME = 319,
+ GET_CUR_AUDIO_SUPPER_BASS_VOLUME = 320,
+ // AUDIO SUPPERBASS SWITCH
+ SET_AUDIO_SUPPER_BASS_SWITCH = 321,
+ GET_AUDIO_SUPPER_BASS_SWITCH = 322,
+ SAVE_CUR_AUDIO_SUPPER_BASS_SWITCH = 323,
+ GET_CUR_AUDIO_SUPPER_BASS_SWITCH = 324,
+ // AUDIO SRS SURROUND SWITCH
+ SET_AUDIO_SRS_SURROUND = 325,
+ GET_AUDIO_SRS_SURROUND = 326,
+ SAVE_CUR_AUDIO_SRS_SURROUND = 327,
+ GET_CUR_AUDIO_SRS_SURROUND = 328,
+ // AUDIO SRS DIALOG CLARITY
+ SET_AUDIO_SRS_DIALOG_CLARITY = 329,
+ GET_AUDIO_SRS_DIALOG_CLARITY = 330,
+ SAVE_CUR_AUDIO_SRS_DIALOG_CLARITY = 331,
+ GET_CUR_AUDIO_SRS_DIALOG_CLARITY = 332,
+ // AUDIO SRS TRUBASS
+ SET_AUDIO_SRS_TRU_BASS = 333,
+ GET_AUDIO_SRS_TRU_BASS = 334,
+ SAVE_CUR_AUDIO_SRS_TRU_BASS = 335,
+ GET_CUR_AUDIO_SRS_TRU_BASS = 336,
+ // AUDIO BASS
+ SET_AUDIO_BASS_VOLUME = 337,
+ GET_AUDIO_BASS_VOLUME = 338,
+ SAVE_CUR_AUDIO_BASS_VOLUME = 339,
+ GET_CUR_AUDIO_BASS_VOLUME = 340,
+ // AUDIO TREBLE
+ SET_AUDIO_TREBLE_VOLUME = 341,
+ GET_AUDIO_TREBLE_VOLUME = 342,
+ SAVE_CUR_AUDIO_TREBLE_VOLUME = 343,
+ GET_CUR_AUDIO_TREBLE_VOLUME = 344,
+ // AUDIO SOUND MODE
+ SET_AUDIO_SOUND_MODE = 345,
+ GET_AUDIO_SOUND_MODE = 346,
+ SAVE_CUR_AUDIO_SOUND_MODE = 347,
+ GET_CUR_AUDIO_SOUND_MODE = 348,
+ // AUDIO WALL EFFECT
+ SET_AUDIO_WALL_EFFECT = 349,
+ GET_AUDIO_WALL_EFFECT = 350,
+ SAVE_CUR_AUDIO_WALL_EFFECT = 351,
+ GET_CUR_AUDIO_WALL_EFFECT = 352,
+ // AUDIO EQ MODE
+ SET_AUDIO_EQ_MODE = 353,
+ GET_AUDIO_EQ_MODE = 354,
+ SAVE_CUR_AUDIO_EQ_MODE = 355,
+ GET_CUR_AUDIO_EQ_MODE = 356,
+ // AUDIO EQ GAIN
+ GET_AUDIO_EQ_RANGE = 357,
+ GET_AUDIO_EQ_BAND_COUNT = 358,
+ SET_AUDIO_EQ_GAIN = 359,
+ GET_AUDIO_EQ_GAIN = 360,
+ GET_CUR_EQ_GAIN = 361,
+ SAVE_CUR_AUDIO_EQ_GAIN = 362,
+ SET_AUDIO_EQ_SWITCH = 363,
+ // AUDIO SPDIF SWITCH
+ SET_AUDIO_SPDIF_SWITCH = 364,
+ GET_AUDIO_SPDIF_SWITCH = 365,
+ SAVE_CUR_AUDIO_SPDIF_SWITCH = 366,
+ GET_CUR_AUDIO_SPDIF_SWITCH = 367,
+ // AUDIO SPDIF MODE
+ SET_AUDIO_SPDIF_MODE = 368,
+ GET_AUDIO_SPDIF_MODE = 369,
+ SAVE_CUR_AUDIO_SPDIF_MODE = 370,
+ GET_CUR_AUDIO_SPDIF_MODE = 371,
+ // amAudio
+ OPEN_AMAUDIO = 372,
+ CLOSE_AMAUDIO = 373,
+ SET_AMAUDIO_INPUT_SR = 374,
+ SET_AMAUDIO_OUTPUT_MODE = 375,
+ SET_AMAUDIO_MUSIC_GAIN = 376,
+ SET_AMAUDIO_LEFT_GAIN = 377,
+ SET_AMAUDIO_RIGHT_GAIN = 378,
+ SET_AMAUDIO_REV1 = 379,
+ SET_AMAUDIO_REV2 = 380,
+ SET_AMAUDIO_REV3 = 381,
+ SET_AMAUDIO_REV4 = 382,
+ SET_AMAUDIO_REV5 = 383,
+ //AUDIO INPUT LEVEL SWITCH
+ SELECT_LINE_IN_CHANNEL = 384,
+ SET_LINE_IN_CAPTURE_VOL = 385,
+ HANDLE_AUDIO_HEADSET_PLUG_IN = 386,
+ HANDLE_AUDIO_HEADSET_PULL_OUT = 387,
+ SET_AUDIO_VOL_COMP = 388,
+ GET_AUDIO_VOL_COMP = 389,
+ SET_NOISE_GATE_THRESHOLD = 390,
+ SAVE_AUDIO_VOL_COMP = 391,
+ SET_KALAOK_IO_LEVEL = 392,
+ AUDIO_SET_DOUBLE_OUTPUT_ENABLE = 393,
+ USB_AUDIO_OUPUT_MODULE_ENABLE = 394,
+ GET_USB_AUDIO_DOUBLE_OUPUT_MODULE_ENABLE = 395,
+ GET_USB_AUDIO_OUPUT_MODULE_ENABLE = 396,
+ SET_AUDIO_SOURCE_FOR_KARAOKE = 397,
+ //AUDIO END
+
+ // CALLBACK
+ SEARCH_CALLBACK = 501,
+ SIGLE_DETECT_CALLBACK = 502,
+ VGA_CALLBACK = 503,
+ DREAM_PANEL_CALLBACK = 504,
+ ADC_CALIBRATION_CALLBACK = 505,
+ SOURCE_SWITCH_CALLBACK = 506,
+ CHANNEL_SELECT_CALLBACK = 507,
+ STATUS_3D_CALLBACK = 508,
+ DTV_AV_PLAYBACK_CALLBACK = 509,
+ SOURCE_CONNECT_CALLBACK = 510,
+ HDMIRX_CEC_CALLBACK = 511,
+ SERIAL_COMMUNICATION_CALLBACK = 512,
+ CLOSE_CAPTION_CALLBACK = 514,
+ VCHIP_CALLBACK = 515,
+ UPGRADE_FBC_CALLBACK = 516,
+ HEADSET_STATUS_CALLBACK = 517,
+
+ RELEASE_RESOURCE_CALLBACK = 530,
+ RESOURCES_STATE_CHANGED_CALLBACK = 531,
+ RESOURCE_STATE_CHANGED_LISTEN_NOFIFY_CALLBACK = 532,
+
+ SUBTITLE_UPDATE_CALLBACK = 540,
+ SCAN_EVENT_CALLBACK = 541,
+ EPG_EVENT_CALLBACK = 542,
+ VFRAME_BMP_EVENT_CALLBACK = 543,
+ // CALLBACK END
+
+ // SSM
+ SSM_INIT_DEVICE = 600,
+ SSM_SAVE_ONE_BYTE = 601,
+ SSM_READ_ONE_BYTE = 602,
+ SSM_SAVE_N_BYTES = 603,
+ SSM_READ_N_BYTES = 604,
+ SSM_SAVE_POWER_ON_OFF_CHANNEL = 605,
+ SSM_READ_POWER_ON_OFF_CHANNEL = 606,
+ SSM_SAVE_SOURCE_INPUT = 607,
+ SSM_READ_SOURCE_INPUT = 608,
+ SSM_SAVE_LAST_SOURCE_INPUT = 609,
+ SSM_READ_LAST_SOURCE_INPUT = 610,
+ SSM_SAVE_SYS_LANGUAGE = 611,
+ SSM_READ_SYS_LANGUAGE = 612,
+ SSM_SAVE_AGING_MODE = 613,
+ SSM_READ_AGING_MODE = 614,
+ SSM_SAVE_PANEL_TYPE = 615,
+ SSM_READ_PANEL_TYPE = 616,
+ SSM_SAVE_MAC_ADDR = 617,
+ SSM_READ_MAC_ADDR = 618,
+ SSM_SAVE_BAR_CODE = 619,
+ SSM_READ_BAR_CODE = 620,
+ SSM_SAVE_POWER_ON_MUSIC_SWITCH = 623,
+ SSM_READ_POWER_ON_MUSIC_SWITCH = 624,
+ SSM_SAVE_POWER_ON_MUSIC_VOL = 625,
+ SSM_READ_POWER_ON_MUSIC_VOL = 626,
+ SSM_SAVE_SYS_SLEEP_TIMER = 627,
+ SSM_READ_SYS_SLEEP_TIMER = 628,
+ SSM_SET_BUS_STATUS = 629,
+ SSM_GET_BUS_STATUS = 630,
+ SSM_SAVE_INPUT_SRC_PARENTAL_CTL = 631,
+ SSM_READ_INPUT_SRC_PARENTAL_CTL = 632,
+ SSM_SAVE_PARENTAL_CTL_SWITCH = 633,
+ SSM_READ_PARENTAL_CTL_SWITCH = 634,
+ SSM_SAVE_PARENTAL_CTL_PASS_WORD = 635,
+ SSM_READ_PARENTAL_CTL_PASS_WORD = 636,
+ SSM_SAVE_USING_DEF_HDCP_KEY_FLAG = 637,
+ SSM_READ_USING_DEF_HDCP_KEY_FLAG = 638,
+ SSM_GET_CUSTOMER_DATA_START = 639,
+ SSM_GET_CUSTOMER_DATA_LEN = 640,
+ SSM_SAVE_STANDBY_MODE = 641,
+ SSM_READ_STANDBY_MODE = 642,
+ SSM_SAVE_LOGO_ON_OFF_FLAG = 643,
+ SSM_READ_LOGO_ON_OFF_FLAG = 644,
+ SSM_SAVE_HDMIEQ_MODE = 645,
+ SSM_READ_HDMIEQ_MODE = 646,
+ SSM_SAVE_HDMIINTERNAL_MODE = 647,
+ SSM_READ_HDMIINTERNAL_MODE = 648,
+ SSM_SAVE_DISABLE_3D = 649,
+ SSM_READ_DISABLE_3D = 650,
+ SSM_SAVE_GLOBAL_OGOENABLE = 651,
+ SSM_READ_GLOBAL_OGOENABLE = 652,
+ SSM_SAVE_LOCAL_DIMING_STATUS = 653,
+ SSM_READ_LOCAL_DIMING_STATUS = 654,
+ SSM_SAVE_NON_STANDARD_STATUS = 655,
+ SSM_READ_NON_STANDARD_STATUS = 656,
+ SSM_SAVE_ADB_SWITCH_STATUS = 657,
+ SSM_READ_ADB_SWITCH_STATUS = 658,
+ SSM_SAVE_SERIAL_CMD_SWITCH_STATUS = 659,
+ SSM_READ_SERIAL_CMD_SWITCH_STATUS = 660,
+ SSM_SET_HDCP_KEY = 661,
+ SSM_SAVE_CHROMA_STATUS = 662,
+ SSM_SAVE_CA_BUFFER_SIZE = 663,
+ SSM_READ_CA_BUFFER_SIZE = 664,
+ SSM_GET_ATV_DATA_START = 665,
+ SSM_GET_ATV_DATA_LEN = 666,
+ SSM_GET_VPP_DATA_START = 667,
+ SSM_GET_VPP_DATA_LEN = 668,
+ SSM_SAVE_NOISE_GATE_THRESHOLD_STATUS = 669,
+ SSM_READ_NOISE_GATE_THRESHOLD_STATUS = 670,
+ SSM_SAVE_PROJECT_ID = 673,
+ SSM_READ_PROJECT_ID = 674,
+ SSM_SAVE_HDCPKEY = 675,
+ SSM_READ_HDCPKEY = 676,
+ SSM_READ_BLACKOUT_ENABLE = 677,
+ SSM_REFRESH_HDCPKEY = 678,
+
+ // Misc
+ MISC_PROP_SET = 701,
+ MISC_PROP_GET = 702,
+ MISC_CFG_SET = 703,
+ MISC_CFG_GET = 704,
+ MISC_READ_ADC_VAL = 707,
+ MISC_SET_WDT_USER_PET = 708,
+ MISC_SET_WDT_USER_COUNTER = 709,
+ MISC_SET_WDT_USER_PET_RESET_ENABLE = 710,
+ MISC_GET_TV_API_VERSION = 713,
+ MISC_GET_DVB_API_VERSION = 714,
+ MISC_SERIAL_SWITCH = 715,
+ MISC_SERIAL_SEND_DATA = 716,
+ MISC_CHANNEL_EXPORT = 721,
+ MISC_CHANNEL_IMPORT = 722,
+ MISC_GET_PROJECT_INFO = 723,
+ MISC_GET_PLATFORM_TYPE = 724,
+
+ //Extra
+ FORMAT_PARTITION = 801,
+ DELETE_DIR_FILES = 802,
+ REQUEST_RESOURCES = 803,
+ RELEASED_RESOURCES = 804,
+ SET_LISTEN_TO_RESOURCE = 805,
+ QUERY_RESOURCE_STATE = 806,
+ GET_DISPLAY_RESOLUTION_CONFIG = 808,
+ GET_DISPLAY_RESOLUTION_INFO = 809,
+ HDMIRX_CEC_SEND_CUSTOM_MESSAGE = 810,
+ HDMIRX_CEC_SEND_CUSTOM_WAIT_REPLY_MESSAGE = 811,
+ HDMIRX_CEC_SEND_BROADCAST_STANDBY_MESSAGE = 812,
+ HDMIRX_CEC_SEND_GIVE_CEC_VERSION_MESSAGE = 813,
+ HDMIRX_CEC_SEND_GIVE_DEV_VENDOR_ID_MESSAGE = 814,
+ HDMIRX_CEC_SEND_GIVE_OSD_NAME_MESSAGE = 815,
+ GET_HDMI_KSV_INFO = 816,
+
+ //Fac_FBC
+ FACTORY_FBC_UPGRADE = 900,
+ FACTORY_FBC_SET_BRIGHTNESS = 901,
+ FACTORY_FBC_GET_BRIGHTNESS = 902,
+ FACTORY_FBC_SET_CONTRAST = 903,
+ FACTORY_FBC_GET_CONTRAST = 904,
+ FACTORY_FBC_SET_SATURATION = 905,
+ FACTORY_FBC_GET_SATURATION = 906,
+ FACTORY_FBC_SET_HUE = 907,
+ FACTORY_FBC_GET_HUE = 908,
+ FACTORY_FBC_SET_BACKLIGHT = 909,
+ FACTORY_FBC_GET_BACKLIGHT = 910,
+ FACTORY_FBC_SET_PIC_MODE = 911,
+ FACTORY_FBC_GET_PIC_MODE = 912,
+ FACTORY_FBC_SET_GAIN_RED = 913,
+ FACTORY_FBC_GET_GAIN_RED = 914,
+ FACTORY_FBC_SET_GAIN_GREEN = 915,
+ FACTORY_FBC_GET_GAIN_GREEN = 916,
+ FACTORY_FBC_SET_GAIN_BLUE = 917,
+ FACTORY_FBC_GET_GAIN_BLUE = 918,
+ FACTORY_FBC_SET_OFFSET_RED = 919,
+ FACTORY_FBC_GET_OFFSET_RED = 920,
+ FACTORY_FBC_SET_OFFSET_GREEN = 921,
+ FACTORY_FBC_GET_OFFSET_GREEN = 922,
+ FACTORY_FBC_SET_OFFSET_BLUE = 923,
+ FACTORY_FBC_GET_OFFSET_BLUE = 924,
+ FACTORY_FBC_SET_COLORTEMP_MODE = 925,
+ FACTORY_FBC_GET_COLORTEMP_MODE = 926,
+ FACTORY_FBC_SET_WB_INIT = 927,
+ FACTORY_FBC_GET_WB_INIT = 928,
+ FACTORY_FBC_SET_TEST_PATTERN = 929,
+ FACTORY_FBC_GET_TEST_PATTERN = 930,
+ FACTORY_FBC_SET_BACKLIGHT_EN = 931,
+ FACTORY_FBC_GET_BACKLIGHT_EN = 932,
+ FACTORY_FBC_SET_LVDS_SSG = 933,
+ FACTORY_FBC_SET_ELEC_MODE = 934,
+ FACTORY_FBC_GET_MAINCODE_VERSION = 935,
+ FACTORY_FBC_PANEL_POWER_SWITCH = 936,
+ FACTORY_FBC_PANEL_GET_INFO = 937,
+ FACTORY_FBC_PANEL_SUSPEND = 938,
+ FACTORY_FBC_SEND_KEY_TO_FBC = 939,
+ FACTORY_FBC_POWER_REBOOT = 940,
+ FACTORY_FBC_GET_ELEC_MODE = 941,
+ FACTORY_FBC_PANEL_USER_SETTING_DEFAULT = 942,
+ FACTORY_FBC_SET_BACKLIGHT_N360 = 943,
+ FACTORY_FBC_GET_BACKLIGHT_N360 = 944,
+ FACTORY_FBC_SET_COLORTEMP_MODE_N360 = 945,
+ FACTORY_FBC_GET_COLORTEMP_MODE_N360 = 946,
+
+ //T868 for cvt
+ FACTORY_SETBACKLIGHT_PWM_FREQUENCY = 1000,
+ FACTORY_GETBACKLIGHT_PWM_FREQUENCY = 1001,
+ FACTORY_SETBACKLIGHT_SWITCH_STATUS = 1002,
+ FACTORY_GETBACKLIGHT_SWITCH_STATUS = 1003,
+ FACTORY_SETBACKLIGHT_PWM_DUTY = 1004,
+ FACTORY_GETBACKLIGHT_PWM_DUTY = 1005,
+ FACTORY_SETLVDS_COLOR_DEPTH = 1006,
+ FACTORY_GETLVDS_COLOR_DEPTH = 1007,
+ FACTORY_SETLVDS_DITHER_STATUS = 1008,
+ FACTORY_GETLVDS_DITHER_STATUS = 1009,
+ FACTORY_SETLVDS_MAPPING_STATUS = 1010,
+ FACTORY_GETLVDS_MAPPING_STATUS = 1011,
+ FACTORY_SETLVDS_PORT_SWAP_STATUS = 1012,
+ FACTORY_GETLVDS_PORT_SWAP_STATUS = 1013,
+ FACTORY_SET_SN = 1014,
+ FACTORY_GET_SN = 1015,
+
+ //Uniform White Balance
+ FACTORY_WHITE_BALANCE_SET_GAIN_RED = 1100,
+ FACTORY_WHITE_BALANCE_GET_GAIN_RED = 1101,
+ FACTORY_WHITE_BALANCE_SET_GAIN_GREEN = 1102,
+ FACTORY_WHITE_BALANCE_GET_GAIN_GREEN = 1103,
+ FACTORY_WHITE_BALANCE_SET_GAIN_BLUE = 1104,
+ FACTORY_WHITE_BALANCE_GET_GAIN_BLUE = 1105,
+ FACTORY_WHITE_BALANCE_SET_OFFSET_RED = 1106,
+ FACTORY_WHITE_BALANCE_GET_OFFSET_RED = 1107,
+ FACTORY_WHITE_BALANCE_SET_OFFSET_GREEN = 1108,
+ FACTORY_WHITE_BALANCE_GET_OFFSET_GREEN = 1109,
+ FACTORY_WHITE_BALANCE_SET_OFFSET_BLUE = 1110,
+ FACTORY_WHITE_BALANCE_GET_OFFSET_BLUE = 1111,
+ FACTORY_WHITE_BALANCE_GET_COLOR_TMP = 1112,
+ FACTORY_WHITE_BALANCE_SET_COLOR_TMP = 1113,
+ FACTORY_WHITE_BALANCE_SAVE_PRAMAS = 1114,
+ FACTORY_WHITE_BALANCE_SET_WB_INIT = 1115,
+ FACTORY_WHITE_BALANCE_GET_WB_INIT = 1116,
+ FACTORY_WHITE_BALANCE_SET_GRAY_PATTERN = 1117,
+ FACTORY_WHITE_BALANCE_GET_GRAY_PATTERN = 1118,
+ FACTORY_WHITE_BALANCE_OPEN_GRAY_PATTERN = 1119,
+ FACTORY_WHITE_BALANCE_CLOSE_GRAY_PATTERN = 1120,
+ FACTORY_WHITE_BALANCE_GET_ALL_PRAMAS = 1121,
+
+ //dtv
+ ATV_GET_CURRENT_PROGRAM_ID = 1389,
+ DTV_GET_CURRENT_PROGRAM_ID = 1390,
+ ATV_SAVE_PROGRAM_ID = 1391,
+ DTV_SCAN_MANUAL_BETWEEN_FREQ = 1392,
+ ATV_GET_MIN_MAX_FREQ = 1393,
+ DTV_GET_SCAN_FREQUENCY_LIST = 1394,
+ DTV_GET_CHANNEL_INFO = 1395,
+ ATV_GET_CHANNEL_INFO = 1396,
+ ATV_SCAN_MANUAL = 1397,
+ ATV_SCAN_MANUAL_BY_NUMBER = 1387,
+ ATV_SCAN_AUTO = 1398,
+ DTV_SCAN_MANUAL = 1399,
+ DTV_SCAN_AUTO = 1400,
+ TV_SUBTITLE_DRAW_END = 1401,
+ PLAY_PROGRAM = 1402,
+ STOP_PROGRAM_PLAY = 1403,
+ GET_PROGRAM_LIST = 1404,
+ STOP_SCAN = 1405,
+ DTV_GET_SNR = 1406,
+ DTV_GET_BER = 1407,
+ DTV_GET_STRENGTH = 1408,
+ DTV_GET_AUDIO_TRACK_NUM = 1409,
+ DTV_GET_AUDIO_TRACK_INFO = 1410,
+ DTV_SWITCH_AUDIO_TRACK = 1411,
+ DTV_GET_EPG_UTC_TIME = 1412,
+ DTV_GET_CUR_FREQ = 1413,
+ DTV_GET_EPG_INFO_POINT_IN_TIME = 1414,
+ DTV_GET_EPG_INFO_DURATION = 1415,
+ SET_FRONTEND_PARA = 1416,
+ DTV_SET_PROGRAM_NAME = 1417,
+ DTV_SET_PROGRAM_SKIPPED = 1418,
+ DTV_SET_PROGRAM_FAVORITE = 1419,
+ DTV_DETELE_PROGRAM = 1420,
+ DTV_SWAP_PROGRAM = 1421,
+ DTV_SET_PROGRAM_LOCKED = 1422,
+ DTV_SET_BOOKING_FLAG = 1423,
+ DTV_GET_BOOKED_EVENT = 1424,
+ DTV_GET_CURR_AUDIO_TRACK_INDEX = 1425,
+ DTV_SET_AUDIO_CHANNEL_MOD = 1426,
+ DTV_GET_AUDIO_CHANNEL_MOD = 1427,
+ DTV_GET_FREQ_BY_PROG_ID = 1428,
+ DTV_GET_VIDEO_FMT_INFO = 1429,
+ DTV_START_RECORD = 1430,
+ DTV_STOP_RECORD = 1431,
+ DTV_SET_RECORD_ALL_TS = 1432,
+ DTV_SCAN_AUTO_ATSC = 1433,
+ DTV_TEST_1 = 1451,
+ DTV_TEST_2 = 1452,
+ DTV_TEST_3 = 1453,
+ TV_CLEAR_ALL_PROGRAM = 1454,
+ SET_BLACKOUT_ENABLE = 1455,
+ START_AUTO_BACKLIGHT = 1456,
+ STOP_AUTO_BACKLIGHT = 1457,
+ IS_AUTO_BACKLIGHTING = 1458,
+ TV_PRINT_DEBUG_INFO = 2000,
+
+ //customer interface
+ FACTROY_FBC_SET_LIGHT_SENSOR_STATUS_N310 = 3000,
+ FACTROY_FBC_GET_LIGHT_SENSOR_STATUS_N310 = 3001,
+ FACTROY_FBC_SET_DREAM_PANEL_STATUS_N310 = 3002,
+ FACTROY_FBC_GET_DREAM_PANEL_STATUS_N310 = 3003,
+ SSM_EEPROM_SAVE_ONE_BYTE_N310_N311 = 3004,
+ SSM_EEPROM_READ_ONE_BYTE_N310_N311 = 3005,
+ SSM_EEPROM_SAVE_N_BYTES_N310_N311 = 3006,
+ SSM_EEPROM_READ_N_BYTES_N310_N311 = 3007,
+ SSM_FLASH_SAVE_ONE_BYTE_N310_N311 = 3008,
+ SSM_FLASH_READ_ONE_BYTE_N310_N311 = 3009,
+ SSM_FLASH_SAVE_N_BYTES_N310_N311 = 3010,
+ SSM_FLASH_READ_N_BYTES_N310_N311 = 3011,
+ FACTROY_FBC_SET_MULT_PQ_STATUS_N310 = 3012,
+ FACTROY_FBC_GET_MULT_PQ_STATUS_N310 = 3013,
+ FACTROY_FBC_SET_MEMC_STATUS_N310 = 3014,
+ FACTROY_FBC_GET_MEMC_STATUS_N310 = 3015,
+
+};
+
+#endif //ANDROID_AMLOGIC_TVCMD_H
diff --git a/tvapi/android/jni/Android.mk b/tvapi/android/jni/Android.mk
index b1e2e3e..2c1d863 100644
--- a/tvapi/android/jni/Android.mk
+++ b/tvapi/android/jni/Android.mk
@@ -1,66 +1,66 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SRC_FILES:= \
- android_amlogic_tv.cpp
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libutils \
- libbinder \
- libtvbinder \
- libnativehelper \
- libandroid_runtime \
- liblog \
- libskia
-
-LOCAL_C_INCLUDES += \
- frameworks/base/core/jni \
- $(LOCAL_PATH)/../ \
- external/skia/include \
-
-LOCAL_MODULE:= libtv_jni
-LOCAL_PRELINK_MODULE := false
-include $(BUILD_SHARED_LIBRARY)
-
-
-
-
-#cfbc communication jni lib
-include $(CLEAR_VARS)
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_C_INCLUDES += \
- frameworks/base/core/jni \
- $(LOCAL_PATH)/../../libtv \
- $(LOCAL_PATH)/../../libtv/tv \
- bionic/libc/include \
- bionic/libc/private \
- system/extras/ext4_utils \
- bionic/libc/include
-
-LOCAL_SRC_FILES := \
- ../../libtv/tv/CTvLog.cpp \
- ../../libtv/tvutils/CFile.cpp \
- ../../libtv/tvutils/CThread.cpp \
- ../../libtv/tvutils/CMsgQueue.cpp \
- ../../libtv/tvutils/zepoll.cpp \
- ../../libtv/tv/CFbcCommunication.cpp \
- ../../libtv/tvutils/serial_base.cpp \
- ../../libtv/tvutils/CSerialPort.cpp \
- ../../libtv/tvutils/CHdmiCecCmd.cpp \
- cfbc_jni.cpp \
- cfbc_test.cpp
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libutils \
- libandroid_runtime \
- liblog \
- libdl
-
-LOCAL_MODULE:= libcfbc_jni
-LOCAL_PRELINK_MODULE := false
-#include $(BUILD_EXECUTABLE)
-#include $(BUILD_SHARED_LIBRARY)
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES:= \
+ android_amlogic_tv.cpp
+LOCAL_SHARED_LIBRARIES := \
+ libcutils \
+ libutils \
+ libbinder \
+ libtvbinder \
+ libnativehelper \
+ libandroid_runtime \
+ liblog \
+ libskia
+
+LOCAL_C_INCLUDES += \
+ frameworks/base/core/jni \
+ $(LOCAL_PATH)/../ \
+ external/skia/include \
+
+LOCAL_MODULE:= libtv_jni
+LOCAL_PRELINK_MODULE := false
+include $(BUILD_SHARED_LIBRARY)
+
+
+
+
+#cfbc communication jni lib
+include $(CLEAR_VARS)
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_C_INCLUDES += \
+ frameworks/base/core/jni \
+ $(LOCAL_PATH)/../../libtv \
+ $(LOCAL_PATH)/../../libtv/tv \
+ bionic/libc/include \
+ bionic/libc/private \
+ system/extras/ext4_utils \
+ bionic/libc/include
+
+LOCAL_SRC_FILES := \
+ ../../libtv/tv/CTvLog.cpp \
+ ../../libtv/tvutils/CFile.cpp \
+ ../../libtv/tvutils/CThread.cpp \
+ ../../libtv/tvutils/CMsgQueue.cpp \
+ ../../libtv/tvutils/zepoll.cpp \
+ ../../libtv/tv/CFbcCommunication.cpp \
+ ../../libtv/tvutils/serial_base.cpp \
+ ../../libtv/tvutils/CSerialPort.cpp \
+ ../../libtv/tvutils/CHdmiCecCmd.cpp \
+ cfbc_jni.cpp \
+ cfbc_test.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+ libcutils \
+ libutils \
+ libandroid_runtime \
+ liblog \
+ libdl
+
+LOCAL_MODULE:= libcfbc_jni
+LOCAL_PRELINK_MODULE := false
+#include $(BUILD_EXECUTABLE)
+#include $(BUILD_SHARED_LIBRARY)
diff --git a/tvapi/android/jni/android_amlogic_tv.cpp b/tvapi/android/jni/android_amlogic_tv.cpp
index ec531ef..28dc318 100644
--- a/tvapi/android/jni/android_amlogic_tv.cpp
+++ b/tvapi/android/jni/android_amlogic_tv.cpp
@@ -1,456 +1,455 @@
-#define LOG_TAG "Tv-JNI"
-#include <utils/Log.h>
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-#include <utils/Vector.h>
-#include <include/Tv.h>
-#include <binder/IMemory.h>
-#include <binder/Parcel.h>
-#include <binder/MemoryHeapBase.h>
-#include <binder/MemoryBase.h>
-#include <core/SkBitmap.h>
-#include "android_util_Binder.h"
-#include "android_os_Parcel.h"
-using namespace android;
-
-struct fields_t {
- jfieldID context;
- jmethodID post_event;
-};
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#define LOG_TAG "TvJNI"
-#endif
-
-static fields_t fields;
-static Mutex sLock;
-class JNITvContext: public TvListener
-{
-public:
- JNITvContext(JNIEnv *env, jobject weak_this, jclass clazz, const sp<Tv> &tv);
- ~JNITvContext()
- {
- release();
- }
- virtual void notify(int32_t msgType, const Parcel &p);
- void addCallbackBuffer(JNIEnv *env, jbyteArray cbb);
- sp<Tv> getTv()
- {
- Mutex::Autolock _l(mLock);
- return mTv;
- }
- void release();
- Parcel *mExtParcel;
-private:
- jobject mTvJObjectWeak; // weak reference to java object
- jclass mTvJClass; // strong reference to java class
- sp<Tv> mTv; // strong reference to native object
- Mutex mLock;
-
- Vector<jbyteArray> mCallbackBuffers; // Global reference application managed byte[]
- bool mManualBufferMode; // Whether to use application managed buffers.
- bool mManualTvCallbackSet; // Whether the callback has been set, used to reduce unnecessary calls to set the callback.
-};
-
-sp<Tv> get_native_tv(JNIEnv *env, jobject thiz, JNITvContext **pContext)
-{
- sp<Tv> tv;
- Mutex::Autolock _l(sLock);
- JNITvContext *context = reinterpret_cast<JNITvContext *>(env->GetIntField(thiz, fields.context));
- if (context != NULL) {
- tv = context->getTv();
- }
- if (tv == 0) {
- jniThrowException(env, "java/lang/RuntimeException", "Method called after release()");
- }
-
- if (pContext != NULL) *pContext = context;
- return tv;
-}
-
-JNITvContext::JNITvContext(JNIEnv *env, jobject weak_this, jclass clazz, const sp<Tv> &tv)
-{
- mTvJObjectWeak = env->NewGlobalRef(weak_this);
- mTvJClass = (jclass)env->NewGlobalRef(clazz);
- mTv = tv;
- ALOGD("tvjni----------------------JNITvContext::JNITvContext(");
- mManualBufferMode = false;
- mManualTvCallbackSet = false;
- //mExtParcel = parcelForJavaObject(env, ext_parcel);
-}
-
-void JNITvContext::release()
-{
- ALOGD("release");
- Mutex::Autolock _l(mLock);
- JNIEnv *env = AndroidRuntime::getJNIEnv();
-
- if (mTvJObjectWeak != NULL) {
- env->DeleteGlobalRef(mTvJObjectWeak);
- mTvJObjectWeak = NULL;
- }
- if (mTvJClass != NULL) {
- env->DeleteGlobalRef(mTvJClass);
- mTvJClass = NULL;
- }
- mTv.clear();
-}
-
-// connect to tv service
-static void android_amlogic_Tv_native_setup(JNIEnv *env, jobject thiz, jobject weak_this)
-{
- sp<Tv> tv = Tv::connect();
-
- ALOGD("android_amlogic_Tv_native_setup.");
-
- if (tv == NULL) {
- jniThrowException(env, "java/lang/RuntimeException", "Fail to connect to tv service");
- return;
- }
-
- // make sure tv amlogic is alive
- if (tv->getStatus() != NO_ERROR) {
- jniThrowException(env, "java/lang/RuntimeException", "Tv initialization failed!");
- return;
- }
-
- jclass clazz = env->GetObjectClass(thiz);
- if (clazz == NULL) {
- jniThrowException(env, "java/lang/RuntimeException", "Can't find android/amlogic/Tv!");
- return;
- }
-
- sp<JNITvContext> context = new JNITvContext(env, weak_this, clazz, tv);
- context->incStrong(thiz);
- tv->setListener(context);
-
- env->SetIntField(thiz, fields.context, (int)context.get());
-}
-
-
-static void android_amlogic_Tv_release(JNIEnv *env, jobject thiz)
-{
- // TODO: Change to LOGE
- JNITvContext *context = NULL;
- sp<Tv> tv;
- {
- Mutex::Autolock _l(sLock);
- context = reinterpret_cast<JNITvContext *>(env->GetIntField(thiz, fields.context));
-
- // Make sure we do not attempt to callback on a deleted Java object.
- env->SetIntField(thiz, fields.context, 0);
- }
-
- ALOGD("release tv");
-
- // clean up if release has not been called before
- if (context != NULL) {
- tv = context->getTv();
- context->release();
- ALOGD("native_release: context=%p tv=%p", context, tv.get());
-
- // clear callbacks
- if (tv != NULL) {
- //tv->setPreviewCallbackFlags(FRAME_CALLBACK_FLAG_NOOP);
- tv->disconnect();
- }
-
- // remove context to prevent further Java access
- context->decStrong(thiz);
- }
-}
-
-void JNITvContext::notify(int32_t msgType, const Parcel &p)
-{
- // VM pointer will be NULL if object is released
- Mutex::Autolock _l(mLock);
- if (mTvJObjectWeak == NULL) {
- ALOGW("callback on dead tv object");
- return;
- }
-
- JNIEnv *env = AndroidRuntime::getJNIEnv();
-
- jobject jParcel = createJavaParcelObject(env);
- if (jParcel != NULL) {
- Parcel *nativeParcel = parcelForJavaObject(env, jParcel);
- nativeParcel->write(p.data(), p.dataSize());
- env->CallStaticVoidMethod(mTvJClass, fields.post_event, mTvJObjectWeak, msgType, jParcel);
- env->DeleteLocalRef(jParcel);
- }
-}
-
-
-void JNITvContext::addCallbackBuffer(JNIEnv *env, jbyteArray cbb)
-{
- if (cbb != NULL) {
- Mutex::Autolock _l(mLock);
- jbyteArray callbackBuffer = (jbyteArray)env->NewGlobalRef(cbb);
- mCallbackBuffers.push(cbb);
- ALOGD("Adding callback buffer to queue, %d total", mCallbackBuffers.size());
- } else {
- ALOGE("Null byte array!");
- }
-}
-
-static jint android_amlogic_Tv_processCmd(JNIEnv *env, jobject thiz, jobject pObj, jobject rObj)
-{
- sp<Tv> tv = get_native_tv(env, thiz, NULL);
- if (tv == 0) return -1;
-
- Parcel *p = parcelForJavaObject(env, pObj);
- //jclass clazz;
- //clazz = env->FindClass("android/os/Parcel");
- //LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.Parcel");
-
-
- //jmethodID mConstructor = env->GetMethodID(clazz, "<init>", "(I)V");
- //jobject replayobj = env->NewObject(clazz, mConstructor, 0);
- Parcel *r = parcelForJavaObject(env, rObj);
-
-
- return tv->processCmd(*p, r);
- //if ( != NO_ERROR) {
- // jniThrowException(env, "java/lang/RuntimeException", "StartTv failed");
- // return -1;
- // }
- //return 0;
-}
-
-static void android_amlogic_Tv_addCallbackBuffer(JNIEnv *env, jobject thiz, jbyteArray bytes)
-{
- JNITvContext *context = reinterpret_cast<JNITvContext *>(env->GetIntField(thiz, fields.context));
-
- ALOGD("addCallbackBuffer");
- if (context != NULL) {
- context->addCallbackBuffer(env, bytes);
- }
-}
-
-static void android_amlogic_Tv_reconnect(JNIEnv *env, jobject thiz)
-{
- sp<Tv> tv = get_native_tv(env, thiz, NULL);
- if (tv == 0) return;
-
- if (tv->reconnect() != NO_ERROR) {
- jniThrowException(env, "java/io/IOException", "reconnect failed");
- return;
- }
-}
-
-static void android_amlogic_Tv_lock(JNIEnv *env, jobject thiz)
-{
- sp<Tv> tv = get_native_tv(env, thiz, NULL);
- if (tv == 0) return;
-
- ALOGD("lock");
-
- if (tv->lock() != NO_ERROR) {
- jniThrowException(env, "java/lang/RuntimeException", "lock failed");
- }
-}
-
-static void android_amlogic_Tv_unlock(JNIEnv *env, jobject thiz)
-{
- sp<Tv> tv = get_native_tv(env, thiz, NULL);
- if (tv == 0) return;
-
- ALOGD("unlock");
-
- if (tv->unlock() != NO_ERROR) {
- jniThrowException(env, "java/lang/RuntimeException", "unlock failed");
- }
-}
-
-static void android_amlogic_Tv_create_subtitle_bitmap(JNIEnv *env, jobject thiz, jobject bmpobj)
-{
- ALOGD("create subtitle bmp");
- sp<Tv> tv = get_native_tv(env, thiz, NULL);
- if (tv == 0) return;
-
- //get skbitmap
- jclass bmp_clazz;
- jfieldID skbmp_fid;
- jint hbmp;
- bmp_clazz = env->FindClass("android/graphics/Bitmap");
- skbmp_fid = env->GetFieldID(bmp_clazz, "mNativeBitmap", "I");
- hbmp = env->GetIntField(bmpobj, skbmp_fid);
- SkBitmap *pSkBmp = reinterpret_cast<SkBitmap *>(hbmp);
- ALOGD("pSkBmp = %d", hbmp);
- ALOGD("bmp width = %d height = %d", pSkBmp->width(), pSkBmp->height());
- env->DeleteLocalRef(bmp_clazz);
-
- //alloc share mem
- sp<MemoryHeapBase> MemHeap = new MemoryHeapBase(1920 * 1080 * 4, 0, "subtitle bmp");
- ALOGD("heap id = %d", MemHeap->getHeapID());
- if (MemHeap->getHeapID() < 0) {
- return;
- }
- sp<MemoryBase> MemBase = new MemoryBase(MemHeap, 0, 1920 * 1080 * 4);
- pSkBmp->setPixels(MemBase->pointer());
-
-
- //send share mem to server
- tv->createSubtitle(MemBase);
- return;
-}
-
-static void android_amlogic_Tv_create_video_frame_bitmap(JNIEnv *env, jobject thiz, jobject bmpobj )
-{
- ALOGD("create video frame bmp");
- sp<Tv> tv = get_native_tv(env, thiz, NULL);
- if (tv == 0) return;
-
- //get skbitmap
- jclass bmp_clazz;
- jfieldID skbmp_fid;
- jint hbmp;
- bmp_clazz = env->FindClass("android/graphics/Bitmap");
- skbmp_fid = env->GetFieldID(bmp_clazz, "mNativeBitmap", "I");
- hbmp = env->GetIntField(bmpobj, skbmp_fid);
- SkBitmap *pSkBmp = reinterpret_cast<SkBitmap *>(hbmp);
- ALOGD("pSkBmp = %d", hbmp);
- ALOGD("bmp width = %d height = %d", pSkBmp->width(), pSkBmp->height());
- env->DeleteLocalRef(bmp_clazz);
-
- //alloc share mem
- sp<MemoryHeapBase> MemHeap = new MemoryHeapBase(1280 * 720 * 4 + 1, 0, "video frame bmp");
- ALOGD("heap id = %d", MemHeap->getHeapID());
- if (MemHeap->getHeapID() < 0) {
- return;
- }
- sp<MemoryBase> MemBase = new MemoryBase(MemHeap, 0, 1280 * 720 * 4 + 1);
- pSkBmp->setPixels(MemBase->pointer());
-
-
- //send share mem to server
- tv->createVideoFrame(MemBase);
- return;
-}
-
-//-------------------------------------------------
-
-static JNINativeMethod camMethods[] = {
- {
- "native_setup",
- "(Ljava/lang/Object;)V",
- (void *)android_amlogic_Tv_native_setup
- },
- {
- "native_release",
- "()V",
- (void *)android_amlogic_Tv_release
- },
- {
- "processCmd",
- "(Landroid/os/Parcel;Landroid/os/Parcel;)I",
- (void *)android_amlogic_Tv_processCmd
- },
- {
- "addCallbackBuffer",
- "([B)V",
- (void *)android_amlogic_Tv_addCallbackBuffer
- },
- {
- "reconnect",
- "()V",
- (void *)android_amlogic_Tv_reconnect
- },
- {
- "lock",
- "()V",
- (void *)android_amlogic_Tv_lock
- },
- {
- "unlock",
- "()V",
- (void *)android_amlogic_Tv_unlock
- },
- {
- "native_create_subtitle_bitmap",
- "(Ljava/lang/Object;)V",
- (void *)android_amlogic_Tv_create_subtitle_bitmap
- },
- {
- "native_create_video_frame_bitmap",
- "(Ljava/lang/Object;)V",
- (void *)android_amlogic_Tv_create_video_frame_bitmap
- },
-
-};
-
-struct field {
- const char *class_name;
- const char *field_name;
- const char *field_type;
- jfieldID *jfield;
-};
-
-static int find_fields(JNIEnv *env, field *fields, int count)
-{
- for (int i = 0; i < count; i++) {
- field *f = &fields[i];
- jclass clazz = env->FindClass(f->class_name);
- if (clazz == NULL) {
- ALOGE("Can't find %s", f->class_name);
- return -1;
- }
-
- jfieldID field = env->GetFieldID(clazz, f->field_name, f->field_type);
- if (field == NULL) {
- ALOGE("Can't find %s.%s", f->class_name, f->field_name);
- return -1;
- }
-
- *(f->jfield) = field;
- }
-
- return 0;
-}
-
-// Get all the required offsets in java class and register native functions
-int register_android_amlogic_Tv(JNIEnv *env)
-{
- field fields_to_find[] = {
- { "android/amlogic/Tv", "mNativeContext", "I", &fields.context }
- };
-
- ALOGD("register_android_amlogic_Tv.");
-
- if (find_fields(env, fields_to_find, NELEM(fields_to_find)) < 0)
- return -1;
-
- jclass clazz = env->FindClass("android/amlogic/Tv");
- fields.post_event = env->GetStaticMethodID(clazz, "postEventFromNative", "(Ljava/lang/Object;ILandroid/os/Parcel;)V");
- if (fields.post_event == NULL) {
- ALOGE("Can't find android/amlogic/Tv.postEventFromNative");
- return -1;
- }
-
- // Register native functions
- return AndroidRuntime::registerNativeMethods(env, "android/amlogic/Tv", camMethods, NELEM(camMethods));
-}
-
-
-jint JNI_OnLoad(JavaVM *vm, void *reserved)
-{
- JNIEnv *env = NULL;
- jint result = -1;
-
- if (vm->GetEnv((void **) &env, JNI_VERSION_1_4) != JNI_OK) {
- ALOGE("ERROR: GetEnv failed\n");
- goto bail;
- }
- assert(env != NULL);
-
- register_android_amlogic_Tv(env);
-
- /* success -- return valid version number */
- result = JNI_VERSION_1_4;
-bail:
- return result;
-}
-
+#define LOG_TAG "Tv-JNI"
+#include <utils/Log.h>
+
+#include "jni.h"
+#include "JNIHelp.h"
+#include "android_runtime/AndroidRuntime.h"
+#include <utils/Vector.h>
+#include <include/Tv.h>
+#include <binder/IMemory.h>
+#include <binder/Parcel.h>
+#include <binder/MemoryHeapBase.h>
+#include <binder/MemoryBase.h>
+#include <core/SkBitmap.h>
+#include "android_util_Binder.h"
+#include "android_os_Parcel.h"
+using namespace android;
+
+struct fields_t {
+ jfieldID context;
+ jmethodID post_event;
+};
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#define LOG_TAG "TvJNI"
+#endif
+
+static fields_t fields;
+static Mutex sLock;
+class JNITvContext: public TvListener {
+public:
+ JNITvContext(JNIEnv *env, jobject weak_this, jclass clazz, const sp<Tv> &tv);
+ ~JNITvContext()
+ {
+ release();
+ }
+ virtual void notify(int32_t msgType, const Parcel &p);
+ void addCallbackBuffer(JNIEnv *env, jbyteArray cbb);
+ sp<Tv> getTv()
+ {
+ Mutex::Autolock _l(mLock);
+ return mTv;
+ }
+ void release();
+ Parcel *mExtParcel;
+private:
+ jobject mTvJObjectWeak; // weak reference to java object
+ jclass mTvJClass; // strong reference to java class
+ sp<Tv> mTv; // strong reference to native object
+ Mutex mLock;
+
+ Vector<jbyteArray> mCallbackBuffers; // Global reference application managed byte[]
+ bool mManualBufferMode; // Whether to use application managed buffers.
+ bool mManualTvCallbackSet; // Whether the callback has been set, used to reduce unnecessary calls to set the callback.
+};
+
+sp<Tv> get_native_tv(JNIEnv *env, jobject thiz, JNITvContext **pContext)
+{
+ sp<Tv> tv;
+ Mutex::Autolock _l(sLock);
+ JNITvContext *context = reinterpret_cast<JNITvContext *>(env->GetIntField(thiz, fields.context));
+ if (context != NULL) {
+ tv = context->getTv();
+ }
+ if (tv == 0) {
+ jniThrowException(env, "java/lang/RuntimeException", "Method called after release()");
+ }
+
+ if (pContext != NULL) *pContext = context;
+ return tv;
+}
+
+JNITvContext::JNITvContext(JNIEnv *env, jobject weak_this, jclass clazz, const sp<Tv> &tv)
+{
+ mTvJObjectWeak = env->NewGlobalRef(weak_this);
+ mTvJClass = (jclass)env->NewGlobalRef(clazz);
+ mTv = tv;
+ ALOGD("tvjni----------------------JNITvContext::JNITvContext(");
+ mManualBufferMode = false;
+ mManualTvCallbackSet = false;
+ //mExtParcel = parcelForJavaObject(env, ext_parcel);
+}
+
+void JNITvContext::release()
+{
+ ALOGD("release");
+ Mutex::Autolock _l(mLock);
+ JNIEnv *env = AndroidRuntime::getJNIEnv();
+
+ if (mTvJObjectWeak != NULL) {
+ env->DeleteGlobalRef(mTvJObjectWeak);
+ mTvJObjectWeak = NULL;
+ }
+ if (mTvJClass != NULL) {
+ env->DeleteGlobalRef(mTvJClass);
+ mTvJClass = NULL;
+ }
+ mTv.clear();
+}
+
+// connect to tv service
+static void android_amlogic_Tv_native_setup(JNIEnv *env, jobject thiz, jobject weak_this)
+{
+ sp<Tv> tv = Tv::connect();
+
+ ALOGD("android_amlogic_Tv_native_setup.");
+
+ if (tv == NULL) {
+ jniThrowException(env, "java/lang/RuntimeException", "Fail to connect to tv service");
+ return;
+ }
+
+ // make sure tv amlogic is alive
+ if (tv->getStatus() != NO_ERROR) {
+ jniThrowException(env, "java/lang/RuntimeException", "Tv initialization failed!");
+ return;
+ }
+
+ jclass clazz = env->GetObjectClass(thiz);
+ if (clazz == NULL) {
+ jniThrowException(env, "java/lang/RuntimeException", "Can't find android/amlogic/Tv!");
+ return;
+ }
+
+ sp<JNITvContext> context = new JNITvContext(env, weak_this, clazz, tv);
+ context->incStrong(thiz);
+ tv->setListener(context);
+
+ env->SetIntField(thiz, fields.context, (int)context.get());
+}
+
+
+static void android_amlogic_Tv_release(JNIEnv *env, jobject thiz)
+{
+ // TODO: Change to LOGE
+ JNITvContext *context = NULL;
+ sp<Tv> tv;
+ {
+ Mutex::Autolock _l(sLock);
+ context = reinterpret_cast<JNITvContext *>(env->GetIntField(thiz, fields.context));
+
+ // Make sure we do not attempt to callback on a deleted Java object.
+ env->SetIntField(thiz, fields.context, 0);
+ }
+
+ ALOGD("release tv");
+
+ // clean up if release has not been called before
+ if (context != NULL) {
+ tv = context->getTv();
+ context->release();
+ ALOGD("native_release: context=%p tv=%p", context, tv.get());
+
+ // clear callbacks
+ if (tv != NULL) {
+ //tv->setPreviewCallbackFlags(FRAME_CALLBACK_FLAG_NOOP);
+ tv->disconnect();
+ }
+
+ // remove context to prevent further Java access
+ context->decStrong(thiz);
+ }
+}
+
+void JNITvContext::notify(int32_t msgType, const Parcel &p)
+{
+ // VM pointer will be NULL if object is released
+ Mutex::Autolock _l(mLock);
+ if (mTvJObjectWeak == NULL) {
+ ALOGW("callback on dead tv object");
+ return;
+ }
+
+ JNIEnv *env = AndroidRuntime::getJNIEnv();
+
+ jobject jParcel = createJavaParcelObject(env);
+ if (jParcel != NULL) {
+ Parcel *nativeParcel = parcelForJavaObject(env, jParcel);
+ nativeParcel->write(p.data(), p.dataSize());
+ env->CallStaticVoidMethod(mTvJClass, fields.post_event, mTvJObjectWeak, msgType, jParcel);
+ env->DeleteLocalRef(jParcel);
+ }
+}
+
+
+void JNITvContext::addCallbackBuffer(JNIEnv *env, jbyteArray cbb)
+{
+ if (cbb != NULL) {
+ Mutex::Autolock _l(mLock);
+ jbyteArray callbackBuffer = (jbyteArray)env->NewGlobalRef(cbb);
+ mCallbackBuffers.push(cbb);
+ ALOGD("Adding callback buffer to queue, %d total", mCallbackBuffers.size());
+ } else {
+ ALOGE("Null byte array!");
+ }
+}
+
+static jint android_amlogic_Tv_processCmd(JNIEnv *env, jobject thiz, jobject pObj, jobject rObj)
+{
+ sp<Tv> tv = get_native_tv(env, thiz, NULL);
+ if (tv == 0) return -1;
+
+ Parcel *p = parcelForJavaObject(env, pObj);
+ //jclass clazz;
+ //clazz = env->FindClass("android/os/Parcel");
+ //LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.Parcel");
+
+
+ //jmethodID mConstructor = env->GetMethodID(clazz, "<init>", "(I)V");
+ //jobject replayobj = env->NewObject(clazz, mConstructor, 0);
+ Parcel *r = parcelForJavaObject(env, rObj);
+
+
+ return tv->processCmd(*p, r);
+ //if ( != NO_ERROR) {
+ // jniThrowException(env, "java/lang/RuntimeException", "StartTv failed");
+ // return -1;
+ // }
+ //return 0;
+}
+
+static void android_amlogic_Tv_addCallbackBuffer(JNIEnv *env, jobject thiz, jbyteArray bytes)
+{
+ JNITvContext *context = reinterpret_cast<JNITvContext *>(env->GetIntField(thiz, fields.context));
+
+ ALOGD("addCallbackBuffer");
+ if (context != NULL) {
+ context->addCallbackBuffer(env, bytes);
+ }
+}
+
+static void android_amlogic_Tv_reconnect(JNIEnv *env, jobject thiz)
+{
+ sp<Tv> tv = get_native_tv(env, thiz, NULL);
+ if (tv == 0) return;
+
+ if (tv->reconnect() != NO_ERROR) {
+ jniThrowException(env, "java/io/IOException", "reconnect failed");
+ return;
+ }
+}
+
+static void android_amlogic_Tv_lock(JNIEnv *env, jobject thiz)
+{
+ sp<Tv> tv = get_native_tv(env, thiz, NULL);
+ if (tv == 0) return;
+
+ ALOGD("lock");
+
+ if (tv->lock() != NO_ERROR) {
+ jniThrowException(env, "java/lang/RuntimeException", "lock failed");
+ }
+}
+
+static void android_amlogic_Tv_unlock(JNIEnv *env, jobject thiz)
+{
+ sp<Tv> tv = get_native_tv(env, thiz, NULL);
+ if (tv == 0) return;
+
+ ALOGD("unlock");
+
+ if (tv->unlock() != NO_ERROR) {
+ jniThrowException(env, "java/lang/RuntimeException", "unlock failed");
+ }
+}
+
+static void android_amlogic_Tv_create_subtitle_bitmap(JNIEnv *env, jobject thiz, jobject bmpobj)
+{
+ ALOGD("create subtitle bmp");
+ sp<Tv> tv = get_native_tv(env, thiz, NULL);
+ if (tv == 0) return;
+
+ //get skbitmap
+ jclass bmp_clazz;
+ jfieldID skbmp_fid;
+ jint hbmp;
+ bmp_clazz = env->FindClass("android/graphics/Bitmap");
+ skbmp_fid = env->GetFieldID(bmp_clazz, "mNativeBitmap", "I");
+ hbmp = env->GetIntField(bmpobj, skbmp_fid);
+ SkBitmap *pSkBmp = reinterpret_cast<SkBitmap *>(hbmp);
+ ALOGD("pSkBmp = %d", hbmp);
+ ALOGD("bmp width = %d height = %d", pSkBmp->width(), pSkBmp->height());
+ env->DeleteLocalRef(bmp_clazz);
+
+ //alloc share mem
+ sp<MemoryHeapBase> MemHeap = new MemoryHeapBase(1920 * 1080 * 4, 0, "subtitle bmp");
+ ALOGD("heap id = %d", MemHeap->getHeapID());
+ if (MemHeap->getHeapID() < 0) {
+ return;
+ }
+ sp<MemoryBase> MemBase = new MemoryBase(MemHeap, 0, 1920 * 1080 * 4);
+ pSkBmp->setPixels(MemBase->pointer());
+
+
+ //send share mem to server
+ tv->createSubtitle(MemBase);
+ return;
+}
+
+static void android_amlogic_Tv_create_video_frame_bitmap(JNIEnv *env, jobject thiz, jobject bmpobj )
+{
+ ALOGD("create video frame bmp");
+ sp<Tv> tv = get_native_tv(env, thiz, NULL);
+ if (tv == 0) return;
+
+ //get skbitmap
+ jclass bmp_clazz;
+ jfieldID skbmp_fid;
+ jint hbmp;
+ bmp_clazz = env->FindClass("android/graphics/Bitmap");
+ skbmp_fid = env->GetFieldID(bmp_clazz, "mNativeBitmap", "I");
+ hbmp = env->GetIntField(bmpobj, skbmp_fid);
+ SkBitmap *pSkBmp = reinterpret_cast<SkBitmap *>(hbmp);
+ ALOGD("pSkBmp = %d", hbmp);
+ ALOGD("bmp width = %d height = %d", pSkBmp->width(), pSkBmp->height());
+ env->DeleteLocalRef(bmp_clazz);
+
+ //alloc share mem
+ sp<MemoryHeapBase> MemHeap = new MemoryHeapBase(1280 * 720 * 4 + 1, 0, "video frame bmp");
+ ALOGD("heap id = %d", MemHeap->getHeapID());
+ if (MemHeap->getHeapID() < 0) {
+ return;
+ }
+ sp<MemoryBase> MemBase = new MemoryBase(MemHeap, 0, 1280 * 720 * 4 + 1);
+ pSkBmp->setPixels(MemBase->pointer());
+
+
+ //send share mem to server
+ tv->createVideoFrame(MemBase);
+ return;
+}
+
+//-------------------------------------------------
+
+static JNINativeMethod camMethods[] = {
+ {
+ "native_setup",
+ "(Ljava/lang/Object;)V",
+ (void *)android_amlogic_Tv_native_setup
+ },
+ {
+ "native_release",
+ "()V",
+ (void *)android_amlogic_Tv_release
+ },
+ {
+ "processCmd",
+ "(Landroid/os/Parcel;Landroid/os/Parcel;)I",
+ (void *)android_amlogic_Tv_processCmd
+ },
+ {
+ "addCallbackBuffer",
+ "([B)V",
+ (void *)android_amlogic_Tv_addCallbackBuffer
+ },
+ {
+ "reconnect",
+ "()V",
+ (void *)android_amlogic_Tv_reconnect
+ },
+ {
+ "lock",
+ "()V",
+ (void *)android_amlogic_Tv_lock
+ },
+ {
+ "unlock",
+ "()V",
+ (void *)android_amlogic_Tv_unlock
+ },
+ {
+ "native_create_subtitle_bitmap",
+ "(Ljava/lang/Object;)V",
+ (void *)android_amlogic_Tv_create_subtitle_bitmap
+ },
+ {
+ "native_create_video_frame_bitmap",
+ "(Ljava/lang/Object;)V",
+ (void *)android_amlogic_Tv_create_video_frame_bitmap
+ },
+
+};
+
+struct field {
+ const char *class_name;
+ const char *field_name;
+ const char *field_type;
+ jfieldID *jfield;
+};
+
+static int find_fields(JNIEnv *env, field *fields, int count)
+{
+ for (int i = 0; i < count; i++) {
+ field *f = &fields[i];
+ jclass clazz = env->FindClass(f->class_name);
+ if (clazz == NULL) {
+ ALOGE("Can't find %s", f->class_name);
+ return -1;
+ }
+
+ jfieldID field = env->GetFieldID(clazz, f->field_name, f->field_type);
+ if (field == NULL) {
+ ALOGE("Can't find %s.%s", f->class_name, f->field_name);
+ return -1;
+ }
+
+ *(f->jfield) = field;
+ }
+
+ return 0;
+}
+
+// Get all the required offsets in java class and register native functions
+int register_android_amlogic_Tv(JNIEnv *env)
+{
+ field fields_to_find[] = {
+ { "android/amlogic/Tv", "mNativeContext", "I", &fields.context }
+ };
+
+ ALOGD("register_android_amlogic_Tv.");
+
+ if (find_fields(env, fields_to_find, NELEM(fields_to_find)) < 0)
+ return -1;
+
+ jclass clazz = env->FindClass("android/amlogic/Tv");
+ fields.post_event = env->GetStaticMethodID(clazz, "postEventFromNative", "(Ljava/lang/Object;ILandroid/os/Parcel;)V");
+ if (fields.post_event == NULL) {
+ ALOGE("Can't find android/amlogic/Tv.postEventFromNative");
+ return -1;
+ }
+
+ // Register native functions
+ return AndroidRuntime::registerNativeMethods(env, "android/amlogic/Tv", camMethods, NELEM(camMethods));
+}
+
+
+jint JNI_OnLoad(JavaVM *vm, void *reserved)
+{
+ JNIEnv *env = NULL;
+ jint result = -1;
+
+ if (vm->GetEnv((void **) &env, JNI_VERSION_1_4) != JNI_OK) {
+ ALOGE("ERROR: GetEnv failed\n");
+ goto bail;
+ }
+ assert(env != NULL);
+
+ register_android_amlogic_Tv(env);
+
+ /* success -- return valid version number */
+ result = JNI_VERSION_1_4;
+bail:
+ return result;
+}
+
diff --git a/tvapi/android/jni/cfbc_jni.cpp b/tvapi/android/jni/cfbc_jni.cpp
index 7ec7d86..edfb575 100644
--- a/tvapi/android/jni/cfbc_jni.cpp
+++ b/tvapi/android/jni/cfbc_jni.cpp
@@ -23,145 +23,145 @@ static CFbcCommunication *g_cfbc_handle = NULL;
JNIEnv *getJNIEnv(bool *needsDetach)
{
- JNIEnv *env = NULL;
- jint result = -1;
- if (m_vm->GetEnv((void **) &env, JNI_VERSION_1_4) != JNI_OK) {
- __android_log_print(ANDROID_LOG_INFO, TAG, "ERROR: GetEnv failed\n");
-
- int status = m_vm->AttachCurrentThread(&env, NULL);
- if (status < 0) {
- __android_log_print(ANDROID_LOG_INFO, TAG, "callback_handler: failed to attach current thread");
- return NULL;
- }
-
- *needsDetach = true;
- }
-
- __android_log_print(ANDROID_LOG_INFO, TAG, "GetEnv Success");
- return env;
+ JNIEnv *env = NULL;
+ jint result = -1;
+ if (m_vm->GetEnv((void **) &env, JNI_VERSION_1_4) != JNI_OK) {
+ __android_log_print(ANDROID_LOG_INFO, TAG, "ERROR: GetEnv failed\n");
+
+ int status = m_vm->AttachCurrentThread(&env, NULL);
+ if (status < 0) {
+ __android_log_print(ANDROID_LOG_INFO, TAG, "callback_handler: failed to attach current thread");
+ return NULL;
+ }
+
+ *needsDetach = true;
+ }
+
+ __android_log_print(ANDROID_LOG_INFO, TAG, "GetEnv Success");
+ return env;
}
void detachJNI()
{
- int result = m_vm->DetachCurrentThread();
- if (result != JNI_OK) {
- __android_log_print(ANDROID_LOG_INFO, TAG, "thread detach failed: %#x", result);
- }
+ int result = m_vm->DetachCurrentThread();
+ if (result != JNI_OK) {
+ __android_log_print(ANDROID_LOG_INFO, TAG, "thread detach failed: %#x", result);
+ }
}
//this data buf is same as cmd buf
void java_jni_callback(char *str, int cnt, int data_buf[])
{
- char temp_str[MAX_CNT];
- int idx = 0;
- if (str != NULL && cnt > 0) {
- memset(temp_str, 0, sizeof(temp_str));
- JNI_DBG("java jni string is:\n%s, cnt:%d.", str, cnt);
- //strcpy(temp_str, "Call From C/C++!");
- memcpy(temp_str, str, strlen(str) % MAX_CNT);
-
- if (NULL != jni_local_obj) {
- bool needsDetach = false;
- jint j_cnt = data_buf[1];
- jint j_data_buf[MAX_CNT];
- for (idx = 0; idx < j_cnt; idx++) {
- idx %= MAX_CNT;
- j_data_buf[idx] = data_buf[idx];
- JNI_DBG("java_jni_callback the %d data is:0x%x, %d.", idx, j_data_buf[idx], data_buf[idx]);
- }
-
- //jobject obj;
- jni_local_env = getJNIEnv(&needsDetach);
- //obj = (*jni_local_env)->NewGlobalRef(jni_local_env,jni_local_obj);
- jni_local_clz = jni_local_env->GetObjectClass(jni_local_obj);
- //this func name and parameters should be same as the callback defined in java code
- jni_local_mid = jni_local_env->GetMethodID(jni_local_clz, "android_java_callback", "(Ljava/lang/String;[I)I");
-
- jstring str1 = jni_local_env->NewStringUTF(temp_str);
-
- jintArray cc_data_arr = jni_local_env->NewIntArray(j_cnt);
- jni_local_env->SetIntArrayRegion(cc_data_arr, 0, cnt, j_data_buf);
- //jint *temp_data = jni_local_env->GetIntArrayElements(cc_data_arr, NULL);
-
- jint cnt = jni_local_env->CallIntMethod(jni_local_obj, jni_local_mid, str1, cc_data_arr);
-
- //jni_local_env->ReleaseIntArrayElements(cc_data_arr, temp_data, 0);
- //jni_local_env->ReleaseIntArrayElements(cc_cmd_arr, temp_cmd, 0);
- JNI_DBG("%s %d be called.", __FUNCTION__, __LINE__);
-
- if (needsDetach) {
- detachJNI();
- }
- }
- }
+ char temp_str[MAX_CNT];
+ int idx = 0;
+ if(str != NULL && cnt > 0) {
+ memset(temp_str, 0, sizeof(temp_str));
+ JNI_DBG("java jni string is:\n%s, cnt:%d.", str, cnt);
+ //strcpy(temp_str, "Call From C/C++!");
+ memcpy(temp_str, str, strlen(str) % MAX_CNT);
+
+ if(NULL != jni_local_obj) {
+ bool needsDetach = false;
+ jint j_cnt = data_buf[1];
+ jint j_data_buf[MAX_CNT];
+ for(idx = 0; idx < j_cnt; idx++) {
+ idx %= MAX_CNT;
+ j_data_buf[idx] = data_buf[idx];
+ JNI_DBG("java_jni_callback the %d data is:0x%x, %d.", idx, j_data_buf[idx], data_buf[idx]);
+ }
+
+ //jobject obj;
+ jni_local_env = getJNIEnv(&needsDetach);
+ //obj = (*jni_local_env)->NewGlobalRef(jni_local_env,jni_local_obj);
+ jni_local_clz = jni_local_env->GetObjectClass(jni_local_obj);
+ //this func name and parameters should be same as the callback defined in java code
+ jni_local_mid = jni_local_env->GetMethodID(jni_local_clz, "android_java_callback", "(Ljava/lang/String;[I)I");
+
+ jstring str1 = jni_local_env->NewStringUTF(temp_str);
+
+ jintArray cc_data_arr = jni_local_env->NewIntArray(j_cnt);
+ jni_local_env->SetIntArrayRegion(cc_data_arr, 0, cnt, j_data_buf);
+ //jint *temp_data = jni_local_env->GetIntArrayElements(cc_data_arr, NULL);
+
+ jint cnt = jni_local_env->CallIntMethod(jni_local_obj, jni_local_mid, str1, cc_data_arr);
+
+ //jni_local_env->ReleaseIntArrayElements(cc_data_arr, temp_data, 0);
+ //jni_local_env->ReleaseIntArrayElements(cc_cmd_arr, temp_cmd, 0);
+ JNI_DBG("%s %d be called.", __FUNCTION__, __LINE__);
+
+ if(needsDetach) {
+ detachJNI();
+ }
+ }
+ }
}
//here we needn't to match the java package name
static jint jni_java_exec_cmd(JNIEnv *env, jobject obj, jintArray cmdArray)
{
- jint *arry = env->GetIntArrayElements(cmdArray, NULL);
- jint length = env->GetArrayLength(cmdArray);
+ jint *arry = env->GetIntArrayElements(cmdArray, NULL);
+ jint length = env->GetArrayLength(cmdArray);
- int cmd_cnt = arry[1], idx = 0;
- int cmd_array[MAX_CNT];
- memset(cmd_array, 0, sizeof(cmd_array));
- for (idx = 0; idx < cmd_cnt; idx++)
- cmd_array[idx] = arry[idx];
+ int cmd_cnt = arry[1], idx = 0;
+ int cmd_array[MAX_CNT];
+ memset(cmd_array, 0, sizeof(cmd_array));
+ for(idx = 0; idx < cmd_cnt; idx++)
+ cmd_array[idx] = arry[idx];
- JNI_DBG("%s %s %d be called.", __FILE__, __FUNCTION__, __LINE__);
+ JNI_DBG("%s %s %d be called.", __FILE__, __FUNCTION__, __LINE__);
- if (g_cfbc_handle == NULL) {
- g_cfbc_handle = new CFbcCommunication();
- g_cfbc_handle->run("cfbc_thread", 0, 0);
- }
+ if(g_cfbc_handle == NULL) {
+ g_cfbc_handle = new CFbcCommunication();
+ g_cfbc_handle->run("cfbc_thread", 0, 0);
+ }
- //g_cfbc_handle->handleCmd(COMM_DEV_CEC, cmd_array);
- //c_exec_cmd(cmd_array);
+ //g_cfbc_handle->handleCmd(COMM_DEV_CEC, cmd_array);
+ //c_exec_cmd(cmd_array);
- if (NULL == jni_local_obj) {
- jni_local_obj = env->NewGlobalRef(obj);
- }
+ if(NULL == jni_local_obj) {
+ jni_local_obj = env->NewGlobalRef(obj);
+ }
#if 0
- /* this is used to terminate the jni call if needed
- ** and we should handle the pthread we create in c layer
- */
- if (cmd_array[0] == 0x1002) {
- if (NULL != jni_local_obj)
- env->DeleteGlobalRef(jni_local_obj);
- }
+ /* this is used to terminate the jni call if needed
+ ** and we should handle the pthread we create in c layer
+ */
+ if(cmd_array[0] == 0x1002) {
+ if(NULL != jni_local_obj)
+ env->DeleteGlobalRef(jni_local_obj);
+ }
#endif
- return 0;
+ return 0;
}
//the name of 'exec_cmd' should be same as the native func in java code
static JNINativeMethod gMethods[] = {
- {"exec_cmd", "([I)I", (void *)jni_java_exec_cmd},
+ {"exec_cmd", "([I)I", (void *)jni_java_exec_cmd},
};
static int register_android_MyFunc(JNIEnv *env)
{
- JNI_DBG("%s %s %d be called.", __FILE__, __FUNCTION__, __LINE__);
- //the name below should be same as the class name in which native method declared in Java layer
- return android::AndroidRuntime::registerNativeMethods(env, "com/fbc/MyFunc", gMethods, NELEM(gMethods));
+ JNI_DBG("%s %s %d be called.", __FILE__, __FUNCTION__, __LINE__);
+ //the name below should be same as the class name in which native method declared in Java layer
+ return android::AndroidRuntime::registerNativeMethods(env, "com/fbc/MyFunc", gMethods, NELEM(gMethods));
}
jint JNI_OnLoad(JavaVM *vm, void *reserved)
{
- JNIEnv *env = NULL;
- JNI_DBG("%s %s %d be called.", __FILE__, __FUNCTION__, __LINE__);
- //c_set_callback(&java_jni_callback);
- if (vm->GetEnv((void **)&env, JNI_VERSION_1_4) != JNI_OK) {
- JNI_DBG("Error GetEnv\n");
- return -1;
- }
-
- assert(env != NULL);
- if (register_android_MyFunc(env) < 0) {
- JNI_DBG("register_android_test_hdi error.\n");
- return -1;
- }
-
- m_vm = vm;
- return JNI_VERSION_1_4;
+ JNIEnv *env = NULL;
+ JNI_DBG("%s %s %d be called.", __FILE__, __FUNCTION__, __LINE__);
+ //c_set_callback(&java_jni_callback);
+ if (vm->GetEnv((void **)&env, JNI_VERSION_1_4) != JNI_OK) {
+ JNI_DBG("Error GetEnv\n");
+ return -1;
+ }
+
+ assert(env != NULL);
+ if (register_android_MyFunc(env) < 0) {
+ JNI_DBG("register_android_test_hdi error.\n");
+ return -1;
+ }
+
+ m_vm = vm;
+ return JNI_VERSION_1_4;
}
diff --git a/tvapi/android/jni/cfbc_test.cpp b/tvapi/android/jni/cfbc_test.cpp
index ecba2e6..03f716b 100644
--- a/tvapi/android/jni/cfbc_test.cpp
+++ b/tvapi/android/jni/cfbc_test.cpp
@@ -1,43 +1,43 @@
-#include "stdlib.h"
-#include "stdio.h"
-#include "tv/CFbcCommunication.h"
-
-int main(int argc, char **argv)
-{
- int idx = 0, send_buf[128], recv_buf[128], cmd_value = 1, run_flag = 0, run_cnt = 0, cmd_type = 0, read_flag = 0;
- printf("run begin.......\n");
- if (argc < 4) {
- printf("usage:./libcfbc_jni cmd_type cmd_value run_cnt(all hex mode)\n");
- return 0;
- }
-
- cmd_type = strtol(argv[1], NULL, 16);
- cmd_value = strtol(argv[2], NULL, 16);
- run_cnt = strtol(argv[3], NULL, 16);
-
- CFbcCommunication *cfbcHandle = new CFbcCommunication();
- printf("to test.......\n");
- cfbcHandle->run();
- sleep(0.2);
-
- switch (cmd_type) {
- default:
- for (idx = 0; idx < run_cnt; idx++) {
- memset(send_buf, 0, sizeof(send_buf));
- memset(recv_buf, 0, sizeof(recv_buf));
- send_buf[0] = cmd_type;
- send_buf[1] = 3;
- send_buf[2] = cmd_value;
- printf("\n\n======%d to set value is:0x%02x\n", idx, cmd_value);
- cfbcHandle->handleCmd(COMM_DEV_SERIAL, send_buf, recv_buf);
- sleep(1);
- }
- break;
- }
-
- printf("wait to exit......\n");
- cfbcHandle->requestExitAndWait();
- delete cfbcHandle;
- printf("program exited\n");
- return 0;
-}
+#include "stdlib.h"
+#include "stdio.h"
+#include "tv/CFbcCommunication.h"
+
+int main(int argc, char **argv)
+{
+ int idx = 0, send_buf[128], recv_buf[128], cmd_value = 1, run_flag = 0, run_cnt = 0, cmd_type = 0, read_flag = 0;
+ printf("run begin.......\n");
+ if(argc < 4) {
+ printf("usage:./libcfbc_jni cmd_type cmd_value run_cnt(all hex mode)\n");
+ return 0;
+ }
+
+ cmd_type = strtol(argv[1], NULL, 16);
+ cmd_value = strtol(argv[2], NULL, 16);
+ run_cnt = strtol(argv[3], NULL, 16);
+
+ CFbcCommunication *cfbcHandle = new CFbcCommunication();
+ printf("to test.......\n");
+ cfbcHandle->run();
+ sleep(0.2);
+
+ switch(cmd_type) {
+ default:
+ for(idx = 0; idx < run_cnt; idx++) {
+ memset(send_buf, 0, sizeof(send_buf));
+ memset(recv_buf, 0, sizeof(recv_buf));
+ send_buf[0] = cmd_type;
+ send_buf[1] = 3;
+ send_buf[2] = cmd_value;
+ printf("\n\n======%d to set value is:0x%02x\n", idx, cmd_value);
+ cfbcHandle->handleCmd(COMM_DEV_SERIAL, send_buf, recv_buf);
+ sleep(1);
+ }
+ break;
+ }
+
+ printf("wait to exit......\n");
+ cfbcHandle->requestExitAndWait();
+ delete cfbcHandle;
+ printf("program exited\n");
+ return 0;
+}
diff --git a/tvapi/android/libtvbinder/Android.mk b/tvapi/android/libtvbinder/Android.mk
index e7820a3..061bec7 100644
--- a/tvapi/android/libtvbinder/Android.mk
+++ b/tvapi/android/libtvbinder/Android.mk
@@ -1,24 +1,24 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SRC_FILES:= \
- Tv.cpp \
- ITv.cpp \
- ITvClient.cpp \
- ITvService.cpp
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libutils \
- libbinder \
- libui
-
-LOCAL_MODULE:= libtvbinder
-
-LOCAL_C_INCLUDES += \
- $(LOCAL_PATH)/../
-
-LOCAL_PRELINK_MODULE := false
-include $(BUILD_SHARED_LIBRARY)
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES:= \
+ Tv.cpp \
+ ITv.cpp \
+ ITvClient.cpp \
+ ITvService.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+ libcutils \
+ libutils \
+ libbinder \
+ libui
+
+LOCAL_MODULE:= libtvbinder
+
+LOCAL_C_INCLUDES += \
+ $(LOCAL_PATH)/../
+
+LOCAL_PRELINK_MODULE := false
+include $(BUILD_SHARED_LIBRARY)
diff --git a/tvapi/android/libtvbinder/ITv.cpp b/tvapi/android/libtvbinder/ITv.cpp
index aa81345..f32a1af 100644
--- a/tvapi/android/libtvbinder/ITv.cpp
+++ b/tvapi/android/libtvbinder/ITv.cpp
@@ -1,145 +1,144 @@
-//#define LOG_NDEBUG 0
-#define LOG_TAG "ITv"
-#include <utils/Log.h>
-#include <stdint.h>
-#include <sys/types.h>
-#include <binder/Parcel.h>
-#include <include/ITv.h>
-
-enum {
- DISCONNECT = IBinder::FIRST_CALL_TRANSACTION,
- START_PREVIEW,
- SEND_COMMAND,
- CONNECT,
- LOCK,
- UNLOCK,
- TV_CMD,
- TV_CREATE_SUBTITLE,
- TV_CREATE_VIDEO_FRAME,
-};
-
-class BpTv: public BpInterface<ITv>
-{
-public:
- BpTv(const sp<IBinder> &impl)
- : BpInterface<ITv>(impl)
- {
- }
-
- // disconnect from tv service
- void disconnect()
- {
- Parcel data, reply;
- data.writeInterfaceToken(ITv::getInterfaceDescriptor());
- remote()->transact(DISCONNECT, data, &reply);
- }
-
- status_t processCmd(const Parcel &p, Parcel *r)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ITv::getInterfaceDescriptor());
- data.write(p.data(), p.dataSize());
- remote()->transact(TV_CMD, data, &reply);
- r->write(reply.data(), reply.dataSize());
- r->setDataPosition(0);
- return 0;
- }
-
- virtual status_t createVideoFrame(const sp<IMemory> &share_mem)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ITv::getInterfaceDescriptor());
- data.writeStrongBinder(share_mem->asBinder());
- remote()->transact(TV_CREATE_VIDEO_FRAME, data, &reply);
- return reply.readInt32();
- }
-
- virtual status_t createSubtitle(const sp<IMemory> &share_mem)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ITv::getInterfaceDescriptor());
- data.writeStrongBinder(share_mem->asBinder());
- remote()->transact(TV_CREATE_SUBTITLE, data, &reply);
- return reply.readInt32();
- }
- virtual status_t connect(const sp<ITvClient> &tvClient)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ITv::getInterfaceDescriptor());
- data.writeStrongBinder(tvClient->asBinder());
- remote()->transact(CONNECT, data, &reply);
- return reply.readInt32();
- }
- virtual status_t lock()
- {
- Parcel data, reply;
- data.writeInterfaceToken(ITv::getInterfaceDescriptor());
- remote()->transact(LOCK, data, &reply);
- return reply.readInt32();
- }
- virtual status_t unlock()
- {
- Parcel data, reply;
- data.writeInterfaceToken(ITv::getInterfaceDescriptor());
- remote()->transact(UNLOCK, data, &reply);
- return reply.readInt32();
- }
-};
-
-IMPLEMENT_META_INTERFACE(Tv, "android.amlogic.ITv");
-
-status_t BnTv::onTransact(
- uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags)
-{
- switch (code) {
- case DISCONNECT: {
- CHECK_INTERFACE(ITv, data, reply);
- disconnect();
- return NO_ERROR;
- }
- break;
- case CONNECT: {
- CHECK_INTERFACE(ITv, data, reply);
- sp<ITvClient> tvClient = interface_cast<ITvClient>(data.readStrongBinder());
- reply->writeInt32(connect(tvClient));
- return NO_ERROR;
- }
- break;
- case LOCK: {
- CHECK_INTERFACE(ITv, data, reply);
- reply->writeInt32(lock());
- return NO_ERROR;
- }
- break;
- case UNLOCK: {
- CHECK_INTERFACE(ITv, data, reply);
- reply->writeInt32(unlock());
- return NO_ERROR;
- }
- break;
- case TV_CMD: {
- CHECK_INTERFACE(ITv, data, reply);
- processCmd(data, reply);
- //reply->write(tmp.data(), tmp.dataSize());
- return NO_ERROR;
- }
- case TV_CREATE_SUBTITLE: {
- CHECK_INTERFACE(ITv, data, reply);
- sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder());
- createSubtitle(buffer);
- //reply->write(tmp.data(), tmp.dataSize());
- return NO_ERROR;
- }
- case TV_CREATE_VIDEO_FRAME: {
- CHECK_INTERFACE(ITv, data, reply);
- sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder());
- createVideoFrame(buffer);
- //reply->write(tmp.data(), tmp.dataSize());
- return NO_ERROR;
- }
- break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
+//#define LOG_NDEBUG 0
+#define LOG_TAG "ITv"
+#include <utils/Log.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <binder/Parcel.h>
+#include <include/ITv.h>
+
+enum {
+ DISCONNECT = IBinder::FIRST_CALL_TRANSACTION,
+ START_PREVIEW,
+ SEND_COMMAND,
+ CONNECT,
+ LOCK,
+ UNLOCK,
+ TV_CMD,
+ TV_CREATE_SUBTITLE,
+ TV_CREATE_VIDEO_FRAME,
+};
+
+class BpTv: public BpInterface<ITv> {
+public:
+ BpTv(const sp<IBinder> &impl)
+ : BpInterface<ITv>(impl)
+ {
+ }
+
+ // disconnect from tv service
+ void disconnect()
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(ITv::getInterfaceDescriptor());
+ remote()->transact(DISCONNECT, data, &reply);
+ }
+
+ status_t processCmd(const Parcel &p, Parcel *r)
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(ITv::getInterfaceDescriptor());
+ data.write(p.data(), p.dataSize());
+ remote()->transact(TV_CMD, data, &reply);
+ r->write(reply.data(), reply.dataSize());
+ r->setDataPosition(0);
+ return 0;
+ }
+
+ virtual status_t createVideoFrame(const sp<IMemory> &share_mem)
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(ITv::getInterfaceDescriptor());
+ data.writeStrongBinder(share_mem->asBinder());
+ remote()->transact(TV_CREATE_VIDEO_FRAME, data, &reply);
+ return reply.readInt32();
+ }
+
+ virtual status_t createSubtitle(const sp<IMemory> &share_mem)
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(ITv::getInterfaceDescriptor());
+ data.writeStrongBinder(share_mem->asBinder());
+ remote()->transact(TV_CREATE_SUBTITLE, data, &reply);
+ return reply.readInt32();
+ }
+ virtual status_t connect(const sp<ITvClient> &tvClient)
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(ITv::getInterfaceDescriptor());
+ data.writeStrongBinder(tvClient->asBinder());
+ remote()->transact(CONNECT, data, &reply);
+ return reply.readInt32();
+ }
+ virtual status_t lock()
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(ITv::getInterfaceDescriptor());
+ remote()->transact(LOCK, data, &reply);
+ return reply.readInt32();
+ }
+ virtual status_t unlock()
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(ITv::getInterfaceDescriptor());
+ remote()->transact(UNLOCK, data, &reply);
+ return reply.readInt32();
+ }
+};
+
+IMPLEMENT_META_INTERFACE(Tv, "android.amlogic.ITv");
+
+status_t BnTv::onTransact(
+ uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags)
+{
+ switch(code) {
+ case DISCONNECT: {
+ CHECK_INTERFACE(ITv, data, reply);
+ disconnect();
+ return NO_ERROR;
+ }
+ break;
+ case CONNECT: {
+ CHECK_INTERFACE(ITv, data, reply);
+ sp<ITvClient> tvClient = interface_cast<ITvClient>(data.readStrongBinder());
+ reply->writeInt32(connect(tvClient));
+ return NO_ERROR;
+ }
+ break;
+ case LOCK: {
+ CHECK_INTERFACE(ITv, data, reply);
+ reply->writeInt32(lock());
+ return NO_ERROR;
+ }
+ break;
+ case UNLOCK: {
+ CHECK_INTERFACE(ITv, data, reply);
+ reply->writeInt32(unlock());
+ return NO_ERROR;
+ }
+ break;
+ case TV_CMD: {
+ CHECK_INTERFACE(ITv, data, reply);
+ processCmd(data, reply);
+ //reply->write(tmp.data(), tmp.dataSize());
+ return NO_ERROR;
+ }
+ case TV_CREATE_SUBTITLE: {
+ CHECK_INTERFACE(ITv, data, reply);
+ sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder());
+ createSubtitle(buffer);
+ //reply->write(tmp.data(), tmp.dataSize());
+ return NO_ERROR;
+ }
+ case TV_CREATE_VIDEO_FRAME: {
+ CHECK_INTERFACE(ITv, data, reply);
+ sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder());
+ createVideoFrame(buffer);
+ //reply->write(tmp.data(), tmp.dataSize());
+ return NO_ERROR;
+ }
+ break;
+ default:
+ return BBinder::onTransact(code, data, reply, flags);
+ }
+}
+
diff --git a/tvapi/android/libtvbinder/ITvClient.cpp b/tvapi/android/libtvbinder/ITvClient.cpp
index fc6d9bb..f348132 100644
--- a/tvapi/android/libtvbinder/ITvClient.cpp
+++ b/tvapi/android/libtvbinder/ITvClient.cpp
@@ -1,59 +1,58 @@
-#define LOG_TAG "ITvClient"
-#include <utils/Log.h>
-#include <stdint.h>
-#include <sys/types.h>
-#include <include/ITvClient.h>
-#include "../include/tvcmd.h"
-enum {
- NOTIFY_CALLBACK = IBinder::FIRST_CALL_TRANSACTION,
-};
-
-class BpTvClient: public BpInterface<ITvClient>
-{
-public:
- BpTvClient(const sp<IBinder> &impl) :
- BpInterface<ITvClient> (impl)
- {
- }
-
- // generic callback from tv service to app
- void notifyCallback(int32_t msgType, const Parcel &p)
- {
- ALOGV("BpTvClient notifyCallback datasize = %d pos = %d", p.dataSize(), p.dataPosition());
- Parcel data, reply;
- data.writeInterfaceToken(ITvClient::getInterfaceDescriptor());
- data.writeInt32(msgType);
- data.write(p.data(), p.dataSize());
- remote()->transact(NOTIFY_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY);
- }
-};
-
-IMPLEMENT_META_INTERFACE(TvClient, "android.amlogic.ITvClient");
-
-// ----------------------------------------------------------------------
-status_t BnTvClient::onTransact(uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags)
-{
- int i = 0, loop_count = 0;
-
- switch (code) {
- case NOTIFY_CALLBACK: {
- CHECK_INTERFACE(ITvClient, data, reply);
- Parcel ext;
- int32_t msgType = data.readInt32();
-
- ext.appendFrom(const_cast<Parcel *>(&data), data.dataPosition(), data.dataAvail());
-
-
- switch (msgType) {
- default:
- ALOGE("BnTvClient::onTransact NOTIFY_CALLBACK msg type ----= %d", msgType);
- break;
- }
- notifyCallback(msgType, ext);
- return NO_ERROR;
- }
- break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
+#define LOG_TAG "ITvClient"
+#include <utils/Log.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <include/ITvClient.h>
+#include "../include/tvcmd.h"
+enum {
+ NOTIFY_CALLBACK = IBinder::FIRST_CALL_TRANSACTION,
+};
+
+class BpTvClient: public BpInterface<ITvClient> {
+public:
+ BpTvClient(const sp<IBinder> &impl) :
+ BpInterface<ITvClient> (impl)
+ {
+ }
+
+ // generic callback from tv service to app
+ void notifyCallback(int32_t msgType, const Parcel &p)
+ {
+ ALOGV("BpTvClient notifyCallback datasize = %d pos = %d", p.dataSize(), p.dataPosition());
+ Parcel data, reply;
+ data.writeInterfaceToken(ITvClient::getInterfaceDescriptor());
+ data.writeInt32(msgType);
+ data.write(p.data(), p.dataSize());
+ remote()->transact(NOTIFY_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY);
+ }
+};
+
+IMPLEMENT_META_INTERFACE(TvClient, "android.amlogic.ITvClient");
+
+// ----------------------------------------------------------------------
+status_t BnTvClient::onTransact(uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags)
+{
+ int i = 0, loop_count = 0;
+
+ switch (code) {
+ case NOTIFY_CALLBACK: {
+ CHECK_INTERFACE(ITvClient, data, reply);
+ Parcel ext;
+ int32_t msgType = data.readInt32();
+
+ ext.appendFrom(const_cast<Parcel *>(&data), data.dataPosition(), data.dataAvail());
+
+
+ switch (msgType) {
+ default:
+ ALOGE("BnTvClient::onTransact NOTIFY_CALLBACK msg type ----= %d", msgType);
+ break;
+ }
+ notifyCallback(msgType, ext);
+ return NO_ERROR;
+ }
+ break;
+ default:
+ return BBinder::onTransact(code, data, reply, flags);
+ }
+}
diff --git a/tvapi/android/libtvbinder/ITvService.cpp b/tvapi/android/libtvbinder/ITvService.cpp
index d68c60d..b56fea0 100644
--- a/tvapi/android/libtvbinder/ITvService.cpp
+++ b/tvapi/android/libtvbinder/ITvService.cpp
@@ -1,51 +1,50 @@
-
-#include <stdint.h>
-#include <sys/types.h>
-#include <utils/Log.h>
-#include <binder/Parcel.h>
-#include <binder/IPCThreadState.h>
-#include <binder/IServiceManager.h>
-
-#include <include/ITvService.h>
-
-class BpTvService: public BpInterface<ITvService>
-{
-public:
- BpTvService(const sp<IBinder> &impl)
- : BpInterface<ITvService>(impl)
- {
- }
-
- // connect to tv service
- virtual sp<ITv> connect(const sp<ITvClient> &tvClient)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ITvService::getInterfaceDescriptor());
- data.writeStrongBinder(tvClient->asBinder());
- remote()->transact(BnTvService::CONNECT, data, &reply);
- return interface_cast<ITv>(reply.readStrongBinder());
- }
-};
-
-IMPLEMENT_META_INTERFACE(TvService, "android.amlogic.ITvService");
-
-// ----------------------------------------------------------------------
-
-status_t BnTvService::onTransact(
- uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags)
-{
- switch (code) {
- case CONNECT: {
- CHECK_INTERFACE(ITvService, data, reply);
- sp<ITvClient> tvClient = interface_cast<ITvClient>(data.readStrongBinder());
- sp<ITv> tv = connect(tvClient);
- ALOGD("BnTvService::onTransact( sp<ITv> tv = connect(tvClient);");
- reply->writeStrongBinder(tv->asBinder());
- return NO_ERROR;
- }
- break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
+
+#include <stdint.h>
+#include <sys/types.h>
+#include <utils/Log.h>
+#include <binder/Parcel.h>
+#include <binder/IPCThreadState.h>
+#include <binder/IServiceManager.h>
+
+#include <include/ITvService.h>
+
+class BpTvService: public BpInterface<ITvService> {
+public:
+ BpTvService(const sp<IBinder> &impl)
+ : BpInterface<ITvService>(impl)
+ {
+ }
+
+ // connect to tv service
+ virtual sp<ITv> connect(const sp<ITvClient> &tvClient)
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(ITvService::getInterfaceDescriptor());
+ data.writeStrongBinder(tvClient->asBinder());
+ remote()->transact(BnTvService::CONNECT, data, &reply);
+ return interface_cast<ITv>(reply.readStrongBinder());
+ }
+};
+
+IMPLEMENT_META_INTERFACE(TvService, "android.amlogic.ITvService");
+
+// ----------------------------------------------------------------------
+
+status_t BnTvService::onTransact(
+ uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags)
+{
+ switch(code) {
+ case CONNECT: {
+ CHECK_INTERFACE(ITvService, data, reply);
+ sp<ITvClient> tvClient = interface_cast<ITvClient>(data.readStrongBinder());
+ sp<ITv> tv = connect(tvClient);
+ ALOGD("BnTvService::onTransact( sp<ITv> tv = connect(tvClient);");
+ reply->writeStrongBinder(tv->asBinder());
+ return NO_ERROR;
+ }
+ break;
+ default:
+ return BBinder::onTransact(code, data, reply, flags);
+ }
+}
+
diff --git a/tvapi/android/libtvbinder/Tv.cpp b/tvapi/android/libtvbinder/Tv.cpp
index 29935d1..c3348c9 100644
--- a/tvapi/android/libtvbinder/Tv.cpp
+++ b/tvapi/android/libtvbinder/Tv.cpp
@@ -1,189 +1,189 @@
-#define LOG_TAG "Tv"
-#include <utils/Log.h>
-#include <utils/threads.h>
-#include <signal.h>
-#include <binder/IServiceManager.h>
-#include <binder/IMemory.h>
-
-#include <include/Tv.h>
-#include <include/ITvService.h>
-
-// client singleton for tv service binder interface
-Mutex Tv::mLock;
-sp<ITvService> Tv::mTvService;
-sp<Tv::DeathNotifier> Tv::mDeathNotifier;
-
-// establish binder interface to tv service
-const sp<ITvService> &Tv::getTvService()
-{
- Mutex::Autolock _l(mLock);
- if (mTvService.get() == 0) {
- sp<IServiceManager> sm = defaultServiceManager();
- sp<IBinder> binder;
- do {
- binder = sm->getService(String16("aml.tvserver"));
- if (binder != 0)
- break;
- ALOGW("TvService not published, waiting...");
- usleep(500000); // 0.5 s
- } while (true);
- if (mDeathNotifier == NULL) {
- mDeathNotifier = new DeathNotifier();
- }
- binder->linkToDeath(mDeathNotifier);
- mTvService = interface_cast<ITvService>(binder);
- }
- ALOGE_IF(mTvService == 0, "no TvService!?");
- return mTvService;
-}
-
-Tv::Tv()
-{
- init();
-}
-
-// construct a tv client from an existing tv remote
-sp<Tv> Tv::create(const sp<ITv> &tv)
-{
- ALOGD("create");
- if (tv == 0) {
- ALOGE("tv remote is a NULL pointer");
- return 0;
- }
-
- sp<Tv> c = new Tv();
- if (tv->connect(c) == NO_ERROR) {
- c->mStatus = NO_ERROR;
- c->mTv = tv;
- tv->asBinder()->linkToDeath(c);
- }
- return c;
-}
-
-void Tv::init()
-{
- mStatus = UNKNOWN_ERROR;
-}
-
-Tv::~Tv()
-{
- disconnect();
-}
-
-sp<Tv> Tv::connect()
-{
- ALOGD("Tv::connect------------------------------------------");
- sp<Tv> c = new Tv();
- const sp<ITvService> &cs = getTvService();
- if (cs != 0) {
- c->mTv = cs->connect(c);
- }
- if (c->mTv != 0) {
- c->mTv->asBinder()->linkToDeath(c);
- c->mStatus = NO_ERROR;
- } else {
- c.clear();
- }
- return c;
-}
-
-void Tv::disconnect()
-{
- ALOGD("disconnect");
- if (mTv != 0) {
- mTv->disconnect();
- mTv->asBinder()->unlinkToDeath(this);
- mTv = 0;
- }
-}
-
-status_t Tv::reconnect()
-{
- ALOGD("reconnect");
- sp <ITv> c = mTv;
- if (c == 0) return NO_INIT;
- return c->connect(this);
-}
-
-sp<ITv> Tv::remote()
-{
- return mTv;
-}
-
-status_t Tv::lock()
-{
- sp <ITv> c = mTv;
- if (c == 0) return NO_INIT;
- return c->lock();
-}
-
-status_t Tv::unlock()
-{
- sp <ITv> c = mTv;
- if (c == 0) return NO_INIT;
- return c->unlock();
-}
-
-status_t Tv::processCmd(const Parcel &p, Parcel *r)
-{
- sp <ITv> c = mTv;
- if (c == 0) return NO_INIT;
- return c->processCmd(p, r);
-}
-
-//
-status_t Tv::createSubtitle(const sp<IMemory> &share_mem)
-{
- sp <ITv> c = mTv;
- if (c == 0) return NO_INIT;
- return c->createSubtitle(share_mem);
-}
-
-status_t Tv::createVideoFrame(const sp<IMemory> &share_mem)
-{
- sp <ITv> c = mTv;
- if (c == 0) return NO_INIT;
- return c->createVideoFrame(share_mem);
-}
-
-
-void Tv::setListener(const sp<TvListener> &listener)
-{
- ALOGD("tv------------Tv::setListener");
- Mutex::Autolock _l(mLock);
- mListener = listener;
-}
-
-
-// callback from tv service
-void Tv::notifyCallback(int32_t msgType, const Parcel &p)
-{
- int size = p.dataSize();
- int pos = p.dataPosition();
- p.setDataPosition(0);
- sp<TvListener> listener;
- {
- Mutex::Autolock _l(mLock);
- listener = mListener;
- }
- if (listener != NULL) {
- listener->notify(msgType, p);
- }
-}
-
-void Tv::binderDied(const wp<IBinder> &who)
-{
- ALOGW("ITv died");
- //notifyCallback(1, 2, 0);
-}
-
-void Tv::DeathNotifier::binderDied(const wp<IBinder> &who)
-{
- ALOGW("-----------------binderDied");
- Mutex::Autolock _l(Tv::mLock);
- Tv::mTvService.clear();
- ALOGW("kill myself");
- kill(getpid(), SIGKILL);
- ALOGW("----------------Tv server died!");
-}
-
+#define LOG_TAG "Tv"
+#include <utils/Log.h>
+#include <utils/threads.h>
+#include <signal.h>
+#include <binder/IServiceManager.h>
+#include <binder/IMemory.h>
+
+#include <include/Tv.h>
+#include <include/ITvService.h>
+
+// client singleton for tv service binder interface
+Mutex Tv::mLock;
+sp<ITvService> Tv::mTvService;
+sp<Tv::DeathNotifier> Tv::mDeathNotifier;
+
+// establish binder interface to tv service
+const sp<ITvService> &Tv::getTvService()
+{
+ Mutex::Autolock _l(mLock);
+ if (mTvService.get() == 0) {
+ sp<IServiceManager> sm = defaultServiceManager();
+ sp<IBinder> binder;
+ do {
+ binder = sm->getService(String16("aml.tvserver"));
+ if (binder != 0)
+ break;
+ ALOGW("TvService not published, waiting...");
+ usleep(500000); // 0.5 s
+ } while(true);
+ if (mDeathNotifier == NULL) {
+ mDeathNotifier = new DeathNotifier();
+ }
+ binder->linkToDeath(mDeathNotifier);
+ mTvService = interface_cast<ITvService>(binder);
+ }
+ ALOGE_IF(mTvService == 0, "no TvService!?");
+ return mTvService;
+}
+
+Tv::Tv()
+{
+ init();
+}
+
+// construct a tv client from an existing tv remote
+sp<Tv> Tv::create(const sp<ITv> &tv)
+{
+ ALOGD("create");
+ if (tv == 0) {
+ ALOGE("tv remote is a NULL pointer");
+ return 0;
+ }
+
+ sp<Tv> c = new Tv();
+ if (tv->connect(c) == NO_ERROR) {
+ c->mStatus = NO_ERROR;
+ c->mTv = tv;
+ tv->asBinder()->linkToDeath(c);
+ }
+ return c;
+}
+
+void Tv::init()
+{
+ mStatus = UNKNOWN_ERROR;
+}
+
+Tv::~Tv()
+{
+ disconnect();
+}
+
+sp<Tv> Tv::connect()
+{
+ ALOGD("Tv::connect------------------------------------------");
+ sp<Tv> c = new Tv();
+ const sp<ITvService> &cs = getTvService();
+ if (cs != 0) {
+ c->mTv = cs->connect(c);
+ }
+ if (c->mTv != 0) {
+ c->mTv->asBinder()->linkToDeath(c);
+ c->mStatus = NO_ERROR;
+ } else {
+ c.clear();
+ }
+ return c;
+}
+
+void Tv::disconnect()
+{
+ ALOGD("disconnect");
+ if (mTv != 0) {
+ mTv->disconnect();
+ mTv->asBinder()->unlinkToDeath(this);
+ mTv = 0;
+ }
+}
+
+status_t Tv::reconnect()
+{
+ ALOGD("reconnect");
+ sp <ITv> c = mTv;
+ if (c == 0) return NO_INIT;
+ return c->connect(this);
+}
+
+sp<ITv> Tv::remote()
+{
+ return mTv;
+}
+
+status_t Tv::lock()
+{
+ sp <ITv> c = mTv;
+ if (c == 0) return NO_INIT;
+ return c->lock();
+}
+
+status_t Tv::unlock()
+{
+ sp <ITv> c = mTv;
+ if (c == 0) return NO_INIT;
+ return c->unlock();
+}
+
+status_t Tv::processCmd(const Parcel &p, Parcel *r)
+{
+ sp <ITv> c = mTv;
+ if (c == 0) return NO_INIT;
+ return c->processCmd(p, r);
+}
+
+//
+status_t Tv::createSubtitle(const sp<IMemory> &share_mem)
+{
+ sp <ITv> c = mTv;
+ if (c == 0) return NO_INIT;
+ return c->createSubtitle(share_mem);
+}
+
+status_t Tv::createVideoFrame(const sp<IMemory> &share_mem)
+{
+ sp <ITv> c = mTv;
+ if (c == 0) return NO_INIT;
+ return c->createVideoFrame(share_mem);
+}
+
+
+void Tv::setListener(const sp<TvListener> &listener)
+{
+ ALOGD("tv------------Tv::setListener");
+ Mutex::Autolock _l(mLock);
+ mListener = listener;
+}
+
+
+// callback from tv service
+void Tv::notifyCallback(int32_t msgType, const Parcel &p)
+{
+ int size = p.dataSize();
+ int pos = p.dataPosition();
+ p.setDataPosition(0);
+ sp<TvListener> listener;
+ {
+ Mutex::Autolock _l(mLock);
+ listener = mListener;
+ }
+ if (listener != NULL) {
+ listener->notify(msgType, p);
+ }
+}
+
+void Tv::binderDied(const wp<IBinder> &who)
+{
+ ALOGW("ITv died");
+ //notifyCallback(1, 2, 0);
+}
+
+void Tv::DeathNotifier::binderDied(const wp<IBinder> &who)
+{
+ ALOGW("-----------------binderDied");
+ Mutex::Autolock _l(Tv::mLock);
+ Tv::mTvService.clear();
+ ALOGW("kill myself");
+ kill(getpid(), SIGKILL);
+ ALOGW("----------------Tv server died!");
+}
+
diff --git a/tvapi/android/tvserver/Android.mk b/tvapi/android/tvserver/Android.mk
index 92ff58b..ccb6aad 100644
--- a/tvapi/android/tvserver/Android.mk
+++ b/tvapi/android/tvserver/Android.mk
@@ -1,81 +1,81 @@
-LOCAL_PATH:= $(call my-dir)
-
-
-DVB_PATH := $(wildcard external/dvb)
-
-ifeq ($(DVB_PATH), )
- DVB_PATH := $(wildcard vendor/amlogic/dvb)
-endif
-
-AM_LIBPLAYER_PATH := $(wildcard vendor/amlogic/frameworks/av/LibPlayer)
-LIB_ZVBI_PATH := $(wildcard external/libzvbi)
-LIB_SQLITE_PATH := $(wildcard external/sqlite)
-
-
-#tvserver
-include $(CLEAR_VARS)
-
-
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SRC_FILES:= \
- TvService.cpp
-
-LOCAL_SHARED_LIBRARIES := \
- libtv
-
-LOCAL_SHARED_LIBRARIES += \
- libui \
- libutils \
- libbinder \
- libcutils \
- libsqlite \
- libmedia \
- libtvbinder \
- libhardware_legacy \
- libdl \
- libskia \
- libtinyxml
-
-LOCAL_SHARED_LIBRARIES += \
- libzvbi \
- libntsc_decode \
- libam_mw \
- libam_adp \
- libam_ver
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/../../libtv \
- $(LOCAL_PATH)/../ \
- $(LOCAL_PATH)/../../libtv/tvdb \
- $(LOCAL_PATH)/../../libtv/tv \
- $(LOCAL_PATH)/../../libtv/include \
- $(LOCAL_PATH)/../../build/include \
-
-LOCAL_C_INCLUDES += \
- bionic/libc/include \
- bionic/libc/private \
- system/extras/ext4_utils \
- $(LOCAL_PATH)/../ \
- $(LIB_SQLITE_PATH)/dist \
- system/media/audio_effects/include
-
-
-LOCAL_C_INCLUDES += \
- $(LIB_ZVBI_PATH)/ntsc_decode/include \
- $(LIB_ZVBI_PATH)/ntsc_decode/include/ntsc_dmx \
- $(LIB_ZVBI_PATH)/src \
- $(DVB_PATH)/include/am_adp \
- $(DVB_PATH)/include/am_mw \
- $(DVB_PATH)/include/am_ver \
- $(DVB_PATH)/android/ndk/include \
- $(AM_LIBPLAYER_PATH)/amadec/include \
- $(AM_LIBPLAYER_PATH)/amcodec/include \
- $(AM_LIBPLAYER_PATH)/amffmpeg \
- $(AM_LIBPLAYER_PATH)/amplayer
-
-
-LOCAL_MODULE:= libtvserver
-
-include $(BUILD_SHARED_LIBRARY)
+LOCAL_PATH:= $(call my-dir)
+
+
+DVB_PATH := $(wildcard external/dvb)
+
+ifeq ($(DVB_PATH), )
+ DVB_PATH := $(wildcard vendor/amlogic/dvb)
+endif
+
+AM_LIBPLAYER_PATH := $(wildcard vendor/amlogic/frameworks/av/LibPlayer)
+LIB_ZVBI_PATH := $(wildcard external/libzvbi)
+LIB_SQLITE_PATH := $(wildcard external/sqlite)
+
+
+#tvserver
+include $(CLEAR_VARS)
+
+
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES:= \
+ TvService.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+ libtv
+
+LOCAL_SHARED_LIBRARIES += \
+ libui \
+ libutils \
+ libbinder \
+ libcutils \
+ libsqlite \
+ libmedia \
+ libtvbinder \
+ libhardware_legacy \
+ libdl \
+ libskia \
+ libtinyxml
+
+LOCAL_SHARED_LIBRARIES += \
+ libzvbi \
+ libntsc_decode \
+ libam_mw \
+ libam_adp \
+ libam_ver
+
+LOCAL_C_INCLUDES := \
+ $(LOCAL_PATH)/../../libtv \
+ $(LOCAL_PATH)/../ \
+ $(LOCAL_PATH)/../../libtv/tvdb \
+ $(LOCAL_PATH)/../../libtv/tv \
+ $(LOCAL_PATH)/../../libtv/include \
+ $(LOCAL_PATH)/../../build/include \
+
+LOCAL_C_INCLUDES += \
+ bionic/libc/include \
+ bionic/libc/private \
+ system/extras/ext4_utils \
+ $(LOCAL_PATH)/../ \
+ $(LIB_SQLITE_PATH)/dist \
+ system/media/audio_effects/include
+
+
+LOCAL_C_INCLUDES += \
+ $(LIB_ZVBI_PATH)/ntsc_decode/include \
+ $(LIB_ZVBI_PATH)/ntsc_decode/include/ntsc_dmx \
+ $(LIB_ZVBI_PATH)/src \
+ $(DVB_PATH)/include/am_adp \
+ $(DVB_PATH)/include/am_mw \
+ $(DVB_PATH)/include/am_ver \
+ $(DVB_PATH)/android/ndk/include \
+ $(AM_LIBPLAYER_PATH)/amadec/include \
+ $(AM_LIBPLAYER_PATH)/amcodec/include \
+ $(AM_LIBPLAYER_PATH)/amffmpeg \
+ $(AM_LIBPLAYER_PATH)/amplayer
+
+
+LOCAL_MODULE:= libtvserver
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/tvapi/android/tvserver/TvService.cpp b/tvapi/android/tvserver/TvService.cpp
index 5620f79..eb61440 100644
--- a/tvapi/android/tvserver/TvService.cpp
+++ b/tvapi/android/tvserver/TvService.cpp
@@ -1,4374 +1,4381 @@
-#include <utils/Log.h>
-#include <binder/IServiceManager.h>
-#include <binder/IPCThreadState.h>
-#include <utils/String16.h>
-#include <utils/Errors.h>
-#include <binder/MemoryBase.h>
-#include <binder/MemoryHeapBase.h>
-#include <include/ITvService.h>
-#include <hardware/hardware.h>
-#include "TvService.h"
-#include <cutils/atomic.h>
-#include <cutils/properties.h>
-#include <stdint.h>
-#include <tvconfig/tvconfig.h>
-#include <tvsetting/CTvSetting.h>
-#include <audio/audio_api.h>
-#include <tvutils/tvutils.h>
-#include <version/version.h>
-#include "../include/tvcmd.h"
-#include "tv/CTvLog.h"
-#include <tvdb/CTvRegion.h>
-extern "C" {
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <pthread.h>
-#include <signal.h>
-#include "make_ext4fs.h"
-#include "am_ver.h"
-}
-#define LOG_TAG "TvService"
-
-#define PICTURE_TIMEOUT seconds(5)
-
-static int getCallingPid()
-{
- return IPCThreadState::self()->getCallingPid();
-}
-
-void TvService::instantiate(CTv *pTv)
-{
- defaultServiceManager()->addService(String16("aml.tvserver"), new TvService( pTv));
-}
-
-TvService::TvService(CTv *pTv) :
- BnTvService()
-{
- mpStartTvClient = NULL;
- mpScannerClient = NULL;
- mUsers = 0;
- mpTv = pTv;
- mpTv->setTvObserver(this);
- mCapVidFrame.setObserver(this);
- mpTv->OpenTv();
-}
-
-
-TvService::~TvService()
-{
- mpStartTvClient = NULL;
- mpScannerClient = NULL;
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- LOGW("some client still connect it!");
- }
- }
- if (mpTv != NULL) {
- delete mpTv;
- mpTv = NULL;
- }
-}
-
-void TvService::onTvEvent(const CTvEv &ev)
-{
- int type = ev.getEvType();
- LOGD("TvService::onTvEvent ev type = %d", type);
- switch (type) {
- case CTvEv::TV_EVENT_COMMOM: {
- break;
- }
- case CTvEv::TV_EVENT_SCANNER: {
- CTvScanner::ScannerEvent *pScannerEv = (CTvScanner::ScannerEvent *) (&ev);
- if (mpScannerClient != NULL) {
- sp<Client> ScannerClient = mpScannerClient.promote();
- if (ScannerClient != 0) {
- Parcel p;
- p.writeInt32(pScannerEv->mType);
- p.writeInt32(pScannerEv->mPercent);
- p.writeInt32(pScannerEv->mTotalChannelCount);
- p.writeInt32(pScannerEv->mLockedStatus);
- p.writeInt32(pScannerEv->mChannelNumber);
- p.writeInt32(pScannerEv->mFrequency);
- p.writeString16(String16(pScannerEv->mProgramName));
- p.writeInt32(pScannerEv->mprogramType);
- p.writeString16(String16(pScannerEv->mMSG));
- p.writeInt32(pScannerEv->mStrength);
- p.writeInt32(pScannerEv->mSnr);
- ScannerClient->notifyCallback(SCAN_EVENT_CALLBACK, p);
- }
- }
- break;
- }
- case CTvEv::TV_EVENT_EPG: {
- CTvEpg::EpgEvent *pEpgEvent = (CTvEpg::EpgEvent *) (&ev);
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- Parcel p;
- p.writeInt32(pEpgEvent->type);
- p.writeInt32(pEpgEvent->time);
- p.writeInt32(pEpgEvent->programID);
- p.writeInt32(pEpgEvent->channelID);
- currentClient->getTvClient()->notifyCallback(EPG_EVENT_CALLBACK, p);
- }
- }
- }
- break;
- }
- case CTvEv::TV_EVENT_HDMI_IN_CAP: {
- CTvScreenCapture::CapEvent *pCapEvt = (CTvScreenCapture::CapEvent *)(&ev);
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- Parcel p;
- p.writeInt32(pCapEvt->mFrameNum);
- p.writeInt32(pCapEvt->mFrameSize);
- p.writeInt32(pCapEvt->mFrameWide);
- p.writeInt32(pCapEvt->mFrameHeight);
- currentClient->getTvClient()->notifyCallback(VFRAME_BMP_EVENT_CALLBACK, p);
- }
- }
- }
- break;
- }
- case CTvEv::TV_EVENT_AV_PLAYBACK: {
- TvEvent::AVPlaybackEvent *pEv = (TvEvent::AVPlaybackEvent *)(&ev);
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- Parcel p;
- p.writeInt32(pEv->mMsgType);
- p.writeInt32(pEv->mProgramId);
- currentClient->getTvClient()->notifyCallback(DTV_AV_PLAYBACK_CALLBACK, p);
- }
- }
- }
- break;
- }
- case CTvEv::TV_EVENT_SIGLE_DETECT: {
- TvEvent::SignalInfoEvent *pEv = (TvEvent::SignalInfoEvent *)(&ev);
-
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- Parcel p;
- p.writeInt32(pEv->mTrans_fmt);
- p.writeInt32(pEv->mFmt);
- p.writeInt32(pEv->mStatus);
- p.writeInt32(pEv->mReserved);
- currentClient->getTvClient()->notifyCallback(SIGLE_DETECT_CALLBACK, p);
- }
- }
- }
- break;
- }
- case CTvEv::TV_EVENT_ADC_CALIBRATION: {
- TvEvent::ADCCalibrationEvent *pEv = (TvEvent::ADCCalibrationEvent *)(&ev);
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- Parcel p;
- p.writeInt32(pEv->mState);
- currentClient->getTvClient()->notifyCallback(ADC_CALIBRATION_CALLBACK, p);
- }
- }
- }
- break;
- }
- case CTvEv::TV_EVENT_VGA: { //VGA
- TvEvent::VGAEvent *pEv = (TvEvent::VGAEvent *)(&ev);
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- Parcel p;
- p.writeInt32(pEv->mState);
- currentClient->getTvClient()->notifyCallback(VGA_CALLBACK, p);
- }
- }
- }
- break;
- }
- case CTvEv::TV_EVENT_SOURCE_CONNECT: {
- TvEvent::SourceConnectEvent *pEv = (TvEvent::SourceConnectEvent *)(&ev);
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- Parcel p;
- p.writeInt32(pEv->mSourceInput);
- p.writeInt32(pEv->connectionState);
- currentClient->getTvClient()->notifyCallback(SOURCE_CONNECT_CALLBACK, p);
- }
- }
- }
- break;
- }
- case CTvEv::TV_EVENT_HDMIRX_CEC: {
- TvEvent::HDMIRxCECEvent *pEv = (TvEvent::HDMIRxCECEvent *)(&ev);
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- Parcel p;
-
- p.writeInt32(pEv->mDataCount);
- for (int j = 0; j < pEv->mDataCount; j++) {
- p.writeInt32(pEv->mDataBuf[j]);
- }
-
- currentClient->getTvClient()->notifyCallback(HDMIRX_CEC_CALLBACK, p);
- }
- }
- }
- break;
- }
- case CTvEv::TV_EVENT_UPGRADE_FBC: {
- TvEvent::UpgradeFBCEvent *pEv = (TvEvent::UpgradeFBCEvent *)(&ev);
-
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- Parcel p;
- p.writeInt32(pEv->mState);
- p.writeInt32(pEv->param);
- currentClient->getTvClient()->notifyCallback(UPGRADE_FBC_CALLBACK, p);
- }
- }
- }
- break;
- }
- case CTvEv::TV_EVENT_SERIAL_COMMUNICATION: {
- TvEvent::SerialCommunicationEvent *pEv = (TvEvent::SerialCommunicationEvent *)(&ev);
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- Parcel p;
-
- p.writeInt32(pEv->mDevId);
- p.writeInt32(pEv->mDataCount);
- for (int j = 0; j < pEv->mDataCount; j++) {
- p.writeInt32(pEv->mDataBuf[j]);
- }
-
- currentClient->getTvClient()->notifyCallback(SERIAL_COMMUNICATION_CALLBACK, p);
- }
- }
- }
- break;
- }
-
- case CTvEv::TV_EVENT_2d4G_HEADSET: {
- TvEvent::HeadSetOf2d4GEvent *pEv = (TvEvent::HeadSetOf2d4GEvent *)(&ev);
- LOGD("SendDtvStats status: =%d para2: =%d", pEv->state, pEv->para);
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- Parcel p;
- p.writeInt32(pEv->state);
- p.writeInt32(pEv->para);
- currentClient->getTvClient()->notifyCallback(HEADSET_STATUS_CALLBACK, p);
- }
- }
- }
- break;
- }
-
- default:
- break;
- }
-}
-
-sp<ITv> TvService::connect(const sp<ITvClient> &tvClient)
-{
- int callingPid = getCallingPid();
- LOGD("TvService::connect E (pid %d, client %p)", callingPid, tvClient->asBinder().get());
-
- Mutex::Autolock lock(mServiceLock);
-
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- sp<ITvClient> currentTvClient(currentClient->getTvClient());
- if (tvClient->asBinder() == currentTvClient->asBinder()) {
- LOGD("TvService::connect X (pid %d, same client %p) is reconnecting...", callingPid, tvClient->asBinder().get());
- return currentClient;
- } else {
- //LOGD("TvService::connect X (pid %d, new client %p) rejected. "
- // "(old pid %d, old client %p)", callingPid, tvClient->asBinder().get(), currentClient->mClientPid, currentTvClient->asBinder().get());
- // if (kill(currentClient->mClientPid, 0) == -1 && errno == ESRCH) {
- // LOGE("The old client is dead!");
- // }
- //return client;
- //return currentClient;
- continue;
- }
- } else {
- LOGE("client (pid %d) have delete ------------not exist", callingPid);
- client.clear();
- m_v_Clients.removeAt(i);
- client_size--;
- continue;
- }
- }
- }
-
- if (mUsers > 0) {
- LOGE("Still have client, rejected");
- //return client;
- }
- LOGD("TvService::connect X 3");
- // client = new Client(this, tvClient, callingPid);
- //mClient = client;
-
- sp<Client> newclient = new Client(this, tvClient, callingPid, mpTv);
- m_v_Clients.add(newclient);
-
-#if DEBUG_CLIENT_REFERENCES
- //client->trackMe(true, true);
-#endif
- //mCurClient = client;
- LOGD("TvService::connect X 4");
- return newclient;
-}
-
-void TvService::removeClient(const sp<ITvClient> &tvClient)
-{
- int callingPid = getCallingPid();
-
- Mutex::Autolock lock(mServiceLock);
-
- int client_size = m_v_Clients.size();
- wp<Client> client;
- for (int i = 0; i < client_size; i++) {
- client = m_v_Clients[i];
- if (client != 0) {
- sp<Client> currentClient = client.promote();
- if (currentClient != 0) {
- sp<ITvClient> currentTvClient(currentClient->getTvClient());
- if (tvClient->asBinder() == currentTvClient->asBinder()) {
- LOGD("find client , and remove it pid = %d, client = %p i=%d", callingPid, tvClient->asBinder().get(), i);
- client.clear();
- LOGD("find client , and remove it pid1 ");
- m_v_Clients.removeAt(i);
- LOGD("find client , and remove it pid2 ");
- break;
- } else {
- LOGW("removeClient (pid %d): mClient doesn't match!", callingPid);
- continue;
- }
- } else {
- LOGW("removeclient currentClient == 0 (pid %d)", callingPid);
- client.clear();
- m_v_Clients.removeAt(i);
- client_size--;
- continue;
- }
- } else {
- LOGW("removeclient client == 0 (pid %d)", callingPid);
- client.clear();
- m_v_Clients.removeAt(i);
- client_size--;
- continue;
- }
- }
-
- LOGD("removeClient (pid %d) done", callingPid);
-}
-
-void TvService::incUsers()
-{
- android_atomic_inc(&mUsers);
-}
-
-void TvService::decUsers()
-{
- android_atomic_dec(&mUsers);
-}
-
-TvService::Client::Client(const sp<TvService> &tvService, const sp<ITvClient> &tvClient, pid_t clientPid, CTv *pTv)
-{
- int callingPid = getCallingPid();
- LOGD("Client::Client E (pid %d)", callingPid);
- mTvService = tvService;
- mTvClient = tvClient;
- mClientPid = clientPid;
- tvService->incUsers();
- mpTv = pTv;
- mIsStartTv = false;
-}
-
-status_t TvService::Client::checkPid()
-{
- int callingPid = getCallingPid();
- if (mClientPid == callingPid)
- return NO_ERROR;
- LOGD("Attempt to use locked tv (client %p) from different process "
- " (old pid %d, new pid %d)", getTvClient()->asBinder().get(), mClientPid, callingPid);
- return -EBUSY;
-}
-
-status_t TvService::Client::lock()
-{
- int callingPid = getCallingPid();
- LOGD("lock from pid %d (mClientPid %d)", callingPid, mClientPid);
- Mutex::Autolock _l(mLock);
- // lock tv to this client if the the tv is unlocked
- if (mClientPid == 0) {
- mClientPid = callingPid;
- return NO_ERROR;
- }
- // returns NO_ERROR if the client already owns the tv, -EBUSY otherwise
- return checkPid();
-}
-
-status_t TvService::Client::unlock()
-{
- int callingPid = getCallingPid();
- LOGD("unlock from pid %d (mClientPid %d)", callingPid, mClientPid);
- Mutex::Autolock _l(mLock);
- // allow anyone to use tv
- status_t result = checkPid();
- if (result == NO_ERROR) {
- mClientPid = 0;
- LOGD("clear mTvClient (pid %d)", callingPid);
- // we need to remove the reference so that when app goes
- // away, the reference count goes to 0.
- mTvClient.clear();
- }
- return result;
-}
-
-status_t TvService::Client::connect(const sp<ITvClient> &client)
-{
- int callingPid = getCallingPid();
- LOGD("Client::connect E (pid %d, client %p)", callingPid, client->asBinder().get());
- {
- sp<ITvClient> oldClient;
- {
- Mutex::Autolock _l(mLock);
- if (mClientPid != 0 && checkPid() != NO_ERROR) {
- LOGW("Tried to connect to locked tv (old pid %d, new pid %d)", mClientPid, callingPid);
- return -EBUSY;
- }
- oldClient = mTvClient;
-
- // did the client actually change?
- if ((mTvClient != NULL) && (client->asBinder() == mTvClient->asBinder())) {
- LOGD("Connect to the same client");
- return NO_ERROR;
- }
-
- mTvClient = client;
- mClientPid = -1;
- LOGD("Connect to the new client (pid %d, client %p)", callingPid, mTvClient->asBinder().get());
- }
-
- }
- mClientPid = callingPid;
- return NO_ERROR;
-}
-
-TvService::Client::~Client()
-{
- if (mIsStartTv) mpTv->StopTvLock();
-
- int callingPid = getCallingPid();
- // tear down client
- LOGD("Client::~Client E (pid %d, client %p)", callingPid, getTvClient()->asBinder().get());
- // make sure we tear down the hardware
- mClientPid = callingPid;
- disconnect();
- LOGD("Client::~Client X (pid %d)", mClientPid);
-}
-
-void TvService::Client::disconnect()
-{
- int callingPid = getCallingPid();
-
- LOGD("Client::disconnect() E (pid %d client %p)", callingPid, getTvClient()->asBinder().get());
-
- Mutex::Autolock lock(mLock);
- if (mClientPid <= 0) {
- LOGE("tv is unlocked (mClientPid = %d), don't tear down hardware", mClientPid);
- return;
- }
- if (checkPid() != NO_ERROR) {
- LOGE("Different client - don't disconnect");
- return;
- }
-
- mTvService->removeClient(mTvClient);
- mTvService->decUsers();
-
- LOGD("Client::disconnect() X (pid %d)", callingPid);
-}
-
-status_t TvService::Client::createVideoFrame(const sp<IMemory> &share_mem)
-{
- LOGD(" mem=%p size=%d", share_mem->pointer() == NULL, share_mem->size());
- int Len = 0;
- Mutex::Autolock lock(mLock);
- mTvService->mCapVidFrame.InitVCap(share_mem);
- mTvService->mCapVidFrame.SetVideoParameter(1280, 720, 50);
-
- mTvService->mCapVidFrame.VideoStart();
- mTvService->mCapVidFrame.GetVideoData(&Len);
- mTvService->mCapVidFrame.VideoStop();
- mTvService->mCapVidFrame.DeinitVideoCap();
-
- return 0;
-}
-
-status_t TvService::Client::createSubtitle(const sp<IMemory> &share_mem)
-{
- LOGD("TvService::Client::createSubtitle mem=%d size=%d", share_mem->pointer() == NULL, share_mem->size());
- //pSub = new CTvSubtitle(share_mem, this);
- //pSub->run();
- return 0;
-}
-status_t TvService::Client::processCmd(const Parcel &p, Parcel *r)
-{
- int tmp_i_buf[128] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
- unsigned char tmp_uc_buf[512] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
- unsigned char tmp_uc_buf2[512] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
- int8_t tmp_int8_buf[512] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
- static int source_input = 0;
- int *data_ptr = NULL;
-
- int cmd = p.readInt32();
-
- LOGD("client=%d cmd=%d", getCallingPid(), cmd);
- switch (cmd) {
- // Tv function
- case OPEN_TV: {
- break;
- }
- case CLOSE_TV: {
- int ret = mpTv->CloseTv();
- r->writeInt32(ret);
- break;
- }
- case START_TV: {
- int mode = p.readInt32();
- int ret = mpTv->StartTvLock();
- //mTvService->mpStartTvClient = this;
- mIsStartTv = true;
- r->writeInt32(ret);
- break;
- }
- case STOP_TV: {
- int ret = mpTv->StopTvLock();
- r->writeInt32(ret);
- mIsStartTv = false;
- break;
- }
- case GET_TV_STATUS: {
- int ret = 0;
- ret = (int)mpTv->GetTvStatus();
- r->writeInt32(ret);
- break;
- }
- case GET_LAST_SOURCE_INPUT: {
- int ret = (int)mpTv->GetLastSourceInput();
- r->writeInt32(ret);
- break;
- }
- case GET_CURRENT_SOURCE_INPUT: {
- int ret = (int)mpTv->GetCurrentSourceInputLock();
- r->writeInt32(ret);
- break;
- }
- case GET_CURRENT_SOURCE_INPUT_TYPE: {
- int ret = 0;//(int)mpTv->Tvin_GetSrcInputType();
- r->writeInt32(ret);
- break;
- }
- case GET_CURRENT_SIGNAL_INFO: {
- tvin_info_t siginfo = mpTv->GetCurrentSignalInfo();
- int frame_rate = mpTv->getHDMIFrameRate();
- LOGD("superman--frame_rate = %d", frame_rate);
- r->writeInt32(siginfo.trans_fmt);
- r->writeInt32(siginfo.fmt);
- r->writeInt32(siginfo.status);
- r->writeInt32(frame_rate);
- break;
- }
- case IS_SOURCE_SWTICH_DONE: {
- //int ret = mpTv->Tv_IsSourceSwtichDone();
- r->writeInt32(0);
- break;
- }
- case SET_SOURCE_INPUT: {
- int sourceinput = p.readInt32();
- tvin_window_pos_t win_pos;
- LOGD(" SetSourceInput sourceId= %x", sourceinput);
- source_input = sourceinput;
- /*win_pos.x1 = p.readInt32();
- win_pos.y1 = p.readInt32();
- win_pos.x2 = p.readInt32();
- win_pos.y2 = p.readInt32();*/
- int ret = mpTv->SetSourceSwitchInput((tv_source_input_t)sourceinput);
- r->writeInt32(ret);
- break;
- }
- case RUN_ADC_AUTO_CALIBRATION: {
- // int ret = mpTv->Tv_RunADCAutoCalibration();
- // r->writeInt32(ret);
- break;
- }
- case IS_DVI_SIGNAL: {
- int ret = mpTv->IsDVISignal();
- r->writeInt32(ret);
- break;
- }
- case IS_VGA_TIMEING_IN_HDMI: {
- int ret = mpTv->isVgaFmtInHdmi();
- r->writeInt32(ret);
- break;
- }
- case GET_VIDEO_PATH_STATUS: {
- int path_type = p.readInt32();
- int ret = 0;//(int)mpTv->Tvin_CheckPathActive((tv_path_type_t)path_type);
- r->writeInt32(ret);
- break;
- }
- case GET_VIDEO_STREAM_STATUS: {
- // int ret = (int)mpTv->Tvin_CheckVideoStreamStatus();
- // r->writeInt32(ret);
- break;
- }
- case GET_FIRST_START_SWITCH_TYPE: {
- //int tmp_val = 0;
- //int ret = (int)mpTv->Tv_GetFirstStartSwitchType(&tmp_val);
- //r->writeInt32(ret);
- r->writeInt32(1);
- break;
- }
- case SET_PREVIEW_WINDOW: {
- tvin_window_pos_t win_pos;
- win_pos.x1 = p.readInt32();
- win_pos.y1 = p.readInt32();
- win_pos.x2 = p.readInt32();
- win_pos.y2 = p.readInt32();
- int ret = (int)mpTv->SetPreviewWindow(win_pos);
- r->writeInt32(ret);
- break;
- }
-
- case SET_VIDEO_DISABLE: {
- int value = p.readInt32();
- int ret = 0;//(int)mpTv->Tv_SetVideoDisable(value);
- r->writeInt32(ret);
- break;
- }
-
- case GET_SOURCE_CONNECT_STATUS: {
- int source_input = p.readInt32();
- int ret = mpTv->GetSourceConnectStatus(source_input);
- r->writeInt32(ret);
- break;
- }
- //Tv function END
-
- //VGA
- case RUN_VGA_AUTO_ADJUST: {
- //int ret = mpTv->Tv_RunVGAAutoAdjust();
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case GET_VGA_AUTO_ADJUST_STATUS: {
- // int fmt = p.readInt32();
- //int ret = (int) mpTv->Tv_GetVagAutoAdjustStatus();
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case IS_VGA_AUTO_ADJUST_DONE: {
- int fmt = p.readInt32();
- int ret = 0;//mpTv->Tv_IsVGAAutoAdjustDone((tvin_sig_fmt_t)fmt);
- r->writeInt32(ret);
- break;
- }
- case SET_VGA_HPOS: {
- // int value = p.readInt32();
- // int fmt = p.readInt32();
- //int ret = mpTv->Tv_SetVGAHPos(value, (tvin_sig_fmt_t)fmt);
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case GET_VGA_HPOS: {
- // int fmt = p.readInt32();
- // int ret = mpTv->Tv_GetVGAHPos((tvin_sig_fmt_t)fmt);
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
-
- case SET_VGA_VPOS: {
- // int value = p.readInt32();
- // int fmt = p.readInt32();
- // int ret = mpTv->Tv_SetVGAVPos(value, (tvin_sig_fmt_t)fmt);
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case GET_VGA_VPOS: {
- // int fmt = p.readInt32();
- // int ret = mpTv->Tv_GetVGAVPos((tvin_sig_fmt_t)fmt);
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
-
- case SET_VGA_CLOCK: {
- // int value = p.readInt32();
- // int fmt = p.readInt32();
- // int ret = mpTv->Tv_SetVGAClock(value, (tvin_sig_fmt_t)fmt);
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case GET_VGA_CLOCK: {
- // int fmt = p.readInt32();
- // int ret = mpTv->Tv_GetVGAClock((tvin_sig_fmt_t)fmt);
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
-
- case SET_VGA_PHASE: {
- // int value = p.readInt32();
- // int fmt = p.readInt32();
- // int ret = mpTv->Tv_SetVGAPhase(value, (tvin_sig_fmt_t)fmt);
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case GET_VGA_PHASE: {
- // int fmt = p.readInt32();
- // int ret = mpTv->Tv_GetVGAPhase((tvin_sig_fmt_t)fmt);
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case SET_VGA_AJUST_PARA: {
- tvafe_vga_parm_t adjparam;
- adjparam.clk_step = p.readInt32();
- adjparam.phase = p.readInt32();
- adjparam.hpos_step = p.readInt32();
- adjparam.vpos_step = p.readInt32();
- adjparam.vga_in_clean = p.readInt32();
- int fmt = p.readInt32();
- int ret = 0/*SetVGAAjustPara(adjparam, (tvin_sig_fmt_t)fmt)*/;
- r->writeInt32(ret);
- break;
- }
- case GET_VGA_AJUST_PARA: {
- tvafe_vga_parm_t adjparam;
- int fmt = p.readInt32();
- int ret = 0/*GetVGAAjustPara(&adjparam, (tvin_sig_fmt_t)fmt)*/;
- r->writeInt32(adjparam.clk_step);
- r->writeInt32(adjparam.phase);
- r->writeInt32(adjparam.hpos_step);
- r->writeInt32(adjparam.vpos_step);
- r->writeInt32(adjparam.vga_in_clean);
- r->writeInt32(ret);
- break;
- }
- case SET_VGAPARAM_DEFAULT: {
- // int ret = (int)mpTv->TvinResetVgaAjustParam();
- // r->writeInt32(ret);
- break;
- }
- // VGA END
-
- // 3D
-
- case SET_3D_MODE: {
- int mode = p.readInt32();
- int ret = mpTv->Tv_Set3DMode((VIDEO_3D_MODE_T)mode);
- r->writeInt32(ret);
- break;
- }
- case GET_3D_MODE: {
- int ret = (int)mpTv->Tv_Get3DMode();
- r->writeInt32(ret);
- break;
- }
- case SET_3D_LR_SWITH: {
- int on_off = p.readInt32();
- //int status = p.readInt32();
- int ret = mpTv->Tv_Set3DLRSwith(on_off);
- r->writeInt32(ret);
- break;
- }
- case GET_3D_LR_SWITH: {
- int ret = mpTv->Tv_Get3DLRSwith();
- r->writeInt32(ret);
- break;
- }
- case SET_3D_TO_2D_MODE: {
- int mode = p.readInt32();
- //int status = p.readInt32();
- int ret = mpTv->Tv_Set3DTo2DMode(mode);
- r->writeInt32(ret);
- break;
- }
- case GET_3D_TO_2D_MODE: {
- int ret = mpTv->Tv_Get3DTo2DMode();
- r->writeInt32(ret);
- break;
- }
- case SET_3D_DEPTH: {
- int value = p.readInt32();
- int ret = mpTv->Tv_Set3DDepth(value);
- r->writeInt32(ret);
- break;
- }
- case GET_3D_DEPTH: {
- int ret = mpTv->GetSave3DDepth();
- r->writeInt32(ret);
- break;
- }
- // 3D END
-
- // PQ
- case SET_BRIGHTNESS: {
- int brightness = p.readInt32();
- int source_type = p.readInt32();
- int is_save = p.readInt32();
- int ret = mpTv->Tv_SetBrightness(brightness, (tv_source_input_type_t)source_type, is_save);
- r->writeInt32(ret);
- break;
- }
- case GET_BRIGHTNESS: {
- int source_type = p.readInt32();
- LOGD("GET_BRIGHTNESS------------=%d", source_type);
- int ret = mpTv->Tv_GetBrightness((tv_source_input_type_t)source_type);
- r->writeInt32(ret);
- break;
- }
-
- case SET_CONTRAST: {
- int contrast = p.readInt32();
- int source_type = p.readInt32();
- int is_save = p.readInt32();
- int ret = mpTv->Tv_SetContrast(contrast, (tv_source_input_type_t)source_type, is_save);
- r->writeInt32(ret);
- break;
- }
- case GET_CONTRAST: {
- int source_type = p.readInt32();
- int ret = mpTv->Tv_GetContrast((tv_source_input_type_t)source_type);
- r->writeInt32(ret);
- break;
- }
- case SET_SATUATION: {
- int satuation = p.readInt32();
- int source_type = p.readInt32();
- int fmt = p.readInt32();
- int is_save = p.readInt32();
- int ret = mpTv->Tv_SetSaturation(satuation, (tv_source_input_type_t)source_type, (tvin_sig_fmt_t)fmt, is_save);
- r->writeInt32(ret);
- break;
- }
- case GET_SATUATION: {
- int source_type = p.readInt32();
- int ret = mpTv->Tv_GetSaturation((tv_source_input_type_t)source_type);
- r->writeInt32(ret);
- break;
- }
- case SET_HUE: {
- int hue = p.readInt32();
- int source_type = p.readInt32();
- int fmt = p.readInt32();
- int is_save = p.readInt32();
- int ret = mpTv->Tv_SetHue(hue, (tv_source_input_type_t)source_type, (tvin_sig_fmt_t)fmt, is_save);
- r->writeInt32(ret);
- break;
- }
- case GET_HUE: {
- int source_type = p.readInt32();
- int ret = mpTv->Tv_GetHue((tv_source_input_type_t)source_type);
- r->writeInt32(ret);
- break;
- }
- case SET_SCENEMODE: {
- int mode = p.readInt32();
- int is_save = p.readInt32();
- int ret = 0;//mpTv->Tv_SetSceneMode((vpp_scene_mode_t)mode,is_save);
- r->writeInt32(ret);
- break;
- }
- case GET_SCENEMODE: {
- int ret = 0;//(int)mpTv->Tv_GetSceneMode();
- r->writeInt32(ret);
- break;
- }
- case SET_PQMODE: {
- int mode = p.readInt32();
- int source_type = p.readInt32();
- int is_save = p.readInt32();
- int ret = mpTv->Tv_SetPQMode((vpp_picture_mode_t)mode, (tv_source_input_type_t)source_type, is_save);
- r->writeInt32(ret);
- break;
- }
- case GET_PQMODE: {
- int source_type = p.readInt32();
- int ret = (int)mpTv->Tv_GetPQMode((tv_source_input_type_t)source_type);
- r->writeInt32(ret);
- break;
- }
- case SET_SHARPNESS: {
- int value = p.readInt32();
- int source_type = p.readInt32();
- int en = p.readInt32();
- int status_3d = p.readInt32();
- int is_save = p.readInt32();
- int ret = mpTv->Tv_SetSharpness(value, (tv_source_input_type_t)source_type, en, is_save);
- r->writeInt32(ret);
- break;
- }
- case GET_SHARPNESS: {
- int source_type = p.readInt32();
- int ret = mpTv->Tv_GetSharpness((tv_source_input_type_t)source_type);
- r->writeInt32(ret);
- break;
- }
- case SAVE_SHARPNESS: {
- int value = p.readInt32();
- int source_type = p.readInt32();
- int en = p.readInt32();
- int ret = mpTv->Tv_SaveSharpness(value, (tv_source_input_type_t)source_type, en);
- r->writeInt32(ret);
- break;
- }
- case SET_BACKLIGHT: {
- int value = p.readInt32();
- int source_type = p.readInt32();
- int is_save = p.readInt32();
- int ret = -1;
- if (GetPlatformHaveFBCFlag() == 0) {
- ret = mpTv->Tv_SetBacklight(value, (tv_source_input_type_t)source_type, is_save);
- } else {
- ret = mpTv->Tv_FactorySet_FBC_Backlight(value);
- }
- r->writeInt32(ret);
- break;
- }
- case GET_BACKLIGHT: {
- int source_type = p.readInt32();
- int ret = 0;
- if (GetPlatformHaveFBCFlag() == 0) {
- ret = mpTv->Tv_GetBacklight((tv_source_input_type_t)source_type);
- } else {
- ret = mpTv->Tv_FactoryGet_FBC_Backlight();
- }
- r->writeInt32(ret);
- break;
- }
- case SET_COLOR_TEMPERATURE: {
- int mode = p.readInt32();
- int source_type = p.readInt32();
- int is_save = p.readInt32();
- int ret = -1;
- if (GetPlatformHaveFBCFlag() == 0) {
- ret = mpTv->Tv_SetColorTemperature((vpp_color_temperature_mode_t)mode, (tv_source_input_type_t)source_type, is_save);
- } else {
- mode = mpTv->Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(mode);
- ret = mpTv->Tv_FactorySet_FBC_ColorTemp_Mode(mode);
- }
- r->writeInt32(ret);
- break;
- }
- case GET_COLOR_TEMPERATURE: {
- int source_type = p.readInt32();
- int ret = 0;
- if (GetPlatformHaveFBCFlag() == 0) {
- ret = mpTv->Tv_GetColorTemperature((tv_source_input_type_t)source_type);
- } else {
- ret = mpTv->Tv_FactoryGet_FBC_ColorTemp_Mode();
- ret = mpTv->Tv_FactoryWhiteBalanceColorTempMappingFbc2G9(ret);
- }
- r->writeInt32(ret);
- break;
- }
- case SAVE_COLOR_TEMPERATURE: {
- int mode = p.readInt32();
- int source_type = p.readInt32();
- int ret = mpTv->Tv_SaveColorTemp((vpp_color_temperature_mode_t)mode, (tv_source_input_type_t)source_type);
- r->writeInt32(ret);
- break;
- }
- case SET_DISPLAY_MODE: {
- int mode = p.readInt32();
- int source_type = p.readInt32();
- int fmt = p.readInt32();
- int is_save = p.readInt32();
- int ret = mpTv->Tv_SetDisplayMode((vpp_display_mode_t)mode, (tv_source_input_type_t)source_type, (tvin_sig_fmt_t)fmt, is_save);
- r->writeInt32(ret);
- break;
- }
- case GET_DISPLAY_MODE: {
- int source_type = p.readInt32();
- int ret = (int)mpTv->Tv_GetDisplayMode((tv_source_input_type_t)source_type);
- r->writeInt32(ret);
- break;
- }
- case SAVE_DISPLAY_MODE: {
- int mode = p.readInt32();
- int source_type = p.readInt32();
- int ret = mpTv->Tv_SaveDisplayMode((vpp_display_mode_t)mode, (tv_source_input_type_t)source_type);
- r->writeInt32(ret);
- break;
- }
- case SET_NOISE_REDUCTION_MODE: {
- int mode = p.readInt32();
- int source_type = p.readInt32();
- int is_save = p.readInt32();
- int ret = mpTv->Tv_SetNoiseReductionMode((vpp_noise_reduction_mode_t)mode, (tv_source_input_type_t)source_type, is_save);
- r->writeInt32(ret);
- break;
- }
- case GET_NOISE_REDUCTION_MODE: {
- int source_type = p.readInt32();
- int ret = mpTv->Tv_GetNoiseReductionMode((tv_source_input_type_t)source_type);
- r->writeInt32(ret);
- break;
- }
- case SAVE_NOISE_REDUCTION_MODE: {
- int mode = p.readInt32();
- int source_type = p.readInt32();
- int ret = mpTv->Tv_SaveNoiseReductionMode((vpp_noise_reduction_mode_t)mode, (tv_source_input_type_t)source_type);
- r->writeInt32(ret);
- break;
- }
- case SETRGBOGO_POSTOFFSET: {
- int type = p.readInt32();
- int offset = p.readInt32();
- int ret = 0;
- ret = mpTv->Tv_SetRGBOGO_PostOffset(type, offset);
- r->writeInt32(ret);
- break;
- }
- case SETRGBOGO_GAIN: {
- int type = p.readInt32();
- int mode = p.readInt32();
- int ret = 0;
- ret = mpTv->Tv_SetRGBOGO_Gain(type, mode);
- r->writeInt32(ret);
- break;
- }
- case GETRGBOGO_POSTOFFSET: {
- int ret = 0;
- int type = p.readInt32();
- ret = mpTv->Tv_GetRGBOGO_PostOffset(type);
- r->writeInt32(ret);
- break;
- }
- case GETRGBOGO_GAIN: {
- int type = p.readInt32();
- int ret = 0;
- ret = mpTv->Tv_GetRGBOGO_Gain(type);
- r->writeInt32(ret);
- break;
- }
- // PQ END
-
- // FACTORY
- case FACTORY_SETPQMODE_BRIGHTNESS: {
- int source_type = p.readInt32();
- int pq_mode = p.readInt32();
- int brightness = p.readInt32();
- int ret = mpTv->Tv_FactorySetPQMode_Brightness(source_type, pq_mode, brightness);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETPQMODE_BRIGHTNESS: {
- int source_type = p.readInt32();
- int pq_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetPQMode_Brightness(source_type, pq_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETPQMODE_CONTRAST: {
- int source_type = p.readInt32();
- int pq_mode = p.readInt32();
- int contrast = p.readInt32();
- int ret = mpTv->Tv_FactorySetPQMode_Contrast(source_type, pq_mode, contrast);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETPQMODE_CONTRAST: {
- int source_type = p.readInt32();
- int pq_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetPQMode_Contrast(source_type, pq_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETPQMODE_SATURATION: {
- int source_type = p.readInt32();
- int pq_mode = p.readInt32();
- int saturation = p.readInt32();
- int ret = mpTv->Tv_FactorySetPQMode_Saturation(source_type, pq_mode, saturation);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETPQMODE_SATURATION: {
- int source_type = p.readInt32();
- int pq_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetPQMode_Saturation(source_type, pq_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETPQMODE_HUE: {
- int source_type = p.readInt32();
- int pq_mode = p.readInt32();
- int hue = p.readInt32();
- int ret = mpTv->Tv_FactorySetPQMode_Hue(source_type, pq_mode, hue);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETPQMODE_HUE: {
- int source_type = p.readInt32();
- int pq_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetPQMode_Hue(source_type, pq_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETPQMODE_SHARPNESS: {
- int source_type = p.readInt32();
- int pq_mode = p.readInt32();
- int sharpness = p.readInt32();
- int ret = mpTv->Tv_FactorySetPQMode_Sharpness(source_type, pq_mode, sharpness);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETPQMODE_SHARPNESS: {
- int source_type = p.readInt32();
- int pq_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetPQMode_Sharpness(source_type, pq_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETCOLORTEMP_RGAIN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int rgain = p.readInt32();
- int ret = mpTv->Tv_FactorySetColorTemp_Rgain(source_type, colortemp_mode, rgain);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SAVECOLORTEMP_RGAIN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int rgain = p.readInt32();
- int ret = mpTv->Tv_FactorySaveColorTemp_Rgain(source_type, colortemp_mode, rgain);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETCOLORTEMP_RGAIN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetColorTemp_Rgain(source_type, colortemp_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETCOLORTEMP_GGAIN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ggain = p.readInt32();
- int ret = mpTv->Tv_FactorySetColorTemp_Ggain(source_type, colortemp_mode, ggain);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SAVECOLORTEMP_GGAIN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ggain = p.readInt32();
- int ret = mpTv->Tv_FactorySaveColorTemp_Ggain(source_type, colortemp_mode, ggain);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETCOLORTEMP_GGAIN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetColorTemp_Ggain(source_type, colortemp_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETCOLORTEMP_BGAIN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int bgain = p.readInt32();
- int ret = mpTv->Tv_FactorySetColorTemp_Bgain(source_type, colortemp_mode, bgain);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SAVECOLORTEMP_BGAIN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int bgain = p.readInt32();
- int ret = mpTv->Tv_FactorySaveColorTemp_Bgain(source_type, colortemp_mode, bgain);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETCOLORTEMP_BGAIN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetColorTemp_Bgain(source_type, colortemp_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETCOLORTEMP_ROFFSET: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int roffset = p.readInt32();
- int ret = mpTv->Tv_FactorySetColorTemp_Roffset(source_type, colortemp_mode, roffset);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SAVECOLORTEMP_ROFFSET: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int roffset = p.readInt32();
- int ret = mpTv->Tv_FactorySaveColorTemp_Roffset(source_type, colortemp_mode, roffset);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETCOLORTEMP_ROFFSET: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetColorTemp_Roffset(source_type, colortemp_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETCOLORTEMP_GOFFSET: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int goffset = p.readInt32();
- int ret = mpTv->Tv_FactorySetColorTemp_Goffset(source_type, colortemp_mode, goffset);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SAVECOLORTEMP_GOFFSET: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int goffset = p.readInt32();
- int ret = mpTv->Tv_FactorySaveColorTemp_Goffset(source_type, colortemp_mode, goffset);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETCOLORTEMP_GOFFSET: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetColorTemp_Goffset(source_type, colortemp_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETCOLORTEMP_BOFFSET: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int boffset = p.readInt32();
- int ret = mpTv->Tv_FactorySetColorTemp_Boffset(source_type, colortemp_mode, boffset);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SAVECOLORTEMP_BOFFSET: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int boffset = p.readInt32();
- int ret = mpTv->Tv_FactorySaveColorTemp_Boffset(source_type, colortemp_mode, boffset);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETCOLORTEMP_BOFFSET: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetColorTemp_Boffset(source_type, colortemp_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETTESTPATTERN: {
- int pattern = p.readInt32();
- int ret = mpTv->Tv_FactorySetTestPattern(pattern);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETTESTPATTERN: {
- int ret = mpTv->Tv_FactoryGetTestPattern();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_RESETPQMODE: {
- int ret = mpTv->Tv_FactoryResetPQMode();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_RESETCOLORTEMP: {
- int ret = mpTv->Tv_FactoryResetColorTemp();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_RESETPAMAMSDEFAULT: {
- int ret = mpTv->Tv_FactorySetParamsDefault();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETDDRSSC: {
- int setp = p.readInt32();
- int ret = mpTv->Tv_FactorySetDDRSSC(setp);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETDDRSSC: {
- int ret = mpTv->Tv_FactoryGetDDRSSC();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETLVDSSSC: {
- int setp = p.readInt32();
- int ret = mpTv->Tv_FactorySetLVDSSSC(setp);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETLVDSSSC: {
- int ret = mpTv->Tv_FactoryGetLVDSSSC();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETNOLINEPARAMS: {
- noline_params_t params;
- int noline_params_type = p.readInt32();
- int source_type = p.readInt32();
- params.osd0 = p.readInt32();
- params.osd25 = p.readInt32();
- params.osd50 = p.readInt32();
- params.osd75 = p.readInt32();
- params.osd100 = p.readInt32();
- int ret = mpTv->Tv_FactorySetNolineParams(noline_params_type, source_type, params);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETNOLINEPARAMS: {
- int noline_params_type = p.readInt32();
- int source_type = p.readInt32();
- noline_params_t params = mpTv->Tv_FactoryGetNolineParams(noline_params_type, source_type);
- r->writeInt32(params.osd0);
- r->writeInt32(params.osd25);
- r->writeInt32(params.osd50);
- r->writeInt32(params.osd75);
- r->writeInt32(params.osd100);
- break;
- }
- case FACTORY_SETOVERSCAN: {
- tvin_cutwin_t cutwin_t;
- int source_type = p.readInt32();
- int fmt = p.readInt32();
- int status_3d = p.readInt32();
- int trans_fmt = p.readInt32();
- cutwin_t.hs = p.readInt32();
- cutwin_t.he = p.readInt32();
- cutwin_t.vs = p.readInt32();
- cutwin_t.ve = p.readInt32();
- int ret = mpTv->Tv_FactorySetOverscan(source_type, fmt, status_3d, trans_fmt, cutwin_t);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETOVERSCAN: {
- int source_type = p.readInt32();
- int fmt = p.readInt32();
- int status_3d = p.readInt32();
- int trans_fmt = p.readInt32();
- tvin_cutwin_t cutwin_t = mpTv->Tv_FactoryGetOverscan(source_type, fmt, status_3d, trans_fmt);
- r->writeInt32(cutwin_t.hs);
- r->writeInt32(cutwin_t.he);
- r->writeInt32(cutwin_t.vs);
- r->writeInt32(cutwin_t.ve);
- break;
- }
- case FACTORY_SET_OUT_DEFAULT: {
- int ret = 0;
- ret = mpTv->Tv_SSMFacRestoreDefaultSetting();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETGLOBALOGO_RGAIN: {
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETGLOBALOGO_GGAIN: {
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETGLOBALOGO_BGAIN: {
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETGLOBALOGO_ROFFSET: {
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETGLOBALOGO_GOFFSET: {
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETGLOBALOGO_BOFFSET: {
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETGLOBALOGO_RGAIN: {
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETGLOBALOGO_GGAIN: {
- int p1 = p.readInt32();
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETGLOBALOGO_BGAIN: {
- int p1 = p.readInt32();
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETGLOBALOGO_ROFFSET: {
- int p1 = p.readInt32();
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETGLOBALOGO_GOFFSET: {
- int p1 = p.readInt32();
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETGLOBALOGO_BOFFSET: {
- int p1 = p.readInt32();
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case FACTORY_CLEAN_ALL_TABLE_FOR_PROGRAM: {
- int ret = mpTv->ClearAnalogFrontEnd();
- mpTv->clearDbAllProgramInfoTable();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETBACKLIGHT_PWM_FREQUENCY: {
- int value = p.readInt32();
- int ret = 0;//mpTv->GetVpp().Tv_FactorySetBacklightPWM_Frequency(value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETBACKLIGHT_PWM_FREQUENCY: {
- int ret = 0;//mpTv->GetVpp().Tv_FactoryGetBacklightPWM_Frequency();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETBACKLIGHT_SWITCH_STATUS: {
- int value = p.readInt32();
- int ret = 0;//mpTv->GetVpp().Tv_FactorySetBacklight_Switch_status(value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETBACKLIGHT_SWITCH_STATUS: {
- int ret = 0;//mpTv->GetVpp().Tv_FactoryGetBacklight_Switch_status();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETBACKLIGHT_PWM_DUTY: {
- int value = p.readInt32();
- int ret = 0;//mpTv->GetVpp().Tv_FactorySetBacklightPWM_Duty(value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETBACKLIGHT_PWM_DUTY: {
- int ret = 0;//mpTv->GetVpp().Tv_FactoryGetBacklightPWM_Duty();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_SETLVDS_COLOR_DEPTH: {
- int value = p.readInt32();
- int ret = 0;//mpTv->GetVpp().Tv_FactorySetLVDS_ColorDepth(value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETLVDS_COLOR_DEPTH: {
- int ret = 0;//mpTv->GetVpp().Tv_FactoryGetLVDS_ColorDepth();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETLVDS_DITHER_STATUS: {
- int value = p.readInt32();
- int ret = 0;//mpTv->GetVpp().Tv_FactorySetLVDS_ColorDither_status(value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETLVDS_DITHER_STATUS: {
- int ret = 0;//mpTv->GetVpp().Tv_FactoryGetLVDS_ColorDither_status();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETLVDS_MAPPING_STATUS: {
- int value = p.readInt32();
- int ret = 0;//mpTv->GetVpp().Tv_FactorySetLVDS_Mapping_status(value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETLVDS_MAPPING_STATUS: {
- int ret = 0;//mpTv->GetVpp().Tv_FactoryGetLVDS_Mapping_status();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_SETLVDS_PORT_SWAP_STATUS: {
- int value = p.readInt32();
- int ret = 0;//mpTv->GetVpp().Tv_FactorySetLVDS_PortSwap_status(value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_GETLVDS_PORT_SWAP_STATUS: {
- int ret = 0;//mpTv->GetVpp().Tv_FactoryGetLVDS_PortSwap_status();
- r->writeInt32(ret);
- break;
- }
- // FACTORY END
-
- // AUDIO
- // AUDIO MUTE
- case SET_AUDIO_MUTEKEY_STATUS: {
- int status = p.readInt32();
- int ret = mpTv->SetAudioMuteForSystem(status);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_MUTEKEY_STATUS: {
- int ret = mpTv->GetAudioMuteForSystem();
- r->writeInt32(ret);
- break;
- }
- case SET_AUDIO_FORCE_MUTE_STATUS: {
- int status = p.readInt32();
- int ret = 0;//pTv->getTvAudio().AudioSetForceMuteStatus(status);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_FORCE_MUTE_STATUS: {
- int ret = 0;//mpTv->AudioGetForceMuteStatus();
- r->writeInt32(ret);
- break;
- }
- case SET_AUDIO_AVOUT_MUTE_STATUS: {
- int status = p.readInt32();
- int ret = mpTv->SetAudioAVOutMute(status);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_AVOUT_MUTE_STATUS: {
- int ret = mpTv->GetAudioAVOutMute();
- r->writeInt32(ret);
- break;
- }
- case SET_AUDIO_SPDIF_MUTE_STATUS: {
- int status = p.readInt32();
- int ret = mpTv->SetAudioSPDIFMute(status);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_SPDIF_MUTE_STATUS: {
- int ret = mpTv->GetAudioSPDIFMute();
- r->writeInt32(ret);
- break;
- }
- // AUDIO MASTER VOLUME
- case SET_AUDIO_MASTER_VOLUME: {
- int vol = p.readInt32();
- int ret = mpTv->SetAudioMasterVolume(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_MASTER_VOLUME: {
- int ret = mpTv->GetAudioMasterVolume();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_MASTER_VOLUME: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioMasterVolume(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_MASTER_VOLUME: {
- int ret = mpTv->GetCurAudioMasterVolume();
- r->writeInt32(ret);
- break;
- }
- //AUDIO BALANCE
- case SET_AUDIO_BALANCE: {
- int vol = p.readInt32();
- int ret = mpTv->SetAudioBalance(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_BALANCE: {
- int ret = mpTv->GetAudioBalance();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_BALANCE: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioBalance(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_BALANCE: {
- int ret = mpTv->GetCurAudioBalance();
- r->writeInt32(ret);
- break;
- }
- //AUDIO SUPPERBASS VOLUME
- case SET_AUDIO_SUPPER_BASS_VOLUME: {
- int vol = p.readInt32();
- int ret = mpTv->SetAudioSupperBassVolume(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_SUPPER_BASS_VOLUME: {
- int ret = mpTv->GetAudioSupperBassVolume();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_SUPPER_BASS_VOLUME: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioSupperBassVolume(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_SUPPER_BASS_VOLUME: {
- int ret = mpTv->GetCurAudioSupperBassVolume();
- r->writeInt32(ret);
- break;
- }
- //AUDIO SUPPERBASS SWITCH
- case SET_AUDIO_SUPPER_BASS_SWITCH: {
- int vol = p.readInt32();
- int ret = mpTv->SetAudioSupperBassSwitch(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_SUPPER_BASS_SWITCH: {
- int ret = mpTv->GetAudioSupperBassSwitch();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_SUPPER_BASS_SWITCH: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioSupperBassSwitch(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_SUPPER_BASS_SWITCH: {
- int ret = mpTv->GetCurAudioSupperBassSwitch();
- r->writeInt32(ret);
- break;
- }
- //AUDIO SRS SURROUND SWITCH
- case SET_AUDIO_SRS_SURROUND: {
- int vol = p.readInt32();
- int ret = mpTv->SetAudioSRSSurround(vol);
- mpTv->RefreshAudioMasterVolume(SOURCE_MAX);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_SRS_SURROUND: {
- int ret = mpTv->GetAudioSRSSurround();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_SRS_SURROUND: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioSrsSurround(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_SRS_SURROUND: {
- int ret = mpTv->GetCurAudioSRSSurround();
- r->writeInt32(ret);
- break;
- }
- //AUDIO SRS DIALOG CLARITY
- case SET_AUDIO_SRS_DIALOG_CLARITY: {
- int vol = p.readInt32();
- int ret = mpTv->SetAudioSrsDialogClarity(vol);
- mpTv->RefreshAudioMasterVolume(SOURCE_MAX);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_SRS_DIALOG_CLARITY: {
- int ret = mpTv->GetAudioSrsDialogClarity();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_SRS_DIALOG_CLARITY: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioSrsDialogClarity(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_SRS_DIALOG_CLARITY: {
- int ret = mpTv->GetCurAudioSrsDialogClarity();
- r->writeInt32(ret);
- break;
- }
- //AUDIO SRS TRUBASS
- case SET_AUDIO_SRS_TRU_BASS: {
- int vol = p.readInt32();
- int ret = mpTv->SetAudioSrsTruBass(vol);
- mpTv->RefreshAudioMasterVolume(SOURCE_MAX);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_SRS_TRU_BASS: {
- int ret = mpTv->GetAudioSrsTruBass();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_SRS_TRU_BASS: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioSrsTruBass(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_SRS_TRU_BASS: {
- int ret = mpTv->GetCurAudioSrsTruBass();
- r->writeInt32(ret);
- break;
- }
- //AUDIO BASS
- case SET_AUDIO_BASS_VOLUME: {
- int vol = p.readInt32();
- int ret = mpTv->SetAudioBassVolume(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_BASS_VOLUME: {
- int ret = mpTv->GetAudioBassVolume();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_BASS_VOLUME: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioBassVolume(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_BASS_VOLUME: {
- int ret = mpTv->GetCurAudioBassVolume();
- r->writeInt32(ret);
- break;
- }
- //AUDIO TREBLE
- case SET_AUDIO_TREBLE_VOLUME: {
- int vol = p.readInt32();
- int ret = mpTv->SetAudioTrebleVolume(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_TREBLE_VOLUME: {
- int ret = mpTv->GetAudioTrebleVolume();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_TREBLE_VOLUME: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioTrebleVolume(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_TREBLE_VOLUME: {
- int ret = mpTv->GetCurAudioTrebleVolume();
- r->writeInt32(ret);
- break;
- }
- //AUDIO SOUND MODE
- case SET_AUDIO_SOUND_MODE: {
- int vol = p.readInt32();
- int ret = mpTv->SetAudioSoundMode(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_SOUND_MODE: {
- int ret = mpTv->GetAudioSoundMode();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_SOUND_MODE: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioSoundMode(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_SOUND_MODE: {
- int ret = mpTv->GetCurAudioSoundMode();
- r->writeInt32(ret);
- break;
- }
- //AUDIO WALL EFFECT
- case SET_AUDIO_WALL_EFFECT: {
- int vol = p.readInt32();
- int ret = mpTv->SetAudioWallEffect(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_WALL_EFFECT: {
- int ret = mpTv->GetAudioWallEffect();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_WALL_EFFECT: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioWallEffect(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_WALL_EFFECT: {
- int ret = mpTv->GetCurAudioWallEffect();
- r->writeInt32(ret);
- break;
- }
- //AUDIO EQ MODE
- case SET_AUDIO_EQ_MODE: {
- int vol = p.readInt32();
- int ret = mpTv->SetAudioEQMode(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_EQ_MODE: {
- int ret = mpTv->GetAudioEQMode();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_EQ_MODE: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioEQMode(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_EQ_MODE: {
- int ret = mpTv->GetCurAudioEQMode();
- r->writeInt32(ret);
- break;
- }
- //AUDIO EQ GAIN
- case GET_AUDIO_EQ_RANGE: {
- int buf[2];
- int ret = mpTv->GetAudioEQRange(buf);
- r->writeInt32(2);
- r->writeInt32(buf[0]);
- r->writeInt32(buf[1]);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_EQ_BAND_COUNT: {
- int ret = mpTv->GetAudioEQBandCount();
- r->writeInt32(ret);
- break;
- }
- case SET_AUDIO_EQ_GAIN: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- tmp_buf_size = p.readInt32();
- for (i = 0; i < tmp_buf_size; i++) {
- tmp_i_buf[i] = p.readInt32();
- }
- ret = mpTv->SetAudioEQGain(tmp_i_buf);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_EQ_GAIN: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- ret = mpTv->GetAudioEQGain(tmp_i_buf);
- tmp_buf_size = mpTv->GetAudioEQBandCount();
- r->writeInt32(tmp_buf_size);
- for (i = 0; i < tmp_buf_size; i++) {
- r->writeInt32(tmp_i_buf[i]);
- }
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_EQ_GAIN: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- tmp_buf_size = p.readInt32();
- for (i = 0; i < tmp_buf_size; i++) {
- tmp_i_buf[i] = p.readInt32();
- }
- ret = mpTv->SaveCurAudioEQGain(tmp_i_buf);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_EQ_GAIN: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- ret = mpTv->GetCurAudioEQGain(tmp_i_buf);
- tmp_buf_size = mpTv->GetAudioEQBandCount();
- r->writeInt32(tmp_buf_size);
- for (i = 0; i < tmp_buf_size; i++) {
- r->writeInt32(tmp_i_buf[i]);
- }
- r->writeInt32(ret);
- break;
- }
- case SET_AUDIO_EQ_SWITCH: {
- int tmpVal = p.readInt32();
- int ret = mpTv->SetAudioEQSwitch(tmpVal);
- r->writeInt32(ret);
- break;
- }
- // AUDIO SPDIF SWITCH
- case SET_AUDIO_SPDIF_SWITCH: {
- int tmp_val = p.readInt32();
- int ret = mpTv->SetAudioSPDIFSwitch(tmp_val);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_SPDIF_SWITCH: {
- int ret = 0;//mpTv->GetAudioSPDIFSwitch();
- r->writeInt32(ret);
- break;
- }
- case AUDIO_SET_DOUBLE_OUTPUT_ENABLE: {
- int tmp_val = p.readInt32();
- int ret = mpTv->amAudioSetDoubleOutputSwitch(tmp_val);
- r->writeInt32(ret);
- break;
- }
- case USB_AUDIO_OUPUT_MODULE_ENABLE: {
- int tmp_val = p.readInt32();
- int ret = mpTv->UsbAudioOuputModuleSwitch(tmp_val);
- r->writeInt32(ret);
- break;
- }
-
- case GET_USB_AUDIO_DOUBLE_OUPUT_MODULE_ENABLE: {
- int ret = mpTv->GetAmAudioSetDoubleOutputSwitch();
- r->writeInt32(ret);
- break;
- }
-
- case GET_USB_AUDIO_OUPUT_MODULE_ENABLE: {
- int ret = mpTv->GetCurUsbAudioOuputModuleSwitch();
- r->writeInt32(ret);
- break;
- }
-
- case SAVE_CUR_AUDIO_SPDIF_SWITCH: {
- int tmp_val = p.readInt32();
- int ret = mpTv->SaveCurAudioSPDIFSwitch(tmp_val);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_SPDIF_SWITCH: {
- int ret = mpTv->GetCurAudioSPDIFSwitch();
- r->writeInt32(ret);
- break;
- }
- //AUDIO SPDIF MODE
- case SET_AUDIO_SPDIF_MODE: {
- int vol = p.readInt32();
- int progId = p.readInt32();
- int audioTrackId = p.readInt32();
- int ret = mpTv->SetAudioSPDIFMode(vol);
- mpTv->ResetAudioDecoderForPCMOutput();
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_SPDIF_MODE: {
- int ret = 0;//mpTv->GetAudioSPDIFMode();
- r->writeInt32(ret);
- break;
- }
- case SAVE_CUR_AUDIO_SPDIF_MODE: {
- int vol = p.readInt32();
- int ret = mpTv->SaveCurAudioSPDIFMode(vol);
- r->writeInt32(ret);
- break;
- }
- case GET_CUR_AUDIO_SPDIF_MODE: {
- int ret = mpTv->GetCurAudioSPDIFMode();
- r->writeInt32(ret);
- break;
- }
- case OPEN_AMAUDIO: {
- int sr = p.readInt32();
- int output_dev = p.readInt32();
- int ret = mpTv->OpenAmAudio(sr, output_dev);
- r->writeInt32(ret);
- break;
- }
- case CLOSE_AMAUDIO: {
- int ret = mpTv->CloseAmAudio();
- r->writeInt32(ret);
- break;
- }
- case SET_AMAUDIO_INPUT_SR: {
- int sr = p.readInt32();
- int output_dev = p.readInt32();
- int ret = mpTv->SetAmAudioInputSr(sr, output_dev);
- r->writeInt32(ret);
- break;
- }
- case SET_AMAUDIO_OUTPUT_MODE: {
- int tmp_val = p.readInt32();
- int ret = mpTv->SetAmAudioOutputMode(tmp_val);
- r->writeInt32(ret);
- break;
- }
- case SET_AMAUDIO_MUSIC_GAIN: {
- int tmp_val = p.readInt32();
- int ret = mpTv->SetAmAudioMusicGain(tmp_val);
- r->writeInt32(ret);
- break;
- }
- case SET_AMAUDIO_LEFT_GAIN: {
- int tmp_val = p.readInt32();
- int ret = mpTv->SetAmAudioLeftGain(tmp_val);
- r->writeInt32(ret);
- break;
- }
- case SET_AMAUDIO_RIGHT_GAIN: {
- int tmp_val = p.readInt32();
- int ret = mpTv->SetAmAudioRightGain(tmp_val);
- r->writeInt32(ret);
- break;
- }
- case SELECT_LINE_IN_CHANNEL: {
- int channel = p.readInt32();
- int ret = mpTv->AudioLineInSelectChannel(channel);
- r->writeInt32(ret);
- LOGD("SELECT_LINE_IN_CHANNEL: channel = %d; ret = %d.\n", channel, ret);
- break;
- }
- case SET_KALAOK_IO_LEVEL: {
- int level = p.readInt32();
- int ret = mpTv->SetKalaokIO(level);
- r->writeInt32(ret);
- mpTv->AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_LINEIN);
- LOGD("SET KALAOK H LEVEL: level = %d; ret = %d.\n", level, ret);
- break;
- }
-
- case SET_LINE_IN_CAPTURE_VOL: {
- int l_vol = p.readInt32();
- int r_vol = p.readInt32();
- int ret = mpTv->AudioSetLineInCaptureVolume(l_vol, r_vol);
- r->writeInt32(ret);
- break;
- }
- case HANDLE_AUDIO_HEADSET_PLUG_IN: {
- int ret = mpTv->AudioHandleHeadsetPlugIn();
- r->writeInt32(ret);
- break;
- }
- case HANDLE_AUDIO_HEADSET_PULL_OUT: {
- int ret = mpTv->AudioHandleHeadsetPullOut();
- r->writeInt32(ret);
- break;
- }
- case SET_AUDIO_VOL_COMP: {
- int tmpVal = p.readInt32();
- int ret = mpTv->SetCurProgramAudioVolumeCompensationVal(tmpVal);
- r->writeInt32(ret);
- break;
- }
- case GET_AUDIO_VOL_COMP: {
- int ret = mpTv->GetAudioVolumeCompensationVal(-1);
- r->writeInt32(ret);
- break;
- }
- case SAVE_AUDIO_VOL_COMP: {
- int tmpVal = p.readInt32();
- int ret = -1;//mpTv->atvSaveAudioVolumeCompensationVal(tmpVal);
- LOGD("this cmd is empty!!!!!!!!!!!!!!!!!!!");
- r->writeInt32(ret);
- break;
- }
- case SET_NOISE_GATE_THRESHOLD: {
- int ret = 0;
- r->writeInt32(ret);
- break;
- }
- case SET_AUDIO_SOURCE_FOR_KARAOKE: {
- int sourceinput = p.readInt32();
- int ret = mpTv->Tv_SetAudioSourceType((tv_source_input_t)sourceinput);
- r->writeInt32(ret);
- break;
- }
- // AUDIO END
-
- // SSM
- case SSM_INIT_DEVICE: {
- int tmpRet = 0;
- tmpRet = mpTv->Tv_SSMRestoreDefaultSetting();//mpTv->Tv_SSMInitDevice();
- r->writeInt32(tmpRet);
- break;
- }
- /*case SSM_SAVE_ONE_BYTE: {
- int tmpOffset = p.readInt32();
- int tmpVal = p.readInt32();
- int tmpRet;
- tmpRet = SSMWriteOneByte(tmpOffset, tmpVal);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_ONE_BYTE: {
- int tmpOffset = p.readInt32();
- int tmpRet = 0;
- SSMReadOneByte(tmpOffset, &tmpRet);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_N_BYTES: {
- int i = 0, tmp_offset = 0, tmp_data_len = 0, ret = -1;
-
- tmp_offset = p.readInt32();
- tmp_data_len = p.readInt32();
-
- if (tmp_data_len > 0) {
- data_ptr = new int[tmp_data_len];
-
- if (data_ptr != NULL) {
- for (i = 0; i < tmp_data_len; i++) {
- data_ptr[i] = p.readInt32();
- }
-
- ret = SSMWriteNTypes(tmp_offset, tmp_data_len, data_ptr);
-
- delete data_ptr;
- data_ptr = NULL;
- }
- }
-
- r->writeInt32(ret);
- break;
- }
- case SSM_READ_N_BYTES: {
- int i = 0, tmp_offset = 0, tmp_data_len = 0, ret = -1;
- tmp_offset = p.readInt32();
- tmp_data_len = p.readInt32();
-
- if (tmp_data_len > 0) {
- data_ptr = new int[tmp_data_len];
- if (data_ptr != NULL) {
- ret = SSMReadNTypes(tmp_offset, tmp_data_len, data_ptr);
- if (ret < 0) {
- tmp_data_len = 0;
- }
- r->writeInt32(tmp_data_len);
- for (i = 0; i < tmp_data_len; i++) {
- r->writeInt32(data_ptr[i]);
- }
- delete data_ptr;
- data_ptr = NULL;
- }
- }
- r->writeInt32(ret);
- break;
- }*/
- case SSM_SAVE_POWER_ON_OFF_CHANNEL: {
- int tmpPowerChanNum = p.readInt32();
- int tmpRet;
- tmpRet = SSMSavePowerOnOffChannel(tmpPowerChanNum);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_POWER_ON_OFF_CHANNEL: {
- int tmpRet = 0;
- tmpRet = SSMReadPowerOnOffChannel();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_SOURCE_INPUT: {
- int tmpSouceInput = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveSourceInput(tmpSouceInput);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_SOURCE_INPUT: {
- int tmpRet = 0;
- tmpRet = SSMReadSourceInput();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_LAST_SOURCE_INPUT: {
- int tmpLastSouceInput = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveLastSelectSourceInput(tmpLastSouceInput);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_LAST_SOURCE_INPUT: {
- int tmpRet = 0;
- tmpRet = SSMReadLastSelectSourceInput();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_SYS_LANGUAGE: {
- int tmpVal = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveSystemLanguage(tmpVal);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_SYS_LANGUAGE: {
- int tmpRet = 0;
- tmpRet = SSMReadSystemLanguage();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_AGING_MODE: {
- int tmpVal = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveAgingMode(tmpVal);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_AGING_MODE: {
- int tmpRet = 0;
- tmpRet = SSMReadAgingMode();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_PANEL_TYPE: {
- int tmpVal = p.readInt32();
- int tmpRet;
- tmpRet = SSMSavePanelType(tmpVal);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_PANEL_TYPE: {
- int tmpRet = 0;
- tmpRet = SSMReadPanelType();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_MAC_ADDR: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- tmp_buf_size = p.readInt32();
- for (i = 0; i < tmp_buf_size; i++) {
- tmp_uc_buf[i] = p.readInt32();
- }
- ret = KeyData_SaveMacAddress(tmp_uc_buf);
- r->writeInt32(ret);
- break;
- }
- case SSM_READ_MAC_ADDR: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- ret = KeyData_ReadMacAddress(tmp_uc_buf);
- tmp_buf_size = KeyData_GetMacAddressDataLen();
- r->writeInt32(tmp_buf_size);
- for (i = 0; i < tmp_buf_size; i++) {
- r->writeInt32(tmp_uc_buf[i]);
- }
- r->writeInt32(ret);
- break;
- }
- case SSM_SAVE_BAR_CODE: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- tmp_buf_size = p.readInt32();
- for (i = 0; i < tmp_buf_size; i++) {
- tmp_uc_buf[i] = p.readInt32();
- }
- ret = KeyData_SaveBarCode(tmp_uc_buf);
- r->writeInt32(ret);
- break;
- }
- case SSM_READ_BAR_CODE: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- ret = KeyData_ReadBarCode(tmp_uc_buf);
- tmp_buf_size = KeyData_GetBarCodeDataLen();
- r->writeInt32(tmp_buf_size);
- for (i = 0; i < tmp_buf_size; i++) {
- r->writeInt32(tmp_uc_buf[i]);
- }
- r->writeInt32(ret);
- break;
- }
- case SSM_SAVE_PROJECT_ID: {
- int tmpVal = p.readInt32();
- int tmpRet;
- tmpRet = KeyData_SaveProjectID(tmpVal);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_PROJECT_ID: {
- int tmpRet = 0;
- tmpRet = KeyData_ReadProjectID();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_HDCPKEY: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- tmp_buf_size = p.readInt32();
- for (i = 0; i < tmp_buf_size; i++) {
- tmp_uc_buf[i] = p.readInt32();
- }
- ret = SSMSaveHDCPKey(tmp_uc_buf);
- r->writeInt32(ret);
- break;
- }
- case SSM_READ_HDCPKEY: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- ret = SSMReadHDCPKey(tmp_uc_buf);
- tmp_buf_size = SSMGetHDCPKeyDataLen();
- r->writeInt32(tmp_buf_size);
- for (i = 0; i < tmp_buf_size; i++) {
- r->writeInt32(tmp_uc_buf[i]);
- }
- r->writeInt32(ret);
- break;
- }
- case SSM_SAVE_POWER_ON_MUSIC_SWITCH: {
- int tmpVal = p.readInt32();
- int tmpRet;
- tmpRet = SSMSavePowerOnMusicSwitch(tmpVal);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_POWER_ON_MUSIC_SWITCH: {
- int tmpRet = 0;
- tmpRet = SSMReadPowerOnMusicSwitch();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_POWER_ON_MUSIC_VOL: {
- int tmpVal = p.readInt32();
- int tmpRet;
- tmpRet = SSMSavePowerOnMusicVolume(tmpVal);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_POWER_ON_MUSIC_VOL: {
- int tmpRet = 0;
- tmpRet = SSMReadPowerOnMusicVolume();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_SYS_SLEEP_TIMER: {
- int tmpVal = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveSystemSleepTimer(tmpVal);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_SYS_SLEEP_TIMER: {
- int tmpRet = 0;
- tmpRet = SSMReadSystemSleepTimer();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SET_BUS_STATUS: {
- int tmpVal = p.readInt32();
- int tmpRet = 0;
- //showboz
- //tmpRet = SSMSetBusStatus(tmpVal);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_GET_BUS_STATUS: {
- int tmpRet = 0;
- //showboz
- //tmpRet = SSMGetBusStatus();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_INPUT_SRC_PARENTAL_CTL: {
- int tmpSourceIndex = p.readInt32();
- int tmpCtlFlag = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveInputSourceParentalControl(tmpSourceIndex, tmpCtlFlag);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_INPUT_SRC_PARENTAL_CTL: {
- int tmpSourceIndex = p.readInt32();
- int tmpRet = 0;
- tmpRet = SSMReadInputSourceParentalControl(tmpSourceIndex);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_PARENTAL_CTL_SWITCH: {
- int tmpSwitchFlag = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveParentalControlSwitch(tmpSwitchFlag);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_PARENTAL_CTL_SWITCH: {
- int tmpRet = 0;
- tmpRet = SSMReadParentalControlSwitch();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_PARENTAL_CTL_PASS_WORD: {
- String16 pass_wd_str = p.readString16();
- int tmpRet;
- tmpRet = SSMSaveParentalControlPassWord((unsigned char *)pass_wd_str.string(), pass_wd_str.size() * sizeof(unsigned short));
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_PARENTAL_CTL_PASS_WORD: {
- int tmpChanID = p.readInt32();
- unsigned short tmp_buf [SSM_RW_PARENTAL_CTL_PASSWORD_LEN + 1];
- String16 pass_wd_str;
- SSMReadParentalControlPassWord(tmp_buf);
- tmp_buf[SSM_RW_PARENTAL_CTL_PASSWORD_LEN / sizeof(unsigned short)] = 0;
- pass_wd_str.setTo((const unsigned short *) tmp_buf);
- r->writeString16(pass_wd_str);
- break;
- }
- case SSM_SAVE_USING_DEF_HDCP_KEY_FLAG: {
- break;
- }
- case SSM_READ_USING_DEF_HDCP_KEY_FLAG: {
- break;
- }
- case SSM_GET_CUSTOMER_DATA_START: {
- int tmpRet = 0;
- tmpRet = SSMGetCustomerDataStart();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_GET_CUSTOMER_DATA_LEN: {
- int tmpRet = 0;
- tmpRet = SSMGetCustomerDataLen();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_STANDBY_MODE: {
- int tmp_val = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveStandbyMode(tmp_val);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_STANDBY_MODE: {
- int tmpRet = 0;
- tmpRet = SSMReadStandbyMode();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_LOGO_ON_OFF_FLAG: {
- int tmpSwitchFlag = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveLogoOnOffFlag(tmpSwitchFlag);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_LOGO_ON_OFF_FLAG: {
- int tmpRet = 0;
- tmpRet = SSMReadLogoOnOffFlag();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_HDMIEQ_MODE: {
- int tmpSwitchFlag = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveHDMIEQMode(tmpSwitchFlag);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_HDMIEQ_MODE: {
- int tmpRet = 0;
- tmpRet = SSMReadHDMIEQMode();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_HDMIINTERNAL_MODE: {
- int tmp_val = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveHDMIInternalMode(tmp_val);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_HDMIINTERNAL_MODE: {
- int tmpRet = 0;
- tmpRet = SSMReadHDMIInternalMode();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_DISABLE_3D: {
- int tmp_val = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveDisable3D(tmp_val);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_DISABLE_3D: {
- int tmpRet = 0;
- tmpRet = SSMReadDisable3D();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_GLOBAL_OGOENABLE: {
- int tmp_val = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveGlobalOgoEnable(tmp_val);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_GLOBAL_OGOENABLE: {
- int tmpRet = 0;
- tmpRet = SSMReadGlobalOgoEnable();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_NON_STANDARD_STATUS: {
- int tmp_val = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveNonStandardValue(tmp_val);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_NON_STANDARD_STATUS: {
- int tmpRet = 0;
- tmpRet = SSMReadNonStandardValue();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_ADB_SWITCH_STATUS: {
- int tmp_val = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveAdbSwitchValue(tmp_val);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_ADB_SWITCH_STATUS: {
- int tmpRet = 0;
- tmpRet = SSMReadAdbSwitchValue();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_SERIAL_CMD_SWITCH_STATUS: {
- int tmp_val = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveSerialCMDSwitchValue(tmp_val);
- tmpRet |= mpTv->SetSerialSwitch(SERIAL_A, tmp_val);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_SERIAL_CMD_SWITCH_STATUS: {
- int tmpRet = 0;
- tmpRet = SSMReadSerialCMDSwitchValue();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SET_HDCP_KEY: {
- int tmpRet = 0;
- tmpRet = SSMSetHDCPKey();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_REFRESH_HDCPKEY: {
- int tmpRet = 0;
- tmpRet = SSMRefreshHDCPKey();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_CHROMA_STATUS: {
- int tmp_val = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveChromaStatus(tmp_val);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_CA_BUFFER_SIZE: {
- int tmp_val = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveCABufferSizeValue(tmp_val);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_CA_BUFFER_SIZE: {
- int tmpRet = 0;
- tmpRet = SSMReadCABufferSizeValue();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_GET_ATV_DATA_START: {
- int tmpRet = 0;
- tmpRet = SSMGetATVDataStart();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_GET_ATV_DATA_LEN: {
- int tmpRet = 0;
- tmpRet = SSMGetATVDataLen();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_GET_VPP_DATA_START: {
- int tmpRet = 0;
- tmpRet = SSMGetVPPDataStart();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_GET_VPP_DATA_LEN: {
- int tmpRet = 0;
- tmpRet = SSMGetVPPDataLen();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_SAVE_NOISE_GATE_THRESHOLD_STATUS: {
- int tmp_val = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveNoiseGateThresholdValue(tmp_val);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_READ_NOISE_GATE_THRESHOLD_STATUS: {
- int tmpRet = 0;
- tmpRet = SSMReadNoiseGateThresholdValue();
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_EEPROM_SAVE_ONE_BYTE_N310_N311: {
- int tmpOffset = p.readInt32();
- int tmpVal = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveEEP_One_N310_N311(tmpOffset, tmpVal);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_EEPROM_READ_ONE_BYTE_N310_N311: {
- int tmpOffset = p.readInt32();
- int tmpRet = 0;
- tmpRet = SSMReadEEP_One_N310_N311(tmpOffset);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_EEPROM_SAVE_N_BYTES_N310_N311: {
- int i = 0, tmp_offset = 0, tmp_data_len = 0, ret = -1;
-
- tmp_offset = p.readInt32();
- tmp_data_len = p.readInt32();
-
- if (tmp_data_len > 0) {
- data_ptr = new int[tmp_data_len];
-
- if (data_ptr != NULL) {
- for (i = 0; i < tmp_data_len; i++) {
- data_ptr[i] = p.readInt32();
- }
-
- ret = SSMSaveEEP_N_N310_N311(tmp_offset, tmp_data_len, data_ptr);
-
- delete data_ptr;
- data_ptr = NULL;
- }
- }
-
- r->writeInt32(ret);
- break;
- }
- case SSM_EEPROM_READ_N_BYTES_N310_N311: {
- int i = 0, tmp_offset = 0, tmp_data_len = 0, ret = -1;
- tmp_offset = p.readInt32();
- tmp_data_len = p.readInt32();
-
- if (tmp_data_len > 0) {
- data_ptr = new int[tmp_data_len];
- if (data_ptr != NULL) {
- ret = SSMReadEEP_N_N310_N311(tmp_offset, tmp_data_len, data_ptr);
- if (ret < 0) {
- tmp_data_len = 0;
- }
- r->writeInt32(tmp_data_len);
- for (i = 0; i < tmp_data_len; i++) {
- r->writeInt32(data_ptr[i]);
- }
- delete data_ptr;
- data_ptr = NULL;
- }
- }
- r->writeInt32(ret);
- break;
- }
- case SSM_FLASH_SAVE_ONE_BYTE_N310_N311: {
- int tmpOffset = p.readInt32();
- int tmpVal = p.readInt32();
- int tmpRet;
- tmpRet = SSMSaveFlash_One_N310_N311(tmpOffset, tmpVal);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_FLASH_READ_ONE_BYTE_N310_N311: {
- int tmpOffset = p.readInt32();
- int tmpRet = 0;
- tmpRet = SSMReadFlash_One_N310_N311(tmpOffset);
- r->writeInt32(tmpRet);
- break;
- }
- case SSM_FLASH_SAVE_N_BYTES_N310_N311: {
- int i = 0, tmp_offset = 0, tmp_data_len = 0, ret = -1;
-
- tmp_offset = p.readInt32();
- tmp_data_len = p.readInt32();
-
- if (tmp_data_len > 0) {
- data_ptr = new int[tmp_data_len];
-
- if (data_ptr != NULL) {
- for (i = 0; i < tmp_data_len; i++) {
- data_ptr[i] = p.readInt32();
- }
-
- ret = SSMSaveFlash_N_N310_N311(tmp_offset, tmp_data_len, data_ptr);
-
- delete data_ptr;
- data_ptr = NULL;
- }
- }
-
- r->writeInt32(ret);
- break;
- }
- case SSM_FLASH_READ_N_BYTES_N310_N311: {
- int i = 0, tmp_offset = 0, tmp_data_len = 0, ret = -1;
- tmp_offset = p.readInt32();
- tmp_data_len = p.readInt32();
-
- if (tmp_data_len > 0) {
- data_ptr = new int[tmp_data_len];
- if (data_ptr != NULL) {
- ret = SSMReadFlash_N_N310_N311(tmp_offset, tmp_data_len, data_ptr);
- if (ret < 0) {
- tmp_data_len = 0;
- }
- r->writeInt32(tmp_data_len);
- for (i = 0; i < tmp_data_len; i++) {
- r->writeInt32(data_ptr[i]);
- }
- delete data_ptr;
- data_ptr = NULL;
- }
- }
- r->writeInt32(ret);
- break;
- }
- // SSM END
-
- //MISC
- case MISC_PROP_SET: {
- int tmpRet;
- String16 tmp_str16;
- String8 key_str, value_str;
-
- tmp_str16 = p.readString16();
- key_str = String8(tmp_str16);
- tmp_str16 = p.readString16();
- value_str = String8(tmp_str16);
-
- tmpRet = property_set(key_str.string(), value_str.string());
- r->writeInt32(tmpRet);
- break;
- }
- case MISC_PROP_GET: {
- char prop_value[PROPERTY_VALUE_MAX];
- String16 tmp_str16;
- String8 key_str, def_str;
-
- tmp_str16 = p.readString16();
- key_str = String8(tmp_str16);
- tmp_str16 = p.readString16();
- def_str = String8(tmp_str16);
-
- memset(prop_value, '\0', PROPERTY_VALUE_MAX);
- property_get(key_str.string(), prop_value, def_str.string());
- tmp_str16 = String16(prop_value);
-
- r->writeString16(tmp_str16);
- break;
- }
- case MISC_CFG_SET: {
- int tmpRet;
- String16 tmp_str16;
- String8 key_str, value_str;
-
- tmp_str16 = p.readString16();
- key_str = String8(tmp_str16);
- tmp_str16 = p.readString16();
- value_str = String8(tmp_str16);
-
- tmpRet = config_set_str("TV", key_str.string(), value_str.string());
- r->writeInt32(tmpRet);
- break;
- }
- case MISC_CFG_GET: {
- const char *prop_value;
- String16 tmp_str16;
- String8 key_str, def_str;
-
- tmp_str16 = p.readString16();
- key_str = String8(tmp_str16);
- tmp_str16 = p.readString16();
- def_str = String8(tmp_str16);
-
- prop_value = config_get_str("TV", key_str.string(), def_str.string());
- tmp_str16 = String16(prop_value);
-
- r->writeString16(tmp_str16);
- break;
- }
- case MISC_READ_ADC_VAL: {
- int tmpChanNum = p.readInt32();
- int tmpRet = 0;
- tmpRet = ReadADCSpecialChannelValue(tmpChanNum);
- r->writeInt32(tmpRet);
- break;
- }
- case MISC_SET_WDT_USER_PET: {
- int counter = p.readInt32();
- int ret = TvMisc_SetUserCounter(counter);
- r->writeInt32(ret);
- break;
- }
- case MISC_SET_WDT_USER_COUNTER: {
- int counter_time_out = p.readInt32();
- int ret = TvMisc_SetUserCounterTimeOut(counter_time_out);
- r->writeInt32(ret);
- break;
- }
- case MISC_SET_WDT_USER_PET_RESET_ENABLE: {
- int enable = p.readInt32();
- int ret = TvMisc_SetUserPetResetEnable(enable);
- r->writeInt32(ret);
- break;
- }
- case MISC_GET_TV_API_VERSION: {
- const char *tmp_str8;
- String16 tmp_str16;
-
- // write tvapi version info
- tmp_str8 = tvservice_get_git_branch_info();
- tmp_str16 = String16(tmp_str8);
- r->writeString16(tmp_str16);
-
- tmp_str8 = tvservice_get_git_version_info();
- tmp_str16 = String16(tmp_str8);
- r->writeString16(tmp_str16);
-
- tmp_str8 = tvservice_get_last_chaned_time_info();
- tmp_str16 = String16(tmp_str8);
- r->writeString16(tmp_str16);
-
- tmp_str8 = tvservice_get_build_time_info();
- tmp_str16 = String16(tmp_str8);
- r->writeString16(tmp_str16);
-
- tmp_str8 = tvservice_get_build_name_info();
- tmp_str16 = String16(tmp_str8);
- r->writeString16(tmp_str16);
- break;
- }
- case MISC_GET_DVB_API_VERSION: {
- const char *tmp_str8;
- String16 tmp_str16;
-
- // write dvb version info
- tmp_str8 = dvb_get_git_branch_info();
- tmp_str16 = String16(tmp_str8);
- r->writeString16(tmp_str16);
-
- tmp_str8 = dvb_get_git_version_info();
- tmp_str16 = String16(tmp_str8);
- r->writeString16(tmp_str16);
-
- tmp_str8 = dvb_get_last_chaned_time_info();
- tmp_str16 = String16(tmp_str8);
- r->writeString16(tmp_str16);
-
- tmp_str8 = dvb_get_build_time_info();
- tmp_str16 = String16(tmp_str8);
- r->writeString16(tmp_str16);
-
- tmp_str8 = dvb_get_build_name_info();
- tmp_str16 = String16(tmp_str8);
- r->writeString16(tmp_str16);
-
- break;
- }
- case MISC_SERIAL_SWITCH: {
- int dev_id = p.readInt32();
- int switch_val = p.readInt32();
- int ret = mpTv->SetSerialSwitch(dev_id, switch_val);
- r->writeInt32(ret);
- break;
- }
- case MISC_SERIAL_SEND_DATA: {
- int i = 0, tmp_buf_size = 0, ret = 0;
-
- int dev_id = p.readInt32();
-
- tmp_buf_size = p.readInt32();
- if (tmp_buf_size > sizeof(tmp_uc_buf)) {
- tmp_buf_size = sizeof(tmp_uc_buf);
- }
-
- for (i = 0; i < tmp_buf_size; i++) {
- tmp_uc_buf[i] = p.readInt32() & 0xFF;
- }
-
- ret = mpTv->SendSerialData(dev_id, tmp_buf_size, tmp_uc_buf);
- r->writeInt32(ret);
- break;
- }
- case MISC_CHANNEL_EXPORT: {
- LOGD("MISC_CHANNEL_EXPORT");
- int ret = 0;
- String16 tmp_str16;
- String8 tmp_str;
-
- tmp_str16 = p.readString16();
- tmp_str = String8(tmp_str16);
-
- ret = mpTv->ChannelExport(tmp_str.string());
- r->writeInt32(ret);
- break;
- }
- case MISC_CHANNEL_IMPORT: {
- LOGD("MISC_CHANNEL_IMPORT");
- String16 tmp_str16;
- String8 tmp_str;
-
- tmp_str16 = p.readString16();
- tmp_str = String8(tmp_str16);
- int ret = 0;
- ret = mpTv->ChannelImport(tmp_str.string());
- r->writeInt32(ret);
- break;
- }
- case MISC_GET_PROJECT_INFO: {
- String16 tmp_str16;
- project_info_t tmpInfo;
-
- if (mpTv->Tv_GetProjectInfo(&tmpInfo) < 0) {
- strcpy(tmpInfo.version, "UNKOWN");
- strcpy(tmpInfo.panel_type, "UNKOWN");
- strcpy(tmpInfo.panel_outputmode, "UNKOWN");
- strcpy(tmpInfo.panel_rev, "UNKOWN");
- strcpy(tmpInfo.panel_name, "UNKOWN");
- strcpy(tmpInfo.amp_curve_name, "UNKOWN");
- }
-
- r->writeString16(String16(tmpInfo.version));
- r->writeString16(String16(tmpInfo.panel_type));
- r->writeString16(String16(tmpInfo.panel_outputmode));
- r->writeString16(String16(tmpInfo.panel_rev));
- r->writeString16(String16(tmpInfo.panel_name));
- r->writeString16(String16(tmpInfo.amp_curve_name));
- break;
- }
- case MISC_GET_PLATFORM_TYPE: {
- int ret = mpTv->Tv_GetPlatformType();
- r->writeInt32(ret);
- break;
- }
- //MISC END
-
- // EXTAR
- case DELETE_DIR_FILES: {
- String16 strPath = p.readString16();
- if (strPath.size() <= 0) {
- r->writeInt32(-1);
- break;
- }
- String8 strP8 = String8(strPath);
- int tmp_flag = p.readInt32();
- int ret = TvMisc_DeleteDirFiles(strP8.string(), tmp_flag);
- r->writeInt32(ret);
- break;
- }
- case ATV_GET_CURRENT_PROGRAM_ID: {
- int atvLastProgramId = mpTv->getATVProgramID();
- r->writeInt32(atvLastProgramId);
- break;
- }
- case DTV_GET_CURRENT_PROGRAM_ID: {
- int dtvLastProgramId = mpTv->getDTVProgramID();
- r->writeInt32(dtvLastProgramId);
- break;
- }
- case ATV_SAVE_PROGRAM_ID: {
- int progID = p.readInt32();
- int retCnt = 0;
- mpTv->saveATVProgramID(progID);
- r->writeInt32(retCnt);
- break;
- }
- case ATV_GET_MIN_MAX_FREQ: {
- int min, max;
- int tmpRet = mpTv->getATVMinMaxFreq(&min, &max);
- r->writeInt32(min);
- r->writeInt32(max);
- r->writeInt32(tmpRet);
- break;
- }
- case DTV_GET_SCAN_FREQUENCY_LIST: {
- Vector<sp<CTvChannel> > out;
- int tmpRet = CTvRegion::getChannelListByName("CHINA,Default DTMB ALL", out);
- r->writeInt32(out.size());
- for (int i = 0; i < out.size(); i++) {
- r->writeInt32(out[i]->getID());
- r->writeInt32(out[i]->getFrequency());
- }
- r->writeInt32(tmpRet);
- break;
- }
- case DTV_GET_CHANNEL_INFO: {
- int dbID = p.readInt32();
- channel_info_t chan_info;
- int ret = mpTv->getChannelInfoBydbID(dbID, chan_info);
- r->writeInt32(chan_info.freq);
- r->writeInt32(chan_info.uInfo.dtvChanInfo.strength);
- r->writeInt32(chan_info.uInfo.dtvChanInfo.quality);
- r->writeInt32(chan_info.uInfo.dtvChanInfo.ber);
- r->writeInt32(ret);
- break;
- }
- case ATV_GET_CHANNEL_INFO: {
- int dbID = p.readInt32();
- channel_info_t chan_info;
- int ret = mpTv->getChannelInfoBydbID(dbID, chan_info);
- r->writeInt32(chan_info.freq);
- r->writeInt32(chan_info.uInfo.atvChanInfo.finefreq);
- r->writeInt32(chan_info.uInfo.atvChanInfo.videoStd);
- r->writeInt32(chan_info.uInfo.atvChanInfo.audioStd);
- r->writeInt32(chan_info.uInfo.atvChanInfo.isAutoStd);
- r->writeInt32(ret);
- break;
- }
- case ATV_SCAN_MANUAL: {
- int tmpRet = 0;
- int startFreq = p.readInt32();
- int endFreq = p.readInt32();
- int videoStd = p.readInt32();
- int audioStd = p.readInt32();
- tmpRet = mpTv->atvMunualScan(startFreq, endFreq, videoStd, audioStd);
- mTvService->mpScannerClient = this;
- r->writeInt32(tmpRet);
- break;
- }
- case ATV_SCAN_MANUAL_BY_NUMBER: {
- int tmpRet = 0;
- int startFreq = p.readInt32();
- int endFreq = p.readInt32();
- int videoStd = p.readInt32();
- int audioStd = p.readInt32();
- int storeType = p.readInt32();
- int currentNum = p.readInt32();
- tmpRet = mpTv->atvMunualScan(startFreq, endFreq, videoStd, audioStd, storeType, currentNum);
- mTvService->mpScannerClient = this;
- r->writeInt32(tmpRet);
- break;
- }
-
- case ATV_SCAN_AUTO: {
- int tmpRet = 0;
- LOGD("%s, atv auto scan!!!\n", "TV");
- int videoStd = p.readInt32();
- int audioStd = p.readInt32();
- int searchType = p.readInt32();
- tmpRet = mpTv->atvAutoScan(videoStd, audioStd, searchType);
- mTvService->mpScannerClient = this;
- r->writeInt32(tmpRet);
- break;
- }
- case DTV_SCAN_MANUAL: {
- int tmpRet = 0;
- int freq = p.readInt32();
- tmpRet = mpTv->dtvManualScan(freq, freq);
- mTvService->mpScannerClient = this;
- r->writeInt32(tmpRet);
- break;
- }
- case DTV_SCAN_MANUAL_BETWEEN_FREQ: {
- int tmpRet = 0;
- int beginFreq = p.readInt32();
- int endFreq = p.readInt32();
- int modulation = p.readInt32();
- tmpRet = mpTv->dtvManualScan(beginFreq, endFreq, modulation);
- mTvService->mpScannerClient = this;
- r->writeInt32(tmpRet);
- break;
- }
- case DTV_SCAN_AUTO: {
- int tmpRet = 0;
- tmpRet = mpTv->dtvAutoScan();
- mTvService->mpScannerClient = this;
- r->writeInt32(tmpRet);
- break;
- }
- case DTV_SCAN_AUTO_ATSC: {
- int tmpRet = 0;
- int attenna = p.readInt32();
- int vstd = p.readInt32();
- int astd = p.readInt32();
- tmpRet = mpTv->dtvAutoScanAtscLock(attenna, vstd, astd);
- mTvService->mpScannerClient = this;
- r->writeInt32(tmpRet);
- break;
- }
- case TV_SUBTITLE_DRAW_END: {
- int tmpRet = 0;
- //if(pSub)pSub->lock.unlock();
- r->writeInt32(tmpRet);
- break;
- }
- case STOP_PROGRAM_PLAY: {
- int tmpRet = -1;
- tmpRet = mpTv->stopPlayingLock();
- r->writeInt32(tmpRet);
- break;
- }
- case DTV_TEST_1: {
- // int progid = p.readInt32();
- //CTvProgram prog;
- // int ret = CTvProgram::selectByID(progid, prog);
- //CTvEvent ev;
- //ret = ev.getProgPresentEvent(prog.getSrc(), prog.getID(), mpTv->getTvTime(), ev);
- //r->writeString16(String16(ev.getName()));
- break;
- }
- case DTV_TEST_2: {
- //int cmd = p.readInt32();
- //CTvDatabase::GetTvDb()->importXmlToDB("/etc/tv_default.xml");
- //r->writeString16(String16("xml"));
- break;
- }
-
- case TV_CLEAR_ALL_PROGRAM: {
- int tmpRet = 0;
- int arg0 = p.readInt32();
-
- tmpRet = mpTv->clearAllProgram(arg0);
- mTvService->mpScannerClient = this;
- r->writeInt32(tmpRet);
- break;
- }
-
- case GET_DISPLAY_RESOLUTION_CONFIG: {
- int tmpRet = 0;
- tmpRet = mpTv->GetDisplayResolutionConfig();
- r->writeInt32(tmpRet);
- break;
- }
-
- case GET_DISPLAY_RESOLUTION_INFO: {
- int tmpRet = 0;
- tmpRet = mpTv->GetDisplayResolutionInfo();
- r->writeInt32(tmpRet);
- break;
- }
-
- case HDMIRX_CEC_SEND_CUSTOM_MESSAGE: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- tmp_buf_size = p.readInt32();
- for (i = 0; i < tmp_buf_size; i++) {
- tmp_uc_buf[i] = p.readInt32();
- }
-
- int tmpRet = 0;
- tmpRet = mpTv->SendHDMIRxCECCustomMessage(tmp_uc_buf);
- r->writeInt32(tmpRet);
- break;
- }
-
- case HDMIRX_CEC_SEND_CUSTOM_WAIT_REPLY_MESSAGE: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- int WaitCmd = 0, timeout = 0;
- tmp_buf_size = p.readInt32();
- for (i = 0; i < tmp_buf_size; i++) {
- tmp_uc_buf[i] = p.readInt32();
- }
-
- WaitCmd = p.readInt32();
- timeout = p.readInt32();
-
- int tmpRet = 0;
- tmpRet = mpTv->SendHDMIRxCECCustomMessageAndWaitReply(tmp_uc_buf, tmp_uc_buf2, WaitCmd, timeout);
-
- r->writeInt32(tmpRet);
- if (tmpRet > 0) {
- for (i = 0; i < tmpRet; i++) {
- r->writeInt32(tmp_uc_buf2[i]);
- }
- }
-
- r->writeInt32(tmpRet);
- break;
- }
-
- case HDMIRX_CEC_SEND_BROADCAST_STANDBY_MESSAGE: {
- int tmpRet = 0;
- tmpRet = mpTv->SendHDMIRxCECBoradcastStandbyMessage();
- r->writeInt32(tmpRet);
- break;
- }
-
- case HDMIRX_CEC_SEND_GIVE_CEC_VERSION_MESSAGE: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- int sourceinput = p.readInt32();
- LOGD("HDMIRX_CEC_SEND_GIVE_CEC_VERSION_MESSAGE: sourceinput = %x", sourceinput);
- tmp_buf_size = mpTv->SendHDMIRxCECGiveCECVersionMessage((tv_source_input_t)sourceinput, tmp_uc_buf);
- r->writeInt32(tmp_buf_size);
- for (i = 0; i < tmp_buf_size; i++) {
- r->writeInt32(tmp_uc_buf[i]);
- }
- r->writeInt32(tmp_buf_size);
- break;
- }
-
- case HDMIRX_CEC_SEND_GIVE_DEV_VENDOR_ID_MESSAGE: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- int sourceinput = p.readInt32();
- LOGD("HDMIRX_CEC_SEND_GIVE_DEV_VENDOR_ID_MESSAGE: sourceinput = %x", sourceinput);
- tmp_buf_size = mpTv->SendHDMIRxCECGiveDeviceVendorIDMessage((tv_source_input_t)sourceinput, tmp_uc_buf);
- r->writeInt32(tmp_buf_size);
- for (i = 0; i < tmp_buf_size; i++) {
- r->writeInt32(tmp_uc_buf[i]);
- }
- r->writeInt32(tmp_buf_size);
- break;
- }
-
- case HDMIRX_CEC_SEND_GIVE_OSD_NAME_MESSAGE: {
- int i = 0, tmp_buf_size = 0, ret = 0;
- int sourceinput = p.readInt32();
- LOGD("HDMIRX_CEC_SEND_GIVE_OSD_NAME_MESSAGE: sourceinput = %x", sourceinput);
- tmp_buf_size = mpTv->SendHDMIRxCECGiveOSDNameMessage((tv_source_input_t)sourceinput, tmp_uc_buf);
- r->writeInt32(tmp_buf_size);
- for (i = 0; i < tmp_buf_size; i++) {
- r->writeInt32(tmp_uc_buf[i]);
- }
- r->writeInt32(tmp_buf_size);
- break;
- }
-
- case GET_HDMI_KSV_INFO: {
- int tmpRet = 0;
- int ksv_data[2] = {0, 0};
- tmpRet = mpTv->GetHdmiHdcpKeyKsvInfo(ksv_data);
- r->writeInt32(tmpRet);
- r->writeInt32(ksv_data[0]);
- r->writeInt32(ksv_data[1]);
- break;
- }
-
- case FACTORY_FBC_UPGRADE: {
- String16 tmpName = p.readString16();
- String8 strName = String8(tmpName);
- sprintf((char *)tmp_uc_buf, "%s", strName.string());
- int mode = p.readInt32();
- int upgrade_blk_size = p.readInt32();
- int ret = mpTv->StartUpgradeFBC((char *)tmp_uc_buf, mode, upgrade_blk_size);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_BRIGHTNESS: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Brightness(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_BRIGHTNESS: {
- int ret = mpTv->Tv_FactoryGet_FBC_Brightness();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_CONTRAST: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Contrast(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_CONTRAST: {
- int ret = mpTv->Tv_FactoryGet_FBC_Contrast();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_SATURATION: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Saturation(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_SATURATION: {
- int ret = mpTv->Tv_FactoryGet_FBC_Saturation();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_HUE: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_HueColorTint(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_HUE: {
- int ret = mpTv->Tv_FactoryGet_FBC_HueColorTint();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_BACKLIGHT: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Backlight(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_BACKLIGHT: {
- int ret = mpTv->Tv_FactoryGet_FBC_Backlight();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_FBC_SET_BACKLIGHT_N360: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Backlight_N360(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_BACKLIGHT_N360: {
- int ret = mpTv->Tv_FactoryGet_FBC_Backlight_N360();
- r->writeInt32(ret);
- break;
- }
- case FACTROY_FBC_SET_LIGHT_SENSOR_STATUS_N310: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_LightSensor_Status_N310(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTROY_FBC_GET_LIGHT_SENSOR_STATUS_N310: {
- int ret = mpTv->Tv_FactoryGet_FBC_LightSensor_Status_N310();
- r->writeInt32(ret);
- break;
- }
- case FACTROY_FBC_SET_DREAM_PANEL_STATUS_N310: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Dream_Panel_Status_N310(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTROY_FBC_GET_DREAM_PANEL_STATUS_N310: {
- int ret = mpTv->Tv_FactoryGet_FBC_Dream_Panel_Status_N310();
- r->writeInt32(ret);
- break;
- }
- case FACTROY_FBC_SET_MULT_PQ_STATUS_N310: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_MULT_PQ_Status_N310(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTROY_FBC_GET_MULT_PQ_STATUS_N310: {
- int ret = mpTv->Tv_FactoryGet_FBC_MULT_PQ_Status_N310();
- r->writeInt32(ret);
- break;
- }
- case FACTROY_FBC_SET_MEMC_STATUS_N310: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_MEMC_Status_N310(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTROY_FBC_GET_MEMC_STATUS_N310: {
- int ret = mpTv->Tv_FactoryGet_FBC_MEMC_Status_N310();
- r->writeInt32(ret);
- break;
- }
-
-
- case FACTORY_FBC_SET_BACKLIGHT_EN : {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_backlight_onoff(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_BACKLIGHT_EN: {
- int ret = mpTv->Tv_FactoryGet_FBC_backlight_onoff();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_LVDS_SSG: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_LVDS_SSG_Set(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_ELEC_MODE: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_ELEC_MODE(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_ELEC_MODE: {
- int ret = mpTv->Tv_FactoryGet_FBC_ELEC_MODE();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_PIC_MODE: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Picture_Mode(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_PIC_MODE: {
- int ret = mpTv->Tv_FactoryGet_FBC_Picture_Mode();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_TEST_PATTERN: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Set_Test_Pattern(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_TEST_PATTERN: {
- int ret = mpTv->Tv_FactoryGet_FBC_Get_Test_Pattern();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_GAIN_RED: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Gain_Red(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_GAIN_RED: {
- int ret = mpTv->Tv_FactoryGet_FBC_Gain_Red();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_GAIN_GREEN: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Gain_Green(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_GAIN_GREEN: {
- int ret = mpTv->Tv_FactoryGet_FBC_Gain_Green();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_GAIN_BLUE: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Gain_Blue(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_GAIN_BLUE: {
- int ret = mpTv->Tv_FactoryGet_FBC_Gain_Blue();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_OFFSET_RED: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Offset_Red(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_OFFSET_RED: {
- int ret = mpTv->Tv_FactoryGet_FBC_Offset_Red();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_OFFSET_GREEN: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Offset_Green(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_OFFSET_GREEN: {
- int ret = mpTv->Tv_FactoryGet_FBC_Offset_Green();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_OFFSET_BLUE: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_Offset_Blue(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_OFFSET_BLUE: {
- int ret = mpTv->Tv_FactoryGet_FBC_Offset_Blue();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_COLORTEMP_MODE: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_ColorTemp_Mode(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_COLORTEMP_MODE: {
- int ret = mpTv->Tv_FactoryGet_FBC_ColorTemp_Mode();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_COLORTEMP_MODE_N360: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_ColorTemp_Mode_N360(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_COLORTEMP_MODE_N360: {
- int ret = mpTv->Tv_FactoryGet_FBC_ColorTemp_Mode_N360();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_SET_WB_INIT: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySet_FBC_WB_Initial(value);
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_WB_INIT: {
- int ret = mpTv->Tv_FactoryGet_FBC_WB_Initial();
- r->writeInt32(ret);
- break;
- }
-
- case FACTORY_FBC_GET_MAINCODE_VERSION: {
- char sw_version[64];
- char build_time[64];
- char git_version[64];
- char git_branch[64];
- char build_name[64];
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_FBC_MAINCODE_Version(COMM_DEV_SERIAL, sw_version, build_time, git_version, git_branch, build_name);
- r->writeString16(String16(sw_version));
- r->writeString16(String16(build_time));
- r->writeString16(String16(git_version));
- r->writeString16(String16(git_branch));
- r->writeString16(String16(build_name));
- } else {
- r->writeString16(String16("No FBC"));
- r->writeString16(String16("No FBC"));
- r->writeString16(String16("No FBC"));
- r->writeString16(String16("No FBC"));
- r->writeString16(String16("No FBC"));
- }
- break;
- }
- case FACTORY_SET_SN: {
- char StrFactSN[64] = {0};
- String16 strTemFactorySn = p.readString16();
- String8 strFactorySn = String8(strTemFactorySn);
- sprintf((char *)StrFactSN, "%s", strFactorySn.string());
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- int iRet = fbcIns->cfbc_Set_FBC_Factory_SN(COMM_DEV_SERIAL, (const char *)StrFactSN);
- r->writeInt32(iRet);
- } else {
- r->writeInt32(-1);
- }
- break;
- }
- case FACTORY_GET_SN: {
- char factorySerialNumber[64] = {0};
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_FBC_Factory_SN(COMM_DEV_SERIAL, factorySerialNumber);
- r->writeString16(String16(factorySerialNumber));
- } else {
- r->writeString16(String16("No FBC"));
- }
- break;
- }
- case FACTORY_FBC_PANEL_GET_INFO: {
- char panel_model[64];
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_FBC_Get_PANel_INFO(COMM_DEV_SERIAL, panel_model);
- r->writeString16(String16(panel_model));
- } else {
- r->writeString16(String16(""));
- }
- break;
- }
- case FACTORY_FBC_PANEL_POWER_SWITCH: {
- int value = p.readInt32();
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- int ret = fbcIns->cfbc_Set_FBC_panel_power_switch(COMM_DEV_SERIAL, value);
- r->writeInt32(ret);
- } else {
- r->writeInt32(-1);
- }
- break;
- }
- case FACTORY_FBC_PANEL_SUSPEND: {
- int value = p.readInt32();
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- int ret = fbcIns->cfbc_Set_FBC_suspend(COMM_DEV_SERIAL, value);
- r->writeInt32(ret);
- } else {
- r->writeInt32(-1);
- }
- break;
- }
- case FACTORY_FBC_PANEL_USER_SETTING_DEFAULT: {
- int value = p.readInt32();
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- int ret = fbcIns->cfbc_Set_FBC_User_Setting_Default(COMM_DEV_SERIAL, value);
- r->writeInt32(ret);
- } else {
- r->writeInt32(-1);
- }
- break;
- }
- case FACTORY_FBC_POWER_REBOOT: {
- int value = p.readInt32();
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- int ret = fbcIns->cfbc_SendRebootToUpgradeCmd(COMM_DEV_SERIAL, value);
- r->writeInt32(ret);
- } else {
- r->writeInt32(-1);
- }
- break;
- }
- case FACTORY_FBC_SEND_KEY_TO_FBC: {
- int keyCode = p.readInt32();
- int param = p.readInt32();
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- int ret = fbcIns->cfbc_FBC_Send_Key_To_Fbc(COMM_DEV_SERIAL, keyCode, param);
- r->writeInt32(ret);
- } else {
- r->writeInt32(-1);
- }
- break;
- }
- case FACTORY_WHITE_BALANCE_SET_GAIN_RED: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySetWhiteBalanceRedGain(source_type, colortemp_mode, value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_GET_GAIN_RED: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetWhiteBalanceRedGain(source_type, colortemp_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_SET_GAIN_GREEN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySetWhiteBalanceGreenGain(source_type, colortemp_mode, value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_GET_GAIN_GREEN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetWhiteBalanceGreenGain(source_type, colortemp_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_SET_GAIN_BLUE: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySetWhiteBalanceBlueGain(source_type, colortemp_mode, value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_GET_GAIN_BLUE: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetWhiteBalanceBlueGain(source_type, colortemp_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_SET_OFFSET_RED: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySetWhiteBalanceRedOffset(source_type, colortemp_mode, value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_GET_OFFSET_RED: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetWhiteBalanceRedOffset(source_type, colortemp_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_SET_OFFSET_GREEN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySetWhiteBalanceGreenOffset(source_type, colortemp_mode, value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_GET_OFFSET_GREEN: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetWhiteBalanceGreenOffset(source_type, colortemp_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_SET_OFFSET_BLUE: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySetWhiteBalanceBlueOffset(source_type, colortemp_mode, value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_GET_OFFSET_BLUE: {
- int source_type = p.readInt32();
- int colortemp_mode = p.readInt32();
- int ret = mpTv->Tv_FactoryGetWhiteBalanceBlueOffset(source_type, colortemp_mode);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_GET_COLOR_TMP: {
- int source_type = p.readInt32();
- int ret = mpTv->Tv_FactoryGetWhiteBalanceColorTempMode(source_type);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_SET_COLOR_TMP: {
- int source_type = p.readInt32();
- int Tempmode = p.readInt32();
- int is_save = p.readInt32();
- int ret = mpTv->Tv_FactorySetWhiteBalanceColorTempMode(source_type, Tempmode, is_save);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_SAVE_PRAMAS: {
- int source_type = p.readInt32();
- int mode = p.readInt32();
- int r_gain = p.readInt32();
- int g_gain = p.readInt32();
- int b_gain = p.readInt32();
- int r_offset = p.readInt32();
- int g_offset = p.readInt32();
- int b_offset = p.readInt32();
- int ret = mpTv->Tv_FactorySaveWhiteBalancePramas(source_type, mode, r_gain, g_gain, b_gain, r_offset, g_offset, b_offset);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_OPEN_GRAY_PATTERN: {
- int ret = mpTv->Tv_FactoryOpenWhiteBalanceGrayPattern();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_CLOSE_GRAY_PATTERN: {
- int ret = mpTv->Tv_FactoryCloseWhiteBalanceGrayPattern();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_SET_GRAY_PATTERN: {
- int value = p.readInt32();
- int ret = mpTv->Tv_FactorySetWhiteBalanceGrayPattern(value);
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_GET_GRAY_PATTERN: {
- int ret = mpTv->Tv_FactoryGetWhiteBalanceGrayPattern();
- r->writeInt32(ret);
- break;
- }
- case FACTORY_WHITE_BALANCE_GET_ALL_PRAMAS: {
- int Tempmode = p.readInt32();
- int ret = -1;
- tcon_rgb_ogo_t params;
- if (GetPlatformHaveFBCFlag() == 0) { //T868
- ret = mpTv->GetColorTemperatureParams((vpp_color_temperature_mode_t)Tempmode, &params);
- } else { //T866
- ret = mpTv->Tv_FactoryWhiteBalanceGetAllParams(Tempmode, &params);
- }
- r->writeInt32(ret);
- r->writeInt32(params.r_gain);
- r->writeInt32(params.g_gain);
- r->writeInt32(params.b_gain);
- r->writeInt32(params.r_post_offset);
- r->writeInt32(params.g_post_offset);
- r->writeInt32(params.b_post_offset);
- }
- case STOP_SCAN: {
- mpTv->stopScanLock();
- break;
- }
- case DTV_GET_SNR: {
- int tmpRet = 0;
- tmpRet = mpTv->getFrontendSNR();
- r->writeInt32(tmpRet);
- break;
- }
- case DTV_GET_BER: {
- int tmpRet = 0;
- tmpRet = mpTv->getFrontendBER();
- r->writeInt32(tmpRet);
- break;
- }
- case DTV_GET_STRENGTH: {
- int tmpRet = 0;
- tmpRet = mpTv->getFrontendSignalStrength();
- r->writeInt32(tmpRet);
- break;
- }
- case DTV_GET_AUDIO_TRACK_NUM: {
- int programId = p.readInt32();
- int retCnt = 0;
- retCnt = mpTv->getAudioTrackNum(programId);
- r->writeInt32(retCnt);
- break;
- }
- case DTV_GET_AUDIO_TRACK_INFO: {
- int progId = p.readInt32();
- int aIdx = p.readInt32();
- int aFmt = -1;
- int iRet = -1;
- String8 lang;
- iRet = mpTv->getAudioInfoByIndex(progId, aIdx, &aFmt, lang);
- r->writeInt32(aFmt);
- r->writeString16(String16(lang));
- break;
- }
- case DTV_SWITCH_AUDIO_TRACK: {
- int progId = p.readInt32();
- int aTackIdx = p.readInt32();
- int ret = -1;
- ret = mpTv->switchAudioTrack(progId, aTackIdx);
- r->writeInt32(ret);
- if (0 == ret) {
- CTvProgram prog;
- prog.setCurrAudioTrackIndex(progId, aTackIdx);
- }
- break;
- }
- case DTV_GET_CURR_AUDIO_TRACK_INDEX: {
- int currAduIdx = -1;
- int progId = p.readInt32();
- CTvProgram prog;
- CTvProgram::selectByID(progId, prog);
- currAduIdx = prog.getCurrAudioTrackIndex();
- r->writeInt32(currAduIdx);
- break;
- }
- case DTV_SET_AUDIO_CHANNEL_MOD: {
- int audioChannelIdx = p.readInt32();
- mpTv->setAudioChannel(audioChannelIdx);
- break;
- }
- case DTV_GET_AUDIO_CHANNEL_MOD: {
- int currChannelMod;
- currChannelMod = mpTv->getAudioChannel();
- r->writeInt32(currChannelMod);
- break;
- }
- case DTV_GET_CUR_FREQ: {
- int progId = p.readInt32();
- int freq = 0;
- int iRet = -1;
- CTvProgram prog;
- CTvChannel channel;
-
- iRet = CTvProgram::selectByID(progId, prog);
- if (0 != iRet) return -1;
- prog.getChannel(channel);
- freq = channel.getFrequency();
- r->writeInt32(freq);
- break;
- }
- case DTV_GET_EPG_UTC_TIME: {
- int iRet = -1;
- int utcTime = 0;
-
- utcTime = mpTv->getTvTime();
-
- r->writeInt32(utcTime);
- break;
- }
- case DTV_GET_EPG_INFO_POINT_IN_TIME: {
- int progid = p.readInt32();
- int utcTime = p.readInt32();
- CTvProgram prog;
- int ret = CTvProgram::selectByID(progid, prog);
- CTvEvent ev;
- ret = ev.getProgPresentEvent(prog.getSrc(), prog.getID(), utcTime, ev);
- r->writeString16(String16(ev.getName()));
- r->writeString16(String16(ev.getDescription()));
- r->writeString16(String16(ev.getExtDescription()));
- r->writeInt32(ev.getStartTime());
- r->writeInt32(ev.getEndTime());
- r->writeInt32(ev.getSubFlag());
- r->writeInt32(ev.getEventId());
- break;
- }
- case DTV_GET_EPG_INFO_DURATION: {
- int iRet = -1;
- int iObOutSize = 0;
- Vector<sp<CTvEvent> > epgOut;
- int progid = p.readInt32();
- int iUtcStartTime = p.readInt32();
- int iDurationTime = p.readInt32();
- CTvProgram prog;
- CTvEvent ev;
- iRet = CTvProgram::selectByID(progid, prog);
- if (0 != iRet) {
- break;
- }
- iRet = ev.getProgScheduleEvents(prog.getSrc(), prog.getID(), iUtcStartTime, iDurationTime, epgOut);
- if (0 != iRet) {
- break;
- }
- iObOutSize = epgOut.size();
- if (0 == iObOutSize) {
- break;
- }
-
- r->writeInt32(iObOutSize);
- for (int i = 0; i < iObOutSize; i ++) {
- r->writeString16(String16(epgOut[i]->getName()));
- r->writeString16(String16(epgOut[i]->getDescription()));
- r->writeString16(String16(ev.getExtDescription()));
- r->writeInt32(epgOut[i]->getStartTime());
- r->writeInt32(epgOut[i]->getEndTime());
- r->writeInt32(epgOut[i]->getSubFlag());
- r->writeInt32(epgOut[i]->getEventId());
- }
- break;
- }
- case DTV_SET_PROGRAM_NAME: {
- CTvProgram prog;
- int progid = p.readInt32();
- String16 tmpName = p.readString16();
- String8 strName = String8(tmpName);
- prog.updateProgramName(progid, strName);
- break;
- }
- case DTV_SET_PROGRAM_SKIPPED: {
- CTvProgram prog;
- int progid = p.readInt32();
- bool bSkipFlag = p.readInt32();
- prog.setSkipFlag(progid, bSkipFlag);
- break;
- }
- case DTV_SET_PROGRAM_FAVORITE: {
- CTvProgram prog;
- int progid = p.readInt32();
- bool bFavorite = p.readInt32();
- prog.setFavoriteFlag(progid, bFavorite);
- break;
- }
- case DTV_DETELE_PROGRAM: {
- CTvProgram prog;
- int progid = p.readInt32();
- prog.deleteProgram(progid);
- break;
- }
- case SET_BLACKOUT_ENABLE: {
- int enable = p.readInt32();
- mpTv->setBlackoutEnable(enable);
- break;
- }
- case START_AUTO_BACKLIGHT: {
- mpTv->startAutoBackLight();
- break;
- }
- case STOP_AUTO_BACKLIGHT: {
- mpTv->stopAutoBackLight();
- break;
- }
- case IS_AUTO_BACKLIGHTING: {
- int on = mpTv->getAutoBackLight_on_off();
- r->writeInt32(on);
- break;
- }
- case SSM_READ_BLACKOUT_ENABLE: {
- int enable = mpTv->getSaveBlackoutEnable();
- r->writeInt32(enable);
- break;
- }
- case DTV_SWAP_PROGRAM: {
- CTvProgram prog;
- int firstProgId = p.readInt32();
- int secondProgId = p.readInt32();
- CTvProgram::selectByID(firstProgId, prog);
- int firstChanOrderNum = prog.getChanOrderNum();
- CTvProgram::selectByID(secondProgId, prog);
- int secondChanOrderNum = prog.getChanOrderNum();
- prog.swapChanOrder(firstProgId, firstChanOrderNum, secondProgId, secondChanOrderNum);
- break;
- }
- case DTV_SET_PROGRAM_LOCKED: {
- CTvProgram prog;
- int progid = p.readInt32();
- bool bLocked = p.readInt32();
- prog.setLockFlag(progid, bLocked);
- break;
- }
- case DTV_SET_BOOKING_FLAG: {
- CTvEvent ev;
- int iEvtId = p.readInt32();
- bool iBookFlag = (bool)p.readInt32();
- ev.bookEvent(iEvtId, iBookFlag);
- break;
- }
- case DTV_GET_FREQ_BY_PROG_ID: {
- int freq = 0;
- int progid = p.readInt32();
- CTvProgram prog;
- int ret = CTvProgram::selectByID(progid, prog);
- if (ret != 0) return -1;
- CTvChannel channel;
- prog.getChannel(channel);
- freq = channel.getFrequency();
- r->writeInt32(freq);
- break;
- }
- case DTV_GET_BOOKED_EVENT: {
- CTvBooking tvBook;
- Vector<sp<CTvBooking> > vTvBookOut;
- tvBook.getBookedEventList(vTvBookOut);
- int iObOutSize = vTvBookOut.size();
- if (0 == iObOutSize) {
- break;
- }
- r->writeInt32(iObOutSize);
- for (int i = 0; i < iObOutSize; i ++) {
- r->writeString16(String16(vTvBookOut[i]->getProgName()));
- r->writeString16(String16(vTvBookOut[i]->getEvtName()));
- r->writeInt32(vTvBookOut[i]->getStartTime());
- r->writeInt32(vTvBookOut[i]->getDurationTime());
- r->writeInt32(vTvBookOut[i]->getBookId());
- r->writeInt32(vTvBookOut[i]->getProgramId());
- r->writeInt32(vTvBookOut[i]->getEventId());
- }
- break;
- }
- case SET_FRONTEND_PARA: {
- int ret = -1;
- frontend_para_set_t feParms;
- feParms.mode = (fe_type_t)p.readInt32();
- feParms.freq = p.readInt32();
- feParms.videoStd = (atv_video_std_t)p.readInt32();
- feParms.audioStd = (atv_audio_std_t)p.readInt32();
- feParms.para1 = p.readInt32();
- feParms.para2 = p.readInt32();
- mpTv->resetFrontEndPara(feParms);
- r->writeInt32(ret);
- break;
- }
- case PLAY_PROGRAM: {
- int progid = p.readInt32();
- mpTv->playProgramLock(progid);
- break;
- }
- case GET_PROGRAM_LIST: {
- Vector<sp<CTvProgram> > out;
- int type = p.readInt32();
- int skip = p.readInt32();
- CTvProgram::selectByType(type, skip, out);
- r->writeInt32(out.size());
- for (int i = 0; i < out.size(); i++) {
- r->writeInt32(out[i]->getID());
- r->writeInt32(out[i]->getChanOrderNum());
- r->writeInt32(out[i]->getMajor());
- r->writeInt32(out[i]->getMinor());
- r->writeInt32(out[i]->getProgType());
- r->writeString16(String16(out[i]->getName()));
- r->writeInt32(out[i]->getProgSkipFlag());
- r->writeInt32(out[i]->getFavoriteFlag());
- r->writeInt32(out[i]->getVideo()->getFormat());
- CTvChannel ch;
- out[i]->getChannel(ch);
- r->writeInt32(ch.getDVBTSID());
- r->writeInt32(out[i]->getServiceId());
- r->writeInt32(out[i]->getVideo()->getPID());
- r->writeInt32(out[i]->getVideo()->getPID());
-
- int audioTrackSize = out[i]->getAudioTrackSize();
- r->writeInt32(audioTrackSize);
- for (int j = 0; j < audioTrackSize; j++) {
- r->writeString16(String16(out[i]->getAudio(j)->getLang()));
- r->writeInt32(out[i]->getAudio(j)->getFormat());
- r->writeInt32(out[i]->getAudio(j)->getPID());
- }
- r->writeInt32(ch.getFrequency());
- }
- break;
- }
- case DTV_GET_VIDEO_FMT_INFO: {
- int srcWidth = 0;
- int srcHeight = 0;
- int srcFps = 0;
- int srcInterlace = 0;
- int iRet = -1;
-
- iRet == mpTv->getVideoFormatInfo(&srcWidth, &srcHeight, &srcFps, &srcInterlace);
- r->writeInt32(srcWidth);
- r->writeInt32(srcHeight);
- r->writeInt32(srcFps);
- r->writeInt32(srcInterlace);
- r->writeInt32(iRet);
- }
- break;
-
- case DTV_START_RECORD: {
- char buf[256];
- String16 tmpName = p.readString16();
- String8 strName = String8(tmpName);
- sprintf(buf, "%s", strName.string());
- mpTv->SetRecordFileName(buf);
- mpTv->StartToRecord();
- }
- break;
- case DTV_STOP_RECORD:
- mpTv->StopRecording();
- break;
- case DTV_SET_RECORD_ALL_TS: {
- int sel = p.readInt32();
- mpTv->SetRecCurTsOrCurProgram(sel);
- }
- break;
- case TV_PRINT_DEBUG_INFO:
- mpTv->printDebugInfo();
- break;
- // EXTAR END
- default:
- LOGD("default");
- break;
- }
- return 0;
-}
-
-sp<TvService::Client> TvService::Client::getClientFromCookie(void *user)
-{
- sp<Client> client = 0;
- /*
- TvService *service = static_cast<TvService*> (user);
- if (service != NULL) {
- Mutex::Autolock ourLock(service->mServiceLock);
- if (service->mClient != 0) {
- client = service->mClient.promote();
- if (client == 0) {
- LOGE("getClientFromCookie: client appears to have died");
- service->mClient.clear();
- }
- } else {
- LOGE("getClientFromCookie: got callback but client was NULL");
- }
- }*/
- return client;
-}
-
-void TvService::Client::notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2, void *user)
-{
- LOGD("notifyCallback(%d)", msgType);
-
- sp<Client> client = getClientFromCookie(user);
- if (client == 0) {
- return;
- }
-
- switch (msgType) {
- //case TV_MSG_SHUTTER:
- // ext1 is the dimension of the yuv picture.
- // client->handleShutter((image_rect_type *)ext1);
- // break;
- default:
- sp<ITvClient> c = client->mTvClient;
- if (c != NULL) {
- //c->notifyCallback(msgType, ext1, ext2);
- }
- break;
- }
-
-#if DEBUG_CLIENT_REFERENCES
- if (client->getStrongCount() == 1) {
- LOGE("++++++++++++++++ (NOTIFY CALLBACK) THIS WILL CAUSE A LOCKUP!");
- client->printRefs();
- }
-#endif
-}
-
-int TvService::Client::notifyCallback(const int &msgtype, const Parcel &p)
-{
- mTvClient->notifyCallback(msgtype, p);
- return 0;
-}
-
-status_t TvService::onTransact(uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags)
-{
- // permission checks...
- switch (code) {
- case BnTvService::CONNECT:
- IPCThreadState *ipc = IPCThreadState::self();
- const int pid = ipc->getCallingPid();
- const int self_pid = getpid();
- if (pid != self_pid) {
- // we're called from a different process, do the real check
- /*if (!checkCallingPermission(
- String16("android.permission.TV")))
- {
- const int uid = ipc->getCallingUid();
- LOGE("Permission Denial: "
- "can't use the tv pid=%d, uid=%d", pid, uid);
- return PERMISSION_DENIED;
- }*/
- }
- break;
- }
-
- status_t err = BnTvService::onTransact(code, data, reply, flags);
-
-#if DEBUG_HEAP_LEAKS
- LOGE("+++ onTransact err %d code %d", err, code);
-
- if (err == UNKNOWN_TRANSACTION || err == PERMISSION_DENIED) {
- LOGE("+++ onTransact code %d", code);
-
- CHECK_INTERFACE(ITvService, data, reply);
-
- switch (code) {
- case 1000: {
- if (gWeakHeap != 0) {
- sp<IMemoryHeap> h = gWeakHeap.promote();
- IMemoryHeap *p = gWeakHeap.unsafe_get();
- LOGE("CHECKING WEAK REFERENCE %p (%p)", h.get(), p);
- if (h != 0)
- h->printRefs();
- bool attempt_to_delete = data.readInt32() == 1;
- if (attempt_to_delete) {
- // NOT SAFE!
- LOGE("DELETING WEAK REFERENCE %p (%p)", h.get(), p);
- if (p) delete p;
- }
- return NO_ERROR;
- }
- }
- break;
- default:
- break;
- }
- }
-#endif // DEBUG_HEAP_LEAKS
- return err;
-}
-
+#include <utils/Log.h>
+#include <binder/IServiceManager.h>
+#include <binder/IPCThreadState.h>
+#include <utils/String16.h>
+#include <utils/Errors.h>
+#include <binder/MemoryBase.h>
+#include <binder/MemoryHeapBase.h>
+#include <include/ITvService.h>
+#include <hardware/hardware.h>
+#include "TvService.h"
+#include <cutils/atomic.h>
+#include <cutils/properties.h>
+#include <stdint.h>
+#include <tvconfig/tvconfig.h>
+#include <tvsetting/CTvSetting.h>
+#include <audio/audio_api.h>
+#include <tvutils/tvutils.h>
+#include <version/version.h>
+#include "../include/tvcmd.h"
+#include "tv/CTvLog.h"
+#include <tvdb/CTvRegion.h>
+extern "C" {
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <signal.h>
+#include "make_ext4fs.h"
+#include "am_ver.h"
+}
+#define LOG_TAG "TvService"
+
+#define PICTURE_TIMEOUT seconds(5)
+
+static int getCallingPid()
+{
+ return IPCThreadState::self()->getCallingPid();
+}
+
+void TvService::instantiate(CTv *pTv)
+{
+ defaultServiceManager()->addService(String16("aml.tvserver"), new TvService( pTv));
+}
+
+TvService::TvService(CTv *pTv) :
+ BnTvService()
+{
+ mpStartTvClient = NULL;
+ mpScannerClient = NULL;
+ mUsers = 0;
+ mpTv = pTv;
+ mpTv->setTvObserver(this);
+ mCapVidFrame.setObserver(this);
+ mpTv->OpenTv();
+}
+
+
+TvService::~TvService()
+{
+ mpStartTvClient = NULL;
+ mpScannerClient = NULL;
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ LOGW("some client still connect it!");
+ }
+ }
+ if(mpTv != NULL) {
+ delete mpTv;
+ mpTv = NULL;
+ }
+}
+
+void TvService::onTvEvent(const CTvEv &ev)
+{
+ int type = ev.getEvType();
+ LOGD("TvService::onTvEvent ev type = %d", type);
+ switch(type) {
+ case CTvEv::TV_EVENT_COMMOM: {
+ break;
+ }
+ case CTvEv::TV_EVENT_SCANNER: {
+ CTvScanner::ScannerEvent *pScannerEv = (CTvScanner::ScannerEvent *) (&ev);
+ if(mpScannerClient != NULL) {
+ sp<Client> ScannerClient = mpScannerClient.promote();
+ if(ScannerClient != 0) {
+ Parcel p;
+ p.writeInt32(pScannerEv->mType);
+ p.writeInt32(pScannerEv->mPercent);
+ p.writeInt32(pScannerEv->mTotalChannelCount);
+ p.writeInt32(pScannerEv->mLockedStatus);
+ p.writeInt32(pScannerEv->mChannelNumber);
+ p.writeInt32(pScannerEv->mFrequency);
+ p.writeString16(String16(pScannerEv->mProgramName));
+ p.writeInt32(pScannerEv->mprogramType);
+ p.writeString16(String16(pScannerEv->mMSG));
+ p.writeInt32(pScannerEv->mStrength);
+ p.writeInt32(pScannerEv->mSnr);
+ //
+ p.writeInt32(pScannerEv->mVideoStd);
+ p.writeInt32(pScannerEv->mAudioStd);
+ p.writeInt32(pScannerEv->mIsAutoStd);
+ ScannerClient->notifyCallback(SCAN_EVENT_CALLBACK, p);
+ }
+ }
+ break;
+ }
+ case CTvEv::TV_EVENT_EPG: {
+ CTvEpg::EpgEvent *pEpgEvent = (CTvEpg::EpgEvent *) (&ev);
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ Parcel p;
+ p.writeInt32(pEpgEvent->type);
+ p.writeInt32(pEpgEvent->time);
+ p.writeInt32(pEpgEvent->programID);
+ p.writeInt32(pEpgEvent->channelID);
+ currentClient->getTvClient()->notifyCallback(EPG_EVENT_CALLBACK, p);
+ }
+ }
+ }
+ break;
+ }
+ case CTvEv::TV_EVENT_HDMI_IN_CAP: {
+ CTvScreenCapture::CapEvent *pCapEvt = (CTvScreenCapture::CapEvent *)(&ev);
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ Parcel p;
+ p.writeInt32(pCapEvt->mFrameNum);
+ p.writeInt32(pCapEvt->mFrameSize);
+ p.writeInt32(pCapEvt->mFrameWide);
+ p.writeInt32(pCapEvt->mFrameHeight);
+ currentClient->getTvClient()->notifyCallback(VFRAME_BMP_EVENT_CALLBACK, p);
+ }
+ }
+ }
+ break;
+ }
+ case CTvEv::TV_EVENT_AV_PLAYBACK: {
+ TvEvent::AVPlaybackEvent *pEv = (TvEvent::AVPlaybackEvent *)(&ev);
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ Parcel p;
+ p.writeInt32(pEv->mMsgType);
+ p.writeInt32(pEv->mProgramId);
+ currentClient->getTvClient()->notifyCallback(DTV_AV_PLAYBACK_CALLBACK, p);
+ }
+ }
+ }
+ break;
+ }
+ case CTvEv::TV_EVENT_SIGLE_DETECT: {
+ TvEvent::SignalInfoEvent *pEv = (TvEvent::SignalInfoEvent *)(&ev);
+
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ Parcel p;
+ p.writeInt32(pEv->mTrans_fmt);
+ p.writeInt32(pEv->mFmt);
+ p.writeInt32(pEv->mStatus);
+ p.writeInt32(pEv->mReserved);
+ currentClient->getTvClient()->notifyCallback(SIGLE_DETECT_CALLBACK, p);
+ }
+ }
+ }
+ break;
+ }
+ case CTvEv::TV_EVENT_ADC_CALIBRATION: {
+ TvEvent::ADCCalibrationEvent *pEv = (TvEvent::ADCCalibrationEvent *)(&ev);
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ Parcel p;
+ p.writeInt32(pEv->mState);
+ currentClient->getTvClient()->notifyCallback(ADC_CALIBRATION_CALLBACK, p);
+ }
+ }
+ }
+ break;
+ }
+ case CTvEv::TV_EVENT_VGA: { //VGA
+ TvEvent::VGAEvent *pEv = (TvEvent::VGAEvent *)(&ev);
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ Parcel p;
+ p.writeInt32(pEv->mState);
+ currentClient->getTvClient()->notifyCallback(VGA_CALLBACK, p);
+ }
+ }
+ }
+ break;
+ }
+ case CTvEv::TV_EVENT_SOURCE_CONNECT: {
+ TvEvent::SourceConnectEvent *pEv = (TvEvent::SourceConnectEvent *)(&ev);
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ Parcel p;
+ p.writeInt32(pEv->mSourceInput);
+ p.writeInt32(pEv->connectionState);
+ currentClient->getTvClient()->notifyCallback(SOURCE_CONNECT_CALLBACK, p);
+ }
+ }
+ }
+ break;
+ }
+ case CTvEv::TV_EVENT_HDMIRX_CEC: {
+ TvEvent::HDMIRxCECEvent *pEv = (TvEvent::HDMIRxCECEvent *)(&ev);
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ Parcel p;
+
+ p.writeInt32(pEv->mDataCount);
+ for(int j = 0; j < pEv->mDataCount; j++) {
+ p.writeInt32(pEv->mDataBuf[j]);
+ }
+
+ currentClient->getTvClient()->notifyCallback(HDMIRX_CEC_CALLBACK, p);
+ }
+ }
+ }
+ break;
+ }
+ case CTvEv::TV_EVENT_UPGRADE_FBC: {
+ TvEvent::UpgradeFBCEvent *pEv = (TvEvent::UpgradeFBCEvent *)(&ev);
+
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ Parcel p;
+ p.writeInt32(pEv->mState);
+ p.writeInt32(pEv->param);
+ currentClient->getTvClient()->notifyCallback(UPGRADE_FBC_CALLBACK, p);
+ }
+ }
+ }
+ break;
+ }
+ case CTvEv::TV_EVENT_SERIAL_COMMUNICATION: {
+ TvEvent::SerialCommunicationEvent *pEv = (TvEvent::SerialCommunicationEvent *)(&ev);
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ Parcel p;
+
+ p.writeInt32(pEv->mDevId);
+ p.writeInt32(pEv->mDataCount);
+ for(int j = 0; j < pEv->mDataCount; j++) {
+ p.writeInt32(pEv->mDataBuf[j]);
+ }
+
+ currentClient->getTvClient()->notifyCallback(SERIAL_COMMUNICATION_CALLBACK, p);
+ }
+ }
+ }
+ break;
+ }
+
+ case CTvEv::TV_EVENT_2d4G_HEADSET: {
+ TvEvent::HeadSetOf2d4GEvent *pEv = (TvEvent::HeadSetOf2d4GEvent *)(&ev);
+ LOGD("SendDtvStats status: =%d para2: =%d", pEv->state, pEv->para);
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ Parcel p;
+ p.writeInt32(pEv->state);
+ p.writeInt32(pEv->para);
+ currentClient->getTvClient()->notifyCallback(HEADSET_STATUS_CALLBACK, p);
+ }
+ }
+ }
+ break;
+ }
+
+ default:
+ break;
+ }
+}
+
+sp<ITv> TvService::connect(const sp<ITvClient> &tvClient)
+{
+ int callingPid = getCallingPid();
+ LOGD("TvService::connect E (pid %d, client %p)", callingPid, tvClient->asBinder().get());
+
+ Mutex::Autolock lock(mServiceLock);
+
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ sp<ITvClient> currentTvClient(currentClient->getTvClient());
+ if (tvClient->asBinder() == currentTvClient->asBinder()) {
+ LOGD("TvService::connect X (pid %d, same client %p) is reconnecting...", callingPid, tvClient->asBinder().get());
+ return currentClient;
+ } else {
+ //LOGD("TvService::connect X (pid %d, new client %p) rejected. "
+ // "(old pid %d, old client %p)", callingPid, tvClient->asBinder().get(), currentClient->mClientPid, currentTvClient->asBinder().get());
+ // if (kill(currentClient->mClientPid, 0) == -1 && errno == ESRCH) {
+ // LOGE("The old client is dead!");
+ // }
+ //return client;
+ //return currentClient;
+ continue;
+ }
+ } else {
+ LOGE("client (pid %d) have delete ------------not exist", callingPid);
+ client.clear();
+ m_v_Clients.removeAt(i);
+ client_size--;
+ continue;
+ }
+ }
+ }
+
+ if (mUsers > 0) {
+ LOGE("Still have client, rejected");
+ //return client;
+ }
+ LOGD("TvService::connect X 3");
+ // client = new Client(this, tvClient, callingPid);
+ //mClient = client;
+
+ sp<Client> newclient = new Client(this, tvClient, callingPid, mpTv);
+ m_v_Clients.add(newclient);
+
+#if DEBUG_CLIENT_REFERENCES
+ //client->trackMe(true, true);
+#endif
+ //mCurClient = client;
+ LOGD("TvService::connect X 4");
+ return newclient;
+}
+
+void TvService::removeClient(const sp<ITvClient> &tvClient)
+{
+ int callingPid = getCallingPid();
+
+ Mutex::Autolock lock(mServiceLock);
+
+ int client_size = m_v_Clients.size();
+ wp<Client> client;
+ for(int i = 0; i < client_size; i++) {
+ client = m_v_Clients[i];
+ if (client != 0) {
+ sp<Client> currentClient = client.promote();
+ if (currentClient != 0) {
+ sp<ITvClient> currentTvClient(currentClient->getTvClient());
+ if (tvClient->asBinder() == currentTvClient->asBinder()) {
+ LOGD("find client , and remove it pid = %d, client = %p i=%d", callingPid, tvClient->asBinder().get(), i);
+ client.clear();
+ LOGD("find client , and remove it pid1 ");
+ m_v_Clients.removeAt(i);
+ LOGD("find client , and remove it pid2 ");
+ break;
+ } else {
+ LOGW("removeClient (pid %d): mClient doesn't match!", callingPid);
+ continue;
+ }
+ } else {
+ LOGW("removeclient currentClient == 0 (pid %d)", callingPid);
+ client.clear();
+ m_v_Clients.removeAt(i);
+ client_size--;
+ continue;
+ }
+ } else {
+ LOGW("removeclient client == 0 (pid %d)", callingPid);
+ client.clear();
+ m_v_Clients.removeAt(i);
+ client_size--;
+ continue;
+ }
+ }
+
+ LOGD("removeClient (pid %d) done", callingPid);
+}
+
+void TvService::incUsers()
+{
+ android_atomic_inc(&mUsers);
+}
+
+void TvService::decUsers()
+{
+ android_atomic_dec(&mUsers);
+}
+
+TvService::Client::Client(const sp<TvService> &tvService, const sp<ITvClient> &tvClient, pid_t clientPid, CTv *pTv)
+{
+ int callingPid = getCallingPid();
+ LOGD("Client::Client E (pid %d)", callingPid);
+ mTvService = tvService;
+ mTvClient = tvClient;
+ mClientPid = clientPid;
+ tvService->incUsers();
+ mpTv = pTv;
+ mIsStartTv = false;
+}
+
+status_t TvService::Client::checkPid()
+{
+ int callingPid = getCallingPid();
+ if (mClientPid == callingPid)
+ return NO_ERROR;
+ LOGD("Attempt to use locked tv (client %p) from different process "
+ " (old pid %d, new pid %d)", getTvClient()->asBinder().get(), mClientPid, callingPid);
+ return -EBUSY;
+}
+
+status_t TvService::Client::lock()
+{
+ int callingPid = getCallingPid();
+ LOGD("lock from pid %d (mClientPid %d)", callingPid, mClientPid);
+ Mutex::Autolock _l(mLock);
+ // lock tv to this client if the the tv is unlocked
+ if (mClientPid == 0) {
+ mClientPid = callingPid;
+ return NO_ERROR;
+ }
+ // returns NO_ERROR if the client already owns the tv, -EBUSY otherwise
+ return checkPid();
+}
+
+status_t TvService::Client::unlock()
+{
+ int callingPid = getCallingPid();
+ LOGD("unlock from pid %d (mClientPid %d)", callingPid, mClientPid);
+ Mutex::Autolock _l(mLock);
+ // allow anyone to use tv
+ status_t result = checkPid();
+ if (result == NO_ERROR) {
+ mClientPid = 0;
+ LOGD("clear mTvClient (pid %d)", callingPid);
+ // we need to remove the reference so that when app goes
+ // away, the reference count goes to 0.
+ mTvClient.clear();
+ }
+ return result;
+}
+
+status_t TvService::Client::connect(const sp<ITvClient> &client)
+{
+ int callingPid = getCallingPid();
+ LOGD("Client::connect E (pid %d, client %p)", callingPid, client->asBinder().get());
+ {
+ sp<ITvClient> oldClient;
+ {
+ Mutex::Autolock _l(mLock);
+ if (mClientPid != 0 && checkPid() != NO_ERROR) {
+ LOGW("Tried to connect to locked tv (old pid %d, new pid %d)", mClientPid, callingPid);
+ return -EBUSY;
+ }
+ oldClient = mTvClient;
+
+ // did the client actually change?
+ if ((mTvClient != NULL) && (client->asBinder() == mTvClient->asBinder())) {
+ LOGD("Connect to the same client");
+ return NO_ERROR;
+ }
+
+ mTvClient = client;
+ mClientPid = -1;
+ LOGD("Connect to the new client (pid %d, client %p)", callingPid, mTvClient->asBinder().get());
+ }
+
+ }
+ mClientPid = callingPid;
+ return NO_ERROR;
+}
+
+TvService::Client::~Client()
+{
+ if(mIsStartTv) mpTv->StopTvLock();
+
+ int callingPid = getCallingPid();
+ // tear down client
+ LOGD("Client::~Client E (pid %d, client %p)", callingPid, getTvClient()->asBinder().get());
+ // make sure we tear down the hardware
+ mClientPid = callingPid;
+ disconnect();
+ LOGD("Client::~Client X (pid %d)", mClientPid);
+}
+
+void TvService::Client::disconnect()
+{
+ int callingPid = getCallingPid();
+
+ LOGD("Client::disconnect() E (pid %d client %p)", callingPid, getTvClient()->asBinder().get());
+
+ Mutex::Autolock lock(mLock);
+ if (mClientPid <= 0) {
+ LOGE("tv is unlocked (mClientPid = %d), don't tear down hardware", mClientPid);
+ return;
+ }
+ if (checkPid() != NO_ERROR) {
+ LOGE("Different client - don't disconnect");
+ return;
+ }
+
+ mTvService->removeClient(mTvClient);
+ mTvService->decUsers();
+
+ LOGD("Client::disconnect() X (pid %d)", callingPid);
+}
+
+status_t TvService::Client::createVideoFrame(const sp<IMemory> &share_mem)
+{
+ LOGD(" mem=%p size=%d", share_mem->pointer() == NULL, share_mem->size());
+ int Len = 0;
+ Mutex::Autolock lock(mLock);
+ mTvService->mCapVidFrame.InitVCap(share_mem);
+ mTvService->mCapVidFrame.SetVideoParameter(1280, 720, 50);
+
+ mTvService->mCapVidFrame.VideoStart();
+ mTvService->mCapVidFrame.GetVideoData(&Len);
+ mTvService->mCapVidFrame.VideoStop();
+ mTvService->mCapVidFrame.DeinitVideoCap();
+
+ return 0;
+}
+
+status_t TvService::Client::createSubtitle(const sp<IMemory> &share_mem)
+{
+ LOGD("TvService::Client::createSubtitle mem=%d size=%d", share_mem->pointer() == NULL, share_mem->size());
+ //pSub = new CTvSubtitle(share_mem, this);
+ //pSub->run();
+ return 0;
+}
+status_t TvService::Client::processCmd(const Parcel &p, Parcel *r)
+{
+ int tmp_i_buf[128] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
+ unsigned char tmp_uc_buf[512] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
+ unsigned char tmp_uc_buf2[512] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
+ int8_t tmp_int8_buf[512] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
+ static int source_input = 0;
+ int *data_ptr = NULL;
+
+ int cmd = p.readInt32();
+
+ LOGD("client=%d cmd=%d", getCallingPid(), cmd);
+ switch (cmd) {
+ // Tv function
+ case OPEN_TV: {
+ break;
+ }
+ case CLOSE_TV: {
+ int ret = mpTv->CloseTv();
+ r->writeInt32(ret);
+ break;
+ }
+ case START_TV: {
+ int mode = p.readInt32();
+ int ret = mpTv->StartTvLock();
+ //mTvService->mpStartTvClient = this;
+ mIsStartTv = true;
+ r->writeInt32(ret);
+ break;
+ }
+ case STOP_TV: {
+ int ret = mpTv->StopTvLock();
+ r->writeInt32(ret);
+ mIsStartTv = false;
+ break;
+ }
+ case GET_TV_STATUS: {
+ int ret = 0;
+ ret = (int)mpTv->GetTvStatus();
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_LAST_SOURCE_INPUT: {
+ int ret = (int)mpTv->GetLastSourceInput();
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CURRENT_SOURCE_INPUT: {
+ int ret = (int)mpTv->GetCurrentSourceInputLock();
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CURRENT_SOURCE_INPUT_TYPE: {
+ int ret = 0;//(int)mpTv->Tvin_GetSrcInputType();
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CURRENT_SIGNAL_INFO: {
+ tvin_info_t siginfo = mpTv->GetCurrentSignalInfo();
+ int frame_rate = mpTv->getHDMIFrameRate();
+ LOGD("superman--frame_rate = %d", frame_rate);
+ r->writeInt32(siginfo.trans_fmt);
+ r->writeInt32(siginfo.fmt);
+ r->writeInt32(siginfo.status);
+ r->writeInt32(frame_rate);
+ break;
+ }
+ case IS_SOURCE_SWTICH_DONE: {
+ //int ret = mpTv->Tv_IsSourceSwtichDone();
+ r->writeInt32(0);
+ break;
+ }
+ case SET_SOURCE_INPUT: {
+ int sourceinput = p.readInt32();
+ tvin_window_pos_t win_pos;
+ LOGD(" SetSourceInput sourceId= %x", sourceinput);
+ source_input = sourceinput;
+ /*win_pos.x1 = p.readInt32();
+ win_pos.y1 = p.readInt32();
+ win_pos.x2 = p.readInt32();
+ win_pos.y2 = p.readInt32();*/
+ int ret = mpTv->SetSourceSwitchInput((tv_source_input_t)sourceinput);
+ r->writeInt32(ret);
+ break;
+ }
+ case RUN_ADC_AUTO_CALIBRATION: {
+ // int ret = mpTv->Tv_RunADCAutoCalibration();
+ // r->writeInt32(ret);
+ break;
+ }
+ case IS_DVI_SIGNAL: {
+ int ret = mpTv->IsDVISignal();
+ r->writeInt32(ret);
+ break;
+ }
+ case IS_VGA_TIMEING_IN_HDMI: {
+ int ret = mpTv->isVgaFmtInHdmi();
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_VIDEO_PATH_STATUS: {
+ int path_type = p.readInt32();
+ int ret = 0;//(int)mpTv->Tvin_CheckPathActive((tv_path_type_t)path_type);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_VIDEO_STREAM_STATUS: {
+ // int ret = (int)mpTv->Tvin_CheckVideoStreamStatus();
+ // r->writeInt32(ret);
+ break;
+ }
+ case GET_FIRST_START_SWITCH_TYPE: {
+ //int tmp_val = 0;
+ //int ret = (int)mpTv->Tv_GetFirstStartSwitchType(&tmp_val);
+ //r->writeInt32(ret);
+ r->writeInt32(1);
+ break;
+ }
+ case SET_PREVIEW_WINDOW: {
+ tvin_window_pos_t win_pos;
+ win_pos.x1 = p.readInt32();
+ win_pos.y1 = p.readInt32();
+ win_pos.x2 = p.readInt32();
+ win_pos.y2 = p.readInt32();
+ int ret = (int)mpTv->SetPreviewWindow(win_pos);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case SET_VIDEO_DISABLE: {
+ int value = p.readInt32();
+ int ret = 0;//(int)mpTv->Tv_SetVideoDisable(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case GET_SOURCE_CONNECT_STATUS: {
+ int source_input = p.readInt32();
+ int ret = mpTv->GetSourceConnectStatus(source_input);
+ r->writeInt32(ret);
+ break;
+ }
+ //Tv function END
+
+ //VGA
+ case RUN_VGA_AUTO_ADJUST: {
+ //int ret = mpTv->Tv_RunVGAAutoAdjust();
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_VGA_AUTO_ADJUST_STATUS: {
+ // int fmt = p.readInt32();
+ //int ret = (int) mpTv->Tv_GetVagAutoAdjustStatus();
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case IS_VGA_AUTO_ADJUST_DONE: {
+ int fmt = p.readInt32();
+ int ret = 0;//mpTv->Tv_IsVGAAutoAdjustDone((tvin_sig_fmt_t)fmt);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_VGA_HPOS: {
+ // int value = p.readInt32();
+ // int fmt = p.readInt32();
+ //int ret = mpTv->Tv_SetVGAHPos(value, (tvin_sig_fmt_t)fmt);
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_VGA_HPOS: {
+ // int fmt = p.readInt32();
+ // int ret = mpTv->Tv_GetVGAHPos((tvin_sig_fmt_t)fmt);
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+
+ case SET_VGA_VPOS: {
+ // int value = p.readInt32();
+ // int fmt = p.readInt32();
+ // int ret = mpTv->Tv_SetVGAVPos(value, (tvin_sig_fmt_t)fmt);
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_VGA_VPOS: {
+ // int fmt = p.readInt32();
+ // int ret = mpTv->Tv_GetVGAVPos((tvin_sig_fmt_t)fmt);
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+
+ case SET_VGA_CLOCK: {
+ // int value = p.readInt32();
+ // int fmt = p.readInt32();
+ // int ret = mpTv->Tv_SetVGAClock(value, (tvin_sig_fmt_t)fmt);
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_VGA_CLOCK: {
+ // int fmt = p.readInt32();
+ // int ret = mpTv->Tv_GetVGAClock((tvin_sig_fmt_t)fmt);
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+
+ case SET_VGA_PHASE: {
+ // int value = p.readInt32();
+ // int fmt = p.readInt32();
+ // int ret = mpTv->Tv_SetVGAPhase(value, (tvin_sig_fmt_t)fmt);
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_VGA_PHASE: {
+ // int fmt = p.readInt32();
+ // int ret = mpTv->Tv_GetVGAPhase((tvin_sig_fmt_t)fmt);
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_VGA_AJUST_PARA: {
+ tvafe_vga_parm_t adjparam;
+ adjparam.clk_step = p.readInt32();
+ adjparam.phase = p.readInt32();
+ adjparam.hpos_step = p.readInt32();
+ adjparam.vpos_step = p.readInt32();
+ adjparam.vga_in_clean = p.readInt32();
+ int fmt = p.readInt32();
+ int ret = 0/*SetVGAAjustPara(adjparam, (tvin_sig_fmt_t)fmt)*/;
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_VGA_AJUST_PARA: {
+ tvafe_vga_parm_t adjparam;
+ int fmt = p.readInt32();
+ int ret = 0/*GetVGAAjustPara(&adjparam, (tvin_sig_fmt_t)fmt)*/;
+ r->writeInt32(adjparam.clk_step);
+ r->writeInt32(adjparam.phase);
+ r->writeInt32(adjparam.hpos_step);
+ r->writeInt32(adjparam.vpos_step);
+ r->writeInt32(adjparam.vga_in_clean);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_VGAPARAM_DEFAULT: {
+ // int ret = (int)mpTv->TvinResetVgaAjustParam();
+ // r->writeInt32(ret);
+ break;
+ }
+ // VGA END
+
+ // 3D
+
+ case SET_3D_MODE: {
+ int mode = p.readInt32();
+ int ret = mpTv->Tv_Set3DMode((VIDEO_3D_MODE_T)mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_3D_MODE: {
+ int ret = (int)mpTv->Tv_Get3DMode();
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_3D_LR_SWITH: {
+ int on_off = p.readInt32();
+ //int status = p.readInt32();
+ int ret = mpTv->Tv_Set3DLRSwith(on_off);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_3D_LR_SWITH: {
+ int ret = mpTv->Tv_Get3DLRSwith();
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_3D_TO_2D_MODE: {
+ int mode = p.readInt32();
+ //int status = p.readInt32();
+ int ret = mpTv->Tv_Set3DTo2DMode(mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_3D_TO_2D_MODE: {
+ int ret = mpTv->Tv_Get3DTo2DMode();
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_3D_DEPTH: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_Set3DDepth(value);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_3D_DEPTH: {
+ int ret = mpTv->GetSave3DDepth();
+ r->writeInt32(ret);
+ break;
+ }
+ // 3D END
+
+ // PQ
+ case SET_BRIGHTNESS: {
+ int brightness = p.readInt32();
+ int source_type = p.readInt32();
+ int is_save = p.readInt32();
+ int ret = mpTv->Tv_SetBrightness(brightness, (tv_source_input_type_t)source_type, is_save);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_BRIGHTNESS: {
+ int source_type = p.readInt32();
+ LOGD("GET_BRIGHTNESS------------=%d", source_type);
+ int ret = mpTv->Tv_GetBrightness((tv_source_input_type_t)source_type);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case SET_CONTRAST: {
+ int contrast = p.readInt32();
+ int source_type = p.readInt32();
+ int is_save = p.readInt32();
+ int ret = mpTv->Tv_SetContrast(contrast, (tv_source_input_type_t)source_type, is_save);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CONTRAST: {
+ int source_type = p.readInt32();
+ int ret = mpTv->Tv_GetContrast((tv_source_input_type_t)source_type);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_SATUATION: {
+ int satuation = p.readInt32();
+ int source_type = p.readInt32();
+ int fmt = p.readInt32();
+ int is_save = p.readInt32();
+ int ret = mpTv->Tv_SetSaturation(satuation, (tv_source_input_type_t)source_type, (tvin_sig_fmt_t)fmt, is_save);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_SATUATION: {
+ int source_type = p.readInt32();
+ int ret = mpTv->Tv_GetSaturation((tv_source_input_type_t)source_type);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_HUE: {
+ int hue = p.readInt32();
+ int source_type = p.readInt32();
+ int fmt = p.readInt32();
+ int is_save = p.readInt32();
+ int ret = mpTv->Tv_SetHue(hue, (tv_source_input_type_t)source_type, (tvin_sig_fmt_t)fmt, is_save);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_HUE: {
+ int source_type = p.readInt32();
+ int ret = mpTv->Tv_GetHue((tv_source_input_type_t)source_type);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_SCENEMODE: {
+ int mode = p.readInt32();
+ int is_save = p.readInt32();
+ int ret = 0;//mpTv->Tv_SetSceneMode((vpp_scene_mode_t)mode,is_save);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_SCENEMODE: {
+ int ret = 0;//(int)mpTv->Tv_GetSceneMode();
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_PQMODE: {
+ int mode = p.readInt32();
+ int source_type = p.readInt32();
+ int is_save = p.readInt32();
+ int ret = mpTv->Tv_SetPQMode((vpp_picture_mode_t)mode, (tv_source_input_type_t)source_type, is_save);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_PQMODE: {
+ int source_type = p.readInt32();
+ int ret = (int)mpTv->Tv_GetPQMode((tv_source_input_type_t)source_type);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_SHARPNESS: {
+ int value = p.readInt32();
+ int source_type = p.readInt32();
+ int en = p.readInt32();
+ int status_3d = p.readInt32();
+ int is_save = p.readInt32();
+ int ret = mpTv->Tv_SetSharpness(value, (tv_source_input_type_t)source_type, en, is_save);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_SHARPNESS: {
+ int source_type = p.readInt32();
+ int ret = mpTv->Tv_GetSharpness((tv_source_input_type_t)source_type);
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_SHARPNESS: {
+ int value = p.readInt32();
+ int source_type = p.readInt32();
+ int en = p.readInt32();
+ int ret = mpTv->Tv_SaveSharpness(value, (tv_source_input_type_t)source_type, en);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_BACKLIGHT: {
+ int value = p.readInt32();
+ int source_type = p.readInt32();
+ int is_save = p.readInt32();
+ int ret = -1;
+ if (GetPlatformHaveFBCFlag() == 0) {
+ ret = mpTv->Tv_SetBacklight(value, (tv_source_input_type_t)source_type, is_save);
+ } else {
+ ret = mpTv->Tv_FactorySet_FBC_Backlight(value);
+ }
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_BACKLIGHT: {
+ int source_type = p.readInt32();
+ int ret = 0;
+ if (GetPlatformHaveFBCFlag() == 0) {
+ ret = mpTv->Tv_GetBacklight((tv_source_input_type_t)source_type);
+ } else {
+ ret = mpTv->Tv_FactoryGet_FBC_Backlight();
+ }
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_COLOR_TEMPERATURE: {
+ int mode = p.readInt32();
+ int source_type = p.readInt32();
+ int is_save = p.readInt32();
+ int ret = -1;
+ if (GetPlatformHaveFBCFlag() == 0) {
+ ret = mpTv->Tv_SetColorTemperature((vpp_color_temperature_mode_t)mode, (tv_source_input_type_t)source_type, is_save);
+ } else {
+ mode = mpTv->Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(mode);
+ ret = mpTv->Tv_FactorySet_FBC_ColorTemp_Mode(mode);
+ }
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_COLOR_TEMPERATURE: {
+ int source_type = p.readInt32();
+ int ret = 0;
+ if (GetPlatformHaveFBCFlag() == 0) {
+ ret = mpTv->Tv_GetColorTemperature((tv_source_input_type_t)source_type);
+ } else {
+ ret = mpTv->Tv_FactoryGet_FBC_ColorTemp_Mode();
+ ret = mpTv->Tv_FactoryWhiteBalanceColorTempMappingFbc2G9(ret);
+ }
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_COLOR_TEMPERATURE: {
+ int mode = p.readInt32();
+ int source_type = p.readInt32();
+ int ret = mpTv->Tv_SaveColorTemp((vpp_color_temperature_mode_t)mode, (tv_source_input_type_t)source_type);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_DISPLAY_MODE: {
+ int mode = p.readInt32();
+ int source_type = p.readInt32();
+ int fmt = p.readInt32();
+ int is_save = p.readInt32();
+ int ret = mpTv->Tv_SetDisplayMode((vpp_display_mode_t)mode, (tv_source_input_type_t)source_type, (tvin_sig_fmt_t)fmt, is_save);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_DISPLAY_MODE: {
+ int source_type = p.readInt32();
+ int ret = (int)mpTv->Tv_GetDisplayMode((tv_source_input_type_t)source_type);
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_DISPLAY_MODE: {
+ int mode = p.readInt32();
+ int source_type = p.readInt32();
+ int ret = mpTv->Tv_SaveDisplayMode((vpp_display_mode_t)mode, (tv_source_input_type_t)source_type);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_NOISE_REDUCTION_MODE: {
+ int mode = p.readInt32();
+ int source_type = p.readInt32();
+ int is_save = p.readInt32();
+ int ret = mpTv->Tv_SetNoiseReductionMode((vpp_noise_reduction_mode_t)mode, (tv_source_input_type_t)source_type, is_save);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_NOISE_REDUCTION_MODE: {
+ int source_type = p.readInt32();
+ int ret = mpTv->Tv_GetNoiseReductionMode((tv_source_input_type_t)source_type);
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_NOISE_REDUCTION_MODE: {
+ int mode = p.readInt32();
+ int source_type = p.readInt32();
+ int ret = mpTv->Tv_SaveNoiseReductionMode((vpp_noise_reduction_mode_t)mode, (tv_source_input_type_t)source_type);
+ r->writeInt32(ret);
+ break;
+ }
+ case SETRGBOGO_POSTOFFSET: {
+ int type = p.readInt32();
+ int offset = p.readInt32();
+ int ret = 0;
+ ret = mpTv->Tv_SetRGBOGO_PostOffset(type, offset);
+ r->writeInt32(ret);
+ break;
+ }
+ case SETRGBOGO_GAIN: {
+ int type = p.readInt32();
+ int mode = p.readInt32();
+ int ret = 0;
+ ret = mpTv->Tv_SetRGBOGO_Gain(type, mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case GETRGBOGO_POSTOFFSET: {
+ int ret = 0;
+ int type = p.readInt32();
+ ret = mpTv->Tv_GetRGBOGO_PostOffset(type);
+ r->writeInt32(ret);
+ break;
+ }
+ case GETRGBOGO_GAIN: {
+ int type = p.readInt32();
+ int ret = 0;
+ ret = mpTv->Tv_GetRGBOGO_Gain(type);
+ r->writeInt32(ret);
+ break;
+ }
+ // PQ END
+
+ // FACTORY
+ case FACTORY_SETPQMODE_BRIGHTNESS: {
+ int source_type = p.readInt32();
+ int pq_mode = p.readInt32();
+ int brightness = p.readInt32();
+ int ret = mpTv->Tv_FactorySetPQMode_Brightness(source_type, pq_mode, brightness);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETPQMODE_BRIGHTNESS: {
+ int source_type = p.readInt32();
+ int pq_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetPQMode_Brightness(source_type, pq_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETPQMODE_CONTRAST: {
+ int source_type = p.readInt32();
+ int pq_mode = p.readInt32();
+ int contrast = p.readInt32();
+ int ret = mpTv->Tv_FactorySetPQMode_Contrast(source_type, pq_mode, contrast);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETPQMODE_CONTRAST: {
+ int source_type = p.readInt32();
+ int pq_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetPQMode_Contrast(source_type, pq_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETPQMODE_SATURATION: {
+ int source_type = p.readInt32();
+ int pq_mode = p.readInt32();
+ int saturation = p.readInt32();
+ int ret = mpTv->Tv_FactorySetPQMode_Saturation(source_type, pq_mode, saturation);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETPQMODE_SATURATION: {
+ int source_type = p.readInt32();
+ int pq_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetPQMode_Saturation(source_type, pq_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETPQMODE_HUE: {
+ int source_type = p.readInt32();
+ int pq_mode = p.readInt32();
+ int hue = p.readInt32();
+ int ret = mpTv->Tv_FactorySetPQMode_Hue(source_type, pq_mode, hue);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETPQMODE_HUE: {
+ int source_type = p.readInt32();
+ int pq_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetPQMode_Hue(source_type, pq_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETPQMODE_SHARPNESS: {
+ int source_type = p.readInt32();
+ int pq_mode = p.readInt32();
+ int sharpness = p.readInt32();
+ int ret = mpTv->Tv_FactorySetPQMode_Sharpness(source_type, pq_mode, sharpness);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETPQMODE_SHARPNESS: {
+ int source_type = p.readInt32();
+ int pq_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetPQMode_Sharpness(source_type, pq_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETCOLORTEMP_RGAIN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int rgain = p.readInt32();
+ int ret = mpTv->Tv_FactorySetColorTemp_Rgain(source_type, colortemp_mode, rgain);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SAVECOLORTEMP_RGAIN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int rgain = p.readInt32();
+ int ret = mpTv->Tv_FactorySaveColorTemp_Rgain(source_type, colortemp_mode, rgain);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETCOLORTEMP_RGAIN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetColorTemp_Rgain(source_type, colortemp_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETCOLORTEMP_GGAIN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ggain = p.readInt32();
+ int ret = mpTv->Tv_FactorySetColorTemp_Ggain(source_type, colortemp_mode, ggain);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SAVECOLORTEMP_GGAIN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ggain = p.readInt32();
+ int ret = mpTv->Tv_FactorySaveColorTemp_Ggain(source_type, colortemp_mode, ggain);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETCOLORTEMP_GGAIN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetColorTemp_Ggain(source_type, colortemp_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETCOLORTEMP_BGAIN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int bgain = p.readInt32();
+ int ret = mpTv->Tv_FactorySetColorTemp_Bgain(source_type, colortemp_mode, bgain);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SAVECOLORTEMP_BGAIN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int bgain = p.readInt32();
+ int ret = mpTv->Tv_FactorySaveColorTemp_Bgain(source_type, colortemp_mode, bgain);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETCOLORTEMP_BGAIN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetColorTemp_Bgain(source_type, colortemp_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETCOLORTEMP_ROFFSET: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int roffset = p.readInt32();
+ int ret = mpTv->Tv_FactorySetColorTemp_Roffset(source_type, colortemp_mode, roffset);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SAVECOLORTEMP_ROFFSET: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int roffset = p.readInt32();
+ int ret = mpTv->Tv_FactorySaveColorTemp_Roffset(source_type, colortemp_mode, roffset);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETCOLORTEMP_ROFFSET: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetColorTemp_Roffset(source_type, colortemp_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETCOLORTEMP_GOFFSET: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int goffset = p.readInt32();
+ int ret = mpTv->Tv_FactorySetColorTemp_Goffset(source_type, colortemp_mode, goffset);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SAVECOLORTEMP_GOFFSET: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int goffset = p.readInt32();
+ int ret = mpTv->Tv_FactorySaveColorTemp_Goffset(source_type, colortemp_mode, goffset);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETCOLORTEMP_GOFFSET: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetColorTemp_Goffset(source_type, colortemp_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETCOLORTEMP_BOFFSET: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int boffset = p.readInt32();
+ int ret = mpTv->Tv_FactorySetColorTemp_Boffset(source_type, colortemp_mode, boffset);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SAVECOLORTEMP_BOFFSET: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int boffset = p.readInt32();
+ int ret = mpTv->Tv_FactorySaveColorTemp_Boffset(source_type, colortemp_mode, boffset);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETCOLORTEMP_BOFFSET: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetColorTemp_Boffset(source_type, colortemp_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETTESTPATTERN: {
+ int pattern = p.readInt32();
+ int ret = mpTv->Tv_FactorySetTestPattern(pattern);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETTESTPATTERN: {
+ int ret = mpTv->Tv_FactoryGetTestPattern();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_RESETPQMODE: {
+ int ret = mpTv->Tv_FactoryResetPQMode();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_RESETCOLORTEMP: {
+ int ret = mpTv->Tv_FactoryResetColorTemp();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_RESETPAMAMSDEFAULT: {
+ int ret = mpTv->Tv_FactorySetParamsDefault();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETDDRSSC: {
+ int setp = p.readInt32();
+ int ret = mpTv->Tv_FactorySetDDRSSC(setp);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETDDRSSC: {
+ int ret = mpTv->Tv_FactoryGetDDRSSC();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETLVDSSSC: {
+ int setp = p.readInt32();
+ int ret = mpTv->Tv_FactorySetLVDSSSC(setp);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETLVDSSSC: {
+ int ret = mpTv->Tv_FactoryGetLVDSSSC();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETNOLINEPARAMS: {
+ noline_params_t params;
+ int noline_params_type = p.readInt32();
+ int source_type = p.readInt32();
+ params.osd0 = p.readInt32();
+ params.osd25 = p.readInt32();
+ params.osd50 = p.readInt32();
+ params.osd75 = p.readInt32();
+ params.osd100 = p.readInt32();
+ int ret = mpTv->Tv_FactorySetNolineParams(noline_params_type, source_type, params);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETNOLINEPARAMS: {
+ int noline_params_type = p.readInt32();
+ int source_type = p.readInt32();
+ noline_params_t params = mpTv->Tv_FactoryGetNolineParams(noline_params_type, source_type);
+ r->writeInt32(params.osd0);
+ r->writeInt32(params.osd25);
+ r->writeInt32(params.osd50);
+ r->writeInt32(params.osd75);
+ r->writeInt32(params.osd100);
+ break;
+ }
+ case FACTORY_SETOVERSCAN: {
+ tvin_cutwin_t cutwin_t;
+ int source_type = p.readInt32();
+ int fmt = p.readInt32();
+ int status_3d = p.readInt32();
+ int trans_fmt = p.readInt32();
+ cutwin_t.hs = p.readInt32();
+ cutwin_t.he = p.readInt32();
+ cutwin_t.vs = p.readInt32();
+ cutwin_t.ve = p.readInt32();
+ int ret = mpTv->Tv_FactorySetOverscan(source_type, fmt, status_3d, trans_fmt, cutwin_t);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETOVERSCAN: {
+ int source_type = p.readInt32();
+ int fmt = p.readInt32();
+ int status_3d = p.readInt32();
+ int trans_fmt = p.readInt32();
+ tvin_cutwin_t cutwin_t = mpTv->Tv_FactoryGetOverscan(source_type, fmt, status_3d, trans_fmt);
+ r->writeInt32(cutwin_t.hs);
+ r->writeInt32(cutwin_t.he);
+ r->writeInt32(cutwin_t.vs);
+ r->writeInt32(cutwin_t.ve);
+ break;
+ }
+ case FACTORY_SET_OUT_DEFAULT: {
+ int ret = 0;
+ ret = mpTv->Tv_SSMFacRestoreDefaultSetting();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETGLOBALOGO_RGAIN: {
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETGLOBALOGO_GGAIN: {
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETGLOBALOGO_BGAIN: {
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETGLOBALOGO_ROFFSET: {
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETGLOBALOGO_GOFFSET: {
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETGLOBALOGO_BOFFSET: {
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETGLOBALOGO_RGAIN: {
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETGLOBALOGO_GGAIN: {
+ int p1 = p.readInt32();
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETGLOBALOGO_BGAIN: {
+ int p1 = p.readInt32();
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETGLOBALOGO_ROFFSET: {
+ int p1 = p.readInt32();
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETGLOBALOGO_GOFFSET: {
+ int p1 = p.readInt32();
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETGLOBALOGO_BOFFSET: {
+ int p1 = p.readInt32();
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_CLEAN_ALL_TABLE_FOR_PROGRAM: {
+ int ret = mpTv->ClearAnalogFrontEnd();
+ mpTv->clearDbAllProgramInfoTable();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETBACKLIGHT_PWM_FREQUENCY: {
+ int value = p.readInt32();
+ int ret = 0;//mpTv->GetVpp().Tv_FactorySetBacklightPWM_Frequency(value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETBACKLIGHT_PWM_FREQUENCY: {
+ int ret = 0;//mpTv->GetVpp().Tv_FactoryGetBacklightPWM_Frequency();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETBACKLIGHT_SWITCH_STATUS: {
+ int value = p.readInt32();
+ int ret = 0;//mpTv->GetVpp().Tv_FactorySetBacklight_Switch_status(value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETBACKLIGHT_SWITCH_STATUS: {
+ int ret = 0;//mpTv->GetVpp().Tv_FactoryGetBacklight_Switch_status();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETBACKLIGHT_PWM_DUTY: {
+ int value = p.readInt32();
+ int ret = 0;//mpTv->GetVpp().Tv_FactorySetBacklightPWM_Duty(value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETBACKLIGHT_PWM_DUTY: {
+ int ret = 0;//mpTv->GetVpp().Tv_FactoryGetBacklightPWM_Duty();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_SETLVDS_COLOR_DEPTH: {
+ int value = p.readInt32();
+ int ret = 0;//mpTv->GetVpp().Tv_FactorySetLVDS_ColorDepth(value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETLVDS_COLOR_DEPTH: {
+ int ret = 0;//mpTv->GetVpp().Tv_FactoryGetLVDS_ColorDepth();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETLVDS_DITHER_STATUS: {
+ int value = p.readInt32();
+ int ret = 0;//mpTv->GetVpp().Tv_FactorySetLVDS_ColorDither_status(value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETLVDS_DITHER_STATUS: {
+ int ret = 0;//mpTv->GetVpp().Tv_FactoryGetLVDS_ColorDither_status();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETLVDS_MAPPING_STATUS: {
+ int value = p.readInt32();
+ int ret = 0;//mpTv->GetVpp().Tv_FactorySetLVDS_Mapping_status(value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETLVDS_MAPPING_STATUS: {
+ int ret = 0;//mpTv->GetVpp().Tv_FactoryGetLVDS_Mapping_status();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_SETLVDS_PORT_SWAP_STATUS: {
+ int value = p.readInt32();
+ int ret = 0;//mpTv->GetVpp().Tv_FactorySetLVDS_PortSwap_status(value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_GETLVDS_PORT_SWAP_STATUS: {
+ int ret = 0;//mpTv->GetVpp().Tv_FactoryGetLVDS_PortSwap_status();
+ r->writeInt32(ret);
+ break;
+ }
+ // FACTORY END
+
+ // AUDIO
+ // AUDIO MUTE
+ case SET_AUDIO_MUTEKEY_STATUS: {
+ int status = p.readInt32();
+ int ret = mpTv->SetAudioMuteForSystem(status);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_MUTEKEY_STATUS: {
+ int ret = mpTv->GetAudioMuteForSystem();
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_AUDIO_FORCE_MUTE_STATUS: {
+ int status = p.readInt32();
+ int ret = 0;//pTv->getTvAudio().AudioSetForceMuteStatus(status);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_FORCE_MUTE_STATUS: {
+ int ret = 0;//mpTv->AudioGetForceMuteStatus();
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_AUDIO_AVOUT_MUTE_STATUS: {
+ int status = p.readInt32();
+ int ret = mpTv->SetAudioAVOutMute(status);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_AVOUT_MUTE_STATUS: {
+ int ret = mpTv->GetAudioAVOutMute();
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_AUDIO_SPDIF_MUTE_STATUS: {
+ int status = p.readInt32();
+ int ret = mpTv->SetAudioSPDIFMute(status);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_SPDIF_MUTE_STATUS: {
+ int ret = mpTv->GetAudioSPDIFMute();
+ r->writeInt32(ret);
+ break;
+ }
+ // AUDIO MASTER VOLUME
+ case SET_AUDIO_MASTER_VOLUME: {
+ int vol = p.readInt32();
+ int ret = mpTv->SetAudioMasterVolume(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_MASTER_VOLUME: {
+ int ret = mpTv->GetAudioMasterVolume();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_MASTER_VOLUME: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioMasterVolume(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_MASTER_VOLUME: {
+ int ret = mpTv->GetCurAudioMasterVolume();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO BALANCE
+ case SET_AUDIO_BALANCE: {
+ int vol = p.readInt32();
+ int ret = mpTv->SetAudioBalance(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_BALANCE: {
+ int ret = mpTv->GetAudioBalance();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_BALANCE: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioBalance(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_BALANCE: {
+ int ret = mpTv->GetCurAudioBalance();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO SUPPERBASS VOLUME
+ case SET_AUDIO_SUPPER_BASS_VOLUME: {
+ int vol = p.readInt32();
+ int ret = mpTv->SetAudioSupperBassVolume(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_SUPPER_BASS_VOLUME: {
+ int ret = mpTv->GetAudioSupperBassVolume();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_SUPPER_BASS_VOLUME: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioSupperBassVolume(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_SUPPER_BASS_VOLUME: {
+ int ret = mpTv->GetCurAudioSupperBassVolume();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO SUPPERBASS SWITCH
+ case SET_AUDIO_SUPPER_BASS_SWITCH: {
+ int vol = p.readInt32();
+ int ret = mpTv->SetAudioSupperBassSwitch(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_SUPPER_BASS_SWITCH: {
+ int ret = mpTv->GetAudioSupperBassSwitch();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_SUPPER_BASS_SWITCH: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioSupperBassSwitch(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_SUPPER_BASS_SWITCH: {
+ int ret = mpTv->GetCurAudioSupperBassSwitch();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO SRS SURROUND SWITCH
+ case SET_AUDIO_SRS_SURROUND: {
+ int vol = p.readInt32();
+ int ret = mpTv->SetAudioSRSSurround(vol);
+ mpTv->RefreshAudioMasterVolume(SOURCE_MAX);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_SRS_SURROUND: {
+ int ret = mpTv->GetAudioSRSSurround();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_SRS_SURROUND: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioSrsSurround(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_SRS_SURROUND: {
+ int ret = mpTv->GetCurAudioSRSSurround();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO SRS DIALOG CLARITY
+ case SET_AUDIO_SRS_DIALOG_CLARITY: {
+ int vol = p.readInt32();
+ int ret = mpTv->SetAudioSrsDialogClarity(vol);
+ mpTv->RefreshAudioMasterVolume(SOURCE_MAX);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_SRS_DIALOG_CLARITY: {
+ int ret = mpTv->GetAudioSrsDialogClarity();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_SRS_DIALOG_CLARITY: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioSrsDialogClarity(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_SRS_DIALOG_CLARITY: {
+ int ret = mpTv->GetCurAudioSrsDialogClarity();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO SRS TRUBASS
+ case SET_AUDIO_SRS_TRU_BASS: {
+ int vol = p.readInt32();
+ int ret = mpTv->SetAudioSrsTruBass(vol);
+ mpTv->RefreshAudioMasterVolume(SOURCE_MAX);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_SRS_TRU_BASS: {
+ int ret = mpTv->GetAudioSrsTruBass();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_SRS_TRU_BASS: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioSrsTruBass(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_SRS_TRU_BASS: {
+ int ret = mpTv->GetCurAudioSrsTruBass();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO BASS
+ case SET_AUDIO_BASS_VOLUME: {
+ int vol = p.readInt32();
+ int ret = mpTv->SetAudioBassVolume(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_BASS_VOLUME: {
+ int ret = mpTv->GetAudioBassVolume();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_BASS_VOLUME: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioBassVolume(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_BASS_VOLUME: {
+ int ret = mpTv->GetCurAudioBassVolume();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO TREBLE
+ case SET_AUDIO_TREBLE_VOLUME: {
+ int vol = p.readInt32();
+ int ret = mpTv->SetAudioTrebleVolume(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_TREBLE_VOLUME: {
+ int ret = mpTv->GetAudioTrebleVolume();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_TREBLE_VOLUME: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioTrebleVolume(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_TREBLE_VOLUME: {
+ int ret = mpTv->GetCurAudioTrebleVolume();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO SOUND MODE
+ case SET_AUDIO_SOUND_MODE: {
+ int vol = p.readInt32();
+ int ret = mpTv->SetAudioSoundMode(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_SOUND_MODE: {
+ int ret = mpTv->GetAudioSoundMode();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_SOUND_MODE: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioSoundMode(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_SOUND_MODE: {
+ int ret = mpTv->GetCurAudioSoundMode();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO WALL EFFECT
+ case SET_AUDIO_WALL_EFFECT: {
+ int vol = p.readInt32();
+ int ret = mpTv->SetAudioWallEffect(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_WALL_EFFECT: {
+ int ret = mpTv->GetAudioWallEffect();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_WALL_EFFECT: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioWallEffect(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_WALL_EFFECT: {
+ int ret = mpTv->GetCurAudioWallEffect();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO EQ MODE
+ case SET_AUDIO_EQ_MODE: {
+ int vol = p.readInt32();
+ int ret = mpTv->SetAudioEQMode(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_EQ_MODE: {
+ int ret = mpTv->GetAudioEQMode();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_EQ_MODE: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioEQMode(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_EQ_MODE: {
+ int ret = mpTv->GetCurAudioEQMode();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO EQ GAIN
+ case GET_AUDIO_EQ_RANGE: {
+ int buf[2];
+ int ret = mpTv->GetAudioEQRange(buf);
+ r->writeInt32(2);
+ r->writeInt32(buf[0]);
+ r->writeInt32(buf[1]);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_EQ_BAND_COUNT: {
+ int ret = mpTv->GetAudioEQBandCount();
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_AUDIO_EQ_GAIN: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ tmp_buf_size = p.readInt32();
+ for (i = 0; i < tmp_buf_size; i++) {
+ tmp_i_buf[i] = p.readInt32();
+ }
+ ret = mpTv->SetAudioEQGain(tmp_i_buf);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_EQ_GAIN: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ ret = mpTv->GetAudioEQGain(tmp_i_buf);
+ tmp_buf_size = mpTv->GetAudioEQBandCount();
+ r->writeInt32(tmp_buf_size);
+ for (i = 0; i < tmp_buf_size; i++) {
+ r->writeInt32(tmp_i_buf[i]);
+ }
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_EQ_GAIN: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ tmp_buf_size = p.readInt32();
+ for (i = 0; i < tmp_buf_size; i++) {
+ tmp_i_buf[i] = p.readInt32();
+ }
+ ret = mpTv->SaveCurAudioEQGain(tmp_i_buf);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_EQ_GAIN: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ ret = mpTv->GetCurAudioEQGain(tmp_i_buf);
+ tmp_buf_size = mpTv->GetAudioEQBandCount();
+ r->writeInt32(tmp_buf_size);
+ for (i = 0; i < tmp_buf_size; i++) {
+ r->writeInt32(tmp_i_buf[i]);
+ }
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_AUDIO_EQ_SWITCH: {
+ int tmpVal = p.readInt32();
+ int ret = mpTv->SetAudioEQSwitch(tmpVal);
+ r->writeInt32(ret);
+ break;
+ }
+ // AUDIO SPDIF SWITCH
+ case SET_AUDIO_SPDIF_SWITCH: {
+ int tmp_val = p.readInt32();
+ int ret = mpTv->SetAudioSPDIFSwitch(tmp_val);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_SPDIF_SWITCH: {
+ int ret = 0;//mpTv->GetAudioSPDIFSwitch();
+ r->writeInt32(ret);
+ break;
+ }
+ case AUDIO_SET_DOUBLE_OUTPUT_ENABLE: {
+ int tmp_val = p.readInt32();
+ int ret = mpTv->amAudioSetDoubleOutputSwitch(tmp_val);
+ r->writeInt32(ret);
+ break;
+ }
+ case USB_AUDIO_OUPUT_MODULE_ENABLE: {
+ int tmp_val = p.readInt32();
+ int ret = mpTv->UsbAudioOuputModuleSwitch(tmp_val);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case GET_USB_AUDIO_DOUBLE_OUPUT_MODULE_ENABLE: {
+ int ret = mpTv->GetAmAudioSetDoubleOutputSwitch();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case GET_USB_AUDIO_OUPUT_MODULE_ENABLE: {
+ int ret = mpTv->GetCurUsbAudioOuputModuleSwitch();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case SAVE_CUR_AUDIO_SPDIF_SWITCH: {
+ int tmp_val = p.readInt32();
+ int ret = mpTv->SaveCurAudioSPDIFSwitch(tmp_val);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_SPDIF_SWITCH: {
+ int ret = mpTv->GetCurAudioSPDIFSwitch();
+ r->writeInt32(ret);
+ break;
+ }
+ //AUDIO SPDIF MODE
+ case SET_AUDIO_SPDIF_MODE: {
+ int vol = p.readInt32();
+ int progId = p.readInt32();
+ int audioTrackId = p.readInt32();
+ int ret = mpTv->SetAudioSPDIFMode(vol);
+ mpTv->ResetAudioDecoderForPCMOutput();
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_SPDIF_MODE: {
+ int ret = 0;//mpTv->GetAudioSPDIFMode();
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_CUR_AUDIO_SPDIF_MODE: {
+ int vol = p.readInt32();
+ int ret = mpTv->SaveCurAudioSPDIFMode(vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_CUR_AUDIO_SPDIF_MODE: {
+ int ret = mpTv->GetCurAudioSPDIFMode();
+ r->writeInt32(ret);
+ break;
+ }
+ case OPEN_AMAUDIO: {
+ int sr = p.readInt32();
+ int output_dev = p.readInt32();
+ int ret = mpTv->OpenAmAudio(sr, output_dev);
+ r->writeInt32(ret);
+ break;
+ }
+ case CLOSE_AMAUDIO: {
+ int ret = mpTv->CloseAmAudio();
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_AMAUDIO_INPUT_SR: {
+ int sr = p.readInt32();
+ int output_dev = p.readInt32();
+ int ret = mpTv->SetAmAudioInputSr(sr, output_dev);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_AMAUDIO_OUTPUT_MODE: {
+ int tmp_val = p.readInt32();
+ int ret = mpTv->SetAmAudioOutputMode(tmp_val);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_AMAUDIO_MUSIC_GAIN: {
+ int tmp_val = p.readInt32();
+ int ret = mpTv->SetAmAudioMusicGain(tmp_val);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_AMAUDIO_LEFT_GAIN: {
+ int tmp_val = p.readInt32();
+ int ret = mpTv->SetAmAudioLeftGain(tmp_val);
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_AMAUDIO_RIGHT_GAIN: {
+ int tmp_val = p.readInt32();
+ int ret = mpTv->SetAmAudioRightGain(tmp_val);
+ r->writeInt32(ret);
+ break;
+ }
+ case SELECT_LINE_IN_CHANNEL: {
+ int channel = p.readInt32();
+ int ret = mpTv->AudioLineInSelectChannel(channel);
+ r->writeInt32(ret);
+ LOGD("SELECT_LINE_IN_CHANNEL: channel = %d; ret = %d.\n", channel, ret);
+ break;
+ }
+ case SET_KALAOK_IO_LEVEL: {
+ int level = p.readInt32();
+ int ret = mpTv->SetKalaokIO(level);
+ r->writeInt32(ret);
+ mpTv->AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_LINEIN);
+ LOGD("SET KALAOK H LEVEL: level = %d; ret = %d.\n", level, ret);
+ break;
+ }
+
+ case SET_LINE_IN_CAPTURE_VOL: {
+ int l_vol = p.readInt32();
+ int r_vol = p.readInt32();
+ int ret = mpTv->AudioSetLineInCaptureVolume(l_vol, r_vol);
+ r->writeInt32(ret);
+ break;
+ }
+ case HANDLE_AUDIO_HEADSET_PLUG_IN: {
+ int ret = mpTv->AudioHandleHeadsetPlugIn();
+ r->writeInt32(ret);
+ break;
+ }
+ case HANDLE_AUDIO_HEADSET_PULL_OUT: {
+ int ret = mpTv->AudioHandleHeadsetPullOut();
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_AUDIO_VOL_COMP: {
+ int tmpVal = p.readInt32();
+ int ret = mpTv->SetCurProgramAudioVolumeCompensationVal(tmpVal);
+ r->writeInt32(ret);
+ break;
+ }
+ case GET_AUDIO_VOL_COMP: {
+ int ret = mpTv->GetAudioVolumeCompensationVal(-1);
+ r->writeInt32(ret);
+ break;
+ }
+ case SAVE_AUDIO_VOL_COMP: {
+ int tmpVal = p.readInt32();
+ int ret = -1;//mpTv->atvSaveAudioVolumeCompensationVal(tmpVal);
+ LOGD("this cmd is empty!!!!!!!!!!!!!!!!!!!");
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_NOISE_GATE_THRESHOLD: {
+ int ret = 0;
+ r->writeInt32(ret);
+ break;
+ }
+ case SET_AUDIO_SOURCE_FOR_KARAOKE: {
+ int sourceinput = p.readInt32();
+ int ret = mpTv->Tv_SetAudioSourceType((tv_source_input_t)sourceinput);
+ r->writeInt32(ret);
+ break;
+ }
+ // AUDIO END
+
+ // SSM
+ case SSM_INIT_DEVICE: {
+ int tmpRet = 0;
+ tmpRet = mpTv->Tv_SSMRestoreDefaultSetting();//mpTv->Tv_SSMInitDevice();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ /*case SSM_SAVE_ONE_BYTE: {
+ int tmpOffset = p.readInt32();
+ int tmpVal = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMWriteOneByte(tmpOffset, tmpVal);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_ONE_BYTE: {
+ int tmpOffset = p.readInt32();
+ int tmpRet = 0;
+ SSMReadOneByte(tmpOffset, &tmpRet);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_N_BYTES: {
+ int i = 0, tmp_offset = 0, tmp_data_len = 0, ret = -1;
+
+ tmp_offset = p.readInt32();
+ tmp_data_len = p.readInt32();
+
+ if (tmp_data_len > 0) {
+ data_ptr = new int[tmp_data_len];
+
+ if (data_ptr != NULL) {
+ for (i = 0; i < tmp_data_len; i++) {
+ data_ptr[i] = p.readInt32();
+ }
+
+ ret = SSMWriteNTypes(tmp_offset, tmp_data_len, data_ptr);
+
+ delete data_ptr;
+ data_ptr = NULL;
+ }
+ }
+
+ r->writeInt32(ret);
+ break;
+ }
+ case SSM_READ_N_BYTES: {
+ int i = 0, tmp_offset = 0, tmp_data_len = 0, ret = -1;
+ tmp_offset = p.readInt32();
+ tmp_data_len = p.readInt32();
+
+ if (tmp_data_len > 0) {
+ data_ptr = new int[tmp_data_len];
+ if (data_ptr != NULL) {
+ ret = SSMReadNTypes(tmp_offset, tmp_data_len, data_ptr);
+ if (ret < 0) {
+ tmp_data_len = 0;
+ }
+ r->writeInt32(tmp_data_len);
+ for (i = 0; i < tmp_data_len; i++) {
+ r->writeInt32(data_ptr[i]);
+ }
+ delete data_ptr;
+ data_ptr = NULL;
+ }
+ }
+ r->writeInt32(ret);
+ break;
+ }*/
+ case SSM_SAVE_POWER_ON_OFF_CHANNEL: {
+ int tmpPowerChanNum = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSavePowerOnOffChannel(tmpPowerChanNum);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_POWER_ON_OFF_CHANNEL: {
+ int tmpRet = 0;
+ tmpRet = SSMReadPowerOnOffChannel();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_SOURCE_INPUT: {
+ int tmpSouceInput = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveSourceInput(tmpSouceInput);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_SOURCE_INPUT: {
+ int tmpRet = 0;
+ tmpRet = SSMReadSourceInput();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_LAST_SOURCE_INPUT: {
+ int tmpLastSouceInput = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveLastSelectSourceInput(tmpLastSouceInput);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_LAST_SOURCE_INPUT: {
+ int tmpRet = 0;
+ tmpRet = SSMReadLastSelectSourceInput();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_SYS_LANGUAGE: {
+ int tmpVal = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveSystemLanguage(tmpVal);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_SYS_LANGUAGE: {
+ int tmpRet = 0;
+ tmpRet = SSMReadSystemLanguage();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_AGING_MODE: {
+ int tmpVal = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveAgingMode(tmpVal);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_AGING_MODE: {
+ int tmpRet = 0;
+ tmpRet = SSMReadAgingMode();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_PANEL_TYPE: {
+ int tmpVal = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSavePanelType(tmpVal);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_PANEL_TYPE: {
+ int tmpRet = 0;
+ tmpRet = SSMReadPanelType();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_MAC_ADDR: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ tmp_buf_size = p.readInt32();
+ for (i = 0; i < tmp_buf_size; i++) {
+ tmp_uc_buf[i] = p.readInt32();
+ }
+ ret = KeyData_SaveMacAddress(tmp_uc_buf);
+ r->writeInt32(ret);
+ break;
+ }
+ case SSM_READ_MAC_ADDR: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ ret = KeyData_ReadMacAddress(tmp_uc_buf);
+ tmp_buf_size = KeyData_GetMacAddressDataLen();
+ r->writeInt32(tmp_buf_size);
+ for (i = 0; i < tmp_buf_size; i++) {
+ r->writeInt32(tmp_uc_buf[i]);
+ }
+ r->writeInt32(ret);
+ break;
+ }
+ case SSM_SAVE_BAR_CODE: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ tmp_buf_size = p.readInt32();
+ for (i = 0; i < tmp_buf_size; i++) {
+ tmp_uc_buf[i] = p.readInt32();
+ }
+ ret = KeyData_SaveBarCode(tmp_uc_buf);
+ r->writeInt32(ret);
+ break;
+ }
+ case SSM_READ_BAR_CODE: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ ret = KeyData_ReadBarCode(tmp_uc_buf);
+ tmp_buf_size = KeyData_GetBarCodeDataLen();
+ r->writeInt32(tmp_buf_size);
+ for (i = 0; i < tmp_buf_size; i++) {
+ r->writeInt32(tmp_uc_buf[i]);
+ }
+ r->writeInt32(ret);
+ break;
+ }
+ case SSM_SAVE_PROJECT_ID: {
+ int tmpVal = p.readInt32();
+ int tmpRet;
+ tmpRet = KeyData_SaveProjectID(tmpVal);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_PROJECT_ID: {
+ int tmpRet = 0;
+ tmpRet = KeyData_ReadProjectID();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_HDCPKEY: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ tmp_buf_size = p.readInt32();
+ for (i = 0; i < tmp_buf_size; i++) {
+ tmp_uc_buf[i] = p.readInt32();
+ }
+ ret = SSMSaveHDCPKey(tmp_uc_buf);
+ r->writeInt32(ret);
+ break;
+ }
+ case SSM_READ_HDCPKEY: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ ret = SSMReadHDCPKey(tmp_uc_buf);
+ tmp_buf_size = SSMGetHDCPKeyDataLen();
+ r->writeInt32(tmp_buf_size);
+ for (i = 0; i < tmp_buf_size; i++) {
+ r->writeInt32(tmp_uc_buf[i]);
+ }
+ r->writeInt32(ret);
+ break;
+ }
+ case SSM_SAVE_POWER_ON_MUSIC_SWITCH: {
+ int tmpVal = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSavePowerOnMusicSwitch(tmpVal);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_POWER_ON_MUSIC_SWITCH: {
+ int tmpRet = 0;
+ tmpRet = SSMReadPowerOnMusicSwitch();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_POWER_ON_MUSIC_VOL: {
+ int tmpVal = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSavePowerOnMusicVolume(tmpVal);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_POWER_ON_MUSIC_VOL: {
+ int tmpRet = 0;
+ tmpRet = SSMReadPowerOnMusicVolume();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_SYS_SLEEP_TIMER: {
+ int tmpVal = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveSystemSleepTimer(tmpVal);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_SYS_SLEEP_TIMER: {
+ int tmpRet = 0;
+ tmpRet = SSMReadSystemSleepTimer();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SET_BUS_STATUS: {
+ int tmpVal = p.readInt32();
+ int tmpRet = 0;
+ //showboz
+ //tmpRet = SSMSetBusStatus(tmpVal);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_GET_BUS_STATUS: {
+ int tmpRet = 0;
+ //showboz
+ //tmpRet = SSMGetBusStatus();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_INPUT_SRC_PARENTAL_CTL: {
+ int tmpSourceIndex = p.readInt32();
+ int tmpCtlFlag = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveInputSourceParentalControl(tmpSourceIndex, tmpCtlFlag);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_INPUT_SRC_PARENTAL_CTL: {
+ int tmpSourceIndex = p.readInt32();
+ int tmpRet = 0;
+ tmpRet = SSMReadInputSourceParentalControl(tmpSourceIndex);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_PARENTAL_CTL_SWITCH: {
+ int tmpSwitchFlag = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveParentalControlSwitch(tmpSwitchFlag);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_PARENTAL_CTL_SWITCH: {
+ int tmpRet = 0;
+ tmpRet = SSMReadParentalControlSwitch();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_PARENTAL_CTL_PASS_WORD: {
+ String16 pass_wd_str = p.readString16();
+ int tmpRet;
+ tmpRet = SSMSaveParentalControlPassWord((unsigned char *)pass_wd_str.string(), pass_wd_str.size() * sizeof(unsigned short));
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_PARENTAL_CTL_PASS_WORD: {
+ int tmpChanID = p.readInt32();
+ unsigned short tmp_buf [SSM_RW_PARENTAL_CTL_PASSWORD_LEN + 1];
+ String16 pass_wd_str;
+ SSMReadParentalControlPassWord(tmp_buf);
+ tmp_buf[SSM_RW_PARENTAL_CTL_PASSWORD_LEN / sizeof(unsigned short)] = 0;
+ pass_wd_str.setTo((const unsigned short *) tmp_buf);
+ r->writeString16(pass_wd_str);
+ break;
+ }
+ case SSM_SAVE_USING_DEF_HDCP_KEY_FLAG: {
+ break;
+ }
+ case SSM_READ_USING_DEF_HDCP_KEY_FLAG: {
+ break;
+ }
+ case SSM_GET_CUSTOMER_DATA_START: {
+ int tmpRet = 0;
+ tmpRet = SSMGetCustomerDataStart();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_GET_CUSTOMER_DATA_LEN: {
+ int tmpRet = 0;
+ tmpRet = SSMGetCustomerDataLen();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_STANDBY_MODE: {
+ int tmp_val = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveStandbyMode(tmp_val);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_STANDBY_MODE: {
+ int tmpRet = 0;
+ tmpRet = SSMReadStandbyMode();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_LOGO_ON_OFF_FLAG: {
+ int tmpSwitchFlag = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveLogoOnOffFlag(tmpSwitchFlag);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_LOGO_ON_OFF_FLAG: {
+ int tmpRet = 0;
+ tmpRet = SSMReadLogoOnOffFlag();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_HDMIEQ_MODE: {
+ int tmpSwitchFlag = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveHDMIEQMode(tmpSwitchFlag);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_HDMIEQ_MODE: {
+ int tmpRet = 0;
+ tmpRet = SSMReadHDMIEQMode();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_HDMIINTERNAL_MODE: {
+ int tmp_val = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveHDMIInternalMode(tmp_val);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_HDMIINTERNAL_MODE: {
+ int tmpRet = 0;
+ tmpRet = SSMReadHDMIInternalMode();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_DISABLE_3D: {
+ int tmp_val = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveDisable3D(tmp_val);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_DISABLE_3D: {
+ int tmpRet = 0;
+ tmpRet = SSMReadDisable3D();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_GLOBAL_OGOENABLE: {
+ int tmp_val = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveGlobalOgoEnable(tmp_val);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_GLOBAL_OGOENABLE: {
+ int tmpRet = 0;
+ tmpRet = SSMReadGlobalOgoEnable();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_NON_STANDARD_STATUS: {
+ int tmp_val = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveNonStandardValue(tmp_val);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_NON_STANDARD_STATUS: {
+ int tmpRet = 0;
+ tmpRet = SSMReadNonStandardValue();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_ADB_SWITCH_STATUS: {
+ int tmp_val = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveAdbSwitchValue(tmp_val);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_ADB_SWITCH_STATUS: {
+ int tmpRet = 0;
+ tmpRet = SSMReadAdbSwitchValue();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_SERIAL_CMD_SWITCH_STATUS: {
+ int tmp_val = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveSerialCMDSwitchValue(tmp_val);
+ tmpRet |= mpTv->SetSerialSwitch(SERIAL_A, tmp_val);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_SERIAL_CMD_SWITCH_STATUS: {
+ int tmpRet = 0;
+ tmpRet = SSMReadSerialCMDSwitchValue();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SET_HDCP_KEY: {
+ int tmpRet = 0;
+ tmpRet = SSMSetHDCPKey();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_REFRESH_HDCPKEY: {
+ int tmpRet = 0;
+ tmpRet = SSMRefreshHDCPKey();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_CHROMA_STATUS: {
+ int tmp_val = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveChromaStatus(tmp_val);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_CA_BUFFER_SIZE: {
+ int tmp_val = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveCABufferSizeValue(tmp_val);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_CA_BUFFER_SIZE: {
+ int tmpRet = 0;
+ tmpRet = SSMReadCABufferSizeValue();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_GET_ATV_DATA_START: {
+ int tmpRet = 0;
+ tmpRet = SSMGetATVDataStart();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_GET_ATV_DATA_LEN: {
+ int tmpRet = 0;
+ tmpRet = SSMGetATVDataLen();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_GET_VPP_DATA_START: {
+ int tmpRet = 0;
+ tmpRet = SSMGetVPPDataStart();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_GET_VPP_DATA_LEN: {
+ int tmpRet = 0;
+ tmpRet = SSMGetVPPDataLen();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_SAVE_NOISE_GATE_THRESHOLD_STATUS: {
+ int tmp_val = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveNoiseGateThresholdValue(tmp_val);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_READ_NOISE_GATE_THRESHOLD_STATUS: {
+ int tmpRet = 0;
+ tmpRet = SSMReadNoiseGateThresholdValue();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_EEPROM_SAVE_ONE_BYTE_N310_N311: {
+ int tmpOffset = p.readInt32();
+ int tmpVal = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveEEP_One_N310_N311(tmpOffset, tmpVal);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_EEPROM_READ_ONE_BYTE_N310_N311: {
+ int tmpOffset = p.readInt32();
+ int tmpRet = 0;
+ tmpRet = SSMReadEEP_One_N310_N311(tmpOffset);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_EEPROM_SAVE_N_BYTES_N310_N311: {
+ int i = 0, tmp_offset = 0, tmp_data_len = 0, ret = -1;
+
+ tmp_offset = p.readInt32();
+ tmp_data_len = p.readInt32();
+
+ if (tmp_data_len > 0) {
+ data_ptr = new int[tmp_data_len];
+
+ if (data_ptr != NULL) {
+ for (i = 0; i < tmp_data_len; i++) {
+ data_ptr[i] = p.readInt32();
+ }
+
+ ret = SSMSaveEEP_N_N310_N311(tmp_offset, tmp_data_len, data_ptr);
+
+ delete data_ptr;
+ data_ptr = NULL;
+ }
+ }
+
+ r->writeInt32(ret);
+ break;
+ }
+ case SSM_EEPROM_READ_N_BYTES_N310_N311: {
+ int i = 0, tmp_offset = 0, tmp_data_len = 0, ret = -1;
+ tmp_offset = p.readInt32();
+ tmp_data_len = p.readInt32();
+
+ if (tmp_data_len > 0) {
+ data_ptr = new int[tmp_data_len];
+ if (data_ptr != NULL) {
+ ret = SSMReadEEP_N_N310_N311(tmp_offset, tmp_data_len, data_ptr);
+ if (ret < 0) {
+ tmp_data_len = 0;
+ }
+ r->writeInt32(tmp_data_len);
+ for (i = 0; i < tmp_data_len; i++) {
+ r->writeInt32(data_ptr[i]);
+ }
+ delete data_ptr;
+ data_ptr = NULL;
+ }
+ }
+ r->writeInt32(ret);
+ break;
+ }
+ case SSM_FLASH_SAVE_ONE_BYTE_N310_N311: {
+ int tmpOffset = p.readInt32();
+ int tmpVal = p.readInt32();
+ int tmpRet;
+ tmpRet = SSMSaveFlash_One_N310_N311(tmpOffset, tmpVal);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_FLASH_READ_ONE_BYTE_N310_N311: {
+ int tmpOffset = p.readInt32();
+ int tmpRet = 0;
+ tmpRet = SSMReadFlash_One_N310_N311(tmpOffset);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case SSM_FLASH_SAVE_N_BYTES_N310_N311: {
+ int i = 0, tmp_offset = 0, tmp_data_len = 0, ret = -1;
+
+ tmp_offset = p.readInt32();
+ tmp_data_len = p.readInt32();
+
+ if (tmp_data_len > 0) {
+ data_ptr = new int[tmp_data_len];
+
+ if (data_ptr != NULL) {
+ for (i = 0; i < tmp_data_len; i++) {
+ data_ptr[i] = p.readInt32();
+ }
+
+ ret = SSMSaveFlash_N_N310_N311(tmp_offset, tmp_data_len, data_ptr);
+
+ delete data_ptr;
+ data_ptr = NULL;
+ }
+ }
+
+ r->writeInt32(ret);
+ break;
+ }
+ case SSM_FLASH_READ_N_BYTES_N310_N311: {
+ int i = 0, tmp_offset = 0, tmp_data_len = 0, ret = -1;
+ tmp_offset = p.readInt32();
+ tmp_data_len = p.readInt32();
+
+ if (tmp_data_len > 0) {
+ data_ptr = new int[tmp_data_len];
+ if (data_ptr != NULL) {
+ ret = SSMReadFlash_N_N310_N311(tmp_offset, tmp_data_len, data_ptr);
+ if (ret < 0) {
+ tmp_data_len = 0;
+ }
+ r->writeInt32(tmp_data_len);
+ for (i = 0; i < tmp_data_len; i++) {
+ r->writeInt32(data_ptr[i]);
+ }
+ delete data_ptr;
+ data_ptr = NULL;
+ }
+ }
+ r->writeInt32(ret);
+ break;
+ }
+ // SSM END
+
+ //MISC
+ case MISC_PROP_SET: {
+ int tmpRet;
+ String16 tmp_str16;
+ String8 key_str, value_str;
+
+ tmp_str16 = p.readString16();
+ key_str = String8(tmp_str16);
+ tmp_str16 = p.readString16();
+ value_str = String8(tmp_str16);
+
+ tmpRet = property_set(key_str.string(), value_str.string());
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case MISC_PROP_GET: {
+ char prop_value[PROPERTY_VALUE_MAX];
+ String16 tmp_str16;
+ String8 key_str, def_str;
+
+ tmp_str16 = p.readString16();
+ key_str = String8(tmp_str16);
+ tmp_str16 = p.readString16();
+ def_str = String8(tmp_str16);
+
+ memset(prop_value, '\0', PROPERTY_VALUE_MAX);
+ property_get(key_str.string(), prop_value, def_str.string());
+ tmp_str16 = String16(prop_value);
+
+ r->writeString16(tmp_str16);
+ break;
+ }
+ case MISC_CFG_SET: {
+ int tmpRet;
+ String16 tmp_str16;
+ String8 key_str, value_str;
+
+ tmp_str16 = p.readString16();
+ key_str = String8(tmp_str16);
+ tmp_str16 = p.readString16();
+ value_str = String8(tmp_str16);
+
+ tmpRet = config_set_str("TV", key_str.string(), value_str.string());
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case MISC_CFG_GET: {
+ const char *prop_value;
+ String16 tmp_str16;
+ String8 key_str, def_str;
+
+ tmp_str16 = p.readString16();
+ key_str = String8(tmp_str16);
+ tmp_str16 = p.readString16();
+ def_str = String8(tmp_str16);
+
+ prop_value = config_get_str("TV", key_str.string(), def_str.string());
+ tmp_str16 = String16(prop_value);
+
+ r->writeString16(tmp_str16);
+ break;
+ }
+ case MISC_READ_ADC_VAL: {
+ int tmpChanNum = p.readInt32();
+ int tmpRet = 0;
+ tmpRet = ReadADCSpecialChannelValue(tmpChanNum);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case MISC_SET_WDT_USER_PET: {
+ int counter = p.readInt32();
+ int ret = TvMisc_SetUserCounter(counter);
+ r->writeInt32(ret);
+ break;
+ }
+ case MISC_SET_WDT_USER_COUNTER: {
+ int counter_time_out = p.readInt32();
+ int ret = TvMisc_SetUserCounterTimeOut(counter_time_out);
+ r->writeInt32(ret);
+ break;
+ }
+ case MISC_SET_WDT_USER_PET_RESET_ENABLE: {
+ int enable = p.readInt32();
+ int ret = TvMisc_SetUserPetResetEnable(enable);
+ r->writeInt32(ret);
+ break;
+ }
+ case MISC_GET_TV_API_VERSION: {
+ const char *tmp_str8;
+ String16 tmp_str16;
+
+ // write tvapi version info
+ tmp_str8 = tvservice_get_git_branch_info();
+ tmp_str16 = String16(tmp_str8);
+ r->writeString16(tmp_str16);
+
+ tmp_str8 = tvservice_get_git_version_info();
+ tmp_str16 = String16(tmp_str8);
+ r->writeString16(tmp_str16);
+
+ tmp_str8 = tvservice_get_last_chaned_time_info();
+ tmp_str16 = String16(tmp_str8);
+ r->writeString16(tmp_str16);
+
+ tmp_str8 = tvservice_get_build_time_info();
+ tmp_str16 = String16(tmp_str8);
+ r->writeString16(tmp_str16);
+
+ tmp_str8 = tvservice_get_build_name_info();
+ tmp_str16 = String16(tmp_str8);
+ r->writeString16(tmp_str16);
+ break;
+ }
+ case MISC_GET_DVB_API_VERSION: {
+ const char *tmp_str8;
+ String16 tmp_str16;
+
+ // write dvb version info
+ tmp_str8 = dvb_get_git_branch_info();
+ tmp_str16 = String16(tmp_str8);
+ r->writeString16(tmp_str16);
+
+ tmp_str8 = dvb_get_git_version_info();
+ tmp_str16 = String16(tmp_str8);
+ r->writeString16(tmp_str16);
+
+ tmp_str8 = dvb_get_last_chaned_time_info();
+ tmp_str16 = String16(tmp_str8);
+ r->writeString16(tmp_str16);
+
+ tmp_str8 = dvb_get_build_time_info();
+ tmp_str16 = String16(tmp_str8);
+ r->writeString16(tmp_str16);
+
+ tmp_str8 = dvb_get_build_name_info();
+ tmp_str16 = String16(tmp_str8);
+ r->writeString16(tmp_str16);
+
+ break;
+ }
+ case MISC_SERIAL_SWITCH: {
+ int dev_id = p.readInt32();
+ int switch_val = p.readInt32();
+ int ret = mpTv->SetSerialSwitch(dev_id, switch_val);
+ r->writeInt32(ret);
+ break;
+ }
+ case MISC_SERIAL_SEND_DATA: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+
+ int dev_id = p.readInt32();
+
+ tmp_buf_size = p.readInt32();
+ if (tmp_buf_size > sizeof(tmp_uc_buf)) {
+ tmp_buf_size = sizeof(tmp_uc_buf);
+ }
+
+ for (i = 0; i < tmp_buf_size; i++) {
+ tmp_uc_buf[i] = p.readInt32() & 0xFF;
+ }
+
+ ret = mpTv->SendSerialData(dev_id, tmp_buf_size, tmp_uc_buf);
+ r->writeInt32(ret);
+ break;
+ }
+ case MISC_CHANNEL_EXPORT: {
+ LOGD("MISC_CHANNEL_EXPORT");
+ int ret = 0;
+ String16 tmp_str16;
+ String8 tmp_str;
+
+ tmp_str16 = p.readString16();
+ tmp_str = String8(tmp_str16);
+
+ ret = mpTv->ChannelExport(tmp_str.string());
+ r->writeInt32(ret);
+ break;
+ }
+ case MISC_CHANNEL_IMPORT: {
+ LOGD("MISC_CHANNEL_IMPORT");
+ String16 tmp_str16;
+ String8 tmp_str;
+
+ tmp_str16 = p.readString16();
+ tmp_str = String8(tmp_str16);
+ int ret = 0;
+ ret = mpTv->ChannelImport(tmp_str.string());
+ r->writeInt32(ret);
+ break;
+ }
+ case MISC_GET_PROJECT_INFO: {
+ String16 tmp_str16;
+ project_info_t tmpInfo;
+
+ if (mpTv->Tv_GetProjectInfo(&tmpInfo) < 0) {
+ strcpy(tmpInfo.version, "UNKOWN");
+ strcpy(tmpInfo.panel_type, "UNKOWN");
+ strcpy(tmpInfo.panel_outputmode, "UNKOWN");
+ strcpy(tmpInfo.panel_rev, "UNKOWN");
+ strcpy(tmpInfo.panel_name, "UNKOWN");
+ strcpy(tmpInfo.amp_curve_name, "UNKOWN");
+ }
+
+ r->writeString16(String16(tmpInfo.version));
+ r->writeString16(String16(tmpInfo.panel_type));
+ r->writeString16(String16(tmpInfo.panel_outputmode));
+ r->writeString16(String16(tmpInfo.panel_rev));
+ r->writeString16(String16(tmpInfo.panel_name));
+ r->writeString16(String16(tmpInfo.amp_curve_name));
+ break;
+ }
+ case MISC_GET_PLATFORM_TYPE: {
+ int ret = mpTv->Tv_GetPlatformType();
+ r->writeInt32(ret);
+ break;
+ }
+ //MISC END
+
+ // EXTAR
+ case DELETE_DIR_FILES: {
+ String16 strPath = p.readString16();
+ if(strPath.size() <= 0) {
+ r->writeInt32(-1);
+ break;
+ }
+ String8 strP8 = String8(strPath);
+ int tmp_flag = p.readInt32();
+ int ret = TvMisc_DeleteDirFiles(strP8.string(), tmp_flag);
+ r->writeInt32(ret);
+ break;
+ }
+ case ATV_GET_CURRENT_PROGRAM_ID: {
+ int atvLastProgramId = mpTv->getATVProgramID();
+ r->writeInt32(atvLastProgramId);
+ break;
+ }
+ case DTV_GET_CURRENT_PROGRAM_ID: {
+ int dtvLastProgramId = mpTv->getDTVProgramID();
+ r->writeInt32(dtvLastProgramId);
+ break;
+ }
+ case ATV_SAVE_PROGRAM_ID: {
+ int progID = p.readInt32();
+ int retCnt = 0;
+ mpTv->saveATVProgramID(progID);
+ r->writeInt32(retCnt);
+ break;
+ }
+ case ATV_GET_MIN_MAX_FREQ: {
+ int min, max;
+ int tmpRet = mpTv->getATVMinMaxFreq(&min, &max);
+ r->writeInt32(min);
+ r->writeInt32(max);
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case DTV_GET_SCAN_FREQUENCY_LIST: {
+ Vector<sp<CTvChannel> > out;
+ int tmpRet = CTvRegion::getChannelListByName("CHINA,Default DTMB ALL", out);
+ r->writeInt32(out.size());
+ for(int i = 0; i < out.size(); i++) {
+ r->writeInt32(out[i]->getID());
+ r->writeInt32(out[i]->getFrequency());
+ }
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case DTV_GET_CHANNEL_INFO: {
+ int dbID = p.readInt32();
+ channel_info_t chan_info;
+ int ret = mpTv->getChannelInfoBydbID(dbID, chan_info);
+ r->writeInt32(chan_info.freq);
+ r->writeInt32(chan_info.uInfo.dtvChanInfo.strength);
+ r->writeInt32(chan_info.uInfo.dtvChanInfo.quality);
+ r->writeInt32(chan_info.uInfo.dtvChanInfo.ber);
+ r->writeInt32(ret);
+ break;
+ }
+ case ATV_GET_CHANNEL_INFO: {
+ int dbID = p.readInt32();
+ channel_info_t chan_info;
+ int ret = mpTv->getChannelInfoBydbID(dbID, chan_info);
+ r->writeInt32(chan_info.freq);
+ r->writeInt32(chan_info.uInfo.atvChanInfo.finefreq);
+ r->writeInt32(chan_info.uInfo.atvChanInfo.videoStd);
+ r->writeInt32(chan_info.uInfo.atvChanInfo.audioStd);
+ r->writeInt32(chan_info.uInfo.atvChanInfo.isAutoStd);
+ r->writeInt32(ret);
+ break;
+ }
+ case ATV_SCAN_MANUAL: {
+ int tmpRet = 0;
+ int startFreq = p.readInt32();
+ int endFreq = p.readInt32();
+ int videoStd = p.readInt32();
+ int audioStd = p.readInt32();
+ tmpRet = mpTv->atvMunualScan(startFreq, endFreq, videoStd, audioStd);
+ mTvService->mpScannerClient = this;
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case ATV_SCAN_MANUAL_BY_NUMBER: {
+ int tmpRet = 0;
+ int startFreq = p.readInt32();
+ int endFreq = p.readInt32();
+ int videoStd = p.readInt32();
+ int audioStd = p.readInt32();
+ int storeType = p.readInt32();
+ int currentNum = p.readInt32();
+ tmpRet = mpTv->atvMunualScan(startFreq, endFreq, videoStd, audioStd, storeType, currentNum);
+ mTvService->mpScannerClient = this;
+ r->writeInt32(tmpRet);
+ break;
+ }
+
+ case ATV_SCAN_AUTO: {
+ int tmpRet = 0;
+ LOGD("%s, atv auto scan!!!\n", "TV");
+ int videoStd = p.readInt32();
+ int audioStd = p.readInt32();
+ int searchType = p.readInt32();
+ tmpRet = mpTv->atvAutoScan(videoStd, audioStd, searchType);
+ mTvService->mpScannerClient = this;
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case DTV_SCAN_MANUAL: {
+ int tmpRet = 0;
+ int freq = p.readInt32();
+ tmpRet = mpTv->dtvManualScan(freq, freq);
+ mTvService->mpScannerClient = this;
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case DTV_SCAN_MANUAL_BETWEEN_FREQ: {
+ int tmpRet = 0;
+ int beginFreq = p.readInt32();
+ int endFreq = p.readInt32();
+ int modulation = p.readInt32();
+ tmpRet = mpTv->dtvManualScan(beginFreq, endFreq, modulation);
+ mTvService->mpScannerClient = this;
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case DTV_SCAN_AUTO: {
+ int tmpRet = 0;
+ tmpRet = mpTv->dtvAutoScan();
+ mTvService->mpScannerClient = this;
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case DTV_SCAN_AUTO_ATSC: {
+ int tmpRet = 0;
+ int attenna = p.readInt32();
+ int vstd = p.readInt32();
+ int astd = p.readInt32();
+ tmpRet = mpTv->dtvAutoScanAtscLock(attenna, vstd, astd);
+ mTvService->mpScannerClient = this;
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case TV_SUBTITLE_DRAW_END: {
+ int tmpRet = 0;
+ //if(pSub)pSub->lock.unlock();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case STOP_PROGRAM_PLAY: {
+ int tmpRet = -1;
+ tmpRet = mpTv->stopPlayingLock();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case DTV_TEST_1: {
+ // int progid = p.readInt32();
+ //CTvProgram prog;
+ // int ret = CTvProgram::selectByID(progid, prog);
+ //CTvEvent ev;
+ //ret = ev.getProgPresentEvent(prog.getSrc(), prog.getID(), mpTv->getTvTime(), ev);
+ //r->writeString16(String16(ev.getName()));
+ break;
+ }
+ case DTV_TEST_2: {
+ //int cmd = p.readInt32();
+ //CTvDatabase::GetTvDb()->importXmlToDB("/etc/tv_default.xml");
+ //r->writeString16(String16("xml"));
+ break;
+ }
+
+ case TV_CLEAR_ALL_PROGRAM: {
+ int tmpRet = 0;
+ int arg0 = p.readInt32();
+
+ tmpRet = mpTv->clearAllProgram(arg0);
+ mTvService->mpScannerClient = this;
+ r->writeInt32(tmpRet);
+ break;
+ }
+
+ case GET_DISPLAY_RESOLUTION_CONFIG: {
+ int tmpRet = 0;
+ tmpRet = mpTv->GetDisplayResolutionConfig();
+ r->writeInt32(tmpRet);
+ break;
+ }
+
+ case GET_DISPLAY_RESOLUTION_INFO: {
+ int tmpRet = 0;
+ tmpRet = mpTv->GetDisplayResolutionInfo();
+ r->writeInt32(tmpRet);
+ break;
+ }
+
+ case HDMIRX_CEC_SEND_CUSTOM_MESSAGE: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ tmp_buf_size = p.readInt32();
+ for (i = 0; i < tmp_buf_size; i++) {
+ tmp_uc_buf[i] = p.readInt32();
+ }
+
+ int tmpRet = 0;
+ tmpRet = mpTv->SendHDMIRxCECCustomMessage(tmp_uc_buf);
+ r->writeInt32(tmpRet);
+ break;
+ }
+
+ case HDMIRX_CEC_SEND_CUSTOM_WAIT_REPLY_MESSAGE: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ int WaitCmd = 0, timeout = 0;
+ tmp_buf_size = p.readInt32();
+ for (i = 0; i < tmp_buf_size; i++) {
+ tmp_uc_buf[i] = p.readInt32();
+ }
+
+ WaitCmd = p.readInt32();
+ timeout = p.readInt32();
+
+ int tmpRet = 0;
+ tmpRet = mpTv->SendHDMIRxCECCustomMessageAndWaitReply(tmp_uc_buf, tmp_uc_buf2, WaitCmd, timeout);
+
+ r->writeInt32(tmpRet);
+ if(tmpRet > 0) {
+ for (i = 0; i < tmpRet; i++) {
+ r->writeInt32(tmp_uc_buf2[i]);
+ }
+ }
+
+ r->writeInt32(tmpRet);
+ break;
+ }
+
+ case HDMIRX_CEC_SEND_BROADCAST_STANDBY_MESSAGE: {
+ int tmpRet = 0;
+ tmpRet = mpTv->SendHDMIRxCECBoradcastStandbyMessage();
+ r->writeInt32(tmpRet);
+ break;
+ }
+
+ case HDMIRX_CEC_SEND_GIVE_CEC_VERSION_MESSAGE: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ int sourceinput = p.readInt32();
+ LOGD("HDMIRX_CEC_SEND_GIVE_CEC_VERSION_MESSAGE: sourceinput = %x", sourceinput);
+ tmp_buf_size = mpTv->SendHDMIRxCECGiveCECVersionMessage((tv_source_input_t)sourceinput, tmp_uc_buf);
+ r->writeInt32(tmp_buf_size);
+ for (i = 0; i < tmp_buf_size; i++) {
+ r->writeInt32(tmp_uc_buf[i]);
+ }
+ r->writeInt32(tmp_buf_size);
+ break;
+ }
+
+ case HDMIRX_CEC_SEND_GIVE_DEV_VENDOR_ID_MESSAGE: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ int sourceinput = p.readInt32();
+ LOGD("HDMIRX_CEC_SEND_GIVE_DEV_VENDOR_ID_MESSAGE: sourceinput = %x", sourceinput);
+ tmp_buf_size = mpTv->SendHDMIRxCECGiveDeviceVendorIDMessage((tv_source_input_t)sourceinput, tmp_uc_buf);
+ r->writeInt32(tmp_buf_size);
+ for (i = 0; i < tmp_buf_size; i++) {
+ r->writeInt32(tmp_uc_buf[i]);
+ }
+ r->writeInt32(tmp_buf_size);
+ break;
+ }
+
+ case HDMIRX_CEC_SEND_GIVE_OSD_NAME_MESSAGE: {
+ int i = 0, tmp_buf_size = 0, ret = 0;
+ int sourceinput = p.readInt32();
+ LOGD("HDMIRX_CEC_SEND_GIVE_OSD_NAME_MESSAGE: sourceinput = %x", sourceinput);
+ tmp_buf_size = mpTv->SendHDMIRxCECGiveOSDNameMessage((tv_source_input_t)sourceinput, tmp_uc_buf);
+ r->writeInt32(tmp_buf_size);
+ for (i = 0; i < tmp_buf_size; i++) {
+ r->writeInt32(tmp_uc_buf[i]);
+ }
+ r->writeInt32(tmp_buf_size);
+ break;
+ }
+
+ case GET_HDMI_KSV_INFO: {
+ int tmpRet = 0;
+ int ksv_data[2] = {0, 0};
+ tmpRet = mpTv->GetHdmiHdcpKeyKsvInfo(ksv_data);
+ r->writeInt32(tmpRet);
+ r->writeInt32(ksv_data[0]);
+ r->writeInt32(ksv_data[1]);
+ break;
+ }
+
+ case FACTORY_FBC_UPGRADE: {
+ String16 tmpName = p.readString16();
+ String8 strName = String8(tmpName);
+ sprintf((char *)tmp_uc_buf, "%s", strName.string());
+ int mode = p.readInt32();
+ int upgrade_blk_size = p.readInt32();
+ int ret = mpTv->StartUpgradeFBC((char *)tmp_uc_buf, mode, upgrade_blk_size);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_BRIGHTNESS: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Brightness(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_BRIGHTNESS: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Brightness();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_CONTRAST: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Contrast(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_CONTRAST: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Contrast();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_SATURATION: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Saturation(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_SATURATION: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Saturation();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_HUE: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_HueColorTint(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_HUE: {
+ int ret = mpTv->Tv_FactoryGet_FBC_HueColorTint();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_BACKLIGHT: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Backlight(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_BACKLIGHT: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Backlight();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_FBC_SET_BACKLIGHT_N360: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Backlight_N360(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_BACKLIGHT_N360: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Backlight_N360();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTROY_FBC_SET_LIGHT_SENSOR_STATUS_N310: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_LightSensor_Status_N310(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTROY_FBC_GET_LIGHT_SENSOR_STATUS_N310: {
+ int ret = mpTv->Tv_FactoryGet_FBC_LightSensor_Status_N310();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTROY_FBC_SET_DREAM_PANEL_STATUS_N310: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Dream_Panel_Status_N310(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTROY_FBC_GET_DREAM_PANEL_STATUS_N310: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Dream_Panel_Status_N310();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTROY_FBC_SET_MULT_PQ_STATUS_N310: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_MULT_PQ_Status_N310(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTROY_FBC_GET_MULT_PQ_STATUS_N310: {
+ int ret = mpTv->Tv_FactoryGet_FBC_MULT_PQ_Status_N310();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTROY_FBC_SET_MEMC_STATUS_N310: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_MEMC_Status_N310(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTROY_FBC_GET_MEMC_STATUS_N310: {
+ int ret = mpTv->Tv_FactoryGet_FBC_MEMC_Status_N310();
+ r->writeInt32(ret);
+ break;
+ }
+
+
+ case FACTORY_FBC_SET_BACKLIGHT_EN : {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_backlight_onoff(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_BACKLIGHT_EN: {
+ int ret = mpTv->Tv_FactoryGet_FBC_backlight_onoff();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_LVDS_SSG: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_LVDS_SSG_Set(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_ELEC_MODE: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_ELEC_MODE(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_ELEC_MODE: {
+ int ret = mpTv->Tv_FactoryGet_FBC_ELEC_MODE();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_PIC_MODE: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Picture_Mode(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_PIC_MODE: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Picture_Mode();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_TEST_PATTERN: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Set_Test_Pattern(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_TEST_PATTERN: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Get_Test_Pattern();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_GAIN_RED: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Gain_Red(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_GAIN_RED: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Gain_Red();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_GAIN_GREEN: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Gain_Green(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_GAIN_GREEN: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Gain_Green();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_GAIN_BLUE: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Gain_Blue(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_GAIN_BLUE: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Gain_Blue();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_OFFSET_RED: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Offset_Red(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_OFFSET_RED: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Offset_Red();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_OFFSET_GREEN: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Offset_Green(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_OFFSET_GREEN: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Offset_Green();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_OFFSET_BLUE: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_Offset_Blue(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_OFFSET_BLUE: {
+ int ret = mpTv->Tv_FactoryGet_FBC_Offset_Blue();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_COLORTEMP_MODE: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_ColorTemp_Mode(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_COLORTEMP_MODE: {
+ int ret = mpTv->Tv_FactoryGet_FBC_ColorTemp_Mode();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_COLORTEMP_MODE_N360: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_ColorTemp_Mode_N360(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_COLORTEMP_MODE_N360: {
+ int ret = mpTv->Tv_FactoryGet_FBC_ColorTemp_Mode_N360();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_SET_WB_INIT: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySet_FBC_WB_Initial(value);
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_WB_INIT: {
+ int ret = mpTv->Tv_FactoryGet_FBC_WB_Initial();
+ r->writeInt32(ret);
+ break;
+ }
+
+ case FACTORY_FBC_GET_MAINCODE_VERSION: {
+ char sw_version[64];
+ char build_time[64];
+ char git_version[64];
+ char git_branch[64];
+ char build_name[64];
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_FBC_MAINCODE_Version(COMM_DEV_SERIAL, sw_version, build_time, git_version, git_branch, build_name);
+ r->writeString16(String16(sw_version));
+ r->writeString16(String16(build_time));
+ r->writeString16(String16(git_version));
+ r->writeString16(String16(git_branch));
+ r->writeString16(String16(build_name));
+ } else {
+ r->writeString16(String16("No FBC"));
+ r->writeString16(String16("No FBC"));
+ r->writeString16(String16("No FBC"));
+ r->writeString16(String16("No FBC"));
+ r->writeString16(String16("No FBC"));
+ }
+ break;
+ }
+ case FACTORY_SET_SN: {
+ char StrFactSN[64] = {0};
+ String16 strTemFactorySn = p.readString16();
+ String8 strFactorySn = String8(strTemFactorySn);
+ sprintf((char *)StrFactSN, "%s", strFactorySn.string());
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ int iRet = fbcIns->cfbc_Set_FBC_Factory_SN(COMM_DEV_SERIAL, (const char *)StrFactSN);
+ r->writeInt32(iRet);
+ } else {
+ r->writeInt32(-1);
+ }
+ break;
+ }
+ case FACTORY_GET_SN: {
+ char factorySerialNumber[64] = {0};
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_FBC_Factory_SN(COMM_DEV_SERIAL, factorySerialNumber);
+ r->writeString16(String16(factorySerialNumber));
+ } else {
+ r->writeString16(String16("No FBC"));
+ }
+ break;
+ }
+ case FACTORY_FBC_PANEL_GET_INFO: {
+ char panel_model[64];
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_FBC_Get_PANel_INFO(COMM_DEV_SERIAL, panel_model);
+ r->writeString16(String16(panel_model));
+ } else {
+ r->writeString16(String16(""));
+ }
+ break;
+ }
+ case FACTORY_FBC_PANEL_POWER_SWITCH: {
+ int value = p.readInt32();
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ int ret = fbcIns->cfbc_Set_FBC_panel_power_switch(COMM_DEV_SERIAL, value);
+ r->writeInt32(ret);
+ } else {
+ r->writeInt32(-1);
+ }
+ break;
+ }
+ case FACTORY_FBC_PANEL_SUSPEND: {
+ int value = p.readInt32();
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ int ret = fbcIns->cfbc_Set_FBC_suspend(COMM_DEV_SERIAL, value);
+ r->writeInt32(ret);
+ } else {
+ r->writeInt32(-1);
+ }
+ break;
+ }
+ case FACTORY_FBC_PANEL_USER_SETTING_DEFAULT: {
+ int value = p.readInt32();
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ int ret = fbcIns->cfbc_Set_FBC_User_Setting_Default(COMM_DEV_SERIAL, value);
+ r->writeInt32(ret);
+ } else {
+ r->writeInt32(-1);
+ }
+ break;
+ }
+ case FACTORY_FBC_POWER_REBOOT: {
+ int value = p.readInt32();
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ int ret = fbcIns->cfbc_SendRebootToUpgradeCmd(COMM_DEV_SERIAL, value);
+ r->writeInt32(ret);
+ } else {
+ r->writeInt32(-1);
+ }
+ break;
+ }
+ case FACTORY_FBC_SEND_KEY_TO_FBC: {
+ int keyCode = p.readInt32();
+ int param = p.readInt32();
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ int ret = fbcIns->cfbc_FBC_Send_Key_To_Fbc(COMM_DEV_SERIAL, keyCode, param);
+ r->writeInt32(ret);
+ } else {
+ r->writeInt32(-1);
+ }
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_SET_GAIN_RED: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySetWhiteBalanceRedGain(source_type, colortemp_mode, value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_GET_GAIN_RED: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetWhiteBalanceRedGain(source_type, colortemp_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_SET_GAIN_GREEN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySetWhiteBalanceGreenGain(source_type, colortemp_mode, value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_GET_GAIN_GREEN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetWhiteBalanceGreenGain(source_type, colortemp_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_SET_GAIN_BLUE: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySetWhiteBalanceBlueGain(source_type, colortemp_mode, value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_GET_GAIN_BLUE: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetWhiteBalanceBlueGain(source_type, colortemp_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_SET_OFFSET_RED: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySetWhiteBalanceRedOffset(source_type, colortemp_mode, value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_GET_OFFSET_RED: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetWhiteBalanceRedOffset(source_type, colortemp_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_SET_OFFSET_GREEN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySetWhiteBalanceGreenOffset(source_type, colortemp_mode, value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_GET_OFFSET_GREEN: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetWhiteBalanceGreenOffset(source_type, colortemp_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_SET_OFFSET_BLUE: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySetWhiteBalanceBlueOffset(source_type, colortemp_mode, value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_GET_OFFSET_BLUE: {
+ int source_type = p.readInt32();
+ int colortemp_mode = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetWhiteBalanceBlueOffset(source_type, colortemp_mode);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_GET_COLOR_TMP: {
+ int source_type = p.readInt32();
+ int ret = mpTv->Tv_FactoryGetWhiteBalanceColorTempMode(source_type);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_SET_COLOR_TMP: {
+ int source_type = p.readInt32();
+ int Tempmode = p.readInt32();
+ int is_save = p.readInt32();
+ int ret = mpTv->Tv_FactorySetWhiteBalanceColorTempMode(source_type, Tempmode, is_save);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_SAVE_PRAMAS: {
+ int source_type = p.readInt32();
+ int mode = p.readInt32();
+ int r_gain = p.readInt32();
+ int g_gain = p.readInt32();
+ int b_gain = p.readInt32();
+ int r_offset = p.readInt32();
+ int g_offset = p.readInt32();
+ int b_offset = p.readInt32();
+ int ret = mpTv->Tv_FactorySaveWhiteBalancePramas(source_type, mode, r_gain, g_gain, b_gain, r_offset, g_offset, b_offset);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_OPEN_GRAY_PATTERN: {
+ int ret = mpTv->Tv_FactoryOpenWhiteBalanceGrayPattern();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_CLOSE_GRAY_PATTERN: {
+ int ret = mpTv->Tv_FactoryCloseWhiteBalanceGrayPattern();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_SET_GRAY_PATTERN: {
+ int value = p.readInt32();
+ int ret = mpTv->Tv_FactorySetWhiteBalanceGrayPattern(value);
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_GET_GRAY_PATTERN: {
+ int ret = mpTv->Tv_FactoryGetWhiteBalanceGrayPattern();
+ r->writeInt32(ret);
+ break;
+ }
+ case FACTORY_WHITE_BALANCE_GET_ALL_PRAMAS: {
+ int Tempmode = p.readInt32();
+ int ret = -1;
+ tcon_rgb_ogo_t params;
+ if (GetPlatformHaveFBCFlag() == 0) { //T868
+ ret = mpTv->GetColorTemperatureParams((vpp_color_temperature_mode_t)Tempmode, &params);
+ } else { //T866
+ ret = mpTv->Tv_FactoryWhiteBalanceGetAllParams(Tempmode, &params);
+ }
+ r->writeInt32(ret);
+ r->writeInt32(params.r_gain);
+ r->writeInt32(params.g_gain);
+ r->writeInt32(params.b_gain);
+ r->writeInt32(params.r_post_offset);
+ r->writeInt32(params.g_post_offset);
+ r->writeInt32(params.b_post_offset);
+ }
+ case STOP_SCAN: {
+ mpTv->stopScanLock();
+ break;
+ }
+ case DTV_GET_SNR: {
+ int tmpRet = 0;
+ tmpRet = mpTv->getFrontendSNR();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case DTV_GET_BER: {
+ int tmpRet = 0;
+ tmpRet = mpTv->getFrontendBER();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case DTV_GET_STRENGTH: {
+ int tmpRet = 0;
+ tmpRet = mpTv->getFrontendSignalStrength();
+ r->writeInt32(tmpRet);
+ break;
+ }
+ case DTV_GET_AUDIO_TRACK_NUM: {
+ int programId = p.readInt32();
+ int retCnt = 0;
+ retCnt = mpTv->getAudioTrackNum(programId);
+ r->writeInt32(retCnt);
+ break;
+ }
+ case DTV_GET_AUDIO_TRACK_INFO: {
+ int progId = p.readInt32();
+ int aIdx = p.readInt32();
+ int aFmt = -1;
+ int iRet = -1;
+ String8 lang;
+ iRet = mpTv->getAudioInfoByIndex(progId, aIdx, &aFmt, lang);
+ r->writeInt32(aFmt);
+ r->writeString16(String16(lang));
+ break;
+ }
+ case DTV_SWITCH_AUDIO_TRACK: {
+ int progId = p.readInt32();
+ int aTackIdx = p.readInt32();
+ int ret = -1;
+ ret = mpTv->switchAudioTrack(progId, aTackIdx);
+ r->writeInt32(ret);
+ if(0 == ret) {
+ CTvProgram prog;
+ prog.setCurrAudioTrackIndex(progId, aTackIdx);
+ }
+ break;
+ }
+ case DTV_GET_CURR_AUDIO_TRACK_INDEX: {
+ int currAduIdx = -1;
+ int progId = p.readInt32();
+ CTvProgram prog;
+ CTvProgram::selectByID(progId, prog);
+ currAduIdx = prog.getCurrAudioTrackIndex();
+ r->writeInt32(currAduIdx);
+ break;
+ }
+ case DTV_SET_AUDIO_CHANNEL_MOD: {
+ int audioChannelIdx = p.readInt32();
+ mpTv->setAudioChannel(audioChannelIdx);
+ break;
+ }
+ case DTV_GET_AUDIO_CHANNEL_MOD: {
+ int currChannelMod;
+ currChannelMod = mpTv->getAudioChannel();
+ r->writeInt32(currChannelMod);
+ break;
+ }
+ case DTV_GET_CUR_FREQ: {
+ int progId = p.readInt32();
+ int freq = 0;
+ int iRet = -1;
+ CTvProgram prog;
+ CTvChannel channel;
+
+ iRet = CTvProgram::selectByID(progId, prog);
+ if(0 != iRet) return -1;
+ prog.getChannel(channel);
+ freq = channel.getFrequency();
+ r->writeInt32(freq);
+ break;
+ }
+ case DTV_GET_EPG_UTC_TIME: {
+ int iRet = -1;
+ int utcTime = 0;
+
+ utcTime = mpTv->getTvTime();
+
+ r->writeInt32(utcTime);
+ break;
+ }
+ case DTV_GET_EPG_INFO_POINT_IN_TIME: {
+ int progid = p.readInt32();
+ int utcTime = p.readInt32();
+ CTvProgram prog;
+ int ret = CTvProgram::selectByID(progid, prog);
+ CTvEvent ev;
+ ret = ev.getProgPresentEvent(prog.getSrc(), prog.getID(), utcTime, ev);
+ r->writeString16(String16(ev.getName()));
+ r->writeString16(String16(ev.getDescription()));
+ r->writeString16(String16(ev.getExtDescription()));
+ r->writeInt32(ev.getStartTime());
+ r->writeInt32(ev.getEndTime());
+ r->writeInt32(ev.getSubFlag());
+ r->writeInt32(ev.getEventId());
+ break;
+ }
+ case DTV_GET_EPG_INFO_DURATION: {
+ int iRet = -1;
+ int iObOutSize = 0;
+ Vector<sp<CTvEvent> > epgOut;
+ int progid = p.readInt32();
+ int iUtcStartTime = p.readInt32();
+ int iDurationTime = p.readInt32();
+ CTvProgram prog;
+ CTvEvent ev;
+ iRet = CTvProgram::selectByID(progid, prog);
+ if(0 != iRet) {
+ break;
+ }
+ iRet = ev.getProgScheduleEvents(prog.getSrc(), prog.getID(), iUtcStartTime, iDurationTime, epgOut);
+ if(0 != iRet) {
+ break;
+ }
+ iObOutSize = epgOut.size();
+ if(0 == iObOutSize) {
+ break;
+ }
+
+ r->writeInt32(iObOutSize);
+ for(int i = 0; i < iObOutSize; i ++) {
+ r->writeString16(String16(epgOut[i]->getName()));
+ r->writeString16(String16(epgOut[i]->getDescription()));
+ r->writeString16(String16(ev.getExtDescription()));
+ r->writeInt32(epgOut[i]->getStartTime());
+ r->writeInt32(epgOut[i]->getEndTime());
+ r->writeInt32(epgOut[i]->getSubFlag());
+ r->writeInt32(epgOut[i]->getEventId());
+ }
+ break;
+ }
+ case DTV_SET_PROGRAM_NAME: {
+ CTvProgram prog;
+ int progid = p.readInt32();
+ String16 tmpName = p.readString16();
+ String8 strName = String8(tmpName);
+ prog.updateProgramName(progid, strName);
+ break;
+ }
+ case DTV_SET_PROGRAM_SKIPPED: {
+ CTvProgram prog;
+ int progid = p.readInt32();
+ bool bSkipFlag = p.readInt32();
+ prog.setSkipFlag(progid, bSkipFlag);
+ break;
+ }
+ case DTV_SET_PROGRAM_FAVORITE: {
+ CTvProgram prog;
+ int progid = p.readInt32();
+ bool bFavorite = p.readInt32();
+ prog.setFavoriteFlag(progid, bFavorite);
+ break;
+ }
+ case DTV_DETELE_PROGRAM: {
+ CTvProgram prog;
+ int progid = p.readInt32();
+ prog.deleteProgram(progid);
+ break;
+ }
+ case SET_BLACKOUT_ENABLE: {
+ int enable = p.readInt32();
+ mpTv->setBlackoutEnable(enable);
+ break;
+ }
+ case START_AUTO_BACKLIGHT: {
+ mpTv->startAutoBackLight();
+ break;
+ }
+ case STOP_AUTO_BACKLIGHT: {
+ mpTv->stopAutoBackLight();
+ break;
+ }
+ case IS_AUTO_BACKLIGHTING: {
+ int on = mpTv->getAutoBackLight_on_off();
+ r->writeInt32(on);
+ break;
+ }
+ case SSM_READ_BLACKOUT_ENABLE: {
+ int enable = mpTv->getSaveBlackoutEnable();
+ r->writeInt32(enable);
+ break;
+ }
+ case DTV_SWAP_PROGRAM: {
+ CTvProgram prog;
+ int firstProgId = p.readInt32();
+ int secondProgId = p.readInt32();
+ CTvProgram::selectByID(firstProgId, prog);
+ int firstChanOrderNum = prog.getChanOrderNum();
+ CTvProgram::selectByID(secondProgId, prog);
+ int secondChanOrderNum = prog.getChanOrderNum();
+ prog.swapChanOrder(firstProgId, firstChanOrderNum, secondProgId, secondChanOrderNum);
+ break;
+ }
+ case DTV_SET_PROGRAM_LOCKED: {
+ CTvProgram prog;
+ int progid = p.readInt32();
+ bool bLocked = p.readInt32();
+ prog.setLockFlag(progid, bLocked);
+ break;
+ }
+ case DTV_SET_BOOKING_FLAG: {
+ CTvEvent ev;
+ int iEvtId = p.readInt32();
+ bool iBookFlag = (bool)p.readInt32();
+ ev.bookEvent(iEvtId, iBookFlag);
+ break;
+ }
+ case DTV_GET_FREQ_BY_PROG_ID: {
+ int freq = 0;
+ int progid = p.readInt32();
+ CTvProgram prog;
+ int ret = CTvProgram::selectByID(progid, prog);
+ if(ret != 0) return -1;
+ CTvChannel channel;
+ prog.getChannel(channel);
+ freq = channel.getFrequency();
+ r->writeInt32(freq);
+ break;
+ }
+ case DTV_GET_BOOKED_EVENT: {
+ CTvBooking tvBook;
+ Vector<sp<CTvBooking> > vTvBookOut;
+ tvBook.getBookedEventList(vTvBookOut);
+ int iObOutSize = vTvBookOut.size();
+ if(0 == iObOutSize) {
+ break;
+ }
+ r->writeInt32(iObOutSize);
+ for(int i = 0; i < iObOutSize; i ++) {
+ r->writeString16(String16(vTvBookOut[i]->getProgName()));
+ r->writeString16(String16(vTvBookOut[i]->getEvtName()));
+ r->writeInt32(vTvBookOut[i]->getStartTime());
+ r->writeInt32(vTvBookOut[i]->getDurationTime());
+ r->writeInt32(vTvBookOut[i]->getBookId());
+ r->writeInt32(vTvBookOut[i]->getProgramId());
+ r->writeInt32(vTvBookOut[i]->getEventId());
+ }
+ break;
+ }
+ case SET_FRONTEND_PARA: {
+ int ret = -1;
+ frontend_para_set_t feParms;
+ feParms.mode = (fe_type_t)p.readInt32();
+ feParms.freq = p.readInt32();
+ feParms.videoStd = (atv_video_std_t)p.readInt32();
+ feParms.audioStd = (atv_audio_std_t)p.readInt32();
+ feParms.para1 = p.readInt32();
+ feParms.para2 = p.readInt32();
+ mpTv->resetFrontEndPara(feParms);
+ r->writeInt32(ret);
+ break;
+ }
+ case PLAY_PROGRAM: {
+ int freq = p.readInt32();
+ int videoStd = p.readInt32();
+ int audioStd = p.readInt32();
+ int fineTune = p.readInt32();
+ mpTv->playAtvProgram(freq, videoStd, audioStd, fineTune);
+ break;
+ }
+ case GET_PROGRAM_LIST: {
+ Vector<sp<CTvProgram> > out;
+ int type = p.readInt32();
+ int skip = p.readInt32();
+ CTvProgram::selectByType(type, skip, out);
+ r->writeInt32(out.size());
+ for(int i = 0; i < out.size(); i++) {
+ r->writeInt32(out[i]->getID());
+ r->writeInt32(out[i]->getChanOrderNum());
+ r->writeInt32(out[i]->getMajor());
+ r->writeInt32(out[i]->getMinor());
+ r->writeInt32(out[i]->getProgType());
+ r->writeString16(String16(out[i]->getName()));
+ r->writeInt32(out[i]->getProgSkipFlag());
+ r->writeInt32(out[i]->getFavoriteFlag());
+ r->writeInt32(out[i]->getVideo()->getFormat());
+ CTvChannel ch;
+ out[i]->getChannel(ch);
+ r->writeInt32(ch.getDVBTSID());
+ r->writeInt32(out[i]->getServiceId());
+ r->writeInt32(out[i]->getVideo()->getPID());
+ r->writeInt32(out[i]->getVideo()->getPID());
+
+ int audioTrackSize = out[i]->getAudioTrackSize();
+ r->writeInt32(audioTrackSize);
+ for(int j = 0; j < audioTrackSize; j++) {
+ r->writeString16(String16(out[i]->getAudio(j)->getLang()));
+ r->writeInt32(out[i]->getAudio(j)->getFormat());
+ r->writeInt32(out[i]->getAudio(j)->getPID());
+ }
+ r->writeInt32(ch.getFrequency());
+ }
+ break;
+ }
+ case DTV_GET_VIDEO_FMT_INFO: {
+ int srcWidth = 0;
+ int srcHeight = 0;
+ int srcFps = 0;
+ int srcInterlace = 0;
+ int iRet = -1;
+
+ iRet == mpTv->getVideoFormatInfo(&srcWidth, &srcHeight, &srcFps, &srcInterlace);
+ r->writeInt32(srcWidth);
+ r->writeInt32(srcHeight);
+ r->writeInt32(srcFps);
+ r->writeInt32(srcInterlace);
+ r->writeInt32(iRet);
+ }
+ break;
+
+ case DTV_START_RECORD: {
+ char buf[256];
+ String16 tmpName = p.readString16();
+ String8 strName = String8(tmpName);
+ sprintf(buf, "%s", strName.string());
+ mpTv->SetRecordFileName(buf);
+ mpTv->StartToRecord();
+ }
+ break;
+ case DTV_STOP_RECORD:
+ mpTv->StopRecording();
+ break;
+ case DTV_SET_RECORD_ALL_TS: {
+ int sel = p.readInt32();
+ mpTv->SetRecCurTsOrCurProgram(sel);
+ }
+ break;
+ case TV_PRINT_DEBUG_INFO:
+ mpTv->printDebugInfo();
+ break;
+ // EXTAR END
+ default:
+ LOGD("default");
+ break;
+ }
+ return 0;
+}
+
+sp<TvService::Client> TvService::Client::getClientFromCookie(void *user)
+{
+ sp<Client> client = 0;
+ /*
+ TvService *service = static_cast<TvService*> (user);
+ if (service != NULL) {
+ Mutex::Autolock ourLock(service->mServiceLock);
+ if (service->mClient != 0) {
+ client = service->mClient.promote();
+ if (client == 0) {
+ LOGE("getClientFromCookie: client appears to have died");
+ service->mClient.clear();
+ }
+ } else {
+ LOGE("getClientFromCookie: got callback but client was NULL");
+ }
+ }*/
+ return client;
+}
+
+void TvService::Client::notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2, void *user)
+{
+ LOGD("notifyCallback(%d)", msgType);
+
+ sp<Client> client = getClientFromCookie(user);
+ if (client == 0) {
+ return;
+ }
+
+ switch (msgType) {
+ //case TV_MSG_SHUTTER:
+ // ext1 is the dimension of the yuv picture.
+ // client->handleShutter((image_rect_type *)ext1);
+ // break;
+ default:
+ sp<ITvClient> c = client->mTvClient;
+ if (c != NULL) {
+ //c->notifyCallback(msgType, ext1, ext2);
+ }
+ break;
+ }
+
+#if DEBUG_CLIENT_REFERENCES
+ if (client->getStrongCount() == 1) {
+ LOGE("++++++++++++++++ (NOTIFY CALLBACK) THIS WILL CAUSE A LOCKUP!");
+ client->printRefs();
+ }
+#endif
+}
+
+int TvService::Client::notifyCallback(const int &msgtype, const Parcel &p)
+{
+ mTvClient->notifyCallback(msgtype, p);
+ return 0;
+}
+
+status_t TvService::onTransact(uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags)
+{
+ // permission checks...
+ switch (code) {
+ case BnTvService::CONNECT:
+ IPCThreadState *ipc = IPCThreadState::self();
+ const int pid = ipc->getCallingPid();
+ const int self_pid = getpid();
+ if (pid != self_pid) {
+ // we're called from a different process, do the real check
+ /*if (!checkCallingPermission(
+ String16("android.permission.TV")))
+ {
+ const int uid = ipc->getCallingUid();
+ LOGE("Permission Denial: "
+ "can't use the tv pid=%d, uid=%d", pid, uid);
+ return PERMISSION_DENIED;
+ }*/
+ }
+ break;
+ }
+
+ status_t err = BnTvService::onTransact(code, data, reply, flags);
+
+#if DEBUG_HEAP_LEAKS
+ LOGE("+++ onTransact err %d code %d", err, code);
+
+ if (err == UNKNOWN_TRANSACTION || err == PERMISSION_DENIED) {
+ LOGE("+++ onTransact code %d", code);
+
+ CHECK_INTERFACE(ITvService, data, reply);
+
+ switch(code) {
+ case 1000: {
+ if (gWeakHeap != 0) {
+ sp<IMemoryHeap> h = gWeakHeap.promote();
+ IMemoryHeap *p = gWeakHeap.unsafe_get();
+ LOGE("CHECKING WEAK REFERENCE %p (%p)", h.get(), p);
+ if (h != 0)
+ h->printRefs();
+ bool attempt_to_delete = data.readInt32() == 1;
+ if (attempt_to_delete) {
+ // NOT SAFE!
+ LOGE("DELETING WEAK REFERENCE %p (%p)", h.get(), p);
+ if (p) delete p;
+ }
+ return NO_ERROR;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+#endif // DEBUG_HEAP_LEAKS
+ return err;
+}
+
diff --git a/tvapi/android/tvserver/TvService.h b/tvapi/android/tvserver/TvService.h
index 66a6418..3345ccf 100644
--- a/tvapi/android/tvserver/TvService.h
+++ b/tvapi/android/tvserver/TvService.h
@@ -1,83 +1,81 @@
-#ifndef ANDROID_SERVERS_TV_TVSERVICE_H
-#define ANDROID_SERVERS_TV_TVSERVICE_H
-
-#include <include/ITvService.h>
-#include <include/Tv.h>
-#include <utils/threads.h>
-#include <utils/Vector.h>
-#include <stdint.h>
-#include <tv/CTv.h>
-#include "tv/CTvScreenCapture.h"
-
-using namespace android;
-
-#define DEBUG_HEAP_LEAKS 0
-#define RESOURCE_NUMS 5
-
-class TvService: public BnTvService , public CTv::TvIObserver, public CTvScreenCapture::TvIObserver
-{
-public:
- class Client: public BnTv
- {
- public:
- Client(const sp<TvService> &tvService, const sp<ITvClient> &tvClient, pid_t clientPid, CTv *pTv);
- Client();
- virtual ~Client();
- virtual void disconnect();
- virtual status_t connect(const sp<ITvClient> &client);
- virtual status_t lock();
- virtual status_t unlock();
- virtual status_t processCmd(const Parcel &p, Parcel *r);
- virtual status_t createSubtitle(const sp<IMemory> &share_mem);
- virtual status_t createVideoFrame(const sp<IMemory> &share_mem);
-
- // our client...
- const sp<ITvClient> &getTvClient() const
- {
- return mTvClient;
- }
-
- int notifyCallback(const int &msgtype, const Parcel &p);
- String16 mStrName;
- static void notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2, void *user);
- private:
- friend class CTv;
- friend class TvService;
- status_t checkPid();
- static sp<Client> getClientFromCookie(void *user);
-
- mutable Mutex mLock;
- mutable Condition mReady;
- sp<TvService> mTvService;
- sp<ITvClient> mTvClient;
- pid_t mClientPid;
- int mGetNotifyFlag;
- int mCurProgIndex;
- CTv *mpTv;
- bool mIsStartTv;
- };//end client
-
- virtual sp<ITv> connect(const sp<ITvClient> &tvClient);
-
- virtual void onTvEvent(const CTvEv &ev);
- void removeClient(const sp<ITvClient> &tvClient);
-
- Client *mpStartTvClient;
- wp<Client> mpScannerClient;
- static void instantiate(CTv *pTv);
- Vector< wp<Client> > m_v_Clients;
-
-private:
- TvService(CTv *pTv);
- virtual ~TvService();
- virtual status_t onTransact(uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags);
- volatile int32_t mUsers;
- virtual void incUsers();
- virtual void decUsers();
- mutable Mutex mServiceLock;
- CTv *mpTv;
- CTvScreenCapture mCapVidFrame;
-
-};
-
-#endif
+#ifndef ANDROID_SERVERS_TV_TVSERVICE_H
+#define ANDROID_SERVERS_TV_TVSERVICE_H
+
+#include <include/ITvService.h>
+#include <include/Tv.h>
+#include <utils/threads.h>
+#include <utils/Vector.h>
+#include <stdint.h>
+#include <tv/CTv.h>
+#include "tv/CTvScreenCapture.h"
+
+using namespace android;
+
+#define DEBUG_HEAP_LEAKS 0
+#define RESOURCE_NUMS 5
+
+class TvService: public BnTvService , public CTv::TvIObserver, public CTvScreenCapture::TvIObserver {
+public:
+ class Client: public BnTv {
+ public:
+ Client(const sp<TvService> &tvService, const sp<ITvClient> &tvClient, pid_t clientPid, CTv *pTv);
+ Client();
+ virtual ~Client();
+ virtual void disconnect();
+ virtual status_t connect(const sp<ITvClient> &client);
+ virtual status_t lock();
+ virtual status_t unlock();
+ virtual status_t processCmd(const Parcel &p, Parcel *r);
+ virtual status_t createSubtitle(const sp<IMemory> &share_mem);
+ virtual status_t createVideoFrame(const sp<IMemory> &share_mem);
+
+ // our client...
+ const sp<ITvClient> &getTvClient() const
+ {
+ return mTvClient;
+ }
+
+ int notifyCallback(const int &msgtype, const Parcel &p);
+ String16 mStrName;
+ static void notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2, void *user);
+ private:
+ friend class CTv;
+ friend class TvService;
+ status_t checkPid();
+ static sp<Client> getClientFromCookie(void *user);
+
+ mutable Mutex mLock;
+ mutable Condition mReady;
+ sp<TvService> mTvService;
+ sp<ITvClient> mTvClient;
+ pid_t mClientPid;
+ int mGetNotifyFlag;
+ int mCurProgIndex;
+ CTv *mpTv;
+ bool mIsStartTv;
+ };//end client
+
+ virtual sp<ITv> connect(const sp<ITvClient> &tvClient);
+
+ virtual void onTvEvent(const CTvEv &ev);
+ void removeClient(const sp<ITvClient> &tvClient);
+
+ Client *mpStartTvClient;
+ wp<Client> mpScannerClient;
+ static void instantiate(CTv *pTv);
+ Vector< wp<Client> > m_v_Clients;
+
+private:
+ TvService(CTv *pTv);
+ virtual ~TvService();
+ virtual status_t onTransact(uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags);
+ volatile int32_t mUsers;
+ virtual void incUsers();
+ virtual void decUsers();
+ mutable Mutex mServiceLock;
+ CTv *mpTv;
+ CTvScreenCapture mCapVidFrame;
+
+};
+
+#endif
diff --git a/tvapi/android/tvserver/main.cpp b/tvapi/android/tvserver/main.cpp
index 0218dbe..07baf34 100644
--- a/tvapi/android/tvserver/main.cpp
+++ b/tvapi/android/tvserver/main.cpp
@@ -1,23 +1,23 @@
-#include <sys/types.h>
-#include <unistd.h>
-#include <grp.h>
-#include <binder/IPCThreadState.h>
-#include <binder/ProcessState.h>
-#include <binder/IServiceManager.h>
-#include <utils/Log.h>
-#include "TvService.h"
-
-using namespace android;
-
-int main(int argc, char **argv)
-{
- sp<ProcessState> proc(ProcessState::self());
- sp<IServiceManager> sm = defaultServiceManager();
- TvService::instantiate();
-
- ProcessState::self()->startThreadPool();
- IPCThreadState::self()->joinThreadPool();
-
- return 0;
-}
-
+#include <sys/types.h>
+#include <unistd.h>
+#include <grp.h>
+#include <binder/IPCThreadState.h>
+#include <binder/ProcessState.h>
+#include <binder/IServiceManager.h>
+#include <utils/Log.h>
+#include "TvService.h"
+
+using namespace android;
+
+int main(int argc, char **argv)
+{
+ sp<ProcessState> proc(ProcessState::self());
+ sp<IServiceManager> sm = defaultServiceManager();
+ TvService::instantiate();
+
+ ProcessState::self()->startThreadPool();
+ IPCThreadState::self()->joinThreadPool();
+
+ return 0;
+}
+
diff --git a/tvapi/build/include/.gitignore b/tvapi/build/include/.gitignore
index e69de29..e69de29 100644..100755
--- a/tvapi/build/include/.gitignore
+++ b/tvapi/build/include/.gitignore
diff --git a/tvapi/docs/tv.uml b/tvapi/docs/tv.uml
index 15238f7..112c881 100644
--- a/tvapi/docs/tv.uml
+++ b/tvapi/docs/tv.uml
@@ -1,6093 +1,6093 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<XPD:PROJECT xmlns:XPD="http://www.staruml.com" version="1">
-<XPD:HEADER>
-<XPD:SUBUNITS>
-</XPD:SUBUNITS>
-<XPD:PROFILES>
-<XPD:PROFILE>UMLStandard</XPD:PROFILE>
-<XPD:PROFILE>Java</XPD:PROFILE>
-<XPD:PROFILE>Cpp</XPD:PROFILE>
-</XPD:PROFILES>
-</XPD:HEADER>
-<XPD:BODY>
-<XPD:OBJ name="DocumentElement" type="UMLProject" guid="CoZuu0bDp0eooW1pQg6aQwAA">
-<XPD:ATTR name="Title" type="string">tv</XPD:ATTR>
-<XPD:ATTR name="#OwnedElements" type="integer">5</XPD:ATTR>
-<XPD:OBJ name="OwnedElements[0]" type="UMLModel" guid="6Ncym1qqME6Qmj4IRHZMIQAA">
-<XPD:ATTR name="Name" type="string">Use Case Model</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">useCaseModel</XPD:ATTR>
-<XPD:REF name="Namespace">CoZuu0bDp0eooW1pQg6aQwAA</XPD:REF>
-<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="OwnedDiagrams[0]" type="UMLUseCaseDiagram" guid="nzFiqgF5PEKC+zYpaFKlCQAA">
-<XPD:ATTR name="Name" type="string">tv功</XPD:ATTR>
-<XPD:REF name="DiagramOwner">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:OBJ name="DiagramView" type="UMLUseCaseDiagramView" guid="nx0lwQzrskWozLI1S3LzQgAA">
-<XPD:REF name="Diagram">nzFiqgF5PEKC+zYpaFKlCQAA</XPD:REF>
-<XPD:ATTR name="#OwnedViews" type="integer">17</XPD:ATTR>
-<XPD:OBJ name="OwnedViews[0]" type="UMLActorView" guid="gvI3mIExBEmaszVtF0V6bwAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">116</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">40</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">86</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">78</XPD:ATTR>
-<XPD:REF name="Model">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="FSYMWbRzs0mJbYfl9CkXfAAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="+Fy828Qip0uc61sSAd0UwQAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">user</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="TbdT9IJSLU+fl/JTxDnxxQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="aTiAvGpnHUGxIA1FbazntAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="UA5dbT7GVU2OqjVX9PXuWAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="9c90i0MrUkKipskFCo8wlgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[1]" type="UMLUseCaseView" guid="gjXEJSzeBk24cBss5DrAhAAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">396</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">125</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
-<XPD:REF name="Model">nAsf5tia702zzSQAu6L6VwAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="WQwWYMpQtUCP6CaPlCcltQAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="Nbu2DNQyW0K3OkEns8o8FgAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">æœå°</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="k8VZH0rfeUaxBRl8mSLwDAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="EL3VwTjdHkCZndTAtu6x0QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="FCs4dSUL6ES18h1zCz8l6AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">nAsf5tia702zzSQAu6L6VwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="sTCdfdSS0UiUUNZ/B2e/FAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">nAsf5tia702zzSQAu6L6VwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="GczyMXZXJEmnDD4a7NAunwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">nAsf5tia702zzSQAu6L6VwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[2]" type="UMLUseCaseView" guid="Frl6rGi4ekOSrHn6gJ5XLQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">452</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">64</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">124</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
-<XPD:REF name="Model">yCRgNkRB+EGAwzfBjdJbqwAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="k0GCedKioUeNGvdENFUs4AAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="GZ0SKDfylkCAWEwMblBG9gAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">æ¢å°</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="zw9u23HITU+F7D/MPgZyoQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="ZaIixThNIkGc744Tm3CsugAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="aH6LRR4We0O3VrbkDZF2cwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">yCRgNkRB+EGAwzfBjdJbqwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="HAEKTxJSV0uP4v52ffOFQwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">yCRgNkRB+EGAwzfBjdJbqwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="bSOUAy1Buk+obB82eUrFSQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">yCRgNkRB+EGAwzfBjdJbqwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[3]" type="UMLUseCaseView" guid="Hyu7+1e/cES0Ae1OqV75fwAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">428</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">124</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">237</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
-<XPD:REF name="Model">W59J2q05J0K29agobcVJpwAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="3d2gFNlI6EK+jsWimDIS+QAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="SVBydeRF006GMrAfC3ETqwAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">得到当å‰å°çš„ä¿¡æ¯/å±æ˜¾</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="SU3HDI+ru0WNDK77syR/GQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="CS3PuOwuBkW7+xAe2clbBAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="6VTL4WFMHEigYGfaMrdGYwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">W59J2q05J0K29agobcVJpwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="7rrGYYen40CFqpViVSVmAQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">W59J2q05J0K29agobcVJpwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="18I+62RrWEOFbvJ7hjlg4AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">W59J2q05J0K29agobcVJpwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[4]" type="UMLUseCaseView" guid="JsuyLQhZc0Sm5Tx7vxV+jAAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">416</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">212</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">178</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
-<XPD:REF name="Model">ExhZCRayVUq9VZBeXyOzSgAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="kfnOa+AQV0Kj4BKPF56htAAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="6bLEGGIsiU6zFFc9j4F49wAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">得到全部å°çš„列表</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="ADRdb9imSEChWP9jDiJFWgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="Gp396ZK3MUyBaxd1WCTOIQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="c8pFLtSKjE+idXYMkFpEQAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">ExhZCRayVUq9VZBeXyOzSgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="8s4aZ7v9JkWne3xJfZ0IqgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">ExhZCRayVUq9VZBeXyOzSgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="qTH2RWpVvkyOG5CaahXI1AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">ExhZCRayVUq9VZBeXyOzSgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[5]" type="UMLAssociationView" guid="VKBbewCQmUyNjzWZhk3pLQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">201,70;396,34</XPD:ATTR>
-<XPD:REF name="Model">hXa1Ze5PcEWvFq3WssbumAAA</XPD:REF>
-<XPD:REF name="Head">gjXEJSzeBk24cBss5DrAhAAA</XPD:REF>
-<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="dgQAXdF4ZESvmtHR7mV1eAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">hXa1Ze5PcEWvFq3WssbumAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="nl0ivvTPhk6+ZWGNY3Z7QQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">hXa1Ze5PcEWvFq3WssbumAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="21Re8Yow20OMsCn0YuNvyQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">hXa1Ze5PcEWvFq3WssbumAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="g4iIuaL510KG496BLjSxFAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">1h+kSCXpe0eWYNVJ4SXvTQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="gJVKivaSkUOMWN8rIdDn4gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">2RBODiwfOUCUVzGJ/32wAAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="TwLEoTMD10ehV8UPEkC8GAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">1h+kSCXpe0eWYNVJ4SXvTQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="xB9CaPtaBEGmmoo1GYSHmAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">2RBODiwfOUCUVzGJ/32wAAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="9JL65E1Ll0K/gBYTvW27ggAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">1h+kSCXpe0eWYNVJ4SXvTQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="bGKgfsVj9UqvRKTQT54jnwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">2RBODiwfOUCUVzGJ/32wAAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="W8FWavR8aUaHm9U8dXz4VgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">1h+kSCXpe0eWYNVJ4SXvTQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="hx6u1xKLF028b6Yykl/JVwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">2RBODiwfOUCUVzGJ/32wAAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[6]" type="UMLAssociationView" guid="T2Ct5boioEq1zBkQPfP1uAAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">201,79;452,85</XPD:ATTR>
-<XPD:REF name="Model">GWeTbEaAQUO+r17c6TtqcAAA</XPD:REF>
-<XPD:REF name="Head">Frl6rGi4ekOSrHn6gJ5XLQAA</XPD:REF>
-<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="itC6+9KIkUOoqvWzhIL9eAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">GWeTbEaAQUO+r17c6TtqcAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="yn7EMIRfMUivZuavba1QKgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">GWeTbEaAQUO+r17c6TtqcAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="qp8dQ4Cl50OUly+002LHkwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">GWeTbEaAQUO+r17c6TtqcAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="K/CL0noaSEeVxfiH/AYdPQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">7KhVXW2jsUGTY2YhCHULSAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="Cko4gh6CNESvzEaGX7xrTwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">LAvKrCSTOk+Idehr21cMIwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="gJsX46E8OEivWSn9FKGyIgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">7KhVXW2jsUGTY2YhCHULSAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="YXCHfhVdWUSEN2ZT/RAgUwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">LAvKrCSTOk+Idehr21cMIwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="+sQ4dyQOwEyKXN3Siy8SeAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">7KhVXW2jsUGTY2YhCHULSAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="3/az9bmrj0OrABD1RgT7zgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">LAvKrCSTOk+Idehr21cMIwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="g0gSj9MvXEy5XaeQkbjoOwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">7KhVXW2jsUGTY2YhCHULSAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="QhKdEmGlb021SYaW2m8l2AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">LAvKrCSTOk+Idehr21cMIwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[7]" type="UMLAssociationView" guid="AyvrWm4rVU2nEQ3SaHF+pwAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">201,86;428,125</XPD:ATTR>
-<XPD:REF name="Model">R+Mv7uh5kEuKr/Bia3KOhAAA</XPD:REF>
-<XPD:REF name="Head">Hyu7+1e/cES0Ae1OqV75fwAA</XPD:REF>
-<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Ic1rMSlGuEiOmC74Gs5VPgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">R+Mv7uh5kEuKr/Bia3KOhAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="LmeDzwQ4WE+N9ctpkvJC2QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">R+Mv7uh5kEuKr/Bia3KOhAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="/4mMqWe3yUWrZLbs6l2tZwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">R+Mv7uh5kEuKr/Bia3KOhAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="/DGBSl3cJ0S8W6nJJJGcfwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">X1+FYBSOWkaYgLu2FjOTXwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="m94XoFukck+27/0mViZU2gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">BPqYWvTNKEOfCOeMpPA44AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="QQK2e0FGJkigWh9ObCBDRgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">X1+FYBSOWkaYgLu2FjOTXwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="rl15HxW7wUGsb4vRn7Al9wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">BPqYWvTNKEOfCOeMpPA44AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="WxqNKB0NhUqZpADhZw+P3QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">X1+FYBSOWkaYgLu2FjOTXwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="A1ODeRbq4kaOK4HMvaTeRQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">BPqYWvTNKEOfCOeMpPA44AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="Tj9w6ngJfUqetSitERQ8NQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">X1+FYBSOWkaYgLu2FjOTXwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="LFchLERMEE2qPO6m3DpPuQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">BPqYWvTNKEOfCOeMpPA44AAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[8]" type="UMLAssociationView" guid="QIXdxKII/kqOJOJMY5AcogAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">201,97;455,212</XPD:ATTR>
-<XPD:REF name="Model">WrC8vAeUYkO3tLCoOTTa7gAA</XPD:REF>
-<XPD:REF name="Head">JsuyLQhZc0Sm5Tx7vxV+jAAA</XPD:REF>
-<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Xq0mZflYI0KV42hvumdugQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">WrC8vAeUYkO3tLCoOTTa7gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="vwdwId1yNkaUtmkTI1YWuQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">WrC8vAeUYkO3tLCoOTTa7gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="1uoVEwi+dkyCZb5M7Pve2wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">WrC8vAeUYkO3tLCoOTTa7gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="4paVVhhoOU2GUrsd9Xm/FwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">pVT44Y4IlkCvW0rXC+dzRgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="kbnyVybMKEKdAdKhGeseZgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">uJNUdzUQLUu2aPlejTqjNwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="66pNRRmKjku3rnBmhfUBCgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">pVT44Y4IlkCvW0rXC+dzRgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="g5PdiNFseUGXOynpmdruGwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">uJNUdzUQLUu2aPlejTqjNwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="i3/GDxY4DU6ZMPvt2/tUdgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">pVT44Y4IlkCvW0rXC+dzRgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="71PEDgUjsU+2i57rKSIWiQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">uJNUdzUQLUu2aPlejTqjNwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="Bn3vSuvCAEGkNyVyOiDjtAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">pVT44Y4IlkCvW0rXC+dzRgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="WnuHsx6mVUGcSN3xCQss6QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">uJNUdzUQLUu2aPlejTqjNwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[9]" type="UMLUseCaseView" guid="B39+MGxIAUu2bla4M15wGQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">428</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">344</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">182</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
-<XPD:REF name="Model">5KAC2LjvX0qQF9lBa5DyCwAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="G5wIehwq+0eIoXt5370UvgAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="+OT5iGpyX0mfkpXaUy+lWgAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">设置å„ç§å‚æ•°ä¿¡æ¯</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="liywRdQGmEmxnhyRBal4rAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="7R4zEmy7t0WDv/dHHBAF0AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="kRxUjogV4k2YkluNvawsMAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">5KAC2LjvX0qQF9lBa5DyCwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="u8URrWr/hkiwdkqgLJdW+wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">5KAC2LjvX0qQF9lBa5DyCwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="KOSNG5KSM0CFIOZucCSmlwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">5KAC2LjvX0qQF9lBa5DyCwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[10]" type="UMLAssociationView" guid="xD4JWSKF3EOTqNmsPzbc5QAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">201,112;491,344</XPD:ATTR>
-<XPD:REF name="Model">y+qwgLasMEm0UKrVQN8iJQAA</XPD:REF>
-<XPD:REF name="Head">B39+MGxIAUu2bla4M15wGQAA</XPD:REF>
-<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Aug+XiD/L0C98F0lb8QKAgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">y+qwgLasMEm0UKrVQN8iJQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="+HDBsjEDKEqWUJZ9hnAU4QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">y+qwgLasMEm0UKrVQN8iJQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="8N0unm4hwUy3Q/ipJnkyXAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">y+qwgLasMEm0UKrVQN8iJQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="0NmimauDo0yxCgPn4bFExgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">iK2QfBiThkWwoji6bSWtswAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="evKHrFVG9kazUYsWGKYoRQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">jJgG/r4rjE2qAhy/U/lg2wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="YPI7wcCBTUybTm1Spbgg8QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">iK2QfBiThkWwoji6bSWtswAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="JgCUSElncUaW/Ryki1kRMQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">jJgG/r4rjE2qAhy/U/lg2wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="ntmWchFV+UqAdPT3cz9/JQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">iK2QfBiThkWwoji6bSWtswAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="vquz6rX3pkKrylGBjx30IAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">jJgG/r4rjE2qAhy/U/lg2wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="edAtn71weU2/fvAr2uihoQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">iK2QfBiThkWwoji6bSWtswAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="CXIajd5ee06Zf7q4GbpG1QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">jJgG/r4rjE2qAhy/U/lg2wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[11]" type="UMLUseCaseView" guid="grqGSNiheUuwFijgmxch+gAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">236</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">280</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">130</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
-<XPD:REF name="Model">eLOxpsSp0EC08r5lL9rsZAAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="yd3L6GZKLkeQZ1rwi7QUdwAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="kTZxfY7VPkO7bRwo+0E/QgAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">预约</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="bjVlyswu/kSF04Iq8TwUcwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="xcQ9Vgj+k0eBpJoVYqjU+QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="54HAvDvDa06v58oCDBCKXwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">eLOxpsSp0EC08r5lL9rsZAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="H5TD/VVzokWAABxo66dDiwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">eLOxpsSp0EC08r5lL9rsZAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="qqfU97a8nUqfLL2CFuWnjQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">eLOxpsSp0EC08r5lL9rsZAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[12]" type="UMLAssociationView" guid="kVRyhJmyWEyyp5wuc+OXngAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">183,117;286,280</XPD:ATTR>
-<XPD:REF name="Model">0s9c8w+QxUaASZ+fMtRSqQAA</XPD:REF>
-<XPD:REF name="Head">grqGSNiheUuwFijgmxch+gAA</XPD:REF>
-<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="FypCN9NIE0C9ShWHmH/yxQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">0s9c8w+QxUaASZ+fMtRSqQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="UYBImTsT3kmMLO4UVo7iDgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">0s9c8w+QxUaASZ+fMtRSqQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="Dv0knjRPxEiA3FR76MzcQgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">0s9c8w+QxUaASZ+fMtRSqQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="qZ6wG2yUdUCrkCtj+ADq5gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">rXVVaNhetUi+zkmUpV2EJAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="oRaZRwRR1E+ugfvMU7Mx7AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">HQZk+9nVI02CjFsZTEmJFgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="5xmhglHNPkebUvE0zYQ+1QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">rXVVaNhetUi+zkmUpV2EJAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="Rf4Y2d2tx0eAEgaVNgix1gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">HQZk+9nVI02CjFsZTEmJFgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="TJu7E2BYn0e7KDkLvMy6zQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">rXVVaNhetUi+zkmUpV2EJAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="e0J/wN1wUUGY7r7RQqgfrQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">HQZk+9nVI02CjFsZTEmJFgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="HuuHMInFx0awxMfN0WO7nAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">rXVVaNhetUi+zkmUpV2EJAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="LK/960VLGUqFEI3dQB55GgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">HQZk+9nVI02CjFsZTEmJFgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[13]" type="UMLUseCaseView" guid="1rgOrFraekaSjgPeaxo6VQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">44</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">276</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">121</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
-<XPD:REF name="Model">DfNIoYa4GU+CP71/W8SrWwAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="gO3lj/0VEkmcGBM22vSVygAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="5VgGyt6LmU26Ugzte0ke+QAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">回放</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="OYamm5Q5wEmGKhCOoHHMVQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="SG00AIBfJE6CGLnrfQ6vHAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="rgrH2S52KUirNQUR897hjAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">DfNIoYa4GU+CP71/W8SrWwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="/Uw/TQZhfEa2XXCMAwNycQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">DfNIoYa4GU+CP71/W8SrWwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="c8C4qOOrcUa+n6I+x3qsmwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">DfNIoYa4GU+CP71/W8SrWwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[14]" type="UMLAssociationView" guid="FyWt2ux4n0C/jIWXlvGepAAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">148,117;109,276</XPD:ATTR>
-<XPD:REF name="Model">oYdSRRagC0OKiYHxCgS7CAAA</XPD:REF>
-<XPD:REF name="Head">1rgOrFraekaSjgPeaxo6VQAA</XPD:REF>
-<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="tzUYyPqymkyQTrpQ3ESfLQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">oYdSRRagC0OKiYHxCgS7CAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="WsC4wpiLwESJvBADsJOD0QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">oYdSRRagC0OKiYHxCgS7CAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="240EHYi+MUSGtsZ2MH9vbAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">oYdSRRagC0OKiYHxCgS7CAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="HGprZSDtFUGe58XLDa/llAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">AeXEiqTUjkaieSlGxTKX+QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="jriPICawik+i/5uQ1tPPJQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">teHN23xRpE6lugxstCxsawAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="sgsEShSJaUa0m4iY/pH+kgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">AeXEiqTUjkaieSlGxTKX+QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="oHna4JnixU6x5HHrqy8Y0gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">teHN23xRpE6lugxstCxsawAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="zD5xP/cAIkyWZDkkr5ToygAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">AeXEiqTUjkaieSlGxTKX+QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="CcjzfOb/A06oYHNBWwMyYAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">teHN23xRpE6lugxstCxsawAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="k/ixsOc3uECBJHIoPEzSCQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">AeXEiqTUjkaieSlGxTKX+QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="eJcfvTsAsUKZSOjduilFwAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">teHN23xRpE6lugxstCxsawAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[15]" type="UMLUseCaseView" guid="mlqnICP04kuE2DQduAxCnAAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">676</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">208</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">121</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
-<XPD:REF name="Model">eVrNXR8NqEC5uMEFgGKQ1gAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="SRnkj+mMmkOMwzyxJwTibAAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="2afuLG9SqEymSxMJuyHxJgAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">ä¿å­˜æ•°æ®</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="wUkUa3V6VU6SXo+560ZANAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="eeGzvESJskW2qRwldE4o8gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="ZBT2RXZyKE2KgZdND0TQCwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">eVrNXR8NqEC5uMEFgGKQ1gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="ayKElX0k9EWwlzIjQHBReAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">eVrNXR8NqEC5uMEFgGKQ1gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="TjYDD4DDi06is7FTfdSgGgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">eVrNXR8NqEC5uMEFgGKQ1gAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[16]" type="UMLActorView" guid="8+OH6W5lhU2orgFp9fejxAAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">896</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">36</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">72</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">78</XPD:ATTR>
-<XPD:REF name="Model">EIFC2d0E6EScGB1xXji93AAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="n/aO4ZyhvEOJuT58CBcC5gAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="2ZhkQxFuGk2UQcb3DISJAQAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">å¼€å‘人员</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="y1MqUzbc4UeDdpEsqrK3GwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="0Oeejnt4GEuk0csGmClAQAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="55svG5LVmEayI1yOLF/hYgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">EIFC2d0E6EScGB1xXji93AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="qt7RVSofskyCOe4IXevE3gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">EIFC2d0E6EScGB1xXji93AAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:ATTR name="#OwnedElements" type="integer">17</XPD:ATTR>
-<XPD:OBJ name="OwnedElements[0]" type="UMLActor" guid="jE6Hh4xWzk+ss1P1I88QbQAA">
-<XPD:ATTR name="Name" type="string">user</XPD:ATTR>
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">3</XPD:ATTR>
-<XPD:REF name="Views[0]">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
-<XPD:REF name="Views[1]">UA5dbT7GVU2OqjVX9PXuWAAA</XPD:REF>
-<XPD:REF name="Views[2]">9c90i0MrUkKipskFCo8wlgAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">7</XPD:ATTR>
-<XPD:REF name="Associations[0]">2RBODiwfOUCUVzGJ/32wAAAA</XPD:REF>
-<XPD:REF name="Associations[1]">LAvKrCSTOk+Idehr21cMIwAA</XPD:REF>
-<XPD:REF name="Associations[2]">BPqYWvTNKEOfCOeMpPA44AAA</XPD:REF>
-<XPD:REF name="Associations[3]">uJNUdzUQLUu2aPlejTqjNwAA</XPD:REF>
-<XPD:REF name="Associations[4]">jJgG/r4rjE2qAhy/U/lg2wAA</XPD:REF>
-<XPD:REF name="Associations[5]">HQZk+9nVI02CjFsZTEmJFgAA</XPD:REF>
-<XPD:REF name="Associations[6]">teHN23xRpE6lugxstCxsawAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[1]" type="UMLUseCase" guid="nAsf5tia702zzSQAu6L6VwAA">
-<XPD:ATTR name="Name" type="string">æœå°</XPD:ATTR>
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">gjXEJSzeBk24cBss5DrAhAAA</XPD:REF>
-<XPD:REF name="Views[1]">FCs4dSUL6ES18h1zCz8l6AAA</XPD:REF>
-<XPD:REF name="Views[2]">sTCdfdSS0UiUUNZ/B2e/FAAA</XPD:REF>
-<XPD:REF name="Views[3]">GczyMXZXJEmnDD4a7NAunwAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
-<XPD:REF name="Associations[0]">1h+kSCXpe0eWYNVJ4SXvTQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[2]" type="UMLUseCase" guid="yCRgNkRB+EGAwzfBjdJbqwAA">
-<XPD:ATTR name="Name" type="string">æ¢å°</XPD:ATTR>
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Frl6rGi4ekOSrHn6gJ5XLQAA</XPD:REF>
-<XPD:REF name="Views[1]">aH6LRR4We0O3VrbkDZF2cwAA</XPD:REF>
-<XPD:REF name="Views[2]">HAEKTxJSV0uP4v52ffOFQwAA</XPD:REF>
-<XPD:REF name="Views[3]">bSOUAy1Buk+obB82eUrFSQAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
-<XPD:REF name="Associations[0]">7KhVXW2jsUGTY2YhCHULSAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[3]" type="UMLUseCase" guid="W59J2q05J0K29agobcVJpwAA">
-<XPD:ATTR name="Name" type="string">得到当å‰å°çš„ä¿¡æ¯/å±æ˜¾</XPD:ATTR>
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Hyu7+1e/cES0Ae1OqV75fwAA</XPD:REF>
-<XPD:REF name="Views[1]">6VTL4WFMHEigYGfaMrdGYwAA</XPD:REF>
-<XPD:REF name="Views[2]">7rrGYYen40CFqpViVSVmAQAA</XPD:REF>
-<XPD:REF name="Views[3]">18I+62RrWEOFbvJ7hjlg4AAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
-<XPD:REF name="Associations[0]">X1+FYBSOWkaYgLu2FjOTXwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[4]" type="UMLUseCase" guid="ExhZCRayVUq9VZBeXyOzSgAA">
-<XPD:ATTR name="Name" type="string">得到全部å°çš„列表</XPD:ATTR>
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">JsuyLQhZc0Sm5Tx7vxV+jAAA</XPD:REF>
-<XPD:REF name="Views[1]">c8pFLtSKjE+idXYMkFpEQAAA</XPD:REF>
-<XPD:REF name="Views[2]">8s4aZ7v9JkWne3xJfZ0IqgAA</XPD:REF>
-<XPD:REF name="Views[3]">qTH2RWpVvkyOG5CaahXI1AAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
-<XPD:REF name="Associations[0]">pVT44Y4IlkCvW0rXC+dzRgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[5]" type="UMLAssociation" guid="hXa1Ze5PcEWvFq3WssbumAAA">
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">VKBbewCQmUyNjzWZhk3pLQAA</XPD:REF>
-<XPD:REF name="Views[1]">dgQAXdF4ZESvmtHR7mV1eAAA</XPD:REF>
-<XPD:REF name="Views[2]">nl0ivvTPhk6+ZWGNY3Z7QQAA</XPD:REF>
-<XPD:REF name="Views[3]">21Re8Yow20OMsCn0YuNvyQAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="2RBODiwfOUCUVzGJ/32wAAAA">
-<XPD:REF name="Association">hXa1Ze5PcEWvFq3WssbumAAA</XPD:REF>
-<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">gJVKivaSkUOMWN8rIdDn4gAA</XPD:REF>
-<XPD:REF name="Views[1]">xB9CaPtaBEGmmoo1GYSHmAAA</XPD:REF>
-<XPD:REF name="Views[2]">bGKgfsVj9UqvRKTQT54jnwAA</XPD:REF>
-<XPD:REF name="Views[3]">hx6u1xKLF028b6Yykl/JVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="1h+kSCXpe0eWYNVJ4SXvTQAA">
-<XPD:REF name="Association">hXa1Ze5PcEWvFq3WssbumAAA</XPD:REF>
-<XPD:REF name="Participant">nAsf5tia702zzSQAu6L6VwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">g4iIuaL510KG496BLjSxFAAA</XPD:REF>
-<XPD:REF name="Views[1]">TwLEoTMD10ehV8UPEkC8GAAA</XPD:REF>
-<XPD:REF name="Views[2]">9JL65E1Ll0K/gBYTvW27ggAA</XPD:REF>
-<XPD:REF name="Views[3]">W8FWavR8aUaHm9U8dXz4VgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[6]" type="UMLAssociation" guid="GWeTbEaAQUO+r17c6TtqcAAA">
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">T2Ct5boioEq1zBkQPfP1uAAA</XPD:REF>
-<XPD:REF name="Views[1]">itC6+9KIkUOoqvWzhIL9eAAA</XPD:REF>
-<XPD:REF name="Views[2]">yn7EMIRfMUivZuavba1QKgAA</XPD:REF>
-<XPD:REF name="Views[3]">qp8dQ4Cl50OUly+002LHkwAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="LAvKrCSTOk+Idehr21cMIwAA">
-<XPD:REF name="Association">GWeTbEaAQUO+r17c6TtqcAAA</XPD:REF>
-<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Cko4gh6CNESvzEaGX7xrTwAA</XPD:REF>
-<XPD:REF name="Views[1]">YXCHfhVdWUSEN2ZT/RAgUwAA</XPD:REF>
-<XPD:REF name="Views[2]">3/az9bmrj0OrABD1RgT7zgAA</XPD:REF>
-<XPD:REF name="Views[3]">QhKdEmGlb021SYaW2m8l2AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="7KhVXW2jsUGTY2YhCHULSAAA">
-<XPD:REF name="Association">GWeTbEaAQUO+r17c6TtqcAAA</XPD:REF>
-<XPD:REF name="Participant">yCRgNkRB+EGAwzfBjdJbqwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">K/CL0noaSEeVxfiH/AYdPQAA</XPD:REF>
-<XPD:REF name="Views[1]">gJsX46E8OEivWSn9FKGyIgAA</XPD:REF>
-<XPD:REF name="Views[2]">+sQ4dyQOwEyKXN3Siy8SeAAA</XPD:REF>
-<XPD:REF name="Views[3]">g0gSj9MvXEy5XaeQkbjoOwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[7]" type="UMLAssociation" guid="R+Mv7uh5kEuKr/Bia3KOhAAA">
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">AyvrWm4rVU2nEQ3SaHF+pwAA</XPD:REF>
-<XPD:REF name="Views[1]">Ic1rMSlGuEiOmC74Gs5VPgAA</XPD:REF>
-<XPD:REF name="Views[2]">LmeDzwQ4WE+N9ctpkvJC2QAA</XPD:REF>
-<XPD:REF name="Views[3]">/4mMqWe3yUWrZLbs6l2tZwAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="BPqYWvTNKEOfCOeMpPA44AAA">
-<XPD:REF name="Association">R+Mv7uh5kEuKr/Bia3KOhAAA</XPD:REF>
-<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">m94XoFukck+27/0mViZU2gAA</XPD:REF>
-<XPD:REF name="Views[1]">rl15HxW7wUGsb4vRn7Al9wAA</XPD:REF>
-<XPD:REF name="Views[2]">A1ODeRbq4kaOK4HMvaTeRQAA</XPD:REF>
-<XPD:REF name="Views[3]">LFchLERMEE2qPO6m3DpPuQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="X1+FYBSOWkaYgLu2FjOTXwAA">
-<XPD:REF name="Association">R+Mv7uh5kEuKr/Bia3KOhAAA</XPD:REF>
-<XPD:REF name="Participant">W59J2q05J0K29agobcVJpwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">/DGBSl3cJ0S8W6nJJJGcfwAA</XPD:REF>
-<XPD:REF name="Views[1]">QQK2e0FGJkigWh9ObCBDRgAA</XPD:REF>
-<XPD:REF name="Views[2]">WxqNKB0NhUqZpADhZw+P3QAA</XPD:REF>
-<XPD:REF name="Views[3]">Tj9w6ngJfUqetSitERQ8NQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[8]" type="UMLAssociation" guid="WrC8vAeUYkO3tLCoOTTa7gAA">
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">QIXdxKII/kqOJOJMY5AcogAA</XPD:REF>
-<XPD:REF name="Views[1]">Xq0mZflYI0KV42hvumdugQAA</XPD:REF>
-<XPD:REF name="Views[2]">vwdwId1yNkaUtmkTI1YWuQAA</XPD:REF>
-<XPD:REF name="Views[3]">1uoVEwi+dkyCZb5M7Pve2wAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="uJNUdzUQLUu2aPlejTqjNwAA">
-<XPD:REF name="Association">WrC8vAeUYkO3tLCoOTTa7gAA</XPD:REF>
-<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">kbnyVybMKEKdAdKhGeseZgAA</XPD:REF>
-<XPD:REF name="Views[1]">g5PdiNFseUGXOynpmdruGwAA</XPD:REF>
-<XPD:REF name="Views[2]">71PEDgUjsU+2i57rKSIWiQAA</XPD:REF>
-<XPD:REF name="Views[3]">WnuHsx6mVUGcSN3xCQss6QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="pVT44Y4IlkCvW0rXC+dzRgAA">
-<XPD:REF name="Association">WrC8vAeUYkO3tLCoOTTa7gAA</XPD:REF>
-<XPD:REF name="Participant">ExhZCRayVUq9VZBeXyOzSgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">4paVVhhoOU2GUrsd9Xm/FwAA</XPD:REF>
-<XPD:REF name="Views[1]">66pNRRmKjku3rnBmhfUBCgAA</XPD:REF>
-<XPD:REF name="Views[2]">i3/GDxY4DU6ZMPvt2/tUdgAA</XPD:REF>
-<XPD:REF name="Views[3]">Bn3vSuvCAEGkNyVyOiDjtAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[9]" type="UMLUseCase" guid="5KAC2LjvX0qQF9lBa5DyCwAA">
-<XPD:ATTR name="Name" type="string">设置å„ç§å‚æ•°ä¿¡æ¯</XPD:ATTR>
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">B39+MGxIAUu2bla4M15wGQAA</XPD:REF>
-<XPD:REF name="Views[1]">kRxUjogV4k2YkluNvawsMAAA</XPD:REF>
-<XPD:REF name="Views[2]">u8URrWr/hkiwdkqgLJdW+wAA</XPD:REF>
-<XPD:REF name="Views[3]">KOSNG5KSM0CFIOZucCSmlwAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
-<XPD:REF name="Associations[0]">iK2QfBiThkWwoji6bSWtswAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[10]" type="UMLAssociation" guid="y+qwgLasMEm0UKrVQN8iJQAA">
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">xD4JWSKF3EOTqNmsPzbc5QAA</XPD:REF>
-<XPD:REF name="Views[1]">Aug+XiD/L0C98F0lb8QKAgAA</XPD:REF>
-<XPD:REF name="Views[2]">+HDBsjEDKEqWUJZ9hnAU4QAA</XPD:REF>
-<XPD:REF name="Views[3]">8N0unm4hwUy3Q/ipJnkyXAAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="jJgG/r4rjE2qAhy/U/lg2wAA">
-<XPD:REF name="Association">y+qwgLasMEm0UKrVQN8iJQAA</XPD:REF>
-<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">evKHrFVG9kazUYsWGKYoRQAA</XPD:REF>
-<XPD:REF name="Views[1]">JgCUSElncUaW/Ryki1kRMQAA</XPD:REF>
-<XPD:REF name="Views[2]">vquz6rX3pkKrylGBjx30IAAA</XPD:REF>
-<XPD:REF name="Views[3]">CXIajd5ee06Zf7q4GbpG1QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="iK2QfBiThkWwoji6bSWtswAA">
-<XPD:REF name="Association">y+qwgLasMEm0UKrVQN8iJQAA</XPD:REF>
-<XPD:REF name="Participant">5KAC2LjvX0qQF9lBa5DyCwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">0NmimauDo0yxCgPn4bFExgAA</XPD:REF>
-<XPD:REF name="Views[1]">YPI7wcCBTUybTm1Spbgg8QAA</XPD:REF>
-<XPD:REF name="Views[2]">ntmWchFV+UqAdPT3cz9/JQAA</XPD:REF>
-<XPD:REF name="Views[3]">edAtn71weU2/fvAr2uihoQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[11]" type="UMLUseCase" guid="eLOxpsSp0EC08r5lL9rsZAAA">
-<XPD:ATTR name="Name" type="string">预约</XPD:ATTR>
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">grqGSNiheUuwFijgmxch+gAA</XPD:REF>
-<XPD:REF name="Views[1]">54HAvDvDa06v58oCDBCKXwAA</XPD:REF>
-<XPD:REF name="Views[2]">H5TD/VVzokWAABxo66dDiwAA</XPD:REF>
-<XPD:REF name="Views[3]">qqfU97a8nUqfLL2CFuWnjQAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
-<XPD:REF name="Associations[0]">rXVVaNhetUi+zkmUpV2EJAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[12]" type="UMLAssociation" guid="0s9c8w+QxUaASZ+fMtRSqQAA">
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">kVRyhJmyWEyyp5wuc+OXngAA</XPD:REF>
-<XPD:REF name="Views[1]">FypCN9NIE0C9ShWHmH/yxQAA</XPD:REF>
-<XPD:REF name="Views[2]">UYBImTsT3kmMLO4UVo7iDgAA</XPD:REF>
-<XPD:REF name="Views[3]">Dv0knjRPxEiA3FR76MzcQgAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="HQZk+9nVI02CjFsZTEmJFgAA">
-<XPD:REF name="Association">0s9c8w+QxUaASZ+fMtRSqQAA</XPD:REF>
-<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">oRaZRwRR1E+ugfvMU7Mx7AAA</XPD:REF>
-<XPD:REF name="Views[1]">Rf4Y2d2tx0eAEgaVNgix1gAA</XPD:REF>
-<XPD:REF name="Views[2]">e0J/wN1wUUGY7r7RQqgfrQAA</XPD:REF>
-<XPD:REF name="Views[3]">LK/960VLGUqFEI3dQB55GgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="rXVVaNhetUi+zkmUpV2EJAAA">
-<XPD:REF name="Association">0s9c8w+QxUaASZ+fMtRSqQAA</XPD:REF>
-<XPD:REF name="Participant">eLOxpsSp0EC08r5lL9rsZAAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">qZ6wG2yUdUCrkCtj+ADq5gAA</XPD:REF>
-<XPD:REF name="Views[1]">5xmhglHNPkebUvE0zYQ+1QAA</XPD:REF>
-<XPD:REF name="Views[2]">TJu7E2BYn0e7KDkLvMy6zQAA</XPD:REF>
-<XPD:REF name="Views[3]">HuuHMInFx0awxMfN0WO7nAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[13]" type="UMLUseCase" guid="DfNIoYa4GU+CP71/W8SrWwAA">
-<XPD:ATTR name="Name" type="string">回放</XPD:ATTR>
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">1rgOrFraekaSjgPeaxo6VQAA</XPD:REF>
-<XPD:REF name="Views[1]">rgrH2S52KUirNQUR897hjAAA</XPD:REF>
-<XPD:REF name="Views[2]">/Uw/TQZhfEa2XXCMAwNycQAA</XPD:REF>
-<XPD:REF name="Views[3]">c8C4qOOrcUa+n6I+x3qsmwAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
-<XPD:REF name="Associations[0]">AeXEiqTUjkaieSlGxTKX+QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[14]" type="UMLAssociation" guid="oYdSRRagC0OKiYHxCgS7CAAA">
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">FyWt2ux4n0C/jIWXlvGepAAA</XPD:REF>
-<XPD:REF name="Views[1]">tzUYyPqymkyQTrpQ3ESfLQAA</XPD:REF>
-<XPD:REF name="Views[2]">WsC4wpiLwESJvBADsJOD0QAA</XPD:REF>
-<XPD:REF name="Views[3]">240EHYi+MUSGtsZ2MH9vbAAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="teHN23xRpE6lugxstCxsawAA">
-<XPD:REF name="Association">oYdSRRagC0OKiYHxCgS7CAAA</XPD:REF>
-<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">jriPICawik+i/5uQ1tPPJQAA</XPD:REF>
-<XPD:REF name="Views[1]">oHna4JnixU6x5HHrqy8Y0gAA</XPD:REF>
-<XPD:REF name="Views[2]">CcjzfOb/A06oYHNBWwMyYAAA</XPD:REF>
-<XPD:REF name="Views[3]">eJcfvTsAsUKZSOjduilFwAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="AeXEiqTUjkaieSlGxTKX+QAA">
-<XPD:REF name="Association">oYdSRRagC0OKiYHxCgS7CAAA</XPD:REF>
-<XPD:REF name="Participant">DfNIoYa4GU+CP71/W8SrWwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">HGprZSDtFUGe58XLDa/llAAA</XPD:REF>
-<XPD:REF name="Views[1]">sgsEShSJaUa0m4iY/pH+kgAA</XPD:REF>
-<XPD:REF name="Views[2]">zD5xP/cAIkyWZDkkr5ToygAA</XPD:REF>
-<XPD:REF name="Views[3]">k/ixsOc3uECBJHIoPEzSCQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[15]" type="UMLUseCase" guid="eVrNXR8NqEC5uMEFgGKQ1gAA">
-<XPD:ATTR name="Name" type="string">ä¿å­˜æ•°æ®</XPD:ATTR>
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">mlqnICP04kuE2DQduAxCnAAA</XPD:REF>
-<XPD:REF name="Views[1]">ZBT2RXZyKE2KgZdND0TQCwAA</XPD:REF>
-<XPD:REF name="Views[2]">ayKElX0k9EWwlzIjQHBReAAA</XPD:REF>
-<XPD:REF name="Views[3]">TjYDD4DDi06is7FTfdSgGgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[16]" type="UMLActor" guid="EIFC2d0E6EScGB1xXji93AAA">
-<XPD:ATTR name="Name" type="string">å¼€å‘人员</XPD:ATTR>
-<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">3</XPD:ATTR>
-<XPD:REF name="Views[0]">8+OH6W5lhU2orgFp9fejxAAA</XPD:REF>
-<XPD:REF name="Views[1]">55svG5LVmEayI1yOLF/hYgAA</XPD:REF>
-<XPD:REF name="Views[2]">qt7RVSofskyCOe4IXevE3gAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[1]" type="UMLModel" guid="GSh70Nz8XUWNmgnjTARh/gAA">
-<XPD:ATTR name="Name" type="string">Analysis Model</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">analysisModel</XPD:ATTR>
-<XPD:REF name="Namespace">CoZuu0bDp0eooW1pQg6aQwAA</XPD:REF>
-<XPD:ATTR name="#OwnedElements" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="OwnedElements[0]" type="UMLAssociation" guid="rIQWVfPr7E24Tt4ljeTZ4wAA">
-<XPD:REF name="Namespace">GSh70Nz8XUWNmgnjTARh/gAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">G0kUvklDf0uhBeIUoV+srgAA</XPD:REF>
-<XPD:REF name="Views[1]">6o6l7Ax4b0uvR1w70cdJiAAA</XPD:REF>
-<XPD:REF name="Views[2]">3ZsGQfCQIk+ZPFC1FyyVeQAA</XPD:REF>
-<XPD:REF name="Views[3]">BCGhRmtL7kmoY1iXaapJOwAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="jLzV7XdHP0Ogmb7/6IPCtgAA">
-<XPD:REF name="Association">rIQWVfPr7E24Tt4ljeTZ4wAA</XPD:REF>
-<XPD:REF name="Participant">7dRihysn8kefkb+6mJlwzgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">zqmFgnNCJ0mU+9gnrH18SwAA</XPD:REF>
-<XPD:REF name="Views[1]">QE0xM9HZIUK4iQSOifSKDQAA</XPD:REF>
-<XPD:REF name="Views[2]">yt3drhX0N0aispBa+C83TAAA</XPD:REF>
-<XPD:REF name="Views[3]">L3X2M2UWvECpCLZj42krJAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="XKFQZaAIH0SxD7YBXgkK0wAA">
-<XPD:REF name="Association">rIQWVfPr7E24Tt4ljeTZ4wAA</XPD:REF>
-<XPD:REF name="Participant">ZRumjrTwgUamBDOstkagPgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">SuRONY2jREyvBHGP7nheBQAA</XPD:REF>
-<XPD:REF name="Views[1]">8rSGjmyTy0iar869slrlPgAA</XPD:REF>
-<XPD:REF name="Views[2]">l9UCuL7VoEm7vFLWkobdoAAA</XPD:REF>
-<XPD:REF name="Views[3]">NYMZ1wuIcUy7G5VODIYIDQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[1]" type="UMLAssociation" guid="0hCZfIhV4EOpKXcVPwcUnAAA">
-<XPD:REF name="Namespace">GSh70Nz8XUWNmgnjTARh/gAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">+dr3aeLg8k2RQ8khsHmmqAAA</XPD:REF>
-<XPD:REF name="Views[1]">eiIT0uNCpUywEWk7FrhutgAA</XPD:REF>
-<XPD:REF name="Views[2]">m5vcHblPLUe9VZHiD1lPzgAA</XPD:REF>
-<XPD:REF name="Views[3]">dHGIMYC9dUeyteDUvxEuNgAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="DGWju3i/80ObxLedRPIIEwAA">
-<XPD:REF name="Association">0hCZfIhV4EOpKXcVPwcUnAAA</XPD:REF>
-<XPD:REF name="Participant">7dRihysn8kefkb+6mJlwzgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">DGGWcQw7xESguDo8y8c9JwAA</XPD:REF>
-<XPD:REF name="Views[1]">RjfRt8utjEiWYhIQFBxLqgAA</XPD:REF>
-<XPD:REF name="Views[2]">YyNOaiAWMU6urAt6uMo51wAA</XPD:REF>
-<XPD:REF name="Views[3]">HRQ1wVKzDUe1hazbUuDnVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="TolxJOTDCkO5nyLC6ipkAwAA">
-<XPD:REF name="Association">0hCZfIhV4EOpKXcVPwcUnAAA</XPD:REF>
-<XPD:REF name="Participant">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">bVRmxC4LeEivBU8rO/l1IwAA</XPD:REF>
-<XPD:REF name="Views[1]">/6WmiwEpmUGnLzBRc6lCzwAA</XPD:REF>
-<XPD:REF name="Views[2]">Brf+/LZbFEamowtJ6zGOAgAA</XPD:REF>
-<XPD:REF name="Views[3]">eme8PTCUYkiREXPCAN1ACgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[2]" type="UMLModel" guid="dZ4UyetzSE+rDT9vQthF9wAA">
-<XPD:ATTR name="Name" type="string">Design Model</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">designModel</XPD:ATTR>
-<XPD:REF name="Namespace">CoZuu0bDp0eooW1pQg6aQwAA</XPD:REF>
-<XPD:ATTR name="#OwnedDiagrams" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="OwnedDiagrams[0]" type="UMLClassDiagram" guid="qjYhNoiY1kqmGvfSf6HTOAAA">
-<XPD:ATTR name="Name" type="string">dtvclass</XPD:ATTR>
-<XPD:ATTR name="DefaultDiagram" type="boolean">True</XPD:ATTR>
-<XPD:REF name="DiagramOwner">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="P51EDp27mEuFUgKS4BG9TgAA">
-<XPD:REF name="Diagram">qjYhNoiY1kqmGvfSf6HTOAAA</XPD:REF>
-<XPD:ATTR name="#OwnedViews" type="integer">33</XPD:ATTR>
-<XPD:OBJ name="OwnedViews[0]" type="UMLClassView" guid="a8FG7H9SzUelkRx52q1d5AAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">312</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">568</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">86</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">53</XPD:ATTR>
-<XPD:REF name="Model">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="JQh3Wiuct0GpOwtZi9ZTpgAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="uNhK2xLegUaBu+NFKaBbSwAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CTvDatabase</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="hhHle2OI4Uu0405GJDfGVwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="jkWfDES3TkmlCIFIs5xizAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="k1LHywt4TEe6bHJwUzft/QAA">
-<XPD:REF name="Model">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="hc7Nc/x4iE+k/Ee76MBxMgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="Pwafosd7ik6mD1kxdwntngAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[1]" type="UMLClassView" guid="Y9zMsiXlQEuyiSGOmpswRwAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">780</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">528</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">102</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
-<XPD:REF name="Model">5BXVsgqK1kanN/l0hNx/IQAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="/mSRKoE2+U2BADYjjBN3tQAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="IXnfaLgTKEGGdpX37KpTHgAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CTvSubtitle</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="+DeDbUnm+02usH1UojzZyQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="TObRQcYR6UWZmkjnkVEugwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="3kCRXwUbYEOaB2YVqs3CMQAA">
-<XPD:REF name="Model">5BXVsgqK1kanN/l0hNx/IQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="2pFBVEb3NUu3IhdJeNfBWAAA">
-<XPD:REF name="Model">5BXVsgqK1kanN/l0hNx/IQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="xx5BbdZ+6Eehp04cM6fnfwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">5BXVsgqK1kanN/l0hNx/IQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[2]" type="UMLClassView" guid="9Ld1pTeBF0CZmoVdEfEBMQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">324</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">228</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">83</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
-<XPD:REF name="Model">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="KKCqrHWJXUyPtjvhGK6nTAAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="VODhD4+mz0yMbBwwjb3fXAAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CDtv</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="0OuB7ZzwGEqA8drjlJeNBgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="Zc9FQRwP2Uuj8JJg74Jt3QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="mxcpZDUEI0aTfXvfNUP8/QAA">
-<XPD:REF name="Model">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="0p/pTktl+kimPcmFJ4/wywAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="kWtX8dZWikSHi3kCydMHCAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[3]" type="UMLClassView" guid="BVNqLhbhP06y98++NgmxAwAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">284</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">388</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">147</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">33</XPD:ATTR>
-<XPD:REF name="Model">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="juDswX7uL0W7bBJuRk06AgAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="ICbKIhrn50Gwq1GIFxbJYAAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CTvProgram</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="YHcJ0obYSEWbDvvepjISuwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="27Jf3klYvE2MAvnGgH8YqAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="muUyRePjd0qlQqM/tvfrmQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="3aWGjpGXTkqRn+NbEzYu5QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="ylciM87U9keZe9hSnVequAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[4]" type="UMLClassView" guid="iEgH+6H6kkG++neKuToTSgAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">100</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">420</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">97</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">46</XPD:ATTR>
-<XPD:REF name="Model">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="lnKxD1DyGEOj9cd46nB84QAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="FHfQpxZydUGiBASqFcX2dAAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CTvChannel</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="fd0gByAKXkisiM6J7MwdtAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="9r4OqNYuVUegwaUPTkv1pgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="Yo0KShxzIk2FSTydUse5OQAA">
-<XPD:REF name="Model">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="rmKV7ZtcVEudbDw02LTB/wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="+jiKzSIz/UuhSFnnJkuIEgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[5]" type="UMLClassView" guid="vYDCfUgYq0KaBSDnxbpYVgAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">704</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">244</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">80</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
-<XPD:REF name="Model">UiYOh8D78E22qQeFeDZpLAAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="+QL9bkNaPUyTOdUO4yAR6AAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="eT33Wt7M8kiSrhmhuXGtCgAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CTvConfig</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="iBlTL0B9OEevQofD0ibRjwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="cFIMtDWroUOFGL0NgRigMAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="KTNQfnqIy0q3wV+ARVtV9gAA">
-<XPD:REF name="Model">UiYOh8D78E22qQeFeDZpLAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="7Pq+TJVLy06gA8T6r5wMawAA">
-<XPD:REF name="Model">UiYOh8D78E22qQeFeDZpLAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="Fn0oKpD7lUyNbDw59UyRygAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">UiYOh8D78E22qQeFeDZpLAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[6]" type="UMLAssociationView" guid="12BWSnVhhUOUuox7tdL41gAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">284,417;196,433</XPD:ATTR>
-<XPD:REF name="Model">av0s6EXaYUKyooee2y6sdgAA</XPD:REF>
-<XPD:REF name="Head">iEgH+6H6kkG++neKuToTSgAA</XPD:REF>
-<XPD:REF name="Tail">BVNqLhbhP06y98++NgmxAwAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="4F+C2zwwrEOjx/qCnLXWPAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">av0s6EXaYUKyooee2y6sdgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="lXf6uq0JtkK3YNXTxTyP7wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">av0s6EXaYUKyooee2y6sdgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="8jym3kotyE2sBWD5KjhUiQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">av0s6EXaYUKyooee2y6sdgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="ioK1huVib0u6ILv3kHAeeQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">GZcPUasbnkG3pyGKV6NFnAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="awNg1wfSGU22on1C+XpBlgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">IEnUwW74QkSkdRZGqdKvaAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="cwfxPIXUd06ShM9BEivzxQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">GZcPUasbnkG3pyGKV6NFnAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="cGTSA3bQb0S81NQzsTj+QQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">IEnUwW74QkSkdRZGqdKvaAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="DBsnRjqoj0W9eAN/Flu+jwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">GZcPUasbnkG3pyGKV6NFnAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="LWsKT6dOQUKXma9Eoh+sUwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">IEnUwW74QkSkdRZGqdKvaAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="DUu549wQM0qPn9dAjjrLZgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">GZcPUasbnkG3pyGKV6NFnAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="l9TSA+eftkCY2p6qZDMGKAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">IEnUwW74QkSkdRZGqdKvaAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[7]" type="UMLAssociationView" guid="Qa1PhzSwWkyS1rm6eapfLwAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">354,568;357,420</XPD:ATTR>
-<XPD:REF name="Model">cNCsWS2hgkeaGhYJv9oONgAA</XPD:REF>
-<XPD:REF name="Head">BVNqLhbhP06y98++NgmxAwAA</XPD:REF>
-<XPD:REF name="Tail">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="QAoFSXFK+0S+5kDYAQ0LsgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">cNCsWS2hgkeaGhYJv9oONgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="rsOqshNVOkut6r+wW0Sp/wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">cNCsWS2hgkeaGhYJv9oONgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="0wZW9IH3y0OEPMfN5FyHQAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">cNCsWS2hgkeaGhYJv9oONgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="ySD9HMBWmEWoJg+/6boBZgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">2JZlFpDZPkGgaoWrrPAGXAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="TM3RNruxzEezNhF8XO/FmwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">PFZlUbzZu02nTTLsYZBoDgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="LXz8D2AdoE6ojzgkYCO0qAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">2JZlFpDZPkGgaoWrrPAGXAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="NpASusGGKU+/KwcKkTAMogAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">PFZlUbzZu02nTTLsYZBoDgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="ia8j06EduUmxgB5smbA9hQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">2JZlFpDZPkGgaoWrrPAGXAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="3dtXpNLbXka7wekzvAWsXQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">PFZlUbzZu02nTTLsYZBoDgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="/JYlnmhzTk66TicK0RjYaQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">2JZlFpDZPkGgaoWrrPAGXAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="Mvk2196ldk+5GLgct+OKuwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">PFZlUbzZu02nTTLsYZBoDgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[8]" type="UMLAssociationView" guid="UmHHYiIr3k+gNNomjLpgwwAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">319,568;179,465</XPD:ATTR>
-<XPD:REF name="Model">CVx7QaOEd0iJQ6USdSCilwAA</XPD:REF>
-<XPD:REF name="Head">iEgH+6H6kkG++neKuToTSgAA</XPD:REF>
-<XPD:REF name="Tail">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="ZBlvBeIE2UGGPTML4sQ7SgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">CVx7QaOEd0iJQ6USdSCilwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="UDn5R84weEayOYl6QVFj1wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">CVx7QaOEd0iJQ6USdSCilwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="OApAa7HXz0aTiMZGZ/g2tAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">CVx7QaOEd0iJQ6USdSCilwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="W1YT5dqwMUSUI29zCC2LZQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">XvxorIQvl0aKnzyznjd1uwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="24RGLobteEil7cUdAcyUcAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">q5Ko0bXKcE6uj05NJPSddwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="X96IIfOZSE2FAliwKkCNYgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">XvxorIQvl0aKnzyznjd1uwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="6Uw1pdad6kC8N8S0Rf1HxwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">q5Ko0bXKcE6uj05NJPSddwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="tr7uiHRKz0e//ValH5GU+AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">XvxorIQvl0aKnzyznjd1uwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="CuUsJAcsAUWwVZJzegOegAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">q5Ko0bXKcE6uj05NJPSddwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="zdcHIs6dNEmxQNtCK5uHIQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">XvxorIQvl0aKnzyznjd1uwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="AST9GWgDTEWR07o7yUcgIQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">q5Ko0bXKcE6uj05NJPSddwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[9]" type="UMLAssociationView" guid="oYsj3yhzJkCKmOBcWIHNDwAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">357,420;354,568</XPD:ATTR>
-<XPD:REF name="Model">hBOTE33GDUO/X8s5oHlAmQAA</XPD:REF>
-<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
-<XPD:REF name="Tail">BVNqLhbhP06y98++NgmxAwAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="GT6R2h3HkU6LThPKaghC1QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">hBOTE33GDUO/X8s5oHlAmQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="eWMr3v5Qb0y/nXu2s/EP5wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">hBOTE33GDUO/X8s5oHlAmQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="GR9gxzUjNkKmujWHFobLtAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">hBOTE33GDUO/X8s5oHlAmQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="+SSR3TM1z0m5UkTLiuMrGwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">Yo1IoB0X3ka1C+a/6xk1/gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="UuRRAQf+y0OdXTOvWu7nUAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">qOlPMeLYpUC4lTEl3Hsc8QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="Uvo2ryiBg0Oa5GJF4TRyhQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">Yo1IoB0X3ka1C+a/6xk1/gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="vI5c+acLSk6IfCcdqlaBggAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">qOlPMeLYpUC4lTEl3Hsc8QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="QBI1NHwjWU2dkj+SLUFZ+AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">Yo1IoB0X3ka1C+a/6xk1/gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="w3rpxhxEsEu0y7myhFrrkQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">qOlPMeLYpUC4lTEl3Hsc8QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="IYVJT/RjPUqjv8rl6ZIQiwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">Yo1IoB0X3ka1C+a/6xk1/gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="8Ip2rQJRaEaPAOW0cJSd/wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">qOlPMeLYpUC4lTEl3Hsc8QAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[10]" type="UMLAssociationView" guid="Vcgjd9eKakOjuUAjwzzhJgAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">179,465;319,568</XPD:ATTR>
-<XPD:REF name="Model">/X1BIuClXkywNV1vNa/LWwAA</XPD:REF>
-<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
-<XPD:REF name="Tail">iEgH+6H6kkG++neKuToTSgAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="+iIIR1mEnUynEPEjuGAd7AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">/X1BIuClXkywNV1vNa/LWwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="bZn71kXJQUOP3yAyCa5RvgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">/X1BIuClXkywNV1vNa/LWwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="O36co7nFz0elpJnbKtsYMwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">/X1BIuClXkywNV1vNa/LWwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="yjjLYCXJjUqX0IHnpKwHwQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">RoKhf4Bw3kmRk2O2D4GlxQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="Hv4K+XlgIkqDgqEz3aQWNQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">BVpPYPY4V0KsTBJTRoLjyAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="k1XiyO9mlke/IAq5UuYI9gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">RoKhf4Bw3kmRk2O2D4GlxQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="4o7M8jakfkixRwVgESrUnwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">BVpPYPY4V0KsTBJTRoLjyAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="Xtc7Jqe6N0+JAzLg1RxYLwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">RoKhf4Bw3kmRk2O2D4GlxQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="rCPaxzL0LEuk9Jjbqi+D2gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">BVpPYPY4V0KsTBJTRoLjyAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="W0UPJtBpLU6Y5SjscWTiVAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">RoKhf4Bw3kmRk2O2D4GlxQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="HKXhPda/vUuVwv4sR9ZR9QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">BVpPYPY4V0KsTBJTRoLjyAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[11]" type="UMLClassView" guid="8HnvkQxPk0OLqQXLeJ5MUgAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">820</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">316</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">86</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">56</XPD:ATTR>
-<XPD:REF name="Model">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="5gKeR33bd0K1R/QeIX+ZgQAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="tQ3eg1803UmmapVr5/mMKgAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CTvGroup</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="qwHtvoH6qk6Aj/xMPfoprQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="txC1zWyhHUKgVTvu0N6VDwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="50xz0k8rgU+WfODoAi8aeQAA">
-<XPD:REF name="Model">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="TR1rTShyhEG7ngh596L0kgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="GPl78wz82UaLho5xwfMqrQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[12]" type="UMLAssociationView" guid="VjZwKWmCoUO5wNRGJGVShAAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">820,364;397,573</XPD:ATTR>
-<XPD:REF name="Model">PudswW77eEShTMEdcK5BCAAA</XPD:REF>
-<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
-<XPD:REF name="Tail">8HnvkQxPk0OLqQXLeJ5MUgAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="6e9pHkpPaUyLDCYYnUYAOAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">PudswW77eEShTMEdcK5BCAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="QA7tnAAMA0e3tCDRlkB/JwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">PudswW77eEShTMEdcK5BCAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="gdUdn5u5x0KDsDKM41p2CQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">PudswW77eEShTMEdcK5BCAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="rqoTwNlD20Gou9xOLQ2RNgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">vyoQZGl3UECBMhf7+IDQUwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="d/3xrtQ+nU69mQYepo7NvQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">Io3cINfhiE23pmiSxpS6swAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="ox9r7npaB0in7/ygfG1ZMwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">vyoQZGl3UECBMhf7+IDQUwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="HcOo4bUmbUqLEjVUm2L2AQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">Io3cINfhiE23pmiSxpS6swAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="exLwGLRY306J0CEcqxlOrgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">vyoQZGl3UECBMhf7+IDQUwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="tQj+naSiJ0mB4W89ahH5ygAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">Io3cINfhiE23pmiSxpS6swAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="qxZgk8R36k2S3vGRfQegfwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">vyoQZGl3UECBMhf7+IDQUwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="LNFybtIVIkOXnQ/9QC5jEwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">Io3cINfhiE23pmiSxpS6swAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[13]" type="UMLClassView" guid="7aPHkO59WEubHbpM/Djq/AAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">456</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">396</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">89</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">41</XPD:ATTR>
-<XPD:REF name="Model">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="DSv+CNOMnUKyGF5bfoGDowAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="Fy6x/w12H0K3LtAtk0/MuwAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CTvEvent</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="xy2kKdqewEerLbDFtu0jAwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="ZxuiiS0/6EiXhRO/StIWPgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="+EOWTA5PrUyAEwB/ZHVnPAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="f0xyghRma028ShVYc8tbfwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="qpXdkd1nJ0ajRru7gzDFJwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[14]" type="UMLAssociationView" guid="QHk4xsvJRUGhKn0p+sReaAAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">484,436;375,568</XPD:ATTR>
-<XPD:REF name="Model">q5PurOmOUUOX8hzj5CINYQAA</XPD:REF>
-<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
-<XPD:REF name="Tail">7aPHkO59WEubHbpM/Djq/AAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="ezGCtUA0dUOn10D5pUOtoAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">q5PurOmOUUOX8hzj5CINYQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="QcGPzg741ki4yTGfoKvK9AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">q5PurOmOUUOX8hzj5CINYQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="ioZQYN39bEu/gy37UfkhmQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">q5PurOmOUUOX8hzj5CINYQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="mZFBakBXmE6Gj5qumz51gwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">iy8GVdK11EmKnmJ6LivVVQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="VrmcPyj2oUyEm5i/AG7/KgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">PhlKgbqPt0OClpwk2m9vswAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="KHpH30oHrEew1AGquvXiEQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">iy8GVdK11EmKnmJ6LivVVQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="odMtivppNUOccWtC85AVCQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">PhlKgbqPt0OClpwk2m9vswAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="W7KAnZMmjEKAxuaUXA4D6AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">iy8GVdK11EmKnmJ6LivVVQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="2IiGGrbDkUiobp5CJnME1QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">PhlKgbqPt0OClpwk2m9vswAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="jsiact/gpUS21gy1IeSlZQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">iy8GVdK11EmKnmJ6LivVVQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="+70t9Os6zUWhIAhufEQsBAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">PhlKgbqPt0OClpwk2m9vswAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[15]" type="UMLAssociationView" guid="l3oAx6sfA0ScCOouvAFKYwAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">430,410;456,412</XPD:ATTR>
-<XPD:REF name="Model">8zCqordbBESBaPJH8SIoOQAA</XPD:REF>
-<XPD:REF name="Head">7aPHkO59WEubHbpM/Djq/AAA</XPD:REF>
-<XPD:REF name="Tail">BVNqLhbhP06y98++NgmxAwAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="pM/XXFo9Ikq+kK5++HoZ0QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">8zCqordbBESBaPJH8SIoOQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="igklIYxpfka7OH5oAnRbPwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">8zCqordbBESBaPJH8SIoOQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="RtZQfGM0uUqohb/WlARRpwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">8zCqordbBESBaPJH8SIoOQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="lDsB+MeNlUy+OEBCbfs0OAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">zefo1Bu+v0e4gn9nUL+bSQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="pr9mkVSNO0KasNMsFvgDuQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">72fG4kbiM0eyczFPq2MtVAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="EeUDIEWsnkO5HzTU6L6kZQAA">
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">1</XPD:ATTR>
-<XPD:REF name="Model">zefo1Bu+v0e4gn9nUL+bSQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="4fUHmnlcd0WplogWZWqPRQAA">
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">1..*</XPD:ATTR>
-<XPD:REF name="Model">72fG4kbiM0eyczFPq2MtVAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="TuyQdZk0H0+ai9Mg3ZtK3AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">zefo1Bu+v0e4gn9nUL+bSQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="kKRq4K1cvEup70Oz2UFd8QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">72fG4kbiM0eyczFPq2MtVAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="NKw56kYvx0W0KlwhXPYWMwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">zefo1Bu+v0e4gn9nUL+bSQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="DS2eOvXKXku93Y4x950QPgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">72fG4kbiM0eyczFPq2MtVAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[16]" type="UMLClassView" guid="Th+ZwPCIw0CZjtawrnGPrQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">756</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">440</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">88</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">41</XPD:ATTR>
-<XPD:REF name="Model">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="sEpK+JymS02lZlpXniSRjAAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="Gfl9bfM73kq+EYU5hOwDUQAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CTvBooking</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="dWzJpyjDIE6y0Sx/YmBzlwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="Ak99xRpzJ0+K3Y8Z70NTWQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="LL3KL7SUuEyu4pY6NT57NAAA">
-<XPD:REF name="Model">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="dCkq+XCQgkaH1Q901KclHQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="+Bzptjmx3kWzAYT9fN/rxQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[17]" type="UMLClassView" guid="ybciiFK3jEO6SdfdRt6uAgAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">68</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">332</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">80</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">41</XPD:ATTR>
-<XPD:REF name="Model">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="VEgafHzMKkem+RzIfaWBnQAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="605ap6gGgUGE85kGWYWaKgAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CTvRegion</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="6TZwhHYPs0mXP+dvmVvxnwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="eHeyWsrCgUeI8XUSaf0Y5QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="AL2e0wMT+0K0AC6gZuuhdwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="zIfIWkZ3Lkiq2O9aOGiU/gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="exyb4FNp+Ue9ROAGwoQFcwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[18]" type="UMLClassView" guid="tzICJ64LmUSx1fvEy4dHZQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">580</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">396</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">80</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
-<XPD:REF name="Model">iUy0YZgyREC+o54lTQptaAAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="6w5B2Z+R1kG+mt3vZl3lVQAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="Cl9ObgtVFEmfwYkvLw0YHwAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CTvSatellite</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="GhJezIVJAUO7cg/A/n5EdQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="JwksgiMMQ0GQ6xqrv6I4jgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="yCTnlkoiRkSszYJDHrqQuwAA">
-<XPD:REF name="Model">iUy0YZgyREC+o54lTQptaAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="phU5m2tyh0yMlhsYRPe6dwAA">
-<XPD:REF name="Model">iUy0YZgyREC+o54lTQptaAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="S8DZ5jxQq0+WFWPFnQy7iAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">iUy0YZgyREC+o54lTQptaAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[19]" type="UMLAssociationView" guid="5vCGUSmlwUWKkjul/i5CoAAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">588,438;393,568</XPD:ATTR>
-<XPD:REF name="Model">3RrM1HB71kyHO0jB4JI4zgAA</XPD:REF>
-<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
-<XPD:REF name="Tail">tzICJ64LmUSx1fvEy4dHZQAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="ihIaZz5p+0Cte+Zqg1wUKgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">3RrM1HB71kyHO0jB4JI4zgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="XyhhchGH70uYaM5UdGboKQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">3RrM1HB71kyHO0jB4JI4zgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="+N+OW0LtoEyevYQ++bVO1gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">3RrM1HB71kyHO0jB4JI4zgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="vLsrualWRkO0QI8PcBWGAAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">DkcX/fIec029p5Da5gYToAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="blnGfW4UCk6tS0veRc88xAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">ULQw0JNjPE2758pFWlo+MQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="vWndJmxhrkKfipX/zAAt4AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">DkcX/fIec029p5Da5gYToAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="jGRa3FaTrUWVhYVG834fjwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">ULQw0JNjPE2758pFWlo+MQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="lKgJhvwP/Eygz7oPLvwsxwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">DkcX/fIec029p5Da5gYToAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="olvLmzjsfka5YmNEOntQDAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">ULQw0JNjPE2758pFWlo+MQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="AdMO10glEEWGGHqpzKNvewAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">DkcX/fIec029p5Da5gYToAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="H/do1s5Rh02ETrOyjtaoaAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">ULQw0JNjPE2758pFWlo+MQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[20]" type="UMLClassView" guid="hzoiTuCQqEuArZEejfwdnQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">684</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">344</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">102</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
-<XPD:REF name="Model">/LI4+1GTjEagI/wLEFpVSQAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="bGpo24CeZkuczyv74zkRtAAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="M/nbdX/wf0SiKKXamCKy2gAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CTvDimension</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="mW7NW23ux06laiKhpkTD7wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="gVAZHA+LzE+/vXDeqIkJrgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="PdTrEGRJOEiEJyD2I9IzJgAA">
-<XPD:REF name="Model">/LI4+1GTjEagI/wLEFpVSQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="VbdqX2NLOkK2DTLhOA91OwAA">
-<XPD:REF name="Model">/LI4+1GTjEagI/wLEFpVSQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="K00/VzyqZUmltiuaKWLgAQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">/LI4+1GTjEagI/wLEFpVSQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[21]" type="UMLAssociationView" guid="EWnB2mjt6ke3pnsnQFRgJwAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">699,386;397,568</XPD:ATTR>
-<XPD:REF name="Model">GjMZbUwaMkGOkbxOXau26AAA</XPD:REF>
-<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
-<XPD:REF name="Tail">hzoiTuCQqEuArZEejfwdnQAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="dM3yo1oYRUWNB1JawgFnywAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">GjMZbUwaMkGOkbxOXau26AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="/IP55LSMZUCRoa77gkMh9gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">GjMZbUwaMkGOkbxOXau26AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="Og4FQYOz9kOr8LF43j+ySwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">GjMZbUwaMkGOkbxOXau26AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="zHiCXVqqgE6r2lDdnVDI1gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">gc0GlJ6ewUOpiyya+XPqjQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="Ggu7vb3GMU2vn9mS8bGZpwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">aYL27tYOR02se3g//aEBeAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="19Ii9g15zUmLLURud9e9XAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">gc0GlJ6ewUOpiyya+XPqjQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="wMyvwGpZQUmJ2a2lXlkc/AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">aYL27tYOR02se3g//aEBeAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="KLCf1m7tBkGvkM3iOxLhJgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">gc0GlJ6ewUOpiyya+XPqjQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="rn/sn4ErGkyYnwDUlnpmTAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">aYL27tYOR02se3g//aEBeAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="1+qZEhcpyk6RHirwjBjalgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">gc0GlJ6ewUOpiyya+XPqjQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="wElMDINXY0esqBl7AwoyfQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">aYL27tYOR02se3g//aEBeAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[22]" type="UMLAssociationView" guid="DbUG5zy8r0yq6L/I1naVdQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">324,266;147,336</XPD:ATTR>
-<XPD:REF name="Model">m6lnHtsBL02A4Oup+IzVEAAA</XPD:REF>
-<XPD:REF name="Head">ybciiFK3jEO6SdfdRt6uAgAA</XPD:REF>
-<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="1qY9qbCT1ka5tmfuL9yaJgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">m6lnHtsBL02A4Oup+IzVEAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="bnG59/mNjk+fcthvMQG2VAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">m6lnHtsBL02A4Oup+IzVEAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="wovrqiKgc0qw9BUyPaGuBQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">m6lnHtsBL02A4Oup+IzVEAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="hytVQ6VnmEaHnFV5o9fQ0AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">l6Lg/NJG5UWu+7ALxaVP3gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="JbJSjKTBikyT++rY1XVCtwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">kdbNMfgoG02cJO0UFJeeLwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="eYodfuyOKEK7WC9dBBlaigAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">l6Lg/NJG5UWu+7ALxaVP3gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="wUtw7zNylEK+wDvPOsUtGwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">kdbNMfgoG02cJO0UFJeeLwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="BEEaANsP0UCbPpRjMWyndwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">l6Lg/NJG5UWu+7ALxaVP3gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="/cBBOvztgE6Kd7yvemxXPwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">kdbNMfgoG02cJO0UFJeeLwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="JKx2O2r/H0y9NJ3+4rup1QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">l6Lg/NJG5UWu+7ALxaVP3gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="uj1vGzCGtkGielBw0Bxi4QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">kdbNMfgoG02cJO0UFJeeLwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[23]" type="UMLAssociationView" guid="l2Yo1ObIG0WVx7IS2a/B3QAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">340,272;173,420</XPD:ATTR>
-<XPD:REF name="Model">gmKjyBaRB0SfVd2p3FDOTwAA</XPD:REF>
-<XPD:REF name="Head">iEgH+6H6kkG++neKuToTSgAA</XPD:REF>
-<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Bt1whnZV8ke93vkLSyNq6wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">gmKjyBaRB0SfVd2p3FDOTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="fqRKs5ARzUGsdlKFgCFhWQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">gmKjyBaRB0SfVd2p3FDOTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="5M/QRFEaxUa0SktETbkRSwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">gmKjyBaRB0SfVd2p3FDOTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="oOLw6a4XNk6oN6yvhlsf7QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">QwwfXlN26EahMaF2XDAvLAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="51OtH+Gyy0+XZJVSgV/KuQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">X5VvOi2uGkGYzMMS5nWm2AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="kMLAHkAn9EKw71vpw3PgHQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">QwwfXlN26EahMaF2XDAvLAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="V2pqj6nPg0SqB+TNOQI5PwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">X5VvOi2uGkGYzMMS5nWm2AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="FYDexLT3eUK3X5xdW3Qq/gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">QwwfXlN26EahMaF2XDAvLAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="1rWGuTeEqEm+RdcskXCo9gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">X5VvOi2uGkGYzMMS5nWm2AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="VJLq9UMlJE2EqLEbDm23HQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">QwwfXlN26EahMaF2XDAvLAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="90vol1uY7U27TcNYwOdZBQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">X5VvOi2uGkGYzMMS5nWm2AAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[24]" type="UMLAssociationView" guid="dSXCMAUeXkaVaOqAa4KDAQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">364,272;358,388</XPD:ATTR>
-<XPD:REF name="Model">iBQV0DXX90uUjMTGr6FFjQAA</XPD:REF>
-<XPD:REF name="Head">BVNqLhbhP06y98++NgmxAwAA</XPD:REF>
-<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="AXtWRmQ/j0G8KsAfZc/QeQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">iBQV0DXX90uUjMTGr6FFjQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="pxhqUzjCEkqTLYfXynALEwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">iBQV0DXX90uUjMTGr6FFjQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="0nagXXOSFk+hHuMBpdFBLwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">iBQV0DXX90uUjMTGr6FFjQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="z3Q2FaOZNUa329RgqNTDpgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">IMPiiZPlxkaJkH8N2NGOggAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="+0LMOuMUukS68snSkLSsTwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">xf4XKZpxx0iF7C4H+oOABwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="bIZ0y/4MSEGDbNvxAP+XjAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">IMPiiZPlxkaJkH8N2NGOggAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="ow67AFPFhk2P92GHjX8x6gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">xf4XKZpxx0iF7C4H+oOABwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="C8AG2Zjc9UCIEaei4/obTgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">IMPiiZPlxkaJkH8N2NGOggAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="cLLrD3Z3uUyN5TkuZIiYvQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">xf4XKZpxx0iF7C4H+oOABwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="q1TRTMmCmEuxq3mV3WwE9wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">IMPiiZPlxkaJkH8N2NGOggAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="RpANS2KKQEiX7rWNn+sFQQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">xf4XKZpxx0iF7C4H+oOABwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[25]" type="UMLAssociationView" guid="ALV9IpRzikWc38x/4t62CgAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">383,272;484,396</XPD:ATTR>
-<XPD:REF name="Model">9P0hz9Bq2U6gDVowATxiWAAA</XPD:REF>
-<XPD:REF name="Head">7aPHkO59WEubHbpM/Djq/AAA</XPD:REF>
-<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="8t8bSCYvGkO28nJZE2y4nwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">9P0hz9Bq2U6gDVowATxiWAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="3EywKQmkOE2KjbjVh2NmDgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">9P0hz9Bq2U6gDVowATxiWAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="BbqpqccVf0Wg7tVha614JAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">9P0hz9Bq2U6gDVowATxiWAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="YVFZpgGB/0O96quX2udZDwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">BSJLLgAd4kCusm/8BFZQMQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="TSgUJz4gCUSqn+dKKulHoAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">yVknRLQq7U2nj3bRfizyAgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="pIexnuTBiUiEhhq44l4rCwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">BSJLLgAd4kCusm/8BFZQMQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="bB0rInPRJES1Fi1mh9FCEAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">yVknRLQq7U2nj3bRfizyAgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="yT+paMjNpkaG1OKJL+sYCAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">BSJLLgAd4kCusm/8BFZQMQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="Te1GttqM50mrkMzGYceWLQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">yVknRLQq7U2nj3bRfizyAgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="znNxDO7m6E6nvS/FYUZ9OAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">BSJLLgAd4kCusm/8BFZQMQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="XUHdjv1boEaqvLcg553dbwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">yVknRLQq7U2nj3bRfizyAgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[26]" type="UMLAssociationView" guid="hBsdq7HI/EWiSzAGC7VcegAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">398,272;587,396</XPD:ATTR>
-<XPD:REF name="Model">sBsUoQYdEkCsxRTpPtknYAAA</XPD:REF>
-<XPD:REF name="Head">tzICJ64LmUSx1fvEy4dHZQAA</XPD:REF>
-<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="AW09hEar3Einy0/8DRC44wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">sBsUoQYdEkCsxRTpPtknYAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="GL4o+Jwo9kafQcdPg1ZCtgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">sBsUoQYdEkCsxRTpPtknYAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="kNZhsHL9skazmf+MM+oIKwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">sBsUoQYdEkCsxRTpPtknYAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="5T2cPS5X+UykejaXNX6mSAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">bObyymjPEkeQZSoHCKpP2QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="VipQilP5w0axs39cx9OCsgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">6CsrL0wlVEKI657OoEev1gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="P16FQXg1DEOld8DfGFfSxQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">bObyymjPEkeQZSoHCKpP2QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="m6SZNVehm06iGtccsj43wAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">6CsrL0wlVEKI657OoEev1gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="FcWiwQTsx02Ku0N5G3bjSgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">bObyymjPEkeQZSoHCKpP2QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="x2e4QwAQ50Sn6Io3k6B2tAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">6CsrL0wlVEKI657OoEev1gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="d3kqRYSWSUSKKTZ+56sZkwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">bObyymjPEkeQZSoHCKpP2QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="4MO5fs8bNkahA1cEAQY9zAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">6CsrL0wlVEKI657OoEev1gAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[27]" type="UMLAssociationView" guid="Gfgt2UdXqE2QrN+Jzf+QvQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">406,263;684,349</XPD:ATTR>
-<XPD:REF name="Model">5JmzC90ylki6klhVRRibGAAA</XPD:REF>
-<XPD:REF name="Head">hzoiTuCQqEuArZEejfwdnQAA</XPD:REF>
-<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="/p9rmIUUo0mUctVF/yhY5AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">5JmzC90ylki6klhVRRibGAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="P5QKAYFqikOaJu107L2QDwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">5JmzC90ylki6klhVRRibGAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="y/WNtKBGo0q8OYbjC0evjgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">5JmzC90ylki6klhVRRibGAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="cGwksZvEz0aSTFoED5zuJQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">zCPl48BYx0CFRkp8Jj5mogAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="lELIUkkOg0a4b0G8373BcAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">be+eScBkV0Cn4n2XjSojvgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="pF9hWJbSZkCUq/C5qcS+7gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">zCPl48BYx0CFRkp8Jj5mogAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="R1FSACG6EkWd7DK8ihYAQAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">be+eScBkV0Cn4n2XjSojvgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="/NvtextfvUyZKtMbQ1urHAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">zCPl48BYx0CFRkp8Jj5mogAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="WXg43X5+gEiu4atePea88gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">be+eScBkV0Cn4n2XjSojvgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="4pUvTStSU0yU0BtcF8HyfQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">zCPl48BYx0CFRkp8Jj5mogAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="z+QrSf59lkSSqK+c5yKgcwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">be+eScBkV0Cn4n2XjSojvgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[28]" type="UMLAssociationView" guid="Z3PDc4i/1UCiaxni9RpD2wAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">756,473;397,581</XPD:ATTR>
-<XPD:REF name="Model">1PikxOdVcU2P6grgcwgRvQAA</XPD:REF>
-<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
-<XPD:REF name="Tail">Th+ZwPCIw0CZjtawrnGPrQAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="mhm++LaJkk6lJzcTz7hSFgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">1PikxOdVcU2P6grgcwgRvQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="IxT95vhnIEyr12fdRQskKQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">1PikxOdVcU2P6grgcwgRvQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="d+KXspkLsEa/YezZSZ7YZAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">1PikxOdVcU2P6grgcwgRvQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="HxD2Y75aWkSp4d/0R6KiBgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">Fd/cvRV12USE+Vu6oJsMOgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="08HUrDXL5EahpEFi9GJ9yQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">AfVgLfyALEyP98guAbYHUAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="K5rMwb6Iyka5HDC+pxIZOwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">Fd/cvRV12USE+Vu6oJsMOgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="QRLcMMAOqES9/c4itcB3vAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">AfVgLfyALEyP98guAbYHUAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="GfMJbs1/nkShjuqnA/8BBAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">Fd/cvRV12USE+Vu6oJsMOgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="mQFH13/vQUucR5en5l/dUwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">AfVgLfyALEyP98guAbYHUAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="jXmYJVpZxkCkrM3yJ0eHmgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">Fd/cvRV12USE+Vu6oJsMOgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="m0oKw9kT5k2CSLEOl9tV+gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">AfVgLfyALEyP98guAbYHUAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[29]" type="UMLAssociationView" guid="JFsYjMcrU0GkgX8jFqUVZAAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">406,252;704,263</XPD:ATTR>
-<XPD:REF name="Model">3PUgTTrP3U+LofrDCso/eAAA</XPD:REF>
-<XPD:REF name="Head">vYDCfUgYq0KaBSDnxbpYVgAA</XPD:REF>
-<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="R57gZgKnBkm8aQCFy90fiQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">3PUgTTrP3U+LofrDCso/eAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="GznyP+sffEKB3m9dw8jftQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">3PUgTTrP3U+LofrDCso/eAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="NM8M6o1EGkWwEmKdXXKpPAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">3PUgTTrP3U+LofrDCso/eAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="AoZLFazfK0WqZzhHukFsAwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">usmo/t5V5UGA31IdVHUKyQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="vVViwylf/Ei9ld6xTj7WdQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">PP9nsgv4Vkmbk1zEfct4VAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="pDauXlrgH0KfuJt30X8zxgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">usmo/t5V5UGA31IdVHUKyQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="fhSnklGoSEqMAzQOJY57vwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">PP9nsgv4Vkmbk1zEfct4VAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="QGcntempZkeGNA54l7y1rAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">usmo/t5V5UGA31IdVHUKyQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="A5rd4V90HkCp3dmD7wYTbwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">PP9nsgv4Vkmbk1zEfct4VAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="NKRAWeqgBEKgb6cHnYpt9QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">usmo/t5V5UGA31IdVHUKyQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="n4gqVjygvUK59/wDDHYNJgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">PP9nsgv4Vkmbk1zEfct4VAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[30]" type="UMLClassView" guid="wu+9+Z2tqE2B3qchWKoWdQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">20</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">500</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">119</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">63</XPD:ATTR>
-<XPD:REF name="Model">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="zRZpHvisoUiNkQtlLufy/AAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="z/By7OpfokuCMZMimH2OSQAA">
-<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
-<XPD:ATTR name="Text" type="string">CTvChannelParams</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="PKd1BAj8BkWUWLwbCv4oegAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="zu1bY/47U0eoDJhSjdTYNAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="KAuxxnmqhkmQ7MLBFq8lRgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="Ynggyopqt02II9Rzg7q1VQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="PmvllpBms0ifaPkwzqXvOAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Model">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[31]" type="UMLAssociationView" guid="Q/k+TeR21UWA0JPwiSZAnwAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">130,465;103,500</XPD:ATTR>
-<XPD:REF name="Model">7aJQb5j/+kWV9Kb/0dqoJAAA</XPD:REF>
-<XPD:REF name="Head">wu+9+Z2tqE2B3qchWKoWdQAA</XPD:REF>
-<XPD:REF name="Tail">iEgH+6H6kkG++neKuToTSgAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="C2jwipMyN0iMiEays2pVbQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">7aJQb5j/+kWV9Kb/0dqoJAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="MxF6R3nqrk+nOid9gUoepAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">7aJQb5j/+kWV9Kb/0dqoJAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="5CzND/56UUuAy2C5OXPJGAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">7aJQb5j/+kWV9Kb/0dqoJAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="VSR1os7RckKbbg+wZ6UPWwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">Dzfwehs+P0e8CyC/holLewAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="2P5BNH8K/UKYeriBTZAbSgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">C7X0ILbZrkWDVQ5Vc+PT/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="+gO4BIQphEShtlup7FhfcgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">Dzfwehs+P0e8CyC/holLewAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="nbxLBw93Oka1PVwDZftA2QAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">C7X0ILbZrkWDVQ5Vc+PT/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="3yHNXWsgu0eaPzi0F9a3dgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">Dzfwehs+P0e8CyC/holLewAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="X0Z4arOj+EWceCda6Sj0vgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">C7X0ILbZrkWDVQ5Vc+PT/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="laRXvwF4WE2wUODF6aCNSQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">Dzfwehs+P0e8CyC/holLewAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="lKhOSy40pUOJhnfmNzIx5AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">C7X0ILbZrkWDVQ5Vc+PT/wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[32]" type="UMLAssociationView" guid="2tALOFJiukSZiwAj9gBDIQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">138,545;312,584</XPD:ATTR>
-<XPD:REF name="Model">6r7WWefo1kK4HXJ46+UuHwAA</XPD:REF>
-<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
-<XPD:REF name="Tail">wu+9+Z2tqE2B3qchWKoWdQAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="BM0ZC/TOp0CzIS/dSFOgMQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">6r7WWefo1kK4HXJ46+UuHwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="911s2zFZYUCPtLOmXSDdDgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">6r7WWefo1kK4HXJ46+UuHwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="bOeJui9AgkWX+he6KT6czQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">6r7WWefo1kK4HXJ46+UuHwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="lMa33WFxzU2ojAIXkT9IwAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">AM/xtV731kSTTZbv0mmefgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="2U407qHmXE+0VHF/y4trXwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">+M+2f65R0UCJH6UP90YGAQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="MAu3FLtcFkOt8a9+Yj8MBAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">AM/xtV731kSTTZbv0mmefgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="16BTtqnINEq6DZln/1Uc4AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">+M+2f65R0UCJH6UP90YGAQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="Ehl7/9ciY0mjVGRlJGzTegAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">AM/xtV731kSTTZbv0mmefgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="dAD5Dd+Px0eU/Z7MNaXtWgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">+M+2f65R0UCJH6UP90YGAQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="FstmADGG7k2p8GVFXyT/GAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">AM/xtV731kSTTZbv0mmefgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="1RtPOXDsOEuSNTqKSxFAKAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">+M+2f65R0UCJH6UP90YGAQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedDiagrams[1]" type="UMLClassDiagram" guid="KQsibHBE0E+iq5h5Fks0CQAA">
-<XPD:ATTR name="Name" type="string">tvpackage</XPD:ATTR>
-<XPD:ATTR name="DefaultDiagram" type="boolean">True</XPD:ATTR>
-<XPD:ATTR name="DiagramType" type="string">RobustnessDiagram</XPD:ATTR>
-<XPD:REF name="DiagramOwner">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="x/A73wV6JUGNNCNYoihDDgAA">
-<XPD:REF name="Diagram">KQsibHBE0E+iq5h5Fks0CQAA</XPD:REF>
-<XPD:ATTR name="#OwnedViews" type="integer">10</XPD:ATTR>
-<XPD:OBJ name="OwnedViews[0]" type="UMLPackageView" guid="R7RBkUeb+E+5S8gvJN8+QQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">28</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">228</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">120</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">70</XPD:ATTR>
-<XPD:REF name="Model">ZRumjrTwgUamBDOstkagPgAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="Hex0jIlJWk2QTHp5TF36MwAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="155YNS2IsE2b46plldDuZwAA">
-<XPD:ATTR name="Text" type="string">atv</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="gqZ/H0j6nkqKMGqx1OqzOgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="mK5kp4doeUC6dn5S5jvPHAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[1]" type="UMLPackageView" guid="fCE1/LJF8k+yzWx4bHj2WgAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">336</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">224</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">120</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">70</XPD:ATTR>
-<XPD:REF name="Model">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="N9Ut8OrmLU6VnX16D13WOwAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="Yz9HR5DzxEuE9o9uHImtSQAA">
-<XPD:ATTR name="Text" type="string">dtv</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="LDxg9fdTakmhArzVxsd2GQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="L/ePjmLKwUeEeTrRhsEKMgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[2]" type="UMLPackageView" guid="H1zFqxbUzEqKqOJUsjP9UgAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">260</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">72</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">120</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">70</XPD:ATTR>
-<XPD:REF name="Model">7dRihysn8kefkb+6mJlwzgAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="f7UEhckiS0qQAoQ5jk3q5wAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="J4t7wKCRQk6ZH6fs1Q9YrgAA">
-<XPD:ATTR name="Text" type="string">tvjava</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="9qa1Yi+fukyu0We9ci5u/AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="+iZgsEiKfUmY0m8L9nAURwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[3]" type="UMLAssociationView" guid="G0kUvklDf0uhBeIUoV+srgAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">267,141;138,228</XPD:ATTR>
-<XPD:REF name="Model">rIQWVfPr7E24Tt4ljeTZ4wAA</XPD:REF>
-<XPD:REF name="Head">R7RBkUeb+E+5S8gvJN8+QQAA</XPD:REF>
-<XPD:REF name="Tail">H1zFqxbUzEqKqOJUsjP9UgAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="6o6l7Ax4b0uvR1w70cdJiAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">rIQWVfPr7E24Tt4ljeTZ4wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="3ZsGQfCQIk+ZPFC1FyyVeQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">rIQWVfPr7E24Tt4ljeTZ4wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="BCGhRmtL7kmoY1iXaapJOwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">rIQWVfPr7E24Tt4ljeTZ4wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="SuRONY2jREyvBHGP7nheBQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">XKFQZaAIH0SxD7YBXgkK0wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="zqmFgnNCJ0mU+9gnrH18SwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">jLzV7XdHP0Ogmb7/6IPCtgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="l9UCuL7VoEm7vFLWkobdoAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">XKFQZaAIH0SxD7YBXgkK0wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="yt3drhX0N0aispBa+C83TAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">jLzV7XdHP0Ogmb7/6IPCtgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="8rSGjmyTy0iar869slrlPgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">XKFQZaAIH0SxD7YBXgkK0wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="QE0xM9HZIUK4iQSOifSKDQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">jLzV7XdHP0Ogmb7/6IPCtgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="NYMZ1wuIcUy7G5VODIYIDQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1020</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">XKFQZaAIH0SxD7YBXgkK0wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="L3X2M2UWvECpCLZj42krJAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1020</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">jLzV7XdHP0Ogmb7/6IPCtgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[4]" type="UMLAssociationView" guid="+dr3aeLg8k2RQ8khsHmmqAAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">336,141;378,224</XPD:ATTR>
-<XPD:REF name="Model">0hCZfIhV4EOpKXcVPwcUnAAA</XPD:REF>
-<XPD:REF name="Head">fCE1/LJF8k+yzWx4bHj2WgAA</XPD:REF>
-<XPD:REF name="Tail">H1zFqxbUzEqKqOJUsjP9UgAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="eiIT0uNCpUywEWk7FrhutgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">0hCZfIhV4EOpKXcVPwcUnAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="m5vcHblPLUe9VZHiD1lPzgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">0hCZfIhV4EOpKXcVPwcUnAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="dHGIMYC9dUeyteDUvxEuNgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">0hCZfIhV4EOpKXcVPwcUnAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="bVRmxC4LeEivBU8rO/l1IwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">TolxJOTDCkO5nyLC6ipkAwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="DGGWcQw7xESguDo8y8c9JwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">DGWju3i/80ObxLedRPIIEwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="Brf+/LZbFEamowtJ6zGOAgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">TolxJOTDCkO5nyLC6ipkAwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="YyNOaiAWMU6urAt6uMo51wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">DGWju3i/80ObxLedRPIIEwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="/6WmiwEpmUGnLzBRc6lCzwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">TolxJOTDCkO5nyLC6ipkAwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="RjfRt8utjEiWYhIQFBxLqgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">DGWju3i/80ObxLedRPIIEwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="eme8PTCUYkiREXPCAN1ACgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1020</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">TolxJOTDCkO5nyLC6ipkAwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="HRQ1wVKzDUe1hazbUuDnVwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1020</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">DGWju3i/80ObxLedRPIIEwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[5]" type="UMLPackageView" guid="HUFrn02Id0u4EHrKc4mxVgAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">528</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">308</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">120</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">70</XPD:ATTR>
-<XPD:REF name="Model">CN6L5smMd0u/4SQDgGuxlAAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="I7oFyXOyn0ap6db6aB27kQAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="UZqAJSuU3kSCM+H7F0CJAwAA">
-<XPD:ATTR name="Text" type="string">am_mw</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="uBO1MGx+MkeMvQYhb1C2NQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="kl+qD1R9/USAxQT6CzXArgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[6]" type="UMLPackageView" guid="I+6GQQgDxUay2yh9EH63ugAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">296</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">428</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">120</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">70</XPD:ATTR>
-<XPD:REF name="Model">y05IqzZQzU2XtiSPAXk7QgAA</XPD:REF>
-<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="9hBSRpfEY02ywkAvNDqTXQAA">
-<XPD:OBJ name="NameLabel" type="LabelView" guid="h6PfAdCi8kytI+NLcAHmLAAA">
-<XPD:ATTR name="Text" type="string">am_adp</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="lQixSy3pSUqBMXv0rFJpcQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="LabelView" guid="GkA9EEwFZkyyC6WEJrJkMAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[7]" type="UMLAssociationView" guid="jyEOqiMx5kuOhl2RypG5igAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">455,284;528,316</XPD:ATTR>
-<XPD:REF name="Model">Yy1zZGFqjUCrfxwigF/GpgAA</XPD:REF>
-<XPD:REF name="Head">HUFrn02Id0u4EHrKc4mxVgAA</XPD:REF>
-<XPD:REF name="Tail">fCE1/LJF8k+yzWx4bHj2WgAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="CPHJazCBZ06NtAVR2VK7OQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">Yy1zZGFqjUCrfxwigF/GpgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="APOmD3psFUyWhRAnwzCajwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">Yy1zZGFqjUCrfxwigF/GpgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="QMsE3esBJk6sDRS6x5DJkQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">Yy1zZGFqjUCrfxwigF/GpgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="5/4cIerJAUmV49IBGwpo+AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">MOhicSFw0kKsC3+R+Reo0AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="Pet1Wl/5g0+pU9Kd2fc7SwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">KeKc5deyJkKjIbzodSAF8QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="xdfe8bjolEChoIUMuakZ8gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">MOhicSFw0kKsC3+R+Reo0AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="Dx+9oTBsHEO70cjv4b2azAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">KeKc5deyJkKjIbzodSAF8QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="BoU11LZqBk2U9D1Ai1YY2AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">MOhicSFw0kKsC3+R+Reo0AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="GAWp04mbX0+qBItsdvgjYwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">KeKc5deyJkKjIbzodSAF8QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="fBqd46+r3kqJEpg8jQ4//wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-984</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1076</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">MOhicSFw0kKsC3+R+Reo0AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="EDyc+T9/p0uT65Az3US0YgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-984</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1076</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">KeKc5deyJkKjIbzodSAF8QAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[8]" type="UMLAssociationView" guid="YWFKeOxwm0mHujDlyTbolQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">388,293;362,428</XPD:ATTR>
-<XPD:REF name="Model">+rFPRw7qR0aoTGBGytrjDAAA</XPD:REF>
-<XPD:REF name="Head">I+6GQQgDxUay2yh9EH63ugAA</XPD:REF>
-<XPD:REF name="Tail">fCE1/LJF8k+yzWx4bHj2WgAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="zrsbj2XE/EayNVwoOloIDAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">+rFPRw7qR0aoTGBGytrjDAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="pIYrJ7JAAUSz3n/qiGAv0gAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">+rFPRw7qR0aoTGBGytrjDAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="qoKs5KXOckiwAYzN24SMoQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">+rFPRw7qR0aoTGBGytrjDAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="5Y/PPNFnoUOKREH8OSaNBwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">n4pg4fd/GUuaJaSzXBirOAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="88cAHmNV00eS5otEvuUQZAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">osliKvkWrU6Jd0FLz/mZngAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="OURlWAjS10SUcdK4oeUXcwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">n4pg4fd/GUuaJaSzXBirOAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="+YTxAPro+k+Ev3Qa9Td+KAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">osliKvkWrU6Jd0FLz/mZngAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="NJe8vUJOvEixN2Md5vRGkgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">n4pg4fd/GUuaJaSzXBirOAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="BuekzgD4P0aqdOzNBAVkYAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">osliKvkWrU6Jd0FLz/mZngAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="5Y0Wg3PhS06h+5PmVU/QJAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-984</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1076</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">n4pg4fd/GUuaJaSzXBirOAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="zTwLHGMcZUaH/kCRcMqJlQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-984</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-1076</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">osliKvkWrU6Jd0FLz/mZngAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedViews[9]" type="UMLAssociationView" guid="G47JdG1ivEWpCS5+NGRUWQAA">
-<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
-<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
-<XPD:ATTR name="Points" type="Points">528,373;415,431</XPD:ATTR>
-<XPD:REF name="Model">eNd3z1weKEWCnlfqPTDLIgAA</XPD:REF>
-<XPD:REF name="Head">I+6GQQgDxUay2yh9EH63ugAA</XPD:REF>
-<XPD:REF name="Tail">HUFrn02Id0u4EHrKc4mxVgAA</XPD:REF>
-<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="u6LdVCjKbEaIGLn56/w1QQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">eNd3z1weKEWCnlfqPTDLIgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="ona2Ko0szEK+2FIv3L6R1wAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:REF name="Model">eNd3z1weKEWCnlfqPTDLIgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="fST4kYS4rkicfRLiq6BrYQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
-<XPD:REF name="Model">eNd3z1weKEWCnlfqPTDLIgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="AnTjwQSX4UO3xjKGm9U1PAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">SVDzdW2e/kG2il66SgxQ1wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="GtS+L0c22kmmx+S6raeEAAAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">elujImCAXkaoOjRAKkuxUAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="Rx+SX1Ukc0WijFhZRJ2tbgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">SVDzdW2e/kG2il66SgxQ1wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="r48AH3NG+kGYdG2dItOtqwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">elujImCAXkaoOjRAKkuxUAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="OMlcQeewVkyEmkWpq768pgAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
-<XPD:REF name="Model">SVDzdW2e/kG2il66SgxQ1wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="C6OdcHaGUEG0WccqDQbNoQAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
-<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
-<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
-<XPD:REF name="Model">elujImCAXkaoOjRAKkuxUAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="61/4k03iIkWp5ZY6aFMm4AAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-912</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">SVDzdW2e/kG2il66SgxQ1wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="aRw7UJOi9kaUwJX2uJ1tDwAA">
-<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
-<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
-<XPD:ATTR name="Top" type="integer">-912</XPD:ATTR>
-<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
-<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
-<XPD:REF name="Model">elujImCAXkaoOjRAKkuxUAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:ATTR name="#OwnedElements" type="integer">31</XPD:ATTR>
-<XPD:OBJ name="OwnedElements[0]" type="UMLAssociation" guid="av0s6EXaYUKyooee2y6sdgAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">12BWSnVhhUOUuox7tdL41gAA</XPD:REF>
-<XPD:REF name="Views[1]">4F+C2zwwrEOjx/qCnLXWPAAA</XPD:REF>
-<XPD:REF name="Views[2]">lXf6uq0JtkK3YNXTxTyP7wAA</XPD:REF>
-<XPD:REF name="Views[3]">8jym3kotyE2sBWD5KjhUiQAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="IEnUwW74QkSkdRZGqdKvaAAA">
-<XPD:REF name="Association">av0s6EXaYUKyooee2y6sdgAA</XPD:REF>
-<XPD:REF name="Participant">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">awNg1wfSGU22on1C+XpBlgAA</XPD:REF>
-<XPD:REF name="Views[1]">cGTSA3bQb0S81NQzsTj+QQAA</XPD:REF>
-<XPD:REF name="Views[2]">LWsKT6dOQUKXma9Eoh+sUwAA</XPD:REF>
-<XPD:REF name="Views[3]">l9TSA+eftkCY2p6qZDMGKAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="GZcPUasbnkG3pyGKV6NFnAAA">
-<XPD:REF name="Association">av0s6EXaYUKyooee2y6sdgAA</XPD:REF>
-<XPD:REF name="Participant">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">ioK1huVib0u6ILv3kHAeeQAA</XPD:REF>
-<XPD:REF name="Views[1]">cwfxPIXUd06ShM9BEivzxQAA</XPD:REF>
-<XPD:REF name="Views[2]">DBsnRjqoj0W9eAN/Flu+jwAA</XPD:REF>
-<XPD:REF name="Views[3]">DUu549wQM0qPn9dAjjrLZgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[1]" type="UMLAssociation" guid="cNCsWS2hgkeaGhYJv9oONgAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Qa1PhzSwWkyS1rm6eapfLwAA</XPD:REF>
-<XPD:REF name="Views[1]">QAoFSXFK+0S+5kDYAQ0LsgAA</XPD:REF>
-<XPD:REF name="Views[2]">rsOqshNVOkut6r+wW0Sp/wAA</XPD:REF>
-<XPD:REF name="Views[3]">0wZW9IH3y0OEPMfN5FyHQAAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="PFZlUbzZu02nTTLsYZBoDgAA">
-<XPD:REF name="Association">cNCsWS2hgkeaGhYJv9oONgAA</XPD:REF>
-<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">TM3RNruxzEezNhF8XO/FmwAA</XPD:REF>
-<XPD:REF name="Views[1]">NpASusGGKU+/KwcKkTAMogAA</XPD:REF>
-<XPD:REF name="Views[2]">3dtXpNLbXka7wekzvAWsXQAA</XPD:REF>
-<XPD:REF name="Views[3]">Mvk2196ldk+5GLgct+OKuwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="2JZlFpDZPkGgaoWrrPAGXAAA">
-<XPD:REF name="Association">cNCsWS2hgkeaGhYJv9oONgAA</XPD:REF>
-<XPD:REF name="Participant">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">ySD9HMBWmEWoJg+/6boBZgAA</XPD:REF>
-<XPD:REF name="Views[1]">LXz8D2AdoE6ojzgkYCO0qAAA</XPD:REF>
-<XPD:REF name="Views[2]">ia8j06EduUmxgB5smbA9hQAA</XPD:REF>
-<XPD:REF name="Views[3]">/JYlnmhzTk66TicK0RjYaQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[2]" type="UMLAssociation" guid="CVx7QaOEd0iJQ6USdSCilwAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">UmHHYiIr3k+gNNomjLpgwwAA</XPD:REF>
-<XPD:REF name="Views[1]">ZBlvBeIE2UGGPTML4sQ7SgAA</XPD:REF>
-<XPD:REF name="Views[2]">UDn5R84weEayOYl6QVFj1wAA</XPD:REF>
-<XPD:REF name="Views[3]">OApAa7HXz0aTiMZGZ/g2tAAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="q5Ko0bXKcE6uj05NJPSddwAA">
-<XPD:REF name="Association">CVx7QaOEd0iJQ6USdSCilwAA</XPD:REF>
-<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">24RGLobteEil7cUdAcyUcAAA</XPD:REF>
-<XPD:REF name="Views[1]">6Uw1pdad6kC8N8S0Rf1HxwAA</XPD:REF>
-<XPD:REF name="Views[2]">CuUsJAcsAUWwVZJzegOegAAA</XPD:REF>
-<XPD:REF name="Views[3]">AST9GWgDTEWR07o7yUcgIQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="XvxorIQvl0aKnzyznjd1uwAA">
-<XPD:REF name="Association">CVx7QaOEd0iJQ6USdSCilwAA</XPD:REF>
-<XPD:REF name="Participant">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">W1YT5dqwMUSUI29zCC2LZQAA</XPD:REF>
-<XPD:REF name="Views[1]">X96IIfOZSE2FAliwKkCNYgAA</XPD:REF>
-<XPD:REF name="Views[2]">tr7uiHRKz0e//ValH5GU+AAA</XPD:REF>
-<XPD:REF name="Views[3]">zdcHIs6dNEmxQNtCK5uHIQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[3]" type="UMLAssociation" guid="hBOTE33GDUO/X8s5oHlAmQAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">oYsj3yhzJkCKmOBcWIHNDwAA</XPD:REF>
-<XPD:REF name="Views[1]">GT6R2h3HkU6LThPKaghC1QAA</XPD:REF>
-<XPD:REF name="Views[2]">eWMr3v5Qb0y/nXu2s/EP5wAA</XPD:REF>
-<XPD:REF name="Views[3]">GR9gxzUjNkKmujWHFobLtAAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="qOlPMeLYpUC4lTEl3Hsc8QAA">
-<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Association">hBOTE33GDUO/X8s5oHlAmQAA</XPD:REF>
-<XPD:REF name="Participant">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">UuRRAQf+y0OdXTOvWu7nUAAA</XPD:REF>
-<XPD:REF name="Views[1]">vI5c+acLSk6IfCcdqlaBggAA</XPD:REF>
-<XPD:REF name="Views[2]">w3rpxhxEsEu0y7myhFrrkQAA</XPD:REF>
-<XPD:REF name="Views[3]">8Ip2rQJRaEaPAOW0cJSd/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="Yo1IoB0X3ka1C+a/6xk1/gAA">
-<XPD:REF name="Association">hBOTE33GDUO/X8s5oHlAmQAA</XPD:REF>
-<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">+SSR3TM1z0m5UkTLiuMrGwAA</XPD:REF>
-<XPD:REF name="Views[1]">Uvo2ryiBg0Oa5GJF4TRyhQAA</XPD:REF>
-<XPD:REF name="Views[2]">QBI1NHwjWU2dkj+SLUFZ+AAA</XPD:REF>
-<XPD:REF name="Views[3]">IYVJT/RjPUqjv8rl6ZIQiwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[4]" type="UMLAssociation" guid="/X1BIuClXkywNV1vNa/LWwAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Vcgjd9eKakOjuUAjwzzhJgAA</XPD:REF>
-<XPD:REF name="Views[1]">+iIIR1mEnUynEPEjuGAd7AAA</XPD:REF>
-<XPD:REF name="Views[2]">bZn71kXJQUOP3yAyCa5RvgAA</XPD:REF>
-<XPD:REF name="Views[3]">O36co7nFz0elpJnbKtsYMwAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="BVpPYPY4V0KsTBJTRoLjyAAA">
-<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Association">/X1BIuClXkywNV1vNa/LWwAA</XPD:REF>
-<XPD:REF name="Participant">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Hv4K+XlgIkqDgqEz3aQWNQAA</XPD:REF>
-<XPD:REF name="Views[1]">4o7M8jakfkixRwVgESrUnwAA</XPD:REF>
-<XPD:REF name="Views[2]">rCPaxzL0LEuk9Jjbqi+D2gAA</XPD:REF>
-<XPD:REF name="Views[3]">HKXhPda/vUuVwv4sR9ZR9QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="RoKhf4Bw3kmRk2O2D4GlxQAA">
-<XPD:REF name="Association">/X1BIuClXkywNV1vNa/LWwAA</XPD:REF>
-<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">yjjLYCXJjUqX0IHnpKwHwQAA</XPD:REF>
-<XPD:REF name="Views[1]">k1XiyO9mlke/IAq5UuYI9gAA</XPD:REF>
-<XPD:REF name="Views[2]">Xtc7Jqe6N0+JAzLg1RxYLwAA</XPD:REF>
-<XPD:REF name="Views[3]">W0UPJtBpLU6Y5SjscWTiVAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[5]" type="UMLAssociation" guid="PudswW77eEShTMEdcK5BCAAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">VjZwKWmCoUO5wNRGJGVShAAA</XPD:REF>
-<XPD:REF name="Views[1]">6e9pHkpPaUyLDCYYnUYAOAAA</XPD:REF>
-<XPD:REF name="Views[2]">QA7tnAAMA0e3tCDRlkB/JwAA</XPD:REF>
-<XPD:REF name="Views[3]">gdUdn5u5x0KDsDKM41p2CQAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="Io3cINfhiE23pmiSxpS6swAA">
-<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Association">PudswW77eEShTMEdcK5BCAAA</XPD:REF>
-<XPD:REF name="Participant">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">d/3xrtQ+nU69mQYepo7NvQAA</XPD:REF>
-<XPD:REF name="Views[1]">HcOo4bUmbUqLEjVUm2L2AQAA</XPD:REF>
-<XPD:REF name="Views[2]">tQj+naSiJ0mB4W89ahH5ygAA</XPD:REF>
-<XPD:REF name="Views[3]">LNFybtIVIkOXnQ/9QC5jEwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="vyoQZGl3UECBMhf7+IDQUwAA">
-<XPD:REF name="Association">PudswW77eEShTMEdcK5BCAAA</XPD:REF>
-<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">rqoTwNlD20Gou9xOLQ2RNgAA</XPD:REF>
-<XPD:REF name="Views[1]">ox9r7npaB0in7/ygfG1ZMwAA</XPD:REF>
-<XPD:REF name="Views[2]">exLwGLRY306J0CEcqxlOrgAA</XPD:REF>
-<XPD:REF name="Views[3]">qxZgk8R36k2S3vGRfQegfwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[6]" type="UMLAssociation" guid="q5PurOmOUUOX8hzj5CINYQAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">QHk4xsvJRUGhKn0p+sReaAAA</XPD:REF>
-<XPD:REF name="Views[1]">ezGCtUA0dUOn10D5pUOtoAAA</XPD:REF>
-<XPD:REF name="Views[2]">QcGPzg741ki4yTGfoKvK9AAA</XPD:REF>
-<XPD:REF name="Views[3]">ioZQYN39bEu/gy37UfkhmQAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="PhlKgbqPt0OClpwk2m9vswAA">
-<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Association">q5PurOmOUUOX8hzj5CINYQAA</XPD:REF>
-<XPD:REF name="Participant">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">VrmcPyj2oUyEm5i/AG7/KgAA</XPD:REF>
-<XPD:REF name="Views[1]">odMtivppNUOccWtC85AVCQAA</XPD:REF>
-<XPD:REF name="Views[2]">2IiGGrbDkUiobp5CJnME1QAA</XPD:REF>
-<XPD:REF name="Views[3]">+70t9Os6zUWhIAhufEQsBAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="iy8GVdK11EmKnmJ6LivVVQAA">
-<XPD:REF name="Association">q5PurOmOUUOX8hzj5CINYQAA</XPD:REF>
-<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">mZFBakBXmE6Gj5qumz51gwAA</XPD:REF>
-<XPD:REF name="Views[1]">KHpH30oHrEew1AGquvXiEQAA</XPD:REF>
-<XPD:REF name="Views[2]">W7KAnZMmjEKAxuaUXA4D6AAA</XPD:REF>
-<XPD:REF name="Views[3]">jsiact/gpUS21gy1IeSlZQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[7]" type="UMLAssociation" guid="8zCqordbBESBaPJH8SIoOQAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">l3oAx6sfA0ScCOouvAFKYwAA</XPD:REF>
-<XPD:REF name="Views[1]">pM/XXFo9Ikq+kK5++HoZ0QAA</XPD:REF>
-<XPD:REF name="Views[2]">igklIYxpfka7OH5oAnRbPwAA</XPD:REF>
-<XPD:REF name="Views[3]">RtZQfGM0uUqohb/WlARRpwAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="72fG4kbiM0eyczFPq2MtVAAA">
-<XPD:ATTR name="Multiplicity" type="string">1..*</XPD:ATTR>
-<XPD:REF name="Association">8zCqordbBESBaPJH8SIoOQAA</XPD:REF>
-<XPD:REF name="Participant">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">pr9mkVSNO0KasNMsFvgDuQAA</XPD:REF>
-<XPD:REF name="Views[1]">4fUHmnlcd0WplogWZWqPRQAA</XPD:REF>
-<XPD:REF name="Views[2]">kKRq4K1cvEup70Oz2UFd8QAA</XPD:REF>
-<XPD:REF name="Views[3]">DS2eOvXKXku93Y4x950QPgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="zefo1Bu+v0e4gn9nUL+bSQAA">
-<XPD:ATTR name="Multiplicity" type="string">1</XPD:ATTR>
-<XPD:REF name="Association">8zCqordbBESBaPJH8SIoOQAA</XPD:REF>
-<XPD:REF name="Participant">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">lDsB+MeNlUy+OEBCbfs0OAAA</XPD:REF>
-<XPD:REF name="Views[1]">EeUDIEWsnkO5HzTU6L6kZQAA</XPD:REF>
-<XPD:REF name="Views[2]">TuyQdZk0H0+ai9Mg3ZtK3AAA</XPD:REF>
-<XPD:REF name="Views[3]">NKw56kYvx0W0KlwhXPYWMwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[8]" type="UMLAssociation" guid="3RrM1HB71kyHO0jB4JI4zgAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">5vCGUSmlwUWKkjul/i5CoAAA</XPD:REF>
-<XPD:REF name="Views[1]">ihIaZz5p+0Cte+Zqg1wUKgAA</XPD:REF>
-<XPD:REF name="Views[2]">XyhhchGH70uYaM5UdGboKQAA</XPD:REF>
-<XPD:REF name="Views[3]">+N+OW0LtoEyevYQ++bVO1gAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="ULQw0JNjPE2758pFWlo+MQAA">
-<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Association">3RrM1HB71kyHO0jB4JI4zgAA</XPD:REF>
-<XPD:REF name="Participant">iUy0YZgyREC+o54lTQptaAAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">blnGfW4UCk6tS0veRc88xAAA</XPD:REF>
-<XPD:REF name="Views[1]">jGRa3FaTrUWVhYVG834fjwAA</XPD:REF>
-<XPD:REF name="Views[2]">olvLmzjsfka5YmNEOntQDAAA</XPD:REF>
-<XPD:REF name="Views[3]">H/do1s5Rh02ETrOyjtaoaAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="DkcX/fIec029p5Da5gYToAAA">
-<XPD:REF name="Association">3RrM1HB71kyHO0jB4JI4zgAA</XPD:REF>
-<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">vLsrualWRkO0QI8PcBWGAAAA</XPD:REF>
-<XPD:REF name="Views[1]">vWndJmxhrkKfipX/zAAt4AAA</XPD:REF>
-<XPD:REF name="Views[2]">lKgJhvwP/Eygz7oPLvwsxwAA</XPD:REF>
-<XPD:REF name="Views[3]">AdMO10glEEWGGHqpzKNvewAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[9]" type="UMLAssociation" guid="GjMZbUwaMkGOkbxOXau26AAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">EWnB2mjt6ke3pnsnQFRgJwAA</XPD:REF>
-<XPD:REF name="Views[1]">dM3yo1oYRUWNB1JawgFnywAA</XPD:REF>
-<XPD:REF name="Views[2]">/IP55LSMZUCRoa77gkMh9gAA</XPD:REF>
-<XPD:REF name="Views[3]">Og4FQYOz9kOr8LF43j+ySwAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="aYL27tYOR02se3g//aEBeAAA">
-<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Association">GjMZbUwaMkGOkbxOXau26AAA</XPD:REF>
-<XPD:REF name="Participant">/LI4+1GTjEagI/wLEFpVSQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Ggu7vb3GMU2vn9mS8bGZpwAA</XPD:REF>
-<XPD:REF name="Views[1]">wMyvwGpZQUmJ2a2lXlkc/AAA</XPD:REF>
-<XPD:REF name="Views[2]">rn/sn4ErGkyYnwDUlnpmTAAA</XPD:REF>
-<XPD:REF name="Views[3]">wElMDINXY0esqBl7AwoyfQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="gc0GlJ6ewUOpiyya+XPqjQAA">
-<XPD:REF name="Association">GjMZbUwaMkGOkbxOXau26AAA</XPD:REF>
-<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">zHiCXVqqgE6r2lDdnVDI1gAA</XPD:REF>
-<XPD:REF name="Views[1]">19Ii9g15zUmLLURud9e9XAAA</XPD:REF>
-<XPD:REF name="Views[2]">KLCf1m7tBkGvkM3iOxLhJgAA</XPD:REF>
-<XPD:REF name="Views[3]">1+qZEhcpyk6RHirwjBjalgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[10]" type="UMLAssociation" guid="m6lnHtsBL02A4Oup+IzVEAAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">DbUG5zy8r0yq6L/I1naVdQAA</XPD:REF>
-<XPD:REF name="Views[1]">1qY9qbCT1ka5tmfuL9yaJgAA</XPD:REF>
-<XPD:REF name="Views[2]">bnG59/mNjk+fcthvMQG2VAAA</XPD:REF>
-<XPD:REF name="Views[3]">wovrqiKgc0qw9BUyPaGuBQAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="kdbNMfgoG02cJO0UFJeeLwAA">
-<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Association">m6lnHtsBL02A4Oup+IzVEAAA</XPD:REF>
-<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">JbJSjKTBikyT++rY1XVCtwAA</XPD:REF>
-<XPD:REF name="Views[1]">wUtw7zNylEK+wDvPOsUtGwAA</XPD:REF>
-<XPD:REF name="Views[2]">/cBBOvztgE6Kd7yvemxXPwAA</XPD:REF>
-<XPD:REF name="Views[3]">uj1vGzCGtkGielBw0Bxi4QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="l6Lg/NJG5UWu+7ALxaVP3gAA">
-<XPD:REF name="Association">m6lnHtsBL02A4Oup+IzVEAAA</XPD:REF>
-<XPD:REF name="Participant">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">hytVQ6VnmEaHnFV5o9fQ0AAA</XPD:REF>
-<XPD:REF name="Views[1]">eYodfuyOKEK7WC9dBBlaigAA</XPD:REF>
-<XPD:REF name="Views[2]">BEEaANsP0UCbPpRjMWyndwAA</XPD:REF>
-<XPD:REF name="Views[3]">JKx2O2r/H0y9NJ3+4rup1QAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[11]" type="UMLAssociation" guid="gmKjyBaRB0SfVd2p3FDOTwAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">l2Yo1ObIG0WVx7IS2a/B3QAA</XPD:REF>
-<XPD:REF name="Views[1]">Bt1whnZV8ke93vkLSyNq6wAA</XPD:REF>
-<XPD:REF name="Views[2]">fqRKs5ARzUGsdlKFgCFhWQAA</XPD:REF>
-<XPD:REF name="Views[3]">5M/QRFEaxUa0SktETbkRSwAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="X5VvOi2uGkGYzMMS5nWm2AAA">
-<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Association">gmKjyBaRB0SfVd2p3FDOTwAA</XPD:REF>
-<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">51OtH+Gyy0+XZJVSgV/KuQAA</XPD:REF>
-<XPD:REF name="Views[1]">V2pqj6nPg0SqB+TNOQI5PwAA</XPD:REF>
-<XPD:REF name="Views[2]">1rWGuTeEqEm+RdcskXCo9gAA</XPD:REF>
-<XPD:REF name="Views[3]">90vol1uY7U27TcNYwOdZBQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="QwwfXlN26EahMaF2XDAvLAAA">
-<XPD:REF name="Association">gmKjyBaRB0SfVd2p3FDOTwAA</XPD:REF>
-<XPD:REF name="Participant">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">oOLw6a4XNk6oN6yvhlsf7QAA</XPD:REF>
-<XPD:REF name="Views[1]">kMLAHkAn9EKw71vpw3PgHQAA</XPD:REF>
-<XPD:REF name="Views[2]">FYDexLT3eUK3X5xdW3Qq/gAA</XPD:REF>
-<XPD:REF name="Views[3]">VJLq9UMlJE2EqLEbDm23HQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[12]" type="UMLAssociation" guid="iBQV0DXX90uUjMTGr6FFjQAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">dSXCMAUeXkaVaOqAa4KDAQAA</XPD:REF>
-<XPD:REF name="Views[1]">AXtWRmQ/j0G8KsAfZc/QeQAA</XPD:REF>
-<XPD:REF name="Views[2]">pxhqUzjCEkqTLYfXynALEwAA</XPD:REF>
-<XPD:REF name="Views[3]">0nagXXOSFk+hHuMBpdFBLwAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="xf4XKZpxx0iF7C4H+oOABwAA">
-<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Association">iBQV0DXX90uUjMTGr6FFjQAA</XPD:REF>
-<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">+0LMOuMUukS68snSkLSsTwAA</XPD:REF>
-<XPD:REF name="Views[1]">ow67AFPFhk2P92GHjX8x6gAA</XPD:REF>
-<XPD:REF name="Views[2]">cLLrD3Z3uUyN5TkuZIiYvQAA</XPD:REF>
-<XPD:REF name="Views[3]">RpANS2KKQEiX7rWNn+sFQQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="IMPiiZPlxkaJkH8N2NGOggAA">
-<XPD:REF name="Association">iBQV0DXX90uUjMTGr6FFjQAA</XPD:REF>
-<XPD:REF name="Participant">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">z3Q2FaOZNUa329RgqNTDpgAA</XPD:REF>
-<XPD:REF name="Views[1]">bIZ0y/4MSEGDbNvxAP+XjAAA</XPD:REF>
-<XPD:REF name="Views[2]">C8AG2Zjc9UCIEaei4/obTgAA</XPD:REF>
-<XPD:REF name="Views[3]">q1TRTMmCmEuxq3mV3WwE9wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[13]" type="UMLAssociation" guid="9P0hz9Bq2U6gDVowATxiWAAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">ALV9IpRzikWc38x/4t62CgAA</XPD:REF>
-<XPD:REF name="Views[1]">8t8bSCYvGkO28nJZE2y4nwAA</XPD:REF>
-<XPD:REF name="Views[2]">3EywKQmkOE2KjbjVh2NmDgAA</XPD:REF>
-<XPD:REF name="Views[3]">BbqpqccVf0Wg7tVha614JAAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="yVknRLQq7U2nj3bRfizyAgAA">
-<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Association">9P0hz9Bq2U6gDVowATxiWAAA</XPD:REF>
-<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">TSgUJz4gCUSqn+dKKulHoAAA</XPD:REF>
-<XPD:REF name="Views[1]">bB0rInPRJES1Fi1mh9FCEAAA</XPD:REF>
-<XPD:REF name="Views[2]">Te1GttqM50mrkMzGYceWLQAA</XPD:REF>
-<XPD:REF name="Views[3]">XUHdjv1boEaqvLcg553dbwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="BSJLLgAd4kCusm/8BFZQMQAA">
-<XPD:REF name="Association">9P0hz9Bq2U6gDVowATxiWAAA</XPD:REF>
-<XPD:REF name="Participant">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">YVFZpgGB/0O96quX2udZDwAA</XPD:REF>
-<XPD:REF name="Views[1]">pIexnuTBiUiEhhq44l4rCwAA</XPD:REF>
-<XPD:REF name="Views[2]">yT+paMjNpkaG1OKJL+sYCAAA</XPD:REF>
-<XPD:REF name="Views[3]">znNxDO7m6E6nvS/FYUZ9OAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[14]" type="UMLAssociation" guid="sBsUoQYdEkCsxRTpPtknYAAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">hBsdq7HI/EWiSzAGC7VcegAA</XPD:REF>
-<XPD:REF name="Views[1]">AW09hEar3Einy0/8DRC44wAA</XPD:REF>
-<XPD:REF name="Views[2]">GL4o+Jwo9kafQcdPg1ZCtgAA</XPD:REF>
-<XPD:REF name="Views[3]">kNZhsHL9skazmf+MM+oIKwAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="6CsrL0wlVEKI657OoEev1gAA">
-<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Association">sBsUoQYdEkCsxRTpPtknYAAA</XPD:REF>
-<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">VipQilP5w0axs39cx9OCsgAA</XPD:REF>
-<XPD:REF name="Views[1]">m6SZNVehm06iGtccsj43wAAA</XPD:REF>
-<XPD:REF name="Views[2]">x2e4QwAQ50Sn6Io3k6B2tAAA</XPD:REF>
-<XPD:REF name="Views[3]">4MO5fs8bNkahA1cEAQY9zAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="bObyymjPEkeQZSoHCKpP2QAA">
-<XPD:REF name="Association">sBsUoQYdEkCsxRTpPtknYAAA</XPD:REF>
-<XPD:REF name="Participant">iUy0YZgyREC+o54lTQptaAAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">5T2cPS5X+UykejaXNX6mSAAA</XPD:REF>
-<XPD:REF name="Views[1]">P16FQXg1DEOld8DfGFfSxQAA</XPD:REF>
-<XPD:REF name="Views[2]">FcWiwQTsx02Ku0N5G3bjSgAA</XPD:REF>
-<XPD:REF name="Views[3]">d3kqRYSWSUSKKTZ+56sZkwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[15]" type="UMLAssociation" guid="5JmzC90ylki6klhVRRibGAAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Gfgt2UdXqE2QrN+Jzf+QvQAA</XPD:REF>
-<XPD:REF name="Views[1]">/p9rmIUUo0mUctVF/yhY5AAA</XPD:REF>
-<XPD:REF name="Views[2]">P5QKAYFqikOaJu107L2QDwAA</XPD:REF>
-<XPD:REF name="Views[3]">y/WNtKBGo0q8OYbjC0evjgAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="be+eScBkV0Cn4n2XjSojvgAA">
-<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
-<XPD:REF name="Association">5JmzC90ylki6klhVRRibGAAA</XPD:REF>
-<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">lELIUkkOg0a4b0G8373BcAAA</XPD:REF>
-<XPD:REF name="Views[1]">R1FSACG6EkWd7DK8ihYAQAAA</XPD:REF>
-<XPD:REF name="Views[2]">WXg43X5+gEiu4atePea88gAA</XPD:REF>
-<XPD:REF name="Views[3]">z+QrSf59lkSSqK+c5yKgcwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="zCPl48BYx0CFRkp8Jj5mogAA">
-<XPD:REF name="Association">5JmzC90ylki6klhVRRibGAAA</XPD:REF>
-<XPD:REF name="Participant">/LI4+1GTjEagI/wLEFpVSQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">cGwksZvEz0aSTFoED5zuJQAA</XPD:REF>
-<XPD:REF name="Views[1]">pF9hWJbSZkCUq/C5qcS+7gAA</XPD:REF>
-<XPD:REF name="Views[2]">/NvtextfvUyZKtMbQ1urHAAA</XPD:REF>
-<XPD:REF name="Views[3]">4pUvTStSU0yU0BtcF8HyfQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[16]" type="UMLPackage" guid="7dRihysn8kefkb+6mJlwzgAA">
-<XPD:ATTR name="Name" type="string">tvjava</XPD:ATTR>
-<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPackage</XPD:ATTR>
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">1</XPD:ATTR>
-<XPD:REF name="Views[0]">H1zFqxbUzEqKqOJUsjP9UgAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">3</XPD:ATTR>
-<XPD:REF name="Associations[0]">jLzV7XdHP0Ogmb7/6IPCtgAA</XPD:REF>
-<XPD:REF name="Associations[1]">DGWju3i/80ObxLedRPIIEwAA</XPD:REF>
-<XPD:REF name="Associations[2]">frvBY5I3t0yZgEqYHUhfEQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[17]" type="UMLPackage" guid="CN6L5smMd0u/4SQDgGuxlAAA">
-<XPD:ATTR name="Name" type="string">am_mw</XPD:ATTR>
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">1</XPD:ATTR>
-<XPD:REF name="Views[0]">HUFrn02Id0u4EHrKc4mxVgAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">3</XPD:ATTR>
-<XPD:REF name="Associations[0]">MOhicSFw0kKsC3+R+Reo0AAA</XPD:REF>
-<XPD:REF name="Associations[1]">elujImCAXkaoOjRAKkuxUAAA</XPD:REF>
-<XPD:REF name="Associations[2]">0RZNIMepB0W9fkd6pMCEZwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[18]" type="UMLPackage" guid="y05IqzZQzU2XtiSPAXk7QgAA">
-<XPD:ATTR name="Name" type="string">am_adp</XPD:ATTR>
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">1</XPD:ATTR>
-<XPD:REF name="Views[0]">I+6GQQgDxUay2yh9EH63ugAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
-<XPD:REF name="Associations[0]">n4pg4fd/GUuaJaSzXBirOAAA</XPD:REF>
-<XPD:REF name="Associations[1]">SVDzdW2e/kG2il66SgxQ1wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[19]" type="UMLAssociation" guid="Yy1zZGFqjUCrfxwigF/GpgAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">jyEOqiMx5kuOhl2RypG5igAA</XPD:REF>
-<XPD:REF name="Views[1]">CPHJazCBZ06NtAVR2VK7OQAA</XPD:REF>
-<XPD:REF name="Views[2]">APOmD3psFUyWhRAnwzCajwAA</XPD:REF>
-<XPD:REF name="Views[3]">QMsE3esBJk6sDRS6x5DJkQAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="KeKc5deyJkKjIbzodSAF8QAA">
-<XPD:REF name="Association">Yy1zZGFqjUCrfxwigF/GpgAA</XPD:REF>
-<XPD:REF name="Participant">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Pet1Wl/5g0+pU9Kd2fc7SwAA</XPD:REF>
-<XPD:REF name="Views[1]">Dx+9oTBsHEO70cjv4b2azAAA</XPD:REF>
-<XPD:REF name="Views[2]">GAWp04mbX0+qBItsdvgjYwAA</XPD:REF>
-<XPD:REF name="Views[3]">EDyc+T9/p0uT65Az3US0YgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="MOhicSFw0kKsC3+R+Reo0AAA">
-<XPD:REF name="Association">Yy1zZGFqjUCrfxwigF/GpgAA</XPD:REF>
-<XPD:REF name="Participant">CN6L5smMd0u/4SQDgGuxlAAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">5/4cIerJAUmV49IBGwpo+AAA</XPD:REF>
-<XPD:REF name="Views[1]">xdfe8bjolEChoIUMuakZ8gAA</XPD:REF>
-<XPD:REF name="Views[2]">BoU11LZqBk2U9D1Ai1YY2AAA</XPD:REF>
-<XPD:REF name="Views[3]">fBqd46+r3kqJEpg8jQ4//wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[20]" type="UMLAssociation" guid="+rFPRw7qR0aoTGBGytrjDAAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">YWFKeOxwm0mHujDlyTbolQAA</XPD:REF>
-<XPD:REF name="Views[1]">zrsbj2XE/EayNVwoOloIDAAA</XPD:REF>
-<XPD:REF name="Views[2]">pIYrJ7JAAUSz3n/qiGAv0gAA</XPD:REF>
-<XPD:REF name="Views[3]">qoKs5KXOckiwAYzN24SMoQAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="osliKvkWrU6Jd0FLz/mZngAA">
-<XPD:REF name="Association">+rFPRw7qR0aoTGBGytrjDAAA</XPD:REF>
-<XPD:REF name="Participant">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">88cAHmNV00eS5otEvuUQZAAA</XPD:REF>
-<XPD:REF name="Views[1]">+YTxAPro+k+Ev3Qa9Td+KAAA</XPD:REF>
-<XPD:REF name="Views[2]">BuekzgD4P0aqdOzNBAVkYAAA</XPD:REF>
-<XPD:REF name="Views[3]">zTwLHGMcZUaH/kCRcMqJlQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="n4pg4fd/GUuaJaSzXBirOAAA">
-<XPD:REF name="Association">+rFPRw7qR0aoTGBGytrjDAAA</XPD:REF>
-<XPD:REF name="Participant">y05IqzZQzU2XtiSPAXk7QgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">5Y/PPNFnoUOKREH8OSaNBwAA</XPD:REF>
-<XPD:REF name="Views[1]">OURlWAjS10SUcdK4oeUXcwAA</XPD:REF>
-<XPD:REF name="Views[2]">NJe8vUJOvEixN2Md5vRGkgAA</XPD:REF>
-<XPD:REF name="Views[3]">5Y0Wg3PhS06h+5PmVU/QJAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[21]" type="UMLAssociation" guid="eNd3z1weKEWCnlfqPTDLIgAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">G47JdG1ivEWpCS5+NGRUWQAA</XPD:REF>
-<XPD:REF name="Views[1]">u6LdVCjKbEaIGLn56/w1QQAA</XPD:REF>
-<XPD:REF name="Views[2]">ona2Ko0szEK+2FIv3L6R1wAA</XPD:REF>
-<XPD:REF name="Views[3]">fST4kYS4rkicfRLiq6BrYQAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="elujImCAXkaoOjRAKkuxUAAA">
-<XPD:REF name="Association">eNd3z1weKEWCnlfqPTDLIgAA</XPD:REF>
-<XPD:REF name="Participant">CN6L5smMd0u/4SQDgGuxlAAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">GtS+L0c22kmmx+S6raeEAAAA</XPD:REF>
-<XPD:REF name="Views[1]">r48AH3NG+kGYdG2dItOtqwAA</XPD:REF>
-<XPD:REF name="Views[2]">C6OdcHaGUEG0WccqDQbNoQAA</XPD:REF>
-<XPD:REF name="Views[3]">aRw7UJOi9kaUwJX2uJ1tDwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="SVDzdW2e/kG2il66SgxQ1wAA">
-<XPD:REF name="Association">eNd3z1weKEWCnlfqPTDLIgAA</XPD:REF>
-<XPD:REF name="Participant">y05IqzZQzU2XtiSPAXk7QgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">AnTjwQSX4UO3xjKGm9U1PAAA</XPD:REF>
-<XPD:REF name="Views[1]">Rx+SX1Ukc0WijFhZRJ2tbgAA</XPD:REF>
-<XPD:REF name="Views[2]">OMlcQeewVkyEmkWpq768pgAA</XPD:REF>
-<XPD:REF name="Views[3]">61/4k03iIkWp5ZY6aFMm4AAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[22]" type="UMLPackage" guid="bnJ8ggSchket3/t1l7Kx4wAA">
-<XPD:ATTR name="Name" type="string">tv</XPD:ATTR>
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#OwnedElements" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="OwnedElements[0]" type="UMLPackage" guid="T1P4Xv7L+UuEzFqU+iyS5wAA">
-<XPD:ATTR name="Name" type="string">dtv</XPD:ATTR>
-<XPD:REF name="Namespace">bnJ8ggSchket3/t1l7Kx4wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">1</XPD:ATTR>
-<XPD:REF name="Views[0]">fCE1/LJF8k+yzWx4bHj2WgAA</XPD:REF>
-<XPD:ATTR name="#OwnedElements" type="integer">14</XPD:ATTR>
-<XPD:OBJ name="OwnedElements[0]" type="UMLClass" guid="xAj1pchzIEeSaRcR2+aFTwAA">
-<XPD:ATTR name="Name" type="string">CDtv</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
-<XPD:REF name="Views[1]">mxcpZDUEI0aTfXvfNUP8/QAA</XPD:REF>
-<XPD:REF name="Views[2]">0p/pTktl+kimPcmFJ4/wywAA</XPD:REF>
-<XPD:REF name="Views[3]">kWtX8dZWikSHi3kCydMHCAAA</XPD:REF>
-<XPD:ATTR name="#Operations" type="integer">32</XPD:ATTR>
-<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="dmYYHpECE0G9dWsxqVRqVgAA">
-<XPD:ATTR name="Name" type="string">startScan</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">开始频é“æœç´¢</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="XpPbBfTfWU2kqA1mr/vbJgAA">
-<XPD:ATTR name="Name" type="string">stopScan</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="UkrKc9f59kSDyV/AaLMH+gAA">
-<XPD:ATTR name="Name" type="string">startBooking</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="JcvijNcflkmNK8+KOhdCggAA">
-<XPD:ATTR name="Name" type="string">pause</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">æš‚åœæ’­æ”¾(回放和时移播放时有效)</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="i8IvkFjbqUCCSXorAzUdRAAA">
-<XPD:ATTR name="Name" type="string">resume</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">æ¢å¤æ’­æ”¾(回放和时移播放时有效)</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="dQd++JYYo0amx+JlLdJFWQAA">
-<XPD:ATTR name="Name" type="string">playProgram</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="zO9p84LeHUGvoLEQTCAS3QAA">
-<XPD:ATTR name="Name" type="string">num</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">dQd++JYYo0amx+JlLdJFWQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[6]" type="UMLOperation" guid="eEq01zCgM0aZvokMO+SqkQAA">
-<XPD:ATTR name="Name" type="string">fastForward</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">快进播放(回放和时移播放时有效)</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[7]" type="UMLOperation" guid="MU6Fk6s7TUi43t3TzPmDYAAA">
-<XPD:ATTR name="Name" type="string">fastBackward</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">快退播放(回放和时移播放时有效)</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[8]" type="UMLOperation" guid="+JpQ6Kv+wUetg2ukud8xAAAA">
-<XPD:ATTR name="Name" type="string">setVideoWindow</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[9]" type="UMLOperation" guid="Urh1T97yF0qVB2qrq91V/AAA">
-<XPD:ATTR name="Name" type="string">getTime</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[10]" type="UMLOperation" guid="+OoQqX2+hEy7+IGpcoRO6wAA">
-<XPD:ATTR name="Name" type="string">stopPlaying</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[11]" type="UMLOperation" guid="5AWp11enzE2zKYbJKwZ4SgAA">
-<XPD:ATTR name="Name" type="string">startTimeshifting</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">开始时移播放</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[12]" type="UMLOperation" guid="Tt9RCFNm7USWaJVzeiQO4wAA">
-<XPD:ATTR name="Name" type="string">stopTimeshifting</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[13]" type="UMLOperation" guid="9gabibFFh0+pG1jLLre65AAA">
-<XPD:ATTR name="Name" type="string">startRecording</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[14]" type="UMLOperation" guid="3d/CswBBrEy2IUoFJUC4zAAA">
-<XPD:ATTR name="Name" type="string">switchAudioTrack</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">切æ¢å£°é“</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[15]" type="UMLOperation" guid="IGijEoer5kSmMkA+Fo3ArwAA">
-<XPD:ATTR name="Name" type="string">stopRecording</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[16]" type="UMLOperation" guid="Zb4VlxMHWkS/g4Mf01SYQAAA">
-<XPD:ATTR name="Name" type="string">startPlayback</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">开始录制节目回放</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[17]" type="UMLOperation" guid="YMsIpjPwskyU47Z7OFZGswAA">
-<XPD:ATTR name="Name" type="string">stopPlayback</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[18]" type="UMLOperation" guid="KYZZjRnW+E6fVbHlCQJHLgAA">
-<XPD:ATTR name="Name" type="string">startBooking</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">开始一个预约处ç†</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[19]" type="UMLOperation" guid="+mKhDWf/OkWW6S8s1fQrdAAA">
-<XPD:ATTR name="Name" type="string">getFrontendStatus</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">å–å¾—å‰ç«¯é”定状æ€</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[20]" type="UMLOperation" guid="4LuPht07CEyB+RsryYpq8wAA">
-<XPD:ATTR name="Name" type="string">getFrontendSignalStrength</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">å–å¾—å‰ç«¯ä¿¡å·å¼ºåº¦</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[21]" type="UMLOperation" guid="auftPPtm9ESAf8dNdwpO8wAA">
-<XPD:ATTR name="Name" type="string">getFrontendSNR</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">å–å¾—å‰ç«¯SNR值</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[22]" type="UMLOperation" guid="SkFMqj2tAkCHB6YzXb25VAAA">
-<XPD:ATTR name="Name" type="string">getFrontendBER</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">å–å¾—å‰ç«¯BER值</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[23]" type="UMLOperation" guid="1Kkg1e8Eq0yMsbrLqj30vAAA">
-<XPD:ATTR name="Name" type="string">restoreFactorySetting</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">æ¢å¤å‡ºåŽ‚设置</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[24]" type="UMLOperation" guid="0F6QZhvGnEi9TAKhwr5gqAAA">
-<XPD:ATTR name="Name" type="string">setCvbsAmpOut</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">模拟CVBS AMP OUT</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[25]" type="UMLOperation" guid="H0pDJxWBtUeDplA7FSzwhQAA">
-<XPD:ATTR name="Name" type="string">unblock</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">解é”并播放当å‰å·²åŠ é”的频é“,例如密ç éªŒè¯é€šè¿‡åŽï¼Œè°ƒç”¨è¯¥æ–¹æ³•è¿›è¡Œè§£é”播放</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[26]" type="UMLOperation" guid="UdoijIW/80yYKWWst/w35AAA">
-<XPD:ATTR name="Name" type="string">lock</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">é”频,用于信å·æµ‹è¯•ç­‰</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[27]" type="UMLOperation" guid="7rGFPyAzzUe2jTVqsr5TPwAA">
-<XPD:ATTR name="Name" type="string">getChannelInfo</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">一些相关信æ¯,一个节目的相关信æ¯</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[28]" type="UMLOperation" guid="Pa5rqUzWwEaNHn5Ws2ScXQAA">
-<XPD:ATTR name="Name" type="string">getChannelList</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">得到所有或者æŸä¸€ç±»çš„所以节目信æ¯è¡¨,...include EPG?</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[29]" type="UMLOperation" guid="UYN2BdmAh0OwWr6FMv/4+gAA">
-<XPD:ATTR name="Name" type="string">editChannelList</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">编辑节目信æ¯</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[30]" type="UMLOperation" guid="W+xUDLU830SOa/MaA8+q9gAA">
-<XPD:ATTR name="Name" type="string">getEvent</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[31]" type="UMLOperation" guid="wX/iXD/If0yyRjn7rC8n9wAA">
-<XPD:ATTR name="Name" type="string">EpgScanner</XPD:ATTR>
-<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:ATTR name="#Associations" type="integer">7</XPD:ATTR>
-<XPD:REF name="Associations[0]">kdbNMfgoG02cJO0UFJeeLwAA</XPD:REF>
-<XPD:REF name="Associations[1]">X5VvOi2uGkGYzMMS5nWm2AAA</XPD:REF>
-<XPD:REF name="Associations[2]">xf4XKZpxx0iF7C4H+oOABwAA</XPD:REF>
-<XPD:REF name="Associations[3]">yVknRLQq7U2nj3bRfizyAgAA</XPD:REF>
-<XPD:REF name="Associations[4]">6CsrL0wlVEKI657OoEev1gAA</XPD:REF>
-<XPD:REF name="Associations[5]">be+eScBkV0Cn4n2XjSojvgAA</XPD:REF>
-<XPD:REF name="Associations[6]">PP9nsgv4Vkmbk1zEfct4VAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[1]" type="UMLClass" guid="SX+aNGg0j0WtdR26+LZ7OgAA">
-<XPD:ATTR name="Name" type="string">CTvDatabase</XPD:ATTR>
+<?xml version="1.0" encoding="UTF-8"?>
+<XPD:PROJECT xmlns:XPD="http://www.staruml.com" version="1">
+<XPD:HEADER>
+<XPD:SUBUNITS>
+</XPD:SUBUNITS>
+<XPD:PROFILES>
+<XPD:PROFILE>UMLStandard</XPD:PROFILE>
+<XPD:PROFILE>Java</XPD:PROFILE>
+<XPD:PROFILE>Cpp</XPD:PROFILE>
+</XPD:PROFILES>
+</XPD:HEADER>
+<XPD:BODY>
+<XPD:OBJ name="DocumentElement" type="UMLProject" guid="CoZuu0bDp0eooW1pQg6aQwAA">
+<XPD:ATTR name="Title" type="string">tv</XPD:ATTR>
+<XPD:ATTR name="#OwnedElements" type="integer">5</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLModel" guid="6Ncym1qqME6Qmj4IRHZMIQAA">
+<XPD:ATTR name="Name" type="string">Use Case Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">useCaseModel</XPD:ATTR>
+<XPD:REF name="Namespace">CoZuu0bDp0eooW1pQg6aQwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLUseCaseDiagram" guid="nzFiqgF5PEKC+zYpaFKlCQAA">
+<XPD:ATTR name="Name" type="string">tv功</XPD:ATTR>
+<XPD:REF name="DiagramOwner">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLUseCaseDiagramView" guid="nx0lwQzrskWozLI1S3LzQgAA">
+<XPD:REF name="Diagram">nzFiqgF5PEKC+zYpaFKlCQAA</XPD:REF>
+<XPD:ATTR name="#OwnedViews" type="integer">17</XPD:ATTR>
+<XPD:OBJ name="OwnedViews[0]" type="UMLActorView" guid="gvI3mIExBEmaszVtF0V6bwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">116</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">40</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">86</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">78</XPD:ATTR>
+<XPD:REF name="Model">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="FSYMWbRzs0mJbYfl9CkXfAAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="+Fy828Qip0uc61sSAd0UwQAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">user</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="TbdT9IJSLU+fl/JTxDnxxQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="aTiAvGpnHUGxIA1FbazntAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="UA5dbT7GVU2OqjVX9PXuWAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="9c90i0MrUkKipskFCo8wlgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[1]" type="UMLUseCaseView" guid="gjXEJSzeBk24cBss5DrAhAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">396</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">125</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
+<XPD:REF name="Model">nAsf5tia702zzSQAu6L6VwAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="WQwWYMpQtUCP6CaPlCcltQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="Nbu2DNQyW0K3OkEns8o8FgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">æœå°</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="k8VZH0rfeUaxBRl8mSLwDAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="EL3VwTjdHkCZndTAtu6x0QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="FCs4dSUL6ES18h1zCz8l6AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">nAsf5tia702zzSQAu6L6VwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="sTCdfdSS0UiUUNZ/B2e/FAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">nAsf5tia702zzSQAu6L6VwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="GczyMXZXJEmnDD4a7NAunwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">nAsf5tia702zzSQAu6L6VwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[2]" type="UMLUseCaseView" guid="Frl6rGi4ekOSrHn6gJ5XLQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">452</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">64</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">124</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
+<XPD:REF name="Model">yCRgNkRB+EGAwzfBjdJbqwAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="k0GCedKioUeNGvdENFUs4AAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="GZ0SKDfylkCAWEwMblBG9gAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">æ¢å°</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="zw9u23HITU+F7D/MPgZyoQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="ZaIixThNIkGc744Tm3CsugAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="aH6LRR4We0O3VrbkDZF2cwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">yCRgNkRB+EGAwzfBjdJbqwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="HAEKTxJSV0uP4v52ffOFQwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">yCRgNkRB+EGAwzfBjdJbqwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="bSOUAy1Buk+obB82eUrFSQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">yCRgNkRB+EGAwzfBjdJbqwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[3]" type="UMLUseCaseView" guid="Hyu7+1e/cES0Ae1OqV75fwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">428</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">124</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">237</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
+<XPD:REF name="Model">W59J2q05J0K29agobcVJpwAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="3d2gFNlI6EK+jsWimDIS+QAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="SVBydeRF006GMrAfC3ETqwAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">得到当å‰å°çš„ä¿¡æ¯/å±æ˜¾</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="SU3HDI+ru0WNDK77syR/GQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="CS3PuOwuBkW7+xAe2clbBAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="6VTL4WFMHEigYGfaMrdGYwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">W59J2q05J0K29agobcVJpwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="7rrGYYen40CFqpViVSVmAQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">W59J2q05J0K29agobcVJpwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="18I+62RrWEOFbvJ7hjlg4AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">W59J2q05J0K29agobcVJpwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[4]" type="UMLUseCaseView" guid="JsuyLQhZc0Sm5Tx7vxV+jAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">416</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">212</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">178</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
+<XPD:REF name="Model">ExhZCRayVUq9VZBeXyOzSgAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="kfnOa+AQV0Kj4BKPF56htAAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="6bLEGGIsiU6zFFc9j4F49wAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">得到全部å°çš„列表</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="ADRdb9imSEChWP9jDiJFWgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="Gp396ZK3MUyBaxd1WCTOIQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="c8pFLtSKjE+idXYMkFpEQAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">ExhZCRayVUq9VZBeXyOzSgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="8s4aZ7v9JkWne3xJfZ0IqgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">ExhZCRayVUq9VZBeXyOzSgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="qTH2RWpVvkyOG5CaahXI1AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">ExhZCRayVUq9VZBeXyOzSgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[5]" type="UMLAssociationView" guid="VKBbewCQmUyNjzWZhk3pLQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">201,70;396,34</XPD:ATTR>
+<XPD:REF name="Model">hXa1Ze5PcEWvFq3WssbumAAA</XPD:REF>
+<XPD:REF name="Head">gjXEJSzeBk24cBss5DrAhAAA</XPD:REF>
+<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="dgQAXdF4ZESvmtHR7mV1eAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">hXa1Ze5PcEWvFq3WssbumAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="nl0ivvTPhk6+ZWGNY3Z7QQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">hXa1Ze5PcEWvFq3WssbumAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="21Re8Yow20OMsCn0YuNvyQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">hXa1Ze5PcEWvFq3WssbumAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="g4iIuaL510KG496BLjSxFAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">1h+kSCXpe0eWYNVJ4SXvTQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="gJVKivaSkUOMWN8rIdDn4gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">2RBODiwfOUCUVzGJ/32wAAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="TwLEoTMD10ehV8UPEkC8GAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">1h+kSCXpe0eWYNVJ4SXvTQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="xB9CaPtaBEGmmoo1GYSHmAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">2RBODiwfOUCUVzGJ/32wAAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="9JL65E1Ll0K/gBYTvW27ggAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">1h+kSCXpe0eWYNVJ4SXvTQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="bGKgfsVj9UqvRKTQT54jnwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">2RBODiwfOUCUVzGJ/32wAAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="W8FWavR8aUaHm9U8dXz4VgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">1h+kSCXpe0eWYNVJ4SXvTQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="hx6u1xKLF028b6Yykl/JVwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">2RBODiwfOUCUVzGJ/32wAAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[6]" type="UMLAssociationView" guid="T2Ct5boioEq1zBkQPfP1uAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">201,79;452,85</XPD:ATTR>
+<XPD:REF name="Model">GWeTbEaAQUO+r17c6TtqcAAA</XPD:REF>
+<XPD:REF name="Head">Frl6rGi4ekOSrHn6gJ5XLQAA</XPD:REF>
+<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="itC6+9KIkUOoqvWzhIL9eAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">GWeTbEaAQUO+r17c6TtqcAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="yn7EMIRfMUivZuavba1QKgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">GWeTbEaAQUO+r17c6TtqcAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="qp8dQ4Cl50OUly+002LHkwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">GWeTbEaAQUO+r17c6TtqcAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="K/CL0noaSEeVxfiH/AYdPQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">7KhVXW2jsUGTY2YhCHULSAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="Cko4gh6CNESvzEaGX7xrTwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">LAvKrCSTOk+Idehr21cMIwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="gJsX46E8OEivWSn9FKGyIgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">7KhVXW2jsUGTY2YhCHULSAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="YXCHfhVdWUSEN2ZT/RAgUwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">LAvKrCSTOk+Idehr21cMIwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="+sQ4dyQOwEyKXN3Siy8SeAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">7KhVXW2jsUGTY2YhCHULSAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="3/az9bmrj0OrABD1RgT7zgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">LAvKrCSTOk+Idehr21cMIwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="g0gSj9MvXEy5XaeQkbjoOwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">7KhVXW2jsUGTY2YhCHULSAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="QhKdEmGlb021SYaW2m8l2AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">LAvKrCSTOk+Idehr21cMIwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[7]" type="UMLAssociationView" guid="AyvrWm4rVU2nEQ3SaHF+pwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">201,86;428,125</XPD:ATTR>
+<XPD:REF name="Model">R+Mv7uh5kEuKr/Bia3KOhAAA</XPD:REF>
+<XPD:REF name="Head">Hyu7+1e/cES0Ae1OqV75fwAA</XPD:REF>
+<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Ic1rMSlGuEiOmC74Gs5VPgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">R+Mv7uh5kEuKr/Bia3KOhAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="LmeDzwQ4WE+N9ctpkvJC2QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">R+Mv7uh5kEuKr/Bia3KOhAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="/4mMqWe3yUWrZLbs6l2tZwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">R+Mv7uh5kEuKr/Bia3KOhAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="/DGBSl3cJ0S8W6nJJJGcfwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">X1+FYBSOWkaYgLu2FjOTXwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="m94XoFukck+27/0mViZU2gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">BPqYWvTNKEOfCOeMpPA44AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="QQK2e0FGJkigWh9ObCBDRgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">X1+FYBSOWkaYgLu2FjOTXwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="rl15HxW7wUGsb4vRn7Al9wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">BPqYWvTNKEOfCOeMpPA44AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="WxqNKB0NhUqZpADhZw+P3QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">X1+FYBSOWkaYgLu2FjOTXwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="A1ODeRbq4kaOK4HMvaTeRQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">BPqYWvTNKEOfCOeMpPA44AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="Tj9w6ngJfUqetSitERQ8NQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">X1+FYBSOWkaYgLu2FjOTXwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="LFchLERMEE2qPO6m3DpPuQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">BPqYWvTNKEOfCOeMpPA44AAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[8]" type="UMLAssociationView" guid="QIXdxKII/kqOJOJMY5AcogAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">201,97;455,212</XPD:ATTR>
+<XPD:REF name="Model">WrC8vAeUYkO3tLCoOTTa7gAA</XPD:REF>
+<XPD:REF name="Head">JsuyLQhZc0Sm5Tx7vxV+jAAA</XPD:REF>
+<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Xq0mZflYI0KV42hvumdugQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">WrC8vAeUYkO3tLCoOTTa7gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="vwdwId1yNkaUtmkTI1YWuQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">WrC8vAeUYkO3tLCoOTTa7gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="1uoVEwi+dkyCZb5M7Pve2wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">WrC8vAeUYkO3tLCoOTTa7gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="4paVVhhoOU2GUrsd9Xm/FwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">pVT44Y4IlkCvW0rXC+dzRgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="kbnyVybMKEKdAdKhGeseZgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">uJNUdzUQLUu2aPlejTqjNwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="66pNRRmKjku3rnBmhfUBCgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">pVT44Y4IlkCvW0rXC+dzRgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="g5PdiNFseUGXOynpmdruGwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">uJNUdzUQLUu2aPlejTqjNwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="i3/GDxY4DU6ZMPvt2/tUdgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">pVT44Y4IlkCvW0rXC+dzRgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="71PEDgUjsU+2i57rKSIWiQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">uJNUdzUQLUu2aPlejTqjNwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="Bn3vSuvCAEGkNyVyOiDjtAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">pVT44Y4IlkCvW0rXC+dzRgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="WnuHsx6mVUGcSN3xCQss6QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">uJNUdzUQLUu2aPlejTqjNwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[9]" type="UMLUseCaseView" guid="B39+MGxIAUu2bla4M15wGQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">428</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">344</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">182</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
+<XPD:REF name="Model">5KAC2LjvX0qQF9lBa5DyCwAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="G5wIehwq+0eIoXt5370UvgAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="+OT5iGpyX0mfkpXaUy+lWgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">设置å„ç§å‚æ•°ä¿¡æ¯</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="liywRdQGmEmxnhyRBal4rAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="7R4zEmy7t0WDv/dHHBAF0AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="kRxUjogV4k2YkluNvawsMAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">5KAC2LjvX0qQF9lBa5DyCwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="u8URrWr/hkiwdkqgLJdW+wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">5KAC2LjvX0qQF9lBa5DyCwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="KOSNG5KSM0CFIOZucCSmlwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">5KAC2LjvX0qQF9lBa5DyCwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[10]" type="UMLAssociationView" guid="xD4JWSKF3EOTqNmsPzbc5QAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">201,112;491,344</XPD:ATTR>
+<XPD:REF name="Model">y+qwgLasMEm0UKrVQN8iJQAA</XPD:REF>
+<XPD:REF name="Head">B39+MGxIAUu2bla4M15wGQAA</XPD:REF>
+<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Aug+XiD/L0C98F0lb8QKAgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">y+qwgLasMEm0UKrVQN8iJQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="+HDBsjEDKEqWUJZ9hnAU4QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">y+qwgLasMEm0UKrVQN8iJQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="8N0unm4hwUy3Q/ipJnkyXAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">y+qwgLasMEm0UKrVQN8iJQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="0NmimauDo0yxCgPn4bFExgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">iK2QfBiThkWwoji6bSWtswAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="evKHrFVG9kazUYsWGKYoRQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">jJgG/r4rjE2qAhy/U/lg2wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="YPI7wcCBTUybTm1Spbgg8QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">iK2QfBiThkWwoji6bSWtswAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="JgCUSElncUaW/Ryki1kRMQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">jJgG/r4rjE2qAhy/U/lg2wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="ntmWchFV+UqAdPT3cz9/JQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">iK2QfBiThkWwoji6bSWtswAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="vquz6rX3pkKrylGBjx30IAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">jJgG/r4rjE2qAhy/U/lg2wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="edAtn71weU2/fvAr2uihoQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">iK2QfBiThkWwoji6bSWtswAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="CXIajd5ee06Zf7q4GbpG1QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">jJgG/r4rjE2qAhy/U/lg2wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[11]" type="UMLUseCaseView" guid="grqGSNiheUuwFijgmxch+gAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">236</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">280</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">130</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
+<XPD:REF name="Model">eLOxpsSp0EC08r5lL9rsZAAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="yd3L6GZKLkeQZ1rwi7QUdwAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="kTZxfY7VPkO7bRwo+0E/QgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">预约</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="bjVlyswu/kSF04Iq8TwUcwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="xcQ9Vgj+k0eBpJoVYqjU+QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="54HAvDvDa06v58oCDBCKXwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">eLOxpsSp0EC08r5lL9rsZAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="H5TD/VVzokWAABxo66dDiwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">eLOxpsSp0EC08r5lL9rsZAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="qqfU97a8nUqfLL2CFuWnjQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">eLOxpsSp0EC08r5lL9rsZAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[12]" type="UMLAssociationView" guid="kVRyhJmyWEyyp5wuc+OXngAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">183,117;286,280</XPD:ATTR>
+<XPD:REF name="Model">0s9c8w+QxUaASZ+fMtRSqQAA</XPD:REF>
+<XPD:REF name="Head">grqGSNiheUuwFijgmxch+gAA</XPD:REF>
+<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="FypCN9NIE0C9ShWHmH/yxQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">0s9c8w+QxUaASZ+fMtRSqQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="UYBImTsT3kmMLO4UVo7iDgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">0s9c8w+QxUaASZ+fMtRSqQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="Dv0knjRPxEiA3FR76MzcQgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">0s9c8w+QxUaASZ+fMtRSqQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="qZ6wG2yUdUCrkCtj+ADq5gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">rXVVaNhetUi+zkmUpV2EJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="oRaZRwRR1E+ugfvMU7Mx7AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">HQZk+9nVI02CjFsZTEmJFgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="5xmhglHNPkebUvE0zYQ+1QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">rXVVaNhetUi+zkmUpV2EJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="Rf4Y2d2tx0eAEgaVNgix1gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">HQZk+9nVI02CjFsZTEmJFgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="TJu7E2BYn0e7KDkLvMy6zQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">rXVVaNhetUi+zkmUpV2EJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="e0J/wN1wUUGY7r7RQqgfrQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">HQZk+9nVI02CjFsZTEmJFgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="HuuHMInFx0awxMfN0WO7nAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">rXVVaNhetUi+zkmUpV2EJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="LK/960VLGUqFEI3dQB55GgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">HQZk+9nVI02CjFsZTEmJFgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[13]" type="UMLUseCaseView" guid="1rgOrFraekaSjgPeaxo6VQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">44</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">276</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">121</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
+<XPD:REF name="Model">DfNIoYa4GU+CP71/W8SrWwAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="gO3lj/0VEkmcGBM22vSVygAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="5VgGyt6LmU26Ugzte0ke+QAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">回放</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="OYamm5Q5wEmGKhCOoHHMVQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="SG00AIBfJE6CGLnrfQ6vHAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="rgrH2S52KUirNQUR897hjAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">DfNIoYa4GU+CP71/W8SrWwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="/Uw/TQZhfEa2XXCMAwNycQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">DfNIoYa4GU+CP71/W8SrWwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="c8C4qOOrcUa+n6I+x3qsmwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">DfNIoYa4GU+CP71/W8SrWwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[14]" type="UMLAssociationView" guid="FyWt2ux4n0C/jIWXlvGepAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">148,117;109,276</XPD:ATTR>
+<XPD:REF name="Model">oYdSRRagC0OKiYHxCgS7CAAA</XPD:REF>
+<XPD:REF name="Head">1rgOrFraekaSjgPeaxo6VQAA</XPD:REF>
+<XPD:REF name="Tail">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="tzUYyPqymkyQTrpQ3ESfLQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">oYdSRRagC0OKiYHxCgS7CAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="WsC4wpiLwESJvBADsJOD0QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">oYdSRRagC0OKiYHxCgS7CAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="240EHYi+MUSGtsZ2MH9vbAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">oYdSRRagC0OKiYHxCgS7CAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="HGprZSDtFUGe58XLDa/llAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">AeXEiqTUjkaieSlGxTKX+QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="jriPICawik+i/5uQ1tPPJQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">teHN23xRpE6lugxstCxsawAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="sgsEShSJaUa0m4iY/pH+kgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">AeXEiqTUjkaieSlGxTKX+QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="oHna4JnixU6x5HHrqy8Y0gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">teHN23xRpE6lugxstCxsawAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="zD5xP/cAIkyWZDkkr5ToygAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">AeXEiqTUjkaieSlGxTKX+QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="CcjzfOb/A06oYHNBWwMyYAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">teHN23xRpE6lugxstCxsawAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="k/ixsOc3uECBJHIoPEzSCQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">AeXEiqTUjkaieSlGxTKX+QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="eJcfvTsAsUKZSOjduilFwAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">teHN23xRpE6lugxstCxsawAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[15]" type="UMLUseCaseView" guid="mlqnICP04kuE2DQduAxCnAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">676</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">208</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">121</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
+<XPD:REF name="Model">eVrNXR8NqEC5uMEFgGKQ1gAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="SRnkj+mMmkOMwzyxJwTibAAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="2afuLG9SqEymSxMJuyHxJgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">ä¿å­˜æ•°æ®</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="wUkUa3V6VU6SXo+560ZANAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="eeGzvESJskW2qRwldE4o8gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="ZBT2RXZyKE2KgZdND0TQCwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">eVrNXR8NqEC5uMEFgGKQ1gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="ayKElX0k9EWwlzIjQHBReAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">eVrNXR8NqEC5uMEFgGKQ1gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="ExtensionPointCompartment" type="UMLExtensionPointCompartmentView" guid="TjYDD4DDi06is7FTfdSgGgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">eVrNXR8NqEC5uMEFgGKQ1gAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[16]" type="UMLActorView" guid="8+OH6W5lhU2orgFp9fejxAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">896</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">36</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">72</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">78</XPD:ATTR>
+<XPD:REF name="Model">EIFC2d0E6EScGB1xXji93AAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="n/aO4ZyhvEOJuT58CBcC5gAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="2ZhkQxFuGk2UQcb3DISJAQAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">å¼€å‘人员</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="y1MqUzbc4UeDdpEsqrK3GwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="0Oeejnt4GEuk0csGmClAQAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="55svG5LVmEayI1yOLF/hYgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">EIFC2d0E6EScGB1xXji93AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="qt7RVSofskyCOe4IXevE3gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">EIFC2d0E6EScGB1xXji93AAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#OwnedElements" type="integer">17</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLActor" guid="jE6Hh4xWzk+ss1P1I88QbQAA">
+<XPD:ATTR name="Name" type="string">user</XPD:ATTR>
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">3</XPD:ATTR>
+<XPD:REF name="Views[0]">gvI3mIExBEmaszVtF0V6bwAA</XPD:REF>
+<XPD:REF name="Views[1]">UA5dbT7GVU2OqjVX9PXuWAAA</XPD:REF>
+<XPD:REF name="Views[2]">9c90i0MrUkKipskFCo8wlgAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">7</XPD:ATTR>
+<XPD:REF name="Associations[0]">2RBODiwfOUCUVzGJ/32wAAAA</XPD:REF>
+<XPD:REF name="Associations[1]">LAvKrCSTOk+Idehr21cMIwAA</XPD:REF>
+<XPD:REF name="Associations[2]">BPqYWvTNKEOfCOeMpPA44AAA</XPD:REF>
+<XPD:REF name="Associations[3]">uJNUdzUQLUu2aPlejTqjNwAA</XPD:REF>
+<XPD:REF name="Associations[4]">jJgG/r4rjE2qAhy/U/lg2wAA</XPD:REF>
+<XPD:REF name="Associations[5]">HQZk+9nVI02CjFsZTEmJFgAA</XPD:REF>
+<XPD:REF name="Associations[6]">teHN23xRpE6lugxstCxsawAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLUseCase" guid="nAsf5tia702zzSQAu6L6VwAA">
+<XPD:ATTR name="Name" type="string">æœå°</XPD:ATTR>
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">gjXEJSzeBk24cBss5DrAhAAA</XPD:REF>
+<XPD:REF name="Views[1]">FCs4dSUL6ES18h1zCz8l6AAA</XPD:REF>
+<XPD:REF name="Views[2]">sTCdfdSS0UiUUNZ/B2e/FAAA</XPD:REF>
+<XPD:REF name="Views[3]">GczyMXZXJEmnDD4a7NAunwAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">1h+kSCXpe0eWYNVJ4SXvTQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[2]" type="UMLUseCase" guid="yCRgNkRB+EGAwzfBjdJbqwAA">
+<XPD:ATTR name="Name" type="string">æ¢å°</XPD:ATTR>
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Frl6rGi4ekOSrHn6gJ5XLQAA</XPD:REF>
+<XPD:REF name="Views[1]">aH6LRR4We0O3VrbkDZF2cwAA</XPD:REF>
+<XPD:REF name="Views[2]">HAEKTxJSV0uP4v52ffOFQwAA</XPD:REF>
+<XPD:REF name="Views[3]">bSOUAy1Buk+obB82eUrFSQAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">7KhVXW2jsUGTY2YhCHULSAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[3]" type="UMLUseCase" guid="W59J2q05J0K29agobcVJpwAA">
+<XPD:ATTR name="Name" type="string">得到当å‰å°çš„ä¿¡æ¯/å±æ˜¾</XPD:ATTR>
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Hyu7+1e/cES0Ae1OqV75fwAA</XPD:REF>
+<XPD:REF name="Views[1]">6VTL4WFMHEigYGfaMrdGYwAA</XPD:REF>
+<XPD:REF name="Views[2]">7rrGYYen40CFqpViVSVmAQAA</XPD:REF>
+<XPD:REF name="Views[3]">18I+62RrWEOFbvJ7hjlg4AAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">X1+FYBSOWkaYgLu2FjOTXwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[4]" type="UMLUseCase" guid="ExhZCRayVUq9VZBeXyOzSgAA">
+<XPD:ATTR name="Name" type="string">得到全部å°çš„列表</XPD:ATTR>
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">JsuyLQhZc0Sm5Tx7vxV+jAAA</XPD:REF>
+<XPD:REF name="Views[1]">c8pFLtSKjE+idXYMkFpEQAAA</XPD:REF>
+<XPD:REF name="Views[2]">8s4aZ7v9JkWne3xJfZ0IqgAA</XPD:REF>
+<XPD:REF name="Views[3]">qTH2RWpVvkyOG5CaahXI1AAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">pVT44Y4IlkCvW0rXC+dzRgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[5]" type="UMLAssociation" guid="hXa1Ze5PcEWvFq3WssbumAAA">
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">VKBbewCQmUyNjzWZhk3pLQAA</XPD:REF>
+<XPD:REF name="Views[1]">dgQAXdF4ZESvmtHR7mV1eAAA</XPD:REF>
+<XPD:REF name="Views[2]">nl0ivvTPhk6+ZWGNY3Z7QQAA</XPD:REF>
+<XPD:REF name="Views[3]">21Re8Yow20OMsCn0YuNvyQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="2RBODiwfOUCUVzGJ/32wAAAA">
+<XPD:REF name="Association">hXa1Ze5PcEWvFq3WssbumAAA</XPD:REF>
+<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">gJVKivaSkUOMWN8rIdDn4gAA</XPD:REF>
+<XPD:REF name="Views[1]">xB9CaPtaBEGmmoo1GYSHmAAA</XPD:REF>
+<XPD:REF name="Views[2]">bGKgfsVj9UqvRKTQT54jnwAA</XPD:REF>
+<XPD:REF name="Views[3]">hx6u1xKLF028b6Yykl/JVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="1h+kSCXpe0eWYNVJ4SXvTQAA">
+<XPD:REF name="Association">hXa1Ze5PcEWvFq3WssbumAAA</XPD:REF>
+<XPD:REF name="Participant">nAsf5tia702zzSQAu6L6VwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">g4iIuaL510KG496BLjSxFAAA</XPD:REF>
+<XPD:REF name="Views[1]">TwLEoTMD10ehV8UPEkC8GAAA</XPD:REF>
+<XPD:REF name="Views[2]">9JL65E1Ll0K/gBYTvW27ggAA</XPD:REF>
+<XPD:REF name="Views[3]">W8FWavR8aUaHm9U8dXz4VgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[6]" type="UMLAssociation" guid="GWeTbEaAQUO+r17c6TtqcAAA">
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">T2Ct5boioEq1zBkQPfP1uAAA</XPD:REF>
+<XPD:REF name="Views[1]">itC6+9KIkUOoqvWzhIL9eAAA</XPD:REF>
+<XPD:REF name="Views[2]">yn7EMIRfMUivZuavba1QKgAA</XPD:REF>
+<XPD:REF name="Views[3]">qp8dQ4Cl50OUly+002LHkwAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="LAvKrCSTOk+Idehr21cMIwAA">
+<XPD:REF name="Association">GWeTbEaAQUO+r17c6TtqcAAA</XPD:REF>
+<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Cko4gh6CNESvzEaGX7xrTwAA</XPD:REF>
+<XPD:REF name="Views[1]">YXCHfhVdWUSEN2ZT/RAgUwAA</XPD:REF>
+<XPD:REF name="Views[2]">3/az9bmrj0OrABD1RgT7zgAA</XPD:REF>
+<XPD:REF name="Views[3]">QhKdEmGlb021SYaW2m8l2AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="7KhVXW2jsUGTY2YhCHULSAAA">
+<XPD:REF name="Association">GWeTbEaAQUO+r17c6TtqcAAA</XPD:REF>
+<XPD:REF name="Participant">yCRgNkRB+EGAwzfBjdJbqwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">K/CL0noaSEeVxfiH/AYdPQAA</XPD:REF>
+<XPD:REF name="Views[1]">gJsX46E8OEivWSn9FKGyIgAA</XPD:REF>
+<XPD:REF name="Views[2]">+sQ4dyQOwEyKXN3Siy8SeAAA</XPD:REF>
+<XPD:REF name="Views[3]">g0gSj9MvXEy5XaeQkbjoOwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[7]" type="UMLAssociation" guid="R+Mv7uh5kEuKr/Bia3KOhAAA">
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">AyvrWm4rVU2nEQ3SaHF+pwAA</XPD:REF>
+<XPD:REF name="Views[1]">Ic1rMSlGuEiOmC74Gs5VPgAA</XPD:REF>
+<XPD:REF name="Views[2]">LmeDzwQ4WE+N9ctpkvJC2QAA</XPD:REF>
+<XPD:REF name="Views[3]">/4mMqWe3yUWrZLbs6l2tZwAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="BPqYWvTNKEOfCOeMpPA44AAA">
+<XPD:REF name="Association">R+Mv7uh5kEuKr/Bia3KOhAAA</XPD:REF>
+<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">m94XoFukck+27/0mViZU2gAA</XPD:REF>
+<XPD:REF name="Views[1]">rl15HxW7wUGsb4vRn7Al9wAA</XPD:REF>
+<XPD:REF name="Views[2]">A1ODeRbq4kaOK4HMvaTeRQAA</XPD:REF>
+<XPD:REF name="Views[3]">LFchLERMEE2qPO6m3DpPuQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="X1+FYBSOWkaYgLu2FjOTXwAA">
+<XPD:REF name="Association">R+Mv7uh5kEuKr/Bia3KOhAAA</XPD:REF>
+<XPD:REF name="Participant">W59J2q05J0K29agobcVJpwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">/DGBSl3cJ0S8W6nJJJGcfwAA</XPD:REF>
+<XPD:REF name="Views[1]">QQK2e0FGJkigWh9ObCBDRgAA</XPD:REF>
+<XPD:REF name="Views[2]">WxqNKB0NhUqZpADhZw+P3QAA</XPD:REF>
+<XPD:REF name="Views[3]">Tj9w6ngJfUqetSitERQ8NQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[8]" type="UMLAssociation" guid="WrC8vAeUYkO3tLCoOTTa7gAA">
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">QIXdxKII/kqOJOJMY5AcogAA</XPD:REF>
+<XPD:REF name="Views[1]">Xq0mZflYI0KV42hvumdugQAA</XPD:REF>
+<XPD:REF name="Views[2]">vwdwId1yNkaUtmkTI1YWuQAA</XPD:REF>
+<XPD:REF name="Views[3]">1uoVEwi+dkyCZb5M7Pve2wAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="uJNUdzUQLUu2aPlejTqjNwAA">
+<XPD:REF name="Association">WrC8vAeUYkO3tLCoOTTa7gAA</XPD:REF>
+<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">kbnyVybMKEKdAdKhGeseZgAA</XPD:REF>
+<XPD:REF name="Views[1]">g5PdiNFseUGXOynpmdruGwAA</XPD:REF>
+<XPD:REF name="Views[2]">71PEDgUjsU+2i57rKSIWiQAA</XPD:REF>
+<XPD:REF name="Views[3]">WnuHsx6mVUGcSN3xCQss6QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="pVT44Y4IlkCvW0rXC+dzRgAA">
+<XPD:REF name="Association">WrC8vAeUYkO3tLCoOTTa7gAA</XPD:REF>
+<XPD:REF name="Participant">ExhZCRayVUq9VZBeXyOzSgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">4paVVhhoOU2GUrsd9Xm/FwAA</XPD:REF>
+<XPD:REF name="Views[1]">66pNRRmKjku3rnBmhfUBCgAA</XPD:REF>
+<XPD:REF name="Views[2]">i3/GDxY4DU6ZMPvt2/tUdgAA</XPD:REF>
+<XPD:REF name="Views[3]">Bn3vSuvCAEGkNyVyOiDjtAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[9]" type="UMLUseCase" guid="5KAC2LjvX0qQF9lBa5DyCwAA">
+<XPD:ATTR name="Name" type="string">设置å„ç§å‚æ•°ä¿¡æ¯</XPD:ATTR>
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">B39+MGxIAUu2bla4M15wGQAA</XPD:REF>
+<XPD:REF name="Views[1]">kRxUjogV4k2YkluNvawsMAAA</XPD:REF>
+<XPD:REF name="Views[2]">u8URrWr/hkiwdkqgLJdW+wAA</XPD:REF>
+<XPD:REF name="Views[3]">KOSNG5KSM0CFIOZucCSmlwAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">iK2QfBiThkWwoji6bSWtswAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[10]" type="UMLAssociation" guid="y+qwgLasMEm0UKrVQN8iJQAA">
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">xD4JWSKF3EOTqNmsPzbc5QAA</XPD:REF>
+<XPD:REF name="Views[1]">Aug+XiD/L0C98F0lb8QKAgAA</XPD:REF>
+<XPD:REF name="Views[2]">+HDBsjEDKEqWUJZ9hnAU4QAA</XPD:REF>
+<XPD:REF name="Views[3]">8N0unm4hwUy3Q/ipJnkyXAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="jJgG/r4rjE2qAhy/U/lg2wAA">
+<XPD:REF name="Association">y+qwgLasMEm0UKrVQN8iJQAA</XPD:REF>
+<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">evKHrFVG9kazUYsWGKYoRQAA</XPD:REF>
+<XPD:REF name="Views[1]">JgCUSElncUaW/Ryki1kRMQAA</XPD:REF>
+<XPD:REF name="Views[2]">vquz6rX3pkKrylGBjx30IAAA</XPD:REF>
+<XPD:REF name="Views[3]">CXIajd5ee06Zf7q4GbpG1QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="iK2QfBiThkWwoji6bSWtswAA">
+<XPD:REF name="Association">y+qwgLasMEm0UKrVQN8iJQAA</XPD:REF>
+<XPD:REF name="Participant">5KAC2LjvX0qQF9lBa5DyCwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">0NmimauDo0yxCgPn4bFExgAA</XPD:REF>
+<XPD:REF name="Views[1]">YPI7wcCBTUybTm1Spbgg8QAA</XPD:REF>
+<XPD:REF name="Views[2]">ntmWchFV+UqAdPT3cz9/JQAA</XPD:REF>
+<XPD:REF name="Views[3]">edAtn71weU2/fvAr2uihoQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[11]" type="UMLUseCase" guid="eLOxpsSp0EC08r5lL9rsZAAA">
+<XPD:ATTR name="Name" type="string">预约</XPD:ATTR>
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">grqGSNiheUuwFijgmxch+gAA</XPD:REF>
+<XPD:REF name="Views[1]">54HAvDvDa06v58oCDBCKXwAA</XPD:REF>
+<XPD:REF name="Views[2]">H5TD/VVzokWAABxo66dDiwAA</XPD:REF>
+<XPD:REF name="Views[3]">qqfU97a8nUqfLL2CFuWnjQAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">rXVVaNhetUi+zkmUpV2EJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[12]" type="UMLAssociation" guid="0s9c8w+QxUaASZ+fMtRSqQAA">
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">kVRyhJmyWEyyp5wuc+OXngAA</XPD:REF>
+<XPD:REF name="Views[1]">FypCN9NIE0C9ShWHmH/yxQAA</XPD:REF>
+<XPD:REF name="Views[2]">UYBImTsT3kmMLO4UVo7iDgAA</XPD:REF>
+<XPD:REF name="Views[3]">Dv0knjRPxEiA3FR76MzcQgAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="HQZk+9nVI02CjFsZTEmJFgAA">
+<XPD:REF name="Association">0s9c8w+QxUaASZ+fMtRSqQAA</XPD:REF>
+<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">oRaZRwRR1E+ugfvMU7Mx7AAA</XPD:REF>
+<XPD:REF name="Views[1]">Rf4Y2d2tx0eAEgaVNgix1gAA</XPD:REF>
+<XPD:REF name="Views[2]">e0J/wN1wUUGY7r7RQqgfrQAA</XPD:REF>
+<XPD:REF name="Views[3]">LK/960VLGUqFEI3dQB55GgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="rXVVaNhetUi+zkmUpV2EJAAA">
+<XPD:REF name="Association">0s9c8w+QxUaASZ+fMtRSqQAA</XPD:REF>
+<XPD:REF name="Participant">eLOxpsSp0EC08r5lL9rsZAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">qZ6wG2yUdUCrkCtj+ADq5gAA</XPD:REF>
+<XPD:REF name="Views[1]">5xmhglHNPkebUvE0zYQ+1QAA</XPD:REF>
+<XPD:REF name="Views[2]">TJu7E2BYn0e7KDkLvMy6zQAA</XPD:REF>
+<XPD:REF name="Views[3]">HuuHMInFx0awxMfN0WO7nAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[13]" type="UMLUseCase" guid="DfNIoYa4GU+CP71/W8SrWwAA">
+<XPD:ATTR name="Name" type="string">回放</XPD:ATTR>
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">1rgOrFraekaSjgPeaxo6VQAA</XPD:REF>
+<XPD:REF name="Views[1]">rgrH2S52KUirNQUR897hjAAA</XPD:REF>
+<XPD:REF name="Views[2]">/Uw/TQZhfEa2XXCMAwNycQAA</XPD:REF>
+<XPD:REF name="Views[3]">c8C4qOOrcUa+n6I+x3qsmwAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">AeXEiqTUjkaieSlGxTKX+QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[14]" type="UMLAssociation" guid="oYdSRRagC0OKiYHxCgS7CAAA">
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">FyWt2ux4n0C/jIWXlvGepAAA</XPD:REF>
+<XPD:REF name="Views[1]">tzUYyPqymkyQTrpQ3ESfLQAA</XPD:REF>
+<XPD:REF name="Views[2]">WsC4wpiLwESJvBADsJOD0QAA</XPD:REF>
+<XPD:REF name="Views[3]">240EHYi+MUSGtsZ2MH9vbAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="teHN23xRpE6lugxstCxsawAA">
+<XPD:REF name="Association">oYdSRRagC0OKiYHxCgS7CAAA</XPD:REF>
+<XPD:REF name="Participant">jE6Hh4xWzk+ss1P1I88QbQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">jriPICawik+i/5uQ1tPPJQAA</XPD:REF>
+<XPD:REF name="Views[1]">oHna4JnixU6x5HHrqy8Y0gAA</XPD:REF>
+<XPD:REF name="Views[2]">CcjzfOb/A06oYHNBWwMyYAAA</XPD:REF>
+<XPD:REF name="Views[3]">eJcfvTsAsUKZSOjduilFwAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="AeXEiqTUjkaieSlGxTKX+QAA">
+<XPD:REF name="Association">oYdSRRagC0OKiYHxCgS7CAAA</XPD:REF>
+<XPD:REF name="Participant">DfNIoYa4GU+CP71/W8SrWwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">HGprZSDtFUGe58XLDa/llAAA</XPD:REF>
+<XPD:REF name="Views[1]">sgsEShSJaUa0m4iY/pH+kgAA</XPD:REF>
+<XPD:REF name="Views[2]">zD5xP/cAIkyWZDkkr5ToygAA</XPD:REF>
+<XPD:REF name="Views[3]">k/ixsOc3uECBJHIoPEzSCQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[15]" type="UMLUseCase" guid="eVrNXR8NqEC5uMEFgGKQ1gAA">
+<XPD:ATTR name="Name" type="string">ä¿å­˜æ•°æ®</XPD:ATTR>
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">mlqnICP04kuE2DQduAxCnAAA</XPD:REF>
+<XPD:REF name="Views[1]">ZBT2RXZyKE2KgZdND0TQCwAA</XPD:REF>
+<XPD:REF name="Views[2]">ayKElX0k9EWwlzIjQHBReAAA</XPD:REF>
+<XPD:REF name="Views[3]">TjYDD4DDi06is7FTfdSgGgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[16]" type="UMLActor" guid="EIFC2d0E6EScGB1xXji93AAA">
+<XPD:ATTR name="Name" type="string">å¼€å‘人员</XPD:ATTR>
+<XPD:REF name="Namespace">6Ncym1qqME6Qmj4IRHZMIQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">3</XPD:ATTR>
+<XPD:REF name="Views[0]">8+OH6W5lhU2orgFp9fejxAAA</XPD:REF>
+<XPD:REF name="Views[1]">55svG5LVmEayI1yOLF/hYgAA</XPD:REF>
+<XPD:REF name="Views[2]">qt7RVSofskyCOe4IXevE3gAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLModel" guid="GSh70Nz8XUWNmgnjTARh/gAA">
+<XPD:ATTR name="Name" type="string">Analysis Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">analysisModel</XPD:ATTR>
+<XPD:REF name="Namespace">CoZuu0bDp0eooW1pQg6aQwAA</XPD:REF>
+<XPD:ATTR name="#OwnedElements" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLAssociation" guid="rIQWVfPr7E24Tt4ljeTZ4wAA">
+<XPD:REF name="Namespace">GSh70Nz8XUWNmgnjTARh/gAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">G0kUvklDf0uhBeIUoV+srgAA</XPD:REF>
+<XPD:REF name="Views[1]">6o6l7Ax4b0uvR1w70cdJiAAA</XPD:REF>
+<XPD:REF name="Views[2]">3ZsGQfCQIk+ZPFC1FyyVeQAA</XPD:REF>
+<XPD:REF name="Views[3]">BCGhRmtL7kmoY1iXaapJOwAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="jLzV7XdHP0Ogmb7/6IPCtgAA">
+<XPD:REF name="Association">rIQWVfPr7E24Tt4ljeTZ4wAA</XPD:REF>
+<XPD:REF name="Participant">7dRihysn8kefkb+6mJlwzgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">zqmFgnNCJ0mU+9gnrH18SwAA</XPD:REF>
+<XPD:REF name="Views[1]">QE0xM9HZIUK4iQSOifSKDQAA</XPD:REF>
+<XPD:REF name="Views[2]">yt3drhX0N0aispBa+C83TAAA</XPD:REF>
+<XPD:REF name="Views[3]">L3X2M2UWvECpCLZj42krJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="XKFQZaAIH0SxD7YBXgkK0wAA">
+<XPD:REF name="Association">rIQWVfPr7E24Tt4ljeTZ4wAA</XPD:REF>
+<XPD:REF name="Participant">ZRumjrTwgUamBDOstkagPgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">SuRONY2jREyvBHGP7nheBQAA</XPD:REF>
+<XPD:REF name="Views[1]">8rSGjmyTy0iar869slrlPgAA</XPD:REF>
+<XPD:REF name="Views[2]">l9UCuL7VoEm7vFLWkobdoAAA</XPD:REF>
+<XPD:REF name="Views[3]">NYMZ1wuIcUy7G5VODIYIDQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLAssociation" guid="0hCZfIhV4EOpKXcVPwcUnAAA">
+<XPD:REF name="Namespace">GSh70Nz8XUWNmgnjTARh/gAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">+dr3aeLg8k2RQ8khsHmmqAAA</XPD:REF>
+<XPD:REF name="Views[1]">eiIT0uNCpUywEWk7FrhutgAA</XPD:REF>
+<XPD:REF name="Views[2]">m5vcHblPLUe9VZHiD1lPzgAA</XPD:REF>
+<XPD:REF name="Views[3]">dHGIMYC9dUeyteDUvxEuNgAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="DGWju3i/80ObxLedRPIIEwAA">
+<XPD:REF name="Association">0hCZfIhV4EOpKXcVPwcUnAAA</XPD:REF>
+<XPD:REF name="Participant">7dRihysn8kefkb+6mJlwzgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">DGGWcQw7xESguDo8y8c9JwAA</XPD:REF>
+<XPD:REF name="Views[1]">RjfRt8utjEiWYhIQFBxLqgAA</XPD:REF>
+<XPD:REF name="Views[2]">YyNOaiAWMU6urAt6uMo51wAA</XPD:REF>
+<XPD:REF name="Views[3]">HRQ1wVKzDUe1hazbUuDnVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="TolxJOTDCkO5nyLC6ipkAwAA">
+<XPD:REF name="Association">0hCZfIhV4EOpKXcVPwcUnAAA</XPD:REF>
+<XPD:REF name="Participant">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">bVRmxC4LeEivBU8rO/l1IwAA</XPD:REF>
+<XPD:REF name="Views[1]">/6WmiwEpmUGnLzBRc6lCzwAA</XPD:REF>
+<XPD:REF name="Views[2]">Brf+/LZbFEamowtJ6zGOAgAA</XPD:REF>
+<XPD:REF name="Views[3]">eme8PTCUYkiREXPCAN1ACgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[2]" type="UMLModel" guid="dZ4UyetzSE+rDT9vQthF9wAA">
+<XPD:ATTR name="Name" type="string">Design Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">designModel</XPD:ATTR>
+<XPD:REF name="Namespace">CoZuu0bDp0eooW1pQg6aQwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLClassDiagram" guid="qjYhNoiY1kqmGvfSf6HTOAAA">
+<XPD:ATTR name="Name" type="string">dtvclass</XPD:ATTR>
+<XPD:ATTR name="DefaultDiagram" type="boolean">True</XPD:ATTR>
+<XPD:REF name="DiagramOwner">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="P51EDp27mEuFUgKS4BG9TgAA">
+<XPD:REF name="Diagram">qjYhNoiY1kqmGvfSf6HTOAAA</XPD:REF>
+<XPD:ATTR name="#OwnedViews" type="integer">33</XPD:ATTR>
+<XPD:OBJ name="OwnedViews[0]" type="UMLClassView" guid="a8FG7H9SzUelkRx52q1d5AAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">312</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">568</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">86</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">53</XPD:ATTR>
+<XPD:REF name="Model">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="JQh3Wiuct0GpOwtZi9ZTpgAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="uNhK2xLegUaBu+NFKaBbSwAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CTvDatabase</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="hhHle2OI4Uu0405GJDfGVwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="jkWfDES3TkmlCIFIs5xizAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="k1LHywt4TEe6bHJwUzft/QAA">
+<XPD:REF name="Model">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="hc7Nc/x4iE+k/Ee76MBxMgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="Pwafosd7ik6mD1kxdwntngAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[1]" type="UMLClassView" guid="Y9zMsiXlQEuyiSGOmpswRwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">780</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">528</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">102</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
+<XPD:REF name="Model">5BXVsgqK1kanN/l0hNx/IQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="/mSRKoE2+U2BADYjjBN3tQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="IXnfaLgTKEGGdpX37KpTHgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CTvSubtitle</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="+DeDbUnm+02usH1UojzZyQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="TObRQcYR6UWZmkjnkVEugwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="3kCRXwUbYEOaB2YVqs3CMQAA">
+<XPD:REF name="Model">5BXVsgqK1kanN/l0hNx/IQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="2pFBVEb3NUu3IhdJeNfBWAAA">
+<XPD:REF name="Model">5BXVsgqK1kanN/l0hNx/IQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="xx5BbdZ+6Eehp04cM6fnfwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">5BXVsgqK1kanN/l0hNx/IQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[2]" type="UMLClassView" guid="9Ld1pTeBF0CZmoVdEfEBMQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">324</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">228</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">83</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">45</XPD:ATTR>
+<XPD:REF name="Model">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="KKCqrHWJXUyPtjvhGK6nTAAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="VODhD4+mz0yMbBwwjb3fXAAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CDtv</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="0OuB7ZzwGEqA8drjlJeNBgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="Zc9FQRwP2Uuj8JJg74Jt3QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="mxcpZDUEI0aTfXvfNUP8/QAA">
+<XPD:REF name="Model">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="0p/pTktl+kimPcmFJ4/wywAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="kWtX8dZWikSHi3kCydMHCAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[3]" type="UMLClassView" guid="BVNqLhbhP06y98++NgmxAwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">284</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">388</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">147</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">33</XPD:ATTR>
+<XPD:REF name="Model">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="juDswX7uL0W7bBJuRk06AgAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="ICbKIhrn50Gwq1GIFxbJYAAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CTvProgram</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="YHcJ0obYSEWbDvvepjISuwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="27Jf3klYvE2MAvnGgH8YqAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="muUyRePjd0qlQqM/tvfrmQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="3aWGjpGXTkqRn+NbEzYu5QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="ylciM87U9keZe9hSnVequAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[4]" type="UMLClassView" guid="iEgH+6H6kkG++neKuToTSgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">100</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">420</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">97</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">46</XPD:ATTR>
+<XPD:REF name="Model">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="lnKxD1DyGEOj9cd46nB84QAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="FHfQpxZydUGiBASqFcX2dAAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CTvChannel</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="fd0gByAKXkisiM6J7MwdtAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="9r4OqNYuVUegwaUPTkv1pgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="Yo0KShxzIk2FSTydUse5OQAA">
+<XPD:REF name="Model">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="rmKV7ZtcVEudbDw02LTB/wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="+jiKzSIz/UuhSFnnJkuIEgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[5]" type="UMLClassView" guid="vYDCfUgYq0KaBSDnxbpYVgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">704</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">244</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">80</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
+<XPD:REF name="Model">UiYOh8D78E22qQeFeDZpLAAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="+QL9bkNaPUyTOdUO4yAR6AAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="eT33Wt7M8kiSrhmhuXGtCgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CTvConfig</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="iBlTL0B9OEevQofD0ibRjwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="cFIMtDWroUOFGL0NgRigMAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="KTNQfnqIy0q3wV+ARVtV9gAA">
+<XPD:REF name="Model">UiYOh8D78E22qQeFeDZpLAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="7Pq+TJVLy06gA8T6r5wMawAA">
+<XPD:REF name="Model">UiYOh8D78E22qQeFeDZpLAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="Fn0oKpD7lUyNbDw59UyRygAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">UiYOh8D78E22qQeFeDZpLAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[6]" type="UMLAssociationView" guid="12BWSnVhhUOUuox7tdL41gAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">284,417;196,433</XPD:ATTR>
+<XPD:REF name="Model">av0s6EXaYUKyooee2y6sdgAA</XPD:REF>
+<XPD:REF name="Head">iEgH+6H6kkG++neKuToTSgAA</XPD:REF>
+<XPD:REF name="Tail">BVNqLhbhP06y98++NgmxAwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="4F+C2zwwrEOjx/qCnLXWPAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">av0s6EXaYUKyooee2y6sdgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="lXf6uq0JtkK3YNXTxTyP7wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">av0s6EXaYUKyooee2y6sdgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="8jym3kotyE2sBWD5KjhUiQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">av0s6EXaYUKyooee2y6sdgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="ioK1huVib0u6ILv3kHAeeQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">GZcPUasbnkG3pyGKV6NFnAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="awNg1wfSGU22on1C+XpBlgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">IEnUwW74QkSkdRZGqdKvaAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="cwfxPIXUd06ShM9BEivzxQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">GZcPUasbnkG3pyGKV6NFnAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="cGTSA3bQb0S81NQzsTj+QQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">IEnUwW74QkSkdRZGqdKvaAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="DBsnRjqoj0W9eAN/Flu+jwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">GZcPUasbnkG3pyGKV6NFnAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="LWsKT6dOQUKXma9Eoh+sUwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">IEnUwW74QkSkdRZGqdKvaAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="DUu549wQM0qPn9dAjjrLZgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">GZcPUasbnkG3pyGKV6NFnAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="l9TSA+eftkCY2p6qZDMGKAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">IEnUwW74QkSkdRZGqdKvaAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[7]" type="UMLAssociationView" guid="Qa1PhzSwWkyS1rm6eapfLwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">354,568;357,420</XPD:ATTR>
+<XPD:REF name="Model">cNCsWS2hgkeaGhYJv9oONgAA</XPD:REF>
+<XPD:REF name="Head">BVNqLhbhP06y98++NgmxAwAA</XPD:REF>
+<XPD:REF name="Tail">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="QAoFSXFK+0S+5kDYAQ0LsgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">cNCsWS2hgkeaGhYJv9oONgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="rsOqshNVOkut6r+wW0Sp/wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">cNCsWS2hgkeaGhYJv9oONgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="0wZW9IH3y0OEPMfN5FyHQAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">cNCsWS2hgkeaGhYJv9oONgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="ySD9HMBWmEWoJg+/6boBZgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">2JZlFpDZPkGgaoWrrPAGXAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="TM3RNruxzEezNhF8XO/FmwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">PFZlUbzZu02nTTLsYZBoDgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="LXz8D2AdoE6ojzgkYCO0qAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">2JZlFpDZPkGgaoWrrPAGXAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="NpASusGGKU+/KwcKkTAMogAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">PFZlUbzZu02nTTLsYZBoDgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="ia8j06EduUmxgB5smbA9hQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">2JZlFpDZPkGgaoWrrPAGXAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="3dtXpNLbXka7wekzvAWsXQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">PFZlUbzZu02nTTLsYZBoDgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="/JYlnmhzTk66TicK0RjYaQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">2JZlFpDZPkGgaoWrrPAGXAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="Mvk2196ldk+5GLgct+OKuwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">PFZlUbzZu02nTTLsYZBoDgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[8]" type="UMLAssociationView" guid="UmHHYiIr3k+gNNomjLpgwwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">319,568;179,465</XPD:ATTR>
+<XPD:REF name="Model">CVx7QaOEd0iJQ6USdSCilwAA</XPD:REF>
+<XPD:REF name="Head">iEgH+6H6kkG++neKuToTSgAA</XPD:REF>
+<XPD:REF name="Tail">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="ZBlvBeIE2UGGPTML4sQ7SgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">CVx7QaOEd0iJQ6USdSCilwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="UDn5R84weEayOYl6QVFj1wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">CVx7QaOEd0iJQ6USdSCilwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="OApAa7HXz0aTiMZGZ/g2tAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">CVx7QaOEd0iJQ6USdSCilwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="W1YT5dqwMUSUI29zCC2LZQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">XvxorIQvl0aKnzyznjd1uwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="24RGLobteEil7cUdAcyUcAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">q5Ko0bXKcE6uj05NJPSddwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="X96IIfOZSE2FAliwKkCNYgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">XvxorIQvl0aKnzyznjd1uwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="6Uw1pdad6kC8N8S0Rf1HxwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">q5Ko0bXKcE6uj05NJPSddwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="tr7uiHRKz0e//ValH5GU+AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">XvxorIQvl0aKnzyznjd1uwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="CuUsJAcsAUWwVZJzegOegAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">q5Ko0bXKcE6uj05NJPSddwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="zdcHIs6dNEmxQNtCK5uHIQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">XvxorIQvl0aKnzyznjd1uwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="AST9GWgDTEWR07o7yUcgIQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">q5Ko0bXKcE6uj05NJPSddwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[9]" type="UMLAssociationView" guid="oYsj3yhzJkCKmOBcWIHNDwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">357,420;354,568</XPD:ATTR>
+<XPD:REF name="Model">hBOTE33GDUO/X8s5oHlAmQAA</XPD:REF>
+<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
+<XPD:REF name="Tail">BVNqLhbhP06y98++NgmxAwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="GT6R2h3HkU6LThPKaghC1QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">hBOTE33GDUO/X8s5oHlAmQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="eWMr3v5Qb0y/nXu2s/EP5wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">hBOTE33GDUO/X8s5oHlAmQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="GR9gxzUjNkKmujWHFobLtAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">hBOTE33GDUO/X8s5oHlAmQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="+SSR3TM1z0m5UkTLiuMrGwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">Yo1IoB0X3ka1C+a/6xk1/gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="UuRRAQf+y0OdXTOvWu7nUAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">qOlPMeLYpUC4lTEl3Hsc8QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="Uvo2ryiBg0Oa5GJF4TRyhQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">Yo1IoB0X3ka1C+a/6xk1/gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="vI5c+acLSk6IfCcdqlaBggAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">qOlPMeLYpUC4lTEl3Hsc8QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="QBI1NHwjWU2dkj+SLUFZ+AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">Yo1IoB0X3ka1C+a/6xk1/gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="w3rpxhxEsEu0y7myhFrrkQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">qOlPMeLYpUC4lTEl3Hsc8QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="IYVJT/RjPUqjv8rl6ZIQiwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">Yo1IoB0X3ka1C+a/6xk1/gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="8Ip2rQJRaEaPAOW0cJSd/wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">qOlPMeLYpUC4lTEl3Hsc8QAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[10]" type="UMLAssociationView" guid="Vcgjd9eKakOjuUAjwzzhJgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">179,465;319,568</XPD:ATTR>
+<XPD:REF name="Model">/X1BIuClXkywNV1vNa/LWwAA</XPD:REF>
+<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
+<XPD:REF name="Tail">iEgH+6H6kkG++neKuToTSgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="+iIIR1mEnUynEPEjuGAd7AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">/X1BIuClXkywNV1vNa/LWwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="bZn71kXJQUOP3yAyCa5RvgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">/X1BIuClXkywNV1vNa/LWwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="O36co7nFz0elpJnbKtsYMwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">/X1BIuClXkywNV1vNa/LWwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="yjjLYCXJjUqX0IHnpKwHwQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">RoKhf4Bw3kmRk2O2D4GlxQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="Hv4K+XlgIkqDgqEz3aQWNQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">BVpPYPY4V0KsTBJTRoLjyAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="k1XiyO9mlke/IAq5UuYI9gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">RoKhf4Bw3kmRk2O2D4GlxQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="4o7M8jakfkixRwVgESrUnwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">BVpPYPY4V0KsTBJTRoLjyAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="Xtc7Jqe6N0+JAzLg1RxYLwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">RoKhf4Bw3kmRk2O2D4GlxQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="rCPaxzL0LEuk9Jjbqi+D2gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">BVpPYPY4V0KsTBJTRoLjyAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="W0UPJtBpLU6Y5SjscWTiVAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">RoKhf4Bw3kmRk2O2D4GlxQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="HKXhPda/vUuVwv4sR9ZR9QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">BVpPYPY4V0KsTBJTRoLjyAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[11]" type="UMLClassView" guid="8HnvkQxPk0OLqQXLeJ5MUgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">820</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">316</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">86</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">56</XPD:ATTR>
+<XPD:REF name="Model">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="5gKeR33bd0K1R/QeIX+ZgQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="tQ3eg1803UmmapVr5/mMKgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CTvGroup</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="qwHtvoH6qk6Aj/xMPfoprQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="txC1zWyhHUKgVTvu0N6VDwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="50xz0k8rgU+WfODoAi8aeQAA">
+<XPD:REF name="Model">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="TR1rTShyhEG7ngh596L0kgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="GPl78wz82UaLho5xwfMqrQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[12]" type="UMLAssociationView" guid="VjZwKWmCoUO5wNRGJGVShAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">820,364;397,573</XPD:ATTR>
+<XPD:REF name="Model">PudswW77eEShTMEdcK5BCAAA</XPD:REF>
+<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
+<XPD:REF name="Tail">8HnvkQxPk0OLqQXLeJ5MUgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="6e9pHkpPaUyLDCYYnUYAOAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">PudswW77eEShTMEdcK5BCAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="QA7tnAAMA0e3tCDRlkB/JwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">PudswW77eEShTMEdcK5BCAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="gdUdn5u5x0KDsDKM41p2CQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">PudswW77eEShTMEdcK5BCAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="rqoTwNlD20Gou9xOLQ2RNgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">vyoQZGl3UECBMhf7+IDQUwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="d/3xrtQ+nU69mQYepo7NvQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">Io3cINfhiE23pmiSxpS6swAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="ox9r7npaB0in7/ygfG1ZMwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">vyoQZGl3UECBMhf7+IDQUwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="HcOo4bUmbUqLEjVUm2L2AQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">Io3cINfhiE23pmiSxpS6swAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="exLwGLRY306J0CEcqxlOrgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">vyoQZGl3UECBMhf7+IDQUwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="tQj+naSiJ0mB4W89ahH5ygAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">Io3cINfhiE23pmiSxpS6swAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="qxZgk8R36k2S3vGRfQegfwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">vyoQZGl3UECBMhf7+IDQUwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="LNFybtIVIkOXnQ/9QC5jEwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">Io3cINfhiE23pmiSxpS6swAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[13]" type="UMLClassView" guid="7aPHkO59WEubHbpM/Djq/AAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">456</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">396</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">89</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">41</XPD:ATTR>
+<XPD:REF name="Model">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="DSv+CNOMnUKyGF5bfoGDowAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="Fy6x/w12H0K3LtAtk0/MuwAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CTvEvent</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="xy2kKdqewEerLbDFtu0jAwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="ZxuiiS0/6EiXhRO/StIWPgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="+EOWTA5PrUyAEwB/ZHVnPAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="f0xyghRma028ShVYc8tbfwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="qpXdkd1nJ0ajRru7gzDFJwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[14]" type="UMLAssociationView" guid="QHk4xsvJRUGhKn0p+sReaAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">484,436;375,568</XPD:ATTR>
+<XPD:REF name="Model">q5PurOmOUUOX8hzj5CINYQAA</XPD:REF>
+<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
+<XPD:REF name="Tail">7aPHkO59WEubHbpM/Djq/AAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="ezGCtUA0dUOn10D5pUOtoAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">q5PurOmOUUOX8hzj5CINYQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="QcGPzg741ki4yTGfoKvK9AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">q5PurOmOUUOX8hzj5CINYQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="ioZQYN39bEu/gy37UfkhmQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">q5PurOmOUUOX8hzj5CINYQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="mZFBakBXmE6Gj5qumz51gwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">iy8GVdK11EmKnmJ6LivVVQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="VrmcPyj2oUyEm5i/AG7/KgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">PhlKgbqPt0OClpwk2m9vswAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="KHpH30oHrEew1AGquvXiEQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">iy8GVdK11EmKnmJ6LivVVQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="odMtivppNUOccWtC85AVCQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">PhlKgbqPt0OClpwk2m9vswAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="W7KAnZMmjEKAxuaUXA4D6AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">iy8GVdK11EmKnmJ6LivVVQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="2IiGGrbDkUiobp5CJnME1QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">PhlKgbqPt0OClpwk2m9vswAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="jsiact/gpUS21gy1IeSlZQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">iy8GVdK11EmKnmJ6LivVVQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="+70t9Os6zUWhIAhufEQsBAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">PhlKgbqPt0OClpwk2m9vswAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[15]" type="UMLAssociationView" guid="l3oAx6sfA0ScCOouvAFKYwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">430,410;456,412</XPD:ATTR>
+<XPD:REF name="Model">8zCqordbBESBaPJH8SIoOQAA</XPD:REF>
+<XPD:REF name="Head">7aPHkO59WEubHbpM/Djq/AAA</XPD:REF>
+<XPD:REF name="Tail">BVNqLhbhP06y98++NgmxAwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="pM/XXFo9Ikq+kK5++HoZ0QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">8zCqordbBESBaPJH8SIoOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="igklIYxpfka7OH5oAnRbPwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">8zCqordbBESBaPJH8SIoOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="RtZQfGM0uUqohb/WlARRpwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">8zCqordbBESBaPJH8SIoOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="lDsB+MeNlUy+OEBCbfs0OAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">zefo1Bu+v0e4gn9nUL+bSQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="pr9mkVSNO0KasNMsFvgDuQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">72fG4kbiM0eyczFPq2MtVAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="EeUDIEWsnkO5HzTU6L6kZQAA">
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">1</XPD:ATTR>
+<XPD:REF name="Model">zefo1Bu+v0e4gn9nUL+bSQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="4fUHmnlcd0WplogWZWqPRQAA">
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">1..*</XPD:ATTR>
+<XPD:REF name="Model">72fG4kbiM0eyczFPq2MtVAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="TuyQdZk0H0+ai9Mg3ZtK3AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">zefo1Bu+v0e4gn9nUL+bSQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="kKRq4K1cvEup70Oz2UFd8QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">72fG4kbiM0eyczFPq2MtVAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="NKw56kYvx0W0KlwhXPYWMwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">zefo1Bu+v0e4gn9nUL+bSQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="DS2eOvXKXku93Y4x950QPgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">72fG4kbiM0eyczFPq2MtVAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[16]" type="UMLClassView" guid="Th+ZwPCIw0CZjtawrnGPrQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">756</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">440</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">88</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">41</XPD:ATTR>
+<XPD:REF name="Model">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="sEpK+JymS02lZlpXniSRjAAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="Gfl9bfM73kq+EYU5hOwDUQAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CTvBooking</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="dWzJpyjDIE6y0Sx/YmBzlwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="Ak99xRpzJ0+K3Y8Z70NTWQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="LL3KL7SUuEyu4pY6NT57NAAA">
+<XPD:REF name="Model">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="dCkq+XCQgkaH1Q901KclHQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="+Bzptjmx3kWzAYT9fN/rxQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[17]" type="UMLClassView" guid="ybciiFK3jEO6SdfdRt6uAgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">68</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">332</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">80</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">41</XPD:ATTR>
+<XPD:REF name="Model">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="VEgafHzMKkem+RzIfaWBnQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="605ap6gGgUGE85kGWYWaKgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CTvRegion</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="6TZwhHYPs0mXP+dvmVvxnwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="eHeyWsrCgUeI8XUSaf0Y5QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="AL2e0wMT+0K0AC6gZuuhdwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="zIfIWkZ3Lkiq2O9aOGiU/gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="exyb4FNp+Ue9ROAGwoQFcwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[18]" type="UMLClassView" guid="tzICJ64LmUSx1fvEy4dHZQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">580</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">396</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">80</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
+<XPD:REF name="Model">iUy0YZgyREC+o54lTQptaAAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="6w5B2Z+R1kG+mt3vZl3lVQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="Cl9ObgtVFEmfwYkvLw0YHwAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CTvSatellite</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="GhJezIVJAUO7cg/A/n5EdQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="JwksgiMMQ0GQ6xqrv6I4jgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="yCTnlkoiRkSszYJDHrqQuwAA">
+<XPD:REF name="Model">iUy0YZgyREC+o54lTQptaAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="phU5m2tyh0yMlhsYRPe6dwAA">
+<XPD:REF name="Model">iUy0YZgyREC+o54lTQptaAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="S8DZ5jxQq0+WFWPFnQy7iAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">iUy0YZgyREC+o54lTQptaAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[19]" type="UMLAssociationView" guid="5vCGUSmlwUWKkjul/i5CoAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">588,438;393,568</XPD:ATTR>
+<XPD:REF name="Model">3RrM1HB71kyHO0jB4JI4zgAA</XPD:REF>
+<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
+<XPD:REF name="Tail">tzICJ64LmUSx1fvEy4dHZQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="ihIaZz5p+0Cte+Zqg1wUKgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">3RrM1HB71kyHO0jB4JI4zgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="XyhhchGH70uYaM5UdGboKQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">3RrM1HB71kyHO0jB4JI4zgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="+N+OW0LtoEyevYQ++bVO1gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">3RrM1HB71kyHO0jB4JI4zgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="vLsrualWRkO0QI8PcBWGAAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">DkcX/fIec029p5Da5gYToAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="blnGfW4UCk6tS0veRc88xAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">ULQw0JNjPE2758pFWlo+MQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="vWndJmxhrkKfipX/zAAt4AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">DkcX/fIec029p5Da5gYToAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="jGRa3FaTrUWVhYVG834fjwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">ULQw0JNjPE2758pFWlo+MQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="lKgJhvwP/Eygz7oPLvwsxwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">DkcX/fIec029p5Da5gYToAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="olvLmzjsfka5YmNEOntQDAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">ULQw0JNjPE2758pFWlo+MQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="AdMO10glEEWGGHqpzKNvewAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">DkcX/fIec029p5Da5gYToAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="H/do1s5Rh02ETrOyjtaoaAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-848</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-720</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">ULQw0JNjPE2758pFWlo+MQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[20]" type="UMLClassView" guid="hzoiTuCQqEuArZEejfwdnQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">684</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">344</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">102</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
+<XPD:REF name="Model">/LI4+1GTjEagI/wLEFpVSQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="bGpo24CeZkuczyv74zkRtAAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="M/nbdX/wf0SiKKXamCKy2gAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CTvDimension</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="mW7NW23ux06laiKhpkTD7wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="gVAZHA+LzE+/vXDeqIkJrgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="PdTrEGRJOEiEJyD2I9IzJgAA">
+<XPD:REF name="Model">/LI4+1GTjEagI/wLEFpVSQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="VbdqX2NLOkK2DTLhOA91OwAA">
+<XPD:REF name="Model">/LI4+1GTjEagI/wLEFpVSQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="K00/VzyqZUmltiuaKWLgAQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">/LI4+1GTjEagI/wLEFpVSQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[21]" type="UMLAssociationView" guid="EWnB2mjt6ke3pnsnQFRgJwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">699,386;397,568</XPD:ATTR>
+<XPD:REF name="Model">GjMZbUwaMkGOkbxOXau26AAA</XPD:REF>
+<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
+<XPD:REF name="Tail">hzoiTuCQqEuArZEejfwdnQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="dM3yo1oYRUWNB1JawgFnywAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">GjMZbUwaMkGOkbxOXau26AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="/IP55LSMZUCRoa77gkMh9gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">GjMZbUwaMkGOkbxOXau26AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="Og4FQYOz9kOr8LF43j+ySwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">GjMZbUwaMkGOkbxOXau26AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="zHiCXVqqgE6r2lDdnVDI1gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">gc0GlJ6ewUOpiyya+XPqjQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="Ggu7vb3GMU2vn9mS8bGZpwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">aYL27tYOR02se3g//aEBeAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="19Ii9g15zUmLLURud9e9XAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">gc0GlJ6ewUOpiyya+XPqjQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="wMyvwGpZQUmJ2a2lXlkc/AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">aYL27tYOR02se3g//aEBeAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="KLCf1m7tBkGvkM3iOxLhJgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">gc0GlJ6ewUOpiyya+XPqjQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="rn/sn4ErGkyYnwDUlnpmTAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">aYL27tYOR02se3g//aEBeAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="1+qZEhcpyk6RHirwjBjalgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">gc0GlJ6ewUOpiyya+XPqjQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="wElMDINXY0esqBl7AwoyfQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">aYL27tYOR02se3g//aEBeAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[22]" type="UMLAssociationView" guid="DbUG5zy8r0yq6L/I1naVdQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">324,266;147,336</XPD:ATTR>
+<XPD:REF name="Model">m6lnHtsBL02A4Oup+IzVEAAA</XPD:REF>
+<XPD:REF name="Head">ybciiFK3jEO6SdfdRt6uAgAA</XPD:REF>
+<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="1qY9qbCT1ka5tmfuL9yaJgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">m6lnHtsBL02A4Oup+IzVEAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="bnG59/mNjk+fcthvMQG2VAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">m6lnHtsBL02A4Oup+IzVEAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="wovrqiKgc0qw9BUyPaGuBQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">m6lnHtsBL02A4Oup+IzVEAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="hytVQ6VnmEaHnFV5o9fQ0AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">l6Lg/NJG5UWu+7ALxaVP3gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="JbJSjKTBikyT++rY1XVCtwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">kdbNMfgoG02cJO0UFJeeLwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="eYodfuyOKEK7WC9dBBlaigAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">l6Lg/NJG5UWu+7ALxaVP3gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="wUtw7zNylEK+wDvPOsUtGwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">kdbNMfgoG02cJO0UFJeeLwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="BEEaANsP0UCbPpRjMWyndwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">l6Lg/NJG5UWu+7ALxaVP3gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="/cBBOvztgE6Kd7yvemxXPwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">kdbNMfgoG02cJO0UFJeeLwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="JKx2O2r/H0y9NJ3+4rup1QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">l6Lg/NJG5UWu+7ALxaVP3gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="uj1vGzCGtkGielBw0Bxi4QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">kdbNMfgoG02cJO0UFJeeLwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[23]" type="UMLAssociationView" guid="l2Yo1ObIG0WVx7IS2a/B3QAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">340,272;173,420</XPD:ATTR>
+<XPD:REF name="Model">gmKjyBaRB0SfVd2p3FDOTwAA</XPD:REF>
+<XPD:REF name="Head">iEgH+6H6kkG++neKuToTSgAA</XPD:REF>
+<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Bt1whnZV8ke93vkLSyNq6wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">gmKjyBaRB0SfVd2p3FDOTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="fqRKs5ARzUGsdlKFgCFhWQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">gmKjyBaRB0SfVd2p3FDOTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="5M/QRFEaxUa0SktETbkRSwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">gmKjyBaRB0SfVd2p3FDOTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="oOLw6a4XNk6oN6yvhlsf7QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">QwwfXlN26EahMaF2XDAvLAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="51OtH+Gyy0+XZJVSgV/KuQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">X5VvOi2uGkGYzMMS5nWm2AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="kMLAHkAn9EKw71vpw3PgHQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">QwwfXlN26EahMaF2XDAvLAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="V2pqj6nPg0SqB+TNOQI5PwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">X5VvOi2uGkGYzMMS5nWm2AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="FYDexLT3eUK3X5xdW3Qq/gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">QwwfXlN26EahMaF2XDAvLAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="1rWGuTeEqEm+RdcskXCo9gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">X5VvOi2uGkGYzMMS5nWm2AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="VJLq9UMlJE2EqLEbDm23HQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">QwwfXlN26EahMaF2XDAvLAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="90vol1uY7U27TcNYwOdZBQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">X5VvOi2uGkGYzMMS5nWm2AAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[24]" type="UMLAssociationView" guid="dSXCMAUeXkaVaOqAa4KDAQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">364,272;358,388</XPD:ATTR>
+<XPD:REF name="Model">iBQV0DXX90uUjMTGr6FFjQAA</XPD:REF>
+<XPD:REF name="Head">BVNqLhbhP06y98++NgmxAwAA</XPD:REF>
+<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="AXtWRmQ/j0G8KsAfZc/QeQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">iBQV0DXX90uUjMTGr6FFjQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="pxhqUzjCEkqTLYfXynALEwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">iBQV0DXX90uUjMTGr6FFjQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="0nagXXOSFk+hHuMBpdFBLwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">iBQV0DXX90uUjMTGr6FFjQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="z3Q2FaOZNUa329RgqNTDpgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">IMPiiZPlxkaJkH8N2NGOggAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="+0LMOuMUukS68snSkLSsTwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">xf4XKZpxx0iF7C4H+oOABwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="bIZ0y/4MSEGDbNvxAP+XjAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">IMPiiZPlxkaJkH8N2NGOggAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="ow67AFPFhk2P92GHjX8x6gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">xf4XKZpxx0iF7C4H+oOABwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="C8AG2Zjc9UCIEaei4/obTgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">IMPiiZPlxkaJkH8N2NGOggAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="cLLrD3Z3uUyN5TkuZIiYvQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">xf4XKZpxx0iF7C4H+oOABwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="q1TRTMmCmEuxq3mV3WwE9wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">IMPiiZPlxkaJkH8N2NGOggAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="RpANS2KKQEiX7rWNn+sFQQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">xf4XKZpxx0iF7C4H+oOABwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[25]" type="UMLAssociationView" guid="ALV9IpRzikWc38x/4t62CgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">383,272;484,396</XPD:ATTR>
+<XPD:REF name="Model">9P0hz9Bq2U6gDVowATxiWAAA</XPD:REF>
+<XPD:REF name="Head">7aPHkO59WEubHbpM/Djq/AAA</XPD:REF>
+<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="8t8bSCYvGkO28nJZE2y4nwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">9P0hz9Bq2U6gDVowATxiWAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="3EywKQmkOE2KjbjVh2NmDgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">9P0hz9Bq2U6gDVowATxiWAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="BbqpqccVf0Wg7tVha614JAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">9P0hz9Bq2U6gDVowATxiWAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="YVFZpgGB/0O96quX2udZDwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">BSJLLgAd4kCusm/8BFZQMQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="TSgUJz4gCUSqn+dKKulHoAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">yVknRLQq7U2nj3bRfizyAgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="pIexnuTBiUiEhhq44l4rCwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">BSJLLgAd4kCusm/8BFZQMQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="bB0rInPRJES1Fi1mh9FCEAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">yVknRLQq7U2nj3bRfizyAgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="yT+paMjNpkaG1OKJL+sYCAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">BSJLLgAd4kCusm/8BFZQMQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="Te1GttqM50mrkMzGYceWLQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">yVknRLQq7U2nj3bRfizyAgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="znNxDO7m6E6nvS/FYUZ9OAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">BSJLLgAd4kCusm/8BFZQMQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="XUHdjv1boEaqvLcg553dbwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">yVknRLQq7U2nj3bRfizyAgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[26]" type="UMLAssociationView" guid="hBsdq7HI/EWiSzAGC7VcegAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">398,272;587,396</XPD:ATTR>
+<XPD:REF name="Model">sBsUoQYdEkCsxRTpPtknYAAA</XPD:REF>
+<XPD:REF name="Head">tzICJ64LmUSx1fvEy4dHZQAA</XPD:REF>
+<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="AW09hEar3Einy0/8DRC44wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">sBsUoQYdEkCsxRTpPtknYAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="GL4o+Jwo9kafQcdPg1ZCtgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">sBsUoQYdEkCsxRTpPtknYAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="kNZhsHL9skazmf+MM+oIKwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">sBsUoQYdEkCsxRTpPtknYAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="5T2cPS5X+UykejaXNX6mSAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">bObyymjPEkeQZSoHCKpP2QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="VipQilP5w0axs39cx9OCsgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">6CsrL0wlVEKI657OoEev1gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="P16FQXg1DEOld8DfGFfSxQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">bObyymjPEkeQZSoHCKpP2QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="m6SZNVehm06iGtccsj43wAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">6CsrL0wlVEKI657OoEev1gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="FcWiwQTsx02Ku0N5G3bjSgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">bObyymjPEkeQZSoHCKpP2QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="x2e4QwAQ50Sn6Io3k6B2tAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">6CsrL0wlVEKI657OoEev1gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="d3kqRYSWSUSKKTZ+56sZkwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">bObyymjPEkeQZSoHCKpP2QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="4MO5fs8bNkahA1cEAQY9zAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">6CsrL0wlVEKI657OoEev1gAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[27]" type="UMLAssociationView" guid="Gfgt2UdXqE2QrN+Jzf+QvQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">406,263;684,349</XPD:ATTR>
+<XPD:REF name="Model">5JmzC90ylki6klhVRRibGAAA</XPD:REF>
+<XPD:REF name="Head">hzoiTuCQqEuArZEejfwdnQAA</XPD:REF>
+<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="/p9rmIUUo0mUctVF/yhY5AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">5JmzC90ylki6klhVRRibGAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="P5QKAYFqikOaJu107L2QDwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">5JmzC90ylki6klhVRRibGAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="y/WNtKBGo0q8OYbjC0evjgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">5JmzC90ylki6klhVRRibGAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="cGwksZvEz0aSTFoED5zuJQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">zCPl48BYx0CFRkp8Jj5mogAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="lELIUkkOg0a4b0G8373BcAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">be+eScBkV0Cn4n2XjSojvgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="pF9hWJbSZkCUq/C5qcS+7gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">zCPl48BYx0CFRkp8Jj5mogAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="R1FSACG6EkWd7DK8ihYAQAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">be+eScBkV0Cn4n2XjSojvgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="/NvtextfvUyZKtMbQ1urHAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">zCPl48BYx0CFRkp8Jj5mogAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="WXg43X5+gEiu4atePea88gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">be+eScBkV0Cn4n2XjSojvgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="4pUvTStSU0yU0BtcF8HyfQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">zCPl48BYx0CFRkp8Jj5mogAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="z+QrSf59lkSSqK+c5yKgcwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1028</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1004</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">be+eScBkV0Cn4n2XjSojvgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[28]" type="UMLAssociationView" guid="Z3PDc4i/1UCiaxni9RpD2wAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">756,473;397,581</XPD:ATTR>
+<XPD:REF name="Model">1PikxOdVcU2P6grgcwgRvQAA</XPD:REF>
+<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
+<XPD:REF name="Tail">Th+ZwPCIw0CZjtawrnGPrQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="mhm++LaJkk6lJzcTz7hSFgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">1PikxOdVcU2P6grgcwgRvQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="IxT95vhnIEyr12fdRQskKQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">1PikxOdVcU2P6grgcwgRvQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="d+KXspkLsEa/YezZSZ7YZAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">1PikxOdVcU2P6grgcwgRvQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="HxD2Y75aWkSp4d/0R6KiBgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">Fd/cvRV12USE+Vu6oJsMOgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="08HUrDXL5EahpEFi9GJ9yQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">AfVgLfyALEyP98guAbYHUAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="K5rMwb6Iyka5HDC+pxIZOwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">Fd/cvRV12USE+Vu6oJsMOgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="QRLcMMAOqES9/c4itcB3vAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">AfVgLfyALEyP98guAbYHUAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="GfMJbs1/nkShjuqnA/8BBAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">Fd/cvRV12USE+Vu6oJsMOgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="mQFH13/vQUucR5en5l/dUwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">AfVgLfyALEyP98guAbYHUAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="jXmYJVpZxkCkrM3yJ0eHmgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">Fd/cvRV12USE+Vu6oJsMOgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="m0oKw9kT5k2CSLEOl9tV+gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">AfVgLfyALEyP98guAbYHUAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[29]" type="UMLAssociationView" guid="JFsYjMcrU0GkgX8jFqUVZAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">406,252;704,263</XPD:ATTR>
+<XPD:REF name="Model">3PUgTTrP3U+LofrDCso/eAAA</XPD:REF>
+<XPD:REF name="Head">vYDCfUgYq0KaBSDnxbpYVgAA</XPD:REF>
+<XPD:REF name="Tail">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="R57gZgKnBkm8aQCFy90fiQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">3PUgTTrP3U+LofrDCso/eAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="GznyP+sffEKB3m9dw8jftQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">3PUgTTrP3U+LofrDCso/eAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="NM8M6o1EGkWwEmKdXXKpPAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">3PUgTTrP3U+LofrDCso/eAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="AoZLFazfK0WqZzhHukFsAwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">usmo/t5V5UGA31IdVHUKyQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="vVViwylf/Ei9ld6xTj7WdQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">PP9nsgv4Vkmbk1zEfct4VAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="pDauXlrgH0KfuJt30X8zxgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">usmo/t5V5UGA31IdVHUKyQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="fhSnklGoSEqMAzQOJY57vwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">PP9nsgv4Vkmbk1zEfct4VAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="QGcntempZkeGNA54l7y1rAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">usmo/t5V5UGA31IdVHUKyQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="A5rd4V90HkCp3dmD7wYTbwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">PP9nsgv4Vkmbk1zEfct4VAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="NKRAWeqgBEKgb6cHnYpt9QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">usmo/t5V5UGA31IdVHUKyQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="n4gqVjygvUK59/wDDHYNJgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">PP9nsgv4Vkmbk1zEfct4VAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[30]" type="UMLClassView" guid="wu+9+Z2tqE2B3qchWKoWdQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">20</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">500</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">119</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">63</XPD:ATTR>
+<XPD:REF name="Model">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="zRZpHvisoUiNkQtlLufy/AAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="z/By7OpfokuCMZMimH2OSQAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">CTvChannelParams</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="PKd1BAj8BkWUWLwbCv4oegAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="zu1bY/47U0eoDJhSjdTYNAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="KAuxxnmqhkmQ7MLBFq8lRgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="Ynggyopqt02II9Rzg7q1VQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="PmvllpBms0ifaPkwzqXvOAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[31]" type="UMLAssociationView" guid="Q/k+TeR21UWA0JPwiSZAnwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">130,465;103,500</XPD:ATTR>
+<XPD:REF name="Model">7aJQb5j/+kWV9Kb/0dqoJAAA</XPD:REF>
+<XPD:REF name="Head">wu+9+Z2tqE2B3qchWKoWdQAA</XPD:REF>
+<XPD:REF name="Tail">iEgH+6H6kkG++neKuToTSgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="C2jwipMyN0iMiEays2pVbQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">7aJQb5j/+kWV9Kb/0dqoJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="MxF6R3nqrk+nOid9gUoepAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">7aJQb5j/+kWV9Kb/0dqoJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="5CzND/56UUuAy2C5OXPJGAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">7aJQb5j/+kWV9Kb/0dqoJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="VSR1os7RckKbbg+wZ6UPWwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">Dzfwehs+P0e8CyC/holLewAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="2P5BNH8K/UKYeriBTZAbSgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">C7X0ILbZrkWDVQ5Vc+PT/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="+gO4BIQphEShtlup7FhfcgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">Dzfwehs+P0e8CyC/holLewAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="nbxLBw93Oka1PVwDZftA2QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">C7X0ILbZrkWDVQ5Vc+PT/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="3yHNXWsgu0eaPzi0F9a3dgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">Dzfwehs+P0e8CyC/holLewAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="X0Z4arOj+EWceCda6Sj0vgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">C7X0ILbZrkWDVQ5Vc+PT/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="laRXvwF4WE2wUODF6aCNSQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">Dzfwehs+P0e8CyC/holLewAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="lKhOSy40pUOJhnfmNzIx5AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">C7X0ILbZrkWDVQ5Vc+PT/wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[32]" type="UMLAssociationView" guid="2tALOFJiukSZiwAj9gBDIQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">138,545;312,584</XPD:ATTR>
+<XPD:REF name="Model">6r7WWefo1kK4HXJ46+UuHwAA</XPD:REF>
+<XPD:REF name="Head">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
+<XPD:REF name="Tail">wu+9+Z2tqE2B3qchWKoWdQAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="BM0ZC/TOp0CzIS/dSFOgMQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">6r7WWefo1kK4HXJ46+UuHwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="911s2zFZYUCPtLOmXSDdDgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">6r7WWefo1kK4HXJ46+UuHwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="bOeJui9AgkWX+he6KT6czQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">6r7WWefo1kK4HXJ46+UuHwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="lMa33WFxzU2ojAIXkT9IwAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">AM/xtV731kSTTZbv0mmefgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="2U407qHmXE+0VHF/y4trXwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">+M+2f65R0UCJH6UP90YGAQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="MAu3FLtcFkOt8a9+Yj8MBAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">AM/xtV731kSTTZbv0mmefgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="16BTtqnINEq6DZln/1Uc4AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">+M+2f65R0UCJH6UP90YGAQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="Ehl7/9ciY0mjVGRlJGzTegAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">AM/xtV731kSTTZbv0mmefgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="dAD5Dd+Px0eU/Z7MNaXtWgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">+M+2f65R0UCJH6UP90YGAQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="FstmADGG7k2p8GVFXyT/GAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">AM/xtV731kSTTZbv0mmefgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="1RtPOXDsOEuSNTqKSxFAKAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">+M+2f65R0UCJH6UP90YGAQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedDiagrams[1]" type="UMLClassDiagram" guid="KQsibHBE0E+iq5h5Fks0CQAA">
+<XPD:ATTR name="Name" type="string">tvpackage</XPD:ATTR>
+<XPD:ATTR name="DefaultDiagram" type="boolean">True</XPD:ATTR>
+<XPD:ATTR name="DiagramType" type="string">RobustnessDiagram</XPD:ATTR>
+<XPD:REF name="DiagramOwner">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="x/A73wV6JUGNNCNYoihDDgAA">
+<XPD:REF name="Diagram">KQsibHBE0E+iq5h5Fks0CQAA</XPD:REF>
+<XPD:ATTR name="#OwnedViews" type="integer">10</XPD:ATTR>
+<XPD:OBJ name="OwnedViews[0]" type="UMLPackageView" guid="R7RBkUeb+E+5S8gvJN8+QQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">28</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">228</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">120</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">70</XPD:ATTR>
+<XPD:REF name="Model">ZRumjrTwgUamBDOstkagPgAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="Hex0jIlJWk2QTHp5TF36MwAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="155YNS2IsE2b46plldDuZwAA">
+<XPD:ATTR name="Text" type="string">atv</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="gqZ/H0j6nkqKMGqx1OqzOgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="mK5kp4doeUC6dn5S5jvPHAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[1]" type="UMLPackageView" guid="fCE1/LJF8k+yzWx4bHj2WgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">336</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">224</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">120</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">70</XPD:ATTR>
+<XPD:REF name="Model">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="N9Ut8OrmLU6VnX16D13WOwAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="Yz9HR5DzxEuE9o9uHImtSQAA">
+<XPD:ATTR name="Text" type="string">dtv</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="LDxg9fdTakmhArzVxsd2GQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="L/ePjmLKwUeEeTrRhsEKMgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[2]" type="UMLPackageView" guid="H1zFqxbUzEqKqOJUsjP9UgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">260</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">72</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">120</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">70</XPD:ATTR>
+<XPD:REF name="Model">7dRihysn8kefkb+6mJlwzgAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="f7UEhckiS0qQAoQ5jk3q5wAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="J4t7wKCRQk6ZH6fs1Q9YrgAA">
+<XPD:ATTR name="Text" type="string">tvjava</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="9qa1Yi+fukyu0We9ci5u/AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="+iZgsEiKfUmY0m8L9nAURwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[3]" type="UMLAssociationView" guid="G0kUvklDf0uhBeIUoV+srgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">267,141;138,228</XPD:ATTR>
+<XPD:REF name="Model">rIQWVfPr7E24Tt4ljeTZ4wAA</XPD:REF>
+<XPD:REF name="Head">R7RBkUeb+E+5S8gvJN8+QQAA</XPD:REF>
+<XPD:REF name="Tail">H1zFqxbUzEqKqOJUsjP9UgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="6o6l7Ax4b0uvR1w70cdJiAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">rIQWVfPr7E24Tt4ljeTZ4wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="3ZsGQfCQIk+ZPFC1FyyVeQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">rIQWVfPr7E24Tt4ljeTZ4wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="BCGhRmtL7kmoY1iXaapJOwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">rIQWVfPr7E24Tt4ljeTZ4wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="SuRONY2jREyvBHGP7nheBQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">XKFQZaAIH0SxD7YBXgkK0wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="zqmFgnNCJ0mU+9gnrH18SwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">jLzV7XdHP0Ogmb7/6IPCtgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="l9UCuL7VoEm7vFLWkobdoAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">XKFQZaAIH0SxD7YBXgkK0wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="yt3drhX0N0aispBa+C83TAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">jLzV7XdHP0Ogmb7/6IPCtgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="8rSGjmyTy0iar869slrlPgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">XKFQZaAIH0SxD7YBXgkK0wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="QE0xM9HZIUK4iQSOifSKDQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">jLzV7XdHP0Ogmb7/6IPCtgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="NYMZ1wuIcUy7G5VODIYIDQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1020</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">XKFQZaAIH0SxD7YBXgkK0wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="L3X2M2UWvECpCLZj42krJAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1020</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">jLzV7XdHP0Ogmb7/6IPCtgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[4]" type="UMLAssociationView" guid="+dr3aeLg8k2RQ8khsHmmqAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">336,141;378,224</XPD:ATTR>
+<XPD:REF name="Model">0hCZfIhV4EOpKXcVPwcUnAAA</XPD:REF>
+<XPD:REF name="Head">fCE1/LJF8k+yzWx4bHj2WgAA</XPD:REF>
+<XPD:REF name="Tail">H1zFqxbUzEqKqOJUsjP9UgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="eiIT0uNCpUywEWk7FrhutgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">0hCZfIhV4EOpKXcVPwcUnAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="m5vcHblPLUe9VZHiD1lPzgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">0hCZfIhV4EOpKXcVPwcUnAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="dHGIMYC9dUeyteDUvxEuNgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">0hCZfIhV4EOpKXcVPwcUnAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="bVRmxC4LeEivBU8rO/l1IwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">TolxJOTDCkO5nyLC6ipkAwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="DGGWcQw7xESguDo8y8c9JwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">DGWju3i/80ObxLedRPIIEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="Brf+/LZbFEamowtJ6zGOAgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">TolxJOTDCkO5nyLC6ipkAwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="YyNOaiAWMU6urAt6uMo51wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">DGWju3i/80ObxLedRPIIEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="/6WmiwEpmUGnLzBRc6lCzwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">TolxJOTDCkO5nyLC6ipkAwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="RjfRt8utjEiWYhIQFBxLqgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">DGWju3i/80ObxLedRPIIEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="eme8PTCUYkiREXPCAN1ACgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1020</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">TolxJOTDCkO5nyLC6ipkAwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="HRQ1wVKzDUe1hazbUuDnVwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1020</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">DGWju3i/80ObxLedRPIIEwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[5]" type="UMLPackageView" guid="HUFrn02Id0u4EHrKc4mxVgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">528</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">308</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">120</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">70</XPD:ATTR>
+<XPD:REF name="Model">CN6L5smMd0u/4SQDgGuxlAAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="I7oFyXOyn0ap6db6aB27kQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="UZqAJSuU3kSCM+H7F0CJAwAA">
+<XPD:ATTR name="Text" type="string">am_mw</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="uBO1MGx+MkeMvQYhb1C2NQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="kl+qD1R9/USAxQT6CzXArgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[6]" type="UMLPackageView" guid="I+6GQQgDxUay2yh9EH63ugAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">296</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">428</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">120</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">70</XPD:ATTR>
+<XPD:REF name="Model">y05IqzZQzU2XtiSPAXk7QgAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="9hBSRpfEY02ywkAvNDqTXQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="h6PfAdCi8kytI+NLcAHmLAAA">
+<XPD:ATTR name="Text" type="string">am_adp</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="lQixSy3pSUqBMXv0rFJpcQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="GkA9EEwFZkyyC6WEJrJkMAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[7]" type="UMLAssociationView" guid="jyEOqiMx5kuOhl2RypG5igAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">455,284;528,316</XPD:ATTR>
+<XPD:REF name="Model">Yy1zZGFqjUCrfxwigF/GpgAA</XPD:REF>
+<XPD:REF name="Head">HUFrn02Id0u4EHrKc4mxVgAA</XPD:REF>
+<XPD:REF name="Tail">fCE1/LJF8k+yzWx4bHj2WgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="CPHJazCBZ06NtAVR2VK7OQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">Yy1zZGFqjUCrfxwigF/GpgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="APOmD3psFUyWhRAnwzCajwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">Yy1zZGFqjUCrfxwigF/GpgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="QMsE3esBJk6sDRS6x5DJkQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">Yy1zZGFqjUCrfxwigF/GpgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="5/4cIerJAUmV49IBGwpo+AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">MOhicSFw0kKsC3+R+Reo0AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="Pet1Wl/5g0+pU9Kd2fc7SwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">KeKc5deyJkKjIbzodSAF8QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="xdfe8bjolEChoIUMuakZ8gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">MOhicSFw0kKsC3+R+Reo0AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="Dx+9oTBsHEO70cjv4b2azAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">KeKc5deyJkKjIbzodSAF8QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="BoU11LZqBk2U9D1Ai1YY2AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">MOhicSFw0kKsC3+R+Reo0AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="GAWp04mbX0+qBItsdvgjYwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">KeKc5deyJkKjIbzodSAF8QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="fBqd46+r3kqJEpg8jQ4//wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-984</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1076</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">MOhicSFw0kKsC3+R+Reo0AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="EDyc+T9/p0uT65Az3US0YgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-984</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1076</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">KeKc5deyJkKjIbzodSAF8QAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[8]" type="UMLAssociationView" guid="YWFKeOxwm0mHujDlyTbolQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">388,293;362,428</XPD:ATTR>
+<XPD:REF name="Model">+rFPRw7qR0aoTGBGytrjDAAA</XPD:REF>
+<XPD:REF name="Head">I+6GQQgDxUay2yh9EH63ugAA</XPD:REF>
+<XPD:REF name="Tail">fCE1/LJF8k+yzWx4bHj2WgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="zrsbj2XE/EayNVwoOloIDAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">+rFPRw7qR0aoTGBGytrjDAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="pIYrJ7JAAUSz3n/qiGAv0gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">+rFPRw7qR0aoTGBGytrjDAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="qoKs5KXOckiwAYzN24SMoQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">+rFPRw7qR0aoTGBGytrjDAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="5Y/PPNFnoUOKREH8OSaNBwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">n4pg4fd/GUuaJaSzXBirOAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="88cAHmNV00eS5otEvuUQZAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">osliKvkWrU6Jd0FLz/mZngAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="OURlWAjS10SUcdK4oeUXcwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">n4pg4fd/GUuaJaSzXBirOAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="+YTxAPro+k+Ev3Qa9Td+KAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">osliKvkWrU6Jd0FLz/mZngAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="NJe8vUJOvEixN2Md5vRGkgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">n4pg4fd/GUuaJaSzXBirOAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="BuekzgD4P0aqdOzNBAVkYAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">osliKvkWrU6Jd0FLz/mZngAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="5Y0Wg3PhS06h+5PmVU/QJAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-984</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1076</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">n4pg4fd/GUuaJaSzXBirOAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="zTwLHGMcZUaH/kCRcMqJlQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-984</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1076</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">osliKvkWrU6Jd0FLz/mZngAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[9]" type="UMLAssociationView" guid="G47JdG1ivEWpCS5+NGRUWQAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">528,373;415,431</XPD:ATTR>
+<XPD:REF name="Model">eNd3z1weKEWCnlfqPTDLIgAA</XPD:REF>
+<XPD:REF name="Head">I+6GQQgDxUay2yh9EH63ugAA</XPD:REF>
+<XPD:REF name="Tail">HUFrn02Id0u4EHrKc4mxVgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="u6LdVCjKbEaIGLn56/w1QQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">eNd3z1weKEWCnlfqPTDLIgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="ona2Ko0szEK+2FIv3L6R1wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">eNd3z1weKEWCnlfqPTDLIgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="fST4kYS4rkicfRLiq6BrYQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">eNd3z1weKEWCnlfqPTDLIgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="AnTjwQSX4UO3xjKGm9U1PAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">SVDzdW2e/kG2il66SgxQ1wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="GtS+L0c22kmmx+S6raeEAAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">elujImCAXkaoOjRAKkuxUAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="Rx+SX1Ukc0WijFhZRJ2tbgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">SVDzdW2e/kG2il66SgxQ1wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="r48AH3NG+kGYdG2dItOtqwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">elujImCAXkaoOjRAKkuxUAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="OMlcQeewVkyEmkWpq768pgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">SVDzdW2e/kG2il66SgxQ1wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="C6OdcHaGUEG0WccqDQbNoQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">elujImCAXkaoOjRAKkuxUAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="61/4k03iIkWp5ZY6aFMm4AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-912</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">SVDzdW2e/kG2il66SgxQ1wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="aRw7UJOi9kaUwJX2uJ1tDwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-912</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">elujImCAXkaoOjRAKkuxUAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#OwnedElements" type="integer">31</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLAssociation" guid="av0s6EXaYUKyooee2y6sdgAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">12BWSnVhhUOUuox7tdL41gAA</XPD:REF>
+<XPD:REF name="Views[1]">4F+C2zwwrEOjx/qCnLXWPAAA</XPD:REF>
+<XPD:REF name="Views[2]">lXf6uq0JtkK3YNXTxTyP7wAA</XPD:REF>
+<XPD:REF name="Views[3]">8jym3kotyE2sBWD5KjhUiQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="IEnUwW74QkSkdRZGqdKvaAAA">
+<XPD:REF name="Association">av0s6EXaYUKyooee2y6sdgAA</XPD:REF>
+<XPD:REF name="Participant">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">awNg1wfSGU22on1C+XpBlgAA</XPD:REF>
+<XPD:REF name="Views[1]">cGTSA3bQb0S81NQzsTj+QQAA</XPD:REF>
+<XPD:REF name="Views[2]">LWsKT6dOQUKXma9Eoh+sUwAA</XPD:REF>
+<XPD:REF name="Views[3]">l9TSA+eftkCY2p6qZDMGKAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="GZcPUasbnkG3pyGKV6NFnAAA">
+<XPD:REF name="Association">av0s6EXaYUKyooee2y6sdgAA</XPD:REF>
+<XPD:REF name="Participant">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">ioK1huVib0u6ILv3kHAeeQAA</XPD:REF>
+<XPD:REF name="Views[1]">cwfxPIXUd06ShM9BEivzxQAA</XPD:REF>
+<XPD:REF name="Views[2]">DBsnRjqoj0W9eAN/Flu+jwAA</XPD:REF>
+<XPD:REF name="Views[3]">DUu549wQM0qPn9dAjjrLZgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLAssociation" guid="cNCsWS2hgkeaGhYJv9oONgAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Qa1PhzSwWkyS1rm6eapfLwAA</XPD:REF>
+<XPD:REF name="Views[1]">QAoFSXFK+0S+5kDYAQ0LsgAA</XPD:REF>
+<XPD:REF name="Views[2]">rsOqshNVOkut6r+wW0Sp/wAA</XPD:REF>
+<XPD:REF name="Views[3]">0wZW9IH3y0OEPMfN5FyHQAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="PFZlUbzZu02nTTLsYZBoDgAA">
+<XPD:REF name="Association">cNCsWS2hgkeaGhYJv9oONgAA</XPD:REF>
+<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">TM3RNruxzEezNhF8XO/FmwAA</XPD:REF>
+<XPD:REF name="Views[1]">NpASusGGKU+/KwcKkTAMogAA</XPD:REF>
+<XPD:REF name="Views[2]">3dtXpNLbXka7wekzvAWsXQAA</XPD:REF>
+<XPD:REF name="Views[3]">Mvk2196ldk+5GLgct+OKuwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="2JZlFpDZPkGgaoWrrPAGXAAA">
+<XPD:REF name="Association">cNCsWS2hgkeaGhYJv9oONgAA</XPD:REF>
+<XPD:REF name="Participant">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">ySD9HMBWmEWoJg+/6boBZgAA</XPD:REF>
+<XPD:REF name="Views[1]">LXz8D2AdoE6ojzgkYCO0qAAA</XPD:REF>
+<XPD:REF name="Views[2]">ia8j06EduUmxgB5smbA9hQAA</XPD:REF>
+<XPD:REF name="Views[3]">/JYlnmhzTk66TicK0RjYaQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[2]" type="UMLAssociation" guid="CVx7QaOEd0iJQ6USdSCilwAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">UmHHYiIr3k+gNNomjLpgwwAA</XPD:REF>
+<XPD:REF name="Views[1]">ZBlvBeIE2UGGPTML4sQ7SgAA</XPD:REF>
+<XPD:REF name="Views[2]">UDn5R84weEayOYl6QVFj1wAA</XPD:REF>
+<XPD:REF name="Views[3]">OApAa7HXz0aTiMZGZ/g2tAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="q5Ko0bXKcE6uj05NJPSddwAA">
+<XPD:REF name="Association">CVx7QaOEd0iJQ6USdSCilwAA</XPD:REF>
+<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">24RGLobteEil7cUdAcyUcAAA</XPD:REF>
+<XPD:REF name="Views[1]">6Uw1pdad6kC8N8S0Rf1HxwAA</XPD:REF>
+<XPD:REF name="Views[2]">CuUsJAcsAUWwVZJzegOegAAA</XPD:REF>
+<XPD:REF name="Views[3]">AST9GWgDTEWR07o7yUcgIQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="XvxorIQvl0aKnzyznjd1uwAA">
+<XPD:REF name="Association">CVx7QaOEd0iJQ6USdSCilwAA</XPD:REF>
+<XPD:REF name="Participant">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">W1YT5dqwMUSUI29zCC2LZQAA</XPD:REF>
+<XPD:REF name="Views[1]">X96IIfOZSE2FAliwKkCNYgAA</XPD:REF>
+<XPD:REF name="Views[2]">tr7uiHRKz0e//ValH5GU+AAA</XPD:REF>
+<XPD:REF name="Views[3]">zdcHIs6dNEmxQNtCK5uHIQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[3]" type="UMLAssociation" guid="hBOTE33GDUO/X8s5oHlAmQAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">oYsj3yhzJkCKmOBcWIHNDwAA</XPD:REF>
+<XPD:REF name="Views[1]">GT6R2h3HkU6LThPKaghC1QAA</XPD:REF>
+<XPD:REF name="Views[2]">eWMr3v5Qb0y/nXu2s/EP5wAA</XPD:REF>
+<XPD:REF name="Views[3]">GR9gxzUjNkKmujWHFobLtAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="qOlPMeLYpUC4lTEl3Hsc8QAA">
+<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Association">hBOTE33GDUO/X8s5oHlAmQAA</XPD:REF>
+<XPD:REF name="Participant">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">UuRRAQf+y0OdXTOvWu7nUAAA</XPD:REF>
+<XPD:REF name="Views[1]">vI5c+acLSk6IfCcdqlaBggAA</XPD:REF>
+<XPD:REF name="Views[2]">w3rpxhxEsEu0y7myhFrrkQAA</XPD:REF>
+<XPD:REF name="Views[3]">8Ip2rQJRaEaPAOW0cJSd/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="Yo1IoB0X3ka1C+a/6xk1/gAA">
+<XPD:REF name="Association">hBOTE33GDUO/X8s5oHlAmQAA</XPD:REF>
+<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">+SSR3TM1z0m5UkTLiuMrGwAA</XPD:REF>
+<XPD:REF name="Views[1]">Uvo2ryiBg0Oa5GJF4TRyhQAA</XPD:REF>
+<XPD:REF name="Views[2]">QBI1NHwjWU2dkj+SLUFZ+AAA</XPD:REF>
+<XPD:REF name="Views[3]">IYVJT/RjPUqjv8rl6ZIQiwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[4]" type="UMLAssociation" guid="/X1BIuClXkywNV1vNa/LWwAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Vcgjd9eKakOjuUAjwzzhJgAA</XPD:REF>
+<XPD:REF name="Views[1]">+iIIR1mEnUynEPEjuGAd7AAA</XPD:REF>
+<XPD:REF name="Views[2]">bZn71kXJQUOP3yAyCa5RvgAA</XPD:REF>
+<XPD:REF name="Views[3]">O36co7nFz0elpJnbKtsYMwAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="BVpPYPY4V0KsTBJTRoLjyAAA">
+<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Association">/X1BIuClXkywNV1vNa/LWwAA</XPD:REF>
+<XPD:REF name="Participant">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Hv4K+XlgIkqDgqEz3aQWNQAA</XPD:REF>
+<XPD:REF name="Views[1]">4o7M8jakfkixRwVgESrUnwAA</XPD:REF>
+<XPD:REF name="Views[2]">rCPaxzL0LEuk9Jjbqi+D2gAA</XPD:REF>
+<XPD:REF name="Views[3]">HKXhPda/vUuVwv4sR9ZR9QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="RoKhf4Bw3kmRk2O2D4GlxQAA">
+<XPD:REF name="Association">/X1BIuClXkywNV1vNa/LWwAA</XPD:REF>
+<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">yjjLYCXJjUqX0IHnpKwHwQAA</XPD:REF>
+<XPD:REF name="Views[1]">k1XiyO9mlke/IAq5UuYI9gAA</XPD:REF>
+<XPD:REF name="Views[2]">Xtc7Jqe6N0+JAzLg1RxYLwAA</XPD:REF>
+<XPD:REF name="Views[3]">W0UPJtBpLU6Y5SjscWTiVAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[5]" type="UMLAssociation" guid="PudswW77eEShTMEdcK5BCAAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">VjZwKWmCoUO5wNRGJGVShAAA</XPD:REF>
+<XPD:REF name="Views[1]">6e9pHkpPaUyLDCYYnUYAOAAA</XPD:REF>
+<XPD:REF name="Views[2]">QA7tnAAMA0e3tCDRlkB/JwAA</XPD:REF>
+<XPD:REF name="Views[3]">gdUdn5u5x0KDsDKM41p2CQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="Io3cINfhiE23pmiSxpS6swAA">
+<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Association">PudswW77eEShTMEdcK5BCAAA</XPD:REF>
+<XPD:REF name="Participant">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">d/3xrtQ+nU69mQYepo7NvQAA</XPD:REF>
+<XPD:REF name="Views[1]">HcOo4bUmbUqLEjVUm2L2AQAA</XPD:REF>
+<XPD:REF name="Views[2]">tQj+naSiJ0mB4W89ahH5ygAA</XPD:REF>
+<XPD:REF name="Views[3]">LNFybtIVIkOXnQ/9QC5jEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="vyoQZGl3UECBMhf7+IDQUwAA">
+<XPD:REF name="Association">PudswW77eEShTMEdcK5BCAAA</XPD:REF>
+<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">rqoTwNlD20Gou9xOLQ2RNgAA</XPD:REF>
+<XPD:REF name="Views[1]">ox9r7npaB0in7/ygfG1ZMwAA</XPD:REF>
+<XPD:REF name="Views[2]">exLwGLRY306J0CEcqxlOrgAA</XPD:REF>
+<XPD:REF name="Views[3]">qxZgk8R36k2S3vGRfQegfwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[6]" type="UMLAssociation" guid="q5PurOmOUUOX8hzj5CINYQAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">QHk4xsvJRUGhKn0p+sReaAAA</XPD:REF>
+<XPD:REF name="Views[1]">ezGCtUA0dUOn10D5pUOtoAAA</XPD:REF>
+<XPD:REF name="Views[2]">QcGPzg741ki4yTGfoKvK9AAA</XPD:REF>
+<XPD:REF name="Views[3]">ioZQYN39bEu/gy37UfkhmQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="PhlKgbqPt0OClpwk2m9vswAA">
+<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Association">q5PurOmOUUOX8hzj5CINYQAA</XPD:REF>
+<XPD:REF name="Participant">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">VrmcPyj2oUyEm5i/AG7/KgAA</XPD:REF>
+<XPD:REF name="Views[1]">odMtivppNUOccWtC85AVCQAA</XPD:REF>
+<XPD:REF name="Views[2]">2IiGGrbDkUiobp5CJnME1QAA</XPD:REF>
+<XPD:REF name="Views[3]">+70t9Os6zUWhIAhufEQsBAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="iy8GVdK11EmKnmJ6LivVVQAA">
+<XPD:REF name="Association">q5PurOmOUUOX8hzj5CINYQAA</XPD:REF>
+<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">mZFBakBXmE6Gj5qumz51gwAA</XPD:REF>
+<XPD:REF name="Views[1]">KHpH30oHrEew1AGquvXiEQAA</XPD:REF>
+<XPD:REF name="Views[2]">W7KAnZMmjEKAxuaUXA4D6AAA</XPD:REF>
+<XPD:REF name="Views[3]">jsiact/gpUS21gy1IeSlZQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[7]" type="UMLAssociation" guid="8zCqordbBESBaPJH8SIoOQAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">l3oAx6sfA0ScCOouvAFKYwAA</XPD:REF>
+<XPD:REF name="Views[1]">pM/XXFo9Ikq+kK5++HoZ0QAA</XPD:REF>
+<XPD:REF name="Views[2]">igklIYxpfka7OH5oAnRbPwAA</XPD:REF>
+<XPD:REF name="Views[3]">RtZQfGM0uUqohb/WlARRpwAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="72fG4kbiM0eyczFPq2MtVAAA">
+<XPD:ATTR name="Multiplicity" type="string">1..*</XPD:ATTR>
+<XPD:REF name="Association">8zCqordbBESBaPJH8SIoOQAA</XPD:REF>
+<XPD:REF name="Participant">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">pr9mkVSNO0KasNMsFvgDuQAA</XPD:REF>
+<XPD:REF name="Views[1]">4fUHmnlcd0WplogWZWqPRQAA</XPD:REF>
+<XPD:REF name="Views[2]">kKRq4K1cvEup70Oz2UFd8QAA</XPD:REF>
+<XPD:REF name="Views[3]">DS2eOvXKXku93Y4x950QPgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="zefo1Bu+v0e4gn9nUL+bSQAA">
+<XPD:ATTR name="Multiplicity" type="string">1</XPD:ATTR>
+<XPD:REF name="Association">8zCqordbBESBaPJH8SIoOQAA</XPD:REF>
+<XPD:REF name="Participant">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">lDsB+MeNlUy+OEBCbfs0OAAA</XPD:REF>
+<XPD:REF name="Views[1]">EeUDIEWsnkO5HzTU6L6kZQAA</XPD:REF>
+<XPD:REF name="Views[2]">TuyQdZk0H0+ai9Mg3ZtK3AAA</XPD:REF>
+<XPD:REF name="Views[3]">NKw56kYvx0W0KlwhXPYWMwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[8]" type="UMLAssociation" guid="3RrM1HB71kyHO0jB4JI4zgAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">5vCGUSmlwUWKkjul/i5CoAAA</XPD:REF>
+<XPD:REF name="Views[1]">ihIaZz5p+0Cte+Zqg1wUKgAA</XPD:REF>
+<XPD:REF name="Views[2]">XyhhchGH70uYaM5UdGboKQAA</XPD:REF>
+<XPD:REF name="Views[3]">+N+OW0LtoEyevYQ++bVO1gAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="ULQw0JNjPE2758pFWlo+MQAA">
+<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Association">3RrM1HB71kyHO0jB4JI4zgAA</XPD:REF>
+<XPD:REF name="Participant">iUy0YZgyREC+o54lTQptaAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">blnGfW4UCk6tS0veRc88xAAA</XPD:REF>
+<XPD:REF name="Views[1]">jGRa3FaTrUWVhYVG834fjwAA</XPD:REF>
+<XPD:REF name="Views[2]">olvLmzjsfka5YmNEOntQDAAA</XPD:REF>
+<XPD:REF name="Views[3]">H/do1s5Rh02ETrOyjtaoaAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="DkcX/fIec029p5Da5gYToAAA">
+<XPD:REF name="Association">3RrM1HB71kyHO0jB4JI4zgAA</XPD:REF>
+<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">vLsrualWRkO0QI8PcBWGAAAA</XPD:REF>
+<XPD:REF name="Views[1]">vWndJmxhrkKfipX/zAAt4AAA</XPD:REF>
+<XPD:REF name="Views[2]">lKgJhvwP/Eygz7oPLvwsxwAA</XPD:REF>
+<XPD:REF name="Views[3]">AdMO10glEEWGGHqpzKNvewAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[9]" type="UMLAssociation" guid="GjMZbUwaMkGOkbxOXau26AAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">EWnB2mjt6ke3pnsnQFRgJwAA</XPD:REF>
+<XPD:REF name="Views[1]">dM3yo1oYRUWNB1JawgFnywAA</XPD:REF>
+<XPD:REF name="Views[2]">/IP55LSMZUCRoa77gkMh9gAA</XPD:REF>
+<XPD:REF name="Views[3]">Og4FQYOz9kOr8LF43j+ySwAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="aYL27tYOR02se3g//aEBeAAA">
+<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Association">GjMZbUwaMkGOkbxOXau26AAA</XPD:REF>
+<XPD:REF name="Participant">/LI4+1GTjEagI/wLEFpVSQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Ggu7vb3GMU2vn9mS8bGZpwAA</XPD:REF>
+<XPD:REF name="Views[1]">wMyvwGpZQUmJ2a2lXlkc/AAA</XPD:REF>
+<XPD:REF name="Views[2]">rn/sn4ErGkyYnwDUlnpmTAAA</XPD:REF>
+<XPD:REF name="Views[3]">wElMDINXY0esqBl7AwoyfQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="gc0GlJ6ewUOpiyya+XPqjQAA">
+<XPD:REF name="Association">GjMZbUwaMkGOkbxOXau26AAA</XPD:REF>
+<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">zHiCXVqqgE6r2lDdnVDI1gAA</XPD:REF>
+<XPD:REF name="Views[1]">19Ii9g15zUmLLURud9e9XAAA</XPD:REF>
+<XPD:REF name="Views[2]">KLCf1m7tBkGvkM3iOxLhJgAA</XPD:REF>
+<XPD:REF name="Views[3]">1+qZEhcpyk6RHirwjBjalgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[10]" type="UMLAssociation" guid="m6lnHtsBL02A4Oup+IzVEAAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">DbUG5zy8r0yq6L/I1naVdQAA</XPD:REF>
+<XPD:REF name="Views[1]">1qY9qbCT1ka5tmfuL9yaJgAA</XPD:REF>
+<XPD:REF name="Views[2]">bnG59/mNjk+fcthvMQG2VAAA</XPD:REF>
+<XPD:REF name="Views[3]">wovrqiKgc0qw9BUyPaGuBQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="kdbNMfgoG02cJO0UFJeeLwAA">
+<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Association">m6lnHtsBL02A4Oup+IzVEAAA</XPD:REF>
+<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">JbJSjKTBikyT++rY1XVCtwAA</XPD:REF>
+<XPD:REF name="Views[1]">wUtw7zNylEK+wDvPOsUtGwAA</XPD:REF>
+<XPD:REF name="Views[2]">/cBBOvztgE6Kd7yvemxXPwAA</XPD:REF>
+<XPD:REF name="Views[3]">uj1vGzCGtkGielBw0Bxi4QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="l6Lg/NJG5UWu+7ALxaVP3gAA">
+<XPD:REF name="Association">m6lnHtsBL02A4Oup+IzVEAAA</XPD:REF>
+<XPD:REF name="Participant">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">hytVQ6VnmEaHnFV5o9fQ0AAA</XPD:REF>
+<XPD:REF name="Views[1]">eYodfuyOKEK7WC9dBBlaigAA</XPD:REF>
+<XPD:REF name="Views[2]">BEEaANsP0UCbPpRjMWyndwAA</XPD:REF>
+<XPD:REF name="Views[3]">JKx2O2r/H0y9NJ3+4rup1QAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[11]" type="UMLAssociation" guid="gmKjyBaRB0SfVd2p3FDOTwAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">l2Yo1ObIG0WVx7IS2a/B3QAA</XPD:REF>
+<XPD:REF name="Views[1]">Bt1whnZV8ke93vkLSyNq6wAA</XPD:REF>
+<XPD:REF name="Views[2]">fqRKs5ARzUGsdlKFgCFhWQAA</XPD:REF>
+<XPD:REF name="Views[3]">5M/QRFEaxUa0SktETbkRSwAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="X5VvOi2uGkGYzMMS5nWm2AAA">
+<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Association">gmKjyBaRB0SfVd2p3FDOTwAA</XPD:REF>
+<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">51OtH+Gyy0+XZJVSgV/KuQAA</XPD:REF>
+<XPD:REF name="Views[1]">V2pqj6nPg0SqB+TNOQI5PwAA</XPD:REF>
+<XPD:REF name="Views[2]">1rWGuTeEqEm+RdcskXCo9gAA</XPD:REF>
+<XPD:REF name="Views[3]">90vol1uY7U27TcNYwOdZBQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="QwwfXlN26EahMaF2XDAvLAAA">
+<XPD:REF name="Association">gmKjyBaRB0SfVd2p3FDOTwAA</XPD:REF>
+<XPD:REF name="Participant">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">oOLw6a4XNk6oN6yvhlsf7QAA</XPD:REF>
+<XPD:REF name="Views[1]">kMLAHkAn9EKw71vpw3PgHQAA</XPD:REF>
+<XPD:REF name="Views[2]">FYDexLT3eUK3X5xdW3Qq/gAA</XPD:REF>
+<XPD:REF name="Views[3]">VJLq9UMlJE2EqLEbDm23HQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[12]" type="UMLAssociation" guid="iBQV0DXX90uUjMTGr6FFjQAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">dSXCMAUeXkaVaOqAa4KDAQAA</XPD:REF>
+<XPD:REF name="Views[1]">AXtWRmQ/j0G8KsAfZc/QeQAA</XPD:REF>
+<XPD:REF name="Views[2]">pxhqUzjCEkqTLYfXynALEwAA</XPD:REF>
+<XPD:REF name="Views[3]">0nagXXOSFk+hHuMBpdFBLwAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="xf4XKZpxx0iF7C4H+oOABwAA">
+<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Association">iBQV0DXX90uUjMTGr6FFjQAA</XPD:REF>
+<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">+0LMOuMUukS68snSkLSsTwAA</XPD:REF>
+<XPD:REF name="Views[1]">ow67AFPFhk2P92GHjX8x6gAA</XPD:REF>
+<XPD:REF name="Views[2]">cLLrD3Z3uUyN5TkuZIiYvQAA</XPD:REF>
+<XPD:REF name="Views[3]">RpANS2KKQEiX7rWNn+sFQQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="IMPiiZPlxkaJkH8N2NGOggAA">
+<XPD:REF name="Association">iBQV0DXX90uUjMTGr6FFjQAA</XPD:REF>
+<XPD:REF name="Participant">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">z3Q2FaOZNUa329RgqNTDpgAA</XPD:REF>
+<XPD:REF name="Views[1]">bIZ0y/4MSEGDbNvxAP+XjAAA</XPD:REF>
+<XPD:REF name="Views[2]">C8AG2Zjc9UCIEaei4/obTgAA</XPD:REF>
+<XPD:REF name="Views[3]">q1TRTMmCmEuxq3mV3WwE9wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[13]" type="UMLAssociation" guid="9P0hz9Bq2U6gDVowATxiWAAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">ALV9IpRzikWc38x/4t62CgAA</XPD:REF>
+<XPD:REF name="Views[1]">8t8bSCYvGkO28nJZE2y4nwAA</XPD:REF>
+<XPD:REF name="Views[2]">3EywKQmkOE2KjbjVh2NmDgAA</XPD:REF>
+<XPD:REF name="Views[3]">BbqpqccVf0Wg7tVha614JAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="yVknRLQq7U2nj3bRfizyAgAA">
+<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Association">9P0hz9Bq2U6gDVowATxiWAAA</XPD:REF>
+<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">TSgUJz4gCUSqn+dKKulHoAAA</XPD:REF>
+<XPD:REF name="Views[1]">bB0rInPRJES1Fi1mh9FCEAAA</XPD:REF>
+<XPD:REF name="Views[2]">Te1GttqM50mrkMzGYceWLQAA</XPD:REF>
+<XPD:REF name="Views[3]">XUHdjv1boEaqvLcg553dbwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="BSJLLgAd4kCusm/8BFZQMQAA">
+<XPD:REF name="Association">9P0hz9Bq2U6gDVowATxiWAAA</XPD:REF>
+<XPD:REF name="Participant">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">YVFZpgGB/0O96quX2udZDwAA</XPD:REF>
+<XPD:REF name="Views[1]">pIexnuTBiUiEhhq44l4rCwAA</XPD:REF>
+<XPD:REF name="Views[2]">yT+paMjNpkaG1OKJL+sYCAAA</XPD:REF>
+<XPD:REF name="Views[3]">znNxDO7m6E6nvS/FYUZ9OAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[14]" type="UMLAssociation" guid="sBsUoQYdEkCsxRTpPtknYAAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">hBsdq7HI/EWiSzAGC7VcegAA</XPD:REF>
+<XPD:REF name="Views[1]">AW09hEar3Einy0/8DRC44wAA</XPD:REF>
+<XPD:REF name="Views[2]">GL4o+Jwo9kafQcdPg1ZCtgAA</XPD:REF>
+<XPD:REF name="Views[3]">kNZhsHL9skazmf+MM+oIKwAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="6CsrL0wlVEKI657OoEev1gAA">
+<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Association">sBsUoQYdEkCsxRTpPtknYAAA</XPD:REF>
+<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">VipQilP5w0axs39cx9OCsgAA</XPD:REF>
+<XPD:REF name="Views[1]">m6SZNVehm06iGtccsj43wAAA</XPD:REF>
+<XPD:REF name="Views[2]">x2e4QwAQ50Sn6Io3k6B2tAAA</XPD:REF>
+<XPD:REF name="Views[3]">4MO5fs8bNkahA1cEAQY9zAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="bObyymjPEkeQZSoHCKpP2QAA">
+<XPD:REF name="Association">sBsUoQYdEkCsxRTpPtknYAAA</XPD:REF>
+<XPD:REF name="Participant">iUy0YZgyREC+o54lTQptaAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">5T2cPS5X+UykejaXNX6mSAAA</XPD:REF>
+<XPD:REF name="Views[1]">P16FQXg1DEOld8DfGFfSxQAA</XPD:REF>
+<XPD:REF name="Views[2]">FcWiwQTsx02Ku0N5G3bjSgAA</XPD:REF>
+<XPD:REF name="Views[3]">d3kqRYSWSUSKKTZ+56sZkwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[15]" type="UMLAssociation" guid="5JmzC90ylki6klhVRRibGAAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Gfgt2UdXqE2QrN+Jzf+QvQAA</XPD:REF>
+<XPD:REF name="Views[1]">/p9rmIUUo0mUctVF/yhY5AAA</XPD:REF>
+<XPD:REF name="Views[2]">P5QKAYFqikOaJu107L2QDwAA</XPD:REF>
+<XPD:REF name="Views[3]">y/WNtKBGo0q8OYbjC0evjgAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="be+eScBkV0Cn4n2XjSojvgAA">
+<XPD:ATTR name="IsNavigable" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Association">5JmzC90ylki6klhVRRibGAAA</XPD:REF>
+<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">lELIUkkOg0a4b0G8373BcAAA</XPD:REF>
+<XPD:REF name="Views[1]">R1FSACG6EkWd7DK8ihYAQAAA</XPD:REF>
+<XPD:REF name="Views[2]">WXg43X5+gEiu4atePea88gAA</XPD:REF>
+<XPD:REF name="Views[3]">z+QrSf59lkSSqK+c5yKgcwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="zCPl48BYx0CFRkp8Jj5mogAA">
+<XPD:REF name="Association">5JmzC90ylki6klhVRRibGAAA</XPD:REF>
+<XPD:REF name="Participant">/LI4+1GTjEagI/wLEFpVSQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">cGwksZvEz0aSTFoED5zuJQAA</XPD:REF>
+<XPD:REF name="Views[1]">pF9hWJbSZkCUq/C5qcS+7gAA</XPD:REF>
+<XPD:REF name="Views[2]">/NvtextfvUyZKtMbQ1urHAAA</XPD:REF>
+<XPD:REF name="Views[3]">4pUvTStSU0yU0BtcF8HyfQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[16]" type="UMLPackage" guid="7dRihysn8kefkb+6mJlwzgAA">
+<XPD:ATTR name="Name" type="string">tvjava</XPD:ATTR>
+<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPackage</XPD:ATTR>
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">1</XPD:ATTR>
+<XPD:REF name="Views[0]">H1zFqxbUzEqKqOJUsjP9UgAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">3</XPD:ATTR>
+<XPD:REF name="Associations[0]">jLzV7XdHP0Ogmb7/6IPCtgAA</XPD:REF>
+<XPD:REF name="Associations[1]">DGWju3i/80ObxLedRPIIEwAA</XPD:REF>
+<XPD:REF name="Associations[2]">frvBY5I3t0yZgEqYHUhfEQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[17]" type="UMLPackage" guid="CN6L5smMd0u/4SQDgGuxlAAA">
+<XPD:ATTR name="Name" type="string">am_mw</XPD:ATTR>
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">1</XPD:ATTR>
+<XPD:REF name="Views[0]">HUFrn02Id0u4EHrKc4mxVgAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">3</XPD:ATTR>
+<XPD:REF name="Associations[0]">MOhicSFw0kKsC3+R+Reo0AAA</XPD:REF>
+<XPD:REF name="Associations[1]">elujImCAXkaoOjRAKkuxUAAA</XPD:REF>
+<XPD:REF name="Associations[2]">0RZNIMepB0W9fkd6pMCEZwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[18]" type="UMLPackage" guid="y05IqzZQzU2XtiSPAXk7QgAA">
+<XPD:ATTR name="Name" type="string">am_adp</XPD:ATTR>
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">1</XPD:ATTR>
+<XPD:REF name="Views[0]">I+6GQQgDxUay2yh9EH63ugAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">n4pg4fd/GUuaJaSzXBirOAAA</XPD:REF>
+<XPD:REF name="Associations[1]">SVDzdW2e/kG2il66SgxQ1wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[19]" type="UMLAssociation" guid="Yy1zZGFqjUCrfxwigF/GpgAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">jyEOqiMx5kuOhl2RypG5igAA</XPD:REF>
+<XPD:REF name="Views[1]">CPHJazCBZ06NtAVR2VK7OQAA</XPD:REF>
+<XPD:REF name="Views[2]">APOmD3psFUyWhRAnwzCajwAA</XPD:REF>
+<XPD:REF name="Views[3]">QMsE3esBJk6sDRS6x5DJkQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="KeKc5deyJkKjIbzodSAF8QAA">
+<XPD:REF name="Association">Yy1zZGFqjUCrfxwigF/GpgAA</XPD:REF>
+<XPD:REF name="Participant">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Pet1Wl/5g0+pU9Kd2fc7SwAA</XPD:REF>
+<XPD:REF name="Views[1]">Dx+9oTBsHEO70cjv4b2azAAA</XPD:REF>
+<XPD:REF name="Views[2]">GAWp04mbX0+qBItsdvgjYwAA</XPD:REF>
+<XPD:REF name="Views[3]">EDyc+T9/p0uT65Az3US0YgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="MOhicSFw0kKsC3+R+Reo0AAA">
+<XPD:REF name="Association">Yy1zZGFqjUCrfxwigF/GpgAA</XPD:REF>
+<XPD:REF name="Participant">CN6L5smMd0u/4SQDgGuxlAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">5/4cIerJAUmV49IBGwpo+AAA</XPD:REF>
+<XPD:REF name="Views[1]">xdfe8bjolEChoIUMuakZ8gAA</XPD:REF>
+<XPD:REF name="Views[2]">BoU11LZqBk2U9D1Ai1YY2AAA</XPD:REF>
+<XPD:REF name="Views[3]">fBqd46+r3kqJEpg8jQ4//wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[20]" type="UMLAssociation" guid="+rFPRw7qR0aoTGBGytrjDAAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">YWFKeOxwm0mHujDlyTbolQAA</XPD:REF>
+<XPD:REF name="Views[1]">zrsbj2XE/EayNVwoOloIDAAA</XPD:REF>
+<XPD:REF name="Views[2]">pIYrJ7JAAUSz3n/qiGAv0gAA</XPD:REF>
+<XPD:REF name="Views[3]">qoKs5KXOckiwAYzN24SMoQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="osliKvkWrU6Jd0FLz/mZngAA">
+<XPD:REF name="Association">+rFPRw7qR0aoTGBGytrjDAAA</XPD:REF>
+<XPD:REF name="Participant">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">88cAHmNV00eS5otEvuUQZAAA</XPD:REF>
+<XPD:REF name="Views[1]">+YTxAPro+k+Ev3Qa9Td+KAAA</XPD:REF>
+<XPD:REF name="Views[2]">BuekzgD4P0aqdOzNBAVkYAAA</XPD:REF>
+<XPD:REF name="Views[3]">zTwLHGMcZUaH/kCRcMqJlQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="n4pg4fd/GUuaJaSzXBirOAAA">
+<XPD:REF name="Association">+rFPRw7qR0aoTGBGytrjDAAA</XPD:REF>
+<XPD:REF name="Participant">y05IqzZQzU2XtiSPAXk7QgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">5Y/PPNFnoUOKREH8OSaNBwAA</XPD:REF>
+<XPD:REF name="Views[1]">OURlWAjS10SUcdK4oeUXcwAA</XPD:REF>
+<XPD:REF name="Views[2]">NJe8vUJOvEixN2Md5vRGkgAA</XPD:REF>
+<XPD:REF name="Views[3]">5Y0Wg3PhS06h+5PmVU/QJAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[21]" type="UMLAssociation" guid="eNd3z1weKEWCnlfqPTDLIgAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">G47JdG1ivEWpCS5+NGRUWQAA</XPD:REF>
+<XPD:REF name="Views[1]">u6LdVCjKbEaIGLn56/w1QQAA</XPD:REF>
+<XPD:REF name="Views[2]">ona2Ko0szEK+2FIv3L6R1wAA</XPD:REF>
+<XPD:REF name="Views[3]">fST4kYS4rkicfRLiq6BrYQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="elujImCAXkaoOjRAKkuxUAAA">
+<XPD:REF name="Association">eNd3z1weKEWCnlfqPTDLIgAA</XPD:REF>
+<XPD:REF name="Participant">CN6L5smMd0u/4SQDgGuxlAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">GtS+L0c22kmmx+S6raeEAAAA</XPD:REF>
+<XPD:REF name="Views[1]">r48AH3NG+kGYdG2dItOtqwAA</XPD:REF>
+<XPD:REF name="Views[2]">C6OdcHaGUEG0WccqDQbNoQAA</XPD:REF>
+<XPD:REF name="Views[3]">aRw7UJOi9kaUwJX2uJ1tDwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="SVDzdW2e/kG2il66SgxQ1wAA">
+<XPD:REF name="Association">eNd3z1weKEWCnlfqPTDLIgAA</XPD:REF>
+<XPD:REF name="Participant">y05IqzZQzU2XtiSPAXk7QgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">AnTjwQSX4UO3xjKGm9U1PAAA</XPD:REF>
+<XPD:REF name="Views[1]">Rx+SX1Ukc0WijFhZRJ2tbgAA</XPD:REF>
+<XPD:REF name="Views[2]">OMlcQeewVkyEmkWpq768pgAA</XPD:REF>
+<XPD:REF name="Views[3]">61/4k03iIkWp5ZY6aFMm4AAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[22]" type="UMLPackage" guid="bnJ8ggSchket3/t1l7Kx4wAA">
+<XPD:ATTR name="Name" type="string">tv</XPD:ATTR>
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#OwnedElements" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLPackage" guid="T1P4Xv7L+UuEzFqU+iyS5wAA">
+<XPD:ATTR name="Name" type="string">dtv</XPD:ATTR>
+<XPD:REF name="Namespace">bnJ8ggSchket3/t1l7Kx4wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">1</XPD:ATTR>
+<XPD:REF name="Views[0]">fCE1/LJF8k+yzWx4bHj2WgAA</XPD:REF>
+<XPD:ATTR name="#OwnedElements" type="integer">14</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLClass" guid="xAj1pchzIEeSaRcR2+aFTwAA">
+<XPD:ATTR name="Name" type="string">CDtv</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">9Ld1pTeBF0CZmoVdEfEBMQAA</XPD:REF>
+<XPD:REF name="Views[1]">mxcpZDUEI0aTfXvfNUP8/QAA</XPD:REF>
+<XPD:REF name="Views[2]">0p/pTktl+kimPcmFJ4/wywAA</XPD:REF>
+<XPD:REF name="Views[3]">kWtX8dZWikSHi3kCydMHCAAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">32</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="dmYYHpECE0G9dWsxqVRqVgAA">
+<XPD:ATTR name="Name" type="string">startScan</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">开始频é“æœç´¢</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="XpPbBfTfWU2kqA1mr/vbJgAA">
+<XPD:ATTR name="Name" type="string">stopScan</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="UkrKc9f59kSDyV/AaLMH+gAA">
+<XPD:ATTR name="Name" type="string">startBooking</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="JcvijNcflkmNK8+KOhdCggAA">
+<XPD:ATTR name="Name" type="string">pause</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">æš‚åœæ’­æ”¾(回放和时移播放时有效)</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="i8IvkFjbqUCCSXorAzUdRAAA">
+<XPD:ATTR name="Name" type="string">resume</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">æ¢å¤æ’­æ”¾(回放和时移播放时有效)</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="dQd++JYYo0amx+JlLdJFWQAA">
+<XPD:ATTR name="Name" type="string">playProgram</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="zO9p84LeHUGvoLEQTCAS3QAA">
+<XPD:ATTR name="Name" type="string">num</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">dQd++JYYo0amx+JlLdJFWQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[6]" type="UMLOperation" guid="eEq01zCgM0aZvokMO+SqkQAA">
+<XPD:ATTR name="Name" type="string">fastForward</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">快进播放(回放和时移播放时有效)</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[7]" type="UMLOperation" guid="MU6Fk6s7TUi43t3TzPmDYAAA">
+<XPD:ATTR name="Name" type="string">fastBackward</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">快退播放(回放和时移播放时有效)</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[8]" type="UMLOperation" guid="+JpQ6Kv+wUetg2ukud8xAAAA">
+<XPD:ATTR name="Name" type="string">setVideoWindow</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[9]" type="UMLOperation" guid="Urh1T97yF0qVB2qrq91V/AAA">
+<XPD:ATTR name="Name" type="string">getTime</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[10]" type="UMLOperation" guid="+OoQqX2+hEy7+IGpcoRO6wAA">
+<XPD:ATTR name="Name" type="string">stopPlaying</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[11]" type="UMLOperation" guid="5AWp11enzE2zKYbJKwZ4SgAA">
+<XPD:ATTR name="Name" type="string">startTimeshifting</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">开始时移播放</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[12]" type="UMLOperation" guid="Tt9RCFNm7USWaJVzeiQO4wAA">
+<XPD:ATTR name="Name" type="string">stopTimeshifting</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[13]" type="UMLOperation" guid="9gabibFFh0+pG1jLLre65AAA">
+<XPD:ATTR name="Name" type="string">startRecording</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[14]" type="UMLOperation" guid="3d/CswBBrEy2IUoFJUC4zAAA">
+<XPD:ATTR name="Name" type="string">switchAudioTrack</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">切æ¢å£°é“</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[15]" type="UMLOperation" guid="IGijEoer5kSmMkA+Fo3ArwAA">
+<XPD:ATTR name="Name" type="string">stopRecording</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[16]" type="UMLOperation" guid="Zb4VlxMHWkS/g4Mf01SYQAAA">
+<XPD:ATTR name="Name" type="string">startPlayback</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">开始录制节目回放</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[17]" type="UMLOperation" guid="YMsIpjPwskyU47Z7OFZGswAA">
+<XPD:ATTR name="Name" type="string">stopPlayback</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[18]" type="UMLOperation" guid="KYZZjRnW+E6fVbHlCQJHLgAA">
+<XPD:ATTR name="Name" type="string">startBooking</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">开始一个预约处ç†</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[19]" type="UMLOperation" guid="+mKhDWf/OkWW6S8s1fQrdAAA">
+<XPD:ATTR name="Name" type="string">getFrontendStatus</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">å–å¾—å‰ç«¯é”定状æ€</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[20]" type="UMLOperation" guid="4LuPht07CEyB+RsryYpq8wAA">
+<XPD:ATTR name="Name" type="string">getFrontendSignalStrength</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">å–å¾—å‰ç«¯ä¿¡å·å¼ºåº¦</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[21]" type="UMLOperation" guid="auftPPtm9ESAf8dNdwpO8wAA">
+<XPD:ATTR name="Name" type="string">getFrontendSNR</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">å–å¾—å‰ç«¯SNR值</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[22]" type="UMLOperation" guid="SkFMqj2tAkCHB6YzXb25VAAA">
+<XPD:ATTR name="Name" type="string">getFrontendBER</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">å–å¾—å‰ç«¯BER值</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[23]" type="UMLOperation" guid="1Kkg1e8Eq0yMsbrLqj30vAAA">
+<XPD:ATTR name="Name" type="string">restoreFactorySetting</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">æ¢å¤å‡ºåŽ‚设置</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[24]" type="UMLOperation" guid="0F6QZhvGnEi9TAKhwr5gqAAA">
+<XPD:ATTR name="Name" type="string">setCvbsAmpOut</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">模拟CVBS AMP OUT</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[25]" type="UMLOperation" guid="H0pDJxWBtUeDplA7FSzwhQAA">
+<XPD:ATTR name="Name" type="string">unblock</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">解é”并播放当å‰å·²åŠ é”的频é“,例如密ç éªŒè¯é€šè¿‡åŽï¼Œè°ƒç”¨è¯¥æ–¹æ³•è¿›è¡Œè§£é”播放</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[26]" type="UMLOperation" guid="UdoijIW/80yYKWWst/w35AAA">
+<XPD:ATTR name="Name" type="string">lock</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">é”频,用于信å·æµ‹è¯•ç­‰</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[27]" type="UMLOperation" guid="7rGFPyAzzUe2jTVqsr5TPwAA">
+<XPD:ATTR name="Name" type="string">getChannelInfo</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">一些相关信æ¯,一个节目的相关信æ¯</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[28]" type="UMLOperation" guid="Pa5rqUzWwEaNHn5Ws2ScXQAA">
+<XPD:ATTR name="Name" type="string">getChannelList</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">得到所有或者æŸä¸€ç±»çš„所以节目信æ¯è¡¨,...include EPG?</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[29]" type="UMLOperation" guid="UYN2BdmAh0OwWr6FMv/4+gAA">
+<XPD:ATTR name="Name" type="string">editChannelList</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">编辑节目信æ¯</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[30]" type="UMLOperation" guid="W+xUDLU830SOa/MaA8+q9gAA">
+<XPD:ATTR name="Name" type="string">getEvent</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[31]" type="UMLOperation" guid="wX/iXD/If0yyRjn7rC8n9wAA">
+<XPD:ATTR name="Name" type="string">EpgScanner</XPD:ATTR>
+<XPD:REF name="Owner">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:ATTR name="#Associations" type="integer">7</XPD:ATTR>
+<XPD:REF name="Associations[0]">kdbNMfgoG02cJO0UFJeeLwAA</XPD:REF>
+<XPD:REF name="Associations[1]">X5VvOi2uGkGYzMMS5nWm2AAA</XPD:REF>
+<XPD:REF name="Associations[2]">xf4XKZpxx0iF7C4H+oOABwAA</XPD:REF>
+<XPD:REF name="Associations[3]">yVknRLQq7U2nj3bRfizyAgAA</XPD:REF>
+<XPD:REF name="Associations[4]">6CsrL0wlVEKI657OoEev1gAA</XPD:REF>
+<XPD:REF name="Associations[5]">be+eScBkV0Cn4n2XjSojvgAA</XPD:REF>
+<XPD:REF name="Associations[6]">PP9nsgv4Vkmbk1zEfct4VAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLClass" guid="SX+aNGg0j0WtdR26+LZ7OgAA">
+<XPD:ATTR name="Name" type="string">CTvDatabase</XPD:ATTR>
<XPD:ATTR name="Documentation" type="string">使用AM_DB
æ“作:
SELECT --
INSERT --
DELETE --
-UPDATE --</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
-<XPD:REF name="Views[1]">k1LHywt4TEe6bHJwUzft/QAA</XPD:REF>
-<XPD:REF name="Views[2]">hc7Nc/x4iE+k/Ee76MBxMgAA</XPD:REF>
-<XPD:REF name="Views[3]">Pwafosd7ik6mD1kxdwntngAA</XPD:REF>
-<XPD:ATTR name="#Operations" type="integer">5</XPD:ATTR>
-<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="eujhNjd7X0OXZG7TspyZqAAA">
-<XPD:ATTR name="Name" type="string">select</XPD:ATTR>
-<XPD:REF name="Owner">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="NHwUxL9yUkyP+nuyACBPRAAA">
-<XPD:ATTR name="Name" type="string">insert</XPD:ATTR>
-<XPD:REF name="Owner">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="cmY3ij4BnES+HvUtnuKW0wAA">
-<XPD:ATTR name="Name" type="string">del</XPD:ATTR>
-<XPD:REF name="Owner">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="UNsa63AKqU6E5RGSTo+clgAA">
-<XPD:ATTR name="Name" type="string">update</XPD:ATTR>
-<XPD:REF name="Owner">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="YwBo0pVRWEevayMrI8sH+AAA">
-<XPD:ATTR name="Name" type="string">xxtable</XPD:ATTR>
-<XPD:REF name="Owner">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:ATTR name="#TypedParameters" type="integer">4</XPD:ATTR>
-<XPD:REF name="TypedParameters[0]">J5mDMInaY0G18Fx0eB6MsAAA</XPD:REF>
-<XPD:REF name="TypedParameters[1]">lSipwxb9AEu7dKbkvn8bCwAA</XPD:REF>
-<XPD:REF name="TypedParameters[2]">eQIZ7HOvJESQdc0nGhqnrwAA</XPD:REF>
-<XPD:REF name="TypedParameters[3]">lc6uST5/Mk6WfIuIfATlsgAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">10</XPD:ATTR>
-<XPD:REF name="Associations[0]">PFZlUbzZu02nTTLsYZBoDgAA</XPD:REF>
-<XPD:REF name="Associations[1]">q5Ko0bXKcE6uj05NJPSddwAA</XPD:REF>
-<XPD:REF name="Associations[2]">Yo1IoB0X3ka1C+a/6xk1/gAA</XPD:REF>
-<XPD:REF name="Associations[3]">RoKhf4Bw3kmRk2O2D4GlxQAA</XPD:REF>
-<XPD:REF name="Associations[4]">vyoQZGl3UECBMhf7+IDQUwAA</XPD:REF>
-<XPD:REF name="Associations[5]">iy8GVdK11EmKnmJ6LivVVQAA</XPD:REF>
-<XPD:REF name="Associations[6]">DkcX/fIec029p5Da5gYToAAA</XPD:REF>
-<XPD:REF name="Associations[7]">gc0GlJ6ewUOpiyya+XPqjQAA</XPD:REF>
-<XPD:REF name="Associations[8]">Fd/cvRV12USE+Vu6oJsMOgAA</XPD:REF>
-<XPD:REF name="Associations[9]">AM/xtV731kSTTZbv0mmefgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[2]" type="UMLClass" guid="5BXVsgqK1kanN/l0hNx/IQAA">
-<XPD:ATTR name="Name" type="string">CTvSubtitle</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Y9zMsiXlQEuyiSGOmpswRwAA</XPD:REF>
-<XPD:REF name="Views[1]">3kCRXwUbYEOaB2YVqs3CMQAA</XPD:REF>
-<XPD:REF name="Views[2]">2pFBVEb3NUu3IhdJeNfBWAAA</XPD:REF>
-<XPD:REF name="Views[3]">xx5BbdZ+6Eehp04cM6fnfwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[3]" type="UMLClass" guid="9naBHAA+hkmkNtZzyXP1/wAA">
-<XPD:ATTR name="Name" type="string">CTvProgram</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">Program对应ATV中的一个频é“,DTV中的一个service</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">BVNqLhbhP06y98++NgmxAwAA</XPD:REF>
-<XPD:REF name="Views[1]">muUyRePjd0qlQqM/tvfrmQAA</XPD:REF>
-<XPD:REF name="Views[2]">3aWGjpGXTkqRn+NbEzYu5QAA</XPD:REF>
-<XPD:REF name="Views[3]">ylciM87U9keZe9hSnVequAAA</XPD:REF>
-<XPD:ATTR name="#Operations" type="integer">29</XPD:ATTR>
-<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="YYAlKwYwAkum0/0/V8VSfAAA">
-<XPD:ATTR name="Name" type="string">TVProgram</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="J5mDMInaY0G18Fx0eB6MsAAA">
-<XPD:ATTR name="Name" type="string">db</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvDatabase</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">YYAlKwYwAkum0/0/V8VSfAAA</XPD:REF>
-<XPD:REF name="Type_">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="MO9Z8u42Ck+RSnezotFx6gAA">
-<XPD:ATTR name="Name" type="string">TVProgram</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">destroy</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="I7Tahi7CMEWsF5E1eyHYIwAA">
-<XPD:ATTR name="Name" type="string">TVProgram</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">创建并å‘æ•°æ®åº“添加一个Program</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="uoElE3D4I0KE+CLUBhlBmAAA">
-<XPD:ATTR name="Name" type="string">channelID</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">I7Tahi7CMEWsF5E1eyHYIwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="R7F9l39IqkWdzSgaYK9tQAAA">
-<XPD:ATTR name="Name" type="string">type</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">I7Tahi7CMEWsF5E1eyHYIwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="c5Mq32YFGk6fa8RKqgPtRgAA">
-<XPD:ATTR name="Name" type="string">TVProgram</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">adding a Playback program</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="JNEvi/3wp0OBIRiyz8YftgAA">
-<XPD:ATTR name="Name" type="string">selectByID</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="AkhDSecO8E2/EoFulZe5iAAA">
-<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">JNEvi/3wp0OBIRiyz8YftgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="lmgbU9AACUCXuVDuiBNNpwAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">JNEvi/3wp0OBIRiyz8YftgAA</XPD:REF>
-<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="c4hDH4Wl4EC1nupSKD7ECQAA">
-<XPD:ATTR name="Name" type="string">selectByNumber</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">3</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="+naqez7eJ0Gt7lrOPAtRhwAA">
-<XPD:ATTR name="Name" type="string">num</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">代指一个节目å·ç±»</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">c4hDH4Wl4EC1nupSKD7ECQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="TGg03aSXFk6f/K55VhZZ4AAA">
-<XPD:ATTR name="Name" type="string">type</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">c4hDH4Wl4EC1nupSKD7ECQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Parameters[2]" type="UMLParameter" guid="JwSDsmXVS02yCU8rmbNT+gAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">c4hDH4Wl4EC1nupSKD7ECQAA</XPD:REF>
-<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[6]" type="UMLOperation" guid="yeJSdWpKskaFq49HK5+/4wAA">
-<XPD:ATTR name="Name" type="string">selectUp</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">æ ¹æ®èŠ‚ç›®å·é€‰æ‹©ä¸‹ä¸€èŠ‚ç›®</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="z7wJx+cu9U6OwVLUgjkczgAA">
-<XPD:ATTR name="Name" type="string">num</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">yeJSdWpKskaFq49HK5+/4wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="Qv4GcTZ/w0GgrJcc/XNMQAAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">yeJSdWpKskaFq49HK5+/4wAA</XPD:REF>
-<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[7]" type="UMLOperation" guid="LTDhnEPkWE6psd+d5WLFWwAA">
-<XPD:ATTR name="Name" type="string">selectDown</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">æ ¹æ®èŠ‚ç›®å·é€‰æ‹©ä¸Šä¸€èŠ‚ç›®</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="JwS8/J1pU0ixPx2Gtv9PswAA">
-<XPD:ATTR name="Name" type="string">num</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">LTDhnEPkWE6psd+d5WLFWwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="p3gaswKAtEmlrHF0SJQaJQAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">LTDhnEPkWE6psd+d5WLFWwAA</XPD:REF>
-<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[8]" type="UMLOperation" guid="25tmOHxHGkmZu/nQh+mDnwAA">
-<XPD:ATTR name="Name" type="string">selectFirstValid</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">选择一个有效的节目,先查找频é“å·æœ€å°çš„电视节目,如果没有电视,å†æŸ¥æ‰¾é¢‘é“å·æœ€å°çš„广播节目</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="LRGUd6QwL02qGj2EBYZ86QAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">25tmOHxHGkmZu/nQh+mDnwAA</XPD:REF>
-<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[9]" type="UMLOperation" guid="9VZ9jSrONEOU5G5ov0HotwAA">
-<XPD:ATTR name="Name" type="string">selectAll</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">列出全部TVProgram</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="75rhon2Jo0CUX2eeQJLflgAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">vector&lt;CTvProgram&gt;</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">9VZ9jSrONEOU5G5ov0HotwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[10]" type="UMLOperation" guid="bFQUubUtYkClhu6k44lX2wAA">
-<XPD:ATTR name="Name" type="string">selectByChannel</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="ghACz+/RMk6PwXHevQHrKgAA">
-<XPD:ATTR name="Name" type="string">channelID</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">bFQUubUtYkClhu6k44lX2wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="3MSYvjBf4k+QHn22Q8eg7AAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">vector&lt;CTvProgram&gt;</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">bFQUubUtYkClhu6k44lX2wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[11]" type="UMLOperation" guid="+1TV2QUUtUKhshvxqFDzNAAA">
-<XPD:ATTR name="Name" type="string">selectByName</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">æ ¹æ®èŠ‚ç›®å称中的关键字查找指定TVProgram</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="6l3x+N+XpkKTQss5baAQuwAA">
-<XPD:ATTR name="Name" type="string">name</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">+1TV2QUUtUKhshvxqFDzNAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="eG1miZaCQk6agFaTX6TwVAAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">vector&lt;CTvProgram&gt;</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">+1TV2QUUtUKhshvxqFDzNAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[12]" type="UMLOperation" guid="ZYi+bCDmv0C3n5svMsg6OAAA">
-<XPD:ATTR name="Name" type="string">tvProgramDelByChannelID</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="jqLk5a2Xh0mhzw9HIwhkTwAA">
-<XPD:ATTR name="Name" type="string">channelID</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">ZYi+bCDmv0C3n5svMsg6OAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[13]" type="UMLOperation" guid="ACVxjvFDC0yCpTUl109bFwAA">
-<XPD:ATTR name="Name" type="string">getID</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[14]" type="UMLOperation" guid="HdyeyQ/bRESko2FrqkZbcgAA">
-<XPD:ATTR name="Name" type="string">getName</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="p/P9yxCMgk+7553zQk/digAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">HdyeyQ/bRESko2FrqkZbcgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[15]" type="UMLOperation" guid="JwHR21A3wE+c3ID5+O7HqAAA">
-<XPD:ATTR name="Name" type="string">getCurrentSubtitle</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[16]" type="UMLOperation" guid="dwF0iyGWbU+EGkjX1GDTpAAA">
-<XPD:ATTR name="Name" type="string">getCurrentTeletext</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[17]" type="UMLOperation" guid="k/2NPLI6skm2+zWBikSQIgAA">
-<XPD:ATTR name="Name" type="string">getChannel</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="A7QPUTtNz0O45ex/ZBEL3wAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvChannel</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">k/2NPLI6skm2+zWBikSQIgAA</XPD:REF>
-<XPD:REF name="Type_">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[18]" type="UMLOperation" guid="e28O5Ud6AkiFQ2Whw+g5PAAA">
-<XPD:ATTR name="Name" type="string">getPresentEvent</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">å–得节目正在播放事件</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="JMu9kCbPeUOqYnb8+XprhgAA">
-<XPD:ATTR name="Name" type="string">now</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">long</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">e28O5Ud6AkiFQ2Whw+g5PAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="+v9VB9kIH02VZ9TgNHJJfQAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvEvent</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">e28O5Ud6AkiFQ2Whw+g5PAAA</XPD:REF>
-<XPD:REF name="Type_">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[19]" type="UMLOperation" guid="/N5EpSRqt0miI+sRfUySzQAA">
-<XPD:ATTR name="Name" type="string">getFollowingEvent</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[20]" type="UMLOperation" guid="dF2yMKnmeUmHMTQ3n59OfgAA">
-<XPD:ATTR name="Name" type="string">getScheduleEvents</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">å–得节目在一个时间段内的事件</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[21]" type="UMLOperation" guid="unjofe5xCEG64AlRNpC6lAAA">
-<XPD:ATTR name="Name" type="string">selectByFavorite</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">列出喜爱节目组TVProgram</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[22]" type="UMLOperation" guid="Yf/ivoCbnU2TvnC8p98iwAAA">
-<XPD:ATTR name="Name" type="string">addProgramToGroup</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">添加节目到指定节目分组</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[23]" type="UMLOperation" guid="hrNkpY6nlU+EwIWtvCj7TwAA">
-<XPD:ATTR name="Name" type="string">deleteFromGroup</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">从指定节目分组删除当å‰èŠ‚ç›®</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[24]" type="UMLOperation" guid="t2BjZT6On0+sFvxzq4g8ggAA">
-<XPD:ATTR name="Name" type="string">checkIsGroup</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">检测当å‰èŠ‚目是å¦å±žäºŽåˆ†ç»„</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[25]" type="UMLOperation" guid="P9TAD4y/o0KU9vLyJ9OV4AAA">
-<XPD:ATTR name="Name" type="string">modifyChanOrder</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">修改节目排åº</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[26]" type="UMLOperation" guid="ajleTvMjZ0eZ0eAHzHaalwAA">
-<XPD:ATTR name="Name" type="string">setProgramName</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">修改节目å称</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[27]" type="UMLOperation" guid="elSJfx5P9Ui4sQvrJy9lsAAA">
-<XPD:ATTR name="Name" type="string">setProgramNumber</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">修改节目number</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[28]" type="UMLOperation" guid="SmcQMrAyCE+xl1JXzNgH/gAA">
-<XPD:ATTR name="Name" type="string">setProgramVolume</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:ATTR name="#TypedFeatures" type="integer">1</XPD:ATTR>
-<XPD:REF name="TypedFeatures[0]">xT0LK2eQ9EGzJfCHW9IJ9wAA</XPD:REF>
-<XPD:ATTR name="#TypedParameters" type="integer">6</XPD:ATTR>
-<XPD:REF name="TypedParameters[0]">lmgbU9AACUCXuVDuiBNNpwAA</XPD:REF>
-<XPD:REF name="TypedParameters[1]">JwSDsmXVS02yCU8rmbNT+gAA</XPD:REF>
-<XPD:REF name="TypedParameters[2]">Qv4GcTZ/w0GgrJcc/XNMQAAA</XPD:REF>
-<XPD:REF name="TypedParameters[3]">p3gaswKAtEmlrHF0SJQaJQAA</XPD:REF>
-<XPD:REF name="TypedParameters[4]">LRGUd6QwL02qGj2EBYZ86QAA</XPD:REF>
-<XPD:REF name="TypedParameters[5]">w4A7LCg5RUitVRoJ8EF5DwAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">5</XPD:ATTR>
-<XPD:REF name="Associations[0]">IEnUwW74QkSkdRZGqdKvaAAA</XPD:REF>
-<XPD:REF name="Associations[1]">2JZlFpDZPkGgaoWrrPAGXAAA</XPD:REF>
-<XPD:REF name="Associations[2]">qOlPMeLYpUC4lTEl3Hsc8QAA</XPD:REF>
-<XPD:REF name="Associations[3]">72fG4kbiM0eyczFPq2MtVAAA</XPD:REF>
-<XPD:REF name="Associations[4]">IMPiiZPlxkaJkH8N2NGOggAA</XPD:REF>
-<XPD:ATTR name="#Attributes" type="integer">15</XPD:ATTR>
-<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="uXjsbosYkke28aZWg65AOwAA">
-<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="+NxzFOFWPEqKmFfNqTdx8QAA">
-<XPD:ATTR name="Name" type="string">dvbServiceID</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="JIJ3w5q9AEq5pH8jxW/gOAAA">
-<XPD:ATTR name="Name" type="string">type</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[3]" type="UMLAttribute" guid="JOINtcM+u0qVqfxy1LsTdwAA">
-<XPD:ATTR name="Name" type="string">name</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">char</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[4]" type="UMLAttribute" guid="U6dOwxN6VkKvkKCowD7yxQAA">
-<XPD:ATTR name="Name" type="string">channelID</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[5]" type="UMLAttribute" guid="Zh90wWMTSUm6ew2qIiAjFAAA">
-<XPD:ATTR name="Name" type="string">channel</XPD:ATTR>
-<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvChannel</XPD:ATTR>
-<XPD:REF name="Type_">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[6]" type="UMLAttribute" guid="on0gPuAz4U686Sy93eQ2cgAA">
-<XPD:ATTR name="Name" type="string">skip</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[7]" type="UMLAttribute" guid="bIOnmWt5I0yApBHA5XFN+gAA">
-<XPD:ATTR name="Name" type="string">favorite</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[8]" type="UMLAttribute" guid="x9TcSSHftEmulDVv3sJK1wAA">
-<XPD:ATTR name="Name" type="string">volume</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[9]" type="UMLAttribute" guid="QeKA3IlVykyPEjmBPYFTpQAA">
-<XPD:ATTR name="Name" type="string">sourceID</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[10]" type="UMLAttribute" guid="kb0pZw6ZkE2OolX+iMKt8gAA">
-<XPD:ATTR name="Name" type="string">pmtPID</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[11]" type="UMLAttribute" guid="RZ6B0lWtR0m+vSVJBlDoigAA">
-<XPD:ATTR name="Name" type="string">video</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">videoä¿¡æ¯,类型ä¸å®š</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[12]" type="UMLAttribute" guid="BihGmjGNQ0mzaFwgnsKAWQAA">
-<XPD:ATTR name="Name" type="string">audioes</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">audioä¿¡æ¯,类型ä¸å®š</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[13]" type="UMLAttribute" guid="/qxd9kIZyU+tZ4SClIWWmQAA">
-<XPD:ATTR name="Name" type="string">subtitles</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">subtitleä¿¡æ¯ç±»åž‹ä¸å®š</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[14]" type="UMLAttribute" guid="zvplUrX8lUGsjB9WCZ2PcAAA">
-<XPD:ATTR name="Name" type="string">teletexts</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">teletextä¿¡æ¯,类型ä¸å®š</XPD:ATTR>
-<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[4]" type="UMLClass" guid="JCgv4vk16U6BbVcoQFmlVwAA">
-<XPD:ATTR name="Name" type="string">CTvChannel</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">对应模拟电视中的一个频点,数字电视中的一个频点调制的TSæµ</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">iEgH+6H6kkG++neKuToTSgAA</XPD:REF>
-<XPD:REF name="Views[1]">Yo0KShxzIk2FSTydUse5OQAA</XPD:REF>
-<XPD:REF name="Views[2]">rmKV7ZtcVEudbDw02LTB/wAA</XPD:REF>
-<XPD:REF name="Views[3]">+jiKzSIz/UuhSFnnJkuIEgAA</XPD:REF>
-<XPD:ATTR name="#Operations" type="integer">23</XPD:ATTR>
-<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="+k2keRjKq0Kcp2LH8FqiVwAA">
-<XPD:ATTR name="Name" type="string">TvChannel</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="bLasrnFvT0mJOlVtuIWeVwAA">
-<XPD:ATTR name="Name" type="string">TvChannel</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">destroy</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="Uo205gWA4UyYN/g3FxOFmQAA">
-<XPD:ATTR name="Name" type="string">TvChannel</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">æ ¹æ®TVChannelParams,å‘æ•°æ®åº“添加一个Channel</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="So08mUV3uUGzB96ampUmnQAA">
-<XPD:ATTR name="Name" type="string">Params</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">TvChannelParams</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">Uo205gWA4UyYN/g3FxOFmQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="RN5b/cypXUivfIl6CeiRrgAA">
-<XPD:ATTR name="Name" type="string">tvChannelList</XPD:ATTR>
+UPDATE --</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">a8FG7H9SzUelkRx52q1d5AAA</XPD:REF>
+<XPD:REF name="Views[1]">k1LHywt4TEe6bHJwUzft/QAA</XPD:REF>
+<XPD:REF name="Views[2]">hc7Nc/x4iE+k/Ee76MBxMgAA</XPD:REF>
+<XPD:REF name="Views[3]">Pwafosd7ik6mD1kxdwntngAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">5</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="eujhNjd7X0OXZG7TspyZqAAA">
+<XPD:ATTR name="Name" type="string">select</XPD:ATTR>
+<XPD:REF name="Owner">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="NHwUxL9yUkyP+nuyACBPRAAA">
+<XPD:ATTR name="Name" type="string">insert</XPD:ATTR>
+<XPD:REF name="Owner">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="cmY3ij4BnES+HvUtnuKW0wAA">
+<XPD:ATTR name="Name" type="string">del</XPD:ATTR>
+<XPD:REF name="Owner">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="UNsa63AKqU6E5RGSTo+clgAA">
+<XPD:ATTR name="Name" type="string">update</XPD:ATTR>
+<XPD:REF name="Owner">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="YwBo0pVRWEevayMrI8sH+AAA">
+<XPD:ATTR name="Name" type="string">xxtable</XPD:ATTR>
+<XPD:REF name="Owner">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:ATTR name="#TypedParameters" type="integer">4</XPD:ATTR>
+<XPD:REF name="TypedParameters[0]">J5mDMInaY0G18Fx0eB6MsAAA</XPD:REF>
+<XPD:REF name="TypedParameters[1]">lSipwxb9AEu7dKbkvn8bCwAA</XPD:REF>
+<XPD:REF name="TypedParameters[2]">eQIZ7HOvJESQdc0nGhqnrwAA</XPD:REF>
+<XPD:REF name="TypedParameters[3]">lc6uST5/Mk6WfIuIfATlsgAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">10</XPD:ATTR>
+<XPD:REF name="Associations[0]">PFZlUbzZu02nTTLsYZBoDgAA</XPD:REF>
+<XPD:REF name="Associations[1]">q5Ko0bXKcE6uj05NJPSddwAA</XPD:REF>
+<XPD:REF name="Associations[2]">Yo1IoB0X3ka1C+a/6xk1/gAA</XPD:REF>
+<XPD:REF name="Associations[3]">RoKhf4Bw3kmRk2O2D4GlxQAA</XPD:REF>
+<XPD:REF name="Associations[4]">vyoQZGl3UECBMhf7+IDQUwAA</XPD:REF>
+<XPD:REF name="Associations[5]">iy8GVdK11EmKnmJ6LivVVQAA</XPD:REF>
+<XPD:REF name="Associations[6]">DkcX/fIec029p5Da5gYToAAA</XPD:REF>
+<XPD:REF name="Associations[7]">gc0GlJ6ewUOpiyya+XPqjQAA</XPD:REF>
+<XPD:REF name="Associations[8]">Fd/cvRV12USE+Vu6oJsMOgAA</XPD:REF>
+<XPD:REF name="Associations[9]">AM/xtV731kSTTZbv0mmefgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[2]" type="UMLClass" guid="5BXVsgqK1kanN/l0hNx/IQAA">
+<XPD:ATTR name="Name" type="string">CTvSubtitle</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Y9zMsiXlQEuyiSGOmpswRwAA</XPD:REF>
+<XPD:REF name="Views[1]">3kCRXwUbYEOaB2YVqs3CMQAA</XPD:REF>
+<XPD:REF name="Views[2]">2pFBVEb3NUu3IhdJeNfBWAAA</XPD:REF>
+<XPD:REF name="Views[3]">xx5BbdZ+6Eehp04cM6fnfwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[3]" type="UMLClass" guid="9naBHAA+hkmkNtZzyXP1/wAA">
+<XPD:ATTR name="Name" type="string">CTvProgram</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">Program对应ATV中的一个频é“,DTV中的一个service</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">BVNqLhbhP06y98++NgmxAwAA</XPD:REF>
+<XPD:REF name="Views[1]">muUyRePjd0qlQqM/tvfrmQAA</XPD:REF>
+<XPD:REF name="Views[2]">3aWGjpGXTkqRn+NbEzYu5QAA</XPD:REF>
+<XPD:REF name="Views[3]">ylciM87U9keZe9hSnVequAAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">29</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="YYAlKwYwAkum0/0/V8VSfAAA">
+<XPD:ATTR name="Name" type="string">TVProgram</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="J5mDMInaY0G18Fx0eB6MsAAA">
+<XPD:ATTR name="Name" type="string">db</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvDatabase</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">YYAlKwYwAkum0/0/V8VSfAAA</XPD:REF>
+<XPD:REF name="Type_">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="MO9Z8u42Ck+RSnezotFx6gAA">
+<XPD:ATTR name="Name" type="string">TVProgram</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">destroy</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="I7Tahi7CMEWsF5E1eyHYIwAA">
+<XPD:ATTR name="Name" type="string">TVProgram</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">创建并å‘æ•°æ®åº“添加一个Program</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="uoElE3D4I0KE+CLUBhlBmAAA">
+<XPD:ATTR name="Name" type="string">channelID</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">I7Tahi7CMEWsF5E1eyHYIwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="R7F9l39IqkWdzSgaYK9tQAAA">
+<XPD:ATTR name="Name" type="string">type</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">I7Tahi7CMEWsF5E1eyHYIwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="c5Mq32YFGk6fa8RKqgPtRgAA">
+<XPD:ATTR name="Name" type="string">TVProgram</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">adding a Playback program</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="JNEvi/3wp0OBIRiyz8YftgAA">
+<XPD:ATTR name="Name" type="string">selectByID</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="AkhDSecO8E2/EoFulZe5iAAA">
+<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">JNEvi/3wp0OBIRiyz8YftgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="lmgbU9AACUCXuVDuiBNNpwAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">JNEvi/3wp0OBIRiyz8YftgAA</XPD:REF>
+<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="c4hDH4Wl4EC1nupSKD7ECQAA">
+<XPD:ATTR name="Name" type="string">selectByNumber</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">3</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="+naqez7eJ0Gt7lrOPAtRhwAA">
+<XPD:ATTR name="Name" type="string">num</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">代指一个节目å·ç±»</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">c4hDH4Wl4EC1nupSKD7ECQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="TGg03aSXFk6f/K55VhZZ4AAA">
+<XPD:ATTR name="Name" type="string">type</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">c4hDH4Wl4EC1nupSKD7ECQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[2]" type="UMLParameter" guid="JwSDsmXVS02yCU8rmbNT+gAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">c4hDH4Wl4EC1nupSKD7ECQAA</XPD:REF>
+<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[6]" type="UMLOperation" guid="yeJSdWpKskaFq49HK5+/4wAA">
+<XPD:ATTR name="Name" type="string">selectUp</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">æ ¹æ®èŠ‚ç›®å·é€‰æ‹©ä¸‹ä¸€èŠ‚ç›®</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="z7wJx+cu9U6OwVLUgjkczgAA">
+<XPD:ATTR name="Name" type="string">num</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">yeJSdWpKskaFq49HK5+/4wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="Qv4GcTZ/w0GgrJcc/XNMQAAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">yeJSdWpKskaFq49HK5+/4wAA</XPD:REF>
+<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[7]" type="UMLOperation" guid="LTDhnEPkWE6psd+d5WLFWwAA">
+<XPD:ATTR name="Name" type="string">selectDown</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">æ ¹æ®èŠ‚ç›®å·é€‰æ‹©ä¸Šä¸€èŠ‚ç›®</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="JwS8/J1pU0ixPx2Gtv9PswAA">
+<XPD:ATTR name="Name" type="string">num</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">LTDhnEPkWE6psd+d5WLFWwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="p3gaswKAtEmlrHF0SJQaJQAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">LTDhnEPkWE6psd+d5WLFWwAA</XPD:REF>
+<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[8]" type="UMLOperation" guid="25tmOHxHGkmZu/nQh+mDnwAA">
+<XPD:ATTR name="Name" type="string">selectFirstValid</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">选择一个有效的节目,先查找频é“å·æœ€å°çš„电视节目,如果没有电视,å†æŸ¥æ‰¾é¢‘é“å·æœ€å°çš„广播节目</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="LRGUd6QwL02qGj2EBYZ86QAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">25tmOHxHGkmZu/nQh+mDnwAA</XPD:REF>
+<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[9]" type="UMLOperation" guid="9VZ9jSrONEOU5G5ov0HotwAA">
+<XPD:ATTR name="Name" type="string">selectAll</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">列出全部TVProgram</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="75rhon2Jo0CUX2eeQJLflgAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">vector&lt;CTvProgram&gt;</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">9VZ9jSrONEOU5G5ov0HotwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[10]" type="UMLOperation" guid="bFQUubUtYkClhu6k44lX2wAA">
+<XPD:ATTR name="Name" type="string">selectByChannel</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="ghACz+/RMk6PwXHevQHrKgAA">
+<XPD:ATTR name="Name" type="string">channelID</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">bFQUubUtYkClhu6k44lX2wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="3MSYvjBf4k+QHn22Q8eg7AAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">vector&lt;CTvProgram&gt;</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">bFQUubUtYkClhu6k44lX2wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[11]" type="UMLOperation" guid="+1TV2QUUtUKhshvxqFDzNAAA">
+<XPD:ATTR name="Name" type="string">selectByName</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">æ ¹æ®èŠ‚ç›®å称中的关键字查找指定TVProgram</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="6l3x+N+XpkKTQss5baAQuwAA">
+<XPD:ATTR name="Name" type="string">name</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">+1TV2QUUtUKhshvxqFDzNAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="eG1miZaCQk6agFaTX6TwVAAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">vector&lt;CTvProgram&gt;</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">+1TV2QUUtUKhshvxqFDzNAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[12]" type="UMLOperation" guid="ZYi+bCDmv0C3n5svMsg6OAAA">
+<XPD:ATTR name="Name" type="string">tvProgramDelByChannelID</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="jqLk5a2Xh0mhzw9HIwhkTwAA">
+<XPD:ATTR name="Name" type="string">channelID</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">ZYi+bCDmv0C3n5svMsg6OAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[13]" type="UMLOperation" guid="ACVxjvFDC0yCpTUl109bFwAA">
+<XPD:ATTR name="Name" type="string">getID</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[14]" type="UMLOperation" guid="HdyeyQ/bRESko2FrqkZbcgAA">
+<XPD:ATTR name="Name" type="string">getName</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="p/P9yxCMgk+7553zQk/digAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">HdyeyQ/bRESko2FrqkZbcgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[15]" type="UMLOperation" guid="JwHR21A3wE+c3ID5+O7HqAAA">
+<XPD:ATTR name="Name" type="string">getCurrentSubtitle</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[16]" type="UMLOperation" guid="dwF0iyGWbU+EGkjX1GDTpAAA">
+<XPD:ATTR name="Name" type="string">getCurrentTeletext</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[17]" type="UMLOperation" guid="k/2NPLI6skm2+zWBikSQIgAA">
+<XPD:ATTR name="Name" type="string">getChannel</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="A7QPUTtNz0O45ex/ZBEL3wAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvChannel</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">k/2NPLI6skm2+zWBikSQIgAA</XPD:REF>
+<XPD:REF name="Type_">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[18]" type="UMLOperation" guid="e28O5Ud6AkiFQ2Whw+g5PAAA">
+<XPD:ATTR name="Name" type="string">getPresentEvent</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">å–得节目正在播放事件</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="JMu9kCbPeUOqYnb8+XprhgAA">
+<XPD:ATTR name="Name" type="string">now</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">long</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">e28O5Ud6AkiFQ2Whw+g5PAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="+v9VB9kIH02VZ9TgNHJJfQAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvEvent</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">e28O5Ud6AkiFQ2Whw+g5PAAA</XPD:REF>
+<XPD:REF name="Type_">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[19]" type="UMLOperation" guid="/N5EpSRqt0miI+sRfUySzQAA">
+<XPD:ATTR name="Name" type="string">getFollowingEvent</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[20]" type="UMLOperation" guid="dF2yMKnmeUmHMTQ3n59OfgAA">
+<XPD:ATTR name="Name" type="string">getScheduleEvents</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">å–得节目在一个时间段内的事件</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[21]" type="UMLOperation" guid="unjofe5xCEG64AlRNpC6lAAA">
+<XPD:ATTR name="Name" type="string">selectByFavorite</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">列出喜爱节目组TVProgram</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[22]" type="UMLOperation" guid="Yf/ivoCbnU2TvnC8p98iwAAA">
+<XPD:ATTR name="Name" type="string">addProgramToGroup</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">添加节目到指定节目分组</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[23]" type="UMLOperation" guid="hrNkpY6nlU+EwIWtvCj7TwAA">
+<XPD:ATTR name="Name" type="string">deleteFromGroup</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">从指定节目分组删除当å‰èŠ‚ç›®</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[24]" type="UMLOperation" guid="t2BjZT6On0+sFvxzq4g8ggAA">
+<XPD:ATTR name="Name" type="string">checkIsGroup</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">检测当å‰èŠ‚目是å¦å±žäºŽåˆ†ç»„</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[25]" type="UMLOperation" guid="P9TAD4y/o0KU9vLyJ9OV4AAA">
+<XPD:ATTR name="Name" type="string">modifyChanOrder</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">修改节目排åº</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[26]" type="UMLOperation" guid="ajleTvMjZ0eZ0eAHzHaalwAA">
+<XPD:ATTR name="Name" type="string">setProgramName</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">修改节目å称</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[27]" type="UMLOperation" guid="elSJfx5P9Ui4sQvrJy9lsAAA">
+<XPD:ATTR name="Name" type="string">setProgramNumber</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">修改节目number</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[28]" type="UMLOperation" guid="SmcQMrAyCE+xl1JXzNgH/gAA">
+<XPD:ATTR name="Name" type="string">setProgramVolume</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:ATTR name="#TypedFeatures" type="integer">1</XPD:ATTR>
+<XPD:REF name="TypedFeatures[0]">xT0LK2eQ9EGzJfCHW9IJ9wAA</XPD:REF>
+<XPD:ATTR name="#TypedParameters" type="integer">6</XPD:ATTR>
+<XPD:REF name="TypedParameters[0]">lmgbU9AACUCXuVDuiBNNpwAA</XPD:REF>
+<XPD:REF name="TypedParameters[1]">JwSDsmXVS02yCU8rmbNT+gAA</XPD:REF>
+<XPD:REF name="TypedParameters[2]">Qv4GcTZ/w0GgrJcc/XNMQAAA</XPD:REF>
+<XPD:REF name="TypedParameters[3]">p3gaswKAtEmlrHF0SJQaJQAA</XPD:REF>
+<XPD:REF name="TypedParameters[4]">LRGUd6QwL02qGj2EBYZ86QAA</XPD:REF>
+<XPD:REF name="TypedParameters[5]">w4A7LCg5RUitVRoJ8EF5DwAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">5</XPD:ATTR>
+<XPD:REF name="Associations[0]">IEnUwW74QkSkdRZGqdKvaAAA</XPD:REF>
+<XPD:REF name="Associations[1]">2JZlFpDZPkGgaoWrrPAGXAAA</XPD:REF>
+<XPD:REF name="Associations[2]">qOlPMeLYpUC4lTEl3Hsc8QAA</XPD:REF>
+<XPD:REF name="Associations[3]">72fG4kbiM0eyczFPq2MtVAAA</XPD:REF>
+<XPD:REF name="Associations[4]">IMPiiZPlxkaJkH8N2NGOggAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">15</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="uXjsbosYkke28aZWg65AOwAA">
+<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="+NxzFOFWPEqKmFfNqTdx8QAA">
+<XPD:ATTR name="Name" type="string">dvbServiceID</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="JIJ3w5q9AEq5pH8jxW/gOAAA">
+<XPD:ATTR name="Name" type="string">type</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[3]" type="UMLAttribute" guid="JOINtcM+u0qVqfxy1LsTdwAA">
+<XPD:ATTR name="Name" type="string">name</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">char</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[4]" type="UMLAttribute" guid="U6dOwxN6VkKvkKCowD7yxQAA">
+<XPD:ATTR name="Name" type="string">channelID</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[5]" type="UMLAttribute" guid="Zh90wWMTSUm6ew2qIiAjFAAA">
+<XPD:ATTR name="Name" type="string">channel</XPD:ATTR>
+<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvChannel</XPD:ATTR>
+<XPD:REF name="Type_">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[6]" type="UMLAttribute" guid="on0gPuAz4U686Sy93eQ2cgAA">
+<XPD:ATTR name="Name" type="string">skip</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[7]" type="UMLAttribute" guid="bIOnmWt5I0yApBHA5XFN+gAA">
+<XPD:ATTR name="Name" type="string">favorite</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[8]" type="UMLAttribute" guid="x9TcSSHftEmulDVv3sJK1wAA">
+<XPD:ATTR name="Name" type="string">volume</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[9]" type="UMLAttribute" guid="QeKA3IlVykyPEjmBPYFTpQAA">
+<XPD:ATTR name="Name" type="string">sourceID</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[10]" type="UMLAttribute" guid="kb0pZw6ZkE2OolX+iMKt8gAA">
+<XPD:ATTR name="Name" type="string">pmtPID</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[11]" type="UMLAttribute" guid="RZ6B0lWtR0m+vSVJBlDoigAA">
+<XPD:ATTR name="Name" type="string">video</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">videoä¿¡æ¯,类型ä¸å®š</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[12]" type="UMLAttribute" guid="BihGmjGNQ0mzaFwgnsKAWQAA">
+<XPD:ATTR name="Name" type="string">audioes</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">audioä¿¡æ¯,类型ä¸å®š</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[13]" type="UMLAttribute" guid="/qxd9kIZyU+tZ4SClIWWmQAA">
+<XPD:ATTR name="Name" type="string">subtitles</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">subtitleä¿¡æ¯ç±»åž‹ä¸å®š</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[14]" type="UMLAttribute" guid="zvplUrX8lUGsjB9WCZ2PcAAA">
+<XPD:ATTR name="Name" type="string">teletexts</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">teletextä¿¡æ¯,类型ä¸å®š</XPD:ATTR>
+<XPD:REF name="Owner">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[4]" type="UMLClass" guid="JCgv4vk16U6BbVcoQFmlVwAA">
+<XPD:ATTR name="Name" type="string">CTvChannel</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">对应模拟电视中的一个频点,数字电视中的一个频点调制的TSæµ</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">iEgH+6H6kkG++neKuToTSgAA</XPD:REF>
+<XPD:REF name="Views[1]">Yo0KShxzIk2FSTydUse5OQAA</XPD:REF>
+<XPD:REF name="Views[2]">rmKV7ZtcVEudbDw02LTB/wAA</XPD:REF>
+<XPD:REF name="Views[3]">+jiKzSIz/UuhSFnnJkuIEgAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">23</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="+k2keRjKq0Kcp2LH8FqiVwAA">
+<XPD:ATTR name="Name" type="string">TvChannel</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="bLasrnFvT0mJOlVtuIWeVwAA">
+<XPD:ATTR name="Name" type="string">TvChannel</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">destroy</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="Uo205gWA4UyYN/g3FxOFmQAA">
+<XPD:ATTR name="Name" type="string">TvChannel</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">æ ¹æ®TVChannelParams,å‘æ•°æ®åº“添加一个Channel</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="So08mUV3uUGzB96ampUmnQAA">
+<XPD:ATTR name="Name" type="string">Params</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">TvChannelParams</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">Uo205gWA4UyYN/g3FxOFmQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="RN5b/cypXUivfIl6CeiRrgAA">
+<XPD:ATTR name="Name" type="string">tvChannelList</XPD:ATTR>
<XPD:ATTR name="Documentation" type="string">*创建当å‰å«æ˜Ÿæ‰€æœ‰é€šé“
*@param sat_id å«æ˜Ÿid
-*@return 返回创建的通é“</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="ATajQMblVE2J+9tPqnDGIQAA">
-<XPD:ATTR name="Name" type="string">sat_id</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">int</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">RN5b/cypXUivfIl6CeiRrgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="x7A2ohl0v0WHXUc8UDHW6AAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">vector&lt;TvChannel&gt;</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">RN5b/cypXUivfIl6CeiRrgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="THncZsTd2EaQgMWP8ukavAAA">
-<XPD:ATTR name="Name" type="string">selectByID</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="7U3T/Mh9gEGdFQ58AaydXQAA">
-<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">int</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">THncZsTd2EaQgMWP8ukavAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="ZpRrlyhz802QY2ObgoUqmwAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">TvChannel</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">THncZsTd2EaQgMWP8ukavAAA</XPD:REF>
-<XPD:REF name="Type_">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="FkLzL9wZQUqTW/xy345ifgAA">
-<XPD:ATTR name="Name" type="string">selectByParams</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="/9TUXJr3nkaE3sNOYEA7AwAA">
-<XPD:ATTR name="Name" type="string">param</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">TvChannelParams</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">FkLzL9wZQUqTW/xy345ifgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="NFnoGSrnCk6OIIsCI5hKAAAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">TvChannel</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">FkLzL9wZQUqTW/xy345ifgAA</XPD:REF>
-<XPD:REF name="Type_">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[6]" type="UMLOperation" guid="2BWR7hLxq0qnCE/w/RGNJQAA">
-<XPD:ATTR name="Name" type="string">tvChannelDel</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[7]" type="UMLOperation" guid="hLAGGAR0S02yy3pwOmM1YgAA">
-<XPD:ATTR name="Name" type="string">tvChannelDelBySatID</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="Se/I3L6vA0mlcLXlxgCKvAAA">
-<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">int</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">hLAGGAR0S02yy3pwOmM1YgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[8]" type="UMLOperation" guid="ZuqLn6kcZkCuwI1pleD9aAAA">
-<XPD:ATTR name="Name" type="string">getID</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[9]" type="UMLOperation" guid="jTykhLmNTkeBOYQWw2ruYgAA">
-<XPD:ATTR name="Name" type="string">getDVBTSID</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[10]" type="UMLOperation" guid="MatpiHkzdk2wjbBq+aAUWgAA">
-<XPD:ATTR name="Name" type="string">getDVBOrigNetID</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[11]" type="UMLOperation" guid="FI7G+6zrRESU1oT9AJMPeQAA">
-<XPD:ATTR name="Name" type="string">getFrontendID</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[12]" type="UMLOperation" guid="jjFnFzfEc02zGI29lwfBowAA">
-<XPD:ATTR name="Name" type="string">getTSSourceID</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[13]" type="UMLOperation" guid="ZV2LPyYw8E6IN0sEDpXjmAAA">
-<XPD:ATTR name="Name" type="string">getParams</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="79kvlpEjWUOei2KGS0rnzAAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">TvChannelParams</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">ZV2LPyYw8E6IN0sEDpXjmAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[14]" type="UMLOperation" guid="J2ss0Osk0UKtERrsNkIiBAAA">
-<XPD:ATTR name="Name" type="string">isDVBCMode</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[15]" type="UMLOperation" guid="1+Z8ijSmXUCS12XqcbMI8gAA">
-<XPD:ATTR name="Name" type="string">setFrequency</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[16]" type="UMLOperation" guid="wvTcWulSY0Cufl7PzpJmGAAA">
-<XPD:ATTR name="Name" type="string">setSymbolRate</XPD:ATTR>
+*@return 返回创建的通é“</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="ATajQMblVE2J+9tPqnDGIQAA">
+<XPD:ATTR name="Name" type="string">sat_id</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">int</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">RN5b/cypXUivfIl6CeiRrgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="x7A2ohl0v0WHXUc8UDHW6AAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">vector&lt;TvChannel&gt;</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">RN5b/cypXUivfIl6CeiRrgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="THncZsTd2EaQgMWP8ukavAAA">
+<XPD:ATTR name="Name" type="string">selectByID</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="7U3T/Mh9gEGdFQ58AaydXQAA">
+<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">int</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">THncZsTd2EaQgMWP8ukavAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="ZpRrlyhz802QY2ObgoUqmwAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">TvChannel</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">THncZsTd2EaQgMWP8ukavAAA</XPD:REF>
+<XPD:REF name="Type_">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="FkLzL9wZQUqTW/xy345ifgAA">
+<XPD:ATTR name="Name" type="string">selectByParams</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="/9TUXJr3nkaE3sNOYEA7AwAA">
+<XPD:ATTR name="Name" type="string">param</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">TvChannelParams</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">FkLzL9wZQUqTW/xy345ifgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="NFnoGSrnCk6OIIsCI5hKAAAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">TvChannel</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">FkLzL9wZQUqTW/xy345ifgAA</XPD:REF>
+<XPD:REF name="Type_">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[6]" type="UMLOperation" guid="2BWR7hLxq0qnCE/w/RGNJQAA">
+<XPD:ATTR name="Name" type="string">tvChannelDel</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[7]" type="UMLOperation" guid="hLAGGAR0S02yy3pwOmM1YgAA">
+<XPD:ATTR name="Name" type="string">tvChannelDelBySatID</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="Se/I3L6vA0mlcLXlxgCKvAAA">
+<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">int</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">hLAGGAR0S02yy3pwOmM1YgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[8]" type="UMLOperation" guid="ZuqLn6kcZkCuwI1pleD9aAAA">
+<XPD:ATTR name="Name" type="string">getID</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[9]" type="UMLOperation" guid="jTykhLmNTkeBOYQWw2ruYgAA">
+<XPD:ATTR name="Name" type="string">getDVBTSID</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[10]" type="UMLOperation" guid="MatpiHkzdk2wjbBq+aAUWgAA">
+<XPD:ATTR name="Name" type="string">getDVBOrigNetID</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[11]" type="UMLOperation" guid="FI7G+6zrRESU1oT9AJMPeQAA">
+<XPD:ATTR name="Name" type="string">getFrontendID</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[12]" type="UMLOperation" guid="jjFnFzfEc02zGI29lwfBowAA">
+<XPD:ATTR name="Name" type="string">getTSSourceID</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[13]" type="UMLOperation" guid="ZV2LPyYw8E6IN0sEDpXjmAAA">
+<XPD:ATTR name="Name" type="string">getParams</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="79kvlpEjWUOei2KGS0rnzAAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">TvChannelParams</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">ZV2LPyYw8E6IN0sEDpXjmAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[14]" type="UMLOperation" guid="J2ss0Osk0UKtERrsNkIiBAAA">
+<XPD:ATTR name="Name" type="string">isDVBCMode</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[15]" type="UMLOperation" guid="1+Z8ijSmXUCS12XqcbMI8gAA">
+<XPD:ATTR name="Name" type="string">setFrequency</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[16]" type="UMLOperation" guid="wvTcWulSY0Cufl7PzpJmGAAA">
+<XPD:ATTR name="Name" type="string">setSymbolRate</XPD:ATTR>
<XPD:ATTR name="Documentation" type="string">设置符å·çŽ‡(QPSK/QAM模å¼)
-@param symbolRate 符å·çŽ‡</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[17]" type="UMLOperation" guid="l/0TFp9Q8UKX15QErAbvMgAA">
-<XPD:ATTR name="Name" type="string">setPolarisation</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">设置æžæ€§(QPSK模å¼)</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[18]" type="UMLOperation" guid="b9Wu1ldLi0S2Z8NKmKvesgAA">
-<XPD:ATTR name="Name" type="string">setATVAudio</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[19]" type="UMLOperation" guid="GdCCR2raz0+G3e4/bN7OZQAA">
-<XPD:ATTR name="Name" type="string">setATVVideoFormat</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">修改模拟视频制å¼</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[20]" type="UMLOperation" guid="dSQ9xkQnBECjeLi09iGfaQAA">
-<XPD:ATTR name="Name" type="string">setATVAudioFormat</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[21]" type="UMLOperation" guid="9soE8Pso6EmGPUSAU1p4fgAA">
-<XPD:ATTR name="Name" type="string">setATVFreq</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[22]" type="UMLOperation" guid="mlHUjain7UyPF/GHGuUEQgAA">
-<XPD:ATTR name="Name" type="string">setATVAfcData</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:ATTR name="#TypedFeatures" type="integer">1</XPD:ATTR>
-<XPD:REF name="TypedFeatures[0]">Zh90wWMTSUm6ew2qIiAjFAAA</XPD:REF>
-<XPD:ATTR name="#TypedParameters" type="integer">3</XPD:ATTR>
-<XPD:REF name="TypedParameters[0]">ZpRrlyhz802QY2ObgoUqmwAA</XPD:REF>
-<XPD:REF name="TypedParameters[1]">NFnoGSrnCk6OIIsCI5hKAAAA</XPD:REF>
-<XPD:REF name="TypedParameters[2]">A7QPUTtNz0O45ex/ZBEL3wAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">5</XPD:ATTR>
-<XPD:REF name="Associations[0]">GZcPUasbnkG3pyGKV6NFnAAA</XPD:REF>
-<XPD:REF name="Associations[1]">XvxorIQvl0aKnzyznjd1uwAA</XPD:REF>
-<XPD:REF name="Associations[2]">BVpPYPY4V0KsTBJTRoLjyAAA</XPD:REF>
-<XPD:REF name="Associations[3]">QwwfXlN26EahMaF2XDAvLAAA</XPD:REF>
-<XPD:REF name="Associations[4]">C7X0ILbZrkWDVQ5Vc+PT/wAA</XPD:REF>
-<XPD:ATTR name="#Attributes" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="Z9Ui4868AE++l0of4VxduQAA">
-<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
-<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[5]" type="UMLClass" guid="gx40XIC9FkOG3iX3Oyxw8wAA">
-<XPD:ATTR name="Name" type="string">CTvGroup</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">Group对应DTV中的一个节目分组</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">8HnvkQxPk0OLqQXLeJ5MUgAA</XPD:REF>
-<XPD:REF name="Views[1]">50xz0k8rgU+WfODoAi8aeQAA</XPD:REF>
-<XPD:REF name="Views[2]">TR1rTShyhEG7ngh596L0kgAA</XPD:REF>
-<XPD:REF name="Views[3]">GPl78wz82UaLho5xwfMqrQAA</XPD:REF>
-<XPD:ATTR name="#Operations" type="integer">4</XPD:ATTR>
-<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="fRgLJCGVDUK1RuJPwHSaGwAA">
-<XPD:ATTR name="Name" type="string">selectByGroup</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">å–得所有节目分组信æ¯</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="A3kmDTyc/0aEXqkXlCeAFAAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">vector&lt;TvGroup&gt;</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">fRgLJCGVDUK1RuJPwHSaGwAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="DqeBCx0GukCwnvjLeUhcogAA">
-<XPD:ATTR name="Name" type="string">addGroup</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="Hq5DfJkwqUmxLMkjmPj4qQAA">
-<XPD:ATTR name="Name" type="string">deleteGroup</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="5xVs/C/ycES9RQlY9VAsCgAA">
-<XPD:ATTR name="Name" type="string">editGroup</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
-<XPD:REF name="Associations[0]">Io3cINfhiE23pmiSxpS6swAA</XPD:REF>
-<XPD:ATTR name="#Attributes" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="e9OE1kuwcUuhtDW6AZvH1wAA">
-<XPD:REF name="Owner">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[6]" type="UMLClass" guid="26RSzf3jmEWkDlRiFhl4OAAA">
-<XPD:ATTR name="Name" type="string">CTvEvent</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">对应æ¯ä¸ªProgram一个时段的节目</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">7aPHkO59WEubHbpM/Djq/AAA</XPD:REF>
-<XPD:REF name="Views[1]">+EOWTA5PrUyAEwB/ZHVnPAAA</XPD:REF>
-<XPD:REF name="Views[2]">f0xyghRma028ShVYc8tbfwAA</XPD:REF>
-<XPD:REF name="Views[3]">qpXdkd1nJ0ajRru7gzDFJwAA</XPD:REF>
-<XPD:ATTR name="#Operations" type="integer">6</XPD:ATTR>
-<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="0db/IAr++UOdZquo78fTbgAA">
-<XPD:ATTR name="Name" type="string">TVEvent</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
-<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="lSipwxb9AEu7dKbkvn8bCwAA">
-<XPD:ATTR name="Name" type="string">db</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvDatabase</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">0db/IAr++UOdZquo78fTbgAA</XPD:REF>
-<XPD:REF name="Type_">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="IaJ2KyC/H0W4mE3T5XcaJQAA">
-<XPD:ATTR name="Name" type="string">TVEvent</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">destroy</XPD:ATTR>
-<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="n6dU85krq0+Oca0Y2wayfAAA">
-<XPD:ATTR name="Name" type="string">selectByID</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="JOwE9Bjhf0229aBZv0thuwAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvEvent</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">n6dU85krq0+Oca0Y2wayfAAA</XPD:REF>
-<XPD:REF name="Type_">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="E97BMkERRU2lIzjyqz++tAAA">
-<XPD:ATTR name="Name" type="string">getProgram</XPD:ATTR>
-<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="w4A7LCg5RUitVRoJ8EF5DwAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">E97BMkERRU2lIzjyqz++tAAA</XPD:REF>
-<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="R/cQwE4hs0yRPnKVjTffUQAA">
-<XPD:ATTR name="Name" type="string">getDVBViewAge</XPD:ATTR>
+@param symbolRate 符å·çŽ‡</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[17]" type="UMLOperation" guid="l/0TFp9Q8UKX15QErAbvMgAA">
+<XPD:ATTR name="Name" type="string">setPolarisation</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">设置æžæ€§(QPSK模å¼)</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[18]" type="UMLOperation" guid="b9Wu1ldLi0S2Z8NKmKvesgAA">
+<XPD:ATTR name="Name" type="string">setATVAudio</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[19]" type="UMLOperation" guid="GdCCR2raz0+G3e4/bN7OZQAA">
+<XPD:ATTR name="Name" type="string">setATVVideoFormat</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">修改模拟视频制å¼</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[20]" type="UMLOperation" guid="dSQ9xkQnBECjeLi09iGfaQAA">
+<XPD:ATTR name="Name" type="string">setATVAudioFormat</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[21]" type="UMLOperation" guid="9soE8Pso6EmGPUSAU1p4fgAA">
+<XPD:ATTR name="Name" type="string">setATVFreq</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[22]" type="UMLOperation" guid="mlHUjain7UyPF/GHGuUEQgAA">
+<XPD:ATTR name="Name" type="string">setATVAfcData</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:ATTR name="#TypedFeatures" type="integer">1</XPD:ATTR>
+<XPD:REF name="TypedFeatures[0]">Zh90wWMTSUm6ew2qIiAjFAAA</XPD:REF>
+<XPD:ATTR name="#TypedParameters" type="integer">3</XPD:ATTR>
+<XPD:REF name="TypedParameters[0]">ZpRrlyhz802QY2ObgoUqmwAA</XPD:REF>
+<XPD:REF name="TypedParameters[1]">NFnoGSrnCk6OIIsCI5hKAAAA</XPD:REF>
+<XPD:REF name="TypedParameters[2]">A7QPUTtNz0O45ex/ZBEL3wAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">5</XPD:ATTR>
+<XPD:REF name="Associations[0]">GZcPUasbnkG3pyGKV6NFnAAA</XPD:REF>
+<XPD:REF name="Associations[1]">XvxorIQvl0aKnzyznjd1uwAA</XPD:REF>
+<XPD:REF name="Associations[2]">BVpPYPY4V0KsTBJTRoLjyAAA</XPD:REF>
+<XPD:REF name="Associations[3]">QwwfXlN26EahMaF2XDAvLAAA</XPD:REF>
+<XPD:REF name="Associations[4]">C7X0ILbZrkWDVQ5Vc+PT/wAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="Z9Ui4868AE++l0of4VxduQAA">
+<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
+<XPD:REF name="Owner">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[5]" type="UMLClass" guid="gx40XIC9FkOG3iX3Oyxw8wAA">
+<XPD:ATTR name="Name" type="string">CTvGroup</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">Group对应DTV中的一个节目分组</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">8HnvkQxPk0OLqQXLeJ5MUgAA</XPD:REF>
+<XPD:REF name="Views[1]">50xz0k8rgU+WfODoAi8aeQAA</XPD:REF>
+<XPD:REF name="Views[2]">TR1rTShyhEG7ngh596L0kgAA</XPD:REF>
+<XPD:REF name="Views[3]">GPl78wz82UaLho5xwfMqrQAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">4</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="fRgLJCGVDUK1RuJPwHSaGwAA">
+<XPD:ATTR name="Name" type="string">selectByGroup</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">å–得所有节目分组信æ¯</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="A3kmDTyc/0aEXqkXlCeAFAAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">vector&lt;TvGroup&gt;</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">fRgLJCGVDUK1RuJPwHSaGwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="DqeBCx0GukCwnvjLeUhcogAA">
+<XPD:ATTR name="Name" type="string">addGroup</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="Hq5DfJkwqUmxLMkjmPj4qQAA">
+<XPD:ATTR name="Name" type="string">deleteGroup</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="5xVs/C/ycES9RQlY9VAsCgAA">
+<XPD:ATTR name="Name" type="string">editGroup</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">Io3cINfhiE23pmiSxpS6swAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="e9OE1kuwcUuhtDW6AZvH1wAA">
+<XPD:REF name="Owner">gx40XIC9FkOG3iX3Oyxw8wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[6]" type="UMLClass" guid="26RSzf3jmEWkDlRiFhl4OAAA">
+<XPD:ATTR name="Name" type="string">CTvEvent</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">对应æ¯ä¸ªProgram一个时段的节目</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">7aPHkO59WEubHbpM/Djq/AAA</XPD:REF>
+<XPD:REF name="Views[1]">+EOWTA5PrUyAEwB/ZHVnPAAA</XPD:REF>
+<XPD:REF name="Views[2]">f0xyghRma028ShVYc8tbfwAA</XPD:REF>
+<XPD:REF name="Views[3]">qpXdkd1nJ0ajRru7gzDFJwAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">6</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="0db/IAr++UOdZquo78fTbgAA">
+<XPD:ATTR name="Name" type="string">TVEvent</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
+<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="lSipwxb9AEu7dKbkvn8bCwAA">
+<XPD:ATTR name="Name" type="string">db</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvDatabase</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">0db/IAr++UOdZquo78fTbgAA</XPD:REF>
+<XPD:REF name="Type_">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="IaJ2KyC/H0W4mE3T5XcaJQAA">
+<XPD:ATTR name="Name" type="string">TVEvent</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">destroy</XPD:ATTR>
+<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="n6dU85krq0+Oca0Y2wayfAAA">
+<XPD:ATTR name="Name" type="string">selectByID</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="JOwE9Bjhf0229aBZv0thuwAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvEvent</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">n6dU85krq0+Oca0Y2wayfAAA</XPD:REF>
+<XPD:REF name="Type_">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="E97BMkERRU2lIzjyqz++tAAA">
+<XPD:ATTR name="Name" type="string">getProgram</XPD:ATTR>
+<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="w4A7LCg5RUitVRoJ8EF5DwAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">E97BMkERRU2lIzjyqz++tAAA</XPD:REF>
+<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="R/cQwE4hs0yRPnKVjTffUQAA">
+<XPD:ATTR name="Name" type="string">getDVBViewAge</XPD:ATTR>
<XPD:ATTR name="Documentation" type="string">å–得观看年龄(DVB)
-@return 返回观看年龄,0表示无年龄é™åˆ¶</XPD:ATTR>
-<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="3SmucpKb9ESg9TT4SKAe3AAA">
-<XPD:ATTR name="Name" type="string">getVChipRatings</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">å–å¾—V-Chip级别信æ¯</XPD:ATTR>
-<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:ATTR name="#TypedParameters" type="integer">2</XPD:ATTR>
-<XPD:REF name="TypedParameters[0]">+v9VB9kIH02VZ9TgNHJJfQAA</XPD:REF>
-<XPD:REF name="TypedParameters[1]">JOwE9Bjhf0229aBZv0thuwAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">3</XPD:ATTR>
-<XPD:REF name="Associations[0]">PhlKgbqPt0OClpwk2m9vswAA</XPD:REF>
-<XPD:REF name="Associations[1]">zefo1Bu+v0e4gn9nUL+bSQAA</XPD:REF>
-<XPD:REF name="Associations[2]">BSJLLgAd4kCusm/8BFZQMQAA</XPD:REF>
-<XPD:ATTR name="#Attributes" type="integer">3</XPD:ATTR>
-<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="PMItdyz77UuIZwzHxmOd3AAA">
-<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
-<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="nCSrn+xVyUGe6iyd/E/GDwAA">
-<XPD:ATTR name="Name" type="string">name</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
-<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="xT0LK2eQ9EGzJfCHW9IJ9wAA">
-<XPD:ATTR name="Name" type="string">program</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
-<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
-<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[7]" type="UMLClass" guid="UiYOh8D78E22qQeFeDZpLAAA">
-<XPD:ATTR name="Name" type="string">CTvConfig</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">vYDCfUgYq0KaBSDnxbpYVgAA</XPD:REF>
-<XPD:REF name="Views[1]">KTNQfnqIy0q3wV+ARVtV9gAA</XPD:REF>
-<XPD:REF name="Views[2]">7Pq+TJVLy06gA8T6r5wMawAA</XPD:REF>
-<XPD:REF name="Views[3]">Fn0oKpD7lUyNbDw59UyRygAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
-<XPD:REF name="Associations[0]">usmo/t5V5UGA31IdVHUKyQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[8]" type="UMLClass" guid="b8JuO/0C0Eq0GnJ0Q/tEWQAA">
-<XPD:ATTR name="Name" type="string">CTvBooking</XPD:ATTR>
+@return 返回观看年龄,0表示无年龄é™åˆ¶</XPD:ATTR>
+<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="3SmucpKb9ESg9TT4SKAe3AAA">
+<XPD:ATTR name="Name" type="string">getVChipRatings</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">å–å¾—V-Chip级别信æ¯</XPD:ATTR>
+<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:ATTR name="#TypedParameters" type="integer">2</XPD:ATTR>
+<XPD:REF name="TypedParameters[0]">+v9VB9kIH02VZ9TgNHJJfQAA</XPD:REF>
+<XPD:REF name="TypedParameters[1]">JOwE9Bjhf0229aBZv0thuwAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">3</XPD:ATTR>
+<XPD:REF name="Associations[0]">PhlKgbqPt0OClpwk2m9vswAA</XPD:REF>
+<XPD:REF name="Associations[1]">zefo1Bu+v0e4gn9nUL+bSQAA</XPD:REF>
+<XPD:REF name="Associations[2]">BSJLLgAd4kCusm/8BFZQMQAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">3</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="PMItdyz77UuIZwzHxmOd3AAA">
+<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
+<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="nCSrn+xVyUGe6iyd/E/GDwAA">
+<XPD:ATTR name="Name" type="string">name</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="xT0LK2eQ9EGzJfCHW9IJ9wAA">
+<XPD:ATTR name="Name" type="string">program</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvProgram</XPD:ATTR>
+<XPD:REF name="Type_">9naBHAA+hkmkNtZzyXP1/wAA</XPD:REF>
+<XPD:REF name="Owner">26RSzf3jmEWkDlRiFhl4OAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[7]" type="UMLClass" guid="UiYOh8D78E22qQeFeDZpLAAA">
+<XPD:ATTR name="Name" type="string">CTvConfig</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">vYDCfUgYq0KaBSDnxbpYVgAA</XPD:REF>
+<XPD:REF name="Views[1]">KTNQfnqIy0q3wV+ARVtV9gAA</XPD:REF>
+<XPD:REF name="Views[2]">7Pq+TJVLy06gA8T6r5wMawAA</XPD:REF>
+<XPD:REF name="Views[3]">Fn0oKpD7lUyNbDw59UyRygAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">usmo/t5V5UGA31IdVHUKyQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[8]" type="UMLClass" guid="b8JuO/0C0Eq0GnJ0Q/tEWQAA">
+<XPD:ATTR name="Name" type="string">CTvBooking</XPD:ATTR>
<XPD:ATTR name="Documentation" type="string">预约播放
-预约录åƒ</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Th+ZwPCIw0CZjtawrnGPrQAA</XPD:REF>
-<XPD:REF name="Views[1]">LL3KL7SUuEyu4pY6NT57NAAA</XPD:REF>
-<XPD:REF name="Views[2]">dCkq+XCQgkaH1Q901KclHQAA</XPD:REF>
-<XPD:REF name="Views[3]">+Bzptjmx3kWzAYT9fN/rxQAA</XPD:REF>
-<XPD:ATTR name="#Operations" type="integer">8</XPD:ATTR>
-<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="m+gfn/ntpkybEdFBM5znlgAA">
-<XPD:ATTR name="Name" type="string">TVBooking</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
-<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="lc6uST5/Mk6WfIuIfATlsgAA">
-<XPD:ATTR name="Name" type="string">db</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvDatabase</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">m+gfn/ntpkybEdFBM5znlgAA</XPD:REF>
-<XPD:REF name="Type_">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="QqLeWhZJc0CLub0IjxjyywAA">
-<XPD:ATTR name="Name" type="string">TVBooking</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">destroy</XPD:ATTR>
-<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="Tn9evQiVdUWS5ClifY+LnwAA">
-<XPD:ATTR name="Name" type="string">selectByID</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">æ ¹æ®è®°å½•ID查找指定TVBooking</XPD:ATTR>
-<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="LZuyv0amBUa1JHWrCnDVeAAA">
-<XPD:ATTR name="Name" type="string">selectRecordBookingsByStatus</XPD:ATTR>
-<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="GmUmSDVcrEabb38Mr6otqQAA">
-<XPD:ATTR name="Name" type="string">selectPlayBookingsByStatus</XPD:ATTR>
-<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="/JwIOjuS30SKen+tINIeIQAA">
-<XPD:ATTR name="Name" type="string">bookProgram</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">预约一个Program</XPD:ATTR>
-<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[6]" type="UMLOperation" guid="06m4LFRvq0WqF2UaQPilJwAA">
-<XPD:ATTR name="Name" type="string">bookEvent</XPD:ATTR>
-<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[7]" type="UMLOperation" guid="5r22Uycz1E6G3LtVFBjRzQAA">
-<XPD:ATTR name="Name" type="string">delete</XPD:ATTR>
-<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-</XPD:OBJ>
-<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
-<XPD:REF name="Associations[0]">AfVgLfyALEyP98guAbYHUAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[9]" type="UMLClass" guid="3uD8ZK44vEi6X3Yo5n4G3wAA">
-<XPD:ATTR name="Name" type="string">CTvRegion</XPD:ATTR>
+预约录åƒ</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Th+ZwPCIw0CZjtawrnGPrQAA</XPD:REF>
+<XPD:REF name="Views[1]">LL3KL7SUuEyu4pY6NT57NAAA</XPD:REF>
+<XPD:REF name="Views[2]">dCkq+XCQgkaH1Q901KclHQAA</XPD:REF>
+<XPD:REF name="Views[3]">+Bzptjmx3kWzAYT9fN/rxQAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">8</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="m+gfn/ntpkybEdFBM5znlgAA">
+<XPD:ATTR name="Name" type="string">TVBooking</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
+<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="lc6uST5/Mk6WfIuIfATlsgAA">
+<XPD:ATTR name="Name" type="string">db</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvDatabase</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">m+gfn/ntpkybEdFBM5znlgAA</XPD:REF>
+<XPD:REF name="Type_">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="QqLeWhZJc0CLub0IjxjyywAA">
+<XPD:ATTR name="Name" type="string">TVBooking</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">destroy</XPD:ATTR>
+<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="Tn9evQiVdUWS5ClifY+LnwAA">
+<XPD:ATTR name="Name" type="string">selectByID</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">æ ¹æ®è®°å½•ID查找指定TVBooking</XPD:ATTR>
+<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="LZuyv0amBUa1JHWrCnDVeAAA">
+<XPD:ATTR name="Name" type="string">selectRecordBookingsByStatus</XPD:ATTR>
+<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="GmUmSDVcrEabb38Mr6otqQAA">
+<XPD:ATTR name="Name" type="string">selectPlayBookingsByStatus</XPD:ATTR>
+<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="/JwIOjuS30SKen+tINIeIQAA">
+<XPD:ATTR name="Name" type="string">bookProgram</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">预约一个Program</XPD:ATTR>
+<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[6]" type="UMLOperation" guid="06m4LFRvq0WqF2UaQPilJwAA">
+<XPD:ATTR name="Name" type="string">bookEvent</XPD:ATTR>
+<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[7]" type="UMLOperation" guid="5r22Uycz1E6G3LtVFBjRzQAA">
+<XPD:ATTR name="Name" type="string">delete</XPD:ATTR>
+<XPD:REF name="Owner">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">AfVgLfyALEyP98guAbYHUAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[9]" type="UMLClass" guid="3uD8ZK44vEi6X3Yo5n4G3wAA">
+<XPD:ATTR name="Name" type="string">CTvRegion</XPD:ATTR>
<XPD:ATTR name="Documentation" type="string"> TV 区域
- å¯ä»¥èŽ·å¾—æ¯ä¸ªåŒºåŸŸçš„频率列表等信æ¯</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">ybciiFK3jEO6SdfdRt6uAgAA</XPD:REF>
-<XPD:REF name="Views[1]">AL2e0wMT+0K0AC6gZuuhdwAA</XPD:REF>
-<XPD:REF name="Views[2]">zIfIWkZ3Lkiq2O9aOGiU/gAA</XPD:REF>
-<XPD:REF name="Views[3]">exyb4FNp+Ue9ROAGwoQFcwAA</XPD:REF>
-<XPD:ATTR name="#Operations" type="integer">7</XPD:ATTR>
-<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="ujBTxs7XQU2sxrOeErOlLAAA">
-<XPD:ATTR name="Name" type="string">TVRegion</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
-<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="eQIZ7HOvJESQdc0nGhqnrwAA">
-<XPD:ATTR name="Name" type="string">db</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvDatabase</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">ujBTxs7XQU2sxrOeErOlLAAA</XPD:REF>
-<XPD:REF name="Type_">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="AIgKz2rgMU2bWNgoO2rmngAA">
-<XPD:ATTR name="Name" type="string">TVRegion</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">destroy</XPD:ATTR>
-<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="1mlb6r4cZkSv6mS9OhiHiAAA">
-<XPD:ATTR name="Name" type="string">selectByID</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="KaZtVGGTiEm4B9lL22FEtgAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvRegion</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">1mlb6r4cZkSv6mS9OhiHiAAA</XPD:REF>
-<XPD:REF name="Type_">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="d7lFBHriY0e22/gy989mbgAA">
-<XPD:ATTR name="Name" type="string">selectByName</XPD:ATTR>
-<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="4bMFZq1Ayk+uxljdLs5nigAA">
-<XPD:ATTR name="Name" type="string">selectByCountry</XPD:ATTR>
-<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="gN4TbpRxGkS8N+OPpekKxQAA">
-<XPD:ATTR name="Name" type="string">getAllCountry</XPD:ATTR>
-<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="owFuhgapFk+E9YYtCGoeqgAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">vector&lt;String&gt;</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">gN4TbpRxGkS8N+OPpekKxQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[6]" type="UMLOperation" guid="jk0qAxv5u0yw7WgwL+rscQAA">
-<XPD:ATTR name="Name" type="string">getChannelParams</XPD:ATTR>
+ å¯ä»¥èŽ·å¾—æ¯ä¸ªåŒºåŸŸçš„频率列表等信æ¯</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">ybciiFK3jEO6SdfdRt6uAgAA</XPD:REF>
+<XPD:REF name="Views[1]">AL2e0wMT+0K0AC6gZuuhdwAA</XPD:REF>
+<XPD:REF name="Views[2]">zIfIWkZ3Lkiq2O9aOGiU/gAA</XPD:REF>
+<XPD:REF name="Views[3]">exyb4FNp+Ue9ROAGwoQFcwAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">7</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="ujBTxs7XQU2sxrOeErOlLAAA">
+<XPD:ATTR name="Name" type="string">TVRegion</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
+<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="eQIZ7HOvJESQdc0nGhqnrwAA">
+<XPD:ATTR name="Name" type="string">db</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvDatabase</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">ujBTxs7XQU2sxrOeErOlLAAA</XPD:REF>
+<XPD:REF name="Type_">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="AIgKz2rgMU2bWNgoO2rmngAA">
+<XPD:ATTR name="Name" type="string">TVRegion</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">destroy</XPD:ATTR>
+<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="1mlb6r4cZkSv6mS9OhiHiAAA">
+<XPD:ATTR name="Name" type="string">selectByID</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="KaZtVGGTiEm4B9lL22FEtgAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvRegion</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">1mlb6r4cZkSv6mS9OhiHiAAA</XPD:REF>
+<XPD:REF name="Type_">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="d7lFBHriY0e22/gy989mbgAA">
+<XPD:ATTR name="Name" type="string">selectByName</XPD:ATTR>
+<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="4bMFZq1Ayk+uxljdLs5nigAA">
+<XPD:ATTR name="Name" type="string">selectByCountry</XPD:ATTR>
+<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="gN4TbpRxGkS8N+OPpekKxQAA">
+<XPD:ATTR name="Name" type="string">getAllCountry</XPD:ATTR>
+<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="owFuhgapFk+E9YYtCGoeqgAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">vector&lt;String&gt;</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">gN4TbpRxGkS8N+OPpekKxQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[6]" type="UMLOperation" guid="jk0qAxv5u0yw7WgwL+rscQAA">
+<XPD:ATTR name="Name" type="string">getChannelParams</XPD:ATTR>
<XPD:ATTR name="Documentation" type="string">å–得该Regionçš„ä¿¡å·æºé¢‘率å‚数列表
-@return 返回信å·æºé¢‘率å‚数列表</XPD:ATTR>
-<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="cgdkfeW2SE21ZEOaHuLc7gAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">TVChannelParams</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">jk0qAxv5u0yw7WgwL+rscQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:ATTR name="#TypedParameters" type="integer">1</XPD:ATTR>
-<XPD:REF name="TypedParameters[0]">KaZtVGGTiEm4B9lL22FEtgAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
-<XPD:REF name="Associations[0]">l6Lg/NJG5UWu+7ALxaVP3gAA</XPD:REF>
-<XPD:ATTR name="#Attributes" type="integer">3</XPD:ATTR>
-<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="qz9HpzuB70u9CKoB8GAVTQAA">
-<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
-<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="20sWt8adtki4R3t6aKZcXQAA">
-<XPD:ATTR name="Name" type="string">name</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
-<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="ubg2Td5H2E6xsn9yTlb4FgAA">
-<XPD:ATTR name="Name" type="string">country</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
-<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[10]" type="UMLClass" guid="iUy0YZgyREC+o54lTQptaAAA">
-<XPD:ATTR name="Name" type="string">CTvSatellite</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">TV Satellite相关信æ¯</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">tzICJ64LmUSx1fvEy4dHZQAA</XPD:REF>
-<XPD:REF name="Views[1]">yCTnlkoiRkSszYJDHrqQuwAA</XPD:REF>
-<XPD:REF name="Views[2]">phU5m2tyh0yMlhsYRPe6dwAA</XPD:REF>
-<XPD:REF name="Views[3]">S8DZ5jxQq0+WFWPFnQy7iAAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
-<XPD:REF name="Associations[0]">ULQw0JNjPE2758pFWlo+MQAA</XPD:REF>
-<XPD:REF name="Associations[1]">bObyymjPEkeQZSoHCKpP2QAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[11]" type="UMLClass" guid="/LI4+1GTjEagI/wLEFpVSQAA">
-<XPD:ATTR name="Name" type="string">CTvDimension</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">TV ATSC rating dimension</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">hzoiTuCQqEuArZEejfwdnQAA</XPD:REF>
-<XPD:REF name="Views[1]">PdTrEGRJOEiEJyD2I9IzJgAA</XPD:REF>
-<XPD:REF name="Views[2]">VbdqX2NLOkK2DTLhOA91OwAA</XPD:REF>
-<XPD:REF name="Views[3]">K00/VzyqZUmltiuaKWLgAQAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
-<XPD:REF name="Associations[0]">aYL27tYOR02se3g//aEBeAAA</XPD:REF>
-<XPD:REF name="Associations[1]">zCPl48BYx0CFRkp8Jj5mogAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[12]" type="UMLClass" guid="K+kTKNnFak+/Lo9L/RD0ugAA">
-<XPD:ATTR name="Name" type="string">CTvChannelParams</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">wu+9+Z2tqE2B3qchWKoWdQAA</XPD:REF>
-<XPD:REF name="Views[1]">KAuxxnmqhkmQ7MLBFq8lRgAA</XPD:REF>
-<XPD:REF name="Views[2]">Ynggyopqt02II9Rzg7q1VQAA</XPD:REF>
-<XPD:REF name="Views[3]">PmvllpBms0ifaPkwzqXvOAAA</XPD:REF>
-<XPD:ATTR name="#Operations" type="integer">13</XPD:ATTR>
-<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="kX5mh2hT8UCWJLBSwRAVcgAA">
-<XPD:ATTR name="Name" type="string">TVChannelParams</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="Lv2eTshDS0qHu/TtzYTS/QAA">
-<XPD:ATTR name="Name" type="string">mode</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">kX5mh2hT8UCWJLBSwRAVcgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="bqibYQS6Yk2XKFVNjvPY/QAA">
-<XPD:ATTR name="Name" type="string">TVChannelParams</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">destroy</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="g8684eMuVEODZq64tkbFKwAA">
-<XPD:ATTR name="Name" type="string">CreatedvbcParams</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">类似还有其它channelå‚数创建é™æ€æŽ¥å£</XPD:ATTR>
-<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="dgzVycSB3EK9p7gNlVzXuAAA">
-<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
-<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvChannelParams</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">g8684eMuVEODZq64tkbFKwAA</XPD:REF>
-<XPD:REF name="Type_">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="qzQZnEnCj0edzMmQ9W+TUgAA">
-<XPD:ATTR name="Name" type="string">channelCurAllbandParams</XPD:ATTR>
+@return 返回信å·æºé¢‘率å‚数列表</XPD:ATTR>
+<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="cgdkfeW2SE21ZEOaHuLc7gAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">TVChannelParams</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">jk0qAxv5u0yw7WgwL+rscQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#TypedParameters" type="integer">1</XPD:ATTR>
+<XPD:REF name="TypedParameters[0]">KaZtVGGTiEm4B9lL22FEtgAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">l6Lg/NJG5UWu+7ALxaVP3gAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">3</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="qz9HpzuB70u9CKoB8GAVTQAA">
+<XPD:ATTR name="Name" type="string">id</XPD:ATTR>
+<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="20sWt8adtki4R3t6aKZcXQAA">
+<XPD:ATTR name="Name" type="string">name</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="ubg2Td5H2E6xsn9yTlb4FgAA">
+<XPD:ATTR name="Name" type="string">country</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">String</XPD:ATTR>
+<XPD:REF name="Owner">3uD8ZK44vEi6X3Yo5n4G3wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[10]" type="UMLClass" guid="iUy0YZgyREC+o54lTQptaAAA">
+<XPD:ATTR name="Name" type="string">CTvSatellite</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">TV Satellite相关信æ¯</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">tzICJ64LmUSx1fvEy4dHZQAA</XPD:REF>
+<XPD:REF name="Views[1]">yCTnlkoiRkSszYJDHrqQuwAA</XPD:REF>
+<XPD:REF name="Views[2]">phU5m2tyh0yMlhsYRPe6dwAA</XPD:REF>
+<XPD:REF name="Views[3]">S8DZ5jxQq0+WFWPFnQy7iAAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">ULQw0JNjPE2758pFWlo+MQAA</XPD:REF>
+<XPD:REF name="Associations[1]">bObyymjPEkeQZSoHCKpP2QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[11]" type="UMLClass" guid="/LI4+1GTjEagI/wLEFpVSQAA">
+<XPD:ATTR name="Name" type="string">CTvDimension</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">TV ATSC rating dimension</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">hzoiTuCQqEuArZEejfwdnQAA</XPD:REF>
+<XPD:REF name="Views[1]">PdTrEGRJOEiEJyD2I9IzJgAA</XPD:REF>
+<XPD:REF name="Views[2]">VbdqX2NLOkK2DTLhOA91OwAA</XPD:REF>
+<XPD:REF name="Views[3]">K00/VzyqZUmltiuaKWLgAQAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">aYL27tYOR02se3g//aEBeAAA</XPD:REF>
+<XPD:REF name="Associations[1]">zCPl48BYx0CFRkp8Jj5mogAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[12]" type="UMLClass" guid="K+kTKNnFak+/Lo9L/RD0ugAA">
+<XPD:ATTR name="Name" type="string">CTvChannelParams</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">wu+9+Z2tqE2B3qchWKoWdQAA</XPD:REF>
+<XPD:REF name="Views[1]">KAuxxnmqhkmQ7MLBFq8lRgAA</XPD:REF>
+<XPD:REF name="Views[2]">Ynggyopqt02II9Rzg7q1VQAA</XPD:REF>
+<XPD:REF name="Views[3]">PmvllpBms0ifaPkwzqXvOAAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">13</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="kX5mh2hT8UCWJLBSwRAVcgAA">
+<XPD:ATTR name="Name" type="string">TVChannelParams</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">create</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="Lv2eTshDS0qHu/TtzYTS/QAA">
+<XPD:ATTR name="Name" type="string">mode</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">kX5mh2hT8UCWJLBSwRAVcgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="bqibYQS6Yk2XKFVNjvPY/QAA">
+<XPD:ATTR name="Name" type="string">TVChannelParams</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">destroy</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="g8684eMuVEODZq64tkbFKwAA">
+<XPD:ATTR name="Name" type="string">CreatedvbcParams</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">类似还有其它channelå‚数创建é™æ€æŽ¥å£</XPD:ATTR>
+<XPD:ATTR name="OwnerScope" type="UMLScopeKind">skClassifier</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="dgzVycSB3EK9p7gNlVzXuAAA">
+<XPD:ATTR name="Name" type="string">ret</XPD:ATTR>
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvChannelParams</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">g8684eMuVEODZq64tkbFKwAA</XPD:REF>
+<XPD:REF name="Type_">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="qzQZnEnCj0edzMmQ9W+TUgAA">
+<XPD:ATTR name="Name" type="string">channelCurAllbandParams</XPD:ATTR>
<XPD:ATTR name="Documentation" type="string">创建当å‰æ‰€æœ‰é€šé“å‚æ•°
@param region 区域
@param mode 通é“模å¼
-@return 返回新创建的å‚æ•°</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="sUoQkkeSDUicDjvihzE17wAA">
-<XPD:ATTR name="Name" type="string">setATVAudio</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">修改模拟音频</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="Zp/uaKhNykq6I0DLIqMs6QAA">
-<XPD:ATTR name="Name" type="string">setATVVideoFormat</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">修改模拟视频制å¼</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[6]" type="UMLOperation" guid="W6/Dh7vCMEOK5gCFWgvBuQAA">
-<XPD:ATTR name="Name" type="string">setATVAudioFormat</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string">修改模拟音频制å¼</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[7]" type="UMLOperation" guid="q3e/rtfy+kSDpxAL+JLUAwAA">
-<XPD:ATTR name="Name" type="string">getMode</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[8]" type="UMLOperation" guid="21JdwhpouEyYG3lZnsC7PQAA">
-<XPD:ATTR name="Name" type="string">isDVBMode</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[9]" type="UMLOperation" guid="MCre8DdGnEO6NtacO4PxcwAA">
-<XPD:ATTR name="Name" type="string">getFrequency</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[10]" type="UMLOperation" guid="kb+kpTCHVEKx7jv8aHBGTQAA">
-<XPD:ATTR name="Name" type="string">getAudioMode</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[11]" type="UMLOperation" guid="tYagO7r1C0yRLvAhDROpOQAA">
-<XPD:ATTR name="Name" type="string">getBandwidth</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Operations[12]" type="UMLOperation" guid="ugcb6A9/j02nfYGa/WNK2QAA">
-<XPD:ATTR name="Name" type="string">==</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">Cpp</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">CppOperator</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="WRmMAQd1vkKgOwOy5hHXbwAA">
-<XPD:ATTR name="Name" type="string">param</XPD:ATTR>
-<XPD:ATTR name="TypeExpression" type="string">CTvChannelParams</XPD:ATTR>
-<XPD:REF name="BehavioralFeature">ugcb6A9/j02nfYGa/WNK2QAA</XPD:REF>
-<XPD:REF name="Type_">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:ATTR name="#TypedParameters" type="integer">2</XPD:ATTR>
-<XPD:REF name="TypedParameters[0]">dgzVycSB3EK9p7gNlVzXuAAA</XPD:REF>
-<XPD:REF name="TypedParameters[1]">WRmMAQd1vkKgOwOy5hHXbwAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
-<XPD:REF name="Associations[0]">Dzfwehs+P0e8CyC/holLewAA</XPD:REF>
-<XPD:REF name="Associations[1]">+M+2f65R0UCJH6UP90YGAQAA</XPD:REF>
-<XPD:ATTR name="#Attributes" type="integer">11</XPD:ATTR>
-<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="vd9GmSHi8kmIG7Uv183sQwAA">
-<XPD:ATTR name="Name" type="string">mode</XPD:ATTR>
-<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="8PpQj0CQ8UaM6aUQTqHY+wAA">
-<XPD:ATTR name="Name" type="string">frequency</XPD:ATTR>
-<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="mixkGHhILEOQrR9Hbe6XtwAA">
-<XPD:ATTR name="Name" type="string">symbolRate</XPD:ATTR>
-<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[3]" type="UMLAttribute" guid="2yJw+lrLQE26CKqlL4qTawAA">
-<XPD:ATTR name="Name" type="string">modulation</XPD:ATTR>
-<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[4]" type="UMLAttribute" guid="nFx/MMjsyEq2iVvWRpY1pwAA">
-<XPD:ATTR name="Name" type="string">bandwidth</XPD:ATTR>
-<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[5]" type="UMLAttribute" guid="0Zj58ngjk0KvB5ZV2+v12gAA">
-<XPD:ATTR name="Name" type="string">audio</XPD:ATTR>
-<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[6]" type="UMLAttribute" guid="1CdqUE68HkCKHC0wHU0OugAA">
-<XPD:ATTR name="Name" type="string">standard</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[7]" type="UMLAttribute" guid="qCoIFqRZckuS8ETuBEJ63gAA">
-<XPD:ATTR name="Name" type="string">afc_data</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[8]" type="UMLAttribute" guid="RXpFXMpRb0G050iBJ169CQAA">
-<XPD:ATTR name="Name" type="string">sat_id</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[9]" type="UMLAttribute" guid="KbUJ3zQudkuMliodZgdwoAAA">
-<XPD:ATTR name="Name" type="string">sat_polarisation</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Attributes[10]" type="UMLAttribute" guid="I6rm/D6pekmaDTzLw9FT/wAA">
-<XPD:ATTR name="Name" type="string">Attribute2</XPD:ATTR>
-<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[13]" type="UMLSignal" guid="IK4ie4RbI0mW+299Nj4+3AAA">
-<XPD:ATTR name="Name" type="string">CListen</XPD:ATTR>
-<XPD:ATTR name="Documentation" type="string"> /**正在播放的节目因收看等级ä¸å¤Ÿè¢«åœæ­¢*/
- public static final int TYPE_PROGRAM_BLOCK = 1;
- /**正在播放的节目从BLOCK状æ€æ¢å¤*/
- public static final int TYPE_PROGRAM_UNBLOCK = 2;
- /**没有信å·*/
- public static final int TYPE_SIGNAL_LOST = 3;
- /**ä¿¡å·æ¢å¤*/
- public static final int TYPE_SIGNAL_RESUME = 4;
- /**节目数æ®åœæ­¢*/
- public static final int TYPE_DATA_LOST = 5;
- /**节目数æ®æ¢å¤*/
- public static final int TYPE_DATA_RESUME = 6;
- /**预约æ醒*/
- public static final int TYPE_BOOKING_REMIND = 7;
- /**预约开始*/
- public static final int TYPE_BOOKING_START = 8;
- /**é…置项被修改*/
- public static final int TYPE_CONFIG_CHANGED = 9;
- /**频é“æœç´¢è¿›åº¦*/
- public static final int TYPE_SCAN_PROGRESS = 10;
- /**频é“æœç´¢ç»“æŸï¼Œå¼€å§‹å­˜å‚¨ */
- public static final int TYPE_SCAN_STORE_BEGIN = 11;
- /**频é“æœç´¢å­˜å‚¨å®Œæ¯•*/
- public static final int TYPE_SCAN_STORE_END = 12;
- /**频é“æœç´¢å®Œæˆ*/
- public static final int TYPE_SCAN_END = 13;
- /**正在播放节目相关信æ¯æ›´æ–°*/
- public static final int TYPE_PROGRAM_UPDATE = 14;
- /**节目开始播放*/
- public static final int TYPE_PROGRAM_START = 15;
- /**节目åœæ­¢æ’­æ”¾*/
- public static final int TYPE_PROGRAM_STOP = 16;
- /**TV系统时间更新*/
- public static final int TYPE_TIME_UPDATE = 17;
- /**事件信æ¯æ›´æ–°*/
- public static final int TYPE_EVENT_UPDATE = 18;
- /**输入æºåˆ‡æ¢*/
- public static final int TYPE_INPUT_SOURCE_CHANGED = 19;
- /**请求播放节目å·*/
- public static final int TYPE_PROGRAM_NUMBER = 20;
- /**录åƒåˆ—表更新*/
- public static final int TYPE_RECORDS_UPDATE = 21;
- /**录åƒå†²çª*/
- public static final int TYPE_RECORD_CONFLICT = 22;
- /**录åƒå·²ç»“æŸ*/
- public static final int TYPE_RECORD_END = 23;
- /**VGAä¿¡å·è°ƒæ•´æˆåŠŸ*/
- public static final int TYPE_VGA_ADJUST_OK = 24;
- /**VGAä¿¡å·è°ƒæ•´å¤±è´¥*/
- public static final int TYPE_VGA_ADJUST_FAILED = 25;
- /**VGAä¿¡å·è°ƒæ•´ä¸­*/
- public static final int TYPE_VGA_ADJUST_DOING = 26;
- /**ä¿¡å·æ”¹å˜*/
- public static final int TYPE_SIG_CHANGE = 27;
- /**盲扫进度*/
- public static final int TYPE_BLINDSCAN_PROGRESS = 28;
- /**盲扫新Channel*/
- public static final int TYPE_BLINDSCAN_NEWCHANNEL = 29;
- /**盲扫结æŸ*/
- public static final int TYPE_BLINDSCAN_END = 30;
- /**å«æ˜Ÿè®¾å¤‡LNB与Switché…置生效*/
- public static final int TYPE_SEC_LNBSSWITCHCFGVALID = 31;
- /**diseqc马达åœæ­¢è½¬åŠ¨*/
- public static final int TYPE_SEC_POSITIONERSTOP= 32;
- /**diseqc马达ç¦æ­¢é™åˆ¶*/
- public static final int TYPE_SEC_POSITIONERDISABLELIMIT= 33;
- /**diseqc马达东å‘é™åˆ¶è®¾ç½®*/
- public static final int TYPE_SEC_POSITIONEREASTLIMIT= 34;
- /**diseqc马达西å‘é™åˆ¶è®¾ç½®*/
- public static final int TYPE_SEC_POSITIONERWESTLIMIT= 35;
- /**diseqc马达东å‘转动*/
- public static final int TYPE_SEC_POSITIONEREAST= 36;
- /**diseqc马达西å‘转动*/
- public static final int TYPE_SEC_POSITIONERWEST= 37;
- /**diseqc马达存储ä½ç½®*/
- public static final int TYPE_SEC_POSITIONERSTORE= 38;
- /**diseqc马达转动到指定ä½ç½®*/
- public static final int TYPE_SEC_POSITIONERGOTO= 39;
- /**diseqc马达转动根æ®æœ¬åœ°ç»çº¬åº¦ä»¥åŠå«æ˜Ÿç»åº¦*/
- public static final int TYPE_SEC_POSITIONERGOTOX= 40;
- /**切æ¢è‡³æ–°èŠ‚ç›®*/
- public static final int TYPE_PROGRAM_SWITCH = 41;
- /**在当å‰é¢‘点æœç´¢DTV频é“*/
- public static final int TYPE_SCAN_DTV_CHANNEL = 42;
- /**æ•°æ®åº“导入/导出转æ¢æ“作开始*/
- public static final int TYPE_TRANSFORM_DB_START = 43;
- /**æ•°æ®åº“导入/导出转æ¢æ“作完æˆ*/
- public static final int TYPE_TRANSFORM_DB_END = 44;
- /**pvr/timeshifting回放开始*/
- public static final int TYPE_PLAYBACK_START = 45;
- /**pvr/timeshifting回放结æŸ*/
- public static final int TYPE_PLAYBACK_STOP = 46;
- /**节目音视频因被加扰而无法正常播放*/
- public static final int TYPE_PROGRAM_SCRAMBLED = 47;
-
-
-
-æµçš„å˜åŒ–
-</XPD:ATTR>
-<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:ATTR name="#Associations" type="integer">4</XPD:ATTR>
-<XPD:REF name="Associations[0]">TolxJOTDCkO5nyLC6ipkAwAA</XPD:REF>
-<XPD:REF name="Associations[1]">KeKc5deyJkKjIbzodSAF8QAA</XPD:REF>
-<XPD:REF name="Associations[2]">osliKvkWrU6Jd0FLz/mZngAA</XPD:REF>
-<XPD:REF name="Associations[3]">0WvOUzDyAEKgjZCRSx5J8gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[1]" type="UMLPackage" guid="ZRumjrTwgUamBDOstkagPgAA">
-<XPD:ATTR name="Name" type="string">atv</XPD:ATTR>
-<XPD:REF name="Namespace">bnJ8ggSchket3/t1l7Kx4wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">1</XPD:ATTR>
-<XPD:REF name="Views[0]">R7RBkUeb+E+5S8gvJN8+QQAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
-<XPD:REF name="Associations[0]">XKFQZaAIH0SxD7YBXgkK0wAA</XPD:REF>
-<XPD:REF name="Associations[1]">nzRPyOcacU2J9Jf/0lCmawAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[23]" type="UMLAssociation" guid="1PikxOdVcU2P6grgcwgRvQAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Z3PDc4i/1UCiaxni9RpD2wAA</XPD:REF>
-<XPD:REF name="Views[1]">mhm++LaJkk6lJzcTz7hSFgAA</XPD:REF>
-<XPD:REF name="Views[2]">IxT95vhnIEyr12fdRQskKQAA</XPD:REF>
-<XPD:REF name="Views[3]">d+KXspkLsEa/YezZSZ7YZAAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="AfVgLfyALEyP98guAbYHUAAA">
-<XPD:REF name="Association">1PikxOdVcU2P6grgcwgRvQAA</XPD:REF>
-<XPD:REF name="Participant">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">08HUrDXL5EahpEFi9GJ9yQAA</XPD:REF>
-<XPD:REF name="Views[1]">QRLcMMAOqES9/c4itcB3vAAA</XPD:REF>
-<XPD:REF name="Views[2]">mQFH13/vQUucR5en5l/dUwAA</XPD:REF>
-<XPD:REF name="Views[3]">m0oKw9kT5k2CSLEOl9tV+gAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="Fd/cvRV12USE+Vu6oJsMOgAA">
-<XPD:REF name="Association">1PikxOdVcU2P6grgcwgRvQAA</XPD:REF>
-<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">HxD2Y75aWkSp4d/0R6KiBgAA</XPD:REF>
-<XPD:REF name="Views[1]">K5rMwb6Iyka5HDC+pxIZOwAA</XPD:REF>
-<XPD:REF name="Views[2]">GfMJbs1/nkShjuqnA/8BBAAA</XPD:REF>
-<XPD:REF name="Views[3]">jXmYJVpZxkCkrM3yJ0eHmgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[24]" type="UMLAssociation" guid="6uW6VAT+jEG9Vy3cmRxPvgAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="0WvOUzDyAEKgjZCRSx5J8gAA">
-<XPD:REF name="Association">6uW6VAT+jEG9Vy3cmRxPvgAA</XPD:REF>
-<XPD:REF name="Participant">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="nzRPyOcacU2J9Jf/0lCmawAA">
-<XPD:REF name="Association">6uW6VAT+jEG9Vy3cmRxPvgAA</XPD:REF>
-<XPD:REF name="Participant">ZRumjrTwgUamBDOstkagPgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[25]" type="UMLAssociation" guid="3PUgTTrP3U+LofrDCso/eAAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">JFsYjMcrU0GkgX8jFqUVZAAA</XPD:REF>
-<XPD:REF name="Views[1]">R57gZgKnBkm8aQCFy90fiQAA</XPD:REF>
-<XPD:REF name="Views[2]">GznyP+sffEKB3m9dw8jftQAA</XPD:REF>
-<XPD:REF name="Views[3]">NM8M6o1EGkWwEmKdXXKpPAAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="PP9nsgv4Vkmbk1zEfct4VAAA">
-<XPD:REF name="Association">3PUgTTrP3U+LofrDCso/eAAA</XPD:REF>
-<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">vVViwylf/Ei9ld6xTj7WdQAA</XPD:REF>
-<XPD:REF name="Views[1]">A5rd4V90HkCp3dmD7wYTbwAA</XPD:REF>
-<XPD:REF name="Views[2]">fhSnklGoSEqMAzQOJY57vwAA</XPD:REF>
-<XPD:REF name="Views[3]">n4gqVjygvUK59/wDDHYNJgAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="usmo/t5V5UGA31IdVHUKyQAA">
-<XPD:REF name="Association">3PUgTTrP3U+LofrDCso/eAAA</XPD:REF>
-<XPD:REF name="Participant">UiYOh8D78E22qQeFeDZpLAAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">AoZLFazfK0WqZzhHukFsAwAA</XPD:REF>
-<XPD:REF name="Views[1]">QGcntempZkeGNA54l7y1rAAA</XPD:REF>
-<XPD:REF name="Views[2]">pDauXlrgH0KfuJt30X8zxgAA</XPD:REF>
-<XPD:REF name="Views[3]">NKRAWeqgBEKgb6cHnYpt9QAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[26]" type="UMLPackage" guid="YAejusdLDUikLT0VX+S31wAA">
-<XPD:ATTR name="Name" type="string">MW</XPD:ATTR>
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
-<XPD:REF name="Associations[0]">OmNL/SOM7k6GhKEEqGF0RgAA</XPD:REF>
-<XPD:REF name="Associations[1]">j/oong2hbUCcfqfb/9L1PwAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[27]" type="UMLAssociation" guid="vd4u72TMwkKCHYSmzMvXNQAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="OmNL/SOM7k6GhKEEqGF0RgAA">
-<XPD:REF name="Association">vd4u72TMwkKCHYSmzMvXNQAA</XPD:REF>
-<XPD:REF name="Participant">YAejusdLDUikLT0VX+S31wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="0RZNIMepB0W9fkd6pMCEZwAA">
-<XPD:REF name="Association">vd4u72TMwkKCHYSmzMvXNQAA</XPD:REF>
-<XPD:REF name="Participant">CN6L5smMd0u/4SQDgGuxlAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[28]" type="UMLAssociation" guid="n5b/e2YQYka0DNd4RWbgbgAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="j/oong2hbUCcfqfb/9L1PwAA">
-<XPD:REF name="Association">n5b/e2YQYka0DNd4RWbgbgAA</XPD:REF>
-<XPD:REF name="Participant">YAejusdLDUikLT0VX+S31wAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="frvBY5I3t0yZgEqYHUhfEQAA">
-<XPD:REF name="Association">n5b/e2YQYka0DNd4RWbgbgAA</XPD:REF>
-<XPD:REF name="Participant">7dRihysn8kefkb+6mJlwzgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[29]" type="UMLAssociation" guid="7aJQb5j/+kWV9Kb/0dqoJAAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">Q/k+TeR21UWA0JPwiSZAnwAA</XPD:REF>
-<XPD:REF name="Views[1]">C2jwipMyN0iMiEays2pVbQAA</XPD:REF>
-<XPD:REF name="Views[2]">MxF6R3nqrk+nOid9gUoepAAA</XPD:REF>
-<XPD:REF name="Views[3]">5CzND/56UUuAy2C5OXPJGAAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="C7X0ILbZrkWDVQ5Vc+PT/wAA">
-<XPD:REF name="Association">7aJQb5j/+kWV9Kb/0dqoJAAA</XPD:REF>
-<XPD:REF name="Participant">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">2P5BNH8K/UKYeriBTZAbSgAA</XPD:REF>
-<XPD:REF name="Views[1]">X0Z4arOj+EWceCda6Sj0vgAA</XPD:REF>
-<XPD:REF name="Views[2]">nbxLBw93Oka1PVwDZftA2QAA</XPD:REF>
-<XPD:REF name="Views[3]">lKhOSy40pUOJhnfmNzIx5AAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="Dzfwehs+P0e8CyC/holLewAA">
-<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
-<XPD:REF name="Association">7aJQb5j/+kWV9Kb/0dqoJAAA</XPD:REF>
-<XPD:REF name="Participant">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">VSR1os7RckKbbg+wZ6UPWwAA</XPD:REF>
-<XPD:REF name="Views[1]">3yHNXWsgu0eaPzi0F9a3dgAA</XPD:REF>
-<XPD:REF name="Views[2]">+gO4BIQphEShtlup7FhfcgAA</XPD:REF>
-<XPD:REF name="Views[3]">laRXvwF4WE2wUODF6aCNSQAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[30]" type="UMLAssociation" guid="6r7WWefo1kK4HXJ46+UuHwAA">
-<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">2tALOFJiukSZiwAj9gBDIQAA</XPD:REF>
-<XPD:REF name="Views[1]">BM0ZC/TOp0CzIS/dSFOgMQAA</XPD:REF>
-<XPD:REF name="Views[2]">911s2zFZYUCPtLOmXSDdDgAA</XPD:REF>
-<XPD:REF name="Views[3]">bOeJui9AgkWX+he6KT6czQAA</XPD:REF>
-<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
-<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="+M+2f65R0UCJH6UP90YGAQAA">
-<XPD:REF name="Association">6r7WWefo1kK4HXJ46+UuHwAA</XPD:REF>
-<XPD:REF name="Participant">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">2U407qHmXE+0VHF/y4trXwAA</XPD:REF>
-<XPD:REF name="Views[1]">dAD5Dd+Px0eU/Z7MNaXtWgAA</XPD:REF>
-<XPD:REF name="Views[2]">16BTtqnINEq6DZln/1Uc4AAA</XPD:REF>
-<XPD:REF name="Views[3]">1RtPOXDsOEuSNTqKSxFAKAAA</XPD:REF>
-</XPD:OBJ>
-<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="AM/xtV731kSTTZbv0mmefgAA">
-<XPD:REF name="Association">6r7WWefo1kK4HXJ46+UuHwAA</XPD:REF>
-<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
-<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
-<XPD:REF name="Views[0]">lMa33WFxzU2ojAIXkT9IwAAA</XPD:REF>
-<XPD:REF name="Views[1]">Ehl7/9ciY0mjVGRlJGzTegAA</XPD:REF>
-<XPD:REF name="Views[2]">MAu3FLtcFkOt8a9+Yj8MBAAA</XPD:REF>
-<XPD:REF name="Views[3]">FstmADGG7k2p8GVFXyT/GAAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[3]" type="UMLModel" guid="PS0LMSpdO0O+FHz16P77KAAA">
-<XPD:ATTR name="Name" type="string">Implementation Model</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">implementationModel</XPD:ATTR>
-<XPD:REF name="Namespace">CoZuu0bDp0eooW1pQg6aQwAA</XPD:REF>
-<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="OwnedDiagrams[0]" type="UMLComponentDiagram" guid="8lc98jz+106sHki62uo59wAA">
-<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
-<XPD:REF name="DiagramOwner">PS0LMSpdO0O+FHz16P77KAAA</XPD:REF>
-<XPD:OBJ name="DiagramView" type="UMLComponentDiagramView" guid="0wCA7NA3N0ei/8mtv/tB+gAA">
-<XPD:REF name="Diagram">8lc98jz+106sHki62uo59wAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-<XPD:OBJ name="OwnedElements[4]" type="UMLModel" guid="Br3gILarcEaGGLO+RQTdrAAA">
-<XPD:ATTR name="Name" type="string">Deployment Model</XPD:ATTR>
-<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
-<XPD:ATTR name="StereotypeName" type="string">deploymentModel</XPD:ATTR>
-<XPD:REF name="Namespace">CoZuu0bDp0eooW1pQg6aQwAA</XPD:REF>
-<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
-<XPD:OBJ name="OwnedDiagrams[0]" type="UMLDeploymentDiagram" guid="etpVb7W50ECVJjSyvN9PGgAA">
-<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
-<XPD:REF name="DiagramOwner">Br3gILarcEaGGLO+RQTdrAAA</XPD:REF>
-<XPD:OBJ name="DiagramView" type="UMLDeploymentDiagramView" guid="I2wMY5Xl20qJVJcTZ7SuMgAA">
-<XPD:REF name="Diagram">etpVb7W50ECVJjSyvN9PGgAA</XPD:REF>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:OBJ>
-</XPD:BODY>
-</XPD:PROJECT>
+@return 返回新创建的å‚æ•°</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[4]" type="UMLOperation" guid="sUoQkkeSDUicDjvihzE17wAA">
+<XPD:ATTR name="Name" type="string">setATVAudio</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">修改模拟音频</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[5]" type="UMLOperation" guid="Zp/uaKhNykq6I0DLIqMs6QAA">
+<XPD:ATTR name="Name" type="string">setATVVideoFormat</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">修改模拟视频制å¼</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[6]" type="UMLOperation" guid="W6/Dh7vCMEOK5gCFWgvBuQAA">
+<XPD:ATTR name="Name" type="string">setATVAudioFormat</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string">修改模拟音频制å¼</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[7]" type="UMLOperation" guid="q3e/rtfy+kSDpxAL+JLUAwAA">
+<XPD:ATTR name="Name" type="string">getMode</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[8]" type="UMLOperation" guid="21JdwhpouEyYG3lZnsC7PQAA">
+<XPD:ATTR name="Name" type="string">isDVBMode</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[9]" type="UMLOperation" guid="MCre8DdGnEO6NtacO4PxcwAA">
+<XPD:ATTR name="Name" type="string">getFrequency</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[10]" type="UMLOperation" guid="kb+kpTCHVEKx7jv8aHBGTQAA">
+<XPD:ATTR name="Name" type="string">getAudioMode</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[11]" type="UMLOperation" guid="tYagO7r1C0yRLvAhDROpOQAA">
+<XPD:ATTR name="Name" type="string">getBandwidth</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[12]" type="UMLOperation" guid="ugcb6A9/j02nfYGa/WNK2QAA">
+<XPD:ATTR name="Name" type="string">==</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">Cpp</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">CppOperator</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="WRmMAQd1vkKgOwOy5hHXbwAA">
+<XPD:ATTR name="Name" type="string">param</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">CTvChannelParams</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">ugcb6A9/j02nfYGa/WNK2QAA</XPD:REF>
+<XPD:REF name="Type_">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#TypedParameters" type="integer">2</XPD:ATTR>
+<XPD:REF name="TypedParameters[0]">dgzVycSB3EK9p7gNlVzXuAAA</XPD:REF>
+<XPD:REF name="TypedParameters[1]">WRmMAQd1vkKgOwOy5hHXbwAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">Dzfwehs+P0e8CyC/holLewAA</XPD:REF>
+<XPD:REF name="Associations[1]">+M+2f65R0UCJH6UP90YGAQAA</XPD:REF>
+<XPD:ATTR name="#Attributes" type="integer">11</XPD:ATTR>
+<XPD:OBJ name="Attributes[0]" type="UMLAttribute" guid="vd9GmSHi8kmIG7Uv183sQwAA">
+<XPD:ATTR name="Name" type="string">mode</XPD:ATTR>
+<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[1]" type="UMLAttribute" guid="8PpQj0CQ8UaM6aUQTqHY+wAA">
+<XPD:ATTR name="Name" type="string">frequency</XPD:ATTR>
+<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[2]" type="UMLAttribute" guid="mixkGHhILEOQrR9Hbe6XtwAA">
+<XPD:ATTR name="Name" type="string">symbolRate</XPD:ATTR>
+<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[3]" type="UMLAttribute" guid="2yJw+lrLQE26CKqlL4qTawAA">
+<XPD:ATTR name="Name" type="string">modulation</XPD:ATTR>
+<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[4]" type="UMLAttribute" guid="nFx/MMjsyEq2iVvWRpY1pwAA">
+<XPD:ATTR name="Name" type="string">bandwidth</XPD:ATTR>
+<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[5]" type="UMLAttribute" guid="0Zj58ngjk0KvB5ZV2+v12gAA">
+<XPD:ATTR name="Name" type="string">audio</XPD:ATTR>
+<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkPrivate</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[6]" type="UMLAttribute" guid="1CdqUE68HkCKHC0wHU0OugAA">
+<XPD:ATTR name="Name" type="string">standard</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[7]" type="UMLAttribute" guid="qCoIFqRZckuS8ETuBEJ63gAA">
+<XPD:ATTR name="Name" type="string">afc_data</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[8]" type="UMLAttribute" guid="RXpFXMpRb0G050iBJ169CQAA">
+<XPD:ATTR name="Name" type="string">sat_id</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[9]" type="UMLAttribute" guid="KbUJ3zQudkuMliodZgdwoAAA">
+<XPD:ATTR name="Name" type="string">sat_polarisation</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Attributes[10]" type="UMLAttribute" guid="I6rm/D6pekmaDTzLw9FT/wAA">
+<XPD:ATTR name="Name" type="string">Attribute2</XPD:ATTR>
+<XPD:REF name="Owner">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[13]" type="UMLSignal" guid="IK4ie4RbI0mW+299Nj4+3AAA">
+<XPD:ATTR name="Name" type="string">CListen</XPD:ATTR>
+<XPD:ATTR name="Documentation" type="string"> /**正在播放的节目因收看等级ä¸å¤Ÿè¢«åœæ­¢*/
+ public static final int TYPE_PROGRAM_BLOCK = 1;
+ /**正在播放的节目从BLOCK状æ€æ¢å¤*/
+ public static final int TYPE_PROGRAM_UNBLOCK = 2;
+ /**没有信å·*/
+ public static final int TYPE_SIGNAL_LOST = 3;
+ /**ä¿¡å·æ¢å¤*/
+ public static final int TYPE_SIGNAL_RESUME = 4;
+ /**节目数æ®åœæ­¢*/
+ public static final int TYPE_DATA_LOST = 5;
+ /**节目数æ®æ¢å¤*/
+ public static final int TYPE_DATA_RESUME = 6;
+ /**预约æ醒*/
+ public static final int TYPE_BOOKING_REMIND = 7;
+ /**预约开始*/
+ public static final int TYPE_BOOKING_START = 8;
+ /**é…置项被修改*/
+ public static final int TYPE_CONFIG_CHANGED = 9;
+ /**频é“æœç´¢è¿›åº¦*/
+ public static final int TYPE_SCAN_PROGRESS = 10;
+ /**频é“æœç´¢ç»“æŸï¼Œå¼€å§‹å­˜å‚¨ */
+ public static final int TYPE_SCAN_STORE_BEGIN = 11;
+ /**频é“æœç´¢å­˜å‚¨å®Œæ¯•*/
+ public static final int TYPE_SCAN_STORE_END = 12;
+ /**频é“æœç´¢å®Œæˆ*/
+ public static final int TYPE_SCAN_END = 13;
+ /**正在播放节目相关信æ¯æ›´æ–°*/
+ public static final int TYPE_PROGRAM_UPDATE = 14;
+ /**节目开始播放*/
+ public static final int TYPE_PROGRAM_START = 15;
+ /**节目åœæ­¢æ’­æ”¾*/
+ public static final int TYPE_PROGRAM_STOP = 16;
+ /**TV系统时间更新*/
+ public static final int TYPE_TIME_UPDATE = 17;
+ /**事件信æ¯æ›´æ–°*/
+ public static final int TYPE_EVENT_UPDATE = 18;
+ /**输入æºåˆ‡æ¢*/
+ public static final int TYPE_INPUT_SOURCE_CHANGED = 19;
+ /**请求播放节目å·*/
+ public static final int TYPE_PROGRAM_NUMBER = 20;
+ /**录åƒåˆ—表更新*/
+ public static final int TYPE_RECORDS_UPDATE = 21;
+ /**录åƒå†²çª*/
+ public static final int TYPE_RECORD_CONFLICT = 22;
+ /**录åƒå·²ç»“æŸ*/
+ public static final int TYPE_RECORD_END = 23;
+ /**VGAä¿¡å·è°ƒæ•´æˆåŠŸ*/
+ public static final int TYPE_VGA_ADJUST_OK = 24;
+ /**VGAä¿¡å·è°ƒæ•´å¤±è´¥*/
+ public static final int TYPE_VGA_ADJUST_FAILED = 25;
+ /**VGAä¿¡å·è°ƒæ•´ä¸­*/
+ public static final int TYPE_VGA_ADJUST_DOING = 26;
+ /**ä¿¡å·æ”¹å˜*/
+ public static final int TYPE_SIG_CHANGE = 27;
+ /**盲扫进度*/
+ public static final int TYPE_BLINDSCAN_PROGRESS = 28;
+ /**盲扫新Channel*/
+ public static final int TYPE_BLINDSCAN_NEWCHANNEL = 29;
+ /**盲扫结æŸ*/
+ public static final int TYPE_BLINDSCAN_END = 30;
+ /**å«æ˜Ÿè®¾å¤‡LNB与Switché…置生效*/
+ public static final int TYPE_SEC_LNBSSWITCHCFGVALID = 31;
+ /**diseqc马达åœæ­¢è½¬åŠ¨*/
+ public static final int TYPE_SEC_POSITIONERSTOP= 32;
+ /**diseqc马达ç¦æ­¢é™åˆ¶*/
+ public static final int TYPE_SEC_POSITIONERDISABLELIMIT= 33;
+ /**diseqc马达东å‘é™åˆ¶è®¾ç½®*/
+ public static final int TYPE_SEC_POSITIONEREASTLIMIT= 34;
+ /**diseqc马达西å‘é™åˆ¶è®¾ç½®*/
+ public static final int TYPE_SEC_POSITIONERWESTLIMIT= 35;
+ /**diseqc马达东å‘转动*/
+ public static final int TYPE_SEC_POSITIONEREAST= 36;
+ /**diseqc马达西å‘转动*/
+ public static final int TYPE_SEC_POSITIONERWEST= 37;
+ /**diseqc马达存储ä½ç½®*/
+ public static final int TYPE_SEC_POSITIONERSTORE= 38;
+ /**diseqc马达转动到指定ä½ç½®*/
+ public static final int TYPE_SEC_POSITIONERGOTO= 39;
+ /**diseqc马达转动根æ®æœ¬åœ°ç»çº¬åº¦ä»¥åŠå«æ˜Ÿç»åº¦*/
+ public static final int TYPE_SEC_POSITIONERGOTOX= 40;
+ /**切æ¢è‡³æ–°èŠ‚ç›®*/
+ public static final int TYPE_PROGRAM_SWITCH = 41;
+ /**在当å‰é¢‘点æœç´¢DTV频é“*/
+ public static final int TYPE_SCAN_DTV_CHANNEL = 42;
+ /**æ•°æ®åº“导入/导出转æ¢æ“作开始*/
+ public static final int TYPE_TRANSFORM_DB_START = 43;
+ /**æ•°æ®åº“导入/导出转æ¢æ“作完æˆ*/
+ public static final int TYPE_TRANSFORM_DB_END = 44;
+ /**pvr/timeshifting回放开始*/
+ public static final int TYPE_PLAYBACK_START = 45;
+ /**pvr/timeshifting回放结æŸ*/
+ public static final int TYPE_PLAYBACK_STOP = 46;
+ /**节目音视频因被加扰而无法正常播放*/
+ public static final int TYPE_PROGRAM_SCRAMBLED = 47;
+
+
+
+æµçš„å˜åŒ–
+</XPD:ATTR>
+<XPD:REF name="Namespace">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:ATTR name="#Associations" type="integer">4</XPD:ATTR>
+<XPD:REF name="Associations[0]">TolxJOTDCkO5nyLC6ipkAwAA</XPD:REF>
+<XPD:REF name="Associations[1]">KeKc5deyJkKjIbzodSAF8QAA</XPD:REF>
+<XPD:REF name="Associations[2]">osliKvkWrU6Jd0FLz/mZngAA</XPD:REF>
+<XPD:REF name="Associations[3]">0WvOUzDyAEKgjZCRSx5J8gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLPackage" guid="ZRumjrTwgUamBDOstkagPgAA">
+<XPD:ATTR name="Name" type="string">atv</XPD:ATTR>
+<XPD:REF name="Namespace">bnJ8ggSchket3/t1l7Kx4wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">1</XPD:ATTR>
+<XPD:REF name="Views[0]">R7RBkUeb+E+5S8gvJN8+QQAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">XKFQZaAIH0SxD7YBXgkK0wAA</XPD:REF>
+<XPD:REF name="Associations[1]">nzRPyOcacU2J9Jf/0lCmawAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[23]" type="UMLAssociation" guid="1PikxOdVcU2P6grgcwgRvQAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Z3PDc4i/1UCiaxni9RpD2wAA</XPD:REF>
+<XPD:REF name="Views[1]">mhm++LaJkk6lJzcTz7hSFgAA</XPD:REF>
+<XPD:REF name="Views[2]">IxT95vhnIEyr12fdRQskKQAA</XPD:REF>
+<XPD:REF name="Views[3]">d+KXspkLsEa/YezZSZ7YZAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="AfVgLfyALEyP98guAbYHUAAA">
+<XPD:REF name="Association">1PikxOdVcU2P6grgcwgRvQAA</XPD:REF>
+<XPD:REF name="Participant">b8JuO/0C0Eq0GnJ0Q/tEWQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">08HUrDXL5EahpEFi9GJ9yQAA</XPD:REF>
+<XPD:REF name="Views[1]">QRLcMMAOqES9/c4itcB3vAAA</XPD:REF>
+<XPD:REF name="Views[2]">mQFH13/vQUucR5en5l/dUwAA</XPD:REF>
+<XPD:REF name="Views[3]">m0oKw9kT5k2CSLEOl9tV+gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="Fd/cvRV12USE+Vu6oJsMOgAA">
+<XPD:REF name="Association">1PikxOdVcU2P6grgcwgRvQAA</XPD:REF>
+<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">HxD2Y75aWkSp4d/0R6KiBgAA</XPD:REF>
+<XPD:REF name="Views[1]">K5rMwb6Iyka5HDC+pxIZOwAA</XPD:REF>
+<XPD:REF name="Views[2]">GfMJbs1/nkShjuqnA/8BBAAA</XPD:REF>
+<XPD:REF name="Views[3]">jXmYJVpZxkCkrM3yJ0eHmgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[24]" type="UMLAssociation" guid="6uW6VAT+jEG9Vy3cmRxPvgAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="0WvOUzDyAEKgjZCRSx5J8gAA">
+<XPD:REF name="Association">6uW6VAT+jEG9Vy3cmRxPvgAA</XPD:REF>
+<XPD:REF name="Participant">T1P4Xv7L+UuEzFqU+iyS5wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="nzRPyOcacU2J9Jf/0lCmawAA">
+<XPD:REF name="Association">6uW6VAT+jEG9Vy3cmRxPvgAA</XPD:REF>
+<XPD:REF name="Participant">ZRumjrTwgUamBDOstkagPgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[25]" type="UMLAssociation" guid="3PUgTTrP3U+LofrDCso/eAAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">JFsYjMcrU0GkgX8jFqUVZAAA</XPD:REF>
+<XPD:REF name="Views[1]">R57gZgKnBkm8aQCFy90fiQAA</XPD:REF>
+<XPD:REF name="Views[2]">GznyP+sffEKB3m9dw8jftQAA</XPD:REF>
+<XPD:REF name="Views[3]">NM8M6o1EGkWwEmKdXXKpPAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="PP9nsgv4Vkmbk1zEfct4VAAA">
+<XPD:REF name="Association">3PUgTTrP3U+LofrDCso/eAAA</XPD:REF>
+<XPD:REF name="Participant">xAj1pchzIEeSaRcR2+aFTwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">vVViwylf/Ei9ld6xTj7WdQAA</XPD:REF>
+<XPD:REF name="Views[1]">A5rd4V90HkCp3dmD7wYTbwAA</XPD:REF>
+<XPD:REF name="Views[2]">fhSnklGoSEqMAzQOJY57vwAA</XPD:REF>
+<XPD:REF name="Views[3]">n4gqVjygvUK59/wDDHYNJgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="usmo/t5V5UGA31IdVHUKyQAA">
+<XPD:REF name="Association">3PUgTTrP3U+LofrDCso/eAAA</XPD:REF>
+<XPD:REF name="Participant">UiYOh8D78E22qQeFeDZpLAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">AoZLFazfK0WqZzhHukFsAwAA</XPD:REF>
+<XPD:REF name="Views[1]">QGcntempZkeGNA54l7y1rAAA</XPD:REF>
+<XPD:REF name="Views[2]">pDauXlrgH0KfuJt30X8zxgAA</XPD:REF>
+<XPD:REF name="Views[3]">NKRAWeqgBEKgb6cHnYpt9QAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[26]" type="UMLPackage" guid="YAejusdLDUikLT0VX+S31wAA">
+<XPD:ATTR name="Name" type="string">MW</XPD:ATTR>
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">OmNL/SOM7k6GhKEEqGF0RgAA</XPD:REF>
+<XPD:REF name="Associations[1]">j/oong2hbUCcfqfb/9L1PwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[27]" type="UMLAssociation" guid="vd4u72TMwkKCHYSmzMvXNQAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="OmNL/SOM7k6GhKEEqGF0RgAA">
+<XPD:REF name="Association">vd4u72TMwkKCHYSmzMvXNQAA</XPD:REF>
+<XPD:REF name="Participant">YAejusdLDUikLT0VX+S31wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="0RZNIMepB0W9fkd6pMCEZwAA">
+<XPD:REF name="Association">vd4u72TMwkKCHYSmzMvXNQAA</XPD:REF>
+<XPD:REF name="Participant">CN6L5smMd0u/4SQDgGuxlAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[28]" type="UMLAssociation" guid="n5b/e2YQYka0DNd4RWbgbgAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="j/oong2hbUCcfqfb/9L1PwAA">
+<XPD:REF name="Association">n5b/e2YQYka0DNd4RWbgbgAA</XPD:REF>
+<XPD:REF name="Participant">YAejusdLDUikLT0VX+S31wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="frvBY5I3t0yZgEqYHUhfEQAA">
+<XPD:REF name="Association">n5b/e2YQYka0DNd4RWbgbgAA</XPD:REF>
+<XPD:REF name="Participant">7dRihysn8kefkb+6mJlwzgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[29]" type="UMLAssociation" guid="7aJQb5j/+kWV9Kb/0dqoJAAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Q/k+TeR21UWA0JPwiSZAnwAA</XPD:REF>
+<XPD:REF name="Views[1]">C2jwipMyN0iMiEays2pVbQAA</XPD:REF>
+<XPD:REF name="Views[2]">MxF6R3nqrk+nOid9gUoepAAA</XPD:REF>
+<XPD:REF name="Views[3]">5CzND/56UUuAy2C5OXPJGAAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="C7X0ILbZrkWDVQ5Vc+PT/wAA">
+<XPD:REF name="Association">7aJQb5j/+kWV9Kb/0dqoJAAA</XPD:REF>
+<XPD:REF name="Participant">JCgv4vk16U6BbVcoQFmlVwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">2P5BNH8K/UKYeriBTZAbSgAA</XPD:REF>
+<XPD:REF name="Views[1]">X0Z4arOj+EWceCda6Sj0vgAA</XPD:REF>
+<XPD:REF name="Views[2]">nbxLBw93Oka1PVwDZftA2QAA</XPD:REF>
+<XPD:REF name="Views[3]">lKhOSy40pUOJhnfmNzIx5AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="Dzfwehs+P0e8CyC/holLewAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">7aJQb5j/+kWV9Kb/0dqoJAAA</XPD:REF>
+<XPD:REF name="Participant">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">VSR1os7RckKbbg+wZ6UPWwAA</XPD:REF>
+<XPD:REF name="Views[1]">3yHNXWsgu0eaPzi0F9a3dgAA</XPD:REF>
+<XPD:REF name="Views[2]">+gO4BIQphEShtlup7FhfcgAA</XPD:REF>
+<XPD:REF name="Views[3]">laRXvwF4WE2wUODF6aCNSQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[30]" type="UMLAssociation" guid="6r7WWefo1kK4HXJ46+UuHwAA">
+<XPD:REF name="Namespace">dZ4UyetzSE+rDT9vQthF9wAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">2tALOFJiukSZiwAj9gBDIQAA</XPD:REF>
+<XPD:REF name="Views[1]">BM0ZC/TOp0CzIS/dSFOgMQAA</XPD:REF>
+<XPD:REF name="Views[2]">911s2zFZYUCPtLOmXSDdDgAA</XPD:REF>
+<XPD:REF name="Views[3]">bOeJui9AgkWX+he6KT6czQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="+M+2f65R0UCJH6UP90YGAQAA">
+<XPD:REF name="Association">6r7WWefo1kK4HXJ46+UuHwAA</XPD:REF>
+<XPD:REF name="Participant">K+kTKNnFak+/Lo9L/RD0ugAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">2U407qHmXE+0VHF/y4trXwAA</XPD:REF>
+<XPD:REF name="Views[1]">dAD5Dd+Px0eU/Z7MNaXtWgAA</XPD:REF>
+<XPD:REF name="Views[2]">16BTtqnINEq6DZln/1Uc4AAA</XPD:REF>
+<XPD:REF name="Views[3]">1RtPOXDsOEuSNTqKSxFAKAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="AM/xtV731kSTTZbv0mmefgAA">
+<XPD:REF name="Association">6r7WWefo1kK4HXJ46+UuHwAA</XPD:REF>
+<XPD:REF name="Participant">SX+aNGg0j0WtdR26+LZ7OgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">lMa33WFxzU2ojAIXkT9IwAAA</XPD:REF>
+<XPD:REF name="Views[1]">Ehl7/9ciY0mjVGRlJGzTegAA</XPD:REF>
+<XPD:REF name="Views[2]">MAu3FLtcFkOt8a9+Yj8MBAAA</XPD:REF>
+<XPD:REF name="Views[3]">FstmADGG7k2p8GVFXyT/GAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[3]" type="UMLModel" guid="PS0LMSpdO0O+FHz16P77KAAA">
+<XPD:ATTR name="Name" type="string">Implementation Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">implementationModel</XPD:ATTR>
+<XPD:REF name="Namespace">CoZuu0bDp0eooW1pQg6aQwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLComponentDiagram" guid="8lc98jz+106sHki62uo59wAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:REF name="DiagramOwner">PS0LMSpdO0O+FHz16P77KAAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLComponentDiagramView" guid="0wCA7NA3N0ei/8mtv/tB+gAA">
+<XPD:REF name="Diagram">8lc98jz+106sHki62uo59wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[4]" type="UMLModel" guid="Br3gILarcEaGGLO+RQTdrAAA">
+<XPD:ATTR name="Name" type="string">Deployment Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">deploymentModel</XPD:ATTR>
+<XPD:REF name="Namespace">CoZuu0bDp0eooW1pQg6aQwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLDeploymentDiagram" guid="etpVb7W50ECVJjSyvN9PGgAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:REF name="DiagramOwner">Br3gILarcEaGGLO+RQTdrAAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLDeploymentDiagramView" guid="I2wMY5Xl20qJVJcTZ7SuMgAA">
+<XPD:REF name="Diagram">etpVb7W50ECVJjSyvN9PGgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:BODY>
+</XPD:PROJECT>
diff --git a/tvapi/libtv/Android.mk b/tvapi/libtv/Android.mk
index 3b1f985..30aaed3 100644
--- a/tvapi/libtv/Android.mk
+++ b/tvapi/libtv/Android.mk
@@ -213,9 +213,6 @@ ifeq ($(strip $(BOARD_TVAPI_NO_VERSION)),)
LOCAL_CFLAGS+=-DTVAPI_BOARD_VERSION=\"$(TVAPI_TARGET_BOARD_VERSION)\"
endif
-
-
-
LOCAL_MODULE:= libtv
include $(BUILD_SHARED_LIBRARY)
diff --git a/tvapi/libtv/audio/audio_alsa.cpp b/tvapi/libtv/audio/audio_alsa.cpp
index 551e3c6..84ce046 100644
--- a/tvapi/libtv/audio/audio_alsa.cpp
+++ b/tvapi/libtv/audio/audio_alsa.cpp
@@ -1,1213 +1,1213 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <getopt.h>
-#include <pthread.h>
-#include <stdarg.h>
-#include <ctype.h>
-#include <math.h>
-#include <errno.h>
-#include <assert.h>
-#include <fcntl.h>
-#include <dlfcn.h>
-#include <tinyalsa/asoundlib.h>
-#include "CFbcCommunication.h"
-#include <sys/poll.h>
-#include <android/log.h>
-#include "tvsetting/audio_cfg.h"
-#include "audio_alsa.h"
-#include <cutils/properties.h>
-#define LOG_TAG "CAudioAlsa"
-#include "CTvLog.h"
-#include "audio_amaudio.h"
-
-static const int MainDigitLutBuf[CC_VOL_TRANS_LUT_BUF_SIZE] = {
- //
- 0, 40, 50, 60, 70, 87, 110, 120, 130, 140, // 0~9
- 150, 152, 155, 158, 161, 164, 167, 170, 173, 174, // 10~19
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, // 20~29
- 191, 191, 192, 193, 194, 195, 196, 196, 197, 197, // 30~39
- 198, 198, 198, 199, 199, 200, 200, 201, 201, 201, // 40~49
- 202, 202, 202, 203, 203, 203, 203, 204, 204, 204, // 50~59
- 205, 205, 205, 205, 206, 206, 206, 206, 206, 207, // 60~69
- 207, 207, 207, 207, 207, 207, 207, 208, 208, 208, // 70~79
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 209, // 80~89
- 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, // 90~99
- 209, // 100
-};
-
-static const int SupperBassDigitLutBuf[CC_VOL_TRANS_LUT_BUF_SIZE] = {
- //
- 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, // 0~9
- 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, // 10~19
- 141, 142, 143, 144, 145, 147, 147, 148, 148, 149, // 20~29
- 149, 150, 150, 151, 151, 152, 152, 153, 153, 154, // 30~39
- 154, 155, 155, 156, 156, 157, 157, 158, 158, 159, // 40~49
- 160, 160, 160, 160, 161, 161, 161, 161, 162, 162, // 50~59
- 162, 163, 163, 163, 163, 164, 164, 164, 165, 165, // 60~69
- 165, 165, 166, 166, 166, 167, 168, 169, 170, 171, // 70~79
- 173, 174, 175, 176, 177, 179, 180, 181, 182, 183, // 80~89
- 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, // 90~99
- 197 // 100
-};
-
-CAudioAlsa::CAudioAlsa()
-{
- int card_id;
- card_id = get_aml_card();
- LOGD("[%s:%d] card_id:%d\n", __FUNCTION__, __LINE__, card_id);
- mpMixer = mixer_open(card_id);
-
- card_id = get_USB_Audio_card();
- LOGD("[%s:%d] card_id:%d\n", __FUNCTION__, __LINE__, card_id);
- mpUsbMixer = mixer_open(card_id);
- mMainVolumeBalanceVal = 0;
- mMainVolumeGainVal = 0;
- mSupperBassVolumeGainVal = 0;
- memcpy(mMainDigitLutBuf, MainDigitLutBuf, CC_VOL_TRANS_LUT_BUF_SIZE);
- memcpy(mSupperBassDigitLutBuf, SupperBassDigitLutBuf, CC_VOL_TRANS_LUT_BUF_SIZE);
-}
-
-CAudioAlsa::~CAudioAlsa()
-{
- if (NULL != mpMixer) {
- mixer_close(mpMixer);
- }
-
- if (NULL != mpUsbMixer) {
- mixer_close(mpUsbMixer);
- }
-}
-
-int CAudioAlsa::get_aml_card()
-{
- int card = -1, err = 0;
- int fd = -1;
- char read_buf[512], *pd = NULL;
- static const char *const SOUND_CARDS_PATH = "/proc/asound/cards";
- fd = open(SOUND_CARDS_PATH, O_RDONLY);
- if (fd < 0) {
- ALOGE("ERROR: failed to open config file %s error: %d\n", SOUND_CARDS_PATH, errno);
- close(fd);
- return -EINVAL;
- }
- memset(read_buf, 0x0, 512);
- err = read(fd, read_buf, 512);
- if (fd < 0) {
- ALOGE("ERROR: failed to read config file %s error: %d\n", SOUND_CARDS_PATH, errno);
- close(fd);
- return -EINVAL;
- }
- pd = strstr(read_buf, "AML");
- card = *(pd - 3) - '0';
- close(fd);
- return card;
-}
-
-int CAudioAlsa::AudioControlSetValue(int val_count, int data_buf[], char *match_names)
-{
- struct mixer_ctl *pctl;
- unsigned int expected_val_count;
- unsigned int value_index;
-
- if (NULL == mpMixer) {
- LOGE("[%s:%d] Failed to open mixer\n", __FUNCTION__, __LINE__);
- goto err_exit;
- }
-
- pctl = mixer_get_ctl_by_name(mpMixer, match_names);
- if (NULL == pctl) {
- LOGE("[%s:%d] Failed to get mixer control for:%s\n", __FUNCTION__, __LINE__, match_names);
- goto err_exit;
- }
- expected_val_count = mixer_ctl_get_num_values(pctl);
- if (expected_val_count != (unsigned int)val_count) {
- LOGE("[%s:%d] val_count != expected_val_count\n", __FUNCTION__, __LINE__);
- goto err_exit;
- }
- for (value_index = 0; value_index < expected_val_count; value_index++) {
- if (mixer_ctl_set_value(pctl, value_index, data_buf[value_index]) != 0) {
- LOGE("[%s:%d] Failed to set value:%d\n", __FUNCTION__, __LINE__, value_index);
- goto err_exit;
- }
- }
- return 0;
-err_exit:
- return -1;
-}
-
-int CAudioAlsa::AudioControlGetValue(int val_count, int ret_buf[], char *match_names)
-{
- struct mixer_ctl *pctl;
- unsigned int expected_val_count;
- unsigned int value_index;
-
- if (NULL == mpMixer) {
- LOGE("[%s:%d] Failed to open mixer\n", __FUNCTION__, __LINE__);
- goto err_exit;
- }
- pctl = mixer_get_ctl_by_name(mpMixer, match_names);
- if (NULL == pctl) {
- LOGE("[%s:%d] Failed to get mixer control for:%s\n", __FUNCTION__, __LINE__, match_names);
- goto err_exit;
- }
- expected_val_count = mixer_ctl_get_num_values(pctl);
- if (expected_val_count != (unsigned int)val_count) {
- LOGE("[%s:%d] val_count != expected_val_count\n", __FUNCTION__, __LINE__);
- goto err_exit;
- }
- for (value_index = 0; value_index < expected_val_count; value_index++) {
- ret_buf[value_index] = mixer_ctl_get_value(pctl, value_index);
- }
- return 0;
-err_exit:
- return -1;
-}
-
-int CAudioAlsa::get_USB_Audio_card()
-{
- int card = -1, err = 0;
- int fd = -1;
- char read_buf[512], *pd = NULL;
- static const char *const SOUND_CARDS_PATH = "/proc/asound/cards";
- fd = open(SOUND_CARDS_PATH, O_RDONLY);
- if (fd < 0) {
- ALOGE("ERROR: failed to open config file %s error: %d\n", SOUND_CARDS_PATH, errno);
- close(fd);
- return -EINVAL;
- }
- memset(read_buf, 0x0, 512);
- err = read(fd, read_buf, 512);
- if (fd < 0) {
- ALOGE("ERROR: failed to read config file %s error: %d\n", SOUND_CARDS_PATH, errno);
- close(fd);
- return -EINVAL;
- }
- pd = strstr(read_buf, "Receiver");
- if (pd == NULL) {
- ALOGE("ERROR: failed to read config file %s error: %d\n", SOUND_CARDS_PATH, errno);
- close(fd);
- return -EINVAL;
- }
-
- card = *(pd - 3) - '0';
- close(fd);
- return card;
-}
-
-int CAudioAlsa::HandleUSBAudioControlValue(int val_count, int data_buf[], int match_count, char **match_names)
-{
-
- struct mixer_ctl *pctl;
- unsigned int expected_val_count;
- unsigned int match_index;
- unsigned int value_index;
- char card_id_str[9] = {0};
-
- if (NULL == mpUsbMixer) {
- LOGE("[%s:%d] Failed to open mixer\n", __FUNCTION__, __LINE__);
- goto err_exit;
- }
-
- for (match_index = 0; match_index < match_count; match_index++) {
- pctl = mixer_get_ctl_by_name(mpUsbMixer, match_names[match_index]);
- if (NULL == pctl) {
- LOGE("[%s:%d] Failed to get mixer control for:%s\n", __FUNCTION__, __LINE__, match_names[match_index]);
- goto err_exit;
- }
- expected_val_count = mixer_ctl_get_num_values(pctl);
- if (expected_val_count != (unsigned int)val_count) {
- LOGE("[%s:%d] val_count != expected_val_count\n", __FUNCTION__, __LINE__);
- goto err_exit;
- }
- for (value_index = 0; value_index < expected_val_count; value_index++) {
- if (mixer_ctl_set_value(pctl, value_index, data_buf[value_index]) != 0) {
- LOGE("[%s:%d] Failed to set value:%d\n", __FUNCTION__, __LINE__, value_index);
- goto err_exit;
- }
- }
- }
-
- return 0;
-err_exit:
- return -1;
-}
-
-int CAudioAlsa::CheckVolume(int digit_vol, int digit_min, int digit_max, int hd_min,
- int hd_max)
-{
- int tmp_val = digit_vol;
-
- if (digit_vol < hd_min) {
- return hd_min;
- } else if (digit_vol > hd_max) {
- return hd_max;
- }
-
- return digit_vol;
-}
-
-int CAudioAlsa::GetTwoChannelVolume(int vol_buf[], int l_min_vol, int l_max_vol,
- int r_min_vol, int r_max_vol, char *match_names, int hd_min,
- int hd_max)
-{
- vol_buf[0] = 0;
- vol_buf[1] = 0;
- return AudioControlGetValue(2, vol_buf, match_names);
-}
-
-int CAudioAlsa::GetLineInMaxVol()
-{
- if (GetAudioArchitectureTypeCFG() == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
- return 84;
- }
-
- return 127;
-}
-
-int CAudioAlsa::GetLineOutMaxVol()
-{
- if (GetAudioArchitectureTypeCFG() == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
- return 84;
- }
-
- return 255;
-}
-
-#define CC_GET_ALSA_CTL_AUDIO_IN_SOURCE_NAME (0)
-#define CC_GET_ALSA_CTL_INTERNAL_DAC_LEFT_LINEIN_SEL_NAME (1)
-#define CC_GET_ALSA_CTL_INTERNAL_DAC_RIGHT_LINEIN_SEL_NAME (2)
-#define CC_GET_ALSA_CTL_INTERNAL_DAC_LINEIN_CAPTURE_VOLUME_NAME (3)
-#define CC_GET_ALSA_CTL_INTERNAL_DAC_LINEOUT_PLAYBACK_VOLUME_NAME (4)
-#define CC_GET_ALSA_CTL_I2S_MUTE_NAME (5)
-#define CC_GET_ALSA_CTL_SPDIF_MUTE_NAME (6)
-#define CC_GET_ALSA_CTL_HW_RESAMPLE_NAME (7)
-#define CC_GET_ALSA_CTL_EXTERNAL_DAC_MASTER_VOLUME_NAME (8)
-#define CC_GET_ALSA_CTL_EXTERNAL_DAC_CH1_VOLUME_NAME (9)
-#define CC_GET_ALSA_CTL_EXTERNAL_DAC_CH2_VOLUME_NAME (10)
-#define CC_GET_ALSA_CTL_EXTERNAL_DAC_CH3_VOLUME_NAME (11)
-#define CC_GET_ALSA_CTL_EXTERNAL_DAC_CH1_SWITCH_NAME (12)
-#define CC_GET_ALSA_CTL_EXTERNAL_DAC_CH2_SWITCH_NAME (13)
-#define CC_GET_ALSA_CTL_EXTERNAL_DAC_CH3_SWITCH_NAME (14)
-#define CC_GET_ALSA_CTL_EXTERNAL_DAC_EQ_MODE_NAME (15)
-#define CC_GET_ALSA_CTL_PCM_PLAYBACK_VOLUME (16)
-#define CC_GET_ALSA_CTL_PCM_PLAYBACK_SWITCH (17)
-#define CC_GET_ALSA_CTL_SETOUTPUT_SWAP (18)
-#define CC_GET_ALSA_CTL_AUDIO_IN_SWITCH (19)
-
-static char gG9AlsaNames[32][48] = {
- {"Audio In Source"},//0
- {"Linein right switch"},//1
- {"Linein left switch"},
- {"ADC Digital Capture Volume"},
- {"DAC Digital Playback Volume"},
- {"Audio i2s mute"},//5
- {"Audio spdif mute"},
- {"Hardware resample enable"},//8
- {"AMP Master Volume"},
- {"AMP Ch1 Volume"},//10
- {"AMP Ch2 Volume"},
- {"AMP Ch3 Volume"},
- {"AMP Ch1 Switch"},
- {"AMP Ch2 Switch"},
- {"AMP Ch3 Switch"},//15
- {"AMP EQ Mode"},
- {"PCM Playback Volume"},
- {"PCM Playback Switch"},
- {"Output Swap"},
- {"AudioIn Switch"},//19
-};
-
-
-char *CAudioAlsa::GetAlsaControlName(int get_type)
-{
- if (GetAudioArchitectureTypeCFG() == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
- /*if(get_type == CC_GET_ALSA_CTL_AUDIO_IN_SOURCE_NAME) {
- return gAudioInSourceNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_INTERNAL_DAC_LEFT_LINEIN_SEL_NAME) {
- strcpy(gInternalDacLeftLineInSelNameBuf, "Left LINEIN Select");
- return gInternalDacLeftLineInSelNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_INTERNAL_DAC_RIGHT_LINEIN_SEL_NAME) {
- strcpy(gInternalDacRightLineInSelNameBuf, "Right LINEIN Select");
- return gInternalDacRightLineInSelNameBuf;
- } else if (get_type == CC_GET_ALSA_CTL_INTERNAL_DAC_LINEIN_CAPTURE_VOLUME_NAME) {
- strcpy(gInternalDacLineInCaptureVolumeNameBuf, "LINEIN Capture Volume");
- return gInternalDacLineInCaptureVolumeNameBuf;
- } else if (get_type == CC_GET_ALSA_CTL_INTERNAL_DAC_LINEOUT_PLAYBACK_VOLUME_NAME) {
- strcpy(gInternalDacLineOutCaptureVolumeNameBuf, "LINEOUT Playback Volume");
- return gInternalDacLineOutCaptureVolumeNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_I2S_MUTE_NAME) {
- strcpy(gI2SMuteNameBuf, "Audio i2s mute");
- return gI2SMuteNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_SPDIF_MUTE_NAME) {
- strcpy(gSpdifMuteNameBuf, "Audio spdif mute");
- return gSpdifMuteNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_HW_RESAMPLE_NAME) {
- strcpy(gHWResampleNameBuf, "Hardware resample enable");
- return gHWResampleNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_MASTER_VOLUME_NAME) {
- strcpy(gExternalDacMasterVolumeNameBuf, "AMP Master Volume");
- return gExternalDacMasterVolumeNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_CH1_VOLUME_NAME) {
- strcpy(gExternalDacCh1VolumeNameBuf, "AMP Ch1 Volume");
- return gExternalDacCh1VolumeNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_CH2_VOLUME_NAME) {
- strcpy(gExternalDacCh2VolumeNameBuf, "AMP Ch2 Volume");
- return gExternalDacCh2VolumeNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_CH3_VOLUME_NAME) {
- strcpy(gExternalDacCh3VolumeNameBuf, "AMP Ch3 Volume");
- return gExternalDacCh3VolumeNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_CH1_SWITCH_NAME) {
- strcpy(gExternalDacCh1SwitchNameBuf, "AMP Ch1 Switch");
- return gExternalDacCh1SwitchNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_CH2_SWITCH_NAME) {
- strcpy(gExternalDacCh2SwitchNameBuf, "AMP Ch2 Switch");
- return gExternalDacCh2SwitchNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_CH3_SWITCH_NAME) {
- strcpy(gExternalDacCh3SwitchNameBuf, "AMP Ch3 Switch");
- return gExternalDacCh3SwitchNameBuf;
- } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_EQ_MODE_NAME) {
- strcpy(gExternalDacEQModeNameBuf, "AMP EQ Mode");
- return gExternalDacEQModeNameBuf;
- }*/
- } else {
- return gG9AlsaNames[get_type];
- }
-
- return NULL;
-}
-
-int gAudioInSource = -1;
-
-int CAudioAlsa::SetAudioInSource(int source_type)
-{
- int set_val = 0;
- char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_AUDIO_IN_SOURCE_NAME);
-
- if (GetAudioArchitectureTypeCFG() == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
- if (source_type != 0 && source_type != 1) {
- return -1;
- }
-
- if (source_type == CC_AUDIO_IN_SOURCE_LINEIN) {
- set_val = 0;
- } else if (source_type == CC_AUDIO_IN_SOURCE_HDMI) {
- set_val = 1;
- }
- } else {
- if (source_type != 0 && source_type != 1 && source_type != 2) {
- return -1;
- }
-
- set_val = source_type;
- }
-
- gAudioInSource = set_val;
-
- return AudioControlSetValue(1, &set_val, match_names);
-}
-
-int CAudioAlsa::GetAudioInSource(void)
-{
- char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_AUDIO_IN_SOURCE_NAME);
- int source_type = 0;
-
- source_type = gAudioInSource;
- if (source_type == -1) {
- AudioControlGetValue(1, &source_type, match_names);
- }
-
- return source_type;
-}
-
-int CAudioAlsa::SetInternalDacLineInSelectChannel(int line_in_number)
-{
- int tmp_ret = 0;
- char *match_names = NULL;
-
- if (line_in_number < 0 || line_in_number > 7) {
- return -1;
- }
-
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_INTERNAL_DAC_LEFT_LINEIN_SEL_NAME);
- tmp_ret |= AudioControlSetValue(1, &line_in_number, match_names);
-
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_INTERNAL_DAC_RIGHT_LINEIN_SEL_NAME);
- tmp_ret |= AudioControlSetValue(1, &line_in_number, match_names);
-
- return tmp_ret;
-}
-
-int CAudioAlsa::SetInternalDacLineInCaptureVolume(int l_vol, int r_vol)
-{
- int max_val = GetLineInMaxVol();
- char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_INTERNAL_DAC_LINEIN_CAPTURE_VOLUME_NAME);
- int VolumeBuf[2];
-
- VolumeBuf[0] = CheckVolume(l_vol, 0, max_val, 0, max_val);
- VolumeBuf[1] = CheckVolume(r_vol, 0, max_val, 0, max_val);
-
- return AudioControlSetValue(2, VolumeBuf, match_names);
-}
-
-int CAudioAlsa::GetInternalDacLineInCaptureVolume(int vol_buf[])
-{
- int max_val = GetLineInMaxVol();
- char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_INTERNAL_DAC_LINEIN_CAPTURE_VOLUME_NAME);
-
- return GetTwoChannelVolume(vol_buf, 0, max_val, 0, max_val, match_names, 0, max_val);
-}
-
-int CAudioAlsa::SetInternalDacLineOutPlayBackVolume(int l_vol, int r_vol)
-{
- int max_val = GetLineOutMaxVol();
- char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_INTERNAL_DAC_LINEOUT_PLAYBACK_VOLUME_NAME);
- int VolumeBuf[2];
-
- VolumeBuf[0] = CheckVolume(l_vol, 0, max_val, 0, max_val);
- VolumeBuf[1] = CheckVolume(r_vol, 0, max_val, 0, max_val);
-
- return AudioControlSetValue(2, VolumeBuf, match_names);
-}
-
-int CAudioAlsa::GetInternalDacLineOutPlayBackVolume(int vol_buf[])
-{
- int max_val = GetLineOutMaxVol();
- char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_INTERNAL_DAC_LINEOUT_PLAYBACK_VOLUME_NAME);
-
- return GetTwoChannelVolume(vol_buf, 0, max_val, 0, max_val, match_names, 0, max_val);
-}
-
-int CAudioAlsa::SetAudioPcmPlaybackVolume(int vol)
-{
- if (get_USB_Audio_card() == -EINVAL) return 0;
- char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_PCM_PLAYBACK_VOLUME);
- return HandleUSBAudioControlValue(1, &vol, 1, &match_names);
-}
-
-int CAudioAlsa::SetAudioPcmPlaybackSwitch(int vol)
-{
- if (get_USB_Audio_card() == -EINVAL) return 0;
- char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_PCM_PLAYBACK_SWITCH);
- return HandleUSBAudioControlValue(1, &vol, 1, &match_names);
-}
-
-int CAudioAlsa::SetExternalDacChannelSwitch(int chan_ind, int switch_val)
-{
- char *match_names = NULL;
-
- if (chan_ind == 1) {
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_CH1_SWITCH_NAME);
- } else if (chan_ind == 2) {
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_CH2_SWITCH_NAME);
- } else if (chan_ind == 3) {
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_CH3_SWITCH_NAME);
- } else {
- return -1;
- }
-
- return AudioControlSetValue(1, &switch_val, match_names);
-}
-
-int CAudioAlsa::SetExternalDacChannelVolume(int chan_ind, int main_vol)
-{
- int tmp_ret = 0;
- char *match_names = NULL;
-
- if (chan_ind == 0) {
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_MASTER_VOLUME_NAME);
- } else if (chan_ind == 1) {
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_CH1_VOLUME_NAME);
- } else if (chan_ind == 2) {
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_CH2_VOLUME_NAME);
- } else if (chan_ind == 3) {
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_CH3_VOLUME_NAME);
- } else {
- return -1;
- }
-
- return AudioControlSetValue(1, &main_vol, match_names);
-}
-int CAudioAlsa::SetAudioSwitchIO(int value)
-{
- char *match_names = gG9AlsaNames[CC_GET_ALSA_CTL_AUDIO_IN_SWITCH];
-
- return AudioControlSetValue(1, &value, match_names);
-}
-int CAudioAlsa::SetOutput_Swap(int value)
-{
- char *match_names = gG9AlsaNames[CC_GET_ALSA_CTL_SETOUTPUT_SWAP];
-
- return AudioControlSetValue(1, &value, match_names);
-}
-
-int CAudioAlsa::SetExternalDacEQMode(int mode_val)
-{
- char *match_names = NULL;
-
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_EQ_MODE_NAME);
- return AudioControlSetValue(1, &mode_val, match_names);
-}
-
-int CAudioAlsa::SetI2SMute(int mute_status)
-{
- char *match_names = NULL;
-
- if (mute_status != CC_I2S_MUTE_ON && mute_status != CC_I2S_MUTE_OFF) {
- LOGE("%s, I2S mute value (%d) error!\n", __FUNCTION__, mute_status);
- return -1;
- }
-
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_I2S_MUTE_NAME);
- return AudioControlSetValue(1, &mute_status, match_names);
-}
-
-int CAudioAlsa::SetSPDIFMute(int mute_status)
-{
- char *match_names = NULL;
-
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_SPDIF_MUTE_NAME);
- return AudioControlSetValue(1, &mute_status, match_names);
-}
-
-#define CC_SAMPLE_BUF_SIZE (32)
-
-enum CC_HW_RESAMPLE_TYPE {
- CC_HW_RESAMPLE_DISABLE,
- CC_HW_RESAMPLE_48K,
- CC_HW_RESAMPLE_44K,
- CC_HW_RESAMPLE_32K,
-};
-
-int CAudioAlsa::SetHardwareResample(int sr)
-{
- int i = 0, set_val = 0, tmp_val = 0;
- int diff_val = 0x7FFFFFFF, diff_ind = -1;
- char *match_names = NULL;
- int sample_buf[CC_SAMPLE_BUF_SIZE] = {48000, 44000, 32000, -1};
-
- if (sr < 0) {
- set_val = 0;
- } else {
- for (i = 0; i < CC_SAMPLE_BUF_SIZE; i++) {
- if (sample_buf[i] < 0) {
- break;
- }
-
- if (sample_buf[i] >= sr) {
- tmp_val = sample_buf[i] - sr;
- } else {
- tmp_val = sr - sample_buf[i];
- }
-
- if (tmp_val <= diff_val) {
- diff_val = tmp_val;
- diff_ind = i;
- }
- }
-
- if (diff_ind < 0) {
- set_val = 0;
- } else {
- set_val = diff_ind + 1;
- }
- }
-
- LOGD("%s, set_val = %d.\n", __FUNCTION__, set_val);
- match_names = GetAlsaControlName(CC_GET_ALSA_CTL_HW_RESAMPLE_NAME);
- return AudioControlSetValue(1, &set_val, match_names);
-}
-
-int CAudioAlsa::SetMixerBypassSwitch(int switch_val)
-{
- char match_names[48] = "Output Mixer Bypass Switch" ;
- int ctl_buf[2];
-
- if (switch_val != 0 && switch_val != 1) {
- return -1;
- }
-
- ctl_buf[0] = switch_val;
- ctl_buf[1] = switch_val;
-
- return AudioControlSetValue(2, ctl_buf, match_names);
-}
-
-int CAudioAlsa::GetMixerBypassSwitch(void)
-{
- char match_names[48] = "Output Mixer Bypass Switch" ;
- int ctl_buf[2];
-
- AudioControlSetValue(2, ctl_buf, match_names);
-
- return ctl_buf[0];
-}
-
-int CAudioAlsa::SetMixerDacSwitch(int switch_val)
-{
- char match_names[48] = "Output Mixer DAC Switch" ;
- int ctl_buf[2];
-
- if (switch_val != 0 && switch_val != 1) {
- return -1;
- }
-
- ctl_buf[0] = switch_val;
- ctl_buf[1] = switch_val;
-
- return AudioControlSetValue(2, ctl_buf, match_names);
-}
-
-int CAudioAlsa::GetMixerDacSwitch(void)
-{
- char *match_names = "Output Mixer DAC Switch" ;
- int ctl_buf[2];
-
- AudioControlGetValue(2, ctl_buf, match_names);
-
- return ctl_buf[0];
-}
-
-int CAudioAlsa::TransVolumeBarVolToDigitalVol(int digit_lut_buf[], int digit_vol,
- int digit_min, int digit_max, int hd_min, int hd_max)
-{
- if (digit_vol >= CC_VOL_TRANS_LUT_BUF_SIZE) {
- return digit_lut_buf[CC_VOL_TRANS_LUT_BUF_SIZE - 1];
- } else if (digit_vol < 0) {
- return digit_lut_buf[CC_VOL_TRANS_LUT_BUF_SIZE - 1];
- }
-
- return digit_lut_buf[digit_vol];
-}
-
-int CAudioAlsa::TransDigitalVolToVolumeBarVol(int digit_lut_buf[], int hd_vol, int hd_min,
- int hd_max, int digit_min, int digit_max)
-{
- int i;
-
- for (i = 0; i < CC_VOL_TRANS_LUT_BUF_SIZE; i++) {
- if (digit_lut_buf[i] == hd_vol)
- break;
- }
-
- if (i < CC_VOL_TRANS_LUT_BUF_SIZE)
- return i;
-
- for (i = 0; i < CC_VOL_TRANS_LUT_BUF_SIZE - 1; i++) {
- if (digit_lut_buf[i] > hd_vol && digit_lut_buf[i + 1] < hd_vol)
- break;
- }
-
- if (i < CC_VOL_TRANS_LUT_BUF_SIZE - 1)
- return i;
-
- return digit_max;
-}
-
-void CAudioAlsa::SetMainVolDigitLutBuf(int digit_lut_buf[])
-{
- memcpy((void *) mMainDigitLutBuf, digit_lut_buf,
- CC_VOL_TRANS_LUT_BUF_SIZE * sizeof(int));
-}
-
-void CAudioAlsa::SetSupperBassVolDigitLutBuf(int digit_lut_buf[])
-{
- memcpy((void *) mSupperBassDigitLutBuf, digit_lut_buf,
- CC_VOL_TRANS_LUT_BUF_SIZE * sizeof(int));
-}
-
-int CAudioAlsa::SetDacMute(int mute_state, int mute_type)
-{
- int tmp_ret = 0;
-
- if (mute_type & CC_DAC_MUTE_TYPE_INTERNAL) {
- tmp_ret |= SetInternalDacMute(mute_state);
- }
-
- if (mute_type & CC_DAC_MUTE_TYPE_EXTERNAL) {
- tmp_ret |= SetExternalDacMute(mute_state);
- setAudioPcmPlaybackMute(mute_state);
- }
-
- return tmp_ret;
-}
-
-int CAudioAlsa::SetDacMainVolume(int main_vol)
-{
- int tmp_ret = 0;
- int aud_arch_type = GetAudioArchitectureTypeCFG();
-
- if (aud_arch_type == CC_DAC_T866_INTERNAL_DAC) {
- tmp_ret = SetInternalDacMainVolume(main_vol);
- } else {
- tmp_ret = SetExternalDacMainVolume(main_vol);
- }
-
- return tmp_ret;
-}
-
-int CAudioAlsa::SetDacSupperBassVolume(int tmp_vol)
-{
- int aud_arch_type = GetAudioArchitectureTypeCFG();
-
- if (aud_arch_type == CC_DAC_T866_INTERNAL_DAC) {
- return 0;
- }
-
- return SetExternalDacSupperBassVolume(tmp_vol);
-}
-
-int CAudioAlsa::SetDacEQMode(int mode_val)
-{
- int aud_arch_type = GetAudioArchitectureTypeCFG();
-
- if (aud_arch_type == CC_DAC_T866_INTERNAL_DAC) {
- return 0;
- }
-
- return SetExternalDacEQ(mode_val);
-}
-
-int CAudioAlsa::SetBalanceValue(int balance_val)
-{
- int tmp_val = 0;
- int aud_arch_type = GetAudioArchitectureTypeCFG();
-
- tmp_val = mMainVolumeBalanceVal;
- mMainVolumeBalanceVal = balance_val;
-
- if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC) {
- SendCmdToOffBoardFBCExternalDac(AUDIO_CMD_SET_BALANCE, balance_val);
- return 0;
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB) {
- SendCmdToOffBoardCustomerLibExternalDac(AUDIO_CMD_SET_BALANCE, balance_val);
- return 0;
- }
-
- return -1;
-}
-
-int CAudioAlsa::GetBalanceValue()
-{
- int tmp_val = 0;
- tmp_val = mMainVolumeBalanceVal;
- return tmp_val;
-}
-
-int CAudioAlsa::SetMainVolumeGain(int gain_val)
-{
- int tmp_val = 0;
- tmp_val = mMainVolumeGainVal;
- mMainVolumeGainVal = gain_val;
- return tmp_val;
-}
-
-int CAudioAlsa::GetMainVolumeGain()
-{
- int tmp_val = 0;
- tmp_val = mMainVolumeGainVal;
- return tmp_val;
-}
-
-int CAudioAlsa::SetSupperBassVolumeGain(int gain_val)
-{
- int tmp_val = 0;
- tmp_val = mSupperBassVolumeGainVal;
- mSupperBassVolumeGainVal = gain_val;
- return tmp_val;
-}
-
-int CAudioAlsa::GetSupperBassVolumeGain()
-{
- int tmp_val = 0;
- tmp_val = mSupperBassVolumeGainVal;
- return tmp_val;
-}
-
-int CAudioAlsa::SetDacAudioSourceType(int source_type)
-{
- int aud_arch_type = GetAudioArchitectureTypeCFG();
-
- if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_ON_BOARD || aud_arch_type == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC) {
- SendCmdToOffBoardFBCExternalDac(AUDIO_CMD_SET_SOURCE, source_type);
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB) {
- SendCmdToOffBoardCustomerLibExternalDac(AUDIO_CMD_SET_SOURCE, source_type);
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_DIGITAL) {
- }
-
- return 0;
-}
-
-int CAudioAlsa::CalculateBalanceVol(int max_vol, int balance_val, int vol_buf[])
-{
- int bal_mid_vol = 0, bal_cal_len = 0;
- int tmp_val = 0;
-
- if (balance_val < CC_MIN_SOUND_BALANCE_VAL
- || balance_val > CC_MAX_SOUND_BALANCE_VAL) {
- return -1;
- }
-
- vol_buf[0] = max_vol;
- vol_buf[1] = max_vol;
-
- bal_mid_vol = (CC_MIN_SOUND_BALANCE_VAL + CC_MAX_SOUND_BALANCE_VAL) / 2;
- bal_cal_len = (CC_MAX_SOUND_BALANCE_VAL - CC_MIN_SOUND_BALANCE_VAL) / 2;
-
- if (balance_val == bal_mid_vol) {
- LOGD(
- "%s, balance value = %d, bal_mid_vol = %d, vol_buf[0] = %d, vol_buf[1] = %d.\n",
- __FUNCTION__, balance_val, bal_mid_vol, vol_buf[0], vol_buf[1]);
- return 0;
- } else if (balance_val < bal_mid_vol) {
- vol_buf[1] = (bal_cal_len - (bal_mid_vol - balance_val)) * max_vol / bal_cal_len;
- } else if (balance_val > bal_mid_vol) {
- vol_buf[0] = (bal_cal_len - (balance_val - bal_mid_vol)) * max_vol / bal_cal_len;
- }
-
- if (GetAudioAmplifierBalanceExchangeCFG() != 0) {
- tmp_val = vol_buf[0];
- vol_buf[0] = vol_buf[1];
- vol_buf[1] = tmp_val;
- }
-
- LOGD(
- "%s, balance value = %d, bal_mid_vol = %d, vol_buf[0] = %d, vol_buf[1] = %d.\n",
- __FUNCTION__, balance_val, bal_mid_vol, vol_buf[0], vol_buf[1]);
- return 0;
-}
-
-int CAudioAlsa::SetExternalDacMute(int mute_state)
-{
- int tmp_ret = 0;
- int aud_arch_type = GetAudioArchitectureTypeCFG();
-
- if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_ON_BOARD || aud_arch_type == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
- SetExternalDacChannelSwitch(1, mute_state);
- SetExternalDacChannelSwitch(2, mute_state);
-
- if (GetAudioSupperBassModuleDisableCFG() == 0) {
- SetExternalDacChannelSwitch(3, mute_state);
- }
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC) {
- SendCmdToOffBoardFBCExternalDac(AUDIO_CMD_SET_MUTE, mute_state);
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB) {
- SendCmdToOffBoardCustomerLibExternalDac(AUDIO_CMD_SET_MUTE, mute_state);
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_DIGITAL) {
- SetDigitalMute(mute_state);
- }
-
- return tmp_ret;
-}
-
-int CAudioAlsa::SetInternalDacMute(int mute_state)
-{
- return 0;
-}
-
-int CAudioAlsa::setAudioPcmPlaybackMute(int mute_state)
-{
- const char *value;
- char prop[256];
- value = config_get_str ( "TV", "tvin.2d4G.headset.en", "null" );
- property_get("audio.output.double_output", prop, "null");
- if ( strcmp ( value, "enable" ) == 0 && (strcmp(prop, "0") == 0 || strcmp(prop, "null") == 0)) {
- SetAudioPcmPlaybackSwitch(mute_state);
- }
- return 0;
-}
-
-int CAudioAlsa::SetExternalDacMainVolume(int main_vol)
-{
- int tmp_ret = 0;
- int aud_arch_type = GetAudioArchitectureTypeCFG();
-
- if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_ON_BOARD || aud_arch_type == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
- int digit_vol = 0;
- int vol_gain_val = 0;
- int balance_val = 0, vol_buf[2] = {0, 0};
-
- //handle l&r channel volume for balance
- balance_val = GetBalanceValue();
- CalculateBalanceVol(255, balance_val, vol_buf);
-
- tmp_ret |= SetExternalDacChannelVolume(1, vol_buf[0]);
- tmp_ret |= SetExternalDacChannelVolume(2, vol_buf[1]);
-
- //handle master channel volume
- digit_vol = TransVolumeBarVolToDigitalVol(mMainDigitLutBuf, main_vol,
- 0, 100, CC_MIN_DAC_VOLUME, CC_MAX_DAC_VOLUME);
-
- vol_gain_val = GetMainVolumeGain();
- digit_vol += vol_gain_val;
- if (digit_vol < CC_MIN_DAC_VOLUME) {
- digit_vol = CC_MIN_DAC_VOLUME;
- } else if (digit_vol > CC_MAX_DAC_VOLUME) {
- digit_vol = CC_MAX_DAC_VOLUME;
- }
- tmp_ret |= SetExternalDacChannelVolume(0, digit_vol);
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC) {
- tmp_ret = SendCmdToOffBoardFBCExternalDac(AUDIO_CMD_SET_VOLUME_BAR, main_vol);
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB) {
- tmp_ret = SendCmdToOffBoardCustomerLibExternalDac(AUDIO_CMD_SET_VOLUME_BAR, main_vol);
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_DIGITAL) {
- tmp_ret = SetDigitalMainVolume(main_vol);
- }
-
- return tmp_ret;
-}
-
-int CAudioAlsa::SetInternalDacMainVolume(int main_vol)
-{
- int tmp_ret = 0, digit_vol = 0;
- int aud_arch_type = GetAudioArchitectureTypeCFG();
-
- if (aud_arch_type == CC_DAC_T866_INTERNAL_DAC) {
- digit_vol = TransVolumeBarVolToDigitalVol(mMainDigitLutBuf, main_vol,
- 0, 100, CC_MIN_DAC_VOLUME, CC_MAX_DAC_VOLUME);
-
- if (digit_vol < CC_MIN_DAC_VOLUME) {
- digit_vol = CC_MIN_DAC_VOLUME;
- } else if (digit_vol > CC_MAX_DAC_VOLUME) {
- digit_vol = CC_MAX_DAC_VOLUME;
- }
-
- return SetInternalDacLineOutPlayBackVolume(digit_vol, digit_vol);
- }
-
- return 0;
-}
-
-int CAudioAlsa::SetExternalDacSupperBassVolume(int tmp_vol)
-{
- int tmp_ret = 0;
- int aud_arch_type = GetAudioArchitectureTypeCFG();
-
- if (GetAudioSupperBassModuleDisableCFG() != 0) {
- return 0;
- }
-
- if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_ON_BOARD || aud_arch_type == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
- int digit_vol = 0;
- int vol_gain_val = 0;
-
- digit_vol = TransVolumeBarVolToDigitalVol(mMainDigitLutBuf, tmp_vol,
- 0, 100, CC_MIN_DAC_SUB_WOOFER_VOLUME,
- CC_MAX_DAC_SUB_WOOFER_VOLUME);
-
- vol_gain_val = GetSupperBassVolumeGain();
- digit_vol += vol_gain_val;
- if (digit_vol < CC_MIN_DAC_SUB_WOOFER_VOLUME) {
- digit_vol = CC_MIN_DAC_SUB_WOOFER_VOLUME;
- } else if (digit_vol > CC_MAX_DAC_SUB_WOOFER_VOLUME) {
- digit_vol = CC_MAX_DAC_SUB_WOOFER_VOLUME;
- }
-
- tmp_ret = SetExternalDacChannelVolume(3, digit_vol);
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC) {
- tmp_ret = SendCmdToOffBoardFBCExternalDac(AUDIO_CMD_SET_SUBCHANNEL_VOLUME, tmp_vol);
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB) {
- tmp_ret = SendCmdToOffBoardCustomerLibExternalDac(AUDIO_CMD_SET_SUBCHANNEL_VOLUME, tmp_vol);
- }
-
- return tmp_ret;
-}
-
-int CAudioAlsa::SetExternalDacEQ(int mode_val)
-{
- int tmp_ret = 0;
- int aud_arch_type = GetAudioArchitectureTypeCFG();
-
- if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_ON_BOARD || aud_arch_type == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
- SetExternalDacEQMode(mode_val);
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC) {
- SendCmdToOffBoardFBCExternalDac(AUDIO_CMD_SET_EQ_MODE, mode_val);
- } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB) {
- SendCmdToOffBoardCustomerLibExternalDac(AUDIO_CMD_SET_EQ_MODE, mode_val);
- }
-
- return tmp_ret;
-}
-
-int (*HandleDacMute)(int mute_state);
-int (*HandleDacMainVolume)(int vol);
-int (*HandleDacBalance)(int balance_val);
-int (*HandleAudioSourceType)(int source_type);
-
-static void *gExternalDacLibHandler = NULL;
-int CAudioAlsa::LoadExternalDacLib(void)
-{
- char *error;
-
- ALOGD("%s, entering...\n", __FUNCTION__);
-
- if (gExternalDacLibHandler != NULL) {
- return 0;
- }
-
- const char *config_value = config_get_str("TV", "audio.external.dac.libpath", "/system/lib/libdac.so");
- gExternalDacLibHandler = dlopen(config_value, RTLD_NOW);
- if (!gExternalDacLibHandler) {
- ALOGE("%s, failed to load external dac lib (%s)\n", __FUNCTION__, config_value);
- goto Error;
- }
-
-
- HandleDacMute = (int(*)(int))dlsym(gExternalDacLibHandler, "HandleDacMute");
- if (HandleDacMute == NULL) {
- ALOGE("%s, fail find fun HandleDacMute()\n", __FUNCTION__);
- goto Error;
- }
- HandleDacMainVolume = (int(*)(int))dlsym(gExternalDacLibHandler, "HandleDacMainVolume");
- if (HandleDacMainVolume == NULL) {
- ALOGE("%s, fail find fun HandleDacMainVolume()\n", __FUNCTION__);
- goto Error;
- }
- HandleDacBalance = (int(*)(int))dlsym(gExternalDacLibHandler, "HandleDacBalance");
- if (HandleDacBalance == NULL) {
- ALOGE("%s, fail find fun HandleDacBalance()\n", __FUNCTION__);
- goto Error;
- }
- HandleAudioSourceType = (int(*)(int))dlsym(gExternalDacLibHandler, "HandleAudioSourceType");
- if (HandleAudioSourceType == NULL) {
- ALOGE("%s, fail find fun HandleAudioSourceType()\n", __FUNCTION__);
- goto Error;
- }
-
- return 0;
-
-Error: //
- HandleDacMute = NULL;
- HandleDacMainVolume = NULL;
- HandleDacBalance = NULL;
- HandleAudioSourceType = NULL;
-
- if (gExternalDacLibHandler != NULL) {
- dlclose(gExternalDacLibHandler);
- gExternalDacLibHandler = NULL;
- }
- return -1;
-}
-
-int CAudioAlsa::SendCmdToOffBoardCustomerLibExternalDac(int cmd, int para)
-{
- LoadExternalDacLib();
- if (gExternalDacLibHandler != NULL) {
- if (cmd == AUDIO_CMD_SET_MUTE) {
- if (HandleDacMute != NULL) {
- LOGD("%s, call external dac lib HandleDacMute (para = %d).\n", __FUNCTION__, para);
- return (*HandleDacMute)(para);
- }
- } else if (cmd == AUDIO_CMD_SET_VOLUME_BAR) {
- if (HandleDacMainVolume != NULL) {
- LOGD("%s, call external dac lib HandleDacMainVolume (para = %d).\n", __FUNCTION__, para);
- return (*HandleDacMainVolume)(para);
- }
- } else if (cmd == AUDIO_CMD_SET_BALANCE) {
- if (HandleDacBalance != NULL) {
- LOGD("%s, call external dac lib HandleDacBalance (para = %d).\n", __FUNCTION__, para);
- return (*HandleDacBalance)(para);
- }
- } else if (cmd == AUDIO_CMD_SET_SOURCE) {
- if (HandleAudioSourceType != NULL) {
- LOGD("%s, call external dac lib HandleAudioSourceType (para = %d).\n", __FUNCTION__, para);
- return (*HandleAudioSourceType)(para);
- }
- }
- }
-
- return 0;
-}
-
-int CAudioAlsa::SendCmdToOffBoardFBCExternalDac(int cmd, int para)
-{
- CFbcCommunication *pFBC = GetSingletonFBC();
- if (pFBC != NULL) {
- if (cmd == AUDIO_CMD_SET_MUTE) {
- int fbc_mute = 0;//0 is mute,1 is unmute
- if (para == CC_AUDIO_MUTE) {
- fbc_mute = 0;
- } else {
- fbc_mute = 1;
- }
- //int fbcIsBute;
- //pFBC->cfbc_Get_Mute(COMM_DEV_SERIAL, &fbcIsBute);
- //LOGD("fbc is mute = %d", fbcIsBute);
- return pFBC->cfbc_Set_Mute(COMM_DEV_SERIAL, fbc_mute);
- } else if (cmd == AUDIO_CMD_SET_VOLUME_BAR) {
- LOGD("%s, send AUDIO_CMD_SET_VOLUME_BAR (para = %d) to fbc.\n", __FUNCTION__, para);
- return pFBC->cfbc_Set_Volume_Bar(COMM_DEV_SERIAL, para);
- } else if (cmd == AUDIO_CMD_SET_BALANCE) {
- LOGD("%s, send AUDIO_CMD_SET_BALANCE (para = %d) to fbc.\n", __FUNCTION__, para);
- return pFBC->cfbc_Set_Balance(COMM_DEV_SERIAL, para);
- } else if (cmd == AUDIO_CMD_SET_SOURCE) {
- LOGD("%s, send AUDIO_CMD_SET_SOURCE (para = %d) to fbc.\n", __FUNCTION__, para);
- return pFBC->cfbc_Set_FBC_Audio_Source(COMM_DEV_SERIAL, para);
- }
- }
-
- return 0;
-}
-
-static int gDigitalMuteStatus = CC_AUDIO_UNMUTE;
-static int gDigitalLeftVol = 0;
-static int gDigitalRightVol = 0;
-
-int CAudioAlsa::HandleDigitalVolume(int l_val, int r_val)
-{
- amAudioSetLeftGain(l_val);
- amAudioSetRightGain(r_val);
-
- amAudioSetAndroidVolumeEnable(1);
- amAudioSetAndroidVolume(l_val, r_val);
-
- LOGD("%s, l_val = %d, r_val = %d.\n", __FUNCTION__, l_val, r_val);
- return 0;
-}
-
-int CAudioAlsa::HandleDigitalMute(int mute_status)
-{
- if (mute_status == CC_AUDIO_MUTE) {
- HandleDigitalVolume(0, 0);
- } else if (mute_status == CC_AUDIO_UNMUTE) {
- HandleDigitalVolume(gDigitalLeftVol, gDigitalRightVol);
- }
-
- return 0;
-}
-
-int CAudioAlsa::SetDigitalMainVolume(int main_vol)
-{
- int tmp_ret = 0, l_val = 0, r_val = 0;
- int balance_val = 0, vol_buf[2] = {0, 0};
-
- //handle l&r channel volume for balance
- balance_val = GetBalanceValue();
- CalculateBalanceVol(main_vol, balance_val, vol_buf);
-
- //handle master channel volume
- l_val = TransVolumeBarVolToDigitalVol(mMainDigitLutBuf, vol_buf[0],
- 0, 100, CC_MIN_DAC_VOLUME, CC_MAX_DAC_VOLUME);
- r_val = TransVolumeBarVolToDigitalVol(mMainDigitLutBuf, vol_buf[1],
- 0, 100, CC_MIN_DAC_VOLUME, CC_MAX_DAC_VOLUME);
-
- gDigitalLeftVol = l_val;
- gDigitalRightVol = r_val;
- if (gDigitalMuteStatus == CC_AUDIO_UNMUTE) {
- HandleDigitalVolume(l_val, r_val);
- }
-
- return tmp_ret;
-}
-
-int CAudioAlsa::SetDigitalMute(int mute_status)
-{
- if (mute_status == CC_AUDIO_MUTE || mute_status == CC_AUDIO_UNMUTE) {
- gDigitalMuteStatus = mute_status;
- return HandleDigitalMute(mute_status);
- }
-
- return 0;
-}
-
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <pthread.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <math.h>
+#include <errno.h>
+#include <assert.h>
+#include <fcntl.h>
+#include <dlfcn.h>
+#include <tinyalsa/asoundlib.h>
+#include "CFbcCommunication.h"
+#include <sys/poll.h>
+#include <android/log.h>
+#include "tvsetting/audio_cfg.h"
+#include "audio_alsa.h"
+#include <cutils/properties.h>
+#define LOG_TAG "CAudioAlsa"
+#include "CTvLog.h"
+#include "audio_amaudio.h"
+
+static const int MainDigitLutBuf[CC_VOL_TRANS_LUT_BUF_SIZE] = {
+ //
+ 0, 40, 50, 60, 70, 87, 110, 120, 130, 140, // 0~9
+ 150, 152, 155, 158, 161, 164, 167, 170, 173, 174, // 10~19
+ 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, // 20~29
+ 191, 191, 192, 193, 194, 195, 196, 196, 197, 197, // 30~39
+ 198, 198, 198, 199, 199, 200, 200, 201, 201, 201, // 40~49
+ 202, 202, 202, 203, 203, 203, 203, 204, 204, 204, // 50~59
+ 205, 205, 205, 205, 206, 206, 206, 206, 206, 207, // 60~69
+ 207, 207, 207, 207, 207, 207, 207, 208, 208, 208, // 70~79
+ 208, 208, 208, 208, 208, 208, 208, 208, 208, 209, // 80~89
+ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, // 90~99
+ 209, // 100
+};
+
+static const int SupperBassDigitLutBuf[CC_VOL_TRANS_LUT_BUF_SIZE] = {
+ //
+ 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, // 0~9
+ 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, // 10~19
+ 141, 142, 143, 144, 145, 147, 147, 148, 148, 149, // 20~29
+ 149, 150, 150, 151, 151, 152, 152, 153, 153, 154, // 30~39
+ 154, 155, 155, 156, 156, 157, 157, 158, 158, 159, // 40~49
+ 160, 160, 160, 160, 161, 161, 161, 161, 162, 162, // 50~59
+ 162, 163, 163, 163, 163, 164, 164, 164, 165, 165, // 60~69
+ 165, 165, 166, 166, 166, 167, 168, 169, 170, 171, // 70~79
+ 173, 174, 175, 176, 177, 179, 180, 181, 182, 183, // 80~89
+ 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, // 90~99
+ 197 // 100
+};
+
+CAudioAlsa::CAudioAlsa()
+{
+ int card_id;
+ card_id = get_aml_card();
+ LOGD("[%s:%d] card_id:%d\n", __FUNCTION__, __LINE__, card_id);
+ mpMixer = mixer_open(card_id);
+
+ card_id = get_USB_Audio_card();
+ LOGD("[%s:%d] card_id:%d\n", __FUNCTION__, __LINE__, card_id);
+ mpUsbMixer = mixer_open(card_id);
+ mMainVolumeBalanceVal = 0;
+ mMainVolumeGainVal = 0;
+ mSupperBassVolumeGainVal = 0;
+ memcpy(mMainDigitLutBuf, MainDigitLutBuf, CC_VOL_TRANS_LUT_BUF_SIZE);
+ memcpy(mSupperBassDigitLutBuf, SupperBassDigitLutBuf, CC_VOL_TRANS_LUT_BUF_SIZE);
+}
+
+CAudioAlsa::~CAudioAlsa()
+{
+ if (NULL != mpMixer) {
+ mixer_close(mpMixer);
+ }
+
+ if (NULL != mpUsbMixer) {
+ mixer_close(mpUsbMixer);
+ }
+}
+
+int CAudioAlsa::get_aml_card()
+{
+ int card = -1, err = 0;
+ int fd = -1;
+ char read_buf[512], *pd = NULL;
+ static const char *const SOUND_CARDS_PATH = "/proc/asound/cards";
+ fd = open(SOUND_CARDS_PATH, O_RDONLY);
+ if (fd < 0) {
+ ALOGE("ERROR: failed to open config file %s error: %d\n", SOUND_CARDS_PATH, errno);
+ close(fd);
+ return -EINVAL;
+ }
+ memset(read_buf, 0x0, 512);
+ err = read(fd, read_buf, 512);
+ if (fd < 0) {
+ ALOGE("ERROR: failed to read config file %s error: %d\n", SOUND_CARDS_PATH, errno);
+ close(fd);
+ return -EINVAL;
+ }
+ pd = strstr(read_buf, "AML");
+ card = *(pd - 3) - '0';
+ close(fd);
+ return card;
+}
+
+int CAudioAlsa::AudioControlSetValue(int val_count, int data_buf[], char *match_names)
+{
+ struct mixer_ctl *pctl;
+ unsigned int expected_val_count;
+ unsigned int value_index;
+
+ if (NULL == mpMixer) {
+ LOGE("[%s:%d] Failed to open mixer\n", __FUNCTION__, __LINE__);
+ goto err_exit;
+ }
+
+ pctl = mixer_get_ctl_by_name(mpMixer, match_names);
+ if (NULL == pctl) {
+ LOGE("[%s:%d] Failed to get mixer control for:%s\n", __FUNCTION__, __LINE__, match_names);
+ goto err_exit;
+ }
+ expected_val_count = mixer_ctl_get_num_values(pctl);
+ if (expected_val_count != (unsigned int)val_count) {
+ LOGE("[%s:%d] val_count != expected_val_count\n", __FUNCTION__, __LINE__);
+ goto err_exit;
+ }
+ for (value_index = 0; value_index < expected_val_count; value_index++) {
+ if (mixer_ctl_set_value(pctl, value_index, data_buf[value_index]) != 0) {
+ LOGE("[%s:%d] Failed to set value:%d\n", __FUNCTION__, __LINE__, value_index);
+ goto err_exit;
+ }
+ }
+ return 0;
+err_exit:
+ return -1;
+}
+
+int CAudioAlsa::AudioControlGetValue(int val_count, int ret_buf[], char *match_names)
+{
+ struct mixer_ctl *pctl;
+ unsigned int expected_val_count;
+ unsigned int value_index;
+
+ if (NULL == mpMixer) {
+ LOGE("[%s:%d] Failed to open mixer\n", __FUNCTION__, __LINE__);
+ goto err_exit;
+ }
+ pctl = mixer_get_ctl_by_name(mpMixer, match_names);
+ if (NULL == pctl) {
+ LOGE("[%s:%d] Failed to get mixer control for:%s\n", __FUNCTION__, __LINE__, match_names);
+ goto err_exit;
+ }
+ expected_val_count = mixer_ctl_get_num_values(pctl);
+ if (expected_val_count != (unsigned int)val_count) {
+ LOGE("[%s:%d] val_count != expected_val_count\n", __FUNCTION__, __LINE__);
+ goto err_exit;
+ }
+ for (value_index = 0; value_index < expected_val_count; value_index++) {
+ ret_buf[value_index] = mixer_ctl_get_value(pctl, value_index);
+ }
+ return 0;
+err_exit:
+ return -1;
+}
+
+int CAudioAlsa::get_USB_Audio_card()
+{
+ int card = -1, err = 0;
+ int fd = -1;
+ char read_buf[512], *pd = NULL;
+ static const char *const SOUND_CARDS_PATH = "/proc/asound/cards";
+ fd = open(SOUND_CARDS_PATH, O_RDONLY);
+ if (fd < 0) {
+ ALOGE("ERROR: failed to open config file %s error: %d\n", SOUND_CARDS_PATH, errno);
+ close(fd);
+ return -EINVAL;
+ }
+ memset(read_buf, 0x0, 512);
+ err = read(fd, read_buf, 512);
+ if (fd < 0) {
+ ALOGE("ERROR: failed to read config file %s error: %d\n", SOUND_CARDS_PATH, errno);
+ close(fd);
+ return -EINVAL;
+ }
+ pd = strstr(read_buf, "Receiver");
+ if (pd == NULL) {
+ ALOGE("ERROR: failed to read config file %s error: %d\n", SOUND_CARDS_PATH, errno);
+ close(fd);
+ return -EINVAL;
+ }
+
+ card = *(pd - 3) - '0';
+ close(fd);
+ return card;
+}
+
+int CAudioAlsa::HandleUSBAudioControlValue(int val_count, int data_buf[], int match_count, char **match_names)
+{
+
+ struct mixer_ctl *pctl;
+ unsigned int expected_val_count;
+ unsigned int match_index;
+ unsigned int value_index;
+ char card_id_str[9] = {0};
+
+ if (NULL == mpUsbMixer) {
+ LOGE("[%s:%d] Failed to open mixer\n", __FUNCTION__, __LINE__);
+ goto err_exit;
+ }
+
+ for (match_index = 0; match_index < match_count; match_index++) {
+ pctl = mixer_get_ctl_by_name(mpUsbMixer, match_names[match_index]);
+ if (NULL == pctl) {
+ LOGE("[%s:%d] Failed to get mixer control for:%s\n", __FUNCTION__, __LINE__, match_names[match_index]);
+ goto err_exit;
+ }
+ expected_val_count = mixer_ctl_get_num_values(pctl);
+ if (expected_val_count != (unsigned int)val_count) {
+ LOGE("[%s:%d] val_count != expected_val_count\n", __FUNCTION__, __LINE__);
+ goto err_exit;
+ }
+ for (value_index = 0; value_index < expected_val_count; value_index++) {
+ if (mixer_ctl_set_value(pctl, value_index, data_buf[value_index]) != 0) {
+ LOGE("[%s:%d] Failed to set value:%d\n", __FUNCTION__, __LINE__, value_index);
+ goto err_exit;
+ }
+ }
+ }
+
+ return 0;
+err_exit:
+ return -1;
+}
+
+int CAudioAlsa::CheckVolume(int digit_vol, int digit_min, int digit_max, int hd_min,
+ int hd_max)
+{
+ int tmp_val = digit_vol;
+
+ if (digit_vol < hd_min) {
+ return hd_min;
+ } else if (digit_vol > hd_max) {
+ return hd_max;
+ }
+
+ return digit_vol;
+}
+
+int CAudioAlsa::GetTwoChannelVolume(int vol_buf[], int l_min_vol, int l_max_vol,
+ int r_min_vol, int r_max_vol, char *match_names, int hd_min,
+ int hd_max)
+{
+ vol_buf[0] = 0;
+ vol_buf[1] = 0;
+ return AudioControlGetValue(2, vol_buf, match_names);
+}
+
+int CAudioAlsa::GetLineInMaxVol()
+{
+ if (GetAudioArchitectureTypeCFG() == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
+ return 84;
+ }
+
+ return 127;
+}
+
+int CAudioAlsa::GetLineOutMaxVol()
+{
+ if (GetAudioArchitectureTypeCFG() == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
+ return 84;
+ }
+
+ return 255;
+}
+
+#define CC_GET_ALSA_CTL_AUDIO_IN_SOURCE_NAME (0)
+#define CC_GET_ALSA_CTL_INTERNAL_DAC_LEFT_LINEIN_SEL_NAME (1)
+#define CC_GET_ALSA_CTL_INTERNAL_DAC_RIGHT_LINEIN_SEL_NAME (2)
+#define CC_GET_ALSA_CTL_INTERNAL_DAC_LINEIN_CAPTURE_VOLUME_NAME (3)
+#define CC_GET_ALSA_CTL_INTERNAL_DAC_LINEOUT_PLAYBACK_VOLUME_NAME (4)
+#define CC_GET_ALSA_CTL_I2S_MUTE_NAME (5)
+#define CC_GET_ALSA_CTL_SPDIF_MUTE_NAME (6)
+#define CC_GET_ALSA_CTL_HW_RESAMPLE_NAME (7)
+#define CC_GET_ALSA_CTL_EXTERNAL_DAC_MASTER_VOLUME_NAME (8)
+#define CC_GET_ALSA_CTL_EXTERNAL_DAC_CH1_VOLUME_NAME (9)
+#define CC_GET_ALSA_CTL_EXTERNAL_DAC_CH2_VOLUME_NAME (10)
+#define CC_GET_ALSA_CTL_EXTERNAL_DAC_CH3_VOLUME_NAME (11)
+#define CC_GET_ALSA_CTL_EXTERNAL_DAC_CH1_SWITCH_NAME (12)
+#define CC_GET_ALSA_CTL_EXTERNAL_DAC_CH2_SWITCH_NAME (13)
+#define CC_GET_ALSA_CTL_EXTERNAL_DAC_CH3_SWITCH_NAME (14)
+#define CC_GET_ALSA_CTL_EXTERNAL_DAC_EQ_MODE_NAME (15)
+#define CC_GET_ALSA_CTL_PCM_PLAYBACK_VOLUME (16)
+#define CC_GET_ALSA_CTL_PCM_PLAYBACK_SWITCH (17)
+#define CC_GET_ALSA_CTL_SETOUTPUT_SWAP (18)
+#define CC_GET_ALSA_CTL_AUDIO_IN_SWITCH (19)
+
+static char gG9AlsaNames[32][48] = {
+ {"Audio In Source"},//0
+ {"Linein right switch"},//1
+ {"Linein left switch"},
+ {"ADC Digital Capture Volume"},
+ {"DAC Digital Playback Volume"},
+ {"Audio i2s mute"},//5
+ {"Audio spdif mute"},
+ {"Hardware resample enable"},//8
+ {"AMP Master Volume"},
+ {"AMP Ch1 Volume"},//10
+ {"AMP Ch2 Volume"},
+ {"AMP Ch3 Volume"},
+ {"AMP Ch1 Switch"},
+ {"AMP Ch2 Switch"},
+ {"AMP Ch3 Switch"},//15
+ {"AMP EQ Mode"},
+ {"PCM Playback Volume"},
+ {"PCM Playback Switch"},
+ {"Output Swap"},
+ {"AudioIn Switch"},//19
+};
+
+
+char *CAudioAlsa::GetAlsaControlName(int get_type)
+{
+ if (GetAudioArchitectureTypeCFG() == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
+ /*if(get_type == CC_GET_ALSA_CTL_AUDIO_IN_SOURCE_NAME) {
+ return gAudioInSourceNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_INTERNAL_DAC_LEFT_LINEIN_SEL_NAME) {
+ strcpy(gInternalDacLeftLineInSelNameBuf, "Left LINEIN Select");
+ return gInternalDacLeftLineInSelNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_INTERNAL_DAC_RIGHT_LINEIN_SEL_NAME) {
+ strcpy(gInternalDacRightLineInSelNameBuf, "Right LINEIN Select");
+ return gInternalDacRightLineInSelNameBuf;
+ } else if (get_type == CC_GET_ALSA_CTL_INTERNAL_DAC_LINEIN_CAPTURE_VOLUME_NAME) {
+ strcpy(gInternalDacLineInCaptureVolumeNameBuf, "LINEIN Capture Volume");
+ return gInternalDacLineInCaptureVolumeNameBuf;
+ } else if (get_type == CC_GET_ALSA_CTL_INTERNAL_DAC_LINEOUT_PLAYBACK_VOLUME_NAME) {
+ strcpy(gInternalDacLineOutCaptureVolumeNameBuf, "LINEOUT Playback Volume");
+ return gInternalDacLineOutCaptureVolumeNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_I2S_MUTE_NAME) {
+ strcpy(gI2SMuteNameBuf, "Audio i2s mute");
+ return gI2SMuteNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_SPDIF_MUTE_NAME) {
+ strcpy(gSpdifMuteNameBuf, "Audio spdif mute");
+ return gSpdifMuteNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_HW_RESAMPLE_NAME) {
+ strcpy(gHWResampleNameBuf, "Hardware resample enable");
+ return gHWResampleNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_MASTER_VOLUME_NAME) {
+ strcpy(gExternalDacMasterVolumeNameBuf, "AMP Master Volume");
+ return gExternalDacMasterVolumeNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_CH1_VOLUME_NAME) {
+ strcpy(gExternalDacCh1VolumeNameBuf, "AMP Ch1 Volume");
+ return gExternalDacCh1VolumeNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_CH2_VOLUME_NAME) {
+ strcpy(gExternalDacCh2VolumeNameBuf, "AMP Ch2 Volume");
+ return gExternalDacCh2VolumeNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_CH3_VOLUME_NAME) {
+ strcpy(gExternalDacCh3VolumeNameBuf, "AMP Ch3 Volume");
+ return gExternalDacCh3VolumeNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_CH1_SWITCH_NAME) {
+ strcpy(gExternalDacCh1SwitchNameBuf, "AMP Ch1 Switch");
+ return gExternalDacCh1SwitchNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_CH2_SWITCH_NAME) {
+ strcpy(gExternalDacCh2SwitchNameBuf, "AMP Ch2 Switch");
+ return gExternalDacCh2SwitchNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_CH3_SWITCH_NAME) {
+ strcpy(gExternalDacCh3SwitchNameBuf, "AMP Ch3 Switch");
+ return gExternalDacCh3SwitchNameBuf;
+ } else if(get_type == CC_GET_ALSA_CTL_EXTERNAL_DAC_EQ_MODE_NAME) {
+ strcpy(gExternalDacEQModeNameBuf, "AMP EQ Mode");
+ return gExternalDacEQModeNameBuf;
+ }*/
+ } else {
+ return gG9AlsaNames[get_type];
+ }
+
+ return NULL;
+}
+
+int gAudioInSource = -1;
+
+int CAudioAlsa::SetAudioInSource(int source_type)
+{
+ int set_val = 0;
+ char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_AUDIO_IN_SOURCE_NAME);
+
+ if (GetAudioArchitectureTypeCFG() == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
+ if (source_type != 0 && source_type != 1) {
+ return -1;
+ }
+
+ if (source_type == CC_AUDIO_IN_SOURCE_LINEIN) {
+ set_val = 0;
+ } else if (source_type == CC_AUDIO_IN_SOURCE_HDMI) {
+ set_val = 1;
+ }
+ } else {
+ if (source_type != 0 && source_type != 1 && source_type != 2) {
+ return -1;
+ }
+
+ set_val = source_type;
+ }
+
+ gAudioInSource = set_val;
+
+ return AudioControlSetValue(1, &set_val, match_names);
+}
+
+int CAudioAlsa::GetAudioInSource(void)
+{
+ char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_AUDIO_IN_SOURCE_NAME);
+ int source_type = 0;
+
+ source_type = gAudioInSource;
+ if (source_type == -1) {
+ AudioControlGetValue(1, &source_type, match_names);
+ }
+
+ return source_type;
+}
+
+int CAudioAlsa::SetInternalDacLineInSelectChannel(int line_in_number)
+{
+ int tmp_ret = 0;
+ char *match_names = NULL;
+
+ if (line_in_number < 0 || line_in_number > 7) {
+ return -1;
+ }
+
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_INTERNAL_DAC_LEFT_LINEIN_SEL_NAME);
+ tmp_ret |= AudioControlSetValue(1, &line_in_number, match_names);
+
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_INTERNAL_DAC_RIGHT_LINEIN_SEL_NAME);
+ tmp_ret |= AudioControlSetValue(1, &line_in_number, match_names);
+
+ return tmp_ret;
+}
+
+int CAudioAlsa::SetInternalDacLineInCaptureVolume(int l_vol, int r_vol)
+{
+ int max_val = GetLineInMaxVol();
+ char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_INTERNAL_DAC_LINEIN_CAPTURE_VOLUME_NAME);
+ int VolumeBuf[2];
+
+ VolumeBuf[0] = CheckVolume(l_vol, 0, max_val, 0, max_val);
+ VolumeBuf[1] = CheckVolume(r_vol, 0, max_val, 0, max_val);
+
+ return AudioControlSetValue(2, VolumeBuf, match_names);
+}
+
+int CAudioAlsa::GetInternalDacLineInCaptureVolume(int vol_buf[])
+{
+ int max_val = GetLineInMaxVol();
+ char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_INTERNAL_DAC_LINEIN_CAPTURE_VOLUME_NAME);
+
+ return GetTwoChannelVolume(vol_buf, 0, max_val, 0, max_val, match_names, 0, max_val);
+}
+
+int CAudioAlsa::SetInternalDacLineOutPlayBackVolume(int l_vol, int r_vol)
+{
+ int max_val = GetLineOutMaxVol();
+ char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_INTERNAL_DAC_LINEOUT_PLAYBACK_VOLUME_NAME);
+ int VolumeBuf[2];
+
+ VolumeBuf[0] = CheckVolume(l_vol, 0, max_val, 0, max_val);
+ VolumeBuf[1] = CheckVolume(r_vol, 0, max_val, 0, max_val);
+
+ return AudioControlSetValue(2, VolumeBuf, match_names);
+}
+
+int CAudioAlsa::GetInternalDacLineOutPlayBackVolume(int vol_buf[])
+{
+ int max_val = GetLineOutMaxVol();
+ char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_INTERNAL_DAC_LINEOUT_PLAYBACK_VOLUME_NAME);
+
+ return GetTwoChannelVolume(vol_buf, 0, max_val, 0, max_val, match_names, 0, max_val);
+}
+
+int CAudioAlsa::SetAudioPcmPlaybackVolume(int vol)
+{
+ if(get_USB_Audio_card() == -EINVAL) return 0;
+ char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_PCM_PLAYBACK_VOLUME);
+ return HandleUSBAudioControlValue(1, &vol, 1, &match_names);
+}
+
+int CAudioAlsa::SetAudioPcmPlaybackSwitch(int vol)
+{
+ if(get_USB_Audio_card() == -EINVAL) return 0;
+ char *match_names = GetAlsaControlName(CC_GET_ALSA_CTL_PCM_PLAYBACK_SWITCH);
+ return HandleUSBAudioControlValue(1, &vol, 1, &match_names);
+}
+
+int CAudioAlsa::SetExternalDacChannelSwitch(int chan_ind, int switch_val)
+{
+ char *match_names = NULL;
+
+ if (chan_ind == 1) {
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_CH1_SWITCH_NAME);
+ } else if (chan_ind == 2) {
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_CH2_SWITCH_NAME);
+ } else if (chan_ind == 3) {
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_CH3_SWITCH_NAME);
+ } else {
+ return -1;
+ }
+
+ return AudioControlSetValue(1, &switch_val, match_names);
+}
+
+int CAudioAlsa::SetExternalDacChannelVolume(int chan_ind, int main_vol)
+{
+ int tmp_ret = 0;
+ char *match_names = NULL;
+
+ if (chan_ind == 0) {
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_MASTER_VOLUME_NAME);
+ } else if (chan_ind == 1) {
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_CH1_VOLUME_NAME);
+ } else if (chan_ind == 2) {
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_CH2_VOLUME_NAME);
+ } else if (chan_ind == 3) {
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_CH3_VOLUME_NAME);
+ } else {
+ return -1;
+ }
+
+ return AudioControlSetValue(1, &main_vol, match_names);
+}
+int CAudioAlsa::SetAudioSwitchIO(int value)
+{
+ char *match_names = gG9AlsaNames[CC_GET_ALSA_CTL_AUDIO_IN_SWITCH];
+
+ return AudioControlSetValue(1, &value, match_names);
+}
+int CAudioAlsa::SetOutput_Swap(int value)
+{
+ char *match_names = gG9AlsaNames[CC_GET_ALSA_CTL_SETOUTPUT_SWAP];
+
+ return AudioControlSetValue(1, &value, match_names);
+}
+
+int CAudioAlsa::SetExternalDacEQMode(int mode_val)
+{
+ char *match_names = NULL;
+
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_EXTERNAL_DAC_EQ_MODE_NAME);
+ return AudioControlSetValue(1, &mode_val, match_names);
+}
+
+int CAudioAlsa::SetI2SMute(int mute_status)
+{
+ char *match_names = NULL;
+
+ if (mute_status != CC_I2S_MUTE_ON && mute_status != CC_I2S_MUTE_OFF) {
+ LOGE("%s, I2S mute value (%d) error!\n", __FUNCTION__, mute_status);
+ return -1;
+ }
+
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_I2S_MUTE_NAME);
+ return AudioControlSetValue(1, &mute_status, match_names);
+}
+
+int CAudioAlsa::SetSPDIFMute(int mute_status)
+{
+ char *match_names = NULL;
+
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_SPDIF_MUTE_NAME);
+ return AudioControlSetValue(1, &mute_status, match_names);
+}
+
+#define CC_SAMPLE_BUF_SIZE (32)
+
+enum CC_HW_RESAMPLE_TYPE {
+ CC_HW_RESAMPLE_DISABLE,
+ CC_HW_RESAMPLE_48K,
+ CC_HW_RESAMPLE_44K,
+ CC_HW_RESAMPLE_32K,
+};
+
+int CAudioAlsa::SetHardwareResample(int sr)
+{
+ int i = 0, set_val = 0, tmp_val = 0;
+ int diff_val = 0x7FFFFFFF, diff_ind = -1;
+ char *match_names = NULL;
+ int sample_buf[CC_SAMPLE_BUF_SIZE] = {48000, 44000, 32000, -1};
+
+ if (sr < 0) {
+ set_val = 0;
+ } else {
+ for (i = 0; i < CC_SAMPLE_BUF_SIZE; i++) {
+ if (sample_buf[i] < 0) {
+ break;
+ }
+
+ if (sample_buf[i] >= sr) {
+ tmp_val = sample_buf[i] - sr;
+ } else {
+ tmp_val = sr - sample_buf[i];
+ }
+
+ if (tmp_val <= diff_val) {
+ diff_val = tmp_val;
+ diff_ind = i;
+ }
+ }
+
+ if (diff_ind < 0) {
+ set_val = 0;
+ } else {
+ set_val = diff_ind + 1;
+ }
+ }
+
+ LOGD("%s, set_val = %d.\n", __FUNCTION__, set_val);
+ match_names = GetAlsaControlName(CC_GET_ALSA_CTL_HW_RESAMPLE_NAME);
+ return AudioControlSetValue(1, &set_val, match_names);
+}
+
+int CAudioAlsa::SetMixerBypassSwitch(int switch_val)
+{
+ char match_names[48] = "Output Mixer Bypass Switch" ;
+ int ctl_buf[2];
+
+ if (switch_val != 0 && switch_val != 1) {
+ return -1;
+ }
+
+ ctl_buf[0] = switch_val;
+ ctl_buf[1] = switch_val;
+
+ return AudioControlSetValue(2, ctl_buf, match_names);
+}
+
+int CAudioAlsa::GetMixerBypassSwitch(void)
+{
+ char match_names[48] = "Output Mixer Bypass Switch" ;
+ int ctl_buf[2];
+
+ AudioControlSetValue(2, ctl_buf, match_names);
+
+ return ctl_buf[0];
+}
+
+int CAudioAlsa::SetMixerDacSwitch(int switch_val)
+{
+ char match_names[48] = "Output Mixer DAC Switch" ;
+ int ctl_buf[2];
+
+ if (switch_val != 0 && switch_val != 1) {
+ return -1;
+ }
+
+ ctl_buf[0] = switch_val;
+ ctl_buf[1] = switch_val;
+
+ return AudioControlSetValue(2, ctl_buf, match_names);
+}
+
+int CAudioAlsa::GetMixerDacSwitch(void)
+{
+ char *match_names = "Output Mixer DAC Switch" ;
+ int ctl_buf[2];
+
+ AudioControlGetValue(2, ctl_buf, match_names);
+
+ return ctl_buf[0];
+}
+
+int CAudioAlsa::TransVolumeBarVolToDigitalVol(int digit_lut_buf[], int digit_vol,
+ int digit_min, int digit_max, int hd_min, int hd_max)
+{
+ if (digit_vol >= CC_VOL_TRANS_LUT_BUF_SIZE) {
+ return digit_lut_buf[CC_VOL_TRANS_LUT_BUF_SIZE - 1];
+ } else if (digit_vol < 0) {
+ return digit_lut_buf[CC_VOL_TRANS_LUT_BUF_SIZE - 1];
+ }
+
+ return digit_lut_buf[digit_vol];
+}
+
+int CAudioAlsa::TransDigitalVolToVolumeBarVol(int digit_lut_buf[], int hd_vol, int hd_min,
+ int hd_max, int digit_min, int digit_max)
+{
+ int i;
+
+ for (i = 0; i < CC_VOL_TRANS_LUT_BUF_SIZE; i++) {
+ if (digit_lut_buf[i] == hd_vol)
+ break;
+ }
+
+ if (i < CC_VOL_TRANS_LUT_BUF_SIZE)
+ return i;
+
+ for (i = 0; i < CC_VOL_TRANS_LUT_BUF_SIZE - 1; i++) {
+ if (digit_lut_buf[i] > hd_vol && digit_lut_buf[i + 1] < hd_vol)
+ break;
+ }
+
+ if (i < CC_VOL_TRANS_LUT_BUF_SIZE - 1)
+ return i;
+
+ return digit_max;
+}
+
+void CAudioAlsa::SetMainVolDigitLutBuf(int digit_lut_buf[])
+{
+ memcpy((void *) mMainDigitLutBuf, digit_lut_buf,
+ CC_VOL_TRANS_LUT_BUF_SIZE * sizeof(int));
+}
+
+void CAudioAlsa::SetSupperBassVolDigitLutBuf(int digit_lut_buf[])
+{
+ memcpy((void *) mSupperBassDigitLutBuf, digit_lut_buf,
+ CC_VOL_TRANS_LUT_BUF_SIZE * sizeof(int));
+}
+
+int CAudioAlsa::SetDacMute(int mute_state, int mute_type)
+{
+ int tmp_ret = 0;
+
+ if (mute_type & CC_DAC_MUTE_TYPE_INTERNAL) {
+ tmp_ret |= SetInternalDacMute(mute_state);
+ }
+
+ if (mute_type & CC_DAC_MUTE_TYPE_EXTERNAL) {
+ tmp_ret |= SetExternalDacMute(mute_state);
+ setAudioPcmPlaybackMute(mute_state);
+ }
+
+ return tmp_ret;
+}
+
+int CAudioAlsa::SetDacMainVolume(int main_vol)
+{
+ int tmp_ret = 0;
+ int aud_arch_type = GetAudioArchitectureTypeCFG();
+
+ if (aud_arch_type == CC_DAC_T866_INTERNAL_DAC) {
+ tmp_ret = SetInternalDacMainVolume(main_vol);
+ } else {
+ tmp_ret = SetExternalDacMainVolume(main_vol);
+ }
+
+ return tmp_ret;
+}
+
+int CAudioAlsa::SetDacSupperBassVolume(int tmp_vol)
+{
+ int aud_arch_type = GetAudioArchitectureTypeCFG();
+
+ if (aud_arch_type == CC_DAC_T866_INTERNAL_DAC) {
+ return 0;
+ }
+
+ return SetExternalDacSupperBassVolume(tmp_vol);
+}
+
+int CAudioAlsa::SetDacEQMode(int mode_val)
+{
+ int aud_arch_type = GetAudioArchitectureTypeCFG();
+
+ if (aud_arch_type == CC_DAC_T866_INTERNAL_DAC) {
+ return 0;
+ }
+
+ return SetExternalDacEQ(mode_val);
+}
+
+int CAudioAlsa::SetBalanceValue(int balance_val)
+{
+ int tmp_val = 0;
+ int aud_arch_type = GetAudioArchitectureTypeCFG();
+
+ tmp_val = mMainVolumeBalanceVal;
+ mMainVolumeBalanceVal = balance_val;
+
+ if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC) {
+ SendCmdToOffBoardFBCExternalDac(AUDIO_CMD_SET_BALANCE, balance_val);
+ return 0;
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB) {
+ SendCmdToOffBoardCustomerLibExternalDac(AUDIO_CMD_SET_BALANCE, balance_val);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CAudioAlsa::GetBalanceValue()
+{
+ int tmp_val = 0;
+ tmp_val = mMainVolumeBalanceVal;
+ return tmp_val;
+}
+
+int CAudioAlsa::SetMainVolumeGain(int gain_val)
+{
+ int tmp_val = 0;
+ tmp_val = mMainVolumeGainVal;
+ mMainVolumeGainVal = gain_val;
+ return tmp_val;
+}
+
+int CAudioAlsa::GetMainVolumeGain()
+{
+ int tmp_val = 0;
+ tmp_val = mMainVolumeGainVal;
+ return tmp_val;
+}
+
+int CAudioAlsa::SetSupperBassVolumeGain(int gain_val)
+{
+ int tmp_val = 0;
+ tmp_val = mSupperBassVolumeGainVal;
+ mSupperBassVolumeGainVal = gain_val;
+ return tmp_val;
+}
+
+int CAudioAlsa::GetSupperBassVolumeGain()
+{
+ int tmp_val = 0;
+ tmp_val = mSupperBassVolumeGainVal;
+ return tmp_val;
+}
+
+int CAudioAlsa::SetDacAudioSourceType(int source_type)
+{
+ int aud_arch_type = GetAudioArchitectureTypeCFG();
+
+ if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_ON_BOARD || aud_arch_type == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC) {
+ SendCmdToOffBoardFBCExternalDac(AUDIO_CMD_SET_SOURCE, source_type);
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB) {
+ SendCmdToOffBoardCustomerLibExternalDac(AUDIO_CMD_SET_SOURCE, source_type);
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_DIGITAL) {
+ }
+
+ return 0;
+}
+
+int CAudioAlsa::CalculateBalanceVol(int max_vol, int balance_val, int vol_buf[])
+{
+ int bal_mid_vol = 0, bal_cal_len = 0;
+ int tmp_val = 0;
+
+ if (balance_val < CC_MIN_SOUND_BALANCE_VAL
+ || balance_val > CC_MAX_SOUND_BALANCE_VAL) {
+ return -1;
+ }
+
+ vol_buf[0] = max_vol;
+ vol_buf[1] = max_vol;
+
+ bal_mid_vol = (CC_MIN_SOUND_BALANCE_VAL + CC_MAX_SOUND_BALANCE_VAL) / 2;
+ bal_cal_len = (CC_MAX_SOUND_BALANCE_VAL - CC_MIN_SOUND_BALANCE_VAL) / 2;
+
+ if (balance_val == bal_mid_vol) {
+ LOGD(
+ "%s, balance value = %d, bal_mid_vol = %d, vol_buf[0] = %d, vol_buf[1] = %d.\n",
+ __FUNCTION__, balance_val, bal_mid_vol, vol_buf[0], vol_buf[1]);
+ return 0;
+ } else if (balance_val < bal_mid_vol) {
+ vol_buf[1] = (bal_cal_len - (bal_mid_vol - balance_val)) * max_vol / bal_cal_len;
+ } else if (balance_val > bal_mid_vol) {
+ vol_buf[0] = (bal_cal_len - (balance_val - bal_mid_vol)) * max_vol / bal_cal_len;
+ }
+
+ if (GetAudioAmplifierBalanceExchangeCFG() != 0) {
+ tmp_val = vol_buf[0];
+ vol_buf[0] = vol_buf[1];
+ vol_buf[1] = tmp_val;
+ }
+
+ LOGD(
+ "%s, balance value = %d, bal_mid_vol = %d, vol_buf[0] = %d, vol_buf[1] = %d.\n",
+ __FUNCTION__, balance_val, bal_mid_vol, vol_buf[0], vol_buf[1]);
+ return 0;
+}
+
+int CAudioAlsa::SetExternalDacMute(int mute_state)
+{
+ int tmp_ret = 0;
+ int aud_arch_type = GetAudioArchitectureTypeCFG();
+
+ if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_ON_BOARD || aud_arch_type == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
+ SetExternalDacChannelSwitch(1, mute_state);
+ SetExternalDacChannelSwitch(2, mute_state);
+
+ if (GetAudioSupperBassModuleDisableCFG() == 0) {
+ SetExternalDacChannelSwitch(3, mute_state);
+ }
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC) {
+ SendCmdToOffBoardFBCExternalDac(AUDIO_CMD_SET_MUTE, mute_state);
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB) {
+ SendCmdToOffBoardCustomerLibExternalDac(AUDIO_CMD_SET_MUTE, mute_state);
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_DIGITAL) {
+ SetDigitalMute(mute_state);
+ }
+
+ return tmp_ret;
+}
+
+int CAudioAlsa::SetInternalDacMute(int mute_state)
+{
+ return 0;
+}
+
+int CAudioAlsa::setAudioPcmPlaybackMute(int mute_state)
+{
+ const char *value;
+ char prop[256];
+ value = config_get_str ( "TV", "tvin.2d4G.headset.en", "null" );
+ property_get("audio.output.double_output", prop, "null");
+ if ( strcmp ( value, "enable" ) == 0 && (strcmp(prop, "0") == 0 || strcmp(prop, "null") == 0)) {
+ SetAudioPcmPlaybackSwitch(mute_state);
+ }
+ return 0;
+}
+
+int CAudioAlsa::SetExternalDacMainVolume(int main_vol)
+{
+ int tmp_ret = 0;
+ int aud_arch_type = GetAudioArchitectureTypeCFG();
+
+ if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_ON_BOARD || aud_arch_type == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
+ int digit_vol = 0;
+ int vol_gain_val = 0;
+ int balance_val = 0, vol_buf[2] = {0, 0};
+
+ //handle l&r channel volume for balance
+ balance_val = GetBalanceValue();
+ CalculateBalanceVol(255, balance_val, vol_buf);
+
+ tmp_ret |= SetExternalDacChannelVolume(1, vol_buf[0]);
+ tmp_ret |= SetExternalDacChannelVolume(2, vol_buf[1]);
+
+ //handle master channel volume
+ digit_vol = TransVolumeBarVolToDigitalVol(mMainDigitLutBuf, main_vol,
+ 0, 100, CC_MIN_DAC_VOLUME, CC_MAX_DAC_VOLUME);
+
+ vol_gain_val = GetMainVolumeGain();
+ digit_vol += vol_gain_val;
+ if (digit_vol < CC_MIN_DAC_VOLUME) {
+ digit_vol = CC_MIN_DAC_VOLUME;
+ } else if (digit_vol > CC_MAX_DAC_VOLUME) {
+ digit_vol = CC_MAX_DAC_VOLUME;
+ }
+ tmp_ret |= SetExternalDacChannelVolume(0, digit_vol);
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC) {
+ tmp_ret = SendCmdToOffBoardFBCExternalDac(AUDIO_CMD_SET_VOLUME_BAR, main_vol);
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB) {
+ tmp_ret = SendCmdToOffBoardCustomerLibExternalDac(AUDIO_CMD_SET_VOLUME_BAR, main_vol);
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_DIGITAL) {
+ tmp_ret = SetDigitalMainVolume(main_vol);
+ }
+
+ return tmp_ret;
+}
+
+int CAudioAlsa::SetInternalDacMainVolume(int main_vol)
+{
+ int tmp_ret = 0, digit_vol = 0;
+ int aud_arch_type = GetAudioArchitectureTypeCFG();
+
+ if (aud_arch_type == CC_DAC_T866_INTERNAL_DAC) {
+ digit_vol = TransVolumeBarVolToDigitalVol(mMainDigitLutBuf, main_vol,
+ 0, 100, CC_MIN_DAC_VOLUME, CC_MAX_DAC_VOLUME);
+
+ if (digit_vol < CC_MIN_DAC_VOLUME) {
+ digit_vol = CC_MIN_DAC_VOLUME;
+ } else if (digit_vol > CC_MAX_DAC_VOLUME) {
+ digit_vol = CC_MAX_DAC_VOLUME;
+ }
+
+ return SetInternalDacLineOutPlayBackVolume(digit_vol, digit_vol);
+ }
+
+ return 0;
+}
+
+int CAudioAlsa::SetExternalDacSupperBassVolume(int tmp_vol)
+{
+ int tmp_ret = 0;
+ int aud_arch_type = GetAudioArchitectureTypeCFG();
+
+ if (GetAudioSupperBassModuleDisableCFG() != 0) {
+ return 0;
+ }
+
+ if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_ON_BOARD || aud_arch_type == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
+ int digit_vol = 0;
+ int vol_gain_val = 0;
+
+ digit_vol = TransVolumeBarVolToDigitalVol(mMainDigitLutBuf, tmp_vol,
+ 0, 100, CC_MIN_DAC_SUB_WOOFER_VOLUME,
+ CC_MAX_DAC_SUB_WOOFER_VOLUME);
+
+ vol_gain_val = GetSupperBassVolumeGain();
+ digit_vol += vol_gain_val;
+ if (digit_vol < CC_MIN_DAC_SUB_WOOFER_VOLUME) {
+ digit_vol = CC_MIN_DAC_SUB_WOOFER_VOLUME;
+ } else if (digit_vol > CC_MAX_DAC_SUB_WOOFER_VOLUME) {
+ digit_vol = CC_MAX_DAC_SUB_WOOFER_VOLUME;
+ }
+
+ tmp_ret = SetExternalDacChannelVolume(3, digit_vol);
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC) {
+ tmp_ret = SendCmdToOffBoardFBCExternalDac(AUDIO_CMD_SET_SUBCHANNEL_VOLUME, tmp_vol);
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB) {
+ tmp_ret = SendCmdToOffBoardCustomerLibExternalDac(AUDIO_CMD_SET_SUBCHANNEL_VOLUME, tmp_vol);
+ }
+
+ return tmp_ret;
+}
+
+int CAudioAlsa::SetExternalDacEQ(int mode_val)
+{
+ int tmp_ret = 0;
+ int aud_arch_type = GetAudioArchitectureTypeCFG();
+
+ if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_ON_BOARD || aud_arch_type == CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD) {
+ SetExternalDacEQMode(mode_val);
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC) {
+ SendCmdToOffBoardFBCExternalDac(AUDIO_CMD_SET_EQ_MODE, mode_val);
+ } else if (aud_arch_type == CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB) {
+ SendCmdToOffBoardCustomerLibExternalDac(AUDIO_CMD_SET_EQ_MODE, mode_val);
+ }
+
+ return tmp_ret;
+}
+
+int (*HandleDacMute)(int mute_state);
+int (*HandleDacMainVolume)(int vol);
+int (*HandleDacBalance)(int balance_val);
+int (*HandleAudioSourceType)(int source_type);
+
+static void *gExternalDacLibHandler = NULL;
+int CAudioAlsa::LoadExternalDacLib(void)
+{
+ char *error;
+
+ ALOGD("%s, entering...\n", __FUNCTION__);
+
+ if (gExternalDacLibHandler != NULL) {
+ return 0;
+ }
+
+ const char *config_value = config_get_str("TV", "audio.external.dac.libpath", "/system/lib/libdac.so");
+ gExternalDacLibHandler = dlopen(config_value, RTLD_NOW);
+ if (!gExternalDacLibHandler) {
+ ALOGE("%s, failed to load external dac lib (%s)\n", __FUNCTION__, config_value);
+ goto Error;
+ }
+
+
+ HandleDacMute = (int(*)(int))dlsym(gExternalDacLibHandler, "HandleDacMute");
+ if (HandleDacMute == NULL) {
+ ALOGE("%s, fail find fun HandleDacMute()\n", __FUNCTION__);
+ goto Error;
+ }
+ HandleDacMainVolume = (int(*)(int))dlsym(gExternalDacLibHandler, "HandleDacMainVolume");
+ if (HandleDacMainVolume == NULL) {
+ ALOGE("%s, fail find fun HandleDacMainVolume()\n", __FUNCTION__);
+ goto Error;
+ }
+ HandleDacBalance = (int(*)(int))dlsym(gExternalDacLibHandler, "HandleDacBalance");
+ if (HandleDacBalance == NULL) {
+ ALOGE("%s, fail find fun HandleDacBalance()\n", __FUNCTION__);
+ goto Error;
+ }
+ HandleAudioSourceType = (int(*)(int))dlsym(gExternalDacLibHandler, "HandleAudioSourceType");
+ if (HandleAudioSourceType == NULL) {
+ ALOGE("%s, fail find fun HandleAudioSourceType()\n", __FUNCTION__);
+ goto Error;
+ }
+
+ return 0;
+
+Error: //
+ HandleDacMute = NULL;
+ HandleDacMainVolume = NULL;
+ HandleDacBalance = NULL;
+ HandleAudioSourceType = NULL;
+
+ if (gExternalDacLibHandler != NULL) {
+ dlclose(gExternalDacLibHandler);
+ gExternalDacLibHandler = NULL;
+ }
+ return -1;
+}
+
+int CAudioAlsa::SendCmdToOffBoardCustomerLibExternalDac(int cmd, int para)
+{
+ LoadExternalDacLib();
+ if (gExternalDacLibHandler != NULL) {
+ if (cmd == AUDIO_CMD_SET_MUTE) {
+ if (HandleDacMute != NULL) {
+ LOGD("%s, call external dac lib HandleDacMute (para = %d).\n", __FUNCTION__, para);
+ return (*HandleDacMute)(para);
+ }
+ } else if (cmd == AUDIO_CMD_SET_VOLUME_BAR) {
+ if (HandleDacMainVolume != NULL) {
+ LOGD("%s, call external dac lib HandleDacMainVolume (para = %d).\n", __FUNCTION__, para);
+ return (*HandleDacMainVolume)(para);
+ }
+ } else if (cmd == AUDIO_CMD_SET_BALANCE) {
+ if (HandleDacBalance != NULL) {
+ LOGD("%s, call external dac lib HandleDacBalance (para = %d).\n", __FUNCTION__, para);
+ return (*HandleDacBalance)(para);
+ }
+ } else if (cmd == AUDIO_CMD_SET_SOURCE) {
+ if (HandleAudioSourceType != NULL) {
+ LOGD("%s, call external dac lib HandleAudioSourceType (para = %d).\n", __FUNCTION__, para);
+ return (*HandleAudioSourceType)(para);
+ }
+ }
+ }
+
+ return 0;
+}
+
+int CAudioAlsa::SendCmdToOffBoardFBCExternalDac(int cmd, int para)
+{
+ CFbcCommunication *pFBC = GetSingletonFBC();
+ if (pFBC != NULL) {
+ if (cmd == AUDIO_CMD_SET_MUTE) {
+ int fbc_mute = 0;//0 is mute,1 is unmute
+ if(para == CC_AUDIO_MUTE) {
+ fbc_mute = 0;
+ } else {
+ fbc_mute = 1;
+ }
+ //int fbcIsBute;
+ //pFBC->cfbc_Get_Mute(COMM_DEV_SERIAL, &fbcIsBute);
+ //LOGD("fbc is mute = %d", fbcIsBute);
+ return pFBC->cfbc_Set_Mute(COMM_DEV_SERIAL, fbc_mute);
+ } else if (cmd == AUDIO_CMD_SET_VOLUME_BAR) {
+ LOGD("%s, send AUDIO_CMD_SET_VOLUME_BAR (para = %d) to fbc.\n", __FUNCTION__, para);
+ return pFBC->cfbc_Set_Volume_Bar(COMM_DEV_SERIAL, para);
+ } else if (cmd == AUDIO_CMD_SET_BALANCE) {
+ LOGD("%s, send AUDIO_CMD_SET_BALANCE (para = %d) to fbc.\n", __FUNCTION__, para);
+ return pFBC->cfbc_Set_Balance(COMM_DEV_SERIAL, para);
+ } else if (cmd == AUDIO_CMD_SET_SOURCE) {
+ LOGD("%s, send AUDIO_CMD_SET_SOURCE (para = %d) to fbc.\n", __FUNCTION__, para);
+ return pFBC->cfbc_Set_FBC_Audio_Source(COMM_DEV_SERIAL, para);
+ }
+ }
+
+ return 0;
+}
+
+static int gDigitalMuteStatus = CC_AUDIO_UNMUTE;
+static int gDigitalLeftVol = 0;
+static int gDigitalRightVol = 0;
+
+int CAudioAlsa::HandleDigitalVolume(int l_val, int r_val)
+{
+ amAudioSetLeftGain(l_val);
+ amAudioSetRightGain(r_val);
+
+ amAudioSetAndroidVolumeEnable(1);
+ amAudioSetAndroidVolume(l_val, r_val);
+
+ LOGD("%s, l_val = %d, r_val = %d.\n", __FUNCTION__, l_val, r_val);
+ return 0;
+}
+
+int CAudioAlsa::HandleDigitalMute(int mute_status)
+{
+ if (mute_status == CC_AUDIO_MUTE) {
+ HandleDigitalVolume(0, 0);
+ } else if (mute_status == CC_AUDIO_UNMUTE) {
+ HandleDigitalVolume(gDigitalLeftVol, gDigitalRightVol);
+ }
+
+ return 0;
+}
+
+int CAudioAlsa::SetDigitalMainVolume(int main_vol)
+{
+ int tmp_ret = 0, l_val = 0, r_val = 0;
+ int balance_val = 0, vol_buf[2] = {0, 0};
+
+ //handle l&r channel volume for balance
+ balance_val = GetBalanceValue();
+ CalculateBalanceVol(main_vol, balance_val, vol_buf);
+
+ //handle master channel volume
+ l_val = TransVolumeBarVolToDigitalVol(mMainDigitLutBuf, vol_buf[0],
+ 0, 100, CC_MIN_DAC_VOLUME, CC_MAX_DAC_VOLUME);
+ r_val = TransVolumeBarVolToDigitalVol(mMainDigitLutBuf, vol_buf[1],
+ 0, 100, CC_MIN_DAC_VOLUME, CC_MAX_DAC_VOLUME);
+
+ gDigitalLeftVol = l_val;
+ gDigitalRightVol = r_val;
+ if (gDigitalMuteStatus == CC_AUDIO_UNMUTE) {
+ HandleDigitalVolume(l_val, r_val);
+ }
+
+ return tmp_ret;
+}
+
+int CAudioAlsa::SetDigitalMute(int mute_status)
+{
+ if (mute_status == CC_AUDIO_MUTE || mute_status == CC_AUDIO_UNMUTE) {
+ gDigitalMuteStatus = mute_status;
+ return HandleDigitalMute(mute_status);
+ }
+
+ return 0;
+}
+
diff --git a/tvapi/libtv/audio/audio_alsa.h b/tvapi/libtv/audio/audio_alsa.h
index 6d85645..1a0f1e9 100644
--- a/tvapi/libtv/audio/audio_alsa.h
+++ b/tvapi/libtv/audio/audio_alsa.h
@@ -1,131 +1,130 @@
-#ifndef __TV_AUDIO_ALSA_H__
-#define __TV_AUDIO_ALSA_H__
-
-enum CC_AUD_I2S_MUTE {
- CC_I2S_MUTE_OFF,
- CC_I2S_MUTE_ON,
-};
-
-enum CC_AUD_SPDIF_MUTE {
- CC_SPDIF_MUTE_OFF,
- CC_SPDIF_MUTE_ON,
-};
-
-enum CC_AUD_IN_TYPE {
- CC_AUDIO_IN_SOURCE_LINEIN,
- CC_AUDIO_IN_SOURCE_ATV,
- CC_AUDIO_IN_SOURCE_HDMI,
-};
-
-
-#define CC_MIN_DAC_VOLUME (0)
-#define CC_MAX_DAC_VOLUME (255)
-#define CC_MIN_DAC_SUB_WOOFER_VOLUME (0)
-#define CC_MAX_DAC_SUB_WOOFER_VOLUME (255)
-
-#define CC_MIN_SOUND_BALANCE_VAL (0)
-#define CC_MAX_SOUND_BALANCE_VAL (100)
-#define CC_DEF_SOUND_BALANCE_VAL (50)
-
-#define CC_DAC_MUTE_TYPE_EXTERNAL (1)
-#define CC_DAC_MUTE_TYPE_INTERNAL (2)
-
-#define CC_VOL_TRANS_LUT_BUF_SIZE (101)
-
-static const int CC_AUDIO_MUTE = 1;
-static const int CC_AUDIO_UNMUTE = 0;
-
-enum CC_AUDIO_SOURCE_TYPE {
- AUDIO_HDMI_SOURCE,
- AUDIO_ATV_SOURCE,
- AUDIO_AV_SOURCE,
- AUDIO_MPEG_SOURCE,
- AUDIO_MAX_SOURCE
-};
-
-
-//use tinyalsa,is a like alsa-lib for android
-class CAudioAlsa
-{
-public:
- CAudioAlsa();
- ~CAudioAlsa();
- int SetAudioInSource(int source_type);
- int GetAudioInSource(void);
- int SetInternalDacLineInSelectChannel(int line_in_number);
- int SetInternalDacLineInCaptureVolume(int l_vol, int r_vol);
- int GetInternalDacLineInCaptureVolume(int vol_buf[]);
- int SetInternalDacLineOutPlayBackVolume(int l_vol, int r_vol);
- int GetInternalDacLineOutPlayBackVolume(int vol_buf[]);
- int SetExternalDacChannelSwitch(int chan_ind, int switch_val);
- int SetExternalDacChannelVolume(int chan_ind, int main_vol);
- int SetExternalDacEQMode(int mode_val);
- int SetI2SMute(int mute_status);
- int SetSPDIFMute(int mute_status);
- int SetHardwareResample(int sr);
- int SetAudioSwitchIO(int value);
- int SetAudioPcmPlaybackVolume(int val);
- int SetAudioPcmPlaybackSwitch(int vol);
-
- int SetOutput_Swap(int value);
-
-
- int SetMixerBypassSwitch(int switch_val);
- int GetMixerBypassSwitch(void);
- int SetMixerDacSwitch(int switch_val);
- int GetMixerDacSwitch(void);
- //dac
- void SetMainVolDigitLutBuf(int digit_lut_buf[]);
- void SetSupperBassVolDigitLutBuf(int digit_lut_buf[]);
- int SetDacMute(int mute_state, int mute_type);
- int SetDacMainVolume(int main_vol);
- int SetDacSupperBassVolume(int tmp_vol);
- int SetDacEQMode(int mode_val);
- int SetBalanceValue(int balance_val);
- int GetBalanceValue();
- int SetMainVolumeGain(int gain_val);
- int GetMainVolumeGain();
- int SetSupperBassVolumeGain(int gain_val);
- int GetSupperBassVolumeGain();
- int SetDacAudioSourceType(int source_type);
- //end dac
-private:
- int get_aml_card();
- int AudioControlSetValue(int val_count, int data_buf[], char *match_names);
- int AudioControlGetValue(int val_count, int ret_buf[], char *match_names);
- int get_USB_Audio_card();
- int HandleUSBAudioControlValue(int val_count, int data_buf[], int match_count, char **match_names);
- int CheckVolume(int digit_vol, int digit_min, int digit_max, int hd_min, int hd_max);
- int GetTwoChannelVolume(int vol_buf[], int l_min_vol, int l_max_vol, int r_min_vol, int r_max_vol, char *match_names, int hd_min, int hd_max);
- int GetLineInMaxVol();
- int GetLineOutMaxVol();
- char *GetAlsaControlName(int get_type);
- //
- int TransVolumeBarVolToDigitalVol(int *, int, int, int, int, int);
- int TransDigitalVolToVolumeBarVol(int *, int, int, int, int, int);
- int CalculateBalanceVol(int, int, int *);
- int SetExternalDacMute(int);
- int SetInternalDacMute(int);
- int setAudioPcmPlaybackMute(int);
- int SetExternalDacMainVolume(int);
- int SetInternalDacMainVolume(int);
- int SetExternalDacSupperBassVolume(int);
- int SetExternalDacEQ(int);
- int LoadExternalDacLib();
- int SendCmdToOffBoardCustomerLibExternalDac(int, int);
- int SendCmdToOffBoardFBCExternalDac(int, int);
- int HandleDigitalVolume(int, int);
- int HandleDigitalMute(int);
- int SetDigitalMainVolume(int);
- int SetDigitalMute(int);
- //
- //mem
- struct mixer *mpMixer;
- struct mixer *mpUsbMixer;
- volatile int mMainVolumeBalanceVal;
- volatile int mMainVolumeGainVal;
- volatile int mSupperBassVolumeGainVal;
- int mMainDigitLutBuf[CC_VOL_TRANS_LUT_BUF_SIZE];
- int mSupperBassDigitLutBuf[CC_VOL_TRANS_LUT_BUF_SIZE];
-};
-#endif //__TV_AUDIO_ALSA_H__
+#ifndef __TV_AUDIO_ALSA_H__
+#define __TV_AUDIO_ALSA_H__
+
+enum CC_AUD_I2S_MUTE {
+ CC_I2S_MUTE_OFF,
+ CC_I2S_MUTE_ON,
+};
+
+enum CC_AUD_SPDIF_MUTE {
+ CC_SPDIF_MUTE_OFF,
+ CC_SPDIF_MUTE_ON,
+};
+
+enum CC_AUD_IN_TYPE {
+ CC_AUDIO_IN_SOURCE_LINEIN,
+ CC_AUDIO_IN_SOURCE_ATV,
+ CC_AUDIO_IN_SOURCE_HDMI,
+};
+
+
+#define CC_MIN_DAC_VOLUME (0)
+#define CC_MAX_DAC_VOLUME (255)
+#define CC_MIN_DAC_SUB_WOOFER_VOLUME (0)
+#define CC_MAX_DAC_SUB_WOOFER_VOLUME (255)
+
+#define CC_MIN_SOUND_BALANCE_VAL (0)
+#define CC_MAX_SOUND_BALANCE_VAL (100)
+#define CC_DEF_SOUND_BALANCE_VAL (50)
+
+#define CC_DAC_MUTE_TYPE_EXTERNAL (1)
+#define CC_DAC_MUTE_TYPE_INTERNAL (2)
+
+#define CC_VOL_TRANS_LUT_BUF_SIZE (101)
+
+static const int CC_AUDIO_MUTE = 1;
+static const int CC_AUDIO_UNMUTE = 0;
+
+enum CC_AUDIO_SOURCE_TYPE {
+ AUDIO_HDMI_SOURCE,
+ AUDIO_ATV_SOURCE,
+ AUDIO_AV_SOURCE,
+ AUDIO_MPEG_SOURCE,
+ AUDIO_MAX_SOURCE
+};
+
+
+//use tinyalsa,is a like alsa-lib for android
+class CAudioAlsa {
+public:
+ CAudioAlsa();
+ ~CAudioAlsa();
+ int SetAudioInSource(int source_type);
+ int GetAudioInSource(void);
+ int SetInternalDacLineInSelectChannel(int line_in_number);
+ int SetInternalDacLineInCaptureVolume(int l_vol, int r_vol);
+ int GetInternalDacLineInCaptureVolume(int vol_buf[]);
+ int SetInternalDacLineOutPlayBackVolume(int l_vol, int r_vol);
+ int GetInternalDacLineOutPlayBackVolume(int vol_buf[]);
+ int SetExternalDacChannelSwitch(int chan_ind, int switch_val);
+ int SetExternalDacChannelVolume(int chan_ind, int main_vol);
+ int SetExternalDacEQMode(int mode_val);
+ int SetI2SMute(int mute_status);
+ int SetSPDIFMute(int mute_status);
+ int SetHardwareResample(int sr);
+ int SetAudioSwitchIO(int value);
+ int SetAudioPcmPlaybackVolume(int val);
+ int SetAudioPcmPlaybackSwitch(int vol);
+
+ int SetOutput_Swap(int value);
+
+
+ int SetMixerBypassSwitch(int switch_val);
+ int GetMixerBypassSwitch(void);
+ int SetMixerDacSwitch(int switch_val);
+ int GetMixerDacSwitch(void);
+ //dac
+ void SetMainVolDigitLutBuf(int digit_lut_buf[]);
+ void SetSupperBassVolDigitLutBuf(int digit_lut_buf[]);
+ int SetDacMute(int mute_state, int mute_type);
+ int SetDacMainVolume(int main_vol);
+ int SetDacSupperBassVolume(int tmp_vol);
+ int SetDacEQMode(int mode_val);
+ int SetBalanceValue(int balance_val);
+ int GetBalanceValue();
+ int SetMainVolumeGain(int gain_val);
+ int GetMainVolumeGain();
+ int SetSupperBassVolumeGain(int gain_val);
+ int GetSupperBassVolumeGain();
+ int SetDacAudioSourceType(int source_type);
+ //end dac
+private:
+ int get_aml_card();
+ int AudioControlSetValue(int val_count, int data_buf[], char *match_names);
+ int AudioControlGetValue(int val_count, int ret_buf[], char *match_names);
+ int get_USB_Audio_card();
+ int HandleUSBAudioControlValue(int val_count, int data_buf[], int match_count, char **match_names);
+ int CheckVolume(int digit_vol, int digit_min, int digit_max, int hd_min, int hd_max);
+ int GetTwoChannelVolume(int vol_buf[], int l_min_vol, int l_max_vol, int r_min_vol, int r_max_vol, char *match_names, int hd_min, int hd_max);
+ int GetLineInMaxVol();
+ int GetLineOutMaxVol();
+ char *GetAlsaControlName(int get_type);
+ //
+ int TransVolumeBarVolToDigitalVol(int *, int, int, int, int, int);
+ int TransDigitalVolToVolumeBarVol(int *, int, int, int, int, int);
+ int CalculateBalanceVol(int, int, int *);
+ int SetExternalDacMute(int);
+ int SetInternalDacMute(int);
+ int setAudioPcmPlaybackMute(int);
+ int SetExternalDacMainVolume(int);
+ int SetInternalDacMainVolume(int);
+ int SetExternalDacSupperBassVolume(int);
+ int SetExternalDacEQ(int);
+ int LoadExternalDacLib();
+ int SendCmdToOffBoardCustomerLibExternalDac(int, int);
+ int SendCmdToOffBoardFBCExternalDac(int, int);
+ int HandleDigitalVolume(int, int);
+ int HandleDigitalMute(int);
+ int SetDigitalMainVolume(int);
+ int SetDigitalMute(int);
+ //
+ //mem
+ struct mixer *mpMixer;
+ struct mixer *mpUsbMixer;
+ volatile int mMainVolumeBalanceVal;
+ volatile int mMainVolumeGainVal;
+ volatile int mSupperBassVolumeGainVal;
+ int mMainDigitLutBuf[CC_VOL_TRANS_LUT_BUF_SIZE];
+ int mSupperBassDigitLutBuf[CC_VOL_TRANS_LUT_BUF_SIZE];
+};
+#endif //__TV_AUDIO_ALSA_H__
diff --git a/tvapi/libtv/audio/audio_android.cpp b/tvapi/libtv/audio/audio_android.cpp
index bdd118d..dc973b4 100644
--- a/tvapi/libtv/audio/audio_android.cpp
+++ b/tvapi/libtv/audio/audio_android.cpp
@@ -1,1035 +1,1035 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <malloc.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <sys/stat.h>
-#include <media/mediarecorder.h>
-#include <system/audio.h>
-#include <android/log.h>
-#include <cutils/properties.h>
-#include <media/AudioSystem.h>
-#include <sys/prctl.h>
-#include <math.h>
-
-#include "audio_cfg.h"
-#include "audio_api.h"
-#include "audio_android.h"
-#include "audio_android_effect.h"
-
-#define msleep(x) usleep(x*1000)
-
-#define LOG_TAG "AndroidAudio"
-#include "CTvLog.h"
-
-#define SOFTWARE_RESAMPLE
-
-#define HDMI_PERIOD_SIZE 1024
-#define PERIOD_SIZE 512
-
-#define debug 0
-//temp buffer between record thread and playback thread
-#define temp_buffer_size 1024*14
-#define mid_buffer_size 1024*7 //reset distance for HDMI
-#define reset_distance 1024*2 //reset distance for atv
-
-
-#ifdef SOFTWARE_RESAMPLE
-#define Upresample_distance 1024*10
-#define Downresample_distance 1024*4
-
-#define period_size 2 //1024*periodsize
-#define resample_ratio 16 // unit:one in a thousand
-#define fraction_bit 16 //16.16 type
-#define upsample_framecount (1024 + resample_ratio)
-#define upsample_ratio (unsigned int)((float)downsample_framecount*65536.0f/(float)1024)
-#define downsample_framecount (1024 - resample_ratio)
-#define downsample_ratio (unsigned int)((float)upsample_framecount*65536.0f/(float)1024)
-#define resample_counter (1024/resample_ratio)
-
-short *resample_temp_buffer = NULL;
-
-const unsigned int FractionStep_up = upsample_ratio;
-const unsigned int FractionStep_down = downsample_ratio;
-unsigned int Upsample_Fraction = 0;
-unsigned int Downsample_Fraction = 0;
-#endif
-
-#if debug == 1
-int record_counter = 0;
-int playback_counter = 0;
-#endif
-
-
-#define HISTORY_BASE (12)
-#define HISTORY_NUM (1<<12)
-static signed history[2][HISTORY_NUM];
-
-//showbo
-static const int CC_AUDIO_SOURCE_IN_HDMI = 0;//just test,not true value
-
-CAndroidAudio::CAndroidAudio(CAudioAlsa *p): mpAudioAlsa(p)
-{
- int mDumpDataFlag = 0;
- int mDumpDataFd = -1;
- mlpRecorder = NULL;
- mlpTracker = NULL;
- temp_buffer = NULL;
- end_temp_buffer = NULL;
- record_write_pointer = NULL;
- playback_read_pointer = NULL;
- gEnableNoiseGate = false;
- gUserSetEnableNoiseGate = false;
- zero_count_left = 2000;
- zero_count_right = 2000;
- NOISE_HIS = 48000 * 5;
- gNoiseGateThresh = 0;
-}
-CAndroidAudio::~CAndroidAudio()
-{
-}
-
-void CAndroidAudio::noise_filter_init()
-{
- memset(history, 0, sizeof(history));
- zero_count_left = 2000;
- zero_count_right = 2000;
-}
-
-signed CAndroidAudio::noise_filter_left(signed sample)
-{
- //if(!enable_noise_filter ||hdmi_src_in)
- // return sample;
- signed sum_left = 0;
- signed sum_right = 0;
- unsigned left_pos = 0;
- unsigned right_pos = 0;
- signed y = 0;
- int i = 0;
- signed sum = 0;
- signed ret_sample;
- signed zero = 0;
- sample <<= 16;
- sample >>= 16;
-#if 0
- if (hdmi_src_in) { //for hdmi src,not use filter and -6db for prevent clip of SRS/other post process.
- ret_sample = Mul28(sample, M3DB);
- return ret_sample;
- } else {
- ret_sample = Mul28(sample, M3DB);
- sample = ret_sample;
- }
-#endif
- sum_left -= history[0][left_pos];
- sum_left += history[0][(left_pos + HISTORY_NUM - 1)
- & ((1 << HISTORY_BASE) - 1)];
- sum = sum_left >> HISTORY_BASE;
- left_pos = (left_pos + 1) & ((1 << HISTORY_BASE) - 1);
- history[0][(left_pos + HISTORY_NUM - 1) & ((1 << HISTORY_BASE) - 1)] =
- sample;
-
- zero = abs(sample - sum);
- if (zero < gNoiseGateThresh) {
- zero_count_left++;
- if (zero_count_left > NOISE_HIS) {
- zero_count_left = NOISE_HIS;
- y = 0;
- } else {
- y = sample;
- }
- } else {
- y = sample;
- zero_count_left = 0;
- }
- return y;
-}
-
-signed CAndroidAudio::noise_filter_right(signed sample)
-{
- //if(!enable_noise_filter ||hdmi_src_in)
- // return sample;
- signed y = 0;
- int i = 0;
- signed ret_sample;
- signed sum = 0;
- sample <<= 16;
- sample >>= 16;
-#if 0
- if (hdmi_src_in) { //for hdmi src,not use filter and -6db for prevent clip of SRS/other post process.
- ret_sample = Mul28(sample, M3DB);
- return ret_sample;
- } else {
- ret_sample = Mul28(sample, M3DB);
- sample = ret_sample;
- }
-#endif
- sum_right -= history[1][right_pos];
- sum_right += history[1][(right_pos + HISTORY_NUM - 1)
- & ((1 << HISTORY_BASE) - 1)];
- sum = sum_right >> HISTORY_BASE;
- right_pos = (right_pos + 1) & ((1 << HISTORY_BASE) - 1);
- history[1][(right_pos + HISTORY_NUM - 1) & ((1 << HISTORY_BASE) - 1)] =
- sample;
-
- if (abs(sample - sum) < gNoiseGateThresh) {
- zero_count_right++;
- if (zero_count_right > NOISE_HIS) {
- zero_count_right = NOISE_HIS;
- y = 0;
- } else {
- y = sample;
- }
- } else {
- y = sample;
- zero_count_right = 0;
- }
- return y;
-}
-
-void CAndroidAudio::DeleteAudioRecorder(void)
-{
-#if ANDROID_PLATFORM_SDK_VERSION < 19
- if (mlpRecorder != NULL) {
- delete mlpRecorder;
- mlpRecorder = NULL;
- }
-#else
- if (mlpRecorder != NULL ) {
- mlpRecorder = NULL;
- }
-
- if (mmpAudioRecorder != NULL ) {
- mmpAudioRecorder.clear();
- }
-#endif
-}
-
-void CAndroidAudio::FreeAudioRecorder(void)
-{
- if (mlpRecorder != NULL) {
- mlpRecorder->stop();
- }
-
- DeleteAudioRecorder();
-}
-
-void CAndroidAudio::DeleteAudioTracker(void)
-{
-#if ANDROID_PLATFORM_SDK_VERSION < 19
- if (mlpTracker != NULL) {
- delete mlpTracker;
- mlpTracker = NULL;
- }
-#else
- if (mlpTracker != NULL ) {
- mlpTracker = NULL;
- }
-
- if (mmpAudioTracker != NULL ) {
- mmpAudioTracker.clear();
- }
-#endif
-}
-
-void CAndroidAudio::FreeAudioTracker(void)
-{
- if (mlpTracker != NULL) {
- mlpTracker->stop();
- }
-
- DeleteAudioTracker();
-}
-
-int CAndroidAudio::InitTempBuffer()
-{
- int tmp_size = 0;
-
- if (NULL == temp_buffer) {
- tmp_size = temp_buffer_size;
- temp_buffer = new short[tmp_size];
- if (NULL == temp_buffer) {
- return -1;
- }
- memset(temp_buffer, 0, tmp_size * sizeof(short));
- end_temp_buffer = temp_buffer + tmp_size;
- record_write_pointer = temp_buffer;
- playback_read_pointer = temp_buffer;
- }
-#ifdef SOFTWARE_RESAMPLE
- if (NULL == resample_temp_buffer) {
- tmp_size = upsample_framecount * 2 * period_size + 10;
- resample_temp_buffer = new short[tmp_size];
- if (NULL == resample_temp_buffer) {
- return -1;
- }
- memset(temp_buffer, 0, tmp_size * sizeof(short));
- }
-#endif
- return 0;
-}
-
-static void MuteTempBuffer()
-{
- if ((NULL != temp_buffer) && (NULL != mlpTracker)) {
- playback_read_pointer = record_write_pointer;
- memset(temp_buffer, 0, temp_buffer_size * sizeof(short));
- for (int i = 0; i < 10; i++) {
- mlpTracker->write(temp_buffer, temp_buffer_size);
- }
- }
-}
-
-void CAndroidAudio::FreeTempBuffer()
-{
- if (temp_buffer != NULL) {
- delete[] temp_buffer;
- temp_buffer = NULL;
- end_temp_buffer = NULL;
- record_write_pointer = NULL;
- playback_read_pointer = NULL;
- }
-#ifdef SOFTWARE_RESAMPLE
- if (resample_temp_buffer != NULL) {
- delete[] resample_temp_buffer;
- resample_temp_buffer = NULL;
- }
-#endif
-}
-
-void CAndroidAudio::ResetRecordWritePointer()
-{
- record_write_pointer = playback_read_pointer;
-}
-
-void CAndroidAudio::ResetPlaybackReadPointer()
-{
- record_write_pointer = playback_read_pointer;
-}
-
-void CAndroidAudio::ResetPointer()
-{
- if (mpAudioAlsa->GetAudioInSource() == CC_AUDIO_SOURCE_IN_HDMI) {
- playback_read_pointer = record_write_pointer - mid_buffer_size;
- if (playback_read_pointer < temp_buffer) {
- playback_read_pointer += temp_buffer_size;
- }
- } else {
- playback_read_pointer = record_write_pointer - reset_distance;
- if (playback_read_pointer < temp_buffer) {
- playback_read_pointer += temp_buffer_size;
- }
- }
-}
-
-// 0: LINEIN 1: HDMI
-void CAndroidAudio::reset_system_framesize(int input_sample_rate, int output_sample_rate)
-{
- int frame_size = 0;
-
- audio_io_handle_t handle = -1;
-
- if (mpAudioAlsa->GetAudioInSource() == CC_AUDIO_SOURCE_IN_HDMI) {
- frame_size = HDMI_PERIOD_SIZE * 4;
- LOGE("Source In:HDMI, Android system audio out framecount: %d \n",
- frame_size);
- } else {
- //msleep(500);
- frame_size = PERIOD_SIZE * 4;
- LOGE("Source In:LIENIN, Android system audio out framecount: %d \n",
- frame_size);
- }
-
- handle = AudioSystem::getInput(AUDIO_SOURCE_MIC, input_sample_rate,
- AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_IN_STEREO, 0);
-
- if (handle > 0) {
- char str[64];
- memset(str, 0, sizeof(str));
- sprintf(str, "frame_count=%d", frame_size);
- LOGE("input handle number: %d \n", handle);
- AudioSystem::setParameters(handle, String8(str));
- } else {
- LOGE("Can't get input handle! \n");
- }
-
- handle = -1;
-
- handle = AudioSystem::getOutput(AUDIO_STREAM_MUSIC, output_sample_rate,
- AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_OUT_STEREO,
- AUDIO_OUTPUT_FLAG_NONE);
-
- if (handle > 0) {
- char str[64];
- memset(str, 0, sizeof(str));
- sprintf(str, "frame_count=%d", frame_size);
- LOGE("output handle number: %d \n", handle);
- AudioSystem::setParameters(handle, String8(str));
- } else {
- LOGE("Can't get output handle! \n");
- }
-}
-
-inline short CAndroidAudio::clip(int x) //Clip from 16.16 fixed-point to 0.15 fixed-point.
-{
- if (x < -32768)
- return -32768;
- else if (x > 32767)
- return 32767;
- else
- return x;
-}
-
-int CAndroidAudio::upsample(short *input, short *output, unsigned int FractionStep,
- unsigned int input_frame_size, unsigned int frac)
-{
- unsigned int inputIndex = 1;
- unsigned int outputIndex = 0;
-
- while (inputIndex < input_frame_size) {
- *output++ = clip(
- input[2 * inputIndex - 2]
- + (((input[2 * inputIndex] - input[2 * inputIndex - 2])
- * (int32_t) frac) >> 16));
- *output++ = clip(
- input[2 * inputIndex - 1]
- + (((input[2 * inputIndex + 1]
- - input[2 * inputIndex - 1]) * (int32_t) frac)
- >> 16));
-
- frac += FractionStep;
- inputIndex += (frac >> 16);
- frac = (frac & 0xffff);
- outputIndex++;
- }
-
- return outputIndex;
-}
-
-int CAndroidAudio::downsample(short *input, short *output, unsigned int FractionStep,
- unsigned int input_frame_size, unsigned int frac)
-{
- unsigned int inputIndex = 1;
- unsigned int outputIndex = 0;
-
- while (inputIndex < input_frame_size) {
- *output++ = clip(
- input[2 * inputIndex - 2]
- + (((input[2 * inputIndex] - input[2 * inputIndex - 2])
- * (int32_t) frac) >> 16));
- *output++ = clip(
- input[2 * inputIndex - 1]
- + (((input[2 * inputIndex + 1]
- - input[2 * inputIndex - 1]) * (int32_t) frac)
- >> 16));
-
- frac += FractionStep;
- inputIndex += (frac >> 16);
- frac = (frac & 0xffff);
- outputIndex++;
- }
-
- return outputIndex;
-}
-
-int CAndroidAudio::GetWriteSpace(short volatile *WritePoint,
- short volatile *ReadPoint)
-{
- unsigned int space;
-
- if (WritePoint >= ReadPoint)
- space = temp_buffer_size - (WritePoint - ReadPoint);
- else
- space = ReadPoint - WritePoint;
-
- return space;
-}
-int CAndroidAudio::GetReadSpace(short volatile *WritePoint, short volatile *ReadPoint)
-{
- unsigned int space;
-
- if (WritePoint >= ReadPoint)
- space = WritePoint - ReadPoint;
- else
- space = temp_buffer_size - (ReadPoint - WritePoint);
-
- return space;
-}
-
-void CAndroidAudio::recorderCallback(int event, void *user, void *info)
-{
- if (AudioRecord::EVENT_MORE_DATA == event) {
- AudioRecord::Buffer *pbuf = (AudioRecord::Buffer *) info;
-
- if (NULL == mlpRecorder)
- return;
-
- unsigned int offset_bytes = 2
- * (end_temp_buffer - record_write_pointer);
- unsigned int copy_bytes;
- unsigned int output_bytes;
-
- int available_write_space;
- available_write_space = GetWriteSpace(record_write_pointer,
- playback_read_pointer);
-
- //LOGE("~~~~~available_write_space = %d \n", available_write_space);
-
- if (available_write_space < pbuf->size / 2) {
- LOGE(
- "[%s]: ***** FULL! *****\n\trd=0x%x, wr=0x%x, wr_lvl = 0x%x, wr_req = 0x%x\n",
- __FUNCTION__, playback_read_pointer, record_write_pointer,
- available_write_space, pbuf->size / 2);
-
- if (mpAudioAlsa->GetAudioInSource() == CC_AUDIO_SOURCE_IN_HDMI) {
- playback_read_pointer += mid_buffer_size;
- if (playback_read_pointer >= end_temp_buffer) {
- playback_read_pointer -= temp_buffer_size;
- }
- } else {
- playback_read_pointer += (temp_buffer_size - reset_distance);
- if (playback_read_pointer >= end_temp_buffer) {
- playback_read_pointer -= temp_buffer_size;
- }
- }
- return;
- }
-#if debug == 1
- if (record_counter > 500) {
- LOGE("~~~~~RecordCallback, pbuf->size:%d, pbuf->frameCount:%d", pbuf->size, pbuf->frameCount);
- record_counter = 0;
- } else {
- record_counter++;
- }
-#endif
-
-#ifdef SOFTWARE_RESAMPLE
- if (mpAudioAlsa->GetAudioInSource() == CC_AUDIO_SOURCE_IN_HDMI) {
- if (available_write_space <= Downresample_distance) {
- output_bytes = 4
- * downsample((short *) pbuf->raw, resample_temp_buffer,
- FractionStep_down, pbuf->frameCount,
- Downsample_Fraction);
-
- LOGE(
- "downsample: output_framecount = %d, input_frameCount = %d\n",
- output_bytes / 4, pbuf->frameCount);
-
- if (offset_bytes >= output_bytes) {
- memcpy((short *) record_write_pointer, resample_temp_buffer,
- output_bytes);
- record_write_pointer += output_bytes / 2;
-
- if (record_write_pointer == end_temp_buffer)
- record_write_pointer = temp_buffer;
- } else {
- memcpy((short *) record_write_pointer, resample_temp_buffer,
- offset_bytes);
- copy_bytes = offset_bytes;
- offset_bytes = output_bytes - copy_bytes;
- record_write_pointer = temp_buffer;
- memcpy((short *) record_write_pointer,
- resample_temp_buffer + (copy_bytes / 2),
- offset_bytes);
- record_write_pointer += offset_bytes / 2;
- }
- return;
- } else if (available_write_space >= Upresample_distance) {
- output_bytes = 4
- * upsample((short *) pbuf->raw, resample_temp_buffer,
- FractionStep_up, pbuf->frameCount,
- Upsample_Fraction);
-
- LOGE(
- "upsample: output_framecount = %d, input_frameCount = %d\n",
- output_bytes / 4, pbuf->frameCount);
-
- if (offset_bytes >= output_bytes) {
- memcpy((short *) record_write_pointer, resample_temp_buffer,
- output_bytes);
- record_write_pointer += output_bytes / 2;
-
- if (record_write_pointer == end_temp_buffer)
- record_write_pointer = temp_buffer;
- } else {
- memcpy((short *) record_write_pointer, resample_temp_buffer,
- offset_bytes);
- copy_bytes = offset_bytes;
- offset_bytes = output_bytes - copy_bytes;
- record_write_pointer = temp_buffer;
- memcpy((short *) record_write_pointer,
- resample_temp_buffer + (copy_bytes / 2),
- offset_bytes);
- record_write_pointer += offset_bytes / 2;
- }
- return;
- }
-
- Upsample_Fraction = 0;
- Downsample_Fraction = 0;
- }
-#endif
-
- if (offset_bytes >= pbuf->size) {
- memcpy((short *) record_write_pointer, pbuf->raw, pbuf->size);
- record_write_pointer += pbuf->size / 2;
-
- if (record_write_pointer == end_temp_buffer)
- record_write_pointer = temp_buffer;
- } else {
- memcpy((short *) record_write_pointer, pbuf->raw, offset_bytes);
- copy_bytes = offset_bytes;
- offset_bytes = pbuf->size - copy_bytes;
- record_write_pointer = temp_buffer;
- memcpy((short *) record_write_pointer,
- (short *) pbuf->raw + (copy_bytes / 2), offset_bytes);
- record_write_pointer += offset_bytes / 2;
- }
-
- //LOGD("--------RecordCallback, pbuf->size:%d, pbuf->frameCount:%d\n", pbuf->size, pbuf->frameCount);
- //LOGD("--------Record----offset_bytes:%d\n", 2*(record_write_pointer-temp_buffer));
-
- } else if (AudioRecord::EVENT_OVERRUN == event) {
- LOGE("[%s]: AudioRecord::EVENT_OVERRUN\n", __FUNCTION__);
- } else if (AudioRecord::EVENT_MARKER == event) {
- LOGD("[%s]: AudioRecord::EVENT_MARKER\n", __FUNCTION__);
- } else if (AudioRecord::EVENT_NEW_POS == event) {
- LOGD("[%s]: AudioRecord::EVENT_NEW_POS\n", __FUNCTION__);
- }
-}
-
-void CAndroidAudio::trackerCallback(int event, void *user, void *info)
-{
- if (AudioTrack::EVENT_MORE_DATA == event) {
- AudioTrack::Buffer *pbuf = (AudioTrack::Buffer *) info;
-
- if (NULL == mlpTracker)
- return;
-
- int available_read_space;
- available_read_space = GetReadSpace(record_write_pointer,
- playback_read_pointer);
-
- //LOGE("~~~~~available_read_space = %d input_bytes = %d \n", available_read_space,input_bytes);
-
- if (available_read_space < pbuf->size / 2) {
- LOGE(
- "[%s]: ***** EMPTY *****\n\trd=0x%x, wr=0x%x, rd_lvl=0x%x, rd_req=0x%x*****\n",
- __FUNCTION__, playback_read_pointer, record_write_pointer,
- available_read_space, pbuf->size / 2);
-
- if (mpAudioAlsa->GetAudioInSource() == CC_AUDIO_SOURCE_IN_HDMI) {
- playback_read_pointer -= mid_buffer_size;
- if (playback_read_pointer < temp_buffer)
- playback_read_pointer += temp_buffer_size;
- } else {
- playback_read_pointer -= reset_distance;
- if (playback_read_pointer < temp_buffer)
- playback_read_pointer += temp_buffer_size;
- }
-
- } else {
- unsigned int offset_bytes = 2
- * (end_temp_buffer - playback_read_pointer);
- unsigned int copy_bytes;
- int sampNum;
-
- if (offset_bytes >= pbuf->size) {
- if (gEnableNoiseGate) {
- sampNum = pbuf->size / 2;
- for (int i = 0; i < sampNum; i++) {
- pbuf->i16[i] = (short) noise_filter_left(
- (signed) (playback_read_pointer[i]));
- i++;
- pbuf->i16[i] = (short) noise_filter_left(
- (signed) (playback_read_pointer[i]));
- }
- } else {
- memcpy(pbuf->raw, (short *) playback_read_pointer,
- pbuf->size);
- }
-
- memset((void *) playback_read_pointer, 0, pbuf->size);
- playback_read_pointer += pbuf->size / 2;
-
- if (playback_read_pointer == end_temp_buffer)
- playback_read_pointer = temp_buffer;
- } else {
- if (gEnableNoiseGate) {
- sampNum = offset_bytes / 2;
- for (int i = 0; i < sampNum; i++) {
- pbuf->i16[i] = (short) noise_filter_left(
- (signed) (playback_read_pointer[i]));
- i++;
- pbuf->i16[i] = (short) noise_filter_left(
- (signed) (playback_read_pointer[i]));
- }
- } else {
- memcpy(pbuf->raw, (short *) playback_read_pointer,
- offset_bytes);
- }
-
- memset((void *) playback_read_pointer, 0, offset_bytes);
- copy_bytes = offset_bytes;
- offset_bytes = pbuf->size - copy_bytes;
- playback_read_pointer = temp_buffer;
-
- if (gEnableNoiseGate) {
- short *pSrcPtr = &(pbuf->i16[copy_bytes / 2]);
- sampNum = offset_bytes / 2;
- for (int i = 0; i < sampNum; i++) {
- pSrcPtr[i] = (short) noise_filter_left(
- (signed) (playback_read_pointer[i]));
- i++;
- pSrcPtr[i] = (short) noise_filter_left(
- (signed) (playback_read_pointer[i]));
- }
- } else {
- memcpy((short *) pbuf->raw + (copy_bytes / 2),
- (short *) playback_read_pointer, offset_bytes);
- }
- memset((void *) playback_read_pointer, 0, offset_bytes);
- playback_read_pointer += offset_bytes / 2;
- }
- DoDumpData(pbuf->raw, pbuf->size);
-
-#if debug == 1
- if (playback_counter > 500) {
- LOGE("----PlaybackCallback, pbuf->size:%d, pbuf->frameCount:%d", pbuf->size, pbuf->frameCount);
- playback_counter = 0;
- } else {
- playback_counter++;
- }
-#endif
-
- }
- //LOGE("---Playback---offset_bytes:%d\n", 2*(playback_read_pointer-temp_buffer));
- } else if (AudioTrack::EVENT_UNDERRUN == event) {
- LOGE("[%s]: AudioTrack::EVENT_UNDERRUN\n", __FUNCTION__);
- } else if (AudioTrack::EVENT_LOOP_END == event) {
- LOGD("[%s]: AudioTrack::EVENT_LOOP_END\n", __FUNCTION__);
- } else if (AudioTrack::EVENT_MARKER == event) {
- LOGD("[%s]: AudioTrack::EVENT_MARKER\n", __FUNCTION__);
- } else if (AudioTrack::EVENT_NEW_POS == event) {
- LOGD("[%s]: AudioTrack::EVENT_NEW_POS\n", __FUNCTION__);
- } else if (AudioTrack::EVENT_BUFFER_END == event) {
- LOGD("[%s]: AudioTrack::EVENT_BUFFER_END\n", __FUNCTION__);
- }
-}
-
-int CAndroidAudio::initAudioTracker(int sr)
-{
- status_t ret;
- int tmp_session_id = 0;
-
- if (NULL != mlpTracker) {
- LOGE("[%s:%d] Trying to new AudioTrack while it's still not NULL.\n",
- __FUNCTION__, __LINE__);
- goto err_exit;
- }
-
-#if ANDROID_PLATFORM_SDK_VERSION < 19
- mlpTracker = new AudioTrack();
- if (NULL == mlpTracker) {
- LOGE("[%s:%d] Failed to new AudioTrack.\n", __FUNCTION__, __LINE__);
- goto err_exit;
- }
-#else
- mmpAudioTracker = new AudioTrack();
- mlpTracker = mmpAudioTracker.get();
-#endif
-
- tmp_session_id = amAndroidGetAudioSessionId();
- ret = mlpTracker->set(AUDIO_STREAM_DEFAULT, //inputSource
- sr, //sampleRate
- AUDIO_FORMAT_PCM_16_BIT, //format
- AUDIO_CHANNEL_IN_STEREO, //channelMask
- 0, //frameCount
- AUDIO_OUTPUT_FLAG_NONE, //flags
- trackerCallback, //trackerCallback,
- NULL, //user when callback
- 0, //notificationFrames
- NULL, //shared buffer
- false, //threadCanCallJava
- tmp_session_id //sessionId
- );
-
- if (NO_ERROR != ret) {
- LOGE("[%s:%d] Failed to set AudioTrack parameters. status=%d\n",
- __FUNCTION__, __LINE__, ret);
- goto err_exit;
- }
-
- ret = mlpTracker->initCheck();
- if (NO_ERROR != ret) {
- LOGE("[%s:%d] Failed to init AudioTrack. status=%d\n", __FUNCTION__,
- __LINE__, ret);
- goto err_exit;
- }
-
- mlpTracker->start();
- ResetPointer();
-
-#if debug == 1
- uint32_t frame_count;
- frame_count = mlpTracker->frameCount();
- LOGE("~~~~~~[%s:%d] frame_count = %u\n", __FUNCTION__, __LINE__, frame_count);
-#endif
-
- return 0;
-
-err_exit: //
- DeleteAudioTracker();
-
- return -1;
-}
-
-int CAndroidAudio::initAudioRecorder(int sr)
-{
- status_t ret;
-
- if (NULL != mlpRecorder) {
- LOGE("[%s:%d] Trying to new AudioRecord while it's still not NULL.\n",
- __FUNCTION__, __LINE__);
- goto err_exit;
- }
-
-#if ANDROID_PLATFORM_SDK_VERSION < 19
- mlpRecorder = new AudioRecord();
- if (NULL == mlpRecorder) {
- LOGE("[%s:%d] Failed to new AudioRecord.\n", __FUNCTION__, __LINE__);
- goto err_exit;
- }
-#else
- mmpAudioRecorder = new AudioRecord();
- mlpRecorder = mmpAudioRecorder.get();
-#endif
-
- ret = mlpRecorder->set(AUDIO_SOURCE_DEFAULT, //inputSource
- sr, //sampleRate
- AUDIO_FORMAT_PCM_16_BIT, //format
- AUDIO_CHANNEL_IN_STEREO, //channelMask
- 0, //frameCount
- recorderCallback, //callback_t
- NULL, //void* user
- 0, //notificationFrames,
- false, //threadCanCallJava
- 0 //sessionId
- );
-
- if (NO_ERROR != ret) {
- LOGE("[%s:%d] Failed to set AudioRecord parameters. status=%d\n",
- __FUNCTION__, __LINE__, ret);
- goto err_exit;
- }
-
- ret = mlpRecorder->initCheck();
- if (NO_ERROR != ret) {
- LOGE("[%s:%d] Failed to init AudioRecord. status=%d\n", __FUNCTION__,
- __LINE__, ret);
- goto err_exit;
- }
-
- ret = mlpRecorder->start();
- if (NO_ERROR != ret) {
- LOGE("[%s:%d] Failed to start AudioRecord. status=%d\n", __FUNCTION__,
- __LINE__, ret);
- goto err_exit;
- }
-#if debug == 1
- uint32_t frame_count;
- frame_count = mlpRecorder->frameCount();
- LOGE("~~~~~~[%s:%d] frame_count = %u\n", __FUNCTION__, __LINE__, frame_count);
-#endif
-
- return 0;
-err_exit: //
- DeleteAudioRecorder();
- return -1;
-}
-
-int CAndroidAudio::amAndroidInit(int tm_sleep, int init_flag, int recordSr, int trackSr,
- bool enable_noise_gate)
-{
- int tmp_ret;
- LOGD("Enter amAndroidInit function.\n");
-
- amAndroidUninit(0);
-
- // Init the noise gate filter
- gUserSetEnableNoiseGate = enable_noise_gate;
- if (enable_noise_gate && (gNoiseGateThresh > 0)
- && GetAudioNoiseGateEnableCFG()) {
- gEnableNoiseGate = true;
- noise_filter_init();
- } else {
- gEnableNoiseGate = false;
- }
- LOGE("[%s:%d] noise gate enabled:%d!\n", __FUNCTION__, __LINE__,
- gEnableNoiseGate);
-
- if (InitTempBuffer() != 0) {
- LOGE("[%s:%d] Failed to create temp_buffer!\n", __FUNCTION__, __LINE__);
- return 0;
- }
-
- if (init_flag & CC_FLAG_CREATE_RECORD) {
- //LOGD("Start to create Recorder. RecordSr:%d\n", recordSr);
- if (0 != initAudioRecorder(recordSr)) {
- LOGE(" [%s:%d] Created AudioRecorder disable !\n", __FUNCTION__,
- __LINE__);
- return -1;
- }
- //LOGD("[%s:%d] End to create recorder.\n", __FUNCTION__, __LINE__);
- }
-
- if (init_flag & CC_FLAG_CREATE_TRACK) {
- //LOGD("Start to create Tracker. TrackSr:%d\n", trackSr);
- if (0 != initAudioTracker(trackSr)) {
- //FreeAudioRecorder();
- //FreeAudioTracker();
- LOGE(" [%s:%d] Created AudioTrack disable !\n", __FUNCTION__,
- __LINE__);
- return -1;
- }
- //LOGD("[%s:%d] End to create recorder.\n", __FUNCTION__, __LINE__);
- }
-
- if (tm_sleep > 0)
- sleep(tm_sleep);
-
- LOGD("Exit amAndroidInit function sucess.\n");
-
- return 0;
-}
-
-int CAndroidAudio::amAndroidUninit(int tm_sleep)
-{
- LOGD("Enter amAndroidUninit function.\n");
-
- FreeAudioRecorder();
- // MuteTempBuffer();
- FreeAudioTracker();
- FreeTempBuffer();
-
- if (tm_sleep > 0)
- sleep(tm_sleep);
-
- LOGD("Exit amAndroidUninit function sucess.\n");
-
- return 0;
-}
-
-int CAndroidAudio::amAndroidSetRecorderSr(int sr)
-{
- int ret;
- FreeAudioRecorder();
- ResetRecordWritePointer();
- return initAudioRecorder(sr);
-}
-
-int CAndroidAudio::amAndroidSetTrackerSr(int sr)
-{
- FreeAudioTracker();
- ResetPlaybackReadPointer();
- return initAudioTracker(sr);
-}
-
-//
-// Set the noise gate threshold.
-// If it's set to 0, the noise gate filter is disabled.
-// Theoretically, this variable should be protected by mutex. But this API
-// is designed to be called once on system boot, or for debug purpose, and it's
-// set only through this API. To improve the performance of the filters, we
-// don't utilize any mutex here.
-void CAndroidAudio::amAndroidSetNoiseGateThreshold(int thresh)
-{
- int upperBound = GetAudioNoiseGateUpperBoundCFG();
- int forcedThresh = GetAudioNoiseGateThresholdCFG();
- if (forcedThresh >= 0) {
- LOGE("Force noise gate threshold from %d to %d\n", thresh,
- forcedThresh);
- thresh = forcedThresh;
- }
-
- if ((thresh >= 0) && (thresh <= upperBound)) {
- gNoiseGateThresh = thresh;
- } else {
- gNoiseGateThresh = 0;
- }
-
- if (gUserSetEnableNoiseGate && (gNoiseGateThresh > 0)
- && GetAudioNoiseGateEnableCFG()) {
- gEnableNoiseGate = true;
- } else {
- gEnableNoiseGate = false;
- }
- LOGE(
- "[%s:%d] thresh:%d, upperBound:%d, gNoiseGateThresh:%d, gEnableNoiseGate:%d\n",
- __FUNCTION__, __LINE__, thresh, upperBound, gNoiseGateThresh,
- gEnableNoiseGate);
-}
-
-int CAndroidAudio::amAndroidSetDumpDataFlag(int tmp_flag)
-{
- mDumpDataFlag = tmp_flag;
- return mDumpDataFlag;
-}
-
-int CAndroidAudio::amAndroidGetDumpDataFlag()
-{
- return mDumpDataFlag;
-}
-
-void CAndroidAudio::DoDumpData(void *data_buf, int size)
-{
- int tmp_flag = 0;
- char prop_value[PROPERTY_VALUE_MAX];
-
- if (amAndroidGetDumpDataFlag() == 0) {
- return;
- }
-
- memset(prop_value, '\0', PROPERTY_VALUE_MAX);
-
- property_get("audio.dumpdata.en", prop_value, "null");
- if (strcasecmp(prop_value, "null") == 0
- || strcasecmp(prop_value, "0") == 0) {
- if (mDumpDataFd >= 0) {
- close(mDumpDataFd);
- mDumpDataFd = -1;
- }
-
- return;
- }
-
- memset(prop_value, '\0', PROPERTY_VALUE_MAX);
-
- property_get("audio.dumpdata.path", prop_value, "null");
- if (strcasecmp(prop_value, "null") == 0) {
- return;
- }
-
- if (mDumpDataFd < 0) {
- if (access(prop_value, 0) == 0) {
- mDumpDataFd = open(prop_value, O_RDWR | O_SYNC);
- if (mDumpDataFd < 0) {
- LOGE("%s, Open device file \"%s\" error: %s.\n", __FUNCTION__,
- prop_value, strerror(errno));
- return;
- }
- } else {
- mDumpDataFd = open(prop_value, O_WRONLY | O_CREAT | O_EXCL,
- S_IRUSR | S_IWUSR);
- if (mDumpDataFd < 0) {
- LOGE("%s, Create device file \"%s\" error: %s.\n", __FUNCTION__,
- prop_value, strerror(errno));
- return;
- }
- }
- }
-
- write(mDumpDataFd, data_buf, size);
-}
-
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <malloc.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <sys/stat.h>
+#include <media/mediarecorder.h>
+#include <system/audio.h>
+#include <android/log.h>
+#include <cutils/properties.h>
+#include <media/AudioSystem.h>
+#include <sys/prctl.h>
+#include <math.h>
+
+#include "audio_cfg.h"
+#include "audio_api.h"
+#include "audio_android.h"
+#include "audio_android_effect.h"
+
+#define msleep(x) usleep(x*1000)
+
+#define LOG_TAG "AndroidAudio"
+#include "CTvLog.h"
+
+#define SOFTWARE_RESAMPLE
+
+#define HDMI_PERIOD_SIZE 1024
+#define PERIOD_SIZE 512
+
+#define debug 0
+//temp buffer between record thread and playback thread
+#define temp_buffer_size 1024*14
+#define mid_buffer_size 1024*7 //reset distance for HDMI
+#define reset_distance 1024*2 //reset distance for atv
+
+
+#ifdef SOFTWARE_RESAMPLE
+#define Upresample_distance 1024*10
+#define Downresample_distance 1024*4
+
+#define period_size 2 //1024*periodsize
+#define resample_ratio 16 // unit:one in a thousand
+#define fraction_bit 16 //16.16 type
+#define upsample_framecount (1024 + resample_ratio)
+#define upsample_ratio (unsigned int)((float)downsample_framecount*65536.0f/(float)1024)
+#define downsample_framecount (1024 - resample_ratio)
+#define downsample_ratio (unsigned int)((float)upsample_framecount*65536.0f/(float)1024)
+#define resample_counter (1024/resample_ratio)
+
+short *resample_temp_buffer = NULL;
+
+const unsigned int FractionStep_up = upsample_ratio;
+const unsigned int FractionStep_down = downsample_ratio;
+unsigned int Upsample_Fraction = 0;
+unsigned int Downsample_Fraction = 0;
+#endif
+
+#if debug == 1
+int record_counter = 0;
+int playback_counter = 0;
+#endif
+
+
+#define HISTORY_BASE (12)
+#define HISTORY_NUM (1<<12)
+static signed history[2][HISTORY_NUM];
+
+//showbo
+static const int CC_AUDIO_SOURCE_IN_HDMI = 0;//just test,not true value
+
+CAndroidAudio::CAndroidAudio(CAudioAlsa *p): mpAudioAlsa(p)
+{
+ int mDumpDataFlag = 0;
+ int mDumpDataFd = -1;
+ mlpRecorder = NULL;
+ mlpTracker = NULL;
+ temp_buffer = NULL;
+ end_temp_buffer = NULL;
+ record_write_pointer = NULL;
+ playback_read_pointer = NULL;
+ gEnableNoiseGate = false;
+ gUserSetEnableNoiseGate = false;
+ zero_count_left = 2000;
+ zero_count_right = 2000;
+ NOISE_HIS = 48000 * 5;
+ gNoiseGateThresh = 0;
+}
+CAndroidAudio::~CAndroidAudio()
+{
+}
+
+void CAndroidAudio::noise_filter_init()
+{
+ memset(history, 0, sizeof(history));
+ zero_count_left = 2000;
+ zero_count_right = 2000;
+}
+
+signed CAndroidAudio::noise_filter_left(signed sample)
+{
+ //if(!enable_noise_filter ||hdmi_src_in)
+ // return sample;
+ signed sum_left = 0;
+ signed sum_right = 0;
+ unsigned left_pos = 0;
+ unsigned right_pos = 0;
+ signed y = 0;
+ int i = 0;
+ signed sum = 0;
+ signed ret_sample;
+ signed zero = 0;
+ sample <<= 16;
+ sample >>= 16;
+#if 0
+ if(hdmi_src_in) { //for hdmi src,not use filter and -6db for prevent clip of SRS/other post process.
+ ret_sample = Mul28(sample, M3DB);
+ return ret_sample;
+ } else {
+ ret_sample = Mul28(sample, M3DB);
+ sample = ret_sample;
+ }
+#endif
+ sum_left -= history[0][left_pos];
+ sum_left += history[0][(left_pos + HISTORY_NUM - 1)
+ & ((1 << HISTORY_BASE) - 1)];
+ sum = sum_left >> HISTORY_BASE;
+ left_pos = (left_pos + 1) & ((1 << HISTORY_BASE) - 1);
+ history[0][(left_pos + HISTORY_NUM - 1) & ((1 << HISTORY_BASE) - 1)] =
+ sample;
+
+ zero = abs(sample - sum);
+ if (zero < gNoiseGateThresh) {
+ zero_count_left++;
+ if (zero_count_left > NOISE_HIS) {
+ zero_count_left = NOISE_HIS;
+ y = 0;
+ } else {
+ y = sample;
+ }
+ } else {
+ y = sample;
+ zero_count_left = 0;
+ }
+ return y;
+}
+
+signed CAndroidAudio::noise_filter_right(signed sample)
+{
+ //if(!enable_noise_filter ||hdmi_src_in)
+ // return sample;
+ signed y = 0;
+ int i = 0;
+ signed ret_sample;
+ signed sum = 0;
+ sample <<= 16;
+ sample >>= 16;
+#if 0
+ if(hdmi_src_in) { //for hdmi src,not use filter and -6db for prevent clip of SRS/other post process.
+ ret_sample = Mul28(sample, M3DB);
+ return ret_sample;
+ } else {
+ ret_sample = Mul28(sample, M3DB);
+ sample = ret_sample;
+ }
+#endif
+ sum_right -= history[1][right_pos];
+ sum_right += history[1][(right_pos + HISTORY_NUM - 1)
+ & ((1 << HISTORY_BASE) - 1)];
+ sum = sum_right >> HISTORY_BASE;
+ right_pos = (right_pos + 1) & ((1 << HISTORY_BASE) - 1);
+ history[1][(right_pos + HISTORY_NUM - 1) & ((1 << HISTORY_BASE) - 1)] =
+ sample;
+
+ if (abs(sample - sum) < gNoiseGateThresh) {
+ zero_count_right++;
+ if (zero_count_right > NOISE_HIS) {
+ zero_count_right = NOISE_HIS;
+ y = 0;
+ } else {
+ y = sample;
+ }
+ } else {
+ y = sample;
+ zero_count_right = 0;
+ }
+ return y;
+}
+
+void CAndroidAudio::DeleteAudioRecorder(void)
+{
+#if ANDROID_PLATFORM_SDK_VERSION < 19
+ if (mlpRecorder != NULL) {
+ delete mlpRecorder;
+ mlpRecorder = NULL;
+ }
+#else
+ if (mlpRecorder != NULL ) {
+ mlpRecorder = NULL;
+ }
+
+ if (mmpAudioRecorder != NULL ) {
+ mmpAudioRecorder.clear();
+ }
+#endif
+}
+
+void CAndroidAudio::FreeAudioRecorder(void)
+{
+ if (mlpRecorder != NULL) {
+ mlpRecorder->stop();
+ }
+
+ DeleteAudioRecorder();
+}
+
+void CAndroidAudio::DeleteAudioTracker(void)
+{
+#if ANDROID_PLATFORM_SDK_VERSION < 19
+ if (mlpTracker != NULL) {
+ delete mlpTracker;
+ mlpTracker = NULL;
+ }
+#else
+ if (mlpTracker != NULL ) {
+ mlpTracker = NULL;
+ }
+
+ if (mmpAudioTracker != NULL ) {
+ mmpAudioTracker.clear();
+ }
+#endif
+}
+
+void CAndroidAudio::FreeAudioTracker(void)
+{
+ if (mlpTracker != NULL) {
+ mlpTracker->stop();
+ }
+
+ DeleteAudioTracker();
+}
+
+int CAndroidAudio::InitTempBuffer()
+{
+ int tmp_size = 0;
+
+ if (NULL == temp_buffer) {
+ tmp_size = temp_buffer_size;
+ temp_buffer = new short[tmp_size];
+ if (NULL == temp_buffer) {
+ return -1;
+ }
+ memset(temp_buffer, 0, tmp_size * sizeof(short));
+ end_temp_buffer = temp_buffer + tmp_size;
+ record_write_pointer = temp_buffer;
+ playback_read_pointer = temp_buffer;
+ }
+#ifdef SOFTWARE_RESAMPLE
+ if (NULL == resample_temp_buffer) {
+ tmp_size = upsample_framecount * 2 * period_size + 10;
+ resample_temp_buffer = new short[tmp_size];
+ if (NULL == resample_temp_buffer) {
+ return -1;
+ }
+ memset(temp_buffer, 0, tmp_size * sizeof(short));
+ }
+#endif
+ return 0;
+}
+
+static void MuteTempBuffer()
+{
+ if ((NULL != temp_buffer) && (NULL != mlpTracker)) {
+ playback_read_pointer = record_write_pointer;
+ memset(temp_buffer, 0, temp_buffer_size * sizeof(short));
+ for (int i = 0; i < 10; i++) {
+ mlpTracker->write(temp_buffer, temp_buffer_size);
+ }
+ }
+}
+
+void CAndroidAudio::FreeTempBuffer()
+{
+ if (temp_buffer != NULL) {
+ delete[] temp_buffer;
+ temp_buffer = NULL;
+ end_temp_buffer = NULL;
+ record_write_pointer = NULL;
+ playback_read_pointer = NULL;
+ }
+#ifdef SOFTWARE_RESAMPLE
+ if (resample_temp_buffer != NULL) {
+ delete[] resample_temp_buffer;
+ resample_temp_buffer = NULL;
+ }
+#endif
+}
+
+void CAndroidAudio::ResetRecordWritePointer()
+{
+ record_write_pointer = playback_read_pointer;
+}
+
+void CAndroidAudio::ResetPlaybackReadPointer()
+{
+ record_write_pointer = playback_read_pointer;
+}
+
+void CAndroidAudio::ResetPointer()
+{
+ if (mpAudioAlsa->GetAudioInSource() == CC_AUDIO_SOURCE_IN_HDMI) {
+ playback_read_pointer = record_write_pointer - mid_buffer_size;
+ if (playback_read_pointer < temp_buffer) {
+ playback_read_pointer += temp_buffer_size;
+ }
+ } else {
+ playback_read_pointer = record_write_pointer - reset_distance;
+ if (playback_read_pointer < temp_buffer) {
+ playback_read_pointer += temp_buffer_size;
+ }
+ }
+}
+
+// 0: LINEIN 1: HDMI
+void CAndroidAudio::reset_system_framesize(int input_sample_rate, int output_sample_rate)
+{
+ int frame_size = 0;
+
+ audio_io_handle_t handle = -1;
+
+ if (mpAudioAlsa->GetAudioInSource() == CC_AUDIO_SOURCE_IN_HDMI) {
+ frame_size = HDMI_PERIOD_SIZE * 4;
+ LOGE("Source In:HDMI, Android system audio out framecount: %d \n",
+ frame_size);
+ } else {
+ //msleep(500);
+ frame_size = PERIOD_SIZE * 4;
+ LOGE("Source In:LIENIN, Android system audio out framecount: %d \n",
+ frame_size);
+ }
+
+ handle = AudioSystem::getInput(AUDIO_SOURCE_MIC, input_sample_rate,
+ AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_IN_STEREO, 0);
+
+ if (handle > 0) {
+ char str[64];
+ memset(str, 0, sizeof(str));
+ sprintf(str, "frame_count=%d", frame_size);
+ LOGE("input handle number: %d \n", handle);
+ AudioSystem::setParameters(handle, String8(str));
+ } else {
+ LOGE("Can't get input handle! \n");
+ }
+
+ handle = -1;
+
+ handle = AudioSystem::getOutput(AUDIO_STREAM_MUSIC, output_sample_rate,
+ AUDIO_FORMAT_PCM_16_BIT, AUDIO_CHANNEL_OUT_STEREO,
+ AUDIO_OUTPUT_FLAG_NONE);
+
+ if (handle > 0) {
+ char str[64];
+ memset(str, 0, sizeof(str));
+ sprintf(str, "frame_count=%d", frame_size);
+ LOGE("output handle number: %d \n", handle);
+ AudioSystem::setParameters(handle, String8(str));
+ } else {
+ LOGE("Can't get output handle! \n");
+ }
+}
+
+inline short CAndroidAudio::clip(int x) //Clip from 16.16 fixed-point to 0.15 fixed-point.
+{
+ if (x < -32768)
+ return -32768;
+ else if (x > 32767)
+ return 32767;
+ else
+ return x;
+}
+
+int CAndroidAudio::upsample(short *input, short *output, unsigned int FractionStep,
+ unsigned int input_frame_size, unsigned int frac)
+{
+ unsigned int inputIndex = 1;
+ unsigned int outputIndex = 0;
+
+ while (inputIndex < input_frame_size) {
+ *output++ = clip(
+ input[2 * inputIndex - 2]
+ + (((input[2 * inputIndex] - input[2 * inputIndex - 2])
+ * (int32_t) frac) >> 16));
+ *output++ = clip(
+ input[2 * inputIndex - 1]
+ + (((input[2 * inputIndex + 1]
+ - input[2 * inputIndex - 1]) * (int32_t) frac)
+ >> 16));
+
+ frac += FractionStep;
+ inputIndex += (frac >> 16);
+ frac = (frac & 0xffff);
+ outputIndex++;
+ }
+
+ return outputIndex;
+}
+
+int CAndroidAudio::downsample(short *input, short *output, unsigned int FractionStep,
+ unsigned int input_frame_size, unsigned int frac)
+{
+ unsigned int inputIndex = 1;
+ unsigned int outputIndex = 0;
+
+ while (inputIndex < input_frame_size) {
+ *output++ = clip(
+ input[2 * inputIndex - 2]
+ + (((input[2 * inputIndex] - input[2 * inputIndex - 2])
+ * (int32_t) frac) >> 16));
+ *output++ = clip(
+ input[2 * inputIndex - 1]
+ + (((input[2 * inputIndex + 1]
+ - input[2 * inputIndex - 1]) * (int32_t) frac)
+ >> 16));
+
+ frac += FractionStep;
+ inputIndex += (frac >> 16);
+ frac = (frac & 0xffff);
+ outputIndex++;
+ }
+
+ return outputIndex;
+}
+
+int CAndroidAudio::GetWriteSpace(short volatile *WritePoint,
+ short volatile *ReadPoint)
+{
+ unsigned int space;
+
+ if (WritePoint >= ReadPoint)
+ space = temp_buffer_size - (WritePoint - ReadPoint);
+ else
+ space = ReadPoint - WritePoint;
+
+ return space;
+}
+int CAndroidAudio::GetReadSpace(short volatile *WritePoint, short volatile *ReadPoint)
+{
+ unsigned int space;
+
+ if (WritePoint >= ReadPoint)
+ space = WritePoint - ReadPoint;
+ else
+ space = temp_buffer_size - (ReadPoint - WritePoint);
+
+ return space;
+}
+
+void CAndroidAudio::recorderCallback(int event, void *user, void *info)
+{
+ if (AudioRecord::EVENT_MORE_DATA == event) {
+ AudioRecord::Buffer *pbuf = (AudioRecord::Buffer *) info;
+
+ if (NULL == mlpRecorder)
+ return;
+
+ unsigned int offset_bytes = 2
+ * (end_temp_buffer - record_write_pointer);
+ unsigned int copy_bytes;
+ unsigned int output_bytes;
+
+ int available_write_space;
+ available_write_space = GetWriteSpace(record_write_pointer,
+ playback_read_pointer);
+
+ //LOGE("~~~~~available_write_space = %d \n", available_write_space);
+
+ if (available_write_space < pbuf->size / 2) {
+ LOGE(
+ "[%s]: ***** FULL! *****\n\trd=0x%x, wr=0x%x, wr_lvl = 0x%x, wr_req = 0x%x\n",
+ __FUNCTION__, playback_read_pointer, record_write_pointer,
+ available_write_space, pbuf->size / 2);
+
+ if (mpAudioAlsa->GetAudioInSource() == CC_AUDIO_SOURCE_IN_HDMI) {
+ playback_read_pointer += mid_buffer_size;
+ if (playback_read_pointer >= end_temp_buffer) {
+ playback_read_pointer -= temp_buffer_size;
+ }
+ } else {
+ playback_read_pointer += (temp_buffer_size - reset_distance);
+ if (playback_read_pointer >= end_temp_buffer) {
+ playback_read_pointer -= temp_buffer_size;
+ }
+ }
+ return;
+ }
+#if debug == 1
+ if(record_counter > 500) {
+ LOGE("~~~~~RecordCallback, pbuf->size:%d, pbuf->frameCount:%d", pbuf->size, pbuf->frameCount);
+ record_counter = 0;
+ } else {
+ record_counter++;
+ }
+#endif
+
+#ifdef SOFTWARE_RESAMPLE
+ if (mpAudioAlsa->GetAudioInSource() == CC_AUDIO_SOURCE_IN_HDMI) {
+ if (available_write_space <= Downresample_distance) {
+ output_bytes = 4
+ * downsample((short *) pbuf->raw, resample_temp_buffer,
+ FractionStep_down, pbuf->frameCount,
+ Downsample_Fraction);
+
+ LOGE(
+ "downsample: output_framecount = %d, input_frameCount = %d\n",
+ output_bytes / 4, pbuf->frameCount);
+
+ if (offset_bytes >= output_bytes) {
+ memcpy((short *) record_write_pointer, resample_temp_buffer,
+ output_bytes);
+ record_write_pointer += output_bytes / 2;
+
+ if (record_write_pointer == end_temp_buffer)
+ record_write_pointer = temp_buffer;
+ } else {
+ memcpy((short *) record_write_pointer, resample_temp_buffer,
+ offset_bytes);
+ copy_bytes = offset_bytes;
+ offset_bytes = output_bytes - copy_bytes;
+ record_write_pointer = temp_buffer;
+ memcpy((short *) record_write_pointer,
+ resample_temp_buffer + (copy_bytes / 2),
+ offset_bytes);
+ record_write_pointer += offset_bytes / 2;
+ }
+ return;
+ } else if (available_write_space >= Upresample_distance) {
+ output_bytes = 4
+ * upsample((short *) pbuf->raw, resample_temp_buffer,
+ FractionStep_up, pbuf->frameCount,
+ Upsample_Fraction);
+
+ LOGE(
+ "upsample: output_framecount = %d, input_frameCount = %d\n",
+ output_bytes / 4, pbuf->frameCount);
+
+ if (offset_bytes >= output_bytes) {
+ memcpy((short *) record_write_pointer, resample_temp_buffer,
+ output_bytes);
+ record_write_pointer += output_bytes / 2;
+
+ if (record_write_pointer == end_temp_buffer)
+ record_write_pointer = temp_buffer;
+ } else {
+ memcpy((short *) record_write_pointer, resample_temp_buffer,
+ offset_bytes);
+ copy_bytes = offset_bytes;
+ offset_bytes = output_bytes - copy_bytes;
+ record_write_pointer = temp_buffer;
+ memcpy((short *) record_write_pointer,
+ resample_temp_buffer + (copy_bytes / 2),
+ offset_bytes);
+ record_write_pointer += offset_bytes / 2;
+ }
+ return;
+ }
+
+ Upsample_Fraction = 0;
+ Downsample_Fraction = 0;
+ }
+#endif
+
+ if (offset_bytes >= pbuf->size) {
+ memcpy((short *) record_write_pointer, pbuf->raw, pbuf->size);
+ record_write_pointer += pbuf->size / 2;
+
+ if (record_write_pointer == end_temp_buffer)
+ record_write_pointer = temp_buffer;
+ } else {
+ memcpy((short *) record_write_pointer, pbuf->raw, offset_bytes);
+ copy_bytes = offset_bytes;
+ offset_bytes = pbuf->size - copy_bytes;
+ record_write_pointer = temp_buffer;
+ memcpy((short *) record_write_pointer,
+ (short *) pbuf->raw + (copy_bytes / 2), offset_bytes);
+ record_write_pointer += offset_bytes / 2;
+ }
+
+ //LOGD("--------RecordCallback, pbuf->size:%d, pbuf->frameCount:%d\n", pbuf->size, pbuf->frameCount);
+ //LOGD("--------Record----offset_bytes:%d\n", 2*(record_write_pointer-temp_buffer));
+
+ } else if (AudioRecord::EVENT_OVERRUN == event) {
+ LOGE("[%s]: AudioRecord::EVENT_OVERRUN\n", __FUNCTION__);
+ } else if (AudioRecord::EVENT_MARKER == event) {
+ LOGD("[%s]: AudioRecord::EVENT_MARKER\n", __FUNCTION__);
+ } else if (AudioRecord::EVENT_NEW_POS == event) {
+ LOGD("[%s]: AudioRecord::EVENT_NEW_POS\n", __FUNCTION__);
+ }
+}
+
+void CAndroidAudio::trackerCallback(int event, void *user, void *info)
+{
+ if (AudioTrack::EVENT_MORE_DATA == event) {
+ AudioTrack::Buffer *pbuf = (AudioTrack::Buffer *) info;
+
+ if (NULL == mlpTracker)
+ return;
+
+ int available_read_space;
+ available_read_space = GetReadSpace(record_write_pointer,
+ playback_read_pointer);
+
+ //LOGE("~~~~~available_read_space = %d input_bytes = %d \n", available_read_space,input_bytes);
+
+ if (available_read_space < pbuf->size / 2) {
+ LOGE(
+ "[%s]: ***** EMPTY *****\n\trd=0x%x, wr=0x%x, rd_lvl=0x%x, rd_req=0x%x*****\n",
+ __FUNCTION__, playback_read_pointer, record_write_pointer,
+ available_read_space, pbuf->size / 2);
+
+ if (mpAudioAlsa->GetAudioInSource() == CC_AUDIO_SOURCE_IN_HDMI) {
+ playback_read_pointer -= mid_buffer_size;
+ if (playback_read_pointer < temp_buffer)
+ playback_read_pointer += temp_buffer_size;
+ } else {
+ playback_read_pointer -= reset_distance;
+ if (playback_read_pointer < temp_buffer)
+ playback_read_pointer += temp_buffer_size;
+ }
+
+ } else {
+ unsigned int offset_bytes = 2
+ * (end_temp_buffer - playback_read_pointer);
+ unsigned int copy_bytes;
+ int sampNum;
+
+ if (offset_bytes >= pbuf->size) {
+ if (gEnableNoiseGate) {
+ sampNum = pbuf->size / 2;
+ for (int i = 0; i < sampNum; i++) {
+ pbuf->i16[i] = (short) noise_filter_left(
+ (signed) (playback_read_pointer[i]));
+ i++;
+ pbuf->i16[i] = (short) noise_filter_left(
+ (signed) (playback_read_pointer[i]));
+ }
+ } else {
+ memcpy(pbuf->raw, (short *) playback_read_pointer,
+ pbuf->size);
+ }
+
+ memset((void *) playback_read_pointer, 0, pbuf->size);
+ playback_read_pointer += pbuf->size / 2;
+
+ if (playback_read_pointer == end_temp_buffer)
+ playback_read_pointer = temp_buffer;
+ } else {
+ if (gEnableNoiseGate) {
+ sampNum = offset_bytes / 2;
+ for (int i = 0; i < sampNum; i++) {
+ pbuf->i16[i] = (short) noise_filter_left(
+ (signed) (playback_read_pointer[i]));
+ i++;
+ pbuf->i16[i] = (short) noise_filter_left(
+ (signed) (playback_read_pointer[i]));
+ }
+ } else {
+ memcpy(pbuf->raw, (short *) playback_read_pointer,
+ offset_bytes);
+ }
+
+ memset((void *) playback_read_pointer, 0, offset_bytes);
+ copy_bytes = offset_bytes;
+ offset_bytes = pbuf->size - copy_bytes;
+ playback_read_pointer = temp_buffer;
+
+ if (gEnableNoiseGate) {
+ short *pSrcPtr = &(pbuf->i16[copy_bytes / 2]);
+ sampNum = offset_bytes / 2;
+ for (int i = 0; i < sampNum; i++) {
+ pSrcPtr[i] = (short) noise_filter_left(
+ (signed) (playback_read_pointer[i]));
+ i++;
+ pSrcPtr[i] = (short) noise_filter_left(
+ (signed) (playback_read_pointer[i]));
+ }
+ } else {
+ memcpy((short *) pbuf->raw + (copy_bytes / 2),
+ (short *) playback_read_pointer, offset_bytes);
+ }
+ memset((void *) playback_read_pointer, 0, offset_bytes);
+ playback_read_pointer += offset_bytes / 2;
+ }
+ DoDumpData(pbuf->raw, pbuf->size);
+
+#if debug == 1
+ if(playback_counter > 500) {
+ LOGE("----PlaybackCallback, pbuf->size:%d, pbuf->frameCount:%d", pbuf->size, pbuf->frameCount);
+ playback_counter = 0;
+ } else {
+ playback_counter++;
+ }
+#endif
+
+ }
+ //LOGE("---Playback---offset_bytes:%d\n", 2*(playback_read_pointer-temp_buffer));
+ } else if (AudioTrack::EVENT_UNDERRUN == event) {
+ LOGE("[%s]: AudioTrack::EVENT_UNDERRUN\n", __FUNCTION__);
+ } else if (AudioTrack::EVENT_LOOP_END == event) {
+ LOGD("[%s]: AudioTrack::EVENT_LOOP_END\n", __FUNCTION__);
+ } else if (AudioTrack::EVENT_MARKER == event) {
+ LOGD("[%s]: AudioTrack::EVENT_MARKER\n", __FUNCTION__);
+ } else if (AudioTrack::EVENT_NEW_POS == event) {
+ LOGD("[%s]: AudioTrack::EVENT_NEW_POS\n", __FUNCTION__);
+ } else if (AudioTrack::EVENT_BUFFER_END == event) {
+ LOGD("[%s]: AudioTrack::EVENT_BUFFER_END\n", __FUNCTION__);
+ }
+}
+
+int CAndroidAudio::initAudioTracker(int sr)
+{
+ status_t ret;
+ int tmp_session_id = 0;
+
+ if (NULL != mlpTracker) {
+ LOGE("[%s:%d] Trying to new AudioTrack while it's still not NULL.\n",
+ __FUNCTION__, __LINE__);
+ goto err_exit;
+ }
+
+#if ANDROID_PLATFORM_SDK_VERSION < 19
+ mlpTracker = new AudioTrack();
+ if (NULL == mlpTracker) {
+ LOGE("[%s:%d] Failed to new AudioTrack.\n", __FUNCTION__, __LINE__);
+ goto err_exit;
+ }
+#else
+ mmpAudioTracker = new AudioTrack();
+ mlpTracker = mmpAudioTracker.get();
+#endif
+
+ tmp_session_id = amAndroidGetAudioSessionId();
+ ret = mlpTracker->set(AUDIO_STREAM_DEFAULT, //inputSource
+ sr, //sampleRate
+ AUDIO_FORMAT_PCM_16_BIT, //format
+ AUDIO_CHANNEL_IN_STEREO, //channelMask
+ 0, //frameCount
+ AUDIO_OUTPUT_FLAG_NONE, //flags
+ trackerCallback, //trackerCallback,
+ NULL, //user when callback
+ 0, //notificationFrames
+ NULL, //shared buffer
+ false, //threadCanCallJava
+ tmp_session_id //sessionId
+ );
+
+ if (NO_ERROR != ret) {
+ LOGE("[%s:%d] Failed to set AudioTrack parameters. status=%d\n",
+ __FUNCTION__, __LINE__, ret);
+ goto err_exit;
+ }
+
+ ret = mlpTracker->initCheck();
+ if (NO_ERROR != ret) {
+ LOGE("[%s:%d] Failed to init AudioTrack. status=%d\n", __FUNCTION__,
+ __LINE__, ret);
+ goto err_exit;
+ }
+
+ mlpTracker->start();
+ ResetPointer();
+
+#if debug == 1
+ uint32_t frame_count;
+ frame_count = mlpTracker->frameCount();
+ LOGE("~~~~~~[%s:%d] frame_count = %u\n", __FUNCTION__, __LINE__, frame_count);
+#endif
+
+ return 0;
+
+err_exit: //
+ DeleteAudioTracker();
+
+ return -1;
+}
+
+int CAndroidAudio::initAudioRecorder(int sr)
+{
+ status_t ret;
+
+ if (NULL != mlpRecorder) {
+ LOGE("[%s:%d] Trying to new AudioRecord while it's still not NULL.\n",
+ __FUNCTION__, __LINE__);
+ goto err_exit;
+ }
+
+#if ANDROID_PLATFORM_SDK_VERSION < 19
+ mlpRecorder = new AudioRecord();
+ if (NULL == mlpRecorder) {
+ LOGE("[%s:%d] Failed to new AudioRecord.\n", __FUNCTION__, __LINE__);
+ goto err_exit;
+ }
+#else
+ mmpAudioRecorder = new AudioRecord();
+ mlpRecorder = mmpAudioRecorder.get();
+#endif
+
+ ret = mlpRecorder->set(AUDIO_SOURCE_DEFAULT, //inputSource
+ sr, //sampleRate
+ AUDIO_FORMAT_PCM_16_BIT, //format
+ AUDIO_CHANNEL_IN_STEREO, //channelMask
+ 0, //frameCount
+ recorderCallback, //callback_t
+ NULL, //void* user
+ 0, //notificationFrames,
+ false, //threadCanCallJava
+ 0 //sessionId
+ );
+
+ if (NO_ERROR != ret) {
+ LOGE("[%s:%d] Failed to set AudioRecord parameters. status=%d\n",
+ __FUNCTION__, __LINE__, ret);
+ goto err_exit;
+ }
+
+ ret = mlpRecorder->initCheck();
+ if (NO_ERROR != ret) {
+ LOGE("[%s:%d] Failed to init AudioRecord. status=%d\n", __FUNCTION__,
+ __LINE__, ret);
+ goto err_exit;
+ }
+
+ ret = mlpRecorder->start();
+ if (NO_ERROR != ret) {
+ LOGE("[%s:%d] Failed to start AudioRecord. status=%d\n", __FUNCTION__,
+ __LINE__, ret);
+ goto err_exit;
+ }
+#if debug == 1
+ uint32_t frame_count;
+ frame_count = mlpRecorder->frameCount();
+ LOGE("~~~~~~[%s:%d] frame_count = %u\n", __FUNCTION__, __LINE__, frame_count);
+#endif
+
+ return 0;
+err_exit: //
+ DeleteAudioRecorder();
+ return -1;
+}
+
+int CAndroidAudio::amAndroidInit(int tm_sleep, int init_flag, int recordSr, int trackSr,
+ bool enable_noise_gate)
+{
+ int tmp_ret;
+ LOGD("Enter amAndroidInit function.\n");
+
+ amAndroidUninit(0);
+
+ // Init the noise gate filter
+ gUserSetEnableNoiseGate = enable_noise_gate;
+ if (enable_noise_gate && (gNoiseGateThresh > 0)
+ && GetAudioNoiseGateEnableCFG()) {
+ gEnableNoiseGate = true;
+ noise_filter_init();
+ } else {
+ gEnableNoiseGate = false;
+ }
+ LOGE("[%s:%d] noise gate enabled:%d!\n", __FUNCTION__, __LINE__,
+ gEnableNoiseGate);
+
+ if (InitTempBuffer() != 0) {
+ LOGE("[%s:%d] Failed to create temp_buffer!\n", __FUNCTION__, __LINE__);
+ return 0;
+ }
+
+ if (init_flag & CC_FLAG_CREATE_RECORD) {
+ //LOGD("Start to create Recorder. RecordSr:%d\n", recordSr);
+ if (0 != initAudioRecorder(recordSr)) {
+ LOGE(" [%s:%d] Created AudioRecorder disable !\n", __FUNCTION__,
+ __LINE__);
+ return -1;
+ }
+ //LOGD("[%s:%d] End to create recorder.\n", __FUNCTION__, __LINE__);
+ }
+
+ if (init_flag & CC_FLAG_CREATE_TRACK) {
+ //LOGD("Start to create Tracker. TrackSr:%d\n", trackSr);
+ if (0 != initAudioTracker(trackSr)) {
+ //FreeAudioRecorder();
+ //FreeAudioTracker();
+ LOGE(" [%s:%d] Created AudioTrack disable !\n", __FUNCTION__,
+ __LINE__);
+ return -1;
+ }
+ //LOGD("[%s:%d] End to create recorder.\n", __FUNCTION__, __LINE__);
+ }
+
+ if (tm_sleep > 0)
+ sleep(tm_sleep);
+
+ LOGD("Exit amAndroidInit function sucess.\n");
+
+ return 0;
+}
+
+int CAndroidAudio::amAndroidUninit(int tm_sleep)
+{
+ LOGD("Enter amAndroidUninit function.\n");
+
+ FreeAudioRecorder();
+ // MuteTempBuffer();
+ FreeAudioTracker();
+ FreeTempBuffer();
+
+ if (tm_sleep > 0)
+ sleep(tm_sleep);
+
+ LOGD("Exit amAndroidUninit function sucess.\n");
+
+ return 0;
+}
+
+int CAndroidAudio::amAndroidSetRecorderSr(int sr)
+{
+ int ret;
+ FreeAudioRecorder();
+ ResetRecordWritePointer();
+ return initAudioRecorder(sr);
+}
+
+int CAndroidAudio::amAndroidSetTrackerSr(int sr)
+{
+ FreeAudioTracker();
+ ResetPlaybackReadPointer();
+ return initAudioTracker(sr);
+}
+
+//
+// Set the noise gate threshold.
+// If it's set to 0, the noise gate filter is disabled.
+// Theoretically, this variable should be protected by mutex. But this API
+// is designed to be called once on system boot, or for debug purpose, and it's
+// set only through this API. To improve the performance of the filters, we
+// don't utilize any mutex here.
+void CAndroidAudio::amAndroidSetNoiseGateThreshold(int thresh)
+{
+ int upperBound = GetAudioNoiseGateUpperBoundCFG();
+ int forcedThresh = GetAudioNoiseGateThresholdCFG();
+ if (forcedThresh >= 0) {
+ LOGE("Force noise gate threshold from %d to %d\n", thresh,
+ forcedThresh);
+ thresh = forcedThresh;
+ }
+
+ if ((thresh >= 0) && (thresh <= upperBound)) {
+ gNoiseGateThresh = thresh;
+ } else {
+ gNoiseGateThresh = 0;
+ }
+
+ if (gUserSetEnableNoiseGate && (gNoiseGateThresh > 0)
+ && GetAudioNoiseGateEnableCFG()) {
+ gEnableNoiseGate = true;
+ } else {
+ gEnableNoiseGate = false;
+ }
+ LOGE(
+ "[%s:%d] thresh:%d, upperBound:%d, gNoiseGateThresh:%d, gEnableNoiseGate:%d\n",
+ __FUNCTION__, __LINE__, thresh, upperBound, gNoiseGateThresh,
+ gEnableNoiseGate);
+}
+
+int CAndroidAudio::amAndroidSetDumpDataFlag(int tmp_flag)
+{
+ mDumpDataFlag = tmp_flag;
+ return mDumpDataFlag;
+}
+
+int CAndroidAudio::amAndroidGetDumpDataFlag()
+{
+ return mDumpDataFlag;
+}
+
+void CAndroidAudio::DoDumpData(void *data_buf, int size)
+{
+ int tmp_flag = 0;
+ char prop_value[PROPERTY_VALUE_MAX];
+
+ if (amAndroidGetDumpDataFlag() == 0) {
+ return;
+ }
+
+ memset(prop_value, '\0', PROPERTY_VALUE_MAX);
+
+ property_get("audio.dumpdata.en", prop_value, "null");
+ if (strcasecmp(prop_value, "null") == 0
+ || strcasecmp(prop_value, "0") == 0) {
+ if (mDumpDataFd >= 0) {
+ close(mDumpDataFd);
+ mDumpDataFd = -1;
+ }
+
+ return;
+ }
+
+ memset(prop_value, '\0', PROPERTY_VALUE_MAX);
+
+ property_get("audio.dumpdata.path", prop_value, "null");
+ if (strcasecmp(prop_value, "null") == 0) {
+ return;
+ }
+
+ if (mDumpDataFd < 0) {
+ if (access(prop_value, 0) == 0) {
+ mDumpDataFd = open(prop_value, O_RDWR | O_SYNC);
+ if (mDumpDataFd < 0) {
+ LOGE("%s, Open device file \"%s\" error: %s.\n", __FUNCTION__,
+ prop_value, strerror(errno));
+ return;
+ }
+ } else {
+ mDumpDataFd = open(prop_value, O_WRONLY | O_CREAT | O_EXCL,
+ S_IRUSR | S_IWUSR);
+ if (mDumpDataFd < 0) {
+ LOGE("%s, Create device file \"%s\" error: %s.\n", __FUNCTION__,
+ prop_value, strerror(errno));
+ return;
+ }
+ }
+ }
+
+ write(mDumpDataFd, data_buf, size);
+}
+
diff --git a/tvapi/libtv/audio/audio_android.h b/tvapi/libtv/audio/audio_android.h
index 621fa1a..298ab8f 100644
--- a/tvapi/libtv/audio/audio_android.h
+++ b/tvapi/libtv/audio/audio_android.h
@@ -1,79 +1,78 @@
-#ifndef __TV_AUDIO_ANDROID_H__
-#define __TV_AUDIO_ANDROID_H__
-
-#define CC_FLAG_CREATE_RECORD (0x0001)
-#define CC_FLAG_CREATE_TRACK (0x0002)
-#include "audio_alsa.h"
-#include <media/AudioRecord.h>
-#include <media/AudioTrack.h>
-
-using namespace android;
-
-
-class CAndroidAudio
-{
-public:
- CAndroidAudio(CAudioAlsa *);
- ~CAndroidAudio();
- int amAndroidInit(int tm_sleep, int init_flag, int recordSr, int trackSr,
- bool enable_noise_gat);
- int amAndroidUninit(int tm_sleep);
- int amAndroidSetRecorderSr(int sr);
- int amAndroidSetTrackerSr(int sr);
- int amAndroidSetDumpDataFlag(int tmp_flag);
- int amAndroidGetDumpDataFlag();
- void amAndroidSetNoiseGateThreshold(int thresh);
- void reset_system_framesize(int input_sample_rate, int output_sample_rate);
-
-private:
- void DoDumpData(void *data_buf, int size);
- void noise_filter_init();
- int noise_filter_left(int);
- int noise_filter_right(int);
- void DeleteAudioRecorder();
- void FreeAudioRecorder();
- void DeleteAudioTracker();
- void FreeAudioTracker();
- int InitTempBuffer();
- void FreeTempBuffer();
- void ResetRecordWritePointer();
- void ResetPlaybackReadPointer();
- void ResetPointer();
- short int clip(int);
- int upsample(short int *, short int *, unsigned int, unsigned int, unsigned int);
- int downsample(short int *, short int *, unsigned int, unsigned int, unsigned int);
- int GetWriteSpace(volatile short int *, volatile short int *);
- int GetReadSpace(volatile short int *, volatile short int *);
- void recorderCallback(int, void *, void *);
- void trackerCallback(int, void *, void *);
- int initAudioTracker(int);
- int initAudioRecorder(int);
-
- CAudioAlsa *mpAudioAlsa;
- int mDumpDataFlag;
- int mDumpDataFd;
- AudioRecord *mlpRecorder;
- AudioTrack *mlpTracker;
-
-#if ANDROID_PLATFORM_SDK_VERSION >= 19
- sp<AudioTrack> mmpAudioTracker;
- sp<AudioRecord> mmpAudioRecorder;
-#endif
-
- short *temp_buffer;
- short *end_temp_buffer;
- short volatile *record_write_pointer;
- short volatile *playback_read_pointer;
-
- ///////////////////////////////////////////////////////////////////////////////
- // Helpers for the noise gate.
- bool gEnableNoiseGate;
- bool gUserSetEnableNoiseGate;
- unsigned zero_count_left;
- unsigned zero_count_right;
- unsigned NOISE_HIS;
- signed gNoiseGateThresh;
-};
-
-
-#endif //__TV_AUDIO_ANDROID_H__
+#ifndef __TV_AUDIO_ANDROID_H__
+#define __TV_AUDIO_ANDROID_H__
+
+#define CC_FLAG_CREATE_RECORD (0x0001)
+#define CC_FLAG_CREATE_TRACK (0x0002)
+#include "audio_alsa.h"
+#include <media/AudioRecord.h>
+#include <media/AudioTrack.h>
+
+using namespace android;
+
+
+class CAndroidAudio {
+public:
+ CAndroidAudio(CAudioAlsa *);
+ ~CAndroidAudio();
+ int amAndroidInit(int tm_sleep, int init_flag, int recordSr, int trackSr,
+ bool enable_noise_gat);
+ int amAndroidUninit(int tm_sleep);
+ int amAndroidSetRecorderSr(int sr);
+ int amAndroidSetTrackerSr(int sr);
+ int amAndroidSetDumpDataFlag(int tmp_flag);
+ int amAndroidGetDumpDataFlag();
+ void amAndroidSetNoiseGateThreshold(int thresh);
+ void reset_system_framesize(int input_sample_rate, int output_sample_rate);
+
+private:
+ void DoDumpData(void *data_buf, int size);
+ void noise_filter_init();
+ int noise_filter_left(int);
+ int noise_filter_right(int);
+ void DeleteAudioRecorder();
+ void FreeAudioRecorder();
+ void DeleteAudioTracker();
+ void FreeAudioTracker();
+ int InitTempBuffer();
+ void FreeTempBuffer();
+ void ResetRecordWritePointer();
+ void ResetPlaybackReadPointer();
+ void ResetPointer();
+ short int clip(int);
+ int upsample(short int *, short int *, unsigned int, unsigned int, unsigned int);
+ int downsample(short int *, short int *, unsigned int, unsigned int, unsigned int);
+ int GetWriteSpace(volatile short int *, volatile short int *);
+ int GetReadSpace(volatile short int *, volatile short int *);
+ void recorderCallback(int, void *, void *);
+ void trackerCallback(int, void *, void *);
+ int initAudioTracker(int);
+ int initAudioRecorder(int);
+
+ CAudioAlsa *mpAudioAlsa;
+ int mDumpDataFlag;
+ int mDumpDataFd;
+ AudioRecord *mlpRecorder;
+ AudioTrack *mlpTracker;
+
+#if ANDROID_PLATFORM_SDK_VERSION >= 19
+ sp<AudioTrack> mmpAudioTracker;
+ sp<AudioRecord> mmpAudioRecorder;
+#endif
+
+ short *temp_buffer;
+ short *end_temp_buffer;
+ short volatile *record_write_pointer;
+ short volatile *playback_read_pointer;
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Helpers for the noise gate.
+ bool gEnableNoiseGate;
+ bool gUserSetEnableNoiseGate;
+ unsigned zero_count_left;
+ unsigned zero_count_right;
+ unsigned NOISE_HIS;
+ signed gNoiseGateThresh;
+};
+
+
+#endif //__TV_AUDIO_ANDROID_H__
diff --git a/tvapi/libtv/audio/audio_android_effect.cpp b/tvapi/libtv/audio/audio_android_effect.cpp
index e29a711..aeb42eb 100644
--- a/tvapi/libtv/audio/audio_android_effect.cpp
+++ b/tvapi/libtv/audio/audio_android_effect.cpp
@@ -1,591 +1,591 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <malloc.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <sys/stat.h>
-#include <android/log.h>
-#include <sys/prctl.h>
-
-#include "audio_android_effect.h"
-
-#define msleep(x) usleep(x*1000)
-
-#define INVALID_EQ_FORCED_GAIN (0x7FFFFFFF)
-
-#define LOG_TAG "CAndroidEffect"
-#include "CTvLog.h"
-
-using namespace android;
-
-// For some special cases, we want some band of the EQ to be forced to a specific
-// gain. When the value in this array is not invalid, the gain of the corresponding
-// band will be forced to this value.
-CAndroidEffect::CAndroidEffect()
-{
- mplpAudioEffectSrs = NULL;
- mplpAudioEffectEq = NULL;
- mTrackerSessionId = 0;
-}
-
-CAndroidEffect::~CAndroidEffect()
-{
-}
-
-static void audioEffectCallback(int32_t event, void *user, void *info)
-{
- LOGD("[%s:%d]", __FUNCTION__, __LINE__);
-}
-
-void CAndroidEffect::FreeAudioEffect(AudioEffect **pEffect)
-{
- if ((*pEffect) != NULL) {
- (*pEffect)->setEnabled(false);
- delete (*pEffect);
- (*pEffect) = NULL;
- }
-}
-
-void CAndroidEffect::initAudioEffect(AudioEffect **pEffect,
- const effect_uuid_t *const pEffectType,
- const effect_uuid_t *const pEffectUuid, int sessionId)
-{
- if (NULL != (*pEffect)) {
- LOGE("[%s:%d] AudioEffect is not NULL. Free it first.\n", __FUNCTION__,
- __LINE__);
- FreeAudioEffect(pEffect);
- }
-
- status_t status;
-
- (*pEffect) = new AudioEffect();
- if (NULL == (*pEffect)) {
- LOGE("[%s:%d] Failed to create audio effect.\n", __FUNCTION__,
- __LINE__);
- goto err_exit;
- }
-
- status = (*pEffect)->set(pEffectType, //type
- pEffectUuid, //uuid
- 0, //priority
- audioEffectCallback, //cbf
- NULL, //user
- sessionId, //sessionId
- 0 // default output device
- );
-
- if (NO_ERROR != status) {
- LOGE("[%s:%d] Failed to set audio effect parameters.\n", __FUNCTION__,
- __LINE__);
- goto err_exit;
- }
-
- status = (*pEffect)->initCheck();
- if (NO_ERROR != status) {
- LOGE("[%s:%d] Failed to init audio effect.\n", __FUNCTION__, __LINE__);
- goto err_exit;
- }
-
- status = (*pEffect)->setEnabled(true);
- if (NO_ERROR != status) {
- LOGE("[%s:%d] Failed to enable audio effect.\n", __FUNCTION__,
- __LINE__);
- goto err_exit;
- }
-
- return;
-
-err_exit:
- if (NULL != (*pEffect)) {
- delete (*pEffect);
- (*pEffect) = NULL;
- }
-}
-
-int CAndroidEffect::setSrsParameterInt(tshd_srs_param_t param, unsigned value)
-{
- if (NULL == mplpAudioEffectSrs) {
- return -1;
- }
-
- status_t status;
- effect_param_t *pParam = (effect_param_t *) malloc(
- sizeof(effect_param_t) + sizeof(unsigned) + sizeof(unsigned));
- if (NULL == pParam) {
- LOGE("[%s:%d]Failed to allocate memory!\n", __FUNCTION__, __LINE__);
- return -1;
- }
- pParam->status = 0;
- pParam->psize = sizeof(unsigned);
- pParam->vsize = sizeof(unsigned);
- *(unsigned *) (&pParam->data[0]) = (unsigned) param;
- *(unsigned *) (&pParam->data[sizeof(unsigned)]) = value;
- status = mplpAudioEffectSrs->setParameter(pParam);
- if (NO_ERROR != status) {
- LOGE("[%s:%d]Failed to set parameter:%d!\n", __FUNCTION__, __LINE__,
- param);
- free(pParam);
- return -1;
- } else {
- free(pParam);
- return 0;
- }
-}
-
-int CAndroidEffect::getSrsParameterInt(tshd_srs_param_t param, unsigned *value)
-{
- if (NULL == mplpAudioEffectSrs) {
- return -1;
- }
-
- status_t status;
- effect_param_t *pParam = (effect_param_t *) malloc(
- sizeof(effect_param_t) + sizeof(unsigned) + sizeof(unsigned));
- if (NULL == pParam) {
- LOGE("[%s:%d]Failed to allocate memory!\n", __FUNCTION__, __LINE__);
- return -1;
- }
- pParam->status = 0;
- pParam->psize = sizeof(unsigned);
- pParam->vsize = sizeof(unsigned);
- *(unsigned *) (&pParam->data[0]) = (unsigned) param;
- status = mplpAudioEffectSrs->getParameter(pParam);
- if (NO_ERROR != status) {
- LOGE("[%s:%d]Failed to get parameter:%d!\n", __FUNCTION__, __LINE__,
- param);
- *value = 0;
- free(pParam);
- return -1;
- } else {
- *value = *(unsigned *) (&pParam->data[sizeof(unsigned)]);
- free(pParam);
- return 0;
- }
-}
-
-int CAndroidEffect::setSrsParameterFloat(tshd_srs_param_t param, float value)
-{
- if (NULL == mplpAudioEffectSrs) {
- return -1;
- }
-
- status_t status;
- effect_param_t *pParam = (effect_param_t *) malloc(
- sizeof(effect_param_t) + sizeof(unsigned) + sizeof(float));
- if (NULL == pParam) {
- LOGE("[%s:%d]Failed to allocate memory!\n", __FUNCTION__, __LINE__);
- return -1;
- }
- pParam->status = 0;
- pParam->psize = sizeof(unsigned);
- pParam->vsize = sizeof(float);
- *(unsigned *) (&pParam->data[0]) = (unsigned) param;
- *(float *) (&pParam->data[sizeof(unsigned)]) = value;
- status = mplpAudioEffectSrs->setParameter(pParam);
- if (NO_ERROR != status) {
- LOGE("[%s:%d]Failed to set parameter:%d!\n", __FUNCTION__, __LINE__,
- param);
- free(pParam);
- return -1;
- } else {
- free(pParam);
- return 0;
- }
-}
-
-int CAndroidEffect::getSrsParameterFloat(tshd_srs_param_t param, float *value)
-{
- if (NULL == mplpAudioEffectSrs) {
- return -1;
- }
-
- status_t status;
- effect_param_t *pParam = (effect_param_t *) malloc(
- sizeof(effect_param_t) + sizeof(unsigned) + sizeof(float));
- if (NULL == pParam) {
- LOGE("[%s:%d]Failed to allocate memory!\n", __FUNCTION__, __LINE__);
- return -1;
- }
- pParam->status = 0;
- pParam->psize = sizeof(unsigned);
- pParam->vsize = sizeof(float);
- *(unsigned *) (&pParam->data[0]) = (unsigned) param;
- status = mplpAudioEffectSrs->getParameter(pParam);
- if (NO_ERROR != status) {
- LOGE("[%s:%d]Failed to set parameter:%d!\n", __FUNCTION__, __LINE__,
- param);
- *value = 0.0f;
- free(pParam);
- return -1;
- } else {
- *value = *(float *) (&pParam->data[sizeof(unsigned)]);
- free(pParam);
- return 0;
- }
-}
-
-int CAndroidEffect::amAndroidSetSrsParameterInt(tshd_srs_param_t param, unsigned value)
-{
- return setSrsParameterInt(param, value);
-}
-
-int CAndroidEffect::amAndroidGetSrsParameterInt(tshd_srs_param_t param,
- unsigned *value)
-{
- return getSrsParameterInt(param, value);
-}
-
-int CAndroidEffect::amAndroidSetSrsParameterFloat(tshd_srs_param_t param, float value)
-{
- return setSrsParameterFloat(param, value);
-}
-
-int CAndroidEffect::amAndroidGetSrsParameterFloat(tshd_srs_param_t param, float *value)
-{
- return getSrsParameterFloat(param, value);
-}
-
-int CAndroidEffect::amAndroidNewSRSAudioEffect(void)
-{
- if ((NULL == mplpAudioEffectSrs) && (GetAudioSRSModuleDisableCFG() == 0)) {
- initAudioEffect(&mplpAudioEffectSrs, NULL, SL_IID_SRS,
- mTrackerSessionId);
- if (NULL == mplpAudioEffectSrs) {
- LOGE("[%s:%d] Failed to create audio effect SRS!\n", __FUNCTION__,
- __LINE__);
- return -1;
- }
- }
-
- return 0;
-}
-
-int CAndroidEffect::amAndroidNewEQAudioEffect(void)
-{
- if ((NULL == mplpAudioEffectEq) && (GetAudioEqModuleDisableCFG() == 0)) {
- if (GetAudioEqUsingAndroidCFG()) {
- initAudioEffect(&mplpAudioEffectEq, SL_IID_EQUALIZER, NULL,
- mTrackerSessionId);
- } else {
- initAudioEffect(&mplpAudioEffectEq, NULL, SL_IID_HPEQ,
- mTrackerSessionId);
- }
-
- if (NULL == mplpAudioEffectEq) {
- LOGE("[%s:%d] Failed to create audio effect EQ(android:%d)!\n",
- __FUNCTION__, __LINE__, GetAudioEqUsingAndroidCFG());
- return -1;
- } else {
- // Init all forced gains to be invalid.
- for (int i = 0; i < EQ_BAND_COUNT; i++) {
- gEqForcedGain[i] = INVALID_EQ_FORCED_GAIN;
- }
- getEqGain(gEqUserSetGain, EQ_BAND_COUNT);
- LOGD(
- "[%s:%d] Audio effect EQ(android:%d) was created successfully!\n",
- __FUNCTION__, __LINE__, GetAudioEqUsingAndroidCFG());
- }
- }
-
- return 0;
-}
-
-int CAndroidEffect::amAndroidNewAudioEffects(void)
-{
- int tmp_ret = 0;
-
- tmp_ret |= amAndroidNewSRSAudioEffect();
- tmp_ret |= amAndroidNewEQAudioEffect();
-
- return tmp_ret;
-}
-
-void CAndroidEffect::amAndroidFreeAudioEffects(void)
-{
- {
- FreeAudioEffect(&mplpAudioEffectEq);
- FreeAudioEffect(&mplpAudioEffectSrs);
-
- if (mTrackerSessionId != 0) {
- AudioSystem::releaseAudioSessionId(mTrackerSessionId, -1);
- mTrackerSessionId = 0;
- }
- }
-}
-
-int CAndroidEffect::amAndroidGetAudioSessionId(void)
-{
- return mTrackerSessionId;
-}
-
-int CAndroidEffect::amAndroidSetSRSSurroundSwitch(int switch_val)
-{
- return amAndroidSetSrsParameterInt(SRS_PARAM_SURROUND_ENABLE,
- (unsigned) switch_val);
-}
-
-int CAndroidEffect::amAndroidSetSRSSurroundGain(int gain_val)
-{
- return amAndroidSetSrsParameterFloat(SRS_PARAM_SURROUND_GAIN,
- (float) gain_val / 100.0f);
-}
-
-int CAndroidEffect::amAndroidSetSRSTrubassSwitch(int switch_val)
-{
- return amAndroidSetSrsParameterInt(SRS_PARAM_TRUEBASS_ENABLE,
- (unsigned) switch_val);
-}
-
-int CAndroidEffect::amAndroidSetSRSTrubassGain(int gain_val)
-{
- return amAndroidSetSrsParameterFloat(SRS_PARAM_TRUEBASS_GAIN,
- (float) gain_val / 100.0f);
-}
-
-int CAndroidEffect::amAndroidSetSRSDialogClaritySwitch(int switch_val)
-{
- return amAndroidSetSrsParameterInt(SRS_PARAM_DIALOGCLARITY_ENABLE,
- (unsigned) switch_val);
-}
-
-int CAndroidEffect::amAndroidSetSRSDialogClarityGain(int gain_val)
-{
- return amAndroidSetSrsParameterFloat(SRS_PARAM_DIALOGCLARTY_GAIN,
- (float) gain_val / 100.0f);
-}
-
-int CAndroidEffect::amAndroidSetSRSDefinitionGain(int gain_val)
-{
- return amAndroidSetSrsParameterFloat(SRS_PARAM_DEFINITION_GAIN,
- (float) gain_val / 100.0f);
-}
-
-int CAndroidEffect::amAndroidSetSRSTrubassSpeakerSize(int tmp_val)
-{
- int tmp_buf[8] = { 40, 60, 100, 150, 200, 250, 300, 400 };
- int set_val = 40;
-
- if (tmp_val >= 0 && tmp_val < sizeof(tmp_buf)) {
- set_val = tmp_buf[tmp_val];
- }
-
- return amAndroidSetSrsParameterInt(SRS_PARAM_TRUEBASS_SPKER_SIZE, set_val);
-}
-
-int CAndroidEffect::setEqGain(const int gain_val_buf[], int band_count)
-{
- if (NULL == mplpAudioEffectEq) {
- LOGE("[%s:%d]\n", __FUNCTION__, __LINE__);
- return -1;
- }
-
- status_t status;
- int i;
- int gain;
- effect_param_t *pParam;
- int bAndroidEq = GetAudioEqUsingAndroidCFG();
-
- if (bAndroidEq) {
- pParam = (effect_param_t *) malloc(
- sizeof(effect_param_t) + sizeof(int) + sizeof(int)
- + sizeof(short));
- } else {
- pParam = (effect_param_t *) malloc(
- sizeof(effect_param_t) + sizeof(int) + sizeof(int));
- }
-
- if (NULL == pParam) {
- LOGE("[%s:%d]Failed to allocate memory!\n", __FUNCTION__, __LINE__);
- return -1;
- }
-
- for (i = 0; i < band_count; i++) {
- if (gEqForcedGain[i] != INVALID_EQ_FORCED_GAIN) {
- gain = gEqForcedGain[i];
- } else {
- gain = gain_val_buf[i];
- }
-
- if (bAndroidEq) {
- pParam->status = 0;
- pParam->psize = sizeof(int) * 2;
- pParam->vsize = sizeof(short);
- *(int *) (&pParam->data[0]) = EQ_PARAM_BAND_LEVEL;
- *(int *) (&pParam->data[sizeof(int)]) = i;
- *(short *) (&pParam->data[sizeof(int) * 2]) = (short) gain;
- } else {
- pParam->status = 0;
- pParam->psize = sizeof(int);
- pParam->vsize = sizeof(int);
- *(int *) (&pParam->data[0]) = i;
- *(int *) (&pParam->data[sizeof(int)]) = gain;
- }
-
- status = mplpAudioEffectEq->setParameter(pParam);
- if (NO_ERROR != status) {
- LOGE("[%s:%d]Failed to set parameter:%d!\n", __FUNCTION__, __LINE__,
- i);
- free(pParam);
- return -1;
- }
- }
-
- free(pParam);
- return 0;
-}
-
-int CAndroidEffect::getEqGain(int gain_val_buf[], int band_count)
-{
- if (NULL == mplpAudioEffectEq) {
- return -1;
- }
-
- status_t status;
- effect_param_t *pParam;
- int bAndroidEq = GetAudioEqUsingAndroidCFG();
-
- if (bAndroidEq) {
- pParam = (effect_param_t *) malloc(
- sizeof(effect_param_t) + sizeof(int) + sizeof(int)
- + sizeof(short));
- } else {
- pParam = (effect_param_t *) malloc(
- sizeof(effect_param_t) + sizeof(int) + sizeof(int));
- }
-
- if (NULL == pParam) {
- LOGE("[%s:%d]Failed to allocate memory!\n", __FUNCTION__, __LINE__);
- return -1;
- }
-
- for (int i = 0; i < EQ_BAND_COUNT; i++) {
- if (gEqForcedGain[i] != INVALID_EQ_FORCED_GAIN) {
- gain_val_buf[i] = gEqUserSetGain[i];
- } else {
- if (bAndroidEq) {
- pParam->status = 0;
- pParam->psize = sizeof(int) * 2;
- pParam->vsize = sizeof(short);
- *(int *) (&pParam->data[0]) = EQ_PARAM_BAND_LEVEL;
- *(int *) (&pParam->data[sizeof(int)]) = i;
- } else {
- pParam->status = 0;
- pParam->psize = sizeof(int);
- pParam->vsize = sizeof(int);
- *(int *) (&pParam->data[0]) = i;
- }
- status = mplpAudioEffectEq->getParameter(pParam);
- if (NO_ERROR != status) {
- LOGE("[%s:%d]Failed to set parameter:%d!\n", __FUNCTION__,
- __LINE__, i);
- free(pParam);
- return -1;
- }
-
- if (bAndroidEq) {
- gain_val_buf[i] = *(short *) (&pParam->data[sizeof(int) * 2]);
- } else {
- gain_val_buf[i] = *(int *) (&pParam->data[sizeof(int)]);
- }
- }
- }
-
- free(pParam);
- return 0;
-}
-
-int CAndroidEffect::amAndroidSetEQGain(const int gain_val_buf[], int band_count)
-{
- int i;
- int gain_factor = 1;
-
- if (band_count > EQ_BAND_COUNT) {
- band_count = EQ_BAND_COUNT;
- }
-
- // convert dB to 100th dB for android EQ
- if (GetAudioEqUsingAndroidCFG()) {
- gain_factor = 100;
- }
-
- // store the gains set by the user, and convert it to the internal representation.
- for (i = 0; i < band_count; i++) {
- gEqUserSetGain[i] = gain_val_buf[i] * gain_factor;
- }
-
- return setEqGain(gEqUserSetGain, band_count);
-}
-
-int CAndroidEffect::amAndroidGetEQGain(int gain_val_buf[], int band_count)
-{
- int i;
- int ret;
-
- if (band_count > EQ_BAND_COUNT) {
- band_count = EQ_BAND_COUNT;
- }
-
- ret = getEqGain(gain_val_buf, band_count);
-
- // convert 100th dB to dB for android EQ
- if (GetAudioEqUsingAndroidCFG()) {
- for (i = 0; i < band_count; i++) {
- gain_val_buf[i] /= 100;
- }
- }
-
- return ret;
-}
-
-int CAndroidEffect::amAndroidSetEQEnable(int enabled)
-{
- if (NULL == mplpAudioEffectEq) {
- return -1;
- }
-
- if (NO_ERROR != mplpAudioEffectEq->setEnabled(enabled)) {
- return -1;
- } else {
- return 0;
- }
-}
-
-int CAndroidEffect::amAndroidGetEQEnabled()
-{
- if (NULL == mplpAudioEffectEq) {
- return 0;
- }
-
- if (mplpAudioEffectEq->getEnabled()) {
- return 1;
- } else {
- return 0;
- }
-}
-
-int CAndroidEffect::amAndroidForceEQGain(int band, int gain)
-{
- if (band >= EQ_BAND_COUNT) {
- LOGE("[%s:%d] band(%d) is out of bound!\n", __FUNCTION__, __LINE__,
- band);
- return -1;
- } else {
- if (GetAudioEqUsingAndroidCFG() && (gain != INVALID_EQ_FORCED_GAIN)) {
- gEqForcedGain[band] = gain * 100;
- } else {
- gEqForcedGain[band] = gain;
- }
-
- // reset the EQ bands to take effect of the forced one.
- if (setEqGain(gEqUserSetGain, EQ_BAND_COUNT) != 0) {
- LOGE("[%s:%d]Failed to reset EQ gain!\n", __FUNCTION__, __LINE__);
- return -1;
- }
-
- LOGD("[%s:%d] band(%d) is forced to %d!\n", __FUNCTION__, __LINE__,
- band, gain);
- return 0;
- }
-}
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <malloc.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <sys/stat.h>
+#include <android/log.h>
+#include <sys/prctl.h>
+
+#include "audio_android_effect.h"
+
+#define msleep(x) usleep(x*1000)
+
+#define INVALID_EQ_FORCED_GAIN (0x7FFFFFFF)
+
+#define LOG_TAG "CAndroidEffect"
+#include "CTvLog.h"
+
+using namespace android;
+
+// For some special cases, we want some band of the EQ to be forced to a specific
+// gain. When the value in this array is not invalid, the gain of the corresponding
+// band will be forced to this value.
+CAndroidEffect::CAndroidEffect()
+{
+ mplpAudioEffectSrs = NULL;
+ mplpAudioEffectEq = NULL;
+ mTrackerSessionId = 0;
+}
+
+CAndroidEffect::~CAndroidEffect()
+{
+}
+
+static void audioEffectCallback(int32_t event, void *user, void *info)
+{
+ LOGD("[%s:%d]", __FUNCTION__, __LINE__);
+}
+
+void CAndroidEffect::FreeAudioEffect(AudioEffect **pEffect)
+{
+ if ((*pEffect) != NULL) {
+ (*pEffect)->setEnabled(false);
+ delete (*pEffect);
+ (*pEffect) = NULL;
+ }
+}
+
+void CAndroidEffect::initAudioEffect(AudioEffect **pEffect,
+ const effect_uuid_t *const pEffectType,
+ const effect_uuid_t *const pEffectUuid, int sessionId)
+{
+ if (NULL != (*pEffect)) {
+ LOGE("[%s:%d] AudioEffect is not NULL. Free it first.\n", __FUNCTION__,
+ __LINE__);
+ FreeAudioEffect(pEffect);
+ }
+
+ status_t status;
+
+ (*pEffect) = new AudioEffect();
+ if (NULL == (*pEffect)) {
+ LOGE("[%s:%d] Failed to create audio effect.\n", __FUNCTION__,
+ __LINE__);
+ goto err_exit;
+ }
+
+ status = (*pEffect)->set(pEffectType, //type
+ pEffectUuid, //uuid
+ 0, //priority
+ audioEffectCallback, //cbf
+ NULL, //user
+ sessionId, //sessionId
+ 0 // default output device
+ );
+
+ if (NO_ERROR != status) {
+ LOGE("[%s:%d] Failed to set audio effect parameters.\n", __FUNCTION__,
+ __LINE__);
+ goto err_exit;
+ }
+
+ status = (*pEffect)->initCheck();
+ if (NO_ERROR != status) {
+ LOGE("[%s:%d] Failed to init audio effect.\n", __FUNCTION__, __LINE__);
+ goto err_exit;
+ }
+
+ status = (*pEffect)->setEnabled(true);
+ if (NO_ERROR != status) {
+ LOGE("[%s:%d] Failed to enable audio effect.\n", __FUNCTION__,
+ __LINE__);
+ goto err_exit;
+ }
+
+ return;
+
+err_exit:
+ if (NULL != (*pEffect)) {
+ delete (*pEffect);
+ (*pEffect) = NULL;
+ }
+}
+
+int CAndroidEffect::setSrsParameterInt(tshd_srs_param_t param, unsigned value)
+{
+ if (NULL == mplpAudioEffectSrs) {
+ return -1;
+ }
+
+ status_t status;
+ effect_param_t *pParam = (effect_param_t *) malloc(
+ sizeof(effect_param_t) + sizeof(unsigned) + sizeof(unsigned));
+ if (NULL == pParam) {
+ LOGE("[%s:%d]Failed to allocate memory!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+ pParam->status = 0;
+ pParam->psize = sizeof(unsigned);
+ pParam->vsize = sizeof(unsigned);
+ *(unsigned *) (&pParam->data[0]) = (unsigned) param;
+ *(unsigned *) (&pParam->data[sizeof(unsigned)]) = value;
+ status = mplpAudioEffectSrs->setParameter(pParam);
+ if (NO_ERROR != status) {
+ LOGE("[%s:%d]Failed to set parameter:%d!\n", __FUNCTION__, __LINE__,
+ param);
+ free(pParam);
+ return -1;
+ } else {
+ free(pParam);
+ return 0;
+ }
+}
+
+int CAndroidEffect::getSrsParameterInt(tshd_srs_param_t param, unsigned *value)
+{
+ if (NULL == mplpAudioEffectSrs) {
+ return -1;
+ }
+
+ status_t status;
+ effect_param_t *pParam = (effect_param_t *) malloc(
+ sizeof(effect_param_t) + sizeof(unsigned) + sizeof(unsigned));
+ if (NULL == pParam) {
+ LOGE("[%s:%d]Failed to allocate memory!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+ pParam->status = 0;
+ pParam->psize = sizeof(unsigned);
+ pParam->vsize = sizeof(unsigned);
+ *(unsigned *) (&pParam->data[0]) = (unsigned) param;
+ status = mplpAudioEffectSrs->getParameter(pParam);
+ if (NO_ERROR != status) {
+ LOGE("[%s:%d]Failed to get parameter:%d!\n", __FUNCTION__, __LINE__,
+ param);
+ *value = 0;
+ free(pParam);
+ return -1;
+ } else {
+ *value = *(unsigned *) (&pParam->data[sizeof(unsigned)]);
+ free(pParam);
+ return 0;
+ }
+}
+
+int CAndroidEffect::setSrsParameterFloat(tshd_srs_param_t param, float value)
+{
+ if (NULL == mplpAudioEffectSrs) {
+ return -1;
+ }
+
+ status_t status;
+ effect_param_t *pParam = (effect_param_t *) malloc(
+ sizeof(effect_param_t) + sizeof(unsigned) + sizeof(float));
+ if (NULL == pParam) {
+ LOGE("[%s:%d]Failed to allocate memory!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+ pParam->status = 0;
+ pParam->psize = sizeof(unsigned);
+ pParam->vsize = sizeof(float);
+ *(unsigned *) (&pParam->data[0]) = (unsigned) param;
+ *(float *) (&pParam->data[sizeof(unsigned)]) = value;
+ status = mplpAudioEffectSrs->setParameter(pParam);
+ if (NO_ERROR != status) {
+ LOGE("[%s:%d]Failed to set parameter:%d!\n", __FUNCTION__, __LINE__,
+ param);
+ free(pParam);
+ return -1;
+ } else {
+ free(pParam);
+ return 0;
+ }
+}
+
+int CAndroidEffect::getSrsParameterFloat(tshd_srs_param_t param, float *value)
+{
+ if (NULL == mplpAudioEffectSrs) {
+ return -1;
+ }
+
+ status_t status;
+ effect_param_t *pParam = (effect_param_t *) malloc(
+ sizeof(effect_param_t) + sizeof(unsigned) + sizeof(float));
+ if (NULL == pParam) {
+ LOGE("[%s:%d]Failed to allocate memory!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+ pParam->status = 0;
+ pParam->psize = sizeof(unsigned);
+ pParam->vsize = sizeof(float);
+ *(unsigned *) (&pParam->data[0]) = (unsigned) param;
+ status = mplpAudioEffectSrs->getParameter(pParam);
+ if (NO_ERROR != status) {
+ LOGE("[%s:%d]Failed to set parameter:%d!\n", __FUNCTION__, __LINE__,
+ param);
+ *value = 0.0f;
+ free(pParam);
+ return -1;
+ } else {
+ *value = *(float *) (&pParam->data[sizeof(unsigned)]);
+ free(pParam);
+ return 0;
+ }
+}
+
+int CAndroidEffect::amAndroidSetSrsParameterInt(tshd_srs_param_t param, unsigned value)
+{
+ return setSrsParameterInt(param, value);
+}
+
+int CAndroidEffect::amAndroidGetSrsParameterInt(tshd_srs_param_t param,
+ unsigned *value)
+{
+ return getSrsParameterInt(param, value);
+}
+
+int CAndroidEffect::amAndroidSetSrsParameterFloat(tshd_srs_param_t param, float value)
+{
+ return setSrsParameterFloat(param, value);
+}
+
+int CAndroidEffect::amAndroidGetSrsParameterFloat(tshd_srs_param_t param, float *value)
+{
+ return getSrsParameterFloat(param, value);
+}
+
+int CAndroidEffect::amAndroidNewSRSAudioEffect(void)
+{
+ if ((NULL == mplpAudioEffectSrs) && (GetAudioSRSModuleDisableCFG() == 0)) {
+ initAudioEffect(&mplpAudioEffectSrs, NULL, SL_IID_SRS,
+ mTrackerSessionId);
+ if (NULL == mplpAudioEffectSrs) {
+ LOGE("[%s:%d] Failed to create audio effect SRS!\n", __FUNCTION__,
+ __LINE__);
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+int CAndroidEffect::amAndroidNewEQAudioEffect(void)
+{
+ if ((NULL == mplpAudioEffectEq) && (GetAudioEqModuleDisableCFG() == 0)) {
+ if (GetAudioEqUsingAndroidCFG()) {
+ initAudioEffect(&mplpAudioEffectEq, SL_IID_EQUALIZER, NULL,
+ mTrackerSessionId);
+ } else {
+ initAudioEffect(&mplpAudioEffectEq, NULL, SL_IID_HPEQ,
+ mTrackerSessionId);
+ }
+
+ if (NULL == mplpAudioEffectEq) {
+ LOGE("[%s:%d] Failed to create audio effect EQ(android:%d)!\n",
+ __FUNCTION__, __LINE__, GetAudioEqUsingAndroidCFG());
+ return -1;
+ } else {
+ // Init all forced gains to be invalid.
+ for (int i = 0; i < EQ_BAND_COUNT; i++) {
+ gEqForcedGain[i] = INVALID_EQ_FORCED_GAIN;
+ }
+ getEqGain(gEqUserSetGain, EQ_BAND_COUNT);
+ LOGD(
+ "[%s:%d] Audio effect EQ(android:%d) was created successfully!\n",
+ __FUNCTION__, __LINE__, GetAudioEqUsingAndroidCFG());
+ }
+ }
+
+ return 0;
+}
+
+int CAndroidEffect::amAndroidNewAudioEffects(void)
+{
+ int tmp_ret = 0;
+
+ tmp_ret |= amAndroidNewSRSAudioEffect();
+ tmp_ret |= amAndroidNewEQAudioEffect();
+
+ return tmp_ret;
+}
+
+void CAndroidEffect::amAndroidFreeAudioEffects(void)
+{
+ {
+ FreeAudioEffect(&mplpAudioEffectEq);
+ FreeAudioEffect(&mplpAudioEffectSrs);
+
+ if (mTrackerSessionId != 0) {
+ AudioSystem::releaseAudioSessionId(mTrackerSessionId, -1);
+ mTrackerSessionId = 0;
+ }
+ }
+}
+
+int CAndroidEffect::amAndroidGetAudioSessionId(void)
+{
+ return mTrackerSessionId;
+}
+
+int CAndroidEffect::amAndroidSetSRSSurroundSwitch(int switch_val)
+{
+ return amAndroidSetSrsParameterInt(SRS_PARAM_SURROUND_ENABLE,
+ (unsigned) switch_val);
+}
+
+int CAndroidEffect::amAndroidSetSRSSurroundGain(int gain_val)
+{
+ return amAndroidSetSrsParameterFloat(SRS_PARAM_SURROUND_GAIN,
+ (float) gain_val / 100.0f);
+}
+
+int CAndroidEffect::amAndroidSetSRSTrubassSwitch(int switch_val)
+{
+ return amAndroidSetSrsParameterInt(SRS_PARAM_TRUEBASS_ENABLE,
+ (unsigned) switch_val);
+}
+
+int CAndroidEffect::amAndroidSetSRSTrubassGain(int gain_val)
+{
+ return amAndroidSetSrsParameterFloat(SRS_PARAM_TRUEBASS_GAIN,
+ (float) gain_val / 100.0f);
+}
+
+int CAndroidEffect::amAndroidSetSRSDialogClaritySwitch(int switch_val)
+{
+ return amAndroidSetSrsParameterInt(SRS_PARAM_DIALOGCLARITY_ENABLE,
+ (unsigned) switch_val);
+}
+
+int CAndroidEffect::amAndroidSetSRSDialogClarityGain(int gain_val)
+{
+ return amAndroidSetSrsParameterFloat(SRS_PARAM_DIALOGCLARTY_GAIN,
+ (float) gain_val / 100.0f);
+}
+
+int CAndroidEffect::amAndroidSetSRSDefinitionGain(int gain_val)
+{
+ return amAndroidSetSrsParameterFloat(SRS_PARAM_DEFINITION_GAIN,
+ (float) gain_val / 100.0f);
+}
+
+int CAndroidEffect::amAndroidSetSRSTrubassSpeakerSize(int tmp_val)
+{
+ int tmp_buf[8] = { 40, 60, 100, 150, 200, 250, 300, 400 };
+ int set_val = 40;
+
+ if (tmp_val >= 0 && tmp_val < sizeof(tmp_buf)) {
+ set_val = tmp_buf[tmp_val];
+ }
+
+ return amAndroidSetSrsParameterInt(SRS_PARAM_TRUEBASS_SPKER_SIZE, set_val);
+}
+
+int CAndroidEffect::setEqGain(const int gain_val_buf[], int band_count)
+{
+ if (NULL == mplpAudioEffectEq) {
+ LOGE("[%s:%d]\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+
+ status_t status;
+ int i;
+ int gain;
+ effect_param_t *pParam;
+ int bAndroidEq = GetAudioEqUsingAndroidCFG();
+
+ if (bAndroidEq) {
+ pParam = (effect_param_t *) malloc(
+ sizeof(effect_param_t) + sizeof(int) + sizeof(int)
+ + sizeof(short));
+ } else {
+ pParam = (effect_param_t *) malloc(
+ sizeof(effect_param_t) + sizeof(int) + sizeof(int));
+ }
+
+ if (NULL == pParam) {
+ LOGE("[%s:%d]Failed to allocate memory!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+
+ for (i = 0; i < band_count; i++) {
+ if (gEqForcedGain[i] != INVALID_EQ_FORCED_GAIN) {
+ gain = gEqForcedGain[i];
+ } else {
+ gain = gain_val_buf[i];
+ }
+
+ if (bAndroidEq) {
+ pParam->status = 0;
+ pParam->psize = sizeof(int) * 2;
+ pParam->vsize = sizeof(short);
+ *(int *) (&pParam->data[0]) = EQ_PARAM_BAND_LEVEL;
+ *(int *) (&pParam->data[sizeof(int)]) = i;
+ *(short *) (&pParam->data[sizeof(int) * 2]) = (short) gain;
+ } else {
+ pParam->status = 0;
+ pParam->psize = sizeof(int);
+ pParam->vsize = sizeof(int);
+ *(int *) (&pParam->data[0]) = i;
+ *(int *) (&pParam->data[sizeof(int)]) = gain;
+ }
+
+ status = mplpAudioEffectEq->setParameter(pParam);
+ if (NO_ERROR != status) {
+ LOGE("[%s:%d]Failed to set parameter:%d!\n", __FUNCTION__, __LINE__,
+ i);
+ free(pParam);
+ return -1;
+ }
+ }
+
+ free(pParam);
+ return 0;
+}
+
+int CAndroidEffect::getEqGain(int gain_val_buf[], int band_count)
+{
+ if (NULL == mplpAudioEffectEq) {
+ return -1;
+ }
+
+ status_t status;
+ effect_param_t *pParam;
+ int bAndroidEq = GetAudioEqUsingAndroidCFG();
+
+ if (bAndroidEq) {
+ pParam = (effect_param_t *) malloc(
+ sizeof(effect_param_t) + sizeof(int) + sizeof(int)
+ + sizeof(short));
+ } else {
+ pParam = (effect_param_t *) malloc(
+ sizeof(effect_param_t) + sizeof(int) + sizeof(int));
+ }
+
+ if (NULL == pParam) {
+ LOGE("[%s:%d]Failed to allocate memory!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+
+ for (int i = 0; i < EQ_BAND_COUNT; i++) {
+ if (gEqForcedGain[i] != INVALID_EQ_FORCED_GAIN) {
+ gain_val_buf[i] = gEqUserSetGain[i];
+ } else {
+ if (bAndroidEq) {
+ pParam->status = 0;
+ pParam->psize = sizeof(int) * 2;
+ pParam->vsize = sizeof(short);
+ *(int *) (&pParam->data[0]) = EQ_PARAM_BAND_LEVEL;
+ *(int *) (&pParam->data[sizeof(int)]) = i;
+ } else {
+ pParam->status = 0;
+ pParam->psize = sizeof(int);
+ pParam->vsize = sizeof(int);
+ *(int *) (&pParam->data[0]) = i;
+ }
+ status = mplpAudioEffectEq->getParameter(pParam);
+ if (NO_ERROR != status) {
+ LOGE("[%s:%d]Failed to set parameter:%d!\n", __FUNCTION__,
+ __LINE__, i);
+ free(pParam);
+ return -1;
+ }
+
+ if (bAndroidEq) {
+ gain_val_buf[i] = *(short *) (&pParam->data[sizeof(int) * 2]);
+ } else {
+ gain_val_buf[i] = *(int *) (&pParam->data[sizeof(int)]);
+ }
+ }
+ }
+
+ free(pParam);
+ return 0;
+}
+
+int CAndroidEffect::amAndroidSetEQGain(const int gain_val_buf[], int band_count)
+{
+ int i;
+ int gain_factor = 1;
+
+ if (band_count > EQ_BAND_COUNT) {
+ band_count = EQ_BAND_COUNT;
+ }
+
+ // convert dB to 100th dB for android EQ
+ if (GetAudioEqUsingAndroidCFG()) {
+ gain_factor = 100;
+ }
+
+ // store the gains set by the user, and convert it to the internal representation.
+ for (i = 0; i < band_count; i++) {
+ gEqUserSetGain[i] = gain_val_buf[i] * gain_factor;
+ }
+
+ return setEqGain(gEqUserSetGain, band_count);
+}
+
+int CAndroidEffect::amAndroidGetEQGain(int gain_val_buf[], int band_count)
+{
+ int i;
+ int ret;
+
+ if (band_count > EQ_BAND_COUNT) {
+ band_count = EQ_BAND_COUNT;
+ }
+
+ ret = getEqGain(gain_val_buf, band_count);
+
+ // convert 100th dB to dB for android EQ
+ if (GetAudioEqUsingAndroidCFG()) {
+ for (i = 0; i < band_count; i++) {
+ gain_val_buf[i] /= 100;
+ }
+ }
+
+ return ret;
+}
+
+int CAndroidEffect::amAndroidSetEQEnable(int enabled)
+{
+ if (NULL == mplpAudioEffectEq) {
+ return -1;
+ }
+
+ if (NO_ERROR != mplpAudioEffectEq->setEnabled(enabled)) {
+ return -1;
+ } else {
+ return 0;
+ }
+}
+
+int CAndroidEffect::amAndroidGetEQEnabled()
+{
+ if (NULL == mplpAudioEffectEq) {
+ return 0;
+ }
+
+ if (mplpAudioEffectEq->getEnabled()) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+int CAndroidEffect::amAndroidForceEQGain(int band, int gain)
+{
+ if (band >= EQ_BAND_COUNT) {
+ LOGE("[%s:%d] band(%d) is out of bound!\n", __FUNCTION__, __LINE__,
+ band);
+ return -1;
+ } else {
+ if (GetAudioEqUsingAndroidCFG() && (gain != INVALID_EQ_FORCED_GAIN)) {
+ gEqForcedGain[band] = gain * 100;
+ } else {
+ gEqForcedGain[band] = gain;
+ }
+
+ // reset the EQ bands to take effect of the forced one.
+ if (setEqGain(gEqUserSetGain, EQ_BAND_COUNT) != 0) {
+ LOGE("[%s:%d]Failed to reset EQ gain!\n", __FUNCTION__, __LINE__);
+ return -1;
+ }
+
+ LOGD("[%s:%d] band(%d) is forced to %d!\n", __FUNCTION__, __LINE__,
+ band, gain);
+ return 0;
+ }
+}
diff --git a/tvapi/libtv/audio/audio_android_effect.h b/tvapi/libtv/audio/audio_android_effect.h
index 1173357..ca0abdd 100644
--- a/tvapi/libtv/audio/audio_android_effect.h
+++ b/tvapi/libtv/audio/audio_android_effect.h
@@ -1,66 +1,65 @@
-#ifndef __TV_AUDIO_ANDROID_EFFECT_H__
-#define __TV_AUDIO_ANDROID_EFFECT_H__
-
-
-
-#include <media/AudioEffect.h>
-#include <hardware/audio_effect.h>
-#include <audio_effects/effect_srs.h>
-#include <audio_effects/effect_hpeq.h>
-#include <audio_effects/effect_equalizer.h>
-#include "tvsetting/audio_cfg.h"
-
-#define EQ_BAND_COUNT (5)
-using namespace android;
-
-class CAndroidEffect
-{
-public:
- CAndroidEffect();
- ~CAndroidEffect();
- int amAndroidNewAudioEffects(void);
- void amAndroidFreeAudioEffects(void);
- int amAndroidGetAudioSessionId(void);
-
- //EQ
- int amAndroidSetEQGain(const int gain_val_buf[], int band_count);
- int amAndroidGetEQGain(int gain_val_buf[], int band_count);
- int amAndroidSetEQEnable(int enabled);
- int amAndroidGetEQEnabled();
-
- //SRS
- int amAndroidSetSRSSurroundSwitch(int switch_val);
- int amAndroidSetSRSSurroundGain(int gain_val);
- int amAndroidSetSRSTrubassSwitch(int switch_val);
- int amAndroidSetSRSTrubassGain(int gain_val);
- int amAndroidSetSRSDialogClaritySwitch(int switch_val);
- int amAndroidSetSRSDialogClarityGain(int gain_val);
- int amAndroidSetSRSDefinitionGain(int gain_val);
- int amAndroidSetSRSTrubassSpeakerSize(int tmp_val);
-
-
-private:
- int gEqForcedGain[EQ_BAND_COUNT];
- int gEqUserSetGain[EQ_BAND_COUNT];
- void FreeAudioEffect(AudioEffect **pEffect);
- void initAudioEffect(AudioEffect **pEffect, const effect_uuid_t *const pEffectType, const effect_uuid_t *const pEffectUuid, int sessionId);
- int setSrsParameterInt(tshd_srs_param_t param, unsigned value);
- int getSrsParameterInt(tshd_srs_param_t param, unsigned *value);
- int setSrsParameterFloat(tshd_srs_param_t param, float value);
- int getSrsParameterFloat(tshd_srs_param_t param, float *value);
- int amAndroidSetSrsParameterInt(tshd_srs_param_t param, unsigned value);
- int amAndroidGetSrsParameterInt(tshd_srs_param_t param, unsigned *value);
- int amAndroidSetSrsParameterFloat(tshd_srs_param_t param, float value);
- int amAndroidGetSrsParameterFloat(tshd_srs_param_t param, float *value);
- int getEqGain(int gain_val_buf[], int band_count);
- int setEqGain(const int gain_val_buf[], int band_count);
- int amAndroidNewSRSAudioEffect(void);
- int amAndroidNewEQAudioEffect(void);
- int amAndroidForceEQGain(int band, int gain);
-
- AudioEffect *mplpAudioEffectSrs;
- AudioEffect *mplpAudioEffectEq;
- int mTrackerSessionId;
-};
-
-#endif //__TV_AUDIO_ANDROID_EFFECT_H__
+#ifndef __TV_AUDIO_ANDROID_EFFECT_H__
+#define __TV_AUDIO_ANDROID_EFFECT_H__
+
+
+
+#include <media/AudioEffect.h>
+#include <hardware/audio_effect.h>
+#include <audio_effects/effect_srs.h>
+#include <audio_effects/effect_hpeq.h>
+#include <audio_effects/effect_equalizer.h>
+#include "tvsetting/audio_cfg.h"
+
+#define EQ_BAND_COUNT (5)
+using namespace android;
+
+class CAndroidEffect {
+public:
+ CAndroidEffect();
+ ~CAndroidEffect();
+ int amAndroidNewAudioEffects(void);
+ void amAndroidFreeAudioEffects(void);
+ int amAndroidGetAudioSessionId(void);
+
+ //EQ
+ int amAndroidSetEQGain(const int gain_val_buf[], int band_count);
+ int amAndroidGetEQGain(int gain_val_buf[], int band_count);
+ int amAndroidSetEQEnable(int enabled);
+ int amAndroidGetEQEnabled();
+
+ //SRS
+ int amAndroidSetSRSSurroundSwitch(int switch_val);
+ int amAndroidSetSRSSurroundGain(int gain_val);
+ int amAndroidSetSRSTrubassSwitch(int switch_val);
+ int amAndroidSetSRSTrubassGain(int gain_val);
+ int amAndroidSetSRSDialogClaritySwitch(int switch_val);
+ int amAndroidSetSRSDialogClarityGain(int gain_val);
+ int amAndroidSetSRSDefinitionGain(int gain_val);
+ int amAndroidSetSRSTrubassSpeakerSize(int tmp_val);
+
+
+private:
+ int gEqForcedGain[EQ_BAND_COUNT];
+ int gEqUserSetGain[EQ_BAND_COUNT];
+ void FreeAudioEffect(AudioEffect **pEffect);
+ void initAudioEffect(AudioEffect **pEffect, const effect_uuid_t *const pEffectType, const effect_uuid_t *const pEffectUuid, int sessionId);
+ int setSrsParameterInt(tshd_srs_param_t param, unsigned value);
+ int getSrsParameterInt(tshd_srs_param_t param, unsigned *value);
+ int setSrsParameterFloat(tshd_srs_param_t param, float value);
+ int getSrsParameterFloat(tshd_srs_param_t param, float *value);
+ int amAndroidSetSrsParameterInt(tshd_srs_param_t param, unsigned value);
+ int amAndroidGetSrsParameterInt(tshd_srs_param_t param, unsigned *value);
+ int amAndroidSetSrsParameterFloat(tshd_srs_param_t param, float value);
+ int amAndroidGetSrsParameterFloat(tshd_srs_param_t param, float *value);
+ int getEqGain(int gain_val_buf[], int band_count);
+ int setEqGain(const int gain_val_buf[], int band_count);
+ int amAndroidNewSRSAudioEffect(void);
+ int amAndroidNewEQAudioEffect(void);
+ int amAndroidForceEQGain(int band, int gain);
+
+ AudioEffect *mplpAudioEffectSrs;
+ AudioEffect *mplpAudioEffectEq;
+ int mTrackerSessionId;
+};
+
+#endif //__TV_AUDIO_ANDROID_EFFECT_H__
diff --git a/tvapi/libtv/audio/audio_api.cpp b/tvapi/libtv/audio/audio_api.cpp
index c856ba9..20db36b 100644
--- a/tvapi/libtv/audio/audio_api.cpp
+++ b/tvapi/libtv/audio/audio_api.cpp
@@ -1,2470 +1,2470 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <fcntl.h>
-
-#include <android/log.h>
-#include <cutils/properties.h>
-
-#include "../tvsetting/CTvSetting.h"
-#include "../tvutils/tvutils.h"
-
-#include "audio_effect.h"
-#include "audio_android.h"
-#include "audio_android_effect.h"
-#include "audio_amaudio.h"
-
-#include "audio_api.h"
-
-#define LOG_TAG "audio_api"
-#include "CTvLog.h"
-
-static int mCustomEQGainBuf[] = { 0, 0, 0, 0, 0, 0 };
-
-static int mCurEQGainBuf[] = { 0, 0, 0, 0, 0, 0 };
-
-static int8_t mCurEQGainChBuf[] = { 0, 0, 0, 0, 0, 0 };
-
-static int mWallEffectValueBuf[] = { 0, 0, 1, 2, 2, 0 };
-
-static const int CC_MUTE_TYPE_KEY_MUTE = (0);
-static const int CC_MUTE_TYPE_SYS_MUTE = (1);
-
-
-//extern int audio_device_switch;
-int audio_device_switch = 1;//showboz
-
-CTvAudio::CTvAudio()
-{
- mAudioMuteStatusForSystem = CC_AUDIO_UNMUTE;
- mAudioMuteStatusForTv = CC_AUDIO_UNMUTE;
- mCurAudioMasterVolume = CC_DEF_SOUND_VOL;
- mCurAudioBalance = CC_DEF_SOUND_BALANCE_VAL;
- mCurAudioSupperBassVolume = CC_DEF_SUPPERBASS_VOL;
- mCurAudioSupperBassSwitch = CC_SWITCH_OFF;
- mCurAudioSRSSurround = CC_SWITCH_OFF;
- mCurAudioSrsDialogClarity = CC_SWITCH_OFF;
- mCurAudioSrsTruBass = CC_SWITCH_OFF;
- mCurAudioSPDIFSwitch = CC_SWITCH_ON;
- mCurAudioSPDIFMode = CC_SPDIF_MODE_PCM;
- mCurAudioBassVolume = CC_DEF_BASS_TREBLE_VOL;
- mCurAudioTrebleVolume = CC_DEF_BASS_TREBLE_VOL;
- mCurAudioSoundMode = CC_SOUND_MODE_END;
- mCurAudioWallEffect = CC_SWITCH_OFF;
- mCurAudioEQMode = CC_EQ_MODE_START;
- mCustomAudioMasterVolume = CC_DEF_SOUND_VOL;
- mCustomAudioBalance = CC_DEF_SOUND_BALANCE_VAL;
- mCustomAudioSupperBassVolume = CC_DEF_SUPPERBASS_VOL;
- mCustomAudioSupperBassSwitch = CC_SWITCH_OFF;
- mCustomAudioSRSSurround = CC_SWITCH_OFF;
- mCustomAudioSrsDialogClarity = CC_SWITCH_OFF;
- mCustomAudioSrsTruBass = CC_SWITCH_OFF;
- mCustomAudioBassVolume = CC_DEF_BASS_TREBLE_VOL;
- mCustomAudioTrebleVolume = CC_DEF_BASS_TREBLE_VOL;
- mCustomAudioSoundMode = CC_SOUND_MODE_END;
- mCustomAudioWallEffect = CC_SWITCH_OFF;
- mCustomAudioEQMode = CC_EQ_MODE_START;
- mCustomAudioSoundEnhancementSwitch = CC_SWITCH_OFF;
- mVolumeCompensationVal = CC_VOLUME_COMPENSATION_DEF_VAL;
-}
-
-CTvAudio::~CTvAudio()
-{
-
-}
-
-template<typename T1, typename T2>
-int AudioArrayCopy(T1 dst_buf[], T2 src_buf[], int copy_size)
-{
- int i = 0;
-
- for (i = 0; i < copy_size; i++) {
- dst_buf[i] = src_buf[i];
- }
-
- return 0;
-}
-
-//Audio Mute
-int CTvAudio::SetAudioMuteForSystem(int muteOrUnmute)
-{
- int ret = 0;
- LOGD("SetAudioMuteForSystem sysMuteStats=%d, tvMuteStatus=%d, toMute=%d", mAudioMuteStatusForSystem, mAudioMuteStatusForTv, muteOrUnmute);
- mAudioMuteStatusForSystem = muteOrUnmute;
- ret |= mAudioAlsa.SetDacMute(mAudioMuteStatusForSystem | mAudioMuteStatusForTv, CC_DAC_MUTE_TYPE_EXTERNAL | CC_DAC_MUTE_TYPE_INTERNAL);
- ret |= SetAudioSPDIFMute(mAudioMuteStatusForSystem | mAudioMuteStatusForTv);
- return ret;
-}
-
-int CTvAudio::GetAudioMuteForSystem()
-{
- return mAudioMuteStatusForSystem;
-}
-
-int CTvAudio::SetAudioMuteForTv(int Mute)
-{
- int ret = 0;
- mAudioMuteStatusForTv = Mute;
- LOGD("SetAudioMuteForTv sysMuteStats=%d, tvMuteStatus=%d, toMute=%d", mAudioMuteStatusForSystem, mAudioMuteStatusForTv, Mute);
- ret |= mAudioAlsa.SetDacMute(mAudioMuteStatusForSystem | mAudioMuteStatusForTv, CC_DAC_MUTE_TYPE_EXTERNAL | CC_DAC_MUTE_TYPE_INTERNAL);
- ret |= SetAudioSPDIFMute(mAudioMuteStatusForSystem | mAudioMuteStatusForTv);
- return ret;
-}
-
-int CTvAudio::GetAudioMuteForTv()
-{
- return mAudioMuteStatusForTv;
-}
-
-int CTvAudio::SetAudioAVOutMute(int muteStatus)
-{
- return mAudioAlsa.SetDacMute(muteStatus, CC_DAC_MUTE_TYPE_INTERNAL);
-}
-
-int CTvAudio::GetAudioAVOutMute()
-{
- return CC_AUDIO_UNMUTE;
-}
-
-int CTvAudio::handleAudioSPDIFMute(int muteStatus)
-{
- int set_val = 0;
-
- if (muteStatus == CC_AUDIO_MUTE) {
- set_val = CC_SPDIF_MUTE_ON;
- } else if (muteStatus == CC_AUDIO_UNMUTE) {
- set_val = CC_SPDIF_MUTE_OFF;
- } else {
- return -1;
- }
-
- return mAudioAlsa.SetSPDIFMute(set_val);
-}
-
-int CTvAudio::SetAudioSPDIFMute(int muteStatus)
-{
- if (GetCurAudioSPDIFSwitch() == CC_SWITCH_OFF) {
- muteStatus = CC_AUDIO_MUTE;
- }
-
- return handleAudioSPDIFMute(muteStatus);
-}
-
-int CTvAudio::GetAudioSPDIFMute()
-{
- return CC_AUDIO_UNMUTE;
-}
-
-//Audio SPDIF switch
-int CTvAudio::SetAudioSPDIFSwitch(int tmp_val)
-{
- int muteStatus = CC_AUDIO_UNMUTE;
-
- mCurAudioSPDIFSwitch = tmp_val;
-
- if (tmp_val == CC_SWITCH_OFF || mAudioMuteStatusForSystem == CC_AUDIO_MUTE || mAudioMuteStatusForTv == CC_AUDIO_MUTE) {
- muteStatus = CC_AUDIO_MUTE;
- } else {
- muteStatus = CC_AUDIO_UNMUTE;
- }
-
- handleAudioSPDIFMute(muteStatus);
- return 0;
-}
-
-int CTvAudio::GetCurAudioSPDIFSwitch()
-{
- return mCurAudioSPDIFSwitch;
-}
-
-int CTvAudio::SaveCurAudioSPDIFSwitch(int tmp_val)
-{
- int8_t tmp_ch = 0;
- if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
- tmp_val = CC_SWITCH_ON;
- }
-
- mCurAudioSPDIFSwitch = tmp_val;
- tmp_ch = tmp_val;
- SSMSaveAudioSPDIFSwitchVal(tmp_ch);
-
- return mCurAudioSPDIFSwitch;
-}
-
-int CTvAudio::LoadCurAudioSPDIFSwitch()
-{
- int8_t tmp_ch = 0;
- SSMReadAudioSPDIFSwitchVal(&tmp_ch);
- mCurAudioSPDIFSwitch = tmp_ch;
- if (mCurAudioSPDIFSwitch != CC_SWITCH_ON
- && mCurAudioSPDIFSwitch != CC_SWITCH_OFF) {
- SaveCurAudioSPDIFSwitch (CC_SWITCH_ON);
- }
- return mCurAudioSPDIFSwitch;
-}
-
-//Audio SPDIF Mode
-int CTvAudio::SetAudioSPDIFMode(int tmp_val)
-{
- LOGD("%s : tmp_val = %d\n", __FUNCTION__, tmp_val);
- mCurAudioSPDIFMode = tmp_val;
-
- SetSPDIFMode(mCurAudioSPDIFMode);
-
- return 0;
-}
-
-int CTvAudio::GetCurAudioSPDIFMode()
-{
- return mCurAudioSPDIFMode;
-}
-
-int CTvAudio::SaveCurAudioSPDIFMode(int tmp_val)
-{
- int8_t tmp_ch = 0;
- if (tmp_val != CC_SPDIF_MODE_PCM && tmp_val != CC_SPDIF_MODE_RAW) {
- tmp_val = CC_SPDIF_MODE_PCM;
- }
-
- mCurAudioSPDIFMode = tmp_val;
- tmp_ch = tmp_val;
- SSMSaveAudioSPDIFModeVal(tmp_ch);
-
- return mCurAudioSPDIFMode;
-}
-
-int CTvAudio::LoadCurAudioSPDIFMode()
-{
- int8_t tmp_ch = 0;
- SSMReadAudioSPDIFModeVal(&tmp_ch);
- mCurAudioSPDIFMode = tmp_ch;
- if (mCurAudioSPDIFMode != CC_SPDIF_MODE_PCM
- && mCurAudioSPDIFMode != CC_SPDIF_MODE_RAW) {
- SaveCurAudioSPDIFMode (CC_SPDIF_MODE_PCM);
- }
- return mCurAudioSPDIFMode;
-}
-
-//Audio Master Volume
-int CTvAudio::SetAudioMasterVolume(int tmp_vol)
-{
- const char *value;
- if (tmp_vol < CC_MIN_SOUND_VOL || tmp_vol > CC_MAX_SOUND_VOL) {
- tmp_vol = CC_DEF_SOUND_VOL;
- }
-
- mCustomAudioMasterVolume = tmp_vol;
-
- //Volume Compensation
- if (tmp_vol != CC_MIN_SOUND_VOL) {
- tmp_vol += GetAudioVolumeCompensationVal();
- }
-
- if (tmp_vol > CC_MAX_SOUND_VOL) {
- tmp_vol = CC_MAX_SOUND_VOL;
- }
-
- if (tmp_vol < CC_MIN_SOUND_VOL) {
- tmp_vol = CC_MIN_SOUND_VOL;
- }
-
- mAudioAlsa.SetDacMainVolume(tmp_vol);
- value = config_get_str ( "TV", "tvin.2d4G.headset.en", "null" );
- if ( strcmp ( value, "enable" ) == 0 ) {
- setAudioPcmPlaybackVolume(tmp_vol);
- }
- return 0;
-}
-
-int CTvAudio::GetAudioMasterVolume()
-{
- return mCustomAudioMasterVolume;
-}
-
-int CTvAudio::GetCurAudioMasterVolume()
-{
- return mCurAudioMasterVolume;
-}
-
-int CTvAudio::SaveCurAudioMasterVolume(int tmp_vol)
-{
- int8_t tmp_ch = 0;
-
- if (tmp_vol < CC_MIN_SOUND_VOL || tmp_vol > CC_MAX_SOUND_VOL) {
- tmp_vol = CC_DEF_SOUND_VOL;
- }
-
- mCurAudioMasterVolume = tmp_vol;
- tmp_ch = tmp_vol;
- SSMSaveAudioMasterVolume(tmp_ch);
-
- return mCurAudioMasterVolume;
-}
-
-int CTvAudio::LoadCurAudioMasterVolume()
-{
- int8_t tmp_ch = 0;
- SSMReadAudioMasterVolume(&tmp_ch);
- mCurAudioMasterVolume = tmp_ch;
- if (mCurAudioMasterVolume < CC_MIN_SOUND_VOL
- || mCurAudioMasterVolume > CC_MAX_SOUND_VOL) {
- SaveCurAudioMasterVolume (CC_DEF_SOUND_VOL);
- }
-
- mCustomAudioMasterVolume = mCurAudioMasterVolume;
-
- return mCurAudioMasterVolume;
-}
-
-//Audio Balance
-int CTvAudio::SetAudioBalance(int tmp_val)
-{
- if (tmp_val < CC_MIN_SOUND_BALANCE_VAL
- || tmp_val > CC_MAX_SOUND_BALANCE_VAL) {
- tmp_val = CC_DEF_SOUND_BALANCE_VAL;
- }
-
- mCustomAudioBalance = tmp_val;
-
- if (mAudioAlsa.SetBalanceValue(mCustomAudioBalance) < 0) {
- return SetAudioMasterVolume(GetAudioMasterVolume());
- }
-
- return 0;
-}
-
-int CTvAudio::GetAudioBalance()
-{
- return mCustomAudioBalance;
-}
-
-int CTvAudio::GetCurAudioBalance()
-{
- return mCurAudioBalance;
-}
-
-int CTvAudio::SaveCurAudioBalance(int tmp_val)
-{
- int8_t tmp_ch = 0;
-
- if (tmp_val < CC_MIN_SOUND_BALANCE_VAL
- || tmp_val > CC_MAX_SOUND_BALANCE_VAL) {
- tmp_val = CC_DEF_SOUND_BALANCE_VAL;
- }
-
- mCurAudioBalance = tmp_val;
- tmp_ch = tmp_val;
- SSMSaveAudioBalanceVal(tmp_ch);
-
- return mCurAudioBalance;
-}
-
-int CTvAudio::LoadCurAudioBalance()
-{
- int8_t tmp_ch = 0;
- SSMReadAudioBalanceVal(&tmp_ch);
- mCurAudioBalance = tmp_ch;
- if (mCurAudioBalance < CC_MIN_SOUND_BALANCE_VAL
- || mCurAudioBalance > CC_MAX_SOUND_BALANCE_VAL) {
- SaveCurAudioBalance (CC_DEF_SOUND_BALANCE_VAL);
- }
-
- mCustomAudioBalance = mCurAudioBalance;
-
- return mCurAudioBalance;
-}
-
-int CTvAudio::SetAudioVolumeCompensationVal(int tmp_vol_comp_val)
-{
- int tmp_val = 0;
- tmp_val = mVolumeCompensationVal;
- mVolumeCompensationVal = tmp_vol_comp_val;
- LOGD("%s, old vol comp value = %d, new vol comp value = %d.\n",
- __FUNCTION__, tmp_val, tmp_vol_comp_val);
- return tmp_val;
-}
-
-int CTvAudio::GetAudioVolumeCompensationVal()
-{
- int tmp_vol_comp_val = 0;
- tmp_vol_comp_val = mVolumeCompensationVal;
- if (tmp_vol_comp_val < CC_VOLUME_COMPENSATION_MIN_VAL
- || tmp_vol_comp_val > CC_VOLUME_COMPENSATION_MAX_VAL) {
- tmp_vol_comp_val = CC_VOLUME_COMPENSATION_DEF_VAL;
- }
- LOGD("%s, vol comp value = %d, return value = %d.\n", __FUNCTION__,
- mVolumeCompensationVal, tmp_vol_comp_val);
-
- return tmp_vol_comp_val;
-}
-
-//Audio SupperBass Volume
-int CTvAudio::SetAudioSupperBassVolume(int tmp_vol)
-{
- if (tmp_vol < CC_MIN_SUPPERBASS_VOL || tmp_vol > CC_MAX_SUPPERBASS_VOL) {
- tmp_vol = CC_DEF_SUPPERBASS_VOL;
- }
-
- mCustomAudioSupperBassVolume = tmp_vol;
-
- return mAudioAlsa.SetDacSupperBassVolume(mCustomAudioSupperBassVolume);
-}
-
-int CTvAudio::GetAudioSupperBassVolume()
-{
- return mCustomAudioSupperBassVolume;
-}
-
-int CTvAudio::GetCurAudioSupperBassVolume()
-{
- return mCurAudioSupperBassVolume;
-}
-
-int CTvAudio::SaveCurAudioSupperBassVolume(int tmp_vol)
-{
- int8_t tmp_ch = 0;
- if (tmp_vol < CC_MIN_SUPPERBASS_VOL || tmp_vol > CC_MAX_SUPPERBASS_VOL) {
- tmp_vol = CC_DEF_SUPPERBASS_VOL;
- }
-
- mCurAudioSupperBassVolume = tmp_vol;
- tmp_ch = tmp_vol;
- SSMSaveAudioSupperBassVolume(tmp_ch);
-
- return mCurAudioSupperBassVolume;
-}
-
-int CTvAudio::LoadCurAudioSupperBassVolume()
-{
- int8_t tmp_ch = 0;
- SSMReadAudioSupperBassVolume(&tmp_ch);
- mCurAudioSupperBassVolume = tmp_ch;
- if (mCurAudioSupperBassVolume < CC_MIN_SUPPERBASS_VOL
- || mCurAudioSupperBassVolume > CC_MAX_SUPPERBASS_VOL) {
- SaveCurAudioSupperBassVolume (CC_DEF_SUPPERBASS_VOL);
- }
-
- mCustomAudioSupperBassVolume = mCurAudioSupperBassVolume;
-
- return mCurAudioSupperBassVolume;
-}
-
-//Audio SupperBass Switch
-int CTvAudio::SetAudioSupperBassSwitch(int tmp_val)
-{
- if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
- tmp_val = CC_SWITCH_OFF;
- }
-
- mCustomAudioSupperBassSwitch = tmp_val;
-
- if (GetAudioSupperBassSwitch() == CC_SWITCH_OFF) {
- return mAudioAlsa.SetDacSupperBassVolume(CC_MIN_SUPPERBASS_VOL);
- }
-
- return mAudioAlsa.SetDacSupperBassVolume(GetAudioSupperBassVolume());
-}
-
-int CTvAudio::GetAudioSupperBassSwitch()
-{
- if (GetAudioSupperBassSwitchDisableCFG() != 0) {
- return CC_SWITCH_ON;
- }
-
- return mCustomAudioSupperBassSwitch;
-}
-
-int CTvAudio::GetCurAudioSupperBassSwitch()
-{
- if (GetAudioSupperBassSwitchDisableCFG() != 0) {
- return CC_SWITCH_ON;
- }
-
- return mCurAudioSupperBassSwitch;
-}
-
-int CTvAudio::SaveCurAudioSupperBassSwitch(int tmp_val)
-{
- int8_t tmp_ch = 0;
- if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
- tmp_val = CC_SWITCH_OFF;
- }
-
- mCurAudioSupperBassSwitch = tmp_val;
- tmp_ch = tmp_val;
- SSMSaveAudioSupperBassSwitch(tmp_ch);
-
- HandleSupperBassSwicth();
-
- return mCurAudioSupperBassSwitch;
-}
-
-int CTvAudio::LoadCurAudioSupperBassSwitch()
-{
- int8_t tmp_ch = 0;
- SSMReadAudioSupperBassSwitch(&tmp_ch);
- mCurAudioSupperBassSwitch = tmp_ch;
- if (mCurAudioSupperBassSwitch != CC_SWITCH_ON
- && mCurAudioSupperBassSwitch != CC_SWITCH_OFF) {
- SaveCurAudioSupperBassSwitch (CC_SWITCH_OFF);
- }
-
- mCustomAudioSupperBassSwitch = mCurAudioSupperBassSwitch;
-
- HandleSupperBassSwicth();
-
- return mCurAudioSupperBassSwitch;
-}
-
-void CTvAudio::HanldeSupperBassSRSSpeakerSize()
-{
- int tmp_speakersize = -1;
-
- if (GetAudioSrsTruBass() == CC_SWITCH_ON) {
- if (GetAudioSupperBassSwitch() == CC_SWITCH_ON) {
- tmp_speakersize = GetAudioSRSSupperBassTrubassSpeakerSizeCfg(1);
- } else {
- tmp_speakersize = GetAudioSRSSupperBassTrubassSpeakerSizeCfg(0);
- }
-
- if (tmp_speakersize >= 0) {
- mAudioEffect.SetSrsTrubassSpeakerSize(tmp_speakersize);
- }
- }
-}
-
-void CTvAudio::HandleSupperBassSwicth()
-{
- if (GetAudioSupperBassModuleDisableCFG() != 0) {
- return;
- }
-
- HanldeSupperBassSRSSpeakerSize();
-}
-
-//Audio SRS Surround switch
-int CTvAudio::SetAudioSRSSurround(int tmp_val)
-{
- if (GetAudioSRSModuleDisableCFG() == 1) {
- return 0;
- }
-
- if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
- tmp_val = CC_SWITCH_OFF;
- }
-
- mCustomAudioSRSSurround = tmp_val;
-
- RealSetSRS();
- return 0;
-}
-
-int CTvAudio::GetAudioSRSSurround()
-{
- if (GetAudioSRSModuleDisableCFG() == 1) {
- return CC_SWITCH_OFF;
- }
-
- return mCustomAudioSRSSurround;
-}
-
-int CTvAudio::GetCurAudioSRSSurround()
-{
- if (GetAudioSRSModuleDisableCFG() == 1) {
- return CC_SWITCH_OFF;
- }
-
- return mCurAudioSRSSurround;
-}
-
-int CTvAudio::SaveCurAudioSrsSurround(int tmp_val)
-{
- int8_t tmp_ch = 0;
- if (GetAudioSRSModuleDisableCFG() == 1) {
- return 0;
- }
-
- if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
- tmp_val = CC_SWITCH_OFF;
- }
-
- mCurAudioSRSSurround = tmp_val;
- tmp_ch = tmp_val;
- SSMSaveAudioSRSSurroundSwitch(tmp_ch);
-
- return mCurAudioSRSSurround;
-}
-
-int CTvAudio::LoadCurAudioSrsSurround()
-{
- int8_t tmp_ch = 0;
- if (GetAudioSRSModuleDisableCFG() == 1) {
- mCustomAudioSRSSurround = CC_SWITCH_OFF;
- mCustomAudioSRSSurround = mCurAudioSRSSurround;
- return mCurAudioSRSSurround;
- }
-
- SSMReadAudioSRSSurroundSwitch(&tmp_ch);
- mCurAudioSRSSurround = tmp_ch;
- if (mCurAudioSRSSurround != CC_SWITCH_ON
- && mCurAudioSRSSurround != CC_SWITCH_OFF) {
- SaveCurAudioSrsSurround (CC_SWITCH_OFF);
- }
-
- mCustomAudioSRSSurround = mCurAudioSRSSurround;
-
- return mCurAudioSRSSurround;
-}
-
-//Audio SRS Dialog Clarity
-int CTvAudio::SetAudioSrsDialogClarity(int tmp_val)
-{
- if (GetAudioSRSModuleDisableCFG() == 1) {
- return 0;
- }
-
- if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
- tmp_val = CC_SWITCH_OFF;
- }
-
- mCustomAudioSrsDialogClarity = tmp_val;
- RealSetSRS();
-
- return 0;
-}
-
-int CTvAudio::GetAudioSrsDialogClarity()
-{
- if (GetAudioSRSModuleDisableCFG() == 1) {
- return CC_SWITCH_OFF;
- }
-
- return mCustomAudioSrsDialogClarity;
-}
-
-int CTvAudio::GetCurAudioSrsDialogClarity()
-{
- if (GetAudioSRSModuleDisableCFG() == 1) {
- return CC_SWITCH_OFF;
- }
-
- return mCurAudioSrsDialogClarity;
-}
-
-int CTvAudio::SaveCurAudioSrsDialogClarity(int tmp_val)
-{
- int8_t tmp_ch = 0;
- if (GetAudioSRSModuleDisableCFG() == 1) {
- return 0;
- }
-
- if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
- tmp_val = CC_SWITCH_OFF;
- }
-
- mCurAudioSrsDialogClarity = tmp_val;
- tmp_ch = tmp_val;
- SSMSaveAudioSRSDialogClaritySwitch(tmp_ch);
-
- return mCurAudioSrsDialogClarity;
-}
-
-int CTvAudio::LoadCurAudioSrsDialogClarity()
-{
- int8_t tmp_ch = 0;
- if (GetAudioSRSModuleDisableCFG() == 1) {
- mCurAudioSrsDialogClarity = CC_SWITCH_OFF;
- mCustomAudioSrsDialogClarity = mCurAudioSrsDialogClarity;
- return mCurAudioSRSSurround;
- }
-
- SSMReadAudioSRSDialogClaritySwitch(&tmp_ch);
- mCurAudioSrsDialogClarity = tmp_ch;
- if (mCurAudioSrsDialogClarity != CC_SWITCH_ON
- && mCurAudioSrsDialogClarity != CC_SWITCH_OFF) {
- SaveCurAudioSrsDialogClarity (CC_SWITCH_OFF);
- }
-
- mCustomAudioSrsDialogClarity = mCurAudioSrsDialogClarity;
-
- return mCurAudioSrsDialogClarity;
-}
-
-//Audio SRS Trubass
-int CTvAudio::SetAudioSrsTruBass(int tmp_val)
-{
- if (GetAudioSRSModuleDisableCFG() == 1) {
- return 0;
- }
-
- if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
- tmp_val = CC_SWITCH_OFF;
- }
-
- mCustomAudioSrsTruBass = tmp_val;
- RealSetSRS();
-
- return 0;
-}
-
-int CTvAudio::GetAudioSrsTruBass()
-{
- if (GetAudioSRSModuleDisableCFG() == 1) {
- return CC_SWITCH_OFF;
- }
-
- return mCustomAudioSrsTruBass;
-}
-
-int CTvAudio::GetCurAudioSrsTruBass()
-{
- if (GetAudioSRSModuleDisableCFG() == 1) {
- return CC_SWITCH_OFF;
- }
-
- return mCurAudioSrsTruBass;
-}
-
-int CTvAudio::SaveCurAudioSrsTruBass(int tmp_val)
-{
- int8_t tmp_ch = 0;
- if (GetAudioSRSModuleDisableCFG() == 1) {
- return 0;
- }
-
- if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
- tmp_val = CC_SWITCH_OFF;
- }
-
- mCurAudioSrsTruBass = tmp_val;
- tmp_ch = tmp_val;
- SSMSaveAudioSRSTruBassSwitch(tmp_ch);
-
- return mCurAudioSrsTruBass;
-}
-
-int CTvAudio::LoadCurAudioSrsTruBass()
-{
- int8_t tmp_ch = 0;
- if (GetAudioSRSModuleDisableCFG() == 1) {
- mCurAudioSrsTruBass = CC_SWITCH_OFF;
- mCustomAudioSrsTruBass = mCurAudioSrsTruBass;
- return mCurAudioSRSSurround;
- }
-
- SSMReadAudioSRSTruBassSwitch(&tmp_ch);
- mCurAudioSrsTruBass = tmp_ch;
- if (mCurAudioSrsTruBass != CC_SWITCH_ON
- && mCurAudioSrsTruBass != CC_SWITCH_OFF) {
- SaveCurAudioSrsTruBass (CC_SWITCH_OFF);
- }
-
- mCustomAudioSrsTruBass = mCurAudioSrsTruBass;
-
- return mCurAudioSrsTruBass;
-}
-
-void CTvAudio::RealSetSRS()
-{
- int tmp_gain_val = 0;
- int surround_switch = CC_SWITCH_OFF;
- int trubass_switch = CC_SWITCH_OFF;
- int dialogclarity_switch = CC_SWITCH_OFF;
-
- surround_switch = GetAudioSRSSurround();
- if (surround_switch == CC_SWITCH_ON) {
- mAudioEffect.SetSrsSurroundSwitch(surround_switch);
- tmp_gain_val = GetAudioSRSSourroundGainCfg();
- if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
- mAudioEffect.SetSrsSurroundGain(tmp_gain_val);
- }
-
- trubass_switch = GetAudioSrsTruBass();
- dialogclarity_switch = GetAudioSrsDialogClarity();
- if (trubass_switch == CC_SWITCH_ON
- && dialogclarity_switch == CC_SWITCH_OFF) {
- mAudioEffect.SetSrsTruBassSwitch (CC_SWITCH_ON);
-
- tmp_gain_val = GetAudioSRSTrubassOnlyGainCfg();
- if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
- mAudioEffect.SetSrsTruBassGain(tmp_gain_val);
- }
-
- mAudioEffect.SetSrsDialogClaritySwitch (CC_SWITCH_OFF);
- } else if (trubass_switch == CC_SWITCH_OFF
- && dialogclarity_switch == CC_SWITCH_ON) {
- mAudioEffect.SetSrsTruBassSwitch (CC_SWITCH_OFF);
-
- mAudioEffect.SetSrsDialogClaritySwitch (CC_SWITCH_ON);
-
- tmp_gain_val = GetAudioSRSDialogClarityOnlyDefinitionGainCfg();
- if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
- mAudioEffect.SetSrsDefinitionGain(tmp_gain_val);
- }
-
- tmp_gain_val = GetAudioSRSDialogClarityOnlyGainCfg();
- if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
- mAudioEffect.SetSrsDialogClarityGain(tmp_gain_val);
- }
- } else if (trubass_switch == CC_SWITCH_ON
- && dialogclarity_switch == CC_SWITCH_ON) {
- mAudioEffect.SetSrsTruBassSwitch (CC_SWITCH_ON);
-
- tmp_gain_val = GetAudioSRSTrubassAndDialogClarityTrubassGainCfg();
- if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
- mAudioEffect.SetSrsTruBassGain(tmp_gain_val);
- }
-
- mAudioEffect.SetSrsDialogClaritySwitch(CC_SWITCH_ON);
-
- tmp_gain_val =
- GetAudioSRSTrubassAndDialogClarityDefinitionGainCfg();
- if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
- mAudioEffect.SetSrsDefinitionGain(tmp_gain_val);
- }
-
- tmp_gain_val =
- GetAudioSRSTrubassAndDialogClarityDialogClarityGainCfg();
- if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
- mAudioEffect.SetSrsDialogClarityGain(tmp_gain_val);
- }
- } else if (trubass_switch == CC_SWITCH_OFF
- && dialogclarity_switch == CC_SWITCH_OFF) {
- mAudioEffect.SetSrsTruBassSwitch (CC_SWITCH_OFF);
- mAudioEffect.SetSrsDialogClaritySwitch(CC_SWITCH_OFF);
- }
-
- HanldeSupperBassSRSSpeakerSize();
- } else {
- mAudioEffect.SetSrsSurroundSwitch (CC_SWITCH_OFF);
- mAudioEffect.SetSrsTruBassSwitch(CC_SWITCH_OFF);
- mAudioEffect.SetSrsDialogClaritySwitch(CC_SWITCH_OFF);
- }
-
- SetDacGain();
-}
-
-int CTvAudio::SetDacGain()
-{
- int main_gain_val = 0, sb_gain_val = 0;
- int sourround_switch, trubass_switch, dialogclarity_switch;
-
- sourround_switch = GetAudioSRSSurround();
- trubass_switch = GetAudioSrsTruBass();
- dialogclarity_switch = GetAudioSrsDialogClarity();
-
- if (sourround_switch == CC_SWITCH_ON) {
- main_gain_val = GetAudioSRSSourroundAmplifierMasterGainCfg();
- sb_gain_val = GetAudioSRSSourroundAmplifierSupperBassGainCfg();
-
- if (dialogclarity_switch == CC_SWITCH_ON
- && trubass_switch == CC_SWITCH_OFF) {
- main_gain_val = GetAudioSRSDialogClarityOnlyAmplifierMasterGainCfg();
- sb_gain_val = GetAudioSRSDialogClarityOnlyAmplifierSupperBassGainCfg();
- } else if (dialogclarity_switch == CC_SWITCH_OFF
- && trubass_switch == CC_SWITCH_ON) {
- main_gain_val = GetAudioSRSTrubassOnlyAmplifierMasterGainCfg();
- sb_gain_val = GetAudioSRSTrubassOnlyAmplifierSupperBassGainCfg();
- } else if (dialogclarity_switch == CC_SWITCH_ON
- && trubass_switch == CC_SWITCH_ON) {
- main_gain_val = GetAudioSRSTrubassAndDialogClarityAmplifierMasterGainCfg();
- sb_gain_val = GetAudioSRSTrubassAndDialogClarityAmplifierSupperBassGainCfg();
- }
- }
-
- mAudioAlsa.SetMainVolumeGain(main_gain_val);
- mAudioAlsa.SetSupperBassVolumeGain(sb_gain_val);
-
- return 0;
-}
-
-//Audio Bass
-int CTvAudio::SetAudioBassVolume(int tmp_vol)
-{
- int nMinBassVol = 0, nMaxBassVol = 0;
-
- nMinBassVol = GetBassUIMinGainVal();
- nMaxBassVol = GetBassUIMaxGainVal();
-
- if (tmp_vol < nMinBassVol || tmp_vol > nMaxBassVol) {
- tmp_vol = (nMaxBassVol + nMinBassVol) / 2;
- }
-
- mCustomAudioBassVolume = tmp_vol;
-
- tmp_vol = MappingTrebleBassAndEqualizer(GetAudioBassVolume(), 0,
- nMinBassVol, nMaxBassVol);
-
- return SetSpecialIndexEQGain(CC_EQ_BASS_IND, tmp_vol);
-}
-
-int CTvAudio::GetAudioBassVolume()
-{
- return mCustomAudioBassVolume;
-}
-
-int CTvAudio::GetCurAudioBassVolume()
-{
- return mCurAudioBassVolume;
-}
-
-int CTvAudio::SaveCurAudioBassVolume(int tmp_vol)
-{
- int nMinBassVol = 0, nMaxBassVol = 0;
-
- nMinBassVol = GetBassUIMinGainVal();
- nMaxBassVol = GetBassUIMaxGainVal();
-
- if (tmp_vol < nMinBassVol || tmp_vol > nMaxBassVol) {
- tmp_vol = (nMaxBassVol + nMinBassVol) / 2;
- }
-
- RealSaveCurAudioBassVolume(tmp_vol, 1);
-
- tmp_vol = MappingTrebleBassAndEqualizer(GetCurAudioBassVolume(), 0,
- nMinBassVol, nMaxBassVol);
-
- return SaveSpecialIndexEQGain(CC_EQ_BASS_IND, tmp_vol);
-}
-
-int CTvAudio::RealSaveCurAudioBassVolume(int tmp_vol, int sound_mode_judge)
-{
- int8_t tmp_ch = 0;
- mCurAudioBassVolume = tmp_vol;
- tmp_ch = tmp_vol;
- SSMSaveAudioBassVolume(tmp_ch);
-
- if (sound_mode_judge == 1) {
- if (GetAudioSoundMode() != CC_SOUND_MODE_USER) {
- SaveCurAudioSoundMode (CC_SOUND_MODE_USER);
- mCustomAudioSoundMode = mCurAudioSoundMode;
- }
- }
-
- return mCurAudioBassVolume;
-}
-
-int CTvAudio::LoadCurAudioBassVolume()
-{
- int nMinBassVol = 0, nMaxBassVol = 0;
- int8_t tmp_ch = 0;
-
- nMinBassVol = GetBassUIMinGainVal();
- nMaxBassVol = GetBassUIMaxGainVal();
-
- SSMReadAudioBassVolume(&tmp_ch);
- mCurAudioBassVolume = tmp_ch;
- if (mCurAudioBassVolume < nMinBassVol
- || mCurAudioBassVolume > nMaxBassVol) {
- RealSaveCurAudioBassVolume((nMaxBassVol + nMinBassVol) / 2, 0);
- }
-
- mCustomAudioBassVolume = mCurAudioBassVolume;
-
- return mCurAudioBassVolume;
-}
-
-//Audio Treble
-int CTvAudio::SetAudioTrebleVolume(int tmp_vol)
-{
- int nMinTrebleVol = 0, nMaxTrebleVol = 0;
-
- nMinTrebleVol = GetTrebleUIMinGainVal();
- nMaxTrebleVol = GetTrebleUIMaxGainVal();
-
- if (tmp_vol < nMinTrebleVol || tmp_vol > nMaxTrebleVol) {
- tmp_vol = (nMaxTrebleVol + nMinTrebleVol) / 2;
- }
-
- mCustomAudioTrebleVolume = tmp_vol;
-
- tmp_vol = MappingTrebleBassAndEqualizer(GetAudioTrebleVolume(), 0,
- nMinTrebleVol, nMaxTrebleVol);
-
- return SetSpecialIndexEQGain(CC_EQ_TREBLE_IND, tmp_vol);
-}
-
-int CTvAudio::GetAudioTrebleVolume()
-{
- return mCustomAudioTrebleVolume;
-}
-
-int CTvAudio::GetCurAudioTrebleVolume()
-{
- return mCurAudioTrebleVolume;
-}
-
-int CTvAudio::SaveCurAudioTrebleVolume(int tmp_vol)
-{
- int nMinTrebleVol = 0, nMaxTrebleVol = 0;
-
- nMinTrebleVol = GetTrebleUIMinGainVal();
- nMaxTrebleVol = GetTrebleUIMaxGainVal();
-
- if (tmp_vol < nMinTrebleVol || tmp_vol > nMaxTrebleVol) {
- tmp_vol = (nMaxTrebleVol + nMinTrebleVol) / 2;
- }
-
- RealSaveCurAudioTrebleVolume(tmp_vol, 1);
-
- tmp_vol = MappingTrebleBassAndEqualizer(GetCurAudioTrebleVolume(), 0,
- nMinTrebleVol, nMaxTrebleVol);
-
- return SaveSpecialIndexEQGain(CC_EQ_TREBLE_IND, tmp_vol);
-}
-
-int CTvAudio::RealSaveCurAudioTrebleVolume(int tmp_vol, int sound_mode_judge)
-{
- int8_t tmp_ch = 0;
- mCurAudioTrebleVolume = tmp_vol;
- tmp_ch = tmp_vol;
- SSMSaveAudioTrebleVolume(tmp_ch);
-
- if (sound_mode_judge == 1) {
- if (GetAudioSoundMode() != CC_SOUND_MODE_USER) {
- SaveCurAudioSoundMode (CC_SOUND_MODE_USER);
- mCustomAudioSoundMode = mCurAudioSoundMode;
- }
- }
-
- return mCurAudioTrebleVolume;
-}
-
-int CTvAudio::LoadCurAudioTrebleVolume()
-{
- int nMinTrebleVol = 0, nMaxTrebleVol = 0;
- int8_t tmp_ch = 0;
-
- nMinTrebleVol = GetTrebleUIMinGainVal();
- nMaxTrebleVol = GetTrebleUIMaxGainVal();
-
- SSMReadAudioTrebleVolume(&tmp_ch);
- mCurAudioTrebleVolume = tmp_ch;
- if (mCurAudioTrebleVolume < nMinTrebleVol
- || mCurAudioTrebleVolume > nMaxTrebleVol) {
- RealSaveCurAudioTrebleVolume((nMaxTrebleVol + nMinTrebleVol) / 2, 0);
- }
-
- mCustomAudioTrebleVolume = mCurAudioTrebleVolume;
-
- return mCurAudioTrebleVolume;
-}
-
-//Audio Sound Mode
-int CTvAudio::SetAudioSoundMode(int tmp_val)
-{
- if (tmp_val < CC_SOUND_MODE_START || tmp_val > CC_SOUND_MODE_END) {
- tmp_val = CC_SOUND_MODE_STD;
- }
-
- LOGD("%s : sound mode = %d\n", __FUNCTION__, tmp_val);
-
- mCustomAudioSoundMode = tmp_val;
- SetSpecialModeEQGain(mCustomAudioSoundMode);
-
- HandleTrebleBassVolume();
-
- return 0;
-}
-
-int CTvAudio::GetAudioSoundMode()
-{
- return mCustomAudioSoundMode;
-}
-
-int CTvAudio::GetCurAudioSoundMode()
-{
- return mCurAudioSoundMode;
-}
-
-int CTvAudio::SaveCurAudioSoundMode(int tmp_val)
-{
- int8_t tmp_ch = 0;
- if (tmp_val < CC_SOUND_MODE_START || tmp_val > CC_SOUND_MODE_END) {
- tmp_val = CC_SOUND_MODE_STD;
- }
-
- mCurAudioSoundMode = tmp_val;
- tmp_ch = tmp_val;
- SSMSaveAudioSoundModeVal(tmp_ch);
-
- return mCurAudioSoundMode;
-}
-
-int CTvAudio::LoadCurAudioSoundMode()
-{
- int8_t tmp_ch = 0;
- SSMReadAudioSoundModeVal(&tmp_ch);
- mCurAudioSoundMode = tmp_ch;
- if (mCurAudioSoundMode < CC_SOUND_MODE_START
- || mCurAudioSoundMode > CC_SOUND_MODE_END) {
- SaveCurAudioSoundMode (CC_SOUND_MODE_STD);
- }
-
- mCustomAudioSoundMode = mCurAudioSoundMode;
-
- return mCurAudioSoundMode;
-}
-
-int CTvAudio::HandleTrebleBassVolume()
-{
- int tmp_vol = 0;
- int tmpEQGainBuf[128] = { 0 };
- int8_t tmp_ch = 0;
-
- GetCustomEQGain(tmpEQGainBuf);
-
- tmp_vol = MappingTrebleBassAndEqualizer(tmpEQGainBuf[CC_EQ_TREBLE_IND], 1,
- GetTrebleUIMinGainVal(), GetTrebleUIMaxGainVal());
- mCustomAudioTrebleVolume = tmp_vol;
- mCurAudioTrebleVolume = mCustomAudioTrebleVolume;
- tmp_ch = mCustomAudioTrebleVolume;
- SSMSaveAudioTrebleVolume(tmp_ch);
-
- tmp_vol = MappingTrebleBassAndEqualizer(tmpEQGainBuf[CC_EQ_BASS_IND], 1,
- GetBassUIMinGainVal(), GetBassUIMaxGainVal());
- mCustomAudioBassVolume = tmp_vol;
- mCurAudioBassVolume = mCustomAudioBassVolume;
- tmp_ch = mCustomAudioBassVolume;
- SSMSaveAudioBassVolume(tmp_ch);
-
- return 0;
-}
-
-//Audio Wall Effect
-int CTvAudio::SetAudioWallEffect(int tmp_val)
-{
- int tmp_treble_val;
- int tmp_type = 0;
-
- if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
- tmp_val = CC_SWITCH_OFF;
- }
-
- mCustomAudioWallEffect = tmp_val;
-
- tmp_type = GetAudioWallEffectTypeCfg();
- if (tmp_type == 0) {
- SetCustomEQGain();
- } else if (tmp_type == 1) {
- mAudioAlsa.SetDacEQMode(tmp_val);
- }
-
- return 0;
-}
-
-int CTvAudio::GetAudioWallEffect()
-{
- return mCustomAudioWallEffect;
-}
-
-int CTvAudio::GetCurAudioWallEffect()
-{
- return mCurAudioWallEffect;
-}
-
-int CTvAudio::SaveCurAudioWallEffect(int tmp_val)
-{
- int8_t tmp_ch = 0;
- if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
- tmp_val = CC_SWITCH_OFF;
- }
-
- mCurAudioWallEffect = tmp_val;
- tmp_ch = tmp_val;
- SSMSaveAudioWallEffectSwitch(tmp_ch);
-
- return mCurAudioWallEffect;
-}
-
-int CTvAudio::LoadCurAudioWallEffect()
-{
- int8_t tmp_ch = 0;
- SSMReadAudioWallEffectSwitch(&tmp_ch);
- mCurAudioWallEffect = tmp_ch;
- if (mCurAudioWallEffect != CC_SWITCH_ON
- && mCurAudioWallEffect != CC_SWITCH_OFF) {
- SaveCurAudioWallEffect (CC_SWITCH_OFF);
- }
-
- mCustomAudioWallEffect = mCurAudioWallEffect;
-
- return mCurAudioWallEffect;
-}
-
-//Audio EQ Mode
-int CTvAudio::SetAudioEQMode(int tmp_val)
-{
- if (tmp_val < CC_EQ_MODE_START || tmp_val > CC_EQ_MODE_END) {
- tmp_val = CC_EQ_MODE_START;
- }
-
- mCustomAudioEQMode = tmp_val;
-
- return 0;
-}
-
-int CTvAudio::GetAudioEQMode()
-{
- return mCustomAudioEQMode;
-}
-
-int CTvAudio::GetCurAudioEQMode()
-{
- return mCurAudioEQMode;
-}
-
-int CTvAudio::SaveCurAudioEQMode(int tmp_val)
-{
- int8_t tmp_ch = 0;
- if (tmp_val < CC_EQ_MODE_START || tmp_val > CC_EQ_MODE_END) {
- tmp_val = CC_EQ_MODE_START;
- }
-
- mCurAudioEQMode = tmp_val;
- tmp_ch = tmp_val;
- SSMSaveAudioEQModeVal(tmp_ch);
-
- return tmp_val;
-}
-
-int CTvAudio::LoadCurAudioEQMode()
-{
- int8_t tmp_ch = 0;
- SSMReadAudioEQModeVal(&tmp_ch);
- mCurAudioEQMode = tmp_ch;
- if (mCurAudioEQMode < CC_EQ_MODE_START
- || mCurAudioEQMode > CC_EQ_MODE_END) {
- SaveCurAudioEQMode (CC_EQ_MODE_START);
- }
-
- mCustomAudioEQMode = mCurAudioEQMode;
-
- return mCurAudioEQMode;
-}
-
-//Audio EQ Gain
-int CTvAudio::GetAudioEQRange(int range_buf[])
-{
- range_buf[0] = GetEQMinGainVal();
- range_buf[1] = GetEQMaxGainVal();
- return 0;
-}
-
-int CTvAudio::GetAudioEQBandCount()
-{
- return mAudioEffect.GetEQBandCount();
-}
-
-int CTvAudio::SetAudioEQGain(int gain_buf[])
-{
- return AudioSetEQGain(gain_buf);
-}
-
-int CTvAudio::GetAudioEQGain(int gain_buf[])
-{
- return GetCustomEQGain(gain_buf);
-}
-
-int CTvAudio::GetCurAudioEQGain(int gain_buf[])
-{
- RealReadCurAudioEQGain(gain_buf);
- return 0;
-}
-
-int CTvAudio::SaveCurAudioEQGain(int gain_buf[])
-{
- return RealSaveCurAudioEQGain(gain_buf, 1);
-}
-
-int CTvAudio::RealReadCurAudioEQGain(int gain_buf[])
-{
- if (CheckAudioEQGain(mCurEQGainBuf, 0) < 0) {
- RestoreToAudioDefEQGain(mCurEQGainBuf);
- }
-
- AudioArrayCopy(gain_buf, mCurEQGainBuf, GetAudioEQBandCount());
-
- return 0;
-}
-
-int CTvAudio::RealSaveCurAudioEQGain(int gain_buf[], int sound_mode_judge)
-{
- if (CheckAudioEQGain(gain_buf, 0) < 0) {
- RestoreToAudioDefEQGain(gain_buf);
- SetAudioEQGain(gain_buf);
- return -1;
- }
-
- AudioArrayCopy(mCurEQGainBuf, gain_buf, GetAudioEQBandCount());
- AudioArrayCopy(mCurEQGainChBuf, gain_buf, GetAudioEQBandCount());
- SSMSaveAudioEQGain(0, GetAudioEQBandCount(), mCurEQGainChBuf);
-
- if (sound_mode_judge == 1) {
- HandleTrebleBassVolume();
- SaveCurAudioSoundMode (CC_SOUND_MODE_USER);
- mCustomAudioSoundMode = mCurAudioSoundMode;
- }
-
- return 0;
-}
-
-int CTvAudio::LoadCurAudioEQGain()
-{
- int i = 0;
-
- SSMReadAudioEQGain(0, GetAudioEQBandCount(), mCurEQGainChBuf);
- AudioArrayCopy(mCurEQGainBuf, mCurEQGainChBuf, GetAudioEQBandCount());
-
- for (i = 0; i < GetAudioEQBandCount(); i++) {
- if (mCurEQGainBuf[i] & 0x80) {
- mCurEQGainBuf[i] = mCurEQGainBuf[i] - 256;
- }
- }
-
- if (CheckAudioEQGain(mCurEQGainBuf, 0) < 0) {
- RestoreToAudioDefEQGain(mCurEQGainBuf);
- SetAudioEQGain(mCurEQGainBuf);
- return -1;
- }
-
- return 0;
-}
-
-int CTvAudio::SetAudioEQSwitch(int switch_val)
-{
- return mAudioEffect.SetEQSwitch(switch_val);
-}
-
-int CTvAudio::GetEQMinGainVal()
-{
- int min_val = 0, max_val = 0;
-
- if (GetAudioEQGainRangeCFG(&min_val, &max_val) < 0) {
- return mAudioEffect.GetEQMinGain();
- }
-
- return min_val;
-}
-
-int CTvAudio::GetEQMaxGainVal()
-{
- int min_val = 0, max_val = 0;
-
- if (GetAudioEQGainRangeCFG(&min_val, &max_val) < 0) {
- return mAudioEffect.GetEQMaxGain();
- }
-
- return max_val;
-}
-
-int CTvAudio::GetEQUIMinGainVal()
-{
- int min_val = 0, max_val = 0;
-
- if (GetAudioEQUIGainRangeCFG(&min_val, &max_val) < 0) {
- return CC_EQ_DEF_UI_MIN_GAIN;
- }
-
- return min_val;
-}
-
-int CTvAudio::GetEQUIMaxGainVal()
-{
- int min_val = 0, max_val = 0;
-
- if (GetAudioEQUIGainRangeCFG(&min_val, &max_val) < 0) {
- return CC_EQ_DEF_UI_MAX_GAIN;
- }
-
- return max_val;
-}
-
-int CTvAudio::GetBassUIMinGainVal()
-{
- return 0;
-}
-
-int CTvAudio::GetBassUIMaxGainVal()
-{
- return 100;
-}
-
-int CTvAudio::GetTrebleUIMinGainVal()
-{
- return 0;
-}
-
-int CTvAudio::GetTrebleUIMaxGainVal()
-{
- return 100;
-}
-
-int CTvAudio::MappingLine(int map_val, int src_min, int src_max, int dst_min,
- int dst_max)
-{
- if (dst_min < 0) {
- return (map_val - (src_max + src_min) / 2) * (dst_max - dst_min)
- / (src_max - src_min);
- } else {
- return (map_val - src_min) * (dst_max - dst_min) / (src_max - src_min);
- }
-}
-
-int CTvAudio::MappingTrebleBassAndEqualizer(int tmp_vol, int direct, int tb_min,
- int tb_max)
-{
- int tmp_ret = 0;
-
- if (direct == 0) {
- tmp_ret = MappingLine(tmp_vol, tb_min, tb_max, GetEQUIMinGainVal(),
- GetEQUIMaxGainVal());
- } else {
- tmp_ret = MappingLine(tmp_vol, GetEQUIMinGainVal(), GetEQUIMaxGainVal(),
- tb_min, tb_max);
- }
-
- LOGD("%s, tmp_vol = %d, direct = %d, tmp_ret = %d\n", __FUNCTION__, tmp_vol,
- direct, tmp_ret);
-
- return tmp_ret;
-}
-
-int CTvAudio::MappingEQGain(int src_gain_buf[], int dst_gain_buf[], int direct)
-{
- int i = 0;
- int nMinUIVal = 0, nMaxUIVal = 0, nMinVal = 0, nMaxVal = 0;
-
- nMinUIVal = GetEQUIMinGainVal();
- nMaxUIVal = GetEQUIMaxGainVal();
- nMinVal = GetEQMinGainVal();
- nMaxVal = GetEQMaxGainVal();
-
- if (CheckAudioEQGain(src_gain_buf, direct) < 0) {
- return -1;
- }
-
- if (nMinUIVal >= nMinVal && nMaxUIVal <= nMaxVal) {
- for (i = 0; i < GetAudioEQBandCount(); i++) {
- dst_gain_buf[i] = src_gain_buf[i];
- }
- } else {
- for (i = 0; i < GetAudioEQBandCount(); i++) {
- if (direct == 0) {
- dst_gain_buf[i] = MappingLine(src_gain_buf[i], nMinUIVal,
- nMaxUIVal, nMinVal, nMaxVal);
- } else {
- dst_gain_buf[i] = MappingLine(src_gain_buf[i], nMinVal, nMaxVal,
- nMinUIVal, nMaxUIVal);
- }
- }
- }
-
- return 0;
-}
-
-int CTvAudio::RestoreToAudioDefEQGain(int gain_buf[])
-{
- int i = 0;
- int *tmpEQPresetBufPtr = GetAudioEQPresetBufferPtr();
-
- for (i = 0; i < GetAudioEQBandCount(); i++) {
- gain_buf[i] = (GetEQUIMaxGainVal() + GetEQUIMinGainVal()) / 2;
- }
-
- AudioArrayCopy(mCurEQGainBuf, gain_buf, GetAudioEQBandCount());
- AudioArrayCopy(mCurEQGainChBuf, gain_buf, GetAudioEQBandCount());
- SSMSaveAudioEQGain(0, GetAudioEQBandCount(), mCurEQGainChBuf);
-
- HandleTrebleBassVolume();
- SaveCurAudioSoundMode (CC_SOUND_MODE_STD);
- mCustomAudioSoundMode = mCurAudioSoundMode;
-
- return 0;
-}
-
-int CTvAudio::CheckAudioEQGain(int gain_buf[], int direct)
-{
- int i;
-
- if (direct == 0) {
- for (i = 0; i < GetAudioEQBandCount(); i++) {
- if (gain_buf[i] < GetEQUIMinGainVal()
- || gain_buf[i] > GetEQUIMaxGainVal()) {
- return -1;
- }
- }
- } else {
- for (i = 0; i < GetAudioEQBandCount(); i++) {
- if (gain_buf[i] < GetEQMinGainVal()
- || gain_buf[i] > GetEQMaxGainVal()) {
- return -1;
- }
- }
- }
-
- return 0;
-}
-
-int CTvAudio::GetCustomEQGain(int gain_buf[])
-{
- AudioArrayCopy(gain_buf, mCustomEQGainBuf, GetAudioEQBandCount());
- return 0;
-}
-
-int CTvAudio::SetCustomEQGain()
-{
- int tmpEQGainBuf[128] = { 0 };
-
- if (MappingEQGain(mCustomEQGainBuf, tmpEQGainBuf, 0) < 0) {
- return -1;
- }
-
- return RealSetEQGain(tmpEQGainBuf);
-}
-
-int CTvAudio::AudioSetEQGain(int gain_buf[])
-{
- int tmpEQGainBuf[128] = { 0 };
-
- AudioArrayCopy(mCustomEQGainBuf, gain_buf, GetAudioEQBandCount());
-
- if (MappingEQGain(mCustomEQGainBuf, tmpEQGainBuf, 0) < 0) {
- return -1;
- }
-
- return RealSetEQGain(tmpEQGainBuf);
-}
-
-int CTvAudio::handleEQGainBeforeSet(int src_buf[], int dst_buf[])
-{
- int i = 0, nMinGain, nMaxGain, handle_wall_effect_flag;
-
- nMinGain = GetEQMinGainVal();
- nMaxGain = GetEQMaxGainVal();
-
- handle_wall_effect_flag = 0;
-
- if (GetAudioWallEffect() == CC_SWITCH_ON) {
- if (GetAudioWallEffectTypeCfg() == 0) {
- handle_wall_effect_flag = 1;
- }
- }
-
- if (handle_wall_effect_flag) {
- for (i = 0; i < GetAudioEQBandCount(); i++) {
- dst_buf[i] = mWallEffectValueBuf[i] + src_buf[i];
- }
- } else {
- for (i = 0; i < GetAudioEQBandCount(); i++) {
- dst_buf[i] = src_buf[i];
- }
- }
-
- for (i = 0; i < GetAudioEQBandCount(); i++) {
- if (dst_buf[i] < nMinGain) {
- dst_buf[i] = nMinGain;
- }
-
- if (dst_buf[i] > nMaxGain) {
- dst_buf[i] = nMaxGain;
- }
-
- LOGD("%s, dst_buf[%d] = %d\n", __FUNCTION__, i, dst_buf[i]);
- }
-
- return 0;
-}
-
-int CTvAudio::RealSetEQGain(int gain_buf[])
-{
- int tmpEQGainBuf[128] = { 0 };
-
- if (CheckAudioEQGain(gain_buf, 1) < 0) {
- return -1;
- }
-
- handleEQGainBeforeSet(gain_buf, tmpEQGainBuf);
-
- mAudioEffect.SetEQValue(tmpEQGainBuf);
-
- return 0;
-}
-
-int CTvAudio::SetSpecialModeEQGain(int tmp_val)
-{
- int i = 0;
- int *tmpEQPresetBufPtr = GetAudioEQPresetBufferPtr();
- int tmpEQGainBuf[128] = { 0 };
-
- if (tmp_val < CC_SOUND_MODE_START || tmp_val > CC_SOUND_MODE_END) {
- tmp_val = CC_SOUND_MODE_STD;
- }
-
- if (tmp_val == CC_SOUND_MODE_USER) {
- RealReadCurAudioEQGain(tmpEQGainBuf);
- } else {
- AudioArrayCopy(tmpEQGainBuf,
- tmpEQPresetBufPtr + tmp_val * GetAudioEQBandCount(),
- GetAudioEQBandCount());
-
- for (i = 0; i < GetAudioEQBandCount(); i++) {
- if (GetEQUIMinGainVal() != CC_EQ_DEF_UI_MIN_GAIN
- || GetEQUIMaxGainVal() != CC_EQ_DEF_UI_MAX_GAIN) {
- tmpEQGainBuf[i] = MappingLine(tmpEQGainBuf[i],
- CC_EQ_DEF_UI_MIN_GAIN, CC_EQ_DEF_UI_MAX_GAIN,
- GetEQUIMinGainVal(), GetEQUIMaxGainVal());
- }
- }
- }
-
- AudioSetEQGain(tmpEQGainBuf);
-
- return tmp_val;
-}
-
-int CTvAudio::SetSpecialIndexEQGain(int buf_index, int w_val)
-{
- int tmpEQGainBuf[128] = { 0 };
-
- if (buf_index >= 0 && buf_index < GetAudioEQBandCount()) {
- RealReadCurAudioEQGain(tmpEQGainBuf);
- tmpEQGainBuf[buf_index] = w_val;
-
- return AudioSetEQGain(tmpEQGainBuf);
- }
-
- return -1;
-}
-
-int CTvAudio::SaveSpecialIndexEQGain(int buf_index, int w_val)
-{
- int tmpEQGainBuf[128] = { 0 };
-
- if (buf_index >= 0 && buf_index < GetAudioEQBandCount()) {
- RealReadCurAudioEQGain(tmpEQGainBuf);
- tmpEQGainBuf[buf_index] = w_val;
-
- return RealSaveCurAudioEQGain(tmpEQGainBuf, 0);
- }
-
- return 0;
-}
-
-// amAudio
-int CTvAudio::OpenAmAudio(unsigned int sr, int output_device)
-{
- if (GetamAudioDisableFlagCFG() == 1) {
- return 0;
- }
-
- return amAudioOpen(sr, CC_IN_USE_I2S_DEVICE, output_device);
-}
-
-int CTvAudio::CloseAmAudio(void)
-{
- if (GetamAudioDisableFlagCFG() == 1) {
- return 0;
- }
-
- return amAudioClose();
-}
-
-int CTvAudio::SetAmAudioInputSr(unsigned int sr, int output_device)
-{
- return amAudioSetInputSr(sr, CC_IN_USE_I2S_DEVICE, output_device);
-}
-
-int CTvAudio::SetAmAudioOutputMode(int mode)
-{
- if (mode != CC_AMAUDIO_OUT_MODE_MIX && mode != CC_AMAUDIO_OUT_MODE_DIRECT) {
- LOGE("%s, mode error, it should be mix or direct!\n", __FUNCTION__);
- return -1;
- }
-
- return amAudioSetOutputMode(mode);
-}
-
-int CTvAudio::SetAmAudioMusicGain(int gain)
-{
- return amAudioSetMusicGain(gain);
-}
-
-int CTvAudio::SetAmAudioLeftGain(int gain)
-{
- return amAudioSetLeftGain(gain);
-}
-
-int CTvAudio::SetAmAudioRightGain(int gain)
-{
- return amAudioSetRightGain(gain);
-}
-
-//dump data
-int CTvAudio::SetAudioDumpDataFlag(int tmp_flag)
-{
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return amAndroidSetDumpDataFlag(tmp_flag);
-#endif
-
-#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
- return amAudioSetDumpDataFlag(tmp_flag);
-#endif
-}
-
-int GetAudioDumpDataFlag()
-{
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return amAndroidGetDumpDataFlag();
-#endif
-
-#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
- return amAudioGetDumpDataFlag();
-#endif
-}
-
-//LUT buffer
-static int RealCalVolDigitLUTBuf(int start_ind, int end_ind, int start_val,
- int end_val, int lut_buf[])
-{
- int i = 0;
- float tmp_step = 0;
-
- if (end_ind < start_ind) {
- return 0;
- }
-
- tmp_step = (float) (end_val - start_val) / (float) (end_ind - start_ind);
-
- for (i = start_ind; i < end_ind; i++) {
- lut_buf[i] = start_val + (int) (tmp_step * (i - start_ind));
- }
-
- lut_buf[end_ind] = end_val;
-
- return 1;
-}
-
-static int CalVolumeDigitLUTBuf(int lut_buf_type, int lut_sel_flag, int lut_buf[])
-{
- int i = 0, point_cnt = 0;
- int *tmpNoLinePointsDataBuffer = NULL;
- int *tmpNoLinePointsIndexBuffer = NULL;
-
- if (lut_sel_flag == CC_LUT_SEL_TV) {
- tmpNoLinePointsIndexBuffer = GetAudioAmplifierNoLinePointsIndexBuffer(
- lut_buf_type, CC_GET_LUT_TV);
- tmpNoLinePointsDataBuffer = GetAudioAmplifierNoLinePointsDataBuffer(
- lut_buf_type, CC_GET_LUT_TV);
- } else if (lut_sel_flag == CC_LUT_SEL_AV) {
- tmpNoLinePointsIndexBuffer = GetAudioAmplifierNoLinePointsIndexBuffer(
- lut_buf_type, CC_GET_LUT_AV);
- tmpNoLinePointsDataBuffer = GetAudioAmplifierNoLinePointsDataBuffer(
- lut_buf_type, CC_GET_LUT_AV);
- } else if (lut_sel_flag == CC_LUT_SEL_COMP) {
- tmpNoLinePointsIndexBuffer = GetAudioAmplifierNoLinePointsIndexBuffer(
- lut_buf_type, CC_GET_LUT_COMP);
- tmpNoLinePointsDataBuffer = GetAudioAmplifierNoLinePointsDataBuffer(
- lut_buf_type, CC_GET_LUT_COMP);
- } else if (lut_sel_flag == CC_LUT_SEL_HDMI) {
- tmpNoLinePointsIndexBuffer = GetAudioAmplifierNoLinePointsIndexBuffer(
- lut_buf_type, CC_GET_LUT_HDMI);
- tmpNoLinePointsDataBuffer = GetAudioAmplifierNoLinePointsDataBuffer(
- lut_buf_type, CC_GET_LUT_HDMI);
- } else if (lut_sel_flag == CC_LUT_SEL_VGA) {
- tmpNoLinePointsIndexBuffer = GetAudioAmplifierNoLinePointsIndexBuffer(
- lut_buf_type, CC_GET_LUT_VGA);
- tmpNoLinePointsDataBuffer = GetAudioAmplifierNoLinePointsDataBuffer(
- lut_buf_type, CC_GET_LUT_VGA);
- } else if (lut_sel_flag == CC_LUT_SEL_MPEG) {
- tmpNoLinePointsIndexBuffer = GetAudioAmplifierNoLinePointsIndexBuffer(
- lut_buf_type, CC_GET_LUT_MPEG);
- tmpNoLinePointsDataBuffer = GetAudioAmplifierNoLinePointsDataBuffer(
- lut_buf_type, CC_GET_LUT_MPEG);
- }
-
- lut_buf[0] = CC_MIN_DAC_VOLUME;
- point_cnt = GetAudioAmplifierMasterNoLinePointsCount();
-
- if (tmpNoLinePointsIndexBuffer != NULL
- && tmpNoLinePointsDataBuffer != NULL) {
- for (i = 0; i < (point_cnt - 1); i++) {
- RealCalVolDigitLUTBuf(tmpNoLinePointsIndexBuffer[i],
- tmpNoLinePointsIndexBuffer[i + 1],
- tmpNoLinePointsDataBuffer[i],
- tmpNoLinePointsDataBuffer[i + 1], lut_buf);
- }
- }
-
- return 1;
-}
-
-void CTvAudio::RealHandleVolumeDigitLUTBuf(int lut_buf_type, int lut_sel_flag,
- int vol_buf[], int add_srs_gain_flag, int add_eq_gain_flag)
-{
- int i;
- int TempVolumeDigitLutBuf[CC_LUT_BUF_SIZE] = { 0 };
-
- if (vol_buf == NULL) {
- CalVolumeDigitLUTBuf(lut_buf_type, lut_sel_flag, TempVolumeDigitLutBuf);
- } else {
- for (i = 0; i < CC_LUT_BUF_SIZE; i++) {
- TempVolumeDigitLutBuf[i] = vol_buf[i];
- }
- }
-
- if (lut_buf_type == CC_LUT_BUF_MASTER) {
- mAudioAlsa.SetMainVolDigitLutBuf(TempVolumeDigitLutBuf);
- } else if (lut_buf_type == CC_LUT_BUF_SUPPERBASS) {
- mAudioAlsa.SetSupperBassVolDigitLutBuf(TempVolumeDigitLutBuf);
- }
-}
-
-void CTvAudio::AudioSetVolumeDigitLUTBuf(int lut_sel_flag, int add_srs_gain_flag,
- int add_eq_gain_flag, int audio_std)
-{
- int cfg_get_index = CC_LUT_SEL_MPEG;
- int *tmpDefDigitLutBuf = NULL;
-
- if (lut_sel_flag == CC_LUT_SEL_TV) {
- cfg_get_index = CC_GET_LUT_TV;
- } else if (lut_sel_flag == CC_LUT_SEL_AV) {
- cfg_get_index = CC_GET_LUT_AV;
- } else if (lut_sel_flag == CC_LUT_SEL_COMP) {
- cfg_get_index = CC_GET_LUT_COMP;
- } else if (lut_sel_flag == CC_LUT_SEL_HDMI) {
- cfg_get_index = CC_GET_LUT_HDMI;
- } else if (lut_sel_flag == CC_LUT_SEL_VGA) {
- cfg_get_index = CC_GET_LUT_VGA;
- } else if (lut_sel_flag == CC_LUT_SEL_MPEG) {
- cfg_get_index = CC_GET_LUT_MPEG;
- }
-
- if (GetAudioAmplifierMasterNoLineSwitchFlag() == 0) {
- tmpDefDigitLutBuf = GetAudioAmplifierMasterVolumeLUTBufferPtr(
- cfg_get_index, audio_std);
- if (tmpDefDigitLutBuf != NULL) {
- RealHandleVolumeDigitLUTBuf(CC_LUT_BUF_MASTER, lut_sel_flag,
- tmpDefDigitLutBuf, add_srs_gain_flag, add_eq_gain_flag);
- }
- } else {
- RealHandleVolumeDigitLUTBuf(CC_LUT_BUF_MASTER, lut_sel_flag, NULL,
- add_srs_gain_flag, add_eq_gain_flag);
- }
-
- if (GetAudioSupperBassModuleDisableCFG() == 0) {
- if (GetAudioAmplifierSupperBassNoLineSwitchFlag() == 0) {
- tmpDefDigitLutBuf = GetAudioAmplifierSupperBassVolumeLUTBufferPtr(
- cfg_get_index, audio_std);
- if (tmpDefDigitLutBuf != NULL) {
- RealHandleVolumeDigitLUTBuf(CC_LUT_BUF_SUPPERBASS, lut_sel_flag,
- tmpDefDigitLutBuf, add_srs_gain_flag, add_eq_gain_flag);
- }
- } else {
- RealHandleVolumeDigitLUTBuf(CC_LUT_BUF_SUPPERBASS, lut_sel_flag,
- NULL, add_srs_gain_flag, add_eq_gain_flag);
- }
- }
-}
-
-int CTvAudio::openTvAudio(int sr)
-{
-
- char prop1[256];
- char prop2[256];
- property_get("audio.headset_plug.enable", prop1, "null");
- property_get("audio.output.double_output", prop2, "null");
- if (strcmp(prop1, "1") == 0) {
- if (strcmp(prop2, "1") == 0) {
- amAudioSetTvDoubleOutput(1, sr, CC_IN_USE_I2S_DEVICE, CC_OUT_USE_AMAUDIO);
- audio_device_switch = 1;
- } else {
- amAudioSetTvDoubleOutput(0, sr, CC_IN_USE_I2S_DEVICE, CC_OUT_USE_ANDROID);
- audio_device_switch = 0;
- }
- } else {
- amAudioSetTvDoubleOutput(1, sr, CC_IN_USE_I2S_DEVICE, CC_OUT_USE_AMAUDIO);
- audio_device_switch = 1;
- }
- return 0;
-}
-
-// audio data init & uninit
-int CTvAudio::AudioDataInitForDtv()
-{
- RealSetSRS();
- SetCustomEQGain();
-
- return 0;
-}
-
-int CTvAudio::AudioDataInit(int sr, bool enableNoiseGate)
-{
- const char *value;
- sr = HanldeAudioInputSr(sr);
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- if (GetDisableResetSystemFrameSize() == 0) {
- if (GetDisableReset_System_framesizeCFG() != 0x55)
- reset_system_framesize(48000, sr);
- }
-
- amAndroidInit(0, CC_FLAG_CREATE_RECORD | CC_FLAG_CREATE_TRACK, 48000, sr, enableNoiseGate);
-#endif
-
-#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
- value = config_get_str ( "TV", "tvin.2d4G.headset.en", "null" );
- if ( strcmp ( value, "enable" ) == 0 )
- openTvAudio(sr);
- else
- OpenAmAudio(sr, CC_OUT_USE_AMAUDIO);
-#endif
-
- RealSetSRS();
- SetCustomEQGain();
-
- return 0;
-}
-
-int CTvAudio::AudioDataUnInit()
-{
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return amAndroidUninit(0);
-#endif
-
-#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
- return CloseAmAudio();
-#endif
-}
-
-int CTvAudio::AudioChangeSampleRate(int sr)
-{
- sr = HanldeAudioInputSr(sr);
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- if (amAndroidSetTrackerSr(sr) != 0) {
- return -1;
- }
-#endif
-
-#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
- if (SetAmAudioInputSr(sr, CC_OUT_USE_AMAUDIO) != 0) {
- return -1;
- }
-#endif
-
- RealSetSRS();
- SetCustomEQGain();
-
- return 0;
-}
-
-int CTvAudio::AudioNewAudioEffects(void)
-{
- return mAudioEffect.amAndroidNewAudioEffects();
-}
-
-void CTvAudio::AudioFreeAudioEffects(void)
-{
- return mAudioEffect.amAndroidFreeAudioEffects();
-}
-
-int CTvAudio::AudioSetAudioInSource(int audio_src_in_type)
-{
- return mAudioAlsa.SetAudioInSource(audio_src_in_type);
-}
-
-int CTvAudio::AudioSetAudioSourceType(int source_type)
-{
- return mAudioAlsa.SetDacAudioSourceType(source_type);
-}
-
-int CTvAudio::AudioLineInSelectChannel(int audio_channel)
-{
- LOGD ("%s, audio_channel = %d", __FUNCTION__, audio_channel);
- mAudioAlsa.SetInternalDacLineInSelectChannel(audio_channel);
- return 0;
-}
-int CTvAudio::SetKalaokIO(int level)
-{
- LOGD ("%s, SetKalaokIO = %d", __FUNCTION__, level);
- {
- const char *config_value;
- config_value = config_get_str("TV", "audio.switch.karaok.av.enable", "null");
-
- if (strtoul(config_value, NULL, 10) == 1) {
- mAudioAlsa.SetAudioSwitchIO(level);
- }
- }
- return 0;
-}
-
-int CTvAudio::AudioSetLineInCaptureVolume(int l_vol, int r_vol)
-{
- mAudioAlsa.SetInternalDacLineInCaptureVolume(l_vol, r_vol);
- return 0;
-}
-
-// Audio Ctl Init
-void CTvAudio::AudioCtlInitializeLoad()
-{
- int tmp_val = 0;
- int init_mute_type = 0;
-
- LOGD("%s, entering...\n", __FUNCTION__);
-
- createMonitorUsbHostBusThread();
-
- init_mute_type = GetAudioAVOutInitMuteStatusCFG();
-
- UnInitSetTvAudioCard();
-
- if (init_mute_type == 1) {
- SetAudioAVOutMute (CC_AUDIO_MUTE);
- } else {
- SetAudioAVOutMute (CC_AUDIO_UNMUTE);
- }
-
- SetAudioSPDIFMute (CC_AUDIO_UNMUTE);
-
- tmp_val = GetAudioDumpDataEnableFlagCfg();
- SetAudioDumpDataFlag(tmp_val);
-
- mAudioAlsa.SetMixerBypassSwitch (CC_SWITCH_OFF);
- mAudioAlsa.SetMixerDacSwitch (CC_SWITCH_ON);
-
- LoadAudioCtl();
-
- AudioSetVolumeDigitLUTBuf(CC_LUT_SEL_MPEG, 1, 1, -1);
-
- AudioCtlInitializeSet();
-}
-
-void CTvAudio::LoadAudioCtl()
-{
- // Get Current Audio Volume
- LoadCurAudioMasterVolume();
-
- // Get Current Audio Balance
- LoadCurAudioBalance();
-
- // Get Current Supper Bass Switch
- LoadCurAudioSupperBassSwitch();
-
- // Get Current Supper Bass Volume
- LoadCurAudioSupperBassVolume();
-
- // Get Current SRSSurround
- LoadCurAudioSrsSurround();
-
- // Get Current SRS DialogClarity
- LoadCurAudioSrsDialogClarity();
-
- // Get Current SRS TruBass
- LoadCurAudioSrsTruBass();
-
- // Get Current Audio Sound Mode
- LoadCurAudioSoundMode();
-
- // Get Current Audio Bass and Treble
- LoadCurAudioBassVolume();
- LoadCurAudioTrebleVolume();
-
- // Get Current Wall Effect
- LoadCurAudioWallEffect();
-
- // Get Current spdif switch
- LoadCurAudioSPDIFSwitch();
-
- // Get Current spdif mode
- LoadCurAudioSPDIFMode();
-
- // Get Current EQ mode
- LoadCurAudioEQMode();
-
- // Get Current EQ Gain
- LoadCurAudioEQGain();
-}
-
-void CTvAudio::InitSetAudioCtl()
-{
- // Set Current Audio balance value
- SetAudioBalance(GetAudioBalance());
-
- // Set Current Audio Volume
- SetAudioMasterVolume(GetAudioMasterVolume());
-
- // Set Current Supper Bass Volume
- SetAudioSupperBassVolume(GetAudioSupperBassVolume());
-
- // Set Current Audio Sound Mode
- SetAudioSoundMode(GetAudioSoundMode());
-
- // Set Current Audio SPDIF Switch
- SetAudioSPDIFSwitch(GetCurAudioSPDIFSwitch());
-
- // Set Current Audio SPDIF mode
- SetAudioSPDIFMode(GetCurAudioSPDIFMode());
-}
-
-static int gAudioFirstInitSetFlag = 0;
-static pthread_mutex_t first_init_set_flag_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-int CTvAudio::GetAudioFirstInitSetFlag()
-{
- int tmp_val = 0;
-
- pthread_mutex_lock(&first_init_set_flag_mutex);
- tmp_val = gAudioFirstInitSetFlag;
- pthread_mutex_unlock(&first_init_set_flag_mutex);
-
- return tmp_val;
-}
-
-void *CTvAudio::AudioCtlInitSetMain(void *data)
-{
- char prop_value[PROPERTY_VALUE_MAX];
-
- LOGD("%s, entering...\n", __FUNCTION__);
- pthread_mutex_lock(&first_init_set_flag_mutex);
-
- if (gAudioFirstInitSetFlag == 0) {
- AudioNewAudioEffects();
- RealSetSRS();
- AudioSetVolumeDigitLUTBuf(CC_LUT_SEL_MPEG, 1, 1, -1);
- InitSetAudioCtl();
- gAudioFirstInitSetFlag = 1;
- }
-
- pthread_mutex_unlock(&first_init_set_flag_mutex);
-
- LOGD("%s, exiting...\n", __FUNCTION__);
-
- return NULL;
-}
-
-void CTvAudio::AudioCtlInitializeSet()
-{
- AudioCtlInitSetMain (NULL);
- return;
-}
-
-void CTvAudio::AudioCtlInit()
-{
- InitSetTvAudioCard();
-}
-
-void CTvAudio::AudioCtlUninit()
-{
- int l_vol = 0, r_vol = 0;
- int audio_channel = -1;
- int oldMuteStatus;
-
- oldMuteStatus = GetAudioMuteForTv();
- SetAudioMuteForTv (CC_AUDIO_MUTE);
-
- AudioSetAudioInSource (CC_AUDIO_IN_SOURCE_LINEIN);
- AudioSetAudioSourceType (AUDIO_MPEG_SOURCE);
-
- AudioDataUnInit();
-
- SetAudioVolumeCompensationVal(0);
-
- AudioSetVolumeDigitLUTBuf(CC_LUT_SEL_MPEG, 1, 1, -1);
- SetAudioMasterVolume(GetAudioMasterVolume());
-
- SetAudioMuteForTv(oldMuteStatus);
-
- UnInitSetTvAudioCard();
-}
-
-int CTvAudio::AudioSetRecordDataZero(bool flag)
-{
- return 0;
-}
-
-int CTvAudio::AudioHandleHeadsetPlugIn()
-{
- return 0;
-}
-
-int CTvAudio::AudioHandleHeadsetPullOut()
-{
- return 0;
-}
-
-int CTvAudio::amAudioSetDoubleOutputSwitch(int en_val)
-{
- if (en_val == 1) {
- property_set("audio.output.enable", "1");
- property_set("audio.output.double_output", "1");
- }
- if (en_val == 0) {
- property_set("audio.output.enable", "0");
- property_set("audio.output.double_output", "0");
- }
- return 0;
-}
-
-int CTvAudio::setAudioPcmPlaybackVolume(int val)
-{
- int pcm_volume = 0;
- pcm_volume = val / 2;
- if (pcm_volume > 24) pcm_volume = 24;
- //return SetAudioPcmPlaybackVolume(pcm_volume);
- return 0;
-}
-
-int CTvAudio::UsbAudioOuputModuleSwitch(int sw)
-{
- if (sw == 1)
- property_set("persist.tv.audio_output_enable", "1");
- if (sw == 0)
- property_set("persist.tv.audio_output_enable", "0");
- return 0;
-}
-
-int CTvAudio::GetAmAudioSetDoubleOutputSwitch()
-{
- char prop2[256];
- property_get("audio.output.double_output", prop2, "null");
- if (strcmp(prop2, "0") == 0 || strcmp(prop2, "null") == 0) {
- return 0;
- } else if (strcmp(prop2, "1") == 0) {
- return 1;
- }
- return 0;
-}
-
-int CTvAudio::GetCurUsbAudioOuputModuleSwitch()
-{
- char prop1[256];
- property_get("audio.output.enable", prop1, "null");
- if (strcmp(prop1, "0") == 0 || strcmp(prop1, "null") == 0) {
- return 0;
- } else if (strcmp(prop1, "1") == 0) {
- return 1;
- }
- return 0;
-}
-
-int CTvAudio::amAudioSetTvDoubleOutput(int en_val, unsigned int sr, int input_device,
- int output_device)
-{
- return amAudioSetDoubleOutput(en_val, sr, input_device, output_device);
-}
-int CTvAudio::HanldeAudioInputSr(unsigned int sr)
-{
- int tmp_cfg = 0;
-
- tmp_cfg = GetAudioResampleTypeCFG();
- if (tmp_cfg & CC_AUD_RESAMPLE_TYPE_HW) {
- mAudioAlsa.SetHardwareResample(sr);
- } else {
- mAudioAlsa.SetHardwareResample(-1);
- }
-
- if (!(tmp_cfg & CC_AUD_RESAMPLE_TYPE_SW)) {
- sr = 48000;
- }
-
- return sr;
-}
-
-void CTvAudio::AudioSetNoiseGateThreshold(int thresh)
-{
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- amAndroidSetNoiseGateThreshold(thresh);
-#endif
-
-#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
- return;
-#endif
-}
-
-int CTvAudio::AudioSSMRestoreDefaultSetting()
-{
- int i = 0, tmp_val = 0;
- int nMinUIVol = 0, nMaxUIVol = 0;
- int *tmp_ptr = NULL;
- int tmpEQGainBuf[128] = { 0 };
- unsigned char tmp_buf[CC_NO_LINE_POINTS_MAX_CNT] = { 0 };
-
- // Save noline points
- tmp_val = GetAudioAmplifierMasterNoLinePointsCount();
-
- for (i = 0; i < CC_LUT_SEL_COUNT; i++) {
- tmp_ptr = GetAudioAmplifierMasterNoLinePointsDefDataBuffer(i);
- AudioArrayCopy(tmp_buf, tmp_ptr, CC_NO_LINE_POINTS_MAX_CNT);
- SSMSaveAudioNoLinePoints(i * tmp_val, tmp_val, tmp_buf);
- }
-
- // Save Current Audio Volume
- SaveCurAudioMasterVolume (CC_DEF_SOUND_VOL);
-
- // Save Current Audio Balance
- SaveCurAudioBalance (CC_DEF_SOUND_BALANCE_VAL);
-
- // Save Current Supper Bass Switch
- SaveCurAudioSupperBassSwitch (CC_SWITCH_OFF);
-
- // Save Current Supper Bass Volume
- SaveCurAudioSupperBassVolume (CC_DEF_SUPPERBASS_VOL);
-
- // Save Current SRSSurround
- SaveCurAudioSrsSurround(CC_SWITCH_OFF);
-
- // Save Current SRS DialogClarity
- SaveCurAudioSrsDialogClarity(CC_SWITCH_OFF);
-
- // Save Current SRS TruBass
- SaveCurAudioSrsTruBass(CC_SWITCH_OFF);
-
- // Save Current Audio Sound Mode
- SaveCurAudioSoundMode (CC_SOUND_MODE_STD);
-
- // Save Current Wall Effect
- SaveCurAudioWallEffect(CC_SWITCH_OFF);
-
- // Save Current spdif switch
- SaveCurAudioSPDIFSwitch (CC_SWITCH_ON);
-
- // Save Current spdif mode
- SaveCurAudioSPDIFMode (CC_SPDIF_MODE_PCM);
-
- // Save Current EQ mode
- SaveCurAudioEQMode (CC_EQ_MODE_NOMAL);
-
- // Save Current EQ Gain
- RestoreToAudioDefEQGain(tmpEQGainBuf);
-
- // Save Current Audio Bass and Treble
- nMinUIVol = GetBassUIMinGainVal();
- nMaxUIVol = GetBassUIMaxGainVal();
- RealSaveCurAudioBassVolume((nMinUIVol + nMaxUIVol) / 2, 0);
-
- nMinUIVol = GetTrebleUIMinGainVal();
- nMaxUIVol = GetTrebleUIMaxGainVal();
- RealSaveCurAudioTrebleVolume((nMinUIVol + nMaxUIVol) / 2, 0);
-
- return 0;
-}
-
-
-static const char *gDefCapturePropName = "snd.card.default.card.capture";
-
-int CTvAudio::InitSetTvAudioCard()
-{
- int i = 0, totle_num = 0, capture_ind = 0;
- char tmp_buf[32] = { 0 };
- char tv_card_name[64] = { 0 };
- char prop_value[PROPERTY_VALUE_MAX];
-
-#ifdef BOARD_ALSA_AUDIO_TINY
-#else // legacy alsa lib
- snd_card_refresh_info();
-#endif
-
- if (GetTvAudioCardNeedSet()) {
- memset(prop_value, '\0', PROPERTY_VALUE_MAX);
- property_get("snd.card.totle.num", prop_value, "0");
-
- totle_num = strtoul(prop_value, NULL, 10);
- LOGD("%s, totle number = %d\n", __FUNCTION__, totle_num);
- totle_num = 8;
-
- GetTvAudioCardName(tv_card_name);
-
- for (i = 0; i < totle_num; i++) {
- sprintf(tmp_buf, "snd.card.%d.name", i);
- memset(prop_value, '\0', PROPERTY_VALUE_MAX);
- property_get(tmp_buf, prop_value, "null");
-
- LOGD("%s, key string \"%s\", value string \"%s\".\n", __FUNCTION__,
- tmp_buf, prop_value);
-
- if (strcmp(prop_value, tv_card_name) == 0) {
- break;
- }
- }
-
- capture_ind = i;
-
- if (capture_ind == totle_num) {
- capture_ind = -1;
- LOGE("%s, can't find tv card \"%s\".\n", __FUNCTION__,
- tv_card_name);
- }
- } else {
- capture_ind = -1;
- }
-
- sprintf(tmp_buf, "%d", capture_ind);
- property_set(gDefCapturePropName, tmp_buf);
- LOGD("%s, set \"%s\" as \"%s\".\n", __FUNCTION__, gDefCapturePropName,
- tmp_buf);
-
- return 0;
-}
-
-int CTvAudio::UnInitSetTvAudioCard()
-{
- char tmp_buf[32] = { 0 };
-
-#ifdef BOARD_ALSA_AUDIO_TINY
-#else // legacy alsa lib
- snd_card_refresh_info();
-#endif // BOARD_ALSA_AUDIO_TINY
- sprintf(tmp_buf, "%d", -1);
- property_set(gDefCapturePropName, tmp_buf);
- LOGD("%s, set \"%s\" as \"%s\".\n", __FUNCTION__, gDefCapturePropName,
- tmp_buf);
-
- return 0;
-}
-
-#define CS_SPDIF_MODE_DEV_PATH "/sys/class/audiodsp/digital_raw"
-
-int CTvAudio::SetSPDIFMode(int mode_val)
-{
- FILE *spdif_mode_fp = NULL;
-
- spdif_mode_fp = fopen(CS_SPDIF_MODE_DEV_PATH, "w");
- if (spdif_mode_fp == NULL) {
- LOGE("%s, Open file %s error(%s)!\n", __FUNCTION__, CS_SPDIF_MODE_DEV_PATH, strerror(errno));
- return -1;
- }
-
- if (mode_val == CC_SPDIF_MODE_PCM) {
- fprintf(spdif_mode_fp, "%d", 0);
- } else if (mode_val == CC_SPDIF_MODE_RAW ) {
- fprintf(spdif_mode_fp, "%d", 1);
- }
-
- fclose(spdif_mode_fp);
- spdif_mode_fp = NULL;
-
- return 0;
-}
-//0 is ??? 1 is ????????
-int CTvAudio::SwitchAVOutBypass(int sw)
-{
- if (sw == 0 ) {
- mAudioAlsa.SetMixerBypassSwitch ( CC_SWITCH_OFF );
- mAudioAlsa.SetMixerDacSwitch ( CC_SWITCH_ON );
- } else {
- mAudioAlsa.SetMixerBypassSwitch ( CC_SWITCH_ON );
- mAudioAlsa.SetMixerDacSwitch ( CC_SWITCH_OFF );
- }
- return 0;
-}
-
-int CTvAudio::SetAudioSwitchIO(int value)
-{
- return mAudioAlsa.SetAudioSwitchIO( value);
-}
-int CTvAudio::SetOutput_Swap(int value)
-{
- return mAudioAlsa.SetOutput_Swap( value);
-}
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <fcntl.h>
+
+#include <android/log.h>
+#include <cutils/properties.h>
+
+#include "../tvsetting/CTvSetting.h"
+#include "../tvutils/tvutils.h"
+
+#include "audio_effect.h"
+#include "audio_android.h"
+#include "audio_android_effect.h"
+#include "audio_amaudio.h"
+
+#include "audio_api.h"
+
+#define LOG_TAG "audio_api"
+#include "CTvLog.h"
+
+static int mCustomEQGainBuf[] = { 0, 0, 0, 0, 0, 0 };
+
+static int mCurEQGainBuf[] = { 0, 0, 0, 0, 0, 0 };
+
+static int8_t mCurEQGainChBuf[] = { 0, 0, 0, 0, 0, 0 };
+
+static int mWallEffectValueBuf[] = { 0, 0, 1, 2, 2, 0 };
+
+static const int CC_MUTE_TYPE_KEY_MUTE = (0);
+static const int CC_MUTE_TYPE_SYS_MUTE = (1);
+
+
+//extern int audio_device_switch;
+int audio_device_switch = 1;//showboz
+
+CTvAudio::CTvAudio()
+{
+ mAudioMuteStatusForSystem = CC_AUDIO_UNMUTE;
+ mAudioMuteStatusForTv = CC_AUDIO_UNMUTE;
+ mCurAudioMasterVolume = CC_DEF_SOUND_VOL;
+ mCurAudioBalance = CC_DEF_SOUND_BALANCE_VAL;
+ mCurAudioSupperBassVolume = CC_DEF_SUPPERBASS_VOL;
+ mCurAudioSupperBassSwitch = CC_SWITCH_OFF;
+ mCurAudioSRSSurround = CC_SWITCH_OFF;
+ mCurAudioSrsDialogClarity = CC_SWITCH_OFF;
+ mCurAudioSrsTruBass = CC_SWITCH_OFF;
+ mCurAudioSPDIFSwitch = CC_SWITCH_ON;
+ mCurAudioSPDIFMode = CC_SPDIF_MODE_PCM;
+ mCurAudioBassVolume = CC_DEF_BASS_TREBLE_VOL;
+ mCurAudioTrebleVolume = CC_DEF_BASS_TREBLE_VOL;
+ mCurAudioSoundMode = CC_SOUND_MODE_END;
+ mCurAudioWallEffect = CC_SWITCH_OFF;
+ mCurAudioEQMode = CC_EQ_MODE_START;
+ mCustomAudioMasterVolume = CC_DEF_SOUND_VOL;
+ mCustomAudioBalance = CC_DEF_SOUND_BALANCE_VAL;
+ mCustomAudioSupperBassVolume = CC_DEF_SUPPERBASS_VOL;
+ mCustomAudioSupperBassSwitch = CC_SWITCH_OFF;
+ mCustomAudioSRSSurround = CC_SWITCH_OFF;
+ mCustomAudioSrsDialogClarity = CC_SWITCH_OFF;
+ mCustomAudioSrsTruBass = CC_SWITCH_OFF;
+ mCustomAudioBassVolume = CC_DEF_BASS_TREBLE_VOL;
+ mCustomAudioTrebleVolume = CC_DEF_BASS_TREBLE_VOL;
+ mCustomAudioSoundMode = CC_SOUND_MODE_END;
+ mCustomAudioWallEffect = CC_SWITCH_OFF;
+ mCustomAudioEQMode = CC_EQ_MODE_START;
+ mCustomAudioSoundEnhancementSwitch = CC_SWITCH_OFF;
+ mVolumeCompensationVal = CC_VOLUME_COMPENSATION_DEF_VAL;
+}
+
+CTvAudio::~CTvAudio()
+{
+
+}
+
+template<typename T1, typename T2>
+int AudioArrayCopy(T1 dst_buf[], T2 src_buf[], int copy_size)
+{
+ int i = 0;
+
+ for (i = 0; i < copy_size; i++) {
+ dst_buf[i] = src_buf[i];
+ }
+
+ return 0;
+}
+
+//Audio Mute
+int CTvAudio::SetAudioMuteForSystem(int muteOrUnmute)
+{
+ int ret = 0;
+ LOGD("SetAudioMuteForSystem sysMuteStats=%d, tvMuteStatus=%d, toMute=%d", mAudioMuteStatusForSystem, mAudioMuteStatusForTv, muteOrUnmute);
+ mAudioMuteStatusForSystem = muteOrUnmute;
+ ret |= mAudioAlsa.SetDacMute(mAudioMuteStatusForSystem | mAudioMuteStatusForTv, CC_DAC_MUTE_TYPE_EXTERNAL | CC_DAC_MUTE_TYPE_INTERNAL);
+ ret |= SetAudioSPDIFMute(mAudioMuteStatusForSystem | mAudioMuteStatusForTv);
+ return ret;
+}
+
+int CTvAudio::GetAudioMuteForSystem()
+{
+ return mAudioMuteStatusForSystem;
+}
+
+int CTvAudio::SetAudioMuteForTv(int Mute)
+{
+ int ret = 0;
+ mAudioMuteStatusForTv = Mute;
+ LOGD("SetAudioMuteForTv sysMuteStats=%d, tvMuteStatus=%d, toMute=%d", mAudioMuteStatusForSystem, mAudioMuteStatusForTv, Mute);
+ ret |= mAudioAlsa.SetDacMute(mAudioMuteStatusForSystem | mAudioMuteStatusForTv, CC_DAC_MUTE_TYPE_EXTERNAL | CC_DAC_MUTE_TYPE_INTERNAL);
+ ret |= SetAudioSPDIFMute(mAudioMuteStatusForSystem | mAudioMuteStatusForTv);
+ return ret;
+}
+
+int CTvAudio::GetAudioMuteForTv()
+{
+ return mAudioMuteStatusForTv;
+}
+
+int CTvAudio::SetAudioAVOutMute(int muteStatus)
+{
+ return mAudioAlsa.SetDacMute(muteStatus, CC_DAC_MUTE_TYPE_INTERNAL);
+}
+
+int CTvAudio::GetAudioAVOutMute()
+{
+ return CC_AUDIO_UNMUTE;
+}
+
+int CTvAudio::handleAudioSPDIFMute(int muteStatus)
+{
+ int set_val = 0;
+
+ if (muteStatus == CC_AUDIO_MUTE) {
+ set_val = CC_SPDIF_MUTE_ON;
+ } else if (muteStatus == CC_AUDIO_UNMUTE) {
+ set_val = CC_SPDIF_MUTE_OFF;
+ } else {
+ return -1;
+ }
+
+ return mAudioAlsa.SetSPDIFMute(set_val);
+}
+
+int CTvAudio::SetAudioSPDIFMute(int muteStatus)
+{
+ if (GetCurAudioSPDIFSwitch() == CC_SWITCH_OFF) {
+ muteStatus = CC_AUDIO_MUTE;
+ }
+
+ return handleAudioSPDIFMute(muteStatus);
+}
+
+int CTvAudio::GetAudioSPDIFMute()
+{
+ return CC_AUDIO_UNMUTE;
+}
+
+//Audio SPDIF switch
+int CTvAudio::SetAudioSPDIFSwitch(int tmp_val)
+{
+ int muteStatus = CC_AUDIO_UNMUTE;
+
+ mCurAudioSPDIFSwitch = tmp_val;
+
+ if (tmp_val == CC_SWITCH_OFF || mAudioMuteStatusForSystem == CC_AUDIO_MUTE || mAudioMuteStatusForTv == CC_AUDIO_MUTE) {
+ muteStatus = CC_AUDIO_MUTE;
+ } else {
+ muteStatus = CC_AUDIO_UNMUTE;
+ }
+
+ handleAudioSPDIFMute(muteStatus);
+ return 0;
+}
+
+int CTvAudio::GetCurAudioSPDIFSwitch()
+{
+ return mCurAudioSPDIFSwitch;
+}
+
+int CTvAudio::SaveCurAudioSPDIFSwitch(int tmp_val)
+{
+ int8_t tmp_ch = 0;
+ if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
+ tmp_val = CC_SWITCH_ON;
+ }
+
+ mCurAudioSPDIFSwitch = tmp_val;
+ tmp_ch = tmp_val;
+ SSMSaveAudioSPDIFSwitchVal(tmp_ch);
+
+ return mCurAudioSPDIFSwitch;
+}
+
+int CTvAudio::LoadCurAudioSPDIFSwitch()
+{
+ int8_t tmp_ch = 0;
+ SSMReadAudioSPDIFSwitchVal(&tmp_ch);
+ mCurAudioSPDIFSwitch = tmp_ch;
+ if (mCurAudioSPDIFSwitch != CC_SWITCH_ON
+ && mCurAudioSPDIFSwitch != CC_SWITCH_OFF) {
+ SaveCurAudioSPDIFSwitch (CC_SWITCH_ON);
+ }
+ return mCurAudioSPDIFSwitch;
+}
+
+//Audio SPDIF Mode
+int CTvAudio::SetAudioSPDIFMode(int tmp_val)
+{
+ LOGD("%s : tmp_val = %d\n", __FUNCTION__, tmp_val);
+ mCurAudioSPDIFMode = tmp_val;
+
+ SetSPDIFMode(mCurAudioSPDIFMode);
+
+ return 0;
+}
+
+int CTvAudio::GetCurAudioSPDIFMode()
+{
+ return mCurAudioSPDIFMode;
+}
+
+int CTvAudio::SaveCurAudioSPDIFMode(int tmp_val)
+{
+ int8_t tmp_ch = 0;
+ if (tmp_val != CC_SPDIF_MODE_PCM && tmp_val != CC_SPDIF_MODE_RAW) {
+ tmp_val = CC_SPDIF_MODE_PCM;
+ }
+
+ mCurAudioSPDIFMode = tmp_val;
+ tmp_ch = tmp_val;
+ SSMSaveAudioSPDIFModeVal(tmp_ch);
+
+ return mCurAudioSPDIFMode;
+}
+
+int CTvAudio::LoadCurAudioSPDIFMode()
+{
+ int8_t tmp_ch = 0;
+ SSMReadAudioSPDIFModeVal(&tmp_ch);
+ mCurAudioSPDIFMode = tmp_ch;
+ if (mCurAudioSPDIFMode != CC_SPDIF_MODE_PCM
+ && mCurAudioSPDIFMode != CC_SPDIF_MODE_RAW) {
+ SaveCurAudioSPDIFMode (CC_SPDIF_MODE_PCM);
+ }
+ return mCurAudioSPDIFMode;
+}
+
+//Audio Master Volume
+int CTvAudio::SetAudioMasterVolume(int tmp_vol)
+{
+ const char *value;
+ if (tmp_vol < CC_MIN_SOUND_VOL || tmp_vol > CC_MAX_SOUND_VOL) {
+ tmp_vol = CC_DEF_SOUND_VOL;
+ }
+
+ mCustomAudioMasterVolume = tmp_vol;
+
+ //Volume Compensation
+ if (tmp_vol != CC_MIN_SOUND_VOL) {
+ tmp_vol += GetAudioVolumeCompensationVal();
+ }
+
+ if (tmp_vol > CC_MAX_SOUND_VOL) {
+ tmp_vol = CC_MAX_SOUND_VOL;
+ }
+
+ if (tmp_vol < CC_MIN_SOUND_VOL) {
+ tmp_vol = CC_MIN_SOUND_VOL;
+ }
+
+ mAudioAlsa.SetDacMainVolume(tmp_vol);
+ value = config_get_str ( "TV", "tvin.2d4G.headset.en", "null" );
+ if ( strcmp ( value, "enable" ) == 0 ) {
+ setAudioPcmPlaybackVolume(tmp_vol);
+ }
+ return 0;
+}
+
+int CTvAudio::GetAudioMasterVolume()
+{
+ return mCustomAudioMasterVolume;
+}
+
+int CTvAudio::GetCurAudioMasterVolume()
+{
+ return mCurAudioMasterVolume;
+}
+
+int CTvAudio::SaveCurAudioMasterVolume(int tmp_vol)
+{
+ int8_t tmp_ch = 0;
+
+ if (tmp_vol < CC_MIN_SOUND_VOL || tmp_vol > CC_MAX_SOUND_VOL) {
+ tmp_vol = CC_DEF_SOUND_VOL;
+ }
+
+ mCurAudioMasterVolume = tmp_vol;
+ tmp_ch = tmp_vol;
+ SSMSaveAudioMasterVolume(tmp_ch);
+
+ return mCurAudioMasterVolume;
+}
+
+int CTvAudio::LoadCurAudioMasterVolume()
+{
+ int8_t tmp_ch = 0;
+ SSMReadAudioMasterVolume(&tmp_ch);
+ mCurAudioMasterVolume = tmp_ch;
+ if (mCurAudioMasterVolume < CC_MIN_SOUND_VOL
+ || mCurAudioMasterVolume > CC_MAX_SOUND_VOL) {
+ SaveCurAudioMasterVolume (CC_DEF_SOUND_VOL);
+ }
+
+ mCustomAudioMasterVolume = mCurAudioMasterVolume;
+
+ return mCurAudioMasterVolume;
+}
+
+//Audio Balance
+int CTvAudio::SetAudioBalance(int tmp_val)
+{
+ if (tmp_val < CC_MIN_SOUND_BALANCE_VAL
+ || tmp_val > CC_MAX_SOUND_BALANCE_VAL) {
+ tmp_val = CC_DEF_SOUND_BALANCE_VAL;
+ }
+
+ mCustomAudioBalance = tmp_val;
+
+ if (mAudioAlsa.SetBalanceValue(mCustomAudioBalance) < 0) {
+ return SetAudioMasterVolume(GetAudioMasterVolume());
+ }
+
+ return 0;
+}
+
+int CTvAudio::GetAudioBalance()
+{
+ return mCustomAudioBalance;
+}
+
+int CTvAudio::GetCurAudioBalance()
+{
+ return mCurAudioBalance;
+}
+
+int CTvAudio::SaveCurAudioBalance(int tmp_val)
+{
+ int8_t tmp_ch = 0;
+
+ if (tmp_val < CC_MIN_SOUND_BALANCE_VAL
+ || tmp_val > CC_MAX_SOUND_BALANCE_VAL) {
+ tmp_val = CC_DEF_SOUND_BALANCE_VAL;
+ }
+
+ mCurAudioBalance = tmp_val;
+ tmp_ch = tmp_val;
+ SSMSaveAudioBalanceVal(tmp_ch);
+
+ return mCurAudioBalance;
+}
+
+int CTvAudio::LoadCurAudioBalance()
+{
+ int8_t tmp_ch = 0;
+ SSMReadAudioBalanceVal(&tmp_ch);
+ mCurAudioBalance = tmp_ch;
+ if (mCurAudioBalance < CC_MIN_SOUND_BALANCE_VAL
+ || mCurAudioBalance > CC_MAX_SOUND_BALANCE_VAL) {
+ SaveCurAudioBalance (CC_DEF_SOUND_BALANCE_VAL);
+ }
+
+ mCustomAudioBalance = mCurAudioBalance;
+
+ return mCurAudioBalance;
+}
+
+int CTvAudio::SetAudioVolumeCompensationVal(int tmp_vol_comp_val)
+{
+ int tmp_val = 0;
+ tmp_val = mVolumeCompensationVal;
+ mVolumeCompensationVal = tmp_vol_comp_val;
+ LOGD("%s, old vol comp value = %d, new vol comp value = %d.\n",
+ __FUNCTION__, tmp_val, tmp_vol_comp_val);
+ return tmp_val;
+}
+
+int CTvAudio::GetAudioVolumeCompensationVal()
+{
+ int tmp_vol_comp_val = 0;
+ tmp_vol_comp_val = mVolumeCompensationVal;
+ if (tmp_vol_comp_val < CC_VOLUME_COMPENSATION_MIN_VAL
+ || tmp_vol_comp_val > CC_VOLUME_COMPENSATION_MAX_VAL) {
+ tmp_vol_comp_val = CC_VOLUME_COMPENSATION_DEF_VAL;
+ }
+ LOGD("%s, vol comp value = %d, return value = %d.\n", __FUNCTION__,
+ mVolumeCompensationVal, tmp_vol_comp_val);
+
+ return tmp_vol_comp_val;
+}
+
+//Audio SupperBass Volume
+int CTvAudio::SetAudioSupperBassVolume(int tmp_vol)
+{
+ if (tmp_vol < CC_MIN_SUPPERBASS_VOL || tmp_vol > CC_MAX_SUPPERBASS_VOL) {
+ tmp_vol = CC_DEF_SUPPERBASS_VOL;
+ }
+
+ mCustomAudioSupperBassVolume = tmp_vol;
+
+ return mAudioAlsa.SetDacSupperBassVolume(mCustomAudioSupperBassVolume);
+}
+
+int CTvAudio::GetAudioSupperBassVolume()
+{
+ return mCustomAudioSupperBassVolume;
+}
+
+int CTvAudio::GetCurAudioSupperBassVolume()
+{
+ return mCurAudioSupperBassVolume;
+}
+
+int CTvAudio::SaveCurAudioSupperBassVolume(int tmp_vol)
+{
+ int8_t tmp_ch = 0;
+ if (tmp_vol < CC_MIN_SUPPERBASS_VOL || tmp_vol > CC_MAX_SUPPERBASS_VOL) {
+ tmp_vol = CC_DEF_SUPPERBASS_VOL;
+ }
+
+ mCurAudioSupperBassVolume = tmp_vol;
+ tmp_ch = tmp_vol;
+ SSMSaveAudioSupperBassVolume(tmp_ch);
+
+ return mCurAudioSupperBassVolume;
+}
+
+int CTvAudio::LoadCurAudioSupperBassVolume()
+{
+ int8_t tmp_ch = 0;
+ SSMReadAudioSupperBassVolume(&tmp_ch);
+ mCurAudioSupperBassVolume = tmp_ch;
+ if (mCurAudioSupperBassVolume < CC_MIN_SUPPERBASS_VOL
+ || mCurAudioSupperBassVolume > CC_MAX_SUPPERBASS_VOL) {
+ SaveCurAudioSupperBassVolume (CC_DEF_SUPPERBASS_VOL);
+ }
+
+ mCustomAudioSupperBassVolume = mCurAudioSupperBassVolume;
+
+ return mCurAudioSupperBassVolume;
+}
+
+//Audio SupperBass Switch
+int CTvAudio::SetAudioSupperBassSwitch(int tmp_val)
+{
+ if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
+ tmp_val = CC_SWITCH_OFF;
+ }
+
+ mCustomAudioSupperBassSwitch = tmp_val;
+
+ if (GetAudioSupperBassSwitch() == CC_SWITCH_OFF) {
+ return mAudioAlsa.SetDacSupperBassVolume(CC_MIN_SUPPERBASS_VOL);
+ }
+
+ return mAudioAlsa.SetDacSupperBassVolume(GetAudioSupperBassVolume());
+}
+
+int CTvAudio::GetAudioSupperBassSwitch()
+{
+ if (GetAudioSupperBassSwitchDisableCFG() != 0) {
+ return CC_SWITCH_ON;
+ }
+
+ return mCustomAudioSupperBassSwitch;
+}
+
+int CTvAudio::GetCurAudioSupperBassSwitch()
+{
+ if (GetAudioSupperBassSwitchDisableCFG() != 0) {
+ return CC_SWITCH_ON;
+ }
+
+ return mCurAudioSupperBassSwitch;
+}
+
+int CTvAudio::SaveCurAudioSupperBassSwitch(int tmp_val)
+{
+ int8_t tmp_ch = 0;
+ if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
+ tmp_val = CC_SWITCH_OFF;
+ }
+
+ mCurAudioSupperBassSwitch = tmp_val;
+ tmp_ch = tmp_val;
+ SSMSaveAudioSupperBassSwitch(tmp_ch);
+
+ HandleSupperBassSwicth();
+
+ return mCurAudioSupperBassSwitch;
+}
+
+int CTvAudio::LoadCurAudioSupperBassSwitch()
+{
+ int8_t tmp_ch = 0;
+ SSMReadAudioSupperBassSwitch(&tmp_ch);
+ mCurAudioSupperBassSwitch = tmp_ch;
+ if (mCurAudioSupperBassSwitch != CC_SWITCH_ON
+ && mCurAudioSupperBassSwitch != CC_SWITCH_OFF) {
+ SaveCurAudioSupperBassSwitch (CC_SWITCH_OFF);
+ }
+
+ mCustomAudioSupperBassSwitch = mCurAudioSupperBassSwitch;
+
+ HandleSupperBassSwicth();
+
+ return mCurAudioSupperBassSwitch;
+}
+
+void CTvAudio::HanldeSupperBassSRSSpeakerSize()
+{
+ int tmp_speakersize = -1;
+
+ if (GetAudioSrsTruBass() == CC_SWITCH_ON) {
+ if (GetAudioSupperBassSwitch() == CC_SWITCH_ON) {
+ tmp_speakersize = GetAudioSRSSupperBassTrubassSpeakerSizeCfg(1);
+ } else {
+ tmp_speakersize = GetAudioSRSSupperBassTrubassSpeakerSizeCfg(0);
+ }
+
+ if (tmp_speakersize >= 0) {
+ mAudioEffect.SetSrsTrubassSpeakerSize(tmp_speakersize);
+ }
+ }
+}
+
+void CTvAudio::HandleSupperBassSwicth()
+{
+ if (GetAudioSupperBassModuleDisableCFG() != 0) {
+ return;
+ }
+
+ HanldeSupperBassSRSSpeakerSize();
+}
+
+//Audio SRS Surround switch
+int CTvAudio::SetAudioSRSSurround(int tmp_val)
+{
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ return 0;
+ }
+
+ if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
+ tmp_val = CC_SWITCH_OFF;
+ }
+
+ mCustomAudioSRSSurround = tmp_val;
+
+ RealSetSRS();
+ return 0;
+}
+
+int CTvAudio::GetAudioSRSSurround()
+{
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ return CC_SWITCH_OFF;
+ }
+
+ return mCustomAudioSRSSurround;
+}
+
+int CTvAudio::GetCurAudioSRSSurround()
+{
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ return CC_SWITCH_OFF;
+ }
+
+ return mCurAudioSRSSurround;
+}
+
+int CTvAudio::SaveCurAudioSrsSurround(int tmp_val)
+{
+ int8_t tmp_ch = 0;
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ return 0;
+ }
+
+ if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
+ tmp_val = CC_SWITCH_OFF;
+ }
+
+ mCurAudioSRSSurround = tmp_val;
+ tmp_ch = tmp_val;
+ SSMSaveAudioSRSSurroundSwitch(tmp_ch);
+
+ return mCurAudioSRSSurround;
+}
+
+int CTvAudio::LoadCurAudioSrsSurround()
+{
+ int8_t tmp_ch = 0;
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ mCustomAudioSRSSurround = CC_SWITCH_OFF;
+ mCustomAudioSRSSurround = mCurAudioSRSSurround;
+ return mCurAudioSRSSurround;
+ }
+
+ SSMReadAudioSRSSurroundSwitch(&tmp_ch);
+ mCurAudioSRSSurround = tmp_ch;
+ if (mCurAudioSRSSurround != CC_SWITCH_ON
+ && mCurAudioSRSSurround != CC_SWITCH_OFF) {
+ SaveCurAudioSrsSurround (CC_SWITCH_OFF);
+ }
+
+ mCustomAudioSRSSurround = mCurAudioSRSSurround;
+
+ return mCurAudioSRSSurround;
+}
+
+//Audio SRS Dialog Clarity
+int CTvAudio::SetAudioSrsDialogClarity(int tmp_val)
+{
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ return 0;
+ }
+
+ if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
+ tmp_val = CC_SWITCH_OFF;
+ }
+
+ mCustomAudioSrsDialogClarity = tmp_val;
+ RealSetSRS();
+
+ return 0;
+}
+
+int CTvAudio::GetAudioSrsDialogClarity()
+{
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ return CC_SWITCH_OFF;
+ }
+
+ return mCustomAudioSrsDialogClarity;
+}
+
+int CTvAudio::GetCurAudioSrsDialogClarity()
+{
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ return CC_SWITCH_OFF;
+ }
+
+ return mCurAudioSrsDialogClarity;
+}
+
+int CTvAudio::SaveCurAudioSrsDialogClarity(int tmp_val)
+{
+ int8_t tmp_ch = 0;
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ return 0;
+ }
+
+ if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
+ tmp_val = CC_SWITCH_OFF;
+ }
+
+ mCurAudioSrsDialogClarity = tmp_val;
+ tmp_ch = tmp_val;
+ SSMSaveAudioSRSDialogClaritySwitch(tmp_ch);
+
+ return mCurAudioSrsDialogClarity;
+}
+
+int CTvAudio::LoadCurAudioSrsDialogClarity()
+{
+ int8_t tmp_ch = 0;
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ mCurAudioSrsDialogClarity = CC_SWITCH_OFF;
+ mCustomAudioSrsDialogClarity = mCurAudioSrsDialogClarity;
+ return mCurAudioSRSSurround;
+ }
+
+ SSMReadAudioSRSDialogClaritySwitch(&tmp_ch);
+ mCurAudioSrsDialogClarity = tmp_ch;
+ if (mCurAudioSrsDialogClarity != CC_SWITCH_ON
+ && mCurAudioSrsDialogClarity != CC_SWITCH_OFF) {
+ SaveCurAudioSrsDialogClarity (CC_SWITCH_OFF);
+ }
+
+ mCustomAudioSrsDialogClarity = mCurAudioSrsDialogClarity;
+
+ return mCurAudioSrsDialogClarity;
+}
+
+//Audio SRS Trubass
+int CTvAudio::SetAudioSrsTruBass(int tmp_val)
+{
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ return 0;
+ }
+
+ if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
+ tmp_val = CC_SWITCH_OFF;
+ }
+
+ mCustomAudioSrsTruBass = tmp_val;
+ RealSetSRS();
+
+ return 0;
+}
+
+int CTvAudio::GetAudioSrsTruBass()
+{
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ return CC_SWITCH_OFF;
+ }
+
+ return mCustomAudioSrsTruBass;
+}
+
+int CTvAudio::GetCurAudioSrsTruBass()
+{
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ return CC_SWITCH_OFF;
+ }
+
+ return mCurAudioSrsTruBass;
+}
+
+int CTvAudio::SaveCurAudioSrsTruBass(int tmp_val)
+{
+ int8_t tmp_ch = 0;
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ return 0;
+ }
+
+ if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
+ tmp_val = CC_SWITCH_OFF;
+ }
+
+ mCurAudioSrsTruBass = tmp_val;
+ tmp_ch = tmp_val;
+ SSMSaveAudioSRSTruBassSwitch(tmp_ch);
+
+ return mCurAudioSrsTruBass;
+}
+
+int CTvAudio::LoadCurAudioSrsTruBass()
+{
+ int8_t tmp_ch = 0;
+ if (GetAudioSRSModuleDisableCFG() == 1) {
+ mCurAudioSrsTruBass = CC_SWITCH_OFF;
+ mCustomAudioSrsTruBass = mCurAudioSrsTruBass;
+ return mCurAudioSRSSurround;
+ }
+
+ SSMReadAudioSRSTruBassSwitch(&tmp_ch);
+ mCurAudioSrsTruBass = tmp_ch;
+ if (mCurAudioSrsTruBass != CC_SWITCH_ON
+ && mCurAudioSrsTruBass != CC_SWITCH_OFF) {
+ SaveCurAudioSrsTruBass (CC_SWITCH_OFF);
+ }
+
+ mCustomAudioSrsTruBass = mCurAudioSrsTruBass;
+
+ return mCurAudioSrsTruBass;
+}
+
+void CTvAudio::RealSetSRS()
+{
+ int tmp_gain_val = 0;
+ int surround_switch = CC_SWITCH_OFF;
+ int trubass_switch = CC_SWITCH_OFF;
+ int dialogclarity_switch = CC_SWITCH_OFF;
+
+ surround_switch = GetAudioSRSSurround();
+ if (surround_switch == CC_SWITCH_ON) {
+ mAudioEffect.SetSrsSurroundSwitch(surround_switch);
+ tmp_gain_val = GetAudioSRSSourroundGainCfg();
+ if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
+ mAudioEffect.SetSrsSurroundGain(tmp_gain_val);
+ }
+
+ trubass_switch = GetAudioSrsTruBass();
+ dialogclarity_switch = GetAudioSrsDialogClarity();
+ if (trubass_switch == CC_SWITCH_ON
+ && dialogclarity_switch == CC_SWITCH_OFF) {
+ mAudioEffect.SetSrsTruBassSwitch (CC_SWITCH_ON);
+
+ tmp_gain_val = GetAudioSRSTrubassOnlyGainCfg();
+ if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
+ mAudioEffect.SetSrsTruBassGain(tmp_gain_val);
+ }
+
+ mAudioEffect.SetSrsDialogClaritySwitch (CC_SWITCH_OFF);
+ } else if (trubass_switch == CC_SWITCH_OFF
+ && dialogclarity_switch == CC_SWITCH_ON) {
+ mAudioEffect.SetSrsTruBassSwitch (CC_SWITCH_OFF);
+
+ mAudioEffect.SetSrsDialogClaritySwitch (CC_SWITCH_ON);
+
+ tmp_gain_val = GetAudioSRSDialogClarityOnlyDefinitionGainCfg();
+ if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
+ mAudioEffect.SetSrsDefinitionGain(tmp_gain_val);
+ }
+
+ tmp_gain_val = GetAudioSRSDialogClarityOnlyGainCfg();
+ if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
+ mAudioEffect.SetSrsDialogClarityGain(tmp_gain_val);
+ }
+ } else if (trubass_switch == CC_SWITCH_ON
+ && dialogclarity_switch == CC_SWITCH_ON) {
+ mAudioEffect.SetSrsTruBassSwitch (CC_SWITCH_ON);
+
+ tmp_gain_val = GetAudioSRSTrubassAndDialogClarityTrubassGainCfg();
+ if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
+ mAudioEffect.SetSrsTruBassGain(tmp_gain_val);
+ }
+
+ mAudioEffect.SetSrsDialogClaritySwitch(CC_SWITCH_ON);
+
+ tmp_gain_val =
+ GetAudioSRSTrubassAndDialogClarityDefinitionGainCfg();
+ if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
+ mAudioEffect.SetSrsDefinitionGain(tmp_gain_val);
+ }
+
+ tmp_gain_val =
+ GetAudioSRSTrubassAndDialogClarityDialogClarityGainCfg();
+ if (tmp_gain_val >= 0 && tmp_gain_val <= 100) {
+ mAudioEffect.SetSrsDialogClarityGain(tmp_gain_val);
+ }
+ } else if (trubass_switch == CC_SWITCH_OFF
+ && dialogclarity_switch == CC_SWITCH_OFF) {
+ mAudioEffect.SetSrsTruBassSwitch (CC_SWITCH_OFF);
+ mAudioEffect.SetSrsDialogClaritySwitch(CC_SWITCH_OFF);
+ }
+
+ HanldeSupperBassSRSSpeakerSize();
+ } else {
+ mAudioEffect.SetSrsSurroundSwitch (CC_SWITCH_OFF);
+ mAudioEffect.SetSrsTruBassSwitch(CC_SWITCH_OFF);
+ mAudioEffect.SetSrsDialogClaritySwitch(CC_SWITCH_OFF);
+ }
+
+ SetDacGain();
+}
+
+int CTvAudio::SetDacGain()
+{
+ int main_gain_val = 0, sb_gain_val = 0;
+ int sourround_switch, trubass_switch, dialogclarity_switch;
+
+ sourround_switch = GetAudioSRSSurround();
+ trubass_switch = GetAudioSrsTruBass();
+ dialogclarity_switch = GetAudioSrsDialogClarity();
+
+ if (sourround_switch == CC_SWITCH_ON) {
+ main_gain_val = GetAudioSRSSourroundAmplifierMasterGainCfg();
+ sb_gain_val = GetAudioSRSSourroundAmplifierSupperBassGainCfg();
+
+ if (dialogclarity_switch == CC_SWITCH_ON
+ && trubass_switch == CC_SWITCH_OFF) {
+ main_gain_val = GetAudioSRSDialogClarityOnlyAmplifierMasterGainCfg();
+ sb_gain_val = GetAudioSRSDialogClarityOnlyAmplifierSupperBassGainCfg();
+ } else if (dialogclarity_switch == CC_SWITCH_OFF
+ && trubass_switch == CC_SWITCH_ON) {
+ main_gain_val = GetAudioSRSTrubassOnlyAmplifierMasterGainCfg();
+ sb_gain_val = GetAudioSRSTrubassOnlyAmplifierSupperBassGainCfg();
+ } else if (dialogclarity_switch == CC_SWITCH_ON
+ && trubass_switch == CC_SWITCH_ON) {
+ main_gain_val = GetAudioSRSTrubassAndDialogClarityAmplifierMasterGainCfg();
+ sb_gain_val = GetAudioSRSTrubassAndDialogClarityAmplifierSupperBassGainCfg();
+ }
+ }
+
+ mAudioAlsa.SetMainVolumeGain(main_gain_val);
+ mAudioAlsa.SetSupperBassVolumeGain(sb_gain_val);
+
+ return 0;
+}
+
+//Audio Bass
+int CTvAudio::SetAudioBassVolume(int tmp_vol)
+{
+ int nMinBassVol = 0, nMaxBassVol = 0;
+
+ nMinBassVol = GetBassUIMinGainVal();
+ nMaxBassVol = GetBassUIMaxGainVal();
+
+ if (tmp_vol < nMinBassVol || tmp_vol > nMaxBassVol) {
+ tmp_vol = (nMaxBassVol + nMinBassVol) / 2;
+ }
+
+ mCustomAudioBassVolume = tmp_vol;
+
+ tmp_vol = MappingTrebleBassAndEqualizer(GetAudioBassVolume(), 0,
+ nMinBassVol, nMaxBassVol);
+
+ return SetSpecialIndexEQGain(CC_EQ_BASS_IND, tmp_vol);
+}
+
+int CTvAudio::GetAudioBassVolume()
+{
+ return mCustomAudioBassVolume;
+}
+
+int CTvAudio::GetCurAudioBassVolume()
+{
+ return mCurAudioBassVolume;
+}
+
+int CTvAudio::SaveCurAudioBassVolume(int tmp_vol)
+{
+ int nMinBassVol = 0, nMaxBassVol = 0;
+
+ nMinBassVol = GetBassUIMinGainVal();
+ nMaxBassVol = GetBassUIMaxGainVal();
+
+ if (tmp_vol < nMinBassVol || tmp_vol > nMaxBassVol) {
+ tmp_vol = (nMaxBassVol + nMinBassVol) / 2;
+ }
+
+ RealSaveCurAudioBassVolume(tmp_vol, 1);
+
+ tmp_vol = MappingTrebleBassAndEqualizer(GetCurAudioBassVolume(), 0,
+ nMinBassVol, nMaxBassVol);
+
+ return SaveSpecialIndexEQGain(CC_EQ_BASS_IND, tmp_vol);
+}
+
+int CTvAudio::RealSaveCurAudioBassVolume(int tmp_vol, int sound_mode_judge)
+{
+ int8_t tmp_ch = 0;
+ mCurAudioBassVolume = tmp_vol;
+ tmp_ch = tmp_vol;
+ SSMSaveAudioBassVolume(tmp_ch);
+
+ if (sound_mode_judge == 1) {
+ if (GetAudioSoundMode() != CC_SOUND_MODE_USER) {
+ SaveCurAudioSoundMode (CC_SOUND_MODE_USER);
+ mCustomAudioSoundMode = mCurAudioSoundMode;
+ }
+ }
+
+ return mCurAudioBassVolume;
+}
+
+int CTvAudio::LoadCurAudioBassVolume()
+{
+ int nMinBassVol = 0, nMaxBassVol = 0;
+ int8_t tmp_ch = 0;
+
+ nMinBassVol = GetBassUIMinGainVal();
+ nMaxBassVol = GetBassUIMaxGainVal();
+
+ SSMReadAudioBassVolume(&tmp_ch);
+ mCurAudioBassVolume = tmp_ch;
+ if (mCurAudioBassVolume < nMinBassVol
+ || mCurAudioBassVolume > nMaxBassVol) {
+ RealSaveCurAudioBassVolume((nMaxBassVol + nMinBassVol) / 2, 0);
+ }
+
+ mCustomAudioBassVolume = mCurAudioBassVolume;
+
+ return mCurAudioBassVolume;
+}
+
+//Audio Treble
+int CTvAudio::SetAudioTrebleVolume(int tmp_vol)
+{
+ int nMinTrebleVol = 0, nMaxTrebleVol = 0;
+
+ nMinTrebleVol = GetTrebleUIMinGainVal();
+ nMaxTrebleVol = GetTrebleUIMaxGainVal();
+
+ if (tmp_vol < nMinTrebleVol || tmp_vol > nMaxTrebleVol) {
+ tmp_vol = (nMaxTrebleVol + nMinTrebleVol) / 2;
+ }
+
+ mCustomAudioTrebleVolume = tmp_vol;
+
+ tmp_vol = MappingTrebleBassAndEqualizer(GetAudioTrebleVolume(), 0,
+ nMinTrebleVol, nMaxTrebleVol);
+
+ return SetSpecialIndexEQGain(CC_EQ_TREBLE_IND, tmp_vol);
+}
+
+int CTvAudio::GetAudioTrebleVolume()
+{
+ return mCustomAudioTrebleVolume;
+}
+
+int CTvAudio::GetCurAudioTrebleVolume()
+{
+ return mCurAudioTrebleVolume;
+}
+
+int CTvAudio::SaveCurAudioTrebleVolume(int tmp_vol)
+{
+ int nMinTrebleVol = 0, nMaxTrebleVol = 0;
+
+ nMinTrebleVol = GetTrebleUIMinGainVal();
+ nMaxTrebleVol = GetTrebleUIMaxGainVal();
+
+ if (tmp_vol < nMinTrebleVol || tmp_vol > nMaxTrebleVol) {
+ tmp_vol = (nMaxTrebleVol + nMinTrebleVol) / 2;
+ }
+
+ RealSaveCurAudioTrebleVolume(tmp_vol, 1);
+
+ tmp_vol = MappingTrebleBassAndEqualizer(GetCurAudioTrebleVolume(), 0,
+ nMinTrebleVol, nMaxTrebleVol);
+
+ return SaveSpecialIndexEQGain(CC_EQ_TREBLE_IND, tmp_vol);
+}
+
+int CTvAudio::RealSaveCurAudioTrebleVolume(int tmp_vol, int sound_mode_judge)
+{
+ int8_t tmp_ch = 0;
+ mCurAudioTrebleVolume = tmp_vol;
+ tmp_ch = tmp_vol;
+ SSMSaveAudioTrebleVolume(tmp_ch);
+
+ if (sound_mode_judge == 1) {
+ if (GetAudioSoundMode() != CC_SOUND_MODE_USER) {
+ SaveCurAudioSoundMode (CC_SOUND_MODE_USER);
+ mCustomAudioSoundMode = mCurAudioSoundMode;
+ }
+ }
+
+ return mCurAudioTrebleVolume;
+}
+
+int CTvAudio::LoadCurAudioTrebleVolume()
+{
+ int nMinTrebleVol = 0, nMaxTrebleVol = 0;
+ int8_t tmp_ch = 0;
+
+ nMinTrebleVol = GetTrebleUIMinGainVal();
+ nMaxTrebleVol = GetTrebleUIMaxGainVal();
+
+ SSMReadAudioTrebleVolume(&tmp_ch);
+ mCurAudioTrebleVolume = tmp_ch;
+ if (mCurAudioTrebleVolume < nMinTrebleVol
+ || mCurAudioTrebleVolume > nMaxTrebleVol) {
+ RealSaveCurAudioTrebleVolume((nMaxTrebleVol + nMinTrebleVol) / 2, 0);
+ }
+
+ mCustomAudioTrebleVolume = mCurAudioTrebleVolume;
+
+ return mCurAudioTrebleVolume;
+}
+
+//Audio Sound Mode
+int CTvAudio::SetAudioSoundMode(int tmp_val)
+{
+ if (tmp_val < CC_SOUND_MODE_START || tmp_val > CC_SOUND_MODE_END) {
+ tmp_val = CC_SOUND_MODE_STD;
+ }
+
+ LOGD("%s : sound mode = %d\n", __FUNCTION__, tmp_val);
+
+ mCustomAudioSoundMode = tmp_val;
+ SetSpecialModeEQGain(mCustomAudioSoundMode);
+
+ HandleTrebleBassVolume();
+
+ return 0;
+}
+
+int CTvAudio::GetAudioSoundMode()
+{
+ return mCustomAudioSoundMode;
+}
+
+int CTvAudio::GetCurAudioSoundMode()
+{
+ return mCurAudioSoundMode;
+}
+
+int CTvAudio::SaveCurAudioSoundMode(int tmp_val)
+{
+ int8_t tmp_ch = 0;
+ if (tmp_val < CC_SOUND_MODE_START || tmp_val > CC_SOUND_MODE_END) {
+ tmp_val = CC_SOUND_MODE_STD;
+ }
+
+ mCurAudioSoundMode = tmp_val;
+ tmp_ch = tmp_val;
+ SSMSaveAudioSoundModeVal(tmp_ch);
+
+ return mCurAudioSoundMode;
+}
+
+int CTvAudio::LoadCurAudioSoundMode()
+{
+ int8_t tmp_ch = 0;
+ SSMReadAudioSoundModeVal(&tmp_ch);
+ mCurAudioSoundMode = tmp_ch;
+ if (mCurAudioSoundMode < CC_SOUND_MODE_START
+ || mCurAudioSoundMode > CC_SOUND_MODE_END) {
+ SaveCurAudioSoundMode (CC_SOUND_MODE_STD);
+ }
+
+ mCustomAudioSoundMode = mCurAudioSoundMode;
+
+ return mCurAudioSoundMode;
+}
+
+int CTvAudio::HandleTrebleBassVolume()
+{
+ int tmp_vol = 0;
+ int tmpEQGainBuf[128] = { 0 };
+ int8_t tmp_ch = 0;
+
+ GetCustomEQGain(tmpEQGainBuf);
+
+ tmp_vol = MappingTrebleBassAndEqualizer(tmpEQGainBuf[CC_EQ_TREBLE_IND], 1,
+ GetTrebleUIMinGainVal(), GetTrebleUIMaxGainVal());
+ mCustomAudioTrebleVolume = tmp_vol;
+ mCurAudioTrebleVolume = mCustomAudioTrebleVolume;
+ tmp_ch = mCustomAudioTrebleVolume;
+ SSMSaveAudioTrebleVolume(tmp_ch);
+
+ tmp_vol = MappingTrebleBassAndEqualizer(tmpEQGainBuf[CC_EQ_BASS_IND], 1,
+ GetBassUIMinGainVal(), GetBassUIMaxGainVal());
+ mCustomAudioBassVolume = tmp_vol;
+ mCurAudioBassVolume = mCustomAudioBassVolume;
+ tmp_ch = mCustomAudioBassVolume;
+ SSMSaveAudioBassVolume(tmp_ch);
+
+ return 0;
+}
+
+//Audio Wall Effect
+int CTvAudio::SetAudioWallEffect(int tmp_val)
+{
+ int tmp_treble_val;
+ int tmp_type = 0;
+
+ if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
+ tmp_val = CC_SWITCH_OFF;
+ }
+
+ mCustomAudioWallEffect = tmp_val;
+
+ tmp_type = GetAudioWallEffectTypeCfg();
+ if (tmp_type == 0) {
+ SetCustomEQGain();
+ } else if (tmp_type == 1) {
+ mAudioAlsa.SetDacEQMode(tmp_val);
+ }
+
+ return 0;
+}
+
+int CTvAudio::GetAudioWallEffect()
+{
+ return mCustomAudioWallEffect;
+}
+
+int CTvAudio::GetCurAudioWallEffect()
+{
+ return mCurAudioWallEffect;
+}
+
+int CTvAudio::SaveCurAudioWallEffect(int tmp_val)
+{
+ int8_t tmp_ch = 0;
+ if (tmp_val != CC_SWITCH_ON && tmp_val != CC_SWITCH_OFF) {
+ tmp_val = CC_SWITCH_OFF;
+ }
+
+ mCurAudioWallEffect = tmp_val;
+ tmp_ch = tmp_val;
+ SSMSaveAudioWallEffectSwitch(tmp_ch);
+
+ return mCurAudioWallEffect;
+}
+
+int CTvAudio::LoadCurAudioWallEffect()
+{
+ int8_t tmp_ch = 0;
+ SSMReadAudioWallEffectSwitch(&tmp_ch);
+ mCurAudioWallEffect = tmp_ch;
+ if (mCurAudioWallEffect != CC_SWITCH_ON
+ && mCurAudioWallEffect != CC_SWITCH_OFF) {
+ SaveCurAudioWallEffect (CC_SWITCH_OFF);
+ }
+
+ mCustomAudioWallEffect = mCurAudioWallEffect;
+
+ return mCurAudioWallEffect;
+}
+
+//Audio EQ Mode
+int CTvAudio::SetAudioEQMode(int tmp_val)
+{
+ if (tmp_val < CC_EQ_MODE_START || tmp_val > CC_EQ_MODE_END) {
+ tmp_val = CC_EQ_MODE_START;
+ }
+
+ mCustomAudioEQMode = tmp_val;
+
+ return 0;
+}
+
+int CTvAudio::GetAudioEQMode()
+{
+ return mCustomAudioEQMode;
+}
+
+int CTvAudio::GetCurAudioEQMode()
+{
+ return mCurAudioEQMode;
+}
+
+int CTvAudio::SaveCurAudioEQMode(int tmp_val)
+{
+ int8_t tmp_ch = 0;
+ if (tmp_val < CC_EQ_MODE_START || tmp_val > CC_EQ_MODE_END) {
+ tmp_val = CC_EQ_MODE_START;
+ }
+
+ mCurAudioEQMode = tmp_val;
+ tmp_ch = tmp_val;
+ SSMSaveAudioEQModeVal(tmp_ch);
+
+ return tmp_val;
+}
+
+int CTvAudio::LoadCurAudioEQMode()
+{
+ int8_t tmp_ch = 0;
+ SSMReadAudioEQModeVal(&tmp_ch);
+ mCurAudioEQMode = tmp_ch;
+ if (mCurAudioEQMode < CC_EQ_MODE_START
+ || mCurAudioEQMode > CC_EQ_MODE_END) {
+ SaveCurAudioEQMode (CC_EQ_MODE_START);
+ }
+
+ mCustomAudioEQMode = mCurAudioEQMode;
+
+ return mCurAudioEQMode;
+}
+
+//Audio EQ Gain
+int CTvAudio::GetAudioEQRange(int range_buf[])
+{
+ range_buf[0] = GetEQMinGainVal();
+ range_buf[1] = GetEQMaxGainVal();
+ return 0;
+}
+
+int CTvAudio::GetAudioEQBandCount()
+{
+ return mAudioEffect.GetEQBandCount();
+}
+
+int CTvAudio::SetAudioEQGain(int gain_buf[])
+{
+ return AudioSetEQGain(gain_buf);
+}
+
+int CTvAudio::GetAudioEQGain(int gain_buf[])
+{
+ return GetCustomEQGain(gain_buf);
+}
+
+int CTvAudio::GetCurAudioEQGain(int gain_buf[])
+{
+ RealReadCurAudioEQGain(gain_buf);
+ return 0;
+}
+
+int CTvAudio::SaveCurAudioEQGain(int gain_buf[])
+{
+ return RealSaveCurAudioEQGain(gain_buf, 1);
+}
+
+int CTvAudio::RealReadCurAudioEQGain(int gain_buf[])
+{
+ if (CheckAudioEQGain(mCurEQGainBuf, 0) < 0) {
+ RestoreToAudioDefEQGain(mCurEQGainBuf);
+ }
+
+ AudioArrayCopy(gain_buf, mCurEQGainBuf, GetAudioEQBandCount());
+
+ return 0;
+}
+
+int CTvAudio::RealSaveCurAudioEQGain(int gain_buf[], int sound_mode_judge)
+{
+ if (CheckAudioEQGain(gain_buf, 0) < 0) {
+ RestoreToAudioDefEQGain(gain_buf);
+ SetAudioEQGain(gain_buf);
+ return -1;
+ }
+
+ AudioArrayCopy(mCurEQGainBuf, gain_buf, GetAudioEQBandCount());
+ AudioArrayCopy(mCurEQGainChBuf, gain_buf, GetAudioEQBandCount());
+ SSMSaveAudioEQGain(0, GetAudioEQBandCount(), mCurEQGainChBuf);
+
+ if (sound_mode_judge == 1) {
+ HandleTrebleBassVolume();
+ SaveCurAudioSoundMode (CC_SOUND_MODE_USER);
+ mCustomAudioSoundMode = mCurAudioSoundMode;
+ }
+
+ return 0;
+}
+
+int CTvAudio::LoadCurAudioEQGain()
+{
+ int i = 0;
+
+ SSMReadAudioEQGain(0, GetAudioEQBandCount(), mCurEQGainChBuf);
+ AudioArrayCopy(mCurEQGainBuf, mCurEQGainChBuf, GetAudioEQBandCount());
+
+ for (i = 0; i < GetAudioEQBandCount(); i++) {
+ if (mCurEQGainBuf[i] & 0x80) {
+ mCurEQGainBuf[i] = mCurEQGainBuf[i] - 256;
+ }
+ }
+
+ if (CheckAudioEQGain(mCurEQGainBuf, 0) < 0) {
+ RestoreToAudioDefEQGain(mCurEQGainBuf);
+ SetAudioEQGain(mCurEQGainBuf);
+ return -1;
+ }
+
+ return 0;
+}
+
+int CTvAudio::SetAudioEQSwitch(int switch_val)
+{
+ return mAudioEffect.SetEQSwitch(switch_val);
+}
+
+int CTvAudio::GetEQMinGainVal()
+{
+ int min_val = 0, max_val = 0;
+
+ if (GetAudioEQGainRangeCFG(&min_val, &max_val) < 0) {
+ return mAudioEffect.GetEQMinGain();
+ }
+
+ return min_val;
+}
+
+int CTvAudio::GetEQMaxGainVal()
+{
+ int min_val = 0, max_val = 0;
+
+ if (GetAudioEQGainRangeCFG(&min_val, &max_val) < 0) {
+ return mAudioEffect.GetEQMaxGain();
+ }
+
+ return max_val;
+}
+
+int CTvAudio::GetEQUIMinGainVal()
+{
+ int min_val = 0, max_val = 0;
+
+ if (GetAudioEQUIGainRangeCFG(&min_val, &max_val) < 0) {
+ return CC_EQ_DEF_UI_MIN_GAIN;
+ }
+
+ return min_val;
+}
+
+int CTvAudio::GetEQUIMaxGainVal()
+{
+ int min_val = 0, max_val = 0;
+
+ if (GetAudioEQUIGainRangeCFG(&min_val, &max_val) < 0) {
+ return CC_EQ_DEF_UI_MAX_GAIN;
+ }
+
+ return max_val;
+}
+
+int CTvAudio::GetBassUIMinGainVal()
+{
+ return 0;
+}
+
+int CTvAudio::GetBassUIMaxGainVal()
+{
+ return 100;
+}
+
+int CTvAudio::GetTrebleUIMinGainVal()
+{
+ return 0;
+}
+
+int CTvAudio::GetTrebleUIMaxGainVal()
+{
+ return 100;
+}
+
+int CTvAudio::MappingLine(int map_val, int src_min, int src_max, int dst_min,
+ int dst_max)
+{
+ if (dst_min < 0) {
+ return (map_val - (src_max + src_min) / 2) * (dst_max - dst_min)
+ / (src_max - src_min);
+ } else {
+ return (map_val - src_min) * (dst_max - dst_min) / (src_max - src_min);
+ }
+}
+
+int CTvAudio::MappingTrebleBassAndEqualizer(int tmp_vol, int direct, int tb_min,
+ int tb_max)
+{
+ int tmp_ret = 0;
+
+ if (direct == 0) {
+ tmp_ret = MappingLine(tmp_vol, tb_min, tb_max, GetEQUIMinGainVal(),
+ GetEQUIMaxGainVal());
+ } else {
+ tmp_ret = MappingLine(tmp_vol, GetEQUIMinGainVal(), GetEQUIMaxGainVal(),
+ tb_min, tb_max);
+ }
+
+ LOGD("%s, tmp_vol = %d, direct = %d, tmp_ret = %d\n", __FUNCTION__, tmp_vol,
+ direct, tmp_ret);
+
+ return tmp_ret;
+}
+
+int CTvAudio::MappingEQGain(int src_gain_buf[], int dst_gain_buf[], int direct)
+{
+ int i = 0;
+ int nMinUIVal = 0, nMaxUIVal = 0, nMinVal = 0, nMaxVal = 0;
+
+ nMinUIVal = GetEQUIMinGainVal();
+ nMaxUIVal = GetEQUIMaxGainVal();
+ nMinVal = GetEQMinGainVal();
+ nMaxVal = GetEQMaxGainVal();
+
+ if (CheckAudioEQGain(src_gain_buf, direct) < 0) {
+ return -1;
+ }
+
+ if (nMinUIVal >= nMinVal && nMaxUIVal <= nMaxVal) {
+ for (i = 0; i < GetAudioEQBandCount(); i++) {
+ dst_gain_buf[i] = src_gain_buf[i];
+ }
+ } else {
+ for (i = 0; i < GetAudioEQBandCount(); i++) {
+ if (direct == 0) {
+ dst_gain_buf[i] = MappingLine(src_gain_buf[i], nMinUIVal,
+ nMaxUIVal, nMinVal, nMaxVal);
+ } else {
+ dst_gain_buf[i] = MappingLine(src_gain_buf[i], nMinVal, nMaxVal,
+ nMinUIVal, nMaxUIVal);
+ }
+ }
+ }
+
+ return 0;
+}
+
+int CTvAudio::RestoreToAudioDefEQGain(int gain_buf[])
+{
+ int i = 0;
+ int *tmpEQPresetBufPtr = GetAudioEQPresetBufferPtr();
+
+ for (i = 0; i < GetAudioEQBandCount(); i++) {
+ gain_buf[i] = (GetEQUIMaxGainVal() + GetEQUIMinGainVal()) / 2;
+ }
+
+ AudioArrayCopy(mCurEQGainBuf, gain_buf, GetAudioEQBandCount());
+ AudioArrayCopy(mCurEQGainChBuf, gain_buf, GetAudioEQBandCount());
+ SSMSaveAudioEQGain(0, GetAudioEQBandCount(), mCurEQGainChBuf);
+
+ HandleTrebleBassVolume();
+ SaveCurAudioSoundMode (CC_SOUND_MODE_STD);
+ mCustomAudioSoundMode = mCurAudioSoundMode;
+
+ return 0;
+}
+
+int CTvAudio::CheckAudioEQGain(int gain_buf[], int direct)
+{
+ int i;
+
+ if (direct == 0) {
+ for (i = 0; i < GetAudioEQBandCount(); i++) {
+ if (gain_buf[i] < GetEQUIMinGainVal()
+ || gain_buf[i] > GetEQUIMaxGainVal()) {
+ return -1;
+ }
+ }
+ } else {
+ for (i = 0; i < GetAudioEQBandCount(); i++) {
+ if (gain_buf[i] < GetEQMinGainVal()
+ || gain_buf[i] > GetEQMaxGainVal()) {
+ return -1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+int CTvAudio::GetCustomEQGain(int gain_buf[])
+{
+ AudioArrayCopy(gain_buf, mCustomEQGainBuf, GetAudioEQBandCount());
+ return 0;
+}
+
+int CTvAudio::SetCustomEQGain()
+{
+ int tmpEQGainBuf[128] = { 0 };
+
+ if (MappingEQGain(mCustomEQGainBuf, tmpEQGainBuf, 0) < 0) {
+ return -1;
+ }
+
+ return RealSetEQGain(tmpEQGainBuf);
+}
+
+int CTvAudio::AudioSetEQGain(int gain_buf[])
+{
+ int tmpEQGainBuf[128] = { 0 };
+
+ AudioArrayCopy(mCustomEQGainBuf, gain_buf, GetAudioEQBandCount());
+
+ if (MappingEQGain(mCustomEQGainBuf, tmpEQGainBuf, 0) < 0) {
+ return -1;
+ }
+
+ return RealSetEQGain(tmpEQGainBuf);
+}
+
+int CTvAudio::handleEQGainBeforeSet(int src_buf[], int dst_buf[])
+{
+ int i = 0, nMinGain, nMaxGain, handle_wall_effect_flag;
+
+ nMinGain = GetEQMinGainVal();
+ nMaxGain = GetEQMaxGainVal();
+
+ handle_wall_effect_flag = 0;
+
+ if (GetAudioWallEffect() == CC_SWITCH_ON) {
+ if (GetAudioWallEffectTypeCfg() == 0) {
+ handle_wall_effect_flag = 1;
+ }
+ }
+
+ if (handle_wall_effect_flag) {
+ for (i = 0; i < GetAudioEQBandCount(); i++) {
+ dst_buf[i] = mWallEffectValueBuf[i] + src_buf[i];
+ }
+ } else {
+ for (i = 0; i < GetAudioEQBandCount(); i++) {
+ dst_buf[i] = src_buf[i];
+ }
+ }
+
+ for (i = 0; i < GetAudioEQBandCount(); i++) {
+ if (dst_buf[i] < nMinGain) {
+ dst_buf[i] = nMinGain;
+ }
+
+ if (dst_buf[i] > nMaxGain) {
+ dst_buf[i] = nMaxGain;
+ }
+
+ LOGD("%s, dst_buf[%d] = %d\n", __FUNCTION__, i, dst_buf[i]);
+ }
+
+ return 0;
+}
+
+int CTvAudio::RealSetEQGain(int gain_buf[])
+{
+ int tmpEQGainBuf[128] = { 0 };
+
+ if (CheckAudioEQGain(gain_buf, 1) < 0) {
+ return -1;
+ }
+
+ handleEQGainBeforeSet(gain_buf, tmpEQGainBuf);
+
+ mAudioEffect.SetEQValue(tmpEQGainBuf);
+
+ return 0;
+}
+
+int CTvAudio::SetSpecialModeEQGain(int tmp_val)
+{
+ int i = 0;
+ int *tmpEQPresetBufPtr = GetAudioEQPresetBufferPtr();
+ int tmpEQGainBuf[128] = { 0 };
+
+ if (tmp_val < CC_SOUND_MODE_START || tmp_val > CC_SOUND_MODE_END) {
+ tmp_val = CC_SOUND_MODE_STD;
+ }
+
+ if (tmp_val == CC_SOUND_MODE_USER) {
+ RealReadCurAudioEQGain(tmpEQGainBuf);
+ } else {
+ AudioArrayCopy(tmpEQGainBuf,
+ tmpEQPresetBufPtr + tmp_val * GetAudioEQBandCount(),
+ GetAudioEQBandCount());
+
+ for (i = 0; i < GetAudioEQBandCount(); i++) {
+ if (GetEQUIMinGainVal() != CC_EQ_DEF_UI_MIN_GAIN
+ || GetEQUIMaxGainVal() != CC_EQ_DEF_UI_MAX_GAIN) {
+ tmpEQGainBuf[i] = MappingLine(tmpEQGainBuf[i],
+ CC_EQ_DEF_UI_MIN_GAIN, CC_EQ_DEF_UI_MAX_GAIN,
+ GetEQUIMinGainVal(), GetEQUIMaxGainVal());
+ }
+ }
+ }
+
+ AudioSetEQGain(tmpEQGainBuf);
+
+ return tmp_val;
+}
+
+int CTvAudio::SetSpecialIndexEQGain(int buf_index, int w_val)
+{
+ int tmpEQGainBuf[128] = { 0 };
+
+ if (buf_index >= 0 && buf_index < GetAudioEQBandCount()) {
+ RealReadCurAudioEQGain(tmpEQGainBuf);
+ tmpEQGainBuf[buf_index] = w_val;
+
+ return AudioSetEQGain(tmpEQGainBuf);
+ }
+
+ return -1;
+}
+
+int CTvAudio::SaveSpecialIndexEQGain(int buf_index, int w_val)
+{
+ int tmpEQGainBuf[128] = { 0 };
+
+ if (buf_index >= 0 && buf_index < GetAudioEQBandCount()) {
+ RealReadCurAudioEQGain(tmpEQGainBuf);
+ tmpEQGainBuf[buf_index] = w_val;
+
+ return RealSaveCurAudioEQGain(tmpEQGainBuf, 0);
+ }
+
+ return 0;
+}
+
+// amAudio
+int CTvAudio::OpenAmAudio(unsigned int sr, int output_device)
+{
+ if (GetamAudioDisableFlagCFG() == 1) {
+ return 0;
+ }
+
+ return amAudioOpen(sr, CC_IN_USE_I2S_DEVICE, output_device);
+}
+
+int CTvAudio::CloseAmAudio(void)
+{
+ if (GetamAudioDisableFlagCFG() == 1) {
+ return 0;
+ }
+
+ return amAudioClose();
+}
+
+int CTvAudio::SetAmAudioInputSr(unsigned int sr, int output_device)
+{
+ return amAudioSetInputSr(sr, CC_IN_USE_I2S_DEVICE, output_device);
+}
+
+int CTvAudio::SetAmAudioOutputMode(int mode)
+{
+ if (mode != CC_AMAUDIO_OUT_MODE_MIX && mode != CC_AMAUDIO_OUT_MODE_DIRECT) {
+ LOGE("%s, mode error, it should be mix or direct!\n", __FUNCTION__);
+ return -1;
+ }
+
+ return amAudioSetOutputMode(mode);
+}
+
+int CTvAudio::SetAmAudioMusicGain(int gain)
+{
+ return amAudioSetMusicGain(gain);
+}
+
+int CTvAudio::SetAmAudioLeftGain(int gain)
+{
+ return amAudioSetLeftGain(gain);
+}
+
+int CTvAudio::SetAmAudioRightGain(int gain)
+{
+ return amAudioSetRightGain(gain);
+}
+
+//dump data
+int CTvAudio::SetAudioDumpDataFlag(int tmp_flag)
+{
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return amAndroidSetDumpDataFlag(tmp_flag);
+#endif
+
+#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ return amAudioSetDumpDataFlag(tmp_flag);
+#endif
+}
+
+int GetAudioDumpDataFlag()
+{
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return amAndroidGetDumpDataFlag();
+#endif
+
+#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ return amAudioGetDumpDataFlag();
+#endif
+}
+
+//LUT buffer
+static int RealCalVolDigitLUTBuf(int start_ind, int end_ind, int start_val,
+ int end_val, int lut_buf[])
+{
+ int i = 0;
+ float tmp_step = 0;
+
+ if (end_ind < start_ind) {
+ return 0;
+ }
+
+ tmp_step = (float) (end_val - start_val) / (float) (end_ind - start_ind);
+
+ for (i = start_ind; i < end_ind; i++) {
+ lut_buf[i] = start_val + (int) (tmp_step * (i - start_ind));
+ }
+
+ lut_buf[end_ind] = end_val;
+
+ return 1;
+}
+
+static int CalVolumeDigitLUTBuf(int lut_buf_type, int lut_sel_flag, int lut_buf[])
+{
+ int i = 0, point_cnt = 0;
+ int *tmpNoLinePointsDataBuffer = NULL;
+ int *tmpNoLinePointsIndexBuffer = NULL;
+
+ if (lut_sel_flag == CC_LUT_SEL_TV) {
+ tmpNoLinePointsIndexBuffer = GetAudioAmplifierNoLinePointsIndexBuffer(
+ lut_buf_type, CC_GET_LUT_TV);
+ tmpNoLinePointsDataBuffer = GetAudioAmplifierNoLinePointsDataBuffer(
+ lut_buf_type, CC_GET_LUT_TV);
+ } else if (lut_sel_flag == CC_LUT_SEL_AV) {
+ tmpNoLinePointsIndexBuffer = GetAudioAmplifierNoLinePointsIndexBuffer(
+ lut_buf_type, CC_GET_LUT_AV);
+ tmpNoLinePointsDataBuffer = GetAudioAmplifierNoLinePointsDataBuffer(
+ lut_buf_type, CC_GET_LUT_AV);
+ } else if (lut_sel_flag == CC_LUT_SEL_COMP) {
+ tmpNoLinePointsIndexBuffer = GetAudioAmplifierNoLinePointsIndexBuffer(
+ lut_buf_type, CC_GET_LUT_COMP);
+ tmpNoLinePointsDataBuffer = GetAudioAmplifierNoLinePointsDataBuffer(
+ lut_buf_type, CC_GET_LUT_COMP);
+ } else if (lut_sel_flag == CC_LUT_SEL_HDMI) {
+ tmpNoLinePointsIndexBuffer = GetAudioAmplifierNoLinePointsIndexBuffer(
+ lut_buf_type, CC_GET_LUT_HDMI);
+ tmpNoLinePointsDataBuffer = GetAudioAmplifierNoLinePointsDataBuffer(
+ lut_buf_type, CC_GET_LUT_HDMI);
+ } else if (lut_sel_flag == CC_LUT_SEL_VGA) {
+ tmpNoLinePointsIndexBuffer = GetAudioAmplifierNoLinePointsIndexBuffer(
+ lut_buf_type, CC_GET_LUT_VGA);
+ tmpNoLinePointsDataBuffer = GetAudioAmplifierNoLinePointsDataBuffer(
+ lut_buf_type, CC_GET_LUT_VGA);
+ } else if (lut_sel_flag == CC_LUT_SEL_MPEG) {
+ tmpNoLinePointsIndexBuffer = GetAudioAmplifierNoLinePointsIndexBuffer(
+ lut_buf_type, CC_GET_LUT_MPEG);
+ tmpNoLinePointsDataBuffer = GetAudioAmplifierNoLinePointsDataBuffer(
+ lut_buf_type, CC_GET_LUT_MPEG);
+ }
+
+ lut_buf[0] = CC_MIN_DAC_VOLUME;
+ point_cnt = GetAudioAmplifierMasterNoLinePointsCount();
+
+ if (tmpNoLinePointsIndexBuffer != NULL
+ && tmpNoLinePointsDataBuffer != NULL) {
+ for (i = 0; i < (point_cnt - 1); i++) {
+ RealCalVolDigitLUTBuf(tmpNoLinePointsIndexBuffer[i],
+ tmpNoLinePointsIndexBuffer[i + 1],
+ tmpNoLinePointsDataBuffer[i],
+ tmpNoLinePointsDataBuffer[i + 1], lut_buf);
+ }
+ }
+
+ return 1;
+}
+
+void CTvAudio::RealHandleVolumeDigitLUTBuf(int lut_buf_type, int lut_sel_flag,
+ int vol_buf[], int add_srs_gain_flag, int add_eq_gain_flag)
+{
+ int i;
+ int TempVolumeDigitLutBuf[CC_LUT_BUF_SIZE] = { 0 };
+
+ if (vol_buf == NULL) {
+ CalVolumeDigitLUTBuf(lut_buf_type, lut_sel_flag, TempVolumeDigitLutBuf);
+ } else {
+ for (i = 0; i < CC_LUT_BUF_SIZE; i++) {
+ TempVolumeDigitLutBuf[i] = vol_buf[i];
+ }
+ }
+
+ if (lut_buf_type == CC_LUT_BUF_MASTER) {
+ mAudioAlsa.SetMainVolDigitLutBuf(TempVolumeDigitLutBuf);
+ } else if (lut_buf_type == CC_LUT_BUF_SUPPERBASS) {
+ mAudioAlsa.SetSupperBassVolDigitLutBuf(TempVolumeDigitLutBuf);
+ }
+}
+
+void CTvAudio::AudioSetVolumeDigitLUTBuf(int lut_sel_flag, int add_srs_gain_flag,
+ int add_eq_gain_flag, int audio_std)
+{
+ int cfg_get_index = CC_LUT_SEL_MPEG;
+ int *tmpDefDigitLutBuf = NULL;
+
+ if (lut_sel_flag == CC_LUT_SEL_TV) {
+ cfg_get_index = CC_GET_LUT_TV;
+ } else if (lut_sel_flag == CC_LUT_SEL_AV) {
+ cfg_get_index = CC_GET_LUT_AV;
+ } else if (lut_sel_flag == CC_LUT_SEL_COMP) {
+ cfg_get_index = CC_GET_LUT_COMP;
+ } else if (lut_sel_flag == CC_LUT_SEL_HDMI) {
+ cfg_get_index = CC_GET_LUT_HDMI;
+ } else if (lut_sel_flag == CC_LUT_SEL_VGA) {
+ cfg_get_index = CC_GET_LUT_VGA;
+ } else if (lut_sel_flag == CC_LUT_SEL_MPEG) {
+ cfg_get_index = CC_GET_LUT_MPEG;
+ }
+
+ if (GetAudioAmplifierMasterNoLineSwitchFlag() == 0) {
+ tmpDefDigitLutBuf = GetAudioAmplifierMasterVolumeLUTBufferPtr(
+ cfg_get_index, audio_std);
+ if (tmpDefDigitLutBuf != NULL) {
+ RealHandleVolumeDigitLUTBuf(CC_LUT_BUF_MASTER, lut_sel_flag,
+ tmpDefDigitLutBuf, add_srs_gain_flag, add_eq_gain_flag);
+ }
+ } else {
+ RealHandleVolumeDigitLUTBuf(CC_LUT_BUF_MASTER, lut_sel_flag, NULL,
+ add_srs_gain_flag, add_eq_gain_flag);
+ }
+
+ if (GetAudioSupperBassModuleDisableCFG() == 0) {
+ if (GetAudioAmplifierSupperBassNoLineSwitchFlag() == 0) {
+ tmpDefDigitLutBuf = GetAudioAmplifierSupperBassVolumeLUTBufferPtr(
+ cfg_get_index, audio_std);
+ if (tmpDefDigitLutBuf != NULL) {
+ RealHandleVolumeDigitLUTBuf(CC_LUT_BUF_SUPPERBASS, lut_sel_flag,
+ tmpDefDigitLutBuf, add_srs_gain_flag, add_eq_gain_flag);
+ }
+ } else {
+ RealHandleVolumeDigitLUTBuf(CC_LUT_BUF_SUPPERBASS, lut_sel_flag,
+ NULL, add_srs_gain_flag, add_eq_gain_flag);
+ }
+ }
+}
+
+int CTvAudio::openTvAudio(int sr)
+{
+
+ char prop1[256];
+ char prop2[256];
+ property_get("audio.headset_plug.enable", prop1, "null");
+ property_get("audio.output.double_output", prop2, "null");
+ if(strcmp(prop1, "1") == 0) {
+ if(strcmp(prop2, "1") == 0) {
+ amAudioSetTvDoubleOutput(1, sr, CC_IN_USE_I2S_DEVICE, CC_OUT_USE_AMAUDIO);
+ audio_device_switch = 1;
+ } else {
+ amAudioSetTvDoubleOutput(0, sr, CC_IN_USE_I2S_DEVICE, CC_OUT_USE_ANDROID);
+ audio_device_switch = 0;
+ }
+ } else {
+ amAudioSetTvDoubleOutput(1, sr, CC_IN_USE_I2S_DEVICE, CC_OUT_USE_AMAUDIO);
+ audio_device_switch = 1;
+ }
+ return 0;
+}
+
+// audio data init & uninit
+int CTvAudio::AudioDataInitForDtv()
+{
+ RealSetSRS();
+ SetCustomEQGain();
+
+ return 0;
+}
+
+int CTvAudio::AudioDataInit(int sr, bool enableNoiseGate)
+{
+ const char *value;
+ sr = HanldeAudioInputSr(sr);
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ if (GetDisableResetSystemFrameSize() == 0) {
+ if (GetDisableReset_System_framesizeCFG() != 0x55)
+ reset_system_framesize(48000, sr);
+ }
+
+ amAndroidInit(0, CC_FLAG_CREATE_RECORD | CC_FLAG_CREATE_TRACK, 48000, sr, enableNoiseGate);
+#endif
+
+#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ value = config_get_str ( "TV", "tvin.2d4G.headset.en", "null" );
+ if ( strcmp ( value, "enable" ) == 0 )
+ openTvAudio(sr);
+ else
+ OpenAmAudio(sr, CC_OUT_USE_AMAUDIO);
+#endif
+
+ RealSetSRS();
+ SetCustomEQGain();
+
+ return 0;
+}
+
+int CTvAudio::AudioDataUnInit()
+{
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return amAndroidUninit(0);
+#endif
+
+#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ return CloseAmAudio();
+#endif
+}
+
+int CTvAudio::AudioChangeSampleRate(int sr)
+{
+ sr = HanldeAudioInputSr(sr);
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ if (amAndroidSetTrackerSr(sr) != 0) {
+ return -1;
+ }
+#endif
+
+#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ if (SetAmAudioInputSr(sr, CC_OUT_USE_AMAUDIO) != 0) {
+ return -1;
+ }
+#endif
+
+ RealSetSRS();
+ SetCustomEQGain();
+
+ return 0;
+}
+
+int CTvAudio::AudioNewAudioEffects(void)
+{
+ return mAudioEffect.amAndroidNewAudioEffects();
+}
+
+void CTvAudio::AudioFreeAudioEffects(void)
+{
+ return mAudioEffect.amAndroidFreeAudioEffects();
+}
+
+int CTvAudio::AudioSetAudioInSource(int audio_src_in_type)
+{
+ return mAudioAlsa.SetAudioInSource(audio_src_in_type);
+}
+
+int CTvAudio::AudioSetAudioSourceType(int source_type)
+{
+ return mAudioAlsa.SetDacAudioSourceType(source_type);
+}
+
+int CTvAudio::AudioLineInSelectChannel(int audio_channel)
+{
+ LOGD ("%s, audio_channel = %d", __FUNCTION__, audio_channel);
+ mAudioAlsa.SetInternalDacLineInSelectChannel(audio_channel);
+ return 0;
+}
+int CTvAudio::SetKalaokIO(int level)
+{
+ LOGD ("%s, SetKalaokIO = %d", __FUNCTION__, level);
+ {
+ const char *config_value;
+ config_value = config_get_str("TV", "audio.switch.karaok.av.enable", "null");
+
+ if (strtoul(config_value, NULL, 10) == 1) {
+ mAudioAlsa.SetAudioSwitchIO(level);
+ }
+ }
+ return 0;
+}
+
+int CTvAudio::AudioSetLineInCaptureVolume(int l_vol, int r_vol)
+{
+ mAudioAlsa.SetInternalDacLineInCaptureVolume(l_vol, r_vol);
+ return 0;
+}
+
+// Audio Ctl Init
+void CTvAudio::AudioCtlInitializeLoad()
+{
+ int tmp_val = 0;
+ int init_mute_type = 0;
+
+ LOGD("%s, entering...\n", __FUNCTION__);
+
+ createMonitorUsbHostBusThread();
+
+ init_mute_type = GetAudioAVOutInitMuteStatusCFG();
+
+ UnInitSetTvAudioCard();
+
+ if (init_mute_type == 1) {
+ SetAudioAVOutMute (CC_AUDIO_MUTE);
+ } else {
+ SetAudioAVOutMute (CC_AUDIO_UNMUTE);
+ }
+
+ SetAudioSPDIFMute (CC_AUDIO_UNMUTE);
+
+ tmp_val = GetAudioDumpDataEnableFlagCfg();
+ SetAudioDumpDataFlag(tmp_val);
+
+ mAudioAlsa.SetMixerBypassSwitch (CC_SWITCH_OFF);
+ mAudioAlsa.SetMixerDacSwitch (CC_SWITCH_ON);
+
+ LoadAudioCtl();
+
+ AudioSetVolumeDigitLUTBuf(CC_LUT_SEL_MPEG, 1, 1, -1);
+
+ AudioCtlInitializeSet();
+}
+
+void CTvAudio::LoadAudioCtl()
+{
+ // Get Current Audio Volume
+ LoadCurAudioMasterVolume();
+
+ // Get Current Audio Balance
+ LoadCurAudioBalance();
+
+ // Get Current Supper Bass Switch
+ LoadCurAudioSupperBassSwitch();
+
+ // Get Current Supper Bass Volume
+ LoadCurAudioSupperBassVolume();
+
+ // Get Current SRSSurround
+ LoadCurAudioSrsSurround();
+
+ // Get Current SRS DialogClarity
+ LoadCurAudioSrsDialogClarity();
+
+ // Get Current SRS TruBass
+ LoadCurAudioSrsTruBass();
+
+ // Get Current Audio Sound Mode
+ LoadCurAudioSoundMode();
+
+ // Get Current Audio Bass and Treble
+ LoadCurAudioBassVolume();
+ LoadCurAudioTrebleVolume();
+
+ // Get Current Wall Effect
+ LoadCurAudioWallEffect();
+
+ // Get Current spdif switch
+ LoadCurAudioSPDIFSwitch();
+
+ // Get Current spdif mode
+ LoadCurAudioSPDIFMode();
+
+ // Get Current EQ mode
+ LoadCurAudioEQMode();
+
+ // Get Current EQ Gain
+ LoadCurAudioEQGain();
+}
+
+void CTvAudio::InitSetAudioCtl()
+{
+ // Set Current Audio balance value
+ SetAudioBalance(GetAudioBalance());
+
+ // Set Current Audio Volume
+ SetAudioMasterVolume(GetAudioMasterVolume());
+
+ // Set Current Supper Bass Volume
+ SetAudioSupperBassVolume(GetAudioSupperBassVolume());
+
+ // Set Current Audio Sound Mode
+ SetAudioSoundMode(GetAudioSoundMode());
+
+ // Set Current Audio SPDIF Switch
+ SetAudioSPDIFSwitch(GetCurAudioSPDIFSwitch());
+
+ // Set Current Audio SPDIF mode
+ SetAudioSPDIFMode(GetCurAudioSPDIFMode());
+}
+
+static int gAudioFirstInitSetFlag = 0;
+static pthread_mutex_t first_init_set_flag_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+int CTvAudio::GetAudioFirstInitSetFlag()
+{
+ int tmp_val = 0;
+
+ pthread_mutex_lock(&first_init_set_flag_mutex);
+ tmp_val = gAudioFirstInitSetFlag;
+ pthread_mutex_unlock(&first_init_set_flag_mutex);
+
+ return tmp_val;
+}
+
+void *CTvAudio::AudioCtlInitSetMain(void *data)
+{
+ char prop_value[PROPERTY_VALUE_MAX];
+
+ LOGD("%s, entering...\n", __FUNCTION__);
+ pthread_mutex_lock(&first_init_set_flag_mutex);
+
+ if (gAudioFirstInitSetFlag == 0) {
+ AudioNewAudioEffects();
+ RealSetSRS();
+ AudioSetVolumeDigitLUTBuf(CC_LUT_SEL_MPEG, 1, 1, -1);
+ InitSetAudioCtl();
+ gAudioFirstInitSetFlag = 1;
+ }
+
+ pthread_mutex_unlock(&first_init_set_flag_mutex);
+
+ LOGD("%s, exiting...\n", __FUNCTION__);
+
+ return NULL;
+}
+
+void CTvAudio::AudioCtlInitializeSet()
+{
+ AudioCtlInitSetMain (NULL);
+ return;
+}
+
+void CTvAudio::AudioCtlInit()
+{
+ InitSetTvAudioCard();
+}
+
+void CTvAudio::AudioCtlUninit()
+{
+ int l_vol = 0, r_vol = 0;
+ int audio_channel = -1;
+ int oldMuteStatus;
+
+ oldMuteStatus = GetAudioMuteForTv();
+ SetAudioMuteForTv (CC_AUDIO_MUTE);
+
+ AudioSetAudioInSource (CC_AUDIO_IN_SOURCE_LINEIN);
+ AudioSetAudioSourceType (AUDIO_MPEG_SOURCE);
+
+ AudioDataUnInit();
+
+ SetAudioVolumeCompensationVal(0);
+
+ AudioSetVolumeDigitLUTBuf(CC_LUT_SEL_MPEG, 1, 1, -1);
+ SetAudioMasterVolume(GetAudioMasterVolume());
+
+ SetAudioMuteForTv(oldMuteStatus);
+
+ UnInitSetTvAudioCard();
+}
+
+int CTvAudio::AudioSetRecordDataZero(bool flag)
+{
+ return 0;
+}
+
+int CTvAudio::AudioHandleHeadsetPlugIn()
+{
+ return 0;
+}
+
+int CTvAudio::AudioHandleHeadsetPullOut()
+{
+ return 0;
+}
+
+int CTvAudio::amAudioSetDoubleOutputSwitch(int en_val)
+{
+ if(en_val == 1) {
+ property_set("audio.output.enable", "1");
+ property_set("audio.output.double_output", "1");
+ }
+ if(en_val == 0) {
+ property_set("audio.output.enable", "0");
+ property_set("audio.output.double_output", "0");
+ }
+ return 0;
+}
+
+int CTvAudio::setAudioPcmPlaybackVolume(int val)
+{
+ int pcm_volume = 0;
+ pcm_volume = val / 2;
+ if(pcm_volume > 24) pcm_volume = 24;
+ //return SetAudioPcmPlaybackVolume(pcm_volume);
+ return 0;
+}
+
+int CTvAudio::UsbAudioOuputModuleSwitch(int sw)
+{
+ if(sw == 1)
+ property_set("persist.tv.audio_output_enable", "1");
+ if(sw == 0)
+ property_set("persist.tv.audio_output_enable", "0");
+ return 0;
+}
+
+int CTvAudio::GetAmAudioSetDoubleOutputSwitch()
+{
+ char prop2[256];
+ property_get("audio.output.double_output", prop2, "null");
+ if (strcmp(prop2, "0") == 0 || strcmp(prop2, "null") == 0) {
+ return 0;
+ } else if (strcmp(prop2, "1") == 0) {
+ return 1;
+ }
+ return 0;
+}
+
+int CTvAudio::GetCurUsbAudioOuputModuleSwitch()
+{
+ char prop1[256];
+ property_get("audio.output.enable", prop1, "null");
+ if (strcmp(prop1, "0") == 0 || strcmp(prop1, "null") == 0) {
+ return 0;
+ } else if (strcmp(prop1, "1") == 0) {
+ return 1;
+ }
+ return 0;
+}
+
+int CTvAudio::amAudioSetTvDoubleOutput(int en_val, unsigned int sr, int input_device,
+ int output_device)
+{
+ return amAudioSetDoubleOutput(en_val, sr, input_device, output_device);
+}
+int CTvAudio::HanldeAudioInputSr(unsigned int sr)
+{
+ int tmp_cfg = 0;
+
+ tmp_cfg = GetAudioResampleTypeCFG();
+ if (tmp_cfg & CC_AUD_RESAMPLE_TYPE_HW) {
+ mAudioAlsa.SetHardwareResample(sr);
+ } else {
+ mAudioAlsa.SetHardwareResample(-1);
+ }
+
+ if (!(tmp_cfg & CC_AUD_RESAMPLE_TYPE_SW)) {
+ sr = 48000;
+ }
+
+ return sr;
+}
+
+void CTvAudio::AudioSetNoiseGateThreshold(int thresh)
+{
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ amAndroidSetNoiseGateThreshold(thresh);
+#endif
+
+#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ return;
+#endif
+}
+
+int CTvAudio::AudioSSMRestoreDefaultSetting()
+{
+ int i = 0, tmp_val = 0;
+ int nMinUIVol = 0, nMaxUIVol = 0;
+ int *tmp_ptr = NULL;
+ int tmpEQGainBuf[128] = { 0 };
+ unsigned char tmp_buf[CC_NO_LINE_POINTS_MAX_CNT] = { 0 };
+
+ // Save noline points
+ tmp_val = GetAudioAmplifierMasterNoLinePointsCount();
+
+ for (i = 0; i < CC_LUT_SEL_COUNT; i++) {
+ tmp_ptr = GetAudioAmplifierMasterNoLinePointsDefDataBuffer(i);
+ AudioArrayCopy(tmp_buf, tmp_ptr, CC_NO_LINE_POINTS_MAX_CNT);
+ SSMSaveAudioNoLinePoints(i * tmp_val, tmp_val, tmp_buf);
+ }
+
+ // Save Current Audio Volume
+ SaveCurAudioMasterVolume (CC_DEF_SOUND_VOL);
+
+ // Save Current Audio Balance
+ SaveCurAudioBalance (CC_DEF_SOUND_BALANCE_VAL);
+
+ // Save Current Supper Bass Switch
+ SaveCurAudioSupperBassSwitch (CC_SWITCH_OFF);
+
+ // Save Current Supper Bass Volume
+ SaveCurAudioSupperBassVolume (CC_DEF_SUPPERBASS_VOL);
+
+ // Save Current SRSSurround
+ SaveCurAudioSrsSurround(CC_SWITCH_OFF);
+
+ // Save Current SRS DialogClarity
+ SaveCurAudioSrsDialogClarity(CC_SWITCH_OFF);
+
+ // Save Current SRS TruBass
+ SaveCurAudioSrsTruBass(CC_SWITCH_OFF);
+
+ // Save Current Audio Sound Mode
+ SaveCurAudioSoundMode (CC_SOUND_MODE_STD);
+
+ // Save Current Wall Effect
+ SaveCurAudioWallEffect(CC_SWITCH_OFF);
+
+ // Save Current spdif switch
+ SaveCurAudioSPDIFSwitch (CC_SWITCH_ON);
+
+ // Save Current spdif mode
+ SaveCurAudioSPDIFMode (CC_SPDIF_MODE_PCM);
+
+ // Save Current EQ mode
+ SaveCurAudioEQMode (CC_EQ_MODE_NOMAL);
+
+ // Save Current EQ Gain
+ RestoreToAudioDefEQGain(tmpEQGainBuf);
+
+ // Save Current Audio Bass and Treble
+ nMinUIVol = GetBassUIMinGainVal();
+ nMaxUIVol = GetBassUIMaxGainVal();
+ RealSaveCurAudioBassVolume((nMinUIVol + nMaxUIVol) / 2, 0);
+
+ nMinUIVol = GetTrebleUIMinGainVal();
+ nMaxUIVol = GetTrebleUIMaxGainVal();
+ RealSaveCurAudioTrebleVolume((nMinUIVol + nMaxUIVol) / 2, 0);
+
+ return 0;
+}
+
+
+static const char *gDefCapturePropName = "snd.card.default.card.capture";
+
+int CTvAudio::InitSetTvAudioCard()
+{
+ int i = 0, totle_num = 0, capture_ind = 0;
+ char tmp_buf[32] = { 0 };
+ char tv_card_name[64] = { 0 };
+ char prop_value[PROPERTY_VALUE_MAX];
+
+#ifdef BOARD_ALSA_AUDIO_TINY
+#else // legacy alsa lib
+ snd_card_refresh_info();
+#endif
+
+ if (GetTvAudioCardNeedSet()) {
+ memset(prop_value, '\0', PROPERTY_VALUE_MAX);
+ property_get("snd.card.totle.num", prop_value, "0");
+
+ totle_num = strtoul(prop_value, NULL, 10);
+ LOGD("%s, totle number = %d\n", __FUNCTION__, totle_num);
+ totle_num = 8;
+
+ GetTvAudioCardName(tv_card_name);
+
+ for (i = 0; i < totle_num; i++) {
+ sprintf(tmp_buf, "snd.card.%d.name", i);
+ memset(prop_value, '\0', PROPERTY_VALUE_MAX);
+ property_get(tmp_buf, prop_value, "null");
+
+ LOGD("%s, key string \"%s\", value string \"%s\".\n", __FUNCTION__,
+ tmp_buf, prop_value);
+
+ if (strcmp(prop_value, tv_card_name) == 0) {
+ break;
+ }
+ }
+
+ capture_ind = i;
+
+ if (capture_ind == totle_num) {
+ capture_ind = -1;
+ LOGE("%s, can't find tv card \"%s\".\n", __FUNCTION__,
+ tv_card_name);
+ }
+ } else {
+ capture_ind = -1;
+ }
+
+ sprintf(tmp_buf, "%d", capture_ind);
+ property_set(gDefCapturePropName, tmp_buf);
+ LOGD("%s, set \"%s\" as \"%s\".\n", __FUNCTION__, gDefCapturePropName,
+ tmp_buf);
+
+ return 0;
+}
+
+int CTvAudio::UnInitSetTvAudioCard()
+{
+ char tmp_buf[32] = { 0 };
+
+#ifdef BOARD_ALSA_AUDIO_TINY
+#else // legacy alsa lib
+ snd_card_refresh_info();
+#endif // BOARD_ALSA_AUDIO_TINY
+ sprintf(tmp_buf, "%d", -1);
+ property_set(gDefCapturePropName, tmp_buf);
+ LOGD("%s, set \"%s\" as \"%s\".\n", __FUNCTION__, gDefCapturePropName,
+ tmp_buf);
+
+ return 0;
+}
+
+#define CS_SPDIF_MODE_DEV_PATH "/sys/class/audiodsp/digital_raw"
+
+int CTvAudio::SetSPDIFMode(int mode_val)
+{
+ FILE *spdif_mode_fp = NULL;
+
+ spdif_mode_fp = fopen(CS_SPDIF_MODE_DEV_PATH, "w");
+ if (spdif_mode_fp == NULL) {
+ LOGE("%s, Open file %s error(%s)!\n", __FUNCTION__, CS_SPDIF_MODE_DEV_PATH, strerror(errno));
+ return -1;
+ }
+
+ if (mode_val == CC_SPDIF_MODE_PCM) {
+ fprintf(spdif_mode_fp, "%d", 0);
+ } else if(mode_val == CC_SPDIF_MODE_RAW ) {
+ fprintf(spdif_mode_fp, "%d", 1);
+ }
+
+ fclose(spdif_mode_fp);
+ spdif_mode_fp = NULL;
+
+ return 0;
+}
+//0 is ??? 1 is ????????
+int CTvAudio::SwitchAVOutBypass(int sw)
+{
+ if (sw == 0 ) {
+ mAudioAlsa.SetMixerBypassSwitch ( CC_SWITCH_OFF );
+ mAudioAlsa.SetMixerDacSwitch ( CC_SWITCH_ON );
+ } else {
+ mAudioAlsa.SetMixerBypassSwitch ( CC_SWITCH_ON );
+ mAudioAlsa.SetMixerDacSwitch ( CC_SWITCH_OFF );
+ }
+ return 0;
+}
+
+int CTvAudio::SetAudioSwitchIO(int value)
+{
+ return mAudioAlsa.SetAudioSwitchIO( value);
+}
+int CTvAudio::SetOutput_Swap(int value)
+{
+ return mAudioAlsa.SetOutput_Swap( value);
+}
diff --git a/tvapi/libtv/audio/audio_api.h b/tvapi/libtv/audio/audio_api.h
index 89e7356..23918be 100644
--- a/tvapi/libtv/audio/audio_api.h
+++ b/tvapi/libtv/audio/audio_api.h
@@ -1,324 +1,323 @@
-#ifndef __TV_AUDIO_API_H__
-#define __TV_AUDIO_API_H__
-
-#include "tvsetting/audio_cfg.h"
-#include "audio_alsa.h"
-#include "audio_effect.h"
-
-enum CC_AUDIO_SWITCH_STATUS {
- CC_SWITCH_OFF,
- CC_SWITCH_ON,
-};
-
-enum CC_AMAUDIO_OUT_MODE {
- CC_AMAUDIO_OUT_MODE_DIRECT,
- CC_AMAUDIO_OUT_MODE_MIX,
-};
-
-static const int CC_SPDIF_MODE_PCM = 0;
-static const int CC_SPDIF_MODE_RAW = 1;
-
-static const int CC_MIN_SOUND_VOL = 0;
-static const int CC_MAX_SOUND_VOL = (100);
-static const int CC_DEF_SOUND_VOL = (30);
-static const int CC_MIN_SUPPERBASS_VOL = (0);
-static const int CC_MAX_SUPPERBASS_VOL = (100);
-static const int CC_DEF_SUPPERBASS_VOL = (50);
-
-static const int CC_VOLUME_COMPENSATION_MIN_VAL = (-20);
-static const int CC_VOLUME_COMPENSATION_MAX_VAL = (20);
-static const int CC_VOLUME_COMPENSATION_DEF_VAL = (0);
-
-static const int CC_DEF_BASS_TREBLE_VOL = 50;
-static const int CC_EQ_BASS_IND = 1;
-static const int CC_EQ_TREBLE_IND = 3;
-static const int CC_EQ_DEF_UI_MIN_GAIN = 0;
-static const int CC_EQ_DEF_UI_MAX_GAIN = 100;
-static const int CC_LUT_SEL_TV = 0;
-static const int CC_LUT_SEL_AV = 1;
-static const int CC_LUT_SEL_COMP = 2;
-static const int CC_LUT_SEL_HDMI = 3;
-static const int CC_LUT_SEL_VGA = 4;
-static const int CC_LUT_SEL_MPEG = 5;
-static const int CC_LUT_SEL_COUNT = 6;
-
-
-enum CC_AUD_SOUND_MODE {
- CC_SOUND_MODE_START = 0,
- CC_SOUND_MODE_STD = 0,
- CC_SOUND_MODE_MUSIC,
- CC_SOUND_MODE_NEWS,
- CC_SOUND_MODE_THEATER,
- CC_SOUND_MODE_USER,
- CC_SOUND_MODE_END = CC_SOUND_MODE_USER
-};
-
-enum CC_AUD_EQ_MODE {
- CC_EQ_MODE_START = 0,
- CC_EQ_MODE_NOMAL = 0,
- CC_EQ_MODE_POP,
- CC_EQ_MODE_JAZZ,
- CC_EQ_MODE_ROCK,
- CC_EQ_MODE_CLASSIC,
- CC_EQ_MODE_DANCE,
- CC_EQ_MODE_PARTY,
- CC_EQ_MODE_BASS,
- CC_EQ_MODE_TREBLE,
- CC_EQ_MODE_CUSTOM,
- CC_EQ_MODE_END = CC_EQ_MODE_CUSTOM
-};
-class CTvAudio
-{
-public:
- CTvAudio();
- ~CTvAudio();
- //Audio Mute
- int SetAudioMuteForSystem(int);
- int GetAudioMuteForSystem();
- int SetAudioMuteForTv(int );
- int GetAudioMuteForTv();
- int SetAudioAVOutMute(int muteStatus);
- int GetAudioAVOutMute();
- int SetAudioSPDIFMute(int muteStatus);
- int GetAudioSPDIFMute();
-
- //Audio Master Volume
- int SetAudioMasterVolume(int tmp_vol);
- int GetAudioMasterVolume();
- int SaveCurAudioMasterVolume(int tmp_vol);
- int GetCurAudioMasterVolume();
-
- //Audio Balance
- int SetAudioBalance(int tmp_val);
- int GetAudioBalance();
- int SaveCurAudioBalance(int tmp_val);
- int GetCurAudioBalance();
-
- //Audio SupperBass Volume
- int SetAudioSupperBassVolume(int tmp_vol);
- int GetAudioSupperBassVolume();
- int SaveCurAudioSupperBassVolume(int tmp_vol);
- int GetCurAudioSupperBassVolume();
-
- //Audio SupperBass Switch
- int SetAudioSupperBassSwitch(int tmp_val);
- int GetAudioSupperBassSwitch();
- int SaveCurAudioSupperBassSwitch(int tmp_val);
- int GetCurAudioSupperBassSwitch();
-
- //Audio SRS Surround switch
- int SetAudioSRSSurround(int tmp_val);
- int GetAudioSRSSurround();
- int SaveCurAudioSrsSurround(int tmp_val);
- int GetCurAudioSRSSurround();
-
- //Audio SRS Dialog Clarity
- int SetAudioSrsDialogClarity(int tmp_val);
- int GetAudioSrsDialogClarity();
- int SaveCurAudioSrsDialogClarity(int tmp_val);
- int GetCurAudioSrsDialogClarity();
-
- //Audio SRS Trubass
- int SetAudioSrsTruBass(int tmp_val);
- int GetAudioSrsTruBass();
- int SaveCurAudioSrsTruBass(int tmp_val);
- int GetCurAudioSrsTruBass();
-
- //Audio SPDIF switch
- int SetAudioSPDIFSwitch(int tmp_val);
- int GetCurAudioSPDIFSwitch();
- int SaveCurAudioSPDIFSwitch(int tmp_val);
-
- //Audio SPDIF Mode
- int SetAudioSPDIFMode(int tmp_val);
- int GetCurAudioSPDIFMode();
- int SaveCurAudioSPDIFMode(int tmp_val);
-
- //Audio Bass
- int SetAudioBassVolume(int tmp_vol);
- int GetAudioBassVolume();
- int SaveCurAudioBassVolume(int tmp_vol);
- int GetCurAudioBassVolume();
-
- //Audio Treble
- int SetAudioTrebleVolume(int tmp_vol);
- int GetAudioTrebleVolume();
- int SaveCurAudioTrebleVolume(int tmp_vol);
- int GetCurAudioTrebleVolume();
-
- //Audio Sound Mode
- int SetAudioSoundMode(int tmp_val);
- int GetAudioSoundMode();
- int SaveCurAudioSoundMode(int tmp_val);
- int GetCurAudioSoundMode();
-
- //Audio Wall Effect
- int SetAudioWallEffect(int tmp_val);
- int GetAudioWallEffect();
- int SaveCurAudioWallEffect(int tmp_val);
- int GetCurAudioWallEffect();
-
- //Audio EQ Mode
- int SetAudioEQMode(int tmp_val);
- int GetAudioEQMode();
- int SaveCurAudioEQMode(int tmp_val);
- int GetCurAudioEQMode();
-
- //Audio EQ Gain
- int GetAudioEQRange(int range_buf[]);
- int GetAudioEQBandCount();
- int SetAudioEQGain(int gain_buf[]);
- int GetAudioEQGain(int gain_buf[]);
- int GetCurAudioEQGain(int gain_buf[]);
- int SaveCurAudioEQGain(int gain_buf[]);
- int SetAudioEQSwitch(int switch_val);
-
- // amAudio
- int OpenAmAudio(unsigned int sr, int output_device);
- int CloseAmAudio(void);
- int SetAmAudioInputSr(unsigned int sr, int output_device);
- int SetAmAudioOutputMode(int mode);
- int SetAmAudioMusicGain(int gain);
- int SetAmAudioLeftGain(int gain);
- int SetAmAudioRightGain(int gain);
-
- int SetAudioVolumeCompensationVal(int tmp_vol_comp_val);
- int GetAudioVolumeCompensationVal();
-
- int AudioLineInSelectChannel(int audio_channel);
- int AudioSetLineInCaptureVolume(int l_vol, int r_vol);
- int SetKalaokIO(int level);
-
- int AudioHandleHeadsetPlugIn();
- int AudioHandleHeadsetPullOut();
- int amAudioSetDoubleOutputSwitch(int en_val);
- int setAudioPcmPlaybackVolume(int val);
- int UsbAudioOuputModuleSwitch(int sw);
- int GetAmAudioSetDoubleOutputSwitch();
- int GetCurUsbAudioOuputModuleSwitch();
- int amAudioSetTvDoubleOutput(int en_val, unsigned int sr, int input_device, int output_device);
-
- void AudioCtlInitializeLoad();
- void AudioCtlInit();
- void AudioCtlUninit();
- void AudioSetVolumeDigitLUTBuf(int lut_sel_flag, int add_srs_gain_flag, int add_eq_gain_flag, int audio_std);
- int openTvAudio(int sr);
-
- int AudioDataInitForDtv();
- int AudioDataInit(int sr, bool enableNoiseGate);
- int AudioDataUnInit();
- int AudioChangeSampleRate(int sr);
- int AudioSetAudioInSource(int audio_src_in_type);
- int AudioSetAudioSourceType(int source_type);
- int AudioSSMRestoreDefaultSetting();
- int AudioRegisterInterface();
- int AudioGetSessionId();
- int AudioNewAudioEffects(void);
- void AudioFreeAudioEffects(void);
- int SetAudioDumpDataFlag(int tmp_flag);
- int GetAudioDumpDataFlag();
- int SetAudioLeftRightMode(unsigned int mode);
- unsigned int GetAudioLeftRightMode();
- int AudioSetMicroPhoneSwitch(int switch_val);
- void AudioSetNoiseGateThreshold(int thresh);
- int AudioSetRecordDataZero(bool flag);
- int SwitchAVOutBypass (int);
- int SetAudioSwitchIO(int value);
- int SetOutput_Swap(int value);
-
-private:
- void RealHandleVolumeDigitLUTBuf(int lut_buf_type, int lut_sel_flag,
- int vol_buf[], int add_srs_gain_flag, int add_eq_gain_flag);
- int handleAudioSPDIFMute(int muteStatus);
- int LoadCurAudioSPDIFMode();
- int LoadCurAudioMasterVolume();
- int LoadCurAudioBalance();
- int LoadCurAudioSupperBassVolume();
- int LoadCurAudioSupperBassSwitch();
- int LoadCurAudioSrsSurround();
- int LoadCurAudioSrsDialogClarity();
- void RealSetSRS();
- int LoadCurAudioSPDIFSwitch();
- void HanldeSupperBassSRSSpeakerSize();
- int LoadCurAudioSoundMode();
- int LoadCurAudioEQMode();
- int LoadCurAudioSrsTruBass();
- int SetDacGain();
- int RealSaveCurAudioBassVolume(int, int);
- int LoadCurAudioBassVolume();
- int RealSaveCurAudioTrebleVolume(int, int);
- int LoadCurAudioTrebleVolume();
- int HandleTrebleBassVolume();
- int LoadCurAudioWallEffect();
- int RealReadCurAudioEQGain(int *);
- int RealSaveCurAudioEQGain(int *, int);
- int LoadCurAudioEQGain();
- int MappingEQGain(int *, int *, int);
- int RestoreToAudioDefEQGain(int *);
- int CheckAudioEQGain(int *, int);
- int GetCustomEQGain(int *);
- int SetCustomEQGain();
- int AudioSetEQGain(int *);
- int handleEQGainBeforeSet(int *, int *);
- int RealSetEQGain(int *);
- int SetSpecialModeEQGain(int);
- int SetSpecialIndexEQGain(int, int);
- int SaveSpecialIndexEQGain(int, int);
- void LoadAudioCtl();
- void InitSetAudioCtl();
- int GetAudioFirstInitSetFlag();
- int HanldeAudioInputSr(unsigned int);
- int waitServiceManager();
- void *AudioCtlInitSetMain(void *);
- void AudioCtlInitializeSet();
- int GetEQMinGainVal();
- int GetEQMaxGainVal();
- int GetEQUIMinGainVal();
- int GetEQUIMaxGainVal();
- int GetBassUIMinGainVal();
- int GetBassUIMaxGainVal();
- int GetTrebleUIMinGainVal();
- int GetTrebleUIMaxGainVal();
- int MappingLine(int, int, int, int, int);
- int MappingTrebleBassAndEqualizer(int, int, int, int);
- void HandleSupperBassSwicth();
- int InitSetTvAudioCard();
- int UnInitSetTvAudioCard();
- int SetSPDIFMode(int mode_val);
-
-
- CAudioAlsa mAudioAlsa;
- CAudioEffect mAudioEffect;
- int mAudioMuteStatusForSystem;
- int mAudioMuteStatusForTv;
-
- int mCurAudioMasterVolume;
- int mCurAudioBalance;
- int mCurAudioSupperBassVolume;
- int mCurAudioSupperBassSwitch;
- int mCurAudioSRSSurround;
- int mCurAudioSrsDialogClarity;
- int mCurAudioSrsTruBass;
- int mCurAudioSPDIFSwitch;
- int mCurAudioSPDIFMode;
- int mCurAudioBassVolume;
- int mCurAudioTrebleVolume;
- int mCurAudioSoundMode;
- int mCurAudioWallEffect;
- int mCurAudioEQMode;
- int mCustomAudioMasterVolume;
- int mCustomAudioBalance;
- int mCustomAudioSupperBassVolume;
- int mCustomAudioSupperBassSwitch;
- int mCustomAudioSRSSurround;
- int mCustomAudioSrsDialogClarity;
- int mCustomAudioSrsTruBass;
- int mCustomAudioBassVolume;
- int mCustomAudioTrebleVolume;
- int mCustomAudioSoundMode;
- int mCustomAudioWallEffect;
- int mCustomAudioEQMode;
- int mCustomAudioSoundEnhancementSwitch;
- volatile int mVolumeCompensationVal;
-};
-#endif //__TV_AUDIO_API_H__
+#ifndef __TV_AUDIO_API_H__
+#define __TV_AUDIO_API_H__
+
+#include "tvsetting/audio_cfg.h"
+#include "audio_alsa.h"
+#include "audio_effect.h"
+
+enum CC_AUDIO_SWITCH_STATUS {
+ CC_SWITCH_OFF,
+ CC_SWITCH_ON,
+};
+
+enum CC_AMAUDIO_OUT_MODE {
+ CC_AMAUDIO_OUT_MODE_DIRECT,
+ CC_AMAUDIO_OUT_MODE_MIX,
+};
+
+static const int CC_SPDIF_MODE_PCM = 0;
+static const int CC_SPDIF_MODE_RAW = 1;
+
+static const int CC_MIN_SOUND_VOL = 0;
+static const int CC_MAX_SOUND_VOL = (100);
+static const int CC_DEF_SOUND_VOL = (30);
+static const int CC_MIN_SUPPERBASS_VOL = (0);
+static const int CC_MAX_SUPPERBASS_VOL = (100);
+static const int CC_DEF_SUPPERBASS_VOL = (50);
+
+static const int CC_VOLUME_COMPENSATION_MIN_VAL = (-20);
+static const int CC_VOLUME_COMPENSATION_MAX_VAL = (20);
+static const int CC_VOLUME_COMPENSATION_DEF_VAL = (0);
+
+static const int CC_DEF_BASS_TREBLE_VOL = 50;
+static const int CC_EQ_BASS_IND = 1;
+static const int CC_EQ_TREBLE_IND = 3;
+static const int CC_EQ_DEF_UI_MIN_GAIN = 0;
+static const int CC_EQ_DEF_UI_MAX_GAIN = 100;
+static const int CC_LUT_SEL_TV = 0;
+static const int CC_LUT_SEL_AV = 1;
+static const int CC_LUT_SEL_COMP = 2;
+static const int CC_LUT_SEL_HDMI = 3;
+static const int CC_LUT_SEL_VGA = 4;
+static const int CC_LUT_SEL_MPEG = 5;
+static const int CC_LUT_SEL_COUNT = 6;
+
+
+enum CC_AUD_SOUND_MODE {
+ CC_SOUND_MODE_START = 0,
+ CC_SOUND_MODE_STD = 0,
+ CC_SOUND_MODE_MUSIC,
+ CC_SOUND_MODE_NEWS,
+ CC_SOUND_MODE_THEATER,
+ CC_SOUND_MODE_USER,
+ CC_SOUND_MODE_END = CC_SOUND_MODE_USER
+};
+
+enum CC_AUD_EQ_MODE {
+ CC_EQ_MODE_START = 0,
+ CC_EQ_MODE_NOMAL = 0,
+ CC_EQ_MODE_POP,
+ CC_EQ_MODE_JAZZ,
+ CC_EQ_MODE_ROCK,
+ CC_EQ_MODE_CLASSIC,
+ CC_EQ_MODE_DANCE,
+ CC_EQ_MODE_PARTY,
+ CC_EQ_MODE_BASS,
+ CC_EQ_MODE_TREBLE,
+ CC_EQ_MODE_CUSTOM,
+ CC_EQ_MODE_END = CC_EQ_MODE_CUSTOM
+};
+class CTvAudio {
+public:
+ CTvAudio();
+ ~CTvAudio();
+ //Audio Mute
+ int SetAudioMuteForSystem(int);
+ int GetAudioMuteForSystem();
+ int SetAudioMuteForTv(int );
+ int GetAudioMuteForTv();
+ int SetAudioAVOutMute(int muteStatus);
+ int GetAudioAVOutMute();
+ int SetAudioSPDIFMute(int muteStatus);
+ int GetAudioSPDIFMute();
+
+ //Audio Master Volume
+ int SetAudioMasterVolume(int tmp_vol);
+ int GetAudioMasterVolume();
+ int SaveCurAudioMasterVolume(int tmp_vol);
+ int GetCurAudioMasterVolume();
+
+ //Audio Balance
+ int SetAudioBalance(int tmp_val);
+ int GetAudioBalance();
+ int SaveCurAudioBalance(int tmp_val);
+ int GetCurAudioBalance();
+
+ //Audio SupperBass Volume
+ int SetAudioSupperBassVolume(int tmp_vol);
+ int GetAudioSupperBassVolume();
+ int SaveCurAudioSupperBassVolume(int tmp_vol);
+ int GetCurAudioSupperBassVolume();
+
+ //Audio SupperBass Switch
+ int SetAudioSupperBassSwitch(int tmp_val);
+ int GetAudioSupperBassSwitch();
+ int SaveCurAudioSupperBassSwitch(int tmp_val);
+ int GetCurAudioSupperBassSwitch();
+
+ //Audio SRS Surround switch
+ int SetAudioSRSSurround(int tmp_val);
+ int GetAudioSRSSurround();
+ int SaveCurAudioSrsSurround(int tmp_val);
+ int GetCurAudioSRSSurround();
+
+ //Audio SRS Dialog Clarity
+ int SetAudioSrsDialogClarity(int tmp_val);
+ int GetAudioSrsDialogClarity();
+ int SaveCurAudioSrsDialogClarity(int tmp_val);
+ int GetCurAudioSrsDialogClarity();
+
+ //Audio SRS Trubass
+ int SetAudioSrsTruBass(int tmp_val);
+ int GetAudioSrsTruBass();
+ int SaveCurAudioSrsTruBass(int tmp_val);
+ int GetCurAudioSrsTruBass();
+
+ //Audio SPDIF switch
+ int SetAudioSPDIFSwitch(int tmp_val);
+ int GetCurAudioSPDIFSwitch();
+ int SaveCurAudioSPDIFSwitch(int tmp_val);
+
+ //Audio SPDIF Mode
+ int SetAudioSPDIFMode(int tmp_val);
+ int GetCurAudioSPDIFMode();
+ int SaveCurAudioSPDIFMode(int tmp_val);
+
+ //Audio Bass
+ int SetAudioBassVolume(int tmp_vol);
+ int GetAudioBassVolume();
+ int SaveCurAudioBassVolume(int tmp_vol);
+ int GetCurAudioBassVolume();
+
+ //Audio Treble
+ int SetAudioTrebleVolume(int tmp_vol);
+ int GetAudioTrebleVolume();
+ int SaveCurAudioTrebleVolume(int tmp_vol);
+ int GetCurAudioTrebleVolume();
+
+ //Audio Sound Mode
+ int SetAudioSoundMode(int tmp_val);
+ int GetAudioSoundMode();
+ int SaveCurAudioSoundMode(int tmp_val);
+ int GetCurAudioSoundMode();
+
+ //Audio Wall Effect
+ int SetAudioWallEffect(int tmp_val);
+ int GetAudioWallEffect();
+ int SaveCurAudioWallEffect(int tmp_val);
+ int GetCurAudioWallEffect();
+
+ //Audio EQ Mode
+ int SetAudioEQMode(int tmp_val);
+ int GetAudioEQMode();
+ int SaveCurAudioEQMode(int tmp_val);
+ int GetCurAudioEQMode();
+
+ //Audio EQ Gain
+ int GetAudioEQRange(int range_buf[]);
+ int GetAudioEQBandCount();
+ int SetAudioEQGain(int gain_buf[]);
+ int GetAudioEQGain(int gain_buf[]);
+ int GetCurAudioEQGain(int gain_buf[]);
+ int SaveCurAudioEQGain(int gain_buf[]);
+ int SetAudioEQSwitch(int switch_val);
+
+ // amAudio
+ int OpenAmAudio(unsigned int sr, int output_device);
+ int CloseAmAudio(void);
+ int SetAmAudioInputSr(unsigned int sr, int output_device);
+ int SetAmAudioOutputMode(int mode);
+ int SetAmAudioMusicGain(int gain);
+ int SetAmAudioLeftGain(int gain);
+ int SetAmAudioRightGain(int gain);
+
+ int SetAudioVolumeCompensationVal(int tmp_vol_comp_val);
+ int GetAudioVolumeCompensationVal();
+
+ int AudioLineInSelectChannel(int audio_channel);
+ int AudioSetLineInCaptureVolume(int l_vol, int r_vol);
+ int SetKalaokIO(int level);
+
+ int AudioHandleHeadsetPlugIn();
+ int AudioHandleHeadsetPullOut();
+ int amAudioSetDoubleOutputSwitch(int en_val);
+ int setAudioPcmPlaybackVolume(int val);
+ int UsbAudioOuputModuleSwitch(int sw);
+ int GetAmAudioSetDoubleOutputSwitch();
+ int GetCurUsbAudioOuputModuleSwitch();
+ int amAudioSetTvDoubleOutput(int en_val, unsigned int sr, int input_device, int output_device);
+
+ void AudioCtlInitializeLoad();
+ void AudioCtlInit();
+ void AudioCtlUninit();
+ void AudioSetVolumeDigitLUTBuf(int lut_sel_flag, int add_srs_gain_flag, int add_eq_gain_flag, int audio_std);
+ int openTvAudio(int sr);
+
+ int AudioDataInitForDtv();
+ int AudioDataInit(int sr, bool enableNoiseGate);
+ int AudioDataUnInit();
+ int AudioChangeSampleRate(int sr);
+ int AudioSetAudioInSource(int audio_src_in_type);
+ int AudioSetAudioSourceType(int source_type);
+ int AudioSSMRestoreDefaultSetting();
+ int AudioRegisterInterface();
+ int AudioGetSessionId();
+ int AudioNewAudioEffects(void);
+ void AudioFreeAudioEffects(void);
+ int SetAudioDumpDataFlag(int tmp_flag);
+ int GetAudioDumpDataFlag();
+ int SetAudioLeftRightMode(unsigned int mode);
+ unsigned int GetAudioLeftRightMode();
+ int AudioSetMicroPhoneSwitch(int switch_val);
+ void AudioSetNoiseGateThreshold(int thresh);
+ int AudioSetRecordDataZero(bool flag);
+ int SwitchAVOutBypass (int);
+ int SetAudioSwitchIO(int value);
+ int SetOutput_Swap(int value);
+
+private:
+ void RealHandleVolumeDigitLUTBuf(int lut_buf_type, int lut_sel_flag,
+ int vol_buf[], int add_srs_gain_flag, int add_eq_gain_flag);
+ int handleAudioSPDIFMute(int muteStatus);
+ int LoadCurAudioSPDIFMode();
+ int LoadCurAudioMasterVolume();
+ int LoadCurAudioBalance();
+ int LoadCurAudioSupperBassVolume();
+ int LoadCurAudioSupperBassSwitch();
+ int LoadCurAudioSrsSurround();
+ int LoadCurAudioSrsDialogClarity();
+ void RealSetSRS();
+ int LoadCurAudioSPDIFSwitch();
+ void HanldeSupperBassSRSSpeakerSize();
+ int LoadCurAudioSoundMode();
+ int LoadCurAudioEQMode();
+ int LoadCurAudioSrsTruBass();
+ int SetDacGain();
+ int RealSaveCurAudioBassVolume(int, int);
+ int LoadCurAudioBassVolume();
+ int RealSaveCurAudioTrebleVolume(int, int);
+ int LoadCurAudioTrebleVolume();
+ int HandleTrebleBassVolume();
+ int LoadCurAudioWallEffect();
+ int RealReadCurAudioEQGain(int *);
+ int RealSaveCurAudioEQGain(int *, int);
+ int LoadCurAudioEQGain();
+ int MappingEQGain(int *, int *, int);
+ int RestoreToAudioDefEQGain(int *);
+ int CheckAudioEQGain(int *, int);
+ int GetCustomEQGain(int *);
+ int SetCustomEQGain();
+ int AudioSetEQGain(int *);
+ int handleEQGainBeforeSet(int *, int *);
+ int RealSetEQGain(int *);
+ int SetSpecialModeEQGain(int);
+ int SetSpecialIndexEQGain(int, int);
+ int SaveSpecialIndexEQGain(int, int);
+ void LoadAudioCtl();
+ void InitSetAudioCtl();
+ int GetAudioFirstInitSetFlag();
+ int HanldeAudioInputSr(unsigned int);
+ int waitServiceManager();
+ void *AudioCtlInitSetMain(void *);
+ void AudioCtlInitializeSet();
+ int GetEQMinGainVal();
+ int GetEQMaxGainVal();
+ int GetEQUIMinGainVal();
+ int GetEQUIMaxGainVal();
+ int GetBassUIMinGainVal();
+ int GetBassUIMaxGainVal();
+ int GetTrebleUIMinGainVal();
+ int GetTrebleUIMaxGainVal();
+ int MappingLine(int, int, int, int, int);
+ int MappingTrebleBassAndEqualizer(int, int, int, int);
+ void HandleSupperBassSwicth();
+ int InitSetTvAudioCard();
+ int UnInitSetTvAudioCard();
+ int SetSPDIFMode(int mode_val);
+
+
+ CAudioAlsa mAudioAlsa;
+ CAudioEffect mAudioEffect;
+ int mAudioMuteStatusForSystem;
+ int mAudioMuteStatusForTv;
+
+ int mCurAudioMasterVolume;
+ int mCurAudioBalance;
+ int mCurAudioSupperBassVolume;
+ int mCurAudioSupperBassSwitch;
+ int mCurAudioSRSSurround;
+ int mCurAudioSrsDialogClarity;
+ int mCurAudioSrsTruBass;
+ int mCurAudioSPDIFSwitch;
+ int mCurAudioSPDIFMode;
+ int mCurAudioBassVolume;
+ int mCurAudioTrebleVolume;
+ int mCurAudioSoundMode;
+ int mCurAudioWallEffect;
+ int mCurAudioEQMode;
+ int mCustomAudioMasterVolume;
+ int mCustomAudioBalance;
+ int mCustomAudioSupperBassVolume;
+ int mCustomAudioSupperBassSwitch;
+ int mCustomAudioSRSSurround;
+ int mCustomAudioSrsDialogClarity;
+ int mCustomAudioSrsTruBass;
+ int mCustomAudioBassVolume;
+ int mCustomAudioTrebleVolume;
+ int mCustomAudioSoundMode;
+ int mCustomAudioWallEffect;
+ int mCustomAudioEQMode;
+ int mCustomAudioSoundEnhancementSwitch;
+ volatile int mVolumeCompensationVal;
+};
+#endif //__TV_AUDIO_API_H__
diff --git a/tvapi/libtv/audio/audio_effect.cpp b/tvapi/libtv/audio/audio_effect.cpp
index 0171243..d55fbe8 100644
--- a/tvapi/libtv/audio/audio_effect.cpp
+++ b/tvapi/libtv/audio/audio_effect.cpp
@@ -1,228 +1,228 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <malloc.h>
-#include <unistd.h>
-#include <pthread.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/poll.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-
-#include "audio_amaudio.h"
-#include "audio_effect.h"
-
-#define LOG_TAG "CAudioEffect"
-#include "CTvLog.h"
-
-#define CC_BAND_ITEM_CNT ( 6 )
-#define CC_MIN_EQ_GAIN_VAL ( -10 )
-#define CC_MAX_EQ_GAIN_VAL ( 10 )
-CAudioEffect::CAudioEffect()
-{
-}
-CAudioEffect::~CAudioEffect()
-{
-}
-
-int CAudioEffect::amAndroidNewAudioEffects()
-{
- return mAndroidEffect.amAndroidNewAudioEffects();
-}
-
-void CAudioEffect::amAndroidFreeAudioEffects()
-{
- return mAndroidEffect.amAndroidFreeAudioEffects();
-}
-
-int CAudioEffect::GetEQBandCount()
-{
- return CC_BAND_ITEM_CNT;
-}
-
-int CAudioEffect::GetEQMinGain()
-{
- return CC_MIN_EQ_GAIN_VAL;
-}
-
-int CAudioEffect::GetEQMaxGain()
-{
- return CC_MAX_EQ_GAIN_VAL;
-}
-
-int CAudioEffect::SetEQSwitch(int switch_val)
-{
- int tmp_ret = 0;
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return mAndroidEffect.amAndroidSetEQEnable(switch_val);
-#endif
-
-#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
- tmp_ret |= amAudioSetEQEnable(switch_val);
- tmp_ret |= mAndroidEffect.amAndroidSetEQEnable(switch_val);
- return tmp_ret;
-#endif
-}
-
-int CAudioEffect::GetEQSwitch()
-{
- int tmp_ret = 0;
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return mAndroidEffect.amAndroidGetEQEnabled();
-#endif
-
-#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
- return mAndroidEffect.amAndroidGetEQEnabled();
-#endif
-}
-
-int CAudioEffect::SetEQValue(int gain_val_buf[])
-{
- int tmp_ret = 0;
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return mAndroidEffect.amAndroidSetEQGain(gain_val_buf, CC_BAND_ITEM_CNT);
-#endif
-
-#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
- tmp_ret |= amAudioSetEQGain(gain_val_buf, CC_BAND_ITEM_CNT);
- tmp_ret |= mAndroidEffect.amAndroidSetEQGain(gain_val_buf, CC_BAND_ITEM_CNT);
- return tmp_ret;
-#endif
-}
-
-int CAudioEffect::GetEQValue(int gain_val_buf[])
-{
- int tmp_ret = 0;
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return mAndroidEffect.amAndroidGetEQGain(gain_val_buf, CC_BAND_ITEM_CNT);
-#endif
-
-#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
- return mAndroidEffect.amAndroidGetEQGain(gain_val_buf, CC_BAND_ITEM_CNT);
-#endif
-}
-
-int CAudioEffect::SetSrsSurroundSwitch(int switch_val)
-{
- int tmp_ret = 0;
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return mAndroidEffect.amAndroidSetSRSSurroundSwitch(switch_val);
-#endif
-
-#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
- tmp_ret |= amAudioSetSRSSurroundSwitch(switch_val);
- tmp_ret |= mAndroidEffect.amAndroidSetSRSSurroundSwitch(switch_val);
- return tmp_ret;
-#endif
-}
-
-int CAudioEffect::SetSrsSurroundGain(int gain_val)
-{
- int tmp_ret = 0;
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return mAndroidEffect.amAndroidSetSRSSurroundGain(gain_val);
-#endif
-
-#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
- tmp_ret |= amAudioSetSRSSurroundGain(gain_val);
- tmp_ret |= mAndroidEffect.amAndroidSetSRSSurroundGain(gain_val);
- return tmp_ret;
-#endif
-}
-
-int CAudioEffect::SetSrsTruBassSwitch(int switch_val)
-{
- int tmp_ret = 0;
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return mAndroidEffect.amAndroidSetSRSTrubassSwitch(switch_val);
-#endif
-
-#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
- tmp_ret |= amAudioSetSRSTrubassSwitch(switch_val);
- tmp_ret |= mAndroidEffect.amAndroidSetSRSTrubassSwitch(switch_val);
- return tmp_ret;
-#endif
-}
-
-int CAudioEffect::SetSrsTruBassGain(int gain_val)
-{
- int tmp_ret = 0;
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return amAndroidSetSRSTrubassGain(gain_val);
-#endif
-
-#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
- tmp_ret |= amAudioSetSRSTrubassGain(gain_val);
- tmp_ret |= mAndroidEffect.amAndroidSetSRSTrubassGain(gain_val);
- return tmp_ret;
-#endif
-}
-
-int CAudioEffect::SetSrsDialogClaritySwitch(int switch_val)
-{
- int tmp_ret = 0;
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return mAndroidEffect.amAndroidSetSRSDialogClaritySwitch(switch_val);
-#endif
-
-#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
- tmp_ret |= amAudioSetSRSDialogClaritySwitch(switch_val);
- tmp_ret |= mAndroidEffect.amAndroidSetSRSDialogClaritySwitch(switch_val);
- return tmp_ret;
-#endif
-}
-
-int CAudioEffect::SetSrsDialogClarityGain(int gain_val)
-{
- int tmp_ret = 0;
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return mAndroidEffect.amAndroidSetSRSDialogClarityGain(gain_val);
-#endif
-
-#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
- tmp_ret |= amAudioSetSRSDialogClarityGain(gain_val);
- tmp_ret |= mAndroidEffect.amAndroidSetSRSDialogClarityGain(gain_val);
- return tmp_ret;
-#endif
-}
-
-int CAudioEffect::SetSrsDefinitionGain(int gain_val)
-{
- int tmp_ret = 0;
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return mAndroidEffect.amAndroidSetSRSDefinitionGain(gain_val);
-#endif
-
-#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
- tmp_ret |= amAudioSetSRSDefinitionGain(gain_val);
- tmp_ret |= mAndroidEffect.amAndroidSetSRSDefinitionGain(gain_val);
- return tmp_ret;
-#endif
-}
-
-int CAudioEffect::SetSrsTrubassSpeakerSize(int set_val)
-{
- int tmp_ret = 0;
-
-#if CC_TV_AUDIO_TYPE_ANDROID == 1
- return mAndroidEffect.amAndroidSetSRSTrubassSpeakerSize(set_val);
-#endif
-
-#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
- tmp_ret |= amAudioSetSRSTrubassSpeakerSize(set_val);
- tmp_ret |= mAndroidEffect.amAndroidSetSRSTrubassSpeakerSize(set_val);
- return tmp_ret;
-#endif
-}
+#include <stdio.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include <unistd.h>
+#include <pthread.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/poll.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+
+#include "audio_amaudio.h"
+#include "audio_effect.h"
+
+#define LOG_TAG "CAudioEffect"
+#include "CTvLog.h"
+
+#define CC_BAND_ITEM_CNT ( 6 )
+#define CC_MIN_EQ_GAIN_VAL ( -10 )
+#define CC_MAX_EQ_GAIN_VAL ( 10 )
+CAudioEffect::CAudioEffect()
+{
+}
+CAudioEffect::~CAudioEffect()
+{
+}
+
+int CAudioEffect::amAndroidNewAudioEffects()
+{
+ return mAndroidEffect.amAndroidNewAudioEffects();
+}
+
+void CAudioEffect::amAndroidFreeAudioEffects()
+{
+ return mAndroidEffect.amAndroidFreeAudioEffects();
+}
+
+int CAudioEffect::GetEQBandCount()
+{
+ return CC_BAND_ITEM_CNT;
+}
+
+int CAudioEffect::GetEQMinGain()
+{
+ return CC_MIN_EQ_GAIN_VAL;
+}
+
+int CAudioEffect::GetEQMaxGain()
+{
+ return CC_MAX_EQ_GAIN_VAL;
+}
+
+int CAudioEffect::SetEQSwitch(int switch_val)
+{
+ int tmp_ret = 0;
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return mAndroidEffect.amAndroidSetEQEnable(switch_val);
+#endif
+
+#ifdef CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ tmp_ret |= amAudioSetEQEnable(switch_val);
+ tmp_ret |= mAndroidEffect.amAndroidSetEQEnable(switch_val);
+ return tmp_ret;
+#endif
+}
+
+int CAudioEffect::GetEQSwitch()
+{
+ int tmp_ret = 0;
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return mAndroidEffect.amAndroidGetEQEnabled();
+#endif
+
+#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ return mAndroidEffect.amAndroidGetEQEnabled();
+#endif
+}
+
+int CAudioEffect::SetEQValue(int gain_val_buf[])
+{
+ int tmp_ret = 0;
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return mAndroidEffect.amAndroidSetEQGain(gain_val_buf, CC_BAND_ITEM_CNT);
+#endif
+
+#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ tmp_ret |= amAudioSetEQGain(gain_val_buf, CC_BAND_ITEM_CNT);
+ tmp_ret |= mAndroidEffect.amAndroidSetEQGain(gain_val_buf, CC_BAND_ITEM_CNT);
+ return tmp_ret;
+#endif
+}
+
+int CAudioEffect::GetEQValue(int gain_val_buf[])
+{
+ int tmp_ret = 0;
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return mAndroidEffect.amAndroidGetEQGain(gain_val_buf, CC_BAND_ITEM_CNT);
+#endif
+
+#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ return mAndroidEffect.amAndroidGetEQGain(gain_val_buf, CC_BAND_ITEM_CNT);
+#endif
+}
+
+int CAudioEffect::SetSrsSurroundSwitch(int switch_val)
+{
+ int tmp_ret = 0;
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return mAndroidEffect.amAndroidSetSRSSurroundSwitch(switch_val);
+#endif
+
+#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ tmp_ret |= amAudioSetSRSSurroundSwitch(switch_val);
+ tmp_ret |= mAndroidEffect.amAndroidSetSRSSurroundSwitch(switch_val);
+ return tmp_ret;
+#endif
+}
+
+int CAudioEffect::SetSrsSurroundGain(int gain_val)
+{
+ int tmp_ret = 0;
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return mAndroidEffect.amAndroidSetSRSSurroundGain(gain_val);
+#endif
+
+#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ tmp_ret |= amAudioSetSRSSurroundGain(gain_val);
+ tmp_ret |= mAndroidEffect.amAndroidSetSRSSurroundGain(gain_val);
+ return tmp_ret;
+#endif
+}
+
+int CAudioEffect::SetSrsTruBassSwitch(int switch_val)
+{
+ int tmp_ret = 0;
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return mAndroidEffect.amAndroidSetSRSTrubassSwitch(switch_val);
+#endif
+
+#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ tmp_ret |= amAudioSetSRSTrubassSwitch(switch_val);
+ tmp_ret |= mAndroidEffect.amAndroidSetSRSTrubassSwitch(switch_val);
+ return tmp_ret;
+#endif
+}
+
+int CAudioEffect::SetSrsTruBassGain(int gain_val)
+{
+ int tmp_ret = 0;
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return amAndroidSetSRSTrubassGain(gain_val);
+#endif
+
+#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ tmp_ret |= amAudioSetSRSTrubassGain(gain_val);
+ tmp_ret |= mAndroidEffect.amAndroidSetSRSTrubassGain(gain_val);
+ return tmp_ret;
+#endif
+}
+
+int CAudioEffect::SetSrsDialogClaritySwitch(int switch_val)
+{
+ int tmp_ret = 0;
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return mAndroidEffect.amAndroidSetSRSDialogClaritySwitch(switch_val);
+#endif
+
+#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ tmp_ret |= amAudioSetSRSDialogClaritySwitch(switch_val);
+ tmp_ret |= mAndroidEffect.amAndroidSetSRSDialogClaritySwitch(switch_val);
+ return tmp_ret;
+#endif
+}
+
+int CAudioEffect::SetSrsDialogClarityGain(int gain_val)
+{
+ int tmp_ret = 0;
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return mAndroidEffect.amAndroidSetSRSDialogClarityGain(gain_val);
+#endif
+
+#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ tmp_ret |= amAudioSetSRSDialogClarityGain(gain_val);
+ tmp_ret |= mAndroidEffect.amAndroidSetSRSDialogClarityGain(gain_val);
+ return tmp_ret;
+#endif
+}
+
+int CAudioEffect::SetSrsDefinitionGain(int gain_val)
+{
+ int tmp_ret = 0;
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return mAndroidEffect.amAndroidSetSRSDefinitionGain(gain_val);
+#endif
+
+#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ tmp_ret |= amAudioSetSRSDefinitionGain(gain_val);
+ tmp_ret |= mAndroidEffect.amAndroidSetSRSDefinitionGain(gain_val);
+ return tmp_ret;
+#endif
+}
+
+int CAudioEffect::SetSrsTrubassSpeakerSize(int set_val)
+{
+ int tmp_ret = 0;
+
+#if CC_TV_AUDIO_TYPE_ANDROID == 1
+ return mAndroidEffect.amAndroidSetSRSTrubassSpeakerSize(set_val);
+#endif
+
+#if CC_TV_AUDIO_TYPE_AMAUDIO == 1
+ tmp_ret |= amAudioSetSRSTrubassSpeakerSize(set_val);
+ tmp_ret |= mAndroidEffect.amAndroidSetSRSTrubassSpeakerSize(set_val);
+ return tmp_ret;
+#endif
+}
diff --git a/tvapi/libtv/audio/audio_effect.h b/tvapi/libtv/audio/audio_effect.h
index d5b2789..6420092 100644
--- a/tvapi/libtv/audio/audio_effect.h
+++ b/tvapi/libtv/audio/audio_effect.h
@@ -1,32 +1,31 @@
-#ifndef __TV_AUDIO_EFFECT_H__
-#define __TV_AUDIO_EFFECT_H__
-#include "audio_android_effect.h"
-
-class CAudioEffect
-{
-public:
- CAudioEffect();
- virtual ~CAudioEffect();
- int amAndroidNewAudioEffects();
- void amAndroidFreeAudioEffects();
- virtual int GetEQBandCount();
- virtual int GetEQMinGain();
- virtual int GetEQMaxGain();
- virtual int SetEQSwitch(int switch_val);
- virtual int GetEQSwitch();
- virtual int SetEQValue(int gain_val_buf[]);
- virtual int GetEQValue(int gain_val_buf[]);
-
- virtual int SetSrsSurroundSwitch(int switch_val);
- virtual int SetSrsSurroundGain(int gain_val);
- virtual int SetSrsTruBassSwitch(int switch_val);
- virtual int SetSrsTruBassGain(int gain_val);
- virtual int SetSrsDialogClaritySwitch(int switch_val);
- virtual int SetSrsDialogClarityGain(int gain_val);
- virtual int SetSrsDefinitionGain(int gain_val);
- virtual int SetSrsTrubassSpeakerSize(int tmp_val);
-
-private:
- CAndroidEffect mAndroidEffect;
-};
-#endif //__TV_AUDIO_EFFECT_H__
+#ifndef __TV_AUDIO_EFFECT_H__
+#define __TV_AUDIO_EFFECT_H__
+#include "audio_android_effect.h"
+
+class CAudioEffect {
+public:
+ CAudioEffect();
+ virtual ~CAudioEffect();
+ int amAndroidNewAudioEffects();
+ void amAndroidFreeAudioEffects();
+ virtual int GetEQBandCount();
+ virtual int GetEQMinGain();
+ virtual int GetEQMaxGain();
+ virtual int SetEQSwitch(int switch_val);
+ virtual int GetEQSwitch();
+ virtual int SetEQValue(int gain_val_buf[]);
+ virtual int GetEQValue(int gain_val_buf[]);
+
+ virtual int SetSrsSurroundSwitch(int switch_val);
+ virtual int SetSrsSurroundGain(int gain_val);
+ virtual int SetSrsTruBassSwitch(int switch_val);
+ virtual int SetSrsTruBassGain(int gain_val);
+ virtual int SetSrsDialogClaritySwitch(int switch_val);
+ virtual int SetSrsDialogClarityGain(int gain_val);
+ virtual int SetSrsDefinitionGain(int gain_val);
+ virtual int SetSrsTrubassSpeakerSize(int tmp_val);
+
+private:
+ CAndroidEffect mAndroidEffect;
+};
+#endif //__TV_AUDIO_EFFECT_H__
diff --git a/tvapi/libtv/include/amstream.h b/tvapi/libtv/include/amstream.h
index 434c028..c82aae3 100644
--- a/tvapi/libtv/include/amstream.h
+++ b/tvapi/libtv/include/amstream.h
@@ -1,263 +1,263 @@
-#ifndef __AMSTREAM_H__
-#define __AMSTREAM_H__
-
-#include "ve.h"
-
-#define AMSTREAM_IOC_MAGIC 'S'
-
-#define AMSTREAM_IOC_VB_START _IOW(AMSTREAM_IOC_MAGIC, 0x00, int)
-#define AMSTREAM_IOC_VB_SIZE _IOW(AMSTREAM_IOC_MAGIC, 0x01, int)
-#define AMSTREAM_IOC_AB_START _IOW(AMSTREAM_IOC_MAGIC, 0x02, int)
-#define AMSTREAM_IOC_AB_SIZE _IOW(AMSTREAM_IOC_MAGIC, 0x03, int)
-#define AMSTREAM_IOC_VFORMAT _IOW(AMSTREAM_IOC_MAGIC, 0x04, int)
-#define AMSTREAM_IOC_AFORMAT _IOW(AMSTREAM_IOC_MAGIC, 0x05, int)
-#define AMSTREAM_IOC_VID _IOW(AMSTREAM_IOC_MAGIC, 0x06, int)
-#define AMSTREAM_IOC_AID _IOW(AMSTREAM_IOC_MAGIC, 0x07, int)
-#define AMSTREAM_IOC_VB_STATUS _IOR(AMSTREAM_IOC_MAGIC, 0x08, unsigned long)
-#define AMSTREAM_IOC_AB_STATUS _IOR(AMSTREAM_IOC_MAGIC, 0x09, unsigned long)
-#define AMSTREAM_IOC_SYSINFO _IOW(AMSTREAM_IOC_MAGIC, 0x0a, int)
-#define AMSTREAM_IOC_ACHANNEL _IOW(AMSTREAM_IOC_MAGIC, 0x0b, int)
-#define AMSTREAM_IOC_SAMPLERATE _IOW(AMSTREAM_IOC_MAGIC, 0x0c, int)
-#define AMSTREAM_IOC_DATAWIDTH _IOW(AMSTREAM_IOC_MAGIC, 0x0d, int)
-#define AMSTREAM_IOC_TSTAMP _IOW(AMSTREAM_IOC_MAGIC, 0x0e, unsigned long)
-#define AMSTREAM_IOC_VDECSTAT _IOR(AMSTREAM_IOC_MAGIC, 0x0f, unsigned long)
-#define AMSTREAM_IOC_ADECSTAT _IOR(AMSTREAM_IOC_MAGIC, 0x10, unsigned long)
-
-#define AMSTREAM_IOC_PORT_INIT _IO(AMSTREAM_IOC_MAGIC, 0x11)
-#define AMSTREAM_IOC_TRICKMODE _IOW(AMSTREAM_IOC_MAGIC, 0x12, unsigned long)
-
-#define AMSTREAM_IOC_AUDIO_INFO _IOW(AMSTREAM_IOC_MAGIC, 0x13, unsigned long)
-#define AMSTREAM_IOC_TRICK_STAT _IOR(AMSTREAM_IOC_MAGIC, 0x14, unsigned long)
-#define AMSTREAM_IOC_AUDIO_RESET _IO(AMSTREAM_IOC_MAGIC, 0x15)
-#define AMSTREAM_IOC_SID _IOW(AMSTREAM_IOC_MAGIC, 0x16, int)
-#define AMSTREAM_IOC_VPAUSE _IOW(AMSTREAM_IOC_MAGIC, 0x17, int)
-#define AMSTREAM_IOC_AVTHRESH _IOW(AMSTREAM_IOC_MAGIC, 0x18, int)
-#define AMSTREAM_IOC_SYNCTHRESH _IOW(AMSTREAM_IOC_MAGIC, 0x19, int)
-#define AMSTREAM_IOC_SUB_RESET _IOW(AMSTREAM_IOC_MAGIC, 0x1a, int)
-#define AMSTREAM_IOC_SUB_LENGTH _IOR(AMSTREAM_IOC_MAGIC, 0x1b, unsigned long)
-#define AMSTREAM_IOC_SET_DEC_RESET _IOW(AMSTREAM_IOC_MAGIC, 0x1c, int)
-#define AMSTREAM_IOC_TS_SKIPBYTE _IOW(AMSTREAM_IOC_MAGIC, 0x1d, int)
-#define AMSTREAM_IOC_SUB_TYPE _IOW(AMSTREAM_IOC_MAGIC, 0x1e, int)
-#define AMSTREAM_IOC_CLEAR_VIDEO _IOW(AMSTREAM_IOC_MAGIC, 0x1f, int)
-
-#define AMSTREAM_IOC_APTS _IOR(AMSTREAM_IOC_MAGIC, 0x40, unsigned long)
-#define AMSTREAM_IOC_VPTS _IOR(AMSTREAM_IOC_MAGIC, 0x41, unsigned long)
-#define AMSTREAM_IOC_PCRSCR _IOR(AMSTREAM_IOC_MAGIC, 0x42, unsigned long)
-#define AMSTREAM_IOC_SYNCENABLE _IOW(AMSTREAM_IOC_MAGIC, 0x43, unsigned long)
-#define AMSTREAM_IOC_GET_SYNC_ADISCON _IOR(AMSTREAM_IOC_MAGIC, 0x44, unsigned long)
-#define AMSTREAM_IOC_SET_SYNC_ADISCON _IOW(AMSTREAM_IOC_MAGIC, 0x45, unsigned long)
-#define AMSTREAM_IOC_GET_SYNC_VDISCON _IOR(AMSTREAM_IOC_MAGIC, 0x46, unsigned long)
-#define AMSTREAM_IOC_SET_SYNC_VDISCON _IOW(AMSTREAM_IOC_MAGIC, 0x47, unsigned long)
-#define AMSTREAM_IOC_GET_VIDEO_DISABLE _IOR(AMSTREAM_IOC_MAGIC, 0x48, unsigned long)
-#define AMSTREAM_IOC_SET_VIDEO_DISABLE _IOW(AMSTREAM_IOC_MAGIC, 0x49, unsigned long)
-#define AMSTREAM_IOC_SET_PCRSCR _IOW(AMSTREAM_IOC_MAGIC, 0x4a, unsigned long)
-#define AMSTREAM_IOC_GET_VIDEO_AXIS _IOR(AMSTREAM_IOC_MAGIC, 0x4b, unsigned long)
-#define AMSTREAM_IOC_SET_VIDEO_AXIS _IOW(AMSTREAM_IOC_MAGIC, 0x4c, unsigned long)
-#define AMSTREAM_IOC_GET_VIDEO_CROP _IOR(AMSTREAM_IOC_MAGIC, 0x4d, unsigned long)
-#define AMSTREAM_IOC_SET_VIDEO_CROP _IOW(AMSTREAM_IOC_MAGIC, 0x4e, unsigned long)
-
-// VPP.VE IOCTL command list
-#define AMSTREAM_IOC_VE_BEXT _IOW(AMSTREAM_IOC_MAGIC, 0x20, struct ve_bext_s )
-#define AMSTREAM_IOC_VE_DNLP _IOW(AMSTREAM_IOC_MAGIC, 0x21, struct ve_dnlp_s )
-#define AMSTREAM_IOC_VE_HSVS _IOW(AMSTREAM_IOC_MAGIC, 0x22, struct ve_hsvs_s )
-#define AMSTREAM_IOC_VE_CCOR _IOW(AMSTREAM_IOC_MAGIC, 0x23, struct ve_ccor_s )
-#define AMSTREAM_IOC_VE_BENH _IOW(AMSTREAM_IOC_MAGIC, 0x24, struct ve_benh_s )
-#define AMSTREAM_IOC_VE_DEMO _IOW(AMSTREAM_IOC_MAGIC, 0x25, struct ve_demo_s )
-#define AMSTREAM_IOC_VE_VDO_MEAS _IOW(AMSTREAM_IOC_MAGIC, 0x27, struct vdo_meas_s )
-#define AMSTREAM_IOC_VE_DEBUG _IOWR(AMSTREAM_IOC_MAGIC, 0x28, unsigned long long)
-#define AMSTREAM_IOC_VE_REGMAP _IOW(AMSTREAM_IOC_MAGIC, 0x29, struct ve_regmap_s)
-
-// VPP.CM IOCTL command list
-#define AMSTREAM_IOC_CM_REGION _IOW(AMSTREAM_IOC_MAGIC, 0x30, struct cm_region_s)
-#define AMSTREAM_IOC_CM_TOP _IOW(AMSTREAM_IOC_MAGIC, 0x31, struct cm_top_s )
-#define AMSTREAM_IOC_CM_DEMO _IOW(AMSTREAM_IOC_MAGIC, 0x32, struct cm_demo_s )
-#define AMSTREAM_IOC_CM_DEBUG _IOWR(AMSTREAM_IOC_MAGIC, 0x33, unsigned long long)
-#define AMSTREAM_IOC_CM_REGMAP _IOW(AMSTREAM_IOC_MAGIC, 0x34, struct cm_regmap_s)
-
-//VPP.3D IOCTL command list
-#define AMSTREAM_IOC_SET_3D_TYPE _IOW(AMSTREAM_IOC_MAGIC, 0x3c, unsigned int)
-#define AMSTREAM_IOC_GET_3D_TYPE _IOW(AMSTREAM_IOC_MAGIC, 0x3d, unsigned int)
-
-#define AMSTREAM_IOC_SUB_NUM _IOR(AMSTREAM_IOC_MAGIC, 0x50, unsigned long)
-#define AMSTREAM_IOC_SUB_INFO _IOR(AMSTREAM_IOC_MAGIC, 0x51, unsigned long)
-#define AMSTREAM_IOC_GET_BLACKOUT_POLICY _IOR(AMSTREAM_IOC_MAGIC, 0x52, unsigned long)
-#define AMSTREAM_IOC_SET_BLACKOUT_POLICY _IOW(AMSTREAM_IOC_MAGIC, 0x53, unsigned long)
-#define AMSTREAM_IOC_GET_SCREEN_MODE _IOR(AMSTREAM_IOC_MAGIC, 0x58, int)
-#define AMSTREAM_IOC_SET_SCREEN_MODE _IOW(AMSTREAM_IOC_MAGIC, 0x59, int)
-#define AMSTREAM_IOC_GET_VIDEO_DISCONTINUE_REPORT _IOR(AMSTREAM_IOC_MAGIC, 0x5a, int)
-#define AMSTREAM_IOC_SET_VIDEO_DISCONTINUE_REPORT _IOW(AMSTREAM_IOC_MAGIC, 0x5b, int)
-#define AMSTREAM_IOC_VF_STATUS _IOR(AMSTREAM_IOC_MAGIC, 0x60, unsigned long)
-#define AMSTREAM_IOC_CLEAR_VBUF _IO(AMSTREAM_IOC_MAGIC, 0x80)
-
-#define AMSTREAM_IOC_APTS_LOOKUP _IOR(AMSTREAM_IOC_MAGIC, 0x81, unsigned long)
-#define GET_FIRST_APTS_FLAG _IOR(AMSTREAM_IOC_MAGIC, 0x82, long)
-
-#define AMSTREAM_IOC_GET_SYNC_ADISCON_DIFF _IOR(AMSTREAM_IOC_MAGIC, 0x83, unsigned long)
-#define AMSTREAM_IOC_GET_SYNC_VDISCON_DIFF _IOR(AMSTREAM_IOC_MAGIC, 0x84, unsigned long)
-#define AMSTREAM_IOC_SET_SYNC_ADISCON_DIFF _IOW(AMSTREAM_IOC_MAGIC, 0x85, unsigned long)
-#define AMSTREAM_IOC_SET_SYNC_VDISCON_DIFF _IOW(AMSTREAM_IOC_MAGIC, 0x86, unsigned long)
-#define AMSTREAM_IOC_GET_FREERUN_MODE _IOR(AMSTREAM_IOC_MAGIC, 0x87, unsigned long)
-#define AMSTREAM_IOC_SET_FREERUN_MODE _IOW(AMSTREAM_IOC_MAGIC, 0x88, unsigned long)
-#define AMSTREAM_IOC_SET_DEMUX _IOW(AMSTREAM_IOC_MAGIC, 0x90, unsigned long)
-
-#define AMSTREAM_IOC_SET_VIDEO_DELAY_LIMIT_MS _IOW(AMSTREAM_IOC_MAGIC, 0xa0, unsigned long)
-#define AMSTREAM_IOC_GET_VIDEO_DELAY_LIMIT_MS _IOR(AMSTREAM_IOC_MAGIC, 0xa1, unsigned long)
-#define AMSTREAM_IOC_SET_AUDIO_DELAY_LIMIT_MS _IOW(AMSTREAM_IOC_MAGIC, 0xa2, unsigned long)
-#define AMSTREAM_IOC_GET_AUDIO_DELAY_LIMIT_MS _IOR(AMSTREAM_IOC_MAGIC, 0xa3, unsigned long)
-#define AMSTREAM_IOC_GET_AUDIO_CUR_DELAY_MS _IOR(AMSTREAM_IOC_MAGIC, 0xa4, unsigned long)
-#define AMSTREAM_IOC_GET_VIDEO_CUR_DELAY_MS _IOR(AMSTREAM_IOC_MAGIC, 0xa5, unsigned long)
-#define AMSTREAM_IOC_GET_AUDIO_AVG_BITRATE_BPS _IOR(AMSTREAM_IOC_MAGIC, 0xa6, unsigned long)
-#define AMSTREAM_IOC_GET_VIDEO_AVG_BITRATE_BPS _IOR(AMSTREAM_IOC_MAGIC, 0xa7, unsigned long)
-
-#define TRICKMODE_NONE 0x00
-#define TRICKMODE_I 0x01
-#define TRICKMODE_FFFB 0x02
-
-#define TRICK_STAT_DONE 0x01
-#define TRICK_STAT_WAIT 0x00
-
-#define AUDIO_EXTRA_DATA_SIZE (4096)
-#define MAX_SUB_NUM 32
-/*
-enum VIDEO_DEC_TYPE
-{
- VIDEO_DEC_FORMAT_UNKNOW,
- VIDEO_DEC_FORMAT_MPEG4_3,
- VIDEO_DEC_FORMAT_MPEG4_4,
- VIDEO_DEC_FORMAT_MPEG4_5,
- VIDEO_DEC_FORMAT_H264,
- VIDEO_DEC_FORMAT_MJPEG,
- VIDEO_DEC_FORMAT_MP4,
- VIDEO_DEC_FORMAT_H263,
- VIDEO_DEC_FORMAT_REAL_8,
- VIDEO_DEC_FORMAT_REAL_9,
- VIDEO_DEC_FORMAT_WMV3,
- VIDEO_DEC_FORMAT_WVC1,
- VIDEO_DEC_FORMAT_SW,
- VIDEO_DEC_FORMAT_MAX
-};
-*/
-struct buf_status {
- int size;
- int data_len;
- int free_len;
- unsigned int read_pointer;
- unsigned int write_pointer;
-};
-
-
-struct vdec_status {
- unsigned int width;
- unsigned int height;
- unsigned int fps;
- unsigned int error_count;
- unsigned int status;
-};
-
-struct adec_status {
- unsigned int channels;
- unsigned int sample_rate;
- unsigned int resolution;
- unsigned int error_count;
- unsigned int status;
-};
-
-struct am_io_param {
- union {
- int data;
- int id;//get bufstatus? //or others
- };
-
- int len; //buffer size;
-
- union {
- char buf[1];
- struct buf_status status;
- struct vdec_status vstatus;
- struct adec_status astatus;
- };
-};
-struct audio_info {
- int valid;
- int sample_rate;
- int channels;
- int bitrate;
- int codec_id;
- int block_align;
- int extradata_size;
- char extradata[AUDIO_EXTRA_DATA_SIZE];
-};
-
-struct dec_sysinfo {
- unsigned int format;
- unsigned int width;
- unsigned int height;
- unsigned int rate;
- unsigned int extra;
- unsigned int status;
- unsigned int ratio;
- void *param;
- unsigned long long ratio64;
-};
-
-struct subtitle_info {
- unsigned char id;
- unsigned char width;
- unsigned char height;
- unsigned char type;
-};
-
-struct codec_profile_t {
- char *name; // video codec short name
- char *profile; // Attributes,seperated by commas
-};
-#define SUPPORT_VDEC_NUM (8)
-
-int vcodec_profile_register(const struct codec_profile_t *vdec_profile);
-int vcodec_profile_read(char *buf);
-
-#ifdef __KERNEL__
-#ifdef ENABLE_DEMUX_DRIVER
-/*TS demux operation interface*/
-struct tsdemux_ops {
- int (*reset)(void);
- int (*set_reset_flag)(void);
- int (*request_irq)(irq_handler_t handler, void *data);
- int (*free_irq)(void);
- int (*set_vid)(int vpid);
- int (*set_aid)(int apid);
- int (*set_sid)(int spid);
- int (*set_skipbyte)(int skipbyte);
- int (*set_demux)(int dev);
-};
-
-void tsdemux_set_ops(struct tsdemux_ops *ops);
-int tsdemux_set_reset_flag(void);
-
-#endif /*ENABLE_DEMUX_DRIVER*/
-void set_vdec_func(int (*vdec_func)(struct vdec_status *));
-void set_adec_func(int (*adec_func)(struct adec_status *));
-void set_trickmode_func(int (*trickmode_func)(unsigned long trickmode));
-void wakeup_sub_poll(void);
-int wakeup_userdata_poll(int wp, int start_phyaddr, int buf_size);
-int get_sub_type(void);
-#endif
-
-typedef struct tcon_gamma_table_s {
- unsigned short data[256];
-} tcon_gamma_table_t;
-
-typedef struct tcon_rgb_ogo_s {
- unsigned int en;
- int r_pre_offset; // s11.0, range -1024~+1023, default is 0
- int g_pre_offset; // s11.0, range -1024~+1023, default is 0
- int b_pre_offset; // s11.0, range -1024~+1023, default is 0
- unsigned int r_gain; // u1.10, range 0~2047, default is 1024 (1.0x)
- unsigned int g_gain; // u1.10, range 0~2047, default is 1024 (1.0x)
- unsigned int b_gain; // u1.10, range 0~2047, default is 1024 (1.0x)
- int r_post_offset; // s11.0, range -1024~+1023, default is 0
- int g_post_offset; // s11.0, range -1024~+1023, default is 0
- int b_post_offset; // s11.0, range -1024~+1023, default is 0
-} tcon_rgb_ogo_t;
-
-#endif //__AMSTREAM_H__
+#ifndef __AMSTREAM_H__
+#define __AMSTREAM_H__
+
+#include "ve.h"
+
+#define AMSTREAM_IOC_MAGIC 'S'
+
+#define AMSTREAM_IOC_VB_START _IOW(AMSTREAM_IOC_MAGIC, 0x00, int)
+#define AMSTREAM_IOC_VB_SIZE _IOW(AMSTREAM_IOC_MAGIC, 0x01, int)
+#define AMSTREAM_IOC_AB_START _IOW(AMSTREAM_IOC_MAGIC, 0x02, int)
+#define AMSTREAM_IOC_AB_SIZE _IOW(AMSTREAM_IOC_MAGIC, 0x03, int)
+#define AMSTREAM_IOC_VFORMAT _IOW(AMSTREAM_IOC_MAGIC, 0x04, int)
+#define AMSTREAM_IOC_AFORMAT _IOW(AMSTREAM_IOC_MAGIC, 0x05, int)
+#define AMSTREAM_IOC_VID _IOW(AMSTREAM_IOC_MAGIC, 0x06, int)
+#define AMSTREAM_IOC_AID _IOW(AMSTREAM_IOC_MAGIC, 0x07, int)
+#define AMSTREAM_IOC_VB_STATUS _IOR(AMSTREAM_IOC_MAGIC, 0x08, unsigned long)
+#define AMSTREAM_IOC_AB_STATUS _IOR(AMSTREAM_IOC_MAGIC, 0x09, unsigned long)
+#define AMSTREAM_IOC_SYSINFO _IOW(AMSTREAM_IOC_MAGIC, 0x0a, int)
+#define AMSTREAM_IOC_ACHANNEL _IOW(AMSTREAM_IOC_MAGIC, 0x0b, int)
+#define AMSTREAM_IOC_SAMPLERATE _IOW(AMSTREAM_IOC_MAGIC, 0x0c, int)
+#define AMSTREAM_IOC_DATAWIDTH _IOW(AMSTREAM_IOC_MAGIC, 0x0d, int)
+#define AMSTREAM_IOC_TSTAMP _IOW(AMSTREAM_IOC_MAGIC, 0x0e, unsigned long)
+#define AMSTREAM_IOC_VDECSTAT _IOR(AMSTREAM_IOC_MAGIC, 0x0f, unsigned long)
+#define AMSTREAM_IOC_ADECSTAT _IOR(AMSTREAM_IOC_MAGIC, 0x10, unsigned long)
+
+#define AMSTREAM_IOC_PORT_INIT _IO(AMSTREAM_IOC_MAGIC, 0x11)
+#define AMSTREAM_IOC_TRICKMODE _IOW(AMSTREAM_IOC_MAGIC, 0x12, unsigned long)
+
+#define AMSTREAM_IOC_AUDIO_INFO _IOW(AMSTREAM_IOC_MAGIC, 0x13, unsigned long)
+#define AMSTREAM_IOC_TRICK_STAT _IOR(AMSTREAM_IOC_MAGIC, 0x14, unsigned long)
+#define AMSTREAM_IOC_AUDIO_RESET _IO(AMSTREAM_IOC_MAGIC, 0x15)
+#define AMSTREAM_IOC_SID _IOW(AMSTREAM_IOC_MAGIC, 0x16, int)
+#define AMSTREAM_IOC_VPAUSE _IOW(AMSTREAM_IOC_MAGIC, 0x17, int)
+#define AMSTREAM_IOC_AVTHRESH _IOW(AMSTREAM_IOC_MAGIC, 0x18, int)
+#define AMSTREAM_IOC_SYNCTHRESH _IOW(AMSTREAM_IOC_MAGIC, 0x19, int)
+#define AMSTREAM_IOC_SUB_RESET _IOW(AMSTREAM_IOC_MAGIC, 0x1a, int)
+#define AMSTREAM_IOC_SUB_LENGTH _IOR(AMSTREAM_IOC_MAGIC, 0x1b, unsigned long)
+#define AMSTREAM_IOC_SET_DEC_RESET _IOW(AMSTREAM_IOC_MAGIC, 0x1c, int)
+#define AMSTREAM_IOC_TS_SKIPBYTE _IOW(AMSTREAM_IOC_MAGIC, 0x1d, int)
+#define AMSTREAM_IOC_SUB_TYPE _IOW(AMSTREAM_IOC_MAGIC, 0x1e, int)
+#define AMSTREAM_IOC_CLEAR_VIDEO _IOW(AMSTREAM_IOC_MAGIC, 0x1f, int)
+
+#define AMSTREAM_IOC_APTS _IOR(AMSTREAM_IOC_MAGIC, 0x40, unsigned long)
+#define AMSTREAM_IOC_VPTS _IOR(AMSTREAM_IOC_MAGIC, 0x41, unsigned long)
+#define AMSTREAM_IOC_PCRSCR _IOR(AMSTREAM_IOC_MAGIC, 0x42, unsigned long)
+#define AMSTREAM_IOC_SYNCENABLE _IOW(AMSTREAM_IOC_MAGIC, 0x43, unsigned long)
+#define AMSTREAM_IOC_GET_SYNC_ADISCON _IOR(AMSTREAM_IOC_MAGIC, 0x44, unsigned long)
+#define AMSTREAM_IOC_SET_SYNC_ADISCON _IOW(AMSTREAM_IOC_MAGIC, 0x45, unsigned long)
+#define AMSTREAM_IOC_GET_SYNC_VDISCON _IOR(AMSTREAM_IOC_MAGIC, 0x46, unsigned long)
+#define AMSTREAM_IOC_SET_SYNC_VDISCON _IOW(AMSTREAM_IOC_MAGIC, 0x47, unsigned long)
+#define AMSTREAM_IOC_GET_VIDEO_DISABLE _IOR(AMSTREAM_IOC_MAGIC, 0x48, unsigned long)
+#define AMSTREAM_IOC_SET_VIDEO_DISABLE _IOW(AMSTREAM_IOC_MAGIC, 0x49, unsigned long)
+#define AMSTREAM_IOC_SET_PCRSCR _IOW(AMSTREAM_IOC_MAGIC, 0x4a, unsigned long)
+#define AMSTREAM_IOC_GET_VIDEO_AXIS _IOR(AMSTREAM_IOC_MAGIC, 0x4b, unsigned long)
+#define AMSTREAM_IOC_SET_VIDEO_AXIS _IOW(AMSTREAM_IOC_MAGIC, 0x4c, unsigned long)
+#define AMSTREAM_IOC_GET_VIDEO_CROP _IOR(AMSTREAM_IOC_MAGIC, 0x4d, unsigned long)
+#define AMSTREAM_IOC_SET_VIDEO_CROP _IOW(AMSTREAM_IOC_MAGIC, 0x4e, unsigned long)
+
+// VPP.VE IOCTL command list
+#define AMSTREAM_IOC_VE_BEXT _IOW(AMSTREAM_IOC_MAGIC, 0x20, struct ve_bext_s )
+#define AMSTREAM_IOC_VE_DNLP _IOW(AMSTREAM_IOC_MAGIC, 0x21, struct ve_dnlp_s )
+#define AMSTREAM_IOC_VE_HSVS _IOW(AMSTREAM_IOC_MAGIC, 0x22, struct ve_hsvs_s )
+#define AMSTREAM_IOC_VE_CCOR _IOW(AMSTREAM_IOC_MAGIC, 0x23, struct ve_ccor_s )
+#define AMSTREAM_IOC_VE_BENH _IOW(AMSTREAM_IOC_MAGIC, 0x24, struct ve_benh_s )
+#define AMSTREAM_IOC_VE_DEMO _IOW(AMSTREAM_IOC_MAGIC, 0x25, struct ve_demo_s )
+#define AMSTREAM_IOC_VE_VDO_MEAS _IOW(AMSTREAM_IOC_MAGIC, 0x27, struct vdo_meas_s )
+#define AMSTREAM_IOC_VE_DEBUG _IOWR(AMSTREAM_IOC_MAGIC, 0x28, unsigned long long)
+#define AMSTREAM_IOC_VE_REGMAP _IOW(AMSTREAM_IOC_MAGIC, 0x29, struct ve_regmap_s)
+
+// VPP.CM IOCTL command list
+#define AMSTREAM_IOC_CM_REGION _IOW(AMSTREAM_IOC_MAGIC, 0x30, struct cm_region_s)
+#define AMSTREAM_IOC_CM_TOP _IOW(AMSTREAM_IOC_MAGIC, 0x31, struct cm_top_s )
+#define AMSTREAM_IOC_CM_DEMO _IOW(AMSTREAM_IOC_MAGIC, 0x32, struct cm_demo_s )
+#define AMSTREAM_IOC_CM_DEBUG _IOWR(AMSTREAM_IOC_MAGIC, 0x33, unsigned long long)
+#define AMSTREAM_IOC_CM_REGMAP _IOW(AMSTREAM_IOC_MAGIC, 0x34, struct cm_regmap_s)
+
+//VPP.3D IOCTL command list
+#define AMSTREAM_IOC_SET_3D_TYPE _IOW(AMSTREAM_IOC_MAGIC, 0x3c, unsigned int)
+#define AMSTREAM_IOC_GET_3D_TYPE _IOW(AMSTREAM_IOC_MAGIC, 0x3d, unsigned int)
+
+#define AMSTREAM_IOC_SUB_NUM _IOR(AMSTREAM_IOC_MAGIC, 0x50, unsigned long)
+#define AMSTREAM_IOC_SUB_INFO _IOR(AMSTREAM_IOC_MAGIC, 0x51, unsigned long)
+#define AMSTREAM_IOC_GET_BLACKOUT_POLICY _IOR(AMSTREAM_IOC_MAGIC, 0x52, unsigned long)
+#define AMSTREAM_IOC_SET_BLACKOUT_POLICY _IOW(AMSTREAM_IOC_MAGIC, 0x53, unsigned long)
+#define AMSTREAM_IOC_GET_SCREEN_MODE _IOR(AMSTREAM_IOC_MAGIC, 0x58, int)
+#define AMSTREAM_IOC_SET_SCREEN_MODE _IOW(AMSTREAM_IOC_MAGIC, 0x59, int)
+#define AMSTREAM_IOC_GET_VIDEO_DISCONTINUE_REPORT _IOR(AMSTREAM_IOC_MAGIC, 0x5a, int)
+#define AMSTREAM_IOC_SET_VIDEO_DISCONTINUE_REPORT _IOW(AMSTREAM_IOC_MAGIC, 0x5b, int)
+#define AMSTREAM_IOC_VF_STATUS _IOR(AMSTREAM_IOC_MAGIC, 0x60, unsigned long)
+#define AMSTREAM_IOC_CLEAR_VBUF _IO(AMSTREAM_IOC_MAGIC, 0x80)
+
+#define AMSTREAM_IOC_APTS_LOOKUP _IOR(AMSTREAM_IOC_MAGIC, 0x81, unsigned long)
+#define GET_FIRST_APTS_FLAG _IOR(AMSTREAM_IOC_MAGIC, 0x82, long)
+
+#define AMSTREAM_IOC_GET_SYNC_ADISCON_DIFF _IOR(AMSTREAM_IOC_MAGIC, 0x83, unsigned long)
+#define AMSTREAM_IOC_GET_SYNC_VDISCON_DIFF _IOR(AMSTREAM_IOC_MAGIC, 0x84, unsigned long)
+#define AMSTREAM_IOC_SET_SYNC_ADISCON_DIFF _IOW(AMSTREAM_IOC_MAGIC, 0x85, unsigned long)
+#define AMSTREAM_IOC_SET_SYNC_VDISCON_DIFF _IOW(AMSTREAM_IOC_MAGIC, 0x86, unsigned long)
+#define AMSTREAM_IOC_GET_FREERUN_MODE _IOR(AMSTREAM_IOC_MAGIC, 0x87, unsigned long)
+#define AMSTREAM_IOC_SET_FREERUN_MODE _IOW(AMSTREAM_IOC_MAGIC, 0x88, unsigned long)
+#define AMSTREAM_IOC_SET_DEMUX _IOW(AMSTREAM_IOC_MAGIC, 0x90, unsigned long)
+
+#define AMSTREAM_IOC_SET_VIDEO_DELAY_LIMIT_MS _IOW(AMSTREAM_IOC_MAGIC, 0xa0, unsigned long)
+#define AMSTREAM_IOC_GET_VIDEO_DELAY_LIMIT_MS _IOR(AMSTREAM_IOC_MAGIC, 0xa1, unsigned long)
+#define AMSTREAM_IOC_SET_AUDIO_DELAY_LIMIT_MS _IOW(AMSTREAM_IOC_MAGIC, 0xa2, unsigned long)
+#define AMSTREAM_IOC_GET_AUDIO_DELAY_LIMIT_MS _IOR(AMSTREAM_IOC_MAGIC, 0xa3, unsigned long)
+#define AMSTREAM_IOC_GET_AUDIO_CUR_DELAY_MS _IOR(AMSTREAM_IOC_MAGIC, 0xa4, unsigned long)
+#define AMSTREAM_IOC_GET_VIDEO_CUR_DELAY_MS _IOR(AMSTREAM_IOC_MAGIC, 0xa5, unsigned long)
+#define AMSTREAM_IOC_GET_AUDIO_AVG_BITRATE_BPS _IOR(AMSTREAM_IOC_MAGIC, 0xa6, unsigned long)
+#define AMSTREAM_IOC_GET_VIDEO_AVG_BITRATE_BPS _IOR(AMSTREAM_IOC_MAGIC, 0xa7, unsigned long)
+
+#define TRICKMODE_NONE 0x00
+#define TRICKMODE_I 0x01
+#define TRICKMODE_FFFB 0x02
+
+#define TRICK_STAT_DONE 0x01
+#define TRICK_STAT_WAIT 0x00
+
+#define AUDIO_EXTRA_DATA_SIZE (4096)
+#define MAX_SUB_NUM 32
+/*
+enum VIDEO_DEC_TYPE
+{
+ VIDEO_DEC_FORMAT_UNKNOW,
+ VIDEO_DEC_FORMAT_MPEG4_3,
+ VIDEO_DEC_FORMAT_MPEG4_4,
+ VIDEO_DEC_FORMAT_MPEG4_5,
+ VIDEO_DEC_FORMAT_H264,
+ VIDEO_DEC_FORMAT_MJPEG,
+ VIDEO_DEC_FORMAT_MP4,
+ VIDEO_DEC_FORMAT_H263,
+ VIDEO_DEC_FORMAT_REAL_8,
+ VIDEO_DEC_FORMAT_REAL_9,
+ VIDEO_DEC_FORMAT_WMV3,
+ VIDEO_DEC_FORMAT_WVC1,
+ VIDEO_DEC_FORMAT_SW,
+ VIDEO_DEC_FORMAT_MAX
+};
+*/
+struct buf_status {
+ int size;
+ int data_len;
+ int free_len;
+ unsigned int read_pointer;
+ unsigned int write_pointer;
+};
+
+
+struct vdec_status {
+ unsigned int width;
+ unsigned int height;
+ unsigned int fps;
+ unsigned int error_count;
+ unsigned int status;
+};
+
+struct adec_status {
+ unsigned int channels;
+ unsigned int sample_rate;
+ unsigned int resolution;
+ unsigned int error_count;
+ unsigned int status;
+};
+
+struct am_io_param {
+ union {
+ int data;
+ int id;//get bufstatus? //or others
+ };
+
+ int len; //buffer size;
+
+ union {
+ char buf[1];
+ struct buf_status status;
+ struct vdec_status vstatus;
+ struct adec_status astatus;
+ };
+};
+struct audio_info {
+ int valid;
+ int sample_rate;
+ int channels;
+ int bitrate;
+ int codec_id;
+ int block_align;
+ int extradata_size;
+ char extradata[AUDIO_EXTRA_DATA_SIZE];
+};
+
+struct dec_sysinfo {
+ unsigned int format;
+ unsigned int width;
+ unsigned int height;
+ unsigned int rate;
+ unsigned int extra;
+ unsigned int status;
+ unsigned int ratio;
+ void *param;
+ unsigned long long ratio64;
+};
+
+struct subtitle_info {
+ unsigned char id;
+ unsigned char width;
+ unsigned char height;
+ unsigned char type;
+};
+
+struct codec_profile_t {
+ char *name; // video codec short name
+ char *profile; // Attributes,seperated by commas
+};
+#define SUPPORT_VDEC_NUM (8)
+
+int vcodec_profile_register(const struct codec_profile_t *vdec_profile);
+int vcodec_profile_read(char *buf);
+
+#ifdef __KERNEL__
+#ifdef ENABLE_DEMUX_DRIVER
+/*TS demux operation interface*/
+struct tsdemux_ops {
+ int (*reset)(void);
+ int (*set_reset_flag)(void);
+ int (*request_irq)(irq_handler_t handler, void *data);
+ int (*free_irq)(void);
+ int (*set_vid)(int vpid);
+ int (*set_aid)(int apid);
+ int (*set_sid)(int spid);
+ int (*set_skipbyte)(int skipbyte);
+ int (*set_demux)(int dev);
+};
+
+void tsdemux_set_ops(struct tsdemux_ops *ops);
+int tsdemux_set_reset_flag(void);
+
+#endif /*ENABLE_DEMUX_DRIVER*/
+void set_vdec_func(int (*vdec_func)(struct vdec_status *));
+void set_adec_func(int (*adec_func)(struct adec_status *));
+void set_trickmode_func(int (*trickmode_func)(unsigned long trickmode));
+void wakeup_sub_poll(void);
+int wakeup_userdata_poll(int wp, int start_phyaddr, int buf_size);
+int get_sub_type(void);
+#endif
+
+typedef struct tcon_gamma_table_s {
+ unsigned short data[256];
+} tcon_gamma_table_t;
+
+typedef struct tcon_rgb_ogo_s {
+ unsigned int en;
+ int r_pre_offset; // s11.0, range -1024~+1023, default is 0
+ int g_pre_offset; // s11.0, range -1024~+1023, default is 0
+ int b_pre_offset; // s11.0, range -1024~+1023, default is 0
+ unsigned int r_gain; // u1.10, range 0~2047, default is 1024 (1.0x)
+ unsigned int g_gain; // u1.10, range 0~2047, default is 1024 (1.0x)
+ unsigned int b_gain; // u1.10, range 0~2047, default is 1024 (1.0x)
+ int r_post_offset; // s11.0, range -1024~+1023, default is 0
+ int g_post_offset; // s11.0, range -1024~+1023, default is 0
+ int b_post_offset; // s11.0, range -1024~+1023, default is 0
+} tcon_rgb_ogo_t;
+
+#endif //__AMSTREAM_H__
diff --git a/tvapi/libtv/include/amvecm.h b/tvapi/libtv/include/amvecm.h
index 1b488f6..1797607 100644
--- a/tvapi/libtv/include/amvecm.h
+++ b/tvapi/libtv/include/amvecm.h
@@ -1,68 +1,68 @@
-#ifndef __AMVECM_H
-#define __AMVECM_H
-
-#include "ve.h"
-#include "cm.h"
-#include "amstream.h"
-
-
-//struct ve_dnlp_s video_ve_dnlp;
-
-#define FLAG_RSV31 (1 << 31)
-#define FLAG_RSV30 (1 << 30)
-#define FLAG_VE_DNLP (1 << 29)
-#define FLAG_VE_NEW_DNLP (1 << 28)
-#define FLAG_RSV27 (1 << 27)
-#define FLAG_RSV26 (1 << 26)
-#define FLAG_RSV25 (1 << 25)
-#define FLAG_RSV24 (1 << 24)
-#define FLAG_3D_SYNC_DIS (1 << 23)
-#define FLAG_3D_SYNC_EN (1 << 22)
-#define FLAG_VLOCK_PLL (1 << 21)
-#define FLAG_VLOCK_ENC (1 << 20)
-#define FLAG_VE_DNLP_EN (1 << 19)
-#define FLAG_VE_DNLP_DIS (1 << 18)
-#define FLAG_RSV17 (1 << 17)
-#define FLAG_RSV16 (1 << 16)
-#define FLAG_GAMMA_TABLE_EN (1 << 15)
-#define FLAG_GAMMA_TABLE_DIS (1 << 14)
-#define FLAG_GAMMA_TABLE_R (1 << 13)
-#define FLAG_GAMMA_TABLE_G (1 << 12)
-#define FLAG_GAMMA_TABLE_B (1 << 11)
-#define FLAG_RGB_OGO (1 << 10)
-#define FLAG_RSV9 (1 << 9)
-#define FLAG_RSV8 (1 << 8)
-#define FLAG_BRI_CON (1 << 7)
-#define FLAG_LVDS_FREQ_SW (1 << 6)
-#define FLAG_REG_MAP5 (1 << 5)
-#define FLAG_REG_MAP4 (1 << 4)
-#define FLAG_REG_MAP3 (1 << 3)
-#define FLAG_REG_MAP2 (1 << 2)
-#define FLAG_REG_MAP1 (1 << 1)
-#define FLAG_REG_MAP0 (1 << 0)
-
-
-#define AMVECM_IOC_MAGIC 'C'
-
-#define AMVECM_IOC_VE_DNLP _IOW(AMVECM_IOC_MAGIC, 0x21, struct ve_dnlp_s )
-#define AMVECM_IOC_G_HIST_AVG _IOW(AMVECM_IOC_MAGIC, 0x22, struct ve_hist_s )
-#define AMVECM_IOC_VE_DNLP_EN _IO(AMVECM_IOC_MAGIC, 0x23)
-#define AMVECM_IOC_VE_DNLP_DIS _IO(AMVECM_IOC_MAGIC, 0x24)
-#define AMVECM_IOC_VE_NEW_DNLP _IOW(AMVECM_IOC_MAGIC, 0x25, struct ve_dnlp_table_s )
-
-
-// VPP.CM IOCTL command list
-#define AMVECM_IOC_LOAD_REG _IOW(AMVECM_IOC_MAGIC, 0x30, struct am_regs_s)
-
-
-// VPP.GAMMA IOCTL command list
-#define AMVECM_IOC_GAMMA_TABLE_EN _IO(AMVECM_IOC_MAGIC, 0x40)
-#define AMVECM_IOC_GAMMA_TABLE_DIS _IO(AMVECM_IOC_MAGIC, 0x41)
-#define AMVECM_IOC_GAMMA_TABLE_R _IOW(AMVECM_IOC_MAGIC, 0x42, struct tcon_gamma_table_s)
-#define AMVECM_IOC_GAMMA_TABLE_G _IOW(AMVECM_IOC_MAGIC, 0x43, struct tcon_gamma_table_s)
-#define AMVECM_IOC_GAMMA_TABLE_B _IOW(AMVECM_IOC_MAGIC, 0x44, struct tcon_gamma_table_s)
-#define AMVECM_IOC_S_RGB_OGO _IOW(AMVECM_IOC_MAGIC, 0x45, struct tcon_rgb_ogo_s)
-#define AMVECM_IOC_G_RGB_OGO _IOR(AMVECM_IOC_MAGIC, 0x46, struct tcon_rgb_ogo_s)
-
-#endif /* __AMVECM_H */
-
+#ifndef __AMVECM_H
+#define __AMVECM_H
+
+#include "ve.h"
+#include "cm.h"
+#include "amstream.h"
+
+
+//struct ve_dnlp_s video_ve_dnlp;
+
+#define FLAG_RSV31 (1 << 31)
+#define FLAG_RSV30 (1 << 30)
+#define FLAG_VE_DNLP (1 << 29)
+#define FLAG_VE_NEW_DNLP (1 << 28)
+#define FLAG_RSV27 (1 << 27)
+#define FLAG_RSV26 (1 << 26)
+#define FLAG_RSV25 (1 << 25)
+#define FLAG_RSV24 (1 << 24)
+#define FLAG_3D_SYNC_DIS (1 << 23)
+#define FLAG_3D_SYNC_EN (1 << 22)
+#define FLAG_VLOCK_PLL (1 << 21)
+#define FLAG_VLOCK_ENC (1 << 20)
+#define FLAG_VE_DNLP_EN (1 << 19)
+#define FLAG_VE_DNLP_DIS (1 << 18)
+#define FLAG_RSV17 (1 << 17)
+#define FLAG_RSV16 (1 << 16)
+#define FLAG_GAMMA_TABLE_EN (1 << 15)
+#define FLAG_GAMMA_TABLE_DIS (1 << 14)
+#define FLAG_GAMMA_TABLE_R (1 << 13)
+#define FLAG_GAMMA_TABLE_G (1 << 12)
+#define FLAG_GAMMA_TABLE_B (1 << 11)
+#define FLAG_RGB_OGO (1 << 10)
+#define FLAG_RSV9 (1 << 9)
+#define FLAG_RSV8 (1 << 8)
+#define FLAG_BRI_CON (1 << 7)
+#define FLAG_LVDS_FREQ_SW (1 << 6)
+#define FLAG_REG_MAP5 (1 << 5)
+#define FLAG_REG_MAP4 (1 << 4)
+#define FLAG_REG_MAP3 (1 << 3)
+#define FLAG_REG_MAP2 (1 << 2)
+#define FLAG_REG_MAP1 (1 << 1)
+#define FLAG_REG_MAP0 (1 << 0)
+
+
+#define AMVECM_IOC_MAGIC 'C'
+
+#define AMVECM_IOC_VE_DNLP _IOW(AMVECM_IOC_MAGIC, 0x21, struct ve_dnlp_s )
+#define AMVECM_IOC_G_HIST_AVG _IOW(AMVECM_IOC_MAGIC, 0x22, struct ve_hist_s )
+#define AMVECM_IOC_VE_DNLP_EN _IO(AMVECM_IOC_MAGIC, 0x23)
+#define AMVECM_IOC_VE_DNLP_DIS _IO(AMVECM_IOC_MAGIC, 0x24)
+#define AMVECM_IOC_VE_NEW_DNLP _IOW(AMVECM_IOC_MAGIC, 0x25, struct ve_dnlp_table_s )
+
+
+// VPP.CM IOCTL command list
+#define AMVECM_IOC_LOAD_REG _IOW(AMVECM_IOC_MAGIC, 0x30, struct am_regs_s)
+
+
+// VPP.GAMMA IOCTL command list
+#define AMVECM_IOC_GAMMA_TABLE_EN _IO(AMVECM_IOC_MAGIC, 0x40)
+#define AMVECM_IOC_GAMMA_TABLE_DIS _IO(AMVECM_IOC_MAGIC, 0x41)
+#define AMVECM_IOC_GAMMA_TABLE_R _IOW(AMVECM_IOC_MAGIC, 0x42, struct tcon_gamma_table_s)
+#define AMVECM_IOC_GAMMA_TABLE_G _IOW(AMVECM_IOC_MAGIC, 0x43, struct tcon_gamma_table_s)
+#define AMVECM_IOC_GAMMA_TABLE_B _IOW(AMVECM_IOC_MAGIC, 0x44, struct tcon_gamma_table_s)
+#define AMVECM_IOC_S_RGB_OGO _IOW(AMVECM_IOC_MAGIC, 0x45, struct tcon_rgb_ogo_s)
+#define AMVECM_IOC_G_RGB_OGO _IOR(AMVECM_IOC_MAGIC, 0x46, struct tcon_rgb_ogo_s)
+
+#endif /* __AMVECM_H */
+
diff --git a/tvapi/libtv/include/cm.h b/tvapi/libtv/include/cm.h
index c9e0cb1..085e466 100644
--- a/tvapi/libtv/include/cm.h
+++ b/tvapi/libtv/include/cm.h
@@ -1,153 +1,153 @@
-#ifndef _TVOUT_CM_H
-#define _TVOUT_CM_H
-
-// ***************************************************************************
-// *** enum definitions *********************************************
-// ***************************************************************************
-
-typedef enum cm_region_idx_e {
- CM_REGION_IDX_0 = 0,
- CM_REGION_IDX_1,
- CM_REGION_IDX_2,
- CM_REGION_IDX_3,
- CM_REGION_IDX_4,
- CM_REGION_IDX_5,
- CM_REGION_IDX_6,
- CM_REGION_IDX_7,
-} cm_region_idx_t;
-
-typedef enum cm_sat_shape_e {
- CM_SAT_SHAPE_RIGHT_BIGGEST = 0,
- CM_SAT_SHAPE_LEFT_BIGGEST,
-} cm_sat_shape_t;
-
-typedef enum cm_hue_shape_e {
- CM_HUE_SHAPE_LEFT_MORE = 0,
- CM_HUE_SHAPE_RIGHT_MORE,
-} cm_hue_shape_t;
-
-typedef enum cm_demo_pos_e {
- CM_DEMO_POS_TOP = 0,
- CM_DEMO_POS_BOTTOM,
- CM_DEMO_POS_LEFT,
- CM_DEMO_POS_RIGHT,
-} cm_demo_pos_t;
-
-typedef enum cm_sat_sel_e {
- CM_SAT_SEL_U2_V2 = 0,
- CM_SAT_SEL_UV_MAX,
-} cm_sat_sel_t;
-
-typedef enum cm_csc_e {
- CM_CSC_601 = 0,
- CM_CSC_709,
- CM_CSC_FULL_601,
- CM_CSC_FULL_709,
-} cm_csc_t;
-
-// ***************************************************************************
-// *** struct definitions *********************************************
-// ***************************************************************************
-
-typedef struct cm_region_s {
- enum cm_region_idx_e region_idx;
- // sym
- unsigned char sym_en;
- // sat - top
- unsigned char sat_en;
- unsigned char sat_central_en;
- enum cm_sat_shape_e sat_shape;
- unsigned char sat_gain;
- unsigned char sat_inc;
- // sat - lum
- unsigned char sat_lum_h_slope;
- unsigned char sat_lum_l_slope;
- unsigned char sat_lum_h;
- unsigned char sat_lum_l;
- // sat - sat
- unsigned char sat_sat_h_slope;
- unsigned char sat_sat_l_slope;
- unsigned char sat_sat_h;
- unsigned char sat_sat_l;
- // hue - top
- unsigned char hue_en;
- unsigned char hue_central_en;
- enum cm_hue_shape_e hue_shape;
- unsigned char hue_gain;
- unsigned char hue_clockwise;
- unsigned char hue_shf_ran;
- unsigned short hue_shf_sta;
- // hue - lum
- unsigned char hue_lum_h_slope;
- unsigned char hue_lum_l_slope;
- unsigned char hue_lum_h;
- unsigned char hue_lum_l;
- // hue - sat
- unsigned char hue_sat_h_slope;
- unsigned char hue_sat_l_slope;
- unsigned char hue_sat_h;
- unsigned char hue_sat_l;
-} cm_region_t;
-
-typedef struct cm_top_s {
- unsigned char chroma_en;
- enum cm_sat_sel_e sat_sel;
- unsigned char uv_adj_en;
- unsigned char rgb_to_hue_en;
- enum cm_csc_e csc_sel;
-} cm_top_t;
-
-typedef struct cm_cbar_s {
- unsigned char en;
- unsigned char wid;
- unsigned char cr;
- unsigned char cb;
- unsigned char y;
-} cm_cbar_t;
-typedef struct cm_demo_s {
- unsigned char en;
- enum cm_demo_pos_e pos;
- unsigned char hlight_adj;
- unsigned short wid;
- struct cm_cbar_s cbar;
-} cm_demo_t;
-
-typedef struct cm_regmap_s {
- unsigned long reg[50];
-} cm_regmap_t;
-
-typedef enum reg_bus_type_e {
- REG_TYPE_PHY = 0,
- REG_TYPE_CBUS,
- REG_TYPE_APB,
- REG_TYPE_AXI,
- REG_TYPE_AHB,
- REG_TYPE_MPEG,
- REG_TYPE_INDEX_VPPCHROMA,
- REG_TYPE_INDEX_GAMMA,
- VALUE_TYPE_CONTRAST_BRIGHTNESS,
- REG_TYPE_INDEX_VPP_COEF,
- REG_TYPE_MAX,
-} reg_bus_type_t;
-
-/* Register table structure */
-typedef struct am_reg_s {
- unsigned int type; //32-bits; 0: CBUS; 1: APB BUS...
- unsigned int addr; //32-bits; Register address
- unsigned int mask; //32-bits; Valid bits
- unsigned int val; //32-bits; Register Value
-} am_reg_t;
-
-#ifdef AMVIDEO_REG_TABLE_DYNAMIC
-typedef struct am_regs_s {
- unsigned int length; // Length of total am_reg
- struct am_reg_s *am_reg;
-} am_regs_t;
-#else
-typedef struct am_regs_s {
- unsigned int length; // Length of total am_reg
- struct am_reg_s am_reg[512];
-} am_regs_t;
-#endif
-
-#endif // _TVOUT_CM_H
+#ifndef _TVOUT_CM_H
+#define _TVOUT_CM_H
+
+// ***************************************************************************
+// *** enum definitions *********************************************
+// ***************************************************************************
+
+typedef enum cm_region_idx_e {
+ CM_REGION_IDX_0 = 0,
+ CM_REGION_IDX_1,
+ CM_REGION_IDX_2,
+ CM_REGION_IDX_3,
+ CM_REGION_IDX_4,
+ CM_REGION_IDX_5,
+ CM_REGION_IDX_6,
+ CM_REGION_IDX_7,
+} cm_region_idx_t;
+
+typedef enum cm_sat_shape_e {
+ CM_SAT_SHAPE_RIGHT_BIGGEST = 0,
+ CM_SAT_SHAPE_LEFT_BIGGEST,
+} cm_sat_shape_t;
+
+typedef enum cm_hue_shape_e {
+ CM_HUE_SHAPE_LEFT_MORE = 0,
+ CM_HUE_SHAPE_RIGHT_MORE,
+} cm_hue_shape_t;
+
+typedef enum cm_demo_pos_e {
+ CM_DEMO_POS_TOP = 0,
+ CM_DEMO_POS_BOTTOM,
+ CM_DEMO_POS_LEFT,
+ CM_DEMO_POS_RIGHT,
+} cm_demo_pos_t;
+
+typedef enum cm_sat_sel_e {
+ CM_SAT_SEL_U2_V2 = 0,
+ CM_SAT_SEL_UV_MAX,
+} cm_sat_sel_t;
+
+typedef enum cm_csc_e {
+ CM_CSC_601 = 0,
+ CM_CSC_709,
+ CM_CSC_FULL_601,
+ CM_CSC_FULL_709,
+} cm_csc_t;
+
+// ***************************************************************************
+// *** struct definitions *********************************************
+// ***************************************************************************
+
+typedef struct cm_region_s {
+ enum cm_region_idx_e region_idx;
+ // sym
+ unsigned char sym_en;
+ // sat - top
+ unsigned char sat_en;
+ unsigned char sat_central_en;
+ enum cm_sat_shape_e sat_shape;
+ unsigned char sat_gain;
+ unsigned char sat_inc;
+ // sat - lum
+ unsigned char sat_lum_h_slope;
+ unsigned char sat_lum_l_slope;
+ unsigned char sat_lum_h;
+ unsigned char sat_lum_l;
+ // sat - sat
+ unsigned char sat_sat_h_slope;
+ unsigned char sat_sat_l_slope;
+ unsigned char sat_sat_h;
+ unsigned char sat_sat_l;
+ // hue - top
+ unsigned char hue_en;
+ unsigned char hue_central_en;
+ enum cm_hue_shape_e hue_shape;
+ unsigned char hue_gain;
+ unsigned char hue_clockwise;
+ unsigned char hue_shf_ran;
+ unsigned short hue_shf_sta;
+ // hue - lum
+ unsigned char hue_lum_h_slope;
+ unsigned char hue_lum_l_slope;
+ unsigned char hue_lum_h;
+ unsigned char hue_lum_l;
+ // hue - sat
+ unsigned char hue_sat_h_slope;
+ unsigned char hue_sat_l_slope;
+ unsigned char hue_sat_h;
+ unsigned char hue_sat_l;
+} cm_region_t;
+
+typedef struct cm_top_s {
+ unsigned char chroma_en;
+ enum cm_sat_sel_e sat_sel;
+ unsigned char uv_adj_en;
+ unsigned char rgb_to_hue_en;
+ enum cm_csc_e csc_sel;
+} cm_top_t;
+
+typedef struct cm_cbar_s {
+ unsigned char en;
+ unsigned char wid;
+ unsigned char cr;
+ unsigned char cb;
+ unsigned char y;
+} cm_cbar_t;
+typedef struct cm_demo_s {
+ unsigned char en;
+ enum cm_demo_pos_e pos;
+ unsigned char hlight_adj;
+ unsigned short wid;
+ struct cm_cbar_s cbar;
+} cm_demo_t;
+
+typedef struct cm_regmap_s {
+ unsigned long reg[50];
+} cm_regmap_t;
+
+typedef enum reg_bus_type_e {
+ REG_TYPE_PHY = 0,
+ REG_TYPE_CBUS,
+ REG_TYPE_APB,
+ REG_TYPE_AXI,
+ REG_TYPE_AHB,
+ REG_TYPE_MPEG,
+ REG_TYPE_INDEX_VPPCHROMA,
+ REG_TYPE_INDEX_GAMMA,
+ VALUE_TYPE_CONTRAST_BRIGHTNESS,
+ REG_TYPE_INDEX_VPP_COEF,
+ REG_TYPE_MAX,
+} reg_bus_type_t;
+
+/* Register table structure */
+typedef struct am_reg_s {
+ unsigned int type; //32-bits; 0: CBUS; 1: APB BUS...
+ unsigned int addr; //32-bits; Register address
+ unsigned int mask; //32-bits; Valid bits
+ unsigned int val; //32-bits; Register Value
+} am_reg_t;
+
+#ifdef AMVIDEO_REG_TABLE_DYNAMIC
+typedef struct am_regs_s {
+ unsigned int length; // Length of total am_reg
+ struct am_reg_s *am_reg;
+} am_regs_t;
+#else
+typedef struct am_regs_s {
+ unsigned int length; // Length of total am_reg
+ struct am_reg_s am_reg[512];
+} am_regs_t;
+#endif
+
+#endif // _TVOUT_CM_H
diff --git a/tvapi/libtv/include/hdmirx_cec.h b/tvapi/libtv/include/hdmirx_cec.h
index e7bfd06..45e60ed 100644
--- a/tvapi/libtv/include/hdmirx_cec.h
+++ b/tvapi/libtv/include/hdmirx_cec.h
@@ -15,293 +15,293 @@
#define CEC_MSG_QUEUE_SIZE 20
typedef enum _cec_logic_addr {
- E_LA_TV = 0,
- E_LA_RECORDER1 = 1,
- E_LA_RECORDER2 = 2,
- E_LA_TUNER1 = 3,
- E_LA_PLAYBACK1 = 4,
- E_LA_AUDIO_SYS = 5,
- E_LA_TUNER2 = 6,
- E_LA_TUNER3 = 7,
- E_LA_PLAYBACK2 = 8,
- E_LA_RECORER3 = 9,
- E_LA_TUNER4 = 10,
- E_LA_PLYBACK3 = 11,
- RESERVED_1 = 12,
- RESERVED_2 = 13,
- E_LA_FREE_USE = 14,
- E_LA_UNREGISTERED = 15,
- E_LA_BROADCAST = 15,
- E_LA_MAX = 15,
+ E_LA_TV = 0,
+ E_LA_RECORDER1 = 1,
+ E_LA_RECORDER2 = 2,
+ E_LA_TUNER1 = 3,
+ E_LA_PLAYBACK1 = 4,
+ E_LA_AUDIO_SYS = 5,
+ E_LA_TUNER2 = 6,
+ E_LA_TUNER3 = 7,
+ E_LA_PLAYBACK2 = 8,
+ E_LA_RECORER3 = 9,
+ E_LA_TUNER4 = 10,
+ E_LA_PLYBACK3 = 11,
+ RESERVED_1 = 12,
+ RESERVED_2 = 13,
+ E_LA_FREE_USE = 14,
+ E_LA_UNREGISTERED = 15,
+ E_LA_BROADCAST = 15,
+ E_LA_MAX = 15,
} _cec_logic_addr;
typedef enum _cec_dev_type {
- E_DEVICE_TYPE_TV = 0,
- E_DEVICE_TYPE_RECORDING_DEVICE = 1,
- E_DEVICE_TYPE_RESERVED = 2,
- E_DEVICE_TYPE_TUNER = 3,
- E_DEVICE_TYPE_PLAYBACK_DEVICE = 4,
- E_DEVICE_TYPE_AUDIO_SYSTEM = 5,
- E_DEVICE_TYPE_PURE_CEC_SWITCH = 6,
- E_DEVICE_TYPE_VIDEO_PROCESSOR = 7
+ E_DEVICE_TYPE_TV = 0,
+ E_DEVICE_TYPE_RECORDING_DEVICE = 1,
+ E_DEVICE_TYPE_RESERVED = 2,
+ E_DEVICE_TYPE_TUNER = 3,
+ E_DEVICE_TYPE_PLAYBACK_DEVICE = 4,
+ E_DEVICE_TYPE_AUDIO_SYSTEM = 5,
+ E_DEVICE_TYPE_PURE_CEC_SWITCH = 6,
+ E_DEVICE_TYPE_VIDEO_PROCESSOR = 7
} _cec_dev_type;
typedef enum _cec_cmd {
- //----- One Touch Play ----------------------------
- E_MSG_ACTIVE_SOURCE = 0x82,
- E_MSG_IMAGE_VIEW_ON = 0x04,
- E_MSG_TEXT_VIEW_ON = 0x0D,
- //----- Routing Control ---------------------------
- //E_MSG_RC_ACTIVE_SOURCE = 0x82,
- E_MSG_INACTIVE_SOURCE = 0x9D,
- E_MSG_REQUEST_ACTIVE_SOURCE = 0x85,
- E_MSG_ROUTING_CHANGE = 0x80,
- E_MSG_ROUTING_INFO = 0x81,
- E_MSG_SET_STREM_PATH = 0x86,
- //----- Standby Command ---------------------------
- E_MSG_STANDBY = 0x36,
- //----- One Touch Record---------------------------
- E_MSG_RECORD_ON = 0x09,
- E_MSG_RECORD_OFF = 0x0B,
- E_MSG_RECORD_STATUS = 0x0A,
- E_MSG_RECORD_TV_SCREEN = 0x0F,
- //----- Timer programmer -------------------------- CEC1.3a
- E_MSG_CLEAR_ANALOG_TIMER = 0x33,
- E_MSG_CLEAR_DIGITAL_TIMER = 0x99,
- E_MSG_CLEAR_EXT_TIMER = 0xA1,
- E_MSG_SET_ANALOG_TIMER = 0x34,
- E_MSG_SET_DIGITAL_TIMER = 0x97,
- E_MSG_SET_EXT_TIMER = 0xA2,
- E_MSG_SET_TIMER_PROGRAM_TITLE = 0x67,
- E_MSG_TIMER_CLEARD_STATUS = 0x43,
- E_MSG_TIMER_STATUS = 0x35,
- //----- System Information ------------------------
- E_MSG_CEC_VERSION = 0x9E, //1.3a
- E_MSG_GET_CEC_VERSION = 0x9F, //1.3a
- E_MSG_GIVE_PHYSICAL_ADDRESS = 0x83,
- E_MSG_REPORT_PHYSICAL_ADDRESS = 0x84,
- E_MSG_GET_MENU_LANGUAGE = 0x91,
- E_MSG_SET_MENU_LANGUAGE = 0x32,
- //E_MSG_POLLING_MESSAGE = ?,
- //E_MSG_REC_TYPE_PRESET = 0x00, //parameter ?
- //E_MSG_REC_TYPE_OWNSRC = 0x01, //parameter ?
- //----- Deck Control Feature-----------------------
- E_MSG_DECK_CTRL = 0x42,
- E_MSG_DECK_STATUS = 0x1B,
- E_MSG_GIVE_DECK_STATUS = 0x1A,
- E_MSG_PLAY = 0x41,
- //----- Tuner Control ------------------------------
- E_MSG_GIVE_TUNER_STATUS = 0x08,
- E_MSG_SEL_ANALOG_SERVICE = 0x92,
- E_MSG_SEL_DIGITAL_SERVICE = 0x93,
- E_MSG_TUNER_DEVICE_STATUS = 0x07,
- E_MSG_TUNER_STEP_DEC = 0x06,
- E_MSG_TUNER_STEP_INC = 0x05,
- //---------Vendor Specific -------------------------
- //E_MSG_CEC_VERSION = 0x9E, //1.3a
- //E_MSG_GET_CEC_VERSION = 0x9F, //1.3a
- E_MSG_DEVICE_VENDOR_ID = 0x87,
- E_MSG_GIVE_DEVICE_VENDOR_ID = 0x8C,
- E_MSG_VENDOR_COMMAND = 0x89,
- E_MSG_VENDOR_COMMAND_WITH_ID = 0xA0, //1.3a
- E_MSG_VENDOR_RC_BUT_DOWN = 0x8A,
- E_MSG_VENDOR_RC_BUT_UP = 0x8B,
- //----- OSD Display --------------------------------
- E_MSG_SET_OSD_STRING = 0x64,
- //----- Device OSD Name Transfer -------------------------
- E_MSG_OSDNT_GIVE_OSD_NAME = 0x46,
- E_MSG_OSDNT_SET_OSD_NAME = 0x47,
- //----- Device Menu Control ------------------------
- E_MSG_DMC_MENU_REQUEST = 0x8D,
- E_MSG_DMC_MENU_STATUS = 0x8E,
- E_MSG_UI_PRESS = 0x44,
- E_MSG_UI_RELEASE = 0x45,
- //----- Remote Control Passthrough ----------------
- //E_MSG_UI_PRESS = 0x44,
- //E_MSG_UI_RELEASE = 0x45,
- //----- Power Status ------------------------------
- E_MSG_GIVE_DEVICE_POWER_STATUS = 0x8F,
- E_MSG_REPORT_POWER_STATUS = 0x90,
- //----- General Protocal Message ------------------
- E_MSG_ABORT_MESSAGE = 0xFF, //Abort msg
- E_MSG_FEATURE_ABORT = 0x00, //Feature Abort
- //----- System Audio Control ----------------------
- E_MSG_ARC_GIVE_AUDIO_STATUS = 0x71,
- E_MSG_ARC_GIVE_SYSTEM_AUDIO_MODE_STATUS = 0x7D,
- E_MSG_ARC_REPORT_AUDIO_STATUS = 0x7A,
- E_MSG_ARC_SET_SYSTEM_AUDIO_MODE = 0x72,
- E_MSG_ARC_SYSTEM_AUDIO_MODE_REQUEST = 0x70,
- E_MSG_ARC_SYSTEM_AUDIO_MODE_STATUS = 0x7E,
- E_MSG_ARC_SET_AUDIO_RATE = 0x9A,
- //----- Audio Return Channel Control -------------
- E_MSG_ARC_INITIATE_ARC = 0xC0,
- E_MSG_ARC_REPORT_ARC_INITIATED = 0xC1,
- E_MSG_ARC_REPORT_ARC_TERMINATED = 0xC2,
- E_MSG_ARC_REQUEST_ARC_INITATION = 0xC3,
- E_MSG_ARC_REQUEST_ARC_TERMINATION = 0xC4,
- E_MSG_ARC_TERMINATED_ARC = 0xC5,
+ //----- One Touch Play ----------------------------
+ E_MSG_ACTIVE_SOURCE = 0x82,
+ E_MSG_IMAGE_VIEW_ON = 0x04,
+ E_MSG_TEXT_VIEW_ON = 0x0D,
+ //----- Routing Control ---------------------------
+ //E_MSG_RC_ACTIVE_SOURCE = 0x82,
+ E_MSG_INACTIVE_SOURCE = 0x9D,
+ E_MSG_REQUEST_ACTIVE_SOURCE = 0x85,
+ E_MSG_ROUTING_CHANGE = 0x80,
+ E_MSG_ROUTING_INFO = 0x81,
+ E_MSG_SET_STREM_PATH = 0x86,
+ //----- Standby Command ---------------------------
+ E_MSG_STANDBY = 0x36,
+ //----- One Touch Record---------------------------
+ E_MSG_RECORD_ON = 0x09,
+ E_MSG_RECORD_OFF = 0x0B,
+ E_MSG_RECORD_STATUS = 0x0A,
+ E_MSG_RECORD_TV_SCREEN = 0x0F,
+ //----- Timer programmer -------------------------- CEC1.3a
+ E_MSG_CLEAR_ANALOG_TIMER = 0x33,
+ E_MSG_CLEAR_DIGITAL_TIMER = 0x99,
+ E_MSG_CLEAR_EXT_TIMER = 0xA1,
+ E_MSG_SET_ANALOG_TIMER = 0x34,
+ E_MSG_SET_DIGITAL_TIMER = 0x97,
+ E_MSG_SET_EXT_TIMER = 0xA2,
+ E_MSG_SET_TIMER_PROGRAM_TITLE = 0x67,
+ E_MSG_TIMER_CLEARD_STATUS = 0x43,
+ E_MSG_TIMER_STATUS = 0x35,
+ //----- System Information ------------------------
+ E_MSG_CEC_VERSION = 0x9E, //1.3a
+ E_MSG_GET_CEC_VERSION = 0x9F, //1.3a
+ E_MSG_GIVE_PHYSICAL_ADDRESS = 0x83,
+ E_MSG_REPORT_PHYSICAL_ADDRESS = 0x84,
+ E_MSG_GET_MENU_LANGUAGE = 0x91,
+ E_MSG_SET_MENU_LANGUAGE = 0x32,
+ //E_MSG_POLLING_MESSAGE = ?,
+ //E_MSG_REC_TYPE_PRESET = 0x00, //parameter ?
+ //E_MSG_REC_TYPE_OWNSRC = 0x01, //parameter ?
+ //----- Deck Control Feature-----------------------
+ E_MSG_DECK_CTRL = 0x42,
+ E_MSG_DECK_STATUS = 0x1B,
+ E_MSG_GIVE_DECK_STATUS = 0x1A,
+ E_MSG_PLAY = 0x41,
+ //----- Tuner Control ------------------------------
+ E_MSG_GIVE_TUNER_STATUS = 0x08,
+ E_MSG_SEL_ANALOG_SERVICE = 0x92,
+ E_MSG_SEL_DIGITAL_SERVICE = 0x93,
+ E_MSG_TUNER_DEVICE_STATUS = 0x07,
+ E_MSG_TUNER_STEP_DEC = 0x06,
+ E_MSG_TUNER_STEP_INC = 0x05,
+ //---------Vendor Specific -------------------------
+ //E_MSG_CEC_VERSION = 0x9E, //1.3a
+ //E_MSG_GET_CEC_VERSION = 0x9F, //1.3a
+ E_MSG_DEVICE_VENDOR_ID = 0x87,
+ E_MSG_GIVE_DEVICE_VENDOR_ID = 0x8C,
+ E_MSG_VENDOR_COMMAND = 0x89,
+ E_MSG_VENDOR_COMMAND_WITH_ID = 0xA0, //1.3a
+ E_MSG_VENDOR_RC_BUT_DOWN = 0x8A,
+ E_MSG_VENDOR_RC_BUT_UP = 0x8B,
+ //----- OSD Display --------------------------------
+ E_MSG_SET_OSD_STRING = 0x64,
+ //----- Device OSD Name Transfer -------------------------
+ E_MSG_OSDNT_GIVE_OSD_NAME = 0x46,
+ E_MSG_OSDNT_SET_OSD_NAME = 0x47,
+ //----- Device Menu Control ------------------------
+ E_MSG_DMC_MENU_REQUEST = 0x8D,
+ E_MSG_DMC_MENU_STATUS = 0x8E,
+ E_MSG_UI_PRESS = 0x44,
+ E_MSG_UI_RELEASE = 0x45,
+ //----- Remote Control Passthrough ----------------
+ //E_MSG_UI_PRESS = 0x44,
+ //E_MSG_UI_RELEASE = 0x45,
+ //----- Power Status ------------------------------
+ E_MSG_GIVE_DEVICE_POWER_STATUS = 0x8F,
+ E_MSG_REPORT_POWER_STATUS = 0x90,
+ //----- General Protocal Message ------------------
+ E_MSG_ABORT_MESSAGE = 0xFF, //Abort msg
+ E_MSG_FEATURE_ABORT = 0x00, //Feature Abort
+ //----- System Audio Control ----------------------
+ E_MSG_ARC_GIVE_AUDIO_STATUS = 0x71,
+ E_MSG_ARC_GIVE_SYSTEM_AUDIO_MODE_STATUS = 0x7D,
+ E_MSG_ARC_REPORT_AUDIO_STATUS = 0x7A,
+ E_MSG_ARC_SET_SYSTEM_AUDIO_MODE = 0x72,
+ E_MSG_ARC_SYSTEM_AUDIO_MODE_REQUEST = 0x70,
+ E_MSG_ARC_SYSTEM_AUDIO_MODE_STATUS = 0x7E,
+ E_MSG_ARC_SET_AUDIO_RATE = 0x9A,
+ //----- Audio Return Channel Control -------------
+ E_MSG_ARC_INITIATE_ARC = 0xC0,
+ E_MSG_ARC_REPORT_ARC_INITIATED = 0xC1,
+ E_MSG_ARC_REPORT_ARC_TERMINATED = 0xC2,
+ E_MSG_ARC_REQUEST_ARC_INITATION = 0xC3,
+ E_MSG_ARC_REQUEST_ARC_TERMINATION = 0xC4,
+ E_MSG_ARC_TERMINATED_ARC = 0xC5,
- E_MSG_CDC_MESSAGE = 0xF8,
- //amlogic cmd
- //TCL
- CMD_TCL_WIFI = 0x01,
- CMD_TCL_ETHERNET = 0x02,
- CMD_TCL_3D = 0x03,
- CMD_TCL_PANEL_REVERSE = 0x04,
- CMD_RESERVE1 = 0x05,
- CMD_RESERVE2 = 0x06,
- CMD_RESERVE3 = 0x07,
- //VPU
- CMD_VPU_INIT = 0x08,
- CMD_VPU_ENABLE = 0x09,
- CMD_VPU_BYPASS = 0x0a,
- CMD_VPU_OUTPUT_MUX = 0x0b,
- CMD_VPU_TIMING = 0x0c,
- CMD_VPU_SOURCE = 0x0d,
- CMD_RESERVE4 = 0x0e,
- CMD_RESERVE5 = 0x0f,
- //TCL || AML
- CMD_TCL_BRIDGE_SW_VER = 0x10,
- //CMD_G9_MAINCODE_VER = 0x10,
- CMD_TCL_DEVICE_ID = 0x11,
- //CMD_G9_BOOTCODE_VER = 0x11,
- CMD_TCL_CLIENT_TYPE = 0x12,
- //CMD_INFO_G9_TO_FBC = 0x12,
- CMD_TCL_DEVICE_NUM = 0x13,
- //CMD_INFO_FBC_TO_G9 = 0x13,
- CMD_TCL_ACTIVE_KEY = 0x14,
- //CMD_TIME_SYNC = 0x14,
- CMD_TCL_ACTIVE_STATUS = 0x15,
- //CMD_KEY_TRANSLATION = 0x15,
- CMD_RESERVE6 = 0x16,
- CMD_RESERVE7 = 0x17,
- //DEBUG READ
- CMD_DBG_RD_REGISTER_ACCESS = 0x18,
- CMD_DBG_RD_MEMORY_ACCESS = 0x19,
- CMD_DBG_RD_SPI_ACCESS = 0x1a,
- CMD_DBG_RD_VPU_MEMORY_ACCESS = 0x1b,
- CMD_DBG_RD_MEMORY_TRANSFER = 0x1c,
- CMD_DBG_INPUT_KEY_DOWN = 0x1d,
- CMD_DBG_INPUT_KEY_UP = 0x1e,
- CMD_DBG_INPUT_REBOOT = 0x1f,
- //DEBUG WRITE
- CMD_DBG_WR_REGISTER_ACCESS = 0x98,
- CMD_DBG_WR_MEMORY_ACCESS = 0x99,
- CMD_DBG_WR_SPI_ACCESS = 0x9a,
- CMD_DBG_WR_VPU_MEMORY_ACCESS = 0x9b,
- CMD_DBG_WR_MEMORY_TRANSFER = 0x9c,
- //USER
- CMD_NATURE_LIGHT_ONOFF = 0x20,
- CMD_USR_BACKLIGHT_ONOFF = 0x21,
- CMD_USR_BRIGHTNESS = 0x22,
- CMD_USR_CONTRAST = 0x23,
- CMD_USR_BACKLIGHT = 0x24,
- CMD_RESERVE25 = 0x25,
- CMD_USR_SATURATION = 0x26,
- CMD_USR_DYNAMIC_CONTRAST = 0x27,
- CMD_USR_PICTURE_MODE = 0x28,
- CMD_TEST_PATTERN_ONOFF = 0x29,
- CMD_TEST_PATTERN_SELECT = 0x2a,
- CMD_RESERVE8 = 0x2b,
- CMD_RESERVE9 = 0x2c,
- CMD_RESERVE10 = 0x2d,
- CMD_RESERVE11 = 0x2e,
- CMD_USR_GAMMA = 0x2f,
- //FACTORY
- CMD_DEF_SOUND_MODE = 0x30,
- CMD_DEF_COLOR_TEMPERATURE = 0x31,
- CMD_DEF_BRIGHTNESS = 0x32,
- CMD_DEF_CONTRAST = 0x33,
- CMD_DEF_COLOR = 0x34,
- CMD_RESERVE12 = 0x35,
- CMD_DEF_BACKLIGHT = 0x36,
- CMD_RESERVE13 = 0x37,
- CMD_AUTO_LUMA_ONOFF = 0x38,
- CMD_HISTOGRAM = 0x39,
- CMD_BLEND = 0x3a,
- CMD_DEMULA = 0x3b,
- CMD_COLORSPACE_CONVERSION = 0x3c,
- CMD_CM2 = 0x3d,
- CMD_RESERVE14 = 0x3e,
- CMD_RESERVE15 = 0x3f,
- // GAIN & OFFSET & WHITEBLANCE
- CMD_DEF_RED_GAIN = 0x40,
- CMD_DEF_GREEN_GAIN = 0x41,
- CMD_DEF_BLUE_GAIN = 0x42,
- CMD_DEF_RED_OFFSET = 0x43,
- CMD_DEF_GREEN_OFFSET = 0x44,
- CMD_DEF_BLUE_OFFSET = 0x45,
- CMD_DEF_PRE_RED_OFFSET = 0x46,
- CMD_DEF_PRE_GREEN_OFFSET = 0x47,
- CMD_DEF_PRE_BLUE_OFFSET = 0x48,
- CMD_RESERVE16 = 0x49,
- CMD_WHITEBLANCE = 0x4a,
+ E_MSG_CDC_MESSAGE = 0xF8,
+ //amlogic cmd
+ //TCL
+ CMD_TCL_WIFI = 0x01,
+ CMD_TCL_ETHERNET = 0x02,
+ CMD_TCL_3D = 0x03,
+ CMD_TCL_PANEL_REVERSE = 0x04,
+ CMD_RESERVE1 = 0x05,
+ CMD_RESERVE2 = 0x06,
+ CMD_RESERVE3 = 0x07,
+ //VPU
+ CMD_VPU_INIT = 0x08,
+ CMD_VPU_ENABLE = 0x09,
+ CMD_VPU_BYPASS = 0x0a,
+ CMD_VPU_OUTPUT_MUX = 0x0b,
+ CMD_VPU_TIMING = 0x0c,
+ CMD_VPU_SOURCE = 0x0d,
+ CMD_RESERVE4 = 0x0e,
+ CMD_RESERVE5 = 0x0f,
+ //TCL || AML
+ CMD_TCL_BRIDGE_SW_VER = 0x10,
+ //CMD_G9_MAINCODE_VER = 0x10,
+ CMD_TCL_DEVICE_ID = 0x11,
+ //CMD_G9_BOOTCODE_VER = 0x11,
+ CMD_TCL_CLIENT_TYPE = 0x12,
+ //CMD_INFO_G9_TO_FBC = 0x12,
+ CMD_TCL_DEVICE_NUM = 0x13,
+ //CMD_INFO_FBC_TO_G9 = 0x13,
+ CMD_TCL_ACTIVE_KEY = 0x14,
+ //CMD_TIME_SYNC = 0x14,
+ CMD_TCL_ACTIVE_STATUS = 0x15,
+ //CMD_KEY_TRANSLATION = 0x15,
+ CMD_RESERVE6 = 0x16,
+ CMD_RESERVE7 = 0x17,
+ //DEBUG READ
+ CMD_DBG_RD_REGISTER_ACCESS = 0x18,
+ CMD_DBG_RD_MEMORY_ACCESS = 0x19,
+ CMD_DBG_RD_SPI_ACCESS = 0x1a,
+ CMD_DBG_RD_VPU_MEMORY_ACCESS = 0x1b,
+ CMD_DBG_RD_MEMORY_TRANSFER = 0x1c,
+ CMD_DBG_INPUT_KEY_DOWN = 0x1d,
+ CMD_DBG_INPUT_KEY_UP = 0x1e,
+ CMD_DBG_INPUT_REBOOT = 0x1f,
+ //DEBUG WRITE
+ CMD_DBG_WR_REGISTER_ACCESS = 0x98,
+ CMD_DBG_WR_MEMORY_ACCESS = 0x99,
+ CMD_DBG_WR_SPI_ACCESS = 0x9a,
+ CMD_DBG_WR_VPU_MEMORY_ACCESS = 0x9b,
+ CMD_DBG_WR_MEMORY_TRANSFER = 0x9c,
+ //USER
+ CMD_NATURE_LIGHT_ONOFF = 0x20,
+ CMD_USR_BACKLIGHT_ONOFF = 0x21,
+ CMD_USR_BRIGHTNESS = 0x22,
+ CMD_USR_CONTRAST = 0x23,
+ CMD_USR_BACKLIGHT = 0x24,
+ CMD_RESERVE25 = 0x25,
+ CMD_USR_SATURATION = 0x26,
+ CMD_USR_DYNAMIC_CONTRAST = 0x27,
+ CMD_USR_PICTURE_MODE = 0x28,
+ CMD_TEST_PATTERN_ONOFF = 0x29,
+ CMD_TEST_PATTERN_SELECT = 0x2a,
+ CMD_RESERVE8 = 0x2b,
+ CMD_RESERVE9 = 0x2c,
+ CMD_RESERVE10 = 0x2d,
+ CMD_RESERVE11 = 0x2e,
+ CMD_USR_GAMMA = 0x2f,
+ //FACTORY
+ CMD_DEF_SOUND_MODE = 0x30,
+ CMD_DEF_COLOR_TEMPERATURE = 0x31,
+ CMD_DEF_BRIGHTNESS = 0x32,
+ CMD_DEF_CONTRAST = 0x33,
+ CMD_DEF_COLOR = 0x34,
+ CMD_RESERVE12 = 0x35,
+ CMD_DEF_BACKLIGHT = 0x36,
+ CMD_RESERVE13 = 0x37,
+ CMD_AUTO_LUMA_ONOFF = 0x38,
+ CMD_HISTOGRAM = 0x39,
+ CMD_BLEND = 0x3a,
+ CMD_DEMULA = 0x3b,
+ CMD_COLORSPACE_CONVERSION = 0x3c,
+ CMD_CM2 = 0x3d,
+ CMD_RESERVE14 = 0x3e,
+ CMD_RESERVE15 = 0x3f,
+ // GAIN & OFFSET & WHITEBLANCE
+ CMD_DEF_RED_GAIN = 0x40,
+ CMD_DEF_GREEN_GAIN = 0x41,
+ CMD_DEF_BLUE_GAIN = 0x42,
+ CMD_DEF_RED_OFFSET = 0x43,
+ CMD_DEF_GREEN_OFFSET = 0x44,
+ CMD_DEF_BLUE_OFFSET = 0x45,
+ CMD_DEF_PRE_RED_OFFSET = 0x46,
+ CMD_DEF_PRE_GREEN_OFFSET = 0x47,
+ CMD_DEF_PRE_BLUE_OFFSET = 0x48,
+ CMD_RESERVE16 = 0x49,
+ CMD_WHITEBLANCE = 0x4a,
- CMD_SET_SW_VERSION = 0x57,
- CMD_3D = 0xd0,
+ CMD_SET_SW_VERSION = 0x57,
+ CMD_3D = 0xd0,
- CMD_MAX = 0xff
+ CMD_MAX = 0xff
} _cec_cmd;
typedef struct _cec_msg {
- unsigned char addr; //refer as enum _cec_logic_addr
- unsigned char cmd; //refer as enum _cec_cmd
- unsigned char msg_data[14];
- unsigned char msg_len;
+ unsigned char addr; //refer as enum _cec_logic_addr
+ unsigned char cmd; //refer as enum _cec_cmd
+ unsigned char msg_data[14];
+ unsigned char msg_len;
} _cec_msg;
typedef union tagCECMsgStream {
- unsigned char buf[17];
- struct _cec_msg msg;
+ unsigned char buf[17];
+ struct _cec_msg msg;
} CECMsgStream;
typedef struct _cec_dev_map {
- enum _cec_logic_addr logic_addr;
- unsigned int phy_addr;
- int cec_dev_type;
- char cec_dev_name[14];
+ enum _cec_logic_addr logic_addr;
+ unsigned int phy_addr;
+ int cec_dev_type;
+ char cec_dev_name[14];
} _cec_dev_map;
typedef struct _cec_msg_queue {
- struct _cec_msg cec_msg[CEC_MSG_QUEUE_SIZE];
- int wr_index;
- int rd_index;
+ struct _cec_msg cec_msg[CEC_MSG_QUEUE_SIZE];
+ int wr_index;
+ int rd_index;
} _cec_msg_queue;
typedef enum _cec_status {
- E_CEC_FEATURE_ABORT = 0x00,
- E_CEC_RX_SUCCESS = 0x01,
- E_CEC_TX_SUCCESS = 0x02,
- E_CEC_RF = 0x04,
- E_CEC_LOST_ABT = 0x08,
- E_CEC_BIT_SHORT = 0x10,
- E_CEC_BIT_LONG = 0x20,
- E_CEC_NACK = 0x40,
- E_CEC_SYSTEM_BUSY = 0x80,
+ E_CEC_FEATURE_ABORT = 0x00,
+ E_CEC_RX_SUCCESS = 0x01,
+ E_CEC_TX_SUCCESS = 0x02,
+ E_CEC_RF = 0x04,
+ E_CEC_LOST_ABT = 0x08,
+ E_CEC_BIT_SHORT = 0x10,
+ E_CEC_BIT_LONG = 0x20,
+ E_CEC_NACK = 0x40,
+ E_CEC_SYSTEM_BUSY = 0x80,
} _cec_status;
typedef enum _cec_map_status {
- E_CEC_MAP_UPDATE_START = 0,
- E_CEC_MAP_POLLLING = 1,
- E_CEC_MAP_GET_VENDOR_ID = 2,
- E_CEC_MAP_GET_PHYSICAL_ADDR = 3,
- E_CEC_MAP_GET_OSD_NAME = 4,
- E_CEC_MAP_GET_CEC_VERSION = 5,
- E_CEC_MAP_UPDATE_COMPLETED = 6,
+ E_CEC_MAP_UPDATE_START = 0,
+ E_CEC_MAP_POLLLING = 1,
+ E_CEC_MAP_GET_VENDOR_ID = 2,
+ E_CEC_MAP_GET_PHYSICAL_ADDR = 3,
+ E_CEC_MAP_GET_OSD_NAME = 4,
+ E_CEC_MAP_GET_CEC_VERSION = 5,
+ E_CEC_MAP_UPDATE_COMPLETED = 6,
} _cec_map_status;
#define HDMI_IOC_MAGIC 'H'
-#define HDMI_IOC_CEC_ON _IO(HDMI_IOC_MAGIC, 0x01)
-#define HDMI_IOC_CEC_OFF _IO(HDMI_IOC_MAGIC, 0x02)
-#define HDMI_IOC_CEC_ARC_ON _IO(HDMI_IOC_MAGIC, 0x03)
-#define HDMI_IOC_CEC_ARC_OFF _IO(HDMI_IOC_MAGIC, 0x04)
-#define HDMI_IOC_CEC_CLEAR_BUFFER _IO(HDMI_IOC_MAGIC, 0x05)
-#define HDMI_IOC_CEC_GET_MSG_CNT _IOR(HDMI_IOC_MAGIC, 0x06, int)
-#define HDMI_IOC_CEC_GET_MSG _IOR(HDMI_IOC_MAGIC, 0x07, struct _cec_msg)
-#define HDMI_IOC_CEC_SENT_MSG _IOW(HDMI_IOC_MAGIC, 0x08, struct _cec_msg)
+#define HDMI_IOC_CEC_ON _IO(HDMI_IOC_MAGIC, 0x01)
+#define HDMI_IOC_CEC_OFF _IO(HDMI_IOC_MAGIC, 0x02)
+#define HDMI_IOC_CEC_ARC_ON _IO(HDMI_IOC_MAGIC, 0x03)
+#define HDMI_IOC_CEC_ARC_OFF _IO(HDMI_IOC_MAGIC, 0x04)
+#define HDMI_IOC_CEC_CLEAR_BUFFER _IO(HDMI_IOC_MAGIC, 0x05)
+#define HDMI_IOC_CEC_GET_MSG_CNT _IOR(HDMI_IOC_MAGIC, 0x06, int)
+#define HDMI_IOC_CEC_GET_MSG _IOR(HDMI_IOC_MAGIC, 0x07, struct _cec_msg)
+#define HDMI_IOC_CEC_SENT_MSG _IOW(HDMI_IOC_MAGIC, 0x08, struct _cec_msg)
//#include <linux/tvin/tvin.h>
//#include "../tvin_global.h"
diff --git a/tvapi/libtv/include/ve.h b/tvapi/libtv/include/ve.h
index ebc0816..8eb8c10 100644
--- a/tvapi/libtv/include/ve.h
+++ b/tvapi/libtv/include/ve.h
@@ -1,219 +1,219 @@
-#ifndef __VE_H
-#define __VE_H
-
-// ***************************************************************************
-// *** enum definitions *********************************************
-// ***************************************************************************
-
-typedef enum ve_demo_pos_e {
- VE_DEMO_POS_TOP = 0,
- VE_DEMO_POS_BOTTOM,
- VE_DEMO_POS_LEFT,
- VE_DEMO_POS_RIGHT,
-} ve_demo_pos_t;
-
-typedef enum ve_dnlp_rt_e {
- VE_DNLP_RT_0S = 0,
- VE_DNLP_RT_1S = 6,
- VE_DNLP_RT_2S,
- VE_DNLP_RT_4S,
- VE_DNLP_RT_8S,
- VE_DNLP_RT_16S,
- VE_DNLP_RT_32S,
- VE_DNLP_RT_64S,
- VE_DNLP_RT_FREEZE,
-} ve_dnlp_rt_t;
-
-// ***************************************************************************
-// *** struct definitions *********************************************
-// ***************************************************************************
-
-typedef enum ve_dnlp_rl_e {
- VE_DNLP_RL_01 = 1, // max_contrast = 1.0625x
- VE_DNLP_RL_02, // max_contrast = 1.1250x
- VE_DNLP_RL_03, // max_contrast = 1.1875x
- VE_DNLP_RL_04, // max_contrast = 1.2500x
- VE_DNLP_RL_05, // max_contrast = 1.3125x
- VE_DNLP_RL_06, // max_contrast = 1.3750x
- VE_DNLP_RL_07, // max_contrast = 1.4375x
- VE_DNLP_RL_08, // max_contrast = 1.5000x
- VE_DNLP_RL_09, // max_contrast = 1.5625x
- VE_DNLP_RL_10, // max_contrast = 1.6250x
- VE_DNLP_RL_11, // max_contrast = 1.6875x
- VE_DNLP_RL_12, // max_contrast = 1.7500x
- VE_DNLP_RL_13, // max_contrast = 1.8125x
- VE_DNLP_RL_14, // max_contrast = 1.8750x
- VE_DNLP_RL_15, // max_contrast = 1.9375x
- VE_DNLP_RL_16, // max_contrast = 2.0000x
-} ve_dnlp_rl_t;
-
-typedef enum ve_dnlp_ext_e {
- VE_DNLP_EXT_00 = 0, // weak
- VE_DNLP_EXT_01,
- VE_DNLP_EXT_02,
- VE_DNLP_EXT_03,
- VE_DNLP_EXT_04,
- VE_DNLP_EXT_05,
- VE_DNLP_EXT_06,
- VE_DNLP_EXT_07,
- VE_DNLP_EXT_08,
- VE_DNLP_EXT_09,
- VE_DNLP_EXT_10,
- VE_DNLP_EXT_11,
- VE_DNLP_EXT_12,
- VE_DNLP_EXT_13,
- VE_DNLP_EXT_14,
- VE_DNLP_EXT_15,
- VE_DNLP_EXT_16, // strong
-} ve_dnlp_ext_t;
-
-typedef struct ve_bext_s {
- unsigned char en;
- unsigned char start;
- unsigned char slope1;
- unsigned char midpt;
- unsigned char slope2;
-} ve_bext_t;
-
-typedef struct ve_dnlp_s {
- unsigned int en;
- enum ve_dnlp_rt_e rt;
- enum ve_dnlp_rl_e rl;
- enum ve_dnlp_ext_e black;
- enum ve_dnlp_ext_e white;
-} ve_dnlp_t;
-typedef struct ve_hist_s {
- unsigned long sum;
- int width;
- int height;
- int ave;
-} ve_hist_t;
-typedef struct ve_dnlp_table_s {
- unsigned int en;
- unsigned int method;
- unsigned int cliprate;
- unsigned int lowrange;
- unsigned int hghrange;
- unsigned int lowalpha;
- unsigned int midalpha;
- unsigned int hghalpha;
-} ve_dnlp_table_t;
-typedef struct ve_hsvs_s {
- unsigned char en;
- unsigned char peak_gain_h1;
- unsigned char peak_gain_h2;
- unsigned char peak_gain_h3;
- unsigned char peak_gain_h4;
- unsigned char peak_gain_h5;
- unsigned char peak_gain_v1;
- unsigned char peak_gain_v2;
- unsigned char peak_gain_v3;
- unsigned char peak_gain_v4;
- unsigned char peak_gain_v5;
- unsigned char peak_gain_v6;
- unsigned char hpeak_slope1;
- unsigned char hpeak_slope2;
- unsigned char hpeak_thr1;
- unsigned char hpeak_thr2;
- unsigned char hpeak_nlp_cor_thr;
- unsigned char hpeak_nlp_gain_pos;
- unsigned char hpeak_nlp_gain_neg;
- unsigned char vpeak_slope1;
- unsigned char vpeak_slope2;
- unsigned char vpeak_thr1;
- unsigned char vpeak_thr2;
- unsigned char vpeak_nlp_cor_thr;
- unsigned char vpeak_nlp_gain_pos;
- unsigned char vpeak_nlp_gain_neg;
- unsigned char speak_slope1;
- unsigned char speak_slope2;
- unsigned char speak_thr1;
- unsigned char speak_thr2;
- unsigned char speak_nlp_cor_thr;
- unsigned char speak_nlp_gain_pos;
- unsigned char speak_nlp_gain_neg;
- unsigned char peak_cor_gain;
- unsigned char peak_cor_thr_l;
- unsigned char peak_cor_thr_h;
- unsigned char vlti_step;
- unsigned char vlti_step2;
- unsigned char vlti_thr;
- unsigned char vlti_gain_pos;
- unsigned char vlti_gain_neg;
- unsigned char vlti_blend_factor;
- unsigned char hlti_step;
- unsigned char hlti_thr;
- unsigned char hlti_gain_pos;
- unsigned char hlti_gain_neg;
- unsigned char hlti_blend_factor;
- unsigned char vlimit_coef_h;
- unsigned char vlimit_coef_l;
- unsigned char hlimit_coef_h;
- unsigned char hlimit_coef_l;
- unsigned char cti_444_422_en;
- unsigned char cti_422_444_en;
- unsigned char cti_blend_factor;
- unsigned char vcti_buf_en;
- unsigned char vcti_buf_mode_c5l;
- unsigned char vcti_filter;
- unsigned char hcti_step;
- unsigned char hcti_step2;
- unsigned char hcti_thr;
- unsigned char hcti_gain;
- unsigned char hcti_mode_median;
-} ve_hsvs_t;
-
-typedef struct ve_ccor_s {
- unsigned char en;
- unsigned char slope;
- unsigned char thr;
-} ve_ccor_t;
-
-typedef struct ve_benh_s {
- unsigned char en;
- unsigned char cb_inc;
- unsigned char cr_inc;
- unsigned char gain_cr;
- unsigned char gain_cb4cr;
- unsigned char luma_h;
- unsigned char err_crp;
- unsigned char err_crn;
- unsigned char err_cbp;
- unsigned char err_cbn;
-} ve_benh_t;
-
-typedef struct ve_cbar_s {
- unsigned char en;
- unsigned char wid;
- unsigned char cr;
- unsigned char cb;
- unsigned char y;
-} ve_cbar_t;
-typedef struct ve_demo_s {
- unsigned char bext;
- unsigned char dnlp;
- unsigned char hsvs;
- unsigned char ccor;
- unsigned char benh;
- enum ve_demo_pos_e pos;
- unsigned long wid;
- struct ve_cbar_s cbar;
-} ve_demo_t;
-
-typedef struct vdo_meas_s {
- //...
-} vdo_meas_t;
-
-typedef struct ve_regmap_s {
- unsigned long reg[43];
-} ve_regmap_t;
-
-// ***************************************************************************
-// *** MACRO definitions **********
-// ***************************************************************************
-
-// ***************************************************************************
-// *** FUNCTION definitions **********
-// ***************************************************************************
-
-#endif // _VE_H
+#ifndef __VE_H
+#define __VE_H
+
+// ***************************************************************************
+// *** enum definitions *********************************************
+// ***************************************************************************
+
+typedef enum ve_demo_pos_e {
+ VE_DEMO_POS_TOP = 0,
+ VE_DEMO_POS_BOTTOM,
+ VE_DEMO_POS_LEFT,
+ VE_DEMO_POS_RIGHT,
+} ve_demo_pos_t;
+
+typedef enum ve_dnlp_rt_e {
+ VE_DNLP_RT_0S = 0,
+ VE_DNLP_RT_1S = 6,
+ VE_DNLP_RT_2S,
+ VE_DNLP_RT_4S,
+ VE_DNLP_RT_8S,
+ VE_DNLP_RT_16S,
+ VE_DNLP_RT_32S,
+ VE_DNLP_RT_64S,
+ VE_DNLP_RT_FREEZE,
+} ve_dnlp_rt_t;
+
+// ***************************************************************************
+// *** struct definitions *********************************************
+// ***************************************************************************
+
+typedef enum ve_dnlp_rl_e {
+ VE_DNLP_RL_01 = 1, // max_contrast = 1.0625x
+ VE_DNLP_RL_02, // max_contrast = 1.1250x
+ VE_DNLP_RL_03, // max_contrast = 1.1875x
+ VE_DNLP_RL_04, // max_contrast = 1.2500x
+ VE_DNLP_RL_05, // max_contrast = 1.3125x
+ VE_DNLP_RL_06, // max_contrast = 1.3750x
+ VE_DNLP_RL_07, // max_contrast = 1.4375x
+ VE_DNLP_RL_08, // max_contrast = 1.5000x
+ VE_DNLP_RL_09, // max_contrast = 1.5625x
+ VE_DNLP_RL_10, // max_contrast = 1.6250x
+ VE_DNLP_RL_11, // max_contrast = 1.6875x
+ VE_DNLP_RL_12, // max_contrast = 1.7500x
+ VE_DNLP_RL_13, // max_contrast = 1.8125x
+ VE_DNLP_RL_14, // max_contrast = 1.8750x
+ VE_DNLP_RL_15, // max_contrast = 1.9375x
+ VE_DNLP_RL_16, // max_contrast = 2.0000x
+} ve_dnlp_rl_t;
+
+typedef enum ve_dnlp_ext_e {
+ VE_DNLP_EXT_00 = 0, // weak
+ VE_DNLP_EXT_01,
+ VE_DNLP_EXT_02,
+ VE_DNLP_EXT_03,
+ VE_DNLP_EXT_04,
+ VE_DNLP_EXT_05,
+ VE_DNLP_EXT_06,
+ VE_DNLP_EXT_07,
+ VE_DNLP_EXT_08,
+ VE_DNLP_EXT_09,
+ VE_DNLP_EXT_10,
+ VE_DNLP_EXT_11,
+ VE_DNLP_EXT_12,
+ VE_DNLP_EXT_13,
+ VE_DNLP_EXT_14,
+ VE_DNLP_EXT_15,
+ VE_DNLP_EXT_16, // strong
+} ve_dnlp_ext_t;
+
+typedef struct ve_bext_s {
+ unsigned char en;
+ unsigned char start;
+ unsigned char slope1;
+ unsigned char midpt;
+ unsigned char slope2;
+} ve_bext_t;
+
+typedef struct ve_dnlp_s {
+ unsigned int en;
+ enum ve_dnlp_rt_e rt;
+ enum ve_dnlp_rl_e rl;
+ enum ve_dnlp_ext_e black;
+ enum ve_dnlp_ext_e white;
+} ve_dnlp_t;
+typedef struct ve_hist_s {
+ unsigned long sum;
+ int width;
+ int height;
+ int ave;
+} ve_hist_t;
+typedef struct ve_dnlp_table_s {
+ unsigned int en;
+ unsigned int method;
+ unsigned int cliprate;
+ unsigned int lowrange;
+ unsigned int hghrange;
+ unsigned int lowalpha;
+ unsigned int midalpha;
+ unsigned int hghalpha;
+} ve_dnlp_table_t;
+typedef struct ve_hsvs_s {
+ unsigned char en;
+ unsigned char peak_gain_h1;
+ unsigned char peak_gain_h2;
+ unsigned char peak_gain_h3;
+ unsigned char peak_gain_h4;
+ unsigned char peak_gain_h5;
+ unsigned char peak_gain_v1;
+ unsigned char peak_gain_v2;
+ unsigned char peak_gain_v3;
+ unsigned char peak_gain_v4;
+ unsigned char peak_gain_v5;
+ unsigned char peak_gain_v6;
+ unsigned char hpeak_slope1;
+ unsigned char hpeak_slope2;
+ unsigned char hpeak_thr1;
+ unsigned char hpeak_thr2;
+ unsigned char hpeak_nlp_cor_thr;
+ unsigned char hpeak_nlp_gain_pos;
+ unsigned char hpeak_nlp_gain_neg;
+ unsigned char vpeak_slope1;
+ unsigned char vpeak_slope2;
+ unsigned char vpeak_thr1;
+ unsigned char vpeak_thr2;
+ unsigned char vpeak_nlp_cor_thr;
+ unsigned char vpeak_nlp_gain_pos;
+ unsigned char vpeak_nlp_gain_neg;
+ unsigned char speak_slope1;
+ unsigned char speak_slope2;
+ unsigned char speak_thr1;
+ unsigned char speak_thr2;
+ unsigned char speak_nlp_cor_thr;
+ unsigned char speak_nlp_gain_pos;
+ unsigned char speak_nlp_gain_neg;
+ unsigned char peak_cor_gain;
+ unsigned char peak_cor_thr_l;
+ unsigned char peak_cor_thr_h;
+ unsigned char vlti_step;
+ unsigned char vlti_step2;
+ unsigned char vlti_thr;
+ unsigned char vlti_gain_pos;
+ unsigned char vlti_gain_neg;
+ unsigned char vlti_blend_factor;
+ unsigned char hlti_step;
+ unsigned char hlti_thr;
+ unsigned char hlti_gain_pos;
+ unsigned char hlti_gain_neg;
+ unsigned char hlti_blend_factor;
+ unsigned char vlimit_coef_h;
+ unsigned char vlimit_coef_l;
+ unsigned char hlimit_coef_h;
+ unsigned char hlimit_coef_l;
+ unsigned char cti_444_422_en;
+ unsigned char cti_422_444_en;
+ unsigned char cti_blend_factor;
+ unsigned char vcti_buf_en;
+ unsigned char vcti_buf_mode_c5l;
+ unsigned char vcti_filter;
+ unsigned char hcti_step;
+ unsigned char hcti_step2;
+ unsigned char hcti_thr;
+ unsigned char hcti_gain;
+ unsigned char hcti_mode_median;
+} ve_hsvs_t;
+
+typedef struct ve_ccor_s {
+ unsigned char en;
+ unsigned char slope;
+ unsigned char thr;
+} ve_ccor_t;
+
+typedef struct ve_benh_s {
+ unsigned char en;
+ unsigned char cb_inc;
+ unsigned char cr_inc;
+ unsigned char gain_cr;
+ unsigned char gain_cb4cr;
+ unsigned char luma_h;
+ unsigned char err_crp;
+ unsigned char err_crn;
+ unsigned char err_cbp;
+ unsigned char err_cbn;
+} ve_benh_t;
+
+typedef struct ve_cbar_s {
+ unsigned char en;
+ unsigned char wid;
+ unsigned char cr;
+ unsigned char cb;
+ unsigned char y;
+} ve_cbar_t;
+typedef struct ve_demo_s {
+ unsigned char bext;
+ unsigned char dnlp;
+ unsigned char hsvs;
+ unsigned char ccor;
+ unsigned char benh;
+ enum ve_demo_pos_e pos;
+ unsigned long wid;
+ struct ve_cbar_s cbar;
+} ve_demo_t;
+
+typedef struct vdo_meas_s {
+ //...
+} vdo_meas_t;
+
+typedef struct ve_regmap_s {
+ unsigned long reg[43];
+} ve_regmap_t;
+
+// ***************************************************************************
+// *** MACRO definitions **********
+// ***************************************************************************
+
+// ***************************************************************************
+// *** FUNCTION definitions **********
+// ***************************************************************************
+
+#endif // _VE_H
diff --git a/tvapi/libtv/tv/AutoBackLight.cpp b/tvapi/libtv/tv/AutoBackLight.cpp
index 8c659c6..d00f931 100644
--- a/tvapi/libtv/tv/AutoBackLight.cpp
+++ b/tvapi/libtv/tv/AutoBackLight.cpp
@@ -1,213 +1,213 @@
-#include "AutoBackLight.h"
-#include "../tvsetting/CTvSetting.h"
-#include "../tvconfig/tvconfig.h"
-#include "../tvutils/tvutils.h"
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <string.h>
-#include <errno.h>
-#include <dlfcn.h>
-#include <linux/fb.h>
-#include <stdlib.h>
-#include <cutils/properties.h>
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#define LOG_TAG "AutoBackLight"
-#endif
-
-AutoBackLight::AutoBackLight( CVpp *mVpp, CTvin *pTvin )
-{
- mAutoBacklightSource = SOURCE_TYPE_TV;
- myVpp = mVpp;
- myTvin = pTvin;
- mCur_source_default_backlight = 100;
- mCur_sig_state == SIG_STATE_NOSIG;
- mAutoBacklight_OnOff_Flag = false;
- mCurrent_backlight = 100;
- mCur_dest_backlight = 100;
-}
-
-AutoBackLight::~AutoBackLight()
-{
- mAutoBacklight_OnOff_Flag = false;
-}
-
-bool AutoBackLight::isAutoBacklightOn()
-{
- return mAutoBacklight_OnOff_Flag;
-}
-
-void AutoBackLight::updateSigState(int state)
-{
- mCur_sig_state = state;
- LOGD("updateSigState = %d", mCur_sig_state);
-}
-
-void AutoBackLight::startAutoBacklight( tv_source_input_type_t source_type )
-{
- mAutoBacklightSource = source_type;
- mCur_source_default_backlight = myVpp->Tv_GetBacklight(source_type);
- mCurrent_backlight = mCur_source_default_backlight;
- myVpp->Tv_SetBacklight(mCur_source_default_backlight, source_type, 1);
-
- /*
- mDefault_auto_bl_value = def_source_bl_value;
- dynamicGamma = mDefault_auto_bl_value * mCur_source_default_backlight / 100;
- // this if should not happen
- if (dynamicGamma > mCur_source_default_backlight) {
- dynamicGamma = mCur_source_default_backlight;
- }
- */
-
- if (!mAutoBacklight_OnOff_Flag) {
- mAutoBacklight_OnOff_Flag = true;
- this->run();
- }
-}
-
-void AutoBackLight::stopAutoBacklight()
-{
- if (mAutoBacklight_OnOff_Flag) {
- mAutoBacklight_OnOff_Flag = false;
- myVpp->Tv_SetBacklight(mCur_source_default_backlight, mAutoBacklightSource, 1);
- }
-}
-
-/**
- * @ description: tpv project
- * @ return:value
- * value <= 20: mCur_dest_backlight is 14
- * 20 < value <= 160: mCur_dest_backlight is 57
- *160 < value: mCur_dest_backlight is 100
- */
-void AutoBackLight::adjustDstBacklight()
-{
- if (mCur_sig_state == SIG_STATE_STABLE) {
- //the node is used to adjust current ts is static or dynamtic frame
- char temp_str = 0;
- int fd = open("/sys/module/di/parameters/frame_dynamic", O_RDWR);
- if (fd <= 0) {
- LOGE("open /sys/module/di/parameters/frame_dynamic ERROR!!\n");
- return;
- }
-
- if (read(fd, &temp_str, 1) > 0) {
-
- if (temp_str == 'N') {
- mCurrent_backlight = mCur_dest_backlight = mCur_source_default_backlight;
- myVpp->Tv_SetBacklight(mCurrent_backlight, mAutoBacklightSource, 0);
- } else if (temp_str == 'Y') {
- int pwm = HistogramGet_AVE();
- if (pwm <= 20) {
- mCur_dest_backlight = 14;
- } else if (pwm > 20 && pwm <= 160) {
- mCur_dest_backlight = 57;
- } else {
- mCur_dest_backlight = 100;
- }
- //LOGD("pwm = %d, mCur_dest_backlight = %d", pwm, mCur_dest_backlight);
- }
- }
- close(fd);
- } else {
- mCurrent_backlight = mCur_dest_backlight = mCur_source_default_backlight;
- myVpp->Tv_SetBacklight(mCurrent_backlight, mAutoBacklightSource, 0);
- }
-
- /*
- if (pwm > 0)
- pwm_max = pwm;
- else
- pwm_min = pwm;
- pwm = 255 - pwm;
- int average = (pwm_min + pwm_max) / 2;
- dynamicGammaOffset = (pwm - average) / 10;
- dynamicGammaOffset = dynamicGammaOffset * mDefault_auto_bl_value / 100;
-
- //the node is used to adjust current ts is static or dynamtic frame
- char temp_str = 0;
- int fd = open("/sys/module/di/parameters/frame_dynamic", O_RDWR);
- if (fd <= 0) {
- LOGE("open /sys/module/di/parameters/frame_dynamic ERROR!!\n");
- return;
- }
-
- if (read(fd, &temp_str, 1) > 0) {
- if (temp_str== 'N') {
- mCur_dest_backlight = mCur_source_default_backlight;
- }
- else if (temp_str == 'Y') {
- mCur_dest_backlight = dynamicGamma + dynamicGammaOffset;
-
- if (mCur_dest_backlight > mCur_source_default_backlight) {
- mCur_dest_backlight = mCur_source_default_backlight;
- }
- else if (mCur_dest_backlight < 0) {
- mCur_dest_backlight = 0;
- }
- }
- }
- close(fd);
- */
-}
-
-void AutoBackLight::adjustBacklight()
-{
- if (mCurrent_backlight == mCur_dest_backlight) {
- return;
- } else if ((mCurrent_backlight - mCur_dest_backlight) > -2 && (mCurrent_backlight - mCur_dest_backlight) < 2) {
- mCurrent_backlight = mCur_dest_backlight;
- myVpp->Tv_SetBacklight(mCurrent_backlight, mAutoBacklightSource, 0);
- } else if (mCurrent_backlight < mCur_dest_backlight) {
- mCurrent_backlight = mCurrent_backlight + 2;
- myVpp->Tv_SetBacklight(mCurrent_backlight, mAutoBacklightSource, 0);
- } else if (mCurrent_backlight > mCur_dest_backlight) {
- mCurrent_backlight = mCurrent_backlight - 2;
- myVpp->Tv_SetBacklight(mCurrent_backlight, mAutoBacklightSource, 0);
- }
-
- //LOGD("mCurrent_backlight = %d", mCurrent_backlight);
-}
-
-/**
- * @ description: get current picture's average brightness
- * @ return: 0~255,0 is darkest,255 is brightest
- */
-int AutoBackLight::HistogramGet_AVE()
-{
- int hist_ave = 0;
- tvin_parm_t vdinParam;
- if (0 == myTvin->VDIN_GetVdinParam(&vdinParam)) {
- if (vdinParam.pixel_sum != 0) {
- hist_ave = vdinParam.luma_sum / vdinParam.pixel_sum;
- LOGD("[hist_ave][%d].", hist_ave);
- return hist_ave;
- }
- LOGE("vdinParam.pixel_sum is zero, so the value is infinity\n");
- return -1;
- }
- LOGE("VDIN_GetVdinParam get data error!!!\n");
- return -1;
-}
-
-bool AutoBackLight::threadLoop()
-{
- int sleeptime = 50;//ms
- int adjustBacklightCount = 0;
- while ( mAutoBacklight_OnOff_Flag ) {
- usleep ( sleeptime * 1000 );
- adjustBacklightCount++;
- if (adjustBacklightCount == 24) {
- adjustBacklightCount = 0;
- adjustDstBacklight();
- }
- adjustBacklight();
- }
-
- return false;//return true, run again, return false,not run.
-}
+#include "AutoBackLight.h"
+#include "../tvsetting/CTvSetting.h"
+#include "../tvconfig/tvconfig.h"
+#include "../tvutils/tvutils.h"
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+#include <dlfcn.h>
+#include <linux/fb.h>
+#include <stdlib.h>
+#include <cutils/properties.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#define LOG_TAG "AutoBackLight"
+#endif
+
+AutoBackLight::AutoBackLight( CVpp *mVpp, CTvin *pTvin )
+{
+ mAutoBacklightSource = SOURCE_TYPE_TV;
+ myVpp = mVpp;
+ myTvin = pTvin;
+ mCur_source_default_backlight = 100;
+ mCur_sig_state == SIG_STATE_NOSIG;
+ mAutoBacklight_OnOff_Flag = false;
+ mCurrent_backlight = 100;
+ mCur_dest_backlight = 100;
+}
+
+AutoBackLight::~AutoBackLight()
+{
+ mAutoBacklight_OnOff_Flag = false;
+}
+
+bool AutoBackLight::isAutoBacklightOn()
+{
+ return mAutoBacklight_OnOff_Flag;
+}
+
+void AutoBackLight::updateSigState(int state)
+{
+ mCur_sig_state = state;
+ LOGD("updateSigState = %d", mCur_sig_state);
+}
+
+void AutoBackLight::startAutoBacklight( tv_source_input_type_t source_type )
+{
+ mAutoBacklightSource = source_type;
+ mCur_source_default_backlight = myVpp->Tv_GetBacklight(source_type);
+ mCurrent_backlight = mCur_source_default_backlight;
+ myVpp->Tv_SetBacklight(mCur_source_default_backlight, source_type, 1);
+
+ /*
+ mDefault_auto_bl_value = def_source_bl_value;
+ dynamicGamma = mDefault_auto_bl_value * mCur_source_default_backlight / 100;
+ // this if should not happen
+ if (dynamicGamma > mCur_source_default_backlight) {
+ dynamicGamma = mCur_source_default_backlight;
+ }
+ */
+
+ if (!mAutoBacklight_OnOff_Flag) {
+ mAutoBacklight_OnOff_Flag = true;
+ this->run();
+ }
+}
+
+void AutoBackLight::stopAutoBacklight()
+{
+ if (mAutoBacklight_OnOff_Flag) {
+ mAutoBacklight_OnOff_Flag = false;
+ myVpp->Tv_SetBacklight(mCur_source_default_backlight, mAutoBacklightSource, 1);
+ }
+}
+
+/**
+ * @ description: tpv project
+ * @ return:value
+ * value <= 20: mCur_dest_backlight is 14
+ * 20 < value <= 160: mCur_dest_backlight is 57
+ *160 < value: mCur_dest_backlight is 100
+ */
+void AutoBackLight::adjustDstBacklight()
+{
+ if (mCur_sig_state == SIG_STATE_STABLE) {
+ //the node is used to adjust current ts is static or dynamtic frame
+ char temp_str = 0;
+ int fd = open("/sys/module/di/parameters/frame_dynamic", O_RDWR);
+ if (fd <= 0) {
+ LOGE("open /sys/module/di/parameters/frame_dynamic ERROR!!\n");
+ return;
+ }
+
+ if (read(fd, &temp_str, 1) > 0) {
+
+ if (temp_str == 'N') {
+ mCurrent_backlight = mCur_dest_backlight = mCur_source_default_backlight;
+ myVpp->Tv_SetBacklight(mCurrent_backlight, mAutoBacklightSource, 0);
+ } else if (temp_str == 'Y') {
+ int pwm = HistogramGet_AVE();
+ if (pwm <= 20) {
+ mCur_dest_backlight = 14;
+ } else if (pwm > 20 && pwm <= 160) {
+ mCur_dest_backlight = 57;
+ } else {
+ mCur_dest_backlight = 100;
+ }
+ //LOGD("pwm = %d, mCur_dest_backlight = %d", pwm, mCur_dest_backlight);
+ }
+ }
+ close(fd);
+ } else {
+ mCurrent_backlight = mCur_dest_backlight = mCur_source_default_backlight;
+ myVpp->Tv_SetBacklight(mCurrent_backlight, mAutoBacklightSource, 0);
+ }
+
+ /*
+ if (pwm > 0)
+ pwm_max = pwm;
+ else
+ pwm_min = pwm;
+ pwm = 255 - pwm;
+ int average = (pwm_min + pwm_max) / 2;
+ dynamicGammaOffset = (pwm - average) / 10;
+ dynamicGammaOffset = dynamicGammaOffset * mDefault_auto_bl_value / 100;
+
+ //the node is used to adjust current ts is static or dynamtic frame
+ char temp_str = 0;
+ int fd = open("/sys/module/di/parameters/frame_dynamic", O_RDWR);
+ if (fd <= 0) {
+ LOGE("open /sys/module/di/parameters/frame_dynamic ERROR!!\n");
+ return;
+ }
+
+ if (read(fd, &temp_str, 1) > 0) {
+ if (temp_str== 'N') {
+ mCur_dest_backlight = mCur_source_default_backlight;
+ }
+ else if (temp_str == 'Y') {
+ mCur_dest_backlight = dynamicGamma + dynamicGammaOffset;
+
+ if (mCur_dest_backlight > mCur_source_default_backlight) {
+ mCur_dest_backlight = mCur_source_default_backlight;
+ }
+ else if (mCur_dest_backlight < 0) {
+ mCur_dest_backlight = 0;
+ }
+ }
+ }
+ close(fd);
+ */
+}
+
+void AutoBackLight::adjustBacklight()
+{
+ if (mCurrent_backlight == mCur_dest_backlight) {
+ return;
+ } else if ((mCurrent_backlight - mCur_dest_backlight) > -2 && (mCurrent_backlight - mCur_dest_backlight) < 2) {
+ mCurrent_backlight = mCur_dest_backlight;
+ myVpp->Tv_SetBacklight(mCurrent_backlight, mAutoBacklightSource, 0);
+ } else if (mCurrent_backlight < mCur_dest_backlight) {
+ mCurrent_backlight = mCurrent_backlight + 2;
+ myVpp->Tv_SetBacklight(mCurrent_backlight, mAutoBacklightSource, 0);
+ } else if (mCurrent_backlight > mCur_dest_backlight) {
+ mCurrent_backlight = mCurrent_backlight - 2;
+ myVpp->Tv_SetBacklight(mCurrent_backlight, mAutoBacklightSource, 0);
+ }
+
+ //LOGD("mCurrent_backlight = %d", mCurrent_backlight);
+}
+
+/**
+ * @ description: get current picture's average brightness
+ * @ return: 0~255,0 is darkest,255 is brightest
+ */
+int AutoBackLight::HistogramGet_AVE()
+{
+ int hist_ave = 0;
+ tvin_parm_t vdinParam;
+ if (0 == myTvin->VDIN_GetVdinParam(&vdinParam)) {
+ if(vdinParam.pixel_sum != 0) {
+ hist_ave = vdinParam.luma_sum / vdinParam.pixel_sum;
+ LOGD("[hist_ave][%d].", hist_ave);
+ return hist_ave;
+ }
+ LOGE("vdinParam.pixel_sum is zero, so the value is infinity\n");
+ return -1;
+ }
+ LOGE("VDIN_GetVdinParam get data error!!!\n");
+ return -1;
+}
+
+bool AutoBackLight::threadLoop()
+{
+ int sleeptime = 50;//ms
+ int adjustBacklightCount = 0;
+ while ( mAutoBacklight_OnOff_Flag ) {
+ usleep ( sleeptime * 1000 );
+ adjustBacklightCount++;
+ if (adjustBacklightCount == 24) {
+ adjustBacklightCount = 0;
+ adjustDstBacklight();
+ }
+ adjustBacklight();
+ }
+
+ return false;//return true, run again, return false,not run.
+}
diff --git a/tvapi/libtv/tv/AutoBackLight.h b/tvapi/libtv/tv/AutoBackLight.h
index 0c860d9..8ad02b4 100644
--- a/tvapi/libtv/tv/AutoBackLight.h
+++ b/tvapi/libtv/tv/AutoBackLight.h
@@ -16,34 +16,33 @@
#include "../tvutils/CThread.h"
#include "../vpp/CVpp.h"
-class AutoBackLight: public CThread
-{
+class AutoBackLight: public CThread {
private:
- tv_source_input_type_t mAutoBacklightSource;
- int mCur_source_default_backlight;
- int mCur_sig_state;
- bool mAutoBacklight_OnOff_Flag;
- int mCurrent_backlight;
- int mCur_dest_backlight;
+ tv_source_input_type_t mAutoBacklightSource;
+ int mCur_source_default_backlight;
+ int mCur_sig_state;
+ bool mAutoBacklight_OnOff_Flag;
+ int mCurrent_backlight;
+ int mCur_dest_backlight;
- void adjustDstBacklight();
- void adjustBacklight();
- int HistogramGet_AVE();
- bool threadLoop();
+ void adjustDstBacklight();
+ void adjustBacklight();
+ int HistogramGet_AVE();
+ bool threadLoop();
public:
- enum SIG_STATE {
- SIG_STATE_STABLE = 1,
- SIG_STATE_NOSIG = 2,
- };
- CVpp *myVpp;
- CTvin *myTvin;
+ enum SIG_STATE {
+ SIG_STATE_STABLE = 1,
+ SIG_STATE_NOSIG = 2,
+ };
+ CVpp *myVpp;
+ CTvin *myTvin;
- AutoBackLight( CVpp *mVpp, CTvin *pTvin );
- ~AutoBackLight();
- void updateSigState(int state);
- void startAutoBacklight( tv_source_input_type_t source_type );
- void stopAutoBacklight();
- bool isAutoBacklightOn();
+ AutoBackLight( CVpp *mVpp, CTvin *pTvin );
+ ~AutoBackLight();
+ void updateSigState(int state);
+ void startAutoBacklight( tv_source_input_type_t source_type );
+ void stopAutoBacklight();
+ bool isAutoBacklightOn();
};
#endif
diff --git a/tvapi/libtv/tv/CAv.cpp b/tvapi/libtv/tv/CAv.cpp
index 7f757ca..20e1c31 100644
--- a/tvapi/libtv/tv/CAv.cpp
+++ b/tvapi/libtv/tv/CAv.cpp
@@ -10,11 +10,11 @@
#include <amstream.h>
CAv::CAv()
{
- mpObserver = NULL;
- mTvPlayDevId = 0;
- mCurVideoLayerMuteState = -1;
- mCurDisableVideoColor = -1;
- mFdAmVideo = -1;
+ mpObserver = NULL;
+ mTvPlayDevId = 0;
+ mCurVideoLayerMuteState = -1;
+ mCurDisableVideoColor = -1;
+ mFdAmVideo = -1;
}
CAv::~CAv()
{
@@ -22,360 +22,360 @@ CAv::~CAv()
}
int CAv::SetVideoWindow(int x, int y, int w, int h)
{
- return AM_AV_SetVideoWindow (mTvPlayDevId, x, y, w, h );
+ return AM_AV_SetVideoWindow (mTvPlayDevId, x, y, w, h );
}
int CAv::Open()
{
- AM_AV_OpenPara_t para_av;
- memset ( &para_av, 0, sizeof ( AM_AV_OpenPara_t ) );
- int rt = AM_AV_Open ( mTvPlayDevId, &para_av );
- if ( rt != AM_SUCCESS ) {
- LOGD ( "%s, dvbplayer_open fail %d %d\n!" , __FUNCTION__, mTvPlayDevId, rt );
- return -1;
- }
-
- //open audio channle output
- AM_AOUT_OpenPara_t aout_para;
- memset ( &aout_para, 0, sizeof ( AM_AOUT_OpenPara_t ) );
- rt = AM_AOUT_Open ( 0, &aout_para );
-
- if ( AM_SUCCESS != rt ) {
- LOGD ( "%s, BUG: CANN'T OPEN AOUT\n", __FUNCTION__);
- }
- //
- mFdAmVideo = open ( PATH_VIDEO_AMVIDEO, O_RDWR );
- if ( mFdAmVideo < 0 ) {
- LOGE ( "mFdAmVideo < 0, error(%s)!\n", strerror ( errno ) );
- return -1;
- }
- /*Register events*/
- AM_EVT_Subscribe ( mTvPlayDevId, AM_AV_EVT_AV_NO_DATA, av_evt_callback, this );
- AM_EVT_Subscribe ( mTvPlayDevId, AM_AV_EVT_AV_DATA_RESUME, av_evt_callback, this );
- AM_EVT_Subscribe ( mTvPlayDevId, AM_AV_EVT_VIDEO_SCAMBLED, av_evt_callback, this );
- AM_EVT_Subscribe ( mTvPlayDevId, AM_AV_EVT_AUDIO_SCAMBLED, av_evt_callback, this );
- AM_EVT_Subscribe ( mTvPlayDevId, AM_AV_EVT_VIDEO_NOT_SUPPORT, av_evt_callback, this );
-
- return rt;
+ AM_AV_OpenPara_t para_av;
+ memset ( &para_av, 0, sizeof ( AM_AV_OpenPara_t ) );
+ int rt = AM_AV_Open ( mTvPlayDevId, &para_av );
+ if ( rt != AM_SUCCESS ) {
+ LOGD ( "%s, dvbplayer_open fail %d %d\n!" , __FUNCTION__, mTvPlayDevId, rt );
+ return -1;
+ }
+
+ //open audio channle output
+ AM_AOUT_OpenPara_t aout_para;
+ memset ( &aout_para, 0, sizeof ( AM_AOUT_OpenPara_t ) );
+ rt = AM_AOUT_Open ( 0, &aout_para );
+
+ if ( AM_SUCCESS != rt ) {
+ LOGD ( "%s, BUG: CANN'T OPEN AOUT\n", __FUNCTION__);
+ }
+ //
+ mFdAmVideo = open ( PATH_VIDEO_AMVIDEO, O_RDWR );
+ if ( mFdAmVideo < 0 ) {
+ LOGE ( "mFdAmVideo < 0, error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
+ /*Register events*/
+ AM_EVT_Subscribe ( mTvPlayDevId, AM_AV_EVT_AV_NO_DATA, av_evt_callback, this );
+ AM_EVT_Subscribe ( mTvPlayDevId, AM_AV_EVT_AV_DATA_RESUME, av_evt_callback, this );
+ AM_EVT_Subscribe ( mTvPlayDevId, AM_AV_EVT_VIDEO_SCAMBLED, av_evt_callback, this );
+ AM_EVT_Subscribe ( mTvPlayDevId, AM_AV_EVT_AUDIO_SCAMBLED, av_evt_callback, this );
+ AM_EVT_Subscribe ( mTvPlayDevId, AM_AV_EVT_VIDEO_NOT_SUPPORT, av_evt_callback, this );
+
+ return rt;
}
int CAv::Close()
{
- int iRet;
- iRet = AM_AV_Close ( mTvPlayDevId );
- iRet = AM_AOUT_Close ( mTvPlayDevId );
- if (mFdAmVideo > 0) {
- close(mFdAmVideo);
- mFdAmVideo = -1;
- }
- return iRet;
+ int iRet;
+ iRet = AM_AV_Close ( mTvPlayDevId );
+ iRet = AM_AOUT_Close ( mTvPlayDevId );
+ if(mFdAmVideo > 0) {
+ close(mFdAmVideo);
+ mFdAmVideo = -1;
+ }
+ return iRet;
}
int CAv::GetVideoStatus(AM_AV_VideoStatus_t *status)
{
- return AM_AV_GetVideoStatus(mTvPlayDevId, status);
+ return AM_AV_GetVideoStatus(mTvPlayDevId, status);
}
int CAv::SwitchTSAudio(int apid, AM_AV_AFormat_t afmt)
{
- return AM_AV_SwitchTSAudio (mTvPlayDevId, ( uint16_t ) apid, ( AM_AV_AFormat_t ) afmt );
+ return AM_AV_SwitchTSAudio (mTvPlayDevId, ( uint16_t ) apid, ( AM_AV_AFormat_t ) afmt );
}
int CAv::ResetAudioDecoder()
{
- return AM_AV_ResetAudioDecoder ( mTvPlayDevId );
+ return AM_AV_ResetAudioDecoder ( mTvPlayDevId );
}
int CAv::SetTSSource(AM_AV_TSSource_t ts_source)
{
- return AM_AV_SetTSSource ( mTvPlayDevId, ts_source );
+ return AM_AV_SetTSSource ( mTvPlayDevId, ts_source );
}
int CAv::StartTS(uint16_t vpid, uint16_t apid, AM_AV_VFormat_t vfmt, AM_AV_AFormat_t afmt)
{
- return AM_AV_StartTS ( mTvPlayDevId, vpid, apid, ( AM_AV_VFormat_t ) vfmt, ( AM_AV_AFormat_t ) afmt );
+ return AM_AV_StartTS ( mTvPlayDevId, vpid, apid, ( AM_AV_VFormat_t ) vfmt, ( AM_AV_AFormat_t ) afmt );
}
int CAv::StopTS()
{
- return AM_AV_StopTS (mTvPlayDevId);
+ return AM_AV_StopTS (mTvPlayDevId);
}
int CAv::AudioGetOutputMode(AM_AOUT_OutputMode_t *mode)
{
- return AM_AOUT_GetOutputMode ( 0, mode );
+ return AM_AOUT_GetOutputMode ( 0, mode );
}
int CAv::AudioSetOutputMode(AM_AOUT_OutputMode_t mode)
{
- return AM_AOUT_SetOutputMode ( 0, mode );
+ return AM_AOUT_SetOutputMode ( 0, mode );
}
int CAv::EnableVideoBlackout()
{
- return AM_AV_EnableVideoBlackout(mTvPlayDevId);
+ return AM_AV_EnableVideoBlackout(mTvPlayDevId);
}
int CAv::DisableVideoBlackout()
{
- return AM_AV_DisableVideoBlackout(mTvPlayDevId);
+ return AM_AV_DisableVideoBlackout(mTvPlayDevId);
}
int CAv::DisableVideoWithBlueColor()
{
- LOGD("DisableVideoWithBlueColor");
- if (mCurVideoLayerMuteState == 1 && mCurDisableVideoColor == DISABLE_VIDEO_COLOR_BLUE) {
- LOGD("video is disable with blue, return");
- return 0;
- }
- mCurVideoLayerMuteState = 1;
- mCurDisableVideoColor = DISABLE_VIDEO_COLOR_BLUE;
- SetVideoScreenColor ( 0, 41, 240, 110 ); // Show blue with vdin0, postblending disabled
- return AM_AV_DisableVideo(mTvPlayDevId);
+ LOGD("DisableVideoWithBlueColor");
+ if(mCurVideoLayerMuteState == 1 && mCurDisableVideoColor == DISABLE_VIDEO_COLOR_BLUE) {
+ LOGD("video is disable with blue, return");
+ return 0;
+ }
+ mCurVideoLayerMuteState = 1;
+ mCurDisableVideoColor = DISABLE_VIDEO_COLOR_BLUE;
+ SetVideoScreenColor ( 0, 41, 240, 110 ); // Show blue with vdin0, postblending disabled
+ return AM_AV_DisableVideo(mTvPlayDevId);
}
int CAv::DisableVideoWithBlackColor()
{
- LOGD("DisableVideoWithBlackColor");
- if (mCurVideoLayerMuteState == 1 && mCurDisableVideoColor == DISABLE_VIDEO_COLOR_BLACK) {
- LOGD("video is disable with black, return");
- return 0;
- }
- mCurDisableVideoColor = DISABLE_VIDEO_COLOR_BLACK;
- mCurVideoLayerMuteState = 1;
- SetVideoScreenColor ( 0, 16, 128, 128 ); // Show blue with vdin0, postblending disabled
- return AM_AV_DisableVideo(mTvPlayDevId);
+ LOGD("DisableVideoWithBlackColor");
+ if(mCurVideoLayerMuteState == 1 && mCurDisableVideoColor == DISABLE_VIDEO_COLOR_BLACK) {
+ LOGD("video is disable with black, return");
+ return 0;
+ }
+ mCurDisableVideoColor = DISABLE_VIDEO_COLOR_BLACK;
+ mCurVideoLayerMuteState = 1;
+ SetVideoScreenColor ( 0, 16, 128, 128 ); // Show blue with vdin0, postblending disabled
+ return AM_AV_DisableVideo(mTvPlayDevId);
}
//auto enable,
int CAv::EnableVideoAuto()
{
- LOGD("EnableVideo");
- if (mCurVideoLayerMuteState == 0) {
- LOGD("video is enable, return");
- return 0;
- }
- mCurVideoLayerMuteState = 0;
- SetVideoScreenColor ( 0, 16, 128, 128 ); // Show black with vdin0, postblending disabled
- return ClearVideoBuffer();//disable video 2
+ LOGD("EnableVideo");
+ if(mCurVideoLayerMuteState == 0) {
+ LOGD("video is enable, return");
+ return 0;
+ }
+ mCurVideoLayerMuteState = 0;
+ SetVideoScreenColor ( 0, 16, 128, 128 ); // Show black with vdin0, postblending disabled
+ return ClearVideoBuffer();//disable video 2
}
//just enable video
int CAv::EnableVideoNow()
{
- LOGD("EnableVideoNow");
- if (mCurVideoLayerMuteState == 0) {
- LOGD("video is enable, return");
- return 0;
- }
- mCurVideoLayerMuteState = 0;
- SetVideoScreenColor ( 3, 16, 128, 128 ); // Show blue with vdin0, postblending disabled
- return AM_AV_EnableVideo(mTvPlayDevId);
+ LOGD("EnableVideoNow");
+ if(mCurVideoLayerMuteState == 0) {
+ LOGD("video is enable, return");
+ return 0;
+ }
+ mCurVideoLayerMuteState = 0;
+ SetVideoScreenColor ( 3, 16, 128, 128 ); // Show blue with vdin0, postblending disabled
+ return AM_AV_EnableVideo(mTvPlayDevId);
}
//call disable video 2
int CAv::ClearVideoBuffer()
{
- LOGD("ClearVideoBuffer");
- return AM_AV_ClearVideoBuffer(mTvPlayDevId);
+ LOGD("ClearVideoBuffer");
+ return AM_AV_ClearVideoBuffer(mTvPlayDevId);
}
int CAv::SetVideoScreenColor ( int vdin_blending_mask, int y, int u, int v )
{
- FILE *fp = NULL;
- unsigned long value = 0;
+ FILE *fp = NULL;
+ unsigned long value = 0;
- value = vdin_blending_mask << 24;
+ value = vdin_blending_mask << 24;
- value |= ( unsigned int ) ( y << 16 ) | ( unsigned int ) ( u << 8 ) | ( unsigned int ) ( v );
+ value |= ( unsigned int ) ( y << 16 ) | ( unsigned int ) ( u << 8 ) | ( unsigned int ) ( v );
- fp = fopen ( "/sys/class/video/test_screen", "w" );
- LOGD ( "~~~fopen~~~##VPP_SetVideoScreenColor##%s : vdin_blending_mask:%d,y:%d,u:%d,v:%d ##" , "/sys/class/video/test_screen", vdin_blending_mask, y, u, v);
+ fp = fopen ( "/sys/class/video/test_screen", "w" );
+ LOGD ( "~~~fopen~~~##VPP_SetVideoScreenColor##%s : vdin_blending_mask:%d,y:%d,u:%d,v:%d ##" , "/sys/class/video/test_screen", vdin_blending_mask, y, u, v);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/video/test_screen error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/video/test_screen error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "0x%lx", ( unsigned long ) value );
+ fprintf ( fp, "0x%lx", ( unsigned long ) value );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CAv::getVideoDisableValue()
{
- LOGD("this fun is empty!!!!!!!!");
- return 0;
+ LOGD("this fun is empty!!!!!!!!");
+ return 0;
}
int CAv::SetVideoLayerDisable ( int value )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/class/video/disable_video", "w" );
- LOGD ( "~~~fopen~~~##VPP_SetVideoLayerDisable##%s : %d ##" , "/sys/class/video/disable_video", value);
+ fp = fopen ( "/sys/class/video/disable_video", "w" );
+ LOGD ( "~~~fopen~~~##VPP_SetVideoLayerDisable##%s : %d ##" , "/sys/class/video/disable_video", value);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/video/disable_video error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/video/disable_video error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", value );
+ fprintf ( fp, "%d", value );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CAv::setVideoScreenMode ( int value )
{
- FILE *fp = fopen ( "/sys/class/video/screen_mode", "w" );
- LOGD ( "setVideoScreenMode %d ##" , value);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/video/screen_mode error(%s)!\n", strerror ( errno ) );
- return -1;
- }
- fprintf ( fp, "%d", value );
- fclose ( fp );
- return 0;
+ FILE *fp = fopen ( "/sys/class/video/screen_mode", "w" );
+ LOGD ( "setVideoScreenMode %d ##" , value);
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/video/screen_mode error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
+ fprintf ( fp, "%d", value );
+ fclose ( fp );
+ return 0;
}
int CAv::setVideoAxis ( int h, int v, int width, int height )
{
- FILE *fp = NULL;
- fp = fopen ( "/sys/class/video/axis", "w" );
- LOGD ( "setVideoAxis##%s : %d %d %d %d ##" , "/sys/class/video/axis", h, v, width, height);
-
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/video/axis ERROR(%s)!!\n", strerror ( errno ) );
- return -1;
- }
- fprintf ( fp, "%d %d %d %d", h, v, width, height );
- fclose ( fp );
- return 0;
+ FILE *fp = NULL;
+ fp = fopen ( "/sys/class/video/axis", "w" );
+ LOGD ( "setVideoAxis##%s : %d %d %d %d ##" , "/sys/class/video/axis", h, v, width, height);
+
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/video/axis ERROR(%s)!!\n", strerror ( errno ) );
+ return -1;
+ }
+ fprintf ( fp, "%d %d %d %d", h, v, width, height );
+ fclose ( fp );
+ return 0;
}
int CAv::getVideoScreenMode()
{
- int value;
- FILE *fp = fopen ( "/sys/class/video/screen_mode", "r+" );
-
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/video/screen_mode error(%s)!\n", strerror ( errno ) );
- return -1;
- }
- fscanf ( fp, "%d", &value );
- fclose ( fp );
- return value;
+ int value;
+ FILE *fp = fopen ( "/sys/class/video/screen_mode", "r+" );
+
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/video/screen_mode error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
+ fscanf ( fp, "%d", &value );
+ fclose ( fp );
+ return value;
}
video_display_resolution_t CAv::getVideoDisplayResolution()
{
- char attrV[64];
- memset (attrV, 0x0, 64);
- Tv_Utils_GetFileAttrStr ( "/sys/class/video/device_resolution", 64, attrV );
- video_display_resolution_t resolution;
- if (strncasecmp(attrV, "1366x768", strlen ("1366x768")) == 0) {
- resolution = VPP_DISPLAY_RESOLUTION_1366X768;
- } else if (strncasecmp(attrV, "3840x2160", strlen ("3840x2160")) == 0) {
- resolution = VPP_DISPLAY_RESOLUTION_3840X2160;
- } else if (strncasecmp(attrV, "1920x1080", strlen ("1920x1080")) == 0) {
- resolution = VPP_DISPLAY_RESOLUTION_1920X1080;
- } else {
- LOGW("video display resolution is = (%s) not define , default it", attrV);
- resolution = VPP_DISPLAY_RESOLUTION_1920X1080;
- }
-
- return resolution;
+ char attrV[64];
+ memset (attrV, 0x0, 64);
+ Tv_Utils_GetFileAttrStr ( "/sys/class/video/device_resolution", 64, attrV );
+ video_display_resolution_t resolution;
+ if (strncasecmp(attrV, "1366x768", strlen ("1366x768")) == 0) {
+ resolution = VPP_DISPLAY_RESOLUTION_1366X768;
+ } else if (strncasecmp(attrV, "3840x2160", strlen ("3840x2160")) == 0) {
+ resolution = VPP_DISPLAY_RESOLUTION_3840X2160;
+ } else if (strncasecmp(attrV, "1920x1080", strlen ("1920x1080")) == 0) {
+ resolution = VPP_DISPLAY_RESOLUTION_1920X1080;
+ } else {
+ LOGW("video display resolution is = (%s) not define , default it", attrV);
+ resolution = VPP_DISPLAY_RESOLUTION_1920X1080;
+ }
+
+ return resolution;
}
-void CAv::av_evt_callback ( int dev_no, int event_type, void *param, void *user_data )
+void CAv::av_evt_callback ( long dev_no, int event_type, void *param, void *user_data )
{
- CAv *pAv = ( CAv * ) user_data;
- if (NULL == pAv ) {
- LOGD ( "%s, ERROR : av_evt_callback NULL == pTv\n", __FUNCTION__ );
- return ;
- }
- if ( pAv->mpObserver == NULL ) {
- LOGD ( "%s, ERROR : mpObserver NULL == mpObserver\n", __FUNCTION__ );
- return;
- }
- switch ( event_type ) {
- case AM_AV_EVT_AV_NO_DATA:
- pAv->mCurAvEvent.type = AVEvent::EVENT_AV_STOP;
- pAv->mCurAvEvent.param = ( int )param;
- pAv->mpObserver->onEvent(pAv->mCurAvEvent);
- break;
- case AM_AV_EVT_AV_DATA_RESUME:
- pAv->mCurAvEvent.type = AVEvent::EVENT_AV_RESUEM;
- pAv->mCurAvEvent.param = ( int )param;
- pAv->mpObserver->onEvent(pAv->mCurAvEvent);
- break;
- case AM_AV_EVT_VIDEO_SCAMBLED:
- case AM_AV_EVT_AUDIO_SCAMBLED:
- pAv->mCurAvEvent.type = AVEvent::EVENT_AV_SCAMBLED;
- pAv->mCurAvEvent.param = ( int )param;
- pAv->mpObserver->onEvent(pAv->mCurAvEvent);
- break;
- case AM_AV_EVT_VIDEO_NOT_SUPPORT: {
- pAv->mCurAvEvent.type = AVEvent::EVENT_AV_UNSUPPORT;
- pAv->mCurAvEvent.param = ( int )param;
- pAv->mpObserver->onEvent(pAv->mCurAvEvent);
- break;
- }
- default:
- break;
- }
- LOGD ( "%s, av_evt_callback : dev_no %d type %d param = %d\n", __FUNCTION__, dev_no, pAv->mCurAvEvent.type , (int)param);
+ CAv *pAv = ( CAv * ) user_data;
+ if (NULL == pAv ) {
+ LOGD ( "%s, ERROR : av_evt_callback NULL == pTv\n", __FUNCTION__ );
+ return ;
+ }
+ if ( pAv->mpObserver == NULL ) {
+ LOGD ( "%s, ERROR : mpObserver NULL == mpObserver\n", __FUNCTION__ );
+ return;
+ }
+ switch ( event_type ) {
+ case AM_AV_EVT_AV_NO_DATA:
+ pAv->mCurAvEvent.type = AVEvent::EVENT_AV_STOP;
+ pAv->mCurAvEvent.param = ( int )param;
+ pAv->mpObserver->onEvent(pAv->mCurAvEvent);
+ break;
+ case AM_AV_EVT_AV_DATA_RESUME:
+ pAv->mCurAvEvent.type = AVEvent::EVENT_AV_RESUEM;
+ pAv->mCurAvEvent.param = ( int )param;
+ pAv->mpObserver->onEvent(pAv->mCurAvEvent);
+ break;
+ case AM_AV_EVT_VIDEO_SCAMBLED:
+ case AM_AV_EVT_AUDIO_SCAMBLED:
+ pAv->mCurAvEvent.type = AVEvent::EVENT_AV_SCAMBLED;
+ pAv->mCurAvEvent.param = ( int )param;
+ pAv->mpObserver->onEvent(pAv->mCurAvEvent);
+ break;
+ case AM_AV_EVT_VIDEO_NOT_SUPPORT: {
+ pAv->mCurAvEvent.type = AVEvent::EVENT_AV_UNSUPPORT;
+ pAv->mCurAvEvent.param = ( int )param;
+ pAv->mpObserver->onEvent(pAv->mCurAvEvent);
+ break;
+ }
+ default:
+ break;
+ }
+ LOGD ( "%s, av_evt_callback : dev_no %d type %d param = %d\n", __FUNCTION__, dev_no, pAv->mCurAvEvent.type , (int)param);
}
int CAv::set3DMode(VIDEO_3D_MODE_T mode, int LR_switch, int mode_3D_TO_2D)
{
- unsigned int cmd = MODE_3D_DISABLE;
- switch (mode) {
- case VIDEO_3D_MODE_DISABLE:
- cmd = MODE_3D_DISABLE;
- break;
- case VIDEO_3D_MODE_AUTO:
- cmd = MODE_3D_ENABLE | MODE_3D_AUTO;
- break;
- case VIDEO_3D_MODE_LR:
- cmd = MODE_3D_ENABLE | MODE_3D_LR;
- break;
- case VIDEO_3D_MODE_TB:
- cmd = MODE_3D_ENABLE | MODE_3D_TB;
- break;
- case VIDEO_3D_MODE_LA:
- cmd = MODE_3D_ENABLE | MODE_3D_LA;
- break;
- case VIDEO_3D_MODE_FA:
- cmd = MODE_3D_ENABLE | MODE_3D_FA;
- break;
- default:
- cmd = MODE_3D_DISABLE;
- break;
- }
-
- if (LR_switch == 1) {
- cmd = cmd | MODE_3D_LR_SWITCH;
- }
-
- if (mode_3D_TO_2D == 1) {
- cmd = cmd | MODE_3D_TO_2D_L;
- }
-
- if (mode_3D_TO_2D == 2) {
- cmd = cmd | MODE_3D_TO_2D_R;
- }
- LOGD("set 3d mode fd = %d cmd = 0x%x", mFdAmVideo, cmd);
- int ret = ioctl(mFdAmVideo, AMSTREAM_IOC_SET_3D_TYPE , cmd);
- if (ret < 0) {
- LOGE("set3DMode error ( %s )", strerror ( errno ));
- }
- return 0;
+ unsigned int cmd = MODE_3D_DISABLE;
+ switch(mode) {
+ case VIDEO_3D_MODE_DISABLE:
+ cmd = MODE_3D_DISABLE;
+ break;
+ case VIDEO_3D_MODE_AUTO:
+ cmd = MODE_3D_ENABLE | MODE_3D_AUTO;
+ break;
+ case VIDEO_3D_MODE_LR:
+ cmd = MODE_3D_ENABLE | MODE_3D_LR;
+ break;
+ case VIDEO_3D_MODE_TB:
+ cmd = MODE_3D_ENABLE | MODE_3D_TB;
+ break;
+ case VIDEO_3D_MODE_LA:
+ cmd = MODE_3D_ENABLE | MODE_3D_LA;
+ break;
+ case VIDEO_3D_MODE_FA:
+ cmd = MODE_3D_ENABLE | MODE_3D_FA;
+ break;
+ default:
+ cmd = MODE_3D_DISABLE;
+ break;
+ }
+
+ if(LR_switch == 1) {
+ cmd = cmd | MODE_3D_LR_SWITCH;
+ }
+
+ if(mode_3D_TO_2D == 1) {
+ cmd = cmd | MODE_3D_TO_2D_L;
+ }
+
+ if(mode_3D_TO_2D == 2) {
+ cmd = cmd | MODE_3D_TO_2D_R;
+ }
+ LOGD("set 3d mode fd = %d cmd = 0x%x", mFdAmVideo, cmd);
+ int ret = ioctl(mFdAmVideo, AMSTREAM_IOC_SET_3D_TYPE , cmd);
+ if(ret < 0) {
+ LOGE("set3DMode error ( %s )", strerror ( errno ));
+ }
+ return 0;
}
diff --git a/tvapi/libtv/tv/CAv.h b/tvapi/libtv/tv/CAv.h
index 510e64e..e394e49 100644
--- a/tvapi/libtv/tv/CAv.h
+++ b/tvapi/libtv/tv/CAv.h
@@ -24,125 +24,123 @@ static const char *PATH_VIDEO_SCALER = "/sys/class/video/stereo_scaler";
#define MODE_3D_LR_SWITCH 0x00000100
#define MODE_3D_TO_2D_L 0x00000200
#define MODE_3D_TO_2D_R 0x00000400
-#define MODE_3D_MVC 0x00000800
-#define MODE_3D_OUT_TB 0x00010000
-#define MODE_3D_OUT_LR 0x00020000
+#define MODE_3D_MVC 0x00000800
+#define MODE_3D_OUT_TB 0x00010000
+#define MODE_3D_OUT_LR 0x00020000
/*when the output mode is field alterlative*/
//LRLRLRLRL mode
-#define MODE_3D_OUT_FA_L_FIRST 0x00001000
-#define MODE_3D_OUT_FA_R_FIRST 0x00002000
+#define MODE_3D_OUT_FA_L_FIRST 0x00001000
+#define MODE_3D_OUT_FA_R_FIRST 0x00002000
//LBRBLBRB
#define MODE_3D_OUT_FA_LB_FIRST 0x00004000
-#define MODE_3D_OUT_FA_RB_FIRST 0x00008000
+#define MODE_3D_OUT_FA_RB_FIRST 0x00008000
typedef enum VIDEO_3D_MODE_E {
- VIDEO_3D_MODE_DISABLE,
- VIDEO_3D_MODE_AUTO,
- VIDEO_3D_MODE_LR,
- VIDEO_3D_MODE_TB,
- VIDEO_3D_MODE_LA,
- VIDEO_3D_MODE_FA
+ VIDEO_3D_MODE_DISABLE,
+ VIDEO_3D_MODE_AUTO,
+ VIDEO_3D_MODE_LR,
+ VIDEO_3D_MODE_TB,
+ VIDEO_3D_MODE_LA,
+ VIDEO_3D_MODE_FA
} VIDEO_3D_MODE_T;
//end 3D===================================================================
typedef enum video_display_resolution_e {
- VPP_DISPLAY_RESOLUTION_1366X768,
- VPP_DISPLAY_RESOLUTION_1920X1080,
- VPP_DISPLAY_RESOLUTION_3840X2160,
- VPP_DISPLAY_RESOLUTION_MAX,
+ VPP_DISPLAY_RESOLUTION_1366X768,
+ VPP_DISPLAY_RESOLUTION_1920X1080,
+ VPP_DISPLAY_RESOLUTION_3840X2160,
+ VPP_DISPLAY_RESOLUTION_MAX,
} video_display_resolution_t;
-class CAv
-{
+class CAv {
public:
- CAv();
- ~CAv();
- //video screen_mode
- static const int VIDEO_WIDEOPTION_NORMAL = 0;
- static const int VIDEO_WIDEOPTION_FULL_STRETCH = 1;
- static const int VIDEO_WIDEOPTION_4_3 = 2;
- static const int VIDEO_WIDEOPTION_16_9 = 3;
- static const int VIDEO_WIDEOPTION_NONLINEAR = 4;
- static const int VIDEO_WIDEOPTION_NORMAL_NOSCALEUP = 5;
- static const int VIDEO_WIDEOPTION_CROP_FULL = 6;
- static const int VIDEO_WIDEOPTION_CROP = 7;
- //
- static const int DISABLE_VIDEO_COLOR_BLUE = 1;
- static const int DISABLE_VIDEO_COLOR_BLACK = 2;
- class AVEvent : public CTvEv
- {
- public:
- AVEvent(): CTvEv(CTvEv::TV_EVENT_AV)
- {
+ CAv();
+ ~CAv();
+ //video screen_mode
+ static const int VIDEO_WIDEOPTION_NORMAL = 0;
+ static const int VIDEO_WIDEOPTION_FULL_STRETCH = 1;
+ static const int VIDEO_WIDEOPTION_4_3 = 2;
+ static const int VIDEO_WIDEOPTION_16_9 = 3;
+ static const int VIDEO_WIDEOPTION_NONLINEAR = 4;
+ static const int VIDEO_WIDEOPTION_NORMAL_NOSCALEUP = 5;
+ static const int VIDEO_WIDEOPTION_CROP_FULL = 6;
+ static const int VIDEO_WIDEOPTION_CROP = 7;
+ //
+ static const int DISABLE_VIDEO_COLOR_BLUE = 1;
+ static const int DISABLE_VIDEO_COLOR_BLACK = 2;
+ class AVEvent : public CTvEv {
+ public:
+ AVEvent(): CTvEv(CTvEv::TV_EVENT_AV)
+ {
- };
- ~AVEvent()
- {};
- static const int EVENT_AV_STOP = 1;
- static const int EVENT_AV_RESUEM = 2;
- static const int EVENT_AV_SCAMBLED = 3;
- static const int EVENT_AV_UNSUPPORT = 4;
- int type;
- int param;
- };
+ };
+ ~AVEvent()
+ {
+ };
+ static const int EVENT_AV_STOP = 1;
+ static const int EVENT_AV_RESUEM = 2;
+ static const int EVENT_AV_SCAMBLED = 3;
+ static const int EVENT_AV_UNSUPPORT = 4;
+ int type;
+ int param;
+ };
- class IObserver
- {
- public:
- IObserver() {};
- virtual ~IObserver() {};
- virtual void onEvent(const AVEvent &ev) = 0;
- };
- //1 VS n
- //int addObserver(IObserver* ob);
- //int removeObserver(IObserver* ob);
+ class IObserver {
+ public:
+ IObserver() {};
+ virtual ~IObserver() {};
+ virtual void onEvent(const AVEvent &ev) = 0;
+ };
+ //1 VS n
+ //int addObserver(IObserver* ob);
+ //int removeObserver(IObserver* ob);
- //1 VS 1
- int setObserver(IObserver *ob)
- {
- mpObserver = ob;
- return 0;
- }
+ //1 VS 1
+ int setObserver(IObserver *ob)
+ {
+ mpObserver = ob;
+ return 0;
+ }
- int Open();
- int Close();
- int SetVideoWindow(int x, int y, int w, int h);
- int GetVideoStatus(AM_AV_VideoStatus_t *status);
- int SwitchTSAudio(int apid, AM_AV_AFormat_t afmt);
- int ResetAudioDecoder();
- int SetTSSource(AM_AV_TSSource_t ts_source);
- int StartTS(uint16_t vpid, uint16_t apid, AM_AV_VFormat_t vfmt, AM_AV_AFormat_t afmt);
- int StopTS();
- int AudioGetOutputMode(AM_AOUT_OutputMode_t *mode);
- int AudioSetOutputMode(AM_AOUT_OutputMode_t mode);
- int SetVideoScreenColor (int vdin_blending_mask, int y, int u, int v);
- int DisableVideoWithBlueColor();
- int DisableVideoWithBlackColor();
- int EnableVideoAuto();
- int EnableVideoNow();
- int EnableVideoBlackout();
- int DisableVideoBlackout();
- int getVideoDisableValue();
- int SetVideoLayerDisable ( int value );
- int ClearVideoBuffer();
- int setVideoScreenMode ( int value );
- int getVideoScreenMode();
- int setVideoAxis ( int h, int v, int width, int height );
- video_display_resolution_t getVideoDisplayResolution();
- //LR_switch: 1 is enable, 3D_TO_2D:1 is L , 2 is R
- int set3DMode(VIDEO_3D_MODE_T mode, int LR_switch, int mode_3D_TO_2D);
- //
+ int Open();
+ int Close();
+ int SetVideoWindow(int x, int y, int w, int h);
+ int GetVideoStatus(AM_AV_VideoStatus_t *status);
+ int SwitchTSAudio(int apid, AM_AV_AFormat_t afmt);
+ int ResetAudioDecoder();
+ int SetTSSource(AM_AV_TSSource_t ts_source);
+ int StartTS(uint16_t vpid, uint16_t apid, AM_AV_VFormat_t vfmt, AM_AV_AFormat_t afmt);
+ int StopTS();
+ int AudioGetOutputMode(AM_AOUT_OutputMode_t *mode);
+ int AudioSetOutputMode(AM_AOUT_OutputMode_t mode);
+ int SetVideoScreenColor (int vdin_blending_mask, int y, int u, int v);
+ int DisableVideoWithBlueColor();
+ int DisableVideoWithBlackColor();
+ int EnableVideoAuto();
+ int EnableVideoNow();
+ int EnableVideoBlackout();
+ int DisableVideoBlackout();
+ int getVideoDisableValue();
+ int SetVideoLayerDisable ( int value );
+ int ClearVideoBuffer();
+ int setVideoScreenMode ( int value );
+ int getVideoScreenMode();
+ int setVideoAxis ( int h, int v, int width, int height );
+ video_display_resolution_t getVideoDisplayResolution();
+ //LR_switch: 1 is enable, 3D_TO_2D:1 is L , 2 is R
+ int set3DMode(VIDEO_3D_MODE_T mode, int LR_switch, int mode_3D_TO_2D);
+ //
private:
- static void av_evt_callback ( int dev_no, int event_type, void *param, void *user_data );
- int mTvPlayDevId;
- IObserver *mpObserver;
- AVEvent mCurAvEvent;
- int mCurVideoLayerMuteState;
- int mCurDisableVideoColor;
+ static void av_evt_callback ( long dev_no, int event_type, void *param, void *user_data );
+ int mTvPlayDevId;
+ IObserver *mpObserver;
+ AVEvent mCurAvEvent;
+ int mCurVideoLayerMuteState;
+ int mCurDisableVideoColor;
- int mFdAmVideo;
+ int mFdAmVideo;
};
#endif
diff --git a/tvapi/libtv/tv/CFbcCommunication.cpp b/tvapi/libtv/tv/CFbcCommunication.cpp
index 48193d7..08bc0e3 100644
--- a/tvapi/libtv/tv/CFbcCommunication.cpp
+++ b/tvapi/libtv/tv/CFbcCommunication.cpp
@@ -8,184 +8,184 @@
static CFbcCommunication *gSingletonFBC = NULL;
CFbcCommunication *GetSingletonFBC()
{
- if (GetPlatformHaveFBCFlag() == 1) {
- if (gSingletonFBC == NULL) {
- gSingletonFBC = new CFbcCommunication();
- gSingletonFBC->start();
- }
+ if (GetPlatformHaveFBCFlag() == 1) {
+ if (gSingletonFBC == NULL) {
+ gSingletonFBC = new CFbcCommunication();
+ gSingletonFBC->start();
+ }
- return gSingletonFBC;
- }
+ return gSingletonFBC;
+ }
- LOGE("%s, the platform has no fbc!!!\n", __FUNCTION__);
- return NULL;
+ LOGE("%s, the platform has no fbc!!!\n", __FUNCTION__);
+ return NULL;
}
CFbcCommunication::CFbcCommunication()
{
- initCrc32Table();
+ initCrc32Table();
- m_event.data.fd = -1;
- m_event.events = EPOLLIN | EPOLLET;
+ m_event.data.fd = -1;
+ m_event.events = EPOLLIN | EPOLLET;
- mpRevDataBuf = new unsigned char[512];
+ mpRevDataBuf = new unsigned char[512];
- mUpgradeFlag = 0;
- mbDownHaveSend = 0;//false
- //mFbcMsgQueue.startMsgQueue();
- mbFbcKeyEnterDown = 0;//false
- mFbcEnterKeyDownTime = -1;
+ mUpgradeFlag = 0;
+ mbDownHaveSend = 0;//false
+ //mFbcMsgQueue.startMsgQueue();
+ mbFbcKeyEnterDown = 0;//false
+ mFbcEnterKeyDownTime = -1;
}
CFbcCommunication::~CFbcCommunication()
{
- m_event.data.fd = mSerialPort.getFd();
- m_event.events = EPOLLIN | EPOLLET;
- mEpoll.del(mSerialPort.getFd(), &m_event);
- closeAll();
- delete[] mpRevDataBuf;
+ m_event.data.fd = mSerialPort.getFd();
+ m_event.events = EPOLLIN | EPOLLET;
+ mEpoll.del(mSerialPort.getFd(), &m_event);
+ closeAll();
+ delete[] mpRevDataBuf;
}
int CFbcCommunication::start()
{
#if 1
- //int serial_port = config_get_int("TV", "fbc.communication.serial", SERIAL_C);
- if (mSerialPort.OpenDevice(SERIAL_C) < 0) {
- } else {
+ //int serial_port = config_get_int("TV", "fbc.communication.serial", SERIAL_C);
+ if (mSerialPort.OpenDevice(SERIAL_C) < 0) {
+ } else {
#if 0
- LOGD("%s %d be called......\n", __FUNCTION__, __LINE__);
- mSerialPort.set_opt(115200, 8, 1, 'N', 5000, 1);
+ LOGD("%s %d be called......\n", __FUNCTION__, __LINE__);
+ mSerialPort.set_opt(115200, 8, 1, 'N', 5000, 1);
#else
- LOGD("%s %d be called......\n", __FUNCTION__, __LINE__);
- mSerialPort.setup_serial();
+ LOGD("%s %d be called......\n", __FUNCTION__, __LINE__);
+ mSerialPort.setup_serial();
#endif
- }
+ }
- if (mEpoll.create() < 0) {
- return -1;
- }
+ if(mEpoll.create() < 0) {
+ return -1;
+ }
- m_event.data.fd = mSerialPort.getFd();
- m_event.events = EPOLLIN | EPOLLET;
- mEpoll.add(mSerialPort.getFd(), &m_event);
+ m_event.data.fd = mSerialPort.getFd();
+ m_event.events = EPOLLIN | EPOLLET;
+ mEpoll.add(mSerialPort.getFd(), &m_event);
#endif
#if 0
- mHdmiCec.openFile(CEC_PATH);
- m_event.data.fd = mHdmiCec.getFd();
- m_event.events = EPOLLIN | EPOLLET;
- mEpoll.add(mHdmiCec.getFd(), &m_event);
+ mHdmiCec.openFile(CEC_PATH);
+ m_event.data.fd = mHdmiCec.getFd();
+ m_event.events = EPOLLIN | EPOLLET;
+ mEpoll.add(mHdmiCec.getFd(), &m_event);
#endif
- //timeout for long
- mEpoll.setTimeout(3000);
+ //timeout for long
+ mEpoll.setTimeout(3000);
- this->run();
- mTvInput.run();
- return 0;
+ this->run();
+ mTvInput.run();
+ return 0;
}
void CFbcCommunication::testUart()
{
- unsigned char write_buf[64], read_buf[64];
- int idx = 0;
- memset(write_buf, 0, sizeof(write_buf));
- memset(read_buf, 0, sizeof(read_buf));
-
- write_buf[0] = 0x5a;
- write_buf[1] = 0x5a;
- write_buf[2] = 0xb;
- write_buf[3] = 0x0;
- write_buf[4] = 0x0;
- write_buf[5] = 0x40;
- write_buf[6] = 0x0;
-
- write_buf[7] = 0x2;
- write_buf[8] = 0x3c;
- write_buf[9] = 0x75;
- write_buf[10] = 0x30;
- //LOGD("to write ..........\n");
- mSerialPort.writeFile(write_buf, 11);
- sleep(1);
- //LOGD("to read........\n");
- mSerialPort.readFile(read_buf, 12);
- for (idx = 0; idx < 12; idx++)
- LOGD("the data is:0x%x\n", read_buf[idx]);
- LOGD("end....\n");
+ unsigned char write_buf[64], read_buf[64];
+ int idx = 0;
+ memset(write_buf, 0, sizeof(write_buf));
+ memset(read_buf, 0, sizeof(read_buf));
+
+ write_buf[0] = 0x5a;
+ write_buf[1] = 0x5a;
+ write_buf[2] = 0xb;
+ write_buf[3] = 0x0;
+ write_buf[4] = 0x0;
+ write_buf[5] = 0x40;
+ write_buf[6] = 0x0;
+
+ write_buf[7] = 0x2;
+ write_buf[8] = 0x3c;
+ write_buf[9] = 0x75;
+ write_buf[10] = 0x30;
+ //LOGD("to write ..........\n");
+ mSerialPort.writeFile(write_buf, 11);
+ sleep(1);
+ //LOGD("to read........\n");
+ mSerialPort.readFile(read_buf, 12);
+ for(idx = 0; idx < 12; idx++)
+ LOGD("the data is:0x%x\n", read_buf[idx]);
+ LOGD("end....\n");
}
void CFbcCommunication::showTime(struct timeval *_time)
{
- struct timeval curTime;
-
- if (_time == NULL) {
- gettimeofday(&curTime, NULL);
- } else {
- curTime.tv_sec = _time->tv_sec;
- curTime.tv_usec = _time->tv_usec;
- }
- if (curTime.tv_usec > 100000) {
- LOGD("[%d.%d]", curTime.tv_sec, curTime.tv_usec);
- } else if (curTime.tv_usec > 10000) {
- LOGD("[%d.0%d]", curTime.tv_sec, curTime.tv_usec);
- } else if (curTime.tv_usec > 1000) {
- LOGD("[%d.00%d]", curTime.tv_sec, curTime.tv_usec);
- } else if (curTime.tv_usec > 100) {
- LOGD("[%d.000%d]", curTime.tv_sec, curTime.tv_usec);
- } else if (curTime.tv_usec > 10) {
- LOGD("[%d.0000%d]", curTime.tv_sec, curTime.tv_usec);
- } else if (curTime.tv_usec > 1) {
- LOGD("[%d.00000%d]", curTime.tv_sec, curTime.tv_usec);
- }
+ struct timeval curTime;
+
+ if(_time == NULL) {
+ gettimeofday(&curTime, NULL);
+ } else {
+ curTime.tv_sec = _time->tv_sec;
+ curTime.tv_usec = _time->tv_usec;
+ }
+ if(curTime.tv_usec > 100000) {
+ LOGD("[%d.%d]", curTime.tv_sec, curTime.tv_usec);
+ } else if(curTime.tv_usec > 10000) {
+ LOGD("[%d.0%d]", curTime.tv_sec, curTime.tv_usec);
+ } else if(curTime.tv_usec > 1000) {
+ LOGD("[%d.00%d]", curTime.tv_sec, curTime.tv_usec);
+ } else if(curTime.tv_usec > 100) {
+ LOGD("[%d.000%d]", curTime.tv_sec, curTime.tv_usec);
+ } else if(curTime.tv_usec > 10) {
+ LOGD("[%d.0000%d]", curTime.tv_sec, curTime.tv_usec);
+ } else if(curTime.tv_usec > 1) {
+ LOGD("[%d.00000%d]", curTime.tv_sec, curTime.tv_usec);
+ }
}
long CFbcCommunication::getTime(void)
{
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return tv.tv_sec * 1000 + tv.tv_usec / 1000;
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
void CFbcCommunication::initCrc32Table()
{
- //生æˆCrc32的查询表
- int i, j;
- unsigned int Crc;
- for (i = 0; i < 256; i++) {
- Crc = i;
- for (j = 0; j < 8; j++) {
- if (Crc & 1)
- Crc = (Crc >> 1) ^ 0xEDB88320;
- else
- Crc >>= 1;
- }
- mCrc32Table[i] = Crc;
- }
+ //生æˆCrc32的查询表
+ int i, j;
+ unsigned int Crc;
+ for (i = 0; i < 256; i++) {
+ Crc = i;
+ for (j = 0; j < 8; j++) {
+ if (Crc & 1)
+ Crc = (Crc >> 1) ^ 0xEDB88320;
+ else
+ Crc >>= 1;
+ }
+ mCrc32Table[i] = Crc;
+ }
}
void CFbcCommunication::sendAckCmd(bool isOk)
{
- int crc32value = 0;
- unsigned char ackcmd[12];
- ackcmd[0] = 0x5A;
- ackcmd[1] = 0x5A;
- ackcmd[2] = 12;//little endian
- ackcmd[3] = 0x00;
- ackcmd[4] = 0x80;//ack flag
- ackcmd[5] = 0xff;//cmd id
- if (isOk) {
- ackcmd[6] = 0xfe;
- ackcmd[7] = 0x7f;
- } else {
- ackcmd[6] = 0x80;
- ackcmd[7] = 0x01;
- }
- //*((unsigned int*) (ackcmd + 8)) = GetCrc32(ackcmd, 8);
- crc32value = Calcrc32(0, ackcmd, 8);
- ackcmd[8] = (crc32value >> 0) & 0xFF;
- ackcmd[9] = (crc32value >> 8) & 0xFF;
- ackcmd[10] = (crc32value >> 16) & 0xFF;
- ackcmd[11] = (crc32value >> 24) & 0xFF;
- LOGD("to send ack and crc is:0x%x\n", crc32value);
- sendDataOneway(COMM_DEV_SERIAL, ackcmd, 12, 0x00000000);
+ int crc32value = 0;
+ unsigned char ackcmd[12];
+ ackcmd[0] = 0x5A;
+ ackcmd[1] = 0x5A;
+ ackcmd[2] = 12;//little endian
+ ackcmd[3] = 0x00;
+ ackcmd[4] = 0x80;//ack flag
+ ackcmd[5] = 0xff;//cmd id
+ if(isOk) {
+ ackcmd[6] = 0xfe;
+ ackcmd[7] = 0x7f;
+ } else {
+ ackcmd[6] = 0x80;
+ ackcmd[7] = 0x01;
+ }
+ //*((unsigned int*) (ackcmd + 8)) = GetCrc32(ackcmd, 8);
+ crc32value = Calcrc32(0, ackcmd, 8);
+ ackcmd[8] = (crc32value >> 0) & 0xFF;
+ ackcmd[9] = (crc32value >> 8) & 0xFF;
+ ackcmd[10] = (crc32value >> 16) & 0xFF;
+ ackcmd[11] = (crc32value >> 24) & 0xFF;
+ LOGD("to send ack and crc is:0x%x\n", crc32value);
+ sendDataOneway(COMM_DEV_SERIAL, ackcmd, 12, 0x00000000);
}
/* 函数å:GetCrc32
@@ -193,105 +193,105 @@ void CFbcCommunication::sendAckCmd(bool isOk)
* å‚数:InStr ---指å‘需è¦è®¡ç®—CRC32值的字符? * len ---为InStr的长帿 * 返回值为计算出æ¥çš„CRC32结果? */
unsigned int CFbcCommunication::GetCrc32(unsigned char *InStr, unsigned int len)
{
- //开始计算CRC32校验便
- unsigned int Crc = 0xffffffff;
- for (int i = 0; i < len; i++) {
- Crc = (Crc >> 8) ^ mCrc32Table[(Crc & 0xFF) ^ InStr[i]];
- }
+ //开始计算CRC32校验便
+ unsigned int Crc = 0xffffffff;
+ for(int i = 0; i < len; i++) {
+ Crc = (Crc >> 8) ^ mCrc32Table[(Crc & 0xFF) ^ InStr[i]];
+ }
- Crc ^= 0xFFFFFFFF;
- return Crc;
+ Crc ^= 0xFFFFFFFF;
+ return Crc;
}
unsigned int CFbcCommunication::Calcrc32(unsigned int crc, const unsigned char *ptr, unsigned int buf_len)
{
- static const unsigned int s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
- 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
- };
- unsigned int crcu32 = crc;
- if (buf_len < 0)
- return 0;
- if (!ptr) return 0;
- crcu32 = ~crcu32;
- while (buf_len--) {
- unsigned char b = *ptr++;
- crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)];
- crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)];
- }
- return ~crcu32;
+ static const unsigned int s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
+ 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
+ };
+ unsigned int crcu32 = crc;
+ if(buf_len < 0)
+ return 0;
+ if (!ptr) return 0;
+ crcu32 = ~crcu32;
+ while (buf_len--) {
+ unsigned char b = *ptr++;
+ crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)];
+ crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)];
+ }
+ return ~crcu32;
}
int CFbcCommunication::sendDataOneway(int devno, unsigned char *pData, int dataLen, int flags)
{
- int ret = -1;
- switch (devno) {
- case COMM_DEV_CEC: {
- ret = mHdmiCec.writeFile(pData, dataLen);
- break;
- }
- case COMM_DEV_SERIAL: {
- ret = mSerialPort.writeFile(pData, dataLen);
- break;
- }
- default:
- break;
- }
- return ret;
+ int ret = -1;
+ switch(devno) {
+ case COMM_DEV_CEC: {
+ ret = mHdmiCec.writeFile(pData, dataLen);
+ break;
+ }
+ case COMM_DEV_SERIAL: {
+ ret = mSerialPort.writeFile(pData, dataLen);
+ break;
+ }
+ default:
+ break;
+ }
+ return ret;
}
int CFbcCommunication::rmFromRequestList()
{
- return 0;
+ return 0;
}
int CFbcCommunication::addToRequestList()
{
- return 0;
+ return 0;
}
//timeout ms
int CFbcCommunication::sendDataAndWaitReply(int devno, int waitForDevno, int waitForCmd, unsigned char *pData, int dataLen, int timeout, unsigned char *pReData, int *reDataLen, int flags)
{
- int ret = sendDataOneway(devno, pData, dataLen, flags);
- if (ret < 0) return ret;
-
- mReplyList.WaitDevNo = waitForDevno;
- mReplyList.WaitCmd = waitForCmd;
- mReplyList.WaitTimeOut = timeout;
- mReplyList.reDataLen = 0;
- mReplyList.replyData = mpRevDataBuf;
- addToRequestList();
- LOGD("wait dev:%d, cmd:0x%x, timeout:%d", mReplyList.WaitDevNo, mReplyList.WaitCmd, mReplyList.WaitTimeOut);
-
- mLock.lock();
- ret = mReplyList.WaitReplyCondition.waitRelative(mLock, timeout);//wait reply
- LOGD("wait reply return = %d", __FUNCTION__, __LINE__, ret);
- mLock.unlock();
-
- //
- if (mReplyList.reDataLen > 0) { //data have come in
- *reDataLen = mReplyList.reDataLen;
- memcpy(pReData, mReplyList.replyData, mReplyList.reDataLen);
- mReplyList.reDataLen = 0;
- return *reDataLen;
- } else {
- //timeout,not to wait continue
- mReplyList.WaitDevNo = -1;
- mReplyList.WaitCmd = 0xff;
- return -1;//timeout but data not come.
- }
- return 0;
+ int ret = sendDataOneway(devno, pData, dataLen, flags);
+ if(ret < 0) return ret;
+
+ mReplyList.WaitDevNo = waitForDevno;
+ mReplyList.WaitCmd = waitForCmd;
+ mReplyList.WaitTimeOut = timeout;
+ mReplyList.reDataLen = 0;
+ mReplyList.replyData = mpRevDataBuf;
+ addToRequestList();
+ LOGD("wait dev:%d, cmd:0x%x, timeout:%d", mReplyList.WaitDevNo, mReplyList.WaitCmd, mReplyList.WaitTimeOut);
+
+ mLock.lock();
+ ret = mReplyList.WaitReplyCondition.waitRelative(mLock, timeout);//wait reply
+ LOGD("wait reply return = %d", __FUNCTION__, __LINE__, ret);
+ mLock.unlock();
+
+ //
+ if(mReplyList.reDataLen > 0) { //data have come in
+ *reDataLen = mReplyList.reDataLen;
+ memcpy(pReData, mReplyList.replyData, mReplyList.reDataLen);
+ mReplyList.reDataLen = 0;
+ return *reDataLen;
+ } else {
+ //timeout,not to wait continue
+ mReplyList.WaitDevNo = -1;
+ mReplyList.WaitCmd = 0xff;
+ return -1;//timeout but data not come.
+ }
+ return 0;
}
int CFbcCommunication::closeAll()
{
- mSerialPort.CloseDevice();
- return 0;
+ mSerialPort.CloseDevice();
+ return 0;
}
int CFbcCommunication::SetUpgradeFlag(int flag)
{
- mUpgradeFlag = flag;
- return 0;
+ mUpgradeFlag = flag;
+ return 0;
}
/*
@@ -299,1402 +299,1402 @@ int CFbcCommunication::SetUpgradeFlag(int flag)
*/
int CFbcCommunication::handleCmd(COMM_DEV_TYPE_E fromDev, int *pData, int *pRetValue)
{
- fbc_command_t cmd_type = VPU_CMD_NULL;
- int ret_value = 0;
+ fbc_command_t cmd_type = VPU_CMD_NULL;
+ int ret_value = 0;
- if ((fromDev != COMM_DEV_SERIAL && fromDev != COMM_DEV_CEC) || pData == NULL || pRetValue == NULL) {
- //LOGD("para error and returned!");
- return -1;
- }
+ if((fromDev != COMM_DEV_SERIAL && fromDev != COMM_DEV_CEC) || pData == NULL || pRetValue == NULL) {
+ //LOGD("para error and returned!");
+ return -1;
+ }
- cmd_type = (fbc_command_t)pData[0];
- LOGD("the cmd type is:0x%02x\n", cmd_type);
- switch (cmd_type) {
- case VPU_CMD_RED_GAIN_DEF:
- cfbc_Set_Gain_Red(fromDev, pData[2]);
- break;
+ cmd_type = (fbc_command_t)pData[0];
+ LOGD("the cmd type is:0x%02x\n", cmd_type);
+ switch(cmd_type) {
+ case VPU_CMD_RED_GAIN_DEF:
+ cfbc_Set_Gain_Red(fromDev, pData[2]);
+ break;
- case VPU_CMD_RED_GAIN_DEF|0x80:
- cfbc_Get_Gain_Red(fromDev, &ret_value);
- pRetValue[0] = VPU_CMD_RED_GAIN_DEF | 0x80;
- pRetValue[1] = 3;
- pRetValue[2] = ret_value;
- break;
+ case VPU_CMD_RED_GAIN_DEF|0x80:
+ cfbc_Get_Gain_Red(fromDev, &ret_value);
+ pRetValue[0] = VPU_CMD_RED_GAIN_DEF | 0x80;
+ pRetValue[1] = 3;
+ pRetValue[2] = ret_value;
+ break;
- case VPU_CMD_PATTEN_SEL:
- cfbc_Set_Test_Pattern(fromDev, pData[2]);
- break;
+ case VPU_CMD_PATTEN_SEL:
+ cfbc_Set_Test_Pattern(fromDev, pData[2]);
+ break;
- case VPU_CMD_BACKLIGHT_DEF:
- cfbc_Set_Backlight(fromDev, pData[2]);
- break;
+ case VPU_CMD_BACKLIGHT_DEF:
+ cfbc_Set_Backlight(fromDev, pData[2]);
+ break;
- case VPU_CMD_PATTEN_SEL|0x80:
- cfbc_Get_Test_Pattern(fromDev, &ret_value);
- pRetValue[0] = VPU_CMD_RED_GAIN_DEF | 0x80;
- pRetValue[1] = 3;
- pRetValue[2] = ret_value;
- break;
+ case VPU_CMD_PATTEN_SEL|0x80:
+ cfbc_Get_Test_Pattern(fromDev, &ret_value);
+ pRetValue[0] = VPU_CMD_RED_GAIN_DEF | 0x80;
+ pRetValue[1] = 3;
+ pRetValue[2] = ret_value;
+ break;
- default:
- return -1;
- }
+ default:
+ return -1;
+ }
- return 0;
+ return 0;
}
int CFbcCommunication::uartReadStream(unsigned char *retData, int rd_max_len, int timeout)
{
- int readLen = 0, bufIndex = 0, haveRead = 0;
- clock_t start_tm = clock();
+ int readLen = 0, bufIndex = 0, haveRead = 0;
+ clock_t start_tm = clock();
- do {
- readLen = mSerialPort.readFile(retData + bufIndex, rd_max_len - haveRead);
- haveRead += readLen;
- bufIndex += readLen;
- if (haveRead == rd_max_len) {
- return haveRead;
- }
+ do {
+ readLen = mSerialPort.readFile(retData + bufIndex, rd_max_len - haveRead);
+ haveRead += readLen;
+ bufIndex += readLen;
+ if(haveRead == rd_max_len) {
+ return haveRead;
+ }
- LOGD("readLen = %d, haveRead = %d\n", readLen, haveRead);
+ LOGD("readLen = %d, haveRead = %d\n", readLen, haveRead);
- if (((clock() - start_tm) / (CLOCKS_PER_SEC / 1000)) > timeout) {
- return haveRead;
- }
- } while (true);
+ if (((clock() - start_tm) / (CLOCKS_PER_SEC / 1000)) > timeout) {
+ return haveRead;
+ }
+ } while(true);
- return haveRead;
+ return haveRead;
}
int CFbcCommunication::uartReadData(unsigned char *retData, int *retLen)
{
- unsigned char tempBuf[512];
- int cmdLen = 0;
- int bufIndex = 0;
- int readLen = 0;
-
- if (retData == NULL) {
- LOGD("the retData is NULL\n");
- return 0;
- }
-
- //leader codes 2 byte
- memset(tempBuf, 0, sizeof(tempBuf));
- do {
- readLen = mSerialPort.readFile(tempBuf + 0, 1);
- if (tempBuf[0] == 0x5A) {
- bufIndex = 1;
- readLen = mSerialPort.readFile(tempBuf + 1, 1);
- if (tempBuf[1] == 0x5A) {
- bufIndex = 2;
- LOGD("leading code coming...\n");
- break;
- } else {
- continue;
- }
- } else {
- continue;
- }
- } while (true);
-
- //data len 2 byte
- int needRead = 2, haveRead = 0;
- do {
- readLen = mSerialPort.readFile(tempBuf + bufIndex, needRead - haveRead);
- haveRead += readLen;
- bufIndex += readLen;
- if (haveRead == needRead) {
- break;
- }
- } while (true);
-
- //little endian
- cmdLen = (tempBuf[3] << 8) + tempBuf[2];
- //cmd data cmdLen - 2 -2
- needRead = cmdLen - 4, haveRead = 0;
- LOGD("cmdLen is:%d\n", cmdLen);
-
- do {
- readLen = mSerialPort.readFile(tempBuf + bufIndex, needRead - haveRead);
- haveRead += readLen;
- bufIndex += readLen;
- if (readLen > 0) {
- LOGD("data readLen is:%d\n", readLen);
- }
- if (haveRead == needRead) {
- break;
- }
- } while (true);
-
- unsigned int crc = 0;
- if (cmdLen > 4) {
- crc = Calcrc32(0, tempBuf, cmdLen - 4);//not include crc 4byte
- }
- unsigned int bufCrc = tempBuf[cmdLen - 4] |
- tempBuf[cmdLen - 3] << 8 |
- tempBuf[cmdLen - 2] << 16 |
- tempBuf[cmdLen - 1] << 24;
- int idx = 0;
-
- if (crc == bufCrc) {
- memcpy(retData, tempBuf, cmdLen % 512);
- *retLen = cmdLen;
- return cmdLen;
- } else {
- return -1;
- }
+ unsigned char tempBuf[512];
+ int cmdLen = 0;
+ int bufIndex = 0;
+ int readLen = 0;
+
+ if(retData == NULL) {
+ LOGD("the retData is NULL\n");
+ return 0;
+ }
+
+ //leader codes 2 byte
+ memset(tempBuf, 0, sizeof(tempBuf));
+ do {
+ readLen = mSerialPort.readFile(tempBuf + 0, 1);
+ if(tempBuf[0] == 0x5A) {
+ bufIndex = 1;
+ readLen = mSerialPort.readFile(tempBuf + 1, 1);
+ if(tempBuf[1] == 0x5A) {
+ bufIndex = 2;
+ LOGD("leading code coming...\n");
+ break;
+ } else {
+ continue;
+ }
+ } else {
+ continue;
+ }
+ } while(true);
+
+ //data len 2 byte
+ int needRead = 2, haveRead = 0;
+ do {
+ readLen = mSerialPort.readFile(tempBuf + bufIndex, needRead - haveRead);
+ haveRead += readLen;
+ bufIndex += readLen;
+ if(haveRead == needRead) {
+ break;
+ }
+ } while(true);
+
+ //little endian
+ cmdLen = (tempBuf[3] << 8) + tempBuf[2];
+ //cmd data cmdLen - 2 -2
+ needRead = cmdLen - 4, haveRead = 0;
+ LOGD("cmdLen is:%d\n", cmdLen);
+
+ do {
+ readLen = mSerialPort.readFile(tempBuf + bufIndex, needRead - haveRead);
+ haveRead += readLen;
+ bufIndex += readLen;
+ if(readLen > 0) {
+ LOGD("data readLen is:%d\n", readLen);
+ }
+ if(haveRead == needRead) {
+ break;
+ }
+ } while(true);
+
+ unsigned int crc = 0;
+ if(cmdLen > 4) {
+ crc = Calcrc32(0, tempBuf, cmdLen - 4);//not include crc 4byte
+ }
+ unsigned int bufCrc = tempBuf[cmdLen - 4] |
+ tempBuf[cmdLen - 3] << 8 |
+ tempBuf[cmdLen - 2] << 16 |
+ tempBuf[cmdLen - 1] << 24;
+ int idx = 0;
+
+ if(crc == bufCrc) {
+ memcpy(retData, tempBuf, cmdLen % 512);
+ *retLen = cmdLen;
+ return cmdLen;
+ } else {
+ return -1;
+ }
}
int CFbcCommunication::processData(COMM_DEV_TYPE_E fromDev, unsigned char *pData, int dataLen)
{
- switch (fromDev) {
- case COMM_DEV_CEC: {
- if (mReplyList.WaitDevNo == fromDev && mReplyList.WaitCmd == pData[1]) {
- mReplyList.reDataLen = dataLen;
- memcpy(mReplyList.replyData, pData, dataLen);
- mReplyList.WaitReplyCondition.signal();
- } else if (0) {
- }
- break;
- }
- case COMM_DEV_SERIAL: {
- LOGD("to signal wait dataLen:0x%x, cmdId:0x%x\n", dataLen, pData[5]);
- if (mReplyList.WaitDevNo == fromDev && mReplyList.WaitCmd == pData[5]) {
- mReplyList.reDataLen = dataLen;
- memcpy(mReplyList.replyData, pData, dataLen);
- mReplyList.WaitReplyCondition.signal();
- } else {
- unsigned char cmd = pData[5];
- //just test
- const char *value;
- if (!mbSendKeyCode) {
- value = config_get_str("FBCUART", "fbc_key_event_handle", "null");
- if ( strcmp ( value, "true" ) == 0 )
- mbSendKeyCode = true;
- else mbSendKeyCode = false;
- }
+ switch(fromDev) {
+ case COMM_DEV_CEC: {
+ if(mReplyList.WaitDevNo == fromDev && mReplyList.WaitCmd == pData[1]) {
+ mReplyList.reDataLen = dataLen;
+ memcpy(mReplyList.replyData, pData, dataLen);
+ mReplyList.WaitReplyCondition.signal();
+ } else if(0) {
+ }
+ break;
+ }
+ case COMM_DEV_SERIAL: {
+ LOGD("to signal wait dataLen:0x%x, cmdId:0x%x\n", dataLen, pData[5]);
+ if(mReplyList.WaitDevNo == fromDev && mReplyList.WaitCmd == pData[5]) {
+ mReplyList.reDataLen = dataLen;
+ memcpy(mReplyList.replyData, pData, dataLen);
+ mReplyList.WaitReplyCondition.signal();
+ } else {
+ unsigned char cmd = pData[5];
+ //just test
+ const char *value;
+ if(!mbSendKeyCode) {
+ value = config_get_str("FBCUART", "fbc_key_event_handle", "null");
+ if ( strcmp ( value, "true" ) == 0 )
+ mbSendKeyCode = true;
+ else mbSendKeyCode = false;
+ }
#if(0)
- switch (cmd) {
- case 0x14:
- if (mbSendKeyCode ) {
- if (pData[6] >= 12 && pData[6] <= 16 ) { //left ---enter
- unsigned char key = pData[6] ;
- LOGD(" key:0x%x\n", key);
-
- //16 key 28 DPAD_CENTER
- //12 key 103 DPAD_UP
- //13 key 108 DPAD_DOWN
- //14 key 105 DPAD_LEFT
- //15 key 106 DPAD_RIGHT
- int checkKey = 0;
- if (key == 16)
- checkKey = 28 ;
- else if (key == 12)
- checkKey = 103 ;
- else if (key == 13)
- checkKey = 108 ;
- else if (key == 14)
- checkKey = 105 ;
- else if (key == 15)
- checkKey = 106 ;
- mTvInput.sendkeyCode(checkKey);
- }
- }
- break;
-
- default:
- break;
- }
+ switch (cmd) {
+ case 0x14:
+ if (mbSendKeyCode ) {
+ if(pData[6] >= 12 && pData[6] <= 16 ) { //left ---enter
+ unsigned char key = pData[6] ;
+ LOGD(" key:0x%x\n", key);
+
+ //16 key 28 DPAD_CENTER
+ //12 key 103 DPAD_UP
+ //13 key 108 DPAD_DOWN
+ //14 key 105 DPAD_LEFT
+ //15 key 106 DPAD_RIGHT
+ int checkKey = 0;
+ if(key == 16)
+ checkKey = 28 ;
+ else if(key == 12)
+ checkKey = 103 ;
+ else if(key == 13)
+ checkKey = 108 ;
+ else if(key == 14)
+ checkKey = 105 ;
+ else if(key == 15)
+ checkKey = 106 ;
+ mTvInput.sendkeyCode(checkKey);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
#else
- static long curTime, lastTime;
- int tmp;
- static int st = 0, st_key_up = 0;
- static int st_key_down = 0;
- static int st_key_left = 0;
- static int st_key_right = 0;
- static int checkKey = 0, last_checkKey = 0;
-
-
- switch (pData[6]) { //different key
- case 12: //DPAD_UP
- st_key_up = pData[5];
- if (st_key_up == 0x1D) { //CMD_INPUT_DOWN
- last_checkKey = checkKey;
- checkKey = 103;
- mTvInput.sendkeyCode(checkKey);
- } else if (st_key_up == 0x1E) { //CMD_INPUT_UP
- //checkKey = 103;
- //mTvInput.sendkeyCode_Up(checkKey);
- }
- break;
-
- case 13: //DPAD_DOWN
- st_key_down = pData[5];
- if (st_key_down == 0x1D) { //CMD_INPUT_DOWN
- last_checkKey = checkKey;
- checkKey = 108;
- mTvInput.sendkeyCode(checkKey);
- } else if (st_key_down == 0x1E) { //CMD_INPUT_UP
- //checkKey = 108;
- //mTvInput.sendkeyCode_Up(checkKey);
- }
- break;
-
- case 14: //DPAD_LEFT
- st_key_left = pData[5];
- if (st_key_left == 0x1D) { //CMD_INPUT_DOWN
- last_checkKey = checkKey;
- checkKey = 105;
- mTvInput.sendkeyCode(checkKey);
- } else if (st_key_left == 0x1E) { //CMD_INPUT_UP
- //checkKey = 105;
- //mTvInput.sendkeyCode_Up(checkKey);
- }
- break;
-
- case 15: //DPAD_RIGHT
- st_key_right = pData[5];
- if (st_key_right == 0x1D) { //CMD_INPUT_DOWN
- last_checkKey = checkKey;
- checkKey = 106;
- mTvInput.sendkeyCode(checkKey);
- } else if (st_key_right == 0x1E) { //CMD_INPUT_UP
- //checkKey = 106;
- //mTvInput.sendkeyCode_Up(checkKey);
- }
- break;
-
- case 16: //DPAD_ENTER
- st = pData[5];
- if (st == 0x1D) { //CMD_INPUT_DOWN
- last_checkKey = checkKey;
- checkKey = 28;
- lastTime = 0;
- mbFbcKeyEnterDown = 1;//true
- mFbcEnterKeyDownTime = mTvInput.getNowMs();
- mTvInput.sendKeyRepeatStart(158, 1200, 1500);//code 4, dis 3, repeatTime 2
- } else if (st == 0x1E) { //CMD_INPUT_UP
- checkKey = 28;
- if (mbFbcKeyEnterDown == 1) {
- mbFbcKeyEnterDown = 0;//false
- mTvInput.sendKeyRepeatStop();
- int disFbcEnterKeyDown = mTvInput.getNowMs() - mFbcEnterKeyDownTime;
- LOGD("disFbcEnterKeyDown = %d", disFbcEnterKeyDown);
- if (disFbcEnterKeyDown > 1200) { //long down
- } else {
- mTvInput.sendkeyCode(28);
- }
- }
- }
- break;
-
- case 20: //7key power
- st_key_right = pData[5];
- if (st_key_right == 0x1D) { //CMD_INPUT_DOWN
- last_checkKey = checkKey;
- checkKey = 116;
- //mTvInput.sendIRkeyCode_Down(checkKey);
- mTvInput.sendIRkeyCode(checkKey);
- } else if (st_key_right == 0x1E) { //CMD_INPUT_UP
- checkKey = 116;
- //mTvInput.sendIRkeyCode_Up(checkKey);
- }
- break;
-
- case 26: //7key source
- st_key_right = pData[5];
- if (st_key_right == 0x1D) { //CMD_INPUT_DOWN
- last_checkKey = checkKey;
- checkKey = 466;
- mTvInput.sendIRkeyCode_Down(checkKey);
- } else if (st_key_right == 0x1E) { //CMD_INPUT_UP
- checkKey = 466;
- mTvInput.sendIRkeyCode_Up(checkKey);
- }
- break;
-
- case 27: //7key menu
- st_key_right = pData[5];
- if (st_key_right == 0x1D) { //CMD_INPUT_DOWN
- last_checkKey = checkKey;
- checkKey = 139;
- mTvInput.sendkeyCode(checkKey);
- } else if (st_key_right == 0x1E) { //CMD_INPUT_UP
- //checkKey = 139;
- //mTvInput.sendkeyCode_Up(checkKey);
- }
- break;
-
- case 40: //7key vol -
- st_key_right = pData[5];
- if (st_key_right == 0x1D) { //CMD_INPUT_DOWN
- last_checkKey = checkKey;
- checkKey = 114;
- mTvInput.sendIRkeyCode_Down(checkKey);
- } else if (st_key_right == 0x1E) { //CMD_INPUT_UP
- checkKey = 114;
- mTvInput.sendIRkeyCode_Up(checkKey);
- }
- break;
-
- case 41: //7key vol +
- st_key_right = pData[5];
- if (st_key_right == 0x1D) { //CMD_INPUT_DOWN
- last_checkKey = checkKey;
- checkKey = 115;
- mTvInput.sendIRkeyCode_Down(checkKey);
- } else if (st_key_right == 0x1E) { //CMD_INPUT_UP
- checkKey = 115;
- mTvInput.sendIRkeyCode_Up(checkKey);
- }
- break;
- }
+ static long curTime, lastTime;
+ int tmp;
+ static int st = 0, st_key_up = 0;
+ static int st_key_down = 0;
+ static int st_key_left = 0;
+ static int st_key_right = 0;
+ static int checkKey = 0, last_checkKey = 0;
+
+
+ switch(pData[6]) { //different key
+ case 12: //DPAD_UP
+ st_key_up = pData[5];
+ if(st_key_up == 0x1D) { //CMD_INPUT_DOWN
+ last_checkKey = checkKey;
+ checkKey = 103;
+ mTvInput.sendkeyCode(checkKey);
+ } else if(st_key_up == 0x1E) { //CMD_INPUT_UP
+ //checkKey = 103;
+ //mTvInput.sendkeyCode_Up(checkKey);
+ }
+ break;
+
+ case 13: //DPAD_DOWN
+ st_key_down = pData[5];
+ if(st_key_down == 0x1D) { //CMD_INPUT_DOWN
+ last_checkKey = checkKey;
+ checkKey = 108;
+ mTvInput.sendkeyCode(checkKey);
+ } else if(st_key_down == 0x1E) { //CMD_INPUT_UP
+ //checkKey = 108;
+ //mTvInput.sendkeyCode_Up(checkKey);
+ }
+ break;
+
+ case 14: //DPAD_LEFT
+ st_key_left = pData[5];
+ if(st_key_left == 0x1D) { //CMD_INPUT_DOWN
+ last_checkKey = checkKey;
+ checkKey = 105;
+ mTvInput.sendkeyCode(checkKey);
+ } else if(st_key_left == 0x1E) { //CMD_INPUT_UP
+ //checkKey = 105;
+ //mTvInput.sendkeyCode_Up(checkKey);
+ }
+ break;
+
+ case 15: //DPAD_RIGHT
+ st_key_right = pData[5];
+ if(st_key_right == 0x1D) { //CMD_INPUT_DOWN
+ last_checkKey = checkKey;
+ checkKey = 106;
+ mTvInput.sendkeyCode(checkKey);
+ } else if(st_key_right == 0x1E) { //CMD_INPUT_UP
+ //checkKey = 106;
+ //mTvInput.sendkeyCode_Up(checkKey);
+ }
+ break;
+
+ case 16: //DPAD_ENTER
+ st = pData[5];
+ if(st == 0x1D) { //CMD_INPUT_DOWN
+ last_checkKey = checkKey;
+ checkKey = 28;
+ lastTime = 0;
+ mbFbcKeyEnterDown = 1;//true
+ mFbcEnterKeyDownTime = mTvInput.getNowMs();
+ mTvInput.sendKeyRepeatStart(158, 1200, 1500);//code 4, dis 3, repeatTime 2
+ } else if(st == 0x1E) { //CMD_INPUT_UP
+ checkKey = 28;
+ if(mbFbcKeyEnterDown == 1) {
+ mbFbcKeyEnterDown = 0;//false
+ mTvInput.sendKeyRepeatStop();
+ int disFbcEnterKeyDown = mTvInput.getNowMs() - mFbcEnterKeyDownTime;
+ LOGD("disFbcEnterKeyDown = %d", disFbcEnterKeyDown);
+ if(disFbcEnterKeyDown > 1200) { //long down
+ } else {
+ mTvInput.sendkeyCode(28);
+ }
+ }
+ }
+ break;
+
+ case 20: //7key power
+ st_key_right = pData[5];
+ if(st_key_right == 0x1D) { //CMD_INPUT_DOWN
+ last_checkKey = checkKey;
+ checkKey = 116;
+ //mTvInput.sendIRkeyCode_Down(checkKey);
+ mTvInput.sendIRkeyCode(checkKey);
+ } else if(st_key_right == 0x1E) { //CMD_INPUT_UP
+ checkKey = 116;
+ //mTvInput.sendIRkeyCode_Up(checkKey);
+ }
+ break;
+
+ case 26: //7key source
+ st_key_right = pData[5];
+ if(st_key_right == 0x1D) { //CMD_INPUT_DOWN
+ last_checkKey = checkKey;
+ checkKey = 466;
+ mTvInput.sendIRkeyCode_Down(checkKey);
+ } else if(st_key_right == 0x1E) { //CMD_INPUT_UP
+ checkKey = 466;
+ mTvInput.sendIRkeyCode_Up(checkKey);
+ }
+ break;
+
+ case 27: //7key menu
+ st_key_right = pData[5];
+ if(st_key_right == 0x1D) { //CMD_INPUT_DOWN
+ last_checkKey = checkKey;
+ checkKey = 139;
+ mTvInput.sendkeyCode(checkKey);
+ } else if(st_key_right == 0x1E) { //CMD_INPUT_UP
+ //checkKey = 139;
+ //mTvInput.sendkeyCode_Up(checkKey);
+ }
+ break;
+
+ case 40: //7key vol -
+ st_key_right = pData[5];
+ if(st_key_right == 0x1D) { //CMD_INPUT_DOWN
+ last_checkKey = checkKey;
+ checkKey = 114;
+ mTvInput.sendIRkeyCode_Down(checkKey);
+ } else if(st_key_right == 0x1E) { //CMD_INPUT_UP
+ checkKey = 114;
+ mTvInput.sendIRkeyCode_Up(checkKey);
+ }
+ break;
+
+ case 41: //7key vol +
+ st_key_right = pData[5];
+ if(st_key_right == 0x1D) { //CMD_INPUT_DOWN
+ last_checkKey = checkKey;
+ checkKey = 115;
+ mTvInput.sendIRkeyCode_Down(checkKey);
+ } else if(st_key_right == 0x1E) { //CMD_INPUT_UP
+ checkKey = 115;
+ mTvInput.sendIRkeyCode_Up(checkKey);
+ }
+ break;
+ }
#endif
- }
- break;
- }
- default: {
- break;
- }
- }
- return 0;
+ }
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+ return 0;
}
bool CFbcCommunication::threadLoop()
{
- unsigned char readFrameBuf[512];
- while (!exitPending()) { //requietexit() or requietexitWait() not call
- while (mUpgradeFlag == 1) {
- usleep(1000 * 1000);
- }
-
- int num = mEpoll.wait();
-
- while (mUpgradeFlag == 1) {
- usleep(1000 * 1000);
- }
-
- for (int i = 0; i < num; ++i) {
- int fd = (mEpoll)[i].data.fd;
- /**
- * EPOLLIN event
- */
- if ((mEpoll)[i].events & EPOLLIN) {
- if (fd == mHdmiCec.getFd()) { //ce-----------------------------c
- int bufIndex = 0;
- int needRead = 4;
- int haveRead = 0;
- int idx = 0, readLen = 0;
- do {
- readLen = mHdmiCec.readFile(readFrameBuf + bufIndex, needRead - haveRead);
- haveRead += readLen;
- bufIndex += readLen;
- //if(haveRead == needRead) break;
- } while (0);
-
- if (readLen > 0) {
- processData(COMM_DEV_CEC, readFrameBuf, readLen);
- } else {
- }
- } else if (fd == mSerialPort.getFd()) {
- //seria---------------------------l
- int cmdLen = 0, idx = 0;
- LOGD("serial data come");
- memset(readFrameBuf, 0, 512);
- int ret = uartReadData(readFrameBuf, &cmdLen);
-
- if (ret == -1) { //data error
- sendAckCmd(false);
- } else if (readFrameBuf[4] == 0x80) { //ack
- LOGD("is ack come");
- } else { //not ack
- sendAckCmd(true);
- processData(COMM_DEV_SERIAL, readFrameBuf, cmdLen);
- }
- }
- }
-
- /**
- * EPOLLOUT event
- */
- if ((mEpoll)[i].events & EPOLLOUT) {
-
- }
- }
- }
- //exit
- //return true, run again, return false,not run.
- LOGD("thread exited..........\n");
- return false;
+ unsigned char readFrameBuf[512];
+ while(!exitPending()) { //requietexit() or requietexitWait() not call
+ while(mUpgradeFlag == 1) {
+ usleep(1000 * 1000);
+ }
+
+ int num = mEpoll.wait();
+
+ while(mUpgradeFlag == 1) {
+ usleep(1000 * 1000);
+ }
+
+ for (int i = 0; i < num; ++i) {
+ int fd = (mEpoll)[i].data.fd;
+ /**
+ * EPOLLIN event
+ */
+ if ((mEpoll)[i].events & EPOLLIN) {
+ if(fd == mHdmiCec.getFd()) { //ce-----------------------------c
+ int bufIndex = 0;
+ int needRead = 4;
+ int haveRead = 0;
+ int idx = 0, readLen = 0;
+ do {
+ readLen = mHdmiCec.readFile(readFrameBuf + bufIndex, needRead - haveRead);
+ haveRead += readLen;
+ bufIndex += readLen;
+ //if(haveRead == needRead) break;
+ } while(0);
+
+ if(readLen > 0) {
+ processData(COMM_DEV_CEC, readFrameBuf, readLen);
+ } else {
+ }
+ } else if(fd == mSerialPort.getFd()) {
+ //seria---------------------------l
+ int cmdLen = 0, idx = 0;
+ LOGD("serial data come");
+ memset(readFrameBuf, 0, 512);
+ int ret = uartReadData(readFrameBuf, &cmdLen);
+
+ if(ret == -1) { //data error
+ sendAckCmd(false);
+ } else if(readFrameBuf[4] == 0x80) { //ack
+ LOGD("is ack come");
+ } else { //not ack
+ sendAckCmd(true);
+ processData(COMM_DEV_SERIAL, readFrameBuf, cmdLen);
+ }
+ }
+ }
+
+ /**
+ * EPOLLOUT event
+ */
+ if ((mEpoll)[i].events & EPOLLOUT) {
+
+ }
+ }
+ }
+ //exit
+ //return true, run again, return false,not run.
+ LOGD("thread exited..........\n");
+ return false;
}
int CFbcCommunication::Fbc_Set_Value_INT8(COMM_DEV_TYPE_E toDev, int cmd_type, int value)
{
- if (mUpgradeFlag == 1) {
- return 0;
- }
- LOGD("%s cmd =0x%x, value=%d", __FUNCTION__, cmd_type, value);
- if (toDev == COMM_DEV_CEC) {
- unsigned char cmd[16], rxbuf[16];
- int rxlen = 0, idx = 0;
- memset(cmd, 0, 16);
- memset(rxbuf, 0, 16);
- cmd[0] = 0x40;
- cmd[1] = cmd_type;
- cmd[2] = value;
- sendDataOneway(COMM_DEV_CEC, cmd, 4, 0);
- } else if (toDev == COMM_DEV_SERIAL) {
- int crc32value = 0;
- unsigned char write_buf[512];
- unsigned char rxbuf[512];
- int rxlen = 0, idx = 0;
-
- //leading code
- write_buf[0] = 0x5a;
- write_buf[1] = 0x5a;
- //package length from begin to end
- write_buf[2] = 0xb;
- write_buf[3] = 0x0;
- //Ack byte
- write_buf[4] = 0x0;
- //cmd ID
- write_buf[5] = cmd_type;
- //parameter
- write_buf[6] = value;
- //crc32 little Endian
- crc32value = Calcrc32(0, write_buf, 7);
- write_buf[7] = (crc32value >> 0) & 0xFF;
- write_buf[8] = (crc32value >> 8) & 0xFF;
- write_buf[9] = (crc32value >> 16) & 0xFF;
- write_buf[10] = (crc32value >> 24) & 0xFF;
- sendDataOneway(COMM_DEV_SERIAL, write_buf, write_buf[2], 0);
- }
- return 0;
+ if (mUpgradeFlag == 1) {
+ return 0;
+ }
+ LOGD("%s cmd =0x%x, value=%d", __FUNCTION__, cmd_type, value);
+ if(toDev == COMM_DEV_CEC) {
+ unsigned char cmd[16], rxbuf[16];
+ int rxlen = 0, idx = 0;
+ memset(cmd, 0, 16);
+ memset(rxbuf, 0, 16);
+ cmd[0] = 0x40;
+ cmd[1] = cmd_type;
+ cmd[2] = value;
+ sendDataOneway(COMM_DEV_CEC, cmd, 4, 0);
+ } else if(toDev == COMM_DEV_SERIAL) {
+ int crc32value = 0;
+ unsigned char write_buf[512];
+ unsigned char rxbuf[512];
+ int rxlen = 0, idx = 0;
+
+ //leading code
+ write_buf[0] = 0x5a;
+ write_buf[1] = 0x5a;
+ //package length from begin to end
+ write_buf[2] = 0xb;
+ write_buf[3] = 0x0;
+ //Ack byte
+ write_buf[4] = 0x0;
+ //cmd ID
+ write_buf[5] = cmd_type;
+ //parameter
+ write_buf[6] = value;
+ //crc32 little Endian
+ crc32value = Calcrc32(0, write_buf, 7);
+ write_buf[7] = (crc32value >> 0) & 0xFF;
+ write_buf[8] = (crc32value >> 8) & 0xFF;
+ write_buf[9] = (crc32value >> 16) & 0xFF;
+ write_buf[10] = (crc32value >> 24) & 0xFF;
+ sendDataOneway(COMM_DEV_SERIAL, write_buf, write_buf[2], 0);
+ }
+ return 0;
}
int CFbcCommunication::Fbc_Set_Value_INT32(COMM_DEV_TYPE_E toDev, int cmd_type, int value)
{
- if (mUpgradeFlag == 1) {
- return 0;
- }
-
- if (toDev == COMM_DEV_SERIAL) {
- int crc32value = 0;
- unsigned char write_buf[512];
- unsigned char rxbuf[512];
- int rxlen = 0, idx = 0;
-
- //leading code
- write_buf[0] = 0x5a;
- write_buf[1] = 0x5a;
- //package length from begin to end
- write_buf[2] = 14;
- write_buf[3] = 0x0;
- //Ack byte
- write_buf[4] = 0x0;
- //cmd ID
- write_buf[5] = cmd_type;
- //parameter
- write_buf[6] = (value >> 0) & 0xFF;
- write_buf[7] = (value >> 8) & 0xFF;
- write_buf[8] = (value >> 16) & 0xFF;
- write_buf[9] = (value >> 24) & 0xFF;
- //crc32 little Endian
- crc32value = Calcrc32(0, write_buf, 10);
- write_buf[10] = (crc32value >> 0) & 0xFF;
- write_buf[11] = (crc32value >> 8) & 0xFF;
- write_buf[12] = (crc32value >> 16) & 0xFF;
- write_buf[13] = (crc32value >> 24) & 0xFF;
-
- return sendDataOneway(COMM_DEV_SERIAL, write_buf, write_buf[2], 0);
- }
- return -1;
+ if (mUpgradeFlag == 1) {
+ return 0;
+ }
+
+ if(toDev == COMM_DEV_SERIAL) {
+ int crc32value = 0;
+ unsigned char write_buf[512];
+ unsigned char rxbuf[512];
+ int rxlen = 0, idx = 0;
+
+ //leading code
+ write_buf[0] = 0x5a;
+ write_buf[1] = 0x5a;
+ //package length from begin to end
+ write_buf[2] = 14;
+ write_buf[3] = 0x0;
+ //Ack byte
+ write_buf[4] = 0x0;
+ //cmd ID
+ write_buf[5] = cmd_type;
+ //parameter
+ write_buf[6] = (value >> 0) & 0xFF;
+ write_buf[7] = (value >> 8) & 0xFF;
+ write_buf[8] = (value >> 16) & 0xFF;
+ write_buf[9] = (value >> 24) & 0xFF;
+ //crc32 little Endian
+ crc32value = Calcrc32(0, write_buf, 10);
+ write_buf[10] = (crc32value >> 0) & 0xFF;
+ write_buf[11] = (crc32value >> 8) & 0xFF;
+ write_buf[12] = (crc32value >> 16) & 0xFF;
+ write_buf[13] = (crc32value >> 24) & 0xFF;
+
+ return sendDataOneway(COMM_DEV_SERIAL, write_buf, write_buf[2], 0);
+ }
+ return -1;
}
int CFbcCommunication::Fbc_Get_Value_INT8(COMM_DEV_TYPE_E fromDev, int cmd_type, int *value)
{
- if (mUpgradeFlag == 1) {
- return 0;
- }
-
- LOGD("%s cmd =0x%x", __FUNCTION__, cmd_type);
-
- if (fromDev == COMM_DEV_CEC) {
- unsigned char cmd[16], rxbuf[16];
- int rxlen = 0, idx = 0;
- memset(cmd, 0, 16);
- memset(rxbuf, 0, 16);
- cmd[0] = 0x40;
- cmd[1] = cmd_type;
- sendDataAndWaitReply(COMM_DEV_CEC, COMM_DEV_CEC, cmd[1], cmd, 4, 0, rxbuf, &rxlen, 0);
- *value = rxbuf[6];
- } else if (fromDev == COMM_DEV_SERIAL) {
- int crc32value = 0, idx = 0, rxlen = 0;
- unsigned char write_buf[16];
- unsigned char rxbuf[16];
- memset(rxbuf, 0, 16);
-
- //leading code
- idx = 0;
- write_buf[idx++] = 0x5a;
- write_buf[idx++] = 0x5a;
- //package length from begin to end
- write_buf[idx++] = 0xa;
- write_buf[idx++] = 0x0;
- //Ack byte
- write_buf[idx++] = 0x0;
- //cmd ID
- write_buf[idx++] = cmd_type;
- //crc32 little Endian
- crc32value = Calcrc32(0, write_buf, idx);
- write_buf[idx++] = (crc32value >> 0) & 0xFF;
- write_buf[idx++] = (crc32value >> 8) & 0xFF;
- write_buf[idx++] = (crc32value >> 16) & 0xFF;
- write_buf[idx++] = (crc32value >> 24) & 0xFF;
-
- sendDataAndWaitReply(COMM_DEV_SERIAL, COMM_DEV_SERIAL, write_buf[5], write_buf, write_buf[2], 2000, rxbuf, &rxlen, 0);
- *value = rxbuf[6];
- }
- return 0;
+ if (mUpgradeFlag == 1) {
+ return 0;
+ }
+
+ LOGD("%s cmd =0x%x", __FUNCTION__, cmd_type);
+
+ if(fromDev == COMM_DEV_CEC) {
+ unsigned char cmd[16], rxbuf[16];
+ int rxlen = 0, idx = 0;
+ memset(cmd, 0, 16);
+ memset(rxbuf, 0, 16);
+ cmd[0] = 0x40;
+ cmd[1] = cmd_type;
+ sendDataAndWaitReply(COMM_DEV_CEC, COMM_DEV_CEC, cmd[1], cmd, 4, 0, rxbuf, &rxlen, 0);
+ *value = rxbuf[6];
+ } else if(fromDev == COMM_DEV_SERIAL) {
+ int crc32value = 0, idx = 0, rxlen = 0;
+ unsigned char write_buf[16];
+ unsigned char rxbuf[16];
+ memset(rxbuf, 0, 16);
+
+ //leading code
+ idx = 0;
+ write_buf[idx++] = 0x5a;
+ write_buf[idx++] = 0x5a;
+ //package length from begin to end
+ write_buf[idx++] = 0xa;
+ write_buf[idx++] = 0x0;
+ //Ack byte
+ write_buf[idx++] = 0x0;
+ //cmd ID
+ write_buf[idx++] = cmd_type;
+ //crc32 little Endian
+ crc32value = Calcrc32(0, write_buf, idx);
+ write_buf[idx++] = (crc32value >> 0) & 0xFF;
+ write_buf[idx++] = (crc32value >> 8) & 0xFF;
+ write_buf[idx++] = (crc32value >> 16) & 0xFF;
+ write_buf[idx++] = (crc32value >> 24) & 0xFF;
+
+ sendDataAndWaitReply(COMM_DEV_SERIAL, COMM_DEV_SERIAL, write_buf[5], write_buf, write_buf[2], 2000, rxbuf, &rxlen, 0);
+ *value = rxbuf[6];
+ }
+ return 0;
}
int CFbcCommunication::Fbc_Set_BatchValue(COMM_DEV_TYPE_E toDev, unsigned char *cmd_buf, int count)
{
- if (mUpgradeFlag == 1) {
- return 0;
- }
-
- if ( 512 <= count) {
- return -1;
- }
-
- if (toDev == COMM_DEV_CEC) {
- unsigned char cmd[512], rxbuf[512];
- int rxlen = 0, idx = 0;
- memset(cmd, 0, 512);
- memset(rxbuf, 0, 512);
- cmd[0] = 0x40;
- for (idx = 0; idx < count; idx++) {
- cmd[idx + 1] = cmd_buf[idx];
- }
- sendDataOneway(COMM_DEV_CEC, cmd, count + 1, 0);
- } else if (toDev == COMM_DEV_SERIAL) {
- int crc32value = 0;
- unsigned char write_buf[512];
- unsigned char rxbuf[512];
- int rxlen = 0, idx = 0;
-
- //leading code
- write_buf[0] = 0x5a;
- write_buf[1] = 0x5a;
- //package length from begin to end
- write_buf[2] = (count + 9) & 0xFF;
- write_buf[3] = ((count + 9) >> 8) & 0xFF;
- //Ack byte : 0x80-> ack package;0x00->normal package;
- write_buf[4] = 0x00;
-
- for (idx = 0; idx < count; idx++) {
- write_buf[idx + 5] = cmd_buf[idx];
- }
- //crc32 little Endian
- crc32value = Calcrc32(0, write_buf, count + 5);
- write_buf[count + 5] = (crc32value >> 0) & 0xFF;
- write_buf[count + 6] = (crc32value >> 8) & 0xFF;
- write_buf[count + 7] = (crc32value >> 16) & 0xFF;
- write_buf[count + 8] = (crc32value >> 24) & 0xFF;
- sendDataOneway(COMM_DEV_SERIAL, write_buf, count + 9, 0);
- }
- return 0;
+ if (mUpgradeFlag == 1) {
+ return 0;
+ }
+
+ if( 512 <= count) {
+ return -1;
+ }
+
+ if(toDev == COMM_DEV_CEC) {
+ unsigned char cmd[512], rxbuf[512];
+ int rxlen = 0, idx = 0;
+ memset(cmd, 0, 512);
+ memset(rxbuf, 0, 512);
+ cmd[0] = 0x40;
+ for(idx = 0; idx < count; idx++) {
+ cmd[idx + 1] = cmd_buf[idx];
+ }
+ sendDataOneway(COMM_DEV_CEC, cmd, count + 1, 0);
+ } else if(toDev == COMM_DEV_SERIAL) {
+ int crc32value = 0;
+ unsigned char write_buf[512];
+ unsigned char rxbuf[512];
+ int rxlen = 0, idx = 0;
+
+ //leading code
+ write_buf[0] = 0x5a;
+ write_buf[1] = 0x5a;
+ //package length from begin to end
+ write_buf[2] = (count + 9) & 0xFF;
+ write_buf[3] = ((count + 9) >> 8) & 0xFF;
+ //Ack byte : 0x80-> ack package;0x00->normal package;
+ write_buf[4] = 0x00;
+
+ for(idx = 0; idx < count; idx++) {
+ write_buf[idx + 5] = cmd_buf[idx];
+ }
+ //crc32 little Endian
+ crc32value = Calcrc32(0, write_buf, count + 5);
+ write_buf[count + 5] = (crc32value >> 0) & 0xFF;
+ write_buf[count + 6] = (crc32value >> 8) & 0xFF;
+ write_buf[count + 7] = (crc32value >> 16) & 0xFF;
+ write_buf[count + 8] = (crc32value >> 24) & 0xFF;
+ sendDataOneway(COMM_DEV_SERIAL, write_buf, count + 9, 0);
+ }
+ return 0;
}
int CFbcCommunication::Fbc_Get_BatchValue(COMM_DEV_TYPE_E fromDev, unsigned char *cmd_buf, int count)
{
- if (mUpgradeFlag == 1) {
- return 0;
- }
-
- if ( 512 <= count) {
- return -1;
- }
- int ret = 0;
- // TODO: read value
- if (fromDev == COMM_DEV_CEC) {
- unsigned char cmd[512], rxbuf[512];
- int rxlen = 0, idx = 0;
- memset(cmd, 0, 512);
- memset(rxbuf, 0, 512);
- cmd[0] = 0x40;
- cmd[1] = cmd_buf[0];
- sendDataAndWaitReply(COMM_DEV_CEC, COMM_DEV_CEC, cmd[1], cmd, count + 1, 0, rxbuf, &rxlen, 0);
-
- if (rxlen > 2) {
- for (idx = 0; idx < rxlen; idx++) {
- cmd_buf[idx] = cmd[idx + 1];
- }
- }
- } else if (fromDev == COMM_DEV_SERIAL) {
- int crc32value = 0, idx = 0, rxlen = 0;
- unsigned char write_buf[512];
- unsigned char rxbuf[512];
- memset(write_buf, 0, 512);
- memset(rxbuf, 0, 512);
-
- //leading code
- write_buf[0] = 0x5a;
- write_buf[1] = 0x5a;
- //package length from begin to end
- write_buf[2] = (count + 9) & 0xFF;
- write_buf[3] = ((count + 9) >> 8) & 0xFF;
- //Ack byte
- write_buf[4] = 0x00;
- //cmd ID
- for (idx = 0; idx < count; idx++) {
- write_buf[idx + 5] = cmd_buf[idx];
- }
- //crc32 little Endian
- crc32value = Calcrc32(0, write_buf, count + 5);
- write_buf[count + 5] = (crc32value >> 0) & 0xFF;
- write_buf[count + 6] = (crc32value >> 8) & 0xFF;
- write_buf[count + 7] = (crc32value >> 16) & 0xFF;
- write_buf[count + 8] = (crc32value >> 24) & 0xFF;
- sendDataAndWaitReply(COMM_DEV_SERIAL, COMM_DEV_SERIAL, write_buf[5], write_buf, write_buf[2], 2000, rxbuf, &rxlen, 0);
-
- if (rxlen > 9) {
- for (idx = 0; idx < (rxlen - 9); idx++) {
- cmd_buf[idx] = rxbuf[idx + 5];
- }
- }
- ret = rxlen;
- }
-
- return ret;
+ if (mUpgradeFlag == 1) {
+ return 0;
+ }
+
+ if( 512 <= count) {
+ return -1;
+ }
+ int ret = 0;
+ // TODO: read value
+ if(fromDev == COMM_DEV_CEC) {
+ unsigned char cmd[512], rxbuf[512];
+ int rxlen = 0, idx = 0;
+ memset(cmd, 0, 512);
+ memset(rxbuf, 0, 512);
+ cmd[0] = 0x40;
+ cmd[1] = cmd_buf[0];
+ sendDataAndWaitReply(COMM_DEV_CEC, COMM_DEV_CEC, cmd[1], cmd, count + 1, 0, rxbuf, &rxlen, 0);
+
+ if(rxlen > 2) {
+ for(idx = 0; idx < rxlen; idx++) {
+ cmd_buf[idx] = cmd[idx + 1];
+ }
+ }
+ } else if (fromDev == COMM_DEV_SERIAL) {
+ int crc32value = 0, idx = 0, rxlen = 0;
+ unsigned char write_buf[512];
+ unsigned char rxbuf[512];
+ memset(write_buf, 0, 512);
+ memset(rxbuf, 0, 512);
+
+ //leading code
+ write_buf[0] = 0x5a;
+ write_buf[1] = 0x5a;
+ //package length from begin to end
+ write_buf[2] = (count + 9) & 0xFF;
+ write_buf[3] = ((count + 9) >> 8) & 0xFF;
+ //Ack byte
+ write_buf[4] = 0x00;
+ //cmd ID
+ for(idx = 0; idx < count; idx++) {
+ write_buf[idx + 5] = cmd_buf[idx];
+ }
+ //crc32 little Endian
+ crc32value = Calcrc32(0, write_buf, count + 5);
+ write_buf[count + 5] = (crc32value >> 0) & 0xFF;
+ write_buf[count + 6] = (crc32value >> 8) & 0xFF;
+ write_buf[count + 7] = (crc32value >> 16) & 0xFF;
+ write_buf[count + 8] = (crc32value >> 24) & 0xFF;
+ sendDataAndWaitReply(COMM_DEV_SERIAL, COMM_DEV_SERIAL, write_buf[5], write_buf, write_buf[2], 2000, rxbuf, &rxlen, 0);
+
+ if(rxlen > 9) {
+ for(idx = 0; idx < (rxlen - 9); idx++) {
+ cmd_buf[idx] = rxbuf[idx + 5];
+ }
+ }
+ ret = rxlen;
+ }
+
+ return ret;
}
int CFbcCommunication::cfbc_Set_Gain_Red(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_RED_GAIN_DEF, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_RED_GAIN_DEF, value);
}
int CFbcCommunication::cfbc_Get_Gain_Red(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_RED_GAIN_DEF | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_RED_GAIN_DEF | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Gain_Green(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_GREEN_GAIN_DEF, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_GREEN_GAIN_DEF, value);
}
int CFbcCommunication::cfbc_Get_Gain_Green(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_GREEN_GAIN_DEF | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_GREEN_GAIN_DEF | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Gain_Blue(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_BLUE_GAIN_DEF, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_BLUE_GAIN_DEF, value);
}
int CFbcCommunication::cfbc_Get_Gain_Blue(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_BLUE_GAIN_DEF | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_BLUE_GAIN_DEF | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Offset_Red(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_PRE_RED_OFFSET_DEF, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_PRE_RED_OFFSET_DEF, value);
}
int CFbcCommunication::cfbc_Get_Offset_Red(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_PRE_RED_OFFSET_DEF | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_PRE_RED_OFFSET_DEF | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Offset_Green(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_PRE_GREEN_OFFSET_DEF, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_PRE_GREEN_OFFSET_DEF, value);
}
int CFbcCommunication::cfbc_Get_Offset_Green(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_PRE_GREEN_OFFSET_DEF | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_PRE_GREEN_OFFSET_DEF | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Offset_Blue(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_PRE_BLUE_OFFSET_DEF, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_PRE_BLUE_OFFSET_DEF, value);
}
int CFbcCommunication::cfbc_Get_Offset_Blue(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_PRE_BLUE_OFFSET_DEF | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_PRE_BLUE_OFFSET_DEF | 0x80, value);
}
int CFbcCommunication::cfbc_Set_WB_Initial(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_WB, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_WB, value);
}
int CFbcCommunication::cfbc_Get_WB_Initial(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_WB | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_WB | 0x80, value);
}
int CFbcCommunication::cfbc_Set_ColorTemp_Mode(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_COLOR_TEMPERATURE_DEF, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_COLOR_TEMPERATURE_DEF, value);
}
int CFbcCommunication::cfbc_Get_ColorTemp_Mode(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_COLOR_TEMPERATURE_DEF | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_COLOR_TEMPERATURE_DEF | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Test_Pattern(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_PATTEN_SEL, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_PATTEN_SEL, value);
}
int CFbcCommunication::cfbc_Get_Test_Pattern(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_PATTEN_SEL | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_PATTEN_SEL | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Picture_Mode(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_PICTURE_MODE, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_PICTURE_MODE, value);
}
int CFbcCommunication::cfbc_Get_Picture_Mode(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_PICTURE_MODE | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_PICTURE_MODE | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Contrast(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_CONTRAST_DEF, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_CONTRAST_DEF, value);
}
int CFbcCommunication::cfbc_Get_Contrast(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_CONTRAST_DEF | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_CONTRAST_DEF | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Brightness(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_BRIGHTNESS_DEF, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_BRIGHTNESS_DEF, value);
}
int CFbcCommunication::cfbc_Get_Brightness(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_BRIGHTNESS_DEF | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_BRIGHTNESS_DEF | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Saturation(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_COLOR_DEF, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_COLOR_DEF, value);
}
int CFbcCommunication::cfbc_Get_Saturation(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_COLOR_DEF | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_COLOR_DEF | 0x80, value);
}
int CFbcCommunication::cfbc_Set_HueColorTint(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_HUE_DEF, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_HUE_DEF, value);
}
int CFbcCommunication::cfbc_Get_HueColorTint(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_HUE_DEF | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_HUE_DEF | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Backlight(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_BACKLIGHT_DEF, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_BACKLIGHT_DEF, value);
}
int CFbcCommunication::cfbc_Get_Backlight(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_BACKLIGHT_DEF | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_BACKLIGHT_DEF | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Source(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_SOURCE, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_SOURCE, value);
}
int CFbcCommunication::cfbc_Get_Source(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_SOURCE | 0x80, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_SOURCE | 0x80, value);
}
int CFbcCommunication::cfbc_Set_Mute(COMM_DEV_TYPE_E fromDev, int value)
{
- LOGD("cfbc_Set_Mute = %d", value);
- return Fbc_Set_Value_INT8(fromDev, AUDIO_CMD_SET_MUTE, value);
+ LOGD("cfbc_Set_Mute = %d", value);
+ return Fbc_Set_Value_INT8(fromDev, AUDIO_CMD_SET_MUTE, value);
}
int CFbcCommunication::cfbc_Set_FBC_Audio_Source(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, AUDIO_CMD_SET_SOURCE, value);
+ return Fbc_Set_Value_INT8(fromDev, AUDIO_CMD_SET_SOURCE, value);
}
int CFbcCommunication::cfbc_Get_Mute(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, AUDIO_CMD_GET_MUTE, value);
+ return Fbc_Get_Value_INT8(fromDev, AUDIO_CMD_GET_MUTE, value);
}
int CFbcCommunication::cfbc_Set_Volume_Bar(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, AUDIO_CMD_SET_VOLUME_BAR, value);
+ return Fbc_Set_Value_INT8(fromDev, AUDIO_CMD_SET_VOLUME_BAR, value);
}
int CFbcCommunication::cfbc_Get_Volume_Bar(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, AUDIO_CMD_GET_VOLUME_BAR, value);
+ return Fbc_Get_Value_INT8(fromDev, AUDIO_CMD_GET_VOLUME_BAR, value);
}
int CFbcCommunication::cfbc_Set_Balance(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, AUDIO_CMD_SET_BALANCE, value);
+ return Fbc_Set_Value_INT8(fromDev, AUDIO_CMD_SET_BALANCE, value);
}
int CFbcCommunication::cfbc_Get_Balance(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, AUDIO_CMD_GET_BALANCE, value);
+ return Fbc_Get_Value_INT8(fromDev, AUDIO_CMD_GET_BALANCE, value);
}
int CFbcCommunication::cfbc_Set_Master_Volume(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, AUDIO_CMD_SET_MASTER_VOLUME, value);
+ return Fbc_Set_Value_INT8(fromDev, AUDIO_CMD_SET_MASTER_VOLUME, value);
}
int CFbcCommunication::cfbc_Get_Master_Volume(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, AUDIO_CMD_GET_MASTER_VOLUME, value);
+ return Fbc_Get_Value_INT8(fromDev, AUDIO_CMD_GET_MASTER_VOLUME, value);
}
int CFbcCommunication::cfbc_Set_CM(COMM_DEV_TYPE_E fromDev, unsigned char value)
{
- unsigned char cmd[512];
- memset(cmd, 0, 512);
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
- cmd[0] = VPU_CMD_ENABLE;
- cmd[1] = VPU_MODULE_CM2;
- cmd[2] = value;//value:0~1
- return Fbc_Set_BatchValue(fromDev, cmd, 3);
+ cmd[0] = VPU_CMD_ENABLE;
+ cmd[1] = VPU_MODULE_CM2;
+ cmd[2] = value;//value:0~1
+ return Fbc_Set_BatchValue(fromDev, cmd, 3);
}
int CFbcCommunication::cfbc_Get_CM(COMM_DEV_TYPE_E fromDev, int *value)
{
- unsigned char cmd[512];
- memset(cmd, 0, 512);
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
- cmd[0] = VPU_CMD_ENABLE | 0x80;
- cmd[1] = VPU_MODULE_CM2;
+ cmd[0] = VPU_CMD_ENABLE | 0x80;
+ cmd[1] = VPU_MODULE_CM2;
- Fbc_Get_BatchValue(fromDev, cmd, 2);
- *value = cmd[2];
+ Fbc_Get_BatchValue(fromDev, cmd, 2);
+ *value = cmd[2];
- return 0;
+ return 0;
}
int CFbcCommunication::cfbc_Set_DNLP(COMM_DEV_TYPE_E fromDev, unsigned char value)
{
- unsigned char cmd[512];
- memset(cmd, 0, 512);
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
- cmd[0] = VPU_CMD_ENABLE;
- cmd[1] = VPU_MODULE_DNLP;
- cmd[2] = value;//value:0~1
+ cmd[0] = VPU_CMD_ENABLE;
+ cmd[1] = VPU_MODULE_DNLP;
+ cmd[2] = value;//value:0~1
- return Fbc_Set_BatchValue(fromDev, cmd, 3);
+ return Fbc_Set_BatchValue(fromDev, cmd, 3);
}
int CFbcCommunication::cfbc_Get_DNLP(COMM_DEV_TYPE_E fromDev, int *value)
{
- unsigned char cmd[512];
- memset(cmd, 0, 512);
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
- cmd[0] = VPU_CMD_ENABLE | 0x80;
- cmd[1] = VPU_MODULE_DNLP;
+ cmd[0] = VPU_CMD_ENABLE | 0x80;
+ cmd[1] = VPU_MODULE_DNLP;
- Fbc_Get_BatchValue(fromDev, cmd, 2);
- *value = cmd[2];
+ Fbc_Get_BatchValue(fromDev, cmd, 2);
+ *value = cmd[2];
- return 0;
+ return 0;
}
int CFbcCommunication::cfbc_Get_FBC_MAINCODE_Version(COMM_DEV_TYPE_E fromDev, char sw_ver[], char build_time[], char git_ver[], char git_branch[], char build_name[])
{
- int rx_len = 0, tmp_ind = 0;
- unsigned char cmd[512];
+ int rx_len = 0, tmp_ind = 0;
+ unsigned char cmd[512];
- if (sw_ver == NULL || build_time == NULL || git_ver == NULL || git_branch == NULL || build_name == NULL) {
- return -1;
- }
+ if (sw_ver == NULL || build_time == NULL || git_ver == NULL || git_branch == NULL || build_name == NULL) {
+ return -1;
+ }
- memset(cmd, 0, 512);
- cmd[0] = CMD_FBC_MAIN_CODE_VERSION;
- rx_len = Fbc_Get_BatchValue(fromDev, cmd, 1);
+ memset(cmd, 0, 512);
+ cmd[0] = CMD_FBC_MAIN_CODE_VERSION;
+ rx_len = Fbc_Get_BatchValue(fromDev, cmd, 1);
- sw_ver[0] = 0;
- build_time[0] = 0;
- git_ver[0] = 0;
- git_branch[0] = 0;
- build_name[0] = 0;
+ sw_ver[0] = 0;
+ build_time[0] = 0;
+ git_ver[0] = 0;
+ git_branch[0] = 0;
+ build_name[0] = 0;
- if (rx_len <= 0) {
- return -1;
- }
+ if (rx_len <= 0) {
+ return -1;
+ }
- if (cmd[0] != CMD_FBC_MAIN_CODE_VERSION || cmd[1] != 0x88 || cmd[2] != 0x99) {
- return -1;
- }
+ if (cmd[0] != CMD_FBC_MAIN_CODE_VERSION || cmd[1] != 0x88 || cmd[2] != 0x99) {
+ return -1;
+ }
- tmp_ind = 3;
+ tmp_ind = 3;
- strcpy(sw_ver, (char *)(cmd + tmp_ind));
- tmp_ind += strlen(sw_ver);
- tmp_ind += 1;
+ strcpy(sw_ver, (char *)(cmd + tmp_ind));
+ tmp_ind += strlen(sw_ver);
+ tmp_ind += 1;
- strcpy(build_time, (char *)(cmd + tmp_ind));
- tmp_ind += strlen(build_time);
- tmp_ind += 1;
+ strcpy(build_time, (char *)(cmd + tmp_ind));
+ tmp_ind += strlen(build_time);
+ tmp_ind += 1;
- strcpy(git_ver, (char *)(cmd + tmp_ind));
- tmp_ind += strlen(git_ver);
- tmp_ind += 1;
+ strcpy(git_ver, (char *)(cmd + tmp_ind));
+ tmp_ind += strlen(git_ver);
+ tmp_ind += 1;
- strcpy(git_branch, (char *)(cmd + tmp_ind));
- tmp_ind += strlen(git_branch);
- tmp_ind += 1;
+ strcpy(git_branch, (char *)(cmd + tmp_ind));
+ tmp_ind += strlen(git_branch);
+ tmp_ind += 1;
- strcpy(build_name, (char *)(cmd + tmp_ind));
- tmp_ind += strlen(build_name);
- tmp_ind += 1;
- LOGD("sw_ver=%s, buildt=%s, gitv=%s, gitb=%s,bn=%s", sw_ver, build_time, git_ver, git_branch, build_name);
- return 0;
+ strcpy(build_name, (char *)(cmd + tmp_ind));
+ tmp_ind += strlen(build_name);
+ tmp_ind += 1;
+ LOGD("sw_ver=%s, buildt=%s, gitv=%s, gitb=%s,bn=%s", sw_ver, build_time, git_ver, git_branch, build_name);
+ return 0;
}
int CFbcCommunication::cfbc_Set_FBC_Factory_SN(COMM_DEV_TYPE_E fromDev, const char *pSNval)
{
- unsigned char cmd[512];
- int len = strlen(pSNval);
+ unsigned char cmd[512];
+ int len = strlen(pSNval);
- memset(cmd, 0, 512);
+ memset(cmd, 0, 512);
- cmd[0] = CMD_SET_FACTORY_SN;
+ cmd[0] = CMD_SET_FACTORY_SN;
- memcpy(cmd + 1, pSNval, len);
+ memcpy(cmd + 1, pSNval, len);
- LOGD("cmd : %s\n", cmd);
+ LOGD("cmd : %s\n", cmd);
- return Fbc_Set_BatchValue(fromDev, cmd, len + 1);
+ return Fbc_Set_BatchValue(fromDev, cmd, len + 1);
}
int CFbcCommunication::cfbc_Get_FBC_Factory_SN(COMM_DEV_TYPE_E fromDev, char FactorySN[])
{
- int rx_len = 0;
- unsigned char cmd[512];
- memset(cmd, 0, 512);
- cmd[0] = CMD_GET_FACTORY_SN;
- rx_len = Fbc_Get_BatchValue(fromDev, cmd, 1);
- if (rx_len <= 0) {
- return -1;
- }
- strncpy(FactorySN, (char *)(cmd + 1), 17);
+ int rx_len = 0;
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
+ cmd[0] = CMD_GET_FACTORY_SN;
+ rx_len = Fbc_Get_BatchValue(fromDev, cmd, 1);
+ if (rx_len <= 0) {
+ return -1;
+ }
+ strncpy(FactorySN, (char *)(cmd + 1), 17);
- LOGD("panelModel=%s", FactorySN);
- return 0;
+ LOGD("panelModel=%s", FactorySN);
+ return 0;
}
int CFbcCommunication::cfbc_Get_FBC_Get_PANel_INFO(COMM_DEV_TYPE_E fromDev, char panel_model[])
{
- int rx_len = 0;
- unsigned char cmd[512];
- memset(cmd, 0, 512);
- cmd[0] = CMD_DEVICE_ID;
- rx_len = Fbc_Get_BatchValue(fromDev, cmd, 1);
- if (rx_len <= 0) {
- return -1;
- }
- strcpy(panel_model, (char *)(cmd + 1));
+ int rx_len = 0;
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
+ cmd[0] = CMD_DEVICE_ID;
+ rx_len = Fbc_Get_BatchValue(fromDev, cmd, 1);
+ if (rx_len <= 0) {
+ return -1;
+ }
+ strcpy(panel_model, (char *)(cmd + 1));
- LOGD("panelModel=%s", panel_model);
- return 0;
+ LOGD("panelModel=%s", panel_model);
+ return 0;
}
int CFbcCommunication::cfbc_Set_FBC_panel_power_switch(COMM_DEV_TYPE_E fromDev, int switch_val)
{
- unsigned char cmd[512];
+ unsigned char cmd[512];
- memset(cmd, 0, 512);
+ memset(cmd, 0, 512);
- cmd[0] = FBC_PANEL_POWER;
- cmd[1] = switch_val; //0 is fbc panel power off, 1 is panel power on.
+ cmd[0] = FBC_PANEL_POWER;
+ cmd[1] = switch_val; //0 is fbc panel power off, 1 is panel power on.
- return Fbc_Set_BatchValue(fromDev, cmd, 2);
+ return Fbc_Set_BatchValue(fromDev, cmd, 2);
}
int CFbcCommunication::cfbc_Set_FBC_suspend(COMM_DEV_TYPE_E fromDev, int switch_val)
{
- unsigned char cmd[512];
+ unsigned char cmd[512];
- memset(cmd, 0, 512);
+ memset(cmd, 0, 512);
- cmd[0] = FBC_SUSPEND_POWER;
- cmd[1] = switch_val; //0
+ cmd[0] = FBC_SUSPEND_POWER;
+ cmd[1] = switch_val; //0
- return Fbc_Set_BatchValue(fromDev, cmd, 2);
+ return Fbc_Set_BatchValue(fromDev, cmd, 2);
}
int CFbcCommunication::cfbc_Set_FBC_User_Setting_Default(COMM_DEV_TYPE_E fromDev, int param)
{
- unsigned char cmd[512];
+ unsigned char cmd[512];
- memset(cmd, 0, 512);
+ memset(cmd, 0, 512);
- cmd[0] = FBC_USER_SETTING_DEFAULT;
- cmd[1] = param; //0
+ cmd[0] = FBC_USER_SETTING_DEFAULT;
+ cmd[1] = param; //0
- return Fbc_Set_BatchValue(fromDev, cmd, 2);
+ return Fbc_Set_BatchValue(fromDev, cmd, 2);
}
int CFbcCommunication::cfbc_SendRebootToUpgradeCmd(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT32(fromDev, FBC_REBOOT_UPGRADE, value);
+ return Fbc_Set_Value_INT32(fromDev, FBC_REBOOT_UPGRADE, value);
}
int CFbcCommunication::cfbc_FBC_Send_Key_To_Fbc(COMM_DEV_TYPE_E fromDev, int keycode, int param)
{
- unsigned char cmd[512];
+ unsigned char cmd[512];
- memset(cmd, 0, 512);
+ memset(cmd, 0, 512);
- cmd[0] = CMD_ACTIVE_KEY;
- cmd[1] = keycode; //0
+ cmd[0] = CMD_ACTIVE_KEY;
+ cmd[1] = keycode; //0
- return Fbc_Set_BatchValue(fromDev, cmd, 2);
+ return Fbc_Set_BatchValue(fromDev, cmd, 2);
}
int CFbcCommunication::cfbc_Get_FBC_PANEL_REVERSE(COMM_DEV_TYPE_E fromDev, int *value)
{
- unsigned char cmd[512];
- memset(cmd, 0, 512);
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
- cmd[0] = CMD_PANEL_INFO;
- //0://panel reverse
- //1://panel output_mode
- //2://panel byte num
- cmd[1] = 0;
+ cmd[0] = CMD_PANEL_INFO;
+ //0://panel reverse
+ //1://panel output_mode
+ //2://panel byte num
+ cmd[1] = 0;
- Fbc_Get_BatchValue(fromDev, cmd, 2);
- //cmd[0] cmdid-PANEL-INFO
- //cmd[1] param[0] - panel reverse
- *value = cmd[2];
+ Fbc_Get_BatchValue(fromDev, cmd, 2);
+ //cmd[0] cmdid-PANEL-INFO
+ //cmd[1] param[0] - panel reverse
+ *value = cmd[2];
- return 0;
+ return 0;
}
int CFbcCommunication::cfbc_Get_FBC_PANEL_OUTPUT(COMM_DEV_TYPE_E fromDev, int *value)
{
- unsigned char cmd[512];
- memset(cmd, 0, 512);
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
- cmd[0] = CMD_PANEL_INFO;
- //0://panel reverse
- //1://panel output_mode
- //2://panel byte num
- cmd[1] = 1;
+ cmd[0] = CMD_PANEL_INFO;
+ //0://panel reverse
+ //1://panel output_mode
+ //2://panel byte num
+ cmd[1] = 1;
- Fbc_Get_BatchValue(fromDev, cmd, 2);
- //cmd[0] cmdid-PANEL-INFO
- //cmd[1] param[0] - panel reverse
- *value = cmd[2];
+ Fbc_Get_BatchValue(fromDev, cmd, 2);
+ //cmd[0] cmdid-PANEL-INFO
+ //cmd[1] param[0] - panel reverse
+ *value = cmd[2];
- return 0;
+ return 0;
}
int CFbcCommunication::cfbc_Set_FBC_project_id(COMM_DEV_TYPE_E fromDev, int prj_id)
{
- unsigned char cmd[512];
+ unsigned char cmd[512];
- memset(cmd, 0, 512);
+ memset(cmd, 0, 512);
- cmd[0] = CMD_SET_PROJECT_SELECT;
- cmd[1] = prj_id;
+ cmd[0] = CMD_SET_PROJECT_SELECT;
+ cmd[1] = prj_id;
- return Fbc_Set_BatchValue(fromDev, cmd, 2);
+ return Fbc_Set_BatchValue(fromDev, cmd, 2);
}
int CFbcCommunication::cfbc_Get_FBC_project_id(COMM_DEV_TYPE_E fromDev, int *prj_id)
{
- return Fbc_Get_Value_INT8(fromDev, CMD_GET_PROJECT_SELECT, prj_id);
+ return Fbc_Get_Value_INT8(fromDev, CMD_GET_PROJECT_SELECT, prj_id);
}
int CFbcCommunication::cfbc_Set_Gamma(COMM_DEV_TYPE_E fromDev, unsigned char value)
{
- unsigned char cmd[512];
- memset(cmd, 0, 512);
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
- cmd[0] = VPU_CMD_ENABLE;
- cmd[1] = VPU_MODULE_GAMMA;
- cmd[2] = value;//value:0~1
+ cmd[0] = VPU_CMD_ENABLE;
+ cmd[1] = VPU_MODULE_GAMMA;
+ cmd[2] = value;//value:0~1
- return Fbc_Set_BatchValue(fromDev, cmd, 3);
+ return Fbc_Set_BatchValue(fromDev, cmd, 3);
}
int CFbcCommunication::cfbc_Get_Gamma(COMM_DEV_TYPE_E fromDev, int *value)
{
- unsigned char cmd[512];
- memset(cmd, 0, 512);
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
- cmd[0] = VPU_CMD_ENABLE | 0x80;
- cmd[1] = VPU_MODULE_GAMMA;
+ cmd[0] = VPU_CMD_ENABLE | 0x80;
+ cmd[1] = VPU_MODULE_GAMMA;
- Fbc_Get_BatchValue(fromDev, cmd, 2);
- *value = cmd[2];
+ Fbc_Get_BatchValue(fromDev, cmd, 2);
+ *value = cmd[2];
- return 0;
+ return 0;
}
int CFbcCommunication::cfbc_Set_WhiteBalance_OnOff(COMM_DEV_TYPE_E fromDev, unsigned char value)
{
- unsigned char cmd[512];
- memset(cmd, 0, 512);
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
- cmd[0] = VPU_CMD_ENABLE;
- cmd[1] = VPU_MODULE_WB;
- cmd[2] = value;//value:0~1
+ cmd[0] = VPU_CMD_ENABLE;
+ cmd[1] = VPU_MODULE_WB;
+ cmd[2] = value;//value:0~1
- return Fbc_Set_BatchValue(fromDev, cmd, 3);
+ return Fbc_Set_BatchValue(fromDev, cmd, 3);
}
int CFbcCommunication::cfbc_Get_WhiteBalance_OnOff(COMM_DEV_TYPE_E fromDev, int *value)
{
- unsigned char cmd[512];
- memset(cmd, 0, 512);
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
- cmd[0] = VPU_CMD_ENABLE | 0x80;
- cmd[1] = VPU_MODULE_WB;
+ cmd[0] = VPU_CMD_ENABLE | 0x80;
+ cmd[1] = VPU_MODULE_WB;
- Fbc_Get_BatchValue(fromDev, cmd, 2);
- *value = cmd[2];
+ Fbc_Get_BatchValue(fromDev, cmd, 2);
+ *value = cmd[2];
- return 0;
+ return 0;
}
int CFbcCommunication::cfbc_Set_WB_Batch(COMM_DEV_TYPE_E fromDev, unsigned char mode, unsigned char r_gain, unsigned char g_gain, unsigned char b_gain, unsigned char r_offset, unsigned char g_offset, unsigned char b_offset)
{
- unsigned char cmd[512];
- memset(cmd, 0, 512);
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
- cmd[0] = VPU_CMD_WB_VALUE;
- cmd[1] = mode;
- cmd[2] = r_gain;
- cmd[3] = g_gain;
- cmd[4] = b_gain;
- cmd[5] = r_offset;
- cmd[6] = g_offset;
- cmd[7] = b_offset;
+ cmd[0] = VPU_CMD_WB_VALUE;
+ cmd[1] = mode;
+ cmd[2] = r_gain;
+ cmd[3] = g_gain;
+ cmd[4] = b_gain;
+ cmd[5] = r_offset;
+ cmd[6] = g_offset;
+ cmd[7] = b_offset;
- return Fbc_Set_BatchValue(fromDev, cmd, 8);
+ return Fbc_Set_BatchValue(fromDev, cmd, 8);
}
int CFbcCommunication::cfbc_WhiteBalance_GrayPattern_OnOff(COMM_DEV_TYPE_E fromDev, int onOff)
{
- int ret = -1;
- unsigned char cmd[512];
- memset(cmd, 0, 512);
- if (onOff == 0) { //On
- LOGD("Call vpp 63 2 1");
- cmd[0] = VPU_CMD_SRCIF;
- cmd[1] = 2;
- cmd[2] = 1;
- ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//close csc0
- if (ret == 0) {
- LOGD("Call vpp 9 9 0");
- cmd[0] = VPU_CMD_ENABLE;
- cmd[1] = 9;
- cmd[2] = 0;
- ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//close csc1
- if (ret == 0) {
- LOGD("Call vpp 9 10 0");
- cmd[0] = VPU_CMD_ENABLE;
- cmd[1] = 10;
- cmd[2] = 0;
- ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//close dnlp
- if (ret == 0) {
- LOGD("Call vpp 9 8 0");
- cmd[0] = VPU_CMD_ENABLE;
- cmd[1] = 8;
- cmd[2] = 0;
- ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//close cm
- }
- }
- }
-
- } else { //Off
- LOGD("Call vpp 63 2 2");
- cmd[0] = VPU_CMD_SRCIF;
- cmd[1] = 2;
- cmd[2] = 2;
- ret = Fbc_Set_BatchValue(fromDev, cmd, 3);
- if (ret == 0) {
- LOGD("Call vpp 9 9 1");
- cmd[0] = VPU_CMD_ENABLE;
- cmd[1] = 9;
- cmd[2] = 1;
- ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//open csc1
- if (ret == 0) {
- LOGD("Call vpp 9 10 1");
- cmd[0] = VPU_CMD_ENABLE;
- cmd[1] = 10;
- cmd[2] = 1;
- ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//open dnlp
- if (ret == 0) {
- LOGD("Call vpp 9 8 1");
- cmd[0] = VPU_CMD_ENABLE;
- cmd[1] = 8;
- cmd[2] = 1;
- ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//open cm
- }
- }
- }
- }
- return ret;
+ int ret = -1;
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
+ if (onOff == 0) { //On
+ LOGD("Call vpp 63 2 1");
+ cmd[0] = VPU_CMD_SRCIF;
+ cmd[1] = 2;
+ cmd[2] = 1;
+ ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//close csc0
+ if (ret == 0) {
+ LOGD("Call vpp 9 9 0");
+ cmd[0] = VPU_CMD_ENABLE;
+ cmd[1] = 9;
+ cmd[2] = 0;
+ ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//close csc1
+ if (ret == 0) {
+ LOGD("Call vpp 9 10 0");
+ cmd[0] = VPU_CMD_ENABLE;
+ cmd[1] = 10;
+ cmd[2] = 0;
+ ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//close dnlp
+ if (ret == 0) {
+ LOGD("Call vpp 9 8 0");
+ cmd[0] = VPU_CMD_ENABLE;
+ cmd[1] = 8;
+ cmd[2] = 0;
+ ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//close cm
+ }
+ }
+ }
+
+ } else { //Off
+ LOGD("Call vpp 63 2 2");
+ cmd[0] = VPU_CMD_SRCIF;
+ cmd[1] = 2;
+ cmd[2] = 2;
+ ret = Fbc_Set_BatchValue(fromDev, cmd, 3);
+ if (ret == 0) {
+ LOGD("Call vpp 9 9 1");
+ cmd[0] = VPU_CMD_ENABLE;
+ cmd[1] = 9;
+ cmd[2] = 1;
+ ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//open csc1
+ if (ret == 0) {
+ LOGD("Call vpp 9 10 1");
+ cmd[0] = VPU_CMD_ENABLE;
+ cmd[1] = 10;
+ cmd[2] = 1;
+ ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//open dnlp
+ if (ret == 0) {
+ LOGD("Call vpp 9 8 1");
+ cmd[0] = VPU_CMD_ENABLE;
+ cmd[1] = 8;
+ cmd[2] = 1;
+ ret = Fbc_Set_BatchValue(fromDev, cmd, 3);//open cm
+ }
+ }
+ }
+ }
+ return ret;
}
int CFbcCommunication::cfbc_WhiteBalance_SetGrayPattern(COMM_DEV_TYPE_E fromDev, unsigned char value)
{
- int ret = -1;
- unsigned char cmd[512];
- memset(cmd, 0, 512);
- cmd[0] = VPU_CMD_GRAY_PATTERN;
- cmd[1] = value;
- cmd[2] = value;
- cmd[3] = value;
- ret = Fbc_Set_BatchValue(fromDev, cmd, 4);
- return ret;
+ int ret = -1;
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
+ cmd[0] = VPU_CMD_GRAY_PATTERN;
+ cmd[1] = value;
+ cmd[2] = value;
+ cmd[3] = value;
+ ret = Fbc_Set_BatchValue(fromDev, cmd, 4);
+ return ret;
}
int CFbcCommunication::cfbc_Get_WB_Batch(COMM_DEV_TYPE_E fromDev, unsigned char mode, unsigned char *r_gain, unsigned char *g_gain, unsigned char *b_gain, unsigned char *r_offset, unsigned char *g_offset, unsigned char *b_offset)
{
- unsigned char cmd[512];
- memset(cmd, 0, 512);
+ unsigned char cmd[512];
+ memset(cmd, 0, 512);
- cmd[0] = VPU_CMD_WB_VALUE | 0x80;
- cmd[1] = mode;
+ cmd[0] = VPU_CMD_WB_VALUE | 0x80;
+ cmd[1] = mode;
- Fbc_Get_BatchValue(fromDev, cmd, 2);
- //*mode = cmd[1];
- *r_gain = cmd[2];
- *g_gain = cmd[3];
- *b_gain = cmd[4];
- *r_offset = cmd[5];
- *g_offset = cmd[6];
- *b_offset = cmd[7];
+ Fbc_Get_BatchValue(fromDev, cmd, 2);
+ //*mode = cmd[1];
+ *r_gain = cmd[2];
+ *g_gain = cmd[3];
+ *b_gain = cmd[4];
+ *r_offset = cmd[5];
+ *g_offset = cmd[6];
+ *b_offset = cmd[7];
- return 0;
+ return 0;
}
int CFbcCommunication::cfbc_Set_backlight_onoff(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_BACKLIGHT_EN, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_BACKLIGHT_EN, value);
}
int CFbcCommunication::cfbc_Get_backlight_onoff(COMM_DEV_TYPE_E fromDev, int *value)
{
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_BACKLIGHT_EN, value);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_BACKLIGHT_EN, value);
}
int CFbcCommunication::cfbc_Set_LVDS_SSG_Set(COMM_DEV_TYPE_E fromDev, int value)
{
- return Fbc_Set_Value_INT8(fromDev, CMD_LVDS_SSG_SET, value);
+ return Fbc_Set_Value_INT8(fromDev, CMD_LVDS_SSG_SET, value);
}
int CFbcCommunication::cfbc_Set_AUTO_ELEC_MODE(COMM_DEV_TYPE_E fromDev, int value)
{
- LOGD("%s cmd =0x%x, value=%d~~~~~~~~", __FUNCTION__, VPU_CMD_SET_ELEC_MODE, value);
- return Fbc_Set_Value_INT8(fromDev, VPU_CMD_SET_ELEC_MODE, value);
+ LOGD("%s cmd =0x%x, value=%d~~~~~~~~", __FUNCTION__, VPU_CMD_SET_ELEC_MODE, value);
+ return Fbc_Set_Value_INT8(fromDev, VPU_CMD_SET_ELEC_MODE, value);
}
int CFbcCommunication::cfbc_Get_AUTO_ELEC_MODE(COMM_DEV_TYPE_E fromDev, int *value)
{
- LOGD("%s cmd =0x%x~~~~~~~~~", __FUNCTION__, VPU_CMD_SET_ELEC_MODE);
- return Fbc_Get_Value_INT8(fromDev, VPU_CMD_GET_ELEC_MODE, value);
+ LOGD("%s cmd =0x%x~~~~~~~~~", __FUNCTION__, VPU_CMD_SET_ELEC_MODE);
+ return Fbc_Get_Value_INT8(fromDev, VPU_CMD_GET_ELEC_MODE, value);
}
int CFbcCommunication::cfbc_Set_Thermal_state(COMM_DEV_TYPE_E fromDev, int value)
{
- LOGD("%s cmd =0x%x, data%d ~~~~~~~~~\n", __FUNCTION__, CMD_HDMI_STAT, value);
- //return Fbc_Set_Value_INT8(fromDev, CMD_HDMI_STAT, value);
- return Fbc_Set_Value_INT32(fromDev, CMD_HDMI_STAT, value);
+ LOGD("%s cmd =0x%x, data%d ~~~~~~~~~\n", __FUNCTION__, CMD_HDMI_STAT, value);
+ //return Fbc_Set_Value_INT8(fromDev, CMD_HDMI_STAT, value);
+ return Fbc_Set_Value_INT32(fromDev, CMD_HDMI_STAT, value);
}
int CFbcCommunication::cfbc_Set_LightSensor_N310(COMM_DEV_TYPE_E fromDev, int value)
{
- // return Fbc_Set_Value_INT8(fromDev, CMD_LIGHT_SENSOR, value);
- return 0;
+ // return Fbc_Set_Value_INT8(fromDev, CMD_LIGHT_SENSOR, value);
+ return 0;
}
int CFbcCommunication::cfbc_Get_LightSensor_N310(COMM_DEV_TYPE_E fromDev, int *value)
{
- // return Fbc_Get_Value_INT8(fromDev, CMD_LIGHT_SENSOR|0x80, value);
- return 0;
+ // return Fbc_Get_Value_INT8(fromDev, CMD_LIGHT_SENSOR|0x80, value);
+ return 0;
}
int CFbcCommunication::cfbc_Set_Dream_Panel_N310(COMM_DEV_TYPE_E fromDev, int value)
{
- // return Fbc_Set_Value_INT8(fromDev, CMD_DREAM_PANEL, value);
- return 0;
+ // return Fbc_Set_Value_INT8(fromDev, CMD_DREAM_PANEL, value);
+ return 0;
}
int CFbcCommunication::cfbc_Get_Dream_Panel_N310(COMM_DEV_TYPE_E fromDev, int *value)
{
- // return Fbc_Get_Value_INT8(fromDev, CMD_DREAM_PANEL|0x80, value);
- return 0;
+ // return Fbc_Get_Value_INT8(fromDev, CMD_DREAM_PANEL|0x80, value);
+ return 0;
}
int CFbcCommunication::cfbc_Set_MULT_PQ_N310(COMM_DEV_TYPE_E fromDev, int value)
{
- // return Fbc_Set_Value_INT8(fromDev, CMD_MUTI_PQ, value);
- return 0;
+ // return Fbc_Set_Value_INT8(fromDev, CMD_MUTI_PQ, value);
+ return 0;
}
int CFbcCommunication::cfbc_Get_MULT_PQ_N310(COMM_DEV_TYPE_E fromDev, int *value)
{
- // return Fbc_Get_Value_INT8(fromDev, CMD_MUTI_PQ|0x80, value);
- return 0;
+ // return Fbc_Get_Value_INT8(fromDev, CMD_MUTI_PQ|0x80, value);
+ return 0;
}
int CFbcCommunication::cfbc_Set_MEMC_N310(COMM_DEV_TYPE_E fromDev, int value)
{
- // return Fbc_Set_Value_INT8(fromDev, CMD_MEMC, value);
- return 0;
+ // return Fbc_Set_Value_INT8(fromDev, CMD_MEMC, value);
+ return 0;
}
int CFbcCommunication::cfbc_Get_MEMC_N310(COMM_DEV_TYPE_E fromDev, int *value)
{
- // return Fbc_Get_Value_INT8(fromDev, CMD_MEMC|0x80, value);
- return 0;
+ // return Fbc_Get_Value_INT8(fromDev, CMD_MEMC|0x80, value);
+ return 0;
}
void CFbcCommunication::CFbcMsgQueue::handleMessage ( CMessage &msg )
{
- LOGD ( "%s, CFbcCommunication::CFbcMsgQueue::handleMessage type = %d", __FUNCTION__, msg.mType );
+ LOGD ( "%s, CFbcCommunication::CFbcMsgQueue::handleMessage type = %d", __FUNCTION__, msg.mType );
- switch ( msg.mType ) {
- case TV_MSG_COMMON:
- break;
+ switch ( msg.mType ) {
+ case TV_MSG_COMMON:
+ break;
- case TV_MSG_SEND_KEY: {
- LOGD("CFbcMsgQueue msg type = %d", msg.mType);
- //CFbcCommunication *pFbc = ( CFbcCommunication * ) ( msg.mpData );
- //pFbc->mTvInput.sendkeyCode_Down(4);
- //pFbc->mbDownHaveSend = 1;//true
- break;
- }
+ case TV_MSG_SEND_KEY: {
+ LOGD("CFbcMsgQueue msg type = %d", msg.mType);
+ //CFbcCommunication *pFbc = ( CFbcCommunication * ) ( msg.mpData );
+ //pFbc->mTvInput.sendkeyCode_Down(4);
+ //pFbc->mbDownHaveSend = 1;//true
+ break;
+ }
- default:
- break;
- }
+ default:
+ break;
+ }
}
diff --git a/tvapi/libtv/tv/CFbcCommunication.h b/tvapi/libtv/tv/CFbcCommunication.h
index 40f5d3b..b3db768 100644
--- a/tvapi/libtv/tv/CFbcCommunication.h
+++ b/tvapi/libtv/tv/CFbcCommunication.h
@@ -8,373 +8,371 @@
#include "tvutils//CTvInput.h"
#include "../tvutils/CMsgQueue.h"
typedef enum COMM_DEV_TYPE_NO {
- COMM_DEV_CEC = 0,
- COMM_DEV_SERIAL = 1,
+ COMM_DEV_CEC = 0,
+ COMM_DEV_SERIAL = 1,
} COMM_DEV_TYPE_E;
typedef enum vpu_modules_e {
- VPU_MODULE_NULL = 0,
- VPU_MODULE_VPU, //vpu uint
- VPU_MODULE_TIMGEN,
- VPU_MODULE_PATGEN,
- VPU_MODULE_GAMMA,
- VPU_MODULE_WB, //WhiteBalance
- VPU_MODULE_BC, //Brightness&Contrast
- VPU_MODULE_BCRGB, //RGB Brightness&Contrast
- VPU_MODULE_CM2,
- VPU_MODULE_CSC1,
- VPU_MODULE_DNLP,
- VPU_MODULE_CSC0,
- VPU_MODULE_OSD,
- VPU_MODULE_BLEND,
- VPU_MODULE_DEMURE, //15
- VPU_MODULE_OUTPUT, //LVDS/VX1 output
- VPU_MODULE_OSDDEC, //OSD decoder
- VPU_MODULE_MAX,
+ VPU_MODULE_NULL = 0,
+ VPU_MODULE_VPU, //vpu uint
+ VPU_MODULE_TIMGEN,
+ VPU_MODULE_PATGEN,
+ VPU_MODULE_GAMMA,
+ VPU_MODULE_WB, //WhiteBalance
+ VPU_MODULE_BC, //Brightness&Contrast
+ VPU_MODULE_BCRGB, //RGB Brightness&Contrast
+ VPU_MODULE_CM2,
+ VPU_MODULE_CSC1,
+ VPU_MODULE_DNLP,
+ VPU_MODULE_CSC0,
+ VPU_MODULE_OSD,
+ VPU_MODULE_BLEND,
+ VPU_MODULE_DEMURE, //15
+ VPU_MODULE_OUTPUT, //LVDS/VX1 output
+ VPU_MODULE_OSDDEC, //OSD decoder
+ VPU_MODULE_MAX,
} vpu_modules_t;
typedef enum fbc_command_e {
- VPU_CMD_NULL = 0,
- FBC_REBOOT_UPGRADE = 0x1,
- FBC_USER_SETTING_DEFAULT = 0x02,
- FBC_USER_SETTING_SET,
- FBC_GET_HDCP_KEY,
- FBC_PANEL_POWER,
- FBC_SUSPEND_POWER,
- //TOP CMD num:6
- VPU_CMD_INIT = 0x8, //parameter num 0
- VPU_CMD_ENABLE, //parameter num 1;bit0~6:module;bit7:enable(1) or disable(0)
- VPU_CMD_BYPASS, //parameter num 1;bit0~6:module;bit7:bypass(1) or not(0)
- VPU_CMD_OUTPUT_MUX, //parameter num 1;1:lvds;2:vx1;3:minilvds
- VPU_CMD_TIMING, //parameter num 1;reference vpu_timing_t
- VPU_CMD_SOURCE, //parameter num 1;reference vpu_source_t
- VPU_CMD_GAMMA_MOD, //parameter num 1;reference vpu_gammamod_t
- VPU_CMD_D2D3 = 0xf, //0xf:D2D3
- //
+ VPU_CMD_NULL = 0,
+ FBC_REBOOT_UPGRADE = 0x1,
+ FBC_USER_SETTING_DEFAULT = 0x02,
+ FBC_USER_SETTING_SET,
+ FBC_GET_HDCP_KEY,
+ FBC_PANEL_POWER,
+ FBC_SUSPEND_POWER,
+ //TOP CMD num:6
+ VPU_CMD_INIT = 0x8, //parameter num 0
+ VPU_CMD_ENABLE, //parameter num 1;bit0~6:module;bit7:enable(1) or disable(0)
+ VPU_CMD_BYPASS, //parameter num 1;bit0~6:module;bit7:bypass(1) or not(0)
+ VPU_CMD_OUTPUT_MUX, //parameter num 1;1:lvds;2:vx1;3:minilvds
+ VPU_CMD_TIMING, //parameter num 1;reference vpu_timing_t
+ VPU_CMD_SOURCE, //parameter num 1;reference vpu_source_t
+ VPU_CMD_GAMMA_MOD, //parameter num 1;reference vpu_gammamod_t
+ VPU_CMD_D2D3 = 0xf, //0xf:D2D3
+ //
- CMD_BRIDGE_SW_VER = 0x10,
- CMD_DEVICE_ID,
- CMD_CLIENT_TYPE,
- CMD_DEVICE_NUM,
- CMD_ACTIVE_KEY,
- CMD_ACTIVE_STATUS,
- CMD_PANEL_INFO,
- CMD_LVDS_SSG_SET,
+ CMD_BRIDGE_SW_VER = 0x10,
+ CMD_DEVICE_ID,
+ CMD_CLIENT_TYPE,
+ CMD_DEVICE_NUM,
+ CMD_ACTIVE_KEY,
+ CMD_ACTIVE_STATUS,
+ CMD_PANEL_INFO,
+ CMD_LVDS_SSG_SET,
- CMD_DBG_REGISTER_ACCESS = 0x18,
- CMD_DBG_MEMORY_ACCESS,
- CMD_DBG_SPI_ACCESS,
- CMD_DBG_VPU_MEMORY_ACCESS,
- CMD_DBG_MEMORY_TRANSFER,
- CMD_INPUT_DOWN,
- CMD_INPUT_UP,
- CMD_FBC_MAIN_CODE_VERSION,
+ CMD_DBG_REGISTER_ACCESS = 0x18,
+ CMD_DBG_MEMORY_ACCESS,
+ CMD_DBG_SPI_ACCESS,
+ CMD_DBG_VPU_MEMORY_ACCESS,
+ CMD_DBG_MEMORY_TRANSFER,
+ CMD_INPUT_DOWN,
+ CMD_INPUT_UP,
+ CMD_FBC_MAIN_CODE_VERSION,
- //0x1f reserved
- //PQ+debug CMD num:32
- VPU_CMD_NATURE_LIGHT_EN = 0x20, //0 or 1;on or off ????
- VPU_CMD_BACKLIGHT_EN, //0 or 1;on or off
- VPU_CMD_BRIGHTNESS, //parameter num 2;parameter1:distinguish two modules;parameter2:ui value
- VPU_CMD_CONTRAST, //parameter num 2;parameter1:distinguish two modules;parameter2:ui value
- VPU_CMD_BACKLIGHT, //parameter num 1;
- VPU_CMD_RES1, //reserved
- VPU_CMD_SATURATION, //parameter num 1;
- VPU_CMD_DYNAMIC_CONTRAST, //0 or 1;??
- VPU_CMD_PICTURE_MODE, //??
- VPU_CMD_PATTERN_EN, //0 or 1;on or off
- VPU_CMD_PATTEN_SEL, //0x2a parameter num 1;PATTEN SELECT
- VPU_CMD_RES2,
- VPU_CMD_RES3,
- VPU_CMD_RES4,
- VPU_CMD_RES5,
- VPU_CMD_USER_GAMMA = 0x2f,
- //0x30:sound_mode_def
- VPU_CMD_COLOR_TEMPERATURE_DEF = 0x31, //def:factory setting
- VPU_CMD_BRIGHTNESS_DEF,
- VPU_CMD_CONTRAST_DEF,
- VPU_CMD_COLOR_DEF,
- VPU_CMD_HUE_DEF,
- VPU_CMD_BACKLIGHT_DEF,
- VPU_CMD_RES7,
- VPU_CMD_AUTO_LUMA_EN = 0x38,//0 or 1;on or off;appoint to backlight?
- VPU_CMD_HIST, //parameter num 0;read hist info
- VPU_CMD_BLEND, //parameter num ?;
- VPU_CMD_DEMURA, //parameter num ?;
- VPU_CMD_CSC, //parameter num ?;
- VPU_CMD_CM2, //parameter num 1;index
- VPU_CMD_GAMMA, //parameter num 1;index
- VPU_CMD_SRCIF,
- //WB CMD num:10
- VPU_CMD_RED_GAIN_DEF = 0x40,
- VPU_CMD_GREEN_GAIN_DEF,
- VPU_CMD_BLUE_GAIN_DEF,
- VPU_CMD_PRE_RED_OFFSET_DEF,
- VPU_CMD_PRE_GREEN_OFFSET_DEF,
- VPU_CMD_PRE_BLUE_OFFSET_DEF,
- VPU_CMD_POST_RED_OFFSET_DEF,
- VPU_CMD_POST_GREEN_OFFSET_DEF,
- VPU_CMD_POST_BLUE_OFFSET_DEF,
- VPU_CMD_RES9,
- VPU_CMD_WB = 0x4a,
- //DNLP PARM
- VPU_CMD_DNLP_PARM,
- VPU_CMD_WB_VALUE,
- VPU_CMD_GRAY_PATTERN,
- VPU_CMD_BURN,
- CMD_HDMI_STAT,
- VPU_CMD_READ = 0x80,
- //VPU_CMD_HUE_ADJUST, //parameter num 1;
- //VPU_CMD_WB, //parameter num 3;one parameter include two items so that six items can all be included
- VPU_CMD_MAX = 50,//temp define 50 //
+ //0x1f reserved
+ //PQ+debug CMD num:32
+ VPU_CMD_NATURE_LIGHT_EN = 0x20, //0 or 1;on or off ????
+ VPU_CMD_BACKLIGHT_EN, //0 or 1;on or off
+ VPU_CMD_BRIGHTNESS, //parameter num 2;parameter1:distinguish two modules;parameter2:ui value
+ VPU_CMD_CONTRAST, //parameter num 2;parameter1:distinguish two modules;parameter2:ui value
+ VPU_CMD_BACKLIGHT, //parameter num 1;
+ VPU_CMD_RES1, //reserved
+ VPU_CMD_SATURATION, //parameter num 1;
+ VPU_CMD_DYNAMIC_CONTRAST, //0 or 1;??
+ VPU_CMD_PICTURE_MODE, //??
+ VPU_CMD_PATTERN_EN, //0 or 1;on or off
+ VPU_CMD_PATTEN_SEL, //0x2a parameter num 1;PATTEN SELECT
+ VPU_CMD_RES2,
+ VPU_CMD_RES3,
+ VPU_CMD_RES4,
+ VPU_CMD_RES5,
+ VPU_CMD_USER_GAMMA = 0x2f,
+ //0x30:sound_mode_def
+ VPU_CMD_COLOR_TEMPERATURE_DEF = 0x31, //def:factory setting
+ VPU_CMD_BRIGHTNESS_DEF,
+ VPU_CMD_CONTRAST_DEF,
+ VPU_CMD_COLOR_DEF,
+ VPU_CMD_HUE_DEF,
+ VPU_CMD_BACKLIGHT_DEF,
+ VPU_CMD_RES7,
+ VPU_CMD_AUTO_LUMA_EN = 0x38,//0 or 1;on or off;appoint to backlight?
+ VPU_CMD_HIST, //parameter num 0;read hist info
+ VPU_CMD_BLEND, //parameter num ?;
+ VPU_CMD_DEMURA, //parameter num ?;
+ VPU_CMD_CSC, //parameter num ?;
+ VPU_CMD_CM2, //parameter num 1;index
+ VPU_CMD_GAMMA, //parameter num 1;index
+ VPU_CMD_SRCIF,
+ //WB CMD num:10
+ VPU_CMD_RED_GAIN_DEF = 0x40,
+ VPU_CMD_GREEN_GAIN_DEF,
+ VPU_CMD_BLUE_GAIN_DEF,
+ VPU_CMD_PRE_RED_OFFSET_DEF,
+ VPU_CMD_PRE_GREEN_OFFSET_DEF,
+ VPU_CMD_PRE_BLUE_OFFSET_DEF,
+ VPU_CMD_POST_RED_OFFSET_DEF,
+ VPU_CMD_POST_GREEN_OFFSET_DEF,
+ VPU_CMD_POST_BLUE_OFFSET_DEF,
+ VPU_CMD_RES9,
+ VPU_CMD_WB = 0x4a,
+ //DNLP PARM
+ VPU_CMD_DNLP_PARM,
+ VPU_CMD_WB_VALUE,
+ VPU_CMD_GRAY_PATTERN,
+ VPU_CMD_BURN,
+ CMD_HDMI_STAT,
+ VPU_CMD_READ = 0x80,
+ //VPU_CMD_HUE_ADJUST, //parameter num 1;
+ //VPU_CMD_WB, //parameter num 3;one parameter include two items so that six items can all be included
+ VPU_CMD_MAX = 50,//temp define 50 //
- //audio cmd
- AUDIO_CMD_SET_SOURCE = 0x50,
- AUDIO_CMD_SET_MASTER_VOLUME,
- AUDIO_CMD_SET_CHANNEL_VOLUME,
- AUDIO_CMD_SET_SUBCHANNEL_VOLUME,
- AUDIO_CMD_SET_MASTER_VOLUME_GAIN,
- AUDIO_CMD_SET_CHANNEL_VOLUME_INDEX,
- AUDIO_CMD_SET_VOLUME_BAR,
- AUDIO_CMD_SET_MUTE,
- AUDIO_CMD_SET_EQ_MODE,
- AUDIO_CMD_SET_BALANCE,
- AUDIO_CMD_GET_SOURCE,
- AUDIO_CMD_GET_MASTER_VOLUME,
- AUDIO_CMD_GET_CHANNEL_VOLUME,
- AUDIO_CMD_GET_SUBCHANNEL_VOLUME,
- AUDIO_CMD_GET_MASTER_VOLUME_GAIN,
- AUDIO_CMD_GET_CHANNEL_VOLUME_INDEX,
- AUDIO_CMD_GET_VOLUME_BAR,
- AUDIO_CMD_GET_MUTE,
- AUDIO_CMD_GET_EQ_MODE,
- AUDIO_CMD_GET_BALANCE,
+ //audio cmd
+ AUDIO_CMD_SET_SOURCE = 0x50,
+ AUDIO_CMD_SET_MASTER_VOLUME,
+ AUDIO_CMD_SET_CHANNEL_VOLUME,
+ AUDIO_CMD_SET_SUBCHANNEL_VOLUME,
+ AUDIO_CMD_SET_MASTER_VOLUME_GAIN,
+ AUDIO_CMD_SET_CHANNEL_VOLUME_INDEX,
+ AUDIO_CMD_SET_VOLUME_BAR,
+ AUDIO_CMD_SET_MUTE,
+ AUDIO_CMD_SET_EQ_MODE,
+ AUDIO_CMD_SET_BALANCE,
+ AUDIO_CMD_GET_SOURCE,
+ AUDIO_CMD_GET_MASTER_VOLUME,
+ AUDIO_CMD_GET_CHANNEL_VOLUME,
+ AUDIO_CMD_GET_SUBCHANNEL_VOLUME,
+ AUDIO_CMD_GET_MASTER_VOLUME_GAIN,
+ AUDIO_CMD_GET_CHANNEL_VOLUME_INDEX,
+ AUDIO_CMD_GET_VOLUME_BAR,
+ AUDIO_CMD_GET_MUTE,
+ AUDIO_CMD_GET_EQ_MODE,
+ AUDIO_CMD_GET_BALANCE,
- VPU_CMD_SET_ELEC_MODE = 0x64,
- VPU_CMD_GET_ELEC_MODE,
+ VPU_CMD_SET_ELEC_MODE = 0x64,
+ VPU_CMD_GET_ELEC_MODE,
- CMD_SET_FACTORY_SN = 0x66,
- CMD_GET_FACTORY_SN,
- CMD_COMMUNICATION_TEST,
- CMD_CLR_SETTINGS_DEFAULT,
+ CMD_SET_FACTORY_SN = 0x66,
+ CMD_GET_FACTORY_SN,
+ CMD_COMMUNICATION_TEST,
+ CMD_CLR_SETTINGS_DEFAULT,
- CMD_HDMI_REG = 0x70,
- CMD_SET_PROJECT_SELECT = 0x71,
- CMD_GET_PROJECT_SELECT = 0x72,
+ CMD_HDMI_REG = 0x70,
+ CMD_SET_PROJECT_SELECT = 0x71,
+ CMD_GET_PROJECT_SELECT = 0x72,
} fbc_command_t;
typedef struct REQUEST_REPLY_CMD {
- CCondition WaitReplyCondition;
- int WaitDevNo;
- int WaitCmd;
- int WaitTimeOut;
- unsigned char *replyData;
- int reDataLen;
+ CCondition WaitReplyCondition;
+ int WaitDevNo;
+ int WaitCmd;
+ int WaitTimeOut;
+ unsigned char *replyData;
+ int reDataLen;
} REQUEST_REPLY_S;
-class CFbcCommunication: public CThread
-{
+class CFbcCommunication: public CThread {
public:
- static const unsigned char CEC_CMD_WIFI = 0x01;
- static const unsigned char CEC_CMD_ETHERNET = 0x02;
- static const unsigned char CEC_CMD_3D_TIMING = 0x03;
- static const unsigned char CEC_CMD_PANEL_REVERSE = 0x04;
- static const unsigned char CEC_CMD_VPU_INIT = 0x08;
- static const unsigned char CEC_CMD_VPU_ENABLE = 0x09;
- static const unsigned char CEC_CMD_VPU_BYPASS = 0x0a;
- static const unsigned char CEC_CMD_VPU_OUTPUT_MUX = 0x0b;
- static const unsigned char CEC_CMD_VPU_TIMING = 0x0c;
- static const unsigned char CEC_CMD_VPU_SOURCE = 0x0d;
- static const unsigned char CEC_CMD_BRIDGE_SW_VER = 0x10;
- static const unsigned char CEC_CMD_DEVICE_ID = 0x11;
- static const unsigned char CEC_CMD_CLIENT_TYPE = 0x12;
- static const unsigned char CEC_CMD_DEVICE_NUM = 0x13;
- static const unsigned char CEC_CMD_ACTIVE_KEY = 0x14;
- static const unsigned char CEC_CMD_ACTIVE_STATUS = 0x15;
+ static const unsigned char CEC_CMD_WIFI = 0x01;
+ static const unsigned char CEC_CMD_ETHERNET = 0x02;
+ static const unsigned char CEC_CMD_3D_TIMING = 0x03;
+ static const unsigned char CEC_CMD_PANEL_REVERSE = 0x04;
+ static const unsigned char CEC_CMD_VPU_INIT = 0x08;
+ static const unsigned char CEC_CMD_VPU_ENABLE = 0x09;
+ static const unsigned char CEC_CMD_VPU_BYPASS = 0x0a;
+ static const unsigned char CEC_CMD_VPU_OUTPUT_MUX = 0x0b;
+ static const unsigned char CEC_CMD_VPU_TIMING = 0x0c;
+ static const unsigned char CEC_CMD_VPU_SOURCE = 0x0d;
+ static const unsigned char CEC_CMD_BRIDGE_SW_VER = 0x10;
+ static const unsigned char CEC_CMD_DEVICE_ID = 0x11;
+ static const unsigned char CEC_CMD_CLIENT_TYPE = 0x12;
+ static const unsigned char CEC_CMD_DEVICE_NUM = 0x13;
+ static const unsigned char CEC_CMD_ACTIVE_KEY = 0x14;
+ static const unsigned char CEC_CMD_ACTIVE_STATUS = 0x15;
- static const unsigned char CEC_CMD_DBG_REGISTER_ACCESS = 0x18;
- static const unsigned char CEC_CMD_DBG_MEMORY_ACCESS = 0x19;
- static const unsigned char CEC_CMD_DBG_SPI_ACCESS = 0x1a;
- static const unsigned char CEC_CMD_DBG_VPU_MEMORY_ACCESS = 0x1b;
- static const unsigned char CEC_CMD_DBG_MEMORY_TRANSFER = 0x1c;
- static const unsigned char CEC_CMD_INPUT_KEY_DOWN = 0x1d;
- static const unsigned char CEC_CMD_INPUT_KEY_UP = 0x1e;
- static const unsigned char CEC_CMD_REBOOT = 0x1f;
- static const unsigned char CEC_CMD_NATURE_LIGHT_ONOFF = 0x20;
- static const unsigned char CEC_CMD_USR_BACKLIGHT_ONOFF = 0x21;
- static const unsigned char CEC_CMD_USR_BRIGHTNESS = 0x22;
- static const unsigned char CEC_CMD_USR_CONTRAST = 0x23;
- static const unsigned char CEC_CMD_USR_BACKLIGHT = 0x24;
- static const unsigned char CEC_CMD_USR_SATURATION = 0x26;
- static const unsigned char CEC_CMD_USR_DYNAMIC_CONTRAST = 0x27;
- static const unsigned char CEC_CMD_USR_PICTURE_MODE = 0x28;
- static const unsigned char CEC_CMD_TEST_PATTERN_ONOFF = 0x29;
- static const unsigned char CEC_CMD_TEST_PATTERN_SELECT = 0x2a;
- static const unsigned char CEC_CMD_USER_GAMMA = 0x2f;
- static const unsigned char CEC_CMD_DEF_SOUND_MODE = 0x30;
- static const unsigned char CEC_CMD_DEF_COLOR_TEMPERATURE = 0x31;
- static const unsigned char CEC_CMD_DEF_BRIGHTNESS = 0x32;
- static const unsigned char CEC_CMD_DEF_CONTRAST = 0x33;
- static const unsigned char CEC_CMD_DEF_COLOR = 0x34;
- static const unsigned char CEC_CMD_DEF_BACKLIGHT = 0x36;
- static const unsigned char CEC_CMD_AUTO_LUMA_ONOFF = 0x38;
- static const unsigned char CEC_CMD_HISTOGRAM = 0x39;
- static const unsigned char CEC_CMD_BLEND = 0x3a;
- static const unsigned char CEC_CMD_DEMULA = 0x3b;
- static const unsigned char CEC_CMD_COLOR_SPACE_CONVERSION = 0x3c;
- static const unsigned char CEC_CMD_CM2 = 0x3d;
- static const unsigned char CEC_CMD_DEF_RED_GAIN = 0x40;
- static const unsigned char CEC_CMD_DEF_GREEN_GAIN = 0x41;
- static const unsigned char CEC_CMD_DEF_BLUE_GAIN = 0x42;
- static const unsigned char CEC_CMD_DEF_RED_OFFSET = 0x43;
- static const unsigned char CEC_CMD_DEF_GREEN_OFFSET = 0x44;
- static const unsigned char CEC_CMD_DEF_BLUE_OFFSET = 0x45;
- static const unsigned char CEC_CMD_DEF_PRE_RED_OFFSET = 0x46;
- static const unsigned char CEC_CMD_DEF_PRE_GREEN_OFFSET = 0x47;
- static const unsigned char CEC_CMD_DEF_PRE_BLUE_OFFSET = 0x48;
- static const unsigned char CEC_CMD_WHITEBALANCE = 0x4a;
- static const unsigned char CEC_CMD_SET_SW_VERSION = 0x57;
- static const unsigned char CEC_CMD_3D = 0xd0;
+ static const unsigned char CEC_CMD_DBG_REGISTER_ACCESS = 0x18;
+ static const unsigned char CEC_CMD_DBG_MEMORY_ACCESS = 0x19;
+ static const unsigned char CEC_CMD_DBG_SPI_ACCESS = 0x1a;
+ static const unsigned char CEC_CMD_DBG_VPU_MEMORY_ACCESS = 0x1b;
+ static const unsigned char CEC_CMD_DBG_MEMORY_TRANSFER = 0x1c;
+ static const unsigned char CEC_CMD_INPUT_KEY_DOWN = 0x1d;
+ static const unsigned char CEC_CMD_INPUT_KEY_UP = 0x1e;
+ static const unsigned char CEC_CMD_REBOOT = 0x1f;
+ static const unsigned char CEC_CMD_NATURE_LIGHT_ONOFF = 0x20;
+ static const unsigned char CEC_CMD_USR_BACKLIGHT_ONOFF = 0x21;
+ static const unsigned char CEC_CMD_USR_BRIGHTNESS = 0x22;
+ static const unsigned char CEC_CMD_USR_CONTRAST = 0x23;
+ static const unsigned char CEC_CMD_USR_BACKLIGHT = 0x24;
+ static const unsigned char CEC_CMD_USR_SATURATION = 0x26;
+ static const unsigned char CEC_CMD_USR_DYNAMIC_CONTRAST = 0x27;
+ static const unsigned char CEC_CMD_USR_PICTURE_MODE = 0x28;
+ static const unsigned char CEC_CMD_TEST_PATTERN_ONOFF = 0x29;
+ static const unsigned char CEC_CMD_TEST_PATTERN_SELECT = 0x2a;
+ static const unsigned char CEC_CMD_USER_GAMMA = 0x2f;
+ static const unsigned char CEC_CMD_DEF_SOUND_MODE = 0x30;
+ static const unsigned char CEC_CMD_DEF_COLOR_TEMPERATURE = 0x31;
+ static const unsigned char CEC_CMD_DEF_BRIGHTNESS = 0x32;
+ static const unsigned char CEC_CMD_DEF_CONTRAST = 0x33;
+ static const unsigned char CEC_CMD_DEF_COLOR = 0x34;
+ static const unsigned char CEC_CMD_DEF_BACKLIGHT = 0x36;
+ static const unsigned char CEC_CMD_AUTO_LUMA_ONOFF = 0x38;
+ static const unsigned char CEC_CMD_HISTOGRAM = 0x39;
+ static const unsigned char CEC_CMD_BLEND = 0x3a;
+ static const unsigned char CEC_CMD_DEMULA = 0x3b;
+ static const unsigned char CEC_CMD_COLOR_SPACE_CONVERSION = 0x3c;
+ static const unsigned char CEC_CMD_CM2 = 0x3d;
+ static const unsigned char CEC_CMD_DEF_RED_GAIN = 0x40;
+ static const unsigned char CEC_CMD_DEF_GREEN_GAIN = 0x41;
+ static const unsigned char CEC_CMD_DEF_BLUE_GAIN = 0x42;
+ static const unsigned char CEC_CMD_DEF_RED_OFFSET = 0x43;
+ static const unsigned char CEC_CMD_DEF_GREEN_OFFSET = 0x44;
+ static const unsigned char CEC_CMD_DEF_BLUE_OFFSET = 0x45;
+ static const unsigned char CEC_CMD_DEF_PRE_RED_OFFSET = 0x46;
+ static const unsigned char CEC_CMD_DEF_PRE_GREEN_OFFSET = 0x47;
+ static const unsigned char CEC_CMD_DEF_PRE_BLUE_OFFSET = 0x48;
+ static const unsigned char CEC_CMD_WHITEBALANCE = 0x4a;
+ static const unsigned char CEC_CMD_SET_SW_VERSION = 0x57;
+ static const unsigned char CEC_CMD_3D = 0xd0;
- friend class CTvMsgQueue;
- class CFbcMsgQueue: public CMsgQueueThread
- {
- public:
- static const int TV_MSG_COMMON = 0;
- static const int TV_MSG_SEND_KEY = 1;
- private:
- virtual void handleMessage ( CMessage &msg );
- };
- CFbcCommunication();
- ~CFbcCommunication();
- int start();
- //---------------------------------------------
+ friend class CTvMsgQueue;
+ class CFbcMsgQueue: public CMsgQueueThread {
+ public:
+ static const int TV_MSG_COMMON = 0;
+ static const int TV_MSG_SEND_KEY = 1;
+ private:
+ virtual void handleMessage ( CMessage &msg );
+ };
+ CFbcCommunication();
+ ~CFbcCommunication();
+ int start();
+ //---------------------------------------------
- //---------------------------------------------
- void testUart();
- int handleCmd(COMM_DEV_TYPE_E fromDev, int cmd[], int *pRetValue);
- int sendDataOneway(int devno, unsigned char *pData, int dataLen, int flags);
- int sendDataAndWaitReply(int devno, int waitForDevno, int waitForCmd, unsigned char *pData, int dataLen, int timeout, unsigned char *pReData, int *reDataLen, int flags);
- int closeAll();
- int SetUpgradeFlag(int flag);
- int uartReadStream(unsigned char *retData, int rd_max_len, int timeout);
- unsigned int Calcrc32(unsigned int crc, const unsigned char *ptr, unsigned int buf_len);
- int cfbc_Set_Gain_Red(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Gain_Red(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Gain_Green(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Gain_Green(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Gain_Blue(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Gain_Blue(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Offset_Red(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Offset_Red(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Offset_Green(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Offset_Green(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Offset_Blue(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Offset_Blue(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_WB_Initial(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_WB_Initial(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_ColorTemp_Mode(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_ColorTemp_Mode(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Test_Pattern(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Test_Pattern(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Picture_Mode(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Picture_Mode(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Contrast(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Contrast(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Brightness(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Brightness(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Saturation(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Saturation(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_HueColorTint(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_HueColorTint(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Backlight(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Backlight(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Source(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Source(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Mute(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Mute(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Volume_Bar(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Volume_Bar(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Balance(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Balance(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Master_Volume(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Master_Volume(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_CM(COMM_DEV_TYPE_E fromDev, unsigned char value);
- int cfbc_Get_CM(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_DNLP(COMM_DEV_TYPE_E fromDev, unsigned char value);
- int cfbc_Get_DNLP(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Gamma(COMM_DEV_TYPE_E fromDev, unsigned char value);
- int cfbc_Get_Gamma(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_WhiteBalance_OnOff(COMM_DEV_TYPE_E fromDev, unsigned char value);
- int cfbc_Get_WhiteBalance_OnOff(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_WhiteBalance_GrayPattern_OnOff(COMM_DEV_TYPE_E fromDev, int onOff);
- int cfbc_WhiteBalance_SetGrayPattern(COMM_DEV_TYPE_E fromDev, unsigned char value);
- int cfbc_Get_WB_Batch(COMM_DEV_TYPE_E fromDev, unsigned char mode, unsigned char *r_gain, unsigned char *g_gain, unsigned char *b_gain, unsigned char *r_offset, unsigned char *g_offset, unsigned char *b_offset);
- int cfbc_Set_WB_Batch(COMM_DEV_TYPE_E fromDev, unsigned char mode, unsigned char r_gain, unsigned char g_gain, unsigned char b_gain, unsigned char r_offset, unsigned char g_offset, unsigned char b_offset);
- int cfbc_Set_backlight_onoff(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_backlight_onoff(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_LVDS_SSG_Set(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Set_AUTO_ELEC_MODE(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_AUTO_ELEC_MODE(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Get_FBC_MAINCODE_Version(COMM_DEV_TYPE_E fromDev, char sw_ver[], char build_time[], char git_ver[], char git_branch[], char build_name[]);
- int cfbc_Get_FBC_Get_PANel_INFO(COMM_DEV_TYPE_E fromDev, char panel_model[]);
- int cfbc_Set_FBC_panel_power_switch(COMM_DEV_TYPE_E fromDev, int switch_val);
- int cfbc_Set_FBC_suspend(COMM_DEV_TYPE_E fromDev, int switch_val);
- int cfbc_FBC_Send_Key_To_Fbc(COMM_DEV_TYPE_E fromDev, int keycode, int param);
- int cfbc_Get_FBC_PANEL_REVERSE(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Get_FBC_PANEL_OUTPUT(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_FBC_project_id(COMM_DEV_TYPE_E fromDev, int prj_id);
- int cfbc_Get_FBC_project_id(COMM_DEV_TYPE_E fromDev, int *prj_id);
- int cfbc_SendRebootToUpgradeCmd(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Set_FBC_User_Setting_Default(COMM_DEV_TYPE_E fromDev, int param);
- int cfbc_Set_FBC_Factory_SN(COMM_DEV_TYPE_E fromDev, const char *pSNval) ;
- int cfbc_Get_FBC_Factory_SN(COMM_DEV_TYPE_E fromDev, char FactorySN[]);
- int cfbc_Set_FBC_Audio_Source(COMM_DEV_TYPE_E fromDev, int value);
+ //---------------------------------------------
+ void testUart();
+ int handleCmd(COMM_DEV_TYPE_E fromDev, int cmd[], int *pRetValue);
+ int sendDataOneway(int devno, unsigned char *pData, int dataLen, int flags);
+ int sendDataAndWaitReply(int devno, int waitForDevno, int waitForCmd, unsigned char *pData, int dataLen, int timeout, unsigned char *pReData, int *reDataLen, int flags);
+ int closeAll();
+ int SetUpgradeFlag(int flag);
+ int uartReadStream(unsigned char *retData, int rd_max_len, int timeout);
+ unsigned int Calcrc32(unsigned int crc, const unsigned char *ptr, unsigned int buf_len);
+ int cfbc_Set_Gain_Red(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Gain_Red(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Gain_Green(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Gain_Green(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Gain_Blue(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Gain_Blue(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Offset_Red(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Offset_Red(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Offset_Green(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Offset_Green(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Offset_Blue(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Offset_Blue(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_WB_Initial(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_WB_Initial(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_ColorTemp_Mode(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_ColorTemp_Mode(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Test_Pattern(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Test_Pattern(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Picture_Mode(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Picture_Mode(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Contrast(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Contrast(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Brightness(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Brightness(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Saturation(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Saturation(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_HueColorTint(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_HueColorTint(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Backlight(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Backlight(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Source(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Source(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Mute(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Mute(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Volume_Bar(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Volume_Bar(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Balance(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Balance(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Master_Volume(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Master_Volume(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_CM(COMM_DEV_TYPE_E fromDev, unsigned char value);
+ int cfbc_Get_CM(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_DNLP(COMM_DEV_TYPE_E fromDev, unsigned char value);
+ int cfbc_Get_DNLP(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Gamma(COMM_DEV_TYPE_E fromDev, unsigned char value);
+ int cfbc_Get_Gamma(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_WhiteBalance_OnOff(COMM_DEV_TYPE_E fromDev, unsigned char value);
+ int cfbc_Get_WhiteBalance_OnOff(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_WhiteBalance_GrayPattern_OnOff(COMM_DEV_TYPE_E fromDev, int onOff);
+ int cfbc_WhiteBalance_SetGrayPattern(COMM_DEV_TYPE_E fromDev, unsigned char value);
+ int cfbc_Get_WB_Batch(COMM_DEV_TYPE_E fromDev, unsigned char mode, unsigned char *r_gain, unsigned char *g_gain, unsigned char *b_gain, unsigned char *r_offset, unsigned char *g_offset, unsigned char *b_offset);
+ int cfbc_Set_WB_Batch(COMM_DEV_TYPE_E fromDev, unsigned char mode, unsigned char r_gain, unsigned char g_gain, unsigned char b_gain, unsigned char r_offset, unsigned char g_offset, unsigned char b_offset);
+ int cfbc_Set_backlight_onoff(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_backlight_onoff(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_LVDS_SSG_Set(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Set_AUTO_ELEC_MODE(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_AUTO_ELEC_MODE(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Get_FBC_MAINCODE_Version(COMM_DEV_TYPE_E fromDev, char sw_ver[], char build_time[], char git_ver[], char git_branch[], char build_name[]);
+ int cfbc_Get_FBC_Get_PANel_INFO(COMM_DEV_TYPE_E fromDev, char panel_model[]);
+ int cfbc_Set_FBC_panel_power_switch(COMM_DEV_TYPE_E fromDev, int switch_val);
+ int cfbc_Set_FBC_suspend(COMM_DEV_TYPE_E fromDev, int switch_val);
+ int cfbc_FBC_Send_Key_To_Fbc(COMM_DEV_TYPE_E fromDev, int keycode, int param);
+ int cfbc_Get_FBC_PANEL_REVERSE(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Get_FBC_PANEL_OUTPUT(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_FBC_project_id(COMM_DEV_TYPE_E fromDev, int prj_id);
+ int cfbc_Get_FBC_project_id(COMM_DEV_TYPE_E fromDev, int *prj_id);
+ int cfbc_SendRebootToUpgradeCmd(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Set_FBC_User_Setting_Default(COMM_DEV_TYPE_E fromDev, int param);
+ int cfbc_Set_FBC_Factory_SN(COMM_DEV_TYPE_E fromDev, const char *pSNval) ;
+ int cfbc_Get_FBC_Factory_SN(COMM_DEV_TYPE_E fromDev, char FactorySN[]);
+ int cfbc_Set_FBC_Audio_Source(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Set_Thermal_state(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Set_LightSensor_N310(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_LightSensor_N310(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_Dream_Panel_N310(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_Dream_Panel_N310(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_MULT_PQ_N310(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_MULT_PQ_N310(COMM_DEV_TYPE_E fromDev, int *value);
- int cfbc_Set_MEMC_N310(COMM_DEV_TYPE_E fromDev, int value);
- int cfbc_Get_MEMC_N310(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Thermal_state(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Set_LightSensor_N310(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_LightSensor_N310(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_Dream_Panel_N310(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_Dream_Panel_N310(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_MULT_PQ_N310(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_MULT_PQ_N310(COMM_DEV_TYPE_E fromDev, int *value);
+ int cfbc_Set_MEMC_N310(COMM_DEV_TYPE_E fromDev, int value);
+ int cfbc_Get_MEMC_N310(COMM_DEV_TYPE_E fromDev, int *value);
private:
- //now,just one item in list,haha...
- void showTime(struct timeval *_time);
- long getTime(void);
- int rmFromRequestList();
- int addToRequestList();
- void initCrc32Table();
- void sendAckCmd(bool isOk);
- unsigned int GetCrc32(unsigned char *InStr, unsigned int len);
- int processData(COMM_DEV_TYPE_E fromDev, unsigned char *PData, int dataLen);
- int uartReadData(unsigned char *retData, int *retLen);
- int Fbc_Set_Value_INT8(COMM_DEV_TYPE_E toDev, int cmd_type, int value);
- int Fbc_Get_Value_INT8(COMM_DEV_TYPE_E fromDev, int cmd_type, int *value);
- int Fbc_Set_Value_INT32(COMM_DEV_TYPE_E toDev, int cmd_type, int value);
- int Fbc_Get_BatchValue(COMM_DEV_TYPE_E toDev, unsigned char *cmd_buf, int count);
- int Fbc_Set_BatchValue(COMM_DEV_TYPE_E fromDev, unsigned char *cmd_buf, int count);
- int cfbc_Set_Get_BatchValue(COMM_DEV_TYPE_E fromDev, unsigned char *cmd_buf, int count, int isSet);
- bool threadLoop();
+ //now,just one item in list,haha...
+ void showTime(struct timeval *_time);
+ long getTime(void);
+ int rmFromRequestList();
+ int addToRequestList();
+ void initCrc32Table();
+ void sendAckCmd(bool isOk);
+ unsigned int GetCrc32(unsigned char *InStr, unsigned int len);
+ int processData(COMM_DEV_TYPE_E fromDev, unsigned char *PData, int dataLen);
+ int uartReadData(unsigned char *retData, int *retLen);
+ int Fbc_Set_Value_INT8(COMM_DEV_TYPE_E toDev, int cmd_type, int value);
+ int Fbc_Get_Value_INT8(COMM_DEV_TYPE_E fromDev, int cmd_type, int *value);
+ int Fbc_Set_Value_INT32(COMM_DEV_TYPE_E toDev, int cmd_type, int value);
+ int Fbc_Get_BatchValue(COMM_DEV_TYPE_E toDev, unsigned char *cmd_buf, int count);
+ int Fbc_Set_BatchValue(COMM_DEV_TYPE_E fromDev, unsigned char *cmd_buf, int count);
+ int cfbc_Set_Get_BatchValue(COMM_DEV_TYPE_E fromDev, unsigned char *cmd_buf, int count, int isSet);
+ bool threadLoop();
- int mUpgradeFlag;
- CHdmiCec mHdmiCec;
- CSerialPort mSerialPort;
- Epoll mEpoll;
- mutable CMutex mLock;
- REQUEST_REPLY_S mReplyList;
- //list
- epoll_event m_event;
- unsigned char *mpRevDataBuf;
- unsigned int mCrc32Table[256];
- bool mbSendKeyCode;
- CTvInput mTvInput;
- CFbcMsgQueue mFbcMsgQueue;
- int mbDownHaveSend;
+ int mUpgradeFlag;
+ CHdmiCec mHdmiCec;
+ CSerialPort mSerialPort;
+ Epoll mEpoll;
+ mutable CMutex mLock;
+ REQUEST_REPLY_S mReplyList;
+ //list
+ epoll_event m_event;
+ unsigned char *mpRevDataBuf;
+ unsigned int mCrc32Table[256];
+ bool mbSendKeyCode;
+ CTvInput mTvInput;
+ CFbcMsgQueue mFbcMsgQueue;
+ int mbDownHaveSend;
- int mbFbcKeyEnterDown;
- nsecs_t mFbcEnterKeyDownTime;
+ int mbFbcKeyEnterDown;
+ nsecs_t mFbcEnterKeyDownTime;
};
extern CFbcCommunication *GetSingletonFBC();
diff --git a/tvapi/libtv/tv/CFrontEnd.cpp b/tvapi/libtv/tv/CFrontEnd.cpp
index 49935b0..a11d979 100644
--- a/tvapi/libtv/tv/CFrontEnd.cpp
+++ b/tvapi/libtv/tv/CFrontEnd.cpp
@@ -24,545 +24,545 @@ extern "C" {
CFrontEnd::CFrontEnd()
{
- mFrontDevID = FE_DEV_ID;
- mpObserver = NULL;
- mCurFineFreq = 0;
- mCurMode = FE_ANALOG;
+ mFrontDevID = FE_DEV_ID;
+ mpObserver = NULL;
+ mCurFineFreq = 0;
+ mCurMode = FE_ANALOG;
}
CFrontEnd::~CFrontEnd()
{
- AM_EVT_Unsubscribe(mFrontDevID, AM_FEND_EVT_STATUS_CHANGED, dmd_fend_callback, NULL);
- if (mFrontDevID == FE_DEV_ID)
- AM_FEND_Close(mFrontDevID);
- mFrontDevID = -1;
+ AM_EVT_Unsubscribe(mFrontDevID, AM_FEND_EVT_STATUS_CHANGED, dmd_fend_callback, NULL);
+ if(mFrontDevID == FE_DEV_ID)
+ AM_FEND_Close(mFrontDevID);
+ mFrontDevID = -1;
}
int CFrontEnd::Open(int mode)
{
- AM_FEND_OpenPara_t para;
- int rc = 0;
-
- memset(&para, 0, sizeof(AM_FEND_OpenPara_t));
- para.mode = mode;
- rc = AM_FEND_Open(mFrontDevID, &para);
- if ((rc == AM_FEND_ERR_BUSY) || (rc == 0)) {
- AM_EVT_Subscribe(mFrontDevID, AM_FEND_EVT_STATUS_CHANGED, dmd_fend_callback, this);
- LOGD("%s,frontend dev open success!\n", __FUNCTION__);
- return 0;
- } else {
- LOGD("%s,frontend dev open failed! dvb error id is %d\n", __FUNCTION__, rc);
- return -1;
- }
+ AM_FEND_OpenPara_t para;
+ int rc = 0;
+
+ memset(&para, 0, sizeof(AM_FEND_OpenPara_t));
+ para.mode = mode;
+ rc = AM_FEND_Open(mFrontDevID, &para);
+ if((rc == AM_FEND_ERR_BUSY) || (rc == 0)) {
+ AM_EVT_Subscribe(mFrontDevID, AM_FEND_EVT_STATUS_CHANGED, dmd_fend_callback, this);
+ LOGD("%s,frontend dev open success!\n", __FUNCTION__);
+ return 0;
+ } else {
+ LOGD("%s,frontend dev open failed! dvb error id is %d\n", __FUNCTION__, rc);
+ return -1;
+ }
}
int CFrontEnd::Close()
{
- int rc = 0;
- rc = AM_FEND_Close(mFrontDevID);
-
- if (rc != 0) {
- LOGD("%s,frontend_close fail! dvb error id is %d\n", __FUNCTION__, rc);
- return -1;
- } else {
- LOGD("%s,close frontend is ok\n", __FUNCTION__);
- }
- return 0;
+ int rc = 0;
+ rc = AM_FEND_Close(mFrontDevID);
+
+ if(rc != 0) {
+ LOGD("%s,frontend_close fail! dvb error id is %d\n", __FUNCTION__, rc);
+ return -1;
+ } else {
+ LOGD("%s,close frontend is ok\n", __FUNCTION__);
+ }
+ return 0;
}
int CFrontEnd::setMode(int mode)
{
- int rc = 0;
- if (mCurMode == mode) return 0;
- rc = AM_FEND_SetMode(mFrontDevID, mode);
-
- if (rc != 0) {
- LOGD("%s,front dev set mode failed! dvb error id is %d\n", __FUNCTION__, rc);
- return -1;
- }
- return 0;
+ int rc = 0;
+ if(mCurMode == mode) return 0;
+ rc = AM_FEND_SetMode(mFrontDevID, mode);
+
+ if(rc != 0) {
+ LOGD("%s,front dev set mode failed! dvb error id is %d\n", __FUNCTION__, rc);
+ return -1;
+ }
+ return 0;
}
int CFrontEnd::setPara(int mode, int freq, int para1, int para2)
{
- int ret = 0;
- int buff_size = 32;
- char VideoStdBuff[buff_size];
- char audioStdBuff[buff_size];
-
- AM_FENDCTRL_DVBFrontendParameters_t dvbfepara;
- memset(&dvbfepara, 0, sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
- LOGD("%s,set fe para mode = %d freq=%d p1=%d p2=%d", __FUNCTION__, mode, freq, para1, para2);
- dvbfepara.m_type = mode;
- switch (mode) {
- case FE_OFDM:
- dvbfepara.terrestrial.para.frequency = freq;
- dvbfepara.terrestrial.para.u.ofdm.bandwidth = (fe_bandwidth_t)para1;
- break;
- case FE_DTMB:
- LOGD("%s,FE_DTMB is support\n", __FUNCTION__);
- LOGD("%s,freq = %d, bandwidth = %d\n", __FUNCTION__, freq, para1);
- dvbfepara.dtmb.para.frequency = freq;
- dvbfepara.dtmb.para.u.ofdm.bandwidth = (fe_bandwidth_t)para1;
- break;
- case FE_ATSC:
- dvbfepara.atsc.para.frequency = freq;
- dvbfepara.atsc.para.u.vsb.modulation = (fe_modulation_t)para1;
- break;
- case FE_QAM:
- dvbfepara.cable.para.frequency = freq;
- dvbfepara.cable.para.u.qam.symbol_rate = para1;
- dvbfepara.cable.para.u.qam.modulation = (fe_modulation_t)para2;
- break;
- case FE_ANALOG:
- LOGD("%s,FE_ANALOG is support\n", __FUNCTION__);
- /*para2 is finetune data */
- dvbfepara.analog.para.frequency = freq;
- dvbfepara.analog.para.u.analog.std = para1;
- dvbfepara.analog.para.u.analog.afc_range = AFC_RANGE;
- if (para2 == 0) {
- dvbfepara.analog.para.u.analog.flag |= ANALOG_FLAG_ENABLE_AFC;
- } else {
- dvbfepara.analog.para.u.analog.flag &= ~ANALOG_FLAG_ENABLE_AFC;
- }
-
- printAudioStdStr(para1, audioStdBuff, buff_size);
- printVideoStdStr(para1, VideoStdBuff, buff_size);
- LOGD("%s,freq = %dHz, video_std = %s, audio_std = %s, fineFreqOffset = %dHz\n", __FUNCTION__,
- freq, VideoStdBuff, audioStdBuff, para2);
-
- break;
- }
-
- ret = AM_FENDCTRL_SetPara(mFrontDevID, &dvbfepara);
-
- if (ret != 0) {
- LOGD("%s,fend set para failed! dvb error id is %d\n", __FUNCTION__, ret);
- return -1;
- }
- return 0;
+ int ret = 0;
+ int buff_size = 32;
+ char VideoStdBuff[buff_size];
+ char audioStdBuff[buff_size];
+
+ AM_FENDCTRL_DVBFrontendParameters_t dvbfepara;
+ memset(&dvbfepara, 0, sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
+ LOGD("%s,set fe para mode = %d freq=%d p1=%d p2=%d", __FUNCTION__, mode, freq, para1, para2);
+ dvbfepara.m_type = mode;
+ switch(mode) {
+ case FE_OFDM:
+ dvbfepara.terrestrial.para.frequency = freq;
+ dvbfepara.terrestrial.para.u.ofdm.bandwidth = (fe_bandwidth_t)para1;
+ break;
+ case FE_DTMB:
+ LOGD("%s,FE_DTMB is support\n", __FUNCTION__);
+ LOGD("%s,freq = %d, bandwidth = %d\n", __FUNCTION__, freq, para1);
+ dvbfepara.dtmb.para.frequency = freq;
+ dvbfepara.dtmb.para.u.ofdm.bandwidth = (fe_bandwidth_t)para1;
+ break;
+ case FE_ATSC:
+ dvbfepara.atsc.para.frequency = freq;
+ dvbfepara.atsc.para.u.vsb.modulation = (fe_modulation_t)para1;
+ break;
+ case FE_QAM:
+ dvbfepara.cable.para.frequency = freq;
+ dvbfepara.cable.para.u.qam.symbol_rate = para1;
+ dvbfepara.cable.para.u.qam.modulation = (fe_modulation_t)para2;
+ break;
+ case FE_ANALOG:
+ LOGD("%s,FE_ANALOG is support\n", __FUNCTION__);
+ /*para2 is finetune data */
+ dvbfepara.analog.para.frequency = freq;
+ dvbfepara.analog.para.u.analog.std = para1;
+ dvbfepara.analog.para.u.analog.afc_range = AFC_RANGE;
+ if(para2 == 0) {
+ dvbfepara.analog.para.u.analog.flag |= ANALOG_FLAG_ENABLE_AFC;
+ } else {
+ dvbfepara.analog.para.u.analog.flag &= ~ANALOG_FLAG_ENABLE_AFC;
+ }
+
+ printAudioStdStr(para1, audioStdBuff, buff_size);
+ printVideoStdStr(para1, VideoStdBuff, buff_size);
+ LOGD("%s,freq = %dHz, video_std = %s, audio_std = %s, fineFreqOffset = %dHz\n", __FUNCTION__,
+ freq, VideoStdBuff, audioStdBuff, para2);
+
+ break;
+ }
+
+ ret = AM_FENDCTRL_SetPara(mFrontDevID, &dvbfepara);
+
+ if (ret != 0) {
+ LOGD("%s,fend set para failed! dvb error id is %d\n", __FUNCTION__, ret);
+ return -1;
+ }
+ return 0;
}
int CFrontEnd::fineTune(int fineFreq)
{
- int ret = 0;
- if (mCurFineFreq == fineFreq) return -1;
+ int ret = 0;
+ if(mCurFineFreq == fineFreq) return -1;
- mCurFineFreq = fineFreq;
- ret = AM_FEND_FineTune(FE_DEV_ID, fineFreq);
+ mCurFineFreq = fineFreq;
+ ret = AM_FEND_FineTune(FE_DEV_ID, fineFreq);
- if (ret != 0) {
- LOGD("%s, fail! dvb error id is %d", __FUNCTION__, ret);
- return -1;
- }
- return 0;
+ if(ret != 0) {
+ LOGD("%s, fail! dvb error id is %d", __FUNCTION__, ret);
+ return -1;
+ }
+ return 0;
}
int CFrontEnd::GetTSSource(AM_DMX_Source_t *src)
{
- AM_FEND_GetTSSource(mFrontDevID, src);
- return 0;
+ AM_FEND_GetTSSource(mFrontDevID, src);
+ return 0;
}
-void CFrontEnd::dmd_fend_callback(int dev_no, int event_type, void *param, void *user_data)
+void CFrontEnd::dmd_fend_callback(long dev_no, int event_type, void *param, void *user_data)
{
- CFrontEnd *pFront = (CFrontEnd *)user_data;
- if (NULL == pFront) {
- LOGD("%s,warnning : dmd_fend_callback NULL == pFront\n", __FUNCTION__);
- return ;
- }
- if (pFront->mpObserver == NULL) {
- LOGD("%s,warnning : mpObserver NULL == mpObserver\n", __FUNCTION__);
- return;
- }
- struct dvb_frontend_event *evt = (struct dvb_frontend_event *) param;
- if (!evt)
- return;
-
- if (evt->status & FE_HAS_LOCK) {
- pFront->mCurSigEv.mCurSigStaus = FEEvent::EVENT_FE_HAS_SIG;
- pFront->mCurSigEv.mCurFreq = evt->parameters.frequency;
- pFront->mpObserver->onEvent(pFront->mCurSigEv);
- } else if (evt->status & FE_TIMEDOUT) {
- pFront->mCurSigEv.mCurSigStaus = FEEvent::EVENT_FE_NO_SIG;
- pFront->mCurSigEv.mCurFreq = evt->parameters.frequency;
- pFront->mpObserver->onEvent(pFront->mCurSigEv);
- }
+ CFrontEnd *pFront = (CFrontEnd *)user_data;
+ if(NULL == pFront) {
+ LOGD("%s,warnning : dmd_fend_callback NULL == pFront\n", __FUNCTION__);
+ return ;
+ }
+ if(pFront->mpObserver == NULL) {
+ LOGD("%s,warnning : mpObserver NULL == mpObserver\n", __FUNCTION__);
+ return;
+ }
+ struct dvb_frontend_event *evt = (struct dvb_frontend_event *) param;
+ if (!evt)
+ return;
+
+ if (evt->status & FE_HAS_LOCK) {
+ pFront->mCurSigEv.mCurSigStaus = FEEvent::EVENT_FE_HAS_SIG;
+ pFront->mCurSigEv.mCurFreq = evt->parameters.frequency;
+ pFront->mpObserver->onEvent(pFront->mCurSigEv);
+ } else if (evt->status & FE_TIMEDOUT) {
+ pFront->mCurSigEv.mCurSigStaus = FEEvent::EVENT_FE_NO_SIG;
+ pFront->mCurSigEv.mCurFreq = evt->parameters.frequency;
+ pFront->mpObserver->onEvent(pFront->mCurSigEv);
+ }
}
int CFrontEnd::stdAndColorToAudioEnum(int data)
{
- atv_audio_std_t std = CC_ATV_AUDIO_STD_DK;
- if (((data & V4L2_STD_PAL_DK) == V4L2_STD_PAL_DK) ||
- ((data & V4L2_STD_SECAM_DK) == V4L2_STD_SECAM_DK)) {
- std = CC_ATV_AUDIO_STD_DK;
- } else if ((data & V4L2_STD_PAL_I) == V4L2_STD_PAL_I) {
- std = CC_ATV_AUDIO_STD_I;
- } else if (((data & V4L2_STD_PAL_BG) == V4L2_STD_PAL_BG) ||
- ((data & V4L2_STD_SECAM_B) == V4L2_STD_SECAM_B) ||
- ((data & V4L2_STD_SECAM_G) == V4L2_STD_SECAM_G )) {
- std = CC_ATV_AUDIO_STD_BG;
- } else if (((data & V4L2_STD_PAL_M) == V4L2_STD_PAL_M) ||
- ((data & V4L2_STD_NTSC_M) == V4L2_STD_NTSC_M)) {
- std = CC_ATV_AUDIO_STD_M;
- } else if ((data & V4L2_STD_SECAM_L) == V4L2_STD_SECAM_L) {
- std = CC_ATV_AUDIO_STD_L;
- }
- return std ;
+ atv_audio_std_t std = CC_ATV_AUDIO_STD_DK;
+ if(((data & V4L2_STD_PAL_DK) == V4L2_STD_PAL_DK) ||
+ ((data & V4L2_STD_SECAM_DK) == V4L2_STD_SECAM_DK)) {
+ std = CC_ATV_AUDIO_STD_DK;
+ } else if((data & V4L2_STD_PAL_I) == V4L2_STD_PAL_I) {
+ std = CC_ATV_AUDIO_STD_I;
+ } else if(((data & V4L2_STD_PAL_BG) == V4L2_STD_PAL_BG) ||
+ ((data & V4L2_STD_SECAM_B) == V4L2_STD_SECAM_B) ||
+ ((data & V4L2_STD_SECAM_G) == V4L2_STD_SECAM_G )) {
+ std = CC_ATV_AUDIO_STD_BG;
+ } else if(((data & V4L2_STD_PAL_M) == V4L2_STD_PAL_M) ||
+ ((data & V4L2_STD_NTSC_M) == V4L2_STD_NTSC_M)) {
+ std = CC_ATV_AUDIO_STD_M;
+ } else if((data & V4L2_STD_SECAM_L) == V4L2_STD_SECAM_L) {
+ std = CC_ATV_AUDIO_STD_L;
+ }
+ return std ;
}
int CFrontEnd::stdAndColorToVideoEnum(int std)
{
- atv_video_std_t video_standard = CC_ATV_VIDEO_STD_PAL;
- if ((std & V4L2_COLOR_STD_PAL) == V4L2_COLOR_STD_PAL) {
- video_standard = CC_ATV_VIDEO_STD_PAL;
- } else if ((std & V4L2_COLOR_STD_NTSC) == V4L2_COLOR_STD_NTSC) {
- video_standard = CC_ATV_VIDEO_STD_NTSC;
- } else if ((std & V4L2_COLOR_STD_SECAM) == V4L2_COLOR_STD_SECAM) {
- video_standard = CC_ATV_VIDEO_STD_SECAM;
- }
- return video_standard;
+ atv_video_std_t video_standard = CC_ATV_VIDEO_STD_PAL;
+ if((std & V4L2_COLOR_STD_PAL) == V4L2_COLOR_STD_PAL) {
+ video_standard = CC_ATV_VIDEO_STD_PAL;
+ } else if((std & V4L2_COLOR_STD_NTSC) == V4L2_COLOR_STD_NTSC) {
+ video_standard = CC_ATV_VIDEO_STD_NTSC;
+ } else if((std & V4L2_COLOR_STD_SECAM) == V4L2_COLOR_STD_SECAM) {
+ video_standard = CC_ATV_VIDEO_STD_SECAM;
+ }
+ return video_standard;
}
v4l2_std_id CFrontEnd::enumToStdAndColor(int videoStd, int audioStd)
{
- v4l2_std_id tmpTunerStd = 0;
- if (videoStd == CC_ATV_VIDEO_STD_PAL) {
- tmpTunerStd |= V4L2_COLOR_STD_PAL;
- if (audioStd == CC_ATV_AUDIO_STD_DK) {
- tmpTunerStd |= V4L2_STD_PAL_DK;
- } else if (audioStd == CC_ATV_AUDIO_STD_I) {
- tmpTunerStd |= V4L2_STD_PAL_I;
- } else if (audioStd == CC_ATV_AUDIO_STD_BG) {
- tmpTunerStd |= V4L2_STD_PAL_BG;
- } else if (audioStd == CC_ATV_AUDIO_STD_M) {
- tmpTunerStd |= V4L2_STD_PAL_M;
- }
- } else if (videoStd == CC_ATV_VIDEO_STD_NTSC) {
- tmpTunerStd |= V4L2_COLOR_STD_NTSC;
- if (audioStd == CC_ATV_AUDIO_STD_DK) {
- tmpTunerStd |= V4L2_STD_PAL_DK;
- } else if (audioStd == CC_ATV_AUDIO_STD_I) {
- tmpTunerStd |= V4L2_STD_PAL_I;
- } else if (audioStd == CC_ATV_AUDIO_STD_BG) {
- tmpTunerStd |= V4L2_STD_PAL_BG;
- } else if (audioStd == CC_ATV_AUDIO_STD_M) {
- tmpTunerStd |= V4L2_STD_NTSC_M;
- }
- } else if (videoStd == CC_ATV_VIDEO_STD_SECAM) {
- tmpTunerStd |= V4L2_COLOR_STD_SECAM;
- if (audioStd == CC_ATV_AUDIO_STD_DK) {
- tmpTunerStd |= V4L2_STD_SECAM_DK;
- } else if (audioStd == CC_ATV_AUDIO_STD_I) {
- tmpTunerStd |= V4L2_STD_PAL_I;
- } else if (audioStd == CC_ATV_AUDIO_STD_BG) {
- tmpTunerStd |= (V4L2_STD_SECAM_B | V4L2_STD_SECAM_G);
- } else if (audioStd == CC_ATV_AUDIO_STD_M) {
- tmpTunerStd |= V4L2_STD_NTSC_M;
- } else if (audioStd == CC_ATV_AUDIO_STD_L) {
- tmpTunerStd |= V4L2_STD_SECAM_L;
- }
- } else if (videoStd == CC_ATV_VIDEO_STD_AUTO) {
- tmpTunerStd |= V4L2_COLOR_STD_AUTO;
- tmpTunerStd |= V4L2_STD_PAL_DK;
- }
- return tmpTunerStd;
+ v4l2_std_id tmpTunerStd = 0;
+ if (videoStd == CC_ATV_VIDEO_STD_PAL) {
+ tmpTunerStd |= V4L2_COLOR_STD_PAL;
+ if (audioStd == CC_ATV_AUDIO_STD_DK) {
+ tmpTunerStd |= V4L2_STD_PAL_DK;
+ } else if (audioStd == CC_ATV_AUDIO_STD_I) {
+ tmpTunerStd |= V4L2_STD_PAL_I;
+ } else if (audioStd == CC_ATV_AUDIO_STD_BG) {
+ tmpTunerStd |= V4L2_STD_PAL_BG;
+ } else if (audioStd == CC_ATV_AUDIO_STD_M) {
+ tmpTunerStd |= V4L2_STD_PAL_M;
+ }
+ } else if (videoStd == CC_ATV_VIDEO_STD_NTSC) {
+ tmpTunerStd |= V4L2_COLOR_STD_NTSC;
+ if (audioStd == CC_ATV_AUDIO_STD_DK) {
+ tmpTunerStd |= V4L2_STD_PAL_DK;
+ } else if (audioStd == CC_ATV_AUDIO_STD_I) {
+ tmpTunerStd |= V4L2_STD_PAL_I;
+ } else if (audioStd == CC_ATV_AUDIO_STD_BG) {
+ tmpTunerStd |= V4L2_STD_PAL_BG;
+ } else if (audioStd == CC_ATV_AUDIO_STD_M) {
+ tmpTunerStd |= V4L2_STD_NTSC_M;
+ }
+ } else if (videoStd == CC_ATV_VIDEO_STD_SECAM) {
+ tmpTunerStd |= V4L2_COLOR_STD_SECAM;
+ if (audioStd == CC_ATV_AUDIO_STD_DK) {
+ tmpTunerStd |= V4L2_STD_SECAM_DK;
+ } else if (audioStd == CC_ATV_AUDIO_STD_I) {
+ tmpTunerStd |= V4L2_STD_PAL_I;
+ } else if (audioStd == CC_ATV_AUDIO_STD_BG) {
+ tmpTunerStd |= (V4L2_STD_SECAM_B | V4L2_STD_SECAM_G);
+ } else if (audioStd == CC_ATV_AUDIO_STD_M) {
+ tmpTunerStd |= V4L2_STD_NTSC_M;
+ } else if (audioStd == CC_ATV_AUDIO_STD_L) {
+ tmpTunerStd |= V4L2_STD_SECAM_L;
+ }
+ } else if(videoStd == CC_ATV_VIDEO_STD_AUTO) {
+ tmpTunerStd |= V4L2_COLOR_STD_AUTO;
+ tmpTunerStd |= V4L2_STD_PAL_DK;
+ }
+ return tmpTunerStd;
}
int CFrontEnd::getPara(frontend_para_set_t *fpara)
{
- int mode;
- int ret1, ret2;
+ int mode;
+ int ret1, ret2;
- struct dvb_frontend_parameters para;
- memset(&para, 0, sizeof(struct dvb_frontend_parameters));
- if ((ret1 = AM_FEND_GetPara(mFrontDevID, &para)) < 0) {
- LOGD("%s,getPara faiture\n", __FUNCTION__ );
- return -1;
+ struct dvb_frontend_parameters para;
+ memset(&para, 0, sizeof(struct dvb_frontend_parameters));
+ if((ret1 = AM_FEND_GetPara(mFrontDevID, &para)) < 0) {
+ LOGD("%s,getPara faiture\n", __FUNCTION__ );
+ return -1;
- //fpara->mode = fend_mode ;
+ //fpara->mode = fend_mode ;
- }
- return 0;
+ }
+ return 0;
}
int CFrontEnd::getSNR()
{
- int snr = 0;
- AM_FEND_GetSNR(mFrontDevID, &snr);
- return snr;
+ int snr = 0;
+ AM_FEND_GetSNR(mFrontDevID, &snr);
+ return snr;
}
int CFrontEnd::getBER()
{
- int ber = 0;
- AM_FEND_GetBER(mFrontDevID, &ber);
- return ber;
+ int ber = 0;
+ AM_FEND_GetBER(mFrontDevID, &ber);
+ return ber;
}
int CFrontEnd::getStrength()
{
- int Strength = 0;
- AM_FEND_GetStrength(mFrontDevID, &Strength);
- return Strength;
+ int Strength = 0;
+ AM_FEND_GetStrength(mFrontDevID, &Strength);
+ return Strength;
}
int CFrontEnd::formatATVFreq(int tmp_freq)
{
- int tmp_val = 25;
- int ATV_1MHZ = 1000000;
- int ATV_10KHZ = 10000;
+ int tmp_val = 25;
+ int ATV_1MHZ = 1000000;
+ int ATV_10KHZ = 10000;
- tmp_freq = (tmp_freq / ATV_1MHZ) * ATV_1MHZ + tmp_val * ATV_10KHZ;
+ tmp_freq = (tmp_freq / ATV_1MHZ) * ATV_1MHZ + tmp_val * ATV_10KHZ;
- return tmp_freq;
+ return tmp_freq;
}
int CFrontEnd::printVideoStdStr(int compStd, char strBuffer[], int buff_size)
{
- memset(strBuffer, 0, buff_size);
- int videoStd = stdAndColorToVideoEnum(compStd);
- switch (videoStd) {
- case CC_ATV_VIDEO_STD_AUTO:
- strcpy(strBuffer, "AUTO");
- break;
- case CC_ATV_VIDEO_STD_PAL:
- strcpy(strBuffer, "PAL");
- break;
- case CC_ATV_VIDEO_STD_NTSC:
- strcpy(strBuffer, "NTSC");
- break;
- case CC_ATV_VIDEO_STD_SECAM:
- strcpy(strBuffer, "SECAM");
- break;
- default:
- strcpy(strBuffer, "UnkownVideo");
- break;
- }
-
- return 0;
+ memset(strBuffer, 0, buff_size);
+ int videoStd = stdAndColorToVideoEnum(compStd);
+ switch(videoStd) {
+ case CC_ATV_VIDEO_STD_AUTO:
+ strcpy(strBuffer, "AUTO");
+ break;
+ case CC_ATV_VIDEO_STD_PAL:
+ strcpy(strBuffer, "PAL");
+ break;
+ case CC_ATV_VIDEO_STD_NTSC:
+ strcpy(strBuffer, "NTSC");
+ break;
+ case CC_ATV_VIDEO_STD_SECAM:
+ strcpy(strBuffer, "SECAM");
+ break;
+ default:
+ strcpy(strBuffer, "UnkownVideo");
+ break;
+ }
+
+ return 0;
}
int CFrontEnd::printAudioStdStr(int compStd, char strBuffer[], int buff_size)
{
- memset(strBuffer, 0, buff_size);
- int audioStd = stdAndColorToAudioEnum(compStd);
- switch (audioStd) {
- case CC_ATV_AUDIO_STD_DK:
- strcpy(strBuffer, "DK");
- break;
- case CC_ATV_AUDIO_STD_I:
- strcpy(strBuffer, "I");
- break;
- case CC_ATV_AUDIO_STD_BG:
- strcpy(strBuffer, "BG");
- break;
- case CC_ATV_AUDIO_STD_M:
- strcpy(strBuffer, "M");
- break;
- case CC_ATV_AUDIO_STD_L:
- strcpy(strBuffer, "L");
- break;
- case CC_ATV_AUDIO_STD_AUTO:
- strcpy(strBuffer, "AUTO");
- break;
- default:
- strcpy(strBuffer, "UnkownAudio");
- break;
- }
-
- return 0;
+ memset(strBuffer, 0, buff_size);
+ int audioStd = stdAndColorToAudioEnum(compStd);
+ switch(audioStd) {
+ case CC_ATV_AUDIO_STD_DK:
+ strcpy(strBuffer, "DK");
+ break;
+ case CC_ATV_AUDIO_STD_I:
+ strcpy(strBuffer, "I");
+ break;
+ case CC_ATV_AUDIO_STD_BG:
+ strcpy(strBuffer, "BG");
+ break;
+ case CC_ATV_AUDIO_STD_M:
+ strcpy(strBuffer, "M");
+ break;
+ case CC_ATV_AUDIO_STD_L:
+ strcpy(strBuffer, "L");
+ break;
+ case CC_ATV_AUDIO_STD_AUTO:
+ strcpy(strBuffer, "AUTO");
+ break;
+ default:
+ strcpy(strBuffer, "UnkownAudio");
+ break;
+ }
+
+ return 0;
}
int CFrontEnd::autoLoadFE()
{
- FILE *fp = NULL;
- int ret = -1;
+ FILE *fp = NULL;
+ int ret = -1;
- fp = fopen ( "/sys/class/amlfe/setting", "w" );
+ fp = fopen ( "/sys/class/amlfe/setting", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/class/amlfe/setting error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/class/amlfe/setting error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- ret = fprintf ( fp, "%s", "autoload" );
+ ret = fprintf ( fp, "%s", "autoload" );
- if ( ret < 0 ) {
- LOGW ( "autoload FE error(%s)!\n", strerror ( errno ) );
- }
- LOGD("autoLoadFE");
- fclose ( fp );
- fp = NULL;
+ if ( ret < 0 ) {
+ LOGW ( "autoload FE error(%s)!\n", strerror ( errno ) );
+ }
+ LOGD("autoLoadFE");
+ fclose ( fp );
+ fp = NULL;
- return ret;
+ return ret;
}
int CFrontEnd::setCvbsAmpOut(int tmp)
{
- int rc = AM_SUCCESS;
- rc = AM_FEND_SetCvbsAmpOut(mFrontDevID, tmp);
- if (rc == AM_SUCCESS) {
- LOGD("%s, sucessful!", __FUNCTION__);
- rc = 0;
- } else {
- LOGD("%s, fail!", __FUNCTION__);
- rc = -1;
- }
- return rc;
+ int rc = AM_SUCCESS;
+ rc = AM_FEND_SetCvbsAmpOut(mFrontDevID, tmp);
+ if(rc == AM_SUCCESS) {
+ LOGD("%s, sucessful!", __FUNCTION__);
+ rc = 0;
+ } else {
+ LOGD("%s, fail!", __FUNCTION__);
+ rc = -1;
+ }
+ return rc;
}
int CFrontEnd::setThreadDelay(int delay)
{
- int rc = AM_SUCCESS;
-
- rc = AM_FEND_SetThreadDelay(mFrontDevID, delay);
- if (rc == AM_SUCCESS) {
- LOGD("frontend_setThreadDelay sucessful!\n");
- return 0;
- } else {
- LOGD("frontend_setThreadDelay fail! %d\n\n", rc);
- return -1;
- }
+ int rc = AM_SUCCESS;
+
+ rc = AM_FEND_SetThreadDelay(mFrontDevID, delay);
+ if(rc == AM_SUCCESS) {
+ LOGD("frontend_setThreadDelay sucessful!\n");
+ return 0;
+ } else {
+ LOGD("frontend_setThreadDelay fail! %d\n\n", rc);
+ return -1;
+ }
}
int CFrontEnd::lock(int frequency, int symbol_rate, int modulation, int bandwidth)
{
- int rt = -1;
- struct dvb_frontend_parameters fparam;
- struct dvb_frontend_info finfo;
-
- memset(&fparam, 0, sizeof(struct dvb_frontend_parameters));
- memset(&finfo, 0, sizeof(struct dvb_frontend_info));
-
- AM_FEND_GetInfo(mFrontDevID, &finfo);
-
- if (frequency == 0)
- return -1;
- fparam.frequency = frequency;
-
- switch (finfo.type) {
-
- case FE_QAM:
- default:
-
- if (symbol_rate == 0)
- return -1;
- fparam.u.qam.symbol_rate = symbol_rate;
-
-
- if (modulation == 0)
- return -1;
- fparam.u.qam.modulation = (fe_modulation_t)modulation;
-
- LOGD("mFrontDevID = %d;fre=%d;sym=%d;qam=%d ",
- mFrontDevID, fparam.frequency, fparam.u.qam.symbol_rate, fparam.u.qam.modulation);
- break;
- case FE_OFDM:
- case FE_ATSC:
- LOGD("mFrontDevID = %d;fre=%d;bw=%d\n ",
- mFrontDevID, fparam.frequency, fparam.u.ofdm.bandwidth);
- break;
- case FE_QPSK:
- LOGD("QPSK are not supported.\n ");
- break;
- case FE_ANALOG:
- LOGD("ANALOG is supported.\n ");
- fparam.u.analog.std = V4L2_STD_PAL_I;
- break;
- }
-
- fe_status_t status;
-
- rt = AM_FEND_Lock(FE_DEV_ID, &fparam, &status);
-
- if ((!rt) && (status & FE_HAS_LOCK)) {
- LOGD("frontend_lock sucessful!\n");
- return true;
- } else {
- LOGD("frontend_lock fail %d!\n", rt);
- return false;
- }
+ int rt = -1;
+ struct dvb_frontend_parameters fparam;
+ struct dvb_frontend_info finfo;
+
+ memset(&fparam, 0, sizeof(struct dvb_frontend_parameters));
+ memset(&finfo, 0, sizeof(struct dvb_frontend_info));
+
+ AM_FEND_GetInfo(mFrontDevID, &finfo);
+
+ if (frequency == 0)
+ return -1;
+ fparam.frequency = frequency;
+
+ switch(finfo.type) {
+
+ case FE_QAM:
+ default:
+
+ if (symbol_rate == 0)
+ return -1;
+ fparam.u.qam.symbol_rate = symbol_rate;
+
+
+ if (modulation == 0)
+ return -1;
+ fparam.u.qam.modulation = (fe_modulation_t)modulation;
+
+ LOGD("mFrontDevID = %d;fre=%d;sym=%d;qam=%d ",
+ mFrontDevID, fparam.frequency, fparam.u.qam.symbol_rate, fparam.u.qam.modulation);
+ break;
+ case FE_OFDM:
+ case FE_ATSC:
+ LOGD("mFrontDevID = %d;fre=%d;bw=%d\n ",
+ mFrontDevID, fparam.frequency, fparam.u.ofdm.bandwidth);
+ break;
+ case FE_QPSK:
+ LOGD("QPSK are not supported.\n ");
+ break;
+ case FE_ANALOG:
+ LOGD("ANALOG is supported.\n ");
+ fparam.u.analog.std = V4L2_STD_PAL_I;
+ break;
+ }
+
+ fe_status_t status;
+
+ rt = AM_FEND_Lock(FE_DEV_ID, &fparam, &status);
+
+ if((!rt) && (status & FE_HAS_LOCK)) {
+ LOGD("frontend_lock sucessful!\n");
+ return true;
+ } else {
+ LOGD("frontend_lock fail %d!\n", rt);
+ return false;
+ }
}
int CFrontEnd::getInfo()
{
- struct dvb_frontend_info finfo;
+ struct dvb_frontend_info finfo;
- AM_FEND_GetInfo(mFrontDevID, &finfo);
+ AM_FEND_GetInfo(mFrontDevID, &finfo);
- //return fend_info; noitfy FrontEnd message
- return 0;
+ //return fend_info; noitfy FrontEnd message
+ return 0;
}
int CFrontEnd::getStatus()
{
- fe_status_t status;
- AM_FEND_GetStatus(mFrontDevID, &status);
+ fe_status_t status;
+ AM_FEND_GetStatus(mFrontDevID, &status);
- return status;
+ return status;
}
int CFrontEnd::checkStatusOnce()
{
- fe_status_t status;
- AM_FEND_GetStatus(mFrontDevID, &status);
- LOGD("%s,get status = %x", __FUNCTION__, status);
- if (status & FE_HAS_LOCK) {
- mCurSigEv.mCurSigStaus = FEEvent::EVENT_FE_HAS_SIG;
- mCurSigEv.mCurFreq = 0;
- mpObserver->onEvent(mCurSigEv);
- } else if (status & FE_TIMEDOUT) {
- mCurSigEv.mCurSigStaus = FEEvent::EVENT_FE_NO_SIG;
- mCurSigEv.mCurFreq = 0;
- mpObserver->onEvent(mCurSigEv);
- }
- return 0;
+ fe_status_t status;
+ AM_FEND_GetStatus(mFrontDevID, &status);
+ LOGD("%s,get status = %x", __FUNCTION__, status);
+ if (status & FE_HAS_LOCK) {
+ mCurSigEv.mCurSigStaus = FEEvent::EVENT_FE_HAS_SIG;
+ mCurSigEv.mCurFreq = 0;
+ mpObserver->onEvent(mCurSigEv);
+ } else if (status & FE_TIMEDOUT) {
+ mCurSigEv.mCurSigStaus = FEEvent::EVENT_FE_NO_SIG;
+ mCurSigEv.mCurFreq = 0;
+ mpObserver->onEvent(mCurSigEv);
+ }
+ return 0;
}
int CFrontEnd::stdEnumToCvbsFmt (int videoStd, int audioStd)
{
- tvin_sig_fmt_e cvbs_fmt = TVIN_SIG_FMT_NULL;
-
- if ( videoStd == CC_ATV_VIDEO_STD_PAL ) {
- if ( audioStd == CC_ATV_AUDIO_STD_DK ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_PAL_I;
- } else if ( audioStd == CC_ATV_AUDIO_STD_I ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_PAL_I;
- } else if ( audioStd == CC_ATV_AUDIO_STD_BG ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_PAL_I;
- } else if ( audioStd == CC_ATV_AUDIO_STD_M ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_PAL_M;
- }
- } else if ( videoStd == CC_ATV_VIDEO_STD_NTSC ) {
- if ( audioStd == CC_ATV_AUDIO_STD_DK ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_NTSC_M;
- } else if ( audioStd == CC_ATV_AUDIO_STD_I ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_NTSC_M;
- } else if ( audioStd == CC_ATV_AUDIO_STD_BG ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_NTSC_M;
- } else if ( audioStd == CC_ATV_AUDIO_STD_M ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_NTSC_M;
- }
- } else if ( videoStd == CC_ATV_VIDEO_STD_SECAM ) {
- if ( audioStd == CC_ATV_AUDIO_STD_DK ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_SECAM;
- } else if ( audioStd == CC_ATV_AUDIO_STD_I ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_SECAM;
- } else if ( audioStd == CC_ATV_AUDIO_STD_BG ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_SECAM;
- } else if ( audioStd == CC_ATV_AUDIO_STD_M ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_SECAM;
- } else if ( audioStd == CC_ATV_AUDIO_STD_L ) {
- cvbs_fmt = TVIN_SIG_FMT_CVBS_SECAM;
- }
- } else if (CC_ATV_VIDEO_STD_AUTO == videoStd) {
- cvbs_fmt = TVIN_SIG_FMT_NULL;
- }
- return cvbs_fmt;
+ tvin_sig_fmt_e cvbs_fmt = TVIN_SIG_FMT_NULL;
+
+ if ( videoStd == CC_ATV_VIDEO_STD_PAL ) {
+ if ( audioStd == CC_ATV_AUDIO_STD_DK ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_PAL_I;
+ } else if ( audioStd == CC_ATV_AUDIO_STD_I ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_PAL_I;
+ } else if ( audioStd == CC_ATV_AUDIO_STD_BG ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_PAL_I;
+ } else if ( audioStd == CC_ATV_AUDIO_STD_M ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_PAL_M;
+ }
+ } else if ( videoStd == CC_ATV_VIDEO_STD_NTSC ) {
+ if ( audioStd == CC_ATV_AUDIO_STD_DK ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_NTSC_M;
+ } else if ( audioStd == CC_ATV_AUDIO_STD_I ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_NTSC_M;
+ } else if ( audioStd == CC_ATV_AUDIO_STD_BG ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_NTSC_M;
+ } else if ( audioStd == CC_ATV_AUDIO_STD_M ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_NTSC_M;
+ }
+ } else if ( videoStd == CC_ATV_VIDEO_STD_SECAM ) {
+ if ( audioStd == CC_ATV_AUDIO_STD_DK ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_SECAM;
+ } else if ( audioStd == CC_ATV_AUDIO_STD_I ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_SECAM;
+ } else if ( audioStd == CC_ATV_AUDIO_STD_BG ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_SECAM;
+ } else if ( audioStd == CC_ATV_AUDIO_STD_M ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_SECAM;
+ } else if ( audioStd == CC_ATV_AUDIO_STD_L ) {
+ cvbs_fmt = TVIN_SIG_FMT_CVBS_SECAM;
+ }
+ } else if(CC_ATV_VIDEO_STD_AUTO == videoStd) {
+ cvbs_fmt = TVIN_SIG_FMT_NULL;
+ }
+ return cvbs_fmt;
}
int CFrontEnd::ClearAnalogFrontEnd()
{
- return this->setPara ( FE_ANALOG, 44250000, V4L2_COLOR_STD_PAL | V4L2_STD_PAL_DK, 0 );
+ return this->setPara ( FE_ANALOG, 44250000, V4L2_COLOR_STD_PAL | V4L2_STD_PAL_DK, 0 );
}
diff --git a/tvapi/libtv/tv/CFrontEnd.h b/tvapi/libtv/tv/CFrontEnd.h
index d562cfc..b3ce6f4 100644
--- a/tvapi/libtv/tv/CFrontEnd.h
+++ b/tvapi/libtv/tv/CFrontEnd.h
@@ -13,148 +13,145 @@ extern "C" {
}
//for app
typedef enum atv_audo_std_s {
- CC_ATV_AUDIO_STD_START = 0,
- CC_ATV_AUDIO_STD_DK = 0,
- CC_ATV_AUDIO_STD_I,
- CC_ATV_AUDIO_STD_BG,
- CC_ATV_AUDIO_STD_M,
- CC_ATV_AUDIO_STD_L,
- CC_ATV_AUDIO_STD_AUTO,
- CC_ATV_AUDIO_STD_END = CC_ATV_AUDIO_STD_AUTO,
- CC_ATV_AUDIO_STD_MUTE,
+ CC_ATV_AUDIO_STD_START = 0,
+ CC_ATV_AUDIO_STD_DK = 0,
+ CC_ATV_AUDIO_STD_I,
+ CC_ATV_AUDIO_STD_BG,
+ CC_ATV_AUDIO_STD_M,
+ CC_ATV_AUDIO_STD_L,
+ CC_ATV_AUDIO_STD_AUTO,
+ CC_ATV_AUDIO_STD_END = CC_ATV_AUDIO_STD_AUTO,
+ CC_ATV_AUDIO_STD_MUTE,
} atv_audio_std_t;
//for app
typedef enum atv_video_std_s {
- CC_ATV_VIDEO_STD_START = 0,
- CC_ATV_VIDEO_STD_AUTO = 0,
- CC_ATV_VIDEO_STD_PAL,
- CC_ATV_VIDEO_STD_NTSC,
- CC_ATV_VIDEO_STD_SECAM,
- CC_ATV_VIDEO_STD_END = CC_ATV_VIDEO_STD_SECAM,
+ CC_ATV_VIDEO_STD_START = 0,
+ CC_ATV_VIDEO_STD_AUTO = 0,
+ CC_ATV_VIDEO_STD_PAL,
+ CC_ATV_VIDEO_STD_NTSC,
+ CC_ATV_VIDEO_STD_SECAM,
+ CC_ATV_VIDEO_STD_END = CC_ATV_VIDEO_STD_SECAM,
} atv_video_std_t;
//from kernel
/*COLOR MODULATION TYPE*/
-static const v4l2_std_id V4L2_COLOR_STD_PAL = ((v4l2_std_id)0x04000000);
+static const v4l2_std_id V4L2_COLOR_STD_PAL = ((v4l2_std_id)0x04000000);
static const v4l2_std_id V4L2_COLOR_STD_NTSC = ((v4l2_std_id)0x08000000);
-static const v4l2_std_id V4L2_COLOR_STD_SECAM = ((v4l2_std_id)0x10000000);
+static const v4l2_std_id V4L2_COLOR_STD_SECAM = ((v4l2_std_id)0x10000000);
//virtual
static const v4l2_std_id V4L2_COLOR_STD_AUTO = ((v4l2_std_id)0x02000000);
typedef struct frontend_para_set_s {
- fe_type_t mode;
- int freq;
- atv_video_std_t videoStd;
- atv_audio_std_t audioStd;
- int para1;
- int para2;
+ fe_type_t mode;
+ int freq;
+ atv_video_std_t videoStd;
+ atv_audio_std_t audioStd;
+ int para1;
+ int para2;
} frontend_para_set_t;
typedef struct atv_channel_info_s {
- int finefreq;
- atv_video_std_t videoStd;
- atv_audio_std_t audioStd;
- int isAutoStd;
+ int finefreq;
+ atv_video_std_t videoStd;
+ atv_audio_std_t audioStd;
+ int isAutoStd;
} atv_channel_info_t;
typedef struct dtv_channel_info_s {
- int strength;
- int quality;
- int ber;
+ int strength;
+ int quality;
+ int ber;
} dtv_channel_info_t;
typedef struct channel_info_s {
- int freq;
- union {
- atv_channel_info_t atvChanInfo;
- dtv_channel_info_t dtvChanInfo;
- } uInfo;
+ int freq;
+ union {
+ atv_channel_info_t atvChanInfo;
+ dtv_channel_info_t dtvChanInfo;
+ } uInfo;
} channel_info_t;
-class CFrontEnd
-{
+class CFrontEnd {
public:
- static const int FE_DEV_ID = 0;
- static const int AFC_RANGE = 1000000;
-
- CFrontEnd();
- ~CFrontEnd();
-
- int Open(int mode);
- int Close();
- int setMode(int mode);
- int fineTune(int freq);
- int formatATVFreq(int freq);
- int GetTSSource(AM_DMX_Source_t *src);
- int setPara(int frequency, int symbol_rate, int modulation, int bandwidth);
- int ClearAnalogFrontEnd();
- int autoLoadFE();
-
- static int stdAndColorToAudioEnum(int std);
- static int stdAndColorToVideoEnum(int std);
- static int printVideoStdStr(int videoStd, char strBuffer[], int buff_size);
- static int printAudioStdStr(int audioStd, char strBuffer[], int buff_size);
- static v4l2_std_id enumToStdAndColor(int videoStd, int audioStd);
- static int stdEnumToCvbsFmt (int videoStd, int audioStd);
- class FEEvent: public CTvEv
- {
- public:
- //static const int EVENT_FE_HAS_SIG = 0X01; /* found something above the noise level */
- //static const int EVENT_FE_HAS_CARRIER = 0x02; /* found a DVB signal */
- //static const int EVENT_FE_HAS_VITERBI = 0X04; /* FEC is stable */
- //static const int EVENT_FE_HAS_SYNC = 0X08; /* found sync bytes */
- // static const int EVENT_FE_HAS_LOCK = 0X10; /* everything's working... */
- //static const int EVENT_FE_HAS_TIMEOUT = 0X20; /* no lock within the last ~2 seconds */
- //static const int EVENT_FE_REINIT = 0X40; /* frontend was reinitialized, */
- static const int EVENT_FE_HAS_SIG = 0x01;
- static const int EVENT_FE_NO_SIG = 0x02;
- static const int EVENT_FE_INIT = 0x03;
-
- FEEvent(): CTvEv(CTvEv::TV_EVENT_SIGLE_DETECT)
- {
- }
- ~FEEvent()
- {
- }
- int mCurSigStaus;
- int mCurFreq;
- };
-
- class IObserver
- {
- public:
- IObserver() {};
- virtual ~IObserver() {};
- virtual void onEvent(const FEEvent &ev) = 0;
- };
-
- int setObserver(IObserver *ob)
- {
- mpObserver = ob;
- return 0;
- }
-
- int getSNR();
- int getBER();
- int getInfo();
- int getStatus();
- int checkStatusOnce();
- int getStrength();
- int setCvbsAmpOut(int amp);
- int setThreadDelay(int delay) ;
- int getPara(frontend_para_set_t *fpara);
- int lock(int frequency, int symbol_rate, int modulation, int bandwidth);
+ static const int FE_DEV_ID = 0;
+ static const int AFC_RANGE = 1000000;
+
+ CFrontEnd();
+ ~CFrontEnd();
+
+ int Open(int mode);
+ int Close();
+ int setMode(int mode);
+ int fineTune(int freq);
+ int formatATVFreq(int freq);
+ int GetTSSource(AM_DMX_Source_t *src);
+ int setPara(int frequency, int symbol_rate, int modulation, int bandwidth);
+ int ClearAnalogFrontEnd();
+ int autoLoadFE();
+
+ static int stdAndColorToAudioEnum(int std);
+ static int stdAndColorToVideoEnum(int std);
+ static int printVideoStdStr(int videoStd, char strBuffer[], int buff_size);
+ static int printAudioStdStr(int audioStd, char strBuffer[], int buff_size);
+ static v4l2_std_id enumToStdAndColor(int videoStd, int audioStd);
+ static int stdEnumToCvbsFmt (int videoStd, int audioStd);
+ class FEEvent: public CTvEv {
+ public:
+ //static const int EVENT_FE_HAS_SIG = 0X01; /* found something above the noise level */
+ //static const int EVENT_FE_HAS_CARRIER = 0x02; /* found a DVB signal */
+ //static const int EVENT_FE_HAS_VITERBI = 0X04; /* FEC is stable */
+ //static const int EVENT_FE_HAS_SYNC = 0X08; /* found sync bytes */
+ // static const int EVENT_FE_HAS_LOCK = 0X10; /* everything's working... */
+ //static const int EVENT_FE_HAS_TIMEOUT = 0X20; /* no lock within the last ~2 seconds */
+ //static const int EVENT_FE_REINIT = 0X40; /* frontend was reinitialized, */
+ static const int EVENT_FE_HAS_SIG = 0x01;
+ static const int EVENT_FE_NO_SIG = 0x02;
+ static const int EVENT_FE_INIT = 0x03;
+
+ FEEvent(): CTvEv(CTvEv::TV_EVENT_SIGLE_DETECT)
+ {
+ }
+ ~FEEvent()
+ {
+ }
+ int mCurSigStaus;
+ int mCurFreq;
+ };
+
+ class IObserver {
+ public:
+ IObserver() {};
+ virtual ~IObserver() {};
+ virtual void onEvent(const FEEvent &ev) = 0;
+ };
+
+ int setObserver(IObserver *ob)
+ {
+ mpObserver = ob;
+ return 0;
+ }
+
+ int getSNR();
+ int getBER();
+ int getInfo();
+ int getStatus();
+ int checkStatusOnce();
+ int getStrength();
+ int setCvbsAmpOut(int amp);
+ int setThreadDelay(int delay) ;
+ int getPara(frontend_para_set_t *fpara);
+ int lock(int frequency, int symbol_rate, int modulation, int bandwidth);
private:
- int mFrontDevID;
- int mDemuxDevID;
- int mTvPlayDevID;
- int mCurFineFreq;
- IObserver *mpObserver;
- FEEvent mCurSigEv;
- int mCurMode;
- static void dmd_fend_callback(int dev_no, int event_type, void *param, void *user_data);
+ int mFrontDevID;
+ int mDemuxDevID;
+ int mTvPlayDevID;
+ int mCurFineFreq;
+ IObserver *mpObserver;
+ FEEvent mCurSigEv;
+ int mCurMode;
+ static void dmd_fend_callback(long dev_no, int event_type, void *param, void *user_data);
};
#endif // ANDROID_FRONTEND_H
diff --git a/tvapi/libtv/tv/CTv.cpp b/tvapi/libtv/tv/CTv.cpp
index a8574bd..202efdd 100644
--- a/tvapi/libtv/tv/CTv.cpp
+++ b/tvapi/libtv/tv/CTv.cpp
@@ -1,5384 +1,5371 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTv.cpp
-// @ Date : 2013-11
-// @ Author :
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <am_epg.h>
-#include <am_mem.h>
-#include "CTvDatabase.h"
-#include <stdlib.h>
-#include <string.h>
-#include <malloc.h>
-#include <pthread.h>
-#include <sys/types.h>
-#include <errno.h>
-#include <dlfcn.h>
-#include <cutils/properties.h>
-#include <cutils/log.h>
-#include <cutils/android_reboot.h>
-#include <utils/threads.h>
-#include <time.h>
-#include <sys/prctl.h>
-#include <getopt.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#ifdef ANDROID
-#include <termios.h>
-#endif
-#include <string.h>
-#include <signal.h>
-
-#include "../version/version.h"
-#include "../tvsetting/CTvSetting.h"
-#include "../tvutils/tvutils.h"
-#include "../tvconfig/tvconfig.h"
-#include "../tvutils/CFile.h"
-#include <hardware_legacy/power.h>
-#include "../tvutils/serial_operate.h"
-
-extern "C" {
-#include "am_ver.h"
-#include "am_misc.h"
-#include "am_debug.h"
-#include "am_fend.h"
-}
-
-#include <math.h>
-#include <sys/ioctl.h>
-
-#include "CTv.h"
-
-#define LOG_TAG "CTv"
-
-using namespace android;
-
-// Called each time a message is logged.
-static void sqliteLogCallback(void *data, int iErrCode, const char *zMsg)
-{
- LOGD( "showbo sqlite (%d) %s\n", iErrCode, zMsg);
-}
-
-
-
-CTv::CTv() : mSigDetectThread ( &mTvin ), mSourceConnectDetectThread(&mTvin), mHDMIRxCEC ( &mTvin ), mTvScanner ( &mTvin ), mTvMsgQueue(this), mAutoBackLight( &mVpp, &mTvin )
-{
- //mpClient = pClient;
- //copy file to param
- if ( Tv_Utils_IsFileExist ( TV_CONFIG_FILE_SYSTEM_PATH ) == 0 ) {
- if ( Tv_Utils_IsFileExist ( TV_CONFIG_FILE_PARAM_PATH ) != 0 ) {
- CFile file ( TV_CONFIG_FILE_SYSTEM_PATH );
-
- if ( file.copyTo ( TV_CONFIG_FILE_PARAM_PATH ) != 0 ) {
- LOGE ( "%s, copy file = %s , error", __FUNCTION__, TV_CONFIG_FILE_PARAM_PATH );
- }
- }
- }
-
- if ( Tv_Utils_IsFileExist ( TV_CHANNEL_LIST_SYSTEM_PATH ) == 0 ) {
- if ( Tv_Utils_IsFileExist ( TV_CHANNEL_LIST_PARAM_PATH ) != 0 ) {
- CFile file ( TV_CHANNEL_LIST_SYSTEM_PATH );
-
- if ( file.copyTo ( TV_CHANNEL_LIST_PARAM_PATH ) != 0 ) {
- LOGE ( "%s, copy file = %s , error", __FUNCTION__, TV_CHANNEL_LIST_PARAM_PATH );
- }
- }
- }
-
- //ssm
- if ( Tv_Utils_IsFileExist ( TV_SSM_DATA_SYSTEM_PATH ) == 0 ) {
- if ( Tv_Utils_IsFileExist ( TV_SSM_DATA_PARAM_PATH ) != 0 ) {
- CFile file ( TV_SSM_DATA_SYSTEM_PATH );
-
- if ( file.copyTo ( TV_SSM_DATA_PARAM_PATH ) != 0 ) {
- LOGE ( "%s, copy file = %s , error", __FUNCTION__, TV_SSM_DATA_PARAM_PATH );
- }
- }
- }
-
- AM_EVT_Init();
- mTvEpg.setObserver ( &mTvMsgQueue );
- mpObserver = NULL;
- audio_sr = 0;
- mIsFbc = false;
- dtv_auto_3d_flag = 0;
- m_autoset_displayfreq = false;
- m_cur_set_info_fmt = TVIN_SIG_FMT_CVBS_PAL_I;
-
- tv_config_load ( TV_CONFIG_FILE_PATH );
- sqlite3_config (SQLITE_CONFIG_SERIALIZED);
- sqlite3_config(SQLITE_CONFIG_LOG, &sqliteLogCallback, (void *)1);
- sqlite3_soft_heap_limit(8 * 1024 * 1024);
- // Initialize SQLite.
- sqlite3_initialize();
- CTvDatabase::GetTvDb()->InitTvDb ( TV_DB_PATH );
- if ( CTvDimension::isDimensionTblExist() == false ) {
- CTvDimension::builtinAtscDimensions();
- }
-
- CTvSettingLoad();
-
- mDtvScanRunningStatus = DTV_SCAN_RUNNING_NORMAL;
-
- m_sig_stable_nums = 0;
- m_is_set_hdmi_edid = false;
- m_cur_playing_prog_id = -1;
-
- mSigDetectThread.setObserver ( this );
- mSourceConnectDetectThread.setObserver ( this );
- mHDMIRxCEC.setObserver(this);
- mFrontDev.setObserver ( &mTvMsgQueue );
- mpUpgradeFBC = NULL;
- if (GetPlatformHaveFBCFlag() == 1) {
- mIsFbc = true;
-
- mpUpgradeFBC = new CUpgradeFBC();
- mpUpgradeFBC->setObserver(this);
- }
- mSerialA.setObserver(this);
- mSerialB.setObserver(this);
- mSerialC.setObserver(this);
- mAv.setObserver(&mTvMsgQueue);
- mTvAction = mTvAction & TV_ACTION_NULL;
- mTvStatus = TV_INIT_ED;
-
- print_version_info();
-};
-
-CTv::~CTv()
-{
- int iRet;
- mpObserver = NULL;
- CTvSettingunLoad();
- CTvDatabase::deleteTvDb();
- tv_config_unload();
- mAv.Close();
- mTvStatus = TV_INIT_ED;
- mFrontDev.Close();
-
- if (mpUpgradeFBC != NULL) {
- delete mpUpgradeFBC;
- mpUpgradeFBC = NULL;
- }
-}
-
-void CTv::onEvent ( const CTvScanner::ScannerEvent &ev )
-{
- LOGD ( "%s, CTv::onEvent lockStatus = %d type = %d\n", __FUNCTION__, ev.mLockedStatus, ev.mType );
-
- if ( mDtvScanRunningStatus == DTV_SCAN_RUNNING_ANALYZE_CHANNEL ) {
- if ( ev.mType == CTvScanner::ScannerEvent::EVENT_SCAN_END ) {
- CMessage msg;
- msg.mType = CTvMsgQueue::TV_MSG_STOP_ANALYZE_TS;
- msg.mpData = this;
- mTvMsgQueue.sendMsg ( msg );
- } else if ( ev.mType == CTvScanner::ScannerEvent::EVENT_STORE_END ) {
- CTvEpg::EpgEvent epgev;
- epgev.type = CTvEpg::EpgEvent::EVENT_CHANNEL_UPDATE_END;
- mDtvScanRunningStatus = DTV_SCAN_RUNNING_NORMAL;
- sendTvEvent ( epgev );
- }
- } else {
- sendTvEvent ( ev );
- }
-}
-
-void CTv::onEvent ( const CFrontEnd::FEEvent &ev )
-{
- LOGD ( "%s, FE event type = %d tvaction=%x", __FUNCTION__, ev.mCurSigStaus, mTvAction);
- if (mTvAction & TV_ACTION_SCANNING) return;
-
- //å‰ç«¯äº‹ä»¶å“应处ç†
- if ( ev.mCurSigStaus == CFrontEnd::FEEvent::EVENT_FE_HAS_SIG ) { //作为信å·ç¨³å®š
- if (/*m_source_input == SOURCE_TV || */m_source_input == SOURCE_DTV && (mTvAction & TV_ACTION_PLAYING)) { //atv and other tvin source not to use it, and if not playing, not use have sig
- Vpp_SetDisplayMode ( mVpp.Tv_GetDisplayMode ( CTvin::Tvin_SourceInputToSourceInputType(m_source_input) ), CTvin::Tvin_SourceInputToSourceInputType(m_source_input), mSigDetectThread.getCurSigInfo().fmt);
- if ( m_win_mode == PREVIEW_WONDOW ) {
- mAv.setVideoAxis(m_win_pos.x1, m_win_pos.y1, m_win_pos.x2, m_win_pos.y2);
- mAv.setVideoScreenMode ( CAv::VIDEO_WIDEOPTION_FULL_STRETCH );
- }
-
- if ( m_autoset_displayfreq) {
- mTvin.VDIN_SetDisplayVFreq ( 50, mAv.getVideoDisplayResolution() , mIsFbc);
- }
- TvEvent::SignalInfoEvent ev;
- ev.mStatus = TVIN_SIG_STATUS_STABLE;
- ev.mTrans_fmt = TVIN_TFMT_2D;
- ev.mFmt = TVIN_SIG_FMT_NULL;
- ev.mReserved = 0;
- sendTvEvent ( ev );
- mAv.EnableVideoAuto();
- mTvAudio.SetAudioMuteForTv ( CC_AUDIO_UNMUTE );
- }
- } else if ( ev.mCurSigStaus == CFrontEnd::FEEvent::EVENT_FE_NO_SIG ) { //作为信å·æ¶ˆå¤±
- if (/*m_source_input == SOURCE_TV || */m_source_input == SOURCE_DTV && (mTvAction & TV_ACTION_PLAYING)) { //just playing
- mAv.DisableVideoWithBlueColor();
- //
- TvEvent::SignalInfoEvent ev;
- ev.mStatus = TVIN_SIG_STATUS_NOSIG;
- ev.mTrans_fmt = TVIN_TFMT_2D;
- ev.mFmt = TVIN_SIG_FMT_NULL;
- ev.mReserved = 0;
- sendTvEvent ( ev );
- }
- }
-
-}
-
-void CTv::onEvent ( const CTvEpg::EpgEvent &ev )
-{
- switch ( ev.type ) {
- case CTvEpg::EpgEvent::EVENT_TDT_END:
- LOGD ( "%s, CTv::onEvent epg time = %ld", __FUNCTION__, ev.time );
- mTvTime.setTime ( ev.time );
- break;
-
- case CTvEpg::EpgEvent::EVENT_CHANNEL_UPDATE: {
- LOGD ( "%s, CTv:: onEvent channel update", __FUNCTION__ );
- CMessage msg;
- msg.mType = CTvMsgQueue::TV_MSG_START_ANALYZE_TS;
- msg.mpData = this;
- mCurAnalyzeTsChannelID = ev.channelID;
- mTvMsgQueue.sendMsg ( msg );
- break;
- }
-
- default:
- break;
- }
-
- sendTvEvent ( ev );
-}
-
-
-void CTv::onEvent(const CAv::AVEvent &ev)
-{
- LOGD("AVEvent = %d", ev.type);
- switch ( ev.type ) {
- case CAv::AVEvent::EVENT_AV_STOP: {
- break;
- }
- case CAv::AVEvent::EVENT_AV_RESUEM: {
- mAv.EnableVideoAuto();
- TvEvent::AVPlaybackEvent AvPlayBackEvt;
- AvPlayBackEvt.mMsgType = TvEvent::AVPlaybackEvent::EVENT_AV_PLAYBACK_RESUME;
- AvPlayBackEvt.mProgramId = ( int ) ev.param;
- sendTvEvent(AvPlayBackEvt );
- break;
- }
- case CAv::AVEvent::EVENT_AV_SCAMBLED: {
- mAv.DisableVideoWithBlueColor();
- TvEvent::AVPlaybackEvent AvPlayBackEvt;
- AvPlayBackEvt.mMsgType = TvEvent::AVPlaybackEvent::EVENT_AV_SCAMBLED;
- AvPlayBackEvt.mProgramId = ( int ) ev.param;
- sendTvEvent(AvPlayBackEvt );
- break;
- }
- case CAv::AVEvent::EVENT_AV_UNSUPPORT: {
- LOGD("To AVS or AVS+ format");//just avs format, not unsupport, and avs avs+
- break;
- }
- default:
- break;
- }
-}
-
-CTv::CTvMsgQueue::CTvMsgQueue(CTv *tv)
-{
- mpTv = tv;
-}
-
-CTv::CTvMsgQueue::~CTvMsgQueue()
-{
-}
-
-void CTv::CTvMsgQueue::handleMessage ( CMessage &msg )
-{
- LOGD ( "%s, CTv::CTvMsgQueue::handleMessage type = %d", __FUNCTION__, msg.mType );
-
- switch ( msg.mType ) {
- case TV_MSG_COMMON:
- break;
-
- case TV_MSG_STOP_ANALYZE_TS: {
- //mpTv->Tv_Stop_Analyze_Ts();
- break;
- }
-
- case TV_MSG_START_ANALYZE_TS: {
- //mpTv->Tv_Start_Analyze_Ts ( pTv->mCurAnalyzeTsChannelID );
- break;
- }
-
- case TV_MSG_CHECK_FE_DELAY: {
- mpTv->mFrontDev.checkStatusOnce();
- break;
- }
- case TV_MSG_AV_EVENT: {
- mpTv->onEvent(*((CAv::AVEvent *)(msg.mpPara)));
- break;
- }
- case TV_MSG_FE_EVENT: {
- mpTv->onEvent(*((CFrontEnd::FEEvent *)(msg.mpPara)));
- break;
- }
- case TV_MSG_SCAN_EVENT: {
- mpTv->onEvent(*((CTvScanner::ScannerEvent *)(msg.mpPara)));
- break;
- }
- case TV_MSG_EPG_EVENT: {
- mpTv->onEvent(*((CTvEpg::EpgEvent *)(msg.mpPara)));
- break;
- }
-
- default:
- break;
- }
-}
-
-
-void CTv::CTvMsgQueue::onEvent ( const CTvScanner::ScannerEvent &ev )
-{
- CMessage msg;
- msg.mDelayMs = 0;
- msg.mType = CTvMsgQueue::TV_MSG_SCAN_EVENT;
- memcpy(msg.mpPara, &ev, sizeof(ev));
- this->sendMsg ( msg );
-}
-
-void CTv::CTvMsgQueue::onEvent ( const CFrontEnd::FEEvent &ev )
-{
- CMessage msg;
- msg.mDelayMs = 0;
- msg.mType = CTvMsgQueue::TV_MSG_FE_EVENT;
- memcpy(msg.mpPara, &ev, sizeof(ev));
- this->sendMsg ( msg );
-}
-
-void CTv::CTvMsgQueue::onEvent ( const CTvEpg::EpgEvent &ev )
-{
- CMessage msg;
- msg.mDelayMs = 0;
- msg.mType = CTvMsgQueue::TV_MSG_EPG_EVENT;
- memcpy(msg.mpPara, &ev, sizeof(ev));
- this->sendMsg ( msg );
-}
-
-
-void CTv::CTvMsgQueue::onEvent(const CAv::AVEvent &ev)
-{
- CMessage msg;
- msg.mDelayMs = 0;
- msg.mType = CTvMsgQueue::TV_MSG_AV_EVENT;
- memcpy(msg.mpPara, &ev, sizeof(ev));
- this->sendMsg ( msg );
-}
-
-int CTv::setTvObserver ( TvIObserver *ob )
-{
- mpObserver = ob;
- return 0;
-}
-
-void CTv::sendTvEvent ( const CTvEv &ev )
-{
- //AutoMutex lock(mLock);
- /* send sigstate to AutoBackLight */
- if (ev.getEvType() == CTvEv::TV_EVENT_SIGLE_DETECT) {
- TvEvent::SignalInfoEvent *pEv = (TvEvent::SignalInfoEvent *)(&ev);
- if (pEv->mStatus == TVIN_SIG_STATUS_STABLE) {
- mAutoBackLight.updateSigState(mAutoBackLight.SIG_STATE_STABLE);
- } else {
- mAutoBackLight.updateSigState(mAutoBackLight.SIG_STATE_NOSIG);
- }
- }
-
- LOGD ( "%s, tvaction=%x", __FUNCTION__, mTvAction);
- if ((mTvAction & TV_ACTION_SCANNING) && (ev.getEvType() == CTvEv::TV_EVENT_SIGLE_DETECT)) {
- LOGD("%s, when scanning, not send sig detect event", __FUNCTION__);
- return;
- }
- if ( mpObserver != NULL ) {
- mpObserver->onTvEvent ( ev );
- }
-
- return;
-}
-
-int CTv::ClearAnalogFrontEnd()
-{
- return mFrontDev.ClearAnalogFrontEnd ();
-}
-
-int CTv::dtvAutoScan()
-{
- AutoMutex lock ( mLock );
- mTvAction = mTvAction | TV_ACTION_SCANNING;
- mTvEpg.leaveChannel();
- mAv.StopTS ();
- mAv.DisableVideoWithBlueColor();
- CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_DTV );
- CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_RADIO );
- CTvEvent::CleanAllEvent();
- mTvScanner.setObserver ( &mTvMsgQueue );
- mDtvScanRunningStatus = DTV_SCAN_RUNNING_NORMAL;
- mFrontDev.Open(FE_DTMB);
- mTvScanner.autoDtmbScan();//dtmb
- return 0;
-}
-
-int CTv::dtvCleanProgramByFreq ( int freq )
-{
- int iOutRet = 0;
- CTvChannel channel;
- iOutRet = CTvChannel::SelectByFreq ( freq, channel );
- if ( -1 == iOutRet ) {
- LOGD ( "%s, Warnning: Current Freq not have program info in the ts_table\n", __FUNCTION__ );
- }
-
- iOutRet == CTvProgram::deleteChannelsProgram ( channel );
- return iOutRet;
-}
-
-int CTv::dtvManualScan (int beginFreq, int endFreq, int modulation)
-{
- AutoMutex lock ( mLock );
- mTvAction = mTvAction | TV_ACTION_SCANNING;
- mTvEpg.leaveChannel();
- mAv.StopTS ();
- mAv.DisableVideoWithBlueColor();
- CTvChannel::DeleteBetweenFreq(beginFreq, endFreq);
- mTvScanner.setObserver ( &mTvMsgQueue );
- mDtvScanRunningStatus = DTV_SCAN_RUNNING_NORMAL;
- mFrontDev.Open(FE_DTMB);
- int iOutRet = mTvScanner.manualDtmbScan (beginFreq, endFreq, modulation); //dtmb
- return iOutRet;
-}
-
-int CTv::dtvAutoScanAtscLock(int attenna, int videoStd, int audioStd)
-{
- //showboz
- int minScanFreq, maxScanFreq, vStd, aStd;
- vStd = CC_ATV_VIDEO_STD_PAL;
- aStd = CC_ATV_AUDIO_STD_DK;
- v4l2_std_id stdAndColor = mFrontDev.enumToStdAndColor(vStd, aStd);
-
- AutoMutex lock ( mLock );
- mTvAction = mTvAction | TV_ACTION_SCANNING;
- mTvEpg.leaveChannel();
- mAv.StopTS ();
- mAv.DisableVideoWithBlueColor();
- CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_DTV );
- CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_RADIO );
- CTvEvent::CleanAllEvent();
- mTvScanner.setObserver ( &mTvMsgQueue );
- mDtvScanRunningStatus = DTV_SCAN_RUNNING_NORMAL;
- mFrontDev.Open(FE_ATSC);
- mTvScanner.autoAtscScan(CTvScanner::AM_ATSC_ATTENNA_TYPE_AIR, stdAndColor);//dtmb
- return 0;
-}
-
-//searchType 0:not 256 1:is 256 Program
-int CTv::atvAutoScan(int videoStd, int audioStd, int searchType)
-{
- int minScanFreq, maxScanFreq, vStd, aStd;
- AutoMutex lock ( mLock );
- mAv.DisableVideoWithBlueColor();
- mTvAction = mTvAction | TV_ACTION_SCANNING;
- mTvScanner.setObserver ( &mTvMsgQueue );
- mTvAudio.SetAudioMuteForTv ( CC_AUDIO_MUTE );
- getATVMinMaxFreq (&minScanFreq, &maxScanFreq );
- if ( minScanFreq == 0 || maxScanFreq == 0 || minScanFreq > maxScanFreq ) {
- LOGE ( "%s, auto scan freq set is error min=%d, max=%d", __FUNCTION__, minScanFreq, maxScanFreq );
- return -1;
- }
- //if set std null AUTO, use default PAL/DK
- //if(videoStd == CC_ATV_VIDEO_STD_AUTO) {
- // vStd = CC_ATV_VIDEO_STD_PAL;
- // aStd = CC_ATV_AUDIO_STD_DK;
- //} else {
- vStd = videoStd;
- aStd = audioStd;
- //}
- tvin_port_t source_port = mTvin.Tvin_GetSourcePortBySourceInput(SOURCE_TV);
- mTvin.VDIN_OpenPort ( source_port );
- LOGD("%s, atv auto scan vstd=%d, astd=%d ", __FUNCTION__, vStd, aStd);
- v4l2_std_id stdAndColor = mFrontDev.enumToStdAndColor(vStd, aStd);
-
- int fmt = CFrontEnd::stdEnumToCvbsFmt (vStd, aStd);
- mTvin.AFE_SetCVBSStd ( ( tvin_sig_fmt_t ) fmt );
- m_cur_set_info_fmt = ( tvin_sig_fmt_t )fmt;
-
- if (searchType == 0) {
- CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_ATV );
- } else if (searchType == 1) { //type for skyworth, and insert 256 prog, and just update ts table
- }
- minScanFreq = mFrontDev.formatATVFreq ( minScanFreq );
- maxScanFreq = mFrontDev.formatATVFreq ( maxScanFreq );
- LOGD("%s, atv auto scan vstd=%d, astd=%d stdandcolor=%lld", __FUNCTION__, vStd, aStd, stdAndColor);
- mSigDetectThread.setVdinNoSigCheckKeepTimes(1000, false);
- mFrontDev.Open(FE_ANALOG);
- mTvScanner.autoAtvScan ( minScanFreq, maxScanFreq, stdAndColor, searchType );
- return 0;
-}
-
-int CTv::clearAllProgram(int arg0)
-{
- CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_ATV );
- CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_TV );
- CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_DTV );
- CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_RADIO);
- return 0;
-}
-
-int CTv::atvMunualScan ( int startFreq, int endFreq, int videoStd, int audioStd, int store_Type , int channel_num )
-{
- int minScanFreq, maxScanFreq, vStd, aStd;
-
- minScanFreq = mFrontDev.formatATVFreq ( startFreq );
- maxScanFreq = mFrontDev.formatATVFreq ( endFreq );
- if ( minScanFreq == 0 || maxScanFreq == 0 ) {
- LOGE ( "%s, munual scan freq set is error min=%d, max=%d", __FUNCTION__, minScanFreq, maxScanFreq );
- return -1;
- }
-
- //if set std null AUTO, use default PAL/DK
- //if(videoStd == CC_ATV_VIDEO_STD_AUTO) {
- // vStd = CC_ATV_VIDEO_STD_PAL;
- // aStd = CC_ATV_AUDIO_STD_DK;
- // } else {
- vStd = videoStd;
- aStd = audioStd;
- // }
-
- AutoMutex lock ( mLock );
- mAv.DisableVideoWithBlueColor();
- mTvAction = mTvAction | TV_ACTION_SCANNING;
- mTvScanner.setObserver ( &mTvMsgQueue );
-
- mTvAudio.SetAudioMuteForTv ( CC_AUDIO_MUTE );
- v4l2_std_id stdAndColor = mFrontDev.enumToStdAndColor(vStd, aStd);
-
-
- tvin_port_t source_port = mTvin.Tvin_GetSourcePortBySourceInput(SOURCE_TV);
- mTvin.VDIN_OpenPort ( source_port );
-
- int fmt = CFrontEnd::stdEnumToCvbsFmt (vStd, aStd);
- mTvin.AFE_SetCVBSStd ( ( tvin_sig_fmt_t ) fmt );
- m_cur_set_info_fmt = ( tvin_sig_fmt_t )fmt;
- LOGD("%s, atv manual scan vstd=%d, astd=%d stdandcolor=%lld", __FUNCTION__, videoStd, audioStd, stdAndColor);
- mFrontDev.Open(FE_ANALOG);
- return mTvScanner.ATVManualScan ( minScanFreq, maxScanFreq, stdAndColor, store_Type, channel_num);
-}
-
-int CTv::getVideoFormatInfo ( int *pWidth, int *pHeight, int *pFPS, int *pInterlace )
-{
- int iOutRet = -1;
- AM_AV_VideoStatus_t video_status;
-
- do {
- if ( NULL == pWidth || NULL == pHeight || NULL == pFPS || NULL == pInterlace ) {
- break;
- }
-
- iOutRet = mAv.GetVideoStatus (&video_status );
-
- if ( AM_SUCCESS != iOutRet ) {
- LOGD ( "%s, ERROR: Cann't Get video format info\n", __FUNCTION__);
- break;
- }
-
- *pWidth = video_status.src_w;
- *pHeight = video_status.src_h;
- *pFPS = video_status.fps;
- *pInterlace = video_status.interlaced;
- //LOGD("%s, w : %d h : %d fps : %d interlaced: %d\n", __FUNCTION__, video_status.src_w,video_status.src_h,video_status.fps,video_status.interlaced);
- } while ( false );
-
- return iOutRet;
-
-}
-
-int CTv::stopScanLock()
-{
- AutoMutex lock ( mLock );
- return stopScan();
-}
-
-int CTv::stopScan()
-{
- if (!(mTvAction & TV_ACTION_SCANNING)) {
- LOGD("%s, tv not scanning ,return\n", __FUNCTION__);
- return 0;
- }
- mSigDetectThread.requestAndWaitPauseDetect();
- mTvEpg.leaveChannel();
- mTvScanner.stopScan();
- mFrontDev.Close();
- mTvAction = mTvAction & ~TV_ACTION_SCANNING;
- return 0;
-}
-
-int CTv::playProgramLock ( int progId )
-{
- AutoMutex lock ( mLock );
- CTvProgram prog;
- int ret = CTvProgram::selectByID ( progId, prog );
-
- if ( ret != 0 ) {
- return -1;
- }
- int type = prog.getProgType();
- LOGD ( "%s, blackout = %dprog type = %d id = %d name = %s\n", __FUNCTION__, m_blackout_enable, type, progId, prog.getName().string() );
- if (m_blackout_enable == 1) {
- mAv.EnableVideoBlackout();
- } else if (m_blackout_enable == 0) {
- mAv.DisableVideoBlackout();
- }
-
- mTvAction = mTvAction | TV_ACTION_PLAYING;
- m_cur_playing_prog_id = progId;
- mFrontDev.Open(FE_ANALOG);
- if ( m_source_input == SOURCE_TV && type == CTvProgram::TYPE_ATV ) {
- playAtvProgram ( progId );
- } else if ( m_source_input == SOURCE_DTV && ( type == CTvProgram::TYPE_DTV || type == CTvProgram::TYPE_RADIO ) ) {
- playDtmbProgram ( progId );
- } else {
- LOGD ( "%s, source(%d) != type(%d),not play\n", __FUNCTION__, m_source_input, type );
- }
- //just for ui,left/right/stereo
- setAudioChannel((int)AM_AOUT_OUTPUT_STEREO);
- return 0;
-}
-
-int CTv::playDvbcProgram ( int progId )
-{
- LOGD ( "%s, progId = %d\n", __FUNCTION__, progId );
-
- CTvProgram prog;
- int ret = CTvProgram::selectByID ( progId, prog );
-
- if ( ret != 0 ) {
- return -1;
- }
-
- LOGD ( "%s, prog name = %s\n", __FUNCTION__, prog.getName().string() );
- CTvChannel channel;
- prog.getChannel ( channel );
-
- mFrontDev.setPara ( channel.getMode(), channel.getFrequency(), channel.getSymbolRate(), channel.getModulation() );
-
- int vpid = 0x1fff, apid = 0x1fff, vfmt = -1, afmt = -1;
-
- CTvProgram::Video *pV = prog.getVideo();
- CTvProgram::Audio *pA;
-
- if ( pV != NULL ) {
- vpid = pV->getPID();
- vfmt = pV->getFormat();
- }
-
- int aindex = prog.getCurrentAudio ( String8 ( "eng" ) );
-
- if ( aindex >= 0 ) {
- pA = prog.getAudio ( aindex );
-
- if ( pA != NULL ) {
- apid = pA->getPID();
- afmt = pA->getFormat();
- }
- }
- mTvEpg.leaveProgram();
- mTvEpg.leaveChannel();
- startPlayTv ( SOURCE_DTV, vpid, apid, vfmt, afmt );
-
- mTvEpg.enterChannel ( channel.getID() );
- mTvEpg.enterProgram ( prog.getID() );
- return 0;
-}
-
-int CTv::getAudioTrackNum ( int progId )
-{
- int iRet, iOutCnt = 0;
- CTvProgram prog;
-
- do {
- if ( 0 > progId ) {
- break;
- }
-
- iRet = CTvProgram::selectByID ( progId, prog );
-
- if ( 0 != iRet ) {
- break;
- }
-
- iOutCnt = prog.getAudioTrackSize();
-
- } while ( false );
-
- return iOutCnt;
-}
-
-int CTv::getAudioInfoByIndex ( int progId, int idx, int *pAFmt, String8 &lang )
-{
- int iRet, iOutRet = -1;
- CTvProgram prog;
- CTvProgram::Audio *pA = NULL;
-
- do {
- if ( NULL == pAFmt || idx < 0 ) {
- break;
- }
-
- iRet = CTvProgram::selectByID ( progId, prog );
-
- if ( 0 != iRet ) {
- break;
- }
-
- if ( idx >= prog.getAudioTrackSize() ) {
- break;
- }
-
- pA = prog.getAudio ( idx );
-
- if ( NULL == pA ) {
- break;
- }
-
- *pAFmt = pA->getFormat();
- lang = pA->getLang();
- } while ( false );
-
- return iOutRet;
-}
-
-int CTv::switchAudioTrack ( int progId, int idx )
-{
- int iOutRet = 0;
- CTvProgram prog;
- CTvProgram::Audio *pAudio = NULL;
- int aPid = -1;
- int aFmt = -1;
-
- do {
- if ( idx < 0 ) {
- break;
- }
-
- iOutRet = CTvProgram::selectByID ( progId, prog );
-
- if ( 0 != iOutRet ) {
- break;
- }
- if (prog.getAudioTrackSize() <= 1) {
- LOGD("%s, just one audio track, not to switch", __FUNCTION__);
- break;
- }
- if ( idx >= prog.getAudioTrackSize() ) {
- break;
- }
-
- pAudio = prog.getAudio ( idx );
-
- if ( NULL == pAudio ) {
- break;
- }
-
- aPid = pAudio->getPID();
- aFmt = pAudio->getFormat();
-
- if ( aPid < 0 || aFmt < 0 ) {
- break;
- }
-
- iOutRet = mAv.SwitchTSAudio (( uint16_t ) aPid, ( AM_AV_AFormat_t ) aFmt );
-
- LOGD ( "%s, iOutRet = %d AM_AV_SwitchTSAudio\n", __FUNCTION__, iOutRet );
- } while ( false );
-
- return iOutRet;
-}
-
-int CTv::ResetAudioDecoderForPCMOutput()
-{
- int iOutRet = 0;
-
- iOutRet = mAv.ResetAudioDecoder ();
- LOGD ( "%s, iOutRet = %d AM_AV_ResetAudioDecoder\n", __FUNCTION__, iOutRet );
- return iOutRet;
-}
-int CTv::playDtmbProgram ( int progId )
-{
- CTvProgram prog;
- CTvChannel channel;
- int vpid = 0x1fff, apid = 0x1fff, vfmt = -1, afmt = -1;
- int aindex;
- CTvProgram::Audio *pA;
- CTvProgram::Video *pV;
- int ret = CTvProgram::selectByID ( progId, prog );
-
- saveDTVProgramID ( progId );
- prog.getChannel ( channel );
- //音é‡è¡¥å¿
- int chanVolCompValue = 0;
- chanVolCompValue = GetAudioVolumeCompensationVal(progId);
- SetCurProgramAudioVolumeCompensationVal ( chanVolCompValue );
-
- mFrontDev.setPara ( channel.getMode(), channel.getFrequency(), channel.getBandwidth(), 0 );
-
- pV = prog.getVideo();
-
- if ( pV != NULL ) {
- vpid = pV->getPID();
- vfmt = pV->getFormat();
- }
-
- aindex = prog.getCurrAudioTrackIndex();
-
- if ( -1 == aindex ) { //db is default
- aindex = prog.getCurrentAudio ( String8 ( "eng" ) );
-
- if ( aindex >= 0 ) {
- prog.setCurrAudioTrackIndex ( progId, aindex );
- }
- }
-
- if ( aindex >= 0 ) {
- pA = prog.getAudio ( aindex );
-
- if ( pA != NULL ) {
- apid = pA->getPID();
- afmt = pA->getFormat();
- }
- }
-
- mTvEpg.leaveProgram();
- mTvEpg.leaveChannel();
- startPlayTv ( SOURCE_DTV, vpid, apid, vfmt, afmt );
- mTvEpg.enterChannel ( channel.getID() );
- mTvEpg.enterProgram ( prog.getID() );
- return 0;
-}
-
-int CTv::playAtvProgram ( int progId )
-{
- LOGD ( "%s, progId = %d\n", __FUNCTION__, progId );
-
- CTvProgram prog;
-
- if ( CTvProgram::selectByID ( progId, prog ) != 0 ) {
- LOGE ( "%s, atv progID is not matching the db's\n", __FUNCTION__ );
- }
-
- saveATVProgramID ( progId );
- LOGD ( "%s, prog name = %s\n", __FUNCTION__, prog.getName().string() );
- CTvChannel channel;
- prog.getChannel ( channel );
-
- mTvAudio.SetAudioMuteForTv ( CC_AUDIO_MUTE );
-
- int chanVolCompValue = 0;
- chanVolCompValue = GetAudioVolumeCompensationVal(progId);
- SetCurProgramAudioVolumeCompensationVal ( chanVolCompValue );
-
- //image selecting channel
- mSigDetectThread.requestAndWaitPauseDetect();
- mTvin.Tvin_StopDecoder();
-
- //set CVBS
- int audioEnum = CFrontEnd::stdAndColorToAudioEnum(channel.getStd());
- int videoEnum = CFrontEnd::stdAndColorToVideoEnum(channel.getStd());
- int fmt = CFrontEnd::stdEnumToCvbsFmt (videoEnum, audioEnum);
- mTvin.AFE_SetCVBSStd ( ( tvin_sig_fmt_t ) fmt );
- m_cur_set_info_fmt = ( tvin_sig_fmt_t )fmt;
-
- //set TUNER
- mFrontDev.setPara (FE_ANALOG, channel.getFrequency(), channel.getStd(), channel.getAfcData());
-
- if ( channel.getAfcData() != 0 ) {
- mFrontDev.fineTune ( channel.getAfcData() / 1000 );
- }
-
- mSigDetectThread.initSigState();
- mSigDetectThread.resumeDetect();
- return 0;
-}
-
-int CTv::resetFrontEndPara ( frontend_para_set_t feParms )
-{
- if ( feParms.mode == FE_ANALOG ) {
- int progID = -1;
- int tmpFreq = feParms.freq;
- int tmpfineFreq = feParms.para2;
- int mode = feParms.mode;
-
- //get tunerStd from videoStd and audioStd
- v4l2_std_id stdAndColor = mFrontDev.enumToStdAndColor (feParms.videoStd, feParms.audioStd);
-
- //get program dbID saved by last time,if dbID is -1, it shows program hasn't played
- progID = getATVProgramID();
-
- LOGD("%s, resetFrontEndPara- vstd=%d astd=%d stdandcolor=%lld", __FUNCTION__, feParms.videoStd, feParms.audioStd, stdAndColor);
-
- //judge progID matching db's or not
- CTvProgram prog;
-
- if ( CTvProgram::selectByID ( progID, prog ) != 0 ) {
- LOGE ( "%s, atv progID is not matching the db's\n", __FUNCTION__);
- return 0;
- }
-
- //channel fine tune and save freq, std, fineFreq into DB
- CTvChannel channel;
- prog.upDateChannel ( channel, stdAndColor, tmpFreq, tmpfineFreq );
- mFrontDev.fineTune ( tmpfineFreq / 1000 ); //driver fine tune freq khz
-
-
- //set frontend parameters to tuner dev
- mSigDetectThread.requestAndWaitPauseDetect();
- mTvin.Tvin_StopDecoder();
-
- //set CVBS
- int fmt = CFrontEnd::stdEnumToCvbsFmt (feParms.videoStd, feParms.audioStd );
- mTvin.AFE_SetCVBSStd ( ( tvin_sig_fmt_t ) fmt );
- m_cur_set_info_fmt = ( tvin_sig_fmt_t )fmt;
-
- //set TUNER
- usleep(400 * 1000);
- mFrontDev.setPara ( FE_ANALOG, tmpFreq, stdAndColor, tmpfineFreq );
- usleep(400 * 1000);
- if ( tmpfineFreq != 0 ) {
- mFrontDev.fineTune ( tmpfineFreq / 1000 );
- }
-
- mSigDetectThread.initSigState();
- mSigDetectThread.resumeDetect();
- } else if ( feParms.mode == FE_DTMB ) {
- mFrontDev.setPara ( FE_DTMB, feParms.freq, feParms.para1, feParms.para2 );
- }
-
- return 0;
-}
-
-int CTv::resetDmxAndAvSource()
-{
- AM_DMX_Source_t curdmxSource;
- mFrontDev.GetTSSource ( &curdmxSource );
- LOGD ( "%s, AM_FEND_GetTSSource %d", __FUNCTION__, curdmxSource );
- mTvDmx.Close();
- AM_DMX_OpenPara_t para;
- memset ( &para, 0, sizeof ( para ) );
- mTvDmx.Open (para);
- mTvDmx.SetSource(curdmxSource );
- AM_AV_TSSource_t ts_source = ( AM_AV_TSSource_t ) curdmxSource;
- mAv.SetTSSource (ts_source );
- return 0;
-}
-
-int CTv::SetCurProgramAudioVolumeCompensationVal ( int tmpVal )
-{
- mTvAudio.SetAudioVolumeCompensationVal ( tmpVal );
- mTvAudio.SetAudioMasterVolume (mTvAudio.GetAudioMasterVolume() );
-
- LOGD ( "%s, VolumeCompensationVal = %d, id = %d\n", __FUNCTION__, tmpVal, m_cur_playing_prog_id );
- CTvProgram prog;
- if ( CTvProgram::selectByID ( m_cur_playing_prog_id, prog ) != 0 ) {
- LOGE ( "%s, atv progID is not matching the db's ret = 0\n", __FUNCTION__ );
- return -1;
- }
-
- if (prog.updateVolComp ( m_cur_playing_prog_id, tmpVal ) != 0 ) {
- LOGE ( "%s, atv progID is not matching the db's\n", __FUNCTION__);
- return -1;
- }
- return 0;
-}
-
-int CTv::GetAudioVolumeCompensationVal(int progxxId)
-{
- int tmpVolValue = 0;
- CTvProgram prog;
- if ( CTvProgram::selectByID ( m_cur_playing_prog_id, prog ) != 0 ) {
- LOGE ( "%s, atv progID is not matching the db's ret = 0\n", __FUNCTION__ );
- return tmpVolValue;
- }
- tmpVolValue = prog.getChanVolume ();
- LOGD ( "%s,progid = %d CompensationVal = %d\n", __FUNCTION__, m_cur_playing_prog_id, tmpVolValue );
- if (tmpVolValue > 20 || tmpVolValue < -20) tmpVolValue = 0;
- return tmpVolValue;
-}
-
-int CTv::startPlayTv ( int source, int vid, int aid, int vfat, int afat )
-{
- int ret = 0;
-
- if ( source == SOURCE_DTV ) {
- AM_FileEcho ( DEVICE_CLASS_TSYNC_AV_THRESHOLD_MIN, AV_THRESHOLD_MIN_MS );
- LOGD ( "%s, startPlayTv", __FUNCTION__);
- mAv.StartTS (vid, aid, ( AM_AV_VFormat_t ) vfat, ( AM_AV_AFormat_t ) afat );
- } else {
-
- }
- return ret;
-}
-
-int CTv::stopPlayingLock()
-{
- AutoMutex lock ( mLock );
- return stopPlaying();
-}
-
-int CTv::stopPlaying()
-{
- if (!(mTvAction & TV_ACTION_PLAYING)) {
- LOGD("%s, stopplay cur action = %x not playing , return", __FUNCTION__, mTvAction);
- return 0;
- }
- mAv.EnableVideoBlackout();
- if (m_source_input == SOURCE_TV) {
- //first mute
- mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
- ClearAnalogFrontEnd();
- } else if (m_source_input == SOURCE_DTV) {
- //mFrontDev.setPara(FE_DTMB, 51000000, 0, 0);
- mAv.StopTS ();
- mTvEpg.leaveChannel();
- mTvEpg.leaveProgram();
- }
- mAv.DisableVideoWithBlueColor();
- mTvAction = mTvAction & ~TV_ACTION_PLAYING;
- return 0;
-}
-
-int CTv::getAudioChannel()
-{
- int iRet = -1;
- AM_AOUT_OutputMode_t audioChanneleMod;
- do {
- iRet = mAv.AudioGetOutputMode (&audioChanneleMod );
- if ( AM_SUCCESS != iRet ) {
- LOGD ( "%s, jianfei.lan GetOutputMode is FAILED %d\n", __FUNCTION__, iRet );
- break;
- }
- LOGD ( "%s, jianfei.lan getAudioChannel iRet : %d audioChanneleMod %d\n", __FUNCTION__, iRet, audioChanneleMod );
- } while ( 0 );
- return audioChanneleMod;
-}
-
-int CTv::setAudioChannel ( int channelIdx )
-{
- int iOutRet = 0;
- AM_AOUT_OutputMode_t audioChanneleMod;
- LOGD ( "%s, channelIdx : %d\n", __FUNCTION__, channelIdx );
- audioChanneleMod = ( AM_AOUT_OutputMode_t ) channelIdx;
- iOutRet = mAv.AudioSetOutputMode (audioChanneleMod );
- if ( AM_SUCCESS != iOutRet) {
- LOGD ( "%s, jianfei.lan %s AM_AOUT_SetOutputMode device is FAILED %d\n", __FUNCTION__, "TV", iOutRet );
- }
- return 0;
-}
-
-int CTv::getFrontendSignalStrength()
-{
- int Strength = 0;
- Strength = mFrontDev.getStatus();
- return Strength;
-}
-
-int CTv::getFrontendSNR()
-{
- int snr = 0;
- snr = mFrontDev.getSNR();
- return snr;
-}
-
-int CTv::getFrontendBER()
-{
- int ber = 0;
- ber = mFrontDev.getBER();
- return ber;
-
-}
-
-int CTv::getChannelInfoBydbID ( int dbID, channel_info_t &chan_info )
-{
- CTvProgram prog;
- CTvChannel channel;
- Vector<sp<CTvProgram> > out;
- memset ( &chan_info, sizeof ( chan_info ), 0 );
- chan_info.freq = 44250000;
- chan_info.uInfo.atvChanInfo.videoStd = CC_ATV_VIDEO_STD_PAL;
- chan_info.uInfo.atvChanInfo.audioStd = CC_ATV_AUDIO_STD_DK;
-
- int ret = CTvProgram::selectByID ( dbID, prog );
- if ( ret != 0 ) {
- LOGD ( "getChannelinfo , select dbid=%d,is not exist", dbID);
- return -1;
- }
- prog.getChannel ( channel );
-
- if ( CTvProgram::TYPE_ATV == prog.getProgType() ) {
- chan_info.freq = channel.getFrequency();
- chan_info.uInfo.atvChanInfo.finefreq = channel.getAfcData();
- LOGD("%s, get channel std = %lld", __FUNCTION__, channel.getStd());
- chan_info.uInfo.atvChanInfo.videoStd =
- ( atv_video_std_t ) CFrontEnd::stdAndColorToVideoEnum ( channel.getStd() );
- chan_info.uInfo.atvChanInfo.audioStd =
- ( atv_audio_std_t ) CFrontEnd::stdAndColorToAudioEnum ( channel.getStd() );
- chan_info.uInfo.atvChanInfo.isAutoStd = ((channel.getStd() & V4L2_COLOR_STD_AUTO) == V4L2_COLOR_STD_AUTO) ? 1 : 0;
- } else if ( CTvProgram::TYPE_DTV == prog.getProgType() || CTvProgram::TYPE_RADIO == prog.getProgType()) {
- chan_info.freq = channel.getFrequency();
- chan_info.uInfo.dtvChanInfo.strength = getFrontendSignalStrength();
- chan_info.uInfo.dtvChanInfo.quality = getFrontendSNR();
- chan_info.uInfo.dtvChanInfo.ber = getFrontendBER();
- }
-
- return 0;
-}
-
-bool CTv::Tv_Start_Analyze_Ts ( int channelID )
-{
- int freq, ret;
- CTvChannel channel;
-
- AutoMutex lock ( mLock );
- mAv.StopTS ();
- mAv.DisableVideoWithBlueColor();
- ret = CTvChannel::selectByID ( channelID, channel );
-
- if ( ret != 0 ) {
- LOGD ( "%s, CTv tv_updatats can not get freq by channel ID", __FUNCTION__ );
- return false;
- }
-
- mTvAction = mTvAction | TV_ACTION_SCANNING;
- freq = channel.getFrequency();
- LOGD ( "%s, the freq = %d", __FUNCTION__, freq );
- mDtvScanRunningStatus = DTV_SCAN_RUNNING_ANALYZE_CHANNEL;
- mTvScanner.setObserver ( &mTvMsgQueue );
- mTvScanner.manualDtmbScan ( freq, freq ); //dtmb
- return true;
-}
-
-bool CTv::Tv_Stop_Analyze_Ts()
-{
- stopScanLock();
- return true;
-}
-
-
-int CTv::saveATVProgramID ( int dbID )
-{
- config_set_int ( "TV", "atv.get.program.id", dbID );
- return 0;
-}
-
-int CTv::getATVProgramID ( void )
-{
- return config_get_int ( "TV", "atv.get.program.id", -1 );
-}
-
-int CTv::saveDTVProgramID ( int dbID )
-{
- config_set_int ( "TV", "dtv.get.program.id", dbID );
- return 0;;
-}
-
-int CTv::getDTVProgramID ( void )
-{
- return config_get_int ( "TV", "dtv.get.program.id", -1 );
-}
-
-int CTv::getATVMinMaxFreq ( int *scanMinFreq, int *scanMaxFreq )
-{
- int tmpVal, i = 0;
- const char *config_value;
- const char *strDelimit = ",";
- char *token = NULL;
-
- *scanMinFreq = 44250000;
- *scanMaxFreq = 868250000;
-
- config_value = config_get_str ( "ATV", "atv.get.min.max.freq", "null" );
-
- if ( strcmp ( config_value, "null" ) == 0 ) {
- LOGD ( "%s, atv.get.min.max.freq not set config\n", __FUNCTION__ );
- return -1;
- }
-
- char data_str[512];
- memset ( ( void * ) data_str, 0, sizeof ( data_str ) );
- strncpy ( data_str, config_value, sizeof ( data_str ) - 1 );
-
- token = strtok ( data_str, strDelimit );
- sscanf ( token, "%d", scanMinFreq );
- token = strtok ( NULL, strDelimit );
-
- if ( token != NULL ) {
- sscanf ( token, "%d", scanMaxFreq );
- return 0;
- }
- return 0;
-}
-
-int CTv::IsDVISignal()
-{
- return ( ( TVIN_SIG_FMT_NULL != mSigDetectThread.getCurSigInfo().fmt ) && ( mSigDetectThread.getCurSigInfo().reserved & 0x1 ) );
-}
-
-int CTv::getHDMIFrameRate()
-{
- int ConstRate[5] = {24, 25, 30, 50, 60};
- float ConstRateDiffHz[5] = {0.5, 0.5, 0.5, 2, 2}; //å差值
- int fps = mSigDetectThread.getCurSigInfo().fps;
- int i = 0;
- for (; i < 5; i++) {
- if (abs(ConstRate[i] - fps) < ConstRateDiffHz[i])
- fps = ConstRate[i];
- }
- return fps;
-}
-
-tv_source_input_t CTv::GetLastSourceInput ( void )
-{
- return m_last_source_input;
-}
-
-int CTv::isVgaFmtInHdmi ( void )
-{
- tvin_sig_fmt_t fmt = mSigDetectThread.getCurSigInfo().fmt;
-
- if ( CTvin::Tvin_SourceInputToSourceInputType(m_source_input) != SOURCE_TYPE_HDMI ) {
- return -1;
- }
-
- return CTvin::isVgaFmtInHdmi ( fmt );
-}
-
-int CTv::SetBypassModulesFor3D ( VIDEO_3D_MODE_E mode )
-{
- LOGD ( "%s, ----> Set mode(%d) <----", __FUNCTION__, mode );
- const char *config_value = NULL;
-
- int DIBypassAllFlag = 0;
- config_value = config_get_str ( "TV", "tvin.di.bypass_all", "null" );//bypass , if
- if (strcasecmp(config_value, "true") == 0 || strcasecmp(config_value, "1") == 0) {
- DIBypassAllFlag = 1;
- } else {
- DIBypassAllFlag = 0;
- }
-
-
- switch (mode) {
- case VIDEO_3D_MODE_DISABLE: {
- mTvin.VDIN_SetDIBypassAll ( 0 );
- mTvin.VDIN_SetDIBypassPost ( 0 );
- // mTvin.VDIN_SetDISip_Top_Bot ( 0 );
- }
- break;
- case VIDEO_3D_MODE_AUTO: {
- mTvin.VDIN_SetDIBypassAll ( 0 );
- mTvin.VDIN_SetDIBypassPost ( 1 );
- // mTvin.VDIN_SetDISip_Top_Bot ( 0 );
-
-
- }
- break;
- case VIDEO_3D_MODE_LR:
- case VIDEO_3D_MODE_TB: {
- mTvin.VDIN_SetDIBypassPost ( 1 );
- usleep ( 20 * 1000 );
- mTvin.VDIN_SetDIBypassAll ( 1 | DIBypassAllFlag );
- //mTvin.VDIN_SetDISip_Top_Bot ( 1 );
- }
- break;
- case VIDEO_3D_MODE_LA:
- case VIDEO_3D_MODE_FA: {
- mTvin.VDIN_SetDIBypassPost ( 1 );
- usleep ( 20 * 1000 );
- mTvin.VDIN_SetDIBypassAll ( 0 );
- //mTvin.VDIN_SetDISip_Top_Bot ( 0 );
- }
- break;
- default:
- break;
- }
-
- if (CTvin::Tvin_SourceInputToSourceInputType(m_source_input) == SOURCE_TYPE_DTV ) {
- if ( mode == VIDEO_3D_MODE_DISABLE ) {
- mTvin.VDIN_SetVdinFlag ( MEMP_DCDR_WITHOUT_3D );
- } else {
- mTvin.VDIN_SetVdinFlag ( MEMP_DCDR_WITH_3D );
- }
- } else {
- if ( mode == VIDEO_3D_MODE_DISABLE ) {
- if ( m_source_input == SOURCE_TV ) {
- mTvin.VDIN_SetVdinFlag ( MEMP_ATV_WITHOUT_3D );
- } else {
- mTvin.VDIN_SetVdinFlag ( MEMP_VDIN_WITHOUT_3D );
- }
- } else {
- if ( m_source_input == SOURCE_TV ) {
- mTvin.VDIN_SetVdinFlag ( MEMP_ATV_WITH_3D );
- } else {
- mTvin.VDIN_SetVdinFlag ( MEMP_VDIN_WITH_3D );
- }
- }
- }
-
- return 0;
-}
-
-void CTv::print_version_info ( void )
-{
- // print tvapi version info
- LOGD ( "libtvservice git branch:%s\n", tvservice_get_git_branch_info() );
- LOGD ( "libtvservice git version:%s\n", tvservice_get_git_version_info() );
- LOGD ( "libtvservice Last Changed:%s\n", tvservice_get_last_chaned_time_info() );
- LOGD ( "libtvservice Last Build:%s\n", tvservice_get_build_time_info() );
- LOGD ( "libtvservice Builer Name:%s\n", tvservice_get_build_name_info() );
- LOGD ( "libtvservice board version:%s\n", tvservice_get_board_version_info() );
- LOGD ( "\n\n");
- // print dvb version info
- LOGD ( "libdvb git branch:%s\n", dvb_get_git_branch_info() );
- LOGD ( "libdvb git version:%s\n", dvb_get_git_version_info() );
- LOGD ( "libdvb Last Changed:%s\n", dvb_get_last_chaned_time_info() );
- LOGD ( "libdvb Last Build:%s\n", dvb_get_build_time_info() );
- LOGD ( "libdvb Builer Name:%s\n", dvb_get_build_name_info() );
-}
-
-int CTv::Tvin_GetTvinConfig ( void )
-{
- const char *config_value;
- int i = 0;
-
- config_value = config_get_str ( "TV", "tvin.overscan.3d", "null" );
-
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- gTvinConfig.overscan_3d = 1;
- } else {
- gTvinConfig.overscan_3d = 0;
- }
-
- config_value = config_get_str ( "TV", "tvin.tv.out.counter", "null" );
- gTvinConfig.tv_out_counter = ( unsigned int ) strtol ( config_value, NULL, 6 );
-
- if ( gTvinConfig.tv_out_counter <= 0 || gTvinConfig.tv_out_counter > 8 ) {
- gTvinConfig.tv_out_counter = 6;
- }
-
- config_value = config_get_str ( "TV", "tvin.kernelpet_disable", "null" );
-
- if ( strcmp ( config_value, "disable" ) == 0 ) {
- gTvinConfig.kernelpet_disable = true;
- } else {
- gTvinConfig.kernelpet_disable = false;
- }
-
- config_value = config_get_str ( "TV", "tvin.kernelpet.timeout", "null" );
- gTvinConfig.userpet_timeout = ( unsigned int ) strtol ( config_value, NULL, 10 );
-
- if ( gTvinConfig.kernelpet_timeout <= 0 || gTvinConfig.kernelpet_timeout > 40 ) {
- gTvinConfig.kernelpet_timeout = 10;
- }
-
-
- config_value = config_get_str ( "TV", "tvin.userpet", "null" );
-
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- gTvinConfig.userpet = true;
- } else {
- gTvinConfig.userpet = false;
- }
-
- config_value = config_get_str ( "TV", "tvin.userpet.timeout", "null" );
- gTvinConfig.userpet_timeout = ( unsigned int ) strtol ( config_value, NULL, 10 );
-
- if ( gTvinConfig.userpet_timeout <= 0 || gTvinConfig.userpet_timeout > 100 ) {
- gTvinConfig.userpet_timeout = 10;
- }
-
- config_value = config_get_str ( "TV", "tvin.userpet.reset", "null" );
-
- if ( strcmp ( config_value, "disable" ) == 0 ) {
- gTvinConfig.userpet_reset = 0;
- } else {
- gTvinConfig.userpet_reset = 1;
- }
-
- config_value = config_get_str ( "TV", "tvin.title_shake", "null" );
-
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- gTvinConfig.title_shake = true;
- } else {
- gTvinConfig.title_shake = false;
- }
-
- return 0;
-}
-
-int CTv::SetAudioMainVolLutBufName()
-{
- int i = 0;
- const char *tmp_ptr = NULL;
- int get_type_buf[6] = { CC_GET_LUT_TV, CC_GET_LUT_AV, CC_GET_LUT_COMP, CC_GET_LUT_HDMI, CC_GET_LUT_VGA, CC_GET_LUT_MPEG };
- const char *end_str_buf[6] = { ".tv", ".av", ".comp", ".hdmi", ".vga", ".mpeg", };
- project_info_t tmp_info;
- char tmp_buf[128];
- char value_buf[128];
- char key_buf[128];
-
- int name_en = GetAudioMainVolLutBufNameModifyEnableCFG();
-
- if (name_en == 1) {
- strcpy(tmp_buf, "null");
- if (GetProjectInfo(&tmp_info) == 0) {
- strncpy(tmp_buf, tmp_info.amp_curve_name, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
- }
-
- if (strcmp(tmp_buf, "null") != 0) {
- for ( i = 0; i < 6; i++ ) {
- memset(value_buf, '\0', sizeof(value_buf));
- memset(key_buf, '\0', sizeof(key_buf));
-
- GetAudioMainVolLutBufNameCFG(get_type_buf[i], key_buf);
-
- strcpy(value_buf, tmp_buf);
- strcat(value_buf, end_str_buf[i]);
-
- tmp_ptr = config_get_str("TV", key_buf, "null");
- if (strcmp(tmp_ptr, value_buf) != 0) {
- config_set_str("TV", key_buf, value_buf);
- LOGD("%s, config string now set as: %s \n", __FUNCTION__, value_buf);
- } else {
- LOGD("%s, config string has been set as: %s \n", __FUNCTION__, value_buf);
- }
- }
- }
- }
-
- return 0;
-}
-
-int CTv::SetAudioSupperBassVolLutBufName()
-{
- int i = 0;
- const char *tmp_ptr = NULL;
- int get_type_buf[6] = { CC_GET_LUT_TV, CC_GET_LUT_AV, CC_GET_LUT_COMP, CC_GET_LUT_HDMI, CC_GET_LUT_VGA, CC_GET_LUT_MPEG };
- const char *end_str_buf[6] = { ".tv", ".av", ".comp", ".hdmi", ".vga", ".mpeg", };
- project_info_t tmp_info;
- char tmp_buf[128];
- char value_buf[128];
- char key_buf[128];
-
- int name_en = GetAudioSupperBassVolLutBufNameModifyEnableCFG();
-
- if (name_en == 1) {
- strcpy(tmp_buf, "null");
- if (GetProjectInfo(&tmp_info) == 0) {
- strncpy(tmp_buf, tmp_info.amp_curve_name, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
- }
-
- if (strcmp(tmp_buf, "null") != 0) {
- for ( i = 0; i < 6; i++ ) {
- memset(value_buf, '\0', sizeof(value_buf));
- memset(key_buf, '\0', sizeof(key_buf));
-
- GetAudioSupperBassVolLutBufNameCFG(get_type_buf[i], key_buf);
-
- strcpy(value_buf, tmp_buf);
- strcat(value_buf, ".sup");
- strcat(value_buf, end_str_buf[i]);
-
- tmp_ptr = config_get_str("TV", key_buf, "null");
- if (strcmp(tmp_ptr, value_buf) != 0) {
- config_set_str("TV", key_buf, value_buf);
- LOGD("%s, config string now set as: %s \n", __FUNCTION__, value_buf);
- } else {
- LOGD("%s, config string has been set as: %s \n", __FUNCTION__, value_buf);
- }
- }
- }
- }
-
- return 0;
-}
-
-TvRunStatus_t CTv::GetTvStatus()
-{
- return mTvStatus;
-}
-
-int CTv::OpenTv ( void )
-{
- int tmp_val = 0;
- const char *value;
- //reboot system by fbc setting.
- value = config_get_str ( "TV", "fbc.get.panelinfo", "null" );
- LOGD("%s fbc-------------------\n", value);
- if ( strcmp ( value, "edid" ) == 0 ) {
- if (reboot_sys_by_fbc_edid_info() == 0) {
- }
- } else if ( strcmp ( value, "uart" ) == 0 ) {
- if (reboot_sys_by_fbc_uart_panel_info() == 0) {
- }
- }
-
- LOGD ( "%s, tv open\n", __FUNCTION__);
- char prop_value[PROPERTY_VALUE_MAX];
- memset ( prop_value, '\0', PROPERTY_VALUE_MAX );
-
- mTvin.Tvin_LoadSourceInputToPortMap();
-
- SSMSave3DLRSwitch ( 0 );
- SSMSave3DTO2D ( 0 );
- //
- SSMHandlePreCopying();
- if ( SSMDeviceMarkCheck() < 0 ) {
- SSMRestoreDeviceMarkValues();
- Tv_SSMRestoreDefaultSetting();
- }
- mTvin.OpenTvin();
- mTvin.init_vdin();
- mTvin.Tv_init_afe();
- mVpp.Vpp_Init();
- SetAudioSupperBassVolLutBufName();
- SetAudioMainVolLutBufName();
- mTvAudio.AudioCtlInitializeLoad();
-
- SSMSetHDCPKey();
- system ( "/system/bin/dec" );
-
- //set color filter
- // SetFileAttrValue ( "/sys/module/amvideo/parameters/filt_mode", "0x2100" );
-
- if ( gTvinConfig.title_shake) {
- SetFileAttrValue ( "/sys/module/di/parameters/di_new_mode_mask", "0x10000" );
- }
-
- value = config_get_str ( "TV", "tvin.autoset.displayfreq", "null" );
-
- if ( strcmp ( value, "enable" ) == 0 ) {
- m_autoset_displayfreq = true;
- } else {
- m_autoset_displayfreq = false;
- }
-
- if (mTvin.VDIN_GetDisplayVFreq() == 30) {
- m_autoset_displayfreq = false;
- }
-
- if (GetPlatformHaveDDFlag() == 1) {
- SetFileAttrValue ("/sys/module/tvin_hdmirx/parameters/edid_mode", "0x109");
- }
-
- value = config_get_str ( "TV", "ssm.handle.hdmi.edid.en", "null" );
-
- if ( strtoul(value, NULL, 10) == 1 ) {
- LOGD( "%s, get config \"%s\" is \"%s\".\n",
- __FUNCTION__, "ssm.handle.hdmi.edid.en", value );
- //get hdmi edid use mode
- char prop_value[256];
- memset( prop_value, '\0', 256 );
- property_get( "ubootenv.var.outputmode", prop_value, "null" );
- LOGD( "%s, get property \"%s\" is \"%s\".\n",
- __FUNCTION__, "ubootenv.var.outputmode", prop_value );
- if ( strcmp ( prop_value, "null" ) != 0 ) {
- config_set_str ( "TV", "ssm.handle.hdmi.edid.use", prop_value );
- int i;
- char edid_path[256];
- char edid_path_cfg[256];
- //set file's path for hdmi edid of each port
- for ( i = 1; i <= SSM_HDMI_PORT_MAX; i++ ) {
- memset( edid_path, '\0', 256 );
- memset( edid_path_cfg, '\0', 256 );
- sprintf ( edid_path, "/system/etc/%s_port%d.bin", prop_value, i );
- sprintf ( edid_path_cfg, "ssm.handle.hdmi.port%d.edid.file.path", i );
- config_set_str ( "TV", edid_path_cfg, edid_path );
- }
- } else {
- //set default hdmi edid
- config_set_str ( "TV", "ssm.handle.hdmi.edid.use", "hdmi_edid" );
- int i;
- char edid_path[256];
- char edid_path_cfg[256];
- //set file's path for hdmi edid of each port
- for ( i = 1; i <= SSM_HDMI_PORT_MAX; i++ ) {
- memset( edid_path, '\0', 256 );
- memset( edid_path_cfg, '\0', 256 );
- sprintf ( edid_path, "/system/etc/%s_port%d.bin", "hdmi_edid", i );
- sprintf ( edid_path_cfg, "ssm.handle.hdmi.port%d.edid.file.path", i );
- config_set_str ( "TV", edid_path_cfg, edid_path );
- }
- }
- m_is_set_hdmi_edid = true;
- }
- //
- unsigned char val = 0;
- Tvin_GetTvinConfig();
- m_last_source_input = SOURCE_INVALID;
- m_source_input = SOURCE_INVALID;
- m_mode_3d = VIDEO_3D_MODE_DISABLE;
- m_is_hdmi_sr_detect_start = false;
- m_hdmi_sampling_rate = 0;
- int8_t blackout_enable;
- SSMReadBlackoutEnable(&blackout_enable);
- m_blackout_enable = blackout_enable;
-
-
- //
- //dtv init
- int rt = -1;
- //opendemux();
- rt = mFrontDev.Open(FE_ANALOG);
- mFrontDev.autoLoadFE();
- AM_DMX_OpenPara_t para_dmx;
- memset ( &para_dmx, 0, sizeof ( AM_DMX_OpenPara_t ) );
- mTvDmx.Open(para_dmx );
- mTvDmx.SetSource (AM_DMX_SRC_TS2);
- mAv.Open();
- mTvEpg.Init ( 0, 0, 1, "eng zho chi", "GB2312" );
- resetDmxAndAvSource();
- mSourceConnectDetectThread.startDetect();
-
- if (SSMReadSerialCMDSwitchValue() == 1) {
- SetSerialSwitch(SERIAL_A, 1);
- }
- mTvin.VDIN_SetVdinFlag ( MEMP_DCDR_WITHOUT_3D );
- mTvin.VDIN_SetMVCViewMode(0);//for not 3d screen
- ClearAnalogFrontEnd();
-
- mTvStatus = TV_OPEN_ED;
-
- mHDMIRxCEC.start();
-
- return 0;
-}
-
-int CTv::CloseTv ( void )
-{
- LOGD ( "%s, tv close");
- mSigDetectThread.stopDetect();
- if (mpUpgradeFBC != NULL) {
- mpUpgradeFBC->stop();
- }
- mTvin.Tv_uninit_afe();
- mTvin.uninit_vdin();
- mVpp.Vpp_Uninit();
- TvMisc_DisableWDT ( gTvinConfig.userpet );
- mTvStatus = TV_CLOSE_ED;
- return 0;
-}
-
-
-int CTv::StartTvLock ()
-{
- LOGD ( "%s, tv start status = %d", __FUNCTION__, mTvStatus);
- if (mTvStatus == TV_START_ED)
- return 0;
-
- Mutex::Autolock _l ( mLock );
- mTvAction = mTvAction | TV_ACTION_STARTING;
- mTvAudio.SwitchAVOutBypass(0);
- mTvAudio.AudioCtlInit();
- mFrontDev.Open(FE_ANALOG);
- mSigDetectThread.startDetect();
- mSigDetectThread.pauseDetect();
- mSigDetectThread.initSigState();
- mTvMsgQueue.startMsgQueue();
- resetDmxAndAvSource();
- Vpp_SetDisplayMode ( mVpp.Tv_GetDisplayMode ( CTvin::Tvin_SourceInputToSourceInputType(m_source_input) ), CTvin::Tvin_SourceInputToSourceInputType(m_source_input), mSigDetectThread.getCurSigInfo().fmt);
- TvMisc_EnableWDT ( gTvinConfig.kernelpet_disable, gTvinConfig.userpet, gTvinConfig.kernelpet_timeout, gTvinConfig.userpet_timeout, gTvinConfig.userpet_reset );
- am_phase_t am_phase;
- if (mVpp.getPqData()->PQ_GetPhaseArray ( &am_phase ) == 0 ) {
- mTvin.TvinApi_SetCompPhase(am_phase);
- }
- mTvin.TvinApi_SetCompPhaseEnable ( 1 );
- mTvin.VDIN_EnableRDMA ( 1 );
- mTvin.VDIN_SetDIBypasshd ( 0 );
-
- SetBypassModulesFor3D ( VIDEO_3D_MODE_DISABLE );
- //win pos
- tvin_window_pos_t win_pos;
- Vpp_GetDisplayResolutionInfo(&win_pos);
- SetPreviewWindow ( win_pos );
-
- mTvin.Tvin_RemovePath ( TV_PATH_TYPE_TVIN );
- if ( mTvin.Tvin_RemovePath ( TV_PATH_TYPE_DEFAULT ) ) {
- mTvin.Tvin_AddPath ( TV_PATH_DECODER_NEW3D_WITHOUTPPMGR_AMVIDEO );
- }
- mTvin.VDIN_SetVdinFlag ( MEMP_DCDR_WITHOUT_3D );
-
- mAv.SetVideoWindow (0, 0, 0, 0 );
-
- mTvAction = mTvAction & ~TV_ACTION_STARTING;
- mTvStatus = TV_START_ED;
- return 0;
-}
-int CTv::StopTvLock ( void )
-{
- LOGD("%s, call Tv_Stop status = %d \n", __FUNCTION__, mTvStatus);
- const char *value;
- Mutex::Autolock _l ( mLock );
- //we should stop audio first for audio mute.
- mTvAction = mTvAction | TV_ACTION_STOPING;
- mSigDetectThread.requestAndWaitPauseDetect();
- mAv.EnableVideoBlackout();
- //stop scan if scanning
- if (mTvAction & TV_ACTION_SCANNING) {
- LOGD("%s, scanning first stop it\n", __FUNCTION__)
- mTvEpg.leaveChannel();
- mTvScanner.stopScan();
- mTvAction = mTvAction & ~TV_ACTION_SCANNING;
- }
- //first stop play(if playing)
- stopPlaying();
- //
- mTvAudio.SwitchAVOutBypass(0);
- tv_audio_channel_e audio_channel = mTvin.Tvin_GetInputSourceAudioChannelIndex (SOURCE_MPEG);
- mTvAudio.AudioLineInSelectChannel( audio_channel );
- mTvAudio.AudioCtlUninit();
- mTvin.Tvin_StopDecoder();
- mTvin.Tvin_RemovePath ( TV_PATH_TYPE_TVIN );
- Tv_Set3DMode(VIDEO_3D_MODE_DISABLE);
- mTvAudio.SetAudioMuteForTv ( CC_AUDIO_UNMUTE );
- tvin_window_pos_t win_pos;
- Vpp_GetDisplayResolutionInfo(&win_pos);
- SetPreviewWindow (win_pos );
- mVpp.Tv_LoadVppSettings ( SOURCE_TYPE_MPEG, TVIN_SIG_FMT_NULL, INDEX_2D, TVIN_TFMT_2D );
- Vpp_SetDisplayMode ( mVpp.Tv_GetDisplayMode ( CTvin::Tvin_SourceInputToSourceInputType(SOURCE_MPEG) ), CTvin::Tvin_SourceInputToSourceInputType(SOURCE_MPEG), mSigDetectThread.getCurSigInfo().fmt);
- RefreshAudioMasterVolume ( SOURCE_MPEG );
- mVpp.VPP_SetVideoCrop ( 0, 0, 0, 0 );
- m_last_source_input = SOURCE_INVALID;
- m_source_input = SOURCE_INVALID;
- mAv.DisableVideoWithBlackColor();
- mAv.ClearVideoBuffer();
- mFrontDev.Close();
- mTvAction = mTvAction & ~TV_ACTION_STOPING;
- mTvStatus = TV_STOP_ED;
- value = config_get_str ( "TV", "tvin.2d4G.headset.en", "null" );
- if ( strcmp ( value, "enable" ) == 0 ) {
- property_set("audio.tv_open.flg", "0");
- }
-
- Tv_SetDDDRCMode(SOURCE_MPEG);
- return 0;
-}
-
-int CTv::Tv_MiscSetBySource ( tv_source_input_t source_input )
-{
- int ret = -1;
-
- switch ( source_input ) {
- case SOURCE_TV:
- ret = SetFileAttrValue ( "/sys/module/am_vecm/parameters/dnlp_adj_level", "4" );
- break;
-
- case SOURCE_HDMI1:
- case SOURCE_HDMI2:
- case SOURCE_HDMI3:
- //ret = mVpp.Tv_SavePanoramaMode ( VPP_PANORAMA_MODE_FULL, SOURCE_TYPE_HDMI );
- ret |= SetFileAttrValue ( "/sys/module/am_vecm/parameters/dnlp_adj_level", "5" );
- break;
-
- case SOURCE_DTV:
- if ( m_autoset_displayfreq) {
- ret = mTvin.VDIN_SetDisplayVFreq ( 50, mAv.getVideoDisplayResolution() , mIsFbc);
- }
-
- case SOURCE_AV1:
- case SOURCE_AV2:
- case SOURCE_VGA:
- ret |= SetFileAttrValue ( "/sys/module/am_vecm/parameters/dnlp_adj_level", "5" );
- break;
-
- case SOURCE_SVIDEO:
- case SOURCE_IPTV:
- default:
- ret |= SetFileAttrValue ( "/sys/module/am_vecm/parameters/dnlp_adj_level", "5" );
- break;
- }
-
- return ret;
-}
-
-int CTv::SetSourceSwitchInput (tv_source_input_t source_input )
-{
- Mutex::Autolock _l ( mLock );
- LOGD ( "%s, source input = %d", __FUNCTION__, source_input );
- tv_source_input_t cur_source_input = m_source_input;
- tvin_port_t cur_port;
-
- Tv_SetDDDRCMode(source_input);
-
- if (source_input == cur_source_input ) {
- LOGW ( "%s,same input change display mode", __FUNCTION__ );
- return 0;
- }
-
- //if HDMI, need to set EDID of each port
- if (m_is_set_hdmi_edid) {
- int tmp_ret = 0;
- switch ( source_input ) {
- case SOURCE_HDMI1:
- tmp_ret = SSMSetHDMIEdid(1);
- break;
- case SOURCE_HDMI2:
- tmp_ret = SSMSetHDMIEdid(2);
- break;
- case SOURCE_HDMI3:
- tmp_ret = SSMSetHDMIEdid(3);
- break;
- default:
- tmp_ret = -1;
- break;
- }
- if (tmp_ret < 0)
- LOGE ( "%s, do not set hdmi port%d edid.ret=%d", __FUNCTION__, source_input - 4, tmp_ret );
- }
- mTvAction = mTvAction | TV_ACTION_SOURCE_SWITCHING;
- m_cur_playing_prog_id = -1;
- //
- CMessage msg;
- msg.mType = CTvMsgQueue::TV_MSG_CHECK_FE_DELAY;
- msg.mpData = this;
- msg.mDelayMs = 3500;//ms
- mTvMsgQueue.removeMsg ( msg );
- //mute first
- mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
- mSigDetectThread.requestAndWaitPauseDetect();
- mAv.DisableVideoWithBlueColor();
- //enable blackout, when play,disable it
- mAv.EnableVideoBlackout();
- //set front dev mode
- if ( source_input == SOURCE_TV ) {
- mFrontDev.Close();
- mFrontDev.Open(FE_ANALOG);
- //mFrontDev.setMode ( FE_ANALOG );
- } else if ( source_input == SOURCE_DTV ) {
- mFrontDev.Close();
- mFrontDev.Open(FE_ANALOG);
- //mFrontDev.setMode ( FE_DTMB);
- } else {
- mFrontDev.Close();
- }
-
- //ok
- m_last_source_input = m_source_input;
- m_source_input = source_input;
- SSMSaveSourceInput ( source_input );
-
- tv_source_input_t pre_source_input = cur_source_input;//change
- cur_source_input = source_input;
-
- mTvAudio.SetAudioVolumeCompensationVal ( 0 );
-
- if ( source_input == SOURCE_DTV ) {
- //we should stop audio first for audio mute.
- mTvAudio.SwitchAVOutBypass(0);
- tv_audio_channel_e audio_channel = mTvin.Tvin_GetInputSourceAudioChannelIndex (SOURCE_MPEG);
- mTvAudio.AudioLineInSelectChannel( audio_channel );
- mTvAudio.AudioCtlUninit();
- //
- mTvin.Tvin_StopDecoder();
- mTvin.Tvin_RemovePath ( TV_PATH_TYPE_TVIN );
- Tv_Set3DMode(VIDEO_3D_MODE_DISABLE);
- //double confirm we set the main volume lut buffer to mpeg
- RefreshAudioMasterVolume ( SOURCE_MPEG );
- mTvAudio.AudioDataInitForDtv();
- mTvin.setMpeg2Vdin(1);
- mVpp.Tv_LoadVppSettings ( SOURCE_TYPE_DTV, TVIN_SIG_FMT_NULL, INDEX_2D, TVIN_TFMT_2D );
- } else {
- mTvin.setMpeg2Vdin(0);
- mTvin.Tvin_AddPath ( TV_PATH_VDIN_NEW3D_WITHOUTPPMGR_AMVIDEO );
- mTvin.VDIN_SetVdinFlag ( MEMP_VDIN_WITHOUT_3D );
- }
- cur_port = mTvin.Tvin_GetSourcePortBySourceInput ( cur_source_input );
- Tv_MiscSetBySource ( source_input );
-
- //only DTV->TVIN or TVIN->DTV need start resource detect thread
- if ( ( pre_source_input == SOURCE_DTV || cur_source_input == SOURCE_DTV ) && ( cur_source_input != pre_source_input ) ) {
- LOGD ( "%s, dtv need resource detect\n", __FUNCTION__ );
- int isNeedCheckD2D3 = ( gTvinConfig.memory512m) ? 1 : 0;
- static int sigchkcnt = 0;
- while ( true ) {
- if ( ( mTvin.Tvin_CheckPathActive ( TV_PATH_TYPE_DEFAULT, isNeedCheckD2D3 ) == TV_PATH_STATUS_INACTIVE )
- && ( mTvin.Tvin_CheckPathActive ( TV_PATH_TYPE_TVIN, isNeedCheckD2D3 ) == TV_PATH_STATUS_INACTIVE ) ) {
- LOGD("%s, path check is ok, and break\n", __FUNCTION__)
- break;
- } else {
- if (sigchkcnt++ > 20) {
- sigchkcnt = 0;
- break;
- }
-
- LOGW ( "%s,resource is busy.", __FUNCTION__);
- }
- }//while
- }//if need check,and check return
-
- if ( source_input != SOURCE_DTV ) {
- // Uninit data
- mTvAudio.AudioDataUnInit();
- if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3 ||
- source_input == SOURCE_MPEG || source_input == SOURCE_DTV ) {
- mTvAudio.SwitchAVOutBypass(0);
- } else {
- mTvAudio.SwitchAVOutBypass(1);
- }
-
- tv_audio_channel_e audio_channel = mTvin.Tvin_GetInputSourceAudioChannelIndex (source_input);
- mTvAudio.AudioLineInSelectChannel( audio_channel );
-
- Tv_SetAudioInSource ( source_input );
- if ( source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3 ) {
- m_is_hdmi_sr_detect_start = true;
- m_hdmi_sampling_rate = 0;
- } else {
- mTvAudio.AudioDataInit ( 48000, true );
- audio_sr = 48000;
- }
- //===========================================
- if ( mTvin.SwitchPort ( cur_port ) == 0 ) { //ok
- //==========================================
- SSMSave3DDepth ( 0 );
- mTvin.Tvin_SetDepthOf2Dto3D ( 0 ); // set default depth
- Tv_Set3DMode(VIDEO_3D_MODE_DISABLE);
- SSMSave3DLRSwitch ( 0 );
- SSMSave3DTO2D (0);
-
- //for HDMI source connect detect
- mTvin.VDIN_OpenHDMIPinMuxOn(true);
- mTvAudio.AudioSetRecordDataZero ( false ); //make AudioRecord data avaliable
- mVpp.Vpp_ResetLastVppSettingsSourceType();
- //==========================================
- m_sig_stable_nums = 0;
- mSigDetectThread.initSigState();
- if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
- mSigDetectThread.setVdinNoSigCheckKeepTimes(5000, true);
- } else {
- mSigDetectThread.setVdinNoSigCheckKeepTimes(3000, true);
- }
- mSigDetectThread.resumeDetect();
- } else {
- }
- }
-
- Tv_SetAudioSourceType(source_input);
- RefreshAudioMasterVolume(source_input);
- Tv_SetAudioOutputSwap_Type(source_input);
-
- mTvAction = mTvAction & ~ TV_ACTION_SOURCE_SWITCHING;
- return 0;
-}
-
-void CTv::onSigToStable()
-{
- if ( ( CTvin::Tvin_SourceInputToSourceInputType(m_source_input) == SOURCE_TYPE_TV ) ) {
- mSigDetectThread.getCurSigInfo().fmt = m_cur_set_info_fmt;
- }
- if ( m_autoset_displayfreq) {
- if ( CTvin::Tvin_is50HzFrameRateFmt ( mSigDetectThread.getCurSigInfo().fmt ) ) {
- mTvin.VDIN_SetDisplayVFreq ( 50, mAv.getVideoDisplayResolution(), mIsFbc );
- LOGD ( "%s, SetDisplayVFreq 50HZ.", __FUNCTION__);
- } else {
- mTvin.VDIN_SetDisplayVFreq ( 60, mAv.getVideoDisplayResolution(), mIsFbc );
- LOGD ( "%s, SetDisplayVFreq 60HZ.", __FUNCTION__);
- }
- }
- //showbo mark hdmi auto 3d, tran fmt is 3d, so switch to 3d
- LOGD("hdmi trans_fmt = %d", mSigDetectThread.getCurSigInfo().trans_fmt);
- if (mSigDetectThread.getCurSigInfo().trans_fmt != TVIN_TFMT_2D) {
- Tv_Set3DMode(VIDEO_3D_MODE_AUTO);
- }
-
- LOGD("onSigToStable --- trans_fmt = %d", mSigDetectThread.getCurSigInfo().trans_fmt);
- //load pq parameters
- mVpp.Tv_LoadVppSettings (CTvin::Tvin_SourceInputToSourceInputType(m_source_input), mSigDetectThread.getCurSigInfo().fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), mSigDetectThread.getCurSigInfo().trans_fmt );
-
- if ( m_win_mode == PREVIEW_WONDOW ) {
- mAv.setVideoAxis(m_win_pos.x1, m_win_pos.y1, m_win_pos.x2, m_win_pos.y2);
- mAv.setVideoScreenMode ( CAv::VIDEO_WIDEOPTION_FULL_STRETCH );
- } else {
- Vpp_SetDisplayMode ( mVpp.Tv_GetDisplayMode ( CTvin::Tvin_SourceInputToSourceInputType(m_source_input) ), CTvin::Tvin_SourceInputToSourceInputType(m_source_input), mSigDetectThread.getCurSigInfo().fmt);
- }
- m_sig_stable_nums = 0;
-
-}
-void CTv::onSigStableToUnstable()
-{
- LOGD ( "%s, stable to unstable\n", __FUNCTION__);
- mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
- mAv.DisableVideoWithBlackColor();
- mTvin.Tvin_StopDecoder();
-}
-void CTv::onSigStableToUnSupport()
-{
- mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
- mAv.DisableVideoWithBlackColor();
- mTvin.Tvin_StopDecoder();
-
- tvin_info_t info = mSigDetectThread.getCurSigInfo();
- TvEvent::SignalInfoEvent ev;
- ev.mTrans_fmt = info.trans_fmt;
- ev.mFmt = info.fmt;
- ev.mStatus = info.status;
- ev.mReserved = info.reserved;
- sendTvEvent ( ev );
- LOGD ( "%s, Enable blackscreen for signal change in StableToUnSupport!", __FUNCTION__ );
-}
-void CTv::onSigStableToNoSig()
-{
- mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
- mAv.DisableVideoWithBlueColor();
- //SetAudioMuteForTv(CC_AUDIO_MUTE);
- mTvin.Tvin_StopDecoder();
-
- tvin_info_t info = mSigDetectThread.getCurSigInfo();
- TvEvent::SignalInfoEvent ev;
- ev.mTrans_fmt = info.trans_fmt;
- ev.mFmt = info.fmt;
- ev.mStatus = info.status;
- ev.mReserved = info.reserved;
- sendTvEvent ( ev );
- LOGD ( "%s, Enable bluescreen for signal change in StableToNoSig!", __FUNCTION__);
-}
-void CTv::onSigUnStableToUnSupport()
-{
- mAv.DisableVideoWithBlackColor();
- mTvin.Tvin_StopDecoder();
- tvin_info_t info = mSigDetectThread.getCurSigInfo();
-
-
- TvEvent::SignalInfoEvent ev;
- ev.mTrans_fmt = info.trans_fmt;
- ev.mFmt = info.fmt;
- ev.mStatus = info.status;
- ev.mReserved = info.reserved;
- sendTvEvent ( ev );
- LOGD ( "%s, Enable blackscreen for signal change in UnStableToUnSupport!", __FUNCTION__);
-}
-void CTv::onSigUnStableToNoSig()
-{
- mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
- mAv.DisableVideoWithBlueColor();
- //SetAudioMuteForTv(CC_AUDIO_MUTE);
- mTvin.Tvin_StopDecoder();
-
- tvin_info_t info = mSigDetectThread.getCurSigInfo();
- TvEvent::SignalInfoEvent ev;
- ev.mTrans_fmt = info.trans_fmt;
- ev.mFmt = info.fmt;
- ev.mStatus = info.status;
- ev.mReserved = info.reserved;
- sendTvEvent ( ev );
- LOGD ( "%s, Enable bluescreen for signal change in UnStableToNoSig! status = %d", __FUNCTION__, ev.mStatus );
-}
-void CTv::onSigNullToNoSig()
-{
- mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
- mAv.DisableVideoWithBlueColor();
- //SetAudioMuteForTv(CC_AUDIO_MUTE);
- mTvin.Tvin_StopDecoder();
-
- tvin_info_t info = mSigDetectThread.getCurSigInfo();
-
-
- TvEvent::SignalInfoEvent ev;
- ev.mTrans_fmt = info.trans_fmt;
- ev.mFmt = info.fmt;
- ev.mStatus = info.status;
- ev.mReserved = info.reserved;
- sendTvEvent ( ev );
- LOGD ( "%s, Enable bluescreen for signal change in NullToNoSig!", __FUNCTION__);
-}
-
-void CTv::onSigNoSigToUnstable()
-{
- mAv.DisableVideoWithBlueColor();
- LOGD("Enable bluescreen for signal change in NoSigToUnstable\n");
-}
-
-void CTv::onSigStillStable()
-{
- if ( m_sig_stable_nums == 20) {
- tvin_info_t info = mSigDetectThread.getCurSigInfo();
- TvEvent::SignalInfoEvent ev;
- ev.mTrans_fmt = info.trans_fmt;
- ev.mFmt = info.fmt;
- ev.mStatus = info.status;
- ev.mReserved = info.reserved;
- sendTvEvent ( ev );
- }
- if (m_sig_stable_nums == 2) {
- int startdec_status = mTvin.Tvin_StartDecoder ( mSigDetectThread.getCurSigInfo() );
- if ( startdec_status == 0 ) { //showboz codes from start decode fun
- const char *value;
- value = config_get_str ( "TV", "tvin.db.reg.en", "null" );
- if ( strcmp ( value, "enable" ) == 0 ) {
- usleep ( 20 * 1000 );
- Tvin_SetPLLValues ();
- usleep ( 20 * 1000 );
- SetCVD2Values ();
- }
- }
- }
- if ( m_sig_stable_nums == 25 ) {
- if (!(mTvAction & TV_ACTION_SCANNING))
- mTvAudio.SetAudioMuteForTv ( CC_AUDIO_UNMUTE );
- mAv.EnableVideoAuto();
- }
-
- m_sig_stable_nums++;
-}
-void CTv::onSigStillUnstable()
-{
-}
-void CTv::onSigStillNosig()
-{
-
-}
-void CTv::onSigStillNoSupport()
-{
-
- tvin_info_t info = mSigDetectThread.getCurSigInfo();
- TvEvent::SignalInfoEvent SigEv;
- SigEv.mTrans_fmt = info.trans_fmt;
- SigEv.mFmt = info.fmt;
- SigEv.mStatus = info.status;
- SigEv.mReserved = info.reserved;
- sendTvEvent ( SigEv );
- LOGD ( "%s, Unsupport signal", __FUNCTION__);
-}
-void CTv::onSigStillNull()
-{
-}
-void CTv::onStableSigFmtChange()
-{
-}
-void CTv::onStableTransFmtChange()
-{
-}
-void CTv::onSigDetectEnter()
-{
- struct timeval time;
- gettimeofday ( &time, NULL );
-}
-
-void CTv::onLoop()
-{
- if ( ( m_is_hdmi_sr_detect_start == true )
- && ( CTvin::Tvin_SourceInputToSourceInputType(m_source_input) == SOURCE_TYPE_HDMI ) ) {
- int sr = mTvin.get_hdmi_sampling_rate();
-
- if ( ( sr > 0 ) && ( sr != m_hdmi_sampling_rate ) ) {
- if ( 0 == m_hdmi_sampling_rate ) {
- LOGD ( "%s, Init HDMI audio, sampling rate:%d", __FUNCTION__, sr );
- mTvAudio.AudioDataInit ( sr, false );
- audio_sr = sr;
- } else {
- LOGD ( "%s, Reset HDMI sampling rate to %d", __FUNCTION__, sr );
- mTvAudio.AudioChangeSampleRate ( sr );
- }
-
- m_hdmi_sampling_rate = sr;
- }
- }
-}
-
-void CTv::onSourceConnect(int source_type, int connect_status)
-{
- TvEvent::SourceConnectEvent ev;
- ev.mSourceInput = source_type;
- ev.connectionState = connect_status;
- sendTvEvent(ev);
-}
-
-int CTv::GetSourceConnectStatus(int source_input)
-{
- return mSourceConnectDetectThread.GetSourceConnectStatus(source_input);
-}
-
-tv_source_input_t CTv::GetCurrentSourceInputLock ( void )
-{
- Mutex::Autolock _l ( mLock );
- return m_source_input;
-}
-
-//dtv and tvin
-tvin_info_t CTv::GetCurrentSignalInfo ( void )
-{
- tvin_trans_fmt det_fmt = TVIN_TFMT_2D;
- tvin_sig_status_t signalState = TVIN_SIG_STATUS_NULL;
- tvin_info_t signal_info = mSigDetectThread.getCurSigInfo();
-
- if ( (CTvin::Tvin_SourceInputToSourceInputType(m_source_input) == SOURCE_TYPE_DTV ) ) {
- for ( int i = 0; i < 10; i++ ) {
- det_fmt = mTvin.TvinApi_Get3DDectMode();
- signal_info.status = TVIN_SIG_STATUS_STABLE;
-
- if ( det_fmt != TVIN_TFMT_2D ) {
- signal_info.trans_fmt = det_fmt;
- break;
- }
- }
- }
- return signal_info;
-}
-
-int CTv::Tv_Set3DMode ( VIDEO_3D_MODE_T mode )
-{
- if (mode == VIDEO_3D_MODE_AUTO) {
- mTvin.VDIN_SetDI3DDetc (1);
- } else {
- mTvin.VDIN_SetDI3DDetc (0);
- }
-
- mAv.set3DMode(mode, 0, 0);
- m_mode_3d = mode;
- SSMSave3DMode ( ( unsigned char ) mode );
- SetBypassModulesFor3D ( mode );
- return 0;
-}
-
-VIDEO_3D_MODE_T CTv::Tv_Get3DMode ( void )
-{
- return m_mode_3d;
-}
-
-int CTv::Tv_Set3DLRSwith ( int on_off)
-{
- LOGW ( "%s,Set3D LRSwith on_off %d ,status %d !!! ", __FUNCTION__, on_off);
- mAv.set3DMode(m_mode_3d, on_off, 0);
- SSMSave3DLRSwitch(on_off);
- return 0;
-}
-
-int CTv::Tv_Get3DLRSwith ( void )
-{
- unsigned char val = 0;
- SSMRead3DLRSwitch ( &val );
- return ( int ) val;
-}
-
-int CTv::Tv_Set3DTo2DMode ( int mode)
-{
- LOGW ( "%s,Set3D to 2D mode %d ,status %d !!! ", __FUNCTION__ , mode);
- mAv.set3DMode(m_mode_3d, 0, mode);
- SSMSave3DTO2D ( mode );
- return 0;
-}
-
-int CTv::Tv_Get3DTo2DMode ( void )
-{
- unsigned char val = 0;
- SSMRead3DTO2D ( &val );
- return val;
-}
-
-int CTv::Tv_Set3DDepth ( int value )
-{
- mTvin.Tvin_SetDepthOf2Dto3D( value );
- SSMSave3DDepth ( value );
- return 0;
-}
-
-int CTv::GetSave3DDepth ( void )
-{
- unsigned char val = 0;
- SSMRead3DDepth ( &val );
- return val;
-}
-
-is_3d_type_t CTv::Check2Dor3D ( VIDEO_3D_MODE_T mode3d, tvin_trans_fmt_t trans_fmt )
-{
- if ( mode3d == VIDEO_3D_MODE_DISABLE ) {
- return INDEX_2D;
- } else if ( mode3d == VIDEO_3D_MODE_AUTO ) {
- if ( trans_fmt == TVIN_TFMT_2D ) {
- return INDEX_2D;
- } else {
- return INDEX_3D;
- }
- } else {
- return INDEX_3D;
- }
-}
-
-
-int CTv::Tvin_SetPLLValues ()
-{
- tvin_sig_fmt_t sig_fmt = mSigDetectThread.getCurSigInfo().fmt;
- tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceInput(m_source_input);
- am_regs_t regs;
-
- if ( mVpp.getPqData()->PQ_GetPLLParams ( source_port, sig_fmt, &regs ) == 0 ) {
- LOGD ("%s,PQ_GetPLLParams(source_port[%d], sig_fmt[%d],&regs).\n", __FUNCTION__, source_port, sig_fmt );
-
- if ( mTvin.TvinApi_LoadPLLValues ( regs ) < 0 ) {
- LOGE ( "%s, TvinApi_LoadPLLValues failed!\n", __FUNCTION__ );
- return -1;
- }
- } else {
- LOGE ( "%s, PQ_GetPLLParams failed!\n", __FUNCTION__ );
- return -1;
- }
-
- return 0;
-}
-int CTv::SetCVD2Values ()
-{
- tvin_sig_fmt_t sig_fmt = mSigDetectThread.getCurSigInfo().fmt;
- tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceInput(m_source_input);
- am_regs_t regs;
-
- if (mVpp.getPqData()->PQ_GetCVD2Params ( source_port, sig_fmt, &regs ) == 0) {
- LOGD ( "%s, PQ_GetCVD2Params(source_port[%d], sig_fmt[%d],&regs).\n", __FUNCTION__,
- source_port, sig_fmt );
-
- if ( mTvin.TvinApi_LoadCVD2Values ( regs ) < 0 ) {
- LOGE ( "%s, TvinApi_LoadCVD2Values failed!\n", __FUNCTION__);
- return -1;
- }
- } else {
- LOGE ( "%s, PQ_GetCVD2Params failed!\n", __FUNCTION__);
- return -1;
- }
-
- return 0;
-}
-
-int CTv::SetPreviewWindow ( tvin_window_pos_t pos )
-{
- m_win_pos.x1 = pos.x1;
- m_win_pos.y1 = pos.y1;
- m_win_pos.x2 = pos.x2;
- m_win_pos.y2 = pos.y2;
- LOGD ( "%s, SetPreviewWindow x = %d y=%d", __FUNCTION__, pos.x2, pos.y2 );
-
- tvin_window_pos_t def_pos;
- Vpp_GetDisplayResolutionInfo(&def_pos);
-
- if (pos.x1 != 0 || pos.y1 != 0 || pos.x2 != def_pos.x2 || pos.y2 != def_pos.y2) {
- m_win_mode = PREVIEW_WONDOW;
- } else {
- m_win_mode = NORMAL_WONDOW;
- }
-
- return mAv.setVideoAxis(m_win_pos.x1, m_win_pos.y1, m_win_pos.x2, m_win_pos.y2);;
-}
-
-/*********************** Audio start **********************/
-int CTv::SetAudioVolDigitLUTBuf ( tv_source_input_t source_input )
-{
- if (source_input == SOURCE_TV) {
- mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_TV, 1, 1, -1 );
- } else if (source_input == SOURCE_AV1 || source_input == SOURCE_AV2) {
- mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_AV, 1, 1, -1 );
- } else if (source_input == SOURCE_YPBPR1 || source_input == SOURCE_YPBPR2) {
- mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_COMP, 1, 1, -1 );
- } else if (source_input == SOURCE_VGA) {
- mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_VGA, 1, 1, -1 );
- } else if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
- mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_HDMI, 1, 1, -1 );
- } else if ( source_input == SOURCE_MPEG ) {
- mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_MPEG, 1, 1, -1 );
- } else if ( source_input == SOURCE_DTV ) {
- mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_MPEG, 1, 1, -1 );
- }
- return 0;
-}
-
-void CTv::RefreshAudioMasterVolume ( tv_source_input_t source_input )
-{
- if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
- if ( GetAudioDVISupportEnable() == 1 ) {
- if ( IsDVISignal() ) {
- SetAudioVolDigitLUTBuf ( SOURCE_MPEG );
- mTvAudio.SetAudioMasterVolume ( mTvAudio.GetAudioMasterVolume() );
- return;
- }
- }
- }
-
- SetAudioVolDigitLUTBuf ( source_input );
- mTvAudio.SetAudioMasterVolume ( mTvAudio.GetAudioMasterVolume() );
-}
-
-int CTv::Tv_SetAudioInSource (tv_source_input_t source_input)
-{
- if (source_input == SOURCE_TV) {
- if (mTvin.Tvin_GetAudioInSourceType(source_input) == TV_AUDIO_IN_SOURCE_TYPE_ATV) {
- return mTvAudio.AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_ATV);
- } else {
- return mTvAudio.AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_LINEIN);
- }
- } else if (source_input == SOURCE_AV1 || source_input == SOURCE_AV2) {
- return mTvAudio.AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_LINEIN);
- } else if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
- return mTvAudio.AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_HDMI);
- } else if (source_input == SOURCE_YPBPR1 || source_input == SOURCE_YPBPR2 ||
- source_input == SOURCE_TYPE_VGA) {
- return mTvAudio.AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_LINEIN);
- }
-
- return 0;
-}
-
-int CTv::Tv_SetAudioSourceType (tv_source_input_t source_input)
-{
- int audio_source = -1;
-
- if (source_input == SOURCE_TV) {
- audio_source = AUDIO_ATV_SOURCE;
- } else if (source_input == SOURCE_AV1 || source_input == SOURCE_AV2) {
- audio_source = AUDIO_AV_SOURCE;
- } else if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
- audio_source = AUDIO_HDMI_SOURCE;
- } else if (source_input == SOURCE_YPBPR1 || source_input == SOURCE_YPBPR2 ||
- source_input == SOURCE_TYPE_VGA) {
- audio_source = AUDIO_AV_SOURCE;
- } else if (source_input == SOURCE_DTV) {
- audio_source = AUDIO_MPEG_SOURCE;
- } else {
- audio_source = AUDIO_MPEG_SOURCE;
- }
-
- return mTvAudio.AudioSetAudioSourceType(audio_source);
-}
-void CTv::Tv_SetAudioOutputSwap_Type (tv_source_input_t source_input)
-{
- const char *config_value;
- config_value = config_get_str("TV", "audio.output.swap.enable", "null");
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- int sw_status = 0;
-
- LOGD("%s, audio.output.swap.enable\n", __FUNCTION__);
-
- switch (source_input) {
- case SOURCE_AV1:
- config_value = config_get_str("TV", "audio.output.swap.av1", "null");
- sw_status = atoi ( config_value );
- mTvAudio.SetOutput_Swap(sw_status);
- LOGD("%s, av1 %d\n", __FUNCTION__, sw_status);
- break;
- case SOURCE_AV2:
- config_value = config_get_str("TV", "audio.output.swap.av2", "null");
- sw_status = atoi ( config_value );
- mTvAudio.SetOutput_Swap(sw_status);
- LOGD("%s, av2 %d\n", __FUNCTION__, sw_status);
- break;
- case SOURCE_HDMI1:
- config_value = config_get_str("TV", "audio.output.swap.hdmi1", "null");
- sw_status = atoi ( config_value );
- mTvAudio.SetOutput_Swap(sw_status);
- LOGD("%s, hdmi1 %d\n", __FUNCTION__, sw_status);
- break;
- case SOURCE_HDMI2:
- config_value = config_get_str("TV", "audio.output.swap.hdmi2", "null");
- sw_status = atoi ( config_value );
- mTvAudio.SetOutput_Swap(sw_status);
- LOGD("%s, hdmi2 %d\n", __FUNCTION__, sw_status);
- break;
- case SOURCE_HDMI3:
- config_value = config_get_str("TV", "audio.output.swap.hdmi3", "null");
- sw_status = atoi ( config_value );
- mTvAudio.SetOutput_Swap(sw_status);
- LOGD("%s, hdmi3 %d\n", __FUNCTION__, sw_status);
- break;
- case SOURCE_TV:
- config_value = config_get_str("TV", "audio.output.swap.tv", "null");
- sw_status = atoi ( config_value );
- mTvAudio.SetOutput_Swap(sw_status);
- LOGD("%s, tv %d\n", __FUNCTION__, sw_status);
- break;
- case SOURCE_DTV:
- config_value = config_get_str("TV", "audio.output.swap.dtv", "null");
- sw_status = atoi ( config_value );
- mTvAudio.SetOutput_Swap(sw_status);
- LOGD("%s, dtv %d\n", __FUNCTION__, sw_status);
- break;
- case SOURCE_MPEG:
- config_value = config_get_str("TV", "audio.output.swap.mpeg", "null");
- sw_status = atoi ( config_value );
- mTvAudio.SetOutput_Swap(sw_status);
- LOGD("%s, mpeg %d\n", __FUNCTION__, sw_status);
- break;
- default:
- mTvAudio.SetOutput_Swap(sw_status);
- LOGD("%s, default %d\n", __FUNCTION__, sw_status);
- break;
- }
- }
-
-}
-
-/*********************** Audio end **********************/
-
-unsigned int CTv::Vpp_GetDisplayResolutionInfo(tvin_window_pos_t *win_pos)
-{
- int display_resolution = mAv.getVideoDisplayResolution();
- unsigned int tmp_ret = 0;
-
- switch (display_resolution) {
- case VPP_DISPLAY_RESOLUTION_1366X768:
- tmp_ret |= (CC_RESOLUTION_1366X768_W << 16);
- tmp_ret |= (CC_RESOLUTION_1366X768_H << 0);
- break;
- case VPP_DISPLAY_RESOLUTION_1920X1080:
- tmp_ret |= (CC_RESOLUTION_1920X1080_W << 16);
- tmp_ret |= (CC_RESOLUTION_1920X1080_H << 0);
- break;
- case VPP_DISPLAY_RESOLUTION_3840X2160:
- tmp_ret |= (CC_RESOLUTION_3840X2160_W << 16);
- tmp_ret |= (CC_RESOLUTION_3840X2160_H << 0);
- break;
- default:
- tmp_ret |= (CC_RESOLUTION_3840X2160_W << 16);
- tmp_ret |= (CC_RESOLUTION_3840X2160_H << 0);
- break;
- }
-
- if (win_pos != NULL) {
- win_pos->x1 = 0;
- win_pos->y1 = 0;
- win_pos->x2 = ((tmp_ret >> 16) & 0xFFFF) - 1;
- win_pos->y2 = ((tmp_ret >> 0) & 0xFFFF) - 1;
- }
-
- return 0;
-}
-
-
-int CTv::setBlackoutEnable(int enable)
-{
- m_blackout_enable = enable;
- return SSMSaveBlackoutEnable(enable);
-}
-
-int CTv::getSaveBlackoutEnable()
-{
- int8_t enable;
- SSMReadBlackoutEnable(&enable);
- return enable;
-}
-void CTv::startAutoBackLight()
-{
- mAutoBackLight.startAutoBacklight(CTvin::Tvin_SourceInputToSourceInputType(m_source_input));
-}
-
-void CTv::stopAutoBackLight()
-{
- mAutoBackLight.stopAutoBacklight();
-}
-
-int CTv::getAutoBackLight_on_off()
-{
- return mAutoBackLight.isAutoBacklightOn() ? 1 : 0;
-}
-/*********************** SSM start **********************/
-int CTv::Tv_SSMRestoreDefaultSetting()
-{
- SSMRestoreDeviceMarkValues();
- mTvAudio.AudioSSMRestoreDefaultSetting();
- mVpp.VPPSSMRestoreDefault();
- MiscSSMRestoreDefault();
- ReservedSSMRestoreDefault();
- SSMSaveCVBSStd ( 0 );
- SSMSaveLastSelectSourceInput ( SOURCE_TV );
- SSMSavePanelType ( 0 );
- //tvconfig default
- saveDTVProgramID ( -1 );
- saveATVProgramID ( -1 );
- return 0;
-}
-
-int CTv::clearDbAllProgramInfoTable()
-{
- return CTvDatabase::GetTvDb()->clearDbAllProgramInfoTable();
-}
-
-int CTv::Tv_SSMFacRestoreDefaultSetting()
-{
- mVpp.VPPSSMFacRestoreDefault();
- mTvAudio.AudioSSMRestoreDefaultSetting();
- MiscSSMFacRestoreDefault();
-
- return 0;
-}
-/*********************** SSM End **********************/
-//not in CTv, not use lock
-void CTv::setSourceSwitchAndPlay()
-{
- int progID = 0;
- LOGD ( "%s\n", __FUNCTION__ );
- static const int POWERON_SOURCE_TYPE_NONE = 0;//not play source
- static const int POWERON_SOURCE_TYPE_LAST = 1;//play last save source
- static const int POWERON_SOURCE_TYPE_SETTING = 2;//play ui set source
- int to_play_source = -1;
- int powerup_type = SSMReadPowerOnOffChannel();
- LOGD("read power on source type = %d", powerup_type);
- if (powerup_type == POWERON_SOURCE_TYPE_NONE) {
- return ;
- } else if (powerup_type == POWERON_SOURCE_TYPE_LAST) {
- to_play_source = SSMReadSourceInput();
- } else if (powerup_type == POWERON_SOURCE_TYPE_SETTING) {
- to_play_source = SSMReadLastSelectSourceInput();
- }
- SetSourceSwitchInput (( tv_source_input_t ) to_play_source );
- if ( to_play_source == SOURCE_TV ) {
- progID = getATVProgramID();
- } else if ( to_play_source == SOURCE_DTV ) {
- progID = getDTVProgramID();
- }
- playProgramLock(progID);
- return;
-}
-
-int CTv::startCC(int country, int src, int channel, int service)
-{
- //turn_on_cc = true;
- return mTvSub.sub_start_atsc_cc((enum cc_param_country)country, (enum cc_param_source_type)src, channel, (enum cc_param_caption_type)service);
-}
-
-int CTv::stopCC()
-{
- return mTvSub.sub_stop_atsc_cc();
-}
-
-void CTv::printDebugInfo()
-{
- print_version_info();
- LOGD("%s, TvAction = %x", __FUNCTION__, mTvAction);
- LOGD("%s, TvRunStatus = %d", __FUNCTION__, mTvStatus);
- LOGD("%s, TvCurSourceInput = %d", __FUNCTION__, m_source_input);
- LOGD("%s, TvLastSourceInput = %d", __FUNCTION__, m_last_source_input);
-}
-//==============vchip end================================
-//----------------DVR API============================
-void CTv::SetRecordFileName ( char *name )
-{
- char tmp[256];
- strcpy ( tmp, name );
- mTvRec.SetRecordFileName ( tmp );
-}
-void CTv::StartToRecord()
-{
- int progID = getDTVProgramID();
- mTvRec.StartRecord ( progID );
-}
-void CTv::StopRecording()
-{
- mTvRec.StopRecord();
-}
-void CTv::SetRecCurTsOrCurProgram ( int sel )
-{
- mTvRec.SetRecCurTsOrCurProgram ( sel );
-}
-
-int CTv::GetDisplayResolutionConfig()
-{
- return mAv.getVideoDisplayResolution();
-}
-
-int CTv::GetDisplayResolutionInfo()
-{
- return Vpp_GetDisplayResolutionInfo(NULL);
-}
-
-void CTv::onHDMIRxCECMessage(int msg_len, unsigned char msg_buf[])
-{
- int i = 0;
- TvEvent::HDMIRxCECEvent ev;
- ev.mDataCount = msg_len;
- for (i = 0; i < msg_len; i++) {
- ev.mDataBuf[i] = msg_buf[i];
- }
- sendTvEvent(ev);
-}
-
-int CTv::SendHDMIRxCECCustomMessage(unsigned char data_buf[])
-{
- tv_source_input_t source_input = m_source_input;
-
- return mHDMIRxCEC.SendCustomMessage(source_input, data_buf);
-}
-
-int CTv::SendHDMIRxCECCustomMessageAndWaitReply(unsigned char data_buf[], unsigned char reply_buf[], int WaitCmd, int timeout)
-{
- tv_source_input_t source_input = m_source_input;
-
- return mHDMIRxCEC.SendCustomMessageAndWaitReply(source_input, data_buf, reply_buf, WaitCmd, timeout);
-}
-
-int CTv::SendHDMIRxCECBoradcastStandbyMessage(void)
-{
- tv_source_input_t source_input = m_source_input;
-
- return mHDMIRxCEC.SendBoradcastStandbyMessage(source_input);
-}
-
-int CTv::SendHDMIRxCECGiveCECVersionMessage(tv_source_input_t source_input, unsigned char data_buf[])
-{
- if (mHDMIRxCEC.processRefreshSrcDevice(source_input) == 0) {
- return mHDMIRxCEC.SendGiveCECVersionMessage(source_input, data_buf);
- }
-
- return -1;
-}
-
-int CTv::SendHDMIRxCECGiveDeviceVendorIDMessage(tv_source_input_t source_input, unsigned char data_buf[])
-{
- if (mHDMIRxCEC.processRefreshSrcDevice(source_input) == 0) {
- return mHDMIRxCEC.SendGiveDeviceVendorIDMessage(source_input, data_buf);
- }
-
- return -1;
-}
-
-int CTv::SendHDMIRxCECGiveOSDNameMessage(tv_source_input_t source_input, unsigned char data_buf[])
-{
- if (mHDMIRxCEC.processRefreshSrcDevice(source_input) == 0) {
- return mHDMIRxCEC.SendGiveOSDNameMessage(source_input, data_buf);
- }
-
- return -1;
-}
-
-int CTv::GetHdmiHdcpKeyKsvInfo(int data_buf[])
-{
- return mTvin.get_hdmi_ksv_info(m_source_input, data_buf);
-}
-
-void CTv::onUpgradeStatus(int state, int param)
-{
- TvEvent::UpgradeFBCEvent ev;
- ev.mState = state;
- ev.param = param;
- sendTvEvent(ev);
-}
-
-int CTv::StartUpgradeFBC(char *file_name, int mode, int upgrade_blk_size)
-{
- if (mpUpgradeFBC != NULL) {
- mpUpgradeFBC->SetUpgradeFileName(file_name);
- mpUpgradeFBC->SetUpgradeMode(mode);
- mpUpgradeFBC->SetUpgradeBlockSize(upgrade_blk_size);
- mpUpgradeFBC->start();
- return 0;
- }
-
- return -1;
-}
-
-void CTv::onSerialCommunication(int dev_id, int rd_len, unsigned char data_buf[])
-{
- int i = 0;
- TvEvent::SerialCommunicationEvent ev;
- ev.mDevId = dev_id;
- ev.mDataCount = rd_len;
- for (i = 0; i < rd_len; i++) {
- ev.mDataBuf[i] = data_buf[i];
- }
- sendTvEvent(ev);
-}
-
-void CTv::onThermalDetect(int state)
-{
- const char *value;
- const char *value_normal;
- const char *value_cold;
- int threshold = 0, val = 0;
- static int pre_val = -1;
-
- value = config_get_str ( "TV", "tvin.thermal.threshold.enable", "null" );
-
- if ( strcmp ( value, "enable" ) == 0 ) {
-
- value = config_get_str ( "TV", "tvin.thermal.threshold.value", "null" );
-
- threshold = atoi(value);
- LOGD ( "%s, threshold value: %d\n", __FUNCTION__, threshold);
-
- if (state > threshold) {
- value_normal = config_get_str ( "TV", "tvin.thermal.fbc.normal.value", "null" );
- val = atoi(value_normal);
- if (val == 0) {
- val = 0x4210000; //normal default
- }
- LOGD ( "%s, current temp: %d set 1\n", __FUNCTION__, state);
- } else {
- value_cold = config_get_str ( "TV", "tvin.thermal.fbc.cold.value", "null" );
- val = atoi(value_cold);
- if (val == 0) {
- val = 0x8210000; //cold default
- }
- LOGD ( "%s, current temp: 0x%x set 0\n", __FUNCTION__, state);
- }
-
- if (pre_val == val) {
- LOGD ( "%s, pre_val == val : 0x%x,bypass\n", __FUNCTION__, val);
- } else {
- pre_val = val;
- Tv_FactorySet_FBC_Thermal_State(val);
- LOGD ( "%s, pre_val :0x%x,bypass\n", __FUNCTION__, pre_val);
- }
- } else {
- LOGD ( "%s, tvin.thermal.threshold.enable == disable\n", __FUNCTION__);
- }
-}
-
-int CTv::SetSerialSwitch(int dev_id, int switch_val)
-{
- int tmp_ret = 0;
-
- if (dev_id == SERIAL_A) {
- if (switch_val == 0) {
- tmp_ret |= mSerialA.stop();
- tmp_ret |= mSerialA.CloseModule();
-
- tmp_ret |= system("start console");
- } else {
- tmp_ret |= system("stop console");
-
- mSerialA.OpenModule(dev_id);
- tmp_ret |= mSerialA.start();
- }
- } else if (dev_id == SERIAL_B) {
- if (switch_val == 0) {
- tmp_ret |= mSerialB.stop();
- tmp_ret |= mSerialB.CloseModule();
- } else {
- mSerialB.OpenModule(dev_id);
- tmp_ret = mSerialB.start();
- }
- } else if (dev_id == SERIAL_C) {
- if (switch_val == 0) {
- tmp_ret |= mSerialC.stop();
- tmp_ret |= mSerialC.CloseModule();
- } else {
- mSerialC.OpenModule(dev_id);
- tmp_ret = mSerialC.start();
- }
- }
-
- return tmp_ret;
-}
-
-int CTv::SendSerialData(int dev_id, int data_len, unsigned char data_buf[])
-{
- int tmp_ret = 0;
-
- if (dev_id == SERIAL_A) {
- tmp_ret = mSerialA.sendData(data_len, data_buf);
- } else if (dev_id == SERIAL_B) {
- tmp_ret = mSerialB.sendData(data_len, data_buf);
- } else if (dev_id == SERIAL_C) {
- tmp_ret = mSerialC.sendData(data_len, data_buf);
- }
-
- return tmp_ret;
-}
-
-int CTv::ChannelExport(const char *destPath)
-{
- //DIR *dirptr = NULL;
- //dirptr = opendir("/storage/external_storage/sda1/");
- //if(NULL == dirptr) {
- // LOGD("%s, please insert the udisk !",__FUNCTION__);
- // return -2;
- // } else {
- char tmp[256];
- FILE *fp = NULL;
- if (destPath == NULL) {
- destPath = "/storage/external_storage/sda1/";
- }
-
- //LOGD("%s, udisk exist !",__FUNCTION__);
- sprintf(tmp, "cp /param/dtv.db %s", destPath);
- if (system(tmp) >= 0) {
- LOGD("%s, copy dtv.db from /param to udisk success !", __FUNCTION__);
- system("sync");
- fp = fopen(destPath, "r");
- if (fp == NULL) {
- return -1;
- } else {
- fclose(fp);
- fp = NULL;
- return 0;
- }
- } else {
- return -1;
- }
- //}
-}
-
-int CTv::ChannelImport(const char *srcPath)
-{
- if (srcPath == NULL) {
- srcPath = "/storage/external_storage/sda1/dvb.db";
- }
-
- if (Tv_Utils_IsFileExist(srcPath) == 0) {
- char tmp[256];
- LOGD("%s, file exist !" , srcPath);
- CTvDatabase::GetTvDb()->UnInitTvDb();
- sprintf(tmp, "rm /param/dtv.db");
- if (system(tmp) >= 0) {
- LOGD("%s, rm /param/dtv.db success !", __FUNCTION__);
- memset(tmp, 0, sizeof(tmp));
- sprintf(tmp, "cp %s /param/dtv.db", srcPath);
- if (system(tmp) >= 0) {
- LOGD("%s, copy to /param/dtv.db success !", srcPath);
- system("sync");
- CTvDatabase::GetTvDb()->InitTvDb(TV_DB_PATH);
- return 0;
- } else {
- LOGD("%s, copy dtv.db from udisk to /param failed !", __FUNCTION__);
- return -1;
- }
- } else {
- LOGD("%s, rm /param/dtv.db failed !", __FUNCTION__);
- return -2;
- }
- } else {
- LOGD("%s, dtv.db file does not exist in the udisk!" , srcPath);
- return -2;
- }
-
-}
-
-int CTv::Tv_GetProjectInfo(project_info_t *ptrInfo)
-{
- return GetProjectInfo(ptrInfo);
-}
-
-int CTv::Tv_GetPlatformType()
-{
- return GetPlatformHaveFBCFlag();
-}
-
-int CTv::Tv_SetDDDRCMode(tv_source_input_t source_input)
-{
- if (source_input == SOURCE_DTV) {
- if (GetPlatformHaveDDFlag() == 1) {
- Tv_Utils_SetFileAttrStr("/sys/class/audiodsp/ac3_drc_control", "drcmode 3");
- }
- } else {
- if (GetPlatformHaveDDFlag() == 1) {
- Tv_Utils_SetFileAttrStr("/sys/class/audiodsp/ac3_drc_control", "drcmode 2");
- }
- }
-
- return 0;
-}
-
-//PQ
-int CTv::Tv_SetBrightness ( int brightness, tv_source_input_type_t source_type, int is_save )
-{
- return mVpp.Tv_SetBrightness(brightness, (tv_source_input_type_t)source_type, mSigDetectThread.getCurSigInfo().fmt, mSigDetectThread.getCurSigInfo().trans_fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), is_save);
-}
-
-int CTv::Tv_GetBrightness ( tv_source_input_type_t source_type )
-{
- return mVpp.Tv_GetBrightness((tv_source_input_type_t)source_type);
-}
-
-int CTv::Tv_SetContrast ( int contrast, tv_source_input_type_t source_type, int is_save )
-{
- return mVpp.Tv_SetContrast(contrast, (tv_source_input_type_t)source_type, mSigDetectThread.getCurSigInfo().fmt, mSigDetectThread.getCurSigInfo().trans_fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), is_save);
-}
-
-int CTv::Tv_GetContrast ( tv_source_input_type_t source_type )
-{
- return mVpp.Tv_GetContrast((tv_source_input_type_t)source_type);
-}
-
-int CTv::Tv_SetSaturation ( int satuation, tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, int is_save )
-{
- return mVpp.Tv_SetSaturation(satuation, (tv_source_input_type_t)source_type, (tvin_sig_fmt_t)fmt, mSigDetectThread.getCurSigInfo().trans_fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), is_save);
-}
-
-int CTv::Tv_GetSaturation ( tv_source_input_type_t source_type )
-{
- return mVpp.Tv_GetSaturation((tv_source_input_type_t)source_type);
-}
-
-int CTv::Tv_SetHue ( int hue, tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, int is_save )
-{
- return mVpp.Tv_SetHue(hue, (tv_source_input_type_t)source_type, (tvin_sig_fmt_t)fmt, mSigDetectThread.getCurSigInfo().trans_fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), is_save);
-}
-
-int CTv::Tv_GetHue ( tv_source_input_type_t source_type )
-{
- return mVpp.Tv_GetHue((tv_source_input_type_t)source_type);
-}
-
-int CTv::Tv_SetPQMode ( vpp_picture_mode_t mode, tv_source_input_type_t source_type, int is_save )
-{
- return mVpp.Tv_SetPQMode((vpp_picture_mode_t)mode, (tv_source_input_type_t)source_type, mSigDetectThread.getCurSigInfo().fmt, mSigDetectThread.getCurSigInfo().trans_fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), is_save);
-}
-
-vpp_picture_mode_t CTv::Tv_GetPQMode ( tv_source_input_type_t source_type )
-{
- return mVpp.Tv_GetPQMode((tv_source_input_type_t)source_type);
-}
-
-int CTv::Tv_SetSharpness ( int value, tv_source_input_type_t source_type, int en, int is_save )
-{
- return mVpp.Tv_SetSharpness(value, (tv_source_input_type_t)source_type, en, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), mSigDetectThread.getCurSigInfo().fmt, mSigDetectThread.getCurSigInfo().trans_fmt, is_save);
-}
-
-int CTv::Tv_GetSharpness ( tv_source_input_type_t source_type )
-{
- return mVpp.Tv_GetSharpness((tv_source_input_type_t)source_type);
-}
-
-int CTv::Tv_SaveSharpness ( int value, tv_source_input_type_t source_type, int en )
-{
- if ( en == 1 ) {
- return SSMSaveSharpness( (tv_source_input_type_t)source_type, value );
- } else {
- return 0;
- }
-}
-
-int CTv::Tv_SetBacklight ( int value, tv_source_input_type_t source_type, int is_save )
-{
- return mVpp.Tv_SetBacklight(value, (tv_source_input_type_t)source_type, is_save);
-}
-
-int CTv::Tv_GetBacklight ( tv_source_input_type_t source_type )
-{
- return mVpp.Tv_GetBacklight((tv_source_input_type_t)source_type);
-}
-
-int CTv::Tv_SetColorTemperature ( vpp_color_temperature_mode_t mode, tv_source_input_type_t source_type, int is_save )
-{
- return mVpp.Tv_SetColorTemperature((vpp_color_temperature_mode_t)mode, (tv_source_input_type_t)source_type, is_save);
-}
-
-vpp_color_temperature_mode_t CTv::Tv_GetColorTemperature ( tv_source_input_type_t source_type )
-{
- return mVpp.Tv_GetColorTemperature((tv_source_input_type_t)source_type);
-}
-
-int CTv::Tv_SaveColorTemp ( vpp_color_temperature_mode_t mode, tv_source_input_type_t source_type )
-{
- return mVpp.Tv_SaveColorTemp((vpp_color_temperature_mode_t)mode, (tv_source_input_type_t)source_type);
-}
-
-int CTv::Tv_SetDisplayMode ( vpp_display_mode_t mode, tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, int is_save )
-{
- int ret = Vpp_SetDisplayMode((vpp_display_mode_t)mode, (tv_source_input_type_t)source_type, (tvin_sig_fmt_t)fmt);
- if (ret == 0) {
- if (is_save == 1) {
- ret = ret | SSMSaveDisplayMode ( source_type, (int)mode );
- }
- }
- return ret;
-}
-
-int CTv::Vpp_SetDisplayMode ( vpp_display_mode_t display_mode, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt )
-{
- LOGD("%s, display_mode = %d, source_type = %d. \n", __FUNCTION__, display_mode, source_type);
-
- tvin_cutwin_t cutwin = mVpp.Tv_GetOverscan ( source_type, sig_fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), mSigDetectThread.getCurSigInfo().trans_fmt);
- int video_screen_mode = CAv::VIDEO_WIDEOPTION_16_9;
- tvin_window_pos_t win_pos;
- int display_resolution = Vpp_GetDisplayResolutionInfo(&win_pos);
-
-
- if ( source_type == SOURCE_TYPE_HDMI ) {
- if ( sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_60HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_60HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_50HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_A
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_B
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_24HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_25HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_30HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_100HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_120HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_100HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_120HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_FRAME_PACKING
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_FRAME_PACKING
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_30HZ_FRAME_PACKING
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_60HZ_ALTERNATIVE
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_ALTERNATIVE
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_ALTERNATIVE
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_30HZ_ALTERNATIVE
- || sig_fmt == TVIN_SIG_FMT_HDMI_3840_2160_00HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_4096_2160_00HZ
-
- ) {
- if ( display_mode == VPP_DISPLAY_MODE_NOSCALEUP ) {
- cutwin.vs = 0;
- cutwin.hs = 1;
- cutwin.ve = 0;
- cutwin.he = 1;
- }
- }
- }
-
- switch ( display_mode ) {
- case VPP_DISPLAY_MODE_169:
- video_screen_mode = CAv::VIDEO_WIDEOPTION_16_9;
- break;
- case VPP_DISPLAY_MODE_MODE43:
- video_screen_mode = CAv::VIDEO_WIDEOPTION_4_3;
- break;
- case VPP_DISPLAY_MODE_NORMAL:
- video_screen_mode = CAv::VIDEO_WIDEOPTION_NORMAL;
- break;
- case VPP_DISPLAY_MODE_FULL:
- break;
- case VPP_DISPLAY_MODE_NOSCALEUP: {
- if ( source_type == SOURCE_TYPE_HDMI ) {
- int retValue = GetFileAttrIntValue ( "/sys/module/tvin_hdmirx/parameters/cur_colorspace" );
- switch ( retValue ) {
- case RGB_FORMAT:
- mVpp.Tv_SetColorSpaceMode ( VPP_COLOR_SPACE_RGB );
- cutwin.vs = 0;
- cutwin.hs = 0;
- cutwin.ve = 0;
- cutwin.he = 0;
- break;
-
- default:
- mVpp.Tv_SetColorSpaceMode ( VPP_COLOR_SPACE_YUV );
- break;
- }
- } else {
- video_screen_mode = CAv::VIDEO_WIDEOPTION_NORMAL_NOSCALEUP;
- }
- break;
- }
- case VPP_DISPLAY_MODE_FULL_REAL:
- video_screen_mode = CAv::VIDEO_WIDEOPTION_16_9; //added for N360 by haifeng.liu
- break;
- case VPP_DISPLAY_MODE_PERSON:
- if ( display_resolution == VPP_DISPLAY_RESOLUTION_1366X768 ) {
- win_pos.y1 = -45;
- win_pos.y2 = win_pos.y2 - win_pos.y1;
- } else {
- win_pos.y1 = -65;
- win_pos.y2 = win_pos.y2 - win_pos.y1;
- }
- video_screen_mode = CAv::VIDEO_WIDEOPTION_FULL_STRETCH;
- break;
- case VPP_DISPLAY_MODE_MOVIE:
- if ( display_resolution == VPP_DISPLAY_RESOLUTION_1366X768 ) {
- win_pos.y1 = -61;
- win_pos.y2 = win_pos.y2 - win_pos.y1;
- } else {
- win_pos.y1 = -86;
- win_pos.y2 = win_pos.y2 - win_pos.y1;
- }
- video_screen_mode = CAv::VIDEO_WIDEOPTION_FULL_STRETCH;
- break;
- case VPP_DISPLAY_MODE_CAPTION:
- if (display_resolution == VPP_DISPLAY_RESOLUTION_1366X768 ) {
- win_pos.y1 = -61;
- win_pos.y2 = win_pos.y2 + 2;
- } else {
- win_pos.y1 = -86;
- win_pos.y2 = win_pos.y2 + 4;
- }
- video_screen_mode = CAv::VIDEO_WIDEOPTION_FULL_STRETCH;
- break;
- case VPP_DISPLAY_MODE_ZOOM:
- if (display_resolution == VPP_DISPLAY_RESOLUTION_1366X768 ) {
- win_pos.y1 = -128;
- win_pos.y2 = win_pos.y2 - win_pos.y1;
- } else {
- win_pos.y1 = -180;
- win_pos.y2 = win_pos.y2 - win_pos.y1;
- }
- video_screen_mode = CAv::VIDEO_WIDEOPTION_FULL_STRETCH;
- break;
- default:
- break;
- }
-
- if ( display_mode == VPP_DISPLAY_MODE_FULL ) {
- if ( source_type == SOURCE_TYPE_HDMI ) {
- if ( sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_60HZ
- //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_60HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_50HZ
- //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_A
- //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_B
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_24HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_25HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_30HZ
- //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_100HZ
- //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_120HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_100HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_120HZ
- //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_FRAME_PACKING
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_FRAME_PACKING
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_30HZ_FRAME_PACKING
- //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_60HZ_ALTERNATIVE
- //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_ALTERNATIVE
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_ALTERNATIVE
- || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_30HZ_ALTERNATIVE
- || sig_fmt == TVIN_SIG_FMT_HDMI_3840_2160_00HZ
- || sig_fmt == TVIN_SIG_FMT_HDMI_4096_2160_00HZ ) {
- const char *config_value = config_get_str ( "TV", "vpp.hdmi.nonlinear.scaling", "null" );
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- video_screen_mode = CAv::VIDEO_WIDEOPTION_NONLINEAR;
- mVpp.VPP_SetNonLinearFactor ( 20 );
- }
- } else {
- video_screen_mode = CAv::VIDEO_WIDEOPTION_NONLINEAR;
- mVpp.VPP_SetNonLinearFactor ( 20 );
- }
- cutwin.vs = 0;
- cutwin.hs = 1;
- cutwin.ve = 0;
- cutwin.he = 1;
- }
- }
-
- if ( m_mode_3d == VIDEO_3D_MODE_DISABLE ) {
- if (display_mode == VPP_DISPLAY_MODE_FULL_REAL && source_type == SOURCE_TYPE_HDMI) {
- //added for N360 by haifeng.liu
- cutwin.vs = 0;
- cutwin.hs = 0;
- cutwin.ve = 0;
- cutwin.he = 0;
- }
- } else {
- cutwin.vs = 0;
- cutwin.hs = 0;
- cutwin.ve = 0;
- cutwin.he = 0;
- video_screen_mode = CAv::VIDEO_WIDEOPTION_FULL_STRETCH;
- }
-
- mAv.setVideoAxis ( win_pos.x1, win_pos.y1, win_pos.x2, win_pos.y2 );
- mAv.setVideoScreenMode(video_screen_mode);
- mVpp.VPP_SetVideoCrop(cutwin.vs, cutwin.hs, cutwin.ve, cutwin.he);
- return 0;
-}
-
-vpp_display_mode_t CTv::Tv_GetDisplayMode ( tv_source_input_type_t source_type )
-{
- return mVpp.Tv_GetDisplayMode((tv_source_input_type_t)source_type);
-}
-
-int CTv::Tv_SaveDisplayMode ( vpp_display_mode_t mode, tv_source_input_type_t source_type )
-{
- return SSMSaveDisplayMode ( source_type, (int)mode );
-}
-
-int CTv::Tv_SetNoiseReductionMode ( vpp_noise_reduction_mode_t mode, tv_source_input_type_t source_type, int is_save )
-{
- return mVpp.Tv_SetNoiseReductionMode((vpp_noise_reduction_mode_t)mode, (tv_source_input_type_t)source_type, mSigDetectThread.getCurSigInfo().fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), mSigDetectThread.getCurSigInfo().trans_fmt, is_save);
-}
-
-vpp_noise_reduction_mode_t CTv::Tv_GetNoiseReductionMode ( tv_source_input_type_t source_type )
-{
- return mVpp.Tv_GetNoiseReductionMode((tv_source_input_type_t)source_type);
-}
-
-int CTv::Tv_SaveNoiseReductionMode ( vpp_noise_reduction_mode_t mode, tv_source_input_type_t source_type )
-{
- return mVpp.Tv_SaveNoiseReductionMode((vpp_noise_reduction_mode_t)mode, (tv_source_input_type_t)source_type);
-}
-
-int CTv::Tv_SetRGBOGO_PostOffset(int type, int offset)
-{
- return mVpp.Tv_SetRGBOGO_PostOffset(type, offset);
-}
-
-int CTv::Tv_SetRGBOGO_Gain(int type, int mode)
-{
- return mVpp.Tv_SetRGBOGO_Gain(type, mode);
-}
-
-int CTv::Tv_GetRGBOGO_PostOffset ( int type )
-{
- return mVpp.Tv_GetRGBOGO_PostOffset(type);
-}
-
-int CTv::Tv_GetRGBOGO_Gain ( int type )
-{
- return mVpp.Tv_GetRGBOGO_Gain(type);
-}
-
-int CTv::Tv_FactorySetPQMode_Brightness ( int source_type, int pq_mode, int brightness )
-{
- return mVpp.Tv_FactorySetPQMode_Brightness(source_type, pq_mode, brightness);
-}
-
-int CTv::Tv_FactoryGetPQMode_Brightness ( int source_type, int pq_mode )
-{
- return mVpp.Tv_FactoryGetPQMode_Brightness(source_type, pq_mode);
-}
-
-int CTv::Tv_FactorySetPQMode_Contrast ( int source_type, int pq_mode, int contrast )
-{
- return mVpp.Tv_FactorySetPQMode_Contrast(source_type, pq_mode, contrast);
-}
-
-int CTv::Tv_FactoryGetPQMode_Contrast ( int source_type, int pq_mode )
-{
- return mVpp.Tv_FactoryGetPQMode_Contrast(source_type, pq_mode);
-}
-
-int CTv::Tv_FactorySetPQMode_Saturation ( int source_type, int pq_mode, int saturation )
-{
- return mVpp.Tv_FactorySetPQMode_Saturation(source_type, pq_mode, saturation);
-}
-
-int CTv::Tv_FactoryGetPQMode_Saturation ( int source_type, int pq_mode )
-{
- return mVpp.Tv_FactoryGetPQMode_Saturation(source_type, pq_mode);
-}
-
-int CTv::Tv_FactorySetPQMode_Hue ( int source_type, int pq_mode, int hue )
-{
- return mVpp.Tv_FactorySetPQMode_Hue(source_type, pq_mode, hue);
-}
-
-int CTv::Tv_FactoryGetPQMode_Hue ( int source_type, int pq_mode )
-{
- return mVpp.Tv_FactoryGetPQMode_Hue(source_type, pq_mode);
-}
-
-int CTv::Tv_FactorySetPQMode_Sharpness ( int source_type, int pq_mode, int sharpness )
-{
- return mVpp.Tv_FactorySetPQMode_Sharpness(source_type, pq_mode, sharpness);
-}
-
-int CTv::Tv_FactoryGetPQMode_Sharpness ( int source_type, int pq_mode )
-{
- return mVpp.Tv_FactoryGetPQMode_Sharpness(source_type, pq_mode);
-}
-
-int CTv::Tv_FactorySetColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain )
-{
- return mVpp.Tv_FactorySetColorTemp_Rgain(source_type, colortemp_mode, rgain);
-}
-
-int CTv::Tv_FactorySaveColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain )
-{
- return mVpp.Tv_FactorySaveColorTemp_Rgain(source_type, colortemp_mode, rgain);
-}
-
-int CTv::Tv_FactoryGetColorTemp_Rgain ( int source_type, int colortemp_mode )
-{
- return mVpp.Tv_FactoryGetColorTemp_Rgain(source_type, colortemp_mode);
-}
-
-int CTv::Tv_FactorySetColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain )
-{
- return mVpp.Tv_FactorySetColorTemp_Ggain(source_type, colortemp_mode, ggain);
-}
-
-int CTv::Tv_FactorySaveColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain )
-{
- return mVpp.Tv_FactorySaveColorTemp_Ggain(source_type, colortemp_mode, ggain);
-}
-
-int CTv::Tv_FactoryGetColorTemp_Ggain ( int source_type, int colortemp_mode )
-{
- return mVpp.Tv_FactoryGetColorTemp_Ggain(source_type, colortemp_mode);
-}
-
-int CTv::Tv_FactorySetColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain )
-{
- return mVpp.Tv_FactorySetColorTemp_Bgain(source_type, colortemp_mode, bgain);
-}
-
-int CTv::Tv_FactorySaveColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain )
-{
- return mVpp.Tv_FactorySaveColorTemp_Bgain(source_type, colortemp_mode, bgain);
-}
-
-int CTv::Tv_FactoryGetColorTemp_Bgain ( int source_type, int colortemp_mode )
-{
- return mVpp.Tv_FactoryGetColorTemp_Bgain(source_type, colortemp_mode);
-}
-
-int CTv::Tv_FactorySetColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset )
-{
- return mVpp.Tv_FactorySetColorTemp_Roffset(source_type, colortemp_mode, roffset);
-}
-
-int CTv::Tv_FactorySaveColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset )
-{
- return mVpp.Tv_FactorySaveColorTemp_Roffset(source_type, colortemp_mode, roffset);
-}
-
-int CTv::Tv_FactoryGetColorTemp_Roffset ( int source_type, int colortemp_mode )
-{
- return mVpp.Tv_FactoryGetColorTemp_Roffset(source_type, colortemp_mode);
-}
-
-int CTv::Tv_FactorySetColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset )
-{
- return mVpp.Tv_FactorySetColorTemp_Goffset(source_type, colortemp_mode, goffset);
-}
-
-int CTv::Tv_FactorySaveColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset )
-{
- return mVpp.Tv_FactorySaveColorTemp_Goffset(source_type, colortemp_mode, goffset);
-}
-
-int CTv::Tv_FactoryGetColorTemp_Goffset ( int source_type, int colortemp_mode )
-{
- return mVpp.Tv_FactoryGetColorTemp_Goffset(source_type, colortemp_mode);
-}
-
-int CTv::Tv_FactorySetColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset )
-{
- return mVpp.Tv_FactorySetColorTemp_Boffset(source_type, colortemp_mode, boffset);
-}
-
-int CTv::Tv_FactorySaveColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset )
-{
- return mVpp.Tv_FactorySaveColorTemp_Boffset(source_type, colortemp_mode, boffset);
-}
-
-int CTv::Tv_FactoryGetColorTemp_Boffset ( int source_type, int colortemp_mode )
-{
- return mVpp.Tv_FactoryGetColorTemp_Boffset(source_type, colortemp_mode);
-}
-
-int CTv::GetColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params )
-{
- return mVpp.GetColorTemperatureParams(Tempmode, params);
-}
-
-int CTv::Tv_FactorySetTestPattern ( int pattern )
-{
- switch ( pattern ) {
- case VPP_TEST_PATTERN_NONE:
- mAv.SetVideoScreenColor ( 3, 16, 128, 128 );
- break;
-
- case VPP_TEST_PATTERN_RED:
- mAv.SetVideoScreenColor ( 0, 81, 90, 240 );
- break;
-
- case VPP_TEST_PATTERN_GREEN:
- mAv.SetVideoScreenColor ( 0, 145, 54, 34 );
- break;
-
- case VPP_TEST_PATTERN_BLUE:
- mAv.SetVideoScreenColor ( 0, 41, 240, 110 );
- break;
-
- case VPP_TEST_PATTERN_WHITE:
- mAv.SetVideoScreenColor ( 0, 235, 128, 128 );
- break;
-
- case VPP_TEST_PATTERN_BLACK:
- mAv.SetVideoScreenColor ( 0, 16, 128, 128 );
- break;
-
- default:
- return -1;
- }
- return SSMSaveTestPattern ( pattern );
-}
-
-int CTv::Tv_FactoryGetTestPattern ( void )
-{
- return mVpp.Tv_FactoryGetTestPattern();
-}
-
-int CTv::Tv_FactoryResetPQMode ( void )
-{
- return mVpp.Tv_FactoryResetPQMode();
-}
-
-int CTv::Tv_FactoryResetColorTemp ( void )
-{
- return mVpp.Tv_FactoryResetColorTemp();
-}
-
-int CTv::Tv_FactorySetParamsDefault ( void )
-{
- return mVpp.Tv_FactorySetParamsDefault();
-}
-
-int CTv::Tv_FactorySetDDRSSC ( int step )
-{
- return mVpp.Tv_FactorySetDDRSSC(step);
-}
-
-int CTv::Tv_FactoryGetDDRSSC ( void )
-{
- return mVpp.Tv_FactoryGetDDRSSC();
-}
-
-int CTv::Tv_FactorySetLVDSSSC ( int step )
-{
- return mVpp.Tv_FactorySetLVDSSSC(step);
-}
-
-int CTv::Tv_FactoryGetLVDSSSC ( void )
-{
- return mVpp.Tv_FactoryGetLVDSSSC();
-}
-
-int CTv::Tv_FactorySetNolineParams ( int noline_params_type, int source_type, noline_params_t noline_params )
-{
- return mVpp.Tv_FactorySetNolineParams(noline_params_type, source_type, noline_params);
-}
-
-noline_params_t CTv::Tv_FactoryGetNolineParams ( int noline_params_type, int source_type )
-{
- return mVpp.Tv_FactoryGetNolineParams(noline_params_type, source_type);
-}
-
-int CTv::Tv_FactorySetOverscan ( int source_type, int fmt, int status_3d, int trans_fmt, tvin_cutwin_t cutwin_t )
-{
- //tvin_cutwin_t cutwin_t = mVpp.Tv_FactoryGetOverscan(source_type, fmt, status_3d, trans_fmt);
- return mVpp.VPP_SetVideoCrop ( ( int ) cutwin_t.vs, ( int ) cutwin_t.hs, ( int ) cutwin_t.ve, ( int ) cutwin_t.he );
-}
-
-tvin_cutwin_t CTv::Tv_FactoryGetOverscan ( int source_type, int fmt, int status_3d, int trans_fmt )
-{
- return mVpp.Tv_FactoryGetOverscan(source_type, fmt, Check2Dor3D(m_mode_3d, (tvin_trans_fmt_t)trans_fmt), trans_fmt);
-}
-
-int CTv::Tv_FactorySet_FBC_Brightness ( int value )
-{
- //int temp_value = (255*value)/100;
- int temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Brightness(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Brightness ( void )
-{
- int temp_value = 0;
- int data = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Brightness(COMM_DEV_SERIAL, &temp_value);
- //data = (temp_value*100)/255;
- data = temp_value;
-
- return data;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_Contrast ( int value )
-{
- //int temp_value = (255*value)/100;
- int temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Contrast(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Contrast ( void )
-{
- int temp_value = 0;
- int data = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Contrast(COMM_DEV_SERIAL, &temp_value);
- //data = (temp_value*100)/255;
- data = temp_value;
-
- return data;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_Saturation ( int value )
-{
- //int temp_value = (255*value)/100;
- int temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Saturation(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Saturation ( void )
-{
- int temp_value = 0;
- int data = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Saturation(COMM_DEV_SERIAL, &temp_value);
- //data = (temp_value*100)/255;
- data = temp_value;
-
- return data;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_HueColorTint ( int value )
-{
- //int temp_value = (255*value)/100;
- int temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_HueColorTint(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_HueColorTint ( void )
-{
- int temp_value = 0;
- int data = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_HueColorTint(COMM_DEV_SERIAL, &temp_value);
- //data = (temp_value*100)/255;
- data = temp_value;
-
- return data;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_Backlight ( int value )
-{
- int temp_value = value;
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Backlight(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Backlight ( void )
-{
- int temp_value = 0;
- int data = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Backlight(COMM_DEV_SERIAL, &temp_value);
- data = temp_value;
-
- return data;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_Backlight_N360 ( int value )
-{
- int val = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_AUTO_ELEC_MODE(COMM_DEV_SERIAL, value);
- val = value;
- SSMSaveFBCN360BackLightVal(val);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Backlight_N360 ( void )
-{
- int temp_value = 0;
- int val = 0;
-
- SSMReadFBCN360BackLightVal(&val);
-
- return val;
-
-}
-
-
-int CTv::Tv_FactorySet_FBC_ELEC_MODE( int value )
-{
- int val = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_AUTO_ELEC_MODE(COMM_DEV_SERIAL, value);
- val = value;
- SSMSaveFBCELECmodeVal(val);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_ELEC_MODE( void )
-{
- int val = 0;
-
- SSMReadFBCELECmodeVal(&val);
-
- return val;
-}
-
-int CTv::Tv_FactorySet_FBC_Thermal_State( int value )
-{
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Thermal_state(COMM_DEV_SERIAL, value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactorySet_FBC_Picture_Mode ( int mode )
-{
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Picture_Mode(COMM_DEV_SERIAL, mode);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Picture_Mode ( void )
-{
- int mode = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Picture_Mode(COMM_DEV_SERIAL, &mode);
- return mode;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_Set_Test_Pattern ( int mode )
-{
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Test_Pattern(COMM_DEV_SERIAL, mode);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Get_Test_Pattern ( void )
-{
- int mode = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Test_Pattern(COMM_DEV_SERIAL, &mode);
- return mode;
- }
-
- return 0;
-}
-
-
-int CTv::Tv_FactorySet_FBC_Gain_Red( int value )
-{
- int temp_value = 0;
-
- //temp_value = (value*255)/2047;
- //value 0 ~ 2047
- temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Gain_Red(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Gain_Red ( void )
-{
- int temp_value = 0, value = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Gain_Red(COMM_DEV_SERIAL, &temp_value);
- //value 0 ~ 2047
- //value = (temp_value*2047)/255;
- value = temp_value;
-
- return value;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_Gain_Green( int value )
-{
- int temp_value = 0;
-
- //temp_value = (value*255)/2047;
- //value 0 ~ 2047
- temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Gain_Green(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Gain_Green ( void )
-{
- int temp_value = 0, value = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Gain_Green(COMM_DEV_SERIAL, &temp_value);
- //value 0 ~ 2047
- //value = (temp_value*2047)/255;
- value = temp_value;
-
- return value;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_Gain_Blue( int value )
-{
- int temp_value = 0;
-
- //temp_value = (value*255)/2047;
- //value 0 ~ 2047
- temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Gain_Blue(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Gain_Blue ( void )
-{
- int temp_value = 0, value = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Gain_Blue(COMM_DEV_SERIAL, &temp_value);
- //value 0 ~ 2047
- //value = (temp_value*2047)/255;
- value = temp_value;
-
- return value;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_Offset_Red( int value )
-{
- //value -1024~+1023
- int temp_value = 0;
-
- //temp_value = (value+1024)*255/2047;
- temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Offset_Red(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Offset_Red ( void )
-{
- int temp_value = 0, value = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Offset_Red(COMM_DEV_SERIAL, &temp_value);
- //value -1024~+1023
- //value = (temp_value*2047)/255 - 1024;
- value = temp_value;
-
- return value;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_Offset_Green( int value )
-{
- //value -1024~+1023
- int temp_value = 0;
-
- //temp_value = (value+1024)*255/2047;
- temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Offset_Green(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Offset_Green ( void )
-{
- int temp_value = 0, value = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Offset_Green(COMM_DEV_SERIAL, &temp_value);
- //value -1024~+1023
- //value = (temp_value*2047)/255 - 1024;
- value = temp_value;
-
- return value;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_Offset_Blue( int value )
-{
- //value -1024~+1023
- int temp_value = 0;
-
- //temp_value = (value+1024)*255/2047;
- temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Offset_Blue(COMM_DEV_SERIAL, value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Offset_Blue ( void )
-{
- int temp_value = 0, value = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Offset_Blue(COMM_DEV_SERIAL, &temp_value);
- //value -1024~+1023
- //value = (temp_value*2047)/255 - 1024;
- value = temp_value;
-
- return value;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactoryGetWhiteBalanceRedGain(int source_type, int colortemp_mode)
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- LOGD("--------- call none fbc method ---------");
- ret = mVpp.Tv_FactoryGetColorTemp_Rgain(source_type, colortemp_mode);
- } else { //use fbc store the white balance params
- LOGD("--------- call fbc method ---------");
- colortemp_mode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
- ret = Tv_FactoryGetItemFromBatch((vpp_color_temperature_mode_t)colortemp_mode, 0);
- }
- return ret;
-}
-
-int CTv::Tv_FactoryGetWhiteBalanceGreenGain(int source_type, int colortemp_mode)
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_FactoryGetColorTemp_Ggain(source_type, colortemp_mode);
- } else { //use fbc store the white balance params
- colortemp_mode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
- ret = Tv_FactoryGetItemFromBatch((vpp_color_temperature_mode_t)colortemp_mode, 1);
- }
- return ret;
-}
-
-int CTv::Tv_FactoryGetWhiteBalanceBlueGain(int source_type, int colortemp_mode)
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_FactoryGetColorTemp_Bgain(source_type, colortemp_mode);
- } else { //use fbc store the white balance params
- colortemp_mode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
- ret = Tv_FactoryGetItemFromBatch((vpp_color_temperature_mode_t)colortemp_mode, 2);
- }
- return ret;
-}
-
-int CTv::Tv_FactoryGetWhiteBalanceRedOffset(int source_type, int colortemp_mode)
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_FactoryGetColorTemp_Roffset(source_type, colortemp_mode);
- } else { //use fbc store the white balance params
- colortemp_mode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
- ret = Tv_FactoryGetItemFromBatch((vpp_color_temperature_mode_t)colortemp_mode, 3);
- }
- return ret;
-}
-
-int CTv::Tv_FactoryGetWhiteBalanceGreenOffset(int source_type, int colortemp_mode)
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_FactoryGetColorTemp_Goffset(source_type, colortemp_mode);
- } else { //use fbc store the white balance params
- colortemp_mode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
- ret = Tv_FactoryGetItemFromBatch((vpp_color_temperature_mode_t)colortemp_mode, 4);
- }
- return ret;
-}
-
-int CTv::Tv_FactoryGetWhiteBalanceBlueOffset(int source_type, int colortemp_mode)
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_FactoryGetColorTemp_Boffset(source_type, colortemp_mode);
- } else { //use fbc store the white balance params
- colortemp_mode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
- ret = Tv_FactoryGetItemFromBatch((vpp_color_temperature_mode_t)colortemp_mode, 5);
- }
- return ret;
-}
-
-int CTv::Tv_FactorySetWhiteBalanceRedGain(int source_type, int colortemp_mode, int value)
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (value < 0) {
- value = 0;
- } else if (value > 2047) {
- value = 2047;
- }
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_FactorySetColorTemp_Rgain(source_type, colortemp_mode, value);
- if (ret != -1) {
- LOGD("save the red gain to flash")
- ret = mVpp.Tv_FactorySaveColorTemp_Rgain(source_type, colortemp_mode, value);
- }
- } else { //use fbc store the white balance params
- value = Tv_FactoryWhiteBalanceFormatInputFbcGainParams(value);
- ret = Tv_FactorySet_FBC_Gain_Red(value);
- }
- return ret;
-}
-
-int CTv::Tv_FactorySetWhiteBalanceGreenGain(int source_type, int colortemp_mode, int value)
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (value < 0) {
- value = 0;
- } else if (value > 2047) {
- value = 2047;
- }
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_FactorySetColorTemp_Ggain(source_type, colortemp_mode, value);
- if (ret != -1) {
- LOGD("save the green gain to flash")
- ret = mVpp.Tv_FactorySaveColorTemp_Ggain(source_type, colortemp_mode, value);
- }
- } else { //use fbc store the white balance params
- value = Tv_FactoryWhiteBalanceFormatInputFbcGainParams(value);
- ret = Tv_FactorySet_FBC_Gain_Green(value);
- }
- return ret;
-}
-
-int CTv::Tv_FactorySetWhiteBalanceBlueGain(int source_type, int colortemp_mode, int value)
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (value < 0) {
- value = 0;
- } else if (value > 2047) {
- value = 2047;
- }
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_FactorySetColorTemp_Bgain(source_type, colortemp_mode, value);
- if (ret != -1) {
- LOGD("save the blue gain to flash")
- ret = mVpp.Tv_FactorySaveColorTemp_Bgain(source_type, colortemp_mode, value);
- }
- } else { //use fbc store the white balance params
- value = Tv_FactoryWhiteBalanceFormatInputFbcGainParams(value);
- ret = Tv_FactorySet_FBC_Gain_Blue(value);
- }
- return ret;
-}
-
-int CTv::Tv_FactorySetWhiteBalanceRedOffset(int source_type, int colortemp_mode, int value)
-{
- int useFbc = 0;
- int ret = -1;
- if (value < -1024) {
- value = -1024;
- } else if (value > 1023) {
- value = 1023;
- }
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_FactorySetColorTemp_Roffset(source_type, colortemp_mode, value);
- if (ret != -1) {
- LOGD("save the red offset to flash")
- ret = mVpp.Tv_FactorySaveColorTemp_Roffset(source_type, colortemp_mode, value);
- }
- } else { //use fbc store the white balance params
- value = Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(value);
- ret = Tv_FactorySet_FBC_Offset_Red(value);
- }
- return ret;
-}
-
-int CTv::Tv_FactorySetWhiteBalanceGreenOffset(int source_type, int colortemp_mode, int value)
-{
- int useFbc = 0;
- int ret = -1;
- if (value < -1024) {
- value = -1024;
- } else if (value > 1023) {
- value = 1023;
- }
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_FactorySetColorTemp_Goffset(source_type, colortemp_mode, value);
- if (ret != -1) {
- LOGD("save the green offset to flash")
- ret = mVpp.Tv_FactorySaveColorTemp_Goffset(source_type, colortemp_mode, value);
- }
- } else { //use fbc store the white balance params
- value = Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(value);
- ret = Tv_FactorySet_FBC_Offset_Green(value);
- }
- return ret;
-}
-
-int CTv::Tv_FactorySetWhiteBalanceBlueOffset(int source_type, int colortemp_mode, int value)
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (value < -1024) {
- value = -1024;
- } else if (value > 1023) {
- value = 1023;
- }
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_FactorySetColorTemp_Boffset(source_type, colortemp_mode, value);
- if (ret != -1) {
- LOGD("save the blue offset to flash")
- ret = mVpp.Tv_FactorySaveColorTemp_Boffset(source_type, colortemp_mode, value);
- }
- } else { //use fbc store the white balance params
- value = Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(value);
- ret = Tv_FactorySet_FBC_Offset_Blue(value);
- }
- return ret;
-}
-
-
-int CTv::Tv_FactorySetWhiteBalanceColorTempMode(int source_type, int colortemp_mode, int is_save)
-{
- int useFbc = 0;
- int ret = -1;
- int colorTemp = 0;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_SetColorTemperature((vpp_color_temperature_mode_t)colortemp_mode, (tv_source_input_type_t)source_type, is_save);
- } else { //use fbc store the white balance params
- colorTemp = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
- ret = Tv_FactorySet_FBC_ColorTemp_Mode(colorTemp);
- }
- return ret;
-}
-
-int CTv::Tv_FactoryGetWhiteBalanceColorTempMode(int source_type )
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.Tv_GetColorTemperature((tv_source_input_type_t)source_type);
- } else { //use fbc store the white balance params
- ret = Tv_FactoryGet_FBC_ColorTemp_Mode();
- ret = Tv_FactoryWhiteBalanceColorTempMappingFbc2G9(ret);
- }
- return ret;
-}
-
-int CTv::Tv_FactoryWhiteBalanceFormatInputFbcGainParams(int value)
-{
- int ret = 1024;
- if (value < 0) {
- ret = 0;
- } else if (value > 2047) {
- ret = 2047;
- } else {
- ret = value;
- }
- ret = ret >> 3;
- return ret;
-}
-
-int CTv::Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(int value)
-{
- int ret = 0;
- if (value < -1024) {
- ret = -1024;
- } else if (value > 1023) {
- ret = 1023;
- } else {
- ret = value;
- }
- ret += 1024;
- ret = ret >> 3;
- return ret;
-}
-
-int CTv::Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(int value)
-{
- if (value == 255) {
- value = 1023;
- } else {
- value = value << 3;
- value -= 1024;
- }
- return value;
-}
-
-int CTv::Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(int value)
-{
- value = value << 3;
- if (value < 0) {
- value = 0;
- } else if (value > 2047) {
- value = 2047;
- }
- return value;
-}
-
-
-int CTv::Tv_FactorySaveWhiteBalancePramas(int source_type, int tempmode, int r_gain, int g_gain, int b_gain, int r_offset, int g_offset, int b_offset)
-{
- int useFbc = 0;
- int ret = 0;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- mVpp.Tv_SaveColorTemp((vpp_color_temperature_mode_t) tempmode, (tv_source_input_type_t) source_type);
- mVpp.Tv_FactorySaveColorTemp_Rgain(source_type, tempmode, r_gain);
- mVpp.Tv_FactorySaveColorTemp_Ggain(source_type, tempmode, g_gain);
- mVpp.Tv_FactorySaveColorTemp_Bgain(source_type, tempmode, b_gain);
- mVpp.Tv_FactorySaveColorTemp_Roffset(source_type, tempmode, r_offset);
- mVpp.Tv_FactorySaveColorTemp_Goffset(source_type, tempmode, g_offset);
- mVpp.Tv_FactorySaveColorTemp_Boffset(source_type, tempmode, b_offset);
- } else { //use fbc store the white balance params
- tcon_rgb_ogo_t params;
-
- params.r_gain = Tv_FactoryWhiteBalanceFormatInputFbcGainParams(r_gain);
- params.g_gain = Tv_FactoryWhiteBalanceFormatInputFbcGainParams(g_gain);
- params.b_gain = Tv_FactoryWhiteBalanceFormatInputFbcGainParams(b_gain);
- params.r_post_offset = Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(r_offset);
- params.g_post_offset = Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(g_offset);
- params.b_post_offset = Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(b_offset);
- tempmode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(tempmode);
- ret = Tv_FactorySet_FBC_ColorTemp_Batch((vpp_color_temperature_mode_t)tempmode, params);
- }
- return ret;
-}
-
-
-int CTv::Tv_FactoryCloseWhiteBalanceGrayPattern()
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = mVpp.VPP_SetGrayPattern(0);
- } else { //use fbc store the white balance params
- ret = Tv_FactoryClose_FBC_GrayPattern();
- }
- return ret;
-}
-
-int CTv::Tv_FactoryOpenWhiteBalanceGrayPattern()
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) { // not use fbc store the white balance params
- ret = 0;
- } else { //use fbc store the white balance params
- ret = Tv_FactoryOpen_FBC_GrayPattern();
- }
- return ret;
-}
-
-int CTv::Tv_FactorySetWhiteBalanceGrayPattern(int value)
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) {
- ret = mVpp.VPP_SetGrayPattern(value);
- } else {
- ret = Tv_FactorySet_FBC_GrayPattern(value);
- }
- return ret;
-}
-
-int CTv:: Tv_FactoryGetWhiteBalanceGrayPattern()
-{
- int useFbc = 0;
- int ret = -1;
- useFbc = GetPlatformHaveFBCFlag();
- if (useFbc == 0) {
- ret = mVpp.VPP_GetGrayPattern();
- } else {
-
- }
- return ret;
-}
-
-
-/**
-* The color temperature enum order is diffrent bettewn G9 and Fbc, so we have to make a mapping
-**/
-int CTv::Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(int Tempmode)
-{
- int ret = Tempmode;
- switch (Tempmode) {
- case 0: //standard
- ret = 1;
- break;
- case 1: //warm
- ret = 2;
- break;
- case 2: //cold
- ret = 0;
- break;
- default:
- break;
- }
- return ret;
-}
-
-/**
-* The color temperature enum order is diffrent bettewn G9 and Fbc, so we have to make a mapping
-**/
-int CTv::Tv_FactoryWhiteBalanceColorTempMappingFbc2G9(int Tempmode)
-{
- int ret = Tempmode;
- switch (Tempmode) {
- case 0: //cold
- ret = 2;
- break;
- case 1: //standard
- ret = 0;
- break;
- case 2: //warm
- ret = 1;
- break;
- default:
- break;
- }
- return ret;
-}
-
-int CTv::Tv_FactoryWhiteBalanceGetAllParams(int Tempmode, tcon_rgb_ogo_t *params)
-{
- int ret = -1;
- Tempmode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(Tempmode);
- ret = Tv_FactoryGet_FBC_ColorTemp_Batch((vpp_color_temperature_mode_t)Tempmode, params);
- params->r_gain = Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(params->r_gain);
- params->g_gain = Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(params->g_gain);
- params->b_gain = Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(params->b_gain);
- params->r_post_offset = Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(params->r_post_offset);
- params->g_post_offset = Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(params->g_post_offset);
- params->b_post_offset = Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(params->b_post_offset);
- return ret;
-}
-
-int CTv::Tv_FactorySet_FBC_GrayPattern(int value)
-{
- int ret = -1;
- unsigned char grayValue = 0;
- if (value > 255) {
- grayValue = 255;
- } else if (value < 0) {
- grayValue = 0;
- } else {
- grayValue = (unsigned char)(0xFF & value);
- }
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- ret = fbcIns->cfbc_WhiteBalance_SetGrayPattern(COMM_DEV_SERIAL, grayValue);
- }
- return ret;
-}
-
-int CTv::Tv_FactoryOpen_FBC_GrayPattern()
-{
- int ret = -1;
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- ret = fbcIns->cfbc_WhiteBalance_GrayPattern_OnOff(COMM_DEV_SERIAL, 0);
- }
- return ret;
-}
-
-int CTv::Tv_FactoryClose_FBC_GrayPattern()
-{
- int ret = -1;
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- ret = fbcIns->cfbc_WhiteBalance_GrayPattern_OnOff(COMM_DEV_SERIAL, 1);
- }
- return ret;
-}
-
-int CTv::Tv_FactorySet_FBC_ColorTemp_Mode( int mode )
-{
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_ColorTemp_Mode(COMM_DEV_SERIAL, mode);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_ColorTemp_Mode ( void )
-{
- int temp_mode = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_ColorTemp_Mode(COMM_DEV_SERIAL, &temp_mode);
- return temp_mode;
- }
-
- return 0;
-}
-int CTv::Tv_FactorySet_FBC_ColorTemp_Mode_N360( int mode )
-{
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_ColorTemp_Mode(COMM_DEV_SERIAL, mode);
- SSMSaveFBCN360ColorTempVal(mode);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_ColorTemp_Mode_N360 ( void )
-{
- int temp_mode = 0;
-
- SSMReadFBCN360ColorTempVal(&temp_mode);
-
- return temp_mode;
-}
-
-int CTv::Tv_FactorySet_FBC_WB_Initial( int status )
-{
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_WB_Initial(COMM_DEV_SERIAL, status);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_WB_Initial ( void )
-{
- int temp_status = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_WB_Initial(COMM_DEV_SERIAL, &temp_status);
- return temp_status;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_ColorTemp_Batch(vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params)
-{
- unsigned char mode = 0, r_gain, g_gain, b_gain, r_offset, g_offset, b_offset;
- switch (Tempmode) {
- case VPP_COLOR_TEMPERATURE_MODE_STANDARD:
- mode = 1; //COLOR_TEMP_STD
- break;
- case VPP_COLOR_TEMPERATURE_MODE_WARM:
- mode = 2; //COLOR_TEMP_WARM
- break;
- case VPP_COLOR_TEMPERATURE_MODE_COLD:
- mode = 3; //COLOR_TEMP_COLD
- break;
- case VPP_COLOR_TEMPERATURE_MODE_USER:
- mode = 3; //COLOR_TEMP_USER
- break;
- }
- r_gain = (params.r_gain * 255) / 2047; // u1.10, range 0~2047, default is 1024 (1.0x)
- g_gain = (params.g_gain * 255) / 2047;
- b_gain = (params.b_gain * 255) / 2047;
- r_offset = (params.r_post_offset + 1024) * 255 / 2047; // s11.0, range -1024~+1023, default is 0
- g_offset = (params.g_post_offset + 1024) * 255 / 2047;
- b_offset = (params.b_post_offset + 1024) * 255 / 2047;
- LOGD ( "~Tv_FactorySet_FBC_ColorTemp_Batch##%d,%d,%d,%d,%d,%d,##", r_gain, g_gain, b_gain, r_offset, g_offset, b_offset );
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_WB_Batch(COMM_DEV_SERIAL, mode, r_gain, g_gain, b_gain, r_offset, g_offset, b_offset);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_ColorTemp_Batch ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params )
-{
- unsigned char mode = 0, r_gain, g_gain, b_gain, r_offset, g_offset, b_offset;
- switch (Tempmode) {
- case VPP_COLOR_TEMPERATURE_MODE_STANDARD:
- mode = 1; //COLOR_TEMP_STD
- break;
- case VPP_COLOR_TEMPERATURE_MODE_WARM:
- mode = 2; //COLOR_TEMP_WARM
- break;
- case VPP_COLOR_TEMPERATURE_MODE_COLD:
- mode = 3; //COLOR_TEMP_COLD
- break;
- case VPP_COLOR_TEMPERATURE_MODE_USER:
- mode = 3; //COLOR_TEMP_USER
- break;
- }
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_WB_Batch(COMM_DEV_SERIAL, mode, &r_gain, &g_gain, &b_gain, &r_offset, &g_offset, &b_offset);
- LOGD ( "~Tv_FactoryGet_FBC_ColorTemp_Batch##%d,%d,%d,%d,%d,%d,##", r_gain, g_gain, b_gain, r_offset, g_offset, b_offset );
-
- params->r_gain = (r_gain * 2047) / 255;
- params->g_gain = (g_gain * 2047) / 255;
- params->b_gain = (b_gain * 2047) / 255;
- params->r_post_offset = (r_offset * 2047) / 255 - 1024;
- params->g_post_offset = (g_offset * 2047) / 255 - 1024;
- params->b_post_offset = (b_offset * 2047) / 255 - 1024;
-
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactorySet_WB_G9_To_FBC( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params )
-{
- Tv_FactorySet_FBC_ColorTemp_Batch(Tempmode, params);
-
- return 0;
-}
-
-int CTv::Tv_FactoryGet_WB_G9_To_FBC ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params )
-{
- int temp_status = 0;
-
- Tv_FactoryGet_FBC_ColorTemp_Batch(Tempmode, params);
-
- return temp_status;
-}
-
-int CTv::Tv_FactoryGetItemFromBatch(vpp_color_temperature_mode_t colortemp_mode, int item)
-{
- tcon_rgb_ogo_t params;
- int ret = 0;
-
- Tv_FactoryGet_FBC_ColorTemp_Batch((vpp_color_temperature_mode_t)colortemp_mode, &params);
- switch (item) {
- case 0:
- ret = params.r_gain;
- ret = Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(ret);
- break;
- case 1:
- ret = params.g_gain;
- ret = Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(ret);
- break;
- case 2:
- ret = params.b_gain;
- ret = Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(ret);
- break;
- case 3:
- ret = params.r_post_offset;
- ret = Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(ret);
- break;
- case 4:
- ret = params.g_post_offset;
- ret = Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(ret);
- break;
- case 5:
- ret = params.b_post_offset;
- ret = Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(ret);
- break;
- default:
- ret = 0;
- }
- return ret;
-
-}
-
-
-int CTv::Tv_FactorySet_FBC_CM_OnOff( unsigned char status )
-{
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_CM(COMM_DEV_SERIAL, status);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_CM_OnOff (void)
-{
- int temp_status = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_CM(COMM_DEV_SERIAL, &temp_status);
- return temp_status;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_DNLP_OnOff( unsigned char status )
-{
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_DNLP(COMM_DEV_SERIAL, status);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_DNLP_OnOff (void)
-{
- int temp_status = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_DNLP(COMM_DEV_SERIAL, &temp_status);
- return temp_status;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_Gamma_OnOff( unsigned char status )
-{
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Gamma(COMM_DEV_SERIAL, status);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Gamma_OnOff (void)
-{
- int temp_status = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Gamma(COMM_DEV_SERIAL, &temp_status);
- return temp_status;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_WhiteBalance_OnOff( unsigned char status )
-{
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_WhiteBalance_OnOff(COMM_DEV_SERIAL, status);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_WhiteBalance_OnOff (void)
-{
- int temp_status = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_WhiteBalance_OnOff(COMM_DEV_SERIAL, &temp_status);
- return temp_status;
- }
-
- return 0;
-}
-
-
-int CTv::Tv_FactorySet_FBC_backlight_onoff ( int value )
-{
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_backlight_onoff(COMM_DEV_SERIAL, value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_backlight_onoff ( void )
-{
- int temp_value = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_backlight_onoff(COMM_DEV_SERIAL, &temp_value);
- return temp_value;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_LVDS_SSG_Set( int value )
-{
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_LVDS_SSG_Set(COMM_DEV_SERIAL, value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactorySet_FBC_LightSensor_Status_N310 ( int value )
-{
- int temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_LightSensor_N310(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_LightSensor_Status_N310 ( void )
-{
- int temp_value = 0;
- int data = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_LightSensor_N310(COMM_DEV_SERIAL, &temp_value);
-
- data = temp_value;
-
- return data;
- }
-
- return 0;
-}
-int CTv::Tv_FactorySet_FBC_Dream_Panel_Status_N310 ( int value )
-{
- int temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_Dream_Panel_N310(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_Dream_Panel_Status_N310 ( void )
-{
- int temp_value = 0;
- int data = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_Dream_Panel_N310(COMM_DEV_SERIAL, &temp_value);
-
- data = temp_value;
-
- return data;
- }
-
- return 0;
-}
-
-int CTv::Tv_FactorySet_FBC_MULT_PQ_Status_N310 ( int value )
-{
- int temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_MULT_PQ_N310(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_MULT_PQ_Status_N310 ( void )
-{
- int temp_value = 0;
- int data = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_MULT_PQ_N310(COMM_DEV_SERIAL, &temp_value);
-
- data = temp_value;
-
- return data;
- }
-
- return 0;
-}
-int CTv::Tv_FactorySet_FBC_MEMC_Status_N310 ( int value )
-{
- int temp_value = value;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Set_MEMC_N310(COMM_DEV_SERIAL, temp_value);
- return 0;
- }
-
- return -1;
-}
-
-int CTv::Tv_FactoryGet_FBC_MEMC_Status_N310 ( void )
-{
- int temp_value = 0;
- int data = 0;
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- fbcIns->cfbc_Get_MEMC_N310(COMM_DEV_SERIAL, &temp_value);
-
- data = temp_value;
-
- return data;
- }
-
- return 0;
-}
-
-
-
-//audio
-int CTv::SetAudioMuteForSystem(int muteOrUnmute)
-{
- return mTvAudio.SetAudioMuteForSystem(muteOrUnmute);
-}
-
-int CTv::GetAudioMuteForSystem()
-{
- return mTvAudio.GetAudioMuteForSystem();
-}
-
-int CTv::SetAudioAVOutMute(int muteStatus)
-{
- return mTvAudio.SetAudioAVOutMute(muteStatus);
-}
-
-int CTv::GetAudioAVOutMute()
-{
- return mTvAudio.GetAudioAVOutMute();
-}
-
-int CTv::SetAudioSPDIFMute(int muteStatus)
-{
- return mTvAudio.SetAudioSPDIFMute(muteStatus);
-}
-
-int CTv::GetAudioSPDIFMute()
-{
- return mTvAudio.GetAudioSPDIFMute();
-}
-int CTv::SetAudioMasterVolume(int tmp_vol)
-{
- return mTvAudio.SetAudioMasterVolume(tmp_vol);
-}
-
-int CTv::GetAudioMasterVolume()
-{
- return mTvAudio.GetAudioMasterVolume();
-}
-
-int CTv::SaveCurAudioMasterVolume(int tmp_vol)
-{
- return mTvAudio.SaveCurAudioMasterVolume(tmp_vol);
-}
-
-int CTv::GetCurAudioMasterVolume()
-{
- return mTvAudio.GetCurAudioMasterVolume();
-}
-
-int CTv::SetAudioBalance(int tmp_val)
-{
- return mTvAudio.SetAudioBalance(tmp_val);
-}
-
-int CTv::GetAudioBalance()
-{
- return mTvAudio.GetAudioBalance();
-}
-
-int CTv::SaveCurAudioBalance(int tmp_val)
-{
- return mTvAudio.SaveCurAudioBalance(tmp_val);
-}
-
-int CTv::GetCurAudioBalance()
-{
- return mTvAudio.GetCurAudioBalance();
-}
-
-
-int CTv::SetAudioSupperBassVolume(int tmp_vol)
-{
- return mTvAudio.SetAudioSupperBassVolume(tmp_vol);
-}
-
-int CTv::GetAudioSupperBassVolume()
-{
- return mTvAudio.GetAudioSupperBassVolume();
-}
-
-int CTv::SaveCurAudioSupperBassVolume(int tmp_vol)
-{
- return mTvAudio.SaveCurAudioSupperBassVolume(tmp_vol);
-}
-
-int CTv::GetCurAudioSupperBassVolume()
-{
- return mTvAudio.GetCurAudioSupperBassVolume();
-}
-int CTv::SetAudioSupperBassSwitch(int tmp_val)
-{
- return mTvAudio.SetAudioSupperBassSwitch(tmp_val);
-}
-
-int CTv::GetAudioSupperBassSwitch()
-{
- return mTvAudio.GetAudioSupperBassSwitch();
-}
-
-int CTv::SaveCurAudioSupperBassSwitch(int tmp_val)
-{
- return mTvAudio.SaveCurAudioSupperBassSwitch(tmp_val);
-}
-
-int CTv::GetCurAudioSupperBassSwitch()
-{
- return mTvAudio.GetCurAudioSupperBassSwitch();
-}
-
-int CTv::SetAudioSRSSurround(int tmp_val)
-{
- return mTvAudio.SetAudioSRSSurround(tmp_val);
-}
-
-int CTv::GetAudioSRSSurround()
-{
- return mTvAudio.GetAudioSRSSurround();
-}
-
-int CTv::SaveCurAudioSrsSurround(int tmp_val)
-{
- return mTvAudio.SaveCurAudioSrsSurround(tmp_val);
-}
-
-int CTv::GetCurAudioSRSSurround()
-{
- return mTvAudio.GetCurAudioSRSSurround();
-}
-
-int CTv::SetAudioSrsDialogClarity(int tmp_val)
-{
- return mTvAudio.SetAudioSrsDialogClarity(tmp_val);
-}
-
-int CTv::GetAudioSrsDialogClarity()
-{
- return mTvAudio.GetAudioSrsDialogClarity();
-}
-
-int CTv::SaveCurAudioSrsDialogClarity(int tmp_val)
-{
- return mTvAudio.SaveCurAudioSrsDialogClarity(tmp_val);
-}
-
-int CTv::GetCurAudioSrsDialogClarity()
-{
- return mTvAudio.GetCurAudioSrsDialogClarity();
-}
-
-int CTv::SetAudioSrsTruBass(int tmp_val)
-{
- return mTvAudio.SetAudioSrsTruBass(tmp_val);
-}
-
-int CTv::GetAudioSrsTruBass()
-{
- return mTvAudio.GetAudioSrsTruBass();
-}
-
-int CTv::SaveCurAudioSrsTruBass(int tmp_val)
-{
- return mTvAudio.SaveCurAudioSrsTruBass(tmp_val);
-}
-
-int CTv::GetCurAudioSrsTruBass()
-{
- return mTvAudio.GetCurAudioSrsTruBass();
-}
-
-int CTv::SetAudioBassVolume(int tmp_vol)
-{
- return mTvAudio.SetAudioBassVolume(tmp_vol);
-}
-
-int CTv::GetAudioBassVolume()
-{
- return mTvAudio.GetAudioBassVolume();
-}
-
-int CTv::SaveCurAudioBassVolume(int tmp_vol)
-{
- return mTvAudio.SaveCurAudioBassVolume(tmp_vol);
-}
-
-int CTv::GetCurAudioBassVolume()
-{
- return mTvAudio.GetCurAudioBassVolume();
-}
-
-int CTv::SetAudioTrebleVolume(int tmp_vol)
-{
- return mTvAudio.SetAudioTrebleVolume(tmp_vol);
-}
-
-int CTv::GetAudioTrebleVolume()
-{
- return mTvAudio.GetAudioTrebleVolume();
-}
-
-int CTv::SaveCurAudioTrebleVolume(int tmp_vol)
-{
- return mTvAudio.SaveCurAudioTrebleVolume(tmp_vol);
-}
-
-int CTv::GetCurAudioTrebleVolume()
-{
- return mTvAudio.GetCurAudioTrebleVolume();
-}
-
-int CTv::SetAudioSoundMode(int tmp_val)
-{
- return mTvAudio.SetAudioSoundMode(tmp_val);
-}
-
-int CTv::GetAudioSoundMode()
-{
- return mTvAudio.GetAudioSoundMode();
-}
-
-int CTv::SaveCurAudioSoundMode(int tmp_val)
-{
- return mTvAudio.SaveCurAudioSoundMode(tmp_val);
-}
-
-int CTv::GetCurAudioSoundMode()
-{
- return mTvAudio.GetCurAudioSoundMode();
-}
-
-int CTv::SetAudioWallEffect(int tmp_val)
-{
- return mTvAudio.SetAudioWallEffect(tmp_val);
-}
-
-int CTv::GetAudioWallEffect()
-{
- return mTvAudio.GetAudioWallEffect();
-}
-
-int CTv::SaveCurAudioWallEffect(int tmp_val)
-{
- return mTvAudio.SaveCurAudioWallEffect(tmp_val);
-}
-
-int CTv::GetCurAudioWallEffect()
-{
- return mTvAudio.GetCurAudioWallEffect();
-}
-
-
-int CTv::SetAudioEQMode(int tmp_val)
-{
- return mTvAudio.SetAudioEQMode(tmp_val);
-}
-
-int CTv::GetAudioEQMode()
-{
- return mTvAudio.GetAudioEQMode();
-}
-
-int CTv::SaveCurAudioEQMode(int tmp_val)
-{
- return mTvAudio.SaveCurAudioEQMode(tmp_val);
-}
-
-int CTv::GetCurAudioEQMode()
-{
- return mTvAudio.GetCurAudioEQMode();
-}
-
-int CTv::GetAudioEQRange(int range_buf[])
-{
- return mTvAudio.GetAudioEQRange(range_buf);
-}
-
-int CTv::SetAudioEQGain(int gain_buf[])
-{
- return mTvAudio.SetAudioEQGain(gain_buf);
-}
-
-int CTv::GetAudioEQGain(int gain_buf[])
-{
- return mTvAudio.GetAudioEQGain(gain_buf);
-}
-
-int CTv::SaveCurAudioEQGain(int gain_buf[])
-{
- return mTvAudio.SaveCurAudioEQGain(gain_buf);
-}
-
-int CTv::GetCurAudioEQGain(int gain_buf[])
-{
- return mTvAudio.GetCurAudioEQGain(gain_buf);
-}
-
-int CTv::GetAudioEQBandCount()
-{
- return mTvAudio.GetAudioEQBandCount();
-}
-
-
-
-int CTv::SetAudioEQSwitch(int switch_val)
-{
- return mTvAudio.SetAudioEQSwitch(switch_val);
-}
-
-int CTv::SetAudioSPDIFSwitch(int tmp_val)
-{
- return mTvAudio.SetAudioSPDIFSwitch(tmp_val);
-}
-
-/*showboz public int GetAudioSPDIFSwitch() {
- mTvAudio.GetAudioSPDIFSwitch();
-}*/
-
-int CTv::amAudioSetDoubleOutputSwitch(int en_val)
-{
- return mTvAudio.amAudioSetDoubleOutputSwitch(en_val);
-}
-int CTv::UsbAudioOuputModuleSwitch(int sw)
-{
- return mTvAudio.UsbAudioOuputModuleSwitch(sw);
-}
-
-int CTv::GetAmAudioSetDoubleOutputSwitch()
-{
- return mTvAudio.GetAmAudioSetDoubleOutputSwitch();
-}
-
-int CTv::GetCurUsbAudioOuputModuleSwitch()
-{
- return mTvAudio.GetCurUsbAudioOuputModuleSwitch();
-}
-
-int CTv::SaveCurAudioSPDIFSwitch(int tmp_val)
-{
- return mTvAudio.SaveCurAudioSPDIFSwitch(tmp_val);
-}
-
-int CTv::GetCurAudioSPDIFSwitch()
-{
- return mTvAudio.GetCurAudioSPDIFSwitch();
-}
-int CTv::SetAudioSPDIFMode(int tmp_val)
-{
- return mTvAudio.SetAudioSPDIFMode(tmp_val);
-}
-
-/* public int GetAudioSPDIFMode() {
-mTvAudio.GetAudioSPDIFMode();
-showboz */
-
-
-int CTv::SaveCurAudioSPDIFMode(int tmp_val)
-{
- return mTvAudio.SaveCurAudioSPDIFMode(tmp_val);
-}
-
-int CTv::GetCurAudioSPDIFMode()
-{
- return mTvAudio.GetCurAudioSPDIFMode();
-}
-
-int CTv::OpenAmAudio(unsigned int sr, int output_device)
-{
- return mTvAudio.OpenAmAudio(sr, output_device);
-}
-
-int CTv::CloseAmAudio(void)
-{
- return mTvAudio.CloseAmAudio();
-}
-
-int CTv::SetAmAudioInputSr(unsigned int sr, int output_device)
-{
- return mTvAudio.SetAmAudioInputSr(sr, output_device);
-}
-
-int CTv::SetAmAudioOutputMode(int mode)
-{
- return mTvAudio.SetAmAudioOutputMode(mode);
-}
-
-int CTv::SetAmAudioMusicGain(int gain)
-{
- return mTvAudio.SetAmAudioMusicGain(gain);
-}
-
-int CTv::SetAmAudioLeftGain(int gain)
-{
- return mTvAudio.SetAmAudioLeftGain(gain);
-}
-
-
-int CTv::SetAmAudioRightGain(int gain)
-{
- return mTvAudio.SetAmAudioRightGain(gain);
-}
-
-int CTv::AudioLineInSelectChannel(int audio_channel)
-{
- return mTvAudio.AudioLineInSelectChannel(audio_channel);
-}
-
-int CTv::SetKalaokIO(int level)
-{
- return mTvAudio.SetKalaokIO(level);
-}
-int CTv::AudioSetAudioInSource(int audio_src_in_type)
-{
- return mTvAudio.AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_LINEIN);
-}
-
-int CTv::AudioSetLineInCaptureVolume(int l_vol, int r_vol)
-{
- return mTvAudio.AudioSetLineInCaptureVolume(l_vol, r_vol);
-}
-
-int CTv::AudioHandleHeadsetPlugIn()
-{
- return mTvAudio.AudioHandleHeadsetPlugIn();
-}
-
-int CTv::AudioHandleHeadsetPullOut()
-{
- return mTvAudio.AudioHandleHeadsetPullOut();
-}
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTv.cpp
+// @ Date : 2013-11
+// @ Author :
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <am_epg.h>
+#include <am_mem.h>
+#include "CTvDatabase.h"
+#include <stdlib.h>
+#include <string.h>
+#include <malloc.h>
+#include <pthread.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <dlfcn.h>
+#include <cutils/properties.h>
+#include <cutils/log.h>
+#include <cutils/android_reboot.h>
+#include <utils/threads.h>
+#include <time.h>
+#include <sys/prctl.h>
+#include <getopt.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#ifdef ANDROID
+#include <termios.h>
+#endif
+#include <string.h>
+#include <signal.h>
+
+#include "../version/version.h"
+#include "../tvsetting/CTvSetting.h"
+#include "../tvutils/tvutils.h"
+#include "../tvconfig/tvconfig.h"
+#include "../tvutils/CFile.h"
+#include <hardware_legacy/power.h>
+#include "../tvutils/serial_operate.h"
+
+extern "C" {
+#include "am_ver.h"
+#include "am_misc.h"
+#include "am_debug.h"
+#include "am_fend.h"
+}
+
+#include <math.h>
+#include <sys/ioctl.h>
+
+#include "CTv.h"
+
+#define LOG_TAG "CTv"
+
+using namespace android;
+
+// Called each time a message is logged.
+static void sqliteLogCallback(void *data, int iErrCode, const char *zMsg)
+{
+ LOGD( "showbo sqlite (%d) %s\n", iErrCode, zMsg);
+}
+
+
+
+CTv::CTv() : mSigDetectThread ( &mTvin ), mSourceConnectDetectThread(&mTvin), mHDMIRxCEC ( &mTvin ), mTvScanner ( &mTvin ), mTvMsgQueue(this), mAutoBackLight( &mVpp, &mTvin )
+{
+ //mpClient = pClient;
+ //copy file to param
+ if ( Tv_Utils_IsFileExist ( TV_CONFIG_FILE_SYSTEM_PATH ) == 0 ) {
+ if ( Tv_Utils_IsFileExist ( TV_CONFIG_FILE_PARAM_PATH ) != 0 ) {
+ CFile file ( TV_CONFIG_FILE_SYSTEM_PATH );
+
+ if ( file.copyTo ( TV_CONFIG_FILE_PARAM_PATH ) != 0 ) {
+ LOGE ( "%s, copy file = %s , error", __FUNCTION__, TV_CONFIG_FILE_PARAM_PATH );
+ }
+ }
+ }
+
+ if ( Tv_Utils_IsFileExist ( TV_CHANNEL_LIST_SYSTEM_PATH ) == 0 ) {
+ if ( Tv_Utils_IsFileExist ( TV_CHANNEL_LIST_PARAM_PATH ) != 0 ) {
+ CFile file ( TV_CHANNEL_LIST_SYSTEM_PATH );
+
+ if ( file.copyTo ( TV_CHANNEL_LIST_PARAM_PATH ) != 0 ) {
+ LOGE ( "%s, copy file = %s , error", __FUNCTION__, TV_CHANNEL_LIST_PARAM_PATH );
+ }
+ }
+ }
+
+ //ssm
+ if ( Tv_Utils_IsFileExist ( TV_SSM_DATA_SYSTEM_PATH ) == 0 ) {
+ if ( Tv_Utils_IsFileExist ( TV_SSM_DATA_PARAM_PATH ) != 0 ) {
+ CFile file ( TV_SSM_DATA_SYSTEM_PATH );
+
+ if ( file.copyTo ( TV_SSM_DATA_PARAM_PATH ) != 0 ) {
+ LOGE ( "%s, copy file = %s , error", __FUNCTION__, TV_SSM_DATA_PARAM_PATH );
+ }
+ }
+ }
+
+ AM_EVT_Init();
+ mTvEpg.setObserver ( &mTvMsgQueue );
+ mpObserver = NULL;
+ audio_sr = 0;
+ mIsFbc = false;
+ dtv_auto_3d_flag = 0;
+ m_autoset_displayfreq = false;
+ m_cur_set_info_fmt = TVIN_SIG_FMT_CVBS_PAL_I;
+
+ tv_config_load ( TV_CONFIG_FILE_PATH );
+ sqlite3_config (SQLITE_CONFIG_SERIALIZED);
+ //sqlite3_config(SQLITE_CONFIG_LOG, &sqliteLogCallback, (void*)1);
+ sqlite3_soft_heap_limit(8 * 1024 * 1024);
+ // Initialize SQLite.
+ sqlite3_initialize();
+ CTvDatabase::GetTvDb()->InitTvDb ( TV_DB_PATH );
+
+ if ( CTvDimension::isDimensionTblExist() == false ) {
+ CTvDimension::builtinAtscDimensions();
+ }
+
+ CTvSettingLoad();
+
+ mDtvScanRunningStatus = DTV_SCAN_RUNNING_NORMAL;
+
+ m_sig_stable_nums = 0;
+ m_is_set_hdmi_edid = false;
+ m_cur_playing_prog_id = -1;
+
+ mSigDetectThread.setObserver ( this );
+ mSourceConnectDetectThread.setObserver ( this );
+ mHDMIRxCEC.setObserver(this);
+ mFrontDev.setObserver ( &mTvMsgQueue );
+ mpUpgradeFBC = NULL;
+ if (GetPlatformHaveFBCFlag() == 1) {
+ mIsFbc = true;
+
+ mpUpgradeFBC = new CUpgradeFBC();
+ mpUpgradeFBC->setObserver(this);
+ }
+ mSerialA.setObserver(this);
+ mSerialB.setObserver(this);
+ mSerialC.setObserver(this);
+ mAv.setObserver(&mTvMsgQueue);
+ mTvScanner.setGlobalScanerObject(&mTvScanner);
+ mTvAction = mTvAction & TV_ACTION_NULL;
+ mTvStatus = TV_INIT_ED;
+ print_version_info();
+};
+
+CTv::~CTv()
+{
+ int iRet;
+ mpObserver = NULL;
+ CTvSettingunLoad();
+ CTvDatabase::deleteTvDb();
+ tv_config_unload();
+ mAv.Close();
+ mTvStatus = TV_INIT_ED;
+ mFrontDev.Close();
+
+ if (mpUpgradeFBC != NULL) {
+ delete mpUpgradeFBC;
+ mpUpgradeFBC = NULL;
+ }
+}
+
+void CTv::onEvent ( const CTvScanner::ScannerEvent &ev )
+{
+ LOGD ( "%s, CTv::onEvent lockStatus = %d type = %d\n", __FUNCTION__, ev.mLockedStatus, ev.mType );
+
+ if ( mDtvScanRunningStatus == DTV_SCAN_RUNNING_ANALYZE_CHANNEL ) {
+ if ( ev.mType == CTvScanner::ScannerEvent::EVENT_SCAN_END ) {
+ CMessage msg;
+ msg.mType = CTvMsgQueue::TV_MSG_STOP_ANALYZE_TS;
+ msg.mpData = this;
+ mTvMsgQueue.sendMsg ( msg );
+ } else if ( ev.mType == CTvScanner::ScannerEvent::EVENT_STORE_END ) {
+ CTvEpg::EpgEvent epgev;
+ epgev.type = CTvEpg::EpgEvent::EVENT_CHANNEL_UPDATE_END;
+ mDtvScanRunningStatus = DTV_SCAN_RUNNING_NORMAL;
+ sendTvEvent ( epgev );
+ }
+ } else {
+ sendTvEvent ( ev );
+ }
+}
+
+void CTv::onEvent ( const CFrontEnd::FEEvent &ev )
+{
+ LOGD ( "%s, FE event type = %d tvaction=%x", __FUNCTION__, ev.mCurSigStaus, mTvAction);
+ if(mTvAction & TV_ACTION_SCANNING) return;
+
+ //å‰ç«¯äº‹ä»¶å“应处ç†
+ if ( ev.mCurSigStaus == CFrontEnd::FEEvent::EVENT_FE_HAS_SIG ) { //作为信å·ç¨³å®š
+ if(/*m_source_input == SOURCE_TV || */m_source_input == SOURCE_DTV && (mTvAction & TV_ACTION_PLAYING)) { //atv and other tvin source not to use it, and if not playing, not use have sig
+ Vpp_SetDisplayMode ( mVpp.Tv_GetDisplayMode ( CTvin::Tvin_SourceInputToSourceInputType(m_source_input) ), CTvin::Tvin_SourceInputToSourceInputType(m_source_input), mSigDetectThread.getCurSigInfo().fmt);
+ if ( m_win_mode == PREVIEW_WONDOW ) {
+ mAv.setVideoAxis(m_win_pos.x1, m_win_pos.y1, m_win_pos.x2, m_win_pos.y2);
+ mAv.setVideoScreenMode ( CAv::VIDEO_WIDEOPTION_FULL_STRETCH );
+ }
+
+ if ( m_autoset_displayfreq) {
+ mTvin.VDIN_SetDisplayVFreq ( 50, mAv.getVideoDisplayResolution() , mIsFbc);
+ }
+ TvEvent::SignalInfoEvent ev;
+ ev.mStatus = TVIN_SIG_STATUS_STABLE;
+ ev.mTrans_fmt = TVIN_TFMT_2D;
+ ev.mFmt = TVIN_SIG_FMT_NULL;
+ ev.mReserved = 0;
+ sendTvEvent ( ev );
+ mAv.EnableVideoAuto();
+ mTvAudio.SetAudioMuteForTv ( CC_AUDIO_UNMUTE );
+ }
+ } else if ( ev.mCurSigStaus == CFrontEnd::FEEvent::EVENT_FE_NO_SIG ) { //作为信å·æ¶ˆå¤±
+ if(/*m_source_input == SOURCE_TV || */m_source_input == SOURCE_DTV && (mTvAction & TV_ACTION_PLAYING)) { //just playing
+ mAv.DisableVideoWithBlueColor();
+ //
+ TvEvent::SignalInfoEvent ev;
+ ev.mStatus = TVIN_SIG_STATUS_NOSIG;
+ ev.mTrans_fmt = TVIN_TFMT_2D;
+ ev.mFmt = TVIN_SIG_FMT_NULL;
+ ev.mReserved = 0;
+ sendTvEvent ( ev );
+ }
+ }
+
+}
+
+void CTv::onEvent ( const CTvEpg::EpgEvent &ev )
+{
+ switch ( ev.type ) {
+ case CTvEpg::EpgEvent::EVENT_TDT_END:
+ LOGD ( "%s, CTv::onEvent epg time = %ld", __FUNCTION__, ev.time );
+ mTvTime.setTime ( ev.time );
+ break;
+
+ case CTvEpg::EpgEvent::EVENT_CHANNEL_UPDATE: {
+ LOGD ( "%s, CTv:: onEvent channel update", __FUNCTION__ );
+ CMessage msg;
+ msg.mType = CTvMsgQueue::TV_MSG_START_ANALYZE_TS;
+ msg.mpData = this;
+ mCurAnalyzeTsChannelID = ev.channelID;
+ mTvMsgQueue.sendMsg ( msg );
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ sendTvEvent ( ev );
+}
+
+
+void CTv::onEvent(const CAv::AVEvent &ev)
+{
+ LOGD("AVEvent = %d", ev.type);
+ switch ( ev.type ) {
+ case CAv::AVEvent::EVENT_AV_STOP: {
+ break;
+ }
+ case CAv::AVEvent::EVENT_AV_RESUEM: {
+ mAv.EnableVideoAuto();
+ TvEvent::AVPlaybackEvent AvPlayBackEvt;
+ AvPlayBackEvt.mMsgType = TvEvent::AVPlaybackEvent::EVENT_AV_PLAYBACK_RESUME;
+ AvPlayBackEvt.mProgramId = ( int ) ev.param;
+ sendTvEvent(AvPlayBackEvt );
+ break;
+ }
+ case CAv::AVEvent::EVENT_AV_SCAMBLED: {
+ mAv.DisableVideoWithBlueColor();
+ TvEvent::AVPlaybackEvent AvPlayBackEvt;
+ AvPlayBackEvt.mMsgType = TvEvent::AVPlaybackEvent::EVENT_AV_SCAMBLED;
+ AvPlayBackEvt.mProgramId = ( int ) ev.param;
+ sendTvEvent(AvPlayBackEvt );
+ break;
+ }
+ case CAv::AVEvent::EVENT_AV_UNSUPPORT: {
+ LOGD("To AVS or AVS+ format");//just avs format, not unsupport, and avs avs+
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+CTv::CTvMsgQueue::CTvMsgQueue(CTv *tv)
+{
+ mpTv = tv;
+}
+
+CTv::CTvMsgQueue::~CTvMsgQueue()
+{
+}
+
+void CTv::CTvMsgQueue::handleMessage ( CMessage &msg )
+{
+ LOGD ( "%s, CTv::CTvMsgQueue::handleMessage type = %d", __FUNCTION__, msg.mType );
+
+ switch ( msg.mType ) {
+ case TV_MSG_COMMON:
+ break;
+
+ case TV_MSG_STOP_ANALYZE_TS: {
+ //mpTv->Tv_Stop_Analyze_Ts();
+ break;
+ }
+
+ case TV_MSG_START_ANALYZE_TS: {
+ //mpTv->Tv_Start_Analyze_Ts ( pTv->mCurAnalyzeTsChannelID );
+ break;
+ }
+
+ case TV_MSG_CHECK_FE_DELAY: {
+ mpTv->mFrontDev.checkStatusOnce();
+ break;
+ }
+ case TV_MSG_AV_EVENT: {
+ mpTv->onEvent(*((CAv::AVEvent *)(msg.mpPara)));
+ break;
+ }
+ case TV_MSG_FE_EVENT: {
+ mpTv->onEvent(*((CFrontEnd::FEEvent *)(msg.mpPara)));
+ break;
+ }
+ case TV_MSG_SCAN_EVENT: {
+ mpTv->onEvent(*((CTvScanner::ScannerEvent *)(msg.mpPara)));
+ break;
+ }
+ case TV_MSG_EPG_EVENT: {
+ mpTv->onEvent(*((CTvEpg::EpgEvent *)(msg.mpPara)));
+ break;
+ }
+
+ default:
+ break;
+ }
+}
+
+
+void CTv::CTvMsgQueue::onEvent ( const CTvScanner::ScannerEvent &ev )
+{
+ CMessage msg;
+ msg.mDelayMs = 0;
+ msg.mType = CTvMsgQueue::TV_MSG_SCAN_EVENT;
+ memcpy(msg.mpPara, &ev, sizeof(ev));
+ this->sendMsg ( msg );
+}
+
+void CTv::CTvMsgQueue::onEvent ( const CFrontEnd::FEEvent &ev )
+{
+ CMessage msg;
+ msg.mDelayMs = 0;
+ msg.mType = CTvMsgQueue::TV_MSG_FE_EVENT;
+ memcpy(msg.mpPara, &ev, sizeof(ev));
+ this->sendMsg ( msg );
+}
+
+void CTv::CTvMsgQueue::onEvent ( const CTvEpg::EpgEvent &ev )
+{
+ CMessage msg;
+ msg.mDelayMs = 0;
+ msg.mType = CTvMsgQueue::TV_MSG_EPG_EVENT;
+ memcpy(msg.mpPara, &ev, sizeof(ev));
+ this->sendMsg ( msg );
+}
+
+
+void CTv::CTvMsgQueue::onEvent(const CAv::AVEvent &ev)
+{
+ CMessage msg;
+ msg.mDelayMs = 0;
+ msg.mType = CTvMsgQueue::TV_MSG_AV_EVENT;
+ memcpy(msg.mpPara, &ev, sizeof(ev));
+ this->sendMsg ( msg );
+}
+
+int CTv::setTvObserver ( TvIObserver *ob )
+{
+ mpObserver = ob;
+ return 0;
+}
+
+void CTv::sendTvEvent ( const CTvEv &ev )
+{
+ //AutoMutex lock(mLock);
+ /* send sigstate to AutoBackLight */
+ if (ev.getEvType() == CTvEv::TV_EVENT_SIGLE_DETECT) {
+ TvEvent::SignalInfoEvent *pEv = (TvEvent::SignalInfoEvent *)(&ev);
+ if (pEv->mStatus == TVIN_SIG_STATUS_STABLE) {
+ mAutoBackLight.updateSigState(mAutoBackLight.SIG_STATE_STABLE);
+ } else {
+ mAutoBackLight.updateSigState(mAutoBackLight.SIG_STATE_NOSIG);
+ }
+ }
+
+ LOGD ( "%s, tvaction=%x", __FUNCTION__, mTvAction);
+ if((mTvAction & TV_ACTION_SCANNING) && (ev.getEvType() == CTvEv::TV_EVENT_SIGLE_DETECT)) {
+ LOGD("%s, when scanning, not send sig detect event", __FUNCTION__);
+ return;
+ }
+ if ( mpObserver != NULL ) {
+ mpObserver->onTvEvent ( ev );
+ }
+
+ return;
+}
+
+int CTv::ClearAnalogFrontEnd()
+{
+ return mFrontDev.ClearAnalogFrontEnd ();
+}
+
+int CTv::dtvAutoScan()
+{
+ AutoMutex lock ( mLock );
+ mTvAction = mTvAction | TV_ACTION_SCANNING;
+ mTvEpg.leaveChannel();
+ mAv.StopTS ();
+ mAv.DisableVideoWithBlueColor();
+ CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_DTV );
+ CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_RADIO );
+ CTvEvent::CleanAllEvent();
+ mTvScanner.setObserver ( &mTvMsgQueue );
+ mDtvScanRunningStatus = DTV_SCAN_RUNNING_NORMAL;
+ mFrontDev.Open(FE_DTMB);
+ mTvScanner.autoDtmbScan();//dtmb
+ return 0;
+}
+
+int CTv::dtvCleanProgramByFreq ( int freq )
+{
+ int iOutRet = 0;
+ CTvChannel channel;
+ iOutRet = CTvChannel::SelectByFreq ( freq, channel );
+ if ( -1 == iOutRet ) {
+ LOGD ( "%s, Warnning: Current Freq not have program info in the ts_table\n", __FUNCTION__ );
+ }
+
+ iOutRet == CTvProgram::deleteChannelsProgram ( channel );
+ return iOutRet;
+}
+
+int CTv::dtvManualScan (int beginFreq, int endFreq, int modulation)
+{
+ AutoMutex lock ( mLock );
+ mTvAction = mTvAction | TV_ACTION_SCANNING;
+ mTvEpg.leaveChannel();
+ mAv.StopTS ();
+ mAv.DisableVideoWithBlueColor();
+ CTvChannel::DeleteBetweenFreq(beginFreq, endFreq);
+ mTvScanner.setObserver ( &mTvMsgQueue );
+ mDtvScanRunningStatus = DTV_SCAN_RUNNING_NORMAL;
+ mFrontDev.Open(FE_DTMB);
+ int iOutRet = mTvScanner.manualDtmbScan (beginFreq, endFreq, modulation); //dtmb
+ return iOutRet;
+}
+
+int CTv::dtvAutoScanAtscLock(int attenna, int videoStd, int audioStd)
+{
+ //showboz
+ /* int minScanFreq, maxScanFreq, vStd, aStd;
+ vStd = CC_ATV_VIDEO_STD_PAL;
+ aStd = CC_ATV_AUDIO_STD_DK;
+ v4l2_std_id stdAndColor = mFrontDev.enumToStdAndColor(vStd, aStd);
+
+ AutoMutex lock ( mLock );
+ mTvAction = mTvAction | TV_ACTION_SCANNING;
+ mTvEpg.leaveChannel();
+ mAv.StopTS ();
+ mAv.DisableVideoWithBlueColor();
+ CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_DTV );
+ CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_RADIO );
+ CTvEvent::CleanAllEvent();
+ mTvScanner.setObserver ( &mTvMsgQueue );
+ mDtvScanRunningStatus = DTV_SCAN_RUNNING_NORMAL;
+ mFrontDev.Open(FE_ATSC);
+ mTvScanner.autoAtscScan(CTvScanner::AM_ATSC_ATTENNA_TYPE_AIR, stdAndColor);//dtmb*/
+ return 0;
+}
+
+//searchType 0:not 256 1:is 256 Program
+int CTv::atvAutoScan(int videoStd, int audioStd, int searchType)
+{
+ int minScanFreq, maxScanFreq, vStd, aStd;
+ AutoMutex lock ( mLock );
+ mAv.DisableVideoWithBlueColor();
+ mTvAction = mTvAction | TV_ACTION_SCANNING;
+ mTvScanner.setObserver ( &mTvMsgQueue );
+ mTvAudio.SetAudioMuteForTv ( CC_AUDIO_MUTE );
+ getATVMinMaxFreq (&minScanFreq, &maxScanFreq );
+ if ( minScanFreq == 0 || maxScanFreq == 0 || minScanFreq > maxScanFreq ) {
+ LOGE ( "%s, auto scan freq set is error min=%d, max=%d", __FUNCTION__, minScanFreq, maxScanFreq );
+ return -1;
+ }
+ //if set std null AUTO, use default PAL/DK
+ //if(videoStd == CC_ATV_VIDEO_STD_AUTO) {
+ // vStd = CC_ATV_VIDEO_STD_PAL;
+ // aStd = CC_ATV_AUDIO_STD_DK;
+ //} else {
+ vStd = videoStd;
+ aStd = audioStd;
+ //}
+ tvin_port_t source_port = mTvin.Tvin_GetSourcePortBySourceInput(SOURCE_TV);
+ mTvin.VDIN_OpenPort ( source_port );
+ LOGD("%s, atv auto scan vstd=%d, astd=%d ", __FUNCTION__, vStd, aStd);
+ v4l2_std_id stdAndColor = mFrontDev.enumToStdAndColor(vStd, aStd);
+
+ int fmt = CFrontEnd::stdEnumToCvbsFmt (vStd, aStd);
+ mTvin.AFE_SetCVBSStd ( ( tvin_sig_fmt_t ) fmt );
+ m_cur_set_info_fmt = ( tvin_sig_fmt_t )fmt;
+
+ if (searchType == 0) {
+ CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_ATV );
+ } else if (searchType == 1) { //type for skyworth, and insert 256 prog, and just update ts table
+ }
+ minScanFreq = mFrontDev.formatATVFreq ( minScanFreq );
+ maxScanFreq = mFrontDev.formatATVFreq ( maxScanFreq );
+ LOGD("%s, atv auto scan vstd=%d, astd=%d stdandcolor=%lld", __FUNCTION__, vStd, aStd, stdAndColor);
+ mSigDetectThread.setVdinNoSigCheckKeepTimes(1000, false);
+ mFrontDev.Open(FE_ANALOG);
+ mTvScanner.autoAtvScan ( minScanFreq, maxScanFreq, stdAndColor, searchType );
+ return 0;
+}
+
+int CTv::clearAllProgram(int arg0)
+{
+ CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_ATV );
+ CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_TV );
+ CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_DTV );
+ CTvProgram::CleanAllProgramBySrvType ( CTvProgram::TYPE_RADIO);
+ return 0;
+}
+
+int CTv::atvMunualScan ( int startFreq, int endFreq, int videoStd, int audioStd, int store_Type , int channel_num )
+{
+ int minScanFreq, maxScanFreq, vStd, aStd;
+
+ minScanFreq = mFrontDev.formatATVFreq ( startFreq );
+ maxScanFreq = mFrontDev.formatATVFreq ( endFreq );
+ if ( minScanFreq == 0 || maxScanFreq == 0 ) {
+ LOGE ( "%s, munual scan freq set is error min=%d, max=%d", __FUNCTION__, minScanFreq, maxScanFreq );
+ return -1;
+ }
+
+ //if set std null AUTO, use default PAL/DK
+ //if(videoStd == CC_ATV_VIDEO_STD_AUTO) {
+ // vStd = CC_ATV_VIDEO_STD_PAL;
+ // aStd = CC_ATV_AUDIO_STD_DK;
+ // } else {
+ vStd = videoStd;
+ aStd = audioStd;
+ // }
+
+ AutoMutex lock ( mLock );
+ mAv.DisableVideoWithBlueColor();
+ mTvAction = mTvAction | TV_ACTION_SCANNING;
+ mTvScanner.setObserver ( &mTvMsgQueue );
+
+ mTvAudio.SetAudioMuteForTv ( CC_AUDIO_MUTE );
+ v4l2_std_id stdAndColor = mFrontDev.enumToStdAndColor(vStd, aStd);
+
+
+ tvin_port_t source_port = mTvin.Tvin_GetSourcePortBySourceInput(SOURCE_TV);
+ mTvin.VDIN_OpenPort ( source_port );
+
+ int fmt = CFrontEnd::stdEnumToCvbsFmt (vStd, aStd);
+ mTvin.AFE_SetCVBSStd ( ( tvin_sig_fmt_t ) fmt );
+ m_cur_set_info_fmt = ( tvin_sig_fmt_t )fmt;
+ LOGD("%s, atv manual scan vstd=%d, astd=%d stdandcolor=%lld", __FUNCTION__, videoStd, audioStd, stdAndColor);
+ mFrontDev.Open(FE_ANALOG);
+ return mTvScanner.ATVManualScan ( minScanFreq, maxScanFreq, stdAndColor, store_Type, channel_num);
+}
+
+int CTv::getVideoFormatInfo ( int *pWidth, int *pHeight, int *pFPS, int *pInterlace )
+{
+ int iOutRet = -1;
+ AM_AV_VideoStatus_t video_status;
+
+ do {
+ if ( NULL == pWidth || NULL == pHeight || NULL == pFPS || NULL == pInterlace ) {
+ break;
+ }
+
+ iOutRet = mAv.GetVideoStatus (&video_status );
+
+ if ( AM_SUCCESS != iOutRet ) {
+ LOGD ( "%s, ERROR: Cann't Get video format info\n", __FUNCTION__);
+ break;
+ }
+
+ *pWidth = video_status.src_w;
+ *pHeight = video_status.src_h;
+ *pFPS = video_status.fps;
+ *pInterlace = video_status.interlaced;
+ //LOGD("%s, w : %d h : %d fps : %d interlaced: %d\n", __FUNCTION__, video_status.src_w,video_status.src_h,video_status.fps,video_status.interlaced);
+ } while ( false );
+
+ return iOutRet;
+
+}
+
+int CTv::stopScanLock()
+{
+ AutoMutex lock ( mLock );
+ return stopScan();
+}
+
+int CTv::stopScan()
+{
+ if(!(mTvAction & TV_ACTION_SCANNING)) {
+ LOGD("%s, tv not scanning ,return\n", __FUNCTION__);
+ return 0;
+ }
+ mSigDetectThread.requestAndWaitPauseDetect();
+ mTvEpg.leaveChannel();
+ mTvScanner.stopScan();
+ mFrontDev.Close();
+ mTvAction = mTvAction & ~TV_ACTION_SCANNING;
+ return 0;
+}
+
+int CTv::playProgramLock ( int progId )
+{
+ /* AutoMutex lock ( mLock );
+ CTvProgram prog;
+ int ret = CTvProgram::selectByID ( progId, prog );
+
+ if ( ret != 0 ) {
+ return -1;
+ }
+ int type = prog.getProgType();
+ LOGD ( "%s, blackout = %dprog type = %d id = %d name = %s\n", __FUNCTION__, m_blackout_enable, type, progId, prog.getName().string() );
+ if(m_blackout_enable == 1){
+ mAv.EnableVideoBlackout();
+ }else if(m_blackout_enable == 0){
+ mAv.DisableVideoBlackout();
+ }
+
+ mTvAction = mTvAction | TV_ACTION_PLAYING;
+ m_cur_playing_prog_id = progId;
+ mFrontDev.Open(FE_ANALOG);
+ if ( m_source_input == SOURCE_TV && type == CTvProgram::TYPE_ATV ) {
+ playAtvProgram ( progId );
+ } else if ( m_source_input == SOURCE_DTV && ( type == CTvProgram::TYPE_DTV || type == CTvProgram::TYPE_RADIO ) ) {
+ playDtmbProgram ( progId );
+ } else {
+ LOGD ( "%s, source(%d) != type(%d),not play\n", __FUNCTION__, m_source_input, type );
+ }
+ //just for ui,left/right/stereo
+ setAudioChannel((int)AM_AOUT_OUTPUT_STEREO);*/
+ return 0;
+}
+
+int CTv::playDvbcProgram ( int progId )
+{
+ LOGD ( "%s, progId = %d\n", __FUNCTION__, progId );
+
+ CTvProgram prog;
+ int ret = CTvProgram::selectByID ( progId, prog );
+
+ if ( ret != 0 ) {
+ return -1;
+ }
+
+ LOGD ( "%s, prog name = %s\n", __FUNCTION__, prog.getName().string() );
+ CTvChannel channel;
+ prog.getChannel ( channel );
+
+ mFrontDev.setPara ( channel.getMode(), channel.getFrequency(), channel.getSymbolRate(), channel.getModulation() );
+
+ int vpid = 0x1fff, apid = 0x1fff, vfmt = -1, afmt = -1;
+
+ CTvProgram::Video *pV = prog.getVideo();
+ CTvProgram::Audio *pA;
+
+ if ( pV != NULL ) {
+ vpid = pV->getPID();
+ vfmt = pV->getFormat();
+ }
+
+ int aindex = prog.getCurrentAudio ( String8 ( "eng" ) );
+
+ if ( aindex >= 0 ) {
+ pA = prog.getAudio ( aindex );
+
+ if ( pA != NULL ) {
+ apid = pA->getPID();
+ afmt = pA->getFormat();
+ }
+ }
+ mTvEpg.leaveProgram();
+ mTvEpg.leaveChannel();
+ startPlayTv ( SOURCE_DTV, vpid, apid, vfmt, afmt );
+
+ mTvEpg.enterChannel ( channel.getID() );
+ mTvEpg.enterProgram ( prog.getID() );
+ return 0;
+}
+
+int CTv::getAudioTrackNum ( int progId )
+{
+ int iRet, iOutCnt = 0;
+ CTvProgram prog;
+
+ do {
+ if ( 0 > progId ) {
+ break;
+ }
+
+ iRet = CTvProgram::selectByID ( progId, prog );
+
+ if ( 0 != iRet ) {
+ break;
+ }
+
+ iOutCnt = prog.getAudioTrackSize();
+
+ } while ( false );
+
+ return iOutCnt;
+}
+
+int CTv::getAudioInfoByIndex ( int progId, int idx, int *pAFmt, String8 &lang )
+{
+ int iRet, iOutRet = -1;
+ CTvProgram prog;
+ CTvProgram::Audio *pA = NULL;
+
+ do {
+ if ( NULL == pAFmt || idx < 0 ) {
+ break;
+ }
+
+ iRet = CTvProgram::selectByID ( progId, prog );
+
+ if ( 0 != iRet ) {
+ break;
+ }
+
+ if ( idx >= prog.getAudioTrackSize() ) {
+ break;
+ }
+
+ pA = prog.getAudio ( idx );
+
+ if ( NULL == pA ) {
+ break;
+ }
+
+ *pAFmt = pA->getFormat();
+ lang = pA->getLang();
+ } while ( false );
+
+ return iOutRet;
+}
+
+int CTv::switchAudioTrack ( int progId, int idx )
+{
+ int iOutRet = 0;
+ CTvProgram prog;
+ CTvProgram::Audio *pAudio = NULL;
+ int aPid = -1;
+ int aFmt = -1;
+
+ do {
+ if ( idx < 0 ) {
+ break;
+ }
+
+ iOutRet = CTvProgram::selectByID ( progId, prog );
+
+ if ( 0 != iOutRet ) {
+ break;
+ }
+ if(prog.getAudioTrackSize() <= 1) {
+ LOGD("%s, just one audio track, not to switch", __FUNCTION__);
+ break;
+ }
+ if ( idx >= prog.getAudioTrackSize() ) {
+ break;
+ }
+
+ pAudio = prog.getAudio ( idx );
+
+ if ( NULL == pAudio ) {
+ break;
+ }
+
+ aPid = pAudio->getPID();
+ aFmt = pAudio->getFormat();
+
+ if ( aPid < 0 || aFmt < 0 ) {
+ break;
+ }
+
+ iOutRet = mAv.SwitchTSAudio (( uint16_t ) aPid, ( AM_AV_AFormat_t ) aFmt );
+
+ LOGD ( "%s, iOutRet = %d AM_AV_SwitchTSAudio\n", __FUNCTION__, iOutRet );
+ } while ( false );
+
+ return iOutRet;
+}
+
+int CTv::ResetAudioDecoderForPCMOutput()
+{
+ int iOutRet = 0;
+
+ iOutRet = mAv.ResetAudioDecoder ();
+ LOGD ( "%s, iOutRet = %d AM_AV_ResetAudioDecoder\n", __FUNCTION__, iOutRet );
+ return iOutRet;
+}
+int CTv::playDtmbProgram ( int progId )
+{
+ CTvProgram prog;
+ CTvChannel channel;
+ int vpid = 0x1fff, apid = 0x1fff, vfmt = -1, afmt = -1;
+ int aindex;
+ CTvProgram::Audio *pA;
+ CTvProgram::Video *pV;
+ int ret = CTvProgram::selectByID ( progId, prog );
+
+ saveDTVProgramID ( progId );
+ prog.getChannel ( channel );
+ //音é‡è¡¥å¿
+ int chanVolCompValue = 0;
+ chanVolCompValue = GetAudioVolumeCompensationVal(progId);
+ SetCurProgramAudioVolumeCompensationVal ( chanVolCompValue );
+
+ mFrontDev.setPara ( channel.getMode(), channel.getFrequency(), channel.getBandwidth(), 0 );
+
+ pV = prog.getVideo();
+
+ if ( pV != NULL ) {
+ vpid = pV->getPID();
+ vfmt = pV->getFormat();
+ }
+
+ aindex = prog.getCurrAudioTrackIndex();
+
+ if ( -1 == aindex ) { //db is default
+ aindex = prog.getCurrentAudio ( String8 ( "eng" ) );
+
+ if ( aindex >= 0 ) {
+ prog.setCurrAudioTrackIndex ( progId, aindex );
+ }
+ }
+
+ if ( aindex >= 0 ) {
+ pA = prog.getAudio ( aindex );
+
+ if ( pA != NULL ) {
+ apid = pA->getPID();
+ afmt = pA->getFormat();
+ }
+ }
+
+ mTvEpg.leaveProgram();
+ mTvEpg.leaveChannel();
+ startPlayTv ( SOURCE_DTV, vpid, apid, vfmt, afmt );
+ mTvEpg.enterChannel ( channel.getID() );
+ mTvEpg.enterProgram ( prog.getID() );
+ return 0;
+}
+
+int CTv::playAtvProgram (int freq, int videoStd, int audioStd, int fineTune)
+{
+ //image selecting channel
+ mSigDetectThread.requestAndWaitPauseDetect();
+ mTvin.Tvin_StopDecoder();
+
+ //set CVBS
+ int fmt = CFrontEnd::stdEnumToCvbsFmt (videoStd, audioStd);
+ mTvin.AFE_SetCVBSStd ( ( tvin_sig_fmt_t ) fmt );
+ m_cur_set_info_fmt = ( tvin_sig_fmt_t )fmt;
+
+ v4l2_std_id stdAndColor = mFrontDev.enumToStdAndColor (videoStd, audioStd);
+ //set TUNER
+ mFrontDev.setPara (FE_ANALOG, freq, stdAndColor, fineTune);
+
+ if ( fineTune != 0 ) {
+ mFrontDev.fineTune ( fineTune / 1000 );
+ }
+
+ mSigDetectThread.initSigState();
+ mSigDetectThread.resumeDetect();
+ return 0;
+}
+
+int CTv::resetFrontEndPara ( frontend_para_set_t feParms )
+{
+ if ( feParms.mode == FE_ANALOG ) {
+ int progID = -1;
+ int tmpFreq = feParms.freq;
+ int tmpfineFreq = feParms.para2;
+ int mode = feParms.mode;
+
+ //get tunerStd from videoStd and audioStd
+ v4l2_std_id stdAndColor = mFrontDev.enumToStdAndColor (feParms.videoStd, feParms.audioStd);
+
+ //get program dbID saved by last time,if dbID is -1, it shows program hasn't played
+ progID = getATVProgramID();
+
+ LOGD("%s, resetFrontEndPara- vstd=%d astd=%d stdandcolor=%lld", __FUNCTION__, feParms.videoStd, feParms.audioStd, stdAndColor);
+
+ //judge progID matching db's or not
+ CTvProgram prog;
+
+ if ( CTvProgram::selectByID ( progID, prog ) != 0 ) {
+ LOGE ( "%s, atv progID is not matching the db's\n", __FUNCTION__);
+ return 0;
+ }
+
+ //channel fine tune and save freq, std, fineFreq into DB
+ CTvChannel channel;
+ prog.upDateChannel ( channel, stdAndColor, tmpFreq, tmpfineFreq );
+ mFrontDev.fineTune ( tmpfineFreq / 1000 ); //driver fine tune freq khz
+
+
+ //set frontend parameters to tuner dev
+ mSigDetectThread.requestAndWaitPauseDetect();
+ mTvin.Tvin_StopDecoder();
+
+ //set CVBS
+ int fmt = CFrontEnd::stdEnumToCvbsFmt (feParms.videoStd, feParms.audioStd );
+ mTvin.AFE_SetCVBSStd ( ( tvin_sig_fmt_t ) fmt );
+ m_cur_set_info_fmt = ( tvin_sig_fmt_t )fmt;
+
+ //set TUNER
+ usleep(400 * 1000);
+ mFrontDev.setPara ( FE_ANALOG, tmpFreq, stdAndColor, tmpfineFreq );
+ usleep(400 * 1000);
+ if ( tmpfineFreq != 0 ) {
+ mFrontDev.fineTune ( tmpfineFreq / 1000 );
+ }
+
+ mSigDetectThread.initSigState();
+ mSigDetectThread.resumeDetect();
+ } else if ( feParms.mode == FE_DTMB ) {
+ mFrontDev.setPara ( FE_DTMB, feParms.freq, feParms.para1, feParms.para2 );
+ }
+
+ return 0;
+}
+
+int CTv::resetDmxAndAvSource()
+{
+ AM_DMX_Source_t curdmxSource;
+ mFrontDev.GetTSSource ( &curdmxSource );
+ LOGD ( "%s, AM_FEND_GetTSSource %d", __FUNCTION__, curdmxSource );
+ mTvDmx.Close();
+ AM_DMX_OpenPara_t para;
+ memset ( &para, 0, sizeof ( para ) );
+ mTvDmx.Open (para);
+ mTvDmx.SetSource(curdmxSource );
+ AM_AV_TSSource_t ts_source = ( AM_AV_TSSource_t ) curdmxSource;
+ mAv.SetTSSource (ts_source );
+ return 0;
+}
+
+int CTv::SetCurProgramAudioVolumeCompensationVal ( int tmpVal )
+{
+ mTvAudio.SetAudioVolumeCompensationVal ( tmpVal );
+ mTvAudio.SetAudioMasterVolume (mTvAudio.GetAudioMasterVolume() );
+
+ LOGD ( "%s, VolumeCompensationVal = %d, id = %d\n", __FUNCTION__, tmpVal, m_cur_playing_prog_id );
+ CTvProgram prog;
+ if ( CTvProgram::selectByID ( m_cur_playing_prog_id, prog ) != 0 ) {
+ LOGE ( "%s, atv progID is not matching the db's ret = 0\n", __FUNCTION__ );
+ return -1;
+ }
+
+ if (prog.updateVolComp ( m_cur_playing_prog_id, tmpVal ) != 0 ) {
+ LOGE ( "%s, atv progID is not matching the db's\n", __FUNCTION__);
+ return -1;
+ }
+ return 0;
+}
+
+int CTv::GetAudioVolumeCompensationVal(int progxxId)
+{
+ int tmpVolValue = 0;
+ CTvProgram prog;
+ if ( CTvProgram::selectByID ( m_cur_playing_prog_id, prog ) != 0 ) {
+ LOGE ( "%s, atv progID is not matching the db's ret = 0\n", __FUNCTION__ );
+ return tmpVolValue;
+ }
+ tmpVolValue = prog.getChanVolume ();
+ LOGD ( "%s,progid = %d CompensationVal = %d\n", __FUNCTION__, m_cur_playing_prog_id, tmpVolValue );
+ if(tmpVolValue > 20 || tmpVolValue < -20) tmpVolValue = 0;
+ return tmpVolValue;
+}
+
+int CTv::startPlayTv ( int source, int vid, int aid, int vfat, int afat )
+{
+ int ret = 0;
+
+ if ( source == SOURCE_DTV ) {
+ AM_FileEcho ( DEVICE_CLASS_TSYNC_AV_THRESHOLD_MIN, AV_THRESHOLD_MIN_MS );
+ LOGD ( "%s, startPlayTv", __FUNCTION__);
+ mAv.StartTS (vid, aid, ( AM_AV_VFormat_t ) vfat, ( AM_AV_AFormat_t ) afat );
+ } else {
+
+ }
+ return ret;
+}
+
+int CTv::stopPlayingLock()
+{
+ AutoMutex lock ( mLock );
+ return stopPlaying();
+}
+
+int CTv::stopPlaying()
+{
+ if(!(mTvAction & TV_ACTION_PLAYING)) {
+ LOGD("%s, stopplay cur action = %x not playing , return", __FUNCTION__, mTvAction);
+ return 0;
+ }
+ mAv.EnableVideoBlackout();
+ if(m_source_input == SOURCE_TV) {
+ //first mute
+ mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
+ ClearAnalogFrontEnd();
+ } else if(m_source_input == SOURCE_DTV) {
+ //mFrontDev.setPara(FE_DTMB, 51000000, 0, 0);
+ mAv.StopTS ();
+ mTvEpg.leaveChannel();
+ mTvEpg.leaveProgram();
+ }
+ mAv.DisableVideoWithBlueColor();
+ mTvAction = mTvAction & ~TV_ACTION_PLAYING;
+ return 0;
+}
+
+int CTv::getAudioChannel()
+{
+ int iRet = -1;
+ AM_AOUT_OutputMode_t audioChanneleMod;
+ do {
+ iRet = mAv.AudioGetOutputMode (&audioChanneleMod );
+ if ( AM_SUCCESS != iRet ) {
+ LOGD ( "%s, jianfei.lan GetOutputMode is FAILED %d\n", __FUNCTION__, iRet );
+ break;
+ }
+ LOGD ( "%s, jianfei.lan getAudioChannel iRet : %d audioChanneleMod %d\n", __FUNCTION__, iRet, audioChanneleMod );
+ } while ( 0 );
+ return audioChanneleMod;
+}
+
+int CTv::setAudioChannel ( int channelIdx )
+{
+ int iOutRet = 0;
+ AM_AOUT_OutputMode_t audioChanneleMod;
+ LOGD ( "%s, channelIdx : %d\n", __FUNCTION__, channelIdx );
+ audioChanneleMod = ( AM_AOUT_OutputMode_t ) channelIdx;
+ iOutRet = mAv.AudioSetOutputMode (audioChanneleMod );
+ if ( AM_SUCCESS != iOutRet) {
+ LOGD ( "%s, jianfei.lan %s AM_AOUT_SetOutputMode device is FAILED %d\n", __FUNCTION__, "TV", iOutRet );
+ }
+ return 0;
+}
+
+int CTv::getFrontendSignalStrength()
+{
+ int Strength = 0;
+ Strength = mFrontDev.getStatus();
+ return Strength;
+}
+
+int CTv::getFrontendSNR()
+{
+ int snr = 0;
+ snr = mFrontDev.getSNR();
+ return snr;
+}
+
+int CTv::getFrontendBER()
+{
+ int ber = 0;
+ ber = mFrontDev.getBER();
+ return ber;
+
+}
+
+int CTv::getChannelInfoBydbID ( int dbID, channel_info_t &chan_info )
+{
+ CTvProgram prog;
+ CTvChannel channel;
+ Vector<sp<CTvProgram> > out;
+ memset ( &chan_info, sizeof ( chan_info ), 0 );
+ chan_info.freq = 44250000;
+ chan_info.uInfo.atvChanInfo.videoStd = CC_ATV_VIDEO_STD_PAL;
+ chan_info.uInfo.atvChanInfo.audioStd = CC_ATV_AUDIO_STD_DK;
+
+ int ret = CTvProgram::selectByID ( dbID, prog );
+ if ( ret != 0 ) {
+ LOGD ( "getChannelinfo , select dbid=%d,is not exist", dbID);
+ return -1;
+ }
+ prog.getChannel ( channel );
+
+ if ( CTvProgram::TYPE_ATV == prog.getProgType() ) {
+ chan_info.freq = channel.getFrequency();
+ chan_info.uInfo.atvChanInfo.finefreq = channel.getAfcData();
+ LOGD("%s, get channel std = %lld", __FUNCTION__, channel.getStd());
+ chan_info.uInfo.atvChanInfo.videoStd =
+ ( atv_video_std_t ) CFrontEnd::stdAndColorToVideoEnum ( channel.getStd() );
+ chan_info.uInfo.atvChanInfo.audioStd =
+ ( atv_audio_std_t ) CFrontEnd::stdAndColorToAudioEnum ( channel.getStd() );
+ chan_info.uInfo.atvChanInfo.isAutoStd = ((channel.getStd() & V4L2_COLOR_STD_AUTO) == V4L2_COLOR_STD_AUTO) ? 1 : 0;
+ } else if ( CTvProgram::TYPE_DTV == prog.getProgType() || CTvProgram::TYPE_RADIO == prog.getProgType()) {
+ chan_info.freq = channel.getFrequency();
+ chan_info.uInfo.dtvChanInfo.strength = getFrontendSignalStrength();
+ chan_info.uInfo.dtvChanInfo.quality = getFrontendSNR();
+ chan_info.uInfo.dtvChanInfo.ber = getFrontendBER();
+ }
+
+ return 0;
+}
+
+bool CTv::Tv_Start_Analyze_Ts ( int channelID )
+{
+ int freq, ret;
+ CTvChannel channel;
+
+ AutoMutex lock ( mLock );
+ mAv.StopTS ();
+ mAv.DisableVideoWithBlueColor();
+ ret = CTvChannel::selectByID ( channelID, channel );
+
+ if ( ret != 0 ) {
+ LOGD ( "%s, CTv tv_updatats can not get freq by channel ID", __FUNCTION__ );
+ return false;
+ }
+
+ mTvAction = mTvAction | TV_ACTION_SCANNING;
+ freq = channel.getFrequency();
+ LOGD ( "%s, the freq = %d", __FUNCTION__, freq );
+ mDtvScanRunningStatus = DTV_SCAN_RUNNING_ANALYZE_CHANNEL;
+ mTvScanner.setObserver ( &mTvMsgQueue );
+ mTvScanner.manualDtmbScan ( freq, freq ); //dtmb
+ return true;
+}
+
+bool CTv::Tv_Stop_Analyze_Ts()
+{
+ stopScanLock();
+ return true;
+}
+
+
+int CTv::saveATVProgramID ( int dbID )
+{
+ config_set_int ( "TV", "atv.get.program.id", dbID );
+ return 0;
+}
+
+int CTv::getATVProgramID ( void )
+{
+ return config_get_int ( "TV", "atv.get.program.id", -1 );
+}
+
+int CTv::saveDTVProgramID ( int dbID )
+{
+ config_set_int ( "TV", "dtv.get.program.id", dbID );
+ return 0;;
+}
+
+int CTv::getDTVProgramID ( void )
+{
+ return config_get_int ( "TV", "dtv.get.program.id", -1 );
+}
+
+int CTv::getATVMinMaxFreq ( int *scanMinFreq, int *scanMaxFreq )
+{
+ int tmpVal, i = 0;
+ const char *config_value;
+ const char *strDelimit = ",";
+ char *token = NULL;
+
+ *scanMinFreq = 44250000;
+ *scanMaxFreq = 868250000;
+
+ config_value = config_get_str ( "ATV", "atv.get.min.max.freq", "null" );
+
+ if ( strcmp ( config_value, "null" ) == 0 ) {
+ LOGD ( "%s, atv.get.min.max.freq not set config\n", __FUNCTION__ );
+ return -1;
+ }
+
+ char data_str[512];
+ memset ( ( void * ) data_str, 0, sizeof ( data_str ) );
+ strncpy ( data_str, config_value, sizeof ( data_str ) - 1 );
+
+ token = strtok ( data_str, strDelimit );
+ sscanf ( token, "%d", scanMinFreq );
+ token = strtok ( NULL, strDelimit );
+
+ if ( token != NULL ) {
+ sscanf ( token, "%d", scanMaxFreq );
+ return 0;
+ }
+ return 0;
+}
+
+int CTv::IsDVISignal()
+{
+ return ( ( TVIN_SIG_FMT_NULL != mSigDetectThread.getCurSigInfo().fmt ) && ( mSigDetectThread.getCurSigInfo().reserved & 0x1 ) );
+}
+
+int CTv::getHDMIFrameRate()
+{
+ int ConstRate[5] = {24, 25, 30, 50, 60};
+ float ConstRateDiffHz[5] = {0.5, 0.5, 0.5, 2, 2}; //å差值
+ int fps = mSigDetectThread.getCurSigInfo().fps;
+ int i = 0;
+ for(; i < 5; i++) {
+ if(abs(ConstRate[i] - fps) < ConstRateDiffHz[i])
+ fps = ConstRate[i];
+ }
+ return fps;
+}
+
+tv_source_input_t CTv::GetLastSourceInput ( void )
+{
+ return m_last_source_input;
+}
+
+int CTv::isVgaFmtInHdmi ( void )
+{
+ tvin_sig_fmt_t fmt = mSigDetectThread.getCurSigInfo().fmt;
+
+ if ( CTvin::Tvin_SourceInputToSourceInputType(m_source_input) != SOURCE_TYPE_HDMI ) {
+ return -1;
+ }
+
+ return CTvin::isVgaFmtInHdmi ( fmt );
+}
+
+int CTv::SetBypassModulesFor3D ( VIDEO_3D_MODE_E mode )
+{
+ LOGD ( "%s, ----> Set mode(%d) <----", __FUNCTION__, mode );
+ const char *config_value = NULL;
+
+ int DIBypassAllFlag = 0;
+ config_value = config_get_str ( "TV", "tvin.di.bypass_all", "null" );//bypass , if
+ if (strcasecmp(config_value, "true") == 0 || strcasecmp(config_value, "1") == 0) {
+ DIBypassAllFlag = 1;
+ } else {
+ DIBypassAllFlag = 0;
+ }
+
+
+ switch (mode) {
+ case VIDEO_3D_MODE_DISABLE: {
+ mTvin.VDIN_SetDIBypassAll ( 0 );
+ mTvin.VDIN_SetDIBypassPost ( 0 );
+ // mTvin.VDIN_SetDISip_Top_Bot ( 0 );
+ }
+ break;
+ case VIDEO_3D_MODE_AUTO: {
+ mTvin.VDIN_SetDIBypassAll ( 0 );
+ mTvin.VDIN_SetDIBypassPost ( 1 );
+ // mTvin.VDIN_SetDISip_Top_Bot ( 0 );
+
+
+ }
+ break;
+ case VIDEO_3D_MODE_LR:
+ case VIDEO_3D_MODE_TB: {
+ mTvin.VDIN_SetDIBypassPost ( 1 );
+ usleep ( 20 * 1000 );
+ mTvin.VDIN_SetDIBypassAll ( 1 | DIBypassAllFlag );
+ //mTvin.VDIN_SetDISip_Top_Bot ( 1 );
+ }
+ break;
+ case VIDEO_3D_MODE_LA:
+ case VIDEO_3D_MODE_FA: {
+ mTvin.VDIN_SetDIBypassPost ( 1 );
+ usleep ( 20 * 1000 );
+ mTvin.VDIN_SetDIBypassAll ( 0 );
+ //mTvin.VDIN_SetDISip_Top_Bot ( 0 );
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (CTvin::Tvin_SourceInputToSourceInputType(m_source_input) == SOURCE_TYPE_DTV ) {
+ if ( mode == VIDEO_3D_MODE_DISABLE ) {
+ mTvin.VDIN_SetVdinFlag ( MEMP_DCDR_WITHOUT_3D );
+ } else {
+ mTvin.VDIN_SetVdinFlag ( MEMP_DCDR_WITH_3D );
+ }
+ } else {
+ if ( mode == VIDEO_3D_MODE_DISABLE ) {
+ if ( m_source_input == SOURCE_TV ) {
+ mTvin.VDIN_SetVdinFlag ( MEMP_ATV_WITHOUT_3D );
+ } else {
+ mTvin.VDIN_SetVdinFlag ( MEMP_VDIN_WITHOUT_3D );
+ }
+ } else {
+ if ( m_source_input == SOURCE_TV ) {
+ mTvin.VDIN_SetVdinFlag ( MEMP_ATV_WITH_3D );
+ } else {
+ mTvin.VDIN_SetVdinFlag ( MEMP_VDIN_WITH_3D );
+ }
+ }
+ }
+
+ return 0;
+}
+
+void CTv::print_version_info ( void )
+{
+ // print tvapi version info
+ LOGD ( "libtvservice git branch:%s\n", tvservice_get_git_branch_info() );
+ LOGD ( "libtvservice git version:%s\n", tvservice_get_git_version_info() );
+ LOGD ( "libtvservice Last Changed:%s\n", tvservice_get_last_chaned_time_info() );
+ LOGD ( "libtvservice Last Build:%s\n", tvservice_get_build_time_info() );
+ LOGD ( "libtvservice Builer Name:%s\n", tvservice_get_build_name_info() );
+ LOGD ( "libtvservice board version:%s\n", tvservice_get_board_version_info() );
+ LOGD ( "\n\n");
+ // print dvb version info
+ LOGD ( "libdvb git branch:%s\n", dvb_get_git_branch_info() );
+ LOGD ( "libdvb git version:%s\n", dvb_get_git_version_info() );
+ LOGD ( "libdvb Last Changed:%s\n", dvb_get_last_chaned_time_info() );
+ LOGD ( "libdvb Last Build:%s\n", dvb_get_build_time_info() );
+ LOGD ( "libdvb Builer Name:%s\n", dvb_get_build_name_info() );
+}
+
+int CTv::Tvin_GetTvinConfig ( void )
+{
+ const char *config_value;
+ int i = 0;
+
+ config_value = config_get_str ( "TV", "tvin.overscan.3d", "null" );
+
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ gTvinConfig.overscan_3d = 1;
+ } else {
+ gTvinConfig.overscan_3d = 0;
+ }
+
+ config_value = config_get_str ( "TV", "tvin.tv.out.counter", "null" );
+ gTvinConfig.tv_out_counter = ( unsigned int ) strtol ( config_value, NULL, 6 );
+
+ if ( gTvinConfig.tv_out_counter <= 0 || gTvinConfig.tv_out_counter > 8 ) {
+ gTvinConfig.tv_out_counter = 6;
+ }
+
+ config_value = config_get_str ( "TV", "tvin.kernelpet_disable", "null" );
+
+ if ( strcmp ( config_value, "disable" ) == 0 ) {
+ gTvinConfig.kernelpet_disable = true;
+ } else {
+ gTvinConfig.kernelpet_disable = false;
+ }
+
+ config_value = config_get_str ( "TV", "tvin.kernelpet.timeout", "null" );
+ gTvinConfig.userpet_timeout = ( unsigned int ) strtol ( config_value, NULL, 10 );
+
+ if ( gTvinConfig.kernelpet_timeout <= 0 || gTvinConfig.kernelpet_timeout > 40 ) {
+ gTvinConfig.kernelpet_timeout = 10;
+ }
+
+
+ config_value = config_get_str ( "TV", "tvin.userpet", "null" );
+
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ gTvinConfig.userpet = true;
+ } else {
+ gTvinConfig.userpet = false;
+ }
+
+ config_value = config_get_str ( "TV", "tvin.userpet.timeout", "null" );
+ gTvinConfig.userpet_timeout = ( unsigned int ) strtol ( config_value, NULL, 10 );
+
+ if ( gTvinConfig.userpet_timeout <= 0 || gTvinConfig.userpet_timeout > 100 ) {
+ gTvinConfig.userpet_timeout = 10;
+ }
+
+ config_value = config_get_str ( "TV", "tvin.userpet.reset", "null" );
+
+ if ( strcmp ( config_value, "disable" ) == 0 ) {
+ gTvinConfig.userpet_reset = 0;
+ } else {
+ gTvinConfig.userpet_reset = 1;
+ }
+
+ config_value = config_get_str ( "TV", "tvin.title_shake", "null" );
+
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ gTvinConfig.title_shake = true;
+ } else {
+ gTvinConfig.title_shake = false;
+ }
+
+ return 0;
+}
+
+int CTv::SetAudioMainVolLutBufName()
+{
+ int i = 0;
+ const char *tmp_ptr = NULL;
+ int get_type_buf[6] = { CC_GET_LUT_TV, CC_GET_LUT_AV, CC_GET_LUT_COMP, CC_GET_LUT_HDMI, CC_GET_LUT_VGA, CC_GET_LUT_MPEG };
+ const char *end_str_buf[6] = { ".tv", ".av", ".comp", ".hdmi", ".vga", ".mpeg", };
+ project_info_t tmp_info;
+ char tmp_buf[128];
+ char value_buf[128];
+ char key_buf[128];
+
+ int name_en = GetAudioMainVolLutBufNameModifyEnableCFG();
+
+ if (name_en == 1) {
+ strcpy(tmp_buf, "null");
+ if (GetProjectInfo(&tmp_info) == 0) {
+ strncpy(tmp_buf, tmp_info.amp_curve_name, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
+ }
+
+ if (strcmp(tmp_buf, "null") != 0) {
+ for ( i = 0; i < 6; i++ ) {
+ memset(value_buf, '\0', sizeof(value_buf));
+ memset(key_buf, '\0', sizeof(key_buf));
+
+ GetAudioMainVolLutBufNameCFG(get_type_buf[i], key_buf);
+
+ strcpy(value_buf, tmp_buf);
+ strcat(value_buf, end_str_buf[i]);
+
+ tmp_ptr = config_get_str("TV", key_buf, "null");
+ if (strcmp(tmp_ptr, value_buf) != 0) {
+ config_set_str("TV", key_buf, value_buf);
+ LOGD("%s, config string now set as: %s \n", __FUNCTION__, value_buf);
+ } else {
+ LOGD("%s, config string has been set as: %s \n", __FUNCTION__, value_buf);
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+int CTv::SetAudioSupperBassVolLutBufName()
+{
+ int i = 0;
+ const char *tmp_ptr = NULL;
+ int get_type_buf[6] = { CC_GET_LUT_TV, CC_GET_LUT_AV, CC_GET_LUT_COMP, CC_GET_LUT_HDMI, CC_GET_LUT_VGA, CC_GET_LUT_MPEG };
+ const char *end_str_buf[6] = { ".tv", ".av", ".comp", ".hdmi", ".vga", ".mpeg", };
+ project_info_t tmp_info;
+ char tmp_buf[128];
+ char value_buf[128];
+ char key_buf[128];
+
+ int name_en = GetAudioSupperBassVolLutBufNameModifyEnableCFG();
+
+ if (name_en == 1) {
+ strcpy(tmp_buf, "null");
+ if (GetProjectInfo(&tmp_info) == 0) {
+ strncpy(tmp_buf, tmp_info.amp_curve_name, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
+ }
+
+ if (strcmp(tmp_buf, "null") != 0) {
+ for ( i = 0; i < 6; i++ ) {
+ memset(value_buf, '\0', sizeof(value_buf));
+ memset(key_buf, '\0', sizeof(key_buf));
+
+ GetAudioSupperBassVolLutBufNameCFG(get_type_buf[i], key_buf);
+
+ strcpy(value_buf, tmp_buf);
+ strcat(value_buf, ".sup");
+ strcat(value_buf, end_str_buf[i]);
+
+ tmp_ptr = config_get_str("TV", key_buf, "null");
+ if (strcmp(tmp_ptr, value_buf) != 0) {
+ config_set_str("TV", key_buf, value_buf);
+ LOGD("%s, config string now set as: %s \n", __FUNCTION__, value_buf);
+ } else {
+ LOGD("%s, config string has been set as: %s \n", __FUNCTION__, value_buf);
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+TvRunStatus_t CTv::GetTvStatus()
+{
+ return mTvStatus;
+}
+
+int CTv::OpenTv ( void )
+{
+ int tmp_val = 0;
+ const char *value;
+ //reboot system by fbc setting.
+ value = config_get_str ( "TV", "fbc.get.panelinfo", "null" );
+ LOGD("%s fbc-------------------\n", value);
+ if ( strcmp ( value, "edid" ) == 0 ) {
+ if(reboot_sys_by_fbc_edid_info() == 0) {
+ }
+ } else if ( strcmp ( value, "uart" ) == 0 ) {
+ if(reboot_sys_by_fbc_uart_panel_info() == 0) {
+ }
+ }
+
+ LOGD ( "%s, tv open\n", __FUNCTION__);
+ char prop_value[PROPERTY_VALUE_MAX];
+ memset ( prop_value, '\0', PROPERTY_VALUE_MAX );
+
+ mTvin.Tvin_LoadSourceInputToPortMap();
+
+ SSMSave3DLRSwitch ( 0 );
+ SSMSave3DTO2D ( 0 );
+ //
+ SSMHandlePreCopying();
+ if ( SSMDeviceMarkCheck() < 0 ) {
+ SSMRestoreDeviceMarkValues();
+ Tv_SSMRestoreDefaultSetting();
+ }
+ mTvin.OpenTvin();
+ mTvin.init_vdin();
+ mTvin.Tv_init_afe();
+ mVpp.Vpp_Init();
+ SetAudioSupperBassVolLutBufName();
+ SetAudioMainVolLutBufName();
+ mTvAudio.AudioCtlInitializeLoad();
+
+ SSMSetHDCPKey();
+ system ( "/system/bin/dec" );
+
+ //set color filter
+ // SetFileAttrValue ( "/sys/module/amvideo/parameters/filt_mode", "0x2100" );
+
+ if ( gTvinConfig.title_shake) {
+ SetFileAttrValue ( "/sys/module/di/parameters/di_new_mode_mask", "0x10000" );
+ }
+
+ value = config_get_str ( "TV", "tvin.autoset.displayfreq", "null" );
+
+ if ( strcmp ( value, "enable" ) == 0 ) {
+ m_autoset_displayfreq = true;
+ } else {
+ m_autoset_displayfreq = false;
+ }
+
+ if (mTvin.VDIN_GetDisplayVFreq() == 30) {
+ m_autoset_displayfreq = false;
+ }
+
+ if (GetPlatformHaveDDFlag() == 1) {
+ SetFileAttrValue ("/sys/module/tvin_hdmirx/parameters/edid_mode", "0x109");
+ }
+
+ value = config_get_str ( "TV", "ssm.handle.hdmi.edid.en", "null" );
+
+ if ( strtoul(value, NULL, 10) == 1 ) {
+ LOGD( "%s, get config \"%s\" is \"%s\".\n",
+ __FUNCTION__, "ssm.handle.hdmi.edid.en", value );
+ //get hdmi edid use mode
+ char prop_value[256];
+ memset( prop_value, '\0', 256 );
+ property_get( "ubootenv.var.outputmode", prop_value, "null" );
+ LOGD( "%s, get property \"%s\" is \"%s\".\n",
+ __FUNCTION__, "ubootenv.var.outputmode", prop_value );
+ if ( strcmp ( prop_value, "null" ) != 0 ) {
+ config_set_str ( "TV", "ssm.handle.hdmi.edid.use", prop_value );
+ int i;
+ char edid_path[256];
+ char edid_path_cfg[256];
+ //set file's path for hdmi edid of each port
+ for ( i = 1; i <= SSM_HDMI_PORT_MAX; i++ ) {
+ memset( edid_path, '\0', 256 );
+ memset( edid_path_cfg, '\0', 256 );
+ sprintf ( edid_path, "/system/etc/%s_port%d.bin", prop_value, i );
+ sprintf ( edid_path_cfg, "ssm.handle.hdmi.port%d.edid.file.path", i );
+ config_set_str ( "TV", edid_path_cfg, edid_path );
+ }
+ } else {
+ //set default hdmi edid
+ config_set_str ( "TV", "ssm.handle.hdmi.edid.use", "hdmi_edid" );
+ int i;
+ char edid_path[256];
+ char edid_path_cfg[256];
+ //set file's path for hdmi edid of each port
+ for ( i = 1; i <= SSM_HDMI_PORT_MAX; i++ ) {
+ memset( edid_path, '\0', 256 );
+ memset( edid_path_cfg, '\0', 256 );
+ sprintf ( edid_path, "/system/etc/%s_port%d.bin", "hdmi_edid", i );
+ sprintf ( edid_path_cfg, "ssm.handle.hdmi.port%d.edid.file.path", i );
+ config_set_str ( "TV", edid_path_cfg, edid_path );
+ }
+ }
+ m_is_set_hdmi_edid = true;
+ }
+ //
+ unsigned char val = 0;
+ Tvin_GetTvinConfig();
+ m_last_source_input = SOURCE_INVALID;
+ m_source_input = SOURCE_INVALID;
+ m_mode_3d = VIDEO_3D_MODE_DISABLE;
+ m_is_hdmi_sr_detect_start = false;
+ m_hdmi_sampling_rate = 0;
+ int8_t blackout_enable;
+ SSMReadBlackoutEnable(&blackout_enable);
+ m_blackout_enable = blackout_enable;
+
+
+ //
+ //dtv init
+ int rt = -1;
+ //opendemux();
+ rt = mFrontDev.Open(FE_ANALOG);
+ mFrontDev.autoLoadFE();
+ AM_DMX_OpenPara_t para_dmx;
+ memset ( &para_dmx, 0, sizeof ( AM_DMX_OpenPara_t ) );
+ mTvDmx.Open(para_dmx );
+ mTvDmx.SetSource (AM_DMX_SRC_TS2);
+ mAv.Open();
+ mTvEpg.Init ( 0, 0, 1, "eng zho chi", "GB2312" );
+ resetDmxAndAvSource();
+ mSourceConnectDetectThread.startDetect();
+
+ if (SSMReadSerialCMDSwitchValue() == 1) {
+ SetSerialSwitch(SERIAL_A, 1);
+ }
+ mTvin.VDIN_SetVdinFlag ( MEMP_DCDR_WITHOUT_3D );
+ mTvin.VDIN_SetMVCViewMode(0);//for not 3d screen
+ ClearAnalogFrontEnd();
+
+ mTvStatus = TV_OPEN_ED;
+
+ mHDMIRxCEC.start();
+
+ return 0;
+}
+
+int CTv::CloseTv ( void )
+{
+ LOGD ( "%s, tv close");
+ mSigDetectThread.stopDetect();
+ if (mpUpgradeFBC != NULL) {
+ mpUpgradeFBC->stop();
+ }
+ mTvin.Tv_uninit_afe();
+ mTvin.uninit_vdin();
+ mVpp.Vpp_Uninit();
+ TvMisc_DisableWDT ( gTvinConfig.userpet );
+ mTvStatus = TV_CLOSE_ED;
+ return 0;
+}
+
+
+int CTv::StartTvLock ()
+{
+ LOGD ( "%s, tv start status = %d", __FUNCTION__, mTvStatus);
+ if(mTvStatus == TV_START_ED)
+ return 0;
+
+ Mutex::Autolock _l ( mLock );
+ mTvAction = mTvAction | TV_ACTION_STARTING;
+ mTvAudio.SwitchAVOutBypass(0);
+ mTvAudio.AudioCtlInit();
+ mFrontDev.Open(FE_ANALOG);
+ mSigDetectThread.startDetect();
+ mSigDetectThread.pauseDetect();
+ mSigDetectThread.initSigState();
+ mTvMsgQueue.startMsgQueue();
+ resetDmxAndAvSource();
+ Vpp_SetDisplayMode ( mVpp.Tv_GetDisplayMode ( CTvin::Tvin_SourceInputToSourceInputType(m_source_input) ), CTvin::Tvin_SourceInputToSourceInputType(m_source_input), mSigDetectThread.getCurSigInfo().fmt);
+ TvMisc_EnableWDT ( gTvinConfig.kernelpet_disable, gTvinConfig.userpet, gTvinConfig.kernelpet_timeout, gTvinConfig.userpet_timeout, gTvinConfig.userpet_reset );
+ am_phase_t am_phase;
+ if (mVpp.getPqData()->PQ_GetPhaseArray ( &am_phase ) == 0 ) {
+ mTvin.TvinApi_SetCompPhase(am_phase);
+ }
+ mTvin.TvinApi_SetCompPhaseEnable ( 1 );
+ mTvin.VDIN_EnableRDMA ( 1 );
+ mTvin.VDIN_SetDIBypasshd ( 0 );
+
+ SetBypassModulesFor3D ( VIDEO_3D_MODE_DISABLE );
+ //win pos
+ tvin_window_pos_t win_pos;
+ Vpp_GetDisplayResolutionInfo(&win_pos);
+ SetPreviewWindow ( win_pos );
+
+ mTvin.Tvin_RemovePath ( TV_PATH_TYPE_TVIN );
+ if ( mTvin.Tvin_RemovePath ( TV_PATH_TYPE_DEFAULT ) ) {
+ mTvin.Tvin_AddPath ( TV_PATH_DECODER_NEW3D_WITHOUTPPMGR_AMVIDEO );
+ }
+ mTvin.VDIN_SetVdinFlag ( MEMP_DCDR_WITHOUT_3D );
+
+ mAv.SetVideoWindow (0, 0, 0, 0 );
+
+ mTvAction = mTvAction & ~TV_ACTION_STARTING;
+ mTvStatus = TV_START_ED;
+ return 0;
+}
+int CTv::StopTvLock ( void )
+{
+ LOGD("%s, call Tv_Stop status = %d \n", __FUNCTION__, mTvStatus);
+ const char *value;
+ Mutex::Autolock _l ( mLock );
+ //we should stop audio first for audio mute.
+ mTvAction = mTvAction | TV_ACTION_STOPING;
+ mSigDetectThread.requestAndWaitPauseDetect();
+ mAv.EnableVideoBlackout();
+ //stop scan if scanning
+ if(mTvAction & TV_ACTION_SCANNING) {
+ LOGD("%s, scanning first stop it\n", __FUNCTION__)
+ mTvEpg.leaveChannel();
+ mTvScanner.stopScan();
+ mTvAction = mTvAction & ~TV_ACTION_SCANNING;
+ }
+ //first stop play(if playing)
+ stopPlaying();
+ //
+ mTvAudio.SwitchAVOutBypass(0);
+ tv_audio_channel_e audio_channel = mTvin.Tvin_GetInputSourceAudioChannelIndex (SOURCE_MPEG);
+ mTvAudio.AudioLineInSelectChannel( audio_channel );
+ mTvAudio.AudioCtlUninit();
+ mTvin.Tvin_StopDecoder();
+ mTvin.Tvin_RemovePath ( TV_PATH_TYPE_TVIN );
+ Tv_Set3DMode(VIDEO_3D_MODE_DISABLE);
+ mTvAudio.SetAudioMuteForTv ( CC_AUDIO_UNMUTE );
+ tvin_window_pos_t win_pos;
+ Vpp_GetDisplayResolutionInfo(&win_pos);
+ SetPreviewWindow (win_pos );
+ mVpp.Tv_LoadVppSettings ( SOURCE_TYPE_MPEG, TVIN_SIG_FMT_NULL, INDEX_2D, TVIN_TFMT_2D );
+ Vpp_SetDisplayMode ( mVpp.Tv_GetDisplayMode ( CTvin::Tvin_SourceInputToSourceInputType(SOURCE_MPEG) ), CTvin::Tvin_SourceInputToSourceInputType(SOURCE_MPEG), mSigDetectThread.getCurSigInfo().fmt);
+ RefreshAudioMasterVolume ( SOURCE_MPEG );
+ mVpp.VPP_SetVideoCrop ( 0, 0, 0, 0 );
+ m_last_source_input = SOURCE_INVALID;
+ m_source_input = SOURCE_INVALID;
+ mAv.DisableVideoWithBlackColor();
+ mAv.ClearVideoBuffer();
+ mFrontDev.Close();
+ mTvAction = mTvAction & ~TV_ACTION_STOPING;
+ mTvStatus = TV_STOP_ED;
+ value = config_get_str ( "TV", "tvin.2d4G.headset.en", "null" );
+ if ( strcmp ( value, "enable" ) == 0 ) {
+ property_set("audio.tv_open.flg", "0");
+ }
+
+ Tv_SetDDDRCMode(SOURCE_MPEG);
+ return 0;
+}
+
+int CTv::Tv_MiscSetBySource ( tv_source_input_t source_input )
+{
+ int ret = -1;
+
+ switch ( source_input ) {
+ case SOURCE_TV:
+ ret = SetFileAttrValue ( "/sys/module/am_vecm/parameters/dnlp_adj_level", "4" );
+ break;
+
+ case SOURCE_HDMI1:
+ case SOURCE_HDMI2:
+ case SOURCE_HDMI3:
+ //ret = mVpp.Tv_SavePanoramaMode ( VPP_PANORAMA_MODE_FULL, SOURCE_TYPE_HDMI );
+ ret |= SetFileAttrValue ( "/sys/module/am_vecm/parameters/dnlp_adj_level", "5" );
+ break;
+
+ case SOURCE_DTV:
+ if ( m_autoset_displayfreq) {
+ ret = mTvin.VDIN_SetDisplayVFreq ( 50, mAv.getVideoDisplayResolution() , mIsFbc);
+ }
+
+ case SOURCE_AV1:
+ case SOURCE_AV2:
+ case SOURCE_VGA:
+ ret |= SetFileAttrValue ( "/sys/module/am_vecm/parameters/dnlp_adj_level", "5" );
+ break;
+
+ case SOURCE_SVIDEO:
+ case SOURCE_IPTV:
+ default:
+ ret |= SetFileAttrValue ( "/sys/module/am_vecm/parameters/dnlp_adj_level", "5" );
+ break;
+ }
+
+ return ret;
+}
+
+int CTv::SetSourceSwitchInput (tv_source_input_t source_input )
+{
+ Mutex::Autolock _l ( mLock );
+ LOGD ( "%s, source input = %d", __FUNCTION__, source_input );
+ tv_source_input_t cur_source_input = m_source_input;
+ tvin_port_t cur_port;
+
+ Tv_SetDDDRCMode(source_input);
+
+ if (source_input == cur_source_input ) {
+ LOGW ( "%s,same input change display mode", __FUNCTION__ );
+ return 0;
+ }
+
+ //if HDMI, need to set EDID of each port
+ if (m_is_set_hdmi_edid) {
+ int tmp_ret = 0;
+ switch ( source_input ) {
+ case SOURCE_HDMI1:
+ tmp_ret = SSMSetHDMIEdid(1);
+ break;
+ case SOURCE_HDMI2:
+ tmp_ret = SSMSetHDMIEdid(2);
+ break;
+ case SOURCE_HDMI3:
+ tmp_ret = SSMSetHDMIEdid(3);
+ break;
+ default:
+ tmp_ret = -1;
+ break;
+ }
+ if (tmp_ret < 0)
+ LOGE ( "%s, do not set hdmi port%d edid.ret=%d", __FUNCTION__, source_input - 4, tmp_ret );
+ }
+ mTvAction = mTvAction | TV_ACTION_SOURCE_SWITCHING;
+ m_cur_playing_prog_id = -1;
+ //
+ CMessage msg;
+ msg.mType = CTvMsgQueue::TV_MSG_CHECK_FE_DELAY;
+ msg.mpData = this;
+ msg.mDelayMs = 3500;//ms
+ mTvMsgQueue.removeMsg ( msg );
+ //mute first
+ mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
+ mSigDetectThread.requestAndWaitPauseDetect();
+ mAv.DisableVideoWithBlueColor();
+ //enable blackout, when play,disable it
+ mAv.EnableVideoBlackout();
+ //set front dev mode
+ if ( source_input == SOURCE_TV ) {
+ mFrontDev.Close();
+ mFrontDev.Open(FE_ANALOG);
+ //mFrontDev.setMode ( FE_ANALOG );
+ } else if ( source_input == SOURCE_DTV ) {
+ mFrontDev.Close();
+ mFrontDev.Open(FE_ANALOG);
+ //mFrontDev.setMode ( FE_DTMB);
+ } else {
+ mFrontDev.Close();
+ }
+
+ //ok
+ m_last_source_input = m_source_input;
+ m_source_input = source_input;
+ SSMSaveSourceInput ( source_input );
+
+ tv_source_input_t pre_source_input = cur_source_input;//change
+ cur_source_input = source_input;
+
+ mTvAudio.SetAudioVolumeCompensationVal ( 0 );
+
+ if ( source_input == SOURCE_DTV ) {
+ //we should stop audio first for audio mute.
+ mTvAudio.SwitchAVOutBypass(0);
+ tv_audio_channel_e audio_channel = mTvin.Tvin_GetInputSourceAudioChannelIndex (SOURCE_MPEG);
+ mTvAudio.AudioLineInSelectChannel( audio_channel );
+ mTvAudio.AudioCtlUninit();
+ //
+ mTvin.Tvin_StopDecoder();
+ mTvin.Tvin_RemovePath ( TV_PATH_TYPE_TVIN );
+ Tv_Set3DMode(VIDEO_3D_MODE_DISABLE);
+ //double confirm we set the main volume lut buffer to mpeg
+ RefreshAudioMasterVolume ( SOURCE_MPEG );
+ mTvAudio.AudioDataInitForDtv();
+ mTvin.setMpeg2Vdin(1);
+ mVpp.Tv_LoadVppSettings ( SOURCE_TYPE_DTV, TVIN_SIG_FMT_NULL, INDEX_2D, TVIN_TFMT_2D );
+ } else {
+ mTvin.setMpeg2Vdin(0);
+ mTvin.Tvin_AddPath ( TV_PATH_VDIN_NEW3D_WITHOUTPPMGR_AMVIDEO );
+ mTvin.VDIN_SetVdinFlag ( MEMP_VDIN_WITHOUT_3D );
+ }
+ cur_port = mTvin.Tvin_GetSourcePortBySourceInput ( cur_source_input );
+ Tv_MiscSetBySource ( source_input );
+
+ //only DTV->TVIN or TVIN->DTV need start resource detect thread
+ if ( ( pre_source_input == SOURCE_DTV || cur_source_input == SOURCE_DTV ) && ( cur_source_input != pre_source_input ) ) {
+ LOGD ( "%s, dtv need resource detect\n", __FUNCTION__ );
+ int isNeedCheckD2D3 = ( gTvinConfig.memory512m) ? 1 : 0;
+ static int sigchkcnt = 0;
+ while ( true ) {
+ if ( ( mTvin.Tvin_CheckPathActive ( TV_PATH_TYPE_DEFAULT, isNeedCheckD2D3 ) == TV_PATH_STATUS_INACTIVE )
+ && ( mTvin.Tvin_CheckPathActive ( TV_PATH_TYPE_TVIN, isNeedCheckD2D3 ) == TV_PATH_STATUS_INACTIVE ) ) {
+ LOGD("%s, path check is ok, and break\n", __FUNCTION__)
+ break;
+ } else {
+ if(sigchkcnt++ > 20) {
+ sigchkcnt = 0;
+ break;
+ }
+
+ LOGW ( "%s,resource is busy.", __FUNCTION__);
+ }
+ }//while
+ }//if need check,and check return
+
+ if ( source_input != SOURCE_DTV ) {
+ // Uninit data
+ mTvAudio.AudioDataUnInit();
+ if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3 ||
+ source_input == SOURCE_MPEG || source_input == SOURCE_DTV ) {
+ mTvAudio.SwitchAVOutBypass(0);
+ } else {
+ mTvAudio.SwitchAVOutBypass(1);
+ }
+
+ tv_audio_channel_e audio_channel = mTvin.Tvin_GetInputSourceAudioChannelIndex (source_input);
+ mTvAudio.AudioLineInSelectChannel( audio_channel );
+
+ Tv_SetAudioInSource ( source_input );
+ if ( source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3 ) {
+ m_is_hdmi_sr_detect_start = true;
+ m_hdmi_sampling_rate = 0;
+ } else {
+ mTvAudio.AudioDataInit ( 48000, true );
+ audio_sr = 48000;
+ }
+ //===========================================
+ if ( mTvin.SwitchPort ( cur_port ) == 0 ) { //ok
+ //==========================================
+ SSMSave3DDepth ( 0 );
+ mTvin.Tvin_SetDepthOf2Dto3D ( 0 ); // set default depth
+ Tv_Set3DMode(VIDEO_3D_MODE_DISABLE);
+ SSMSave3DLRSwitch ( 0 );
+ SSMSave3DTO2D (0);
+
+ //for HDMI source connect detect
+ mTvin.VDIN_OpenHDMIPinMuxOn(true);
+ mTvAudio.AudioSetRecordDataZero ( false ); //make AudioRecord data avaliable
+ mVpp.Vpp_ResetLastVppSettingsSourceType();
+ //==========================================
+ m_sig_stable_nums = 0;
+ mSigDetectThread.initSigState();
+ if(source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
+ mSigDetectThread.setVdinNoSigCheckKeepTimes(5000, true);
+ } else {
+ mSigDetectThread.setVdinNoSigCheckKeepTimes(3000, true);
+ }
+ mSigDetectThread.resumeDetect();
+ } else {
+ }
+ }
+
+ Tv_SetAudioSourceType(source_input);
+ RefreshAudioMasterVolume(source_input);
+ Tv_SetAudioOutputSwap_Type(source_input);
+
+ mTvAction = mTvAction & ~ TV_ACTION_SOURCE_SWITCHING;
+ return 0;
+}
+
+void CTv::onSigToStable()
+{
+ if ( ( CTvin::Tvin_SourceInputToSourceInputType(m_source_input) == SOURCE_TYPE_TV ) ) {
+ mSigDetectThread.getCurSigInfo().fmt = m_cur_set_info_fmt;
+ }
+ if ( m_autoset_displayfreq) {
+ if ( CTvin::Tvin_is50HzFrameRateFmt ( mSigDetectThread.getCurSigInfo().fmt ) ) {
+ mTvin.VDIN_SetDisplayVFreq ( 50, mAv.getVideoDisplayResolution(), mIsFbc );
+ LOGD ( "%s, SetDisplayVFreq 50HZ.", __FUNCTION__);
+ } else {
+ mTvin.VDIN_SetDisplayVFreq ( 60, mAv.getVideoDisplayResolution(), mIsFbc );
+ LOGD ( "%s, SetDisplayVFreq 60HZ.", __FUNCTION__);
+ }
+ }
+ //showbo mark hdmi auto 3d, tran fmt is 3d, so switch to 3d
+ LOGD("hdmi trans_fmt = %d", mSigDetectThread.getCurSigInfo().trans_fmt);
+ if (mSigDetectThread.getCurSigInfo().trans_fmt != TVIN_TFMT_2D) {
+ Tv_Set3DMode(VIDEO_3D_MODE_AUTO);
+ }
+
+ LOGD("onSigToStable --- trans_fmt = %d", mSigDetectThread.getCurSigInfo().trans_fmt);
+ //load pq parameters
+ mVpp.Tv_LoadVppSettings (CTvin::Tvin_SourceInputToSourceInputType(m_source_input), mSigDetectThread.getCurSigInfo().fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), mSigDetectThread.getCurSigInfo().trans_fmt );
+
+ if ( m_win_mode == PREVIEW_WONDOW ) {
+ mAv.setVideoAxis(m_win_pos.x1, m_win_pos.y1, m_win_pos.x2, m_win_pos.y2);
+ mAv.setVideoScreenMode ( CAv::VIDEO_WIDEOPTION_FULL_STRETCH );
+ } else {
+ Vpp_SetDisplayMode ( mVpp.Tv_GetDisplayMode ( CTvin::Tvin_SourceInputToSourceInputType(m_source_input) ), CTvin::Tvin_SourceInputToSourceInputType(m_source_input), mSigDetectThread.getCurSigInfo().fmt);
+ }
+ m_sig_stable_nums = 0;
+
+}
+void CTv::onSigStableToUnstable()
+{
+ LOGD ( "%s, stable to unstable\n", __FUNCTION__);
+ mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
+ mAv.DisableVideoWithBlackColor();
+ mTvin.Tvin_StopDecoder();
+}
+void CTv::onSigStableToUnSupport()
+{
+ mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
+ mAv.DisableVideoWithBlackColor();
+ mTvin.Tvin_StopDecoder();
+
+ tvin_info_t info = mSigDetectThread.getCurSigInfo();
+ TvEvent::SignalInfoEvent ev;
+ ev.mTrans_fmt = info.trans_fmt;
+ ev.mFmt = info.fmt;
+ ev.mStatus = info.status;
+ ev.mReserved = info.reserved;
+ sendTvEvent ( ev );
+ LOGD ( "%s, Enable blackscreen for signal change in StableToUnSupport!", __FUNCTION__ );
+}
+void CTv::onSigStableToNoSig()
+{
+ mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
+ mAv.DisableVideoWithBlueColor();
+ //SetAudioMuteForTv(CC_AUDIO_MUTE);
+ mTvin.Tvin_StopDecoder();
+
+ tvin_info_t info = mSigDetectThread.getCurSigInfo();
+ TvEvent::SignalInfoEvent ev;
+ ev.mTrans_fmt = info.trans_fmt;
+ ev.mFmt = info.fmt;
+ ev.mStatus = info.status;
+ ev.mReserved = info.reserved;
+ sendTvEvent ( ev );
+ LOGD ( "%s, Enable bluescreen for signal change in StableToNoSig!", __FUNCTION__);
+}
+void CTv::onSigUnStableToUnSupport()
+{
+ mAv.DisableVideoWithBlackColor();
+ mTvin.Tvin_StopDecoder();
+ tvin_info_t info = mSigDetectThread.getCurSigInfo();
+
+
+ TvEvent::SignalInfoEvent ev;
+ ev.mTrans_fmt = info.trans_fmt;
+ ev.mFmt = info.fmt;
+ ev.mStatus = info.status;
+ ev.mReserved = info.reserved;
+ sendTvEvent ( ev );
+ LOGD ( "%s, Enable blackscreen for signal change in UnStableToUnSupport!", __FUNCTION__);
+}
+void CTv::onSigUnStableToNoSig()
+{
+ mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
+ mAv.DisableVideoWithBlueColor();
+ //SetAudioMuteForTv(CC_AUDIO_MUTE);
+ mTvin.Tvin_StopDecoder();
+
+ tvin_info_t info = mSigDetectThread.getCurSigInfo();
+ TvEvent::SignalInfoEvent ev;
+ ev.mTrans_fmt = info.trans_fmt;
+ ev.mFmt = info.fmt;
+ ev.mStatus = info.status;
+ ev.mReserved = info.reserved;
+ sendTvEvent ( ev );
+ LOGD ( "%s, Enable bluescreen for signal change in UnStableToNoSig! status = %d", __FUNCTION__, ev.mStatus );
+}
+void CTv::onSigNullToNoSig()
+{
+ mTvAudio.SetAudioMuteForTv(CC_AUDIO_MUTE);
+ mAv.DisableVideoWithBlueColor();
+ //SetAudioMuteForTv(CC_AUDIO_MUTE);
+ mTvin.Tvin_StopDecoder();
+
+ tvin_info_t info = mSigDetectThread.getCurSigInfo();
+
+
+ TvEvent::SignalInfoEvent ev;
+ ev.mTrans_fmt = info.trans_fmt;
+ ev.mFmt = info.fmt;
+ ev.mStatus = info.status;
+ ev.mReserved = info.reserved;
+ sendTvEvent ( ev );
+ LOGD ( "%s, Enable bluescreen for signal change in NullToNoSig!", __FUNCTION__);
+}
+
+void CTv::onSigNoSigToUnstable()
+{
+ mAv.DisableVideoWithBlueColor();
+ LOGD("Enable bluescreen for signal change in NoSigToUnstable\n");
+}
+
+void CTv::onSigStillStable()
+{
+ if ( m_sig_stable_nums == 20) {
+ tvin_info_t info = mSigDetectThread.getCurSigInfo();
+ TvEvent::SignalInfoEvent ev;
+ ev.mTrans_fmt = info.trans_fmt;
+ ev.mFmt = info.fmt;
+ ev.mStatus = info.status;
+ ev.mReserved = info.reserved;
+ sendTvEvent ( ev );
+ }
+ if(m_sig_stable_nums == 2) {
+ int startdec_status = mTvin.Tvin_StartDecoder ( mSigDetectThread.getCurSigInfo() );
+ if ( startdec_status == 0 ) { //showboz codes from start decode fun
+ const char *value;
+ value = config_get_str ( "TV", "tvin.db.reg.en", "null" );
+ if ( strcmp ( value, "enable" ) == 0 ) {
+ usleep ( 20 * 1000 );
+ Tvin_SetPLLValues ();
+ usleep ( 20 * 1000 );
+ SetCVD2Values ();
+ }
+ }
+ }
+ if ( m_sig_stable_nums == 25 ) {
+ if(!(mTvAction & TV_ACTION_SCANNING))
+ mTvAudio.SetAudioMuteForTv ( CC_AUDIO_UNMUTE );
+ mAv.EnableVideoAuto();
+ }
+
+ m_sig_stable_nums++;
+}
+void CTv::onSigStillUnstable()
+{
+}
+void CTv::onSigStillNosig()
+{
+
+}
+void CTv::onSigStillNoSupport()
+{
+
+ tvin_info_t info = mSigDetectThread.getCurSigInfo();
+ TvEvent::SignalInfoEvent SigEv;
+ SigEv.mTrans_fmt = info.trans_fmt;
+ SigEv.mFmt = info.fmt;
+ SigEv.mStatus = info.status;
+ SigEv.mReserved = info.reserved;
+ sendTvEvent ( SigEv );
+ LOGD ( "%s, Unsupport signal", __FUNCTION__);
+}
+void CTv::onSigStillNull()
+{
+}
+void CTv::onStableSigFmtChange()
+{
+}
+void CTv::onStableTransFmtChange()
+{
+}
+void CTv::onSigDetectEnter()
+{
+ struct timeval time;
+ gettimeofday ( &time, NULL );
+}
+
+void CTv::onLoop()
+{
+ if ( ( m_is_hdmi_sr_detect_start == true )
+ && ( CTvin::Tvin_SourceInputToSourceInputType(m_source_input) == SOURCE_TYPE_HDMI ) ) {
+ int sr = mTvin.get_hdmi_sampling_rate();
+
+ if ( ( sr > 0 ) && ( sr != m_hdmi_sampling_rate ) ) {
+ if ( 0 == m_hdmi_sampling_rate ) {
+ LOGD ( "%s, Init HDMI audio, sampling rate:%d", __FUNCTION__, sr );
+ mTvAudio.AudioDataInit ( sr, false );
+ audio_sr = sr;
+ } else {
+ LOGD ( "%s, Reset HDMI sampling rate to %d", __FUNCTION__, sr );
+ mTvAudio.AudioChangeSampleRate ( sr );
+ }
+
+ m_hdmi_sampling_rate = sr;
+ }
+ }
+}
+
+void CTv::onSourceConnect(int source_type, int connect_status)
+{
+ TvEvent::SourceConnectEvent ev;
+ ev.mSourceInput = source_type;
+ ev.connectionState = connect_status;
+ sendTvEvent(ev);
+}
+
+int CTv::GetSourceConnectStatus(int source_input)
+{
+ return mSourceConnectDetectThread.GetSourceConnectStatus(source_input);
+}
+
+tv_source_input_t CTv::GetCurrentSourceInputLock ( void )
+{
+ Mutex::Autolock _l ( mLock );
+ return m_source_input;
+}
+
+//dtv and tvin
+tvin_info_t CTv::GetCurrentSignalInfo ( void )
+{
+ tvin_trans_fmt det_fmt = TVIN_TFMT_2D;
+ tvin_sig_status_t signalState = TVIN_SIG_STATUS_NULL;
+ tvin_info_t signal_info = mSigDetectThread.getCurSigInfo();
+
+ if ( (CTvin::Tvin_SourceInputToSourceInputType(m_source_input) == SOURCE_TYPE_DTV ) ) {
+ for ( int i = 0; i < 10; i++ ) {
+ det_fmt = mTvin.TvinApi_Get3DDectMode();
+ signal_info.status = TVIN_SIG_STATUS_STABLE;
+
+ if ( det_fmt != TVIN_TFMT_2D ) {
+ signal_info.trans_fmt = det_fmt;
+ break;
+ }
+ }
+ }
+ return signal_info;
+}
+
+int CTv::Tv_Set3DMode ( VIDEO_3D_MODE_T mode )
+{
+ if (mode == VIDEO_3D_MODE_AUTO) {
+ mTvin.VDIN_SetDI3DDetc (1);
+ } else {
+ mTvin.VDIN_SetDI3DDetc (0);
+ }
+
+ mAv.set3DMode(mode, 0, 0);
+ m_mode_3d = mode;
+ SSMSave3DMode ( ( unsigned char ) mode );
+ SetBypassModulesFor3D ( mode );
+ return 0;
+}
+
+VIDEO_3D_MODE_T CTv::Tv_Get3DMode ( void )
+{
+ return m_mode_3d;
+}
+
+int CTv::Tv_Set3DLRSwith ( int on_off)
+{
+ LOGW ( "%s,Set3D LRSwith on_off %d ,status %d !!! ", __FUNCTION__, on_off);
+ mAv.set3DMode(m_mode_3d, on_off, 0);
+ SSMSave3DLRSwitch(on_off);
+ return 0;
+}
+
+int CTv::Tv_Get3DLRSwith ( void )
+{
+ unsigned char val = 0;
+ SSMRead3DLRSwitch ( &val );
+ return ( int ) val;
+}
+
+int CTv::Tv_Set3DTo2DMode ( int mode)
+{
+ LOGW ( "%s,Set3D to 2D mode %d ,status %d !!! ", __FUNCTION__ , mode);
+ mAv.set3DMode(m_mode_3d, 0, mode);
+ SSMSave3DTO2D ( mode );
+ return 0;
+}
+
+int CTv::Tv_Get3DTo2DMode ( void )
+{
+ unsigned char val = 0;
+ SSMRead3DTO2D ( &val );
+ return val;
+}
+
+int CTv::Tv_Set3DDepth ( int value )
+{
+ mTvin.Tvin_SetDepthOf2Dto3D( value );
+ SSMSave3DDepth ( value );
+ return 0;
+}
+
+int CTv::GetSave3DDepth ( void )
+{
+ unsigned char val = 0;
+ SSMRead3DDepth ( &val );
+ return val;
+}
+
+is_3d_type_t CTv::Check2Dor3D ( VIDEO_3D_MODE_T mode3d, tvin_trans_fmt_t trans_fmt )
+{
+ if ( mode3d == VIDEO_3D_MODE_DISABLE ) {
+ return INDEX_2D;
+ } else if ( mode3d == VIDEO_3D_MODE_AUTO ) {
+ if ( trans_fmt == TVIN_TFMT_2D ) {
+ return INDEX_2D;
+ } else {
+ return INDEX_3D;
+ }
+ } else {
+ return INDEX_3D;
+ }
+}
+
+
+int CTv::Tvin_SetPLLValues ()
+{
+ tvin_sig_fmt_t sig_fmt = mSigDetectThread.getCurSigInfo().fmt;
+ tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceInput(m_source_input);
+ am_regs_t regs;
+
+ if ( mVpp.getPqData()->PQ_GetPLLParams ( source_port, sig_fmt, &regs ) == 0 ) {
+ LOGD ("%s,PQ_GetPLLParams(source_port[%d], sig_fmt[%d],&regs).\n", __FUNCTION__, source_port, sig_fmt );
+
+ if ( mTvin.TvinApi_LoadPLLValues ( regs ) < 0 ) {
+ LOGE ( "%s, TvinApi_LoadPLLValues failed!\n", __FUNCTION__ );
+ return -1;
+ }
+ } else {
+ LOGE ( "%s, PQ_GetPLLParams failed!\n", __FUNCTION__ );
+ return -1;
+ }
+
+ return 0;
+}
+int CTv::SetCVD2Values ()
+{
+ tvin_sig_fmt_t sig_fmt = mSigDetectThread.getCurSigInfo().fmt;
+ tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceInput(m_source_input);
+ am_regs_t regs;
+
+ if (mVpp.getPqData()->PQ_GetCVD2Params ( source_port, sig_fmt, &regs ) == 0) {
+ LOGD ( "%s, PQ_GetCVD2Params(source_port[%d], sig_fmt[%d],&regs).\n", __FUNCTION__,
+ source_port, sig_fmt );
+
+ if ( mTvin.TvinApi_LoadCVD2Values ( regs ) < 0 ) {
+ LOGE ( "%s, TvinApi_LoadCVD2Values failed!\n", __FUNCTION__);
+ return -1;
+ }
+ } else {
+ LOGE ( "%s, PQ_GetCVD2Params failed!\n", __FUNCTION__);
+ return -1;
+ }
+
+ return 0;
+}
+
+int CTv::SetPreviewWindow ( tvin_window_pos_t pos )
+{
+ m_win_pos.x1 = pos.x1;
+ m_win_pos.y1 = pos.y1;
+ m_win_pos.x2 = pos.x2;
+ m_win_pos.y2 = pos.y2;
+ LOGD ( "%s, SetPreviewWindow x = %d y=%d", __FUNCTION__, pos.x2, pos.y2 );
+
+ tvin_window_pos_t def_pos;
+ Vpp_GetDisplayResolutionInfo(&def_pos);
+
+ if (pos.x1 != 0 || pos.y1 != 0 || pos.x2 != def_pos.x2 || pos.y2 != def_pos.y2) {
+ m_win_mode = PREVIEW_WONDOW;
+ } else {
+ m_win_mode = NORMAL_WONDOW;
+ }
+
+ return mAv.setVideoAxis(m_win_pos.x1, m_win_pos.y1, m_win_pos.x2, m_win_pos.y2);;
+}
+
+/*********************** Audio start **********************/
+int CTv::SetAudioVolDigitLUTBuf ( tv_source_input_t source_input )
+{
+ if (source_input == SOURCE_TV) {
+ mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_TV, 1, 1, -1 );
+ } else if (source_input == SOURCE_AV1 || source_input == SOURCE_AV2) {
+ mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_AV, 1, 1, -1 );
+ } else if (source_input == SOURCE_YPBPR1 || source_input == SOURCE_YPBPR2) {
+ mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_COMP, 1, 1, -1 );
+ } else if (source_input == SOURCE_VGA) {
+ mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_VGA, 1, 1, -1 );
+ } else if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
+ mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_HDMI, 1, 1, -1 );
+ } else if ( source_input == SOURCE_MPEG ) {
+ mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_MPEG, 1, 1, -1 );
+ } else if ( source_input == SOURCE_DTV ) {
+ mTvAudio.AudioSetVolumeDigitLUTBuf ( CC_LUT_SEL_MPEG, 1, 1, -1 );
+ }
+ return 0;
+}
+
+void CTv::RefreshAudioMasterVolume ( tv_source_input_t source_input )
+{
+ if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
+ if ( GetAudioDVISupportEnable() == 1 ) {
+ if ( IsDVISignal() ) {
+ SetAudioVolDigitLUTBuf ( SOURCE_MPEG );
+ mTvAudio.SetAudioMasterVolume ( mTvAudio.GetAudioMasterVolume() );
+ return;
+ }
+ }
+ }
+
+ SetAudioVolDigitLUTBuf ( source_input );
+ mTvAudio.SetAudioMasterVolume ( mTvAudio.GetAudioMasterVolume() );
+}
+
+int CTv::Tv_SetAudioInSource (tv_source_input_t source_input)
+{
+ if (source_input == SOURCE_TV) {
+ if (mTvin.Tvin_GetAudioInSourceType(source_input) == TV_AUDIO_IN_SOURCE_TYPE_ATV) {
+ return mTvAudio.AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_ATV);
+ } else {
+ return mTvAudio.AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_LINEIN);
+ }
+ } else if (source_input == SOURCE_AV1 || source_input == SOURCE_AV2) {
+ return mTvAudio.AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_LINEIN);
+ } else if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
+ return mTvAudio.AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_HDMI);
+ } else if (source_input == SOURCE_YPBPR1 || source_input == SOURCE_YPBPR2 ||
+ source_input == SOURCE_TYPE_VGA) {
+ return mTvAudio.AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_LINEIN);
+ }
+
+ return 0;
+}
+
+int CTv::Tv_SetAudioSourceType (tv_source_input_t source_input)
+{
+ int audio_source = -1;
+
+ if (source_input == SOURCE_TV) {
+ audio_source = AUDIO_ATV_SOURCE;
+ } else if (source_input == SOURCE_AV1 || source_input == SOURCE_AV2) {
+ audio_source = AUDIO_AV_SOURCE;
+ } else if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
+ audio_source = AUDIO_HDMI_SOURCE;
+ } else if (source_input == SOURCE_YPBPR1 || source_input == SOURCE_YPBPR2 ||
+ source_input == SOURCE_TYPE_VGA) {
+ audio_source = AUDIO_AV_SOURCE;
+ } else if (source_input == SOURCE_DTV) {
+ audio_source = AUDIO_MPEG_SOURCE;
+ } else {
+ audio_source = AUDIO_MPEG_SOURCE;
+ }
+
+ return mTvAudio.AudioSetAudioSourceType(audio_source);
+}
+void CTv::Tv_SetAudioOutputSwap_Type (tv_source_input_t source_input)
+{
+ const char *config_value;
+ config_value = config_get_str("TV", "audio.output.swap.enable", "null");
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ int sw_status = 0;
+
+ LOGD("%s, audio.output.swap.enable\n", __FUNCTION__);
+
+ switch(source_input) {
+ case SOURCE_AV1:
+ config_value = config_get_str("TV", "audio.output.swap.av1", "null");
+ sw_status = atoi ( config_value );
+ mTvAudio.SetOutput_Swap(sw_status);
+ LOGD("%s, av1 %d\n", __FUNCTION__, sw_status);
+ break;
+ case SOURCE_AV2:
+ config_value = config_get_str("TV", "audio.output.swap.av2", "null");
+ sw_status = atoi ( config_value );
+ mTvAudio.SetOutput_Swap(sw_status);
+ LOGD("%s, av2 %d\n", __FUNCTION__, sw_status);
+ break;
+ case SOURCE_HDMI1:
+ config_value = config_get_str("TV", "audio.output.swap.hdmi1", "null");
+ sw_status = atoi ( config_value );
+ mTvAudio.SetOutput_Swap(sw_status);
+ LOGD("%s, hdmi1 %d\n", __FUNCTION__, sw_status);
+ break;
+ case SOURCE_HDMI2:
+ config_value = config_get_str("TV", "audio.output.swap.hdmi2", "null");
+ sw_status = atoi ( config_value );
+ mTvAudio.SetOutput_Swap(sw_status);
+ LOGD("%s, hdmi2 %d\n", __FUNCTION__, sw_status);
+ break;
+ case SOURCE_HDMI3:
+ config_value = config_get_str("TV", "audio.output.swap.hdmi3", "null");
+ sw_status = atoi ( config_value );
+ mTvAudio.SetOutput_Swap(sw_status);
+ LOGD("%s, hdmi3 %d\n", __FUNCTION__, sw_status);
+ break;
+ case SOURCE_TV:
+ config_value = config_get_str("TV", "audio.output.swap.tv", "null");
+ sw_status = atoi ( config_value );
+ mTvAudio.SetOutput_Swap(sw_status);
+ LOGD("%s, tv %d\n", __FUNCTION__, sw_status);
+ break;
+ case SOURCE_DTV:
+ config_value = config_get_str("TV", "audio.output.swap.dtv", "null");
+ sw_status = atoi ( config_value );
+ mTvAudio.SetOutput_Swap(sw_status);
+ LOGD("%s, dtv %d\n", __FUNCTION__, sw_status);
+ break;
+ case SOURCE_MPEG:
+ config_value = config_get_str("TV", "audio.output.swap.mpeg", "null");
+ sw_status = atoi ( config_value );
+ mTvAudio.SetOutput_Swap(sw_status);
+ LOGD("%s, mpeg %d\n", __FUNCTION__, sw_status);
+ break;
+ default:
+ mTvAudio.SetOutput_Swap(sw_status);
+ LOGD("%s, default %d\n", __FUNCTION__, sw_status);
+ break;
+ }
+ }
+
+}
+
+/*********************** Audio end **********************/
+
+unsigned int CTv::Vpp_GetDisplayResolutionInfo(tvin_window_pos_t *win_pos)
+{
+ int display_resolution = mAv.getVideoDisplayResolution();
+ unsigned int tmp_ret = 0;
+
+ switch(display_resolution) {
+ case VPP_DISPLAY_RESOLUTION_1366X768:
+ tmp_ret |= (CC_RESOLUTION_1366X768_W << 16);
+ tmp_ret |= (CC_RESOLUTION_1366X768_H << 0);
+ break;
+ case VPP_DISPLAY_RESOLUTION_1920X1080:
+ tmp_ret |= (CC_RESOLUTION_1920X1080_W << 16);
+ tmp_ret |= (CC_RESOLUTION_1920X1080_H << 0);
+ break;
+ case VPP_DISPLAY_RESOLUTION_3840X2160:
+ tmp_ret |= (CC_RESOLUTION_3840X2160_W << 16);
+ tmp_ret |= (CC_RESOLUTION_3840X2160_H << 0);
+ break;
+ default:
+ tmp_ret |= (CC_RESOLUTION_3840X2160_W << 16);
+ tmp_ret |= (CC_RESOLUTION_3840X2160_H << 0);
+ break;
+ }
+
+ if (win_pos != NULL) {
+ win_pos->x1 = 0;
+ win_pos->y1 = 0;
+ win_pos->x2 = ((tmp_ret >> 16) & 0xFFFF) - 1;
+ win_pos->y2 = ((tmp_ret >> 0) & 0xFFFF) - 1;
+ }
+
+ return 0;
+}
+
+
+int CTv::setBlackoutEnable(int enable)
+{
+ m_blackout_enable = enable;
+ return SSMSaveBlackoutEnable(enable);
+}
+
+int CTv::getSaveBlackoutEnable()
+{
+ int8_t enable;
+ SSMReadBlackoutEnable(&enable);
+ return enable;
+}
+void CTv::startAutoBackLight()
+{
+ mAutoBackLight.startAutoBacklight(CTvin::Tvin_SourceInputToSourceInputType(m_source_input));
+}
+
+void CTv::stopAutoBackLight()
+{
+ mAutoBackLight.stopAutoBacklight();
+}
+
+int CTv::getAutoBackLight_on_off()
+{
+ return mAutoBackLight.isAutoBacklightOn() ? 1 : 0;
+}
+/*********************** SSM start **********************/
+int CTv::Tv_SSMRestoreDefaultSetting()
+{
+ SSMRestoreDeviceMarkValues();
+ mTvAudio.AudioSSMRestoreDefaultSetting();
+ mVpp.VPPSSMRestoreDefault();
+ MiscSSMRestoreDefault();
+ ReservedSSMRestoreDefault();
+ SSMSaveCVBSStd ( 0 );
+ SSMSaveLastSelectSourceInput ( SOURCE_TV );
+ SSMSavePanelType ( 0 );
+ //tvconfig default
+ saveDTVProgramID ( -1 );
+ saveATVProgramID ( -1 );
+ return 0;
+}
+
+int CTv::clearDbAllProgramInfoTable()
+{
+ return CTvDatabase::GetTvDb()->clearDbAllProgramInfoTable();
+}
+
+int CTv::Tv_SSMFacRestoreDefaultSetting()
+{
+ mVpp.VPPSSMFacRestoreDefault();
+ mTvAudio.AudioSSMRestoreDefaultSetting();
+ MiscSSMFacRestoreDefault();
+
+ return 0;
+}
+/*********************** SSM End **********************/
+//not in CTv, not use lock
+void CTv::setSourceSwitchAndPlay()
+{
+ int progID = 0;
+ LOGD ( "%s\n", __FUNCTION__ );
+ static const int POWERON_SOURCE_TYPE_NONE = 0;//not play source
+ static const int POWERON_SOURCE_TYPE_LAST = 1;//play last save source
+ static const int POWERON_SOURCE_TYPE_SETTING = 2;//play ui set source
+ int to_play_source = -1;
+ int powerup_type = SSMReadPowerOnOffChannel();
+ LOGD("read power on source type = %d", powerup_type);
+ if(powerup_type == POWERON_SOURCE_TYPE_NONE) {
+ return ;
+ } else if(powerup_type == POWERON_SOURCE_TYPE_LAST) {
+ to_play_source = SSMReadSourceInput();
+ } else if(powerup_type == POWERON_SOURCE_TYPE_SETTING) {
+ to_play_source = SSMReadLastSelectSourceInput();
+ }
+ SetSourceSwitchInput (( tv_source_input_t ) to_play_source );
+ if ( to_play_source == SOURCE_TV ) {
+ progID = getATVProgramID();
+ } else if ( to_play_source == SOURCE_DTV ) {
+ progID = getDTVProgramID();
+ }
+ playProgramLock(progID);
+ return;
+}
+
+int CTv::startCC(int country, int src, int channel, int service)
+{
+ //turn_on_cc = true;
+ return mTvSub.sub_start_atsc_cc((enum cc_param_country)country, (enum cc_param_source_type)src, channel, (enum cc_param_caption_type)service);
+}
+
+int CTv::stopCC()
+{
+ //because cc,vchip data both come from vbi thread , here judge cc, vchip is whether both turn off
+ /*turn_on_cc = false;
+ if(config_get_int("TV","tv.vchip.enable", 0))
+ {
+ return 0; //at ATV if vchip is on, turn off CC, just set flag not display CC, but vchip still running
+ }*/
+ return mTvSub.sub_stop_atsc_cc();
+}
+
+void CTv::printDebugInfo()
+{
+ print_version_info();
+ LOGD("%s, TvAction = %x", __FUNCTION__, mTvAction);
+ LOGD("%s, TvRunStatus = %d", __FUNCTION__, mTvStatus);
+ LOGD("%s, TvCurSourceInput = %d", __FUNCTION__, m_source_input);
+ LOGD("%s, TvLastSourceInput = %d", __FUNCTION__, m_last_source_input);
+}
+//==============vchip end================================
+//----------------DVR API============================
+void CTv::SetRecordFileName ( char *name )
+{
+ char tmp[256];
+ strcpy ( tmp, name );
+ mTvRec.SetRecordFileName ( tmp );
+}
+void CTv::StartToRecord()
+{
+ int progID = getDTVProgramID();
+ mTvRec.StartRecord ( progID );
+}
+void CTv::StopRecording()
+{
+ mTvRec.StopRecord();
+}
+void CTv::SetRecCurTsOrCurProgram ( int sel )
+{
+ mTvRec.SetRecCurTsOrCurProgram ( sel );
+}
+
+int CTv::GetDisplayResolutionConfig()
+{
+ return mAv.getVideoDisplayResolution();
+}
+
+int CTv::GetDisplayResolutionInfo()
+{
+ return Vpp_GetDisplayResolutionInfo(NULL);
+}
+
+void CTv::onHDMIRxCECMessage(int msg_len, unsigned char msg_buf[])
+{
+ int i = 0;
+ TvEvent::HDMIRxCECEvent ev;
+ ev.mDataCount = msg_len;
+ for(i = 0; i < msg_len; i++) {
+ ev.mDataBuf[i] = msg_buf[i];
+ }
+ sendTvEvent(ev);
+}
+
+int CTv::SendHDMIRxCECCustomMessage(unsigned char data_buf[])
+{
+ tv_source_input_t source_input = m_source_input;
+
+ return mHDMIRxCEC.SendCustomMessage(source_input, data_buf);
+}
+
+int CTv::SendHDMIRxCECCustomMessageAndWaitReply(unsigned char data_buf[], unsigned char reply_buf[], int WaitCmd, int timeout)
+{
+ tv_source_input_t source_input = m_source_input;
+
+ return mHDMIRxCEC.SendCustomMessageAndWaitReply(source_input, data_buf, reply_buf, WaitCmd, timeout);
+}
+
+int CTv::SendHDMIRxCECBoradcastStandbyMessage(void)
+{
+ tv_source_input_t source_input = m_source_input;
+
+ return mHDMIRxCEC.SendBoradcastStandbyMessage(source_input);
+}
+
+int CTv::SendHDMIRxCECGiveCECVersionMessage(tv_source_input_t source_input, unsigned char data_buf[])
+{
+ if (mHDMIRxCEC.processRefreshSrcDevice(source_input) == 0) {
+ return mHDMIRxCEC.SendGiveCECVersionMessage(source_input, data_buf);
+ }
+
+ return -1;
+}
+
+int CTv::SendHDMIRxCECGiveDeviceVendorIDMessage(tv_source_input_t source_input, unsigned char data_buf[])
+{
+ if (mHDMIRxCEC.processRefreshSrcDevice(source_input) == 0) {
+ return mHDMIRxCEC.SendGiveDeviceVendorIDMessage(source_input, data_buf);
+ }
+
+ return -1;
+}
+
+int CTv::SendHDMIRxCECGiveOSDNameMessage(tv_source_input_t source_input, unsigned char data_buf[])
+{
+ if (mHDMIRxCEC.processRefreshSrcDevice(source_input) == 0) {
+ return mHDMIRxCEC.SendGiveOSDNameMessage(source_input, data_buf);
+ }
+
+ return -1;
+}
+
+int CTv::GetHdmiHdcpKeyKsvInfo(int data_buf[])
+{
+ return mTvin.get_hdmi_ksv_info(m_source_input, data_buf);
+}
+
+void CTv::onUpgradeStatus(int state, int param)
+{
+ TvEvent::UpgradeFBCEvent ev;
+ ev.mState = state;
+ ev.param = param;
+ sendTvEvent(ev);
+}
+
+int CTv::StartUpgradeFBC(char *file_name, int mode, int upgrade_blk_size)
+{
+ if (mpUpgradeFBC != NULL) {
+ mpUpgradeFBC->SetUpgradeFileName(file_name);
+ mpUpgradeFBC->SetUpgradeMode(mode);
+ mpUpgradeFBC->SetUpgradeBlockSize(upgrade_blk_size);
+ mpUpgradeFBC->start();
+ return 0;
+ }
+
+ return -1;
+}
+
+void CTv::onSerialCommunication(int dev_id, int rd_len, unsigned char data_buf[])
+{
+ int i = 0;
+ TvEvent::SerialCommunicationEvent ev;
+ ev.mDevId = dev_id;
+ ev.mDataCount = rd_len;
+ for(i = 0; i < rd_len; i++) {
+ ev.mDataBuf[i] = data_buf[i];
+ }
+ sendTvEvent(ev);
+}
+
+void CTv::onThermalDetect(int state)
+{
+ const char *value;
+ const char *value_normal;
+ const char *value_cold;
+ int threshold = 0, val = 0;
+ static int pre_val = -1;
+
+ value = config_get_str ( "TV", "tvin.thermal.threshold.enable", "null" );
+
+ if ( strcmp ( value, "enable" ) == 0 ) {
+
+ value = config_get_str ( "TV", "tvin.thermal.threshold.value", "null" );
+
+ threshold = atoi(value);
+ LOGD ( "%s, threshold value: %d\n", __FUNCTION__, threshold);
+
+ if(state > threshold) {
+ value_normal = config_get_str ( "TV", "tvin.thermal.fbc.normal.value", "null" );
+ val = atoi(value_normal);
+ if(val == 0) {
+ val = 0x4210000; //normal default
+ }
+ LOGD ( "%s, current temp: %d set 1\n", __FUNCTION__, state);
+ } else {
+ value_cold = config_get_str ( "TV", "tvin.thermal.fbc.cold.value", "null" );
+ val = atoi(value_cold);
+ if(val == 0) {
+ val = 0x8210000; //cold default
+ }
+ LOGD ( "%s, current temp: 0x%x set 0\n", __FUNCTION__, state);
+ }
+
+ if(pre_val == val) {
+ LOGD ( "%s, pre_val == val : 0x%x,bypass\n", __FUNCTION__, val);
+ } else {
+ pre_val = val;
+ Tv_FactorySet_FBC_Thermal_State(val);
+ LOGD ( "%s, pre_val :0x%x,bypass\n", __FUNCTION__, pre_val);
+ }
+ } else {
+ LOGD ( "%s, tvin.thermal.threshold.enable == disable\n", __FUNCTION__);
+ }
+}
+
+int CTv::SetSerialSwitch(int dev_id, int switch_val)
+{
+ int tmp_ret = 0;
+
+ if (dev_id == SERIAL_A) {
+ if (switch_val == 0) {
+ tmp_ret |= mSerialA.stop();
+ tmp_ret |= mSerialA.CloseModule();
+
+ tmp_ret |= system("start console");
+ } else {
+ tmp_ret |= system("stop console");
+
+ mSerialA.OpenModule(dev_id);
+ tmp_ret |= mSerialA.start();
+ }
+ } else if (dev_id == SERIAL_B) {
+ if (switch_val == 0) {
+ tmp_ret |= mSerialB.stop();
+ tmp_ret |= mSerialB.CloseModule();
+ } else {
+ mSerialB.OpenModule(dev_id);
+ tmp_ret = mSerialB.start();
+ }
+ } else if (dev_id == SERIAL_C) {
+ if (switch_val == 0) {
+ tmp_ret |= mSerialC.stop();
+ tmp_ret |= mSerialC.CloseModule();
+ } else {
+ mSerialC.OpenModule(dev_id);
+ tmp_ret = mSerialC.start();
+ }
+ }
+
+ return tmp_ret;
+}
+
+int CTv::SendSerialData(int dev_id, int data_len, unsigned char data_buf[])
+{
+ int tmp_ret = 0;
+
+ if (dev_id == SERIAL_A) {
+ tmp_ret = mSerialA.sendData(data_len, data_buf);
+ } else if (dev_id == SERIAL_B) {
+ tmp_ret = mSerialB.sendData(data_len, data_buf);
+ } else if (dev_id == SERIAL_C) {
+ tmp_ret = mSerialC.sendData(data_len, data_buf);
+ }
+
+ return tmp_ret;
+}
+
+int CTv::ChannelExport(const char *destPath)
+{
+ //DIR *dirptr = NULL;
+ //dirptr = opendir("/storage/external_storage/sda1/");
+ //if(NULL == dirptr) {
+ // LOGD("%s, please insert the udisk !",__FUNCTION__);
+ // return -2;
+ // } else {
+ char tmp[256];
+ FILE *fp = NULL;
+ if(destPath == NULL) {
+ destPath = "/storage/external_storage/sda1/";
+ }
+
+ //LOGD("%s, udisk exist !",__FUNCTION__);
+ sprintf(tmp, "cp /param/dtv.db %s", destPath);
+ if(system(tmp) >= 0) {
+ LOGD("%s, copy dtv.db from /param to udisk success !", __FUNCTION__);
+ system("sync");
+ fp = fopen(destPath, "r");
+ if (fp == NULL) {
+ return -1;
+ } else {
+ fclose(fp);
+ fp = NULL;
+ return 0;
+ }
+ } else {
+ return -1;
+ }
+ //}
+}
+
+int CTv::ChannelImport(const char *srcPath)
+{
+ if(srcPath == NULL) {
+ srcPath = "/storage/external_storage/sda1/dvb.db";
+ }
+
+ if(Tv_Utils_IsFileExist(srcPath) == 0) {
+ char tmp[256];
+ LOGD("%s, file exist !" , srcPath);
+ CTvDatabase::GetTvDb()->UnInitTvDb();
+ sprintf(tmp, "rm /param/dtv.db");
+ if(system(tmp) >= 0) {
+ LOGD("%s, rm /param/dtv.db success !", __FUNCTION__);
+ memset(tmp, 0, sizeof(tmp));
+ sprintf(tmp, "cp %s /param/dtv.db", srcPath);
+ if(system(tmp) >= 0) {
+ LOGD("%s, copy to /param/dtv.db success !", srcPath);
+ system("sync");
+ CTvDatabase::GetTvDb()->InitTvDb(TV_DB_PATH);
+ return 0;
+ } else {
+ LOGD("%s, copy dtv.db from udisk to /param failed !", __FUNCTION__);
+ return -1;
+ }
+ } else {
+ LOGD("%s, rm /param/dtv.db failed !", __FUNCTION__);
+ return -2;
+ }
+ } else {
+ LOGD("%s, dtv.db file does not exist in the udisk!" , srcPath);
+ return -2;
+ }
+
+}
+
+int CTv::Tv_GetProjectInfo(project_info_t *ptrInfo)
+{
+ return GetProjectInfo(ptrInfo);
+}
+
+int CTv::Tv_GetPlatformType()
+{
+ return GetPlatformHaveFBCFlag();
+}
+
+int CTv::Tv_SetDDDRCMode(tv_source_input_t source_input)
+{
+ if (source_input == SOURCE_DTV) {
+ if (GetPlatformHaveDDFlag() == 1) {
+ Tv_Utils_SetFileAttrStr("/sys/class/audiodsp/ac3_drc_control", "drcmode 3");
+ }
+ } else {
+ if (GetPlatformHaveDDFlag() == 1) {
+ Tv_Utils_SetFileAttrStr("/sys/class/audiodsp/ac3_drc_control", "drcmode 2");
+ }
+ }
+
+ return 0;
+}
+
+//PQ
+int CTv::Tv_SetBrightness ( int brightness, tv_source_input_type_t source_type, int is_save )
+{
+ return mVpp.Tv_SetBrightness(brightness, (tv_source_input_type_t)source_type, mSigDetectThread.getCurSigInfo().fmt, mSigDetectThread.getCurSigInfo().trans_fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), is_save);
+}
+
+int CTv::Tv_GetBrightness ( tv_source_input_type_t source_type )
+{
+ return mVpp.Tv_GetBrightness((tv_source_input_type_t)source_type);
+}
+
+int CTv::Tv_SetContrast ( int contrast, tv_source_input_type_t source_type, int is_save )
+{
+ return mVpp.Tv_SetContrast(contrast, (tv_source_input_type_t)source_type, mSigDetectThread.getCurSigInfo().fmt, mSigDetectThread.getCurSigInfo().trans_fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), is_save);
+}
+
+int CTv::Tv_GetContrast ( tv_source_input_type_t source_type )
+{
+ return mVpp.Tv_GetContrast((tv_source_input_type_t)source_type);
+}
+
+int CTv::Tv_SetSaturation ( int satuation, tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, int is_save )
+{
+ return mVpp.Tv_SetSaturation(satuation, (tv_source_input_type_t)source_type, (tvin_sig_fmt_t)fmt, mSigDetectThread.getCurSigInfo().trans_fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), is_save);
+}
+
+int CTv::Tv_GetSaturation ( tv_source_input_type_t source_type )
+{
+ return mVpp.Tv_GetSaturation((tv_source_input_type_t)source_type);
+}
+
+int CTv::Tv_SetHue ( int hue, tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, int is_save )
+{
+ return mVpp.Tv_SetHue(hue, (tv_source_input_type_t)source_type, (tvin_sig_fmt_t)fmt, mSigDetectThread.getCurSigInfo().trans_fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), is_save);
+}
+
+int CTv::Tv_GetHue ( tv_source_input_type_t source_type )
+{
+ return mVpp.Tv_GetHue((tv_source_input_type_t)source_type);
+}
+
+int CTv::Tv_SetPQMode ( vpp_picture_mode_t mode, tv_source_input_type_t source_type, int is_save )
+{
+ return mVpp.Tv_SetPQMode((vpp_picture_mode_t)mode, (tv_source_input_type_t)source_type, mSigDetectThread.getCurSigInfo().fmt, mSigDetectThread.getCurSigInfo().trans_fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), is_save);
+}
+
+vpp_picture_mode_t CTv::Tv_GetPQMode ( tv_source_input_type_t source_type )
+{
+ return mVpp.Tv_GetPQMode((tv_source_input_type_t)source_type);
+}
+
+int CTv::Tv_SetSharpness ( int value, tv_source_input_type_t source_type, int en, int is_save )
+{
+ return mVpp.Tv_SetSharpness(value, (tv_source_input_type_t)source_type, en, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), mSigDetectThread.getCurSigInfo().fmt, mSigDetectThread.getCurSigInfo().trans_fmt, is_save);
+}
+
+int CTv::Tv_GetSharpness ( tv_source_input_type_t source_type )
+{
+ return mVpp.Tv_GetSharpness((tv_source_input_type_t)source_type);
+}
+
+int CTv::Tv_SaveSharpness ( int value, tv_source_input_type_t source_type, int en )
+{
+ if ( en == 1 ) {
+ return SSMSaveSharpness( (tv_source_input_type_t)source_type, value );
+ } else {
+ return 0;
+ }
+}
+
+int CTv::Tv_SetBacklight ( int value, tv_source_input_type_t source_type, int is_save )
+{
+ return mVpp.Tv_SetBacklight(value, (tv_source_input_type_t)source_type, is_save);
+}
+
+int CTv::Tv_GetBacklight ( tv_source_input_type_t source_type )
+{
+ return mVpp.Tv_GetBacklight((tv_source_input_type_t)source_type);
+}
+
+int CTv::Tv_SetColorTemperature ( vpp_color_temperature_mode_t mode, tv_source_input_type_t source_type, int is_save )
+{
+ return mVpp.Tv_SetColorTemperature((vpp_color_temperature_mode_t)mode, (tv_source_input_type_t)source_type, is_save);
+}
+
+vpp_color_temperature_mode_t CTv::Tv_GetColorTemperature ( tv_source_input_type_t source_type )
+{
+ return mVpp.Tv_GetColorTemperature((tv_source_input_type_t)source_type);
+}
+
+int CTv::Tv_SaveColorTemp ( vpp_color_temperature_mode_t mode, tv_source_input_type_t source_type )
+{
+ return mVpp.Tv_SaveColorTemp((vpp_color_temperature_mode_t)mode, (tv_source_input_type_t)source_type);
+}
+
+int CTv::Tv_SetDisplayMode ( vpp_display_mode_t mode, tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, int is_save )
+{
+ int ret = Vpp_SetDisplayMode((vpp_display_mode_t)mode, (tv_source_input_type_t)source_type, (tvin_sig_fmt_t)fmt);
+ if(ret == 0) {
+ if(is_save == 1) {
+ ret = ret | SSMSaveDisplayMode ( source_type, (int)mode );
+ }
+ }
+ return ret;
+}
+
+int CTv::Vpp_SetDisplayMode ( vpp_display_mode_t display_mode, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt )
+{
+ LOGD("%s, display_mode = %d, source_type = %d. \n", __FUNCTION__, display_mode, source_type);
+
+ tvin_cutwin_t cutwin = mVpp.Tv_GetOverscan ( source_type, sig_fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), mSigDetectThread.getCurSigInfo().trans_fmt);
+ int video_screen_mode = CAv::VIDEO_WIDEOPTION_16_9;
+ tvin_window_pos_t win_pos;
+ int display_resolution = Vpp_GetDisplayResolutionInfo(&win_pos);
+
+
+ if ( source_type == SOURCE_TYPE_HDMI ) {
+ if ( sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_60HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_60HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_50HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_A
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_B
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_24HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_25HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_30HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_100HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_120HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_100HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_120HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_FRAME_PACKING
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_FRAME_PACKING
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_30HZ_FRAME_PACKING
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_60HZ_ALTERNATIVE
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_ALTERNATIVE
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_ALTERNATIVE
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_30HZ_ALTERNATIVE
+ || sig_fmt == TVIN_SIG_FMT_HDMI_3840_2160_00HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_4096_2160_00HZ
+
+ ) {
+ if ( display_mode == VPP_DISPLAY_MODE_NOSCALEUP ) {
+ cutwin.vs = 0;
+ cutwin.hs = 1;
+ cutwin.ve = 0;
+ cutwin.he = 1;
+ }
+ }
+ }
+
+ switch ( display_mode ) {
+ case VPP_DISPLAY_MODE_169:
+ video_screen_mode = CAv::VIDEO_WIDEOPTION_16_9;
+ break;
+ case VPP_DISPLAY_MODE_MODE43:
+ video_screen_mode = CAv::VIDEO_WIDEOPTION_4_3;
+ break;
+ case VPP_DISPLAY_MODE_NORMAL:
+ video_screen_mode = CAv::VIDEO_WIDEOPTION_NORMAL;
+ break;
+ case VPP_DISPLAY_MODE_FULL:
+ break;
+ case VPP_DISPLAY_MODE_NOSCALEUP: {
+ if ( source_type == SOURCE_TYPE_HDMI ) {
+ int retValue = GetFileAttrIntValue ( "/sys/module/tvin_hdmirx/parameters/cur_colorspace" );
+ switch ( retValue ) {
+ case RGB_FORMAT:
+ mVpp.Tv_SetColorSpaceMode ( VPP_COLOR_SPACE_RGB );
+ cutwin.vs = 0;
+ cutwin.hs = 0;
+ cutwin.ve = 0;
+ cutwin.he = 0;
+ break;
+
+ default:
+ mVpp.Tv_SetColorSpaceMode ( VPP_COLOR_SPACE_YUV );
+ break;
+ }
+ } else {
+ video_screen_mode = CAv::VIDEO_WIDEOPTION_NORMAL_NOSCALEUP;
+ }
+ break;
+ }
+ case VPP_DISPLAY_MODE_FULL_REAL:
+ video_screen_mode = CAv::VIDEO_WIDEOPTION_16_9; //added for N360 by haifeng.liu
+ break;
+ case VPP_DISPLAY_MODE_PERSON:
+ if ( display_resolution == VPP_DISPLAY_RESOLUTION_1366X768 ) {
+ win_pos.y1 = -45;
+ win_pos.y2 = win_pos.y2 - win_pos.y1;
+ } else {
+ win_pos.y1 = -65;
+ win_pos.y2 = win_pos.y2 - win_pos.y1;
+ }
+ video_screen_mode = CAv::VIDEO_WIDEOPTION_FULL_STRETCH;
+ break;
+ case VPP_DISPLAY_MODE_MOVIE:
+ if ( display_resolution == VPP_DISPLAY_RESOLUTION_1366X768 ) {
+ win_pos.y1 = -61;
+ win_pos.y2 = win_pos.y2 - win_pos.y1;
+ } else {
+ win_pos.y1 = -86;
+ win_pos.y2 = win_pos.y2 - win_pos.y1;
+ }
+ video_screen_mode = CAv::VIDEO_WIDEOPTION_FULL_STRETCH;
+ break;
+ case VPP_DISPLAY_MODE_CAPTION:
+ if (display_resolution == VPP_DISPLAY_RESOLUTION_1366X768 ) {
+ win_pos.y1 = -61;
+ win_pos.y2 = win_pos.y2 + 2;
+ } else {
+ win_pos.y1 = -86;
+ win_pos.y2 = win_pos.y2 + 4;
+ }
+ video_screen_mode = CAv::VIDEO_WIDEOPTION_FULL_STRETCH;
+ break;
+ case VPP_DISPLAY_MODE_ZOOM:
+ if (display_resolution == VPP_DISPLAY_RESOLUTION_1366X768 ) {
+ win_pos.y1 = -128;
+ win_pos.y2 = win_pos.y2 - win_pos.y1;
+ } else {
+ win_pos.y1 = -180;
+ win_pos.y2 = win_pos.y2 - win_pos.y1;
+ }
+ video_screen_mode = CAv::VIDEO_WIDEOPTION_FULL_STRETCH;
+ break;
+ default:
+ break;
+ }
+
+ if ( display_mode == VPP_DISPLAY_MODE_FULL ) {
+ if ( source_type == SOURCE_TYPE_HDMI ) {
+ if ( sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_60HZ
+ //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_60HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_50HZ
+ //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_A
+ //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_B
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_24HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_25HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_30HZ
+ //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_100HZ
+ //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_120HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_100HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_120HZ
+ //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_FRAME_PACKING
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_FRAME_PACKING
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_30HZ_FRAME_PACKING
+ //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_60HZ_ALTERNATIVE
+ //|| sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_ALTERNATIVE
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_ALTERNATIVE
+ || sig_fmt == TVIN_SIG_FMT_HDMI_1920X1080P_30HZ_ALTERNATIVE
+ || sig_fmt == TVIN_SIG_FMT_HDMI_3840_2160_00HZ
+ || sig_fmt == TVIN_SIG_FMT_HDMI_4096_2160_00HZ ) {
+ const char *config_value = config_get_str ( "TV", "vpp.hdmi.nonlinear.scaling", "null" );
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ video_screen_mode = CAv::VIDEO_WIDEOPTION_NONLINEAR;
+ mVpp.VPP_SetNonLinearFactor ( 20 );
+ }
+ } else {
+ video_screen_mode = CAv::VIDEO_WIDEOPTION_NONLINEAR;
+ mVpp.VPP_SetNonLinearFactor ( 20 );
+ }
+ cutwin.vs = 0;
+ cutwin.hs = 1;
+ cutwin.ve = 0;
+ cutwin.he = 1;
+ }
+ }
+
+ if ( m_mode_3d == VIDEO_3D_MODE_DISABLE ) {
+ if(display_mode == VPP_DISPLAY_MODE_FULL_REAL && source_type == SOURCE_TYPE_HDMI) {
+ //added for N360 by haifeng.liu
+ cutwin.vs = 0;
+ cutwin.hs = 0;
+ cutwin.ve = 0;
+ cutwin.he = 0;
+ }
+ } else {
+ cutwin.vs = 0;
+ cutwin.hs = 0;
+ cutwin.ve = 0;
+ cutwin.he = 0;
+ video_screen_mode = CAv::VIDEO_WIDEOPTION_FULL_STRETCH;
+ }
+
+ mAv.setVideoAxis ( win_pos.x1, win_pos.y1, win_pos.x2, win_pos.y2 );
+ mAv.setVideoScreenMode(video_screen_mode);
+ mVpp.VPP_SetVideoCrop(cutwin.vs, cutwin.hs, cutwin.ve, cutwin.he);
+ return 0;
+}
+
+vpp_display_mode_t CTv::Tv_GetDisplayMode ( tv_source_input_type_t source_type )
+{
+ return mVpp.Tv_GetDisplayMode((tv_source_input_type_t)source_type);
+}
+
+int CTv::Tv_SaveDisplayMode ( vpp_display_mode_t mode, tv_source_input_type_t source_type )
+{
+ return SSMSaveDisplayMode ( source_type, (int)mode );
+}
+
+int CTv::Tv_SetNoiseReductionMode ( vpp_noise_reduction_mode_t mode, tv_source_input_type_t source_type, int is_save )
+{
+ return mVpp.Tv_SetNoiseReductionMode((vpp_noise_reduction_mode_t)mode, (tv_source_input_type_t)source_type, mSigDetectThread.getCurSigInfo().fmt, Check2Dor3D(m_mode_3d, mSigDetectThread.getCurSigInfo().trans_fmt ), mSigDetectThread.getCurSigInfo().trans_fmt, is_save);
+}
+
+vpp_noise_reduction_mode_t CTv::Tv_GetNoiseReductionMode ( tv_source_input_type_t source_type )
+{
+ return mVpp.Tv_GetNoiseReductionMode((tv_source_input_type_t)source_type);
+}
+
+int CTv::Tv_SaveNoiseReductionMode ( vpp_noise_reduction_mode_t mode, tv_source_input_type_t source_type )
+{
+ return mVpp.Tv_SaveNoiseReductionMode((vpp_noise_reduction_mode_t)mode, (tv_source_input_type_t)source_type);
+}
+
+int CTv::Tv_SetRGBOGO_PostOffset(int type, int offset)
+{
+ return mVpp.Tv_SetRGBOGO_PostOffset(type, offset);
+}
+
+int CTv::Tv_SetRGBOGO_Gain(int type, int mode)
+{
+ return mVpp.Tv_SetRGBOGO_Gain(type, mode);
+}
+
+int CTv::Tv_GetRGBOGO_PostOffset ( int type )
+{
+ return mVpp.Tv_GetRGBOGO_PostOffset(type);
+}
+
+int CTv::Tv_GetRGBOGO_Gain ( int type )
+{
+ return mVpp.Tv_GetRGBOGO_Gain(type);
+}
+
+int CTv::Tv_FactorySetPQMode_Brightness ( int source_type, int pq_mode, int brightness )
+{
+ return mVpp.Tv_FactorySetPQMode_Brightness(source_type, pq_mode, brightness);
+}
+
+int CTv::Tv_FactoryGetPQMode_Brightness ( int source_type, int pq_mode )
+{
+ return mVpp.Tv_FactoryGetPQMode_Brightness(source_type, pq_mode);
+}
+
+int CTv::Tv_FactorySetPQMode_Contrast ( int source_type, int pq_mode, int contrast )
+{
+ return mVpp.Tv_FactorySetPQMode_Contrast(source_type, pq_mode, contrast);
+}
+
+int CTv::Tv_FactoryGetPQMode_Contrast ( int source_type, int pq_mode )
+{
+ return mVpp.Tv_FactoryGetPQMode_Contrast(source_type, pq_mode);
+}
+
+int CTv::Tv_FactorySetPQMode_Saturation ( int source_type, int pq_mode, int saturation )
+{
+ return mVpp.Tv_FactorySetPQMode_Saturation(source_type, pq_mode, saturation);
+}
+
+int CTv::Tv_FactoryGetPQMode_Saturation ( int source_type, int pq_mode )
+{
+ return mVpp.Tv_FactoryGetPQMode_Saturation(source_type, pq_mode);
+}
+
+int CTv::Tv_FactorySetPQMode_Hue ( int source_type, int pq_mode, int hue )
+{
+ return mVpp.Tv_FactorySetPQMode_Hue(source_type, pq_mode, hue);
+}
+
+int CTv::Tv_FactoryGetPQMode_Hue ( int source_type, int pq_mode )
+{
+ return mVpp.Tv_FactoryGetPQMode_Hue(source_type, pq_mode);
+}
+
+int CTv::Tv_FactorySetPQMode_Sharpness ( int source_type, int pq_mode, int sharpness )
+{
+ return mVpp.Tv_FactorySetPQMode_Sharpness(source_type, pq_mode, sharpness);
+}
+
+int CTv::Tv_FactoryGetPQMode_Sharpness ( int source_type, int pq_mode )
+{
+ return mVpp.Tv_FactoryGetPQMode_Sharpness(source_type, pq_mode);
+}
+
+int CTv::Tv_FactorySetColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain )
+{
+ return mVpp.Tv_FactorySetColorTemp_Rgain(source_type, colortemp_mode, rgain);
+}
+
+int CTv::Tv_FactorySaveColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain )
+{
+ return mVpp.Tv_FactorySaveColorTemp_Rgain(source_type, colortemp_mode, rgain);
+}
+
+int CTv::Tv_FactoryGetColorTemp_Rgain ( int source_type, int colortemp_mode )
+{
+ return mVpp.Tv_FactoryGetColorTemp_Rgain(source_type, colortemp_mode);
+}
+
+int CTv::Tv_FactorySetColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain )
+{
+ return mVpp.Tv_FactorySetColorTemp_Ggain(source_type, colortemp_mode, ggain);
+}
+
+int CTv::Tv_FactorySaveColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain )
+{
+ return mVpp.Tv_FactorySaveColorTemp_Ggain(source_type, colortemp_mode, ggain);
+}
+
+int CTv::Tv_FactoryGetColorTemp_Ggain ( int source_type, int colortemp_mode )
+{
+ return mVpp.Tv_FactoryGetColorTemp_Ggain(source_type, colortemp_mode);
+}
+
+int CTv::Tv_FactorySetColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain )
+{
+ return mVpp.Tv_FactorySetColorTemp_Bgain(source_type, colortemp_mode, bgain);
+}
+
+int CTv::Tv_FactorySaveColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain )
+{
+ return mVpp.Tv_FactorySaveColorTemp_Bgain(source_type, colortemp_mode, bgain);
+}
+
+int CTv::Tv_FactoryGetColorTemp_Bgain ( int source_type, int colortemp_mode )
+{
+ return mVpp.Tv_FactoryGetColorTemp_Bgain(source_type, colortemp_mode);
+}
+
+int CTv::Tv_FactorySetColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset )
+{
+ return mVpp.Tv_FactorySetColorTemp_Roffset(source_type, colortemp_mode, roffset);
+}
+
+int CTv::Tv_FactorySaveColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset )
+{
+ return mVpp.Tv_FactorySaveColorTemp_Roffset(source_type, colortemp_mode, roffset);
+}
+
+int CTv::Tv_FactoryGetColorTemp_Roffset ( int source_type, int colortemp_mode )
+{
+ return mVpp.Tv_FactoryGetColorTemp_Roffset(source_type, colortemp_mode);
+}
+
+int CTv::Tv_FactorySetColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset )
+{
+ return mVpp.Tv_FactorySetColorTemp_Goffset(source_type, colortemp_mode, goffset);
+}
+
+int CTv::Tv_FactorySaveColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset )
+{
+ return mVpp.Tv_FactorySaveColorTemp_Goffset(source_type, colortemp_mode, goffset);
+}
+
+int CTv::Tv_FactoryGetColorTemp_Goffset ( int source_type, int colortemp_mode )
+{
+ return mVpp.Tv_FactoryGetColorTemp_Goffset(source_type, colortemp_mode);
+}
+
+int CTv::Tv_FactorySetColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset )
+{
+ return mVpp.Tv_FactorySetColorTemp_Boffset(source_type, colortemp_mode, boffset);
+}
+
+int CTv::Tv_FactorySaveColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset )
+{
+ return mVpp.Tv_FactorySaveColorTemp_Boffset(source_type, colortemp_mode, boffset);
+}
+
+int CTv::Tv_FactoryGetColorTemp_Boffset ( int source_type, int colortemp_mode )
+{
+ return mVpp.Tv_FactoryGetColorTemp_Boffset(source_type, colortemp_mode);
+}
+
+int CTv::GetColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params )
+{
+ return mVpp.GetColorTemperatureParams(Tempmode, params);
+}
+
+int CTv::Tv_FactorySetTestPattern ( int pattern )
+{
+ switch ( pattern ) {
+ case VPP_TEST_PATTERN_NONE:
+ mAv.SetVideoScreenColor ( 3, 16, 128, 128 );
+ break;
+
+ case VPP_TEST_PATTERN_RED:
+ mAv.SetVideoScreenColor ( 0, 81, 90, 240 );
+ break;
+
+ case VPP_TEST_PATTERN_GREEN:
+ mAv.SetVideoScreenColor ( 0, 145, 54, 34 );
+ break;
+
+ case VPP_TEST_PATTERN_BLUE:
+ mAv.SetVideoScreenColor ( 0, 41, 240, 110 );
+ break;
+
+ case VPP_TEST_PATTERN_WHITE:
+ mAv.SetVideoScreenColor ( 0, 235, 128, 128 );
+ break;
+
+ case VPP_TEST_PATTERN_BLACK:
+ mAv.SetVideoScreenColor ( 0, 16, 128, 128 );
+ break;
+
+ default:
+ return -1;
+ }
+ return SSMSaveTestPattern ( pattern );
+}
+
+int CTv::Tv_FactoryGetTestPattern ( void )
+{
+ return mVpp.Tv_FactoryGetTestPattern();
+}
+
+int CTv::Tv_FactoryResetPQMode ( void )
+{
+ return mVpp.Tv_FactoryResetPQMode();
+}
+
+int CTv::Tv_FactoryResetColorTemp ( void )
+{
+ return mVpp.Tv_FactoryResetColorTemp();
+}
+
+int CTv::Tv_FactorySetParamsDefault ( void )
+{
+ return mVpp.Tv_FactorySetParamsDefault();
+}
+
+int CTv::Tv_FactorySetDDRSSC ( int step )
+{
+ return mVpp.Tv_FactorySetDDRSSC(step);
+}
+
+int CTv::Tv_FactoryGetDDRSSC ( void )
+{
+ return mVpp.Tv_FactoryGetDDRSSC();
+}
+
+int CTv::Tv_FactorySetLVDSSSC ( int step )
+{
+ return mVpp.Tv_FactorySetLVDSSSC(step);
+}
+
+int CTv::Tv_FactoryGetLVDSSSC ( void )
+{
+ return mVpp.Tv_FactoryGetLVDSSSC();
+}
+
+int CTv::Tv_FactorySetNolineParams ( int noline_params_type, int source_type, noline_params_t noline_params )
+{
+ return mVpp.Tv_FactorySetNolineParams(noline_params_type, source_type, noline_params);
+}
+
+noline_params_t CTv::Tv_FactoryGetNolineParams ( int noline_params_type, int source_type )
+{
+ return mVpp.Tv_FactoryGetNolineParams(noline_params_type, source_type);
+}
+
+int CTv::Tv_FactorySetOverscan ( int source_type, int fmt, int status_3d, int trans_fmt, tvin_cutwin_t cutwin_t )
+{
+ //tvin_cutwin_t cutwin_t = mVpp.Tv_FactoryGetOverscan(source_type, fmt, status_3d, trans_fmt);
+ return mVpp.VPP_SetVideoCrop ( ( int ) cutwin_t.vs, ( int ) cutwin_t.hs, ( int ) cutwin_t.ve, ( int ) cutwin_t.he );
+}
+
+tvin_cutwin_t CTv::Tv_FactoryGetOverscan ( int source_type, int fmt, int status_3d, int trans_fmt )
+{
+ return mVpp.Tv_FactoryGetOverscan(source_type, fmt, Check2Dor3D(m_mode_3d, (tvin_trans_fmt_t)trans_fmt), trans_fmt);
+}
+
+int CTv::Tv_FactorySet_FBC_Brightness ( int value )
+{
+ //int temp_value = (255*value)/100;
+ int temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Brightness(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Brightness ( void )
+{
+ int temp_value = 0;
+ int data = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Brightness(COMM_DEV_SERIAL, &temp_value);
+ //data = (temp_value*100)/255;
+ data = temp_value;
+
+ return data;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_Contrast ( int value )
+{
+ //int temp_value = (255*value)/100;
+ int temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Contrast(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Contrast ( void )
+{
+ int temp_value = 0;
+ int data = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Contrast(COMM_DEV_SERIAL, &temp_value);
+ //data = (temp_value*100)/255;
+ data = temp_value;
+
+ return data;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_Saturation ( int value )
+{
+ //int temp_value = (255*value)/100;
+ int temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Saturation(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Saturation ( void )
+{
+ int temp_value = 0;
+ int data = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Saturation(COMM_DEV_SERIAL, &temp_value);
+ //data = (temp_value*100)/255;
+ data = temp_value;
+
+ return data;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_HueColorTint ( int value )
+{
+ //int temp_value = (255*value)/100;
+ int temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_HueColorTint(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_HueColorTint ( void )
+{
+ int temp_value = 0;
+ int data = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_HueColorTint(COMM_DEV_SERIAL, &temp_value);
+ //data = (temp_value*100)/255;
+ data = temp_value;
+
+ return data;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_Backlight ( int value )
+{
+ int temp_value = value;
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Backlight(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Backlight ( void )
+{
+ int temp_value = 0;
+ int data = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Backlight(COMM_DEV_SERIAL, &temp_value);
+ data = temp_value;
+
+ return data;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_Backlight_N360 ( int value )
+{
+ int val = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_AUTO_ELEC_MODE(COMM_DEV_SERIAL, value);
+ val = value;
+ SSMSaveFBCN360BackLightVal(val);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Backlight_N360 ( void )
+{
+ int temp_value = 0;
+ int val = 0;
+
+ SSMReadFBCN360BackLightVal(&val);
+
+ return val;
+
+}
+
+
+int CTv::Tv_FactorySet_FBC_ELEC_MODE( int value )
+{
+ int val = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_AUTO_ELEC_MODE(COMM_DEV_SERIAL, value);
+ val = value;
+ SSMSaveFBCELECmodeVal(val);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_ELEC_MODE( void )
+{
+ int val = 0;
+
+ SSMReadFBCELECmodeVal(&val);
+
+ return val;
+}
+
+int CTv::Tv_FactorySet_FBC_Thermal_State( int value )
+{
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Thermal_state(COMM_DEV_SERIAL, value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactorySet_FBC_Picture_Mode ( int mode )
+{
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Picture_Mode(COMM_DEV_SERIAL, mode);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Picture_Mode ( void )
+{
+ int mode = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Picture_Mode(COMM_DEV_SERIAL, &mode);
+ return mode;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_Set_Test_Pattern ( int mode )
+{
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Test_Pattern(COMM_DEV_SERIAL, mode);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Get_Test_Pattern ( void )
+{
+ int mode = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Test_Pattern(COMM_DEV_SERIAL, &mode);
+ return mode;
+ }
+
+ return 0;
+}
+
+
+int CTv::Tv_FactorySet_FBC_Gain_Red( int value )
+{
+ int temp_value = 0;
+
+ //temp_value = (value*255)/2047;
+ //value 0 ~ 2047
+ temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Gain_Red(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Gain_Red ( void )
+{
+ int temp_value = 0, value = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Gain_Red(COMM_DEV_SERIAL, &temp_value);
+ //value 0 ~ 2047
+ //value = (temp_value*2047)/255;
+ value = temp_value;
+
+ return value;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_Gain_Green( int value )
+{
+ int temp_value = 0;
+
+ //temp_value = (value*255)/2047;
+ //value 0 ~ 2047
+ temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Gain_Green(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Gain_Green ( void )
+{
+ int temp_value = 0, value = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Gain_Green(COMM_DEV_SERIAL, &temp_value);
+ //value 0 ~ 2047
+ //value = (temp_value*2047)/255;
+ value = temp_value;
+
+ return value;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_Gain_Blue( int value )
+{
+ int temp_value = 0;
+
+ //temp_value = (value*255)/2047;
+ //value 0 ~ 2047
+ temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Gain_Blue(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Gain_Blue ( void )
+{
+ int temp_value = 0, value = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Gain_Blue(COMM_DEV_SERIAL, &temp_value);
+ //value 0 ~ 2047
+ //value = (temp_value*2047)/255;
+ value = temp_value;
+
+ return value;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_Offset_Red( int value )
+{
+ //value -1024~+1023
+ int temp_value = 0;
+
+ //temp_value = (value+1024)*255/2047;
+ temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Offset_Red(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Offset_Red ( void )
+{
+ int temp_value = 0, value = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Offset_Red(COMM_DEV_SERIAL, &temp_value);
+ //value -1024~+1023
+ //value = (temp_value*2047)/255 - 1024;
+ value = temp_value;
+
+ return value;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_Offset_Green( int value )
+{
+ //value -1024~+1023
+ int temp_value = 0;
+
+ //temp_value = (value+1024)*255/2047;
+ temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Offset_Green(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Offset_Green ( void )
+{
+ int temp_value = 0, value = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Offset_Green(COMM_DEV_SERIAL, &temp_value);
+ //value -1024~+1023
+ //value = (temp_value*2047)/255 - 1024;
+ value = temp_value;
+
+ return value;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_Offset_Blue( int value )
+{
+ //value -1024~+1023
+ int temp_value = 0;
+
+ //temp_value = (value+1024)*255/2047;
+ temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Offset_Blue(COMM_DEV_SERIAL, value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Offset_Blue ( void )
+{
+ int temp_value = 0, value = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Offset_Blue(COMM_DEV_SERIAL, &temp_value);
+ //value -1024~+1023
+ //value = (temp_value*2047)/255 - 1024;
+ value = temp_value;
+
+ return value;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactoryGetWhiteBalanceRedGain(int source_type, int colortemp_mode)
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ LOGD("--------- call none fbc method ---------");
+ ret = mVpp.Tv_FactoryGetColorTemp_Rgain(source_type, colortemp_mode);
+ } else { //use fbc store the white balance params
+ LOGD("--------- call fbc method ---------");
+ colortemp_mode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
+ ret = Tv_FactoryGetItemFromBatch((vpp_color_temperature_mode_t)colortemp_mode, 0);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactoryGetWhiteBalanceGreenGain(int source_type, int colortemp_mode)
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_FactoryGetColorTemp_Ggain(source_type, colortemp_mode);
+ } else { //use fbc store the white balance params
+ colortemp_mode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
+ ret = Tv_FactoryGetItemFromBatch((vpp_color_temperature_mode_t)colortemp_mode, 1);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactoryGetWhiteBalanceBlueGain(int source_type, int colortemp_mode)
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_FactoryGetColorTemp_Bgain(source_type, colortemp_mode);
+ } else { //use fbc store the white balance params
+ colortemp_mode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
+ ret = Tv_FactoryGetItemFromBatch((vpp_color_temperature_mode_t)colortemp_mode, 2);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactoryGetWhiteBalanceRedOffset(int source_type, int colortemp_mode)
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_FactoryGetColorTemp_Roffset(source_type, colortemp_mode);
+ } else { //use fbc store the white balance params
+ colortemp_mode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
+ ret = Tv_FactoryGetItemFromBatch((vpp_color_temperature_mode_t)colortemp_mode, 3);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactoryGetWhiteBalanceGreenOffset(int source_type, int colortemp_mode)
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_FactoryGetColorTemp_Goffset(source_type, colortemp_mode);
+ } else { //use fbc store the white balance params
+ colortemp_mode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
+ ret = Tv_FactoryGetItemFromBatch((vpp_color_temperature_mode_t)colortemp_mode, 4);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactoryGetWhiteBalanceBlueOffset(int source_type, int colortemp_mode)
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_FactoryGetColorTemp_Boffset(source_type, colortemp_mode);
+ } else { //use fbc store the white balance params
+ colortemp_mode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
+ ret = Tv_FactoryGetItemFromBatch((vpp_color_temperature_mode_t)colortemp_mode, 5);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactorySetWhiteBalanceRedGain(int source_type, int colortemp_mode, int value)
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (value < 0) {
+ value = 0;
+ } else if (value > 2047) {
+ value = 2047;
+ }
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_FactorySetColorTemp_Rgain(source_type, colortemp_mode, value);
+ if (ret != -1) {
+ LOGD("save the red gain to flash")
+ ret = mVpp.Tv_FactorySaveColorTemp_Rgain(source_type, colortemp_mode, value);
+ }
+ } else { //use fbc store the white balance params
+ value = Tv_FactoryWhiteBalanceFormatInputFbcGainParams(value);
+ ret = Tv_FactorySet_FBC_Gain_Red(value);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactorySetWhiteBalanceGreenGain(int source_type, int colortemp_mode, int value)
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (value < 0) {
+ value = 0;
+ } else if (value > 2047) {
+ value = 2047;
+ }
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_FactorySetColorTemp_Ggain(source_type, colortemp_mode, value);
+ if (ret != -1) {
+ LOGD("save the green gain to flash")
+ ret = mVpp.Tv_FactorySaveColorTemp_Ggain(source_type, colortemp_mode, value);
+ }
+ } else { //use fbc store the white balance params
+ value = Tv_FactoryWhiteBalanceFormatInputFbcGainParams(value);
+ ret = Tv_FactorySet_FBC_Gain_Green(value);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactorySetWhiteBalanceBlueGain(int source_type, int colortemp_mode, int value)
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (value < 0) {
+ value = 0;
+ } else if (value > 2047) {
+ value = 2047;
+ }
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_FactorySetColorTemp_Bgain(source_type, colortemp_mode, value);
+ if (ret != -1) {
+ LOGD("save the blue gain to flash")
+ ret = mVpp.Tv_FactorySaveColorTemp_Bgain(source_type, colortemp_mode, value);
+ }
+ } else { //use fbc store the white balance params
+ value = Tv_FactoryWhiteBalanceFormatInputFbcGainParams(value);
+ ret = Tv_FactorySet_FBC_Gain_Blue(value);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactorySetWhiteBalanceRedOffset(int source_type, int colortemp_mode, int value)
+{
+ int useFbc = 0;
+ int ret = -1;
+ if (value < -1024) {
+ value = -1024;
+ } else if (value > 1023) {
+ value = 1023;
+ }
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_FactorySetColorTemp_Roffset(source_type, colortemp_mode, value);
+ if (ret != -1) {
+ LOGD("save the red offset to flash")
+ ret = mVpp.Tv_FactorySaveColorTemp_Roffset(source_type, colortemp_mode, value);
+ }
+ } else { //use fbc store the white balance params
+ value = Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(value);
+ ret = Tv_FactorySet_FBC_Offset_Red(value);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactorySetWhiteBalanceGreenOffset(int source_type, int colortemp_mode, int value)
+{
+ int useFbc = 0;
+ int ret = -1;
+ if (value < -1024) {
+ value = -1024;
+ } else if (value > 1023) {
+ value = 1023;
+ }
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_FactorySetColorTemp_Goffset(source_type, colortemp_mode, value);
+ if (ret != -1) {
+ LOGD("save the green offset to flash")
+ ret = mVpp.Tv_FactorySaveColorTemp_Goffset(source_type, colortemp_mode, value);
+ }
+ } else { //use fbc store the white balance params
+ value = Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(value);
+ ret = Tv_FactorySet_FBC_Offset_Green(value);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactorySetWhiteBalanceBlueOffset(int source_type, int colortemp_mode, int value)
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (value < -1024) {
+ value = -1024;
+ } else if (value > 1023) {
+ value = 1023;
+ }
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_FactorySetColorTemp_Boffset(source_type, colortemp_mode, value);
+ if (ret != -1) {
+ LOGD("save the blue offset to flash")
+ ret = mVpp.Tv_FactorySaveColorTemp_Boffset(source_type, colortemp_mode, value);
+ }
+ } else { //use fbc store the white balance params
+ value = Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(value);
+ ret = Tv_FactorySet_FBC_Offset_Blue(value);
+ }
+ return ret;
+}
+
+
+int CTv::Tv_FactorySetWhiteBalanceColorTempMode(int source_type, int colortemp_mode, int is_save)
+{
+ int useFbc = 0;
+ int ret = -1;
+ int colorTemp = 0;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_SetColorTemperature((vpp_color_temperature_mode_t)colortemp_mode, (tv_source_input_type_t)source_type, is_save);
+ } else { //use fbc store the white balance params
+ colorTemp = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(colortemp_mode);
+ ret = Tv_FactorySet_FBC_ColorTemp_Mode(colorTemp);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactoryGetWhiteBalanceColorTempMode(int source_type )
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.Tv_GetColorTemperature((tv_source_input_type_t)source_type);
+ } else { //use fbc store the white balance params
+ ret = Tv_FactoryGet_FBC_ColorTemp_Mode();
+ ret = Tv_FactoryWhiteBalanceColorTempMappingFbc2G9(ret);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactoryWhiteBalanceFormatInputFbcGainParams(int value)
+{
+ int ret = 1024;
+ if (value < 0) {
+ ret = 0;
+ } else if (value > 2047) {
+ ret = 2047;
+ } else {
+ ret = value;
+ }
+ ret = ret >> 3;
+ return ret;
+}
+
+int CTv::Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(int value)
+{
+ int ret = 0;
+ if (value < -1024) {
+ ret = -1024;
+ } else if (value > 1023) {
+ ret = 1023;
+ } else {
+ ret = value;
+ }
+ ret += 1024;
+ ret = ret >> 3;
+ return ret;
+}
+
+int CTv::Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(int value)
+{
+ if (value == 255) {
+ value = 1023;
+ } else {
+ value = value << 3;
+ value -= 1024;
+ }
+ return value;
+}
+
+int CTv::Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(int value)
+{
+ value = value << 3;
+ if (value < 0) {
+ value = 0;
+ } else if (value > 2047) {
+ value = 2047;
+ }
+ return value;
+}
+
+
+int CTv::Tv_FactorySaveWhiteBalancePramas(int source_type, int tempmode, int r_gain, int g_gain, int b_gain, int r_offset, int g_offset, int b_offset)
+{
+ int useFbc = 0;
+ int ret = 0;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ mVpp.Tv_SaveColorTemp((vpp_color_temperature_mode_t) tempmode, (tv_source_input_type_t) source_type);
+ mVpp.Tv_FactorySaveColorTemp_Rgain(source_type, tempmode, r_gain);
+ mVpp.Tv_FactorySaveColorTemp_Ggain(source_type, tempmode, g_gain);
+ mVpp.Tv_FactorySaveColorTemp_Bgain(source_type, tempmode, b_gain);
+ mVpp.Tv_FactorySaveColorTemp_Roffset(source_type, tempmode, r_offset);
+ mVpp.Tv_FactorySaveColorTemp_Goffset(source_type, tempmode, g_offset);
+ mVpp.Tv_FactorySaveColorTemp_Boffset(source_type, tempmode, b_offset);
+ } else { //use fbc store the white balance params
+ tcon_rgb_ogo_t params;
+
+ params.r_gain = Tv_FactoryWhiteBalanceFormatInputFbcGainParams(r_gain);
+ params.g_gain = Tv_FactoryWhiteBalanceFormatInputFbcGainParams(g_gain);
+ params.b_gain = Tv_FactoryWhiteBalanceFormatInputFbcGainParams(b_gain);
+ params.r_post_offset = Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(r_offset);
+ params.g_post_offset = Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(g_offset);
+ params.b_post_offset = Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(b_offset);
+ tempmode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(tempmode);
+ ret = Tv_FactorySet_FBC_ColorTemp_Batch((vpp_color_temperature_mode_t)tempmode, params);
+ }
+ return ret;
+}
+
+
+int CTv::Tv_FactoryCloseWhiteBalanceGrayPattern()
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = mVpp.VPP_SetGrayPattern(0);
+ } else { //use fbc store the white balance params
+ ret = Tv_FactoryClose_FBC_GrayPattern();
+ }
+ return ret;
+}
+
+int CTv::Tv_FactoryOpenWhiteBalanceGrayPattern()
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) { // not use fbc store the white balance params
+ ret = 0;
+ } else { //use fbc store the white balance params
+ ret = Tv_FactoryOpen_FBC_GrayPattern();
+ }
+ return ret;
+}
+
+int CTv::Tv_FactorySetWhiteBalanceGrayPattern(int value)
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) {
+ ret = mVpp.VPP_SetGrayPattern(value);
+ } else {
+ ret = Tv_FactorySet_FBC_GrayPattern(value);
+ }
+ return ret;
+}
+
+int CTv:: Tv_FactoryGetWhiteBalanceGrayPattern()
+{
+ int useFbc = 0;
+ int ret = -1;
+ useFbc = GetPlatformHaveFBCFlag();
+ if (useFbc == 0) {
+ ret = mVpp.VPP_GetGrayPattern();
+ } else {
+
+ }
+ return ret;
+}
+
+
+/**
+* The color temperature enum order is diffrent bettewn G9 and Fbc, so we have to make a mapping
+**/
+int CTv::Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(int Tempmode)
+{
+ int ret = Tempmode;
+ switch (Tempmode) {
+ case 0: //standard
+ ret = 1;
+ break;
+ case 1: //warm
+ ret = 2;
+ break;
+ case 2: //cold
+ ret = 0;
+ break;
+ default:
+ break;
+ }
+ return ret;
+}
+
+/**
+* The color temperature enum order is diffrent bettewn G9 and Fbc, so we have to make a mapping
+**/
+int CTv::Tv_FactoryWhiteBalanceColorTempMappingFbc2G9(int Tempmode)
+{
+ int ret = Tempmode;
+ switch (Tempmode) {
+ case 0: //cold
+ ret = 2;
+ break;
+ case 1: //standard
+ ret = 0;
+ break;
+ case 2: //warm
+ ret = 1;
+ break;
+ default:
+ break;
+ }
+ return ret;
+}
+
+int CTv::Tv_FactoryWhiteBalanceGetAllParams(int Tempmode, tcon_rgb_ogo_t *params)
+{
+ int ret = -1;
+ Tempmode = Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(Tempmode);
+ ret = Tv_FactoryGet_FBC_ColorTemp_Batch((vpp_color_temperature_mode_t)Tempmode, params);
+ params->r_gain = Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(params->r_gain);
+ params->g_gain = Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(params->g_gain);
+ params->b_gain = Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(params->b_gain);
+ params->r_post_offset = Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(params->r_post_offset);
+ params->g_post_offset = Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(params->g_post_offset);
+ params->b_post_offset = Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(params->b_post_offset);
+ return ret;
+}
+
+int CTv::Tv_FactorySet_FBC_GrayPattern(int value)
+{
+ int ret = -1;
+ unsigned char grayValue = 0;
+ if (value > 255) {
+ grayValue = 255;
+ } else if (value < 0) {
+ grayValue = 0;
+ } else {
+ grayValue = (unsigned char)(0xFF & value);
+ }
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ ret = fbcIns->cfbc_WhiteBalance_SetGrayPattern(COMM_DEV_SERIAL, grayValue);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactoryOpen_FBC_GrayPattern()
+{
+ int ret = -1;
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ ret = fbcIns->cfbc_WhiteBalance_GrayPattern_OnOff(COMM_DEV_SERIAL, 0);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactoryClose_FBC_GrayPattern()
+{
+ int ret = -1;
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ ret = fbcIns->cfbc_WhiteBalance_GrayPattern_OnOff(COMM_DEV_SERIAL, 1);
+ }
+ return ret;
+}
+
+int CTv::Tv_FactorySet_FBC_ColorTemp_Mode( int mode )
+{
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_ColorTemp_Mode(COMM_DEV_SERIAL, mode);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_ColorTemp_Mode ( void )
+{
+ int temp_mode = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_ColorTemp_Mode(COMM_DEV_SERIAL, &temp_mode);
+ return temp_mode;
+ }
+
+ return 0;
+}
+int CTv::Tv_FactorySet_FBC_ColorTemp_Mode_N360( int mode )
+{
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_ColorTemp_Mode(COMM_DEV_SERIAL, mode);
+ SSMSaveFBCN360ColorTempVal(mode);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_ColorTemp_Mode_N360 ( void )
+{
+ int temp_mode = 0;
+
+ SSMReadFBCN360ColorTempVal(&temp_mode);
+
+ return temp_mode;
+}
+
+int CTv::Tv_FactorySet_FBC_WB_Initial( int status )
+{
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_WB_Initial(COMM_DEV_SERIAL, status);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_WB_Initial ( void )
+{
+ int temp_status = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_WB_Initial(COMM_DEV_SERIAL, &temp_status);
+ return temp_status;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_ColorTemp_Batch(vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params)
+{
+ unsigned char mode = 0, r_gain, g_gain, b_gain, r_offset, g_offset, b_offset;
+ switch(Tempmode) {
+ case VPP_COLOR_TEMPERATURE_MODE_STANDARD:
+ mode = 1; //COLOR_TEMP_STD
+ break;
+ case VPP_COLOR_TEMPERATURE_MODE_WARM:
+ mode = 2; //COLOR_TEMP_WARM
+ break;
+ case VPP_COLOR_TEMPERATURE_MODE_COLD:
+ mode = 3; //COLOR_TEMP_COLD
+ break;
+ case VPP_COLOR_TEMPERATURE_MODE_USER:
+ mode = 3; //COLOR_TEMP_USER
+ break;
+ }
+ r_gain = (params.r_gain * 255) / 2047; // u1.10, range 0~2047, default is 1024 (1.0x)
+ g_gain = (params.g_gain * 255) / 2047;
+ b_gain = (params.b_gain * 255) / 2047;
+ r_offset = (params.r_post_offset + 1024) * 255 / 2047; // s11.0, range -1024~+1023, default is 0
+ g_offset = (params.g_post_offset + 1024) * 255 / 2047;
+ b_offset = (params.b_post_offset + 1024) * 255 / 2047;
+ LOGD ( "~Tv_FactorySet_FBC_ColorTemp_Batch##%d,%d,%d,%d,%d,%d,##", r_gain, g_gain, b_gain, r_offset, g_offset, b_offset );
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_WB_Batch(COMM_DEV_SERIAL, mode, r_gain, g_gain, b_gain, r_offset, g_offset, b_offset);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_ColorTemp_Batch ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params )
+{
+ unsigned char mode = 0, r_gain, g_gain, b_gain, r_offset, g_offset, b_offset;
+ switch(Tempmode) {
+ case VPP_COLOR_TEMPERATURE_MODE_STANDARD:
+ mode = 1; //COLOR_TEMP_STD
+ break;
+ case VPP_COLOR_TEMPERATURE_MODE_WARM:
+ mode = 2; //COLOR_TEMP_WARM
+ break;
+ case VPP_COLOR_TEMPERATURE_MODE_COLD:
+ mode = 3; //COLOR_TEMP_COLD
+ break;
+ case VPP_COLOR_TEMPERATURE_MODE_USER:
+ mode = 3; //COLOR_TEMP_USER
+ break;
+ }
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_WB_Batch(COMM_DEV_SERIAL, mode, &r_gain, &g_gain, &b_gain, &r_offset, &g_offset, &b_offset);
+ LOGD ( "~Tv_FactoryGet_FBC_ColorTemp_Batch##%d,%d,%d,%d,%d,%d,##", r_gain, g_gain, b_gain, r_offset, g_offset, b_offset );
+
+ params->r_gain = (r_gain * 2047) / 255;
+ params->g_gain = (g_gain * 2047) / 255;
+ params->b_gain = (b_gain * 2047) / 255;
+ params->r_post_offset = (r_offset * 2047) / 255 - 1024;
+ params->g_post_offset = (g_offset * 2047) / 255 - 1024;
+ params->b_post_offset = (b_offset * 2047) / 255 - 1024;
+
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactorySet_WB_G9_To_FBC( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params )
+{
+ Tv_FactorySet_FBC_ColorTemp_Batch(Tempmode, params);
+
+ return 0;
+}
+
+int CTv::Tv_FactoryGet_WB_G9_To_FBC ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params )
+{
+ int temp_status = 0;
+
+ Tv_FactoryGet_FBC_ColorTemp_Batch(Tempmode, params);
+
+ return temp_status;
+}
+
+int CTv::Tv_FactoryGetItemFromBatch(vpp_color_temperature_mode_t colortemp_mode, int item)
+{
+ tcon_rgb_ogo_t params;
+ int ret = 0;
+
+ Tv_FactoryGet_FBC_ColorTemp_Batch((vpp_color_temperature_mode_t)colortemp_mode, &params);
+ switch(item) {
+ case 0:
+ ret = params.r_gain;
+ ret = Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(ret);
+ break;
+ case 1:
+ ret = params.g_gain;
+ ret = Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(ret);
+ break;
+ case 2:
+ ret = params.b_gain;
+ ret = Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(ret);
+ break;
+ case 3:
+ ret = params.r_post_offset;
+ ret = Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(ret);
+ break;
+ case 4:
+ ret = params.g_post_offset;
+ ret = Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(ret);
+ break;
+ case 5:
+ ret = params.b_post_offset;
+ ret = Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(ret);
+ break;
+ default:
+ ret = 0;
+ }
+ return ret;
+
+}
+
+
+int CTv::Tv_FactorySet_FBC_CM_OnOff( unsigned char status )
+{
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_CM(COMM_DEV_SERIAL, status);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_CM_OnOff (void)
+{
+ int temp_status = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_CM(COMM_DEV_SERIAL, &temp_status);
+ return temp_status;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_DNLP_OnOff( unsigned char status )
+{
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_DNLP(COMM_DEV_SERIAL, status);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_DNLP_OnOff (void)
+{
+ int temp_status = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_DNLP(COMM_DEV_SERIAL, &temp_status);
+ return temp_status;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_Gamma_OnOff( unsigned char status )
+{
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Gamma(COMM_DEV_SERIAL, status);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Gamma_OnOff (void)
+{
+ int temp_status = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Gamma(COMM_DEV_SERIAL, &temp_status);
+ return temp_status;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_WhiteBalance_OnOff( unsigned char status )
+{
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_WhiteBalance_OnOff(COMM_DEV_SERIAL, status);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_WhiteBalance_OnOff (void)
+{
+ int temp_status = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_WhiteBalance_OnOff(COMM_DEV_SERIAL, &temp_status);
+ return temp_status;
+ }
+
+ return 0;
+}
+
+
+int CTv::Tv_FactorySet_FBC_backlight_onoff ( int value )
+{
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_backlight_onoff(COMM_DEV_SERIAL, value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_backlight_onoff ( void )
+{
+ int temp_value = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_backlight_onoff(COMM_DEV_SERIAL, &temp_value);
+ return temp_value;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_LVDS_SSG_Set( int value )
+{
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_LVDS_SSG_Set(COMM_DEV_SERIAL, value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactorySet_FBC_LightSensor_Status_N310 ( int value )
+{
+ int temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_LightSensor_N310(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_LightSensor_Status_N310 ( void )
+{
+ int temp_value = 0;
+ int data = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_LightSensor_N310(COMM_DEV_SERIAL, &temp_value);
+
+ data = temp_value;
+
+ return data;
+ }
+
+ return 0;
+}
+int CTv::Tv_FactorySet_FBC_Dream_Panel_Status_N310 ( int value )
+{
+ int temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_Dream_Panel_N310(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_Dream_Panel_Status_N310 ( void )
+{
+ int temp_value = 0;
+ int data = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_Dream_Panel_N310(COMM_DEV_SERIAL, &temp_value);
+
+ data = temp_value;
+
+ return data;
+ }
+
+ return 0;
+}
+
+int CTv::Tv_FactorySet_FBC_MULT_PQ_Status_N310 ( int value )
+{
+ int temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_MULT_PQ_N310(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_MULT_PQ_Status_N310 ( void )
+{
+ int temp_value = 0;
+ int data = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_MULT_PQ_N310(COMM_DEV_SERIAL, &temp_value);
+
+ data = temp_value;
+
+ return data;
+ }
+
+ return 0;
+}
+int CTv::Tv_FactorySet_FBC_MEMC_Status_N310 ( int value )
+{
+ int temp_value = value;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Set_MEMC_N310(COMM_DEV_SERIAL, temp_value);
+ return 0;
+ }
+
+ return -1;
+}
+
+int CTv::Tv_FactoryGet_FBC_MEMC_Status_N310 ( void )
+{
+ int temp_value = 0;
+ int data = 0;
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ fbcIns->cfbc_Get_MEMC_N310(COMM_DEV_SERIAL, &temp_value);
+
+ data = temp_value;
+
+ return data;
+ }
+
+ return 0;
+}
+
+
+
+//audio
+int CTv::SetAudioMuteForSystem(int muteOrUnmute)
+{
+ return mTvAudio.SetAudioMuteForSystem(muteOrUnmute);
+}
+
+int CTv::GetAudioMuteForSystem()
+{
+ return mTvAudio.GetAudioMuteForSystem();
+}
+
+int CTv::SetAudioAVOutMute(int muteStatus)
+{
+ return mTvAudio.SetAudioAVOutMute(muteStatus);
+}
+
+int CTv::GetAudioAVOutMute()
+{
+ return mTvAudio.GetAudioAVOutMute();
+}
+
+int CTv::SetAudioSPDIFMute(int muteStatus)
+{
+ return mTvAudio.SetAudioSPDIFMute(muteStatus);
+}
+
+int CTv::GetAudioSPDIFMute()
+{
+ return mTvAudio.GetAudioSPDIFMute();
+}
+int CTv::SetAudioMasterVolume(int tmp_vol)
+{
+ return mTvAudio.SetAudioMasterVolume(tmp_vol);
+}
+
+int CTv::GetAudioMasterVolume()
+{
+ return mTvAudio.GetAudioMasterVolume();
+}
+
+int CTv::SaveCurAudioMasterVolume(int tmp_vol)
+{
+ return mTvAudio.SaveCurAudioMasterVolume(tmp_vol);
+}
+
+int CTv::GetCurAudioMasterVolume()
+{
+ return mTvAudio.GetCurAudioMasterVolume();
+}
+
+int CTv::SetAudioBalance(int tmp_val)
+{
+ return mTvAudio.SetAudioBalance(tmp_val);
+}
+
+int CTv::GetAudioBalance()
+{
+ return mTvAudio.GetAudioBalance();
+}
+
+int CTv::SaveCurAudioBalance(int tmp_val)
+{
+ return mTvAudio.SaveCurAudioBalance(tmp_val);
+}
+
+int CTv::GetCurAudioBalance()
+{
+ return mTvAudio.GetCurAudioBalance();
+}
+
+
+int CTv::SetAudioSupperBassVolume(int tmp_vol)
+{
+ return mTvAudio.SetAudioSupperBassVolume(tmp_vol);
+}
+
+int CTv::GetAudioSupperBassVolume()
+{
+ return mTvAudio.GetAudioSupperBassVolume();
+}
+
+int CTv::SaveCurAudioSupperBassVolume(int tmp_vol)
+{
+ return mTvAudio.SaveCurAudioSupperBassVolume(tmp_vol);
+}
+
+int CTv::GetCurAudioSupperBassVolume()
+{
+ return mTvAudio.GetCurAudioSupperBassVolume();
+}
+int CTv::SetAudioSupperBassSwitch(int tmp_val)
+{
+ return mTvAudio.SetAudioSupperBassSwitch(tmp_val);
+}
+
+int CTv::GetAudioSupperBassSwitch()
+{
+ return mTvAudio.GetAudioSupperBassSwitch();
+}
+
+int CTv::SaveCurAudioSupperBassSwitch(int tmp_val)
+{
+ return mTvAudio.SaveCurAudioSupperBassSwitch(tmp_val);
+}
+
+int CTv::GetCurAudioSupperBassSwitch()
+{
+ return mTvAudio.GetCurAudioSupperBassSwitch();
+}
+
+int CTv::SetAudioSRSSurround(int tmp_val)
+{
+ return mTvAudio.SetAudioSRSSurround(tmp_val);
+}
+
+int CTv::GetAudioSRSSurround()
+{
+ return mTvAudio.GetAudioSRSSurround();
+}
+
+int CTv::SaveCurAudioSrsSurround(int tmp_val)
+{
+ return mTvAudio.SaveCurAudioSrsSurround(tmp_val);
+}
+
+int CTv::GetCurAudioSRSSurround()
+{
+ return mTvAudio.GetCurAudioSRSSurround();
+}
+
+int CTv::SetAudioSrsDialogClarity(int tmp_val)
+{
+ return mTvAudio.SetAudioSrsDialogClarity(tmp_val);
+}
+
+int CTv::GetAudioSrsDialogClarity()
+{
+ return mTvAudio.GetAudioSrsDialogClarity();
+}
+
+int CTv::SaveCurAudioSrsDialogClarity(int tmp_val)
+{
+ return mTvAudio.SaveCurAudioSrsDialogClarity(tmp_val);
+}
+
+int CTv::GetCurAudioSrsDialogClarity()
+{
+ return mTvAudio.GetCurAudioSrsDialogClarity();
+}
+
+int CTv::SetAudioSrsTruBass(int tmp_val)
+{
+ return mTvAudio.SetAudioSrsTruBass(tmp_val);
+}
+
+int CTv::GetAudioSrsTruBass()
+{
+ return mTvAudio.GetAudioSrsTruBass();
+}
+
+int CTv::SaveCurAudioSrsTruBass(int tmp_val)
+{
+ return mTvAudio.SaveCurAudioSrsTruBass(tmp_val);
+}
+
+int CTv::GetCurAudioSrsTruBass()
+{
+ return mTvAudio.GetCurAudioSrsTruBass();
+}
+
+int CTv::SetAudioBassVolume(int tmp_vol)
+{
+ return mTvAudio.SetAudioBassVolume(tmp_vol);
+}
+
+int CTv::GetAudioBassVolume()
+{
+ return mTvAudio.GetAudioBassVolume();
+}
+
+int CTv::SaveCurAudioBassVolume(int tmp_vol)
+{
+ return mTvAudio.SaveCurAudioBassVolume(tmp_vol);
+}
+
+int CTv::GetCurAudioBassVolume()
+{
+ return mTvAudio.GetCurAudioBassVolume();
+}
+
+int CTv::SetAudioTrebleVolume(int tmp_vol)
+{
+ return mTvAudio.SetAudioTrebleVolume(tmp_vol);
+}
+
+int CTv::GetAudioTrebleVolume()
+{
+ return mTvAudio.GetAudioTrebleVolume();
+}
+
+int CTv::SaveCurAudioTrebleVolume(int tmp_vol)
+{
+ return mTvAudio.SaveCurAudioTrebleVolume(tmp_vol);
+}
+
+int CTv::GetCurAudioTrebleVolume()
+{
+ return mTvAudio.GetCurAudioTrebleVolume();
+}
+
+int CTv::SetAudioSoundMode(int tmp_val)
+{
+ return mTvAudio.SetAudioSoundMode(tmp_val);
+}
+
+int CTv::GetAudioSoundMode()
+{
+ return mTvAudio.GetAudioSoundMode();
+}
+
+int CTv::SaveCurAudioSoundMode(int tmp_val)
+{
+ return mTvAudio.SaveCurAudioSoundMode(tmp_val);
+}
+
+int CTv::GetCurAudioSoundMode()
+{
+ return mTvAudio.GetCurAudioSoundMode();
+}
+
+int CTv::SetAudioWallEffect(int tmp_val)
+{
+ return mTvAudio.SetAudioWallEffect(tmp_val);
+}
+
+int CTv::GetAudioWallEffect()
+{
+ return mTvAudio.GetAudioWallEffect();
+}
+
+int CTv::SaveCurAudioWallEffect(int tmp_val)
+{
+ return mTvAudio.SaveCurAudioWallEffect(tmp_val);
+}
+
+int CTv::GetCurAudioWallEffect()
+{
+ return mTvAudio.GetCurAudioWallEffect();
+}
+
+
+int CTv::SetAudioEQMode(int tmp_val)
+{
+ return mTvAudio.SetAudioEQMode(tmp_val);
+}
+
+int CTv::GetAudioEQMode()
+{
+ return mTvAudio.GetAudioEQMode();
+}
+
+int CTv::SaveCurAudioEQMode(int tmp_val)
+{
+ return mTvAudio.SaveCurAudioEQMode(tmp_val);
+}
+
+int CTv::GetCurAudioEQMode()
+{
+ return mTvAudio.GetCurAudioEQMode();
+}
+
+int CTv::GetAudioEQRange(int range_buf[])
+{
+ return mTvAudio.GetAudioEQRange(range_buf);
+}
+
+int CTv::SetAudioEQGain(int gain_buf[])
+{
+ return mTvAudio.SetAudioEQGain(gain_buf);
+}
+
+int CTv::GetAudioEQGain(int gain_buf[])
+{
+ return mTvAudio.GetAudioEQGain(gain_buf);
+}
+
+int CTv::SaveCurAudioEQGain(int gain_buf[])
+{
+ return mTvAudio.SaveCurAudioEQGain(gain_buf);
+}
+
+int CTv::GetCurAudioEQGain(int gain_buf[])
+{
+ return mTvAudio.GetCurAudioEQGain(gain_buf);
+}
+
+int CTv::GetAudioEQBandCount()
+{
+ return mTvAudio.GetAudioEQBandCount();
+}
+
+
+
+int CTv::SetAudioEQSwitch(int switch_val)
+{
+ return mTvAudio.SetAudioEQSwitch(switch_val);
+}
+
+int CTv::SetAudioSPDIFSwitch(int tmp_val)
+{
+ return mTvAudio.SetAudioSPDIFSwitch(tmp_val);
+}
+
+/*showboz public int GetAudioSPDIFSwitch() {
+ mTvAudio.GetAudioSPDIFSwitch();
+}*/
+
+int CTv::amAudioSetDoubleOutputSwitch(int en_val)
+{
+ return mTvAudio.amAudioSetDoubleOutputSwitch(en_val);
+}
+int CTv::UsbAudioOuputModuleSwitch(int sw)
+{
+ return mTvAudio.UsbAudioOuputModuleSwitch(sw);
+}
+
+int CTv::GetAmAudioSetDoubleOutputSwitch()
+{
+ return mTvAudio.GetAmAudioSetDoubleOutputSwitch();
+}
+
+int CTv::GetCurUsbAudioOuputModuleSwitch()
+{
+ return mTvAudio.GetCurUsbAudioOuputModuleSwitch();
+}
+
+int CTv::SaveCurAudioSPDIFSwitch(int tmp_val)
+{
+ return mTvAudio.SaveCurAudioSPDIFSwitch(tmp_val);
+}
+
+int CTv::GetCurAudioSPDIFSwitch()
+{
+ return mTvAudio.GetCurAudioSPDIFSwitch();
+}
+int CTv::SetAudioSPDIFMode(int tmp_val)
+{
+ return mTvAudio.SetAudioSPDIFMode(tmp_val);
+}
+
+/* public int GetAudioSPDIFMode() {
+mTvAudio.GetAudioSPDIFMode();
+showboz */
+
+
+int CTv::SaveCurAudioSPDIFMode(int tmp_val)
+{
+ return mTvAudio.SaveCurAudioSPDIFMode(tmp_val);
+}
+
+int CTv::GetCurAudioSPDIFMode()
+{
+ return mTvAudio.GetCurAudioSPDIFMode();
+}
+
+int CTv::OpenAmAudio(unsigned int sr, int output_device)
+{
+ return mTvAudio.OpenAmAudio(sr, output_device);
+}
+
+int CTv::CloseAmAudio(void)
+{
+ return mTvAudio.CloseAmAudio();
+}
+
+int CTv::SetAmAudioInputSr(unsigned int sr, int output_device)
+{
+ return mTvAudio.SetAmAudioInputSr(sr, output_device);
+}
+
+int CTv::SetAmAudioOutputMode(int mode)
+{
+ return mTvAudio.SetAmAudioOutputMode(mode);
+}
+
+int CTv::SetAmAudioMusicGain(int gain)
+{
+ return mTvAudio.SetAmAudioMusicGain(gain);
+}
+
+int CTv::SetAmAudioLeftGain(int gain)
+{
+ return mTvAudio.SetAmAudioLeftGain(gain);
+}
+
+
+int CTv::SetAmAudioRightGain(int gain)
+{
+ return mTvAudio.SetAmAudioRightGain(gain);
+}
+
+int CTv::AudioLineInSelectChannel(int audio_channel)
+{
+ return mTvAudio.AudioLineInSelectChannel(audio_channel);
+}
+
+int CTv::SetKalaokIO(int level)
+{
+ return mTvAudio.SetKalaokIO(level);
+}
+int CTv::AudioSetAudioInSource(int audio_src_in_type)
+{
+ return mTvAudio.AudioSetAudioInSource(CC_AUDIO_IN_SOURCE_LINEIN);
+}
+
+int CTv::AudioSetLineInCaptureVolume(int l_vol, int r_vol)
+{
+ return mTvAudio.AudioSetLineInCaptureVolume(l_vol, r_vol);
+}
+
+int CTv::AudioHandleHeadsetPlugIn()
+{
+ return mTvAudio.AudioHandleHeadsetPlugIn();
+}
+
+int CTv::AudioHandleHeadsetPullOut()
+{
+ return mTvAudio.AudioHandleHeadsetPullOut();
+}
diff --git a/tvapi/libtv/tv/CTv.h b/tvapi/libtv/tv/CTv.h
index 4df1096..2eefdf7 100644
--- a/tvapi/libtv/tv/CTv.h
+++ b/tvapi/libtv/tv/CTv.h
@@ -1,636 +1,633 @@
-
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CDtv.h
-// @ Date : 2013-11
-// @ Author :
-
-#if !defined(_CDTV_H)
-#define _CDTV_H
-#include <stdint.h>
-#include <sys/time.h>
-#include <am_epg.h>
-#include <am_mem.h>
-#include <utils/threads.h>
-#include "CTvProgram.h"
-#include "CTvEpg.h"
-#include "CTvScanner.h"
-#include "CTvLog.h"
-#include "CTvTime.h"
-#include "CTvEvent.h"
-#include "CTvEv.h"
-#include "CTvBooking.h"
-#include "CFrontEnd.h"
-#include "../vpp/CVpp.h"
-#include "../vpp/CPQdb.h"
-#include "../tvin/CTvin.h"
-#include "../tvutils/CMsgQueue.h"
-#include "../tvutils/CSerialCommunication.h"
-#include "../tvutils/serial_operate.h"
-#include "CTvRecord.h"
-#include "CTvSubtitle.h"
-#include "CUpgradeFBC.h"
-#include "CAv.h"
-#include "CTvDmx.h"
-#include "../audio/audio_api.h"
-#include "AutoBackLight.h"
-using namespace android;
-
-static const char *TV_CONFIG_FILE_PATH = "/param/tvconfig.conf";
-static const char *TV_DB_PATH = "/param/dtv.db";
-static const char *TV_CONFIG_FILE_SYSTEM_PATH = "/system/etc/tvconfig.conf";
-static const char *TV_CONFIG_FILE_PARAM_PATH = "/param/tvconfig.conf";
-static const char *TV_CHANNEL_LIST_SYSTEM_PATH = "/system/etc/tv_default.xml";
-static const char *TV_CHANNEL_LIST_PARAM_PATH = "/param/tv_default.xml";
-static const char *TV_SSM_DATA_SYSTEM_PATH = "/system/etc/ssm_data";
-static const char *TV_SSM_DATA_PARAM_PATH = "/param/ssm_data";
-
-#define DEVICE_CLASS_TSYNC_AV_THRESHOLD_MIN "/sys/class/tsync/av_threshold_min"
-#define AV_THRESHOLD_MIN_MS "540000" //6S = 6*90000
-
-#define DEFAULT_COMPENSATION_VALUE 0
-
-
-typedef enum tv_fmt_ratio_e {
- RATIO_43,
- RATIO_169,
- RATIO_MAX,
-} tv_fmt_ratio_t;
-
-typedef enum tv_color_fmt_e {
- COLOR_RGB444,
- COLOR_YUV422,
- COLOR_YUV444,
- COLOR_MAX,
-} tv_color_fmt_t;
-
-
-
-typedef enum tv_window_mode_e {
- NORMAL_WONDOW,
- PREVIEW_WONDOW,
-} tv_window_mode_t;
-
-typedef enum tv_dtv_scan_running_status_e {
- DTV_SCAN_RUNNING_NORMAL,
- DTV_SCAN_RUNNING_ANALYZE_CHANNEL,
-} tv_dtv_scan_running_status_t;
-
-typedef struct tv_config_s {
- unsigned int overscan_3d;
- unsigned int tv_out_counter;
- bool kernelpet_disable;
- unsigned int kernelpet_timeout;
- bool userpet;
- unsigned int userpet_timeout;
- unsigned int userpet_reset;
- unsigned int dtv_videopath_switch;
- bool title_shake;
- bool memory512m;
-} tv_config_t;
-
-typedef enum TvRunStatus_s {
- TV_INIT_ED = -1,
- TV_OPEN_ED = 0,
- TV_START_ED ,
- TV_RESUME_ED,
- TV_PAUSE_ED,
- TV_STOP_ED,
- TV_CLOSE_ED,
-} TvRunStatus_t;
-
-class CTv : public CTvin::CTvinSigDetect::ISigDetectObserver, public CTvin::CSourceConnectDetect::ISourceConnectObserver, public CTvin::CHDMIRxCEC::IHDMIRxCECObserver, public CUpgradeFBC::IUpgradeFBCObserver, public CSerialCommunication::ISerialCommunicationObserver
-{
-public:
- static const int TV_ACTION_NULL = 0x0000;
- static const int TV_ACTION_STARTING = 0x0001;
- static const int TV_ACTION_STOPING = 0x0002;
- static const int TV_ACTION_SCANNING = 0x0004;
- static const int TV_ACTION_PLAYING = 0x0008;
- static const int TV_ACTION_RECORDING = 0x0010;
- static const int TV_ACTION_SOURCE_SWITCHING = 0x0020;
-public:
- class TvIObserver
- {
- public:
- TvIObserver() {};
- virtual ~TvIObserver() {};
- virtual void onTvEvent ( const CTvEv &ev ) = 0;
- };
- //main
- CTv();
- virtual ~CTv();
- virtual int OpenTv ( void );
- virtual int CloseTv ( void );
- virtual int StartTvLock ();
- virtual int StopTvLock ( void );
- virtual TvRunStatus_t GetTvStatus();
- virtual int ClearAnalogFrontEnd();
- virtual tv_source_input_t GetLastSourceInput (void);
- virtual int SetSourceSwitchInput (tv_source_input_t source_input );
- virtual tv_source_input_t GetCurrentSourceInputLock ( void );
- virtual tvin_info_t GetCurrentSignalInfo ( void );
- virtual int SetPreviewWindow ( tvin_window_pos_t pos );
- virtual int dtvAutoScan();
- virtual int dtvManualScan (int beginFreq, int endFreq, int modulation = -1);
- virtual int atvAutoScan(int videoStd, int audioStd, int searchType);
- virtual int clearAllProgram(int arg0);
- virtual int clearDbAllProgramInfoTable();
- virtual void setSourceSwitchAndPlay();
- virtual int GetDisplayResolutionConfig();
- virtual int GetDisplayResolutionInfo();
- virtual int atvMunualScan ( int startFreq, int endFreq, int videoStd, int audioStd, int store_Type = 0, int channel_num = 0 );
- virtual int stopScanLock();
- virtual int dtvAutoScanAtscLock(int attenna, int videoStd, int audioStd);
- virtual void SetRecordFileName ( char *name );
- virtual void StartToRecord();
- virtual void StopRecording();
- virtual void SetRecCurTsOrCurProgram ( int sel );
- virtual int startCC(int country, int src, int channel, int service);
- virtual int stopCC();
- virtual void printDebugInfo();
- virtual int playProgramLock ( int progId );
- virtual int playDvbcProgram ( int progId );
- virtual int playDtmbProgram ( int progId );
- virtual int playAtvProgram ( int progId );
- virtual int stopPlayingLock();
- virtual int resetFrontEndPara ( frontend_para_set_t feParms );
- int SetCurProgramAudioVolumeCompensationVal ( int tmpVal );
- int GetAudioVolumeCompensationVal(int progDbId);
- //dtv audio track info
- int getAudioTrackNum ( int progId );
- int getAudioInfoByIndex ( int progId, int idx, int *pAFmt, String8 &lang );
- int switchAudioTrack ( int progId, int idx );
- int getVideoFormatInfo ( int *pWidth, int *pHeight, int *pFPS, int *pInterlace );
- int ResetAudioDecoderForPCMOutput();
- int setAudioChannel ( int channelIdx );
- int getAudioChannel();
- int setTvObserver (TvIObserver *ob);
- int getAtscAttenna();
- long getTvTime()
- {
- return mTvTime.getTime();
- };
- void getFrontendStatus();
- int getFrontendSignalStrength();
- int getFrontendSNR();
- int getFrontendBER();
- int getChannelInfoBydbID ( int dbID, channel_info_t &chan_info );
- int setBlackoutEnable(int enable);
- int getSaveBlackoutEnable();
- void startAutoBackLight();
- void stopAutoBackLight();
- int getAutoBackLight_on_off();
- int saveATVProgramID ( int dbID );
- int getATVProgramID ( void );
- int saveDTVProgramID ( int dbID );
- int getDTVProgramID ( void );
- int getCurPlayProgId();
- int getATVMinMaxFreq ( int *scanMinFreq, int *scanMaxFreq );
-
- int Tv_SSMRestoreDefaultSetting();
-
- //
- int GetSourceConnectStatus(int source_input);
- int IsDVISignal();
- int isVgaFmtInHdmi();
- //
- int getHDMIFrameRate ( void );
- void RefreshAudioMasterVolume ( tv_source_input_t source_input );
-
- int Tv_Set3DMode ( VIDEO_3D_MODE_T mode );
- VIDEO_3D_MODE_T Tv_Get3DMode ( void );
- int Tv_Set3DLRSwith ( int on_off);
- int Tv_Get3DLRSwith ( void );
- int Tv_Set3DTo2DMode ( int mode);
- int Tv_Get3DTo2DMode ( void );
- int Tv_Set3DDepth ( int value );
- int GetSave3DDepth ( void );
- is_3d_type_t Check2Dor3D ( VIDEO_3D_MODE_T mode3d, tvin_trans_fmt_t trans_fmt );
- int Tvin_SetPLLValues ();
- int SetCVD2Values ();
- unsigned int Vpp_GetDisplayResolutionInfo(tvin_window_pos_t *win_pos);
- int get_hdmi_sampling_rate();
- //SSM
- int Tv_SSMFacRestoreDefaultSetting();
-
- CTvin::CTvinSigDetect mSigDetectThread;
- CTvin::CSourceConnectDetect mSourceConnectDetectThread;
- CTvin::CHDMIRxCEC mHDMIRxCEC;
- CUpgradeFBC *mpUpgradeFBC;
- CSerialCommunication mSerialA;
- CSerialCommunication mSerialB;
- CSerialCommunication mSerialC;
-
- int SendHDMIRxCECCustomMessage(unsigned char data_buf[]);
- int SendHDMIRxCECCustomMessageAndWaitReply(unsigned char data_buf[], unsigned char reply_buf[], int WaitCmd, int timeout);
- int SendHDMIRxCECBoradcastStandbyMessage();
- int SendHDMIRxCECGiveCECVersionMessage(tv_source_input_t source_input, unsigned char data_buf[]);
- int SendHDMIRxCECGiveDeviceVendorIDMessage(tv_source_input_t source_input, unsigned char data_buf[]);
- int SendHDMIRxCECGiveOSDNameMessage(tv_source_input_t source_input, unsigned char data_buf[]);
-
- int GetHdmiHdcpKeyKsvInfo(int data_buf[]);
- int StartUpgradeFBC(char *file_name, int mode, int upgrade_blk_size);
- int SetSerialSwitch(int dev_id, int switch_val);
- int SendSerialData(int dev_id, int data_len, unsigned char data_buf[]);
- int ChannelExport(const char *destPath);
- int ChannelImport(const char *srcPath);
- int Tv_GetProjectInfo(project_info_t *ptrInfo);
- int Tv_GetPlatformType();
- int Tv_SetDDDRCMode(tv_source_input_t source_input);
- int Tv_SetAudioSourceType (tv_source_input_t source_input);
-
- //PQ
- int Tv_SetBrightness ( int brightness, tv_source_input_type_t source_type, int is_save );
- int Tv_GetBrightness ( tv_source_input_type_t source_type );
- int Tv_SetContrast ( int contrast, tv_source_input_type_t source_type, int is_save );
- int Tv_GetContrast ( tv_source_input_type_t source_type );
- int Tv_SetSaturation ( int satuation, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, int is_save );
- int Tv_GetSaturation ( tv_source_input_type_t source_type );
- int Tv_SetHue ( int hue, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, int is_save );
- int Tv_GetHue ( tv_source_input_type_t source_type );
- int Tv_SetPQMode ( vpp_picture_mode_t mode, tv_source_input_type_t source_type, int is_save );
- vpp_picture_mode_t Tv_GetPQMode ( tv_source_input_type_t source_type );
- int Tv_SetSharpness ( int value, tv_source_input_type_t source_type, int en, int is_save );
- int Tv_GetSharpness ( tv_source_input_type_t source_type );
- int Tv_SaveSharpness ( int value, tv_source_input_type_t source_type, int is_enable );
- int Tv_SetBacklight ( int value, tv_source_input_type_t source_type, int is_save );
- int Tv_GetBacklight ( tv_source_input_type_t source_type );
- int Tv_SetColorTemperature ( vpp_color_temperature_mode_t mode, tv_source_input_type_t source_type, int is_save );
- vpp_color_temperature_mode_t Tv_GetColorTemperature ( tv_source_input_type_t source_type );
- int Tv_SaveColorTemp ( vpp_color_temperature_mode_t mode, tv_source_input_type_t source_type );
- int Tv_SetDisplayMode ( vpp_display_mode_t mode, tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, int is_save );
- vpp_display_mode_t Tv_GetDisplayMode ( tv_source_input_type_t source_type );
- int Tv_SaveDisplayMode ( vpp_display_mode_t mode, tv_source_input_type_t source_type );
- int Tv_SetNoiseReductionMode ( vpp_noise_reduction_mode_t mode, tv_source_input_type_t source_type, int is_save );
- vpp_noise_reduction_mode_t Tv_GetNoiseReductionMode ( tv_source_input_type_t source_type );
- int Tv_SaveNoiseReductionMode ( vpp_noise_reduction_mode_t mode, tv_source_input_type_t source_type );
- int Tv_SetRGBOGO_PostOffset(int type, int offset);
- int Tv_SetRGBOGO_Gain(int type, int gain);
- int Tv_GetRGBOGO_PostOffset ( int type );
- int Tv_GetRGBOGO_Gain ( int type );
- //
- int Tv_FactorySetPQMode_Brightness ( int source_type, int pq_mode, int brightness );
- int Tv_FactoryGetPQMode_Brightness ( int source_type, int pq_mode );
- int Tv_FactorySetPQMode_Contrast ( int source_type, int pq_mode, int contrast );
- int Tv_FactoryGetPQMode_Contrast ( int source_type, int pq_mode );
- int Tv_FactorySetPQMode_Saturation ( int source_type, int pq_mode, int saturation );
- int Tv_FactoryGetPQMode_Saturation ( int source_type, int pq_mode );
- int Tv_FactorySetPQMode_Hue ( int source_type, int pq_mode, int hue );
- int Tv_FactoryGetPQMode_Hue ( int source_type, int pq_mode );
- int Tv_FactorySetPQMode_Sharpness ( int source_type, int pq_mode, int sharpness );
- int Tv_FactoryGetPQMode_Sharpness ( int source_type, int pq_mode );
- int Tv_FactorySetColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain );
- int Tv_FactorySaveColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain );
- int Tv_FactoryGetColorTemp_Rgain ( int source_type, int colortemp_mode );
- int Tv_FactorySetColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain );
- int Tv_FactorySaveColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain );
- int Tv_FactoryGetColorTemp_Ggain ( int source_type, int colortemp_mode );
- int Tv_FactorySetColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain );
- int Tv_FactorySaveColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain );
- int Tv_FactoryGetColorTemp_Bgain ( int source_type, int colortemp_mode );
- int Tv_FactorySetColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset );
- int Tv_FactorySaveColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset );
- int Tv_FactoryGetColorTemp_Roffset ( int source_type, int colortemp_mode );
- int Tv_FactorySetColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset );
- int Tv_FactorySaveColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset );
- int Tv_FactoryGetColorTemp_Goffset ( int source_type, int colortemp_mode );
- int Tv_FactorySetColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset );
- int Tv_FactorySaveColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset );
- int Tv_FactoryGetColorTemp_Boffset ( int source_type, int colortemp_mode );
- int GetColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params );
- int Tv_FactorySetTestPattern ( int pattern );
- int Tv_FactoryGetTestPattern ( void );
- int Tv_FactoryResetPQMode ( void );
- int Tv_FactoryResetColorTemp ( void );
- int Tv_FactorySetParamsDefault ( void );
- int Tv_FactorySetDDRSSC ( int step );
- int Tv_FactoryGetDDRSSC ( void );
- int Tv_FactorySetLVDSSSC ( int step );
- int Tv_FactoryGetLVDSSSC ( void );
- int Tv_FactorySetNolineParams ( int noline_params_type, int source_type, noline_params_t noline_params );
- noline_params_t Tv_FactoryGetNolineParams ( int noline_params_type, int source_type );
- int Tv_FactorySetOverscan ( int source_type, int fmt, int status_3d, int trans_fmt, tvin_cutwin_t cutwin_t );
- tvin_cutwin_t Tv_FactoryGetOverscan ( int source_type, int fmt, int status_3d, int trans_fmt );
- //end PQ
-
- //TV TO FBC
- int Tv_FactorySet_FBC_Brightness ( int value );
- int Tv_FactoryGet_FBC_Brightness ( void );
- int Tv_FactorySet_FBC_Contrast( int value );
- int Tv_FactoryGet_FBC_Contrast ( void );
- int Tv_FactorySet_FBC_Saturation( int value );
- int Tv_FactoryGet_FBC_Saturation ( void );
- int Tv_FactorySet_FBC_HueColorTint( int value );
- int Tv_FactoryGet_FBC_HueColorTint ( void );
- int Tv_FactorySet_FBC_Backlight ( int value );
- int Tv_FactoryGet_FBC_Backlight ( void );
- int Tv_FactorySet_FBC_Backlight_N360 ( int value );
- int Tv_FactoryGet_FBC_Backlight_N360 ( void );
- int Tv_FactorySet_FBC_ELEC_MODE( int value );
- int Tv_FactoryGet_FBC_ELEC_MODE( void );
- int Tv_FactorySet_FBC_Picture_Mode ( int mode );
- int Tv_FactoryGet_FBC_Picture_Mode ( void );
- int Tv_FactorySet_FBC_Set_Test_Pattern ( int mode );
- int Tv_FactoryGet_FBC_Get_Test_Pattern ( void );
- int Tv_FactorySet_FBC_Gain_Red( int value );
- int Tv_FactoryGet_FBC_Gain_Red ( void );
- int Tv_FactorySet_FBC_Gain_Green( int value );
- int Tv_FactoryGet_FBC_Gain_Green( void );
- int Tv_FactorySet_FBC_Gain_Blue( int value );
- int Tv_FactoryGet_FBC_Gain_Blue ( void );
- int Tv_FactorySet_FBC_Offset_Red( int value );
- int Tv_FactoryGet_FBC_Offset_Red ( void );
- int Tv_FactorySet_FBC_Offset_Green( int value );
- int Tv_FactoryGet_FBC_Offset_Green( void );
- int Tv_FactorySet_FBC_Offset_Blue( int value );
- int Tv_FactoryGet_FBC_Offset_Blue ( void );
- int Tv_FactoryGetWhiteBalanceRedGain(int source_type, int colortemp_mode);
- int Tv_FactoryGetWhiteBalanceGreenGain(int source_type, int colortemp_mode);
- int Tv_FactoryGetWhiteBalanceBlueGain(int source_type, int colortemp_mode);
- int Tv_FactoryGetWhiteBalanceRedOffset(int source_type, int colortemp_mode);
- int Tv_FactoryGetWhiteBalanceGreenOffset(int source_type, int colortemp_mode);
- int Tv_FactoryGetWhiteBalanceBlueOffset(int source_type, int colortemp_mode);
- int Tv_FactorySetWhiteBalanceRedGain(int source_type, int colortemp_mode, int value);
- int Tv_FactorySetWhiteBalanceGreenGain(int source_type, int colortemp_mode, int value);
- int Tv_FactorySetWhiteBalanceBlueGain(int source_type, int colortemp_mode, int value);
- int Tv_FactorySetWhiteBalanceRedOffset(int source_type, int colortemp_mode, int value);
- int Tv_FactorySetWhiteBalanceGreenOffset(int source_type, int colortemp_mode, int value);
- int Tv_FactorySetWhiteBalanceBlueOffset(int source_type, int colortemp_mode, int value);
- int Tv_FactorySetWhiteBalanceColorTempMode(int source_type, int colortemp_mode, int is_save);
- int Tv_FactoryGetWhiteBalanceColorTempMode(int source_type );
- int Tv_FactoryWhiteBalanceFormatInputFbcGainParams(int value);
- int Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(int value);
- int Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(int value);
- int Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(int value);
- int Tv_FactorySaveWhiteBalancePramas(int source_type, int tempmode, int r_gain, int g_gain, int b_gain, int r_offset, int g_offset, int b_offset);
- int Tv_FactoryCloseWhiteBalanceGrayPattern();
- int Tv_FactoryOpenWhiteBalanceGrayPattern();
- int Tv_FactorySetWhiteBalanceGrayPattern(int value);
- int Tv_FactoryGetWhiteBalanceGrayPattern();
- int Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(int Tempmode);
- int Tv_FactoryWhiteBalanceColorTempMappingFbc2G9(int Tempmode);
- int Tv_FactoryWhiteBalanceGetAllParams(int Tempmode, tcon_rgb_ogo_t *params);
- int Tv_FactorySet_FBC_GrayPattern(int value);
- int Tv_FactoryOpen_FBC_GrayPattern();
- int Tv_FactoryClose_FBC_GrayPattern();
- int Tv_FactorySet_FBC_ColorTemp_Mode( int mode );
- int Tv_FactoryGet_FBC_ColorTemp_Mode ( void );
- int Tv_FactorySet_FBC_ColorTemp_Mode_N360( int mode );
- int Tv_FactoryGet_FBC_ColorTemp_Mode_N360 ( void );
- int Tv_FactorySet_FBC_WB_Initial( int status );
- int Tv_FactoryGet_FBC_WB_Initial ( void );
- int Tv_FactorySet_FBC_ColorTemp_Batch(vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params);
- int Tv_FactoryGet_FBC_ColorTemp_Batch ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params );
- int Tv_FactorySet_WB_G9_To_FBC( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params );
- int Tv_FactoryGet_WB_G9_To_FBC ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params );
- int Tv_FactoryGetItemFromBatch(vpp_color_temperature_mode_t colortemp_mode, int item);
- int Tv_FactorySet_FBC_CM_OnOff( unsigned char status );
- int Tv_FactoryGet_FBC_CM_OnOff (void);
- int Tv_FactorySet_FBC_DNLP_OnOff( unsigned char status );
- int Tv_FactoryGet_FBC_DNLP_OnOff (void);
- int Tv_FactorySet_FBC_Gamma_OnOff( unsigned char status );
- int Tv_FactoryGet_FBC_Gamma_OnOff (void);
- int Tv_FactorySet_FBC_WhiteBalance_OnOff( unsigned char status );
- int Tv_FactoryGet_FBC_WhiteBalance_OnOff (void);
- int Tv_FactorySet_FBC_Thermal_State( int value );
- int Tv_FactorySet_FBC_backlight_onoff(int value);
- int Tv_FactoryGet_FBC_backlight_onoff ( void );
- int Tv_FactorySet_FBC_LVDS_SSG_Set( int value );
- int Tv_FactorySet_FBC_LightSensor_Status_N310 ( int value );
- int Tv_FactoryGet_FBC_LightSensor_Status_N310 ( void );
- int Tv_FactorySet_FBC_Dream_Panel_Status_N310 ( int value );
- int Tv_FactoryGet_FBC_Dream_Panel_Status_N310 ( void );
- int Tv_FactorySet_FBC_MULT_PQ_Status_N310 ( int value );
- int Tv_FactoryGet_FBC_MULT_PQ_Status_N310 ( void );
- int Tv_FactorySet_FBC_MEMC_Status_N310 ( int value );
- int Tv_FactoryGet_FBC_MEMC_Status_N310 ( void );
- //end TV TO FBC
-
- //audio
- int SetAudioMuteForSystem(int muteOrUnmute);
- int GetAudioMuteForSystem();
- int SetAudioAVOutMute(int muteStatus);
- int GetAudioAVOutMute();
- int SetAudioSPDIFMute(int muteStatus);
- int GetAudioSPDIFMute();
- int SetAudioMasterVolume(int tmp_vol);
- int GetAudioMasterVolume();
- int SaveCurAudioMasterVolume(int tmp_vol);
- int GetCurAudioMasterVolume();
- int SetAudioBalance(int tmp_val);
- int GetAudioBalance();
- int SaveCurAudioBalance(int tmp_val);
- int GetCurAudioBalance();
- int SetAudioSupperBassVolume(int tmp_vol);
- int GetAudioSupperBassVolume();
- int SaveCurAudioSupperBassVolume(int tmp_vol);
- int GetCurAudioSupperBassVolume();
- int SetAudioSupperBassSwitch(int tmp_val);
- int GetAudioSupperBassSwitch();
- int SaveCurAudioSupperBassSwitch(int tmp_val);
- int GetCurAudioSupperBassSwitch();
- int SetAudioSRSSurround(int tmp_val);
- int GetAudioSRSSurround();
- int SaveCurAudioSrsSurround(int tmp_val);
- int GetCurAudioSRSSurround();
- int SetAudioSrsDialogClarity(int tmp_val);
- int GetAudioSrsDialogClarity();
- int SaveCurAudioSrsDialogClarity(int tmp_val);
- int GetCurAudioSrsDialogClarity();
- int SetAudioSrsTruBass(int tmp_val);
- int GetAudioSrsTruBass();
- int SaveCurAudioSrsTruBass(int tmp_val);
- int GetCurAudioSrsTruBass();
- int SetAudioBassVolume(int tmp_vol);
- int GetAudioBassVolume();
- int SaveCurAudioBassVolume(int tmp_vol);
- int GetCurAudioBassVolume();
- int SetAudioTrebleVolume(int tmp_vol);
- int GetAudioTrebleVolume();
- int SaveCurAudioTrebleVolume(int tmp_vol);
- int GetCurAudioTrebleVolume();
- int SetAudioSoundMode(int tmp_val);
- int GetAudioSoundMode();
- int SaveCurAudioSoundMode(int tmp_val);
- int GetCurAudioSoundMode();
- int SetAudioWallEffect(int tmp_val);
- int GetAudioWallEffect();
- int SaveCurAudioWallEffect(int tmp_val);
- int GetCurAudioWallEffect();
- int SetAudioEQMode(int tmp_val);
- int GetAudioEQMode();
- int SaveCurAudioEQMode(int tmp_val);
- int GetCurAudioEQMode();
- int GetAudioEQRange(int range_buf[]);
- int SetAudioEQGain(int gain_buf[]);
- int GetAudioEQGain(int gain_buf[]);
- int SaveCurAudioEQGain(int gain_buf[]);
- int GetCurAudioEQGain(int gain_buf[]);
- int GetAudioEQBandCount();
- int SetAudioEQSwitch(int switch_val);
- int SetAudioSPDIFSwitch(int tmp_val);
- int amAudioSetDoubleOutputSwitch(int en_val);
- int UsbAudioOuputModuleSwitch(int sw);
- int GetAmAudioSetDoubleOutputSwitch();
- int GetCurUsbAudioOuputModuleSwitch();
- int SaveCurAudioSPDIFSwitch(int tmp_val);
- int GetCurAudioSPDIFSwitch();
- int SetAudioSPDIFMode(int tmp_val);
- int SaveCurAudioSPDIFMode(int tmp_val);
- int GetCurAudioSPDIFMode();
- int OpenAmAudio(unsigned int sr, int output_device);
- int CloseAmAudio(void);
- int SetAmAudioInputSr(unsigned int sr, int output_device);
- int SetAmAudioOutputMode(int mode);
- int SetAmAudioMusicGain(int gain);
- int SetAmAudioLeftGain(int gain);
- int SetAmAudioRightGain(int gain);
- int AudioLineInSelectChannel(int audio_channel);
- int SetKalaokIO(int level);
- int AudioSetAudioInSource(int audio_src_in_type);
- int AudioSetLineInCaptureVolume(int l_vol, int r_vol);
- int AudioHandleHeadsetPlugIn();
- int AudioHandleHeadsetPullOut();
- //end audio
-
-protected:
- class CTvMsgQueue: public CMsgQueueThread, public CAv::IObserver, public CTvScanner::IObserver , public CTvEpg::IObserver, public CFrontEnd::IObserver
- {
- public:
- static const int TV_MSG_COMMON = 0;
- static const int TV_MSG_STOP_ANALYZE_TS = 1;
- static const int TV_MSG_START_ANALYZE_TS = 2;
- static const int TV_MSG_CHECK_FE_DELAY = 3;
- static const int TV_MSG_AV_EVENT = 4;
- static const int TV_MSG_FE_EVENT = 5;
- static const int TV_MSG_SCAN_EVENT = 6;
- static const int TV_MSG_EPG_EVENT = 7;
-
- CTvMsgQueue(CTv *tv);
- ~CTvMsgQueue();
- //scan observer
- void onEvent ( const CTvScanner::ScannerEvent &ev );
- //epg observer
- void onEvent ( const CTvEpg::EpgEvent &ev );
- //FE observer
- void onEvent ( const CFrontEnd::FEEvent &ev );
- //AV
- void onEvent(const CAv::AVEvent &ev);
- private:
- virtual void handleMessage ( CMessage &msg );
- CTv *mpTv;
- };
-
-
- int resetDmxAndAvSource();
- int stopScan();
- int stopPlaying();
- void sendTvEvent ( const CTvEv &ev );
- int startPlayTv ( int source, int vid, int aid, int vfat, int afat );
- //scan observer
- void onEvent ( const CTvScanner::ScannerEvent &ev );
- //epg observer
- void onEvent ( const CTvEpg::EpgEvent &ev );
- //FE observer
- void onEvent ( const CFrontEnd::FEEvent &ev );
- //AV
- void onEvent(const CAv::AVEvent &ev);
- bool Tv_Start_Analyze_Ts ( int channelID );
- bool Tv_Stop_Analyze_Ts();
- int Tvin_Stop ( void );
- int SetBypassModulesFor3D ( VIDEO_3D_MODE_E );
- int Vpp_SetDisplayMode ( vpp_display_mode_t display_mode, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt );
- int Tvin_GetTvinConfig();
- int Tv_init_audio();
- int Tv_MiscSetBySource ( tv_source_input_t );
- void print_version_info ( void );
- int dtvCleanProgramByFreq ( int freq );
- /*********************** Audio start **********************/
- int SetAudioMainVolLutBufName();
- int SetAudioSupperBassVolLutBufName();
- int SetAudioVolDigitLUTBuf ( tv_source_input_t source_input );
- int Tv_SetAudioInSource (tv_source_input_t source_input);
- void Tv_SetAudioOutputSwap_Type (tv_source_input_t source_input);
- /*********************** Audio end **********************/
-
- //
- virtual void onSigToStable();
- virtual void onSigStableToUnstable();
- virtual void onSigStableToUnSupport();
- virtual void onSigStableToNoSig();
- virtual void onSigUnStableToUnSupport();
- virtual void onSigUnStableToNoSig();
- virtual void onSigNullToNoSig();
- virtual void onSigNoSigToUnstable();
- virtual void onSigStillStable();
- virtual void onSigStillUnstable();
- virtual void onSigStillNosig();
- virtual void onSigStillNoSupport();
- virtual void onSigStillNull();
- virtual void onStableSigFmtChange();
- virtual void onStableTransFmtChange();
- virtual void onSigDetectEnter();
- virtual void onLoop();
-
- virtual void onSourceConnect(int source_type, int connect_status);
- virtual void onHDMIRxCECMessage(int msg_len, unsigned char msg_buf[]);
- virtual void onUpgradeStatus(int status, int progress);
- virtual void onSerialCommunication(int dev_id, int rd_len, unsigned char data_buf[]);
- virtual void onThermalDetect(int state);
-
- CTvEpg mTvEpg;
- CTvScanner mTvScanner;
- mutable Mutex mLock;
- CTvTime mTvTime;
- CVpp mVpp;
- CTvin mTvin;
- CTvRecord mTvRec;
- CFrontEnd mFrontDev;
- CTvDimension mTvVchip;
- CTvSubtitle mTvSub;
- CTvAudio mTvAudio;
- CAv mAv;
- CTvDmx mTvDmx;
- CTvMsgQueue mTvMsgQueue;
- AutoBackLight mAutoBackLight;
- //
- volatile int mTvAction;
- volatile TvRunStatus_t mTvStatus;
- volatile tv_source_input_t m_source_input;
- volatile tv_source_input_t m_last_source_input;
- /* for tvin window mode and pos*/
- tvin_window_pos_t m_win_pos;
- tv_window_mode_t m_win_mode;
- int m_blackout_enable;//1 enable 0 disable
- int m_cur_playing_prog_id;
- tvin_sig_fmt_t m_cur_set_info_fmt;
- bool mIsFbc;
-
-
- bool mlastlockstatus;
- String8 mlastdm;
- String8 mlastabbrev;
- String8 mlastabbtext;
- pthread_t vchipthread;
- int mvchip_running;
- friend class CTvMsgQueue;
- int mCurAnalyzeTsChannelID;
- int audio_sr;
- TvIObserver *mpObserver;
- tv_dtv_scan_running_status_t mDtvScanRunningStatus;
- volatile tv_config_t gTvinConfig;
- int dtv_auto_3d_flag;
- bool m_autoset_displayfreq;
- int m_sig_stable_nums;
- bool m_is_set_hdmi_edid;
- /** for L/R or B/T 3d mode overscan **/
- /** for 3D **/
- VIDEO_3D_MODE_T m_mode_3d;
- /** for HDMI-in sampling detection. **/
- volatile bool m_is_hdmi_sr_detect_start;
- int m_hdmi_sampling_rate;
-};
-
-#endif //_CDTV_H
+
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CDtv.h
+// @ Date : 2013-11
+// @ Author :
+
+#if !defined(_CDTV_H)
+#define _CDTV_H
+#include <stdint.h>
+#include <sys/time.h>
+#include <am_epg.h>
+#include <am_mem.h>
+#include <utils/threads.h>
+#include "CTvProgram.h"
+#include "CTvEpg.h"
+#include "CTvScanner.h"
+#include "CTvLog.h"
+#include "CTvTime.h"
+#include "CTvEvent.h"
+#include "CTvEv.h"
+#include "CTvBooking.h"
+#include "CFrontEnd.h"
+#include "../vpp/CVpp.h"
+#include "../vpp/CPQdb.h"
+#include "../tvin/CTvin.h"
+#include "../tvutils/CMsgQueue.h"
+#include "../tvutils/CSerialCommunication.h"
+#include "../tvutils/serial_operate.h"
+#include "CTvRecord.h"
+#include "CTvSubtitle.h"
+#include "CUpgradeFBC.h"
+#include "CAv.h"
+#include "CTvDmx.h"
+#include "../audio/audio_api.h"
+#include "AutoBackLight.h"
+using namespace android;
+
+static const char *TV_CONFIG_FILE_PATH = "/param/tvconfig.conf";
+static const char *TV_DB_PATH = "/param/dtv.db";
+static const char *TV_CONFIG_FILE_SYSTEM_PATH = "/system/etc/tvconfig.conf";
+static const char *TV_CONFIG_FILE_PARAM_PATH = "/param/tvconfig.conf";
+static const char *TV_CHANNEL_LIST_SYSTEM_PATH = "/system/etc/tv_default.xml";
+static const char *TV_CHANNEL_LIST_PARAM_PATH = "/param/tv_default.xml";
+static const char *TV_SSM_DATA_SYSTEM_PATH = "/system/etc/ssm_data";
+static const char *TV_SSM_DATA_PARAM_PATH = "/param/ssm_data";
+
+#define DEVICE_CLASS_TSYNC_AV_THRESHOLD_MIN "/sys/class/tsync/av_threshold_min"
+#define AV_THRESHOLD_MIN_MS "540000" //6S = 6*90000
+
+#define DEFAULT_COMPENSATION_VALUE 0
+
+
+typedef enum tv_fmt_ratio_e {
+ RATIO_43,
+ RATIO_169,
+ RATIO_MAX,
+} tv_fmt_ratio_t;
+
+typedef enum tv_color_fmt_e {
+ COLOR_RGB444,
+ COLOR_YUV422,
+ COLOR_YUV444,
+ COLOR_MAX,
+} tv_color_fmt_t;
+
+
+
+typedef enum tv_window_mode_e {
+ NORMAL_WONDOW,
+ PREVIEW_WONDOW,
+} tv_window_mode_t;
+
+typedef enum tv_dtv_scan_running_status_e {
+ DTV_SCAN_RUNNING_NORMAL,
+ DTV_SCAN_RUNNING_ANALYZE_CHANNEL,
+} tv_dtv_scan_running_status_t;
+
+typedef struct tv_config_s {
+ unsigned int overscan_3d;
+ unsigned int tv_out_counter;
+ bool kernelpet_disable;
+ unsigned int kernelpet_timeout;
+ bool userpet;
+ unsigned int userpet_timeout;
+ unsigned int userpet_reset;
+ unsigned int dtv_videopath_switch;
+ bool title_shake;
+ bool memory512m;
+} tv_config_t;
+
+typedef enum TvRunStatus_s {
+ TV_INIT_ED = -1,
+ TV_OPEN_ED = 0,
+ TV_START_ED ,
+ TV_RESUME_ED,
+ TV_PAUSE_ED,
+ TV_STOP_ED,
+ TV_CLOSE_ED,
+} TvRunStatus_t;
+
+class CTv : public CTvin::CTvinSigDetect::ISigDetectObserver, public CTvin::CSourceConnectDetect::ISourceConnectObserver, public CTvin::CHDMIRxCEC::IHDMIRxCECObserver, public CUpgradeFBC::IUpgradeFBCObserver, public CSerialCommunication::ISerialCommunicationObserver {
+public:
+ static const int TV_ACTION_NULL = 0x0000;
+ static const int TV_ACTION_STARTING = 0x0001;
+ static const int TV_ACTION_STOPING = 0x0002;
+ static const int TV_ACTION_SCANNING = 0x0004;
+ static const int TV_ACTION_PLAYING = 0x0008;
+ static const int TV_ACTION_RECORDING = 0x0010;
+ static const int TV_ACTION_SOURCE_SWITCHING = 0x0020;
+public:
+ class TvIObserver {
+ public:
+ TvIObserver() {};
+ virtual ~TvIObserver() {};
+ virtual void onTvEvent ( const CTvEv &ev ) = 0;
+ };
+ //main
+ CTv();
+ virtual ~CTv();
+ virtual int OpenTv ( void );
+ virtual int CloseTv ( void );
+ virtual int StartTvLock ();
+ virtual int StopTvLock ( void );
+ virtual TvRunStatus_t GetTvStatus();
+ virtual int ClearAnalogFrontEnd();
+ virtual tv_source_input_t GetLastSourceInput (void);
+ virtual int SetSourceSwitchInput (tv_source_input_t source_input );
+ virtual tv_source_input_t GetCurrentSourceInputLock ( void );
+ virtual tvin_info_t GetCurrentSignalInfo ( void );
+ virtual int SetPreviewWindow ( tvin_window_pos_t pos );
+ virtual int dtvAutoScan();
+ virtual int dtvManualScan (int beginFreq, int endFreq, int modulation = -1);
+ virtual int atvAutoScan(int videoStd, int audioStd, int searchType);
+ virtual int clearAllProgram(int arg0);
+ virtual int clearDbAllProgramInfoTable();
+ virtual void setSourceSwitchAndPlay();
+ virtual int GetDisplayResolutionConfig();
+ virtual int GetDisplayResolutionInfo();
+ virtual int atvMunualScan ( int startFreq, int endFreq, int videoStd, int audioStd, int store_Type = 0, int channel_num = 0 );
+ virtual int stopScanLock();
+ virtual int dtvAutoScanAtscLock(int attenna, int videoStd, int audioStd);
+ virtual void SetRecordFileName ( char *name );
+ virtual void StartToRecord();
+ virtual void StopRecording();
+ virtual void SetRecCurTsOrCurProgram ( int sel );
+ virtual int startCC(int country, int src, int channel, int service);
+ virtual int stopCC();
+ virtual void printDebugInfo();
+ virtual int playProgramLock ( int progId );
+ virtual int playDvbcProgram ( int progId );
+ virtual int playDtmbProgram ( int progId );
+ virtual int playAtvProgram ( int, int, int, int);
+ virtual int stopPlayingLock();
+ virtual int resetFrontEndPara ( frontend_para_set_t feParms );
+ int SetCurProgramAudioVolumeCompensationVal ( int tmpVal );
+ int GetAudioVolumeCompensationVal(int progDbId);
+ //dtv audio track info
+ int getAudioTrackNum ( int progId );
+ int getAudioInfoByIndex ( int progId, int idx, int *pAFmt, String8 &lang );
+ int switchAudioTrack ( int progId, int idx );
+ int getVideoFormatInfo ( int *pWidth, int *pHeight, int *pFPS, int *pInterlace );
+ int ResetAudioDecoderForPCMOutput();
+ int setAudioChannel ( int channelIdx );
+ int getAudioChannel();
+ int setTvObserver (TvIObserver *ob);
+ int getAtscAttenna();
+ long getTvTime()
+ {
+ return mTvTime.getTime();
+ };
+ void getFrontendStatus();
+ int getFrontendSignalStrength();
+ int getFrontendSNR();
+ int getFrontendBER();
+ int getChannelInfoBydbID ( int dbID, channel_info_t &chan_info );
+ int setBlackoutEnable(int enable);
+ int getSaveBlackoutEnable();
+ void startAutoBackLight();
+ void stopAutoBackLight();
+ int getAutoBackLight_on_off();
+ int saveATVProgramID ( int dbID );
+ int getATVProgramID ( void );
+ int saveDTVProgramID ( int dbID );
+ int getDTVProgramID ( void );
+ int getCurPlayProgId();
+ int getATVMinMaxFreq ( int *scanMinFreq, int *scanMaxFreq );
+
+ int Tv_SSMRestoreDefaultSetting();
+
+ //
+ int GetSourceConnectStatus(int source_input);
+ int IsDVISignal();
+ int isVgaFmtInHdmi();
+ //
+ int getHDMIFrameRate ( void );
+ void RefreshAudioMasterVolume ( tv_source_input_t source_input );
+
+ int Tv_Set3DMode ( VIDEO_3D_MODE_T mode );
+ VIDEO_3D_MODE_T Tv_Get3DMode ( void );
+ int Tv_Set3DLRSwith ( int on_off);
+ int Tv_Get3DLRSwith ( void );
+ int Tv_Set3DTo2DMode ( int mode);
+ int Tv_Get3DTo2DMode ( void );
+ int Tv_Set3DDepth ( int value );
+ int GetSave3DDepth ( void );
+ is_3d_type_t Check2Dor3D ( VIDEO_3D_MODE_T mode3d, tvin_trans_fmt_t trans_fmt );
+ int Tvin_SetPLLValues ();
+ int SetCVD2Values ();
+ unsigned int Vpp_GetDisplayResolutionInfo(tvin_window_pos_t *win_pos);
+ int get_hdmi_sampling_rate();
+ //SSM
+ int Tv_SSMFacRestoreDefaultSetting();
+
+ CTvin::CTvinSigDetect mSigDetectThread;
+ CTvin::CSourceConnectDetect mSourceConnectDetectThread;
+ CTvin::CHDMIRxCEC mHDMIRxCEC;
+ CUpgradeFBC *mpUpgradeFBC;
+ CSerialCommunication mSerialA;
+ CSerialCommunication mSerialB;
+ CSerialCommunication mSerialC;
+
+ int SendHDMIRxCECCustomMessage(unsigned char data_buf[]);
+ int SendHDMIRxCECCustomMessageAndWaitReply(unsigned char data_buf[], unsigned char reply_buf[], int WaitCmd, int timeout);
+ int SendHDMIRxCECBoradcastStandbyMessage();
+ int SendHDMIRxCECGiveCECVersionMessage(tv_source_input_t source_input, unsigned char data_buf[]);
+ int SendHDMIRxCECGiveDeviceVendorIDMessage(tv_source_input_t source_input, unsigned char data_buf[]);
+ int SendHDMIRxCECGiveOSDNameMessage(tv_source_input_t source_input, unsigned char data_buf[]);
+
+ int GetHdmiHdcpKeyKsvInfo(int data_buf[]);
+ int StartUpgradeFBC(char *file_name, int mode, int upgrade_blk_size);
+ int SetSerialSwitch(int dev_id, int switch_val);
+ int SendSerialData(int dev_id, int data_len, unsigned char data_buf[]);
+ int ChannelExport(const char *destPath);
+ int ChannelImport(const char *srcPath);
+ int Tv_GetProjectInfo(project_info_t *ptrInfo);
+ int Tv_GetPlatformType();
+ int Tv_SetDDDRCMode(tv_source_input_t source_input);
+ int Tv_SetAudioSourceType (tv_source_input_t source_input);
+
+ //PQ
+ int Tv_SetBrightness ( int brightness, tv_source_input_type_t source_type, int is_save );
+ int Tv_GetBrightness ( tv_source_input_type_t source_type );
+ int Tv_SetContrast ( int contrast, tv_source_input_type_t source_type, int is_save );
+ int Tv_GetContrast ( tv_source_input_type_t source_type );
+ int Tv_SetSaturation ( int satuation, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, int is_save );
+ int Tv_GetSaturation ( tv_source_input_type_t source_type );
+ int Tv_SetHue ( int hue, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, int is_save );
+ int Tv_GetHue ( tv_source_input_type_t source_type );
+ int Tv_SetPQMode ( vpp_picture_mode_t mode, tv_source_input_type_t source_type, int is_save );
+ vpp_picture_mode_t Tv_GetPQMode ( tv_source_input_type_t source_type );
+ int Tv_SetSharpness ( int value, tv_source_input_type_t source_type, int en, int is_save );
+ int Tv_GetSharpness ( tv_source_input_type_t source_type );
+ int Tv_SaveSharpness ( int value, tv_source_input_type_t source_type, int is_enable );
+ int Tv_SetBacklight ( int value, tv_source_input_type_t source_type, int is_save );
+ int Tv_GetBacklight ( tv_source_input_type_t source_type );
+ int Tv_SetColorTemperature ( vpp_color_temperature_mode_t mode, tv_source_input_type_t source_type, int is_save );
+ vpp_color_temperature_mode_t Tv_GetColorTemperature ( tv_source_input_type_t source_type );
+ int Tv_SaveColorTemp ( vpp_color_temperature_mode_t mode, tv_source_input_type_t source_type );
+ int Tv_SetDisplayMode ( vpp_display_mode_t mode, tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, int is_save );
+ vpp_display_mode_t Tv_GetDisplayMode ( tv_source_input_type_t source_type );
+ int Tv_SaveDisplayMode ( vpp_display_mode_t mode, tv_source_input_type_t source_type );
+ int Tv_SetNoiseReductionMode ( vpp_noise_reduction_mode_t mode, tv_source_input_type_t source_type, int is_save );
+ vpp_noise_reduction_mode_t Tv_GetNoiseReductionMode ( tv_source_input_type_t source_type );
+ int Tv_SaveNoiseReductionMode ( vpp_noise_reduction_mode_t mode, tv_source_input_type_t source_type );
+ int Tv_SetRGBOGO_PostOffset(int type, int offset);
+ int Tv_SetRGBOGO_Gain(int type, int gain);
+ int Tv_GetRGBOGO_PostOffset ( int type );
+ int Tv_GetRGBOGO_Gain ( int type );
+ //
+ int Tv_FactorySetPQMode_Brightness ( int source_type, int pq_mode, int brightness );
+ int Tv_FactoryGetPQMode_Brightness ( int source_type, int pq_mode );
+ int Tv_FactorySetPQMode_Contrast ( int source_type, int pq_mode, int contrast );
+ int Tv_FactoryGetPQMode_Contrast ( int source_type, int pq_mode );
+ int Tv_FactorySetPQMode_Saturation ( int source_type, int pq_mode, int saturation );
+ int Tv_FactoryGetPQMode_Saturation ( int source_type, int pq_mode );
+ int Tv_FactorySetPQMode_Hue ( int source_type, int pq_mode, int hue );
+ int Tv_FactoryGetPQMode_Hue ( int source_type, int pq_mode );
+ int Tv_FactorySetPQMode_Sharpness ( int source_type, int pq_mode, int sharpness );
+ int Tv_FactoryGetPQMode_Sharpness ( int source_type, int pq_mode );
+ int Tv_FactorySetColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain );
+ int Tv_FactorySaveColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain );
+ int Tv_FactoryGetColorTemp_Rgain ( int source_type, int colortemp_mode );
+ int Tv_FactorySetColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain );
+ int Tv_FactorySaveColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain );
+ int Tv_FactoryGetColorTemp_Ggain ( int source_type, int colortemp_mode );
+ int Tv_FactorySetColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain );
+ int Tv_FactorySaveColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain );
+ int Tv_FactoryGetColorTemp_Bgain ( int source_type, int colortemp_mode );
+ int Tv_FactorySetColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset );
+ int Tv_FactorySaveColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset );
+ int Tv_FactoryGetColorTemp_Roffset ( int source_type, int colortemp_mode );
+ int Tv_FactorySetColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset );
+ int Tv_FactorySaveColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset );
+ int Tv_FactoryGetColorTemp_Goffset ( int source_type, int colortemp_mode );
+ int Tv_FactorySetColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset );
+ int Tv_FactorySaveColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset );
+ int Tv_FactoryGetColorTemp_Boffset ( int source_type, int colortemp_mode );
+ int GetColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params );
+ int Tv_FactorySetTestPattern ( int pattern );
+ int Tv_FactoryGetTestPattern ( void );
+ int Tv_FactoryResetPQMode ( void );
+ int Tv_FactoryResetColorTemp ( void );
+ int Tv_FactorySetParamsDefault ( void );
+ int Tv_FactorySetDDRSSC ( int step );
+ int Tv_FactoryGetDDRSSC ( void );
+ int Tv_FactorySetLVDSSSC ( int step );
+ int Tv_FactoryGetLVDSSSC ( void );
+ int Tv_FactorySetNolineParams ( int noline_params_type, int source_type, noline_params_t noline_params );
+ noline_params_t Tv_FactoryGetNolineParams ( int noline_params_type, int source_type );
+ int Tv_FactorySetOverscan ( int source_type, int fmt, int status_3d, int trans_fmt, tvin_cutwin_t cutwin_t );
+ tvin_cutwin_t Tv_FactoryGetOverscan ( int source_type, int fmt, int status_3d, int trans_fmt );
+ //end PQ
+
+ //TV TO FBC
+ int Tv_FactorySet_FBC_Brightness ( int value );
+ int Tv_FactoryGet_FBC_Brightness ( void );
+ int Tv_FactorySet_FBC_Contrast( int value );
+ int Tv_FactoryGet_FBC_Contrast ( void );
+ int Tv_FactorySet_FBC_Saturation( int value );
+ int Tv_FactoryGet_FBC_Saturation ( void );
+ int Tv_FactorySet_FBC_HueColorTint( int value );
+ int Tv_FactoryGet_FBC_HueColorTint ( void );
+ int Tv_FactorySet_FBC_Backlight ( int value );
+ int Tv_FactoryGet_FBC_Backlight ( void );
+ int Tv_FactorySet_FBC_Backlight_N360 ( int value );
+ int Tv_FactoryGet_FBC_Backlight_N360 ( void );
+ int Tv_FactorySet_FBC_ELEC_MODE( int value );
+ int Tv_FactoryGet_FBC_ELEC_MODE( void );
+ int Tv_FactorySet_FBC_Picture_Mode ( int mode );
+ int Tv_FactoryGet_FBC_Picture_Mode ( void );
+ int Tv_FactorySet_FBC_Set_Test_Pattern ( int mode );
+ int Tv_FactoryGet_FBC_Get_Test_Pattern ( void );
+ int Tv_FactorySet_FBC_Gain_Red( int value );
+ int Tv_FactoryGet_FBC_Gain_Red ( void );
+ int Tv_FactorySet_FBC_Gain_Green( int value );
+ int Tv_FactoryGet_FBC_Gain_Green( void );
+ int Tv_FactorySet_FBC_Gain_Blue( int value );
+ int Tv_FactoryGet_FBC_Gain_Blue ( void );
+ int Tv_FactorySet_FBC_Offset_Red( int value );
+ int Tv_FactoryGet_FBC_Offset_Red ( void );
+ int Tv_FactorySet_FBC_Offset_Green( int value );
+ int Tv_FactoryGet_FBC_Offset_Green( void );
+ int Tv_FactorySet_FBC_Offset_Blue( int value );
+ int Tv_FactoryGet_FBC_Offset_Blue ( void );
+ int Tv_FactoryGetWhiteBalanceRedGain(int source_type, int colortemp_mode);
+ int Tv_FactoryGetWhiteBalanceGreenGain(int source_type, int colortemp_mode);
+ int Tv_FactoryGetWhiteBalanceBlueGain(int source_type, int colortemp_mode);
+ int Tv_FactoryGetWhiteBalanceRedOffset(int source_type, int colortemp_mode);
+ int Tv_FactoryGetWhiteBalanceGreenOffset(int source_type, int colortemp_mode);
+ int Tv_FactoryGetWhiteBalanceBlueOffset(int source_type, int colortemp_mode);
+ int Tv_FactorySetWhiteBalanceRedGain(int source_type, int colortemp_mode, int value);
+ int Tv_FactorySetWhiteBalanceGreenGain(int source_type, int colortemp_mode, int value);
+ int Tv_FactorySetWhiteBalanceBlueGain(int source_type, int colortemp_mode, int value);
+ int Tv_FactorySetWhiteBalanceRedOffset(int source_type, int colortemp_mode, int value);
+ int Tv_FactorySetWhiteBalanceGreenOffset(int source_type, int colortemp_mode, int value);
+ int Tv_FactorySetWhiteBalanceBlueOffset(int source_type, int colortemp_mode, int value);
+ int Tv_FactorySetWhiteBalanceColorTempMode(int source_type, int colortemp_mode, int is_save);
+ int Tv_FactoryGetWhiteBalanceColorTempMode(int source_type );
+ int Tv_FactoryWhiteBalanceFormatInputFbcGainParams(int value);
+ int Tv_FactoryWhiteBalanceFormatInputFbcOffsetParams(int value);
+ int Tv_FactoryWhiteBalanceFormatOutputFbcOffsetParams(int value);
+ int Tv_FactoryWhiteBalanceFormatOutputFbcGainParams(int value);
+ int Tv_FactorySaveWhiteBalancePramas(int source_type, int tempmode, int r_gain, int g_gain, int b_gain, int r_offset, int g_offset, int b_offset);
+ int Tv_FactoryCloseWhiteBalanceGrayPattern();
+ int Tv_FactoryOpenWhiteBalanceGrayPattern();
+ int Tv_FactorySetWhiteBalanceGrayPattern(int value);
+ int Tv_FactoryGetWhiteBalanceGrayPattern();
+ int Tv_FactoryWhiteBalanceColorTempMappingG92Fbc(int Tempmode);
+ int Tv_FactoryWhiteBalanceColorTempMappingFbc2G9(int Tempmode);
+ int Tv_FactoryWhiteBalanceGetAllParams(int Tempmode, tcon_rgb_ogo_t *params);
+ int Tv_FactorySet_FBC_GrayPattern(int value);
+ int Tv_FactoryOpen_FBC_GrayPattern();
+ int Tv_FactoryClose_FBC_GrayPattern();
+ int Tv_FactorySet_FBC_ColorTemp_Mode( int mode );
+ int Tv_FactoryGet_FBC_ColorTemp_Mode ( void );
+ int Tv_FactorySet_FBC_ColorTemp_Mode_N360( int mode );
+ int Tv_FactoryGet_FBC_ColorTemp_Mode_N360 ( void );
+ int Tv_FactorySet_FBC_WB_Initial( int status );
+ int Tv_FactoryGet_FBC_WB_Initial ( void );
+ int Tv_FactorySet_FBC_ColorTemp_Batch(vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params);
+ int Tv_FactoryGet_FBC_ColorTemp_Batch ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params );
+ int Tv_FactorySet_WB_G9_To_FBC( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params );
+ int Tv_FactoryGet_WB_G9_To_FBC ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params );
+ int Tv_FactoryGetItemFromBatch(vpp_color_temperature_mode_t colortemp_mode, int item);
+ int Tv_FactorySet_FBC_CM_OnOff( unsigned char status );
+ int Tv_FactoryGet_FBC_CM_OnOff (void);
+ int Tv_FactorySet_FBC_DNLP_OnOff( unsigned char status );
+ int Tv_FactoryGet_FBC_DNLP_OnOff (void);
+ int Tv_FactorySet_FBC_Gamma_OnOff( unsigned char status );
+ int Tv_FactoryGet_FBC_Gamma_OnOff (void);
+ int Tv_FactorySet_FBC_WhiteBalance_OnOff( unsigned char status );
+ int Tv_FactoryGet_FBC_WhiteBalance_OnOff (void);
+ int Tv_FactorySet_FBC_Thermal_State( int value );
+ int Tv_FactorySet_FBC_backlight_onoff(int value);
+ int Tv_FactoryGet_FBC_backlight_onoff ( void );
+ int Tv_FactorySet_FBC_LVDS_SSG_Set( int value );
+ int Tv_FactorySet_FBC_LightSensor_Status_N310 ( int value );
+ int Tv_FactoryGet_FBC_LightSensor_Status_N310 ( void );
+ int Tv_FactorySet_FBC_Dream_Panel_Status_N310 ( int value );
+ int Tv_FactoryGet_FBC_Dream_Panel_Status_N310 ( void );
+ int Tv_FactorySet_FBC_MULT_PQ_Status_N310 ( int value );
+ int Tv_FactoryGet_FBC_MULT_PQ_Status_N310 ( void );
+ int Tv_FactorySet_FBC_MEMC_Status_N310 ( int value );
+ int Tv_FactoryGet_FBC_MEMC_Status_N310 ( void );
+ //end TV TO FBC
+
+ //audio
+ int SetAudioMuteForSystem(int muteOrUnmute);
+ int GetAudioMuteForSystem();
+ int SetAudioAVOutMute(int muteStatus);
+ int GetAudioAVOutMute();
+ int SetAudioSPDIFMute(int muteStatus);
+ int GetAudioSPDIFMute();
+ int SetAudioMasterVolume(int tmp_vol);
+ int GetAudioMasterVolume();
+ int SaveCurAudioMasterVolume(int tmp_vol);
+ int GetCurAudioMasterVolume();
+ int SetAudioBalance(int tmp_val);
+ int GetAudioBalance();
+ int SaveCurAudioBalance(int tmp_val);
+ int GetCurAudioBalance();
+ int SetAudioSupperBassVolume(int tmp_vol);
+ int GetAudioSupperBassVolume();
+ int SaveCurAudioSupperBassVolume(int tmp_vol);
+ int GetCurAudioSupperBassVolume();
+ int SetAudioSupperBassSwitch(int tmp_val);
+ int GetAudioSupperBassSwitch();
+ int SaveCurAudioSupperBassSwitch(int tmp_val);
+ int GetCurAudioSupperBassSwitch();
+ int SetAudioSRSSurround(int tmp_val);
+ int GetAudioSRSSurround();
+ int SaveCurAudioSrsSurround(int tmp_val);
+ int GetCurAudioSRSSurround();
+ int SetAudioSrsDialogClarity(int tmp_val);
+ int GetAudioSrsDialogClarity();
+ int SaveCurAudioSrsDialogClarity(int tmp_val);
+ int GetCurAudioSrsDialogClarity();
+ int SetAudioSrsTruBass(int tmp_val);
+ int GetAudioSrsTruBass();
+ int SaveCurAudioSrsTruBass(int tmp_val);
+ int GetCurAudioSrsTruBass();
+ int SetAudioBassVolume(int tmp_vol);
+ int GetAudioBassVolume();
+ int SaveCurAudioBassVolume(int tmp_vol);
+ int GetCurAudioBassVolume();
+ int SetAudioTrebleVolume(int tmp_vol);
+ int GetAudioTrebleVolume();
+ int SaveCurAudioTrebleVolume(int tmp_vol);
+ int GetCurAudioTrebleVolume();
+ int SetAudioSoundMode(int tmp_val);
+ int GetAudioSoundMode();
+ int SaveCurAudioSoundMode(int tmp_val);
+ int GetCurAudioSoundMode();
+ int SetAudioWallEffect(int tmp_val);
+ int GetAudioWallEffect();
+ int SaveCurAudioWallEffect(int tmp_val);
+ int GetCurAudioWallEffect();
+ int SetAudioEQMode(int tmp_val);
+ int GetAudioEQMode();
+ int SaveCurAudioEQMode(int tmp_val);
+ int GetCurAudioEQMode();
+ int GetAudioEQRange(int range_buf[]);
+ int SetAudioEQGain(int gain_buf[]);
+ int GetAudioEQGain(int gain_buf[]);
+ int SaveCurAudioEQGain(int gain_buf[]);
+ int GetCurAudioEQGain(int gain_buf[]);
+ int GetAudioEQBandCount();
+ int SetAudioEQSwitch(int switch_val);
+ int SetAudioSPDIFSwitch(int tmp_val);
+ int amAudioSetDoubleOutputSwitch(int en_val);
+ int UsbAudioOuputModuleSwitch(int sw);
+ int GetAmAudioSetDoubleOutputSwitch();
+ int GetCurUsbAudioOuputModuleSwitch();
+ int SaveCurAudioSPDIFSwitch(int tmp_val);
+ int GetCurAudioSPDIFSwitch();
+ int SetAudioSPDIFMode(int tmp_val);
+ int SaveCurAudioSPDIFMode(int tmp_val);
+ int GetCurAudioSPDIFMode();
+ int OpenAmAudio(unsigned int sr, int output_device);
+ int CloseAmAudio(void);
+ int SetAmAudioInputSr(unsigned int sr, int output_device);
+ int SetAmAudioOutputMode(int mode);
+ int SetAmAudioMusicGain(int gain);
+ int SetAmAudioLeftGain(int gain);
+ int SetAmAudioRightGain(int gain);
+ int AudioLineInSelectChannel(int audio_channel);
+ int SetKalaokIO(int level);
+ int AudioSetAudioInSource(int audio_src_in_type);
+ int AudioSetLineInCaptureVolume(int l_vol, int r_vol);
+ int AudioHandleHeadsetPlugIn();
+ int AudioHandleHeadsetPullOut();
+ //end audio
+
+protected:
+ class CTvMsgQueue: public CMsgQueueThread, public CAv::IObserver, public CTvScanner::IObserver , public CTvEpg::IObserver, public CFrontEnd::IObserver {
+ public:
+ static const int TV_MSG_COMMON = 0;
+ static const int TV_MSG_STOP_ANALYZE_TS = 1;
+ static const int TV_MSG_START_ANALYZE_TS = 2;
+ static const int TV_MSG_CHECK_FE_DELAY = 3;
+ static const int TV_MSG_AV_EVENT = 4;
+ static const int TV_MSG_FE_EVENT = 5;
+ static const int TV_MSG_SCAN_EVENT = 6;
+ static const int TV_MSG_EPG_EVENT = 7;
+
+ CTvMsgQueue(CTv *tv);
+ ~CTvMsgQueue();
+ //scan observer
+ void onEvent ( const CTvScanner::ScannerEvent &ev );
+ //epg observer
+ void onEvent ( const CTvEpg::EpgEvent &ev );
+ //FE observer
+ void onEvent ( const CFrontEnd::FEEvent &ev );
+ //AV
+ void onEvent(const CAv::AVEvent &ev);
+ private:
+ virtual void handleMessage ( CMessage &msg );
+ CTv *mpTv;
+ };
+
+
+ int resetDmxAndAvSource();
+ int stopScan();
+ int stopPlaying();
+ void sendTvEvent ( const CTvEv &ev );
+ int startPlayTv ( int source, int vid, int aid, int vfat, int afat );
+ //scan observer
+ void onEvent ( const CTvScanner::ScannerEvent &ev );
+ //epg observer
+ void onEvent ( const CTvEpg::EpgEvent &ev );
+ //FE observer
+ void onEvent ( const CFrontEnd::FEEvent &ev );
+ //AV
+ void onEvent(const CAv::AVEvent &ev);
+ bool Tv_Start_Analyze_Ts ( int channelID );
+ bool Tv_Stop_Analyze_Ts();
+ int Tvin_Stop ( void );
+ int SetBypassModulesFor3D ( VIDEO_3D_MODE_E );
+ int Vpp_SetDisplayMode ( vpp_display_mode_t display_mode, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt );
+ int Tvin_GetTvinConfig();
+ int Tv_init_audio();
+ int Tv_MiscSetBySource ( tv_source_input_t );
+ void print_version_info ( void );
+ int dtvCleanProgramByFreq ( int freq );
+ /*********************** Audio start **********************/
+ int SetAudioMainVolLutBufName();
+ int SetAudioSupperBassVolLutBufName();
+ int SetAudioVolDigitLUTBuf ( tv_source_input_t source_input );
+ int Tv_SetAudioInSource (tv_source_input_t source_input);
+ void Tv_SetAudioOutputSwap_Type (tv_source_input_t source_input);
+ /*********************** Audio end **********************/
+
+ //
+ virtual void onSigToStable();
+ virtual void onSigStableToUnstable();
+ virtual void onSigStableToUnSupport();
+ virtual void onSigStableToNoSig();
+ virtual void onSigUnStableToUnSupport();
+ virtual void onSigUnStableToNoSig();
+ virtual void onSigNullToNoSig();
+ virtual void onSigNoSigToUnstable();
+ virtual void onSigStillStable();
+ virtual void onSigStillUnstable();
+ virtual void onSigStillNosig();
+ virtual void onSigStillNoSupport();
+ virtual void onSigStillNull();
+ virtual void onStableSigFmtChange();
+ virtual void onStableTransFmtChange();
+ virtual void onSigDetectEnter();
+ virtual void onLoop();
+
+ virtual void onSourceConnect(int source_type, int connect_status);
+ virtual void onHDMIRxCECMessage(int msg_len, unsigned char msg_buf[]);
+ virtual void onUpgradeStatus(int status, int progress);
+ virtual void onSerialCommunication(int dev_id, int rd_len, unsigned char data_buf[]);
+ virtual void onThermalDetect(int state);
+
+ CTvEpg mTvEpg;
+ CTvScanner mTvScanner;
+ mutable Mutex mLock;
+ CTvTime mTvTime;
+ CVpp mVpp;
+ CTvin mTvin;
+ CTvRecord mTvRec;
+ CFrontEnd mFrontDev;
+ CTvDimension mTvVchip;
+ CTvSubtitle mTvSub;
+ CTvAudio mTvAudio;
+ CAv mAv;
+ CTvDmx mTvDmx;
+ CTvMsgQueue mTvMsgQueue;
+ AutoBackLight mAutoBackLight;
+ //
+ volatile int mTvAction;
+ volatile TvRunStatus_t mTvStatus;
+ volatile tv_source_input_t m_source_input;
+ volatile tv_source_input_t m_last_source_input;
+ /* for tvin window mode and pos*/
+ tvin_window_pos_t m_win_pos;
+ tv_window_mode_t m_win_mode;
+ int m_blackout_enable;//1 enable 0 disable
+ int m_cur_playing_prog_id;
+ tvin_sig_fmt_t m_cur_set_info_fmt;
+ bool mIsFbc;
+
+
+ bool mlastlockstatus;
+ String8 mlastdm;
+ String8 mlastabbrev;
+ String8 mlastabbtext;
+ pthread_t vchipthread;
+ int mvchip_running;
+ friend class CTvMsgQueue;
+ int mCurAnalyzeTsChannelID;
+ int audio_sr;
+ TvIObserver *mpObserver;
+ tv_dtv_scan_running_status_t mDtvScanRunningStatus;
+ volatile tv_config_t gTvinConfig;
+ int dtv_auto_3d_flag;
+ bool m_autoset_displayfreq;
+ int m_sig_stable_nums;
+ bool m_is_set_hdmi_edid;
+ /** for L/R or B/T 3d mode overscan **/
+ /** for 3D **/
+ VIDEO_3D_MODE_T m_mode_3d;
+ /** for HDMI-in sampling detection. **/
+ volatile bool m_is_hdmi_sr_detect_start;
+ int m_hdmi_sampling_rate;
+};
+
+#endif //_CDTV_H
diff --git a/tvapi/libtv/tv/CTvBooking.cpp b/tvapi/libtv/tv/CTvBooking.cpp
index 1ad45db..ad696f3 100644
--- a/tvapi/libtv/tv/CTvBooking.cpp
+++ b/tvapi/libtv/tv/CTvBooking.cpp
@@ -1,162 +1,162 @@
-
-#include "CTvBooking.h"
-#include "CTvDatabase.h"
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#define LOG_TAG "CTvBooking"
-#endif
-int CTvBooking::InitFromCursor(CTvDatabase::Cursor &c)
-{
- int col;
-
- col = c.getColumnIndex("db_id");
- this->id = c.getInt(col);
-
- col = c.getColumnIndex("db_srv_id");
- this->programId = c.getInt(col);
-
- col = c.getColumnIndex("db_evt_id");
- this->eventId = c.getInt(col);
-
- col = c.getColumnIndex("flag");
- this->flag = c.getInt(col);
-
- col = c.getColumnIndex("status");
- this->status = c.getInt(col);
-
- col = c.getColumnIndex("repeat");
- this->repeat = c.getInt(col);
-
- col = c.getColumnIndex("start");
- this->start = (long)c.getInt(col);
-
- col = c.getColumnIndex("duration");
- this->duration = (long)c.getInt(col) ;
-
- col = c.getColumnIndex("srv_name");
- this->progName = c.getString(col);
-
- col = c.getColumnIndex("evt_name");
- this->evtName = c.getString(col);
-
- return 0;
-}
-
-int CTvBooking::selectByID(int id, CTvBooking &CtvBook)
-{
- CTvDatabase::Cursor c;
- String8 sql;
-
- sql = String8("select * from booking_table where booking_table.db_evt_id = ") + String8::format("%d", id);
- CTvDatabase::GetTvDb()->select(sql.string(), c);
- if (c.moveToFirst()) {
- CtvBook.InitFromCursor(c);
- } else {
- c.close();
- return -1;
- }
-
- c.close();
- return 0;
-}
-
-int CTvBooking::getBookedEventList(Vector<sp<CTvBooking> > &vBv)
-{
- String8 cmd;
-
- cmd = String8("select * from booking_table order by start");
-
- CTvDatabase::Cursor c;
- int ret = CTvDatabase::GetTvDb()->select(cmd, c);
-
- if (c.moveToFirst()) {
- do {
- vBv.add(new CTvBooking(c));
- } while (c.moveToNext());
-
-
- } else {
- c.close();
- return -1;
- }
-
- c.close();
- return 0;
-
-}
-
-int CTvBooking::bookProgram(CTvProgram &prog, CTvEvent &evt)
-{
- String8 cmd;
- String8 progName = String8(prog.getName());
- String8 evtName = String8(evt.getName());
-
-
- /*book this program*/
- cmd = String8("insert into booking_table(db_srv_id, db_evt_id, srv_name, evt_name,")
- + String8("start,duration,flag,status,file_name,vid_pid,vid_fmt,aud_pids,aud_fmts,aud_languages,")
- + String8("sub_pids,sub_types,sub_composition_page_ids,sub_ancillary_page_ids,sub_languages,")
- + String8("ttx_pids,ttx_types,ttx_magazine_numbers,ttx_page_numbers,ttx_languages, other_pids,from_storage,repeat)")
- + String8("values(") + String8::format("%d,", prog.getID()) + String8::format("%d,", evt.getEventId()) + progName.string() + String8(",") + evtName.string()
- + String8::format("%d,", evt.getStartTime()) + String8::format("%d,", evt.getEndTime() - evt.getStartTime()) + String8::format("%d,", flag)
- + String8::format("%d,", status) + String8(",") + String8::format("%d,", prog.getVideo()->getPID()) + String8::format("%d,", prog.getVideo()->getFormat())
- + String8::format("%d,", prog.getAudio(0)->getPID()) + String8::format("%d,", prog.getAudio(0)->getFormat()) + prog.getAudio(0)->getLang().string()
- + String8(" , , , , , , , , , , , , ,)");
-
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-
- return 0;
-}
-
-int CTvBooking::deleteBook(int evtIdFlag)
-{
- String8 cmd;
-
- cmd = String8("delete from booking_table where db_evt_id=")
- + String8::format("%d", evtIdFlag);
-
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-
- return 0;
-}
-
-int CTvBooking::bookEvent(int evtId, bool bBookFlag)
-{
- String8 cmd;
-
- cmd = String8("update evt_table set sub_flag=") + String8::format("%d", bBookFlag)
- + String8(" where db_id=") + String8::format("%d", evtId);
-
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-
- if (true == bBookFlag) {
- CTvEvent evt;
- CTvEvent::selectByID(evtId, evt);
-
- CTvProgram prog;
- CTvProgram::selectByID(evt.getProgramId(), prog);
-
- bookProgram(prog, evt);
- } else {
- deleteBook(evtId);
- }
-
- return 0;
-
-}
-
-CTvBooking::CTvBooking(CTvDatabase::Cursor &c)
-{
- InitFromCursor(c);
-}
-
-CTvBooking::CTvBooking()
-{
-}
-
-CTvBooking::~CTvBooking()
-{
-}
-
-
+
+#include "CTvBooking.h"
+#include "CTvDatabase.h"
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#define LOG_TAG "CTvBooking"
+#endif
+int CTvBooking::InitFromCursor(CTvDatabase::Cursor &c)
+{
+ int col;
+
+ col = c.getColumnIndex("db_id");
+ this->id = c.getInt(col);
+
+ col = c.getColumnIndex("db_srv_id");
+ this->programId = c.getInt(col);
+
+ col = c.getColumnIndex("db_evt_id");
+ this->eventId = c.getInt(col);
+
+ col = c.getColumnIndex("flag");
+ this->flag = c.getInt(col);
+
+ col = c.getColumnIndex("status");
+ this->status = c.getInt(col);
+
+ col = c.getColumnIndex("repeat");
+ this->repeat = c.getInt(col);
+
+ col = c.getColumnIndex("start");
+ this->start = (long)c.getInt(col);
+
+ col = c.getColumnIndex("duration");
+ this->duration = (long)c.getInt(col) ;
+
+ col = c.getColumnIndex("srv_name");
+ this->progName = c.getString(col);
+
+ col = c.getColumnIndex("evt_name");
+ this->evtName = c.getString(col);
+
+ return 0;
+}
+
+int CTvBooking::selectByID(int id, CTvBooking &CtvBook)
+{
+ CTvDatabase::Cursor c;
+ String8 sql;
+
+ sql = String8("select * from booking_table where booking_table.db_evt_id = ") + String8::format("%d", id);
+ CTvDatabase::GetTvDb()->select(sql.string(), c);
+ if(c.moveToFirst()) {
+ CtvBook.InitFromCursor(c);
+ } else {
+ c.close();
+ return -1;
+ }
+
+ c.close();
+ return 0;
+}
+
+int CTvBooking::getBookedEventList(Vector<sp<CTvBooking> > &vBv)
+{
+ String8 cmd;
+
+ cmd = String8("select * from booking_table order by start");
+
+ CTvDatabase::Cursor c;
+ int ret = CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if(c.moveToFirst()) {
+ do {
+ vBv.add(new CTvBooking(c));
+ } while(c.moveToNext());
+
+
+ } else {
+ c.close();
+ return -1;
+ }
+
+ c.close();
+ return 0;
+
+}
+
+int CTvBooking::bookProgram(CTvProgram &prog, CTvEvent &evt)
+{
+ String8 cmd;
+ String8 progName = String8(prog.getName());
+ String8 evtName = String8(evt.getName());
+
+
+ /*book this program*/
+ cmd = String8("insert into booking_table(db_srv_id, db_evt_id, srv_name, evt_name,")
+ + String8("start,duration,flag,status,file_name,vid_pid,vid_fmt,aud_pids,aud_fmts,aud_languages,")
+ + String8("sub_pids,sub_types,sub_composition_page_ids,sub_ancillary_page_ids,sub_languages,")
+ + String8("ttx_pids,ttx_types,ttx_magazine_numbers,ttx_page_numbers,ttx_languages, other_pids,from_storage,repeat)")
+ + String8("values(") + String8::format("%d,", prog.getID()) + String8::format("%d,", evt.getEventId()) + progName.string() + String8(",") + evtName.string()
+ + String8::format("%d,", evt.getStartTime()) + String8::format("%d,", evt.getEndTime() - evt.getStartTime()) + String8::format("%d,", flag)
+ + String8::format("%d,", status) + String8(",") + String8::format("%d,", prog.getVideo()->getPID()) + String8::format("%d,", prog.getVideo()->getFormat())
+ + String8::format("%d,", prog.getAudio(0)->getPID()) + String8::format("%d,", prog.getAudio(0)->getFormat()) + prog.getAudio(0)->getLang().string()
+ + String8(" , , , , , , , , , , , , ,)");
+
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+
+ return 0;
+}
+
+int CTvBooking::deleteBook(int evtIdFlag)
+{
+ String8 cmd;
+
+ cmd = String8("delete from booking_table where db_evt_id=")
+ + String8::format("%d", evtIdFlag);
+
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+
+ return 0;
+}
+
+int CTvBooking::bookEvent(int evtId, bool bBookFlag)
+{
+ String8 cmd;
+
+ cmd = String8("update evt_table set sub_flag=") + String8::format("%d", bBookFlag)
+ + String8(" where db_id=") + String8::format("%d", evtId);
+
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+
+ if(true == bBookFlag) {
+ CTvEvent evt;
+ CTvEvent::selectByID(evtId, evt);
+
+ CTvProgram prog;
+ CTvProgram::selectByID(evt.getProgramId(), prog);
+
+ bookProgram(prog, evt);
+ } else {
+ deleteBook(evtId);
+ }
+
+ return 0;
+
+}
+
+CTvBooking::CTvBooking(CTvDatabase::Cursor &c)
+{
+ InitFromCursor(c);
+}
+
+CTvBooking::CTvBooking()
+{
+}
+
+CTvBooking::~CTvBooking()
+{
+}
+
+
diff --git a/tvapi/libtv/tv/CTvBooking.h b/tvapi/libtv/tv/CTvBooking.h
index c46e556..e40561e 100644
--- a/tvapi/libtv/tv/CTvBooking.h
+++ b/tvapi/libtv/tv/CTvBooking.h
@@ -1,84 +1,83 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvBooking.h
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-
-#if !defined(_CTVBOOKING_H)
-#define _CTVBOOKING_H
-
-#include "CTvDatabase.h"
-#include "CTvProgram.h"
-#include "CTvEvent.h"
-#include <utils/String8.h>
-#include <utils/RefBase.h>
-#include <stdlib.h>
-#include "CTvLog.h"
-#define LOG_TAG "CTvBooking"
-
-// ??/ ?
-class CTvBooking : public LightRefBase<CTvBooking>
-{
-public:
- CTvBooking(CTvDatabase::Cursor &c);
- CTvBooking();
- ~CTvBooking();
-
- static int selectByID(int id, CTvBooking &CtvBook);
-
- int bookEvent(int evtId, bool bBookFlag);
- int getBookedEventList(Vector<sp<CTvBooking> > &vBv);
-
- int getBookId()
- {
- return id;
- };
- int getProgramId()
- {
- return programId;
- };
- int getEventId()
- {
- return eventId;
- };
- int getStartTime()
- {
- return start;
- };
- int getDurationTime()
- {
- return duration;
- };
- String8 &getProgName()
- {
- return progName;
- };
- String8 &getEvtName()
- {
- return evtName;
- };
-
-private:
- int deleteBook(int evtIdFlag) ;
- int bookProgram(CTvProgram &prog, CTvEvent &evt);
- int InitFromCursor(CTvDatabase::Cursor &c);
-private:
- int id;
- int programId;
- int eventId;
- int flag;
- int status;
- int repeat;
- long start;
- long duration;
- String8 progName;
- String8 evtName;
-};
-
-#endif //_CTVBOOKING_H
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvBooking.h
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+
+#if !defined(_CTVBOOKING_H)
+#define _CTVBOOKING_H
+
+#include "CTvDatabase.h"
+#include "CTvProgram.h"
+#include "CTvEvent.h"
+#include <utils/String8.h>
+#include <utils/RefBase.h>
+#include <stdlib.h>
+#include "CTvLog.h"
+#define LOG_TAG "CTvBooking"
+
+// ??????/ ???
+class CTvBooking : public LightRefBase<CTvBooking> {
+public:
+ CTvBooking(CTvDatabase::Cursor &c);
+ CTvBooking();
+ ~CTvBooking();
+
+ static int selectByID(int id, CTvBooking &CtvBook);
+
+ int bookEvent(int evtId, bool bBookFlag);
+ int getBookedEventList(Vector<sp<CTvBooking> > &vBv);
+
+ int getBookId()
+ {
+ return id;
+ };
+ int getProgramId()
+ {
+ return programId;
+ };
+ int getEventId()
+ {
+ return eventId;
+ };
+ int getStartTime()
+ {
+ return start;
+ };
+ int getDurationTime()
+ {
+ return duration;
+ };
+ String8 &getProgName()
+ {
+ return progName;
+ };
+ String8 &getEvtName()
+ {
+ return evtName;
+ };
+
+private:
+ int deleteBook(int evtIdFlag) ;
+ int bookProgram(CTvProgram &prog, CTvEvent &evt);
+ int InitFromCursor(CTvDatabase::Cursor &c);
+private:
+ int id;
+ int programId;
+ int eventId;
+ int flag;
+ int status;
+ int repeat;
+ long start;
+ long duration;
+ String8 progName;
+ String8 evtName;
+};
+
+#endif //_CTVBOOKING_H
diff --git a/tvapi/libtv/tv/CTvDmx.cpp b/tvapi/libtv/tv/CTvDmx.cpp
index ef6262e..92f5598 100644
--- a/tvapi/libtv/tv/CTvDmx.cpp
+++ b/tvapi/libtv/tv/CTvDmx.cpp
@@ -1,7 +1,7 @@
#include "CTvDmx.h"
CTvDmx::CTvDmx()
{
- mDmxDevId = 0;
+ mDmxDevId = 0;
}
CTvDmx::~CTvDmx()
@@ -10,15 +10,15 @@ CTvDmx::~CTvDmx()
int CTvDmx::Open(AM_DMX_OpenPara_t &para)
{
- return AM_DMX_Open ( mDmxDevId, &para );
+ return AM_DMX_Open ( mDmxDevId, &para );
}
int CTvDmx::Close()
{
- return AM_DMX_Close ( mDmxDevId );
+ return AM_DMX_Close ( mDmxDevId );
}
int CTvDmx::SetSource(AM_DMX_Source_t source)
{
- return AM_DMX_SetSource ( mDmxDevId, source );
+ return AM_DMX_SetSource ( mDmxDevId, source );
}
diff --git a/tvapi/libtv/tv/CTvDmx.h b/tvapi/libtv/tv/CTvDmx.h
index 0649c13..63df2d2 100644
--- a/tvapi/libtv/tv/CTvDmx.h
+++ b/tvapi/libtv/tv/CTvDmx.h
@@ -4,15 +4,14 @@
#include "CTvLog.h"
#include "am_dmx.h"
-class CTvDmx
-{
+class CTvDmx {
public:
- CTvDmx();
- ~CTvDmx();
- int Open(AM_DMX_OpenPara_t &para);
- int Close();
- int SetSource(AM_DMX_Source_t source);
+ CTvDmx();
+ ~CTvDmx();
+ int Open(AM_DMX_OpenPara_t &para);
+ int Close();
+ int SetSource(AM_DMX_Source_t source);
private:
- int mDmxDevId;
+ int mDmxDevId;
};
#endif
diff --git a/tvapi/libtv/tv/CTvEpg.cpp b/tvapi/libtv/tv/CTvEpg.cpp
index 9140eac..fa75931 100644
--- a/tvapi/libtv/tv/CTvEpg.cpp
+++ b/tvapi/libtv/tv/CTvEpg.cpp
@@ -11,139 +11,139 @@
#define LOG_TAG "CTvEpg"
#endif
-void CTvEpg::epg_evt_callback(int dev_no, int event_type, void *param, void *user_data)
+void CTvEpg::epg_evt_callback(long dev_no, int event_type, void *param, void *user_data)
{
- CTvEpg *pEpg;
-
- AM_EPG_GetUserData(dev_no, (void **)&pEpg);
-
- if (pEpg == NULL) return;
-
- if (pEpg->mpObserver == NULL) {
- return;
- }
- switch (event_type) {
- case AM_EPG_EVT_NEW_TDT:
- case AM_EPG_EVT_NEW_STT: {
- int utc_time;
- AM_EPG_GetUTCTime(&utc_time);
- pEpg->mCurEpgEv.type = EpgEvent::EVENT_TDT_END;
- pEpg->mCurEpgEv.time = (long)utc_time;
- pEpg->mpObserver->onEvent(pEpg->mCurEpgEv);
- }
- break;
- case AM_EPG_EVT_UPDATE_EVENTS:
- pEpg->mCurEpgEv.type = EpgEvent::EVENT_PROGRAM_EVENTS_UPDATE;
- pEpg->mCurEpgEv.programID = (int)param;
- pEpg->mpObserver->onEvent(pEpg->mCurEpgEv);
- break;
- case AM_EPG_EVT_UPDATE_PROGRAM_AV:
- pEpg->mCurEpgEv.type = EpgEvent::EVENT_PROGRAM_AV_UPDATE;
- pEpg->mCurEpgEv.programID = (int)param;
- pEpg->mpObserver->onEvent(pEpg->mCurEpgEv);
- break;
- case AM_EPG_EVT_UPDATE_PROGRAM_NAME:
- pEpg->mCurEpgEv.type = EpgEvent::EVENT_PROGRAM_NAME_UPDATE;
- pEpg->mCurEpgEv.programID = (int)param;
- pEpg->mpObserver->onEvent(pEpg->mCurEpgEv);
- break;
- case AM_EPG_EVT_UPDATE_TS:
- pEpg->mCurEpgEv.type = EpgEvent::EVENT_CHANNEL_UPDATE;
- pEpg->mCurEpgEv.channelID = (int)param;
- pEpg->mpObserver->onEvent(pEpg->mCurEpgEv);
- break;
- default:
- break;
- }
+ CTvEpg *pEpg;
+
+ AM_EPG_GetUserData((AM_EPG_Handle_t)dev_no, (void **)&pEpg);
+
+ if(pEpg == NULL) return;
+
+ if(pEpg->mpObserver == NULL) {
+ return;
+ }
+ switch(event_type) {
+ case AM_EPG_EVT_NEW_TDT:
+ case AM_EPG_EVT_NEW_STT: {
+ int utc_time;
+ AM_EPG_GetUTCTime(&utc_time);
+ pEpg->mCurEpgEv.type = EpgEvent::EVENT_TDT_END;
+ pEpg->mCurEpgEv.time = (long)utc_time;
+ pEpg->mpObserver->onEvent(pEpg->mCurEpgEv);
+ }
+ break;
+ case AM_EPG_EVT_UPDATE_EVENTS:
+ pEpg->mCurEpgEv.type = EpgEvent::EVENT_PROGRAM_EVENTS_UPDATE;
+ pEpg->mCurEpgEv.programID = (int)param;
+ pEpg->mpObserver->onEvent(pEpg->mCurEpgEv);
+ break;
+ case AM_EPG_EVT_UPDATE_PROGRAM_AV:
+ pEpg->mCurEpgEv.type = EpgEvent::EVENT_PROGRAM_AV_UPDATE;
+ pEpg->mCurEpgEv.programID = (int)param;
+ pEpg->mpObserver->onEvent(pEpg->mCurEpgEv);
+ break;
+ case AM_EPG_EVT_UPDATE_PROGRAM_NAME:
+ pEpg->mCurEpgEv.type = EpgEvent::EVENT_PROGRAM_NAME_UPDATE;
+ pEpg->mCurEpgEv.programID = (int)param;
+ pEpg->mpObserver->onEvent(pEpg->mCurEpgEv);
+ break;
+ case AM_EPG_EVT_UPDATE_TS:
+ pEpg->mCurEpgEv.type = EpgEvent::EVENT_CHANNEL_UPDATE;
+ pEpg->mCurEpgEv.channelID = (int)param;
+ pEpg->mpObserver->onEvent(pEpg->mCurEpgEv);
+ break;
+ default:
+ break;
+ }
}
void CTvEpg::Init(int fend, int dmx, int fend_mod, char *textLanguages, char *dvb_text_coding)
{
- mFend_dev_id = fend;
- mDmx_dev_id = dmx;
- mFend_mod = fend_mod;
- epg_create(fend, dmx, fend_mod, textLanguages);
- epg_set_dvb_text_coding(dvb_text_coding);
+ mFend_dev_id = fend;
+ mDmx_dev_id = dmx;
+ mFend_mod = fend_mod;
+ epg_create(fend, dmx, fend_mod, textLanguages);
+ epg_set_dvb_text_coding(dvb_text_coding);
}
void CTvEpg::epg_create(int fend_id, int dmx_id, int src, char *textLangs)
{
- AM_EPG_CreatePara_t para;
- AM_ErrorCode_t ret;
- AM_FEND_OpenPara_t fend_para;
- AM_DMX_OpenPara_t dmx_para;
-
- LOGD("Opening demux%d ...", dmx_id);
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(dmx_id, &dmx_para);
-
- para.fend_dev = fend_id;
- para.dmx_dev = dmx_id;
- para.source = src;
- para.hdb = NULL;
-
-
- snprintf(para.text_langs, sizeof(para.text_langs), "%s", textLangs);
-
-
- ret = AM_EPG_Create(&para, &mEpgScanHandle);
- if (ret != AM_SUCCESS) {
- LOGD("AM_EPG_Create failed");
- return;
- }
-
- /*注册EIT通知事件*/
- AM_EVT_Subscribe(mEpgScanHandle, AM_EPG_EVT_NEW_TDT, epg_evt_callback, NULL);
- AM_EVT_Subscribe(mEpgScanHandle, AM_EPG_EVT_NEW_STT, epg_evt_callback, NULL);
- AM_EVT_Subscribe(mEpgScanHandle, AM_EPG_EVT_UPDATE_EVENTS, epg_evt_callback, NULL);
- AM_EVT_Subscribe(mEpgScanHandle, AM_EPG_EVT_UPDATE_PROGRAM_AV, epg_evt_callback, NULL);
- AM_EVT_Subscribe(mEpgScanHandle, AM_EPG_EVT_UPDATE_PROGRAM_NAME, epg_evt_callback, NULL);
- AM_EVT_Subscribe(mEpgScanHandle, AM_EPG_EVT_UPDATE_TS, epg_evt_callback, NULL);
- AM_EPG_SetUserData(mEpgScanHandle, (void *)this);
+ AM_EPG_CreatePara_t para;
+ AM_ErrorCode_t ret;
+ AM_FEND_OpenPara_t fend_para;
+ AM_DMX_OpenPara_t dmx_para;
+
+ LOGD("Opening demux%d ...", dmx_id);
+ memset(&dmx_para, 0, sizeof(dmx_para));
+ AM_DMX_Open(dmx_id, &dmx_para);
+
+ para.fend_dev = fend_id;
+ para.dmx_dev = dmx_id;
+ para.source = src;
+ para.hdb = NULL;
+
+
+ snprintf(para.text_langs, sizeof(para.text_langs), "%s", textLangs);
+
+
+ ret = AM_EPG_Create(&para, &mEpgScanHandle);
+ if(ret != AM_SUCCESS) {
+ LOGD("AM_EPG_Create failed");
+ return;
+ }
+
+ /*注册EIT通知事件*/
+ AM_EVT_Subscribe((long)mEpgScanHandle, AM_EPG_EVT_NEW_TDT, epg_evt_callback, NULL);
+ AM_EVT_Subscribe((long)mEpgScanHandle, AM_EPG_EVT_NEW_STT, epg_evt_callback, NULL);
+ AM_EVT_Subscribe((long)mEpgScanHandle, AM_EPG_EVT_UPDATE_EVENTS, epg_evt_callback, NULL);
+ AM_EVT_Subscribe((long)mEpgScanHandle, AM_EPG_EVT_UPDATE_PROGRAM_AV, epg_evt_callback, NULL);
+ AM_EVT_Subscribe((long)mEpgScanHandle, AM_EPG_EVT_UPDATE_PROGRAM_NAME, epg_evt_callback, NULL);
+ AM_EVT_Subscribe((long)mEpgScanHandle, AM_EPG_EVT_UPDATE_TS, epg_evt_callback, NULL);
+ AM_EPG_SetUserData(mEpgScanHandle, (void *)this);
}
void CTvEpg::epg_destroy()
{
- /*å注册EIT通知事件*/
- AM_EVT_Unsubscribe(mEpgScanHandle, AM_EPG_EVT_NEW_TDT, epg_evt_callback, NULL);
- AM_EVT_Unsubscribe(mEpgScanHandle, AM_EPG_EVT_NEW_STT, epg_evt_callback, NULL);
- AM_EVT_Unsubscribe(mEpgScanHandle, AM_EPG_EVT_UPDATE_EVENTS, epg_evt_callback, NULL);
- AM_EVT_Unsubscribe(mEpgScanHandle, AM_EPG_EVT_UPDATE_PROGRAM_AV, epg_evt_callback, NULL);
- AM_EVT_Unsubscribe(mEpgScanHandle, AM_EPG_EVT_UPDATE_PROGRAM_NAME, epg_evt_callback, NULL);
- AM_EVT_Unsubscribe(mEpgScanHandle, AM_EPG_EVT_UPDATE_TS, epg_evt_callback, NULL);
- AM_EPG_Destroy(mEpgScanHandle);
- AM_DMX_Close(mDmx_dev_id);
+ /*å注册EIT通知事件*/
+ AM_EVT_Unsubscribe((long)mEpgScanHandle, AM_EPG_EVT_NEW_TDT, epg_evt_callback, NULL);
+ AM_EVT_Unsubscribe((long)mEpgScanHandle, AM_EPG_EVT_NEW_STT, epg_evt_callback, NULL);
+ AM_EVT_Unsubscribe((long)mEpgScanHandle, AM_EPG_EVT_UPDATE_EVENTS, epg_evt_callback, NULL);
+ AM_EVT_Unsubscribe((long)mEpgScanHandle, AM_EPG_EVT_UPDATE_PROGRAM_AV, epg_evt_callback, NULL);
+ AM_EVT_Unsubscribe((long)mEpgScanHandle, AM_EPG_EVT_UPDATE_PROGRAM_NAME, epg_evt_callback, NULL);
+ AM_EVT_Unsubscribe((long)mEpgScanHandle, AM_EPG_EVT_UPDATE_TS, epg_evt_callback, NULL);
+ AM_EPG_Destroy(mEpgScanHandle);
+ AM_DMX_Close(mDmx_dev_id);
}
void CTvEpg::epg_change_mode(int op, int mode)
{
- AM_ErrorCode_t ret;
- ret = AM_EPG_ChangeMode(mEpgScanHandle, op, mode);
- if (ret != AM_SUCCESS)
- LOGD("AM_EPG_ChangeMode failed");
+ AM_ErrorCode_t ret;
+ ret = AM_EPG_ChangeMode(mEpgScanHandle, op, mode);
+ if(ret != AM_SUCCESS)
+ LOGD("AM_EPG_ChangeMode failed");
}
void CTvEpg::epg_monitor_service(int srv_id)
{
- int ret = AM_EPG_MonitorService(mEpgScanHandle, srv_id);
- if (ret != AM_SUCCESS)
- LOGD("AM_EPG_MonitorService failed");
+ int ret = AM_EPG_MonitorService(mEpgScanHandle, srv_id);
+ if(ret != AM_SUCCESS)
+ LOGD("AM_EPG_MonitorService failed");
}
void CTvEpg::epg_set_dvb_text_coding(char *coding)
{
- if (!strcmp(coding, "standard")) {
- AM_SI_SetDefaultDVBTextCoding("");
- } else {
- AM_SI_SetDefaultDVBTextCoding(coding);
- }
+ if (!strcmp(coding, "standard")) {
+ AM_SI_SetDefaultDVBTextCoding("");
+ } else {
+ AM_SI_SetDefaultDVBTextCoding(coding);
+ }
}
@@ -151,13 +151,13 @@ void CTvEpg::epg_set_dvb_text_coding(char *coding)
/*Start scan the sections.*/
void CTvEpg::startScan(int mode)
{
- epg_change_mode(MODE_ADD, mode);
+ epg_change_mode(MODE_ADD, mode);
}
/*Stop scan the sections.*/
void CTvEpg::stopScan(int mode)
{
- epg_change_mode(MODE_REMOVE, mode);
+ epg_change_mode(MODE_REMOVE, mode);
}
@@ -165,52 +165,52 @@ void CTvEpg::stopScan(int mode)
void CTvEpg::enterChannel(int chan_id)
{
- if (chan_id == mCurScanChannelId)
- return;
- //already enter,leave it
- if (mCurScanChannelId != INVALID_ID) {
- leaveChannel();
- }
+ if(chan_id == mCurScanChannelId)
+ return;
+ //already enter,leave it
+ if(mCurScanChannelId != INVALID_ID) {
+ leaveChannel();
+ }
- if (mFend_mod == CTvChannel::MODE_ATSC) {
- startScan(SCAN_PSIP_ETT | SCAN_PSIP_EIT | SCAN_MGT | SCAN_VCT | SCAN_RRT | SCAN_STT);
- } else {
- startScan(SCAN_EIT_ALL | SCAN_SDT | SCAN_NIT | SCAN_TDT | SCAN_CAT);
- }
+ if(mFend_mod == CTvChannel::MODE_ATSC) {
+ startScan(SCAN_PSIP_ETT | SCAN_PSIP_EIT | SCAN_MGT | SCAN_VCT | SCAN_RRT | SCAN_STT);
+ } else {
+ startScan(SCAN_EIT_ALL | SCAN_SDT | SCAN_NIT | SCAN_TDT | SCAN_CAT);
+ }
- mCurScanChannelId = chan_id;
+ mCurScanChannelId = chan_id;
}
/*Leave the channel.*/
void CTvEpg::leaveChannel()
{
- stopScan(SCAN_ALL);
- mCurScanChannelId = INVALID_ID;
+ stopScan(SCAN_ALL);
+ mCurScanChannelId = INVALID_ID;
}
/*Enter the program.*/
void CTvEpg::enterProgram(int prog_id)
{
- if (prog_id == mCurScanProgramId)
- return;
+ if(prog_id == mCurScanProgramId)
+ return;
- if (mCurScanProgramId != INVALID_ID) {
- leaveProgram();
- }
+ if(mCurScanProgramId != INVALID_ID) {
+ leaveProgram();
+ }
- mCurScanProgramId = prog_id;
- epg_monitor_service(mCurScanProgramId);//---------db_id
- startScan(SCAN_PAT | SCAN_PMT);
+ mCurScanProgramId = prog_id;
+ epg_monitor_service(mCurScanProgramId);//---------db_id
+ startScan(SCAN_PAT | SCAN_PMT);
}
/*Leave the program.*/
void CTvEpg::leaveProgram()
{
- if (mCurScanProgramId == INVALID_ID)
- return;
+ if(mCurScanProgramId == INVALID_ID)
+ return;
- stopScan(SCAN_PAT | SCAN_PMT);
- epg_monitor_service(-1);
- mCurScanProgramId = INVALID_ID;
+ stopScan(SCAN_PAT | SCAN_PMT);
+ epg_monitor_service(-1);
+ mCurScanProgramId = INVALID_ID;
}
diff --git a/tvapi/libtv/tv/CTvEpg.h b/tvapi/libtv/tv/CTvEpg.h
index 3973af4..2671c12 100644
--- a/tvapi/libtv/tv/CTvEpg.h
+++ b/tvapi/libtv/tv/CTvEpg.h
@@ -12,149 +12,147 @@
#include "CTvEv.h"
#if !defined(_CDTVEPG_H)
#define _CDTVEPG_H
-class CTvEpg
-{
+class CTvEpg {
public :
- static const int MODE_ADD = 0;
- static const int MODE_REMOVE = 1;
- static const int MODE_SET = 2;
-
- static const int SCAN_PAT = 0x01;
- static const int SCAN_PMT = 0x02;
- static const int SCAN_CAT = 0x04;
- static const int SCAN_SDT = 0x08;
- static const int SCAN_NIT = 0x10;
- static const int SCAN_TDT = 0x20;
- static const int SCAN_EIT_PF_ACT = 0x40;
- static const int SCAN_EIT_PF_OTH = 0x80;
- static const int SCAN_EIT_SCHE_ACT = 0x100;
- static const int SCAN_EIT_SCHE_OTH = 0x200;
- static const int SCAN_MGT = 0x400;
- static const int SCAN_VCT = 0x800;
- static const int SCAN_STT = 0x1000;
- static const int SCAN_RRT = 0x2000;
- static const int SCAN_PSIP_EIT = 0x4000;
- static const int SCAN_PSIP_ETT = 0x8000;
- static const int SCAN_EIT_PF_ALL = SCAN_EIT_PF_ACT | SCAN_EIT_PF_OTH;
- static const int SCAN_EIT_SCHE_ALL = SCAN_EIT_SCHE_ACT | SCAN_EIT_SCHE_OTH;
- static const int SCAN_EIT_ALL = SCAN_EIT_PF_ALL | SCAN_EIT_SCHE_ALL;
- static const int SCAN_ALL = SCAN_PAT | SCAN_PMT | SCAN_CAT | SCAN_SDT | SCAN_NIT | SCAN_TDT | SCAN_EIT_ALL |
- SCAN_MGT | SCAN_VCT | SCAN_STT | SCAN_RRT | SCAN_PSIP_EIT | SCAN_PSIP_ETT;
-
- static const int INVALID_ID = -1;
-
- //egp notify
- /*static const int EVENT_PF_EIT_END = 1;
- static const int EVENT_SCH_EIT_END = 2;
- static const int EVENT_PMT_END = 3;
- static const int EVENT_SDT_END = 4;
- static const int EVENT_TDT_END = 5;
- static const int EVENT_NIT_END = 6;
- static const int EVENT_PROGRAM_AV_UPDATE = 7;
- static const int EVENT_PROGRAM_NAME_UPDATE = 8;
- static const int EVENT_PROGRAM_EVENTS_UPDATE = 9;
- static const int EVENT_CHANNEL_UPDATE = 10;*/
- //
- class EpgEvent : public CTvEv
- {
- public:
- EpgEvent(): CTvEv(CTvEv::TV_EVENT_EPG)
- {
-
- };
- ~EpgEvent()
- {};
- static const int EVENT_PF_EIT_END = 1;
- static const int EVENT_SCH_EIT_END = 2;
- static const int EVENT_PMT_END = 3;
- static const int EVENT_SDT_END = 4;
- static const int EVENT_TDT_END = 5;
- static const int EVENT_NIT_END = 6;
- static const int EVENT_PROGRAM_AV_UPDATE = 7;
- static const int EVENT_PROGRAM_NAME_UPDATE = 8;
- static const int EVENT_PROGRAM_EVENTS_UPDATE = 9;
- static const int EVENT_CHANNEL_UPDATE = 10;
- static const int EVENT_CHANNEL_UPDATE_END = 11;
-
- int type;
- int channelID;
- int programID;
- int dvbOrigNetID;
- int dvbTSID;
- int dvbServiceID;
- long time;
- int dvbVersion;
- };
-
- class IObserver
- {
- public:
- IObserver() {};
- virtual ~IObserver() {};
- virtual void onEvent(const EpgEvent &ev) = 0;
- };
- //1 VS n
- //int addObserver(IObserver* ob);
- //int removeObserver(IObserver* ob);
-
- //1 VS 1
- int setObserver(IObserver *ob)
- {
- mpObserver = ob;
- return 0;
- }
-
- CTvEpg()
- {
- mCurScanChannelId = INVALID_ID;
- mCurScanProgramId = INVALID_ID;
- mEpgScanHandle = -1;
- mpObserver = NULL;
- }
- void Init(int fend, int dmx, int fend_mod, char *textLanguages, char *dvb_text_coding);
-
- ~CTvEpg()
- {
- epg_destroy();
- }
-
- /*Enter a channel.*/
- void enterChannel(int chan_id);
- /*Leave the channel.*/
- void leaveChannel();
- /*Enter the program.*/
- void enterProgram(int prog_id);
- /*Leave the program.*/
- void leaveProgram();
+ static const int MODE_ADD = 0;
+ static const int MODE_REMOVE = 1;
+ static const int MODE_SET = 2;
+
+ static const int SCAN_PAT = 0x01;
+ static const int SCAN_PMT = 0x02;
+ static const int SCAN_CAT = 0x04;
+ static const int SCAN_SDT = 0x08;
+ static const int SCAN_NIT = 0x10;
+ static const int SCAN_TDT = 0x20;
+ static const int SCAN_EIT_PF_ACT = 0x40;
+ static const int SCAN_EIT_PF_OTH = 0x80;
+ static const int SCAN_EIT_SCHE_ACT = 0x100;
+ static const int SCAN_EIT_SCHE_OTH = 0x200;
+ static const int SCAN_MGT = 0x400;
+ static const int SCAN_VCT = 0x800;
+ static const int SCAN_STT = 0x1000;
+ static const int SCAN_RRT = 0x2000;
+ static const int SCAN_PSIP_EIT = 0x4000;
+ static const int SCAN_PSIP_ETT = 0x8000;
+ static const int SCAN_EIT_PF_ALL = SCAN_EIT_PF_ACT | SCAN_EIT_PF_OTH;
+ static const int SCAN_EIT_SCHE_ALL = SCAN_EIT_SCHE_ACT | SCAN_EIT_SCHE_OTH;
+ static const int SCAN_EIT_ALL = SCAN_EIT_PF_ALL | SCAN_EIT_SCHE_ALL;
+ static const int SCAN_ALL = SCAN_PAT | SCAN_PMT | SCAN_CAT | SCAN_SDT | SCAN_NIT | SCAN_TDT | SCAN_EIT_ALL |
+ SCAN_MGT | SCAN_VCT | SCAN_STT | SCAN_RRT | SCAN_PSIP_EIT | SCAN_PSIP_ETT;
+
+ static const int INVALID_ID = -1;
+
+ //egp notify
+ /*static const int EVENT_PF_EIT_END = 1;
+ static const int EVENT_SCH_EIT_END = 2;
+ static const int EVENT_PMT_END = 3;
+ static const int EVENT_SDT_END = 4;
+ static const int EVENT_TDT_END = 5;
+ static const int EVENT_NIT_END = 6;
+ static const int EVENT_PROGRAM_AV_UPDATE = 7;
+ static const int EVENT_PROGRAM_NAME_UPDATE = 8;
+ static const int EVENT_PROGRAM_EVENTS_UPDATE = 9;
+ static const int EVENT_CHANNEL_UPDATE = 10;*/
+ //
+ class EpgEvent : public CTvEv {
+ public:
+ EpgEvent(): CTvEv(CTvEv::TV_EVENT_EPG)
+ {
+
+ };
+ ~EpgEvent()
+ {
+ };
+ static const int EVENT_PF_EIT_END = 1;
+ static const int EVENT_SCH_EIT_END = 2;
+ static const int EVENT_PMT_END = 3;
+ static const int EVENT_SDT_END = 4;
+ static const int EVENT_TDT_END = 5;
+ static const int EVENT_NIT_END = 6;
+ static const int EVENT_PROGRAM_AV_UPDATE = 7;
+ static const int EVENT_PROGRAM_NAME_UPDATE = 8;
+ static const int EVENT_PROGRAM_EVENTS_UPDATE = 9;
+ static const int EVENT_CHANNEL_UPDATE = 10;
+ static const int EVENT_CHANNEL_UPDATE_END = 11;
+
+ int type;
+ int channelID;
+ int programID;
+ int dvbOrigNetID;
+ int dvbTSID;
+ int dvbServiceID;
+ long time;
+ int dvbVersion;
+ };
+
+ class IObserver {
+ public:
+ IObserver() {};
+ virtual ~IObserver() {};
+ virtual void onEvent(const EpgEvent &ev) = 0;
+ };
+ //1 VS n
+ //int addObserver(IObserver* ob);
+ //int removeObserver(IObserver* ob);
+
+ //1 VS 1
+ int setObserver(IObserver *ob)
+ {
+ mpObserver = ob;
+ return 0;
+ }
+
+ CTvEpg()
+ {
+ mCurScanChannelId = INVALID_ID;
+ mCurScanProgramId = INVALID_ID;
+ mEpgScanHandle = NULL;
+ mpObserver = NULL;
+ }
+ void Init(int fend, int dmx, int fend_mod, char *textLanguages, char *dvb_text_coding);
+
+ ~CTvEpg()
+ {
+ epg_destroy();
+ }
+
+ /*Enter a channel.*/
+ void enterChannel(int chan_id);
+ /*Leave the channel.*/
+ void leaveChannel();
+ /*Enter the program.*/
+ void enterProgram(int prog_id);
+ /*Leave the program.*/
+ void leaveProgram();
private:
- //
- void epg_create(int fend_id, int dmx_id, int src, char *textLangs);
- void epg_destroy();
- void epg_change_mode(int op, int mode);
- void epg_monitor_service(int srv_id);
- void epg_set_dvb_text_coding(char *coding);
-
-
- /*Start scan the sections.*/
- void startScan(int mode);
- /*Stop scan the sections.*/
- void stopScan(int mode);
-
- static void epg_evt_callback(int dev_no, int event_type, void *param, void *user_data);
-
- //
- IObserver *mpObserver;
-
- //
- int mEpgScanHandle;
- int mFend_dev_id;
- int mDmx_dev_id ;
- int mFend_mod;
- int mCurScanChannelId ;
- int mCurScanProgramId ;
-
- //
- EpgEvent mCurEpgEv;
+ //
+ void epg_create(int fend_id, int dmx_id, int src, char *textLangs);
+ void epg_destroy();
+ void epg_change_mode(int op, int mode);
+ void epg_monitor_service(int srv_id);
+ void epg_set_dvb_text_coding(char *coding);
+
+
+ /*Start scan the sections.*/
+ void startScan(int mode);
+ /*Stop scan the sections.*/
+ void stopScan(int mode);
+
+ static void epg_evt_callback(long dev_no, int event_type, void *param, void *user_data);
+
+ //
+ IObserver *mpObserver;
+
+ //
+ AM_EPG_Handle_t mEpgScanHandle;
+ int mFend_dev_id;
+ int mDmx_dev_id ;
+ int mFend_mod;
+ int mCurScanChannelId ;
+ int mCurScanProgramId ;
+
+ //
+ EpgEvent mCurEpgEv;
};
#endif //_CDTVEPG_H
diff --git a/tvapi/libtv/tv/CTvEv.cpp b/tvapi/libtv/tv/CTvEv.cpp
index eb7129d..93f2580 100644
--- a/tvapi/libtv/tv/CTvEv.cpp
+++ b/tvapi/libtv/tv/CTvEv.cpp
@@ -7,5 +7,5 @@
#include "CTvEv.h"
CTvEv::CTvEv(int type)
{
- mEvType = type;
+ mEvType = type;
}
diff --git a/tvapi/libtv/tv/CTvEv.h b/tvapi/libtv/tv/CTvEv.h
index 54ec5fe..9db3483 100644
--- a/tvapi/libtv/tv/CTvEv.h
+++ b/tvapi/libtv/tv/CTvEv.h
@@ -11,182 +11,170 @@
#define CC_MAX_SERIAL_RD_BUF_LEN (1200)
using namespace android;
-class CTvEv
-{
+class CTvEv {
public:
- static const int TV_EVENT_COMMOM = 0;//通用消æ¯
- static const int TV_EVENT_SCANNER = 1;//æœç´¢æ¶ˆæ¯
- static const int TV_EVENT_EPG = 2;//EPG状æ€æ¶ˆæ¯
- static const int TV_EVENT_SOURCE_SWITCH = 3;//ä¿¡æºåˆ‡æ¢
- static const int TV_EVENT_SIGLE_DETECT = 4;//ä¿¡å·æ£€æµ‹
- static const int TV_EVENT_ADC_CALIBRATION = 5;//ADC校准
- static const int TV_EVENT_VGA = 6;//VGA
- static const int TV_EVENT_3D_STATE = 7;//3D
- static const int TV_EVENT_AV_PLAYBACK = 8;//PLAYBACK EVENT MSG
- static const int TV_EVENT_SERIAL_COMMUNICATION = 9;
- static const int TV_EVENT_SOURCE_CONNECT = 10;
- static const int TV_EVENT_HDMIRX_CEC = 11;
- static const int TV_EVENT_BLOCK = 12;
- static const int TV_EVENT_CC = 13; //close caption
- static const int TV_EVENT_VCHIP = 14; //VCHIP
- static const int TV_EVENT_HDMI_IN_CAP = 15;
- static const int TV_EVENT_UPGRADE_FBC = 16;
- static const int TV_EVENT_2d4G_HEADSET = 17;
- static const int TV_EVENT_AV = 18;
+ static const int TV_EVENT_COMMOM = 0;//通用消æ¯
+ static const int TV_EVENT_SCANNER = 1;//æœç´¢æ¶ˆæ¯
+ static const int TV_EVENT_EPG = 2;//EPG状æ€æ¶ˆæ¯
+ static const int TV_EVENT_SOURCE_SWITCH = 3;//ä¿¡æºåˆ‡æ¢
+ static const int TV_EVENT_SIGLE_DETECT = 4;//ä¿¡å·æ£€æµ‹
+ static const int TV_EVENT_ADC_CALIBRATION = 5;//ADC校准
+ static const int TV_EVENT_VGA = 6;//VGA
+ static const int TV_EVENT_3D_STATE = 7;//3D
+ static const int TV_EVENT_AV_PLAYBACK = 8;//PLAYBACK EVENT MSG
+ static const int TV_EVENT_SERIAL_COMMUNICATION = 9;
+ static const int TV_EVENT_SOURCE_CONNECT = 10;
+ static const int TV_EVENT_HDMIRX_CEC = 11;
+ static const int TV_EVENT_BLOCK = 12;
+ static const int TV_EVENT_CC = 13; //close caption
+ static const int TV_EVENT_VCHIP = 14; //VCHIP
+ static const int TV_EVENT_HDMI_IN_CAP = 15;
+ static const int TV_EVENT_UPGRADE_FBC = 16;
+ static const int TV_EVENT_2d4G_HEADSET = 17;
+ static const int TV_EVENT_AV = 18;
- CTvEv(int type);
- virtual ~CTvEv() {};
- int getEvType() const
- {
- return mEvType;
- };
+ CTvEv(int type);
+ virtual ~CTvEv() {};
+ int getEvType() const
+ {
+ return mEvType;
+ };
private:
- int mEvType;
+ int mEvType;
};
-namespace TvEvent
-{
- //events
- class SignalInfoEvent: public CTvEv
- {
- public:
- SignalInfoEvent() : CTvEv ( CTvEv::TV_EVENT_SIGLE_DETECT )
- {
- }
- ~SignalInfoEvent()
- {
- }
- int mTrans_fmt;
- int mFmt;
- int mStatus;
- int mReserved;
- };
+namespace TvEvent {
+ //events
+ class SignalInfoEvent: public CTvEv {
+ public:
+ SignalInfoEvent() : CTvEv ( CTvEv::TV_EVENT_SIGLE_DETECT )
+ {
+ }
+ ~SignalInfoEvent()
+ {
+ }
+ int mTrans_fmt;
+ int mFmt;
+ int mStatus;
+ int mReserved;
+ };
- class VGAEvent: public CTvEv
- {
- public:
- VGAEvent() : CTvEv ( CTvEv::TV_EVENT_VGA )
- {
- }
- ~VGAEvent()
- {
- }
- int mState;
- };
+ class VGAEvent: public CTvEv {
+ public:
+ VGAEvent() : CTvEv ( CTvEv::TV_EVENT_VGA )
+ {
+ }
+ ~VGAEvent()
+ {
+ }
+ int mState;
+ };
- class ADCCalibrationEvent: public CTvEv
- {
- public:
- ADCCalibrationEvent() : CTvEv ( CTvEv::TV_EVENT_ADC_CALIBRATION )
- {
- }
- ~ADCCalibrationEvent()
- {
- }
- int mState;
- };
+ class ADCCalibrationEvent: public CTvEv {
+ public:
+ ADCCalibrationEvent() : CTvEv ( CTvEv::TV_EVENT_ADC_CALIBRATION )
+ {
+ }
+ ~ADCCalibrationEvent()
+ {
+ }
+ int mState;
+ };
- class SerialCommunicationEvent: public CTvEv
- {
- public:
- SerialCommunicationEvent(): CTvEv(CTvEv::TV_EVENT_SERIAL_COMMUNICATION)
- {
- }
- ~SerialCommunicationEvent()
- {
- }
- public:
- int mDevId;
- int mDataCount;
- unsigned char mDataBuf[CC_MAX_SERIAL_RD_BUF_LEN];
- };
+ class SerialCommunicationEvent: public CTvEv {
+ public:
+ SerialCommunicationEvent(): CTvEv(CTvEv::TV_EVENT_SERIAL_COMMUNICATION)
+ {
+ }
+ ~SerialCommunicationEvent()
+ {
+ }
+ public:
+ int mDevId;
+ int mDataCount;
+ unsigned char mDataBuf[CC_MAX_SERIAL_RD_BUF_LEN];
+ };
- class SourceConnectEvent: public CTvEv
- {
- public:
- SourceConnectEvent() : CTvEv ( CTvEv::TV_EVENT_SOURCE_CONNECT )
- {
- }
- ~SourceConnectEvent()
- {
- }
- int mSourceInput;
- int connectionState;
- };
+ class SourceConnectEvent: public CTvEv {
+ public:
+ SourceConnectEvent() : CTvEv ( CTvEv::TV_EVENT_SOURCE_CONNECT )
+ {
+ }
+ ~SourceConnectEvent()
+ {
+ }
+ int mSourceInput;
+ int connectionState;
+ };
- class HDMIRxCECEvent: public CTvEv
- {
- public:
- HDMIRxCECEvent() : CTvEv ( CTvEv::TV_EVENT_HDMIRX_CEC )
- {
- }
- ~HDMIRxCECEvent()
- {
- }
- int mDataCount;
- int mDataBuf[32];
- };
+ class HDMIRxCECEvent: public CTvEv {
+ public:
+ HDMIRxCECEvent() : CTvEv ( CTvEv::TV_EVENT_HDMIRX_CEC )
+ {
+ }
+ ~HDMIRxCECEvent()
+ {
+ }
+ int mDataCount;
+ int mDataBuf[32];
+ };
- class AVPlaybackEvent: public CTvEv
- {
- public:
- AVPlaybackEvent() : CTvEv ( CTvEv::TV_EVENT_AV_PLAYBACK )
- {
- }
- ~AVPlaybackEvent()
- {
- }
- static const int EVENT_AV_PLAYBACK_NODATA = 1;
- static const int EVENT_AV_PLAYBACK_RESUME = 2;
- static const int EVENT_AV_SCAMBLED = 3;
- static const int EVENT_AV_UNSUPPORT = 4;
+ class AVPlaybackEvent: public CTvEv {
+ public:
+ AVPlaybackEvent() : CTvEv ( CTvEv::TV_EVENT_AV_PLAYBACK )
+ {
+ }
+ ~AVPlaybackEvent()
+ {
+ }
+ static const int EVENT_AV_PLAYBACK_NODATA = 1;
+ static const int EVENT_AV_PLAYBACK_RESUME = 2;
+ static const int EVENT_AV_SCAMBLED = 3;
+ static const int EVENT_AV_UNSUPPORT = 4;
- public:
- int mMsgType;
- int mProgramId;
- };
- class BlockEvent: public CTvEv
- {
- public:
- BlockEvent() : CTvEv ( CTvEv::TV_EVENT_BLOCK )
- {
- }
- ~BlockEvent()
- {
- }
- public:
- bool block_status;
- int programBlockType;
- String8 vchipDimension;
- String8 vchipAbbrev;
- String8 vchipAbbtext;
- };
+ public:
+ int mMsgType;
+ int mProgramId;
+ };
+ class BlockEvent: public CTvEv {
+ public:
+ BlockEvent() : CTvEv ( CTvEv::TV_EVENT_BLOCK )
+ {
+ }
+ ~BlockEvent()
+ {
+ }
+ public:
+ bool block_status;
+ int programBlockType;
+ String8 vchipDimension;
+ String8 vchipAbbrev;
+ String8 vchipAbbtext;
+ };
- class UpgradeFBCEvent: public CTvEv
- {
- public:
- UpgradeFBCEvent() : CTvEv ( CTvEv::TV_EVENT_UPGRADE_FBC )
- {
- }
- ~UpgradeFBCEvent()
- {
- }
- int mState;
- int param;
- };
+ class UpgradeFBCEvent: public CTvEv {
+ public:
+ UpgradeFBCEvent() : CTvEv ( CTvEv::TV_EVENT_UPGRADE_FBC )
+ {
+ }
+ ~UpgradeFBCEvent()
+ {
+ }
+ int mState;
+ int param;
+ };
- class HeadSetOf2d4GEvent: public CTvEv
- {
- public:
- HeadSetOf2d4GEvent(): CTvEv(CTvEv::TV_EVENT_2d4G_HEADSET)
- {
- }
- ~HeadSetOf2d4GEvent()
- {
- }
- public:
- int state;
- int para;
- };
+ class HeadSetOf2d4GEvent: public CTvEv {
+ public:
+ HeadSetOf2d4GEvent(): CTvEv(CTvEv::TV_EVENT_2d4G_HEADSET)
+ {
+ }
+ ~HeadSetOf2d4GEvent()
+ {
+ }
+ public:
+ int state;
+ int para;
+ };
};
#endif
diff --git a/tvapi/libtv/tv/CTvLog.h b/tvapi/libtv/tv/CTvLog.h
index 79c6fc7..2dbd933 100644
--- a/tvapi/libtv/tv/CTvLog.h
+++ b/tvapi/libtv/tv/CTvLog.h
@@ -27,9 +27,9 @@ __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__); }
//class CTvLog{
-// public:
-// inline static void LOGD();
-// inline static void LOGW();
-// inline static void LOGE();
+// public:
+// inline static void LOGD();
+// inline static void LOGW();
+// inline static void LOGE();
//};
#endif //
diff --git a/tvapi/libtv/tv/CTvRecord.cpp b/tvapi/libtv/tv/CTvRecord.cpp
index 564f4f3..b43970f 100644
--- a/tvapi/libtv/tv/CTvRecord.cpp
+++ b/tvapi/libtv/tv/CTvRecord.cpp
@@ -1,276 +1,276 @@
-#include <string.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <am_debug.h>
-#include <am_dmx.h>
-#include <am_av.h>
-
-#include <am_misc.h>
-
-#include <am_fend.h>
-#include <am_dvr.h>
-#include <errno.h>
-#include "CTvProgram.h"
-#include "../tvconfig/tvconfig.h"
-#include "CTvRecord.h"
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#endif
-#define LOG_TAG "CTvRecord"
-
-#define FEND_DEV_NO 0
-#define DVR_DEV_NO 0
-#define DVR_BUF_SIZE 1024*1024
-#define DVR_DEV_COUNT (2)
-
-typedef struct {
- int id;
- char file_name[256];
- pthread_t thread;
- int running;
- int fd;
-} DVRData;
-
-static DVRData data_threads[DVR_DEV_COUNT];
-int pvr_init = 0;
-CTvRecord::CTvRecord()
-{
- AM_DVR_OpenPara_t dpara;
- memset(&dpara, 0, sizeof(dpara));
- AM_DVR_Open(DVR_DEV_NO, &dpara);
- data_threads[DVR_DEV_NO].id = 0;
- data_threads[DVR_DEV_NO].fd = -1;
- data_threads[DVR_DEV_NO].running = 0;
-
- AM_DVR_SetSource(DVR_DEV_NO, AM_DVR_SRC_ASYNC_FIFO0);
- AM_DVR_SetBufferSize(DVR_DEV_NO, DVR_BUF_SIZE);
-
- memset(filename, 0, sizeof(filename));
- progid = 0xFFFF;
- vpid = 0x1fff;
- apid = 0x1fff;
-}
-CTvRecord::~CTvRecord()
-{
- AM_DVR_Close(DVR_DEV_NO);
-
-}
-void CTvRecord::dvr_init(void)
-{
- AM_DVR_OpenPara_t para;
- char buf[32];
-
- if (pvr_init)
- return;
-
- memset(&para, 0, sizeof(para));
- LOGD("%s,%d", "TV", __LINE__);
-
- AM_DVR_Open(DVR_DEV_NO, &para);
- AM_DVR_SetSource(DVR_DEV_NO, AM_DVR_SRC_ASYNC_FIFO0);
- AM_DVR_SetBufferSize(DVR_DEV_NO, DVR_BUF_SIZE);
-
- snprintf(buf, sizeof(buf), "%d", (512 * 1024));
- AM_FileEcho("/sys/class/dmx/asyncfifo_len", buf);
-
- pvr_init = 1;
-}
-
-char *CTvRecord::GetRecordFileName()
-{
- return filename;
-}
-void CTvRecord::SetRecordFileName(char *name)
-{
- strcpy(filename, name);
-}
-void CTvRecord::SetCurRecProgramId(int id)
-{
- progid = id;
-}
-
-int CTvRecord::dvr_data_write(int fd, uint8_t *buf, int size)
-{
- int ret;
- int left = size;
- uint8_t *p = buf;
- LOGD("%s,%d", "TV", __LINE__);
-
- while (left > 0) {
- ret = write(fd, p, left);
- if (ret == -1) {
- if (errno != EINTR) {
- LOGD("Write DVR data failed: %s", strerror(errno));
- break;
- }
- ret = 0;
- }
-
- left -= ret;
- p += ret;
- }
-
- return (size - left);
-}
-void *CTvRecord::dvr_data_thread(void *arg)
-{
- DVRData *dd = (DVRData *)arg;
- int cnt;
- uint8_t buf[256 * 1024];
-
- LOGD("Data thread for DVR%d start ,record file will save to '%s'", dd->id, dd->file_name);
- LOGD("%s,%d", "TV", __LINE__);
-
- while (dd->running) {
- cnt = AM_DVR_Read(dd->id, buf, sizeof(buf), 1000);
- if (cnt <= 0) {
- LOGD("No data available from DVR%d", dd->id);
- usleep(200 * 1000);
- continue;
- }
- //AM_DEBUG(1, "read from DVR%d return %d bytes", dd->id, cnt);
- if (dd->fd != -1) {
- dvr_data_write(dd->fd, buf, cnt);
- }
- }
-
- if (dd->fd != -1) {
- close(dd->fd);
- dd->fd = -1;
- }
- LOGD("Data thread for DVR%d now exit", dd->id);
-
- return NULL;
-}
-
-void CTvRecord::start_data_thread(int dev_no)
-{
- DVRData *dd = &data_threads[dev_no];
-
- if (dd->running)
- return;
- LOGD("%s,%d,dev=%d", "TV", __LINE__, dev_no);
- dd->fd = open(dd->file_name, O_TRUNC | O_WRONLY | O_CREAT, 0666);
- if (dd->fd == -1) {
- LOGD("Cannot open record file '%s' for DVR%d, %s", dd->file_name, dd->id, strerror(errno));
- return;
- }
- dd->running = 1;
- pthread_create(&dd->thread, NULL, dvr_data_thread, dd);
-}
-void CTvRecord::get_cur_program_pid(int progId)
-{
- CTvProgram prog;
- int aindex;
- CTvProgram::Audio *pA;
- CTvProgram::Video *pV;
- int ret = CTvProgram::selectByID(progId, prog);
- if (ret != 0) return;
-
- LOGD("%s,%d", "TV", __LINE__);
- pV = prog.getVideo();
- if (pV != NULL) {
- setvpid(pV->getPID());
- }
-
- aindex = prog.getCurrAudioTrackIndex();
- if (-1 == aindex) { //db is default
- aindex = prog.getCurrentAudio(String8("eng"));
- if (aindex >= 0) {
- prog.setCurrAudioTrackIndex(progId, aindex);
- }
- }
-
- if (aindex >= 0) {
- pA = prog.getAudio(aindex);
- if (pA != NULL) {
- setapid(pA->getPID());
- }
- }
-
-}
-int CTvRecord::start_dvr()
-{
- AM_DVR_StartRecPara_t spara;
- int pid_cnt;
- int pids[2];
-
- /**½ö²âÊÔ×î¶à8¸öPID*/
- get_cur_program_pid(progid);
- pids[0] = getvpid();
- pids[1] = getapid();
-
- strcpy(data_threads[DVR_DEV_NO].file_name, GetRecordFileName());
- LOGD("%s,%d", "TV", __LINE__);
- //sprintf(data_threads[DVR_DEV_NO].file_name,"%s","/storage/external_storage/sda4/testdvr.ts");
- spara.pid_count = 2;
- memcpy(&spara.pids, pids, sizeof(pids));
-
- if (AM_DVR_StartRecord(DVR_DEV_NO, &spara) == AM_SUCCESS) {
- start_data_thread(DVR_DEV_NO);
- }
-
- return 0;
-}
-void CTvRecord::stop_data_thread(int dev_no)
-{
- DVRData *dd = &data_threads[dev_no];
- LOGD("%s,%d", "TV", __LINE__);
-
- if (! dd->running)
- return;
- dd->running = 0;
- pthread_join(dd->thread, NULL);
- LOGD("Data thread for DVR%d has exit", dd->id);
-}
-
-
-void CTvRecord::StartRecord(int id)
-{
- AM_DVR_OpenPara_t dpara;
- fe_status_t status;
- char buf[32];
-
- AM_FEND_GetStatus(FEND_DEV_NO, &status);
-
- if (status & FE_HAS_LOCK) {
- LOGD("locked\n");
- } else {
- LOGD("unlocked\n");
- return ;
- }
- SetCurRecProgramId(id);
- start_dvr();
-
- return;
-}
-void CTvRecord::StopRecord()
-{
- int i = 0;
- LOGD("stop record for %d", DVR_DEV_NO);
- AM_DVR_StopRecord(DVR_DEV_NO);
-
- //for (i=0; i< DVR_DEV_COUNT; i++)
- {
- if (data_threads[DVR_DEV_NO].running)
- stop_data_thread(DVR_DEV_NO);
- //LOGD("Closing DMX%d...", i);
- }
-
-
-}
-void CTvRecord::SetRecCurTsOrCurProgram(int sel)
-{
- int i = 0;
- char buf[50];
- memset(buf, 0, sizeof(buf));
- for (; i < 3; i++) {
- snprintf(buf, sizeof(buf), "/sys/class/stb/dvr%d_mode", i);
- if (sel)
- AM_FileEcho(buf, "ts");
- else
- AM_FileEcho(buf, "pid");
- }
-}
-
+#include <string.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <am_debug.h>
+#include <am_dmx.h>
+#include <am_av.h>
+
+#include <am_misc.h>
+
+#include <am_fend.h>
+#include <am_dvr.h>
+#include <errno.h>
+#include "CTvProgram.h"
+#include "../tvconfig/tvconfig.h"
+#include "CTvRecord.h"
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "CTvRecord"
+
+#define FEND_DEV_NO 0
+#define DVR_DEV_NO 0
+#define DVR_BUF_SIZE 1024*1024
+#define DVR_DEV_COUNT (2)
+
+typedef struct {
+ int id;
+ char file_name[256];
+ pthread_t thread;
+ int running;
+ int fd;
+} DVRData;
+
+static DVRData data_threads[DVR_DEV_COUNT];
+int pvr_init = 0;
+CTvRecord::CTvRecord()
+{
+ AM_DVR_OpenPara_t dpara;
+ memset(&dpara, 0, sizeof(dpara));
+ AM_DVR_Open(DVR_DEV_NO, &dpara);
+ data_threads[DVR_DEV_NO].id = 0;
+ data_threads[DVR_DEV_NO].fd = -1;
+ data_threads[DVR_DEV_NO].running = 0;
+
+ AM_DVR_SetSource(DVR_DEV_NO, AM_DVR_SRC_ASYNC_FIFO0);
+ AM_DVR_SetBufferSize(DVR_DEV_NO, DVR_BUF_SIZE);
+
+ memset(filename, 0, sizeof(filename));
+ progid = 0xFFFF;
+ vpid = 0x1fff;
+ apid = 0x1fff;
+}
+CTvRecord::~CTvRecord()
+{
+ AM_DVR_Close(DVR_DEV_NO);
+
+}
+void CTvRecord::dvr_init(void)
+{
+ AM_DVR_OpenPara_t para;
+ char buf[32];
+
+ if(pvr_init)
+ return;
+
+ memset(&para, 0, sizeof(para));
+ LOGD("%s,%d", "TV", __LINE__);
+
+ AM_DVR_Open(DVR_DEV_NO, &para);
+ AM_DVR_SetSource(DVR_DEV_NO, AM_DVR_SRC_ASYNC_FIFO0);
+ AM_DVR_SetBufferSize(DVR_DEV_NO, DVR_BUF_SIZE);
+
+ snprintf(buf, sizeof(buf), "%d", (512 * 1024));
+ AM_FileEcho("/sys/class/dmx/asyncfifo_len", buf);
+
+ pvr_init = 1;
+}
+
+char *CTvRecord::GetRecordFileName()
+{
+ return filename;
+}
+void CTvRecord::SetRecordFileName(char *name)
+{
+ strcpy(filename, name);
+}
+void CTvRecord::SetCurRecProgramId(int id)
+{
+ progid = id;
+}
+
+int CTvRecord::dvr_data_write(int fd, uint8_t *buf, int size)
+{
+ int ret;
+ int left = size;
+ uint8_t *p = buf;
+ LOGD("%s,%d", "TV", __LINE__);
+
+ while (left > 0) {
+ ret = write(fd, p, left);
+ if (ret == -1) {
+ if (errno != EINTR) {
+ LOGD("Write DVR data failed: %s", strerror(errno));
+ break;
+ }
+ ret = 0;
+ }
+
+ left -= ret;
+ p += ret;
+ }
+
+ return (size - left);
+}
+void *CTvRecord::dvr_data_thread(void *arg)
+{
+ DVRData *dd = (DVRData *)arg;
+ int cnt;
+ uint8_t buf[256 * 1024];
+
+ LOGD("Data thread for DVR%d start ,record file will save to '%s'", dd->id, dd->file_name);
+ LOGD("%s,%d", "TV", __LINE__);
+
+ while (dd->running) {
+ cnt = AM_DVR_Read(dd->id, buf, sizeof(buf), 1000);
+ if (cnt <= 0) {
+ LOGD("No data available from DVR%d", dd->id);
+ usleep(200 * 1000);
+ continue;
+ }
+ //AM_DEBUG(1, "read from DVR%d return %d bytes", dd->id, cnt);
+ if (dd->fd != -1) {
+ dvr_data_write(dd->fd, buf, cnt);
+ }
+ }
+
+ if (dd->fd != -1) {
+ close(dd->fd);
+ dd->fd = -1;
+ }
+ LOGD("Data thread for DVR%d now exit", dd->id);
+
+ return NULL;
+}
+
+void CTvRecord::start_data_thread(int dev_no)
+{
+ DVRData *dd = &data_threads[dev_no];
+
+ if (dd->running)
+ return;
+ LOGD("%s,%d,dev=%d", "TV", __LINE__, dev_no);
+ dd->fd = open(dd->file_name, O_TRUNC | O_WRONLY | O_CREAT, 0666);
+ if (dd->fd == -1) {
+ LOGD("Cannot open record file '%s' for DVR%d, %s", dd->file_name, dd->id, strerror(errno));
+ return;
+ }
+ dd->running = 1;
+ pthread_create(&dd->thread, NULL, dvr_data_thread, dd);
+}
+void CTvRecord::get_cur_program_pid(int progId)
+{
+ CTvProgram prog;
+ int aindex;
+ CTvProgram::Audio *pA;
+ CTvProgram::Video *pV;
+ int ret = CTvProgram::selectByID(progId, prog);
+ if(ret != 0) return;
+
+ LOGD("%s,%d", "TV", __LINE__);
+ pV = prog.getVideo();
+ if(pV != NULL) {
+ setvpid(pV->getPID());
+ }
+
+ aindex = prog.getCurrAudioTrackIndex();
+ if(-1 == aindex) { //db is default
+ aindex = prog.getCurrentAudio(String8("eng"));
+ if(aindex >= 0) {
+ prog.setCurrAudioTrackIndex(progId, aindex);
+ }
+ }
+
+ if(aindex >= 0) {
+ pA = prog.getAudio(aindex);
+ if(pA != NULL) {
+ setapid(pA->getPID());
+ }
+ }
+
+}
+int CTvRecord::start_dvr()
+{
+ AM_DVR_StartRecPara_t spara;
+ int pid_cnt;
+ int pids[2];
+
+ /**½ö²âÊÔ×î¶à8¸öPID*/
+ get_cur_program_pid(progid);
+ pids[0] = getvpid();
+ pids[1] = getapid();
+
+ strcpy(data_threads[DVR_DEV_NO].file_name, GetRecordFileName());
+ LOGD("%s,%d", "TV", __LINE__);
+ //sprintf(data_threads[DVR_DEV_NO].file_name,"%s","/storage/external_storage/sda4/testdvr.ts");
+ spara.pid_count = 2;
+ memcpy(&spara.pids, pids, sizeof(pids));
+
+ if (AM_DVR_StartRecord(DVR_DEV_NO, &spara) == AM_SUCCESS) {
+ start_data_thread(DVR_DEV_NO);
+ }
+
+ return 0;
+}
+void CTvRecord::stop_data_thread(int dev_no)
+{
+ DVRData *dd = &data_threads[dev_no];
+ LOGD("%s,%d", "TV", __LINE__);
+
+ if (! dd->running)
+ return;
+ dd->running = 0;
+ pthread_join(dd->thread, NULL);
+ LOGD("Data thread for DVR%d has exit", dd->id);
+}
+
+
+void CTvRecord::StartRecord(int id)
+{
+ AM_DVR_OpenPara_t dpara;
+ fe_status_t status;
+ char buf[32];
+
+ AM_FEND_GetStatus(FEND_DEV_NO, &status);
+
+ if(status & FE_HAS_LOCK) {
+ LOGD("locked\n");
+ } else {
+ LOGD("unlocked\n");
+ return ;
+ }
+ SetCurRecProgramId(id);
+ start_dvr();
+
+ return;
+}
+void CTvRecord::StopRecord()
+{
+ int i = 0;
+ LOGD("stop record for %d", DVR_DEV_NO);
+ AM_DVR_StopRecord(DVR_DEV_NO);
+
+ //for (i=0; i< DVR_DEV_COUNT; i++)
+ {
+ if (data_threads[DVR_DEV_NO].running)
+ stop_data_thread(DVR_DEV_NO);
+ //LOGD("Closing DMX%d...", i);
+ }
+
+
+}
+void CTvRecord::SetRecCurTsOrCurProgram(int sel)
+{
+ int i = 0;
+ char buf[50];
+ memset(buf, 0, sizeof(buf));
+ for(; i < 3; i++) {
+ snprintf(buf, sizeof(buf), "/sys/class/stb/dvr%d_mode", i);
+ if(sel)
+ AM_FileEcho(buf, "ts");
+ else
+ AM_FileEcho(buf, "pid");
+ }
+}
+
diff --git a/tvapi/libtv/tv/CTvRecord.h b/tvapi/libtv/tv/CTvRecord.h
index bd32880..db8599b 100644
--- a/tvapi/libtv/tv/CTvRecord.h
+++ b/tvapi/libtv/tv/CTvRecord.h
@@ -1,47 +1,46 @@
-
-
-class CTvRecord
-{
-private :
- char filename[256];
- int progid;
- int vpid;
- int apid;
- static void dvr_init(void);
- void setvpid(int vid)
- {
- this->vpid = vid;
- }
- int getvpid()
- {
- return vpid;
- }
- void setapid(int aid)
- {
- this->apid = aid;
- }
- int getapid()
- {
- return apid;
- }
- static int dvr_data_write(int fd, uint8_t *buf, int size);
- static void *dvr_data_thread(void *arg);
- char *GetRecordFileName();
- void SetCurRecProgramId(int id);
- void start_data_thread(int dev_no);
- void get_cur_program_pid(int progId);
- int start_dvr(void);
- void stop_data_thread(int dev_no);
-
-
-public:
- CTvRecord();
- ~CTvRecord();
- void SetRecordFileName(char *name);
- void StartRecord(int id);
- void StopRecord();
- void SetRecCurTsOrCurProgram(int sel); // 1: all program in the Ts; 0:current program
-
-
-
-};
+
+
+class CTvRecord {
+private :
+ char filename[256];
+ int progid;
+ int vpid;
+ int apid;
+ static void dvr_init(void);
+ void setvpid(int vid)
+ {
+ this->vpid = vid;
+ }
+ int getvpid()
+ {
+ return vpid;
+ }
+ void setapid(int aid)
+ {
+ this->apid = aid;
+ }
+ int getapid()
+ {
+ return apid;
+ }
+ static int dvr_data_write(int fd, uint8_t *buf, int size);
+ static void *dvr_data_thread(void *arg);
+ char *GetRecordFileName();
+ void SetCurRecProgramId(int id);
+ void start_data_thread(int dev_no);
+ void get_cur_program_pid(int progId);
+ int start_dvr(void);
+ void stop_data_thread(int dev_no);
+
+
+public:
+ CTvRecord();
+ ~CTvRecord();
+ void SetRecordFileName(char *name);
+ void StartRecord(int id);
+ void StopRecord();
+ void SetRecCurTsOrCurProgram(int sel); // 1: all program in the Ts; 0:current program
+
+
+
+};
diff --git a/tvapi/libtv/tv/CTvSatellite.h b/tvapi/libtv/tv/CTvSatellite.h
index 4ac294f..06a7481 100644
--- a/tvapi/libtv/tv/CTvSatellite.h
+++ b/tvapi/libtv/tv/CTvSatellite.h
@@ -1,22 +1,21 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvSatellite.h
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-
-#if !defined(_CTVSATELLITE_H)
-#define _CTVSATELLITE_H
-
-
-// TV SatelliteÏà¹ØÐÅÏ¢
-class CTvSatellite
-{
-};
-
-#endif //_CTVSATELLITE_H
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvSatellite.h
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+
+#if !defined(_CTVSATELLITE_H)
+#define _CTVSATELLITE_H
+
+
+// TV SatelliteÏà¹ØÐÅÏ¢
+class CTvSatellite {
+};
+
+#endif //_CTVSATELLITE_H
diff --git a/tvapi/libtv/tv/CTvScanner.cpp b/tvapi/libtv/tv/CTvScanner.cpp
index e66ae0b..068d82a 100644
--- a/tvapi/libtv/tv/CTvScanner.cpp
+++ b/tvapi/libtv/tv/CTvScanner.cpp
@@ -17,262 +17,286 @@
#define LOG_TAG "CTvScanner"
#endif
-
+CTvScanner *CTvScanner::m_s_Scanner = NULL;
//int CTvScanner::getStartPara()
//{
//
//}
CTvScanner::CTvScanner(CTvin *pTvin)
{
- mbScanStart = false;
- mpObserver = NULL;
- mSource = 0xff;
- mMinFreq = 1;
- mMaxFreq = 100;
- mCurScanStartFreq = 1;
- mCurScanEndFreq = 100;
- mpTvin = pTvin;
+ mbScanStart = false;
+ mpObserver = NULL;
+ mSource = 0xff;
+ mMinFreq = 1;
+ mMaxFreq = 100;
+ mCurScanStartFreq = 1;
+ mCurScanEndFreq = 100;
+ mpTvin = pTvin;
}
CTvScanner::~CTvScanner()
{
- AM_EVT_Unsubscribe(mScanHandle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe(mScanHandle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
+ AM_EVT_Unsubscribe((long)mScanHandle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
+ AM_EVT_Unsubscribe((long)mScanHandle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
}
AM_Bool_t CTvScanner::atv_cvbs_lock_check(v4l2_std_id *colorStd)
{
- tvafe_cvbs_video_t cvbs_lock_status;
- int ret, i = 0;
-
- *colorStd = 0;
- while (i < 20) {
- ret = mpTvin->AFE_GetCVBSLockStatus(&cvbs_lock_status);
-
- if (cvbs_lock_status == TVAFE_CVBS_VIDEO_HV_LOCKED)
- //||cvbs_lock_status == TVAFE_CVBS_VIDEO_V_LOCKED
- //||cvbs_lock_status == TVAFE_CVBS_VIDEO_H_LOCKED)
- {
- usleep(2000 * 1000);
- tvin_info_t info;
- mpTvin->VDIN_GetSignalInfo(&info);
- *colorStd = CTvin::CvbsFtmToV4l2ColorStd(info.fmt);
- LOGD("atv_cvbs_lock_check locked and cvbs fmt = 0x%x std = 0x%x", info.fmt, *colorStd);
- return true;
- }
- usleep(50 * 1000);
- i++;
- }
- return false;
+ tvafe_cvbs_video_t cvbs_lock_status;
+ int ret, i = 0;
+
+ *colorStd = 0;
+ while (i < 20) {
+ ret = mpTvin->AFE_GetCVBSLockStatus(&cvbs_lock_status);
+
+ if (cvbs_lock_status == TVAFE_CVBS_VIDEO_HV_LOCKED)
+ //||cvbs_lock_status == TVAFE_CVBS_VIDEO_V_LOCKED
+ //||cvbs_lock_status == TVAFE_CVBS_VIDEO_H_LOCKED)
+ {
+ usleep(2000 * 1000);
+ tvin_info_t info;
+ mpTvin->VDIN_GetSignalInfo(&info);
+ *colorStd = CTvin::CvbsFtmToV4l2ColorStd(info.fmt);
+ LOGD("atv_cvbs_lock_check locked and cvbs fmt = 0x%x std = 0x%x", info.fmt, *colorStd);
+ return true;
+ }
+ usleep(50 * 1000);
+ i++;
+ }
+ return false;
}
AM_Bool_t CTvScanner::s_atv_cvbs_lock_check(void *data)
{
- if (data == NULL) return false;
- AM_SCAN_ATV_LOCK_PARA_t *pAtvPara = (AM_SCAN_ATV_LOCK_PARA_t *)data;
- CTvScanner *pScan = (CTvScanner *)(pAtvPara->pData);
- v4l2_std_id std;
- AM_Bool_t isLock = pScan->atv_cvbs_lock_check(&std);
- pAtvPara->pOutColorSTD = std;
- return isLock;
+ if(data == NULL) return false;
+ AM_SCAN_ATV_LOCK_PARA_t *pAtvPara = (AM_SCAN_ATV_LOCK_PARA_t *)data;
+ CTvScanner *pScan = (CTvScanner *)(pAtvPara->pData);
+ v4l2_std_id std;
+ AM_Bool_t isLock = pScan->atv_cvbs_lock_check(&std);
+ pAtvPara->pOutColorSTD = std;
+ return isLock;
}
int CTvScanner::ATVManualScan(int min_freq, int max_freq, int std, int store_Type, int channel_num)
{
- stopScan();
- if (min_freq <= 0 || max_freq <= 0 || min_freq == max_freq) {
- LOGD("atv manual scan freq error start = %d end = %d", min_freq, max_freq);
- return -1;
- }
- int direction = (max_freq >= min_freq) ? 1 : 0;
+ stopScan();
+ if(min_freq <= 0 || max_freq <= 0 || min_freq == max_freq) {
+ LOGD("atv manual scan freq error start = %d end = %d", min_freq, max_freq);
+ return -1;
+ }
+ int direction = (max_freq >= min_freq) ? 1 : 0;
+
+ if(!mbScanStart) { //not start or stop
+ //
+ mCurScanStartFreq = min_freq;
+ mCurScanEndFreq = max_freq;
+ AM_SCAN_CreatePara_t para;
+ AM_DMX_OpenPara_t dmx_para;
+ AM_SCAN_Handle_t handle = 0, i;
+ LOGD("startScanThread");
+ // Create the scan
+ memset(&para, 0, sizeof(para));
+ para.fend_dev_id = 0;//default
+ para.mode = AM_SCAN_MODE_ATV_DTV;//
+ para.atv_para.mode = AM_SCAN_ATVMODE_MANUAL;
+ para.atv_para.storeMode = store_Type;
+ para.dtv_para.mode = AM_SCAN_DTVMODE_NONE;
+
+ para.atv_para.am_scan_atv_cvbs_lock = s_atv_cvbs_lock_check;
+
+ para.atv_para.fe_cnt = 3;
+ para.atv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(3, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)));
+ if(para.atv_para.fe_paras != NULL) {
+ memset(para.atv_para.fe_paras, 0, 3 * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
+ para.atv_para.fe_paras[0].m_type = FE_ANALOG;
+ para.atv_para.fe_paras[0].analog.para.frequency = min_freq;
+ para.atv_para.fe_paras[1].m_type = FE_ANALOG;
+ para.atv_para.fe_paras[1].analog.para.frequency = max_freq;
+ para.atv_para.fe_paras[2].m_type = FE_ANALOG;
+ para.atv_para.fe_paras[2].analog.para.frequency = min_freq;
+ }
+ para.atv_para.direction = direction;
+ para.atv_para.default_std = std;
+
+ para.atv_para.channel_id = -1;
+ para.atv_para.cvbs_unlocked_step = 1000000;
+ para.atv_para.cvbs_locked_step = 3000000;
+ para.atv_para.afc_range = 2000000;
+
+ para.dtv_para.resort_all = AM_FALSE;
+ para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
+ para.store_cb = am_scan_atv_store;
+ para.atv_para.channel_num = channel_num;
+
+ memset(&dmx_para, 0, sizeof(dmx_para));
+ AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
+
+ if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
+ AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
+ tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
+ }
+
+ LOGD("atv manual scan mode = %d", para.dtv_para.mode);
+ // Start Scan
+ if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
+ LOGD("SCAN CREATE fail");
+ handle = NULL;
+ } else {
+ mScanHandle = handle;
+ AM_SCAN_SetUserData(handle, (void *)this);
+ AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
+ AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
+ if (AM_SCAN_Start(handle) != AM_SUCCESS) {
+ AM_SCAN_Destroy(handle, AM_FALSE);
+ AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
+ AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
+ handle = NULL;
+ }
+ }
+ if (para.atv_para.fe_paras != NULL)
+ free(para.atv_para.fe_paras);
+ if (para.dtv_para.fe_paras != NULL)
+ free(para.dtv_para.fe_paras);
+
+ if (handle == NULL) {
+ return -1;
+ }
+ mbScanStart = true;//start call ok
+ } else {
+ LOGD("scanning and not stop");
+ }
+
+ return 0;
- if (!mbScanStart) { //not start or stop
- //
- mCurScanStartFreq = min_freq;
- mCurScanEndFreq = max_freq;
- AM_SCAN_CreatePara_t para;
- AM_DMX_OpenPara_t dmx_para;
- int handle = 0, i;
- LOGD("startScanThread");
- // Create the scan
- memset(&para, 0, sizeof(para));
- para.fend_dev_id = 0;//default
- para.mode = AM_SCAN_MODE_ATV_DTV;//
- para.atv_para.mode = AM_SCAN_ATVMODE_MANUAL;
- para.atv_para.storeMode = store_Type;
- para.dtv_para.mode = AM_SCAN_DTVMODE_NONE;
-
- para.atv_para.am_scan_atv_cvbs_lock = s_atv_cvbs_lock_check;
-
- para.atv_para.fe_cnt = 3;
- para.atv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(3, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)));
- if (para.atv_para.fe_paras != NULL) {
- memset(para.atv_para.fe_paras, 0, 3 * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
- para.atv_para.fe_paras[0].m_type = FE_ANALOG;
- para.atv_para.fe_paras[0].analog.para.frequency = min_freq;
- para.atv_para.fe_paras[1].m_type = FE_ANALOG;
- para.atv_para.fe_paras[1].analog.para.frequency = max_freq;
- para.atv_para.fe_paras[2].m_type = FE_ANALOG;
- para.atv_para.fe_paras[2].analog.para.frequency = min_freq;
- }
- para.atv_para.direction = direction;
- para.atv_para.default_std = std;
-
- para.atv_para.channel_id = -1;
- para.atv_para.cvbs_unlocked_step = 1000000;
- para.atv_para.cvbs_locked_step = 3000000;
- para.atv_para.afc_range = 2000000;
-
- para.dtv_para.resort_all = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
- para.store_cb = NULL;
- para.atv_para.channel_num = channel_num;
-
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
-
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
- AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
- tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
- }
-
- LOGD("atv manual scan mode = %d", para.dtv_para.mode);
- // Start Scan
- if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
- LOGD("SCAN CREATE fail");
- handle = 0;
- } else {
- mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- if (AM_SCAN_Start(handle) != AM_SUCCESS) {
- AM_SCAN_Destroy(handle, AM_FALSE);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- handle = 0;
- }
- }
- if (para.atv_para.fe_paras != NULL)
- free(para.atv_para.fe_paras);
- if (para.dtv_para.fe_paras != NULL)
- free(para.dtv_para.fe_paras);
-
- if (handle == 0) {
- return -1;
- }
- mbScanStart = true;//start call ok
- } else {
- LOGD("scanning and not stop");
- }
+}
- return 0;
+void CTvScanner::am_scan_atv_store(AM_SCAN_Result_t *result)
+{
+ AM_SCAN_TS_t *ts;
+ int i, ret, db_sat_id = -1;
+ //AM_SCAN_RecTab_t srv_tab;
+ for(ts = result->tses; ts != NULL; ts = ts->p_next) {
+ //
+ m_s_Scanner->mCurEv.mType = ScannerEvent::EVENT_ATV_PROG_DATA;
+ m_s_Scanner->mCurEv.mVideoStd = CFrontEnd::stdAndColorToVideoEnum(ts->analog.std);
+ m_s_Scanner->mCurEv.mAudioStd = CFrontEnd::stdAndColorToAudioEnum(ts->analog.std);
+ m_s_Scanner->mCurEv.mIsAutoStd = ((ts->analog.std & V4L2_COLOR_STD_AUTO) == V4L2_COLOR_STD_AUTO) ? 1 : 0;
+ m_s_Scanner->mCurEv.mFrequency = ts->analog.freq;
+ //
+ m_s_Scanner->mpObserver->onEvent(m_s_Scanner->mCurEv);
+ }
+}
+void CTvScanner::setGlobalScanerObject(CTvScanner *s)
+{
+ m_s_Scanner = s;
}
+
int CTvScanner::autoAtvScan(int min_freq, int max_freq, int std, int search_type)
{
- stopScan();
- if (min_freq <= 0 || max_freq <= 0 || min_freq > max_freq)
- return -1;
- if (!mbScanStart) { //not start or stop
- mCurScanStartFreq = min_freq;
- mCurScanEndFreq = max_freq;
-
- AM_SCAN_CreatePara_t para;
- AM_DMX_OpenPara_t dmx_para;
- int handle = 0, i;
- // Create the scan
- memset(&para, 0, sizeof(para));
-
- para.fend_dev_id = 0;//default
- para.mode = AM_SCAN_MODE_ATV_DTV;//
- if (search_type == 1)
- para.atv_para.storeMode = 1;
- else
- para.atv_para.storeMode = 0;
- para.dtv_para.mode = AM_SCAN_DTVMODE_NONE;
-
- para.atv_para.am_scan_atv_cvbs_lock = s_atv_cvbs_lock_check;
-
- para.atv_para.fe_cnt = 3;
- para.atv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(3, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)));
- if (para.atv_para.fe_paras != NULL) {
- memset(para.atv_para.fe_paras, 0, 3 * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
- para.atv_para.fe_paras[0].m_type = FE_ANALOG;
- para.atv_para.fe_paras[0].analog.para.frequency = min_freq;
- para.atv_para.fe_paras[1].m_type = FE_ANALOG;
- para.atv_para.fe_paras[1].analog.para.frequency = max_freq;
- para.atv_para.fe_paras[2].m_type = FE_ANALOG;
- para.atv_para.fe_paras[2].analog.para.frequency = 0;
- }
-
- para.atv_para.direction = 0;
- para.atv_para.default_std = std;
-
- para.atv_para.channel_id = -1;
- para.atv_para.afc_unlocked_step = 3000000;
- para.atv_para.cvbs_unlocked_step = 1500000;
- para.atv_para.cvbs_locked_step = 6000000;
- para.atv_para.afc_range = 2000000;
-
- para.dtv_para.resort_all = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
- para.store_cb = NULL;
-
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
-
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
- AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
- tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
- }
-
- // prog->dmx_id = para.dtv_para.dmx_dev_id;
- // prog->fend_id = para.fend_dev_id;
- // prog->mode = para.dtv_para.mode;
- LOGD(" mode = %d", para.dtv_para.mode);
- // Start Scan
- if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
- LOGD("SCAN CREATE fail");
- handle = 0;
- } else {
- mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
- //注册æœç´¢äº‹ä»¶
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- //注册信å·è´¨é‡é€šçŸ¥äº‹ä»¶
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- if (AM_SCAN_Start(handle) != AM_SUCCESS) {
- AM_SCAN_Destroy(handle, AM_FALSE);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- handle = 0;
- }
- }
- if (para.atv_para.fe_paras != NULL)
- free(para.atv_para.fe_paras);
- if (para.dtv_para.fe_paras != NULL)
- free(para.dtv_para.fe_paras);
-
- if (handle == 0) {
- return -1;
- }
- mbScanStart = true;//start call ok
- } else {
- LOGD("scanning and not stop");
- }
-
- return 0;
+ stopScan();
+ if(min_freq <= 0 || max_freq <= 0 || min_freq > max_freq)
+ return -1;
+ if(!mbScanStart) { //not start or stop
+ mCurScanStartFreq = min_freq;
+ mCurScanEndFreq = max_freq;
+
+ AM_SCAN_CreatePara_t para;
+ AM_DMX_OpenPara_t dmx_para;
+ AM_SCAN_Handle_t handle = 0, i;
+ // Create the scan
+ memset(&para, 0, sizeof(para));
+
+ para.fend_dev_id = 0;//default
+ para.mode = AM_SCAN_MODE_ATV_DTV;//
+ if (search_type == 1)
+ para.atv_para.storeMode = 1;
+ else
+ para.atv_para.storeMode = 0;
+ para.dtv_para.mode = AM_SCAN_DTVMODE_NONE;
+
+ para.atv_para.am_scan_atv_cvbs_lock = s_atv_cvbs_lock_check;
+
+ para.atv_para.fe_cnt = 3;
+ para.atv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(3, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)));
+ if(para.atv_para.fe_paras != NULL) {
+ memset(para.atv_para.fe_paras, 0, 3 * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
+ para.atv_para.fe_paras[0].m_type = FE_ANALOG;
+ para.atv_para.fe_paras[0].analog.para.frequency = min_freq;
+ para.atv_para.fe_paras[1].m_type = FE_ANALOG;
+ para.atv_para.fe_paras[1].analog.para.frequency = max_freq;
+ para.atv_para.fe_paras[2].m_type = FE_ANALOG;
+ para.atv_para.fe_paras[2].analog.para.frequency = 0;
+ }
+
+ para.atv_para.direction = 0;
+ para.atv_para.default_std = std;
+
+ para.atv_para.channel_id = -1;
+ para.atv_para.afc_unlocked_step = 3000000;
+ para.atv_para.cvbs_unlocked_step = 1500000;
+ para.atv_para.cvbs_locked_step = 6000000;
+ para.atv_para.afc_range = 2000000;
+
+ para.dtv_para.resort_all = AM_FALSE;
+ para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
+ para.store_cb = am_scan_atv_store;
+
+ memset(&dmx_para, 0, sizeof(dmx_para));
+ AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
+
+ if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
+ AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
+ tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
+ }
+
+ // prog->dmx_id = para.dtv_para.dmx_dev_id;
+ // prog->fend_id = para.fend_dev_id;
+ // prog->mode = para.dtv_para.mode;
+ LOGD(" mode = %d", para.dtv_para.mode);
+ // Start Scan
+ if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
+ LOGD("SCAN CREATE fail");
+ handle = NULL;
+ } else {
+ mScanHandle = handle;
+ AM_SCAN_SetUserData(handle, (void *)this);
+ //注册æœç´¢äº‹ä»¶
+ AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
+ //注册信å·è´¨é‡é€šçŸ¥äº‹ä»¶
+ AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
+ if (AM_SCAN_Start(handle) != AM_SUCCESS) {
+ AM_SCAN_Destroy(handle, AM_FALSE);
+ AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
+ AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
+ handle = NULL;
+ }
+ }
+ if (para.atv_para.fe_paras != NULL)
+ free(para.atv_para.fe_paras);
+ if (para.dtv_para.fe_paras != NULL)
+ free(para.dtv_para.fe_paras);
+
+ if (handle == NULL) {
+ return -1;
+ }
+ mbScanStart = true;//start call ok
+ } else {
+ LOGD("scanning and not stop");
+ }
+
+ return 0;
}
-int CTvScanner::manualAtscScan(int channelID, int attennaType, int std)
+/*int CTvScanner::manualAtscScan(int channelID,int attennaType,int std)
{
- stopScan();
- if (!mbScanStart) { //not start or stop
+ stopScan();
+ if(!mbScanStart) { //not start or stop
AM_SCAN_CreatePara_t para;
AM_DMX_OpenPara_t dmx_para;
- int handle = 0, i;
+ AM_SCAN_Handle_t handle = 0;
+ int i;
// Create the scan
memset(&para, 0, sizeof(para));
@@ -283,7 +307,7 @@ int CTvScanner::manualAtscScan(int channelID, int attennaType, int std)
para.atv_para.mode = AM_SCAN_ATVMODE_NONE;
- para.atv_para.default_std = std;
+ para.atv_para.default_std= std;
para.dtv_para.mode = AM_SCAN_DTVMODE_MANUAL;//DTV_MODE_ALLBAND
@@ -291,52 +315,53 @@ int CTvScanner::manualAtscScan(int channelID, int attennaType, int std)
para.dtv_para.source = FE_ATSC;//fe_type
para.dtv_para.dmx_dev_id = 0;//default 0
para.dtv_para.resort_all = AM_TRUE;
- para.dtv_para.clear_source = AM_FALSE;
- para.dtv_para.mix_tv_radio = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
+ para.dtv_para.clear_source = AM_FALSE;
+ para.dtv_para.mix_tv_radio = AM_FALSE;
+ para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
para.store_cb = NULL;
- //para.dtv_para.attenna = attennaType;
+ //para.dtv_para.attenna = attennaType;
- para.dtv_para.standard = AM_SCAN_DTV_STD_ATSC;
+ para.dtv_para.standard = AM_SCAN_DTV_STD_ATSC;
- mSource = para.dtv_para.source;
+ mSource = para.dtv_para.source;
Vector<sp<CTvChannel> > vcp;
//CTvDatabase::getChannelParaList("/data/tv_default.xml", vcp);//channel list from xml or db
- getAtscChannelPara(attennaType, vcp);
- LOGD("ANDESEN test attenna type is %d", attennaType);
+ getAtscChannelPara(attennaType,vcp);
+ LOGD("ANDESEN test attenna type is %d",attennaType);
int size = vcp.size();
LOGD("channel list size = %d", size);
//showboz
- if (size == 0) {
+ if(size == 0) {
CTvDatabase::GetTvDb()->importXmlToDB("/etc/tv_default.xml");
- getAtscChannelPara(attennaType, vcp);
+ getAtscChannelPara(attennaType,vcp);
size = vcp.size();
}
- if (!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(1, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
+ if(!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t*>(calloc(1, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
return -1;
//memset(pfp, 0, size * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
for (i = 0; i < size; i++) {
- if (channelID == vcp[i]->getLogicalChannelNum()) {
- para.dtv_para.fe_paras[0].m_type = 3;//MODE_ATSC
- para.dtv_para.fe_paras[0].m_logicalChannelNum = vcp[i]->getLogicalChannelNum();
- para.dtv_para.fe_paras[0].atsc.para.frequency = vcp[i]->getFrequency();
- para.dtv_para.fe_paras[0].atsc.para.u.vsb.modulation = (fe_modulation_t)(vcp[i]->getModulation());
- LOGD("andesen test atsc manual type=%d,num=%d,freq=%d,modu=%d",
- para.dtv_para.fe_paras[0].m_type, para.dtv_para.fe_paras[0].m_logicalChannelNum,
- para.dtv_para.fe_paras[0].atsc.para.frequency, para.dtv_para.fe_paras[0].atsc.para.u.vsb.modulation);
- }
+ if(channelID == vcp[i]->getLogicalChannelNum())
+ {
+ para.dtv_para.fe_paras[0].m_type = 3;//MODE_ATSC
+ para.dtv_para.fe_paras[0].m_logicalChannelNum = vcp[i]->getLogicalChannelNum();
+ para.dtv_para.fe_paras[0].atsc.para.frequency = vcp[i]->getFrequency();
+ para.dtv_para.fe_paras[0].atsc.para.u.vsb.modulation = (fe_modulation_t)(vcp[i]->getModulation());
+ LOGD("andesen test atsc manual type=%d,num=%d,freq=%d,modu=%d",
+ para.dtv_para.fe_paras[0].m_type,para.dtv_para.fe_paras[0].m_logicalChannelNum,
+ para.dtv_para.fe_paras[0].atsc.para.frequency,para.dtv_para.fe_paras[0].atsc.para.u.vsb.modulation);
+ }
}
//allband
para.dtv_para.fe_cnt = 1;
memset(&dmx_para, 0, sizeof(dmx_para));
AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
+ if ((para.dtv_para.mode&0x07) != AM_SCAN_DTVMODE_NONE) {
AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
}
@@ -350,7 +375,7 @@ int CTvScanner::manualAtscScan(int channelID, int attennaType, int std)
handle = 0;
} else {
mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
+ AM_SCAN_SetUserData(handle, (void*)this);
//注册æœç´¢äº‹ä»¶
AM_EVT_Subscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
//注册信å·è´¨é‡é€šçŸ¥äº‹ä»¶
@@ -373,105 +398,105 @@ int CTvScanner::manualAtscScan(int channelID, int attennaType, int std)
mbScanStart = true;//start call ok
} else {
LOGD("scanning and not stop");
- }
- return 0;
-}
+ } return 0;
+}*/
int CTvScanner::manualDtmbScan(int beginFreq, int endFreq, int modulation)
{
- stopScan();
-
- if (!mbScanStart) { //not start or stop
- AM_SCAN_CreatePara_t para;
- AM_DMX_OpenPara_t dmx_para;
- int handle = 0, i;
- // Create the scan
- memset(&para, 0, sizeof(para));
-
- para.fend_dev_id = 0;//default
- para.mode = AM_SCAN_MODE_DTV_ATV;//DTV
- para.atv_para.mode = AM_SCAN_ATVMODE_NONE;
- para.dtv_para.mode = AM_SCAN_DTVMODE_MANUAL;
- para.dtv_para.source = FE_DTMB;//fe_type
- para.dtv_para.dmx_dev_id = 0;//default 0
-
- Vector<sp<CTvChannel> > vcp;
- CTvRegion::getChannelListByNameAndFreqRange("CHINA,Default DTMB ALL", beginFreq, endFreq, vcp);
- int size = vcp.size();
-
- //@author:hao.fu
- if (size == 0) {
- return -1;
- }
-
- if (!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
- return -1;
-
- for (i = 0; i < size; i++) {
- para.dtv_para.fe_paras[i].m_type = 5;//MODE_DTMB
- para.dtv_para.fe_paras[i].dtmb.para.frequency = vcp[i]->getFrequency();
- para.dtv_para.fe_paras[i].dtmb.para.inversion = INVERSION_OFF;
- para.dtv_para.fe_paras[i].dtmb.para.u.ofdm.bandwidth = (fe_bandwidth_t)(vcp[i]->getBandwidth());
- if (modulation == -1)
- para.dtv_para.fe_paras[i].cable.para.u.qam.modulation = (fe_modulation_t)(vcp[i]->getModulation());
- else
- para.dtv_para.fe_paras[i].cable.para.u.qam.modulation = (fe_modulation_t)modulation;
- }
-
- para.dtv_para.fe_cnt = size;
- para.dtv_para.resort_all = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
- para.store_cb = NULL;
-
-
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
-
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
- AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
- tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
- }
-
- // Start Scan
- if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
- LOGD("SCAN CREATE fail");
- handle = 0;
- } else {
- mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- if (AM_SCAN_Start(handle) != AM_SUCCESS) {
- AM_SCAN_Destroy(handle, AM_FALSE);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- handle = 0;
- }
- }
- if (para.atv_para.fe_paras != NULL)
- free(para.atv_para.fe_paras);
- if (para.dtv_para.fe_paras != NULL)
- free(para.dtv_para.fe_paras);
-
- if (handle == 0) {
- return -1;
- }
- mbScanStart = true;//start call ok
- } else {
- LOGD("scanning and not stop");
- }
- return 0;
+ stopScan();
+
+ if(!mbScanStart) { //not start or stop
+ AM_SCAN_CreatePara_t para;
+ AM_DMX_OpenPara_t dmx_para;
+ AM_SCAN_Handle_t handle = 0;
+ int i;
+ // Create the scan
+ memset(&para, 0, sizeof(para));
+
+ para.fend_dev_id = 0;//default
+ para.mode = AM_SCAN_MODE_DTV_ATV;//DTV
+ para.atv_para.mode = AM_SCAN_ATVMODE_NONE;
+ para.dtv_para.mode = AM_SCAN_DTVMODE_MANUAL;
+ para.dtv_para.source = FE_DTMB;//fe_type
+ para.dtv_para.dmx_dev_id = 0;//default 0
+
+ Vector<sp<CTvChannel> > vcp;
+ CTvRegion::getChannelListByNameAndFreqRange("CHINA,Default DTMB ALL", beginFreq, endFreq, vcp);
+ int size = vcp.size();
+
+ //@author:hao.fu
+ if(size == 0) {
+ return -1;
+ }
+
+ if(!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
+ return -1;
+
+ for (i = 0; i < size; i++) {
+ para.dtv_para.fe_paras[i].m_type = 5;//MODE_DTMB
+ para.dtv_para.fe_paras[i].dtmb.para.frequency = vcp[i]->getFrequency();
+ para.dtv_para.fe_paras[i].dtmb.para.inversion = INVERSION_OFF;
+ para.dtv_para.fe_paras[i].dtmb.para.u.ofdm.bandwidth = (fe_bandwidth_t)(vcp[i]->getBandwidth());
+ if (modulation == -1)
+ para.dtv_para.fe_paras[i].cable.para.u.qam.modulation = (fe_modulation_t)(vcp[i]->getModulation());
+ else
+ para.dtv_para.fe_paras[i].cable.para.u.qam.modulation = (fe_modulation_t)modulation;
+ }
+
+ para.dtv_para.fe_cnt = size;
+ para.dtv_para.resort_all = AM_FALSE;
+ para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
+ para.store_cb = NULL;
+
+
+ memset(&dmx_para, 0, sizeof(dmx_para));
+ AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
+
+ if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
+ AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
+ tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
+ }
+
+ // Start Scan
+ if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
+ LOGD("SCAN CREATE fail");
+ handle = NULL;
+ } else {
+ mScanHandle = handle;
+ AM_SCAN_SetUserData(handle, (void *)this);
+ AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
+ AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
+ if (AM_SCAN_Start(handle) != AM_SUCCESS) {
+ AM_SCAN_Destroy(handle, AM_FALSE);
+ AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
+ AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
+ handle = NULL;
+ }
+ }
+ if (para.atv_para.fe_paras != NULL)
+ free(para.atv_para.fe_paras);
+ if (para.dtv_para.fe_paras != NULL)
+ free(para.dtv_para.fe_paras);
+
+ if (handle == NULL) {
+ return -1;
+ }
+ mbScanStart = true;//start call ok
+ } else {
+ LOGD("scanning and not stop");
+ }
+ return 0;
}
-int CTvScanner::autoTvScan()
+/*int CTvScanner::autoTvScan()
{
stopScan();
- if (!mbScanStart) { //not start or stop
+ if(!mbScanStart) { //not start or stop
AM_SCAN_CreatePara_t para;
AM_DMX_OpenPara_t dmx_para;
- int handle = 0, i;
+ int handle = 0,i;
// Create the scan
memset(&para, 0, sizeof(para));
@@ -490,7 +515,7 @@ int CTvScanner::autoTvScan()
int size = vcp.size();
LOGD("channel list size = %d", size);
- if (!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
+ if(!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t*>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
return -1;
//memset(pfp, 0, size * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
@@ -511,7 +536,7 @@ int CTvScanner::autoTvScan()
memset(&dmx_para, 0, sizeof(dmx_para));
AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
+ if ((para.dtv_para.mode&0x07) != AM_SCAN_DTVMODE_NONE) {
AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
}
@@ -526,7 +551,7 @@ int CTvScanner::autoTvScan()
} else {
LOGD("SCAN CREATE handle = %d", handle);
mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
+ AM_SCAN_SetUserData(handle, (void*)this);
//注册æœç´¢äº‹ä»¶
AM_EVT_Subscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
//注册信å·è´¨é‡é€šçŸ¥äº‹ä»¶
@@ -551,16 +576,16 @@ int CTvScanner::autoTvScan()
LOGD("scanning and not stop");
}
return 0;
-}
+}*/
//only test for dtv allbland auto
-int CTvScanner::startScan()
+/*int CTvScanner::startScan()
{
stopScan();
- if (!mbScanStart) { //not start or stop
+ if(!mbScanStart) { //not start or stop
AM_SCAN_CreatePara_t para;
AM_DMX_OpenPara_t dmx_para;
- int handle = 0, i;
+ int handle = 0,i;
// Create the scan
memset(&para, 0, sizeof(para));
@@ -579,7 +604,7 @@ int CTvScanner::startScan()
int size = vcp.size();
LOGD("channel list size = %d", size);
- if (!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
+ if(!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t*>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
return -1;
//memset(pfp, 0, size * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
@@ -601,7 +626,7 @@ int CTvScanner::startScan()
memset(&dmx_para, 0, sizeof(dmx_para));
AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
+ if ((para.dtv_para.mode&0x07) != AM_SCAN_DTVMODE_NONE) {
AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
}
@@ -615,7 +640,7 @@ int CTvScanner::startScan()
handle = 0;
} else {
mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
+ AM_SCAN_SetUserData(handle, (void*)this);
//注册æœç´¢äº‹ä»¶
AM_EVT_Subscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
//注册信å·è´¨é‡é€šçŸ¥äº‹ä»¶
@@ -640,113 +665,113 @@ int CTvScanner::startScan()
LOGD("scanning and not stop");
}
return 0;
-}
+}*/
//only test for dtv allbland auto
int CTvScanner::autoDtmbScan()
{
- stopScan();
-
- if (!mbScanStart) { //not start or stop
- AM_SCAN_CreatePara_t para;
- AM_DMX_OpenPara_t dmx_para;
- int handle = 0, i;
- // Create the scan
- memset(&para, 0, sizeof(para));
-
- //strcpy(para.default_text_lang,"eng");//config
- //strcpy(para.text_langs, "local eng zho chi chs first");//config
- para.fend_dev_id = 0;//default
- para.mode = AM_SCAN_MODE_DTV_ATV;//DTV
- para.atv_para.mode = AM_SCAN_ATVMODE_NONE;
- para.dtv_para.mode = AM_SCAN_DTVMODE_ALLBAND;//DTV_MODE_ALLBAND
- //para.dtv_para.mode |= (*env)->GetIntField(env, para, doptions);//忽略
- para.dtv_para.source = FE_DTMB;//fe_type
- para.dtv_para.dmx_dev_id = 0;//default 0
- Vector<sp<CTvChannel> > vcp;
- //CTvDatabase::getChannelParaList("/data/tv_default.xml", vcp);//channel list from xml or db
- CTvRegion::getChannelListByName("CHINA,Default DTMB ALL", vcp);
-
- int size = vcp.size();
- LOGD("channel list size = %d", size);
- //showboz
- if (size == 0) {
- CTvDatabase::GetTvDb()->importXmlToDB("/etc/tv_default.xml");
- CTvRegion::getChannelListByName("CHINA,Default DTMB ALL", vcp);
- size = vcp.size();
- }
-
- if (!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
- return -1;
-
- //memset(pfp, 0, size * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
-
- for (i = 0; i < size; i++) {
- para.dtv_para.fe_paras[i].m_type = 5;//MODE_DTMB
- para.dtv_para.fe_paras[i].dtmb.para.frequency = vcp[i]->getFrequency();
- para.dtv_para.fe_paras[i].dtmb.para.inversion = INVERSION_OFF;
- para.dtv_para.fe_paras[i].dtmb.para.u.ofdm.bandwidth = (fe_bandwidth_t)(vcp[i]->getBandwidth());
- }
- //allband
- para.dtv_para.fe_cnt = size;
-
- para.dtv_para.resort_all = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
- para.store_cb = NULL;
-
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
-
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
- AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
- tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
- }
-
- // prog->dmx_id = para.dtv_para.dmx_dev_id;
- // prog->fend_id = para.fend_dev_id;
- // prog->mode = para.dtv_para.mode;
- // Start Scan
- if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
- LOGD("SCAN CREATE fail");
- handle = 0;
- } else {
- mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
- //注册æœç´¢äº‹ä»¶
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- //注册信å·è´¨é‡é€šçŸ¥äº‹ä»¶
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- if (AM_SCAN_Start(handle) != AM_SUCCESS) {
- AM_SCAN_Destroy(handle, AM_FALSE);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- handle = 0;
- }
- }
- if (para.atv_para.fe_paras != NULL)
- free(para.atv_para.fe_paras);
- if (para.dtv_para.fe_paras != NULL)
- free(para.dtv_para.fe_paras);
-
- if (handle == 0) {
- return -1;
- }
- mbScanStart = true;//start call ok
- } else {
- LOGD("scanning and not stop");
- }
- return 0;
+ stopScan();
+
+ if(!mbScanStart) { //not start or stop
+ AM_SCAN_CreatePara_t para;
+ AM_DMX_OpenPara_t dmx_para;
+ AM_SCAN_Handle_t handle = 0;
+ // Create the scan
+ memset(&para, 0, sizeof(para));
+
+ //strcpy(para.default_text_lang,"eng");//config
+ //strcpy(para.text_langs, "local eng zho chi chs first");//config
+ para.fend_dev_id = 0;//default
+ para.mode = AM_SCAN_MODE_DTV_ATV;//DTV
+ para.atv_para.mode = AM_SCAN_ATVMODE_NONE;
+ para.dtv_para.mode = AM_SCAN_DTVMODE_ALLBAND;//DTV_MODE_ALLBAND
+ //para.dtv_para.mode |= (*env)->GetIntField(env, para, doptions);//忽略
+ para.dtv_para.source = FE_DTMB;//fe_type
+ para.dtv_para.dmx_dev_id = 0;//default 0
+ Vector<sp<CTvChannel> > vcp;
+ //CTvDatabase::getChannelParaList("/data/tv_default.xml", vcp);//channel list from xml or db
+ CTvRegion::getChannelListByName("CHINA,Default DTMB ALL", vcp);
+
+ int size = vcp.size();
+ LOGD("channel list size = %d", size);
+ //showboz
+ if(size == 0) {
+ CTvDatabase::GetTvDb()->importXmlToDB("/etc/tv_default.xml");
+ CTvRegion::getChannelListByName("CHINA,Default DTMB ALL", vcp);
+ size = vcp.size();
+ }
+
+ if(!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
+ return -1;
+
+ //memset(pfp, 0, size * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
+
+ for (int i = 0; i < size; i++) {
+ para.dtv_para.fe_paras[i].m_type = 5;//MODE_DTMB
+ para.dtv_para.fe_paras[i].dtmb.para.frequency = vcp[i]->getFrequency();
+ para.dtv_para.fe_paras[i].dtmb.para.inversion = INVERSION_OFF;
+ para.dtv_para.fe_paras[i].dtmb.para.u.ofdm.bandwidth = (fe_bandwidth_t)(vcp[i]->getBandwidth());
+ }
+ //allband
+ para.dtv_para.fe_cnt = size;
+
+ para.dtv_para.resort_all = AM_FALSE;
+ para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
+ para.store_cb = NULL;
+
+ memset(&dmx_para, 0, sizeof(dmx_para));
+ AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
+
+ if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
+ AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
+ tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
+ }
+
+ // prog->dmx_id = para.dtv_para.dmx_dev_id;
+ // prog->fend_id = para.fend_dev_id;
+ // prog->mode = para.dtv_para.mode;
+ // Start Scan
+ if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
+ LOGD("SCAN CREATE fail");
+ handle = NULL;
+ } else {
+ mScanHandle = handle;
+ AM_SCAN_SetUserData(handle, (void *)this);
+ //注册æœç´¢äº‹ä»¶
+ AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
+ //注册信å·è´¨é‡é€šçŸ¥äº‹ä»¶
+ AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
+ if (AM_SCAN_Start(handle) != AM_SUCCESS) {
+ AM_SCAN_Destroy(handle, AM_FALSE);
+ AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
+ AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
+ handle = NULL;
+ }
+ }
+ if (para.atv_para.fe_paras != NULL)
+ free(para.atv_para.fe_paras);
+ if (para.dtv_para.fe_paras != NULL)
+ free(para.dtv_para.fe_paras);
+
+ if (handle == NULL) {
+ return -1;
+ }
+ mbScanStart = true;//start call ok
+ } else {
+ LOGD("scanning and not stop");
+ }
+ return 0;
}
-int CTvScanner::autoAtscScan(int attennaType, int std)
+/*int CTvScanner::autoAtscScan(int attennaType,int std)
{
stopScan();
- if (!mbScanStart) { //not start or stop
+ if(!mbScanStart) { //not start or stop
AM_SCAN_CreatePara_t para;
AM_DMX_OpenPara_t dmx_para;
- int handle = 0, i;
+ int handle = 0,i;
// Create the scan
memset(&para, 0, sizeof(para));
@@ -757,7 +782,7 @@ int CTvScanner::autoAtscScan(int attennaType, int std)
para.atv_para.mode = AM_SCAN_ATVMODE_NONE;
- para.atv_para.default_std = std;
+ para.atv_para.default_std= std;
para.dtv_para.mode = AM_SCAN_DTVMODE_ALLBAND;//DTV_MODE_ALLBAND
@@ -765,31 +790,31 @@ int CTvScanner::autoAtscScan(int attennaType, int std)
para.dtv_para.source = FE_ATSC;//fe_type
para.dtv_para.dmx_dev_id = 0;//default 0
para.dtv_para.resort_all = AM_TRUE;
- para.dtv_para.clear_source = AM_TRUE;
- para.dtv_para.mix_tv_radio = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
+ para.dtv_para.clear_source = AM_TRUE;
+ para.dtv_para.mix_tv_radio = AM_FALSE;
+ para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
para.store_cb = NULL;
- //para.dtv_para.attenna = attennaType;//see dvb atsc-cnc
+ //para.dtv_para.attenna = attennaType;//see dvb atsc-cnc
- para.dtv_para.standard = AM_SCAN_DTV_STD_ATSC;
+ para.dtv_para.standard = AM_SCAN_DTV_STD_ATSC;
- mSource = para.dtv_para.source;
+ mSource = para.dtv_para.source;
Vector<sp<CTvChannel> > vcp;
//CTvDatabase::getChannelParaList("/data/tv_default.xml", vcp);//channel list from xml or db
- getAtscChannelPara(attennaType, vcp);
- LOGD("ANDESEN test attenna type is %d", attennaType);
+ getAtscChannelPara(attennaType,vcp);
+ LOGD("ANDESEN test attenna type is %d",attennaType);
int size = vcp.size();
LOGD("channel list size = %d", size);
//showboz
- if (size == 0) {
+ if(size == 0) {
CTvDatabase::GetTvDb()->importXmlToDB("/etc/tv_default.xml");
- getAtscChannelPara(attennaType, vcp);
+ getAtscChannelPara(attennaType,vcp);
size = vcp.size();
}
- if (!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
+ if(!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t*>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
return -1;
//memset(pfp, 0, size * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
@@ -806,7 +831,7 @@ int CTvScanner::autoAtscScan(int attennaType, int std)
memset(&dmx_para, 0, sizeof(dmx_para));
AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
+ if ((para.dtv_para.mode&0x07) != AM_SCAN_DTVMODE_NONE) {
AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
}
@@ -820,7 +845,7 @@ int CTvScanner::autoAtscScan(int attennaType, int std)
handle = 0;
} else {
mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
+ AM_SCAN_SetUserData(handle, (void*)this);
//注册æœç´¢äº‹ä»¶
AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
AM_EVT_Subscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
@@ -846,99 +871,99 @@ int CTvScanner::autoAtscScan(int attennaType, int std)
LOGD("scanning and not stop");
}
return 0;
-}
+}*/
int CTvScanner::stopScan()
{
- LOGD("StopScan mScanHandle=%d", mScanHandle);
- //requestExit();
- if (mbScanStart) { //if start ok and not stop
- int ret = AM_SCAN_Destroy(mScanHandle, AM_TRUE);
- AM_EVT_Unsubscribe(mScanHandle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe(mScanHandle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- AM_SEC_Cache_Reset(0);
- //stop loop
- LOGD("StopScan , ret=%d", ret);
- mbScanStart = false;//stop ok
- } else {
- LOGD("not start scan or scan stoped");
- }
- return 0;
+ LOGD("StopScan mScanHandle=%d", mScanHandle);
+ //requestExit();
+ if(mbScanStart) { //if start ok and not stop
+ int ret = AM_SCAN_Destroy(mScanHandle, AM_TRUE);
+ AM_EVT_Unsubscribe((long)mScanHandle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
+ AM_EVT_Unsubscribe((long)mScanHandle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
+ AM_SEC_Cache_Reset(0);
+ //stop loop
+ LOGD("StopScan , ret=%d", ret);
+ mbScanStart = false;//stop ok
+ } else {
+ LOGD("not start scan or scan stoped");
+ }
+ return 0;
}
-void CTvScanner::tv_scan_evt_callback(int dev_no, int event_type, void *param, void *data)
+void CTvScanner::tv_scan_evt_callback(long dev_no, int event_type, void *param, void *data)
{
- CTvScanner *pT = NULL;
- long long tmpFreq = 0;
- AM_SCAN_GetUserData(dev_no, (void **)&pT);
- if (pT == NULL) {
- return;
- }
- memset(pT->mCurEv.mProgramName, '\0', sizeof(pT->mCurEv.mProgramName));
- memset(pT->mCurEv.mMSG, '\0', sizeof(pT->mCurEv.mMSG));
- if (event_type == AM_SCAN_EVT_PROGRESS) {
- AM_SCAN_Progress_t *evt = (AM_SCAN_Progress_t *)param;
- switch (evt->evt) {
- case AM_SCAN_PROGRESS_SCAN_BEGIN:
- pT->mCurEv.mPercent = 0;
- break;
- case AM_SCAN_PROGRESS_NIT_BEGIN:
-
- break;
- case AM_SCAN_PROGRESS_NIT_END:
-
- break;
- case AM_SCAN_PROGRESS_TS_BEGIN: {
- AM_SCAN_TSProgress_t *tp = (AM_SCAN_TSProgress_t *)evt->data;
- if (tp == NULL)
- break;
- pT->mCurEv.mChannelNumber = tp->index;
- pT->mCurEv.mMode = tp->fend_para.m_type;
- pT->mCurEv.mFrequency = ((struct dvb_frontend_parameters *)(&tp->fend_para))->frequency;
- pT->mCurEv.mSymbolRate = tp->fend_para.cable.para.u.qam.symbol_rate;
- pT->mCurEv.mModulation = tp->fend_para.cable.para.u.qam.modulation;
- pT->mCurEv.mBandwidth = tp->fend_para.terrestrial.para.u.ofdm.bandwidth;
- pT->mCurEv.mOfdm_mode = tp->fend_para.terrestrial.para.u.ofdm.ofdm_mode;
- pT->mCurEv.mAudio = tp->fend_para.analog.para.u.analog.audmode;
- pT->mCurEv.mStandard = tp->fend_para.analog.para.u.analog.std;
- pT->mCurEv.mSat_polarisation = tp->fend_para.sat.polarisation;
- if (pT->mCurEv.mMode == FE_ANALOG) {
- if (pT->mSource == FE_ATSC) {
- pT->mCurEv.mPercent = (tp->index * 100) / tp->total;
- } else {
- pT->mCurEv.mPercent = 0;
- }
- } else {
- pT->mCurEv.mPercent = (tp->index * 100) / tp->total;
- }
-
- if (pT->mCurEv.mTotalChannelCount == 0)
- pT->mCurEv.mTotalChannelCount = tp->total;
- if (pT->mCurEv.mPercent >= 100)
- pT->mCurEv.mPercent = 99;
-
- pT->mCurEv.mLockedStatus = 0;
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
-
- pT->mpObserver->onEvent(pT->mCurEv);
- }
- break;
- case AM_SCAN_PROGRESS_TS_END: {
- /*pT->mCurEv.mLockedStatus = 0;
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
- pT->mpObserver->onEvent(pT->mCurEv);*/
- }
- break;
-
- case AM_SCAN_PROGRESS_PAT_DONE: /*{
- if (pT->mCurEv.mTotalChannelCount == 1) {
+ CTvScanner *pT = NULL;
+ long long tmpFreq = 0;
+ AM_SCAN_GetUserData((AM_SCAN_Handle_t)dev_no, (void **)&pT);
+ if(pT == NULL) {
+ return;
+ }
+ memset(pT->mCurEv.mProgramName, '\0', sizeof(pT->mCurEv.mProgramName));
+ memset(pT->mCurEv.mMSG, '\0', sizeof(pT->mCurEv.mMSG));
+ if (event_type == AM_SCAN_EVT_PROGRESS) {
+ AM_SCAN_Progress_t *evt = (AM_SCAN_Progress_t *)param;
+ switch (evt->evt) {
+ case AM_SCAN_PROGRESS_SCAN_BEGIN:
+ pT->mCurEv.mPercent = 0;
+ break;
+ case AM_SCAN_PROGRESS_NIT_BEGIN:
+
+ break;
+ case AM_SCAN_PROGRESS_NIT_END:
+
+ break;
+ case AM_SCAN_PROGRESS_TS_BEGIN: {
+ AM_SCAN_TSProgress_t *tp = (AM_SCAN_TSProgress_t *)evt->data;
+ if (tp == NULL)
+ break;
+ pT->mCurEv.mChannelNumber = tp->index;
+ pT->mCurEv.mMode = tp->fend_para.m_type;
+ pT->mCurEv.mFrequency = ((struct dvb_frontend_parameters *)(&tp->fend_para))->frequency;
+ pT->mCurEv.mSymbolRate = tp->fend_para.cable.para.u.qam.symbol_rate;
+ pT->mCurEv.mModulation = tp->fend_para.cable.para.u.qam.modulation;
+ pT->mCurEv.mBandwidth = tp->fend_para.terrestrial.para.u.ofdm.bandwidth;
+ pT->mCurEv.mOfdm_mode = tp->fend_para.terrestrial.para.u.ofdm.ofdm_mode;
+ pT->mCurEv.mAudio = tp->fend_para.analog.para.u.analog.audmode;
+ pT->mCurEv.mStandard = tp->fend_para.analog.para.u.analog.std;
+ pT->mCurEv.mSat_polarisation = tp->fend_para.sat.polarisation;
+ if (pT->mCurEv.mMode == FE_ANALOG) {
+ if(pT->mSource == FE_ATSC) {
+ pT->mCurEv.mPercent = (tp->index * 100) / tp->total;
+ } else {
+ pT->mCurEv.mPercent = 0;
+ }
+ } else {
+ pT->mCurEv.mPercent = (tp->index * 100) / tp->total;
+ }
+
+ if (pT->mCurEv.mTotalChannelCount == 0)
+ pT->mCurEv.mTotalChannelCount = tp->total;
+ if (pT->mCurEv.mPercent >= 100)
+ pT->mCurEv.mPercent = 99;
+
+ pT->mCurEv.mLockedStatus = 0;
+ pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
+
+ pT->mpObserver->onEvent(pT->mCurEv);
+ }
+ break;
+ case AM_SCAN_PROGRESS_TS_END: {
+ /*pT->mCurEv.mLockedStatus = 0;
+ pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
+ pT->mpObserver->onEvent(pT->mCurEv);*/
+ }
+ break;
+
+ case AM_SCAN_PROGRESS_PAT_DONE: /*{
+ if(pT->mCurEv.mTotalChannelCount == 1) {
pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
pT->mpObserver->onEvent(pT->mCurEv);
}
}*/
- break;
- case AM_SCAN_PROGRESS_SDT_DONE: /*{
+ break;
+ case AM_SCAN_PROGRESS_SDT_DONE: /*{
dvbpsi_sdt_t *sdts = (dvbpsi_sdt_t *)evt->data;
dvbpsi_sdt_t *sdt;
@@ -951,8 +976,8 @@ void CTvScanner::tv_scan_evt_callback(int dev_no, int event_type, void *param, v
pT->mpObserver->onEvent(pT->mCurEv);
}
}*/
- break;
- case AM_SCAN_PROGRESS_CAT_DONE: /*{
+ break;
+ case AM_SCAN_PROGRESS_CAT_DONE: /*{
dvbpsi_cat_t *cat = (dvbpsi_cat_t *)evt->data;
if (pT->mCurEv.mTotalChannelCount == 1) {
pT->mCurEv.mPercent += 25;
@@ -964,8 +989,8 @@ void CTvScanner::tv_scan_evt_callback(int dev_no, int event_type, void *param, v
pT->mpObserver->onEvent(pT->mCurEv);
}
}*/
- break;
- case AM_SCAN_PROGRESS_PMT_DONE: /*{
+ break;
+ case AM_SCAN_PROGRESS_PMT_DONE: /*{
dvbpsi_pmt_t *pmt = (dvbpsi_pmt_t *)evt->data;
if (pT->mCurEv.mTotalChannelCount == 1) {
pT->mCurEv.mPercent += 25;
@@ -976,171 +1001,171 @@ void CTvScanner::tv_scan_evt_callback(int dev_no, int event_type, void *param, v
pT->mpObserver->onEvent(pT->mCurEv);
}
}*/
- break;
- case AM_SCAN_PROGRESS_MGT_DONE: {
- mgt_section_info_t *mgt = (mgt_section_info_t *)evt->data;
-
- if (pT->mCurEv.mTotalChannelCount == 1) {
- pT->mCurEv.mPercent += 10;
- if (pT->mCurEv.mPercent >= 100)
- pT->mCurEv.mPercent = 99;
-
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
-
- pT->mpObserver->onEvent(pT->mCurEv);
- }
- }
- break;
- case AM_SCAN_PROGRESS_VCT_DONE: {
- /*ATSC TVCT*/
- if (pT->mCurEv.mTotalChannelCount == 1) {
- pT->mCurEv.mPercent += 30;
- if (pT->mCurEv.mPercent >= 100)
- pT->mCurEv.mPercent = 99;
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
-
- pT->mpObserver->onEvent(pT->mCurEv);
- }
- }
- break;
- case AM_SCAN_PROGRESS_NEW_PROGRAM: {
- /* Notify the new searched programs */
- AM_SCAN_ProgramProgress_t *pp = (AM_SCAN_ProgramProgress_t *)evt->data;
- if (pp != NULL) {
- pT->mCurEv.mprogramType = pp->service_type;
- snprintf(pT->mCurEv.mProgramName, sizeof(pT->mCurEv.mProgramName), "%s", pp->name);
-
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
-
- pT->mpObserver->onEvent(pT->mCurEv);
- }
- }
- break;
- case AM_SCAN_PROGRESS_BLIND_SCAN: {
- AM_SCAN_DTVBlindScanProgress_t *bs_prog = (AM_SCAN_DTVBlindScanProgress_t *)evt->data;
-
- if (bs_prog) {
- pT->mCurEv.mPercent = bs_prog->progress;
-
- snprintf(pT->mCurEv.mMSG, sizeof(pT->mCurEv.mMSG), "%s/%s %dMHz",
- bs_prog->polar == AM_FEND_POLARISATION_H ? "H" : "V",
- bs_prog->lo == AM_FEND_LOCALOSCILLATORFREQ_L ? "L-LOF" : "H-LOF",
- bs_prog->freq / 1000);
-
- pT->mCurEv.mType = ScannerEvent::EVENT_BLINDSCAN_PROGRESS;
-
- pT->mpObserver->onEvent(pT->mCurEv);
-
- if (bs_prog->new_tp_cnt > 0) {
- int i = 0;
- for (i = 0; i < bs_prog->new_tp_cnt; i++) {
- LOGD("====New tp: %dkS/s %d====", bs_prog->new_tps[i].frequency,
- bs_prog->new_tps[i].u.qpsk.symbol_rate);
-
- pT->mCurEv.mFrequency = bs_prog->new_tps[i].frequency;
- pT->mCurEv.mSymbolRate = bs_prog->new_tps[i].u.qpsk.symbol_rate;
- pT->mCurEv.mSat_polarisation = bs_prog->polar;
-
- pT->mCurEv.mType = ScannerEvent::EVENT_BLINDSCAN_NEWCHANNEL;
-
- pT->mpObserver->onEvent(pT->mCurEv);
- }
- }
- if (bs_prog->progress >= 100) {
-
- pT->mCurEv.mType = ScannerEvent::EVENT_BLINDSCAN_END;
-
- pT->mpObserver->onEvent(pT->mCurEv);
-
- pT->mCurEv.mPercent = 0;
- }
- }
- }
- break;
- case AM_SCAN_PROGRESS_STORE_BEGIN: {
- pT->mCurEv.mType = ScannerEvent::EVENT_STORE_BEGIN;
- pT->mCurEv.mLockedStatus = 0;
- if (pT->mpObserver != NULL)
- pT->mpObserver->onEvent(pT->mCurEv);
- }
- break;
- case AM_SCAN_PROGRESS_STORE_END: {
- pT->mCurEv.mLockedStatus = 0;
- pT->mCurEv.mType = ScannerEvent::EVENT_STORE_END;
- pT->mpObserver->onEvent(pT->mCurEv);
- }
- break;
- case AM_SCAN_PROGRESS_SCAN_END: {
- pT->mCurEv.mPercent = 100;
- pT->mCurEv.mLockedStatus = 0;
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_END;
- pT->mpObserver->onEvent(pT->mCurEv);
- }
- break;
- case AM_SCAN_PROGRESS_ATV_TUNING: {
- pT->mCurEv.mFrequency = (int)evt->data;
- pT->mCurEv.mLockedStatus = 0;
- tmpFreq = (pT->mCurEv.mFrequency - pT->mCurScanStartFreq) / 1000000;
- pT->mCurEv.mPercent = tmpFreq * 100UL / ((pT->mCurScanEndFreq - pT->mCurScanStartFreq) / 1000000);
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
- pT->mpObserver->onEvent(pT->mCurEv);
- }
- break;
-
- default:
- break;
- }
- } else if (event_type == AM_SCAN_EVT_SIGNAL) {
- AM_SCAN_DTVSignalInfo_t *evt = (AM_SCAN_DTVSignalInfo_t *)param;
- pT->mCurEv.mprogramType = 0xff;
- pT->mCurEv.mFrequency = (int)evt->frequency;
- pT->mCurEv.mLockedStatus = (evt->locked ? 1 : 0);
-
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
- if (pT->mCurEv.mMode != FE_ANALOG && evt->locked) {
- pT->mCurEv.mStrength = evt->strength;
- pT->mCurEv.mSnr = evt->snr;
- } else {
- pT->mCurEv.mStrength = 0;
- pT->mCurEv.mSnr = 0;
- }
-
- if (pT->mCurEv.mMode == FE_ANALOG)
- pT->mpObserver->onEvent(pT->mCurEv);
- }
+ break;
+ case AM_SCAN_PROGRESS_MGT_DONE: {
+ mgt_section_info_t *mgt = (mgt_section_info_t *)evt->data;
+
+ if (pT->mCurEv.mTotalChannelCount == 1) {
+ pT->mCurEv.mPercent += 10;
+ if (pT->mCurEv.mPercent >= 100)
+ pT->mCurEv.mPercent = 99;
+
+ pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
+
+ pT->mpObserver->onEvent(pT->mCurEv);
+ }
+ }
+ break;
+ case AM_SCAN_PROGRESS_VCT_DONE: {
+ /*ATSC TVCT*/
+ if (pT->mCurEv.mTotalChannelCount == 1) {
+ pT->mCurEv.mPercent += 30;
+ if (pT->mCurEv.mPercent >= 100)
+ pT->mCurEv.mPercent = 99;
+ pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
+
+ pT->mpObserver->onEvent(pT->mCurEv);
+ }
+ }
+ break;
+ case AM_SCAN_PROGRESS_NEW_PROGRAM: {
+ /* Notify the new searched programs */
+ AM_SCAN_ProgramProgress_t *pp = (AM_SCAN_ProgramProgress_t *)evt->data;
+ if (pp != NULL) {
+ pT->mCurEv.mprogramType = pp->service_type;
+ snprintf(pT->mCurEv.mProgramName, sizeof(pT->mCurEv.mProgramName), "%s", pp->name);
+
+ pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
+
+ pT->mpObserver->onEvent(pT->mCurEv);
+ }
+ }
+ break;
+ case AM_SCAN_PROGRESS_BLIND_SCAN: {
+ AM_SCAN_DTVBlindScanProgress_t *bs_prog = (AM_SCAN_DTVBlindScanProgress_t *)evt->data;
+
+ if (bs_prog) {
+ pT->mCurEv.mPercent = bs_prog->progress;
+
+ snprintf(pT->mCurEv.mMSG, sizeof(pT->mCurEv.mMSG), "%s/%s %dMHz",
+ bs_prog->polar == AM_FEND_POLARISATION_H ? "H" : "V",
+ bs_prog->lo == AM_FEND_LOCALOSCILLATORFREQ_L ? "L-LOF" : "H-LOF",
+ bs_prog->freq / 1000);
+
+ pT->mCurEv.mType = ScannerEvent::EVENT_BLINDSCAN_PROGRESS;
+
+ pT->mpObserver->onEvent(pT->mCurEv);
+
+ if (bs_prog->new_tp_cnt > 0) {
+ int i = 0;
+ for (i = 0; i < bs_prog->new_tp_cnt; i++) {
+ LOGD("====New tp: %dkS/s %d====", bs_prog->new_tps[i].frequency,
+ bs_prog->new_tps[i].u.qpsk.symbol_rate);
+
+ pT->mCurEv.mFrequency = bs_prog->new_tps[i].frequency;
+ pT->mCurEv.mSymbolRate = bs_prog->new_tps[i].u.qpsk.symbol_rate;
+ pT->mCurEv.mSat_polarisation = bs_prog->polar;
+
+ pT->mCurEv.mType = ScannerEvent::EVENT_BLINDSCAN_NEWCHANNEL;
+
+ pT->mpObserver->onEvent(pT->mCurEv);
+ }
+ }
+ if (bs_prog->progress >= 100) {
+
+ pT->mCurEv.mType = ScannerEvent::EVENT_BLINDSCAN_END;
+
+ pT->mpObserver->onEvent(pT->mCurEv);
+
+ pT->mCurEv.mPercent = 0;
+ }
+ }
+ }
+ break;
+ case AM_SCAN_PROGRESS_STORE_BEGIN: {
+ pT->mCurEv.mType = ScannerEvent::EVENT_STORE_BEGIN;
+ pT->mCurEv.mLockedStatus = 0;
+ if(pT->mpObserver != NULL)
+ pT->mpObserver->onEvent(pT->mCurEv);
+ }
+ break;
+ case AM_SCAN_PROGRESS_STORE_END: {
+ pT->mCurEv.mLockedStatus = 0;
+ pT->mCurEv.mType = ScannerEvent::EVENT_STORE_END;
+ pT->mpObserver->onEvent(pT->mCurEv);
+ }
+ break;
+ case AM_SCAN_PROGRESS_SCAN_END: {
+ pT->mCurEv.mPercent = 100;
+ pT->mCurEv.mLockedStatus = 0;
+ pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_END;
+ pT->mpObserver->onEvent(pT->mCurEv);
+ }
+ break;
+ case AM_SCAN_PROGRESS_ATV_TUNING: {
+ pT->mCurEv.mFrequency = (int)evt->data;
+ pT->mCurEv.mLockedStatus = 0;
+ tmpFreq = (pT->mCurEv.mFrequency - pT->mCurScanStartFreq) / 1000000;
+ pT->mCurEv.mPercent = tmpFreq * 100UL / ((pT->mCurScanEndFreq - pT->mCurScanStartFreq) / 1000000);
+ pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
+ pT->mpObserver->onEvent(pT->mCurEv);
+ }
+ break;
+
+ default:
+ break;
+ }
+ } else if (event_type == AM_SCAN_EVT_SIGNAL) {
+ AM_SCAN_DTVSignalInfo_t *evt = (AM_SCAN_DTVSignalInfo_t *)param;
+ pT->mCurEv.mprogramType = 0xff;
+ pT->mCurEv.mFrequency = (int)evt->frequency;
+ pT->mCurEv.mLockedStatus = (evt->locked ? 1 : 0);
+
+ pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
+ if(pT->mCurEv.mMode != FE_ANALOG && evt->locked) {
+ pT->mCurEv.mStrength = evt->strength;
+ pT->mCurEv.mSnr = evt->snr;
+ } else {
+ pT->mCurEv.mStrength = 0;
+ pT->mCurEv.mSnr = 0;
+ }
+
+ if (pT->mCurEv.mMode == FE_ANALOG)
+ pT->mpObserver->onEvent(pT->mCurEv);
+ }
}
void CTvScanner::tv_scan_reconnect_dmx_to_fend(int dmx_no, int fend_no)
{
- AM_DMX_Source_t src;
-
- if (AM_FEND_GetTSSource(fend_no, &src) == AM_SUCCESS) {
- LOGD("Set demux%d source to %d", dmx_no, src);
- AM_DMX_SetSource(dmx_no, src);
- } else {
- LOGD("Cannot get frontend ts source!!");
- }
+ AM_DMX_Source_t src;
+
+ if (AM_FEND_GetTSSource(fend_no, &src) == AM_SUCCESS) {
+ LOGD("Set demux%d source to %d", dmx_no, src);
+ AM_DMX_SetSource(dmx_no, src);
+ } else {
+ LOGD("Cannot get frontend ts source!!");
+ }
}
int CTvScanner::getAtscChannelPara(int attennaType, Vector<sp<CTvChannel> > &vcp)
{
- switch (attennaType) { //region name should be remove to config file and read here
- case 1:
- CTvRegion::getChannelListByName("U.S.,ATSC Air", vcp);
- break;
- case 2:
- CTvRegion::getChannelListByName("U.S.,ATSC Cable Standard", vcp);
- break;
- case 3:
- CTvRegion::getChannelListByName("U.S.,ATSC Cable IRC", vcp);
- break;
- case 4:
- CTvRegion::getChannelListByName("U.S.,ATSC Cable HRC", vcp);
- break;
- default:
- return -1;
- }
-
- return 0;
+ switch(attennaType) { //region name should be remove to config file and read here
+ case 1:
+ CTvRegion::getChannelListByName("U.S.,ATSC Air", vcp);
+ break;
+ case 2:
+ CTvRegion::getChannelListByName("U.S.,ATSC Cable Standard", vcp);
+ break;
+ case 3:
+ CTvRegion::getChannelListByName("U.S.,ATSC Cable IRC", vcp);
+ break;
+ case 4:
+ CTvRegion::getChannelListByName("U.S.,ATSC Cable HRC", vcp);
+ break;
+ default:
+ return -1;
+ }
+
+ return 0;
}
diff --git a/tvapi/libtv/tv/CTvScanner.h b/tvapi/libtv/tv/CTvScanner.h
index c743fae..5272162 100644
--- a/tvapi/libtv/tv/CTvScanner.h
+++ b/tvapi/libtv/tv/CTvScanner.h
@@ -18,166 +18,171 @@
#if !defined(_CTVSCANNER_H)
#define _CTVSCANNER_H
-class CTvScanner
-{
+class CTvScanner {
public:
- /** ATSC Attenna type */
- static const int AM_ATSC_ATTENNA_TYPE_AIR = 1;
- static const int AM_ATSC_ATTENNA_TYPE_CABLE_STD = 2;
- static const int AM_ATSC_ATTENNA_TYPE_CABLE_IRC = 3;
- static const int AM_ATSC_ATTENNA_TYPE_CABLE_HRC = 4;
- CTvScanner(CTvin *pTvin);
- ~CTvScanner();
- int startScan();
- int stopScan();
- int ATVManualScan(int min_freq, int max_freq, int std, int store_Type = 0, int channel_num = 0);
- int autoAtvScan(int min_freq, int max_freq, int std, int search_type);
- int autoDtmbScan();
- int manualDtmbScan(int beginFreq, int endFreq, int modulation = -1);
- int autoAtscScan(int attennaType, int std);
- int manualDtmbScan(int freq);
- int manualAtscScan(int freq, int attennaType, int std);
- int autoTvScan();
- int unsubscribeEvent();
-
- class ScannerEvent: public CTvEv
- {
- public:
- static const int EVENT_SCAN_PROGRESS = 0;
- static const int EVENT_STORE_BEGIN = 1;
- static const int EVENT_STORE_END = 2;
- static const int EVENT_SCAN_END = 3;
- static const int EVENT_BLINDSCAN_PROGRESS = 4;
- static const int EVENT_BLINDSCAN_NEWCHANNEL = 5;
- static const int EVENT_BLINDSCAN_END = 6;
-
- ScannerEvent(): CTvEv(CTvEv::TV_EVENT_SCANNER)
- {
- }
- ~ScannerEvent()
- {
- }
- int mType;
- int mPercent;
- int mTotalChannelCount;
- int mLockedStatus;
- int mChannelNumber;
- //CTvChannel mChannel;
- int mMode;
- int mFrequency;
- int mSymbolRate;
- int mModulation;
- int mBandwidth;
- int mOfdm_mode;
- int mAudio;
- int mStandard;
- int mSat_polarisation;
- //
- int mStrength;
- int mSnr;
- char mProgramName[1024];
- int mprogramType;
- char mMSG[128];
-
- // ScannerEvent(int type){
- // this->mType = type;
- // }
- };
-
- class IObserver
- {
- public:
- IObserver() {};
- virtual ~IObserver() {};
- virtual void onEvent(const ScannerEvent &ev) = 0;
- };
- //1 VS n
- //int addObserver(IObserver* ob);
- //int removeObserver(IObserver* ob);
-
- //1 VS 1
- int setObserver(IObserver *ob)
- {
- mpObserver = ob;
- return 0;
- }
+ /** ATSC Attenna type */
+ static const int AM_ATSC_ATTENNA_TYPE_AIR = 1;
+ static const int AM_ATSC_ATTENNA_TYPE_CABLE_STD = 2;
+ static const int AM_ATSC_ATTENNA_TYPE_CABLE_IRC = 3;
+ static const int AM_ATSC_ATTENNA_TYPE_CABLE_HRC = 4;
+ CTvScanner(CTvin *pTvin);
+ ~CTvScanner();
+ void setGlobalScanerObject(CTvScanner *);
+ int startScan();
+ int stopScan();
+ int ATVManualScan(int min_freq, int max_freq, int std, int store_Type = 0, int channel_num = 0);
+ int autoAtvScan(int min_freq, int max_freq, int std, int search_type);
+ int autoDtmbScan();
+ int manualDtmbScan(int beginFreq, int endFreq, int modulation = -1);
+ int autoAtscScan(int attennaType, int std);
+ int manualDtmbScan(int freq);
+ int manualAtscScan(int freq, int attennaType, int std);
+ int autoTvScan();
+ int unsubscribeEvent();
+
+ class ScannerEvent: public CTvEv {
+ public:
+ static const int EVENT_SCAN_PROGRESS = 0;
+ static const int EVENT_STORE_BEGIN = 1;
+ static const int EVENT_STORE_END = 2;
+ static const int EVENT_SCAN_END = 3;
+ static const int EVENT_BLINDSCAN_PROGRESS = 4;
+ static const int EVENT_BLINDSCAN_NEWCHANNEL = 5;
+ static const int EVENT_BLINDSCAN_END = 6;
+ static const int EVENT_ATV_PROG_DATA = 7;
+
+ ScannerEvent(): CTvEv(CTvEv::TV_EVENT_SCANNER)
+ {
+ }
+ ~ScannerEvent()
+ {
+ }
+ int mType;
+ int mPercent;
+ int mTotalChannelCount;
+ int mLockedStatus;
+ int mChannelNumber;
+ //CTvChannel mChannel;
+ int mMode;
+ int mFrequency;
+ int mSymbolRate;
+ int mModulation;
+ int mBandwidth;
+ int mOfdm_mode;
+ int mAudio;
+ int mStandard;
+ int mSat_polarisation;
+ //
+ int mStrength;
+ int mSnr;
+ char mProgramName[1024];
+ int mprogramType;
+ char mMSG[128];
+ //for atv
+ int mVideoStd;
+ int mAudioStd;
+ int mIsAutoStd;//1 is true
+ int mAfcData;
+ // ScannerEvent(int type){
+ // this->mType = type;
+ // }
+ };
+
+ class IObserver {
+ public:
+ IObserver() {};
+ virtual ~IObserver() {};
+ virtual void onEvent(const ScannerEvent &ev) = 0;
+ };
+ //1 VS n
+ //int addObserver(IObserver* ob);
+ //int removeObserver(IObserver* ob);
+
+ //1 VS 1
+ int setObserver(IObserver *ob)
+ {
+ mpObserver = ob;
+ return 0;
+ }
private:
- static AM_Bool_t s_atv_cvbs_lock_check(void *);
- AM_Bool_t atv_cvbs_lock_check(v4l2_std_id *colorStd);
- static void tv_scan_evt_callback(int dev_no, int event_type, void *param, void *data);
- void tv_scan_reconnect_dmx_to_fend(int dmx_no, int fend_no);
- int getAtscChannelPara(int attennaType, Vector<sp<CTvChannel> > &vcp);
- //
- int mScanHandle;
- volatile bool mbScanStart;
-
- //scan para info
- /** General TV Scan Mode */
- static const int TV_MODE_ATV = 0; // Only search ATV
- static const int TV_MODE_DTV = 1; // Only search DTV
- static const int TV_MODE_ADTV = 2; // A/DTV will share a same frequency list, like ATSC
- /** DTV scan mode */
- static const int DTV_MODE_AUTO = 1;
- static const int DTV_MODE_MANUAL = 2;
- static const int DTV_MODE_ALLBAND = 3;
- static const int DTV_MODE_BLIND = 4;
-
- /** DTV scan options, DONOT channge */
- static const int DTV_OPTION_UNICABLE = 0x10; //Satellite unicable mode
- static const int DTV_OPTION_FTA = 0x20; //Only store free programs
- static const int DTV_OPTION_NO_TV = 0x40; //Only store tv programs
- static const int DTV_OPTION_NO_RADIO = 0x80; //Only store radio programs
-
- /** ATV scan mode */
- static const int ATV_MODE_AUTO = 1;
- static const int ATV_MODE_MANUAL = 2;
-
- //
+ static AM_Bool_t s_atv_cvbs_lock_check(void *);
+ AM_Bool_t atv_cvbs_lock_check(v4l2_std_id *colorStd);
+ static void tv_scan_evt_callback(long dev_no, int event_type, void *param, void *data);
+ static void am_scan_atv_store(AM_SCAN_Result_t *result);
+ void tv_scan_reconnect_dmx_to_fend(int dmx_no, int fend_no);
+ int getAtscChannelPara(int attennaType, Vector<sp<CTvChannel> > &vcp);
+ //
+ AM_SCAN_Handle_t mScanHandle;
+ volatile bool mbScanStart;
+
+ //scan para info
+ /** General TV Scan Mode */
+ static const int TV_MODE_ATV = 0; // Only search ATV
+ static const int TV_MODE_DTV = 1; // Only search DTV
+ static const int TV_MODE_ADTV = 2; // A/DTV will share a same frequency list, like ATSC
+ /** DTV scan mode */
+ static const int DTV_MODE_AUTO = 1;
+ static const int DTV_MODE_MANUAL = 2;
+ static const int DTV_MODE_ALLBAND = 3;
+ static const int DTV_MODE_BLIND = 4;
+
+ /** DTV scan options, DONOT channge */
+ static const int DTV_OPTION_UNICABLE = 0x10; //Satellite unicable mode
+ static const int DTV_OPTION_FTA = 0x20; //Only store free programs
+ static const int DTV_OPTION_NO_TV = 0x40; //Only store tv programs
+ static const int DTV_OPTION_NO_RADIO = 0x80; //Only store radio programs
+
+ /** ATV scan mode */
+ static const int ATV_MODE_AUTO = 1;
+ static const int ATV_MODE_MANUAL = 2;
+
+ //
private:
- //
- IObserver *mpObserver;
- //
- CTvin *mpTvin;
- int mMode;
- int mFendID;
- /** DTV parameters */
- int mTvMode;
- int mTvOptions;
- int mSat_id;
- int mSource;
- //showboz
- //TVSatelliteParams tv_satparams;
- int mTsSourceID;
- CTvChannel mStartChannel;
- Vector<CTvChannel> mvChooseListChannels;
- /** ATV parameters */
- int mAtvMode;
- int mStartFreq;
- int mDirection;
- int mChannelID;
-
-
-
- //extern for scanner
- //int channelID; //can be used for manual scan
- /** Atv set */
- int mMinFreq;
- int mMaxFreq;
- long long mCurScanStartFreq;
- long long mCurScanEndFreq;
- int tunerStd;
- /** Tv set */
- int demuxID;//default 0
- String8 defaultTextLang;
- String8 orderedTextLangs;
- //showboz
- //Vector<CTvChannel> ChannelList;//VS mvChooseListChannels
-
- /** Dtv-Sx set Unicable settings*/
- int user_band;
- int ub_freq;//!< kHz
-
- ScannerEvent mCurEv;
+ //
+ IObserver *mpObserver;
+ //
+ CTvin *mpTvin;
+ int mMode;
+ int mFendID;
+ /** DTV parameters */
+ int mTvMode;
+ int mTvOptions;
+ int mSat_id;
+ int mSource;
+ //showboz
+ //TVSatelliteParams tv_satparams;
+ int mTsSourceID;
+ CTvChannel mStartChannel;
+ Vector<CTvChannel> mvChooseListChannels;
+ /** ATV parameters */
+ int mAtvMode;
+ int mStartFreq;
+ int mDirection;
+ int mChannelID;
+
+
+
+ //extern for scanner
+ //int channelID; //can be used for manual scan
+ /** Atv set */
+ int mMinFreq;
+ int mMaxFreq;
+ long long mCurScanStartFreq;
+ long long mCurScanEndFreq;
+ int tunerStd;
+ /** Tv set */
+ int demuxID;//default 0
+ String8 defaultTextLang;
+ String8 orderedTextLangs;
+ //showboz
+ //Vector<CTvChannel> ChannelList;//VS mvChooseListChannels
+
+ /** Dtv-Sx set Unicable settings*/
+ int user_band;
+ int ub_freq;//!< kHz
+
+ ScannerEvent mCurEv;
+ static CTvScanner *m_s_Scanner;
};
#endif //CTVSCANNER_H
diff --git a/tvapi/libtv/tv/CTvScreenCapture.cpp b/tvapi/libtv/tv/CTvScreenCapture.cpp
index 76eed99..0bd1985 100644
--- a/tvapi/libtv/tv/CTvScreenCapture.cpp
+++ b/tvapi/libtv/tv/CTvScreenCapture.cpp
@@ -1,530 +1,530 @@
-
-#include <stdlib.h>
-#include <fcntl.h>
-#include <strings.h>
-#include <sys/ioctl.h>
-#include <asm/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <malloc.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <time.h>
-#include <sys/mman.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <linux/videodev2.h>
-#include <dirent.h>
-
-#include <binder/MemoryHeapBase.h>
-#include <binder/MemoryBase.h>
-
-using namespace android;
-
-
-#include "CTvScreenCapture.h"
-
-#define CLEAR(x) memset (&(x), 0, sizeof (x))
-
-int CTvScreenCapture::xioctl(int fd, int request, void *arg)
-{
- int r = 0;
-
- do {
- r = ioctl(fd, request, arg);
- } while (-1 == r && EINTR == errno);
-
- return r;
-}
-
-int CTvScreenCapture::OpenCamera(struct camera *pCameraDev)
-{
- int iOutRet = 0, iRet;
- struct stat st;
-
- do {
- if (-1 == stat(pCameraDev->device_name, &st)) {
- LOGD( "Cannot identify '%s'\n", pCameraDev->device_name);
- iOutRet = FAILED;
- break;
- }
-
- if (!S_ISCHR(st.st_mode)) {
- LOGD("%s is no device\n", pCameraDev->device_name);
- iOutRet = FAILED;
- break;
- }
-
- pCameraDev->fd = open(pCameraDev->device_name, O_RDWR | O_NONBLOCK, 0); // O_NONBLOCK
- if (SUCCEED > pCameraDev->fd) {
- LOGD("Cannot open '%s'\n", pCameraDev->device_name);
- iOutRet = FAILED;
- break;
- }
- } while (FALSE);
-
- return iOutRet;
-}
-
-
-int CTvScreenCapture::InitVCap(sp<IMemory> Mem)
-{
- int iOutRet = FAILED;
-
- do {
- m_pMem = Mem;
- m_pData = (char *)m_pMem->pointer();
- LOGD("VVVVVVVVVVVVVVVVVVVVVVVVVVVVV %p\n", m_pData);
- //default
- m_capV4l2Cam.device_name = "/dev/video11";
- m_capV4l2Cam.buffers = NULL;
- m_capV4l2Cam.width = 640;
- m_capV4l2Cam.height = 480;
- m_capV4l2Cam.display_depth = 16; //5; /* RGB24 */
- m_capV4l2Cam.frame_number = 25; //fps
- iOutRet = OpenCamera(&m_capV4l2Cam) ;
- if (SUCCEED != iOutRet) {
- LOGD("ERROR:::Open Camera device failed\n");
- break;
- }
- } while (FALSE);
-
- return iOutRet;
-}
-
-int CTvScreenCapture::InitMmap(struct camera *cam)
-{
- int iOutRet = SUCCEED, iRet;
- struct v4l2_requestbuffers req;
-
- do {
- CLEAR(req);
-
- req.count = 4;
- req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- req.memory = V4L2_MEMORY_MMAP;
-
- iRet = xioctl(cam->fd, VIDIOC_REQBUFS, &req);
- if (FAILED == iRet) {
- if (EINVAL == errno) {
- LOGD("VIDIOC_REQBUFS %s does not support memory mapping\n", cam->device_name);
- }
- iOutRet = iRet;
- break;
- }
-
- if (req.count < 2) {
- LOGD("Insufficient buffer memory on %s\n", cam->device_name);
- iOutRet = FAILED;
- break;
- }
-
- cam->buffers = (struct buffer *)calloc(req.count, sizeof(*(cam->buffers)));
- if (!cam->buffers) {
- LOGD("Out of memory\n");
- iOutRet = FAILED;
- break;
- }
-
- for (m_capNumBuffers = 0; m_capNumBuffers < req.count; ++m_capNumBuffers) {
- struct v4l2_buffer buf;
-
- CLEAR(buf);
-
- buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- buf.memory = V4L2_MEMORY_MMAP;
- buf.index = m_capNumBuffers;
-
- if (FAILED == xioctl(cam->fd, VIDIOC_QUERYBUF, &buf)) {
- LOGD("VIDIOC_QUERYBUF ERROR\n");
- iOutRet = FAILED;
- goto IS_ERROR;
- }
-
- cam->buffers[m_capNumBuffers].length = buf.length;
- cam->buffers[m_capNumBuffers].start = mmap(NULL /* start anywhere */,
- buf.length, PROT_READ | PROT_WRITE /* required */,
- MAP_SHARED /* recommended */, cam->fd, buf.m.offset);
-
- if (MAP_FAILED == cam->buffers[m_capNumBuffers].start) {
- iOutRet = FAILED;
- break;
- }
-
-
- }
-
- LOGD("END m_capNumBuffers : %d\n", m_capNumBuffers);
- } while (FALSE);
-IS_ERROR:
- return iOutRet;
-}
-
-int CTvScreenCapture::InitCamera(struct camera *cam)
-{
- int iOutRet = SUCCEED, iRet;
- struct v4l2_capability *cap = &(cam->v4l2_cap);
- struct v4l2_cropcap *cropcap = &(cam->v4l2_cropcap);
- struct v4l2_crop *crop = &(cam->crop);
- struct v4l2_format *fmt = &(cam->v4l2_fmt);
- unsigned int min;
-
- do {
- iRet = xioctl(cam->fd, VIDIOC_QUERYCAP, cap);
- if (FAILED == iRet) {
- if (EINVAL == errno) {
- LOGD("%s is no V4L2 device\n", cam->device_name);
- }
- iOutRet = iRet;
- break;
- }
-
- if (!(cap->capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
- LOGD("%s is no video capture device\n", cam->device_name);
- iOutRet = FAILED;
- break;
- }
-
- if (!(cap->capabilities & V4L2_CAP_STREAMING)) {
- LOGD("%s does not support streaming i/o\n", cam->device_name);
- iOutRet = FAILED;
- break;
- }
-
- LOGD("VIDOOC_QUERYCAP camera driver is [%s] card is [%s] businfo is [%s] version is [%d]\n", cap->driver,
- cap->card, cap->bus_info, cap->version);
-
- /* Select video input, video standard and tune here. */
-
- CLEAR(*cropcap);
- cropcap->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-
- crop->c.width = cam->width;
- crop->c.height = cam->height;
- crop->c.left = 0;
- crop->c.top = 0;
- crop->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-
- CLEAR(*fmt);
- fmt->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- fmt->fmt.pix.width = cam->width;
- fmt->fmt.pix.height = cam->height;
- fmt->fmt.pix.pixelformat = V4L2_PIX_FMT_NV21;
- fmt->fmt.pix.field = V4L2_FIELD_INTERLACED;
- iRet = xioctl(cam->fd, VIDIOC_S_FMT, fmt);
- if (FAILED == iRet) {
- iOutRet = iRet;
- LOGD("VIDIOC_S_FMT is ERROR\n");
- break;
- }
-
- /* Note VIDIOC_S_FMT may change width and height. */
- /* Buggy driver paranoia. */
- min = fmt->fmt.pix.width * 2;
- if (fmt->fmt.pix.bytesperline < min) {
- fmt->fmt.pix.bytesperline = min;
- }
-
- min = fmt->fmt.pix.bytesperline * fmt->fmt.pix.height;
- if (fmt->fmt.pix.sizeimage < min) {
- fmt->fmt.pix.sizeimage = min;
- }
-
- iRet = InitMmap(cam);
- if (FAILED == iRet) {
- LOGD("INIT MMAP FAILED\n");
- iOutRet = iRet;
- break;
- }
-
- } while (FALSE);
-
- return iOutRet;
-
-}
-
-
-int CTvScreenCapture::SetVideoParameter(int width, int height, int frame)
-{
- int iOutRet = SUCCEED, iRet;
-
- do {
- m_capV4l2Cam.width = width;
- m_capV4l2Cam.height = height;
- m_capV4l2Cam.frame_number = frame;
-
- iRet = InitCamera(&m_capV4l2Cam);
- if (SUCCEED != iRet) {
- iOutRet = iRet;
- break;
- }
-
- } while (FALSE);
-
- return iOutRet ;
-}
-
-int CTvScreenCapture::StartCapturing(struct camera *cam)
-{
- unsigned int i;
- int iOutRet = SUCCEED, iRet;
- enum v4l2_buf_type type;
-
- do {
- for (i = 0; i < m_capNumBuffers; ++i) {
- struct v4l2_buffer buf;
-
- //CLEAR(buf);
-
- buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- buf.memory = V4L2_MEMORY_MMAP;
- buf.index = i;
-
- iRet = xioctl(cam->fd, VIDIOC_QBUF, &buf);
- if (FAILED == iRet) {
- iOutRet = iRet;
- goto IS_ERROR;
- }
- }
-
-
- type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- iRet = xioctl(cam->fd, VIDIOC_STREAMON, &type);
- if (FAILED == iRet) {
- iOutRet = iRet;
- break;
- }
- } while (FALSE);
-IS_ERROR:
-
- return iOutRet;
-}
-
-int CTvScreenCapture::VideoStart()
-{
- int iOutRet = SUCCEED, iRet;
-
- do {
- iRet = StartCapturing(&m_capV4l2Cam);
- if (FAILED == iRet) {
- iOutRet = iRet;
- break;
- }
-
- } while (FALSE);
-
- return iOutRet;
-}
-
-void CTvScreenCapture::yuv_to_rgb32(unsigned char y, unsigned char u, unsigned char v, unsigned char *rgb)
-{
- register int r, g, b;
- int rgb24;
-
- r = (1192 * (y - 16) + 1634 * (v - 128) ) >> 10;
- g = (1192 * (y - 16) - 833 * (v - 128) - 400 * (u - 128) ) >> 10;
- b = (1192 * (y - 16) + 2066 * (u - 128) ) >> 10;
-
- r = r > 255 ? 255 : r < 0 ? 0 : r;
- g = g > 255 ? 255 : g < 0 ? 0 : g;
- b = b > 255 ? 255 : b < 0 ? 0 : b;
-
- rgb24 = (int)((r << 16) | (g << 8) | b);
-
- /*ARGB*/
- *rgb = (unsigned char)r;
- rgb ++;
- *rgb = (unsigned char)g;
- rgb++;
- *rgb = (unsigned char)b;
- rgb++;
- *rgb = 0xff;
-}
-
-
-void CTvScreenCapture::nv21_to_rgb32(unsigned char *buf, unsigned char *rgb, int width, int height, int *len)
-{
- int x, y, z = 0;
- int h, w;
- int blocks;
- unsigned char Y1, Y2, U, V;
-
- *len = 0;
-
- blocks = (width * height) * 2;
-
- for (h = 0, z = 0; h < height; h += 2) {
- for (y = 0; y < width * 2; y += 2) {
-
- Y1 = buf[ h * width + y + 0];
- V = buf[ blocks / 2 + h * width / 2 + y % width + 0 ];
- Y2 = buf[ h * width + y + 1];
- U = buf[ blocks / 2 + h * width / 2 + y % width + 1 ];
-
- yuv_to_rgb32(Y1, U, V, &rgb[z]);
- yuv_to_rgb32(Y2, U, V, &rgb[z + 4]);
- z += 8;
- }
- }
- *len = z;
- LOGD("z +++++++++++++++++++++++++++++++++ z %d\n", z);
-}
-
-
-int CTvScreenCapture::GetVideoData(int *length)
-{
- int iOutRet = SUCCEED, iRet;
-
- *length = 0;
- while (true) {
- fd_set fds;
- struct timeval tv;
- FD_ZERO(&fds);
- FD_SET(m_capV4l2Cam.fd, &fds);
- /* Timeout. */
- tv.tv_sec = 0;
- tv.tv_usec = 30000;
- iRet = select(m_capV4l2Cam.fd + 1, &fds, NULL, NULL, &tv);
- if (FAILED == iRet) {
- LOGD("select FAILED\n");
- if (EINTR == errno) {
- LOGD("select FAILED Continue\n");
- continue;
- }
-
- }
-
- if (0 == iRet) {
- LOGD("select timeout\n");
- continue ;
- }
-
- struct v4l2_buffer buf;
- CLEAR(buf);
-
- buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- buf.memory = V4L2_MEMORY_MMAP;
- iRet = xioctl(m_capV4l2Cam.fd, VIDIOC_DQBUF, &buf);
- if (FAILED == iRet) {
- if (errno == EAGAIN) {
- LOGD("GetVideoData EAGAIN \n");
- }
-
- continue;
- }
-
- LOGD("DDDDDDDDDDAAAAAAAAAAAAAAAAAAAATTTTTTTTTTTTTTAAAAAAAAAAAAAAAAAAAAAAAAAAAAA %d %d\n", buf.length, iRet);
- int tmpLen = 0;
- nv21_to_rgb32((unsigned char *)m_capV4l2Cam.buffers[buf.index].start, (unsigned char *)m_pData, m_capV4l2Cam.width, m_capV4l2Cam.height, &tmpLen);
- //memcpy(m_pData,m_capV4l2Cam.buffers[buf.index].start, buf.length +1);
- *length = buf.length;
- break;
-
- }
-
- if (*length > 0) {
- mCapEvt.mFrameWide = m_capV4l2Cam.width;
- mCapEvt.mFrameHeight = m_capV4l2Cam.height;
- mCapEvt.mFrameNum = 1;
- mCapEvt.mFrameSize = *length;
- } else {
- mCapEvt.mFrameWide = 0;
- mCapEvt.mFrameHeight = 0;
- mCapEvt.mFrameNum = 0;
- mCapEvt.mFrameSize = 0;
- }
-
- if (NULL != mpObserver) {
- mpObserver->onTvEvent(mCapEvt);
- }
-
- return iOutRet;
-}
-
-int CTvScreenCapture::StopCapturing(struct camera *cam)
-{
- int iOutRet = SUCCEED, iRet;
- enum v4l2_buf_type type;
-
- do {
- type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-
- iRet = xioctl(cam->fd, VIDIOC_STREAMOFF, &type);
- if (FAILED == iRet) {
- iOutRet = iRet;
- break;
- }
- } while (FALSE);
-
- return iOutRet;
-}
-
-int CTvScreenCapture::VideoStop()
-{
- StopCapturing(&m_capV4l2Cam);
- return SUCCEED;
-}
-
-int CTvScreenCapture::UninitCamera(struct camera *cam)
-{
- unsigned int i;
-
- for (i = 0; i < m_capNumBuffers; ++i) {
- if (cam->buffers[i].start == NULL) {
- break;
- }
-
- if (FAILED == munmap(cam->buffers[i].start, cam->buffers[i].length)) {
- LOGD("ERROR::munmap cam buffer failed\n");
- break;
- }
- }
-
- if (NULL != cam->buffers)
- free(cam->buffers);
-
- cam->buffers = NULL;
-
- return SUCCEED;
-}
-
-int CTvScreenCapture::CloseCamera(struct camera *cam)
-{
- int iOutRet = SUCCEED, iRet;
-
- do {
- iRet = close(cam->fd);
- if (FAILED == iRet) {
- iOutRet = iRet;
- break;
- }
-
- cam->fd = -1;
- } while (FALSE);
-
- return iOutRet;
-}
-
-int CTvScreenCapture::DeinitVideoCap()
-{
- UninitCamera(&m_capV4l2Cam);
- CloseCamera(&m_capV4l2Cam);
- return SUCCEED ;
-}
-
-
-CTvScreenCapture::CTvScreenCapture()
-{
- m_capNumBuffers = 0;
- memset(&m_capV4l2Cam, 0x00, sizeof(camera));
- mpObserver = NULL;
-}
-CTvScreenCapture::~CTvScreenCapture()
-{
- memset(&m_capV4l2Cam, 0x00, sizeof(camera));
- m_pData = NULL;
-}
-
+
+#include <stdlib.h>
+#include <fcntl.h>
+#include <strings.h>
+#include <sys/ioctl.h>
+#include <asm/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <malloc.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <time.h>
+#include <sys/mman.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <linux/videodev2.h>
+#include <dirent.h>
+
+#include <binder/MemoryHeapBase.h>
+#include <binder/MemoryBase.h>
+
+using namespace android;
+
+
+#include "CTvScreenCapture.h"
+
+#define CLEAR(x) memset (&(x), 0, sizeof (x))
+
+int CTvScreenCapture::xioctl(int fd, int request, void *arg)
+{
+ int r = 0;
+
+ do {
+ r = ioctl(fd, request, arg);
+ } while (-1 == r && EINTR == errno);
+
+ return r;
+}
+
+int CTvScreenCapture::OpenCamera(struct camera *pCameraDev)
+{
+ int iOutRet = 0, iRet;
+ struct stat st;
+
+ do {
+ if(-1 == stat(pCameraDev->device_name, &st)) {
+ LOGD( "Cannot identify '%s'\n", pCameraDev->device_name);
+ iOutRet = FAILED;
+ break;
+ }
+
+ if (!S_ISCHR(st.st_mode)) {
+ LOGD("%s is no device\n", pCameraDev->device_name);
+ iOutRet = FAILED;
+ break;
+ }
+
+ pCameraDev->fd = open(pCameraDev->device_name, O_RDWR | O_NONBLOCK, 0); // O_NONBLOCK
+ if (SUCCEED > pCameraDev->fd) {
+ LOGD("Cannot open '%s'\n", pCameraDev->device_name);
+ iOutRet = FAILED;
+ break;
+ }
+ } while(FALSE);
+
+ return iOutRet;
+}
+
+
+int CTvScreenCapture::InitVCap(sp<IMemory> Mem)
+{
+ int iOutRet = FAILED;
+
+ do {
+ m_pMem = Mem;
+ m_pData = (char *)m_pMem->pointer();
+ LOGD("VVVVVVVVVVVVVVVVVVVVVVVVVVVVV %p\n", m_pData);
+ //default
+ m_capV4l2Cam.device_name = "/dev/video11";
+ m_capV4l2Cam.buffers = NULL;
+ m_capV4l2Cam.width = 640;
+ m_capV4l2Cam.height = 480;
+ m_capV4l2Cam.display_depth = 16; //5; /* RGB24 */
+ m_capV4l2Cam.frame_number = 25; //fps
+ iOutRet = OpenCamera(&m_capV4l2Cam) ;
+ if(SUCCEED != iOutRet) {
+ LOGD("ERROR:::Open Camera device failed\n");
+ break;
+ }
+ } while(FALSE);
+
+ return iOutRet;
+}
+
+int CTvScreenCapture::InitMmap(struct camera *cam)
+{
+ int iOutRet = SUCCEED, iRet;
+ struct v4l2_requestbuffers req;
+
+ do {
+ CLEAR(req);
+
+ req.count = 4;
+ req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ req.memory = V4L2_MEMORY_MMAP;
+
+ iRet = xioctl(cam->fd, VIDIOC_REQBUFS, &req);
+ if (FAILED == iRet) {
+ if (EINVAL == errno) {
+ LOGD("VIDIOC_REQBUFS %s does not support memory mapping\n", cam->device_name);
+ }
+ iOutRet = iRet;
+ break;
+ }
+
+ if (req.count < 2) {
+ LOGD("Insufficient buffer memory on %s\n", cam->device_name);
+ iOutRet = FAILED;
+ break;
+ }
+
+ cam->buffers = (struct buffer *)calloc(req.count, sizeof(*(cam->buffers)));
+ if (!cam->buffers) {
+ LOGD("Out of memory\n");
+ iOutRet = FAILED;
+ break;
+ }
+
+ for (m_capNumBuffers = 0; m_capNumBuffers < req.count; ++m_capNumBuffers) {
+ struct v4l2_buffer buf;
+
+ CLEAR(buf);
+
+ buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ buf.memory = V4L2_MEMORY_MMAP;
+ buf.index = m_capNumBuffers;
+
+ if (FAILED == xioctl(cam->fd, VIDIOC_QUERYBUF, &buf)) {
+ LOGD("VIDIOC_QUERYBUF ERROR\n");
+ iOutRet = FAILED;
+ goto IS_ERROR;
+ }
+
+ cam->buffers[m_capNumBuffers].length = buf.length;
+ cam->buffers[m_capNumBuffers].start = mmap(NULL /* start anywhere */,
+ buf.length, PROT_READ | PROT_WRITE /* required */,
+ MAP_SHARED /* recommended */, cam->fd, buf.m.offset);
+
+ if (MAP_FAILED == cam->buffers[m_capNumBuffers].start) {
+ iOutRet = FAILED;
+ break;
+ }
+
+
+ }
+
+ LOGD("END m_capNumBuffers : %d\n", m_capNumBuffers);
+ } while(FALSE);
+IS_ERROR:
+ return iOutRet;
+}
+
+int CTvScreenCapture::InitCamera(struct camera *cam)
+{
+ int iOutRet = SUCCEED, iRet;
+ struct v4l2_capability *cap = &(cam->v4l2_cap);
+ struct v4l2_cropcap *cropcap = &(cam->v4l2_cropcap);
+ struct v4l2_crop *crop = &(cam->crop);
+ struct v4l2_format *fmt = &(cam->v4l2_fmt);
+ unsigned int min;
+
+ do {
+ iRet = xioctl(cam->fd, VIDIOC_QUERYCAP, cap);
+ if(FAILED == iRet) {
+ if(EINVAL == errno) {
+ LOGD("%s is no V4L2 device\n", cam->device_name);
+ }
+ iOutRet = iRet;
+ break;
+ }
+
+ if(!(cap->capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
+ LOGD("%s is no video capture device\n", cam->device_name);
+ iOutRet = FAILED;
+ break;
+ }
+
+ if(!(cap->capabilities & V4L2_CAP_STREAMING)) {
+ LOGD("%s does not support streaming i/o\n", cam->device_name);
+ iOutRet = FAILED;
+ break;
+ }
+
+ LOGD("VIDOOC_QUERYCAP camera driver is [%s] card is [%s] businfo is [%s] version is [%d]\n", cap->driver,
+ cap->card, cap->bus_info, cap->version);
+
+ /* Select video input, video standard and tune here. */
+
+ CLEAR(*cropcap);
+ cropcap->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+
+ crop->c.width = cam->width;
+ crop->c.height = cam->height;
+ crop->c.left = 0;
+ crop->c.top = 0;
+ crop->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+
+ CLEAR(*fmt);
+ fmt->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ fmt->fmt.pix.width = cam->width;
+ fmt->fmt.pix.height = cam->height;
+ fmt->fmt.pix.pixelformat = V4L2_PIX_FMT_NV21;
+ fmt->fmt.pix.field = V4L2_FIELD_INTERLACED;
+ iRet = xioctl(cam->fd, VIDIOC_S_FMT, fmt);
+ if (FAILED == iRet) {
+ iOutRet = iRet;
+ LOGD("VIDIOC_S_FMT is ERROR\n");
+ break;
+ }
+
+ /* Note VIDIOC_S_FMT may change width and height. */
+ /* Buggy driver paranoia. */
+ min = fmt->fmt.pix.width * 2;
+ if (fmt->fmt.pix.bytesperline < min) {
+ fmt->fmt.pix.bytesperline = min;
+ }
+
+ min = fmt->fmt.pix.bytesperline * fmt->fmt.pix.height;
+ if (fmt->fmt.pix.sizeimage < min) {
+ fmt->fmt.pix.sizeimage = min;
+ }
+
+ iRet = InitMmap(cam);
+ if(FAILED == iRet) {
+ LOGD("INIT MMAP FAILED\n");
+ iOutRet = iRet;
+ break;
+ }
+
+ } while(FALSE);
+
+ return iOutRet;
+
+}
+
+
+int CTvScreenCapture::SetVideoParameter(int width, int height, int frame)
+{
+ int iOutRet = SUCCEED, iRet;
+
+ do {
+ m_capV4l2Cam.width = width;
+ m_capV4l2Cam.height = height;
+ m_capV4l2Cam.frame_number = frame;
+
+ iRet = InitCamera(&m_capV4l2Cam);
+ if(SUCCEED != iRet) {
+ iOutRet = iRet;
+ break;
+ }
+
+ } while(FALSE);
+
+ return iOutRet ;
+}
+
+int CTvScreenCapture::StartCapturing(struct camera *cam)
+{
+ unsigned int i;
+ int iOutRet = SUCCEED, iRet;
+ enum v4l2_buf_type type;
+
+ do {
+ for (i = 0; i < m_capNumBuffers; ++i) {
+ struct v4l2_buffer buf;
+
+ //CLEAR(buf);
+
+ buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ buf.memory = V4L2_MEMORY_MMAP;
+ buf.index = i;
+
+ iRet = xioctl(cam->fd, VIDIOC_QBUF, &buf);
+ if(FAILED == iRet) {
+ iOutRet = iRet;
+ goto IS_ERROR;
+ }
+ }
+
+
+ type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ iRet = xioctl(cam->fd, VIDIOC_STREAMON, &type);
+ if(FAILED == iRet) {
+ iOutRet = iRet;
+ break;
+ }
+ } while(FALSE);
+IS_ERROR:
+
+ return iOutRet;
+}
+
+int CTvScreenCapture::VideoStart()
+{
+ int iOutRet = SUCCEED, iRet;
+
+ do {
+ iRet = StartCapturing(&m_capV4l2Cam);
+ if(FAILED == iRet) {
+ iOutRet = iRet;
+ break;
+ }
+
+ } while(FALSE);
+
+ return iOutRet;
+}
+
+void CTvScreenCapture::yuv_to_rgb32(unsigned char y, unsigned char u, unsigned char v, unsigned char *rgb)
+{
+ register int r, g, b;
+ int rgb24;
+
+ r = (1192 * (y - 16) + 1634 * (v - 128) ) >> 10;
+ g = (1192 * (y - 16) - 833 * (v - 128) - 400 * (u - 128) ) >> 10;
+ b = (1192 * (y - 16) + 2066 * (u - 128) ) >> 10;
+
+ r = r > 255 ? 255 : r < 0 ? 0 : r;
+ g = g > 255 ? 255 : g < 0 ? 0 : g;
+ b = b > 255 ? 255 : b < 0 ? 0 : b;
+
+ rgb24 = (int)((r << 16) | (g << 8) | b);
+
+ /*ARGB*/
+ *rgb = (unsigned char)r;
+ rgb ++;
+ *rgb = (unsigned char)g;
+ rgb++;
+ *rgb = (unsigned char)b;
+ rgb++;
+ *rgb = 0xff;
+}
+
+
+void CTvScreenCapture::nv21_to_rgb32(unsigned char *buf, unsigned char *rgb, int width, int height, int *len)
+{
+ int x, y, z = 0;
+ int h, w;
+ int blocks;
+ unsigned char Y1, Y2, U, V;
+
+ *len = 0;
+
+ blocks = (width * height) * 2;
+
+ for(h = 0, z = 0; h < height; h += 2) {
+ for (y = 0; y < width * 2; y += 2) {
+
+ Y1 = buf[ h * width + y + 0];
+ V = buf[ blocks / 2 + h * width / 2 + y % width + 0 ];
+ Y2 = buf[ h * width + y + 1];
+ U = buf[ blocks / 2 + h * width / 2 + y % width + 1 ];
+
+ yuv_to_rgb32(Y1, U, V, &rgb[z]);
+ yuv_to_rgb32(Y2, U, V, &rgb[z + 4]);
+ z += 8;
+ }
+ }
+ *len = z;
+ LOGD("z +++++++++++++++++++++++++++++++++ z %d\n", z);
+}
+
+
+int CTvScreenCapture::GetVideoData(int *length)
+{
+ int iOutRet = SUCCEED, iRet;
+
+ *length = 0;
+ while(true) {
+ fd_set fds;
+ struct timeval tv;
+ FD_ZERO(&fds);
+ FD_SET(m_capV4l2Cam.fd, &fds);
+ /* Timeout. */
+ tv.tv_sec = 0;
+ tv.tv_usec = 30000;
+ iRet = select(m_capV4l2Cam.fd + 1, &fds, NULL, NULL, &tv);
+ if (FAILED == iRet) {
+ LOGD("select FAILED\n");
+ if (EINTR == errno) {
+ LOGD("select FAILED Continue\n");
+ continue;
+ }
+
+ }
+
+ if (0 == iRet) {
+ LOGD("select timeout\n");
+ continue ;
+ }
+
+ struct v4l2_buffer buf;
+ CLEAR(buf);
+
+ buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ buf.memory = V4L2_MEMORY_MMAP;
+ iRet = xioctl(m_capV4l2Cam.fd, VIDIOC_DQBUF, &buf);
+ if(FAILED == iRet) {
+ if(errno == EAGAIN) {
+ LOGD("GetVideoData EAGAIN \n");
+ }
+
+ continue;
+ }
+
+ LOGD("DDDDDDDDDDAAAAAAAAAAAAAAAAAAAATTTTTTTTTTTTTTAAAAAAAAAAAAAAAAAAAAAAAAAAAAA %d %d\n", buf.length, iRet);
+ int tmpLen = 0;
+ nv21_to_rgb32((unsigned char *)m_capV4l2Cam.buffers[buf.index].start, (unsigned char *)m_pData, m_capV4l2Cam.width, m_capV4l2Cam.height, &tmpLen);
+ //memcpy(m_pData,m_capV4l2Cam.buffers[buf.index].start, buf.length +1);
+ *length = buf.length;
+ break;
+
+ }
+
+ if(*length > 0) {
+ mCapEvt.mFrameWide = m_capV4l2Cam.width;
+ mCapEvt.mFrameHeight = m_capV4l2Cam.height;
+ mCapEvt.mFrameNum = 1;
+ mCapEvt.mFrameSize = *length;
+ } else {
+ mCapEvt.mFrameWide = 0;
+ mCapEvt.mFrameHeight = 0;
+ mCapEvt.mFrameNum = 0;
+ mCapEvt.mFrameSize = 0;
+ }
+
+ if(NULL != mpObserver) {
+ mpObserver->onTvEvent(mCapEvt);
+ }
+
+ return iOutRet;
+}
+
+int CTvScreenCapture::StopCapturing(struct camera *cam)
+{
+ int iOutRet = SUCCEED, iRet;
+ enum v4l2_buf_type type;
+
+ do {
+ type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+
+ iRet = xioctl(cam->fd, VIDIOC_STREAMOFF, &type);
+ if(FAILED == iRet) {
+ iOutRet = iRet;
+ break;
+ }
+ } while(FALSE);
+
+ return iOutRet;
+}
+
+int CTvScreenCapture::VideoStop()
+{
+ StopCapturing(&m_capV4l2Cam);
+ return SUCCEED;
+}
+
+int CTvScreenCapture::UninitCamera(struct camera *cam)
+{
+ unsigned int i;
+
+ for (i = 0; i < m_capNumBuffers; ++i) {
+ if(cam->buffers[i].start == NULL) {
+ break;
+ }
+
+ if (FAILED == munmap(cam->buffers[i].start, cam->buffers[i].length)) {
+ LOGD("ERROR::munmap cam buffer failed\n");
+ break;
+ }
+ }
+
+ if(NULL != cam->buffers)
+ free(cam->buffers);
+
+ cam->buffers = NULL;
+
+ return SUCCEED;
+}
+
+int CTvScreenCapture::CloseCamera(struct camera *cam)
+{
+ int iOutRet = SUCCEED, iRet;
+
+ do {
+ iRet = close(cam->fd);
+ if(FAILED == iRet) {
+ iOutRet = iRet;
+ break;
+ }
+
+ cam->fd = -1;
+ } while(FALSE);
+
+ return iOutRet;
+}
+
+int CTvScreenCapture::DeinitVideoCap()
+{
+ UninitCamera(&m_capV4l2Cam);
+ CloseCamera(&m_capV4l2Cam);
+ return SUCCEED ;
+}
+
+
+CTvScreenCapture::CTvScreenCapture()
+{
+ m_capNumBuffers = 0;
+ memset(&m_capV4l2Cam, 0x00, sizeof(camera));
+ mpObserver = NULL;
+}
+CTvScreenCapture::~CTvScreenCapture()
+{
+ memset(&m_capV4l2Cam, 0x00, sizeof(camera));
+ m_pData = NULL;
+}
+
diff --git a/tvapi/libtv/tv/CTvScreenCapture.h b/tvapi/libtv/tv/CTvScreenCapture.h
index 90fa7e4..09a4bbb 100644
--- a/tvapi/libtv/tv/CTvScreenCapture.h
+++ b/tvapi/libtv/tv/CTvScreenCapture.h
@@ -1,177 +1,174 @@
-#ifndef CTVSCREENCAPTURE_H__
-#define CTVSCREENCAPTURE_H__
-
-#define VIDEOCAPDEV "/dev/amvideocap0"
-
-#define AMVIDEOCAP_IOC_MAGIC 'V'
-#include <linux/videodev2.h>
-#include <binder/MemoryHeapBase.h>
-#include <binder/MemoryBase.h>
-#include "CTvLog.h"
-#include "CTvEv.h"
-
-#define CAP_FLAG_AT_CURRENT 0
-#define CAP_FLAG_AT_TIME_WINDOW 1
-#define CAP_FLAG_AT_END 2
-
-
-#define FALSE 0
-#define SUCCEED 0
-#define FAILED -1
-
-using namespace android;
-
-struct buffer {
- void *start;
- size_t length;
-};
-
-
-struct camera {
- char *device_name;
- int fd;
- int width;
- int height;
- int display_depth;
- int image_size;
- int frame_number; //fps
- int bitrate ; // bitrate
- struct v4l2_capability v4l2_cap;
- struct v4l2_cropcap v4l2_cropcap;
- struct v4l2_format v4l2_fmt;
- struct v4l2_crop crop;
- struct buffer *buffers;
-};
-
-/*
-format see linux/ge2d/ge2d.h
-like:
-GE2D_FORMAT_S24_RGB
-*/
-#define ENDIAN_SHIFT 24
-#define LITTLE_ENDIAN (1 << ENDIAN_SHIFT)
-#define FMT_S24_RGB (LITTLE_ENDIAN|0x00200) /* 10_00_0_00_0_00 */
-#define FMT_S16_RGB (LITTLE_ENDIAN|0x00100) /* 01_00_0_00_0_00 */
-#define FMT_S32_RGBA (LITTLE_ENDIAN|0x00300) /* 11_00_0_00_0_00 */
-
-#define COLOR_MAP_SHIFT 20
-#define COLOR_MAP_MASK (0xf << COLOR_MAP_SHIFT)
-/* 16 bit */
-#define COLOR_MAP_RGB565 (5 << COLOR_MAP_SHIFT)
-/* 24 bit */
-#define COLOR_MAP_RGB888 (0 << COLOR_MAP_SHIFT)
-#define COLOR_MAP_BGR888 (5 << COLOR_MAP_SHIFT)
-/* 32 bit */
-#define COLOR_MAP_RGBA8888 (0 << COLOR_MAP_SHIFT)
-#define COLOR_MAP_ARGB8888 (1 << COLOR_MAP_SHIFT)
-#define COLOR_MAP_ABGR8888 (2 << COLOR_MAP_SHIFT)
-#define COLOR_MAP_BGRA8888 (3 << COLOR_MAP_SHIFT)
-
-/*16 bit*/
-#define FORMAT_S16_RGB_565 (FMT_S16_RGB | COLOR_MAP_RGB565)
-/*24 bit*/
-#define FORMAT_S24_BGR (FMT_S24_RGB | COLOR_MAP_BGR888)
-#define FORMAT_S24_RGB (FMT_S24_RGB | COLOR_MAP_RGB888)
-/*32 bit*/
-#define FORMAT_S32_ARGB (FMT_S32_RGBA | COLOR_MAP_ARGB8888)
-#define FORMAT_S32_ABGR (FMT_S32_RGBA | COLOR_MAP_ABGR8888)
-#define FORMAT_S32_BGRA (FMT_S32_RGBA | COLOR_MAP_BGRA8888)
-#define FORMAT_S32_RGBA (FMT_S32_RGBA | COLOR_MAP_RGBA8888)
-
-#define AMVIDEOCAP_IOW_SET_WANTFRAME_FORMAT _IOW(AMVIDEOCAP_IOC_MAGIC, 0x01, int)
-#define AMVIDEOCAP_IOW_SET_WANTFRAME_WIDTH _IOW(AMVIDEOCAP_IOC_MAGIC, 0x02, int)
-#define AMVIDEOCAP_IOW_SET_WANTFRAME_HEIGHT _IOW(AMVIDEOCAP_IOC_MAGIC, 0x03, int)
-#define AMVIDEOCAP_IOW_SET_WANTFRAME_TIMESTAMP_MS _IOW(AMVIDEOCAP_IOC_MAGIC, 0x04, u64)
-#define AMVIDEOCAP_IOW_SET_WANTFRAME_WAIT_MAX_MS _IOW(AMVIDEOCAP_IOC_MAGIC, 0x05, u64)
-#define AMVIDEOCAP_IOW_SET_WANTFRAME_AT_FLAGS _IOW(AMVIDEOCAP_IOC_MAGIC, 0x06, int)
-
-
-#define AMVIDEOCAP_IOR_GET_FRAME_FORMAT _IOR(AMVIDEOCAP_IOC_MAGIC, 0x10, int)
-#define AMVIDEOCAP_IOR_GET_FRAME_WIDTH _IOR(AMVIDEOCAP_IOC_MAGIC, 0x11, int)
-#define AMVIDEOCAP_IOR_GET_FRAME_HEIGHT _IOR(AMVIDEOCAP_IOC_MAGIC, 0x12, int)
-#define AMVIDEOCAP_IOR_GET_FRAME_TIMESTAMP_MS _IOR(AMVIDEOCAP_IOC_MAGIC, 0x13, int)
-
-
-#define AMVIDEOCAP_IOR_GET_SRCFRAME_FORMAT _IOR(AMVIDEOCAP_IOC_MAGIC, 0x20, int)
-#define AMVIDEOCAP_IOR_GET_SRCFRAME_WIDTH _IOR(AMVIDEOCAP_IOC_MAGIC, 0x21, int)
-#define AMVIDEOCAP_IOR_GET_SRCFRAME_HEIGHT _IOR(AMVIDEOCAP_IOC_MAGIC, 0x22, int)
-
-
-#define AMVIDEOCAP_IOR_GET_STATE _IOR(AMVIDEOCAP_IOC_MAGIC, 0x31, int)
-#define AMVIDEOCAP_IOW_SET_START_CAPTURE _IOW(AMVIDEOCAP_IOC_MAGIC, 0x32, int)
-#define AMVIDEOCAP_IOW_SET_CANCEL_CAPTURE _IOW(AMVIDEOCAP_IOC_MAGIC, 0x33, int)
-
-#define AMVIDEOCAP_IOR_SET_SRC_X _IOR(AMVIDEOCAP_IOC_MAGIC, 0x40, int)
-#define AMVIDEOCAP_IOR_SET_SRC_Y _IOR(AMVIDEOCAP_IOC_MAGIC, 0x41, int)
-#define AMVIDEOCAP_IOR_SET_SRC_WIDTH _IOR(AMVIDEOCAP_IOC_MAGIC, 0x42, int)
-#define AMVIDEOCAP_IOR_SET_SRC_HEIGHT _IOR(AMVIDEOCAP_IOC_MAGIC, 0x43, int)
-
-enum amvideocap_state {
- AMVIDEOCAP_STATE_INIT = 0,
- AMVIDEOCAP_STATE_ON_CAPTURE = 200,
- AMVIDEOCAP_STATE_FINISHED_CAPTURE = 300,
- AMVIDEOCAP_STATE_ERROR = 0xffff,
-};
-
-class CTvScreenCapture
-{
-public:
- CTvScreenCapture();
- ~CTvScreenCapture();
-
- int InitVCap(sp<IMemory> Mem);
- int SetVideoParameter(int width, int height, int frame);
- int VideoStart();
- int GetVideoData( int *length);
- int VideoStop();
- int DeinitVideoCap();
- class CapEvent : public CTvEv
- {
- public:
- CapEvent(): CTvEv(CTvEv::TV_EVENT_HDMI_IN_CAP) {};
- ~CapEvent() {};
-
- int mFrameNum;
- int mFrameWide;
- int mFrameHeight;
- int mFrameSize;
- };
-
- class TvIObserver
- {
- public:
- TvIObserver() {};
- virtual ~TvIObserver() {};
- virtual void onTvEvent ( const CTvEv &ev ) = 0;
- };
-
- int setObserver(TvIObserver *ob)
- {
- mpObserver = ob;
- return 0;
- }
-
-private:
-
- int xioctl(int fd, int request, void *arg);
- int OpenCamera(struct camera *pCameraDev);
- int InitMmap(struct camera *cam) ;
- //int SetFrameRate( struct camera *cam);
- int InitCamera(struct camera *cam) ;
- int StartCapturing(struct camera *cam);
- int StopCapturing(struct camera *cam);
- int UninitCamera(struct camera *cam);
- int CloseCamera(struct camera *cam);
- void yuv_to_rgb32(unsigned char y, unsigned char u, unsigned char v, unsigned char *rgb);
- void nv21_to_rgb32(unsigned char *buf, unsigned char *rgb, int width, int height, int *len);
-private:
- sp<IMemory> m_pMem;
- camera m_capV4l2Cam;
- unsigned int m_capNumBuffers;
-
- char *m_pData;
- TvIObserver *mpObserver;
- CapEvent mCapEvt;
-};
-#endif
-
+#ifndef CTVSCREENCAPTURE_H__
+#define CTVSCREENCAPTURE_H__
+
+#define VIDEOCAPDEV "/dev/amvideocap0"
+
+#define AMVIDEOCAP_IOC_MAGIC 'V'
+#include <linux/videodev2.h>
+#include <binder/MemoryHeapBase.h>
+#include <binder/MemoryBase.h>
+#include "CTvLog.h"
+#include "CTvEv.h"
+
+#define CAP_FLAG_AT_CURRENT 0
+#define CAP_FLAG_AT_TIME_WINDOW 1
+#define CAP_FLAG_AT_END 2
+
+
+#define FALSE 0
+#define SUCCEED 0
+#define FAILED -1
+
+using namespace android;
+
+struct buffer {
+ void *start;
+ size_t length;
+};
+
+
+struct camera {
+ char *device_name;
+ int fd;
+ int width;
+ int height;
+ int display_depth;
+ int image_size;
+ int frame_number; //fps
+ int bitrate ; // bitrate
+ struct v4l2_capability v4l2_cap;
+ struct v4l2_cropcap v4l2_cropcap;
+ struct v4l2_format v4l2_fmt;
+ struct v4l2_crop crop;
+ struct buffer *buffers;
+};
+
+/*
+format see linux/ge2d/ge2d.h
+like:
+GE2D_FORMAT_S24_RGB
+*/
+#define ENDIAN_SHIFT 24
+#define LITTLE_ENDIAN (1 << ENDIAN_SHIFT)
+#define FMT_S24_RGB (LITTLE_ENDIAN|0x00200) /* 10_00_0_00_0_00 */
+#define FMT_S16_RGB (LITTLE_ENDIAN|0x00100) /* 01_00_0_00_0_00 */
+#define FMT_S32_RGBA (LITTLE_ENDIAN|0x00300) /* 11_00_0_00_0_00 */
+
+#define COLOR_MAP_SHIFT 20
+#define COLOR_MAP_MASK (0xf << COLOR_MAP_SHIFT)
+/* 16 bit */
+#define COLOR_MAP_RGB565 (5 << COLOR_MAP_SHIFT)
+/* 24 bit */
+#define COLOR_MAP_RGB888 (0 << COLOR_MAP_SHIFT)
+#define COLOR_MAP_BGR888 (5 << COLOR_MAP_SHIFT)
+/* 32 bit */
+#define COLOR_MAP_RGBA8888 (0 << COLOR_MAP_SHIFT)
+#define COLOR_MAP_ARGB8888 (1 << COLOR_MAP_SHIFT)
+#define COLOR_MAP_ABGR8888 (2 << COLOR_MAP_SHIFT)
+#define COLOR_MAP_BGRA8888 (3 << COLOR_MAP_SHIFT)
+
+/*16 bit*/
+#define FORMAT_S16_RGB_565 (FMT_S16_RGB | COLOR_MAP_RGB565)
+/*24 bit*/
+#define FORMAT_S24_BGR (FMT_S24_RGB | COLOR_MAP_BGR888)
+#define FORMAT_S24_RGB (FMT_S24_RGB | COLOR_MAP_RGB888)
+/*32 bit*/
+#define FORMAT_S32_ARGB (FMT_S32_RGBA | COLOR_MAP_ARGB8888)
+#define FORMAT_S32_ABGR (FMT_S32_RGBA | COLOR_MAP_ABGR8888)
+#define FORMAT_S32_BGRA (FMT_S32_RGBA | COLOR_MAP_BGRA8888)
+#define FORMAT_S32_RGBA (FMT_S32_RGBA | COLOR_MAP_RGBA8888)
+
+#define AMVIDEOCAP_IOW_SET_WANTFRAME_FORMAT _IOW(AMVIDEOCAP_IOC_MAGIC, 0x01, int)
+#define AMVIDEOCAP_IOW_SET_WANTFRAME_WIDTH _IOW(AMVIDEOCAP_IOC_MAGIC, 0x02, int)
+#define AMVIDEOCAP_IOW_SET_WANTFRAME_HEIGHT _IOW(AMVIDEOCAP_IOC_MAGIC, 0x03, int)
+#define AMVIDEOCAP_IOW_SET_WANTFRAME_TIMESTAMP_MS _IOW(AMVIDEOCAP_IOC_MAGIC, 0x04, u64)
+#define AMVIDEOCAP_IOW_SET_WANTFRAME_WAIT_MAX_MS _IOW(AMVIDEOCAP_IOC_MAGIC, 0x05, u64)
+#define AMVIDEOCAP_IOW_SET_WANTFRAME_AT_FLAGS _IOW(AMVIDEOCAP_IOC_MAGIC, 0x06, int)
+
+
+#define AMVIDEOCAP_IOR_GET_FRAME_FORMAT _IOR(AMVIDEOCAP_IOC_MAGIC, 0x10, int)
+#define AMVIDEOCAP_IOR_GET_FRAME_WIDTH _IOR(AMVIDEOCAP_IOC_MAGIC, 0x11, int)
+#define AMVIDEOCAP_IOR_GET_FRAME_HEIGHT _IOR(AMVIDEOCAP_IOC_MAGIC, 0x12, int)
+#define AMVIDEOCAP_IOR_GET_FRAME_TIMESTAMP_MS _IOR(AMVIDEOCAP_IOC_MAGIC, 0x13, int)
+
+
+#define AMVIDEOCAP_IOR_GET_SRCFRAME_FORMAT _IOR(AMVIDEOCAP_IOC_MAGIC, 0x20, int)
+#define AMVIDEOCAP_IOR_GET_SRCFRAME_WIDTH _IOR(AMVIDEOCAP_IOC_MAGIC, 0x21, int)
+#define AMVIDEOCAP_IOR_GET_SRCFRAME_HEIGHT _IOR(AMVIDEOCAP_IOC_MAGIC, 0x22, int)
+
+
+#define AMVIDEOCAP_IOR_GET_STATE _IOR(AMVIDEOCAP_IOC_MAGIC, 0x31, int)
+#define AMVIDEOCAP_IOW_SET_START_CAPTURE _IOW(AMVIDEOCAP_IOC_MAGIC, 0x32, int)
+#define AMVIDEOCAP_IOW_SET_CANCEL_CAPTURE _IOW(AMVIDEOCAP_IOC_MAGIC, 0x33, int)
+
+#define AMVIDEOCAP_IOR_SET_SRC_X _IOR(AMVIDEOCAP_IOC_MAGIC, 0x40, int)
+#define AMVIDEOCAP_IOR_SET_SRC_Y _IOR(AMVIDEOCAP_IOC_MAGIC, 0x41, int)
+#define AMVIDEOCAP_IOR_SET_SRC_WIDTH _IOR(AMVIDEOCAP_IOC_MAGIC, 0x42, int)
+#define AMVIDEOCAP_IOR_SET_SRC_HEIGHT _IOR(AMVIDEOCAP_IOC_MAGIC, 0x43, int)
+
+enum amvideocap_state {
+ AMVIDEOCAP_STATE_INIT = 0,
+ AMVIDEOCAP_STATE_ON_CAPTURE = 200,
+ AMVIDEOCAP_STATE_FINISHED_CAPTURE = 300,
+ AMVIDEOCAP_STATE_ERROR = 0xffff,
+};
+
+class CTvScreenCapture {
+public:
+ CTvScreenCapture();
+ ~CTvScreenCapture();
+
+ int InitVCap(sp<IMemory> Mem);
+ int SetVideoParameter(int width, int height, int frame);
+ int VideoStart();
+ int GetVideoData( int *length);
+ int VideoStop();
+ int DeinitVideoCap();
+ class CapEvent : public CTvEv {
+ public:
+ CapEvent(): CTvEv(CTvEv::TV_EVENT_HDMI_IN_CAP) {};
+ ~CapEvent() {};
+
+ int mFrameNum;
+ int mFrameWide;
+ int mFrameHeight;
+ int mFrameSize;
+ };
+
+ class TvIObserver {
+ public:
+ TvIObserver() {};
+ virtual ~TvIObserver() {};
+ virtual void onTvEvent ( const CTvEv &ev ) = 0;
+ };
+
+ int setObserver(TvIObserver *ob)
+ {
+ mpObserver = ob;
+ return 0;
+ }
+
+private:
+
+ int xioctl(int fd, int request, void *arg);
+ int OpenCamera(struct camera *pCameraDev);
+ int InitMmap(struct camera *cam) ;
+ //int SetFrameRate( struct camera *cam);
+ int InitCamera(struct camera *cam) ;
+ int StartCapturing(struct camera *cam);
+ int StopCapturing(struct camera *cam);
+ int UninitCamera(struct camera *cam);
+ int CloseCamera(struct camera *cam);
+ void yuv_to_rgb32(unsigned char y, unsigned char u, unsigned char v, unsigned char *rgb);
+ void nv21_to_rgb32(unsigned char *buf, unsigned char *rgb, int width, int height, int *len);
+private:
+ sp<IMemory> m_pMem;
+ camera m_capV4l2Cam;
+ unsigned int m_capNumBuffers;
+
+ char *m_pData;
+ TvIObserver *mpObserver;
+ CapEvent mCapEvt;
+};
+#endif
+
diff --git a/tvapi/libtv/tv/CTvSubtitle.cpp b/tvapi/libtv/tv/CTvSubtitle.cpp
index fe24ea0..1442dad 100644
--- a/tvapi/libtv/tv/CTvSubtitle.cpp
+++ b/tvapi/libtv/tv/CTvSubtitle.cpp
@@ -1,23 +1,23 @@
//
//
-// amlogic 2013
+// amlogic 2013
//
-// @ Project : tv
-// @ Date : 2013-11
-// @ Author :
+// @ Project : tv
+// @ Date : 2013-11
+// @ Author :
//
//
#include "CTvSubtitle.h"
CTvSubtitle::CTvSubtitle()
{
- mpObser = NULL;
+ mpObser = NULL;
}
CTvSubtitle::~CTvSubtitle()
{
}
void CTvSubtitle::setObser(IObserver *pObser)
{
- mpObser = pObser;
+ mpObser = pObser;
}
void CTvSubtitle::stopDecoder()
{
@@ -79,9 +79,9 @@ void CTvSubtitle::goHome()
/**
* 在图文模å¼ä¸‹æ ¹æ®é¢œè‰²è·³è½¬åˆ°æŒ‡å®šé“¾æŽ¥
- * @param color 颜色,COLOR_RED/COLOR_GREEN/COLOR_YELLOW/COLOR_BLUE
+ * @param color 颜色,COLOR_RED/COLOR_GREEN/COLOR_YELLOW/COLOR_BLUE
*/
-void CTvSubtitle::colorLink(int color)
+void CTvSubtitle::colorLink(int color)
{
}
@@ -110,79 +110,79 @@ void CTvSubtitle::searchPrevious()
{
}
-int CTvSubtitle::sub_init()
+int CTvSubtitle::sub_init()
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_destroy()
+int CTvSubtitle::sub_destroy()
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_lock()
+int CTvSubtitle::sub_lock()
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_unlock()
+int CTvSubtitle::sub_unlock()
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_clear()
+int CTvSubtitle::sub_clear()
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_start_dvb_sub(int dmx_id, int pid, int page_id, int anc_page_id)
+int CTvSubtitle::sub_start_dvb_sub(int dmx_id, int pid, int page_id, int anc_page_id)
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_start_dtv_tt(int dmx_id, int region_id, int pid, int page, int sub_page, bool is_sub)
+int CTvSubtitle::sub_start_dtv_tt(int dmx_id, int region_id, int pid, int page, int sub_page, bool is_sub)
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_stop_dvb_sub()
+int CTvSubtitle::sub_stop_dvb_sub()
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_stop_dtv_tt()
+int CTvSubtitle::sub_stop_dtv_tt()
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_tt_goto(int page)
+int CTvSubtitle::sub_tt_goto(int page)
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_tt_color_link(int color)
+int CTvSubtitle::sub_tt_color_link(int color)
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_tt_home_link()
+int CTvSubtitle::sub_tt_home_link()
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_tt_next(int dir)
+int CTvSubtitle::sub_tt_next(int dir)
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_tt_set_search_pattern(char *pattern, bool casefold)
+int CTvSubtitle::sub_tt_set_search_pattern(char *pattern, bool casefold)
{
- return 0;
+ return 0;
}
-int CTvSubtitle::sub_tt_search(int dir)
+int CTvSubtitle::sub_tt_search(int dir)
{
- return 0;
+ return 0;
}
/*
@@ -230,94 +230,94 @@ program, no signal, blocked...*/
//channel_num == 0 ,if frontend is dtv
//else != 0
-int CTvSubtitle::sub_start_atsc_cc(enum cc_param_country country, enum cc_param_source_type src_type, int channel_num, enum cc_param_caption_type caption_type)
-{
- LOGD("----sub_start_atsc_cc-1--- country=%d,src=%d,ctype=%d", country, src_type, caption_type);
- switch (country) {
- case CC_PARAM_COUNTRY_USA:
- AM_CC_Cmd(CMD_SET_COUNTRY_USA);
- break;
- case CC_PARAM_COUNTRY_KOREA:
- AM_CC_Cmd(CMD_SET_COUNTRY_KOREA);
- break;
- default:
- AM_CC_Cmd(CMD_SET_COUNTRY_USA);
- break;
- }
-
- switch (src_type) {
- case CC_PARAM_SOURCE_VBIDATA:
- AM_CC_Cmd(CMD_CC_SET_VBIDATA);
- break;
- case CC_PARAM_SOURCE_USERDATA:
- AM_CC_Cmd(CMD_CC_SET_USERDATA);
- break;
- default:
- AM_CC_Cmd(CMD_CC_SET_USERDATA);
- break;
- }
-
- //just for test
- if (channel_num == 0) {
- } else {
- //AM_CC_Cmd(CMD_CC_SET_CHAN_NUM);
- }
-
- AM_CLOSECAPTION_cmd_t cc_t_cmd;
- switch (caption_type) {
- case CC_PARAM_ANALOG_CAPTION_TYPE_CC1:
- cc_t_cmd = CMD_CC_1;
- break;
- case CC_PARAM_ANALOG_CAPTION_TYPE_CC2:
- cc_t_cmd = CMD_CC_2;
- break;
- case CC_PARAM_ANALOG_CAPTION_TYPE_CC3:
- cc_t_cmd = CMD_CC_3;
- break;
- case CC_PARAM_ANALOG_CAPTION_TYPE_CC4:
- cc_t_cmd = CMD_CC_4;
- break;
- case CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE1:
- cc_t_cmd = CMD_SERVICE_1;
- break;
- case CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE2:
- cc_t_cmd = CMD_SERVICE_2;
- break;
- case CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE3:
- cc_t_cmd = CMD_SERVICE_3;
- break;
- case CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE4:
- cc_t_cmd = CMD_SERVICE_4;
- break;
- default:
- cc_t_cmd = CMD_SERVICE_1;
- break;
- }
- AM_CC_Cmd(cc_t_cmd);
-
- AM_CC_Set_CallBack(close_caption_callback, this);
- AM_VCHIP_Set_CallBack(atv_vchip_callback, this);
- //start
- AM_CC_Cmd(CMD_CC_START);
- LOGD("----sub_start_atsc_cc-2--- country=%d,src=%d,ctype=%d", country, src_type, caption_type);
- return 0;
-}
-
-int CTvSubtitle::sub_stop_atsc_cc()
-{
- LOGD("----sub_stop_atsc_cc----");
- AM_CC_Cmd(CMD_CC_STOP);
- return 0;
-}
-int CTvSubtitle::ResetVchipChgStat()
-{
- avchip_chg = 0;
- AM_CC_Cmd(CMD_VCHIP_RST_CHGSTAT);
- return 0;
+int CTvSubtitle::sub_start_atsc_cc(enum cc_param_country country, enum cc_param_source_type src_type, int channel_num, enum cc_param_caption_type caption_type)
+{
+ LOGD("----sub_start_atsc_cc-1--- country=%d,src=%d,ctype=%d", country, src_type, caption_type);
+ switch(country) {
+ case CC_PARAM_COUNTRY_USA:
+ AM_CC_Cmd(CMD_SET_COUNTRY_USA);
+ break;
+ case CC_PARAM_COUNTRY_KOREA:
+ AM_CC_Cmd(CMD_SET_COUNTRY_KOREA);
+ break;
+ default:
+ AM_CC_Cmd(CMD_SET_COUNTRY_USA);
+ break;
+ }
+
+ switch(src_type) {
+ case CC_PARAM_SOURCE_VBIDATA:
+ AM_CC_Cmd(CMD_CC_SET_VBIDATA);
+ break;
+ case CC_PARAM_SOURCE_USERDATA:
+ AM_CC_Cmd(CMD_CC_SET_USERDATA);
+ break;
+ default:
+ AM_CC_Cmd(CMD_CC_SET_USERDATA);
+ break;
+ }
+
+ //just for test
+ if(channel_num == 0) {
+ } else {
+ //AM_CC_Cmd(CMD_CC_SET_CHAN_NUM);
+ }
+
+ AM_CLOSECAPTION_cmd_t cc_t_cmd;
+ switch(caption_type) {
+ case CC_PARAM_ANALOG_CAPTION_TYPE_CC1:
+ cc_t_cmd = CMD_CC_1;
+ break;
+ case CC_PARAM_ANALOG_CAPTION_TYPE_CC2:
+ cc_t_cmd = CMD_CC_2;
+ break;
+ case CC_PARAM_ANALOG_CAPTION_TYPE_CC3:
+ cc_t_cmd = CMD_CC_3;
+ break;
+ case CC_PARAM_ANALOG_CAPTION_TYPE_CC4:
+ cc_t_cmd = CMD_CC_4;
+ break;
+ case CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE1:
+ cc_t_cmd = CMD_SERVICE_1;
+ break;
+ case CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE2:
+ cc_t_cmd = CMD_SERVICE_2;
+ break;
+ case CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE3:
+ cc_t_cmd = CMD_SERVICE_3;
+ break;
+ case CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE4:
+ cc_t_cmd = CMD_SERVICE_4;
+ break;
+ default:
+ cc_t_cmd = CMD_SERVICE_1;
+ break;
+ }
+ AM_CC_Cmd(cc_t_cmd);
+
+ AM_CC_Set_CallBack(close_caption_callback, this);
+ AM_VCHIP_Set_CallBack(atv_vchip_callback, this);
+ //start
+ AM_CC_Cmd(CMD_CC_START);
+ LOGD("----sub_start_atsc_cc-2--- country=%d,src=%d,ctype=%d", country, src_type, caption_type);
+ return 0;
+}
+
+int CTvSubtitle::sub_stop_atsc_cc()
+{
+ LOGD("----sub_stop_atsc_cc----");
+ AM_CC_Cmd(CMD_CC_STOP);
+ return 0;
+}
+int CTvSubtitle::ResetVchipChgStat()
+{
+ avchip_chg = 0;
+ AM_CC_Cmd(CMD_VCHIP_RST_CHGSTAT);
+ return 0;
}
int CTvSubtitle::IsVchipChange()
{
- return avchip_chg;
+ return avchip_chg;
}
//cnt :data buf len
//databuf len is max 512
@@ -325,24 +325,24 @@ int CTvSubtitle::IsVchipChange()
void CTvSubtitle::close_caption_callback(char *str, int cnt, int data_buf[], int cmd_buf[], void *user_data)
{
- CTvSubtitle *pSub = (CTvSubtitle *)user_data;
+ CTvSubtitle *pSub = (CTvSubtitle *)user_data;
- if (pSub == NULL) {
- LOGD("sub cc callback is null user data for this");
- return;
- }
+ if(pSub == NULL) {
+ LOGD("sub cc callback is null user data for this");
+ return;
+ }
- if (pSub->mpObser == NULL) return;
+ if(pSub->mpObser == NULL) return;
- pSub->mCurCCEv.mDataBufSize = cnt;
- pSub->mCurCCEv.mpDataBuffer = data_buf;
- pSub->mCurCCEv.mCmdBufSize = 128;//max
- pSub->mCurCCEv.mpCmdBuffer = cmd_buf;
+ pSub->mCurCCEv.mDataBufSize = cnt;
+ pSub->mCurCCEv.mpDataBuffer = data_buf;
+ pSub->mCurCCEv.mCmdBufSize = 128;//max
+ pSub->mCurCCEv.mpCmdBuffer = cmd_buf;
- pSub->mpObser->onEvent(pSub->mCurCCEv);
+ pSub->mpObser->onEvent(pSub->mCurCCEv);
}
void CTvSubtitle::atv_vchip_callback(int Is_chg, void *user_data)
{
- CTvSubtitle *pSub = (CTvSubtitle *)user_data;
- pSub->avchip_chg = Is_chg;
+ CTvSubtitle *pSub = (CTvSubtitle *)user_data;
+ pSub->avchip_chg = Is_chg;
}
diff --git a/tvapi/libtv/tv/CTvSubtitle.h b/tvapi/libtv/tv/CTvSubtitle.h
index dcf2211..8bb8a82 100644
--- a/tvapi/libtv/tv/CTvSubtitle.h
+++ b/tvapi/libtv/tv/CTvSubtitle.h
@@ -1,236 +1,233 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvSubtitle.h
-// @ Date : 2013-11
-// @ Author :
-//
-//
-#if !defined(_CTVSUBTITLE_H)
-#define _CTVSUBTITLE_H
-#include <stdlib.h>
-#include "CTvLog.h"
-using namespace android;
-#include "am_cc.h"
-#include "CTvEv.h"
-#define LOG_TAG "CTvSubtitle"
-
-
-typedef enum cc_param_country {
- CC_PARAM_COUNTRY_USA = 0,
- CC_PARAM_COUNTRY_KOREA,
-};
-
-typedef enum cc_param_source_type {
- CC_PARAM_SOURCE_VBIDATA = 0,
- CC_PARAM_SOURCE_USERDATA,
-};
-
-typedef enum cc_param_caption_type {
- CC_PARAM_ANALOG_CAPTION_TYPE_CC1 = 0,
- CC_PARAM_ANALOG_CAPTION_TYPE_CC2,
- CC_PARAM_ANALOG_CAPTION_TYPE_CC3,
- CC_PARAM_ANALOG_CAPTION_TYPE_CC4,
- CC_PARAM_ANALOG_CAPTION_TYPE_TEXT1,
- CC_PARAM_ANALOG_CAPTION_TYPE_TEXT2,
- CC_PARAM_ANALOG_CAPTION_TYPE_TEXT3,
- CC_PARAM_ANALOG_CAPTION_TYPE_TEXT4,
- //
- CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE1,
- CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE2,
- CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE3,
- CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE4,
- CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE5,
- CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE6,
-};
-class CTvSubtitle
-{
-public:
- CTvSubtitle();
- ~CTvSubtitle();
-
- class CloseCaptionEvent: public CTvEv
- {
- public:
- //static const int CC_CMD_LEN = 128;
- //static const int CC_DATA_LEN = 512;
- CloseCaptionEvent(): CTvEv(CTvEv::TV_EVENT_CC)
- {
- }
- ~CloseCaptionEvent()
- {
- }
- public:
- int mCmdBufSize;
- int *mpCmdBuffer;
- int mDataBufSize;
- int *mpDataBuffer;
- };
-
- class IObserver
- {
- public:
- IObserver() {};
- virtual ~IObserver() {};
- virtual void onEvent(const CloseCaptionEvent &ev) = 0;
- };
-
- void setObser(IObserver *pObser);
- void stopDecoder();
- /**
- * 开始字幕信æ¯è§£æžshowboz sync
- */
- void startSub();
- /**
- * åœæ­¢å›¾æ–‡/字幕信æ¯è§£æž
- */
- void stop();
-
- /**
- * åœæ­¢å›¾æ–‡/字幕信æ¯è§£æžå¹¶æ¸…除缓存数æ®
- */
- void clear();
- /**
- * 在图文模å¼ä¸‹è¿›å…¥ä¸‹ä¸€é¡µ
- */
- void nextPage();
- /**
- * 在图文模å¼ä¸‹è¿›å…¥ä¸Šä¸€é¡µ
- */
- void previousPage();
- /**
- * 在图文模å¼ä¸‹è·³è½¬åˆ°æŒ‡å®šé¡µ
- * @param page è¦è·³è½¬åˆ°çš„页å·
- */
- void gotoPage(int page);
-
- /**
- * 在图文模å¼ä¸‹è·³è½¬åˆ°home页
- */
- void goHome();
- /**
- * 在图文模å¼ä¸‹æ ¹æ®é¢œè‰²è·³è½¬åˆ°æŒ‡å®šé“¾æŽ¥
- * @param color 颜色,COLOR_RED/COLOR_GREEN/COLOR_YELLOW/COLOR_BLUE
- */
- void colorLink(int color);
-
- /**
- * 在图文模å¼ä¸‹è®¾å®šæœç´¢å­—符串
- * @param pattern æœç´¢åŒ¹é…字符串
- * @param casefold 是å¦åŒºåˆ†å¤§å°å†™
- */
- void setSearchPattern(char *pattern, bool casefold);
- /**
- * æœç´¢ä¸‹ä¸€é¡µ
- */
- void searchNext();
- /**
- * æœç´¢ä¸Šä¸€é¡µ
- */
- void searchPrevious();
-
- int sub_init();
- //
- int sub_destroy();
- //
- int sub_lock();
- //
- int sub_unlock();
- //
- int sub_clear();
- //
- int sub_start_dvb_sub(int dmx_id, int pid, int page_id, int anc_page_id);
- //
- int sub_start_dtv_tt(int dmx_id, int region_id, int pid, int page, int sub_page, bool is_sub);
- //
- int sub_stop_dvb_sub();
- //
- int sub_stop_dtv_tt();
- //
- int sub_tt_goto(int page);
- //
- int sub_tt_color_link(int color);
- //
- int sub_tt_home_link();
- //
- int sub_tt_next(int dir);
- //
- int sub_tt_set_search_pattern(char *pattern, bool casefold);
- //
- int sub_tt_search(int dir);
- //
- int sub_start_atsc_cc(enum cc_param_country country, enum cc_param_source_type src_type, int channel_num, enum cc_param_caption_type caption_type);
- //
- int sub_stop_atsc_cc();
- static void close_caption_callback(char *str, int cnt, int data_buf[], int cmd_buf[], void *user_data);
- static void atv_vchip_callback(int Is_chg, void *user_data);
- int IsVchipChange();
- int ResetVchipChgStat();
-private:
-
- /**
- * DVB subtitle å‚æ•°
- */
- struct DVBSubParams {
- int mDmx_id;
- int mPid;
- int mComposition_page_id;
- int mAncillary_page_id;
-
- /**
- * 创建DVB subtitleå‚æ•°
- * @param dmx_id 接收使用demux设备的ID
- * @param pid subtitleæµçš„PID
- * @param page_id 字幕的page_id
- * @param anc_page_id 字幕的ancillary_page_id
- */
- DVBSubParams()
- {
- }
- DVBSubParams(int dmx_id, int pid, int page_id, int anc_page_id)
- {
- mDmx_id = dmx_id;
- mPid = pid;
- mComposition_page_id = page_id;
- mAncillary_page_id = anc_page_id;
- }
- };
-
- /**
- * 数字电视teletext图文å‚æ•°
- */
- struct DTVTTParams {
- int mDmx_id;
- int mPid;
- int mPage_no;
- int mSub_page_no;
- int mRegion_id;
-
- DTVTTParams()
- {
- }
- /**
- * 创建数字电视teletext图文å‚æ•°
- * @param dmx_id 接收使用demux设备的ID
- * @param pid 图文信æ¯æµçš„PID
- * @param page_no è¦æ˜¾ç¤ºé¡µå·
- * @param sub_page_no è¦æ˜¾ç¤ºçš„å­é¡µå·
- */
- DTVTTParams(int dmx_id, int pid, int page_no, int sub_page_no, int region_id)
- {
- mDmx_id = dmx_id;
- mPid = pid;
- mPage_no = page_no;
- mSub_page_no = sub_page_no;
- mRegion_id = region_id;
- }
- };
-
- int mSubType;
- CloseCaptionEvent mCurCCEv;
- IObserver *mpObser;
- int avchip_chg;
-};
-#endif //_CTVSUBTITLE_H
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvSubtitle.h
+// @ Date : 2013-11
+// @ Author :
+//
+//
+#if !defined(_CTVSUBTITLE_H)
+#define _CTVSUBTITLE_H
+#include <stdlib.h>
+#include "CTvLog.h"
+using namespace android;
+#include "am_cc.h"
+#include "CTvEv.h"
+#define LOG_TAG "CTvSubtitle"
+
+
+typedef enum cc_param_country {
+ CC_PARAM_COUNTRY_USA = 0,
+ CC_PARAM_COUNTRY_KOREA,
+};
+
+typedef enum cc_param_source_type {
+ CC_PARAM_SOURCE_VBIDATA = 0,
+ CC_PARAM_SOURCE_USERDATA,
+};
+
+typedef enum cc_param_caption_type {
+ CC_PARAM_ANALOG_CAPTION_TYPE_CC1 = 0,
+ CC_PARAM_ANALOG_CAPTION_TYPE_CC2,
+ CC_PARAM_ANALOG_CAPTION_TYPE_CC3,
+ CC_PARAM_ANALOG_CAPTION_TYPE_CC4,
+ CC_PARAM_ANALOG_CAPTION_TYPE_TEXT1,
+ CC_PARAM_ANALOG_CAPTION_TYPE_TEXT2,
+ CC_PARAM_ANALOG_CAPTION_TYPE_TEXT3,
+ CC_PARAM_ANALOG_CAPTION_TYPE_TEXT4,
+ //
+ CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE1,
+ CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE2,
+ CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE3,
+ CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE4,
+ CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE5,
+ CC_PARAM_DIGITAL_CAPTION_TYPE_SERVICE6,
+};
+class CTvSubtitle {
+public:
+ CTvSubtitle();
+ ~CTvSubtitle();
+
+ class CloseCaptionEvent: public CTvEv {
+ public:
+ //static const int CC_CMD_LEN = 128;
+ //static const int CC_DATA_LEN = 512;
+ CloseCaptionEvent(): CTvEv(CTvEv::TV_EVENT_CC)
+ {
+ }
+ ~CloseCaptionEvent()
+ {
+ }
+ public:
+ int mCmdBufSize;
+ int *mpCmdBuffer;
+ int mDataBufSize;
+ int *mpDataBuffer;
+ };
+
+ class IObserver {
+ public:
+ IObserver() {};
+ virtual ~IObserver() {};
+ virtual void onEvent(const CloseCaptionEvent &ev) = 0;
+ };
+
+ void setObser(IObserver *pObser);
+ void stopDecoder();
+ /**
+ * 开始字幕信æ¯è§£æžshowboz sync
+ */
+ void startSub();
+ /**
+ * åœæ­¢å›¾æ–‡/字幕信æ¯è§£æž
+ */
+ void stop();
+
+ /**
+ * åœæ­¢å›¾æ–‡/字幕信æ¯è§£æžå¹¶æ¸…除缓存数æ®
+ */
+ void clear();
+ /**
+ * 在图文模å¼ä¸‹è¿›å…¥ä¸‹ä¸€é¡µ
+ */
+ void nextPage();
+ /**
+ * 在图文模å¼ä¸‹è¿›å…¥ä¸Šä¸€é¡µ
+ */
+ void previousPage();
+ /**
+ * 在图文模å¼ä¸‹è·³è½¬åˆ°æŒ‡å®šé¡µ
+ * @param page è¦è·³è½¬åˆ°çš„页å·
+ */
+ void gotoPage(int page);
+
+ /**
+ * 在图文模å¼ä¸‹è·³è½¬åˆ°home页
+ */
+ void goHome();
+ /**
+ * 在图文模å¼ä¸‹æ ¹æ®é¢œè‰²è·³è½¬åˆ°æŒ‡å®šé“¾æŽ¥
+ * @param color 颜色,COLOR_RED/COLOR_GREEN/COLOR_YELLOW/COLOR_BLUE
+ */
+ void colorLink(int color);
+
+ /**
+ * 在图文模å¼ä¸‹è®¾å®šæœç´¢å­—符串
+ * @param pattern æœç´¢åŒ¹é…字符串
+ * @param casefold 是å¦åŒºåˆ†å¤§å°å†™
+ */
+ void setSearchPattern(char *pattern, bool casefold);
+ /**
+ * æœç´¢ä¸‹ä¸€é¡µ
+ */
+ void searchNext();
+ /**
+ * æœç´¢ä¸Šä¸€é¡µ
+ */
+ void searchPrevious();
+
+ int sub_init();
+ //
+ int sub_destroy();
+ //
+ int sub_lock();
+ //
+ int sub_unlock();
+ //
+ int sub_clear();
+ //
+ int sub_start_dvb_sub(int dmx_id, int pid, int page_id, int anc_page_id);
+ //
+ int sub_start_dtv_tt(int dmx_id, int region_id, int pid, int page, int sub_page, bool is_sub);
+ //
+ int sub_stop_dvb_sub();
+ //
+ int sub_stop_dtv_tt();
+ //
+ int sub_tt_goto(int page);
+ //
+ int sub_tt_color_link(int color);
+ //
+ int sub_tt_home_link();
+ //
+ int sub_tt_next(int dir);
+ //
+ int sub_tt_set_search_pattern(char *pattern, bool casefold);
+ //
+ int sub_tt_search(int dir);
+ //
+ int sub_start_atsc_cc(enum cc_param_country country, enum cc_param_source_type src_type, int channel_num, enum cc_param_caption_type caption_type);
+ //
+ int sub_stop_atsc_cc();
+ static void close_caption_callback(char *str, int cnt, int data_buf[], int cmd_buf[], void *user_data);
+ static void atv_vchip_callback(int Is_chg, void *user_data);
+ int IsVchipChange();
+ int ResetVchipChgStat();
+private:
+
+ /**
+ * DVB subtitle å‚æ•°
+ */
+ struct DVBSubParams {
+ int mDmx_id;
+ int mPid;
+ int mComposition_page_id;
+ int mAncillary_page_id;
+
+ /**
+ * 创建DVB subtitleå‚æ•°
+ * @param dmx_id 接收使用demux设备的ID
+ * @param pid subtitleæµçš„PID
+ * @param page_id 字幕的page_id
+ * @param anc_page_id 字幕的ancillary_page_id
+ */
+ DVBSubParams()
+ {
+ }
+ DVBSubParams(int dmx_id, int pid, int page_id, int anc_page_id)
+ {
+ mDmx_id = dmx_id;
+ mPid = pid;
+ mComposition_page_id = page_id;
+ mAncillary_page_id = anc_page_id;
+ }
+ };
+
+ /**
+ * 数字电视teletext图文å‚æ•°
+ */
+ struct DTVTTParams {
+ int mDmx_id;
+ int mPid;
+ int mPage_no;
+ int mSub_page_no;
+ int mRegion_id;
+
+ DTVTTParams()
+ {
+ }
+ /**
+ * 创建数字电视teletext图文å‚æ•°
+ * @param dmx_id 接收使用demux设备的ID
+ * @param pid 图文信æ¯æµçš„PID
+ * @param page_no è¦æ˜¾ç¤ºé¡µå·
+ * @param sub_page_no è¦æ˜¾ç¤ºçš„å­é¡µå·
+ */
+ DTVTTParams(int dmx_id, int pid, int page_no, int sub_page_no, int region_id)
+ {
+ mDmx_id = dmx_id;
+ mPid = pid;
+ mPage_no = page_no;
+ mSub_page_no = sub_page_no;
+ mRegion_id = region_id;
+ }
+ };
+
+ int mSubType;
+ CloseCaptionEvent mCurCCEv;
+ IObserver *mpObser;
+ int avchip_chg;
+};
+#endif //_CTVSUBTITLE_H
diff --git a/tvapi/libtv/tv/CTvTime.h b/tvapi/libtv/tv/CTvTime.h
index d43bbd8..12a5334 100644
--- a/tvapi/libtv/tv/CTvTime.h
+++ b/tvapi/libtv/tv/CTvTime.h
@@ -19,84 +19,83 @@
/**
*TV时间管ç†
*/
-class CTvTime
-{
+class CTvTime {
public:
- CTvTime()
- {
- mDiff = 0;
- mHZ = sysconf( _SC_CLK_TCK );
- }
+ CTvTime()
+ {
+ mDiff = 0;
+ mHZ = sysconf( _SC_CLK_TCK );
+ }
- /**
- *设定当å‰æ—¶é—´
- *@param time 当å‰æ—¶é—´ï¼ˆæ¯«ç§’å•ä½ï¼‰
- */
- long getSysUTCTime()
- {
- //struct tm tm;
- //time_t t;
- //int64_t r = mktime_tz(&(tm), NULL);
- //time_t t = time(NULL);
- //LOGD("---------utc t = %ld time t=%ld", r, t);
- return 0;
- }
- void setTime(long t)
- {
- //long utcMS;
- //time(&utcMS);
- //nsecs_t ns = systemTime(CLOCK_REALTIME);
- //nsecs_t tm = ns2s(ns);
- //unsigned long ticks = times(NULL);
- //long tm = ticks/mHZ;
- struct sysinfo s_info;
- int error;
- error = sysinfo(&s_info);
+ /**
+ *设定当å‰æ—¶é—´
+ *@param time 当å‰æ—¶é—´ï¼ˆæ¯«ç§’å•ä½ï¼‰
+ */
+ long getSysUTCTime()
+ {
+ //struct tm tm;
+ //time_t t;
+ //int64_t r = mktime_tz(&(tm), NULL);
+ //time_t t = time(NULL);
+ //LOGD("---------utc t = %ld time t=%ld", r, t);
+ return 0;
+ }
+ void setTime(long t)
+ {
+ //long utcMS;
+ //time(&utcMS);
+ //nsecs_t ns = systemTime(CLOCK_REALTIME);
+ //nsecs_t tm = ns2s(ns);
+ //unsigned long ticks = times(NULL);
+ //long tm = ticks/mHZ;
+ struct sysinfo s_info;
+ int error;
+ error = sysinfo(&s_info);
- mDiff = t - s_info.uptime;
- LOGD("--- mDiff=%ld", mDiff);
- }
+ mDiff = t - s_info.uptime;
+ LOGD("--- mDiff=%ld", mDiff);
+ }
- /**
- *å–得当å‰æ—¶é—´
- *@return 返回当å‰æ—¶é—´
- */
- long getTime()
- {
- //long utcMS;
- //time(&utcMS);
- //nsecs_t ns = systemTime(CLOCK_REALTIME);
- //nsecs_t sec = ns2s(ns);
+ /**
+ *å–得当å‰æ—¶é—´
+ *@return 返回当å‰æ—¶é—´
+ */
+ long getTime()
+ {
+ //long utcMS;
+ //time(&utcMS);
+ //nsecs_t ns = systemTime(CLOCK_REALTIME);
+ //nsecs_t sec = ns2s(ns);
- //unsigned long ticks = times(NULL);
- //long sec = ticks/mHZ;
- struct sysinfo s_info;
- int error;
- error = sysinfo(&s_info);
+ //unsigned long ticks = times(NULL);
+ //long sec = ticks/mHZ;
+ struct sysinfo s_info;
+ int error;
+ error = sysinfo(&s_info);
- LOGD("--- mDiff=%ld, sec=%ld", mDiff, s_info.uptime);
- return s_info.uptime + mDiff;
- }
+ LOGD("--- mDiff=%ld, sec=%ld", mDiff, s_info.uptime);
+ return s_info.uptime + mDiff;
+ }
- /**
- *å–å¾—TDT/STT与系统时间的差值
- *@return 返回差值时间
- */
- long getDiffTime()
- {
- return mDiff;
- }
+ /**
+ *å–å¾—TDT/STT与系统时间的差值
+ *@return 返回差值时间
+ */
+ long getDiffTime()
+ {
+ return mDiff;
+ }
- /**
- *设置TDT/STT与系统时间的差值
- */
- void setDiffTime(long diff)
- {
- this->mDiff = diff;
- }
+ /**
+ *设置TDT/STT与系统时间的差值
+ */
+ void setDiffTime(long diff)
+ {
+ this->mDiff = diff;
+ }
private:
- long mDiff;
- unsigned long mHZ;
+ long mDiff;
+ unsigned long mHZ;
};
diff --git a/tvapi/libtv/tv/CTvVchipCheck.cpp b/tvapi/libtv/tv/CTvVchipCheck.cpp
index 2eb81dd..34b7b74 100644
--- a/tvapi/libtv/tv/CTvVchipCheck.cpp
+++ b/tvapi/libtv/tv/CTvVchipCheck.cpp
@@ -7,155 +7,155 @@ CTvVchipCheck:: ~CTvVchipCheck()
}
bool CTvVchipCheck::CheckProgramBlock(int id)
{
- bool lock = false;
- CTvProgram prog;
- CTvEvent ev;
- int ret = 0;
-
- ret = CTvProgram::selectByID(id, prog);
- if (ret != 0) return false;
-
- int type = prog.getProgType();
-
- if (type == CTvProgram::TYPE_ATV) {
- ret = ev.getATVProgEvent(prog.getSrc(), prog.getID(), ev);
- } else {
- //long epgtime = mDmTime.getTime();
- //ret = ev.getProgPresentEvent(prog.getSrc(),prog.getSourceId(), epgtime, ev);
- }
- if (ret == 0) {
- if (prog.isATSCMode()) {
- // ATSC V-Chip
- Vector<CTvDimension::VChipRating *> definedRatings = ev.getVChipRatings();
- for (int i = 0; i < definedRatings.size(); i++) {
- CTvDimension dm;
- if (dm.isBlocked(dm, definedRatings[i])) {
- lock = true;
- {
- /*CurvchipDimension = dm.getName();
- CurvchipAbbrev = dm.getAbbrev(definedRatings[i]->getValue());
- CurvchipText= dm.getText(definedRatings[i]->getValue());
- LOGD("%s, %d Dimension:%s, Abbrev: %s, idx:%d","TV",__LINE__,CurvchipDimension.string(),
- CurvchipAbbrev.string(),definedRatings[i]->getValue());*/
- }
- break;
- }
- }
- }
- } else {
- LOGD("Present event of playing program not received yet, will unblock this program.");
- }
-
- return lock;
+ bool lock = false;
+ CTvProgram prog;
+ CTvEvent ev;
+ int ret = 0;
+
+ ret = CTvProgram::selectByID(id, prog);
+ if(ret != 0) return false;
+
+ int type = prog.getProgType();
+
+ if(type == CTvProgram::TYPE_ATV) {
+ ret = ev.getATVProgEvent(prog.getSrc(), prog.getID(), ev);
+ } else {
+ //long epgtime = mDmTime.getTime();
+ //ret = ev.getProgPresentEvent(prog.getSrc(),prog.getSourceId(), epgtime, ev);
+ }
+ if (ret == 0) {
+ if(prog.isATSCMode()) {
+ // ATSC V-Chip
+ Vector<CTvDimension::VChipRating *> definedRatings = ev.getVChipRatings();
+ for (int i = 0; i < definedRatings.size(); i++) {
+ CTvDimension dm;
+ if (dm.isBlocked(dm, definedRatings[i])) {
+ lock = true;
+ {
+ /*CurvchipDimension = dm.getName();
+ CurvchipAbbrev = dm.getAbbrev(definedRatings[i]->getValue());
+ CurvchipText= dm.getText(definedRatings[i]->getValue());
+ LOGD("%s, %d Dimension:%s, Abbrev: %s, idx:%d","TV",__LINE__,CurvchipDimension.string(),
+ CurvchipAbbrev.string(),definedRatings[i]->getValue());*/
+ }
+ break;
+ }
+ }
+ }
+ } else {
+ LOGD("Present event of playing program not received yet, will unblock this program.");
+ }
+
+ return lock;
}
void *CTvVchipCheck::VchipCheckingThread ( void *arg )
{
- /*CTv *pt = static_cast<CTv *> ( arg );
-
- if ( !pt->IsVchipEnable() ) {
- return NULL;
- }
-
- while ( pt->mvchip_running ) {
- bool lock = 0;
- String8 curdm;
- String8 curabbrev;
- tvin_info_t siginfo = pt->Tv_GetCurrentSignalInfo();
-
- //if ( TVIN_SIG_STATUS_STABLE == siginfo.status ) {
- lock = pt->mTvVchip.CheckProgramBlock ( pt->getDTVProgramID() );
- curdm = pt->mTvVchip.getCurdimension();
- curabbrev = pt->mTvVchip.getCurAbbr();
-
- if ( ( lock != pt->mlastlockstatus ) || ( pt->mlastdm != curdm ) || ( pt->mlastabbrev != curabbrev ) ) {
- pt->mlastlockstatus = lock;
- pt->mlastdm = curdm;
- pt->mlastabbrev = curabbrev;
- BlockEvent evt;
-
- if ( lock ) {
- evt.programBlockType = 0;
- evt.block_status = 1;
- evt.vchipDimension = curdm;
- evt.vchipAbbrev = curdm;
- LOGD ( "%s, %d block the program by type %s, %s", "TV", __LINE__, curdm.string(), curabbrev.string() );
- } else {
- LOGD ( "unblock the program" );
- evt.programBlockType = 0;
- evt.block_status = 0;
- }
-
- pt->sendTvEvent ( evt );
- pt->Programblock ( lock );
- }
-
- usleep ( 1000 * 1000 );
- //} else {
- //usleep ( 500 * 1000 );
- //}
- }*/
-
- return NULL;
+ /*CTv *pt = static_cast<CTv *> ( arg );
+
+ if ( !pt->IsVchipEnable() ) {
+ return NULL;
+ }
+
+ while ( pt->mvchip_running ) {
+ bool lock = 0;
+ String8 curdm;
+ String8 curabbrev;
+ tvin_info_t siginfo = pt->Tv_GetCurrentSignalInfo();
+
+ //if ( TVIN_SIG_STATUS_STABLE == siginfo.status ) {
+ lock = pt->mTvVchip.CheckProgramBlock ( pt->getDTVProgramID() );
+ curdm = pt->mTvVchip.getCurdimension();
+ curabbrev = pt->mTvVchip.getCurAbbr();
+
+ if ( ( lock != pt->mlastlockstatus ) || ( pt->mlastdm != curdm ) || ( pt->mlastabbrev != curabbrev ) ) {
+ pt->mlastlockstatus = lock;
+ pt->mlastdm = curdm;
+ pt->mlastabbrev = curabbrev;
+ BlockEvent evt;
+
+ if ( lock ) {
+ evt.programBlockType = 0;
+ evt.block_status = 1;
+ evt.vchipDimension = curdm;
+ evt.vchipAbbrev = curdm;
+ LOGD ( "%s, %d block the program by type %s, %s", "TV", __LINE__, curdm.string(), curabbrev.string() );
+ } else {
+ LOGD ( "unblock the program" );
+ evt.programBlockType = 0;
+ evt.block_status = 0;
+ }
+
+ pt->sendTvEvent ( evt );
+ pt->Programblock ( lock );
+ }
+
+ usleep ( 1000 * 1000 );
+ //} else {
+ //usleep ( 500 * 1000 );
+ //}
+ }*/
+
+ return NULL;
}
int CTvVchipCheck::stopVChipCheck()
{
- CMutex::Autolock _l ( mLock );
- LOGD ( "stopVChipCheck() and exit thread" );
- requestExit();
- return 0;
+ CMutex::Autolock _l ( mLock );
+ LOGD ( "stopVChipCheck() and exit thread" );
+ requestExit();
+ return 0;
}
int CTvVchipCheck::pauseVChipCheck()
{
- CMutex::Autolock _l ( mLock );
- LOGD ( "pauseVChipCheck() set request pause flag, when flag true, thread loop go pause on condition" );
- m_request_pause_detect = true;
- return 0;
+ CMutex::Autolock _l ( mLock );
+ LOGD ( "pauseVChipCheck() set request pause flag, when flag true, thread loop go pause on condition" );
+ m_request_pause_detect = true;
+ return 0;
}
int CTvVchipCheck::requestAndWaitPauseVChipCheck()
{
- CMutex::Autolock _l ( mLock );
- LOGD ( "requestAndWaitPauseVChipCheck(),first set pause flag to true, and wait when loop run to pause code segment" );
- m_request_pause_detect = true;
+ CMutex::Autolock _l ( mLock );
+ LOGD ( "requestAndWaitPauseVChipCheck(),first set pause flag to true, and wait when loop run to pause code segment" );
+ m_request_pause_detect = true;
- if ( mDetectState == STATE_RUNNING ) {
- mRequestPauseCondition.wait ( mLock );
- }
+ if ( mDetectState == STATE_RUNNING ) {
+ mRequestPauseCondition.wait ( mLock );
+ }
- return 0;
+ return 0;
}
int CTvVchipCheck::resumeVChipCheck()
{
- CMutex::Autolock _l ( mLock );
- LOGD ( "resumeVChipCheck() first set flag false, and signal to paused condition, let run loop" );
- m_request_pause_detect = false;
- mDetectPauseCondition.signal();
- return 0;
+ CMutex::Autolock _l ( mLock );
+ LOGD ( "resumeVChipCheck() first set flag false, and signal to paused condition, let run loop" );
+ m_request_pause_detect = false;
+ mDetectPauseCondition.signal();
+ return 0;
}
bool CTvVchipCheck::threadLoop()
{
- while ( !exitPending() ) { //requietexit() or requietexitWait() not call
- while ( m_request_pause_detect ) {
- mRequestPauseCondition.broadcast();
- mLock.lock();
- mDetectState = STATE_PAUSE;
- mDetectPauseCondition.wait ( mLock ); //first unlock,when return,lock again,so need,call unlock
- mDetectState = STATE_RUNNING;
- mLock.unlock();
- }
- //loop codes
-
- if ( !m_request_pause_detect ) { //not request pause, sleep 1s which loop
- usleep ( 1000 * 1000 );
- }
- }
- //exit
- mDetectState = STATE_STOPED;
- //return true, run again, return false,not run.
- return false;
+ while ( !exitPending() ) { //requietexit() or requietexitWait() not call
+ while ( m_request_pause_detect ) {
+ mRequestPauseCondition.broadcast();
+ mLock.lock();
+ mDetectState = STATE_PAUSE;
+ mDetectPauseCondition.wait ( mLock ); //first unlock,when return,lock again,so need,call unlock
+ mDetectState = STATE_RUNNING;
+ mLock.unlock();
+ }
+ //loop codes
+
+ if ( !m_request_pause_detect ) { //not request pause, sleep 1s which loop
+ usleep ( 1000 * 1000 );
+ }
+ }
+ //exit
+ mDetectState = STATE_STOPED;
+ //return true, run again, return false,not run.
+ return false;
}
diff --git a/tvapi/libtv/tv/CTvVchipCheck.h b/tvapi/libtv/tv/CTvVchipCheck.h
index 4ebc86a..1a33d23 100644
--- a/tvapi/libtv/tv/CTvVchipCheck.h
+++ b/tvapi/libtv/tv/CTvVchipCheck.h
@@ -22,29 +22,28 @@
#include "CTvLog.h"
#include "tvutils/CThread.h"
// TV ATSC rating dimension
-class CTvVchipCheck: public CThread
-{
+class CTvVchipCheck: public CThread {
public:
- CTvVchipCheck();
- ~CTvVchipCheck();
- bool CheckProgramBlock(int id);
- static void *VchipCheckingThread ( void *arg );
- int startVChipCheck();
- int stopVChipCheck();
- int pauseVChipCheck();
- int resumeVChipCheck();
- int requestAndWaitPauseVChipCheck();
+ CTvVchipCheck();
+ ~CTvVchipCheck();
+ bool CheckProgramBlock(int id);
+ static void *VchipCheckingThread ( void *arg );
+ int startVChipCheck();
+ int stopVChipCheck();
+ int pauseVChipCheck();
+ int resumeVChipCheck();
+ int requestAndWaitPauseVChipCheck();
private:
- bool threadLoop();
- mutable CMutex mLock;
- CCondition mDetectPauseCondition;
- CCondition mRequestPauseCondition;
- volatile bool m_request_pause_detect;
- enum DetectState {
- STATE_STOPED = 0,
- STATE_RUNNING,
- STATE_PAUSE
- };
- int mDetectState;
+ bool threadLoop();
+ mutable CMutex mLock;
+ CCondition mDetectPauseCondition;
+ CCondition mRequestPauseCondition;
+ volatile bool m_request_pause_detect;
+ enum DetectState {
+ STATE_STOPED = 0,
+ STATE_RUNNING,
+ STATE_PAUSE
+ };
+ int mDetectState;
};
#endif //_CTVDIMENSION_H
diff --git a/tvapi/libtv/tv/CUpgradeFBC.cpp b/tvapi/libtv/tv/CUpgradeFBC.cpp
index bf59abf..3fa295b 100644
--- a/tvapi/libtv/tv/CUpgradeFBC.cpp
+++ b/tvapi/libtv/tv/CUpgradeFBC.cpp
@@ -17,540 +17,540 @@
CUpgradeFBC::CUpgradeFBC()
{
- mUpgradeMode = CC_UPGRADE_MODE_MAIN;
- mFileName[0] = 0;
-
- mOPTotalSize = 0;
- mBinFileSize = 0;
- mBinFileBuf = NULL;
- mUpgradeBlockSize = 0x10000;
-
- mpObserver = NULL;
- mState = STATE_STOPED;
- mCfbcIns = GetSingletonFBC();
- mCfbcIns->SetUpgradeFlag(0);
+ mUpgradeMode = CC_UPGRADE_MODE_MAIN;
+ mFileName[0] = 0;
+
+ mOPTotalSize = 0;
+ mBinFileSize = 0;
+ mBinFileBuf = NULL;
+ mUpgradeBlockSize = 0x10000;
+
+ mpObserver = NULL;
+ mState = STATE_STOPED;
+ mCfbcIns = GetSingletonFBC();
+ mCfbcIns->SetUpgradeFlag(0);
}
CUpgradeFBC::~CUpgradeFBC()
{
- if (mBinFileBuf != NULL) {
- delete mBinFileBuf;
- mBinFileBuf = NULL;
- }
+ if (mBinFileBuf != NULL) {
+ delete mBinFileBuf;
+ mBinFileBuf = NULL;
+ }
}
int CUpgradeFBC::start()
{
- if (mState == STATE_STOPED || mState == STATE_ABORT || mState == STATE_FINISHED) {
- mCfbcIns->SetUpgradeFlag(1);
+ if (mState == STATE_STOPED || mState == STATE_ABORT || mState == STATE_FINISHED) {
+ mCfbcIns->SetUpgradeFlag(1);
- this->run();
- }
+ this->run();
+ }
- return 0;
+ return 0;
}
int CUpgradeFBC::stop()
{
- requestExit();
- mState = STATE_STOPED;
+ requestExit();
+ mState = STATE_STOPED;
- return 0;
+ return 0;
}
int CUpgradeFBC::GetUpgradeFBCProgress()
{
- return 0;
+ return 0;
}
int CUpgradeFBC::SetUpgradeFileName(char *file_name)
{
- if (file_name == NULL) {
- return -1;
- }
+ if (file_name == NULL) {
+ return -1;
+ }
- strcpy(mFileName, file_name);
+ strcpy(mFileName, file_name);
- return 0;
+ return 0;
}
int CUpgradeFBC::SetUpgradeFileSize(int file_size)
{
- mBinFileSize = file_size;
- return 0;
+ mBinFileSize = file_size;
+ return 0;
}
int CUpgradeFBC::SetUpgradeBlockSize(int block_size)
{
- mUpgradeBlockSize = block_size;
- return 0;
+ mUpgradeBlockSize = block_size;
+ return 0;
}
int CUpgradeFBC::SetUpgradeMode(int mode)
{
- int tmp_val = 0;
+ int tmp_val = 0;
- tmp_val = mUpgradeMode;
- mUpgradeMode = mode;
+ tmp_val = mUpgradeMode;
+ mUpgradeMode = mode;
- return tmp_val;
+ return tmp_val;
}
int CUpgradeFBC::AddCRCToDataBuf(unsigned char data_buf[], int data_len)
{
- unsigned int tmp_crc = 0;
+ unsigned int tmp_crc = 0;
- tmp_crc = mCfbcIns->Calcrc32(0, data_buf, data_len);
- data_buf[data_len + 0] = (tmp_crc >> 0) & 0xFF;
- data_buf[data_len + 1] = (tmp_crc >> 8) & 0xFF;
- data_buf[data_len + 2] = (tmp_crc >> 16) & 0xFF;
- data_buf[data_len + 3] = (tmp_crc >> 24) & 0xFF;
+ tmp_crc = mCfbcIns->Calcrc32(0, data_buf, data_len);
+ data_buf[data_len + 0] = (tmp_crc >> 0) & 0xFF;
+ data_buf[data_len + 1] = (tmp_crc >> 8) & 0xFF;
+ data_buf[data_len + 2] = (tmp_crc >> 16) & 0xFF;
+ data_buf[data_len + 3] = (tmp_crc >> 24) & 0xFF;
- return 0;
+ return 0;
}
bool CUpgradeFBC::threadLoop()
{
- int file_handle = -1;
- int i = 0, tmp_flag = 0, cmd_len = 0, tmp_prog = 0, total_item = 0;
- int start_off = 0, end_off = 0, cur_off = 0, old_off = 0, rw_size = 0;
- int upgrade_version = 0, upgrade_flag = 0, upgrade_err_code = 0, upgrade_try_cnt = 0;
- int upgrade_pq_wb_flag = 0;
- unsigned char tmp_buf[128] = {0};
-
- if (mpObserver == NULL) {
- return false;
- }
-
- LOGD("%s, entering...\n", "TV");
-
- prctl(PR_SET_NAME, (unsigned long)"CUpgradeFBC thread loop");
-
- mState = STATE_RUNNING;
-
- LOGD("%s, upgrade mode = %d\n", __FUNCTION__, mUpgradeMode);
- if (mUpgradeMode != CC_UPGRADE_MODE_BOOT_MAIN && mUpgradeMode != CC_UPGRADE_MODE_BOOT &&
- mUpgradeMode != CC_UPGRADE_MODE_MAIN && mUpgradeMode != CC_UPGRADE_MODE_COMPACT_BOOT &&
- mUpgradeMode != CC_UPGRADE_MODE_ALL && mUpgradeMode != CC_UPGRADE_MODE_MAIN_PQ_WB &&
- mUpgradeMode != CC_UPGRADE_MODE_ALL_PQ_WB && mUpgradeMode != CC_UPGRADE_MODE_MAIN_WB &&
- mUpgradeMode != CC_UPGRADE_MODE_ALL_WB && mUpgradeMode != CC_UPGRADE_MODE_MAIN_PQ &&
- mUpgradeMode != CC_UPGRADE_MODE_ALL_PQ && mUpgradeMode != CC_UPGRADE_MODE_PQ_WB_ONLY &&
- mUpgradeMode != CC_UPGRADE_MODE_WB_ONLY && mUpgradeMode != CC_UPGRADE_MODE_PQ_ONLY &&
- mUpgradeMode != CC_UPGRADE_MODE_CUR_PQ_BIN && mUpgradeMode != CC_UPGRADE_MODE_BURN &&
- mUpgradeMode != CC_UPGRADE_MODE_DUMMY) {
- mState = STATE_ABORT;
- upgrade_err_code = ERR_NOT_SUPPORT_UPGRADE_MDOE;
- mpObserver->onUpgradeStatus(mState, upgrade_err_code);
- mCfbcIns->SetUpgradeFlag(0);
-
- return false;
- }
-
- if (mUpgradeBlockSize % 0x1000 != 0) {
- mState = STATE_ABORT;
- upgrade_err_code = ERR_NOT_CORRECT_UPGRADE_BLKSIZE;
- mpObserver->onUpgradeStatus(mState, upgrade_err_code);
- mCfbcIns->SetUpgradeFlag(0);
-
- return false;
- }
-
- struct stat tmp_st;
- stat(mFileName, &tmp_st);
- if (tmp_st.st_size == CC_FBC_V01_FILE_SIZE) {
- upgrade_version = CC_FBC_V01_00_VAL;
- mOPTotalSize = CC_UPGRADE_V01_ALL_LENGTH;
- mBinFileSize = CC_FBC_V01_FILE_SIZE;
- } else if (tmp_st.st_size == CC_FBC_V02_FILE_SIZE) {
- upgrade_version = CC_FBC_V02_00_VAL;
- mOPTotalSize = CC_UPGRADE_V02_ALL_LENGTH;
- mBinFileSize = CC_FBC_V02_FILE_SIZE;
- } else if (tmp_st.st_size == CC_FBC_V02_CUR_PQ_BIN_FILE_SIZE) {
- upgrade_version = CC_FBC_V02_01_VAL;
- mOPTotalSize = CC_UPGRADE_V02_ALL_LENGTH;
- mBinFileSize = CC_FBC_V02_CUR_PQ_BIN_FILE_SIZE;
- } else if (tmp_st.st_size == CC_FBC_V03_FILE_SIZE) {
- upgrade_version = CC_FBC_V03_00_VAL;
- mOPTotalSize = CC_UPGRADE_V03_ALL_LENGTH;
- mBinFileSize = CC_FBC_V03_FILE_SIZE;
- } else if (tmp_st.st_size == CC_FBC_V03_CUR_PQ_BIN_FILE_SIZE) {
- upgrade_version = CC_FBC_V03_01_VAL;
- mOPTotalSize = CC_UPGRADE_V03_ALL_LENGTH;
- mBinFileSize = CC_FBC_V03_CUR_PQ_BIN_FILE_SIZE;
- } else {
- upgrade_version = 0;
- mOPTotalSize = 0;
- mBinFileSize = 0;
- mState = STATE_ABORT;
- upgrade_err_code = ERR_BIN_FILE_SIZE;
- mpObserver->onUpgradeStatus(mState, upgrade_err_code);
- mCfbcIns->SetUpgradeFlag(0);
- return false;
- }
-
- //open upgrade source file and read it to temp buffer.
- file_handle = open(mFileName, O_RDONLY);
- if (file_handle < 0) {
- LOGE("%s, Can't Open file %s\n", __FUNCTION__, mFileName);
- mState = STATE_ABORT;
- upgrade_err_code = ERR_OPEN_BIN_FILE;
- mpObserver->onUpgradeStatus(mState, upgrade_err_code);
- mCfbcIns->SetUpgradeFlag(0);
- return false;
- }
-
- lseek(file_handle, 0, SEEK_SET);
-
- mBinFileBuf = new unsigned char[mOPTotalSize];
-
- memset(mBinFileBuf, 0, mOPTotalSize);
- rw_size = read(file_handle, mBinFileBuf, mBinFileSize);
- if (rw_size != mBinFileSize || rw_size <= 0) {
- LOGE("%s, read file %s error(%d, %d)\n", __FUNCTION__, mFileName, mBinFileSize, rw_size);
- mState = STATE_ABORT;
- upgrade_err_code = ERR_READ_BIN_FILE;
- mpObserver->onUpgradeStatus(mState, upgrade_err_code);
- mCfbcIns->SetUpgradeFlag(0);
-
- if (mBinFileBuf != NULL) {
- delete mBinFileBuf;
- mBinFileBuf = NULL;
- }
- return false;
- }
-
- close(file_handle);
- file_handle = -1;
-
- if (upgrade_version == CC_FBC_V02_00_VAL) {
- memcpy((void *)(mBinFileBuf + CC_UPGRADE_V02_BOOT_BAK_OFFSET), (void *)(mBinFileBuf + CC_UPGRADE_V02_BOOT_OFFSET), CC_UPGRADE_V02_BOOT_LEN);
- memcpy((void *)(mBinFileBuf + CC_UPGRADE_V02_MAIN_BAK_OFFSET), (void *)(mBinFileBuf + CC_UPGRADE_V02_MAIN_OFFSET), CC_UPGRADE_V02_MAIN_LEN);
- } else if (upgrade_version == CC_FBC_V02_01_VAL) {
- memcpy((void *)(mBinFileBuf + CC_UPGRADE_V02_CUR_PQ_OFFSET), (void *)(mBinFileBuf + 0), CC_FBC_V02_CUR_PQ_BIN_FILE_SIZE);
- } else if (upgrade_version == CC_FBC_V03_01_VAL) {
- memcpy((void *)(mBinFileBuf + CC_UPGRADE_V03_CUR_PQ_OFFSET), (void *)(mBinFileBuf + 0), CC_FBC_V03_CUR_PQ_BIN_FILE_SIZE);
- }
-
- //calculate start addr
- if (upgrade_version == CC_FBC_V01_00_VAL) {
- start_off = CC_UPGRADE_V01_MAIN_OFFSET;
- end_off = 0;
- if (mUpgradeMode == CC_UPGRADE_MODE_ALL || mUpgradeMode == CC_UPGRADE_MODE_BOOT_MAIN) {
- start_off = CC_UPGRADE_V01_BOOT_OFFSET;
- end_off = CC_UPGRADE_V01_BOOT_OFFSET + CC_UPGRADE_V01_ALL_LENGTH;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_BOOT) {
- start_off = CC_UPGRADE_V01_BOOT_OFFSET;
- end_off = CC_UPGRADE_V01_BOOT_OFFSET + CC_UPGRADE_V01_BOOT_LEN;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_MAIN) {
- start_off = CC_UPGRADE_V01_MAIN_OFFSET;
- end_off = CC_UPGRADE_V01_MAIN_OFFSET + CC_UPGRADE_V01_MAIN_LEN;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- }
- } else if (upgrade_version == CC_FBC_V02_00_VAL) {
- start_off = CC_UPGRADE_V02_MAIN_OFFSET;
- end_off = 0;
- if (mUpgradeMode == CC_UPGRADE_MODE_ALL || mUpgradeMode == CC_UPGRADE_MODE_ALL_PQ_WB ||
- mUpgradeMode == CC_UPGRADE_MODE_ALL_WB || mUpgradeMode == CC_UPGRADE_MODE_ALL_PQ) {
- start_off = CC_UPGRADE_V02_COMPACT_BOOT_OFFSET;
- end_off = CC_UPGRADE_V02_COMPACT_BOOT_OFFSET + CC_UPGRADE_V02_ALL_LENGTH;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_BOOT) {
- start_off = CC_UPGRADE_V02_BOOT_OFFSET;
- end_off = CC_UPGRADE_V02_BOOT_OFFSET + CC_UPGRADE_V02_BOOT_LEN;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_MAIN || mUpgradeMode == CC_UPGRADE_MODE_MAIN_PQ_WB ||
- mUpgradeMode == CC_UPGRADE_MODE_MAIN_WB || mUpgradeMode == CC_UPGRADE_MODE_MAIN_PQ ) {
- start_off = CC_UPGRADE_V02_MAIN_OFFSET;
- end_off = CC_UPGRADE_V02_MAIN_OFFSET + CC_UPGRADE_V02_MAIN_LEN;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_COMPACT_BOOT) {
- start_off = CC_UPGRADE_V02_COMPACT_BOOT_OFFSET;
- end_off = CC_UPGRADE_V02_COMPACT_BOOT_OFFSET + CC_UPGRADE_V02_COMPACT_BOOT_LEN;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_BOOT_MAIN) {
- start_off = CC_UPGRADE_V02_BOOT_OFFSET;
- end_off = CC_UPGRADE_V02_BOOT_OFFSET + CC_UPGRADE_V02_BOOT_LEN + CC_UPGRADE_V02_MAIN_LEN;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- }
- } else if (upgrade_version == CC_FBC_V02_01_VAL) {
- start_off = CC_UPGRADE_V02_CUR_PQ_OFFSET;
- end_off = 0;
- if (mUpgradeMode == CC_UPGRADE_MODE_CUR_PQ_BIN) {
- start_off = CC_UPGRADE_V02_CUR_PQ_OFFSET;
- end_off = CC_UPGRADE_V02_CUR_PQ_OFFSET + CC_FBC_V02_CUR_PQ_BIN_FILE_SIZE;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- }
- } else if (upgrade_version == CC_FBC_V03_00_VAL) {
- start_off = CC_UPGRADE_V03_MAIN_OFFSET;
- end_off = 0;
- if (mUpgradeMode == CC_UPGRADE_MODE_ALL || mUpgradeMode == CC_UPGRADE_MODE_ALL_PQ_WB ||
- mUpgradeMode == CC_UPGRADE_MODE_ALL_WB || mUpgradeMode == CC_UPGRADE_MODE_ALL_PQ) {
- start_off = CC_UPGRADE_V03_COMPACT_BOOT_OFFSET;
- end_off = CC_UPGRADE_V03_COMPACT_BOOT_OFFSET + CC_UPGRADE_V03_ALL_LENGTH;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_BOOT) {
- start_off = CC_UPGRADE_V03_BOOT_OFFSET;
- end_off = CC_UPGRADE_V03_BOOT_OFFSET + CC_UPGRADE_V03_BOOT_LEN;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_MAIN || mUpgradeMode == CC_UPGRADE_MODE_MAIN_PQ_WB ||
- mUpgradeMode == CC_UPGRADE_MODE_MAIN_WB || mUpgradeMode == CC_UPGRADE_MODE_MAIN_PQ ) {
- start_off = CC_UPGRADE_V03_MAIN_OFFSET;
- end_off = CC_UPGRADE_V03_MAIN_OFFSET + CC_UPGRADE_V03_MAIN_LEN;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_COMPACT_BOOT) {
- start_off = CC_UPGRADE_V03_COMPACT_BOOT_OFFSET;
- end_off = CC_UPGRADE_V03_COMPACT_BOOT_OFFSET + CC_UPGRADE_V03_COMPACT_BOOT_LEN;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_BOOT_MAIN) {
- start_off = CC_UPGRADE_V03_BOOT_OFFSET;
- end_off = CC_UPGRADE_V03_BOOT_OFFSET + CC_UPGRADE_V03_BOOT_LEN + CC_UPGRADE_V03_MAIN_LEN;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_BURN) {
- start_off = CC_UPGRADE_V03_COMPACT_BOOT_OFFSET;
- end_off = CC_UPGRADE_V03_COMPACT_BOOT_OFFSET + CC_FBC_V03_FILE_SIZE;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- }
- } else if (upgrade_version == CC_FBC_V03_01_VAL) {
- start_off = CC_UPGRADE_V03_CUR_PQ_OFFSET;
- end_off = 0;
- if (mUpgradeMode == CC_UPGRADE_MODE_CUR_PQ_BIN) {
- start_off = CC_UPGRADE_V03_CUR_PQ_OFFSET;
- end_off = CC_UPGRADE_V03_CUR_PQ_OFFSET + CC_FBC_V03_CUR_PQ_BIN_FILE_SIZE;
- total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
- }
- }
-
- //let's try set default pq & wb
- if (upgrade_version == CC_FBC_V02_00_VAL || upgrade_version == CC_FBC_V03_00_VAL) {
- if (mUpgradeMode == CC_UPGRADE_MODE_ALL_PQ_WB || mUpgradeMode == CC_UPGRADE_MODE_MAIN_PQ_WB ||
- mUpgradeMode == CC_UPGRADE_MODE_PQ_WB_ONLY) {
- mDataBuf[6] = 3;
- upgrade_pq_wb_flag = 1;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_MAIN_WB || mUpgradeMode == CC_UPGRADE_MODE_ALL_WB ||
- mUpgradeMode == CC_UPGRADE_MODE_WB_ONLY) {
- mDataBuf[6] = 2;
- upgrade_pq_wb_flag = 1;
- } else if (mUpgradeMode == CC_UPGRADE_MODE_MAIN_PQ || mUpgradeMode == CC_UPGRADE_MODE_ALL_PQ ||
- mUpgradeMode == CC_UPGRADE_MODE_PQ_ONLY) {
- mDataBuf[6] = 1;
- upgrade_pq_wb_flag = 1;
- } else {
- upgrade_pq_wb_flag = 0;
- }
-
- if (upgrade_pq_wb_flag == 1) {
- cmd_len = 7;
- mDataBuf[0] = 0x5A;
- mDataBuf[1] = 0x5A;
- mDataBuf[2] = cmd_len + 4;
- mDataBuf[3] = 0x00;
- mDataBuf[4] = 0x00;
- mDataBuf[5] = CMD_CLR_SETTINGS_DEFAULT;
-
- AddCRCToDataBuf(mDataBuf, cmd_len);
- if (mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, mDataBuf, cmd_len + 4, 0) <= 0) {
- mState = STATE_ABORT;
- upgrade_err_code = ERR_SERIAL_CONNECT;
- mpObserver->onUpgradeStatus(mState, upgrade_err_code);
- mCfbcIns->SetUpgradeFlag(0);
-
- if (mBinFileBuf != NULL) {
- delete mBinFileBuf;
- mBinFileBuf = NULL;
- }
- return false;
- }
-
- usleep(3000 * 1000);
-
- if (mUpgradeMode == CC_UPGRADE_MODE_PQ_WB_ONLY || mUpgradeMode == CC_UPGRADE_MODE_WB_ONLY ||
- mUpgradeMode == CC_UPGRADE_MODE_PQ_ONLY) {
- system("reboot");
- return false;
- }
- }
- }
-
- //send upgrade command
- cmd_len = 10;
- mDataBuf[0] = 0x5A;
- mDataBuf[1] = 0x5A;
- mDataBuf[2] = cmd_len + 4;
- mDataBuf[3] = 0x00;
- mDataBuf[4] = 0x00;
- mDataBuf[5] = 0x01;
- mDataBuf[6] = 0x88;
- mDataBuf[7] = 0x88;
- mDataBuf[8] = 0x88;
- mDataBuf[9] = 0x88;
- AddCRCToDataBuf(mDataBuf, cmd_len);
- if (mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, mDataBuf, cmd_len + 4, 0) <= 0) {
- mState = STATE_ABORT;
- upgrade_err_code = ERR_SERIAL_CONNECT;
- mpObserver->onUpgradeStatus(mState, upgrade_err_code);
- mCfbcIns->SetUpgradeFlag(0);
-
- if (mBinFileBuf != NULL) {
- delete mBinFileBuf;
- mBinFileBuf = NULL;
- }
- return false;
- }
-
- //waiting fbc restart
- usleep(5000 * 1000);
-
- if (mUpgradeMode == CC_UPGRADE_MODE_DUMMY) {
- //dummy test mode
-
- //wait 10 second
- usleep(10000 * 1000);
-
- //send reboot command to reboot fbc
- sprintf((char *)tmp_buf, "reboot\n");
- cmd_len = strlen((char *)tmp_buf);
- mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, tmp_buf, cmd_len, 0);
- usleep(400 * 1000);
-
- mpObserver->onUpgradeStatus(mState, 100);
-
- usleep(100 * 1000);
- mState = STATE_FINISHED;
- mpObserver->onUpgradeStatus(mState, 0);
-
- if (mBinFileBuf != NULL) {
- delete mBinFileBuf;
- mBinFileBuf = NULL;
- }
- return false;
- }
-
- tmp_prog += 1;
- mpObserver->onUpgradeStatus(mState, tmp_prog * 100 / total_item);
-
- cur_off = start_off;
- old_off = cur_off;
-
- upgrade_flag = 0;
- while (!exitPending()) { //requietexit() or requietexitWait() not call
- if (cur_off >= end_off) {
- upgrade_flag = 1;
- break;
- }
-
- //copy data from file temp buffer
- if (end_off - cur_off < mUpgradeBlockSize) {
- rw_size = end_off - cur_off;
- } else {
- rw_size = mUpgradeBlockSize;
- }
-
- memcpy(mDataBuf, mBinFileBuf + cur_off, rw_size);
-
- //send upgrade start addr and write size
- sprintf((char *)tmp_buf, "upgrade 0x%x 0x%x\n", cur_off, rw_size);
- LOGD("\n\n%s, %s\n", __FUNCTION__, tmp_buf);
- cmd_len = strlen((char *)tmp_buf);
- if (mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, tmp_buf, cmd_len, 0) <= 0) {
- mState = STATE_ABORT;
- upgrade_err_code = ERR_SERIAL_CONNECT;
- upgrade_flag = 0;
- break;
- }
- usleep(500 * 1000);
-
- //send upgrade data
- if (mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, mDataBuf, rw_size, 0) <= 0) {
- mState = STATE_ABORT;
- upgrade_err_code = ERR_SERIAL_CONNECT;
- upgrade_flag = 0;
- break;
- }
-
- //send upgrade data crc
- AddCRCToDataBuf(mDataBuf, rw_size);
- if (mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, mDataBuf + rw_size, 4, 0) <= 0) {
- mState = STATE_ABORT;
- upgrade_err_code = ERR_SERIAL_CONNECT;
- upgrade_flag = 0;
- break;
- }
-
- old_off = cur_off;
- cur_off += rw_size;
-
- //deal with fbc response
- tmp_flag = 0;
- memset(mDataBuf, 0, CC_UPGRADE_DATA_BUF_SIZE);
- rw_size = mCfbcIns->uartReadStream(mDataBuf, CC_UPGRADE_DATA_BUF_SIZE, 2000);
- for (i = 0; i < rw_size - 3; i++) {
- if ((0x5A == mDataBuf[i]) && (0x5A == mDataBuf[i + 1]) && (0x5A == mDataBuf[i + 2])) {
- LOGD("%s, fbc write data at 0x%x ok!\n", __FUNCTION__, old_off);
- tmp_flag = 1;
- break;
- }
- }
-
- if (tmp_flag == 0) {
- LOGE("%s, fbc write data at 0x%x error! rewrite!\n", __FUNCTION__, old_off);
- if (upgrade_try_cnt < 6) {
- cur_off = old_off;
- upgrade_try_cnt += 1;
-
- mpObserver->onUpgradeStatus(mState, ERR_DATA_CRC_ERROR);
- } else {
- LOGE("%s, we have rewrite more than %d times, abort.\n", __FUNCTION__, upgrade_try_cnt);
- mState = STATE_ABORT;
- upgrade_err_code = ERR_SERIAL_CONNECT;
- upgrade_flag = 0;
- break;
- }
- } else {
- tmp_prog += 1;
- upgrade_try_cnt = 0;
- }
-
- usleep(3000 * 1000);
-
- mpObserver->onUpgradeStatus(mState, tmp_prog * 100 / total_item);
- }
-
- if (mState == STATE_ABORT) {
- mpObserver->onUpgradeStatus(mState, upgrade_err_code);
- } else if (mState == STATE_RUNNING) {
- if (upgrade_flag == 1) {
- sprintf((char *)tmp_buf, "reboot\n");
- cmd_len = strlen((char *)tmp_buf);
- mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, tmp_buf, cmd_len, 0);
- usleep(400 * 1000);
-
- tmp_prog += 1;
- mpObserver->onUpgradeStatus(mState, tmp_prog * 100 / total_item);
-
- usleep(100 * 1000);
- mState = STATE_FINISHED;
- mpObserver->onUpgradeStatus(mState, 0);
- }
- } else {
- if (upgrade_flag == 1) {
- tmp_prog += 1;
- mpObserver->onUpgradeStatus(mState, tmp_prog * 100 / total_item);
- }
- }
-
- mState = STATE_STOPED;
-
- mCfbcIns->SetUpgradeFlag(0);
-
- if (mBinFileBuf != NULL) {
- delete mBinFileBuf;
- mBinFileBuf = NULL;
- }
-
- LOGD("%s, exiting...\n", "TV");
- system("reboot");
- //return true, run again, return false,not run.
- return false;
+ int file_handle = -1;
+ int i = 0, tmp_flag = 0, cmd_len = 0, tmp_prog = 0, total_item = 0;
+ int start_off = 0, end_off = 0, cur_off = 0, old_off = 0, rw_size = 0;
+ int upgrade_version = 0, upgrade_flag = 0, upgrade_err_code = 0, upgrade_try_cnt = 0;
+ int upgrade_pq_wb_flag = 0;
+ unsigned char tmp_buf[128] = {0};
+
+ if (mpObserver == NULL) {
+ return false;
+ }
+
+ LOGD("%s, entering...\n", "TV");
+
+ prctl(PR_SET_NAME, (unsigned long)"CUpgradeFBC thread loop");
+
+ mState = STATE_RUNNING;
+
+ LOGD("%s, upgrade mode = %d\n", __FUNCTION__, mUpgradeMode);
+ if (mUpgradeMode != CC_UPGRADE_MODE_BOOT_MAIN && mUpgradeMode != CC_UPGRADE_MODE_BOOT &&
+ mUpgradeMode != CC_UPGRADE_MODE_MAIN && mUpgradeMode != CC_UPGRADE_MODE_COMPACT_BOOT &&
+ mUpgradeMode != CC_UPGRADE_MODE_ALL && mUpgradeMode != CC_UPGRADE_MODE_MAIN_PQ_WB &&
+ mUpgradeMode != CC_UPGRADE_MODE_ALL_PQ_WB && mUpgradeMode != CC_UPGRADE_MODE_MAIN_WB &&
+ mUpgradeMode != CC_UPGRADE_MODE_ALL_WB && mUpgradeMode != CC_UPGRADE_MODE_MAIN_PQ &&
+ mUpgradeMode != CC_UPGRADE_MODE_ALL_PQ && mUpgradeMode != CC_UPGRADE_MODE_PQ_WB_ONLY &&
+ mUpgradeMode != CC_UPGRADE_MODE_WB_ONLY && mUpgradeMode != CC_UPGRADE_MODE_PQ_ONLY &&
+ mUpgradeMode != CC_UPGRADE_MODE_CUR_PQ_BIN && mUpgradeMode != CC_UPGRADE_MODE_BURN &&
+ mUpgradeMode != CC_UPGRADE_MODE_DUMMY) {
+ mState = STATE_ABORT;
+ upgrade_err_code = ERR_NOT_SUPPORT_UPGRADE_MDOE;
+ mpObserver->onUpgradeStatus(mState, upgrade_err_code);
+ mCfbcIns->SetUpgradeFlag(0);
+
+ return false;
+ }
+
+ if (mUpgradeBlockSize % 0x1000 != 0) {
+ mState = STATE_ABORT;
+ upgrade_err_code = ERR_NOT_CORRECT_UPGRADE_BLKSIZE;
+ mpObserver->onUpgradeStatus(mState, upgrade_err_code);
+ mCfbcIns->SetUpgradeFlag(0);
+
+ return false;
+ }
+
+ struct stat tmp_st;
+ stat(mFileName, &tmp_st);
+ if (tmp_st.st_size == CC_FBC_V01_FILE_SIZE) {
+ upgrade_version = CC_FBC_V01_00_VAL;
+ mOPTotalSize = CC_UPGRADE_V01_ALL_LENGTH;
+ mBinFileSize = CC_FBC_V01_FILE_SIZE;
+ } else if (tmp_st.st_size == CC_FBC_V02_FILE_SIZE) {
+ upgrade_version = CC_FBC_V02_00_VAL;
+ mOPTotalSize = CC_UPGRADE_V02_ALL_LENGTH;
+ mBinFileSize = CC_FBC_V02_FILE_SIZE;
+ } else if (tmp_st.st_size == CC_FBC_V02_CUR_PQ_BIN_FILE_SIZE) {
+ upgrade_version = CC_FBC_V02_01_VAL;
+ mOPTotalSize = CC_UPGRADE_V02_ALL_LENGTH;
+ mBinFileSize = CC_FBC_V02_CUR_PQ_BIN_FILE_SIZE;
+ } else if (tmp_st.st_size == CC_FBC_V03_FILE_SIZE) {
+ upgrade_version = CC_FBC_V03_00_VAL;
+ mOPTotalSize = CC_UPGRADE_V03_ALL_LENGTH;
+ mBinFileSize = CC_FBC_V03_FILE_SIZE;
+ } else if (tmp_st.st_size == CC_FBC_V03_CUR_PQ_BIN_FILE_SIZE) {
+ upgrade_version = CC_FBC_V03_01_VAL;
+ mOPTotalSize = CC_UPGRADE_V03_ALL_LENGTH;
+ mBinFileSize = CC_FBC_V03_CUR_PQ_BIN_FILE_SIZE;
+ } else {
+ upgrade_version = 0;
+ mOPTotalSize = 0;
+ mBinFileSize = 0;
+ mState = STATE_ABORT;
+ upgrade_err_code = ERR_BIN_FILE_SIZE;
+ mpObserver->onUpgradeStatus(mState, upgrade_err_code);
+ mCfbcIns->SetUpgradeFlag(0);
+ return false;
+ }
+
+ //open upgrade source file and read it to temp buffer.
+ file_handle = open(mFileName, O_RDONLY);
+ if (file_handle < 0) {
+ LOGE("%s, Can't Open file %s\n", __FUNCTION__, mFileName);
+ mState = STATE_ABORT;
+ upgrade_err_code = ERR_OPEN_BIN_FILE;
+ mpObserver->onUpgradeStatus(mState, upgrade_err_code);
+ mCfbcIns->SetUpgradeFlag(0);
+ return false;
+ }
+
+ lseek(file_handle, 0, SEEK_SET);
+
+ mBinFileBuf = new unsigned char[mOPTotalSize];
+
+ memset(mBinFileBuf, 0, mOPTotalSize);
+ rw_size = read(file_handle, mBinFileBuf, mBinFileSize);
+ if (rw_size != mBinFileSize || rw_size <= 0) {
+ LOGE("%s, read file %s error(%d, %d)\n", __FUNCTION__, mFileName, mBinFileSize, rw_size);
+ mState = STATE_ABORT;
+ upgrade_err_code = ERR_READ_BIN_FILE;
+ mpObserver->onUpgradeStatus(mState, upgrade_err_code);
+ mCfbcIns->SetUpgradeFlag(0);
+
+ if (mBinFileBuf != NULL) {
+ delete mBinFileBuf;
+ mBinFileBuf = NULL;
+ }
+ return false;
+ }
+
+ close(file_handle);
+ file_handle = -1;
+
+ if (upgrade_version == CC_FBC_V02_00_VAL) {
+ memcpy((void *)(mBinFileBuf + CC_UPGRADE_V02_BOOT_BAK_OFFSET), (void *)(mBinFileBuf + CC_UPGRADE_V02_BOOT_OFFSET), CC_UPGRADE_V02_BOOT_LEN);
+ memcpy((void *)(mBinFileBuf + CC_UPGRADE_V02_MAIN_BAK_OFFSET), (void *)(mBinFileBuf + CC_UPGRADE_V02_MAIN_OFFSET), CC_UPGRADE_V02_MAIN_LEN);
+ } else if (upgrade_version == CC_FBC_V02_01_VAL) {
+ memcpy((void *)(mBinFileBuf + CC_UPGRADE_V02_CUR_PQ_OFFSET), (void *)(mBinFileBuf + 0), CC_FBC_V02_CUR_PQ_BIN_FILE_SIZE);
+ } else if (upgrade_version == CC_FBC_V03_01_VAL) {
+ memcpy((void *)(mBinFileBuf + CC_UPGRADE_V03_CUR_PQ_OFFSET), (void *)(mBinFileBuf + 0), CC_FBC_V03_CUR_PQ_BIN_FILE_SIZE);
+ }
+
+ //calculate start addr
+ if (upgrade_version == CC_FBC_V01_00_VAL) {
+ start_off = CC_UPGRADE_V01_MAIN_OFFSET;
+ end_off = 0;
+ if (mUpgradeMode == CC_UPGRADE_MODE_ALL || mUpgradeMode == CC_UPGRADE_MODE_BOOT_MAIN) {
+ start_off = CC_UPGRADE_V01_BOOT_OFFSET;
+ end_off = CC_UPGRADE_V01_BOOT_OFFSET + CC_UPGRADE_V01_ALL_LENGTH;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_BOOT) {
+ start_off = CC_UPGRADE_V01_BOOT_OFFSET;
+ end_off = CC_UPGRADE_V01_BOOT_OFFSET + CC_UPGRADE_V01_BOOT_LEN;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_MAIN) {
+ start_off = CC_UPGRADE_V01_MAIN_OFFSET;
+ end_off = CC_UPGRADE_V01_MAIN_OFFSET + CC_UPGRADE_V01_MAIN_LEN;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ }
+ } else if (upgrade_version == CC_FBC_V02_00_VAL) {
+ start_off = CC_UPGRADE_V02_MAIN_OFFSET;
+ end_off = 0;
+ if (mUpgradeMode == CC_UPGRADE_MODE_ALL || mUpgradeMode == CC_UPGRADE_MODE_ALL_PQ_WB ||
+ mUpgradeMode == CC_UPGRADE_MODE_ALL_WB || mUpgradeMode == CC_UPGRADE_MODE_ALL_PQ) {
+ start_off = CC_UPGRADE_V02_COMPACT_BOOT_OFFSET;
+ end_off = CC_UPGRADE_V02_COMPACT_BOOT_OFFSET + CC_UPGRADE_V02_ALL_LENGTH;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_BOOT) {
+ start_off = CC_UPGRADE_V02_BOOT_OFFSET;
+ end_off = CC_UPGRADE_V02_BOOT_OFFSET + CC_UPGRADE_V02_BOOT_LEN;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_MAIN || mUpgradeMode == CC_UPGRADE_MODE_MAIN_PQ_WB ||
+ mUpgradeMode == CC_UPGRADE_MODE_MAIN_WB || mUpgradeMode == CC_UPGRADE_MODE_MAIN_PQ ) {
+ start_off = CC_UPGRADE_V02_MAIN_OFFSET;
+ end_off = CC_UPGRADE_V02_MAIN_OFFSET + CC_UPGRADE_V02_MAIN_LEN;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_COMPACT_BOOT) {
+ start_off = CC_UPGRADE_V02_COMPACT_BOOT_OFFSET;
+ end_off = CC_UPGRADE_V02_COMPACT_BOOT_OFFSET + CC_UPGRADE_V02_COMPACT_BOOT_LEN;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_BOOT_MAIN) {
+ start_off = CC_UPGRADE_V02_BOOT_OFFSET;
+ end_off = CC_UPGRADE_V02_BOOT_OFFSET + CC_UPGRADE_V02_BOOT_LEN + CC_UPGRADE_V02_MAIN_LEN;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ }
+ } else if (upgrade_version == CC_FBC_V02_01_VAL) {
+ start_off = CC_UPGRADE_V02_CUR_PQ_OFFSET;
+ end_off = 0;
+ if (mUpgradeMode == CC_UPGRADE_MODE_CUR_PQ_BIN) {
+ start_off = CC_UPGRADE_V02_CUR_PQ_OFFSET;
+ end_off = CC_UPGRADE_V02_CUR_PQ_OFFSET + CC_FBC_V02_CUR_PQ_BIN_FILE_SIZE;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ }
+ } else if (upgrade_version == CC_FBC_V03_00_VAL) {
+ start_off = CC_UPGRADE_V03_MAIN_OFFSET;
+ end_off = 0;
+ if (mUpgradeMode == CC_UPGRADE_MODE_ALL || mUpgradeMode == CC_UPGRADE_MODE_ALL_PQ_WB ||
+ mUpgradeMode == CC_UPGRADE_MODE_ALL_WB || mUpgradeMode == CC_UPGRADE_MODE_ALL_PQ) {
+ start_off = CC_UPGRADE_V03_COMPACT_BOOT_OFFSET;
+ end_off = CC_UPGRADE_V03_COMPACT_BOOT_OFFSET + CC_UPGRADE_V03_ALL_LENGTH;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_BOOT) {
+ start_off = CC_UPGRADE_V03_BOOT_OFFSET;
+ end_off = CC_UPGRADE_V03_BOOT_OFFSET + CC_UPGRADE_V03_BOOT_LEN;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_MAIN || mUpgradeMode == CC_UPGRADE_MODE_MAIN_PQ_WB ||
+ mUpgradeMode == CC_UPGRADE_MODE_MAIN_WB || mUpgradeMode == CC_UPGRADE_MODE_MAIN_PQ ) {
+ start_off = CC_UPGRADE_V03_MAIN_OFFSET;
+ end_off = CC_UPGRADE_V03_MAIN_OFFSET + CC_UPGRADE_V03_MAIN_LEN;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_COMPACT_BOOT) {
+ start_off = CC_UPGRADE_V03_COMPACT_BOOT_OFFSET;
+ end_off = CC_UPGRADE_V03_COMPACT_BOOT_OFFSET + CC_UPGRADE_V03_COMPACT_BOOT_LEN;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_BOOT_MAIN) {
+ start_off = CC_UPGRADE_V03_BOOT_OFFSET;
+ end_off = CC_UPGRADE_V03_BOOT_OFFSET + CC_UPGRADE_V03_BOOT_LEN + CC_UPGRADE_V03_MAIN_LEN;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_BURN) {
+ start_off = CC_UPGRADE_V03_COMPACT_BOOT_OFFSET;
+ end_off = CC_UPGRADE_V03_COMPACT_BOOT_OFFSET + CC_FBC_V03_FILE_SIZE;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ }
+ } else if (upgrade_version == CC_FBC_V03_01_VAL) {
+ start_off = CC_UPGRADE_V03_CUR_PQ_OFFSET;
+ end_off = 0;
+ if (mUpgradeMode == CC_UPGRADE_MODE_CUR_PQ_BIN) {
+ start_off = CC_UPGRADE_V03_CUR_PQ_OFFSET;
+ end_off = CC_UPGRADE_V03_CUR_PQ_OFFSET + CC_FBC_V03_CUR_PQ_BIN_FILE_SIZE;
+ total_item = (end_off - start_off) / mUpgradeBlockSize + 2;
+ }
+ }
+
+ //let's try set default pq & wb
+ if (upgrade_version == CC_FBC_V02_00_VAL || upgrade_version == CC_FBC_V03_00_VAL) {
+ if (mUpgradeMode == CC_UPGRADE_MODE_ALL_PQ_WB || mUpgradeMode == CC_UPGRADE_MODE_MAIN_PQ_WB ||
+ mUpgradeMode == CC_UPGRADE_MODE_PQ_WB_ONLY) {
+ mDataBuf[6] = 3;
+ upgrade_pq_wb_flag = 1;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_MAIN_WB || mUpgradeMode == CC_UPGRADE_MODE_ALL_WB ||
+ mUpgradeMode == CC_UPGRADE_MODE_WB_ONLY) {
+ mDataBuf[6] = 2;
+ upgrade_pq_wb_flag = 1;
+ } else if (mUpgradeMode == CC_UPGRADE_MODE_MAIN_PQ || mUpgradeMode == CC_UPGRADE_MODE_ALL_PQ ||
+ mUpgradeMode == CC_UPGRADE_MODE_PQ_ONLY) {
+ mDataBuf[6] = 1;
+ upgrade_pq_wb_flag = 1;
+ } else {
+ upgrade_pq_wb_flag = 0;
+ }
+
+ if (upgrade_pq_wb_flag == 1) {
+ cmd_len = 7;
+ mDataBuf[0] = 0x5A;
+ mDataBuf[1] = 0x5A;
+ mDataBuf[2] = cmd_len + 4;
+ mDataBuf[3] = 0x00;
+ mDataBuf[4] = 0x00;
+ mDataBuf[5] = CMD_CLR_SETTINGS_DEFAULT;
+
+ AddCRCToDataBuf(mDataBuf, cmd_len);
+ if (mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, mDataBuf, cmd_len + 4, 0) <= 0) {
+ mState = STATE_ABORT;
+ upgrade_err_code = ERR_SERIAL_CONNECT;
+ mpObserver->onUpgradeStatus(mState, upgrade_err_code);
+ mCfbcIns->SetUpgradeFlag(0);
+
+ if (mBinFileBuf != NULL) {
+ delete mBinFileBuf;
+ mBinFileBuf = NULL;
+ }
+ return false;
+ }
+
+ usleep(3000 * 1000);
+
+ if (mUpgradeMode == CC_UPGRADE_MODE_PQ_WB_ONLY || mUpgradeMode == CC_UPGRADE_MODE_WB_ONLY ||
+ mUpgradeMode == CC_UPGRADE_MODE_PQ_ONLY) {
+ system("reboot");
+ return false;
+ }
+ }
+ }
+
+ //send upgrade command
+ cmd_len = 10;
+ mDataBuf[0] = 0x5A;
+ mDataBuf[1] = 0x5A;
+ mDataBuf[2] = cmd_len + 4;
+ mDataBuf[3] = 0x00;
+ mDataBuf[4] = 0x00;
+ mDataBuf[5] = 0x01;
+ mDataBuf[6] = 0x88;
+ mDataBuf[7] = 0x88;
+ mDataBuf[8] = 0x88;
+ mDataBuf[9] = 0x88;
+ AddCRCToDataBuf(mDataBuf, cmd_len);
+ if (mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, mDataBuf, cmd_len + 4, 0) <= 0) {
+ mState = STATE_ABORT;
+ upgrade_err_code = ERR_SERIAL_CONNECT;
+ mpObserver->onUpgradeStatus(mState, upgrade_err_code);
+ mCfbcIns->SetUpgradeFlag(0);
+
+ if (mBinFileBuf != NULL) {
+ delete mBinFileBuf;
+ mBinFileBuf = NULL;
+ }
+ return false;
+ }
+
+ //waiting fbc restart
+ usleep(5000 * 1000);
+
+ if (mUpgradeMode == CC_UPGRADE_MODE_DUMMY) {
+ //dummy test mode
+
+ //wait 10 second
+ usleep(10000 * 1000);
+
+ //send reboot command to reboot fbc
+ sprintf((char *)tmp_buf, "reboot\n");
+ cmd_len = strlen((char *)tmp_buf);
+ mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, tmp_buf, cmd_len, 0);
+ usleep(400 * 1000);
+
+ mpObserver->onUpgradeStatus(mState, 100);
+
+ usleep(100 * 1000);
+ mState = STATE_FINISHED;
+ mpObserver->onUpgradeStatus(mState, 0);
+
+ if (mBinFileBuf != NULL) {
+ delete mBinFileBuf;
+ mBinFileBuf = NULL;
+ }
+ return false;
+ }
+
+ tmp_prog += 1;
+ mpObserver->onUpgradeStatus(mState, tmp_prog * 100 / total_item);
+
+ cur_off = start_off;
+ old_off = cur_off;
+
+ upgrade_flag = 0;
+ while (!exitPending()) { //requietexit() or requietexitWait() not call
+ if (cur_off >= end_off) {
+ upgrade_flag = 1;
+ break;
+ }
+
+ //copy data from file temp buffer
+ if (end_off - cur_off < mUpgradeBlockSize) {
+ rw_size = end_off - cur_off;
+ } else {
+ rw_size = mUpgradeBlockSize;
+ }
+
+ memcpy(mDataBuf, mBinFileBuf + cur_off, rw_size);
+
+ //send upgrade start addr and write size
+ sprintf((char *)tmp_buf, "upgrade 0x%x 0x%x\n", cur_off, rw_size);
+ LOGD("\n\n%s, %s\n", __FUNCTION__, tmp_buf);
+ cmd_len = strlen((char *)tmp_buf);
+ if (mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, tmp_buf, cmd_len, 0) <= 0) {
+ mState = STATE_ABORT;
+ upgrade_err_code = ERR_SERIAL_CONNECT;
+ upgrade_flag = 0;
+ break;
+ }
+ usleep(500 * 1000);
+
+ //send upgrade data
+ if (mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, mDataBuf, rw_size, 0) <= 0) {
+ mState = STATE_ABORT;
+ upgrade_err_code = ERR_SERIAL_CONNECT;
+ upgrade_flag = 0;
+ break;
+ }
+
+ //send upgrade data crc
+ AddCRCToDataBuf(mDataBuf, rw_size);
+ if (mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, mDataBuf + rw_size, 4, 0) <= 0) {
+ mState = STATE_ABORT;
+ upgrade_err_code = ERR_SERIAL_CONNECT;
+ upgrade_flag = 0;
+ break;
+ }
+
+ old_off = cur_off;
+ cur_off += rw_size;
+
+ //deal with fbc response
+ tmp_flag = 0;
+ memset(mDataBuf, 0, CC_UPGRADE_DATA_BUF_SIZE);
+ rw_size = mCfbcIns->uartReadStream(mDataBuf, CC_UPGRADE_DATA_BUF_SIZE, 2000);
+ for(i = 0; i < rw_size - 3; i++) {
+ if((0x5A == mDataBuf[i]) && (0x5A == mDataBuf[i + 1]) && (0x5A == mDataBuf[i + 2])) {
+ LOGD("%s, fbc write data at 0x%x ok!\n", __FUNCTION__, old_off);
+ tmp_flag = 1;
+ break;
+ }
+ }
+
+ if (tmp_flag == 0) {
+ LOGE("%s, fbc write data at 0x%x error! rewrite!\n", __FUNCTION__, old_off);
+ if (upgrade_try_cnt < 6) {
+ cur_off = old_off;
+ upgrade_try_cnt += 1;
+
+ mpObserver->onUpgradeStatus(mState, ERR_DATA_CRC_ERROR);
+ } else {
+ LOGE("%s, we have rewrite more than %d times, abort.\n", __FUNCTION__, upgrade_try_cnt);
+ mState = STATE_ABORT;
+ upgrade_err_code = ERR_SERIAL_CONNECT;
+ upgrade_flag = 0;
+ break;
+ }
+ } else {
+ tmp_prog += 1;
+ upgrade_try_cnt = 0;
+ }
+
+ usleep(3000 * 1000);
+
+ mpObserver->onUpgradeStatus(mState, tmp_prog * 100 / total_item);
+ }
+
+ if (mState == STATE_ABORT) {
+ mpObserver->onUpgradeStatus(mState, upgrade_err_code);
+ } else if (mState == STATE_RUNNING) {
+ if (upgrade_flag == 1) {
+ sprintf((char *)tmp_buf, "reboot\n");
+ cmd_len = strlen((char *)tmp_buf);
+ mCfbcIns->sendDataOneway(COMM_DEV_SERIAL, tmp_buf, cmd_len, 0);
+ usleep(400 * 1000);
+
+ tmp_prog += 1;
+ mpObserver->onUpgradeStatus(mState, tmp_prog * 100 / total_item);
+
+ usleep(100 * 1000);
+ mState = STATE_FINISHED;
+ mpObserver->onUpgradeStatus(mState, 0);
+ }
+ } else {
+ if (upgrade_flag == 1) {
+ tmp_prog += 1;
+ mpObserver->onUpgradeStatus(mState, tmp_prog * 100 / total_item);
+ }
+ }
+
+ mState = STATE_STOPED;
+
+ mCfbcIns->SetUpgradeFlag(0);
+
+ if (mBinFileBuf != NULL) {
+ delete mBinFileBuf;
+ mBinFileBuf = NULL;
+ }
+
+ LOGD("%s, exiting...\n", "TV");
+ system("reboot");
+ //return true, run again, return false,not run.
+ return false;
}
diff --git a/tvapi/libtv/tv/CUpgradeFBC.h b/tvapi/libtv/tv/CUpgradeFBC.h
index 7c85e07..e7864a8 100644
--- a/tvapi/libtv/tv/CUpgradeFBC.h
+++ b/tvapi/libtv/tv/CUpgradeFBC.h
@@ -1,143 +1,141 @@
-#ifndef __TV_UPGRADE_FBC_H__
-#define __TV_UPGRADE_FBC_H__
-
-#include "CFbcCommunication.h"
-#include "../tvutils/CThread.h"
-
-#define CC_FBC_V01_00_VAL (0x10000000)
-#define CC_FBC_V02_00_VAL (0x20000000)
-#define CC_FBC_V02_01_VAL (0x20000001)
-#define CC_FBC_V03_00_VAL (0x30000000)
-#define CC_FBC_V03_01_VAL (0x30000001)
-
-#define CC_FBC_V01_FILE_SIZE (655360)
-#define CC_FBC_V02_FILE_SIZE (786432)
-#define CC_FBC_V02_CUR_PQ_BIN_FILE_SIZE (0xB000)
-#define CC_FBC_V03_FILE_SIZE (2097152)
-#define CC_FBC_V03_CUR_PQ_BIN_FILE_SIZE (0xB000)
-
-#define CC_UPGRADE_MAX_BLOCK_LEN (0x10000)
-#define CC_UPGRADE_DATA_BUF_SIZE (CC_UPGRADE_MAX_BLOCK_LEN + 4)
-
-#define CC_UPGRADE_MODE_BOOT_MAIN (0)
-#define CC_UPGRADE_MODE_BOOT (1)
-#define CC_UPGRADE_MODE_MAIN (2)
-#define CC_UPGRADE_MODE_COMPACT_BOOT (3)
-#define CC_UPGRADE_MODE_ALL (4)
-
-#define CC_UPGRADE_MODE_MAIN_PQ_WB (5)
-#define CC_UPGRADE_MODE_ALL_PQ_WB (6)
-#define CC_UPGRADE_MODE_MAIN_WB (7)
-#define CC_UPGRADE_MODE_ALL_WB (8)
-#define CC_UPGRADE_MODE_MAIN_PQ (9)
-#define CC_UPGRADE_MODE_ALL_PQ (10)
-
-#define CC_UPGRADE_MODE_PQ_WB_ONLY (11)
-#define CC_UPGRADE_MODE_WB_ONLY (12)
-#define CC_UPGRADE_MODE_PQ_ONLY (13)
-
-#define CC_UPGRADE_MODE_CUR_PQ_BIN (14)
-#define CC_UPGRADE_MODE_ALL_PQ_BIN (15)
-
-#define CC_UPGRADE_MODE_BURN (16)
-
-#define CC_UPGRADE_MODE_DUMMY (17)
-
-#define CC_UPGRADE_V01_BOOT_OFFSET (0x0)
-#define CC_UPGRADE_V01_BOOT_LEN (0x20000)
-#define CC_UPGRADE_V01_MAIN_OFFSET (0x20000)
-#define CC_UPGRADE_V01_MAIN_LEN (CC_FBC_V01_FILE_SIZE - CC_UPGRADE_V01_MAIN_OFFSET)
-#define CC_UPGRADE_V01_ALL_LENGTH (CC_FBC_V01_FILE_SIZE)
-
-#define CC_UPGRADE_V02_COMPACT_BOOT_OFFSET (0x0)
-#define CC_UPGRADE_V02_COMPACT_BOOT_LEN (0x10000)
-#define CC_UPGRADE_V02_BOOT_OFFSET (0x10000)
-#define CC_UPGRADE_V02_BOOT_LEN (0x30000)
-#define CC_UPGRADE_V02_MAIN_OFFSET (0x40000)
-#define CC_UPGRADE_V02_MAIN_LEN (0x80000)
-#define CC_UPGRADE_V02_BOOT_BAK_OFFSET (0xC0000)
-#define CC_UPGRADE_V02_BOOT_BAK_LEN (0x30000)
-#define CC_UPGRADE_V02_MAIN_BAK_OFFSET (0xF0000)
-#define CC_UPGRADE_V02_MAIN_BAK_LEN (0x80000)
-#define CC_UPGRADE_V02_ALL_LENGTH (0x170000)
-
-#define CC_UPGRADE_V02_CUR_PQ_OFFSET (0xAF000)
-
-#define CC_UPGRADE_V03_COMPACT_BOOT_OFFSET (CC_UPGRADE_V02_COMPACT_BOOT_OFFSET)
-#define CC_UPGRADE_V03_COMPACT_BOOT_LEN (CC_UPGRADE_V02_COMPACT_BOOT_LEN)
-#define CC_UPGRADE_V03_BOOT_OFFSET (CC_UPGRADE_V02_BOOT_OFFSET)
-#define CC_UPGRADE_V03_BOOT_LEN (CC_UPGRADE_V02_BOOT_LEN)
-#define CC_UPGRADE_V03_MAIN_OFFSET (CC_UPGRADE_V02_MAIN_OFFSET)
-#define CC_UPGRADE_V03_MAIN_LEN (CC_UPGRADE_V02_MAIN_LEN)
-#define CC_UPGRADE_V03_BOOT_BAK_OFFSET (CC_UPGRADE_V02_BOOT_BAK_OFFSET)
-#define CC_UPGRADE_V03_BOOT_BAK_LEN (CC_UPGRADE_V02_BOOT_BAK_LEN)
-#define CC_UPGRADE_V03_MAIN_BAK_OFFSET (CC_UPGRADE_V02_MAIN_BAK_OFFSET)
-#define CC_UPGRADE_V03_MAIN_BAK_LEN (CC_UPGRADE_V02_MAIN_BAK_LEN)
-#define CC_UPGRADE_V03_PROTECT_DATA_START (0x1FF000)
-#define CC_UPGRADE_V03_PROTECT_DATA_LEN (0x1000)
-#define CC_UPGRADE_V03_ALL_LENGTH (CC_UPGRADE_V03_PROTECT_DATA_START)
-
-#define CC_UPGRADE_V03_CUR_PQ_OFFSET (CC_UPGRADE_V02_CUR_PQ_OFFSET)
-
-
-class CUpgradeFBC: public CThread
-{
-public:
- CUpgradeFBC();
- ~CUpgradeFBC();
-
- int start();
- int stop();
- int GetUpgradeFBCProgress();
- int SetUpgradeFileName(char *file_name);
- int SetUpgradeFileSize(int file_size);
- int SetUpgradeBlockSize(int block_size);
- int SetUpgradeMode(int mode);
-
- class IUpgradeFBCObserver
- {
- public:
- IUpgradeFBCObserver() {};
- virtual ~IUpgradeFBCObserver() {};
- virtual void onUpgradeStatus(int state, int param) {};
- };
- void setObserver(IUpgradeFBCObserver *pOb)
- {
- mpObserver = pOb;
- };
-
-private:
- bool threadLoop();
-
- int AddCRCToDataBuf(unsigned char data_buf[], int data_len);
-
- int mState;
- int mUpgradeMode;
- int mOPTotalSize;
- int mBinFileSize;
- int mUpgradeBlockSize;
- unsigned char *mBinFileBuf;
- char mFileName[256];
- unsigned char mDataBuf[CC_UPGRADE_DATA_BUF_SIZE];
- IUpgradeFBCObserver *mpObserver;
- CFbcCommunication *mCfbcIns;
-
- enum UpgradeState {
- STATE_STOPED = 0,
- STATE_RUNNING,
- STATE_FINISHED,
- STATE_ABORT,
- };
-
- enum FBCUpgradeErrorCode {
- ERR_SERIAL_CONNECT = -1,
- ERR_OPEN_BIN_FILE = -2,
- ERR_BIN_FILE_SIZE = -3,
- ERR_READ_BIN_FILE = -4,
- ERR_NOT_SUPPORT_UPGRADE_MDOE = -5,
- ERR_NOT_CORRECT_UPGRADE_BLKSIZE = -6,
- ERR_DATA_CRC_ERROR = -7,
- };
-};
-
-#endif //__TV_UPGRADE_FBC_H__
+#ifndef __TV_UPGRADE_FBC_H__
+#define __TV_UPGRADE_FBC_H__
+
+#include "CFbcCommunication.h"
+#include "../tvutils/CThread.h"
+
+#define CC_FBC_V01_00_VAL (0x10000000)
+#define CC_FBC_V02_00_VAL (0x20000000)
+#define CC_FBC_V02_01_VAL (0x20000001)
+#define CC_FBC_V03_00_VAL (0x30000000)
+#define CC_FBC_V03_01_VAL (0x30000001)
+
+#define CC_FBC_V01_FILE_SIZE (655360)
+#define CC_FBC_V02_FILE_SIZE (786432)
+#define CC_FBC_V02_CUR_PQ_BIN_FILE_SIZE (0xB000)
+#define CC_FBC_V03_FILE_SIZE (2097152)
+#define CC_FBC_V03_CUR_PQ_BIN_FILE_SIZE (0xB000)
+
+#define CC_UPGRADE_MAX_BLOCK_LEN (0x10000)
+#define CC_UPGRADE_DATA_BUF_SIZE (CC_UPGRADE_MAX_BLOCK_LEN + 4)
+
+#define CC_UPGRADE_MODE_BOOT_MAIN (0)
+#define CC_UPGRADE_MODE_BOOT (1)
+#define CC_UPGRADE_MODE_MAIN (2)
+#define CC_UPGRADE_MODE_COMPACT_BOOT (3)
+#define CC_UPGRADE_MODE_ALL (4)
+
+#define CC_UPGRADE_MODE_MAIN_PQ_WB (5)
+#define CC_UPGRADE_MODE_ALL_PQ_WB (6)
+#define CC_UPGRADE_MODE_MAIN_WB (7)
+#define CC_UPGRADE_MODE_ALL_WB (8)
+#define CC_UPGRADE_MODE_MAIN_PQ (9)
+#define CC_UPGRADE_MODE_ALL_PQ (10)
+
+#define CC_UPGRADE_MODE_PQ_WB_ONLY (11)
+#define CC_UPGRADE_MODE_WB_ONLY (12)
+#define CC_UPGRADE_MODE_PQ_ONLY (13)
+
+#define CC_UPGRADE_MODE_CUR_PQ_BIN (14)
+#define CC_UPGRADE_MODE_ALL_PQ_BIN (15)
+
+#define CC_UPGRADE_MODE_BURN (16)
+
+#define CC_UPGRADE_MODE_DUMMY (17)
+
+#define CC_UPGRADE_V01_BOOT_OFFSET (0x0)
+#define CC_UPGRADE_V01_BOOT_LEN (0x20000)
+#define CC_UPGRADE_V01_MAIN_OFFSET (0x20000)
+#define CC_UPGRADE_V01_MAIN_LEN (CC_FBC_V01_FILE_SIZE - CC_UPGRADE_V01_MAIN_OFFSET)
+#define CC_UPGRADE_V01_ALL_LENGTH (CC_FBC_V01_FILE_SIZE)
+
+#define CC_UPGRADE_V02_COMPACT_BOOT_OFFSET (0x0)
+#define CC_UPGRADE_V02_COMPACT_BOOT_LEN (0x10000)
+#define CC_UPGRADE_V02_BOOT_OFFSET (0x10000)
+#define CC_UPGRADE_V02_BOOT_LEN (0x30000)
+#define CC_UPGRADE_V02_MAIN_OFFSET (0x40000)
+#define CC_UPGRADE_V02_MAIN_LEN (0x80000)
+#define CC_UPGRADE_V02_BOOT_BAK_OFFSET (0xC0000)
+#define CC_UPGRADE_V02_BOOT_BAK_LEN (0x30000)
+#define CC_UPGRADE_V02_MAIN_BAK_OFFSET (0xF0000)
+#define CC_UPGRADE_V02_MAIN_BAK_LEN (0x80000)
+#define CC_UPGRADE_V02_ALL_LENGTH (0x170000)
+
+#define CC_UPGRADE_V02_CUR_PQ_OFFSET (0xAF000)
+
+#define CC_UPGRADE_V03_COMPACT_BOOT_OFFSET (CC_UPGRADE_V02_COMPACT_BOOT_OFFSET)
+#define CC_UPGRADE_V03_COMPACT_BOOT_LEN (CC_UPGRADE_V02_COMPACT_BOOT_LEN)
+#define CC_UPGRADE_V03_BOOT_OFFSET (CC_UPGRADE_V02_BOOT_OFFSET)
+#define CC_UPGRADE_V03_BOOT_LEN (CC_UPGRADE_V02_BOOT_LEN)
+#define CC_UPGRADE_V03_MAIN_OFFSET (CC_UPGRADE_V02_MAIN_OFFSET)
+#define CC_UPGRADE_V03_MAIN_LEN (CC_UPGRADE_V02_MAIN_LEN)
+#define CC_UPGRADE_V03_BOOT_BAK_OFFSET (CC_UPGRADE_V02_BOOT_BAK_OFFSET)
+#define CC_UPGRADE_V03_BOOT_BAK_LEN (CC_UPGRADE_V02_BOOT_BAK_LEN)
+#define CC_UPGRADE_V03_MAIN_BAK_OFFSET (CC_UPGRADE_V02_MAIN_BAK_OFFSET)
+#define CC_UPGRADE_V03_MAIN_BAK_LEN (CC_UPGRADE_V02_MAIN_BAK_LEN)
+#define CC_UPGRADE_V03_PROTECT_DATA_START (0x1FF000)
+#define CC_UPGRADE_V03_PROTECT_DATA_LEN (0x1000)
+#define CC_UPGRADE_V03_ALL_LENGTH (CC_UPGRADE_V03_PROTECT_DATA_START)
+
+#define CC_UPGRADE_V03_CUR_PQ_OFFSET (CC_UPGRADE_V02_CUR_PQ_OFFSET)
+
+
+class CUpgradeFBC: public CThread {
+public:
+ CUpgradeFBC();
+ ~CUpgradeFBC();
+
+ int start();
+ int stop();
+ int GetUpgradeFBCProgress();
+ int SetUpgradeFileName(char *file_name);
+ int SetUpgradeFileSize(int file_size);
+ int SetUpgradeBlockSize(int block_size);
+ int SetUpgradeMode(int mode);
+
+ class IUpgradeFBCObserver {
+ public:
+ IUpgradeFBCObserver() {};
+ virtual ~IUpgradeFBCObserver() {};
+ virtual void onUpgradeStatus(int state, int param) {};
+ };
+ void setObserver(IUpgradeFBCObserver *pOb)
+ {
+ mpObserver = pOb;
+ };
+
+private:
+ bool threadLoop();
+
+ int AddCRCToDataBuf(unsigned char data_buf[], int data_len);
+
+ int mState;
+ int mUpgradeMode;
+ int mOPTotalSize;
+ int mBinFileSize;
+ int mUpgradeBlockSize;
+ unsigned char *mBinFileBuf;
+ char mFileName[256];
+ unsigned char mDataBuf[CC_UPGRADE_DATA_BUF_SIZE];
+ IUpgradeFBCObserver *mpObserver;
+ CFbcCommunication *mCfbcIns;
+
+ enum UpgradeState {
+ STATE_STOPED = 0,
+ STATE_RUNNING,
+ STATE_FINISHED,
+ STATE_ABORT,
+ };
+
+ enum FBCUpgradeErrorCode {
+ ERR_SERIAL_CONNECT = -1,
+ ERR_OPEN_BIN_FILE = -2,
+ ERR_BIN_FILE_SIZE = -3,
+ ERR_READ_BIN_FILE = -4,
+ ERR_NOT_SUPPORT_UPGRADE_MDOE = -5,
+ ERR_NOT_CORRECT_UPGRADE_BLKSIZE = -6,
+ ERR_DATA_CRC_ERROR = -7,
+ };
+};
+
+#endif //__TV_UPGRADE_FBC_H__
diff --git a/tvapi/libtv/tvconfig/CIniFile.cpp b/tvapi/libtv/tvconfig/CIniFile.cpp
index da448a5..1cd4cf8 100644
--- a/tvapi/libtv/tvconfig/CIniFile.cpp
+++ b/tvapi/libtv/tvconfig/CIniFile.cpp
@@ -1,353 +1,353 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "CIniFile.h"
-
-CIniFile::CIniFile()
-{
- mpFirstSection = NULL;
- mpFileName[0] = '\0';
- m_pIniFile = NULL;
- mpFirstLine = NULL;
-}
-
-CIniFile::~CIniFile()
-{
- LOGD("CIniFile::~CIniFile()");
- FreeAllMem();
-}
-
-int CIniFile::LoadFromFile(const char *filename)
-{
- char lineStr[MAX_INI_FILE_LINE_LEN];
- char *pStr;
- LINE *pCurLINE = NULL;
- SECTION *pCurSection = NULL;
-
- FreeAllMem();
-
- int Len;
- if (filename == NULL) {
- return -1;
- }
-
- strcpy(mpFileName, filename);
- LOGD("LoadFromFile 2name = %s", mpFileName);
- if ((m_pIniFile = fopen (mpFileName, "r")) == NULL) {
- return -1;
- }
-
- while (fgets (lineStr, MAX_INI_FILE_LINE_LEN, m_pIniFile) != NULL) {
- //去掉多余字符
- allTrim(lineStr);
-
- LINE *pLINE = new LINE();
- pLINE->pKeyStart = pLINE->Text;
- pLINE->pKeyEnd = pLINE->Text;
- pLINE->pValueStart = pLINE->Text;
- pLINE->pValueEnd = pLINE->Text;
- pLINE->pNext = NULL;
- pLINE->type = getLineType(lineStr);
- //LOGD("getline=%s len=%d type=%d", lineStr, strlen(lineStr), pLINE->type);
- strcpy(pLINE->Text, lineStr);
- pLINE->LineLen = strlen(pLINE->Text);
-
- //head
- if (mpFirstLine == NULL) {
- mpFirstLine = pLINE;
- } else {
- pCurLINE->pNext = pLINE;
- }
-
- pCurLINE = pLINE;
-
- switch (pCurLINE->type) {
- case LINE_TYPE_SECTION: {
- SECTION *pSec = new SECTION();
- pSec->pLine = pLINE;
- pSec->pNext = NULL;
- if (mpFirstSection == NULL) { //first section
- mpFirstSection = pSec;
- } else {
- pCurSection->pNext = pSec;
- }
- pCurSection = pSec;
- break;
- }
- case LINE_TYPE_KEY: {
- char *pM = strchr(pCurLINE->Text, '=');
- pCurLINE->pKeyStart = pCurLINE->Text;
- pCurLINE->pKeyEnd = pM - 1;
- pCurLINE->pValueStart = pM + 1;
- pCurLINE->pValueEnd = pCurLINE->Text + pCurLINE->LineLen - 1;
- break;
- }
- case LINE_TYPE_COMMENT: {
- break;
- }
- default: {
- break;
- }
- }
- }
-
- fclose (m_pIniFile);
- m_pIniFile = NULL;
-
- return 0;
-}
-
-void CIniFile::printAll()
-{
- //line
- for (LINE *pline = mpFirstLine; pline != NULL; pline = pline->pNext) {
- LOGD("line = %s type = %d", pline->Text, pline->type);
- }
-
- //section
- for (SECTION *psec = mpFirstSection; psec != NULL; psec = psec->pNext) {
- LOGD("sec = %s", psec->pLine->Text);
- }
- return;
-}
-
-int CIniFile::LoadFromString(const char *str)
-{
- return 0;
-}
-
-int CIniFile::SaveToFile(const char *filename)
-{
- const char *file = NULL;
- if (m_pIniFile != NULL) {
- fclose (m_pIniFile);
- }
-
- if (filename == NULL) {
- if (strlen(mpFileName) == 0) {
- LOGD("error save file is null");
- return -1;
- } else {
- file = mpFileName;
- }
- } else {
- file = filename;
- }
- //LOGD("Save to file name = %s", file);
-
- if ((m_pIniFile = fopen (file, "wb")) == NULL) {
- LOGD("Save to file open error = %s", file);
- return -1;
- }
-
- LINE *pCurLine = NULL;
- for (pCurLine = mpFirstLine; pCurLine != NULL; pCurLine = pCurLine->pNext) {
- fprintf (m_pIniFile, "%s\r\n", pCurLine->Text);
- }
-
- fflush(m_pIniFile);
- fsync(fileno(m_pIniFile));
-
- fclose(m_pIniFile);
- m_pIniFile = NULL;
- return 0;
-}
-
-//æš‚ä¸æ’å…¥æ“作
-int CIniFile::SetString(const char *section, const char *key, const char *value)
-{
- SECTION *pNewSec = NULL;
- LINE *pNewSecLine = NULL;
- LINE *pNewKeyLine = NULL;
-
- SECTION *pSec = getSection(section);
- if (pSec == NULL) {
- pNewSec = new SECTION();
- pNewSecLine = new LINE();
- pNewKeyLine = new LINE();
-
- pNewKeyLine->type = LINE_TYPE_KEY;
- pNewSecLine->type = LINE_TYPE_SECTION;
-
-
- sprintf(pNewSecLine->Text, "[%s]", section);
- pNewSec->pLine = pNewSecLine;
-
- InsertSection(pNewSec);
-
- int keylen = strlen(key);
- sprintf(pNewKeyLine->Text, "%s=%s", key, value);
- pNewKeyLine->LineLen = strlen(pNewKeyLine->Text);
- pNewKeyLine->pKeyStart = pNewKeyLine->Text;
- pNewKeyLine->pKeyEnd = pNewKeyLine->pKeyStart + keylen - 1;
- pNewKeyLine->pValueStart = pNewKeyLine->pKeyStart + keylen + 1;
- pNewKeyLine->pValueEnd = pNewKeyLine->Text + pNewKeyLine->LineLen - 1;
-
- InsertKeyLine(pNewSec, pNewKeyLine);
-
- } else { //find section
- LINE *pLine = getKeyLineAtSec(pSec, key);
- if (pLine == NULL) { //, not find key
- pNewKeyLine = new LINE();
- pNewKeyLine->type = LINE_TYPE_KEY;
-
- int keylen = strlen(key);
- sprintf(pNewKeyLine->Text, "%s=%s", key, value);
- pNewKeyLine->LineLen = strlen(pNewKeyLine->Text);
- pNewKeyLine->pKeyStart = pNewKeyLine->Text;
- pNewKeyLine->pKeyEnd = pNewKeyLine->pKeyStart + keylen - 1;
- pNewKeyLine->pValueStart = pNewKeyLine->pKeyStart + keylen + 1;
- pNewKeyLine->pValueEnd = pNewKeyLine->Text + pNewKeyLine->LineLen - 1;
-
- InsertKeyLine(pSec, pNewKeyLine);
- } else { //all find, change it
- sprintf(pLine->Text, "%s=%s", key, value);
- pLine->LineLen = strlen(pLine->Text);
- pLine->pValueEnd = pLine->Text + pLine->LineLen - 1;
- }
- }
-
- //save
- SaveToFile(NULL);
- return 0;
-}
-int CIniFile::SetInt(const char *section, const char *key, int value)
-{
- char tmp[64];
- sprintf(tmp, "%d", value);
- SetString(section, key, tmp);
- return 0;
-}
-const char *CIniFile::GetString(const char *section, const char *key, const char *def_value)
-{
- SECTION *pSec = getSection(section);
- if (pSec == NULL) return def_value;
- LINE *pLine = getKeyLineAtSec(pSec, key);
- if (pLine == NULL) return def_value;
-
- return pLine->pValueStart;
-}
-int CIniFile::GetInt(const char *section, const char *key, int def_value)
-{
- const char *num = GetString(section, key, NULL);
- if (num != NULL) {
- return atoi(num);
- }
- return def_value;
-}
-
-
-LINE_TYPE CIniFile::getLineType(char *Str)
-{
- LINE_TYPE type = LINE_TYPE_COMMENT;
- //åªè¦æœ‰#,就是注释
- if (strchr(Str, '#') != NULL) {
- type = LINE_TYPE_COMMENT;
- } else if ( (strstr (Str, "[") != NULL) && (strstr (Str, "]") != NULL) ) { /* Is Section */
- type = LINE_TYPE_SECTION;
- } else {
- if (strstr (Str, "=") != NULL) {
- type = LINE_TYPE_KEY;
- } else {
- type = LINE_TYPE_COMMENT;
- }
- }
- return type;
-}
-
-void CIniFile::FreeAllMem()
-{
- //line
- LINE *pCurLine = NULL;
- LINE *pNextLine = NULL;
- for (pCurLine = mpFirstLine; pCurLine != NULL;) {
- pNextLine = pCurLine->pNext;
- delete pCurLine;
- pCurLine = pNextLine;
- }
- mpFirstLine = NULL;
- //section
- SECTION *pCurSec = NULL;
- SECTION *pNextSec = NULL;
- for (pCurSec = mpFirstSection; pCurSec != NULL;) {
- pNextSec = pCurSec->pNext;
- delete pCurSec;
- pCurSec = pNextSec;
- }
- mpFirstSection = NULL;
-}
-
-int CIniFile::InsertSection(SECTION *pSec)
-{
- //insert it to sections list ,as first section
- pSec->pNext = mpFirstSection;
- mpFirstSection = pSec;
- //insert it to lines list, at first
- pSec->pLine->pNext = mpFirstLine;
- mpFirstLine = pSec->pLine;
- return 0;
-}
-int CIniFile::InsertKeyLine(SECTION *pSec, LINE *line)
-{
- LINE *line1 = pSec->pLine;
- LINE *line2 = line1->pNext;
- line1->pNext = line;
- line->pNext = line2;
- return 0;
-}
-SECTION *CIniFile::getSection(const char *section)
-{
- //section
- for (SECTION *psec = mpFirstSection; psec != NULL; psec = psec->pNext) {
- if (strncmp((psec->pLine->Text) + 1, section, strlen(section)) == 0)
- return psec;
- }
- return NULL;
-}
-LINE *CIniFile::getKeyLineAtSec(SECTION *pSec, const char *key)
-{
- //line
- for (LINE *pline = pSec->pLine->pNext; (pline != NULL && pline->type != LINE_TYPE_SECTION); pline = pline->pNext) {
- if (pline->type == LINE_TYPE_KEY) {
- if (strncmp(pline->Text, key, strlen(key)) == 0)
- return pline;
- }
- }
- return NULL;
-}
-//去掉串里é¢çš„,空格,回车,æ¢è¡Œ,s指å‘转æ¢å¤„ç†åŽçš„串的开头
-void CIniFile::allTrim(char *Str)
-{
- //去掉æ¢è¡Œ
- char *pStr;
- pStr = strchr (Str, '\n');
- if (pStr != NULL) {
- *pStr = 0;
- }
- //去掉尾部回车
- int Len = strlen(Str);
- if ( Len > 0 ) {
- if ( Str[Len - 1] == '\r' ) {
- Str[Len - 1] = '\0';
- }
- }
- //去掉空格
- pStr = Str;
- while (*pStr != '\0') { //没到尾部
- if (*pStr == ' ') { //é‡åˆ°ç©ºæ ¼
- char *pTmp = pStr;//从空格处开始
- while (*pTmp != '\0') {
- *pTmp = *(pTmp + 1);//å‰ç§»,包括移最åŽç»“æŸç¬¦
- pTmp++;
- }
- } else {
- pStr++;
- }
- }
- return;
-}
-
-
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "CIniFile.h"
+
+CIniFile::CIniFile()
+{
+ mpFirstSection = NULL;
+ mpFileName[0] = '\0';
+ m_pIniFile = NULL;
+ mpFirstLine = NULL;
+}
+
+CIniFile::~CIniFile()
+{
+ LOGD("CIniFile::~CIniFile()");
+ FreeAllMem();
+}
+
+int CIniFile::LoadFromFile(const char *filename)
+{
+ char lineStr[MAX_INI_FILE_LINE_LEN];
+ char *pStr;
+ LINE *pCurLINE = NULL;
+ SECTION *pCurSection = NULL;
+
+ FreeAllMem();
+
+ int Len;
+ if (filename == NULL) {
+ return -1;
+ }
+
+ strcpy(mpFileName, filename);
+ LOGD("LoadFromFile 2name = %s", mpFileName);
+ if ((m_pIniFile = fopen (mpFileName, "r")) == NULL) {
+ return -1;
+ }
+
+ while (fgets (lineStr, MAX_INI_FILE_LINE_LEN, m_pIniFile) != NULL) {
+ //去掉多余字符
+ allTrim(lineStr);
+
+ LINE *pLINE = new LINE();
+ pLINE->pKeyStart = pLINE->Text;
+ pLINE->pKeyEnd = pLINE->Text;
+ pLINE->pValueStart = pLINE->Text;
+ pLINE->pValueEnd = pLINE->Text;
+ pLINE->pNext = NULL;
+ pLINE->type = getLineType(lineStr);
+ //LOGD("getline=%s len=%d type=%d", lineStr, strlen(lineStr), pLINE->type);
+ strcpy(pLINE->Text, lineStr);
+ pLINE->LineLen = strlen(pLINE->Text);
+
+ //head
+ if(mpFirstLine == NULL) {
+ mpFirstLine = pLINE;
+ } else {
+ pCurLINE->pNext = pLINE;
+ }
+
+ pCurLINE = pLINE;
+
+ switch(pCurLINE->type) {
+ case LINE_TYPE_SECTION: {
+ SECTION *pSec = new SECTION();
+ pSec->pLine = pLINE;
+ pSec->pNext = NULL;
+ if(mpFirstSection == NULL) { //first section
+ mpFirstSection = pSec;
+ } else {
+ pCurSection->pNext = pSec;
+ }
+ pCurSection = pSec;
+ break;
+ }
+ case LINE_TYPE_KEY: {
+ char *pM = strchr(pCurLINE->Text, '=');
+ pCurLINE->pKeyStart = pCurLINE->Text;
+ pCurLINE->pKeyEnd = pM - 1;
+ pCurLINE->pValueStart = pM + 1;
+ pCurLINE->pValueEnd = pCurLINE->Text + pCurLINE->LineLen - 1;
+ break;
+ }
+ case LINE_TYPE_COMMENT: {
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+ }
+
+ fclose (m_pIniFile);
+ m_pIniFile = NULL;
+
+ return 0;
+}
+
+void CIniFile::printAll()
+{
+ //line
+ for(LINE *pline = mpFirstLine; pline != NULL; pline = pline->pNext) {
+ LOGD("line = %s type = %d", pline->Text, pline->type);
+ }
+
+ //section
+ for(SECTION *psec = mpFirstSection; psec != NULL; psec = psec->pNext) {
+ LOGD("sec = %s", psec->pLine->Text);
+ }
+ return;
+}
+
+int CIniFile::LoadFromString(const char *str)
+{
+ return 0;
+}
+
+int CIniFile::SaveToFile(const char *filename)
+{
+ const char *file = NULL;
+ if(m_pIniFile != NULL) {
+ fclose (m_pIniFile);
+ }
+
+ if(filename == NULL) {
+ if(strlen(mpFileName) == 0) {
+ LOGD("error save file is null");
+ return -1;
+ } else {
+ file = mpFileName;
+ }
+ } else {
+ file = filename;
+ }
+ //LOGD("Save to file name = %s", file);
+
+ if((m_pIniFile = fopen (file, "wb")) == NULL) {
+ LOGD("Save to file open error = %s", file);
+ return -1;
+ }
+
+ LINE *pCurLine = NULL;
+ for(pCurLine = mpFirstLine; pCurLine != NULL; pCurLine = pCurLine->pNext) {
+ fprintf (m_pIniFile, "%s\r\n", pCurLine->Text);
+ }
+
+ fflush(m_pIniFile);
+ fsync(fileno(m_pIniFile));
+
+ fclose(m_pIniFile);
+ m_pIniFile = NULL;
+ return 0;
+}
+
+//æš‚ä¸æ’å…¥æ“作
+int CIniFile::SetString(const char *section, const char *key, const char *value)
+{
+ SECTION *pNewSec = NULL;
+ LINE *pNewSecLine = NULL;
+ LINE *pNewKeyLine = NULL;
+
+ SECTION *pSec = getSection(section);
+ if(pSec == NULL) {
+ pNewSec = new SECTION();
+ pNewSecLine = new LINE();
+ pNewKeyLine = new LINE();
+
+ pNewKeyLine->type = LINE_TYPE_KEY;
+ pNewSecLine->type = LINE_TYPE_SECTION;
+
+
+ sprintf(pNewSecLine->Text, "[%s]", section);
+ pNewSec->pLine = pNewSecLine;
+
+ InsertSection(pNewSec);
+
+ int keylen = strlen(key);
+ sprintf(pNewKeyLine->Text, "%s=%s", key, value);
+ pNewKeyLine->LineLen = strlen(pNewKeyLine->Text);
+ pNewKeyLine->pKeyStart = pNewKeyLine->Text;
+ pNewKeyLine->pKeyEnd = pNewKeyLine->pKeyStart + keylen - 1;
+ pNewKeyLine->pValueStart = pNewKeyLine->pKeyStart + keylen + 1;
+ pNewKeyLine->pValueEnd = pNewKeyLine->Text + pNewKeyLine->LineLen - 1;
+
+ InsertKeyLine(pNewSec, pNewKeyLine);
+
+ } else { //find section
+ LINE *pLine = getKeyLineAtSec(pSec, key);
+ if(pLine == NULL) { //, not find key
+ pNewKeyLine = new LINE();
+ pNewKeyLine->type = LINE_TYPE_KEY;
+
+ int keylen = strlen(key);
+ sprintf(pNewKeyLine->Text, "%s=%s", key, value);
+ pNewKeyLine->LineLen = strlen(pNewKeyLine->Text);
+ pNewKeyLine->pKeyStart = pNewKeyLine->Text;
+ pNewKeyLine->pKeyEnd = pNewKeyLine->pKeyStart + keylen - 1;
+ pNewKeyLine->pValueStart = pNewKeyLine->pKeyStart + keylen + 1;
+ pNewKeyLine->pValueEnd = pNewKeyLine->Text + pNewKeyLine->LineLen - 1;
+
+ InsertKeyLine(pSec, pNewKeyLine);
+ } else { //all find, change it
+ sprintf(pLine->Text, "%s=%s", key, value);
+ pLine->LineLen = strlen(pLine->Text);
+ pLine->pValueEnd = pLine->Text + pLine->LineLen - 1;
+ }
+ }
+
+ //save
+ SaveToFile(NULL);
+ return 0;
+}
+int CIniFile::SetInt(const char *section, const char *key, int value)
+{
+ char tmp[64];
+ sprintf(tmp, "%d", value);
+ SetString(section, key, tmp);
+ return 0;
+}
+const char *CIniFile::GetString(const char *section, const char *key, const char *def_value)
+{
+ SECTION *pSec = getSection(section);
+ if(pSec == NULL) return def_value;
+ LINE *pLine = getKeyLineAtSec(pSec, key);
+ if(pLine == NULL) return def_value;
+
+ return pLine->pValueStart;
+}
+int CIniFile::GetInt(const char *section, const char *key, int def_value)
+{
+ const char *num = GetString(section, key, NULL);
+ if(num != NULL) {
+ return atoi(num);
+ }
+ return def_value;
+}
+
+
+LINE_TYPE CIniFile::getLineType(char *Str)
+{
+ LINE_TYPE type = LINE_TYPE_COMMENT;
+ //åªè¦æœ‰#,就是注释
+ if(strchr(Str, '#') != NULL) {
+ type = LINE_TYPE_COMMENT;
+ } else if ( (strstr (Str, "[") != NULL) && (strstr (Str, "]") != NULL) ) { /* Is Section */
+ type = LINE_TYPE_SECTION;
+ } else {
+ if (strstr (Str, "=") != NULL) {
+ type = LINE_TYPE_KEY;
+ } else {
+ type = LINE_TYPE_COMMENT;
+ }
+ }
+ return type;
+}
+
+void CIniFile::FreeAllMem()
+{
+ //line
+ LINE *pCurLine = NULL;
+ LINE *pNextLine = NULL;
+ for(pCurLine = mpFirstLine; pCurLine != NULL;) {
+ pNextLine = pCurLine->pNext;
+ delete pCurLine;
+ pCurLine = pNextLine;
+ }
+ mpFirstLine = NULL;
+ //section
+ SECTION *pCurSec = NULL;
+ SECTION *pNextSec = NULL;
+ for(pCurSec = mpFirstSection; pCurSec != NULL;) {
+ pNextSec = pCurSec->pNext;
+ delete pCurSec;
+ pCurSec = pNextSec;
+ }
+ mpFirstSection = NULL;
+}
+
+int CIniFile::InsertSection(SECTION *pSec)
+{
+ //insert it to sections list ,as first section
+ pSec->pNext = mpFirstSection;
+ mpFirstSection = pSec;
+ //insert it to lines list, at first
+ pSec->pLine->pNext = mpFirstLine;
+ mpFirstLine = pSec->pLine;
+ return 0;
+}
+int CIniFile::InsertKeyLine(SECTION *pSec, LINE *line)
+{
+ LINE *line1 = pSec->pLine;
+ LINE *line2 = line1->pNext;
+ line1->pNext = line;
+ line->pNext = line2;
+ return 0;
+}
+SECTION *CIniFile::getSection(const char *section)
+{
+ //section
+ for(SECTION *psec = mpFirstSection; psec != NULL; psec = psec->pNext) {
+ if(strncmp((psec->pLine->Text) + 1, section, strlen(section)) == 0)
+ return psec;
+ }
+ return NULL;
+}
+LINE *CIniFile::getKeyLineAtSec(SECTION *pSec, const char *key)
+{
+ //line
+ for(LINE *pline = pSec->pLine->pNext; (pline != NULL && pline->type != LINE_TYPE_SECTION); pline = pline->pNext) {
+ if(pline->type == LINE_TYPE_KEY) {
+ if(strncmp(pline->Text, key, strlen(key)) == 0)
+ return pline;
+ }
+ }
+ return NULL;
+}
+//去掉串里é¢çš„,空格,回车,æ¢è¡Œ,s指å‘转æ¢å¤„ç†åŽçš„串的开头
+void CIniFile::allTrim(char *Str)
+{
+ //去掉æ¢è¡Œ
+ char *pStr;
+ pStr = strchr (Str, '\n');
+ if (pStr != NULL) {
+ *pStr = 0;
+ }
+ //去掉尾部回车
+ int Len = strlen(Str);
+ if ( Len > 0 ) {
+ if ( Str[Len - 1] == '\r' ) {
+ Str[Len - 1] = '\0';
+ }
+ }
+ //去掉空格
+ pStr = Str;
+ while(*pStr != '\0') { //没到尾部
+ if(*pStr == ' ') { //é‡åˆ°ç©ºæ ¼
+ char *pTmp = pStr;//从空格处开始
+ while(*pTmp != '\0') {
+ *pTmp = *(pTmp + 1);//å‰ç§»,包括移最åŽç»“æŸç¬¦
+ pTmp++;
+ }
+ } else {
+ pStr++;
+ }
+ }
+ return;
+}
+
+
diff --git a/tvapi/libtv/tvconfig/CIniFile.h b/tvapi/libtv/tvconfig/CIniFile.h
index 95ffd65..00b45a2 100644
--- a/tvapi/libtv/tvconfig/CIniFile.h
+++ b/tvapi/libtv/tvconfig/CIniFile.h
@@ -8,66 +8,65 @@
static const int MAX_INI_FILE_LINE_LEN = 512;
typedef enum _LINE_TYPE {
- LINE_TYPE_SECTION = 0,
- LINE_TYPE_KEY,
- LINE_TYPE_COMMENT,
+ LINE_TYPE_SECTION = 0,
+ LINE_TYPE_KEY,
+ LINE_TYPE_COMMENT,
} LINE_TYPE;
//基于链表结构
//行链表,去掉多余的空格和回车,æ¢è¡ŒåŽ.
typedef struct _LINE {
- LINE_TYPE type;//类型
- char Text[MAX_INI_FILE_LINE_LEN];//内容
- int LineLen;
- char *pKeyStart;
- char *pKeyEnd;
- char *pValueStart;
- char *pValueEnd;
- struct _LINE *pNext;
+ LINE_TYPE type;//类型
+ char Text[MAX_INI_FILE_LINE_LEN];//内容
+ int LineLen;
+ char *pKeyStart;
+ char *pKeyEnd;
+ char *pValueStart;
+ char *pValueEnd;
+ struct _LINE *pNext;
} LINE;
//段链表
typedef struct _SECTION {
- LINE *pLine;
- struct _SECTION *pNext;
+ LINE *pLine;
+ struct _SECTION *pNext;
} SECTION;
-class CIniFile
-{
+class CIniFile {
public:
- //const int MAX_SECTION_NAME_LEN = 16;
- //const int MAX_KEY_NAME_LEN = 64;
- //const int MAX_VALUE_LEN = 512;
+ //const int MAX_SECTION_NAME_LEN = 16;
+ //const int MAX_KEY_NAME_LEN = 64;
+ //const int MAX_VALUE_LEN = 512;
- CIniFile();
- ~CIniFile();
- int LoadFromFile(const char *filename);
- int LoadFromString(const char *str);
+ CIniFile();
+ ~CIniFile();
+ int LoadFromFile(const char *filename);
+ int LoadFromString(const char *str);
- int SaveToFile(const char *filename = NULL);
+ int SaveToFile(const char *filename = NULL);
- int SetString(const char *section, const char *key, const char *value);
- int SetInt(const char *section, const char *key, int value);
+ int SetString(const char *section, const char *key, const char *value);
+ int SetInt(const char *section, const char *key, int value);
- const char *GetString(const char *section, const char *key, const char *def_value);
- int GetInt(const char *section, const char *key, int def_value);
+ const char *GetString(const char *section, const char *key, const char *def_value);
+ int GetInt(const char *section, const char *key, int def_value);
- void printAll();
+ void printAll();
private:
- LINE_TYPE getLineType(char *Str);
- //去掉串里é¢çš„,空格,回车,æ¢è¡Œ,s指å‘转æ¢å¤„ç†åŽçš„串的开头
- void allTrim(char *Str);
+ LINE_TYPE getLineType(char *Str);
+ //去掉串里é¢çš„,空格,回车,æ¢è¡Œ,s指å‘转æ¢å¤„ç†åŽçš„串的开头
+ void allTrim(char *Str);
- SECTION *getSection(const char *section);
- LINE *getKeyLineAtSec(SECTION *pSec, const char *key);
+ SECTION *getSection(const char *section);
+ LINE *getKeyLineAtSec(SECTION *pSec, const char *key);
- void FreeAllMem();
- int InsertSection(SECTION *pSec);
- int InsertKeyLine(SECTION *pSec, LINE *line);
- char mpFileName[256];
- FILE *m_pIniFile;
- LINE *mpFirstLine;
- SECTION *mpFirstSection;
+ void FreeAllMem();
+ int InsertSection(SECTION *pSec);
+ int InsertKeyLine(SECTION *pSec, LINE *line);
+ char mpFileName[256];
+ FILE *m_pIniFile;
+ LINE *mpFirstLine;
+ SECTION *mpFirstSection;
};
#endif //end of INI_FILE_H_
diff --git a/tvapi/libtv/tvconfig/tvconfig.conf b/tvapi/libtv/tvconfig/tvconfig.conf
index d18fbca..f892e29 100644
--- a/tvapi/libtv/tvconfig/tvconfig.conf
+++ b/tvapi/libtv/tvconfig/tvconfig.conf
@@ -1,30 +1,30 @@
-#ssm configure
-ro.tv.ssm.device_01_cfg = e2prom,/dev/i2c-0,0x1000,0,0xFFF,0x20,0x20,0x50,1,-1
-ssm.writeprotect.gpio = b,8,1
-
-#audio config
-audio.tv.card.id = hw:AMLM2
-audio.tv.card.name = AML-M2
-audio.amp.analog.mute.gpio = b,8,1
-audio.headset.mute.gpio = x,30,1
-audio.avout.mute.gpio = x,69,0
-audio.initaudio.gpioctl = b,8,1,x,30,0,b,5,1,x,69,1,x,68,0,x,67,1,x,66,0,x,65,1,x,64,0,x,63,1,x,62,0,x,61,1,x,60,0,x,59,1,x,58,0,x,57,1,x,56,0,x,55,1,x,54,0,x,53,1,x,52,0,x,51,1,x,50,0,x,49,1,x,48,0,x,47,1,x,46,0,x,45,1,x,44,0,x,43,1,x,42,0,x,41,1,x,40,0,x,39,0,x,38,0,x,37,1,x,36,0,x,35,1,x,34,0,x,33,1,x,32,0,x,31,1,x,30,0,x,29,1,x,28,0,x,27,1,x,26,0,x,25,1,x,24,0,x,23,1,x,22,0,x,21,1,x,20,0,x,19,1,x,18,0,x,17,1,x,16,0,x,15,1,x,14,0,x,13,1,x,12,0,x,11,1,x,10,0,x,9,1,x,8,0
-audio.amplifier.biquad00.data = 0x04, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,0x80, 0xC4, 0x96, 0x7F, 0x3B, 0x6A, 0x7F, 0x3A, 0xD3, 0x81, 0x87, 0xFD, 0x3F, 0x9D, 0xB5,0x8D, 0x18, 0x8C, 0x67, 0x10, 0x01, 0x72, 0xE7, 0x74, 0x96, 0x03, 0x40, 0x41, 0x76, 0x5F,0xAC, 0xE8, 0xCE, 0x32, 0x55, 0xB8, 0x53, 0x17, 0x32, 0xC1, 0xEA, 0x5F, 0x45, 0xDF, 0xF4,
-audio.amplifier.biquad01.data = 0x04, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,0x8D, 0x18, 0x8C, 0x67, 0x10, 0x01, 0x72, 0xE7, 0x74, 0x96, 0x03, 0x40, 0x41, 0x76, 0x5F,0xAC, 0xE8, 0xCE, 0x32, 0x55, 0xB8, 0x53, 0x17, 0x32, 0xC1, 0xEA, 0x5F, 0x45, 0xDF, 0xF4,
-
-#tvin config
-tvin.log.cfg = log_error,log_debug
-
-#vpp config
-vpp.log.cfg = log_error,log_debug
-
-#misc config
-misc.log.cfg = log_error,log_debug
-misc.lastselsrc.show.cfg = TV,AV1,AV2,YPBPR1,YPBPR2,HDMI1,HDMI1,HDMI2,VGA,MPEG,DTV
-
-#tvservice config
-tvservice.log.cfg = log_error
-
-#atv config
-atv.fac.defchaninfo = 13,8,49750000,0,1,0,0,0,0,0,136250000,2,1,0,0,0,0,0,160250000,0,1,0,0,0,0,0,168250000,0,1,0,0,0,0,0,416250000,0,1,0,0,0,0,0,456250000,1,1,0,0,0,0,0,471250000,3,2,0,0,0,0,0,863250000,0,1,0,0,0,0,0,49750000,0,1,0,0,0,0,0,217250000,2,1,0,0,0,0,0,471250000,3,2,0,0,0,0,0,527250000,1,1,0,0,0,0,0,783250000,0,1,0,0,0,0,0,
+#ssm configure
+ro.tv.ssm.device_01_cfg = e2prom,/dev/i2c-0,0x1000,0,0xFFF,0x20,0x20,0x50,1,-1
+ssm.writeprotect.gpio = b,8,1
+
+#audio config
+audio.tv.card.id = hw:AMLM2
+audio.tv.card.name = AML-M2
+audio.amp.analog.mute.gpio = b,8,1
+audio.headset.mute.gpio = x,30,1
+audio.avout.mute.gpio = x,69,0
+audio.initaudio.gpioctl = b,8,1,x,30,0,b,5,1,x,69,1,x,68,0,x,67,1,x,66,0,x,65,1,x,64,0,x,63,1,x,62,0,x,61,1,x,60,0,x,59,1,x,58,0,x,57,1,x,56,0,x,55,1,x,54,0,x,53,1,x,52,0,x,51,1,x,50,0,x,49,1,x,48,0,x,47,1,x,46,0,x,45,1,x,44,0,x,43,1,x,42,0,x,41,1,x,40,0,x,39,0,x,38,0,x,37,1,x,36,0,x,35,1,x,34,0,x,33,1,x,32,0,x,31,1,x,30,0,x,29,1,x,28,0,x,27,1,x,26,0,x,25,1,x,24,0,x,23,1,x,22,0,x,21,1,x,20,0,x,19,1,x,18,0,x,17,1,x,16,0,x,15,1,x,14,0,x,13,1,x,12,0,x,11,1,x,10,0,x,9,1,x,8,0
+audio.amplifier.biquad00.data = 0x04, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,0x80, 0xC4, 0x96, 0x7F, 0x3B, 0x6A, 0x7F, 0x3A, 0xD3, 0x81, 0x87, 0xFD, 0x3F, 0x9D, 0xB5,0x8D, 0x18, 0x8C, 0x67, 0x10, 0x01, 0x72, 0xE7, 0x74, 0x96, 0x03, 0x40, 0x41, 0x76, 0x5F,0xAC, 0xE8, 0xCE, 0x32, 0x55, 0xB8, 0x53, 0x17, 0x32, 0xC1, 0xEA, 0x5F, 0x45, 0xDF, 0xF4,
+audio.amplifier.biquad01.data = 0x04, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,0x8D, 0x18, 0x8C, 0x67, 0x10, 0x01, 0x72, 0xE7, 0x74, 0x96, 0x03, 0x40, 0x41, 0x76, 0x5F,0xAC, 0xE8, 0xCE, 0x32, 0x55, 0xB8, 0x53, 0x17, 0x32, 0xC1, 0xEA, 0x5F, 0x45, 0xDF, 0xF4,
+
+#tvin config
+tvin.log.cfg = log_error,log_debug
+
+#vpp config
+vpp.log.cfg = log_error,log_debug
+
+#misc config
+misc.log.cfg = log_error,log_debug
+misc.lastselsrc.show.cfg = TV,AV1,AV2,YPBPR1,YPBPR2,HDMI1,HDMI1,HDMI2,VGA,MPEG,DTV
+
+#tvservice config
+tvservice.log.cfg = log_error
+
+#atv config
+atv.fac.defchaninfo = 13,8,49750000,0,1,0,0,0,0,0,136250000,2,1,0,0,0,0,0,160250000,0,1,0,0,0,0,0,168250000,0,1,0,0,0,0,0,416250000,0,1,0,0,0,0,0,456250000,1,1,0,0,0,0,0,471250000,3,2,0,0,0,0,0,863250000,0,1,0,0,0,0,0,49750000,0,1,0,0,0,0,0,217250000,2,1,0,0,0,0,0,471250000,3,2,0,0,0,0,0,527250000,1,1,0,0,0,0,0,783250000,0,1,0,0,0,0,0,
atv.log.cfg = log_error,log_channelsearch_error,log_channelsearch_debug,log_channelselect_error,log_channelselect_debug \ No newline at end of file
diff --git a/tvapi/libtv/tvconfig/tvconfig.cpp b/tvapi/libtv/tvconfig/tvconfig.cpp
index 4d45735..7619157 100644
--- a/tvapi/libtv/tvconfig/tvconfig.cpp
+++ b/tvapi/libtv/tvconfig/tvconfig.cpp
@@ -1,53 +1,53 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include "tvconfig.h"
-
-#define LOG_TAG "TVCONFIG"
-#include "CTvLog.h"
-#include "CIniFile.h"
-static const char *TV_SECTION = "TV";
-//INI_CONFIG* mpConfig = NULL;
-static char mpFilePath[256] = {0};
-
-static CIniFile *pIniFile = NULL;
-int tv_config_load(const char *file_name)
-{
- if (pIniFile != NULL)
- delete pIniFile;
-
- pIniFile = new CIniFile();
- pIniFile->LoadFromFile(file_name);
- strcpy(mpFilePath, file_name);
- return 0;
-}
-
-int tv_config_unload()
-{
- if (pIniFile != NULL)
- delete pIniFile;
- return 0;
-}
-
-
-int config_set_str(const char *section, const char *key, const char *value)
-{
- return pIniFile->SetString(section, key, value);
-}
-
-const char *config_get_str(const char *section, const char *key, const char *def_value)
-{
- return pIniFile->GetString(section, key, def_value);
-}
-
-int config_get_int(const char *section, const char *key, const int def_value)
-{
- return pIniFile->GetInt(section, key, def_value);
-}
-
-int config_set_int(const char *section, const char *key, const int value)
-{
- pIniFile->SetInt(section, key, value);
- return 0;
-}
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include "tvconfig.h"
+
+#define LOG_TAG "TVCONFIG"
+#include "CTvLog.h"
+#include "CIniFile.h"
+static const char *TV_SECTION = "TV";
+//INI_CONFIG* mpConfig = NULL;
+static char mpFilePath[256] = {0};
+
+static CIniFile *pIniFile = NULL;
+int tv_config_load(const char *file_name)
+{
+ if(pIniFile != NULL)
+ delete pIniFile;
+
+ pIniFile = new CIniFile();
+ pIniFile->LoadFromFile(file_name);
+ strcpy(mpFilePath, file_name);
+ return 0;
+}
+
+int tv_config_unload()
+{
+ if(pIniFile != NULL)
+ delete pIniFile;
+ return 0;
+}
+
+
+int config_set_str(const char *section, const char *key, const char *value)
+{
+ return pIniFile->SetString(section, key, value);
+}
+
+const char *config_get_str(const char *section, const char *key, const char *def_value)
+{
+ return pIniFile->GetString(section, key, def_value);
+}
+
+int config_get_int(const char *section, const char *key, const int def_value)
+{
+ return pIniFile->GetInt(section, key, def_value);
+}
+
+int config_set_int(const char *section, const char *key, const int value)
+{
+ pIniFile->SetInt(section, key, value);
+ return 0;
+}
diff --git a/tvapi/libtv/tvconfig/tvconfig.h b/tvapi/libtv/tvconfig/tvconfig.h
index f2cf316..dfb0bd4 100644
--- a/tvapi/libtv/tvconfig/tvconfig.h
+++ b/tvapi/libtv/tvconfig/tvconfig.h
@@ -1,20 +1,20 @@
-#ifndef __TVCONFIG_API_H__
-#define __TVCONFIG_API_H__
-
-#define CC_CFG_KEY_STR_MAX_LEN (128)
-#define CC_CFG_VALUE_STR_MAX_LEN (512)
-
-
-extern int tv_config_load(const char *file_name);
-extern int tv_config_unload();
-extern int tv_config_save();
-
-//[TV] section
-
-extern int config_set_str(const char *section, const char *key, const char *value);
-extern const char *config_get_str(const char *section, const char *key, const char *def_value);
-extern int config_get_int(const char *section, const char *key, const int def_value);
-extern int config_set_int(const char *section, const char *key, const int value);
-
-
-#endif //__TVCONFIG_API_H__
+#ifndef __TVCONFIG_API_H__
+#define __TVCONFIG_API_H__
+
+#define CC_CFG_KEY_STR_MAX_LEN (128)
+#define CC_CFG_VALUE_STR_MAX_LEN (512)
+
+
+extern int tv_config_load(const char *file_name);
+extern int tv_config_unload();
+extern int tv_config_save();
+
+//[TV] section
+
+extern int config_set_str(const char *section, const char *key, const char *value);
+extern const char *config_get_str(const char *section, const char *key, const char *def_value);
+extern int config_get_int(const char *section, const char *key, const int def_value);
+extern int config_set_int(const char *section, const char *key, const int value);
+
+
+#endif //__TVCONFIG_API_H__
diff --git a/tvapi/libtv/tvdb/CTvChannel.cpp b/tvapi/libtv/tvdb/CTvChannel.cpp
index d39d025..c01fea6 100644
--- a/tvapi/libtv/tvdb/CTvChannel.cpp
+++ b/tvapi/libtv/tvdb/CTvChannel.cpp
@@ -1,347 +1,347 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvChannel.cpp
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-
-#include "CTvChannel.h"
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#define LOG_TAG "CTvChannel"
-#endif
-
-void CTvChannel::createFromCursor(CTvDatabase::Cursor &c)
-{
- int col;
- int src, freq, mod, symb, bw, satid, satpolar;
-
- col = c.getColumnIndex("db_id");
- this->id = c.getInt(col);
-
- col = c.getColumnIndex("ts_id");
- this->dvbTSID = c.getInt(col);
-
- col = c.getColumnIndex("src");
- src = c.getInt(col);
-
- col = c.getColumnIndex("freq");
- freq = c.getInt(col);
-
- if (src == MODE_QAM) {
- col = c.getColumnIndex("mod");
- mod = c.getInt(col);
-
- col = c.getColumnIndex("symb");
- symb = c.getInt(col);
-
- frequency = freq;
- modulation = mod;
- symbolRate = symb;
- mode = MODE_QAM;
-
- } else if (src == MODE_OFDM) {
- col = c.getColumnIndex("bw");
- bw = c.getInt(col);
-
- frequency = freq;
- bandwidth = bw;
- mode = MODE_OFDM;
-
- } else if (src == MODE_ATSC) {
- col = c.getColumnIndex("mod");
- mod = c.getInt(col);
-
- frequency = freq;
- modulation = mod;
- mode = MODE_ATSC;
- } else if (src == MODE_ANALOG) {
- col = c.getColumnIndex("std");
- int std = c.getInt(col);
- col = c.getColumnIndex("aud_mode");
- int aud_mode = c.getInt(col);
- col = c.getColumnIndex("flags");
- int afc_flag = c.getInt(col);
-
- frequency = freq;
- audio = aud_mode;
- standard = std;
- afc_data = afc_flag;
- mode = MODE_ANALOG;
- } else if (src == MODE_QPSK) {
- col = c.getColumnIndex("symb");
- symb = c.getInt(col);
-
- col = c.getColumnIndex("db_sat_para_id");
- satid = c.getInt(col);
-
- col = c.getColumnIndex("polar");
- satpolar = c.getInt(col);
-
- frequency = freq;
- symbolRate = symb;
- sat_id = satid;
- sat_polarisation = satpolar;
- mode = MODE_QPSK;
-
- /*new tv_satparams*/
- //showboz
- //TVSatellite sat = TVSatellite.tvSatelliteSelect(sat_id);
- //tv_satparams = sat.getParams();
- } else if (src == MODE_DTMB) {
- col = c.getColumnIndex("bw");
- bw = c.getInt(col);
-
- frequency = freq;
- bandwidth = bw;
- mode = MODE_DTMB;
- }
-
- this->fendID = 0;
-}
-
-
-CTvChannel::CTvChannel()
-{
-
-}
-
-CTvChannel::CTvChannel(int dbID, int mode, int freq, int bw, int mod, int symb, int ofdm, int channelNum)
-{
- //other member not init,just a paras
- if (mode == MODE_QAM) {
- id = dbID;
- frequency = freq;
- modulation = mod;
- symbolRate = symb;
- mode = MODE_QAM;
- } else if (mode == MODE_OFDM) {
- id = dbID;
- frequency = freq;
- bandwidth = bw;
- mode = MODE_OFDM;
- } else if (mode == MODE_ATSC) {
- id = dbID;
- frequency = freq;
- modulation = mod;
- logicalChannelNum = channelNum;
- mod = MODE_ATSC;
- } else if (mode == MODE_ANALOG) {
- id = dbID;
- frequency = freq;
- audio = 0;
- standard = 0;
- afc_data = 0;
- mode = MODE_ANALOG;
- } else if (mode == MODE_DTMB) {
- id = dbID;
- frequency = freq;
- bandwidth = bw;
- mode = MODE_DTMB;
- }
-}
-
-CTvChannel::~CTvChannel()
-{
-
-}
-
-Vector<CTvChannel> CTvChannel::tvChannelList(int sat_id)
-{
- Vector<CTvChannel> v_channel;
- return v_channel;
-}
-
-int CTvChannel::selectByID(int cid, CTvChannel &channel)
-{
- String8 cmd = String8("select * from ts_table where ts_table.db_id = ") + String8::format("%d", cid);
- CTvDatabase::Cursor c;
- CTvDatabase::GetTvDb()->select(cmd, c);
-
- if (c.moveToFirst()) {
- channel.createFromCursor(c);
- } else {
- c.close();
- return -1;
- }
- c.close();
-
- return 0;
-}
-
-int CTvChannel::SelectByFreq(int freq, CTvChannel &channel)
-{
- String8 cmd ;
- CTvDatabase::Cursor c;
- int iOutRet = 0;
-
- do {
- cmd = String8("select * from ts_table where ts_table.freq = ") + String8::format("%d", freq);
- CTvDatabase::GetTvDb()->select(cmd, c);
-
- if (c.moveToFirst()) {
- channel.createFromCursor(c);
- } else {
- iOutRet = -1;
- break;
- }
-
- cmd = String8("delete from ts_table where ts_table.freq = ") + String8::format("%d", freq);
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
- } while (false);
-
- c.close();
- return iOutRet;
-}
-
-int CTvChannel::DeleteBetweenFreq(int beginFreq, int endFreq)
-{
- String8 cmd ;
- CTvDatabase::Cursor c;
- int iOutRet = 0;
- CTvChannel channel;
-
- do {
- cmd = String8("select * from ts_table where ts_table.freq >= ") + String8::format("%d", beginFreq)
- + String8("and ts_table.freq <= ") + String8::format("%d", endFreq);
- CTvDatabase::GetTvDb()->select(cmd, c);
- if (c.moveToFirst()) {
- do {
- channel.createFromCursor(c);
- cmd = String8("delete from ts_table where ts_table.freq = ") + String8::format("%d", channel.frequency);
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
- } while (c.moveToNext());
- } else {
- iOutRet = -1;
- break;
- }
-
- } while (false);
-
- c.close();
- return iOutRet;
-}
-
-int CTvChannel::CleanAllChannelBySrc(int src)
-{
- String8 cmd = String8("delete from ts_table where src = ") + String8::format("%d", src);
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
- return 0;
-}
-
-int CTvChannel::getChannelListBySrc(int src, Vector< sp<CTvChannel> > &v_channel)
-{
- CTvDatabase::Cursor c;
- CTvChannel *channel;
- do {
- String8 cmd = String8("select * from ts_table where src = ") + String8::format("%d", src);
- CTvDatabase::GetTvDb()->select(cmd, c);
- if (c.moveToFirst()) {
- do {
- channel = new CTvChannel();
- channel->createFromCursor(c);
- v_channel.add(channel);
- } while (c.moveToNext());
- } else {
- break;
- }
- } while (false);
-
- return 0;
-}
-int CTvChannel::updateByID(int progID, int std, int freq, int fineFreq)
-{
-
- String8 cmd = String8("update ts_table set std = ") + String8::format("%d", std) +
- String8(", freq = ") + String8::format("%d", freq) +
- String8(", flags = ") + String8::format("%d", fineFreq) +
- String8(" where ts_table.db_id = ") + String8::format("%d", progID);
- LOGD("%s, cmd = %s\n", "TV", cmd.string());
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-
- return 0;
-}
-
-
-void CTvChannel::tvChannelDel()
-{
-
-}
-
-void CTvChannel::tvChannelDelBySatID(int id)
-{
-
-}
-
-int CTvChannel::getDVBTSID()
-{
- return dvbTSID;
-}
-
-void CTvChannel::getDVBOrigNetID()
-{
-
-}
-
-void CTvChannel::getFrontendID()
-{
-
-}
-
-void CTvChannel::getTSSourceID()
-{
-
-}
-
-
-void CTvChannel::isDVBCMode()
-{
-
-}
-
-void CTvChannel::setFrequency()
-{
-
-}
-
-void CTvChannel::setSymbolRate()
-{
-
-}
-
-void CTvChannel::setPolarisation()
-{
-
-}
-
-void CTvChannel::setATVAudio()
-{
-
-}
-
-void CTvChannel::setATVVideoFormat()
-{
-
-}
-
-void CTvChannel::setATVAudioFormat()
-{
-
-}
-
-void CTvChannel::setATVFreq()
-{
-
-}
-
-void CTvChannel::setATVAfcData()
-{
-
-}
-
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvChannel.cpp
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+
+#include "CTvChannel.h"
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#define LOG_TAG "CTvChannel"
+#endif
+
+void CTvChannel::createFromCursor(CTvDatabase::Cursor &c)
+{
+ int col;
+ int src, freq, mod, symb, bw, satid, satpolar;
+
+ col = c.getColumnIndex("db_id");
+ this->id = c.getInt(col);
+
+ col = c.getColumnIndex("ts_id");
+ this->dvbTSID = c.getInt(col);
+
+ col = c.getColumnIndex("src");
+ src = c.getInt(col);
+
+ col = c.getColumnIndex("freq");
+ freq = c.getInt(col);
+
+ if(src == MODE_QAM) {
+ col = c.getColumnIndex("mod");
+ mod = c.getInt(col);
+
+ col = c.getColumnIndex("symb");
+ symb = c.getInt(col);
+
+ frequency = freq;
+ modulation = mod;
+ symbolRate = symb;
+ mode = MODE_QAM;
+
+ } else if(src == MODE_OFDM) {
+ col = c.getColumnIndex("bw");
+ bw = c.getInt(col);
+
+ frequency = freq;
+ bandwidth = bw;
+ mode = MODE_OFDM;
+
+ } else if(src == MODE_ATSC) {
+ col = c.getColumnIndex("mod");
+ mod = c.getInt(col);
+
+ frequency = freq;
+ modulation = mod;
+ mode = MODE_ATSC;
+ } else if(src == MODE_ANALOG) {
+ col = c.getColumnIndex("std");
+ int std = c.getInt(col);
+ col = c.getColumnIndex("aud_mode");
+ int aud_mode = c.getInt(col);
+ col = c.getColumnIndex("flags");
+ int afc_flag = c.getInt(col);
+
+ frequency = freq;
+ audio = aud_mode;
+ standard = std;
+ afc_data = afc_flag;
+ mode = MODE_ANALOG;
+ } else if(src == MODE_QPSK) {
+ col = c.getColumnIndex("symb");
+ symb = c.getInt(col);
+
+ col = c.getColumnIndex("db_sat_para_id");
+ satid = c.getInt(col);
+
+ col = c.getColumnIndex("polar");
+ satpolar = c.getInt(col);
+
+ frequency = freq;
+ symbolRate = symb;
+ sat_id = satid;
+ sat_polarisation = satpolar;
+ mode = MODE_QPSK;
+
+ /*new tv_satparams*/
+ //showboz
+ //TVSatellite sat = TVSatellite.tvSatelliteSelect(sat_id);
+ //tv_satparams = sat.getParams();
+ } else if(src == MODE_DTMB) {
+ col = c.getColumnIndex("bw");
+ bw = c.getInt(col);
+
+ frequency = freq;
+ bandwidth = bw;
+ mode = MODE_DTMB;
+ }
+
+ this->fendID = 0;
+}
+
+
+CTvChannel::CTvChannel()
+{
+
+}
+
+CTvChannel::CTvChannel(int dbID, int mode, int freq, int bw, int mod, int symb, int ofdm, int channelNum)
+{
+ //other member not init,just a paras
+ if(mode == MODE_QAM) {
+ id = dbID;
+ frequency = freq;
+ modulation = mod;
+ symbolRate = symb;
+ mode = MODE_QAM;
+ } else if(mode == MODE_OFDM) {
+ id = dbID;
+ frequency = freq;
+ bandwidth = bw;
+ mode = MODE_OFDM;
+ } else if(mode == MODE_ATSC) {
+ id = dbID;
+ frequency = freq;
+ modulation = mod;
+ logicalChannelNum = channelNum;
+ mod = MODE_ATSC;
+ } else if(mode == MODE_ANALOG) {
+ id = dbID;
+ frequency = freq;
+ audio = 0;
+ standard = 0;
+ afc_data = 0;
+ mode = MODE_ANALOG;
+ } else if(mode == MODE_DTMB) {
+ id = dbID;
+ frequency = freq;
+ bandwidth = bw;
+ mode = MODE_DTMB;
+ }
+}
+
+CTvChannel::~CTvChannel()
+{
+
+}
+
+Vector<CTvChannel> CTvChannel::tvChannelList(int sat_id)
+{
+ Vector<CTvChannel> v_channel;
+ return v_channel;
+}
+
+int CTvChannel::selectByID(int cid, CTvChannel &channel)
+{
+ String8 cmd = String8("select * from ts_table where ts_table.db_id = ") + String8::format("%d", cid);
+ CTvDatabase::Cursor c;
+ CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if(c.moveToFirst()) {
+ channel.createFromCursor(c);
+ } else {
+ c.close();
+ return -1;
+ }
+ c.close();
+
+ return 0;
+}
+
+int CTvChannel::SelectByFreq(int freq, CTvChannel &channel)
+{
+ String8 cmd ;
+ CTvDatabase::Cursor c;
+ int iOutRet = 0;
+
+ do {
+ cmd = String8("select * from ts_table where ts_table.freq = ") + String8::format("%d", freq);
+ CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if(c.moveToFirst()) {
+ channel.createFromCursor(c);
+ } else {
+ iOutRet = -1;
+ break;
+ }
+
+ cmd = String8("delete from ts_table where ts_table.freq = ") + String8::format("%d", freq);
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+ } while(false);
+
+ c.close();
+ return iOutRet;
+}
+
+int CTvChannel::DeleteBetweenFreq(int beginFreq, int endFreq)
+{
+ String8 cmd ;
+ CTvDatabase::Cursor c;
+ int iOutRet = 0;
+ CTvChannel channel;
+
+ do {
+ cmd = String8("select * from ts_table where ts_table.freq >= ") + String8::format("%d", beginFreq)
+ + String8("and ts_table.freq <= ") + String8::format("%d", endFreq);
+ CTvDatabase::GetTvDb()->select(cmd, c);
+ if (c.moveToFirst()) {
+ do {
+ channel.createFromCursor(c);
+ cmd = String8("delete from ts_table where ts_table.freq = ") + String8::format("%d", channel.frequency);
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+ } while(c.moveToNext());
+ } else {
+ iOutRet = -1;
+ break;
+ }
+
+ } while(false);
+
+ c.close();
+ return iOutRet;
+}
+
+int CTvChannel::CleanAllChannelBySrc(int src)
+{
+ String8 cmd = String8("delete from ts_table where src = ") + String8::format("%d", src);
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+ return 0;
+}
+
+int CTvChannel::getChannelListBySrc(int src, Vector< sp<CTvChannel> > &v_channel)
+{
+ CTvDatabase::Cursor c;
+ CTvChannel *channel;
+ do {
+ String8 cmd = String8("select * from ts_table where src = ") + String8::format("%d", src);
+ CTvDatabase::GetTvDb()->select(cmd, c);
+ if (c.moveToFirst()) {
+ do {
+ channel = new CTvChannel();
+ channel->createFromCursor(c);
+ v_channel.add(channel);
+ } while(c.moveToNext());
+ } else {
+ break;
+ }
+ } while(false);
+
+ return 0;
+}
+int CTvChannel::updateByID(int progID, int std, int freq, int fineFreq)
+{
+
+ String8 cmd = String8("update ts_table set std = ") + String8::format("%d", std) +
+ String8(", freq = ") + String8::format("%d", freq) +
+ String8(", flags = ") + String8::format("%d", fineFreq) +
+ String8(" where ts_table.db_id = ") + String8::format("%d", progID);
+ LOGD("%s, cmd = %s\n", "TV", cmd.string());
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+
+ return 0;
+}
+
+
+void CTvChannel::tvChannelDel()
+{
+
+}
+
+void CTvChannel::tvChannelDelBySatID(int id)
+{
+
+}
+
+int CTvChannel::getDVBTSID()
+{
+ return dvbTSID;
+}
+
+void CTvChannel::getDVBOrigNetID()
+{
+
+}
+
+void CTvChannel::getFrontendID()
+{
+
+}
+
+void CTvChannel::getTSSourceID()
+{
+
+}
+
+
+void CTvChannel::isDVBCMode()
+{
+
+}
+
+void CTvChannel::setFrequency()
+{
+
+}
+
+void CTvChannel::setSymbolRate()
+{
+
+}
+
+void CTvChannel::setPolarisation()
+{
+
+}
+
+void CTvChannel::setATVAudio()
+{
+
+}
+
+void CTvChannel::setATVVideoFormat()
+{
+
+}
+
+void CTvChannel::setATVAudioFormat()
+{
+
+}
+
+void CTvChannel::setATVFreq()
+{
+
+}
+
+void CTvChannel::setATVAfcData()
+{
+
+}
+
diff --git a/tvapi/libtv/tvdb/CTvChannel.h b/tvapi/libtv/tvdb/CTvChannel.h
index 2912203..2f5e005 100644
--- a/tvapi/libtv/tvdb/CTvChannel.h
+++ b/tvapi/libtv/tvdb/CTvChannel.h
@@ -1,288 +1,287 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvChannel.h
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-
-#if !defined(_CTVCHANNEL_H)
-#define _CTVCHANNEL_H
-#include <utils/Vector.h>
-#include "CTvDatabase.h"
-#include <utils/String8.h>
-#include <utils/RefBase.h>
-#include <stdlib.h>
-
-#include "CTvLog.h"
-using namespace android;
-// ¶ÔӦģÄâµçÊÓÖеÄÒ»¸öƵµã£¬Êý×ÖµçÊÓÖеÄÒ»¸öƵµãµ÷ÖƵÄTSÁ÷
-class CTvChannel: public LightRefBase<CTvChannel>
-{
-
-public :
- static const int FE_HAS_SIGNAL = 0x01;
- static const int FE_HAS_CARRIER = 0x02;
- static const int FE_HAS_VITERBI = 0x04;
- static const int FE_HAS_SYNC = 0x08;
- /**Ëø¶¨*/
- static const int FE_HAS_LOCK = 0x10;
- /**³¬Ê±*/
- static const int FE_TIMEDOUT = 0x20;
- static const int FE_REINIT = 0x40;
-
- /**QPSKģʽ*/
- static const int MODE_QPSK = 0;
- /**QAMģʽ*/
- static const int MODE_QAM = 1;
- /**OFDMģʽ*/
- static const int MODE_OFDM = 2;
- /**ATSCģʽ*/
- static const int MODE_ATSC = 3;
- /**Ä£Äâģʽ*/
- static const int MODE_ANALOG = 4;
- /**DTMBģʽ*/
- static const int MODE_DTMB = 5;
-
-
- /**8MHz´ø¿í*/
- static const int BANDWIDTH_8_MHZ = 0;
- /**7MHz´ø¿í*/
- static const int BANDWIDTH_7_MHZ = 1;
- /**6MHz´ø¿í*/
- static const int BANDWIDTH_6_MHZ = 2;
- /**×Ô¶¯´ø¿í¼ì²â*/
- static const int BANDWIDTH_AUTO = 3;
- /**5MHZ´ø¿í*/
- static const int BANDWIDTH_5_MHZ = 4;
- /**10MHZ´ø¿í*/
- static const int BANDWIDTH_10_MHZ = 5;
-
- /**QPSKµ÷ÖÆ*/
- static const int MODULATION_QPSK = 0;
- /**QAM16µ÷ÖÆ*/
- static const int MODULATION_QAM_16 = 1;
- /**QAM32µ÷ÖÆ*/
- static const int MODULATION_QAM_32 = 2;
- /**QAM64µ÷ÖÆ*/
- static const int MODULATION_QAM_64 = 3;
- /**QAM128µ÷ÖÆ*/
- static const int MODULATION_QAM_128 = 4;
- /**QAM256µ÷ÖÆ*/
- static const int MODULATION_QAM_256 = 5;
- /**QAMµ÷ÖÆ(×Ô¶¯¼ì²â)*/
- static const int MODULATION_QAM_AUTO = 6;
- /**VSB8µ÷ÖÆ*/
- static const int MODULATION_VSB_8 = 7;
- /**VSB16µ÷ÖÆ*/
- static const int MODULATION_VSB_16 = 8;
- /**PSK8µ÷ÖÆ*/
- static const int MODULATION_PSK_8 = 9;
- /**APSK16µ÷ÖÆ*/
- static const int MODULATION_APSK_16 = 10;
- /**APSK32µ÷ÖÆ*/
- static const int MODULATION_APSK_32 = 11;
- /**DQPSKµ÷ÖÆ*/
- static const int MODULATION_DQPSK = 12;
-
- /**µ¥ÉùµÀ*/
- static const int AUDIO_MONO = 0x0000;
- /**Á¢ÌåÉù*/
- static const int AUDIO_STEREO = 0x0001;
- /**ÓïÑÔ2*/
- static const int AUDIO_LANG2 = 0x0002;
- /**SAP*/
- static const int AUDIO_SAP = 0x0002;
- /**ÓïÑÔ1*/
- static const int AUDIO_LANG1 = 0x0003;
- /**ÓïÑÔ1/2*/
- static const int AUDIO_LANG1_LANG2 = 0x0004;
-
- /**PAL B*/
- static const int STD_PAL_B = 0x00000001;
- /**PAL B1*/
- static const int STD_PAL_B1 = 0x00000002;
- /**PAL G*/
- static const int STD_PAL_G = 0x00000004;
- /**PAL H*/
- static const int STD_PAL_H = 0x00000008;
- /**PAL I*/
- static const int STD_PAL_I = 0x00000010;
- /**PAL D*/
- static const int STD_PAL_D = 0x00000020;
- /**PAL D1*/
- static const int STD_PAL_D1 = 0x00000040;
- /**PAL K*/
- static const int STD_PAL_K = 0x00000080;
- /**PAL M*/
- static const int STD_PAL_M = 0x00000100;
- /**PAL N*/
- static const int STD_PAL_N = 0x00000200;
- /**PAL Nc*/
- static const int STD_PAL_Nc = 0x00000400;
- /**PAL 60*/
- static const int STD_PAL_60 = 0x00000800;
- /**NTSC M*/
- static const int STD_NTSC_M = 0x00001000;
- /**NTSC M JP*/
- static const int STD_NTSC_M_JP = 0x00002000;
- /**NTSC 443*/
- static const int STD_NTSC_443 = 0x00004000;
- /**NTSC M KR*/
- static const int STD_NTSC_M_KR = 0x00008000;
- /**SECAM B*/
- static const int STD_SECAM_B = 0x00010000;
- /**SECAM D*/
- static const int STD_SECAM_D = 0x00020000;
- /**SECAM G*/
- static const int STD_SECAM_G = 0x00040000;
- /**SECAM H*/
- static const int STD_SECAM_H = 0x00080000;
- /**SECAM K*/
- static const int STD_SECAM_K = 0x00100000;
- /**SECAM K1*/
- static const int STD_SECAM_K1 = 0x00200000;
- /**SECAM L*/
- static const int STD_SECAM_L = 0x00400000;
- /**SECAM LC*/
- static const int STD_SECAM_LC = 0x00800000;
- /**ATSC VSB8*/
- static const int STD_ATSC_8_VSB = 0x01000000;
- /**ATSC VSB16*/
- static const int STD_ATSC_16_VSB = 0x02000000;
- /**NTSC*/
- static const int STD_NTSC = STD_NTSC_M | STD_NTSC_M_JP | STD_NTSC_M_KR;
- /**SECAM DK*/
- static const int STD_SECAM_DK = STD_SECAM_D | STD_SECAM_K | STD_SECAM_K1;
- /**SECAM*/
- static const int STD_SECAM = STD_SECAM_B | STD_SECAM_G | STD_SECAM_H | STD_SECAM_DK | STD_SECAM_L | STD_SECAM_LC;
- /**PAL BG*/
- static const int STD_PAL_BG = STD_PAL_B | STD_PAL_B1 | STD_PAL_G;
- /**PAL DK*/
- static const int STD_PAL_DK = STD_PAL_D | STD_PAL_D1 | STD_PAL_K;
- /**PAL*/
- static const int STD_PAL = STD_PAL_BG | STD_PAL_DK | STD_PAL_H | STD_PAL_I;
-
- //static const int TUNER_STD_MN = STD_PAL_M|STD_PAL_N|STD_PAL_Nc| STD_NTSC
- static const int STD_B = STD_PAL_B | STD_PAL_B1 | STD_SECAM_B;
- static const int STD_GH = STD_PAL_G | STD_PAL_H | STD_SECAM_G | STD_SECAM_H;
- static const int STD_DK = STD_PAL_DK | STD_SECAM_DK;
- static const int STD_M = STD_PAL_M | STD_NTSC_M;
- static const int STD_BG = STD_PAL_BG | STD_SECAM_B | STD_SECAM_G ;
-
- static const int COLOR_AUTO = 0x02000000;
- static const int COLOR_PAL = 0x04000000;
- static const int COLOR_NTSC = 0x08000000;
- static const int COLOR_SECAM = 0x10000000;
-
- /**ˮƽ¼«ÐÔ*/
- static const int SAT_POLARISATION_H = 0;
- /**´¹Ö±¼«ÏÞ*/
- static const int SAT_POLARISATION_V = 1;
-
-public:
- CTvChannel();
- CTvChannel(int dbID, int mode, int freq, int bw, int mod, int sym, int ofdm, int channelNum);
- ~CTvChannel();
- // ¸ù¾ÝTVChannelParams,ÏòÊý¾Ý¿âÌí¼ÓÒ»¸öChannel
-
- // *´´½¨µ±Ç°ÎÀÐÇËùÓÐͨµÀ
- // *@param sat_id ÎÀÐÇid
- // *@return ·µ»Ø´´½¨µÄͨµÀ
- static Vector<CTvChannel> tvChannelList(int sat_id);
- static int selectByID(int id, CTvChannel &c);
- static int updateByID(int progID, int std, int freq, int fineFreq);
- static int SelectByFreq(int freq, CTvChannel &channel);
- static int DeleteBetweenFreq(int beginFreq, int endFreq);
- static int CleanAllChannelBySrc(int src);
- static int getChannelListBySrc(int src, Vector< sp<CTvChannel> > &v_channel);
- void tvChannelDel();
- static void tvChannelDelBySatID(int id);
- int getID()
- {
- return id;
- };
- int getDVBTSID();
- void getDVBOrigNetID();
- void getFrontendID();
- void getTSSourceID();
- void isDVBCMode();
- void setFrequency();
- int getFrequency()
- {
- return frequency;
- }
- int getSymbolRate()
- {
- return symbolRate;
- }
- int getModulation()
- {
- return modulation;
- }
- int getBandwidth()
- {
- return bandwidth;
- }
- int getMode()
- {
- return mode;
- }
-
- int getStd()
- {
- return standard;
- };
- int getAfcData()
- {
- return afc_data;
- };
- int getLogicalChannelNum()
- {
- return logicalChannelNum;
- };
- // ÉèÖ÷ûºÅÂÊ(QPSK/QAMģʽ)
- // @param symbolRate ·ûºÅÂÊ
- void setSymbolRate();
- // ÉèÖü«ÐÔ(QPSKģʽ)
- void setPolarisation();
- void setATVAudio();
- // ÐÞ¸ÄÄ£ÄâÊÓƵÖÆʽ
- void setATVVideoFormat();
- void setATVAudioFormat();
- void setATVFreq();
- void setATVAfcData();
- //
-private:
-
- void createFromCursor(CTvDatabase::Cursor &c);
-
- //
- int id;
- int dvbTSID;
- int dvbOrigNetID;
- int fendID;
- int tsSourceID;
-
- int mode;
- int frequency;
- int symbolRate;
- int modulation;
- int bandwidth;
- int audio;
- int standard;
- int afc_data;
- int sat_id;
- int logicalChannelNum;
- //showboz
- //public TVSatelliteParams tv_satparams;
- int sat_polarisation;
-
-};
-
-#endif //_CTVCHANNEL_H
-
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvChannel.h
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+
+#if !defined(_CTVCHANNEL_H)
+#define _CTVCHANNEL_H
+#include <utils/Vector.h>
+#include "CTvDatabase.h"
+#include <utils/String8.h>
+#include <utils/RefBase.h>
+#include <stdlib.h>
+
+#include "CTvLog.h"
+using namespace android;
+// ¶ÔӦģÄâµçÊÓÖеÄÒ»¸öƵµã£¬Êý×ÖµçÊÓÖеÄÒ»¸öƵµãµ÷ÖƵÄTSÁ÷
+class CTvChannel: public LightRefBase<CTvChannel> {
+
+public :
+ static const int FE_HAS_SIGNAL = 0x01;
+ static const int FE_HAS_CARRIER = 0x02;
+ static const int FE_HAS_VITERBI = 0x04;
+ static const int FE_HAS_SYNC = 0x08;
+ /**Ëø¶¨*/
+ static const int FE_HAS_LOCK = 0x10;
+ /**³¬Ê±*/
+ static const int FE_TIMEDOUT = 0x20;
+ static const int FE_REINIT = 0x40;
+
+ /**QPSKģʽ*/
+ static const int MODE_QPSK = 0;
+ /**QAMģʽ*/
+ static const int MODE_QAM = 1;
+ /**OFDMģʽ*/
+ static const int MODE_OFDM = 2;
+ /**ATSCģʽ*/
+ static const int MODE_ATSC = 3;
+ /**Ä£Äâģʽ*/
+ static const int MODE_ANALOG = 4;
+ /**DTMBģʽ*/
+ static const int MODE_DTMB = 5;
+
+
+ /**8MHz´ø¿í*/
+ static const int BANDWIDTH_8_MHZ = 0;
+ /**7MHz´ø¿í*/
+ static const int BANDWIDTH_7_MHZ = 1;
+ /**6MHz´ø¿í*/
+ static const int BANDWIDTH_6_MHZ = 2;
+ /**×Ô¶¯´ø¿í¼ì²â*/
+ static const int BANDWIDTH_AUTO = 3;
+ /**5MHZ´ø¿í*/
+ static const int BANDWIDTH_5_MHZ = 4;
+ /**10MHZ´ø¿í*/
+ static const int BANDWIDTH_10_MHZ = 5;
+
+ /**QPSKµ÷ÖÆ*/
+ static const int MODULATION_QPSK = 0;
+ /**QAM16µ÷ÖÆ*/
+ static const int MODULATION_QAM_16 = 1;
+ /**QAM32µ÷ÖÆ*/
+ static const int MODULATION_QAM_32 = 2;
+ /**QAM64µ÷ÖÆ*/
+ static const int MODULATION_QAM_64 = 3;
+ /**QAM128µ÷ÖÆ*/
+ static const int MODULATION_QAM_128 = 4;
+ /**QAM256µ÷ÖÆ*/
+ static const int MODULATION_QAM_256 = 5;
+ /**QAMµ÷ÖÆ(×Ô¶¯¼ì²â)*/
+ static const int MODULATION_QAM_AUTO = 6;
+ /**VSB8µ÷ÖÆ*/
+ static const int MODULATION_VSB_8 = 7;
+ /**VSB16µ÷ÖÆ*/
+ static const int MODULATION_VSB_16 = 8;
+ /**PSK8µ÷ÖÆ*/
+ static const int MODULATION_PSK_8 = 9;
+ /**APSK16µ÷ÖÆ*/
+ static const int MODULATION_APSK_16 = 10;
+ /**APSK32µ÷ÖÆ*/
+ static const int MODULATION_APSK_32 = 11;
+ /**DQPSKµ÷ÖÆ*/
+ static const int MODULATION_DQPSK = 12;
+
+ /**µ¥ÉùµÀ*/
+ static const int AUDIO_MONO = 0x0000;
+ /**Á¢ÌåÉù*/
+ static const int AUDIO_STEREO = 0x0001;
+ /**ÓïÑÔ2*/
+ static const int AUDIO_LANG2 = 0x0002;
+ /**SAP*/
+ static const int AUDIO_SAP = 0x0002;
+ /**ÓïÑÔ1*/
+ static const int AUDIO_LANG1 = 0x0003;
+ /**ÓïÑÔ1/2*/
+ static const int AUDIO_LANG1_LANG2 = 0x0004;
+
+ /**PAL B*/
+ static const int STD_PAL_B = 0x00000001;
+ /**PAL B1*/
+ static const int STD_PAL_B1 = 0x00000002;
+ /**PAL G*/
+ static const int STD_PAL_G = 0x00000004;
+ /**PAL H*/
+ static const int STD_PAL_H = 0x00000008;
+ /**PAL I*/
+ static const int STD_PAL_I = 0x00000010;
+ /**PAL D*/
+ static const int STD_PAL_D = 0x00000020;
+ /**PAL D1*/
+ static const int STD_PAL_D1 = 0x00000040;
+ /**PAL K*/
+ static const int STD_PAL_K = 0x00000080;
+ /**PAL M*/
+ static const int STD_PAL_M = 0x00000100;
+ /**PAL N*/
+ static const int STD_PAL_N = 0x00000200;
+ /**PAL Nc*/
+ static const int STD_PAL_Nc = 0x00000400;
+ /**PAL 60*/
+ static const int STD_PAL_60 = 0x00000800;
+ /**NTSC M*/
+ static const int STD_NTSC_M = 0x00001000;
+ /**NTSC M JP*/
+ static const int STD_NTSC_M_JP = 0x00002000;
+ /**NTSC 443*/
+ static const int STD_NTSC_443 = 0x00004000;
+ /**NTSC M KR*/
+ static const int STD_NTSC_M_KR = 0x00008000;
+ /**SECAM B*/
+ static const int STD_SECAM_B = 0x00010000;
+ /**SECAM D*/
+ static const int STD_SECAM_D = 0x00020000;
+ /**SECAM G*/
+ static const int STD_SECAM_G = 0x00040000;
+ /**SECAM H*/
+ static const int STD_SECAM_H = 0x00080000;
+ /**SECAM K*/
+ static const int STD_SECAM_K = 0x00100000;
+ /**SECAM K1*/
+ static const int STD_SECAM_K1 = 0x00200000;
+ /**SECAM L*/
+ static const int STD_SECAM_L = 0x00400000;
+ /**SECAM LC*/
+ static const int STD_SECAM_LC = 0x00800000;
+ /**ATSC VSB8*/
+ static const int STD_ATSC_8_VSB = 0x01000000;
+ /**ATSC VSB16*/
+ static const int STD_ATSC_16_VSB = 0x02000000;
+ /**NTSC*/
+ static const int STD_NTSC = STD_NTSC_M | STD_NTSC_M_JP | STD_NTSC_M_KR;
+ /**SECAM DK*/
+ static const int STD_SECAM_DK = STD_SECAM_D | STD_SECAM_K | STD_SECAM_K1;
+ /**SECAM*/
+ static const int STD_SECAM = STD_SECAM_B | STD_SECAM_G | STD_SECAM_H | STD_SECAM_DK | STD_SECAM_L | STD_SECAM_LC;
+ /**PAL BG*/
+ static const int STD_PAL_BG = STD_PAL_B | STD_PAL_B1 | STD_PAL_G;
+ /**PAL DK*/
+ static const int STD_PAL_DK = STD_PAL_D | STD_PAL_D1 | STD_PAL_K;
+ /**PAL*/
+ static const int STD_PAL = STD_PAL_BG | STD_PAL_DK | STD_PAL_H | STD_PAL_I;
+
+ //static const int TUNER_STD_MN = STD_PAL_M|STD_PAL_N|STD_PAL_Nc| STD_NTSC
+ static const int STD_B = STD_PAL_B | STD_PAL_B1 | STD_SECAM_B;
+ static const int STD_GH = STD_PAL_G | STD_PAL_H | STD_SECAM_G | STD_SECAM_H;
+ static const int STD_DK = STD_PAL_DK | STD_SECAM_DK;
+ static const int STD_M = STD_PAL_M | STD_NTSC_M;
+ static const int STD_BG = STD_PAL_BG | STD_SECAM_B | STD_SECAM_G ;
+
+ static const int COLOR_AUTO = 0x02000000;
+ static const int COLOR_PAL = 0x04000000;
+ static const int COLOR_NTSC = 0x08000000;
+ static const int COLOR_SECAM = 0x10000000;
+
+ /**ˮƽ¼«ÐÔ*/
+ static const int SAT_POLARISATION_H = 0;
+ /**´¹Ö±¼«ÏÞ*/
+ static const int SAT_POLARISATION_V = 1;
+
+public:
+ CTvChannel();
+ CTvChannel(int dbID, int mode, int freq, int bw, int mod, int sym, int ofdm, int channelNum);
+ ~CTvChannel();
+ // ¸ù¾ÝTVChannelParams,ÏòÊý¾Ý¿âÌí¼ÓÒ»¸öChannel
+
+ // *´´½¨µ±Ç°ÎÀÐÇËùÓÐͨµÀ
+ // *@param sat_id ÎÀÐÇid
+ // *@return ·µ»Ø´´½¨µÄͨµÀ
+ static Vector<CTvChannel> tvChannelList(int sat_id);
+ static int selectByID(int id, CTvChannel &c);
+ static int updateByID(int progID, int std, int freq, int fineFreq);
+ static int SelectByFreq(int freq, CTvChannel &channel);
+ static int DeleteBetweenFreq(int beginFreq, int endFreq);
+ static int CleanAllChannelBySrc(int src);
+ static int getChannelListBySrc(int src, Vector< sp<CTvChannel> > &v_channel);
+ void tvChannelDel();
+ static void tvChannelDelBySatID(int id);
+ int getID()
+ {
+ return id;
+ };
+ int getDVBTSID();
+ void getDVBOrigNetID();
+ void getFrontendID();
+ void getTSSourceID();
+ void isDVBCMode();
+ void setFrequency();
+ int getFrequency()
+ {
+ return frequency;
+ }
+ int getSymbolRate()
+ {
+ return symbolRate;
+ }
+ int getModulation()
+ {
+ return modulation;
+ }
+ int getBandwidth()
+ {
+ return bandwidth;
+ }
+ int getMode()
+ {
+ return mode;
+ }
+
+ int getStd()
+ {
+ return standard;
+ };
+ int getAfcData()
+ {
+ return afc_data;
+ };
+ int getLogicalChannelNum()
+ {
+ return logicalChannelNum;
+ };
+ // ÉèÖ÷ûºÅÂÊ(QPSK/QAMģʽ)
+ // @param symbolRate ·ûºÅÂÊ
+ void setSymbolRate();
+ // ÉèÖü«ÐÔ(QPSKģʽ)
+ void setPolarisation();
+ void setATVAudio();
+ // ÐÞ¸ÄÄ£ÄâÊÓƵÖÆʽ
+ void setATVVideoFormat();
+ void setATVAudioFormat();
+ void setATVFreq();
+ void setATVAfcData();
+ //
+private:
+
+ void createFromCursor(CTvDatabase::Cursor &c);
+
+ //
+ int id;
+ int dvbTSID;
+ int dvbOrigNetID;
+ int fendID;
+ int tsSourceID;
+
+ int mode;
+ int frequency;
+ int symbolRate;
+ int modulation;
+ int bandwidth;
+ int audio;
+ int standard;
+ int afc_data;
+ int sat_id;
+ int logicalChannelNum;
+ //showboz
+ //public TVSatelliteParams tv_satparams;
+ int sat_polarisation;
+
+};
+
+#endif //_CTVCHANNEL_H
+
diff --git a/tvapi/libtv/tvdb/CTvDatabase.cpp b/tvapi/libtv/tvdb/CTvDatabase.cpp
index 9b8698b..02aa833 100644
--- a/tvapi/libtv/tvdb/CTvDatabase.cpp
+++ b/tvapi/libtv/tvdb/CTvDatabase.cpp
@@ -30,9 +30,9 @@ const char CTvDatabase::feTypes[][32] = {"dvbs", "dvbc", "dvbt", "atsc", "analog
const char CTvDatabase::srvTypes[][32] = {"other", "dtv", "radio", "atv", "other"};
const char CTvDatabase::vidFmts[][32] = {"mpeg12", "mpeg4", "h264", "mjpeg", "real", "jpeg", "vc1", "avs"};
const char CTvDatabase::audFmts[][32] = {"mpeg", "pcm_s16le", "aac", "ac3", "alaw", "mulaw", "dts", "pcm_s16be",
- "flac", "cook", "pcm_u8", "adpcm", "amr", "raac", "wma", "wma_pro",
- "pcm_bluray", "alac", "vorbis", "aac_latm", "ape", "eac3", "pcm_wifidisplay"
- };
+ "flac", "cook", "pcm_u8", "adpcm", "amr", "raac", "wma", "wma_pro",
+ "pcm_bluray", "alac", "vorbis", "aac_latm", "ape", "eac3", "pcm_wifidisplay"
+ };
const char CTvDatabase::mods[][32] = {"qpsk", "qam16", "qam32", "qam64", "qam128", "qam256", "qamauto", "vsb8", "vsb16", "psk8", "apsk16", "apsk32", "dqpsk"};
const char CTvDatabase::bandwidths[][32] = {"8", "7", "6", "auto", "5", "10", "1_712"};
const char CTvDatabase::lnbPowers[][32] = {"13v", "18V", "off", "13/18v"};
@@ -40,8 +40,8 @@ const char CTvDatabase::sig22K[][32] = {"on", "off", "auto"};
const char CTvDatabase::tonebursts[][32] = {"none", "bursta", "burstb"};
const char CTvDatabase::diseqc10s[][32] = {"lnb1", "lnb2", "lnb3", "lnb4", "none"};
const char CTvDatabase::diseqc11s[][32] = {"lnb1", "lnb2", "lnb3", "lnb4", "lnb5", "lnb6", "lnb7", "lnb8",
- "lnb9", "lnb10", "lnb11", "lnb12", "lnb13", "lnb14", "lnb15", "lnb16", "none"
- };
+ "lnb9", "lnb10", "lnb11", "lnb12", "lnb13", "lnb14", "lnb15", "lnb16", "none"
+ };
const char CTvDatabase::motors[][32] = {"none", "none", "none", "diseqc1.2", "diseqc1.3"};
const char CTvDatabase::ofdmModes[][32] = {"dvbt", "dvbt2"};
const char CTvDatabase::atvVideoStds[][32] = {"auto", "pal", "ntsc", "secam"};
@@ -53,57 +53,57 @@ CTvDatabase::CTvDatabase()
int CTvDatabase::isFreqListExist()
{
- String8 cmd = String8("select * from region_table");
- CTvDatabase::Cursor c;
- select(cmd, c);
- return c.moveToFirst();
+ String8 cmd = String8("select * from region_table");
+ CTvDatabase::Cursor c;
+ select(cmd, c);
+ return c.moveToFirst();
}
int CTvDatabase::UnInitTvDb()
{
- AM_DB_UnSetup();
- return 0;
+ AM_DB_UnSetup();
+ return 0;
}
int CTvDatabase::InitTvDb(const char *path)
{
- if (path != NULL) {
- if (Tv_Utils_IsFileExist(path) == 0 && config_get_int("TV", "tv_db_created", 0) == 1) { //exist or created
- LOGD("tv db file(%s) exist and created, open it", path);
- if (openDb(path) < 0 ) {
- LOGD("db(%s) open fail", path);
- return -1;
- }
- //setup and path set
- AM_DB_Setup((char *)path, getHandle());
- if (isFreqListExist() == false) {
- importXmlToDB("/etc/tv_default.xml");
- LOGD("scan region table is NULL, so import freq XML again\n");
- }
- } else {
- if (Tv_Utils_IsFileExist(path) == 0) { // if just exist, create flag not set, delete it
- LOGD("tv db file (%s) exist, but delete it", path);
- if (unlink(path) != 0) {
- LOGD("delete tv db file(%s) err=%s", path, strerror(errno));
- }
- }
- LOGD("tv db file(%s) not exist, create it", path);
- //setup and path set
- sqlite3 *h = NULL;
- AM_DB_Setup((char *)path, h);
- //create db
- AM_DB_GetHandle(&h);
- //create table
- AM_DB_CreateTables(h);
- setHandle(h);
- //clear db
- ClearDbTable();
- //insert 256 ATV Program
- //load init date
- importXmlToDB("/etc/tv_default.xml");
- config_set_int("TV", "tv_db_created", 1);
- }
+ if(path != NULL) {
+ if(Tv_Utils_IsFileExist(path) == 0 && config_get_int("TV", "tv_db_created", 0) == 1) { //exist or created
+ LOGD("tv db file(%s) exist and created, open it", path);
+ if(openDb(path) < 0 ) {
+ LOGD("db(%s) open fail", path);
+ return -1;
+ }
+ //setup and path set
+ AM_DB_Setup((char *)path, getHandle());
+ if(isFreqListExist() == false) {
+ importXmlToDB("/etc/tv_default.xml");
+ LOGD("scan region table is NULL, so import freq XML again\n");
+ }
+ } else {
+ if(Tv_Utils_IsFileExist(path) == 0) { // if just exist, create flag not set, delete it
+ LOGD("tv db file (%s) exist, but delete it", path);
+ if(unlink(path) != 0) {
+ LOGD("delete tv db file(%s) err=%s", path, strerror(errno));
+ }
+ }
+ LOGD("tv db file(%s) not exist, create it", path);
+ //setup and path set
+ sqlite3 *h = NULL;
+ AM_DB_Setup((char *)path, h);
+ //create db
+ AM_DB_GetHandle(&h);
+ //create table
+ AM_DB_CreateTables(h);
+ setHandle(h);
+ //clear db
+ ClearDbTable();
+ //insert 256 ATV Program
+ //load init date
+ importXmlToDB("/etc/tv_default.xml");
+ config_set_int("TV", "tv_db_created", 1);
+ }
- }
- return 0;
+ }
+ return 0;
}
//CTvDatabase::CTvDatabase(char* path, sqlite3 * h)
//{
@@ -119,141 +119,141 @@ int CTvDatabase::InitTvDb(const char *path)
CTvDatabase::~CTvDatabase()
{
- AM_DB_UnSetup();
+ AM_DB_UnSetup();
}
int CTvDatabase::getChannelParaList(char *path, Vector<sp<ChannelPara> > &vcp)
{
- //?????o?????aXML????????£?ˉ1è±????
- TiXmlDocument myDocument(path);
- bool ret = myDocument.LoadFile();
- //è?·?????1????′?
- TiXmlElement *RootElement = myDocument.RootElement();
- //dvbc
- TiXmlElement *channel_list_element = RootElement->FirstChildElement("channel_list");
- for (TiXmlElement *channel_entry = channel_list_element->FirstChildElement("channel_entry") ; channel_entry != NULL; channel_entry = channel_entry->NextSiblingElement("channel_entry")) {
- sp<ChannelPara> pCp = new ChannelPara();
- channel_entry->Attribute("frequency", &(pCp->freq));
- channel_entry->Attribute("modulation", &(pCp->modulation));
- channel_entry->Attribute("symbol_rate", &(pCp->symbol_rate));
- vcp.push_back(pCp);
- }
- return vcp.size();
+ //?????o?????aXML????????£?ˉ1è±????
+ TiXmlDocument myDocument(path);
+ bool ret = myDocument.LoadFile();
+ //è?·?????1????′?
+ TiXmlElement *RootElement = myDocument.RootElement();
+ //dvbc
+ TiXmlElement *channel_list_element = RootElement->FirstChildElement("channel_list");
+ for(TiXmlElement *channel_entry = channel_list_element->FirstChildElement("channel_entry") ; channel_entry != NULL; channel_entry = channel_entry->NextSiblingElement("channel_entry")) {
+ sp<ChannelPara> pCp = new ChannelPara();
+ channel_entry->Attribute("frequency", &(pCp->freq));
+ channel_entry->Attribute("modulation", &(pCp->modulation));
+ channel_entry->Attribute("symbol_rate", &(pCp->symbol_rate));
+ vcp.push_back(pCp);
+ }
+ return vcp.size();
}
int CTvDatabase::ClearDbTable()
{
- LOGD(LOG_TAG, "Clearing database ...");
- exeSql("delete from net_table");
- exeSql("delete from ts_table");
- exeSql("delete from srv_table");
- exeSql("delete from evt_table");
- exeSql("delete from booking_table");
- exeSql("delete from grp_table");
- exeSql("delete from grp_map_table");
- exeSql("delete from dimension_table");
- exeSql("delete from sat_para_table");
- exeSql("delete from region_table");
- return 0;
+ LOGD(LOG_TAG, "Clearing database ...");
+ exeSql("delete from net_table");
+ exeSql("delete from ts_table");
+ exeSql("delete from srv_table");
+ exeSql("delete from evt_table");
+ exeSql("delete from booking_table");
+ exeSql("delete from grp_table");
+ exeSql("delete from grp_map_table");
+ exeSql("delete from dimension_table");
+ exeSql("delete from sat_para_table");
+ exeSql("delete from region_table");
+ return 0;
}
int CTvDatabase::clearDbAllProgramInfoTable()
{
- LOGD(LOG_TAG, "Clearing clearDbAllProgramInfoTable ...");
- exeSql("delete from net_table");
- exeSql("delete from ts_table");
- exeSql("delete from srv_table");
- exeSql("delete from evt_table");
- exeSql("delete from booking_table");
- exeSql("delete from grp_table");
- exeSql("delete from grp_map_table");
- exeSql("delete from dimension_table");
- exeSql("delete from sat_para_table");
- return 0;
+ LOGD(LOG_TAG, "Clearing clearDbAllProgramInfoTable ...");
+ exeSql("delete from net_table");
+ exeSql("delete from ts_table");
+ exeSql("delete from srv_table");
+ exeSql("delete from evt_table");
+ exeSql("delete from booking_table");
+ exeSql("delete from grp_table");
+ exeSql("delete from grp_map_table");
+ exeSql("delete from dimension_table");
+ exeSql("delete from sat_para_table");
+ return 0;
}
//showboz now just channellist
int CTvDatabase::importXmlToDB(const char *xmlPath)
{
- //delete region table before importing xml
- exeSql("delete from region_table");
+ //delete region table before importing xml
+ exeSql("delete from region_table");
- //?????o?????aXML????????£?ˉ1è±????
- TiXmlDocument myDocument(xmlPath);
- bool ret = myDocument.LoadFile();
+ //?????o?????aXML????????£?ˉ1è±????
+ TiXmlDocument myDocument(xmlPath);
+ bool ret = myDocument.LoadFile();
- //è?·?????1????′?
- TiXmlElement *RootElement = myDocument.RootElement();
- beginTransaction();//-----------------------------------------------
- //list-->entry
- for (TiXmlElement *channel_list_element = RootElement->FirstChildElement("channel_list"); channel_list_element != NULL; channel_list_element = channel_list_element->NextSiblingElement("channel_list")) {
- //LOGD("showboz-----channel_list =%d", channel_list_element);
- const char *channel_name = channel_list_element->Attribute("name");
- const char *channel_fe_type = channel_list_element->Attribute("fe_type");
- //LOGD("showboz-----channel_list name = %s type=%s", channel_name, channel_fe_type);
+ //è?·?????1????′?
+ TiXmlElement *RootElement = myDocument.RootElement();
+ beginTransaction();//-----------------------------------------------
+ //list-->entry
+ for(TiXmlElement *channel_list_element = RootElement->FirstChildElement("channel_list"); channel_list_element != NULL; channel_list_element = channel_list_element->NextSiblingElement("channel_list")) {
+ //LOGD("showboz-----channel_list =%d", channel_list_element);
+ const char *channel_name = channel_list_element->Attribute("name");
+ const char *channel_fe_type = channel_list_element->Attribute("fe_type");
+ //LOGD("showboz-----channel_list name = %s type=%s", channel_name, channel_fe_type);
- for (TiXmlElement *channel_entry = channel_list_element->FirstChildElement("channel_entry") ; channel_entry != NULL; channel_entry = channel_entry->NextSiblingElement("channel_entry")) {
- int freq, symb, channelNum;
- String8 cmd = String8("insert into region_table(name,fe_type,frequency,symbol_rate,modulation,bandwidth,ofdm_mode,logical_channel_num)");
- cmd += String8("values('") + channel_name + String8("',") + String8::format("%d", StringToIndex(feTypes, channel_fe_type)) + String8(",");
- channel_entry->Attribute("frequency", &freq);
- cmd += String8::format("%d", freq) + String8(",");
- channel_entry->Attribute("symbol_rate", &symb);
- cmd += String8::format("%d", symb) + String8(",");
- //LOGD("showboz---------m=%s,b=%s,o=%s", channel_entry->Attribute("modulation"), channel_entry->Attribute("bandwidth"), channel_entry->Attribute("ofdm_mode"));
- cmd += String8::format("%d", StringToIndex(mods, channel_entry->Attribute("modulation"))) + String8(",");
- cmd += String8::format("%d", StringToIndex(bandwidths, channel_entry->Attribute("bandwidth"))) + String8(",");
- cmd += String8::format("%d", StringToIndex(ofdmModes, channel_entry->Attribute("ofdm_mode"))) + String8(",");
- channel_entry->Attribute("logical_channel_num", &channelNum);
- cmd += String8::format("%d", channelNum) + String8(")");
- exeSql(cmd.string());
- }
- }
+ for(TiXmlElement *channel_entry = channel_list_element->FirstChildElement("channel_entry") ; channel_entry != NULL; channel_entry = channel_entry->NextSiblingElement("channel_entry")) {
+ int freq, symb, channelNum;
+ String8 cmd = String8("insert into region_table(name,fe_type,frequency,symbol_rate,modulation,bandwidth,ofdm_mode,logical_channel_num)");
+ cmd += String8("values('") + channel_name + String8("',") + String8::format("%d", StringToIndex(feTypes, channel_fe_type)) + String8(",");
+ channel_entry->Attribute("frequency", &freq);
+ cmd += String8::format("%d", freq) + String8(",");
+ channel_entry->Attribute("symbol_rate", &symb);
+ cmd += String8::format("%d", symb) + String8(",");
+ //LOGD("showboz---------m=%s,b=%s,o=%s", channel_entry->Attribute("modulation"), channel_entry->Attribute("bandwidth"), channel_entry->Attribute("ofdm_mode"));
+ cmd += String8::format("%d", StringToIndex(mods, channel_entry->Attribute("modulation"))) + String8(",");
+ cmd += String8::format("%d", StringToIndex(bandwidths, channel_entry->Attribute("bandwidth"))) + String8(",");
+ cmd += String8::format("%d", StringToIndex(ofdmModes, channel_entry->Attribute("ofdm_mode"))) + String8(",");
+ channel_entry->Attribute("logical_channel_num", &channelNum);
+ cmd += String8::format("%d", channelNum) + String8(")");
+ exeSql(cmd.string());
+ }
+ }
- commitTransaction();//------------------------------------------------------
- return 0;
+ commitTransaction();//------------------------------------------------------
+ return 0;
}
bool CTvDatabase::isAtv256ProgInsertForSkyworth()
{
- String8 select_ts_atvcount = String8("select * from ts_table where src = 4");
- Cursor c;
- select(select_ts_atvcount, c);
- return c.getCount() < 256 ? false : true;
+ String8 select_ts_atvcount = String8("select * from ts_table where src = 4");
+ Cursor c;
+ select(select_ts_atvcount, c);
+ return c.getCount() < 256 ? false : true;
}
int CTvDatabase::insert256AtvProgForSkyworth()
{
- beginTransaction();
- for (int i = 0; i < 256; i++) {
- String8 insert_ts = String8("insert into ts_table(db_id, src, db_net_id, ts_id, freq, symb, mod, bw, snr, ber, strength, db_sat_para_id, polar, std, aud_mode, flags, dvbt_flag) values (");
- insert_ts += String8::format("'%d'", i);
- insert_ts += String8(", '4', '-1', '-1', '44250000', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '1', '0', '0')");
- exeSql(insert_ts.string());
- String8 insert_srv = String8("insert into srv_table(db_id, src, db_net_id, db_ts_id, name, service_id, service_type, eit_schedule_flag, eit_pf_flag, running_status, free_ca_mode, volume, aud_track, pmt_pid, vid_pid, vid_fmt, scrambled_flag, current_aud, aud_pids, aud_fmts, aud_langs, aud_types, current_sub, sub_pids, sub_types, sub_composition_page_ids, sub_ancillary_page_ids, sub_langs, current_ttx, ttx_pids, ttx_types, ttx_magazine_nos, ttx_page_nos, ttx_langs, chan_num, skip, lock, favor, lcn, sd_lcn, hd_lcn, default_chan_num, chan_order, lcn_order, service_id_order, hd_sd_order, db_sat_para_id, dvbt2_plp_id, major_chan_num, minor_chan_num, access_controlled, hidden, hide_guide, source_id, sdt_ver) values (");
- insert_srv += String8::format("'%d'", i);
- insert_srv += String8(" , '4', '-1', ");
- insert_srv += String8::format("'%d'", i);
- insert_srv += String8(", 'xxxATV Program', '-1', '3', '-1', '-1', '-1', '-1', '50', '1', '-1', '-1', '-1', '0', '-1', '-1', '-1', 'Audio1', '0', '-1', ' ', ' ', ' ', ' ', ' ', '-1', ' ', ' ', ' ', ' ', ' ', '-1', '1', '0', '0', '-1', '-1', '-1', '1', ");
- insert_srv += String8::format("'%d'", i);
- insert_srv += String8(" , '0', '0', '0', '-1', '255', '0', '0', '0', '0', '0', '0', '255') ");
- exeSql(insert_srv.string());
- }
- commitTransaction();
- return 0;
+ beginTransaction();
+ for (int i = 0; i < 256; i++) {
+ String8 insert_ts = String8("insert into ts_table(db_id, src, db_net_id, ts_id, freq, symb, mod, bw, snr, ber, strength, db_sat_para_id, polar, std, aud_mode, flags, dvbt_flag) values (");
+ insert_ts += String8::format("'%d'", i);
+ insert_ts += String8(", '4', '-1', '-1', '44250000', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '1', '0', '0')");
+ exeSql(insert_ts.string());
+ String8 insert_srv = String8("insert into srv_table(db_id, src, db_net_id, db_ts_id, name, service_id, service_type, eit_schedule_flag, eit_pf_flag, running_status, free_ca_mode, volume, aud_track, pmt_pid, vid_pid, vid_fmt, scrambled_flag, current_aud, aud_pids, aud_fmts, aud_langs, aud_types, current_sub, sub_pids, sub_types, sub_composition_page_ids, sub_ancillary_page_ids, sub_langs, current_ttx, ttx_pids, ttx_types, ttx_magazine_nos, ttx_page_nos, ttx_langs, chan_num, skip, lock, favor, lcn, sd_lcn, hd_lcn, default_chan_num, chan_order, lcn_order, service_id_order, hd_sd_order, db_sat_para_id, dvbt2_plp_id, major_chan_num, minor_chan_num, access_controlled, hidden, hide_guide, source_id, sdt_ver) values (");
+ insert_srv += String8::format("'%d'", i);
+ insert_srv += String8(" , '4', '-1', ");
+ insert_srv += String8::format("'%d'", i);
+ insert_srv += String8(", 'xxxATV Program', '-1', '3', '-1', '-1', '-1', '-1', '50', '1', '-1', '-1', '-1', '0', '-1', '-1', '-1', 'Audio1', '0', '-1', ' ', ' ', ' ', ' ', ' ', '-1', ' ', ' ', ' ', ' ', ' ', '-1', '1', '0', '0', '-1', '-1', '-1', '1', ");
+ insert_srv += String8::format("'%d'", i);
+ insert_srv += String8(" , '0', '0', '0', '-1', '255', '0', '0', '0', '0', '0', '0', '255') ");
+ exeSql(insert_srv.string());
+ }
+ commitTransaction();
+ return 0;
}
void CTvDatabase::deleteTvDb()
{
- if (mpDb != NULL) {
- delete mpDb;
- mpDb = NULL;
- }
+ if(mpDb != NULL) {
+ delete mpDb;
+ mpDb = NULL;
+ }
}
CTvDatabase *CTvDatabase::GetTvDb()
{
- if (mpDb == NULL) {
- mpDb = new CTvDatabase();
- }
- return mpDb;
+ if(mpDb == NULL) {
+ mpDb = new CTvDatabase();
+ }
+ return mpDb;
}
diff --git a/tvapi/libtv/tvdb/CTvDatabase.h b/tvapi/libtv/tvdb/CTvDatabase.h
index c5a4318..69f528d 100644
--- a/tvapi/libtv/tvdb/CTvDatabase.h
+++ b/tvapi/libtv/tvdb/CTvDatabase.h
@@ -1,96 +1,94 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvDatabase.h
-// @ Date : 2013-11
-// @ Author :
-//
-//
-#include <am_db.h>
-#if !defined(_CTVDATABASE_H)
-#define _CTVDATABASE_H
-// ʹÓÃAM_DB
-#include <unistd.h>
-#include <stdlib.h>
-#include <utils/String8.h>
-#include <utils/Log.h>
-#include <utils/Vector.h>
-#include <utils/RefBase.h>
-#include <tvutils/CSqlite.h>
-
-#include "CTvLog.h"
-
-
-using namespace android;
-//¸ù¾ÝÏÖÔÚÇé¿öÐèÇó,´ËÀàÖ»Õë¶ÔµçÊÓ¹¦Äܰ󶨵ĵ¥ÎļþÊý¾Ý¿â,ÓëAM_DBÓйØÁªÐÔ
-//ÎÞ½âµÄ¹ØÁª
-class CTvDatabase: public CSqlite
-{
-public:
- static const char *DEFAULT_DB_PATH;
- static const int DB_VERSION = 8;
- static const char *DB_VERSION_FIELD;
-
- static const char feTypes[][32];
- static const char srvTypes[][32];
- static const char vidFmts[][32];
- static const char audFmts[][32];
- static const char mods[][32];
- static const char bandwidths[][32];
- static const char lnbPowers[][32];
- static const char sig22K[][32];
- static const char tonebursts[][32];
- static const char diseqc10s[][32];
- static const char diseqc11s[][32];
- static const char motors[][32];
- static const char ofdmModes[][32];
- static const char atvVideoStds[][32];
- static const char atvAudioStds[][32];
- template<typename T>
- int StringToIndex(const T &t, const char *item)
- {
- if (item == NULL) return -1;
- int size = sizeof(t) / sizeof(t[0]);
- for (int i = 0; i < size; i++) {
- if (strcmp(t[i], item) == 0) return i;
- }
- return -1;
- }
-public:
- CTvDatabase();
- //Ö±½ÓÖ¸¶¨Êý¾Ý¿âÁ¬½Ó¾ä±ú
- //CTvDatabase(char* path, sqlite3 * h);
- static CTvDatabase *GetTvDb();
- static void deleteTvDb();
- ~CTvDatabase();
- //ÓÃÖ¸¶¨Â·¾¶´´½¨TVÊý¾Ý¿â.
- int UnInitTvDb();
- int InitTvDb(const char *path);
- //showboz test
- class ChannelPara : public LightRefBase<ChannelPara>
- {
- public:
- int mode;
- int freq;
- int symbol_rate;
- int modulation;
- int bandwidth;
- int polar;
- };
-
- static int getChannelParaList(char *path, Vector<sp<ChannelPara> > &vcp);
-
- int importDbToXml();
- int importXmlToDB(const char *xmlPath);
- bool isAtv256ProgInsertForSkyworth();
- int insert256AtvProgForSkyworth();
- int ClearDbTable();
- int clearDbAllProgramInfoTable();
-private:
- static CTvDatabase *mpDb;
- int isFreqListExist(void);
-};
-
-#endif //_CTVDATABASE_H
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvDatabase.h
+// @ Date : 2013-11
+// @ Author :
+//
+//
+#include <am_db.h>
+#if !defined(_CTVDATABASE_H)
+#define _CTVDATABASE_H
+// ʹÓÃAM_DB
+#include <unistd.h>
+#include <stdlib.h>
+#include <utils/String8.h>
+#include <utils/Log.h>
+#include <utils/Vector.h>
+#include <utils/RefBase.h>
+#include <tvutils/CSqlite.h>
+
+#include "CTvLog.h"
+
+
+using namespace android;
+//¸ù¾ÝÏÖÔÚÇé¿öÐèÇó,´ËÀàÖ»Õë¶ÔµçÊÓ¹¦Äܰ󶨵ĵ¥ÎļþÊý¾Ý¿â,ÓëAM_DBÓйØÁªÐÔ
+//ÎÞ½âµÄ¹ØÁª
+class CTvDatabase: public CSqlite {
+public:
+ static const char *DEFAULT_DB_PATH;
+ static const int DB_VERSION = 8;
+ static const char *DB_VERSION_FIELD;
+
+ static const char feTypes[][32];
+ static const char srvTypes[][32];
+ static const char vidFmts[][32];
+ static const char audFmts[][32];
+ static const char mods[][32];
+ static const char bandwidths[][32];
+ static const char lnbPowers[][32];
+ static const char sig22K[][32];
+ static const char tonebursts[][32];
+ static const char diseqc10s[][32];
+ static const char diseqc11s[][32];
+ static const char motors[][32];
+ static const char ofdmModes[][32];
+ static const char atvVideoStds[][32];
+ static const char atvAudioStds[][32];
+ template<typename T>
+ int StringToIndex(const T &t, const char *item)
+ {
+ if(item == NULL) return -1;
+ int size = sizeof(t) / sizeof(t[0]);
+ for(int i = 0; i < size; i++) {
+ if(strcmp(t[i], item) == 0) return i;
+ }
+ return -1;
+ }
+public:
+ CTvDatabase();
+ //Ö±½ÓÖ¸¶¨Êý¾Ý¿âÁ¬½Ó¾ä±ú
+ //CTvDatabase(char* path, sqlite3 * h);
+ static CTvDatabase *GetTvDb();
+ static void deleteTvDb();
+ ~CTvDatabase();
+ //ÓÃÖ¸¶¨Â·¾¶´´½¨TVÊý¾Ý¿â.
+ int UnInitTvDb();
+ int InitTvDb(const char *path);
+ //showboz test
+ class ChannelPara : public LightRefBase<ChannelPara> {
+ public:
+ int mode;
+ int freq;
+ int symbol_rate;
+ int modulation;
+ int bandwidth;
+ int polar;
+ };
+
+ static int getChannelParaList(char *path, Vector<sp<ChannelPara> > &vcp);
+
+ int importDbToXml();
+ int importXmlToDB(const char *xmlPath);
+ bool isAtv256ProgInsertForSkyworth();
+ int insert256AtvProgForSkyworth();
+ int ClearDbTable();
+ int clearDbAllProgramInfoTable();
+private:
+ static CTvDatabase *mpDb;
+ int isFreqListExist(void);
+};
+
+#endif //_CTVDATABASE_H
diff --git a/tvapi/libtv/tvdb/CTvDimension.cpp b/tvapi/libtv/tvdb/CTvDimension.cpp
index 176dde8..c10df5d 100644
--- a/tvapi/libtv/tvdb/CTvDimension.cpp
+++ b/tvapi/libtv/tvdb/CTvDimension.cpp
@@ -17,54 +17,54 @@
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;
- }
+ 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);
+ createFromCursor(c);
}
CTvDimension::CTvDimension()
{
@@ -72,78 +72,78 @@ CTvDimension::CTvDimension()
}
CTvDimension::~CTvDimension()
{
- if (lockValues != NULL) {
- delete []lockValues;
- }
- if (textValues != NULL) {
- delete []textValues;
- }
- if (abbrevValues != NULL) {
- delete []abbrevValues;
- }
+ 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;
+ 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;
+ int len = 0;
+ int j = 0;
- CTvDimension dm5;
+ CTvDimension dm5;
- selectByIndex(dm5, REGION_US, 5);
- len = dm5.getDefinedValue();
- String8 dm5Abbrev[len - 1];
- dm5.getAbbrev(dm5Abbrev);
+ 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;
- }
- }
+ 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);
+ 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;
+ for (j = 0; j < len - 1; j++) {
+ if (abbrev == dm0Abbrev[j]) {
+ dm0.setLockStatus(j + 1, lock);
+ return;
+ }
+ }
+ return;
}
@@ -156,19 +156,19 @@ void CTvDimension::setUSPGAllLockStatus(String8 abbrev, int lock)
*/
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);
+ 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();
+ if(c.moveToFirst()) {
+ dm.createFromCursor(c);
+ LOGD("%s, %d success", "TV", __LINE__);
+ } else {
+ LOGD("%s, %d fail", "TV", __LINE__);
+ c.close();
+ return;
+ }
+ c.close();
}
@@ -180,19 +180,19 @@ void CTvDimension::selectByID(CTvDimension &dm, int id)
*/
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);
+ 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();
+ if(c.moveToFirst()) {
+ dm.createFromCursor(c);
+ LOGD("%s, %d success", "TV", __LINE__);
+ } else {
+ LOGD("%s, %d fail", "TV", __LINE__);
+ c.close();
+ return;
+ }
+ c.close();
}
/**
@@ -204,22 +204,22 @@ void CTvDimension::selectByRatingRegion(CTvDimension &dm, int ratingRegionID)
*/
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);
+ 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();
+ 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;
+ return 0;
}
/**
@@ -231,22 +231,22 @@ int CTvDimension::selectByIndex(CTvDimension &dm, int ratingRegionID, int index)
*/
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);
+ 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();
+ 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;
+ return;
}
@@ -258,14 +258,14 @@ void CTvDimension::selectByName(CTvDimension &dm, int ratingRegionID, String8 di
*/
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);
- }
+ 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;
+ return false;
}
/**
@@ -274,7 +274,7 @@ bool CTvDimension::isBlocked(CTvDimension &dm, VChipRating *definedRating)
*/
int CTvDimension::getID()
{
- return id;
+ return id;
}
/**
@@ -283,12 +283,12 @@ int CTvDimension::getID()
*/
int CTvDimension::getRatingRegion()
{
- return ratingRegion;
+ return ratingRegion;
}
int CTvDimension::getDefinedValue()
{
- return valuesDefined;
+ return valuesDefined;
}
/**
*å–å¾— rating region å称
@@ -296,7 +296,7 @@ int CTvDimension::getDefinedValue()
*/
String8 CTvDimension::getRatingRegionName()
{
- return ratingRegionName;
+ return ratingRegionName;
}
/**
@@ -305,7 +305,7 @@ String8 CTvDimension::getRatingRegionName()
*/
String8 CTvDimension::getName()
{
- return name;
+ return name;
}
/**
@@ -314,7 +314,7 @@ String8 CTvDimension::getName()
*/
int CTvDimension::getGraduatedScale()
{
- return graduatedScale;
+ return graduatedScale;
}
/**
@@ -324,20 +324,20 @@ int CTvDimension::getGraduatedScale()
#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;
- }
+ 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
/**
@@ -347,12 +347,12 @@ int *CTvDimension::getLockStatus()
*/
int CTvDimension::getLockStatus(int valueIndex)
{
- int len = getDefinedValue();
- if (valueIndex >= len) {
- return -1;
- } else {
- return lockValues[valueIndex];
- }
+ int len = getDefinedValue();
+ if (valueIndex >= len) {
+ return -1;
+ } else {
+ return lockValues[valueIndex];
+ }
}
/**
@@ -362,21 +362,21 @@ int CTvDimension::getLockStatus(int valueIndex)
*/
void CTvDimension::getLockStatus(String8 abbrevs[], int lock[], int *array_len)
{
- int i = 0;
- int len = getDefinedValue();
+ 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;
+ 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;
}
/**
@@ -385,15 +385,15 @@ void CTvDimension::getLockStatus(String8 abbrevs[], int lock[], int *array_len)
*/
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;
- }
+ /* 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;
+ }
}
/**
@@ -402,11 +402,11 @@ int CTvDimension::getAbbrev(String8 abb[])
*/
String8 CTvDimension::getAbbrev(int valueIndex)
{
- int len = getDefinedValue();
- if (valueIndex >= len)
- return String8("");
- else
- return abbrevValues[valueIndex];
+ int len = getDefinedValue();
+ if (valueIndex >= len)
+ return String8("");
+ else
+ return abbrevValues[valueIndex];
}
/**
@@ -415,14 +415,14 @@ String8 CTvDimension::getAbbrev(int valueIndex)
*/
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;
- }
+ int len = getDefinedValue();
+ if (len > 1) {
+ for(int i = 0; i < len - 1; i++)
+ tx[i] = textValues[i + 1];
+ return 0;
+ } else {
+ return -1;
+ }
}
/**
@@ -431,11 +431,11 @@ int CTvDimension::getText(String8 tx[])
*/
String8 CTvDimension::getText(int valueIndex)
{
- int len = getDefinedValue();
- if (valueIndex >= len)
- return String8("");
- else
- return textValues[valueIndex];
+ int len = getDefinedValue();
+ if (valueIndex >= len)
+ return String8("");
+ else
+ return textValues[valueIndex];
}
/**
@@ -445,17 +445,17 @@ String8 CTvDimension::getText(int valueIndex)
*/
void CTvDimension::setLockStatus(int valueIndex, int status)
{
- int len = getDefinedValue();
- if (valueIndex >= len)
- return;
+ 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);
+ 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());
- }
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+ }
}
/**
@@ -464,14 +464,14 @@ void CTvDimension::setLockStatus(int valueIndex, int 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]);
- }
+ 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]);
+ }
}
/**
@@ -481,25 +481,25 @@ void CTvDimension::setLockStatus(int status[])
*/
void CTvDimension::setLockStatus(String8 abbrevs[], int locks[], int abb_size)
{
- int len = getDefinedValue();
- if (abbrevs == NULL || locks == NULL)
- return;
+ 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;
- }
- }
- }
+ 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;
+ this->region = region;
+ this->dimension = dimension;
+ this->value = value;
}
CTvDimension::VChipRating::VChipRating()
{
@@ -510,135 +510,135 @@ CTvDimension::VChipRating::~VChipRating()
}
int CTvDimension::VChipRating::getRegion()
{
- return region;
+ return region;
}
int CTvDimension::VChipRating::getDimension()
{
- return dimension;
+ return dimension;
}
int CTvDimension::VChipRating::getValue()const
{
- return value;
+ return value;
}
String8 CTvDimension::getCurdimension()
{
- return CurvchipDimension;
+ return CurvchipDimension;
}
String8 CTvDimension::getCurAbbr()
{
- return CurvchipAbbrev;
+ return CurvchipAbbrev;
}
String8 CTvDimension::getCurText()
{
- return CurvchipText;
+ 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());
+ 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));
+ 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();
+ String8 cmd = String8("select * from dimension_table");
+ CTvDatabase::Cursor c;
+ CTvDatabase::GetTvDb()->select(cmd, c);
+ return c.moveToFirst();
}
diff --git a/tvapi/libtv/tvdb/CTvDimension.h b/tvapi/libtv/tvdb/CTvDimension.h
index 6415871..0e6ea60 100644
--- a/tvapi/libtv/tvdb/CTvDimension.h
+++ b/tvapi/libtv/tvdb/CTvDimension.h
@@ -1,99 +1,97 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvDimension.h
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-#if !defined(_CTVDIMENSION_H)
-#define _CTVDIMENSION_H
-#include <utils/Vector.h>
-#include "CTvDatabase.h"
-#include <utils/String8.h>
-#include <stdlib.h>
-
-#include "CTvLog.h"
-
-// TV ATSC rating dimension
-class CTvDimension
-{
-public:
- class VChipRating
- {
- private:
- int region;
- int dimension;
- int value;
-
- public:
- VChipRating(int region, int dimension, int value);
- VChipRating();
- ~VChipRating();
- int getRegion();
- int getDimension();
- int getValue()const;
- };
- /* 'All' is a very special case, it links to dimension0 & dimension5 */
- void createFromCursor(CTvDatabase::Cursor &c);
- static int getUSPGAllLockStatus(String8 abbrev);
- static void setUSPGAllLockStatus(String8 abbrev, int lock);
- static void selectByID(CTvDimension &dm, int id);
- static int selectByIndex(CTvDimension &dm, int ratingRegionID, int index);
- static void selectByName(CTvDimension &dm, int ratingRegionID, String8 dimensionName);
- static void selectByRatingRegion(CTvDimension &dm, int ratingRegionID);
- bool isBlocked(CTvDimension &dm, VChipRating *definedRating);
- int getID();
- int getRatingRegion();
- String8 getRatingRegionName();
- String8 getName();
- int getGraduatedScale();
- int getDefinedValue();
- //int* getLockStatus();
- int getLockStatus(int valueIndex);
- void getLockStatus(String8 abbrevs[], int lock[], int *array_len);
- int getAbbrev(String8 abb[]);
- String8 getAbbrev(int valueIndex);
- int getText(String8 tx[]);
- String8 getText(int valueIndex);
- void setLockStatus(int valueIndex, int status);
- void setLockStatus(int status[]);
- void setLockStatus(String8 abbrevs[], int locks[], int abb_size);
- /**Rating regions*/
-public:
- static const int REGION_US = 0x1;
- static const int REGION_CANADA = 0x2;
- static const int REGION_TAIWAN = 0x3;
- static const int REGION_SOUTHKOREA = 0x4;
-
- CTvDimension(CTvDatabase::Cursor &c);
- CTvDimension();
- ~CTvDimension();
-
- static void insertNewDimension(const int region, String8 regionName, String8 name,
- int indexj, int *lock, const char **abbrev, const char **text, int size);
- static void builtinAtscDimensions();
- static int isDimensionTblExist();
- String8 getCurdimension();
- String8 getCurAbbr();
- String8 getCurText();
-private:
- int id;
- int indexj;
- int ratingRegion;
- int graduatedScale;
- int valuesDefined;
- int *lockValues;
- String8 name;
- String8 ratingRegionName;
- String8 *abbrevValues;
- String8 *textValues;
- bool isPGAll;
- String8 CurvchipDimension;
- String8 CurvchipAbbrev;
- String8 CurvchipText;
-};
-#endif //_CTVDIMENSION_H
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvDimension.h
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+#if !defined(_CTVDIMENSION_H)
+#define _CTVDIMENSION_H
+#include <utils/Vector.h>
+#include "CTvDatabase.h"
+#include <utils/String8.h>
+#include <stdlib.h>
+
+#include "CTvLog.h"
+
+// TV ATSC rating dimension
+class CTvDimension {
+public:
+ class VChipRating {
+ private:
+ int region;
+ int dimension;
+ int value;
+
+ public:
+ VChipRating(int region, int dimension, int value);
+ VChipRating();
+ ~VChipRating();
+ int getRegion();
+ int getDimension();
+ int getValue()const;
+ };
+ /* 'All' is a very special case, it links to dimension0 & dimension5 */
+ void createFromCursor(CTvDatabase::Cursor &c);
+ static int getUSPGAllLockStatus(String8 abbrev);
+ static void setUSPGAllLockStatus(String8 abbrev, int lock);
+ static void selectByID(CTvDimension &dm, int id);
+ static int selectByIndex(CTvDimension &dm, int ratingRegionID, int index);
+ static void selectByName(CTvDimension &dm, int ratingRegionID, String8 dimensionName);
+ static void selectByRatingRegion(CTvDimension &dm, int ratingRegionID);
+ bool isBlocked(CTvDimension &dm, VChipRating *definedRating);
+ int getID();
+ int getRatingRegion();
+ String8 getRatingRegionName();
+ String8 getName();
+ int getGraduatedScale();
+ int getDefinedValue();
+ //int* getLockStatus();
+ int getLockStatus(int valueIndex);
+ void getLockStatus(String8 abbrevs[], int lock[], int *array_len);
+ int getAbbrev(String8 abb[]);
+ String8 getAbbrev(int valueIndex);
+ int getText(String8 tx[]);
+ String8 getText(int valueIndex);
+ void setLockStatus(int valueIndex, int status);
+ void setLockStatus(int status[]);
+ void setLockStatus(String8 abbrevs[], int locks[], int abb_size);
+ /**Rating regions*/
+public:
+ static const int REGION_US = 0x1;
+ static const int REGION_CANADA = 0x2;
+ static const int REGION_TAIWAN = 0x3;
+ static const int REGION_SOUTHKOREA = 0x4;
+
+ CTvDimension(CTvDatabase::Cursor &c);
+ CTvDimension();
+ ~CTvDimension();
+
+ static void insertNewDimension(const int region, String8 regionName, String8 name,
+ int indexj, int *lock, const char **abbrev, const char **text, int size);
+ static void builtinAtscDimensions();
+ static int isDimensionTblExist();
+ String8 getCurdimension();
+ String8 getCurAbbr();
+ String8 getCurText();
+private:
+ int id;
+ int indexj;
+ int ratingRegion;
+ int graduatedScale;
+ int valuesDefined;
+ int *lockValues;
+ String8 name;
+ String8 ratingRegionName;
+ String8 *abbrevValues;
+ String8 *textValues;
+ bool isPGAll;
+ String8 CurvchipDimension;
+ String8 CurvchipAbbrev;
+ String8 CurvchipText;
+};
+#endif //_CTVDIMENSION_H
diff --git a/tvapi/libtv/tvdb/CTvEvent.cpp b/tvapi/libtv/tvdb/CTvEvent.cpp
index f26bc57..12f8352 100644
--- a/tvapi/libtv/tvdb/CTvEvent.cpp
+++ b/tvapi/libtv/tvdb/CTvEvent.cpp
@@ -1,241 +1,241 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvEvent.cpp
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-#include "CTvEvent.h"
-#include "CTvDatabase.h"
-#include "CTvProgram.h"
-#include <stdlib.h>
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#define LOG_TAG "CTvEvent"
-#endif
-
-void CTvEvent::InitFromCursor(CTvDatabase::Cursor &c)
-{
- int col;
-
- col = c.getColumnIndex("db_id");
- this->id = c.getInt(col);
-
- col = c.getColumnIndex("event_id");
- this->dvbEventID = c.getInt(col);
-
- col = c.getColumnIndex("name");
- this->name = c.getString(col);
-
- col = c.getColumnIndex("start");
- this->start = (long)c.getInt(col);
-
- col = c.getColumnIndex("end");
- this->end = (long)c.getInt(col) ;
-
- col = c.getColumnIndex("nibble_level");
- this->dvbContent = c.getInt(col);
-
- col = c.getColumnIndex("parental_rating");
- this->dvbViewAge = c.getInt(col);
-
- col = c.getColumnIndex("sub_flag");
- this->sub_flag = c.getInt(col);
-
- col = c.getColumnIndex("db_srv_id");
- this->programID = c.getInt(col);
-
- col = c.getColumnIndex("rrt_ratings");
- String8 rrtRatings = c.getString(col);
- char *tmp;
- Vector<String8> ratings;
- int l = 0;
- tmp = strtok(rrtRatings.lockBuffer(rrtRatings.size()), ",");
- LOGD("%s, %d, %s", "TV", __LINE__, tmp);
- while (tmp != NULL) {
- ratings.push_back(String8(tmp));
- tmp = strtok(NULL, ",");
- }
- rrtRatings.unlockBuffer();
- rating_len = ratings.size();
- if (!ratings.isEmpty()) {
- for (int i = 0; i < ratings.size(); i++) {
- Vector<String8> rating;
- tmp = strtok(ratings.editItemAt(i).lockBuffer(ratings.editItemAt(i).length()), " ");
- while (tmp != NULL) {
- rating.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- ratings.editItemAt(i).unlockBuffer();
- if (rating.size() >= 3) {
- int re = atoi(rating[0]);
- int dm = atoi(rating[1]);
- int vl = atoi(rating[2]);
- vchipRatings.add( new CTvDimension::VChipRating(re, dm, vl));
- } else
- vchipRatings.add(NULL);
- }
- }
-
- col = c.getColumnIndex("descr");
- this->description = c.getString(col);
-
- col = c.getColumnIndex("ext_descr");
- this->extDescription = c.getString(col);
-}
-
-//id; CTvChannel.MODE_ATSC sourceid , other id
-int CTvEvent::getProgPresentEvent(int progSrc, int progID, long nowTime, CTvEvent &ev)
-{
- String8 cmd;
- CTvDatabase::Cursor c;
-
- cmd = String8("select * from evt_table where evt_table.");
-
- if (progSrc == CTvChannel::MODE_ATSC) {
- cmd += String8("source_id = ") + String8::format("%d", progID);
- } else {
- cmd += String8("db_srv_id = ") + String8::format("%d", progID);
- }
-
- cmd += String8(" and evt_table.start <= ") + String8::format("%ld", nowTime) + String8(" and evt_table.end > ") + String8::format("%ld", nowTime);
-
- int ret = CTvDatabase::GetTvDb()->select(cmd, c);
-
- if (c.moveToFirst()) {
- ev.InitFromCursor(c);
- } else {
- c.close();
- return -1;
- }
-
- c.close();
-
- return 0;
-}
-
-int CTvEvent::getProgScheduleEvents(int progSrc, int progID, long start, long duration, Vector<sp<CTvEvent> > &vEv)
-{
- String8 cmd;
- long begin = start;
- long end = start + duration;
-
- cmd = String8("select * from evt_table where evt_table.");
- if (progSrc == CTvChannel::MODE_ATSC) {
- cmd += String8("source_id = ") + String8::format("%d", progID);
- } else {
- cmd += String8("db_srv_id = ") + String8::format("%d", progID);
- }
- cmd += String8(" and ");
- cmd += String8(" ((start < ") + String8::format("%ld", begin) + String8(" and end > ") + String8::format("%ld", begin) + String8(") ||");
- cmd += String8(" (start >= ") + String8::format("%ld", begin) + String8(" and start < ") + String8::format("%ld", end) + String8("))");
- cmd += String8(" order by evt_table.start");
-
- CTvDatabase::Cursor c;
- int ret = CTvDatabase::GetTvDb()->select(cmd, c);
-
- if (c.moveToFirst()) {
- do {
- vEv.add(new CTvEvent(c));
- } while (c.moveToNext());
-
- } else {
- c.close();
- return -1;
- }
-
- c.close();
- return 0;
-}
-int CTvEvent::getATVProgEvent(int progSrc, int progID, CTvEvent &ev)
-{
- String8 cmd;
- CTvDatabase::Cursor c;
-
- cmd = String8("select * from evt_table where evt_table.");
-
- if (progSrc == CTvChannel::MODE_ATSC) {
- LOGD("%s, %d MODE_ATSC", "TV", __LINE__);
- cmd += String8("source_id = ") + String8::format("%d", progID);
- } else {
- LOGD("%s, %d MODE_ANALOG", "TV", __LINE__);
- cmd += String8("db_srv_id = ") + String8::format("%d", progID);
- }
-
- //cmd += String8(" and evt_table.start <= ") + String8::format("%ld", nowTime) + String8(" and evt_table.end > ") + String8::format("%ld", nowTime);
-
- int ret = CTvDatabase::GetTvDb()->select(cmd, c);
-
- if (c.moveToFirst()) {
- ev.InitFromCursor(c);
- } else {
- c.close();
- return -1;
- }
-
- c.close();
-
- return 0;
-}
-
-int CTvEvent::CleanAllEvent()
-{
- CTvDatabase::GetTvDb()->exeSql("delete from evt_table");
- return 0;
-}
-
-int CTvEvent::selectByID(int id, CTvEvent &evt)
-{
- CTvDatabase::Cursor c;
- String8 sql;
-
- sql = String8("select * from evt_table where evt_table.db_id = ") + String8::format("%d", id);
- CTvDatabase::GetTvDb()->select(sql.string(), c);
- if (c.moveToFirst()) {
- evt.InitFromCursor(c);
- } else {
- c.close();
- return -1;
- }
-
- c.close();
- return 0;
-}
-
-int CTvEvent::bookEvent(int evtId, bool bBookFlag)
-{
- String8 cmd;
-
- cmd = String8("update evt_table set sub_flag=") + String8::format("%d", bBookFlag)
- + String8(" where event_id=") + String8::format("%d", evtId);
-
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-
- return 0;
-}
-
-CTvEvent::CTvEvent(CTvDatabase::Cursor &c)
-{
- InitFromCursor(c);
-}
-
-CTvEvent::CTvEvent()
-{
-}
-
-CTvEvent::~CTvEvent()
-{
- int size = vchipRatings.size();
- for (int i = 0; i < size; i++)
- delete vchipRatings[i];
-}
-Vector<CTvDimension::VChipRating *> CTvEvent::getVChipRatings()
-{
- return vchipRatings;
-}
-
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvEvent.cpp
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+#include "CTvEvent.h"
+#include "CTvDatabase.h"
+#include "CTvProgram.h"
+#include <stdlib.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#define LOG_TAG "CTvEvent"
+#endif
+
+void CTvEvent::InitFromCursor(CTvDatabase::Cursor &c)
+{
+ int col;
+
+ col = c.getColumnIndex("db_id");
+ this->id = c.getInt(col);
+
+ col = c.getColumnIndex("event_id");
+ this->dvbEventID = c.getInt(col);
+
+ col = c.getColumnIndex("name");
+ this->name = c.getString(col);
+
+ col = c.getColumnIndex("start");
+ this->start = (long)c.getInt(col);
+
+ col = c.getColumnIndex("end");
+ this->end = (long)c.getInt(col) ;
+
+ col = c.getColumnIndex("nibble_level");
+ this->dvbContent = c.getInt(col);
+
+ col = c.getColumnIndex("parental_rating");
+ this->dvbViewAge = c.getInt(col);
+
+ col = c.getColumnIndex("sub_flag");
+ this->sub_flag = c.getInt(col);
+
+ col = c.getColumnIndex("db_srv_id");
+ this->programID = c.getInt(col);
+
+ col = c.getColumnIndex("rrt_ratings");
+ String8 rrtRatings = c.getString(col);
+ char *tmp;
+ Vector<String8> ratings;
+ int l = 0;
+ tmp = strtok(rrtRatings.lockBuffer(rrtRatings.size()), ",");
+ LOGD("%s, %d, %s", "TV", __LINE__, tmp);
+ while (tmp != NULL) {
+ ratings.push_back(String8(tmp));
+ tmp = strtok(NULL, ",");
+ }
+ rrtRatings.unlockBuffer();
+ rating_len = ratings.size();
+ if (!ratings.isEmpty()) {
+ for (int i = 0; i < ratings.size(); i++) {
+ Vector<String8> rating;
+ tmp = strtok(ratings.editItemAt(i).lockBuffer(ratings.editItemAt(i).length()), " ");
+ while (tmp != NULL) {
+ rating.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ ratings.editItemAt(i).unlockBuffer();
+ if (rating.size() >= 3) {
+ int re = atoi(rating[0]);
+ int dm = atoi(rating[1]);
+ int vl = atoi(rating[2]);
+ vchipRatings.add( new CTvDimension::VChipRating(re, dm, vl));
+ } else
+ vchipRatings.add(NULL);
+ }
+ }
+
+ col = c.getColumnIndex("descr");
+ this->description = c.getString(col);
+
+ col = c.getColumnIndex("ext_descr");
+ this->extDescription = c.getString(col);
+}
+
+//id; CTvChannel.MODE_ATSC sourceid , other id
+int CTvEvent::getProgPresentEvent(int progSrc, int progID, long nowTime, CTvEvent &ev)
+{
+ String8 cmd;
+ CTvDatabase::Cursor c;
+
+ cmd = String8("select * from evt_table where evt_table.");
+
+ if (progSrc == CTvChannel::MODE_ATSC) {
+ cmd += String8("source_id = ") + String8::format("%d", progID);
+ } else {
+ cmd += String8("db_srv_id = ") + String8::format("%d", progID);
+ }
+
+ cmd += String8(" and evt_table.start <= ") + String8::format("%ld", nowTime) + String8(" and evt_table.end > ") + String8::format("%ld", nowTime);
+
+ int ret = CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if(c.moveToFirst()) {
+ ev.InitFromCursor(c);
+ } else {
+ c.close();
+ return -1;
+ }
+
+ c.close();
+
+ return 0;
+}
+
+int CTvEvent::getProgScheduleEvents(int progSrc, int progID, long start, long duration, Vector<sp<CTvEvent> > &vEv)
+{
+ String8 cmd;
+ long begin = start;
+ long end = start + duration;
+
+ cmd = String8("select * from evt_table where evt_table.");
+ if (progSrc == CTvChannel::MODE_ATSC) {
+ cmd += String8("source_id = ") + String8::format("%d", progID);
+ } else {
+ cmd += String8("db_srv_id = ") + String8::format("%d", progID);
+ }
+ cmd += String8(" and ");
+ cmd += String8(" ((start < ") + String8::format("%ld", begin) + String8(" and end > ") + String8::format("%ld", begin) + String8(") ||");
+ cmd += String8(" (start >= ") + String8::format("%ld", begin) + String8(" and start < ") + String8::format("%ld", end) + String8("))");
+ cmd += String8(" order by evt_table.start");
+
+ CTvDatabase::Cursor c;
+ int ret = CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if(c.moveToFirst()) {
+ do {
+ vEv.add(new CTvEvent(c));
+ } while(c.moveToNext());
+
+ } else {
+ c.close();
+ return -1;
+ }
+
+ c.close();
+ return 0;
+}
+int CTvEvent::getATVProgEvent(int progSrc, int progID, CTvEvent &ev)
+{
+ String8 cmd;
+ CTvDatabase::Cursor c;
+
+ cmd = String8("select * from evt_table where evt_table.");
+
+ if (progSrc == CTvChannel::MODE_ATSC) {
+ LOGD("%s, %d MODE_ATSC", "TV", __LINE__);
+ cmd += String8("source_id = ") + String8::format("%d", progID);
+ } else {
+ LOGD("%s, %d MODE_ANALOG", "TV", __LINE__);
+ cmd += String8("db_srv_id = ") + String8::format("%d", progID);
+ }
+
+ //cmd += String8(" and evt_table.start <= ") + String8::format("%ld", nowTime) + String8(" and evt_table.end > ") + String8::format("%ld", nowTime);
+
+ int ret = CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if(c.moveToFirst()) {
+ ev.InitFromCursor(c);
+ } else {
+ c.close();
+ return -1;
+ }
+
+ c.close();
+
+ return 0;
+}
+
+int CTvEvent::CleanAllEvent()
+{
+ CTvDatabase::GetTvDb()->exeSql("delete from evt_table");
+ return 0;
+}
+
+int CTvEvent::selectByID(int id, CTvEvent &evt)
+{
+ CTvDatabase::Cursor c;
+ String8 sql;
+
+ sql = String8("select * from evt_table where evt_table.db_id = ") + String8::format("%d", id);
+ CTvDatabase::GetTvDb()->select(sql.string(), c);
+ if(c.moveToFirst()) {
+ evt.InitFromCursor(c);
+ } else {
+ c.close();
+ return -1;
+ }
+
+ c.close();
+ return 0;
+}
+
+int CTvEvent::bookEvent(int evtId, bool bBookFlag)
+{
+ String8 cmd;
+
+ cmd = String8("update evt_table set sub_flag=") + String8::format("%d", bBookFlag)
+ + String8(" where event_id=") + String8::format("%d", evtId);
+
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+
+ return 0;
+}
+
+CTvEvent::CTvEvent(CTvDatabase::Cursor &c)
+{
+ InitFromCursor(c);
+}
+
+CTvEvent::CTvEvent()
+{
+}
+
+CTvEvent::~CTvEvent()
+{
+ int size = vchipRatings.size();
+ for (int i = 0; i < size; i++)
+ delete vchipRatings[i];
+}
+Vector<CTvDimension::VChipRating *> CTvEvent::getVChipRatings()
+{
+ return vchipRatings;
+}
+
diff --git a/tvapi/libtv/tvdb/CTvEvent.h b/tvapi/libtv/tvdb/CTvEvent.h
index d13b575..65cf00f 100644
--- a/tvapi/libtv/tvdb/CTvEvent.h
+++ b/tvapi/libtv/tvdb/CTvEvent.h
@@ -1,86 +1,85 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvEvent.h
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-
-#if !defined(_CTVEVENT_H)
-#define _CTVEVENT_H
-
-#include <utils/Vector.h>
-#include "CTvProgram.h"
-#include "CTvDatabase.h"
-#include "CTvDimension.h"
-
-class CTvEvent : public LightRefBase<CTvEvent>
-{
-public:
- CTvEvent(CTvDatabase::Cursor &c);
- CTvEvent();
- ~CTvEvent();
-
- int getProgPresentEvent(int progSrc, int progID, long nowTime, CTvEvent &ev);
- int getProgScheduleEvents(int progSrc, int progID, long start, long duration, Vector<sp<CTvEvent> > &vEv);
- int getATVProgEvent(int progSrc, int progID, CTvEvent &ev);
- int bookEvent(int evtId, bool bBookFlag);
- static int selectByID(int id, CTvEvent &p);
- static int CleanAllEvent();
- String8 &getName()
- {
- return name;
- };
- String8 &getDescription()
- {
- return description;
- };
- String8 &getExtDescription()
- {
- return extDescription;
- };
- long getStartTime()
- {
- return start;
- };
- long getEndTime()
- {
- return end;
- };
- int getSubFlag()
- {
- return sub_flag;
- };
- int getProgramId()
- {
- return programID;
- };
- int getEventId()
- {
- return dvbEventID;
- };
- Vector<CTvDimension::VChipRating *> getVChipRatings();
-
-private:
- void InitFromCursor(CTvDatabase::Cursor &c);
-
- int id;
- int dvbEventID;
- String8 name;
- String8 description;
- String8 extDescription;
- int programID;
- long start;
- long end;
- int dvbContent;
- int dvbViewAge;
- int sub_flag;
- int rating_len;
- Vector<CTvDimension::VChipRating *> vchipRatings;
-};
-
-#endif //_CTVEVENT_H
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvEvent.h
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+
+#if !defined(_CTVEVENT_H)
+#define _CTVEVENT_H
+
+#include <utils/Vector.h>
+#include "CTvProgram.h"
+#include "CTvDatabase.h"
+#include "CTvDimension.h"
+
+class CTvEvent : public LightRefBase<CTvEvent> {
+public:
+ CTvEvent(CTvDatabase::Cursor &c);
+ CTvEvent();
+ ~CTvEvent();
+
+ int getProgPresentEvent(int progSrc, int progID, long nowTime, CTvEvent &ev);
+ int getProgScheduleEvents(int progSrc, int progID, long start, long duration, Vector<sp<CTvEvent> > &vEv);
+ int getATVProgEvent(int progSrc, int progID, CTvEvent &ev);
+ int bookEvent(int evtId, bool bBookFlag);
+ static int selectByID(int id, CTvEvent &p);
+ static int CleanAllEvent();
+ String8 &getName()
+ {
+ return name;
+ };
+ String8 &getDescription()
+ {
+ return description;
+ };
+ String8 &getExtDescription()
+ {
+ return extDescription;
+ };
+ long getStartTime()
+ {
+ return start;
+ };
+ long getEndTime()
+ {
+ return end;
+ };
+ int getSubFlag()
+ {
+ return sub_flag;
+ };
+ int getProgramId()
+ {
+ return programID;
+ };
+ int getEventId()
+ {
+ return dvbEventID;
+ };
+ Vector<CTvDimension::VChipRating *> getVChipRatings();
+
+private:
+ void InitFromCursor(CTvDatabase::Cursor &c);
+
+ int id;
+ int dvbEventID;
+ String8 name;
+ String8 description;
+ String8 extDescription;
+ int programID;
+ long start;
+ long end;
+ int dvbContent;
+ int dvbViewAge;
+ int sub_flag;
+ int rating_len;
+ Vector<CTvDimension::VChipRating *> vchipRatings;
+};
+
+#endif //_CTVEVENT_H
diff --git a/tvapi/libtv/tvdb/CTvGroup.cpp b/tvapi/libtv/tvdb/CTvGroup.cpp
index c5b6249..4b8741e 100644
--- a/tvapi/libtv/tvdb/CTvGroup.cpp
+++ b/tvapi/libtv/tvdb/CTvGroup.cpp
@@ -1,44 +1,44 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvGroup.cpp
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-
-#include "CTvGroup.h"
-
-Vector<CTvGroup> CTvGroup::selectByGroup()
-{
- Vector<CTvGroup> vGroup;
- return vGroup;
-}
-
-void CTvGroup::addGroup()
-{
-
-}
-
-CTvGroup::CTvGroup()
-{
-
-}
-CTvGroup::~CTvGroup()
-{
-
-}
-
-void CTvGroup::deleteGroup()
-{
-
-}
-
-void CTvGroup::editGroup()
-{
-
-}
-
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvGroup.cpp
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+
+#include "CTvGroup.h"
+
+Vector<CTvGroup> CTvGroup::selectByGroup()
+{
+ Vector<CTvGroup> vGroup;
+ return vGroup;
+}
+
+void CTvGroup::addGroup()
+{
+
+}
+
+CTvGroup::CTvGroup()
+{
+
+}
+CTvGroup::~CTvGroup()
+{
+
+}
+
+void CTvGroup::deleteGroup()
+{
+
+}
+
+void CTvGroup::editGroup()
+{
+
+}
+
diff --git a/tvapi/libtv/tvdb/CTvGroup.h b/tvapi/libtv/tvdb/CTvGroup.h
index d765f26..d92a6ac 100644
--- a/tvapi/libtv/tvdb/CTvGroup.h
+++ b/tvapi/libtv/tvdb/CTvGroup.h
@@ -1,31 +1,30 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvGroup.h
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-
-#if !defined(_CTVGROUP_H)
-#define _CTVGROUP_H
-
-#include <utils/Vector.h>
-using namespace android;
-// Group¶ÔÓ¦DTVÖеÄÒ»¸ö½ÚÄ¿·Ö×é
-class CTvGroup
-{
-public:
- CTvGroup();
- ~CTvGroup();
- // È¡µÃËùÓнÚÄ¿·Ö×éÐÅÏ¢
- static Vector<CTvGroup> selectByGroup();
- static void addGroup();
- static void deleteGroup();
- static void editGroup();
-};
-
-#endif //_CTVGROUP_H
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvGroup.h
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+
+#if !defined(_CTVGROUP_H)
+#define _CTVGROUP_H
+
+#include <utils/Vector.h>
+using namespace android;
+// Group¶ÔÓ¦DTVÖеÄÒ»¸ö½ÚÄ¿·Ö×é
+class CTvGroup {
+public:
+ CTvGroup();
+ ~CTvGroup();
+ // È¡µÃËùÓнÚÄ¿·Ö×éÐÅÏ¢
+ static Vector<CTvGroup> selectByGroup();
+ static void addGroup();
+ static void deleteGroup();
+ static void editGroup();
+};
+
+#endif //_CTVGROUP_H
diff --git a/tvapi/libtv/tvdb/CTvProgram.cpp b/tvapi/libtv/tvdb/CTvProgram.cpp
index 921d67a..c71c757 100644
--- a/tvapi/libtv/tvdb/CTvProgram.cpp
+++ b/tvapi/libtv/tvdb/CTvProgram.cpp
@@ -1,883 +1,883 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvProgram.cpp
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-
-#include "CTvProgram.h"
-#include "CTvDatabase.h"
-#include "CTvChannel.h"
-#include "CTvEvent.h"
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#define LOG_TAG "CTvProgram"
-#endif
-
-CTvProgram::CTvProgram(CTvDatabase::Cursor &c)
-{
- CreateFromCursor(c);
-}
-
-CTvProgram::~CTvProgram()
-{
- //free mem
- // video
- if (mpVideo != NULL) delete mpVideo;
- // audios
- int size = mvAudios.size();
- for (int i = 0; i < size; i++)
- delete mvAudios[i];
- // subtitles
- size = mvSubtitles.size();
- for (int i = 0; i < size; i++)
- delete mvSubtitles[i];
- // teletexts
- size = mvTeletexts.size();
- for (int i = 0; i < size; i++)
- delete mvTeletexts[i];
-}
-
-CTvProgram::CTvProgram(int channelID, int type)
-{
- mpVideo = NULL;
-}
-
-CTvProgram::CTvProgram()
-{
- mpVideo = NULL;
-}
-int CTvProgram::CreateFromCursor(CTvDatabase::Cursor &c)
-{
- int i = 0;
- int col;
- int num, type;
- int major, minor;
- char tmp_buf[256];
- //LOGD("CTvProgram::CreateFromCursor");
- col = c.getColumnIndex("db_id");
- this->id = c.getInt(col);
-
- col = c.getColumnIndex("source_id");
- this->sourceID = c.getInt(col);
-
- col = c.getColumnIndex("src");
- this->src = c.getInt(col);
-
- col = c.getColumnIndex("service_id");
- this->dvbServiceID = c.getInt(col);
-
- col = c.getColumnIndex("db_ts_id");
- this->channelID = c.getInt(col);
-
- col = c.getColumnIndex("name");
- this->name = c.getString(col);
-
- col = c.getColumnIndex("chan_num");
- num = c.getInt(col);
-
- col = c.getColumnIndex("chan_order");
- this->chanOrderNum = c.getInt(col);
-
- col = c.getColumnIndex("major_chan_num");
- major = c.getInt(col);
-
- col = c.getColumnIndex("minor_chan_num");
- minor = c.getInt(col);
-
- col = c.getColumnIndex("aud_track");
- this->audioTrack = c.getInt(col);
-
- //节目å·ä¿¡æ¯åˆ?
- if (src == CTvChannel::MODE_ATSC || (src == CTvChannel::MODE_ANALOG && major > 0)) {
- this->major = major;
- this->minor = minor;
- this->atscMode = true;
- this->minorCheck = MINOR_CHECK_NONE;
- } else {
- this->major = num;
- this->minor = 0;
- this->atscMode = false;
- this->minorCheck = MINOR_CHECK_NONE;
- }
-
- col = c.getColumnIndex("service_type");
- this->type = c.getInt(col);
-
- col = c.getColumnIndex("pmt_pid");
- pmtPID = c.getInt(col);
-
- //LOGD("CTvProgram::CreateFromCursor type = %d", this->type);
- col = c.getColumnIndex("skip");
- this->skip = c.getInt(col);
-
- col = c.getColumnIndex("lock");
- this->lock = (c.getInt(col) != 0);
-
- col = c.getColumnIndex("scrambled_flag");
- this->scrambled = (c.getInt(col) != 0);
-
- col = c.getColumnIndex("favor");
- this->favorite = (c.getInt(col) != 0);
-
- col = c.getColumnIndex("volume");
- this->volume = c.getInt(col);
-
- //Video
- int pid, fmt;
- col = c.getColumnIndex("vid_pid");
- pid = c.getInt(col);
-
- col = c.getColumnIndex("vid_fmt");
- fmt = c.getInt(col);
-
- //LOGD("----------vpid = %d", pid);
- this->mpVideo = new Video(pid, fmt);
- //LOGD("----------vpid = %d", this->mpVideo->getPID());
-
-
- //Audio
- String8 strPids;
- String8 strFmts;
- String8 strLangs;
- int count = 0;
- col = c.getColumnIndex("aud_pids");
- strPids = c.getString(col);
-
- col = c.getColumnIndex("aud_fmts");
- strFmts = c.getString(col);
-
- col = c.getColumnIndex("aud_langs");
- strLangs = c.getString(col);
- col = c.getColumnIndex("current_aud");
- this->currAudTrackIndex = c.getInt(col);
-
- char *tmp;
- Vector<String8> vpid ;
- Vector<String8> vfmt ;
- Vector<String8> vlang;
-
- tmp = strtok(strPids.lockBuffer(strPids.length()), " ");
- while (tmp != NULL) {
- vpid.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- strPids.unlockBuffer();
-
- tmp = strtok(strFmts.lockBuffer(strFmts.length()), " ");
- while (tmp != NULL) {
- vfmt.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- strFmts.unlockBuffer();
-
- tmp = strtok(strLangs.lockBuffer(strLangs.length()), " ");
-
- while (tmp != NULL) {
- vlang.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- strLangs.unlockBuffer();
-
- //check empty aud_langs
- for (i = vlang.size(); i < vpid.size(); i++) {
- sprintf(tmp_buf, "Audio%d", i + 1);
- vlang.push_back(String8(tmp_buf));
- LOGE("%s, aud_langs is empty, add dummy data (%s).\n", "TV", tmp_buf);
- }
-
- //String8 l(vlang[i]);
- for (i = 0; i < vpid.size(); i++) {
- int i_pid = atoi(vpid[i]);
- int i_fmt = atoi(vfmt[i]);
- mvAudios.push_back(new Audio(i_pid, vlang[i], i_fmt));
- }
-
-
-
- /* parse subtitles */
- vpid.clear();
- vlang.clear();
- Vector<String8> vcid;
- Vector<String8> vaid;
- String8 strCids;
- String8 strAids;
-
- col = c.getColumnIndex("sub_pids");
- strPids = c.getString(col);
-
- col = c.getColumnIndex("sub_composition_page_ids");
- strCids = c.getString(col);
-
- col = c.getColumnIndex("sub_ancillary_page_ids");
- strAids = c.getString(col);
-
-
- col = c.getColumnIndex("sub_langs");
- strLangs = c.getString(col);
-
- tmp = strtok(strPids.lockBuffer(strPids.length()), " ");
- while (tmp != NULL) {
- vpid.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- strPids.unlockBuffer();
-
- tmp = strtok(strCids.lockBuffer(strCids.length()), " ");
- while (tmp != NULL) {
- vcid.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- strCids.unlockBuffer();
-
- tmp = strtok(strAids.lockBuffer(strAids.length()), " ");
- while (tmp != NULL) {
- vaid.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- strAids.unlockBuffer();
-
- tmp = strtok(strLangs.lockBuffer(strLangs.length()), " ");
- while (tmp != NULL) {
- vlang.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- strLangs.unlockBuffer();
-
- //Subtitle
- for (int i = 0; i < vpid.size(); i++) {
- this->mvSubtitles.push_back(new Subtitle(
- atoi(vpid[i]),
- String8(vlang[i]), Subtitle::TYPE_DVB_SUBTITLE,
- atoi(vcid[i]),
- atoi(vaid[i])));
- }
-
- /* parse teletexts */
- int ttx_count = 0, ttx_sub_count = 0;
- String8 str_ttx_pids, str_ttx_types, str_mag_nos, str_page_nos, str_ttx_langs;
- Vector<String8> v_ttx_pids, v_ttx_types, v_mag_nos, v_page_nos, v_ttx_langs;
- col = c.getColumnIndex("ttx_pids");
- str_ttx_pids = c.getString(col);
-
- col = c.getColumnIndex("ttx_types");
- str_ttx_types = c.getString(col);
-
- col = c.getColumnIndex("ttx_magazine_nos");
- str_mag_nos = c.getString(col);
-
- col = c.getColumnIndex("ttx_page_nos");
- str_page_nos = c.getString(col);
-
- col = c.getColumnIndex("ttx_langs");
- str_ttx_langs = c.getString(col);
-
- tmp = strtok(str_ttx_pids.lockBuffer(str_ttx_pids.length()), " ");
- while (tmp != NULL) {
- v_ttx_pids.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- str_ttx_pids.unlockBuffer();
-
- tmp = strtok(str_ttx_types.lockBuffer(str_ttx_types.length()), " ");
- while (tmp != NULL) {
- v_ttx_types.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- str_ttx_types.unlockBuffer();
-
- tmp = strtok(str_mag_nos.lockBuffer(str_mag_nos.length()), " ");
- while (tmp != NULL) {
- v_mag_nos.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- str_mag_nos.unlockBuffer();
-
- tmp = strtok(str_page_nos.lockBuffer(str_page_nos.length()), " ");
- while (tmp != NULL) {
- v_page_nos.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- str_page_nos.unlockBuffer();
-
- tmp = strtok(str_ttx_langs.lockBuffer(str_ttx_langs.length()), " ");
- while (tmp != NULL) {
- v_ttx_langs.push_back(String8(tmp));
- tmp = strtok(NULL, " ");
- }
- str_ttx_langs.unlockBuffer();
-
-
- for (int i = 0; i < v_ttx_pids.size(); i++) {
- int ttype = atoi(v_ttx_types[i]);
- if (ttype == 0x2 || ttype == 0x5) {
- this->mvSubtitles.push_back(new Subtitle(
- atoi(v_ttx_pids[i].string()),
- String8(v_ttx_langs[i]), Subtitle::TYPE_DTV_TELETEXT,
- atoi(v_mag_nos[i]),
- atoi(v_page_nos[i])));
- } else {
- this->mvTeletexts.push_back(new Teletext(
- atoi(v_ttx_pids[i]),
- String8(v_ttx_langs[i]),
- atoi(v_mag_nos[i]),
- atoi(v_page_nos[i])));
- }
- }
- return 0;
-}
-
-int CTvProgram::selectProgramInChannelByNumber(int channelID, int num, CTvDatabase::Cursor &c)
-{
- String8 cmd = String8("select * from srv_table where db_ts_id = ") + String8::format("%d", channelID) + String8(" and ");
- cmd += String8("chan_num = ") + String8::format("%d", num);
- return CTvDatabase::GetTvDb()->select(cmd, c);
-}
-
-
-int CTvProgram::selectProgramInChannelByNumber(int channelID, int major, int minor, CTvDatabase::Cursor &c)
-{
- String8 cmd = String8("select * from srv_table where db_ts_id = ") + String8::format("%d", channelID) + String8(" and ");
- cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num = ") + String8::format("%d", minor);
-
- return CTvDatabase::GetTvDb()->select(cmd, c);
-}
-
-/**
- *å‘æ•°æ®åº“添加一个Program,not atscMode
- */
-CTvProgram::CTvProgram(int channelID, int type, int num, int skipFlag)
-{
- CTvChannel channel;
- int ret = CTvChannel::selectByID(channelID, channel);
- if (ret != 0) {
- //Log.d(TAG, "Cannot add new program, invalid channel id "+channelID);
- this->id = -1;
- } else {
- CTvDatabase::Cursor c ;
- selectProgramInChannelByNumber(channelID, num, c);
-
- if (c.moveToFirst()) {
- /*Construct*/
- CreateFromCursor(c);
- } else {
- String8 tpids = String8(""), ttypes = String8(""), tmagnums = String8(""), tpgnums = String8(""), tlangs = String8("");
- String8 spids = String8(""), stypes = String8(""), scpgids = String8(""), sapgids = String8(""), slangs = String8("");
-
- /*add a new atv program to database*/
- String8 cmd = String8("insert into srv_table(db_net_id,db_ts_id,service_id,src,name,service_type,");
- cmd += String8("eit_schedule_flag,eit_pf_flag,running_status,free_ca_mode,volume,aud_track,vid_pid,");
- cmd += String8("vid_fmt,aud_pids,aud_fmts,aud_langs,skip,lock,chan_num,major_chan_num,");
- cmd += String8("minor_chan_num,access_controlled,hidden,hide_guide,source_id,favor,current_aud,");
- cmd += String8("current_sub,sub_pids,sub_types,sub_composition_page_ids,sub_ancillary_page_ids,sub_langs,");
- cmd += String8("current_ttx,ttx_pids,ttx_types,ttx_magazine_nos,ttx_page_nos,ttx_langs,");
- cmd += String8("db_sat_para_id,scrambled_flag,lcn,hd_lcn,sd_lcn,default_chan_num,chan_order) ");
- cmd += String8("values(-1,") + String8::format("%d", channelID) + String8(",65535,") + String8::format("%d", channel.getMode()) + String8(",'',") + String8::format("%d", type) + String8(",");
- cmd += String8("0,0,0,0,0,0,8191,");
- int chanNum = num;
- int majorNum = 0;
- cmd += String8("-1,'','','',") + String8::format("%d", skipFlag) + String8(",0,") + String8::format("%d", chanNum) + String8(",") + String8::format("%d", majorNum) + String8(",");
- cmd += String8("") + /*num.getMinor()*/String8("0") + String8(",0,0,0,-1,0,-1,");
- cmd += String8("-1,'") + spids + String8("','") + stypes + String8("','") + scpgids + String8("','") + sapgids + String8("','") + slangs + String8("',");
- cmd += String8("-1,'") + tpids + String8("','") + ttypes + String8("','") + tmagnums + String8("','") + tpgnums + String8("','") + tlangs + String8("',");
- cmd += String8("-1,0,-1,-1,-1,-1,0)");
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-
- CTvDatabase::Cursor cr;
- selectProgramInChannelByNumber(channelID, num, cr);
- if (cr.moveToFirst()) {
- /*Construct*/
- CreateFromCursor(cr);
- } else {
- /*A critical error*/
- //Log.d(TAG, "Cannot add new program, sqlite error");
- this->id = -1;
- }
- cr.close();
- }
- c.close();
- }
-
-}
-
-
-/**
- *å‘æ•°æ®åº“添加一个Program,atscMode
- */
-CTvProgram::CTvProgram(int channelID, int type, int major, int minor, int skipFlag)
-{
- CTvChannel channel;
- int ret = CTvChannel::selectByID(channelID, channel);
- if (ret != 0) {
- //Log.d(TAG, "Cannot add new program, invalid channel id "+channelID);
- this->id = -1;
- } else {
- CTvDatabase::Cursor c ;
- selectProgramInChannelByNumber(channelID, major, minor, c);
-
- if (c.moveToFirst()) {
- /*Construct*/
- CreateFromCursor(c);
- } else {
- String8 tpids = String8(""), ttypes = String8(""), tmagnums = String8(""), tpgnums = String8(""), tlangs = String8("");
- String8 spids = String8(""), stypes = String8(""), scpgids = String8(""), sapgids = String8(""), slangs = String8("");
-
- /*add a new atv program to database*/
- String8 cmd = String8("insert into srv_table(db_net_id,db_ts_id,service_id,src,name,service_type,");
- cmd += String8("eit_schedule_flag,eit_pf_flag,running_status,free_ca_mode,volume,aud_track,vid_pid,");
- cmd += String8("vid_fmt,aud_pids,aud_fmts,aud_langs,skip,lock,chan_num,major_chan_num,");
- cmd += String8("minor_chan_num,access_controlled,hidden,hide_guide,source_id,favor,current_aud,");
- cmd += String8("current_sub,sub_pids,sub_types,sub_composition_page_ids,sub_ancillary_page_ids,sub_langs,");
- cmd += String8("current_ttx,ttx_pids,ttx_types,ttx_magazine_nos,ttx_page_nos,ttx_langs,");
- cmd += String8("db_sat_para_id,scrambled_flag,lcn,hd_lcn,sd_lcn,default_chan_num,chan_order) ");
- cmd += String8("values(-1,") + String8::format("%d", channelID) + String8(",65535,") + String8::format("%d", channel.getMode()) + String8(",'',") + String8::format("%d", type) + String8(",");
- cmd += String8("0,0,0,0,0,0,8191,");
- int chanNum = major << 16 | minor;
- int majorNum = major;
- cmd += String8("-1,'','','',") + String8::format("%d", skipFlag) + String8(",0,") + String8::format("%d", chanNum) + String8(",") + String8::format("%d", majorNum) + String8(",");
- cmd += String8("") + String8::format("%d", minor) + String8(",0,0,0,-1,0,-1,");
- cmd += String8("-1,'") + spids + String8("','") + stypes + String8("','") + scpgids + String8("','") + sapgids + String8("','") + slangs + String8("',");
- cmd += String8("-1,'") + tpids + String8("','") + ttypes + String8("','") + tmagnums + String8("','") + tpgnums + String8("','") + tlangs + String8("',");
- cmd += String8("-1,0,-1,-1,-1,-1,0)");
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-
- CTvDatabase::Cursor cr;
- selectProgramInChannelByNumber(channelID, major, minor, cr);
- if (cr.moveToFirst()) {
- /*Construct*/
- CreateFromCursor(cr);
- } else {
- /*A critical error*/
- //Log.d(TAG, "Cannot add new program, sqlite error");
- this->id = -1;
- }
- cr.close();
- }
- c.close();
- }
-
-}
-/**
- *æ ¹æ®è®°å½•ID查找指定TVProgram
-*/
-
-int CTvProgram::selectByID(int id, CTvProgram &prog)
-{
-
- CTvDatabase::Cursor c;
- String8 sql;
- sql = String8("select * from srv_table where srv_table.db_id = ") + String8::format("%d", id);
- CTvDatabase::GetTvDb()->select(sql.string(), c) ;
- if (c.moveToFirst()) {
- prog.CreateFromCursor(c);
- } else {
- c.close();
- return -1;
- }
- c.close();
- return 0;
-}
-
-int CTvProgram::updateVolComp(int progID, int volValue)
-{
- String8 cmd = String8("update srv_table set volume = ") + String8::format("%d", volValue) +
- String8(" where srv_table.db_id = ") + String8::format("%d", progID);
- LOGD("%s, cmd = %s\n", "TV", cmd.string());
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-
- return 0;
-}
-
-int CTvProgram::getChannel(CTvChannel &c)
-{
- return CTvChannel::selectByID(channelID, c);
-}
-
-int CTvProgram::upDateChannel(CTvChannel &c, int std, int Freq, int fineFreq)
-{
- return CTvChannel::updateByID(channelID, std, Freq, fineFreq);
-}
-
-int CTvProgram::deleteChannelsProgram(CTvChannel &c)
-{
- String8 cmd;
- cmd = String8("delete from srv_table where srv_table.db_ts_id = ") + String8::format("%d", c.getID());
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
- return 0;
-}
-
-
-/**
- *æ ¹æ®èŠ‚目类型和节目å·æŸ¥æ‰¾æŒ‡å®šTVProgram
-*/
-int CTvProgram::selectByNumber(int type, int num, CTvProgram &prog)
-{
- String8 cmd;
-
- cmd = String8("select * from srv_table where ");
- if (type != TYPE_UNKNOWN) {
- if (type == TYPE_DTV) {
- cmd += String8("(service_type = ") + String8::format("%d", TYPE_TV) + String8(" or service_type = ") + String8::format("%d", TYPE_RADIO) + String8(") and ");
- } else {
- cmd += String8("service_type = ") + String8::format("%d", type) + String8(" and ");
- }
- }
-
- cmd += String8("chan_num = ") + String8::format("%d", num);
-
- CTvDatabase::Cursor c;
- CTvDatabase::GetTvDb()->select(cmd, c);
-
- if (c.moveToFirst()) {
- prog.CreateFromCursor(c);
- } else {
- c.close();
- return -1;
- }
- c.close();
-
- return 0;
-}
-
-/**
- *æ ¹æ®èŠ‚目类型和节目å·æŸ¥æ‰¾æŒ‡å®šTVProgram
-*/
-int CTvProgram::selectByNumber(int type, int major, int minor, CTvProgram &prog, int minor_check)
-{
- String8 cmd;
-
- cmd = String8("select * from srv_table where ");
- if (type != TYPE_UNKNOWN) {
- if (type == TYPE_DTV) {
- cmd += String8("(service_type = ") + String8::format("%d", TYPE_TV) + String8(" or service_type = ") + String8::format("%d", TYPE_RADIO) + String8(") and ");
- } else {
- cmd += String8("service_type = ") + String8::format("%d", type) + String8(" and ");
- }
- }
-
- if (minor < 0) {
- /*recursive call*/
- /*select dtv program first*/
- //showbo
- int ret = selectByNumber(TYPE_DTV, major, 1, prog, MINOR_CHECK_NEAREST_UP);
- if (ret != 0) {
- /*then try atv program*/
- selectByNumber(TYPE_ATV, major, 0 , prog, MINOR_CHECK_NONE);
- }
- return 0;
- } else if (minor >= 1) {
- if (minor_check == MINOR_CHECK_UP) {
- cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num >= ") + String8::format("%d", minor) + String8(" ");
- cmd += String8("order by minor_chan_num DESC limit 1");
- } else if (minor_check == MINOR_CHECK_DOWN) {
- cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num <= ") + String8::format("%d", minor) + String8(" ");
- cmd += String8("order by minor_chan_num limit 1");
- } else if (minor_check == MINOR_CHECK_NEAREST_UP) {
- cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num >= ") + String8::format("%d", minor) + String8(" ");
- cmd += String8("order by minor_chan_num limit 1");
- } else if (minor_check == MINOR_CHECK_NEAREST_DOWN) {
- cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num <= ") + String8::format("%d", minor) + String8(" ");
- cmd += String8("order by minor_chan_num DESC limit 1");
- } else {
- cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num = ") + String8::format("%d", minor);
- }
- } else {
- cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num = ") + String8::format("%d", minor);
- }
-
-
- CTvDatabase::Cursor c;
- CTvDatabase::GetTvDb()->select(cmd, c);
-
- if (c.moveToFirst()) {
- prog.CreateFromCursor(c);
- } else {
- c.close();
- return -1;
- }
- c.close();
-
- return 0;
-}
-
-
-/**
- *列出一个channel的全部TVProgram
- *@param channelID channel id
- *@param type 节目类型
- */
-int CTvProgram::selectByChannel(int channelID, int type, Vector<sp<CTvProgram> > &out)
-{
-
- //Vector<CTvProgram*> vp;
- String8 cmd = String8("select * from srv_table ");
-
-
- if (type == TYPE_DTV) {
- cmd += String8("where (service_type = ") + String8::format("%d", TYPE_TV) + String8(" or service_type = ") + String8::format("%d", TYPE_RADIO) + String8(") ");
- } else if (type != TYPE_UNKNOWN) {
- cmd += String8("where service_type = ") + String8::format("%d", type) + String8(" ");
- }
-
- cmd += String8(" and db_ts_id = ") + String8::format("%d", channelID) + String8(" order by chan_order");
-
- CTvDatabase::Cursor c;
- int ret = CTvDatabase::GetTvDb()->select(cmd, c);
-
- LOGD("selectByChannel select ret = %d", ret);
-
- if (c.moveToFirst()) {
- do {
- out.add(new CTvProgram(c));
- } while (c.moveToNext());
- }
- c.close();
-
- return 0;
-}
-
-void CTvProgram::deleteProgram(int progId)
-{
- String8 cmd;
-
- cmd = String8("delete from srv_table where srv_table.db_id = ") + String8::format("%d", progId);
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-}
-
-int CTvProgram::CleanAllProgramBySrvType(int srvType)
-{
- String8 cmd = String8("delete from srv_table where service_type = ") + String8::format("%d", srvType);
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
- return 0;
-}
-
-int CTvProgram::selectByType(int type, int skip, Vector<sp<CTvProgram> > &out)
-{
- String8 cmd = String8("select * from srv_table ");
- LOGD("%s, type= %d\n", "TV", (int)type);
-
- if (type == TYPE_UNKNOWN) {
- cmd += String8("where (service_type = ") + String8::format("%d", TYPE_ATV) +
- String8(" or service_type = ") + String8::format("%d", TYPE_DTV) +
- String8(" or service_type = ") + String8::format("%d", TYPE_RADIO) +
- String8(") ");
- } else {
- cmd += String8("where service_type = ") + String8::format("%d", type) + String8(" ");
- }
-
- if (skip == PROGRAM_SKIP_NO || skip == PROGRAM_SKIP_YES)
- cmd += String8(" and skip = ") + String8::format("%d", skip) + String8(" ");
-
- cmd += String8(" order by chan_order");
-
- CTvDatabase::Cursor c;
- int ret = CTvDatabase::GetTvDb()->select(cmd, c);
-
- LOGD("selectByChannel select ret = %d", ret);
-
- if (c.moveToFirst()) {
- do {
- out.add(new CTvProgram(c));
- } while (c.moveToNext());
- }
- c.close();
-
- return 0;
-}
-
-int CTvProgram::selectByChanID(int type, int skip, Vector < sp < CTvProgram > > &out)
-{
- String8 cmd = String8("select * from srv_table ");
-
- if (type == TYPE_UNKNOWN) {
- cmd += String8("where (service_type = ") + String8::format("%d", TYPE_ATV) +
- String8(" or service_type = ") + String8::format("%d", TYPE_DTV) +
- String8(") ");
- } else {
- cmd += String8("where service_type = ") + String8::format("%d", type) + String8(" ");
- }
-
- if (skip == PROGRAM_SKIP_NO || skip == PROGRAM_SKIP_YES)
- cmd += String8(" and skip = ") + String8::format("%d", PROGRAM_SKIP_NO) +
- String8(" or skip = ") + String8::format("%d", PROGRAM_SKIP_YES) + String8(" ");
-
- cmd += String8(" order by db_id");
-
- CTvDatabase::Cursor c;
- int ret = CTvDatabase::GetTvDb()->select(cmd, c);
-
- if (c.moveToFirst()) {
- do {
- out.add(new CTvProgram(c));
- } while (c.moveToNext());
- }
- c.close();
-
- return 0;
-
-}
-
-int CTvProgram::selectAll(bool no_skip, Vector<sp<CTvProgram> > &out)
-{
- return selectByType(TYPE_UNKNOWN, no_skip, out);
-}
-
-Vector<CTvProgram> CTvProgram::selectByChannel(int channelID)
-{
- Vector<CTvProgram> vProg;
- return vProg;
-}
-
-Vector<CTvProgram> CTvProgram::selectByName(int name)
-{
- Vector<CTvProgram> vProg;
- return vProg;
-}
-
-void CTvProgram::tvProgramDelByChannelID(int channelID)
-{
-
-}
-
-
-String8 CTvProgram::getName()
-{
- return name;
-}
-int CTvProgram::getProgSkipFlag()
-{
- return skip;
-}
-
-/**
- *å–得当å‰çš„audio索引
- *@param defaultLang 用户未选择语言时,默认的全局语言
- *@return 当å‰çš„Audio索引
- */
-int CTvProgram::getCurrentAudio(String8 defaultLang)
-{
- CTvDatabase::Cursor c;
- String8 cmd;
- cmd = String8("select current_aud from srv_table where db_id = ") + String8::format("%d", this->id);
- int ret = CTvDatabase::GetTvDb()->select(cmd, c);
- LOGD("getCurrentAudio a size = %d", mvAudios.size());
- int id = 0;
- if (c.moveToFirst()) {
- id = c.getInt(0);
- LOGD("getCurrentAudio a id = %d", id);
- if (id < 0 && mvAudios.size() > 0) {
- LOGD("getCurrentAudio defaultLang.isEmpty() =%s= %d", defaultLang.string(), defaultLang.isEmpty());
- if (!defaultLang.isEmpty()) {
- for (int i = 0; i < mvAudios.size(); i++) {
- LOGD("getCurrentAudio a mvAudios[i] = %d", mvAudios[i]);
- if (mvAudios[i]->getLang() == defaultLang) {
- id = i;
- break;
- }
- }
- }
-
- if (id < 0) {
- /* still not found, using the first */
- id = 0;
- }
- }
- }
- LOGD("getCurrentAudio a idsss = %d", id);
- c.close();
-
- return id;
-}
-
-int CTvProgram::getCurrAudioTrackIndex()
-{
- int audTrackIdx = -1;
-
- if (-1 == currAudTrackIndex) { // no set field "current_aud"
- audTrackIdx = getCurrentAudio(String8("eng"));
- setCurrAudioTrackIndex(this->id, audTrackIdx);
- } else {
- audTrackIdx = currAudTrackIndex;
- }
-
- return audTrackIdx;
-}
-
-
-void CTvProgram::setCurrAudioTrackIndex(int programId, int audioIndex)
-{
- String8 cmd;
-
- cmd = String8("update srv_table set current_aud = ")
- + String8::format("%d", audioIndex) + String8(" where srv_table.db_id = ") + String8::format("%d", programId);
-
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-}
-
-void CTvProgram::setFavoriteFlag(int progId, bool bFavor)
-{
- String8 cmd;
-
- cmd = String8("update srv_table set favor = ")
- + String8::format("%d", bFavor ? 1 : 0) + String8(" where srv_table.db_id = ") + String8::format("%d", progId);
-
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-
-}
-
-void CTvProgram::setSkipFlag(int progId, bool bSkipFlag)
-{
- String8 cmd;
-
- cmd = String8("update srv_table set skip = ") + String8::format("%d", bSkipFlag ? 1 : 0)
- + String8(" where srv_table.db_id = ") + String8::format("%d", progId);
-
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-}
-
-void CTvProgram::updateProgramName(int progId, String8 strName)
-{
- String8 newName = String8("xxx") + strName;
- String8 cmd;
-
- cmd = String8("update srv_table set name =") + "\'" + String8::format("%s", newName.string()) + "\'"
- + String8(" where srv_table.db_id = ") + String8::format("%d", progId);
-
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-}
-
-void CTvProgram::swapChanOrder(int ProgId1, int chanOrderNum1, int ProgId2, int chanOrderNum2)
-{
- String8 cmd;
-
- cmd = String8("update srv_table set chan_order = ") + String8::format("%d", chanOrderNum2)
- + String8(" where db_id = ") + String8::format("%d", ProgId1);
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-
- String8 cmd2;
- cmd2 = String8("update srv_table set chan_order = ") + String8::format("%d", chanOrderNum1)
- + String8(" where db_id = ") + String8::format("%d", ProgId2);
- CTvDatabase::GetTvDb()->exeSql(cmd2.string());
-}
-
-
-void CTvProgram::setLockFlag(int progId, bool bLockFlag)
-{
- String8 cmd;
-
- cmd = String8("update srv_table set lock = ") + String8::format("%d", bLockFlag ? 1 : 0)
- + String8(" where srv_table.db_id = ") + String8::format("%d", progId);
-
- CTvDatabase::GetTvDb()->exeSql(cmd.string());
-}
-bool CTvProgram::getLockFlag()
-{
- return lock;
-}
-
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvProgram.cpp
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+
+#include "CTvProgram.h"
+#include "CTvDatabase.h"
+#include "CTvChannel.h"
+#include "CTvEvent.h"
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#define LOG_TAG "CTvProgram"
+#endif
+
+CTvProgram::CTvProgram(CTvDatabase::Cursor &c)
+{
+ CreateFromCursor(c);
+}
+
+CTvProgram::~CTvProgram()
+{
+ //free mem
+ // video
+ if(mpVideo != NULL) delete mpVideo;
+ // audios
+ int size = mvAudios.size();
+ for(int i = 0; i < size; i++)
+ delete mvAudios[i];
+ // subtitles
+ size = mvSubtitles.size();
+ for(int i = 0; i < size; i++)
+ delete mvSubtitles[i];
+ // teletexts
+ size = mvTeletexts.size();
+ for(int i = 0; i < size; i++)
+ delete mvTeletexts[i];
+}
+
+CTvProgram::CTvProgram(int channelID, int type)
+{
+ mpVideo = NULL;
+}
+
+CTvProgram::CTvProgram()
+{
+ mpVideo = NULL;
+}
+int CTvProgram::CreateFromCursor(CTvDatabase::Cursor &c)
+{
+ int i = 0;
+ int col;
+ int num, type;
+ int major, minor;
+ char tmp_buf[256];
+ //LOGD("CTvProgram::CreateFromCursor");
+ col = c.getColumnIndex("db_id");
+ this->id = c.getInt(col);
+
+ col = c.getColumnIndex("source_id");
+ this->sourceID = c.getInt(col);
+
+ col = c.getColumnIndex("src");
+ this->src = c.getInt(col);
+
+ col = c.getColumnIndex("service_id");
+ this->dvbServiceID = c.getInt(col);
+
+ col = c.getColumnIndex("db_ts_id");
+ this->channelID = c.getInt(col);
+
+ col = c.getColumnIndex("name");
+ this->name = c.getString(col);
+
+ col = c.getColumnIndex("chan_num");
+ num = c.getInt(col);
+
+ col = c.getColumnIndex("chan_order");
+ this->chanOrderNum = c.getInt(col);
+
+ col = c.getColumnIndex("major_chan_num");
+ major = c.getInt(col);
+
+ col = c.getColumnIndex("minor_chan_num");
+ minor = c.getInt(col);
+
+ col = c.getColumnIndex("aud_track");
+ this->audioTrack = c.getInt(col);
+
+ //节目å·ä¿¡æ¯åˆ??
+ if (src == CTvChannel::MODE_ATSC || (src == CTvChannel::MODE_ANALOG && major > 0)) {
+ this->major = major;
+ this->minor = minor;
+ this->atscMode = true;
+ this->minorCheck = MINOR_CHECK_NONE;
+ } else {
+ this->major = num;
+ this->minor = 0;
+ this->atscMode = false;
+ this->minorCheck = MINOR_CHECK_NONE;
+ }
+
+ col = c.getColumnIndex("service_type");
+ this->type = c.getInt(col);
+
+ col = c.getColumnIndex("pmt_pid");
+ pmtPID = c.getInt(col);
+
+ //LOGD("CTvProgram::CreateFromCursor type = %d", this->type);
+ col = c.getColumnIndex("skip");
+ this->skip = c.getInt(col);
+
+ col = c.getColumnIndex("lock");
+ this->lock = (c.getInt(col) != 0);
+
+ col = c.getColumnIndex("scrambled_flag");
+ this->scrambled = (c.getInt(col) != 0);
+
+ col = c.getColumnIndex("favor");
+ this->favorite = (c.getInt(col) != 0);
+
+ col = c.getColumnIndex("volume");
+ this->volume = c.getInt(col);
+
+ //Video
+ int pid, fmt;
+ col = c.getColumnIndex("vid_pid");
+ pid = c.getInt(col);
+
+ col = c.getColumnIndex("vid_fmt");
+ fmt = c.getInt(col);
+
+ //LOGD("----------vpid = %d", pid);
+ this->mpVideo = new Video(pid, fmt);
+ //LOGD("----------vpid = %d", this->mpVideo->getPID());
+
+
+ //Audio
+ String8 strPids;
+ String8 strFmts;
+ String8 strLangs;
+ int count = 0;
+ col = c.getColumnIndex("aud_pids");
+ strPids = c.getString(col);
+
+ col = c.getColumnIndex("aud_fmts");
+ strFmts = c.getString(col);
+
+ col = c.getColumnIndex("aud_langs");
+ strLangs = c.getString(col);
+ col = c.getColumnIndex("current_aud");
+ this->currAudTrackIndex = c.getInt(col);
+
+ char *tmp;
+ Vector<String8> vpid ;
+ Vector<String8> vfmt ;
+ Vector<String8> vlang;
+
+ tmp = strtok(strPids.lockBuffer(strPids.length()), " ");
+ while (tmp != NULL) {
+ vpid.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ strPids.unlockBuffer();
+
+ tmp = strtok(strFmts.lockBuffer(strFmts.length()), " ");
+ while (tmp != NULL) {
+ vfmt.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ strFmts.unlockBuffer();
+
+ tmp = strtok(strLangs.lockBuffer(strLangs.length()), " ");
+
+ while (tmp != NULL) {
+ vlang.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ strLangs.unlockBuffer();
+
+ //check empty aud_langs
+ for(i = vlang.size(); i < vpid.size(); i++) {
+ sprintf(tmp_buf, "Audio%d", i + 1);
+ vlang.push_back(String8(tmp_buf));
+ LOGE("%s, aud_langs is empty, add dummy data (%s).\n", "TV", tmp_buf);
+ }
+
+ //String8 l(vlang[i]);
+ for(i = 0; i < vpid.size(); i++) {
+ int i_pid = atoi(vpid[i]);
+ int i_fmt = atoi(vfmt[i]);
+ mvAudios.push_back(new Audio(i_pid, vlang[i], i_fmt));
+ }
+
+
+
+ /* parse subtitles */
+ vpid.clear();
+ vlang.clear();
+ Vector<String8> vcid;
+ Vector<String8> vaid;
+ String8 strCids;
+ String8 strAids;
+
+ col = c.getColumnIndex("sub_pids");
+ strPids = c.getString(col);
+
+ col = c.getColumnIndex("sub_composition_page_ids");
+ strCids = c.getString(col);
+
+ col = c.getColumnIndex("sub_ancillary_page_ids");
+ strAids = c.getString(col);
+
+
+ col = c.getColumnIndex("sub_langs");
+ strLangs = c.getString(col);
+
+ tmp = strtok(strPids.lockBuffer(strPids.length()), " ");
+ while (tmp != NULL) {
+ vpid.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ strPids.unlockBuffer();
+
+ tmp = strtok(strCids.lockBuffer(strCids.length()), " ");
+ while (tmp != NULL) {
+ vcid.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ strCids.unlockBuffer();
+
+ tmp = strtok(strAids.lockBuffer(strAids.length()), " ");
+ while (tmp != NULL) {
+ vaid.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ strAids.unlockBuffer();
+
+ tmp = strtok(strLangs.lockBuffer(strLangs.length()), " ");
+ while (tmp != NULL) {
+ vlang.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ strLangs.unlockBuffer();
+
+ //Subtitle
+ for(int i = 0; i < vpid.size(); i++) {
+ this->mvSubtitles.push_back(new Subtitle(
+ atoi(vpid[i]),
+ String8(vlang[i]), Subtitle::TYPE_DVB_SUBTITLE,
+ atoi(vcid[i]),
+ atoi(vaid[i])));
+ }
+
+ /* parse teletexts */
+ int ttx_count = 0, ttx_sub_count = 0;
+ String8 str_ttx_pids, str_ttx_types, str_mag_nos, str_page_nos, str_ttx_langs;
+ Vector<String8> v_ttx_pids, v_ttx_types, v_mag_nos, v_page_nos, v_ttx_langs;
+ col = c.getColumnIndex("ttx_pids");
+ str_ttx_pids = c.getString(col);
+
+ col = c.getColumnIndex("ttx_types");
+ str_ttx_types = c.getString(col);
+
+ col = c.getColumnIndex("ttx_magazine_nos");
+ str_mag_nos = c.getString(col);
+
+ col = c.getColumnIndex("ttx_page_nos");
+ str_page_nos = c.getString(col);
+
+ col = c.getColumnIndex("ttx_langs");
+ str_ttx_langs = c.getString(col);
+
+ tmp = strtok(str_ttx_pids.lockBuffer(str_ttx_pids.length()), " ");
+ while (tmp != NULL) {
+ v_ttx_pids.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ str_ttx_pids.unlockBuffer();
+
+ tmp = strtok(str_ttx_types.lockBuffer(str_ttx_types.length()), " ");
+ while (tmp != NULL) {
+ v_ttx_types.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ str_ttx_types.unlockBuffer();
+
+ tmp = strtok(str_mag_nos.lockBuffer(str_mag_nos.length()), " ");
+ while (tmp != NULL) {
+ v_mag_nos.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ str_mag_nos.unlockBuffer();
+
+ tmp = strtok(str_page_nos.lockBuffer(str_page_nos.length()), " ");
+ while (tmp != NULL) {
+ v_page_nos.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ str_page_nos.unlockBuffer();
+
+ tmp = strtok(str_ttx_langs.lockBuffer(str_ttx_langs.length()), " ");
+ while (tmp != NULL) {
+ v_ttx_langs.push_back(String8(tmp));
+ tmp = strtok(NULL, " ");
+ }
+ str_ttx_langs.unlockBuffer();
+
+
+ for(int i = 0; i < v_ttx_pids.size(); i++) {
+ int ttype = atoi(v_ttx_types[i]);
+ if (ttype == 0x2 || ttype == 0x5) {
+ this->mvSubtitles.push_back(new Subtitle(
+ atoi(v_ttx_pids[i].string()),
+ String8(v_ttx_langs[i]), Subtitle::TYPE_DTV_TELETEXT,
+ atoi(v_mag_nos[i]),
+ atoi(v_page_nos[i])));
+ } else {
+ this->mvTeletexts.push_back(new Teletext(
+ atoi(v_ttx_pids[i]),
+ String8(v_ttx_langs[i]),
+ atoi(v_mag_nos[i]),
+ atoi(v_page_nos[i])));
+ }
+ }
+ return 0;
+}
+
+int CTvProgram::selectProgramInChannelByNumber(int channelID, int num, CTvDatabase::Cursor &c)
+{
+ String8 cmd = String8("select * from srv_table where db_ts_id = ") + String8::format("%d", channelID) + String8(" and ");
+ cmd += String8("chan_num = ") + String8::format("%d", num);
+ return CTvDatabase::GetTvDb()->select(cmd, c);
+}
+
+
+int CTvProgram::selectProgramInChannelByNumber(int channelID, int major, int minor, CTvDatabase::Cursor &c)
+{
+ String8 cmd = String8("select * from srv_table where db_ts_id = ") + String8::format("%d", channelID) + String8(" and ");
+ cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num = ") + String8::format("%d", minor);
+
+ return CTvDatabase::GetTvDb()->select(cmd, c);
+}
+
+/**
+ *å‘æ•°æ®åº“添加一个Program,not atscMode
+ */
+CTvProgram::CTvProgram(int channelID, int type, int num, int skipFlag)
+{
+ CTvChannel channel;
+ int ret = CTvChannel::selectByID(channelID, channel);
+ if (ret != 0) {
+ //Log.d(TAG, "Cannot add new program, invalid channel id "+channelID);
+ this->id = -1;
+ } else {
+ CTvDatabase::Cursor c ;
+ selectProgramInChannelByNumber(channelID, num, c);
+
+ if(c.moveToFirst()) {
+ /*Construct*/
+ CreateFromCursor(c);
+ } else {
+ String8 tpids = String8(""), ttypes = String8(""), tmagnums = String8(""), tpgnums = String8(""), tlangs = String8("");
+ String8 spids = String8(""), stypes = String8(""), scpgids = String8(""), sapgids = String8(""), slangs = String8("");
+
+ /*add a new atv program to database*/
+ String8 cmd = String8("insert into srv_table(db_net_id,db_ts_id,service_id,src,name,service_type,");
+ cmd += String8("eit_schedule_flag,eit_pf_flag,running_status,free_ca_mode,volume,aud_track,vid_pid,");
+ cmd += String8("vid_fmt,aud_pids,aud_fmts,aud_langs,skip,lock,chan_num,major_chan_num,");
+ cmd += String8("minor_chan_num,access_controlled,hidden,hide_guide,source_id,favor,current_aud,");
+ cmd += String8("current_sub,sub_pids,sub_types,sub_composition_page_ids,sub_ancillary_page_ids,sub_langs,");
+ cmd += String8("current_ttx,ttx_pids,ttx_types,ttx_magazine_nos,ttx_page_nos,ttx_langs,");
+ cmd += String8("db_sat_para_id,scrambled_flag,lcn,hd_lcn,sd_lcn,default_chan_num,chan_order) ");
+ cmd += String8("values(-1,") + String8::format("%d", channelID) + String8(",65535,") + String8::format("%d", channel.getMode()) + String8(",'',") + String8::format("%d", type) + String8(",");
+ cmd += String8("0,0,0,0,0,0,8191,");
+ int chanNum = num;
+ int majorNum = 0;
+ cmd += String8("-1,'','','',") + String8::format("%d", skipFlag) + String8(",0,") + String8::format("%d", chanNum) + String8(",") + String8::format("%d", majorNum) + String8(",");
+ cmd += String8("") + /*num.getMinor()*/String8("0") + String8(",0,0,0,-1,0,-1,");
+ cmd += String8("-1,'") + spids + String8("','") + stypes + String8("','") + scpgids + String8("','") + sapgids + String8("','") + slangs + String8("',");
+ cmd += String8("-1,'") + tpids + String8("','") + ttypes + String8("','") + tmagnums + String8("','") + tpgnums + String8("','") + tlangs + String8("',");
+ cmd += String8("-1,0,-1,-1,-1,-1,0)");
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+
+ CTvDatabase::Cursor cr;
+ selectProgramInChannelByNumber(channelID, num, cr);
+ if(cr.moveToFirst()) {
+ /*Construct*/
+ CreateFromCursor(cr);
+ } else {
+ /*A critical error*/
+ //Log.d(TAG, "Cannot add new program, sqlite error");
+ this->id = -1;
+ }
+ cr.close();
+ }
+ c.close();
+ }
+
+}
+
+
+/**
+ *å‘æ•°æ®åº“添加一个Program,atscMode
+ */
+CTvProgram::CTvProgram(int channelID, int type, int major, int minor, int skipFlag)
+{
+ CTvChannel channel;
+ int ret = CTvChannel::selectByID(channelID, channel);
+ if (ret != 0) {
+ //Log.d(TAG, "Cannot add new program, invalid channel id "+channelID);
+ this->id = -1;
+ } else {
+ CTvDatabase::Cursor c ;
+ selectProgramInChannelByNumber(channelID, major, minor, c);
+
+ if(c.moveToFirst()) {
+ /*Construct*/
+ CreateFromCursor(c);
+ } else {
+ String8 tpids = String8(""), ttypes = String8(""), tmagnums = String8(""), tpgnums = String8(""), tlangs = String8("");
+ String8 spids = String8(""), stypes = String8(""), scpgids = String8(""), sapgids = String8(""), slangs = String8("");
+
+ /*add a new atv program to database*/
+ String8 cmd = String8("insert into srv_table(db_net_id,db_ts_id,service_id,src,name,service_type,");
+ cmd += String8("eit_schedule_flag,eit_pf_flag,running_status,free_ca_mode,volume,aud_track,vid_pid,");
+ cmd += String8("vid_fmt,aud_pids,aud_fmts,aud_langs,skip,lock,chan_num,major_chan_num,");
+ cmd += String8("minor_chan_num,access_controlled,hidden,hide_guide,source_id,favor,current_aud,");
+ cmd += String8("current_sub,sub_pids,sub_types,sub_composition_page_ids,sub_ancillary_page_ids,sub_langs,");
+ cmd += String8("current_ttx,ttx_pids,ttx_types,ttx_magazine_nos,ttx_page_nos,ttx_langs,");
+ cmd += String8("db_sat_para_id,scrambled_flag,lcn,hd_lcn,sd_lcn,default_chan_num,chan_order) ");
+ cmd += String8("values(-1,") + String8::format("%d", channelID) + String8(",65535,") + String8::format("%d", channel.getMode()) + String8(",'',") + String8::format("%d", type) + String8(",");
+ cmd += String8("0,0,0,0,0,0,8191,");
+ int chanNum = major << 16 | minor;
+ int majorNum = major;
+ cmd += String8("-1,'','','',") + String8::format("%d", skipFlag) + String8(",0,") + String8::format("%d", chanNum) + String8(",") + String8::format("%d", majorNum) + String8(",");
+ cmd += String8("") + String8::format("%d", minor) + String8(",0,0,0,-1,0,-1,");
+ cmd += String8("-1,'") + spids + String8("','") + stypes + String8("','") + scpgids + String8("','") + sapgids + String8("','") + slangs + String8("',");
+ cmd += String8("-1,'") + tpids + String8("','") + ttypes + String8("','") + tmagnums + String8("','") + tpgnums + String8("','") + tlangs + String8("',");
+ cmd += String8("-1,0,-1,-1,-1,-1,0)");
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+
+ CTvDatabase::Cursor cr;
+ selectProgramInChannelByNumber(channelID, major, minor, cr);
+ if(cr.moveToFirst()) {
+ /*Construct*/
+ CreateFromCursor(cr);
+ } else {
+ /*A critical error*/
+ //Log.d(TAG, "Cannot add new program, sqlite error");
+ this->id = -1;
+ }
+ cr.close();
+ }
+ c.close();
+ }
+
+}
+/**
+ *æ ¹æ®è®°å½•ID查找指定TVProgram
+*/
+
+int CTvProgram::selectByID(int id, CTvProgram &prog)
+{
+
+ CTvDatabase::Cursor c;
+ String8 sql;
+ sql = String8("select * from srv_table where srv_table.db_id = ") + String8::format("%d", id);
+ CTvDatabase::GetTvDb()->select(sql.string(), c) ;
+ if(c.moveToFirst()) {
+ prog.CreateFromCursor(c);
+ } else {
+ c.close();
+ return -1;
+ }
+ c.close();
+ return 0;
+}
+
+int CTvProgram::updateVolComp(int progID, int volValue)
+{
+ String8 cmd = String8("update srv_table set volume = ") + String8::format("%d", volValue) +
+ String8(" where srv_table.db_id = ") + String8::format("%d", progID);
+ LOGD("%s, cmd = %s\n", "TV", cmd.string());
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+
+ return 0;
+}
+
+int CTvProgram::getChannel(CTvChannel &c)
+{
+ return CTvChannel::selectByID(channelID, c);
+}
+
+int CTvProgram::upDateChannel(CTvChannel &c, int std, int Freq, int fineFreq)
+{
+ return CTvChannel::updateByID(channelID, std, Freq, fineFreq);
+}
+
+int CTvProgram::deleteChannelsProgram(CTvChannel &c)
+{
+ String8 cmd;
+ cmd = String8("delete from srv_table where srv_table.db_ts_id = ") + String8::format("%d", c.getID());
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+ return 0;
+}
+
+
+/**
+ *æ ¹æ®èŠ‚目类型和节目å·æŸ¥æ‰¾æŒ‡å®šTVProgram
+*/
+int CTvProgram::selectByNumber(int type, int num, CTvProgram &prog)
+{
+ String8 cmd;
+
+ cmd = String8("select * from srv_table where ");
+ if(type != TYPE_UNKNOWN) {
+ if(type == TYPE_DTV) {
+ cmd += String8("(service_type = ") + String8::format("%d", TYPE_TV) + String8(" or service_type = ") + String8::format("%d", TYPE_RADIO) + String8(") and ");
+ } else {
+ cmd += String8("service_type = ") + String8::format("%d", type) + String8(" and ");
+ }
+ }
+
+ cmd += String8("chan_num = ") + String8::format("%d", num);
+
+ CTvDatabase::Cursor c;
+ CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if(c.moveToFirst()) {
+ prog.CreateFromCursor(c);
+ } else {
+ c.close();
+ return -1;
+ }
+ c.close();
+
+ return 0;
+}
+
+/**
+ *æ ¹æ®èŠ‚目类型和节目å·æŸ¥æ‰¾æŒ‡å®šTVProgram
+*/
+int CTvProgram::selectByNumber(int type, int major, int minor, CTvProgram &prog, int minor_check)
+{
+ String8 cmd;
+
+ cmd = String8("select * from srv_table where ");
+ if(type != TYPE_UNKNOWN) {
+ if(type == TYPE_DTV) {
+ cmd += String8("(service_type = ") + String8::format("%d", TYPE_TV) + String8(" or service_type = ") + String8::format("%d", TYPE_RADIO) + String8(") and ");
+ } else {
+ cmd += String8("service_type = ") + String8::format("%d", type) + String8(" and ");
+ }
+ }
+
+ if (minor < 0) {
+ /*recursive call*/
+ /*select dtv program first*/
+ //showbo
+ int ret = selectByNumber(TYPE_DTV, major, 1, prog, MINOR_CHECK_NEAREST_UP);
+ if (ret != 0) {
+ /*then try atv program*/
+ selectByNumber(TYPE_ATV, major, 0 , prog, MINOR_CHECK_NONE);
+ }
+ return 0;
+ } else if (minor >= 1) {
+ if (minor_check == MINOR_CHECK_UP) {
+ cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num >= ") + String8::format("%d", minor) + String8(" ");
+ cmd += String8("order by minor_chan_num DESC limit 1");
+ } else if (minor_check == MINOR_CHECK_DOWN) {
+ cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num <= ") + String8::format("%d", minor) + String8(" ");
+ cmd += String8("order by minor_chan_num limit 1");
+ } else if (minor_check == MINOR_CHECK_NEAREST_UP) {
+ cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num >= ") + String8::format("%d", minor) + String8(" ");
+ cmd += String8("order by minor_chan_num limit 1");
+ } else if (minor_check == MINOR_CHECK_NEAREST_DOWN) {
+ cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num <= ") + String8::format("%d", minor) + String8(" ");
+ cmd += String8("order by minor_chan_num DESC limit 1");
+ } else {
+ cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num = ") + String8::format("%d", minor);
+ }
+ } else {
+ cmd += String8("major_chan_num = ") + String8::format("%d", major) + String8(" and minor_chan_num = ") + String8::format("%d", minor);
+ }
+
+
+ CTvDatabase::Cursor c;
+ CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if(c.moveToFirst()) {
+ prog.CreateFromCursor(c);
+ } else {
+ c.close();
+ return -1;
+ }
+ c.close();
+
+ return 0;
+}
+
+
+/**
+ *列出一个channel的全部TVProgram
+ *@param channelID channel id
+ *@param type 节目类型
+ */
+int CTvProgram::selectByChannel(int channelID, int type, Vector<sp<CTvProgram> > &out)
+{
+
+ //Vector<CTvProgram*> vp;
+ String8 cmd = String8("select * from srv_table ");
+
+
+ if(type == TYPE_DTV) {
+ cmd += String8("where (service_type = ") + String8::format("%d", TYPE_TV) + String8(" or service_type = ") + String8::format("%d", TYPE_RADIO) + String8(") ");
+ } else if(type != TYPE_UNKNOWN) {
+ cmd += String8("where service_type = ") + String8::format("%d", type) + String8(" ");
+ }
+
+ cmd += String8(" and db_ts_id = ") + String8::format("%d", channelID) + String8(" order by chan_order");
+
+ CTvDatabase::Cursor c;
+ int ret = CTvDatabase::GetTvDb()->select(cmd, c);
+
+ LOGD("selectByChannel select ret = %d", ret);
+
+ if(c.moveToFirst()) {
+ do {
+ out.add(new CTvProgram(c));
+ } while(c.moveToNext());
+ }
+ c.close();
+
+ return 0;
+}
+
+void CTvProgram::deleteProgram(int progId)
+{
+ String8 cmd;
+
+ cmd = String8("delete from srv_table where srv_table.db_id = ") + String8::format("%d", progId);
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+}
+
+int CTvProgram::CleanAllProgramBySrvType(int srvType)
+{
+ String8 cmd = String8("delete from srv_table where service_type = ") + String8::format("%d", srvType);
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+ return 0;
+}
+
+int CTvProgram::selectByType(int type, int skip, Vector<sp<CTvProgram> > &out)
+{
+ String8 cmd = String8("select * from srv_table ");
+ LOGD("%s, type= %d\n", "TV", (int)type);
+
+ if (type == TYPE_UNKNOWN) {
+ cmd += String8("where (service_type = ") + String8::format("%d", TYPE_ATV) +
+ String8(" or service_type = ") + String8::format("%d", TYPE_DTV) +
+ String8(" or service_type = ") + String8::format("%d", TYPE_RADIO) +
+ String8(") ");
+ } else {
+ cmd += String8("where service_type = ") + String8::format("%d", type) + String8(" ");
+ }
+
+ if(skip == PROGRAM_SKIP_NO || skip == PROGRAM_SKIP_YES)
+ cmd += String8(" and skip = ") + String8::format("%d", skip) + String8(" ");
+
+ cmd += String8(" order by chan_order");
+
+ CTvDatabase::Cursor c;
+ int ret = CTvDatabase::GetTvDb()->select(cmd, c);
+
+ LOGD("selectByChannel select ret = %d", ret);
+
+ if(c.moveToFirst()) {
+ do {
+ out.add(new CTvProgram(c));
+ } while(c.moveToNext());
+ }
+ c.close();
+
+ return 0;
+}
+
+int CTvProgram::selectByChanID(int type, int skip, Vector < sp < CTvProgram > > &out)
+{
+ String8 cmd = String8("select * from srv_table ");
+
+ if (type == TYPE_UNKNOWN) {
+ cmd += String8("where (service_type = ") + String8::format("%d", TYPE_ATV) +
+ String8(" or service_type = ") + String8::format("%d", TYPE_DTV) +
+ String8(") ");
+ } else {
+ cmd += String8("where service_type = ") + String8::format("%d", type) + String8(" ");
+ }
+
+ if(skip == PROGRAM_SKIP_NO || skip == PROGRAM_SKIP_YES)
+ cmd += String8(" and skip = ") + String8::format("%d", PROGRAM_SKIP_NO) +
+ String8(" or skip = ") + String8::format("%d", PROGRAM_SKIP_YES) + String8(" ");
+
+ cmd += String8(" order by db_id");
+
+ CTvDatabase::Cursor c;
+ int ret = CTvDatabase::GetTvDb()->select(cmd, c);
+
+ if(c.moveToFirst()) {
+ do {
+ out.add(new CTvProgram(c));
+ } while(c.moveToNext());
+ }
+ c.close();
+
+ return 0;
+
+}
+
+int CTvProgram::selectAll(bool no_skip, Vector<sp<CTvProgram> > &out)
+{
+ return selectByType(TYPE_UNKNOWN, no_skip, out);
+}
+
+Vector<CTvProgram> CTvProgram::selectByChannel(int channelID)
+{
+ Vector<CTvProgram> vProg;
+ return vProg;
+}
+
+Vector<CTvProgram> CTvProgram::selectByName(int name)
+{
+ Vector<CTvProgram> vProg;
+ return vProg;
+}
+
+void CTvProgram::tvProgramDelByChannelID(int channelID)
+{
+
+}
+
+
+String8 CTvProgram::getName()
+{
+ return name;
+}
+int CTvProgram::getProgSkipFlag()
+{
+ return skip;
+}
+
+/**
+ *å–得当å‰çš„audio索引
+ *@param defaultLang 用户未选择语言时,默认的全局语言
+ *@return 当å‰çš„Audio索引
+ */
+int CTvProgram::getCurrentAudio(String8 defaultLang)
+{
+ CTvDatabase::Cursor c;
+ String8 cmd;
+ cmd = String8("select current_aud from srv_table where db_id = ") + String8::format("%d", this->id);
+ int ret = CTvDatabase::GetTvDb()->select(cmd, c);
+ LOGD("getCurrentAudio a size = %d", mvAudios.size());
+ int id = 0;
+ if(c.moveToFirst()) {
+ id = c.getInt(0);
+ LOGD("getCurrentAudio a id = %d", id);
+ if (id < 0 && mvAudios.size() > 0) {
+ LOGD("getCurrentAudio defaultLang.isEmpty() =%s= %d", defaultLang.string(), defaultLang.isEmpty());
+ if(!defaultLang.isEmpty()) {
+ for(int i = 0; i < mvAudios.size(); i++) {
+ LOGD("getCurrentAudio a mvAudios[i] = %d", mvAudios[i]);
+ if(mvAudios[i]->getLang() == defaultLang) {
+ id = i;
+ break;
+ }
+ }
+ }
+
+ if (id < 0) {
+ /* still not found, using the first */
+ id = 0;
+ }
+ }
+ }
+ LOGD("getCurrentAudio a idsss = %d", id);
+ c.close();
+
+ return id;
+}
+
+int CTvProgram::getCurrAudioTrackIndex()
+{
+ int audTrackIdx = -1;
+
+ if(-1 == currAudTrackIndex) { // no set field "current_aud"
+ audTrackIdx = getCurrentAudio(String8("eng"));
+ setCurrAudioTrackIndex(this->id, audTrackIdx);
+ } else {
+ audTrackIdx = currAudTrackIndex;
+ }
+
+ return audTrackIdx;
+}
+
+
+void CTvProgram::setCurrAudioTrackIndex(int programId, int audioIndex)
+{
+ String8 cmd;
+
+ cmd = String8("update srv_table set current_aud = ")
+ + String8::format("%d", audioIndex) + String8(" where srv_table.db_id = ") + String8::format("%d", programId);
+
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+}
+
+void CTvProgram::setFavoriteFlag(int progId, bool bFavor)
+{
+ String8 cmd;
+
+ cmd = String8("update srv_table set favor = ")
+ + String8::format("%d", bFavor ? 1 : 0) + String8(" where srv_table.db_id = ") + String8::format("%d", progId);
+
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+
+}
+
+void CTvProgram::setSkipFlag(int progId, bool bSkipFlag)
+{
+ String8 cmd;
+
+ cmd = String8("update srv_table set skip = ") + String8::format("%d", bSkipFlag ? 1 : 0)
+ + String8(" where srv_table.db_id = ") + String8::format("%d", progId);
+
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+}
+
+void CTvProgram::updateProgramName(int progId, String8 strName)
+{
+ String8 newName = String8("xxx") + strName;
+ String8 cmd;
+
+ cmd = String8("update srv_table set name =") + "\'" + String8::format("%s", newName.string()) + "\'"
+ + String8(" where srv_table.db_id = ") + String8::format("%d", progId);
+
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+}
+
+void CTvProgram::swapChanOrder(int ProgId1, int chanOrderNum1, int ProgId2, int chanOrderNum2)
+{
+ String8 cmd;
+
+ cmd = String8("update srv_table set chan_order = ") + String8::format("%d", chanOrderNum2)
+ + String8(" where db_id = ") + String8::format("%d", ProgId1);
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+
+ String8 cmd2;
+ cmd2 = String8("update srv_table set chan_order = ") + String8::format("%d", chanOrderNum1)
+ + String8(" where db_id = ") + String8::format("%d", ProgId2);
+ CTvDatabase::GetTvDb()->exeSql(cmd2.string());
+}
+
+
+void CTvProgram::setLockFlag(int progId, bool bLockFlag)
+{
+ String8 cmd;
+
+ cmd = String8("update srv_table set lock = ") + String8::format("%d", bLockFlag ? 1 : 0)
+ + String8(" where srv_table.db_id = ") + String8::format("%d", progId);
+
+ CTvDatabase::GetTvDb()->exeSql(cmd.string());
+}
+bool CTvProgram::getLockFlag()
+{
+ return lock;
+}
+
diff --git a/tvapi/libtv/tvdb/CTvProgram.h b/tvapi/libtv/tvdb/CTvProgram.h
index 8abf94f..cd82b27 100644
--- a/tvapi/libtv/tvdb/CTvProgram.h
+++ b/tvapi/libtv/tvdb/CTvProgram.h
@@ -1,536 +1,529 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvProgram.h
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-
-#if !defined(_CTVPROGRAM_H)
-#define _CTVPROGRAM_H
-
-#include "CTvDatabase.h"
-#include "CTvChannel.h"
-#include <utils/String8.h>
-#include <utils/RefBase.h>
-#include <stdlib.h>
-#include "CTvLog.h"
-using namespace android;
-// Program¶ÔÓ¦ATVÖеÄÒ»¸öƵµÀ£¬DTVÖеÄÒ»¸öservice
-class CTvEvent;
-class CTvProgram : public LightRefBase<CTvProgram>
-{
-public:
- /*this type value is link to enum AM_SCAN_ServiceType in am_scan.h
- * enum AM_SCAN_ServiceType
- {
- AM_SCAN_SRV_UNKNOWN = 0, < δ֪ÀàÐÍ
- AM_SCAN_SRV_DTV = 1, < Êý×ÖµçÊÓÀàÐÍ
- AM_SCAN_SRV_DRADIO = 2, < Êý×ֹ㲥ÀàÐÍ
- AM_SCAN_SRV_ATV = 3, < Ä£ÄâµçÊÓÀàÐÍ
- };
- * /
- /**䶨ÒåÀàÐÍ*/
- static const int TYPE_UNKNOWN = 0;
- /**µçÊÓ½ÚÄ¿*/
- static const int TYPE_TV = 4;
- /**¹ã²¥½ÚÄ¿*/
- static const int TYPE_RADIO = 2;
- /**Ä£Äâ½ÚÄ¿*/
- static const int TYPE_ATV = 3;
- /**Êý¾Ý½ÚÄ¿*/
- static const int TYPE_DATA = 5;
- /**Êý×Ö½ÚÄ¿*/
- static const int TYPE_DTV = 1 ;
- /** PVR/Timeshifting playback program*/
- static const int TYPE_PLAYBACK = 6;
-
- static const int PROGRAM_SKIP_NO = 0;
- static const int PROGRAM_SKIP_YES = 1;
- static const int PROGRAM_SKIP_UNKOWN = 2;
-
- /**
- *ServiceÖеĻù´¡ÔªËØÐÅÏ¢
- */
-public:
- class Element
- {
- private :
- int mpid;
-
- public :
- Element(int pid)
- {
- this->mpid = pid;
- }
- /**
- *È¡µÃ»ù´¡ÔªËصÄPID
- *@return ·µ»ØPID
- */
- int getPID()
- {
- return mpid;
- }
- };
-
-
-
- /**
- *¶àÓïÑÔ»ù´¡ÔªËØÐÅÏ¢
- */
-public:
- class MultiLangElement : public Element
- {
- private :
- String8 mlang;
-
- public :
- MultiLangElement(int pid, String8 lang): Element(pid)
- {
- this->mlang = lang;
- }
-
- /**
- *È¡µÃÔªËضÔÓ¦µÄÓïÑÔ
- *@return ·µ»Ø3×Ö·ûÓïÑÔ×Ö·û´®
- */
- String8 getLang()
- {
- return mlang;
- }
- };
-
-
-
- /**
- *ÊÓƵÐÅÏ¢
- */
-public :
- class Video : public Element
- {
- public:
- /**MPEG1/2*/
- static const int FORMAT_MPEG12 = 0;
- /**MPEG4*/
- static const int FORMAT_MPEG4 = 1;
- /**H.264*/
- static const int FORMAT_H264 = 2;
- /**MJPEG*/
- static const int FORMAT_MJPEG = 3;
- /**Real video*/
- static const int FORMAT_REAL = 4;
- /**JPEG*/
- static const int FORMAT_JPEG = 5;
- /**Microsoft VC1*/
- static const int FORMAT_VC1 = 6;
- /**AVS*/
- static const int FORMAT_AVS = 7;
- /**YUV*/
- static const int FORMAT_YUV = 8;
- /**H.264 MVC*/
- static const int FORMAT_H264MVC = 9;
- /**QJPEG*/
- static const int FORMAT_QJPEG = 10;
-
- Video(int pid, int fmt): Element(pid)
- {
- this->mformat = fmt;
- }
-
- /**
- *È¡µÃÊÓƵ±àÂë¸ñʽ
- *@return ·µ»ØÊÓƵ±àÂë¸ñʽ
- */
- int getFormat()
- {
- return mformat;
- }
- private :
- int mformat;
- };
-
- /**
- *ÒôƵÐÅÏ¢
- */
-public :
- class Audio : public MultiLangElement
- {
- public :
- /**MPEG*/
- static const int FORMAT_MPEG = 0;
- /**PCM 16λС¶Ë*/
- static const int FORMAT_PCM_S16LE = 1;
- /**AAC*/
- static const int FORMAT_AAC = 2;
- /**AC3*/
- static const int FORMAT_AC3 = 3;
- /**ALAW*/
- static const int FORMAT_ALAW = 4;
- /**MULAW*/
- static const int FORMAT_MULAW = 5;
- /**DTS*/
- static const int FORMAT_DTS = 6;
- /**PCM 16λ´ó¶Ë*/
- static const int FORMAT_PCM_S16BE = 7;
- /**FLAC*/
- static const int FORMAT_FLAC = 8;
- /**COOK*/
- static const int FORMAT_COOK = 9;
- /**PCM 8λ*/
- static const int FORMAT_PCM_U8 = 10;
- /**ADPCM*/
- static const int FORMAT_ADPCM = 11;
- /**AMR*/
- static const int FORMAT_AMR = 12;
- /**RAAC*/
- static const int FORMAT_RAAC = 13;
- /**WMA*/
- static const int FORMAT_WMA = 14;
- /**WMA Pro*/
- static const int FORMAT_WMAPRO = 15;
- /**À¶¹âPCM*/
- static const int FORMAT_PCM_BLURAY = 16;
- /**ALAC*/
- static const int FORMAT_ALAC = 17;
- /**Vorbis*/
- static const int FORMAT_VORBIS = 18;
- /**AAC latm¸ñʽ*/
- static const int FORMAT_AAC_LATM = 19;
- /**APE*/
- static const int FORMAT_APE = 20;
-
-
- Audio(int pid, String8 lang, int fmt): MultiLangElement(pid, lang)
- {
- this->mformat = fmt;
- }
-
- /**
- *È¡µÃÒôƵ±àÂë¸ñʽ
- *@return ·µ»ØÒôƵ±àÂë¸ñʽ
- */
- int getFormat()
- {
- return mformat;
- }
- private :
- int mformat;
- };
-
- /**
- *×ÖÄ»ÐÅÏ¢
- */
-public :
- class Subtitle : public MultiLangElement
- {
- public :
- /**DVB subtitle*/
- static const int TYPE_DVB_SUBTITLE = 1;
- /**Êý×ÖµçÊÓTeletext*/
- static const int TYPE_DTV_TELETEXT = 2;
- /**Ä£ÄâµçÊÓTeletext*/
- static const int TYPE_ATV_TELETEXT = 3;
- /**Êý×ÖµçÊÓClosed caption*/
- static const int TYPE_DTV_CC = 4;
- /**Ä£ÄâµçÊÓClosed caption*/
- static const int TYPE_ATV_CC = 5;
-
-
-
- Subtitle(int pid, String8 lang, int type, int num1, int num2): MultiLangElement(pid, lang)
- {
-
- this->type = type;
- if (type == TYPE_DVB_SUBTITLE) {
- compositionPage = num1;
- ancillaryPage = num2;
- } else if (type == TYPE_DTV_TELETEXT) {
- magazineNo = num1;
- pageNo = num2;
- }
- }
-
- /**
- *È¡µÃ×ÖÄ»ÀàÐÍ
- *@return ·µ»Ø×ÖÄ»ÀàÐÍ
- */
- int getType()
- {
- return type;
- }
-
- /**
- *È¡µÃDVB subtitleµÄcomposition page ID
- *@return ·µ»Øcomposition page ID
- */
- int getCompositionPageID()
- {
- return compositionPage;
- }
-
- /**
- *È¡µÃDVB subtitleµÄancillary page ID
- *@return ·µ»Øancillary page ID
- */
- int getAncillaryPageID()
- {
- return ancillaryPage;
- }
-
- /**
- *È¡µÃteletextµÄmagazine number
- *@return ·µ»Ømagazine number
- */
- int getMagazineNumber()
- {
- return magazineNo;
- }
-
- /**
- *È¡µÃteletextµÄpage number
- *@return ·µ»Øpage number
- */
- int getPageNumber()
- {
- return pageNo;
- }
-
- private :
- int compositionPage;
- int ancillaryPage;
- int magazineNo;
- int pageNo;
- int type;
- };
-
- /**
- *TeletextÐÅÏ¢
- */
-public :
- class Teletext : public MultiLangElement
- {
- public:
- Teletext(int pid, String8 lang, int mag, int page): MultiLangElement(pid, lang)
- {
- magazineNo = mag;
- pageNo = page;
- }
-
- /**
- *È¡µÃteletextµÄmagazine number
- *@return ·µ»Ømagazine number
- */
- int getMagazineNumber()
- {
- return magazineNo;
- }
-
- /**
- *È¡µÃteletextµÄpage number
- *@return ·µ»Øpage number
- */
- int getPageNumber()
- {
- return pageNo;
- }
-
- private :
- int magazineNo;
- int pageNo;
- };
-
- //½ÚÄ¿ºÅÐÅÏ¢
-public:
- /**Èç¹ûûÓз¢ÏÖ×ÓƵµÀ£¬ºöÂÔÓû§µÄÊäÈë*/
- static const int MINOR_CHECK_NONE = 0;
- /**Èç¹ûûÓз¢ÏÖ×ÓƵµÀ£¬ÏòÉÏÑ°ÕÒ£¨×ÓƵµÀÊý×ÖÔö¼Ó£©,ÕÒµ½×ÓƵµÀºÅ×î´óµÄ*/
- static const int MINOR_CHECK_UP = 1;
- /**Èç¹ûûÓз¢ÏÖ×ÓƵµÀ£¬ÏòÏÂÑ°ÕÒ£¨×ÓƵµÀÊý×Ö¼õС£©,ÕÒµ½×ÓƵµÀºÅ×îСµÄ*/
- static const int MINOR_CHECK_DOWN = 2;
- /*Èç¹ûûÓз¢ÏÖ×ÓƵµÀ£¬ÏòÉÏÑ°ÕÒ£¬È»ºóÕÒµ½ÏòÉÏ×î½üµÄ.*/
- static const int MINOR_CHECK_NEAREST_UP = 3;
- /*Èç¹ûûÓз¢ÏÖ×ÓƵµÀ£¬ÏòÏÂÑ°ÕÒ£¬È»ºóÕÒµ½ÏòÏÂ×î½üµÄ.*/
- static const int MINOR_CHECK_NEAREST_DOWN = 4;
-
- /**
- *È¡µÃ½ÚÄ¿ºÅ
- *@return ·µ»Ø½ÚÄ¿ºÅ
- */
- int getNumber()
- {
- return major;
- }
-
- /**
- *È¡µÃÖ÷½ÚÄ¿ºÅ(ATSC)
- *@return ·µ»Ø½ÚÄ¿µÄÖ÷½ÚÄ¿ºÅ
- */
- int getMajor()
- {
- return major;
- }
-
- /**
- *È¡µÃ´Î½ÚÄ¿ºÅ(ATSC)
- *@return ·µ»Ø½ÚÄ¿µÄ´Î½ÚÄ¿ºÅ
- */
- int getMinor()
- {
- return minor;
- }
-
- /**
- *ÊÇ·ñΪATSCģʽ
- *@return Èç¹ûÊÇATSCģʽ·µ»Øtrue
- */
- bool isATSCMode()
- {
- return atscMode;
- }
-
- /**
- *È¡µÃ×ÓƵµÀºÅ×Ô¶¯²éÕÒ²ßÂÔ(ATSC)
- *@return ·µ»Ø×ÓƵµÀºÅ×Ô¶¯²éÕÒ²ßÂÔ
- */
- int getMinorCheck()
- {
- return minorCheck;
- }
-
-private:
- int major;
- int minor;
- int minorCheck;
- bool atscMode;
-
-
-public:
- CTvProgram(CTvDatabase::Cursor &c);
- CTvProgram(int channelID, int type, int num, int skipFlag);
- /**
- *ÏòÊý¾Ý¿âÌí¼ÓÒ»¸öProgram,atscMode
- */
- CTvProgram(int channelID, int type, int major, int minor, int skipFlag);
- ~CTvProgram();
- // ´´½¨²¢ÏòÊý¾Ý¿âÌí¼ÓÒ»¸öProgram
- CTvProgram(int channelID, int type);
-
- CTvProgram();
-
-
- int getCurrentAudio(String8 defaultLang);
- Video *getVideo()
- {
- return mpVideo;
- }
- Audio *getAudio(int id)
- {
- if (mvAudios.size() <= 0) return NULL;
- return mvAudios[id];
- }
-
- int getAudioTrackSize()
- {
- return mvAudios.size();
- }
- static int selectByID(int id, CTvProgram &p);
- static CTvProgram selectByNumber(int num, int type);
- int selectByNumber(int type, int major, int minor, CTvProgram &prog, int minor_check = MINOR_CHECK_NONE);
- int selectByNumber(int type, int num, CTvProgram &prog);
- static int selectByChannel(int channelID, int type, Vector<sp<CTvProgram> > &out);
- // ÁгöÈ«²¿TVProgram
- static int selectAll(bool no_skip, Vector<sp<CTvProgram> > &out);
- static int selectByType(int type, int skip, Vector<sp<CTvProgram> > &out);
- static int selectByChanID(int type, int skip, Vector<sp<CTvProgram> > &out);
- static Vector<CTvProgram> selectByChannel(int channelID);
- // ¸ù¾Ý½ÚÄ¿Ãû³ÆÖеĹؼü×Ö²éÕÒÖ¸¶¨TVProgram
- static Vector<CTvProgram> selectByName(int name);
- void tvProgramDelByChannelID(int channelID);
- int getID()
- {
- return id;
- };
- int getSrc()
- {
- return src;
- };
- int getProgType()
- {
- return type;
- };
- int getChanOrderNum()
- {
- return chanOrderNum;
- };
- int getChanVolume()
- {
- return volume;
- };
- int getSourceId()
- {
- return sourceID;
- };
- int getServiceId()
- {
- return dvbServiceID;
- };
- int getProgSkipFlag();
- void setCurrAudioTrackIndex(int programId, int audioIndex);
- int getCurrAudioTrackIndex();
-
- String8 getName();
- void getCurrentSubtitle();
- void getCurrentTeletext();
- int getChannel(CTvChannel &c);
- int upDateChannel(CTvChannel &c, int std, int freq, int fineFreq);
- int updateVolComp(int progID, int volValue);
- void updateProgramName(int progId, String8 strName);
- void setSkipFlag(int progId, bool bSkipFlag);
- void setFavoriteFlag(int progId, bool bFavor);
- int getFavoriteFlag()
- {
- return favorite;
- };
- void deleteProgram(int progId);
- static int CleanAllProgramBySrvType(int srvType);
- void setLockFlag(int progId, bool bLockFlag);
- bool getLockFlag();
- void swapChanOrder(int ProgId1, int chanOrderNum1, int ProgId2, int chanOrderNum2);
- static int deleteChannelsProgram(CTvChannel &c);
-private:
- int CreateFromCursor(CTvDatabase::Cursor &c);
- int selectProgramInChannelByNumber(int channelID, int num, CTvDatabase::Cursor &c);
- int selectProgramInChannelByNumber(int channelID, int major, int minor, CTvDatabase::Cursor &c);
- CTvChannel channel;
- int id;
- int dvbServiceID;
- int type;
- String8 name;
- int channelID;
- int skip;
- int favorite;
- int volume;
- int sourceID;
- int pmtPID;
- int src;
- int audioTrack;
- int chanOrderNum;
- int currAudTrackIndex;
- bool lock;
- bool scrambled;
- // videoÐÅÏ¢,ÀàÐͲ»¶¨
- Video *mpVideo;
- // audioÐÅÏ¢,ÀàÐͲ»¶¨
- Vector<Audio *> mvAudios;
- // subtitleÐÅÏ¢ÀàÐͲ»¶¨
- Vector<Subtitle *> mvSubtitles;
- // teletextÐÅÏ¢,ÀàÐͲ»¶¨
- Vector<Teletext *> mvTeletexts;
-
-};
-
-#endif //_CTVPROGRAM_H
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvProgram.h
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+
+#if !defined(_CTVPROGRAM_H)
+#define _CTVPROGRAM_H
+
+#include "CTvDatabase.h"
+#include "CTvChannel.h"
+#include <utils/String8.h>
+#include <utils/RefBase.h>
+#include <stdlib.h>
+#include "CTvLog.h"
+using namespace android;
+// Program¶ÔÓ¦ATVÖеÄÒ»¸öƵµÀ£¬DTVÖеÄÒ»¸öservice
+class CTvEvent;
+class CTvProgram : public LightRefBase<CTvProgram> {
+public:
+ /*this type value is link to enum AM_SCAN_ServiceType in am_scan.h
+ * enum AM_SCAN_ServiceType
+ {
+ AM_SCAN_SRV_UNKNOWN = 0, < δ֪ÀàÐÍ
+ AM_SCAN_SRV_DTV = 1, < Êý×ÖµçÊÓÀàÐÍ
+ AM_SCAN_SRV_DRADIO = 2, < Êý×ֹ㲥ÀàÐÍ
+ AM_SCAN_SRV_ATV = 3, < Ä£ÄâµçÊÓÀàÐÍ
+ };
+ * /
+ /**䶨ÒåÀàÐÍ*/
+ static const int TYPE_UNKNOWN = 0;
+ /**µçÊÓ½ÚÄ¿*/
+ static const int TYPE_TV = 4;
+ /**¹ã²¥½ÚÄ¿*/
+ static const int TYPE_RADIO = 2;
+ /**Ä£Äâ½ÚÄ¿*/
+ static const int TYPE_ATV = 3;
+ /**Êý¾Ý½ÚÄ¿*/
+ static const int TYPE_DATA = 5;
+ /**Êý×Ö½ÚÄ¿*/
+ static const int TYPE_DTV = 1 ;
+ /** PVR/Timeshifting playback program*/
+ static const int TYPE_PLAYBACK = 6;
+
+ static const int PROGRAM_SKIP_NO = 0;
+ static const int PROGRAM_SKIP_YES = 1;
+ static const int PROGRAM_SKIP_UNKOWN = 2;
+
+ /**
+ *ServiceÖеĻù´¡ÔªËØÐÅÏ¢
+ */
+public:
+ class Element {
+ private :
+ int mpid;
+
+ public :
+ Element(int pid)
+ {
+ this->mpid = pid;
+ }
+ /**
+ *È¡µÃ»ù´¡ÔªËصÄPID
+ *@return ·µ»ØPID
+ */
+ int getPID()
+ {
+ return mpid;
+ }
+ };
+
+
+
+ /**
+ *¶àÓïÑÔ»ù´¡ÔªËØÐÅÏ¢
+ */
+public:
+ class MultiLangElement : public Element {
+ private :
+ String8 mlang;
+
+ public :
+ MultiLangElement(int pid, String8 lang): Element(pid)
+ {
+ this->mlang = lang;
+ }
+
+ /**
+ *È¡µÃÔªËضÔÓ¦µÄÓïÑÔ
+ *@return ·µ»Ø3×Ö·ûÓïÑÔ×Ö·û´®
+ */
+ String8 getLang()
+ {
+ return mlang;
+ }
+ };
+
+
+
+ /**
+ *ÊÓƵÐÅÏ¢
+ */
+public :
+ class Video : public Element {
+ public:
+ /**MPEG1/2*/
+ static const int FORMAT_MPEG12 = 0;
+ /**MPEG4*/
+ static const int FORMAT_MPEG4 = 1;
+ /**H.264*/
+ static const int FORMAT_H264 = 2;
+ /**MJPEG*/
+ static const int FORMAT_MJPEG = 3;
+ /**Real video*/
+ static const int FORMAT_REAL = 4;
+ /**JPEG*/
+ static const int FORMAT_JPEG = 5;
+ /**Microsoft VC1*/
+ static const int FORMAT_VC1 = 6;
+ /**AVS*/
+ static const int FORMAT_AVS = 7;
+ /**YUV*/
+ static const int FORMAT_YUV = 8;
+ /**H.264 MVC*/
+ static const int FORMAT_H264MVC = 9;
+ /**QJPEG*/
+ static const int FORMAT_QJPEG = 10;
+
+ Video(int pid, int fmt): Element(pid)
+ {
+ this->mformat = fmt;
+ }
+
+ /**
+ *È¡µÃÊÓƵ±àÂë¸ñʽ
+ *@return ·µ»ØÊÓƵ±àÂë¸ñʽ
+ */
+ int getFormat()
+ {
+ return mformat;
+ }
+ private :
+ int mformat;
+ };
+
+ /**
+ *ÒôƵÐÅÏ¢
+ */
+public :
+ class Audio : public MultiLangElement {
+ public :
+ /**MPEG*/
+ static const int FORMAT_MPEG = 0;
+ /**PCM 16λС¶Ë*/
+ static const int FORMAT_PCM_S16LE = 1;
+ /**AAC*/
+ static const int FORMAT_AAC = 2;
+ /**AC3*/
+ static const int FORMAT_AC3 = 3;
+ /**ALAW*/
+ static const int FORMAT_ALAW = 4;
+ /**MULAW*/
+ static const int FORMAT_MULAW = 5;
+ /**DTS*/
+ static const int FORMAT_DTS = 6;
+ /**PCM 16λ´ó¶Ë*/
+ static const int FORMAT_PCM_S16BE = 7;
+ /**FLAC*/
+ static const int FORMAT_FLAC = 8;
+ /**COOK*/
+ static const int FORMAT_COOK = 9;
+ /**PCM 8λ*/
+ static const int FORMAT_PCM_U8 = 10;
+ /**ADPCM*/
+ static const int FORMAT_ADPCM = 11;
+ /**AMR*/
+ static const int FORMAT_AMR = 12;
+ /**RAAC*/
+ static const int FORMAT_RAAC = 13;
+ /**WMA*/
+ static const int FORMAT_WMA = 14;
+ /**WMA Pro*/
+ static const int FORMAT_WMAPRO = 15;
+ /**À¶¹âPCM*/
+ static const int FORMAT_PCM_BLURAY = 16;
+ /**ALAC*/
+ static const int FORMAT_ALAC = 17;
+ /**Vorbis*/
+ static const int FORMAT_VORBIS = 18;
+ /**AAC latm¸ñʽ*/
+ static const int FORMAT_AAC_LATM = 19;
+ /**APE*/
+ static const int FORMAT_APE = 20;
+
+
+ Audio(int pid, String8 lang, int fmt): MultiLangElement(pid, lang)
+ {
+ this->mformat = fmt;
+ }
+
+ /**
+ *È¡µÃÒôƵ±àÂë¸ñʽ
+ *@return ·µ»ØÒôƵ±àÂë¸ñʽ
+ */
+ int getFormat()
+ {
+ return mformat;
+ }
+ private :
+ int mformat;
+ };
+
+ /**
+ *×ÖÄ»ÐÅÏ¢
+ */
+public :
+ class Subtitle : public MultiLangElement {
+ public :
+ /**DVB subtitle*/
+ static const int TYPE_DVB_SUBTITLE = 1;
+ /**Êý×ÖµçÊÓTeletext*/
+ static const int TYPE_DTV_TELETEXT = 2;
+ /**Ä£ÄâµçÊÓTeletext*/
+ static const int TYPE_ATV_TELETEXT = 3;
+ /**Êý×ÖµçÊÓClosed caption*/
+ static const int TYPE_DTV_CC = 4;
+ /**Ä£ÄâµçÊÓClosed caption*/
+ static const int TYPE_ATV_CC = 5;
+
+
+
+ Subtitle(int pid, String8 lang, int type, int num1, int num2): MultiLangElement(pid, lang)
+ {
+
+ this->type = type;
+ if(type == TYPE_DVB_SUBTITLE) {
+ compositionPage = num1;
+ ancillaryPage = num2;
+ } else if(type == TYPE_DTV_TELETEXT) {
+ magazineNo = num1;
+ pageNo = num2;
+ }
+ }
+
+ /**
+ *È¡µÃ×ÖÄ»ÀàÐÍ
+ *@return ·µ»Ø×ÖÄ»ÀàÐÍ
+ */
+ int getType()
+ {
+ return type;
+ }
+
+ /**
+ *È¡µÃDVB subtitleµÄcomposition page ID
+ *@return ·µ»Øcomposition page ID
+ */
+ int getCompositionPageID()
+ {
+ return compositionPage;
+ }
+
+ /**
+ *È¡µÃDVB subtitleµÄancillary page ID
+ *@return ·µ»Øancillary page ID
+ */
+ int getAncillaryPageID()
+ {
+ return ancillaryPage;
+ }
+
+ /**
+ *È¡µÃteletextµÄmagazine number
+ *@return ·µ»Ømagazine number
+ */
+ int getMagazineNumber()
+ {
+ return magazineNo;
+ }
+
+ /**
+ *È¡µÃteletextµÄpage number
+ *@return ·µ»Øpage number
+ */
+ int getPageNumber()
+ {
+ return pageNo;
+ }
+
+ private :
+ int compositionPage;
+ int ancillaryPage;
+ int magazineNo;
+ int pageNo;
+ int type;
+ };
+
+ /**
+ *TeletextÐÅÏ¢
+ */
+public :
+ class Teletext : public MultiLangElement {
+ public:
+ Teletext(int pid, String8 lang, int mag, int page): MultiLangElement(pid, lang)
+ {
+ magazineNo = mag;
+ pageNo = page;
+ }
+
+ /**
+ *È¡µÃteletextµÄmagazine number
+ *@return ·µ»Ømagazine number
+ */
+ int getMagazineNumber()
+ {
+ return magazineNo;
+ }
+
+ /**
+ *È¡µÃteletextµÄpage number
+ *@return ·µ»Øpage number
+ */
+ int getPageNumber()
+ {
+ return pageNo;
+ }
+
+ private :
+ int magazineNo;
+ int pageNo;
+ };
+
+ //½ÚÄ¿ºÅÐÅÏ¢
+public:
+ /**Èç¹ûûÓз¢ÏÖ×ÓƵµÀ£¬ºöÂÔÓû§µÄÊäÈë*/
+ static const int MINOR_CHECK_NONE = 0;
+ /**Èç¹ûûÓз¢ÏÖ×ÓƵµÀ£¬ÏòÉÏÑ°ÕÒ£¨×ÓƵµÀÊý×ÖÔö¼Ó£©,ÕÒµ½×ÓƵµÀºÅ×î´óµÄ*/
+ static const int MINOR_CHECK_UP = 1;
+ /**Èç¹ûûÓз¢ÏÖ×ÓƵµÀ£¬ÏòÏÂÑ°ÕÒ£¨×ÓƵµÀÊý×Ö¼õС£©,ÕÒµ½×ÓƵµÀºÅ×îСµÄ*/
+ static const int MINOR_CHECK_DOWN = 2;
+ /*Èç¹ûûÓз¢ÏÖ×ÓƵµÀ£¬ÏòÉÏÑ°ÕÒ£¬È»ºóÕÒµ½ÏòÉÏ×î½üµÄ.*/
+ static const int MINOR_CHECK_NEAREST_UP = 3;
+ /*Èç¹ûûÓз¢ÏÖ×ÓƵµÀ£¬ÏòÏÂÑ°ÕÒ£¬È»ºóÕÒµ½ÏòÏÂ×î½üµÄ.*/
+ static const int MINOR_CHECK_NEAREST_DOWN = 4;
+
+ /**
+ *È¡µÃ½ÚÄ¿ºÅ
+ *@return ·µ»Ø½ÚÄ¿ºÅ
+ */
+ int getNumber()
+ {
+ return major;
+ }
+
+ /**
+ *È¡µÃÖ÷½ÚÄ¿ºÅ(ATSC)
+ *@return ·µ»Ø½ÚÄ¿µÄÖ÷½ÚÄ¿ºÅ
+ */
+ int getMajor()
+ {
+ return major;
+ }
+
+ /**
+ *È¡µÃ´Î½ÚÄ¿ºÅ(ATSC)
+ *@return ·µ»Ø½ÚÄ¿µÄ´Î½ÚÄ¿ºÅ
+ */
+ int getMinor()
+ {
+ return minor;
+ }
+
+ /**
+ *ÊÇ·ñΪATSCģʽ
+ *@return Èç¹ûÊÇATSCģʽ·µ»Øtrue
+ */
+ bool isATSCMode()
+ {
+ return atscMode;
+ }
+
+ /**
+ *È¡µÃ×ÓƵµÀºÅ×Ô¶¯²éÕÒ²ßÂÔ(ATSC)
+ *@return ·µ»Ø×ÓƵµÀºÅ×Ô¶¯²éÕÒ²ßÂÔ
+ */
+ int getMinorCheck()
+ {
+ return minorCheck;
+ }
+
+private:
+ int major;
+ int minor;
+ int minorCheck;
+ bool atscMode;
+
+
+public:
+ CTvProgram(CTvDatabase::Cursor &c);
+ CTvProgram(int channelID, int type, int num, int skipFlag);
+ /**
+ *ÏòÊý¾Ý¿âÌí¼ÓÒ»¸öProgram,atscMode
+ */
+ CTvProgram(int channelID, int type, int major, int minor, int skipFlag);
+ ~CTvProgram();
+ // ´´½¨²¢ÏòÊý¾Ý¿âÌí¼ÓÒ»¸öProgram
+ CTvProgram(int channelID, int type);
+
+ CTvProgram();
+
+
+ int getCurrentAudio(String8 defaultLang);
+ Video *getVideo()
+ {
+ return mpVideo;
+ }
+ Audio *getAudio(int id)
+ {
+ if(mvAudios.size() <= 0) return NULL;
+ return mvAudios[id];
+ }
+
+ int getAudioTrackSize()
+ {
+ return mvAudios.size();
+ }
+ static int selectByID(int id, CTvProgram &p);
+ static CTvProgram selectByNumber(int num, int type);
+ int selectByNumber(int type, int major, int minor, CTvProgram &prog, int minor_check = MINOR_CHECK_NONE);
+ int selectByNumber(int type, int num, CTvProgram &prog);
+ static int selectByChannel(int channelID, int type, Vector<sp<CTvProgram> > &out);
+ // ÁгöÈ«²¿TVProgram
+ static int selectAll(bool no_skip, Vector<sp<CTvProgram> > &out);
+ static int selectByType(int type, int skip, Vector<sp<CTvProgram> > &out);
+ static int selectByChanID(int type, int skip, Vector<sp<CTvProgram> > &out);
+ static Vector<CTvProgram> selectByChannel(int channelID);
+ // ¸ù¾Ý½ÚÄ¿Ãû³ÆÖеĹؼü×Ö²éÕÒÖ¸¶¨TVProgram
+ static Vector<CTvProgram> selectByName(int name);
+ void tvProgramDelByChannelID(int channelID);
+ int getID()
+ {
+ return id;
+ };
+ int getSrc()
+ {
+ return src;
+ };
+ int getProgType()
+ {
+ return type;
+ };
+ int getChanOrderNum()
+ {
+ return chanOrderNum;
+ };
+ int getChanVolume()
+ {
+ return volume;
+ };
+ int getSourceId()
+ {
+ return sourceID;
+ };
+ int getServiceId()
+ {
+ return dvbServiceID;
+ };
+ int getProgSkipFlag();
+ void setCurrAudioTrackIndex(int programId, int audioIndex);
+ int getCurrAudioTrackIndex();
+
+ String8 getName();
+ void getCurrentSubtitle();
+ void getCurrentTeletext();
+ int getChannel(CTvChannel &c);
+ int upDateChannel(CTvChannel &c, int std, int freq, int fineFreq);
+ int updateVolComp(int progID, int volValue);
+ void updateProgramName(int progId, String8 strName);
+ void setSkipFlag(int progId, bool bSkipFlag);
+ void setFavoriteFlag(int progId, bool bFavor);
+ int getFavoriteFlag()
+ {
+ return favorite;
+ };
+ void deleteProgram(int progId);
+ static int CleanAllProgramBySrvType(int srvType);
+ void setLockFlag(int progId, bool bLockFlag);
+ bool getLockFlag();
+ void swapChanOrder(int ProgId1, int chanOrderNum1, int ProgId2, int chanOrderNum2);
+ static int deleteChannelsProgram(CTvChannel &c);
+private:
+ int CreateFromCursor(CTvDatabase::Cursor &c);
+ int selectProgramInChannelByNumber(int channelID, int num, CTvDatabase::Cursor &c);
+ int selectProgramInChannelByNumber(int channelID, int major, int minor, CTvDatabase::Cursor &c);
+ CTvChannel channel;
+ int id;
+ int dvbServiceID;
+ int type;
+ String8 name;
+ int channelID;
+ int skip;
+ int favorite;
+ int volume;
+ int sourceID;
+ int pmtPID;
+ int src;
+ int audioTrack;
+ int chanOrderNum;
+ int currAudTrackIndex;
+ bool lock;
+ bool scrambled;
+ // videoÐÅÏ¢,ÀàÐͲ»¶¨
+ Video *mpVideo;
+ // audioÐÅÏ¢,ÀàÐͲ»¶¨
+ Vector<Audio *> mvAudios;
+ // subtitleÐÅÏ¢ÀàÐͲ»¶¨
+ Vector<Subtitle *> mvSubtitles;
+ // teletextÐÅÏ¢,ÀàÐͲ»¶¨
+ Vector<Teletext *> mvTeletexts;
+
+};
+
+#endif //_CTVPROGRAM_H
diff --git a/tvapi/libtv/tvdb/CTvRegion.cpp b/tvapi/libtv/tvdb/CTvRegion.cpp
index 7f87549..966946a 100644
--- a/tvapi/libtv/tvdb/CTvRegion.cpp
+++ b/tvapi/libtv/tvdb/CTvRegion.cpp
@@ -1,183 +1,183 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvRegion.cpp
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-
-#include "CTvRegion.h"
-#include "CTvDatabase.h"
-
-
-#ifdef LOG_TAG
-#undef LOG_TAG
-#define LOG_TAG "CTvRegion"
-#endif
-
-CTvRegion::CTvRegion(CTvDatabase db)
-{
-
-}
-
-CTvRegion::CTvRegion()
-{
-
-}
-CTvRegion::~CTvRegion()
-{
-
-}
-
-CTvRegion CTvRegion::selectByID()
-{
- CTvRegion r;
- return r;
-}
-
-int CTvRegion::getChannelListByName(char *name, Vector<sp<CTvChannel> > &vcp)
-{
-
- if (name == NULL)
- return -1;
-
- String8 cmd;
- cmd = String8("select * from region_table where name = ") + String8("\'") + name + String8("\'");
-
- CTvDatabase::Cursor c;
- CTvDatabase::GetTvDb()->select(cmd, c);
- int col, size = 0;
- int id;
- int mode;
- int frequency = 0;
- int bandwidth;
- int modulation;
- int symbolRate;
- int ofdmMode;
- int channelNum = 0;
-
- if (c.moveToFirst()) {
- do {
- col = c.getColumnIndex("db_id");
- id = c.getInt(col);
- col = c.getColumnIndex("fe_type");
- mode = c.getInt(col);
- col = c.getColumnIndex("frequency");
- frequency = c.getInt(col);
- col = c.getColumnIndex("modulation");
- modulation = c.getInt(col);
- col = c.getColumnIndex("bandwidth");
- bandwidth = c.getInt(col);
- col = c.getColumnIndex("symbol_rate");
- symbolRate = c.getInt(col);
- col = c.getColumnIndex("ofdm_mode");
- ofdmMode = c.getInt(col);
- col = c.getColumnIndex("logical_channel_num");
- channelNum = c.getInt(col);
- vcp.add(new CTvChannel(id, mode, frequency, bandwidth, modulation, symbolRate, ofdmMode, channelNum));
- size++;
- } while (c.moveToNext());
- }
- c.close();
-
- return size;
-}
-
-int CTvRegion::getChannelListByNameAndFreqRange(char *name, int beginFreq, int endFreq, Vector<sp<CTvChannel> > &vcp)
-{
- if (name == NULL)
- return -1;
- int ret = 0;
- String8 cmd;
- cmd = String8("select * from region_table where name = ") + String8("\'") + name + String8("\'")
- + String8(" and frequency >= ") + String8::format("%d", beginFreq) + String8(" and frequency <= ")
- + String8::format("%d", endFreq);
-
- CTvDatabase::Cursor c;
- CTvDatabase::GetTvDb()->select(cmd, c);
- int col, size = 0;
- int id;
- int mode;
- int frequency = 0;
- int bandwidth;
- int modulation;
- int symbolRate;
- int ofdmMode;
- int channelNum = 0;
-
- do {
- if (c.moveToFirst()) {
- do {
- col = c.getColumnIndex("db_id");
- id = c.getInt(col);
- col = c.getColumnIndex("fe_type");
- mode = c.getInt(col);
- col = c.getColumnIndex("frequency");
- frequency = c.getInt(col);
- col = c.getColumnIndex("modulation");
- modulation = c.getInt(col);
- col = c.getColumnIndex("bandwidth");
- bandwidth = c.getInt(col);
- col = c.getColumnIndex("symbol_rate");
- symbolRate = c.getInt(col);
- col = c.getColumnIndex("ofdm_mode");
- ofdmMode = c.getInt(col);
- col = c.getColumnIndex("logical_channel_num");
- channelNum = c.getInt(col);
- vcp.add(new CTvChannel(id, mode, frequency, bandwidth, modulation, symbolRate, ofdmMode, channelNum));
- size++;
- } while (c.moveToNext());
- } else {
- ret = -1;
- break;
- }
- } while (false);
-
- c.close();
- return ret;
-}
-void CTvRegion::selectByCountry()
-{
-
-}
-
-Vector<String8> CTvRegion::getAllCountry()
-{
- Vector<String8> vStr;
- return vStr;
-}
-
-CTvChannel CTvRegion::getChannels()
-{
- CTvChannel p;
- return p;
-}
-
-int CTvRegion::getLogicNumByNameAndfreq(char *name, int freq)
-{
- int ret = 0;
- int col = 0;
-
- if (name == NULL)
- return -1;
-
- String8 cmd;
- cmd = String8("select * from region_table where name = ") + String8("\'") + name + String8("\'");
- cmd += String8(" and frequency = ") + String8::format("%d", freq);
-
-
- CTvDatabase::Cursor c;
- CTvDatabase::GetTvDb()->select(cmd, c);
- if (c.moveToFirst()) {
- col = c.getColumnIndex("logical_channel_num");
- ret = c.getInt(col);
- }
- c.close();
-
- return ret;
-}
-
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvRegion.cpp
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+
+#include "CTvRegion.h"
+#include "CTvDatabase.h"
+
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#define LOG_TAG "CTvRegion"
+#endif
+
+CTvRegion::CTvRegion(CTvDatabase db)
+{
+
+}
+
+CTvRegion::CTvRegion()
+{
+
+}
+CTvRegion::~CTvRegion()
+{
+
+}
+
+CTvRegion CTvRegion::selectByID()
+{
+ CTvRegion r;
+ return r;
+}
+
+int CTvRegion::getChannelListByName(char *name, Vector<sp<CTvChannel> > &vcp)
+{
+
+ if (name == NULL)
+ return -1;
+
+ String8 cmd;
+ cmd = String8("select * from region_table where name = ") + String8("\'") + name + String8("\'");
+
+ CTvDatabase::Cursor c;
+ CTvDatabase::GetTvDb()->select(cmd, c);
+ int col, size = 0;
+ int id;
+ int mode;
+ int frequency = 0;
+ int bandwidth;
+ int modulation;
+ int symbolRate;
+ int ofdmMode;
+ int channelNum = 0;
+
+ if(c.moveToFirst()) {
+ do {
+ col = c.getColumnIndex("db_id");
+ id = c.getInt(col);
+ col = c.getColumnIndex("fe_type");
+ mode = c.getInt(col);
+ col = c.getColumnIndex("frequency");
+ frequency = c.getInt(col);
+ col = c.getColumnIndex("modulation");
+ modulation = c.getInt(col);
+ col = c.getColumnIndex("bandwidth");
+ bandwidth = c.getInt(col);
+ col = c.getColumnIndex("symbol_rate");
+ symbolRate = c.getInt(col);
+ col = c.getColumnIndex("ofdm_mode");
+ ofdmMode = c.getInt(col);
+ col = c.getColumnIndex("logical_channel_num");
+ channelNum = c.getInt(col);
+ vcp.add(new CTvChannel(id, mode, frequency, bandwidth, modulation, symbolRate, ofdmMode, channelNum));
+ size++;
+ } while(c.moveToNext());
+ }
+ c.close();
+
+ return size;
+}
+
+int CTvRegion::getChannelListByNameAndFreqRange(char *name, int beginFreq, int endFreq, Vector<sp<CTvChannel> > &vcp)
+{
+ if (name == NULL)
+ return -1;
+ int ret = 0;
+ String8 cmd;
+ cmd = String8("select * from region_table where name = ") + String8("\'") + name + String8("\'")
+ + String8(" and frequency >= ") + String8::format("%d", beginFreq) + String8(" and frequency <= ")
+ + String8::format("%d", endFreq);
+
+ CTvDatabase::Cursor c;
+ CTvDatabase::GetTvDb()->select(cmd, c);
+ int col, size = 0;
+ int id;
+ int mode;
+ int frequency = 0;
+ int bandwidth;
+ int modulation;
+ int symbolRate;
+ int ofdmMode;
+ int channelNum = 0;
+
+ do {
+ if(c.moveToFirst()) {
+ do {
+ col = c.getColumnIndex("db_id");
+ id = c.getInt(col);
+ col = c.getColumnIndex("fe_type");
+ mode = c.getInt(col);
+ col = c.getColumnIndex("frequency");
+ frequency = c.getInt(col);
+ col = c.getColumnIndex("modulation");
+ modulation = c.getInt(col);
+ col = c.getColumnIndex("bandwidth");
+ bandwidth = c.getInt(col);
+ col = c.getColumnIndex("symbol_rate");
+ symbolRate = c.getInt(col);
+ col = c.getColumnIndex("ofdm_mode");
+ ofdmMode = c.getInt(col);
+ col = c.getColumnIndex("logical_channel_num");
+ channelNum = c.getInt(col);
+ vcp.add(new CTvChannel(id, mode, frequency, bandwidth, modulation, symbolRate, ofdmMode, channelNum));
+ size++;
+ } while(c.moveToNext());
+ } else {
+ ret = -1;
+ break;
+ }
+ } while(false);
+
+ c.close();
+ return ret;
+}
+void CTvRegion::selectByCountry()
+{
+
+}
+
+Vector<String8> CTvRegion::getAllCountry()
+{
+ Vector<String8> vStr;
+ return vStr;
+}
+
+CTvChannel CTvRegion::getChannels()
+{
+ CTvChannel p;
+ return p;
+}
+
+int CTvRegion::getLogicNumByNameAndfreq(char *name, int freq)
+{
+ int ret = 0;
+ int col = 0;
+
+ if (name == NULL)
+ return -1;
+
+ String8 cmd;
+ cmd = String8("select * from region_table where name = ") + String8("\'") + name + String8("\'");
+ cmd += String8(" and frequency = ") + String8::format("%d", freq);
+
+
+ CTvDatabase::Cursor c;
+ CTvDatabase::GetTvDb()->select(cmd, c);
+ if(c.moveToFirst()) {
+ col = c.getColumnIndex("logical_channel_num");
+ ret = c.getInt(col);
+ }
+ c.close();
+
+ return ret;
+}
+
diff --git a/tvapi/libtv/tvdb/CTvRegion.h b/tvapi/libtv/tvdb/CTvRegion.h
index e7ccdcd..82cb505 100644
--- a/tvapi/libtv/tvdb/CTvRegion.h
+++ b/tvapi/libtv/tvdb/CTvRegion.h
@@ -1,43 +1,42 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name : CTvRegion.h
-// @ Date : 2013-11
-// @ Author :
-//
-//
-
-
-#if !defined(_CTVREGION_H)
-#define _CTVREGION_H
-
-#include "CTvDatabase.h"
-#include "CTvChannel.h"
-#include <utils/String8.h>
-#include <utils/Vector.h>
-// TV ÇøÓò
-// ¿ÉÒÔ»ñµÃÿ¸öÇøÓòµÄƵÂÊÁбíµÈÐÅÏ¢
-using namespace android;
-class CTvRegion
-{
-public:
- int id;
- String8 name;
- String8 country;
- CTvRegion(CTvDatabase db);
- CTvRegion();
- ~CTvRegion();
- static CTvRegion selectByID();
- static int getChannelListByName(char *name, Vector<sp<CTvChannel> > &vcp);
- static int getChannelListByNameAndFreqRange(char *name, int beginFreq, int endFreq, Vector<sp<CTvChannel> > &vcp);
- static int getLogicNumByNameAndfreq(char *name, int freq);
- void selectByCountry();
- Vector<String8> getAllCountry();
- // È¡µÃ¸ÃRegionµÄÐźÅԴƵÂʲÎÊýÁбí
- // @return ·µ»ØÐźÅԴƵÂʲÎÊýÁбí
- CTvChannel getChannels();
-};
-
-#endif //_CTVREGION_H
+//
+//
+// amlogic 2013
+//
+// @ Project : tv
+// @ File Name : CTvRegion.h
+// @ Date : 2013-11
+// @ Author :
+//
+//
+
+
+#if !defined(_CTVREGION_H)
+#define _CTVREGION_H
+
+#include "CTvDatabase.h"
+#include "CTvChannel.h"
+#include <utils/String8.h>
+#include <utils/Vector.h>
+// TV ÇøÓò
+// ¿ÉÒÔ»ñµÃÿ¸öÇøÓòµÄƵÂÊÁбíµÈÐÅÏ¢
+using namespace android;
+class CTvRegion {
+public:
+ int id;
+ String8 name;
+ String8 country;
+ CTvRegion(CTvDatabase db);
+ CTvRegion();
+ ~CTvRegion();
+ static CTvRegion selectByID();
+ static int getChannelListByName(char *name, Vector<sp<CTvChannel> > &vcp);
+ static int getChannelListByNameAndFreqRange(char *name, int beginFreq, int endFreq, Vector<sp<CTvChannel> > &vcp);
+ static int getLogicNumByNameAndfreq(char *name, int freq);
+ void selectByCountry();
+ Vector<String8> getAllCountry();
+ // È¡µÃ¸ÃRegionµÄÐźÅԴƵÂʲÎÊýÁбí
+ // @return ·µ»ØÐźÅԴƵÂʲÎÊýÁбí
+ CTvChannel getChannels();
+};
+
+#endif //_CTVREGION_H
diff --git a/tvapi/libtv/tvin/CHDMIRxCEC.cpp b/tvapi/libtv/tvin/CHDMIRxCEC.cpp
index 96ddb0b..b30bc26 100644
--- a/tvapi/libtv/tvin/CHDMIRxCEC.cpp
+++ b/tvapi/libtv/tvin/CHDMIRxCEC.cpp
@@ -13,32 +13,32 @@
CTvin::CHDMIRxCEC::CHDMIRxCEC(CTvin *pTvin)
{
- int i = 0;
+ int i = 0;
- for (i = 0; i < CC_REQUEST_LIST_SIZE; i++) {
- ClrReplyListItem(&mReplyList[i]);
- memset((void *) &mMsgBuf[i], 0, sizeof(struct _cec_msg));
- }
+ for(i = 0; i < CC_REQUEST_LIST_SIZE; i++) {
+ ClrReplyListItem(&mReplyList[i]);
+ memset((void *) &mMsgBuf[i], 0, sizeof(struct _cec_msg));
+ }
- mModuleEnableFlag = -1;
- mRequestPause = false;
- mState = STATE_STOPED;
+ mModuleEnableFlag = -1;
+ mRequestPause = false;
+ mState = STATE_STOPED;
- mpObserver = NULL;
- mpTvin = pTvin;
+ mpObserver = NULL;
+ mpTvin = pTvin;
- for (i = 0; i < CC_SOURCE_DEV_REFRESH_CNT; i++) {
- mSourceDevLogicAddrBuf[i] = -1;
- mSourceDevRefreshBuf[i] = -1;
- }
+ for(i = 0; i < CC_SOURCE_DEV_REFRESH_CNT; i++) {
+ mSourceDevLogicAddrBuf[i] = -1;
+ mSourceDevRefreshBuf[i] = -1;
+ }
- mSourceDevLogicAddrBuf[0] = E_LA_TV;
- mSourceDevLogicAddrBuf[1] = E_LA_TV;
- mSourceDevLogicAddrBuf[2] = E_LA_TV;
+ mSourceDevLogicAddrBuf[0] = E_LA_TV;
+ mSourceDevLogicAddrBuf[1] = E_LA_TV;
+ mSourceDevLogicAddrBuf[2] = E_LA_TV;
- mSourceDevRefreshBuf[0] = E_LA_PLAYBACK1;
- mSourceDevRefreshBuf[1] = E_LA_PLAYBACK2;
- mSourceDevRefreshBuf[2] = E_LA_PLYBACK3;
+ mSourceDevRefreshBuf[0] = E_LA_PLAYBACK1;
+ mSourceDevRefreshBuf[1] = E_LA_PLAYBACK2;
+ mSourceDevRefreshBuf[2] = E_LA_PLYBACK3;
}
CTvin::CHDMIRxCEC::~CHDMIRxCEC()
@@ -47,608 +47,608 @@ CTvin::CHDMIRxCEC::~CHDMIRxCEC()
int CTvin::CHDMIRxCEC::start()
{
- CMutex::Autolock _l (mLock);
+ CMutex::Autolock _l (mLock);
- if (GetModuleEnableFlag() == 0) {
- return -1;
- }
+ if (GetModuleEnableFlag() == 0) {
+ return -1;
+ }
- if (mState == STATE_STOPED) {
- this->run();
- }
+ if (mState == STATE_STOPED) {
+ this->run();
+ }
- return mState;
+ return mState;
}
int CTvin::CHDMIRxCEC::stop()
{
- CMutex::Autolock _l (mLock);
+ CMutex::Autolock _l (mLock);
- if (GetModuleEnableFlag() == 0) {
- return -1;
- }
+ if (GetModuleEnableFlag() == 0) {
+ return -1;
+ }
- if (mState == STATE_PAUSE) {
- resume();
- }
+ if (mState == STATE_PAUSE) {
+ resume();
+ }
- requestExit();
- mState = STATE_STOPED;
- return mState;
+ requestExit();
+ mState = STATE_STOPED;
+ return mState;
}
int CTvin::CHDMIRxCEC::pause()
{
- CMutex::Autolock _l (mLock);
+ CMutex::Autolock _l (mLock);
- if (GetModuleEnableFlag() == 0) {
- return -1;
- }
+ if (GetModuleEnableFlag() == 0) {
+ return -1;
+ }
- mRequestPause = true;
- return 0;
+ mRequestPause = true;
+ return 0;
}
int CTvin::CHDMIRxCEC::resume()
{
- CMutex::Autolock _l (mLock);
+ CMutex::Autolock _l (mLock);
- if (GetModuleEnableFlag() == 0) {
- return -1;
- }
+ if (GetModuleEnableFlag() == 0) {
+ return -1;
+ }
- ClearRxMessageBuffer();
+ ClearRxMessageBuffer();
- mRequestPause = false;
- mPauseCondition.signal();
+ mRequestPause = false;
+ mPauseCondition.signal();
- ClearRxMessageBuffer();
- return 0;
+ ClearRxMessageBuffer();
+ return 0;
}
int CTvin::CHDMIRxCEC::isAllowOperate(int source_input)
{
- if (GetModuleEnableFlag() == 0) {
- return -1;
- }
+ if (GetModuleEnableFlag() == 0) {
+ return -1;
+ }
- int source_port = CTvin::Tvin_GetSourcePortBySourceInput((tv_source_input_t)source_input);
- if (mpTvin->VDIN_GetPortConnect(source_port) == false) {
- return -1;
- }
+ int source_port = CTvin::Tvin_GetSourcePortBySourceInput((tv_source_input_t)source_input);
+ if (mpTvin->VDIN_GetPortConnect(source_port) == false) {
+ return -1;
+ }
- return 0;
+ return 0;
}
int CTvin::CHDMIRxCEC::GetModuleEnableFlag()
{
- const char *config_value = NULL;
-
- if (mModuleEnableFlag < 0) {
- config_value = config_get_str("TV", "tvin.hdmirx.cec.enable", "null");
- if (strcasecmp(config_value, "null") == 0) {
- mModuleEnableFlag = 0;
- } else if (strcasecmp(config_value, "1") == 0 || strcasecmp(config_value, "true") == 0) {
- mModuleEnableFlag = 1;
- } else {
- mModuleEnableFlag = 0;
- }
- }
-
- return mModuleEnableFlag;
+ const char *config_value = NULL;
+
+ if (mModuleEnableFlag < 0) {
+ config_value = config_get_str("TV", "tvin.hdmirx.cec.enable", "null");
+ if (strcasecmp(config_value, "null") == 0) {
+ mModuleEnableFlag = 0;
+ } else if (strcasecmp(config_value, "1") == 0 || strcasecmp(config_value, "true") == 0) {
+ mModuleEnableFlag = 1;
+ } else {
+ mModuleEnableFlag = 0;
+ }
+ }
+
+ return mModuleEnableFlag;
}
int CTvin::CHDMIRxCEC::PrintMessage(const char *func_name, int data_type, struct _cec_msg *msg)
{
#ifdef CC_ENABLE_PRINT_MESSAGE
- if (msg == NULL) {
- LOGE("%s, msg is NULL\n", func_name);
- return -1;
- }
-
- LOGD("%s, msg_len = %d\n", func_name, msg->msg_len);
- LOGD("%s, msg addr 0x%02X\n", func_name, msg->addr);
- LOGD("%s, msg cmd 0x%02X\n", func_name, msg->cmd);
- for (int i = 0; i < msg->msg_len - 2; i++) {
- if (data_type == 0) {
- LOGD("%s, msg data[%d] = 0x%02X\n", func_name, i, msg->msg_data[i]);
- } else {
- LOGD("%s, msg data[%d] = %c\n", func_name, i, msg->msg_data[i]);
- }
- }
+ if (msg == NULL) {
+ LOGE("%s, msg is NULL\n", func_name);
+ return -1;
+ }
+
+ LOGD("%s, msg_len = %d\n", func_name, msg->msg_len);
+ LOGD("%s, msg addr 0x%02X\n", func_name, msg->addr);
+ LOGD("%s, msg cmd 0x%02X\n", func_name, msg->cmd);
+ for(int i = 0; i < msg->msg_len - 2; i++) {
+ if(data_type == 0) {
+ LOGD("%s, msg data[%d] = 0x%02X\n", func_name, i, msg->msg_data[i]);
+ } else {
+ LOGD("%s, msg data[%d] = %c\n", func_name, i, msg->msg_data[i]);
+ }
+ }
#endif
- return 0;
+ return 0;
}
int CTvin::CHDMIRxCEC::ClrReplyListItem(HDMIRxRequestReplyItem *reply_item)
{
- if (reply_item == NULL) {
- return -1;
- }
-
- reply_item->WaitCmd = 0;
- reply_item->WaitLogicAddr = 0;
- reply_item->WaitTimeOut = 0;
- reply_item->WaitFlag = 0;
- reply_item->DataFlag = 0;
- memset((void *) & (reply_item->msg), 0, sizeof(struct _cec_msg));
-
- return 0;
+ if(reply_item == NULL) {
+ return -1;
+ }
+
+ reply_item->WaitCmd = 0;
+ reply_item->WaitLogicAddr = 0;
+ reply_item->WaitTimeOut = 0;
+ reply_item->WaitFlag = 0;
+ reply_item->DataFlag = 0;
+ memset((void *) & (reply_item->msg), 0, sizeof(struct _cec_msg));
+
+ return 0;
}
int CTvin::CHDMIRxCEC::CopyMessageData(unsigned char data_buf[], unsigned char msg_data[], int msg_len)
{
- if (data_buf == NULL) {
- return 0;
- }
+ if(data_buf == NULL) {
+ return 0;
+ }
- memset((void *)data_buf, 0, CC_CEC_STREAM_SIZE);
+ memset((void *)data_buf, 0, CC_CEC_STREAM_SIZE);
- if (msg_len > CC_CEC_STREAM_SIZE) {
- return 0;
- }
+ if(msg_len > CC_CEC_STREAM_SIZE) {
+ return 0;
+ }
- if (msg_len <= 2) {
- return 0;
- }
+ if(msg_len <= 2) {
+ return 0;
+ }
- msg_len -= 2;
+ msg_len -= 2;
- memcpy(data_buf, msg_data, msg_len);
+ memcpy(data_buf, msg_data, msg_len);
- return msg_len;
+ return msg_len;
}
int CTvin::CHDMIRxCEC::GetDeviceLogicAddr(int source_input)
{
- return mSourceDevLogicAddrBuf[source_input - SOURCE_HDMI1];
+ return mSourceDevLogicAddrBuf[source_input - SOURCE_HDMI1];
}
int CTvin::CHDMIRxCEC::processRefreshSrcDevice(int source_input)
{
- int i = 0, physical_addr = 0;
- int source_port_1 = 0, source_port_2 = 0;
-
- if (source_input != SOURCE_HDMI1 && source_input != SOURCE_HDMI2 && source_input != SOURCE_HDMI3) {
- return -1;
- }
-
- mSourceDevLogicAddrBuf[0] = E_LA_TV;
- mSourceDevLogicAddrBuf[1] = E_LA_TV;
- mSourceDevLogicAddrBuf[2] = E_LA_TV;
-
- for (i = 0; i < CC_SOURCE_DEV_REFRESH_CNT; i++) {
- if (mSourceDevRefreshBuf[i] < 0) {
- continue;
- }
-
- physical_addr = 0;
- if (SendGivePhysicalAddressMessage(source_input, mSourceDevRefreshBuf[i], &physical_addr) > 0) {
- source_port_1 = CTvin::Tvin_GetSourcePortBySourceInput((tv_source_input_t)source_input);
- source_port_2 = CTvin::Tvin_GetSourcePortByCECPhysicalAddress(physical_addr);
- if (source_port_1 == source_port_2) {
- mSourceDevLogicAddrBuf[source_input - SOURCE_HDMI1] = mSourceDevRefreshBuf[i];
- break;
- }
- }
- }
-
- if (i == CC_SOURCE_DEV_REFRESH_CNT) {
- return -1;
- }
-
- return 0;
+ int i = 0, physical_addr = 0;
+ int source_port_1 = 0, source_port_2 = 0;
+
+ if (source_input != SOURCE_HDMI1 && source_input != SOURCE_HDMI2 && source_input != SOURCE_HDMI3) {
+ return -1;
+ }
+
+ mSourceDevLogicAddrBuf[0] = E_LA_TV;
+ mSourceDevLogicAddrBuf[1] = E_LA_TV;
+ mSourceDevLogicAddrBuf[2] = E_LA_TV;
+
+ for(i = 0; i < CC_SOURCE_DEV_REFRESH_CNT; i++) {
+ if (mSourceDevRefreshBuf[i] < 0) {
+ continue;
+ }
+
+ physical_addr = 0;
+ if (SendGivePhysicalAddressMessage(source_input, mSourceDevRefreshBuf[i], &physical_addr) > 0) {
+ source_port_1 = CTvin::Tvin_GetSourcePortBySourceInput((tv_source_input_t)source_input);
+ source_port_2 = CTvin::Tvin_GetSourcePortByCECPhysicalAddress(physical_addr);
+ if (source_port_1 == source_port_2) {
+ mSourceDevLogicAddrBuf[source_input - SOURCE_HDMI1] = mSourceDevRefreshBuf[i];
+ break;
+ }
+ }
+ }
+
+ if (i == CC_SOURCE_DEV_REFRESH_CNT) {
+ return -1;
+ }
+
+ return 0;
}
int CTvin::CHDMIRxCEC::ClearRxMessageBuffer()
{
- int m_cec_dev_fd = -1;
+ int m_cec_dev_fd = -1;
- m_cec_dev_fd = open(CS_HDMIRX_CEC_PATH, O_RDWR);
- if (m_cec_dev_fd < 0) {
- LOGE("%s, Open file %s error: (%s)!\n", __FUNCTION__, CS_HDMIRX_CEC_PATH, strerror ( errno ));
- return -1;
- }
+ m_cec_dev_fd = open(CS_HDMIRX_CEC_PATH, O_RDWR);
+ if (m_cec_dev_fd < 0) {
+ LOGE("%s, Open file %s error: (%s)!\n", __FUNCTION__, CS_HDMIRX_CEC_PATH, strerror ( errno ));
+ return -1;
+ }
- ioctl(m_cec_dev_fd, HDMI_IOC_CEC_CLEAR_BUFFER, NULL);
+ ioctl(m_cec_dev_fd, HDMI_IOC_CEC_CLEAR_BUFFER, NULL);
- close(m_cec_dev_fd);
- m_cec_dev_fd = -1;
+ close(m_cec_dev_fd);
+ m_cec_dev_fd = -1;
- return 0;
+ return 0;
}
int CTvin::CHDMIRxCEC::GetMessage(struct _cec_msg msg_buf[])
{
- int i = 0;
- int m_cec_dev_fd = -1;
- int msg_cnt = 0;
-
- if (msg_buf == NULL) {
- LOGE("%s, msg_buf is NULL\n", __FUNCTION__);
- }
-
- m_cec_dev_fd = open(CS_HDMIRX_CEC_PATH, O_RDWR);
- if (m_cec_dev_fd < 0) {
- LOGE("%s, Open file %s error: (%s)!\n", __FUNCTION__, CS_HDMIRX_CEC_PATH, strerror ( errno ));
- return 0;
- }
-
- ioctl(m_cec_dev_fd, HDMI_IOC_CEC_GET_MSG_CNT, &msg_cnt);
- if (msg_cnt > 0) {
- LOGD("%s, msg_cnt = %d\n", __FUNCTION__, msg_cnt);
-
- for (i = 0; i < msg_cnt; i++) {
- ioctl(m_cec_dev_fd, HDMI_IOC_CEC_GET_MSG, &msg_buf[i]);
- PrintMessage(__FUNCTION__, 0, &msg_buf[i]);
- }
- }
-
- close(m_cec_dev_fd);
- m_cec_dev_fd = -1;
-
- return msg_cnt;
+ int i = 0;
+ int m_cec_dev_fd = -1;
+ int msg_cnt = 0;
+
+ if (msg_buf == NULL) {
+ LOGE("%s, msg_buf is NULL\n", __FUNCTION__);
+ }
+
+ m_cec_dev_fd = open(CS_HDMIRX_CEC_PATH, O_RDWR);
+ if (m_cec_dev_fd < 0) {
+ LOGE("%s, Open file %s error: (%s)!\n", __FUNCTION__, CS_HDMIRX_CEC_PATH, strerror ( errno ));
+ return 0;
+ }
+
+ ioctl(m_cec_dev_fd, HDMI_IOC_CEC_GET_MSG_CNT, &msg_cnt);
+ if (msg_cnt > 0) {
+ LOGD("%s, msg_cnt = %d\n", __FUNCTION__, msg_cnt);
+
+ for(i = 0; i < msg_cnt; i++) {
+ ioctl(m_cec_dev_fd, HDMI_IOC_CEC_GET_MSG, &msg_buf[i]);
+ PrintMessage(__FUNCTION__, 0, &msg_buf[i]);
+ }
+ }
+
+ close(m_cec_dev_fd);
+ m_cec_dev_fd = -1;
+
+ return msg_cnt;
}
int CTvin::CHDMIRxCEC::SendMessage(struct _cec_msg *msg)
{
- int m_cec_dev_fd = -1;
+ int m_cec_dev_fd = -1;
- if (msg == NULL) {
- LOGE("%s, msg is NULL\n", __FUNCTION__);
- }
+ if (msg == NULL) {
+ LOGE("%s, msg is NULL\n", __FUNCTION__);
+ }
- PrintMessage(__FUNCTION__, 0, msg);
+ PrintMessage(__FUNCTION__, 0, msg);
- m_cec_dev_fd = open(CS_HDMIRX_CEC_PATH, O_RDWR);
- if (m_cec_dev_fd < 0) {
- LOGE("%s, Open file %s error: (%s)!\n", __FUNCTION__, CS_HDMIRX_CEC_PATH, strerror ( errno ));
- return -1;
- }
+ m_cec_dev_fd = open(CS_HDMIRX_CEC_PATH, O_RDWR);
+ if (m_cec_dev_fd < 0) {
+ LOGE("%s, Open file %s error: (%s)!\n", __FUNCTION__, CS_HDMIRX_CEC_PATH, strerror ( errno ));
+ return -1;
+ }
- ioctl(m_cec_dev_fd, HDMI_IOC_CEC_SENT_MSG, msg);
+ ioctl(m_cec_dev_fd, HDMI_IOC_CEC_SENT_MSG, msg);
- close(m_cec_dev_fd);
- m_cec_dev_fd = -1;
+ close(m_cec_dev_fd);
+ m_cec_dev_fd = -1;
- return 0;
+ return 0;
}
int CTvin::CHDMIRxCEC::sendMessageAndWaitReply(struct _cec_msg *msg, struct _cec_msg *reply_msg, int WaitCmd, int timeout)
{
- int tmp_ret = 0, tmp_ind = 0;
+ int tmp_ret = 0, tmp_ind = 0;
- tmp_ret = SendMessage(msg);
- if (tmp_ret < 0) {
- return tmp_ret;
- }
+ tmp_ret = SendMessage(msg);
+ if (tmp_ret < 0) {
+ return tmp_ret;
+ }
- reply_msg->msg_len = 0;
+ reply_msg->msg_len = 0;
- HDMIRxRequestReplyItem reply_item;
- reply_item.WaitCmd = WaitCmd;
- reply_item.WaitLogicAddr = msg->addr;
- reply_item.WaitTimeOut = timeout;
- reply_item.WaitFlag = 1;
- reply_item.DataFlag = 0;
+ HDMIRxRequestReplyItem reply_item;
+ reply_item.WaitCmd = WaitCmd;
+ reply_item.WaitLogicAddr = msg->addr;
+ reply_item.WaitTimeOut = timeout;
+ reply_item.WaitFlag = 1;
+ reply_item.DataFlag = 0;
- tmp_ind = addToRequestList(&reply_item);
+ tmp_ind = addToRequestList(&reply_item);
- mReplyLock[tmp_ind].lock();
- mReplyList[tmp_ind].WaitReplyCondition.waitRelative(mReplyLock[tmp_ind], timeout);//wait reply
- mReplyLock[tmp_ind].unlock();
+ mReplyLock[tmp_ind].lock();
+ mReplyList[tmp_ind].WaitReplyCondition.waitRelative(mReplyLock[tmp_ind], timeout);//wait reply
+ mReplyLock[tmp_ind].unlock();
- if (mReplyList[tmp_ind].DataFlag == 1) {
- PrintMessage(__FUNCTION__, 0, &mReplyList[tmp_ind].msg);
- *reply_msg = mReplyList[tmp_ind].msg;
- } else {
- rmFromRequestList(tmp_ind);
- return -1;
- }
+ if(mReplyList[tmp_ind].DataFlag == 1) {
+ PrintMessage(__FUNCTION__, 0, &mReplyList[tmp_ind].msg);
+ *reply_msg = mReplyList[tmp_ind].msg;
+ } else {
+ rmFromRequestList(tmp_ind);
+ return -1;
+ }
- rmFromRequestList(tmp_ind);
+ rmFromRequestList(tmp_ind);
- return 0;
+ return 0;
}
int CTvin::CHDMIRxCEC::SendCustomMessage(int source_input, unsigned char data_buf[])
{
- CECMsgStream msg_stream;
+ CECMsgStream msg_stream;
- if (isAllowOperate(source_input) < 0) {
- return -1;
- }
+ if (isAllowOperate(source_input) < 0) {
+ return -1;
+ }
- memcpy((void *)msg_stream.buf, data_buf, CC_CEC_STREAM_SIZE);
- if (msg_stream.msg.msg_len > CC_CEC_STREAM_SIZE) {
- return -1;
- }
+ memcpy((void *)msg_stream.buf, data_buf, CC_CEC_STREAM_SIZE);
+ if (msg_stream.msg.msg_len > CC_CEC_STREAM_SIZE) {
+ return -1;
+ }
- return SendMessage(&msg_stream.msg);
+ return SendMessage(&msg_stream.msg);
}
int CTvin::CHDMIRxCEC::SendCustomMessageAndWaitReply(int source_input, unsigned char data_buf[], unsigned char reply_buf[], int WaitCmd, int timeout)
{
- CECMsgStream msg_stream;
- struct _cec_msg reply_msg;
+ CECMsgStream msg_stream;
+ struct _cec_msg reply_msg;
- if (isAllowOperate(source_input) < 0) {
- return -1;
- }
+ if (isAllowOperate(source_input) < 0) {
+ return -1;
+ }
- memcpy((void *)msg_stream.buf, data_buf, CC_CEC_STREAM_SIZE);
- if (msg_stream.msg.msg_len > CC_CEC_STREAM_SIZE) {
- return -1;
- }
+ memcpy((void *)msg_stream.buf, data_buf, CC_CEC_STREAM_SIZE);
+ if (msg_stream.msg.msg_len > CC_CEC_STREAM_SIZE) {
+ return -1;
+ }
- if (sendMessageAndWaitReply(&msg_stream.msg, &reply_msg, WaitCmd, timeout) < 0) {
- return -1;
- }
+ if (sendMessageAndWaitReply(&msg_stream.msg, &reply_msg, WaitCmd, timeout) < 0) {
+ return -1;
+ }
- return CopyMessageData(reply_buf, reply_msg.msg_data, reply_msg.msg_len);
+ return CopyMessageData(reply_buf, reply_msg.msg_data, reply_msg.msg_len);
}
int CTvin::CHDMIRxCEC::SendBoradcastStandbyMessage(int source_input)
{
- struct _cec_msg msg;
+ struct _cec_msg msg;
- if (isAllowOperate(source_input) < 0) {
- return -1;
- }
+ if (isAllowOperate(source_input) < 0) {
+ return -1;
+ }
- msg.addr = GetDeviceLogicAddr(source_input);
- msg.cmd = E_MSG_STANDBY;
- msg.msg_data[0] = 0;
- msg.msg_len = 2;
+ msg.addr = GetDeviceLogicAddr(source_input);
+ msg.cmd = E_MSG_STANDBY;
+ msg.msg_data[0] = 0;
+ msg.msg_len = 2;
- return SendMessage(&msg);
+ return SendMessage(&msg);
}
int CTvin::CHDMIRxCEC::SendGiveCECVersionMessage(int source_input, unsigned char data_buf[])
{
- struct _cec_msg msg, reply_msg;
+ struct _cec_msg msg, reply_msg;
- if (isAllowOperate(source_input) < 0) {
- return -1;
- }
+ if (isAllowOperate(source_input) < 0) {
+ return -1;
+ }
- if (data_buf == NULL) {
- return -1;
- }
+ if(data_buf == NULL) {
+ return -1;
+ }
- msg.addr = GetDeviceLogicAddr(source_input);
- msg.cmd = E_MSG_GET_CEC_VERSION;
- msg.msg_data[0] = 0;
- msg.msg_len = 2;
+ msg.addr = GetDeviceLogicAddr(source_input);
+ msg.cmd = E_MSG_GET_CEC_VERSION;
+ msg.msg_data[0] = 0;
+ msg.msg_len = 2;
- if (sendMessageAndWaitReply(&msg, &reply_msg, E_MSG_CEC_VERSION, 2000) < 0) {
- return -1;
- }
+ if (sendMessageAndWaitReply(&msg, &reply_msg, E_MSG_CEC_VERSION, 2000) < 0) {
+ return -1;
+ }
- return CopyMessageData(data_buf, reply_msg.msg_data, reply_msg.msg_len);
+ return CopyMessageData(data_buf, reply_msg.msg_data, reply_msg.msg_len);
}
int CTvin::CHDMIRxCEC::SendGiveDeviceVendorIDMessage(int source_input, unsigned char data_buf[])
{
- struct _cec_msg msg, reply_msg;
+ struct _cec_msg msg, reply_msg;
- if (isAllowOperate(source_input) < 0) {
- return -1;
- }
+ if (isAllowOperate(source_input) < 0) {
+ return -1;
+ }
- if (data_buf == NULL) {
- return -1;
- }
+ if(data_buf == NULL) {
+ return -1;
+ }
- msg.addr = GetDeviceLogicAddr(source_input);
- msg.cmd = E_MSG_GIVE_DEVICE_VENDOR_ID;
- msg.msg_data[0] = 0;
- msg.msg_len = 2;
+ msg.addr = GetDeviceLogicAddr(source_input);
+ msg.cmd = E_MSG_GIVE_DEVICE_VENDOR_ID;
+ msg.msg_data[0] = 0;
+ msg.msg_len = 2;
- if (sendMessageAndWaitReply(&msg, &reply_msg, E_MSG_DEVICE_VENDOR_ID, 2000) < 0) {
- return -1;
- }
+ if (sendMessageAndWaitReply(&msg, &reply_msg, E_MSG_DEVICE_VENDOR_ID, 2000) < 0) {
+ return -1;
+ }
- return CopyMessageData(data_buf, reply_msg.msg_data, reply_msg.msg_len);
+ return CopyMessageData(data_buf, reply_msg.msg_data, reply_msg.msg_len);
}
int CTvin::CHDMIRxCEC::SendGiveOSDNameMessage(int source_input, unsigned char data_buf[])
{
- struct _cec_msg msg, reply_msg;
+ struct _cec_msg msg, reply_msg;
- if (isAllowOperate(source_input) < 0) {
- return -1;
- }
+ if (isAllowOperate(source_input) < 0) {
+ return -1;
+ }
- if (data_buf == NULL) {
- return -1;
- }
+ if(data_buf == NULL) {
+ return -1;
+ }
- msg.addr = GetDeviceLogicAddr(source_input);
- msg.cmd = E_MSG_OSDNT_GIVE_OSD_NAME;
- msg.msg_data[0] = 0;
- msg.msg_len = 2;
+ msg.addr = GetDeviceLogicAddr(source_input);
+ msg.cmd = E_MSG_OSDNT_GIVE_OSD_NAME;
+ msg.msg_data[0] = 0;
+ msg.msg_len = 2;
- if (sendMessageAndWaitReply(&msg, &reply_msg, E_MSG_OSDNT_SET_OSD_NAME, 2000) < 0) {
- return -1;
- }
+ if (sendMessageAndWaitReply(&msg, &reply_msg, E_MSG_OSDNT_SET_OSD_NAME, 2000) < 0) {
+ return -1;
+ }
- return CopyMessageData(data_buf, reply_msg.msg_data, reply_msg.msg_len);
+ return CopyMessageData(data_buf, reply_msg.msg_data, reply_msg.msg_len);
}
int CTvin::CHDMIRxCEC::SendGivePhysicalAddressMessage(int source_input, int logic_addr, int *physical_addr)
{
- struct _cec_msg msg, reply_msg;
+ struct _cec_msg msg, reply_msg;
- if (isAllowOperate(source_input) < 0) {
- return -1;
- }
+ if (isAllowOperate(source_input) < 0) {
+ return -1;
+ }
- if (physical_addr == NULL) {
- return -1;
- }
+ if(physical_addr == NULL) {
+ return -1;
+ }
- msg.addr = logic_addr;
- msg.cmd = E_MSG_GIVE_PHYSICAL_ADDRESS;
- msg.msg_data[0] = 0;
- msg.msg_len = 2;
+ msg.addr = logic_addr;
+ msg.cmd = E_MSG_GIVE_PHYSICAL_ADDRESS;
+ msg.msg_data[0] = 0;
+ msg.msg_len = 2;
- if (sendMessageAndWaitReply(&msg, &reply_msg, E_MSG_REPORT_PHYSICAL_ADDRESS, 2000) < 0) {
- return -1;
- }
+ if (sendMessageAndWaitReply(&msg, &reply_msg, E_MSG_REPORT_PHYSICAL_ADDRESS, 2000) < 0) {
+ return -1;
+ }
- if (reply_msg.msg_len == 5) {
- *physical_addr = 0;
- *physical_addr |= reply_msg.msg_data[0] << 8;
- *physical_addr |= reply_msg.msg_data[1];
- return reply_msg.msg_len;
- }
+ if (reply_msg.msg_len == 5) {
+ *physical_addr = 0;
+ *physical_addr |= reply_msg.msg_data[0] << 8;
+ *physical_addr |= reply_msg.msg_data[1];
+ return reply_msg.msg_len;
+ }
- return -1;
+ return -1;
}
int CTvin::CHDMIRxCEC::SendSetMenuLanguageMessage(int source_input, unsigned char data_buf[])
{
- struct _cec_msg msg;
+ struct _cec_msg msg;
- if (isAllowOperate(source_input) < 0) {
- return -1;
- }
+ if (isAllowOperate(source_input) < 0) {
+ return -1;
+ }
- if (data_buf == NULL) {
- return -1;
- }
+ if(data_buf == NULL) {
+ return -1;
+ }
- msg.addr = GetDeviceLogicAddr(source_input);
- msg.cmd = E_MSG_SET_MENU_LANGUAGE;
- msg.msg_data[0] = data_buf[0];
- msg.msg_data[1] = data_buf[1];
- msg.msg_data[2] = data_buf[2];
- msg.msg_len = 5;
+ msg.addr = GetDeviceLogicAddr(source_input);
+ msg.cmd = E_MSG_SET_MENU_LANGUAGE;
+ msg.msg_data[0] = data_buf[0];
+ msg.msg_data[1] = data_buf[1];
+ msg.msg_data[2] = data_buf[2];
+ msg.msg_len = 5;
- return SendMessage(&msg);
+ return SendMessage(&msg);
}
int CTvin::CHDMIRxCEC::SendVendorRemoteKeyDownMessage(int source_input, unsigned char key_val)
{
- struct _cec_msg msg;
+ struct _cec_msg msg;
- if (isAllowOperate(source_input) < 0) {
- return -1;
- }
+ if (isAllowOperate(source_input) < 0) {
+ return -1;
+ }
- msg.addr = GetDeviceLogicAddr(source_input);
- msg.cmd = E_MSG_VENDOR_RC_BUT_DOWN;
- msg.msg_data[0] = key_val;
- msg.msg_len = 3;
+ msg.addr = GetDeviceLogicAddr(source_input);
+ msg.cmd = E_MSG_VENDOR_RC_BUT_DOWN;
+ msg.msg_data[0] = key_val;
+ msg.msg_len = 3;
- return SendMessage(&msg);
+ return SendMessage(&msg);
}
int CTvin::CHDMIRxCEC::SendVendorRemoteKeyUpMessage(int source_input)
{
- struct _cec_msg msg;
+ struct _cec_msg msg;
- if (isAllowOperate(source_input) < 0) {
- return -1;
- }
+ if (isAllowOperate(source_input) < 0) {
+ return -1;
+ }
- msg.addr = GetDeviceLogicAddr(source_input);
- msg.cmd = E_MSG_VENDOR_RC_BUT_UP;
- msg.msg_data[0] = 0;
- msg.msg_len = 2;
+ msg.addr = GetDeviceLogicAddr(source_input);
+ msg.cmd = E_MSG_VENDOR_RC_BUT_UP;
+ msg.msg_data[0] = 0;
+ msg.msg_len = 2;
- return SendMessage(&msg);
+ return SendMessage(&msg);
}
int CTvin::CHDMIRxCEC::rmFromRequestList(int index)
{
- mListLock.lock();
+ mListLock.lock();
- ClrReplyListItem(&mReplyList[index]);
+ ClrReplyListItem(&mReplyList[index]);
- mListLock.unlock();
+ mListLock.unlock();
- return 0;
+ return 0;
}
int CTvin::CHDMIRxCEC::addToRequestList(HDMIRxRequestReplyItem *reply_item)
{
- int i = 0;
+ int i = 0;
- mListLock.lock();
+ mListLock.lock();
- for (i = 0; i < CC_REQUEST_LIST_SIZE; i++) {
- if (mReplyList[i].WaitFlag == 0) {
- mReplyList[i] = *reply_item;
- mListLock.unlock();
- return i;
- }
- }
+ for(i = 0; i < CC_REQUEST_LIST_SIZE; i++) {
+ if (mReplyList[i].WaitFlag == 0) {
+ mReplyList[i] = *reply_item;
+ mListLock.unlock();
+ return i;
+ }
+ }
- mListLock.unlock();
+ mListLock.unlock();
- return 0;
+ return 0;
}
int CTvin::CHDMIRxCEC::processData(int msg_cnt)
{
- int i = 0, j = 0;
- CECMsgStream msg_stream;
-
- for (i = 0; i < msg_cnt; i++) {
- for (j = 0; j < CC_REQUEST_LIST_SIZE; j++) {
- if (mReplyList[j].WaitFlag) {
- if (mMsgBuf[i].cmd == mReplyList[j].WaitCmd && ((mMsgBuf[i].addr & 0xF0) >> 4) == mReplyList[j].WaitLogicAddr) {
- mReplyList[j].DataFlag = 1;
- mReplyList[j].msg = mMsgBuf[i];
- PrintMessage(__FUNCTION__, 0, &mReplyList[j].msg);
- mReplyList[j].WaitReplyCondition.signal();
-
- return 0;
- }
- }
- }
-
- msg_stream.msg = mMsgBuf[i];
- if (mpObserver != NULL) {
- mpObserver->onHDMIRxCECMessage(msg_stream.msg.msg_len, msg_stream.buf);
- }
- }
-
- return 0;
+ int i = 0, j = 0;
+ CECMsgStream msg_stream;
+
+ for(i = 0; i < msg_cnt; i++) {
+ for (j = 0; j < CC_REQUEST_LIST_SIZE; j++) {
+ if (mReplyList[j].WaitFlag) {
+ if (mMsgBuf[i].cmd == mReplyList[j].WaitCmd && ((mMsgBuf[i].addr & 0xF0) >> 4) == mReplyList[j].WaitLogicAddr) {
+ mReplyList[j].DataFlag = 1;
+ mReplyList[j].msg = mMsgBuf[i];
+ PrintMessage(__FUNCTION__, 0, &mReplyList[j].msg);
+ mReplyList[j].WaitReplyCondition.signal();
+
+ return 0;
+ }
+ }
+ }
+
+ msg_stream.msg = mMsgBuf[i];
+ if (mpObserver != NULL) {
+ mpObserver->onHDMIRxCECMessage(msg_stream.msg.msg_len, msg_stream.buf);
+ }
+ }
+
+ return 0;
}
bool CTvin::CHDMIRxCEC::threadLoop()
{
- int msg_cnt = 0;
- int sleeptime = 200; //ms
+ int msg_cnt = 0;
+ int sleeptime = 200; //ms
- mState = STATE_RUNNING;
+ mState = STATE_RUNNING;
- while (!exitPending()) { //requietexit() or requietexitWait() not call
- while (mRequestPause) {
- mLock.lock();
- mState = STATE_PAUSE;
- mPauseCondition.wait(mLock); //first unlock,when return,lock again,so need,call unlock
- mState = STATE_RUNNING;
- mLock.unlock();
- }
+ while(!exitPending()) { //requietexit() or requietexitWait() not call
+ while (mRequestPause) {
+ mLock.lock();
+ mState = STATE_PAUSE;
+ mPauseCondition.wait(mLock); //first unlock,when return,lock again,so need,call unlock
+ mState = STATE_RUNNING;
+ mLock.unlock();
+ }
- msg_cnt = GetMessage(mMsgBuf);
+ msg_cnt = GetMessage(mMsgBuf);
- processData(msg_cnt);
+ processData(msg_cnt);
- if (!mRequestPause) {
- usleep(sleeptime * 1000);
- }
- }
+ if (!mRequestPause) {
+ usleep(sleeptime * 1000);
+ }
+ }
- mState = STATE_STOPED;
- //exit
- //return true, run again, return false,not run.
- return false;
+ mState = STATE_STOPED;
+ //exit
+ //return true, run again, return false,not run.
+ return false;
}
diff --git a/tvapi/libtv/tvin/CSourceConnectDetect.cpp b/tvapi/libtv/tvin/CSourceConnectDetect.cpp
index 1fe801d..ad44ad1 100644
--- a/tvapi/libtv/tvin/CSourceConnectDetect.cpp
+++ b/tvapi/libtv/tvin/CSourceConnectDetect.cpp
@@ -26,43 +26,43 @@
CTvin::CSourceConnectDetect::CSourceConnectDetect(CTvin *pTvin)
{
- for (int i = 0; i < SOURCE_MAX; i++) {
- mSourceDetectTable[i] = SOURCE_INVALID;
- mSourceDetectPreStatusBuf[i] = CC_SOURCE_PLUG_OUT;
- mSourceDetectCurStatusBuf[i] = CC_SOURCE_PLUG_OUT;
- }
+ for (int i = 0; i < SOURCE_MAX; i++) {
+ mSourceDetectTable[i] = SOURCE_INVALID;
+ mSourceDetectPreStatusBuf[i] = CC_SOURCE_PLUG_OUT;
+ mSourceDetectCurStatusBuf[i] = CC_SOURCE_PLUG_OUT;
+ }
- for (int i = 0; i < CC_AV_DETECT_SAMPLE_DATA_MAX_LEN; i++) {
- mAV1SampleDataBuf[i] = 0;
- mAV2SampleDataBuf[i] = 0;
- }
+ for (int i = 0; i < CC_AV_DETECT_SAMPLE_DATA_MAX_LEN; i++) {
+ mAV1SampleDataBuf[i] = 0;
+ mAV2SampleDataBuf[i] = 0;
+ }
#if CC_DETECT_SOURCE_AV2 == 1
- mSourceDetectTable[0] = SOURCE_AV1;
- mSourceDetectTable[1] = SOURCE_AV2;
- mSourceDetectTable[2] = SOURCE_HDMI1;
- mSourceDetectTable[3] = SOURCE_HDMI2;
- mSourceDetectTable[4] = SOURCE_HDMI3;
+ mSourceDetectTable[0] = SOURCE_AV1;
+ mSourceDetectTable[1] = SOURCE_AV2;
+ mSourceDetectTable[2] = SOURCE_HDMI1;
+ mSourceDetectTable[3] = SOURCE_HDMI2;
+ mSourceDetectTable[4] = SOURCE_HDMI3;
#else
- mSourceDetectTable[0] = SOURCE_AV1;
- mSourceDetectTable[1] = SOURCE_HDMI1;
- mSourceDetectTable[2] = SOURCE_HDMI2;
- mSourceDetectTable[3] = SOURCE_HDMI3;
+ mSourceDetectTable[0] = SOURCE_AV1;
+ mSourceDetectTable[1] = SOURCE_HDMI1;
+ mSourceDetectTable[2] = SOURCE_HDMI2;
+ mSourceDetectTable[3] = SOURCE_HDMI3;
#endif
- mSourceDetectSleepTime = 200; //default 200ms
+ mSourceDetectSleepTime = 200; //default 200ms
- mAVDetectMethod = CC_AV_DETECT_METHOD_ADC_PLUG_OUT;
- mAVDetectPlugOutADCThreshold = CC_AV_PLUG_OUT_ADC_DEF_THRESHOLD;
- mAVDetectPlugInADCThreshold = CC_AV_PLUG_IN_ADC_DEF_THRESHOLD;
- mAVDetectPlugInDutyCycle = 70;
- mAVDetectPlugOutDutyCycle = 70;
- mAVDetectSampleSize = 15;
- mAV1DetectADCChan = 2;
- mAV2DetectADCChan = 3;
+ mAVDetectMethod = CC_AV_DETECT_METHOD_ADC_PLUG_OUT;
+ mAVDetectPlugOutADCThreshold = CC_AV_PLUG_OUT_ADC_DEF_THRESHOLD;
+ mAVDetectPlugInADCThreshold = CC_AV_PLUG_IN_ADC_DEF_THRESHOLD;
+ mAVDetectPlugInDutyCycle = 70;
+ mAVDetectPlugOutDutyCycle = 70;
+ mAVDetectSampleSize = 15;
+ mAV1DetectADCChan = 2;
+ mAV2DetectADCChan = 3;
- mpObserver = NULL;
- mpTvin = pTvin;
+ mpObserver = NULL;
+ mpTvin = pTvin;
}
CTvin::CSourceConnectDetect::~CSourceConnectDetect()
@@ -71,242 +71,242 @@ CTvin::CSourceConnectDetect::~CSourceConnectDetect()
int CTvin::CSourceConnectDetect::startDetect()
{
- refreshDetectSources();
- refreshDetectAVInfo();
- this->run();
+ refreshDetectSources();
+ refreshDetectAVInfo();
+ this->run();
- return 0;
+ return 0;
}
int CTvin::CSourceConnectDetect::refreshDetectSources()
{
- int cur_index = 0;
- char *token = NULL;
- const char *strDelimit = ",";
- const char *config_value = NULL;
- char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
-
- config_value = config_get_str("TV", "tvin.SourceConnectDetect.sources", "null");
- if (strcasecmp(config_value, "null") == 0) {
- return 0;
- }
-
- for (int i = 0; i < SOURCE_MAX; i++) {
- mSourceDetectTable[i] = SOURCE_INVALID;
- mSourceDetectPreStatusBuf[i] = CC_SOURCE_PLUG_OUT;
- mSourceDetectCurStatusBuf[i] = CC_SOURCE_PLUG_OUT;
- }
-
- cur_index = 0;
- memset((void *)data_str, 0, sizeof(data_str));
- strncpy(data_str, config_value, sizeof(data_str) - 1);
- token = strtok(data_str, strDelimit);
- while (token != NULL) {
- if (strcasecmp(token, "SOURCE_AV1") == 0) {
- mSourceDetectTable[cur_index] = SOURCE_AV1;
- cur_index += 1;
- //LOGD("%s, add detect source SOURCE_AV1.\n", __FUNCTION__);
- } else if (strcasecmp(token, "SOURCE_AV2") == 0) {
- mSourceDetectTable[cur_index] = SOURCE_AV2;
- cur_index += 1;
- //LOGD("%s, add detect source SOURCE_AV2.\n", __FUNCTION__);
- } else if (strcasecmp(token, "SOURCE_HDMI1") == 0) {
- mSourceDetectTable[cur_index] = SOURCE_HDMI1;
- cur_index += 1;
- //LOGD("%s, add detect source SOURCE_HDMI1.\n", __FUNCTION__);
- } else if (strcasecmp(token, "SOURCE_HDMI2") == 0) {
- mSourceDetectTable[cur_index] = SOURCE_HDMI2;
- cur_index += 1;
- //LOGD("%s, add detect source SOURCE_HDMI2.\n", __FUNCTION__);
- } else if (strcasecmp(token, "SOURCE_HDMI3") == 0) {
- mSourceDetectTable[cur_index] = SOURCE_HDMI3;
- cur_index += 1;
- //LOGD("%s, add detect source SOURCE_HDMI3.\n", __FUNCTION__);
- }
-
- token = strtok(NULL, strDelimit);
- }
-
- return 0;
+ int cur_index = 0;
+ char *token = NULL;
+ const char *strDelimit = ",";
+ const char *config_value = NULL;
+ char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
+
+ config_value = config_get_str("TV", "tvin.SourceConnectDetect.sources", "null");
+ if (strcasecmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ for (int i = 0; i < SOURCE_MAX; i++) {
+ mSourceDetectTable[i] = SOURCE_INVALID;
+ mSourceDetectPreStatusBuf[i] = CC_SOURCE_PLUG_OUT;
+ mSourceDetectCurStatusBuf[i] = CC_SOURCE_PLUG_OUT;
+ }
+
+ cur_index = 0;
+ memset((void *)data_str, 0, sizeof(data_str));
+ strncpy(data_str, config_value, sizeof(data_str) - 1);
+ token = strtok(data_str, strDelimit);
+ while (token != NULL) {
+ if (strcasecmp(token, "SOURCE_AV1") == 0) {
+ mSourceDetectTable[cur_index] = SOURCE_AV1;
+ cur_index += 1;
+ //LOGD("%s, add detect source SOURCE_AV1.\n", __FUNCTION__);
+ } else if (strcasecmp(token, "SOURCE_AV2") == 0) {
+ mSourceDetectTable[cur_index] = SOURCE_AV2;
+ cur_index += 1;
+ //LOGD("%s, add detect source SOURCE_AV2.\n", __FUNCTION__);
+ } else if (strcasecmp(token, "SOURCE_HDMI1") == 0) {
+ mSourceDetectTable[cur_index] = SOURCE_HDMI1;
+ cur_index += 1;
+ //LOGD("%s, add detect source SOURCE_HDMI1.\n", __FUNCTION__);
+ } else if (strcasecmp(token, "SOURCE_HDMI2") == 0) {
+ mSourceDetectTable[cur_index] = SOURCE_HDMI2;
+ cur_index += 1;
+ //LOGD("%s, add detect source SOURCE_HDMI2.\n", __FUNCTION__);
+ } else if (strcasecmp(token, "SOURCE_HDMI3") == 0) {
+ mSourceDetectTable[cur_index] = SOURCE_HDMI3;
+ cur_index += 1;
+ //LOGD("%s, add detect source SOURCE_HDMI3.\n", __FUNCTION__);
+ }
+
+ token = strtok(NULL, strDelimit);
+ }
+
+ return 0;
}
int CTvin::CSourceConnectDetect::refreshDetectAVInfo()
{
- int cur_index = 0;
- char *token = NULL;
- const char *strDelimit = ",";
- const char *config_value = NULL;
- char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
-
- config_value = config_get_str("TV", "tvin.SourceConnectDetect.av.info", "null");
- if (strcasecmp(config_value, "null") == 0) {
- return 0;
- }
-
- cur_index = 0;
- memset((void *)data_str, 0, sizeof(data_str));
- strncpy(data_str, config_value, sizeof(data_str) - 1);
- token = strtok(data_str, strDelimit);
- while (token != NULL) {
- if (cur_index == 0) {
- mAV1DetectADCChan = strtol(token, NULL, 10);
- } else if (cur_index == 1) {
- mAV2DetectADCChan = strtol(token, NULL, 10);
- } else if (cur_index == 2) {
- mAVDetectSampleSize = strtol(token, NULL, 10);
- } else if (cur_index == 3) {
- mAVDetectMethod = strtol(token, NULL, 10);
- } else if (cur_index == 4) {
- mAVDetectPlugInDutyCycle = strtol(token, NULL, 10);
- } else if (cur_index == 5) {
- mAVDetectPlugOutDutyCycle = strtol(token, NULL, 10);
- } else if (cur_index == 6) {
- mAVDetectPlugInADCThreshold = strtol(token, NULL, 10);
- } else if (cur_index == 7) {
- mAVDetectPlugOutADCThreshold = strtol(token, NULL, 10);
- }
-
- cur_index += 1;
- token = strtok(NULL, strDelimit);
- }
-
- return 0;
+ int cur_index = 0;
+ char *token = NULL;
+ const char *strDelimit = ",";
+ const char *config_value = NULL;
+ char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
+
+ config_value = config_get_str("TV", "tvin.SourceConnectDetect.av.info", "null");
+ if (strcasecmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ cur_index = 0;
+ memset((void *)data_str, 0, sizeof(data_str));
+ strncpy(data_str, config_value, sizeof(data_str) - 1);
+ token = strtok(data_str, strDelimit);
+ while (token != NULL) {
+ if (cur_index == 0) {
+ mAV1DetectADCChan = strtol(token, NULL, 10);
+ } else if (cur_index == 1) {
+ mAV2DetectADCChan = strtol(token, NULL, 10);
+ } else if (cur_index == 2) {
+ mAVDetectSampleSize = strtol(token, NULL, 10);
+ } else if (cur_index == 3) {
+ mAVDetectMethod = strtol(token, NULL, 10);
+ } else if (cur_index == 4) {
+ mAVDetectPlugInDutyCycle = strtol(token, NULL, 10);
+ } else if (cur_index == 5) {
+ mAVDetectPlugOutDutyCycle = strtol(token, NULL, 10);
+ } else if (cur_index == 6) {
+ mAVDetectPlugInADCThreshold = strtol(token, NULL, 10);
+ } else if (cur_index == 7) {
+ mAVDetectPlugOutADCThreshold = strtol(token, NULL, 10);
+ }
+
+ cur_index += 1;
+ token = strtok(NULL, strDelimit);
+ }
+
+ return 0;
}
int CTvin::CSourceConnectDetect::GetSourceConnectStatus(int source_input)
{
- for (int i = 0; i < SOURCE_MAX; i++) {
- if (mSourceDetectTable[i] == source_input) {
- return mSourceDetectCurStatusBuf[i];
- }
- }
+ for (int i = 0; i < SOURCE_MAX; i++) {
+ if (mSourceDetectTable[i] == source_input) {
+ return mSourceDetectCurStatusBuf[i];
+ }
+ }
- return CC_SOURCE_PLUG_OUT;
+ return CC_SOURCE_PLUG_OUT;
}
bool CTvin::CSourceConnectDetect::threadLoop()
{
- if ( mpObserver == NULL ) {
- return false;
- }
+ if ( mpObserver == NULL ) {
+ return false;
+ }
- LOGD("%s, entering...\n", "TV");
+ LOGD("%s, entering...\n", "TV");
- prctl(PR_SET_NAME, (unsigned long)"CSourceConnectDetect thread loop");
+ prctl(PR_SET_NAME, (unsigned long)"CSourceConnectDetect thread loop");
- mpTvin->VDIN_OpenHDMIPinMuxOn(true);
+ mpTvin->VDIN_OpenHDMIPinMuxOn(true);
- while (!exitPending()) { //requietexit() or requietexitWait() not call
- DetectSources();
+ while (!exitPending()) { //requietexit() or requietexitWait() not call
+ DetectSources();
- usleep(mSourceDetectSleepTime * 1000);
- }
+ usleep(mSourceDetectSleepTime * 1000);
+ }
- LOGD("%s, exiting...\n", "TV");
- //return true, run again, return false,not run.
- return false;
+ LOGD("%s, exiting...\n", "TV");
+ //return true, run again, return false,not run.
+ return false;
}
int CTvin::CSourceConnectDetect::DetectSources()
{
- int i = 0, cur_source = 0;
-
- for (i = 0; i < SOURCE_MAX; i++) {
- cur_source = mSourceDetectTable[i];
- if (cur_source == SOURCE_AV1 || cur_source == SOURCE_AV2) {
- mSourceDetectCurStatusBuf[i] = DetectAVSource(cur_source);
- } else if (cur_source == SOURCE_HDMI1 || cur_source == SOURCE_HDMI2 || cur_source == SOURCE_HDMI3) {
- mSourceDetectCurStatusBuf[i] = DetectHDMISource(cur_source);
- }
- }
-
- for (i = 0; i < SOURCE_MAX; i++) {
- if (mSourceDetectCurStatusBuf[i] != mSourceDetectPreStatusBuf[i]) {
- mSourceDetectPreStatusBuf[i] = mSourceDetectCurStatusBuf[i];
- LOGD("%s, Source id = %d, Source plug status = %d\n", "TV", mSourceDetectTable[i], mSourceDetectCurStatusBuf[i]);
+ int i = 0, cur_source = 0;
+
+ for (i = 0; i < SOURCE_MAX; i++) {
+ cur_source = mSourceDetectTable[i];
+ if (cur_source == SOURCE_AV1 || cur_source == SOURCE_AV2) {
+ mSourceDetectCurStatusBuf[i] = DetectAVSource(cur_source);
+ } else if (cur_source == SOURCE_HDMI1 || cur_source == SOURCE_HDMI2 || cur_source == SOURCE_HDMI3) {
+ mSourceDetectCurStatusBuf[i] = DetectHDMISource(cur_source);
+ }
+ }
+
+ for (i = 0; i < SOURCE_MAX; i++) {
+ if (mSourceDetectCurStatusBuf[i] != mSourceDetectPreStatusBuf[i]) {
+ mSourceDetectPreStatusBuf[i] = mSourceDetectCurStatusBuf[i];
+ LOGD("%s, Source id = %d, Source plug status = %d\n", "TV", mSourceDetectTable[i], mSourceDetectCurStatusBuf[i]);
#if CC_DEBUG_AV_SAMPLE_BUF == 1
- int *cur_sample_buf = NULL;
-
- if (mSourceDetectTable[i] == SOURCE_AV1) {
- cur_sample_buf = mAV1SampleDataBuf;
- } else if (mSourceDetectTable[i] == SOURCE_AV2) {
- cur_sample_buf = mAV2SampleDataBuf;
- }
-
- if (cur_sample_buf != NULL) {
- for (int j = 0; j < mAVDetectSampleSize; j++) {
- LOGD("%s, cur_sample_buf[%d] = %d\n", "TV", j, cur_sample_buf[j]);
- }
- LOGD("%s, \n\n\n", "TV", i, cur_sample_buf[i]);
- }
+ int *cur_sample_buf = NULL;
+
+ if (mSourceDetectTable[i] == SOURCE_AV1) {
+ cur_sample_buf = mAV1SampleDataBuf;
+ } else if (mSourceDetectTable[i] == SOURCE_AV2) {
+ cur_sample_buf = mAV2SampleDataBuf;
+ }
+
+ if (cur_sample_buf != NULL) {
+ for (int j = 0; j < mAVDetectSampleSize; j++) {
+ LOGD("%s, cur_sample_buf[%d] = %d\n", "TV", j, cur_sample_buf[j]);
+ }
+ LOGD("%s, \n\n\n", "TV", i, cur_sample_buf[i]);
+ }
#endif
- mpObserver->onSourceConnect(mSourceDetectTable[i], mSourceDetectCurStatusBuf[i]);
- }
- }
+ mpObserver->onSourceConnect(mSourceDetectTable[i], mSourceDetectCurStatusBuf[i]);
+ }
+ }
- return 0;
+ return 0;
}
int CTvin::CSourceConnectDetect::DetectAVSource(int source_input)
{
- int i = 0, plug_in_cnt = 0, plug_out_cnt = 0;
- int detect_adc_chan = -1, cur_adc_val = 0;
- int *cur_sample_ind = 0;
- int *cur_sample_buf = NULL;
-
- if (source_input == SOURCE_AV1) {
- detect_adc_chan = mAV1DetectADCChan;
- cur_sample_ind = &mAV1CurSampleInd;
- cur_sample_buf = mAV1SampleDataBuf;
- } else if (source_input == SOURCE_AV2) {
- detect_adc_chan = mAV2DetectADCChan;
- cur_sample_ind = &mAV2CurSampleInd;
- cur_sample_buf = mAV2SampleDataBuf;
- } else {
- return CC_SOURCE_PLUG_OUT;
- }
-
- cur_adc_val = ReadADCSpecialChannelValue(detect_adc_chan);
- *cur_sample_ind = *cur_sample_ind % mAVDetectSampleSize;
- cur_sample_buf[*cur_sample_ind] = cur_adc_val;
- *cur_sample_ind = (*cur_sample_ind + 1 ) % mAVDetectSampleSize;
-
- plug_in_cnt = 0;
- plug_out_cnt = 0;
- for (i = 0; i < mAVDetectSampleSize; i++) {
- if (cur_sample_buf[i] >= mAVDetectPlugInADCThreshold) {
- plug_in_cnt += 1;
- } else if (cur_sample_buf[i] <= mAVDetectPlugOutADCThreshold) {
- plug_out_cnt += 1;
- }
- }
-
- if (mAVDetectMethod == CC_AV_DETECT_METHOD_ADC_PLUG_IN) {
- if ((plug_in_cnt * 100 / mAVDetectSampleSize) >= mAVDetectPlugInDutyCycle) {
- return CC_SOURCE_PLUG_IN;
- }
-
- return CC_SOURCE_PLUG_OUT;
- } else if (mAVDetectMethod == CC_AV_DETECT_METHOD_ADC_PLUG_OUT) {
- if ((plug_out_cnt * 100 / mAVDetectSampleSize) >= mAVDetectPlugOutDutyCycle) {
- return CC_SOURCE_PLUG_OUT;
- }
-
- return CC_SOURCE_PLUG_IN;
- }
-
- return CC_SOURCE_PLUG_OUT;
+ int i = 0, plug_in_cnt = 0, plug_out_cnt = 0;
+ int detect_adc_chan = -1, cur_adc_val = 0;
+ int *cur_sample_ind = 0;
+ int *cur_sample_buf = NULL;
+
+ if (source_input == SOURCE_AV1) {
+ detect_adc_chan = mAV1DetectADCChan;
+ cur_sample_ind = &mAV1CurSampleInd;
+ cur_sample_buf = mAV1SampleDataBuf;
+ } else if (source_input == SOURCE_AV2) {
+ detect_adc_chan = mAV2DetectADCChan;
+ cur_sample_ind = &mAV2CurSampleInd;
+ cur_sample_buf = mAV2SampleDataBuf;
+ } else {
+ return CC_SOURCE_PLUG_OUT;
+ }
+
+ cur_adc_val = ReadADCSpecialChannelValue(detect_adc_chan);
+ *cur_sample_ind = *cur_sample_ind % mAVDetectSampleSize;
+ cur_sample_buf[*cur_sample_ind] = cur_adc_val;
+ *cur_sample_ind = (*cur_sample_ind + 1 ) % mAVDetectSampleSize;
+
+ plug_in_cnt = 0;
+ plug_out_cnt = 0;
+ for (i = 0; i < mAVDetectSampleSize; i++) {
+ if (cur_sample_buf[i] >= mAVDetectPlugInADCThreshold) {
+ plug_in_cnt += 1;
+ } else if (cur_sample_buf[i] <= mAVDetectPlugOutADCThreshold) {
+ plug_out_cnt += 1;
+ }
+ }
+
+ if (mAVDetectMethod == CC_AV_DETECT_METHOD_ADC_PLUG_IN) {
+ if ((plug_in_cnt * 100 / mAVDetectSampleSize) >= mAVDetectPlugInDutyCycle) {
+ return CC_SOURCE_PLUG_IN;
+ }
+
+ return CC_SOURCE_PLUG_OUT;
+ } else if (mAVDetectMethod == CC_AV_DETECT_METHOD_ADC_PLUG_OUT) {
+ if ((plug_out_cnt * 100 / mAVDetectSampleSize) >= mAVDetectPlugOutDutyCycle) {
+ return CC_SOURCE_PLUG_OUT;
+ }
+
+ return CC_SOURCE_PLUG_IN;
+ }
+
+ return CC_SOURCE_PLUG_OUT;
}
int CTvin::CSourceConnectDetect::DetectHDMISource(int source_input)
{
- int source_port = CTvin::Tvin_GetSourcePortBySourceInput((tv_source_input_t)source_input);
+ int source_port = CTvin::Tvin_GetSourcePortBySourceInput((tv_source_input_t)source_input);
- if (mpTvin->VDIN_GetPortConnect(source_port) == true) {
- return CC_SOURCE_PLUG_IN;
- }
+ if (mpTvin->VDIN_GetPortConnect(source_port) == true) {
+ return CC_SOURCE_PLUG_IN;
+ }
- return CC_SOURCE_PLUG_OUT;
+ return CC_SOURCE_PLUG_OUT;
}
diff --git a/tvapi/libtv/tvin/CTvin.cpp b/tvapi/libtv/tvin/CTvin.cpp
index 3a43fa3..4f27455 100644
--- a/tvapi/libtv/tvin/CTvin.cpp
+++ b/tvapi/libtv/tvin/CTvin.cpp
@@ -61,40 +61,40 @@
#define FBIOPUT_OSD_FREE_SCALE_HEIGHT 0x4506
typedef enum {
- VIEWMODE_NULL = 0,
- VIEWMODE_4_3,
- VIEWMODE_16_9
+ VIEWMODE_NULL = 0,
+ VIEWMODE_4_3,
+ VIEWMODE_16_9
} view_mode_t;
int CTvin::mSourceInputToPortMap[SOURCE_MAX];
CTvin::CTvin()
{
- int i = 0;
+ int i = 0;
- m_vdin_dev_fd = -1;
- afe_dev_fd = -1;
+ m_vdin_dev_fd = -1;
+ afe_dev_fd = -1;
- m_tvin_param.index = 0;
- m_is_decoder_start = false;
- gExistD2D3 = -1;
- gVideoPath[0] = '\0';
- m_pathid = TV_PATH_DECODER_3D_AMVIDEO;
+ m_tvin_param.index = 0;
+ m_is_decoder_start = false;
+ gExistD2D3 = -1;
+ gVideoPath[0] = '\0';
+ m_pathid = TV_PATH_DECODER_3D_AMVIDEO;
- for (i = 0; i < SOURCE_MAX; i++) {
- mSourceInputToPortMap[i] = TVIN_PORT_NULL;
- }
+ for (i = 0; i < SOURCE_MAX; i++) {
+ mSourceInputToPortMap[i] = TVIN_PORT_NULL;
+ }
- mSourceInputToPortMap[SOURCE_TV] = TVIN_PORT_CVBS3;
- mSourceInputToPortMap[SOURCE_AV1] = TVIN_PORT_CVBS1;
- mSourceInputToPortMap[SOURCE_AV2] = TVIN_PORT_CVBS2;
- mSourceInputToPortMap[SOURCE_YPBPR1] = TVIN_PORT_COMP0;
- mSourceInputToPortMap[SOURCE_YPBPR2] = TVIN_PORT_COMP1;
- mSourceInputToPortMap[SOURCE_HDMI1] = TVIN_PORT_HDMI0;
- mSourceInputToPortMap[SOURCE_HDMI2] = TVIN_PORT_HDMI2;
- mSourceInputToPortMap[SOURCE_HDMI3] = TVIN_PORT_HDMI1;
- mSourceInputToPortMap[SOURCE_VGA] = TVIN_PORT_VGA0;
- mSourceInputToPortMap[SOURCE_MPEG] = TVIN_PORT_MPEG0;
- mSourceInputToPortMap[SOURCE_DTV] = TVIN_PORT_DTV;
- mSourceInputToPortMap[SOURCE_IPTV] = TVIN_PORT_BT656;
+ mSourceInputToPortMap[SOURCE_TV] = TVIN_PORT_CVBS3;
+ mSourceInputToPortMap[SOURCE_AV1] = TVIN_PORT_CVBS1;
+ mSourceInputToPortMap[SOURCE_AV2] = TVIN_PORT_CVBS2;
+ mSourceInputToPortMap[SOURCE_YPBPR1] = TVIN_PORT_COMP0;
+ mSourceInputToPortMap[SOURCE_YPBPR2] = TVIN_PORT_COMP1;
+ mSourceInputToPortMap[SOURCE_HDMI1] = TVIN_PORT_HDMI0;
+ mSourceInputToPortMap[SOURCE_HDMI2] = TVIN_PORT_HDMI2;
+ mSourceInputToPortMap[SOURCE_HDMI3] = TVIN_PORT_HDMI1;
+ mSourceInputToPortMap[SOURCE_VGA] = TVIN_PORT_VGA0;
+ mSourceInputToPortMap[SOURCE_MPEG] = TVIN_PORT_MPEG0;
+ mSourceInputToPortMap[SOURCE_DTV] = TVIN_PORT_DTV;
+ mSourceInputToPortMap[SOURCE_IPTV] = TVIN_PORT_BT656;
}
CTvin::~CTvin()
@@ -104,1430 +104,1430 @@ CTvin::~CTvin()
int CTvin::OpenTvin()
{
- const char *config_value;
- config_value = config_get_str ( "TV", "tvin.manual.set.tvpath", "null" );
- strcpy ( config_tv_path, config_value );
- memset ( config_default_path, 0x0, 64 );
- config_value = config_get_str ( "TV", "tvin.manual.set.defaultpath", "null" );
- strcpy ( config_default_path, config_value );
- return 0;
+ const char *config_value;
+ config_value = config_get_str ( "TV", "tvin.manual.set.tvpath", "null" );
+ strcpy ( config_tv_path, config_value );
+ memset ( config_default_path, 0x0, 64 );
+ config_value = config_get_str ( "TV", "tvin.manual.set.defaultpath", "null" );
+ strcpy ( config_default_path, config_value );
+ return 0;
}
int CTvin::IsFileExist ( const char *file_name )
{
- struct stat tmp_st;
+ struct stat tmp_st;
- if ( stat ( file_name, &tmp_st ) < 0 ) {
- return 0;
- }
+ if ( stat ( file_name, &tmp_st ) < 0 ) {
+ return 0;
+ }
- return 1;
+ return 1;
}
char *CTvin::DelSub ( char *str, char *sub )
{
- char *psrc = str, *pdest = str, *psub = NULL, *p = NULL;
+ char *psrc = str, *pdest = str, *psub = NULL, *p = NULL;
- if ( ( str == NULL ) || ( sub == NULL ) ) {
- return NULL;
- }
+ if ( ( str == NULL ) || ( sub == NULL ) ) {
+ return NULL;
+ }
- while ( *psrc ) {
- p = psrc;
- psub = sub;
+ while ( *psrc ) {
+ p = psrc;
+ psub = sub;
- while ( *p && *p == *psub ) {
- p++;
- psub++;
- }
+ while ( *p && *p == *psub ) {
+ p++;
+ psub++;
+ }
- if ( *psub == 0 ) {
- psrc = p;
- } else {
- *pdest++ = *psrc++;
- }
- }
+ if ( *psub == 0 ) {
+ psrc = p;
+ } else {
+ *pdest++ = *psrc++;
+ }
+ }
- *pdest = 0;
+ *pdest = 0;
- return str;
+ return str;
}
int CTvin::setMpeg2Vdin(int enable)
{
- /* let output data loop to vdin */
- FILE *fp = fopen ( "/sys/module/di/parameters/mpeg2vdin_en", "w" );
+ /* let output data loop to vdin */
+ FILE *fp = fopen ( "/sys/module/di/parameters/mpeg2vdin_en", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/mpeg2vdin_en error\n" );
- return -1;
- }
- fprintf ( fp, "%d", enable );
- fclose ( fp );
- return 0;
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/mpeg2vdin_en error\n" );
+ return -1;
+ }
+ fprintf ( fp, "%d", enable );
+ fclose ( fp );
+ return 0;
}
char *CTvin::VDIN_CheckVideoPath ( const char *videopath )
{
- strncpy ( gVideoPath, videopath, sizeof ( gVideoPath ) );
+ strncpy ( gVideoPath, videopath, sizeof ( gVideoPath ) );
- if ( strstr ( videopath, "d2d3 " ) != NULL ) {
- if ( gExistD2D3 == -1 ) {
- gExistD2D3 = IsFileExist ( "/sys/class/d2d3/d2d3" );
- }
+ if ( strstr ( videopath, "d2d3 " ) != NULL ) {
+ if ( gExistD2D3 == -1 ) {
+ gExistD2D3 = IsFileExist ( "/sys/class/d2d3/d2d3" );
+ }
- if ( gExistD2D3 == 0 ) {
- DelSub ( gVideoPath, "d2d3 " );
- }
- }
+ if ( gExistD2D3 == 0 ) {
+ DelSub ( gVideoPath, "d2d3 " );
+ }
+ }
- LOGW ( "%s, video path before check [%s]\n", "TV", videopath );
- LOGW ( "%s, video path after check [%s]\n", "TV", gVideoPath );
+ LOGW ( "%s, video path before check [%s]\n", "TV", videopath );
+ LOGW ( "%s, video path after check [%s]\n", "TV", gVideoPath );
- return gVideoPath;
+ return gVideoPath;
}
int CTvin::VDIN_AddPath ( const char *videopath )
{
- FILE *fp = NULL;
- int ret = -1;
- char *tmp_video_path = NULL;
+ FILE *fp = NULL;
+ int ret = -1;
+ char *tmp_video_path = NULL;
- tmp_video_path = VDIN_CheckVideoPath ( videopath );
+ tmp_video_path = VDIN_CheckVideoPath ( videopath );
- fp = fopen ( "/sys/class/vfm/map", "w" );
+ fp = fopen ( "/sys/class/vfm/map", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/class/vfm/map error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/class/vfm/map error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- ret = fprintf ( fp, "%s", tmp_video_path );
+ ret = fprintf ( fp, "%s", tmp_video_path );
- if ( ret < 0 ) {
- LOGW ( "Add VideoPath error(%s)!\n", strerror ( errno ) );
- }
+ if ( ret < 0 ) {
+ LOGW ( "Add VideoPath error(%s)!\n", strerror ( errno ) );
+ }
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return ret;
+ return ret;
}
int CTvin::VDIN_RmDefPath ( void )
{
- int fd = -1, ret;
- char str[] = "rm default";
+ int fd = -1, ret;
+ char str[] = "rm default";
- fd = open ( "/sys/class/vfm/map", O_RDWR );
+ fd = open ( "/sys/class/vfm/map", O_RDWR );
- if ( fd < 0 ) {
- LOGW ( "Open /sys/class/vfm/map error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fd < 0 ) {
+ LOGW ( "Open /sys/class/vfm/map error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- ret = write ( fd, str, sizeof ( str ) );
+ ret = write ( fd, str, sizeof ( str ) );
- if ( ret < 0 ) {
- LOGW ( "Rm default path error(%s)!\n", strerror ( errno ) );
- }
+ if ( ret < 0 ) {
+ LOGW ( "Rm default path error(%s)!\n", strerror ( errno ) );
+ }
- close ( fd );
- fd = -1;
+ close ( fd );
+ fd = -1;
- return ret;
+ return ret;
}
int CTvin::VDIN_RmTvPath ( void )
{
- int fd, ret;
- char str[] = "rm tvpath";
+ int fd, ret;
+ char str[] = "rm tvpath";
- fd = open ( "/sys/class/vfm/map", O_RDWR );
+ fd = open ( "/sys/class/vfm/map", O_RDWR );
- if ( fd < 0 ) {
- LOGW ( "Open /sys/class/vfm/map error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fd < 0 ) {
+ LOGW ( "Open /sys/class/vfm/map error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- ret = write ( fd, str, sizeof ( str ) );
+ ret = write ( fd, str, sizeof ( str ) );
- if ( ret <= 0 ) {
- LOGW ( "Rm tv path error(%s)!\n", strerror ( errno ) );
- }
+ if ( ret <= 0 ) {
+ LOGW ( "Rm tv path error(%s)!\n", strerror ( errno ) );
+ }
- close ( fd );
- fd = -1;
- return ret;
+ close ( fd );
+ fd = -1;
+ return ret;
}
int CTvin::VDIN_AddVideoPath ( int selPath )
{
- int ret = -1;
- char prop_value[PROPERTY_VALUE_MAX];
+ int ret = -1;
+ char prop_value[PROPERTY_VALUE_MAX];
- switch ( selPath ) {
- case TV_PATH_VDIN_AMVIDEO:
- ret = VDIN_AddPath ( "add tvpath vdin0 amvideo" );
- break;
+ switch ( selPath ) {
+ case TV_PATH_VDIN_AMVIDEO:
+ ret = VDIN_AddPath ( "add tvpath vdin0 amvideo" );
+ break;
- case TV_PATH_VDIN_DEINTERLACE_AMVIDEO:
- ret = VDIN_AddPath ( "add tvpath vdin0 deinterlace amvideo" );
- break;
+ case TV_PATH_VDIN_DEINTERLACE_AMVIDEO:
+ ret = VDIN_AddPath ( "add tvpath vdin0 deinterlace amvideo" );
+ break;
- case TV_PATH_VDIN_3D_AMVIDEO:
- ret = VDIN_AddPath ( "add tvpath vdin0 ppmgr amvideo" );
- break;
+ case TV_PATH_VDIN_3D_AMVIDEO:
+ ret = VDIN_AddPath ( "add tvpath vdin0 ppmgr amvideo" );
+ break;
- case TV_PATH_VDIN_NEW3D_AMVIDEO:
- ret = VDIN_AddPath ( "add tvpath vdin0 deinterlace ppmgr d2d3 amvideo" );
- break;
+ case TV_PATH_VDIN_NEW3D_AMVIDEO:
+ ret = VDIN_AddPath ( "add tvpath vdin0 deinterlace ppmgr d2d3 amvideo" );
+ break;
- case TV_PATH_VDIN_NEW3D_WITHOUTPPMGR_AMVIDEO:
- ret = VDIN_AddPath ( "add tvpath vdin0 deinterlace d2d3 amvideo" );
- break;
+ case TV_PATH_VDIN_NEW3D_WITHOUTPPMGR_AMVIDEO:
+ ret = VDIN_AddPath ( "add tvpath vdin0 deinterlace d2d3 amvideo" );
+ break;
- case TV_PATH_DECODER_3D_AMVIDEO:
- ret = VDIN_AddPath ( "add default decoder ppmgr deinterlace amvideo" );
- break;
+ case TV_PATH_DECODER_3D_AMVIDEO:
+ ret = VDIN_AddPath ( "add default decoder ppmgr deinterlace amvideo" );
+ break;
- case TV_PATH_DECODER_AMVIDEO:
- ret = VDIN_AddPath ( "add default decoder deinterlace amvideo" );
- break;
+ case TV_PATH_DECODER_AMVIDEO:
+ ret = VDIN_AddPath ( "add default decoder deinterlace amvideo" );
+ break;
- case TV_PATH_VDIN_FREESCALE_AMVIDEO:
- ret = VDIN_AddPath ( "add previewpath vdin0 freescale amvideo" );
- break;
+ case TV_PATH_VDIN_FREESCALE_AMVIDEO:
+ ret = VDIN_AddPath ( "add previewpath vdin0 freescale amvideo" );
+ break;
- case TV_PATH_DECODER_NEW3D_AMVIDEO:
- ret = VDIN_AddPath ( "add default decoder deinterlace ppmgr d2d3 amvideo" );
- break;
+ case TV_PATH_DECODER_NEW3D_AMVIDEO:
+ ret = VDIN_AddPath ( "add default decoder deinterlace ppmgr d2d3 amvideo" );
+ break;
- case TV_PATH_DECODER_NEW3D_WITHOUTPPMGR_AMVIDEO:
- ret = VDIN_AddPath ( "add default decoder deinterlace d2d3 amvideo" );
- break;
- }
+ case TV_PATH_DECODER_NEW3D_WITHOUTPPMGR_AMVIDEO:
+ ret = VDIN_AddPath ( "add default decoder deinterlace d2d3 amvideo" );
+ break;
+ }
- return ret;
+ return ret;
}
int CTvin::VDIN_RmPreviewPath ( void )
{
- int fd, ret;
- char str[] = "rm previewpath";
+ int fd, ret;
+ char str[] = "rm previewpath";
- fd = open ( "/sys/class/vfm/map", O_RDWR );
+ fd = open ( "/sys/class/vfm/map", O_RDWR );
- if ( fd < 0 ) {
- LOGW ( "Open /sys/class/vfm/map error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fd < 0 ) {
+ LOGW ( "Open /sys/class/vfm/map error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- ret = write ( fd, str, sizeof ( str ) );
+ ret = write ( fd, str, sizeof ( str ) );
- if ( ret < 0 ) {
- LOGW ( "Rm tv path error(%s)!\n", strerror ( errno ) );
- }
+ if ( ret < 0 ) {
+ LOGW ( "Rm tv path error(%s)!\n", strerror ( errno ) );
+ }
- close ( fd );
- fd = -1;
+ close ( fd );
+ fd = -1;
- return ret;
+ return ret;
}
int CTvin::VDIN_OpenModule()
{
- char file_name[64];
- sprintf ( file_name, "/dev/vdin%d", CC_SEL_VDIN_DEV );
- m_vdin_dev_fd = open ( file_name, O_RDWR );
+ char file_name[64];
+ sprintf ( file_name, "/dev/vdin%d", CC_SEL_VDIN_DEV );
+ m_vdin_dev_fd = open ( file_name, O_RDWR );
- if ( m_vdin_dev_fd < 0 ) {
- LOGW ( "Open %s error(%s)!\n", file_name, strerror ( errno ) );
- return -1;
- }
+ if ( m_vdin_dev_fd < 0 ) {
+ LOGW ( "Open %s error(%s)!\n", file_name, strerror ( errno ) );
+ return -1;
+ }
- memset ( &gTvinVDINParam, 0, sizeof ( gTvinVDINParam ) );
- memset ( &gTvinVDINSignalInfo, 0, sizeof ( gTvinVDINSignalInfo ) );
+ memset ( &gTvinVDINParam, 0, sizeof ( gTvinVDINParam ) );
+ memset ( &gTvinVDINSignalInfo, 0, sizeof ( gTvinVDINSignalInfo ) );
- LOGD ( "Open vdin module vdin_dev_fd = [%d]", m_vdin_dev_fd );
+ LOGD ( "Open vdin module vdin_dev_fd = [%d]", m_vdin_dev_fd );
- return m_vdin_dev_fd;
+ return m_vdin_dev_fd;
}
int CTvin::VDIN_GetVdinFd()
{
- return m_vdin_dev_fd;
+ return m_vdin_dev_fd;
}
int CTvin::VDIN_CloseModule()
{
- if ( m_vdin_dev_fd != -1 ) {
- close ( m_vdin_dev_fd );
- m_vdin_dev_fd = -1;
- }
+ if ( m_vdin_dev_fd != -1 ) {
+ close ( m_vdin_dev_fd );
+ m_vdin_dev_fd = -1;
+ }
- return 0;
+ return 0;
}
int CTvin::VDIN_DeviceIOCtl ( int request, ... )
{
- int tmp_ret = -1;
- va_list ap;
- void *arg;
+ int tmp_ret = -1;
+ va_list ap;
+ void *arg;
- if ( m_vdin_dev_fd >= 0 ) {
- va_start ( ap, request );
- arg = va_arg ( ap, void * );
- va_end ( ap );
+ if ( m_vdin_dev_fd >= 0 ) {
+ va_start ( ap, request );
+ arg = va_arg ( ap, void * );
+ va_end ( ap );
- tmp_ret = ioctl ( m_vdin_dev_fd, request, arg );
- return tmp_ret;
- }
+ tmp_ret = ioctl ( m_vdin_dev_fd, request, arg );
+ return tmp_ret;
+ }
- return -1;
+ return -1;
}
int CTvin::VDIN_OpenPort ( tvin_port_t port )
{
- int rt = -1;
- struct tvin_parm_s vdinParam;
- vdinParam.port = port;
- vdinParam.index = 0;
- rt = VDIN_DeviceIOCtl ( TVIN_IOC_OPEN, &vdinParam );
+ int rt = -1;
+ struct tvin_parm_s vdinParam;
+ vdinParam.port = port;
+ vdinParam.index = 0;
+ rt = VDIN_DeviceIOCtl ( TVIN_IOC_OPEN, &vdinParam );
- if ( rt < 0 ) {
- LOGW ( "Vdin open port, error(%s)!", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "Vdin open port, error(%s)!", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::VDIN_ClosePort()
{
- int rt = -1;
+ int rt = -1;
- rt = VDIN_DeviceIOCtl ( TVIN_IOC_CLOSE );
+ rt = VDIN_DeviceIOCtl ( TVIN_IOC_CLOSE );
- if ( rt < 0 ) {
- LOGW ( "Vdin close port, error(%s)!", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "Vdin close port, error(%s)!", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::VDIN_StartDec ( const struct tvin_parm_s *vdinParam )
{
- int rt = -1;
+ int rt = -1;
- if ( vdinParam == NULL ) {
- return -1;
- }
+ if ( vdinParam == NULL ) {
+ return -1;
+ }
- rt = VDIN_DeviceIOCtl ( TVIN_IOC_START_DEC, vdinParam );
+ rt = VDIN_DeviceIOCtl ( TVIN_IOC_START_DEC, vdinParam );
- LOGD ( "VDIN_StartDec:\n" );
- LOGD ( "index = [%d]\n", vdinParam->index );
- LOGD ( "port = [0x%x]\n", ( unsigned int ) vdinParam->port );
- LOGD ( "format = [0x%x]\n", ( unsigned int ) ( vdinParam->info.fmt ) );
+ LOGD ( "VDIN_StartDec:\n" );
+ LOGD ( "index = [%d]\n", vdinParam->index );
+ LOGD ( "port = [0x%x]\n", ( unsigned int ) vdinParam->port );
+ LOGD ( "format = [0x%x]\n", ( unsigned int ) ( vdinParam->info.fmt ) );
- if ( rt < 0 ) {
- LOGW ( "Vdin start decode, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "Vdin start decode, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::VDIN_StopDec()
{
- int rt = -1;
+ int rt = -1;
- rt = VDIN_DeviceIOCtl ( TVIN_IOC_STOP_DEC );
+ rt = VDIN_DeviceIOCtl ( TVIN_IOC_STOP_DEC );
- if ( rt < 0 ) {
- LOGW ( "Vdin stop decode, error(%s)", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "Vdin stop decode, error(%s)", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::VDIN_GetSignalInfo ( struct tvin_info_s *SignalInfo )
{
- int rt = -1;
+ int rt = -1;
- rt = VDIN_DeviceIOCtl ( TVIN_IOC_G_SIG_INFO, SignalInfo );
+ rt = VDIN_DeviceIOCtl ( TVIN_IOC_G_SIG_INFO, SignalInfo );
- if ( rt < 0 ) {
- LOGW ( "Vdin get signal info, error(%s), ret = %d.\n", strerror ( errno ), rt );
- system("reboot");
- }
+ if ( rt < 0 ) {
+ LOGW ( "Vdin get signal info, error(%s), ret = %d.\n", strerror ( errno ), rt );
+ system("reboot");
+ }
- return rt;
+ return rt;
}
int CTvin::VDIN_SetVdinParam ( const struct tvin_parm_s *vdinParam )
{
- int rt = -1, i = 0;
+ int rt = -1, i = 0;
- rt = VDIN_DeviceIOCtl ( TVIN_IOC_S_PARM, vdinParam );
+ rt = VDIN_DeviceIOCtl ( TVIN_IOC_S_PARM, vdinParam );
- if ( rt < 0 ) {
- LOGW ( "Vdin set signal param, error(%s)\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "Vdin set signal param, error(%s)\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::VDIN_GetVdinParam ( const struct tvin_parm_s *vdinParam )
{
- int rt = -1, i = 0;
+ int rt = -1, i = 0;
- rt = VDIN_DeviceIOCtl ( TVIN_IOC_G_PARM, vdinParam );
+ rt = VDIN_DeviceIOCtl ( TVIN_IOC_G_PARM, vdinParam );
- if ( rt < 0 ) {
- LOGW ( "Vdin get signal param, error(%s)\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "Vdin get signal param, error(%s)\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::VDIN_OnoffVScaler ( int isOn )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- if ( isOn == 1 ) {
- isOn = 1;
- } else {
- isOn = 0;
- }
+ if ( isOn == 1 ) {
+ isOn = 1;
+ } else {
+ isOn = 0;
+ }
- fp = fopen ( "/sys/class/video/vscaler", "w" );
+ fp = fopen ( "/sys/class/video/vscaler", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/class/video/vscaler error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/class/video/vscaler error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", ( int ) isOn );
+ fprintf ( fp, "%d", ( int ) isOn );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_GetDisplayVFreq (void)
{
- int fd = -1;
- char buf[32];
-
- fd = open("/sys/class/display/mode", O_RDWR);
- if (fd < 0) {
- LOGW("Open /sys/class/display/mode error(%s)!\n", strerror(errno));
- return -1;
- }
- memset(buf, 0, sizeof(buf));
- read(fd, buf, sizeof(buf));
- close(fd);
- if (strncmp("4k2k50hz420", buf, 11) == 0) {
- LOGD("VDIN_GetDisplayVFreq (%s)----1.\n", buf);
- return 50;
- } else if (strncmp("4k2k60hz420", buf, 11) == 0) {
- LOGD("VDIN_GetDisplayVFreq (%s)----2.\n", buf);
- return 60;
- } else if (strncmp("1080p", buf, 5) == 0) {
- LOGD("VDIN_GetDisplayVFreq (%s)----3.\n", buf);
- return 60;
- } else if (strncmp("4k2k30hz", buf, 8) == 0) {
- LOGD("VDIN_GetDisplayVFreq (%s)----4.\n", buf);
- return 30;
- }
- return 50;
+ int fd = -1;
+ char buf[32];
+
+ fd = open("/sys/class/display/mode", O_RDWR);
+ if (fd < 0) {
+ LOGW("Open /sys/class/display/mode error(%s)!\n", strerror(errno));
+ return -1;
+ }
+ memset(buf, 0, sizeof(buf));
+ read(fd, buf, sizeof(buf));
+ close(fd);
+ if(strncmp("4k2k50hz420", buf, 11) == 0) {
+ LOGD("VDIN_GetDisplayVFreq (%s)----1.\n", buf);
+ return 50;
+ } else if (strncmp("4k2k60hz420", buf, 11) == 0) {
+ LOGD("VDIN_GetDisplayVFreq (%s)----2.\n", buf);
+ return 60;
+ } else if (strncmp("1080p", buf, 5) == 0) {
+ LOGD("VDIN_GetDisplayVFreq (%s)----3.\n", buf);
+ return 60;
+ } else if (strncmp("4k2k30hz", buf, 8) == 0) {
+ LOGD("VDIN_GetDisplayVFreq (%s)----4.\n", buf);
+ return 30;
+ }
+ return 50;
}
int CTvin::VDIN_SetDisplayVFreq ( int freq, int display_resolution , bool isFbc)
{
- FILE *fp = NULL;
- const char *config_value = NULL;
- static int display_mode_type = -1;
-
- if (display_mode_type == -1) {
- config_value = config_get_str ( "TV", "tvin.display.mode.type", "null" );
- if (strcasecmp(config_value, "null") == 0 || strcasecmp(config_value, "hdmi_out") == 0) {
- display_mode_type = 0;
- } else if (strcasecmp(config_value, "lvds_out") == 0) {
- display_mode_type = 1;
- } else {
- display_mode_type = 0;
- }
- }
-
- fp = fopen ( "/sys/class/display/mode", "w" );
-
- if ( fp == NULL ) {
- LOGW ( "Open /sys/class/display/mode error(%s)!\n", strerror ( errno ) );
- return -1;
- }
-
- switch ( display_resolution ) {
- case VPP_DISPLAY_RESOLUTION_1366X768:
- if ( freq == 50 ) {
- fprintf ( fp, "%s", "768p50hz" );
- } else {
- fprintf ( fp, "%s", "768p60hz" );
- }
- break;
- case VPP_DISPLAY_RESOLUTION_3840X2160:
- if ( freq == 50 ) {
- if (isFbc) {
- fprintf ( fp, "%s", "4k2k50hz420" );
- } else {
- fprintf ( fp, "%s", "4k2k50hz" );
- }
- } else {
- if (isFbc) {
- fprintf ( fp, "%s", "4k2k60hz420" );
- } else {
- fprintf ( fp, "%s", "4k2k60hz" );
- }
- }
- break;
- case VPP_DISPLAY_RESOLUTION_1920X1080:
- default:
- if ( freq == 50 ) {
- fprintf ( fp, "%s", "1080p50hz" );
- } else {
- fprintf ( fp, "%s", "1080p" );
- }
- break;
- }
-
- fclose ( fp );
- fp = NULL;
-
- return 0;
+ FILE *fp = NULL;
+ const char *config_value = NULL;
+ static int display_mode_type = -1;
+
+ if (display_mode_type == -1) {
+ config_value = config_get_str ( "TV", "tvin.display.mode.type", "null" );
+ if (strcasecmp(config_value, "null") == 0 || strcasecmp(config_value, "hdmi_out") == 0) {
+ display_mode_type = 0;
+ } else if (strcasecmp(config_value, "lvds_out") == 0) {
+ display_mode_type = 1;
+ } else {
+ display_mode_type = 0;
+ }
+ }
+
+ fp = fopen ( "/sys/class/display/mode", "w" );
+
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/class/display/mode error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
+
+ switch ( display_resolution ) {
+ case VPP_DISPLAY_RESOLUTION_1366X768:
+ if ( freq == 50 ) {
+ fprintf ( fp, "%s", "768p50hz" );
+ } else {
+ fprintf ( fp, "%s", "768p60hz" );
+ }
+ break;
+ case VPP_DISPLAY_RESOLUTION_3840X2160:
+ if ( freq == 50 ) {
+ if(isFbc) {
+ fprintf ( fp, "%s", "4k2k50hz420" );
+ } else {
+ fprintf ( fp, "%s", "4k2k50hz" );
+ }
+ } else {
+ if(isFbc) {
+ fprintf ( fp, "%s", "4k2k60hz420" );
+ } else {
+ fprintf ( fp, "%s", "4k2k60hz" );
+ }
+ }
+ break;
+ case VPP_DISPLAY_RESOLUTION_1920X1080:
+ default:
+ if ( freq == 50 ) {
+ fprintf ( fp, "%s", "1080p50hz" );
+ } else {
+ fprintf ( fp, "%s", "1080p" );
+ }
+ break;
+ }
+
+ fclose ( fp );
+ fp = NULL;
+
+ return 0;
}
void CTvin::Tvin_SetDepthOf2Dto3D ( int value )
{
- //value = -16~16
- int tmp_value = DepthTable_2DTO3D[value + 16];
- LOGD ( "%s, value: %d", __FUNCTION__, value );
- VDIN_Set2D3DDepth ( value );
+ //value = -16~16
+ int tmp_value = DepthTable_2DTO3D[value + 16];
+ LOGD ( "%s, value: %d", __FUNCTION__, value );
+ VDIN_Set2D3DDepth ( value );
}
int CTvin::VDIN_Set2D3DDepth ( int count )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/d2d3/parameters/depth", "w" );
+ fp = fopen ( "/sys/module/d2d3/parameters/depth", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/d2d3/parameters/depth ERROR(%s)!!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/d2d3/parameters/depth ERROR(%s)!!\n", strerror ( errno ) );
+ return -1;
+ }
- if ( count >= -127 && count <= 127 ) {
+ if ( count >= -127 && count <= 127 ) {
#ifdef LOGD_3D_FUNCTION
- LOGD ( "set depth value (%d).\n", count );
+ LOGD ( "set depth value (%d).\n", count );
#endif
- } else {
- count = 8 * 12;
- LOGE ( "set depth value ERROR!! set default depth.\n" );
- }
+ } else {
+ count = 8 * 12;
+ LOGE ( "set depth value ERROR!! set default depth.\n" );
+ }
- fprintf ( fp, "%d", count );
- fclose ( fp );
- fp = NULL;
+ fprintf ( fp, "%d", count );
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_Set2Dto3D ( int on_off )
{
- struct tvin_parm_s VdinParam;
- VDIN_GetVdinParam ( &VdinParam );
- VdinParam.flag &= ( ~TVIN_PARM_FLAG_2D_TO_3D );
- VdinParam.flag |= ( on_off ) ? ( TVIN_PARM_FLAG_2D_TO_3D ) : ( 0 );
- return VDIN_SetVdinParam ( &VdinParam );
+ struct tvin_parm_s VdinParam;
+ VDIN_GetVdinParam ( &VdinParam );
+ VdinParam.flag &= ( ~TVIN_PARM_FLAG_2D_TO_3D );
+ VdinParam.flag |= ( on_off ) ? ( TVIN_PARM_FLAG_2D_TO_3D ) : ( 0 );
+ return VDIN_SetVdinParam ( &VdinParam );
}
int CTvin::VDIN_GetHistgram ( int *hisgram )
{
- int i = 0;
- struct tvin_parm_s vdinParam;
+ int i = 0;
+ struct tvin_parm_s vdinParam;
- if ( NULL == hisgram ) {
- return -1;
- }
+ if ( NULL == hisgram ) {
+ return -1;
+ }
- if ( 0 == VDIN_GetVdinParam ( &vdinParam ) ) {
- for ( i = 0; i < CC_HIST_GRAM_BUF_SIZE; i++ ) {
- hisgram[i] = ( int ) vdinParam.histgram[i];
- }
- } else {
- return -1;
- }
+ if ( 0 == VDIN_GetVdinParam ( &vdinParam ) ) {
+ for ( i = 0; i < CC_HIST_GRAM_BUF_SIZE; i++ ) {
+ hisgram[i] = ( int ) vdinParam.histgram[i];
+ }
+ } else {
+ return -1;
+ }
- return 0;
+ return 0;
}
int CTvin::VDIN_SetMVCViewMode ( int mode )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/amvdec_h264mvc/parameters/view_mode", "w" );
+ fp = fopen ( "/sys/module/amvdec_h264mvc/parameters/view_mode", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/amvdec_h264mvc/parameters/view_mode error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/amvdec_h264mvc/parameters/view_mode error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", ( int ) mode );
+ fprintf ( fp, "%d", ( int ) mode );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_GetMVCViewMode ( void )
{
- FILE *fp = NULL;
- int ret = 0;
- int mode = 0;
+ FILE *fp = NULL;
+ int ret = 0;
+ int mode = 0;
- fp = fopen ( "/sys/module/amvdec_h264mvc/parameters/view_mode", "w" );
+ fp = fopen ( "/sys/module/amvdec_h264mvc/parameters/view_mode", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/amvdec_h264mvc/parameters/view_mode ERROR(%s)!!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/amvdec_h264mvc/parameters/view_mode ERROR(%s)!!\n", strerror ( errno ) );
+ return -1;
+ }
- ret = fread ( &mode, 1, 1, fp );
- LOGD ( "fread /sys/module/amvdec_h264mvc/parameters/view_mode = [%d]", mode );
+ ret = fread ( &mode, 1, 1, fp );
+ LOGD ( "fread /sys/module/amvdec_h264mvc/parameters/view_mode = [%d]", mode );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return mode;
+ return mode;
}
int CTvin::VDIN_SetDIBuffMgrMode ( int mgr_mode )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "sys/module/di/parameters/buf_mgr_mode", "w" );
+ fp = fopen ( "sys/module/di/parameters/buf_mgr_mode", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/buf_mgr_mode error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/buf_mgr_mode error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", mgr_mode );
+ fprintf ( fp, "%d", mgr_mode );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_SetDICFG ( int cfg )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "sys/class/deinterlace/di0/config", "w" );
+ fp = fopen ( "sys/class/deinterlace/di0/config", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/class/deinterlace/di0/config error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/class/deinterlace/di0/config error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- if ( 0 == cfg ) {
- fprintf ( fp, "%s", "disable" );
- } else {
- fprintf ( fp, "%s", "enable" );
- }
+ if ( 0 == cfg ) {
+ fprintf ( fp, "%s", "disable" );
+ } else {
+ fprintf ( fp, "%s", "enable" );
+ }
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_SetDI3DDetc ( int enable )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/di/parameters/det3d_en", "w" );
+ fp = fopen ( "/sys/module/di/parameters/det3d_en", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/det3d_en error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/det3d_en error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", enable );
+ fprintf ( fp, "%d", enable );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_Get3DDetc ( void )
{
- int fd = -1;
- int ret = -1;
- char buf[10];
+ int fd = -1;
+ int ret = -1;
+ char buf[10];
- fd = open ( "/sys/module/di/parameters/det3d_en", O_RDWR );
+ fd = open ( "/sys/module/di/parameters/det3d_en", O_RDWR );
- if ( fd < 0 ) {
- LOGW ( "Open /sys/module/di/parameters/det3d_en error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fd < 0 ) {
+ LOGW ( "Open /sys/module/di/parameters/det3d_en error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- ret = read ( fd, buf, sizeof ( buf ) );
+ ret = read ( fd, buf, sizeof ( buf ) );
- close ( fd );
- fd = -1;
+ close ( fd );
+ fd = -1;
- if ( strcmp ( "enable", buf ) == 0 ) {
- return 1;
- } else {
- return 0;
- }
+ if ( strcmp ( "enable", buf ) == 0 ) {
+ return 1;
+ } else {
+ return 0;
+ }
}
int CTvin::VDIN_GetVscalerStatus ( void )
{
- int fd = -1;
- int ret = -1;
- char buf[7];
+ int fd = -1;
+ int ret = -1;
+ char buf[7];
- fd = open ( "/sys/class/video/vscaler", O_RDWR );
+ fd = open ( "/sys/class/video/vscaler", O_RDWR );
- if ( fd < 0 ) {
- LOGW ( "Open /sys/class/video/vscaler error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fd < 0 ) {
+ LOGW ( "Open /sys/class/video/vscaler error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- ret = read ( fd, buf, sizeof ( buf ) );
+ ret = read ( fd, buf, sizeof ( buf ) );
- close ( fd );
- fd = -1;
+ close ( fd );
+ fd = -1;
- sscanf ( buf, "%d", &ret );
+ sscanf ( buf, "%d", &ret );
- ret = ( ( ret & 0x40000 ) == 0 ) ? 1 : 0;
+ ret = ( ( ret & 0x40000 ) == 0 ) ? 1 : 0;
- if ( ret == 1 ) {
- sleep ( 1 );
- }
+ if ( ret == 1 ) {
+ sleep ( 1 );
+ }
- return ret;
+ return ret;
}
int CTvin::VDIN_TurnOnBlackBarDetect ( int isEnable )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/tvin_vdin/parameters/black_bar_enable", "w" );
+ fp = fopen ( "/sys/module/tvin_vdin/parameters/black_bar_enable", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/tvin_vdin/parameters/black_bar_enable error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/tvin_vdin/parameters/black_bar_enable error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", isEnable );
+ fprintf ( fp, "%d", isEnable );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_LoadHdcpKey ( unsigned char *hdcpkey_buff )
{
- unsigned char testHdcp[368] = { 0x53, 0x4B, 0x59, 0x01, 0x00, 0x10, 0x0D, 0x15, 0x3A, 0x8E, 0x99, 0xEE, 0x2A, 0x55, 0x58, 0xEE, 0xED, 0x4B, 0xBE, 0x00, 0x74, 0xA9, 0x00, 0x10, 0x0A, 0x21, 0xE3,
- 0x30, 0x66, 0x34, 0xCE, 0x9C, 0xC7, 0x8B, 0x51, 0x27, 0xF9, 0x0B, 0xAD, 0x09, 0x5F, 0x4D, 0xC2, 0xCA, 0xA2, 0x13, 0x06, 0x18, 0x8D, 0x34, 0x82, 0x46, 0x2D, 0xC9, 0x4B, 0xB0, 0x1C, 0xDE,
- 0x3D, 0x49, 0x39, 0x58, 0xEF, 0x2B, 0x68, 0x39, 0x71, 0xC9, 0x4D, 0x25, 0xE9, 0x75, 0x4D, 0xAC, 0x62, 0xF5, 0xF5, 0x87, 0xA0, 0xB2, 0x4A, 0x60, 0xD3, 0xF1, 0x09, 0x3A, 0xB2, 0x3E, 0x19,
- 0x4F, 0x3B, 0x1B, 0x2F, 0x85, 0x14, 0x28, 0x44, 0xFC, 0x69, 0x6F, 0x50, 0x42, 0x81, 0xBF, 0x7C, 0x2B, 0x3A, 0x17, 0x2C, 0x15, 0xE4, 0x93, 0x77, 0x74, 0xE8, 0x1F, 0x1C, 0x38, 0x54, 0x49,
- 0x10, 0x64, 0x5B, 0x7D, 0x90, 0x3D, 0xA0, 0xE1, 0x8B, 0x67, 0x5C, 0x19, 0xE6, 0xCA, 0x9D, 0xE9, 0x68, 0x5A, 0xB5, 0x62, 0xDF, 0xA1, 0x28, 0xBC, 0x68, 0x82, 0x9A, 0x22, 0xC4, 0xDC, 0x48,
- 0x85, 0x0F, 0xF1, 0x3E, 0x05, 0xDD, 0x1B, 0x2D, 0xF5, 0x49, 0x3A, 0x15, 0x29, 0xE7, 0xB6, 0x0B, 0x2A, 0x40, 0xE3, 0xB0, 0x89, 0xD5, 0x75, 0x84, 0x2E, 0x76, 0xE7, 0xBC, 0x63, 0x67, 0xE3,
- 0x57, 0x67, 0x86, 0x81, 0xF4, 0xD7, 0xEA, 0x4D, 0x89, 0x8E, 0x37, 0x95, 0x59, 0x1C, 0x8A, 0xCD, 0x79, 0xF8, 0x4F, 0x82, 0xF2, 0x6C, 0x7E, 0x7F, 0x79, 0x8A, 0x6B, 0x90, 0xC0, 0xAF, 0x4C,
- 0x8D, 0x43, 0x47, 0x1F, 0x9A, 0xF1, 0xBB, 0x88, 0x64, 0x49, 0x14, 0x50, 0xD1, 0xC3, 0xDF, 0xA6, 0x87, 0xA0, 0x15, 0x98, 0x51, 0x81, 0xF5, 0x97, 0x55, 0x10, 0x4A, 0x99, 0x30, 0x54, 0xA4,
- 0xFC, 0xDA, 0x0E, 0xAC, 0x6A, 0xFA, 0x90, 0xEE, 0x12, 0x70, 0x69, 0x74, 0x63, 0x46, 0x63, 0xFB, 0xE6, 0x1F, 0x72, 0xEC, 0x43, 0x5D, 0x50, 0xFF, 0x03, 0x4F, 0x05, 0x33, 0x88, 0x36, 0x93,
- 0xE4, 0x72, 0xD5, 0xCC, 0x34, 0x52, 0x96, 0x15, 0xCE, 0xD0, 0x32, 0x52, 0x41, 0x4F, 0xBC, 0x2D, 0xDF, 0xC5, 0xD6, 0x7F, 0xD5, 0x74, 0xCE, 0x51, 0xDC, 0x10, 0x5E, 0xF7, 0xAA, 0x4A, 0x2D,
- 0x20, 0x9A, 0x17, 0xDD, 0x30, 0x89, 0x71, 0x82, 0x36, 0x50, 0x09, 0x1F, 0x7C, 0xF3, 0x12, 0xE9, 0x43, 0x10, 0x5F, 0x51, 0xBF, 0xB8, 0x45, 0xA8, 0x5A, 0x8D, 0x3F, 0x77, 0xE5, 0x96, 0x73,
- 0x68, 0xAB, 0x73, 0xE5, 0x4C, 0xFB, 0xE5, 0x98, 0xB9, 0xAE, 0x74, 0xEB, 0x51, 0xDB, 0x91, 0x07, 0x7B, 0x66, 0x02, 0x9B, 0x79, 0x03, 0xC5, 0x34, 0x1C, 0x58, 0x13, 0x31, 0xD2, 0x4A, 0xEC
- };
- int ret = -1;
- int fd = -1;
+ unsigned char testHdcp[368] = { 0x53, 0x4B, 0x59, 0x01, 0x00, 0x10, 0x0D, 0x15, 0x3A, 0x8E, 0x99, 0xEE, 0x2A, 0x55, 0x58, 0xEE, 0xED, 0x4B, 0xBE, 0x00, 0x74, 0xA9, 0x00, 0x10, 0x0A, 0x21, 0xE3,
+ 0x30, 0x66, 0x34, 0xCE, 0x9C, 0xC7, 0x8B, 0x51, 0x27, 0xF9, 0x0B, 0xAD, 0x09, 0x5F, 0x4D, 0xC2, 0xCA, 0xA2, 0x13, 0x06, 0x18, 0x8D, 0x34, 0x82, 0x46, 0x2D, 0xC9, 0x4B, 0xB0, 0x1C, 0xDE,
+ 0x3D, 0x49, 0x39, 0x58, 0xEF, 0x2B, 0x68, 0x39, 0x71, 0xC9, 0x4D, 0x25, 0xE9, 0x75, 0x4D, 0xAC, 0x62, 0xF5, 0xF5, 0x87, 0xA0, 0xB2, 0x4A, 0x60, 0xD3, 0xF1, 0x09, 0x3A, 0xB2, 0x3E, 0x19,
+ 0x4F, 0x3B, 0x1B, 0x2F, 0x85, 0x14, 0x28, 0x44, 0xFC, 0x69, 0x6F, 0x50, 0x42, 0x81, 0xBF, 0x7C, 0x2B, 0x3A, 0x17, 0x2C, 0x15, 0xE4, 0x93, 0x77, 0x74, 0xE8, 0x1F, 0x1C, 0x38, 0x54, 0x49,
+ 0x10, 0x64, 0x5B, 0x7D, 0x90, 0x3D, 0xA0, 0xE1, 0x8B, 0x67, 0x5C, 0x19, 0xE6, 0xCA, 0x9D, 0xE9, 0x68, 0x5A, 0xB5, 0x62, 0xDF, 0xA1, 0x28, 0xBC, 0x68, 0x82, 0x9A, 0x22, 0xC4, 0xDC, 0x48,
+ 0x85, 0x0F, 0xF1, 0x3E, 0x05, 0xDD, 0x1B, 0x2D, 0xF5, 0x49, 0x3A, 0x15, 0x29, 0xE7, 0xB6, 0x0B, 0x2A, 0x40, 0xE3, 0xB0, 0x89, 0xD5, 0x75, 0x84, 0x2E, 0x76, 0xE7, 0xBC, 0x63, 0x67, 0xE3,
+ 0x57, 0x67, 0x86, 0x81, 0xF4, 0xD7, 0xEA, 0x4D, 0x89, 0x8E, 0x37, 0x95, 0x59, 0x1C, 0x8A, 0xCD, 0x79, 0xF8, 0x4F, 0x82, 0xF2, 0x6C, 0x7E, 0x7F, 0x79, 0x8A, 0x6B, 0x90, 0xC0, 0xAF, 0x4C,
+ 0x8D, 0x43, 0x47, 0x1F, 0x9A, 0xF1, 0xBB, 0x88, 0x64, 0x49, 0x14, 0x50, 0xD1, 0xC3, 0xDF, 0xA6, 0x87, 0xA0, 0x15, 0x98, 0x51, 0x81, 0xF5, 0x97, 0x55, 0x10, 0x4A, 0x99, 0x30, 0x54, 0xA4,
+ 0xFC, 0xDA, 0x0E, 0xAC, 0x6A, 0xFA, 0x90, 0xEE, 0x12, 0x70, 0x69, 0x74, 0x63, 0x46, 0x63, 0xFB, 0xE6, 0x1F, 0x72, 0xEC, 0x43, 0x5D, 0x50, 0xFF, 0x03, 0x4F, 0x05, 0x33, 0x88, 0x36, 0x93,
+ 0xE4, 0x72, 0xD5, 0xCC, 0x34, 0x52, 0x96, 0x15, 0xCE, 0xD0, 0x32, 0x52, 0x41, 0x4F, 0xBC, 0x2D, 0xDF, 0xC5, 0xD6, 0x7F, 0xD5, 0x74, 0xCE, 0x51, 0xDC, 0x10, 0x5E, 0xF7, 0xAA, 0x4A, 0x2D,
+ 0x20, 0x9A, 0x17, 0xDD, 0x30, 0x89, 0x71, 0x82, 0x36, 0x50, 0x09, 0x1F, 0x7C, 0xF3, 0x12, 0xE9, 0x43, 0x10, 0x5F, 0x51, 0xBF, 0xB8, 0x45, 0xA8, 0x5A, 0x8D, 0x3F, 0x77, 0xE5, 0x96, 0x73,
+ 0x68, 0xAB, 0x73, 0xE5, 0x4C, 0xFB, 0xE5, 0x98, 0xB9, 0xAE, 0x74, 0xEB, 0x51, 0xDB, 0x91, 0x07, 0x7B, 0x66, 0x02, 0x9B, 0x79, 0x03, 0xC5, 0x34, 0x1C, 0x58, 0x13, 0x31, 0xD2, 0x4A, 0xEC
+ };
+ int ret = -1;
+ int fd = -1;
- fd = open ( "/sys/class/hdmirx/hdmirx0/edid", O_RDWR );
+ fd = open ( "/sys/class/hdmirx/hdmirx0/edid", O_RDWR );
- if ( fd < 0 ) {
- LOGW ( "Open hdmi hdcp key error(%s)!!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fd < 0 ) {
+ LOGW ( "Open hdmi hdcp key error(%s)!!\n", strerror ( errno ) );
+ return -1;
+ }
- ret = write ( fd, testHdcp, 368 );
+ ret = write ( fd, testHdcp, 368 );
- if ( ret < 0 ) {
- LOGD ( "Write hdmi hdcp key error(%s)!!\n", strerror ( errno ) );
- }
+ if ( ret < 0 ) {
+ LOGD ( "Write hdmi hdcp key error(%s)!!\n", strerror ( errno ) );
+ }
- close ( fd );
- fd = -1;
+ close ( fd );
+ fd = -1;
- return ret;
+ return ret;
}
int CTvin::VDIN_KeepLastFrame ( int enable )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- return 0;
+ return 0;
- fp = fopen ( "/sys/module/amvideo/parameters/keep_old_frame", "w" );
+ fp = fopen ( "/sys/module/amvideo/parameters/keep_old_frame", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/amvideo/parameters/keep_old_frame error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/amvideo/parameters/keep_old_frame error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", enable );
+ fprintf ( fp, "%d", enable );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_SetVideoFreeze ( int enable )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/class/vdin/vdin0/attr", "w" );
+ fp = fopen ( "/sys/class/vdin/vdin0/attr", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/class/vdin/vdin0/attr error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/class/vdin/vdin0/attr error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- if ( enable == 1 ) {
- fprintf ( fp, "freeze" );
- } else {
- fprintf ( fp, "unfreeze" );
- }
+ if ( enable == 1 ) {
+ fprintf ( fp, "freeze" );
+ } else {
+ fprintf ( fp, "unfreeze" );
+ }
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_SetDIBypasshd ( int enable )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/di/parameters/bypass_hd", "w" );
+ fp = fopen ( "/sys/module/di/parameters/bypass_hd", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/bypass_hd error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/bypass_hd error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", enable );
+ fprintf ( fp, "%d", enable );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_SetDIBypassAll ( int enable )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/di/parameters/bypass_all", "w" );
+ fp = fopen ( "/sys/module/di/parameters/bypass_all", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/bypass_all error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/bypass_all error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", enable );
- fclose ( fp );
- fp = NULL;
- return 0;
+ fprintf ( fp, "%d", enable );
+ fclose ( fp );
+ fp = NULL;
+ return 0;
}
int CTvin::VDIN_SetDIBypass_Get_Buf_Threshold ( int enable )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/di/parameters/bypass_get_buf_threshold", "w" );
+ fp = fopen ( "/sys/module/di/parameters/bypass_get_buf_threshold", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/bypass_get_buf_threshold error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/bypass_get_buf_threshold error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", enable );
+ fprintf ( fp, "%d", enable );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_SetDIBypassProg ( int enable )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/di/parameters/bypass_prog", "w" );
+ fp = fopen ( "/sys/module/di/parameters/bypass_prog", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/bypass_prog error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/bypass_prog error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", enable );
+ fprintf ( fp, "%d", enable );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_SetDIBypassDynamic ( int flag )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/di/parameters/bypass_dynamic", "w" );
+ fp = fopen ( "/sys/module/di/parameters/bypass_dynamic", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/bypass_dynamic error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/bypass_dynamic error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", flag );
+ fprintf ( fp, "%d", flag );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_SetDIDet3DMode ( int value )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/di/parameters/det3d_mode", "w" );
+ fp = fopen ( "/sys/module/di/parameters/det3d_mode", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/det3d_mode error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/det3d_mode error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", value );
+ fprintf ( fp, "%d", value );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_SetDIBypass3D ( int enable )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/di/parameters/bypass_3d", "w" );
+ fp = fopen ( "/sys/module/di/parameters/bypass_3d", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/bypass_3d error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/bypass_3d error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", enable );
+ fprintf ( fp, "%d", enable );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_SetDIBypassPost ( int enable )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/di/parameters/bypass_post", "w" );
+ fp = fopen ( "/sys/module/di/parameters/bypass_post", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/bypass_post error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/bypass_post error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", enable );
+ fprintf ( fp, "%d", enable );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::set3D_FL_Frame(int value)
{
- FILE *fp = NULL;
- fp = fopen ( "/sys/module/amvideo/parameters/pause_one_3d_fl_frame", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/amvideo/parameters/pause_one_3d_fl_frame error(%s)!\n", strerror ( errno ) );
- return -1;
- }
- fprintf ( fp, "%d", value );
- fclose ( fp );
- fp = NULL;
- return 0;
+ FILE *fp = NULL;
+ fp = fopen ( "/sys/module/amvideo/parameters/pause_one_3d_fl_frame", "w" );
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/amvideo/parameters/pause_one_3d_fl_frame error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
+ fprintf ( fp, "%d", value );
+ fclose ( fp );
+ fp = NULL;
+ return 0;
}
int CTvin::setLatchFlag(int value)
{
- FILE *fp = NULL;
- fp = fopen ( "/sys/module/am_vecm/parameters/vecm_latch_flag", "w" );
- if ( fp == NULL ) {
- LOGW ( "/sys/module/am_vecm/parameters/vecm_latch_flag error(%s)!\n", strerror ( errno ) );
- return -1;
- }
- fprintf ( fp, "%d", value );
- fclose ( fp );
- fp = NULL;
- return 0;
+ FILE *fp = NULL;
+ fp = fopen ( "/sys/module/am_vecm/parameters/vecm_latch_flag", "w" );
+ if ( fp == NULL ) {
+ LOGW ( "/sys/module/am_vecm/parameters/vecm_latch_flag error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
+ fprintf ( fp, "%d", value );
+ fclose ( fp );
+ fp = NULL;
+ return 0;
}
int CTvin::VDIN_SetDIProg_Proc_Config ( int value )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/di/parameters/prog_proc_config", "w" );
+ fp = fopen ( "/sys/module/di/parameters/prog_proc_config", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/prog_proc_config error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/prog_proc_config error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", value );
+ fprintf ( fp, "%d", value );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
#if(1)
int CTvin::VDIN_SetDISip_Top_Bot ( int value )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/di/parameters/skip_top_bot", "w" );
+ fp = fopen ( "/sys/module/di/parameters/skip_top_bot", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/skip_top_bot error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/di/parameters/skip_top_bot error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", value );
+ fprintf ( fp, "%d", value );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
#endif
int CTvin::VDIN_SetVdinFlag ( int flag )
{
- FILE *fp = NULL;
- int freq = 1200000;
+ FILE *fp = NULL;
+ int freq = 1200000;
- fp = fopen ( "/sys/class/vdin/memp", "w" );
+ fp = fopen ( "/sys/class/vdin/memp", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/class/vdin/memp error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/class/vdin/memp error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", flag );
- fclose ( fp );
- fp = NULL;
+ fprintf ( fp, "%d", flag );
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CTvin::VDIN_EnableRDMA ( int enable )
{
- FILE *fp = NULL;
- fp = fopen ( "/sys/module/rdma/parameters/enable", "w" );
+ FILE *fp = NULL;
+ fp = fopen ( "/sys/module/rdma/parameters/enable", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/module/rdma/parameters/enable error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/module/rdma/parameters/enable error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", enable );
- fclose ( fp );
- fp = NULL;
- return 0;
+ fprintf ( fp, "%d", enable );
+ fclose ( fp );
+ fp = NULL;
+ return 0;
}
// AFE
int CTvin::AFE_OpenModule ( void )
{
- if ( afe_dev_fd < 0 ) {
- afe_dev_fd = open ( AFE_DEV_PATH, O_RDWR );
+ if ( afe_dev_fd < 0 ) {
+ afe_dev_fd = open ( AFE_DEV_PATH, O_RDWR );
- if ( afe_dev_fd < 0 ) {
- LOGW ( "Open tvafe module, error(%s).\n", strerror ( errno ) );
- return -1;
- }
- }
+ if ( afe_dev_fd < 0 ) {
+ LOGW ( "Open tvafe module, error(%s).\n", strerror ( errno ) );
+ return -1;
+ }
+ }
- return afe_dev_fd;
+ return afe_dev_fd;
}
void CTvin::AFE_CloseModule ( void )
{
- if ( afe_dev_fd >= 0 ) {
- close ( afe_dev_fd );
- afe_dev_fd = -1;
- }
+ if ( afe_dev_fd >= 0 ) {
+ close ( afe_dev_fd );
+ afe_dev_fd = -1;
+ }
- return;
+ return;
}
int CTvin::AFE_DeviceIOCtl ( int request, ... )
{
- int tmp_ret = -1;
- va_list ap;
- void *arg;
+ int tmp_ret = -1;
+ va_list ap;
+ void *arg;
- if ( afe_dev_fd >= 0 ) {
- va_start ( ap, request );
- arg = va_arg ( ap, void * );
- va_end ( ap );
+ if ( afe_dev_fd >= 0 ) {
+ va_start ( ap, request );
+ arg = va_arg ( ap, void * );
+ va_end ( ap );
- tmp_ret = ioctl ( afe_dev_fd, request, arg );
+ tmp_ret = ioctl ( afe_dev_fd, request, arg );
- return tmp_ret;
- }
+ return tmp_ret;
+ }
- return -1;
+ return -1;
}
int CTvin::AFE_GetDeviceFileHandle()
{
- return afe_dev_fd;
+ return afe_dev_fd;
}
int CTvin::AFE_SetVGAEdid ( const unsigned char *ediddata )
{
- int rt = -1;
- struct tvafe_vga_edid_s vgaEdid;
+ int rt = -1;
+ struct tvafe_vga_edid_s vgaEdid;
#ifdef NO_IC_TEST
- for ( int i = 0; i < 256; i++ ) {
- test_edid[i] = ediddata[i];
- }
+ for ( int i = 0; i < 256; i++ ) {
+ test_edid[i] = ediddata[i];
+ }
#endif
- for ( int i = 0; i < 256; i++ ) {
- vgaEdid.value[i] = ediddata[i];
- }
+ for ( int i = 0; i < 256; i++ ) {
+ vgaEdid.value[i] = ediddata[i];
+ }
- rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_VGA_EDID, &vgaEdid );
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_VGA_EDID, &vgaEdid );
- if ( rt < 0 ) {
- LOGW ( "AFE_SetVGAEdid, error(%s).!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "AFE_SetVGAEdid, error(%s).!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::AFE_GetVGAEdid ( unsigned char *ediddata )
{
- int rt = -1;
- struct tvafe_vga_edid_s vgaEdid;
+ int rt = -1;
+ struct tvafe_vga_edid_s vgaEdid;
#ifdef NO_IC_TEST
- for ( int i = 0; i < 256; i++ ) {
- ediddata[i] = test_edid[i];
- }
+ for ( int i = 0; i < 256; i++ ) {
+ ediddata[i] = test_edid[i];
+ }
- LOGD ( "AFE_GetVGAEdid:\n" );
- LOGD ( "===================================================\n" );
+ LOGD ( "AFE_GetVGAEdid:\n" );
+ LOGD ( "===================================================\n" );
- for ( int i = 0; i < 256; i++ ) {
- LOGD ( "vag edid[%d] = [0x%x].\n", i, ediddata[i] );
- }
+ for ( int i = 0; i < 256; i++ ) {
+ LOGD ( "vag edid[%d] = [0x%x].\n", i, ediddata[i] );
+ }
- LOGD ( "===================================================\n" );
+ LOGD ( "===================================================\n" );
#endif
- rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_VGA_EDID, &vgaEdid );
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_VGA_EDID, &vgaEdid );
- for ( int i = 0; i < 256; i++ ) {
- ediddata[i] = vgaEdid.value[i];
- }
+ for ( int i = 0; i < 256; i++ ) {
+ ediddata[i] = vgaEdid.value[i];
+ }
- if ( rt < 0 ) {
- LOGW ( "AFE_GetVGAEdid, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "AFE_GetVGAEdid, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::AFE_SetADCTimingAdjust ( const struct tvafe_vga_parm_s *timingadj )
{
- int rt = -1;
+ int rt = -1;
- if ( timingadj == NULL ) {
- return rt;
- }
+ if ( timingadj == NULL ) {
+ return rt;
+ }
- rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_VGA_PARM, timingadj );
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_VGA_PARM, timingadj );
- if ( rt < 0 ) {
- LOGW ( "AFE_SetADCTimingAdjust, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "AFE_SetADCTimingAdjust, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::AFE_GetADCCurrentTimingAdjust ( struct tvafe_vga_parm_s *timingadj )
{
- int rt = -1;
+ int rt = -1;
- if ( timingadj == NULL ) {
- return rt;
- }
+ if ( timingadj == NULL ) {
+ return rt;
+ }
- rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_VGA_PARM, timingadj );
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_VGA_PARM, timingadj );
- if ( rt < 0 ) {
- LOGW ( "AFE_GetADCCurrentTimingAdjust, error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( rt < 0 ) {
+ LOGW ( "AFE_GetADCCurrentTimingAdjust, error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- return 0;
+ return 0;
}
int CTvin::AFE_VGAAutoAdjust ( struct tvafe_vga_parm_s *timingadj )
{
- enum tvafe_cmd_status_e CMDStatus = TVAFE_CMD_STATUS_PROCESSING;
- struct tvin_parm_s tvin_para;
- int rt = -1, i = 0;
+ enum tvafe_cmd_status_e CMDStatus = TVAFE_CMD_STATUS_PROCESSING;
+ struct tvin_parm_s tvin_para;
+ int rt = -1, i = 0;
- if ( timingadj == NULL ) {
- return -1;
- }
+ if ( timingadj == NULL ) {
+ return -1;
+ }
- for ( i = 0, CMDStatus == TVAFE_CMD_STATUS_PROCESSING; i < 50; i++ ) {
- rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_CMD_STATUS, &CMDStatus );
+ for ( i = 0, CMDStatus == TVAFE_CMD_STATUS_PROCESSING; i < 50; i++ ) {
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_CMD_STATUS, &CMDStatus );
- if ( rt < 0 ) {
- LOGD ( "get afe CMD status, error(%s), fd(%d), return(%d).\n", strerror ( errno ), AFE_GetDeviceFileHandle(), rt );
- }
+ if ( rt < 0 ) {
+ LOGD ( "get afe CMD status, error(%s), fd(%d), return(%d).\n", strerror ( errno ), AFE_GetDeviceFileHandle(), rt );
+ }
- if ( ( CMDStatus == TVAFE_CMD_STATUS_IDLE ) || ( CMDStatus == TVAFE_CMD_STATUS_SUCCESSFUL ) ) {
- break;
- }
+ if ( ( CMDStatus == TVAFE_CMD_STATUS_IDLE ) || ( CMDStatus == TVAFE_CMD_STATUS_SUCCESSFUL ) ) {
+ break;
+ }
- usleep ( 10 * 1000 );
- }
+ usleep ( 10 * 1000 );
+ }
- if ( ( CMDStatus == TVAFE_CMD_STATUS_PROCESSING ) || ( CMDStatus == TVAFE_CMD_STATUS_FAILED ) ) {
- return -1;
- }
+ if ( ( CMDStatus == TVAFE_CMD_STATUS_PROCESSING ) || ( CMDStatus == TVAFE_CMD_STATUS_FAILED ) ) {
+ return -1;
+ }
- for ( i = 0; i < 100; i++ ) {
- rt = VDIN_DeviceIOCtl ( TVIN_IOC_G_PARM, &tvin_para );
+ for ( i = 0; i < 100; i++ ) {
+ rt = VDIN_DeviceIOCtl ( TVIN_IOC_G_PARM, &tvin_para );
- if ( tvin_para.info.status == TVIN_SIG_STATUS_STABLE ) {
- break;
- }
+ if ( tvin_para.info.status == TVIN_SIG_STATUS_STABLE ) {
+ break;
+ }
- usleep ( 10 * 1000 );
- }
+ usleep ( 10 * 1000 );
+ }
- rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_VGA_AUTO );
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_VGA_AUTO );
- if ( rt < 0 ) {
- timingadj->clk_step = 0;
- timingadj->phase = 0;
- timingadj->hpos_step = 0;
- timingadj->vpos_step = 0;
- AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_VGA_PARM, timingadj );
- return rt;
- } else {
- ;//AFE_DeviceIOCtl(TVIN_IOC_G_AFE_VGA_PARM, timingadj);
- }
+ if ( rt < 0 ) {
+ timingadj->clk_step = 0;
+ timingadj->phase = 0;
+ timingadj->hpos_step = 0;
+ timingadj->vpos_step = 0;
+ AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_VGA_PARM, timingadj );
+ return rt;
+ } else {
+ ;//AFE_DeviceIOCtl(TVIN_IOC_G_AFE_VGA_PARM, timingadj);
+ }
- for ( i = 0; i < 10; i++ ) {
- sleep ( 1 );
+ for ( i = 0; i < 10; i++ ) {
+ sleep ( 1 );
- rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_CMD_STATUS, &CMDStatus );
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_CMD_STATUS, &CMDStatus );
- if ( rt < 0 ) {
- return rt;
- } else {
- if ( CMDStatus == TVAFE_CMD_STATUS_SUCCESSFUL ) {
- usleep ( 100 * 1000 );
- AFE_GetADCCurrentTimingAdjust ( timingadj );
- LOGD ( "===================================================\n" );
- LOGW ( "AFE_VGAAutoAdjust, successfull!\n" );
- return 0;
- }
- }
- }
+ if ( rt < 0 ) {
+ return rt;
+ } else {
+ if ( CMDStatus == TVAFE_CMD_STATUS_SUCCESSFUL ) {
+ usleep ( 100 * 1000 );
+ AFE_GetADCCurrentTimingAdjust ( timingadj );
+ LOGD ( "===================================================\n" );
+ LOGW ( "AFE_VGAAutoAdjust, successfull!\n" );
+ return 0;
+ }
+ }
+ }
- return -1;
+ return -1;
}
int CTvin::AFE_SetVGAAutoAjust ( void )
{
- int rt = -1;
- tvafe_vga_parm_t timingadj;
- tvafe_cmd_status_t Status;
- rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_CMD_STATUS, &Status );
+ int rt = -1;
+ tvafe_vga_parm_t timingadj;
+ tvafe_cmd_status_t Status;
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_CMD_STATUS, &Status );
- if ( ( Status == TVAFE_CMD_STATUS_IDLE ) || ( Status == TVAFE_CMD_STATUS_SUCCESSFUL ) ) {
- ;
- } else {
- LOGW ( "AFE_SetVGAAutoAjust, TVIN_IOC_G_AFE_CMD_STATUS failed!\n" );
- return -1;
- }
+ if ( ( Status == TVAFE_CMD_STATUS_IDLE ) || ( Status == TVAFE_CMD_STATUS_SUCCESSFUL ) ) {
+ ;
+ } else {
+ LOGW ( "AFE_SetVGAAutoAjust, TVIN_IOC_G_AFE_CMD_STATUS failed!\n" );
+ return -1;
+ }
- rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_VGA_AUTO );
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_VGA_AUTO );
- if ( rt < 0 ) {
- timingadj.clk_step = 0;
- timingadj.phase = 0;
- timingadj.hpos_step = 0;
- timingadj.vpos_step = 0;
- AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_VGA_PARM, &timingadj );
- return rt;
- }
+ if ( rt < 0 ) {
+ timingadj.clk_step = 0;
+ timingadj.phase = 0;
+ timingadj.hpos_step = 0;
+ timingadj.vpos_step = 0;
+ AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_VGA_PARM, &timingadj );
+ return rt;
+ }
- return 0;
+ return 0;
}
int CTvin::AFE_GetVGAAutoAdjustCMDStatus ( tvafe_cmd_status_t *Status )
{
- int rt = -1;
+ int rt = -1;
- if ( Status == NULL ) {
- return rt;
- }
+ if ( Status == NULL ) {
+ return rt;
+ }
- rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_CMD_STATUS, Status );
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_CMD_STATUS, Status );
- if ( rt < 0 ) {
- LOGW ( "AFE_GetVGAAutoAdjustStatus, get status, error(%s) fd(%d) return(%d)\n", strerror ( errno ), AFE_GetDeviceFileHandle(), rt );
- return rt;
- }
+ if ( rt < 0 ) {
+ LOGW ( "AFE_GetVGAAutoAdjustStatus, get status, error(%s) fd(%d) return(%d)\n", strerror ( errno ), AFE_GetDeviceFileHandle(), rt );
+ return rt;
+ }
- return 0;
+ return 0;
}
int CTvin::AFE_GetAdcCal ( struct tvafe_adc_cal_s *adccalvalue )
{
- int rt = -1;
+ int rt = -1;
- rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_ADC_CAL, adccalvalue );
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_ADC_CAL, adccalvalue );
- if ( rt < 0 ) {
- LOGW ( "AFE_GetADCGainOffset, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "AFE_GetADCGainOffset, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::AFE_SetAdcCal ( struct tvafe_adc_cal_s *adccalvalue )
{
- int rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_ADC_CAL, adccalvalue );
+ int rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_ADC_CAL, adccalvalue );
- if ( rt < 0 ) {
- LOGW ( "AFE_SetAdcCal, error(%s)!", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "AFE_SetAdcCal, error(%s)!", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::AFE_GetAdcCompCal ( struct tvafe_adc_comp_cal_s *adccalvalue )
{
- int rt = -1;
+ int rt = -1;
- rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_ADC_COMP_CAL, adccalvalue );
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_ADC_COMP_CAL, adccalvalue );
- if ( rt < 0 ) {
- LOGW ( "AFE_GetYPbPrADCGainOffset, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "AFE_GetYPbPrADCGainOffset, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::AFE_SetAdcCompCal ( struct tvafe_adc_comp_cal_s *adccalvalue )
{
- int rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_ADC_COMP_CAL, adccalvalue );
+ int rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_ADC_COMP_CAL, adccalvalue );
- if ( rt < 0 ) {
- LOGW ( "AFE_SetYPbPrADCGainOffset, error(%s)!", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "AFE_SetYPbPrADCGainOffset, error(%s)!", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::AFE_GetYPbPrWSSinfo ( struct tvafe_comp_wss_s *wssinfo )
{
- int rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_COMP_WSS, wssinfo );
+ int rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_COMP_WSS, wssinfo );
- if ( rt < 0 ) {
- LOGW ( "AFE_GetYPbPrWSSinfo, error(%s)!", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGW ( "AFE_GetYPbPrWSSinfo, error(%s)!", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
#define RGB444 3
@@ -1670,1374 +1670,1374 @@ int CTvin::AFE_GetYPbPrWSSinfo ( struct tvafe_comp_wss_s *wssinfo )
unsigned int CTvin::data_limit ( float data )
{
- if ( data < 0 ) {
- return ( 0 );
- } else if ( data > 255 ) {
- return ( 255 );
- } else {
- return ( ( unsigned int ) data );
- }
+ if ( data < 0 ) {
+ return ( 0 );
+ } else if ( data > 255 ) {
+ return ( 255 );
+ } else {
+ return ( ( unsigned int ) data );
+ }
}
void CTvin::matrix_convert_yuv709_to_rgb ( unsigned int y, unsigned int u, unsigned int v, unsigned int *r, unsigned int *g, unsigned int *b )
{
- *r = data_limit ( ( ( float ) y + PRE_0 ) * COEF_00 + ( ( float ) u + PRE_1 ) * COEF_01 + ( ( float ) v + PRE_2 ) * COEF_02 + POST_0 + 0.5 );
- *g = data_limit ( ( ( float ) y + PRE_0 ) * COEF_10 + ( ( float ) u + PRE_1 ) * COEF_11 + ( ( float ) v + PRE_2 ) * COEF_12 + POST_1 + 0.5 );
- *b = data_limit ( ( ( float ) y + PRE_0 ) * COEF_20 + ( ( float ) u + PRE_1 ) * COEF_21 + ( ( float ) v + PRE_2 ) * COEF_22 + POST_2 + 0.5 );
+ *r = data_limit ( ( ( float ) y + PRE_0 ) * COEF_00 + ( ( float ) u + PRE_1 ) * COEF_01 + ( ( float ) v + PRE_2 ) * COEF_02 + POST_0 + 0.5 );
+ *g = data_limit ( ( ( float ) y + PRE_0 ) * COEF_10 + ( ( float ) u + PRE_1 ) * COEF_11 + ( ( float ) v + PRE_2 ) * COEF_12 + POST_1 + 0.5 );
+ *b = data_limit ( ( ( float ) y + PRE_0 ) * COEF_20 + ( ( float ) u + PRE_1 ) * COEF_21 + ( ( float ) v + PRE_2 ) * COEF_22 + POST_2 + 0.5 );
}
void CTvin::re_order ( unsigned int *a, unsigned int *b )
{
- unsigned int c = 0;
+ unsigned int c = 0;
- if ( *a > *b ) {
- c = *a;
- *a = *b;
- *b = c;
- }
+ if ( *a > *b ) {
+ c = *a;
+ *a = *b;
+ *b = c;
+ }
}
char *CTvin::get_cap_addr ( enum adc_cal_type_e calType )
{
- int n;
- char *dp;
+ int n;
+ char *dp;
- for ( n = 0; n < 0x00ff; n++ ) {
- if ( VDIN_DeviceIOCtl ( TVIN_IOC_G_SIG_INFO, &gTvinAFESignalInfo ) < 0 ) {
- LOGW ( "get_cap_addr, get signal info, error(%s),fd(%d).\n", strerror ( errno ), m_vdin_dev_fd );
- return NULL;
- } else {
- if ( gTvinAFESignalInfo.status == TVIN_SIG_STATUS_STABLE ) {
- gTvinAFEParam.info.fmt = gTvinAFESignalInfo.fmt;
- break;
- }
- }
- }
+ for ( n = 0; n < 0x00ff; n++ ) {
+ if ( VDIN_DeviceIOCtl ( TVIN_IOC_G_SIG_INFO, &gTvinAFESignalInfo ) < 0 ) {
+ LOGW ( "get_cap_addr, get signal info, error(%s),fd(%d).\n", strerror ( errno ), m_vdin_dev_fd );
+ return NULL;
+ } else {
+ if ( gTvinAFESignalInfo.status == TVIN_SIG_STATUS_STABLE ) {
+ gTvinAFEParam.info.fmt = gTvinAFESignalInfo.fmt;
+ break;
+ }
+ }
+ }
- if ( gTvinAFESignalInfo.status != TVIN_SIG_STATUS_STABLE ) {
- LOGD ( "get_cap_addr, signal isn't stable, out of calibration!\n" );
- return NULL;
- } else {
- if ( VDIN_DeviceIOCtl ( TVIN_IOC_STOP_DEC ) < 0 ) {
- LOGW ( "get_cap_addr, stop vdin, error (%s).\n", strerror ( errno ) );
- return NULL;
- }
+ if ( gTvinAFESignalInfo.status != TVIN_SIG_STATUS_STABLE ) {
+ LOGD ( "get_cap_addr, signal isn't stable, out of calibration!\n" );
+ return NULL;
+ } else {
+ if ( VDIN_DeviceIOCtl ( TVIN_IOC_STOP_DEC ) < 0 ) {
+ LOGW ( "get_cap_addr, stop vdin, error (%s).\n", strerror ( errno ) );
+ return NULL;
+ }
- usleep ( 1000 );
+ usleep ( 1000 );
- if ( calType == CAL_YPBPR ) {
- dp = ( char * ) mmap ( NULL, COMP_CAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, m_vdin_dev_fd, 0 );
- } else {
- dp = ( char * ) mmap ( NULL, VGA_CAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, m_vdin_dev_fd, 0 );
- }
+ if ( calType == CAL_YPBPR ) {
+ dp = ( char * ) mmap ( NULL, COMP_CAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, m_vdin_dev_fd, 0 );
+ } else {
+ dp = ( char * ) mmap ( NULL, VGA_CAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, m_vdin_dev_fd, 0 );
+ }
- if ( dp < 0 ) {
- LOGD ( "get_cap_addr, mmap failed!\n" );
- }
+ if ( dp < 0 ) {
+ LOGD ( "get_cap_addr, mmap failed!\n" );
+ }
- return dp;
- }
+ return dp;
+ }
- return NULL;
+ return NULL;
}
inline unsigned char CTvin::get_mem_data ( char *dp, unsigned int addr )
{
- return ( * ( dp + ( addr ^ 7 ) ) );
+ return ( * ( dp + ( addr ^ 7 ) ) );
}
int CTvin::get_frame_average ( enum adc_cal_type_e calType, struct adc_cal_s *mem_data )
{
- unsigned int y = 0, cb = 0, cr = 0;
- unsigned int r = 0, g = 0, b = 0;
- unsigned long n;
- unsigned int i = 0, j = 0;
- char *dp = get_cap_addr ( calType );
-
- if ( calType == CAL_YPBPR ) {
- for ( j = COMP_WHITE_VS; j <= COMP_WHITE_VE; j++ ) {
- for ( i = COMP_WHITE_HS; i <= COMP_WHITE_HE; i++ ) {
- mem_data->g_y_max += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 ) );
- }
- }
-
- mem_data->g_y_max /= COMP_WHITE_SIZE;
-
- for ( j = COMP_WHITE_VS; j <= COMP_WHITE_VE; j++ ) {
- for ( i = COMP_WHITE_HS; i <= COMP_WHITE_HE; ) {
- mem_data->cb_white += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CB422_POS ) );
- mem_data->cr_white += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CR422_POS ) );
- i = i + 2;
- }
- }
-
- mem_data->cb_white /= CB_WHITE_SIZE;
- mem_data->cr_white /= CR_WHITE_SIZE;
-
- for ( j = COMP_RED_VS; j <= COMP_RED_VE; j++ ) {
- for ( i = COMP_RED_HS; i <= COMP_RED_HE; ) {
- mem_data->rcr_max += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CR422_POS ) );
- i = i + 2;
- }
- }
-
- mem_data->rcr_max /= COMP_RED_SIZE;
-
- for ( j = COMP_BLUE_VS; j <= COMP_BLUE_VE; j++ ) {
- for ( i = COMP_BLUE_HS; i <= COMP_BLUE_HE; ) {
- mem_data->bcb_max += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CB422_POS ) );
- i = i + 2;
- }
- }
-
- mem_data->bcb_max /= COMP_BLUE_SIZE;
-
- for ( j = COMP_BLACK_VS; j <= COMP_BLACK_VE; j++ ) {
- for ( i = COMP_BLACK_HS; i <= COMP_BLACK_HE; i++ ) {
- mem_data->g_y_min += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 ) );
- }
- }
-
- mem_data->g_y_min /= COMP_BLACK_SIZE;
-
- for ( j = COMP_BLACK_VS; j <= COMP_BLACK_VE; j++ ) {
- for ( i = COMP_BLACK_HS; i <= COMP_BLACK_HE; ) {
- mem_data->cb_black += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CB422_POS ) );
- mem_data->cr_black += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CR422_POS ) );
- i = i + 2;
- }
- }
-
- mem_data->cb_black /= CB_BLACK_SIZE;
- mem_data->cr_black /= CR_BLACK_SIZE;
-
- /*
- for (j=COMP_BLACK_VS; j<=COMP_BLACK_VE; j++) {
- for (i=COMP_BLACK_HS; i<=COMP_BLACK_HE;) {
- //mem_data->cb_black += get_mem_data(dp, ((COMP_BUF_WID*j+i)*YCBCR422+CB422_POS));
- mem_data->cr_black += get_mem_data(dp, ((COMP_BUF_WID*j+i)*YCBCR422+CR422_POS));
- i = i+2;
- }
- }
- mem_data->cr_black /= CR_BLACK_SIZE;
- */
- for ( j = COMP_CYAN_VS; j <= COMP_CYAN_VE; j++ ) {
- for ( i = COMP_CYAN_HS; i <= COMP_CYAN_HE; ) {
- mem_data->rcr_min += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CR422_POS ) );
- i = i + 2;
- }
- }
-
- mem_data->rcr_min /= COMP_CYAN_SIZE;
-
- for ( j = COMP_YELLOW_VS; j <= COMP_YELLOW_VE; j++ ) {
- for ( i = COMP_YELLOW_HS; i <= COMP_YELLOW_HE; ) {
- mem_data->bcb_min += get_mem_data ( dp, ( COMP_BUF_WID * j + i ) * YCBCR422 + CB422_POS );
- i = i + 2;
- }
- }
-
- mem_data->bcb_min /= COMP_YELLOW_SIZE;
-
- } else if ( calType == CAL_VGA ) {
- for ( j = VGA_WHITE_VS; j <= VGA_WHITE_VE; j++ ) {
- for ( i = VGA_WHITE_HS; i <= VGA_WHITE_HE; i++ ) {
+ unsigned int y = 0, cb = 0, cr = 0;
+ unsigned int r = 0, g = 0, b = 0;
+ unsigned long n;
+ unsigned int i = 0, j = 0;
+ char *dp = get_cap_addr ( calType );
+
+ if ( calType == CAL_YPBPR ) {
+ for ( j = COMP_WHITE_VS; j <= COMP_WHITE_VE; j++ ) {
+ for ( i = COMP_WHITE_HS; i <= COMP_WHITE_HE; i++ ) {
+ mem_data->g_y_max += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 ) );
+ }
+ }
+
+ mem_data->g_y_max /= COMP_WHITE_SIZE;
+
+ for ( j = COMP_WHITE_VS; j <= COMP_WHITE_VE; j++ ) {
+ for ( i = COMP_WHITE_HS; i <= COMP_WHITE_HE; ) {
+ mem_data->cb_white += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CB422_POS ) );
+ mem_data->cr_white += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CR422_POS ) );
+ i = i + 2;
+ }
+ }
+
+ mem_data->cb_white /= CB_WHITE_SIZE;
+ mem_data->cr_white /= CR_WHITE_SIZE;
+
+ for ( j = COMP_RED_VS; j <= COMP_RED_VE; j++ ) {
+ for ( i = COMP_RED_HS; i <= COMP_RED_HE; ) {
+ mem_data->rcr_max += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CR422_POS ) );
+ i = i + 2;
+ }
+ }
+
+ mem_data->rcr_max /= COMP_RED_SIZE;
+
+ for ( j = COMP_BLUE_VS; j <= COMP_BLUE_VE; j++ ) {
+ for ( i = COMP_BLUE_HS; i <= COMP_BLUE_HE; ) {
+ mem_data->bcb_max += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CB422_POS ) );
+ i = i + 2;
+ }
+ }
+
+ mem_data->bcb_max /= COMP_BLUE_SIZE;
+
+ for ( j = COMP_BLACK_VS; j <= COMP_BLACK_VE; j++ ) {
+ for ( i = COMP_BLACK_HS; i <= COMP_BLACK_HE; i++ ) {
+ mem_data->g_y_min += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 ) );
+ }
+ }
+
+ mem_data->g_y_min /= COMP_BLACK_SIZE;
+
+ for ( j = COMP_BLACK_VS; j <= COMP_BLACK_VE; j++ ) {
+ for ( i = COMP_BLACK_HS; i <= COMP_BLACK_HE; ) {
+ mem_data->cb_black += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CB422_POS ) );
+ mem_data->cr_black += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CR422_POS ) );
+ i = i + 2;
+ }
+ }
+
+ mem_data->cb_black /= CB_BLACK_SIZE;
+ mem_data->cr_black /= CR_BLACK_SIZE;
+
+ /*
+ for(j=COMP_BLACK_VS; j<=COMP_BLACK_VE; j++) {
+ for (i=COMP_BLACK_HS; i<=COMP_BLACK_HE;) {
+ //mem_data->cb_black += get_mem_data(dp, ((COMP_BUF_WID*j+i)*YCBCR422+CB422_POS));
+ mem_data->cr_black += get_mem_data(dp, ((COMP_BUF_WID*j+i)*YCBCR422+CR422_POS));
+ i = i+2;
+ }
+ }
+ mem_data->cr_black /= CR_BLACK_SIZE;
+ */
+ for ( j = COMP_CYAN_VS; j <= COMP_CYAN_VE; j++ ) {
+ for ( i = COMP_CYAN_HS; i <= COMP_CYAN_HE; ) {
+ mem_data->rcr_min += get_mem_data ( dp, ( ( COMP_BUF_WID * j + i ) * YCBCR422 + CR422_POS ) );
+ i = i + 2;
+ }
+ }
+
+ mem_data->rcr_min /= COMP_CYAN_SIZE;
+
+ for ( j = COMP_YELLOW_VS; j <= COMP_YELLOW_VE; j++ ) {
+ for ( i = COMP_YELLOW_HS; i <= COMP_YELLOW_HE; ) {
+ mem_data->bcb_min += get_mem_data ( dp, ( COMP_BUF_WID * j + i ) * YCBCR422 + CB422_POS );
+ i = i + 2;
+ }
+ }
+
+ mem_data->bcb_min /= COMP_YELLOW_SIZE;
+
+ } else if ( calType == CAL_VGA ) {
+ for ( j = VGA_WHITE_VS; j <= VGA_WHITE_VE; j++ ) {
+ for ( i = VGA_WHITE_HS; i <= VGA_WHITE_HE; i++ ) {
#ifdef VGA_SOURCE_RGB444
- r = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * RGB444 + R444_POS ) );
- g = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * RGB444 + G444_POS ) );
- b = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * RGB444 + B444_POS ) );
+ r = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * RGB444 + R444_POS ) );
+ g = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * RGB444 + G444_POS ) );
+ b = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * RGB444 + B444_POS ) );
#else
- y = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * YCBCR444 + Y444_POS ) );
- cb = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * YCBCR444 + CB444_POS ) );
- cr = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * YCBCR444 + CR444_POS ) );
- matrix_convert_yuv709_to_rgb ( y, cb, cr, &r, &g, &b );
+ y = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * YCBCR444 + Y444_POS ) );
+ cb = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * YCBCR444 + CB444_POS ) );
+ cr = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * YCBCR444 + CR444_POS ) );
+ matrix_convert_yuv709_to_rgb ( y, cb, cr, &r, &g, &b );
#endif
- mem_data->rcr_max = mem_data->rcr_max + r;
- mem_data->g_y_max = mem_data->g_y_max + g;
- mem_data->bcb_max = mem_data->bcb_max + b;
- }
- }
-
- mem_data->rcr_max = mem_data->rcr_max / VGA_WHITE_SIZE;
- mem_data->g_y_max = mem_data->g_y_max / VGA_WHITE_SIZE;
- mem_data->bcb_max = mem_data->bcb_max / VGA_WHITE_SIZE;
-
- for ( j = VGA_BLACK_VS; j <= VGA_BLACK_VE; j++ ) {
- for ( i = VGA_BLACK_HS; i <= VGA_BLACK_HE; i++ ) {
+ mem_data->rcr_max = mem_data->rcr_max + r;
+ mem_data->g_y_max = mem_data->g_y_max + g;
+ mem_data->bcb_max = mem_data->bcb_max + b;
+ }
+ }
+
+ mem_data->rcr_max = mem_data->rcr_max / VGA_WHITE_SIZE;
+ mem_data->g_y_max = mem_data->g_y_max / VGA_WHITE_SIZE;
+ mem_data->bcb_max = mem_data->bcb_max / VGA_WHITE_SIZE;
+
+ for ( j = VGA_BLACK_VS; j <= VGA_BLACK_VE; j++ ) {
+ for ( i = VGA_BLACK_HS; i <= VGA_BLACK_HE; i++ ) {
#ifdef VGA_SOURCE_RGB444
- r = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * RGB444 + R444_POS ) );
- g = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * RGB444 + G444_POS ) );
- b = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * RGB444 + B444_POS ) );
+ r = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * RGB444 + R444_POS ) );
+ g = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * RGB444 + G444_POS ) );
+ b = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * RGB444 + B444_POS ) );
#else
- y = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * YCBCR444 + Y444_POS ) );
- cb = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * YCBCR444 + CB444_POS ) );
- cr = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * YCBCR444 + CR444_POS ) );
- matrix_convert_yuv709_to_rgb ( y, cb, cr, &r, &g, &b );
+ y = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * YCBCR444 + Y444_POS ) );
+ cb = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * YCBCR444 + CB444_POS ) );
+ cr = get_mem_data ( dp, ( ( VGA_BUF_WID * j + i ) * YCBCR444 + CR444_POS ) );
+ matrix_convert_yuv709_to_rgb ( y, cb, cr, &r, &g, &b );
#endif
- mem_data->rcr_min = mem_data->rcr_min + r;
- mem_data->g_y_min = mem_data->g_y_min + g;
- mem_data->bcb_min = mem_data->bcb_min + b;
- }
- }
-
- mem_data->rcr_min = mem_data->rcr_min / VGA_BLACK_SIZE;
- mem_data->g_y_min = mem_data->g_y_min / VGA_BLACK_SIZE;
- mem_data->bcb_min = mem_data->bcb_min / VGA_BLACK_SIZE;
-
- } else { //CVBS
- for ( j = CVBS_WHITE_VS; j <= CVBS_WHITE_VE; j++ ) {
- for ( i = CVBS_WHITE_HS; i <= CVBS_WHITE_HE; i++ ) {
- mem_data->g_y_max += mem_data->g_y_max + get_mem_data ( dp, ( ( CVBS_BUF_WID * j + i ) * YCBCR422 ) );
- }
- }
-
- mem_data->g_y_max /= COMP_WHITE_SIZE;
-
- for ( j = CVBS_BLACK_VS; j <= CVBS_BLACK_VE; j++ ) {
- for ( i = CVBS_BLACK_HS; i <= CVBS_BLACK_HE; i++ ) {
- mem_data->g_y_min += mem_data->g_y_min + get_mem_data ( dp, ( ( CVBS_BUF_WID * j + i ) * YCBCR422 ) );
- }
- }
-
- mem_data->g_y_min /= CVBS_BLACK_SIZE;
- }
-
- if ( calType == CAL_YPBPR ) {
- munmap ( dp, COMP_CAP_SIZE );
- } else if ( calType == CAL_VGA ) {
- munmap ( dp, VGA_CAP_SIZE );
- } else {
- munmap ( dp, CVBS_CAP_SIZE );
- }
-
- if ( VDIN_DeviceIOCtl ( TVIN_IOC_START_DEC, &gTvinAFEParam ) < 0 ) {
- LOGW ( "get_frame_average, get vdin signal info, error(%s),fd(%d).\n", strerror ( errno ), m_vdin_dev_fd );
- return NULL;
- } else {
- ;
- }
-
- return 0;
+ mem_data->rcr_min = mem_data->rcr_min + r;
+ mem_data->g_y_min = mem_data->g_y_min + g;
+ mem_data->bcb_min = mem_data->bcb_min + b;
+ }
+ }
+
+ mem_data->rcr_min = mem_data->rcr_min / VGA_BLACK_SIZE;
+ mem_data->g_y_min = mem_data->g_y_min / VGA_BLACK_SIZE;
+ mem_data->bcb_min = mem_data->bcb_min / VGA_BLACK_SIZE;
+
+ } else { //CVBS
+ for ( j = CVBS_WHITE_VS; j <= CVBS_WHITE_VE; j++ ) {
+ for ( i = CVBS_WHITE_HS; i <= CVBS_WHITE_HE; i++ ) {
+ mem_data->g_y_max += mem_data->g_y_max + get_mem_data ( dp, ( ( CVBS_BUF_WID * j + i ) * YCBCR422 ) );
+ }
+ }
+
+ mem_data->g_y_max /= COMP_WHITE_SIZE;
+
+ for ( j = CVBS_BLACK_VS; j <= CVBS_BLACK_VE; j++ ) {
+ for ( i = CVBS_BLACK_HS; i <= CVBS_BLACK_HE; i++ ) {
+ mem_data->g_y_min += mem_data->g_y_min + get_mem_data ( dp, ( ( CVBS_BUF_WID * j + i ) * YCBCR422 ) );
+ }
+ }
+
+ mem_data->g_y_min /= CVBS_BLACK_SIZE;
+ }
+
+ if ( calType == CAL_YPBPR ) {
+ munmap ( dp, COMP_CAP_SIZE );
+ } else if ( calType == CAL_VGA ) {
+ munmap ( dp, VGA_CAP_SIZE );
+ } else {
+ munmap ( dp, CVBS_CAP_SIZE );
+ }
+
+ if ( VDIN_DeviceIOCtl ( TVIN_IOC_START_DEC, &gTvinAFEParam ) < 0 ) {
+ LOGW ( "get_frame_average, get vdin signal info, error(%s),fd(%d).\n", strerror ( errno ), m_vdin_dev_fd );
+ return NULL;
+ } else {
+ ;
+ }
+
+ return 0;
}
#define ADC_CAL_FRAME_QTY_ORDER 2 //NOTE: MUST >=2!!
struct adc_cal_s CTvin::get_n_frame_average ( enum adc_cal_type_e calType )
{
- struct adc_cal_s mem_data = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- unsigned int rcrmax[1 << ADC_CAL_FRAME_QTY_ORDER];
- unsigned int rcrmin[1 << ADC_CAL_FRAME_QTY_ORDER];
- unsigned int g_ymax[1 << ADC_CAL_FRAME_QTY_ORDER];
- unsigned int g_ymin[1 << ADC_CAL_FRAME_QTY_ORDER];
- unsigned int bcbmax[1 << ADC_CAL_FRAME_QTY_ORDER];
- unsigned int bcbmin[1 << ADC_CAL_FRAME_QTY_ORDER];
- unsigned int cbwhite[1 << ADC_CAL_FRAME_QTY_ORDER];
- unsigned int crwhite[1 << ADC_CAL_FRAME_QTY_ORDER];
- unsigned int cbblack[1 << ADC_CAL_FRAME_QTY_ORDER];
- unsigned int crblack[1 << ADC_CAL_FRAME_QTY_ORDER];
- unsigned int i = 0, j = 0;
-
- for ( i = 0; i < ( 1 << ADC_CAL_FRAME_QTY_ORDER ); i++ ) {
- get_frame_average ( calType, &mem_data );
- rcrmax[i] = mem_data.rcr_max;
- rcrmin[i] = mem_data.rcr_min;
- g_ymax[i] = mem_data.g_y_max;
- g_ymin[i] = mem_data.g_y_min;
- bcbmax[i] = mem_data.bcb_max;
- bcbmin[i] = mem_data.bcb_min;
- cbwhite[i] = mem_data.cb_white;
- crwhite[i] = mem_data.cr_white;
- cbblack[i] = mem_data.cb_black;
- crblack[i] = mem_data.cr_black;
- }
-
- for ( i = 0; i < ( 1 << ADC_CAL_FRAME_QTY_ORDER ) - 1; i++ ) {
- for ( j = 1; j < ( 1 << ADC_CAL_FRAME_QTY_ORDER ); j++ ) {
- re_order ( & ( rcrmax[i] ), & ( rcrmax[j] ) );
- re_order ( & ( rcrmin[i] ), & ( rcrmin[j] ) );
- re_order ( & ( g_ymax[i] ), & ( g_ymax[j] ) );
- re_order ( & ( g_ymin[i] ), & ( g_ymin[j] ) );
- re_order ( & ( bcbmax[i] ), & ( bcbmax[j] ) );
- re_order ( & ( bcbmin[i] ), & ( bcbmin[j] ) );
- re_order ( & ( cbwhite[i] ), & ( cbwhite[j] ) );
- re_order ( & ( crwhite[i] ), & ( crwhite[j] ) );
- re_order ( & ( cbblack[i] ), & ( cbblack[j] ) );
- re_order ( & ( crblack[i] ), & ( crblack[j] ) );
- }
- }
-
-
- memset ( &mem_data, 0, sizeof ( mem_data ) );
-
- for ( i = 0; i < ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 1 ) ); i++ ) { //(1<<(ADC_CAL_FRAME_QTY_ORDER-1))
- mem_data.rcr_max += rcrmax[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
- mem_data.rcr_min += rcrmin[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
- mem_data.g_y_max += g_ymax[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
- mem_data.g_y_min += g_ymin[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
- mem_data.bcb_max += bcbmax[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
- mem_data.bcb_min += bcbmin[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
- mem_data.cb_white += cbwhite[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
- mem_data.cr_white += crwhite[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
- mem_data.cb_black += cbblack[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
- mem_data.cr_black += crblack[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
- }
-
-
- mem_data.rcr_max >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
- mem_data.rcr_min >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
- mem_data.g_y_max >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
- mem_data.g_y_min >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
- mem_data.bcb_max >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
- mem_data.bcb_min >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
- mem_data.cb_white >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
- mem_data.cr_white >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
- mem_data.cb_black >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
- mem_data.cr_black >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
-
- return mem_data;
+ struct adc_cal_s mem_data = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ unsigned int rcrmax[1 << ADC_CAL_FRAME_QTY_ORDER];
+ unsigned int rcrmin[1 << ADC_CAL_FRAME_QTY_ORDER];
+ unsigned int g_ymax[1 << ADC_CAL_FRAME_QTY_ORDER];
+ unsigned int g_ymin[1 << ADC_CAL_FRAME_QTY_ORDER];
+ unsigned int bcbmax[1 << ADC_CAL_FRAME_QTY_ORDER];
+ unsigned int bcbmin[1 << ADC_CAL_FRAME_QTY_ORDER];
+ unsigned int cbwhite[1 << ADC_CAL_FRAME_QTY_ORDER];
+ unsigned int crwhite[1 << ADC_CAL_FRAME_QTY_ORDER];
+ unsigned int cbblack[1 << ADC_CAL_FRAME_QTY_ORDER];
+ unsigned int crblack[1 << ADC_CAL_FRAME_QTY_ORDER];
+ unsigned int i = 0, j = 0;
+
+ for ( i = 0; i < ( 1 << ADC_CAL_FRAME_QTY_ORDER ); i++ ) {
+ get_frame_average ( calType, &mem_data );
+ rcrmax[i] = mem_data.rcr_max;
+ rcrmin[i] = mem_data.rcr_min;
+ g_ymax[i] = mem_data.g_y_max;
+ g_ymin[i] = mem_data.g_y_min;
+ bcbmax[i] = mem_data.bcb_max;
+ bcbmin[i] = mem_data.bcb_min;
+ cbwhite[i] = mem_data.cb_white;
+ crwhite[i] = mem_data.cr_white;
+ cbblack[i] = mem_data.cb_black;
+ crblack[i] = mem_data.cr_black;
+ }
+
+ for ( i = 0; i < ( 1 << ADC_CAL_FRAME_QTY_ORDER ) - 1; i++ ) {
+ for ( j = 1; j < ( 1 << ADC_CAL_FRAME_QTY_ORDER ); j++ ) {
+ re_order ( & ( rcrmax[i] ), & ( rcrmax[j] ) );
+ re_order ( & ( rcrmin[i] ), & ( rcrmin[j] ) );
+ re_order ( & ( g_ymax[i] ), & ( g_ymax[j] ) );
+ re_order ( & ( g_ymin[i] ), & ( g_ymin[j] ) );
+ re_order ( & ( bcbmax[i] ), & ( bcbmax[j] ) );
+ re_order ( & ( bcbmin[i] ), & ( bcbmin[j] ) );
+ re_order ( & ( cbwhite[i] ), & ( cbwhite[j] ) );
+ re_order ( & ( crwhite[i] ), & ( crwhite[j] ) );
+ re_order ( & ( cbblack[i] ), & ( cbblack[j] ) );
+ re_order ( & ( crblack[i] ), & ( crblack[j] ) );
+ }
+ }
+
+
+ memset ( &mem_data, 0, sizeof ( mem_data ) );
+
+ for ( i = 0; i < ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 1 ) ); i++ ) { //(1<<(ADC_CAL_FRAME_QTY_ORDER-1))
+ mem_data.rcr_max += rcrmax[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
+ mem_data.rcr_min += rcrmin[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
+ mem_data.g_y_max += g_ymax[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
+ mem_data.g_y_min += g_ymin[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
+ mem_data.bcb_max += bcbmax[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
+ mem_data.bcb_min += bcbmin[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
+ mem_data.cb_white += cbwhite[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
+ mem_data.cr_white += crwhite[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
+ mem_data.cb_black += cbblack[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
+ mem_data.cr_black += crblack[i + ( 1 << ( ADC_CAL_FRAME_QTY_ORDER - 2 ) )];
+ }
+
+
+ mem_data.rcr_max >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
+ mem_data.rcr_min >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
+ mem_data.g_y_max >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
+ mem_data.g_y_min >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
+ mem_data.bcb_max >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
+ mem_data.bcb_min >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
+ mem_data.cb_white >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
+ mem_data.cr_white >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
+ mem_data.cb_black >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
+ mem_data.cr_black >>= ( ADC_CAL_FRAME_QTY_ORDER - 1 );
+
+ return mem_data;
}
int CTvin::AFE_GetMemData ( int typeSel, struct adc_cal_s *mem_data )
{
- int rt = -1;
+ int rt = -1;
- if ( m_vdin_dev_fd < 0 || mem_data == NULL ) {
- LOGW ( "AFE_GetMemData, didn't open vdin fd, return!\n" );
- return -1;
- }
+ if ( m_vdin_dev_fd < 0 || mem_data == NULL ) {
+ LOGW ( "AFE_GetMemData, didn't open vdin fd, return!\n" );
+ return -1;
+ }
- memset ( &gTvinAFEParam, 0, sizeof ( gTvinAFEParam ) );
- memset ( &gTvinAFESignalInfo, 0, sizeof ( gTvinAFESignalInfo ) );
+ memset ( &gTvinAFEParam, 0, sizeof ( gTvinAFEParam ) );
+ memset ( &gTvinAFESignalInfo, 0, sizeof ( gTvinAFESignalInfo ) );
- if ( VDIN_DeviceIOCtl ( TVIN_IOC_G_PARM, &gTvinAFEParam ) < 0 ) {
- LOGW ( "AFE_GetMemData, get vdin param, error(%s), fd(%d)!\n", strerror ( errno ), m_vdin_dev_fd );
- return -1;
- }
+ if ( VDIN_DeviceIOCtl ( TVIN_IOC_G_PARM, &gTvinAFEParam ) < 0 ) {
+ LOGW ( "AFE_GetMemData, get vdin param, error(%s), fd(%d)!\n", strerror ( errno ), m_vdin_dev_fd );
+ return -1;
+ }
- gTvinAFEParam.flag = gTvinAFEParam.flag | TVIN_PARM_FLAG_CAP;
+ gTvinAFEParam.flag = gTvinAFEParam.flag | TVIN_PARM_FLAG_CAP;
- if ( VDIN_DeviceIOCtl ( TVIN_IOC_S_PARM, &gTvinAFEParam ) < 0 ) {
- LOGW ( "AFE_GetMemData, set vdin param error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( VDIN_DeviceIOCtl ( TVIN_IOC_S_PARM, &gTvinAFEParam ) < 0 ) {
+ LOGW ( "AFE_GetMemData, set vdin param error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- if ( typeSel == 0 ) {
- get_frame_average ( CAL_YPBPR, mem_data );
- } else if ( typeSel == 1 ) {
- get_frame_average ( CAL_VGA, mem_data );
- } else {
- *mem_data = get_n_frame_average ( CAL_CVBS );
- }
+ if ( typeSel == 0 ) {
+ get_frame_average ( CAL_YPBPR, mem_data );
+ } else if ( typeSel == 1 ) {
+ get_frame_average ( CAL_VGA, mem_data );
+ } else {
+ *mem_data = get_n_frame_average ( CAL_CVBS );
+ }
- gTvinAFEParam.flag &= 0x11111110;
+ gTvinAFEParam.flag &= 0x11111110;
- if ( VDIN_DeviceIOCtl ( TVIN_IOC_S_PARM, &gTvinAFEParam ) < 0 ) {
- LOGW ( "AFE_GetMemData, set vdin param error(%s)\n", strerror ( errno ) );
- return -1;
- }
+ if ( VDIN_DeviceIOCtl ( TVIN_IOC_S_PARM, &gTvinAFEParam ) < 0 ) {
+ LOGW ( "AFE_GetMemData, set vdin param error(%s)\n", strerror ( errno ) );
+ return -1;
+ }
- LOGD ( "AFE_GetMemData, MAX ======> :\n Y(White)->%d \n Cb(Blue)->%d \n Cr(Red)->%d\n", mem_data->g_y_max, mem_data->bcb_max, mem_data->rcr_max );
- LOGD ( "AFE_GetMemData, MIN ======>:\n Y(Black)->%d \n Cb(Yellow)->%d \n Cr(Cyan)->%d\n Cb(White) ->%d\n Cb(Black)->%d\n Cr(Black)->%d\n", mem_data->g_y_min, mem_data->bcb_min, mem_data->rcr_min,
- mem_data->cb_white, mem_data->cb_black, mem_data->cr_black );
- return 0;
+ LOGD ( "AFE_GetMemData, MAX ======> :\n Y(White)->%d \n Cb(Blue)->%d \n Cr(Red)->%d\n", mem_data->g_y_max, mem_data->bcb_max, mem_data->rcr_max );
+ LOGD ( "AFE_GetMemData, MIN ======>:\n Y(Black)->%d \n Cb(Yellow)->%d \n Cr(Cyan)->%d\n Cb(White) ->%d\n Cb(Black)->%d\n Cr(Black)->%d\n", mem_data->g_y_min, mem_data->bcb_min, mem_data->rcr_min,
+ mem_data->cb_white, mem_data->cb_black, mem_data->cr_black );
+ return 0;
}
int CTvin::AFE_GetCVBSLockStatus ( enum tvafe_cvbs_video_e *cvbs_lock_status )
{
- int rt = -1;
+ int rt = -1;
- rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_CVBS_LOCK, cvbs_lock_status );
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_G_AFE_CVBS_LOCK, cvbs_lock_status );
- if ( rt < 0 ) {
- LOGD ( "AFE_GetCVBSLockStatus, error: return(%d), error(%s)!\n", rt, strerror ( errno ) );
- } else {
- LOGD ( "AFE_GetCVBSLockStatus, value=%d.\n", *cvbs_lock_status );
- }
+ if ( rt < 0 ) {
+ LOGD ( "AFE_GetCVBSLockStatus, error: return(%d), error(%s)!\n", rt, strerror ( errno ) );
+ } else {
+ LOGD ( "AFE_GetCVBSLockStatus, value=%d.\n", *cvbs_lock_status );
+ }
- return *cvbs_lock_status;
+ return *cvbs_lock_status;
}
int CTvin::AFE_SetCVBSStd ( tvin_sig_fmt_t fmt )
{
- int rt = -1;
+ int rt = -1;
- LOGD ( "AFE_SetCVBSStd, sig_fmt = %d\n", fmt );
- rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_CVBS_STD, &fmt );
+ LOGD ( "AFE_SetCVBSStd, sig_fmt = %d\n", fmt );
+ rt = AFE_DeviceIOCtl ( TVIN_IOC_S_AFE_CVBS_STD, &fmt );
- if ( rt < 0 ) {
- LOGD ( "AFE_SetCVBSStd, error: return(%d), error(%s)!\n", rt, strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGD ( "AFE_SetCVBSStd, error: return(%d), error(%s)!\n", rt, strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::TvinApi_SetStartDropFrameCn ( int count )
{
- int ret = -1;
- char set_str[4];
+ int ret = -1;
+ char set_str[4];
- memset ( set_str, 0, 4 );
- sprintf ( set_str, "%d", count );
- return SetFileAttrValue ( "/sys/module/di/parameters/start_frame_drop_count", set_str );
+ memset ( set_str, 0, 4 );
+ sprintf ( set_str, "%d", count );
+ return SetFileAttrValue ( "/sys/module/di/parameters/start_frame_drop_count", set_str );
}
int CTvin::TvinApi_SetVdinHVScale ( int vdinx, int hscale, int vscale )
{
- int ret = -1;
- char set_str[32];
+ int ret = -1;
+ char set_str[32];
- memset ( set_str, 0, 32 );
- sprintf ( set_str, "%s %d %d", "hvscaler", hscale, vscale );
+ memset ( set_str, 0, 32 );
+ sprintf ( set_str, "%s %d %d", "hvscaler", hscale, vscale );
- if ( vdinx == 0 ) {
- ret = SetFileAttrValue ( "/sys/class/vdin/vdin0/attr", set_str );
- } else {
- ret = SetFileAttrValue ( "/sys/class/vdin/vdin1/attr", set_str );
- }
+ if ( vdinx == 0 ) {
+ ret = SetFileAttrValue ( "/sys/class/vdin/vdin0/attr", set_str );
+ } else {
+ ret = SetFileAttrValue ( "/sys/class/vdin/vdin1/attr", set_str );
+ }
- return ret;
+ return ret;
}
int CTvin::TvinApi_SetCompPhase ( am_phase_t &am_phase )
{
- int ret = -1, fd = -1;
- unsigned int i = 0;
- int idx = 0, len = 0;
- char str1[200], str2[100];
+ int ret = -1, fd = -1;
+ unsigned int i = 0;
+ int idx = 0, len = 0;
+ char str1[200], str2[100];
- LOGD ( "enter,TvinApi_SetCompPhase" );
+ LOGD ( "enter,TvinApi_SetCompPhase" );
- fd = open ( "/sys/module/tvin_afe/parameters/comp_phase", O_RDWR );
+ fd = open ( "/sys/module/tvin_afe/parameters/comp_phase", O_RDWR );
- if ( fd < 0 ) {
- LOGW ( "Open vdin_comp_phase_op_mutex error(%s)!!\n", strerror ( errno ) );
+ if ( fd < 0 ) {
+ LOGW ( "Open vdin_comp_phase_op_mutex error(%s)!!\n", strerror ( errno ) );
- return -1;
- }
+ return -1;
+ }
- for ( i = 0; i < am_phase.length; i++ ) {
- sprintf ( &str1[idx], "%d,", am_phase.phase[i] );
- sprintf ( str2, "%d,", am_phase.phase[i] );
- int len = strlen ( str2 );
- idx = idx + len;
- }
+ for ( i = 0; i < am_phase.length; i++ ) {
+ sprintf ( &str1[idx], "%d,", am_phase.phase[i] );
+ sprintf ( str2, "%d,", am_phase.phase[i] );
+ int len = strlen ( str2 );
+ idx = idx + len;
+ }
- LOGD ( "##########str1 = %s\n", str1 );
+ LOGD ( "##########str1 = %s\n", str1 );
- ret = write ( fd, str1, strlen ( str1 ) );
+ ret = write ( fd, str1, strlen ( str1 ) );
- if ( ret < 0 ) {
- LOGD ( "Write vdin_comp_phase_op_mutex error(%s)!!\n", strerror ( errno ) );
- }
+ if ( ret < 0 ) {
+ LOGD ( "Write vdin_comp_phase_op_mutex error(%s)!!\n", strerror ( errno ) );
+ }
- LOGD ( "write ok!!!" );
- close ( fd );
- fd = -1;
+ LOGD ( "write ok!!!" );
+ close ( fd );
+ fd = -1;
- return ret;
+ return ret;
}
tvin_trans_fmt CTvin::TvinApi_Get3DDectMode()
{
- int fd;
- int ret;
- char det_3d[10];
- int det_3dmode = 8;
- //LOGW("det_3dmode %d\n", det_3dmode);
+ int fd;
+ int ret;
+ char det_3d[10];
+ int det_3dmode = 8;
+ //LOGW("det_3dmode %d\n", det_3dmode);
- fd = open ( "/sys/module/di/parameters/det3d_mode", O_RDWR );
+ fd = open ( "/sys/module/di/parameters/det3d_mode", O_RDWR );
- if ( fd < 0 ) {
- LOGW ( "/sys/module/di/parameters/det3d_mode error(%s)!!\n", strerror ( errno ) );
+ if ( fd < 0 ) {
+ LOGW ( "/sys/module/di/parameters/det3d_mode error(%s)!!\n", strerror ( errno ) );
- return TVIN_TFMT_3D_MAX;
- }
+ return TVIN_TFMT_3D_MAX;
+ }
- ret = read ( fd, det_3d, 10 );
+ ret = read ( fd, det_3d, 10 );
- if ( ret < 0 ) {
- LOGW ( "/sys/module/di/parameters/det3d_mode error(%s)!!\n", strerror ( errno ) );
- }
+ if ( ret < 0 ) {
+ LOGW ( "/sys/module/di/parameters/det3d_mode error(%s)!!\n", strerror ( errno ) );
+ }
- det_3dmode = atoi ( det_3d );
- close ( fd );
- fd = -1;
+ det_3dmode = atoi ( det_3d );
+ close ( fd );
+ fd = -1;
- return (tvin_trans_fmt)det_3dmode;
+ return (tvin_trans_fmt)det_3dmode;
}
int CTvin::TvinApi_SetCompPhaseEnable ( int enable )
{
- int ret = -1;
+ int ret = -1;
- if ( enable == 1 ) {
- ret = SetFileAttrValue ( "/sys/module/tvin_afe/parameters/enable_dphase", "Y" );
- LOGD ( "%s, enable TvinApi_SetCompPhase.", "TV" );
- }
+ if ( enable == 1 ) {
+ ret = SetFileAttrValue ( "/sys/module/tvin_afe/parameters/enable_dphase", "Y" );
+ LOGD ( "%s, enable TvinApi_SetCompPhase.", "TV" );
+ }
- return ret;
+ return ret;
}
int CTvin::VDIN_GetPortConnect ( int port )
{
- int status = 0;
+ int status = 0;
- if ( VDIN_DeviceIOCtl ( TVIN_IOC_CALLMASTER_SET, &port ) < 0 ) {
- LOGW ( "TVIN_IOC_CALLMASTER_SET error(%s) port %d\n", strerror ( errno ), port );
- return 0;
- }
+ if ( VDIN_DeviceIOCtl ( TVIN_IOC_CALLMASTER_SET, &port ) < 0 ) {
+ LOGW ( "TVIN_IOC_CALLMASTER_SET error(%s) port %d\n", strerror ( errno ), port );
+ return 0;
+ }
- if ( VDIN_DeviceIOCtl ( TVIN_IOC_CALLMASTER_GET, &status ) < 0 ) {
- LOGW ( "TVIN_IOC_CALLMASTER_GET error(%s)\n", strerror ( errno ) );
- return 0;
- }
+ if ( VDIN_DeviceIOCtl ( TVIN_IOC_CALLMASTER_GET, &status ) < 0 ) {
+ LOGW ( "TVIN_IOC_CALLMASTER_GET error(%s)\n", strerror ( errno ) );
+ return 0;
+ }
- //LOGD("%s, port:%x,status:%d", "TV",port,status);
+ //LOGD("%s, port:%x,status:%d", "TV",port,status);
- return status;
+ return status;
}
int CTvin::VDIN_OpenHDMIPinMuxOn ( bool flag )
{
- FILE *fp = NULL;
- int status = 1;
+ FILE *fp = NULL;
+ int status = 1;
- fp = fopen ( "/sys/class/hdmirx/hdmirx0/debug", "w" );
+ fp = fopen ( "/sys/class/hdmirx/hdmirx0/debug", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/class/hdmirx/hdmirx0/debug(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/class/hdmirx/hdmirx0/debug(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- if ( flag ) {
- fprintf ( fp, "%s", "pinmux_on" );
- } else {
- fprintf ( fp, "%s", "pinmux_off" );
+ if ( flag ) {
+ fprintf ( fp, "%s", "pinmux_on" );
+ } else {
+ fprintf ( fp, "%s", "pinmux_off" );
- }
+ }
- fclose ( fp );
- fp = NULL;
- return status;
+ fclose ( fp );
+ fp = NULL;
+ return status;
}
int CTvin::VDIN_GetHdmiHdcpKeyKsvInfo(struct _hdcp_ksv *msg)
{
- int m_ksv_dev_fd = -1;
+ int m_ksv_dev_fd = -1;
- if (msg == NULL) {
- LOGE("%s, msg is NULL\n", __FUNCTION__);
- }
+ if (msg == NULL) {
+ LOGE("%s, msg is NULL\n", __FUNCTION__);
+ }
- //PrintMessage(__FUNCTION__, 0, msg);
+ //PrintMessage(__FUNCTION__, 0, msg);
- m_ksv_dev_fd = open(HDMIRX_KSV_PATH, O_RDWR);
- if (m_ksv_dev_fd < 0) {
- LOGE("%s, Open file %s error: (%s)!\n", __FUNCTION__, HDMIRX_KSV_PATH, strerror ( errno ));
- return -1;
- }
- LOGD("# call ioctl with HDMI_IOC_HDCP_SENT_KSV #");
- ioctl(m_ksv_dev_fd, HDMI_IOC_HDCP_KSV, msg);
+ m_ksv_dev_fd = open(HDMIRX_KSV_PATH, O_RDWR);
+ if (m_ksv_dev_fd < 0) {
+ LOGE("%s, Open file %s error: (%s)!\n", __FUNCTION__, HDMIRX_KSV_PATH, strerror ( errno ));
+ return -1;
+ }
+ LOGD("# call ioctl with HDMI_IOC_HDCP_SENT_KSV #");
+ ioctl(m_ksv_dev_fd, HDMI_IOC_HDCP_KSV, msg);
- close(m_ksv_dev_fd);
- m_ksv_dev_fd = -1;
+ close(m_ksv_dev_fd);
+ m_ksv_dev_fd = -1;
- LOGD("msg->bksv0 is %x, msg->bksv1 is %x", msg->bksv0, msg->bksv1);
+ LOGD("msg->bksv0 is %x, msg->bksv1 is %x", msg->bksv0, msg->bksv1);
- return 0;
+ return 0;
}
int CTvin::get_hdmi_ksv_info(int source_input, int data_buf[])
{
- if (source_input != SOURCE_HDMI1 && source_input != SOURCE_HDMI2 && source_input != SOURCE_HDMI3) {
- return -1;
- }
+ if (source_input != SOURCE_HDMI1 && source_input != SOURCE_HDMI2 && source_input != SOURCE_HDMI3) {
+ return -1;
+ }
- struct _hdcp_ksv msg;
- int ret = -1;
- ret = VDIN_GetHdmiHdcpKeyKsvInfo(&msg);
- memset((void *)data_buf, 0, 2);
- data_buf[0] = msg.bksv0;
- data_buf[1] = msg.bksv1;
- return ret;
+ struct _hdcp_ksv msg;
+ int ret = -1;
+ ret = VDIN_GetHdmiHdcpKeyKsvInfo(&msg);
+ memset((void *)data_buf, 0, 2);
+ data_buf[0] = msg.bksv0;
+ data_buf[1] = msg.bksv1;
+ return ret;
}
int CTvin::TVAFE_EnablePlugInDetect ( bool flag )
{
- FILE *fp = NULL;
- int status = 1;
+ FILE *fp = NULL;
+ int status = 1;
- fp = fopen ( "/sys/class/tvafe/tvafe0/debug", "w" );
+ fp = fopen ( "/sys/class/tvafe/tvafe0/debug", "w" );
- if ( fp == NULL ) {
- LOGW ( "Open /sys/class/tvafe/tvafe0/debug (%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGW ( "Open /sys/class/tvafe/tvafe0/debug (%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- if ( flag ) {
- fprintf ( fp, "%s", "tvafe_enable" );
- } else {
- fprintf ( fp, "%s", "tvafe_down" );
+ if ( flag ) {
+ fprintf ( fp, "%s", "tvafe_enable" );
+ } else {
+ fprintf ( fp, "%s", "tvafe_down" );
- }
+ }
- fclose ( fp );
- fp = NULL;
- return status;
+ fclose ( fp );
+ fp = NULL;
+ return status;
}
int CTvin::TvinApi_GetHDMIAudioStatus ( void )
{
- int fd;
- int val = 0;
- char bcmd[16];
- fd = open ( "/sys/module/tvin_hdmirx/parameters/auds_rcv_sts", O_RDONLY );
+ int fd;
+ int val = 0;
+ char bcmd[16];
+ fd = open ( "/sys/module/tvin_hdmirx/parameters/auds_rcv_sts", O_RDONLY );
- if ( fd >= 0 ) {
- read ( fd, bcmd, sizeof ( bcmd ) );
- val = strtol ( bcmd, NULL, 10 );
- close ( fd );
- } else {
- LOGE ( "open /sys/module/tvin_hdmirx/parameters/auds_rcv_sts ERROR(%s)!!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fd >= 0 ) {
+ read ( fd, bcmd, sizeof ( bcmd ) );
+ val = strtol ( bcmd, NULL, 10 );
+ close ( fd );
+ } else {
+ LOGE ( "open /sys/module/tvin_hdmirx/parameters/auds_rcv_sts ERROR(%s)!!\n", strerror ( errno ) );
+ return -1;
+ }
- return val;
+ return val;
}
int CTvin::TvinApi_LoadPLLValues ( am_regs_t regs )
{
- int rt = AFE_DeviceIOCtl ( TVIN_IOC_LOAD_REG, &regs );
+ int rt = AFE_DeviceIOCtl ( TVIN_IOC_LOAD_REG, &regs );
- if ( rt < 0 ) {
- LOGE ( "TvinApi_LoadPLLValues, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "TvinApi_LoadPLLValues, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::TvinApi_LoadCVD2Values ( am_regs_t regs )
{
- int rt = AFE_DeviceIOCtl ( TVIN_IOC_LOAD_REG, &regs );
+ int rt = AFE_DeviceIOCtl ( TVIN_IOC_LOAD_REG, &regs );
- if ( rt < 0 ) {
- LOGE ( "TvinApi_LoadCVD2Values, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "TvinApi_LoadCVD2Values, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CTvin::TvinApi_GetFbSize ( unsigned int *fb_width, unsigned int *fb_height )
{
- int fbfd = 0;
- struct fb_var_screeninfo vinfo;
- struct fb_fix_screeninfo finfo;
- int xres = 0, yres = 0, bits_per_pixel = 0;
+ int fbfd = 0;
+ struct fb_var_screeninfo vinfo;
+ struct fb_fix_screeninfo finfo;
+ int xres = 0, yres = 0, bits_per_pixel = 0;
- fbfd = open ( "/dev/graphics/fb0", O_RDWR );
+ fbfd = open ( "/dev/graphics/fb0", O_RDWR );
- if ( !fbfd ) {
- return -1;
- }
+ if ( !fbfd ) {
+ return -1;
+ }
- if ( ioctl ( fbfd, FBIOGET_FSCREENINFO, &finfo ) ) {
- goto fail_close_fb;
- }
+ if ( ioctl ( fbfd, FBIOGET_FSCREENINFO, &finfo ) ) {
+ goto fail_close_fb;
+ }
- if ( ioctl ( fbfd, FBIOGET_VSCREENINFO, &vinfo ) ) {
- goto fail_close_fb;
- }
+ if ( ioctl ( fbfd, FBIOGET_VSCREENINFO, &vinfo ) ) {
+ goto fail_close_fb;
+ }
- *fb_width = vinfo.xres;
- *fb_height = vinfo.yres;
+ *fb_width = vinfo.xres;
+ *fb_height = vinfo.yres;
- return 1;
+ return 1;
fail_close_fb:
- close ( fbfd );;
- return -1;
+ close ( fbfd );;
+ return -1;
}
tv_source_input_type_t CTvin::Tvin_SourceInputToSourceInputType ( tv_source_input_t source_input )
{
- if (source_input == SOURCE_TV) {
- return SOURCE_TYPE_TV;
- } else if (source_input == SOURCE_AV1 || source_input == SOURCE_AV2) {
- return SOURCE_TYPE_AV;
- } else if (source_input == SOURCE_YPBPR1 || source_input == SOURCE_YPBPR2) {
- return SOURCE_TYPE_COMPONENT;
- } else if (source_input == SOURCE_VGA) {
- return SOURCE_TYPE_VGA;
- } else if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
- return SOURCE_TYPE_HDMI;
- } else if (source_input == SOURCE_DTV) {
- return SOURCE_TYPE_DTV;
- } else if (source_input == SOURCE_IPTV) {
- return SOURCE_TYPE_IPTV;
- } else if (source_input == SOURCE_MPEG) {
- return SOURCE_TYPE_MPEG;
- }
-
- return SOURCE_TYPE_MPEG;
+ if (source_input == SOURCE_TV) {
+ return SOURCE_TYPE_TV;
+ } else if (source_input == SOURCE_AV1 || source_input == SOURCE_AV2) {
+ return SOURCE_TYPE_AV;
+ } else if (source_input == SOURCE_YPBPR1 || source_input == SOURCE_YPBPR2) {
+ return SOURCE_TYPE_COMPONENT;
+ } else if (source_input == SOURCE_VGA) {
+ return SOURCE_TYPE_VGA;
+ } else if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
+ return SOURCE_TYPE_HDMI;
+ } else if (source_input == SOURCE_DTV) {
+ return SOURCE_TYPE_DTV;
+ } else if (source_input == SOURCE_IPTV) {
+ return SOURCE_TYPE_IPTV;
+ } else if (source_input == SOURCE_MPEG) {
+ return SOURCE_TYPE_MPEG;
+ }
+
+ return SOURCE_TYPE_MPEG;
}
tv_source_input_type_t CTvin::Tvin_SourcePortToSourceInputType ( tvin_port_t source_port )
{
- tv_source_input_t source_input = Tvin_PortToSourceInput(source_port);
- return Tvin_SourceInputToSourceInputType(source_input);
+ tv_source_input_t source_input = Tvin_PortToSourceInput(source_port);
+ return Tvin_SourceInputToSourceInputType(source_input);
}
tvin_port_t CTvin::Tvin_GetSourcePortBySourceType ( tv_source_input_type_t source_type )
{
- tvin_port_t source_port;
-
- switch ( source_type ) {
- case SOURCE_TYPE_TV:
- source_port = Tvin_GetSourcePortBySourceInput(SOURCE_TV);
- break;
- case SOURCE_TYPE_AV:
- source_port = Tvin_GetSourcePortBySourceInput(SOURCE_AV1);
- break;
- case SOURCE_TYPE_COMPONENT:
- source_port = Tvin_GetSourcePortBySourceInput(SOURCE_YPBPR1);
- break;
- case SOURCE_TYPE_VGA:
- source_port = Tvin_GetSourcePortBySourceInput(SOURCE_VGA);
- break;
- case SOURCE_TYPE_HDMI:
- source_port = TVIN_PORT_HDMI0;
- break;
- case SOURCE_TYPE_IPTV:
- source_port = Tvin_GetSourcePortBySourceInput(SOURCE_IPTV);
- break;
- case SOURCE_TYPE_DTV:
- source_port = Tvin_GetSourcePortBySourceInput(SOURCE_DTV);
- break;
- case SOURCE_TYPE_MPEG:
- default:
- source_port = Tvin_GetSourcePortBySourceInput(SOURCE_MPEG);
- break;
- }
-
- return source_port;
+ tvin_port_t source_port;
+
+ switch ( source_type ) {
+ case SOURCE_TYPE_TV:
+ source_port = Tvin_GetSourcePortBySourceInput(SOURCE_TV);
+ break;
+ case SOURCE_TYPE_AV:
+ source_port = Tvin_GetSourcePortBySourceInput(SOURCE_AV1);
+ break;
+ case SOURCE_TYPE_COMPONENT:
+ source_port = Tvin_GetSourcePortBySourceInput(SOURCE_YPBPR1);
+ break;
+ case SOURCE_TYPE_VGA:
+ source_port = Tvin_GetSourcePortBySourceInput(SOURCE_VGA);
+ break;
+ case SOURCE_TYPE_HDMI:
+ source_port = TVIN_PORT_HDMI0;
+ break;
+ case SOURCE_TYPE_IPTV:
+ source_port = Tvin_GetSourcePortBySourceInput(SOURCE_IPTV);
+ break;
+ case SOURCE_TYPE_DTV:
+ source_port = Tvin_GetSourcePortBySourceInput(SOURCE_DTV);
+ break;
+ case SOURCE_TYPE_MPEG:
+ default:
+ source_port = Tvin_GetSourcePortBySourceInput(SOURCE_MPEG);
+ break;
+ }
+
+ return source_port;
}
tvin_port_t CTvin::Tvin_GetSourcePortBySourceInput ( tv_source_input_t source_input )
{
- tvin_port_t source_port = TVIN_PORT_NULL;
+ tvin_port_t source_port = TVIN_PORT_NULL;
- if ( source_input < SOURCE_TV || source_input >= SOURCE_MAX ) {
- source_port = TVIN_PORT_NULL;
- } else {
- source_port = ( tvin_port_t ) mSourceInputToPortMap[ ( int ) source_input];
- }
+ if ( source_input < SOURCE_TV || source_input >= SOURCE_MAX ) {
+ source_port = TVIN_PORT_NULL;
+ } else {
+ source_port = ( tvin_port_t ) mSourceInputToPortMap[ ( int ) source_input];
+ }
- return source_port;
+ return source_port;
}
tv_source_input_t CTvin::Tvin_PortToSourceInput ( tvin_port_t port )
{
- int i;
+ int i;
- for ( i = SOURCE_TV; i < SOURCE_MAX; i++ ) {
- if ( mSourceInputToPortMap[i] == port ) {
- break;
- }
- }
+ for ( i = SOURCE_TV; i < SOURCE_MAX; i++ ) {
+ if ( mSourceInputToPortMap[i] == port ) {
+ break;
+ }
+ }
- if ( i == SOURCE_MAX ) {
- return SOURCE_MAX;
- } else {
- return tv_source_input_t ( i );
- }
+ if ( i == SOURCE_MAX ) {
+ return SOURCE_MAX;
+ } else {
+ return tv_source_input_t ( i );
+ }
}
unsigned int CTvin::Tvin_TransPortStringToValue(const char *port_str)
{
- if (strcasecmp(port_str, "TVIN_PORT_CVBS0") == 0) {
- return TVIN_PORT_CVBS0;
- } else if (strcasecmp(port_str, "TVIN_PORT_CVBS1") == 0) {
- return TVIN_PORT_CVBS1;
- } else if (strcasecmp(port_str, "TVIN_PORT_CVBS2") == 0) {
- return TVIN_PORT_CVBS2;
- } else if (strcasecmp(port_str, "TVIN_PORT_CVBS3") == 0) {
- return TVIN_PORT_CVBS3;
- } else if (strcasecmp(port_str, "TVIN_PORT_COMP0") == 0) {
- return TVIN_PORT_COMP0;
- } else if (strcasecmp(port_str, "TVIN_PORT_COMP1") == 0) {
- return TVIN_PORT_COMP1;
- } else if (strcasecmp(port_str, "TVIN_PORT_VGA0") == 0) {
- return TVIN_PORT_VGA0;
- } else if (strcasecmp(port_str, "TVIN_PORT_HDMI0") == 0) {
- return TVIN_PORT_HDMI0;
- } else if (strcasecmp(port_str, "TVIN_PORT_HDMI1") == 0) {
- return TVIN_PORT_HDMI1;
- } else if (strcasecmp(port_str, "TVIN_PORT_HDMI2") == 0) {
- return TVIN_PORT_HDMI2;
- } else if (strcasecmp(port_str, "TVIN_PORT_HDMI3") == 0) {
- return TVIN_PORT_HDMI3;
- }
-
- return TVIN_PORT_MPEG0;
+ if (strcasecmp(port_str, "TVIN_PORT_CVBS0") == 0) {
+ return TVIN_PORT_CVBS0;
+ } else if (strcasecmp(port_str, "TVIN_PORT_CVBS1") == 0) {
+ return TVIN_PORT_CVBS1;
+ } else if (strcasecmp(port_str, "TVIN_PORT_CVBS2") == 0) {
+ return TVIN_PORT_CVBS2;
+ } else if (strcasecmp(port_str, "TVIN_PORT_CVBS3") == 0) {
+ return TVIN_PORT_CVBS3;
+ } else if (strcasecmp(port_str, "TVIN_PORT_COMP0") == 0) {
+ return TVIN_PORT_COMP0;
+ } else if (strcasecmp(port_str, "TVIN_PORT_COMP1") == 0) {
+ return TVIN_PORT_COMP1;
+ } else if (strcasecmp(port_str, "TVIN_PORT_VGA0") == 0) {
+ return TVIN_PORT_VGA0;
+ } else if (strcasecmp(port_str, "TVIN_PORT_HDMI0") == 0) {
+ return TVIN_PORT_HDMI0;
+ } else if (strcasecmp(port_str, "TVIN_PORT_HDMI1") == 0) {
+ return TVIN_PORT_HDMI1;
+ } else if (strcasecmp(port_str, "TVIN_PORT_HDMI2") == 0) {
+ return TVIN_PORT_HDMI2;
+ } else if (strcasecmp(port_str, "TVIN_PORT_HDMI3") == 0) {
+ return TVIN_PORT_HDMI3;
+ }
+
+ return TVIN_PORT_MPEG0;
}
void CTvin::Tvin_LoadSourceInputToPortMap()
{
- const char *SourceInputMapSection = "SourceInputMap";
- const char *config_value = NULL;
+ const char *SourceInputMapSection = "SourceInputMap";
+ const char *config_value = NULL;
- config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.atv", "TVIN_PORT_CVBS3");
- mSourceInputToPortMap[SOURCE_TV] = Tvin_TransPortStringToValue(config_value);
+ config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.atv", "TVIN_PORT_CVBS3");
+ mSourceInputToPortMap[SOURCE_TV] = Tvin_TransPortStringToValue(config_value);
- config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.av1", "TVIN_PORT_CVBS1");
- mSourceInputToPortMap[SOURCE_AV1] = Tvin_TransPortStringToValue(config_value);
+ config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.av1", "TVIN_PORT_CVBS1");
+ mSourceInputToPortMap[SOURCE_AV1] = Tvin_TransPortStringToValue(config_value);
- config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.av2", "TVIN_PORT_CVBS2");
- mSourceInputToPortMap[SOURCE_AV2] = Tvin_TransPortStringToValue(config_value);
+ config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.av2", "TVIN_PORT_CVBS2");
+ mSourceInputToPortMap[SOURCE_AV2] = Tvin_TransPortStringToValue(config_value);
- config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.ypbpr1", "TVIN_PORT_COMP0");
- mSourceInputToPortMap[SOURCE_YPBPR1] = Tvin_TransPortStringToValue(config_value);
+ config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.ypbpr1", "TVIN_PORT_COMP0");
+ mSourceInputToPortMap[SOURCE_YPBPR1] = Tvin_TransPortStringToValue(config_value);
- config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.ypbpr2", "TVIN_PORT_COMP1");
- mSourceInputToPortMap[SOURCE_YPBPR2] = Tvin_TransPortStringToValue(config_value);
+ config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.ypbpr2", "TVIN_PORT_COMP1");
+ mSourceInputToPortMap[SOURCE_YPBPR2] = Tvin_TransPortStringToValue(config_value);
- config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.hdmi1", "TVIN_PORT_HDMI0");
- mSourceInputToPortMap[SOURCE_HDMI1] = Tvin_TransPortStringToValue(config_value);
+ config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.hdmi1", "TVIN_PORT_HDMI0");
+ mSourceInputToPortMap[SOURCE_HDMI1] = Tvin_TransPortStringToValue(config_value);
- config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.hdmi2", "TVIN_PORT_HDMI2");
- mSourceInputToPortMap[SOURCE_HDMI2] = Tvin_TransPortStringToValue(config_value);
+ config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.hdmi2", "TVIN_PORT_HDMI2");
+ mSourceInputToPortMap[SOURCE_HDMI2] = Tvin_TransPortStringToValue(config_value);
- config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.hdmi3", "TVIN_PORT_HDMI1");
- mSourceInputToPortMap[SOURCE_HDMI3] = Tvin_TransPortStringToValue(config_value);
+ config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.hdmi3", "TVIN_PORT_HDMI1");
+ mSourceInputToPortMap[SOURCE_HDMI3] = Tvin_TransPortStringToValue(config_value);
- config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.vga", "TVIN_PORT_VGA0");
- mSourceInputToPortMap[SOURCE_VGA] = Tvin_TransPortStringToValue(config_value);
+ config_value = config_get_str(SourceInputMapSection, "ro.tv.tvinchannel.vga", "TVIN_PORT_VGA0");
+ mSourceInputToPortMap[SOURCE_VGA] = Tvin_TransPortStringToValue(config_value);
- mSourceInputToPortMap[SOURCE_MPEG] = TVIN_PORT_MPEG0;
- mSourceInputToPortMap[SOURCE_DTV] = TVIN_PORT_DTV;
- mSourceInputToPortMap[SOURCE_IPTV] = TVIN_PORT_BT656;
+ mSourceInputToPortMap[SOURCE_MPEG] = TVIN_PORT_MPEG0;
+ mSourceInputToPortMap[SOURCE_DTV] = TVIN_PORT_DTV;
+ mSourceInputToPortMap[SOURCE_IPTV] = TVIN_PORT_BT656;
- return;
+ return;
}
int CTvin::Tvin_GetSourcePortByCECPhysicalAddress(int physical_addr)
{
- if (physical_addr == 0x1000) {
- return TVIN_PORT_HDMI0;
- } else if (physical_addr == 0x2000) {
- return TVIN_PORT_HDMI1;
- } else if (physical_addr == 0x3000) {
- return TVIN_PORT_HDMI2;
- }
+ if (physical_addr == 0x1000) {
+ return TVIN_PORT_HDMI0;
+ } else if (physical_addr == 0x2000) {
+ return TVIN_PORT_HDMI1;
+ } else if (physical_addr == 0x3000) {
+ return TVIN_PORT_HDMI2;
+ }
- return TVIN_PORT_MAX;
+ return TVIN_PORT_MAX;
}
tv_audio_channel_t CTvin::Tvin_GetInputSourceAudioChannelIndex ( tv_source_input_t source_input )
{
- int aud_chan = TV_AUDIO_LINE_IN_0;
- const char *config_value = NULL;
-
- if ( source_input == SOURCE_TV ) {
- config_value = config_get_str("TV", "tvin.aud.chan.atv", "2");
- } else if ( source_input == SOURCE_AV1 ) {
- config_value = config_get_str("TV", "tvin.aud.chan.av1", "1");
- } else if ( source_input == SOURCE_AV2 ) {
- config_value = config_get_str("TV", "tvin.aud.chan.av2", "3");
- } else if ( source_input == SOURCE_YPBPR1 ) {
- config_value = config_get_str("TV", "tvin.aud.chan.comp1", "0");
- } else if ( source_input == SOURCE_YPBPR2 ) {
- config_value = config_get_str("TV", "tvin.aud.chan.comp2", "0");
- } else if ( source_input == SOURCE_HDMI1 ) {
- config_value = config_get_str("TV", "tvin.aud.chan.hdmi1", "0");
- } else if ( source_input == SOURCE_HDMI2 ) {
- config_value = config_get_str("TV", "tvin.aud.chan.hdmi2", "0");
- } else if ( source_input == SOURCE_HDMI3 ) {
- config_value = config_get_str("TV", "tvin.aud.chan.hdmi3", "0");
- } else if ( source_input == SOURCE_VGA ) {
- config_value = config_get_str("TV", "tvin.aud.chan.vga", "0");
- } else if ( source_input == SOURCE_MPEG ) {
- config_value = config_get_str("TV", "tvin.aud.chan.mpeg", "0");
- }
-
- if (config_value != NULL) {
- aud_chan = strtol (config_value, NULL, 10);
- }
-
- return ( tv_audio_channel_t ) aud_chan;
+ int aud_chan = TV_AUDIO_LINE_IN_0;
+ const char *config_value = NULL;
+
+ if ( source_input == SOURCE_TV ) {
+ config_value = config_get_str("TV", "tvin.aud.chan.atv", "2");
+ } else if ( source_input == SOURCE_AV1 ) {
+ config_value = config_get_str("TV", "tvin.aud.chan.av1", "1");
+ } else if ( source_input == SOURCE_AV2 ) {
+ config_value = config_get_str("TV", "tvin.aud.chan.av2", "3");
+ } else if ( source_input == SOURCE_YPBPR1 ) {
+ config_value = config_get_str("TV", "tvin.aud.chan.comp1", "0");
+ } else if ( source_input == SOURCE_YPBPR2 ) {
+ config_value = config_get_str("TV", "tvin.aud.chan.comp2", "0");
+ } else if ( source_input == SOURCE_HDMI1 ) {
+ config_value = config_get_str("TV", "tvin.aud.chan.hdmi1", "0");
+ } else if ( source_input == SOURCE_HDMI2 ) {
+ config_value = config_get_str("TV", "tvin.aud.chan.hdmi2", "0");
+ } else if ( source_input == SOURCE_HDMI3 ) {
+ config_value = config_get_str("TV", "tvin.aud.chan.hdmi3", "0");
+ } else if ( source_input == SOURCE_VGA ) {
+ config_value = config_get_str("TV", "tvin.aud.chan.vga", "0");
+ } else if ( source_input == SOURCE_MPEG ) {
+ config_value = config_get_str("TV", "tvin.aud.chan.mpeg", "0");
+ }
+
+ if (config_value != NULL) {
+ aud_chan = strtol (config_value, NULL, 10);
+ }
+
+ return ( tv_audio_channel_t ) aud_chan;
}
tv_audio_in_source_type_t CTvin::Tvin_GetAudioInSourceType ( tv_source_input_t source_input )
{
- const char *config_value = NULL;
+ const char *config_value = NULL;
- if (source_input == SOURCE_TV) {
- config_value = config_get_str("TV", "tvin.aud.insource.atv", "TV_AUDIO_IN_SOURCE_TYPE_LINEIN");
- if (strcasecmp(config_value, "TV_AUDIO_IN_SOURCE_TYPE_ATV") == 0) {
- return TV_AUDIO_IN_SOURCE_TYPE_ATV;
- }
- return TV_AUDIO_IN_SOURCE_TYPE_LINEIN;
- } else if (source_input == SOURCE_AV1 || source_input == SOURCE_AV2) {
- return TV_AUDIO_IN_SOURCE_TYPE_LINEIN;
- } else if (source_input == SOURCE_YPBPR1 || source_input == SOURCE_YPBPR2 || source_input == SOURCE_VGA) {
- return TV_AUDIO_IN_SOURCE_TYPE_LINEIN;
- } else if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
- return TV_AUDIO_IN_SOURCE_TYPE_HDMI;
- }
+ if (source_input == SOURCE_TV) {
+ config_value = config_get_str("TV", "tvin.aud.insource.atv", "TV_AUDIO_IN_SOURCE_TYPE_LINEIN");
+ if (strcasecmp(config_value, "TV_AUDIO_IN_SOURCE_TYPE_ATV") == 0) {
+ return TV_AUDIO_IN_SOURCE_TYPE_ATV;
+ }
+ return TV_AUDIO_IN_SOURCE_TYPE_LINEIN;
+ } else if (source_input == SOURCE_AV1 || source_input == SOURCE_AV2) {
+ return TV_AUDIO_IN_SOURCE_TYPE_LINEIN;
+ } else if (source_input == SOURCE_YPBPR1 || source_input == SOURCE_YPBPR2 || source_input == SOURCE_VGA) {
+ return TV_AUDIO_IN_SOURCE_TYPE_LINEIN;
+ } else if (source_input == SOURCE_HDMI1 || source_input == SOURCE_HDMI2 || source_input == SOURCE_HDMI3) {
+ return TV_AUDIO_IN_SOURCE_TYPE_HDMI;
+ }
- return TV_AUDIO_IN_SOURCE_TYPE_LINEIN;
+ return TV_AUDIO_IN_SOURCE_TYPE_LINEIN;
}
int CTvin::isVgaFmtInHdmi ( tvin_sig_fmt_t fmt )
{
- if ( fmt == TVIN_SIG_FMT_HDMI_640X480P_60HZ
- || fmt == TVIN_SIG_FMT_HDMI_800X600_00HZ
- || fmt == TVIN_SIG_FMT_HDMI_1024X768_00HZ
- || fmt == TVIN_SIG_FMT_HDMI_720X400_00HZ
- || fmt == TVIN_SIG_FMT_HDMI_1280X768_00HZ
- || fmt == TVIN_SIG_FMT_HDMI_1280X800_00HZ
- || fmt == TVIN_SIG_FMT_HDMI_1280X960_00HZ
- || fmt == TVIN_SIG_FMT_HDMI_1280X1024_00HZ
- || fmt == TVIN_SIG_FMT_HDMI_1360X768_00HZ
- || fmt == TVIN_SIG_FMT_HDMI_1366X768_00HZ
- || fmt == TVIN_SIG_FMT_HDMI_1600X1200_00HZ
- || fmt == TVIN_SIG_FMT_HDMI_1920X1200_00HZ ) {
- LOGD ( "%s, HDMI source : VGA format.", "TV" );
- return 1;
- }
+ if ( fmt == TVIN_SIG_FMT_HDMI_640X480P_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_800X600_00HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1024X768_00HZ
+ || fmt == TVIN_SIG_FMT_HDMI_720X400_00HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1280X768_00HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1280X800_00HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1280X960_00HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1280X1024_00HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1360X768_00HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1366X768_00HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1600X1200_00HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1920X1200_00HZ ) {
+ LOGD ( "%s, HDMI source : VGA format.", "TV" );
+ return 1;
+ }
- return -1;
+ return -1;
}
bool CTvin::Tvin_is50HzFrameRateFmt ( tvin_sig_fmt_t fmt )
{
- /** component **/
- if ( fmt == TVIN_SIG_FMT_COMP_576P_50HZ_D000
- || fmt == TVIN_SIG_FMT_COMP_576I_50HZ_D000
- || fmt == TVIN_SIG_FMT_COMP_720P_50HZ_D000
- || fmt == TVIN_SIG_FMT_COMP_1080P_50HZ_D000
- || fmt == TVIN_SIG_FMT_COMP_1080I_50HZ_D000_A
- || fmt == TVIN_SIG_FMT_COMP_1080I_50HZ_D000_B
- || fmt == TVIN_SIG_FMT_COMP_1080I_50HZ_D000_C
- || fmt == TVIN_SIG_FMT_COMP_1080P_24HZ_D000
- || fmt == TVIN_SIG_FMT_COMP_1080P_25HZ_D000
- /** hdmi **/
- || fmt == TVIN_SIG_FMT_HDMI_720X576P_50HZ
- || fmt == TVIN_SIG_FMT_HDMI_1280X720P_50HZ
- || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_A
- || fmt == TVIN_SIG_FMT_HDMI_1440X576I_50HZ
- || fmt == TVIN_SIG_FMT_HDMI_1440X288P_50HZ
- || fmt == TVIN_SIG_FMT_HDMI_2880X576I_50HZ
- || fmt == TVIN_SIG_FMT_HDMI_2880X288P_50HZ
- || fmt == TVIN_SIG_FMT_HDMI_1440X576P_50HZ
- || fmt == TVIN_SIG_FMT_HDMI_1920X1080P_50HZ
- || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_B
- || fmt == TVIN_SIG_FMT_HDMI_1280X720P_50HZ_FRAME_PACKING
- || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_FRAME_PACKING
- || fmt == TVIN_SIG_FMT_HDMI_720X576P_50HZ_FRAME_PACKING
- /** cvbs **/
- || fmt == TVIN_SIG_FMT_CVBS_PAL_I
- || fmt == TVIN_SIG_FMT_CVBS_PAL_M
- || fmt == TVIN_SIG_FMT_CVBS_PAL_CN
- || fmt == TVIN_SIG_FMT_CVBS_SECAM ) {
- LOGD ( "%s, Frame rate == 50Hz.", "TV" );
- return true;
- } else {
- LOGD ( "%s, Frame rate != 50Hz.", "TV" );
- return false;
- }
+ /** component **/
+ if ( fmt == TVIN_SIG_FMT_COMP_576P_50HZ_D000
+ || fmt == TVIN_SIG_FMT_COMP_576I_50HZ_D000
+ || fmt == TVIN_SIG_FMT_COMP_720P_50HZ_D000
+ || fmt == TVIN_SIG_FMT_COMP_1080P_50HZ_D000
+ || fmt == TVIN_SIG_FMT_COMP_1080I_50HZ_D000_A
+ || fmt == TVIN_SIG_FMT_COMP_1080I_50HZ_D000_B
+ || fmt == TVIN_SIG_FMT_COMP_1080I_50HZ_D000_C
+ || fmt == TVIN_SIG_FMT_COMP_1080P_24HZ_D000
+ || fmt == TVIN_SIG_FMT_COMP_1080P_25HZ_D000
+ /** hdmi **/
+ || fmt == TVIN_SIG_FMT_HDMI_720X576P_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1280X720P_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_A
+ || fmt == TVIN_SIG_FMT_HDMI_1440X576I_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X288P_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_2880X576I_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_2880X288P_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X576P_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1920X1080P_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_B
+ || fmt == TVIN_SIG_FMT_HDMI_1280X720P_50HZ_FRAME_PACKING
+ || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_FRAME_PACKING
+ || fmt == TVIN_SIG_FMT_HDMI_720X576P_50HZ_FRAME_PACKING
+ /** cvbs **/
+ || fmt == TVIN_SIG_FMT_CVBS_PAL_I
+ || fmt == TVIN_SIG_FMT_CVBS_PAL_M
+ || fmt == TVIN_SIG_FMT_CVBS_PAL_CN
+ || fmt == TVIN_SIG_FMT_CVBS_SECAM ) {
+ LOGD ( "%s, Frame rate == 50Hz.", "TV" );
+ return true;
+ } else {
+ LOGD ( "%s, Frame rate != 50Hz.", "TV" );
+ return false;
+ }
}
bool CTvin::Tvin_IsDeinterlaceFmt ( tvin_sig_fmt_t fmt )
{
- if ( fmt == TVIN_SIG_FMT_COMP_480I_59HZ_D940
- || fmt == TVIN_SIG_FMT_COMP_576I_50HZ_D000
- || fmt == TVIN_SIG_FMT_COMP_1080I_47HZ_D952
- || fmt == TVIN_SIG_FMT_COMP_1080I_48HZ_D000
- || fmt == TVIN_SIG_FMT_COMP_1080I_50HZ_D000_A
- || fmt == TVIN_SIG_FMT_COMP_1080I_50HZ_D000_B
- || fmt == TVIN_SIG_FMT_COMP_1080I_50HZ_D000_C
- || fmt == TVIN_SIG_FMT_COMP_1080I_60HZ_D000
- || fmt == TVIN_SIG_FMT_HDMI_1440X480I_120HZ
- || fmt == TVIN_SIG_FMT_HDMI_1440X480I_240HZ
- || fmt == TVIN_SIG_FMT_HDMI_1440X480I_60HZ
- || fmt == TVIN_SIG_FMT_HDMI_1440X576I_100HZ
- || fmt == TVIN_SIG_FMT_HDMI_1440X576I_200HZ
- || fmt == TVIN_SIG_FMT_HDMI_1440X576I_50HZ
- || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_100HZ
- || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_120HZ
- || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_A
- || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_B
- || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_FRAME_PACKING
- || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_60HZ
- || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_60HZ_FRAME_PACKING
- || fmt == TVIN_SIG_FMT_HDMI_2880X480I_60HZ
- || fmt == TVIN_SIG_FMT_HDMI_2880X576I_50HZ
- || fmt == TVIN_SIG_FMT_CVBS_NTSC_M
- || fmt == TVIN_SIG_FMT_CVBS_NTSC_443
- || fmt == TVIN_SIG_FMT_CVBS_PAL_60
- || fmt == TVIN_SIG_FMT_CVBS_PAL_CN
- || fmt == TVIN_SIG_FMT_CVBS_PAL_I
- || fmt == TVIN_SIG_FMT_CVBS_PAL_M
- || fmt == TVIN_SIG_FMT_CVBS_SECAM ) {
- LOGD ( "%s, Interlace format.", "TV" );
- return true;
- } else {
- LOGD ( "%s, Progressive format.", "TV" );
- return false;
- }
+ if ( fmt == TVIN_SIG_FMT_COMP_480I_59HZ_D940
+ || fmt == TVIN_SIG_FMT_COMP_576I_50HZ_D000
+ || fmt == TVIN_SIG_FMT_COMP_1080I_47HZ_D952
+ || fmt == TVIN_SIG_FMT_COMP_1080I_48HZ_D000
+ || fmt == TVIN_SIG_FMT_COMP_1080I_50HZ_D000_A
+ || fmt == TVIN_SIG_FMT_COMP_1080I_50HZ_D000_B
+ || fmt == TVIN_SIG_FMT_COMP_1080I_50HZ_D000_C
+ || fmt == TVIN_SIG_FMT_COMP_1080I_60HZ_D000
+ || fmt == TVIN_SIG_FMT_HDMI_1440X480I_120HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X480I_240HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X480I_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X576I_100HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X576I_200HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X576I_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_100HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_120HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_A
+ || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_B
+ || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_FRAME_PACKING
+ || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1920X1080I_60HZ_FRAME_PACKING
+ || fmt == TVIN_SIG_FMT_HDMI_2880X480I_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_2880X576I_50HZ
+ || fmt == TVIN_SIG_FMT_CVBS_NTSC_M
+ || fmt == TVIN_SIG_FMT_CVBS_NTSC_443
+ || fmt == TVIN_SIG_FMT_CVBS_PAL_60
+ || fmt == TVIN_SIG_FMT_CVBS_PAL_CN
+ || fmt == TVIN_SIG_FMT_CVBS_PAL_I
+ || fmt == TVIN_SIG_FMT_CVBS_PAL_M
+ || fmt == TVIN_SIG_FMT_CVBS_SECAM ) {
+ LOGD ( "%s, Interlace format.", "TV" );
+ return true;
+ } else {
+ LOGD ( "%s, Progressive format.", "TV" );
+ return false;
+ }
}
int CTvin::Tvin_StartDecoder ( tvin_info_t &info )
{
- if ( m_is_decoder_start == false ) {
- m_tvin_param.info = info;
+ if ( m_is_decoder_start == false ) {
+ m_tvin_param.info = info;
- if ( VDIN_StartDec ( &m_tvin_param ) >= 0 ) {
- LOGD ( "StartDecoder succeed." );
- m_is_decoder_start = true;
- } else {
- LOGW ( "StartDecoder failed." );
- return -1;
- }
- } else {
- return -2;
- }
+ if ( VDIN_StartDec ( &m_tvin_param ) >= 0 ) {
+ LOGD ( "StartDecoder succeed." );
+ m_is_decoder_start = true;
+ } else {
+ LOGW ( "StartDecoder failed." );
+ return -1;
+ }
+ } else {
+ return -2;
+ }
- return 0;
+ return 0;
}
int CTvin::SwitchPort (tvin_port_t source_port )
{
- int ret = 0;
- LOGD ("%s, source_port = %x", __FUNCTION__, source_port);
- ret = Tvin_StopDecoder();
- if ( 0 == ret || 1 == ret ) {
- if ( 1 == ret ) { //decode not started
- //mVpp.Tvin_SetVideoScreenColorType ( TV_SIGNAL_BLUE_PATTERN );
- }
- VDIN_ClosePort();
- } else {
- LOGW ( "%s,stop decoder failed.", __FUNCTION__);
- return -1;
- }
- // Open Port
- if ( VDIN_OpenPort ( source_port ) < 0 ) {
- LOGD ( "%s, OpenPort failed, source_port =%x ", __FUNCTION__, source_port );
- }
- m_tvin_param.port = source_port;
- return 0;
+ int ret = 0;
+ LOGD ("%s, source_port = %x", __FUNCTION__, source_port);
+ ret = Tvin_StopDecoder();
+ if ( 0 == ret || 1 == ret ) {
+ if ( 1 == ret ) { //decode not started
+ //mVpp.Tvin_SetVideoScreenColorType ( TV_SIGNAL_BLUE_PATTERN );
+ }
+ VDIN_ClosePort();
+ } else {
+ LOGW ( "%s,stop decoder failed.", __FUNCTION__);
+ return -1;
+ }
+ // Open Port
+ if ( VDIN_OpenPort ( source_port ) < 0 ) {
+ LOGD ( "%s, OpenPort failed, source_port =%x ", __FUNCTION__, source_port );
+ }
+ m_tvin_param.port = source_port;
+ return 0;
}
int CTvin::Tvin_StopDecoder()
{
- if ( m_is_decoder_start == true ) {
- if ( VDIN_StopDec() >= 0 ) {
- LOGD ( "StopDecoder ok!" );
- m_is_decoder_start = false;
- return 0;
- } else {
- LOGD ( "StopDecoder Failed!" );
- }
- } else {
- return 1;
- }
+ if ( m_is_decoder_start == true ) {
+ if ( VDIN_StopDec() >= 0 ) {
+ LOGD ( "StopDecoder ok!" );
+ m_is_decoder_start = false;
+ return 0;
+ } else {
+ LOGD ( "StopDecoder Failed!" );
+ }
+ } else {
+ return 1;
+ }
- return -1;
+ return -1;
}
int CTvin::init_vdin ( void )
{
- VDIN_OpenModule();
- return 0;
+ VDIN_OpenModule();
+ return 0;
}
int CTvin::uninit_vdin ( void )
{
- VDIN_ClosePort();
- VDIN_CloseModule();
- return 0;
+ VDIN_ClosePort();
+ VDIN_CloseModule();
+ return 0;
}
int CTvin::Tvin_AddPath ( tvin_path_id_t pathid )
{
- int ret = -1;
- int i = 0, dly = 10;
- tv_path_type_t pathtype;
-
- if ( pathid >= TV_PATH_VDIN_AMVIDEO && pathid < TV_PATH_DECODER_3D_AMVIDEO ) {
- pathtype = TV_PATH_TYPE_TVIN;
- } else {
- pathtype = TV_PATH_TYPE_DEFAULT;
- }
-
- if ( pathid >= TV_PATH_VDIN_AMVIDEO && pathid < TV_PATH_DECODER_3D_AMVIDEO ) {
- if ( m_pathid == pathid ) {
- LOGW ( "%s, no need to add the same tvin path.\n", "TV" );
- return 0;
- }
-
- for ( i = 0; i < 50; i++ ) {
- ret = VDIN_RmTvPath();
-
- if ( ret > 0 ) {
- LOGD ( "%s, remove tvin path ok, %d ms gone.\n", "TV", ( dly * i ) );
- break;
- } else {
- LOGW ( "%s, remove tvin path faild, %d ms gone.\n", "TV", ( dly * i ) );
- usleep ( dly * 1000 );
- }
- }
- } else {
- for ( i = 0; i < 50; i++ ) {
- ret = VDIN_RmDefPath();
-
- if ( ret > 0 ) {
- LOGD ( "%s, remove default path ok, %d ms gone.\n", "TV", ( dly * i ) );
- break;
- } else {
- LOGW ( "%s, remove default path faild, %d ms gone.\n", "TV", ( dly * i ) );
- usleep ( dly * 1000 );
- }
- }
- }
-
- for ( i = 0; i < 50; i++ ) {
- if ( pathid >= TV_PATH_VDIN_AMVIDEO && pathid < TV_PATH_DECODER_3D_AMVIDEO ) {
- if ( strcmp ( config_tv_path, "null" ) == 0 ) {
- ret = VDIN_AddVideoPath ( pathid );
- } else {
- ret = VDIN_AddPath ( config_tv_path );
- }
- } else {
- if ( strcmp ( config_default_path, "null" ) == 0 ) {
- ret = VDIN_AddVideoPath ( pathid );
- } else {
- ret = VDIN_AddPath ( config_default_path );
- }
- }
-
- if ( ret >= 0 ) {
- LOGD ( "%s, add pathid[%d] ok, %d ms gone.\n", "TV", pathid, i );
- break;
- } else {
- LOGW ( "%s, add pathid[%d] faild, %d ms gone.\n", "TV", pathid, i );
- usleep ( dly * 1000 );
- }
- }
-
- if ( pathid >= TV_PATH_VDIN_AMVIDEO && pathid < TV_PATH_MAX ) {
- m_pathid = pathid;
- }
-
- return ret;
+ int ret = -1;
+ int i = 0, dly = 10;
+ tv_path_type_t pathtype;
+
+ if ( pathid >= TV_PATH_VDIN_AMVIDEO && pathid < TV_PATH_DECODER_3D_AMVIDEO ) {
+ pathtype = TV_PATH_TYPE_TVIN;
+ } else {
+ pathtype = TV_PATH_TYPE_DEFAULT;
+ }
+
+ if ( pathid >= TV_PATH_VDIN_AMVIDEO && pathid < TV_PATH_DECODER_3D_AMVIDEO ) {
+ if ( m_pathid == pathid ) {
+ LOGW ( "%s, no need to add the same tvin path.\n", "TV" );
+ return 0;
+ }
+
+ for ( i = 0; i < 50; i++ ) {
+ ret = VDIN_RmTvPath();
+
+ if ( ret > 0 ) {
+ LOGD ( "%s, remove tvin path ok, %d ms gone.\n", "TV", ( dly * i ) );
+ break;
+ } else {
+ LOGW ( "%s, remove tvin path faild, %d ms gone.\n", "TV", ( dly * i ) );
+ usleep ( dly * 1000 );
+ }
+ }
+ } else {
+ for ( i = 0; i < 50; i++ ) {
+ ret = VDIN_RmDefPath();
+
+ if ( ret > 0 ) {
+ LOGD ( "%s, remove default path ok, %d ms gone.\n", "TV", ( dly * i ) );
+ break;
+ } else {
+ LOGW ( "%s, remove default path faild, %d ms gone.\n", "TV", ( dly * i ) );
+ usleep ( dly * 1000 );
+ }
+ }
+ }
+
+ for ( i = 0; i < 50; i++ ) {
+ if ( pathid >= TV_PATH_VDIN_AMVIDEO && pathid < TV_PATH_DECODER_3D_AMVIDEO ) {
+ if ( strcmp ( config_tv_path, "null" ) == 0 ) {
+ ret = VDIN_AddVideoPath ( pathid );
+ } else {
+ ret = VDIN_AddPath ( config_tv_path );
+ }
+ } else {
+ if ( strcmp ( config_default_path, "null" ) == 0 ) {
+ ret = VDIN_AddVideoPath ( pathid );
+ } else {
+ ret = VDIN_AddPath ( config_default_path );
+ }
+ }
+
+ if ( ret >= 0 ) {
+ LOGD ( "%s, add pathid[%d] ok, %d ms gone.\n", "TV", pathid, i );
+ break;
+ } else {
+ LOGW ( "%s, add pathid[%d] faild, %d ms gone.\n", "TV", pathid, i );
+ usleep ( dly * 1000 );
+ }
+ }
+
+ if ( pathid >= TV_PATH_VDIN_AMVIDEO && pathid < TV_PATH_MAX ) {
+ m_pathid = pathid;
+ }
+
+ return ret;
}
int CTvin::Tvin_RemovePath ( tv_path_type_t pathtype )
{
- int ret = -1;
- int i = 0, dly = 10;
-
- for ( i = 0; i < 500; i++ ) {
- ret = Tvin_CheckPathActive ( pathtype, 0 );
-
- if ( ret == TV_PATH_STATUS_INACTIVE ) {
- LOGD ( "%s, check path is inactive, %d ms gone.\n", "TV", ( dly * i ) );
- break;
- } else if ( ret == TV_PATH_STATUS_INACTIVE || ret == TV_PATH_STATUS_ERROR ) {
- usleep ( dly * 1000 );
- } else {
- break;
- }
- }
-
- if ( i == 500 ) {
- LOGE ( "%s, check path active faild, %d ms gone.\n", "TV", ( dly * i ) );
- }
-
- if ( pathtype == TV_PATH_TYPE_DEFAULT ) {
- for ( i = 0; i < 50; i++ ) {
- ret = VDIN_RmDefPath();
-
- if ( ret > 0 ) {
- LOGD ( "%s, remove default path ok, %d ms gone.\n", "TV", ( dly * i ) );
- break;
- } else {
- LOGW ( "%s, remove default path faild, %d ms gone.\n", "TV", ( dly * i ) );
- usleep ( dly * 1000 );
- }
- }
- } else if ( pathtype == TV_PATH_TYPE_TVIN ) {
- for ( i = 0; i < 50; i++ ) {
- ret = VDIN_RmTvPath();
-
- if ( ret > 0 ) {
- LOGD ( "%s, remove tvin path ok, %d ms gone.\n", "TV", ( dly * i ) );
- break;
- } else {
- LOGW ( "%s, remove tvin path faild, %d ms gone.\n", "TV", ( dly * i ) );
- usleep ( dly * 1000 );
- }
- }
-
- m_pathid = TV_PATH_DECODER_3D_AMVIDEO;
- } else if ( pathtype == TV_PATH_TYPE_TVIN_PREVIEW ) {
- for ( i = 0; i < 50; i++ ) {
- ret = VDIN_RmPreviewPath();
-
- if ( ret > 0 ) {
- LOGD ( "%s, remove preview path ok, %d ms gone.\n", "TV", ( dly * i ) );
- break;
- } else {
- LOGW ( "%s, remove preview path faild, %d ms gone.\n", "TV", ( dly * i ) );
- usleep ( dly * 1000 );
- }
- }
-
- m_pathid = TV_PATH_DECODER_NEW3D_WITHOUTPPMGR_AMVIDEO;
- } else {
- ret = -1;
- }
-
- return ret;
+ int ret = -1;
+ int i = 0, dly = 10;
+
+ for ( i = 0; i < 500; i++ ) {
+ ret = Tvin_CheckPathActive ( pathtype, 0 );
+
+ if ( ret == TV_PATH_STATUS_INACTIVE ) {
+ LOGD ( "%s, check path is inactive, %d ms gone.\n", "TV", ( dly * i ) );
+ break;
+ } else if ( ret == TV_PATH_STATUS_INACTIVE || ret == TV_PATH_STATUS_ERROR ) {
+ usleep ( dly * 1000 );
+ } else {
+ break;
+ }
+ }
+
+ if ( i == 500 ) {
+ LOGE ( "%s, check path active faild, %d ms gone.\n", "TV", ( dly * i ) );
+ }
+
+ if ( pathtype == TV_PATH_TYPE_DEFAULT ) {
+ for ( i = 0; i < 50; i++ ) {
+ ret = VDIN_RmDefPath();
+
+ if ( ret > 0 ) {
+ LOGD ( "%s, remove default path ok, %d ms gone.\n", "TV", ( dly * i ) );
+ break;
+ } else {
+ LOGW ( "%s, remove default path faild, %d ms gone.\n", "TV", ( dly * i ) );
+ usleep ( dly * 1000 );
+ }
+ }
+ } else if ( pathtype == TV_PATH_TYPE_TVIN ) {
+ for ( i = 0; i < 50; i++ ) {
+ ret = VDIN_RmTvPath();
+
+ if ( ret > 0 ) {
+ LOGD ( "%s, remove tvin path ok, %d ms gone.\n", "TV", ( dly * i ) );
+ break;
+ } else {
+ LOGW ( "%s, remove tvin path faild, %d ms gone.\n", "TV", ( dly * i ) );
+ usleep ( dly * 1000 );
+ }
+ }
+
+ m_pathid = TV_PATH_DECODER_3D_AMVIDEO;
+ } else if ( pathtype == TV_PATH_TYPE_TVIN_PREVIEW ) {
+ for ( i = 0; i < 50; i++ ) {
+ ret = VDIN_RmPreviewPath();
+
+ if ( ret > 0 ) {
+ LOGD ( "%s, remove preview path ok, %d ms gone.\n", "TV", ( dly * i ) );
+ break;
+ } else {
+ LOGW ( "%s, remove preview path faild, %d ms gone.\n", "TV", ( dly * i ) );
+ usleep ( dly * 1000 );
+ }
+ }
+
+ m_pathid = TV_PATH_DECODER_NEW3D_WITHOUTPPMGR_AMVIDEO;
+ } else {
+ ret = -1;
+ }
+
+ return ret;
}
int CTvin::Tvin_CheckPathActive ( tv_path_type_t path_type, int isCheckD2D3 )
{
- FILE *f;
- char path[256];
- char decoder_str[20] = "default {";
- char tvin_str[20] = "tvpath {";
- char decoder_active_str[20] = "decoder(1)";
- char tvin_active_str[20] = "vdin0(1)";
- char di_active_str[20] = "deinterlace(1)";
- char d2d3_active_str[20] = "d2d3(1)";
- char decoder_inactive_str[20] = "decoder(0)";
- char tvin_inactive_str[20] = "vdin0(0)";
- char di_inactive_str[20] = "deinterlace(0)";
- char d2d3_inactive_str[20] = "d2d3(0)";
-
- char *str_find = NULL;
- char *active_str = NULL;
- char *inactive_str = NULL;
- int mount_freq;
- int match;
- int is_active = TV_PATH_STATUS_INACTIVE;
-
- memset ( path, 0, 255 );
-
- f = fopen ( "/sys/class/vfm/map", "r" );
-
- if ( !f ) {
- LOGE ( "%s, can not open /sys/class/vfm/map!\n", "TV" );
- return TV_PATH_STATUS_NO_DEV;
- }
-
- while ( fgets ( path, 254, f ) ) {
- if ( path_type == TV_PATH_TYPE_DEFAULT ) {
- str_find = strstr ( path, decoder_str );
- active_str = decoder_active_str;
- inactive_str = decoder_inactive_str;
- } else if ( path_type == TV_PATH_TYPE_TVIN || path_type == TV_PATH_TYPE_TVIN_PREVIEW ) {
- str_find = strstr ( path, tvin_str );
- active_str = tvin_active_str;
- inactive_str = tvin_inactive_str;
- } else {
- LOGW ( "%s, there is no %d path_type.\n", "TV", path_type );
- break;
- }
-
- if ( str_find ) {
- if ( isCheckD2D3 == 0 ) {
- if ( strstr ( str_find, active_str ) && strstr ( str_find, di_active_str ) ) {
- is_active = TV_PATH_STATUS_ACTIVE;
- //LOGD("%s, %s is active.\n", "TV", path);
- } else if ( strstr ( str_find, inactive_str )
- && ( strstr ( str_find, di_inactive_str ) || ( !strstr ( str_find, di_inactive_str ) ) )
- ) {
- is_active = TV_PATH_STATUS_INACTIVE;
- //LOGD("%s, %s is inactive.\n", "TV", path);
- } else {
- is_active = TV_PATH_STATUS_ERROR;
- LOGE ( "%s, %s is error!\n", "TV", path );
- }
-
- break;
- } else {
- if ( strstr ( str_find, active_str ) && strstr ( str_find, di_active_str ) && strstr ( str_find, d2d3_active_str ) ) {
- is_active = TV_PATH_STATUS_ACTIVE;
- //LOGD("%s, %s is active.\n", "TV", path);
- } else if ( strstr ( str_find, inactive_str )
- && ( strstr ( str_find, di_inactive_str ) || ( !strstr ( str_find, di_inactive_str ) ) )
- && ( strstr ( str_find, d2d3_inactive_str ) || ( !strstr ( str_find, d2d3_inactive_str ) ) )
- ) {
- is_active = TV_PATH_STATUS_INACTIVE;
- //LOGD("%s, %s is inactive.\n", "TV", path);
- } else {
- is_active = TV_PATH_STATUS_ERROR;
- LOGE ( "%s, %s is error!\n", "TV", path );
- }
-
- break;
- }
- }
- }
-
- fclose ( f );
-
- return is_active;
+ FILE *f;
+ char path[256];
+ char decoder_str[20] = "default {";
+ char tvin_str[20] = "tvpath {";
+ char decoder_active_str[20] = "decoder(1)";
+ char tvin_active_str[20] = "vdin0(1)";
+ char di_active_str[20] = "deinterlace(1)";
+ char d2d3_active_str[20] = "d2d3(1)";
+ char decoder_inactive_str[20] = "decoder(0)";
+ char tvin_inactive_str[20] = "vdin0(0)";
+ char di_inactive_str[20] = "deinterlace(0)";
+ char d2d3_inactive_str[20] = "d2d3(0)";
+
+ char *str_find = NULL;
+ char *active_str = NULL;
+ char *inactive_str = NULL;
+ int mount_freq;
+ int match;
+ int is_active = TV_PATH_STATUS_INACTIVE;
+
+ memset ( path, 0, 255 );
+
+ f = fopen ( "/sys/class/vfm/map", "r" );
+
+ if ( !f ) {
+ LOGE ( "%s, can not open /sys/class/vfm/map!\n", "TV" );
+ return TV_PATH_STATUS_NO_DEV;
+ }
+
+ while ( fgets ( path, 254, f ) ) {
+ if ( path_type == TV_PATH_TYPE_DEFAULT ) {
+ str_find = strstr ( path, decoder_str );
+ active_str = decoder_active_str;
+ inactive_str = decoder_inactive_str;
+ } else if ( path_type == TV_PATH_TYPE_TVIN || path_type == TV_PATH_TYPE_TVIN_PREVIEW ) {
+ str_find = strstr ( path, tvin_str );
+ active_str = tvin_active_str;
+ inactive_str = tvin_inactive_str;
+ } else {
+ LOGW ( "%s, there is no %d path_type.\n", "TV", path_type );
+ break;
+ }
+
+ if ( str_find ) {
+ if ( isCheckD2D3 == 0 ) {
+ if ( strstr ( str_find, active_str ) && strstr ( str_find, di_active_str ) ) {
+ is_active = TV_PATH_STATUS_ACTIVE;
+ //LOGD("%s, %s is active.\n", "TV", path);
+ } else if ( strstr ( str_find, inactive_str )
+ && ( strstr ( str_find, di_inactive_str ) || ( !strstr ( str_find, di_inactive_str ) ) )
+ ) {
+ is_active = TV_PATH_STATUS_INACTIVE;
+ //LOGD("%s, %s is inactive.\n", "TV", path);
+ } else {
+ is_active = TV_PATH_STATUS_ERROR;
+ LOGE ( "%s, %s is error!\n", "TV", path );
+ }
+
+ break;
+ } else {
+ if ( strstr ( str_find, active_str ) && strstr ( str_find, di_active_str ) && strstr ( str_find, d2d3_active_str ) ) {
+ is_active = TV_PATH_STATUS_ACTIVE;
+ //LOGD("%s, %s is active.\n", "TV", path);
+ } else if ( strstr ( str_find, inactive_str )
+ && ( strstr ( str_find, di_inactive_str ) || ( !strstr ( str_find, di_inactive_str ) ) )
+ && ( strstr ( str_find, d2d3_inactive_str ) || ( !strstr ( str_find, d2d3_inactive_str ) ) )
+ ) {
+ is_active = TV_PATH_STATUS_INACTIVE;
+ //LOGD("%s, %s is inactive.\n", "TV", path);
+ } else {
+ is_active = TV_PATH_STATUS_ERROR;
+ LOGE ( "%s, %s is error!\n", "TV", path );
+ }
+
+ break;
+ }
+ }
+ }
+
+ fclose ( f );
+
+ return is_active;
}
int CTvin::Tv_init_afe ( void )
{
- AFE_OpenModule();
- return 0;
+ AFE_OpenModule();
+ return 0;
}
int CTvin::Tv_uninit_afe ( void )
{
- AFE_CloseModule();
- return 0;
+ AFE_CloseModule();
+ return 0;
}
int CTvin::get_hdmi_sampling_rate()
{
- int fd;
- int val = 0;
- char bcmd[16];
- fd = open ( "/sys/module/tvin_hdmirx/parameters/audio_sample_rate", O_RDONLY );
+ int fd;
+ int val = 0;
+ char bcmd[16];
+ fd = open ( "/sys/module/tvin_hdmirx/parameters/audio_sample_rate", O_RDONLY );
- if ( fd >= 0 ) {
- read ( fd, bcmd, sizeof ( bcmd ) );
- val = strtol ( bcmd, NULL, 10 );
- close ( fd );
- }
+ if ( fd >= 0 ) {
+ read ( fd, bcmd, sizeof ( bcmd ) );
+ val = strtol ( bcmd, NULL, 10 );
+ close ( fd );
+ }
- return val;
+ return val;
}
//**************************************************************************
CTvin::CTvinSigDetect::CTvinSigDetect ( CTvin *pTvin )
{
- m_cur_sig_info.trans_fmt = TVIN_TFMT_2D;
- m_cur_sig_info.fmt = TVIN_SIG_FMT_NULL;
- m_cur_sig_info.status = TVIN_SIG_STATUS_NULL;
- m_cur_sig_info.reserved = 0;
+ m_cur_sig_info.trans_fmt = TVIN_TFMT_2D;
+ m_cur_sig_info.fmt = TVIN_SIG_FMT_NULL;
+ m_cur_sig_info.status = TVIN_SIG_STATUS_NULL;
+ m_cur_sig_info.reserved = 0;
- m_pre_sig_info = m_cur_sig_info;
- mDetectState = STATE_STOPED;
- mpObserver = NULL;
- mpTvin = pTvin;
- mKeepNosigTime = 0;
- m_is_nosig_checktimes_once_valid = false;
+ m_pre_sig_info = m_cur_sig_info;
+ mDetectState = STATE_STOPED;
+ mpObserver = NULL;
+ mpTvin = pTvin;
+ mKeepNosigTime = 0;
+ m_is_nosig_checktimes_once_valid = false;
}
CTvin::CTvinSigDetect::~CTvinSigDetect()
@@ -3047,246 +3047,246 @@ CTvin::CTvinSigDetect::~CTvinSigDetect()
int CTvin::CTvinSigDetect::startDetect()
{
- LOGD ( "startDetect()" );
+ LOGD ( "startDetect()" );
- if ( mDetectState == STATE_RUNNING || mDetectState == STATE_PAUSE ) {
- return mDetectState;
- }
+ if ( mDetectState == STATE_RUNNING || mDetectState == STATE_PAUSE ) {
+ return mDetectState;
+ }
- m_cur_sig_info.trans_fmt = TVIN_TFMT_2D;
- m_cur_sig_info.fmt = TVIN_SIG_FMT_NULL;
- m_cur_sig_info.status = TVIN_SIG_STATUS_NULL;
- m_cur_sig_info.reserved = 0;
+ m_cur_sig_info.trans_fmt = TVIN_TFMT_2D;
+ m_cur_sig_info.fmt = TVIN_SIG_FMT_NULL;
+ m_cur_sig_info.status = TVIN_SIG_STATUS_NULL;
+ m_cur_sig_info.reserved = 0;
- m_pre_sig_info = m_cur_sig_info;
+ m_pre_sig_info = m_cur_sig_info;
- //
- m_request_pause_detect = false;
- this->run();
- return mDetectState;
+ //
+ m_request_pause_detect = false;
+ this->run();
+ return mDetectState;
}
int CTvin::CTvinSigDetect::initSigState()
{
- m_cur_sig_info.trans_fmt = TVIN_TFMT_2D;
- m_cur_sig_info.fmt = TVIN_SIG_FMT_NULL;
- m_cur_sig_info.status = TVIN_SIG_STATUS_NULL;
- m_cur_sig_info.reserved = 0;
- m_pre_sig_info = m_cur_sig_info;
- mKeepNosigTime = 0;
- m_is_nosig_checktimes_once_valid = false;
- return 0;
+ m_cur_sig_info.trans_fmt = TVIN_TFMT_2D;
+ m_cur_sig_info.fmt = TVIN_SIG_FMT_NULL;
+ m_cur_sig_info.status = TVIN_SIG_STATUS_NULL;
+ m_cur_sig_info.reserved = 0;
+ m_pre_sig_info = m_cur_sig_info;
+ mKeepNosigTime = 0;
+ m_is_nosig_checktimes_once_valid = false;
+ return 0;
}
int CTvin::CTvinSigDetect::stopDetect()
{
- CMutex::Autolock _l ( mLock );
- LOGD ( "stopDetect()" );
- requestExit();
- return 0;
+ CMutex::Autolock _l ( mLock );
+ LOGD ( "stopDetect()" );
+ requestExit();
+ return 0;
}
int CTvin::CTvinSigDetect::pauseDetect()
{
- CMutex::Autolock _l ( mLock );
- LOGD ( "pauseDetect()" );
- m_request_pause_detect = true;
- return 0;
+ CMutex::Autolock _l ( mLock );
+ LOGD ( "pauseDetect()" );
+ m_request_pause_detect = true;
+ return 0;
}
int CTvin::CTvinSigDetect::requestAndWaitPauseDetect()
{
- CMutex::Autolock _l ( mLock );
- LOGD ( "requestAndWaitPauseDetect()" );
- m_request_pause_detect = true;
+ CMutex::Autolock _l ( mLock );
+ LOGD ( "requestAndWaitPauseDetect()" );
+ m_request_pause_detect = true;
- if ( mDetectState == STATE_RUNNING ) {
- mRequestPauseCondition.wait ( mLock );
- }
+ if ( mDetectState == STATE_RUNNING ) {
+ mRequestPauseCondition.wait ( mLock );
+ }
- return 0;
+ return 0;
}
int CTvin::CTvinSigDetect::resumeDetect()
{
- CMutex::Autolock _l ( mLock );
- LOGD ( "resumeDetect()" );
- m_request_pause_detect = false;
- mDetectPauseCondition.signal();
- return 0;
+ CMutex::Autolock _l ( mLock );
+ LOGD ( "resumeDetect()" );
+ m_request_pause_detect = false;
+ mDetectPauseCondition.signal();
+ return 0;
}
void CTvin::CTvinSigDetect::setVdinNoSigCheckKeepTimes(int times, bool isOnce)
{
- LOGD("setVdinNoSigCheckKeepTimes mKeepNosigTime = %d, times = %d", mKeepNosigTime, times);
- mKeepNosigTime = times;
- m_is_nosig_checktimes_once_valid = isOnce;
+ LOGD("setVdinNoSigCheckKeepTimes mKeepNosigTime = %d, times = %d", mKeepNosigTime, times);
+ mKeepNosigTime = times;
+ m_is_nosig_checktimes_once_valid = isOnce;
}
int CTvin::CTvinSigDetect::Tv_TvinSigDetect ( int &sleeptime )
{
- mpTvin->VDIN_GetSignalInfo ( &m_cur_sig_info ); //get info
- //set no sig check times
- static long long sNosigKeepTime = 0;
- //LOGD("stime=%d status=%d, sNosigKeepTime = %d, mKeepNosigTime = %d", sleeptime, m_cur_sig_info.status, sNosigKeepTime, mKeepNosigTime);
- if (m_cur_sig_info.status == TVIN_SIG_STATUS_NOSIG || m_cur_sig_info.status == TVIN_SIG_STATUS_NULL) {
- sNosigKeepTime += sleeptime;
- if (sNosigKeepTime > mKeepNosigTime) { //real no sig
- //cur is no sig
- if (m_is_nosig_checktimes_once_valid) { //just once change,is nosig, and default it
- m_is_nosig_checktimes_once_valid = false;
- mKeepNosigTime = 0;
- }
- //
- } else { //not
- m_cur_sig_info.status = m_pre_sig_info.status;
- }
- } else {
- sNosigKeepTime = 0;
- //
- if (m_is_nosig_checktimes_once_valid) { //just once change,not nosig,default is
- m_is_nosig_checktimes_once_valid = false;
- mKeepNosigTime = 0;
- }
- //
- }
-
- //if state change
- if ( m_cur_sig_info.status != m_pre_sig_info.status ) {
- //sleeptime = 200;
-
- if ( m_cur_sig_info.status == TVIN_SIG_STATUS_STABLE ) { // to stable
- //
- sleeptime = 200;
- mpObserver->onSigToStable();
- } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_STABLE && m_cur_sig_info.status == TVIN_SIG_STATUS_UNSTABLE ) { //stable to unstable
- //
- //mVpp.Tvin_SetVideoScreenColorType ( TV_SIGNAL_BLACK_PATTERN );
- sleeptime = 20;
- mpObserver->onSigStableToUnstable();
- } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_STABLE && m_cur_sig_info.status == TVIN_SIG_STATUS_NOTSUP ) {
- //
- sleeptime = 20;
- mpObserver->onSigStableToUnSupport();
- } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_STABLE && m_cur_sig_info.status == TVIN_SIG_STATUS_NOSIG ) {
- //
- sleeptime = 20;
- mpObserver->onSigStableToNoSig();
- } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_UNSTABLE && m_cur_sig_info.status == TVIN_SIG_STATUS_NOTSUP ) {
- //
- sleeptime = 20;
- mpObserver->onSigUnStableToUnSupport();
- } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_UNSTABLE && m_cur_sig_info.status == TVIN_SIG_STATUS_NOSIG ) {
- //
- sleeptime = 20;
- mpObserver->onSigUnStableToNoSig();
- } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_NULL && m_cur_sig_info.status == TVIN_SIG_STATUS_NOSIG ) {
- //
- sleeptime = 20;
- mpObserver->onSigNullToNoSig();
- } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_NOSIG && m_cur_sig_info.status == TVIN_SIG_STATUS_UNSTABLE ) {
- //
- sleeptime = 20;
- mpObserver->onSigNoSigToUnstable();
- } else {
- sleeptime = 20;
- }
- } else { //state not change
- //sleeptime = 500;
-
- switch ( m_cur_sig_info.status ) {
- case TVIN_SIG_STATUS_STABLE:
- //
- sleeptime = 20;//sleeptime = 500;
- mpObserver->onSigStillStable();
- break;
-
- case TVIN_SIG_STATUS_NOTSUP:
- //
- sleeptime = 20;
- mpObserver->onSigStillNoSupport();
- break;
-
- case TVIN_SIG_STATUS_UNSTABLE:
- //
- sleeptime = 20;
- mpObserver->onSigStillUnstable();
- break;
-
- case TVIN_SIG_STATUS_NOSIG:
- //
- sleeptime = 20;
- mpObserver->onSigStillNosig();
- break;
-
- case TVIN_SIG_STATUS_NULL:
- //
- sleeptime = 20;
- mpObserver->onSigStillNull();
- break;
-
- default:
- //
- sleeptime = 20;
- mpObserver->onSigStillNull();
- break;
- }
- }
-
- m_pre_sig_info = m_cur_sig_info;//backup info
-
- return sleeptime;
+ mpTvin->VDIN_GetSignalInfo ( &m_cur_sig_info ); //get info
+ //set no sig check times
+ static long long sNosigKeepTime = 0;
+ //LOGD("stime=%d status=%d, sNosigKeepTime = %d, mKeepNosigTime = %d", sleeptime, m_cur_sig_info.status, sNosigKeepTime, mKeepNosigTime);
+ if(m_cur_sig_info.status == TVIN_SIG_STATUS_NOSIG || m_cur_sig_info.status == TVIN_SIG_STATUS_NULL) {
+ sNosigKeepTime += sleeptime;
+ if(sNosigKeepTime > mKeepNosigTime) { //real no sig
+ //cur is no sig
+ if(m_is_nosig_checktimes_once_valid) { //just once change,is nosig, and default it
+ m_is_nosig_checktimes_once_valid = false;
+ mKeepNosigTime = 0;
+ }
+ //
+ } else { //not
+ m_cur_sig_info.status = m_pre_sig_info.status;
+ }
+ } else {
+ sNosigKeepTime = 0;
+ //
+ if(m_is_nosig_checktimes_once_valid) { //just once change,not nosig,default is
+ m_is_nosig_checktimes_once_valid = false;
+ mKeepNosigTime = 0;
+ }
+ //
+ }
+
+ //if state change
+ if ( m_cur_sig_info.status != m_pre_sig_info.status ) {
+ //sleeptime = 200;
+
+ if ( m_cur_sig_info.status == TVIN_SIG_STATUS_STABLE ) { // to stable
+ //
+ sleeptime = 200;
+ mpObserver->onSigToStable();
+ } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_STABLE && m_cur_sig_info.status == TVIN_SIG_STATUS_UNSTABLE ) { //stable to unstable
+ //
+ //mVpp.Tvin_SetVideoScreenColorType ( TV_SIGNAL_BLACK_PATTERN );
+ sleeptime = 20;
+ mpObserver->onSigStableToUnstable();
+ } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_STABLE && m_cur_sig_info.status == TVIN_SIG_STATUS_NOTSUP ) {
+ //
+ sleeptime = 20;
+ mpObserver->onSigStableToUnSupport();
+ } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_STABLE && m_cur_sig_info.status == TVIN_SIG_STATUS_NOSIG ) {
+ //
+ sleeptime = 20;
+ mpObserver->onSigStableToNoSig();
+ } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_UNSTABLE && m_cur_sig_info.status == TVIN_SIG_STATUS_NOTSUP ) {
+ //
+ sleeptime = 20;
+ mpObserver->onSigUnStableToUnSupport();
+ } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_UNSTABLE && m_cur_sig_info.status == TVIN_SIG_STATUS_NOSIG ) {
+ //
+ sleeptime = 20;
+ mpObserver->onSigUnStableToNoSig();
+ } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_NULL && m_cur_sig_info.status == TVIN_SIG_STATUS_NOSIG ) {
+ //
+ sleeptime = 20;
+ mpObserver->onSigNullToNoSig();
+ } else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_NOSIG && m_cur_sig_info.status == TVIN_SIG_STATUS_UNSTABLE ) {
+ //
+ sleeptime = 20;
+ mpObserver->onSigNoSigToUnstable();
+ } else {
+ sleeptime = 20;
+ }
+ } else { //state not change
+ //sleeptime = 500;
+
+ switch ( m_cur_sig_info.status ) {
+ case TVIN_SIG_STATUS_STABLE:
+ //
+ sleeptime = 20;//sleeptime = 500;
+ mpObserver->onSigStillStable();
+ break;
+
+ case TVIN_SIG_STATUS_NOTSUP:
+ //
+ sleeptime = 20;
+ mpObserver->onSigStillNoSupport();
+ break;
+
+ case TVIN_SIG_STATUS_UNSTABLE:
+ //
+ sleeptime = 20;
+ mpObserver->onSigStillUnstable();
+ break;
+
+ case TVIN_SIG_STATUS_NOSIG:
+ //
+ sleeptime = 20;
+ mpObserver->onSigStillNosig();
+ break;
+
+ case TVIN_SIG_STATUS_NULL:
+ //
+ sleeptime = 20;
+ mpObserver->onSigStillNull();
+ break;
+
+ default:
+ //
+ sleeptime = 20;
+ mpObserver->onSigStillNull();
+ break;
+ }
+ }
+
+ m_pre_sig_info = m_cur_sig_info;//backup info
+
+ return sleeptime;
}
bool CTvin::CTvinSigDetect::threadLoop()
{
- //enter onStart()
- if ( mpObserver == NULL ) {
- return false;
- }
-
- int sleeptime = 200;//ms
- mDetectState = STATE_RUNNING;
- mpObserver->onSigDetectEnter();
-
- while ( !exitPending() ) { //requietexit() or requietexitWait() not call
- while ( m_request_pause_detect ) {
- mRequestPauseCondition.broadcast();
- mLock.lock();
- mDetectState = STATE_PAUSE;
- mDetectPauseCondition.wait ( mLock ); //first unlock,when return,lock again,so need,call unlock
- mDetectState = STATE_RUNNING;
- mLock.unlock();
- }
-
- //
- mpObserver->onLoop();
- Tv_TvinSigDetect ( sleeptime );
- //å¯ä»¥ä¼˜åŒ–
- if ( !m_request_pause_detect ) {
- usleep ( sleeptime * 1000 );
- }
- }
-
- mDetectState = STATE_STOPED;
- mRequestPauseCondition.broadcast();
- //exit
- //return true, run again, return false,not run.
- return false;
+ //enter onStart()
+ if ( mpObserver == NULL ) {
+ return false;
+ }
+
+ int sleeptime = 200;//ms
+ mDetectState = STATE_RUNNING;
+ mpObserver->onSigDetectEnter();
+
+ while ( !exitPending() ) { //requietexit() or requietexitWait() not call
+ while ( m_request_pause_detect ) {
+ mRequestPauseCondition.broadcast();
+ mLock.lock();
+ mDetectState = STATE_PAUSE;
+ mDetectPauseCondition.wait ( mLock ); //first unlock,when return,lock again,so need,call unlock
+ mDetectState = STATE_RUNNING;
+ mLock.unlock();
+ }
+
+ //
+ mpObserver->onLoop();
+ Tv_TvinSigDetect ( sleeptime );
+ //å¯ä»¥ä¼˜åŒ–
+ if ( !m_request_pause_detect ) {
+ usleep ( sleeptime * 1000 );
+ }
+ }
+
+ mDetectState = STATE_STOPED;
+ mRequestPauseCondition.broadcast();
+ //exit
+ //return true, run again, return false,not run.
+ return false;
}
v4l2_std_id CTvin::CvbsFtmToV4l2ColorStd(tvin_sig_fmt_t fmt)
{
- v4l2_std_id v4l2_std;
- if (fmt == TVIN_SIG_FMT_CVBS_NTSC_M || fmt == TVIN_SIG_FMT_CVBS_NTSC_443) {
- v4l2_std = V4L2_COLOR_STD_NTSC;
- } else if (fmt >= TVIN_SIG_FMT_CVBS_PAL_I && fmt <= TVIN_SIG_FMT_CVBS_PAL_CN) {
- v4l2_std = V4L2_COLOR_STD_PAL;
- } else if (fmt == TVIN_SIG_FMT_CVBS_SECAM) {
- v4l2_std = V4L2_COLOR_STD_SECAM;
- } else {
- v4l2_std = V4L2_COLOR_STD_PAL;
- }
- return v4l2_std;
+ v4l2_std_id v4l2_std;
+ if(fmt == TVIN_SIG_FMT_CVBS_NTSC_M || fmt == TVIN_SIG_FMT_CVBS_NTSC_443) {
+ v4l2_std = V4L2_COLOR_STD_NTSC;
+ } else if(fmt >= TVIN_SIG_FMT_CVBS_PAL_I && fmt <= TVIN_SIG_FMT_CVBS_PAL_CN) {
+ v4l2_std = V4L2_COLOR_STD_PAL;
+ } else if(fmt == TVIN_SIG_FMT_CVBS_SECAM) {
+ v4l2_std = V4L2_COLOR_STD_SECAM;
+ } else {
+ v4l2_std = V4L2_COLOR_STD_PAL;
+ }
+ return v4l2_std;
}
//**************************************************************************
diff --git a/tvapi/libtv/tvin/CTvin.h b/tvapi/libtv/tvin/CTvin.h
index 3452f4a..3d4b444 100644
--- a/tvapi/libtv/tvin/CTvin.h
+++ b/tvapi/libtv/tvin/CTvin.h
@@ -25,48 +25,48 @@
#define DEPTH_LEVEL_2DTO3D 33
static const int DepthTable_2DTO3D[DEPTH_LEVEL_2DTO3D] = {
- -64, // -16
- -60, // -15
- -56, // -14
- -52, // -13
- -49, // -12
- -46, // -11
- -43, // -10
- -40, // -09
- -37, // -08
- -34, // -07
- -31, // -06
- -28, // -05
- -25, // -04
- -22, // -03
- -19, // -02
- -16, // -01
- -13, // 0
- 3, // 1
- 6, // 2
- 9, // 3
- 12, // 4
- 15, // 5
- 18, // 6
- 21, // 7
- 24, // 8
- 28, // 9
- 32, // 10
- 36, // 11
- 40, // 12
- 44, // 13
- 48, // 14
- 52, // 15
- 56, // 16
+ -64, // -16
+ -60, // -15
+ -56, // -14
+ -52, // -13
+ -49, // -12
+ -46, // -11
+ -43, // -10
+ -40, // -09
+ -37, // -08
+ -34, // -07
+ -31, // -06
+ -28, // -05
+ -25, // -04
+ -22, // -03
+ -19, // -02
+ -16, // -01
+ -13, // 0
+ 3, // 1
+ 6, // 2
+ 9, // 3
+ 12, // 4
+ 15, // 5
+ 18, // 6
+ 21, // 7
+ 24, // 8
+ 28, // 9
+ 32, // 10
+ 36, // 11
+ 40, // 12
+ 44, // 13
+ 48, // 14
+ 52, // 15
+ 56, // 16
};
enum {
- MEMP_VDIN_WITHOUT_3D = 0,
- MEMP_VDIN_WITH_3D,
- MEMP_DCDR_WITHOUT_3D,
- MEMP_DCDR_WITH_3D,
- MEMP_ATV_WITHOUT_3D,
- MEMP_ATV_WITH_3D,
+ MEMP_VDIN_WITHOUT_3D = 0,
+ MEMP_VDIN_WITH_3D,
+ MEMP_DCDR_WITHOUT_3D,
+ MEMP_DCDR_WITH_3D,
+ MEMP_ATV_WITHOUT_3D,
+ MEMP_ATV_WITH_3D,
};
// ***************************************************************************
@@ -74,57 +74,57 @@ enum {
// ***************************************************************************
/* tvin input port select */
typedef enum tvin_port_e {
- TVIN_PORT_NULL = 0x00000000,
- TVIN_PORT_MPEG0 = 0x00000100,
- TVIN_PORT_BT656 = 0x00000200,
- TVIN_PORT_BT601,
- TVIN_PORT_CAMERA,
- TVIN_PORT_VGA0 = 0x00000400,
- TVIN_PORT_VGA1,
- TVIN_PORT_VGA2,
- TVIN_PORT_VGA3,
- TVIN_PORT_VGA4,
- TVIN_PORT_VGA5,
- TVIN_PORT_VGA6,
- TVIN_PORT_VGA7,
- TVIN_PORT_COMP0 = 0x00000800,
- TVIN_PORT_COMP1,
- TVIN_PORT_COMP2,
- TVIN_PORT_COMP3,
- TVIN_PORT_COMP4,
- TVIN_PORT_COMP5,
- TVIN_PORT_COMP6,
- TVIN_PORT_COMP7,
- TVIN_PORT_CVBS0 = 0x00001000,
- TVIN_PORT_CVBS1,
- TVIN_PORT_CVBS2,
- TVIN_PORT_CVBS3, //as atv demod to tvafe
- TVIN_PORT_CVBS4,
- TVIN_PORT_CVBS5,
- TVIN_PORT_CVBS6,
- TVIN_PORT_CVBS7,
- TVIN_PORT_SVIDEO0 = 0x00002000,
- TVIN_PORT_SVIDEO1,
- TVIN_PORT_SVIDEO2,
- TVIN_PORT_SVIDEO3,
- TVIN_PORT_SVIDEO4,
- TVIN_PORT_SVIDEO5,
- TVIN_PORT_SVIDEO6,
- TVIN_PORT_SVIDEO7,
- TVIN_PORT_HDMI0 = 0x00004000,
- TVIN_PORT_HDMI1,
- TVIN_PORT_HDMI2,
- TVIN_PORT_HDMI3,
- TVIN_PORT_HDMI4,
- TVIN_PORT_HDMI5,
- TVIN_PORT_HDMI6,
- TVIN_PORT_HDMI7,
- TVIN_PORT_DVIN0 = 0x00008000,
- TVIN_PORT_VIU = 0x0000C000,
- TVIN_PORT_MIPI = 0x00010000,
- TVIN_PORT_ISP = 0x00020000,
- TVIN_PORT_DTV = 0x00040000,
- TVIN_PORT_MAX = 0x80000000,
+ TVIN_PORT_NULL = 0x00000000,
+ TVIN_PORT_MPEG0 = 0x00000100,
+ TVIN_PORT_BT656 = 0x00000200,
+ TVIN_PORT_BT601,
+ TVIN_PORT_CAMERA,
+ TVIN_PORT_VGA0 = 0x00000400,
+ TVIN_PORT_VGA1,
+ TVIN_PORT_VGA2,
+ TVIN_PORT_VGA3,
+ TVIN_PORT_VGA4,
+ TVIN_PORT_VGA5,
+ TVIN_PORT_VGA6,
+ TVIN_PORT_VGA7,
+ TVIN_PORT_COMP0 = 0x00000800,
+ TVIN_PORT_COMP1,
+ TVIN_PORT_COMP2,
+ TVIN_PORT_COMP3,
+ TVIN_PORT_COMP4,
+ TVIN_PORT_COMP5,
+ TVIN_PORT_COMP6,
+ TVIN_PORT_COMP7,
+ TVIN_PORT_CVBS0 = 0x00001000,
+ TVIN_PORT_CVBS1,
+ TVIN_PORT_CVBS2,
+ TVIN_PORT_CVBS3, //as atv demod to tvafe
+ TVIN_PORT_CVBS4,
+ TVIN_PORT_CVBS5,
+ TVIN_PORT_CVBS6,
+ TVIN_PORT_CVBS7,
+ TVIN_PORT_SVIDEO0 = 0x00002000,
+ TVIN_PORT_SVIDEO1,
+ TVIN_PORT_SVIDEO2,
+ TVIN_PORT_SVIDEO3,
+ TVIN_PORT_SVIDEO4,
+ TVIN_PORT_SVIDEO5,
+ TVIN_PORT_SVIDEO6,
+ TVIN_PORT_SVIDEO7,
+ TVIN_PORT_HDMI0 = 0x00004000,
+ TVIN_PORT_HDMI1,
+ TVIN_PORT_HDMI2,
+ TVIN_PORT_HDMI3,
+ TVIN_PORT_HDMI4,
+ TVIN_PORT_HDMI5,
+ TVIN_PORT_HDMI6,
+ TVIN_PORT_HDMI7,
+ TVIN_PORT_DVIN0 = 0x00008000,
+ TVIN_PORT_VIU = 0x0000C000,
+ TVIN_PORT_MIPI = 0x00010000,
+ TVIN_PORT_ISP = 0x00020000,
+ TVIN_PORT_DTV = 0x00040000,
+ TVIN_PORT_MAX = 0x80000000,
} tvin_port_t;
const char *tvin_port_str(enum tvin_port_e port);
@@ -132,275 +132,275 @@ const char *tvin_port_str(enum tvin_port_e port);
/* tvin signal format table */
typedef enum tvin_sig_fmt_e {
- TVIN_SIG_FMT_NULL = 0,
- //VGA Formats
- TVIN_SIG_FMT_VGA_512X384P_60HZ_D147 = 0x001,
- TVIN_SIG_FMT_VGA_560X384P_60HZ_D147 = 0x002,
- TVIN_SIG_FMT_VGA_640X200P_59HZ_D924 = 0x003,
- TVIN_SIG_FMT_VGA_640X350P_85HZ_D080 = 0x004,
- TVIN_SIG_FMT_VGA_640X400P_59HZ_D940 = 0x005,
- TVIN_SIG_FMT_VGA_640X400P_85HZ_D080 = 0x006,
- TVIN_SIG_FMT_VGA_640X400P_59HZ_D638 = 0x007,
- TVIN_SIG_FMT_VGA_640X400P_56HZ_D416 = 0x008,
- TVIN_SIG_FMT_VGA_640X480P_66HZ_D619 = 0x009,
- TVIN_SIG_FMT_VGA_640X480P_66HZ_D667 = 0x00a,
- TVIN_SIG_FMT_VGA_640X480P_59HZ_D940 = 0x00b,
- TVIN_SIG_FMT_VGA_640X480P_60HZ_D000 = 0x00c,
- TVIN_SIG_FMT_VGA_640X480P_72HZ_D809 = 0x00d,
- TVIN_SIG_FMT_VGA_640X480P_75HZ_D000_A = 0x00e,
- TVIN_SIG_FMT_VGA_640X480P_85HZ_D008 = 0x00f,
- TVIN_SIG_FMT_VGA_640X480P_59HZ_D638 = 0x010,
- TVIN_SIG_FMT_VGA_640X480P_75HZ_D000_B = 0x011,
- TVIN_SIG_FMT_VGA_640X870P_75HZ_D000 = 0x012,
- TVIN_SIG_FMT_VGA_720X350P_70HZ_D086 = 0x013,
- TVIN_SIG_FMT_VGA_720X400P_85HZ_D039 = 0x014,
- TVIN_SIG_FMT_VGA_720X400P_70HZ_D086 = 0x015,
- TVIN_SIG_FMT_VGA_720X400P_87HZ_D849 = 0x016,
- TVIN_SIG_FMT_VGA_720X400P_59HZ_D940 = 0x017,
- TVIN_SIG_FMT_VGA_720X480P_59HZ_D940 = 0x018,
- TVIN_SIG_FMT_VGA_768X480P_59HZ_D896 = 0x019,
- TVIN_SIG_FMT_VGA_800X600P_56HZ_D250 = 0x01a,
- TVIN_SIG_FMT_VGA_800X600P_60HZ_D000 = 0x01b,
- TVIN_SIG_FMT_VGA_800X600P_60HZ_D000_A = 0x01c,
- TVIN_SIG_FMT_VGA_800X600P_60HZ_D317 = 0x01d,
- TVIN_SIG_FMT_VGA_800X600P_72HZ_D188 = 0x01e,
- TVIN_SIG_FMT_VGA_800X600P_75HZ_D000 = 0x01f,
- TVIN_SIG_FMT_VGA_800X600P_85HZ_D061 = 0x020,
- TVIN_SIG_FMT_VGA_832X624P_75HZ_D087 = 0x021,
- TVIN_SIG_FMT_VGA_848X480P_84HZ_D751 = 0x022,
- TVIN_SIG_FMT_VGA_960X600P_59HZ_D635 = 0x023,
- TVIN_SIG_FMT_VGA_1024X768P_59HZ_D278 = 0x024,
- TVIN_SIG_FMT_VGA_1024X768P_60HZ_D000 = 0x025,
- TVIN_SIG_FMT_VGA_1024X768P_60HZ_D000_A = 0x026,
- TVIN_SIG_FMT_VGA_1024X768P_60HZ_D000_B = 0x027,
- TVIN_SIG_FMT_VGA_1024X768P_74HZ_D927 = 0x028,
- TVIN_SIG_FMT_VGA_1024X768P_60HZ_D004 = 0x029,
- TVIN_SIG_FMT_VGA_1024X768P_70HZ_D069 = 0x02a,
- TVIN_SIG_FMT_VGA_1024X768P_75HZ_D029 = 0x02b,
- TVIN_SIG_FMT_VGA_1024X768P_84HZ_D997 = 0x02c,
- TVIN_SIG_FMT_VGA_1024X768P_74HZ_D925 = 0x02d,
- TVIN_SIG_FMT_VGA_1024X768P_60HZ_D020 = 0x02e,
- TVIN_SIG_FMT_VGA_1024X768P_70HZ_D008 = 0x02f,
- TVIN_SIG_FMT_VGA_1024X768P_75HZ_D782 = 0x030,
- TVIN_SIG_FMT_VGA_1024X768P_77HZ_D069 = 0x031,
- TVIN_SIG_FMT_VGA_1024X768P_71HZ_D799 = 0x032,
- TVIN_SIG_FMT_VGA_1024X1024P_60HZ_D000 = 0x033,
- TVIN_SIG_FMT_VGA_1152X864P_60HZ_D000 = 0x034,
- TVIN_SIG_FMT_VGA_1152X864P_70HZ_D012 = 0x035,
- TVIN_SIG_FMT_VGA_1152X864P_75HZ_D000 = 0x036,
- TVIN_SIG_FMT_VGA_1152X864P_84HZ_D999 = 0x037,
- TVIN_SIG_FMT_VGA_1152X870P_75HZ_D062 = 0x038,
- TVIN_SIG_FMT_VGA_1152X900P_65HZ_D950 = 0x039,
- TVIN_SIG_FMT_VGA_1152X900P_66HZ_D004 = 0x03a,
- TVIN_SIG_FMT_VGA_1152X900P_76HZ_D047 = 0x03b,
- TVIN_SIG_FMT_VGA_1152X900P_76HZ_D149 = 0x03c,
- TVIN_SIG_FMT_VGA_1280X720P_59HZ_D855 = 0x03d,
- TVIN_SIG_FMT_VGA_1280X720P_60HZ_D000_A = 0x03e,
- TVIN_SIG_FMT_VGA_1280X720P_60HZ_D000_B = 0x03f,
- TVIN_SIG_FMT_VGA_1280X720P_60HZ_D000_C = 0x040,
- TVIN_SIG_FMT_VGA_1280X720P_60HZ_D000_D = 0x041,
- TVIN_SIG_FMT_VGA_1280X768P_59HZ_D870 = 0x042,
- TVIN_SIG_FMT_VGA_1280X768P_59HZ_D995 = 0x043,
- TVIN_SIG_FMT_VGA_1280X768P_60HZ_D100 = 0x044,
- TVIN_SIG_FMT_VGA_1280X768P_85HZ_D000 = 0x045,
- TVIN_SIG_FMT_VGA_1280X768P_74HZ_D893 = 0x046,
- TVIN_SIG_FMT_VGA_1280X768P_84HZ_D837 = 0x047,
- TVIN_SIG_FMT_VGA_1280X800P_59HZ_D810 = 0x048,
- TVIN_SIG_FMT_VGA_1280X800P_59HZ_D810_A = 0x049,
- TVIN_SIG_FMT_VGA_1280X800P_60HZ_D000 = 0x04a,
- TVIN_SIG_FMT_VGA_1280X800P_85HZ_D000 = 0x04b,
- TVIN_SIG_FMT_VGA_1280X960P_60HZ_D000 = 0x04c,
- TVIN_SIG_FMT_VGA_1280X960P_60HZ_D000_A = 0x04d,
- TVIN_SIG_FMT_VGA_1280X960P_75HZ_D000 = 0x04e,
- TVIN_SIG_FMT_VGA_1280X960P_85HZ_D002 = 0x04f,
- TVIN_SIG_FMT_VGA_1280X1024P_60HZ_D020 = 0x050,
- TVIN_SIG_FMT_VGA_1280X1024P_60HZ_D020_A = 0x051,
- TVIN_SIG_FMT_VGA_1280X1024P_75HZ_D025 = 0x052,
- TVIN_SIG_FMT_VGA_1280X1024P_85HZ_D024 = 0x053,
- TVIN_SIG_FMT_VGA_1280X1024P_59HZ_D979 = 0x054,
- TVIN_SIG_FMT_VGA_1280X1024P_72HZ_D005 = 0x055,
- TVIN_SIG_FMT_VGA_1280X1024P_60HZ_D002 = 0x056,
- TVIN_SIG_FMT_VGA_1280X1024P_67HZ_D003 = 0x057,
- TVIN_SIG_FMT_VGA_1280X1024P_74HZ_D112 = 0x058,
- TVIN_SIG_FMT_VGA_1280X1024P_76HZ_D179 = 0x059,
- TVIN_SIG_FMT_VGA_1280X1024P_66HZ_D718 = 0x05a,
- TVIN_SIG_FMT_VGA_1280X1024P_66HZ_D677 = 0x05b,
- TVIN_SIG_FMT_VGA_1280X1024P_76HZ_D107 = 0x05c,
- TVIN_SIG_FMT_VGA_1280X1024P_59HZ_D996 = 0x05d,
- TVIN_SIG_FMT_VGA_1280X1024P_60HZ_D000 = 0x05e,
- TVIN_SIG_FMT_VGA_1360X768P_59HZ_D799 = 0x05f,
- TVIN_SIG_FMT_VGA_1360X768P_60HZ_D015 = 0x060,
- TVIN_SIG_FMT_VGA_1360X768P_60HZ_D015_A = 0x061,
- TVIN_SIG_FMT_VGA_1360X850P_60HZ_D000 = 0x062,
- TVIN_SIG_FMT_VGA_1360X1024P_60HZ_D000 = 0x063,
- TVIN_SIG_FMT_VGA_1366X768P_59HZ_D790 = 0x064,
- TVIN_SIG_FMT_VGA_1366X768P_60HZ_D000 = 0x065,
- TVIN_SIG_FMT_VGA_1400X1050P_59HZ_D978 = 0x066,
- TVIN_SIG_FMT_VGA_1440X900P_59HZ_D887 = 0x067,
- TVIN_SIG_FMT_VGA_1440X1080P_60HZ_D000 = 0x068,
- TVIN_SIG_FMT_VGA_1600X900P_60HZ_D000 = 0x069,
- TVIN_SIG_FMT_VGA_1600X1024P_60HZ_D000 = 0x06a,
- TVIN_SIG_FMT_VGA_1600X1200P_59HZ_D869 = 0x06b,
- TVIN_SIG_FMT_VGA_1600X1200P_60HZ_D000 = 0x06c,
- TVIN_SIG_FMT_VGA_1600X1200P_65HZ_D000 = 0x06d,
- TVIN_SIG_FMT_VGA_1600X1200P_70HZ_D000 = 0x06e,
- TVIN_SIG_FMT_VGA_1680X1050P_59HZ_D954 = 0x06f,
- TVIN_SIG_FMT_VGA_1680X1080P_60HZ_D000 = 0x070,
- TVIN_SIG_FMT_VGA_1920X1080P_49HZ_D929 = 0x071,
- TVIN_SIG_FMT_VGA_1920X1080P_59HZ_D963_A = 0x072,
- TVIN_SIG_FMT_VGA_1920X1080P_59HZ_D963 = 0x073,
- TVIN_SIG_FMT_VGA_1920X1080P_60HZ_D000 = 0x074,
- TVIN_SIG_FMT_VGA_1920X1200P_59HZ_D950 = 0x075,
- TVIN_SIG_FMT_VGA_1024X768P_60HZ_D000_C = 0x076,
- TVIN_SIG_FMT_VGA_1024X768P_60HZ_D000_D = 0x077,
- TVIN_SIG_FMT_VGA_1920X1200P_59HZ_D988 = 0x078,
- TVIN_SIG_FMT_VGA_1400X900P_60HZ_D000 = 0x079,
- TVIN_SIG_FMT_VGA_1680X1050P_60HZ_D000 = 0x07a,
- TVIN_SIG_FMT_VGA_800X600P_60HZ_D062 = 0x07b,
- TVIN_SIG_FMT_VGA_800X600P_60HZ_317_B = 0x07c,
- TVIN_SIG_FMT_VGA_RESERVE8 = 0x07d,
- TVIN_SIG_FMT_VGA_RESERVE9 = 0x07e,
- TVIN_SIG_FMT_VGA_RESERVE10 = 0x07f,
- TVIN_SIG_FMT_VGA_RESERVE11 = 0x080,
- TVIN_SIG_FMT_VGA_RESERVE12 = 0x081,
- TVIN_SIG_FMT_VGA_MAX = 0x082,
- TVIN_SIG_FMT_VGA_THRESHOLD = 0x200,
- //Component Formats
- TVIN_SIG_FMT_COMP_480P_60HZ_D000 = 0x201,
- TVIN_SIG_FMT_COMP_480I_59HZ_D940 = 0x202,
- TVIN_SIG_FMT_COMP_576P_50HZ_D000 = 0x203,
- TVIN_SIG_FMT_COMP_576I_50HZ_D000 = 0x204,
- TVIN_SIG_FMT_COMP_720P_59HZ_D940 = 0x205,
- TVIN_SIG_FMT_COMP_720P_50HZ_D000 = 0x206,
- TVIN_SIG_FMT_COMP_1080P_23HZ_D976 = 0x207,
- TVIN_SIG_FMT_COMP_1080P_24HZ_D000 = 0x208,
- TVIN_SIG_FMT_COMP_1080P_25HZ_D000 = 0x209,
- TVIN_SIG_FMT_COMP_1080P_30HZ_D000 = 0x20a,
- TVIN_SIG_FMT_COMP_1080P_50HZ_D000 = 0x20b,
- TVIN_SIG_FMT_COMP_1080P_60HZ_D000 = 0x20c,
- TVIN_SIG_FMT_COMP_1080I_47HZ_D952 = 0x20d,
- TVIN_SIG_FMT_COMP_1080I_48HZ_D000 = 0x20e,
- TVIN_SIG_FMT_COMP_1080I_50HZ_D000_A = 0x20f,
- TVIN_SIG_FMT_COMP_1080I_50HZ_D000_B = 0x210,
- TVIN_SIG_FMT_COMP_1080I_50HZ_D000_C = 0x211,
- TVIN_SIG_FMT_COMP_1080I_60HZ_D000 = 0x212,
- TVIN_SIG_FMT_COMP_MAX = 0x213,
- TVIN_SIG_FMT_COMP_THRESHOLD = 0x400,
- //HDMI Formats
- TVIN_SIG_FMT_HDMI_640X480P_60HZ = 0x401,
- TVIN_SIG_FMT_HDMI_720X480P_60HZ = 0x402,
- TVIN_SIG_FMT_HDMI_1280X720P_60HZ = 0x403,
- TVIN_SIG_FMT_HDMI_1920X1080I_60HZ = 0x404,
- TVIN_SIG_FMT_HDMI_1440X480I_60HZ = 0x405,
- TVIN_SIG_FMT_HDMI_1440X240P_60HZ = 0x406,
- TVIN_SIG_FMT_HDMI_2880X480I_60HZ = 0x407,
- TVIN_SIG_FMT_HDMI_2880X240P_60HZ = 0x408,
- TVIN_SIG_FMT_HDMI_1440X480P_60HZ = 0x409,
- TVIN_SIG_FMT_HDMI_1920X1080P_60HZ = 0x40a,
- TVIN_SIG_FMT_HDMI_720X576P_50HZ = 0x40b,
- TVIN_SIG_FMT_HDMI_1280X720P_50HZ = 0x40c,
- TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_A = 0x40d,
- TVIN_SIG_FMT_HDMI_1440X576I_50HZ = 0x40e,
- TVIN_SIG_FMT_HDMI_1440X288P_50HZ = 0x40f,
- TVIN_SIG_FMT_HDMI_2880X576I_50HZ = 0x410,
- TVIN_SIG_FMT_HDMI_2880X288P_50HZ = 0x411,
- TVIN_SIG_FMT_HDMI_1440X576P_50HZ = 0x412,
- TVIN_SIG_FMT_HDMI_1920X1080P_50HZ = 0x413,
- TVIN_SIG_FMT_HDMI_1920X1080P_24HZ = 0x414,
- TVIN_SIG_FMT_HDMI_1920X1080P_25HZ = 0x415,
- TVIN_SIG_FMT_HDMI_1920X1080P_30HZ = 0x416,
- TVIN_SIG_FMT_HDMI_2880X480P_60HZ = 0x417,
- TVIN_SIG_FMT_HDMI_2880X576P_60HZ = 0x418,
- TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_B = 0x419,
- TVIN_SIG_FMT_HDMI_1920X1080I_100HZ = 0x41a,
- TVIN_SIG_FMT_HDMI_1280X720P_100HZ = 0x41b,
- TVIN_SIG_FMT_HDMI_720X576P_100HZ = 0x41c,
- TVIN_SIG_FMT_HDMI_1440X576I_100HZ = 0x41d,
- TVIN_SIG_FMT_HDMI_1920X1080I_120HZ = 0x41e,
- TVIN_SIG_FMT_HDMI_1280X720P_120HZ = 0x41f,
- TVIN_SIG_FMT_HDMI_720X480P_120HZ = 0x420,
- TVIN_SIG_FMT_HDMI_1440X480I_120HZ = 0x421,
- TVIN_SIG_FMT_HDMI_720X576P_200HZ = 0x422,
- TVIN_SIG_FMT_HDMI_1440X576I_200HZ = 0x423,
- TVIN_SIG_FMT_HDMI_720X480P_240HZ = 0x424,
- TVIN_SIG_FMT_HDMI_1440X480I_240HZ = 0x425,
- TVIN_SIG_FMT_HDMI_1280X720P_24HZ = 0x426,
- TVIN_SIG_FMT_HDMI_1280X720P_25HZ = 0x427,
- TVIN_SIG_FMT_HDMI_1280X720P_30HZ = 0x428,
- TVIN_SIG_FMT_HDMI_1920X1080P_120HZ = 0x429,
- TVIN_SIG_FMT_HDMI_1920X1080P_100HZ = 0x42a,
- TVIN_SIG_FMT_HDMI_1280X720P_60HZ_FRAME_PACKING = 0x42b,
- TVIN_SIG_FMT_HDMI_1280X720P_50HZ_FRAME_PACKING = 0x42c,
- TVIN_SIG_FMT_HDMI_1280X720P_24HZ_FRAME_PACKING = 0x42d,
- TVIN_SIG_FMT_HDMI_1280X720P_30HZ_FRAME_PACKING = 0x42e,
- TVIN_SIG_FMT_HDMI_1920X1080I_60HZ_FRAME_PACKING = 0x42f,
- TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_FRAME_PACKING = 0x430,
- TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_FRAME_PACKING = 0x431,
- TVIN_SIG_FMT_HDMI_1920X1080P_30HZ_FRAME_PACKING = 0x432,
- TVIN_SIG_FMT_HDMI_800X600_00HZ = 0x433,
- TVIN_SIG_FMT_HDMI_1024X768_00HZ = 0x434,
- TVIN_SIG_FMT_HDMI_720X400_00HZ = 0x435,
- TVIN_SIG_FMT_HDMI_1280X768_00HZ = 0x436,
- TVIN_SIG_FMT_HDMI_1280X800_00HZ = 0x437,
- TVIN_SIG_FMT_HDMI_1280X960_00HZ = 0x438,
- TVIN_SIG_FMT_HDMI_1280X1024_00HZ = 0x439,
- TVIN_SIG_FMT_HDMI_1360X768_00HZ = 0x43a,
- TVIN_SIG_FMT_HDMI_1366X768_00HZ = 0x43b,
- TVIN_SIG_FMT_HDMI_1600X1200_00HZ = 0x43c,
- TVIN_SIG_FMT_HDMI_1920X1200_00HZ = 0x43d,
- TVIN_SIG_FMT_HDMI_1440X900_00HZ = 0x43e,
- TVIN_SIG_FMT_HDMI_1400X1050_00HZ = 0x43f,
- TVIN_SIG_FMT_HDMI_1680X1050_00HZ = 0x440,
- /* for alternative and 4k2k */
- TVIN_SIG_FMT_HDMI_1920X1080I_60HZ_ALTERNATIVE = 0x441,
- TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_ALTERNATIVE = 0x442,
- TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_ALTERNATIVE = 0x443,
- TVIN_SIG_FMT_HDMI_1920X1080P_30HZ_ALTERNATIVE = 0x444,
- TVIN_SIG_FMT_HDMI_3840_2160_00HZ = 0x445,
- TVIN_SIG_FMT_HDMI_4096_2160_00HZ = 0x446,
- TVIN_SIG_FMT_HDMI_RESERVE7 = 0x447,
- TVIN_SIG_FMT_HDMI_RESERVE8 = 0x448,
- TVIN_SIG_FMT_HDMI_RESERVE9 = 0x449,
- TVIN_SIG_FMT_HDMI_RESERVE10 = 0x44a,
- TVIN_SIG_FMT_HDMI_RESERVE11 = 0x44b,
- TVIN_SIG_FMT_HDMI_720X480P_60HZ_FRAME_PACKING = 0x44c,
- TVIN_SIG_FMT_HDMI_720X576P_50HZ_FRAME_PACKING = 0x44d,
- TVIN_SIG_FMT_HDMI_MAX = 0x44e,
- TVIN_SIG_FMT_HDMI_THRESHOLD = 0x600,
- //Video Formats
- TVIN_SIG_FMT_CVBS_NTSC_M = 0x601,
- TVIN_SIG_FMT_CVBS_NTSC_443 = 0x602,
- TVIN_SIG_FMT_CVBS_PAL_I = 0x603,
- TVIN_SIG_FMT_CVBS_PAL_M = 0x604,
- TVIN_SIG_FMT_CVBS_PAL_60 = 0x605,
- TVIN_SIG_FMT_CVBS_PAL_CN = 0x606,
- TVIN_SIG_FMT_CVBS_SECAM = 0x607,
- TVIN_SIG_FMT_CVBS_MAX = 0x608,
- TVIN_SIG_FMT_CVBS_THRESHOLD = 0x800,
- //656 Formats
- TVIN_SIG_FMT_BT656IN_576I_50HZ = 0x801,
- TVIN_SIG_FMT_BT656IN_480I_60HZ = 0x802,
- //601 Formats
- TVIN_SIG_FMT_BT601IN_576I_50HZ = 0x803,
- TVIN_SIG_FMT_BT601IN_480I_60HZ = 0x804,
- //Camera Formats
- TVIN_SIG_FMT_CAMERA_640X480P_30HZ = 0x805,
- TVIN_SIG_FMT_CAMERA_800X600P_30HZ = 0x806,
- TVIN_SIG_FMT_CAMERA_1024X768P_30HZ = 0x807,
- TVIN_SIG_FMT_CAMERA_1920X1080P_30HZ = 0x808,
- TVIN_SIG_FMT_CAMERA_1280X720P_30HZ = 0x809,
- TVIN_SIG_FMT_BT601_MAX = 0x80a,
- TVIN_SIG_FMT_BT601_THRESHOLD = 0xa00,
- TVIN_SIG_FMT_MAX,
+ TVIN_SIG_FMT_NULL = 0,
+ //VGA Formats
+ TVIN_SIG_FMT_VGA_512X384P_60HZ_D147 = 0x001,
+ TVIN_SIG_FMT_VGA_560X384P_60HZ_D147 = 0x002,
+ TVIN_SIG_FMT_VGA_640X200P_59HZ_D924 = 0x003,
+ TVIN_SIG_FMT_VGA_640X350P_85HZ_D080 = 0x004,
+ TVIN_SIG_FMT_VGA_640X400P_59HZ_D940 = 0x005,
+ TVIN_SIG_FMT_VGA_640X400P_85HZ_D080 = 0x006,
+ TVIN_SIG_FMT_VGA_640X400P_59HZ_D638 = 0x007,
+ TVIN_SIG_FMT_VGA_640X400P_56HZ_D416 = 0x008,
+ TVIN_SIG_FMT_VGA_640X480P_66HZ_D619 = 0x009,
+ TVIN_SIG_FMT_VGA_640X480P_66HZ_D667 = 0x00a,
+ TVIN_SIG_FMT_VGA_640X480P_59HZ_D940 = 0x00b,
+ TVIN_SIG_FMT_VGA_640X480P_60HZ_D000 = 0x00c,
+ TVIN_SIG_FMT_VGA_640X480P_72HZ_D809 = 0x00d,
+ TVIN_SIG_FMT_VGA_640X480P_75HZ_D000_A = 0x00e,
+ TVIN_SIG_FMT_VGA_640X480P_85HZ_D008 = 0x00f,
+ TVIN_SIG_FMT_VGA_640X480P_59HZ_D638 = 0x010,
+ TVIN_SIG_FMT_VGA_640X480P_75HZ_D000_B = 0x011,
+ TVIN_SIG_FMT_VGA_640X870P_75HZ_D000 = 0x012,
+ TVIN_SIG_FMT_VGA_720X350P_70HZ_D086 = 0x013,
+ TVIN_SIG_FMT_VGA_720X400P_85HZ_D039 = 0x014,
+ TVIN_SIG_FMT_VGA_720X400P_70HZ_D086 = 0x015,
+ TVIN_SIG_FMT_VGA_720X400P_87HZ_D849 = 0x016,
+ TVIN_SIG_FMT_VGA_720X400P_59HZ_D940 = 0x017,
+ TVIN_SIG_FMT_VGA_720X480P_59HZ_D940 = 0x018,
+ TVIN_SIG_FMT_VGA_768X480P_59HZ_D896 = 0x019,
+ TVIN_SIG_FMT_VGA_800X600P_56HZ_D250 = 0x01a,
+ TVIN_SIG_FMT_VGA_800X600P_60HZ_D000 = 0x01b,
+ TVIN_SIG_FMT_VGA_800X600P_60HZ_D000_A = 0x01c,
+ TVIN_SIG_FMT_VGA_800X600P_60HZ_D317 = 0x01d,
+ TVIN_SIG_FMT_VGA_800X600P_72HZ_D188 = 0x01e,
+ TVIN_SIG_FMT_VGA_800X600P_75HZ_D000 = 0x01f,
+ TVIN_SIG_FMT_VGA_800X600P_85HZ_D061 = 0x020,
+ TVIN_SIG_FMT_VGA_832X624P_75HZ_D087 = 0x021,
+ TVIN_SIG_FMT_VGA_848X480P_84HZ_D751 = 0x022,
+ TVIN_SIG_FMT_VGA_960X600P_59HZ_D635 = 0x023,
+ TVIN_SIG_FMT_VGA_1024X768P_59HZ_D278 = 0x024,
+ TVIN_SIG_FMT_VGA_1024X768P_60HZ_D000 = 0x025,
+ TVIN_SIG_FMT_VGA_1024X768P_60HZ_D000_A = 0x026,
+ TVIN_SIG_FMT_VGA_1024X768P_60HZ_D000_B = 0x027,
+ TVIN_SIG_FMT_VGA_1024X768P_74HZ_D927 = 0x028,
+ TVIN_SIG_FMT_VGA_1024X768P_60HZ_D004 = 0x029,
+ TVIN_SIG_FMT_VGA_1024X768P_70HZ_D069 = 0x02a,
+ TVIN_SIG_FMT_VGA_1024X768P_75HZ_D029 = 0x02b,
+ TVIN_SIG_FMT_VGA_1024X768P_84HZ_D997 = 0x02c,
+ TVIN_SIG_FMT_VGA_1024X768P_74HZ_D925 = 0x02d,
+ TVIN_SIG_FMT_VGA_1024X768P_60HZ_D020 = 0x02e,
+ TVIN_SIG_FMT_VGA_1024X768P_70HZ_D008 = 0x02f,
+ TVIN_SIG_FMT_VGA_1024X768P_75HZ_D782 = 0x030,
+ TVIN_SIG_FMT_VGA_1024X768P_77HZ_D069 = 0x031,
+ TVIN_SIG_FMT_VGA_1024X768P_71HZ_D799 = 0x032,
+ TVIN_SIG_FMT_VGA_1024X1024P_60HZ_D000 = 0x033,
+ TVIN_SIG_FMT_VGA_1152X864P_60HZ_D000 = 0x034,
+ TVIN_SIG_FMT_VGA_1152X864P_70HZ_D012 = 0x035,
+ TVIN_SIG_FMT_VGA_1152X864P_75HZ_D000 = 0x036,
+ TVIN_SIG_FMT_VGA_1152X864P_84HZ_D999 = 0x037,
+ TVIN_SIG_FMT_VGA_1152X870P_75HZ_D062 = 0x038,
+ TVIN_SIG_FMT_VGA_1152X900P_65HZ_D950 = 0x039,
+ TVIN_SIG_FMT_VGA_1152X900P_66HZ_D004 = 0x03a,
+ TVIN_SIG_FMT_VGA_1152X900P_76HZ_D047 = 0x03b,
+ TVIN_SIG_FMT_VGA_1152X900P_76HZ_D149 = 0x03c,
+ TVIN_SIG_FMT_VGA_1280X720P_59HZ_D855 = 0x03d,
+ TVIN_SIG_FMT_VGA_1280X720P_60HZ_D000_A = 0x03e,
+ TVIN_SIG_FMT_VGA_1280X720P_60HZ_D000_B = 0x03f,
+ TVIN_SIG_FMT_VGA_1280X720P_60HZ_D000_C = 0x040,
+ TVIN_SIG_FMT_VGA_1280X720P_60HZ_D000_D = 0x041,
+ TVIN_SIG_FMT_VGA_1280X768P_59HZ_D870 = 0x042,
+ TVIN_SIG_FMT_VGA_1280X768P_59HZ_D995 = 0x043,
+ TVIN_SIG_FMT_VGA_1280X768P_60HZ_D100 = 0x044,
+ TVIN_SIG_FMT_VGA_1280X768P_85HZ_D000 = 0x045,
+ TVIN_SIG_FMT_VGA_1280X768P_74HZ_D893 = 0x046,
+ TVIN_SIG_FMT_VGA_1280X768P_84HZ_D837 = 0x047,
+ TVIN_SIG_FMT_VGA_1280X800P_59HZ_D810 = 0x048,
+ TVIN_SIG_FMT_VGA_1280X800P_59HZ_D810_A = 0x049,
+ TVIN_SIG_FMT_VGA_1280X800P_60HZ_D000 = 0x04a,
+ TVIN_SIG_FMT_VGA_1280X800P_85HZ_D000 = 0x04b,
+ TVIN_SIG_FMT_VGA_1280X960P_60HZ_D000 = 0x04c,
+ TVIN_SIG_FMT_VGA_1280X960P_60HZ_D000_A = 0x04d,
+ TVIN_SIG_FMT_VGA_1280X960P_75HZ_D000 = 0x04e,
+ TVIN_SIG_FMT_VGA_1280X960P_85HZ_D002 = 0x04f,
+ TVIN_SIG_FMT_VGA_1280X1024P_60HZ_D020 = 0x050,
+ TVIN_SIG_FMT_VGA_1280X1024P_60HZ_D020_A = 0x051,
+ TVIN_SIG_FMT_VGA_1280X1024P_75HZ_D025 = 0x052,
+ TVIN_SIG_FMT_VGA_1280X1024P_85HZ_D024 = 0x053,
+ TVIN_SIG_FMT_VGA_1280X1024P_59HZ_D979 = 0x054,
+ TVIN_SIG_FMT_VGA_1280X1024P_72HZ_D005 = 0x055,
+ TVIN_SIG_FMT_VGA_1280X1024P_60HZ_D002 = 0x056,
+ TVIN_SIG_FMT_VGA_1280X1024P_67HZ_D003 = 0x057,
+ TVIN_SIG_FMT_VGA_1280X1024P_74HZ_D112 = 0x058,
+ TVIN_SIG_FMT_VGA_1280X1024P_76HZ_D179 = 0x059,
+ TVIN_SIG_FMT_VGA_1280X1024P_66HZ_D718 = 0x05a,
+ TVIN_SIG_FMT_VGA_1280X1024P_66HZ_D677 = 0x05b,
+ TVIN_SIG_FMT_VGA_1280X1024P_76HZ_D107 = 0x05c,
+ TVIN_SIG_FMT_VGA_1280X1024P_59HZ_D996 = 0x05d,
+ TVIN_SIG_FMT_VGA_1280X1024P_60HZ_D000 = 0x05e,
+ TVIN_SIG_FMT_VGA_1360X768P_59HZ_D799 = 0x05f,
+ TVIN_SIG_FMT_VGA_1360X768P_60HZ_D015 = 0x060,
+ TVIN_SIG_FMT_VGA_1360X768P_60HZ_D015_A = 0x061,
+ TVIN_SIG_FMT_VGA_1360X850P_60HZ_D000 = 0x062,
+ TVIN_SIG_FMT_VGA_1360X1024P_60HZ_D000 = 0x063,
+ TVIN_SIG_FMT_VGA_1366X768P_59HZ_D790 = 0x064,
+ TVIN_SIG_FMT_VGA_1366X768P_60HZ_D000 = 0x065,
+ TVIN_SIG_FMT_VGA_1400X1050P_59HZ_D978 = 0x066,
+ TVIN_SIG_FMT_VGA_1440X900P_59HZ_D887 = 0x067,
+ TVIN_SIG_FMT_VGA_1440X1080P_60HZ_D000 = 0x068,
+ TVIN_SIG_FMT_VGA_1600X900P_60HZ_D000 = 0x069,
+ TVIN_SIG_FMT_VGA_1600X1024P_60HZ_D000 = 0x06a,
+ TVIN_SIG_FMT_VGA_1600X1200P_59HZ_D869 = 0x06b,
+ TVIN_SIG_FMT_VGA_1600X1200P_60HZ_D000 = 0x06c,
+ TVIN_SIG_FMT_VGA_1600X1200P_65HZ_D000 = 0x06d,
+ TVIN_SIG_FMT_VGA_1600X1200P_70HZ_D000 = 0x06e,
+ TVIN_SIG_FMT_VGA_1680X1050P_59HZ_D954 = 0x06f,
+ TVIN_SIG_FMT_VGA_1680X1080P_60HZ_D000 = 0x070,
+ TVIN_SIG_FMT_VGA_1920X1080P_49HZ_D929 = 0x071,
+ TVIN_SIG_FMT_VGA_1920X1080P_59HZ_D963_A = 0x072,
+ TVIN_SIG_FMT_VGA_1920X1080P_59HZ_D963 = 0x073,
+ TVIN_SIG_FMT_VGA_1920X1080P_60HZ_D000 = 0x074,
+ TVIN_SIG_FMT_VGA_1920X1200P_59HZ_D950 = 0x075,
+ TVIN_SIG_FMT_VGA_1024X768P_60HZ_D000_C = 0x076,
+ TVIN_SIG_FMT_VGA_1024X768P_60HZ_D000_D = 0x077,
+ TVIN_SIG_FMT_VGA_1920X1200P_59HZ_D988 = 0x078,
+ TVIN_SIG_FMT_VGA_1400X900P_60HZ_D000 = 0x079,
+ TVIN_SIG_FMT_VGA_1680X1050P_60HZ_D000 = 0x07a,
+ TVIN_SIG_FMT_VGA_800X600P_60HZ_D062 = 0x07b,
+ TVIN_SIG_FMT_VGA_800X600P_60HZ_317_B = 0x07c,
+ TVIN_SIG_FMT_VGA_RESERVE8 = 0x07d,
+ TVIN_SIG_FMT_VGA_RESERVE9 = 0x07e,
+ TVIN_SIG_FMT_VGA_RESERVE10 = 0x07f,
+ TVIN_SIG_FMT_VGA_RESERVE11 = 0x080,
+ TVIN_SIG_FMT_VGA_RESERVE12 = 0x081,
+ TVIN_SIG_FMT_VGA_MAX = 0x082,
+ TVIN_SIG_FMT_VGA_THRESHOLD = 0x200,
+ //Component Formats
+ TVIN_SIG_FMT_COMP_480P_60HZ_D000 = 0x201,
+ TVIN_SIG_FMT_COMP_480I_59HZ_D940 = 0x202,
+ TVIN_SIG_FMT_COMP_576P_50HZ_D000 = 0x203,
+ TVIN_SIG_FMT_COMP_576I_50HZ_D000 = 0x204,
+ TVIN_SIG_FMT_COMP_720P_59HZ_D940 = 0x205,
+ TVIN_SIG_FMT_COMP_720P_50HZ_D000 = 0x206,
+ TVIN_SIG_FMT_COMP_1080P_23HZ_D976 = 0x207,
+ TVIN_SIG_FMT_COMP_1080P_24HZ_D000 = 0x208,
+ TVIN_SIG_FMT_COMP_1080P_25HZ_D000 = 0x209,
+ TVIN_SIG_FMT_COMP_1080P_30HZ_D000 = 0x20a,
+ TVIN_SIG_FMT_COMP_1080P_50HZ_D000 = 0x20b,
+ TVIN_SIG_FMT_COMP_1080P_60HZ_D000 = 0x20c,
+ TVIN_SIG_FMT_COMP_1080I_47HZ_D952 = 0x20d,
+ TVIN_SIG_FMT_COMP_1080I_48HZ_D000 = 0x20e,
+ TVIN_SIG_FMT_COMP_1080I_50HZ_D000_A = 0x20f,
+ TVIN_SIG_FMT_COMP_1080I_50HZ_D000_B = 0x210,
+ TVIN_SIG_FMT_COMP_1080I_50HZ_D000_C = 0x211,
+ TVIN_SIG_FMT_COMP_1080I_60HZ_D000 = 0x212,
+ TVIN_SIG_FMT_COMP_MAX = 0x213,
+ TVIN_SIG_FMT_COMP_THRESHOLD = 0x400,
+ //HDMI Formats
+ TVIN_SIG_FMT_HDMI_640X480P_60HZ = 0x401,
+ TVIN_SIG_FMT_HDMI_720X480P_60HZ = 0x402,
+ TVIN_SIG_FMT_HDMI_1280X720P_60HZ = 0x403,
+ TVIN_SIG_FMT_HDMI_1920X1080I_60HZ = 0x404,
+ TVIN_SIG_FMT_HDMI_1440X480I_60HZ = 0x405,
+ TVIN_SIG_FMT_HDMI_1440X240P_60HZ = 0x406,
+ TVIN_SIG_FMT_HDMI_2880X480I_60HZ = 0x407,
+ TVIN_SIG_FMT_HDMI_2880X240P_60HZ = 0x408,
+ TVIN_SIG_FMT_HDMI_1440X480P_60HZ = 0x409,
+ TVIN_SIG_FMT_HDMI_1920X1080P_60HZ = 0x40a,
+ TVIN_SIG_FMT_HDMI_720X576P_50HZ = 0x40b,
+ TVIN_SIG_FMT_HDMI_1280X720P_50HZ = 0x40c,
+ TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_A = 0x40d,
+ TVIN_SIG_FMT_HDMI_1440X576I_50HZ = 0x40e,
+ TVIN_SIG_FMT_HDMI_1440X288P_50HZ = 0x40f,
+ TVIN_SIG_FMT_HDMI_2880X576I_50HZ = 0x410,
+ TVIN_SIG_FMT_HDMI_2880X288P_50HZ = 0x411,
+ TVIN_SIG_FMT_HDMI_1440X576P_50HZ = 0x412,
+ TVIN_SIG_FMT_HDMI_1920X1080P_50HZ = 0x413,
+ TVIN_SIG_FMT_HDMI_1920X1080P_24HZ = 0x414,
+ TVIN_SIG_FMT_HDMI_1920X1080P_25HZ = 0x415,
+ TVIN_SIG_FMT_HDMI_1920X1080P_30HZ = 0x416,
+ TVIN_SIG_FMT_HDMI_2880X480P_60HZ = 0x417,
+ TVIN_SIG_FMT_HDMI_2880X576P_60HZ = 0x418,
+ TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_B = 0x419,
+ TVIN_SIG_FMT_HDMI_1920X1080I_100HZ = 0x41a,
+ TVIN_SIG_FMT_HDMI_1280X720P_100HZ = 0x41b,
+ TVIN_SIG_FMT_HDMI_720X576P_100HZ = 0x41c,
+ TVIN_SIG_FMT_HDMI_1440X576I_100HZ = 0x41d,
+ TVIN_SIG_FMT_HDMI_1920X1080I_120HZ = 0x41e,
+ TVIN_SIG_FMT_HDMI_1280X720P_120HZ = 0x41f,
+ TVIN_SIG_FMT_HDMI_720X480P_120HZ = 0x420,
+ TVIN_SIG_FMT_HDMI_1440X480I_120HZ = 0x421,
+ TVIN_SIG_FMT_HDMI_720X576P_200HZ = 0x422,
+ TVIN_SIG_FMT_HDMI_1440X576I_200HZ = 0x423,
+ TVIN_SIG_FMT_HDMI_720X480P_240HZ = 0x424,
+ TVIN_SIG_FMT_HDMI_1440X480I_240HZ = 0x425,
+ TVIN_SIG_FMT_HDMI_1280X720P_24HZ = 0x426,
+ TVIN_SIG_FMT_HDMI_1280X720P_25HZ = 0x427,
+ TVIN_SIG_FMT_HDMI_1280X720P_30HZ = 0x428,
+ TVIN_SIG_FMT_HDMI_1920X1080P_120HZ = 0x429,
+ TVIN_SIG_FMT_HDMI_1920X1080P_100HZ = 0x42a,
+ TVIN_SIG_FMT_HDMI_1280X720P_60HZ_FRAME_PACKING = 0x42b,
+ TVIN_SIG_FMT_HDMI_1280X720P_50HZ_FRAME_PACKING = 0x42c,
+ TVIN_SIG_FMT_HDMI_1280X720P_24HZ_FRAME_PACKING = 0x42d,
+ TVIN_SIG_FMT_HDMI_1280X720P_30HZ_FRAME_PACKING = 0x42e,
+ TVIN_SIG_FMT_HDMI_1920X1080I_60HZ_FRAME_PACKING = 0x42f,
+ TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_FRAME_PACKING = 0x430,
+ TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_FRAME_PACKING = 0x431,
+ TVIN_SIG_FMT_HDMI_1920X1080P_30HZ_FRAME_PACKING = 0x432,
+ TVIN_SIG_FMT_HDMI_800X600_00HZ = 0x433,
+ TVIN_SIG_FMT_HDMI_1024X768_00HZ = 0x434,
+ TVIN_SIG_FMT_HDMI_720X400_00HZ = 0x435,
+ TVIN_SIG_FMT_HDMI_1280X768_00HZ = 0x436,
+ TVIN_SIG_FMT_HDMI_1280X800_00HZ = 0x437,
+ TVIN_SIG_FMT_HDMI_1280X960_00HZ = 0x438,
+ TVIN_SIG_FMT_HDMI_1280X1024_00HZ = 0x439,
+ TVIN_SIG_FMT_HDMI_1360X768_00HZ = 0x43a,
+ TVIN_SIG_FMT_HDMI_1366X768_00HZ = 0x43b,
+ TVIN_SIG_FMT_HDMI_1600X1200_00HZ = 0x43c,
+ TVIN_SIG_FMT_HDMI_1920X1200_00HZ = 0x43d,
+ TVIN_SIG_FMT_HDMI_1440X900_00HZ = 0x43e,
+ TVIN_SIG_FMT_HDMI_1400X1050_00HZ = 0x43f,
+ TVIN_SIG_FMT_HDMI_1680X1050_00HZ = 0x440,
+ /* for alternative and 4k2k */
+ TVIN_SIG_FMT_HDMI_1920X1080I_60HZ_ALTERNATIVE = 0x441,
+ TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_ALTERNATIVE = 0x442,
+ TVIN_SIG_FMT_HDMI_1920X1080P_24HZ_ALTERNATIVE = 0x443,
+ TVIN_SIG_FMT_HDMI_1920X1080P_30HZ_ALTERNATIVE = 0x444,
+ TVIN_SIG_FMT_HDMI_3840_2160_00HZ = 0x445,
+ TVIN_SIG_FMT_HDMI_4096_2160_00HZ = 0x446,
+ TVIN_SIG_FMT_HDMI_RESERVE7 = 0x447,
+ TVIN_SIG_FMT_HDMI_RESERVE8 = 0x448,
+ TVIN_SIG_FMT_HDMI_RESERVE9 = 0x449,
+ TVIN_SIG_FMT_HDMI_RESERVE10 = 0x44a,
+ TVIN_SIG_FMT_HDMI_RESERVE11 = 0x44b,
+ TVIN_SIG_FMT_HDMI_720X480P_60HZ_FRAME_PACKING = 0x44c,
+ TVIN_SIG_FMT_HDMI_720X576P_50HZ_FRAME_PACKING = 0x44d,
+ TVIN_SIG_FMT_HDMI_MAX = 0x44e,
+ TVIN_SIG_FMT_HDMI_THRESHOLD = 0x600,
+ //Video Formats
+ TVIN_SIG_FMT_CVBS_NTSC_M = 0x601,
+ TVIN_SIG_FMT_CVBS_NTSC_443 = 0x602,
+ TVIN_SIG_FMT_CVBS_PAL_I = 0x603,
+ TVIN_SIG_FMT_CVBS_PAL_M = 0x604,
+ TVIN_SIG_FMT_CVBS_PAL_60 = 0x605,
+ TVIN_SIG_FMT_CVBS_PAL_CN = 0x606,
+ TVIN_SIG_FMT_CVBS_SECAM = 0x607,
+ TVIN_SIG_FMT_CVBS_MAX = 0x608,
+ TVIN_SIG_FMT_CVBS_THRESHOLD = 0x800,
+ //656 Formats
+ TVIN_SIG_FMT_BT656IN_576I_50HZ = 0x801,
+ TVIN_SIG_FMT_BT656IN_480I_60HZ = 0x802,
+ //601 Formats
+ TVIN_SIG_FMT_BT601IN_576I_50HZ = 0x803,
+ TVIN_SIG_FMT_BT601IN_480I_60HZ = 0x804,
+ //Camera Formats
+ TVIN_SIG_FMT_CAMERA_640X480P_30HZ = 0x805,
+ TVIN_SIG_FMT_CAMERA_800X600P_30HZ = 0x806,
+ TVIN_SIG_FMT_CAMERA_1024X768P_30HZ = 0x807,
+ TVIN_SIG_FMT_CAMERA_1920X1080P_30HZ = 0x808,
+ TVIN_SIG_FMT_CAMERA_1280X720P_30HZ = 0x809,
+ TVIN_SIG_FMT_BT601_MAX = 0x80a,
+ TVIN_SIG_FMT_BT601_THRESHOLD = 0xa00,
+ TVIN_SIG_FMT_MAX,
} tvin_sig_fmt_t;
//tvin signal status
typedef enum tvin_sig_status_e {
- TVIN_SIG_STATUS_NULL = 0, // processing status from init to the finding of the 1st confirmed status
- TVIN_SIG_STATUS_NOSIG, // no signal - physically no signal
- TVIN_SIG_STATUS_UNSTABLE, // unstable - physically bad signal
- TVIN_SIG_STATUS_NOTSUP, // not supported - physically good signal & not supported
- TVIN_SIG_STATUS_STABLE, // stable - physically good signal & supported
+ TVIN_SIG_STATUS_NULL = 0, // processing status from init to the finding of the 1st confirmed status
+ TVIN_SIG_STATUS_NOSIG, // no signal - physically no signal
+ TVIN_SIG_STATUS_UNSTABLE, // unstable - physically bad signal
+ TVIN_SIG_STATUS_NOTSUP, // not supported - physically good signal & not supported
+ TVIN_SIG_STATUS_STABLE, // stable - physically good signal & supported
} tvin_sig_status_t;
const char *tvin_sig_status_str(enum tvin_sig_status_e status);
@@ -412,97 +412,97 @@ const char *tvin_sig_status_str(enum tvin_sig_status_e status);
#define TVIN_PARM_FLAG_2D_TO_3D 0x00000004 //tvin_parm_t.flag[ 2]: 1/enable or 0/disable 2D->3D mode
typedef enum tvin_trans_fmt {
- TVIN_TFMT_2D = 0,
- TVIN_TFMT_3D_LRH_OLOR, // 1 Primary: Side-by-Side(Half) Odd/Left picture, Odd/Right p
- TVIN_TFMT_3D_LRH_OLER, // 2 Primary: Side-by-Side(Half) Odd/Left picture, Even/Right picture
- TVIN_TFMT_3D_LRH_ELOR, // 3 Primary: Side-by-Side(Half) Even/Left picture, Odd/Right picture
- TVIN_TFMT_3D_LRH_ELER, // 4 Primary: Side-by-Side(Half) Even/Left picture, Even/Right picture
- TVIN_TFMT_3D_TB, // 5 Primary: Top-and-Bottom
- TVIN_TFMT_3D_FP, // 6 Primary: Frame Packing
- TVIN_TFMT_3D_FA, // 7 Secondary: Field Alternative
- TVIN_TFMT_3D_LA, // 8 Secondary: Line Alternative
- TVIN_TFMT_3D_LRF, // 9 Secondary: Side-by-Side(Full)
- TVIN_TFMT_3D_LD, // 10 Secondary: L+depth
- TVIN_TFMT_3D_LDGD, // 11 Secondary: L+depth+Graphics+Graphics-depth
- /* normal 3D format */
- TVIN_TFMT_3D_DET_TB,// 12
- TVIN_TFMT_3D_DET_LR,// 13
- TVIN_TFMT_3D_DET_INTERLACE,// 14
- TVIN_TFMT_3D_DET_CHESSBOARD,// 15
- TVIN_TFMT_3D_MAX,
+ TVIN_TFMT_2D = 0,
+ TVIN_TFMT_3D_LRH_OLOR, // 1 Primary: Side-by-Side(Half) Odd/Left picture, Odd/Right p
+ TVIN_TFMT_3D_LRH_OLER, // 2 Primary: Side-by-Side(Half) Odd/Left picture, Even/Right picture
+ TVIN_TFMT_3D_LRH_ELOR, // 3 Primary: Side-by-Side(Half) Even/Left picture, Odd/Right picture
+ TVIN_TFMT_3D_LRH_ELER, // 4 Primary: Side-by-Side(Half) Even/Left picture, Even/Right picture
+ TVIN_TFMT_3D_TB, // 5 Primary: Top-and-Bottom
+ TVIN_TFMT_3D_FP, // 6 Primary: Frame Packing
+ TVIN_TFMT_3D_FA, // 7 Secondary: Field Alternative
+ TVIN_TFMT_3D_LA, // 8 Secondary: Line Alternative
+ TVIN_TFMT_3D_LRF, // 9 Secondary: Side-by-Side(Full)
+ TVIN_TFMT_3D_LD, // 10 Secondary: L+depth
+ TVIN_TFMT_3D_LDGD, // 11 Secondary: L+depth+Graphics+Graphics-depth
+ /* normal 3D format */
+ TVIN_TFMT_3D_DET_TB,// 12
+ TVIN_TFMT_3D_DET_LR,// 13
+ TVIN_TFMT_3D_DET_INTERLACE,// 14
+ TVIN_TFMT_3D_DET_CHESSBOARD,// 15
+ TVIN_TFMT_3D_MAX,
} tvin_trans_fmt_t;
const char *tvin_trans_fmt_str(enum tvin_trans_fmt trans_fmt);
typedef enum tvin_color_fmt_e {
- TVIN_RGB444 = 0,
- TVIN_YUV422, // 1
- TVIN_YUV444, // 2
- TVIN_YUYV422,// 3
- TVIN_YVYU422,// 4
- TVIN_UYVY422,// 5
- TVIN_VYUY422,// 6
- TVIN_NV12, // 7
- TVIN_NV21, // 8
- TVIN_BGGR, // 9 raw data
- TVIN_RGGB, // 10 raw data
- TVIN_GBRG, // 11 raw data
- TVIN_GRBG, // 12 raw data
- TVIN_COLOR_FMT_MAX,
+ TVIN_RGB444 = 0,
+ TVIN_YUV422, // 1
+ TVIN_YUV444, // 2
+ TVIN_YUYV422,// 3
+ TVIN_YVYU422,// 4
+ TVIN_UYVY422,// 5
+ TVIN_VYUY422,// 6
+ TVIN_NV12, // 7
+ TVIN_NV21, // 8
+ TVIN_BGGR, // 9 raw data
+ TVIN_RGGB, // 10 raw data
+ TVIN_GBRG, // 11 raw data
+ TVIN_GRBG, // 12 raw data
+ TVIN_COLOR_FMT_MAX,
} tvin_color_fmt_t;
const char *tvin_color_fmt_str(enum tvin_color_fmt_e color_fmt);
typedef enum tvin_scan_mode_e {
- TVIN_SCAN_MODE_NULL = 0,
- TVIN_SCAN_MODE_PROGRESSIVE,
- TVIN_SCAN_MODE_INTERLACED,
+ TVIN_SCAN_MODE_NULL = 0,
+ TVIN_SCAN_MODE_PROGRESSIVE,
+ TVIN_SCAN_MODE_INTERLACED,
} tvin_scan_mode_t;
typedef struct tvin_info_s {
- enum tvin_trans_fmt trans_fmt;
- enum tvin_sig_fmt_e fmt;
- volatile enum tvin_sig_status_e status;
- enum tvin_color_fmt_e cfmt;
- unsigned int fps;
- unsigned int reserved;
+ enum tvin_trans_fmt trans_fmt;
+ enum tvin_sig_fmt_e fmt;
+ volatile enum tvin_sig_status_e status;
+ enum tvin_color_fmt_e cfmt;
+ unsigned int fps;
+ unsigned int reserved;
} tvin_info_t;
typedef struct tvin_buf_info_s {
- unsigned int vf_size;
- unsigned int buf_count;
- unsigned int buf_width;
- unsigned int buf_height;
- unsigned int buf_size;
- unsigned int wr_list_size;
+ unsigned int vf_size;
+ unsigned int buf_count;
+ unsigned int buf_width;
+ unsigned int buf_height;
+ unsigned int buf_size;
+ unsigned int wr_list_size;
} tvin_buf_info_t;
typedef struct tvin_video_buf_s {
- unsigned int index;
- unsigned int reserved;
+ unsigned int index;
+ unsigned int reserved;
} tvin_video_buf_t;
// hs=he=vs=ve=0 is to disable Cut Window
typedef struct tvin_cutwin_s {
- unsigned short hs;
- unsigned short he;
- unsigned short vs;
- unsigned short ve;
+ unsigned short hs;
+ unsigned short he;
+ unsigned short vs;
+ unsigned short ve;
} tvin_cutwin_t;
typedef struct tvin_parm_s {
- int index; // index of frontend for vdin
- enum tvin_port_e port; // must set port in IOCTL
- struct tvin_info_s info;
- unsigned int hist_pow;
- unsigned int luma_sum;
- unsigned int pixel_sum;
- unsigned short histgram[64];
- unsigned int flag;
- unsigned short dest_width;//for vdin horizontal scale down
- unsigned short dest_height;//for vdin vertical scale down
- bool h_reverse;//for vdin horizontal reverse
- bool v_reverse;//for vdin vertical reverse
- unsigned int reserved;
+ int index; // index of frontend for vdin
+ enum tvin_port_e port; // must set port in IOCTL
+ struct tvin_info_s info;
+ unsigned int hist_pow;
+ unsigned int luma_sum;
+ unsigned int pixel_sum;
+ unsigned short histgram[64];
+ unsigned int flag;
+ unsigned short dest_width;//for vdin horizontal scale down
+ unsigned short dest_height;//for vdin vertical scale down
+ bool h_reverse;//for vdin horizontal reverse
+ bool v_reverse;//for vdin vertical reverse
+ unsigned int reserved;
} tvin_parm_t;
@@ -512,292 +512,292 @@ typedef struct tvin_parm_s {
// ***************************************************************************
typedef enum tvafe_cmd_status_e {
- TVAFE_CMD_STATUS_IDLE = 0, // idle, be ready for TVIN_IOC_S_AFE_VGA_AUTO command
- TVAFE_CMD_STATUS_PROCESSING, // TVIN_IOC_S_AFE_VGA_AUTO command is in process
- TVAFE_CMD_STATUS_SUCCESSFUL, // TVIN_IOC_S_AFE_VGA_AUTO command is done with success
- TVAFE_CMD_STATUS_FAILED, // TVIN_IOC_S_AFE_VGA_AUTO command is done with failure
- TVAFE_CMD_STATUS_TERMINATED, // TVIN_IOC_S_AFE_VGA_AUTO command is terminated by others related
+ TVAFE_CMD_STATUS_IDLE = 0, // idle, be ready for TVIN_IOC_S_AFE_VGA_AUTO command
+ TVAFE_CMD_STATUS_PROCESSING, // TVIN_IOC_S_AFE_VGA_AUTO command is in process
+ TVAFE_CMD_STATUS_SUCCESSFUL, // TVIN_IOC_S_AFE_VGA_AUTO command is done with success
+ TVAFE_CMD_STATUS_FAILED, // TVIN_IOC_S_AFE_VGA_AUTO command is done with failure
+ TVAFE_CMD_STATUS_TERMINATED, // TVIN_IOC_S_AFE_VGA_AUTO command is terminated by others related
} tvafe_cmd_status_t;
typedef struct tvafe_vga_edid_s {
- unsigned char value[256]; //256 byte EDID
+ unsigned char value[256]; //256 byte EDID
} tvafe_vga_edid_t;
typedef struct tvafe_comp_wss_s {
- unsigned int wss1[5];
- unsigned int wss2[5];
+ unsigned int wss1[5];
+ unsigned int wss2[5];
} tvafe_comp_wss_t;
typedef struct tvafe_vga_parm_s {
- signed short clk_step; // clock < 0, tune down clock freq
- // clock > 0, tune up clock freq
- unsigned short phase; // phase is 0~31, it is absolute value
- signed short hpos_step; // hpos_step < 0, shift display to left
- // hpos_step > 0, shift display to right
- signed short vpos_step; // vpos_step < 0, shift display to top
- // vpos_step > 0, shift display to bottom
- unsigned int vga_in_clean; // flage for vga clean screen
+ signed short clk_step; // clock < 0, tune down clock freq
+ // clock > 0, tune up clock freq
+ unsigned short phase; // phase is 0~31, it is absolute value
+ signed short hpos_step; // hpos_step < 0, shift display to left
+ // hpos_step > 0, shift display to right
+ signed short vpos_step; // vpos_step < 0, shift display to top
+ // vpos_step > 0, shift display to bottom
+ unsigned int vga_in_clean; // flage for vga clean screen
} tvafe_vga_parm_t;
#define TVAFE_ADC_CAL_VALID 0x00000001
typedef struct tvafe_adc_cal_s {
- // ADC A
- unsigned short a_analog_clamp; // 0x00~0x7f
- unsigned short a_analog_gain; // 0x00~0xff, means 0dB~6dB
- unsigned short a_digital_offset1; // offset for fine-tuning
- // s11.0: signed value, 11 integer bits, 0 fraction bits
- unsigned short a_digital_gain; // 0~3.999
- // u2.10: unsigned value, 2 integer bits, 10 fraction bits
- unsigned short a_digital_offset2; // offset for format
- // s11.0: signed value, 11 integer bits, 0 fraction bits
- // ADC B
- unsigned short b_analog_clamp; // ditto to ADC A
- unsigned short b_analog_gain;
- unsigned short b_digital_offset1;
- unsigned short b_digital_gain;
- unsigned short b_digital_offset2;
- // ADC C
- unsigned short c_analog_clamp; // ditto to ADC A
- unsigned short c_analog_gain;
- unsigned short c_digital_offset1;
- unsigned short c_digital_gain;
- unsigned short c_digital_offset2;
- // ADC D
- unsigned short d_analog_clamp; // ditto to ADC A
- unsigned short d_analog_gain;
- unsigned short d_digital_offset1;
- unsigned short d_digital_gain;
- unsigned short d_digital_offset2;
- unsigned int reserved; // bit[ 0]: TVAFE_ADC_CAL_VALID
+ // ADC A
+ unsigned short a_analog_clamp; // 0x00~0x7f
+ unsigned short a_analog_gain; // 0x00~0xff, means 0dB~6dB
+ unsigned short a_digital_offset1; // offset for fine-tuning
+ // s11.0: signed value, 11 integer bits, 0 fraction bits
+ unsigned short a_digital_gain; // 0~3.999
+ // u2.10: unsigned value, 2 integer bits, 10 fraction bits
+ unsigned short a_digital_offset2; // offset for format
+ // s11.0: signed value, 11 integer bits, 0 fraction bits
+ // ADC B
+ unsigned short b_analog_clamp; // ditto to ADC A
+ unsigned short b_analog_gain;
+ unsigned short b_digital_offset1;
+ unsigned short b_digital_gain;
+ unsigned short b_digital_offset2;
+ // ADC C
+ unsigned short c_analog_clamp; // ditto to ADC A
+ unsigned short c_analog_gain;
+ unsigned short c_digital_offset1;
+ unsigned short c_digital_gain;
+ unsigned short c_digital_offset2;
+ // ADC D
+ unsigned short d_analog_clamp; // ditto to ADC A
+ unsigned short d_analog_gain;
+ unsigned short d_digital_offset1;
+ unsigned short d_digital_gain;
+ unsigned short d_digital_offset2;
+ unsigned int reserved; // bit[ 0]: TVAFE_ADC_CAL_VALID
} tvafe_adc_cal_t;
typedef struct tvafe_adc_cal_clamp_s {
- short a_analog_clamp_diff;
- short b_analog_clamp_diff;
- short c_analog_clamp_diff;
+ short a_analog_clamp_diff;
+ short b_analog_clamp_diff;
+ short c_analog_clamp_diff;
} tvafe_adc_cal_clamp_t;
typedef struct tvafe_adc_comp_cal_s {
- struct tvafe_adc_cal_s comp_cal_val[3];
+ struct tvafe_adc_cal_s comp_cal_val[3];
} tvafe_adc_comp_cal_t;
typedef enum tvafe_cvbs_video_e {
- TVAFE_CVBS_VIDEO_HV_UNLOCKED = 0,
- TVAFE_CVBS_VIDEO_H_LOCKED,
- TVAFE_CVBS_VIDEO_V_LOCKED,
- TVAFE_CVBS_VIDEO_HV_LOCKED,
+ TVAFE_CVBS_VIDEO_HV_UNLOCKED = 0,
+ TVAFE_CVBS_VIDEO_H_LOCKED,
+ TVAFE_CVBS_VIDEO_V_LOCKED,
+ TVAFE_CVBS_VIDEO_HV_LOCKED,
} tvafe_cvbs_video_t;
// for pin selection
typedef enum tvafe_adc_pin_e {
- TVAFE_ADC_PIN_NULL = 0,
+ TVAFE_ADC_PIN_NULL = 0,
#if (MESON_CPU_TYPE == MESON_CPU_TYPE_MESONG9TV)
- TVAFE_CVBS_IN0 = 1,
- TVAFE_CVBS_IN1 = 2,
- TVAFE_CVBS_IN2 = 3,
- TVAFE_CVBS_IN3 = 4,//as atvdemod to tvafe
+ TVAFE_CVBS_IN0 = 1,
+ TVAFE_CVBS_IN1 = 2,
+ TVAFE_CVBS_IN2 = 3,
+ TVAFE_CVBS_IN3 = 4,//as atvdemod to tvafe
#else
- TVAFE_ADC_PIN_A_PGA_0 = 1,
- TVAFE_ADC_PIN_A_PGA_1 = 2,
- TVAFE_ADC_PIN_A_PGA_2 = 3,
- TVAFE_ADC_PIN_A_PGA_3 = 4,
- TVAFE_ADC_PIN_A_PGA_4 = 5,
- TVAFE_ADC_PIN_A_PGA_5 = 6,
- TVAFE_ADC_PIN_A_PGA_6 = 7,
- TVAFE_ADC_PIN_A_PGA_7 = 8,
- TVAFE_ADC_PIN_A_0 = 9,
- TVAFE_ADC_PIN_A_1 = 10,
- TVAFE_ADC_PIN_A_2 = 11,
- TVAFE_ADC_PIN_A_3 = 12,
- TVAFE_ADC_PIN_A_4 = 13,
- TVAFE_ADC_PIN_A_5 = 14,
- TVAFE_ADC_PIN_A_6 = 15,
- TVAFE_ADC_PIN_A_7 = 16,
- TVAFE_ADC_PIN_B_0 = 17,
- TVAFE_ADC_PIN_B_1 = 18,
- TVAFE_ADC_PIN_B_2 = 19,
- TVAFE_ADC_PIN_B_3 = 20,
- TVAFE_ADC_PIN_B_4 = 21,
- TVAFE_ADC_PIN_B_5 = 22,
- TVAFE_ADC_PIN_B_6 = 23,
- TVAFE_ADC_PIN_B_7 = 24,
- TVAFE_ADC_PIN_C_0 = 25,
- TVAFE_ADC_PIN_C_1 = 26,
- TVAFE_ADC_PIN_C_2 = 27,
- TVAFE_ADC_PIN_C_3 = 28,
- TVAFE_ADC_PIN_C_4 = 29,
- TVAFE_ADC_PIN_C_5 = 30,
- TVAFE_ADC_PIN_C_6 = 31,
- TVAFE_ADC_PIN_C_7 = 32,
- TVAFE_ADC_PIN_D_0 = 33,
- TVAFE_ADC_PIN_D_1 = 34,
- TVAFE_ADC_PIN_D_2 = 35,
- TVAFE_ADC_PIN_D_3 = 36,
- TVAFE_ADC_PIN_D_4 = 37,
- TVAFE_ADC_PIN_D_5 = 38,
- TVAFE_ADC_PIN_D_6 = 39,
- TVAFE_ADC_PIN_D_7 = 40,
- TVAFE_ADC_PIN_SOG_0 = 41,
- TVAFE_ADC_PIN_SOG_1 = 42,
- TVAFE_ADC_PIN_SOG_2 = 43,
- TVAFE_ADC_PIN_SOG_3 = 44,
- TVAFE_ADC_PIN_SOG_4 = 45,
- TVAFE_ADC_PIN_SOG_5 = 46,
- TVAFE_ADC_PIN_SOG_6 = 47,
- TVAFE_ADC_PIN_SOG_7 = 48,
+ TVAFE_ADC_PIN_A_PGA_0 = 1,
+ TVAFE_ADC_PIN_A_PGA_1 = 2,
+ TVAFE_ADC_PIN_A_PGA_2 = 3,
+ TVAFE_ADC_PIN_A_PGA_3 = 4,
+ TVAFE_ADC_PIN_A_PGA_4 = 5,
+ TVAFE_ADC_PIN_A_PGA_5 = 6,
+ TVAFE_ADC_PIN_A_PGA_6 = 7,
+ TVAFE_ADC_PIN_A_PGA_7 = 8,
+ TVAFE_ADC_PIN_A_0 = 9,
+ TVAFE_ADC_PIN_A_1 = 10,
+ TVAFE_ADC_PIN_A_2 = 11,
+ TVAFE_ADC_PIN_A_3 = 12,
+ TVAFE_ADC_PIN_A_4 = 13,
+ TVAFE_ADC_PIN_A_5 = 14,
+ TVAFE_ADC_PIN_A_6 = 15,
+ TVAFE_ADC_PIN_A_7 = 16,
+ TVAFE_ADC_PIN_B_0 = 17,
+ TVAFE_ADC_PIN_B_1 = 18,
+ TVAFE_ADC_PIN_B_2 = 19,
+ TVAFE_ADC_PIN_B_3 = 20,
+ TVAFE_ADC_PIN_B_4 = 21,
+ TVAFE_ADC_PIN_B_5 = 22,
+ TVAFE_ADC_PIN_B_6 = 23,
+ TVAFE_ADC_PIN_B_7 = 24,
+ TVAFE_ADC_PIN_C_0 = 25,
+ TVAFE_ADC_PIN_C_1 = 26,
+ TVAFE_ADC_PIN_C_2 = 27,
+ TVAFE_ADC_PIN_C_3 = 28,
+ TVAFE_ADC_PIN_C_4 = 29,
+ TVAFE_ADC_PIN_C_5 = 30,
+ TVAFE_ADC_PIN_C_6 = 31,
+ TVAFE_ADC_PIN_C_7 = 32,
+ TVAFE_ADC_PIN_D_0 = 33,
+ TVAFE_ADC_PIN_D_1 = 34,
+ TVAFE_ADC_PIN_D_2 = 35,
+ TVAFE_ADC_PIN_D_3 = 36,
+ TVAFE_ADC_PIN_D_4 = 37,
+ TVAFE_ADC_PIN_D_5 = 38,
+ TVAFE_ADC_PIN_D_6 = 39,
+ TVAFE_ADC_PIN_D_7 = 40,
+ TVAFE_ADC_PIN_SOG_0 = 41,
+ TVAFE_ADC_PIN_SOG_1 = 42,
+ TVAFE_ADC_PIN_SOG_2 = 43,
+ TVAFE_ADC_PIN_SOG_3 = 44,
+ TVAFE_ADC_PIN_SOG_4 = 45,
+ TVAFE_ADC_PIN_SOG_5 = 46,
+ TVAFE_ADC_PIN_SOG_6 = 47,
+ TVAFE_ADC_PIN_SOG_7 = 48,
#endif
- TVAFE_ADC_PIN_MAX,
+ TVAFE_ADC_PIN_MAX,
} tvafe_adc_pin_t;
typedef enum tvafe_src_sig_e {
#if (MESON_CPU_TYPE == MESON_CPU_TYPE_MESONG9TV)
- CVBS_IN0 = 0,
- CVBS_IN1,
- CVBS_IN2,
- CVBS_IN3,
+ CVBS_IN0 = 0,
+ CVBS_IN1,
+ CVBS_IN2,
+ CVBS_IN3,
#else
- CVBS0_Y = 0,
- CVBS0_SOG,
- CVBS1_Y,
- CVBS1_SOG,
- CVBS2_Y,
- CVBS2_SOG,
- CVBS3_Y,
- CVBS3_SOG,
- CVBS4_Y,
- CVBS4_SOG,
- CVBS5_Y,
- CVBS5_SOG,
- CVBS6_Y,
- CVBS6_SOG,
- CVBS7_Y,
- CVBS7_SOG,
- S_VIDEO0_Y,
- S_VIDEO0_C,
- S_VIDEO0_SOG,
- S_VIDEO1_Y,
- S_VIDEO1_C,
- S_VIDEO1_SOG,
- S_VIDEO2_Y,
- S_VIDEO2_C,
- S_VIDEO2_SOG,
- S_VIDEO3_Y,
- S_VIDEO3_C,
- S_VIDEO3_SOG,
- S_VIDEO4_Y,
- S_VIDEO4_C,
- S_VIDEO4_SOG,
- S_VIDEO5_Y,
- S_VIDEO5_C,
- S_VIDEO5_SOG,
- S_VIDEO6_Y,
- S_VIDEO6_C,
- S_VIDEO6_SOG,
- S_VIDEO7_Y,
- S_VIDEO7_C,
- S_VIDEO7_SOG,
- VGA0_G,
- VGA0_B,
- VGA0_R,
- VGA0_SOG,
- VGA1_G,
- VGA1_B,
- VGA1_R,
- VGA1_SOG,
- VGA2_G,
- VGA2_B,
- VGA2_R,
- VGA2_SOG,
- VGA3_G,
- VGA3_B,
- VGA3_R,
- VGA3_SOG,
- VGA4_G,
- VGA4_B,
- VGA4_R,
- VGA4_SOG,
- VGA5_G,
- VGA5_B,
- VGA5_R,
- VGA5_SOG,
- VGA6_G,
- VGA6_B,
- VGA6_R,
- VGA6_SOG,
- VGA7_G,
- VGA7_B,
- VGA7_R,
- VGA7_SOG,
- COMP0_Y,
- COMP0_PB,
- COMP0_PR,
- COMP0_SOG,
- COMP1_Y,
- COMP1_PB,
- COMP1_PR,
- COMP1_SOG,
- COMP2_Y,
- COMP2_PB,
- COMP2_PR,
- COMP2_SOG,
- COMP3_Y,
- COMP3_PB,
- COMP3_PR,
- COMP3_SOG,
- COMP4_Y,
- COMP4_PB,
- COMP4_PR,
- COMP4_SOG,
- COMP5_Y,
- COMP5_PB,
- COMP5_PR,
- COMP5_SOG,
- COMP6_Y,
- COMP6_PB,
- COMP6_PR,
- COMP6_SOG,
- COMP7_Y,
- COMP7_PB,
- COMP7_PR,
- COMP7_SOG,
- SCART0_G,
- SCART0_B,
- SCART0_R,
- SCART0_CVBS,
- SCART1_G,
- SCART1_B,
- SCART1_R,
- SCART1_CVBS,
- SCART2_G,
- SCART2_B,
- SCART2_R,
- SCART2_CVBS,
- SCART3_G,
- SCART3_B,
- SCART3_R,
- SCART3_CVBS,
- SCART4_G,
- SCART4_B,
- SCART4_R,
- SCART4_CVBS,
- SCART5_G,
- SCART5_B,
- SCART5_R,
- SCART5_CVBS,
- SCART6_G,
- SCART6_B,
- SCART6_R,
- SCART6_CVBS,
- SCART7_G,
- SCART7_B,
- SCART7_R,
- SCART7_CVBS,
+ CVBS0_Y = 0,
+ CVBS0_SOG,
+ CVBS1_Y,
+ CVBS1_SOG,
+ CVBS2_Y,
+ CVBS2_SOG,
+ CVBS3_Y,
+ CVBS3_SOG,
+ CVBS4_Y,
+ CVBS4_SOG,
+ CVBS5_Y,
+ CVBS5_SOG,
+ CVBS6_Y,
+ CVBS6_SOG,
+ CVBS7_Y,
+ CVBS7_SOG,
+ S_VIDEO0_Y,
+ S_VIDEO0_C,
+ S_VIDEO0_SOG,
+ S_VIDEO1_Y,
+ S_VIDEO1_C,
+ S_VIDEO1_SOG,
+ S_VIDEO2_Y,
+ S_VIDEO2_C,
+ S_VIDEO2_SOG,
+ S_VIDEO3_Y,
+ S_VIDEO3_C,
+ S_VIDEO3_SOG,
+ S_VIDEO4_Y,
+ S_VIDEO4_C,
+ S_VIDEO4_SOG,
+ S_VIDEO5_Y,
+ S_VIDEO5_C,
+ S_VIDEO5_SOG,
+ S_VIDEO6_Y,
+ S_VIDEO6_C,
+ S_VIDEO6_SOG,
+ S_VIDEO7_Y,
+ S_VIDEO7_C,
+ S_VIDEO7_SOG,
+ VGA0_G,
+ VGA0_B,
+ VGA0_R,
+ VGA0_SOG,
+ VGA1_G,
+ VGA1_B,
+ VGA1_R,
+ VGA1_SOG,
+ VGA2_G,
+ VGA2_B,
+ VGA2_R,
+ VGA2_SOG,
+ VGA3_G,
+ VGA3_B,
+ VGA3_R,
+ VGA3_SOG,
+ VGA4_G,
+ VGA4_B,
+ VGA4_R,
+ VGA4_SOG,
+ VGA5_G,
+ VGA5_B,
+ VGA5_R,
+ VGA5_SOG,
+ VGA6_G,
+ VGA6_B,
+ VGA6_R,
+ VGA6_SOG,
+ VGA7_G,
+ VGA7_B,
+ VGA7_R,
+ VGA7_SOG,
+ COMP0_Y,
+ COMP0_PB,
+ COMP0_PR,
+ COMP0_SOG,
+ COMP1_Y,
+ COMP1_PB,
+ COMP1_PR,
+ COMP1_SOG,
+ COMP2_Y,
+ COMP2_PB,
+ COMP2_PR,
+ COMP2_SOG,
+ COMP3_Y,
+ COMP3_PB,
+ COMP3_PR,
+ COMP3_SOG,
+ COMP4_Y,
+ COMP4_PB,
+ COMP4_PR,
+ COMP4_SOG,
+ COMP5_Y,
+ COMP5_PB,
+ COMP5_PR,
+ COMP5_SOG,
+ COMP6_Y,
+ COMP6_PB,
+ COMP6_PR,
+ COMP6_SOG,
+ COMP7_Y,
+ COMP7_PB,
+ COMP7_PR,
+ COMP7_SOG,
+ SCART0_G,
+ SCART0_B,
+ SCART0_R,
+ SCART0_CVBS,
+ SCART1_G,
+ SCART1_B,
+ SCART1_R,
+ SCART1_CVBS,
+ SCART2_G,
+ SCART2_B,
+ SCART2_R,
+ SCART2_CVBS,
+ SCART3_G,
+ SCART3_B,
+ SCART3_R,
+ SCART3_CVBS,
+ SCART4_G,
+ SCART4_B,
+ SCART4_R,
+ SCART4_CVBS,
+ SCART5_G,
+ SCART5_B,
+ SCART5_R,
+ SCART5_CVBS,
+ SCART6_G,
+ SCART6_B,
+ SCART6_R,
+ SCART6_CVBS,
+ SCART7_G,
+ SCART7_B,
+ SCART7_R,
+ SCART7_CVBS,
#endif
- TVAFE_SRC_SIG_MAX_NUM,
+ TVAFE_SRC_SIG_MAX_NUM,
} tvafe_src_sig_t;
typedef struct tvafe_pin_mux_s {
- enum tvafe_adc_pin_e pin[TVAFE_SRC_SIG_MAX_NUM];
+ enum tvafe_adc_pin_e pin[TVAFE_SRC_SIG_MAX_NUM];
} tvafe_pin_mux_t;
@@ -843,7 +843,7 @@ typedef struct tvafe_pin_mux_s {
#define TVIN_IOC_G_AFE_CVBS_LOCK _IOR(TVIN_IOC_MAGIC, 0x1a, enum tvafe_cvbs_video_e)
#define TVIN_IOC_S_AFE_CVBS_STD _IOW(TVIN_IOC_MAGIC, 0x1b, enum tvin_sig_fmt_e)
#define TVIN_IOC_CALLMASTER_SET _IOW(TVIN_IOC_MAGIC, 0x1c, enum tvin_port_e)
-#define TVIN_IOC_CALLMASTER_GET _IO( TVIN_IOC_MAGIC, 0x1d)
+#define TVIN_IOC_CALLMASTER_GET _IO( TVIN_IOC_MAGIC, 0x1d)
#define TVIN_IOC_S_AFE_ADC_COMP_CAL _IOW(TVIN_IOC_MAGIC, 0x1e, struct tvafe_adc_comp_cal_s)
#define TVIN_IOC_G_AFE_ADC_COMP_CAL _IOR(TVIN_IOC_MAGIC, 0x1f, struct tvafe_adc_comp_cal_s)
#define TVIN_IOC_LOAD_REG _IOW(TVIN_IOC_MAGIC, 0x20, struct am_regs_s)
@@ -854,17 +854,17 @@ typedef struct tvafe_pin_mux_s {
// ***************************************************************************
typedef enum tvin_path_id_e {
- TV_PATH_VDIN_AMVIDEO,
- TV_PATH_VDIN_DEINTERLACE_AMVIDEO,
- TV_PATH_VDIN_3D_AMVIDEO,
- TV_PATH_VDIN_NEW3D_AMVIDEO,
- TV_PATH_VDIN_NEW3D_WITHOUTPPMGR_AMVIDEO,
- TV_PATH_VDIN_FREESCALE_AMVIDEO,
- TV_PATH_DECODER_3D_AMVIDEO,
- TV_PATH_DECODER_AMVIDEO,
- TV_PATH_DECODER_NEW3D_AMVIDEO,
- TV_PATH_DECODER_NEW3D_WITHOUTPPMGR_AMVIDEO,
- TV_PATH_MAX,
+ TV_PATH_VDIN_AMVIDEO,
+ TV_PATH_VDIN_DEINTERLACE_AMVIDEO,
+ TV_PATH_VDIN_3D_AMVIDEO,
+ TV_PATH_VDIN_NEW3D_AMVIDEO,
+ TV_PATH_VDIN_NEW3D_WITHOUTPPMGR_AMVIDEO,
+ TV_PATH_VDIN_FREESCALE_AMVIDEO,
+ TV_PATH_DECODER_3D_AMVIDEO,
+ TV_PATH_DECODER_AMVIDEO,
+ TV_PATH_DECODER_NEW3D_AMVIDEO,
+ TV_PATH_DECODER_NEW3D_WITHOUTPPMGR_AMVIDEO,
+ TV_PATH_MAX,
} tvin_path_id_t;
#define CAMERA_IOC_MAGIC 'C'
@@ -878,101 +878,101 @@ typedef enum tvin_path_id_e {
/*******************************extend define*******************************/
typedef enum tv_source_input_e {
- SOURCE_INVALID = -1,
- SOURCE_TV = 0,
- SOURCE_AV1,
- SOURCE_AV2,
- SOURCE_YPBPR1,
- SOURCE_YPBPR2,
- SOURCE_HDMI1,
- SOURCE_HDMI2,
- SOURCE_HDMI3,
- SOURCE_VGA,
- SOURCE_MPEG,
- SOURCE_DTV,
- SOURCE_SVIDEO,
- SOURCE_IPTV,
- SOURCE_DUMMY,
- SOURCE_MAX,
+ SOURCE_INVALID = -1,
+ SOURCE_TV = 0,
+ SOURCE_AV1,
+ SOURCE_AV2,
+ SOURCE_YPBPR1,
+ SOURCE_YPBPR2,
+ SOURCE_HDMI1,
+ SOURCE_HDMI2,
+ SOURCE_HDMI3,
+ SOURCE_VGA,
+ SOURCE_MPEG,
+ SOURCE_DTV,
+ SOURCE_SVIDEO,
+ SOURCE_IPTV,
+ SOURCE_DUMMY,
+ SOURCE_MAX,
} tv_source_input_t;
typedef enum tv_source_input_type_e {
- SOURCE_TYPE_TV,
- SOURCE_TYPE_AV,
- SOURCE_TYPE_COMPONENT,
- SOURCE_TYPE_HDMI,
- SOURCE_TYPE_VGA,
- SOURCE_TYPE_MPEG,
- SOURCE_TYPE_DTV,
- SOURCE_TYPE_SVIDEO,
- SOURCE_TYPE_IPTV,
- SOURCE_TYPE_MAX,
+ SOURCE_TYPE_TV,
+ SOURCE_TYPE_AV,
+ SOURCE_TYPE_COMPONENT,
+ SOURCE_TYPE_HDMI,
+ SOURCE_TYPE_VGA,
+ SOURCE_TYPE_MPEG,
+ SOURCE_TYPE_DTV,
+ SOURCE_TYPE_SVIDEO,
+ SOURCE_TYPE_IPTV,
+ SOURCE_TYPE_MAX,
} tv_source_input_type_t;
typedef enum adc_cal_type_e {
- CAL_YPBPR = 0,
- CAL_VGA,
- CAL_CVBS,
+ CAL_YPBPR = 0,
+ CAL_VGA,
+ CAL_CVBS,
} adc_cal_type_t;
typedef enum signal_range_e {
- RANGE100 = 0,
- RANGE75,
+ RANGE100 = 0,
+ RANGE75,
} signal_range_t;
typedef struct adc_cal_s {
- unsigned int rcr_max;
- unsigned int rcr_min;
- unsigned int g_y_max;
- unsigned int g_y_min;
- unsigned int bcb_max;
- unsigned int bcb_min;
- unsigned int cr_white;
- unsigned int cb_white;
- unsigned int cr_black;
- unsigned int cb_black;
+ unsigned int rcr_max;
+ unsigned int rcr_min;
+ unsigned int g_y_max;
+ unsigned int g_y_min;
+ unsigned int bcb_max;
+ unsigned int bcb_min;
+ unsigned int cr_white;
+ unsigned int cb_white;
+ unsigned int cr_black;
+ unsigned int cb_black;
} adc_cal_t;
typedef struct tvin_window_pos_s {
- int x1;
- int y1;
- int x2;
- int y2;
+ int x1;
+ int y1;
+ int x2;
+ int y2;
} tvin_window_pos_t;
typedef enum tv_path_type_e {
- TV_PATH_TYPE_DEFAULT,
- TV_PATH_TYPE_TVIN,
- TV_PATH_TYPE_TVIN_PREVIEW,
- TV_PATH_TYPE_MAX,
+ TV_PATH_TYPE_DEFAULT,
+ TV_PATH_TYPE_TVIN,
+ TV_PATH_TYPE_TVIN_PREVIEW,
+ TV_PATH_TYPE_MAX,
} tv_path_type_t;
typedef enum tv_path_status_e {
- TV_PATH_STATUS_NO_DEV = -2,
- TV_PATH_STATUS_ERROR = -1,
- TV_PATH_STATUS_INACTIVE = 0,
- TV_PATH_STATUS_ACTIVE = 1,
- TV_PATH_STATUS_MAX,
+ TV_PATH_STATUS_NO_DEV = -2,
+ TV_PATH_STATUS_ERROR = -1,
+ TV_PATH_STATUS_INACTIVE = 0,
+ TV_PATH_STATUS_ACTIVE = 1,
+ TV_PATH_STATUS_MAX,
} tv_path_status_t;
typedef enum tv_audio_channel_e {
- TV_AUDIO_LINE_IN_0,
- TV_AUDIO_LINE_IN_1,
- TV_AUDIO_LINE_IN_2,
- TV_AUDIO_LINE_IN_3,
- TV_AUDIO_LINE_IN_4,
- TV_AUDIO_LINE_IN_5,
- TV_AUDIO_LINE_IN_6,
- TV_AUDIO_LINE_IN_7,
- TV_AUDIO_LINE_IN_MAX,
+ TV_AUDIO_LINE_IN_0,
+ TV_AUDIO_LINE_IN_1,
+ TV_AUDIO_LINE_IN_2,
+ TV_AUDIO_LINE_IN_3,
+ TV_AUDIO_LINE_IN_4,
+ TV_AUDIO_LINE_IN_5,
+ TV_AUDIO_LINE_IN_6,
+ TV_AUDIO_LINE_IN_7,
+ TV_AUDIO_LINE_IN_MAX,
} tv_audio_channel_t;
typedef enum tv_audio_in_source_type_e {
- TV_AUDIO_IN_SOURCE_TYPE_LINEIN,
- TV_AUDIO_IN_SOURCE_TYPE_ATV,
- TV_AUDIO_IN_SOURCE_TYPE_HDMI,
- TV_AUDIO_IN_SOURCE_TYPE_MAX,
+ TV_AUDIO_IN_SOURCE_TYPE_LINEIN,
+ TV_AUDIO_IN_SOURCE_TYPE_ATV,
+ TV_AUDIO_IN_SOURCE_TYPE_HDMI,
+ TV_AUDIO_IN_SOURCE_TYPE_MAX,
} tv_audio_in_source_type_t;
#define CC_RESOLUTION_1366X768_W (1366)
@@ -983,30 +983,30 @@ typedef enum tv_audio_in_source_type_e {
#define CC_RESOLUTION_3840X2160_H (2160)
typedef enum tv_source_connect_detect_status_e {
- CC_SOURCE_PLUG_OUT,
- CC_SOURCE_PLUG_IN,
+ CC_SOURCE_PLUG_OUT,
+ CC_SOURCE_PLUG_IN,
} tv_source_connect_detect_status_t;
//HDMI rx cec
typedef struct tagHDMIRxRequestReplyItem {
- CCondition WaitReplyCondition;
- int WaitCmd;
- int WaitLogicAddr;
- int WaitTimeOut;
- int WaitFlag;
- int DataFlag;
- struct _cec_msg msg;
+ CCondition WaitReplyCondition;
+ int WaitCmd;
+ int WaitLogicAddr;
+ int WaitTimeOut;
+ int WaitFlag;
+ int DataFlag;
+ struct _cec_msg msg;
} HDMIRxRequestReplyItem;
typedef struct _hdcp_ksv {
- int bksv0;
- int bksv1;
+ int bksv0;
+ int bksv1;
} _hdcp_ksv;
typedef struct am_phase_s {
- unsigned int length; // Length of total
- unsigned int phase[TVIN_SIG_FMT_COMP_MAX - TVIN_SIG_FMT_VGA_THRESHOLD];
+ unsigned int length; // Length of total
+ unsigned int phase[TVIN_SIG_FMT_COMP_MAX - TVIN_SIG_FMT_VGA_THRESHOLD];
} am_phase_t;
@@ -1014,366 +1014,362 @@ typedef struct am_phase_s {
#define CC_CEC_STREAM_SIZE (sizeof(struct _cec_msg))
#define CC_SOURCE_DEV_REFRESH_CNT (E_LA_MAX)
-class CTvin
-{
+class CTvin {
public:
- CTvin();
- ~CTvin();
- int OpenTvin();
- int init_vdin();
- int uninit_vdin ( void );
- int Tv_init_afe ( void );
- int Tv_uninit_afe ( void );
- int Tvin_AddPath ( tvin_path_id_t pathid );
- int Tvin_RemovePath ( tv_path_type_t pathtype );
- int Tvin_CheckPathActive ( tv_path_type_t path_type, int isCheckD2D3 );
- int setMpeg2Vdin(int enable);
- //pre apis
- int AFE_DeviceIOCtl ( int request, ... );
- void TvinApi_CloseAFEModule ( void );
- int TvinApi_SetVdinHVScale ( int vdinx, int hscale, int vscale );
- int TvinApi_SetCompPhase ( am_phase_t &am_phase );
- int TvinApi_SetStartDropFrameCn ( int count );
- int TvinApi_SetCompPhaseEnable ( int enable );
- tvin_trans_fmt TvinApi_Get3DDectMode();
- int TvinApi_GetHDMIAudioStatus ( void );
- int TvinApi_LoadPLLValues ( am_regs_t regs );
- int TvinApi_LoadCVD2Values ( am_regs_t regs );
- int TvinApi_GetFbSize ( unsigned int *fb_width, unsigned int *fb_height );
- int Tvin_StartDecoder ( tvin_info_t &info );
- int Tvin_StopDecoder();
- int get_hdmi_sampling_rate();
- int get_hdmi_ksv_info(int source_input, int data_buf[]);
- int SwitchPort (tvin_port_t source_port );
- //
- void Tvin_SetDepthOf2Dto3D ( int value );
- int set3D_FL_Frame(int value);
- int setLatchFlag(int value);
- //
- int IsFileExist ( const char *file_name );
- char *DelSub ( char *str, char *sub );
- char *VDIN_CheckVideoPath ( const char *videopath );
- int VDIN_AddPath ( const char *videopath );
- int VDIN_RmDefPath ( void );
- int VDIN_RmTvPath ( void );
- int VDIN_AddVideoPath ( int selPath );
- int VDIN_RmPreviewPath ( void );
- int VDIN_GetVdinFd();
-
- int VDIN_OpenModule();
- int VDIN_CloseModule();
- int VDIN_DeviceIOCtl ( int request, ... );
- int VDIN_GetDeviceFileHandle();
- int VDIN_OpenPort ( tvin_port_t port );
- int VDIN_ClosePort();
- int VDIN_StartDec ( const struct tvin_parm_s *vdinParam );
- int VDIN_StopDec();
- int VDIN_GetSignalInfo ( struct tvin_info_s *SignalInfo );
- int VDIN_SetVdinParam ( const struct tvin_parm_s *vdinParam );
- int VDIN_GetVdinParam ( const struct tvin_parm_s *vdinParam );
- int VDIN_OnoffVScaler ( int isOn );
- int VDIN_GetDisplayVFreq ( void );
- int VDIN_SetDisplayVFreq ( int freq, int display_resolution , bool isFbc);
-
- int VDIN_Set2D3DDepth ( int count );
-
- int VDIN_Set2Dto3D ( int on_off );
- int VDIN_Set3DCmd ( int cmd );
-
-
- int VDIN_GetHistgram ( int *hisgram );
- int VDIN_SetMVCViewMode ( int mode );
- int VDIN_GetMVCViewMode ( void );
- int VDIN_SetDIBuffMgrMode ( int mgr_mode );
- int VDIN_SetDICFG ( int cfg );
- int VDIN_SetDI3DDetc ( int enable );
- int VDIN_Get3DDetc ( void );
- int VDIN_GetVscalerStatus ( void );
- int VDIN_TurnOnBlackBarDetect ( int isEnable );
- int VDIN_LoadHdcpKey ( unsigned char *hdcpkey_buff );
- int VDIN_KeepLastFrame ( int enable );
- int VDIN_SetVideoFreeze ( int enable );
- int VDIN_SetDIBypasshd ( int enable );
- int VDIN_SetDIBypassAll ( int enable );
- int VDIN_SetDIBypass_Get_Buf_Threshold ( int enable );
- int VDIN_SetDIBypassProg ( int enable );
- int VDIN_SetDIBypassDynamic ( int flag );
- int VDIN_SetDIDet3DMode ( int value );
- int VDIN_SetDIBypass3D ( int enable );
- int VDIN_SetDIBypassPost ( int enable );
- int VDIN_SetDIProg_Proc_Config ( int value );
- int VDIN_SetDISip_Top_Bot ( int value );
- int VDIN_SetVdinFlag ( int flag );
- int VDIN_EnableRDMA ( int enable );
- int VDIN_GetHdmiHdcpKeyKsvInfo(struct _hdcp_ksv *msg);
- int AFE_OpenModule ( void );
- void AFE_CloseModule ( void );
- int AFE_GetDeviceFileHandle();
- int AFE_SetCVBSStd ( tvin_sig_fmt_t cvbs_fmt );
- int AFE_SetVGAEdid ( const unsigned char *ediddata );
- int AFE_GetVGAEdid ( unsigned char *ediddata );
- int AFE_SetADCTimingAdjust ( const struct tvafe_vga_parm_s *timingadj );
- int AFE_GetADCCurrentTimingAdjust ( struct tvafe_vga_parm_s *timingadj );
- int AFE_VGAAutoAdjust ( struct tvafe_vga_parm_s *timingadj );
- int AFE_SetVGAAutoAjust ( void );
- int AFE_GetVGAAutoAdjustCMDStatus ( tvafe_cmd_status_t *Status );
- int AFE_GetAdcCal ( struct tvafe_adc_cal_s *adccalvalue );
- int AFE_SetAdcCal ( struct tvafe_adc_cal_s *adccalvalue );
- int AFE_GetAdcCompCal ( struct tvafe_adc_comp_cal_s *adccalvalue );
- int AFE_SetAdcCompCal ( struct tvafe_adc_comp_cal_s *adccalvalue );
- int AFE_GetYPbPrWSSinfo ( struct tvafe_comp_wss_s *wssinfo );
- unsigned int data_limit ( float data );
- void matrix_convert_yuv709_to_rgb ( unsigned int y, unsigned int u, unsigned int v, unsigned int *r, unsigned int *g, unsigned int *b );
- void re_order ( unsigned int *a, unsigned int *b );
- char *get_cap_addr ( enum adc_cal_type_e calType );
- inline unsigned char get_mem_data ( char *dp, unsigned int addr );
- int get_frame_average ( enum adc_cal_type_e calType, struct adc_cal_s *mem_data );
- struct adc_cal_s get_n_frame_average ( enum adc_cal_type_e calType ) ;
- int AFE_GetMemData ( int typeSel, struct adc_cal_s *mem_data );
- int AFE_GetCVBSLockStatus ( enum tvafe_cvbs_video_e *cvbs_lock_status );
- int AFE_SetCVBSStd ( unsigned int sig_fmt );
- int VDIN_GetPortConnect ( int port );
- int VDIN_OpenHDMIPinMuxOn ( bool flag );
- int TVAFE_EnablePlugInDetect ( bool flag );
- /*******************************************extend funs*********************/
- static tv_source_input_type_t Tvin_SourcePortToSourceInputType ( tvin_port_t source_port );
- static tv_source_input_type_t Tvin_SourceInputToSourceInputType ( tv_source_input_t source_input );
- static tvin_port_t Tvin_GetSourcePortBySourceType ( tv_source_input_type_t source_type );
- static tvin_port_t Tvin_GetSourcePortBySourceInput ( tv_source_input_t source_input );
- static unsigned int Tvin_TransPortStringToValue(const char *port_str);
- static void Tvin_LoadSourceInputToPortMap();
- static int Tvin_GetSourcePortByCECPhysicalAddress(int physical_addr);
- static tv_audio_channel_t Tvin_GetInputSourceAudioChannelIndex ( tv_source_input_t source_input );
- static tv_audio_in_source_type_t Tvin_GetAudioInSourceType ( tv_source_input_t source_input );
- static tv_source_input_t Tvin_PortToSourceInput ( tvin_port_t port );
- static int isVgaFmtInHdmi ( tvin_sig_fmt_t fmt );
- static bool Tvin_is50HzFrameRateFmt ( tvin_sig_fmt_t fmt );
- static bool Tvin_IsDeinterlaceFmt ( tvin_sig_fmt_t fmt );
- static v4l2_std_id CvbsFtmToV4l2ColorStd(tvin_sig_fmt_t fmt);
+ CTvin();
+ ~CTvin();
+ int OpenTvin();
+ int init_vdin();
+ int uninit_vdin ( void );
+ int Tv_init_afe ( void );
+ int Tv_uninit_afe ( void );
+ int Tvin_AddPath ( tvin_path_id_t pathid );
+ int Tvin_RemovePath ( tv_path_type_t pathtype );
+ int Tvin_CheckPathActive ( tv_path_type_t path_type, int isCheckD2D3 );
+ int setMpeg2Vdin(int enable);
+ //pre apis
+ int AFE_DeviceIOCtl ( int request, ... );
+ void TvinApi_CloseAFEModule ( void );
+ int TvinApi_SetVdinHVScale ( int vdinx, int hscale, int vscale );
+ int TvinApi_SetCompPhase ( am_phase_t &am_phase );
+ int TvinApi_SetStartDropFrameCn ( int count );
+ int TvinApi_SetCompPhaseEnable ( int enable );
+ tvin_trans_fmt TvinApi_Get3DDectMode();
+ int TvinApi_GetHDMIAudioStatus ( void );
+ int TvinApi_LoadPLLValues ( am_regs_t regs );
+ int TvinApi_LoadCVD2Values ( am_regs_t regs );
+ int TvinApi_GetFbSize ( unsigned int *fb_width, unsigned int *fb_height );
+ int Tvin_StartDecoder ( tvin_info_t &info );
+ int Tvin_StopDecoder();
+ int get_hdmi_sampling_rate();
+ int get_hdmi_ksv_info(int source_input, int data_buf[]);
+ int SwitchPort (tvin_port_t source_port );
+ //
+ void Tvin_SetDepthOf2Dto3D ( int value );
+ int set3D_FL_Frame(int value);
+ int setLatchFlag(int value);
+ //
+ int IsFileExist ( const char *file_name );
+ char *DelSub ( char *str, char *sub );
+ char *VDIN_CheckVideoPath ( const char *videopath );
+ int VDIN_AddPath ( const char *videopath );
+ int VDIN_RmDefPath ( void );
+ int VDIN_RmTvPath ( void );
+ int VDIN_AddVideoPath ( int selPath );
+ int VDIN_RmPreviewPath ( void );
+ int VDIN_GetVdinFd();
+
+ int VDIN_OpenModule();
+ int VDIN_CloseModule();
+ int VDIN_DeviceIOCtl ( int request, ... );
+ int VDIN_GetDeviceFileHandle();
+ int VDIN_OpenPort ( tvin_port_t port );
+ int VDIN_ClosePort();
+ int VDIN_StartDec ( const struct tvin_parm_s *vdinParam );
+ int VDIN_StopDec();
+ int VDIN_GetSignalInfo ( struct tvin_info_s *SignalInfo );
+ int VDIN_SetVdinParam ( const struct tvin_parm_s *vdinParam );
+ int VDIN_GetVdinParam ( const struct tvin_parm_s *vdinParam );
+ int VDIN_OnoffVScaler ( int isOn );
+ int VDIN_GetDisplayVFreq ( void );
+ int VDIN_SetDisplayVFreq ( int freq, int display_resolution , bool isFbc);
+
+ int VDIN_Set2D3DDepth ( int count );
+
+ int VDIN_Set2Dto3D ( int on_off );
+ int VDIN_Set3DCmd ( int cmd );
+
+
+ int VDIN_GetHistgram ( int *hisgram );
+ int VDIN_SetMVCViewMode ( int mode );
+ int VDIN_GetMVCViewMode ( void );
+ int VDIN_SetDIBuffMgrMode ( int mgr_mode );
+ int VDIN_SetDICFG ( int cfg );
+ int VDIN_SetDI3DDetc ( int enable );
+ int VDIN_Get3DDetc ( void );
+ int VDIN_GetVscalerStatus ( void );
+ int VDIN_TurnOnBlackBarDetect ( int isEnable );
+ int VDIN_LoadHdcpKey ( unsigned char *hdcpkey_buff );
+ int VDIN_KeepLastFrame ( int enable );
+ int VDIN_SetVideoFreeze ( int enable );
+ int VDIN_SetDIBypasshd ( int enable );
+ int VDIN_SetDIBypassAll ( int enable );
+ int VDIN_SetDIBypass_Get_Buf_Threshold ( int enable );
+ int VDIN_SetDIBypassProg ( int enable );
+ int VDIN_SetDIBypassDynamic ( int flag );
+ int VDIN_SetDIDet3DMode ( int value );
+ int VDIN_SetDIBypass3D ( int enable );
+ int VDIN_SetDIBypassPost ( int enable );
+ int VDIN_SetDIProg_Proc_Config ( int value );
+ int VDIN_SetDISip_Top_Bot ( int value );
+ int VDIN_SetVdinFlag ( int flag );
+ int VDIN_EnableRDMA ( int enable );
+ int VDIN_GetHdmiHdcpKeyKsvInfo(struct _hdcp_ksv *msg);
+ int AFE_OpenModule ( void );
+ void AFE_CloseModule ( void );
+ int AFE_GetDeviceFileHandle();
+ int AFE_SetCVBSStd ( tvin_sig_fmt_t cvbs_fmt );
+ int AFE_SetVGAEdid ( const unsigned char *ediddata );
+ int AFE_GetVGAEdid ( unsigned char *ediddata );
+ int AFE_SetADCTimingAdjust ( const struct tvafe_vga_parm_s *timingadj );
+ int AFE_GetADCCurrentTimingAdjust ( struct tvafe_vga_parm_s *timingadj );
+ int AFE_VGAAutoAdjust ( struct tvafe_vga_parm_s *timingadj );
+ int AFE_SetVGAAutoAjust ( void );
+ int AFE_GetVGAAutoAdjustCMDStatus ( tvafe_cmd_status_t *Status );
+ int AFE_GetAdcCal ( struct tvafe_adc_cal_s *adccalvalue );
+ int AFE_SetAdcCal ( struct tvafe_adc_cal_s *adccalvalue );
+ int AFE_GetAdcCompCal ( struct tvafe_adc_comp_cal_s *adccalvalue );
+ int AFE_SetAdcCompCal ( struct tvafe_adc_comp_cal_s *adccalvalue );
+ int AFE_GetYPbPrWSSinfo ( struct tvafe_comp_wss_s *wssinfo );
+ unsigned int data_limit ( float data );
+ void matrix_convert_yuv709_to_rgb ( unsigned int y, unsigned int u, unsigned int v, unsigned int *r, unsigned int *g, unsigned int *b );
+ void re_order ( unsigned int *a, unsigned int *b );
+ char *get_cap_addr ( enum adc_cal_type_e calType );
+ inline unsigned char get_mem_data ( char *dp, unsigned int addr );
+ int get_frame_average ( enum adc_cal_type_e calType, struct adc_cal_s *mem_data );
+ struct adc_cal_s get_n_frame_average ( enum adc_cal_type_e calType ) ;
+ int AFE_GetMemData ( int typeSel, struct adc_cal_s *mem_data );
+ int AFE_GetCVBSLockStatus ( enum tvafe_cvbs_video_e *cvbs_lock_status );
+ int AFE_SetCVBSStd ( unsigned int sig_fmt );
+ int VDIN_GetPortConnect ( int port );
+ int VDIN_OpenHDMIPinMuxOn ( bool flag );
+ int TVAFE_EnablePlugInDetect ( bool flag );
+ /*******************************************extend funs*********************/
+ static tv_source_input_type_t Tvin_SourcePortToSourceInputType ( tvin_port_t source_port );
+ static tv_source_input_type_t Tvin_SourceInputToSourceInputType ( tv_source_input_t source_input );
+ static tvin_port_t Tvin_GetSourcePortBySourceType ( tv_source_input_type_t source_type );
+ static tvin_port_t Tvin_GetSourcePortBySourceInput ( tv_source_input_t source_input );
+ static unsigned int Tvin_TransPortStringToValue(const char *port_str);
+ static void Tvin_LoadSourceInputToPortMap();
+ static int Tvin_GetSourcePortByCECPhysicalAddress(int physical_addr);
+ static tv_audio_channel_t Tvin_GetInputSourceAudioChannelIndex ( tv_source_input_t source_input );
+ static tv_audio_in_source_type_t Tvin_GetAudioInSourceType ( tv_source_input_t source_input );
+ static tv_source_input_t Tvin_PortToSourceInput ( tvin_port_t port );
+ static int isVgaFmtInHdmi ( tvin_sig_fmt_t fmt );
+ static bool Tvin_is50HzFrameRateFmt ( tvin_sig_fmt_t fmt );
+ static bool Tvin_IsDeinterlaceFmt ( tvin_sig_fmt_t fmt );
+ static v4l2_std_id CvbsFtmToV4l2ColorStd(tvin_sig_fmt_t fmt);
public:
- class CTvinSigDetect: public CThread
- {
- public:
- static const int VDIN_NOSIG_DEFAULT_CHECK_TIMES = 1;
- CTvinSigDetect ( CTvin *pTvin );
- ~CTvinSigDetect();
- int startDetect();
- int stopDetect();
- int pauseDetect();
- int resumeDetect();
- int initSigState();
- void setVdinNoSigCheckKeepTimes(int times, bool isOnce);//times is time, ms
- int requestAndWaitPauseDetect();
- //first pause detect? ok
- tvin_info_t &getCurSigInfo()
- {
- return m_cur_sig_info;
- }
- class ISigDetectObserver
- {
- public:
- ISigDetectObserver()
- {};
- virtual ~ISigDetectObserver()
- {};
- virtual void onSigToStable()
- {};
- virtual void onSigStableToUnstable() {};
- virtual void onSigStableToUnSupport() {};
- virtual void onSigStableToNoSig() {};
- virtual void onSigUnStableToUnSupport() {};
- virtual void onSigUnStableToNoSig() {};
- virtual void onSigNullToNoSig() {};
- virtual void onSigNoSigToUnstable() {};
-
- virtual void onSigStillStable() {};
- virtual void onSigStillUnstable() {};
- virtual void onSigStillNosig() {};
- virtual void onSigStillNoSupport() {};
- virtual void onSigStillNull() {};
- virtual void onStableSigFmtChange() {};
- virtual void onStableTransFmtChange() {};
-
- virtual void onSigDetectEnter() {};
- virtual void onLoop() {};
- };
- void setObserver ( ISigDetectObserver *pOb )
- {
- mpObserver = pOb;
- };
- private:
- bool threadLoop();
- int Tv_TvinSigDetect ( int &args );
-
- //member
- tvin_info_t m_cur_sig_info;
- tvin_info_t m_pre_sig_info;
- int mKeepNosigTime;
- bool m_is_nosig_checktimes_once_valid;
- CTvin *mpTvin;
- mutable CMutex mLock;
- CCondition mDetectPauseCondition;
- CCondition mRequestPauseCondition;
- volatile int m_sig_detect_status;
- volatile bool m_request_pause_detect;
- enum DetectState {
- STATE_STOPED = 0,
- STATE_RUNNING,
- STATE_PAUSE
- };
- int mDetectState;
- ISigDetectObserver *mpObserver;
- };//
-
- class CSourceConnectDetect: public CThread
- {
- public:
- CSourceConnectDetect(CTvin *pTvin);
- ~CSourceConnectDetect();
-
- int startDetect();
- int refreshDetectSources();
- int refreshDetectAVInfo();
- int GetSourceConnectStatus(int source_input);
-
- class ISourceConnectObserver
- {
- public:
- ISourceConnectObserver() {};
- virtual ~ISourceConnectObserver() {};
- virtual void onSourceConnect(int source_type, int connect_status) {};
- };
- void setObserver ( ISourceConnectObserver *pOb )
- {
- mpObserver = pOb;
- };
- private:
+ class CTvinSigDetect: public CThread {
+ public:
+ static const int VDIN_NOSIG_DEFAULT_CHECK_TIMES = 1;
+ CTvinSigDetect ( CTvin *pTvin );
+ ~CTvinSigDetect();
+ int startDetect();
+ int stopDetect();
+ int pauseDetect();
+ int resumeDetect();
+ int initSigState();
+ void setVdinNoSigCheckKeepTimes(int times, bool isOnce);//times is time, ms
+ int requestAndWaitPauseDetect();
+ //first pause detect? ok
+ tvin_info_t &getCurSigInfo()
+ {
+ return m_cur_sig_info;
+ }
+ class ISigDetectObserver {
+ public:
+ ISigDetectObserver()
+ {
+ };
+ virtual ~ISigDetectObserver()
+ {
+ };
+ virtual void onSigToStable()
+ {
+ };
+ virtual void onSigStableToUnstable() {};
+ virtual void onSigStableToUnSupport() {};
+ virtual void onSigStableToNoSig() {};
+ virtual void onSigUnStableToUnSupport() {};
+ virtual void onSigUnStableToNoSig() {};
+ virtual void onSigNullToNoSig() {};
+ virtual void onSigNoSigToUnstable() {};
+
+ virtual void onSigStillStable() {};
+ virtual void onSigStillUnstable() {};
+ virtual void onSigStillNosig() {};
+ virtual void onSigStillNoSupport() {};
+ virtual void onSigStillNull() {};
+ virtual void onStableSigFmtChange() {};
+ virtual void onStableTransFmtChange() {};
+
+ virtual void onSigDetectEnter() {};
+ virtual void onLoop() {};
+ };
+ void setObserver ( ISigDetectObserver *pOb )
+ {
+ mpObserver = pOb;
+ };
+ private:
+ bool threadLoop();
+ int Tv_TvinSigDetect ( int &args );
+
+ //member
+ tvin_info_t m_cur_sig_info;
+ tvin_info_t m_pre_sig_info;
+ int mKeepNosigTime;
+ bool m_is_nosig_checktimes_once_valid;
+ CTvin *mpTvin;
+ mutable CMutex mLock;
+ CCondition mDetectPauseCondition;
+ CCondition mRequestPauseCondition;
+ volatile int m_sig_detect_status;
+ volatile bool m_request_pause_detect;
+ enum DetectState {
+ STATE_STOPED = 0,
+ STATE_RUNNING,
+ STATE_PAUSE
+ };
+ int mDetectState;
+ ISigDetectObserver *mpObserver;
+ };//
+
+ class CSourceConnectDetect: public CThread {
+ public:
+ CSourceConnectDetect(CTvin *pTvin);
+ ~CSourceConnectDetect();
+
+ int startDetect();
+ int refreshDetectSources();
+ int refreshDetectAVInfo();
+ int GetSourceConnectStatus(int source_input);
+
+ class ISourceConnectObserver {
+ public:
+ ISourceConnectObserver() {};
+ virtual ~ISourceConnectObserver() {};
+ virtual void onSourceConnect(int source_type, int connect_status) {};
+ };
+ void setObserver ( ISourceConnectObserver *pOb )
+ {
+ mpObserver = pOb;
+ };
+ private:
#define CC_AV_DETECT_METHOD_ADC_PLUG_IN (0)
#define CC_AV_DETECT_METHOD_ADC_PLUG_OUT (1)
#define CC_AV_DETECT_SAMPLE_DATA_MAX_LEN (512)
- bool threadLoop();
-
- ISourceConnectObserver *mpObserver;
- CTvin *mpTvin;
-
- volatile int mSourceDetectSleepTime;
-
- //AV detect variables
- int mAVDetectMethod;
- int mAVDetectPlugOutDutyCycle;
- int mAVDetectPlugInDutyCycle;
- int mAVDetectPlugOutADCThreshold;
- int mAVDetectPlugInADCThreshold;
- int mAVDetectSampleSize;
- int mAV1DetectADCChan;
- int mAV2DetectADCChan;
- int mAV1CurSampleInd;
- int mAV2CurSampleInd;
- int mAV1SampleDataBuf[CC_AV_DETECT_SAMPLE_DATA_MAX_LEN];
- int mAV2SampleDataBuf[CC_AV_DETECT_SAMPLE_DATA_MAX_LEN];
-
- int mSourceDetectTable[SOURCE_MAX];
- int mSourceDetectPreStatusBuf[SOURCE_MAX];
- int mSourceDetectCurStatusBuf[SOURCE_MAX];
-
- int DetectSources();
- int DetectAVSource(int source_input);
- int DetectHDMISource(int source_input);
- };
-
- class CHDMIRxCEC: public CThread
- {
- public:
- CHDMIRxCEC(CTvin *pTvin);
- ~CHDMIRxCEC();
-
- class IHDMIRxCECObserver
- {
- public:
- IHDMIRxCECObserver() {};
- virtual ~IHDMIRxCECObserver() {};
- virtual void onHDMIRxCECMessage(int msg_len, unsigned char msg_buf[]) {};
- };
- void setObserver ( IHDMIRxCECObserver *pOb )
- {
- mpObserver = pOb;
- };
-
- int start();
- int stop();
- int pause();
- int resume();
- int ClearRxMessageBuffer();
- int processRefreshSrcDevice(int source_input);
- int SendCustomMessage(int source_input, unsigned char data_buf[]);
- int SendCustomMessageAndWaitReply(int source_input, unsigned char data_buf[], unsigned char reply_buf[], int WaitCmd, int timeout);
- int SendBoradcastStandbyMessage(int source_input);
- int SendGiveCECVersionMessage(int source_input, unsigned char data_buf[]);
- int SendGiveDeviceVendorIDMessage(int source_input, unsigned char data_buf[]);
- int SendGiveOSDNameMessage(int source_input, unsigned char data_buf[]);
- int SendGivePhysicalAddressMessage(int source_input, int logic_addr, int *physical_addr);
- int SendSetMenuLanguageMessage(int source_input, unsigned char data_buf[]);
- int SendVendorRemoteKeyDownMessage(int source_input, unsigned char key_val);
- int SendVendorRemoteKeyUpMessage(int source_input);
-
-
- private:
- int mModuleEnableFlag;
- int mRequestPause;
- int mState;
- IHDMIRxCECObserver *mpObserver;
- CTvin *mpTvin;
-
- bool threadLoop();
- int processData(int msg_cnt);
-
- int isAllowOperate(int source_input);
- int GetModuleEnableFlag();
- int GetDeviceLogicAddr(int source_input);
- int SendMessage(struct _cec_msg *msg);
- int sendMessageAndWaitReply(struct _cec_msg *msg, struct _cec_msg *reply_msg, int WaitCmd, int timeout);
- int GetMessage(struct _cec_msg *msg_list);
- int rmFromRequestList(int index);
- int addToRequestList(HDMIRxRequestReplyItem *reply_item);
- int PrintMessage(const char *func_name, int data_type, struct _cec_msg *msg);
- int ClrReplyListItem(HDMIRxRequestReplyItem *reply_item);
- int CopyMessageData(unsigned char data_buf[], unsigned char msg_data[], int msg_len);
-
- int mSourceDevLogicAddrBuf[CC_SOURCE_DEV_REFRESH_CNT];
- int mSourceDevRefreshBuf[CC_SOURCE_DEV_REFRESH_CNT];
-
- CCondition mPauseCondition;
- mutable CMutex mLock;
- mutable CMutex mListLock;
- mutable CMutex mReplyLock[CC_REQUEST_LIST_SIZE];
- HDMIRxRequestReplyItem mReplyList[CC_REQUEST_LIST_SIZE];
- struct _cec_msg mMsgBuf[CC_REQUEST_LIST_SIZE];
-
- enum RefreshState {
- STATE_STOPED = 0,
- STATE_RUNNING,
- STATE_PAUSE,
- STATE_FINISHED,
- };
- };
+ bool threadLoop();
+
+ ISourceConnectObserver *mpObserver;
+ CTvin *mpTvin;
+
+ volatile int mSourceDetectSleepTime;
+
+ //AV detect variables
+ int mAVDetectMethod;
+ int mAVDetectPlugOutDutyCycle;
+ int mAVDetectPlugInDutyCycle;
+ int mAVDetectPlugOutADCThreshold;
+ int mAVDetectPlugInADCThreshold;
+ int mAVDetectSampleSize;
+ int mAV1DetectADCChan;
+ int mAV2DetectADCChan;
+ int mAV1CurSampleInd;
+ int mAV2CurSampleInd;
+ int mAV1SampleDataBuf[CC_AV_DETECT_SAMPLE_DATA_MAX_LEN];
+ int mAV2SampleDataBuf[CC_AV_DETECT_SAMPLE_DATA_MAX_LEN];
+
+ int mSourceDetectTable[SOURCE_MAX];
+ int mSourceDetectPreStatusBuf[SOURCE_MAX];
+ int mSourceDetectCurStatusBuf[SOURCE_MAX];
+
+ int DetectSources();
+ int DetectAVSource(int source_input);
+ int DetectHDMISource(int source_input);
+ };
+
+ class CHDMIRxCEC: public CThread {
+ public:
+ CHDMIRxCEC(CTvin *pTvin);
+ ~CHDMIRxCEC();
+
+ class IHDMIRxCECObserver {
+ public:
+ IHDMIRxCECObserver() {};
+ virtual ~IHDMIRxCECObserver() {};
+ virtual void onHDMIRxCECMessage(int msg_len, unsigned char msg_buf[]) {};
+ };
+ void setObserver ( IHDMIRxCECObserver *pOb )
+ {
+ mpObserver = pOb;
+ };
+
+ int start();
+ int stop();
+ int pause();
+ int resume();
+ int ClearRxMessageBuffer();
+ int processRefreshSrcDevice(int source_input);
+ int SendCustomMessage(int source_input, unsigned char data_buf[]);
+ int SendCustomMessageAndWaitReply(int source_input, unsigned char data_buf[], unsigned char reply_buf[], int WaitCmd, int timeout);
+ int SendBoradcastStandbyMessage(int source_input);
+ int SendGiveCECVersionMessage(int source_input, unsigned char data_buf[]);
+ int SendGiveDeviceVendorIDMessage(int source_input, unsigned char data_buf[]);
+ int SendGiveOSDNameMessage(int source_input, unsigned char data_buf[]);
+ int SendGivePhysicalAddressMessage(int source_input, int logic_addr, int *physical_addr);
+ int SendSetMenuLanguageMessage(int source_input, unsigned char data_buf[]);
+ int SendVendorRemoteKeyDownMessage(int source_input, unsigned char key_val);
+ int SendVendorRemoteKeyUpMessage(int source_input);
+
+
+ private:
+ int mModuleEnableFlag;
+ int mRequestPause;
+ int mState;
+ IHDMIRxCECObserver *mpObserver;
+ CTvin *mpTvin;
+
+ bool threadLoop();
+ int processData(int msg_cnt);
+
+ int isAllowOperate(int source_input);
+ int GetModuleEnableFlag();
+ int GetDeviceLogicAddr(int source_input);
+ int SendMessage(struct _cec_msg *msg);
+ int sendMessageAndWaitReply(struct _cec_msg *msg, struct _cec_msg *reply_msg, int WaitCmd, int timeout);
+ int GetMessage(struct _cec_msg *msg_list);
+ int rmFromRequestList(int index);
+ int addToRequestList(HDMIRxRequestReplyItem *reply_item);
+ int PrintMessage(const char *func_name, int data_type, struct _cec_msg *msg);
+ int ClrReplyListItem(HDMIRxRequestReplyItem *reply_item);
+ int CopyMessageData(unsigned char data_buf[], unsigned char msg_data[], int msg_len);
+
+ int mSourceDevLogicAddrBuf[CC_SOURCE_DEV_REFRESH_CNT];
+ int mSourceDevRefreshBuf[CC_SOURCE_DEV_REFRESH_CNT];
+
+ CCondition mPauseCondition;
+ mutable CMutex mLock;
+ mutable CMutex mListLock;
+ mutable CMutex mReplyLock[CC_REQUEST_LIST_SIZE];
+ HDMIRxRequestReplyItem mReplyList[CC_REQUEST_LIST_SIZE];
+ struct _cec_msg mMsgBuf[CC_REQUEST_LIST_SIZE];
+
+ enum RefreshState {
+ STATE_STOPED = 0,
+ STATE_RUNNING,
+ STATE_PAUSE,
+ STATE_FINISHED,
+ };
+ };
private:
- int m_vdin_dev_fd;
- int afe_dev_fd;
- tvin_parm_t m_tvin_param;
- tvin_parm_t gTvinVDINParam;
- tvin_info_t gTvinVDINSignalInfo;
- tvin_parm_t gTvinAFEParam;
- tvin_info_t gTvinAFESignalInfo;
- static int mSourceInputToPortMap[SOURCE_MAX];
- int gExistD2D3;
- char gVideoPath[256];
- int m_is_decoder_start;
-
- enum tvin_path_id_e m_pathid;
- char config_tv_path[64];
- char config_default_path[64];
+ int m_vdin_dev_fd;
+ int afe_dev_fd;
+ tvin_parm_t m_tvin_param;
+ tvin_parm_t gTvinVDINParam;
+ tvin_info_t gTvinVDINSignalInfo;
+ tvin_parm_t gTvinAFEParam;
+ tvin_info_t gTvinAFESignalInfo;
+ static int mSourceInputToPortMap[SOURCE_MAX];
+ int gExistD2D3;
+ char gVideoPath[256];
+ int m_is_decoder_start;
+
+ enum tvin_path_id_e m_pathid;
+ char config_tv_path[64];
+ char config_default_path[64];
};
#endif
diff --git a/tvapi/libtv/tvsetting/CBlobDevice.cpp b/tvapi/libtv/tvsetting/CBlobDevice.cpp
index 8974fbf..3a2dcdf 100644
--- a/tvapi/libtv/tvsetting/CBlobDevice.cpp
+++ b/tvapi/libtv/tvsetting/CBlobDevice.cpp
@@ -1,27 +1,27 @@
-#include <stdio.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <pthread.h>
-#include "CBlobDeviceE2prom.h"
-#include "CBlobDevice.h"
-#include "CTvLog.h"
-
-#define LOG_TAG "CBlobDevice"
-
-
-CBlobDevice::CBlobDevice()
-{
- m_dev_path[0] = '\0';
-}
-
-CBlobDevice::~CBlobDevice()
-{
-}
-
-int CBlobDevice::IsFileExist(const char *file_name)
-{
- struct stat tmp_st;
-
- return stat(file_name, &tmp_st);
-}
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include "CBlobDeviceE2prom.h"
+#include "CBlobDevice.h"
+#include "CTvLog.h"
+
+#define LOG_TAG "CBlobDevice"
+
+
+CBlobDevice::CBlobDevice()
+{
+ m_dev_path[0] = '\0';
+}
+
+CBlobDevice::~CBlobDevice()
+{
+}
+
+int CBlobDevice::IsFileExist(const char *file_name)
+{
+ struct stat tmp_st;
+
+ return stat(file_name, &tmp_st);
+}
diff --git a/tvapi/libtv/tvsetting/CBlobDevice.h b/tvapi/libtv/tvsetting/CBlobDevice.h
index 43f2d49..1772185 100644
--- a/tvapi/libtv/tvsetting/CBlobDevice.h
+++ b/tvapi/libtv/tvsetting/CBlobDevice.h
@@ -1,51 +1,50 @@
-#ifndef BLOB_BASE_DEVICE_H
-#define BLOB_BASE_DEVICE_H
-
-class CBlobDevice
-{
-
-public:
- static const int CC_MAX_FILE_PATH = 256;
- static const int CC_ERR_FILE_HANDLE = -1;
- static const int CC_INIT_BYTE_VAL = 0xFF;
- static const int CC_SSM_PROTECT_ON = 0;
- static const int CC_SSM_PROTECT_OFF = 1;
-
- static const int CC_DEVICE_E2PROM = (0);
- static const int CC_DEVICE_SPI = (1);
- static const int CC_DEVICE_FILE = (2);
- static const int CC_DEVICE_RAM = (3);
-
- CBlobDevice();
- virtual ~CBlobDevice();
-
- virtual int WriteBytes(int offset, int size, unsigned char *buf) = 0;
- virtual int ReadBytes(int offset, int size, unsigned char *buf) = 0;
- virtual int EraseAllData() = 0;
- virtual int InitCheck() = 0;
- virtual int OpenDevice() = 0;
- virtual int CloseDevice() = 0;
- int WriteOneByte(int offset, unsigned char val)
- {
- return WriteBytes(offset, 1, &val);
- }
- int ReadOneByte(int offset, unsigned char *ptrVal)
- {
- return ReadBytes(offset, 1, ptrVal);
- }
-
- int m_dev_type; //device type
- int m_dev_total_size; //device total size(Byte)
-
- char m_dev_path[CC_MAX_FILE_PATH]; //device path
- int m_dev_fd;
-
-protected:
- unsigned char *mDataBuf;
-
-private:
- int IsFileExist(const char *file_name);
-
-};
-
-#endif // ANDROID_SSM_BASE_H
+#ifndef BLOB_BASE_DEVICE_H
+#define BLOB_BASE_DEVICE_H
+
+class CBlobDevice {
+
+public:
+ static const int CC_MAX_FILE_PATH = 256;
+ static const int CC_ERR_FILE_HANDLE = -1;
+ static const int CC_INIT_BYTE_VAL = 0xFF;
+ static const int CC_SSM_PROTECT_ON = 0;
+ static const int CC_SSM_PROTECT_OFF = 1;
+
+ static const int CC_DEVICE_E2PROM = (0);
+ static const int CC_DEVICE_SPI = (1);
+ static const int CC_DEVICE_FILE = (2);
+ static const int CC_DEVICE_RAM = (3);
+
+ CBlobDevice();
+ virtual ~CBlobDevice();
+
+ virtual int WriteBytes(int offset, int size, unsigned char *buf) = 0;
+ virtual int ReadBytes(int offset, int size, unsigned char *buf) = 0;
+ virtual int EraseAllData() = 0;
+ virtual int InitCheck() = 0;
+ virtual int OpenDevice() = 0;
+ virtual int CloseDevice() = 0;
+ int WriteOneByte(int offset, unsigned char val)
+ {
+ return WriteBytes(offset, 1, &val);
+ }
+ int ReadOneByte(int offset, unsigned char *ptrVal)
+ {
+ return ReadBytes(offset, 1, ptrVal);
+ }
+
+ int m_dev_type; //device type
+ int m_dev_total_size; //device total size(Byte)
+
+ char m_dev_path[CC_MAX_FILE_PATH]; //device path
+ int m_dev_fd;
+
+protected:
+ unsigned char *mDataBuf;
+
+private:
+ int IsFileExist(const char *file_name);
+
+};
+
+#endif // ANDROID_SSM_BASE_H
diff --git a/tvapi/libtv/tvsetting/CBlobDeviceE2prom.cpp b/tvapi/libtv/tvsetting/CBlobDeviceE2prom.cpp
index 2e0ebe3..849c634 100644
--- a/tvapi/libtv/tvsetting/CBlobDeviceE2prom.cpp
+++ b/tvapi/libtv/tvsetting/CBlobDeviceE2prom.cpp
@@ -1,353 +1,353 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-
-#include "CBlobDeviceE2prom.h"
-#include "../tvconfig/tvconfig.h"
-#include "../tvutils/tvutils.h"
-#include "CTvLog.h"
-
-#define LOG_TAG "CBlobDeviceE2prom"
-
-#define msleep(x) usleep(x*1000)
-
-CBlobDeviceE2prom::CBlobDeviceE2prom()
-{
-
-}
-
-CBlobDeviceE2prom::~CBlobDeviceE2prom()
-{
-}
-
-int CBlobDeviceE2prom::WriteBytes(int offset, int size, unsigned char *buf)
-{
- return 0;
-}
-int CBlobDeviceE2prom::ReadBytes(int offset, int size, unsigned char *buf)
-{
- return 0;
-}
-int CBlobDeviceE2prom::EraseAllData()
-{
- return 0;
-}
-int CBlobDeviceE2prom::InitCheck()
-{
- return 0;
-}
-int CBlobDeviceE2prom::OpenDevice()
-{
- return 0;
-}
-int CBlobDeviceE2prom::CloseDevice()
-{
- return 0;
-}
-//int CBlobDeviceE2prom::InitCheck() {
-/* int i, tmp_dev_total_size = 0, tmp_offset = 0, rw_check_count = 4;
- unsigned char *tmp_buf = NULL;
- unsigned char w_ch = 0, r_ch = 0;
-
- SetWriteProtectStatus (CC_SSM_PROTECT_ON);
-
- if (ValidOperateCheck() < 0) {
- return -1;
- }
-
- tmp_offset = E2P_DEV_RW_TEST_OFFSET;
-
- if (tmp_offset >= 0) {
- for (i = 0; i < rw_check_count; i++) {
- w_ch = 0x5A;
- WriteNBytes(tmp_offset, 1, &w_ch);
-
- r_ch = 0x00;
- ReadNBytes(tmp_offset, 1, &r_ch);
-
- if (r_ch != w_ch) {
- LOGE("%s, Device rw check error, write %d, read %d.\n", "TV", w_ch, r_ch);
- return -1;
- }
-
- w_ch = 0xA5;
- WriteNBytes(tmp_offset, 1, &w_ch);
-
- r_ch = 0x00;
- ReadNBytes(tmp_offset, 1, &r_ch);
-
- if (r_ch != w_ch) {
- LOGE("%s, Device rw check error, write %d, read %d.\n", "TV", w_ch, r_ch);
- return -1;
- }
- }
- }
-
- if (device_buf != NULL) {
- delete device_buf;
- device_buf = NULL;
- }
-
- if (device_use_buffer) {
- tmp_dev_total_size = GetDeviceTotalSize();
- if (tmp_dev_total_size <= 0) {
- LOGE("%s, Device file size must be more than 0.\n", "TV");
- return -1;
- }
-
- tmp_buf = new unsigned char[tmp_dev_total_size];
- if (tmp_buf != NULL) {
- if (ReadNBytes(0, tmp_dev_total_size, tmp_buf) < 0) {
- delete tmp_buf;
- tmp_buf = NULL;
-
- LOGE("%s, Read data from device error when read data to device rw buffer!!!.\n", "TV");
- return -1;
- }
-
- device_buf = new unsigned char[tmp_dev_total_size];
- if (device_buf != NULL) {
- memcpy((void *) device_buf, (void *) tmp_buf, tmp_dev_total_size);
- }
-
- delete tmp_buf;
- tmp_buf = NULL;
- }
- }
-*/
-// return 0;
-//}
-
-//int CBlobDeviceE2prom::OpenDevice() {
-/*int device_fd = CC_ERR_FILE_HANDLE;
-
-if (gFilePathBuf == NULL) {
- LOGE("%s, Device file name is NULL.\n", "TV");
- return CC_ERR_FILE_HANDLE;
-}
-
-device_fd = open(gFilePathBuf, O_RDWR);
-if (device_fd < 0) {
- LOGE("%s, Open device file \"%s\" error: %s.\n", "TV", gFilePathBuf, strerror(errno));
- return CC_ERR_FILE_HANDLE;
-}
-
-return device_fd;*/
-// return 0;
-//}
-
-//int CBlobDeviceE2prom::CloseDevice() {
-/*if (*device_fd >= 0) {
- close(*device_fd);
- *device_fd = CC_ERR_FILE_HANDLE;
-}*/
-
-// return 0;
-//}
-
-/*int CBlobDeviceE2prom::SetWriteProtectStatus(int protect_status) {
-}*/
-
-/*int CBlobDeviceE2prom::CheckDeviceWrAvaliable(int offset, int len) {
- int tmp_dev_start_offset = 0;
- int tmp_dev_end_offset = 0;
-
- GetDeviceRWStartOffset(&tmp_dev_start_offset);
- if (tmp_dev_start_offset < 0) {
- LOGE("%s, Device file r/w start offset must be greater than or euqal to 0.\n", "TV");
- return -1;
- }
-
- GetDeviceRWEndOffset(&tmp_dev_end_offset);
- if (tmp_dev_end_offset < 0) {
- LOGE("%s, Device file r/w end offset must be more than 0.\n", "TV");
- return -1;
- }
-
- if (len <= 0) {
- LOGE("%s, The w/r length should be more than 0.\n", "TV");
- return -1;
- }
-
- if ((len + tmp_dev_start_offset + offset) > tmp_dev_end_offset + 1) {
- LOGE("%s, w/r would be overflow!!! len = %d, start offset = %d, offset = %d, end offset = %d.\n", "TV", len, tmp_dev_start_offset, offset, tmp_dev_end_offset);
- return -1;
- }
-
- if (ValidOperateCheck() < 0) {
- return -1;
- }
-
- return 0;
-}
-
-/*int CBlobDeviceE2prom::WriteSpecialBytes(int offset, int len, unsigned char data_buf[]) {
- int i = 0, tmp_ret = 0;
- int tmp_dev_w_page_size = 0;
- int tmp_dev_slave_addr = 0;
- int device_fd = CC_ERR_FILE_HANDLE;
- struct i2c_rdwr_ioctl_data ctl_data;
- struct i2c_msg msg;
- unsigned char msg_buf[E2P_MSG_BUF_SIZE];
-
- //GetDeviceWritePageSize(&tmp_dev_w_page_size);
- //if (len > tmp_dev_w_page_size) {
- // LOGE("%s, The write length should be less than page size(%d).\n", "TV", tmp_dev_w_page_size);
- // return -1;
- //}
-
- if (CheckDeviceWrAvaliable(offset, len) < 0) {
- return -1;
- }
-
- device_fd = OpenDevice();
- if (device_fd == CC_ERR_FILE_HANDLE) {
- return -1;
- }
-
- memset((void *) msg_buf, 0, E2P_MSG_BUF_SIZE);
-
- msg_buf[0] = (unsigned char) (offset >> 8);
- msg_buf[1] = (unsigned char) (offset & 0x00ff);
-
- memcpy((void *) &msg_buf[2], data_buf, len);
-
- //GetDeviceSlaveAddress(&tmp_dev_slave_addr);
-
- //showboz
- msg.addr = //
- //tmp_dev_slave_addr//0;
- msg.flags = I2C_M_WR;
- msg.len = 2 + len;
- msg.buf = msg_buf;
- ctl_data.nmsgs = 1;
- ctl_data.msgs = &msg;
-
- SetWriteProtectStatus (CC_SSM_PROTECT_OFF);
-
- tmp_ret = ioctl(device_fd, I2C_RDWR, &ctl_data);
-
- SetWriteProtectStatus (CC_SSM_PROTECT_ON);
-
- if (tmp_ret < 0) {
- LOGE("%s, ioctl failed, error %d (%s).\n", "TV", errno, strerror(errno));
-
- CloseDevice(&device_fd);
- return -1;
- }
-
- if (device_use_buffer && device_buf != NULL) {
- memcpy((void *) (device_buf + offset), (void *) data_buf, len);
- }
-
- CloseDevice(&device_fd);
-
- msleep(10);
-
- return 0;
-}*/
-
-/*int CBlobDeviceE2prom::ReadSpecialBytes(int offset, int len, unsigned char data_buf[]) {
- int i = 0, tmp_ret = 0;
- int device_fd = CC_ERR_FILE_HANDLE;
- int tmp_dev_slave_addr = 0;
- struct i2c_rdwr_ioctl_data ctl_data;
- struct i2c_msg msg;
- unsigned char msg_buf[E2P_MSG_BUF_SIZE];
-
- if (CheckDeviceWrAvaliable(offset, len) < 0) {
- return -1;
- }
-
- if (device_use_buffer && device_buf != NULL) {
- memcpy((void *) data_buf, (void *) (device_buf + offset), len);
- return 0;
- }
-
- device_fd = OpenDevice();
- if (device_fd == CC_ERR_FILE_HANDLE) {
- return -1;
- }
-
- //GetDeviceSlaveAddress(&tmp_dev_slave_addr);
-
- msg_buf[0] = (unsigned char) (offset >> 8);
- msg_buf[1] = (unsigned char) (offset & 0x00ff);
- msg.addr = tmp_dev_slave_addr;
- msg.flags = I2C_M_WR;
- msg.len = 2;
- msg.buf = msg_buf;
- ctl_data.nmsgs = 1;
- ctl_data.msgs = &msg;
-
- tmp_ret = ioctl(device_fd, I2C_RDWR, &ctl_data);
-
- if (tmp_ret < 0) {
- LOGE("%s, ioctl failed(erase), error %d (%s).\n", "TV", errno, strerror(errno));
- CloseDevice(&device_fd);
- return -1;
- }
-
- msg.addr = tmp_dev_slave_addr;
- msg.flags |= I2C_M_RD;
- msg.len = len;
- msg.buf = data_buf;
- ctl_data.nmsgs = 1;
- ctl_data.msgs = &msg;
- tmp_ret = ioctl(device_fd, I2C_RDWR, &ctl_data);
- if (tmp_ret < 0) {
- LOGE("%s, ioctl failed, error %d (%s).\n", "TV", errno, strerror(errno));
- CloseDevice(&device_fd);
- return -1;
- }
-
- CloseDevice(&device_fd);
-
- msleep(10);
-
- return 0;
-}
-
-int CTvSettingDeviceE2prom::ValidOperateCheck() {
- int tmp_dev_total_size = 0;
- int tmp_dev_start_offset = 0;
- int tmp_dev_end_offset = 0;
-
- if (gFilePathBuf == NULL) {
- LOGE("%s, Device file name is NULL.\n", "TV");
- return -1;
- }
-
- if (IsFileExist(gFilePathBuf) < 0) {
- LOGE("%s, Device file is not exist.\n", "TV");
- return -1;
- }
-
- tmp_dev_total_size = GetDeviceTotalSize();
- if (tmp_dev_total_size < 0) {
- LOGE("%s, Device file total size must be greater than or euqal to 0.\n", "TV");
- return -1;
- }
-
- //GetDeviceRWStartOffset(&tmp_dev_start_offset);
- //if (tmp_dev_start_offset < 0) {
- // LOGE("%s, Device file r/w start offset must be greater than or euqal to 0.\n", "TV");
- // return -1;
- //}
-
- //GetDeviceRWEndOffset(&tmp_dev_end_offset);
- //if (tmp_dev_end_offset < 0) {
- // LOGE("%s, Device file r/w end offset must be more than 0.\n", "TV");
- // return -1;
- //}
-
- //if (tmp_dev_end_offset - tmp_dev_start_offset + 1 > tmp_dev_total_size) {
- // LOGE("%s, end offset (%d) - start offset (%d) + 1 is more than total size(%d).\n", "TV", tmp_dev_end_offset, tmp_dev_start_offset, tmp_dev_total_size);
- // return -1;
- //}
-
- return 0;
-}*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include "CBlobDeviceE2prom.h"
+#include "../tvconfig/tvconfig.h"
+#include "../tvutils/tvutils.h"
+#include "CTvLog.h"
+
+#define LOG_TAG "CBlobDeviceE2prom"
+
+#define msleep(x) usleep(x*1000)
+
+CBlobDeviceE2prom::CBlobDeviceE2prom()
+{
+
+}
+
+CBlobDeviceE2prom::~CBlobDeviceE2prom()
+{
+}
+
+int CBlobDeviceE2prom::WriteBytes(int offset, int size, unsigned char *buf)
+{
+ return 0;
+}
+int CBlobDeviceE2prom::ReadBytes(int offset, int size, unsigned char *buf)
+{
+ return 0;
+}
+int CBlobDeviceE2prom::EraseAllData()
+{
+ return 0;
+}
+int CBlobDeviceE2prom::InitCheck()
+{
+ return 0;
+}
+int CBlobDeviceE2prom::OpenDevice()
+{
+ return 0;
+}
+int CBlobDeviceE2prom::CloseDevice()
+{
+ return 0;
+}
+//int CBlobDeviceE2prom::InitCheck() {
+/* int i, tmp_dev_total_size = 0, tmp_offset = 0, rw_check_count = 4;
+ unsigned char *tmp_buf = NULL;
+ unsigned char w_ch = 0, r_ch = 0;
+
+ SetWriteProtectStatus (CC_SSM_PROTECT_ON);
+
+ if (ValidOperateCheck() < 0) {
+ return -1;
+ }
+
+ tmp_offset = E2P_DEV_RW_TEST_OFFSET;
+
+ if (tmp_offset >= 0) {
+ for (i = 0; i < rw_check_count; i++) {
+ w_ch = 0x5A;
+ WriteNBytes(tmp_offset, 1, &w_ch);
+
+ r_ch = 0x00;
+ ReadNBytes(tmp_offset, 1, &r_ch);
+
+ if (r_ch != w_ch) {
+ LOGE("%s, Device rw check error, write %d, read %d.\n", "TV", w_ch, r_ch);
+ return -1;
+ }
+
+ w_ch = 0xA5;
+ WriteNBytes(tmp_offset, 1, &w_ch);
+
+ r_ch = 0x00;
+ ReadNBytes(tmp_offset, 1, &r_ch);
+
+ if (r_ch != w_ch) {
+ LOGE("%s, Device rw check error, write %d, read %d.\n", "TV", w_ch, r_ch);
+ return -1;
+ }
+ }
+ }
+
+ if (device_buf != NULL) {
+ delete device_buf;
+ device_buf = NULL;
+ }
+
+ if (device_use_buffer) {
+ tmp_dev_total_size = GetDeviceTotalSize();
+ if (tmp_dev_total_size <= 0) {
+ LOGE("%s, Device file size must be more than 0.\n", "TV");
+ return -1;
+ }
+
+ tmp_buf = new unsigned char[tmp_dev_total_size];
+ if (tmp_buf != NULL) {
+ if (ReadNBytes(0, tmp_dev_total_size, tmp_buf) < 0) {
+ delete tmp_buf;
+ tmp_buf = NULL;
+
+ LOGE("%s, Read data from device error when read data to device rw buffer!!!.\n", "TV");
+ return -1;
+ }
+
+ device_buf = new unsigned char[tmp_dev_total_size];
+ if (device_buf != NULL) {
+ memcpy((void *) device_buf, (void *) tmp_buf, tmp_dev_total_size);
+ }
+
+ delete tmp_buf;
+ tmp_buf = NULL;
+ }
+ }
+*/
+// return 0;
+//}
+
+//int CBlobDeviceE2prom::OpenDevice() {
+/*int device_fd = CC_ERR_FILE_HANDLE;
+
+if (gFilePathBuf == NULL) {
+ LOGE("%s, Device file name is NULL.\n", "TV");
+ return CC_ERR_FILE_HANDLE;
+}
+
+device_fd = open(gFilePathBuf, O_RDWR);
+if (device_fd < 0) {
+ LOGE("%s, Open device file \"%s\" error: %s.\n", "TV", gFilePathBuf, strerror(errno));
+ return CC_ERR_FILE_HANDLE;
+}
+
+return device_fd;*/
+// return 0;
+//}
+
+//int CBlobDeviceE2prom::CloseDevice() {
+/*if (*device_fd >= 0) {
+ close(*device_fd);
+ *device_fd = CC_ERR_FILE_HANDLE;
+}*/
+
+// return 0;
+//}
+
+/*int CBlobDeviceE2prom::SetWriteProtectStatus(int protect_status) {
+}*/
+
+/*int CBlobDeviceE2prom::CheckDeviceWrAvaliable(int offset, int len) {
+ int tmp_dev_start_offset = 0;
+ int tmp_dev_end_offset = 0;
+
+ GetDeviceRWStartOffset(&tmp_dev_start_offset);
+ if (tmp_dev_start_offset < 0) {
+ LOGE("%s, Device file r/w start offset must be greater than or euqal to 0.\n", "TV");
+ return -1;
+ }
+
+ GetDeviceRWEndOffset(&tmp_dev_end_offset);
+ if (tmp_dev_end_offset < 0) {
+ LOGE("%s, Device file r/w end offset must be more than 0.\n", "TV");
+ return -1;
+ }
+
+ if (len <= 0) {
+ LOGE("%s, The w/r length should be more than 0.\n", "TV");
+ return -1;
+ }
+
+ if ((len + tmp_dev_start_offset + offset) > tmp_dev_end_offset + 1) {
+ LOGE("%s, w/r would be overflow!!! len = %d, start offset = %d, offset = %d, end offset = %d.\n", "TV", len, tmp_dev_start_offset, offset, tmp_dev_end_offset);
+ return -1;
+ }
+
+ if (ValidOperateCheck() < 0) {
+ return -1;
+ }
+
+ return 0;
+}
+
+/*int CBlobDeviceE2prom::WriteSpecialBytes(int offset, int len, unsigned char data_buf[]) {
+ int i = 0, tmp_ret = 0;
+ int tmp_dev_w_page_size = 0;
+ int tmp_dev_slave_addr = 0;
+ int device_fd = CC_ERR_FILE_HANDLE;
+ struct i2c_rdwr_ioctl_data ctl_data;
+ struct i2c_msg msg;
+ unsigned char msg_buf[E2P_MSG_BUF_SIZE];
+
+ //GetDeviceWritePageSize(&tmp_dev_w_page_size);
+ //if (len > tmp_dev_w_page_size) {
+ // LOGE("%s, The write length should be less than page size(%d).\n", "TV", tmp_dev_w_page_size);
+ // return -1;
+ //}
+
+ if (CheckDeviceWrAvaliable(offset, len) < 0) {
+ return -1;
+ }
+
+ device_fd = OpenDevice();
+ if (device_fd == CC_ERR_FILE_HANDLE) {
+ return -1;
+ }
+
+ memset((void *) msg_buf, 0, E2P_MSG_BUF_SIZE);
+
+ msg_buf[0] = (unsigned char) (offset >> 8);
+ msg_buf[1] = (unsigned char) (offset & 0x00ff);
+
+ memcpy((void *) &msg_buf[2], data_buf, len);
+
+ //GetDeviceSlaveAddress(&tmp_dev_slave_addr);
+
+ //showboz
+ msg.addr = //
+ //tmp_dev_slave_addr//0;
+ msg.flags = I2C_M_WR;
+ msg.len = 2 + len;
+ msg.buf = msg_buf;
+ ctl_data.nmsgs = 1;
+ ctl_data.msgs = &msg;
+
+ SetWriteProtectStatus (CC_SSM_PROTECT_OFF);
+
+ tmp_ret = ioctl(device_fd, I2C_RDWR, &ctl_data);
+
+ SetWriteProtectStatus (CC_SSM_PROTECT_ON);
+
+ if (tmp_ret < 0) {
+ LOGE("%s, ioctl failed, error %d (%s).\n", "TV", errno, strerror(errno));
+
+ CloseDevice(&device_fd);
+ return -1;
+ }
+
+ if (device_use_buffer && device_buf != NULL) {
+ memcpy((void *) (device_buf + offset), (void *) data_buf, len);
+ }
+
+ CloseDevice(&device_fd);
+
+ msleep(10);
+
+ return 0;
+}*/
+
+/*int CBlobDeviceE2prom::ReadSpecialBytes(int offset, int len, unsigned char data_buf[]) {
+ int i = 0, tmp_ret = 0;
+ int device_fd = CC_ERR_FILE_HANDLE;
+ int tmp_dev_slave_addr = 0;
+ struct i2c_rdwr_ioctl_data ctl_data;
+ struct i2c_msg msg;
+ unsigned char msg_buf[E2P_MSG_BUF_SIZE];
+
+ if (CheckDeviceWrAvaliable(offset, len) < 0) {
+ return -1;
+ }
+
+ if (device_use_buffer && device_buf != NULL) {
+ memcpy((void *) data_buf, (void *) (device_buf + offset), len);
+ return 0;
+ }
+
+ device_fd = OpenDevice();
+ if (device_fd == CC_ERR_FILE_HANDLE) {
+ return -1;
+ }
+
+ //GetDeviceSlaveAddress(&tmp_dev_slave_addr);
+
+ msg_buf[0] = (unsigned char) (offset >> 8);
+ msg_buf[1] = (unsigned char) (offset & 0x00ff);
+ msg.addr = tmp_dev_slave_addr;
+ msg.flags = I2C_M_WR;
+ msg.len = 2;
+ msg.buf = msg_buf;
+ ctl_data.nmsgs = 1;
+ ctl_data.msgs = &msg;
+
+ tmp_ret = ioctl(device_fd, I2C_RDWR, &ctl_data);
+
+ if (tmp_ret < 0) {
+ LOGE("%s, ioctl failed(erase), error %d (%s).\n", "TV", errno, strerror(errno));
+ CloseDevice(&device_fd);
+ return -1;
+ }
+
+ msg.addr = tmp_dev_slave_addr;
+ msg.flags |= I2C_M_RD;
+ msg.len = len;
+ msg.buf = data_buf;
+ ctl_data.nmsgs = 1;
+ ctl_data.msgs = &msg;
+ tmp_ret = ioctl(device_fd, I2C_RDWR, &ctl_data);
+ if (tmp_ret < 0) {
+ LOGE("%s, ioctl failed, error %d (%s).\n", "TV", errno, strerror(errno));
+ CloseDevice(&device_fd);
+ return -1;
+ }
+
+ CloseDevice(&device_fd);
+
+ msleep(10);
+
+ return 0;
+}
+
+int CTvSettingDeviceE2prom::ValidOperateCheck() {
+ int tmp_dev_total_size = 0;
+ int tmp_dev_start_offset = 0;
+ int tmp_dev_end_offset = 0;
+
+ if (gFilePathBuf == NULL) {
+ LOGE("%s, Device file name is NULL.\n", "TV");
+ return -1;
+ }
+
+ if (IsFileExist(gFilePathBuf) < 0) {
+ LOGE("%s, Device file is not exist.\n", "TV");
+ return -1;
+ }
+
+ tmp_dev_total_size = GetDeviceTotalSize();
+ if (tmp_dev_total_size < 0) {
+ LOGE("%s, Device file total size must be greater than or euqal to 0.\n", "TV");
+ return -1;
+ }
+
+ //GetDeviceRWStartOffset(&tmp_dev_start_offset);
+ //if (tmp_dev_start_offset < 0) {
+ // LOGE("%s, Device file r/w start offset must be greater than or euqal to 0.\n", "TV");
+ // return -1;
+ //}
+
+ //GetDeviceRWEndOffset(&tmp_dev_end_offset);
+ //if (tmp_dev_end_offset < 0) {
+ // LOGE("%s, Device file r/w end offset must be more than 0.\n", "TV");
+ // return -1;
+ //}
+
+ //if (tmp_dev_end_offset - tmp_dev_start_offset + 1 > tmp_dev_total_size) {
+ // LOGE("%s, end offset (%d) - start offset (%d) + 1 is more than total size(%d).\n", "TV", tmp_dev_end_offset, tmp_dev_start_offset, tmp_dev_total_size);
+ // return -1;
+ //}
+
+ return 0;
+}*/
diff --git a/tvapi/libtv/tvsetting/CBlobDeviceE2prom.h b/tvapi/libtv/tvsetting/CBlobDeviceE2prom.h
index 189cc15..2e0e0c5 100644
--- a/tvapi/libtv/tvsetting/CBlobDeviceE2prom.h
+++ b/tvapi/libtv/tvsetting/CBlobDeviceE2prom.h
@@ -1,77 +1,76 @@
-#ifndef BLOB_E2PROM_H
-#define BLOB_E2PROM_H
-
-#include "CBlobDevice.h"
-
-#define I2C_RETRIES 0x0701 /* number of times a device address
- should be polled when not
- acknowledging */
-#define I2C_TIMEOUT 0x0702 /* set timeout in units of 10 ms */
-
-/* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses
- * are NOT supported! (due to code brokenness)
- */
-#define I2C_SLAVE 0x0703 /* Use this slave address */
-#define I2C_SLAVE_FORCE 0x0706 /* Use this slave address, even if it
- is already in use by a driver! */
-#define I2C_TENBIT 0x0704 /* 0 for 7 bit addrs, != 0 for 10 bit */
-#define I2C_FUNCS 0x0705 /* Get the adapter functionality mask */
-#define I2C_RDWR 0x0707 /* Combined R/W transfer (one STOP only) */
-#define I2C_PEC 0x0708 /* != 0 to use PEC with SMBus */
-#define I2C_SMBUS 0x0720 /* SMBus transfer */
-
-struct i2c_msg {
- unsigned short addr; /* slave address */
- unsigned short flags;
-#define I2C_M_TEN 0x0010 /* this is a ten bit chip address */
-#define I2C_M_WR 0x0000 /* write data, from master to slave */
-#define I2C_M_RD 0x0001 /* read data, from slave to master */
-#define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_PROTOCOL_MANGLING */
-#define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */
-#define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */
-#define I2C_M_NO_RD_ACK 0x0800 /* if I2C_FUNC_PROTOCOL_MANGLING */
-#define I2C_M_RECV_LEN 0x0400 /* length will be first received byte */
-
- unsigned short len; /* msg length */
- unsigned char *buf; /* pointer to msg data */
-};
-
-struct i2c_rdwr_ioctl_data {
- struct i2c_msg *msgs;
- unsigned int nmsgs;
-};
-
-// 24C64 eeprom
-#define E2P_MSG_BUF_SIZE (34)
-
-class CBlobDeviceE2prom: public CBlobDevice
-{
-
-public:
- CBlobDeviceE2prom();
- virtual ~CBlobDeviceE2prom();
-
- virtual int WriteBytes(int offset, int size, unsigned char *buf);
- virtual int ReadBytes(int offset, int size, unsigned char *buf);
- virtual int EraseAllData();
- virtual int InitCheck();
- virtual int OpenDevice();
- virtual int CloseDevice();
-
-private:
-
-private:
- /*int E2P_DEV_TOTAL_SIZE;
- int E2P_DEV_RW_START_OFFSET;
- int E2P_DEV_RW_END_OFFSET;
- int E2P_DEV_W_PAGE_SIZE;
- int E2P_DEV_R_PAGE_SIZE;
- int E2P_DEV_SLAVE_ADDR;
- int E2P_DEV_RW_TEST_OFFSET;
- int device_use_buffer;
- unsigned char *device_buf;
- char gFilePathBuf[CC_MAX_FILE_PATH];*/
-};
-
-
-#endif
+#ifndef BLOB_E2PROM_H
+#define BLOB_E2PROM_H
+
+#include "CBlobDevice.h"
+
+#define I2C_RETRIES 0x0701 /* number of times a device address
+ should be polled when not
+ acknowledging */
+#define I2C_TIMEOUT 0x0702 /* set timeout in units of 10 ms */
+
+/* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses
+ * are NOT supported! (due to code brokenness)
+ */
+#define I2C_SLAVE 0x0703 /* Use this slave address */
+#define I2C_SLAVE_FORCE 0x0706 /* Use this slave address, even if it
+ is already in use by a driver! */
+#define I2C_TENBIT 0x0704 /* 0 for 7 bit addrs, != 0 for 10 bit */
+#define I2C_FUNCS 0x0705 /* Get the adapter functionality mask */
+#define I2C_RDWR 0x0707 /* Combined R/W transfer (one STOP only) */
+#define I2C_PEC 0x0708 /* != 0 to use PEC with SMBus */
+#define I2C_SMBUS 0x0720 /* SMBus transfer */
+
+struct i2c_msg {
+ unsigned short addr; /* slave address */
+ unsigned short flags;
+#define I2C_M_TEN 0x0010 /* this is a ten bit chip address */
+#define I2C_M_WR 0x0000 /* write data, from master to slave */
+#define I2C_M_RD 0x0001 /* read data, from slave to master */
+#define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_NO_RD_ACK 0x0800 /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_RECV_LEN 0x0400 /* length will be first received byte */
+
+ unsigned short len; /* msg length */
+ unsigned char *buf; /* pointer to msg data */
+};
+
+struct i2c_rdwr_ioctl_data {
+ struct i2c_msg *msgs;
+ unsigned int nmsgs;
+};
+
+// 24C64 eeprom
+#define E2P_MSG_BUF_SIZE (34)
+
+class CBlobDeviceE2prom: public CBlobDevice {
+
+public:
+ CBlobDeviceE2prom();
+ virtual ~CBlobDeviceE2prom();
+
+ virtual int WriteBytes(int offset, int size, unsigned char *buf);
+ virtual int ReadBytes(int offset, int size, unsigned char *buf);
+ virtual int EraseAllData();
+ virtual int InitCheck();
+ virtual int OpenDevice();
+ virtual int CloseDevice();
+
+private:
+
+private:
+ /*int E2P_DEV_TOTAL_SIZE;
+ int E2P_DEV_RW_START_OFFSET;
+ int E2P_DEV_RW_END_OFFSET;
+ int E2P_DEV_W_PAGE_SIZE;
+ int E2P_DEV_R_PAGE_SIZE;
+ int E2P_DEV_SLAVE_ADDR;
+ int E2P_DEV_RW_TEST_OFFSET;
+ int device_use_buffer;
+ unsigned char *device_buf;
+ char gFilePathBuf[CC_MAX_FILE_PATH];*/
+};
+
+
+#endif
diff --git a/tvapi/libtv/tvsetting/CBlobDeviceFile.cpp b/tvapi/libtv/tvsetting/CBlobDeviceFile.cpp
index 03cd45b..2e7cf23 100644
--- a/tvapi/libtv/tvsetting/CBlobDeviceFile.cpp
+++ b/tvapi/libtv/tvsetting/CBlobDeviceFile.cpp
@@ -1,80 +1,80 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-#include "tvconfig/tvconfig.h"
-#include "CBlobDeviceFile.h"
-#include "CTvLog.h"
-
-
-
-#define LOG_TAG "BLOB_FILE"
-
-CBlobDeviceFile::CBlobDeviceFile()
-{
- m_dev_total_size = 4 * 1024;
- m_dev_fd = -1;
- mDataBuf = new unsigned char[m_dev_total_size];
-
- const char *device_path = config_get_str("SETTING", "device_path", "/param/default_data");
- const char *device_size = config_get_str("SETTING", "device_size", "0x1000");
- strcpy(m_dev_path, device_path);
-}
-
-CBlobDeviceFile::~CBlobDeviceFile()
-{
- if (mDataBuf != NULL) {
- delete mDataBuf;
- mDataBuf = NULL;
- }
- CloseDevice();
-}
-
-int CBlobDeviceFile::WriteBytes(int offset, int size, unsigned char *buf)
-{
-
- lseek(m_dev_fd, offset, SEEK_SET);
- write(m_dev_fd, buf, size);
- //not need
- //fsync(device_fd);
- return 0;
-}
-int CBlobDeviceFile::ReadBytes(int offset, int size, unsigned char *buf)
-{
- lseek(m_dev_fd, offset, SEEK_SET);
- read(m_dev_fd, buf, size);
- return 0;
-}
-int CBlobDeviceFile::EraseAllData()
-{
- return 0;
-}
-int CBlobDeviceFile::InitCheck()
-{
- return 0;
-}
-
-int CBlobDeviceFile::OpenDevice()
-{
- if (strlen(m_dev_path) <= 0) return -1;
-
- m_dev_fd = open(m_dev_path, O_RDWR | O_SYNC | O_CREAT, S_IRUSR | S_IWUSR);
-
- if (m_dev_fd < 0) {
- LOGE("%s, Open device file \"%s\" error: %s.\n", "TV", m_dev_path, strerror(errno));
- return -1;
- }
-
- return 0;
-}
-
-int CBlobDeviceFile::CloseDevice()
-{
- if (m_dev_fd >= 0) {
- close(m_dev_fd);
- m_dev_fd = -1;
- }
- return 0;
-}
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include "tvconfig/tvconfig.h"
+#include "CBlobDeviceFile.h"
+#include "CTvLog.h"
+
+
+
+#define LOG_TAG "BLOB_FILE"
+
+CBlobDeviceFile::CBlobDeviceFile()
+{
+ m_dev_total_size = 4 * 1024;
+ m_dev_fd = -1;
+ mDataBuf = new unsigned char[m_dev_total_size];
+
+ const char *device_path = config_get_str("SETTING", "device_path", "/param/default_data");
+ const char *device_size = config_get_str("SETTING", "device_size", "0x1000");
+ strcpy(m_dev_path, device_path);
+}
+
+CBlobDeviceFile::~CBlobDeviceFile()
+{
+ if(mDataBuf != NULL) {
+ delete mDataBuf;
+ mDataBuf = NULL;
+ }
+ CloseDevice();
+}
+
+int CBlobDeviceFile::WriteBytes(int offset, int size, unsigned char *buf)
+{
+
+ lseek(m_dev_fd, offset, SEEK_SET);
+ write(m_dev_fd, buf, size);
+ //not need
+ //fsync(device_fd);
+ return 0;
+}
+int CBlobDeviceFile::ReadBytes(int offset, int size, unsigned char *buf)
+{
+ lseek(m_dev_fd, offset, SEEK_SET);
+ read(m_dev_fd, buf, size);
+ return 0;
+}
+int CBlobDeviceFile::EraseAllData()
+{
+ return 0;
+}
+int CBlobDeviceFile::InitCheck()
+{
+ return 0;
+}
+
+int CBlobDeviceFile::OpenDevice()
+{
+ if(strlen(m_dev_path) <= 0) return -1;
+
+ m_dev_fd = open(m_dev_path, O_RDWR | O_SYNC | O_CREAT, S_IRUSR | S_IWUSR);
+
+ if (m_dev_fd < 0) {
+ LOGE("%s, Open device file \"%s\" error: %s.\n", "TV", m_dev_path, strerror(errno));
+ return -1;
+ }
+
+ return 0;
+}
+
+int CBlobDeviceFile::CloseDevice()
+{
+ if (m_dev_fd >= 0) {
+ close(m_dev_fd);
+ m_dev_fd = -1;
+ }
+ return 0;
+}
diff --git a/tvapi/libtv/tvsetting/CBlobDeviceFile.h b/tvapi/libtv/tvsetting/CBlobDeviceFile.h
index 3d59685..caf6fda 100644
--- a/tvapi/libtv/tvsetting/CBlobDeviceFile.h
+++ b/tvapi/libtv/tvsetting/CBlobDeviceFile.h
@@ -1,27 +1,26 @@
-#ifndef _BLOB_FILE_H_
-#define _BLOB_FILE_H_
-
-#include "CBlobDevice.h"
-class CBlobDeviceFile: public CBlobDevice
-{
-
-public:
- CBlobDeviceFile();
- virtual ~CBlobDeviceFile();
-
- virtual int WriteBytes(int offset, int size, unsigned char *buf);
- virtual int ReadBytes(int offset, int size, unsigned char *buf);
- virtual int EraseAllData();
- virtual int InitCheck();
- virtual int OpenDevice();
- virtual int CloseDevice();
-
-private:
- int ValidOperateCheck();
- int CreateNewFile(const char *file_name);
-
-private:
-
-};
-
-#endif // ANDROID_SSM_FILE_H
+#ifndef _BLOB_FILE_H_
+#define _BLOB_FILE_H_
+
+#include "CBlobDevice.h"
+class CBlobDeviceFile: public CBlobDevice {
+
+public:
+ CBlobDeviceFile();
+ virtual ~CBlobDeviceFile();
+
+ virtual int WriteBytes(int offset, int size, unsigned char *buf);
+ virtual int ReadBytes(int offset, int size, unsigned char *buf);
+ virtual int EraseAllData();
+ virtual int InitCheck();
+ virtual int OpenDevice();
+ virtual int CloseDevice();
+
+private:
+ int ValidOperateCheck();
+ int CreateNewFile(const char *file_name);
+
+private:
+
+};
+
+#endif // ANDROID_SSM_FILE_H
diff --git a/tvapi/libtv/tvsetting/CBlobDeviceRam.cpp b/tvapi/libtv/tvsetting/CBlobDeviceRam.cpp
index c938be7..0f50f73 100644
--- a/tvapi/libtv/tvsetting/CBlobDeviceRam.cpp
+++ b/tvapi/libtv/tvsetting/CBlobDeviceRam.cpp
@@ -1,129 +1,129 @@
-#include <stdio.h>
-#include <string.h>
-
-#include <android/log.h>
-
-#include "CTvSettingDeviceRam.h"
-
-#define LOG_TAG "ssmram"
-#include "CTvLog.h"
-
-CTvSettingDeviceRam::CTvSettingDeviceRam()
-{
- RAM_DEV_TOTAL_SIZE = 4 * 1024;
- RAM_DEV_RW_START_OFFSET = 0;
- RAM_DEV_RW_END_OFFSET = RAM_DEV_TOTAL_SIZE - 1;
- RAM_DEV_W_PAGE_SIZE = 32;
- RAM_DEV_R_PAGE_SIZE = 32;
- RAM_DEV_SLAVE_ADDR = (0xA0 >> 1);
- RAM_DEV_RW_TEST_OFFSET = -1;
- device_use_buffer = 0;
- device_buf = NULL;
- gFilePathBuf[0] = '\0';
-}
-
-CTvSettingDeviceRam::~CTvSettingDeviceRam()
-{
-}
-
-int CTvSettingDeviceRam::GetDeviceTotalSize()
-{
- return 0;
-}
-int CTvSettingDeviceRam::InitCheck()
-{
- int tmp_dev_total_size = 0;
-
- if (device_buf == NULL) {
- tmp_dev_total_size = GetDeviceTotalSize();
- if (tmp_dev_total_size <= 0) {
- LOGE("%s, Device file size must be more than 0.\n", "TV");
- return -1;
- }
-
- device_buf = new unsigned char[tmp_dev_total_size];
- if (device_buf == NULL) {
- return -1;
- }
-
- memset((void *) device_buf, CC_INIT_BYTE_VAL, tmp_dev_total_size);
- }
-
- return 0;
-}
-
-int CTvSettingDeviceRam::OpenDevice()
-{
- return 0;
-}
-
-int CTvSettingDeviceRam::CloseDevice(int *device_fd)
-{
-
-
- return 0;
-}
-
-int CTvSettingDeviceRam::CheckDeviceWrAvaliable(int offset, int len)
-{
- /*int tmp_dev_start_offset = 0;
- int tmp_dev_end_offset = 0;
-
- GetDeviceRWStartOffset(&tmp_dev_start_offset);
- if (tmp_dev_start_offset < 0) {
- LOGE("%s, Device file r/w start offset must be greater than or euqal to 0.\n", "TV");
- return -1;
- }
-
- GetDeviceRWEndOffset(&tmp_dev_end_offset);
- if (tmp_dev_end_offset < 0) {
- LOGE("%s, Device file r/w end offset must be more than 0.\n", "TV");
- return -1;
- }
-
- if (len <= 0) {
- LOGE("%s, The w/r length should be more than 0.\n", "TV");
- return -1;
- }
-
- if ((len + tmp_dev_start_offset + offset) > tmp_dev_end_offset + 1) {
- LOGE("%s, w/r would be overflow!!! len = %d, start offset = %d, offset = %d, end offset = %d.\n", "TV", len, tmp_dev_start_offset, offset, tmp_dev_end_offset);
- return -1;
- }
-
- if (ValidOperateCheck() < 0) {
- return -1;
- }*/
-
- return 0;
-}
-
-int CTvSettingDeviceRam::WriteSpecialBytes(int offset, int len, unsigned char data_buf[])
-{
- int tmp_dev_w_page_size = 0;
-
- //GetDeviceWritePageSize(&tmp_dev_w_page_size);
- //if (len > tmp_dev_w_page_size) {
- // LOGE("%s, The write length should be less than page size(%d).\n", "TV", tmp_dev_w_page_size);
- // return -1;
- // }
-
- if (CheckDeviceWrAvaliable(offset, len) < 0) {
- return -1;
- }
-
- memcpy((void *) (device_buf + offset), (void *) data_buf, len);
-
- return 0;
-}
-
-int CTvSettingDeviceRam::ReadSpecialBytes(int offset, int len, unsigned char data_buf[])
-{
- if (CheckDeviceWrAvaliable(offset, len) < 0) {
- return -1;
- }
-
- memcpy((void *) data_buf, (void *) (device_buf + offset), len);
-
- return 0;
-}
+#include <stdio.h>
+#include <string.h>
+
+#include <android/log.h>
+
+#include "CTvSettingDeviceRam.h"
+
+#define LOG_TAG "ssmram"
+#include "CTvLog.h"
+
+CTvSettingDeviceRam::CTvSettingDeviceRam()
+{
+ RAM_DEV_TOTAL_SIZE = 4 * 1024;
+ RAM_DEV_RW_START_OFFSET = 0;
+ RAM_DEV_RW_END_OFFSET = RAM_DEV_TOTAL_SIZE - 1;
+ RAM_DEV_W_PAGE_SIZE = 32;
+ RAM_DEV_R_PAGE_SIZE = 32;
+ RAM_DEV_SLAVE_ADDR = (0xA0 >> 1);
+ RAM_DEV_RW_TEST_OFFSET = -1;
+ device_use_buffer = 0;
+ device_buf = NULL;
+ gFilePathBuf[0] = '\0';
+}
+
+CTvSettingDeviceRam::~CTvSettingDeviceRam()
+{
+}
+
+int CTvSettingDeviceRam::GetDeviceTotalSize()
+{
+ return 0;
+}
+int CTvSettingDeviceRam::InitCheck()
+{
+ int tmp_dev_total_size = 0;
+
+ if (device_buf == NULL) {
+ tmp_dev_total_size = GetDeviceTotalSize();
+ if (tmp_dev_total_size <= 0) {
+ LOGE("%s, Device file size must be more than 0.\n", "TV");
+ return -1;
+ }
+
+ device_buf = new unsigned char[tmp_dev_total_size];
+ if (device_buf == NULL) {
+ return -1;
+ }
+
+ memset((void *) device_buf, CC_INIT_BYTE_VAL, tmp_dev_total_size);
+ }
+
+ return 0;
+}
+
+int CTvSettingDeviceRam::OpenDevice()
+{
+ return 0;
+}
+
+int CTvSettingDeviceRam::CloseDevice(int *device_fd)
+{
+
+
+ return 0;
+}
+
+int CTvSettingDeviceRam::CheckDeviceWrAvaliable(int offset, int len)
+{
+ /*int tmp_dev_start_offset = 0;
+ int tmp_dev_end_offset = 0;
+
+ GetDeviceRWStartOffset(&tmp_dev_start_offset);
+ if (tmp_dev_start_offset < 0) {
+ LOGE("%s, Device file r/w start offset must be greater than or euqal to 0.\n", "TV");
+ return -1;
+ }
+
+ GetDeviceRWEndOffset(&tmp_dev_end_offset);
+ if (tmp_dev_end_offset < 0) {
+ LOGE("%s, Device file r/w end offset must be more than 0.\n", "TV");
+ return -1;
+ }
+
+ if (len <= 0) {
+ LOGE("%s, The w/r length should be more than 0.\n", "TV");
+ return -1;
+ }
+
+ if ((len + tmp_dev_start_offset + offset) > tmp_dev_end_offset + 1) {
+ LOGE("%s, w/r would be overflow!!! len = %d, start offset = %d, offset = %d, end offset = %d.\n", "TV", len, tmp_dev_start_offset, offset, tmp_dev_end_offset);
+ return -1;
+ }
+
+ if (ValidOperateCheck() < 0) {
+ return -1;
+ }*/
+
+ return 0;
+}
+
+int CTvSettingDeviceRam::WriteSpecialBytes(int offset, int len, unsigned char data_buf[])
+{
+ int tmp_dev_w_page_size = 0;
+
+ //GetDeviceWritePageSize(&tmp_dev_w_page_size);
+ //if (len > tmp_dev_w_page_size) {
+ // LOGE("%s, The write length should be less than page size(%d).\n", "TV", tmp_dev_w_page_size);
+ // return -1;
+ // }
+
+ if (CheckDeviceWrAvaliable(offset, len) < 0) {
+ return -1;
+ }
+
+ memcpy((void *) (device_buf + offset), (void *) data_buf, len);
+
+ return 0;
+}
+
+int CTvSettingDeviceRam::ReadSpecialBytes(int offset, int len, unsigned char data_buf[])
+{
+ if (CheckDeviceWrAvaliable(offset, len) < 0) {
+ return -1;
+ }
+
+ memcpy((void *) data_buf, (void *) (device_buf + offset), len);
+
+ return 0;
+}
diff --git a/tvapi/libtv/tvsetting/CBlobDeviceRam.h b/tvapi/libtv/tvsetting/CBlobDeviceRam.h
index 6165bb9..88f27fb 100644
--- a/tvapi/libtv/tvsetting/CBlobDeviceRam.h
+++ b/tvapi/libtv/tvsetting/CBlobDeviceRam.h
@@ -1,38 +1,37 @@
-#ifndef TV_SETTING_RAM_H
-#define TV_SETTING_RAM_H
-
-#include "CTvSettingBaseDevice.h"
-
-class CTvSettingDeviceRam: public CTvSettingBaseDevice
-{
-
-public:
- CTvSettingDeviceRam();
- virtual ~CTvSettingDeviceRam();
-
- virtual int InitCheck();
- virtual int OpenDevice();
- virtual int CloseDevice(int *device_fd);
- virtual int GetDeviceTotalSize();
-
- virtual int CheckDeviceWrAvaliable(int offset, int len);
- virtual int WriteSpecialBytes(int offset, int len, unsigned char data_buf[]);
- virtual int ReadSpecialBytes(int offset, int len, unsigned char data_buf[]);
-
-private:
- int ValidOperateCheck();
-
-private:
- int RAM_DEV_TOTAL_SIZE;
- int RAM_DEV_RW_START_OFFSET;
- int RAM_DEV_RW_END_OFFSET;
- int RAM_DEV_W_PAGE_SIZE;
- int RAM_DEV_R_PAGE_SIZE;
- int RAM_DEV_SLAVE_ADDR;
- int RAM_DEV_RW_TEST_OFFSET;
- int device_use_buffer;
- unsigned char *device_buf;
- char gFilePathBuf[CC_MAX_FILE_PATH];
-};
-
-#endif // ANDROID_SSM_RAM_H
+#ifndef TV_SETTING_RAM_H
+#define TV_SETTING_RAM_H
+
+#include "CTvSettingBaseDevice.h"
+
+class CTvSettingDeviceRam: public CTvSettingBaseDevice {
+
+public:
+ CTvSettingDeviceRam();
+ virtual ~CTvSettingDeviceRam();
+
+ virtual int InitCheck();
+ virtual int OpenDevice();
+ virtual int CloseDevice(int *device_fd);
+ virtual int GetDeviceTotalSize();
+
+ virtual int CheckDeviceWrAvaliable(int offset, int len);
+ virtual int WriteSpecialBytes(int offset, int len, unsigned char data_buf[]);
+ virtual int ReadSpecialBytes(int offset, int len, unsigned char data_buf[]);
+
+private:
+ int ValidOperateCheck();
+
+private:
+ int RAM_DEV_TOTAL_SIZE;
+ int RAM_DEV_RW_START_OFFSET;
+ int RAM_DEV_RW_END_OFFSET;
+ int RAM_DEV_W_PAGE_SIZE;
+ int RAM_DEV_R_PAGE_SIZE;
+ int RAM_DEV_SLAVE_ADDR;
+ int RAM_DEV_RW_TEST_OFFSET;
+ int device_use_buffer;
+ unsigned char *device_buf;
+ char gFilePathBuf[CC_MAX_FILE_PATH];
+};
+
+#endif // ANDROID_SSM_RAM_H
diff --git a/tvapi/libtv/tvsetting/CTvSetting.cpp b/tvapi/libtv/tvsetting/CTvSetting.cpp
index 97417d8..f558cd5 100644
--- a/tvapi/libtv/tvsetting/CTvSetting.cpp
+++ b/tvapi/libtv/tvsetting/CTvSetting.cpp
@@ -1,2212 +1,2212 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <cutils/properties.h>
-
-#include <netinet/ether.h>
-#include <netinet/if_ether.h>
-
-#include <netutils/ifc.h>
-#include <netutils/dhcp.h>
-
-#include "CTvSetting.h"
-
-#include "../tvconfig/tvconfig.h"
-#include "../audio/audio_api.h"
-
-#include "../tv/CTvLog.h"
-#define CC_DEF_CHARACTER_CHAR_VAL (0x8A)
-
-pthread_mutex_t ssm_r_w_op_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-/************************ Start APIs For UI ************************/
-
-CTvSettingDeviceFactory *mpSettingDeviceFactory = NULL;
-CBlobDevice *mpCurDevice = NULL;
-
-bool CTvSettingLoad()
-{
- mpSettingDeviceFactory = new CTvSettingDeviceFactory();
- mpCurDevice = mpSettingDeviceFactory->getSaveDeviceFromConfigFile();
- if (mpCurDevice == NULL) {
- LOGD("%s, CTvSettingLoad = NULL", "TV");
- return false;
- } else {
- mpCurDevice->OpenDevice();
- }
- return true;
-}
-
-bool CTvSettingunLoad()
-{
- if (mpSettingDeviceFactory != NULL) {
- delete mpSettingDeviceFactory;
- mpSettingDeviceFactory = NULL;
- }
- return true;
-}
-
-template<typename T>
-static int SSMWriteNTypes(int offset, int data_len, T *data_buf)
-{
- pthread_mutex_lock(&ssm_r_w_op_mutex);
-
- if (data_buf == NULL) {
- LOGE("%s, data_buf is NULL.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- if (mpCurDevice == NULL) {
- LOGE("%s, ssm_device is NULL.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- if (mpCurDevice->WriteBytes(offset, data_len * sizeof(T),
- (unsigned char *) data_buf) < 0) {
- LOGE("%s, device WriteNBytes error.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return 0;
-}
-
-template<typename T>
-static int SSMReadNTypes(int offset, int data_len, T *data_buf)
-{
- pthread_mutex_lock(&ssm_r_w_op_mutex);
-
- if (data_buf == NULL) {
- LOGE("%s, data_buf is NULL.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- if (mpCurDevice == NULL) {
- LOGE("%s, ssm_device is NULL.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- if (mpCurDevice->ReadBytes(offset, data_len * sizeof(T),
- (unsigned char *) data_buf) < 0) {
- LOGE("%s, device ReadNBytes error.\n", "TV");
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return 0;
-}
-int SSMSaveFlash_One_N310_N311(int offset, int rw_val)
-{
- unsigned char tmp_val = rw_val;
- LOGD ( "~~~ SSMSaveFlash_One ~~~##offset %d##rw_val %d##" , offset, rw_val);
-
- return SSMWriteNTypes(offset, 1, &tmp_val);
-}
-
-int SSMReadFlash_One_N310_N311(int offset)
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(offset, 1, &tmp_val) < 0) {
- return -1;
- }
- LOGD ( "~~~ SSMReadFlash_One ~~~##offset %d##rw_val %d##" , offset, tmp_val);
-
- return tmp_val;
-}
-
-int SSMSaveFlash_N_N310_N311(int offset, int data_len, int *data_buf)
-{
- int i = 0;
- unsigned char *ptr = NULL;
-
- ptr = new unsigned char[data_len];
-
- if (ptr != NULL) {
- for (i = 0; i < data_len; i++) {
- ptr[i] = data_buf[i];
- }
- } else {
- delete ptr;
- ptr = NULL;
-
- return -1;
- }
-
- if (SSMWriteNTypes(offset, data_len, ptr) < 0) {
- delete ptr;
- ptr = NULL;
-
- return -1;
- }
-
- delete ptr;
- ptr = NULL;
-
- return 0;
-}
-
-int SSMReadFlash_N_N310_N311(int offset, int data_len, int *data_buf)
-{
- int i = 0;
- unsigned char *ptr = NULL;
-
- ptr = new unsigned char[data_len];
-
- if (ptr != NULL) {
- if (SSMReadNTypes(offset, data_len, ptr) < 0) {
- delete ptr;
- ptr = NULL;
-
- return -1;
- }
- } else {
- delete ptr;
- ptr = NULL;
-
- return -1;
- }
-
- for (i = 0; i < data_len; i++) {
- data_buf[i] = ptr[i];
- }
-
- delete ptr;
- ptr = NULL;
-
- return 0;
-}
-int EEPWriteOneByte(int offset, unsigned char *data_buf)
-{
- int fd = 0;
- const char *device_path = config_get_str("SETTING", "peripheral.eeprom.path", "/sys/devices/i2c-2/2-0050/eeprom");
- pthread_mutex_lock(&ssm_r_w_op_mutex);
-
- LOGD ( "~~~EEPWriteOneByte~~~##offset %d##rw_val %s##" , offset, data_buf);
-
- if (data_buf == NULL) {
- LOGE("%s, data_buf is NULL.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- fd = open(device_path, O_RDWR);
-
- if (fd < 0) {
- LOGE("%s, ####i2c test device open failed####.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- lseek(fd, offset, SEEK_SET);
-
- if (write(fd, data_buf, 1) < 0) {
- LOGE("%s, device WriteOneBytes error.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- close(fd);
-
- LOGE("%s, device WriteOneBytes OK.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return 0;
-}
-
-int EEPReadOneByte(int offset , unsigned char *data_buf)
-{
- int fd = 0;
- //const char* device_type = config_get_str("SETTING", "peripheral.eeprom.device", "disable");
- const char *device_path = config_get_str("SETTING", "peripheral.eeprom.path", "/sys/devices/i2c-2/2-0050/eeprom");
-
- pthread_mutex_lock(&ssm_r_w_op_mutex);
-
- if (data_buf == NULL) {
- LOGE("%s, data_buf is NULL.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- fd = open(device_path, O_RDWR);
-
- if (fd < 0) {
- LOGE("%s, ssm_device is NULL.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
- lseek(fd, offset, SEEK_SET);
-
- if (read(fd, data_buf, 1) < 0) {
- LOGE("%s, device ReadOneBytes error.\n", "TV");
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- close(fd);
-
- LOGD ( "~~~EEPReadOneByte~~~##offset %d##rw_val %d##" , offset, data_buf);
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return 0;
-}
-
-int EEPWriteNByte(int offset, int data_len, unsigned char *data_buf)
-{
- int fd = 0;
- const char *device_path = config_get_str("SETTING", "peripheral.eeprom.path", "/sys/devices/i2c-2/2-0050/eeprom");
- pthread_mutex_lock(&ssm_r_w_op_mutex);
-
- LOGD ( "~~~EEPWriteNByte~~~##offset %d##data_len %d##" , offset, data_len);
-
- if (data_buf == NULL) {
- LOGE("%s, data_buf is NULL.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- fd = open(device_path, O_RDWR);
-
- if (fd < 0) {
- LOGE("%s, ####i2c test device open failed####.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- lseek(fd, offset, SEEK_SET);
-
- if (write(fd, data_buf, data_len) < 0) {
- LOGE("%s, device WriteNBytes error.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- close(fd);
-
- LOGE("%s, device WriteNBytes OK.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return 0;
-}
-int EEPReadNByte(int offset, int data_len, unsigned char *data_buf)
-{
- int fd = 0;
- const char *device_path = config_get_str("SETTING", "peripheral.eeprom.path", "/sys/devices/i2c-2/2-0050/eeprom");
- pthread_mutex_lock(&ssm_r_w_op_mutex);
-
- if (data_buf == NULL) {
- LOGE("%s, data_buf is NULL.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- fd = open(device_path, O_RDWR);
-
- if (fd < 0) {
- LOGE("%s, ssm_device is NULL.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
- lseek(fd, offset, SEEK_SET);
-
- if (read(fd, data_buf, data_len) < 0) {
- LOGE("%s, device ReadNBytes error.\n", "TV");
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return -1;
- }
-
- close(fd);
-
- LOGD ( "~~~EEPReadNByte~~~##offset %d##data_len %d##" , offset, data_len);
-
- pthread_mutex_unlock(&ssm_r_w_op_mutex);
- return 0;
-}
-
-
-int SSMSaveEEP_One_N310_N311(int offset, int rw_val)
-{
- unsigned char tmp_val = rw_val;
- const char *device_config = config_get_str("SETTING", "peripheral.eeprom.device", "disable");
-
- if (strcmp(device_config, "enable") != 0) {
- LOGD ( "~~~ SSMSaveEEP_One ~~~##peripheral.eeprom.device error##");
- return -1;
- }
- LOGD ( "~~~SSMSaveEEP_One~~~##offset %d##rw_val %d##" , offset, rw_val);
-
- return EEPWriteOneByte(offset, &tmp_val);
-}
-
-int SSMReadEEP_One_N310_N311(int offset)
-{
- unsigned char tmp_val = 0;
- const char *device_config = config_get_str("SETTING", "peripheral.eeprom.device", "disable");
-
- if (strcmp(device_config, "enable") != 0) {
- LOGD ( "~~~ SSMReadEEP_One ~~~##peripheral.eeprom.device error##");
- return -1;
- }
-
- if (EEPReadOneByte(offset, &tmp_val) < 0) {
- return -1;
- }
- LOGD ( "~~~SSMReadEEP_One~~~##offset %d##rw_val %d##" , offset, tmp_val);
-
- return tmp_val;
-}
-
-int SSMSaveEEP_N_N310_N311(int offset, int data_len, int *data_buf)
-{
- int i = 0;
- unsigned char *ptr = NULL;
- const char *device_config = config_get_str("SETTING", "peripheral.eeprom.device", "disable");
-
- if (strcmp(device_config, "enable") != 0) {
- LOGD ( "~~~ SSMSaveEEP_N ~~~##peripheral.eeprom.device error##");
- return -1;
- }
-
- ptr = new unsigned char[data_len];
-
- if (ptr != NULL) {
- for (i = 0; i < data_len; i++) {
- ptr[i] = data_buf[i];
- }
- } else {
- delete ptr;
- ptr = NULL;
-
- return -1;
- }
-
- if (EEPWriteNByte(offset, data_len, ptr) < 0) {
- delete ptr;
- ptr = NULL;
-
- return -1;
- }
-
- delete ptr;
- ptr = NULL;
-
- return 0;
-}
-
-int SSMReadEEP_N_N310_N311(int offset, int data_len, int *data_buf)
-{
- int i = 0;
- unsigned char *ptr = NULL;
- const char *device_config = config_get_str("SETTING", "peripheral.eeprom.device", "disable");
-
- if (strcmp(device_config, "enable") != 0) {
- LOGD ( "~~~ SSMReadEEP_N ~~~##peripheral.eeprom.device error##");
- return -1;
- }
- ptr = new unsigned char[data_len];
-
- if (ptr != NULL) {
- if (EEPReadNByte(offset, data_len, ptr) < 0) {
- delete ptr;
- ptr = NULL;
-
- return -1;
- }
- } else {
- delete ptr;
- ptr = NULL;
-
- return -1;
- }
-
- for (i = 0; i < data_len; i++) {
- data_buf[i] = ptr[i];
- }
-
- delete ptr;
- ptr = NULL;
-
- return 0;
-}
-/************************ Start APIs For UI ************************/
-int MiscSSMRestoreDefault()
-{
- SSMSaveFactoryBurnMode(0);
- SSMSavePowerOnOffChannel(0);
- SSMSaveSystemLanguage(0);
- SSMSaveAgingMode(0);
- SSMSavePanelType(0);
- SSMSavePowerOnMusicSwitch(0);
- SSMSavePowerOnMusicVolume(20);
- SSMSaveSystemSleepTimer(0xFFFFFFFF);
- SSMSaveInputSourceParentalControl(0, 0);
- SSMSaveParentalControlSwitch(0);
- SSMSaveSerialCMDSwitchValue(0);
- SSMSaveBlackoutEnable(0);
- return 0;
-}
-
-int MiscSSMFacRestoreDefault()
-{
- SSMSaveSystemLanguage(0);
- SSMSavePowerOnMusicSwitch(1);
- SSMSavePowerOnMusicVolume(20);
- SSMSaveSystemSleepTimer(0xFFFFFFFF);
- SSMSaveInputSourceParentalControl(0, 0);
- SSMSaveParentalControlSwitch(0);
- SSMSaveSearchNavigateFlag(1);
- SSMSaveInputNumLimit(2);
- SSMSaveLocalDimingOnOffFlg(0);
-
- return 0;
-}
-
-int ReservedSSMRestoreDefault()
-{
- SSMSaveBurnWriteCharaterChar(CC_DEF_CHARACTER_CHAR_VAL);
-
- return 0;
-}
-
-int SSMSaveBurnWriteCharaterChar(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RSV_W_CHARACTER_CHAR_START, 1, &tmp_val);
-}
-
-int SSMReadBurnWriteCharaterChar()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RSV_W_CHARACTER_CHAR_START, 1, &tmp_val) < 0) {
- return -1;
- }
-
- return tmp_val;
-}
-
-int SSMSaveFactoryBurnMode(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_FBMF_START, 1, &tmp_val);
-}
-
-int SSMReadFactoryBurnMode()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_FBMF_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- if (tmp_val != 0) {
- return 1;
- }
-
- return 0;
-}
-
-int SSMSavePowerOnOffChannel(int rw_val)
-{
- unsigned char tmp_val = rw_val;
- return SSMWriteNTypes(SSM_RW_POWER_CHANNEL_START, 1, &tmp_val);
-}
-
-int SSMReadPowerOnOffChannel()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_POWER_CHANNEL_START, 1, &tmp_val) < 0) {
- return 0;
- }
- return tmp_val;
-}
-
-int SSMSaveLastSelectSourceInput(int rw_val)
-{
- unsigned char tmp_val = rw_val;
- return SSMWriteNTypes(SSM_RW_LAST_SOURCE_INPUT_START, 1, &tmp_val);
-}
-
-int SSMReadLastSelectSourceInput()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_LAST_SOURCE_INPUT_START, 1, &tmp_val) < 0) {
- return 0;
- }
- if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
- tmp_val = 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveSystemLanguage(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_SYS_LANGUAGE_START, 1, &tmp_val);
-}
-
-int SSMReadSystemLanguage()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_SYS_LANGUAGE_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
- tmp_val = 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveAgingMode(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_AGING_MODE_START, 1, &tmp_val);
-}
-
-int SSMReadAgingMode()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_AGING_MODE_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
- tmp_val = 0;
- }
-
- return tmp_val;
-}
-
-int SSMSavePanelType(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_PANEL_TYPE_START, 1, &tmp_val);
-}
-
-int SSMReadPanelType()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_PANEL_TYPE_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
- tmp_val = 0;
- }
-
- return tmp_val;
-}
-
-int SSMSavePowerOnMusicSwitch(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_POWER_ON_MUSIC_SWITCH_START, 1, &tmp_val);
-}
-
-int SSMReadPowerOnMusicSwitch()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_POWER_ON_MUSIC_SWITCH_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
- tmp_val = 0;
- }
-
- return tmp_val;
-}
-
-int SSMSavePowerOnMusicVolume(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_POWER_ON_MUSIC_VOL_START, 1, &tmp_val);
-}
-
-int SSMReadPowerOnMusicVolume()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_POWER_ON_MUSIC_VOL_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
- tmp_val = 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveSystemSleepTimer(int rw_val)
-{
- return SSMWriteNTypes(SSM_RW_SYS_SLEEP_TIMER_START, 1, &rw_val);
-}
-
-int SSMReadSystemSleepTimer()
-{
- int tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_SYS_SLEEP_TIMER_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- if (tmp_val < 0) {
- tmp_val = 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveInputSourceParentalControl(int source_index,
- unsigned char ctl_flag)
-{
- int tmp_val = 0;
-
- if (source_index < 0 || source_index > 31) {
- return -1;
- }
-
- if (ctl_flag != 0 && ctl_flag != 1) {
- return -1;
- }
-
- if (SSMReadNTypes(SSM_RW_INPUT_SRC_PARENTAL_CTL_START, 4,
- (unsigned char *) &tmp_val) < 0) {
- return -1;
- }
-
- tmp_val = (tmp_val & (~(1 << source_index))) | (ctl_flag << source_index);
-
- return SSMWriteNTypes(SSM_RW_INPUT_SRC_PARENTAL_CTL_START, 4,
- (unsigned char *) &tmp_val);
-}
-
-int SSMReadInputSourceParentalControl(int source_index)
-{
- int tmp_val = 0;
-
- if (SSMReadParentalControlSwitch() == 0) {
- return 0;
- }
-
- if (SSMReadNTypes(SSM_RW_INPUT_SRC_PARENTAL_CTL_START, 4,
- (unsigned char *) &tmp_val) < 0) {
- return 0;
- }
-
- if (tmp_val & (1 << source_index)) {
- return 1;
- }
-
- return 0;
-}
-
-int SSMSaveParentalControlSwitch(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_PARENTAL_CTL_SWITCH_START, 1, &tmp_val);
-}
-
-int SSMReadParentalControlSwitch()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_PARENTAL_CTL_SWITCH_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- if (tmp_val != 0) {
- tmp_val = 1;
- }
-
- return tmp_val;
-}
-
-int SSMGetCustomerDataStart()
-{
- return SSM_RW_CUSTOMER_DATA_START;
-}
-
-int SSMGetCustomerDataLen()
-{
- return SSM_RW_CUSTOMER_DATA_LEN;
-}
-
-int SSMGetATVDataStart()
-{
- return SSM_RW_ATV_START;
-}
-
-int SSMGetATVDataLen()
-{
- return SSM_RW_ATV_LEN;
-}
-
-int SSMGetVPPDataStart()
-{
- return SSM_RW_VPP_START;
-}
-
-int SSMGetVPPDataLen()
-{
- return SSM_RW_VPP_LEN;
-}
-
-int SSMSaveSearchNavigateFlag(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_SEARCH_NAVIGATE_FLAG_START, 1, &tmp_val);
-}
-
-int SSMReadSearchNavigateFlag()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_SEARCH_NAVIGATE_FLAG_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveInputNumLimit(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_INPUT_NUMBER_LIMIT_START, 1, &tmp_val);
-}
-
-int SSMReadInputNumLimit()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_INPUT_NUMBER_LIMIT_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveLocalDimingOnOffFlg(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_LOCAL_DIMING_START, 1, &tmp_val);
-}
-
-int SSMReadLocalDimingOnOffFlg()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_LOCAL_DIMING_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveVDac2DValue(unsigned short rw_val)
-{
- return SSMWriteNTypes(SSM_RW_VDAC_2D_START, 1, &rw_val);
-}
-
-int SSMReadVDac2DValue()
-{
- unsigned short tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_VDAC_2D_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveVDac3DValue(unsigned short rw_val)
-{
- return SSMWriteNTypes(SSM_RW_VDAC_3D_START, 1, &rw_val);
-}
-
-int SSMReadVDac3DValue()
-{
- unsigned short tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_VDAC_3D_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveChromaStatus(int mode)
-{
- int fd = -1, ret = -1;
- char value[20] = "";
-
- sprintf(value, "%d", mode);
-
- fd = open("/sys/class/tvafe/tvafe0/cvd_reg8a", O_RDWR);
-
- if (fd < 0) {
- LOGE("open /sys/class/tvafe/tvafe0/cvd_reg8a ERROR(%s)!!\n",
- strerror(errno));
- return -1;
- }
-
- ret = write(fd, value, strlen(value));
-
- close(fd);
-
- return ret;
-}
-
-int SSMSaveNonStandardValue(unsigned short rw_val)
-{
- int i = 0, tmp_ret = 0;
- unsigned char data[] = { 0, 0 };
-
- {
- data[0] = (unsigned char) rw_val;
- rw_val >>= 8;
- data[1] = (unsigned char) rw_val;
- }
-
- LOGD("%s, save NonStandard_value = %d", "TV", rw_val);
-
- return SSMWriteNTypes(SSM_RW_NON_STANDARD_START, 2, data);
-}
-
-int SSMReadNonStandardValue(void)
-{
- int i = 0, value = 0;
- int data[] = { 0, 0 };
-
- if (SSMReadNTypes(SSM_RW_NON_STANDARD_START, 2, data) < 0) {
- LOGE("%s, read NonStandard_value error.", "TV");
- return 0;
- }
-
- {
- value += data[1];
- value <<= 8;
- value += data[0];
- }
-
- LOGD("%s, read NonStandard_value = %d.", "TV", value);
-
- return value;
-}
-
-int SSMSaveAdbSwitchValue(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_ADB_SWITCH_START, 1, &tmp_val);
-}
-
-int SSMReadAdbSwitchValue(void)
-{
- unsigned char switch_val = 0;
-
- if (SSMReadNTypes(SSM_RW_ADB_SWITCH_START, 1, &switch_val) < 0) {
- LOGD("%s, read switch value error", "TV");
- return -1;
- }
-
- LOGD("%s, read switch value = %d", "TV", switch_val);
-
- return switch_val;
-}
-
-int SSMSaveSerialCMDSwitchValue(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_SERIAL_CMD_SWITCH_START, 1, &tmp_val);
-}
-
-int SSMReadSerialCMDSwitchValue(void)
-{
- unsigned char switch_val = 0;
-
- if (SSMReadNTypes(SSM_RW_SERIAL_CMD_SWITCH_START, 1, &switch_val) < 0) {
- LOGD("%s, read switch value error", "TV");
- return -1;
- }
-
- LOGD("%s, read switch value = %d", "TV", switch_val);
-
- return switch_val;
-}
-
-int SSMSaveNoiseGateThresholdValue(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_NOISE_GATE_THRESHOLD_START, 1, &tmp_val);
-}
-
-int SSMReadNoiseGateThresholdValue(void)
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_NOISE_GATE_THRESHOLD_START, 1, &tmp_val) < 0) {
- LOGD("%s, read NoiseGateThreshold error", "TV");
- return -1;
- }
-
- LOGD("%s, read NoiseGateThreshold = %d", "TV", tmp_val);
-
- return tmp_val;
-}
-
-int SSMSaveGraphyBacklight(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- if (rw_val < 0 || rw_val > 100) {
- return -1;
- }
-
- return SSMWriteNTypes(SSM_RW_UI_GRHPHY_BACKLIGHT_START, 1, &tmp_val);
-}
-
-int SSMReadGraphyBacklight(void)
-{
- unsigned char value = 0;
-
- if (SSMReadNTypes(SSM_RW_UI_GRHPHY_BACKLIGHT_START, 1, &value) < 0) {
- LOGD("%s, read graphybacklight error.\n", "TV");
- return -1;
- }
-
- if (/*value < 0 || */value > 100) {
- LOGD("%s, range of graphybacklight (%d) is not between 0-100.\n",
- "TV", value);
- return -1;
- }
-
- return value;
-}
-
-int SSMSaveFastSuspendFlag(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_FASTSUSPEND_FLAG_START, 1, &tmp_val);
-}
-
-int SSMReadFastSuspendFlag(void)
-{
- unsigned char value = 0;
-
- if (SSMReadNTypes(SSM_RW_FASTSUSPEND_FLAG_START, 1, &value) < 0) {
- LOGD("%s, read FastSuspendFlag error.\n", "TV");
- return -1;
- }
-
- return value;
-}
-
-int SSMSaveCABufferSizeValue(unsigned short rw_val)
-{
- int i = 0, tmp_ret = 0;
- unsigned char data[] = { 0, 0 };
-
- {
- data[0] = (unsigned char) rw_val;
- rw_val >>= 8;
- data[1] = (unsigned char) rw_val;
- }
-
- return SSMWriteNTypes(SSM_RW_CA_BUFFER_SIZE_START, 2, data);
-}
-
-int SSMReadCABufferSizeValue(void)
-{
- int i = 0, value = 0;
- unsigned char data[] = { 0, 0 };
-
- if (SSMReadNTypes(SSM_RW_CA_BUFFER_SIZE_START, 2, data) < 0) {
- LOGE("%s, read ca_buffer_size error", "TV");
- return 0;
- }
-
- {
- value += data[1];
- value <<= 8;
- value += data[0];
- }
-
- return value;
-}
-
-int SSMSaveStandbyMode(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_STANDBY_MODE_FLAG_START, 1, &tmp_val);
-}
-
-int SSMReadStandbyMode()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_STANDBY_MODE_FLAG_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveHDMIEQMode(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_HDMIEQ_MODE_START, 1, &tmp_val);
-}
-
-int SSMReadHDMIEQMode()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_HDMIEQ_MODE_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveLogoOnOffFlag(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_LOGO_ON_OFF_FLAG_START, 1, &tmp_val);
-}
-
-int SSMReadLogoOnOffFlag()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_LOGO_ON_OFF_FLAG_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveHDMIInternalMode(unsigned int rw_val)
-{
- int i = 0, tmp_ret = 0;
- unsigned char data[] = { 0, 0, 0, 0 };
-
- for (i = 3; i >= 0; i--) {
- data[i] = (unsigned char) rw_val;
- rw_val >>= 8;
- }
-
- return SSMWriteNTypes(SSM_RW_HDMIINTERNAL_MODE_START, 4, data);
-}
-
-int SSMReadHDMIInternalMode()
-{
- int i = 0, value = 0;
- int data[] = { 0, 0, 0, 0 };
-
- if (SSMReadNTypes(SSM_RW_HDMIINTERNAL_MODE_START, 4, data) < 0) {
- return 0;
- }
-
- for (i = 0; i < 4; i++) {
- value <<= 8;
- value += data[i];
- }
-
- return value;
-}
-
-int SSMSaveParentalControlPassWord(unsigned char *password, int size)
-{
- return SSMWriteNTypes(SSM_RW_PARENTAL_CTL_PASSWORD_START, size, password);
-}
-
-int SSMReadParentalControlPassWord(unsigned short *password)
-{
- if (SSMReadNTypes(SSM_RW_PARENTAL_CTL_PASSWORD_START,
- SSM_RW_PARENTAL_CTL_PASSWORD_LEN, (unsigned char *) password)
- < 0) {
- return -1;
- }
- return 0;
-}
-
-int SSMSaveDisable3D(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_DISABLE_3D_START, 1, &tmp_val);
-}
-
-int SSMReadDisable3D()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_DISABLE_3D_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
- tmp_val = 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveGlobalOgoEnable(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_GLOBAL_OGO_ENABLE_START, 1, &tmp_val);
-}
-
-int SSMReadGlobalOgoEnable()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(SSM_RW_GLOBAL_OGO_ENABLE_START, 1, &tmp_val) < 0) {
- return 0;
- }
-
- if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
- tmp_val = 0;
- }
-
- return tmp_val;
-}
-
-int SSMDeviceMarkCheck()
-{
- int i = 0, failed_count = 0;
- int mark_offset[3] = { 0, 0, 0 };
- unsigned char mark_values[3] = { 0, 0, 0 };
- unsigned char tmp_ch = 0;
-
- //read temp one byte
- SSMReadNTypes(0, 1, &tmp_ch);
-
- mark_offset[0] = SSM_MARK_01_START;
- mark_offset[1] = SSM_MARK_02_START;
- mark_offset[2] = SSM_MARK_03_START;
-
- mark_values[0] = SSM_MARK_01_VALUE;
- mark_values[1] = SSM_MARK_02_VALUE;
- mark_values[2] = SSM_MARK_03_VALUE;
-
- if (SSMReadBurnWriteCharaterChar() != CC_DEF_CHARACTER_CHAR_VAL) {
- SSMSaveBurnWriteCharaterChar(CC_DEF_CHARACTER_CHAR_VAL);
- }
-
- failed_count = 0;
- for (i = 0; i < 3; i++) {
- tmp_ch = 0;
- if (SSMReadNTypes(mark_offset[i], 1, &tmp_ch) < 0) {
- LOGE("%s, SSMDeviceMarkCheck Read Mark failed!!!\n", "TV");
- break;
- }
-
- if (tmp_ch != mark_values[i]) {
- failed_count += 1;
- LOGE(
- "%s, SSMDeviceMarkCheck Mark[%d]'s offset = %d, Mark[%d]'s Value = %d, read value = %d.\n",
- "TV", i, mark_offset[i], i, mark_values[i], tmp_ch);
- }
- }
-
- if (failed_count >= 3) {
- return -1;
- }
-
- return 0;
-}
-
-int SSMRestoreDeviceMarkValues()
-{
- int i;
- int mark_offset[3] = {
- (int) SSM_MARK_01_START, //
- (int) SSM_MARK_02_START, //
- (int) SSM_MARK_03_START, //
- };
-
- unsigned char mark_values[3] = {
- //
- (unsigned char) SSM_MARK_01_VALUE, (unsigned char) SSM_MARK_02_VALUE,
- (unsigned char) SSM_MARK_03_VALUE, //
- };
-
- for (i = 0; i < 3; i++) {
- if (SSMWriteNTypes(mark_offset[i], 1, &(mark_values[i])) < 0) {
- LOGD("SSMRestoreDeviceMarkValues Write Mark failed.\n");
- break;
- }
- }
-
- if (i < 3) {
- return -1;
- }
-
- return 0;
-}
-
-static int SSMGetPreCopyingEnableCfg()
-{
- const char *prop_value;
-
- prop_value = config_get_str("TV", "ssm.precopying.en", "null");
- if (strcmp(prop_value, "null") == 0 || strcmp(prop_value, "0") == 0
- || strcmp(prop_value, "disable") == 0) {
- return 0;
- }
-
- return 1;
-}
-
-static int SSMGetPreCopyingDevicePathCfg(char dev_path[])
-{
- const char *prop_value;
-
- if (dev_path == NULL) {
- return -1;
- }
-
- prop_value = config_get_str("TV", "ssm.precopying.devpath", "null");
- if (strcmp(prop_value, "null") == 0) {
- return 1;
- }
-
- strcpy(dev_path, prop_value);
-
- return 0;
-}
-
-static unsigned char gTempDataBuf[4096] = { 0 };
-int SSMHandlePreCopying()
-{
- int device_fd = -1;
- int i = 0, tmp_size = 0;
- unsigned char tmp_ch = 0;
- char tmpPreCopyingDevicePath[256] = { '\0' };
-
- if (SSMGetPreCopyingEnableCfg() == 0) {
- LOGD("%s, Pre copying is disable now.\n", "TV");
- return 0;
- }
-
- //read temp one byte
- SSMReadNTypes(0, 1, &tmp_ch);
-
- SSMGetPreCopyingDevicePathCfg(tmpPreCopyingDevicePath);
-
- device_fd = open(tmpPreCopyingDevicePath, O_RDONLY);
- if (device_fd < 0) {
- LOGE("%s, Open device file \"%s\" error: %s.\n", "TV",
- tmpPreCopyingDevicePath, strerror(errno));
- return -1;
- }
-
- tmp_size = lseek(device_fd, 0, SEEK_END);
- if (tmp_size == 4096) {
- lseek(device_fd, 0, SEEK_SET);
- read(device_fd, gTempDataBuf, tmp_size);
-
- SSMWriteNTypes(0, tmp_size, gTempDataBuf);
- }
-
- close(device_fd);
-
- remove(tmpPreCopyingDevicePath);
-
- return 0;
-}
-
-int SSMSaveDTVType(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(SSM_RW_DTV_TYPE_START, 1, &tmp_val);
-}
-
-int SSMReadDTVType(int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(SSM_RW_DTV_TYPE_START, 1, &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-#ifndef NELEM
-# define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0])))
-#endif
-
-/************************ End APIs For UI ************************/
-
-// other api
-int GetSSMCfgBufferData(const char *key_str, int *buf_item_count, int radix,
- unsigned char data_buf[])
-{
- int cfg_item_count = 0;
- char *token = NULL;
- const char *strDelimit = ",";
- const char *config_value;
- char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
-
- config_value = config_get_str("TV", key_str, "null");
- if (strcasecmp(config_value, "null") == 0) {
- LOGE("%s, can't get config \"%s\"!!!\n", "TV", key_str);
- return -1;
- }
-
- cfg_item_count = 0;
-
- memset((void *)data_str, 0, sizeof(data_str));
- strncpy(data_str, config_value, sizeof(data_str) - 1);
-
- token = strtok(data_str, strDelimit);
- while (token != NULL) {
- if (cfg_item_count < *buf_item_count) {
- data_buf[cfg_item_count] = strtol(token, NULL, radix);
-
- token = strtok(NULL, strDelimit);
- cfg_item_count += 1;
- } else {
- LOGE("%s, we get data count more than desire count (%d)!!!\n",
- "TV", *buf_item_count);
- return -1;
- }
- }
-
- *buf_item_count = cfg_item_count;
-
- return 0;
-}
-
-int SSMSaveSourceInput(unsigned char rw_val)
-{
- return SSMWriteNTypes(TVIN_DATA_POS_SOURCE_INPUT_START, 1, &rw_val);
-}
-
-int SSMReadSourceInput()
-{
- unsigned char tmp_val = 0;
-
- if (SSMReadNTypes(TVIN_DATA_POS_SOURCE_INPUT_START, 1, &tmp_val) < 0) {
- return 0;
- }
- if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
- tmp_val = 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveCVBSStd(unsigned char rw_val)
-{
- return SSMWriteNTypes(TVIN_DATA_CVBS_STD_START, 1, &rw_val);
-}
-
-int SSMReadCVBSStd(unsigned char *rw_val)
-{
- return SSMReadNTypes(TVIN_DATA_CVBS_STD_START, 1, rw_val);
-}
-
-int SSMSave3DMode(unsigned char rw_val)
-{
- return SSMWriteNTypes(TVIN_DATA_POS_3D_MODE_START, 1, &rw_val);
-}
-
-int SSMRead3DMode(unsigned char *rw_val)
-{
- return SSMReadNTypes(TVIN_DATA_POS_3D_MODE_START, 1, rw_val);
-}
-
-int SSMSave3DLRSwitch(unsigned char rw_val)
-{
- return SSMWriteNTypes(TVIN_DATA_POS_3D_LRSWITCH_START, 1, &rw_val);
-}
-
-int SSMRead3DLRSwitch(unsigned char *rw_val)
-{
- return SSMReadNTypes(TVIN_DATA_POS_3D_LRSWITCH_START, 1, rw_val);
-}
-
-int SSMSave3DDepth(unsigned char rw_val)
-{
- return SSMWriteNTypes(TVIN_DATA_POS_3D_DEPTH_START, 1, &rw_val);
-}
-
-int SSMRead3DDepth(unsigned char *rw_val)
-{
- return SSMReadNTypes(TVIN_DATA_POS_3D_DEPTH_START, 1, rw_val);
-}
-
-int SSMSave3DTO2D(unsigned char rw_val)
-{
- return SSMWriteNTypes(TVIN_DATA_POS_3D_TO2D_START, 1, &rw_val);
-}
-
-int SSMRead3DTO2D(unsigned char *rw_val)
-{
- return SSMReadNTypes(TVIN_DATA_POS_3D_TO2D_START, 1, rw_val);
-}
-
-int SSMSaveBrightness(int offset, int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_BRIGHTNESS_START + offset, 1, &tmp_val);
-}
-
-int SSMReadBrightness(int offset, int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_BRIGHTNESS_START + offset, 1,
- &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSaveContrast(int offset, int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_CONTRAST_START + offset, 1, &tmp_val);
-}
-
-int SSMReadContrast(int offset, int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_CONTRAST_START + offset, 1, &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSaveSaturation(int offset, int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_SATURATION_START + offset, 1, &tmp_val);
-}
-
-int SSMReadSaturation(int offset, int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_SATURATION_START + offset, 1,
- &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSaveHue(int offset, int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_HUE_START + offset, 1, &tmp_val);
-}
-
-int SSMReadHue(int offset, int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_HUE_START + offset, 1, &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSaveSharpness(int offset, int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_SHARPNESS_START + offset, 1, &tmp_val);
-}
-
-int SSMReadSharpness(int offset, int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_SHARPNESS_START + offset, 1, &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSaveSceneMode(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_SCENE_MODE_START, 1, &tmp_val);
-}
-
-int SSMReadSceneMode(int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_SCENE_MODE_START, 1, &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSavePictureMode(int offset, int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_PICTURE_MODE_START + offset, 1, &tmp_val);
-}
-
-int SSMReadPictureMode(int offset, int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_PICTURE_MODE_START + offset, 1,
- &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSaveColorTemperature(int offset, int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_COLOR_TEMP_START + offset, 1, &tmp_val);
-}
-
-int SSMReadColorTemperature(int offset, int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_COLOR_TEMP_START + offset, 1,
- &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSaveNoiseReduction(int offset, int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_NOISE_REDUCTION_START + offset, 1,
- &tmp_val);
-}
-
-int SSMReadNoiseReduction(int offset, int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_NOISE_REDUCTION_START + offset, 1,
- &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSaveDisplayMode(int offset, int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_DISPLAY_MODE_START + offset, 1, &tmp_val);
-}
-
-int SSMReadDisplayMode(int offset, int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_DISPLAY_MODE_START + offset, 1,
- &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSaveBackLightVal(int offset, int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_BACKLIGHT_START + offset, 1, &tmp_val);
-}
-
-int SSMReadBackLightVal(int offset, int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_BACKLIGHT_START + offset, 1, &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSaveFBCN360BackLightVal(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_FBC_BACKLIGHT_START , 1, &tmp_val);
-}
-
-int SSMReadFBCN360BackLightVal(int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_FBC_BACKLIGHT_START, 1, &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSaveFBCN360ColorTempVal(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_POS_FBC_COLORTEMP_START , 1, &tmp_val);
-}
-
-int SSMReadFBCN360ColorTempVal(int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_FBC_COLORTEMP_START, 1, &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-
-int SSMSaveFBCELECmodeVal(int rw_val)
-{
- unsigned char tmp_val = rw_val;
- return SSMWriteNTypes(VPP_DATA_POS_FBC_ELECMODE_START , 1, &tmp_val);
-}
-
-int SSMReadFBCELECmodeVal(int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_POS_FBC_ELECMODE_START, 1, &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-
-int SSMSaveColorDemoMode(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_COLOR_DEMO_MODE_START, 1, &rw_val);
-}
-
-int SSMReadColorDemoMode(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_COLOR_DEMO_MODE_START, 1, rw_val);
-}
-
-int SSMSaveColorBaseMode(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_COLOR_BASE_MODE_START, 1, &rw_val);
-}
-
-int SSMReadColorBaseMode(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_COLOR_BASE_MODE_START, 1, rw_val);
-}
-
-int SSMSaveRGBGainRStart(int offset, unsigned int rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_RGB_GAIN_R_START + offset, 1, &rw_val);
-}
-
-int SSMReadRGBGainRStart(int offset, unsigned int *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_RGB_GAIN_R_START + offset, 1, rw_val);
-}
-
-int SSMSaveRGBGainGStart(int offset, unsigned int rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_RGB_GAIN_G_START + offset, 1, &rw_val);
-}
-
-int SSMReadRGBGainGStart(int offset, unsigned int *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_RGB_GAIN_G_START + offset, 1, rw_val);
-}
-
-int SSMSaveRGBGainBStart(int offset, unsigned int rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_RGB_GAIN_B_START + offset, 1, &rw_val);
-}
-
-int SSMReadRGBGainBStart(int offset, unsigned int *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_RGB_GAIN_B_START + offset, 1, rw_val);
-}
-
-int SSMSaveRGBPostOffsetRStart(int offset, int rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_RGB_POST_OFFSET_R_START + offset, 1,
- &rw_val);
-}
-
-int SSMReadRGBPostOffsetRStart(int offset, int *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_RGB_POST_OFFSET_R_START + offset, 1,
- rw_val);
-}
-
-int SSMSaveRGBPostOffsetGStart(int offset, int rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_RGB_POST_OFFSET_G_START + offset, 1,
- &rw_val);
-}
-
-int SSMReadRGBPostOffsetGStart(int offset, int *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_RGB_POST_OFFSET_G_START + offset, 1,
- rw_val);
-}
-
-int SSMSaveRGBPostOffsetBStart(int offset, int rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_RGB_POST_OFFSET_B_START + offset, 1,
- &rw_val);
-}
-
-int SSMReadRGBPostOffsetBStart(int offset, int *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_RGB_POST_OFFSET_B_START + offset, 1,
- rw_val);
-}
-
-int SSMSaveRGBValueStart(int offset, int8_t rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_RGB_START + offset, 1, &rw_val);
-}
-
-int SSMReadRGBValueStart(int offset, int8_t *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_RGB_START + offset, 1, &rw_val);
-}
-
-int SSMSaveDBCStart(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_DBC_START, 1, &rw_val);
-}
-
-int SSMReadDBCStart(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_DBC_START, 1, rw_val);
-}
-
-int SSMSaveColorSpaceStart(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_COLOR_SPACE_START, 1, &rw_val);
-}
-
-int SSMReadColorSpaceStart(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_COLOR_SPACE_START, 1, rw_val);
-}
-
-int SSMSaveDnlpStart(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_DNLP_START, 1, &rw_val);
-}
-
-int SSMReadDnlpStart(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_DNLP_START, 1, rw_val);
-}
-
-int SSMSavePanoramaStart(int offset, unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_PANORAMA_START + offset, 1, &rw_val);
-}
-
-int SSMReadPanoramaStart(int offset, unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_PANORAMA_START + offset, 1, rw_val);
-}
-
-int SSMSaveTestPattern(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_TEST_PATTERN_START, 1, &rw_val);
-}
-
-int SSMReadTestPattern(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_TEST_PATTERN_START, 1, rw_val);
-}
-
-int SSMSaveAPL(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_APL_START, VPP_DATA_APL_SIZE, &rw_val);
-}
-
-int SSMReadAPL(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_APL_START, VPP_DATA_APL_SIZE, rw_val);
-}
-
-int SSMSaveAPL2(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_APL2_START, VPP_DATA_APL2_SIZE, &rw_val);
-}
-
-int SSMReadAPL2(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_APL2_START, VPP_DATA_APL2_SIZE, rw_val);
-}
-
-int SSMSaveBD(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_BD_START, VPP_DATA_BD_SIZE, &rw_val);
-}
-
-int SSMReadBD(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_BD_START, VPP_DATA_BD_SIZE, rw_val);
-}
-
-int SSMSaveBP(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_BP_START, VPP_DATA_BP_SIZE, &rw_val);
-}
-
-int SSMReadBP(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_BP_START, VPP_DATA_BP_SIZE, rw_val);
-}
-
-int SSMSaveDDRSSC(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_DDR_SSC_START, 1, &rw_val);
-}
-
-int SSMReadDDRSSC(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_DDR_SSC_START, 1, rw_val);
-}
-
-int SSMSaveLVDSSSC(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_LVDS_SSC_START, 1, &rw_val);
-}
-
-int SSMReadLVDSSSC(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_LVDS_SSC_START, 1, rw_val);
-}
-
-int SSMSaveDreamPanel(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_DREAM_PANEL_START, 1, &rw_val);
-}
-
-int SSMReadDreamPanel(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_DREAM_PANEL_START, 1, rw_val);
-}
-
-int SSMSaveUserNatureLightSwitch(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_USER_NATURE_SWITCH_START, 1, &rw_val);
-}
-
-int SSMReadUserNatureLightSwitch(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_USER_NATURE_SWITCH_START, 1, rw_val);
-}
-
-int SSMSaveDBCBacklightEnable(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_DBC_BACKLIGHT_START, 1, &rw_val);
-}
-
-int SSMReadDBCBacklightEnable(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_DBC_BACKLIGHT_START, 1, rw_val);
-}
-
-int SSMSaveDBCBacklightStd(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_DBC_STANDARD_START, 1, &rw_val);
-}
-
-int SSMReadDBCBacklightStd(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_DBC_STANDARD_START, 1, rw_val);
-}
-
-int SSMSaveDBCEnable(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_DBC_ENABLE_START, 1, &rw_val);
-}
-
-int SSMReadDBCEnable(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_DBC_ENABLE_START, 1, rw_val);
-}
-
-int SSMSaveGammaValue(int rw_val)
-{
- unsigned char tmp_val = rw_val;
-
- return SSMWriteNTypes(VPP_DATA_GAMMA_VALUE_START, 1, &tmp_val);
-}
-
-int SSMReadGammaValue(int *rw_val)
-{
- int tmp_ret = 0;
- unsigned char tmp_val = 0;
-
- tmp_ret = SSMReadNTypes(VPP_DATA_GAMMA_VALUE_START, 1, &tmp_val);
- *rw_val = tmp_val;
-
- return tmp_ret;
-}
-
-int SSMSaveBackLightReverse(unsigned char rw_val)
-{
- return SSMWriteNTypes(VPP_DATA_POS_BACKLIGHT_REVERSE_START, 1, &rw_val);
-}
-
-int SSMReadBackLightReverse(unsigned char *rw_val)
-{
- return SSMReadNTypes(VPP_DATA_POS_BACKLIGHT_REVERSE_START, 1, rw_val);
-}
-
-int SSMSaveAudioMasterVolume(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_MASTR_VOLUME_VAL, 1, &rw_val);
-}
-
-int SSMReadAudioMasterVolume(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_MASTR_VOLUME_VAL, 1, rw_val);
-}
-
-int SSMSaveAudioBalanceVal(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_BALANCE_VAL, 1, &rw_val);
-}
-
-int SSMReadAudioBalanceVal(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_BALANCE_VAL, 1, rw_val);
-}
-
-int SSMSaveAudioSupperBassVolume(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_SUPPERBASS_VOLUME_VAL, 1, &rw_val);
-}
-
-int SSMReadAudioSupperBassVolume(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_SUPPERBASS_VOLUME_VAL, 1, rw_val);
-}
-
-int SSMSaveAudioSupperBassSwitch(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_SUPPERBASS_SWITCH, 1, &rw_val);
-}
-
-int SSMReadAudioSupperBassSwitch(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_SUPPERBASS_SWITCH, 1, rw_val);
-}
-
-int SSMSaveAudioSRSSurroundSwitch(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_SRS_SURROUND_SWITCH, 1, &rw_val);
-}
-
-int SSMReadAudioSRSSurroundSwitch(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_SRS_SURROUND_SWITCH, 1, rw_val);
-}
-
-int SSMSaveAudioSRSDialogClaritySwitch(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_SRS_DIALOG_CLARITY_SWITCH, 1, &rw_val);
-}
-
-int SSMReadAudioSRSDialogClaritySwitch(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_SRS_DIALOG_CLARITY_SWITCH, 1, rw_val);
-}
-
-int SSMSaveAudioSRSTruBassSwitch(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_SRS_TRUEBASS_SWITCH, 1, &rw_val);
-}
-
-int SSMReadAudioSRSTruBassSwitch(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_SRS_TRUEBASS_SWITCH, 1, rw_val);
-}
-
-int SSMSaveAudioBassVolume(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_BASS_VOLUME_VAL, 1, &rw_val);
-}
-
-int SSMReadAudioBassVolume(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_BASS_VOLUME_VAL, 1, rw_val);
-}
-
-int SSMSaveAudioTrebleVolume(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_TREBLE_VOLUME_VAL, 1, &rw_val);
-}
-
-int SSMReadAudioTrebleVolume(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_TREBLE_VOLUME_VAL, 1, rw_val);
-}
-
-int SSMSaveAudioSoundModeVal(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_SOUND_MODE_VAL, 1, &rw_val);
-}
-
-int SSMReadAudioSoundModeVal(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_SOUND_MODE_VAL, 1, rw_val);
-}
-
-int SSMSaveAudioWallEffectSwitch(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_WALL_EFFCT_SWITCH, 1, &rw_val);
-}
-
-int SSMReadAudioWallEffectSwitch(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_WALL_EFFCT_SWITCH, 1, rw_val);
-}
-
-int SSMSaveAudioSPDIFSwitchVal(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_SPDIF_SWITCH, 1, &rw_val);
-}
-
-int SSMReadAudioSPDIFSwitchVal(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_SPDIF_SWITCH, 1, rw_val);
-}
-
-int SSMSaveAudioSPDIFModeVal(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_SPDIF_MODE_VAL, 1, &rw_val);
-}
-
-int SSMReadAudioSPDIFModeVal(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_SPDIF_MODE_VAL, 1, rw_val);
-}
-
-int SSMSaveAudioEQModeVal(int8_t rw_val)
-{
- return SSMWriteNTypes(SSM_AUD_EQ_MODE_VAL, 1, &rw_val);
-}
-
-int SSMReadAudioEQModeVal(int8_t *rw_val)
-{
- return SSMReadNTypes(SSM_AUD_EQ_MODE_VAL, 1, rw_val);
-}
-
-int SSMSaveAudioEQGain(int offset, int size, int8_t tmp_buf[])
-{
- return SSMWriteNTypes(SSM_AUD_EQ_GAIN + offset, size, tmp_buf);
-}
-
-int SSMReadAudioEQGain(int offset, int size, int8_t tmp_buf[])
-{
- return SSMReadNTypes(SSM_AUD_EQ_GAIN, size, tmp_buf);
-}
-
-int SSMSaveBlackoutEnable(int8_t enable)
-{
- return SSMWriteNTypes(SSM_RW_BLACKOUT_ENABLE_START, 1, &enable);
-}
-
-int SSMReadBlackoutEnable(int8_t *enable)
-{
- return SSMReadNTypes(SSM_RW_BLACKOUT_ENABLE_START, 1, enable);
-}
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <cutils/properties.h>
+
+#include <netinet/ether.h>
+#include <netinet/if_ether.h>
+
+#include <netutils/ifc.h>
+#include <netutils/dhcp.h>
+
+#include "CTvSetting.h"
+
+#include "../tvconfig/tvconfig.h"
+#include "../audio/audio_api.h"
+
+#include "../tv/CTvLog.h"
+#define CC_DEF_CHARACTER_CHAR_VAL (0x8A)
+
+pthread_mutex_t ssm_r_w_op_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/************************ Start APIs For UI ************************/
+
+CTvSettingDeviceFactory *mpSettingDeviceFactory = NULL;
+CBlobDevice *mpCurDevice = NULL;
+
+bool CTvSettingLoad()
+{
+ mpSettingDeviceFactory = new CTvSettingDeviceFactory();
+ mpCurDevice = mpSettingDeviceFactory->getSaveDeviceFromConfigFile();
+ if (mpCurDevice == NULL) {
+ LOGD("%s, CTvSettingLoad = NULL", "TV");
+ return false;
+ } else {
+ mpCurDevice->OpenDevice();
+ }
+ return true;
+}
+
+bool CTvSettingunLoad()
+{
+ if (mpSettingDeviceFactory != NULL) {
+ delete mpSettingDeviceFactory;
+ mpSettingDeviceFactory = NULL;
+ }
+ return true;
+}
+
+template<typename T>
+static int SSMWriteNTypes(int offset, int data_len, T *data_buf)
+{
+ pthread_mutex_lock(&ssm_r_w_op_mutex);
+
+ if (data_buf == NULL) {
+ LOGE("%s, data_buf is NULL.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ if (mpCurDevice == NULL) {
+ LOGE("%s, ssm_device is NULL.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ if (mpCurDevice->WriteBytes(offset, data_len * sizeof(T),
+ (unsigned char *) data_buf) < 0) {
+ LOGE("%s, device WriteNBytes error.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return 0;
+}
+
+template<typename T>
+static int SSMReadNTypes(int offset, int data_len, T *data_buf)
+{
+ pthread_mutex_lock(&ssm_r_w_op_mutex);
+
+ if (data_buf == NULL) {
+ LOGE("%s, data_buf is NULL.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ if (mpCurDevice == NULL) {
+ LOGE("%s, ssm_device is NULL.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ if (mpCurDevice->ReadBytes(offset, data_len * sizeof(T),
+ (unsigned char *) data_buf) < 0) {
+ LOGE("%s, device ReadNBytes error.\n", "TV");
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return 0;
+}
+int SSMSaveFlash_One_N310_N311(int offset, int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+ LOGD ( "~~~ SSMSaveFlash_One ~~~##offset %d##rw_val %d##" , offset, rw_val);
+
+ return SSMWriteNTypes(offset, 1, &tmp_val);
+}
+
+int SSMReadFlash_One_N310_N311(int offset)
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(offset, 1, &tmp_val) < 0) {
+ return -1;
+ }
+ LOGD ( "~~~ SSMReadFlash_One ~~~##offset %d##rw_val %d##" , offset, tmp_val);
+
+ return tmp_val;
+}
+
+int SSMSaveFlash_N_N310_N311(int offset, int data_len, int *data_buf)
+{
+ int i = 0;
+ unsigned char *ptr = NULL;
+
+ ptr = new unsigned char[data_len];
+
+ if(ptr != NULL) {
+ for(i = 0; i < data_len; i++) {
+ ptr[i] = data_buf[i];
+ }
+ } else {
+ delete ptr;
+ ptr = NULL;
+
+ return -1;
+ }
+
+ if(SSMWriteNTypes(offset, data_len, ptr) < 0) {
+ delete ptr;
+ ptr = NULL;
+
+ return -1;
+ }
+
+ delete ptr;
+ ptr = NULL;
+
+ return 0;
+}
+
+int SSMReadFlash_N_N310_N311(int offset, int data_len, int *data_buf)
+{
+ int i = 0;
+ unsigned char *ptr = NULL;
+
+ ptr = new unsigned char[data_len];
+
+ if(ptr != NULL) {
+ if (SSMReadNTypes(offset, data_len, ptr) < 0) {
+ delete ptr;
+ ptr = NULL;
+
+ return -1;
+ }
+ } else {
+ delete ptr;
+ ptr = NULL;
+
+ return -1;
+ }
+
+ for(i = 0; i < data_len; i++) {
+ data_buf[i] = ptr[i];
+ }
+
+ delete ptr;
+ ptr = NULL;
+
+ return 0;
+}
+int EEPWriteOneByte(int offset, unsigned char *data_buf)
+{
+ int fd = 0;
+ const char *device_path = config_get_str("SETTING", "peripheral.eeprom.path", "/sys/devices/i2c-2/2-0050/eeprom");
+ pthread_mutex_lock(&ssm_r_w_op_mutex);
+
+ LOGD ( "~~~EEPWriteOneByte~~~##offset %d##rw_val %s##" , offset, data_buf);
+
+ if (data_buf == NULL) {
+ LOGE("%s, data_buf is NULL.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ fd = open(device_path, O_RDWR);
+
+ if (fd < 0) {
+ LOGE("%s, ####i2c test device open failed####.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ lseek(fd, offset, SEEK_SET);
+
+ if (write(fd, data_buf, 1) < 0) {
+ LOGE("%s, device WriteOneBytes error.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ close(fd);
+
+ LOGE("%s, device WriteOneBytes OK.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return 0;
+}
+
+int EEPReadOneByte(int offset , unsigned char *data_buf)
+{
+ int fd = 0;
+ //const char* device_type = config_get_str("SETTING", "peripheral.eeprom.device", "disable");
+ const char *device_path = config_get_str("SETTING", "peripheral.eeprom.path", "/sys/devices/i2c-2/2-0050/eeprom");
+
+ pthread_mutex_lock(&ssm_r_w_op_mutex);
+
+ if (data_buf == NULL) {
+ LOGE("%s, data_buf is NULL.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ fd = open(device_path, O_RDWR);
+
+ if (fd < 0) {
+ LOGE("%s, ssm_device is NULL.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+ lseek(fd, offset, SEEK_SET);
+
+ if (read(fd, data_buf, 1) < 0) {
+ LOGE("%s, device ReadOneBytes error.\n", "TV");
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ close(fd);
+
+ LOGD ( "~~~EEPReadOneByte~~~##offset %d##rw_val %d##" , offset, data_buf);
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return 0;
+}
+
+int EEPWriteNByte(int offset, int data_len, unsigned char *data_buf)
+{
+ int fd = 0;
+ const char *device_path = config_get_str("SETTING", "peripheral.eeprom.path", "/sys/devices/i2c-2/2-0050/eeprom");
+ pthread_mutex_lock(&ssm_r_w_op_mutex);
+
+ LOGD ( "~~~EEPWriteNByte~~~##offset %d##data_len %d##" , offset, data_len);
+
+ if (data_buf == NULL) {
+ LOGE("%s, data_buf is NULL.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ fd = open(device_path, O_RDWR);
+
+ if (fd < 0) {
+ LOGE("%s, ####i2c test device open failed####.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ lseek(fd, offset, SEEK_SET);
+
+ if (write(fd, data_buf, data_len) < 0) {
+ LOGE("%s, device WriteNBytes error.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ close(fd);
+
+ LOGE("%s, device WriteNBytes OK.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return 0;
+}
+int EEPReadNByte(int offset, int data_len, unsigned char *data_buf)
+{
+ int fd = 0;
+ const char *device_path = config_get_str("SETTING", "peripheral.eeprom.path", "/sys/devices/i2c-2/2-0050/eeprom");
+ pthread_mutex_lock(&ssm_r_w_op_mutex);
+
+ if (data_buf == NULL) {
+ LOGE("%s, data_buf is NULL.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ fd = open(device_path, O_RDWR);
+
+ if (fd < 0) {
+ LOGE("%s, ssm_device is NULL.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+ lseek(fd, offset, SEEK_SET);
+
+ if (read(fd, data_buf, data_len) < 0) {
+ LOGE("%s, device ReadNBytes error.\n", "TV");
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return -1;
+ }
+
+ close(fd);
+
+ LOGD ( "~~~EEPReadNByte~~~##offset %d##data_len %d##" , offset, data_len);
+
+ pthread_mutex_unlock(&ssm_r_w_op_mutex);
+ return 0;
+}
+
+
+int SSMSaveEEP_One_N310_N311(int offset, int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+ const char *device_config = config_get_str("SETTING", "peripheral.eeprom.device", "disable");
+
+ if(strcmp(device_config, "enable") != 0) {
+ LOGD ( "~~~ SSMSaveEEP_One ~~~##peripheral.eeprom.device error##");
+ return -1;
+ }
+ LOGD ( "~~~SSMSaveEEP_One~~~##offset %d##rw_val %d##" , offset, rw_val);
+
+ return EEPWriteOneByte(offset, &tmp_val);
+}
+
+int SSMReadEEP_One_N310_N311(int offset)
+{
+ unsigned char tmp_val = 0;
+ const char *device_config = config_get_str("SETTING", "peripheral.eeprom.device", "disable");
+
+ if(strcmp(device_config, "enable") != 0) {
+ LOGD ( "~~~ SSMReadEEP_One ~~~##peripheral.eeprom.device error##");
+ return -1;
+ }
+
+ if (EEPReadOneByte(offset, &tmp_val) < 0) {
+ return -1;
+ }
+ LOGD ( "~~~SSMReadEEP_One~~~##offset %d##rw_val %d##" , offset, tmp_val);
+
+ return tmp_val;
+}
+
+int SSMSaveEEP_N_N310_N311(int offset, int data_len, int *data_buf)
+{
+ int i = 0;
+ unsigned char *ptr = NULL;
+ const char *device_config = config_get_str("SETTING", "peripheral.eeprom.device", "disable");
+
+ if(strcmp(device_config, "enable") != 0) {
+ LOGD ( "~~~ SSMSaveEEP_N ~~~##peripheral.eeprom.device error##");
+ return -1;
+ }
+
+ ptr = new unsigned char[data_len];
+
+ if(ptr != NULL) {
+ for(i = 0; i < data_len; i++) {
+ ptr[i] = data_buf[i];
+ }
+ } else {
+ delete ptr;
+ ptr = NULL;
+
+ return -1;
+ }
+
+ if(EEPWriteNByte(offset, data_len, ptr) < 0) {
+ delete ptr;
+ ptr = NULL;
+
+ return -1;
+ }
+
+ delete ptr;
+ ptr = NULL;
+
+ return 0;
+}
+
+int SSMReadEEP_N_N310_N311(int offset, int data_len, int *data_buf)
+{
+ int i = 0;
+ unsigned char *ptr = NULL;
+ const char *device_config = config_get_str("SETTING", "peripheral.eeprom.device", "disable");
+
+ if(strcmp(device_config, "enable") != 0) {
+ LOGD ( "~~~ SSMReadEEP_N ~~~##peripheral.eeprom.device error##");
+ return -1;
+ }
+ ptr = new unsigned char[data_len];
+
+ if(ptr != NULL) {
+ if (EEPReadNByte(offset, data_len, ptr) < 0) {
+ delete ptr;
+ ptr = NULL;
+
+ return -1;
+ }
+ } else {
+ delete ptr;
+ ptr = NULL;
+
+ return -1;
+ }
+
+ for(i = 0; i < data_len; i++) {
+ data_buf[i] = ptr[i];
+ }
+
+ delete ptr;
+ ptr = NULL;
+
+ return 0;
+}
+/************************ Start APIs For UI ************************/
+int MiscSSMRestoreDefault()
+{
+ SSMSaveFactoryBurnMode(0);
+ SSMSavePowerOnOffChannel(0);
+ SSMSaveSystemLanguage(0);
+ SSMSaveAgingMode(0);
+ SSMSavePanelType(0);
+ SSMSavePowerOnMusicSwitch(0);
+ SSMSavePowerOnMusicVolume(20);
+ SSMSaveSystemSleepTimer(0xFFFFFFFF);
+ SSMSaveInputSourceParentalControl(0, 0);
+ SSMSaveParentalControlSwitch(0);
+ SSMSaveSerialCMDSwitchValue(0);
+ SSMSaveBlackoutEnable(0);
+ return 0;
+}
+
+int MiscSSMFacRestoreDefault()
+{
+ SSMSaveSystemLanguage(0);
+ SSMSavePowerOnMusicSwitch(1);
+ SSMSavePowerOnMusicVolume(20);
+ SSMSaveSystemSleepTimer(0xFFFFFFFF);
+ SSMSaveInputSourceParentalControl(0, 0);
+ SSMSaveParentalControlSwitch(0);
+ SSMSaveSearchNavigateFlag(1);
+ SSMSaveInputNumLimit(2);
+ SSMSaveLocalDimingOnOffFlg(0);
+
+ return 0;
+}
+
+int ReservedSSMRestoreDefault()
+{
+ SSMSaveBurnWriteCharaterChar(CC_DEF_CHARACTER_CHAR_VAL);
+
+ return 0;
+}
+
+int SSMSaveBurnWriteCharaterChar(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RSV_W_CHARACTER_CHAR_START, 1, &tmp_val);
+}
+
+int SSMReadBurnWriteCharaterChar()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RSV_W_CHARACTER_CHAR_START, 1, &tmp_val) < 0) {
+ return -1;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveFactoryBurnMode(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_FBMF_START, 1, &tmp_val);
+}
+
+int SSMReadFactoryBurnMode()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_FBMF_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ if (tmp_val != 0) {
+ return 1;
+ }
+
+ return 0;
+}
+
+int SSMSavePowerOnOffChannel(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+ return SSMWriteNTypes(SSM_RW_POWER_CHANNEL_START, 1, &tmp_val);
+}
+
+int SSMReadPowerOnOffChannel()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_POWER_CHANNEL_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+ return tmp_val;
+}
+
+int SSMSaveLastSelectSourceInput(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+ return SSMWriteNTypes(SSM_RW_LAST_SOURCE_INPUT_START, 1, &tmp_val);
+}
+
+int SSMReadLastSelectSourceInput()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_LAST_SOURCE_INPUT_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+ if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
+ tmp_val = 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveSystemLanguage(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_SYS_LANGUAGE_START, 1, &tmp_val);
+}
+
+int SSMReadSystemLanguage()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_SYS_LANGUAGE_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
+ tmp_val = 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveAgingMode(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_AGING_MODE_START, 1, &tmp_val);
+}
+
+int SSMReadAgingMode()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_AGING_MODE_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
+ tmp_val = 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSavePanelType(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_PANEL_TYPE_START, 1, &tmp_val);
+}
+
+int SSMReadPanelType()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_PANEL_TYPE_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
+ tmp_val = 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSavePowerOnMusicSwitch(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_POWER_ON_MUSIC_SWITCH_START, 1, &tmp_val);
+}
+
+int SSMReadPowerOnMusicSwitch()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_POWER_ON_MUSIC_SWITCH_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
+ tmp_val = 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSavePowerOnMusicVolume(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_POWER_ON_MUSIC_VOL_START, 1, &tmp_val);
+}
+
+int SSMReadPowerOnMusicVolume()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_POWER_ON_MUSIC_VOL_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
+ tmp_val = 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveSystemSleepTimer(int rw_val)
+{
+ return SSMWriteNTypes(SSM_RW_SYS_SLEEP_TIMER_START, 1, &rw_val);
+}
+
+int SSMReadSystemSleepTimer()
+{
+ int tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_SYS_SLEEP_TIMER_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ if (tmp_val < 0) {
+ tmp_val = 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveInputSourceParentalControl(int source_index,
+ unsigned char ctl_flag)
+{
+ int tmp_val = 0;
+
+ if (source_index < 0 || source_index > 31) {
+ return -1;
+ }
+
+ if (ctl_flag != 0 && ctl_flag != 1) {
+ return -1;
+ }
+
+ if (SSMReadNTypes(SSM_RW_INPUT_SRC_PARENTAL_CTL_START, 4,
+ (unsigned char *) &tmp_val) < 0) {
+ return -1;
+ }
+
+ tmp_val = (tmp_val & (~(1 << source_index))) | (ctl_flag << source_index);
+
+ return SSMWriteNTypes(SSM_RW_INPUT_SRC_PARENTAL_CTL_START, 4,
+ (unsigned char *) &tmp_val);
+}
+
+int SSMReadInputSourceParentalControl(int source_index)
+{
+ int tmp_val = 0;
+
+ if (SSMReadParentalControlSwitch() == 0) {
+ return 0;
+ }
+
+ if (SSMReadNTypes(SSM_RW_INPUT_SRC_PARENTAL_CTL_START, 4,
+ (unsigned char *) &tmp_val) < 0) {
+ return 0;
+ }
+
+ if (tmp_val & (1 << source_index)) {
+ return 1;
+ }
+
+ return 0;
+}
+
+int SSMSaveParentalControlSwitch(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_PARENTAL_CTL_SWITCH_START, 1, &tmp_val);
+}
+
+int SSMReadParentalControlSwitch()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_PARENTAL_CTL_SWITCH_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ if (tmp_val != 0) {
+ tmp_val = 1;
+ }
+
+ return tmp_val;
+}
+
+int SSMGetCustomerDataStart()
+{
+ return SSM_RW_CUSTOMER_DATA_START;
+}
+
+int SSMGetCustomerDataLen()
+{
+ return SSM_RW_CUSTOMER_DATA_LEN;
+}
+
+int SSMGetATVDataStart()
+{
+ return SSM_RW_ATV_START;
+}
+
+int SSMGetATVDataLen()
+{
+ return SSM_RW_ATV_LEN;
+}
+
+int SSMGetVPPDataStart()
+{
+ return SSM_RW_VPP_START;
+}
+
+int SSMGetVPPDataLen()
+{
+ return SSM_RW_VPP_LEN;
+}
+
+int SSMSaveSearchNavigateFlag(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_SEARCH_NAVIGATE_FLAG_START, 1, &tmp_val);
+}
+
+int SSMReadSearchNavigateFlag()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_SEARCH_NAVIGATE_FLAG_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveInputNumLimit(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_INPUT_NUMBER_LIMIT_START, 1, &tmp_val);
+}
+
+int SSMReadInputNumLimit()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_INPUT_NUMBER_LIMIT_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveLocalDimingOnOffFlg(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_LOCAL_DIMING_START, 1, &tmp_val);
+}
+
+int SSMReadLocalDimingOnOffFlg()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_LOCAL_DIMING_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveVDac2DValue(unsigned short rw_val)
+{
+ return SSMWriteNTypes(SSM_RW_VDAC_2D_START, 1, &rw_val);
+}
+
+int SSMReadVDac2DValue()
+{
+ unsigned short tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_VDAC_2D_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveVDac3DValue(unsigned short rw_val)
+{
+ return SSMWriteNTypes(SSM_RW_VDAC_3D_START, 1, &rw_val);
+}
+
+int SSMReadVDac3DValue()
+{
+ unsigned short tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_VDAC_3D_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveChromaStatus(int mode)
+{
+ int fd = -1, ret = -1;
+ char value[20] = "";
+
+ sprintf(value, "%d", mode);
+
+ fd = open("/sys/class/tvafe/tvafe0/cvd_reg8a", O_RDWR);
+
+ if (fd < 0) {
+ LOGE("open /sys/class/tvafe/tvafe0/cvd_reg8a ERROR(%s)!!\n",
+ strerror(errno));
+ return -1;
+ }
+
+ ret = write(fd, value, strlen(value));
+
+ close(fd);
+
+ return ret;
+}
+
+int SSMSaveNonStandardValue(unsigned short rw_val)
+{
+ int i = 0, tmp_ret = 0;
+ unsigned char data[] = { 0, 0 };
+
+ {
+ data[0] = (unsigned char) rw_val;
+ rw_val >>= 8;
+ data[1] = (unsigned char) rw_val;
+ }
+
+ LOGD("%s, save NonStandard_value = %d", "TV", rw_val);
+
+ return SSMWriteNTypes(SSM_RW_NON_STANDARD_START, 2, data);
+}
+
+int SSMReadNonStandardValue(void)
+{
+ int i = 0, value = 0;
+ int data[] = { 0, 0 };
+
+ if (SSMReadNTypes(SSM_RW_NON_STANDARD_START, 2, data) < 0) {
+ LOGE("%s, read NonStandard_value error.", "TV");
+ return 0;
+ }
+
+ {
+ value += data[1];
+ value <<= 8;
+ value += data[0];
+ }
+
+ LOGD("%s, read NonStandard_value = %d.", "TV", value);
+
+ return value;
+}
+
+int SSMSaveAdbSwitchValue(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_ADB_SWITCH_START, 1, &tmp_val);
+}
+
+int SSMReadAdbSwitchValue(void)
+{
+ unsigned char switch_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_ADB_SWITCH_START, 1, &switch_val) < 0) {
+ LOGD("%s, read switch value error", "TV");
+ return -1;
+ }
+
+ LOGD("%s, read switch value = %d", "TV", switch_val);
+
+ return switch_val;
+}
+
+int SSMSaveSerialCMDSwitchValue(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_SERIAL_CMD_SWITCH_START, 1, &tmp_val);
+}
+
+int SSMReadSerialCMDSwitchValue(void)
+{
+ unsigned char switch_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_SERIAL_CMD_SWITCH_START, 1, &switch_val) < 0) {
+ LOGD("%s, read switch value error", "TV");
+ return -1;
+ }
+
+ LOGD("%s, read switch value = %d", "TV", switch_val);
+
+ return switch_val;
+}
+
+int SSMSaveNoiseGateThresholdValue(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_NOISE_GATE_THRESHOLD_START, 1, &tmp_val);
+}
+
+int SSMReadNoiseGateThresholdValue(void)
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_NOISE_GATE_THRESHOLD_START, 1, &tmp_val) < 0) {
+ LOGD("%s, read NoiseGateThreshold error", "TV");
+ return -1;
+ }
+
+ LOGD("%s, read NoiseGateThreshold = %d", "TV", tmp_val);
+
+ return tmp_val;
+}
+
+int SSMSaveGraphyBacklight(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ if (rw_val < 0 || rw_val > 100) {
+ return -1;
+ }
+
+ return SSMWriteNTypes(SSM_RW_UI_GRHPHY_BACKLIGHT_START, 1, &tmp_val);
+}
+
+int SSMReadGraphyBacklight(void)
+{
+ unsigned char value = 0;
+
+ if (SSMReadNTypes(SSM_RW_UI_GRHPHY_BACKLIGHT_START, 1, &value) < 0) {
+ LOGD("%s, read graphybacklight error.\n", "TV");
+ return -1;
+ }
+
+ if (/*value < 0 || */value > 100) {
+ LOGD("%s, range of graphybacklight (%d) is not between 0-100.\n",
+ "TV", value);
+ return -1;
+ }
+
+ return value;
+}
+
+int SSMSaveFastSuspendFlag(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_FASTSUSPEND_FLAG_START, 1, &tmp_val);
+}
+
+int SSMReadFastSuspendFlag(void)
+{
+ unsigned char value = 0;
+
+ if (SSMReadNTypes(SSM_RW_FASTSUSPEND_FLAG_START, 1, &value) < 0) {
+ LOGD("%s, read FastSuspendFlag error.\n", "TV");
+ return -1;
+ }
+
+ return value;
+}
+
+int SSMSaveCABufferSizeValue(unsigned short rw_val)
+{
+ int i = 0, tmp_ret = 0;
+ unsigned char data[] = { 0, 0 };
+
+ {
+ data[0] = (unsigned char) rw_val;
+ rw_val >>= 8;
+ data[1] = (unsigned char) rw_val;
+ }
+
+ return SSMWriteNTypes(SSM_RW_CA_BUFFER_SIZE_START, 2, data);
+}
+
+int SSMReadCABufferSizeValue(void)
+{
+ int i = 0, value = 0;
+ unsigned char data[] = { 0, 0 };
+
+ if (SSMReadNTypes(SSM_RW_CA_BUFFER_SIZE_START, 2, data) < 0) {
+ LOGE("%s, read ca_buffer_size error", "TV");
+ return 0;
+ }
+
+ {
+ value += data[1];
+ value <<= 8;
+ value += data[0];
+ }
+
+ return value;
+}
+
+int SSMSaveStandbyMode(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_STANDBY_MODE_FLAG_START, 1, &tmp_val);
+}
+
+int SSMReadStandbyMode()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_STANDBY_MODE_FLAG_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveHDMIEQMode(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_HDMIEQ_MODE_START, 1, &tmp_val);
+}
+
+int SSMReadHDMIEQMode()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_HDMIEQ_MODE_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveLogoOnOffFlag(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_LOGO_ON_OFF_FLAG_START, 1, &tmp_val);
+}
+
+int SSMReadLogoOnOffFlag()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_LOGO_ON_OFF_FLAG_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveHDMIInternalMode(unsigned int rw_val)
+{
+ int i = 0, tmp_ret = 0;
+ unsigned char data[] = { 0, 0, 0, 0 };
+
+ for (i = 3; i >= 0; i--) {
+ data[i] = (unsigned char) rw_val;
+ rw_val >>= 8;
+ }
+
+ return SSMWriteNTypes(SSM_RW_HDMIINTERNAL_MODE_START, 4, data);
+}
+
+int SSMReadHDMIInternalMode()
+{
+ int i = 0, value = 0;
+ int data[] = { 0, 0, 0, 0 };
+
+ if (SSMReadNTypes(SSM_RW_HDMIINTERNAL_MODE_START, 4, data) < 0) {
+ return 0;
+ }
+
+ for (i = 0; i < 4; i++) {
+ value <<= 8;
+ value += data[i];
+ }
+
+ return value;
+}
+
+int SSMSaveParentalControlPassWord(unsigned char *password, int size)
+{
+ return SSMWriteNTypes(SSM_RW_PARENTAL_CTL_PASSWORD_START, size, password);
+}
+
+int SSMReadParentalControlPassWord(unsigned short *password)
+{
+ if (SSMReadNTypes(SSM_RW_PARENTAL_CTL_PASSWORD_START,
+ SSM_RW_PARENTAL_CTL_PASSWORD_LEN, (unsigned char *) password)
+ < 0) {
+ return -1;
+ }
+ return 0;
+}
+
+int SSMSaveDisable3D(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_DISABLE_3D_START, 1, &tmp_val);
+}
+
+int SSMReadDisable3D()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_DISABLE_3D_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
+ tmp_val = 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveGlobalOgoEnable(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_GLOBAL_OGO_ENABLE_START, 1, &tmp_val);
+}
+
+int SSMReadGlobalOgoEnable()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(SSM_RW_GLOBAL_OGO_ENABLE_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+
+ if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
+ tmp_val = 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMDeviceMarkCheck()
+{
+ int i = 0, failed_count = 0;
+ int mark_offset[3] = { 0, 0, 0 };
+ unsigned char mark_values[3] = { 0, 0, 0 };
+ unsigned char tmp_ch = 0;
+
+ //read temp one byte
+ SSMReadNTypes(0, 1, &tmp_ch);
+
+ mark_offset[0] = SSM_MARK_01_START;
+ mark_offset[1] = SSM_MARK_02_START;
+ mark_offset[2] = SSM_MARK_03_START;
+
+ mark_values[0] = SSM_MARK_01_VALUE;
+ mark_values[1] = SSM_MARK_02_VALUE;
+ mark_values[2] = SSM_MARK_03_VALUE;
+
+ if (SSMReadBurnWriteCharaterChar() != CC_DEF_CHARACTER_CHAR_VAL) {
+ SSMSaveBurnWriteCharaterChar(CC_DEF_CHARACTER_CHAR_VAL);
+ }
+
+ failed_count = 0;
+ for (i = 0; i < 3; i++) {
+ tmp_ch = 0;
+ if (SSMReadNTypes(mark_offset[i], 1, &tmp_ch) < 0) {
+ LOGE("%s, SSMDeviceMarkCheck Read Mark failed!!!\n", "TV");
+ break;
+ }
+
+ if (tmp_ch != mark_values[i]) {
+ failed_count += 1;
+ LOGE(
+ "%s, SSMDeviceMarkCheck Mark[%d]'s offset = %d, Mark[%d]'s Value = %d, read value = %d.\n",
+ "TV", i, mark_offset[i], i, mark_values[i], tmp_ch);
+ }
+ }
+
+ if (failed_count >= 3) {
+ return -1;
+ }
+
+ return 0;
+}
+
+int SSMRestoreDeviceMarkValues()
+{
+ int i;
+ int mark_offset[3] = {
+ (int) SSM_MARK_01_START, //
+ (int) SSM_MARK_02_START, //
+ (int) SSM_MARK_03_START, //
+ };
+
+ unsigned char mark_values[3] = {
+ //
+ (unsigned char) SSM_MARK_01_VALUE, (unsigned char) SSM_MARK_02_VALUE,
+ (unsigned char) SSM_MARK_03_VALUE, //
+ };
+
+ for (i = 0; i < 3; i++) {
+ if (SSMWriteNTypes(mark_offset[i], 1, &(mark_values[i])) < 0) {
+ LOGD("SSMRestoreDeviceMarkValues Write Mark failed.\n");
+ break;
+ }
+ }
+
+ if (i < 3) {
+ return -1;
+ }
+
+ return 0;
+}
+
+static int SSMGetPreCopyingEnableCfg()
+{
+ const char *prop_value;
+
+ prop_value = config_get_str("TV", "ssm.precopying.en", "null");
+ if (strcmp(prop_value, "null") == 0 || strcmp(prop_value, "0") == 0
+ || strcmp(prop_value, "disable") == 0) {
+ return 0;
+ }
+
+ return 1;
+}
+
+static int SSMGetPreCopyingDevicePathCfg(char dev_path[])
+{
+ const char *prop_value;
+
+ if (dev_path == NULL) {
+ return -1;
+ }
+
+ prop_value = config_get_str("TV", "ssm.precopying.devpath", "null");
+ if (strcmp(prop_value, "null") == 0) {
+ return 1;
+ }
+
+ strcpy(dev_path, prop_value);
+
+ return 0;
+}
+
+static unsigned char gTempDataBuf[4096] = { 0 };
+int SSMHandlePreCopying()
+{
+ int device_fd = -1;
+ int i = 0, tmp_size = 0;
+ unsigned char tmp_ch = 0;
+ char tmpPreCopyingDevicePath[256] = { '\0' };
+
+ if (SSMGetPreCopyingEnableCfg() == 0) {
+ LOGD("%s, Pre copying is disable now.\n", "TV");
+ return 0;
+ }
+
+ //read temp one byte
+ SSMReadNTypes(0, 1, &tmp_ch);
+
+ SSMGetPreCopyingDevicePathCfg(tmpPreCopyingDevicePath);
+
+ device_fd = open(tmpPreCopyingDevicePath, O_RDONLY);
+ if (device_fd < 0) {
+ LOGE("%s, Open device file \"%s\" error: %s.\n", "TV",
+ tmpPreCopyingDevicePath, strerror(errno));
+ return -1;
+ }
+
+ tmp_size = lseek(device_fd, 0, SEEK_END);
+ if (tmp_size == 4096) {
+ lseek(device_fd, 0, SEEK_SET);
+ read(device_fd, gTempDataBuf, tmp_size);
+
+ SSMWriteNTypes(0, tmp_size, gTempDataBuf);
+ }
+
+ close(device_fd);
+
+ remove(tmpPreCopyingDevicePath);
+
+ return 0;
+}
+
+int SSMSaveDTVType(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(SSM_RW_DTV_TYPE_START, 1, &tmp_val);
+}
+
+int SSMReadDTVType(int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(SSM_RW_DTV_TYPE_START, 1, &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+#ifndef NELEM
+# define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0])))
+#endif
+
+/************************ End APIs For UI ************************/
+
+// other api
+int GetSSMCfgBufferData(const char *key_str, int *buf_item_count, int radix,
+ unsigned char data_buf[])
+{
+ int cfg_item_count = 0;
+ char *token = NULL;
+ const char *strDelimit = ",";
+ const char *config_value;
+ char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
+
+ config_value = config_get_str("TV", key_str, "null");
+ if (strcasecmp(config_value, "null") == 0) {
+ LOGE("%s, can't get config \"%s\"!!!\n", "TV", key_str);
+ return -1;
+ }
+
+ cfg_item_count = 0;
+
+ memset((void *)data_str, 0, sizeof(data_str));
+ strncpy(data_str, config_value, sizeof(data_str) - 1);
+
+ token = strtok(data_str, strDelimit);
+ while (token != NULL) {
+ if (cfg_item_count < *buf_item_count) {
+ data_buf[cfg_item_count] = strtol(token, NULL, radix);
+
+ token = strtok(NULL, strDelimit);
+ cfg_item_count += 1;
+ } else {
+ LOGE("%s, we get data count more than desire count (%d)!!!\n",
+ "TV", *buf_item_count);
+ return -1;
+ }
+ }
+
+ *buf_item_count = cfg_item_count;
+
+ return 0;
+}
+
+int SSMSaveSourceInput(unsigned char rw_val)
+{
+ return SSMWriteNTypes(TVIN_DATA_POS_SOURCE_INPUT_START, 1, &rw_val);
+}
+
+int SSMReadSourceInput()
+{
+ unsigned char tmp_val = 0;
+
+ if (SSMReadNTypes(TVIN_DATA_POS_SOURCE_INPUT_START, 1, &tmp_val) < 0) {
+ return 0;
+ }
+ if (tmp_val == CBlobDevice::CC_INIT_BYTE_VAL) {
+ tmp_val = 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveCVBSStd(unsigned char rw_val)
+{
+ return SSMWriteNTypes(TVIN_DATA_CVBS_STD_START, 1, &rw_val);
+}
+
+int SSMReadCVBSStd(unsigned char *rw_val)
+{
+ return SSMReadNTypes(TVIN_DATA_CVBS_STD_START, 1, rw_val);
+}
+
+int SSMSave3DMode(unsigned char rw_val)
+{
+ return SSMWriteNTypes(TVIN_DATA_POS_3D_MODE_START, 1, &rw_val);
+}
+
+int SSMRead3DMode(unsigned char *rw_val)
+{
+ return SSMReadNTypes(TVIN_DATA_POS_3D_MODE_START, 1, rw_val);
+}
+
+int SSMSave3DLRSwitch(unsigned char rw_val)
+{
+ return SSMWriteNTypes(TVIN_DATA_POS_3D_LRSWITCH_START, 1, &rw_val);
+}
+
+int SSMRead3DLRSwitch(unsigned char *rw_val)
+{
+ return SSMReadNTypes(TVIN_DATA_POS_3D_LRSWITCH_START, 1, rw_val);
+}
+
+int SSMSave3DDepth(unsigned char rw_val)
+{
+ return SSMWriteNTypes(TVIN_DATA_POS_3D_DEPTH_START, 1, &rw_val);
+}
+
+int SSMRead3DDepth(unsigned char *rw_val)
+{
+ return SSMReadNTypes(TVIN_DATA_POS_3D_DEPTH_START, 1, rw_val);
+}
+
+int SSMSave3DTO2D(unsigned char rw_val)
+{
+ return SSMWriteNTypes(TVIN_DATA_POS_3D_TO2D_START, 1, &rw_val);
+}
+
+int SSMRead3DTO2D(unsigned char *rw_val)
+{
+ return SSMReadNTypes(TVIN_DATA_POS_3D_TO2D_START, 1, rw_val);
+}
+
+int SSMSaveBrightness(int offset, int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_BRIGHTNESS_START + offset, 1, &tmp_val);
+}
+
+int SSMReadBrightness(int offset, int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_BRIGHTNESS_START + offset, 1,
+ &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSaveContrast(int offset, int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_CONTRAST_START + offset, 1, &tmp_val);
+}
+
+int SSMReadContrast(int offset, int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_CONTRAST_START + offset, 1, &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSaveSaturation(int offset, int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_SATURATION_START + offset, 1, &tmp_val);
+}
+
+int SSMReadSaturation(int offset, int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_SATURATION_START + offset, 1,
+ &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSaveHue(int offset, int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_HUE_START + offset, 1, &tmp_val);
+}
+
+int SSMReadHue(int offset, int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_HUE_START + offset, 1, &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSaveSharpness(int offset, int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_SHARPNESS_START + offset, 1, &tmp_val);
+}
+
+int SSMReadSharpness(int offset, int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_SHARPNESS_START + offset, 1, &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSaveSceneMode(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_SCENE_MODE_START, 1, &tmp_val);
+}
+
+int SSMReadSceneMode(int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_SCENE_MODE_START, 1, &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSavePictureMode(int offset, int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_PICTURE_MODE_START + offset, 1, &tmp_val);
+}
+
+int SSMReadPictureMode(int offset, int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_PICTURE_MODE_START + offset, 1,
+ &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSaveColorTemperature(int offset, int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_COLOR_TEMP_START + offset, 1, &tmp_val);
+}
+
+int SSMReadColorTemperature(int offset, int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_COLOR_TEMP_START + offset, 1,
+ &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSaveNoiseReduction(int offset, int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_NOISE_REDUCTION_START + offset, 1,
+ &tmp_val);
+}
+
+int SSMReadNoiseReduction(int offset, int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_NOISE_REDUCTION_START + offset, 1,
+ &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSaveDisplayMode(int offset, int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_DISPLAY_MODE_START + offset, 1, &tmp_val);
+}
+
+int SSMReadDisplayMode(int offset, int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_DISPLAY_MODE_START + offset, 1,
+ &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSaveBackLightVal(int offset, int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_BACKLIGHT_START + offset, 1, &tmp_val);
+}
+
+int SSMReadBackLightVal(int offset, int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_BACKLIGHT_START + offset, 1, &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSaveFBCN360BackLightVal(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_FBC_BACKLIGHT_START , 1, &tmp_val);
+}
+
+int SSMReadFBCN360BackLightVal(int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_FBC_BACKLIGHT_START, 1, &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSaveFBCN360ColorTempVal(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_POS_FBC_COLORTEMP_START , 1, &tmp_val);
+}
+
+int SSMReadFBCN360ColorTempVal(int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_FBC_COLORTEMP_START, 1, &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+
+int SSMSaveFBCELECmodeVal(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+ return SSMWriteNTypes(VPP_DATA_POS_FBC_ELECMODE_START , 1, &tmp_val);
+}
+
+int SSMReadFBCELECmodeVal(int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_POS_FBC_ELECMODE_START, 1, &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+
+int SSMSaveColorDemoMode(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_COLOR_DEMO_MODE_START, 1, &rw_val);
+}
+
+int SSMReadColorDemoMode(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_COLOR_DEMO_MODE_START, 1, rw_val);
+}
+
+int SSMSaveColorBaseMode(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_COLOR_BASE_MODE_START, 1, &rw_val);
+}
+
+int SSMReadColorBaseMode(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_COLOR_BASE_MODE_START, 1, rw_val);
+}
+
+int SSMSaveRGBGainRStart(int offset, unsigned int rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_RGB_GAIN_R_START + offset, 1, &rw_val);
+}
+
+int SSMReadRGBGainRStart(int offset, unsigned int *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_RGB_GAIN_R_START + offset, 1, rw_val);
+}
+
+int SSMSaveRGBGainGStart(int offset, unsigned int rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_RGB_GAIN_G_START + offset, 1, &rw_val);
+}
+
+int SSMReadRGBGainGStart(int offset, unsigned int *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_RGB_GAIN_G_START + offset, 1, rw_val);
+}
+
+int SSMSaveRGBGainBStart(int offset, unsigned int rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_RGB_GAIN_B_START + offset, 1, &rw_val);
+}
+
+int SSMReadRGBGainBStart(int offset, unsigned int *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_RGB_GAIN_B_START + offset, 1, rw_val);
+}
+
+int SSMSaveRGBPostOffsetRStart(int offset, int rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_RGB_POST_OFFSET_R_START + offset, 1,
+ &rw_val);
+}
+
+int SSMReadRGBPostOffsetRStart(int offset, int *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_RGB_POST_OFFSET_R_START + offset, 1,
+ rw_val);
+}
+
+int SSMSaveRGBPostOffsetGStart(int offset, int rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_RGB_POST_OFFSET_G_START + offset, 1,
+ &rw_val);
+}
+
+int SSMReadRGBPostOffsetGStart(int offset, int *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_RGB_POST_OFFSET_G_START + offset, 1,
+ rw_val);
+}
+
+int SSMSaveRGBPostOffsetBStart(int offset, int rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_RGB_POST_OFFSET_B_START + offset, 1,
+ &rw_val);
+}
+
+int SSMReadRGBPostOffsetBStart(int offset, int *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_RGB_POST_OFFSET_B_START + offset, 1,
+ rw_val);
+}
+
+int SSMSaveRGBValueStart(int offset, int8_t rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_RGB_START + offset, 1, &rw_val);
+}
+
+int SSMReadRGBValueStart(int offset, int8_t *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_RGB_START + offset, 1, &rw_val);
+}
+
+int SSMSaveDBCStart(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_DBC_START, 1, &rw_val);
+}
+
+int SSMReadDBCStart(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_DBC_START, 1, rw_val);
+}
+
+int SSMSaveColorSpaceStart(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_COLOR_SPACE_START, 1, &rw_val);
+}
+
+int SSMReadColorSpaceStart(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_COLOR_SPACE_START, 1, rw_val);
+}
+
+int SSMSaveDnlpStart(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_DNLP_START, 1, &rw_val);
+}
+
+int SSMReadDnlpStart(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_DNLP_START, 1, rw_val);
+}
+
+int SSMSavePanoramaStart(int offset, unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_PANORAMA_START + offset, 1, &rw_val);
+}
+
+int SSMReadPanoramaStart(int offset, unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_PANORAMA_START + offset, 1, rw_val);
+}
+
+int SSMSaveTestPattern(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_TEST_PATTERN_START, 1, &rw_val);
+}
+
+int SSMReadTestPattern(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_TEST_PATTERN_START, 1, rw_val);
+}
+
+int SSMSaveAPL(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_APL_START, VPP_DATA_APL_SIZE, &rw_val);
+}
+
+int SSMReadAPL(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_APL_START, VPP_DATA_APL_SIZE, rw_val);
+}
+
+int SSMSaveAPL2(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_APL2_START, VPP_DATA_APL2_SIZE, &rw_val);
+}
+
+int SSMReadAPL2(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_APL2_START, VPP_DATA_APL2_SIZE, rw_val);
+}
+
+int SSMSaveBD(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_BD_START, VPP_DATA_BD_SIZE, &rw_val);
+}
+
+int SSMReadBD(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_BD_START, VPP_DATA_BD_SIZE, rw_val);
+}
+
+int SSMSaveBP(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_BP_START, VPP_DATA_BP_SIZE, &rw_val);
+}
+
+int SSMReadBP(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_BP_START, VPP_DATA_BP_SIZE, rw_val);
+}
+
+int SSMSaveDDRSSC(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_DDR_SSC_START, 1, &rw_val);
+}
+
+int SSMReadDDRSSC(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_DDR_SSC_START, 1, rw_val);
+}
+
+int SSMSaveLVDSSSC(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_LVDS_SSC_START, 1, &rw_val);
+}
+
+int SSMReadLVDSSSC(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_LVDS_SSC_START, 1, rw_val);
+}
+
+int SSMSaveDreamPanel(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_DREAM_PANEL_START, 1, &rw_val);
+}
+
+int SSMReadDreamPanel(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_DREAM_PANEL_START, 1, rw_val);
+}
+
+int SSMSaveUserNatureLightSwitch(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_USER_NATURE_SWITCH_START, 1, &rw_val);
+}
+
+int SSMReadUserNatureLightSwitch(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_USER_NATURE_SWITCH_START, 1, rw_val);
+}
+
+int SSMSaveDBCBacklightEnable(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_DBC_BACKLIGHT_START, 1, &rw_val);
+}
+
+int SSMReadDBCBacklightEnable(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_DBC_BACKLIGHT_START, 1, rw_val);
+}
+
+int SSMSaveDBCBacklightStd(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_DBC_STANDARD_START, 1, &rw_val);
+}
+
+int SSMReadDBCBacklightStd(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_DBC_STANDARD_START, 1, rw_val);
+}
+
+int SSMSaveDBCEnable(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_DBC_ENABLE_START, 1, &rw_val);
+}
+
+int SSMReadDBCEnable(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_DBC_ENABLE_START, 1, rw_val);
+}
+
+int SSMSaveGammaValue(int rw_val)
+{
+ unsigned char tmp_val = rw_val;
+
+ return SSMWriteNTypes(VPP_DATA_GAMMA_VALUE_START, 1, &tmp_val);
+}
+
+int SSMReadGammaValue(int *rw_val)
+{
+ int tmp_ret = 0;
+ unsigned char tmp_val = 0;
+
+ tmp_ret = SSMReadNTypes(VPP_DATA_GAMMA_VALUE_START, 1, &tmp_val);
+ *rw_val = tmp_val;
+
+ return tmp_ret;
+}
+
+int SSMSaveBackLightReverse(unsigned char rw_val)
+{
+ return SSMWriteNTypes(VPP_DATA_POS_BACKLIGHT_REVERSE_START, 1, &rw_val);
+}
+
+int SSMReadBackLightReverse(unsigned char *rw_val)
+{
+ return SSMReadNTypes(VPP_DATA_POS_BACKLIGHT_REVERSE_START, 1, rw_val);
+}
+
+int SSMSaveAudioMasterVolume(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_MASTR_VOLUME_VAL, 1, &rw_val);
+}
+
+int SSMReadAudioMasterVolume(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_MASTR_VOLUME_VAL, 1, rw_val);
+}
+
+int SSMSaveAudioBalanceVal(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_BALANCE_VAL, 1, &rw_val);
+}
+
+int SSMReadAudioBalanceVal(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_BALANCE_VAL, 1, rw_val);
+}
+
+int SSMSaveAudioSupperBassVolume(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_SUPPERBASS_VOLUME_VAL, 1, &rw_val);
+}
+
+int SSMReadAudioSupperBassVolume(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_SUPPERBASS_VOLUME_VAL, 1, rw_val);
+}
+
+int SSMSaveAudioSupperBassSwitch(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_SUPPERBASS_SWITCH, 1, &rw_val);
+}
+
+int SSMReadAudioSupperBassSwitch(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_SUPPERBASS_SWITCH, 1, rw_val);
+}
+
+int SSMSaveAudioSRSSurroundSwitch(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_SRS_SURROUND_SWITCH, 1, &rw_val);
+}
+
+int SSMReadAudioSRSSurroundSwitch(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_SRS_SURROUND_SWITCH, 1, rw_val);
+}
+
+int SSMSaveAudioSRSDialogClaritySwitch(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_SRS_DIALOG_CLARITY_SWITCH, 1, &rw_val);
+}
+
+int SSMReadAudioSRSDialogClaritySwitch(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_SRS_DIALOG_CLARITY_SWITCH, 1, rw_val);
+}
+
+int SSMSaveAudioSRSTruBassSwitch(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_SRS_TRUEBASS_SWITCH, 1, &rw_val);
+}
+
+int SSMReadAudioSRSTruBassSwitch(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_SRS_TRUEBASS_SWITCH, 1, rw_val);
+}
+
+int SSMSaveAudioBassVolume(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_BASS_VOLUME_VAL, 1, &rw_val);
+}
+
+int SSMReadAudioBassVolume(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_BASS_VOLUME_VAL, 1, rw_val);
+}
+
+int SSMSaveAudioTrebleVolume(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_TREBLE_VOLUME_VAL, 1, &rw_val);
+}
+
+int SSMReadAudioTrebleVolume(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_TREBLE_VOLUME_VAL, 1, rw_val);
+}
+
+int SSMSaveAudioSoundModeVal(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_SOUND_MODE_VAL, 1, &rw_val);
+}
+
+int SSMReadAudioSoundModeVal(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_SOUND_MODE_VAL, 1, rw_val);
+}
+
+int SSMSaveAudioWallEffectSwitch(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_WALL_EFFCT_SWITCH, 1, &rw_val);
+}
+
+int SSMReadAudioWallEffectSwitch(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_WALL_EFFCT_SWITCH, 1, rw_val);
+}
+
+int SSMSaveAudioSPDIFSwitchVal(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_SPDIF_SWITCH, 1, &rw_val);
+}
+
+int SSMReadAudioSPDIFSwitchVal(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_SPDIF_SWITCH, 1, rw_val);
+}
+
+int SSMSaveAudioSPDIFModeVal(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_SPDIF_MODE_VAL, 1, &rw_val);
+}
+
+int SSMReadAudioSPDIFModeVal(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_SPDIF_MODE_VAL, 1, rw_val);
+}
+
+int SSMSaveAudioEQModeVal(int8_t rw_val)
+{
+ return SSMWriteNTypes(SSM_AUD_EQ_MODE_VAL, 1, &rw_val);
+}
+
+int SSMReadAudioEQModeVal(int8_t *rw_val)
+{
+ return SSMReadNTypes(SSM_AUD_EQ_MODE_VAL, 1, rw_val);
+}
+
+int SSMSaveAudioEQGain(int offset, int size, int8_t tmp_buf[])
+{
+ return SSMWriteNTypes(SSM_AUD_EQ_GAIN + offset, size, tmp_buf);
+}
+
+int SSMReadAudioEQGain(int offset, int size, int8_t tmp_buf[])
+{
+ return SSMReadNTypes(SSM_AUD_EQ_GAIN, size, tmp_buf);
+}
+
+int SSMSaveBlackoutEnable(int8_t enable)
+{
+ return SSMWriteNTypes(SSM_RW_BLACKOUT_ENABLE_START, 1, &enable);
+}
+
+int SSMReadBlackoutEnable(int8_t *enable)
+{
+ return SSMReadNTypes(SSM_RW_BLACKOUT_ENABLE_START, 1, enable);
+}
diff --git a/tvapi/libtv/tvsetting/CTvSettingCfg.h b/tvapi/libtv/tvsetting/CTvSettingCfg.h
index e64271e..3f1c0ea 100644
--- a/tvapi/libtv/tvsetting/CTvSettingCfg.h
+++ b/tvapi/libtv/tvsetting/CTvSettingCfg.h
@@ -1,371 +1,371 @@
-#ifndef __TV_SETTING_CFG__H__
-#define __TV_SETTING_CFG__H__
-#include "../tvin/CTvin.h"
-
-//Sections
-static const int SSM_RES0_START = 0;
-static const int SSM_RES0_LEN = 32;
-static const int SSM_CR_START = SSM_RES0_START + SSM_RES0_LEN;
-static const int SSM_CR_LEN = 1536;
-static const int SSM_RW_START = SSM_CR_START + SSM_CR_LEN;
-static const int SSM_RW_LEN = 2048;
-static const int SSM_RES1_START = SSM_RW_START + SSM_RW_LEN;
-static const int SSM_RES1_LEN = 64;
-
-// reserved0 section
-static const int SSM_RSV_W_CHARACTER_CHAR_START = SSM_RES0_START + 0x0A;
-static const int SSM_RSV_W_CHARACTER_CHAR_LEN = 1;
-
-//Read & write section
-static const int SSM_MARK_01_START = SSM_RW_START + 0;
-static const int SSM_MARK_01_LEN = 1;
-
-static const int SSM_RW_AUDIO_START = SSM_MARK_01_START + SSM_MARK_01_LEN;
-static const int SSM_RW_AUDIO_LEN = 192;
-
-static const int SSM_RW_VPP_START = SSM_RW_AUDIO_START + SSM_RW_AUDIO_LEN;
-static const int SSM_RW_VPP_LEN = 230;
-
-static const int SSM_RW_VDIN_START = SSM_RW_VPP_START + SSM_RW_VPP_LEN;
-static const int SSM_RW_VDIN_LEN = 826;
-
-static const int SSM_RW_ATV_START = SSM_RW_VDIN_START + SSM_RW_VDIN_LEN;
-static const int SSM_RW_ATV_LEN = 0;
-
-static const int SSM_RW_MISC_START = SSM_RW_ATV_START + SSM_RW_ATV_LEN;
-static const int SSM_RW_MISC_LEN = 86;
-
-static const int SSM_RW_CUSTOMER_DATA_START = SSM_RW_MISC_START + SSM_RW_MISC_LEN;
-static const int SSM_RW_CUSTOMER_DATA_LEN = 100;
-
-static const int SSM_MARK_02_START = SSM_RW_CUSTOMER_DATA_START + SSM_RW_CUSTOMER_DATA_LEN;
-static const int SSM_MARK_02_LEN = 1;
-
-static const int SSM_RW_TEST_START = SSM_MARK_02_START + SSM_MARK_02_LEN;
-static const int SSM_RW_TEST_LEN = 3;
-
-static const int SSM_MARK_03_START = SSM_RW_TEST_START + SSM_RW_TEST_LEN;
-static const int SSM_MARK_03_LEN = 1;
-
-//Mark r/w values
-static const int SSM_MARK_01_VALUE = 0xDD;
-static const int SSM_MARK_02_VALUE = 0x88;
-static const int SSM_MARK_03_VALUE = 0xCC;
-
-
-//Read & write section(1824 Bytes)
-static const int SSM_RW_AUDIO_END = (SSM_RW_AUDIO_START + SSM_RW_AUDIO_LEN);
-static const int SSM_RW_VPP_END = (SSM_RW_VPP_START + SSM_RW_VPP_LEN);
-static const int SSM_RW_VDIN_END = (SSM_RW_VDIN_START + SSM_RW_VDIN_LEN);
-static const int SSM_RW_ATV_END = (SSM_RW_ATV_START + SSM_RW_ATV_LEN);
-static const int SSM_RW_MISC_END = (SSM_RW_MISC_START + SSM_RW_MISC_LEN);
-
-static const int SSM_CR_END = (SSM_CR_START + SSM_CR_LEN);
-
-//Read & write misc section
-static const int SSM_RW_FBMF_START = (SSM_RW_MISC_START); //Factory Burn Mode Flag
-static const int SSM_RW_FBMF_LEN = (1);
-static const int SSM_RW_DEF_HDCP_START = (SSM_RW_FBMF_START + SSM_RW_FBMF_LEN); //using default hdcp key flag
-static const int SSM_RW_DEF_HDCP_LEN = (1);
-static const int SSM_RW_POWER_CHANNEL_START = (SSM_RW_DEF_HDCP_START + SSM_RW_DEF_HDCP_LEN); //Power on/off channel type
-static const int SSM_RW_POWER_CHANNEL_LEN = (1);
-static const int SSM_RW_LAST_SOURCE_INPUT_START = (SSM_RW_POWER_CHANNEL_START + SSM_RW_POWER_CHANNEL_LEN); //Last tv select input source type
-static const int SSM_RW_LAST_SOURCE_INPUT_LEN = (1);
-static const int SSM_RW_SYS_LANGUAGE_START = (SSM_RW_LAST_SOURCE_INPUT_START + SSM_RW_LAST_SOURCE_INPUT_LEN); //system language
-static const int SSM_RW_SYS_LANGUAGE_LEN = (1);
-static const int SSM_RW_AGING_MODE_START = (SSM_RW_SYS_LANGUAGE_START + SSM_RW_SYS_LANGUAGE_LEN); //aging mode
-static const int SSM_RW_AGING_MODE_LEN = (1);
-static const int SSM_RW_PANEL_TYPE_START = (SSM_RW_AGING_MODE_START + SSM_RW_AGING_MODE_LEN); //panel type
-static const int SSM_RW_PANEL_TYPE_LEN = (1);
-static const int SSM_RW_POWER_ON_MUSIC_SWITCH_START = (SSM_RW_PANEL_TYPE_START + SSM_RW_PANEL_TYPE_LEN); //power on music switch
-static const int SSM_RW_POWER_ON_MUSIC_SWITCH_LEN = (1);
-static const int SSM_RW_POWER_ON_MUSIC_VOL_START = (SSM_RW_POWER_ON_MUSIC_SWITCH_START + SSM_RW_POWER_ON_MUSIC_SWITCH_LEN); //power on music volume
-static const int SSM_RW_POWER_ON_MUSIC_VOL_LEN = (1);
-static const int SSM_RW_SYS_SLEEP_TIMER_START = (SSM_RW_POWER_ON_MUSIC_VOL_START + SSM_RW_POWER_ON_MUSIC_VOL_LEN); //system sleep timer
-static const int SSM_RW_SYS_SLEEP_TIMER_LEN = (4);
-static const int SSM_RW_INPUT_SRC_PARENTAL_CTL_START = (SSM_RW_SYS_SLEEP_TIMER_START + SSM_RW_SYS_SLEEP_TIMER_LEN); //tv input source parental control
-static const int SSM_RW_INPUT_SRC_PARENTAL_CTL_LEN = (4);
-static const int SSM_RW_PARENTAL_CTL_SWITCH_START = (SSM_RW_INPUT_SRC_PARENTAL_CTL_START + SSM_RW_INPUT_SRC_PARENTAL_CTL_LEN); //parental control switch
-static const int SSM_RW_PARENTAL_CTL_SWITCH_LEN = (1);
-static const int SSM_RW_PARENTAL_CTL_PASSWORD_START = (SSM_RW_PARENTAL_CTL_SWITCH_START + SSM_RW_PARENTAL_CTL_SWITCH_LEN); //parental control pass word
-static const int SSM_RW_PARENTAL_CTL_PASSWORD_LEN = (16);
-static const int SSM_RW_SEARCH_NAVIGATE_FLAG_START = (SSM_RW_PARENTAL_CTL_PASSWORD_START + SSM_RW_PARENTAL_CTL_PASSWORD_LEN);
-static const int SSM_RW_SEARCH_NAVIGATE_FLAG_LEN = (1);
-static const int SSM_RW_INPUT_NUMBER_LIMIT_START = (SSM_RW_SEARCH_NAVIGATE_FLAG_START + SSM_RW_SEARCH_NAVIGATE_FLAG_LEN);
-static const int SSM_RW_INPUT_NUMBER_LIMIT_LEN = (1);
-static const int SSM_RW_SERIAL_ONOFF_FLAG_START = (SSM_RW_INPUT_NUMBER_LIMIT_START + SSM_RW_INPUT_NUMBER_LIMIT_LEN);
-static const int SSM_RW_SERIAL_ONOFF_FLAG_LEN = (1);
-static const int SSM_RW_STANDBY_MODE_FLAG_START = (SSM_RW_SERIAL_ONOFF_FLAG_START + SSM_RW_SERIAL_ONOFF_FLAG_LEN);
-static const int SSM_RW_STANDBY_MODE_FLAG_LEN = (1);
-static const int SSM_RW_HDMIEQ_MODE_START = (SSM_RW_STANDBY_MODE_FLAG_START + SSM_RW_STANDBY_MODE_FLAG_LEN);
-static const int SSM_RW_HDMIEQ_MODE_LEN = (1);
-static const int SSM_RW_LOGO_ON_OFF_FLAG_START = (SSM_RW_HDMIEQ_MODE_START + SSM_RW_HDMIEQ_MODE_LEN);
-static const int SSM_RW_LOGO_ON_OFF_FLAG_LEN = (1);
-static const int SSM_RW_HDMIINTERNAL_MODE_START = (SSM_RW_LOGO_ON_OFF_FLAG_START + SSM_RW_LOGO_ON_OFF_FLAG_LEN);
-static const int SSM_RW_HDMIINTERNAL_MODE_LEN = (4);
-static const int SSM_RW_DISABLE_3D_START = (SSM_RW_HDMIINTERNAL_MODE_START + SSM_RW_HDMIINTERNAL_MODE_LEN);
-static const int SSM_RW_DISABLE_3D_LEN = (1);
-static const int SSM_RW_GLOBAL_OGO_ENABLE_START = (SSM_RW_DISABLE_3D_START + SSM_RW_DISABLE_3D_LEN);
-static const int SSM_RW_GLOBAL_OGO_ENABLE_LEN = (1);
-static const int SSM_RW_LOCAL_DIMING_START = (SSM_RW_GLOBAL_OGO_ENABLE_START + SSM_RW_GLOBAL_OGO_ENABLE_LEN);
-static const int SSM_RW_LOCAL_DIMING_LEN = (1);
-static const int SSM_RW_VDAC_2D_START = (SSM_RW_LOCAL_DIMING_START + SSM_RW_LOCAL_DIMING_LEN);
-static const int SSM_RW_VDAC_2D_LEN = (2);
-static const int SSM_RW_VDAC_3D_START = (SSM_RW_VDAC_2D_START + SSM_RW_VDAC_2D_LEN);
-static const int SSM_RW_VDAC_3D_LEN = (2);
-
-static const int SSM_RW_NON_STANDARD_START = (SSM_RW_VDAC_3D_START + SSM_RW_VDAC_3D_LEN);
-static const int SSM_RW_NON_STANDARD_LEN = (2);
-static const int SSM_RW_ADB_SWITCH_START = (SSM_RW_NON_STANDARD_START + SSM_RW_NON_STANDARD_LEN);
-static const int SSM_RW_ADB_SWITCH_LEN = (1);
-static const int SSM_RW_SERIAL_CMD_SWITCH_START = (SSM_RW_ADB_SWITCH_START + SSM_RW_ADB_SWITCH_LEN);
-static const int SSM_RW_SERIAL_CMD_SWITCH_LEN = (1);
-
-static const int SSM_RW_CA_BUFFER_SIZE_START = (SSM_RW_SERIAL_CMD_SWITCH_START + SSM_RW_SERIAL_CMD_SWITCH_LEN);
-static const int SSM_RW_CA_BUFFER_SIZE_LEN = (2);
-
-static const int SSM_RW_NOISE_GATE_THRESHOLD_START = (SSM_RW_CA_BUFFER_SIZE_START + SSM_RW_CA_BUFFER_SIZE_LEN);
-static const int SSM_RW_NOISE_GATE_THRESHOLD_LEN = (1);
-
-static const int SSM_RW_DTV_TYPE_START = (SSM_RW_NOISE_GATE_THRESHOLD_START + SSM_RW_NOISE_GATE_THRESHOLD_LEN);
-static const int SSM_RW_DTV_TYPE_LEN = (1);
-
-static const int SSM_RW_UI_GRHPHY_BACKLIGHT_START = (SSM_RW_DTV_TYPE_START + SSM_RW_DTV_TYPE_LEN);
-static const int SSM_RW_UI_GRHPHY_BACKLIGHT_LEN = (1);
-
-static const int SSM_RW_FASTSUSPEND_FLAG_START = (SSM_RW_UI_GRHPHY_BACKLIGHT_START + SSM_RW_UI_GRHPHY_BACKLIGHT_LEN);
-static const int SSM_RW_FASTSUSPEND_FLAG_LEN = (1);
-
-static const int SSM_RW_BLACKOUT_ENABLE_START = (SSM_RW_FASTSUSPEND_FLAG_START + SSM_RW_FASTSUSPEND_FLAG_LEN);
-static const int SSM_RW_BLACKOUT_ENABLE__LEN = (1);
-
-//Audio data section
-static const int SSM_AUD_MASTR_VOLUME_VAL = (SSM_RW_AUDIO_START + 0);
-static const int SSM_AUD_BALANCE_VAL = (SSM_AUD_MASTR_VOLUME_VAL + 1);
-static const int SSM_AUD_SUPPERBASS_VOLUME_VAL = (SSM_AUD_BALANCE_VAL + 1);
-static const int SSM_AUD_SUPPERBASS_SWITCH = (SSM_AUD_SUPPERBASS_VOLUME_VAL + 1);
-static const int SSM_AUD_SRS_SURROUND_SWITCH = (SSM_AUD_SUPPERBASS_SWITCH + 1);
-static const int SSM_AUD_SRS_DIALOG_CLARITY_SWITCH = (SSM_AUD_SRS_SURROUND_SWITCH + 1);
-static const int SSM_AUD_SRS_TRUEBASS_SWITCH = (SSM_AUD_SRS_DIALOG_CLARITY_SWITCH + 1);
-static const int SSM_AUD_BASS_VOLUME_VAL = (SSM_AUD_SRS_TRUEBASS_SWITCH + 1);
-static const int SSM_AUD_TREBLE_VOLUME_VAL = (SSM_AUD_BASS_VOLUME_VAL + 1);
-static const int SSM_AUD_SOUND_MODE_VAL = (SSM_AUD_TREBLE_VOLUME_VAL + 1);
-static const int SSM_AUD_WALL_EFFCT_SWITCH = (SSM_AUD_SOUND_MODE_VAL + 1);
-static const int SSM_AUD_SPDIF_SWITCH = (SSM_AUD_WALL_EFFCT_SWITCH + 1);
-static const int SSM_AUD_SPDIF_MODE_VAL = (SSM_AUD_SPDIF_SWITCH + 1);
-static const int SSM_AUD_EQ_MODE_VAL = (SSM_RW_AUDIO_START + 32);
-static const int SSM_AUD_EQ_GAIN = (SSM_AUD_EQ_MODE_VAL + 1);
-static const int SSM_AUD_NOLINE_POINTS = (SSM_AUD_EQ_GAIN + 16);
-
-//VPP Data (115 bytes)
-//ColorDemoMode 1byte
-static const int VPP_DATA_POS_COLOR_DEMO_MODE_START = (SSM_RW_VPP_START + 0);
-static const int VPP_DATA_POS_COLOR_DEMO_MODE_SIZE = (1);
-static const int VPP_DATA_POS_COLOR_DEMO_MODE_END = (VPP_DATA_POS_COLOR_DEMO_MODE_START + VPP_DATA_POS_COLOR_DEMO_MODE_SIZE);
-//ColorBaseMode 1byte
-static const int VPP_DATA_POS_COLOR_BASE_MODE_START = (VPP_DATA_POS_COLOR_DEMO_MODE_END + 0);
-static const int VPP_DATA_POS_COLOR_BASE_MODE_SIZE = (1);
-static const int VPP_DATA_POS_COLOR_BASE_MODE_END = (VPP_DATA_POS_COLOR_BASE_MODE_START + VPP_DATA_POS_COLOR_BASE_MODE_SIZE);
-//TestPattern 1byte
-static const int VPP_DATA_POS_TEST_PATTERN_START = (VPP_DATA_POS_COLOR_BASE_MODE_END + 0);
-static const int VPP_DATA_POS_TEST_PATTERN_SIZE = (1);
-static const int VPP_DATA_POS_TEST_PATTERN_END = (VPP_DATA_POS_TEST_PATTERN_START + VPP_DATA_POS_TEST_PATTERN_SIZE);
-//DDR SSC 1byte
-static const int VPP_DATA_POS_DDR_SSC_START = (VPP_DATA_POS_TEST_PATTERN_END + 0);
-static const int VPP_DATA_POS_DDR_SSC_SIZE = (1);
-static const int VPP_DATA_POS_DDR_SSC_END = (VPP_DATA_POS_DDR_SSC_START + VPP_DATA_POS_DDR_SSC_SIZE);
-//LVDS SSC 1byte
-static const int VPP_DATA_POS_LVDS_SSC_START = (VPP_DATA_POS_DDR_SSC_END + 0);
-static const int VPP_DATA_POS_LVDS_SSC_SIZE = (1);
-static const int VPP_DATA_POS_LVDS_SSC_END = (VPP_DATA_POS_LVDS_SSC_START + VPP_DATA_POS_LVDS_SSC_SIZE);
-//dream panel 1byte
-static const int VPP_DATA_POS_DREAM_PANEL_START = (VPP_DATA_POS_LVDS_SSC_END + 0);
-static const int VPP_DATA_POS_DREAM_PANEL_SIZE = (1);
-static const int VPP_DATA_POS_DREAM_PANEL_END = (VPP_DATA_POS_DREAM_PANEL_START + VPP_DATA_POS_DREAM_PANEL_SIZE);
-//Backlight reverse 1byte
-static const int VPP_DATA_POS_BACKLIGHT_REVERSE_START = (VPP_DATA_POS_DREAM_PANEL_END + 0);
-static const int VPP_DATA_POS_BACKLIGHT_REVERSE_SIZE = (1);
-static const int VPP_DATA_POS_BACKLIGHT_REVERSE_END = (VPP_DATA_POS_BACKLIGHT_REVERSE_START + VPP_DATA_POS_BACKLIGHT_REVERSE_SIZE);
-//Brightness 1*7=7byte
-static const int VPP_DATA_POS_BRIGHTNESS_START = (VPP_DATA_POS_BACKLIGHT_REVERSE_END + 0);
-static const int VPP_DATA_POS_BRIGHTNESS_SIZE = (1 * (SOURCE_TYPE_MAX));
-static const int VPP_DATA_POS_BRIGHTNESS_END = (VPP_DATA_POS_BRIGHTNESS_START + VPP_DATA_POS_BRIGHTNESS_SIZE);
-//Contrast 1*7=7byte
-static const int VPP_DATA_POS_CONTRAST_START = (VPP_DATA_POS_BRIGHTNESS_END + 0);
-static const int VPP_DATA_POS_CONTRAST_SIZE = (1 * (SOURCE_TYPE_MAX));
-static const int VPP_DATA_POS_CONTRAST_END = (VPP_DATA_POS_CONTRAST_START + VPP_DATA_POS_CONTRAST_SIZE);
-//Saturation 1*7=7byte
-static const int VPP_DATA_POS_SATURATION_START = (VPP_DATA_POS_CONTRAST_END + 0);
-static const int VPP_DATA_POS_SATURATION_SIZE = (1 * (SOURCE_TYPE_MAX));
-static const int VPP_DATA_POS_SATURATION_END = (VPP_DATA_POS_SATURATION_START + VPP_DATA_POS_SATURATION_SIZE);
-//Hue 1*7=7byte
-static const int VPP_DATA_POS_HUE_START = (VPP_DATA_POS_SATURATION_END + 0);
-static const int VPP_DATA_POS_HUE_SIZE = (1 * (SOURCE_TYPE_MAX));
-static const int VPP_DATA_POS_HUE_END = (VPP_DATA_POS_HUE_START + VPP_DATA_POS_HUE_SIZE);
-//Sharpness 1*7=7byte
-static const int VPP_DATA_POS_SHARPNESS_START = (VPP_DATA_POS_HUE_END + 0);
-static const int VPP_DATA_POS_SHARPNESS_SIZE = (1 * (SOURCE_TYPE_MAX));
-static const int VPP_DATA_POS_SHARPNESS_END = (VPP_DATA_POS_SHARPNESS_START + VPP_DATA_POS_SHARPNESS_SIZE);
-//ColorTemperature 1*7=7byte
-static const int VPP_DATA_POS_COLOR_TEMP_START = (VPP_DATA_POS_SHARPNESS_END + 0);
-static const int VPP_DATA_POS_COLOR_TEMP_SIZE = (1 * (SOURCE_TYPE_MAX));
-static const int VPP_DATA_POS_COLOR_TEMP_END = (VPP_DATA_POS_COLOR_TEMP_START + VPP_DATA_POS_COLOR_TEMP_SIZE);
-//NoiseReduction 1*7=7byte
-static const int VPP_DATA_POS_NOISE_REDUCTION_START = (VPP_DATA_POS_COLOR_TEMP_END + 0);
-static const int VPP_DATA_POS_NOISE_REDUCTION_SIZE = (1 * (SOURCE_TYPE_MAX));
-static const int VPP_DATA_POS_NOISE_REDUCTION_END = (VPP_DATA_POS_NOISE_REDUCTION_START + VPP_DATA_POS_NOISE_REDUCTION_SIZE);
-//SceneMode 1byte
-static const int VPP_DATA_POS_SCENE_MODE_START = (VPP_DATA_POS_NOISE_REDUCTION_END + 0);
-static const int VPP_DATA_POS_SCENE_MODE_SIZE = (1);
-static const int VPP_DATA_POS_SCENE_MODE_END = (VPP_DATA_POS_SCENE_MODE_START + VPP_DATA_POS_SCENE_MODE_SIZE);
-//PictureMode 1*7=7byte
-static const int VPP_DATA_POS_PICTURE_MODE_START = (VPP_DATA_POS_SCENE_MODE_END + 0);
-static const int VPP_DATA_POS_PICTURE_MODE_SIZE = (1 * (SOURCE_TYPE_MAX));
-static const int VPP_DATA_POS_PICTURE_MODE_END = (VPP_DATA_POS_PICTURE_MODE_START + VPP_DATA_POS_PICTURE_MODE_SIZE);
-//DisplayMode 1*7=7byte
-static const int VPP_DATA_POS_DISPLAY_MODE_START = (VPP_DATA_POS_PICTURE_MODE_END + 0);
-static const int VPP_DATA_POS_DISPLAY_MODE_SIZE = (1 * (SOURCE_TYPE_MAX));
-static const int VPP_DATA_POS_DISPLAY_MODE_END = (VPP_DATA_POS_DISPLAY_MODE_START + VPP_DATA_POS_DISPLAY_MODE_SIZE);
-//Backlight 1*7=7byte
-static const int VPP_DATA_POS_BACKLIGHT_START = (VPP_DATA_POS_DISPLAY_MODE_END + 0);
-static const int VPP_DATA_POS_BACKLIGHT_SIZE = (1 * (SOURCE_TYPE_MAX));
-static const int VPP_DATA_POS_BACKLIGHT_END = (VPP_DATA_POS_BACKLIGHT_START + VPP_DATA_POS_BACKLIGHT_SIZE);
-//RGB_Gain_R 4byte
-static const int VPP_DATA_POS_RGB_GAIN_R_START = (VPP_DATA_POS_BACKLIGHT_END + 0);
-static const int VPP_DATA_POS_RGB_GAIN_R_SIZE = (sizeof(int));
-static const int VPP_DATA_POS_RGB_GAIN_R_END = (VPP_DATA_POS_RGB_GAIN_R_START + VPP_DATA_POS_RGB_GAIN_R_SIZE);
-//RGB_Gain_G 4byte
-static const int VPP_DATA_POS_RGB_GAIN_G_START = (VPP_DATA_POS_RGB_GAIN_R_END + 0);
-static const int VPP_DATA_POS_RGB_GAIN_G_SIZE = (sizeof(int));
-static const int VPP_DATA_POS_RGB_GAIN_G_END = (VPP_DATA_POS_RGB_GAIN_G_START + VPP_DATA_POS_RGB_GAIN_G_SIZE);
-//RGB_Gain_B 4byte
-static const int VPP_DATA_POS_RGB_GAIN_B_START = (VPP_DATA_POS_RGB_GAIN_G_END + 0);
-static const int VPP_DATA_POS_RGB_GAIN_B_SIZE = (sizeof(int));
-static const int VPP_DATA_POS_RGB_GAIN_B_END = (VPP_DATA_POS_RGB_GAIN_B_START + VPP_DATA_POS_RGB_GAIN_B_SIZE);
-//RGB_Post_Offset_R 4byte
-static const int VPP_DATA_POS_RGB_POST_OFFSET_R_START = (VPP_DATA_POS_RGB_GAIN_B_END + 0);
-static const int VPP_DATA_POS_RGB_POST_OFFSET_R_SIZE = (sizeof(int));
-static const int VPP_DATA_POS_RGB_POST_OFFSET_R_END = (VPP_DATA_POS_RGB_POST_OFFSET_R_START + VPP_DATA_POS_RGB_POST_OFFSET_R_SIZE);
-//RGB_Post_Offset_G 4byte
-static const int VPP_DATA_POS_RGB_POST_OFFSET_G_START = (VPP_DATA_POS_RGB_POST_OFFSET_R_END + 0);
-static const int VPP_DATA_POS_RGB_POST_OFFSET_G_SIZE = (sizeof(int));
-static const int VPP_DATA_POS_RGB_POST_OFFSET_G_END = (VPP_DATA_POS_RGB_POST_OFFSET_G_START + VPP_DATA_POS_RGB_POST_OFFSET_G_SIZE);
-//RGB_Post_Offset_B 4byte
-static const int VPP_DATA_POS_RGB_POST_OFFSET_B_START = (VPP_DATA_POS_RGB_POST_OFFSET_G_END + 0);
-static const int VPP_DATA_POS_RGB_POST_OFFSET_B_SIZE = (sizeof(int));
-static const int VPP_DATA_POS_RGB_POST_OFFSET_B_END = (VPP_DATA_POS_RGB_POST_OFFSET_B_START + VPP_DATA_POS_RGB_POST_OFFSET_B_SIZE);
-//dbc_Enable 1byte
-static const int VPP_DATA_POS_DBC_START = (VPP_DATA_POS_RGB_POST_OFFSET_B_END + 0);
-static const int VPP_DATA_POS_DBC_SIZE = (1);
-static const int VPP_DATA_POS_DBC_END = (VPP_DATA_POS_DBC_START + VPP_DATA_POS_DBC_SIZE);
-//project id 1byte
-static const int VPP_DATA_PROJECT_ID_START = (VPP_DATA_POS_DBC_END + 0);
-static const int VPP_DATA_PROJECT_ID_SIZE = (1);
-static const int VPP_DATA_PROJECT_ID_END = (VPP_DATA_PROJECT_ID_START + VPP_DATA_PROJECT_ID_SIZE);
-//dnlp 1byte
-static const int VPP_DATA_POS_DNLP_START = (VPP_DATA_PROJECT_ID_END + 0);
-static const int VPP_DATA_POS_DNLP_SIZE = (1);
-static const int VPP_DATA_POS_DNLP_END = (VPP_DATA_POS_DNLP_START + VPP_DATA_POS_DNLP_SIZE);
-//panorama 1*7 = 7byte
-static const int VPP_DATA_POS_PANORAMA_START = (VPP_DATA_POS_DNLP_END + 0);
-static const int VPP_DATA_POS_PANORAMA_SIZE = (1 * (SOURCE_TYPE_MAX));
-static const int VPP_DATA_POS_PANORAMA_END = (VPP_DATA_POS_PANORAMA_START + VPP_DATA_POS_PANORAMA_SIZE);
-//APL 1 byte
-static const int VPP_DATA_APL_START = (VPP_DATA_POS_PANORAMA_END + 0);
-static const int VPP_DATA_APL_SIZE = (1);
-static const int VPP_DATA_APL_END = (VPP_DATA_APL_START + VPP_DATA_APL_SIZE);
-//APL2 1 byte
-static const int VPP_DATA_APL2_START = (VPP_DATA_APL_END + 0);
-static const int VPP_DATA_APL2_SIZE = (1);
-static const int VPP_DATA_APL2_END = (VPP_DATA_APL2_START + VPP_DATA_APL2_SIZE);
-//BD 1 byte
-static const int VPP_DATA_BD_START = (VPP_DATA_APL2_END + 0);
-static const int VPP_DATA_BD_SIZE = (1);
-static const int VPP_DATA_BD_END = (VPP_DATA_BD_START + VPP_DATA_BD_SIZE);
-//BP 1 byte
-static const int VPP_DATA_BP_START = (VPP_DATA_BD_END + 0);
-static const int VPP_DATA_BP_SIZE = (1);
-static const int VPP_DATA_BP_END = (VPP_DATA_BP_START + VPP_DATA_BP_SIZE);
-
-//Factory RGB 3*6 = 18byte
-static const int VPP_DATA_RGB_START = (VPP_DATA_BP_END + 0);
-static const int VPP_DATA_RGB_SIZE = (18);
-static const int VPP_DATA_RGB_END = (VPP_DATA_RGB_START + VPP_DATA_RGB_SIZE);
-
-//COLOR_SPACE 1 byte
-static const int VPP_DATA_COLOR_SPACE_START = (VPP_DATA_RGB_END + 0);
-static const int VPP_DATA_COLOR_SPACE_SIZE = (1);
-static const int VPP_DATA_COLOR_SPACE_END = (VPP_DATA_COLOR_SPACE_START + VPP_DATA_COLOR_SPACE_SIZE);
-
-static const int VPP_DATA_USER_NATURE_SWITCH_START = (VPP_DATA_COLOR_SPACE_END + 0);
-static const int VPP_DATA_USER_NATURE_SWITCH_SIZE = (1);
-static const int VPP_DATA_USER_NATURE_SWITCH_END = (VPP_DATA_USER_NATURE_SWITCH_START + VPP_DATA_USER_NATURE_SWITCH_SIZE);
-
-//gamma value 1 byte
-static const int VPP_DATA_GAMMA_VALUE_START = (VPP_DATA_USER_NATURE_SWITCH_END + 0);
-static const int VPP_DATA_GAMMA_VALUE_SIZE = (1);
-static const int VPP_DATA_GAMMA_VALUE_END = (VPP_DATA_GAMMA_VALUE_START + VPP_DATA_GAMMA_VALUE_SIZE);
-
-//dbc backlight enable 1byte
-static const int VPP_DATA_DBC_BACKLIGHT_START = (VPP_DATA_GAMMA_VALUE_END + 0);
-static const int VPP_DATA_DBC_BACKLIGHT_SIZE = (1);
-static const int VPP_DATA_DBC_BACKLIGHT_END = (VPP_DATA_DBC_BACKLIGHT_START + VPP_DATA_DBC_BACKLIGHT_SIZE);
-//dbc backlight standard 1byte
-static const int VPP_DATA_DBC_STANDARD_START = (VPP_DATA_DBC_BACKLIGHT_END + 0);
-static const int VPP_DATA_DBC_STANDARD_SIZE = (1);
-static const int VPP_DATA_DBC_STANDARD_END = (VPP_DATA_DBC_STANDARD_START + VPP_DATA_DBC_STANDARD_SIZE);
-//dbc backlight enable 1byte
-static const int VPP_DATA_DBC_ENABLE_START = (VPP_DATA_DBC_STANDARD_END + 0);
-static const int VPP_DATA_DBC_ENABLE_SIZE = (1);
-static const int VPP_DATA_DBC_ENABLE_END = (VPP_DATA_DBC_ENABLE_START + VPP_DATA_DBC_ENABLE_SIZE);
-
-//fbc Backlight 1 byte
-static const int VPP_DATA_POS_FBC_BACKLIGHT_START = (VPP_DATA_DBC_ENABLE_END + 0);
-static const int VPP_DATA_POS_FBC_BACKLIGHT_SIZE = (1);
-static const int VPP_DATA_POS_FBC_BACKLIGHT_END = (VPP_DATA_POS_FBC_BACKLIGHT_START + VPP_DATA_POS_FBC_BACKLIGHT_SIZE);
-//fbc Elecmode 1 byte
-static const int VPP_DATA_POS_FBC_ELECMODE_START = (VPP_DATA_POS_FBC_BACKLIGHT_END + 0);
-static const int VPP_DATA_POS_FBC_ELECMODE_SIZE = (1);
-static const int VPP_DATA_POS_FBC_ELECMODE_END = (VPP_DATA_POS_FBC_ELECMODE_START + VPP_DATA_POS_FBC_ELECMODE_SIZE);
-//fbc colortemp 1 byte
-static const int VPP_DATA_POS_FBC_COLORTEMP_START = (VPP_DATA_POS_FBC_ELECMODE_END + 0);
-static const int VPP_DATA_POS_FBC_COLORTEMP_SIZE = (1);
-static const int VPP_DATA_POS_FBC_COLORTEMP_END = (VPP_DATA_POS_FBC_COLORTEMP_START + VPP_DATA_POS_FBC_COLORTEMP_SIZE);
-
-
-//Tvin data section (581 bytes)
-//SourceInput 1byte
-static const int TVIN_DATA_POS_SOURCE_INPUT_START = (SSM_RW_VDIN_START + 0);
-static const int TVIN_DATA_POS_SOURCE_INPUT_SIZE = (1);
-static const int TVIN_DATA_POS_SOURCE_INPUT_END = (TVIN_DATA_POS_SOURCE_INPUT_START + TVIN_DATA_POS_SOURCE_INPUT_SIZE);
-//CVBS Std 1byte
-static const int TVIN_DATA_CVBS_STD_START = (TVIN_DATA_POS_SOURCE_INPUT_END + 0);
-static const int TVIN_DATA_CVBS_STD_SIZE = (1);
-static const int TVIN_DATA_CVBS_STD_END = (TVIN_DATA_CVBS_STD_START + TVIN_DATA_CVBS_STD_SIZE);
-//3DMode 1byte
-static const int TVIN_DATA_POS_3D_MODE_START = (TVIN_DATA_CVBS_STD_END + 0);
-static const int TVIN_DATA_POS_3D_MODE_SIZE = (1);
-static const int TVIN_DATA_POS_3D_MODE_END = (TVIN_DATA_POS_3D_MODE_START + TVIN_DATA_POS_3D_MODE_SIZE);
-//3DLRSwitch 1byte
-static const int TVIN_DATA_POS_3D_LRSWITCH_START = (TVIN_DATA_POS_3D_MODE_END + 0);
-static const int TVIN_DATA_POS_3D_LRSWITCH_SIZE = (1);
-static const int TVIN_DATA_POS_3D_LRSWITCH_END = (TVIN_DATA_POS_3D_LRSWITCH_START + TVIN_DATA_POS_3D_LRSWITCH_SIZE);
-//3DDepth 1byte
-static const int TVIN_DATA_POS_3D_DEPTH_START = (TVIN_DATA_POS_3D_LRSWITCH_END + 0);
-static const int TVIN_DATA_POS_3D_DEPTH_SIZE = (1);
-static const int TVIN_DATA_POS_3D_DEPTH_END = (TVIN_DATA_POS_3D_DEPTH_START + TVIN_DATA_POS_3D_DEPTH_SIZE);
-//3DTo2D 1byte
-static const int TVIN_DATA_POS_3D_TO2D_START = (TVIN_DATA_POS_3D_DEPTH_END + 0);
-static const int TVIN_DATA_POS_3D_TO2D_SIZE = (1);
-static const int TVIN_DATA_POS_3D_TO2D_END = (TVIN_DATA_POS_3D_TO2D_START + TVIN_DATA_POS_3D_TO2D_SIZE);
-//3DTo2DNEW 1byte
-static const int TVIN_DATA_POS_3D_TO2DNEW_START = (TVIN_DATA_POS_3D_TO2D_END + 0);
-static const int TVIN_DATA_POS_3D_TO2DNEW_SIZE = (1);
-static const int TVIN_DATA_POS_3D_TO2DNEW_END = (TVIN_DATA_POS_3D_TO2DNEW_START + TVIN_DATA_POS_3D_TO2DNEW_SIZE);
-
-static const int CHKSUM_PROJECT_ID_OFFSET = (SSM_RES0_START + 0);
-static const int CHKSUM_MAC_ADDRESS_OFFSET = (SSM_RES0_START + 2);
-static const int CHKSUM_HDCP_KEY_OFFSET = (SSM_RES0_START + 4);
-static const int CHKSUM_BARCODE_OFFSET = (SSM_RES0_START + 6);
-
-#endif
+#ifndef __TV_SETTING_CFG__H__
+#define __TV_SETTING_CFG__H__
+#include "../tvin/CTvin.h"
+
+//Sections
+static const int SSM_RES0_START = 0;
+static const int SSM_RES0_LEN = 32;
+static const int SSM_CR_START = SSM_RES0_START + SSM_RES0_LEN;
+static const int SSM_CR_LEN = 1536;
+static const int SSM_RW_START = SSM_CR_START + SSM_CR_LEN;
+static const int SSM_RW_LEN = 2048;
+static const int SSM_RES1_START = SSM_RW_START + SSM_RW_LEN;
+static const int SSM_RES1_LEN = 64;
+
+// reserved0 section
+static const int SSM_RSV_W_CHARACTER_CHAR_START = SSM_RES0_START + 0x0A;
+static const int SSM_RSV_W_CHARACTER_CHAR_LEN = 1;
+
+//Read & write section
+static const int SSM_MARK_01_START = SSM_RW_START + 0;
+static const int SSM_MARK_01_LEN = 1;
+
+static const int SSM_RW_AUDIO_START = SSM_MARK_01_START + SSM_MARK_01_LEN;
+static const int SSM_RW_AUDIO_LEN = 192;
+
+static const int SSM_RW_VPP_START = SSM_RW_AUDIO_START + SSM_RW_AUDIO_LEN;
+static const int SSM_RW_VPP_LEN = 230;
+
+static const int SSM_RW_VDIN_START = SSM_RW_VPP_START + SSM_RW_VPP_LEN;
+static const int SSM_RW_VDIN_LEN = 826;
+
+static const int SSM_RW_ATV_START = SSM_RW_VDIN_START + SSM_RW_VDIN_LEN;
+static const int SSM_RW_ATV_LEN = 0;
+
+static const int SSM_RW_MISC_START = SSM_RW_ATV_START + SSM_RW_ATV_LEN;
+static const int SSM_RW_MISC_LEN = 86;
+
+static const int SSM_RW_CUSTOMER_DATA_START = SSM_RW_MISC_START + SSM_RW_MISC_LEN;
+static const int SSM_RW_CUSTOMER_DATA_LEN = 100;
+
+static const int SSM_MARK_02_START = SSM_RW_CUSTOMER_DATA_START + SSM_RW_CUSTOMER_DATA_LEN;
+static const int SSM_MARK_02_LEN = 1;
+
+static const int SSM_RW_TEST_START = SSM_MARK_02_START + SSM_MARK_02_LEN;
+static const int SSM_RW_TEST_LEN = 3;
+
+static const int SSM_MARK_03_START = SSM_RW_TEST_START + SSM_RW_TEST_LEN;
+static const int SSM_MARK_03_LEN = 1;
+
+//Mark r/w values
+static const int SSM_MARK_01_VALUE = 0xDD;
+static const int SSM_MARK_02_VALUE = 0x88;
+static const int SSM_MARK_03_VALUE = 0xCC;
+
+
+//Read & write section(1824 Bytes)
+static const int SSM_RW_AUDIO_END = (SSM_RW_AUDIO_START + SSM_RW_AUDIO_LEN);
+static const int SSM_RW_VPP_END = (SSM_RW_VPP_START + SSM_RW_VPP_LEN);
+static const int SSM_RW_VDIN_END = (SSM_RW_VDIN_START + SSM_RW_VDIN_LEN);
+static const int SSM_RW_ATV_END = (SSM_RW_ATV_START + SSM_RW_ATV_LEN);
+static const int SSM_RW_MISC_END = (SSM_RW_MISC_START + SSM_RW_MISC_LEN);
+
+static const int SSM_CR_END = (SSM_CR_START + SSM_CR_LEN);
+
+//Read & write misc section
+static const int SSM_RW_FBMF_START = (SSM_RW_MISC_START); //Factory Burn Mode Flag
+static const int SSM_RW_FBMF_LEN = (1);
+static const int SSM_RW_DEF_HDCP_START = (SSM_RW_FBMF_START + SSM_RW_FBMF_LEN); //using default hdcp key flag
+static const int SSM_RW_DEF_HDCP_LEN = (1);
+static const int SSM_RW_POWER_CHANNEL_START = (SSM_RW_DEF_HDCP_START + SSM_RW_DEF_HDCP_LEN); //Power on/off channel type
+static const int SSM_RW_POWER_CHANNEL_LEN = (1);
+static const int SSM_RW_LAST_SOURCE_INPUT_START = (SSM_RW_POWER_CHANNEL_START + SSM_RW_POWER_CHANNEL_LEN); //Last tv select input source type
+static const int SSM_RW_LAST_SOURCE_INPUT_LEN = (1);
+static const int SSM_RW_SYS_LANGUAGE_START = (SSM_RW_LAST_SOURCE_INPUT_START + SSM_RW_LAST_SOURCE_INPUT_LEN); //system language
+static const int SSM_RW_SYS_LANGUAGE_LEN = (1);
+static const int SSM_RW_AGING_MODE_START = (SSM_RW_SYS_LANGUAGE_START + SSM_RW_SYS_LANGUAGE_LEN); //aging mode
+static const int SSM_RW_AGING_MODE_LEN = (1);
+static const int SSM_RW_PANEL_TYPE_START = (SSM_RW_AGING_MODE_START + SSM_RW_AGING_MODE_LEN); //panel type
+static const int SSM_RW_PANEL_TYPE_LEN = (1);
+static const int SSM_RW_POWER_ON_MUSIC_SWITCH_START = (SSM_RW_PANEL_TYPE_START + SSM_RW_PANEL_TYPE_LEN); //power on music switch
+static const int SSM_RW_POWER_ON_MUSIC_SWITCH_LEN = (1);
+static const int SSM_RW_POWER_ON_MUSIC_VOL_START = (SSM_RW_POWER_ON_MUSIC_SWITCH_START + SSM_RW_POWER_ON_MUSIC_SWITCH_LEN); //power on music volume
+static const int SSM_RW_POWER_ON_MUSIC_VOL_LEN = (1);
+static const int SSM_RW_SYS_SLEEP_TIMER_START = (SSM_RW_POWER_ON_MUSIC_VOL_START + SSM_RW_POWER_ON_MUSIC_VOL_LEN); //system sleep timer
+static const int SSM_RW_SYS_SLEEP_TIMER_LEN = (4);
+static const int SSM_RW_INPUT_SRC_PARENTAL_CTL_START = (SSM_RW_SYS_SLEEP_TIMER_START + SSM_RW_SYS_SLEEP_TIMER_LEN); //tv input source parental control
+static const int SSM_RW_INPUT_SRC_PARENTAL_CTL_LEN = (4);
+static const int SSM_RW_PARENTAL_CTL_SWITCH_START = (SSM_RW_INPUT_SRC_PARENTAL_CTL_START + SSM_RW_INPUT_SRC_PARENTAL_CTL_LEN); //parental control switch
+static const int SSM_RW_PARENTAL_CTL_SWITCH_LEN = (1);
+static const int SSM_RW_PARENTAL_CTL_PASSWORD_START = (SSM_RW_PARENTAL_CTL_SWITCH_START + SSM_RW_PARENTAL_CTL_SWITCH_LEN); //parental control pass word
+static const int SSM_RW_PARENTAL_CTL_PASSWORD_LEN = (16);
+static const int SSM_RW_SEARCH_NAVIGATE_FLAG_START = (SSM_RW_PARENTAL_CTL_PASSWORD_START + SSM_RW_PARENTAL_CTL_PASSWORD_LEN);
+static const int SSM_RW_SEARCH_NAVIGATE_FLAG_LEN = (1);
+static const int SSM_RW_INPUT_NUMBER_LIMIT_START = (SSM_RW_SEARCH_NAVIGATE_FLAG_START + SSM_RW_SEARCH_NAVIGATE_FLAG_LEN);
+static const int SSM_RW_INPUT_NUMBER_LIMIT_LEN = (1);
+static const int SSM_RW_SERIAL_ONOFF_FLAG_START = (SSM_RW_INPUT_NUMBER_LIMIT_START + SSM_RW_INPUT_NUMBER_LIMIT_LEN);
+static const int SSM_RW_SERIAL_ONOFF_FLAG_LEN = (1);
+static const int SSM_RW_STANDBY_MODE_FLAG_START = (SSM_RW_SERIAL_ONOFF_FLAG_START + SSM_RW_SERIAL_ONOFF_FLAG_LEN);
+static const int SSM_RW_STANDBY_MODE_FLAG_LEN = (1);
+static const int SSM_RW_HDMIEQ_MODE_START = (SSM_RW_STANDBY_MODE_FLAG_START + SSM_RW_STANDBY_MODE_FLAG_LEN);
+static const int SSM_RW_HDMIEQ_MODE_LEN = (1);
+static const int SSM_RW_LOGO_ON_OFF_FLAG_START = (SSM_RW_HDMIEQ_MODE_START + SSM_RW_HDMIEQ_MODE_LEN);
+static const int SSM_RW_LOGO_ON_OFF_FLAG_LEN = (1);
+static const int SSM_RW_HDMIINTERNAL_MODE_START = (SSM_RW_LOGO_ON_OFF_FLAG_START + SSM_RW_LOGO_ON_OFF_FLAG_LEN);
+static const int SSM_RW_HDMIINTERNAL_MODE_LEN = (4);
+static const int SSM_RW_DISABLE_3D_START = (SSM_RW_HDMIINTERNAL_MODE_START + SSM_RW_HDMIINTERNAL_MODE_LEN);
+static const int SSM_RW_DISABLE_3D_LEN = (1);
+static const int SSM_RW_GLOBAL_OGO_ENABLE_START = (SSM_RW_DISABLE_3D_START + SSM_RW_DISABLE_3D_LEN);
+static const int SSM_RW_GLOBAL_OGO_ENABLE_LEN = (1);
+static const int SSM_RW_LOCAL_DIMING_START = (SSM_RW_GLOBAL_OGO_ENABLE_START + SSM_RW_GLOBAL_OGO_ENABLE_LEN);
+static const int SSM_RW_LOCAL_DIMING_LEN = (1);
+static const int SSM_RW_VDAC_2D_START = (SSM_RW_LOCAL_DIMING_START + SSM_RW_LOCAL_DIMING_LEN);
+static const int SSM_RW_VDAC_2D_LEN = (2);
+static const int SSM_RW_VDAC_3D_START = (SSM_RW_VDAC_2D_START + SSM_RW_VDAC_2D_LEN);
+static const int SSM_RW_VDAC_3D_LEN = (2);
+
+static const int SSM_RW_NON_STANDARD_START = (SSM_RW_VDAC_3D_START + SSM_RW_VDAC_3D_LEN);
+static const int SSM_RW_NON_STANDARD_LEN = (2);
+static const int SSM_RW_ADB_SWITCH_START = (SSM_RW_NON_STANDARD_START + SSM_RW_NON_STANDARD_LEN);
+static const int SSM_RW_ADB_SWITCH_LEN = (1);
+static const int SSM_RW_SERIAL_CMD_SWITCH_START = (SSM_RW_ADB_SWITCH_START + SSM_RW_ADB_SWITCH_LEN);
+static const int SSM_RW_SERIAL_CMD_SWITCH_LEN = (1);
+
+static const int SSM_RW_CA_BUFFER_SIZE_START = (SSM_RW_SERIAL_CMD_SWITCH_START + SSM_RW_SERIAL_CMD_SWITCH_LEN);
+static const int SSM_RW_CA_BUFFER_SIZE_LEN = (2);
+
+static const int SSM_RW_NOISE_GATE_THRESHOLD_START = (SSM_RW_CA_BUFFER_SIZE_START + SSM_RW_CA_BUFFER_SIZE_LEN);
+static const int SSM_RW_NOISE_GATE_THRESHOLD_LEN = (1);
+
+static const int SSM_RW_DTV_TYPE_START = (SSM_RW_NOISE_GATE_THRESHOLD_START + SSM_RW_NOISE_GATE_THRESHOLD_LEN);
+static const int SSM_RW_DTV_TYPE_LEN = (1);
+
+static const int SSM_RW_UI_GRHPHY_BACKLIGHT_START = (SSM_RW_DTV_TYPE_START + SSM_RW_DTV_TYPE_LEN);
+static const int SSM_RW_UI_GRHPHY_BACKLIGHT_LEN = (1);
+
+static const int SSM_RW_FASTSUSPEND_FLAG_START = (SSM_RW_UI_GRHPHY_BACKLIGHT_START + SSM_RW_UI_GRHPHY_BACKLIGHT_LEN);
+static const int SSM_RW_FASTSUSPEND_FLAG_LEN = (1);
+
+static const int SSM_RW_BLACKOUT_ENABLE_START = (SSM_RW_FASTSUSPEND_FLAG_START + SSM_RW_FASTSUSPEND_FLAG_LEN);
+static const int SSM_RW_BLACKOUT_ENABLE__LEN = (1);
+
+//Audio data section
+static const int SSM_AUD_MASTR_VOLUME_VAL = (SSM_RW_AUDIO_START + 0);
+static const int SSM_AUD_BALANCE_VAL = (SSM_AUD_MASTR_VOLUME_VAL + 1);
+static const int SSM_AUD_SUPPERBASS_VOLUME_VAL = (SSM_AUD_BALANCE_VAL + 1);
+static const int SSM_AUD_SUPPERBASS_SWITCH = (SSM_AUD_SUPPERBASS_VOLUME_VAL + 1);
+static const int SSM_AUD_SRS_SURROUND_SWITCH = (SSM_AUD_SUPPERBASS_SWITCH + 1);
+static const int SSM_AUD_SRS_DIALOG_CLARITY_SWITCH = (SSM_AUD_SRS_SURROUND_SWITCH + 1);
+static const int SSM_AUD_SRS_TRUEBASS_SWITCH = (SSM_AUD_SRS_DIALOG_CLARITY_SWITCH + 1);
+static const int SSM_AUD_BASS_VOLUME_VAL = (SSM_AUD_SRS_TRUEBASS_SWITCH + 1);
+static const int SSM_AUD_TREBLE_VOLUME_VAL = (SSM_AUD_BASS_VOLUME_VAL + 1);
+static const int SSM_AUD_SOUND_MODE_VAL = (SSM_AUD_TREBLE_VOLUME_VAL + 1);
+static const int SSM_AUD_WALL_EFFCT_SWITCH = (SSM_AUD_SOUND_MODE_VAL + 1);
+static const int SSM_AUD_SPDIF_SWITCH = (SSM_AUD_WALL_EFFCT_SWITCH + 1);
+static const int SSM_AUD_SPDIF_MODE_VAL = (SSM_AUD_SPDIF_SWITCH + 1);
+static const int SSM_AUD_EQ_MODE_VAL = (SSM_RW_AUDIO_START + 32);
+static const int SSM_AUD_EQ_GAIN = (SSM_AUD_EQ_MODE_VAL + 1);
+static const int SSM_AUD_NOLINE_POINTS = (SSM_AUD_EQ_GAIN + 16);
+
+//VPP Data (115 bytes)
+//ColorDemoMode 1byte
+static const int VPP_DATA_POS_COLOR_DEMO_MODE_START = (SSM_RW_VPP_START + 0);
+static const int VPP_DATA_POS_COLOR_DEMO_MODE_SIZE = (1);
+static const int VPP_DATA_POS_COLOR_DEMO_MODE_END = (VPP_DATA_POS_COLOR_DEMO_MODE_START + VPP_DATA_POS_COLOR_DEMO_MODE_SIZE);
+//ColorBaseMode 1byte
+static const int VPP_DATA_POS_COLOR_BASE_MODE_START = (VPP_DATA_POS_COLOR_DEMO_MODE_END + 0);
+static const int VPP_DATA_POS_COLOR_BASE_MODE_SIZE = (1);
+static const int VPP_DATA_POS_COLOR_BASE_MODE_END = (VPP_DATA_POS_COLOR_BASE_MODE_START + VPP_DATA_POS_COLOR_BASE_MODE_SIZE);
+//TestPattern 1byte
+static const int VPP_DATA_POS_TEST_PATTERN_START = (VPP_DATA_POS_COLOR_BASE_MODE_END + 0);
+static const int VPP_DATA_POS_TEST_PATTERN_SIZE = (1);
+static const int VPP_DATA_POS_TEST_PATTERN_END = (VPP_DATA_POS_TEST_PATTERN_START + VPP_DATA_POS_TEST_PATTERN_SIZE);
+//DDR SSC 1byte
+static const int VPP_DATA_POS_DDR_SSC_START = (VPP_DATA_POS_TEST_PATTERN_END + 0);
+static const int VPP_DATA_POS_DDR_SSC_SIZE = (1);
+static const int VPP_DATA_POS_DDR_SSC_END = (VPP_DATA_POS_DDR_SSC_START + VPP_DATA_POS_DDR_SSC_SIZE);
+//LVDS SSC 1byte
+static const int VPP_DATA_POS_LVDS_SSC_START = (VPP_DATA_POS_DDR_SSC_END + 0);
+static const int VPP_DATA_POS_LVDS_SSC_SIZE = (1);
+static const int VPP_DATA_POS_LVDS_SSC_END = (VPP_DATA_POS_LVDS_SSC_START + VPP_DATA_POS_LVDS_SSC_SIZE);
+//dream panel 1byte
+static const int VPP_DATA_POS_DREAM_PANEL_START = (VPP_DATA_POS_LVDS_SSC_END + 0);
+static const int VPP_DATA_POS_DREAM_PANEL_SIZE = (1);
+static const int VPP_DATA_POS_DREAM_PANEL_END = (VPP_DATA_POS_DREAM_PANEL_START + VPP_DATA_POS_DREAM_PANEL_SIZE);
+//Backlight reverse 1byte
+static const int VPP_DATA_POS_BACKLIGHT_REVERSE_START = (VPP_DATA_POS_DREAM_PANEL_END + 0);
+static const int VPP_DATA_POS_BACKLIGHT_REVERSE_SIZE = (1);
+static const int VPP_DATA_POS_BACKLIGHT_REVERSE_END = (VPP_DATA_POS_BACKLIGHT_REVERSE_START + VPP_DATA_POS_BACKLIGHT_REVERSE_SIZE);
+//Brightness 1*7=7byte
+static const int VPP_DATA_POS_BRIGHTNESS_START = (VPP_DATA_POS_BACKLIGHT_REVERSE_END + 0);
+static const int VPP_DATA_POS_BRIGHTNESS_SIZE = (1 * (SOURCE_TYPE_MAX));
+static const int VPP_DATA_POS_BRIGHTNESS_END = (VPP_DATA_POS_BRIGHTNESS_START + VPP_DATA_POS_BRIGHTNESS_SIZE);
+//Contrast 1*7=7byte
+static const int VPP_DATA_POS_CONTRAST_START = (VPP_DATA_POS_BRIGHTNESS_END + 0);
+static const int VPP_DATA_POS_CONTRAST_SIZE = (1 * (SOURCE_TYPE_MAX));
+static const int VPP_DATA_POS_CONTRAST_END = (VPP_DATA_POS_CONTRAST_START + VPP_DATA_POS_CONTRAST_SIZE);
+//Saturation 1*7=7byte
+static const int VPP_DATA_POS_SATURATION_START = (VPP_DATA_POS_CONTRAST_END + 0);
+static const int VPP_DATA_POS_SATURATION_SIZE = (1 * (SOURCE_TYPE_MAX));
+static const int VPP_DATA_POS_SATURATION_END = (VPP_DATA_POS_SATURATION_START + VPP_DATA_POS_SATURATION_SIZE);
+//Hue 1*7=7byte
+static const int VPP_DATA_POS_HUE_START = (VPP_DATA_POS_SATURATION_END + 0);
+static const int VPP_DATA_POS_HUE_SIZE = (1 * (SOURCE_TYPE_MAX));
+static const int VPP_DATA_POS_HUE_END = (VPP_DATA_POS_HUE_START + VPP_DATA_POS_HUE_SIZE);
+//Sharpness 1*7=7byte
+static const int VPP_DATA_POS_SHARPNESS_START = (VPP_DATA_POS_HUE_END + 0);
+static const int VPP_DATA_POS_SHARPNESS_SIZE = (1 * (SOURCE_TYPE_MAX));
+static const int VPP_DATA_POS_SHARPNESS_END = (VPP_DATA_POS_SHARPNESS_START + VPP_DATA_POS_SHARPNESS_SIZE);
+//ColorTemperature 1*7=7byte
+static const int VPP_DATA_POS_COLOR_TEMP_START = (VPP_DATA_POS_SHARPNESS_END + 0);
+static const int VPP_DATA_POS_COLOR_TEMP_SIZE = (1 * (SOURCE_TYPE_MAX));
+static const int VPP_DATA_POS_COLOR_TEMP_END = (VPP_DATA_POS_COLOR_TEMP_START + VPP_DATA_POS_COLOR_TEMP_SIZE);
+//NoiseReduction 1*7=7byte
+static const int VPP_DATA_POS_NOISE_REDUCTION_START = (VPP_DATA_POS_COLOR_TEMP_END + 0);
+static const int VPP_DATA_POS_NOISE_REDUCTION_SIZE = (1 * (SOURCE_TYPE_MAX));
+static const int VPP_DATA_POS_NOISE_REDUCTION_END = (VPP_DATA_POS_NOISE_REDUCTION_START + VPP_DATA_POS_NOISE_REDUCTION_SIZE);
+//SceneMode 1byte
+static const int VPP_DATA_POS_SCENE_MODE_START = (VPP_DATA_POS_NOISE_REDUCTION_END + 0);
+static const int VPP_DATA_POS_SCENE_MODE_SIZE = (1);
+static const int VPP_DATA_POS_SCENE_MODE_END = (VPP_DATA_POS_SCENE_MODE_START + VPP_DATA_POS_SCENE_MODE_SIZE);
+//PictureMode 1*7=7byte
+static const int VPP_DATA_POS_PICTURE_MODE_START = (VPP_DATA_POS_SCENE_MODE_END + 0);
+static const int VPP_DATA_POS_PICTURE_MODE_SIZE = (1 * (SOURCE_TYPE_MAX));
+static const int VPP_DATA_POS_PICTURE_MODE_END = (VPP_DATA_POS_PICTURE_MODE_START + VPP_DATA_POS_PICTURE_MODE_SIZE);
+//DisplayMode 1*7=7byte
+static const int VPP_DATA_POS_DISPLAY_MODE_START = (VPP_DATA_POS_PICTURE_MODE_END + 0);
+static const int VPP_DATA_POS_DISPLAY_MODE_SIZE = (1 * (SOURCE_TYPE_MAX));
+static const int VPP_DATA_POS_DISPLAY_MODE_END = (VPP_DATA_POS_DISPLAY_MODE_START + VPP_DATA_POS_DISPLAY_MODE_SIZE);
+//Backlight 1*7=7byte
+static const int VPP_DATA_POS_BACKLIGHT_START = (VPP_DATA_POS_DISPLAY_MODE_END + 0);
+static const int VPP_DATA_POS_BACKLIGHT_SIZE = (1 * (SOURCE_TYPE_MAX));
+static const int VPP_DATA_POS_BACKLIGHT_END = (VPP_DATA_POS_BACKLIGHT_START + VPP_DATA_POS_BACKLIGHT_SIZE);
+//RGB_Gain_R 4byte
+static const int VPP_DATA_POS_RGB_GAIN_R_START = (VPP_DATA_POS_BACKLIGHT_END + 0);
+static const int VPP_DATA_POS_RGB_GAIN_R_SIZE = (sizeof(int));
+static const int VPP_DATA_POS_RGB_GAIN_R_END = (VPP_DATA_POS_RGB_GAIN_R_START + VPP_DATA_POS_RGB_GAIN_R_SIZE);
+//RGB_Gain_G 4byte
+static const int VPP_DATA_POS_RGB_GAIN_G_START = (VPP_DATA_POS_RGB_GAIN_R_END + 0);
+static const int VPP_DATA_POS_RGB_GAIN_G_SIZE = (sizeof(int));
+static const int VPP_DATA_POS_RGB_GAIN_G_END = (VPP_DATA_POS_RGB_GAIN_G_START + VPP_DATA_POS_RGB_GAIN_G_SIZE);
+//RGB_Gain_B 4byte
+static const int VPP_DATA_POS_RGB_GAIN_B_START = (VPP_DATA_POS_RGB_GAIN_G_END + 0);
+static const int VPP_DATA_POS_RGB_GAIN_B_SIZE = (sizeof(int));
+static const int VPP_DATA_POS_RGB_GAIN_B_END = (VPP_DATA_POS_RGB_GAIN_B_START + VPP_DATA_POS_RGB_GAIN_B_SIZE);
+//RGB_Post_Offset_R 4byte
+static const int VPP_DATA_POS_RGB_POST_OFFSET_R_START = (VPP_DATA_POS_RGB_GAIN_B_END + 0);
+static const int VPP_DATA_POS_RGB_POST_OFFSET_R_SIZE = (sizeof(int));
+static const int VPP_DATA_POS_RGB_POST_OFFSET_R_END = (VPP_DATA_POS_RGB_POST_OFFSET_R_START + VPP_DATA_POS_RGB_POST_OFFSET_R_SIZE);
+//RGB_Post_Offset_G 4byte
+static const int VPP_DATA_POS_RGB_POST_OFFSET_G_START = (VPP_DATA_POS_RGB_POST_OFFSET_R_END + 0);
+static const int VPP_DATA_POS_RGB_POST_OFFSET_G_SIZE = (sizeof(int));
+static const int VPP_DATA_POS_RGB_POST_OFFSET_G_END = (VPP_DATA_POS_RGB_POST_OFFSET_G_START + VPP_DATA_POS_RGB_POST_OFFSET_G_SIZE);
+//RGB_Post_Offset_B 4byte
+static const int VPP_DATA_POS_RGB_POST_OFFSET_B_START = (VPP_DATA_POS_RGB_POST_OFFSET_G_END + 0);
+static const int VPP_DATA_POS_RGB_POST_OFFSET_B_SIZE = (sizeof(int));
+static const int VPP_DATA_POS_RGB_POST_OFFSET_B_END = (VPP_DATA_POS_RGB_POST_OFFSET_B_START + VPP_DATA_POS_RGB_POST_OFFSET_B_SIZE);
+//dbc_Enable 1byte
+static const int VPP_DATA_POS_DBC_START = (VPP_DATA_POS_RGB_POST_OFFSET_B_END + 0);
+static const int VPP_DATA_POS_DBC_SIZE = (1);
+static const int VPP_DATA_POS_DBC_END = (VPP_DATA_POS_DBC_START + VPP_DATA_POS_DBC_SIZE);
+//project id 1byte
+static const int VPP_DATA_PROJECT_ID_START = (VPP_DATA_POS_DBC_END + 0);
+static const int VPP_DATA_PROJECT_ID_SIZE = (1);
+static const int VPP_DATA_PROJECT_ID_END = (VPP_DATA_PROJECT_ID_START + VPP_DATA_PROJECT_ID_SIZE);
+//dnlp 1byte
+static const int VPP_DATA_POS_DNLP_START = (VPP_DATA_PROJECT_ID_END + 0);
+static const int VPP_DATA_POS_DNLP_SIZE = (1);
+static const int VPP_DATA_POS_DNLP_END = (VPP_DATA_POS_DNLP_START + VPP_DATA_POS_DNLP_SIZE);
+//panorama 1*7 = 7byte
+static const int VPP_DATA_POS_PANORAMA_START = (VPP_DATA_POS_DNLP_END + 0);
+static const int VPP_DATA_POS_PANORAMA_SIZE = (1 * (SOURCE_TYPE_MAX));
+static const int VPP_DATA_POS_PANORAMA_END = (VPP_DATA_POS_PANORAMA_START + VPP_DATA_POS_PANORAMA_SIZE);
+//APL 1 byte
+static const int VPP_DATA_APL_START = (VPP_DATA_POS_PANORAMA_END + 0);
+static const int VPP_DATA_APL_SIZE = (1);
+static const int VPP_DATA_APL_END = (VPP_DATA_APL_START + VPP_DATA_APL_SIZE);
+//APL2 1 byte
+static const int VPP_DATA_APL2_START = (VPP_DATA_APL_END + 0);
+static const int VPP_DATA_APL2_SIZE = (1);
+static const int VPP_DATA_APL2_END = (VPP_DATA_APL2_START + VPP_DATA_APL2_SIZE);
+//BD 1 byte
+static const int VPP_DATA_BD_START = (VPP_DATA_APL2_END + 0);
+static const int VPP_DATA_BD_SIZE = (1);
+static const int VPP_DATA_BD_END = (VPP_DATA_BD_START + VPP_DATA_BD_SIZE);
+//BP 1 byte
+static const int VPP_DATA_BP_START = (VPP_DATA_BD_END + 0);
+static const int VPP_DATA_BP_SIZE = (1);
+static const int VPP_DATA_BP_END = (VPP_DATA_BP_START + VPP_DATA_BP_SIZE);
+
+//Factory RGB 3*6 = 18byte
+static const int VPP_DATA_RGB_START = (VPP_DATA_BP_END + 0);
+static const int VPP_DATA_RGB_SIZE = (18);
+static const int VPP_DATA_RGB_END = (VPP_DATA_RGB_START + VPP_DATA_RGB_SIZE);
+
+//COLOR_SPACE 1 byte
+static const int VPP_DATA_COLOR_SPACE_START = (VPP_DATA_RGB_END + 0);
+static const int VPP_DATA_COLOR_SPACE_SIZE = (1);
+static const int VPP_DATA_COLOR_SPACE_END = (VPP_DATA_COLOR_SPACE_START + VPP_DATA_COLOR_SPACE_SIZE);
+
+static const int VPP_DATA_USER_NATURE_SWITCH_START = (VPP_DATA_COLOR_SPACE_END + 0);
+static const int VPP_DATA_USER_NATURE_SWITCH_SIZE = (1);
+static const int VPP_DATA_USER_NATURE_SWITCH_END = (VPP_DATA_USER_NATURE_SWITCH_START + VPP_DATA_USER_NATURE_SWITCH_SIZE);
+
+//gamma value 1 byte
+static const int VPP_DATA_GAMMA_VALUE_START = (VPP_DATA_USER_NATURE_SWITCH_END + 0);
+static const int VPP_DATA_GAMMA_VALUE_SIZE = (1);
+static const int VPP_DATA_GAMMA_VALUE_END = (VPP_DATA_GAMMA_VALUE_START + VPP_DATA_GAMMA_VALUE_SIZE);
+
+//dbc backlight enable 1byte
+static const int VPP_DATA_DBC_BACKLIGHT_START = (VPP_DATA_GAMMA_VALUE_END + 0);
+static const int VPP_DATA_DBC_BACKLIGHT_SIZE = (1);
+static const int VPP_DATA_DBC_BACKLIGHT_END = (VPP_DATA_DBC_BACKLIGHT_START + VPP_DATA_DBC_BACKLIGHT_SIZE);
+//dbc backlight standard 1byte
+static const int VPP_DATA_DBC_STANDARD_START = (VPP_DATA_DBC_BACKLIGHT_END + 0);
+static const int VPP_DATA_DBC_STANDARD_SIZE = (1);
+static const int VPP_DATA_DBC_STANDARD_END = (VPP_DATA_DBC_STANDARD_START + VPP_DATA_DBC_STANDARD_SIZE);
+//dbc backlight enable 1byte
+static const int VPP_DATA_DBC_ENABLE_START = (VPP_DATA_DBC_STANDARD_END + 0);
+static const int VPP_DATA_DBC_ENABLE_SIZE = (1);
+static const int VPP_DATA_DBC_ENABLE_END = (VPP_DATA_DBC_ENABLE_START + VPP_DATA_DBC_ENABLE_SIZE);
+
+//fbc Backlight 1 byte
+static const int VPP_DATA_POS_FBC_BACKLIGHT_START = (VPP_DATA_DBC_ENABLE_END + 0);
+static const int VPP_DATA_POS_FBC_BACKLIGHT_SIZE = (1);
+static const int VPP_DATA_POS_FBC_BACKLIGHT_END = (VPP_DATA_POS_FBC_BACKLIGHT_START + VPP_DATA_POS_FBC_BACKLIGHT_SIZE);
+//fbc Elecmode 1 byte
+static const int VPP_DATA_POS_FBC_ELECMODE_START = (VPP_DATA_POS_FBC_BACKLIGHT_END + 0);
+static const int VPP_DATA_POS_FBC_ELECMODE_SIZE = (1);
+static const int VPP_DATA_POS_FBC_ELECMODE_END = (VPP_DATA_POS_FBC_ELECMODE_START + VPP_DATA_POS_FBC_ELECMODE_SIZE);
+//fbc colortemp 1 byte
+static const int VPP_DATA_POS_FBC_COLORTEMP_START = (VPP_DATA_POS_FBC_ELECMODE_END + 0);
+static const int VPP_DATA_POS_FBC_COLORTEMP_SIZE = (1);
+static const int VPP_DATA_POS_FBC_COLORTEMP_END = (VPP_DATA_POS_FBC_COLORTEMP_START + VPP_DATA_POS_FBC_COLORTEMP_SIZE);
+
+
+//Tvin data section (581 bytes)
+//SourceInput 1byte
+static const int TVIN_DATA_POS_SOURCE_INPUT_START = (SSM_RW_VDIN_START + 0);
+static const int TVIN_DATA_POS_SOURCE_INPUT_SIZE = (1);
+static const int TVIN_DATA_POS_SOURCE_INPUT_END = (TVIN_DATA_POS_SOURCE_INPUT_START + TVIN_DATA_POS_SOURCE_INPUT_SIZE);
+//CVBS Std 1byte
+static const int TVIN_DATA_CVBS_STD_START = (TVIN_DATA_POS_SOURCE_INPUT_END + 0);
+static const int TVIN_DATA_CVBS_STD_SIZE = (1);
+static const int TVIN_DATA_CVBS_STD_END = (TVIN_DATA_CVBS_STD_START + TVIN_DATA_CVBS_STD_SIZE);
+//3DMode 1byte
+static const int TVIN_DATA_POS_3D_MODE_START = (TVIN_DATA_CVBS_STD_END + 0);
+static const int TVIN_DATA_POS_3D_MODE_SIZE = (1);
+static const int TVIN_DATA_POS_3D_MODE_END = (TVIN_DATA_POS_3D_MODE_START + TVIN_DATA_POS_3D_MODE_SIZE);
+//3DLRSwitch 1byte
+static const int TVIN_DATA_POS_3D_LRSWITCH_START = (TVIN_DATA_POS_3D_MODE_END + 0);
+static const int TVIN_DATA_POS_3D_LRSWITCH_SIZE = (1);
+static const int TVIN_DATA_POS_3D_LRSWITCH_END = (TVIN_DATA_POS_3D_LRSWITCH_START + TVIN_DATA_POS_3D_LRSWITCH_SIZE);
+//3DDepth 1byte
+static const int TVIN_DATA_POS_3D_DEPTH_START = (TVIN_DATA_POS_3D_LRSWITCH_END + 0);
+static const int TVIN_DATA_POS_3D_DEPTH_SIZE = (1);
+static const int TVIN_DATA_POS_3D_DEPTH_END = (TVIN_DATA_POS_3D_DEPTH_START + TVIN_DATA_POS_3D_DEPTH_SIZE);
+//3DTo2D 1byte
+static const int TVIN_DATA_POS_3D_TO2D_START = (TVIN_DATA_POS_3D_DEPTH_END + 0);
+static const int TVIN_DATA_POS_3D_TO2D_SIZE = (1);
+static const int TVIN_DATA_POS_3D_TO2D_END = (TVIN_DATA_POS_3D_TO2D_START + TVIN_DATA_POS_3D_TO2D_SIZE);
+//3DTo2DNEW 1byte
+static const int TVIN_DATA_POS_3D_TO2DNEW_START = (TVIN_DATA_POS_3D_TO2D_END + 0);
+static const int TVIN_DATA_POS_3D_TO2DNEW_SIZE = (1);
+static const int TVIN_DATA_POS_3D_TO2DNEW_END = (TVIN_DATA_POS_3D_TO2DNEW_START + TVIN_DATA_POS_3D_TO2DNEW_SIZE);
+
+static const int CHKSUM_PROJECT_ID_OFFSET = (SSM_RES0_START + 0);
+static const int CHKSUM_MAC_ADDRESS_OFFSET = (SSM_RES0_START + 2);
+static const int CHKSUM_HDCP_KEY_OFFSET = (SSM_RES0_START + 4);
+static const int CHKSUM_BARCODE_OFFSET = (SSM_RES0_START + 6);
+
+#endif
diff --git a/tvapi/libtv/tvsetting/CTvSettingDeviceFactory.cpp b/tvapi/libtv/tvsetting/CTvSettingDeviceFactory.cpp
index 78fd830..a46f192 100644
--- a/tvapi/libtv/tvsetting/CTvSettingDeviceFactory.cpp
+++ b/tvapi/libtv/tvsetting/CTvSettingDeviceFactory.cpp
@@ -12,16 +12,16 @@
CTvSettingDeviceFactory::CTvSettingDeviceFactory()
{
- mpCurDevice = NULL;
+ mpCurDevice = NULL;
}
CTvSettingDeviceFactory::~CTvSettingDeviceFactory()
{
- if (mpCurDevice != NULL) {
- delete mpCurDevice;
- mpCurDevice = NULL;
- }
+ if(mpCurDevice != NULL) {
+ delete mpCurDevice;
+ mpCurDevice = NULL;
+ }
}
@@ -169,19 +169,19 @@ CTvSettingDeviceFactory::~CTvSettingDeviceFactory()
CBlobDevice *CTvSettingDeviceFactory::getSaveDeviceFromConfigFile()
{
- const char *device_type = config_get_str("SETTING", "store.device.type", "file");
- const char *device_path = config_get_str("SETTING", "device_path", "/param/default_data");
- const char *device_size = config_get_str("SETTING", "device_size", "0x1000");
- LOGD("getSaveDeviceFromConfigFile type=%s path=%s size=%s", device_type, device_path, device_size);
-
- //
- if (mpCurDevice != NULL) delete mpCurDevice;
-
- if (strcmp(device_type, "file") == 0) {
- mpCurDevice = new CBlobDeviceFile();
- } else if (strcmp(device_type, "e2prom") == 0) {
- } else if (strcmp(device_type, "ram") == 0) {
- }
+ const char *device_type = config_get_str("SETTING", "store.device.type", "file");
+ const char *device_path = config_get_str("SETTING", "device_path", "/param/default_data");
+ const char *device_size = config_get_str("SETTING", "device_size", "0x1000");
+ LOGD("getSaveDeviceFromConfigFile type=%s path=%s size=%s", device_type, device_path, device_size);
+
+ //
+ if(mpCurDevice != NULL) delete mpCurDevice;
+
+ if(strcmp(device_type, "file") == 0) {
+ mpCurDevice = new CBlobDeviceFile();
+ } else if(strcmp(device_type, "e2prom") == 0) {
+ } else if(strcmp(device_type, "ram") == 0) {
+ }
- return mpCurDevice;
+ return mpCurDevice;
}
diff --git a/tvapi/libtv/tvsetting/CTvSettingDeviceFactory.h b/tvapi/libtv/tvsetting/CTvSettingDeviceFactory.h
index e4de350..81b593c 100644
--- a/tvapi/libtv/tvsetting/CTvSettingDeviceFactory.h
+++ b/tvapi/libtv/tvsetting/CTvSettingDeviceFactory.h
@@ -11,13 +11,12 @@
#include "CTvSettingCfg.h"
-class CTvSettingDeviceFactory
-{
+class CTvSettingDeviceFactory {
public:
- CTvSettingDeviceFactory();
- ~CTvSettingDeviceFactory();
- CBlobDevice *getSaveDeviceFromConfigFile();
+ CTvSettingDeviceFactory();
+ ~CTvSettingDeviceFactory();
+ CBlobDevice *getSaveDeviceFromConfigFile();
private:
- CBlobDevice *mpCurDevice;
+ CBlobDevice *mpCurDevice;
};
#endif
diff --git a/tvapi/libtv/tvsetting/TvKeyData.cpp b/tvapi/libtv/tvsetting/TvKeyData.cpp
index 5a7563f..a7937fb 100644
--- a/tvapi/libtv/tvsetting/TvKeyData.cpp
+++ b/tvapi/libtv/tvsetting/TvKeyData.cpp
@@ -1,1392 +1,1392 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <cutils/properties.h>
-
-#include <netinet/ether.h>
-#include <netinet/if_ether.h>
-
-#include <netutils/ifc.h>
-#include <netutils/dhcp.h>
-
-#include "tvconfig/tvconfig.h"
-#include "CTvSettingCfg.h"
-#include "TvKeyData.h"
-
-#define CC_MAX_KEY_DATA_SIZE (2048)
-#define CC_MAX_FILE_PATH (256)
-
-#define CC_MAC_LEN (6)
-#define CC_HDCP_KEY_TOTAL_SIZE (368)
-#define CC_HDCP_KEY_HEAD_SIZE (40)
-#define CC_HDCP_KEY_CONTENT_SIZE (CC_HDCP_KEY_TOTAL_SIZE - CC_HDCP_KEY_HEAD_SIZE)
-
-#define CC_CUSTOMER_HDMI_EDID_TOTAL_SIZE (SSM_HDMI_EDID_SIZE + 4)
-
-#define CS_MAC_ADDRESS_STARTWRK_EN_CFG "ssm.macaddr.startwork.en"
-#define CS_BARCODE_LEN_CFG "ssm.barcode.len"
-
-#define CS_HDCP_KEY_EN_CFG "ssm.handle.hdcpkey.en"
-#define CS_HDCP_KEY_DEMO_EN_CFG "ssm.handle.hdcpkey.demo.en"
-#define CS_HDCP_KEY_FILE_PATH_CFG "ssm.handle.hdcpkey.file.path"
-#define CS_HDCP_KEY_FILE_OFFSET_CFG "ssm.handle.hdcpkey.file.offset"
-#define CS_HDCP_KEY_HEADER_EN_CFG "ssm.handle.hdcpkey.header.en"
-
-
-#define CS_HDMI_EDID_EN_CFG "ssm.handle.hdmi.edid.en"
-#define CS_HDMI_EDID_USE_CFG "ssm.handle.hdmi.edid.use"
-#define CS_HDMI_EDID_FILE_PATH_CFG "ssm.handle.hdmi.edid.file.path"
-#define CS_HDMI_PORT1_EDID_FILE_PATH_CFG "ssm.handle.hdmi.port1.edid.file.path"
-#define CS_HDMI_PORT2_EDID_FILE_PATH_CFG "ssm.handle.hdmi.port2.edid.file.path"
-#define CS_HDMI_PORT3_EDID_FILE_PATH_CFG "ssm.handle.hdmi.port3.edid.file.path"
-#define CS_HDMI_EDID_FILE_OFFSET_CFG "ssm.handle.hdmi.edid.file.offset"
-
-#define CS_RGBOGO_FILE_PATH_CFG "ssm.rgbogo.file.path"
-#define CS_RGBOGO_FILE_OFFSET_CFG "ssm.rgbogo.file.offset"
-
-#define CS_AUDIO_NOLINEPOINTS_FILE_PATH_CFG "ssm.audio.nolinepoints.file.path"
-#define CS_AUDIO_NOLINEPOINTS_FILE_OFFSET_CFG "ssm.audio.nolinepoints.file.offset"
-
-static unsigned char mHDCPKeyDefHeaderBuf[CC_HDCP_KEY_HEAD_SIZE] = {
- //40 bytes
- 0x53, 0x4B, 0x59, 0x01, 0x00, 0x10, 0x0D, 0x15, 0x3A, 0x8E, // 000~009
- 0x99, 0xEE, 0x2A, 0x55, 0x58, 0xEE, 0xED, 0x4B, 0xBE, 0x00, // 010~019
- 0x74, 0xA9, 0x00, 0x10, 0x0A, 0x21, 0xE3, 0x30, 0x66, 0x34, // 020~029
- 0xCE, 0x9C, 0xC7, 0x8B, 0x51, 0x27, 0xF9, 0x0B, 0xAD, 0x09, // 030~039
-};
-
-static unsigned char mDefHDCPKeyContentBuf[CC_HDCP_KEY_CONTENT_SIZE] = {
- //328 bytes
- 0x5F, 0x4D, 0xC2, 0xCA, 0xA2, 0x13, 0x06, 0x18, 0x8D, 0x34, // 000~009
- 0x82, 0x46, 0x2D, 0xC9, 0x4B, 0xB0, 0x1C, 0xDE, 0x3D, 0x49, // 010~019
- 0x39, 0x58, 0xEF, 0x2B, 0x68, 0x39, 0x71, 0xC9, 0x4D, 0x25, // 020~029
- 0xE9, 0x75, 0x4D, 0xAC, 0x62, 0xF5, 0xF5, 0x87, 0xA0, 0xB2, // 030~039
- 0x4A, 0x60, 0xD3, 0xF1, 0x09, 0x3A, 0xB2, 0x3E, 0x19, 0x4F, // 040~049
- 0x3B, 0x1B, 0x2F, 0x85, 0x14, 0x28, 0x44, 0xFC, 0x69, 0x6F, // 050~059
- 0x50, 0x42, 0x81, 0xBF, 0x7C, 0x2B, 0x3A, 0x17, 0x2C, 0x15, // 060~069
- 0xE4, 0x93, 0x77, 0x74, 0xE8, 0x1F, 0x1C, 0x38, 0x54, 0x49, // 070~079
- 0x10, 0x64, 0x5B, 0x7D, 0x90, 0x3D, 0xA0, 0xE1, 0x8B, 0x67, // 080~089
- 0x5C, 0x19, 0xE6, 0xCA, 0x9D, 0xE9, 0x68, 0x5A, 0xB5, 0x62, // 090~099
- 0xDF, 0xA1, 0x28, 0xBC, 0x68, 0x82, 0x9A, 0x22, 0xC4, 0xDC, // 100~109
- 0x48, 0x85, 0x0F, 0xF1, 0x3E, 0x05, 0xDD, 0x1B, 0x2D, 0xF5, // 120~119
- 0x49, 0x3A, 0x15, 0x29, 0xE7, 0xB6, 0x0B, 0x2A, 0x40, 0xE3, // 120~129
- 0xB0, 0x89, 0xD5, 0x75, 0x84, 0x2E, 0x76, 0xE7, 0xBC, 0x63, // 130~139
- 0x67, 0xE3, 0x57, 0x67, 0x86, 0x81, 0xF4, 0xD7, 0xEA, 0x4D, // 140~149
- 0x89, 0x8E, 0x37, 0x95, 0x59, 0x1C, 0x8A, 0xCD, 0x79, 0xF8, // 150~159
- 0x4F, 0x82, 0xF2, 0x6C, 0x7E, 0x7F, 0x79, 0x8A, 0x6B, 0x90, // 160~169
- 0xC0, 0xAF, 0x4C, 0x8D, 0x43, 0x47, 0x1F, 0x9A, 0xF1, 0xBB, // 170~179
- 0x88, 0x64, 0x49, 0x14, 0x50, 0xD1, 0xC3, 0xDF, 0xA6, 0x87, // 180~189
- 0xA0, 0x15, 0x98, 0x51, 0x81, 0xF5, 0x97, 0x55, 0x10, 0x4A, // 190~199
- 0x99, 0x30, 0x54, 0xA4, 0xFC, 0xDA, 0x0E, 0xAC, 0x6A, 0xFA, // 200~209
- 0x90, 0xEE, 0x12, 0x70, 0x69, 0x74, 0x63, 0x46, 0x63, 0xFB, // 210~219
- 0xE6, 0x1F, 0x72, 0xEC, 0x43, 0x5D, 0x50, 0xFF, 0x03, 0x4F, // 220~229
- 0x05, 0x33, 0x88, 0x36, 0x93, 0xE4, 0x72, 0xD5, 0xCC, 0x34, // 230~239
- 0x52, 0x96, 0x15, 0xCE, 0xD0, 0x32, 0x52, 0x41, 0x4F, 0xBC, // 240~249
- 0x2D, 0xDF, 0xC5, 0xD6, 0x7F, 0xD5, 0x74, 0xCE, 0x51, 0xDC, // 250~259
- 0x10, 0x5E, 0xF7, 0xAA, 0x4A, 0x2D, 0x20, 0x9A, 0x17, 0xDD, // 260~269
- 0x30, 0x89, 0x71, 0x82, 0x36, 0x50, 0x09, 0x1F, 0x7C, 0xF3, // 270~279
- 0x12, 0xE9, 0x43, 0x10, 0x5F, 0x51, 0xBF, 0xB8, 0x45, 0xA8, // 280~289
- 0x5A, 0x8D, 0x3F, 0x77, 0xE5, 0x96, 0x73, 0x68, 0xAB, 0x73, // 290~299
- 0xE5, 0x4C, 0xFB, 0xE5, 0x98, 0xB9, 0xAE, 0x74, 0xEB, 0x51, // 300~309
- 0xDB, 0x91, 0x07, 0x7B, 0x66, 0x02, 0x9B, 0x79, 0x03, 0xC5, // 310~319
- 0x34, 0x1C, 0x58, 0x13, 0x31, 0xD2, 0x4A, 0xEC, // 320~327
-};
-
-static int CreateMacAddressStartWorkThread();
-
-static int GetSSMHandleHDCPKeyEnableCFG();
-static int GetSSMHandleHDCPKeyHeaderEnableCFG();
-static int GetSSMHandleHDCPKeyDemoEnableCFG();
-static int SSMSetDefaultHDCPKey(unsigned char hdcp_key_buf[]);
-static int RealHandleHDCPKey(unsigned char hdcp_key_buf[]);
-static int GetHDCPKeyFromFile(int rd_off, int rd_size,
- unsigned char data_buf[]);
-static int SaveHDCPKeyToFile(int wr_off, int wr_size, unsigned char data_buf[]);
-
-static int GetHDMIEdidFromFile(int rd_off, int rd_size, int port,
- unsigned char data_buf[]);
-static int RealHandleHDMIEdid(unsigned char hdmi_edid_buf[]);
-static int GetSSMHandleHDMIEdidByCustomerEnableCFG();
-static int AppendEdidPrefixCode(unsigned char customer_hdmi_edid_buf[],
- unsigned char hdmi_edid_buf[]);
-
-static int GetRGBOGOFromFile(int rd_off, int rd_size, unsigned char data_buf[]);
-static int SaveRGBOGOToFile(int wr_off, int wr_size, unsigned char data_buf[]);
-
-static int GetAudioNoLinePointsDataFromFile(int offset, int size,
- unsigned char data_buf[]);
-static int SaveAudioNoLinePointsDataToFile(int offset, int size,
- unsigned char data_buf[]);
-
-static int TransStringToHex(int data_cnt, char data_buf[],
- unsigned char hex_buf[])
-{
- int i = 0, j = 0, tmp_val = 0;
- char tmp_buf[3] = { 0, 0, 0 };
-
- while (i < data_cnt) {
- tmp_val = 0;
- tmp_buf[0] = data_buf[i];
- tmp_buf[1] = data_buf[i + 1];
- tmp_val = strtoul(tmp_buf, NULL, 16);
- hex_buf[j] = tmp_val;
- //LOGD("%s, hex_buf[%d] = 0x%x\n", __FUNCTION__, j, hex_buf[j]);
- i += 2;
- j += 1;
- }
-
- return j;
-}
-
-static int TransToHexString(int hex_cnt, char data_buf[],
- unsigned char hex_buf[])
-{
- int i = 0, j = 0;
- char tmp_buf[17] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
- data_buf[0] = 0;
- for (i = 0; i < hex_cnt; i++) {
- sprintf(tmp_buf, "%02X", (unsigned char) hex_buf[i]);
- strcat(data_buf, tmp_buf);
- }
-
- return 2 * hex_cnt;
-}
-
-int ReadKeyData(const char *key_name, unsigned int rd_data_len, unsigned char data_buf[])
-{
- FILE *dev_fp = NULL;
- int i = 0, rd_cnt = 0;
- char tmp_ori_buf[CC_MAX_KEY_DATA_SIZE];
- unsigned char tmp_tran_buf[CC_MAX_KEY_DATA_SIZE];
-
- dev_fp = fopen(CS_KEY_DATA_NAME_DEV_PATH, "w");
- if (dev_fp == NULL) {
- LOGE("%s, open %s ERROR(%s)!!\n", __FUNCTION__,
- CS_KEY_DATA_NAME_DEV_PATH, strerror(errno));
- return -1;
- }
-
- fprintf(dev_fp, "%s", key_name);
-
- fclose(dev_fp);
- dev_fp = NULL;
-
- dev_fp = fopen(CS_KEY_DATA_READ_DEV_PATH, "r");
- if (dev_fp == NULL) {
- LOGE("%s, open %s ERROR(%s)!!\n", __FUNCTION__,
- CS_KEY_DATA_READ_DEV_PATH, strerror(errno));
- return -1;
- }
-
- memset((void *)tmp_ori_buf, 0, CC_MAX_KEY_DATA_SIZE);
- memset((void *)tmp_tran_buf, 0, CC_MAX_KEY_DATA_SIZE);
- fscanf(dev_fp, "%s", tmp_ori_buf);
-
- rd_cnt = strlen(tmp_ori_buf);
- rd_cnt = TransStringToHex(rd_cnt, tmp_ori_buf, tmp_tran_buf);
-
- fclose(dev_fp);
- dev_fp = NULL;
-
- if (rd_cnt != rd_data_len) {
- return 0;
- }
-
- memcpy(data_buf, tmp_tran_buf, rd_cnt);
- return rd_cnt;
-}
-
-int WriteKeyData(const char *key_name, int wr_size, char data_buf[])
-{
- FILE *dev_fp = NULL;
- int wr_cnt = 0;
-
- dev_fp = fopen(CS_KEY_DATA_NAME_DEV_PATH, "w");
- if (dev_fp == NULL) {
- LOGE("%s, open %s ERROR(%s)!!\n", __FUNCTION__,
- CS_KEY_DATA_NAME_DEV_PATH, strerror(errno));
- return -1;
- }
-
- fprintf(dev_fp, "%s", key_name);
-
- fclose(dev_fp);
- dev_fp = NULL;
-
- dev_fp = fopen(CS_KEY_DATA_WRITE_DEV_PATH, "w");
- if (dev_fp == NULL) {
- LOGE("%s, open %s ERROR(%s)!!\n", __FUNCTION__,
- CS_KEY_DATA_WRITE_DEV_PATH, strerror(errno));
- return -1;
- }
-
- wr_cnt = fwrite(data_buf, 1, wr_size, dev_fp);
-
- fclose(dev_fp);
- dev_fp = NULL;
-
- return wr_cnt;
-}
-
-int KeyData_GetMacAddressDataLen()
-{
- return CC_MAC_LEN;
-}
-
-int KeyData_ReadMacAddress(unsigned char data_buf[])
-{
- int i = 0, rd_size = 0;
- int data_i_buf[CC_MAC_LEN] = { 0, 0, 0, 0, 0, 0 };
- unsigned char tmp_buf[128] = { 0 };
-
- rd_size = ReadKeyData(CS_MAC_KEY_NAME, 17, tmp_buf);
- if (rd_size == 17) {
- sscanf((char *) tmp_buf, "%02x:%02x:%02x:%02x:%02x:%02x",
- &data_i_buf[0], &data_i_buf[1], &data_i_buf[2], &data_i_buf[3],
- &data_i_buf[4], &data_i_buf[5]);
- for (i = 0; i < sizeof(data_i_buf); i++) {
- data_buf[i] = data_i_buf[i] & 0xFF;
- }
- }
-
- return KeyData_GetMacAddressDataLen();
-}
-
-int KeyData_SaveMacAddress(unsigned char data_buf[])
-{
- int tmp_ret = 0, wr_size = 0;
- unsigned char hex_buf[128] = { 0 };
- char tmp_buf[128] = { 0 };
-
- sprintf((char *) hex_buf, "%02x:%02x:%02x:%02x:%02x:%02x", data_buf[0],
- data_buf[1], data_buf[2], data_buf[3], data_buf[4], data_buf[5]);
-
- TransToHexString(strlen((char *) hex_buf), tmp_buf, hex_buf);
-
- wr_size = strlen(tmp_buf);
- tmp_ret = WriteKeyData(CS_MAC_KEY_NAME, wr_size, tmp_buf);
- if (tmp_ret != wr_size) {
- return -1;
- }
-
- CreateMacAddressStartWorkThread();
-
- return 0;
-}
-
-static int gSSMBarCodeLen = -1;
-int KeyData_GetBarCodeDataLen()
-{
- const char *config_value;
-
- if (gSSMBarCodeLen <= 0) {
- config_value = config_get_str("TV", CS_BARCODE_LEN_CFG, "null");
- if (strcmp(config_value, "null") == 0) {
- gSSMBarCodeLen = 32;
- } else {
- gSSMBarCodeLen = strtol(config_value, NULL, 10);
- }
- }
-
- return gSSMBarCodeLen;
-}
-
-int KeyData_ReadBarCode(unsigned char data_buf[])
-{
- int rd_size = 0, tmp_len = 0;
- unsigned char tmp_buf[CC_MAX_KEY_DATA_SIZE] = { 0 };
-
- tmp_len = KeyData_GetBarCodeDataLen();
- rd_size = ReadKeyData(CS_BARCODE_KEY_NAME, tmp_len, tmp_buf);
- LOGD("%s, rd_size = %d\n", __FUNCTION__, rd_size);
- if (rd_size == tmp_len) {
- memcpy(data_buf, tmp_buf, tmp_len);
- }
-
- return rd_size;
-}
-
-int KeyData_SaveBarCode(unsigned char data_buf[])
-{
- int tmp_len = 0, wr_size = 0;
- char tmp_buf[512] = { 0 };
-
- tmp_len = KeyData_GetBarCodeDataLen();
-
- TransToHexString(tmp_len, tmp_buf, data_buf);
-
- wr_size = strlen(tmp_buf);
- tmp_len = WriteKeyData(CS_BARCODE_KEY_NAME, wr_size, tmp_buf);
- if (tmp_len != wr_size) {
- return -1;
- }
-
- return 0;
-}
-
-int SSMReadHDCPKey(unsigned char hdcp_key_buf[])
-{
- int tmp_ret = 0, rd_size = 0;
- unsigned char tmp_buf[CC_HDCP_KEY_TOTAL_SIZE] = { 0 };
-
- tmp_ret = GetHDCPKeyFromFile(0, CC_HDCP_KEY_TOTAL_SIZE, hdcp_key_buf);
- if (tmp_ret < 0) {
- rd_size = ReadKeyData(CS_RX_HDCP_KEY_NAME, CC_HDCP_KEY_TOTAL_SIZE, tmp_buf);
- LOGD("%s, rd_size = %d\n", __FUNCTION__, rd_size);
- if (rd_size == CC_HDCP_KEY_TOTAL_SIZE) {
- memcpy(hdcp_key_buf, tmp_buf, CC_HDCP_KEY_TOTAL_SIZE);
- }
-
- return rd_size;
- }
-
- return CC_HDCP_KEY_TOTAL_SIZE;
-}
-
-int SSMReadHDCPKeyExcludingHeader(unsigned char hdcp_key_buf[])
-{
- int tmp_ret = 0, rd_size = 0;
- unsigned char tmp_buf[CC_HDCP_KEY_CONTENT_SIZE] = { 0 };
-
- tmp_ret = GetHDCPKeyFromFile(0, CC_HDCP_KEY_CONTENT_SIZE, hdcp_key_buf);
- if (tmp_ret < 0) {
- LOGD("%s, GetHDCPKeyFromFile error = %d\n", __FUNCTION__, tmp_ret);
- return tmp_ret;
- }
-
- return CC_HDCP_KEY_CONTENT_SIZE;
-}
-
-
-int SSMSaveHDCPKey(unsigned char hdcp_key_buf[])
-{
- int tmp_ret = 0, wr_size = 0;
- char tmp_buf[CC_MAX_KEY_DATA_SIZE] = { 0 };
-
- tmp_ret = SaveHDCPKeyToFile(0, CC_HDCP_KEY_TOTAL_SIZE, hdcp_key_buf);
- if (tmp_ret < 0) {
- TransToHexString(CC_HDCP_KEY_TOTAL_SIZE, tmp_buf, hdcp_key_buf);
-
- wr_size = strlen(tmp_buf);
- tmp_ret = WriteKeyData(CS_RX_HDCP_KEY_NAME, wr_size, tmp_buf);
- if (tmp_ret != wr_size) {
- tmp_ret = -1;
- }
- }
-
- return tmp_ret;
-}
-
-int SSMSetHDCPKey()
-{
- int i = 0;
- unsigned char hdcp_key_buf[CC_HDCP_KEY_TOTAL_SIZE];
- unsigned char *hdcp_key_head_ptr = NULL;
-
- if (GetSSMHandleHDCPKeyEnableCFG() == 1) {
- if (GetSSMHandleHDCPKeyDemoEnableCFG() == 1) {
- return SSMSetDefaultHDCPKey(hdcp_key_buf);
- } else if (GetSSMHandleHDCPKeyHeaderEnableCFG() == 1) {
- LOGD("%s, handle hdcp key excluding header.\n", __FUNCTION__);
- //copy header
- hdcp_key_head_ptr = mHDCPKeyDefHeaderBuf;
- memcpy(hdcp_key_buf, hdcp_key_head_ptr, CC_HDCP_KEY_HEAD_SIZE);
- //load content and copy, then set
- unsigned char hdcp_key_content_buf[CC_HDCP_KEY_CONTENT_SIZE];
- if (SSMReadHDCPKeyExcludingHeader(hdcp_key_content_buf) == CC_HDCP_KEY_CONTENT_SIZE) {
- memcpy(hdcp_key_buf + 40, hdcp_key_content_buf, CC_HDCP_KEY_CONTENT_SIZE);
- LOGD("%s, using ssm's hdcp key.\n", __FUNCTION__);
- return RealHandleHDCPKey(hdcp_key_buf);
- }
- } else {
- if (SSMReadHDCPKey(hdcp_key_buf) == CC_HDCP_KEY_TOTAL_SIZE) {
- LOGD("%s, using ssm's hdcp key.\n", __FUNCTION__);
- return RealHandleHDCPKey(hdcp_key_buf);
- }
- }
- }
-
- return -1;
-}
-
-int SSMRefreshHDCPKey()
-{
- int ret = -1;
- ret = SSMSetHDCPKey();
- system ( "/system/bin/dec" );
- return ret;
-}
-
-int SSMGetHDCPKeyDataLen()
-{
- return CC_HDCP_KEY_TOTAL_SIZE;
-}
-
-//hdmi edid
-int SSMSetHDMIEdid(int port)
-{
- int i = 0;
- unsigned char customer_hdmi_edid_buf[CC_CUSTOMER_HDMI_EDID_TOTAL_SIZE];
- unsigned char hdmi_edid_buf[SSM_HDMI_EDID_SIZE];
-
- if (port < 1 && port > SSM_HDMI_PORT_MAX) {
- LOGD("%s, hdmi port error.%d\n", __FUNCTION__, port);
- return -1;
- }
-
- if (GetSSMHandleHDMIEdidByCustomerEnableCFG() == 1) {
- if (SSMReadHDMIEdid(port, hdmi_edid_buf) == 0) {
- LOGD("%s, using ssm's hdmi edid.\n", __FUNCTION__);
- LOGD("%s, begin to write hdmi edid:0x%x, 0x%x, 0x%x, 0x%x.\n",
- __FUNCTION__, hdmi_edid_buf[8], hdmi_edid_buf[9],
- hdmi_edid_buf[10], hdmi_edid_buf[255]);
- if (AppendEdidPrefixCode(customer_hdmi_edid_buf, hdmi_edid_buf)
- == 0)
- ;
- return RealHandleHDMIEdid(customer_hdmi_edid_buf);
- }
- }
-
- return -1;
-}
-
-int SSMReadHDMIEdid(int port, unsigned char hdmi_edid_buf[])
-{
- int tmp_ret = 0;
- LOGD("%s, read hdmi edid from bin file.\n", __FUNCTION__);
- tmp_ret = GetHDMIEdidFromFile(0, SSM_HDMI_EDID_SIZE, port, hdmi_edid_buf);
- if (tmp_ret < 0) {
- LOGD("%s, read hdmi edid error.\n", __FUNCTION__);
- } else {
- LOGD("%s, 0x%x, 0x%x, 0x%x, 0x%x.\n", __FUNCTION__, hdmi_edid_buf[8],
- hdmi_edid_buf[9], hdmi_edid_buf[10], hdmi_edid_buf[255]);
- }
- return tmp_ret;
-}
-
-int KeyData_SaveProjectID(int rw_val)
-{
- int tmp_ret = 0, wr_size = 0;
- char tmp_buf[64] = { 0 };
-
- sprintf(tmp_buf, "%08X", rw_val);
-
- wr_size = strlen(tmp_buf);
- tmp_ret = WriteKeyData(CS_PROJECT_ID_KEY_NAME, wr_size, tmp_buf);
- if (tmp_ret != wr_size) {
- return -1;
- }
-
- return 0;
-}
-
-int KeyData_ReadProjectID()
-{
- int rd_size = 0, tmp_val = 0;
- unsigned char tmp_buf[64] = { 0 };
-
- rd_size = ReadKeyData(CS_PROJECT_ID_KEY_NAME, 4, tmp_buf);
- LOGD("%s, rd_size = %d\n", __FUNCTION__, rd_size);
- if (rd_size == 4) {
- tmp_val = 0;
- tmp_val |= tmp_buf[0] << 24;
- tmp_val |= tmp_buf[1] << 16;
- tmp_val |= tmp_buf[2] << 8;
- tmp_val |= tmp_buf[3] << 0;
- }
-
- return tmp_val;
-}
-
-int SSMSaveRGBOGOValue(int offset, int size, unsigned char data_buf[])
-{
- return SaveRGBOGOToFile(offset, size, data_buf);
-}
-
-int SSMReadRGBOGOValue(int offset, int size, unsigned char data_buf[])
-{
- return GetRGBOGOFromFile(offset, size, data_buf);
-}
-
-int SSMSaveAudioNoLinePoints(int offset, int size, unsigned char tmp_buf[])
-{
- return SaveAudioNoLinePointsDataToFile(offset, size, tmp_buf);
-}
-
-int SSMReadAudioNoLinePoints(int offset, int size, unsigned char tmp_buf[])
-{
- return GetAudioNoLinePointsDataFromFile(offset, size, tmp_buf);
-}
-
-/**************************** start mac address static functions ****************************/
-#define CC_ERR_THREAD_ID (0)
-
-static pthread_t mMacAddressStartWorkThreadID = CC_ERR_THREAD_ID;
-
-static volatile unsigned int mMacAddressLow = -1;
-static volatile unsigned int mMacAddressHigh = -1;
-static volatile int mMacAddressStartWorkThreadExecFlag = -1;
-static volatile int mMacAddressStartWorkThreadTurnOnFlag = -1;
-
-static pthread_mutex_t mac_address_low_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t mac_address_high_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t mac_address_exec_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t mac_address_turnon_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-static int GetSSMMacAddressStartWorkEnableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_MAC_ADDRESS_STARTWRK_EN_CFG, "null");
- if (strcmp(config_value, "null") == 0) {
- LOGD(
- "%s, get config is \"%s\", return 0 to not enable mac address start work.\n",
- __FUNCTION__, config_value);
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-static unsigned int SetMacAddressLow(unsigned int low_val)
-{
- unsigned int tmp_val;
-
- pthread_mutex_lock(&mac_address_low_mutex);
-
- tmp_val = mMacAddressLow;
-
- mMacAddressLow = low_val;
-
- pthread_mutex_unlock(&mac_address_low_mutex);
-
- return tmp_val;
-}
-
-static unsigned int GetMacAddressLow()
-{
- unsigned int tmp_val = 0;
-
- pthread_mutex_lock(&mac_address_low_mutex);
-
- tmp_val = mMacAddressLow;
-
- pthread_mutex_unlock(&mac_address_low_mutex);
-
- return tmp_val;
-}
-
-static unsigned int SetMacAddressHigh(unsigned int high_val)
-{
- unsigned int tmp_val;
-
- pthread_mutex_lock(&mac_address_high_mutex);
-
- tmp_val = mMacAddressHigh;
-
- mMacAddressHigh = high_val;
-
- pthread_mutex_unlock(&mac_address_high_mutex);
-
- return tmp_val;
-}
-
-static unsigned int GetMacAddressHigh()
-{
- int tmp_val = 0;
-
- pthread_mutex_lock(&mac_address_high_mutex);
-
- tmp_val = mMacAddressHigh;
-
- pthread_mutex_unlock(&mac_address_high_mutex);
-
- return tmp_val;
-}
-
-static int SetMacAddressStartWorkThreadExecFlag(int tmp_flag)
-{
- int tmp_val;
-
- pthread_mutex_lock(&mac_address_exec_mutex);
-
- tmp_val = mMacAddressStartWorkThreadExecFlag;
-
- mMacAddressStartWorkThreadExecFlag = tmp_flag;
-
- pthread_mutex_unlock(&mac_address_exec_mutex);
-
- return tmp_val;
-}
-
-static int GetMacAddressStartWorkThreadExecFlag()
-{
- int tmp_val = 0;
-
- pthread_mutex_lock(&mac_address_exec_mutex);
-
- tmp_val = mMacAddressStartWorkThreadExecFlag;
-
- pthread_mutex_unlock(&mac_address_exec_mutex);
-
- return tmp_val;
-}
-
-static int SetMacAddressStartWorkThreadTurnOnFlag(int tmp_flag)
-{
- int tmp_val;
-
- pthread_mutex_lock(&mac_address_turnon_mutex);
-
- tmp_val = mMacAddressStartWorkThreadTurnOnFlag;
-
- mMacAddressStartWorkThreadTurnOnFlag = tmp_flag;
-
- pthread_mutex_unlock(&mac_address_turnon_mutex);
-
- return tmp_val;
-}
-
-static int GetMacAddressStartWorkThreadTurnOnFlag()
-{
- int tmp_val = 0;
-
- pthread_mutex_lock(&mac_address_turnon_mutex);
-
- tmp_val = mMacAddressStartWorkThreadTurnOnFlag;
-
- pthread_mutex_unlock(&mac_address_turnon_mutex);
-
- return tmp_val;
-}
-
-static void *SSMMacAddressStartWorkMainApp(void *data)
-{
- unsigned int curMacAddrLow = 0, curMacAddrHigh = 0;
- int p_status;
- char ssm_addr_str[128];
- const char *iname = "eth0";
- pid_t pid;
-
- LOGD("%s, entering...\n", __FUNCTION__);
-
- if (GetSSMMacAddressStartWorkEnableCFG() == 0) {
- LOGE("%s, ssm mac address start work is not enable.\n", "TV");
- return NULL;
- }
-
- curMacAddrLow = GetMacAddressLow();
- curMacAddrHigh = GetMacAddressHigh();
-
- while (GetMacAddressStartWorkThreadTurnOnFlag() == 1) {
- pid = fork();
- if (pid == 0) {
- if (execl("/system/bin/stop", "stop_eth_dhcpcd", "eth_dhcpcd", NULL)
- < 0) {
- _exit(-1);
- }
- _exit(0);
- }
- waitpid(pid, &p_status, 0);
-
- ifc_init();
-
- ifc_down(iname);
-
- sprintf(ssm_addr_str, "%02x:%02x:%02x:%02x:%02x:%02x",
- ((curMacAddrLow >> 0) & 0xFF), ((curMacAddrLow >> 8) & 0xFF),
- ((curMacAddrLow >> 16) & 0xFF), ((curMacAddrLow >> 24) & 0xFF),
- ((curMacAddrHigh >> 0) & 0xFF), ((curMacAddrHigh >> 8) & 0xFF));
- struct ether_addr *addr = ether_aton(ssm_addr_str);
- if (addr) {
- ifc_set_hwaddr(iname, addr->ether_addr_octet);
- }
-
- ifc_up(iname);
-
- ifc_close();
-
- if (curMacAddrLow == GetMacAddressLow()
- && curMacAddrHigh == GetMacAddressHigh()) {
- break;
- }
-
- curMacAddrLow = GetMacAddressLow();
- curMacAddrHigh = GetMacAddressHigh();
- }
-
- return NULL;
-}
-
-static void *SSMMacAddressStartWorkThreadMain(void *data)
-{
- void *tmp_ret = NULL;
-
- SetMacAddressStartWorkThreadExecFlag(1);
-
- tmp_ret = SSMMacAddressStartWorkMainApp(NULL);
-
- SetMacAddressStartWorkThreadExecFlag(0);
-
- return tmp_ret;
-}
-
-static int KillMacAddressStartWorkThread()
-{
- int i = 0, tmp_timeout_count = 600;
-
- SetMacAddressStartWorkThreadTurnOnFlag(0);
- while (1) {
- if (GetMacAddressStartWorkThreadExecFlag() == 0) {
- break;
- }
-
- if (i >= tmp_timeout_count) {
- break;
- }
-
- i++;
-
- usleep(100 * 1000);
- }
-
- if (i == tmp_timeout_count) {
- LOGE(
- "%s, we have try %d times, but the mac address start work thread's exec flag is still(%d)!!!\n",
- "TV", tmp_timeout_count,
- GetMacAddressStartWorkThreadExecFlag());
- return -1;
- }
-
- pthread_join(mMacAddressStartWorkThreadID, NULL);
- mMacAddressStartWorkThreadID = CC_ERR_THREAD_ID;
-
- LOGD("%s, kill the mac address start work thread sucess.\n", __FUNCTION__);
-
- return 0;
-}
-
-static int CreateMacAddressStartWorkThread()
-{
- unsigned int macAddrLow = 0, macAddrHigh = 0;
- pthread_attr_t attr;
- struct sched_param param;
- unsigned char ssm_addr_buf[16] = { 0, 0, 0, 0, 0, 0 };
-
- if (KeyData_ReadMacAddress(ssm_addr_buf) < 0) {
- return -1;
- }
-
- macAddrLow = 0;
- macAddrLow |= ((ssm_addr_buf[0] & 0xFF) << 0);
- macAddrLow |= ((ssm_addr_buf[1] & 0xFF) << 8);
- macAddrLow |= ((ssm_addr_buf[2] & 0xFF) << 16);
- macAddrLow |= ((ssm_addr_buf[3] & 0xFF) << 24);
-
- macAddrHigh = 0;
- macAddrHigh |= ((ssm_addr_buf[4] & 0xFF) << 0);
- macAddrHigh |= ((ssm_addr_buf[5] & 0xFF) << 8);
-
- if (mMacAddressStartWorkThreadID != CC_ERR_THREAD_ID) {
- if (GetMacAddressStartWorkThreadExecFlag() == 1) {
- SetMacAddressLow(macAddrLow);
- SetMacAddressHigh(macAddrHigh);
- return 0;
- } else {
- KillMacAddressStartWorkThread();
- }
- }
-
- SetMacAddressLow(macAddrLow);
- SetMacAddressHigh(macAddrHigh);
- SetMacAddressStartWorkThreadTurnOnFlag(1);
-
- pthread_attr_init(&attr);
- pthread_attr_setschedpolicy(&attr, SCHED_RR);
- param.sched_priority = 20;
- pthread_attr_setschedparam(&attr, &param);
-
- if (pthread_create(&mMacAddressStartWorkThreadID, &attr,
- SSMMacAddressStartWorkThreadMain, NULL) < 0) {
- pthread_attr_destroy(&attr);
- mMacAddressStartWorkThreadID = CC_ERR_THREAD_ID;
- return -1;
- }
-
- pthread_attr_destroy(&attr);
-
- LOGD("%s, create channel select thread sucess.\n", __FUNCTION__);
-
- return 0;
-}
-/**************************** end mac address static functions ****************************/
-
-/**************************** start hdcp key static functions ****************************/
-static int GetSSMHandleHDCPKeyEnableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_HDCP_KEY_EN_CFG, "null");
-#if 0
- LOGD("%s, get \"%s\" is \"%s\".\n", __FUNCTION__, CS_HDCP_KEY_EN_CFG,
- config_value);
-#endif
- if (strcmp(config_value, "null") == 0) {
- LOGD(
- "%s, get config \"%s\" is \"%s\", return 0 to not enable handle hdcp key.\n",
- __FUNCTION__, CS_HDCP_KEY_EN_CFG, config_value);
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-static int GetSSMHandleHDCPKeyDemoEnableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_HDCP_KEY_DEMO_EN_CFG, "null");
-#if 0
- LOGD("%s, get \"%s\" is \"%s\".\n", __FUNCTION__, CS_HDCP_KEY_DEMO_EN_CFG,
- config_value);
-#endif
- if (strcmp(config_value, "null") == 0) {
- LOGD(
- "%s, get config \"%s\" is \"%s\", return 0 to not enable handle hdcp key demo.\n",
- __FUNCTION__, CS_HDCP_KEY_DEMO_EN_CFG, config_value);
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-static int GetSSMHandleHDCPKeyHeaderEnableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_HDCP_KEY_HEADER_EN_CFG, "null");
-#if 1
- LOGD("%s, get \"%s\" is \"%s\".\n", __FUNCTION__, CS_HDCP_KEY_HEADER_EN_CFG,
- config_value);
-#endif
- if (strcmp(config_value, "null") == 0) {
- LOGD(
- "%s, get config \"%s\" is \"%s\", return 0 to not enable handle hdcp key header.\n",
- __FUNCTION__, CS_HDCP_KEY_HEADER_EN_CFG, config_value);
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-
-static int SSMSetDefaultHDCPKey(unsigned char hdcp_key_buf[])
-{
- int i = 0;
-
- for (i = 0; i < CC_HDCP_KEY_HEAD_SIZE; i++) {
- hdcp_key_buf[i] = mHDCPKeyDefHeaderBuf[i];
- }
-
- for (i = 0; i < CC_HDCP_KEY_CONTENT_SIZE; i++) {
- hdcp_key_buf[i + CC_HDCP_KEY_HEAD_SIZE] = mDefHDCPKeyContentBuf[i];
- }
-
- LOGD("%s, using default hdcp key.\n", __FUNCTION__);
-
- return RealHandleHDCPKey(hdcp_key_buf);
-}
-
-static int RealHandleHDCPKey(unsigned char hdcp_key_buf[])
-{
- int i = 0, dev_fd = -1;
-
- if (hdcp_key_buf == NULL) {
- return -1;
- }
-
- dev_fd = open("/sys/class/hdmirx/hdmirx0/edid", O_RDWR);
- if (dev_fd < 0) {
- LOGE("%s, open edid file ERROR(%s)!!\n", "TV", strerror(errno));
- return -1;
- }
-
- if (write(dev_fd, hdcp_key_buf, CC_HDCP_KEY_TOTAL_SIZE) < 0) {
- close(dev_fd);
- dev_fd = -1;
- LOGE("%s, write edid file ERROR(%s)!!\n", "TV", strerror(errno));
-
- return -1;
- }
-
- close(dev_fd);
- dev_fd = -1;
- return 0;
-}
-
-/**************************** end hdcp key static functions ****************************/
-
-/**************************** start hdmi edid static functions ****************************/
-static int GetSSMHandleHDMIEdidByCustomerEnableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_HDMI_EDID_EN_CFG, "null");
-#if 0
- LOGD("%s, get \"%s\" is \"%s\".\n", __FUNCTION__, CS_HDMI_EDID_EN_CFG,
- config_value);
-#endif
- if (strcmp(config_value, "null") == 0) {
- LOGD(
- "%s, get config \"%s\" is \"%s\", return 0 to not enable handle hdmi edid by customer.\n",
- __FUNCTION__, CS_HDMI_EDID_EN_CFG, config_value);
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-static int RealHandleHDMIEdid(unsigned char customer_hdmi_edid_buf[])
-{
- int i = 0, dev_fd = -1;
-
- if (customer_hdmi_edid_buf == NULL) {
- return -1;
- }
-
- dev_fd = open("/sys/class/hdmirx/hdmirx0/edid", O_RDWR);
- if (dev_fd < 0) {
- LOGE("%s, open edid file ERROR(%s)!!\n", "TV", strerror(errno));
- return -1;
- }
-
- if (write(dev_fd, customer_hdmi_edid_buf, CC_CUSTOMER_HDMI_EDID_TOTAL_SIZE)
- < 0) {
- close(dev_fd);
- dev_fd = -1;
- LOGE("%s, write edid file ERROR(%s)!!\n", "TV", strerror(errno));
-
- return -1;
- }
-
- close(dev_fd);
- dev_fd = -1;
- return 0;
-}
-
-static int AppendEdidPrefixCode(unsigned char customer_hdmi_edid_buf[],
- unsigned char hdmi_edid_buf[])
-{
- if (customer_hdmi_edid_buf == NULL || hdmi_edid_buf == NULL) {
- LOGE("%s, Append hdmi edid's prefixCode ERROR(%s)!!\n", "TV",
- strerror(errno));
- return -1;
- }
- memset(customer_hdmi_edid_buf, 0,
- sizeof(char) * CC_CUSTOMER_HDMI_EDID_TOTAL_SIZE);
- customer_hdmi_edid_buf[0] = 'E';
- customer_hdmi_edid_buf[1] = 'D';
- customer_hdmi_edid_buf[2] = 'I';
- customer_hdmi_edid_buf[3] = 'D';
- memcpy(customer_hdmi_edid_buf + 4, hdmi_edid_buf,
- CC_CUSTOMER_HDMI_EDID_TOTAL_SIZE - 4);
- /*
- LOGD("%s, customer_hdmi_edid_buf: %c,%c,%c,%c,%x,%x,%x,%x.\n", __FUNCTION__,
- customer_hdmi_edid_buf[0],customer_hdmi_edid_buf[1],customer_hdmi_edid_buf[2],customer_hdmi_edid_buf[3],
- customer_hdmi_edid_buf[12],customer_hdmi_edid_buf[13],customer_hdmi_edid_buf[14],customer_hdmi_edid_buf[15]);*/
- /*
- LOGD("%s, customer_hdmi_edid_buf: \n", __FUNCTION__);
- int i, j;
- for (i = 0; i < 16; i++) {
- LOGD("[%2d] ", i);
- for (j = 0; j < 16; j++) {
- LOGD("0x%02lx, ", customer_hdmi_edid_buf[4 + (i*16 + j)]);
- }
- LOGD("\n");
- }*/
- return 0;
-}
-
-/**************************** end hdmi edid static functions ****************************/
-
-/**************************** start critical data op functions ****************************/
-#define CC_OP_TYPE_READ (0)
-#define CC_OP_TYPE_SAVE (1)
-#define CC_DATA_TYPE_CHAR (0)
-#define CC_DATA_TYPE_INT (1)
-
-typedef int (*op_fun_ptr)(char *, int, int, unsigned char *);
-
-typedef struct tagRWDataInfo {
- int op_type;
- int data_type;
- int max_size;
- int rw_off;
- int rw_size;
- void *data_buf;
- char *path_cfg_name;
- char *off_cfg_name;
- op_fun_ptr op_cb;
-} RWDataInfo;
-
-static int GetFilePathCFG(char *key_str, char path_buf[])
-{
- int tmp_ret = 0;
- const char *cfg_value;
-
- path_buf[0] = '\0';
- cfg_value = config_get_str("TV", key_str, "");
- strcpy(path_buf, cfg_value);
-#if 0
- LOGD("%s, get \"%s\" is \"%s\".\n", "TV", key_str, path_buf);
-#endif
- return tmp_ret;
-}
-
-static int GetFileOffsetCFG(char *key_str)
-{
- const char *cfg_value;
-
- cfg_value = config_get_str("TV", key_str, "null");
-#if 0
- LOGD("%s, get \"%s\" is \"%s\".\n", "TV", key_str, cfg_value);
-#endif
- if (strcmp(cfg_value, "null") == 0) {
- LOGD("%s, get config \"%s\" is \"%s\", return 0 for default.\n", "TV",
- key_str, cfg_value);
- return 0;
- }
-
- return strtol(cfg_value, NULL, 10);
-}
-
-static int handleDataFilePath(char *file_name, int offset, int nsize,
- char file_path[])
-{
- if (file_name == NULL) {
- LOGE("%s, file_name is NULL!!!\n", "TV");
- return -1;
- }
-
- return 0;
-}
-
-static int ReadDataFromFile(char *file_name, int offset, int nsize,
- unsigned char data_buf[])
-{
- int device_fd = -1;
- int tmp_ret = 0;
- char *tmp_ptr = NULL;
- char file_path[512] = { '\0' };
-
- if (data_buf == NULL) {
- LOGE("%s, data_buf is NULL!!!\n", "TV");
- return -1;
- }
-
- tmp_ret = handleDataFilePath(file_name, offset, nsize, file_path);
- if (tmp_ret < 0) {
- tmp_ptr = NULL;
- } else if (tmp_ret == 0) {
- tmp_ptr = file_name;
- } else if (tmp_ret == 1) {
- tmp_ptr = file_path;
- }
-
- if (tmp_ptr == NULL) {
- return -1;
- }
-
- device_fd = open(tmp_ptr, O_RDONLY);
- if (device_fd < 0) {
- LOGE("%s: open file \"%s\" error(%s).\n", "TV", file_name,
- strerror(errno));
- return -1;
- }
-
- lseek(device_fd, offset, SEEK_SET);
- read(device_fd, data_buf, nsize);
-
- close(device_fd);
- device_fd = -1;
-
- return 0;
-}
-
-static int SaveDataToFile(char *file_name, int offset, int nsize,
- unsigned char data_buf[])
-{
- int device_fd = -1;
- int i = 0, tmp_ret = 0;
- char *tmp_ptr = NULL;
- char file_path[512] = { '\0' };
-
- if (data_buf == NULL) {
- LOGE("%s, data_buf is NULL!!!\n", "TV");
- return -1;
- }
-
- tmp_ret = handleDataFilePath(file_name, offset, nsize, file_path);
- if (tmp_ret < 0) {
- tmp_ptr = NULL;
- } else if (tmp_ret == 0) {
- tmp_ptr = file_name;
- } else if (tmp_ret == 1) {
- tmp_ptr = file_path;
- }
-
- if (tmp_ptr == NULL) {
- return -1;
- }
-
- device_fd = open(tmp_ptr, O_RDWR | O_SYNC);
- if (device_fd < 0) {
- LOGE("%s: open file \"%s\" error(%s).\n", "TV", file_name,
- strerror(errno));
- return -1;
- }
-
- lseek(device_fd, offset, SEEK_SET);
- write(device_fd, data_buf, nsize);
- fsync(device_fd);
-
- close(device_fd);
- device_fd = -1;
-
- return 0;
-}
-
-static int RealRWData(RWDataInfo *data_info)
-{
- int i = 0, file_off = 0;
- char file_name[256] = { '\0' };
-
- memset(file_name, '\0', 256);
- GetFilePathCFG(data_info->path_cfg_name, file_name);
-#if 0
- LOGD("%s, file_name is %s.\n", __FUNCTION__, file_name);
-#endif
- if (strlen(file_name) == 0) {
- LOGE("%s, length of file_name is 0!!!\n", "TV");
- return -2;
- }
-
- if (data_info->rw_off < 0) {
- LOGE("%s, data_info->rw_off (%d) is less than 0!!!\n", "TV",
- data_info->rw_off);
- return -1;
- }
-
- if (data_info->rw_off + data_info->rw_size > data_info->max_size) {
- LOGE(
- "%s, data_info->rw_off + data_info->rw_size (%d) is more than data_info->max_size(%d) !!!\n",
- "TV", data_info->rw_off + data_info->rw_size,
- data_info->max_size);
- return -1;
- }
-
- file_off = GetFileOffsetCFG(data_info->off_cfg_name);
- if (file_off < 0) {
- LOGE("%s, file_off (%d) is less than 0!!!\n", "TV", file_off);
- return -1;
- }
-
- file_off += data_info->rw_off;
-
- if (data_info->op_cb(file_name, file_off, data_info->rw_size,
- (unsigned char *) data_info->data_buf) < 0) {
- return -1;
- }
-
- return 0;
-}
-
-static int HandleRWData(RWDataInfo *data_info)
-{
- int i = 0, tmp_ret = 0;
- int *tmp_iptr = NULL;
- unsigned char *tmp_cptr = NULL;
- RWDataInfo tmpInfo;
-
- if (data_info == NULL) {
- return -1;
- }
-
- tmpInfo = *data_info;
-
- if (data_info->data_type == CC_DATA_TYPE_INT) {
- tmp_cptr = new unsigned char[data_info->rw_size];
- if (tmp_cptr != NULL) {
- tmpInfo.data_buf = tmp_cptr;
-
- if (tmpInfo.op_type == CC_OP_TYPE_SAVE) {
- tmp_iptr = (int *) data_info->data_buf;
- for (i = 0; i < data_info->rw_size; i++) {
- tmp_cptr[i] = tmp_iptr[i];
- }
-
- tmp_ret |= RealRWData(&tmpInfo);
- } else {
- tmp_ret |= RealRWData(&tmpInfo);
-
- tmp_iptr = (int *) data_info->data_buf;
- for (i = 0; i < data_info->rw_size; i++) {
- tmp_iptr[i] = tmp_cptr[i];
- }
- }
-
- delete tmp_cptr;
- tmp_cptr = NULL;
-
- return tmp_ret;
- }
- }
-
- return RealRWData(&tmpInfo);
-}
-
-static int GetRGBOGOFromFile(int rd_off, int rd_size,
- unsigned char data_buf[])
-{
- RWDataInfo tmpInfo;
-
- tmpInfo.op_type = CC_OP_TYPE_READ;
- tmpInfo.data_type = CC_DATA_TYPE_CHAR;
- tmpInfo.max_size = SSM_CR_RGBOGO_LEN + SSM_CR_RGBOGO_CHKSUM_LEN;
- tmpInfo.rw_off = rd_off;
- tmpInfo.rw_size = rd_size;
- tmpInfo.data_buf = data_buf;
- tmpInfo.path_cfg_name = (char *) CS_RGBOGO_FILE_PATH_CFG;
- tmpInfo.off_cfg_name = (char *) CS_RGBOGO_FILE_OFFSET_CFG;
- tmpInfo.op_cb = ReadDataFromFile;
-
- return HandleRWData(&tmpInfo);
-}
-
-static int SaveRGBOGOToFile(int wr_off, int wr_size, unsigned char data_buf[])
-{
- RWDataInfo tmpInfo;
-
- tmpInfo.op_type = CC_OP_TYPE_SAVE;
- tmpInfo.data_type = CC_DATA_TYPE_CHAR;
- tmpInfo.max_size = SSM_CR_RGBOGO_LEN + SSM_CR_RGBOGO_CHKSUM_LEN;
- tmpInfo.rw_off = wr_off;
- tmpInfo.rw_size = wr_size;
- tmpInfo.data_buf = data_buf;
- tmpInfo.path_cfg_name = (char *) CS_RGBOGO_FILE_PATH_CFG;
- tmpInfo.off_cfg_name = (char *) CS_RGBOGO_FILE_OFFSET_CFG;
- tmpInfo.op_cb = SaveDataToFile;
-
- return HandleRWData(&tmpInfo);
-}
-
-static int GetAudioNoLinePointsDataFromFile(int rd_off, int rd_size,
- unsigned char data_buf[])
-{
- RWDataInfo tmpInfo;
-
- tmpInfo.op_type = CC_OP_TYPE_READ;
- tmpInfo.data_type = CC_DATA_TYPE_CHAR;
- tmpInfo.max_size = 256;
- tmpInfo.rw_off = rd_off;
- tmpInfo.rw_size = rd_size;
- tmpInfo.data_buf = data_buf;
- tmpInfo.path_cfg_name = (char *) CS_AUDIO_NOLINEPOINTS_FILE_PATH_CFG;
- tmpInfo.off_cfg_name = (char *) CS_AUDIO_NOLINEPOINTS_FILE_OFFSET_CFG;
- tmpInfo.op_cb = ReadDataFromFile;
-
- return HandleRWData(&tmpInfo);
-}
-
-static int SaveAudioNoLinePointsDataToFile(int wr_off, int wr_size,
- unsigned char data_buf[])
-{
- RWDataInfo tmpInfo;
-
- tmpInfo.op_type = CC_OP_TYPE_SAVE;
- tmpInfo.data_type = CC_DATA_TYPE_CHAR;
- tmpInfo.max_size = 256;
- tmpInfo.rw_off = wr_off;
- tmpInfo.rw_size = wr_size;
- tmpInfo.data_buf = data_buf;
- tmpInfo.path_cfg_name = (char *) CS_AUDIO_NOLINEPOINTS_FILE_PATH_CFG;
- tmpInfo.off_cfg_name = (char *) CS_AUDIO_NOLINEPOINTS_FILE_OFFSET_CFG;
- tmpInfo.op_cb = SaveDataToFile;
-
- return HandleRWData(&tmpInfo);
-}
-
-static int GetHDCPKeyFromFile(int rd_off, int rd_size,
- unsigned char data_buf[])
-{
- RWDataInfo tmpInfo;
-
- tmpInfo.op_type = CC_OP_TYPE_READ;
- tmpInfo.data_type = CC_DATA_TYPE_CHAR;
- tmpInfo.max_size = CC_HDCP_KEY_TOTAL_SIZE;
- tmpInfo.rw_off = rd_off;
- tmpInfo.rw_size = rd_size;
- tmpInfo.data_buf = data_buf;
- tmpInfo.path_cfg_name = (char *) CS_HDCP_KEY_FILE_PATH_CFG;
- tmpInfo.off_cfg_name = (char *) CS_HDCP_KEY_FILE_OFFSET_CFG;
- tmpInfo.op_cb = ReadDataFromFile;
-
- return HandleRWData(&tmpInfo);
-}
-
-static int SaveHDCPKeyToFile(int wr_off, int wr_size,
- unsigned char data_buf[])
-{
- RWDataInfo tmpInfo;
-
- tmpInfo.op_type = CC_OP_TYPE_SAVE;
- tmpInfo.data_type = CC_DATA_TYPE_CHAR;
- tmpInfo.max_size = CC_HDCP_KEY_TOTAL_SIZE;
- tmpInfo.rw_off = wr_off;
- tmpInfo.rw_size = wr_size;
- tmpInfo.data_buf = data_buf;
- tmpInfo.path_cfg_name = (char *) CS_HDCP_KEY_FILE_PATH_CFG;
- tmpInfo.off_cfg_name = (char *) CS_HDCP_KEY_FILE_OFFSET_CFG;
- tmpInfo.op_cb = SaveDataToFile;
-
- return HandleRWData(&tmpInfo);
-}
-
-static int GetHDMIEdidFromFile(int rd_off, int rd_size, int port,
- unsigned char data_buf[])
-{
- RWDataInfo tmpInfo;
-
- tmpInfo.op_type = CC_OP_TYPE_READ;
- tmpInfo.data_type = CC_DATA_TYPE_CHAR;
- tmpInfo.max_size = SSM_HDMI_EDID_SIZE;
- tmpInfo.rw_off = rd_off;
- tmpInfo.rw_size = rd_size;
- tmpInfo.data_buf = data_buf;
- switch (port) {
- case 1:
- tmpInfo.path_cfg_name = (char *) CS_HDMI_PORT1_EDID_FILE_PATH_CFG;
- break;
- case 2:
- tmpInfo.path_cfg_name = (char *) CS_HDMI_PORT2_EDID_FILE_PATH_CFG;
- break;
- case 3:
- tmpInfo.path_cfg_name = (char *) CS_HDMI_PORT3_EDID_FILE_PATH_CFG;
- break;
- default:
- LOGE("%s, port is error, =%d\n", "TV", port);
- tmpInfo.path_cfg_name = (char *) CS_HDMI_EDID_FILE_PATH_CFG;
- break;
- }
- tmpInfo.off_cfg_name = (char *) CS_HDMI_EDID_FILE_OFFSET_CFG;
- tmpInfo.op_cb = ReadDataFromFile;
-
- return HandleRWData(&tmpInfo);
-}
-
-/**************************** end critical data op functions ****************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <cutils/properties.h>
+
+#include <netinet/ether.h>
+#include <netinet/if_ether.h>
+
+#include <netutils/ifc.h>
+#include <netutils/dhcp.h>
+
+#include "tvconfig/tvconfig.h"
+#include "CTvSettingCfg.h"
+#include "TvKeyData.h"
+
+#define CC_MAX_KEY_DATA_SIZE (2048)
+#define CC_MAX_FILE_PATH (256)
+
+#define CC_MAC_LEN (6)
+#define CC_HDCP_KEY_TOTAL_SIZE (368)
+#define CC_HDCP_KEY_HEAD_SIZE (40)
+#define CC_HDCP_KEY_CONTENT_SIZE (CC_HDCP_KEY_TOTAL_SIZE - CC_HDCP_KEY_HEAD_SIZE)
+
+#define CC_CUSTOMER_HDMI_EDID_TOTAL_SIZE (SSM_HDMI_EDID_SIZE + 4)
+
+#define CS_MAC_ADDRESS_STARTWRK_EN_CFG "ssm.macaddr.startwork.en"
+#define CS_BARCODE_LEN_CFG "ssm.barcode.len"
+
+#define CS_HDCP_KEY_EN_CFG "ssm.handle.hdcpkey.en"
+#define CS_HDCP_KEY_DEMO_EN_CFG "ssm.handle.hdcpkey.demo.en"
+#define CS_HDCP_KEY_FILE_PATH_CFG "ssm.handle.hdcpkey.file.path"
+#define CS_HDCP_KEY_FILE_OFFSET_CFG "ssm.handle.hdcpkey.file.offset"
+#define CS_HDCP_KEY_HEADER_EN_CFG "ssm.handle.hdcpkey.header.en"
+
+
+#define CS_HDMI_EDID_EN_CFG "ssm.handle.hdmi.edid.en"
+#define CS_HDMI_EDID_USE_CFG "ssm.handle.hdmi.edid.use"
+#define CS_HDMI_EDID_FILE_PATH_CFG "ssm.handle.hdmi.edid.file.path"
+#define CS_HDMI_PORT1_EDID_FILE_PATH_CFG "ssm.handle.hdmi.port1.edid.file.path"
+#define CS_HDMI_PORT2_EDID_FILE_PATH_CFG "ssm.handle.hdmi.port2.edid.file.path"
+#define CS_HDMI_PORT3_EDID_FILE_PATH_CFG "ssm.handle.hdmi.port3.edid.file.path"
+#define CS_HDMI_EDID_FILE_OFFSET_CFG "ssm.handle.hdmi.edid.file.offset"
+
+#define CS_RGBOGO_FILE_PATH_CFG "ssm.rgbogo.file.path"
+#define CS_RGBOGO_FILE_OFFSET_CFG "ssm.rgbogo.file.offset"
+
+#define CS_AUDIO_NOLINEPOINTS_FILE_PATH_CFG "ssm.audio.nolinepoints.file.path"
+#define CS_AUDIO_NOLINEPOINTS_FILE_OFFSET_CFG "ssm.audio.nolinepoints.file.offset"
+
+static unsigned char mHDCPKeyDefHeaderBuf[CC_HDCP_KEY_HEAD_SIZE] = {
+ //40 bytes
+ 0x53, 0x4B, 0x59, 0x01, 0x00, 0x10, 0x0D, 0x15, 0x3A, 0x8E, // 000~009
+ 0x99, 0xEE, 0x2A, 0x55, 0x58, 0xEE, 0xED, 0x4B, 0xBE, 0x00, // 010~019
+ 0x74, 0xA9, 0x00, 0x10, 0x0A, 0x21, 0xE3, 0x30, 0x66, 0x34, // 020~029
+ 0xCE, 0x9C, 0xC7, 0x8B, 0x51, 0x27, 0xF9, 0x0B, 0xAD, 0x09, // 030~039
+};
+
+static unsigned char mDefHDCPKeyContentBuf[CC_HDCP_KEY_CONTENT_SIZE] = {
+ //328 bytes
+ 0x5F, 0x4D, 0xC2, 0xCA, 0xA2, 0x13, 0x06, 0x18, 0x8D, 0x34, // 000~009
+ 0x82, 0x46, 0x2D, 0xC9, 0x4B, 0xB0, 0x1C, 0xDE, 0x3D, 0x49, // 010~019
+ 0x39, 0x58, 0xEF, 0x2B, 0x68, 0x39, 0x71, 0xC9, 0x4D, 0x25, // 020~029
+ 0xE9, 0x75, 0x4D, 0xAC, 0x62, 0xF5, 0xF5, 0x87, 0xA0, 0xB2, // 030~039
+ 0x4A, 0x60, 0xD3, 0xF1, 0x09, 0x3A, 0xB2, 0x3E, 0x19, 0x4F, // 040~049
+ 0x3B, 0x1B, 0x2F, 0x85, 0x14, 0x28, 0x44, 0xFC, 0x69, 0x6F, // 050~059
+ 0x50, 0x42, 0x81, 0xBF, 0x7C, 0x2B, 0x3A, 0x17, 0x2C, 0x15, // 060~069
+ 0xE4, 0x93, 0x77, 0x74, 0xE8, 0x1F, 0x1C, 0x38, 0x54, 0x49, // 070~079
+ 0x10, 0x64, 0x5B, 0x7D, 0x90, 0x3D, 0xA0, 0xE1, 0x8B, 0x67, // 080~089
+ 0x5C, 0x19, 0xE6, 0xCA, 0x9D, 0xE9, 0x68, 0x5A, 0xB5, 0x62, // 090~099
+ 0xDF, 0xA1, 0x28, 0xBC, 0x68, 0x82, 0x9A, 0x22, 0xC4, 0xDC, // 100~109
+ 0x48, 0x85, 0x0F, 0xF1, 0x3E, 0x05, 0xDD, 0x1B, 0x2D, 0xF5, // 120~119
+ 0x49, 0x3A, 0x15, 0x29, 0xE7, 0xB6, 0x0B, 0x2A, 0x40, 0xE3, // 120~129
+ 0xB0, 0x89, 0xD5, 0x75, 0x84, 0x2E, 0x76, 0xE7, 0xBC, 0x63, // 130~139
+ 0x67, 0xE3, 0x57, 0x67, 0x86, 0x81, 0xF4, 0xD7, 0xEA, 0x4D, // 140~149
+ 0x89, 0x8E, 0x37, 0x95, 0x59, 0x1C, 0x8A, 0xCD, 0x79, 0xF8, // 150~159
+ 0x4F, 0x82, 0xF2, 0x6C, 0x7E, 0x7F, 0x79, 0x8A, 0x6B, 0x90, // 160~169
+ 0xC0, 0xAF, 0x4C, 0x8D, 0x43, 0x47, 0x1F, 0x9A, 0xF1, 0xBB, // 170~179
+ 0x88, 0x64, 0x49, 0x14, 0x50, 0xD1, 0xC3, 0xDF, 0xA6, 0x87, // 180~189
+ 0xA0, 0x15, 0x98, 0x51, 0x81, 0xF5, 0x97, 0x55, 0x10, 0x4A, // 190~199
+ 0x99, 0x30, 0x54, 0xA4, 0xFC, 0xDA, 0x0E, 0xAC, 0x6A, 0xFA, // 200~209
+ 0x90, 0xEE, 0x12, 0x70, 0x69, 0x74, 0x63, 0x46, 0x63, 0xFB, // 210~219
+ 0xE6, 0x1F, 0x72, 0xEC, 0x43, 0x5D, 0x50, 0xFF, 0x03, 0x4F, // 220~229
+ 0x05, 0x33, 0x88, 0x36, 0x93, 0xE4, 0x72, 0xD5, 0xCC, 0x34, // 230~239
+ 0x52, 0x96, 0x15, 0xCE, 0xD0, 0x32, 0x52, 0x41, 0x4F, 0xBC, // 240~249
+ 0x2D, 0xDF, 0xC5, 0xD6, 0x7F, 0xD5, 0x74, 0xCE, 0x51, 0xDC, // 250~259
+ 0x10, 0x5E, 0xF7, 0xAA, 0x4A, 0x2D, 0x20, 0x9A, 0x17, 0xDD, // 260~269
+ 0x30, 0x89, 0x71, 0x82, 0x36, 0x50, 0x09, 0x1F, 0x7C, 0xF3, // 270~279
+ 0x12, 0xE9, 0x43, 0x10, 0x5F, 0x51, 0xBF, 0xB8, 0x45, 0xA8, // 280~289
+ 0x5A, 0x8D, 0x3F, 0x77, 0xE5, 0x96, 0x73, 0x68, 0xAB, 0x73, // 290~299
+ 0xE5, 0x4C, 0xFB, 0xE5, 0x98, 0xB9, 0xAE, 0x74, 0xEB, 0x51, // 300~309
+ 0xDB, 0x91, 0x07, 0x7B, 0x66, 0x02, 0x9B, 0x79, 0x03, 0xC5, // 310~319
+ 0x34, 0x1C, 0x58, 0x13, 0x31, 0xD2, 0x4A, 0xEC, // 320~327
+};
+
+static int CreateMacAddressStartWorkThread();
+
+static int GetSSMHandleHDCPKeyEnableCFG();
+static int GetSSMHandleHDCPKeyHeaderEnableCFG();
+static int GetSSMHandleHDCPKeyDemoEnableCFG();
+static int SSMSetDefaultHDCPKey(unsigned char hdcp_key_buf[]);
+static int RealHandleHDCPKey(unsigned char hdcp_key_buf[]);
+static int GetHDCPKeyFromFile(int rd_off, int rd_size,
+ unsigned char data_buf[]);
+static int SaveHDCPKeyToFile(int wr_off, int wr_size, unsigned char data_buf[]);
+
+static int GetHDMIEdidFromFile(int rd_off, int rd_size, int port,
+ unsigned char data_buf[]);
+static int RealHandleHDMIEdid(unsigned char hdmi_edid_buf[]);
+static int GetSSMHandleHDMIEdidByCustomerEnableCFG();
+static int AppendEdidPrefixCode(unsigned char customer_hdmi_edid_buf[],
+ unsigned char hdmi_edid_buf[]);
+
+static int GetRGBOGOFromFile(int rd_off, int rd_size, unsigned char data_buf[]);
+static int SaveRGBOGOToFile(int wr_off, int wr_size, unsigned char data_buf[]);
+
+static int GetAudioNoLinePointsDataFromFile(int offset, int size,
+ unsigned char data_buf[]);
+static int SaveAudioNoLinePointsDataToFile(int offset, int size,
+ unsigned char data_buf[]);
+
+static int TransStringToHex(int data_cnt, char data_buf[],
+ unsigned char hex_buf[])
+{
+ int i = 0, j = 0, tmp_val = 0;
+ char tmp_buf[3] = { 0, 0, 0 };
+
+ while (i < data_cnt) {
+ tmp_val = 0;
+ tmp_buf[0] = data_buf[i];
+ tmp_buf[1] = data_buf[i + 1];
+ tmp_val = strtoul(tmp_buf, NULL, 16);
+ hex_buf[j] = tmp_val;
+ //LOGD("%s, hex_buf[%d] = 0x%x\n", __FUNCTION__, j, hex_buf[j]);
+ i += 2;
+ j += 1;
+ }
+
+ return j;
+}
+
+static int TransToHexString(int hex_cnt, char data_buf[],
+ unsigned char hex_buf[])
+{
+ int i = 0, j = 0;
+ char tmp_buf[17] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+
+ data_buf[0] = 0;
+ for (i = 0; i < hex_cnt; i++) {
+ sprintf(tmp_buf, "%02X", (unsigned char) hex_buf[i]);
+ strcat(data_buf, tmp_buf);
+ }
+
+ return 2 * hex_cnt;
+}
+
+int ReadKeyData(const char *key_name, unsigned int rd_data_len, unsigned char data_buf[])
+{
+ FILE *dev_fp = NULL;
+ int i = 0, rd_cnt = 0;
+ char tmp_ori_buf[CC_MAX_KEY_DATA_SIZE];
+ unsigned char tmp_tran_buf[CC_MAX_KEY_DATA_SIZE];
+
+ dev_fp = fopen(CS_KEY_DATA_NAME_DEV_PATH, "w");
+ if (dev_fp == NULL) {
+ LOGE("%s, open %s ERROR(%s)!!\n", __FUNCTION__,
+ CS_KEY_DATA_NAME_DEV_PATH, strerror(errno));
+ return -1;
+ }
+
+ fprintf(dev_fp, "%s", key_name);
+
+ fclose(dev_fp);
+ dev_fp = NULL;
+
+ dev_fp = fopen(CS_KEY_DATA_READ_DEV_PATH, "r");
+ if (dev_fp == NULL) {
+ LOGE("%s, open %s ERROR(%s)!!\n", __FUNCTION__,
+ CS_KEY_DATA_READ_DEV_PATH, strerror(errno));
+ return -1;
+ }
+
+ memset((void *)tmp_ori_buf, 0, CC_MAX_KEY_DATA_SIZE);
+ memset((void *)tmp_tran_buf, 0, CC_MAX_KEY_DATA_SIZE);
+ fscanf(dev_fp, "%s", tmp_ori_buf);
+
+ rd_cnt = strlen(tmp_ori_buf);
+ rd_cnt = TransStringToHex(rd_cnt, tmp_ori_buf, tmp_tran_buf);
+
+ fclose(dev_fp);
+ dev_fp = NULL;
+
+ if (rd_cnt != rd_data_len) {
+ return 0;
+ }
+
+ memcpy(data_buf, tmp_tran_buf, rd_cnt);
+ return rd_cnt;
+}
+
+int WriteKeyData(const char *key_name, int wr_size, char data_buf[])
+{
+ FILE *dev_fp = NULL;
+ int wr_cnt = 0;
+
+ dev_fp = fopen(CS_KEY_DATA_NAME_DEV_PATH, "w");
+ if (dev_fp == NULL) {
+ LOGE("%s, open %s ERROR(%s)!!\n", __FUNCTION__,
+ CS_KEY_DATA_NAME_DEV_PATH, strerror(errno));
+ return -1;
+ }
+
+ fprintf(dev_fp, "%s", key_name);
+
+ fclose(dev_fp);
+ dev_fp = NULL;
+
+ dev_fp = fopen(CS_KEY_DATA_WRITE_DEV_PATH, "w");
+ if (dev_fp == NULL) {
+ LOGE("%s, open %s ERROR(%s)!!\n", __FUNCTION__,
+ CS_KEY_DATA_WRITE_DEV_PATH, strerror(errno));
+ return -1;
+ }
+
+ wr_cnt = fwrite(data_buf, 1, wr_size, dev_fp);
+
+ fclose(dev_fp);
+ dev_fp = NULL;
+
+ return wr_cnt;
+}
+
+int KeyData_GetMacAddressDataLen()
+{
+ return CC_MAC_LEN;
+}
+
+int KeyData_ReadMacAddress(unsigned char data_buf[])
+{
+ int i = 0, rd_size = 0;
+ int data_i_buf[CC_MAC_LEN] = { 0, 0, 0, 0, 0, 0 };
+ unsigned char tmp_buf[128] = { 0 };
+
+ rd_size = ReadKeyData(CS_MAC_KEY_NAME, 17, tmp_buf);
+ if (rd_size == 17) {
+ sscanf((char *) tmp_buf, "%02x:%02x:%02x:%02x:%02x:%02x",
+ &data_i_buf[0], &data_i_buf[1], &data_i_buf[2], &data_i_buf[3],
+ &data_i_buf[4], &data_i_buf[5]);
+ for (i = 0; i < sizeof(data_i_buf); i++) {
+ data_buf[i] = data_i_buf[i] & 0xFF;
+ }
+ }
+
+ return KeyData_GetMacAddressDataLen();
+}
+
+int KeyData_SaveMacAddress(unsigned char data_buf[])
+{
+ int tmp_ret = 0, wr_size = 0;
+ unsigned char hex_buf[128] = { 0 };
+ char tmp_buf[128] = { 0 };
+
+ sprintf((char *) hex_buf, "%02x:%02x:%02x:%02x:%02x:%02x", data_buf[0],
+ data_buf[1], data_buf[2], data_buf[3], data_buf[4], data_buf[5]);
+
+ TransToHexString(strlen((char *) hex_buf), tmp_buf, hex_buf);
+
+ wr_size = strlen(tmp_buf);
+ tmp_ret = WriteKeyData(CS_MAC_KEY_NAME, wr_size, tmp_buf);
+ if (tmp_ret != wr_size) {
+ return -1;
+ }
+
+ CreateMacAddressStartWorkThread();
+
+ return 0;
+}
+
+static int gSSMBarCodeLen = -1;
+int KeyData_GetBarCodeDataLen()
+{
+ const char *config_value;
+
+ if (gSSMBarCodeLen <= 0) {
+ config_value = config_get_str("TV", CS_BARCODE_LEN_CFG, "null");
+ if (strcmp(config_value, "null") == 0) {
+ gSSMBarCodeLen = 32;
+ } else {
+ gSSMBarCodeLen = strtol(config_value, NULL, 10);
+ }
+ }
+
+ return gSSMBarCodeLen;
+}
+
+int KeyData_ReadBarCode(unsigned char data_buf[])
+{
+ int rd_size = 0, tmp_len = 0;
+ unsigned char tmp_buf[CC_MAX_KEY_DATA_SIZE] = { 0 };
+
+ tmp_len = KeyData_GetBarCodeDataLen();
+ rd_size = ReadKeyData(CS_BARCODE_KEY_NAME, tmp_len, tmp_buf);
+ LOGD("%s, rd_size = %d\n", __FUNCTION__, rd_size);
+ if (rd_size == tmp_len) {
+ memcpy(data_buf, tmp_buf, tmp_len);
+ }
+
+ return rd_size;
+}
+
+int KeyData_SaveBarCode(unsigned char data_buf[])
+{
+ int tmp_len = 0, wr_size = 0;
+ char tmp_buf[512] = { 0 };
+
+ tmp_len = KeyData_GetBarCodeDataLen();
+
+ TransToHexString(tmp_len, tmp_buf, data_buf);
+
+ wr_size = strlen(tmp_buf);
+ tmp_len = WriteKeyData(CS_BARCODE_KEY_NAME, wr_size, tmp_buf);
+ if (tmp_len != wr_size) {
+ return -1;
+ }
+
+ return 0;
+}
+
+int SSMReadHDCPKey(unsigned char hdcp_key_buf[])
+{
+ int tmp_ret = 0, rd_size = 0;
+ unsigned char tmp_buf[CC_HDCP_KEY_TOTAL_SIZE] = { 0 };
+
+ tmp_ret = GetHDCPKeyFromFile(0, CC_HDCP_KEY_TOTAL_SIZE, hdcp_key_buf);
+ if (tmp_ret < 0) {
+ rd_size = ReadKeyData(CS_RX_HDCP_KEY_NAME, CC_HDCP_KEY_TOTAL_SIZE, tmp_buf);
+ LOGD("%s, rd_size = %d\n", __FUNCTION__, rd_size);
+ if (rd_size == CC_HDCP_KEY_TOTAL_SIZE) {
+ memcpy(hdcp_key_buf, tmp_buf, CC_HDCP_KEY_TOTAL_SIZE);
+ }
+
+ return rd_size;
+ }
+
+ return CC_HDCP_KEY_TOTAL_SIZE;
+}
+
+int SSMReadHDCPKeyExcludingHeader(unsigned char hdcp_key_buf[])
+{
+ int tmp_ret = 0, rd_size = 0;
+ unsigned char tmp_buf[CC_HDCP_KEY_CONTENT_SIZE] = { 0 };
+
+ tmp_ret = GetHDCPKeyFromFile(0, CC_HDCP_KEY_CONTENT_SIZE, hdcp_key_buf);
+ if (tmp_ret < 0) {
+ LOGD("%s, GetHDCPKeyFromFile error = %d\n", __FUNCTION__, tmp_ret);
+ return tmp_ret;
+ }
+
+ return CC_HDCP_KEY_CONTENT_SIZE;
+}
+
+
+int SSMSaveHDCPKey(unsigned char hdcp_key_buf[])
+{
+ int tmp_ret = 0, wr_size = 0;
+ char tmp_buf[CC_MAX_KEY_DATA_SIZE] = { 0 };
+
+ tmp_ret = SaveHDCPKeyToFile(0, CC_HDCP_KEY_TOTAL_SIZE, hdcp_key_buf);
+ if (tmp_ret < 0) {
+ TransToHexString(CC_HDCP_KEY_TOTAL_SIZE, tmp_buf, hdcp_key_buf);
+
+ wr_size = strlen(tmp_buf);
+ tmp_ret = WriteKeyData(CS_RX_HDCP_KEY_NAME, wr_size, tmp_buf);
+ if (tmp_ret != wr_size) {
+ tmp_ret = -1;
+ }
+ }
+
+ return tmp_ret;
+}
+
+int SSMSetHDCPKey()
+{
+ int i = 0;
+ unsigned char hdcp_key_buf[CC_HDCP_KEY_TOTAL_SIZE];
+ unsigned char *hdcp_key_head_ptr = NULL;
+
+ if (GetSSMHandleHDCPKeyEnableCFG() == 1) {
+ if (GetSSMHandleHDCPKeyDemoEnableCFG() == 1) {
+ return SSMSetDefaultHDCPKey(hdcp_key_buf);
+ } else if (GetSSMHandleHDCPKeyHeaderEnableCFG() == 1) {
+ LOGD("%s, handle hdcp key excluding header.\n", __FUNCTION__);
+ //copy header
+ hdcp_key_head_ptr = mHDCPKeyDefHeaderBuf;
+ memcpy(hdcp_key_buf, hdcp_key_head_ptr, CC_HDCP_KEY_HEAD_SIZE);
+ //load content and copy, then set
+ unsigned char hdcp_key_content_buf[CC_HDCP_KEY_CONTENT_SIZE];
+ if (SSMReadHDCPKeyExcludingHeader(hdcp_key_content_buf) == CC_HDCP_KEY_CONTENT_SIZE) {
+ memcpy(hdcp_key_buf + 40, hdcp_key_content_buf, CC_HDCP_KEY_CONTENT_SIZE);
+ LOGD("%s, using ssm's hdcp key.\n", __FUNCTION__);
+ return RealHandleHDCPKey(hdcp_key_buf);
+ }
+ } else {
+ if (SSMReadHDCPKey(hdcp_key_buf) == CC_HDCP_KEY_TOTAL_SIZE) {
+ LOGD("%s, using ssm's hdcp key.\n", __FUNCTION__);
+ return RealHandleHDCPKey(hdcp_key_buf);
+ }
+ }
+ }
+
+ return -1;
+}
+
+int SSMRefreshHDCPKey()
+{
+ int ret = -1;
+ ret = SSMSetHDCPKey();
+ system ( "/system/bin/dec" );
+ return ret;
+}
+
+int SSMGetHDCPKeyDataLen()
+{
+ return CC_HDCP_KEY_TOTAL_SIZE;
+}
+
+//hdmi edid
+int SSMSetHDMIEdid(int port)
+{
+ int i = 0;
+ unsigned char customer_hdmi_edid_buf[CC_CUSTOMER_HDMI_EDID_TOTAL_SIZE];
+ unsigned char hdmi_edid_buf[SSM_HDMI_EDID_SIZE];
+
+ if (port < 1 && port > SSM_HDMI_PORT_MAX) {
+ LOGD("%s, hdmi port error.%d\n", __FUNCTION__, port);
+ return -1;
+ }
+
+ if (GetSSMHandleHDMIEdidByCustomerEnableCFG() == 1) {
+ if (SSMReadHDMIEdid(port, hdmi_edid_buf) == 0) {
+ LOGD("%s, using ssm's hdmi edid.\n", __FUNCTION__);
+ LOGD("%s, begin to write hdmi edid:0x%x, 0x%x, 0x%x, 0x%x.\n",
+ __FUNCTION__, hdmi_edid_buf[8], hdmi_edid_buf[9],
+ hdmi_edid_buf[10], hdmi_edid_buf[255]);
+ if (AppendEdidPrefixCode(customer_hdmi_edid_buf, hdmi_edid_buf)
+ == 0)
+ ;
+ return RealHandleHDMIEdid(customer_hdmi_edid_buf);
+ }
+ }
+
+ return -1;
+}
+
+int SSMReadHDMIEdid(int port, unsigned char hdmi_edid_buf[])
+{
+ int tmp_ret = 0;
+ LOGD("%s, read hdmi edid from bin file.\n", __FUNCTION__);
+ tmp_ret = GetHDMIEdidFromFile(0, SSM_HDMI_EDID_SIZE, port, hdmi_edid_buf);
+ if (tmp_ret < 0) {
+ LOGD("%s, read hdmi edid error.\n", __FUNCTION__);
+ } else {
+ LOGD("%s, 0x%x, 0x%x, 0x%x, 0x%x.\n", __FUNCTION__, hdmi_edid_buf[8],
+ hdmi_edid_buf[9], hdmi_edid_buf[10], hdmi_edid_buf[255]);
+ }
+ return tmp_ret;
+}
+
+int KeyData_SaveProjectID(int rw_val)
+{
+ int tmp_ret = 0, wr_size = 0;
+ char tmp_buf[64] = { 0 };
+
+ sprintf(tmp_buf, "%08X", rw_val);
+
+ wr_size = strlen(tmp_buf);
+ tmp_ret = WriteKeyData(CS_PROJECT_ID_KEY_NAME, wr_size, tmp_buf);
+ if (tmp_ret != wr_size) {
+ return -1;
+ }
+
+ return 0;
+}
+
+int KeyData_ReadProjectID()
+{
+ int rd_size = 0, tmp_val = 0;
+ unsigned char tmp_buf[64] = { 0 };
+
+ rd_size = ReadKeyData(CS_PROJECT_ID_KEY_NAME, 4, tmp_buf);
+ LOGD("%s, rd_size = %d\n", __FUNCTION__, rd_size);
+ if (rd_size == 4) {
+ tmp_val = 0;
+ tmp_val |= tmp_buf[0] << 24;
+ tmp_val |= tmp_buf[1] << 16;
+ tmp_val |= tmp_buf[2] << 8;
+ tmp_val |= tmp_buf[3] << 0;
+ }
+
+ return tmp_val;
+}
+
+int SSMSaveRGBOGOValue(int offset, int size, unsigned char data_buf[])
+{
+ return SaveRGBOGOToFile(offset, size, data_buf);
+}
+
+int SSMReadRGBOGOValue(int offset, int size, unsigned char data_buf[])
+{
+ return GetRGBOGOFromFile(offset, size, data_buf);
+}
+
+int SSMSaveAudioNoLinePoints(int offset, int size, unsigned char tmp_buf[])
+{
+ return SaveAudioNoLinePointsDataToFile(offset, size, tmp_buf);
+}
+
+int SSMReadAudioNoLinePoints(int offset, int size, unsigned char tmp_buf[])
+{
+ return GetAudioNoLinePointsDataFromFile(offset, size, tmp_buf);
+}
+
+/**************************** start mac address static functions ****************************/
+#define CC_ERR_THREAD_ID (0)
+
+static pthread_t mMacAddressStartWorkThreadID = CC_ERR_THREAD_ID;
+
+static volatile unsigned int mMacAddressLow = -1;
+static volatile unsigned int mMacAddressHigh = -1;
+static volatile int mMacAddressStartWorkThreadExecFlag = -1;
+static volatile int mMacAddressStartWorkThreadTurnOnFlag = -1;
+
+static pthread_mutex_t mac_address_low_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t mac_address_high_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t mac_address_exec_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t mac_address_turnon_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+static int GetSSMMacAddressStartWorkEnableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_MAC_ADDRESS_STARTWRK_EN_CFG, "null");
+ if (strcmp(config_value, "null") == 0) {
+ LOGD(
+ "%s, get config is \"%s\", return 0 to not enable mac address start work.\n",
+ __FUNCTION__, config_value);
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+static unsigned int SetMacAddressLow(unsigned int low_val)
+{
+ unsigned int tmp_val;
+
+ pthread_mutex_lock(&mac_address_low_mutex);
+
+ tmp_val = mMacAddressLow;
+
+ mMacAddressLow = low_val;
+
+ pthread_mutex_unlock(&mac_address_low_mutex);
+
+ return tmp_val;
+}
+
+static unsigned int GetMacAddressLow()
+{
+ unsigned int tmp_val = 0;
+
+ pthread_mutex_lock(&mac_address_low_mutex);
+
+ tmp_val = mMacAddressLow;
+
+ pthread_mutex_unlock(&mac_address_low_mutex);
+
+ return tmp_val;
+}
+
+static unsigned int SetMacAddressHigh(unsigned int high_val)
+{
+ unsigned int tmp_val;
+
+ pthread_mutex_lock(&mac_address_high_mutex);
+
+ tmp_val = mMacAddressHigh;
+
+ mMacAddressHigh = high_val;
+
+ pthread_mutex_unlock(&mac_address_high_mutex);
+
+ return tmp_val;
+}
+
+static unsigned int GetMacAddressHigh()
+{
+ int tmp_val = 0;
+
+ pthread_mutex_lock(&mac_address_high_mutex);
+
+ tmp_val = mMacAddressHigh;
+
+ pthread_mutex_unlock(&mac_address_high_mutex);
+
+ return tmp_val;
+}
+
+static int SetMacAddressStartWorkThreadExecFlag(int tmp_flag)
+{
+ int tmp_val;
+
+ pthread_mutex_lock(&mac_address_exec_mutex);
+
+ tmp_val = mMacAddressStartWorkThreadExecFlag;
+
+ mMacAddressStartWorkThreadExecFlag = tmp_flag;
+
+ pthread_mutex_unlock(&mac_address_exec_mutex);
+
+ return tmp_val;
+}
+
+static int GetMacAddressStartWorkThreadExecFlag()
+{
+ int tmp_val = 0;
+
+ pthread_mutex_lock(&mac_address_exec_mutex);
+
+ tmp_val = mMacAddressStartWorkThreadExecFlag;
+
+ pthread_mutex_unlock(&mac_address_exec_mutex);
+
+ return tmp_val;
+}
+
+static int SetMacAddressStartWorkThreadTurnOnFlag(int tmp_flag)
+{
+ int tmp_val;
+
+ pthread_mutex_lock(&mac_address_turnon_mutex);
+
+ tmp_val = mMacAddressStartWorkThreadTurnOnFlag;
+
+ mMacAddressStartWorkThreadTurnOnFlag = tmp_flag;
+
+ pthread_mutex_unlock(&mac_address_turnon_mutex);
+
+ return tmp_val;
+}
+
+static int GetMacAddressStartWorkThreadTurnOnFlag()
+{
+ int tmp_val = 0;
+
+ pthread_mutex_lock(&mac_address_turnon_mutex);
+
+ tmp_val = mMacAddressStartWorkThreadTurnOnFlag;
+
+ pthread_mutex_unlock(&mac_address_turnon_mutex);
+
+ return tmp_val;
+}
+
+static void *SSMMacAddressStartWorkMainApp(void *data)
+{
+ unsigned int curMacAddrLow = 0, curMacAddrHigh = 0;
+ int p_status;
+ char ssm_addr_str[128];
+ const char *iname = "eth0";
+ pid_t pid;
+
+ LOGD("%s, entering...\n", __FUNCTION__);
+
+ if (GetSSMMacAddressStartWorkEnableCFG() == 0) {
+ LOGE("%s, ssm mac address start work is not enable.\n", "TV");
+ return NULL;
+ }
+
+ curMacAddrLow = GetMacAddressLow();
+ curMacAddrHigh = GetMacAddressHigh();
+
+ while (GetMacAddressStartWorkThreadTurnOnFlag() == 1) {
+ pid = fork();
+ if (pid == 0) {
+ if (execl("/system/bin/stop", "stop_eth_dhcpcd", "eth_dhcpcd", NULL)
+ < 0) {
+ _exit(-1);
+ }
+ _exit(0);
+ }
+ waitpid(pid, &p_status, 0);
+
+ ifc_init();
+
+ ifc_down(iname);
+
+ sprintf(ssm_addr_str, "%02x:%02x:%02x:%02x:%02x:%02x",
+ ((curMacAddrLow >> 0) & 0xFF), ((curMacAddrLow >> 8) & 0xFF),
+ ((curMacAddrLow >> 16) & 0xFF), ((curMacAddrLow >> 24) & 0xFF),
+ ((curMacAddrHigh >> 0) & 0xFF), ((curMacAddrHigh >> 8) & 0xFF));
+ struct ether_addr *addr = ether_aton(ssm_addr_str);
+ if (addr) {
+ ifc_set_hwaddr(iname, addr->ether_addr_octet);
+ }
+
+ ifc_up(iname);
+
+ ifc_close();
+
+ if (curMacAddrLow == GetMacAddressLow()
+ && curMacAddrHigh == GetMacAddressHigh()) {
+ break;
+ }
+
+ curMacAddrLow = GetMacAddressLow();
+ curMacAddrHigh = GetMacAddressHigh();
+ }
+
+ return NULL;
+}
+
+static void *SSMMacAddressStartWorkThreadMain(void *data)
+{
+ void *tmp_ret = NULL;
+
+ SetMacAddressStartWorkThreadExecFlag(1);
+
+ tmp_ret = SSMMacAddressStartWorkMainApp(NULL);
+
+ SetMacAddressStartWorkThreadExecFlag(0);
+
+ return tmp_ret;
+}
+
+static int KillMacAddressStartWorkThread()
+{
+ int i = 0, tmp_timeout_count = 600;
+
+ SetMacAddressStartWorkThreadTurnOnFlag(0);
+ while (1) {
+ if (GetMacAddressStartWorkThreadExecFlag() == 0) {
+ break;
+ }
+
+ if (i >= tmp_timeout_count) {
+ break;
+ }
+
+ i++;
+
+ usleep(100 * 1000);
+ }
+
+ if (i == tmp_timeout_count) {
+ LOGE(
+ "%s, we have try %d times, but the mac address start work thread's exec flag is still(%d)!!!\n",
+ "TV", tmp_timeout_count,
+ GetMacAddressStartWorkThreadExecFlag());
+ return -1;
+ }
+
+ pthread_join(mMacAddressStartWorkThreadID, NULL);
+ mMacAddressStartWorkThreadID = CC_ERR_THREAD_ID;
+
+ LOGD("%s, kill the mac address start work thread sucess.\n", __FUNCTION__);
+
+ return 0;
+}
+
+static int CreateMacAddressStartWorkThread()
+{
+ unsigned int macAddrLow = 0, macAddrHigh = 0;
+ pthread_attr_t attr;
+ struct sched_param param;
+ unsigned char ssm_addr_buf[16] = { 0, 0, 0, 0, 0, 0 };
+
+ if (KeyData_ReadMacAddress(ssm_addr_buf) < 0) {
+ return -1;
+ }
+
+ macAddrLow = 0;
+ macAddrLow |= ((ssm_addr_buf[0] & 0xFF) << 0);
+ macAddrLow |= ((ssm_addr_buf[1] & 0xFF) << 8);
+ macAddrLow |= ((ssm_addr_buf[2] & 0xFF) << 16);
+ macAddrLow |= ((ssm_addr_buf[3] & 0xFF) << 24);
+
+ macAddrHigh = 0;
+ macAddrHigh |= ((ssm_addr_buf[4] & 0xFF) << 0);
+ macAddrHigh |= ((ssm_addr_buf[5] & 0xFF) << 8);
+
+ if (mMacAddressStartWorkThreadID != CC_ERR_THREAD_ID) {
+ if (GetMacAddressStartWorkThreadExecFlag() == 1) {
+ SetMacAddressLow(macAddrLow);
+ SetMacAddressHigh(macAddrHigh);
+ return 0;
+ } else {
+ KillMacAddressStartWorkThread();
+ }
+ }
+
+ SetMacAddressLow(macAddrLow);
+ SetMacAddressHigh(macAddrHigh);
+ SetMacAddressStartWorkThreadTurnOnFlag(1);
+
+ pthread_attr_init(&attr);
+ pthread_attr_setschedpolicy(&attr, SCHED_RR);
+ param.sched_priority = 20;
+ pthread_attr_setschedparam(&attr, &param);
+
+ if (pthread_create(&mMacAddressStartWorkThreadID, &attr,
+ SSMMacAddressStartWorkThreadMain, NULL) < 0) {
+ pthread_attr_destroy(&attr);
+ mMacAddressStartWorkThreadID = CC_ERR_THREAD_ID;
+ return -1;
+ }
+
+ pthread_attr_destroy(&attr);
+
+ LOGD("%s, create channel select thread sucess.\n", __FUNCTION__);
+
+ return 0;
+}
+/**************************** end mac address static functions ****************************/
+
+/**************************** start hdcp key static functions ****************************/
+static int GetSSMHandleHDCPKeyEnableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_HDCP_KEY_EN_CFG, "null");
+#if 0
+ LOGD("%s, get \"%s\" is \"%s\".\n", __FUNCTION__, CS_HDCP_KEY_EN_CFG,
+ config_value);
+#endif
+ if (strcmp(config_value, "null") == 0) {
+ LOGD(
+ "%s, get config \"%s\" is \"%s\", return 0 to not enable handle hdcp key.\n",
+ __FUNCTION__, CS_HDCP_KEY_EN_CFG, config_value);
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+static int GetSSMHandleHDCPKeyDemoEnableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_HDCP_KEY_DEMO_EN_CFG, "null");
+#if 0
+ LOGD("%s, get \"%s\" is \"%s\".\n", __FUNCTION__, CS_HDCP_KEY_DEMO_EN_CFG,
+ config_value);
+#endif
+ if (strcmp(config_value, "null") == 0) {
+ LOGD(
+ "%s, get config \"%s\" is \"%s\", return 0 to not enable handle hdcp key demo.\n",
+ __FUNCTION__, CS_HDCP_KEY_DEMO_EN_CFG, config_value);
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+static int GetSSMHandleHDCPKeyHeaderEnableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_HDCP_KEY_HEADER_EN_CFG, "null");
+#if 1
+ LOGD("%s, get \"%s\" is \"%s\".\n", __FUNCTION__, CS_HDCP_KEY_HEADER_EN_CFG,
+ config_value);
+#endif
+ if (strcmp(config_value, "null") == 0) {
+ LOGD(
+ "%s, get config \"%s\" is \"%s\", return 0 to not enable handle hdcp key header.\n",
+ __FUNCTION__, CS_HDCP_KEY_HEADER_EN_CFG, config_value);
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+
+static int SSMSetDefaultHDCPKey(unsigned char hdcp_key_buf[])
+{
+ int i = 0;
+
+ for (i = 0; i < CC_HDCP_KEY_HEAD_SIZE; i++) {
+ hdcp_key_buf[i] = mHDCPKeyDefHeaderBuf[i];
+ }
+
+ for (i = 0; i < CC_HDCP_KEY_CONTENT_SIZE; i++) {
+ hdcp_key_buf[i + CC_HDCP_KEY_HEAD_SIZE] = mDefHDCPKeyContentBuf[i];
+ }
+
+ LOGD("%s, using default hdcp key.\n", __FUNCTION__);
+
+ return RealHandleHDCPKey(hdcp_key_buf);
+}
+
+static int RealHandleHDCPKey(unsigned char hdcp_key_buf[])
+{
+ int i = 0, dev_fd = -1;
+
+ if (hdcp_key_buf == NULL) {
+ return -1;
+ }
+
+ dev_fd = open("/sys/class/hdmirx/hdmirx0/edid", O_RDWR);
+ if (dev_fd < 0) {
+ LOGE("%s, open edid file ERROR(%s)!!\n", "TV", strerror(errno));
+ return -1;
+ }
+
+ if (write(dev_fd, hdcp_key_buf, CC_HDCP_KEY_TOTAL_SIZE) < 0) {
+ close(dev_fd);
+ dev_fd = -1;
+ LOGE("%s, write edid file ERROR(%s)!!\n", "TV", strerror(errno));
+
+ return -1;
+ }
+
+ close(dev_fd);
+ dev_fd = -1;
+ return 0;
+}
+
+/**************************** end hdcp key static functions ****************************/
+
+/**************************** start hdmi edid static functions ****************************/
+static int GetSSMHandleHDMIEdidByCustomerEnableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_HDMI_EDID_EN_CFG, "null");
+#if 0
+ LOGD("%s, get \"%s\" is \"%s\".\n", __FUNCTION__, CS_HDMI_EDID_EN_CFG,
+ config_value);
+#endif
+ if (strcmp(config_value, "null") == 0) {
+ LOGD(
+ "%s, get config \"%s\" is \"%s\", return 0 to not enable handle hdmi edid by customer.\n",
+ __FUNCTION__, CS_HDMI_EDID_EN_CFG, config_value);
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+static int RealHandleHDMIEdid(unsigned char customer_hdmi_edid_buf[])
+{
+ int i = 0, dev_fd = -1;
+
+ if (customer_hdmi_edid_buf == NULL) {
+ return -1;
+ }
+
+ dev_fd = open("/sys/class/hdmirx/hdmirx0/edid", O_RDWR);
+ if (dev_fd < 0) {
+ LOGE("%s, open edid file ERROR(%s)!!\n", "TV", strerror(errno));
+ return -1;
+ }
+
+ if (write(dev_fd, customer_hdmi_edid_buf, CC_CUSTOMER_HDMI_EDID_TOTAL_SIZE)
+ < 0) {
+ close(dev_fd);
+ dev_fd = -1;
+ LOGE("%s, write edid file ERROR(%s)!!\n", "TV", strerror(errno));
+
+ return -1;
+ }
+
+ close(dev_fd);
+ dev_fd = -1;
+ return 0;
+}
+
+static int AppendEdidPrefixCode(unsigned char customer_hdmi_edid_buf[],
+ unsigned char hdmi_edid_buf[])
+{
+ if (customer_hdmi_edid_buf == NULL || hdmi_edid_buf == NULL) {
+ LOGE("%s, Append hdmi edid's prefixCode ERROR(%s)!!\n", "TV",
+ strerror(errno));
+ return -1;
+ }
+ memset(customer_hdmi_edid_buf, 0,
+ sizeof(char) * CC_CUSTOMER_HDMI_EDID_TOTAL_SIZE);
+ customer_hdmi_edid_buf[0] = 'E';
+ customer_hdmi_edid_buf[1] = 'D';
+ customer_hdmi_edid_buf[2] = 'I';
+ customer_hdmi_edid_buf[3] = 'D';
+ memcpy(customer_hdmi_edid_buf + 4, hdmi_edid_buf,
+ CC_CUSTOMER_HDMI_EDID_TOTAL_SIZE - 4);
+ /*
+ LOGD("%s, customer_hdmi_edid_buf: %c,%c,%c,%c,%x,%x,%x,%x.\n", __FUNCTION__,
+ customer_hdmi_edid_buf[0],customer_hdmi_edid_buf[1],customer_hdmi_edid_buf[2],customer_hdmi_edid_buf[3],
+ customer_hdmi_edid_buf[12],customer_hdmi_edid_buf[13],customer_hdmi_edid_buf[14],customer_hdmi_edid_buf[15]);*/
+ /*
+ LOGD("%s, customer_hdmi_edid_buf: \n", __FUNCTION__);
+ int i, j;
+ for (i = 0; i < 16; i++) {
+ LOGD("[%2d] ", i);
+ for (j = 0; j < 16; j++) {
+ LOGD("0x%02lx, ", customer_hdmi_edid_buf[4 + (i*16 + j)]);
+ }
+ LOGD("\n");
+ }*/
+ return 0;
+}
+
+/**************************** end hdmi edid static functions ****************************/
+
+/**************************** start critical data op functions ****************************/
+#define CC_OP_TYPE_READ (0)
+#define CC_OP_TYPE_SAVE (1)
+#define CC_DATA_TYPE_CHAR (0)
+#define CC_DATA_TYPE_INT (1)
+
+typedef int (*op_fun_ptr)(char *, int, int, unsigned char *);
+
+typedef struct tagRWDataInfo {
+ int op_type;
+ int data_type;
+ int max_size;
+ int rw_off;
+ int rw_size;
+ void *data_buf;
+ char *path_cfg_name;
+ char *off_cfg_name;
+ op_fun_ptr op_cb;
+} RWDataInfo;
+
+static int GetFilePathCFG(char *key_str, char path_buf[])
+{
+ int tmp_ret = 0;
+ const char *cfg_value;
+
+ path_buf[0] = '\0';
+ cfg_value = config_get_str("TV", key_str, "");
+ strcpy(path_buf, cfg_value);
+#if 0
+ LOGD("%s, get \"%s\" is \"%s\".\n", "TV", key_str, path_buf);
+#endif
+ return tmp_ret;
+}
+
+static int GetFileOffsetCFG(char *key_str)
+{
+ const char *cfg_value;
+
+ cfg_value = config_get_str("TV", key_str, "null");
+#if 0
+ LOGD("%s, get \"%s\" is \"%s\".\n", "TV", key_str, cfg_value);
+#endif
+ if (strcmp(cfg_value, "null") == 0) {
+ LOGD("%s, get config \"%s\" is \"%s\", return 0 for default.\n", "TV",
+ key_str, cfg_value);
+ return 0;
+ }
+
+ return strtol(cfg_value, NULL, 10);
+}
+
+static int handleDataFilePath(char *file_name, int offset, int nsize,
+ char file_path[])
+{
+ if (file_name == NULL) {
+ LOGE("%s, file_name is NULL!!!\n", "TV");
+ return -1;
+ }
+
+ return 0;
+}
+
+static int ReadDataFromFile(char *file_name, int offset, int nsize,
+ unsigned char data_buf[])
+{
+ int device_fd = -1;
+ int tmp_ret = 0;
+ char *tmp_ptr = NULL;
+ char file_path[512] = { '\0' };
+
+ if (data_buf == NULL) {
+ LOGE("%s, data_buf is NULL!!!\n", "TV");
+ return -1;
+ }
+
+ tmp_ret = handleDataFilePath(file_name, offset, nsize, file_path);
+ if (tmp_ret < 0) {
+ tmp_ptr = NULL;
+ } else if (tmp_ret == 0) {
+ tmp_ptr = file_name;
+ } else if (tmp_ret == 1) {
+ tmp_ptr = file_path;
+ }
+
+ if (tmp_ptr == NULL) {
+ return -1;
+ }
+
+ device_fd = open(tmp_ptr, O_RDONLY);
+ if (device_fd < 0) {
+ LOGE("%s: open file \"%s\" error(%s).\n", "TV", file_name,
+ strerror(errno));
+ return -1;
+ }
+
+ lseek(device_fd, offset, SEEK_SET);
+ read(device_fd, data_buf, nsize);
+
+ close(device_fd);
+ device_fd = -1;
+
+ return 0;
+}
+
+static int SaveDataToFile(char *file_name, int offset, int nsize,
+ unsigned char data_buf[])
+{
+ int device_fd = -1;
+ int i = 0, tmp_ret = 0;
+ char *tmp_ptr = NULL;
+ char file_path[512] = { '\0' };
+
+ if (data_buf == NULL) {
+ LOGE("%s, data_buf is NULL!!!\n", "TV");
+ return -1;
+ }
+
+ tmp_ret = handleDataFilePath(file_name, offset, nsize, file_path);
+ if (tmp_ret < 0) {
+ tmp_ptr = NULL;
+ } else if (tmp_ret == 0) {
+ tmp_ptr = file_name;
+ } else if (tmp_ret == 1) {
+ tmp_ptr = file_path;
+ }
+
+ if (tmp_ptr == NULL) {
+ return -1;
+ }
+
+ device_fd = open(tmp_ptr, O_RDWR | O_SYNC);
+ if (device_fd < 0) {
+ LOGE("%s: open file \"%s\" error(%s).\n", "TV", file_name,
+ strerror(errno));
+ return -1;
+ }
+
+ lseek(device_fd, offset, SEEK_SET);
+ write(device_fd, data_buf, nsize);
+ fsync(device_fd);
+
+ close(device_fd);
+ device_fd = -1;
+
+ return 0;
+}
+
+static int RealRWData(RWDataInfo *data_info)
+{
+ int i = 0, file_off = 0;
+ char file_name[256] = { '\0' };
+
+ memset(file_name, '\0', 256);
+ GetFilePathCFG(data_info->path_cfg_name, file_name);
+#if 0
+ LOGD("%s, file_name is %s.\n", __FUNCTION__, file_name);
+#endif
+ if (strlen(file_name) == 0) {
+ LOGE("%s, length of file_name is 0!!!\n", "TV");
+ return -2;
+ }
+
+ if (data_info->rw_off < 0) {
+ LOGE("%s, data_info->rw_off (%d) is less than 0!!!\n", "TV",
+ data_info->rw_off);
+ return -1;
+ }
+
+ if (data_info->rw_off + data_info->rw_size > data_info->max_size) {
+ LOGE(
+ "%s, data_info->rw_off + data_info->rw_size (%d) is more than data_info->max_size(%d) !!!\n",
+ "TV", data_info->rw_off + data_info->rw_size,
+ data_info->max_size);
+ return -1;
+ }
+
+ file_off = GetFileOffsetCFG(data_info->off_cfg_name);
+ if (file_off < 0) {
+ LOGE("%s, file_off (%d) is less than 0!!!\n", "TV", file_off);
+ return -1;
+ }
+
+ file_off += data_info->rw_off;
+
+ if (data_info->op_cb(file_name, file_off, data_info->rw_size,
+ (unsigned char *) data_info->data_buf) < 0) {
+ return -1;
+ }
+
+ return 0;
+}
+
+static int HandleRWData(RWDataInfo *data_info)
+{
+ int i = 0, tmp_ret = 0;
+ int *tmp_iptr = NULL;
+ unsigned char *tmp_cptr = NULL;
+ RWDataInfo tmpInfo;
+
+ if (data_info == NULL) {
+ return -1;
+ }
+
+ tmpInfo = *data_info;
+
+ if (data_info->data_type == CC_DATA_TYPE_INT) {
+ tmp_cptr = new unsigned char[data_info->rw_size];
+ if (tmp_cptr != NULL) {
+ tmpInfo.data_buf = tmp_cptr;
+
+ if (tmpInfo.op_type == CC_OP_TYPE_SAVE) {
+ tmp_iptr = (int *) data_info->data_buf;
+ for (i = 0; i < data_info->rw_size; i++) {
+ tmp_cptr[i] = tmp_iptr[i];
+ }
+
+ tmp_ret |= RealRWData(&tmpInfo);
+ } else {
+ tmp_ret |= RealRWData(&tmpInfo);
+
+ tmp_iptr = (int *) data_info->data_buf;
+ for (i = 0; i < data_info->rw_size; i++) {
+ tmp_iptr[i] = tmp_cptr[i];
+ }
+ }
+
+ delete tmp_cptr;
+ tmp_cptr = NULL;
+
+ return tmp_ret;
+ }
+ }
+
+ return RealRWData(&tmpInfo);
+}
+
+static int GetRGBOGOFromFile(int rd_off, int rd_size,
+ unsigned char data_buf[])
+{
+ RWDataInfo tmpInfo;
+
+ tmpInfo.op_type = CC_OP_TYPE_READ;
+ tmpInfo.data_type = CC_DATA_TYPE_CHAR;
+ tmpInfo.max_size = SSM_CR_RGBOGO_LEN + SSM_CR_RGBOGO_CHKSUM_LEN;
+ tmpInfo.rw_off = rd_off;
+ tmpInfo.rw_size = rd_size;
+ tmpInfo.data_buf = data_buf;
+ tmpInfo.path_cfg_name = (char *) CS_RGBOGO_FILE_PATH_CFG;
+ tmpInfo.off_cfg_name = (char *) CS_RGBOGO_FILE_OFFSET_CFG;
+ tmpInfo.op_cb = ReadDataFromFile;
+
+ return HandleRWData(&tmpInfo);
+}
+
+static int SaveRGBOGOToFile(int wr_off, int wr_size, unsigned char data_buf[])
+{
+ RWDataInfo tmpInfo;
+
+ tmpInfo.op_type = CC_OP_TYPE_SAVE;
+ tmpInfo.data_type = CC_DATA_TYPE_CHAR;
+ tmpInfo.max_size = SSM_CR_RGBOGO_LEN + SSM_CR_RGBOGO_CHKSUM_LEN;
+ tmpInfo.rw_off = wr_off;
+ tmpInfo.rw_size = wr_size;
+ tmpInfo.data_buf = data_buf;
+ tmpInfo.path_cfg_name = (char *) CS_RGBOGO_FILE_PATH_CFG;
+ tmpInfo.off_cfg_name = (char *) CS_RGBOGO_FILE_OFFSET_CFG;
+ tmpInfo.op_cb = SaveDataToFile;
+
+ return HandleRWData(&tmpInfo);
+}
+
+static int GetAudioNoLinePointsDataFromFile(int rd_off, int rd_size,
+ unsigned char data_buf[])
+{
+ RWDataInfo tmpInfo;
+
+ tmpInfo.op_type = CC_OP_TYPE_READ;
+ tmpInfo.data_type = CC_DATA_TYPE_CHAR;
+ tmpInfo.max_size = 256;
+ tmpInfo.rw_off = rd_off;
+ tmpInfo.rw_size = rd_size;
+ tmpInfo.data_buf = data_buf;
+ tmpInfo.path_cfg_name = (char *) CS_AUDIO_NOLINEPOINTS_FILE_PATH_CFG;
+ tmpInfo.off_cfg_name = (char *) CS_AUDIO_NOLINEPOINTS_FILE_OFFSET_CFG;
+ tmpInfo.op_cb = ReadDataFromFile;
+
+ return HandleRWData(&tmpInfo);
+}
+
+static int SaveAudioNoLinePointsDataToFile(int wr_off, int wr_size,
+ unsigned char data_buf[])
+{
+ RWDataInfo tmpInfo;
+
+ tmpInfo.op_type = CC_OP_TYPE_SAVE;
+ tmpInfo.data_type = CC_DATA_TYPE_CHAR;
+ tmpInfo.max_size = 256;
+ tmpInfo.rw_off = wr_off;
+ tmpInfo.rw_size = wr_size;
+ tmpInfo.data_buf = data_buf;
+ tmpInfo.path_cfg_name = (char *) CS_AUDIO_NOLINEPOINTS_FILE_PATH_CFG;
+ tmpInfo.off_cfg_name = (char *) CS_AUDIO_NOLINEPOINTS_FILE_OFFSET_CFG;
+ tmpInfo.op_cb = SaveDataToFile;
+
+ return HandleRWData(&tmpInfo);
+}
+
+static int GetHDCPKeyFromFile(int rd_off, int rd_size,
+ unsigned char data_buf[])
+{
+ RWDataInfo tmpInfo;
+
+ tmpInfo.op_type = CC_OP_TYPE_READ;
+ tmpInfo.data_type = CC_DATA_TYPE_CHAR;
+ tmpInfo.max_size = CC_HDCP_KEY_TOTAL_SIZE;
+ tmpInfo.rw_off = rd_off;
+ tmpInfo.rw_size = rd_size;
+ tmpInfo.data_buf = data_buf;
+ tmpInfo.path_cfg_name = (char *) CS_HDCP_KEY_FILE_PATH_CFG;
+ tmpInfo.off_cfg_name = (char *) CS_HDCP_KEY_FILE_OFFSET_CFG;
+ tmpInfo.op_cb = ReadDataFromFile;
+
+ return HandleRWData(&tmpInfo);
+}
+
+static int SaveHDCPKeyToFile(int wr_off, int wr_size,
+ unsigned char data_buf[])
+{
+ RWDataInfo tmpInfo;
+
+ tmpInfo.op_type = CC_OP_TYPE_SAVE;
+ tmpInfo.data_type = CC_DATA_TYPE_CHAR;
+ tmpInfo.max_size = CC_HDCP_KEY_TOTAL_SIZE;
+ tmpInfo.rw_off = wr_off;
+ tmpInfo.rw_size = wr_size;
+ tmpInfo.data_buf = data_buf;
+ tmpInfo.path_cfg_name = (char *) CS_HDCP_KEY_FILE_PATH_CFG;
+ tmpInfo.off_cfg_name = (char *) CS_HDCP_KEY_FILE_OFFSET_CFG;
+ tmpInfo.op_cb = SaveDataToFile;
+
+ return HandleRWData(&tmpInfo);
+}
+
+static int GetHDMIEdidFromFile(int rd_off, int rd_size, int port,
+ unsigned char data_buf[])
+{
+ RWDataInfo tmpInfo;
+
+ tmpInfo.op_type = CC_OP_TYPE_READ;
+ tmpInfo.data_type = CC_DATA_TYPE_CHAR;
+ tmpInfo.max_size = SSM_HDMI_EDID_SIZE;
+ tmpInfo.rw_off = rd_off;
+ tmpInfo.rw_size = rd_size;
+ tmpInfo.data_buf = data_buf;
+ switch (port) {
+ case 1:
+ tmpInfo.path_cfg_name = (char *) CS_HDMI_PORT1_EDID_FILE_PATH_CFG;
+ break;
+ case 2:
+ tmpInfo.path_cfg_name = (char *) CS_HDMI_PORT2_EDID_FILE_PATH_CFG;
+ break;
+ case 3:
+ tmpInfo.path_cfg_name = (char *) CS_HDMI_PORT3_EDID_FILE_PATH_CFG;
+ break;
+ default:
+ LOGE("%s, port is error, =%d\n", "TV", port);
+ tmpInfo.path_cfg_name = (char *) CS_HDMI_EDID_FILE_PATH_CFG;
+ break;
+ }
+ tmpInfo.off_cfg_name = (char *) CS_HDMI_EDID_FILE_OFFSET_CFG;
+ tmpInfo.op_cb = ReadDataFromFile;
+
+ return HandleRWData(&tmpInfo);
+}
+
+/**************************** end critical data op functions ****************************/
diff --git a/tvapi/libtv/tvsetting/audio_cfg.cpp b/tvapi/libtv/tvsetting/audio_cfg.cpp
index 93e9e9e..5607561 100644
--- a/tvapi/libtv/tvsetting/audio_cfg.cpp
+++ b/tvapi/libtv/tvsetting/audio_cfg.cpp
@@ -1,1853 +1,1853 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <android/log.h>
-#include <cutils/properties.h>
-
-#include "../tvsetting/CTvSetting.h"
-#include "../tvconfig/tvconfig.h"
-#include "audio_cfg.h"
-
-#define LOG_TAG "audio_cfg"
-#include "CTvLog.h"
-
-#define CS_AUDIO_AMP_MASTER_NOLINE_SWITCH_CFG_NAME "audio.amp.master.noline.switch"
-#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_CNT_CFG_NAME "audio.amp.master.noline.point.cnt"
-#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_IND_BUF_CFG_NAME "audio.amp.master.noline.point.ind.buf"
-#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_DEF_BUF_CFG_NAME "audio.amp.master.noline.point.data.defbuf"
-#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_IND_DEF_BUF_CFG_NAME "audio.amp.master.noline.point.ind.defbuf"
-#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_TV_BUF_CFG_NAME "audio.amp.master.noline.point.data.tv"
-#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_AV_BUF_CFG_NAME "audio.amp.master.noline.point.data.av"
-#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_COMP_BUF_CFG_NAME "audio.amp.master.noline.point.data.comp"
-#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_HDMI_BUF_CFG_NAME "audio.amp.master.noline.point.data.hdmi"
-#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_VGA_BUF_CFG_NAME "audio.amp.master.noline.point.data.vga"
-#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_MPEG_BUF_CFG_NAME "audio.amp.master.noline.point.data.mpeg"
-
-#define CS_AUDIO_AMP_SUPPERBASS_NOLINE_SWITCH_CFG_NAME "audio.amp.supperbass.noline.switch"
-#define CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_CNT_CFG_NAME "audio.amp.supperbass.noline.point.cnt"
-#define CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_IND_BUF_CFG_NAME "audio.amp.supperbass.noline.point.ind.buf"
-#define CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_DATA_DEF_BUF_CFG_NAME "audio.amp.supperbass.noline.point.data.defbuf"
-#define CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_IND_DEF_BUF_CFG_NAME "audio.amp.supperbass.noline.point.ind.defbuf"
-
-#define CS_AUDIO_AMP_BALANCE_EXCHG_CFG_NAME "audio.amp.balance.exchg"
-
-#define CS_EQ_MOUDLE_DISABLE_CFG_NAME "audio.eq.module.disable"
-#define CS_EQ_USING_ANDROID_CFG_NAME "audio.eq.using.android"
-#define CS_EQ_PRESETBUF_CFG_NAME "audio.eq.presetbuf"
-#define CS_EQ_GAIN_RANGE_CFG_NAME "audio.eq.gain.range"
-#define CS_EQ_UI_GAIN_RANGE_CFG_NAME "audio.eq.uigain.range"
-#define CS_EQ_AMP_MASTER_GAIN_CFG_NAME "audio.eq.ampmaster.gain"
-#define CS_EQ_AMP_SUPPERBASS_GAIN_CFG_NAME "audio.eq.ampsupperbass.gain"
-
-#define CS_AUDIO_AMP_MAINVOL_TV_LUTBUF_CFG_NAME "audio.amp.mainvol.tv.lutbuf"
-#define CS_AUDIO_AMP_MAINVOL_AV_LUTBUF_CFG_NAME "audio.amp.mainvol.av.lutbuf"
-#define CS_AUDIO_AMP_MAINVOL_COMP_LUTBUF_CFG_NAME "audio.amp.mainvol.comp.lutbuf"
-#define CS_AUDIO_AMP_MAINVOL_HDMI_LUTBUF_CFG_NAME "audio.amp.mainvol.hdmi.lutbuf"
-#define CS_AUDIO_AMP_MAINVOL_VGA_LUTBUF_CFG_NAME "audio.amp.mainvol.vga.lutbuf"
-#define CS_AUDIO_AMP_MAINVOL_MPEG_LUTBUF_CFG_NAME "audio.amp.mainvol.mpeg.lutbuf"
-
-#define CS_AUDIO_AMP_SUPPERBASSVOL_TV_LUTBUF_CFG_NAME "audio.amp.supbassvol.tv.lutbuf"
-#define CS_AUDIO_AMP_SUPPERBASSVOL_AV_LUTBUF_CFG_NAME "audio.amp.supbassvol.av.lutbuf"
-#define CS_AUDIO_AMP_SUPPERBASSVOL_COMP_LUTBUF_CFG_NAME "audio.amp.supbassvol.comp.lutbuf"
-#define CS_AUDIO_AMP_SUPPERBASSVOL_HDMI_LUTBUF_CFG_NAME "audio.amp.supbassvol.hdmi.lutbuf"
-#define CS_AUDIO_AMP_SUPPERBASSVOL_VGA_LUTBUF_CFG_NAME "audio.amp.supbassvol.vga.lutbuf"
-#define CS_AUDIO_AMP_SUPPERBASSVOL_MPEG_LUTBUF_CFG_NAME "audio.amp.supbassvol.mpeg.lutbuf"
-
-#define CS_SRS_MOUDLE_DISABLE_CFG_NAME "audio.srs.module.disable"
-#define CS_SRS_SOURROUND_DISABLE_CFG_NAME "audio.srs.sourround.disable"
-#define CS_SRS_TRUBASS_DISABLE_CFG_NAME "audio.srs.trubass.disable"
-#define CS_SRS_DIALOGCLARITY_DISABLE_CFG_NAME "audio.srs.dialogclarity.disable"
-#define CS_SRS_SOURROUND_GAIN_CFG_NAME "audio.srs.sourround.gain"
-#define CS_SRS_SOURROUND_AMP_MASTER_GAIN_CFG_NAME "audio.srs.sourround.ampmaster.gain"
-#define CS_SRS_SOURROUND_AMP_SUPPERBASS_GAIN_CFG_NAME "audio.srs.sourround.ampsupperbass.gain"
-#define CS_SRS_TRUBASS_ONLY_GAIN_CFG_NAME "audio.srs.trubass.only.gain"
-#define CS_SRS_TRUBASS_ONLY_AMP_MASTER_GAIN_CFG_NAME "audio.srs.trubass.only.ampmaster.gain"
-#define CS_SRS_TRUBASS_ONLY_AMP_SUPPERBASS_GAIN_CFG_NAME "audio.srs.trubass.only.ampsupperbass.gain"
-#define CS_SRS_DIALOGCLARITY_ONLY_GAIN_CFG_NAME "audio.srs.dialogclarity.only.gain"
-#define CS_SRS_DIALOGCLARITY_ONLY_AMP_MASTER_GAIN_CFG_NAME "audio.srs.dialogclarity.only.ampmaster.gain"
-#define CS_SRS_DIALOGCLARITY_ONLY_AMP_SUPPERBASS_GAIN_CFG_NAME "audio.srs.dialogclarity.only.ampsupperbass.gain"
-#define CS_SRS_DIALOGCLARITY_ONLY_DEFINITION_GAIN_CFG_NAME "audio.srs.dialogclarity.only.definition.gain"
-#define CS_SRS_TRUBASS_DIALOGCLARITY_TRUBASS_GAIN_CFG_NAME "audio.srs.turbass.dialogclarity.trubass.gain"
-#define CS_SRS_TRUBASS_DIALOGCLARITY_DIALOGCLARITY_GAIN_CFG_NAME "audio.srs.turbass.dialogclarity.dialogclarity.gain"
-#define CS_SRS_TRUBASS_DIALOGCLARITY_DEFINITION_GAIN_CFG_NAME "audio.srs.turbass.dialogclarity.definition.gain"
-#define CS_SRS_TRUBASS_DIALOGCLARITY_AMP_MASTER_GAIN_CFG_NAME "audio.srs.turbass.dialogclarity.ampmaster.gain"
-#define CS_SRS_TRUBASS_DIALOGCLARITY_AMP_SUPPERBASS_GAIN_CFG_NAME "audio.srs.turbass.dialogclarity.ampsupperbass.gain"
-#define CS_SRS_SUPPERBASS_ON_TRUBASS_SPEAKER_SIZE_CFG_NAME "audio.srs.supperbasson.turbass.speakersize"
-#define CS_SRS_SUPPERBASS_OFF_TRUBASS_SPEAKER_SIZE_CFG_NAME "audio.srs.supperbassoff.turbass.speakersize"
-
-#define CS_AUDIO_DUMP_DATA_ENABLE_CFG_NAME "audio.dump.data.en"
-#define CS_KEY_MUTE_CFG_NAME "audio.mute.keymute"
-#define CS_AVOUT_INIT_MUTE_CFG_NAME "audio.avout.init.mute"
-#define CS_SUPPERBASS_MODULE_DISABLE_CFG_NAME "audio.supperbass.module.disable"
-#define CS_SUPPERBASS_SWITCH_DISABLE_CFG_NAME "audio.supperbass.switch.disable"
-#define CS_DVI_SUPPORT_ENABLE_CFG_NAME "audio.dvi.support.enable"
-#define CS_SRC_INPUT_TV_LINEIN_VOL_CFG_NAME "audio.srcinput.linein.tv.vol"
-#define CS_SRC_INPUT_AV_LINEIN_VOL_CFG_NAME "audio.srcinput.linein.av.vol"
-#define CS_SRC_INPUT_COMP_LINEIN_VOL_CFG_NAME "audio.srcinput.linein.comp.vol"
-#define CS_SRC_INPUT_HDMI_LINEIN_VOL_CFG_NAME "audio.srcinput.linein.hdmi.vol"
-#define CS_SRC_INPUT_VGA_LINEIN_VOL_CFG_NAME "audio.srcinput.linein.vga.vol"
-#define CS_SRC_INPUT_MPEG_LINEIN_VOL_CFG_NAME "audio.srcinput.linein.mpeg.vol"
-#define CS_SRC_INPUT_TV_LINEOUT_VOL_CFG_NAME "audio.srcinput.lineout.tv.vol"
-#define CS_SRC_INPUT_AV_LINEOUT_VOL_CFG_NAME "audio.srcinput.lineout.av.vol"
-#define CS_SRC_INPUT_COMP_LINEOUT_VOL_CFG_NAME "audio.srcinput.lineout.comp.vol"
-#define CS_SRC_INPUT_HDMI_LINEOUT_VOL_CFG_NAME "audio.srcinput.lineout.hdmi.vol"
-#define CS_SRC_INPUT_VGA_LINEOUT_VOL_CFG_NAME "audio.srcinput.lineout.vga.vol"
-#define CS_SRC_INPUT_MPEG_LINEOUT_VOL_CFG_NAME "audio.srcinput.lineout.mpeg.vol"
-#define CS_SRC_INPUT_MPEG_LINEOUT_VOL_CFG_NAME_OLD "audio.srcinput.lineout.vol"
-
-#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_TV_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.tv"
-#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_AV_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.av"
-#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_COMP_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.comp"
-#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_HDMI_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.hdmi"
-#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_VGA_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.vga"
-#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_MPEG_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.mpeg"
-#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_DTV_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.dtv"
-
-#define CS_AUDIO_NOISE_GATE_ENABLE_CFG_NAME "audio.noise.gate.enable"
-#define CS_AUDIO_NOISE_GATE_THRESHOLD_CFG_NAME "audio.noise.gate.threshold"
-#define CS_AUDIO_NOISE_GATE_UPPER_BOUND_CFG_NAME "audio.noise.gate.upper.bound"
-
-#define CS_DISABLE_RESET_SYSTEM_FRAMESIZE_CFG_NAME "audio.reset.system.framesize.disable"
-#define CS_AUDIO_SYSTEM_FRAMESIZE_CFG_NAME "audio.reset.system.framesize"
-
-#define CS_AUDIO_ARCHITECTURE_TYPE_CFG_NAME "audio.architecture.type"
-#define CS_AUDIO_RESAMPLE_TYPE_CFG_NAME "audio.resample.type"
-
-
-#define CC_MAX_SUP_LUT_CFG_INDEX (32)
-
-static int gMasterNoLinePointsIndexBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
-static int gMasterNoLinePointsDefDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
-static int gMasterNoLinePointsDefIndexBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
-
-static int gSupperBassNoLinePointsIndexBuffer[CC_NO_LINE_POINTS_MAX_CNT] =
-{ -1 };
-static int gSupperBassNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
-static int gSupperBassNoLinePointsDefDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = {
- -1
-};
-static int gSupperBassNoLinePointsDefIndexBuffer[CC_NO_LINE_POINTS_MAX_CNT] = {
- -1
-};
-
-static int gTVMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
-static int gAVMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
-static int gCOMPMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
-static int gHDMIMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
-static int gVGAMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
-static int gMPEGMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
-static int gHDMI4K2KMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = {
- -1
-};
-static int gUSB4K2KMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = {
- -1
-};
-
-static int mTVMainVolumeDigitLutBuf_XX[CC_LUT_BUF_SIZE];
-static int mAVMainVolumeDigitLutBuf_XX[CC_LUT_BUF_SIZE];
-static int mCOMPMainVolumeDigitLutBuf_XX[CC_LUT_BUF_SIZE];
-static int mHDMIMainVolumeDigitLutBuf_XX[CC_LUT_BUF_SIZE];
-static int mVGAMainVolumeDigitLutBuf_XX[CC_LUT_BUF_SIZE];
-static int mMPEGMainVolumeDigitLutBuf_XX[CC_LUT_BUF_SIZE];
-
-static int mTVSupperBassDigitLutBuf_XX[CC_LUT_BUF_SIZE];
-static int mAVSupperBassDigitLutBuf_XX[CC_LUT_BUF_SIZE];
-static int mCOMPSupperBassDigitLutBuf_XX[CC_LUT_BUF_SIZE];
-static int mHDMISupperBassDigitLutBuf_XX[CC_LUT_BUF_SIZE];
-static int mVGASupperBassDigitLutBuf_XX[CC_LUT_BUF_SIZE];
-static int mMPEGSupperBassDigitLutBuf_XX[CC_LUT_BUF_SIZE];
-
-static int mEQPresetValueBuf_XX[CC_EQ_PRESET_BUF_SIZE];
-static int mEQPresetDefBuf[CC_EQ_PRESET_BUF_SIZE] = {
- //
- 50, 50, 50, 50, 50, 50, // SM_STD
- 70, 60, 50, 60, 70, 50, // SM_MUSIC
- 25, 50, 70, 66, 25, 50, // SM_NEWS
- 75, 65, 50, 65, 75, 50, // SM_THEATER
-};
-
-static int GetAudioCfgData(const char *key_str, int *buf_item_count, int radix,
- int data_buf[])
-{
- int cfg_item_count = 0;
- char *token = NULL;
- const char *strDelimit = ",";
- const char *config_value;
- char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
-
- config_value = config_get_str("TV", key_str, "null");
- if (strcasecmp(config_value, "null") == 0) {
- //LOGE("%s, can't get config \"%s\"!!!\n", "TV", key_str);
- return -1;
- }
-
- cfg_item_count = 0;
-
- memset((void *)data_str, 0, sizeof(data_str));
- strncpy(data_str, config_value, sizeof(data_str) - 1);
- token = strtok(data_str, strDelimit);
- while (token != NULL) {
- if (cfg_item_count < *buf_item_count) {
- data_buf[cfg_item_count] = strtol(token, NULL, radix);
-
- token = strtok(NULL, strDelimit);
- cfg_item_count += 1;
- } else {
- LOGE("%s, we get data count more than desire count (%d)!!!\n",
- __FUNCTION__ , *buf_item_count);
- return -1;
- }
- }
-
- *buf_item_count = cfg_item_count;
-
- return 0;
-}
-
-static int GetAudioCfgBufferData(const char *key_str, int *bufs_count,
- int *buf_item_count, int radix, int data_buf[])
-{
- int cfg_item_count = 0, tmpTotalItemCount = 0;
- char *token = NULL;
- const char *strDelimit = ",";
- const char *config_value;
- char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
-
- config_value = config_get_str("TV", key_str, "null");
- if (strcasecmp(config_value, "null") == 0) {
- // LOGE("%s, can't get config \"%s\"!!!\n", "TV", key_str);
- *bufs_count = 0;
- *buf_item_count = 0;
- return -1;
- }
-
- tmpTotalItemCount = 0;
-
- memset((void *)data_str, 0, sizeof(data_str));
- strncpy(data_str, config_value, sizeof(data_str) - 1);
- token = strtok(data_str, strDelimit);
- while (token != NULL) {
- if (cfg_item_count == 0) {
- *bufs_count = strtol(token, NULL, radix);
- } else if (cfg_item_count == 1) {
- *buf_item_count = strtol(token, NULL, radix);
- } else if (cfg_item_count >= 2) {
- data_buf[tmpTotalItemCount] = strtol(token, NULL, radix);
- tmpTotalItemCount += 1;
- }
-
- token = strtok(NULL, strDelimit);
- cfg_item_count += 1;
- }
-
- if ((*bufs_count) * (*buf_item_count) != tmpTotalItemCount) {
- LOGE("%s, get item count error!!! should be %d, real is %d.\n",
- __FUNCTION__, (*bufs_count) * (*buf_item_count),
- tmpTotalItemCount);
- *bufs_count = 0;
- *buf_item_count = 0;
- return -1;
- }
-
- return 0;
-}
-
-static int GetAudioCfgSingleIntData(const char *key_str, int def_val)
-{
- const char *config_value;
-
- config_value = config_get_str("TV", key_str, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return def_val;
- }
-
- return strtol(config_value, NULL, 10);
-}
-
-template<typename T>
-static int CheckNoLinePoints(int point_cnt, T points_buf[])
-{
- int i = 0, same_cnt = 0, tmp_direct = -1, error_flag = 0;
-
- if (point_cnt <= 1) {
- LOGD("%s, point is less than 2.\n", __FUNCTION__);
- return 0;
- }
-
- for (i = 0; i < point_cnt - 1; i++) {
- if (points_buf[i] < points_buf[i + 1]) {
- if (tmp_direct == -1) {
- tmp_direct = 0;
- } else if (tmp_direct == 1) {
- LOGD("%s, check have direct error.\n", __FUNCTION__);
- return -1;
- }
- } else if (points_buf[i] > points_buf[i + 1]) {
- if (tmp_direct == -1) {
- tmp_direct = 1;
- } else if (tmp_direct == 0) {
- LOGD("%s, check have direct error.\n", __FUNCTION__);
- return -1;
- }
- } else {
- same_cnt += 1;
- }
- }
-
- if (same_cnt == i) {
- LOGD("%s, check have same error.\n", __FUNCTION__);
- return -1;
- }
-
- LOGD("%s, check no error.\n", __FUNCTION__);
- return 0;
-}
-
-int *GetAudioAmplifierNoLinePointsIndexBuffer(int lut_buf_type, int get_type)
-{
- if (lut_buf_type == CC_LUT_BUF_SUPPERBASS) {
- return GetAudioAmplifierSupperBassNoLinePointsIndexBuffer(get_type);
- }
-
- return NULL;
-}
-
-int *GetAudioAmplifierNoLinePointsDataBuffer(int lut_buf_type, int get_type)
-{
- if (lut_buf_type == CC_LUT_BUF_SUPPERBASS) {
- return GetAudioAmplifierSupperBassNoLinePointsDataBuffer(get_type);
- }
-
- return NULL;
-}
-
-int GetAudioAmplifierMasterNoLineSwitchFlag()
-{
- const char *config_value;
- config_value = config_get_str("TV",
- CS_AUDIO_AMP_MASTER_NOLINE_SWITCH_CFG_NAME, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtol(config_value, NULL, 10);
-}
-
-int GetAudioAmplifierSupperBassNoLineSwitchFlag()
-{
- const char *config_value;
- config_value = config_get_str("TV",
- CS_AUDIO_AMP_SUPPERBASS_NOLINE_SWITCH_CFG_NAME, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtol(config_value, NULL, 10);
-}
-
-int GetAudioAmplifierMasterNoLinePointsCount()
-{
- const char *config_value;
- config_value = config_get_str("TV",
- CS_AUDIO_AMP_MASTER_NOLINE_POINT_CNT_CFG_NAME, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 11;
- }
-
- return strtol(config_value, NULL, 10);
-}
-
-int GetAudioAmplifierSupperBassNoLinePointsCount()
-{
- const char *config_value;
- config_value = config_get_str("TV",
- CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_CNT_CFG_NAME, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 5;
- }
-
- return strtol(config_value, NULL, 10);
-}
-
-static int GetAudioAmplifierNoLinePointsBuffer(const char *key_str,
- int buf_item_count, int data_buf[])
-{
- int i = 0, tmp_item_count = 0;
- int tmp_buf[CC_NO_LINE_POINTS_MAX_CNT] = { 0 };
-
- // if (data_buf[0] >= 0 && data_buf[0] <= 100) {
- // LOGD("%s, we have get the index buffer.\n", "TV");
- // return 0;
- // }
-
- tmp_item_count = buf_item_count;
- if (GetAudioCfgData(key_str, &tmp_item_count, 10, tmp_buf) < 0) {
- LOGE("%s, get index buffer data error, set default.\n", __FUNCTION__);
- return -1;
- }
-
- if (tmp_item_count != buf_item_count) {
- LOGE(
- "%s, get index buffer data error(buf item count error), set default.\n",
- __FUNCTION__);
- return -1;
- }
-
- for (i = 0; i < buf_item_count; i++) {
- data_buf[i] = tmp_buf[i];
- }
-
- return 0;
-}
-
-int *GetAudioAmplifierSupperBassNoLinePointsIndexBuffer(int get_type)
-{
- int buf_item_count = 0;
-
- buf_item_count = GetAudioAmplifierSupperBassNoLinePointsCount();
- if (GetAudioAmplifierNoLinePointsBuffer(
- CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_IND_BUF_CFG_NAME,
- buf_item_count, gSupperBassNoLinePointsIndexBuffer) < 0) {
- return GetAudioAmplifierSupperBassNoLinePointsDefIndexBuffer();
- }
-
- if (CheckNoLinePoints(buf_item_count, gSupperBassNoLinePointsIndexBuffer)
- < 0) {
- return GetAudioAmplifierSupperBassNoLinePointsDefIndexBuffer();
- }
-
- return gSupperBassNoLinePointsIndexBuffer;
-}
-
-int *GetAudioAmplifierMasterNoLinePointsDataBuffer(int get_type)
-{
- int i = 0, buf_item_count = 0, tmp_offset = 0;
- int *tmpPtr = NULL;
- unsigned char tmp_buf[CC_NO_LINE_POINTS_MAX_CNT] = { 0 };
-
- buf_item_count = GetAudioAmplifierMasterNoLinePointsCount();
-
- if (get_type == CC_GET_LUT_TV) {
- tmpPtr = gTVMasterNoLinePointsDataBuffer;
- tmp_offset = get_type * buf_item_count;
- } else if (get_type == CC_GET_LUT_AV) {
- tmpPtr = gAVMasterNoLinePointsDataBuffer;
- tmp_offset = get_type * buf_item_count;
- } else if (get_type == CC_GET_LUT_COMP) {
- tmpPtr = gCOMPMasterNoLinePointsDataBuffer;
- tmp_offset = get_type * buf_item_count;
- } else if (get_type == CC_GET_LUT_HDMI) {
- tmpPtr = gHDMIMasterNoLinePointsDataBuffer;
- tmp_offset = get_type * buf_item_count;
- } else if (get_type == CC_GET_LUT_VGA) {
- tmpPtr = gVGAMasterNoLinePointsDataBuffer;
- tmp_offset = get_type * buf_item_count;
- } else if (get_type == CC_GET_LUT_MPEG) {
- tmpPtr = gMPEGMasterNoLinePointsDataBuffer;
- tmp_offset = get_type * buf_item_count;
- }
-
- if (tmpPtr != NULL && tmpPtr[0] != -1) {
- return tmpPtr;
- }
-
- if (SSMReadAudioNoLinePoints(tmp_offset, buf_item_count, tmp_buf) < 0) {
- return GetAudioAmplifierMasterNoLinePointsDefDataBuffer(get_type);
- }
-
- if (CheckNoLinePoints(buf_item_count, tmp_buf) < 0) {
- return GetAudioAmplifierMasterNoLinePointsDefDataBuffer(get_type);
- }
-
- for (i = 0; i < buf_item_count; i++) {
- tmpPtr[i] = tmp_buf[i];
- }
-
- return tmpPtr;
-}
-
-int *GetAudioAmplifierSupperBassNoLinePointsDataBuffer(int get_type)
-{
- int i = 0, buf_item_count = 0, tmp_offset = 0;
- int *tmpPtr = NULL;
- unsigned char tmp_buf[CC_NO_LINE_POINTS_MAX_CNT] = { 0 };
-
- buf_item_count = GetAudioAmplifierSupperBassNoLinePointsCount();
-
- tmpPtr = gSupperBassNoLinePointsDataBuffer;
- if (tmpPtr != NULL && tmpPtr[0] != -1) {
- return tmpPtr;
- }
-
- tmp_offset = CC_GET_TYPE_CNT * GetAudioAmplifierMasterNoLinePointsCount();
-
- if (SSMReadAudioNoLinePoints(tmp_offset, buf_item_count, tmp_buf) < 0) {
- return GetAudioAmplifierSupperBassNoLinePointsDefDataBuffer();
- }
-
- if (CheckNoLinePoints(buf_item_count, tmp_buf) < 0) {
- return GetAudioAmplifierSupperBassNoLinePointsDefDataBuffer();
- }
-
- for (i = 0; i < buf_item_count; i++) {
- tmpPtr[i] = tmp_buf[i];
- }
-
- return tmpPtr;
-}
-
-int *GetAudioAmplifierMasterNoLinePointsDefIndexBuffer()
-{
- int i = 0, buf_item_count = 0;
-
- buf_item_count = GetAudioAmplifierMasterNoLinePointsCount();
- if (GetAudioAmplifierNoLinePointsBuffer(
- CS_AUDIO_AMP_MASTER_NOLINE_POINT_IND_DEF_BUF_CFG_NAME,
- buf_item_count, gMasterNoLinePointsDefIndexBuffer) < 0) {
- gMasterNoLinePointsDefIndexBuffer[0] = 1;
-
- for (i = 1; i <= 10; i++) {
- gMasterNoLinePointsDefIndexBuffer[i] = i * 10;
- }
- }
-
- if (CheckNoLinePoints(buf_item_count, gMasterNoLinePointsDefIndexBuffer)
- < 0) {
- gMasterNoLinePointsDefIndexBuffer[0] = 1;
-
- for (i = 1; i <= 10; i++) {
- gMasterNoLinePointsDefIndexBuffer[i] = i * 10;
- }
- }
-
- return gMasterNoLinePointsDefIndexBuffer;
-}
-
-int *GetAudioAmplifierSupperBassNoLinePointsDefIndexBuffer()
-{
- int i = 0, buf_item_count = 0;
-
- buf_item_count = GetAudioAmplifierSupperBassNoLinePointsCount();
- if (GetAudioAmplifierNoLinePointsBuffer(
- CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_IND_DEF_BUF_CFG_NAME,
- buf_item_count, gSupperBassNoLinePointsDefIndexBuffer) < 0) {
- gSupperBassNoLinePointsDefIndexBuffer[0] = 1;
-
- for (i = 1; i <= 4; i++) {
- gSupperBassNoLinePointsDefIndexBuffer[i] = i * 25;
- }
- }
-
- if (CheckNoLinePoints(buf_item_count, gSupperBassNoLinePointsDefIndexBuffer)
- < 0) {
- gSupperBassNoLinePointsDefIndexBuffer[0] = 1;
-
- for (i = 1; i <= 4; i++) {
- gSupperBassNoLinePointsDefIndexBuffer[i] = i * 25;
- }
- }
-
- return gSupperBassNoLinePointsDefIndexBuffer;
-}
-
-int *GetAudioAmplifierMasterNoLinePointsDefDataBuffer(int buf_type)
-{
- int i = 0, buf_item_count = 0, point_buffer_flag = 0;
-
- buf_item_count = GetAudioAmplifierMasterNoLinePointsCount();
-
- switch (buf_type) {
- case CC_GET_LUT_TV:
- point_buffer_flag = GetAudioAmplifierNoLinePointsBuffer(
- CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_TV_BUF_CFG_NAME,
- buf_item_count, gMasterNoLinePointsDefDataBuffer);
- break;
- case CC_GET_LUT_AV:
- point_buffer_flag = GetAudioAmplifierNoLinePointsBuffer(
- CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_AV_BUF_CFG_NAME,
- buf_item_count, gMasterNoLinePointsDefDataBuffer);
- break;
- case CC_GET_LUT_COMP:
- point_buffer_flag = GetAudioAmplifierNoLinePointsBuffer(
- CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_COMP_BUF_CFG_NAME,
- buf_item_count, gMasterNoLinePointsDefDataBuffer);
- break;
- case CC_GET_LUT_HDMI:
- point_buffer_flag = GetAudioAmplifierNoLinePointsBuffer(
- CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_HDMI_BUF_CFG_NAME,
- buf_item_count, gMasterNoLinePointsDefDataBuffer);
- break;
- case CC_GET_LUT_VGA:
- point_buffer_flag = GetAudioAmplifierNoLinePointsBuffer(
- CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_VGA_BUF_CFG_NAME,
- buf_item_count, gMasterNoLinePointsDefDataBuffer);
- break;
- case CC_GET_LUT_MPEG:
- point_buffer_flag = GetAudioAmplifierNoLinePointsBuffer(
- CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_MPEG_BUF_CFG_NAME,
- buf_item_count, gMasterNoLinePointsDefDataBuffer);
- break;
- default:
- point_buffer_flag = -1;
- // LOGE("buffer type is wrong ,please check input Parameter !");
- break;
- }
-
- if (point_buffer_flag < 0) {
- for (i = 0; i < buf_item_count; i++) {
- gMasterNoLinePointsDefDataBuffer[i] = 100 + i;
- }
-
- return gMasterNoLinePointsDefDataBuffer;
- }
-
- if (CheckNoLinePoints(buf_item_count, gMasterNoLinePointsDefDataBuffer)
- < 0) {
- for (i = 0; i < buf_item_count; i++) {
- gMasterNoLinePointsDefDataBuffer[i] = 100 + i;
- }
- }
-
- return gMasterNoLinePointsDefDataBuffer;
-}
-
-int *GetAudioAmplifierSupperBassNoLinePointsDefDataBuffer()
-{
- int i = 0, buf_item_count = 0;
-
- buf_item_count = GetAudioAmplifierSupperBassNoLinePointsCount();
- if (GetAudioAmplifierNoLinePointsBuffer(
- CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_DATA_DEF_BUF_CFG_NAME,
- buf_item_count, gSupperBassNoLinePointsDefDataBuffer) < 0) {
- for (i = 0; i < buf_item_count; i++) {
- gSupperBassNoLinePointsDefDataBuffer[i] = 100 + i;
- }
- }
-
- if (CheckNoLinePoints(buf_item_count, gSupperBassNoLinePointsDefDataBuffer)
- < 0) {
- for (i = 0; i < buf_item_count; i++) {
- gSupperBassNoLinePointsDefDataBuffer[i] = 100 + i;
- }
- }
-
- return gSupperBassNoLinePointsDefDataBuffer;
-}
-
-int GetAudioAmplifierBalanceExchangeCFG()
-{
- const char *config_value;
- config_value = config_get_str("TV", CS_AUDIO_AMP_BALANCE_EXCHG_CFG_NAME,
- "null");
- if (strcmp(config_value, "null") == 0) {
- return 0; //return 0 to disable balance exchange
- }
-
- return strtol(config_value, NULL, 10);
-}
-
-int GetAudioMainVolLutBufCFGIndexModifyEnable()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", "audio.amp.master.cfgindex.mod.en",
- "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioMainVolLutBufNameModifyUbootenvCFG()
-{
- char config_value[PROPERTY_VALUE_MAX];
-
- memset(config_value, '\0', 32);
-
- property_get("ubootenv.var.ampindex", config_value, "null");
- if (strcasecmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioMainVolLutBufNameModifyFromUbootenv()
-{
- const char *config_value;
-
- config_value = config_get_str("TV",
- "audio.amp.mainvol.lutbufname.mod.ubootenv", "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioMainVolLutBufNameModifyEnableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", "audio.amp.mainvol.lutbufname.mod.en",
- "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioMainVolLutBufNameCFG(int get_type, char name_buf[])
-{
- if (get_type == CC_GET_LUT_TV) {
- strcpy(name_buf, "audio.amp.mainvol.tv.lb.name");
- } else if (get_type == CC_GET_LUT_AV) {
- strcpy(name_buf, "audio.amp.mainvol.av.lb.name");
- } else if (get_type == CC_GET_LUT_COMP) {
- strcpy(name_buf, "audio.amp.mainvol.comp.lb.name");
- } else if (get_type == CC_GET_LUT_HDMI) {
- strcpy(name_buf, "audio.amp.mainvol.hdmi.lb.name");
- } else if (get_type == CC_GET_LUT_VGA) {
- strcpy(name_buf, "audio.amp.mainvol.vga.lb.name");
- } else if (get_type == CC_GET_LUT_MPEG) {
- strcpy(name_buf, "audio.amp.mainvol.mpeg.lb.name");
- } else if (get_type == CC_GET_LUT_HDMI_4K2K) {
- strcpy(name_buf, "audio.amp.mainvol.hdmi4k2k.lb.name");
- } else if (get_type == CC_GET_LUT_USB_4K2K) {
- strcpy(name_buf, "audio.amp.mainvol.usb4k2k.lb.name");
- } else {
- return -1;
- }
-
- return 0;
-}
-
-static int GetAudioMainVolLutBufDataByModifyName(int get_type,
- int *VolumeDigitLutBuf_XX)
-{
- int i = 0, buf_count = 0, buf_item_count = 0;
- char key_buf[128];
- const char *value_buf;
-
- memset(key_buf, '\0', 128);
-
- GetAudioMainVolLutBufNameCFG(get_type, key_buf);
-
- value_buf = config_get_str("TV", key_buf, (char *) "");
-
- if (strcmp(value_buf, "") != 0) {
- if (GetAudioCfgBufferData(value_buf, &buf_count, &buf_item_count, 10,
- VolumeDigitLutBuf_XX) == 0) {
- return 0;
- }
- }
-
- return -1;
-}
-
-int *GetAudioAmplifierMasterVolumeLUTBufferPtr(int get_type, int audio_std)
-{
- int buf_count = 0, buf_item_count = 0;
- int name_en = GetAudioMainVolLutBufNameModifyEnableCFG();
-
- if (name_en == 1) {
- if (get_type == CC_GET_LUT_TV) {
- if (GetAudioMainVolLutBufDataByModifyName(get_type,
- mTVMainVolumeDigitLutBuf_XX) == 0) {
- return mTVMainVolumeDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_AV) {
- if (GetAudioMainVolLutBufDataByModifyName(get_type,
- mAVMainVolumeDigitLutBuf_XX) == 0) {
- return mAVMainVolumeDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_COMP) {
- if (GetAudioMainVolLutBufDataByModifyName(get_type,
- mCOMPMainVolumeDigitLutBuf_XX) == 0) {
- return mCOMPMainVolumeDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_HDMI) {
- if (GetAudioMainVolLutBufDataByModifyName(get_type,
- mHDMIMainVolumeDigitLutBuf_XX) == 0) {
- return mHDMIMainVolumeDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_VGA) {
- if (GetAudioMainVolLutBufDataByModifyName(get_type,
- mVGAMainVolumeDigitLutBuf_XX) == 0) {
- return mVGAMainVolumeDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_MPEG) {
- if (GetAudioMainVolLutBufDataByModifyName(get_type,
- mMPEGMainVolumeDigitLutBuf_XX) == 0) {
- return mMPEGMainVolumeDigitLutBuf_XX;
- }
- }
- } else {
- if (get_type == CC_GET_LUT_TV) {
- if (GetAudioCfgBufferData(CS_AUDIO_AMP_MAINVOL_TV_LUTBUF_CFG_NAME,
- &buf_count, &buf_item_count, 10,
- mTVMainVolumeDigitLutBuf_XX) == 0) {
- return mTVMainVolumeDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_AV) {
- if (GetAudioCfgBufferData(CS_AUDIO_AMP_MAINVOL_AV_LUTBUF_CFG_NAME,
- &buf_count, &buf_item_count, 10,
- mAVMainVolumeDigitLutBuf_XX) == 0) {
- return mAVMainVolumeDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_COMP) {
- if (GetAudioCfgBufferData(CS_AUDIO_AMP_MAINVOL_COMP_LUTBUF_CFG_NAME,
- &buf_count, &buf_item_count, 10,
- mCOMPMainVolumeDigitLutBuf_XX) == 0) {
- return mCOMPMainVolumeDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_HDMI) {
- if (GetAudioCfgBufferData(CS_AUDIO_AMP_MAINVOL_HDMI_LUTBUF_CFG_NAME,
- &buf_count, &buf_item_count, 10,
- mHDMIMainVolumeDigitLutBuf_XX) == 0) {
- return mHDMIMainVolumeDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_VGA) {
- if (GetAudioCfgBufferData(CS_AUDIO_AMP_MAINVOL_VGA_LUTBUF_CFG_NAME,
- &buf_count, &buf_item_count, 10,
- mVGAMainVolumeDigitLutBuf_XX) == 0) {
- return mVGAMainVolumeDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_MPEG) {
- if (GetAudioCfgBufferData(CS_AUDIO_AMP_MAINVOL_MPEG_LUTBUF_CFG_NAME,
- &buf_count, &buf_item_count, 10,
- mMPEGMainVolumeDigitLutBuf_XX) == 0) {
- return mMPEGMainVolumeDigitLutBuf_XX;
- }
- }
- }
- return NULL;
-}
-
-int GetAudioSupperBassVolLutBufCFGIndexModifyEnable()
-{
- const char *config_value;
- config_value = config_get_str("TV", "audio.amp.supperbass.cfgindex.mod.en",
- "null");
- //LOGD("%s, get audio.amp.supperbass.cfgindex.mod.en is %s \n", "TV",
- // config_value);
-
- if (strcmp(config_value, "null") == 0) {
- // LOGD(
- // "%s, get config modify value \"%s\", return audio.amp.supperbass.cfgindex.mod.en.\n",
- // "TV", config_value);
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioSupperBassVolLutBufNameModifyEnableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV",
- "audio.amp.supbassvol.lutbufname.mod.en", "null");
- //LOGD("%s, audio.amp.supbassvol.lutbufname.mod.en is %s \n", "TV",
- // config_value);
-
- if (strcmp(config_value, "null") == 0) {
- // LOGD(
- // "%s, get config enable value \"%s\", return 0 to not enable moidfy lut buffer name.\n",
- // "TV", config_value);
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioSupperBassVolLutBufNameCFG(int get_type, char name_buf[])
-{
- if (get_type == CC_GET_LUT_TV) {
- strcpy(name_buf, "audio.amp.supbassvol.tv.lb.name");
- } else if (get_type == CC_GET_LUT_AV) {
- strcpy(name_buf, "audio.amp.supbassvol.av.lb.name");
- } else if (get_type == CC_GET_LUT_COMP) {
- strcpy(name_buf, "audio.amp.supbassvol.comp.lb.name");
- } else if (get_type == CC_GET_LUT_HDMI) {
- strcpy(name_buf, "audio.amp.supbassvol.hdmi.lb.name");
- } else if (get_type == CC_GET_LUT_VGA) {
- strcpy(name_buf, "audio.amp.supbassvol.vga.lb.name");
- } else if (get_type == CC_GET_LUT_MPEG) {
- strcpy(name_buf, "audio.amp.supbassvol.mpeg.lb.name");
- } else if (get_type == CC_GET_LUT_HDMI_4K2K) {
- strcpy(name_buf, "audio.amp.supbassvol.hdmi4k2k.lb.name");
- } else if (get_type == CC_GET_LUT_USB_4K2K) {
- strcpy(name_buf, "audio.amp.supbassvol.usb4k2k.lb.name");
- } else {
- return -1;
- }
-
- return 0;
-}
-
-static int GetAudioSupperBassByModifyName(int get_type,
- int *VolumeDigitLutBuf_XX)
-{
- int i = 0, buf_count = 0, buf_item_count = 0;
- char key_buf[128];
- const char *value_buf;
-
- memset(key_buf, '\0', 128);
-
- GetAudioSupperBassVolLutBufNameCFG(get_type, key_buf);
-
- value_buf = config_get_str("TV", key_buf, (char *) "");
- //LOGD("%s, get_type = %d, key_buf = %s, value_buf = %s \n", "TV",
- // get_type, key_buf, value_buf);
-
- if (strcmp(value_buf, "") != 0) {
- if (GetAudioCfgBufferData(value_buf, &buf_count, &buf_item_count, 10,
- VolumeDigitLutBuf_XX) == 0) {
- return 0;
- }
- }
-
- return -1;
-}
-
-int *GetAudioAmplifierSupperBassVolumeLUTBufferPtr(int get_type,
- int audio_std)
-{
- int buf_count = 0, buf_item_count = 0;
-
- int name_en = GetAudioSupperBassVolLutBufNameModifyEnableCFG();
-
- if (name_en == 1) {
- if (get_type == CC_GET_LUT_TV) {
- if (GetAudioSupperBassByModifyName(get_type,
- mTVSupperBassDigitLutBuf_XX) == 0) {
- return mTVSupperBassDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_AV) {
- if (GetAudioSupperBassByModifyName(get_type,
- mAVSupperBassDigitLutBuf_XX) == 0) {
- return mAVSupperBassDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_COMP) {
- if (GetAudioSupperBassByModifyName(get_type,
- mCOMPSupperBassDigitLutBuf_XX) == 0) {
- return mCOMPSupperBassDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_HDMI) {
- if (GetAudioSupperBassByModifyName(get_type,
- mHDMISupperBassDigitLutBuf_XX) == 0) {
- return mHDMISupperBassDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_VGA) {
- if (GetAudioSupperBassByModifyName(get_type,
- mVGASupperBassDigitLutBuf_XX) == 0) {
- return mVGASupperBassDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_MPEG) {
- if (GetAudioSupperBassByModifyName(get_type,
- mMPEGSupperBassDigitLutBuf_XX) == 0) {
- return mMPEGSupperBassDigitLutBuf_XX;
- }
- }
- } else {
- if (get_type == CC_GET_LUT_TV) {
- if (GetAudioCfgBufferData(
- CS_AUDIO_AMP_SUPPERBASSVOL_TV_LUTBUF_CFG_NAME, &buf_count,
- &buf_item_count, 10, mTVSupperBassDigitLutBuf_XX) == 0) {
- return mTVSupperBassDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_AV) {
- if (GetAudioCfgBufferData(
- CS_AUDIO_AMP_SUPPERBASSVOL_AV_LUTBUF_CFG_NAME, &buf_count,
- &buf_item_count, 10, mAVSupperBassDigitLutBuf_XX) == 0) {
- return mAVSupperBassDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_COMP) {
- if (GetAudioCfgBufferData(
- CS_AUDIO_AMP_SUPPERBASSVOL_COMP_LUTBUF_CFG_NAME, &buf_count,
- &buf_item_count, 10, mCOMPSupperBassDigitLutBuf_XX) == 0) {
- return mCOMPSupperBassDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_HDMI) {
- if (GetAudioCfgBufferData(
- CS_AUDIO_AMP_SUPPERBASSVOL_HDMI_LUTBUF_CFG_NAME, &buf_count,
- &buf_item_count, 10, mHDMISupperBassDigitLutBuf_XX) == 0) {
- return mHDMISupperBassDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_VGA) {
- if (GetAudioCfgBufferData(
- CS_AUDIO_AMP_SUPPERBASSVOL_VGA_LUTBUF_CFG_NAME, &buf_count,
- &buf_item_count, 10, mVGASupperBassDigitLutBuf_XX) == 0) {
- return mVGASupperBassDigitLutBuf_XX;
- }
- } else if (get_type == CC_GET_LUT_MPEG) {
- if (GetAudioCfgBufferData(
- CS_AUDIO_AMP_SUPPERBASSVOL_MPEG_LUTBUF_CFG_NAME, &buf_count,
- &buf_item_count, 10, mMPEGSupperBassDigitLutBuf_XX) == 0) {
- return mMPEGSupperBassDigitLutBuf_XX;
- }
- }
- }
-
- return NULL;
-}
-
-int *GetAudioEQPresetBufferPtr()
-{
- int buf_count = 0, buf_item_count = 0;
- int *tmpDataBufPtr = NULL;
-
- tmpDataBufPtr = mEQPresetValueBuf_XX;
-
- memset((void *) tmpDataBufPtr, 0, sizeof(int) * CC_EQ_PRESET_BUF_SIZE);
-
- if (GetAudioCfgBufferData(CS_EQ_PRESETBUF_CFG_NAME, &buf_count,
- &buf_item_count, 10, tmpDataBufPtr) == 0) {
- return tmpDataBufPtr;
- }
-
- return mEQPresetDefBuf;
-}
-
-int GetAudioDVISupportEnable()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_DVI_SUPPORT_ENABLE_CFG_NAME, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetTvAudioCardID(char tv_card_id_buf[])
-{
- const char *value;
- value = config_get_str("TV", "audio.tv.card.id", "null");
- //LOGD("%s, get card id is \"%s\".\n", "TV", tv_card_id_buf);
-
- strcpy(tv_card_id_buf, value);
- if (strcmp(value, "null") == 0) {
- strcpy(tv_card_id_buf, "0");
- // LOGD("%s, card id not config, we set to default \"%s\".\n",
- // "TV", "0");
- }
-
- return 0;
-}
-
-int GetTvAudioCardName(char tv_card_name_buf[])
-{
- const char *value;
- value = config_get_str("TV", "audio.tv.card.name", "null");
- //LOGD("%s, get card name is \"%s\".\n", "TV", tv_card_name_buf);
-
- strcpy(tv_card_name_buf, value);
- if (strcmp(value, "null") == 0) {
- strcpy(tv_card_name_buf, "AMLSYNO9629");
- // LOGD("%s, card name not config, we set to default \"%s\".\n",
- // "TV", "AML-M2");
- }
-
- return 0;
-}
-
-int GetTvAudioCardNeedSet()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", "audio.tv.card.needset", "null");
- //LOGD("%s, get \"%s\" is \"%s\".\n", "TV", "audio.tv.card.needset",
- // config_value);
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- if (strtoul(config_value, NULL, 10) == 0) {
- return 0;
- }
-
- return 1;
-}
-
-static int GetAudioEffectAmplifierGainCfg(const char *cfg_name,
- int def_gain_val, int max_gain_val)
-{
- int tmp_val;
- const char *config_value;
-
- config_value = config_get_str("TV", cfg_name, "null");
- //LOGD("%s, get %s is \"%s\".\n", "TV", cfg_name, config_value);
-
- if (strcmp(config_value, "null") == 0) {
- // LOGD(
- // "%s, get config \"%s\" is \"%s\", return default audio effect amplifier gain value(%d).\n",
- // "TV", cfg_name, config_value, def_gain_val);
- return def_gain_val;
- }
-
- tmp_val = strtoul(config_value, NULL, 10);
- if (tmp_val < 0 || tmp_val > max_gain_val) {
- // LOGD(
- // "%s, get config \"%s\" is error, it(%d) should between %d and %d, return default audio effect amplifier gain value(%d)\n",
- // "TV", cfg_name, tmp_val, 0, max_gain_val, def_gain_val);
- tmp_val = def_gain_val;
- }
-
- return tmp_val;
-}
-
-int GetAudioSRSModuleDisableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_SRS_MOUDLE_DISABLE_CFG_NAME, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioSRSSourroundDisableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_SRS_SOURROUND_DISABLE_CFG_NAME,
- "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioSRSTrubassDisableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_SRS_TRUBASS_DISABLE_CFG_NAME,
- "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioSRSDialogClarityDisableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_SRS_DIALOGCLARITY_DISABLE_CFG_NAME,
- "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-static int GetAudioSRSGainCfg(const char *cfg_name, int def_gain_val)
-{
- int tmp_val;
- const char *config_value;
-
- config_value = config_get_str("TV", cfg_name, "null");
- //LOGD("%s, get %s is \"%s\".\n", "TV", cfg_name, config_value);
-
- if (strcmp(config_value, "null") == 0) {
- // LOGD(
- // "%s, get config \"%s\" is \"%s\", return -1 to use default gain value.\n",
- // "TV", cfg_name, config_value);
- return -1;
- }
-
- tmp_val = strtoul(config_value, NULL, 10);
- if (tmp_val < 0 || tmp_val > 100) {
- tmp_val = def_gain_val;
- // LOGD("%s, get config \"%s\" is error, we set it to %d\n", "TV",
- // cfg_name, tmp_val);
- }
-
- return tmp_val;
-}
-
-static int GetAudioSRSAmplifierGainCfg(const char *cfg_name, int def_gain_val)
-{
- return GetAudioEffectAmplifierGainCfg(cfg_name, def_gain_val, 24);
-}
-
-static int GetAudioEQAmplifierGainCfg(const char *cfg_name, int def_gain_val)
-{
- return GetAudioEffectAmplifierGainCfg(cfg_name, def_gain_val, 24);
-}
-
-int GetAudioSRSSourroundGainCfg()
-{
- return GetAudioSRSGainCfg(CS_SRS_SOURROUND_GAIN_CFG_NAME,
- CC_SRS_SURROUND_GAIN_VAL);
-}
-
-int GetAudioSRSSourroundAmplifierMasterGainCfg()
-{
- return GetAudioSRSAmplifierGainCfg(
- CS_SRS_SOURROUND_AMP_MASTER_GAIN_CFG_NAME,
- CC_SRS_SURROUND_AMP_MASTER_GAIN_VAL);
-}
-
-int GetAudioSRSSourroundAmplifierSupperBassGainCfg()
-{
- return GetAudioSRSAmplifierGainCfg(
- CS_SRS_SOURROUND_AMP_SUPPERBASS_GAIN_CFG_NAME,
- CC_SRS_SURROUND_AMP_SUPPERBASS_GAIN_VAL);
-}
-
-int GetAudioSRSTrubassOnlyGainCfg()
-{
- return GetAudioSRSGainCfg(CS_SRS_TRUBASS_ONLY_GAIN_CFG_NAME,
- CC_SRS_TRUBASS_ONLY_GAIN_VAL);
-}
-
-int GetAudioSRSTrubassOnlyAmplifierMasterGainCfg()
-{
- return GetAudioSRSAmplifierGainCfg(
- CS_SRS_TRUBASS_ONLY_AMP_MASTER_GAIN_CFG_NAME,
- CC_SRS_TRUBASS_ONLY_AMP_MASTER_GAIN_VAL);
-}
-
-int GetAudioSRSTrubassOnlyAmplifierSupperBassGainCfg()
-{
- return GetAudioSRSAmplifierGainCfg(
- CS_SRS_TRUBASS_ONLY_AMP_SUPPERBASS_GAIN_CFG_NAME,
- CC_SRS_TRUBASS_ONLY_AMP_SUPPERBASS_GAIN_VAL);
-}
-
-int GetAudioSRSDialogClarityOnlyGainCfg()
-{
- return GetAudioSRSGainCfg(CS_SRS_DIALOGCLARITY_ONLY_GAIN_CFG_NAME,
- CC_SRS_DIALOGCLARITY_ONLY_GAIN_VAL);
-}
-
-int GetAudioSRSDialogClarityOnlyAmplifierMasterGainCfg()
-{
- return GetAudioSRSAmplifierGainCfg(
- CS_SRS_DIALOGCLARITY_ONLY_AMP_MASTER_GAIN_CFG_NAME,
- CC_SRS_DIALOGCLARITY_ONLY_AMP_MASTER_GAIN_VAL);
-}
-
-int GetAudioSRSDialogClarityOnlyAmplifierSupperBassGainCfg()
-{
- return GetAudioSRSAmplifierGainCfg(
- CS_SRS_DIALOGCLARITY_ONLY_AMP_SUPPERBASS_GAIN_CFG_NAME,
- CC_SRS_DIALOGCLARITY_ONLY_AMP_SUPPERBASS_GAIN_VAL);
-}
-
-int GetAudioSRSDialogClarityOnlyDefinitionGainCfg()
-{
- return GetAudioSRSGainCfg(
- CS_SRS_DIALOGCLARITY_ONLY_DEFINITION_GAIN_CFG_NAME,
- CC_SRS_DIALOGCLARITY_ONLY_DEFINITION_GAIN_VAL);
-}
-
-int GetAudioSRSTrubassAndDialogClarityTrubassGainCfg()
-{
- return GetAudioSRSGainCfg(
- CS_SRS_TRUBASS_DIALOGCLARITY_TRUBASS_GAIN_CFG_NAME,
- CC_SRS_TRUBASS_DIALOGCLARITY_TRUBASS_GAIN_VAL);
-}
-
-int GetAudioSRSTrubassAndDialogClarityDialogClarityGainCfg()
-{
- return GetAudioSRSGainCfg(
- CS_SRS_TRUBASS_DIALOGCLARITY_DIALOGCLARITY_GAIN_CFG_NAME,
- CC_SRS_TRUBASS_DIALOGCLARITY_DIALOGCLARITY_GAIN_VAL);
-}
-
-int GetAudioSRSTrubassAndDialogClarityDefinitionGainCfg()
-{
- return GetAudioSRSGainCfg(
- CS_SRS_TRUBASS_DIALOGCLARITY_DEFINITION_GAIN_CFG_NAME,
- CC_SRS_TRUBASS_DIALOGCLARITY_DEFINITION_GAIN_VAL);
-}
-
-int GetAudioSRSTrubassAndDialogClarityAmplifierMasterGainCfg()
-{
- return GetAudioSRSAmplifierGainCfg(
- CS_SRS_TRUBASS_DIALOGCLARITY_AMP_MASTER_GAIN_CFG_NAME,
- CC_SRS_TRUBASS_DIALOGCLARITY_AMP_MASTER_GAIN_VAL);
-}
-
-int GetAudioSRSTrubassAndDialogClarityAmplifierSupperBassGainCfg()
-{
- return GetAudioSRSAmplifierGainCfg(
- CS_SRS_TRUBASS_DIALOGCLARITY_AMP_SUPPERBASS_GAIN_CFG_NAME,
- CC_SRS_TRUBASS_DIALOGCLARITY_AMP_SUPPERBASS_GAIN_VAL);
-}
-
-int GetAudioSRSSupperBassTrubassSpeakerSizeCfg(int get_flag)
-{
- int tmp_val;
- char cfg_name[128] = { 0 };
- const char *config_value;
-
- if (get_flag == 0) {
- strcpy(cfg_name, CS_SRS_SUPPERBASS_OFF_TRUBASS_SPEAKER_SIZE_CFG_NAME);
- } else {
- strcpy(cfg_name, CS_SRS_SUPPERBASS_ON_TRUBASS_SPEAKER_SIZE_CFG_NAME);
- }
-
- config_value = config_get_str("TV", cfg_name, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return -1;
- }
-
- tmp_val = strtoul(config_value, NULL, 10);
- if (tmp_val < 0 || tmp_val > 7) {
- tmp_val = -1;
- }
-
- return tmp_val;
-}
-
-int GetAudioEQAmplifierMasterAddGainCfg()
-{
- return GetAudioEQAmplifierGainCfg(CS_EQ_AMP_MASTER_GAIN_CFG_NAME,
- CC_EQ_AMP_MASTER_GAIN_VAL);
-}
-
-int GetAudioEQAmplifierSupperBassAddGainCfg()
-{
- return GetAudioEQAmplifierGainCfg(CS_EQ_AMP_SUPPERBASS_GAIN_CFG_NAME,
- CC_EQ_AMP_SUPPERBASS_GAIN_VAL);
-}
-
-int GetAudioEqModuleDisableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_EQ_MOUDLE_DISABLE_CFG_NAME, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioEqUsingAndroidCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_EQ_USING_ANDROID_CFG_NAME, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioEQGainRangeCFG(int *min_val, int *max_val)
-{
- int i = 0, buf_item_count = 0, tmp_item_count = 0;
- int tmp_buf[16] = { 0 };
-
- buf_item_count = 2;
- tmp_item_count = buf_item_count;
- if (GetAudioCfgData(CS_EQ_GAIN_RANGE_CFG_NAME, &tmp_item_count, 10, tmp_buf)
- < 0) {
- return -1;
- }
-
- if (tmp_item_count != buf_item_count) {
- return -1;
- }
-
- *min_val = tmp_buf[0];
- *max_val = tmp_buf[1];
-
- return 0;
-}
-
-int GetAudioEQUIGainRangeCFG(int *min_val, int *max_val)
-{
- int i = 0, buf_item_count = 0, tmp_item_count = 0;
- int tmp_buf[16] = { 0 };
-
- buf_item_count = 2;
- tmp_item_count = buf_item_count;
- if (GetAudioCfgData(CS_EQ_UI_GAIN_RANGE_CFG_NAME, &tmp_item_count, 10,
- tmp_buf) < 0) {
- return -1;
- }
-
- if (tmp_item_count != buf_item_count) {
- return -1;
- }
-
- *min_val = tmp_buf[0];
- *max_val = tmp_buf[1];
-
- return 0;
-}
-
-int GetAudioDumpDataEnableFlagCfg()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_AUDIO_DUMP_DATA_ENABLE_CFG_NAME,
- "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtol(config_value, NULL, 10);
-}
-
-int GetAudioKeyMuteCfg()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_KEY_MUTE_CFG_NAME, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioAVOutInitMuteStatusCFG()
-{
- const char *config_value;
- int status = 0;
-
- config_value = config_get_str("TV", CS_AVOUT_INIT_MUTE_CFG_NAME, "null");
- LOGD("%s, get %s is \"%s\".\n", __FUNCTION__, CS_AVOUT_INIT_MUTE_CFG_NAME,
- config_value);
-
- if (strcmp(config_value, "enable") == 0) {
- status = 1;
- } else {
- status = 0;
- }
-
- return status;
-}
-
-int GetAudioSupperBassModuleDisableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_SUPPERBASS_MODULE_DISABLE_CFG_NAME,
- "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioSupperBassSwitchDisableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_SUPPERBASS_SWITCH_DISABLE_CFG_NAME,
- "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-static int GetAudioSrcInputLineInVol(const char *cfg_str, int *l_vol,
- int *r_vol)
-{
- int buf_item_count = 2;
- int data_buf[2] = { -1, -1 };
-
- if (GetAudioCfgData(cfg_str, &buf_item_count, 10, data_buf) < 0) {
- return -1;
- }
-
- if (buf_item_count < 2) {
- return -1;
- }
-
- *l_vol = data_buf[0];
- *r_vol = data_buf[1];
-
- return 0;
-}
-
-int GetAudioSrcInputTVLineInVol(int *l_vol, int *r_vol)
-{
- return GetAudioSrcInputLineInVol(CS_SRC_INPUT_TV_LINEIN_VOL_CFG_NAME, l_vol,
- r_vol);
-}
-
-int GetAudioSrcInputAVLineInVol(int *l_vol, int *r_vol)
-{
- return GetAudioSrcInputLineInVol(CS_SRC_INPUT_AV_LINEIN_VOL_CFG_NAME, l_vol,
- r_vol);
-}
-
-int GetAudioSrcInputCOMPLineInVol(int *l_vol, int *r_vol)
-{
- return GetAudioSrcInputLineInVol(CS_SRC_INPUT_COMP_LINEIN_VOL_CFG_NAME,
- l_vol, r_vol);
-}
-
-int GetAudioSrcInputHDMILineInVol(int *l_vol, int *r_vol)
-{
- return GetAudioSrcInputLineInVol(CS_SRC_INPUT_HDMI_LINEIN_VOL_CFG_NAME,
- l_vol, r_vol);
-}
-
-int GetAudioSrcInputVGALineInVol(int *l_vol, int *r_vol)
-{
- return GetAudioSrcInputLineInVol(CS_SRC_INPUT_VGA_LINEIN_VOL_CFG_NAME,
- l_vol, r_vol);
-}
-
-int GetAudioSrcInputMPEGLineInVol(int *l_vol, int *r_vol)
-{
- return GetAudioSrcInputLineInVol(CS_SRC_INPUT_MPEG_LINEIN_VOL_CFG_NAME,
- l_vol, r_vol);
-}
-
-static int GetAudioSrcInputLineOutVol(const char *cfg_str, int *l_vol,
- int *r_vol)
-{
- int buf_item_count = 2;
- int data_buf[2] = { -1, -1 };
-
- if (GetAudioCfgData(cfg_str, &buf_item_count, 10, data_buf) < 0) {
- return -1;
- }
-
- if (buf_item_count < 2) {
- return -1;
- }
-
- *l_vol = data_buf[0];
- *r_vol = data_buf[1];
-
- return 0;
-}
-
-int GetAudioSrcInputTVLineOutVol(int *l_vol, int *r_vol)
-{
- return GetAudioSrcInputLineOutVol(CS_SRC_INPUT_TV_LINEOUT_VOL_CFG_NAME,
- l_vol, r_vol);
-}
-
-int GetAudioSrcInputAVLineOutVol(int *l_vol, int *r_vol)
-{
- return GetAudioSrcInputLineOutVol(CS_SRC_INPUT_AV_LINEOUT_VOL_CFG_NAME,
- l_vol, r_vol);
-}
-
-int GetAudioSrcInputCOMPLineOutVol(int *l_vol, int *r_vol)
-{
- return GetAudioSrcInputLineOutVol(CS_SRC_INPUT_COMP_LINEOUT_VOL_CFG_NAME,
- l_vol, r_vol);
-}
-
-int GetAudioSrcInputHDMILineOutVol(int *l_vol, int *r_vol)
-{
- return GetAudioSrcInputLineOutVol(CS_SRC_INPUT_HDMI_LINEOUT_VOL_CFG_NAME,
- l_vol, r_vol);
-}
-
-int GetAudioSrcInputVGALineOutVol(int *l_vol, int *r_vol)
-{
- return GetAudioSrcInputLineOutVol(CS_SRC_INPUT_VGA_LINEOUT_VOL_CFG_NAME,
- l_vol, r_vol);
-}
-
-int GetAudioSrcInputMPEGLineOutVol(int *l_vol, int *r_vol)
-{
- int tmp_val = 0;
- const char *config_value;
-
- config_value = config_get_str("TV",
- CS_SRC_INPUT_MPEG_LINEOUT_VOL_CFG_NAME_OLD, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return GetAudioSrcInputLineOutVol(
- CS_SRC_INPUT_MPEG_LINEOUT_VOL_CFG_NAME, l_vol, r_vol);
- }
-
- tmp_val = strtol(config_value, NULL, 10);
-
- *l_vol = tmp_val;
- *r_vol = tmp_val;
-
- return 0;
-}
-
-int GetAudioWallEffectTypeCfg()
-{
- return GetAudioCfgSingleIntData("audio.walleffect.type", 0);
-}
-
-static int GetAudioMainVolumeLutBufCompensation(const char *cfg_str,
- int *cfg_flag)
-{
- const char *config_value;
-
- config_value = config_get_str("TV", cfg_str, "null");
- //LOGD("%s, get \"%s\" is \"%s\".\n", "TV", cfg_str, config_value);
-
- if (strcmp(config_value, "null") == 0) {
- if (cfg_flag != NULL) {
- *cfg_flag = 0;
- }
-
- //LOGD(
- // "%s, get config \"%s\" is \"%s\", return 0 to not compensation lut buffer.\n",
- // "TV", cfg_str, config_value);
- return 0;
- }
-
- if (cfg_flag != NULL) {
- *cfg_flag = 1;
- }
-
- return strtol(config_value, NULL, 10);
-}
-
-int GetAudioMainVolumeLutBufTVCompensation()
-{
- return GetAudioMainVolumeLutBufCompensation(
- CS_AMP_MAINVOL_LUTBUF_COMPENSATION_TV_CFG_NAME, NULL);
-}
-
-int GetAudioMainVolumeLutBufAVCompensation()
-{
- return GetAudioMainVolumeLutBufCompensation(
- CS_AMP_MAINVOL_LUTBUF_COMPENSATION_AV_CFG_NAME, NULL);
-}
-
-int GetAudioMainVolumeLutBufCOMPCompensation()
-{
- return GetAudioMainVolumeLutBufCompensation(
- CS_AMP_MAINVOL_LUTBUF_COMPENSATION_COMP_CFG_NAME, NULL);
-}
-
-int GetAudioMainVolumeLutBufHDMICompensation()
-{
- return GetAudioMainVolumeLutBufCompensation(
- CS_AMP_MAINVOL_LUTBUF_COMPENSATION_HDMI_CFG_NAME, NULL);
-}
-
-int GetAudioMainVolumeLutBufVGACompensation()
-{
- return GetAudioMainVolumeLutBufCompensation(
- CS_AMP_MAINVOL_LUTBUF_COMPENSATION_VGA_CFG_NAME, NULL);
-}
-
-int GetAudioMainVolumeLutBufMPEGCompensation()
-{
- int tmp_ret = 0, cfg_flag = 0;
-
- tmp_ret = GetAudioMainVolumeLutBufCompensation(
- CS_AMP_MAINVOL_LUTBUF_COMPENSATION_MPEG_CFG_NAME, &cfg_flag);
-
- if (cfg_flag == 0) {
- tmp_ret = GetAudioMainVolumeLutBufDTVCompensation();
- }
-
- return tmp_ret;
-}
-
-int GetAudioMainVolumeLutBufDTVCompensation()
-{
- return GetAudioMainVolumeLutBufCompensation(
- CS_AMP_MAINVOL_LUTBUF_COMPENSATION_DTV_CFG_NAME, NULL);
-}
-
-int GetAudioNoiseGateEnableCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_AUDIO_NOISE_GATE_ENABLE_CFG_NAME,
- "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-int GetAudioNoiseGateUpperBoundCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV",
- CS_AUDIO_NOISE_GATE_UPPER_BOUND_CFG_NAME, "254");
-
- return strtol(config_value, NULL, 10);
-}
-
-int GetAudioNoiseGateThresholdCFG()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", CS_AUDIO_NOISE_GATE_THRESHOLD_CFG_NAME,
- "-1");
-
- return strtol(config_value, NULL, 10);
-}
-
-int GetDisableResetSystemFrameSize()
-{
- const char *config_value;
- config_value = config_get_str("TV",
- CS_DISABLE_RESET_SYSTEM_FRAMESIZE_CFG_NAME, "null");
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
-
-static int gDisableResetSystemFrameSizeFlag = -1;
-int GetDisableReset_System_framesizeCFG(void)
-{
- if (gDisableResetSystemFrameSizeFlag == -1) {
- const char *config_value;
-
- config_value = config_get_str("TV", CS_AUDIO_SYSTEM_FRAMESIZE_CFG_NAME,
- "null");
- LOGD("%s, get %s is \"%s\".\n",
- __FUNCTION__, CS_AUDIO_SYSTEM_FRAMESIZE_CFG_NAME, config_value);
-
- if (strcmp(config_value, "disable") == 0) {
- gDisableResetSystemFrameSizeFlag = 0x55;
- } else {
- gDisableResetSystemFrameSizeFlag = 0;
- }
- }
-
- return gDisableResetSystemFrameSizeFlag;
-}
-
-int GetAudioArchitectureTypeCFG()
-{
- static int architecture_type = -1;
- const char *config_value = NULL;
-
- if (architecture_type == -1) {
- config_value = config_get_str ( "TV", CS_AUDIO_ARCHITECTURE_TYPE_CFG_NAME, "null" );
- if (strcasecmp(config_value, "null") == 0) {
- architecture_type = CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC;
- } else if (strcasecmp(config_value, "t866_external_dac_offboard_fbc") == 0) {
- architecture_type = CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC;
- } else if (strcasecmp(config_value, "t866_external_dac_offboard_customer_lib") == 0) {
- architecture_type = CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB;
- } else if (strcasecmp(config_value, "t866_external_dac_offboard_digital") == 0) {
- architecture_type = CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_DIGITAL;
- } else if (strcasecmp(config_value, "t866_external_dac_onboard") == 0) {
- architecture_type = CC_DAC_T866_EXTERNAL_DAC_ON_BOARD;
- } else if (strcasecmp(config_value, "t866_iternal_dac") == 0) {
- architecture_type = CC_DAC_T866_INTERNAL_DAC;
- } else if (strcasecmp(config_value, "m6c") == 0) {
- architecture_type = CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD;
- } else {
- architecture_type = CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC;
- }
- }
-
- return architecture_type;
-}
-
-static int gAudioResampleType = -1;
-int GetAudioResampleTypeCFG()
-{
- char *token = NULL;
- const char *strDelimit = ",";
- const char *config_value = NULL;
- char cfg_buf[1024];
-
- if (gAudioResampleType == -1) {
- gAudioResampleType = 0;
-
- config_value = config_get_str ( "TV", CS_AUDIO_RESAMPLE_TYPE_CFG_NAME, "null" );
- strncpy(cfg_buf, config_value, sizeof(cfg_buf));
- if (strcmp(cfg_buf, "") != 0) {
- token = strtok(cfg_buf, strDelimit);
- while (token != NULL) {
- if (strcasecmp(token, "hw") == 0) {
- gAudioResampleType |= CC_AUD_RESAMPLE_TYPE_HW;
- } else if (strcasecmp(token, "sw") == 0) {
- gAudioResampleType |= CC_AUD_RESAMPLE_TYPE_SW;
- }
-
- token = strtok(NULL, strDelimit);
- }
- } else {
- gAudioResampleType = CC_AUD_RESAMPLE_TYPE_SW; //if can't find config string, allow sw resample
- }
- }
-
- return gAudioResampleType;
-}
-
-int GetamAudioDisableFlagCFG()
-{
- static int am_audio_disable_flag = -1;
- const char *config_value = NULL;
-
- if (am_audio_disable_flag == -1) {
- config_value = config_get_str ( "TV", "audio.amaudio.disable", "null" );
- if (strcasecmp(config_value, "null") == 0 || strcasecmp(config_value, "false") == 0) {
- am_audio_disable_flag = 0;
- } else if (strcasecmp(config_value, "true") == 0) {
- am_audio_disable_flag = 1;
- } else {
- am_audio_disable_flag = 0;
- }
- }
-
- return am_audio_disable_flag;
-}
-
-int GetAudioFirstInitSetTypeCFG()
-{
- const char *config_value;
- config_value = config_get_str ( "TV", "audio.firstinitset.type", "null" );
-
- if (strcmp(config_value, "null") == 0) {
- return 0;
- }
-
- return strtoul(config_value, NULL, 10);
-}
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <android/log.h>
+#include <cutils/properties.h>
+
+#include "../tvsetting/CTvSetting.h"
+#include "../tvconfig/tvconfig.h"
+#include "audio_cfg.h"
+
+#define LOG_TAG "audio_cfg"
+#include "CTvLog.h"
+
+#define CS_AUDIO_AMP_MASTER_NOLINE_SWITCH_CFG_NAME "audio.amp.master.noline.switch"
+#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_CNT_CFG_NAME "audio.amp.master.noline.point.cnt"
+#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_IND_BUF_CFG_NAME "audio.amp.master.noline.point.ind.buf"
+#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_DEF_BUF_CFG_NAME "audio.amp.master.noline.point.data.defbuf"
+#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_IND_DEF_BUF_CFG_NAME "audio.amp.master.noline.point.ind.defbuf"
+#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_TV_BUF_CFG_NAME "audio.amp.master.noline.point.data.tv"
+#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_AV_BUF_CFG_NAME "audio.amp.master.noline.point.data.av"
+#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_COMP_BUF_CFG_NAME "audio.amp.master.noline.point.data.comp"
+#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_HDMI_BUF_CFG_NAME "audio.amp.master.noline.point.data.hdmi"
+#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_VGA_BUF_CFG_NAME "audio.amp.master.noline.point.data.vga"
+#define CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_MPEG_BUF_CFG_NAME "audio.amp.master.noline.point.data.mpeg"
+
+#define CS_AUDIO_AMP_SUPPERBASS_NOLINE_SWITCH_CFG_NAME "audio.amp.supperbass.noline.switch"
+#define CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_CNT_CFG_NAME "audio.amp.supperbass.noline.point.cnt"
+#define CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_IND_BUF_CFG_NAME "audio.amp.supperbass.noline.point.ind.buf"
+#define CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_DATA_DEF_BUF_CFG_NAME "audio.amp.supperbass.noline.point.data.defbuf"
+#define CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_IND_DEF_BUF_CFG_NAME "audio.amp.supperbass.noline.point.ind.defbuf"
+
+#define CS_AUDIO_AMP_BALANCE_EXCHG_CFG_NAME "audio.amp.balance.exchg"
+
+#define CS_EQ_MOUDLE_DISABLE_CFG_NAME "audio.eq.module.disable"
+#define CS_EQ_USING_ANDROID_CFG_NAME "audio.eq.using.android"
+#define CS_EQ_PRESETBUF_CFG_NAME "audio.eq.presetbuf"
+#define CS_EQ_GAIN_RANGE_CFG_NAME "audio.eq.gain.range"
+#define CS_EQ_UI_GAIN_RANGE_CFG_NAME "audio.eq.uigain.range"
+#define CS_EQ_AMP_MASTER_GAIN_CFG_NAME "audio.eq.ampmaster.gain"
+#define CS_EQ_AMP_SUPPERBASS_GAIN_CFG_NAME "audio.eq.ampsupperbass.gain"
+
+#define CS_AUDIO_AMP_MAINVOL_TV_LUTBUF_CFG_NAME "audio.amp.mainvol.tv.lutbuf"
+#define CS_AUDIO_AMP_MAINVOL_AV_LUTBUF_CFG_NAME "audio.amp.mainvol.av.lutbuf"
+#define CS_AUDIO_AMP_MAINVOL_COMP_LUTBUF_CFG_NAME "audio.amp.mainvol.comp.lutbuf"
+#define CS_AUDIO_AMP_MAINVOL_HDMI_LUTBUF_CFG_NAME "audio.amp.mainvol.hdmi.lutbuf"
+#define CS_AUDIO_AMP_MAINVOL_VGA_LUTBUF_CFG_NAME "audio.amp.mainvol.vga.lutbuf"
+#define CS_AUDIO_AMP_MAINVOL_MPEG_LUTBUF_CFG_NAME "audio.amp.mainvol.mpeg.lutbuf"
+
+#define CS_AUDIO_AMP_SUPPERBASSVOL_TV_LUTBUF_CFG_NAME "audio.amp.supbassvol.tv.lutbuf"
+#define CS_AUDIO_AMP_SUPPERBASSVOL_AV_LUTBUF_CFG_NAME "audio.amp.supbassvol.av.lutbuf"
+#define CS_AUDIO_AMP_SUPPERBASSVOL_COMP_LUTBUF_CFG_NAME "audio.amp.supbassvol.comp.lutbuf"
+#define CS_AUDIO_AMP_SUPPERBASSVOL_HDMI_LUTBUF_CFG_NAME "audio.amp.supbassvol.hdmi.lutbuf"
+#define CS_AUDIO_AMP_SUPPERBASSVOL_VGA_LUTBUF_CFG_NAME "audio.amp.supbassvol.vga.lutbuf"
+#define CS_AUDIO_AMP_SUPPERBASSVOL_MPEG_LUTBUF_CFG_NAME "audio.amp.supbassvol.mpeg.lutbuf"
+
+#define CS_SRS_MOUDLE_DISABLE_CFG_NAME "audio.srs.module.disable"
+#define CS_SRS_SOURROUND_DISABLE_CFG_NAME "audio.srs.sourround.disable"
+#define CS_SRS_TRUBASS_DISABLE_CFG_NAME "audio.srs.trubass.disable"
+#define CS_SRS_DIALOGCLARITY_DISABLE_CFG_NAME "audio.srs.dialogclarity.disable"
+#define CS_SRS_SOURROUND_GAIN_CFG_NAME "audio.srs.sourround.gain"
+#define CS_SRS_SOURROUND_AMP_MASTER_GAIN_CFG_NAME "audio.srs.sourround.ampmaster.gain"
+#define CS_SRS_SOURROUND_AMP_SUPPERBASS_GAIN_CFG_NAME "audio.srs.sourround.ampsupperbass.gain"
+#define CS_SRS_TRUBASS_ONLY_GAIN_CFG_NAME "audio.srs.trubass.only.gain"
+#define CS_SRS_TRUBASS_ONLY_AMP_MASTER_GAIN_CFG_NAME "audio.srs.trubass.only.ampmaster.gain"
+#define CS_SRS_TRUBASS_ONLY_AMP_SUPPERBASS_GAIN_CFG_NAME "audio.srs.trubass.only.ampsupperbass.gain"
+#define CS_SRS_DIALOGCLARITY_ONLY_GAIN_CFG_NAME "audio.srs.dialogclarity.only.gain"
+#define CS_SRS_DIALOGCLARITY_ONLY_AMP_MASTER_GAIN_CFG_NAME "audio.srs.dialogclarity.only.ampmaster.gain"
+#define CS_SRS_DIALOGCLARITY_ONLY_AMP_SUPPERBASS_GAIN_CFG_NAME "audio.srs.dialogclarity.only.ampsupperbass.gain"
+#define CS_SRS_DIALOGCLARITY_ONLY_DEFINITION_GAIN_CFG_NAME "audio.srs.dialogclarity.only.definition.gain"
+#define CS_SRS_TRUBASS_DIALOGCLARITY_TRUBASS_GAIN_CFG_NAME "audio.srs.turbass.dialogclarity.trubass.gain"
+#define CS_SRS_TRUBASS_DIALOGCLARITY_DIALOGCLARITY_GAIN_CFG_NAME "audio.srs.turbass.dialogclarity.dialogclarity.gain"
+#define CS_SRS_TRUBASS_DIALOGCLARITY_DEFINITION_GAIN_CFG_NAME "audio.srs.turbass.dialogclarity.definition.gain"
+#define CS_SRS_TRUBASS_DIALOGCLARITY_AMP_MASTER_GAIN_CFG_NAME "audio.srs.turbass.dialogclarity.ampmaster.gain"
+#define CS_SRS_TRUBASS_DIALOGCLARITY_AMP_SUPPERBASS_GAIN_CFG_NAME "audio.srs.turbass.dialogclarity.ampsupperbass.gain"
+#define CS_SRS_SUPPERBASS_ON_TRUBASS_SPEAKER_SIZE_CFG_NAME "audio.srs.supperbasson.turbass.speakersize"
+#define CS_SRS_SUPPERBASS_OFF_TRUBASS_SPEAKER_SIZE_CFG_NAME "audio.srs.supperbassoff.turbass.speakersize"
+
+#define CS_AUDIO_DUMP_DATA_ENABLE_CFG_NAME "audio.dump.data.en"
+#define CS_KEY_MUTE_CFG_NAME "audio.mute.keymute"
+#define CS_AVOUT_INIT_MUTE_CFG_NAME "audio.avout.init.mute"
+#define CS_SUPPERBASS_MODULE_DISABLE_CFG_NAME "audio.supperbass.module.disable"
+#define CS_SUPPERBASS_SWITCH_DISABLE_CFG_NAME "audio.supperbass.switch.disable"
+#define CS_DVI_SUPPORT_ENABLE_CFG_NAME "audio.dvi.support.enable"
+#define CS_SRC_INPUT_TV_LINEIN_VOL_CFG_NAME "audio.srcinput.linein.tv.vol"
+#define CS_SRC_INPUT_AV_LINEIN_VOL_CFG_NAME "audio.srcinput.linein.av.vol"
+#define CS_SRC_INPUT_COMP_LINEIN_VOL_CFG_NAME "audio.srcinput.linein.comp.vol"
+#define CS_SRC_INPUT_HDMI_LINEIN_VOL_CFG_NAME "audio.srcinput.linein.hdmi.vol"
+#define CS_SRC_INPUT_VGA_LINEIN_VOL_CFG_NAME "audio.srcinput.linein.vga.vol"
+#define CS_SRC_INPUT_MPEG_LINEIN_VOL_CFG_NAME "audio.srcinput.linein.mpeg.vol"
+#define CS_SRC_INPUT_TV_LINEOUT_VOL_CFG_NAME "audio.srcinput.lineout.tv.vol"
+#define CS_SRC_INPUT_AV_LINEOUT_VOL_CFG_NAME "audio.srcinput.lineout.av.vol"
+#define CS_SRC_INPUT_COMP_LINEOUT_VOL_CFG_NAME "audio.srcinput.lineout.comp.vol"
+#define CS_SRC_INPUT_HDMI_LINEOUT_VOL_CFG_NAME "audio.srcinput.lineout.hdmi.vol"
+#define CS_SRC_INPUT_VGA_LINEOUT_VOL_CFG_NAME "audio.srcinput.lineout.vga.vol"
+#define CS_SRC_INPUT_MPEG_LINEOUT_VOL_CFG_NAME "audio.srcinput.lineout.mpeg.vol"
+#define CS_SRC_INPUT_MPEG_LINEOUT_VOL_CFG_NAME_OLD "audio.srcinput.lineout.vol"
+
+#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_TV_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.tv"
+#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_AV_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.av"
+#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_COMP_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.comp"
+#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_HDMI_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.hdmi"
+#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_VGA_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.vga"
+#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_MPEG_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.mpeg"
+#define CS_AMP_MAINVOL_LUTBUF_COMPENSATION_DTV_CFG_NAME "audio.amp.mainvol.lutbuf.compensation.dtv"
+
+#define CS_AUDIO_NOISE_GATE_ENABLE_CFG_NAME "audio.noise.gate.enable"
+#define CS_AUDIO_NOISE_GATE_THRESHOLD_CFG_NAME "audio.noise.gate.threshold"
+#define CS_AUDIO_NOISE_GATE_UPPER_BOUND_CFG_NAME "audio.noise.gate.upper.bound"
+
+#define CS_DISABLE_RESET_SYSTEM_FRAMESIZE_CFG_NAME "audio.reset.system.framesize.disable"
+#define CS_AUDIO_SYSTEM_FRAMESIZE_CFG_NAME "audio.reset.system.framesize"
+
+#define CS_AUDIO_ARCHITECTURE_TYPE_CFG_NAME "audio.architecture.type"
+#define CS_AUDIO_RESAMPLE_TYPE_CFG_NAME "audio.resample.type"
+
+
+#define CC_MAX_SUP_LUT_CFG_INDEX (32)
+
+static int gMasterNoLinePointsIndexBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
+static int gMasterNoLinePointsDefDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
+static int gMasterNoLinePointsDefIndexBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
+
+static int gSupperBassNoLinePointsIndexBuffer[CC_NO_LINE_POINTS_MAX_CNT] =
+{ -1 };
+static int gSupperBassNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
+static int gSupperBassNoLinePointsDefDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = {
+ -1
+};
+static int gSupperBassNoLinePointsDefIndexBuffer[CC_NO_LINE_POINTS_MAX_CNT] = {
+ -1
+};
+
+static int gTVMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
+static int gAVMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
+static int gCOMPMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
+static int gHDMIMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
+static int gVGAMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
+static int gMPEGMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = { -1 };
+static int gHDMI4K2KMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = {
+ -1
+};
+static int gUSB4K2KMasterNoLinePointsDataBuffer[CC_NO_LINE_POINTS_MAX_CNT] = {
+ -1
+};
+
+static int mTVMainVolumeDigitLutBuf_XX[CC_LUT_BUF_SIZE];
+static int mAVMainVolumeDigitLutBuf_XX[CC_LUT_BUF_SIZE];
+static int mCOMPMainVolumeDigitLutBuf_XX[CC_LUT_BUF_SIZE];
+static int mHDMIMainVolumeDigitLutBuf_XX[CC_LUT_BUF_SIZE];
+static int mVGAMainVolumeDigitLutBuf_XX[CC_LUT_BUF_SIZE];
+static int mMPEGMainVolumeDigitLutBuf_XX[CC_LUT_BUF_SIZE];
+
+static int mTVSupperBassDigitLutBuf_XX[CC_LUT_BUF_SIZE];
+static int mAVSupperBassDigitLutBuf_XX[CC_LUT_BUF_SIZE];
+static int mCOMPSupperBassDigitLutBuf_XX[CC_LUT_BUF_SIZE];
+static int mHDMISupperBassDigitLutBuf_XX[CC_LUT_BUF_SIZE];
+static int mVGASupperBassDigitLutBuf_XX[CC_LUT_BUF_SIZE];
+static int mMPEGSupperBassDigitLutBuf_XX[CC_LUT_BUF_SIZE];
+
+static int mEQPresetValueBuf_XX[CC_EQ_PRESET_BUF_SIZE];
+static int mEQPresetDefBuf[CC_EQ_PRESET_BUF_SIZE] = {
+ //
+ 50, 50, 50, 50, 50, 50, // SM_STD
+ 70, 60, 50, 60, 70, 50, // SM_MUSIC
+ 25, 50, 70, 66, 25, 50, // SM_NEWS
+ 75, 65, 50, 65, 75, 50, // SM_THEATER
+};
+
+static int GetAudioCfgData(const char *key_str, int *buf_item_count, int radix,
+ int data_buf[])
+{
+ int cfg_item_count = 0;
+ char *token = NULL;
+ const char *strDelimit = ",";
+ const char *config_value;
+ char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
+
+ config_value = config_get_str("TV", key_str, "null");
+ if (strcasecmp(config_value, "null") == 0) {
+ //LOGE("%s, can't get config \"%s\"!!!\n", "TV", key_str);
+ return -1;
+ }
+
+ cfg_item_count = 0;
+
+ memset((void *)data_str, 0, sizeof(data_str));
+ strncpy(data_str, config_value, sizeof(data_str) - 1);
+ token = strtok(data_str, strDelimit);
+ while (token != NULL) {
+ if (cfg_item_count < *buf_item_count) {
+ data_buf[cfg_item_count] = strtol(token, NULL, radix);
+
+ token = strtok(NULL, strDelimit);
+ cfg_item_count += 1;
+ } else {
+ LOGE("%s, we get data count more than desire count (%d)!!!\n",
+ __FUNCTION__ , *buf_item_count);
+ return -1;
+ }
+ }
+
+ *buf_item_count = cfg_item_count;
+
+ return 0;
+}
+
+static int GetAudioCfgBufferData(const char *key_str, int *bufs_count,
+ int *buf_item_count, int radix, int data_buf[])
+{
+ int cfg_item_count = 0, tmpTotalItemCount = 0;
+ char *token = NULL;
+ const char *strDelimit = ",";
+ const char *config_value;
+ char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
+
+ config_value = config_get_str("TV", key_str, "null");
+ if (strcasecmp(config_value, "null") == 0) {
+ // LOGE("%s, can't get config \"%s\"!!!\n", "TV", key_str);
+ *bufs_count = 0;
+ *buf_item_count = 0;
+ return -1;
+ }
+
+ tmpTotalItemCount = 0;
+
+ memset((void *)data_str, 0, sizeof(data_str));
+ strncpy(data_str, config_value, sizeof(data_str) - 1);
+ token = strtok(data_str, strDelimit);
+ while (token != NULL) {
+ if (cfg_item_count == 0) {
+ *bufs_count = strtol(token, NULL, radix);
+ } else if (cfg_item_count == 1) {
+ *buf_item_count = strtol(token, NULL, radix);
+ } else if (cfg_item_count >= 2) {
+ data_buf[tmpTotalItemCount] = strtol(token, NULL, radix);
+ tmpTotalItemCount += 1;
+ }
+
+ token = strtok(NULL, strDelimit);
+ cfg_item_count += 1;
+ }
+
+ if ((*bufs_count) * (*buf_item_count) != tmpTotalItemCount) {
+ LOGE("%s, get item count error!!! should be %d, real is %d.\n",
+ __FUNCTION__, (*bufs_count) * (*buf_item_count),
+ tmpTotalItemCount);
+ *bufs_count = 0;
+ *buf_item_count = 0;
+ return -1;
+ }
+
+ return 0;
+}
+
+static int GetAudioCfgSingleIntData(const char *key_str, int def_val)
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", key_str, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return def_val;
+ }
+
+ return strtol(config_value, NULL, 10);
+}
+
+template<typename T>
+static int CheckNoLinePoints(int point_cnt, T points_buf[])
+{
+ int i = 0, same_cnt = 0, tmp_direct = -1, error_flag = 0;
+
+ if (point_cnt <= 1) {
+ LOGD("%s, point is less than 2.\n", __FUNCTION__);
+ return 0;
+ }
+
+ for (i = 0; i < point_cnt - 1; i++) {
+ if (points_buf[i] < points_buf[i + 1]) {
+ if (tmp_direct == -1) {
+ tmp_direct = 0;
+ } else if (tmp_direct == 1) {
+ LOGD("%s, check have direct error.\n", __FUNCTION__);
+ return -1;
+ }
+ } else if (points_buf[i] > points_buf[i + 1]) {
+ if (tmp_direct == -1) {
+ tmp_direct = 1;
+ } else if (tmp_direct == 0) {
+ LOGD("%s, check have direct error.\n", __FUNCTION__);
+ return -1;
+ }
+ } else {
+ same_cnt += 1;
+ }
+ }
+
+ if (same_cnt == i) {
+ LOGD("%s, check have same error.\n", __FUNCTION__);
+ return -1;
+ }
+
+ LOGD("%s, check no error.\n", __FUNCTION__);
+ return 0;
+}
+
+int *GetAudioAmplifierNoLinePointsIndexBuffer(int lut_buf_type, int get_type)
+{
+ if (lut_buf_type == CC_LUT_BUF_SUPPERBASS) {
+ return GetAudioAmplifierSupperBassNoLinePointsIndexBuffer(get_type);
+ }
+
+ return NULL;
+}
+
+int *GetAudioAmplifierNoLinePointsDataBuffer(int lut_buf_type, int get_type)
+{
+ if (lut_buf_type == CC_LUT_BUF_SUPPERBASS) {
+ return GetAudioAmplifierSupperBassNoLinePointsDataBuffer(get_type);
+ }
+
+ return NULL;
+}
+
+int GetAudioAmplifierMasterNoLineSwitchFlag()
+{
+ const char *config_value;
+ config_value = config_get_str("TV",
+ CS_AUDIO_AMP_MASTER_NOLINE_SWITCH_CFG_NAME, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtol(config_value, NULL, 10);
+}
+
+int GetAudioAmplifierSupperBassNoLineSwitchFlag()
+{
+ const char *config_value;
+ config_value = config_get_str("TV",
+ CS_AUDIO_AMP_SUPPERBASS_NOLINE_SWITCH_CFG_NAME, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtol(config_value, NULL, 10);
+}
+
+int GetAudioAmplifierMasterNoLinePointsCount()
+{
+ const char *config_value;
+ config_value = config_get_str("TV",
+ CS_AUDIO_AMP_MASTER_NOLINE_POINT_CNT_CFG_NAME, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 11;
+ }
+
+ return strtol(config_value, NULL, 10);
+}
+
+int GetAudioAmplifierSupperBassNoLinePointsCount()
+{
+ const char *config_value;
+ config_value = config_get_str("TV",
+ CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_CNT_CFG_NAME, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 5;
+ }
+
+ return strtol(config_value, NULL, 10);
+}
+
+static int GetAudioAmplifierNoLinePointsBuffer(const char *key_str,
+ int buf_item_count, int data_buf[])
+{
+ int i = 0, tmp_item_count = 0;
+ int tmp_buf[CC_NO_LINE_POINTS_MAX_CNT] = { 0 };
+
+ // if (data_buf[0] >= 0 && data_buf[0] <= 100) {
+ // LOGD("%s, we have get the index buffer.\n", "TV");
+ // return 0;
+ // }
+
+ tmp_item_count = buf_item_count;
+ if (GetAudioCfgData(key_str, &tmp_item_count, 10, tmp_buf) < 0) {
+ LOGE("%s, get index buffer data error, set default.\n", __FUNCTION__);
+ return -1;
+ }
+
+ if (tmp_item_count != buf_item_count) {
+ LOGE(
+ "%s, get index buffer data error(buf item count error), set default.\n",
+ __FUNCTION__);
+ return -1;
+ }
+
+ for (i = 0; i < buf_item_count; i++) {
+ data_buf[i] = tmp_buf[i];
+ }
+
+ return 0;
+}
+
+int *GetAudioAmplifierSupperBassNoLinePointsIndexBuffer(int get_type)
+{
+ int buf_item_count = 0;
+
+ buf_item_count = GetAudioAmplifierSupperBassNoLinePointsCount();
+ if (GetAudioAmplifierNoLinePointsBuffer(
+ CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_IND_BUF_CFG_NAME,
+ buf_item_count, gSupperBassNoLinePointsIndexBuffer) < 0) {
+ return GetAudioAmplifierSupperBassNoLinePointsDefIndexBuffer();
+ }
+
+ if (CheckNoLinePoints(buf_item_count, gSupperBassNoLinePointsIndexBuffer)
+ < 0) {
+ return GetAudioAmplifierSupperBassNoLinePointsDefIndexBuffer();
+ }
+
+ return gSupperBassNoLinePointsIndexBuffer;
+}
+
+int *GetAudioAmplifierMasterNoLinePointsDataBuffer(int get_type)
+{
+ int i = 0, buf_item_count = 0, tmp_offset = 0;
+ int *tmpPtr = NULL;
+ unsigned char tmp_buf[CC_NO_LINE_POINTS_MAX_CNT] = { 0 };
+
+ buf_item_count = GetAudioAmplifierMasterNoLinePointsCount();
+
+ if (get_type == CC_GET_LUT_TV) {
+ tmpPtr = gTVMasterNoLinePointsDataBuffer;
+ tmp_offset = get_type * buf_item_count;
+ } else if (get_type == CC_GET_LUT_AV) {
+ tmpPtr = gAVMasterNoLinePointsDataBuffer;
+ tmp_offset = get_type * buf_item_count;
+ } else if (get_type == CC_GET_LUT_COMP) {
+ tmpPtr = gCOMPMasterNoLinePointsDataBuffer;
+ tmp_offset = get_type * buf_item_count;
+ } else if (get_type == CC_GET_LUT_HDMI) {
+ tmpPtr = gHDMIMasterNoLinePointsDataBuffer;
+ tmp_offset = get_type * buf_item_count;
+ } else if (get_type == CC_GET_LUT_VGA) {
+ tmpPtr = gVGAMasterNoLinePointsDataBuffer;
+ tmp_offset = get_type * buf_item_count;
+ } else if (get_type == CC_GET_LUT_MPEG) {
+ tmpPtr = gMPEGMasterNoLinePointsDataBuffer;
+ tmp_offset = get_type * buf_item_count;
+ }
+
+ if (tmpPtr != NULL && tmpPtr[0] != -1) {
+ return tmpPtr;
+ }
+
+ if (SSMReadAudioNoLinePoints(tmp_offset, buf_item_count, tmp_buf) < 0) {
+ return GetAudioAmplifierMasterNoLinePointsDefDataBuffer(get_type);
+ }
+
+ if (CheckNoLinePoints(buf_item_count, tmp_buf) < 0) {
+ return GetAudioAmplifierMasterNoLinePointsDefDataBuffer(get_type);
+ }
+
+ for (i = 0; i < buf_item_count; i++) {
+ tmpPtr[i] = tmp_buf[i];
+ }
+
+ return tmpPtr;
+}
+
+int *GetAudioAmplifierSupperBassNoLinePointsDataBuffer(int get_type)
+{
+ int i = 0, buf_item_count = 0, tmp_offset = 0;
+ int *tmpPtr = NULL;
+ unsigned char tmp_buf[CC_NO_LINE_POINTS_MAX_CNT] = { 0 };
+
+ buf_item_count = GetAudioAmplifierSupperBassNoLinePointsCount();
+
+ tmpPtr = gSupperBassNoLinePointsDataBuffer;
+ if (tmpPtr != NULL && tmpPtr[0] != -1) {
+ return tmpPtr;
+ }
+
+ tmp_offset = CC_GET_TYPE_CNT * GetAudioAmplifierMasterNoLinePointsCount();
+
+ if (SSMReadAudioNoLinePoints(tmp_offset, buf_item_count, tmp_buf) < 0) {
+ return GetAudioAmplifierSupperBassNoLinePointsDefDataBuffer();
+ }
+
+ if (CheckNoLinePoints(buf_item_count, tmp_buf) < 0) {
+ return GetAudioAmplifierSupperBassNoLinePointsDefDataBuffer();
+ }
+
+ for (i = 0; i < buf_item_count; i++) {
+ tmpPtr[i] = tmp_buf[i];
+ }
+
+ return tmpPtr;
+}
+
+int *GetAudioAmplifierMasterNoLinePointsDefIndexBuffer()
+{
+ int i = 0, buf_item_count = 0;
+
+ buf_item_count = GetAudioAmplifierMasterNoLinePointsCount();
+ if (GetAudioAmplifierNoLinePointsBuffer(
+ CS_AUDIO_AMP_MASTER_NOLINE_POINT_IND_DEF_BUF_CFG_NAME,
+ buf_item_count, gMasterNoLinePointsDefIndexBuffer) < 0) {
+ gMasterNoLinePointsDefIndexBuffer[0] = 1;
+
+ for (i = 1; i <= 10; i++) {
+ gMasterNoLinePointsDefIndexBuffer[i] = i * 10;
+ }
+ }
+
+ if (CheckNoLinePoints(buf_item_count, gMasterNoLinePointsDefIndexBuffer)
+ < 0) {
+ gMasterNoLinePointsDefIndexBuffer[0] = 1;
+
+ for (i = 1; i <= 10; i++) {
+ gMasterNoLinePointsDefIndexBuffer[i] = i * 10;
+ }
+ }
+
+ return gMasterNoLinePointsDefIndexBuffer;
+}
+
+int *GetAudioAmplifierSupperBassNoLinePointsDefIndexBuffer()
+{
+ int i = 0, buf_item_count = 0;
+
+ buf_item_count = GetAudioAmplifierSupperBassNoLinePointsCount();
+ if (GetAudioAmplifierNoLinePointsBuffer(
+ CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_IND_DEF_BUF_CFG_NAME,
+ buf_item_count, gSupperBassNoLinePointsDefIndexBuffer) < 0) {
+ gSupperBassNoLinePointsDefIndexBuffer[0] = 1;
+
+ for (i = 1; i <= 4; i++) {
+ gSupperBassNoLinePointsDefIndexBuffer[i] = i * 25;
+ }
+ }
+
+ if (CheckNoLinePoints(buf_item_count, gSupperBassNoLinePointsDefIndexBuffer)
+ < 0) {
+ gSupperBassNoLinePointsDefIndexBuffer[0] = 1;
+
+ for (i = 1; i <= 4; i++) {
+ gSupperBassNoLinePointsDefIndexBuffer[i] = i * 25;
+ }
+ }
+
+ return gSupperBassNoLinePointsDefIndexBuffer;
+}
+
+int *GetAudioAmplifierMasterNoLinePointsDefDataBuffer(int buf_type)
+{
+ int i = 0, buf_item_count = 0, point_buffer_flag = 0;
+
+ buf_item_count = GetAudioAmplifierMasterNoLinePointsCount();
+
+ switch (buf_type) {
+ case CC_GET_LUT_TV:
+ point_buffer_flag = GetAudioAmplifierNoLinePointsBuffer(
+ CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_TV_BUF_CFG_NAME,
+ buf_item_count, gMasterNoLinePointsDefDataBuffer);
+ break;
+ case CC_GET_LUT_AV:
+ point_buffer_flag = GetAudioAmplifierNoLinePointsBuffer(
+ CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_AV_BUF_CFG_NAME,
+ buf_item_count, gMasterNoLinePointsDefDataBuffer);
+ break;
+ case CC_GET_LUT_COMP:
+ point_buffer_flag = GetAudioAmplifierNoLinePointsBuffer(
+ CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_COMP_BUF_CFG_NAME,
+ buf_item_count, gMasterNoLinePointsDefDataBuffer);
+ break;
+ case CC_GET_LUT_HDMI:
+ point_buffer_flag = GetAudioAmplifierNoLinePointsBuffer(
+ CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_HDMI_BUF_CFG_NAME,
+ buf_item_count, gMasterNoLinePointsDefDataBuffer);
+ break;
+ case CC_GET_LUT_VGA:
+ point_buffer_flag = GetAudioAmplifierNoLinePointsBuffer(
+ CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_VGA_BUF_CFG_NAME,
+ buf_item_count, gMasterNoLinePointsDefDataBuffer);
+ break;
+ case CC_GET_LUT_MPEG:
+ point_buffer_flag = GetAudioAmplifierNoLinePointsBuffer(
+ CS_AUDIO_AMP_MASTER_NOLINE_POINT_DATA_MPEG_BUF_CFG_NAME,
+ buf_item_count, gMasterNoLinePointsDefDataBuffer);
+ break;
+ default:
+ point_buffer_flag = -1;
+ // LOGE("buffer type is wrong ,please check input Parameter !");
+ break;
+ }
+
+ if (point_buffer_flag < 0) {
+ for (i = 0; i < buf_item_count; i++) {
+ gMasterNoLinePointsDefDataBuffer[i] = 100 + i;
+ }
+
+ return gMasterNoLinePointsDefDataBuffer;
+ }
+
+ if (CheckNoLinePoints(buf_item_count, gMasterNoLinePointsDefDataBuffer)
+ < 0) {
+ for (i = 0; i < buf_item_count; i++) {
+ gMasterNoLinePointsDefDataBuffer[i] = 100 + i;
+ }
+ }
+
+ return gMasterNoLinePointsDefDataBuffer;
+}
+
+int *GetAudioAmplifierSupperBassNoLinePointsDefDataBuffer()
+{
+ int i = 0, buf_item_count = 0;
+
+ buf_item_count = GetAudioAmplifierSupperBassNoLinePointsCount();
+ if (GetAudioAmplifierNoLinePointsBuffer(
+ CS_AUDIO_AMP_SUPPERBASS_NOLINE_POINT_DATA_DEF_BUF_CFG_NAME,
+ buf_item_count, gSupperBassNoLinePointsDefDataBuffer) < 0) {
+ for (i = 0; i < buf_item_count; i++) {
+ gSupperBassNoLinePointsDefDataBuffer[i] = 100 + i;
+ }
+ }
+
+ if (CheckNoLinePoints(buf_item_count, gSupperBassNoLinePointsDefDataBuffer)
+ < 0) {
+ for (i = 0; i < buf_item_count; i++) {
+ gSupperBassNoLinePointsDefDataBuffer[i] = 100 + i;
+ }
+ }
+
+ return gSupperBassNoLinePointsDefDataBuffer;
+}
+
+int GetAudioAmplifierBalanceExchangeCFG()
+{
+ const char *config_value;
+ config_value = config_get_str("TV", CS_AUDIO_AMP_BALANCE_EXCHG_CFG_NAME,
+ "null");
+ if (strcmp(config_value, "null") == 0) {
+ return 0; //return 0 to disable balance exchange
+ }
+
+ return strtol(config_value, NULL, 10);
+}
+
+int GetAudioMainVolLutBufCFGIndexModifyEnable()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", "audio.amp.master.cfgindex.mod.en",
+ "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioMainVolLutBufNameModifyUbootenvCFG()
+{
+ char config_value[PROPERTY_VALUE_MAX];
+
+ memset(config_value, '\0', 32);
+
+ property_get("ubootenv.var.ampindex", config_value, "null");
+ if (strcasecmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioMainVolLutBufNameModifyFromUbootenv()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV",
+ "audio.amp.mainvol.lutbufname.mod.ubootenv", "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioMainVolLutBufNameModifyEnableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", "audio.amp.mainvol.lutbufname.mod.en",
+ "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioMainVolLutBufNameCFG(int get_type, char name_buf[])
+{
+ if (get_type == CC_GET_LUT_TV) {
+ strcpy(name_buf, "audio.amp.mainvol.tv.lb.name");
+ } else if (get_type == CC_GET_LUT_AV) {
+ strcpy(name_buf, "audio.amp.mainvol.av.lb.name");
+ } else if (get_type == CC_GET_LUT_COMP) {
+ strcpy(name_buf, "audio.amp.mainvol.comp.lb.name");
+ } else if (get_type == CC_GET_LUT_HDMI) {
+ strcpy(name_buf, "audio.amp.mainvol.hdmi.lb.name");
+ } else if (get_type == CC_GET_LUT_VGA) {
+ strcpy(name_buf, "audio.amp.mainvol.vga.lb.name");
+ } else if (get_type == CC_GET_LUT_MPEG) {
+ strcpy(name_buf, "audio.amp.mainvol.mpeg.lb.name");
+ } else if (get_type == CC_GET_LUT_HDMI_4K2K) {
+ strcpy(name_buf, "audio.amp.mainvol.hdmi4k2k.lb.name");
+ } else if (get_type == CC_GET_LUT_USB_4K2K) {
+ strcpy(name_buf, "audio.amp.mainvol.usb4k2k.lb.name");
+ } else {
+ return -1;
+ }
+
+ return 0;
+}
+
+static int GetAudioMainVolLutBufDataByModifyName(int get_type,
+ int *VolumeDigitLutBuf_XX)
+{
+ int i = 0, buf_count = 0, buf_item_count = 0;
+ char key_buf[128];
+ const char *value_buf;
+
+ memset(key_buf, '\0', 128);
+
+ GetAudioMainVolLutBufNameCFG(get_type, key_buf);
+
+ value_buf = config_get_str("TV", key_buf, (char *) "");
+
+ if (strcmp(value_buf, "") != 0) {
+ if (GetAudioCfgBufferData(value_buf, &buf_count, &buf_item_count, 10,
+ VolumeDigitLutBuf_XX) == 0) {
+ return 0;
+ }
+ }
+
+ return -1;
+}
+
+int *GetAudioAmplifierMasterVolumeLUTBufferPtr(int get_type, int audio_std)
+{
+ int buf_count = 0, buf_item_count = 0;
+ int name_en = GetAudioMainVolLutBufNameModifyEnableCFG();
+
+ if (name_en == 1) {
+ if (get_type == CC_GET_LUT_TV) {
+ if (GetAudioMainVolLutBufDataByModifyName(get_type,
+ mTVMainVolumeDigitLutBuf_XX) == 0) {
+ return mTVMainVolumeDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_AV) {
+ if (GetAudioMainVolLutBufDataByModifyName(get_type,
+ mAVMainVolumeDigitLutBuf_XX) == 0) {
+ return mAVMainVolumeDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_COMP) {
+ if (GetAudioMainVolLutBufDataByModifyName(get_type,
+ mCOMPMainVolumeDigitLutBuf_XX) == 0) {
+ return mCOMPMainVolumeDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_HDMI) {
+ if (GetAudioMainVolLutBufDataByModifyName(get_type,
+ mHDMIMainVolumeDigitLutBuf_XX) == 0) {
+ return mHDMIMainVolumeDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_VGA) {
+ if (GetAudioMainVolLutBufDataByModifyName(get_type,
+ mVGAMainVolumeDigitLutBuf_XX) == 0) {
+ return mVGAMainVolumeDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_MPEG) {
+ if (GetAudioMainVolLutBufDataByModifyName(get_type,
+ mMPEGMainVolumeDigitLutBuf_XX) == 0) {
+ return mMPEGMainVolumeDigitLutBuf_XX;
+ }
+ }
+ } else {
+ if (get_type == CC_GET_LUT_TV) {
+ if (GetAudioCfgBufferData(CS_AUDIO_AMP_MAINVOL_TV_LUTBUF_CFG_NAME,
+ &buf_count, &buf_item_count, 10,
+ mTVMainVolumeDigitLutBuf_XX) == 0) {
+ return mTVMainVolumeDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_AV) {
+ if (GetAudioCfgBufferData(CS_AUDIO_AMP_MAINVOL_AV_LUTBUF_CFG_NAME,
+ &buf_count, &buf_item_count, 10,
+ mAVMainVolumeDigitLutBuf_XX) == 0) {
+ return mAVMainVolumeDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_COMP) {
+ if (GetAudioCfgBufferData(CS_AUDIO_AMP_MAINVOL_COMP_LUTBUF_CFG_NAME,
+ &buf_count, &buf_item_count, 10,
+ mCOMPMainVolumeDigitLutBuf_XX) == 0) {
+ return mCOMPMainVolumeDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_HDMI) {
+ if (GetAudioCfgBufferData(CS_AUDIO_AMP_MAINVOL_HDMI_LUTBUF_CFG_NAME,
+ &buf_count, &buf_item_count, 10,
+ mHDMIMainVolumeDigitLutBuf_XX) == 0) {
+ return mHDMIMainVolumeDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_VGA) {
+ if (GetAudioCfgBufferData(CS_AUDIO_AMP_MAINVOL_VGA_LUTBUF_CFG_NAME,
+ &buf_count, &buf_item_count, 10,
+ mVGAMainVolumeDigitLutBuf_XX) == 0) {
+ return mVGAMainVolumeDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_MPEG) {
+ if (GetAudioCfgBufferData(CS_AUDIO_AMP_MAINVOL_MPEG_LUTBUF_CFG_NAME,
+ &buf_count, &buf_item_count, 10,
+ mMPEGMainVolumeDigitLutBuf_XX) == 0) {
+ return mMPEGMainVolumeDigitLutBuf_XX;
+ }
+ }
+ }
+ return NULL;
+}
+
+int GetAudioSupperBassVolLutBufCFGIndexModifyEnable()
+{
+ const char *config_value;
+ config_value = config_get_str("TV", "audio.amp.supperbass.cfgindex.mod.en",
+ "null");
+ //LOGD("%s, get audio.amp.supperbass.cfgindex.mod.en is %s \n", "TV",
+ // config_value);
+
+ if (strcmp(config_value, "null") == 0) {
+ // LOGD(
+ // "%s, get config modify value \"%s\", return audio.amp.supperbass.cfgindex.mod.en.\n",
+ // "TV", config_value);
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioSupperBassVolLutBufNameModifyEnableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV",
+ "audio.amp.supbassvol.lutbufname.mod.en", "null");
+ //LOGD("%s, audio.amp.supbassvol.lutbufname.mod.en is %s \n", "TV",
+ // config_value);
+
+ if (strcmp(config_value, "null") == 0) {
+ // LOGD(
+ // "%s, get config enable value \"%s\", return 0 to not enable moidfy lut buffer name.\n",
+ // "TV", config_value);
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioSupperBassVolLutBufNameCFG(int get_type, char name_buf[])
+{
+ if (get_type == CC_GET_LUT_TV) {
+ strcpy(name_buf, "audio.amp.supbassvol.tv.lb.name");
+ } else if (get_type == CC_GET_LUT_AV) {
+ strcpy(name_buf, "audio.amp.supbassvol.av.lb.name");
+ } else if (get_type == CC_GET_LUT_COMP) {
+ strcpy(name_buf, "audio.amp.supbassvol.comp.lb.name");
+ } else if (get_type == CC_GET_LUT_HDMI) {
+ strcpy(name_buf, "audio.amp.supbassvol.hdmi.lb.name");
+ } else if (get_type == CC_GET_LUT_VGA) {
+ strcpy(name_buf, "audio.amp.supbassvol.vga.lb.name");
+ } else if (get_type == CC_GET_LUT_MPEG) {
+ strcpy(name_buf, "audio.amp.supbassvol.mpeg.lb.name");
+ } else if (get_type == CC_GET_LUT_HDMI_4K2K) {
+ strcpy(name_buf, "audio.amp.supbassvol.hdmi4k2k.lb.name");
+ } else if (get_type == CC_GET_LUT_USB_4K2K) {
+ strcpy(name_buf, "audio.amp.supbassvol.usb4k2k.lb.name");
+ } else {
+ return -1;
+ }
+
+ return 0;
+}
+
+static int GetAudioSupperBassByModifyName(int get_type,
+ int *VolumeDigitLutBuf_XX)
+{
+ int i = 0, buf_count = 0, buf_item_count = 0;
+ char key_buf[128];
+ const char *value_buf;
+
+ memset(key_buf, '\0', 128);
+
+ GetAudioSupperBassVolLutBufNameCFG(get_type, key_buf);
+
+ value_buf = config_get_str("TV", key_buf, (char *) "");
+ //LOGD("%s, get_type = %d, key_buf = %s, value_buf = %s \n", "TV",
+ // get_type, key_buf, value_buf);
+
+ if (strcmp(value_buf, "") != 0) {
+ if (GetAudioCfgBufferData(value_buf, &buf_count, &buf_item_count, 10,
+ VolumeDigitLutBuf_XX) == 0) {
+ return 0;
+ }
+ }
+
+ return -1;
+}
+
+int *GetAudioAmplifierSupperBassVolumeLUTBufferPtr(int get_type,
+ int audio_std)
+{
+ int buf_count = 0, buf_item_count = 0;
+
+ int name_en = GetAudioSupperBassVolLutBufNameModifyEnableCFG();
+
+ if (name_en == 1) {
+ if (get_type == CC_GET_LUT_TV) {
+ if (GetAudioSupperBassByModifyName(get_type,
+ mTVSupperBassDigitLutBuf_XX) == 0) {
+ return mTVSupperBassDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_AV) {
+ if (GetAudioSupperBassByModifyName(get_type,
+ mAVSupperBassDigitLutBuf_XX) == 0) {
+ return mAVSupperBassDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_COMP) {
+ if (GetAudioSupperBassByModifyName(get_type,
+ mCOMPSupperBassDigitLutBuf_XX) == 0) {
+ return mCOMPSupperBassDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_HDMI) {
+ if (GetAudioSupperBassByModifyName(get_type,
+ mHDMISupperBassDigitLutBuf_XX) == 0) {
+ return mHDMISupperBassDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_VGA) {
+ if (GetAudioSupperBassByModifyName(get_type,
+ mVGASupperBassDigitLutBuf_XX) == 0) {
+ return mVGASupperBassDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_MPEG) {
+ if (GetAudioSupperBassByModifyName(get_type,
+ mMPEGSupperBassDigitLutBuf_XX) == 0) {
+ return mMPEGSupperBassDigitLutBuf_XX;
+ }
+ }
+ } else {
+ if (get_type == CC_GET_LUT_TV) {
+ if (GetAudioCfgBufferData(
+ CS_AUDIO_AMP_SUPPERBASSVOL_TV_LUTBUF_CFG_NAME, &buf_count,
+ &buf_item_count, 10, mTVSupperBassDigitLutBuf_XX) == 0) {
+ return mTVSupperBassDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_AV) {
+ if (GetAudioCfgBufferData(
+ CS_AUDIO_AMP_SUPPERBASSVOL_AV_LUTBUF_CFG_NAME, &buf_count,
+ &buf_item_count, 10, mAVSupperBassDigitLutBuf_XX) == 0) {
+ return mAVSupperBassDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_COMP) {
+ if (GetAudioCfgBufferData(
+ CS_AUDIO_AMP_SUPPERBASSVOL_COMP_LUTBUF_CFG_NAME, &buf_count,
+ &buf_item_count, 10, mCOMPSupperBassDigitLutBuf_XX) == 0) {
+ return mCOMPSupperBassDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_HDMI) {
+ if (GetAudioCfgBufferData(
+ CS_AUDIO_AMP_SUPPERBASSVOL_HDMI_LUTBUF_CFG_NAME, &buf_count,
+ &buf_item_count, 10, mHDMISupperBassDigitLutBuf_XX) == 0) {
+ return mHDMISupperBassDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_VGA) {
+ if (GetAudioCfgBufferData(
+ CS_AUDIO_AMP_SUPPERBASSVOL_VGA_LUTBUF_CFG_NAME, &buf_count,
+ &buf_item_count, 10, mVGASupperBassDigitLutBuf_XX) == 0) {
+ return mVGASupperBassDigitLutBuf_XX;
+ }
+ } else if (get_type == CC_GET_LUT_MPEG) {
+ if (GetAudioCfgBufferData(
+ CS_AUDIO_AMP_SUPPERBASSVOL_MPEG_LUTBUF_CFG_NAME, &buf_count,
+ &buf_item_count, 10, mMPEGSupperBassDigitLutBuf_XX) == 0) {
+ return mMPEGSupperBassDigitLutBuf_XX;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+int *GetAudioEQPresetBufferPtr()
+{
+ int buf_count = 0, buf_item_count = 0;
+ int *tmpDataBufPtr = NULL;
+
+ tmpDataBufPtr = mEQPresetValueBuf_XX;
+
+ memset((void *) tmpDataBufPtr, 0, sizeof(int) * CC_EQ_PRESET_BUF_SIZE);
+
+ if (GetAudioCfgBufferData(CS_EQ_PRESETBUF_CFG_NAME, &buf_count,
+ &buf_item_count, 10, tmpDataBufPtr) == 0) {
+ return tmpDataBufPtr;
+ }
+
+ return mEQPresetDefBuf;
+}
+
+int GetAudioDVISupportEnable()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_DVI_SUPPORT_ENABLE_CFG_NAME, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetTvAudioCardID(char tv_card_id_buf[])
+{
+ const char *value;
+ value = config_get_str("TV", "audio.tv.card.id", "null");
+ //LOGD("%s, get card id is \"%s\".\n", "TV", tv_card_id_buf);
+
+ strcpy(tv_card_id_buf, value);
+ if (strcmp(value, "null") == 0) {
+ strcpy(tv_card_id_buf, "0");
+ // LOGD("%s, card id not config, we set to default \"%s\".\n",
+ // "TV", "0");
+ }
+
+ return 0;
+}
+
+int GetTvAudioCardName(char tv_card_name_buf[])
+{
+ const char *value;
+ value = config_get_str("TV", "audio.tv.card.name", "null");
+ //LOGD("%s, get card name is \"%s\".\n", "TV", tv_card_name_buf);
+
+ strcpy(tv_card_name_buf, value);
+ if (strcmp(value, "null") == 0) {
+ strcpy(tv_card_name_buf, "AMLSYNO9629");
+ // LOGD("%s, card name not config, we set to default \"%s\".\n",
+ // "TV", "AML-M2");
+ }
+
+ return 0;
+}
+
+int GetTvAudioCardNeedSet()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", "audio.tv.card.needset", "null");
+ //LOGD("%s, get \"%s\" is \"%s\".\n", "TV", "audio.tv.card.needset",
+ // config_value);
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ if (strtoul(config_value, NULL, 10) == 0) {
+ return 0;
+ }
+
+ return 1;
+}
+
+static int GetAudioEffectAmplifierGainCfg(const char *cfg_name,
+ int def_gain_val, int max_gain_val)
+{
+ int tmp_val;
+ const char *config_value;
+
+ config_value = config_get_str("TV", cfg_name, "null");
+ //LOGD("%s, get %s is \"%s\".\n", "TV", cfg_name, config_value);
+
+ if (strcmp(config_value, "null") == 0) {
+ // LOGD(
+ // "%s, get config \"%s\" is \"%s\", return default audio effect amplifier gain value(%d).\n",
+ // "TV", cfg_name, config_value, def_gain_val);
+ return def_gain_val;
+ }
+
+ tmp_val = strtoul(config_value, NULL, 10);
+ if (tmp_val < 0 || tmp_val > max_gain_val) {
+ // LOGD(
+ // "%s, get config \"%s\" is error, it(%d) should between %d and %d, return default audio effect amplifier gain value(%d)\n",
+ // "TV", cfg_name, tmp_val, 0, max_gain_val, def_gain_val);
+ tmp_val = def_gain_val;
+ }
+
+ return tmp_val;
+}
+
+int GetAudioSRSModuleDisableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_SRS_MOUDLE_DISABLE_CFG_NAME, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioSRSSourroundDisableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_SRS_SOURROUND_DISABLE_CFG_NAME,
+ "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioSRSTrubassDisableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_SRS_TRUBASS_DISABLE_CFG_NAME,
+ "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioSRSDialogClarityDisableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_SRS_DIALOGCLARITY_DISABLE_CFG_NAME,
+ "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+static int GetAudioSRSGainCfg(const char *cfg_name, int def_gain_val)
+{
+ int tmp_val;
+ const char *config_value;
+
+ config_value = config_get_str("TV", cfg_name, "null");
+ //LOGD("%s, get %s is \"%s\".\n", "TV", cfg_name, config_value);
+
+ if (strcmp(config_value, "null") == 0) {
+ // LOGD(
+ // "%s, get config \"%s\" is \"%s\", return -1 to use default gain value.\n",
+ // "TV", cfg_name, config_value);
+ return -1;
+ }
+
+ tmp_val = strtoul(config_value, NULL, 10);
+ if (tmp_val < 0 || tmp_val > 100) {
+ tmp_val = def_gain_val;
+ // LOGD("%s, get config \"%s\" is error, we set it to %d\n", "TV",
+ // cfg_name, tmp_val);
+ }
+
+ return tmp_val;
+}
+
+static int GetAudioSRSAmplifierGainCfg(const char *cfg_name, int def_gain_val)
+{
+ return GetAudioEffectAmplifierGainCfg(cfg_name, def_gain_val, 24);
+}
+
+static int GetAudioEQAmplifierGainCfg(const char *cfg_name, int def_gain_val)
+{
+ return GetAudioEffectAmplifierGainCfg(cfg_name, def_gain_val, 24);
+}
+
+int GetAudioSRSSourroundGainCfg()
+{
+ return GetAudioSRSGainCfg(CS_SRS_SOURROUND_GAIN_CFG_NAME,
+ CC_SRS_SURROUND_GAIN_VAL);
+}
+
+int GetAudioSRSSourroundAmplifierMasterGainCfg()
+{
+ return GetAudioSRSAmplifierGainCfg(
+ CS_SRS_SOURROUND_AMP_MASTER_GAIN_CFG_NAME,
+ CC_SRS_SURROUND_AMP_MASTER_GAIN_VAL);
+}
+
+int GetAudioSRSSourroundAmplifierSupperBassGainCfg()
+{
+ return GetAudioSRSAmplifierGainCfg(
+ CS_SRS_SOURROUND_AMP_SUPPERBASS_GAIN_CFG_NAME,
+ CC_SRS_SURROUND_AMP_SUPPERBASS_GAIN_VAL);
+}
+
+int GetAudioSRSTrubassOnlyGainCfg()
+{
+ return GetAudioSRSGainCfg(CS_SRS_TRUBASS_ONLY_GAIN_CFG_NAME,
+ CC_SRS_TRUBASS_ONLY_GAIN_VAL);
+}
+
+int GetAudioSRSTrubassOnlyAmplifierMasterGainCfg()
+{
+ return GetAudioSRSAmplifierGainCfg(
+ CS_SRS_TRUBASS_ONLY_AMP_MASTER_GAIN_CFG_NAME,
+ CC_SRS_TRUBASS_ONLY_AMP_MASTER_GAIN_VAL);
+}
+
+int GetAudioSRSTrubassOnlyAmplifierSupperBassGainCfg()
+{
+ return GetAudioSRSAmplifierGainCfg(
+ CS_SRS_TRUBASS_ONLY_AMP_SUPPERBASS_GAIN_CFG_NAME,
+ CC_SRS_TRUBASS_ONLY_AMP_SUPPERBASS_GAIN_VAL);
+}
+
+int GetAudioSRSDialogClarityOnlyGainCfg()
+{
+ return GetAudioSRSGainCfg(CS_SRS_DIALOGCLARITY_ONLY_GAIN_CFG_NAME,
+ CC_SRS_DIALOGCLARITY_ONLY_GAIN_VAL);
+}
+
+int GetAudioSRSDialogClarityOnlyAmplifierMasterGainCfg()
+{
+ return GetAudioSRSAmplifierGainCfg(
+ CS_SRS_DIALOGCLARITY_ONLY_AMP_MASTER_GAIN_CFG_NAME,
+ CC_SRS_DIALOGCLARITY_ONLY_AMP_MASTER_GAIN_VAL);
+}
+
+int GetAudioSRSDialogClarityOnlyAmplifierSupperBassGainCfg()
+{
+ return GetAudioSRSAmplifierGainCfg(
+ CS_SRS_DIALOGCLARITY_ONLY_AMP_SUPPERBASS_GAIN_CFG_NAME,
+ CC_SRS_DIALOGCLARITY_ONLY_AMP_SUPPERBASS_GAIN_VAL);
+}
+
+int GetAudioSRSDialogClarityOnlyDefinitionGainCfg()
+{
+ return GetAudioSRSGainCfg(
+ CS_SRS_DIALOGCLARITY_ONLY_DEFINITION_GAIN_CFG_NAME,
+ CC_SRS_DIALOGCLARITY_ONLY_DEFINITION_GAIN_VAL);
+}
+
+int GetAudioSRSTrubassAndDialogClarityTrubassGainCfg()
+{
+ return GetAudioSRSGainCfg(
+ CS_SRS_TRUBASS_DIALOGCLARITY_TRUBASS_GAIN_CFG_NAME,
+ CC_SRS_TRUBASS_DIALOGCLARITY_TRUBASS_GAIN_VAL);
+}
+
+int GetAudioSRSTrubassAndDialogClarityDialogClarityGainCfg()
+{
+ return GetAudioSRSGainCfg(
+ CS_SRS_TRUBASS_DIALOGCLARITY_DIALOGCLARITY_GAIN_CFG_NAME,
+ CC_SRS_TRUBASS_DIALOGCLARITY_DIALOGCLARITY_GAIN_VAL);
+}
+
+int GetAudioSRSTrubassAndDialogClarityDefinitionGainCfg()
+{
+ return GetAudioSRSGainCfg(
+ CS_SRS_TRUBASS_DIALOGCLARITY_DEFINITION_GAIN_CFG_NAME,
+ CC_SRS_TRUBASS_DIALOGCLARITY_DEFINITION_GAIN_VAL);
+}
+
+int GetAudioSRSTrubassAndDialogClarityAmplifierMasterGainCfg()
+{
+ return GetAudioSRSAmplifierGainCfg(
+ CS_SRS_TRUBASS_DIALOGCLARITY_AMP_MASTER_GAIN_CFG_NAME,
+ CC_SRS_TRUBASS_DIALOGCLARITY_AMP_MASTER_GAIN_VAL);
+}
+
+int GetAudioSRSTrubassAndDialogClarityAmplifierSupperBassGainCfg()
+{
+ return GetAudioSRSAmplifierGainCfg(
+ CS_SRS_TRUBASS_DIALOGCLARITY_AMP_SUPPERBASS_GAIN_CFG_NAME,
+ CC_SRS_TRUBASS_DIALOGCLARITY_AMP_SUPPERBASS_GAIN_VAL);
+}
+
+int GetAudioSRSSupperBassTrubassSpeakerSizeCfg(int get_flag)
+{
+ int tmp_val;
+ char cfg_name[128] = { 0 };
+ const char *config_value;
+
+ if (get_flag == 0) {
+ strcpy(cfg_name, CS_SRS_SUPPERBASS_OFF_TRUBASS_SPEAKER_SIZE_CFG_NAME);
+ } else {
+ strcpy(cfg_name, CS_SRS_SUPPERBASS_ON_TRUBASS_SPEAKER_SIZE_CFG_NAME);
+ }
+
+ config_value = config_get_str("TV", cfg_name, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return -1;
+ }
+
+ tmp_val = strtoul(config_value, NULL, 10);
+ if (tmp_val < 0 || tmp_val > 7) {
+ tmp_val = -1;
+ }
+
+ return tmp_val;
+}
+
+int GetAudioEQAmplifierMasterAddGainCfg()
+{
+ return GetAudioEQAmplifierGainCfg(CS_EQ_AMP_MASTER_GAIN_CFG_NAME,
+ CC_EQ_AMP_MASTER_GAIN_VAL);
+}
+
+int GetAudioEQAmplifierSupperBassAddGainCfg()
+{
+ return GetAudioEQAmplifierGainCfg(CS_EQ_AMP_SUPPERBASS_GAIN_CFG_NAME,
+ CC_EQ_AMP_SUPPERBASS_GAIN_VAL);
+}
+
+int GetAudioEqModuleDisableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_EQ_MOUDLE_DISABLE_CFG_NAME, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioEqUsingAndroidCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_EQ_USING_ANDROID_CFG_NAME, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioEQGainRangeCFG(int *min_val, int *max_val)
+{
+ int i = 0, buf_item_count = 0, tmp_item_count = 0;
+ int tmp_buf[16] = { 0 };
+
+ buf_item_count = 2;
+ tmp_item_count = buf_item_count;
+ if (GetAudioCfgData(CS_EQ_GAIN_RANGE_CFG_NAME, &tmp_item_count, 10, tmp_buf)
+ < 0) {
+ return -1;
+ }
+
+ if (tmp_item_count != buf_item_count) {
+ return -1;
+ }
+
+ *min_val = tmp_buf[0];
+ *max_val = tmp_buf[1];
+
+ return 0;
+}
+
+int GetAudioEQUIGainRangeCFG(int *min_val, int *max_val)
+{
+ int i = 0, buf_item_count = 0, tmp_item_count = 0;
+ int tmp_buf[16] = { 0 };
+
+ buf_item_count = 2;
+ tmp_item_count = buf_item_count;
+ if (GetAudioCfgData(CS_EQ_UI_GAIN_RANGE_CFG_NAME, &tmp_item_count, 10,
+ tmp_buf) < 0) {
+ return -1;
+ }
+
+ if (tmp_item_count != buf_item_count) {
+ return -1;
+ }
+
+ *min_val = tmp_buf[0];
+ *max_val = tmp_buf[1];
+
+ return 0;
+}
+
+int GetAudioDumpDataEnableFlagCfg()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_AUDIO_DUMP_DATA_ENABLE_CFG_NAME,
+ "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtol(config_value, NULL, 10);
+}
+
+int GetAudioKeyMuteCfg()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_KEY_MUTE_CFG_NAME, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioAVOutInitMuteStatusCFG()
+{
+ const char *config_value;
+ int status = 0;
+
+ config_value = config_get_str("TV", CS_AVOUT_INIT_MUTE_CFG_NAME, "null");
+ LOGD("%s, get %s is \"%s\".\n", __FUNCTION__, CS_AVOUT_INIT_MUTE_CFG_NAME,
+ config_value);
+
+ if (strcmp(config_value, "enable") == 0) {
+ status = 1;
+ } else {
+ status = 0;
+ }
+
+ return status;
+}
+
+int GetAudioSupperBassModuleDisableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_SUPPERBASS_MODULE_DISABLE_CFG_NAME,
+ "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioSupperBassSwitchDisableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_SUPPERBASS_SWITCH_DISABLE_CFG_NAME,
+ "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+static int GetAudioSrcInputLineInVol(const char *cfg_str, int *l_vol,
+ int *r_vol)
+{
+ int buf_item_count = 2;
+ int data_buf[2] = { -1, -1 };
+
+ if (GetAudioCfgData(cfg_str, &buf_item_count, 10, data_buf) < 0) {
+ return -1;
+ }
+
+ if (buf_item_count < 2) {
+ return -1;
+ }
+
+ *l_vol = data_buf[0];
+ *r_vol = data_buf[1];
+
+ return 0;
+}
+
+int GetAudioSrcInputTVLineInVol(int *l_vol, int *r_vol)
+{
+ return GetAudioSrcInputLineInVol(CS_SRC_INPUT_TV_LINEIN_VOL_CFG_NAME, l_vol,
+ r_vol);
+}
+
+int GetAudioSrcInputAVLineInVol(int *l_vol, int *r_vol)
+{
+ return GetAudioSrcInputLineInVol(CS_SRC_INPUT_AV_LINEIN_VOL_CFG_NAME, l_vol,
+ r_vol);
+}
+
+int GetAudioSrcInputCOMPLineInVol(int *l_vol, int *r_vol)
+{
+ return GetAudioSrcInputLineInVol(CS_SRC_INPUT_COMP_LINEIN_VOL_CFG_NAME,
+ l_vol, r_vol);
+}
+
+int GetAudioSrcInputHDMILineInVol(int *l_vol, int *r_vol)
+{
+ return GetAudioSrcInputLineInVol(CS_SRC_INPUT_HDMI_LINEIN_VOL_CFG_NAME,
+ l_vol, r_vol);
+}
+
+int GetAudioSrcInputVGALineInVol(int *l_vol, int *r_vol)
+{
+ return GetAudioSrcInputLineInVol(CS_SRC_INPUT_VGA_LINEIN_VOL_CFG_NAME,
+ l_vol, r_vol);
+}
+
+int GetAudioSrcInputMPEGLineInVol(int *l_vol, int *r_vol)
+{
+ return GetAudioSrcInputLineInVol(CS_SRC_INPUT_MPEG_LINEIN_VOL_CFG_NAME,
+ l_vol, r_vol);
+}
+
+static int GetAudioSrcInputLineOutVol(const char *cfg_str, int *l_vol,
+ int *r_vol)
+{
+ int buf_item_count = 2;
+ int data_buf[2] = { -1, -1 };
+
+ if (GetAudioCfgData(cfg_str, &buf_item_count, 10, data_buf) < 0) {
+ return -1;
+ }
+
+ if (buf_item_count < 2) {
+ return -1;
+ }
+
+ *l_vol = data_buf[0];
+ *r_vol = data_buf[1];
+
+ return 0;
+}
+
+int GetAudioSrcInputTVLineOutVol(int *l_vol, int *r_vol)
+{
+ return GetAudioSrcInputLineOutVol(CS_SRC_INPUT_TV_LINEOUT_VOL_CFG_NAME,
+ l_vol, r_vol);
+}
+
+int GetAudioSrcInputAVLineOutVol(int *l_vol, int *r_vol)
+{
+ return GetAudioSrcInputLineOutVol(CS_SRC_INPUT_AV_LINEOUT_VOL_CFG_NAME,
+ l_vol, r_vol);
+}
+
+int GetAudioSrcInputCOMPLineOutVol(int *l_vol, int *r_vol)
+{
+ return GetAudioSrcInputLineOutVol(CS_SRC_INPUT_COMP_LINEOUT_VOL_CFG_NAME,
+ l_vol, r_vol);
+}
+
+int GetAudioSrcInputHDMILineOutVol(int *l_vol, int *r_vol)
+{
+ return GetAudioSrcInputLineOutVol(CS_SRC_INPUT_HDMI_LINEOUT_VOL_CFG_NAME,
+ l_vol, r_vol);
+}
+
+int GetAudioSrcInputVGALineOutVol(int *l_vol, int *r_vol)
+{
+ return GetAudioSrcInputLineOutVol(CS_SRC_INPUT_VGA_LINEOUT_VOL_CFG_NAME,
+ l_vol, r_vol);
+}
+
+int GetAudioSrcInputMPEGLineOutVol(int *l_vol, int *r_vol)
+{
+ int tmp_val = 0;
+ const char *config_value;
+
+ config_value = config_get_str("TV",
+ CS_SRC_INPUT_MPEG_LINEOUT_VOL_CFG_NAME_OLD, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return GetAudioSrcInputLineOutVol(
+ CS_SRC_INPUT_MPEG_LINEOUT_VOL_CFG_NAME, l_vol, r_vol);
+ }
+
+ tmp_val = strtol(config_value, NULL, 10);
+
+ *l_vol = tmp_val;
+ *r_vol = tmp_val;
+
+ return 0;
+}
+
+int GetAudioWallEffectTypeCfg()
+{
+ return GetAudioCfgSingleIntData("audio.walleffect.type", 0);
+}
+
+static int GetAudioMainVolumeLutBufCompensation(const char *cfg_str,
+ int *cfg_flag)
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", cfg_str, "null");
+ //LOGD("%s, get \"%s\" is \"%s\".\n", "TV", cfg_str, config_value);
+
+ if (strcmp(config_value, "null") == 0) {
+ if (cfg_flag != NULL) {
+ *cfg_flag = 0;
+ }
+
+ //LOGD(
+ // "%s, get config \"%s\" is \"%s\", return 0 to not compensation lut buffer.\n",
+ // "TV", cfg_str, config_value);
+ return 0;
+ }
+
+ if (cfg_flag != NULL) {
+ *cfg_flag = 1;
+ }
+
+ return strtol(config_value, NULL, 10);
+}
+
+int GetAudioMainVolumeLutBufTVCompensation()
+{
+ return GetAudioMainVolumeLutBufCompensation(
+ CS_AMP_MAINVOL_LUTBUF_COMPENSATION_TV_CFG_NAME, NULL);
+}
+
+int GetAudioMainVolumeLutBufAVCompensation()
+{
+ return GetAudioMainVolumeLutBufCompensation(
+ CS_AMP_MAINVOL_LUTBUF_COMPENSATION_AV_CFG_NAME, NULL);
+}
+
+int GetAudioMainVolumeLutBufCOMPCompensation()
+{
+ return GetAudioMainVolumeLutBufCompensation(
+ CS_AMP_MAINVOL_LUTBUF_COMPENSATION_COMP_CFG_NAME, NULL);
+}
+
+int GetAudioMainVolumeLutBufHDMICompensation()
+{
+ return GetAudioMainVolumeLutBufCompensation(
+ CS_AMP_MAINVOL_LUTBUF_COMPENSATION_HDMI_CFG_NAME, NULL);
+}
+
+int GetAudioMainVolumeLutBufVGACompensation()
+{
+ return GetAudioMainVolumeLutBufCompensation(
+ CS_AMP_MAINVOL_LUTBUF_COMPENSATION_VGA_CFG_NAME, NULL);
+}
+
+int GetAudioMainVolumeLutBufMPEGCompensation()
+{
+ int tmp_ret = 0, cfg_flag = 0;
+
+ tmp_ret = GetAudioMainVolumeLutBufCompensation(
+ CS_AMP_MAINVOL_LUTBUF_COMPENSATION_MPEG_CFG_NAME, &cfg_flag);
+
+ if (cfg_flag == 0) {
+ tmp_ret = GetAudioMainVolumeLutBufDTVCompensation();
+ }
+
+ return tmp_ret;
+}
+
+int GetAudioMainVolumeLutBufDTVCompensation()
+{
+ return GetAudioMainVolumeLutBufCompensation(
+ CS_AMP_MAINVOL_LUTBUF_COMPENSATION_DTV_CFG_NAME, NULL);
+}
+
+int GetAudioNoiseGateEnableCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_AUDIO_NOISE_GATE_ENABLE_CFG_NAME,
+ "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+int GetAudioNoiseGateUpperBoundCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV",
+ CS_AUDIO_NOISE_GATE_UPPER_BOUND_CFG_NAME, "254");
+
+ return strtol(config_value, NULL, 10);
+}
+
+int GetAudioNoiseGateThresholdCFG()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_AUDIO_NOISE_GATE_THRESHOLD_CFG_NAME,
+ "-1");
+
+ return strtol(config_value, NULL, 10);
+}
+
+int GetDisableResetSystemFrameSize()
+{
+ const char *config_value;
+ config_value = config_get_str("TV",
+ CS_DISABLE_RESET_SYSTEM_FRAMESIZE_CFG_NAME, "null");
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
+
+static int gDisableResetSystemFrameSizeFlag = -1;
+int GetDisableReset_System_framesizeCFG(void)
+{
+ if (gDisableResetSystemFrameSizeFlag == -1) {
+ const char *config_value;
+
+ config_value = config_get_str("TV", CS_AUDIO_SYSTEM_FRAMESIZE_CFG_NAME,
+ "null");
+ LOGD("%s, get %s is \"%s\".\n",
+ __FUNCTION__, CS_AUDIO_SYSTEM_FRAMESIZE_CFG_NAME, config_value);
+
+ if (strcmp(config_value, "disable") == 0) {
+ gDisableResetSystemFrameSizeFlag = 0x55;
+ } else {
+ gDisableResetSystemFrameSizeFlag = 0;
+ }
+ }
+
+ return gDisableResetSystemFrameSizeFlag;
+}
+
+int GetAudioArchitectureTypeCFG()
+{
+ static int architecture_type = -1;
+ const char *config_value = NULL;
+
+ if (architecture_type == -1) {
+ config_value = config_get_str ( "TV", CS_AUDIO_ARCHITECTURE_TYPE_CFG_NAME, "null" );
+ if (strcasecmp(config_value, "null") == 0) {
+ architecture_type = CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC;
+ } else if(strcasecmp(config_value, "t866_external_dac_offboard_fbc") == 0) {
+ architecture_type = CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC;
+ } else if(strcasecmp(config_value, "t866_external_dac_offboard_customer_lib") == 0) {
+ architecture_type = CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB;
+ } else if(strcasecmp(config_value, "t866_external_dac_offboard_digital") == 0) {
+ architecture_type = CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_DIGITAL;
+ } else if (strcasecmp(config_value, "t866_external_dac_onboard") == 0) {
+ architecture_type = CC_DAC_T866_EXTERNAL_DAC_ON_BOARD;
+ } else if (strcasecmp(config_value, "t866_iternal_dac") == 0) {
+ architecture_type = CC_DAC_T866_INTERNAL_DAC;
+ } else if (strcasecmp(config_value, "m6c") == 0) {
+ architecture_type = CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD;
+ } else {
+ architecture_type = CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC;
+ }
+ }
+
+ return architecture_type;
+}
+
+static int gAudioResampleType = -1;
+int GetAudioResampleTypeCFG()
+{
+ char *token = NULL;
+ const char *strDelimit = ",";
+ const char *config_value = NULL;
+ char cfg_buf[1024];
+
+ if (gAudioResampleType == -1) {
+ gAudioResampleType = 0;
+
+ config_value = config_get_str ( "TV", CS_AUDIO_RESAMPLE_TYPE_CFG_NAME, "null" );
+ strncpy(cfg_buf, config_value, sizeof(cfg_buf));
+ if (strcmp(cfg_buf, "") != 0) {
+ token = strtok(cfg_buf, strDelimit);
+ while (token != NULL) {
+ if (strcasecmp(token, "hw") == 0) {
+ gAudioResampleType |= CC_AUD_RESAMPLE_TYPE_HW;
+ } else if (strcasecmp(token, "sw") == 0) {
+ gAudioResampleType |= CC_AUD_RESAMPLE_TYPE_SW;
+ }
+
+ token = strtok(NULL, strDelimit);
+ }
+ } else {
+ gAudioResampleType = CC_AUD_RESAMPLE_TYPE_SW; //if can't find config string, allow sw resample
+ }
+ }
+
+ return gAudioResampleType;
+}
+
+int GetamAudioDisableFlagCFG()
+{
+ static int am_audio_disable_flag = -1;
+ const char *config_value = NULL;
+
+ if (am_audio_disable_flag == -1) {
+ config_value = config_get_str ( "TV", "audio.amaudio.disable", "null" );
+ if (strcasecmp(config_value, "null") == 0 || strcasecmp(config_value, "false") == 0) {
+ am_audio_disable_flag = 0;
+ } else if (strcasecmp(config_value, "true") == 0) {
+ am_audio_disable_flag = 1;
+ } else {
+ am_audio_disable_flag = 0;
+ }
+ }
+
+ return am_audio_disable_flag;
+}
+
+int GetAudioFirstInitSetTypeCFG()
+{
+ const char *config_value;
+ config_value = config_get_str ( "TV", "audio.firstinitset.type", "null" );
+
+ if (strcmp(config_value, "null") == 0) {
+ return 0;
+ }
+
+ return strtoul(config_value, NULL, 10);
+}
diff --git a/tvapi/libtv/tvsetting/audio_cfg.h b/tvapi/libtv/tvsetting/audio_cfg.h
index 72f5145..3ff82df 100644
--- a/tvapi/libtv/tvsetting/audio_cfg.h
+++ b/tvapi/libtv/tvsetting/audio_cfg.h
@@ -1,169 +1,169 @@
-#ifndef __TV_AUDIO_CFG_H__
-#define __TV_AUDIO_CFG_H__
-
-#include "../tvconfig/tvconfig.h"
-#include "../tvutils/tvutils.h"
-
-#define CC_LUT_BUF_MASTER (0)
-#define CC_LUT_BUF_SUPPERBASS (1)
-#define CC_LUT_BUF_HEADSET (2)
-
-#define CC_LUT_BUF_SIZE (101)
-
-#define CC_EQ_PRESET_BUF_SIZE (24)
-
-#define CC_SUPPERBASS_ADD_SIZE (24)
-
-#define CC_NO_LINE_POINTS_MAX_CNT (101)
-
-#define CC_GET_LUT_TV (0)
-#define CC_GET_LUT_AV (1)
-#define CC_GET_LUT_COMP (2)
-#define CC_GET_LUT_HDMI (3)
-#define CC_GET_LUT_VGA (4)
-#define CC_GET_LUT_MPEG (5)
-#define CC_GET_LUT_HDMI_4K2K (6)
-#define CC_GET_LUT_USB_4K2K (7)
-#define CC_GET_TYPE_CNT (8)
-
-#define CC_CFG_NOLINE_CFG_SWITCH_IND (0)
-#define CC_CFG_NOLINE_CFG_IND_IND (1)
-#define CC_CFG_LUT_BUF_CFG_IND (2)
-#define CC_CFG_EQ_CFG_IND (3)
-#define CC_CFG_EQ_PRESET_BUF_IND (4)
-
-#define CC_SRS_SURROUND_GAIN_VAL (50)
-#define CC_SRS_SURROUND_AMP_MASTER_GAIN_VAL (18)
-#define CC_SRS_SURROUND_AMP_SUPPERBASS_GAIN_VAL (21)
-
-#define CC_SRS_TRUBASS_ONLY_GAIN_VAL (30)
-#define CC_SRS_TRUBASS_ONLY_AMP_MASTER_GAIN_VAL (12)
-#define CC_SRS_TRUBASS_ONLY_AMP_SUPPERBASS_GAIN_VAL (15)
-
-#define CC_SRS_DIALOGCLARITY_ONLY_GAIN_VAL (30)
-#define CC_SRS_DIALOGCLARITY_ONLY_AMP_MASTER_GAIN_VAL (12)
-#define CC_SRS_DIALOGCLARITY_ONLY_AMP_SUPPERBASS_GAIN_VAL (21)
-#define CC_SRS_DIALOGCLARITY_ONLY_DEFINITION_GAIN_VAL (20)
-
-#define CC_SRS_TRUBASS_DIALOGCLARITY_TRUBASS_GAIN_VAL (28)
-#define CC_SRS_TRUBASS_DIALOGCLARITY_DIALOGCLARITY_GAIN_VAL (20)
-#define CC_SRS_TRUBASS_DIALOGCLARITY_DEFINITION_GAIN_VAL (5)
-
-#define CC_SRS_TRUBASS_DIALOGCLARITY_AMP_MASTER_GAIN_VAL (12)
-#define CC_SRS_TRUBASS_DIALOGCLARITY_AMP_SUPPERBASS_GAIN_VAL (15)
-
-#define CC_EQ_AMP_MASTER_GAIN_VAL (0)
-#define CC_EQ_AMP_SUPPERBASS_GAIN_VAL (0)
-
-#define CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD (0)
-#define CC_DAC_T866_EXTERNAL_DAC_ON_BOARD (1)
-#define CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC (2)
-#define CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB (3)
-#define CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_DIGITAL (4)
-#define CC_DAC_T866_INTERNAL_DAC (5)
-
-#define CC_AUD_RESAMPLE_TYPE_HW (1)
-#define CC_AUD_RESAMPLE_TYPE_SW (2)
-
-extern int *GetAudioAmplifierNoLinePointsIndexBuffer(int lut_buf_type,
- int get_type);
-extern int *GetAudioAmplifierNoLinePointsDataBuffer(int lut_buf_type,
- int get_type);
-
-extern int GetAudioAmplifierMasterNoLineSwitchFlag();
-extern int GetAudioAmplifierMasterNoLinePointsCount();
-extern int *GetAudioAmplifierMasterNoLinePointsDataBuffer(int get_type);
-extern int *GetAudioAmplifierMasterNoLinePointsIndexBuffer(int get_type);
-extern int *GetAudioAmplifierMasterNoLinePointsDefIndexBuffer();
-extern int *GetAudioAmplifierMasterNoLinePointsDefDataBuffer(int buf_type);
-
-extern int GetAudioAmplifierSupperBassNoLineSwitchFlag();
-extern int GetAudioAmplifierSupperBassNoLinePointsCount();
-extern int *GetAudioAmplifierSupperBassNoLinePointsDataBuffer(int get_type);
-extern int *GetAudioAmplifierSupperBassNoLinePointsIndexBuffer(int get_type);
-extern int *GetAudioAmplifierSupperBassNoLinePointsDefIndexBuffer();
-extern int *GetAudioAmplifierSupperBassNoLinePointsDefDataBuffer();
-
-extern int GetAudioAmplifierBalanceExchangeCFG();
-
-extern int GetAudioTrebleBassType();
-extern int *GetAudioAmplifierNoLinePointsBuffer(int get_type);
-extern int GetAudioMainVolLutBufNameModifyFromUbootenv();
-extern int GetAudioMainVolLutBufNameModifyUbootenvCFG();
-extern int GetAudioMainVolLutBufNameModifyEnableCFG();
-extern int GetAudioMainVolLutBufNameCFG(int get_type, char name_buf[]);
-extern int *GetAudioAmplifierMasterVolumeLUTBufferPtr(int get_type,
- int audio_std);
-extern int GetAudioSupperBassVolLutBufNameModifyEnableCFG();
-extern int GetAudioSupperBassVolLutBufNameCFG(int get_type, char name_buf[]);
-extern int *GetAudioAmplifierSupperBassVolumeLUTBufferPtr(int get_type,
- int audio_std);
-extern int *GetAudioEQPresetBufferPtr();
-extern int GetAudioDVISupportEnable();
-extern int GetTvAudioCardID(char tv_card_id_buf[]);
-extern int GetTvAudioCardName(char tv_card_name_buf[]);
-extern int GetTvAudioCardNeedSet();
-extern int GetAudioSRSModuleDisableCFG();
-extern int GetAudioSRSSourroundDisableCFG();
-extern int GetAudioSRSTrubassDisableCFG();
-extern int GetAudioSRSDialogClarityDisableCFG();
-extern int GetAudioSRSSourroundGainCfg();
-extern int GetAudioSRSSourroundAmplifierMasterGainCfg();
-extern int GetAudioSRSSourroundAmplifierSupperBassGainCfg();
-extern int GetAudioSRSTrubassOnlyGainCfg();
-extern int GetAudioSRSTrubassOnlyAmplifierMasterGainCfg();
-extern int GetAudioSRSTrubassOnlyAmplifierSupperBassGainCfg();
-extern int GetAudioSRSDialogClarityOnlyGainCfg();
-extern int GetAudioSRSDialogClarityOnlyAmplifierMasterGainCfg();
-extern int GetAudioSRSDialogClarityOnlyAmplifierSupperBassGainCfg();
-extern int GetAudioSRSDialogClarityOnlyDefinitionGainCfg();
-extern int GetAudioSRSTrubassAndDialogClarityTrubassGainCfg();
-extern int GetAudioSRSTrubassAndDialogClarityDialogClarityGainCfg();
-extern int GetAudioSRSTrubassAndDialogClarityDefinitionGainCfg();
-extern int GetAudioSRSTrubassAndDialogClarityAmplifierMasterGainCfg();
-extern int GetAudioSRSTrubassAndDialogClarityAmplifierSupperBassGainCfg();
-extern int GetAudioSRSSupperBassTrubassSpeakerSizeCfg(int get_flag);
-extern int GetAudioEQAmplifierMasterAddGainCfg();
-extern int GetAudioEQAmplifierSupperBassAddGainCfg();
-extern int GetAudioEqModuleDisableCFG();
-extern int GetAudioEqUsingAndroidCFG();
-extern int GetAudioEQGainRangeCFG(int *min_val, int *max_val);
-extern int GetAudioEQUIGainRangeCFG(int *min_val, int *max_val);
-
-extern int GetAudioDumpDataEnableFlagCfg();
-extern int GetAudioKeyMuteCfg();
-extern int GetAudioAVOutInitMuteStatusCFG();
-extern int GetAudioSupperBassModuleDisableCFG();
-extern int GetAudioSupperBassSwitchDisableCFG();
-extern int GetAudioSrcInputTVLineInVol(int *l_vol, int *r_vol);
-extern int GetAudioSrcInputAVLineInVol(int *l_vol, int *r_vol);
-extern int GetAudioSrcInputCOMPLineInVol(int *l_vol, int *r_vol);
-extern int GetAudioSrcInputHDMILineInVol(int *l_vol, int *r_vol);
-extern int GetAudioSrcInputVGALineInVol(int *l_vol, int *r_vol);
-extern int GetAudioSrcInputMPEGLineInVol(int *l_vol, int *r_vol);
-extern int GetAudioSrcInputTVLineOutVol(int *l_vol, int *r_vol);
-extern int GetAudioSrcInputAVLineOutVol(int *l_vol, int *r_vol);
-extern int GetAudioSrcInputCOMPLineOutVol(int *l_vol, int *r_vol);
-extern int GetAudioSrcInputHDMILineOutVol(int *l_vol, int *r_vol);
-extern int GetAudioSrcInputVGALineOutVol(int *l_vol, int *r_vol);
-extern int GetAudioSrcInputMPEGLineOutVol(int *l_vol, int *r_vol);
-extern int GetAudioWallEffectTypeCfg();
-extern int GetAudioMainVolumeLutBufTVCompensation();
-extern int GetAudioMainVolumeLutBufAVCompensation();
-extern int GetAudioMainVolumeLutBufCOMPCompensation();
-extern int GetAudioMainVolumeLutBufHDMICompensation();
-extern int GetAudioMainVolumeLutBufVGACompensation();
-extern int GetAudioMainVolumeLutBufMPEGCompensation();
-extern int GetAudioMainVolumeLutBufDTVCompensation();
-extern int GetAudioNoiseGateEnableCFG();
-extern int GetAudioNoiseGateUpperBoundCFG();
-extern int GetAudioNoiseGateThresholdCFG();
-extern int GetDisableResetSystemFrameSize();
-extern int GetDisableReset_System_framesizeCFG();
-
-extern int GetAudioArchitectureTypeCFG();
-extern int GetAudioResampleTypeCFG();
-extern int GetamAudioDisableFlagCFG();
-extern int GetAudioFirstInitSetTypeCFG();
-
-#endif //__TV_AUDIO_CFG_H__
+#ifndef __TV_AUDIO_CFG_H__
+#define __TV_AUDIO_CFG_H__
+
+#include "../tvconfig/tvconfig.h"
+#include "../tvutils/tvutils.h"
+
+#define CC_LUT_BUF_MASTER (0)
+#define CC_LUT_BUF_SUPPERBASS (1)
+#define CC_LUT_BUF_HEADSET (2)
+
+#define CC_LUT_BUF_SIZE (101)
+
+#define CC_EQ_PRESET_BUF_SIZE (24)
+
+#define CC_SUPPERBASS_ADD_SIZE (24)
+
+#define CC_NO_LINE_POINTS_MAX_CNT (101)
+
+#define CC_GET_LUT_TV (0)
+#define CC_GET_LUT_AV (1)
+#define CC_GET_LUT_COMP (2)
+#define CC_GET_LUT_HDMI (3)
+#define CC_GET_LUT_VGA (4)
+#define CC_GET_LUT_MPEG (5)
+#define CC_GET_LUT_HDMI_4K2K (6)
+#define CC_GET_LUT_USB_4K2K (7)
+#define CC_GET_TYPE_CNT (8)
+
+#define CC_CFG_NOLINE_CFG_SWITCH_IND (0)
+#define CC_CFG_NOLINE_CFG_IND_IND (1)
+#define CC_CFG_LUT_BUF_CFG_IND (2)
+#define CC_CFG_EQ_CFG_IND (3)
+#define CC_CFG_EQ_PRESET_BUF_IND (4)
+
+#define CC_SRS_SURROUND_GAIN_VAL (50)
+#define CC_SRS_SURROUND_AMP_MASTER_GAIN_VAL (18)
+#define CC_SRS_SURROUND_AMP_SUPPERBASS_GAIN_VAL (21)
+
+#define CC_SRS_TRUBASS_ONLY_GAIN_VAL (30)
+#define CC_SRS_TRUBASS_ONLY_AMP_MASTER_GAIN_VAL (12)
+#define CC_SRS_TRUBASS_ONLY_AMP_SUPPERBASS_GAIN_VAL (15)
+
+#define CC_SRS_DIALOGCLARITY_ONLY_GAIN_VAL (30)
+#define CC_SRS_DIALOGCLARITY_ONLY_AMP_MASTER_GAIN_VAL (12)
+#define CC_SRS_DIALOGCLARITY_ONLY_AMP_SUPPERBASS_GAIN_VAL (21)
+#define CC_SRS_DIALOGCLARITY_ONLY_DEFINITION_GAIN_VAL (20)
+
+#define CC_SRS_TRUBASS_DIALOGCLARITY_TRUBASS_GAIN_VAL (28)
+#define CC_SRS_TRUBASS_DIALOGCLARITY_DIALOGCLARITY_GAIN_VAL (20)
+#define CC_SRS_TRUBASS_DIALOGCLARITY_DEFINITION_GAIN_VAL (5)
+
+#define CC_SRS_TRUBASS_DIALOGCLARITY_AMP_MASTER_GAIN_VAL (12)
+#define CC_SRS_TRUBASS_DIALOGCLARITY_AMP_SUPPERBASS_GAIN_VAL (15)
+
+#define CC_EQ_AMP_MASTER_GAIN_VAL (0)
+#define CC_EQ_AMP_SUPPERBASS_GAIN_VAL (0)
+
+#define CC_DAC_M6C_EXTERNAL_DAC_ON_BOARD (0)
+#define CC_DAC_T866_EXTERNAL_DAC_ON_BOARD (1)
+#define CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_FBC (2)
+#define CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_CUSTOMER_LIB (3)
+#define CC_DAC_T866_EXTERNAL_DAC_OFF_BOARD_DIGITAL (4)
+#define CC_DAC_T866_INTERNAL_DAC (5)
+
+#define CC_AUD_RESAMPLE_TYPE_HW (1)
+#define CC_AUD_RESAMPLE_TYPE_SW (2)
+
+extern int *GetAudioAmplifierNoLinePointsIndexBuffer(int lut_buf_type,
+ int get_type);
+extern int *GetAudioAmplifierNoLinePointsDataBuffer(int lut_buf_type,
+ int get_type);
+
+extern int GetAudioAmplifierMasterNoLineSwitchFlag();
+extern int GetAudioAmplifierMasterNoLinePointsCount();
+extern int *GetAudioAmplifierMasterNoLinePointsDataBuffer(int get_type);
+extern int *GetAudioAmplifierMasterNoLinePointsIndexBuffer(int get_type);
+extern int *GetAudioAmplifierMasterNoLinePointsDefIndexBuffer();
+extern int *GetAudioAmplifierMasterNoLinePointsDefDataBuffer(int buf_type);
+
+extern int GetAudioAmplifierSupperBassNoLineSwitchFlag();
+extern int GetAudioAmplifierSupperBassNoLinePointsCount();
+extern int *GetAudioAmplifierSupperBassNoLinePointsDataBuffer(int get_type);
+extern int *GetAudioAmplifierSupperBassNoLinePointsIndexBuffer(int get_type);
+extern int *GetAudioAmplifierSupperBassNoLinePointsDefIndexBuffer();
+extern int *GetAudioAmplifierSupperBassNoLinePointsDefDataBuffer();
+
+extern int GetAudioAmplifierBalanceExchangeCFG();
+
+extern int GetAudioTrebleBassType();
+extern int *GetAudioAmplifierNoLinePointsBuffer(int get_type);
+extern int GetAudioMainVolLutBufNameModifyFromUbootenv();
+extern int GetAudioMainVolLutBufNameModifyUbootenvCFG();
+extern int GetAudioMainVolLutBufNameModifyEnableCFG();
+extern int GetAudioMainVolLutBufNameCFG(int get_type, char name_buf[]);
+extern int *GetAudioAmplifierMasterVolumeLUTBufferPtr(int get_type,
+ int audio_std);
+extern int GetAudioSupperBassVolLutBufNameModifyEnableCFG();
+extern int GetAudioSupperBassVolLutBufNameCFG(int get_type, char name_buf[]);
+extern int *GetAudioAmplifierSupperBassVolumeLUTBufferPtr(int get_type,
+ int audio_std);
+extern int *GetAudioEQPresetBufferPtr();
+extern int GetAudioDVISupportEnable();
+extern int GetTvAudioCardID(char tv_card_id_buf[]);
+extern int GetTvAudioCardName(char tv_card_name_buf[]);
+extern int GetTvAudioCardNeedSet();
+extern int GetAudioSRSModuleDisableCFG();
+extern int GetAudioSRSSourroundDisableCFG();
+extern int GetAudioSRSTrubassDisableCFG();
+extern int GetAudioSRSDialogClarityDisableCFG();
+extern int GetAudioSRSSourroundGainCfg();
+extern int GetAudioSRSSourroundAmplifierMasterGainCfg();
+extern int GetAudioSRSSourroundAmplifierSupperBassGainCfg();
+extern int GetAudioSRSTrubassOnlyGainCfg();
+extern int GetAudioSRSTrubassOnlyAmplifierMasterGainCfg();
+extern int GetAudioSRSTrubassOnlyAmplifierSupperBassGainCfg();
+extern int GetAudioSRSDialogClarityOnlyGainCfg();
+extern int GetAudioSRSDialogClarityOnlyAmplifierMasterGainCfg();
+extern int GetAudioSRSDialogClarityOnlyAmplifierSupperBassGainCfg();
+extern int GetAudioSRSDialogClarityOnlyDefinitionGainCfg();
+extern int GetAudioSRSTrubassAndDialogClarityTrubassGainCfg();
+extern int GetAudioSRSTrubassAndDialogClarityDialogClarityGainCfg();
+extern int GetAudioSRSTrubassAndDialogClarityDefinitionGainCfg();
+extern int GetAudioSRSTrubassAndDialogClarityAmplifierMasterGainCfg();
+extern int GetAudioSRSTrubassAndDialogClarityAmplifierSupperBassGainCfg();
+extern int GetAudioSRSSupperBassTrubassSpeakerSizeCfg(int get_flag);
+extern int GetAudioEQAmplifierMasterAddGainCfg();
+extern int GetAudioEQAmplifierSupperBassAddGainCfg();
+extern int GetAudioEqModuleDisableCFG();
+extern int GetAudioEqUsingAndroidCFG();
+extern int GetAudioEQGainRangeCFG(int *min_val, int *max_val);
+extern int GetAudioEQUIGainRangeCFG(int *min_val, int *max_val);
+
+extern int GetAudioDumpDataEnableFlagCfg();
+extern int GetAudioKeyMuteCfg();
+extern int GetAudioAVOutInitMuteStatusCFG();
+extern int GetAudioSupperBassModuleDisableCFG();
+extern int GetAudioSupperBassSwitchDisableCFG();
+extern int GetAudioSrcInputTVLineInVol(int *l_vol, int *r_vol);
+extern int GetAudioSrcInputAVLineInVol(int *l_vol, int *r_vol);
+extern int GetAudioSrcInputCOMPLineInVol(int *l_vol, int *r_vol);
+extern int GetAudioSrcInputHDMILineInVol(int *l_vol, int *r_vol);
+extern int GetAudioSrcInputVGALineInVol(int *l_vol, int *r_vol);
+extern int GetAudioSrcInputMPEGLineInVol(int *l_vol, int *r_vol);
+extern int GetAudioSrcInputTVLineOutVol(int *l_vol, int *r_vol);
+extern int GetAudioSrcInputAVLineOutVol(int *l_vol, int *r_vol);
+extern int GetAudioSrcInputCOMPLineOutVol(int *l_vol, int *r_vol);
+extern int GetAudioSrcInputHDMILineOutVol(int *l_vol, int *r_vol);
+extern int GetAudioSrcInputVGALineOutVol(int *l_vol, int *r_vol);
+extern int GetAudioSrcInputMPEGLineOutVol(int *l_vol, int *r_vol);
+extern int GetAudioWallEffectTypeCfg();
+extern int GetAudioMainVolumeLutBufTVCompensation();
+extern int GetAudioMainVolumeLutBufAVCompensation();
+extern int GetAudioMainVolumeLutBufCOMPCompensation();
+extern int GetAudioMainVolumeLutBufHDMICompensation();
+extern int GetAudioMainVolumeLutBufVGACompensation();
+extern int GetAudioMainVolumeLutBufMPEGCompensation();
+extern int GetAudioMainVolumeLutBufDTVCompensation();
+extern int GetAudioNoiseGateEnableCFG();
+extern int GetAudioNoiseGateUpperBoundCFG();
+extern int GetAudioNoiseGateThresholdCFG();
+extern int GetDisableResetSystemFrameSize();
+extern int GetDisableReset_System_framesizeCFG();
+
+extern int GetAudioArchitectureTypeCFG();
+extern int GetAudioResampleTypeCFG();
+extern int GetamAudioDisableFlagCFG();
+extern int GetAudioFirstInitSetTypeCFG();
+
+#endif //__TV_AUDIO_CFG_H__
diff --git a/tvapi/libtv/tvutils/CCondition.h b/tvapi/libtv/tvutils/CCondition.h
index 4313f71..e16e49f 100644
--- a/tvapi/libtv/tvutils/CCondition.h
+++ b/tvapi/libtv/tvutils/CCondition.h
@@ -13,28 +13,27 @@ reference android api, just linux pthread
typedef long long nsecs_t;
-class CCondition
-{
+class CCondition {
public:
- enum {
- PRIVATE = 0,
- SHARED = 1
- };
+ enum {
+ PRIVATE = 0,
+ SHARED = 1
+ };
- CCondition();
- CCondition(int type);
- ~CCondition();
- // Wait on the condition variable. Lock the mutex before calling.
- int wait(CMutex &mutex);
- // same with relative timeout
- int waitRelative(CMutex &mutex, long sec);
- // Signal the condition variable, allowing one thread to continue.
- void signal();
- // Signal the condition variable, allowing all threads to continue.
- void broadcast();
+ CCondition();
+ CCondition(int type);
+ ~CCondition();
+ // Wait on the condition variable. Lock the mutex before calling.
+ int wait(CMutex &mutex);
+ // same with relative timeout
+ int waitRelative(CMutex &mutex, long sec);
+ // Signal the condition variable, allowing one thread to continue.
+ void signal();
+ // Signal the condition variable, allowing all threads to continue.
+ void broadcast();
private:
- pthread_cond_t mCond;
+ pthread_cond_t mCond;
};
@@ -43,49 +42,49 @@ private:
inline CCondition::CCondition()
{
- pthread_cond_init(&mCond, NULL);
+ pthread_cond_init(&mCond, NULL);
}
inline CCondition::CCondition(int type)
{
- if (type == SHARED) {
- pthread_condattr_t attr;
- pthread_condattr_init(&attr);
- pthread_condattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
- pthread_cond_init(&mCond, &attr);
- pthread_condattr_destroy(&attr);
- } else {
- pthread_cond_init(&mCond, NULL);
- }
+ if (type == SHARED) {
+ pthread_condattr_t attr;
+ pthread_condattr_init(&attr);
+ pthread_condattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
+ pthread_cond_init(&mCond, &attr);
+ pthread_condattr_destroy(&attr);
+ } else {
+ pthread_cond_init(&mCond, NULL);
+ }
}
inline CCondition::~CCondition()
{
- pthread_cond_destroy(&mCond);
+ pthread_cond_destroy(&mCond);
}
inline int CCondition::wait(CMutex &mutex)
{
- return -pthread_cond_wait(&mCond, &mutex.mMutex);
+ return -pthread_cond_wait(&mCond, &mutex.mMutex);
}
inline int CCondition::waitRelative(CMutex &mutex, long msec)
{
- struct timespec ts;
- long _nanoSec = 1000000000;
- int _sec = msec / 1000;
- long _nsec = (msec - 1000 * _sec) * 1000000;
- clock_gettime(CLOCK_REALTIME, &ts);
- ts.tv_sec += _sec;
- ts.tv_nsec += _nsec;
- if (ts.tv_nsec > _nanoSec) {
- ts.tv_nsec %= _nanoSec;
- ts.tv_sec++;
- }
- return -pthread_cond_timedwait(&mCond, &mutex.mMutex, &ts);
+ struct timespec ts;
+ long _nanoSec = 1000000000;
+ int _sec = msec / 1000;
+ long _nsec = (msec - 1000 * _sec) * 1000000;
+ clock_gettime(CLOCK_REALTIME, &ts);
+ ts.tv_sec += _sec;
+ ts.tv_nsec += _nsec;
+ if(ts.tv_nsec > _nanoSec) {
+ ts.tv_nsec %= _nanoSec;
+ ts.tv_sec++;
+ }
+ return -pthread_cond_timedwait(&mCond, &mutex.mMutex, &ts);
}
inline void CCondition::signal()
{
- pthread_cond_signal(&mCond);
+ pthread_cond_signal(&mCond);
}
inline void CCondition::broadcast()
{
- pthread_cond_broadcast(&mCond);
+ pthread_cond_broadcast(&mCond);
}
#endif
diff --git a/tvapi/libtv/tvutils/CFile.cpp b/tvapi/libtv/tvutils/CFile.cpp
index 60bdcdf..10c725e 100644
--- a/tvapi/libtv/tvutils/CFile.cpp
+++ b/tvapi/libtv/tvutils/CFile.cpp
@@ -8,184 +8,184 @@
CFile::CFile()
{
- mPath[0] = '\0';
- mFd = -1;
+ mPath[0] = '\0';
+ mFd = -1;
}
CFile::~CFile()
{
- closeFile();
+ closeFile();
}
CFile::CFile(const char *path)
{
- strcpy(mPath, path);
- mFd = -1;
+ strcpy(mPath, path);
+ mFd = -1;
}
int CFile::openFile(const char *path)
{
- LOGD("openFile = %s", path);
-
- if (mFd < 0) {
- if (path == NULL) {
- if (strlen(mPath) <= 0)
- return -1;
-
- mFd = open(mPath, O_RDWR);//读写模å¼æ‰“å¼€
- if (mFd < 0) LOGD("open file(--%s) fail", mPath);
- } else {
- mFd = open(path, O_RDWR);//读写模å¼æ‰“å¼€
- LOGD("open file(%s fd=%d) ", path, mFd);
- strcpy(mPath, path);
- }
- }
-
- return mFd;
+ LOGD("openFile = %s", path);
+
+ if (mFd < 0) {
+ if(path == NULL) {
+ if(strlen(mPath) <= 0)
+ return -1;
+
+ mFd = open(mPath, O_RDWR);//读写模å¼æ‰“å¼€
+ if(mFd < 0) LOGD("open file(--%s) fail", mPath);
+ } else {
+ mFd = open(path, O_RDWR);//读写模å¼æ‰“å¼€
+ LOGD("open file(%s fd=%d) ", path, mFd);
+ strcpy(mPath, path);
+ }
+ }
+
+ return mFd;
}
int CFile::closeFile()
{
- if (mFd > 0) {
- close(mFd);
- mFd = -1;
- }
- return 0;
+ if(mFd > 0) {
+ close(mFd);
+ mFd = -1;
+ }
+ return 0;
}
int CFile::writeFile(const unsigned char *pData, int uLen)
{
- int ret = -1;
- if (mFd > 0)
- ret = write(mFd, pData, uLen);
+ int ret = -1;
+ if(mFd > 0)
+ ret = write(mFd, pData, uLen);
- return ret;
+ return ret;
}
int CFile::readFile(const unsigned char *pBuf, int uLen)
{
- return 0;
+ return 0;
}
int CFile::copyTo(const char *dstPath)
{
- if (strlen(mPath) <= 0)
- return -1;
- int dstFd;
- if (mFd == -1) {
- if ((mFd = open(mPath, O_RDONLY)) == -1) {
- LOGE("Open %s Error:%s/n", mPath, strerror(errno));
- return -1;
- }
- }
-
- if ((dstFd = open(dstPath, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)) == -1) {
- LOGE("Open %s Error:%s/n", dstPath, strerror(errno));
- }
-
- int bytes_read, bytes_write;
- char buffer[BUFFER_SIZE];
- char *ptr;
- int ret = 0;
- while (bytes_read = read(mFd, buffer, BUFFER_SIZE)) {
- /* 一个致命的错误å‘生了 */
- if ((bytes_read == -1) && (errno != EINTR)) {
- ret = -1;
- break;
- } else if (bytes_read > 0) {
- ptr = buffer;
- while (bytes_write = write(dstFd, ptr, bytes_read)) {
- /* 一个致命错误å‘生了 */
- if ((bytes_write == -1) && (errno != EINTR)) {
- ret = -1;
- break;
- }
- /* 写完了所有读的字节 */
- else if (bytes_write == bytes_read) {
- ret = 0;
- break;
- }
- /* åªå†™äº†ä¸€éƒ¨åˆ†,继续写 */
- else if (bytes_write > 0) {
- ptr += bytes_write;
- bytes_read -= bytes_write;
- }
- }
- /* 写的时候å‘生的致命错误 */
- if (bytes_write == -1) {
- ret = -1;
- break;
- }
- }
- }
- fsync(dstFd);
- close(dstFd);
- return ret;
+ if(strlen(mPath) <= 0)
+ return -1;
+ int dstFd;
+ if(mFd == -1) {
+ if((mFd = open(mPath, O_RDONLY)) == -1) {
+ LOGE("Open %s Error:%s/n", mPath, strerror(errno));
+ return -1;
+ }
+ }
+
+ if((dstFd = open(dstPath, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)) == -1) {
+ LOGE("Open %s Error:%s/n", dstPath, strerror(errno));
+ }
+
+ int bytes_read, bytes_write;
+ char buffer[BUFFER_SIZE];
+ char *ptr;
+ int ret = 0;
+ while(bytes_read = read(mFd, buffer, BUFFER_SIZE)) {
+ /* 一个致命的错误å‘生了 */
+ if((bytes_read == -1) && (errno != EINTR)) {
+ ret = -1;
+ break;
+ } else if(bytes_read > 0) {
+ ptr = buffer;
+ while(bytes_write = write(dstFd, ptr, bytes_read)) {
+ /* 一个致命错误å‘生了 */
+ if((bytes_write == -1) && (errno != EINTR)) {
+ ret = -1;
+ break;
+ }
+ /* 写完了所有读的字节 */
+ else if(bytes_write == bytes_read) {
+ ret = 0;
+ break;
+ }
+ /* åªå†™äº†ä¸€éƒ¨åˆ†,继续写 */
+ else if(bytes_write > 0) {
+ ptr += bytes_write;
+ bytes_read -= bytes_write;
+ }
+ }
+ /* 写的时候å‘生的致命错误 */
+ if(bytes_write == -1) {
+ ret = -1;
+ break;
+ }
+ }
+ }
+ fsync(dstFd);
+ close(dstFd);
+ return ret;
}
int CFile::delFile(const char *path)
{
- if (strlen(path) <= 0) return -1;
- if (unlink(path) != 0) {
- LOGD("delete file(%s) err=%s", path, strerror(errno));
- return -1;
- }
- return 0;
+ if(strlen(path) <= 0) return -1;
+ if(unlink(path) != 0) {
+ LOGD("delete file(%s) err=%s", path, strerror(errno));
+ return -1;
+ }
+ return 0;
}
int CFile::delFile()
{
- if (strlen(mPath) <= 0) return -1;
- if (unlink(mPath) != 0) {
- LOGD("delete file(%s) err=%s", mPath, strerror(errno));
- return -1;
- }
- return 0;
+ if(strlen(mPath) <= 0) return -1;
+ if(unlink(mPath) != 0) {
+ LOGD("delete file(%s) err=%s", mPath, strerror(errno));
+ return -1;
+ }
+ return 0;
}
int CFile::getFileAttrValue(const char *path)
{
- int value;
- FILE *fp = fopen (path, "r+" );
-
- if ( fp == NULL ) {
- LOGE ( "Open %s error(%s)!\n", path, strerror ( errno ) );
- return -1;
- }
- fscanf ( fp, "%d", &value );
- fclose ( fp );
- return value;
+ int value;
+ FILE *fp = fopen (path, "r+" );
+
+ if ( fp == NULL ) {
+ LOGE ( "Open %s error(%s)!\n", path, strerror ( errno ) );
+ return -1;
+ }
+ fscanf ( fp, "%d", &value );
+ fclose ( fp );
+ return value;
}
int CFile::setFileAttrValue(const char *path, int value)
{
- FILE *fp = fopen ( path, "w" );
-
- if ( fp == NULL ) {
- LOGW ( "Open %s error(%s)!\n", path, strerror ( errno ) );
- return -1;
- }
- fprintf ( fp, "%d", value );
- fclose ( fp );
- return 0;
+ FILE *fp = fopen ( path, "w" );
+
+ if ( fp == NULL ) {
+ LOGW ( "Open %s error(%s)!\n", path, strerror ( errno ) );
+ return -1;
+ }
+ fprintf ( fp, "%d", value );
+ fclose ( fp );
+ return 0;
}
int CFile::getFileAttrStr(const char *path, char *str)
{
- return 0;
+ return 0;
}
int CFile::setFileAttrStr(const char *path, const char *str)
{
- FILE *fp = fopen ( path, "w" );
-
- if ( fp == NULL ) {
- LOGW ( "Open %s error(%s)!\n", path, strerror ( errno ) );
- return -1;
- }
- fprintf ( fp, "%s", str );
- fclose ( fp );
- return 0;
+ FILE *fp = fopen ( path, "w" );
+
+ if ( fp == NULL ) {
+ LOGW ( "Open %s error(%s)!\n", path, strerror ( errno ) );
+ return -1;
+ }
+ fprintf ( fp, "%s", str );
+ fclose ( fp );
+ return 0;
}
diff --git a/tvapi/libtv/tvutils/CFile.h b/tvapi/libtv/tvutils/CFile.h
index bbb5266..0429278 100644
--- a/tvapi/libtv/tvutils/CFile.h
+++ b/tvapi/libtv/tvutils/CFile.h
@@ -14,34 +14,33 @@
#define BUFFER_SIZE 1024
-class CFile
-{
+class CFile {
public:
- CFile(const char *path);
- CFile();
- virtual ~CFile();
- virtual int openFile(const char *path);
- virtual int closeFile();
- virtual int writeFile(const unsigned char *pData, int uLen);
- virtual int readFile(const unsigned char *pBuf, int uLen);
- int copyTo(const char *dstPath);
- static int delFile(const char *path);
- static int getFileAttrValue(const char *path);
- static int setFileAttrValue(const char *path, int value);
- static int getFileAttrStr(const char *path, char *str);
- static int setFileAttrStr(const char *path, const char *str);
- int delFile();
- int flush();
- int seekTo();
- int seekToBegin();
- int seekToEnd();
- int getLength();
- int getFd()
- {
- return mFd;
- };
+ CFile(const char *path);
+ CFile();
+ virtual ~CFile();
+ virtual int openFile(const char *path);
+ virtual int closeFile();
+ virtual int writeFile(const unsigned char *pData, int uLen);
+ virtual int readFile(const unsigned char *pBuf, int uLen);
+ int copyTo(const char *dstPath);
+ static int delFile(const char *path);
+ static int getFileAttrValue(const char *path);
+ static int setFileAttrValue(const char *path, int value);
+ static int getFileAttrStr(const char *path, char *str);
+ static int setFileAttrStr(const char *path, const char *str);
+ int delFile();
+ int flush();
+ int seekTo();
+ int seekToBegin();
+ int seekToEnd();
+ int getLength();
+ int getFd()
+ {
+ return mFd;
+ };
protected:
- char mPath[CC_MAX_FILE_PATH_LEN];
- int mFd;
+ char mPath[CC_MAX_FILE_PATH_LEN];
+ int mFd;
};
#endif
diff --git a/tvapi/libtv/tvutils/CHdmiCecCmd.cpp b/tvapi/libtv/tvutils/CHdmiCecCmd.cpp
index 7a343b9..31e4442 100644
--- a/tvapi/libtv/tvutils/CHdmiCecCmd.cpp
+++ b/tvapi/libtv/tvutils/CHdmiCecCmd.cpp
@@ -9,7 +9,7 @@ CHdmiCec::~CHdmiCec()
int CHdmiCec::readFile(unsigned char *pBuf, unsigned int uLen)
{
- int ret;
- ret = read(mFd, pBuf, uLen);
- return ret;
+ int ret;
+ ret = read(mFd, pBuf, uLen);
+ return ret;
}
diff --git a/tvapi/libtv/tvutils/CHdmiCecCmd.h b/tvapi/libtv/tvutils/CHdmiCecCmd.h
index 00b31af..290fddb 100644
--- a/tvapi/libtv/tvutils/CHdmiCecCmd.h
+++ b/tvapi/libtv/tvutils/CHdmiCecCmd.h
@@ -1,10 +1,9 @@
#include "CFile.h"
static const char *CEC_PATH = "/dev/aocec";
-class CHdmiCec: public CFile
-{
+class CHdmiCec: public CFile {
public:
- CHdmiCec();
- ~CHdmiCec();
- int readFile(unsigned char *pBuf, unsigned int uLen);
+ CHdmiCec();
+ ~CHdmiCec();
+ int readFile(unsigned char *pBuf, unsigned int uLen);
};
diff --git a/tvapi/libtv/tvutils/CMsgQueue.cpp b/tvapi/libtv/tvutils/CMsgQueue.cpp
index 16da460..09627b5 100644
--- a/tvapi/libtv/tvutils/CMsgQueue.cpp
+++ b/tvapi/libtv/tvutils/CMsgQueue.cpp
@@ -3,8 +3,8 @@
#include <utils/Timers.h>
CMessage::CMessage()
{
- mDelayMs = 0;
- mWhenMs = 0;
+ mDelayMs = 0;
+ mWhenMs = 0;
}
CMessage::~CMessage()
@@ -19,98 +19,98 @@ CMsgQueueThread::CMsgQueueThread()
CMsgQueueThread::~CMsgQueueThread()
{
- //请求退出处ç†çº¿ç¨‹,并阻塞
- requestExitAndWait();
+ //请求退出处ç†çº¿ç¨‹,并阻塞
+ requestExitAndWait();
}
nsecs_t CMsgQueueThread::getNowMs()
{
- return systemTime(SYSTEM_TIME_MONOTONIC) / 1000000;
+ return systemTime(SYSTEM_TIME_MONOTONIC) / 1000000;
}
void CMsgQueueThread::sendMsg(CMessage &msg)
{
- CMutex::Autolock _l(mLockQueue);
- msg.mWhenMs = getNowMs() + msg.mDelayMs;//
+ CMutex::Autolock _l(mLockQueue);
+ msg.mWhenMs = getNowMs() + msg.mDelayMs;//
- int i = 0;
- while (i < m_v_msg.size() && m_v_msg[i].mWhenMs <= msg.mWhenMs) i++; //find the index that will insert(i)
- m_v_msg.insertAt(msg, i);//insert at index i
- CMessage msg1 = m_v_msg[0];
- LOGD("sendmsg now2 = %lld i = %d", getNowMs(), i);
- LOGD("sendmsg now3 = %lld msg1 when = %lld", getNowMs(), msg1.mWhenMs);
- //
- //if(i == 0)// is empty or new whenMS is at index 0, low all ms in list. so ,need to wakeup loop, to get new delay time.
- mGetMsgCondition.signal();
+ int i = 0;
+ while(i < m_v_msg.size() && m_v_msg[i].mWhenMs <= msg.mWhenMs) i++;//find the index that will insert(i)
+ m_v_msg.insertAt(msg, i);//insert at index i
+ CMessage msg1 = m_v_msg[0];
+ LOGD("sendmsg now2 = %lld i = %d", getNowMs(), i);
+ LOGD("sendmsg now3 = %lld msg1 when = %lld", getNowMs(), msg1.mWhenMs);
+ //
+ //if(i == 0)// is empty or new whenMS is at index 0, low all ms in list. so ,need to wakeup loop, to get new delay time.
+ mGetMsgCondition.signal();
}
//有个缺陷,åªèƒ½æ ¹æ®æ¶ˆæ¯ç±»åž‹ç§»é™¤ï¼ŒåŒç±»åž‹æ¶ˆæ¯ä¼šå…¨éƒ¨ç§»é™¤,但足够用了
void CMsgQueueThread::removeMsg(CMessage &msg)
{
- CMutex::Autolock _l(mLockQueue);
- int beforeSize = m_v_msg.size();
- for (int i = 0; i < m_v_msg.size(); i++) {
- const CMessage &_msg = m_v_msg.itemAt(i);
- if (_msg.mType == msg.mType) {
- m_v_msg.removeAt(i);
- }
- }
- //some msg removeed
- if (beforeSize > m_v_msg.size())
- mGetMsgCondition.signal();
+ CMutex::Autolock _l(mLockQueue);
+ int beforeSize = m_v_msg.size();
+ for (int i = 0; i < m_v_msg.size(); i++) {
+ const CMessage &_msg = m_v_msg.itemAt(i);
+ if (_msg.mType == msg.mType) {
+ m_v_msg.removeAt(i);
+ }
+ }
+ //some msg removeed
+ if(beforeSize > m_v_msg.size())
+ mGetMsgCondition.signal();
}
int CMsgQueueThread::startMsgQueue()
{
- CMutex::Autolock _l(mLockQueue);
- this->run();
- return 0;
+ CMutex::Autolock _l(mLockQueue);
+ this->run();
+ return 0;
}
bool CMsgQueueThread::threadLoop()
{
- int sleeptime = 100;//ms
+ int sleeptime = 100;//ms
- while (!exitPending()) { //requietexit() or requietexitWait() not call
- mLockQueue.lock();
- while (m_v_msg.size() == 0) { //msg queue is empty
- mGetMsgCondition.wait(mLockQueue);//first unlock,when return,lock again,so need,call unlock
- }
- mLockQueue.unlock();
- //get delay time
- CMessage msg;
- nsecs_t delayMs = 0, nowMS = 0;
- do { //wait ,until , the lowest time msg's whentime is low nowtime, to go on
- if (m_v_msg.size() <= 0) {
- LOGD("msg size is 0, break");
- break;
- }
- mLockQueue.lock();//get msg ,first lock.
- msg = m_v_msg[0];//get first
- mLockQueue.unlock();
+ while(!exitPending()) { //requietexit() or requietexitWait() not call
+ mLockQueue.lock();
+ while(m_v_msg.size() == 0) { //msg queue is empty
+ mGetMsgCondition.wait(mLockQueue);//first unlock,when return,lock again,so need,call unlock
+ }
+ mLockQueue.unlock();
+ //get delay time
+ CMessage msg;
+ nsecs_t delayMs = 0, nowMS = 0;
+ do { //wait ,until , the lowest time msg's whentime is low nowtime, to go on
+ if(m_v_msg.size() <= 0) {
+ LOGD("msg size is 0, break");
+ break;
+ }
+ mLockQueue.lock();//get msg ,first lock.
+ msg = m_v_msg[0];//get first
+ mLockQueue.unlock();
- delayMs = msg.mWhenMs - getNowMs();
- LOGD("threadLoop now = %lld mswhen = %lld delayMs = %lld msg type = %d", getNowMs(), msg.mWhenMs, delayMs, msg.mType);
- if (delayMs > 0) {
- mLockQueue.lock();//get msg ,first lock.
- int ret = mGetMsgCondition.waitRelative(mLockQueue, delayMs);
- mLockQueue.unlock();
- LOGD("msg queue wait ret = %d", ret);
- } else {
- break;
- }
- } while (true); //msg[0], timeout
+ delayMs = msg.mWhenMs - getNowMs();
+ LOGD("threadLoop now = %lld mswhen = %lld delayMs = %lld msg type = %d", getNowMs(), msg.mWhenMs, delayMs, msg.mType);
+ if(delayMs > 0) {
+ mLockQueue.lock();//get msg ,first lock.
+ int ret = mGetMsgCondition.waitRelative(mLockQueue, delayMs);
+ mLockQueue.unlock();
+ LOGD("msg queue wait ret = %d", ret);
+ } else {
+ break;
+ }
+ } while(true); //msg[0], timeout
- if (m_v_msg.size() > 0) {
- mLockQueue.lock();//
- msg = m_v_msg[0];
- m_v_msg.removeAt(0);
- mLockQueue.unlock();//
- //handle it
- handleMessage(msg);
- }
+ if(m_v_msg.size() > 0) {
+ mLockQueue.lock();//
+ msg = m_v_msg[0];
+ m_v_msg.removeAt(0);
+ mLockQueue.unlock();//
+ //handle it
+ handleMessage(msg);
+ }
- //usleep(sleeptime * 1000);
- }
- //exit
- //return true, run again, return false,not run.
- return false;
+ //usleep(sleeptime * 1000);
+ }
+ //exit
+ //return true, run again, return false,not run.
+ return false;
}
diff --git a/tvapi/libtv/tvutils/CMsgQueue.h b/tvapi/libtv/tvutils/CMsgQueue.h
index 774a910..6d085be 100644
--- a/tvapi/libtv/tvutils/CMsgQueue.h
+++ b/tvapi/libtv/tvutils/CMsgQueue.h
@@ -9,35 +9,33 @@ using namespace android;
#if !defined(_C_MSG_QUEUE_H)
#define _C_MSG_QUEUE_H
-class CMessage
-{
+class CMessage {
public:
- CMessage();
- ~CMessage();
- nsecs_t mDelayMs;//delay times , MS
- nsecs_t mWhenMs;//when, the msg will handle
- int mType;
- void *mpData;
- unsigned char mpPara[2048];
+ CMessage();
+ ~CMessage();
+ nsecs_t mDelayMs;//delay times , MS
+ nsecs_t mWhenMs;//when, the msg will handle
+ int mType;
+ void *mpData;
+ unsigned char mpPara[2048];
};
-class CMsgQueueThread: public CThread
-{
+class CMsgQueueThread: public CThread {
public:
- CMsgQueueThread();
- virtual ~CMsgQueueThread();
- int startMsgQueue();
- void sendMsg(CMessage &msg);
- void removeMsg(CMessage &msg);
+ CMsgQueueThread();
+ virtual ~CMsgQueueThread();
+ int startMsgQueue();
+ void sendMsg(CMessage &msg);
+ void removeMsg(CMessage &msg);
private:
- bool threadLoop();
- nsecs_t getNowMs();//get system time , MS
- virtual void handleMessage(CMessage &msg) = 0;
+ bool threadLoop();
+ nsecs_t getNowMs();//get system time , MS
+ virtual void handleMessage(CMessage &msg) = 0;
- //
- Vector<CMessage> m_v_msg;
- CCondition mGetMsgCondition;
- CMutex mLockQueue;
+ //
+ Vector<CMessage> m_v_msg;
+ CCondition mGetMsgCondition;
+ CMutex mLockQueue;
};
/*class CHandler
diff --git a/tvapi/libtv/tvutils/CMutex.h b/tvapi/libtv/tvutils/CMutex.h
index 87e9a8e..ec9d3e9 100644
--- a/tvapi/libtv/tvutils/CMutex.h
+++ b/tvapi/libtv/tvutils/CMutex.h
@@ -18,55 +18,53 @@ class CCondition;
* The mutex must be unlocked by the thread that locked it. They are not
* recursive, i.e. the same thread can't lock it multiple times.
*/
-class CMutex
-{
+class CMutex {
public:
- enum {
- PRIVATE = 0,
- SHARED = 1
- };
-
- CMutex();
- CMutex(const char *name);
- CMutex(int type, const char *name = NULL);
- ~CMutex();
-
- // lock or unlock the mutex
- int lock();
- void unlock();
-
- // lock if possible; returns 0 on success, error otherwise
- int tryLock();
-
- // Manages the mutex automatically. It'll be locked when Autolock is
- // constructed and released when Autolock goes out of scope.
- class Autolock
- {
- public:
- inline Autolock(CMutex &mutex) : mLock(mutex)
- {
- mLock.lock();
- }
- inline Autolock(CMutex *mutex) : mLock(*mutex)
- {
- mLock.lock();
- }
- inline ~Autolock()
- {
- mLock.unlock();
- }
- private:
- CMutex &mLock;
- };
+ enum {
+ PRIVATE = 0,
+ SHARED = 1
+ };
+
+ CMutex();
+ CMutex(const char *name);
+ CMutex(int type, const char *name = NULL);
+ ~CMutex();
+
+ // lock or unlock the mutex
+ int lock();
+ void unlock();
+
+ // lock if possible; returns 0 on success, error otherwise
+ int tryLock();
+
+ // Manages the mutex automatically. It'll be locked when Autolock is
+ // constructed and released when Autolock goes out of scope.
+ class Autolock {
+ public:
+ inline Autolock(CMutex &mutex) : mLock(mutex)
+ {
+ mLock.lock();
+ }
+ inline Autolock(CMutex *mutex) : mLock(*mutex)
+ {
+ mLock.lock();
+ }
+ inline ~Autolock()
+ {
+ mLock.unlock();
+ }
+ private:
+ CMutex &mLock;
+ };
private:
- friend class CCondition;
+ friend class CCondition;
- // A mutex cannot be copied
- CMutex(const CMutex &);
- CMutex &operator = (const CMutex &);
+ // A mutex cannot be copied
+ CMutex(const CMutex &);
+ CMutex &operator = (const CMutex &);
- pthread_mutex_t mMutex;
+ pthread_mutex_t mMutex;
};
@@ -75,39 +73,39 @@ private:
inline CMutex::CMutex()
{
- pthread_mutex_init(&mMutex, NULL);
+ pthread_mutex_init(&mMutex, NULL);
}
inline CMutex::CMutex(const char *name)
{
- pthread_mutex_init(&mMutex, NULL);
+ pthread_mutex_init(&mMutex, NULL);
}
inline CMutex::CMutex(int type, const char *name)
{
- if (type == SHARED) {
- pthread_mutexattr_t attr;
- pthread_mutexattr_init(&attr);
- pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
- pthread_mutex_init(&mMutex, &attr);
- pthread_mutexattr_destroy(&attr);
- } else {
- pthread_mutex_init(&mMutex, NULL);
- }
+ if (type == SHARED) {
+ pthread_mutexattr_t attr;
+ pthread_mutexattr_init(&attr);
+ pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
+ pthread_mutex_init(&mMutex, &attr);
+ pthread_mutexattr_destroy(&attr);
+ } else {
+ pthread_mutex_init(&mMutex, NULL);
+ }
}
inline CMutex::~CMutex()
{
- pthread_mutex_destroy(&mMutex);
+ pthread_mutex_destroy(&mMutex);
}
inline int CMutex::lock()
{
- return -pthread_mutex_lock(&mMutex);
+ return -pthread_mutex_lock(&mMutex);
}
inline void CMutex::unlock()
{
- pthread_mutex_unlock(&mMutex);
+ pthread_mutex_unlock(&mMutex);
}
inline int CMutex::tryLock()
{
- return -pthread_mutex_trylock(&mMutex);
+ return -pthread_mutex_trylock(&mMutex);
}
diff --git a/tvapi/libtv/tvutils/CSerialCommunication.cpp b/tvapi/libtv/tvutils/CSerialCommunication.cpp
index b479aa7..f510adf 100644
--- a/tvapi/libtv/tvutils/CSerialCommunication.cpp
+++ b/tvapi/libtv/tvutils/CSerialCommunication.cpp
@@ -17,110 +17,110 @@
CSerialCommunication::CSerialCommunication()
{
- int i = 0;
+ int i = 0;
- mpObserver = NULL;
- mState = STATE_STOPED;
+ mpObserver = NULL;
+ mState = STATE_STOPED;
- mFileName[0] = 0;
- for (i = 0; i < CC_MAX_SERIAL_RD_BUF_LEN; i++) {
- mDataBuf[i] = 0;
- }
+ mFileName[0] = 0;
+ for (i = 0; i < CC_MAX_SERIAL_RD_BUF_LEN; i++) {
+ mDataBuf[i] = 0;
+ }
}
CSerialCommunication::~CSerialCommunication()
{
- mSerialPort.CloseDevice();
+ mSerialPort.CloseDevice();
}
int CSerialCommunication::OpenModule(int serial_dev_id)
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- if (mSerialPort.OpenDevice(serial_dev_id) < 0) {
- return -1;
- }
+ if (mSerialPort.OpenDevice(serial_dev_id) < 0) {
+ return -1;
+ }
- return mSerialPort.setup_serial();
+ return mSerialPort.setup_serial();
}
int CSerialCommunication::CloseModule()
{
- stop();
- mSerialPort.CloseDevice();
- return 0;
+ stop();
+ mSerialPort.CloseDevice();
+ return 0;
}
int CSerialCommunication::start()
{
- if (mState == STATE_STOPED) {
- this->run();
- }
+ if (mState == STATE_STOPED) {
+ this->run();
+ }
- return 0;
+ return 0;
}
int CSerialCommunication::stop()
{
- requestExit();
- mState = STATE_STOPED;
+ requestExit();
+ mState = STATE_STOPED;
- return 0;
+ return 0;
}
int CSerialCommunication::sendData(int data_len, unsigned char data_buf[])
{
- mSerialPort.writeFile(data_buf, data_len);
- return 0;
+ mSerialPort.writeFile(data_buf, data_len);
+ return 0;
}
bool CSerialCommunication::threadLoop()
{
- int rd_len = 0;
- int thread_dly_tm = 100 * 1000;
+ int rd_len = 0;
+ int thread_dly_tm = 100 * 1000;
- if (mpObserver == NULL) {
- return false;
- }
+ if (mpObserver == NULL) {
+ return false;
+ }
- if (mSerialPort.getFd() < 0) {
- return false;
- }
+ if (mSerialPort.getFd() < 0) {
+ return false;
+ }
- if (mSerialPort.getDevId() < 0) {
- return false;
- }
+ if (mSerialPort.getDevId() < 0) {
+ return false;
+ }
- LOGD("%s, entering...\n", "TV");
+ LOGD("%s, entering...\n", "TV");
- prctl(PR_SET_NAME, (unsigned long)"CSerialCommunication thread loop");
+ prctl(PR_SET_NAME, (unsigned long)"CSerialCommunication thread loop");
- mState = STATE_RUNNING;
+ mState = STATE_RUNNING;
- while (!exitPending()) { //requietexit() or requietexitWait() not call
- memset(mDataBuf, 0, CC_MAX_SERIAL_RD_BUF_LEN);
- rd_len = mSerialPort.readFile(mDataBuf, CC_MAX_SERIAL_RD_BUF_LEN);
- if (rd_len <= 0) {
- usleep(thread_dly_tm);
- continue;
- }
+ while (!exitPending()) { //requietexit() or requietexitWait() not call
+ memset(mDataBuf, 0, CC_MAX_SERIAL_RD_BUF_LEN);
+ rd_len = mSerialPort.readFile(mDataBuf, CC_MAX_SERIAL_RD_BUF_LEN);
+ if (rd_len <= 0) {
+ usleep(thread_dly_tm);
+ continue;
+ }
- LOGD("%s, rd_len = %d.\n", __FUNCTION__, rd_len);
+ LOGD("%s, rd_len = %d.\n", __FUNCTION__, rd_len);
- if (rd_len > CC_MAX_SERIAL_RD_BUF_LEN) {
- rd_len = CC_MAX_SERIAL_RD_BUF_LEN;
- }
+ if (rd_len > CC_MAX_SERIAL_RD_BUF_LEN) {
+ rd_len = CC_MAX_SERIAL_RD_BUF_LEN;
+ }
- LOGD("%s, send data to java.", __FUNCTION__);
- //send data to java
- mpObserver->onSerialCommunication(mSerialPort.getDevId(), rd_len, mDataBuf);
+ LOGD("%s, send data to java.", __FUNCTION__);
+ //send data to java
+ mpObserver->onSerialCommunication(mSerialPort.getDevId(), rd_len, mDataBuf);
- usleep(thread_dly_tm);
- }
+ usleep(thread_dly_tm);
+ }
- mState = STATE_STOPED;
+ mState = STATE_STOPED;
- LOGD("%s, exiting...\n", "TV");
- //return true, run again, return false,not run.
- return false;
+ LOGD("%s, exiting...\n", "TV");
+ //return true, run again, return false,not run.
+ return false;
}
diff --git a/tvapi/libtv/tvutils/CSerialCommunication.h b/tvapi/libtv/tvutils/CSerialCommunication.h
index 15ae451..1fcf18f 100644
--- a/tvapi/libtv/tvutils/CSerialCommunication.h
+++ b/tvapi/libtv/tvutils/CSerialCommunication.h
@@ -1,50 +1,48 @@
-#ifndef __TV_SERIAL_COMMUNICATION_H__
-#define __TV_SERIAL_COMMUNICATION_H__
-
-#include "CThread.h"
-#include "CSerialPort.h"
-
-#define CC_MAX_SERIAL_RD_BUF_LEN (1200)
-
-class CSerialCommunication: public CThread
-{
-public:
- CSerialCommunication();
- ~CSerialCommunication();
-
- int start();
- int stop();
- int OpenModule(int serial_dev_id);
- int CloseModule();
- int sendData(int data_len, unsigned char data_buf[]);
-
- class ISerialCommunicationObserver
- {
- public:
- ISerialCommunicationObserver() {};
- virtual ~ISerialCommunicationObserver() {};
- virtual void onSerialCommunication(int dev_id, int rd_len, unsigned char data_buf[]) {};
- };
-
- void setObserver(ISerialCommunicationObserver *pOb)
- {
- mpObserver = pOb;
- };
-
-private:
- bool threadLoop();
-
- int mState;
- ISerialCommunicationObserver *mpObserver;
- CSerialPort mSerialPort;
-
- char mFileName[CC_MAX_FILE_PATH_LEN];
- unsigned char mDataBuf[CC_MAX_SERIAL_RD_BUF_LEN];
-
- enum SerialCommunicationState {
- STATE_STOPED = 0,
- STATE_RUNNING,
- };
-};
-
-#endif //__TV_SERIAL_COMMUNICATION_H__
+#ifndef __TV_SERIAL_COMMUNICATION_H__
+#define __TV_SERIAL_COMMUNICATION_H__
+
+#include "CThread.h"
+#include "CSerialPort.h"
+
+#define CC_MAX_SERIAL_RD_BUF_LEN (1200)
+
+class CSerialCommunication: public CThread {
+public:
+ CSerialCommunication();
+ ~CSerialCommunication();
+
+ int start();
+ int stop();
+ int OpenModule(int serial_dev_id);
+ int CloseModule();
+ int sendData(int data_len, unsigned char data_buf[]);
+
+ class ISerialCommunicationObserver {
+ public:
+ ISerialCommunicationObserver() {};
+ virtual ~ISerialCommunicationObserver() {};
+ virtual void onSerialCommunication(int dev_id, int rd_len, unsigned char data_buf[]) {};
+ };
+
+ void setObserver(ISerialCommunicationObserver *pOb)
+ {
+ mpObserver = pOb;
+ };
+
+private:
+ bool threadLoop();
+
+ int mState;
+ ISerialCommunicationObserver *mpObserver;
+ CSerialPort mSerialPort;
+
+ char mFileName[CC_MAX_FILE_PATH_LEN];
+ unsigned char mDataBuf[CC_MAX_SERIAL_RD_BUF_LEN];
+
+ enum SerialCommunicationState {
+ STATE_STOPED = 0,
+ STATE_RUNNING,
+ };
+};
+
+#endif //__TV_SERIAL_COMMUNICATION_H__
diff --git a/tvapi/libtv/tvutils/CSerialPort.cpp b/tvapi/libtv/tvutils/CSerialPort.cpp
index f634b04..d48869f 100644
--- a/tvapi/libtv/tvutils/CSerialPort.cpp
+++ b/tvapi/libtv/tvutils/CSerialPort.cpp
@@ -15,7 +15,7 @@
CSerialPort::CSerialPort()
{
- mDevId = -1;
+ mDevId = -1;
}
//close it
CSerialPort::~CSerialPort()
@@ -24,334 +24,334 @@ CSerialPort::~CSerialPort()
int CSerialPort::OpenDevice(int serial_dev_id)
{
- int tmp_ret = 0;
- const char *dev_file_name = NULL;
-
- if (getFd() < 0) {
- if (serial_dev_id == SERIAL_A) {
- dev_file_name = DEV_PATH_S0;
- } else if (serial_dev_id == SERIAL_B) {
- dev_file_name = DEV_PATH_S1;
- } else if (serial_dev_id == SERIAL_C) {
- dev_file_name = DEV_PATH_S2;
- }
-
- if (dev_file_name != NULL) {
- mDevId = serial_dev_id;
- tmp_ret = openFile(dev_file_name);
- }
- }
-
- return tmp_ret;
+ int tmp_ret = 0;
+ const char *dev_file_name = NULL;
+
+ if (getFd() < 0) {
+ if (serial_dev_id == SERIAL_A) {
+ dev_file_name = DEV_PATH_S0;
+ } else if (serial_dev_id == SERIAL_B) {
+ dev_file_name = DEV_PATH_S1;
+ } else if (serial_dev_id == SERIAL_C) {
+ dev_file_name = DEV_PATH_S2;
+ }
+
+ if (dev_file_name != NULL) {
+ mDevId = serial_dev_id;
+ tmp_ret = openFile(dev_file_name);
+ }
+ }
+
+ return tmp_ret;
}
int CSerialPort::CloseDevice()
{
- mDevId = -1;
- closeFile();
+ mDevId = -1;
+ closeFile();
- return 0;
+ return 0;
}
void CSerialPort::set_speed (int fd, int speed)
{
- int i;
- int status;
- struct termios Opt;
- tcgetattr (fd, &Opt);
- for (i = 0; i < sizeof (speed_arr) / sizeof (int); i++) {
- if (speed == name_arr[i]) {
- tcflush (fd, TCIOFLUSH);
- cfsetispeed (&Opt, speed_arr[i]);
- cfsetospeed (&Opt, speed_arr[i]);
- status = tcsetattr (fd, TCSANOW, &Opt);
- if (status != 0) {
- perror ("tcsetattr fd1");
- return;
- }
- tcflush (fd, TCIOFLUSH);
- }
- }
+ int i;
+ int status;
+ struct termios Opt;
+ tcgetattr (fd, &Opt);
+ for (i = 0; i < sizeof (speed_arr) / sizeof (int); i++) {
+ if (speed == name_arr[i]) {
+ tcflush (fd, TCIOFLUSH);
+ cfsetispeed (&Opt, speed_arr[i]);
+ cfsetospeed (&Opt, speed_arr[i]);
+ status = tcsetattr (fd, TCSANOW, &Opt);
+ if (status != 0) {
+ perror ("tcsetattr fd1");
+ return;
+ }
+ tcflush (fd, TCIOFLUSH);
+ }
+ }
}
int CSerialPort::set_Parity (int fd, int databits, int stopbits, int parity)
{
- struct termios options;
- if (tcgetattr (fd, &options) != 0) {
- perror ("SetupSerial 1");
- return (0);
- }
- options.c_cflag &= ~CSIZE;
- switch (databits) {
- case 7:
- options.c_cflag |= CS7;
- break;
- case 8:
- options.c_cflag |= CS8;
- break;
- default:
- fprintf (stderr, "Unsupported data size\n");
- return (0);
- }
- switch (parity) {
- case 'n':
- case 'N':
- options.c_cflag &= ~PARENB; /* Clear parity enable */
- options.c_iflag &= ~INPCK; /* Enable parity checking */
- break;
- case 'o':
- case 'O':
- options.c_cflag |= (PARODD | PARENB);
- options.c_iflag |= INPCK; /* Disnable parity checking */
- break;
- case 'e':
- case 'E':
- options.c_cflag |= PARENB; /* Enable parity */
- options.c_cflag &= ~PARODD;
- options.c_iflag |= INPCK; /* Disnable parity checking */
- break;
- case 'S':
- case 's': /*as no parity */
- options.c_cflag &= ~PARENB;
- options.c_cflag &= ~CSTOPB;
- break;
- default:
- fprintf (stderr, "Unsupported parity\n");
- return (0);
- }
-
- switch (stopbits) {
- case 1:
- options.c_cflag &= ~CSTOPB;
- break;
- case 2:
- options.c_cflag |= CSTOPB;
- break;
- default:
- fprintf (stderr, "Unsupported stop bits\n");
- return (0);
- }
- /* Set input parity option */
- if (parity != 'n')
- options.c_iflag |= INPCK;
- tcflush (fd, TCIFLUSH);
- options.c_cc[VTIME] = 150;
- options.c_cc[VMIN] = 0; /* Update the options and do it NOW */
- //qd to set raw mode, which is copied from web
- options.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
- | INLCR | IGNCR | ICRNL | IXON);
- options.c_oflag &= ~OPOST;
- options.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
- options.c_cflag &= ~(CSIZE | PARENB);
- options.c_cflag |= CS8;
-
- if (tcsetattr (fd, TCSANOW, &options) != 0) {
- perror ("SetupSerial 3");
- return (0);
- }
- return (1);
+ struct termios options;
+ if (tcgetattr (fd, &options) != 0) {
+ perror ("SetupSerial 1");
+ return (0);
+ }
+ options.c_cflag &= ~CSIZE;
+ switch (databits) {
+ case 7:
+ options.c_cflag |= CS7;
+ break;
+ case 8:
+ options.c_cflag |= CS8;
+ break;
+ default:
+ fprintf (stderr, "Unsupported data size\n");
+ return (0);
+ }
+ switch (parity) {
+ case 'n':
+ case 'N':
+ options.c_cflag &= ~PARENB; /* Clear parity enable */
+ options.c_iflag &= ~INPCK; /* Enable parity checking */
+ break;
+ case 'o':
+ case 'O':
+ options.c_cflag |= (PARODD | PARENB);
+ options.c_iflag |= INPCK; /* Disnable parity checking */
+ break;
+ case 'e':
+ case 'E':
+ options.c_cflag |= PARENB; /* Enable parity */
+ options.c_cflag &= ~PARODD;
+ options.c_iflag |= INPCK; /* Disnable parity checking */
+ break;
+ case 'S':
+ case 's': /*as no parity */
+ options.c_cflag &= ~PARENB;
+ options.c_cflag &= ~CSTOPB;
+ break;
+ default:
+ fprintf (stderr, "Unsupported parity\n");
+ return (0);
+ }
+
+ switch (stopbits) {
+ case 1:
+ options.c_cflag &= ~CSTOPB;
+ break;
+ case 2:
+ options.c_cflag |= CSTOPB;
+ break;
+ default:
+ fprintf (stderr, "Unsupported stop bits\n");
+ return (0);
+ }
+ /* Set input parity option */
+ if (parity != 'n')
+ options.c_iflag |= INPCK;
+ tcflush (fd, TCIFLUSH);
+ options.c_cc[VTIME] = 150;
+ options.c_cc[VMIN] = 0; /* Update the options and do it NOW */
+ //qd to set raw mode, which is copied from web
+ options.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
+ | INLCR | IGNCR | ICRNL | IXON);
+ options.c_oflag &= ~OPOST;
+ options.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
+ options.c_cflag &= ~(CSIZE | PARENB);
+ options.c_cflag |= CS8;
+
+ if (tcsetattr (fd, TCSANOW, &options) != 0) {
+ perror ("SetupSerial 3");
+ return (0);
+ }
+ return (1);
}
int CSerialPort::setup_serial()
{
- set_speed(mFd, 115200);
- set_Parity(mFd, 8, 1, 'N');
- return 0;
+ set_speed(mFd, 115200);
+ set_Parity(mFd, 8, 1, 'N');
+ return 0;
}
int CSerialPort::set_opt(int speed, int db, int sb, char pb, int overtime, bool raw_mode)
{
- int i = 0;
- struct termios old_cfg, new_cfg;
- if (mFd <= 0) {
- LOGE("not open dev, when set opt");
- return -1;
- }
- //first get it
- if (tcgetattr(mFd, &old_cfg) != 0) {
- LOGE("get serial attr error mFd = %d(%s)!\n", mFd, strerror(errno));
- return -1;
- }
-
- //set speed
- for (i = 0; i < sizeof(speed_arr) / sizeof(int); i++) {
- if (speed == name_arr[i]) {
- cfsetispeed(&new_cfg, speed_arr[i]);
- cfsetospeed(&new_cfg, speed_arr[i]);
- break;
- }
- }
-
- setdatabits(&new_cfg, db);
- setstopbits(&new_cfg, sb);
- setparity(&new_cfg, pb);
-
-
- if (overtime >= 0) {
- new_cfg.c_cc[VTIME] = overtime / 100; /* 设置超时 seconds*/
- new_cfg.c_cc[VMIN] = 0; /* Update the options and do it NOW */
- }
-
- if (raw_mode) {
- cfmakeraw(&new_cfg);
- }
-
- //clear
- tcflush(mFd, TCIOFLUSH);
- if (tcsetattr(mFd, TCSANOW, &new_cfg) < 0) {
- LOGE("%s, set serial attr error(%s)!\n", "TV", strerror(errno));
- return -1;
- }
- //clear,let be avail
- tcflush(mFd, TCIOFLUSH);
-
- return 0;
+ int i = 0;
+ struct termios old_cfg, new_cfg;
+ if(mFd <= 0) {
+ LOGE("not open dev, when set opt");
+ return -1;
+ }
+ //first get it
+ if(tcgetattr(mFd, &old_cfg) != 0) {
+ LOGE("get serial attr error mFd = %d(%s)!\n", mFd, strerror(errno));
+ return -1;
+ }
+
+ //set speed
+ for (i = 0; i < sizeof(speed_arr) / sizeof(int); i++) {
+ if (speed == name_arr[i]) {
+ cfsetispeed(&new_cfg, speed_arr[i]);
+ cfsetospeed(&new_cfg, speed_arr[i]);
+ break;
+ }
+ }
+
+ setdatabits(&new_cfg, db);
+ setstopbits(&new_cfg, sb);
+ setparity(&new_cfg, pb);
+
+
+ if (overtime >= 0) {
+ new_cfg.c_cc[VTIME] = overtime / 100; /* 设置超时 seconds*/
+ new_cfg.c_cc[VMIN] = 0; /* Update the options and do it NOW */
+ }
+
+ if (raw_mode) {
+ cfmakeraw(&new_cfg);
+ }
+
+ //clear
+ tcflush(mFd, TCIOFLUSH);
+ if (tcsetattr(mFd, TCSANOW, &new_cfg) < 0) {
+ LOGE("%s, set serial attr error(%s)!\n", "TV", strerror(errno));
+ return -1;
+ }
+ //clear,let be avail
+ tcflush(mFd, TCIOFLUSH);
+
+ return 0;
}
int CSerialPort::writeFile(const unsigned char *pData, unsigned int uLen)
{
- unsigned int len;
- len = write(mFd, pData, uLen);
- if (len == uLen) {
- return len;
- } else {
- tcflush(mFd, TCOFLUSH);
- LOGE("write data failed and tcflush hComm\n");
- return -1;
- }
+ unsigned int len;
+ len = write(mFd, pData, uLen);
+ if (len == uLen) {
+ return len;
+ } else {
+ tcflush(mFd, TCOFLUSH);
+ LOGE("write data failed and tcflush hComm\n");
+ return -1;
+ }
}
static int com_read_data(int hComm, unsigned char *pData, unsigned int uLen)
{
- char inbuff[uLen];
- char buff[uLen];
- char tempbuff[uLen];
- int i = 0, j = 0;
-
- memset(inbuff, '\0', uLen);
- memset(buff, '\0', uLen);
- memset(tempbuff, '\0', uLen);
-
- if (hComm < 0) {
- return -1;
- }
-
- char *p = inbuff;
-
- fd_set readset;
- struct timeval tv;
- int MaxFd = 0;
-
- unsigned int c = 0;
- int z, k;
-
- do {
- FD_ZERO(&readset);
- FD_SET(hComm, &readset);
- MaxFd = hComm + 1;
- tv.tv_sec = 0;
- tv.tv_usec = 100000;
- do {
- z = select(MaxFd, &readset, 0, 0, &tv);
- } while (z == -1 && errno == EINTR);
-
- if (z == -1) {
- hComm = -1;
- break;
- }
-
- if (z == 0) {
- hComm = -1;
- break;
- }
-
- if (FD_ISSET(hComm, &readset)) {
- z = read(hComm, buff, uLen - c);
+ char inbuff[uLen];
+ char buff[uLen];
+ char tempbuff[uLen];
+ int i = 0, j = 0;
+
+ memset(inbuff, '\0', uLen);
+ memset(buff, '\0', uLen);
+ memset(tempbuff, '\0', uLen);
+
+ if (hComm < 0) {
+ return -1;
+ }
+
+ char *p = inbuff;
+
+ fd_set readset;
+ struct timeval tv;
+ int MaxFd = 0;
+
+ unsigned int c = 0;
+ int z, k;
+
+ do {
+ FD_ZERO(&readset);
+ FD_SET(hComm, &readset);
+ MaxFd = hComm + 1;
+ tv.tv_sec = 0;
+ tv.tv_usec = 100000;
+ do {
+ z = select(MaxFd, &readset, 0, 0, &tv);
+ } while (z == -1 && errno == EINTR);
+
+ if (z == -1) {
+ hComm = -1;
+ break;
+ }
+
+ if (z == 0) {
+ hComm = -1;
+ break;
+ }
+
+ if (FD_ISSET(hComm, &readset)) {
+ z = read(hComm, buff, uLen - c);
#if 0
- for (k = 0; k < z; k++) {
- LOGD("%s, inbuff[%d]:%02X", "TV", k, buff[k]);
- }
+ for (k = 0; k < z; k++) {
+ LOGD("%s, inbuff[%d]:%02X", "TV", k, buff[k]);
+ }
#endif
- c += z;
-
- if (z > 0) {
- if (z < (signed int) uLen) {
- buff[z + 1] = '\0';
- memcpy(p, buff, z);
- p += z;
- } else {
- memcpy(inbuff, buff, z);
- }
-
- memset(buff, '\0', uLen);
- } else {
- hComm = -1;
- }
-
- if (c >= uLen) {
- hComm = -1;
- break;
- }
- }
- } while (hComm >= 0);
-
- memcpy(pData, inbuff, c);
- p = NULL;
- return c;
+ c += z;
+
+ if (z > 0) {
+ if (z < (signed int) uLen) {
+ buff[z + 1] = '\0';
+ memcpy(p, buff, z);
+ p += z;
+ } else {
+ memcpy(inbuff, buff, z);
+ }
+
+ memset(buff, '\0', uLen);
+ } else {
+ hComm = -1;
+ }
+
+ if (c >= uLen) {
+ hComm = -1;
+ break;
+ }
+ }
+ } while (hComm >= 0);
+
+ memcpy(pData, inbuff, c);
+ p = NULL;
+ return c;
}
int CSerialPort::readFile(unsigned char *pBuf, unsigned int uLen)
{
- //using non-block mode
- return com_read_data(mFd, pBuf, uLen);
+ //using non-block mode
+ return com_read_data(mFd, pBuf, uLen);
}
int CSerialPort::setdatabits(struct termios *s, int db)
{
- if (db == 5) {
- s->c_cflag = (s->c_cflag & ~CSIZE) | (CS5 & CSIZE);
- } else if (db == 6) {
- s->c_cflag = (s->c_cflag & ~CSIZE) | (CS6 & CSIZE);
- } else if (db == 7) {
- s->c_cflag = (s->c_cflag & ~CSIZE) | (CS7 & CSIZE);
- } else if (db == 8) {
- s->c_cflag = (s->c_cflag & ~CSIZE) | (CS8 & CSIZE);
- } else {
- LOGE("Unsupported data size!\n");
- }
- return 0;
+ if (db == 5) {
+ s->c_cflag = (s->c_cflag & ~CSIZE) | (CS5 & CSIZE);
+ } else if (db == 6) {
+ s->c_cflag = (s->c_cflag & ~CSIZE) | (CS6 & CSIZE);
+ } else if (db == 7) {
+ s->c_cflag = (s->c_cflag & ~CSIZE) | (CS7 & CSIZE);
+ } else if (db == 8) {
+ s->c_cflag = (s->c_cflag & ~CSIZE) | (CS8 & CSIZE);
+ } else {
+ LOGE("Unsupported data size!\n");
+ }
+ return 0;
}
int CSerialPort::setstopbits(struct termios *s, int sb)
{
- if (sb == 1) {
- s->c_cflag &= ~CSTOPB;
- } else if (sb == 2) {
- s->c_cflag |= CSTOPB;
- } else {
- LOGE("Unsupported stop bits!\n");
- }
- return 0;
+ if (sb == 1) {
+ s->c_cflag &= ~CSTOPB;
+ } else if (sb == 2) {
+ s->c_cflag |= CSTOPB;
+ } else {
+ LOGE("Unsupported stop bits!\n");
+ }
+ return 0;
}
int CSerialPort::setparity(struct termios *s, char pb)
{
- if (pb == 'n' || pb == 'N') {
- s->c_cflag &= ~PARENB; /* Clear parity enable */
- s->c_cflag &= ~INPCK; /* Enable parity checking */
- } else if (pb == 'o' || pb == 'O') {
- s->c_cflag |= (PARODD | PARENB);
- s->c_cflag |= INPCK; /* Disable parity checking */
- } else if (pb == 'e' || pb == 'E') {
- s->c_cflag |= PARENB; /* Enable parity */
- s->c_cflag &= ~PARODD;
- s->c_iflag |= INPCK; /* Disable parity checking */
- } else if (pb == 's' || pb == 'S') {
- s->c_cflag &= ~PARENB;
- s->c_cflag &= ~CSTOPB;
- s->c_cflag |= INPCK; /* Disable parity checking */
- } else {
- LOGE("Unsupported parity!\n");
- }
- return 0;
+ if (pb == 'n' || pb == 'N') {
+ s->c_cflag &= ~PARENB; /* Clear parity enable */
+ s->c_cflag &= ~INPCK; /* Enable parity checking */
+ } else if (pb == 'o' || pb == 'O') {
+ s->c_cflag |= (PARODD | PARENB);
+ s->c_cflag |= INPCK; /* Disable parity checking */
+ } else if (pb == 'e' || pb == 'E') {
+ s->c_cflag |= PARENB; /* Enable parity */
+ s->c_cflag &= ~PARODD;
+ s->c_iflag |= INPCK; /* Disable parity checking */
+ } else if (pb == 's' || pb == 'S') {
+ s->c_cflag &= ~PARENB;
+ s->c_cflag &= ~CSTOPB;
+ s->c_cflag |= INPCK; /* Disable parity checking */
+ } else {
+ LOGE("Unsupported parity!\n");
+ }
+ return 0;
}
diff --git a/tvapi/libtv/tvutils/CSerialPort.h b/tvapi/libtv/tvutils/CSerialPort.h
index 6f77e73..b3c6c3b 100644
--- a/tvapi/libtv/tvutils/CSerialPort.h
+++ b/tvapi/libtv/tvutils/CSerialPort.h
@@ -20,36 +20,35 @@ static const char *DEV_PATH_S1 = "/dev/ttyS1";
static const char *DEV_PATH_S2 = "/dev/ttyS2";
enum SerialDeviceID {
- SERIAL_A = 0,
- SERIAL_B,
- SERIAL_C,
+ SERIAL_A = 0,
+ SERIAL_B,
+ SERIAL_C,
};
-class CSerialPort: public CFile
-{
+class CSerialPort: public CFile {
public:
- CSerialPort();
- ~CSerialPort();
+ CSerialPort();
+ ~CSerialPort();
- int OpenDevice(int serial_dev_id);
- int CloseDevice();
+ int OpenDevice(int serial_dev_id);
+ int CloseDevice();
- int writeFile(const unsigned char *pData, unsigned int uLen);
- int readFile(unsigned char *pBuf, unsigned int uLen);
- int set_opt(int speed, int db, int sb, char pb, int overtime, bool raw_mode);
- int setup_serial();
- int getDevId()
- {
- return mDevId;
- };
+ int writeFile(const unsigned char *pData, unsigned int uLen);
+ int readFile(unsigned char *pBuf, unsigned int uLen);
+ int set_opt(int speed, int db, int sb, char pb, int overtime, bool raw_mode);
+ int setup_serial();
+ int getDevId()
+ {
+ return mDevId;
+ };
private:
- int setdatabits(struct termios *s, int db);
- int setstopbits(struct termios *s, int sb);
- int setparity(struct termios *s, char pb);
- int set_Parity (int fd, int databits, int stopbits, int parity);
- void set_speed (int fd, int speed);
+ int setdatabits(struct termios *s, int db);
+ int setstopbits(struct termios *s, int sb);
+ int setparity(struct termios *s, char pb);
+ int set_Parity (int fd, int databits, int stopbits, int parity);
+ void set_speed (int fd, int speed);
- int mDevId;
+ int mDevId;
};
#endif
diff --git a/tvapi/libtv/tvutils/CSqlite.cpp b/tvapi/libtv/tvutils/CSqlite.cpp
index f4e91fb..4e95a04 100644
--- a/tvapi/libtv/tvutils/CSqlite.cpp
+++ b/tvapi/libtv/tvutils/CSqlite.cpp
@@ -18,88 +18,88 @@ using namespace android;
CSqlite::CSqlite()
{
- mHandle = NULL;
+ mHandle = NULL;
}
CSqlite::~CSqlite()
{
- if (mHandle > 0) {
- sqlite3_close(mHandle);
- mHandle = NULL;
- }
+ if(mHandle > 0) {
+ sqlite3_close(mHandle);
+ mHandle = NULL;
+ }
}
//完整性检测,检测数æ®åº“是å¦è¢«ç ´å
bool CSqlite::integrityCheck()
{
- char *err;
- int rval = sqlite3_exec(mHandle, "PRAGMA integrity_check;", sqlite3_exec_callback, NULL, &err);
- if (rval != SQLITE_OK) {
- LOGD(" val = %d msg = %s!\n", rval, sqlite3_errmsg(mHandle));
- return false;
- } else {
- return true;
- }
- return true;
+ char *err;
+ int rval = sqlite3_exec(mHandle, "PRAGMA integrity_check;", sqlite3_exec_callback, NULL, &err);
+ if(rval != SQLITE_OK) {
+ LOGD(" val = %d msg = %s!\n", rval, sqlite3_errmsg(mHandle));
+ return false;
+ } else {
+ return true;
+ }
+ return true;
}
int CSqlite::sqlite3_exec_callback(void *data, int nColumn, char **colValues, char **colNames)
{
- LOGD("sqlite3_exec_callback--- nums = %d", nColumn);
- for (int i = 0; i < nColumn; i++) {
- LOGD("%s\t", colValues[i]);
- }
- LOGD("\n");
+ LOGD("sqlite3_exec_callback--- nums = %d", nColumn);
+ for (int i = 0; i < nColumn; i++) {
+ LOGD("%s\t", colValues[i]);
+ }
+ LOGD("\n");
- return 0;
+ return 0;
}
int CSqlite::openDb(const char *path)
{
- if (sqlite3_open(path, &mHandle) != SQLITE_OK) {
- LOGD("open db(%s) error", path);
- mHandle = NULL;
- return -1;
- }
- return 0;
+ if (sqlite3_open(path, &mHandle) != SQLITE_OK) {
+ LOGD("open db(%s) error", path);
+ mHandle = NULL;
+ return -1;
+ }
+ return 0;
}
int CSqlite::closeDb()
{
- int rval = 0;
- if (mHandle != NULL) {
- rval = sqlite3_close(mHandle);
- mHandle = NULL;
- }
- return rval;
+ int rval = 0;
+ if(mHandle != NULL) {
+ rval = sqlite3_close(mHandle);
+ mHandle = NULL;
+ }
+ return rval;
}
void CSqlite::setHandle(sqlite3 *h)
{
- mHandle = h;
+ mHandle = h;
}
sqlite3 *CSqlite::getHandle()
{
- return mHandle;
+ return mHandle;
}
int CSqlite::select(const char *sql, CSqlite::Cursor &c)
{
- int col, row;
- char **pResult = NULL;
- char *errmsg;
- assert(mHandle && sql);
+ int col, row;
+ char **pResult = NULL;
+ char *errmsg;
+ assert(mHandle && sql);
- if (strncmp(sql, "select", 6))
- return -1;
- //LOGD("sql=%s", sql);
- if (sqlite3_get_table(mHandle, sql, &pResult, &row, &col, &errmsg) != SQLITE_OK) {
- LOGD("errmsg=%s", errmsg);
- if (pResult != NULL)
- sqlite3_free_table(pResult);
- return -1;
- }
+ if (strncmp(sql, "select", 6))
+ return -1;
+ //LOGD("sql=%s", sql);
+ if (sqlite3_get_table(mHandle, sql, &pResult, &row, &col, &errmsg) != SQLITE_OK) {
+ LOGD("errmsg=%s", errmsg);
+ if (pResult != NULL)
+ sqlite3_free_table(pResult);
+ return -1;
+ }
- //LOGD("row=%d, col=%d", row, col);
- c.Init(pResult, row, col);
- return 0;
+ //LOGD("row=%d, col=%d", row, col);
+ c.Init(pResult, row, col);
+ return 0;
}
void CSqlite::insert()
@@ -109,31 +109,31 @@ void CSqlite::insert()
bool CSqlite::exeSql(const char *sql)
{
- char *errmsg;
- if (sql == NULL) return false;
- if (sqlite3_exec(mHandle, sql, NULL, NULL, &errmsg) != SQLITE_OK) {
- LOGD("exeSql=: %s error=%s", sql, errmsg ? errmsg : "Unknown");
- if (errmsg)
- sqlite3_free(errmsg);
- return false;
- }
- LOGD("sql=%s", sql);
- return true;
+ char *errmsg;
+ if(sql == NULL) return false;
+ if (sqlite3_exec(mHandle, sql, NULL, NULL, &errmsg) != SQLITE_OK) {
+ LOGD("exeSql=: %s error=%s", sql, errmsg ? errmsg : "Unknown");
+ if (errmsg)
+ sqlite3_free(errmsg);
+ return false;
+ }
+ LOGD("sql=%s", sql);
+ return true;
}
bool CSqlite::beginTransaction()
{
- return exeSql("begin;");
+ return exeSql("begin;");
}
bool CSqlite::commitTransaction()
{
- return exeSql("commit;");
+ return exeSql("commit;");
}
bool CSqlite::rollbackTransaction()
{
- return exeSql("rollback;");
+ return exeSql("rollback;");
}
void CSqlite::del()
diff --git a/tvapi/libtv/tvutils/CSqlite.h b/tvapi/libtv/tvutils/CSqlite.h
index 6398e16..70fc6ad 100644
--- a/tvapi/libtv/tvutils/CSqlite.h
+++ b/tvapi/libtv/tvutils/CSqlite.h
@@ -18,169 +18,167 @@
#include "CTvLog.h"
#include <sqlite3.h>
using namespace android;
-class CSqlite
-{
+class CSqlite {
public:
- class Cursor
- {
- public:
- void Init(char **data, int cow, int col)
- {
- mData = data;
- mCurRowIndex = 0;
- mRowNums = cow;
- mColNums = col;
- mIsClosed = false;
- }
- Cursor()
- {
- mData = NULL;
- mCurRowIndex = 0;
- mRowNums = 0;
- mColNums = 0;
- mIsClosed = false;
- }
+ class Cursor {
+ public:
+ void Init(char **data, int cow, int col)
+ {
+ mData = data;
+ mCurRowIndex = 0;
+ mRowNums = cow;
+ mColNums = col;
+ mIsClosed = false;
+ }
+ Cursor()
+ {
+ mData = NULL;
+ mCurRowIndex = 0;
+ mRowNums = 0;
+ mColNums = 0;
+ mIsClosed = false;
+ }
- /*Cursor(Cursor& c)
- {
- data = c.data;
- mCurRowIndex = 0;
- mRowNums = c.mRowNums;
- mColNums = c.mColNums;
- mIsClosed = false;
- }
+ /*Cursor(Cursor& c)
+ {
+ data = c.data;
+ mCurRowIndex = 0;
+ mRowNums = c.mRowNums;
+ mColNums = c.mColNums;
+ mIsClosed = false;
+ }
- Cursor& operator = (const Cursor& c)
- {
- data = c.data;
- mCurRowIndex = 0;
- mRowNums = c.mRowNums;
- mColNums = c.mColNums;
- mIsClosed = false;
- return *this;
- }*/
- ~Cursor()
- {
- close();
- }
- //Row nums
- int getCount()
- {
- return mRowNums;
- }
+ Cursor& operator = (const Cursor& c)
+ {
+ data = c.data;
+ mCurRowIndex = 0;
+ mRowNums = c.mRowNums;
+ mColNums = c.mColNums;
+ mIsClosed = false;
+ return *this;
+ }*/
+ ~Cursor()
+ {
+ close();
+ }
+ //Row nums
+ int getCount()
+ {
+ return mRowNums;
+ }
- int getPosition();
+ int getPosition();
- bool move(int offset);
+ bool move(int offset);
- bool moveToPosition(int position);
+ bool moveToPosition(int position);
- bool moveToFirst()
- {
- //LOGD("moveToFirst mRowNums = %d", mRowNums);
- if (mRowNums <= 0) return false;
- mCurRowIndex = 0;
- return true;
- }
+ bool moveToFirst()
+ {
+ //LOGD("moveToFirst mRowNums = %d", mRowNums);
+ if(mRowNums <= 0) return false;
+ mCurRowIndex = 0;
+ return true;
+ }
- bool moveToLast();
+ bool moveToLast();
- bool moveToNext()
- {
- if (mCurRowIndex >= mRowNums - 1)return false;
- mCurRowIndex++;
- return true;
- }
+ bool moveToNext()
+ {
+ if(mCurRowIndex >= mRowNums - 1)return false;
+ mCurRowIndex++;
+ return true;
+ }
- bool moveToPrevious();
+ bool moveToPrevious();
- int getColumnIndex(const char *columnName)
- {
- int index = 0;
- for (int i = 0; i < mColNums; i++) {
- if (strcmp(columnName, mData[i]) == 0)
- return index;
- index++;
- }
+ int getColumnIndex(const char *columnName)
+ {
+ int index = 0;
+ for(int i = 0; i < mColNums; i++) {
+ if(strcmp(columnName, mData[i]) == 0)
+ return index;
+ index++;
+ }
- return -1;
- }
+ return -1;
+ }
- //String getColumnName(int columnIndex);
- //String[] getColumnNames();
- int getColumnCount();
- //字符串长度问题,弃用
- int getString(char *str, int columnIndex)
- {
- if (columnIndex >= mColNums || str == NULL) return -1;
- strcpy(str, mData[mColNums * (mCurRowIndex + 1) + columnIndex]);
- return 0;
- }
- //ä¸é™é•¿åº¦,ä¾èµ–于String8
- String8 getString(int columnIndex)
- {
- if (columnIndex >= mColNums) return String8("");
- return String8(mData[mColNums * (mCurRowIndex + 1) + columnIndex]);
- }
+ //String getColumnName(int columnIndex);
+ //String[] getColumnNames();
+ int getColumnCount();
+ //字符串长度问题,弃用
+ int getString(char *str, int columnIndex)
+ {
+ if(columnIndex >= mColNums || str == NULL) return -1;
+ strcpy(str, mData[mColNums * (mCurRowIndex + 1) + columnIndex]);
+ return 0;
+ }
+ //ä¸é™é•¿åº¦,ä¾èµ–于String8
+ String8 getString(int columnIndex)
+ {
+ if(columnIndex >= mColNums) return String8("");
+ return String8(mData[mColNums * (mCurRowIndex + 1) + columnIndex]);
+ }
- int getInt(int columnIndex)
- {
- //if(columnIndex >= mColNums || str == NULL) return -1;
- return atoi(mData[mColNums * (mCurRowIndex + 1) + columnIndex]);
- }
- unsigned long int getUInt(int columnIndex)
- {
- return strtoul(mData[mColNums * (mCurRowIndex + 1) + columnIndex], NULL, 10);
- }
- double getF(int columnIndex)
- {
- return atof(mData[mColNums * (mCurRowIndex + 1) + columnIndex]);
- }
- int getType(int columnIndex);
- void close()
- {
- if (mData != NULL)
- sqlite3_free_table(mData);
+ int getInt(int columnIndex)
+ {
+ //if(columnIndex >= mColNums || str == NULL) return -1;
+ return atoi(mData[mColNums * (mCurRowIndex + 1) + columnIndex]);
+ }
+ unsigned long int getUInt(int columnIndex)
+ {
+ return strtoul(mData[mColNums * (mCurRowIndex + 1) + columnIndex], NULL, 10);
+ }
+ double getF(int columnIndex)
+ {
+ return atof(mData[mColNums * (mCurRowIndex + 1) + columnIndex]);
+ }
+ int getType(int columnIndex);
+ void close()
+ {
+ if (mData != NULL)
+ sqlite3_free_table(mData);
- mData = NULL;
- mCurRowIndex = 0;
- mRowNums = 0;
- mIsClosed = true;
- }
- bool isClosed()
- {
- return mIsClosed;
- }
- private:
- char **mData;
- int mCurRowIndex;
- int mRowNums;
- int mColNums;
- bool mIsClosed;
- };
+ mData = NULL;
+ mCurRowIndex = 0;
+ mRowNums = 0;
+ mIsClosed = true;
+ }
+ bool isClosed()
+ {
+ return mIsClosed;
+ }
+ private:
+ char **mData;
+ int mCurRowIndex;
+ int mRowNums;
+ int mColNums;
+ bool mIsClosed;
+ };
public:
- CSqlite();
- virtual ~CSqlite();
- int openDb(const char *path);
- int closeDb();
- void setHandle(sqlite3 *h);
- sqlite3 *getHandle();
- bool integrityCheck();
- int select(const char *sql, Cursor &);
- bool exeSql(const char *sql);
- void insert();
- void del();
- void update();
- void xxtable();
- bool beginTransaction();
- bool commitTransaction();
- bool rollbackTransaction();
- void dbsync()
- {
- sync();
- };
+ CSqlite();
+ virtual ~CSqlite();
+ int openDb(const char *path);
+ int closeDb();
+ void setHandle(sqlite3 *h);
+ sqlite3 *getHandle();
+ bool integrityCheck();
+ int select(const char *sql, Cursor &);
+ bool exeSql(const char *sql);
+ void insert();
+ void del();
+ void update();
+ void xxtable();
+ bool beginTransaction();
+ bool commitTransaction();
+ bool rollbackTransaction();
+ void dbsync()
+ {
+ sync();
+ };
private:
- static int sqlite3_exec_callback(void *data, int nColumn, char **colValues, char **colNames);
- sqlite3 *mHandle;
+ static int sqlite3_exec_callback(void *data, int nColumn, char **colValues, char **colNames);
+ sqlite3 *mHandle;
};
#endif //CSQLITE
diff --git a/tvapi/libtv/tvutils/CThread.cpp b/tvapi/libtv/tvutils/CThread.cpp
index 16ebc30..237bd4f 100644
--- a/tvapi/libtv/tvutils/CThread.cpp
+++ b/tvapi/libtv/tvutils/CThread.cpp
@@ -19,9 +19,9 @@ reference android api, just linux pthread
#include <sys/prctl.h>
CThread::CThread()
- : mThreadId(-1),
- mLock("Thread::mLock"),
- mExitPending(false), mRunning(false)
+ : mThreadId(-1),
+ mLock("Thread::mLock"),
+ mExitPending(false), mRunning(false)
{
}
@@ -31,135 +31,135 @@ CThread::~CThread()
int CThread::readyToRun()
{
- return 0;
+ return 0;
}
int CThread::run(const char *name, int priority, int stack)
{
- CMutex::Autolock _l(mLock);
-
- if (mRunning) {
- // thread already started
- return -1;
- }
-
- mStatus = 0;
- mExitPending = false;
- mThreadId = -1;
- mRunning = true;
-
-
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-
- if (stack) {
- pthread_attr_setstacksize(&attr, stack);
- }
-
- int result = pthread_create(&mThreadId, &attr,
- _threadLoop, this);
- pthread_attr_destroy(&attr);
- if (result != 0) {
- LOGE("Thread create fail ret = %d (errno=%d)\n",
- result, errno);
-
- mStatus = -1; // something happened!
- mRunning = false;
- mThreadId = -1;
- return -1;
- }
- return 0;
+ CMutex::Autolock _l(mLock);
+
+ if (mRunning) {
+ // thread already started
+ return -1;
+ }
+
+ mStatus = 0;
+ mExitPending = false;
+ mThreadId = -1;
+ mRunning = true;
+
+
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+
+ if (stack) {
+ pthread_attr_setstacksize(&attr, stack);
+ }
+
+ int result = pthread_create(&mThreadId, &attr,
+ _threadLoop, this);
+ pthread_attr_destroy(&attr);
+ if (result != 0) {
+ LOGE("Thread create fail ret = %d (errno=%d)\n",
+ result, errno);
+
+ mStatus = -1; // something happened!
+ mRunning = false;
+ mThreadId = -1;
+ return -1;
+ }
+ return 0;
}
void *CThread::_threadLoop(void *user)
{
- CThread *const self = static_cast<CThread *>(user);
-
- bool first = true;
- do {
- bool result;
- if (first) {
- first = false;
- self->mStatus = self->readyToRun();
- result = (self->mStatus == 0);
-
- if (result && !self->exitPending()) {
- result = self->threadLoop();
- }
- } else {
- result = self->threadLoop();
- }
-
-
- CMutex::Autolock _l(self->mLock);
- if (result == false || self->mExitPending) {
- self->mExitPending = true;
- self->mRunning = false;
- // clear thread ID so that requestExitAndWait() does not exit if
- // called by a new thread using the same thread ID as this one.
- self->mThreadId = -1;
- // note that interested observers blocked in requestExitAndWait are
- // awoken by broadcast, but blocked on mLock until break exits scope
- self->mThreadExitedCondition.broadcast();
- break;
- }
- } while (true);
-
- return NULL;
+ CThread *const self = static_cast<CThread *>(user);
+
+ bool first = true;
+ do {
+ bool result;
+ if (first) {
+ first = false;
+ self->mStatus = self->readyToRun();
+ result = (self->mStatus == 0);
+
+ if (result && !self->exitPending()) {
+ result = self->threadLoop();
+ }
+ } else {
+ result = self->threadLoop();
+ }
+
+
+ CMutex::Autolock _l(self->mLock);
+ if (result == false || self->mExitPending) {
+ self->mExitPending = true;
+ self->mRunning = false;
+ // clear thread ID so that requestExitAndWait() does not exit if
+ // called by a new thread using the same thread ID as this one.
+ self->mThreadId = -1;
+ // note that interested observers blocked in requestExitAndWait are
+ // awoken by broadcast, but blocked on mLock until break exits scope
+ self->mThreadExitedCondition.broadcast();
+ break;
+ }
+ } while(true);
+
+ return NULL;
}
void CThread::requestExit()
{
- CMutex::Autolock _l(mLock);
- mExitPending = true;
+ CMutex::Autolock _l(mLock);
+ mExitPending = true;
}
int CThread::requestExitAndWait()
{
- CMutex::Autolock _l(mLock);
- if (mThreadId == pthread_self()) {
- ALOGW(
- "Thread (this=%p): don't call waitForExit() from this "
- "Thread object's thread. It's a guaranteed deadlock!",
- this);
- return -1;
- }
-
- mExitPending = true;
-
- while (mRunning == true) {
- mThreadExitedCondition.wait(mLock);
- }
- // This next line is probably not needed any more, but is being left for
- // historical reference. Note that each interested party will clear flag.
- mExitPending = false;
-
- return mStatus;
+ CMutex::Autolock _l(mLock);
+ if (mThreadId == pthread_self()) {
+ ALOGW(
+ "Thread (this=%p): don't call waitForExit() from this "
+ "Thread object's thread. It's a guaranteed deadlock!",
+ this);
+ return -1;
+ }
+
+ mExitPending = true;
+
+ while (mRunning == true) {
+ mThreadExitedCondition.wait(mLock);
+ }
+ // This next line is probably not needed any more, but is being left for
+ // historical reference. Note that each interested party will clear flag.
+ mExitPending = false;
+
+ return mStatus;
}
int CThread::join()
{
- CMutex::Autolock _l(mLock);
- if (mThreadId == pthread_self()) {
- ALOGW(
- "Thread (this=%p): don't call join() from this "
- "Thread object's thread. It's a guaranteed deadlock!",
- this);
+ CMutex::Autolock _l(mLock);
+ if (mThreadId == pthread_self()) {
+ ALOGW(
+ "Thread (this=%p): don't call join() from this "
+ "Thread object's thread. It's a guaranteed deadlock!",
+ this);
- return -1;
- }
+ return -1;
+ }
- while (mRunning == true) {
- mThreadExitedCondition.wait(mLock);
- }
+ while (mRunning == true) {
+ mThreadExitedCondition.wait(mLock);
+ }
- return mStatus;
+ return mStatus;
}
bool CThread::exitPending() const
{
- CMutex::Autolock _l(mLock);
- return mExitPending;
+ CMutex::Autolock _l(mLock);
+ return mExitPending;
}
diff --git a/tvapi/libtv/tvutils/CThread.h b/tvapi/libtv/tvutils/CThread.h
index 38e8265..5910ee5 100644
--- a/tvapi/libtv/tvutils/CThread.h
+++ b/tvapi/libtv/tvutils/CThread.h
@@ -12,51 +12,50 @@ reference android api, just linux pthread
#include "CCondition.h"
#include "CMutex.h"
-class CThread
-{
+class CThread {
public:
- CThread();
- virtual ~CThread();
-
- // Start the thread in threadLoop() which needs to be implemented.
- virtual int run(const char *name = 0,
- int priority = 0,
- int stack = 0);
- //request thread object to exit, asynchronous to exit.
- virtual void requestExit();
-
- // Good place to do one-time initializations
- virtual int readyToRun();
-
- // Call requestExit() and wait until this object's thread exits.
- // BE VERY CAREFUL of deadlocks. In particular, it would be silly to call
- // this function from this object's thread. Will return WOULD_BLOCK in
- // that case.
- int requestExitAndWait();
-
- // Wait until this object's thread exits. Returns immediately if not yet running.
- // Do not call from this object's thread; will return WOULD_BLOCK in that case.
- int join();
+ CThread();
+ virtual ~CThread();
+
+ // Start the thread in threadLoop() which needs to be implemented.
+ virtual int run(const char *name = 0,
+ int priority = 0,
+ int stack = 0);
+ //request thread object to exit, asynchronous to exit.
+ virtual void requestExit();
+
+ // Good place to do one-time initializations
+ virtual int readyToRun();
+
+ // Call requestExit() and wait until this object's thread exits.
+ // BE VERY CAREFUL of deadlocks. In particular, it would be silly to call
+ // this function from this object's thread. Will return WOULD_BLOCK in
+ // that case.
+ int requestExitAndWait();
+
+ // Wait until this object's thread exits. Returns immediately if not yet running.
+ // Do not call from this object's thread; will return WOULD_BLOCK in that case.
+ int join();
protected:
- // exitPending() returns true if requestExit() has been called.
- bool exitPending() const;
+ // exitPending() returns true if requestExit() has been called.
+ bool exitPending() const;
private:
- // Derived class must implement threadLoop(). The thread starts its life
- // here. There are two ways of using the Thread object:
- // 1) loop: if threadLoop() returns true, it will be called again if
- // requestExit() wasn't called.
- // 2) once: if threadLoop() returns false, the thread will exit upon return.
- virtual bool threadLoop() = 0;
+ // Derived class must implement threadLoop(). The thread starts its life
+ // here. There are two ways of using the Thread object:
+ // 1) loop: if threadLoop() returns true, it will be called again if
+ // requestExit() wasn't called.
+ // 2) once: if threadLoop() returns false, the thread will exit upon return.
+ virtual bool threadLoop() = 0;
private:
- static void *_threadLoop(void *user);
- pthread_t mThreadId;
- mutable CMutex mLock;
- CCondition mThreadExitedCondition;
- int mStatus;
- //note that all accesses of mExitPending and mRunning need to hold mLock
- volatile bool mExitPending;
- volatile bool mRunning;
+ static void *_threadLoop(void *user);
+ pthread_t mThreadId;
+ mutable CMutex mLock;
+ CCondition mThreadExitedCondition;
+ int mStatus;
+ //note that all accesses of mExitPending and mRunning need to hold mLock
+ volatile bool mExitPending;
+ volatile bool mRunning;
};
#endif
diff --git a/tvapi/libtv/tvutils/CTvInput.cpp b/tvapi/libtv/tvutils/CTvInput.cpp
index 4c460fd..3c88e0c 100644
--- a/tvapi/libtv/tvutils/CTvInput.cpp
+++ b/tvapi/libtv/tvutils/CTvInput.cpp
@@ -5,152 +5,152 @@
#define LOG_TAG "FBC"
CTvInput::CTvInput()
{
- mKeyEventFd_IR = open(KEY_EVENT_0, O_RDWR);
- mKeyEventFd = open(KEY_EVENT_1, O_RDWR);
- if (mKeyEventFd < 0 || mKeyEventFd_IR < 0) {
- LOGD( "could not open /dev/input/event1\n ");
- return ;
- }
- mRepeatKeyCode = -1;
- mRepeatKeydisTime = -1;
- mWhenTimeRepeatKeyStartToSend = -1;
- mTimeoutCount = 0;
+ mKeyEventFd_IR = open(KEY_EVENT_0, O_RDWR);
+ mKeyEventFd = open(KEY_EVENT_1, O_RDWR);
+ if(mKeyEventFd < 0 || mKeyEventFd_IR < 0) {
+ LOGD( "could not open /dev/input/event1\n ");
+ return ;
+ }
+ mRepeatKeyCode = -1;
+ mRepeatKeydisTime = -1;
+ mWhenTimeRepeatKeyStartToSend = -1;
+ mTimeoutCount = 0;
}
CTvInput::~CTvInput()
{
- close(mKeyEventFd);
- close(mKeyEventFd_IR);
+ close(mKeyEventFd);
+ close(mKeyEventFd_IR);
}
void CTvInput::sendkeyEvent(const int &type, const int &code, const int &value)
{
- int ret;
- struct input_event event;
-
- memset(&event, 0, sizeof(event));
- event.type = type;
- event.code = code ;
- event.value = value;
- ret = write(mKeyEventFd, &event, sizeof(event));
- if (ret < sizeof(event)) {
- LOGD("sendkeyEvent :write event failed, %s\n", strerror(errno));
- return ;
- }
+ int ret;
+ struct input_event event;
+
+ memset(&event, 0, sizeof(event));
+ event.type = type;
+ event.code = code ;
+ event.value = value;
+ ret = write(mKeyEventFd, &event, sizeof(event));
+ if(ret < sizeof(event)) {
+ LOGD("sendkeyEvent :write event failed, %s\n", strerror(errno));
+ return ;
+ }
}
void CTvInput::sendIRkeyEvent(const int &type, const int &code, const int &value)
{
- int ret;
- struct input_event event;
-
- memset(&event, 0, sizeof(event));
- event.type = type;
- event.code = code ;
- event.value = value;
- ret = write(mKeyEventFd_IR, &event, sizeof(event));
- if (ret < sizeof(event)) {
- LOGD("sendIRkeyEvent :write event failed, %s\n", strerror(errno));
- return ;
- }
+ int ret;
+ struct input_event event;
+
+ memset(&event, 0, sizeof(event));
+ event.type = type;
+ event.code = code ;
+ event.value = value;
+ ret = write(mKeyEventFd_IR, &event, sizeof(event));
+ if(ret < sizeof(event)) {
+ LOGD("sendIRkeyEvent :write event failed, %s\n", strerror(errno));
+ return ;
+ }
}
void CTvInput::sendkeyCode(const int &code)
{
- sendkeyEvent(1 , code, 1); //down
- sendkeyEvent(0, 0, 0); //clear
- sendkeyEvent(1 , code, 0); //up
- sendkeyEvent(0, 0, 0); //clear
+ sendkeyEvent(1 , code, 1); //down
+ sendkeyEvent(0, 0, 0); //clear
+ sendkeyEvent(1 , code, 0); //up
+ sendkeyEvent(0, 0, 0); //clear
}
void CTvInput::sendkeyCode_Up(const int &code)
{
- sendkeyEvent(1 , code, 0); //up
- sendkeyEvent(0, 0, 0); //clear
+ sendkeyEvent(1 , code, 0); //up
+ sendkeyEvent(0, 0, 0); //clear
}
void CTvInput::sendkeyCode_Down(const int &code)
{
- sendkeyEvent(1 , code, 1); //down
- sendkeyEvent(0, 0, 0); //clear
+ sendkeyEvent(1 , code, 1); //down
+ sendkeyEvent(0, 0, 0); //clear
}
void CTvInput::sendIRkeyCode(const int &code)
{
- sendIRkeyEvent(1 , code, 1); //down
- sendIRkeyEvent(0, 0, 0); //clear
- sendIRkeyEvent(1 , code, 0); //up
- sendIRkeyEvent(0, 0, 0); //clear
+ sendIRkeyEvent(1 , code, 1); //down
+ sendIRkeyEvent(0, 0, 0); //clear
+ sendIRkeyEvent(1 , code, 0); //up
+ sendIRkeyEvent(0, 0, 0); //clear
}
void CTvInput::sendIRkeyCode_Up(const int &code)
{
- sendIRkeyEvent(1 , code, 0); //up
- sendIRkeyEvent(0, 0, 0); //clear
+ sendIRkeyEvent(1 , code, 0); //up
+ sendIRkeyEvent(0, 0, 0); //clear
}
void CTvInput::sendIRkeyCode_Down(const int &code)
{
- sendIRkeyEvent(1 , code, 1); //down
- sendIRkeyEvent(0, 0, 0); //clear
+ sendIRkeyEvent(1 , code, 1); //down
+ sendIRkeyEvent(0, 0, 0); //clear
}
nsecs_t CTvInput::getNowMs()
{
- return systemTime(SYSTEM_TIME_MONOTONIC) / 1000000;
+ return systemTime(SYSTEM_TIME_MONOTONIC) / 1000000;
}
void CTvInput::sendKeyRepeatStart(const int &code, int disTime, int repeatDisTime)
{
- CMutex::Autolock _l(mLock);
- mTimeoutCount = 0;
- mRepeatKeyCode = code;
- mRepeatKeydisTime = disTime;
- mWhenTimeRepeatKeyStartToSend = disTime + getNowMs();
- mRepeatKeyRepeateDisTime = repeatDisTime;
- LOGD("sendKeyRepeatStart when = %lld", mWhenTimeRepeatKeyStartToSend);
- mSendKeyCondition.signal();
+ CMutex::Autolock _l(mLock);
+ mTimeoutCount = 0;
+ mRepeatKeyCode = code;
+ mRepeatKeydisTime = disTime;
+ mWhenTimeRepeatKeyStartToSend = disTime + getNowMs();
+ mRepeatKeyRepeateDisTime = repeatDisTime;
+ LOGD("sendKeyRepeatStart when = %lld", mWhenTimeRepeatKeyStartToSend);
+ mSendKeyCondition.signal();
}
void CTvInput::sendKeyRepeatStop()
{
- CMutex::Autolock _l(mLock);
- mRepeatKeyCode = -1;
- mRepeatKeydisTime = -1;
+ CMutex::Autolock _l(mLock);
+ mRepeatKeyCode = -1;
+ mRepeatKeydisTime = -1;
}
bool CTvInput::threadLoop()
{
- int sleeptime = 100;//ms
-
- while (!exitPending()) { //requietexit() or requietexitWait() not call
- LOGD("threadLoop0 when = %lld", mWhenTimeRepeatKeyStartToSend);
- while (mRepeatKeyCode < 0 || mRepeatKeydisTime < 0) { //msg queue is empty
- mLock.lock();
- mSendKeyCondition.wait(mLock);//first unlock,when return,lock again,so need,call unlock
- mLock.unlock();
- }
- LOGD("threadLoop1 when = %lld", mWhenTimeRepeatKeyStartToSend);
- int disToSend = -1;
- do {
- disToSend = mWhenTimeRepeatKeyStartToSend - getNowMs();
- LOGD("dis when = %lld", disToSend);
- if (disToSend <= 0) break;
-
- mLock.lock();
- mSendKeyCondition.waitRelative(mLock, disToSend);//first unlock,when return,lock again,so need,call unlock
- mLock.unlock();
- } while (disToSend > 0); //
- LOGD("threadLoop2 when = %lld ", mWhenTimeRepeatKeyStartToSend);
- if (mTimeoutCount < 30) {
- LOGD("mTimeoutCount = %d \n", mTimeoutCount);
-
- mTimeoutCount++;
- sendkeyCode(mRepeatKeyCode);
- } else {
- LOGD("mTimeoutCount = %d,so stop sending long press msg.\n", mTimeoutCount);
- }
- usleep(mRepeatKeyRepeateDisTime * 1000);
- }
- //exit
- //return true, run again, return false,not run.
- return false;
+ int sleeptime = 100;//ms
+
+ while(!exitPending()) { //requietexit() or requietexitWait() not call
+ LOGD("threadLoop0 when = %lld", mWhenTimeRepeatKeyStartToSend);
+ while(mRepeatKeyCode < 0 || mRepeatKeydisTime < 0) { //msg queue is empty
+ mLock.lock();
+ mSendKeyCondition.wait(mLock);//first unlock,when return,lock again,so need,call unlock
+ mLock.unlock();
+ }
+ LOGD("threadLoop1 when = %lld", mWhenTimeRepeatKeyStartToSend);
+ int disToSend = -1;
+ do {
+ disToSend = mWhenTimeRepeatKeyStartToSend - getNowMs();
+ LOGD("dis when = %lld", disToSend);
+ if(disToSend <= 0) break;
+
+ mLock.lock();
+ mSendKeyCondition.waitRelative(mLock, disToSend);//first unlock,when return,lock again,so need,call unlock
+ mLock.unlock();
+ } while(disToSend > 0); //
+ LOGD("threadLoop2 when = %lld ", mWhenTimeRepeatKeyStartToSend);
+ if(mTimeoutCount < 30) {
+ LOGD("mTimeoutCount = %d \n", mTimeoutCount);
+
+ mTimeoutCount++;
+ sendkeyCode(mRepeatKeyCode);
+ } else {
+ LOGD("mTimeoutCount = %d,so stop sending long press msg.\n", mTimeoutCount);
+ }
+ usleep(mRepeatKeyRepeateDisTime * 1000);
+ }
+ //exit
+ //return true, run again, return false,not run.
+ return false;
} \ No newline at end of file
diff --git a/tvapi/libtv/tvutils/CTvInput.h b/tvapi/libtv/tvutils/CTvInput.h
index 952befb..bb2bce1 100644
--- a/tvapi/libtv/tvutils/CTvInput.h
+++ b/tvapi/libtv/tvutils/CTvInput.h
@@ -6,34 +6,33 @@
static const char *KEY_EVENT_0 = "/dev/input/event0";
static const char *KEY_EVENT_1 = "/dev/input/event1";
static const char *KEY_EVENT_2 = "/dev/input/event2";
-class CTvInput: public CThread
-{
+class CTvInput: public CThread {
public:
- CTvInput();
- ~CTvInput();
- void sendkeyEvent(const int &type, const int &code, const int &value);
- void sendIRkeyEvent(const int &type, const int &code, const int &value);
- void sendkeyCode(const int &code);
- void sendkeyCode_Up(const int &code);
- void sendkeyCode_Down(const int &code);
- void sendIRkeyCode(const int &code);
- void sendIRkeyCode_Up(const int &code);
- void sendIRkeyCode_Down(const int &code);
- void sendKeyRepeatStart(const int &code, int disTime, int repeatDisTime);//ms
- void sendKeyRepeatStop();
- nsecs_t getNowMs();
+ CTvInput();
+ ~CTvInput();
+ void sendkeyEvent(const int &type, const int &code, const int &value);
+ void sendIRkeyEvent(const int &type, const int &code, const int &value);
+ void sendkeyCode(const int &code);
+ void sendkeyCode_Up(const int &code);
+ void sendkeyCode_Down(const int &code);
+ void sendIRkeyCode(const int &code);
+ void sendIRkeyCode_Up(const int &code);
+ void sendIRkeyCode_Down(const int &code);
+ void sendKeyRepeatStart(const int &code, int disTime, int repeatDisTime);//ms
+ void sendKeyRepeatStop();
+ nsecs_t getNowMs();
private:
- bool threadLoop();
+ bool threadLoop();
- int mKeyEventFd;
- int mKeyEventFd_IR;
- CCondition mSendKeyCondition;
- CMutex mLock;
- int mRepeatKeyCode;
- int mRepeatKeydisTime;
- int mRepeatKeyRepeateDisTime;
- int mTimeoutCount;
- nsecs_t mWhenTimeRepeatKeyStartToSend;
+ int mKeyEventFd;
+ int mKeyEventFd_IR;
+ CCondition mSendKeyCondition;
+ CMutex mLock;
+ int mRepeatKeyCode;
+ int mRepeatKeydisTime;
+ int mRepeatKeyRepeateDisTime;
+ int mTimeoutCount;
+ nsecs_t mWhenTimeRepeatKeyStartToSend;
};
#endif
diff --git a/tvapi/libtv/tvutils/serial_base.cpp b/tvapi/libtv/tvutils/serial_base.cpp
index 8a5a98b..e062c3b 100644
--- a/tvapi/libtv/tvutils/serial_base.cpp
+++ b/tvapi/libtv/tvutils/serial_base.cpp
@@ -39,428 +39,428 @@ static int name_arr[] = { 115200, 38400, 19200, 9600, 4800, 2400, 1200, 300, 384
static int open_com_dev(int *dev_handle, char *dev_path)
{
- if (*dev_handle < 0) {
- *dev_handle = open(dev_path, O_RDWR);
- if (*dev_handle < 0) {
- LOGE("%s, Can't Open Serial Port %s", "TV", dev_path);
- }
- }
-
- return *dev_handle;
+ if (*dev_handle < 0) {
+ *dev_handle = open(dev_path, O_RDWR);
+ if (*dev_handle < 0) {
+ LOGE("%s, Can't Open Serial Port %s", "TV", dev_path);
+ }
+ }
+
+ return *dev_handle;
}
static int close_com_dev(int *dev_handle)
{
- if (*dev_handle >= 0) {
- close(*dev_handle);
- *dev_handle = -1;
- }
+ if (*dev_handle >= 0) {
+ close(*dev_handle);
+ *dev_handle = -1;
+ }
- return 0;
+ return 0;
}
static __inline__ int cfsetdatabits(struct termios *s, int db)
{
- if (db == 5) {
- s->c_cflag = (s->c_cflag & ~CSIZE) | (CS5 & CSIZE);
- } else if (db == 6) {
- s->c_cflag = (s->c_cflag & ~CSIZE) | (CS6 & CSIZE);
- } else if (db == 7) {
- s->c_cflag = (s->c_cflag & ~CSIZE) | (CS7 & CSIZE);
- } else if (db == 8) {
- s->c_cflag = (s->c_cflag & ~CSIZE) | (CS8 & CSIZE);
- } else {
- LOGE("%s, Unsupported data size!\n", "TV");
- }
-
- return 0;
+ if (db == 5) {
+ s->c_cflag = (s->c_cflag & ~CSIZE) | (CS5 & CSIZE);
+ } else if (db == 6) {
+ s->c_cflag = (s->c_cflag & ~CSIZE) | (CS6 & CSIZE);
+ } else if (db == 7) {
+ s->c_cflag = (s->c_cflag & ~CSIZE) | (CS7 & CSIZE);
+ } else if (db == 8) {
+ s->c_cflag = (s->c_cflag & ~CSIZE) | (CS8 & CSIZE);
+ } else {
+ LOGE("%s, Unsupported data size!\n", "TV");
+ }
+
+ return 0;
}
static __inline__ int cfsetstopbits(struct termios *s, int sb)
{
- if (sb == 1) {
- s->c_cflag &= ~CSTOPB;
- } else if (sb == 2) {
- s->c_cflag |= CSTOPB;
- } else {
- LOGE("%s, Unsupported stop bits!\n", "TV");
- }
-
- return 0;
+ if (sb == 1) {
+ s->c_cflag &= ~CSTOPB;
+ } else if (sb == 2) {
+ s->c_cflag |= CSTOPB;
+ } else {
+ LOGE("%s, Unsupported stop bits!\n", "TV");
+ }
+
+ return 0;
}
static __inline__ int cfsetparity(struct termios *s, int pb)
{
- if (pb == 'n' || pb == 'N') {
- s->c_cflag &= ~PARENB; /* Clear parity enable */
- s->c_cflag &= ~INPCK; /* Enable parity checking */
- } else if (pb == 'o' || pb == 'O') {
- s->c_cflag |= (PARODD | PARENB);
- s->c_cflag |= INPCK; /* Disable parity checking */
- } else if (pb == 'e' || pb == 'E') {
- s->c_cflag |= PARENB; /* Enable parity */
- s->c_cflag &= ~PARODD;
- s->c_iflag |= INPCK; /* Disable parity checking */
- } else if (pb == 's' || pb == 'S') {
- s->c_cflag &= ~PARENB;
- s->c_cflag &= ~CSTOPB;
- s->c_cflag |= INPCK; /* Disable parity checking */
- } else {
- LOGE("%s, Unsupported parity!\n", "TV");
- }
-
- return 0;
+ if (pb == 'n' || pb == 'N') {
+ s->c_cflag &= ~PARENB; /* Clear parity enable */
+ s->c_cflag &= ~INPCK; /* Enable parity checking */
+ } else if (pb == 'o' || pb == 'O') {
+ s->c_cflag |= (PARODD | PARENB);
+ s->c_cflag |= INPCK; /* Disable parity checking */
+ } else if (pb == 'e' || pb == 'E') {
+ s->c_cflag |= PARENB; /* Enable parity */
+ s->c_cflag &= ~PARODD;
+ s->c_iflag |= INPCK; /* Disable parity checking */
+ } else if (pb == 's' || pb == 'S') {
+ s->c_cflag &= ~PARENB;
+ s->c_cflag &= ~CSTOPB;
+ s->c_cflag |= INPCK; /* Disable parity checking */
+ } else {
+ LOGE("%s, Unsupported parity!\n", "TV");
+ }
+
+ return 0;
}
static int gOriAttrGetFlag = 0;
static struct termios gOriAttrValue;
static __inline__ int com_get_attr(int fd, struct termios *s)
{
- if (gOriAttrGetFlag == 0) {
- if (tcgetattr(fd, s) != 0) {
- return -1;
- }
+ if (gOriAttrGetFlag == 0) {
+ if (tcgetattr(fd, s) != 0) {
+ return -1;
+ }
- gOriAttrGetFlag = 1;
- gOriAttrValue = *s;
- }
+ gOriAttrGetFlag = 1;
+ gOriAttrValue = *s;
+ }
- *s = gOriAttrValue;
+ *s = gOriAttrValue;
- return 0;
+ return 0;
}
static int com_set_opt(int hComm, int speed, int db, int sb, int pb, int to, int raw_mode)
{
- int i = 0;
- struct termios tmpOpt;
-
- if (com_get_attr(hComm, &tmpOpt) != 0) {
- LOGE("%s, get serial attr error(%s)!\n", "TV", strerror(errno));
- return -1;
- }
-
- for (i = 0; i < sizeof(speed_arr) / sizeof(int); i++) {
- if (speed == name_arr[i]) {
- cfsetispeed(&tmpOpt, speed_arr[i]);
- cfsetospeed(&tmpOpt, speed_arr[i]);
- break;
- }
- }
-
- cfsetdatabits(&tmpOpt, db);
- cfsetstopbits(&tmpOpt, sb);
- cfsetparity(&tmpOpt, pb);
-
- if (to >= 0) {
- tmpOpt.c_cc[VTIME] = to; /* 设置超时15 seconds*/
- tmpOpt.c_cc[VMIN] = 0; /* Update the options and do it NOW */
- }
-
- if (raw_mode == 1) {
- cfmakeraw(&tmpOpt);
- }
-
- tcflush(hComm, TCIOFLUSH);
- if (tcsetattr(hComm, TCSANOW, &tmpOpt) < 0) {
- LOGE("%s, set serial attr error(%s)!\n", "TV", strerror(errno));
- return -1;
- }
- tcflush(hComm, TCIOFLUSH);
-
- return 0;
+ int i = 0;
+ struct termios tmpOpt;
+
+ if (com_get_attr(hComm, &tmpOpt) != 0) {
+ LOGE("%s, get serial attr error(%s)!\n", "TV", strerror(errno));
+ return -1;
+ }
+
+ for (i = 0; i < sizeof(speed_arr) / sizeof(int); i++) {
+ if (speed == name_arr[i]) {
+ cfsetispeed(&tmpOpt, speed_arr[i]);
+ cfsetospeed(&tmpOpt, speed_arr[i]);
+ break;
+ }
+ }
+
+ cfsetdatabits(&tmpOpt, db);
+ cfsetstopbits(&tmpOpt, sb);
+ cfsetparity(&tmpOpt, pb);
+
+ if (to >= 0) {
+ tmpOpt.c_cc[VTIME] = to; /* 设置超时15 seconds*/
+ tmpOpt.c_cc[VMIN] = 0; /* Update the options and do it NOW */
+ }
+
+ if (raw_mode == 1) {
+ cfmakeraw(&tmpOpt);
+ }
+
+ tcflush(hComm, TCIOFLUSH);
+ if (tcsetattr(hComm, TCSANOW, &tmpOpt) < 0) {
+ LOGE("%s, set serial attr error(%s)!\n", "TV", strerror(errno));
+ return -1;
+ }
+ tcflush(hComm, TCIOFLUSH);
+
+ return 0;
}
static int com_write_data(int hComm, const unsigned char *pData, unsigned int uLen)
{
- unsigned int len;
-
- if (hComm < 0) {
- return -1;
- }
-
- if (pData == NULL) {
- return -1;
- }
-
- LOGD("%s, write %d bytes\n", "TV", uLen);
-
- len = write(hComm, pData, uLen);
- if (len == uLen) {
- LOGD("%s, write data success\n", "TV");
- return len;
- } else {
- tcflush(hComm, TCOFLUSH);
- LOGE("%s, write data failed and tcflush hComm\n", "TV");
- return -1;
- }
+ unsigned int len;
+
+ if (hComm < 0) {
+ return -1;
+ }
+
+ if (pData == NULL) {
+ return -1;
+ }
+
+ LOGD("%s, write %d bytes\n", "TV", uLen);
+
+ len = write(hComm, pData, uLen);
+ if (len == uLen) {
+ LOGD("%s, write data success\n", "TV");
+ return len;
+ } else {
+ tcflush(hComm, TCOFLUSH);
+ LOGE("%s, write data failed and tcflush hComm\n", "TV");
+ return -1;
+ }
}
static int com_read_data(int hComm, char *pData, unsigned int uLen)
{
- char inbuff[uLen];
- char buff[uLen];
- char tempbuff[uLen];
- int i = 0, j = 0;
-
- memset(inbuff, '\0', uLen);
- memset(buff, '\0', uLen);
- memset(tempbuff, '\0', uLen);
-
- if (hComm < 0) {
- return -1;
- }
-
- char *p = inbuff;
-
- fd_set readset;
- struct timeval tv;
- int MaxFd = 0;
-
- unsigned int c = 0;
- int z, k;
-
- do {
- FD_ZERO(&readset);
- FD_SET(hComm, &readset);
- MaxFd = hComm + 1;
- tv.tv_sec = 0;
- tv.tv_usec = 100000;
- do {
- z = select(MaxFd, &readset, 0, 0, &tv);
- } while (z == -1 && errno == EINTR);
-
- if (z == -1) {
- hComm = -1;
- break;
- }
-
- if (z == 0) {
- hComm = -1;
- break;
- }
-
- if (FD_ISSET(hComm, &readset)) {
- z = read(hComm, buff, uLen - c);
+ char inbuff[uLen];
+ char buff[uLen];
+ char tempbuff[uLen];
+ int i = 0, j = 0;
+
+ memset(inbuff, '\0', uLen);
+ memset(buff, '\0', uLen);
+ memset(tempbuff, '\0', uLen);
+
+ if (hComm < 0) {
+ return -1;
+ }
+
+ char *p = inbuff;
+
+ fd_set readset;
+ struct timeval tv;
+ int MaxFd = 0;
+
+ unsigned int c = 0;
+ int z, k;
+
+ do {
+ FD_ZERO(&readset);
+ FD_SET(hComm, &readset);
+ MaxFd = hComm + 1;
+ tv.tv_sec = 0;
+ tv.tv_usec = 100000;
+ do {
+ z = select(MaxFd, &readset, 0, 0, &tv);
+ } while (z == -1 && errno == EINTR);
+
+ if (z == -1) {
+ hComm = -1;
+ break;
+ }
+
+ if (z == 0) {
+ hComm = -1;
+ break;
+ }
+
+ if (FD_ISSET(hComm, &readset)) {
+ z = read(hComm, buff, uLen - c);
#if 0
- for (k = 0; k < z; k++) {
- LOGD("%s, inbuff[%d]:%02X", "TV", k, buff[k]);
- }
+ for (k = 0; k < z; k++) {
+ LOGD("%s, inbuff[%d]:%02X", "TV", k, buff[k]);
+ }
#endif
- c += z;
-
- if (z > 0) {
- if (z < (signed int) uLen) {
- buff[z + 1] = '\0';
- memcpy(p, buff, z);
- p += z;
- } else {
- memcpy(inbuff, buff, z);
- }
-
- memset(buff, '\0', uLen);
- } else {
- hComm = -1;
- }
-
- if (c >= uLen) {
- hComm = -1;
- break;
- }
- }
- } while (hComm >= 0);
-
- memcpy(pData, inbuff, c);
- p = NULL;
- return c;
+ c += z;
+
+ if (z > 0) {
+ if (z < (signed int) uLen) {
+ buff[z + 1] = '\0';
+ memcpy(p, buff, z);
+ p += z;
+ } else {
+ memcpy(inbuff, buff, z);
+ }
+
+ memset(buff, '\0', uLen);
+ } else {
+ hComm = -1;
+ }
+
+ if (c >= uLen) {
+ hComm = -1;
+ break;
+ }
+ }
+ } while (hComm >= 0);
+
+ memcpy(pData, inbuff, c);
+ p = NULL;
+ return c;
}
int com_a_open_dev()
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- pthread_mutex_lock(&serial_a_op_mutex);
+ pthread_mutex_lock(&serial_a_op_mutex);
- tmp_ret = open_com_dev(&gSerialAHandle, CS_SERIAL_A_DEV_PATH);
+ tmp_ret = open_com_dev(&gSerialAHandle, CS_SERIAL_A_DEV_PATH);
- pthread_mutex_unlock(&serial_a_op_mutex);
+ pthread_mutex_unlock(&serial_a_op_mutex);
- return tmp_ret;
+ return tmp_ret;
}
int com_b_open_dev()
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- pthread_mutex_lock(&serial_b_op_mutex);
+ pthread_mutex_lock(&serial_b_op_mutex);
- tmp_ret = open_com_dev(&gSerialBHandle, CS_SERIAL_B_DEV_PATH);
+ tmp_ret = open_com_dev(&gSerialBHandle, CS_SERIAL_B_DEV_PATH);
- pthread_mutex_unlock(&serial_b_op_mutex);
+ pthread_mutex_unlock(&serial_b_op_mutex);
- return tmp_ret;
+ return tmp_ret;
}
int com_a_close_dev()
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- pthread_mutex_lock(&serial_a_op_mutex);
+ pthread_mutex_lock(&serial_a_op_mutex);
- tmp_ret = close_com_dev(&gSerialAHandle);
+ tmp_ret = close_com_dev(&gSerialAHandle);
- pthread_mutex_unlock(&serial_a_op_mutex);
+ pthread_mutex_unlock(&serial_a_op_mutex);
- return tmp_ret;
+ return tmp_ret;
}
int com_b_close_dev()
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- pthread_mutex_lock(&serial_b_op_mutex);
+ pthread_mutex_lock(&serial_b_op_mutex);
- tmp_ret = close_com_dev(&gSerialBHandle);
+ tmp_ret = close_com_dev(&gSerialBHandle);
- pthread_mutex_unlock(&serial_b_op_mutex);
+ pthread_mutex_unlock(&serial_b_op_mutex);
- return tmp_ret;
+ return tmp_ret;
}
int com_a_get_dev()
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- pthread_mutex_lock(&serial_a_op_mutex);
+ pthread_mutex_lock(&serial_a_op_mutex);
- tmp_ret = gSerialAHandle;
+ tmp_ret = gSerialAHandle;
- pthread_mutex_unlock(&serial_a_op_mutex);
+ pthread_mutex_unlock(&serial_a_op_mutex);
- return tmp_ret;
+ return tmp_ret;
}
int com_b_get_dev()
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- pthread_mutex_lock(&serial_b_op_mutex);
+ pthread_mutex_lock(&serial_b_op_mutex);
- tmp_ret = gSerialBHandle;
+ tmp_ret = gSerialBHandle;
- pthread_mutex_unlock(&serial_b_op_mutex);
+ pthread_mutex_unlock(&serial_b_op_mutex);
- return tmp_ret;
+ return tmp_ret;
}
int com_a_set_opt(int speed, int db, int sb, int pb, int to, int raw_mode)
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- pthread_mutex_lock(&serial_a_parity_mutex);
+ pthread_mutex_lock(&serial_a_parity_mutex);
- if (com_a_get_dev() < 0) {
- pthread_mutex_unlock(&serial_a_parity_mutex);
- return -1;
- }
+ if (com_a_get_dev() < 0) {
+ pthread_mutex_unlock(&serial_a_parity_mutex);
+ return -1;
+ }
- tmp_ret = com_set_opt(gSerialAHandle, speed, db, sb, pb, to, raw_mode);
+ tmp_ret = com_set_opt(gSerialAHandle, speed, db, sb, pb, to, raw_mode);
- pthread_mutex_unlock(&serial_a_parity_mutex);
+ pthread_mutex_unlock(&serial_a_parity_mutex);
- return tmp_ret;
+ return tmp_ret;
}
int com_b_set_opt(int speed, int db, int sb, int pb, int to, int raw_mode)
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- pthread_mutex_lock(&serial_b_parity_mutex);
+ pthread_mutex_lock(&serial_b_parity_mutex);
- if (com_b_get_dev() < 0) {
- pthread_mutex_unlock(&serial_b_parity_mutex);
- return -1;
- }
+ if (com_b_get_dev() < 0) {
+ pthread_mutex_unlock(&serial_b_parity_mutex);
+ return -1;
+ }
- tmp_ret = com_set_opt(gSerialBHandle, speed, db, sb, pb, to, raw_mode);
+ tmp_ret = com_set_opt(gSerialBHandle, speed, db, sb, pb, to, raw_mode);
- pthread_mutex_unlock(&serial_b_parity_mutex);
+ pthread_mutex_unlock(&serial_b_parity_mutex);
- return tmp_ret;
+ return tmp_ret;
}
int com_a_write_data(const unsigned char *pData, unsigned int uLen)
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- pthread_mutex_lock(&serial_a_w_mutex);
+ pthread_mutex_lock(&serial_a_w_mutex);
- if (com_a_get_dev() < 0) {
- pthread_mutex_unlock(&serial_a_w_mutex);
- return -1;
- }
+ if (com_a_get_dev() < 0) {
+ pthread_mutex_unlock(&serial_a_w_mutex);
+ return -1;
+ }
- LOGD("%s, write %d bytes\n", "TV", uLen);
+ LOGD("%s, write %d bytes\n", "TV", uLen);
- tmp_ret = com_write_data(gSerialAHandle, pData, uLen);
+ tmp_ret = com_write_data(gSerialAHandle, pData, uLen);
- pthread_mutex_unlock(&serial_a_w_mutex);
+ pthread_mutex_unlock(&serial_a_w_mutex);
- return tmp_ret;
+ return tmp_ret;
}
int com_b_write_data(const unsigned char *pData, unsigned int uLen)
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- pthread_mutex_lock(&serial_b_w_mutex);
+ pthread_mutex_lock(&serial_b_w_mutex);
- if (com_b_get_dev() < 0) {
- pthread_mutex_unlock(&serial_b_w_mutex);
- return -1;
- }
+ if (com_b_get_dev() < 0) {
+ pthread_mutex_unlock(&serial_b_w_mutex);
+ return -1;
+ }
- LOGD("%s, write %d bytes\n", "TV", uLen);
+ LOGD("%s, write %d bytes\n", "TV", uLen);
- tmp_ret = com_write_data(gSerialBHandle, pData, uLen);
+ tmp_ret = com_write_data(gSerialBHandle, pData, uLen);
- pthread_mutex_unlock(&serial_b_w_mutex);
+ pthread_mutex_unlock(&serial_b_w_mutex);
- return tmp_ret;
+ return tmp_ret;
}
int com_a_read_data(char *pData, unsigned int uLen)
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- pthread_mutex_lock(&serial_a_r_mutex);
+ pthread_mutex_lock(&serial_a_r_mutex);
- if (com_a_get_dev() < 0) {
- pthread_mutex_unlock(&serial_a_r_mutex);
- return -1;
- }
+ if (com_a_get_dev() < 0) {
+ pthread_mutex_unlock(&serial_a_r_mutex);
+ return -1;
+ }
- tmp_ret = com_read_data(gSerialAHandle, pData, uLen);
+ tmp_ret = com_read_data(gSerialAHandle, pData, uLen);
- pthread_mutex_unlock(&serial_a_r_mutex);
+ pthread_mutex_unlock(&serial_a_r_mutex);
- return tmp_ret;
+ return tmp_ret;
}
int com_b_read_data(char *pData, unsigned int uLen)
{
- int tmp_ret = 0;
+ int tmp_ret = 0;
- pthread_mutex_lock(&serial_b_r_mutex);
+ pthread_mutex_lock(&serial_b_r_mutex);
- if (com_b_get_dev() < 0) {
- pthread_mutex_unlock(&serial_b_r_mutex);
- return -1;
- }
+ if (com_b_get_dev() < 0) {
+ pthread_mutex_unlock(&serial_b_r_mutex);
+ return -1;
+ }
- tmp_ret = com_read_data(gSerialBHandle, pData, uLen);
+ tmp_ret = com_read_data(gSerialBHandle, pData, uLen);
- pthread_mutex_unlock(&serial_b_r_mutex);
+ pthread_mutex_unlock(&serial_b_r_mutex);
- return tmp_ret;
+ return tmp_ret;
}
diff --git a/tvapi/libtv/tvutils/serial_base.h b/tvapi/libtv/tvutils/serial_base.h
index 145ca5a..a48939a 100644
--- a/tvapi/libtv/tvutils/serial_base.h
+++ b/tvapi/libtv/tvutils/serial_base.h
@@ -1,17 +1,17 @@
-#ifndef __SERIAL_BASE_H__
-#define __SERIAL_BASE_H__
-
-extern int com_a_open_dev();
-extern int com_b_open_dev();
-extern int com_a_close_dev();
-extern int com_b_close_dev();
-extern int com_a_get_dev();
-extern int com_b_get_dev();
-extern int com_a_set_opt(int speed, int db, int sb, int pb, int timeout, int raw_mode);
-extern int com_b_set_opt(int speed, int db, int sb, int pb, int timeout, int raw_mode);
-extern int com_a_write_data(const unsigned char *pData, unsigned int uLen);
-extern int com_b_write_data(const unsigned char *pData, unsigned int uLen);
-extern int com_a_read_data(char *pData, unsigned int uLen);
-extern int com_b_read_data(char *pData, unsigned int uLen);
-
-#endif//__SERIAL_BASE_H__
+#ifndef __SERIAL_BASE_H__
+#define __SERIAL_BASE_H__
+
+extern int com_a_open_dev();
+extern int com_b_open_dev();
+extern int com_a_close_dev();
+extern int com_b_close_dev();
+extern int com_a_get_dev();
+extern int com_b_get_dev();
+extern int com_a_set_opt(int speed, int db, int sb, int pb, int timeout, int raw_mode);
+extern int com_b_set_opt(int speed, int db, int sb, int pb, int timeout, int raw_mode);
+extern int com_a_write_data(const unsigned char *pData, unsigned int uLen);
+extern int com_b_write_data(const unsigned char *pData, unsigned int uLen);
+extern int com_a_read_data(char *pData, unsigned int uLen);
+extern int com_b_read_data(char *pData, unsigned int uLen);
+
+#endif//__SERIAL_BASE_H__
diff --git a/tvapi/libtv/tvutils/serial_operate.cpp b/tvapi/libtv/tvutils/serial_operate.cpp
index c81357e..aaf2426 100644
--- a/tvapi/libtv/tvutils/serial_operate.cpp
+++ b/tvapi/libtv/tvutils/serial_operate.cpp
@@ -51,179 +51,179 @@ CTv2d4GHeadSetDetect::~CTv2d4GHeadSetDetect()
int CTv2d4GHeadSetDetect::startDetect()
{
- this->run();
+ this->run();
- return 0;
+ return 0;
}
bool CTv2d4GHeadSetDetect::threadLoop()
{
- int i = 0, rd_len = 0;
- int thread_cmd_dly_tm = 1000 * 1000;
- int tvThermal_cnt = 0, fd = 0;
- char data[10] = "0";
-
- LOGD("%s, entering...\n", __FUNCTION__);
-
- //SetSerialBThreadExecFlag(1);
-
- //*********************************
- int hidraw_fd;
- unsigned char buf[32];
- char phybuf[256];
- struct hidraw_devinfo info;
- int read_size = 0;
- bool debug = true;
- char device[68];
- int HeadsetConnectState = false;
-
- int curdeviceID = -1;
- for (int deviceID = 0; deviceID < 5; deviceID++) {
- sprintf(device, "/dev/hidraw%d", deviceID);
- LOGD(" thread device =%s ", device );
- if ((hidraw_fd = open(device, O_RDWR)) < 0 ) {
- LOGD("cann't open path:%s!!!\n", device);
- continue;
- }
- memset(phybuf, 0x0, 256);
- LOGD("AAAAAAAAAAAAAA:%s!!!\n", device);
- if (ioctl(hidraw_fd, HIDIOCGRAWINFO, &info) >= 0 &&
- ioctl(hidraw_fd, HIDIOCGRAWPHYS(256), phybuf) >= 0) {
- LOGD("\t %d, product id = 0x%04x \n", __LINE__, info.product);
- LOGD("\t %d, vendor id = 0x%04x \n", __LINE__, info.vendor);
- int len = strlen(phybuf);
- if (phybuf[len - 1] - '0' == ENDPOINT) {
- if (info.vendor == vendor_id) {
- curdeviceID = deviceID;
- LOGD("\t product id = 0x%04x \n", info.product);
- LOGD("\t vendor id = 0x%04x\n", info.vendor);
- break;
- }
- }
- }
- close(hidraw_fd);
- }
- if (curdeviceID == -1)
- return 0;
-
- sprintf(device, "/dev/hidraw%d", curdeviceID);
- LOGD(" thread device =%s ", device );
- if ( (hidraw_fd = open(device, O_RDWR | O_NONBLOCK) ) < 0 ) {
- printf("cann't open path:%s!!!\n", device);
- return 0;
- }
- int checkvalue[300] ;
- int countcheck = 0;
- int count = 0;
- int ritemcounts = 15;
- //****************************************
-
- while ( !exitPending() ) { //requietexit() or requietexitWait() not call
- //loop codes
- //LOGD("while 2.4G %s ", __FUNCTION__);
-
- memset(buf, 0x0, 32);
- for (int ritem = 0; ritem < ritemcounts ; ritem++ ) {
- read_size = read(hidraw_fd, buf, 32);
- //for (int i = 0; i < 32; i++)
- //ALOGD("read_size %d ", read_size);
- if (debug) {
- count ++;
- if (count == 3000) {
- LOGD("%02x %02x %02x %02x %02x %02x ", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
- count = 0;
- }
- }
- if (read_size < 0 ) {
-
- }
-
- checkvalue[countcheck] = buf[4] & 0x1f;
- if (countcheck == 299) {
- int checkcountvalue = 0;
- for (int icheck = 0; icheck < countcheck ; icheck++ )
- checkcountvalue += checkvalue[icheck];
- // LOGD("checkcountvalue = %d",checkcountvalue);
- if (checkcountvalue <= 5 * 4) {
- if (HeadsetConnectState == true) {
- if (debug) {
- LOGD("headset connect false");
- LOGD("headset connect false");
- }
-
- mpObserver->onHeadSetDetect(0, 0);
- //usleep(1000 * 200);
- }
- HeadsetConnectState = false;
- } else if (checkcountvalue >= 200 * 4) {
- if (HeadsetConnectState == false) {
- if (debug) {
- LOGD("headset connect true");
- LOGD("headset connect true");
- }
- mpObserver->onHeadSetDetect(1, 0);
- //usleep(1000 * 200);
- }
- HeadsetConnectState = true;
- }
- countcheck = 0;
- }
- countcheck ++;
-
- // bit 0: headset mic in/off; bit 1:headset on/off; bit 2: headphone on/off; bit 3: soundbar on/off ;bit 4: subwoofer on/off
- /* else if (buf[4] & 0x1f)
- {
- if (HeadsetConnectState == false)
- {
- if (debug)
- {
- ALOGD("headset connect true");
- ALOGD("headset connect true");
- }
- android::TvService::getIntance()->SendDtvStats(1,0,0,0,0,0);
- //usleep(1000 * 200);
- }
- HeadsetConnectState = true;
- }
- else
- {
- if (HeadsetConnectState == true)
- {
- if (debug)
- {
- ALOGD("headset connect false");
- ALOGD("headset connect false");
- }
- android::TvService::getIntance()->SendDtvStats(2,0,0,0,0,0);
- //usleep(1000 * 200);
- }
- HeadsetConnectState = false;
- }*/
- }
- {
- //added for fbc thermal setting
- tvThermal_cnt++;
- if (tvThermal_cnt == 300) { //60 sec
- tvThermal_cnt = 0;
- fd = open("/sys/class/thermal/thermal_zone0/temp", O_RDONLY);
- if (fd < 0) {
- LOGE("ERROR: failed to open file error: %d\n", errno);
- } else {
- read(fd, data, sizeof(data));
- close(fd);
- LOGD("thermal temp data = %s ~~~~~~\n", data);
- int x = 0;
- x = atoi(data);
- mpObserver->onThermalDetect(x);
- LOGD("int data :%d\n", x);
- }
- }
- }
- usleep(1000 * 200);
- }
- //exit
- //return true, run again, return false,not run.
- return false;
+ int i = 0, rd_len = 0;
+ int thread_cmd_dly_tm = 1000 * 1000;
+ int tvThermal_cnt = 0, fd = 0;
+ char data[10] = "0";
+
+ LOGD("%s, entering...\n", __FUNCTION__);
+
+ //SetSerialBThreadExecFlag(1);
+
+ //*********************************
+ int hidraw_fd;
+ unsigned char buf[32];
+ char phybuf[256];
+ struct hidraw_devinfo info;
+ int read_size = 0;
+ bool debug = true;
+ char device[68];
+ int HeadsetConnectState = false;
+
+ int curdeviceID = -1;
+ for(int deviceID = 0; deviceID < 5; deviceID++) {
+ sprintf(device, "/dev/hidraw%d", deviceID);
+ LOGD(" thread device =%s ", device );
+ if ((hidraw_fd = open(device, O_RDWR)) < 0 ) {
+ LOGD("cann't open path:%s!!!\n", device);
+ continue;
+ }
+ memset(phybuf, 0x0, 256);
+ LOGD("AAAAAAAAAAAAAA:%s!!!\n", device);
+ if (ioctl(hidraw_fd, HIDIOCGRAWINFO, &info) >= 0 &&
+ ioctl(hidraw_fd, HIDIOCGRAWPHYS(256), phybuf) >= 0) {
+ LOGD("\t %d, product id = 0x%04x \n", __LINE__, info.product);
+ LOGD("\t %d, vendor id = 0x%04x \n", __LINE__, info.vendor);
+ int len = strlen(phybuf);
+ if (phybuf[len - 1] - '0' == ENDPOINT) {
+ if (info.vendor == vendor_id) {
+ curdeviceID = deviceID;
+ LOGD("\t product id = 0x%04x \n", info.product);
+ LOGD("\t vendor id = 0x%04x\n", info.vendor);
+ break;
+ }
+ }
+ }
+ close(hidraw_fd);
+ }
+ if(curdeviceID == -1)
+ return 0;
+
+ sprintf(device, "/dev/hidraw%d", curdeviceID);
+ LOGD(" thread device =%s ", device );
+ if( (hidraw_fd = open(device, O_RDWR | O_NONBLOCK) ) < 0 ) {
+ printf("cann't open path:%s!!!\n", device);
+ return 0;
+ }
+ int checkvalue[300] ;
+ int countcheck = 0;
+ int count = 0;
+ int ritemcounts = 15;
+ //****************************************
+
+ while ( !exitPending() ) { //requietexit() or requietexitWait() not call
+ //loop codes
+ //LOGD("while 2.4G %s ", __FUNCTION__);
+
+ memset(buf, 0x0, 32);
+ for(int ritem = 0; ritem < ritemcounts ; ritem++ ) {
+ read_size = read(hidraw_fd, buf, 32);
+ //for (int i = 0; i < 32; i++)
+ //ALOGD("read_size %d ", read_size);
+ if(debug) {
+ count ++;
+ if(count == 3000) {
+ LOGD("%02x %02x %02x %02x %02x %02x ", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
+ count = 0;
+ }
+ }
+ if (read_size < 0 ) {
+
+ }
+
+ checkvalue[countcheck] = buf[4] & 0x1f;
+ if(countcheck == 299) {
+ int checkcountvalue = 0;
+ for(int icheck = 0; icheck < countcheck ; icheck++ )
+ checkcountvalue += checkvalue[icheck];
+ // LOGD("checkcountvalue = %d",checkcountvalue);
+ if(checkcountvalue <= 5 * 4) {
+ if(HeadsetConnectState == true) {
+ if(debug) {
+ LOGD("headset connect false");
+ LOGD("headset connect false");
+ }
+
+ mpObserver->onHeadSetDetect(0, 0);
+ //usleep(1000 * 200);
+ }
+ HeadsetConnectState = false;
+ } else if(checkcountvalue >= 200 * 4) {
+ if(HeadsetConnectState == false) {
+ if(debug) {
+ LOGD("headset connect true");
+ LOGD("headset connect true");
+ }
+ mpObserver->onHeadSetDetect(1, 0);
+ //usleep(1000 * 200);
+ }
+ HeadsetConnectState = true;
+ }
+ countcheck = 0;
+ }
+ countcheck ++;
+
+ // bit 0: headset mic in/off; bit 1:headset on/off; bit 2: headphone on/off; bit 3: soundbar on/off ;bit 4: subwoofer on/off
+ /* else if (buf[4] & 0x1f)
+ {
+ if(HeadsetConnectState == false)
+ {
+ if(debug)
+ {
+ ALOGD("headset connect true");
+ ALOGD("headset connect true");
+ }
+ android::TvService::getIntance()->SendDtvStats(1,0,0,0,0,0);
+ //usleep(1000 * 200);
+ }
+ HeadsetConnectState = true;
+ }
+ else
+ {
+ if(HeadsetConnectState == true)
+ {
+ if(debug)
+ {
+ ALOGD("headset connect false");
+ ALOGD("headset connect false");
+ }
+ android::TvService::getIntance()->SendDtvStats(2,0,0,0,0,0);
+ //usleep(1000 * 200);
+ }
+ HeadsetConnectState = false;
+ }*/
+ }
+ {
+ //added for fbc thermal setting
+ tvThermal_cnt++;
+ if(tvThermal_cnt == 300) { //60 sec
+ tvThermal_cnt = 0;
+ fd = open("/sys/class/thermal/thermal_zone0/temp", O_RDONLY);
+ if(fd < 0) {
+ LOGE("ERROR: failed to open file error: %d\n", errno);
+ } else {
+ read(fd, data, sizeof(data));
+ close(fd);
+ LOGD("thermal temp data = %s ~~~~~~\n", data);
+ int x = 0;
+ x = atoi(data);
+ mpObserver->onThermalDetect(x);
+ LOGD("int data :%d\n", x);
+ }
+ }
+ }
+ usleep(1000 * 200);
+ }
+ //exit
+ //return true, run again, return false,not run.
+ return false;
}
diff --git a/tvapi/libtv/tvutils/serial_operate.h b/tvapi/libtv/tvutils/serial_operate.h
index ef9fad6..07e8a00 100644
--- a/tvapi/libtv/tvutils/serial_operate.h
+++ b/tvapi/libtv/tvutils/serial_operate.h
@@ -1,36 +1,36 @@
-#ifndef __SERIAL_OPERATE_H__
-#define __SERIAL_OPERATE_H__
-#include "tvutils/CThread.h"
-
-class CTv2d4GHeadSetDetect: public CThread
-{
-
-public:
- CTv2d4GHeadSetDetect();
- ~CTv2d4GHeadSetDetect();
-
- int startDetect();
-
- class IHeadSetObserver
- {
- public:
- IHeadSetObserver()
- {};
- virtual ~IHeadSetObserver()
- {};
- virtual void onHeadSetDetect(int state, int para) {};
- virtual void onThermalDetect(int state) {};
-
- };
- void setObserver ( IHeadSetObserver *pOb )
- {
- mpObserver = pOb;
- };
-
-private:
- bool threadLoop();
- IHeadSetObserver *mpObserver;
-
-};
-
-#endif//__SERIAL_OPERATE_H__
+#ifndef __SERIAL_OPERATE_H__
+#define __SERIAL_OPERATE_H__
+#include "tvutils/CThread.h"
+
+class CTv2d4GHeadSetDetect: public CThread {
+
+public:
+ CTv2d4GHeadSetDetect();
+ ~CTv2d4GHeadSetDetect();
+
+ int startDetect();
+
+ class IHeadSetObserver {
+ public:
+ IHeadSetObserver()
+ {
+ };
+ virtual ~IHeadSetObserver()
+ {
+ };
+ virtual void onHeadSetDetect(int state, int para) {};
+ virtual void onThermalDetect(int state) {};
+
+ };
+ void setObserver ( IHeadSetObserver *pOb )
+ {
+ mpObserver = pOb;
+ };
+
+private:
+ bool threadLoop();
+ IHeadSetObserver *mpObserver;
+
+};
+
+#endif//__SERIAL_OPERATE_H__
diff --git a/tvapi/libtv/tvutils/tvutils.cpp b/tvapi/libtv/tvutils/tvutils.cpp
index 157431d..43a3d19 100644
--- a/tvapi/libtv/tvutils/tvutils.cpp
+++ b/tvapi/libtv/tvutils/tvutils.cpp
@@ -1,1912 +1,1912 @@
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <sys/prctl.h>
-#include <stdlib.h>
-#include <android/log.h>
-#include <cutils/android_reboot.h>
-#include "../tvconfig/tvconfig.h"
-#include "../tvsetting/CTvSetting.h"
-#include "../audio/audio_api.h"
-#include "../tv/CFbcCommunication.h"
-#include <cutils/properties.h>
-#include <dirent.h>
-using namespace android;
-
-#include "tvutils.h"
-
-#define LOG_TAG "LibTvMISC"
-#include "CTvLog.h"
-
-#define CS_I2C_1_DEV_PATH "/dev/i2c-1"
-#define CS_I2C_2_DEV_PATH "/dev/i2c-2"
-
-/* number of times a device address should be polled when not acknowledging */
-#define I2C_RETRIES 0x0701
-
-/* set timeout in units of 10 ms */
-#define I2C_TIMEOUT 0x0702
-
-/* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses
- * are NOT supported! (due to code brokenness)
- */
-
-/* Use this slave address */
-#define I2C_SLAVE 0x0703
-
-/* Use this slave address, even if it is already in use by a driver! */
-#define I2C_SLAVE_FORCE 0x0706
-
-#define I2C_TENBIT 0x0704 /* 0 for 7 bit addrs, != 0 for 10 bit */
-#define I2C_FUNCS 0x0705 /* Get the adapter functionality mask */
-#define I2C_RDWR 0x0707 /* Combined R/W transfer (one STOP only) */
-#define I2C_PEC 0x0708 /* != 0 to use PEC with SMBus */
-#define I2C_SMBUS 0x0720 /* SMBus transfer */
-
-struct i2c_msg {
- unsigned short addr; /* slave address */
- unsigned short flags;
-#define I2C_M_TEN 0x0010 /* this is a ten bit chip address */
-#define I2C_M_WR 0x0000 /* write data, from master to slave */
-#define I2C_M_RD 0x0001 /* read data, from slave to master */
-#define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_PROTOCOL_MANGLING */
-#define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */
-#define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */
-#define I2C_M_NO_RD_ACK 0x0800 /* if I2C_FUNC_PROTOCOL_MANGLING */
-#define I2C_M_RECV_LEN 0x0400 /* length will be first received byte */
-
- unsigned short len; /* msg length */
- unsigned char *buf; /* pointer to msg data */
-};
-
-struct i2c_rdwr_ioctl_data {
- struct i2c_msg *msgs;
- unsigned int nmsgs;
-};
-
-static volatile int mDreamPanelResumeLastBLFlag = 0;
-static volatile int mDreamPanelDemoFlag = 0;
-
-static pthread_mutex_t dream_panel_resume_last_bl_flag_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t dream_panel_demo_flag_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t file_attr_control_flag_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-static pthread_t UserPet_ThreadId = 0;
-static unsigned char is_turnon_user_pet_thread = false;
-static unsigned char is_user_pet_thread_start = false;
-static unsigned int user_counter = 0;
-static unsigned int user_pet_terminal = 1;
-
-static int iw_duty = 0;
-
-static int Miscioctl(const char *file_path, int request, ...)
-{
- int fd = -1, tmp_ret = -1;
- int bus_status = 0;
- va_list ap;
- void *arg;
-
- if (file_path == NULL) {
- LOGE("%s, file path is NULL!!!\n", "TV");
- return -1;
- }
-
- fd = open(file_path, O_RDWR);
- if (fd < 0) {
- LOGE("%s, Open %s ERROR(%s)!!\n", "TV", file_path, strerror(errno));
- return -1;
- }
-
- va_start(ap, request);
- arg = va_arg(ap, void *);
- va_end(ap);
-
- tmp_ret = ioctl(fd, request, arg);
-
- close(fd);
- fd = -1;
-
- return tmp_ret;
-}
-
-int cfg_get_one_item(const char *key_str, const char *strDelimit, int item_index, char cfg_str[])
-{
- int cfg_item_ind = 0;
- char *token = NULL;
- const char *config_value;
- char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
-
- if (key_str == NULL) {
- LOGE("%s, key_str's pointer is NULL.\n", "TV");
- return -1;
- }
-
- if (cfg_str == NULL) {
- LOGE("%s, cfg_str's pointer is NULL.\n", "TV");
- return -1;
- }
-
- if (item_index < 0) {
- LOGE("%s, item_index can't be less than 0.\n", "TV");
- return -1;
- }
-
- config_value = config_get_str("TV", key_str, "null");
- if (strcasecmp(config_value, "null") == 0) {
- cfg_str[0] = '\0';
- LOGE("%s, can't get config \"%s\"!!!\n", "TV", key_str);
- return -1;
- }
-
- cfg_item_ind = 0;
-
- memset((void *)data_str, 0, sizeof(data_str));
- strncpy(data_str, config_value, sizeof(data_str) - 1);
-
- token = strtok(data_str, strDelimit);
- while (token != NULL) {
- if (cfg_item_ind == item_index) {
- strcpy(cfg_str, token);
- break;
- }
-
- token = strtok(NULL, strDelimit);
- cfg_item_ind += 1;
- }
-
- if (token == NULL) {
- cfg_str[0] = '\0';
- return -1;
- }
-
- return 0;
-}
-
-int cfg_split(char *line_data, char *strDelimit, int *item_cnt, char **item_bufs)
-{
- int i = 0, tmp_cnt = 0;
- char *token = NULL;
-
- if (line_data == NULL) {
- LOGE("%s, line_data is NULL", "TV");
- return -1;
- }
-
- if (strDelimit == NULL) {
- LOGE("%s, strDelimit is NULL", "TV");
- return -1;
- }
-
- if (item_cnt == NULL) {
- LOGE("%s, item_cnt is NULL", "TV");
- return -1;
- }
-
- if (item_bufs == NULL) {
- LOGE("%s, item_bufs is NULL", "TV");
- return -1;
- }
-
- for (i = 0; i < *item_cnt; i++) {
- item_bufs[i] = NULL;
- }
-
- token = strtok(line_data, strDelimit);
-
- while (token != NULL) {
- item_bufs[tmp_cnt] = token;
-
- token = strtok(NULL, strDelimit);
-
- tmp_cnt += 1;
- if (tmp_cnt >= *item_cnt) {
- break;
- }
- }
-
- *item_cnt = tmp_cnt;
-
- return 0;
-}
-
-int ReadADCSpecialChannelValue(int adc_channel_num)
-{
- FILE *fp = NULL;
- int rd_data = 0;
- char ch_sysfs_path[256] = { 0 };
-
- if (adc_channel_num < CC_MIN_ADC_CHANNEL_VAL || adc_channel_num > CC_MAX_ADC_CHANNEL_VAL) {
- LOGD("adc channel num must between %d and %d.", CC_MIN_ADC_CHANNEL_VAL, CC_MAX_ADC_CHANNEL_VAL);
- return 0;
- }
-
- sprintf(ch_sysfs_path, "/sys/class/saradc/saradc_ch%d", adc_channel_num);
-
- fp = fopen(ch_sysfs_path, "r");
-
- if (fp == NULL) {
- LOGE("open %s ERROR(%s)!!\n", ch_sysfs_path, strerror(errno));
- return 0;
- }
-
- fscanf(fp, "%d", &rd_data);
-
- fclose(fp);
-
- return rd_data;
-}
-
-int Tv_MiscRegs(const char *cmd)
-{
- //#ifdef BRING_UP_DEBUG
- FILE *fp = NULL;
- fp = fopen("/sys/class/register/reg", "w");
-
- if (fp != NULL && cmd != NULL) {
- fprintf(fp, "%s", cmd);
- } else {
- LOGE("Open /sys/class/register/reg ERROR(%s)!!\n", strerror(errno));
- fclose(fp);
- return -1;
- }
- fclose(fp);
- //#endif
-
- return 0;
-}
-
-int TvMisc_SetUserCounterTimeOut(int timeout)
-{
- FILE *fp;
-
- fp = fopen("/sys/devices/platform/aml_wdt/user_pet_timeout", "w");
-
- if (fp != NULL) {
- fprintf(fp, "%d", timeout);
- fclose(fp);
- } else {
- LOGE("=OSD CPP=> open /sys/devices/platform/aml_wdt/user_pet_timeout ERROR(%s)!!\n", strerror(errno));
- return -1;
- }
- return 0;
-}
-
-int TvMisc_SetUserCounter(int count)
-{
- FILE *fp;
-
- fp = fopen("/sys/module/aml_wdt/parameters/user_pet", "w");
-
- if (fp != NULL) {
- fprintf(fp, "%d", count);
- fclose(fp);
- } else {
- LOGE("=OSD CPP=> open /sys/devices/platform/aml_wdt/user_pet ERROR(%s)!!\n", strerror(errno));
- return -1;
- }
-
- fclose(fp);
-
- return 0;
-}
-
-int TvMisc_SetUserPetResetEnable(int enable)
-{
- FILE *fp;
-
- fp = fopen("/sys/module/aml_wdt/parameters/user_pet_reset_enable", "w");
-
- if (fp != NULL) {
- fprintf(fp, "%d", enable);
- fclose(fp);
- } else {
- LOGE("=OSD CPP=> open /sys/devices/platform/aml_wdt/user_pet_reset_enable ERROR(%s)!!\n", strerror(errno));
- return -1;
- }
-
- fclose(fp);
-
- return 0;
-}
-
-int TvMisc_SetSystemPetResetEnable(int enable)
-{
- FILE *fp;
-
- fp = fopen("/sys/devices/platform/aml_wdt/reset_enable", "w");
-
- if (fp != NULL) {
- fprintf(fp, "%d", enable);
- fclose(fp);
- } else {
- LOGE("=OSD CPP=> open /sys/devices/platform/aml_wdt/reset_enable ERROR(%s)!!\n", strerror(errno));
- return -1;
- }
-
- fclose(fp);
-
- return 0;
-}
-
-int TvMisc_SetSystemPetEnable(int enable)
-{
- FILE *fp;
-
- fp = fopen("/sys/devices/platform/aml_wdt/ping_enable", "w");
-
- if (fp != NULL) {
- fprintf(fp, "%d", enable);
- fclose(fp);
- } else {
- LOGE("=OSD CPP=> open /sys/devices/platform/aml_wdt/ping_enable ERROR(%s)!!\n", strerror(errno));
- return -1;
- }
-
- fclose(fp);
-
- return 0;
-}
-
-int TvMisc_SetSystemPetCounterTimeOut(int timeout)
-{
- FILE *fp;
-
- fp = fopen("/sys/devices/platform/aml_wdt/wdt_timeout", "w");
-
- if (fp != NULL) {
- fprintf(fp, "%d", timeout);
- fclose(fp);
- } else {
- LOGE("=OSD CPP=> open /sys/devices/platform/aml_wdt/wdt_timeout ERROR(%s)!!\n", strerror(errno));
- return -1;
- }
-
- fclose(fp);
-
- return 0;
-}
-
-#define MEMERASE _IOW('M', 2, struct erase_info_user)
-static int memerase(int fd, struct erase_info_user *erase)
-{
- return (ioctl (fd, MEMERASE, erase));
-}
-
-#define CS_ATV_SOCKET_FILE_NAME "/dev/socket/datv_sock"
-
-static int setServer(const char *fileName)
-{
- int ret = -1, sock = -1;
- struct sockaddr_un srv_addr;
-
- sock = socket(PF_UNIX, SOCK_STREAM, 0);
- if (sock < 0) {
- LOGE("%s, socket create failed (errno = %d: %s).\n", "TV", errno, strerror(errno));
- return -1;
- }
-
- //set server addr_param
- srv_addr.sun_family = AF_UNIX;
- strncpy(srv_addr.sun_path, CS_ATV_SOCKET_FILE_NAME, sizeof(srv_addr.sun_path) - 1);
- unlink(CS_ATV_SOCKET_FILE_NAME);
-
- //bind sockfd & addr
- ret = bind(sock, (struct sockaddr *) &srv_addr, sizeof(srv_addr));
- if (ret == -1) {
- LOGE("%s, cannot bind server socket.\n", "TV");
- close(sock);
- unlink(CS_ATV_SOCKET_FILE_NAME);
- return -1;
- }
-
- //listen sockfd
- ret = listen(sock, 1);
- if (ret == -1) {
- LOGE("%s, cannot listen the client connect request.\n", "TV");
- close(sock);
- unlink(CS_ATV_SOCKET_FILE_NAME);
- return -1;
- }
-
- return sock;
-}
-
-static int acceptMessage(int listen_fd)
-{
- int ret, com_fd;
- socklen_t len;
- struct sockaddr_un clt_addr;
-
- //have connect request use accept
- len = sizeof(clt_addr);
- com_fd = accept(listen_fd, (struct sockaddr *) &clt_addr, &len);
- if (com_fd < 0) {
- LOGE("%s, cannot accept client connect request.\n", "TV");
- close(listen_fd);
- unlink(CS_ATV_SOCKET_FILE_NAME);
- return -1;
- }
-
- LOGD("%s, com_fd = %d\n", "TV", com_fd);
-
- return com_fd;
-}
-
-static int parse_socket_message(char *msg_str, int *para_cnt, int para_buf[])
-{
- int para_count = 0, set_mode = 0;
- char *token = NULL;
-
- set_mode = -1;
-
- token = strtok(msg_str, ",");
- if (token != NULL) {
- if (strcasecmp(token, "quit") == 0) {
- set_mode = 0;
- } else if (strcasecmp(token, "SetAudioVolumeCompensationVal") == 0) {
- set_mode = 1;
- } else if (strcasecmp(token, "set3dmode") == 0) {
- set_mode = 2;
- } else if (strcasecmp(token, "setdisplaymode") == 0) {
- set_mode = 3;
- }
- }
-
- if (set_mode != 1 && set_mode != 2 && set_mode != 3) {
- return set_mode;
- }
-
- para_count = 0;
-
- token = strtok(NULL, ",");
- while (token != NULL) {
- para_buf[para_count] = strtol(token, NULL, 10);
- para_count += 1;
-
- token = strtok(NULL, ",");
- }
-
- *para_cnt = para_count;
-
- return set_mode;
-}
-
-/*static void* socket_thread_entry(void *arg)
-{
- int ret = 0, listen_fd = -1, com_fd = -1, rd_len = 0;
- int para_count = 0, set_mode = 0;
- int tmp_val = 0;
- int para_buf[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
- static char recv_buf[1024];
-
- listen_fd = setServer(CS_ATV_SOCKET_FILE_NAME);
- chmod(CS_ATV_SOCKET_FILE_NAME, 0666);
- prctl(PR_SET_NAME, (unsigned long) "datv.sock.thread");
-
- if (listen_fd < 0) {
- return NULL;
- }
-
- while (1) {
- com_fd = acceptMessage(listen_fd);
-
- if (com_fd >= 0) {
- //read message from client
- memset((void *) recv_buf, 0, sizeof(recv_buf));
- rd_len = read(com_fd, recv_buf, sizeof(recv_buf));
- LOGD("%s, message from client (%d)) : %s\n", "TV", rd_len, recv_buf);
-
- set_mode = parse_socket_message(recv_buf, &para_count, para_buf);
- if (set_mode == 0) {
- LOGD("%s, receive quit message, starting to quit.\n", "TV");
- sprintf(recv_buf, "%s", "quiting now...");
- write(com_fd, recv_buf, strlen(recv_buf) + 1);
- break;
- } else if (set_mode == 1) {
- ret = -1;
-
- if (para_count == 1) {
- LOGD("%s, SetAudioVolumeCompensationVal value = %d\n", "TV", para_buf[0]);
-
- ret = SetAudioVolumeCompensationVal(para_buf[0]);
- } else if (para_count == 2) {
- LOGD("%s, SetAudioVolumeCompensationVal value = %d, type = %d\n", "TV", para_buf[0], para_buf[1]);
-
- ret = SetAudioVolumeCompensationVal(para_buf[0]);
-
- if (para_buf[1] == 1) {
- tmp_val = GetAudioMasterVolume();
- ret |= SetAudioMasterVolume(tmp_val);
- }
- }
-
- sprintf(recv_buf, "%d", ret);
- write(com_fd, recv_buf, strlen(recv_buf) + 1);
- } else if (set_mode == 2) {
- ret = -1;
-
- if (para_count == 1) {
- LOGE("%s, mode = %d ------->\n", "TV", para_buf[0]);
-
- switch (para_buf[0]) {
- case 4: //BT
- ret = Tvin_Set3DFunction(MODE3D_BT);
- break;
- case 5: //LR
- ret = Tvin_Set3DFunction(MODE3D_LR);
- break;
- case 8: //
- ret = Tvin_Set3DFunction(MODE3D_DISABLE);
- break;
- case 0:
- ret = Tvin_Set3DFunction(MODE3D_DISABLE);
- break;
- case 9: //
- ret = Tvin_Set3DFunction(MODE3D_L_3D_TO_2D);
- break;
- }
- if (ret == 0) {
- LOGE("%s, sk_hdi_av_set_3d_mode return sucess.\n", "TV");
- } else {
- LOGE("%s, sk_hdi_av_set_3d_mode return error(%d).\n", "TV", ret);
- }
- }
-
- sprintf(recv_buf, "%d", ret);
- write(com_fd, recv_buf, strlen(recv_buf) + 1);
-
- }
-
- close(com_fd);
- com_fd = -1;
- }
- }
-
- if (com_fd >= 0) {
- close(com_fd);
- com_fd = -1;
- }
-
- if (listen_fd >= 0) {
- close(listen_fd);
- listen_fd = -1;
- }
-
- unlink(CS_ATV_SOCKET_FILE_NAME);
-
- return NULL;
-}*/
-
-#if !defined(SUN_LEN)
-#define SUN_LEN(su) (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
-#endif
-
-static int connectToServer(char *file_name)
-{
- int tmp_ret = 0, sock = -1;
- struct sockaddr_un addr;
-
- if (file_name == NULL) {
- LOGE("%s, file name is NULL\n", "TV");
- return -1;
- }
-
- sock = socket(AF_UNIX, SOCK_STREAM, 0);
- if (sock < 0) {
- LOGE("%s, socket create failed (errno = %d: %s)\n", "TV", errno, strerror(errno));
- return -1;
- }
-
- /* connect to socket; fails if file doesn't exist */
- strcpy(addr.sun_path, file_name); // max 108 bytes
- addr.sun_family = AF_UNIX;
- tmp_ret = connect(sock, (struct sockaddr *) &addr, SUN_LEN(&addr));
- if (tmp_ret < 0) {
- // ENOENT means socket file doesn't exist
- // ECONNREFUSED means socket exists but nobody is listening
- LOGE("%s, AF_UNIX connect failed for '%s': %s\n", "TV", file_name, strerror(errno));
- close(sock);
- return -1;
- }
-
- return sock;
-}
-
-static int realSendSocketMsg(char *file_name, char *msg_str, char recv_buf[])
-{
- int sock = -1, rd_len = 0;
- char tmp_buf[1024];
-
- if (file_name == NULL) {
- LOGE("%s, file name is NULL\n", "TV");
- return -1;
- }
-
- if (msg_str == NULL) {
- LOGE("%s, msg string is NULL\n", "TV");
- return -1;
- }
-
- LOGD("%s, message to server (%d)) : %s\n", "TV", strlen(msg_str), msg_str);
-
- sock = connectToServer(file_name);
-
- if (sock >= 0) {
- write(sock, msg_str, strlen(msg_str) + 1);
-
- if (recv_buf == NULL) {
- memset((void *) tmp_buf, 0, sizeof(tmp_buf));
- rd_len = read(sock, tmp_buf, sizeof(tmp_buf));
- LOGD("%s, message from server (%d)) : %s\n", "TV", rd_len, tmp_buf);
- } else {
- rd_len = read(sock, recv_buf, 1024);
- LOGD("%s, message from server (%d)) : %s\n", "TV", rd_len, recv_buf);
- }
-
- close(sock);
- sock = -1;
-
- return 0;
- }
-
- return -1;
-}
-
-int I2C_WriteNbyte(int i2c_no, int dev_addr, int slave_addr, int len, unsigned char data_buf[])
-{
- int tmp_ret = 0;
- struct i2c_rdwr_ioctl_data ctl_data;
- struct i2c_msg msg;
- unsigned char msg_buf[52];
- int device_fd = -1;
-
- memset((void *) msg_buf, 0, 52);
-
- msg_buf[0] = (unsigned char) (slave_addr >> 8);
- msg_buf[1] = (unsigned char) (slave_addr & 0x00ff);
-
- if (data_buf == NULL) {
- return -1;
- }
-
- if (len < 50) {
- memcpy((void *) &msg_buf[2], data_buf, len);
- } else {
- LOGE("I2C_WriteNbyte len(%d) > 50, error!\n", len);
- return -1;
- }
-
- msg.addr = dev_addr;
- msg.flags = I2C_M_WR;
- msg.len = 2 + len;
- msg.buf = msg_buf;
- ctl_data.nmsgs = 1;
- ctl_data.msgs = &msg;
-
- if (i2c_no == 1) {
- device_fd = open(CS_I2C_1_DEV_PATH, O_RDWR);
- if (device_fd < 0) {
- LOGE("%s, Open device file %S error: %s.\n", "TV", CS_I2C_1_DEV_PATH, strerror(errno));
- return -1;
- }
- } else if (i2c_no == 2) {
- device_fd = open(CS_I2C_2_DEV_PATH, O_RDWR);
- if (device_fd < 0) {
- LOGE("%s, Open device file %S error: %s.\n", "TV", CS_I2C_2_DEV_PATH, strerror(errno));
- return -1;
- }
- } else {
- LOGE("%s, invalid i2c no (%d).\n", "TV", i2c_no);
- return -1;
- }
-
- tmp_ret = ioctl(device_fd, I2C_RDWR, &ctl_data);
-
- usleep(10 * 1000);
- if (device_fd >= 0) {
- close(device_fd);
- device_fd = -1;
- }
- return tmp_ret;
-}
-
-int I2C_ReadNbyte(int i2c_no, int dev_addr, int slave_addr, int len, unsigned char data_buf[])
-{
- int tmp_ret = 0;
- struct i2c_rdwr_ioctl_data ctl_data;
- struct i2c_msg msg;
- unsigned char msg_buf[52];
- int device_fd = -1;
-
- memset((void *) msg_buf, 0, 52);
-
- if (data_buf == NULL) {
- return -1;
- }
-
- if (len < 50) {
- memcpy((void *) &msg_buf[2], data_buf, len);
- } else {
- LOGE("I2C_WriteNbyte len(%d) > 50, error!\n", len);
- return -1;
- }
-
- msg_buf[0] = (unsigned char) (slave_addr >> 8);
- msg_buf[1] = (unsigned char) (slave_addr & 0x00ff);
- msg.addr = dev_addr;
- msg.flags = I2C_M_WR;
- msg.len = 2;
- msg.buf = msg_buf;
- ctl_data.nmsgs = 1;
- ctl_data.msgs = &msg;
-
- if (i2c_no == 1) {
- device_fd = open(CS_I2C_1_DEV_PATH, O_RDWR);
- if (device_fd < 0) {
- LOGE("%s, Open device file %S error: %s.\n", "TV", CS_I2C_1_DEV_PATH, strerror(errno));
- return -1;
- }
- } else if (i2c_no == 2) {
- device_fd = open(CS_I2C_2_DEV_PATH, O_RDWR);
- if (device_fd < 0) {
- LOGE("%s, Open device file %S error: %s.\n", "TV", CS_I2C_2_DEV_PATH, strerror(errno));
- return -1;
- }
- } else {
- LOGE("%s, invalid i2c no (%d).\n", "TV", i2c_no);
- return -1;
- }
-
- tmp_ret = ioctl(device_fd, I2C_RDWR, &ctl_data);
-
- msg.addr = dev_addr;
- msg.flags |= I2C_M_RD;
- msg.len = len;
- msg.buf = data_buf;
- ctl_data.nmsgs = 1;
- ctl_data.msgs = &msg;
-
- tmp_ret = ioctl(device_fd, I2C_RDWR, &ctl_data);
-
- usleep(10 * 1000);
-
- if (device_fd >= 0) {
- close(device_fd);
- device_fd = -1;
- }
- return tmp_ret;
-}
-
-int SetFileAttrValue(const char *fp, const char value[])
-{
- int fd = -1, ret = -1;
-
- pthread_mutex_lock(&file_attr_control_flag_mutex);
-
- fd = open(fp, O_RDWR);
-
- if (fd < 0) {
- LOGE("open %s ERROR(%s)!!\n", fp, strerror(errno));
- pthread_mutex_unlock(&file_attr_control_flag_mutex);
- return -1;
- }
-
- ret = write(fd, value, strlen(value));
- close(fd);
-
- pthread_mutex_unlock(&file_attr_control_flag_mutex);
- return ret;
-}
-
-int GetFileAttrIntValue(const char *fp)
-{
- int fd = -1, ret = -1;
- int temp = -1;
- char temp_str[32];
-
- memset(temp_str, 0, 32);
-
- fd = open(fp, O_RDWR);
-
- if (fd <= 0) {
- LOGE("open %s ERROR(%s)!!\n", fp, strerror(errno));
- return -1;
- }
-
- if (read(fd, temp_str, sizeof(temp_str)) > 0) {
- if (sscanf(temp_str, "%d", &temp) >= 0) {
- LOGD("%s -> get %s value =%d!\n", "TV", fp, temp);
- close(fd);
- return temp;
- } else {
- LOGE("%s -> get %s value error(%s)\n", "TV", fp, strerror(errno));
- close(fd);
- return -1;
- }
- }
-
- close(fd);
- return -1;
-}
-
-int *GetFileAttrIntValueStr(const char *fp)
-{
- int fd = -1, ret = -1;
- static int temp[4];
- char temp_str[32];
- int i = 0;
- char *p = NULL;
-
- memset(temp_str, 0, 32);
-
- fd = open(fp, O_RDWR);
-
- if (fd <= 0) {
- LOGE("open %s ERROR(%s)!!\n", fp, strerror(errno));
- return NULL;
- }
-
- if (read(fd, temp_str, sizeof(temp_str)) > 0) {
- LOGD("%s,temp_str = %s\n", "TV", temp_str);
- p = strtok(temp_str, " ");
- while (p != NULL) {
- sscanf(p, "%d", &temp[i]);
- p = strtok(NULL, " ");
- i = i + 1;
- }
- close(fd);
- return temp;
- }
-
- close(fd);
- return NULL;
-}
-
-int Get_Fixed_NonStandard(void)
-{
- return GetFileAttrIntValue("/sys/module/tvin_afe/parameters/force_nostd");
-}
-
-//0-turn off
-//1-force non-standard
-//2-force normal
-int Set_Fixed_NonStandard(int value)
-{
- int fd = -1, ret = -1;
- char set_vale[32];
- memset(set_vale, '\0', 32);
-
- sprintf(set_vale, "%d", value);
-
- fd = open("/sys/module/tvin_afe/parameters/force_nostd", O_RDWR);
-
- if (fd >= 0) {
- ret = write(fd, set_vale, strlen(set_vale));
- }
-
- if (ret <= 0) {
- LOGE("%s -> set /sys/module/tvin_afe/parameters/force_nostd error(%s)!\n", "TV", strerror(errno));
- }
-
- close(fd);
-
- return ret;
-}
-
-static void *UserPet_TreadRun(void *data)
-{
- while (is_turnon_user_pet_thread == true) {
- if (is_user_pet_thread_start == true) {
- usleep(1000 * 1000);
- if (++user_counter == 0xffffffff)
- user_counter = 1;
- TvMisc_SetUserCounter(user_counter);
- } else {
- usleep(10000 * 1000);
- }
- }
- if (user_pet_terminal == 1) {
- user_counter = 0;
- } else {
- user_counter = 1;
- }
- TvMisc_SetUserCounter(user_counter);
- return ((void *) 0);
-}
-
-static int UserPet_CreateThread(void)
-{
- int ret = 0;
- pthread_attr_t attr;
- struct sched_param param;
-
- is_turnon_user_pet_thread = true;
- is_user_pet_thread_start = true;
-
- pthread_attr_init(&attr);
- pthread_attr_setschedpolicy(&attr, SCHED_RR);
- param.sched_priority = 1;
- pthread_attr_setschedparam(&attr, &param);
- ret = pthread_create(&UserPet_ThreadId, &attr, &UserPet_TreadRun, NULL);
- pthread_attr_destroy(&attr);
- return ret;
-}
-
-static void UserPet_KillThread(void)
-{
- int i = 0, dly = 600;
- is_turnon_user_pet_thread = false;
- is_user_pet_thread_start = false;
- for (i = 0; i < 2; i++) {
- usleep(dly * 1000);
- }
- pthread_join(UserPet_ThreadId, NULL);
- UserPet_ThreadId = 0;
- LOGD("%s, done.", "TV");
-}
-
-void TvMisc_EnableWDT(bool kernelpet_disable, unsigned int userpet_enable, unsigned int kernelpet_timeout, unsigned int userpet_timeout, unsigned int userpet_reset)
-{
- TvMisc_SetSystemPetCounterTimeOut(kernelpet_timeout);
- TvMisc_SetSystemPetEnable(1);
- if (kernelpet_disable) {
- TvMisc_SetSystemPetResetEnable(0);
- } else {
- TvMisc_SetSystemPetResetEnable(1);
- }
- if (userpet_enable) {
- TvMisc_SetUserCounterTimeOut(userpet_timeout);
- TvMisc_SetUserPetResetEnable(userpet_reset);
- UserPet_CreateThread();
- } else {
- TvMisc_SetUserCounter(0);
- TvMisc_SetUserPetResetEnable(0);
- }
-}
-
-void TvMisc_DisableWDT(unsigned int userpet_enable)
-{
- if (userpet_enable) {
- user_pet_terminal = 0;
- UserPet_KillThread();
- }
-}
-
-static int get_hardware_info(char *hardware, unsigned int *revision)
-{
- char data[1024];
- int fd, n;
- char *x, *hw, *rev;
-
- fd = open("/proc/cpuinfo", O_RDONLY);
- if (fd < 0) {
- return -1;
- }
-
- n = read(fd, data, 1023);
- close(fd);
- if (n < 0) {
- return -1;
- }
-
- data[n] = 0;
-
- if (hardware != NULL) {
- hw = strstr(data, "\nHardware");
-
- if (hw) {
- x = strstr(hw, ": ");
- if (x) {
- x += 2;
- n = 0;
- while (*x && *x != '\n' && !isspace(*x)) {
- hardware[n++] = tolower(*x);
- x++;
- if (n == 31) {
- break;
- }
- }
-
- hardware[n] = 0;
- }
- }
- }
-
- if (revision != NULL) {
- rev = strstr(data, "\nRevision");
-
- if (rev) {
- x = strstr(rev, ": ");
- if (x) {
- *revision = strtoul(x + 2, 0, 16);
- }
- }
- }
-
- return 0;
-}
-
-int get_hardware_name(char *hardware)
-{
- int tmp_ret = 0;
-
- if (hardware == NULL) {
- return -1;
- }
-
- tmp_ret = get_hardware_info(hardware, NULL);
- if (tmp_ret < 0) {
- hardware[0] = '\0';
- }
-
- return 0;
-}
-
-/*---------------delete dir---------------*/
-int TvMisc_DeleteDirFiles(const char *strPath, int flag)
-{
- int status;
- char tmp[256];
- switch (flag) {
- case 0:
- sprintf(tmp, "rm -f %s", strPath);
- LOGE("%s", tmp);
- system(tmp);
- break;
- case 1:
- sprintf(tmp, "cd %s", strPath);
- LOGE("%s", tmp);
- status = system(tmp);
- if (status > 0 || status < 0)
- return -1;
- sprintf(tmp, "cd %s;rm -rf *", strPath);
- system(tmp);
- LOGE("%s", tmp);
- break;
- case 2:
- sprintf(tmp, "rm -rf %s", strPath);
- LOGE("%s", tmp);
- system(tmp);
- break;
- }
- return 0;
-}
-/*---------------delete dir end-----------*/
-
-#ifndef NELEM
-# define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0])))
-#endif
-
-
-int Tv_Utils_CheckFs(void)
-{
- FILE *f;
- char mount_dev[256];
- char mount_dir[256];
- char mount_type[256];
- char mount_opts[256];
- int mount_freq;
- int mount_passno;
- int match;
- int found_ro_fs = 0;
- int data_status = 0;
- int cache_status = 0;
- int atv_status = 0;
- int dtv_status = 0;
- int param_status = 0;
- int cool_reboot = 0;
- int recovery_reboot = 0;
-
- f = fopen("/proc/mounts", "r");
- if (! f) {
- /* If we can't read /proc/mounts, just give up */
- return 1;
- }
-
- do {
- match = fscanf(f, "%255s %255s %255s %255s %d %d\n",
- mount_dev, mount_dir, mount_type,
- mount_opts, &mount_freq, &mount_passno);
- mount_dev[255] = 0;
- mount_dir[255] = 0;
- mount_type[255] = 0;
- mount_opts[255] = 0;
- if ((match == 6) && (!strncmp(mount_dev, "/dev/block", 10))) {
- LOGD("%s, %s %s %s %s %d %d!", "TV", mount_dev, mount_dir, mount_type, mount_opts, mount_freq, mount_passno);
- if (!strncmp(mount_dir, "/param", 6)) {
- param_status |= 0x01;
- } else if (!strncmp(mount_dir, "/atv", 4)) {
- atv_status |= 0x01;
- } else if (!strncmp(mount_dir, "/dtv", 4)) {
- dtv_status |= 0x01;
- } else if (!strncmp(mount_dir, "/data", 5)) {
- data_status |= 0x01;
- } else if (!strncmp(mount_dir, "/cache", 6)) {
- cache_status |= 0x01;
- }
- if (strstr(mount_opts, "ro")) {
- found_ro_fs += 1;
- if (!strncmp(mount_dir, "/param", 6)) {
- param_status |= 0x02;
- } else if (!strncmp(mount_dir, "/atv", 4)) {
- atv_status |= 0x02;
- } else if (!strncmp(mount_dir, "/dtv", 4)) {
- dtv_status |= 0x02;
- } else if (!strncmp(mount_dir, "/data", 5)) {
- data_status |= 0x02;
- } else if (!strncmp(mount_dir, "/cache", 6)) {
- cache_status |= 0x02;
- }
- }
- }
- } while (match != EOF);
-
- fclose(f);
-
- switch (param_status) {
- case 0x03:
- LOGW("%s, param partition is read-only!", "TV");
- break;
- case 0x00:
- LOGW("%s, param partition can not be mounted!", "TV");
- break;
- default:
- break;
- }
- switch (atv_status) {
- case 0x03:
- LOGW("%s, atv partition is read-only!", "TV");
- cool_reboot = 1;
- //android_reboot(ANDROID_RB_RESTART2, 0, "cool_reboot");
- break;
- case 0x00:
- LOGW("%s, atv partition can not be mounted!", "TV");
- recovery_reboot = 1;
- //android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
- default:
- break;
- }
- switch (dtv_status) {
- case 0x03:
- LOGW("%s, dtv partition is read-only!", "TV");
- //android_reboot(ANDROID_RB_RESTART2, 0, "cool_reboot");
- break;
- case 0x00:
- LOGW("%s, dtv partition can not be mounted!", "TV");
- //android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
- default:
- break;
- }
- switch (data_status) {
- case 0x03:
- LOGW("%s, data partition is read-only!", "TV");
- cool_reboot = 1;
- //android_reboot(ANDROID_RB_RESTART2, 0, "cool_reboot");
- break;
- case 0x00:
- LOGW("%s, data partition can not be mounted!", "TV");
- recovery_reboot = 1;
- //android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
- break;
- default:
- break;
- }
- switch (cache_status) {
- case 0x03:
- LOGW("%s, cache partition is read-only!", "TV");
- cool_reboot = 1;
- //android_reboot(ANDROID_RB_RESTART2, 0, "cool_reboot");
- break;
- case 0x00:
- LOGW("%s, cache partition can not be mounted!", "TV");
- recovery_reboot = 1;
- //android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
- break;
- default:
- break;
- }
- if (cool_reboot == 1) {
- android_reboot(ANDROID_RB_RESTART2, 0, "cool_reboot");
- }
- if (recovery_reboot == 1) {
- android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
- }
- return found_ro_fs;
-}
-
-
-int Tv_Utils_SetFileAttrStr(const char *file_path, char val_str_buf[])
-{
- FILE *tmpfp = NULL;
-
- tmpfp = fopen(file_path, "w");
- if (tmpfp == NULL) {
- LOGE("%s, write open file %s error(%s)!!!\n", "TV", file_path, strerror(errno));
- return -1;
- }
-
- fputs(val_str_buf, tmpfp);
-
- fclose(tmpfp);
- tmpfp = NULL;
-
- return 0;
-}
-
-int Tv_Utils_GetFileAttrStr(const char *file_path, int buf_size, char val_str_buf[])
-{
- FILE *tmpfp = NULL;
-
- tmpfp = fopen(file_path, "r");
- if (tmpfp == NULL) {
- LOGE("%s, read open file %s error(%s)!!!\n", "TV", file_path, strerror(errno));
- val_str_buf[0] = '\0';
- return -1;
- }
-
- fgets(val_str_buf, buf_size, tmpfp);
-
- fclose(tmpfp);
- tmpfp = NULL;
-
- return 0;
-}
-
-
-int Tv_Utils_IsFileExist(const char *file_name)
-{
- struct stat tmp_st;
-
- return stat(file_name, &tmp_st);
-}
-
-#define CC_EDID_SIZE (256)
-#define CS_VGA_EDID_BUF_DATA_CFG_NAME "ssm.vga.edidbuf.data"
-/*
-static unsigned char customer_edid_buf[CC_EDID_SIZE + 4];
-
-static unsigned char mDefHDMIEdidBuf[CC_EDID_SIZE] = {
- //256 bytes
- 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x4d, 0x79, 0x02, 0x2c, 0x01, 0x01, 0x01, 0x01, //0x00~0x0F
- 0x01, 0x15, 0x01, 0x03, 0x80, 0x85, 0x4b, 0x78, 0x0a, 0x0d, 0xc9, 0xa0, 0x57, 0x47, 0x98, 0x27, //0x10~0x1F
- 0x12, 0x48, 0x4c, 0x21, 0x08, 0x00, 0x81, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x20~0x2F
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x3a, 0x80, 0x18, 0x71, 0x38, 0x2d, 0x40, 0x58, 0x2c, //0x30~0x3F
- 0x45, 0x00, 0x30, 0xeb, 0x52, 0x00, 0x00, 0x1e, 0x01, 0x1d, 0x00, 0x72, 0x51, 0xd0, 0x1e, 0x20, //0x40~0x4F
- 0x6e, 0x28, 0x55, 0x00, 0x30, 0xeb, 0x52, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x53, //0x50~0x5F
- 0x6b, 0x79, 0x77, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x54, 0x56, 0x0a, 0x20, 0x00, 0x00, 0x00, 0xfd, //0x60~0x6F
- 0x00, 0x30, 0x3e, 0x0e, 0x46, 0x0f, 0x00, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x3e, //0x70~0x7F
- 0x02, 0x03, 0x38, 0xf0, 0x53, 0x1f, 0x10, 0x14, 0x05, 0x13, 0x04, 0x20, 0x22, 0x3c, 0x3e, 0x12, //0x80~0x8F
- 0x16, 0x03, 0x07, 0x11, 0x15, 0x02, 0x06, 0x01, 0x23, 0x09, 0x07, 0x01, 0x83, 0x01, 0x00, 0x00, //0x90~0x9F
- 0x78, 0x03, 0x0c, 0x00, 0x10, 0x00, 0x88, 0x3c, 0x2f, 0xd0, 0x8a, 0x01, 0x02, 0x03, 0x04, 0x01, //0xA0~0xAF
- 0x40, 0x00, 0x7f, 0x20, 0x30, 0x70, 0x80, 0x90, 0x76, 0xe2, 0x00, 0xfb, 0x02, 0x3a, 0x80, 0xd0, //0xB0~0xBF
- 0x72, 0x38, 0x2d, 0x40, 0x10, 0x2c, 0x45, 0x80, 0x30, 0xeb, 0x52, 0x00, 0x00, 0x1e, 0x01, 0x1d, //0xC0~0xCF
- 0x00, 0xbc, 0x52, 0xd0, 0x1e, 0x20, 0xb8, 0x28, 0x55, 0x40, 0x30, 0xeb, 0x52, 0x00, 0x00, 0x1e, //0xD0~0xDF
- 0x01, 0x1d, 0x80, 0xd0, 0x72, 0x1c, 0x16, 0x20, 0x10, 0x2c, 0x25, 0x80, 0x30, 0xeb, 0x52, 0x00, //0xE0~0xEF
- 0x00, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, //0xF0~0xFF
-};
-*/
-static unsigned char mVGAEdidDataBuf[CC_EDID_SIZE];
-void monitor_info_set_date ( unsigned char *edidbuf )
-{
- char prop_value[PROPERTY_VALUE_MAX];
- char tmp[4];
- struct tm *p;
- int week = 0;
-
- memset ( prop_value, '\0', PROPERTY_VALUE_MAX );
-
- property_get ( "ro.build.date.utc", prop_value, "VERSION_ERROR" );
-
- time_t timep = atoi ( prop_value );
-
- p = localtime ( &timep );
-
- mktime ( p );
-
- strftime ( prop_value, PROPERTY_VALUE_MAX, "%W.", p );
-
- week = atoi ( prop_value );
-
- edidbuf[16] = week;
- edidbuf[17] = ( 1900 + p->tm_year ) - 1990;
-
- LOGD ( "###############%s##############", "TV" );
- LOGD ( "Week number is %d", week );
- LOGD ( "%d %02d %02d", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday );
- LOGD ( "###############%s##############", "TV" );
-}
-
-
-void monitor_info_set_imagesize ( unsigned char *edidbuf )
-{
- //panel size info for edid:
- //39' : max_horizontal = 86; max_vertical = 48;
- //42' : max_horizontal = 93; max_vertical = 52;
- //47' : max_horizontal = 104; max_vertical = 60;
- //50' : max_horizontal = 110; max_vertical = 62;
- //55' : max_horizontal = 121; max_vertical = 71;
- int max_horizontal = 104; //47'
- int max_vertical = 60; //47'
-
- edidbuf[21] = max_horizontal;
- edidbuf[22] = max_vertical;
-
- LOGD ( "imagesize max_horizontal %d max_vertical %d", max_horizontal, max_vertical );
-}
-
-
-
-void monitor_info_name_init ( unsigned char *edidbuf )
-{
- int i = 0;
-
- for ( i = 90; i < 108; i++ ) {
- edidbuf[i] = 0;
- }
-
- edidbuf[93] = 252;
-}
-
-void monitor_info_set_name ( unsigned char *edidbuf )
-{
- int i = 0;
- int config_value_len;
- const char *config_value;
- unsigned char str_manufacturer_name[14];
- config_value = config_get_str ( "TV", "tvin.hdmiedid.name", "null" );
-
- if ( strcmp ( config_value, "null" ) != 0 ) {
- config_value_len = strlen ( config_value );
-
- if ( config_value_len < 13 ) {
- for ( i = 0; i < config_value_len; ++i ) {
- str_manufacturer_name[i] = config_value[i];
- }
-
- for ( i = config_value_len; i < 13; ++i ) {
- str_manufacturer_name[i] = ' ';
- }
- } else {
- for ( i = 0; i < 13; ++i ) {
- str_manufacturer_name[i] = config_value[i];
- }
- }
-
- }
-
- for ( i = 0; i < 13; i++ ) {
- edidbuf[95 + i] = str_manufacturer_name[i];
- }
-}
-
-void monitor_info_edid_checksum ( unsigned char *edidbuf )
-{
- int sum = 0, i = 0;
-
- for ( i = 0; i < 127; i++ ) {
- sum += edidbuf[i];
- }
-
- sum = ( 256 - ( sum % 256 ) ) % 256;
- edidbuf[127] = sum;
-
- LOGD ( "checksum is 0x%x,so testBuf[127] = 0x%x", sum, edidbuf[127] );
-}
-
-int reboot_sys_by_fbc_edid_info()
-{
- int ret = -1;
- int fd = -1;
- int edid_info_len = 256;
- unsigned char fbc_edid_info[edid_info_len];
- int env_different_as_cur = 0;
- char outputmode_prop_value[256];
- char lcd_reverse_prop_value[256];
-
- LOGD("get edid info from fbc!");
- memset(outputmode_prop_value, '\0', 256);
- memset(lcd_reverse_prop_value, '\0', 256);
- property_get("ubootenv.var.outputmode", outputmode_prop_value, "null" );
- property_get("ubootenv.var.lcd_reverse", lcd_reverse_prop_value, "null" );
-
- fd = open("/sys/class/amhdmitx/amhdmitx0/edid_info", O_RDWR);
- if (fd < 0) {
- LOGW("open edid node error\n");
- return -1;
- }
- ret = read(fd, fbc_edid_info, edid_info_len);
- if (ret < 0) {
- LOGW("read edid node error\n");
- return -1;
- }
-
- if ((0xfb == fbc_edid_info[250]) && (0x0c == fbc_edid_info[251])) {
- LOGD("RX is FBC!");
- // set outputmode env
- ret = 0;//is Fbc
- switch (fbc_edid_info[252] & 0x0f) {
- case 0x0:
- if (0 != strcmp(outputmode_prop_value, "1080p")) {
- if (0 == env_different_as_cur) {
- env_different_as_cur = 1;
- }
- property_set("ubootenv.var.outputmode", "1080p");
- }
- break;
- case 0x1:
- if (0 != strcmp(outputmode_prop_value, "4k2k60hz420")) {
- if (0 == env_different_as_cur) {
- env_different_as_cur = 1;
- }
- property_set("ubootenv.var.outputmode", "4k2k60hz420");
- }
- break;
- case 0x2:
- if (0 != strcmp(outputmode_prop_value, "1366*768")) {
- if (0 == env_different_as_cur) {
- env_different_as_cur = 1;
- }
- property_set("ubootenv.var.outputmode", "1366*768");
- }
- break;
- default:
- break;
- }
-
- // set RX 3D Info
- //switch((fbc_edid_info[252]>>4)&0x0f)
-
- // set lcd_reverse env
- switch (fbc_edid_info[253]) {
- case 0x0:
- if (0 != strcmp(lcd_reverse_prop_value, "0")) {
- if (0 == env_different_as_cur) {
- env_different_as_cur = 1;
- }
- property_set("ubootenv.var.lcd_reverse", "0");
- }
- break;
- case 0x1:
- if (0 != strcmp(lcd_reverse_prop_value, "1")) {
- if (0 == env_different_as_cur) {
- env_different_as_cur = 1;
- }
- property_set("ubootenv.var.lcd_reverse", "1");
- }
- break;
- default:
- break;
- }
- }
- close(fd);
- fd = -1;
- //ret = -1;
- if (1 == env_different_as_cur) {
- LOGW("env change , reboot system\n");
- system("reboot");
- }
- return ret;
-}
-
-int reboot_sys_by_fbc_uart_panel_info()
-{
- int ret = -1;
- char outputmode_prop_value[256];
- char lcd_reverse_prop_value[256];
- CFbcCommunication *fbc = GetSingletonFBC();
- int env_different_as_cur = 0;
- int panel_reverse = -1;
- int panel_outputmode = -1;
-
-
- char panel_model[64] = {0};
-
- if (fbc == NULL) {
- LOGE("there is no fbc!!!\n");
- return -1;
- }
-
- fbc->cfbc_Get_FBC_Get_PANel_INFO(COMM_DEV_SERIAL, panel_model);
- if (0 == panel_model[0]) {
- LOGD("device is not fbc\n");
- return -1;
- }
- LOGD("device is fbc, get panel info from fbc!\n");
- memset(outputmode_prop_value, '\0', 256);
- memset(lcd_reverse_prop_value, '\0', 256);
- property_get("ubootenv.var.outputmode", outputmode_prop_value, "null" );
- property_get("ubootenv.var.lcd_reverse", lcd_reverse_prop_value, "null" );
-
- fbc->cfbc_Get_FBC_PANEL_REVERSE(COMM_DEV_SERIAL, &panel_reverse);
- fbc->cfbc_Get_FBC_PANEL_OUTPUT(COMM_DEV_SERIAL, &panel_outputmode);
- LOGD("panel_reverse = %d, panel_outputmode = %d\n", panel_reverse, panel_outputmode);
- LOGD("panel_output prop = %s, panel reverse prop = %s\n", outputmode_prop_value, lcd_reverse_prop_value);
- switch (panel_outputmode) {
- case 0x0:
- if (0 != strcmp(outputmode_prop_value, "1080p")) {
- LOGD("panel_output changed to 1080p\n");
- if (0 == env_different_as_cur) {
- env_different_as_cur = 1;
- }
- property_set("ubootenv.var.outputmode", "1080p");
- }
- break;
- case 0x1:
- if (0 != strcmp(outputmode_prop_value, "4k2k60hz420")) {
- if (0 == env_different_as_cur) {
- env_different_as_cur = 1;
- }
- property_set("ubootenv.var.outputmode", "4k2k60hz420");
- }
- break;
- case 0x2:
- if (0 != strcmp(outputmode_prop_value, "1366*768")) {
- if (0 == env_different_as_cur) {
- env_different_as_cur = 1;
- }
- property_set("ubootenv.var.outputmode", "1366*768");
- }
- break;
- default:
- break;
- }
-
- // set RX 3D Info
- //switch((fbc_edid_info[252]>>4)&0x0f)
-
- // set lcd_reverse env
- switch (panel_reverse) {
- case 0x0:
- if (0 != strcmp(lcd_reverse_prop_value, "0")) {
- LOGD("panel_reverse changed to 0\n");
- if (0 == env_different_as_cur) {
- env_different_as_cur = 1;
- }
- property_set("ubootenv.var.lcd_reverse", "0");
- }
- break;
- case 0x1:
- if (0 != strcmp(lcd_reverse_prop_value, "1")) {
- if (0 == env_different_as_cur) {
- env_different_as_cur = 1;
- }
- property_set("ubootenv.var.lcd_reverse", "1");
- }
- break;
- default:
- break;
- }
-
- ret = -1;
- if (1 == env_different_as_cur) {
- LOGW("env change , reboot system\n");
- system("reboot");
- }
- return 0;
-}
-
-static pid_t pidof(const char *name)
-{
- DIR *dir;
- struct dirent *ent;
- char *endptr;
- char tmp_buf[512];
-
- if (!(dir = opendir("/proc"))) {
- LOGE("%s, can't open /proc", __FUNCTION__, strerror(errno));
- return -1;
- }
-
- while ((ent = readdir(dir)) != NULL) {
- /* if endptr is not a null character, the directory is not
- * entirely numeric, so ignore it */
- long lpid = strtol(ent->d_name, &endptr, 10);
- if (*endptr != '\0') {
- continue;
- }
-
- /* try to open the cmdline file */
- snprintf(tmp_buf, sizeof(tmp_buf), "/proc/%ld/cmdline", lpid);
- FILE *fp = fopen(tmp_buf, "r");
-
- if (fp) {
- if (fgets(tmp_buf, sizeof(tmp_buf), fp) != NULL) {
- /* check the first token in the file, the program name */
- char *first = strtok(tmp_buf, " ");
- if (!strcmp(first, name)) {
- fclose(fp);
- closedir(dir);
- return (pid_t) lpid;
- }
- }
- fclose(fp);
- }
- }
-
- closedir(dir);
- return -1;
-}
-
-int GetPlatformHaveFBCFlag()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", "platform.havefbc", "true");
- if (strcmp(config_value, "true") == 0) {
- return 1;
- }
-
- return 0;
-}
-
-int GetPlatformHaveDDFlag()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", "platform.havedd", "null");
- if (strcmp(config_value, "true") == 0 || strcmp(config_value, "1") == 0) {
- return 1;
- }
-
- return 0;
-}
-
-int GetPlatformProjectInfoSrc()
-{
- const char *config_value;
-
- config_value = config_get_str("TV", "platform.projectinfo.src", "null");
- if (strcmp(config_value, "null") == 0 || strcmp(config_value, "prop") == 0) {
- return 0;
- } else if (strcmp(config_value, "emmckey") == 0) {
- return 1;
- } else if (strcmp(config_value, "fbc_ver") == 0) {
- return 2;
- }
-
- return 0;
-}
-
-static unsigned int mCrc32Table[256];
-
-static void initCrc32Table()
-{
- int i, j;
- unsigned int Crc;
- for (i = 0; i < 256; i++) {
- Crc = i;
- for (j = 0; j < 8; j++) {
- if (Crc & 1)
- Crc = (Crc >> 1) ^ 0xEDB88320;
- else
- Crc >>= 1;
- }
- mCrc32Table[i] = Crc;
- }
-}
-
-unsigned int CalCRC32(unsigned int crc, const unsigned char *ptr, unsigned int buf_len)
-{
- static const unsigned int s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
- 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
- };
- unsigned int crcu32 = crc;
- if (buf_len < 0)
- return 0;
- if (!ptr) return 0;
- crcu32 = ~crcu32;
- while (buf_len--) {
- unsigned char b = *ptr++;
- crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)];
- crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)];
- }
- return ~crcu32;
-}
-
-#define CC_HEAD_CHKSUM_LEN (9)
-#define CC_VERSION_LEN (5)
-
-static int check_projectinfo_data_valid(char *data_str, int chksum_head_len, int ver_len)
-{
- int tmp_len = 0, tmp_ver = 0;
- char *endp = NULL;
- unsigned long src_chksum = 0, cal_chksum = 0;
- char tmp_buf[129] = { 0 };
-
- if (data_str != NULL) {
- tmp_len = strlen(data_str);
- if (tmp_len > chksum_head_len + ver_len) {
- cal_chksum = CalCRC32(0, (unsigned char *)(data_str + chksum_head_len), tmp_len - chksum_head_len);
- memcpy(tmp_buf, data_str, chksum_head_len);
- tmp_buf[chksum_head_len] = 0;
- src_chksum = strtoul(tmp_buf, &endp, 16);
- if (cal_chksum == src_chksum) {
- memcpy(tmp_buf, data_str + chksum_head_len, ver_len);
- if ((tmp_buf[0] == 'v' || tmp_buf[0] == 'V') && isxdigit(tmp_buf[1]) && isxdigit(tmp_buf[2]) && isxdigit(tmp_buf[3])) {
- tmp_ver = strtoul(tmp_buf + 1, &endp, 16);
- if (tmp_ver <= 0) {
- LOGD("%s, project_info data version error!!!\n", __FUNCTION__);
- return -1;
- }
- } else {
- LOGD("%s, project_info data version error!!!\n", __FUNCTION__);
- return -1;
- }
-
- return tmp_ver;
- } else {
- LOGD("%s, cal_chksum = %x\n", __FUNCTION__, (unsigned int)cal_chksum);
- LOGD("%s, src_chksum = %x\n", __FUNCTION__, (unsigned int)src_chksum);
- }
- }
-
- LOGD("%s, project_info data error!!!\n", __FUNCTION__);
- return -1;
- }
-
- LOGD("%s, project_info data is NULL!!!\n", __FUNCTION__);
- return -1;
-}
-
-static int gFBCPrjInfoRDPass = 0;
-static char gFBCPrjInfoBuf[1024] = {0};
-
-static int GetProjectInfoOriData(char data_str[])
-{
- int tmp_val = 0;
- int src_type = GetPlatformProjectInfoSrc();
-
- if (src_type == 0) {
- memset(data_str, '\0', sizeof(data_str));
- property_get("ubootenv.var.project_info", data_str, "null");
- if (strcmp(data_str, "null") == 0) {
- LOGE("%s, get project info data error!!!\n", __FUNCTION__);
- return -1;
- }
-
- return 0;
- } else if (src_type == 1) {
- return -1;
- } else if (src_type == 2) {
- int i = 0, tmp_len = 0, tmp_val = 0, item_cnt = 0;
- int tmp_rd_fail_flag = 0;
- unsigned int cal_chksum = 0;
- char sw_version[64];
- char build_time[64];
- char git_version[64];
- char git_branch[64];
- char build_name[64];
- char tmp_buf[512] = {0};
-
- CFbcCommunication *fbcIns = GetSingletonFBC();
- if (fbcIns != NULL) {
- if (gFBCPrjInfoRDPass == 0) {
- memset((void *)gFBCPrjInfoBuf, 0, sizeof(gFBCPrjInfoBuf));
- }
-
- if (gFBCPrjInfoRDPass == 1) {
- strcpy(data_str, gFBCPrjInfoBuf);
- LOGD("%s, rd once just return, data_str = %s\n", __FUNCTION__, data_str);
- return 0;
- }
-
- if (fbcIns->cfbc_Get_FBC_MAINCODE_Version(COMM_DEV_SERIAL, sw_version, build_time, git_version, git_branch, build_name) == 0) {
- if (sw_version[0] == '1' || sw_version[0] == '2') {
- strcpy(build_name, "2");
-
- strcpy(tmp_buf, "v001,fbc_");
- strcat(tmp_buf, build_name);
- strcat(tmp_buf, ",4k2k60hz420,no_rev,");
- strcat(tmp_buf, "HV550QU2-305");
- strcat(tmp_buf, ",8o8w,0,0");
- cal_chksum = CalCRC32(0, (unsigned char *)tmp_buf, strlen(tmp_buf));
- sprintf(data_str, "%08x,%s", cal_chksum, tmp_buf);
- LOGD("%s, data_str = %s\n", __FUNCTION__, data_str);
- } else {
- tmp_val = 0;
- if (fbcIns->cfbc_Get_FBC_project_id(COMM_DEV_SERIAL, &tmp_val) == 0) {
- sprintf(build_name, "fbc_%d", tmp_val);
- } else {
- tmp_rd_fail_flag = 1;
- strcpy(build_name, "fbc_0");
- LOGD("%s, get project id from fbc error!!!\n", __FUNCTION__);
- }
-
- strcpy(tmp_buf, "v001,");
- strcat(tmp_buf, build_name);
- strcat(tmp_buf, ",4k2k60hz420,no_rev,");
-
- memset(git_branch, 0, sizeof(git_branch));
- if (fbcIns->cfbc_Get_FBC_Get_PANel_INFO(COMM_DEV_SERIAL, git_branch) == 0) {
- strcat(tmp_buf, git_branch);
- } else {
- tmp_rd_fail_flag = 1;
- strcat(tmp_buf, build_name);
- LOGD("%s, get panel info from fbc error!!!\n", __FUNCTION__);
- }
-
- strcat(tmp_buf, ",8o8w,0,0");
- cal_chksum = CalCRC32(0, (unsigned char *)tmp_buf, strlen(tmp_buf));
- sprintf(data_str, "%08x,%s", cal_chksum, tmp_buf);
- LOGD("%s, data_str = %s\n", __FUNCTION__, data_str);
-
- if (tmp_rd_fail_flag == 0) {
- gFBCPrjInfoRDPass = 1;
- strcpy(gFBCPrjInfoBuf, data_str);
- }
- }
-
- return 0;
- }
-
- return -1;
- }
- }
-
- return -1;
-}
-
-int GetProjectInfo(project_info_t *proj_info_ptr)
-{
- int i = 0, tmp_ret = 0, tmp_val = 0, tmp_len = 0;
- int item_cnt = 0, handle_prj_info_data_flag = 0;
- char *token = NULL;
- const char *strDelimit = ",";
- char tmp_buf[1024] = { 0 };
- char data_str[1024] = { 0 };
-
- if (GetProjectInfoOriData(data_str) < 0) {
- return -1;
- }
-
- memset((void *)proj_info_ptr->version, 0, CC_PROJECT_INFO_ITEM_MAX_LEN);
- memset((void *)proj_info_ptr->panel_type, 0, CC_PROJECT_INFO_ITEM_MAX_LEN);
- memset((void *)proj_info_ptr->panel_outputmode, 0, CC_PROJECT_INFO_ITEM_MAX_LEN);
- memset((void *)proj_info_ptr->panel_rev, 0, CC_PROJECT_INFO_ITEM_MAX_LEN);
- memset((void *)proj_info_ptr->panel_name, 0, CC_PROJECT_INFO_ITEM_MAX_LEN);
- memset((void *)proj_info_ptr->amp_curve_name, 0, CC_PROJECT_INFO_ITEM_MAX_LEN);
-
- //check project info data is valid
- handle_prj_info_data_flag = check_projectinfo_data_valid(data_str, CC_HEAD_CHKSUM_LEN, CC_VERSION_LEN);
-
- //handle project info data
- if (handle_prj_info_data_flag > 0) {
- item_cnt = 0;
- memset((void *)tmp_buf, 0, sizeof(tmp_buf));
- strncpy(tmp_buf, data_str + CC_HEAD_CHKSUM_LEN, sizeof(tmp_buf) - 1);
- if (handle_prj_info_data_flag == 1) {
- token = strtok(tmp_buf, strDelimit);
- while (token != NULL) {
- if (item_cnt == 0) {
- strncpy(proj_info_ptr->version, token, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
- } else if (item_cnt == 1) {
- strncpy(proj_info_ptr->panel_type, token, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
- } else if (item_cnt == 2) {
- strncpy(proj_info_ptr->panel_outputmode, token, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
- } else if (item_cnt == 3) {
- strncpy(proj_info_ptr->panel_rev, token, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
- } else if (item_cnt == 4) {
- strncpy(proj_info_ptr->panel_name, token, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
- } else if (item_cnt == 5) {
- strncpy(proj_info_ptr->amp_curve_name, token, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
- }
-
- token = strtok(NULL, strDelimit);
- item_cnt += 1;
- }
- }
-
- return 0;
- }
-
- return -1;
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <fcntl.h>
+#include <ctype.h>
+#include <sys/prctl.h>
+#include <stdlib.h>
+#include <android/log.h>
+#include <cutils/android_reboot.h>
+#include "../tvconfig/tvconfig.h"
+#include "../tvsetting/CTvSetting.h"
+#include "../audio/audio_api.h"
+#include "../tv/CFbcCommunication.h"
+#include <cutils/properties.h>
+#include <dirent.h>
+using namespace android;
+
+#include "tvutils.h"
+
+#define LOG_TAG "LibTvMISC"
+#include "CTvLog.h"
+
+#define CS_I2C_1_DEV_PATH "/dev/i2c-1"
+#define CS_I2C_2_DEV_PATH "/dev/i2c-2"
+
+/* number of times a device address should be polled when not acknowledging */
+#define I2C_RETRIES 0x0701
+
+/* set timeout in units of 10 ms */
+#define I2C_TIMEOUT 0x0702
+
+/* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses
+ * are NOT supported! (due to code brokenness)
+ */
+
+/* Use this slave address */
+#define I2C_SLAVE 0x0703
+
+/* Use this slave address, even if it is already in use by a driver! */
+#define I2C_SLAVE_FORCE 0x0706
+
+#define I2C_TENBIT 0x0704 /* 0 for 7 bit addrs, != 0 for 10 bit */
+#define I2C_FUNCS 0x0705 /* Get the adapter functionality mask */
+#define I2C_RDWR 0x0707 /* Combined R/W transfer (one STOP only) */
+#define I2C_PEC 0x0708 /* != 0 to use PEC with SMBus */
+#define I2C_SMBUS 0x0720 /* SMBus transfer */
+
+struct i2c_msg {
+ unsigned short addr; /* slave address */
+ unsigned short flags;
+#define I2C_M_TEN 0x0010 /* this is a ten bit chip address */
+#define I2C_M_WR 0x0000 /* write data, from master to slave */
+#define I2C_M_RD 0x0001 /* read data, from slave to master */
+#define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_NO_RD_ACK 0x0800 /* if I2C_FUNC_PROTOCOL_MANGLING */
+#define I2C_M_RECV_LEN 0x0400 /* length will be first received byte */
+
+ unsigned short len; /* msg length */
+ unsigned char *buf; /* pointer to msg data */
+};
+
+struct i2c_rdwr_ioctl_data {
+ struct i2c_msg *msgs;
+ unsigned int nmsgs;
+};
+
+static volatile int mDreamPanelResumeLastBLFlag = 0;
+static volatile int mDreamPanelDemoFlag = 0;
+
+static pthread_mutex_t dream_panel_resume_last_bl_flag_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t dream_panel_demo_flag_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t file_attr_control_flag_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+static pthread_t UserPet_ThreadId = 0;
+static unsigned char is_turnon_user_pet_thread = false;
+static unsigned char is_user_pet_thread_start = false;
+static unsigned int user_counter = 0;
+static unsigned int user_pet_terminal = 1;
+
+static int iw_duty = 0;
+
+static int Miscioctl(const char *file_path, int request, ...)
+{
+ int fd = -1, tmp_ret = -1;
+ int bus_status = 0;
+ va_list ap;
+ void *arg;
+
+ if (file_path == NULL) {
+ LOGE("%s, file path is NULL!!!\n", "TV");
+ return -1;
+ }
+
+ fd = open(file_path, O_RDWR);
+ if (fd < 0) {
+ LOGE("%s, Open %s ERROR(%s)!!\n", "TV", file_path, strerror(errno));
+ return -1;
+ }
+
+ va_start(ap, request);
+ arg = va_arg(ap, void *);
+ va_end(ap);
+
+ tmp_ret = ioctl(fd, request, arg);
+
+ close(fd);
+ fd = -1;
+
+ return tmp_ret;
+}
+
+int cfg_get_one_item(const char *key_str, const char *strDelimit, int item_index, char cfg_str[])
+{
+ int cfg_item_ind = 0;
+ char *token = NULL;
+ const char *config_value;
+ char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
+
+ if (key_str == NULL) {
+ LOGE("%s, key_str's pointer is NULL.\n", "TV");
+ return -1;
+ }
+
+ if (cfg_str == NULL) {
+ LOGE("%s, cfg_str's pointer is NULL.\n", "TV");
+ return -1;
+ }
+
+ if (item_index < 0) {
+ LOGE("%s, item_index can't be less than 0.\n", "TV");
+ return -1;
+ }
+
+ config_value = config_get_str("TV", key_str, "null");
+ if (strcasecmp(config_value, "null") == 0) {
+ cfg_str[0] = '\0';
+ LOGE("%s, can't get config \"%s\"!!!\n", "TV", key_str);
+ return -1;
+ }
+
+ cfg_item_ind = 0;
+
+ memset((void *)data_str, 0, sizeof(data_str));
+ strncpy(data_str, config_value, sizeof(data_str) - 1);
+
+ token = strtok(data_str, strDelimit);
+ while (token != NULL) {
+ if (cfg_item_ind == item_index) {
+ strcpy(cfg_str, token);
+ break;
+ }
+
+ token = strtok(NULL, strDelimit);
+ cfg_item_ind += 1;
+ }
+
+ if (token == NULL) {
+ cfg_str[0] = '\0';
+ return -1;
+ }
+
+ return 0;
+}
+
+int cfg_split(char *line_data, char *strDelimit, int *item_cnt, char **item_bufs)
+{
+ int i = 0, tmp_cnt = 0;
+ char *token = NULL;
+
+ if (line_data == NULL) {
+ LOGE("%s, line_data is NULL", "TV");
+ return -1;
+ }
+
+ if (strDelimit == NULL) {
+ LOGE("%s, strDelimit is NULL", "TV");
+ return -1;
+ }
+
+ if (item_cnt == NULL) {
+ LOGE("%s, item_cnt is NULL", "TV");
+ return -1;
+ }
+
+ if (item_bufs == NULL) {
+ LOGE("%s, item_bufs is NULL", "TV");
+ return -1;
+ }
+
+ for (i = 0; i < *item_cnt; i++) {
+ item_bufs[i] = NULL;
+ }
+
+ token = strtok(line_data, strDelimit);
+
+ while (token != NULL) {
+ item_bufs[tmp_cnt] = token;
+
+ token = strtok(NULL, strDelimit);
+
+ tmp_cnt += 1;
+ if (tmp_cnt >= *item_cnt) {
+ break;
+ }
+ }
+
+ *item_cnt = tmp_cnt;
+
+ return 0;
+}
+
+int ReadADCSpecialChannelValue(int adc_channel_num)
+{
+ FILE *fp = NULL;
+ int rd_data = 0;
+ char ch_sysfs_path[256] = { 0 };
+
+ if (adc_channel_num < CC_MIN_ADC_CHANNEL_VAL || adc_channel_num > CC_MAX_ADC_CHANNEL_VAL) {
+ LOGD("adc channel num must between %d and %d.", CC_MIN_ADC_CHANNEL_VAL, CC_MAX_ADC_CHANNEL_VAL);
+ return 0;
+ }
+
+ sprintf(ch_sysfs_path, "/sys/class/saradc/saradc_ch%d", adc_channel_num);
+
+ fp = fopen(ch_sysfs_path, "r");
+
+ if (fp == NULL) {
+ LOGE("open %s ERROR(%s)!!\n", ch_sysfs_path, strerror(errno));
+ return 0;
+ }
+
+ fscanf(fp, "%d", &rd_data);
+
+ fclose(fp);
+
+ return rd_data;
+}
+
+int Tv_MiscRegs(const char *cmd)
+{
+ //#ifdef BRING_UP_DEBUG
+ FILE *fp = NULL;
+ fp = fopen("/sys/class/register/reg", "w");
+
+ if (fp != NULL && cmd != NULL) {
+ fprintf(fp, "%s", cmd);
+ } else {
+ LOGE("Open /sys/class/register/reg ERROR(%s)!!\n", strerror(errno));
+ fclose(fp);
+ return -1;
+ }
+ fclose(fp);
+ //#endif
+
+ return 0;
+}
+
+int TvMisc_SetUserCounterTimeOut(int timeout)
+{
+ FILE *fp;
+
+ fp = fopen("/sys/devices/platform/aml_wdt/user_pet_timeout", "w");
+
+ if (fp != NULL) {
+ fprintf(fp, "%d", timeout);
+ fclose(fp);
+ } else {
+ LOGE("=OSD CPP=> open /sys/devices/platform/aml_wdt/user_pet_timeout ERROR(%s)!!\n", strerror(errno));
+ return -1;
+ }
+ return 0;
+}
+
+int TvMisc_SetUserCounter(int count)
+{
+ FILE *fp;
+
+ fp = fopen("/sys/module/aml_wdt/parameters/user_pet", "w");
+
+ if (fp != NULL) {
+ fprintf(fp, "%d", count);
+ fclose(fp);
+ } else {
+ LOGE("=OSD CPP=> open /sys/devices/platform/aml_wdt/user_pet ERROR(%s)!!\n", strerror(errno));
+ return -1;
+ }
+
+ fclose(fp);
+
+ return 0;
+}
+
+int TvMisc_SetUserPetResetEnable(int enable)
+{
+ FILE *fp;
+
+ fp = fopen("/sys/module/aml_wdt/parameters/user_pet_reset_enable", "w");
+
+ if (fp != NULL) {
+ fprintf(fp, "%d", enable);
+ fclose(fp);
+ } else {
+ LOGE("=OSD CPP=> open /sys/devices/platform/aml_wdt/user_pet_reset_enable ERROR(%s)!!\n", strerror(errno));
+ return -1;
+ }
+
+ fclose(fp);
+
+ return 0;
+}
+
+int TvMisc_SetSystemPetResetEnable(int enable)
+{
+ FILE *fp;
+
+ fp = fopen("/sys/devices/platform/aml_wdt/reset_enable", "w");
+
+ if (fp != NULL) {
+ fprintf(fp, "%d", enable);
+ fclose(fp);
+ } else {
+ LOGE("=OSD CPP=> open /sys/devices/platform/aml_wdt/reset_enable ERROR(%s)!!\n", strerror(errno));
+ return -1;
+ }
+
+ fclose(fp);
+
+ return 0;
+}
+
+int TvMisc_SetSystemPetEnable(int enable)
+{
+ FILE *fp;
+
+ fp = fopen("/sys/devices/platform/aml_wdt/ping_enable", "w");
+
+ if (fp != NULL) {
+ fprintf(fp, "%d", enable);
+ fclose(fp);
+ } else {
+ LOGE("=OSD CPP=> open /sys/devices/platform/aml_wdt/ping_enable ERROR(%s)!!\n", strerror(errno));
+ return -1;
+ }
+
+ fclose(fp);
+
+ return 0;
+}
+
+int TvMisc_SetSystemPetCounterTimeOut(int timeout)
+{
+ FILE *fp;
+
+ fp = fopen("/sys/devices/platform/aml_wdt/wdt_timeout", "w");
+
+ if (fp != NULL) {
+ fprintf(fp, "%d", timeout);
+ fclose(fp);
+ } else {
+ LOGE("=OSD CPP=> open /sys/devices/platform/aml_wdt/wdt_timeout ERROR(%s)!!\n", strerror(errno));
+ return -1;
+ }
+
+ fclose(fp);
+
+ return 0;
+}
+
+#define MEMERASE _IOW('M', 2, struct erase_info_user)
+static int memerase(int fd, struct erase_info_user *erase)
+{
+ return (ioctl (fd, MEMERASE, erase));
+}
+
+#define CS_ATV_SOCKET_FILE_NAME "/dev/socket/datv_sock"
+
+static int setServer(const char *fileName)
+{
+ int ret = -1, sock = -1;
+ struct sockaddr_un srv_addr;
+
+ sock = socket(PF_UNIX, SOCK_STREAM, 0);
+ if (sock < 0) {
+ LOGE("%s, socket create failed (errno = %d: %s).\n", "TV", errno, strerror(errno));
+ return -1;
+ }
+
+ //set server addr_param
+ srv_addr.sun_family = AF_UNIX;
+ strncpy(srv_addr.sun_path, CS_ATV_SOCKET_FILE_NAME, sizeof(srv_addr.sun_path) - 1);
+ unlink(CS_ATV_SOCKET_FILE_NAME);
+
+ //bind sockfd & addr
+ ret = bind(sock, (struct sockaddr *) &srv_addr, sizeof(srv_addr));
+ if (ret == -1) {
+ LOGE("%s, cannot bind server socket.\n", "TV");
+ close(sock);
+ unlink(CS_ATV_SOCKET_FILE_NAME);
+ return -1;
+ }
+
+ //listen sockfd
+ ret = listen(sock, 1);
+ if (ret == -1) {
+ LOGE("%s, cannot listen the client connect request.\n", "TV");
+ close(sock);
+ unlink(CS_ATV_SOCKET_FILE_NAME);
+ return -1;
+ }
+
+ return sock;
+}
+
+static int acceptMessage(int listen_fd)
+{
+ int ret, com_fd;
+ socklen_t len;
+ struct sockaddr_un clt_addr;
+
+ //have connect request use accept
+ len = sizeof(clt_addr);
+ com_fd = accept(listen_fd, (struct sockaddr *) &clt_addr, &len);
+ if (com_fd < 0) {
+ LOGE("%s, cannot accept client connect request.\n", "TV");
+ close(listen_fd);
+ unlink(CS_ATV_SOCKET_FILE_NAME);
+ return -1;
+ }
+
+ LOGD("%s, com_fd = %d\n", "TV", com_fd);
+
+ return com_fd;
+}
+
+static int parse_socket_message(char *msg_str, int *para_cnt, int para_buf[])
+{
+ int para_count = 0, set_mode = 0;
+ char *token = NULL;
+
+ set_mode = -1;
+
+ token = strtok(msg_str, ",");
+ if (token != NULL) {
+ if (strcasecmp(token, "quit") == 0) {
+ set_mode = 0;
+ } else if (strcasecmp(token, "SetAudioVolumeCompensationVal") == 0) {
+ set_mode = 1;
+ } else if (strcasecmp(token, "set3dmode") == 0) {
+ set_mode = 2;
+ } else if (strcasecmp(token, "setdisplaymode") == 0) {
+ set_mode = 3;
+ }
+ }
+
+ if (set_mode != 1 && set_mode != 2 && set_mode != 3) {
+ return set_mode;
+ }
+
+ para_count = 0;
+
+ token = strtok(NULL, ",");
+ while (token != NULL) {
+ para_buf[para_count] = strtol(token, NULL, 10);
+ para_count += 1;
+
+ token = strtok(NULL, ",");
+ }
+
+ *para_cnt = para_count;
+
+ return set_mode;
+}
+
+/*static void* socket_thread_entry(void *arg)
+{
+ int ret = 0, listen_fd = -1, com_fd = -1, rd_len = 0;
+ int para_count = 0, set_mode = 0;
+ int tmp_val = 0;
+ int para_buf[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
+ static char recv_buf[1024];
+
+ listen_fd = setServer(CS_ATV_SOCKET_FILE_NAME);
+ chmod(CS_ATV_SOCKET_FILE_NAME, 0666);
+ prctl(PR_SET_NAME, (unsigned long) "datv.sock.thread");
+
+ if (listen_fd < 0) {
+ return NULL;
+ }
+
+ while (1) {
+ com_fd = acceptMessage(listen_fd);
+
+ if (com_fd >= 0) {
+ //read message from client
+ memset((void *) recv_buf, 0, sizeof(recv_buf));
+ rd_len = read(com_fd, recv_buf, sizeof(recv_buf));
+ LOGD("%s, message from client (%d)) : %s\n", "TV", rd_len, recv_buf);
+
+ set_mode = parse_socket_message(recv_buf, &para_count, para_buf);
+ if (set_mode == 0) {
+ LOGD("%s, receive quit message, starting to quit.\n", "TV");
+ sprintf(recv_buf, "%s", "quiting now...");
+ write(com_fd, recv_buf, strlen(recv_buf) + 1);
+ break;
+ } else if (set_mode == 1) {
+ ret = -1;
+
+ if (para_count == 1) {
+ LOGD("%s, SetAudioVolumeCompensationVal value = %d\n", "TV", para_buf[0]);
+
+ ret = SetAudioVolumeCompensationVal(para_buf[0]);
+ } else if (para_count == 2) {
+ LOGD("%s, SetAudioVolumeCompensationVal value = %d, type = %d\n", "TV", para_buf[0], para_buf[1]);
+
+ ret = SetAudioVolumeCompensationVal(para_buf[0]);
+
+ if (para_buf[1] == 1) {
+ tmp_val = GetAudioMasterVolume();
+ ret |= SetAudioMasterVolume(tmp_val);
+ }
+ }
+
+ sprintf(recv_buf, "%d", ret);
+ write(com_fd, recv_buf, strlen(recv_buf) + 1);
+ } else if (set_mode == 2) {
+ ret = -1;
+
+ if (para_count == 1) {
+ LOGE("%s, mode = %d ------->\n", "TV", para_buf[0]);
+
+ switch (para_buf[0]) {
+ case 4: //BT
+ ret = Tvin_Set3DFunction(MODE3D_BT);
+ break;
+ case 5: //LR
+ ret = Tvin_Set3DFunction(MODE3D_LR);
+ break;
+ case 8: //
+ ret = Tvin_Set3DFunction(MODE3D_DISABLE);
+ break;
+ case 0:
+ ret = Tvin_Set3DFunction(MODE3D_DISABLE);
+ break;
+ case 9: //
+ ret = Tvin_Set3DFunction(MODE3D_L_3D_TO_2D);
+ break;
+ }
+ if (ret == 0) {
+ LOGE("%s, sk_hdi_av_set_3d_mode return sucess.\n", "TV");
+ } else {
+ LOGE("%s, sk_hdi_av_set_3d_mode return error(%d).\n", "TV", ret);
+ }
+ }
+
+ sprintf(recv_buf, "%d", ret);
+ write(com_fd, recv_buf, strlen(recv_buf) + 1);
+
+ }
+
+ close(com_fd);
+ com_fd = -1;
+ }
+ }
+
+ if (com_fd >= 0) {
+ close(com_fd);
+ com_fd = -1;
+ }
+
+ if (listen_fd >= 0) {
+ close(listen_fd);
+ listen_fd = -1;
+ }
+
+ unlink(CS_ATV_SOCKET_FILE_NAME);
+
+ return NULL;
+}*/
+
+#if !defined(SUN_LEN)
+#define SUN_LEN(su) (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
+#endif
+
+static int connectToServer(char *file_name)
+{
+ int tmp_ret = 0, sock = -1;
+ struct sockaddr_un addr;
+
+ if (file_name == NULL) {
+ LOGE("%s, file name is NULL\n", "TV");
+ return -1;
+ }
+
+ sock = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (sock < 0) {
+ LOGE("%s, socket create failed (errno = %d: %s)\n", "TV", errno, strerror(errno));
+ return -1;
+ }
+
+ /* connect to socket; fails if file doesn't exist */
+ strcpy(addr.sun_path, file_name); // max 108 bytes
+ addr.sun_family = AF_UNIX;
+ tmp_ret = connect(sock, (struct sockaddr *) &addr, SUN_LEN(&addr));
+ if (tmp_ret < 0) {
+ // ENOENT means socket file doesn't exist
+ // ECONNREFUSED means socket exists but nobody is listening
+ LOGE("%s, AF_UNIX connect failed for '%s': %s\n", "TV", file_name, strerror(errno));
+ close(sock);
+ return -1;
+ }
+
+ return sock;
+}
+
+static int realSendSocketMsg(char *file_name, char *msg_str, char recv_buf[])
+{
+ int sock = -1, rd_len = 0;
+ char tmp_buf[1024];
+
+ if (file_name == NULL) {
+ LOGE("%s, file name is NULL\n", "TV");
+ return -1;
+ }
+
+ if (msg_str == NULL) {
+ LOGE("%s, msg string is NULL\n", "TV");
+ return -1;
+ }
+
+ LOGD("%s, message to server (%d)) : %s\n", "TV", strlen(msg_str), msg_str);
+
+ sock = connectToServer(file_name);
+
+ if (sock >= 0) {
+ write(sock, msg_str, strlen(msg_str) + 1);
+
+ if (recv_buf == NULL) {
+ memset((void *) tmp_buf, 0, sizeof(tmp_buf));
+ rd_len = read(sock, tmp_buf, sizeof(tmp_buf));
+ LOGD("%s, message from server (%d)) : %s\n", "TV", rd_len, tmp_buf);
+ } else {
+ rd_len = read(sock, recv_buf, 1024);
+ LOGD("%s, message from server (%d)) : %s\n", "TV", rd_len, recv_buf);
+ }
+
+ close(sock);
+ sock = -1;
+
+ return 0;
+ }
+
+ return -1;
+}
+
+int I2C_WriteNbyte(int i2c_no, int dev_addr, int slave_addr, int len, unsigned char data_buf[])
+{
+ int tmp_ret = 0;
+ struct i2c_rdwr_ioctl_data ctl_data;
+ struct i2c_msg msg;
+ unsigned char msg_buf[52];
+ int device_fd = -1;
+
+ memset((void *) msg_buf, 0, 52);
+
+ msg_buf[0] = (unsigned char) (slave_addr >> 8);
+ msg_buf[1] = (unsigned char) (slave_addr & 0x00ff);
+
+ if (data_buf == NULL) {
+ return -1;
+ }
+
+ if (len < 50) {
+ memcpy((void *) &msg_buf[2], data_buf, len);
+ } else {
+ LOGE("I2C_WriteNbyte len(%d) > 50, error!\n", len);
+ return -1;
+ }
+
+ msg.addr = dev_addr;
+ msg.flags = I2C_M_WR;
+ msg.len = 2 + len;
+ msg.buf = msg_buf;
+ ctl_data.nmsgs = 1;
+ ctl_data.msgs = &msg;
+
+ if (i2c_no == 1) {
+ device_fd = open(CS_I2C_1_DEV_PATH, O_RDWR);
+ if (device_fd < 0) {
+ LOGE("%s, Open device file %S error: %s.\n", "TV", CS_I2C_1_DEV_PATH, strerror(errno));
+ return -1;
+ }
+ } else if (i2c_no == 2) {
+ device_fd = open(CS_I2C_2_DEV_PATH, O_RDWR);
+ if (device_fd < 0) {
+ LOGE("%s, Open device file %S error: %s.\n", "TV", CS_I2C_2_DEV_PATH, strerror(errno));
+ return -1;
+ }
+ } else {
+ LOGE("%s, invalid i2c no (%d).\n", "TV", i2c_no);
+ return -1;
+ }
+
+ tmp_ret = ioctl(device_fd, I2C_RDWR, &ctl_data);
+
+ usleep(10 * 1000);
+ if (device_fd >= 0) {
+ close(device_fd);
+ device_fd = -1;
+ }
+ return tmp_ret;
+}
+
+int I2C_ReadNbyte(int i2c_no, int dev_addr, int slave_addr, int len, unsigned char data_buf[])
+{
+ int tmp_ret = 0;
+ struct i2c_rdwr_ioctl_data ctl_data;
+ struct i2c_msg msg;
+ unsigned char msg_buf[52];
+ int device_fd = -1;
+
+ memset((void *) msg_buf, 0, 52);
+
+ if (data_buf == NULL) {
+ return -1;
+ }
+
+ if (len < 50) {
+ memcpy((void *) &msg_buf[2], data_buf, len);
+ } else {
+ LOGE("I2C_WriteNbyte len(%d) > 50, error!\n", len);
+ return -1;
+ }
+
+ msg_buf[0] = (unsigned char) (slave_addr >> 8);
+ msg_buf[1] = (unsigned char) (slave_addr & 0x00ff);
+ msg.addr = dev_addr;
+ msg.flags = I2C_M_WR;
+ msg.len = 2;
+ msg.buf = msg_buf;
+ ctl_data.nmsgs = 1;
+ ctl_data.msgs = &msg;
+
+ if (i2c_no == 1) {
+ device_fd = open(CS_I2C_1_DEV_PATH, O_RDWR);
+ if (device_fd < 0) {
+ LOGE("%s, Open device file %S error: %s.\n", "TV", CS_I2C_1_DEV_PATH, strerror(errno));
+ return -1;
+ }
+ } else if (i2c_no == 2) {
+ device_fd = open(CS_I2C_2_DEV_PATH, O_RDWR);
+ if (device_fd < 0) {
+ LOGE("%s, Open device file %S error: %s.\n", "TV", CS_I2C_2_DEV_PATH, strerror(errno));
+ return -1;
+ }
+ } else {
+ LOGE("%s, invalid i2c no (%d).\n", "TV", i2c_no);
+ return -1;
+ }
+
+ tmp_ret = ioctl(device_fd, I2C_RDWR, &ctl_data);
+
+ msg.addr = dev_addr;
+ msg.flags |= I2C_M_RD;
+ msg.len = len;
+ msg.buf = data_buf;
+ ctl_data.nmsgs = 1;
+ ctl_data.msgs = &msg;
+
+ tmp_ret = ioctl(device_fd, I2C_RDWR, &ctl_data);
+
+ usleep(10 * 1000);
+
+ if (device_fd >= 0) {
+ close(device_fd);
+ device_fd = -1;
+ }
+ return tmp_ret;
+}
+
+int SetFileAttrValue(const char *fp, const char value[])
+{
+ int fd = -1, ret = -1;
+
+ pthread_mutex_lock(&file_attr_control_flag_mutex);
+
+ fd = open(fp, O_RDWR);
+
+ if (fd < 0) {
+ LOGE("open %s ERROR(%s)!!\n", fp, strerror(errno));
+ pthread_mutex_unlock(&file_attr_control_flag_mutex);
+ return -1;
+ }
+
+ ret = write(fd, value, strlen(value));
+ close(fd);
+
+ pthread_mutex_unlock(&file_attr_control_flag_mutex);
+ return ret;
+}
+
+int GetFileAttrIntValue(const char *fp)
+{
+ int fd = -1, ret = -1;
+ int temp = -1;
+ char temp_str[32];
+
+ memset(temp_str, 0, 32);
+
+ fd = open(fp, O_RDWR);
+
+ if (fd <= 0) {
+ LOGE("open %s ERROR(%s)!!\n", fp, strerror(errno));
+ return -1;
+ }
+
+ if (read(fd, temp_str, sizeof(temp_str)) > 0) {
+ if (sscanf(temp_str, "%d", &temp) >= 0) {
+ LOGD("%s -> get %s value =%d!\n", "TV", fp, temp);
+ close(fd);
+ return temp;
+ } else {
+ LOGE("%s -> get %s value error(%s)\n", "TV", fp, strerror(errno));
+ close(fd);
+ return -1;
+ }
+ }
+
+ close(fd);
+ return -1;
+}
+
+int *GetFileAttrIntValueStr(const char *fp)
+{
+ int fd = -1, ret = -1;
+ static int temp[4];
+ char temp_str[32];
+ int i = 0;
+ char *p = NULL;
+
+ memset(temp_str, 0, 32);
+
+ fd = open(fp, O_RDWR);
+
+ if (fd <= 0) {
+ LOGE("open %s ERROR(%s)!!\n", fp, strerror(errno));
+ return NULL;
+ }
+
+ if(read(fd, temp_str, sizeof(temp_str)) > 0) {
+ LOGD("%s,temp_str = %s\n", "TV", temp_str);
+ p = strtok(temp_str, " ");
+ while(p != NULL) {
+ sscanf(p, "%d", &temp[i]);
+ p = strtok(NULL, " ");
+ i = i + 1;
+ }
+ close(fd);
+ return temp;
+ }
+
+ close(fd);
+ return NULL;
+}
+
+int Get_Fixed_NonStandard(void)
+{
+ return GetFileAttrIntValue("/sys/module/tvin_afe/parameters/force_nostd");
+}
+
+//0-turn off
+//1-force non-standard
+//2-force normal
+int Set_Fixed_NonStandard(int value)
+{
+ int fd = -1, ret = -1;
+ char set_vale[32];
+ memset(set_vale, '\0', 32);
+
+ sprintf(set_vale, "%d", value);
+
+ fd = open("/sys/module/tvin_afe/parameters/force_nostd", O_RDWR);
+
+ if (fd >= 0) {
+ ret = write(fd, set_vale, strlen(set_vale));
+ }
+
+ if (ret <= 0) {
+ LOGE("%s -> set /sys/module/tvin_afe/parameters/force_nostd error(%s)!\n", "TV", strerror(errno));
+ }
+
+ close(fd);
+
+ return ret;
+}
+
+static void *UserPet_TreadRun(void *data)
+{
+ while (is_turnon_user_pet_thread == true) {
+ if (is_user_pet_thread_start == true) {
+ usleep(1000 * 1000);
+ if (++user_counter == 0xffffffff)
+ user_counter = 1;
+ TvMisc_SetUserCounter(user_counter);
+ } else {
+ usleep(10000 * 1000);
+ }
+ }
+ if (user_pet_terminal == 1) {
+ user_counter = 0;
+ } else {
+ user_counter = 1;
+ }
+ TvMisc_SetUserCounter(user_counter);
+ return ((void *) 0);
+}
+
+static int UserPet_CreateThread(void)
+{
+ int ret = 0;
+ pthread_attr_t attr;
+ struct sched_param param;
+
+ is_turnon_user_pet_thread = true;
+ is_user_pet_thread_start = true;
+
+ pthread_attr_init(&attr);
+ pthread_attr_setschedpolicy(&attr, SCHED_RR);
+ param.sched_priority = 1;
+ pthread_attr_setschedparam(&attr, &param);
+ ret = pthread_create(&UserPet_ThreadId, &attr, &UserPet_TreadRun, NULL);
+ pthread_attr_destroy(&attr);
+ return ret;
+}
+
+static void UserPet_KillThread(void)
+{
+ int i = 0, dly = 600;
+ is_turnon_user_pet_thread = false;
+ is_user_pet_thread_start = false;
+ for (i = 0; i < 2; i++) {
+ usleep(dly * 1000);
+ }
+ pthread_join(UserPet_ThreadId, NULL);
+ UserPet_ThreadId = 0;
+ LOGD("%s, done.", "TV");
+}
+
+void TvMisc_EnableWDT(bool kernelpet_disable, unsigned int userpet_enable, unsigned int kernelpet_timeout, unsigned int userpet_timeout, unsigned int userpet_reset)
+{
+ TvMisc_SetSystemPetCounterTimeOut(kernelpet_timeout);
+ TvMisc_SetSystemPetEnable(1);
+ if (kernelpet_disable) {
+ TvMisc_SetSystemPetResetEnable(0);
+ } else {
+ TvMisc_SetSystemPetResetEnable(1);
+ }
+ if (userpet_enable) {
+ TvMisc_SetUserCounterTimeOut(userpet_timeout);
+ TvMisc_SetUserPetResetEnable(userpet_reset);
+ UserPet_CreateThread();
+ } else {
+ TvMisc_SetUserCounter(0);
+ TvMisc_SetUserPetResetEnable(0);
+ }
+}
+
+void TvMisc_DisableWDT(unsigned int userpet_enable)
+{
+ if (userpet_enable) {
+ user_pet_terminal = 0;
+ UserPet_KillThread();
+ }
+}
+
+static int get_hardware_info(char *hardware, unsigned int *revision)
+{
+ char data[1024];
+ int fd, n;
+ char *x, *hw, *rev;
+
+ fd = open("/proc/cpuinfo", O_RDONLY);
+ if (fd < 0) {
+ return -1;
+ }
+
+ n = read(fd, data, 1023);
+ close(fd);
+ if (n < 0) {
+ return -1;
+ }
+
+ data[n] = 0;
+
+ if (hardware != NULL) {
+ hw = strstr(data, "\nHardware");
+
+ if (hw) {
+ x = strstr(hw, ": ");
+ if (x) {
+ x += 2;
+ n = 0;
+ while (*x && *x != '\n' && !isspace(*x)) {
+ hardware[n++] = tolower(*x);
+ x++;
+ if (n == 31) {
+ break;
+ }
+ }
+
+ hardware[n] = 0;
+ }
+ }
+ }
+
+ if (revision != NULL) {
+ rev = strstr(data, "\nRevision");
+
+ if (rev) {
+ x = strstr(rev, ": ");
+ if (x) {
+ *revision = strtoul(x + 2, 0, 16);
+ }
+ }
+ }
+
+ return 0;
+}
+
+int get_hardware_name(char *hardware)
+{
+ int tmp_ret = 0;
+
+ if (hardware == NULL) {
+ return -1;
+ }
+
+ tmp_ret = get_hardware_info(hardware, NULL);
+ if (tmp_ret < 0) {
+ hardware[0] = '\0';
+ }
+
+ return 0;
+}
+
+/*---------------delete dir---------------*/
+int TvMisc_DeleteDirFiles(const char *strPath, int flag)
+{
+ int status;
+ char tmp[256];
+ switch (flag) {
+ case 0:
+ sprintf(tmp, "rm -f %s", strPath);
+ LOGE("%s", tmp);
+ system(tmp);
+ break;
+ case 1:
+ sprintf(tmp, "cd %s", strPath);
+ LOGE("%s", tmp);
+ status = system(tmp);
+ if (status > 0 || status < 0)
+ return -1;
+ sprintf(tmp, "cd %s;rm -rf *", strPath);
+ system(tmp);
+ LOGE("%s", tmp);
+ break;
+ case 2:
+ sprintf(tmp, "rm -rf %s", strPath);
+ LOGE("%s", tmp);
+ system(tmp);
+ break;
+ }
+ return 0;
+}
+/*---------------delete dir end-----------*/
+
+#ifndef NELEM
+# define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0])))
+#endif
+
+
+int Tv_Utils_CheckFs(void)
+{
+ FILE *f;
+ char mount_dev[256];
+ char mount_dir[256];
+ char mount_type[256];
+ char mount_opts[256];
+ int mount_freq;
+ int mount_passno;
+ int match;
+ int found_ro_fs = 0;
+ int data_status = 0;
+ int cache_status = 0;
+ int atv_status = 0;
+ int dtv_status = 0;
+ int param_status = 0;
+ int cool_reboot = 0;
+ int recovery_reboot = 0;
+
+ f = fopen("/proc/mounts", "r");
+ if (! f) {
+ /* If we can't read /proc/mounts, just give up */
+ return 1;
+ }
+
+ do {
+ match = fscanf(f, "%255s %255s %255s %255s %d %d\n",
+ mount_dev, mount_dir, mount_type,
+ mount_opts, &mount_freq, &mount_passno);
+ mount_dev[255] = 0;
+ mount_dir[255] = 0;
+ mount_type[255] = 0;
+ mount_opts[255] = 0;
+ if ((match == 6) && (!strncmp(mount_dev, "/dev/block", 10))) {
+ LOGD("%s, %s %s %s %s %d %d!", "TV", mount_dev, mount_dir, mount_type, mount_opts, mount_freq, mount_passno);
+ if (!strncmp(mount_dir, "/param", 6)) {
+ param_status |= 0x01;
+ } else if (!strncmp(mount_dir, "/atv", 4)) {
+ atv_status |= 0x01;
+ } else if (!strncmp(mount_dir, "/dtv", 4)) {
+ dtv_status |= 0x01;
+ } else if (!strncmp(mount_dir, "/data", 5)) {
+ data_status |= 0x01;
+ } else if (!strncmp(mount_dir, "/cache", 6)) {
+ cache_status |= 0x01;
+ }
+ if (strstr(mount_opts, "ro")) {
+ found_ro_fs += 1;
+ if (!strncmp(mount_dir, "/param", 6)) {
+ param_status |= 0x02;
+ } else if (!strncmp(mount_dir, "/atv", 4)) {
+ atv_status |= 0x02;
+ } else if (!strncmp(mount_dir, "/dtv", 4)) {
+ dtv_status |= 0x02;
+ } else if (!strncmp(mount_dir, "/data", 5)) {
+ data_status |= 0x02;
+ } else if (!strncmp(mount_dir, "/cache", 6)) {
+ cache_status |= 0x02;
+ }
+ }
+ }
+ } while (match != EOF);
+
+ fclose(f);
+
+ switch (param_status) {
+ case 0x03:
+ LOGW("%s, param partition is read-only!", "TV");
+ break;
+ case 0x00:
+ LOGW("%s, param partition can not be mounted!", "TV");
+ break;
+ default:
+ break;
+ }
+ switch (atv_status) {
+ case 0x03:
+ LOGW("%s, atv partition is read-only!", "TV");
+ cool_reboot = 1;
+ //android_reboot(ANDROID_RB_RESTART2, 0, "cool_reboot");
+ break;
+ case 0x00:
+ LOGW("%s, atv partition can not be mounted!", "TV");
+ recovery_reboot = 1;
+ //android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
+ default:
+ break;
+ }
+ switch (dtv_status) {
+ case 0x03:
+ LOGW("%s, dtv partition is read-only!", "TV");
+ //android_reboot(ANDROID_RB_RESTART2, 0, "cool_reboot");
+ break;
+ case 0x00:
+ LOGW("%s, dtv partition can not be mounted!", "TV");
+ //android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
+ default:
+ break;
+ }
+ switch (data_status) {
+ case 0x03:
+ LOGW("%s, data partition is read-only!", "TV");
+ cool_reboot = 1;
+ //android_reboot(ANDROID_RB_RESTART2, 0, "cool_reboot");
+ break;
+ case 0x00:
+ LOGW("%s, data partition can not be mounted!", "TV");
+ recovery_reboot = 1;
+ //android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
+ break;
+ default:
+ break;
+ }
+ switch (cache_status) {
+ case 0x03:
+ LOGW("%s, cache partition is read-only!", "TV");
+ cool_reboot = 1;
+ //android_reboot(ANDROID_RB_RESTART2, 0, "cool_reboot");
+ break;
+ case 0x00:
+ LOGW("%s, cache partition can not be mounted!", "TV");
+ recovery_reboot = 1;
+ //android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
+ break;
+ default:
+ break;
+ }
+ if (cool_reboot == 1) {
+ android_reboot(ANDROID_RB_RESTART2, 0, "cool_reboot");
+ }
+ if (recovery_reboot == 1) {
+ android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
+ }
+ return found_ro_fs;
+}
+
+
+int Tv_Utils_SetFileAttrStr(const char *file_path, char val_str_buf[])
+{
+ FILE *tmpfp = NULL;
+
+ tmpfp = fopen(file_path, "w");
+ if (tmpfp == NULL) {
+ LOGE("%s, write open file %s error(%s)!!!\n", "TV", file_path, strerror(errno));
+ return -1;
+ }
+
+ fputs(val_str_buf, tmpfp);
+
+ fclose(tmpfp);
+ tmpfp = NULL;
+
+ return 0;
+}
+
+int Tv_Utils_GetFileAttrStr(const char *file_path, int buf_size, char val_str_buf[])
+{
+ FILE *tmpfp = NULL;
+
+ tmpfp = fopen(file_path, "r");
+ if (tmpfp == NULL) {
+ LOGE("%s, read open file %s error(%s)!!!\n", "TV", file_path, strerror(errno));
+ val_str_buf[0] = '\0';
+ return -1;
+ }
+
+ fgets(val_str_buf, buf_size, tmpfp);
+
+ fclose(tmpfp);
+ tmpfp = NULL;
+
+ return 0;
+}
+
+
+int Tv_Utils_IsFileExist(const char *file_name)
+{
+ struct stat tmp_st;
+
+ return stat(file_name, &tmp_st);
+}
+
+#define CC_EDID_SIZE (256)
+#define CS_VGA_EDID_BUF_DATA_CFG_NAME "ssm.vga.edidbuf.data"
+/*
+static unsigned char customer_edid_buf[CC_EDID_SIZE + 4];
+
+static unsigned char mDefHDMIEdidBuf[CC_EDID_SIZE] = {
+ //256 bytes
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x4d, 0x79, 0x02, 0x2c, 0x01, 0x01, 0x01, 0x01, //0x00~0x0F
+ 0x01, 0x15, 0x01, 0x03, 0x80, 0x85, 0x4b, 0x78, 0x0a, 0x0d, 0xc9, 0xa0, 0x57, 0x47, 0x98, 0x27, //0x10~0x1F
+ 0x12, 0x48, 0x4c, 0x21, 0x08, 0x00, 0x81, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, //0x20~0x2F
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x3a, 0x80, 0x18, 0x71, 0x38, 0x2d, 0x40, 0x58, 0x2c, //0x30~0x3F
+ 0x45, 0x00, 0x30, 0xeb, 0x52, 0x00, 0x00, 0x1e, 0x01, 0x1d, 0x00, 0x72, 0x51, 0xd0, 0x1e, 0x20, //0x40~0x4F
+ 0x6e, 0x28, 0x55, 0x00, 0x30, 0xeb, 0x52, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x53, //0x50~0x5F
+ 0x6b, 0x79, 0x77, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x54, 0x56, 0x0a, 0x20, 0x00, 0x00, 0x00, 0xfd, //0x60~0x6F
+ 0x00, 0x30, 0x3e, 0x0e, 0x46, 0x0f, 0x00, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x01, 0x3e, //0x70~0x7F
+ 0x02, 0x03, 0x38, 0xf0, 0x53, 0x1f, 0x10, 0x14, 0x05, 0x13, 0x04, 0x20, 0x22, 0x3c, 0x3e, 0x12, //0x80~0x8F
+ 0x16, 0x03, 0x07, 0x11, 0x15, 0x02, 0x06, 0x01, 0x23, 0x09, 0x07, 0x01, 0x83, 0x01, 0x00, 0x00, //0x90~0x9F
+ 0x78, 0x03, 0x0c, 0x00, 0x10, 0x00, 0x88, 0x3c, 0x2f, 0xd0, 0x8a, 0x01, 0x02, 0x03, 0x04, 0x01, //0xA0~0xAF
+ 0x40, 0x00, 0x7f, 0x20, 0x30, 0x70, 0x80, 0x90, 0x76, 0xe2, 0x00, 0xfb, 0x02, 0x3a, 0x80, 0xd0, //0xB0~0xBF
+ 0x72, 0x38, 0x2d, 0x40, 0x10, 0x2c, 0x45, 0x80, 0x30, 0xeb, 0x52, 0x00, 0x00, 0x1e, 0x01, 0x1d, //0xC0~0xCF
+ 0x00, 0xbc, 0x52, 0xd0, 0x1e, 0x20, 0xb8, 0x28, 0x55, 0x40, 0x30, 0xeb, 0x52, 0x00, 0x00, 0x1e, //0xD0~0xDF
+ 0x01, 0x1d, 0x80, 0xd0, 0x72, 0x1c, 0x16, 0x20, 0x10, 0x2c, 0x25, 0x80, 0x30, 0xeb, 0x52, 0x00, //0xE0~0xEF
+ 0x00, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, //0xF0~0xFF
+};
+*/
+static unsigned char mVGAEdidDataBuf[CC_EDID_SIZE];
+void monitor_info_set_date ( unsigned char *edidbuf )
+{
+ char prop_value[PROPERTY_VALUE_MAX];
+ char tmp[4];
+ struct tm *p;
+ int week = 0;
+
+ memset ( prop_value, '\0', PROPERTY_VALUE_MAX );
+
+ property_get ( "ro.build.date.utc", prop_value, "VERSION_ERROR" );
+
+ time_t timep = atoi ( prop_value );
+
+ p = localtime ( &timep );
+
+ mktime ( p );
+
+ strftime ( prop_value, PROPERTY_VALUE_MAX, "%W.", p );
+
+ week = atoi ( prop_value );
+
+ edidbuf[16] = week;
+ edidbuf[17] = ( 1900 + p->tm_year ) - 1990;
+
+ LOGD ( "###############%s##############", "TV" );
+ LOGD ( "Week number is %d", week );
+ LOGD ( "%d %02d %02d", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday );
+ LOGD ( "###############%s##############", "TV" );
+}
+
+
+void monitor_info_set_imagesize ( unsigned char *edidbuf )
+{
+ //panel size info for edid:
+ //39' : max_horizontal = 86; max_vertical = 48;
+ //42' : max_horizontal = 93; max_vertical = 52;
+ //47' : max_horizontal = 104; max_vertical = 60;
+ //50' : max_horizontal = 110; max_vertical = 62;
+ //55' : max_horizontal = 121; max_vertical = 71;
+ int max_horizontal = 104; //47'
+ int max_vertical = 60; //47'
+
+ edidbuf[21] = max_horizontal;
+ edidbuf[22] = max_vertical;
+
+ LOGD ( "imagesize max_horizontal %d max_vertical %d", max_horizontal, max_vertical );
+}
+
+
+
+void monitor_info_name_init ( unsigned char *edidbuf )
+{
+ int i = 0;
+
+ for ( i = 90; i < 108; i++ ) {
+ edidbuf[i] = 0;
+ }
+
+ edidbuf[93] = 252;
+}
+
+void monitor_info_set_name ( unsigned char *edidbuf )
+{
+ int i = 0;
+ int config_value_len;
+ const char *config_value;
+ unsigned char str_manufacturer_name[14];
+ config_value = config_get_str ( "TV", "tvin.hdmiedid.name", "null" );
+
+ if ( strcmp ( config_value, "null" ) != 0 ) {
+ config_value_len = strlen ( config_value );
+
+ if ( config_value_len < 13 ) {
+ for ( i = 0; i < config_value_len; ++i ) {
+ str_manufacturer_name[i] = config_value[i];
+ }
+
+ for ( i = config_value_len; i < 13; ++i ) {
+ str_manufacturer_name[i] = ' ';
+ }
+ } else {
+ for ( i = 0; i < 13; ++i ) {
+ str_manufacturer_name[i] = config_value[i];
+ }
+ }
+
+ }
+
+ for ( i = 0; i < 13; i++ ) {
+ edidbuf[95 + i] = str_manufacturer_name[i];
+ }
+}
+
+void monitor_info_edid_checksum ( unsigned char *edidbuf )
+{
+ int sum = 0, i = 0;
+
+ for ( i = 0; i < 127; i++ ) {
+ sum += edidbuf[i];
+ }
+
+ sum = ( 256 - ( sum % 256 ) ) % 256;
+ edidbuf[127] = sum;
+
+ LOGD ( "checksum is 0x%x,so testBuf[127] = 0x%x", sum, edidbuf[127] );
+}
+
+int reboot_sys_by_fbc_edid_info()
+{
+ int ret = -1;
+ int fd = -1;
+ int edid_info_len = 256;
+ unsigned char fbc_edid_info[edid_info_len];
+ int env_different_as_cur = 0;
+ char outputmode_prop_value[256];
+ char lcd_reverse_prop_value[256];
+
+ LOGD("get edid info from fbc!");
+ memset(outputmode_prop_value, '\0', 256);
+ memset(lcd_reverse_prop_value, '\0', 256);
+ property_get("ubootenv.var.outputmode", outputmode_prop_value, "null" );
+ property_get("ubootenv.var.lcd_reverse", lcd_reverse_prop_value, "null" );
+
+ fd = open("/sys/class/amhdmitx/amhdmitx0/edid_info", O_RDWR);
+ if(fd < 0) {
+ LOGW("open edid node error\n");
+ return -1;
+ }
+ ret = read(fd, fbc_edid_info, edid_info_len);
+ if(ret < 0) {
+ LOGW("read edid node error\n");
+ return -1;
+ }
+
+ if((0xfb == fbc_edid_info[250]) && (0x0c == fbc_edid_info[251])) {
+ LOGD("RX is FBC!");
+ // set outputmode env
+ ret = 0;//is Fbc
+ switch(fbc_edid_info[252] & 0x0f) {
+ case 0x0:
+ if(0 != strcmp(outputmode_prop_value, "1080p")) {
+ if(0 == env_different_as_cur) {
+ env_different_as_cur = 1;
+ }
+ property_set("ubootenv.var.outputmode", "1080p");
+ }
+ break;
+ case 0x1:
+ if(0 != strcmp(outputmode_prop_value, "4k2k60hz420")) {
+ if(0 == env_different_as_cur) {
+ env_different_as_cur = 1;
+ }
+ property_set("ubootenv.var.outputmode", "4k2k60hz420");
+ }
+ break;
+ case 0x2:
+ if(0 != strcmp(outputmode_prop_value, "1366*768")) {
+ if(0 == env_different_as_cur) {
+ env_different_as_cur = 1;
+ }
+ property_set("ubootenv.var.outputmode", "1366*768");
+ }
+ break;
+ default:
+ break;
+ }
+
+ // set RX 3D Info
+ //switch((fbc_edid_info[252]>>4)&0x0f)
+
+ // set lcd_reverse env
+ switch(fbc_edid_info[253]) {
+ case 0x0:
+ if(0 != strcmp(lcd_reverse_prop_value, "0")) {
+ if(0 == env_different_as_cur) {
+ env_different_as_cur = 1;
+ }
+ property_set("ubootenv.var.lcd_reverse", "0");
+ }
+ break;
+ case 0x1:
+ if(0 != strcmp(lcd_reverse_prop_value, "1")) {
+ if(0 == env_different_as_cur) {
+ env_different_as_cur = 1;
+ }
+ property_set("ubootenv.var.lcd_reverse", "1");
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ close(fd);
+ fd = -1;
+ //ret = -1;
+ if(1 == env_different_as_cur) {
+ LOGW("env change , reboot system\n");
+ system("reboot");
+ }
+ return ret;
+}
+
+int reboot_sys_by_fbc_uart_panel_info()
+{
+ int ret = -1;
+ char outputmode_prop_value[256];
+ char lcd_reverse_prop_value[256];
+ CFbcCommunication *fbc = GetSingletonFBC();
+ int env_different_as_cur = 0;
+ int panel_reverse = -1;
+ int panel_outputmode = -1;
+
+
+ char panel_model[64] = {0};
+
+ if (fbc == NULL) {
+ LOGE("there is no fbc!!!\n");
+ return -1;
+ }
+
+ fbc->cfbc_Get_FBC_Get_PANel_INFO(COMM_DEV_SERIAL, panel_model);
+ if(0 == panel_model[0]) {
+ LOGD("device is not fbc\n");
+ return -1;
+ }
+ LOGD("device is fbc, get panel info from fbc!\n");
+ memset(outputmode_prop_value, '\0', 256);
+ memset(lcd_reverse_prop_value, '\0', 256);
+ property_get("ubootenv.var.outputmode", outputmode_prop_value, "null" );
+ property_get("ubootenv.var.lcd_reverse", lcd_reverse_prop_value, "null" );
+
+ fbc->cfbc_Get_FBC_PANEL_REVERSE(COMM_DEV_SERIAL, &panel_reverse);
+ fbc->cfbc_Get_FBC_PANEL_OUTPUT(COMM_DEV_SERIAL, &panel_outputmode);
+ LOGD("panel_reverse = %d, panel_outputmode = %d\n", panel_reverse, panel_outputmode);
+ LOGD("panel_output prop = %s, panel reverse prop = %s\n", outputmode_prop_value, lcd_reverse_prop_value);
+ switch(panel_outputmode) {
+ case 0x0:
+ if(0 != strcmp(outputmode_prop_value, "1080p")) {
+ LOGD("panel_output changed to 1080p\n");
+ if(0 == env_different_as_cur) {
+ env_different_as_cur = 1;
+ }
+ property_set("ubootenv.var.outputmode", "1080p");
+ }
+ break;
+ case 0x1:
+ if(0 != strcmp(outputmode_prop_value, "4k2k60hz420")) {
+ if(0 == env_different_as_cur) {
+ env_different_as_cur = 1;
+ }
+ property_set("ubootenv.var.outputmode", "4k2k60hz420");
+ }
+ break;
+ case 0x2:
+ if(0 != strcmp(outputmode_prop_value, "1366*768")) {
+ if(0 == env_different_as_cur) {
+ env_different_as_cur = 1;
+ }
+ property_set("ubootenv.var.outputmode", "1366*768");
+ }
+ break;
+ default:
+ break;
+ }
+
+ // set RX 3D Info
+ //switch((fbc_edid_info[252]>>4)&0x0f)
+
+ // set lcd_reverse env
+ switch(panel_reverse) {
+ case 0x0:
+ if(0 != strcmp(lcd_reverse_prop_value, "0")) {
+ LOGD("panel_reverse changed to 0\n");
+ if(0 == env_different_as_cur) {
+ env_different_as_cur = 1;
+ }
+ property_set("ubootenv.var.lcd_reverse", "0");
+ }
+ break;
+ case 0x1:
+ if(0 != strcmp(lcd_reverse_prop_value, "1")) {
+ if(0 == env_different_as_cur) {
+ env_different_as_cur = 1;
+ }
+ property_set("ubootenv.var.lcd_reverse", "1");
+ }
+ break;
+ default:
+ break;
+ }
+
+ ret = -1;
+ if(1 == env_different_as_cur) {
+ LOGW("env change , reboot system\n");
+ system("reboot");
+ }
+ return 0;
+}
+
+static pid_t pidof(const char *name)
+{
+ DIR *dir;
+ struct dirent *ent;
+ char *endptr;
+ char tmp_buf[512];
+
+ if (!(dir = opendir("/proc"))) {
+ LOGE("%s, can't open /proc", __FUNCTION__, strerror(errno));
+ return -1;
+ }
+
+ while ((ent = readdir(dir)) != NULL) {
+ /* if endptr is not a null character, the directory is not
+ * entirely numeric, so ignore it */
+ long lpid = strtol(ent->d_name, &endptr, 10);
+ if (*endptr != '\0') {
+ continue;
+ }
+
+ /* try to open the cmdline file */
+ snprintf(tmp_buf, sizeof(tmp_buf), "/proc/%ld/cmdline", lpid);
+ FILE *fp = fopen(tmp_buf, "r");
+
+ if (fp) {
+ if (fgets(tmp_buf, sizeof(tmp_buf), fp) != NULL) {
+ /* check the first token in the file, the program name */
+ char *first = strtok(tmp_buf, " ");
+ if (!strcmp(first, name)) {
+ fclose(fp);
+ closedir(dir);
+ return (pid_t) lpid;
+ }
+ }
+ fclose(fp);
+ }
+ }
+
+ closedir(dir);
+ return -1;
+}
+
+int GetPlatformHaveFBCFlag()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", "platform.havefbc", "true");
+ if (strcmp(config_value, "true") == 0) {
+ return 1;
+ }
+
+ return 0;
+}
+
+int GetPlatformHaveDDFlag()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", "platform.havedd", "null");
+ if (strcmp(config_value, "true") == 0 || strcmp(config_value, "1") == 0) {
+ return 1;
+ }
+
+ return 0;
+}
+
+int GetPlatformProjectInfoSrc()
+{
+ const char *config_value;
+
+ config_value = config_get_str("TV", "platform.projectinfo.src", "null");
+ if (strcmp(config_value, "null") == 0 || strcmp(config_value, "prop") == 0) {
+ return 0;
+ } else if (strcmp(config_value, "emmckey") == 0) {
+ return 1;
+ } else if (strcmp(config_value, "fbc_ver") == 0) {
+ return 2;
+ }
+
+ return 0;
+}
+
+static unsigned int mCrc32Table[256];
+
+static void initCrc32Table()
+{
+ int i, j;
+ unsigned int Crc;
+ for (i = 0; i < 256; i++) {
+ Crc = i;
+ for (j = 0; j < 8; j++) {
+ if (Crc & 1)
+ Crc = (Crc >> 1) ^ 0xEDB88320;
+ else
+ Crc >>= 1;
+ }
+ mCrc32Table[i] = Crc;
+ }
+}
+
+unsigned int CalCRC32(unsigned int crc, const unsigned char *ptr, unsigned int buf_len)
+{
+ static const unsigned int s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
+ 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
+ };
+ unsigned int crcu32 = crc;
+ if(buf_len < 0)
+ return 0;
+ if (!ptr) return 0;
+ crcu32 = ~crcu32;
+ while (buf_len--) {
+ unsigned char b = *ptr++;
+ crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)];
+ crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)];
+ }
+ return ~crcu32;
+}
+
+#define CC_HEAD_CHKSUM_LEN (9)
+#define CC_VERSION_LEN (5)
+
+static int check_projectinfo_data_valid(char *data_str, int chksum_head_len, int ver_len)
+{
+ int tmp_len = 0, tmp_ver = 0;
+ char *endp = NULL;
+ unsigned long src_chksum = 0, cal_chksum = 0;
+ char tmp_buf[129] = { 0 };
+
+ if (data_str != NULL) {
+ tmp_len = strlen(data_str);
+ if (tmp_len > chksum_head_len + ver_len) {
+ cal_chksum = CalCRC32(0, (unsigned char *)(data_str + chksum_head_len), tmp_len - chksum_head_len);
+ memcpy(tmp_buf, data_str, chksum_head_len);
+ tmp_buf[chksum_head_len] = 0;
+ src_chksum = strtoul(tmp_buf, &endp, 16);
+ if (cal_chksum == src_chksum) {
+ memcpy(tmp_buf, data_str + chksum_head_len, ver_len);
+ if ((tmp_buf[0] == 'v' || tmp_buf[0] == 'V') && isxdigit(tmp_buf[1]) && isxdigit(tmp_buf[2]) && isxdigit(tmp_buf[3])) {
+ tmp_ver = strtoul(tmp_buf + 1, &endp, 16);
+ if (tmp_ver <= 0) {
+ LOGD("%s, project_info data version error!!!\n", __FUNCTION__);
+ return -1;
+ }
+ } else {
+ LOGD("%s, project_info data version error!!!\n", __FUNCTION__);
+ return -1;
+ }
+
+ return tmp_ver;
+ } else {
+ LOGD("%s, cal_chksum = %x\n", __FUNCTION__, (unsigned int)cal_chksum);
+ LOGD("%s, src_chksum = %x\n", __FUNCTION__, (unsigned int)src_chksum);
+ }
+ }
+
+ LOGD("%s, project_info data error!!!\n", __FUNCTION__);
+ return -1;
+ }
+
+ LOGD("%s, project_info data is NULL!!!\n", __FUNCTION__);
+ return -1;
+}
+
+static int gFBCPrjInfoRDPass = 0;
+static char gFBCPrjInfoBuf[1024] = {0};
+
+static int GetProjectInfoOriData(char data_str[])
+{
+ int tmp_val = 0;
+ int src_type = GetPlatformProjectInfoSrc();
+
+ if (src_type == 0) {
+ memset(data_str, '\0', sizeof(data_str));
+ property_get("ubootenv.var.project_info", data_str, "null");
+ if (strcmp(data_str, "null") == 0) {
+ LOGE("%s, get project info data error!!!\n", __FUNCTION__);
+ return -1;
+ }
+
+ return 0;
+ } else if (src_type == 1) {
+ return -1;
+ } else if (src_type == 2) {
+ int i = 0, tmp_len = 0, tmp_val = 0, item_cnt = 0;
+ int tmp_rd_fail_flag = 0;
+ unsigned int cal_chksum = 0;
+ char sw_version[64];
+ char build_time[64];
+ char git_version[64];
+ char git_branch[64];
+ char build_name[64];
+ char tmp_buf[512] = {0};
+
+ CFbcCommunication *fbcIns = GetSingletonFBC();
+ if (fbcIns != NULL) {
+ if (gFBCPrjInfoRDPass == 0) {
+ memset((void *)gFBCPrjInfoBuf, 0, sizeof(gFBCPrjInfoBuf));
+ }
+
+ if (gFBCPrjInfoRDPass == 1) {
+ strcpy(data_str, gFBCPrjInfoBuf);
+ LOGD("%s, rd once just return, data_str = %s\n", __FUNCTION__, data_str);
+ return 0;
+ }
+
+ if (fbcIns->cfbc_Get_FBC_MAINCODE_Version(COMM_DEV_SERIAL, sw_version, build_time, git_version, git_branch, build_name) == 0) {
+ if (sw_version[0] == '1' || sw_version[0] == '2') {
+ strcpy(build_name, "2");
+
+ strcpy(tmp_buf, "v001,fbc_");
+ strcat(tmp_buf, build_name);
+ strcat(tmp_buf, ",4k2k60hz420,no_rev,");
+ strcat(tmp_buf, "HV550QU2-305");
+ strcat(tmp_buf, ",8o8w,0,0");
+ cal_chksum = CalCRC32(0, (unsigned char *)tmp_buf, strlen(tmp_buf));
+ sprintf(data_str, "%08x,%s", cal_chksum, tmp_buf);
+ LOGD("%s, data_str = %s\n", __FUNCTION__, data_str);
+ } else {
+ tmp_val = 0;
+ if (fbcIns->cfbc_Get_FBC_project_id(COMM_DEV_SERIAL, &tmp_val) == 0) {
+ sprintf(build_name, "fbc_%d", tmp_val);
+ } else {
+ tmp_rd_fail_flag = 1;
+ strcpy(build_name, "fbc_0");
+ LOGD("%s, get project id from fbc error!!!\n", __FUNCTION__);
+ }
+
+ strcpy(tmp_buf, "v001,");
+ strcat(tmp_buf, build_name);
+ strcat(tmp_buf, ",4k2k60hz420,no_rev,");
+
+ memset(git_branch, 0, sizeof(git_branch));
+ if (fbcIns->cfbc_Get_FBC_Get_PANel_INFO(COMM_DEV_SERIAL, git_branch) == 0) {
+ strcat(tmp_buf, git_branch);
+ } else {
+ tmp_rd_fail_flag = 1;
+ strcat(tmp_buf, build_name);
+ LOGD("%s, get panel info from fbc error!!!\n", __FUNCTION__);
+ }
+
+ strcat(tmp_buf, ",8o8w,0,0");
+ cal_chksum = CalCRC32(0, (unsigned char *)tmp_buf, strlen(tmp_buf));
+ sprintf(data_str, "%08x,%s", cal_chksum, tmp_buf);
+ LOGD("%s, data_str = %s\n", __FUNCTION__, data_str);
+
+ if (tmp_rd_fail_flag == 0) {
+ gFBCPrjInfoRDPass = 1;
+ strcpy(gFBCPrjInfoBuf, data_str);
+ }
+ }
+
+ return 0;
+ }
+
+ return -1;
+ }
+ }
+
+ return -1;
+}
+
+int GetProjectInfo(project_info_t *proj_info_ptr)
+{
+ int i = 0, tmp_ret = 0, tmp_val = 0, tmp_len = 0;
+ int item_cnt = 0, handle_prj_info_data_flag = 0;
+ char *token = NULL;
+ const char *strDelimit = ",";
+ char tmp_buf[1024] = { 0 };
+ char data_str[1024] = { 0 };
+
+ if (GetProjectInfoOriData(data_str) < 0) {
+ return -1;
+ }
+
+ memset((void *)proj_info_ptr->version, 0, CC_PROJECT_INFO_ITEM_MAX_LEN);
+ memset((void *)proj_info_ptr->panel_type, 0, CC_PROJECT_INFO_ITEM_MAX_LEN);
+ memset((void *)proj_info_ptr->panel_outputmode, 0, CC_PROJECT_INFO_ITEM_MAX_LEN);
+ memset((void *)proj_info_ptr->panel_rev, 0, CC_PROJECT_INFO_ITEM_MAX_LEN);
+ memset((void *)proj_info_ptr->panel_name, 0, CC_PROJECT_INFO_ITEM_MAX_LEN);
+ memset((void *)proj_info_ptr->amp_curve_name, 0, CC_PROJECT_INFO_ITEM_MAX_LEN);
+
+ //check project info data is valid
+ handle_prj_info_data_flag = check_projectinfo_data_valid(data_str, CC_HEAD_CHKSUM_LEN, CC_VERSION_LEN);
+
+ //handle project info data
+ if (handle_prj_info_data_flag > 0) {
+ item_cnt = 0;
+ memset((void *)tmp_buf, 0, sizeof(tmp_buf));
+ strncpy(tmp_buf, data_str + CC_HEAD_CHKSUM_LEN, sizeof(tmp_buf) - 1);
+ if (handle_prj_info_data_flag == 1) {
+ token = strtok(tmp_buf, strDelimit);
+ while (token != NULL) {
+ if (item_cnt == 0) {
+ strncpy(proj_info_ptr->version, token, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
+ } else if (item_cnt == 1) {
+ strncpy(proj_info_ptr->panel_type, token, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
+ } else if (item_cnt == 2) {
+ strncpy(proj_info_ptr->panel_outputmode, token, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
+ } else if (item_cnt == 3) {
+ strncpy(proj_info_ptr->panel_rev, token, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
+ } else if (item_cnt == 4) {
+ strncpy(proj_info_ptr->panel_name, token, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
+ } else if (item_cnt == 5) {
+ strncpy(proj_info_ptr->amp_curve_name, token, CC_PROJECT_INFO_ITEM_MAX_LEN - 1);
+ }
+
+ token = strtok(NULL, strDelimit);
+ item_cnt += 1;
+ }
+ }
+
+ return 0;
+ }
+
+ return -1;
} \ No newline at end of file
diff --git a/tvapi/libtv/tvutils/tvutils.h b/tvapi/libtv/tvutils/tvutils.h
index bea78ea..bf22f9e 100644
--- a/tvapi/libtv/tvutils/tvutils.h
+++ b/tvapi/libtv/tvutils/tvutils.h
@@ -1,119 +1,119 @@
-#ifndef __TV_MISC_H__
-#define __TV_MISC_H__
-
-#define CC_MIN_ADC_CHANNEL_VAL (0)
-#define CC_MAX_ADC_CHANNEL_VAL (5)
-
-#define CC_I2C_BUS_ON (0)
-#define CC_I2C_BUS_OFF (1)
-
-#define CPQDB_DB_SIZE_ID "tv.db.size.id"
-
-struct erase_info_user {
- uint32_t start;
- uint32_t length;
-};
-
-extern int *GetFileAttrIntValueStr(const char *fp);
-extern int ReadADCSpecialChannelValue(int adc_channel_num);
-extern int Tv_MiscRegs(const char *cmd);
-
-extern int TvMisc_SetUserCounterTimeOut(int timeout);
-extern int TvMisc_SetUserCounter(int count);
-extern int TvMisc_SetUserPetResetEnable(int enable);
-extern int TvMisc_SetSystemPetResetEnable(int enable);
-extern int TvMisc_SetSystemPetEnable(int enable);
-extern int TvMisc_SetSystemPetCounter(int count);
-extern void TvMisc_EnableWDT(bool kernelpet_disable, unsigned int userpet_enable, unsigned int kernelpet_timeout, unsigned int userpet_timeout, unsigned int userpet_reset);
-extern void TvMisc_DisableWDT(unsigned int userpet_enable);
-extern int I2C_WriteNbyte(int i2c_no, int dev_addr, int slave_addr, int len, unsigned char data_buf[]);
-extern int I2C_ReadNbyte(int i2c_no, int dev_addr, int slave_addr, int len, unsigned char data_buf[]);
-extern int GetTvDBDefineSize();
-extern int SetFileAttrValue(const char *fp, const char value[]);
-extern int GetFileAttrIntValue(const char *fp);
-
-extern int Get_Fixed_NonStandard(void);
-extern int Set_Fixed_NonStandard(int value);
-
-extern int get_hardware_name(char *hardware);
-
-extern int TvMisc_DeleteDirFiles(const char *strPath, int flag);
-
-extern int cfg_get_one_item(const char *key_str, const char *strDelimit, int item_index, char cfg_str[]);
-extern int Tv_Utils_CheckFs(void);
-extern int Tv_Utils_SetFileAttrStr(const char *file_path, char val_str_buf[]);
-extern int Tv_Utils_GetFileAttrStr(const char *file_path, int buf_size, char val_str_buf[]);
-extern int Tv_Utils_IsFileExist(const char *file_name);
-extern void monitor_info_name_init ( unsigned char *edidbuf );
-extern void monitor_info_set_name ( unsigned char *edidbuf );
-extern void monitor_info_set_imagesize ( unsigned char *edidbuf );
-extern void monitor_info_edid_checksum ( unsigned char *edidbuf );
-extern int reboot_sys_by_fbc_edid_info();
-extern int reboot_sys_by_fbc_uart_panel_info();
-extern int GetPlatformHaveFBCFlag();
-extern int GetPlatformHaveDDFlag();
-
-#define CC_PROJECT_INFO_ITEM_MAX_LEN (64)
-
-typedef struct project_info_s {
- char version[CC_PROJECT_INFO_ITEM_MAX_LEN];
- char panel_type[CC_PROJECT_INFO_ITEM_MAX_LEN];
- char panel_outputmode[CC_PROJECT_INFO_ITEM_MAX_LEN];
- char panel_rev[CC_PROJECT_INFO_ITEM_MAX_LEN];
- char panel_name[CC_PROJECT_INFO_ITEM_MAX_LEN];
- char amp_curve_name[CC_PROJECT_INFO_ITEM_MAX_LEN];
-} project_info_t;
-
-extern unsigned int CalCRC32(unsigned int crc, const unsigned char *ptr, unsigned int buf_len);
-extern int GetProjectInfo(project_info_t *proj_info_ptr);
-
-//extern void SSMRewriteEdidInfo ( unsigned char *edidbuf );
-//extern int HandleEdid ( int op_type, int op_direct, unsigned char edid_buf[], unsigned char def_buf[] );
-//extern int SSMSetHdmiEdid();
-#define AML_DBG_REGS_IOC_MAGIC 'R'
-
-typedef struct aml_debug_reg_s {
- unsigned int addr;
- unsigned int val;
- unsigned char mode;
-} aml_debug_reg_t;
-
-typedef struct aml_debug_bit_s {
- unsigned int addr;
- unsigned int val;
- unsigned int start;
- unsigned int len;
-} aml_debug_bit_t;
-
-/*ioctl for reg*/
-#define AMLDBG_IOC_CBUS_REG_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x01, struct aml_debug_reg_s)
-#define AMLDBG_IOC_CBUS_REG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x02, struct aml_debug_reg_s)
-#define AMLDBG_IOC_APB_REG_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x03, struct aml_debug_reg_s)
-#define AMLDBG_IOC_APB_REG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x04, struct aml_debug_reg_s)
-#define AMLDBG_IOC_AXI_REG_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x05, struct aml_debug_reg_s)
-#define AMLDBG_IOC_AXI_REG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x06, struct aml_debug_reg_s)
-#define AMLDBG_IOC_AHB_REG_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x07, struct aml_debug_reg_s)
-#define AMLDBG_IOC_AHB_REG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x08, struct aml_debug_reg_s)
-#define AMLDBG_IOC_MPEG_REG_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x09, struct aml_debug_reg_s)
-#define AMLDBG_IOC_MPEG_REG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x0a, struct aml_debug_reg_s)
-
-/*ioctl for bit*/
-#define AMLDBG_IOC_CBUS_BIT_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x21, aml_debug_bit_t)
-#define AMLDBG_IOC_CBUS_BIT_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x22, aml_debug_bit_t)
-#define AMLDBG_IOC_APB_BIT_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x23, aml_debug_bit_t)
-#define AMLDBG_IOC_APB_BIT_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x24, aml_debug_bit_t)
-#define AMLDBG_IOC_AXI_BIT_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x25, aml_debug_bit_t)
-#define AMLDBG_IOC_AXI_BIT_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x26, aml_debug_bit_t)
-#define AMLDBG_IOC_AHB_BIT_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x27, aml_debug_bit_t)
-#define AMLDBG_IOC_AHB_BIT_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x28, aml_debug_bit_t)
-#define AMLDBG_IOC_MPEG_BIT_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x29, aml_debug_bit_t)
-#define AMLDBG_IOC_MPEG_BIT_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x30, aml_debug_bit_t)
-
-/*ioctl for gamma*/
-#define AMLDBG_IOC_SGR_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0X15, int)
-#define AMLDBG_IOC_SGG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0X16, int)
-#define AMLDBG_IOC_SGB_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0X17, int)
-
-#define AMLDBG_IOC_AAPB_REG_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x18, struct aml_debug_reg_s)
-#define AMLDBG_IOC_AAPB_REG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x19, struct aml_debug_reg_s)
-#endif //__TV_MISC_H__
+#ifndef __TV_MISC_H__
+#define __TV_MISC_H__
+
+#define CC_MIN_ADC_CHANNEL_VAL (0)
+#define CC_MAX_ADC_CHANNEL_VAL (5)
+
+#define CC_I2C_BUS_ON (0)
+#define CC_I2C_BUS_OFF (1)
+
+#define CPQDB_DB_SIZE_ID "tv.db.size.id"
+
+struct erase_info_user {
+ uint32_t start;
+ uint32_t length;
+};
+
+extern int *GetFileAttrIntValueStr(const char *fp);
+extern int ReadADCSpecialChannelValue(int adc_channel_num);
+extern int Tv_MiscRegs(const char *cmd);
+
+extern int TvMisc_SetUserCounterTimeOut(int timeout);
+extern int TvMisc_SetUserCounter(int count);
+extern int TvMisc_SetUserPetResetEnable(int enable);
+extern int TvMisc_SetSystemPetResetEnable(int enable);
+extern int TvMisc_SetSystemPetEnable(int enable);
+extern int TvMisc_SetSystemPetCounter(int count);
+extern void TvMisc_EnableWDT(bool kernelpet_disable, unsigned int userpet_enable, unsigned int kernelpet_timeout, unsigned int userpet_timeout, unsigned int userpet_reset);
+extern void TvMisc_DisableWDT(unsigned int userpet_enable);
+extern int I2C_WriteNbyte(int i2c_no, int dev_addr, int slave_addr, int len, unsigned char data_buf[]);
+extern int I2C_ReadNbyte(int i2c_no, int dev_addr, int slave_addr, int len, unsigned char data_buf[]);
+extern int GetTvDBDefineSize();
+extern int SetFileAttrValue(const char *fp, const char value[]);
+extern int GetFileAttrIntValue(const char *fp);
+
+extern int Get_Fixed_NonStandard(void);
+extern int Set_Fixed_NonStandard(int value);
+
+extern int get_hardware_name(char *hardware);
+
+extern int TvMisc_DeleteDirFiles(const char *strPath, int flag);
+
+extern int cfg_get_one_item(const char *key_str, const char *strDelimit, int item_index, char cfg_str[]);
+extern int Tv_Utils_CheckFs(void);
+extern int Tv_Utils_SetFileAttrStr(const char *file_path, char val_str_buf[]);
+extern int Tv_Utils_GetFileAttrStr(const char *file_path, int buf_size, char val_str_buf[]);
+extern int Tv_Utils_IsFileExist(const char *file_name);
+extern void monitor_info_name_init ( unsigned char *edidbuf );
+extern void monitor_info_set_name ( unsigned char *edidbuf );
+extern void monitor_info_set_imagesize ( unsigned char *edidbuf );
+extern void monitor_info_edid_checksum ( unsigned char *edidbuf );
+extern int reboot_sys_by_fbc_edid_info();
+extern int reboot_sys_by_fbc_uart_panel_info();
+extern int GetPlatformHaveFBCFlag();
+extern int GetPlatformHaveDDFlag();
+
+#define CC_PROJECT_INFO_ITEM_MAX_LEN (64)
+
+typedef struct project_info_s {
+ char version[CC_PROJECT_INFO_ITEM_MAX_LEN];
+ char panel_type[CC_PROJECT_INFO_ITEM_MAX_LEN];
+ char panel_outputmode[CC_PROJECT_INFO_ITEM_MAX_LEN];
+ char panel_rev[CC_PROJECT_INFO_ITEM_MAX_LEN];
+ char panel_name[CC_PROJECT_INFO_ITEM_MAX_LEN];
+ char amp_curve_name[CC_PROJECT_INFO_ITEM_MAX_LEN];
+} project_info_t;
+
+extern unsigned int CalCRC32(unsigned int crc, const unsigned char *ptr, unsigned int buf_len);
+extern int GetProjectInfo(project_info_t *proj_info_ptr);
+
+//extern void SSMRewriteEdidInfo ( unsigned char *edidbuf );
+//extern int HandleEdid ( int op_type, int op_direct, unsigned char edid_buf[], unsigned char def_buf[] );
+//extern int SSMSetHdmiEdid();
+#define AML_DBG_REGS_IOC_MAGIC 'R'
+
+typedef struct aml_debug_reg_s {
+ unsigned int addr;
+ unsigned int val;
+ unsigned char mode;
+} aml_debug_reg_t;
+
+typedef struct aml_debug_bit_s {
+ unsigned int addr;
+ unsigned int val;
+ unsigned int start;
+ unsigned int len;
+} aml_debug_bit_t;
+
+/*ioctl for reg*/
+#define AMLDBG_IOC_CBUS_REG_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x01, struct aml_debug_reg_s)
+#define AMLDBG_IOC_CBUS_REG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x02, struct aml_debug_reg_s)
+#define AMLDBG_IOC_APB_REG_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x03, struct aml_debug_reg_s)
+#define AMLDBG_IOC_APB_REG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x04, struct aml_debug_reg_s)
+#define AMLDBG_IOC_AXI_REG_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x05, struct aml_debug_reg_s)
+#define AMLDBG_IOC_AXI_REG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x06, struct aml_debug_reg_s)
+#define AMLDBG_IOC_AHB_REG_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x07, struct aml_debug_reg_s)
+#define AMLDBG_IOC_AHB_REG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x08, struct aml_debug_reg_s)
+#define AMLDBG_IOC_MPEG_REG_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x09, struct aml_debug_reg_s)
+#define AMLDBG_IOC_MPEG_REG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x0a, struct aml_debug_reg_s)
+
+/*ioctl for bit*/
+#define AMLDBG_IOC_CBUS_BIT_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x21, aml_debug_bit_t)
+#define AMLDBG_IOC_CBUS_BIT_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x22, aml_debug_bit_t)
+#define AMLDBG_IOC_APB_BIT_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x23, aml_debug_bit_t)
+#define AMLDBG_IOC_APB_BIT_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x24, aml_debug_bit_t)
+#define AMLDBG_IOC_AXI_BIT_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x25, aml_debug_bit_t)
+#define AMLDBG_IOC_AXI_BIT_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x26, aml_debug_bit_t)
+#define AMLDBG_IOC_AHB_BIT_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x27, aml_debug_bit_t)
+#define AMLDBG_IOC_AHB_BIT_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x28, aml_debug_bit_t)
+#define AMLDBG_IOC_MPEG_BIT_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x29, aml_debug_bit_t)
+#define AMLDBG_IOC_MPEG_BIT_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x30, aml_debug_bit_t)
+
+/*ioctl for gamma*/
+#define AMLDBG_IOC_SGR_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0X15, int)
+#define AMLDBG_IOC_SGG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0X16, int)
+#define AMLDBG_IOC_SGB_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0X17, int)
+
+#define AMLDBG_IOC_AAPB_REG_RD _IOR(AML_DBG_REGS_IOC_MAGIC, 0x18, struct aml_debug_reg_s)
+#define AMLDBG_IOC_AAPB_REG_WR _IOW(AML_DBG_REGS_IOC_MAGIC, 0x19, struct aml_debug_reg_s)
+#endif //__TV_MISC_H__
diff --git a/tvapi/libtv/tvutils/zepoll.cpp b/tvapi/libtv/tvutils/zepoll.cpp
index 9f03568..873a2dd 100644
--- a/tvapi/libtv/tvutils/zepoll.cpp
+++ b/tvapi/libtv/tvutils/zepoll.cpp
@@ -2,87 +2,87 @@
Epoll::Epoll(int _max, int maxevents): max(_max),
- epoll_fd(-1),
- epoll_timeout(0),
- epoll_maxevents(maxevents),
- backEvents(0)
+ epoll_fd(-1),
+ epoll_timeout(0),
+ epoll_maxevents(maxevents),
+ backEvents(0)
{
}
Epoll::~Epoll()
{
- if (isValid()) {
- close(epoll_fd);
- }
- delete[] backEvents;
+ if (isValid()) {
+ close(epoll_fd);
+ }
+ delete[] backEvents;
}
inline
bool Epoll::isValid() const
{
- return epoll_fd > 0;
+ return epoll_fd > 0;
}
void Epoll::setTimeout(int timeout)
{
- epoll_timeout = timeout;
+ epoll_timeout = timeout;
}
inline
void Epoll::setMaxEvents(int maxevents)
{
- epoll_maxevents = maxevents;
+ epoll_maxevents = maxevents;
}
inline
const epoll_event *Epoll::events() const
{
- return backEvents;
+ return backEvents;
}
int Epoll::create()
{
- epoll_fd = ::epoll_create(max);
- if (isValid()) {
- backEvents = new epoll_event[epoll_maxevents];
- }
- return epoll_fd;
+ epoll_fd = ::epoll_create(max);
+ if (isValid()) {
+ backEvents = new epoll_event[epoll_maxevents];
+ }
+ return epoll_fd;
}
int Epoll::add(int fd, epoll_event *event)
{
- if (isValid()) {
- return ::epoll_ctl(epoll_fd, ADD, fd, event);
- }
- return -1;
+ if (isValid()) {
+ return ::epoll_ctl(epoll_fd, ADD, fd, event);
+ }
+ return -1;
}
int Epoll::mod(int fd, epoll_event *event)
{
- if (isValid()) {
- return ::epoll_ctl(epoll_fd, MOD, fd, event);
- }
- return -1;
+ if (isValid()) {
+ return ::epoll_ctl(epoll_fd, MOD, fd, event);
+ }
+ return -1;
}
int Epoll::del(int fd, epoll_event *event)
{
- if (isValid()) {
- return ::epoll_ctl(epoll_fd, DEL, fd, event);
- }
- return -1;
+ if (isValid()) {
+ return ::epoll_ctl(epoll_fd, DEL, fd, event);
+ }
+ return -1;
}
int Epoll::wait()
{
- if (isValid()) {
- return ::epoll_wait(epoll_fd, backEvents, epoll_maxevents, epoll_timeout);
- }
- return -1;
+ if (isValid()) {
+ return ::epoll_wait(epoll_fd, backEvents, epoll_maxevents, epoll_timeout);
+ }
+ return -1;
}
diff --git a/tvapi/libtv/tvutils/zepoll.h b/tvapi/libtv/tvutils/zepoll.h
index cf4ebac..9ba4c25 100644
--- a/tvapi/libtv/tvutils/zepoll.h
+++ b/tvapi/libtv/tvutils/zepoll.h
@@ -9,37 +9,36 @@
/**
* @brief The Epoll class 对epollçš„å°è£…
*/
-class Epoll
-{
+class Epoll {
public:
- /**
- *
- */
- enum EPOLL_OP {ADD = EPOLL_CTL_ADD, MOD = EPOLL_CTL_MOD, DEL = EPOLL_CTL_DEL};
- /**
- * 最大的连接数和最大的回传事件数
- */
- Epoll(int _max = 30, int maxevents = 20);
- ~Epoll();
- int create();
- int add(int fd, epoll_event *event);
- int mod(int fd, epoll_event *event);
- int del(int fd, epoll_event *event);
- void setTimeout(int timeout);
- void setMaxEvents(int maxevents);
- int wait();
- const epoll_event *events() const;
- const epoll_event &operator[](int index)
- {
- return backEvents[index];
- }
+ /**
+ *
+ */
+ enum EPOLL_OP {ADD = EPOLL_CTL_ADD, MOD = EPOLL_CTL_MOD, DEL = EPOLL_CTL_DEL};
+ /**
+ * 最大的连接数和最大的回传事件数
+ */
+ Epoll(int _max = 30, int maxevents = 20);
+ ~Epoll();
+ int create();
+ int add(int fd, epoll_event *event);
+ int mod(int fd, epoll_event *event);
+ int del(int fd, epoll_event *event);
+ void setTimeout(int timeout);
+ void setMaxEvents(int maxevents);
+ int wait();
+ const epoll_event *events() const;
+ const epoll_event &operator[](int index)
+ {
+ return backEvents[index];
+ }
private:
- bool isValid() const;
- int max;
- int epoll_fd;
- int epoll_timeout;
- int epoll_maxevents;
- epoll_event *backEvents;
+ bool isValid() const;
+ int max;
+ int epoll_fd;
+ int epoll_timeout;
+ int epoll_maxevents;
+ epoll_event *backEvents;
};
diff --git a/tvapi/libtv/version/version.cpp b/tvapi/libtv/version/version.cpp
index 8e8e82a..9a48bbd 100644
--- a/tvapi/libtv/version/version.cpp
+++ b/tvapi/libtv/version/version.cpp
@@ -1,94 +1,94 @@
-#include <stdio.h>
-#include <string.h>
-#include <android/log.h>
-
-#include "version.h"
-
-static char gitversionstr[256] = "N/A";
-
-static int tvservice_version_info_init(void)
-{
- static int info_is_inited = 0;
- int dirty_num = 0;
-
- if (info_is_inited > 0) {
- return 0;
- }
- info_is_inited++;
-
-#ifdef HAVE_VERSION_INFO
-
-#ifdef LIBTVSERVICE_GIT_UNCOMMIT_FILE_NUM
-#if LIBTVSERVICE_GIT_UNCOMMIT_FILE_NUM>0
- dirty_num = LIBTVSERVICE_GIT_UNCOMMIT_FILE_NUM;
-#endif
-#endif
-
-#ifdef LIBTVSERVICE_GIT_VERSION
- if (dirty_num > 0) {
- snprintf(gitversionstr, 250, "%s-with-%d-dirty-files", LIBTVSERVICE_GIT_VERSION, dirty_num);
- } else {
- snprintf(gitversionstr, 250, "%s", LIBTVSERVICE_GIT_VERSION);
- }
-#endif
-
-#endif
-
- return 0;
-}
-
-const char *tvservice_get_git_version_info(void)
-{
- tvservice_version_info_init();
- return gitversionstr;
-}
-
-const char *tvservice_get_last_chaned_time_info(void)
-{
-#ifdef HAVE_VERSION_INFO
-#ifdef LIBTVSERVICE_LAST_CHANGED
- return LIBTVSERVICE_LAST_CHANGED;
-#endif
-#endif
- return " Unknow ";
-}
-
-const char *tvservice_get_git_branch_info(void)
-{
-#ifdef HAVE_VERSION_INFO
-#ifdef LIBTVSERVICE_GIT_BRANCH
- return LIBTVSERVICE_GIT_BRANCH;
-#endif
-#endif
- return " Unknow ";
-}
-
-const char *tvservice_get_build_time_info(void)
-{
-#ifdef HAVE_VERSION_INFO
-#ifdef LIBTVSERVICE_BUILD_TIME
- return LIBTVSERVICE_BUILD_TIME;
-#endif
-#endif
- return " Unknow ";
-}
-
-const char *tvservice_get_build_name_info(void)
-{
-#ifdef HAVE_VERSION_INFO
-#ifdef LIBTVSERVICE_BUILD_NAME
- return LIBTVSERVICE_BUILD_NAME;
-#endif
-#endif
- return " Unknow ";
-}
-
-const char *tvservice_get_board_version_info(void)
-{
-#ifdef HAVE_VERSION_INFO
-#ifdef TVAPI_BOARD_VERSION
- return TVAPI_BOARD_VERSION;
-#endif
-#endif
- return " Unknow ";
-}
+#include <stdio.h>
+#include <string.h>
+#include <android/log.h>
+
+#include "version.h"
+
+static char gitversionstr[256] = "N/A";
+
+static int tvservice_version_info_init(void)
+{
+ static int info_is_inited = 0;
+ int dirty_num = 0;
+
+ if (info_is_inited > 0) {
+ return 0;
+ }
+ info_is_inited++;
+
+#ifdef HAVE_VERSION_INFO
+
+#ifdef LIBTVSERVICE_GIT_UNCOMMIT_FILE_NUM
+#if LIBTVSERVICE_GIT_UNCOMMIT_FILE_NUM>0
+ dirty_num = LIBTVSERVICE_GIT_UNCOMMIT_FILE_NUM;
+#endif
+#endif
+
+#ifdef LIBTVSERVICE_GIT_VERSION
+ if (dirty_num > 0) {
+ snprintf(gitversionstr, 250, "%s-with-%d-dirty-files", LIBTVSERVICE_GIT_VERSION, dirty_num);
+ } else {
+ snprintf(gitversionstr, 250, "%s", LIBTVSERVICE_GIT_VERSION);
+ }
+#endif
+
+#endif
+
+ return 0;
+}
+
+const char *tvservice_get_git_version_info(void)
+{
+ tvservice_version_info_init();
+ return gitversionstr;
+}
+
+const char *tvservice_get_last_chaned_time_info(void)
+{
+#ifdef HAVE_VERSION_INFO
+#ifdef LIBTVSERVICE_LAST_CHANGED
+ return LIBTVSERVICE_LAST_CHANGED;
+#endif
+#endif
+ return " Unknow ";
+}
+
+const char *tvservice_get_git_branch_info(void)
+{
+#ifdef HAVE_VERSION_INFO
+#ifdef LIBTVSERVICE_GIT_BRANCH
+ return LIBTVSERVICE_GIT_BRANCH;
+#endif
+#endif
+ return " Unknow ";
+}
+
+const char *tvservice_get_build_time_info(void)
+{
+#ifdef HAVE_VERSION_INFO
+#ifdef LIBTVSERVICE_BUILD_TIME
+ return LIBTVSERVICE_BUILD_TIME;
+#endif
+#endif
+ return " Unknow ";
+}
+
+const char *tvservice_get_build_name_info(void)
+{
+#ifdef HAVE_VERSION_INFO
+#ifdef LIBTVSERVICE_BUILD_NAME
+ return LIBTVSERVICE_BUILD_NAME;
+#endif
+#endif
+ return " Unknow ";
+}
+
+const char *tvservice_get_board_version_info(void)
+{
+#ifdef HAVE_VERSION_INFO
+#ifdef TVAPI_BOARD_VERSION
+ return TVAPI_BOARD_VERSION;
+#endif
+#endif
+ return " Unknow ";
+}
diff --git a/tvapi/libtv/version/version.h b/tvapi/libtv/version/version.h
index e3259cb..d09082d 100644
--- a/tvapi/libtv/version/version.h
+++ b/tvapi/libtv/version/version.h
@@ -1,11 +1,11 @@
-#ifndef __LIBTVSERVICE_VERSION_H__
-#define __LIBTVSERVICE_VERSION_H__
-
-extern const char *tvservice_get_git_version_info(void);
-extern const char *tvservice_get_last_chaned_time_info(void);
-extern const char *tvservice_get_git_branch_info(void);
-extern const char *tvservice_get_build_time_info(void);
-extern const char *tvservice_get_build_name_info(void);
-extern const char *tvservice_get_board_version_info(void);
-
-#endif //__LIBTVSERVICE_VERSION_H__
+#ifndef __LIBTVSERVICE_VERSION_H__
+#define __LIBTVSERVICE_VERSION_H__
+
+extern const char *tvservice_get_git_version_info(void);
+extern const char *tvservice_get_last_chaned_time_info(void);
+extern const char *tvservice_get_git_branch_info(void);
+extern const char *tvservice_get_build_time_info(void);
+extern const char *tvservice_get_build_name_info(void);
+extern const char *tvservice_get_board_version_info(void);
+
+#endif //__LIBTVSERVICE_VERSION_H__
diff --git a/tvapi/libtv/vpp/CPQdb.cpp b/tvapi/libtv/vpp/CPQdb.cpp
index e4a90ec..83d1bc1 100644
--- a/tvapi/libtv/vpp/CPQdb.cpp
+++ b/tvapi/libtv/vpp/CPQdb.cpp
@@ -1,1535 +1,1648 @@
-/*
- * CPQdb.cpp
- *
- * Created on: 2011-12-13
- * Author: casey
- *
- * change 2015.04
- * showbo
- */
-
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include "CPQdb.h"
-#include "../tvutils/tvutils.h"
-#include "../tvutils/tvutils.h"
-
-#if (PQ_NO_ANDROID == 0)
-#include <android/log.h>
-
-#define LOG_TAG "CPQdb"
-#include "CTvLog.h"
-#endif
-
-
-#if (PQ_NO_ANDROID == 1)
-using namespace std;
-#endif
-
-//#define CPQDB_DEBUG
-
-#define BRIGHTNESS_ID 0
-#define CONTRAST_ID 1
-#define SATURATION_ID 1
-#define HUE_ID 0
-#define SHARPNESS_ID 1
-
-//static char *str_buf[256];
-
-#define ID_FIELD "TableID"
-#define NR_LEVEL_NAME "NRLevel"
-#define CM_LEVEL_NAME "CMLevel"
-#define LEVEL_NAME "Level"
-#define ADC_SETTING "ADC_Settings"
-#define CVD2_SETTING "CVD2_Settings"
-#define PORT "Port"
-#define FORMAT "Format"
-
-
-#define CC_LINE_MAX_LEN (1024)
-
-#define LOG_TAG "CPQdb"
-//#define CPQDB_DEBUG
-
-CPqData::CPqData()
-{
- int i = 0, j = 0;
-
- for (i = 0; i < 15; i++) {
- pq_bri_data[i].TotalNode = 0;
- pq_bri_data[i].NodeValue = 0;
- pq_bri_data[i].IndexValue = 0;
- pq_bri_data[i].RegValue = 0;
- pq_bri_data[i].step = 0;
-
- pq_con_data[i].TotalNode = 0;
- pq_con_data[i].NodeValue = 0;
- pq_con_data[i].IndexValue = 0;
- pq_con_data[i].RegValue = 0;
- pq_con_data[i].step = 0;
-
- pq_sat_data[i].TotalNode = 0;
- pq_sat_data[i].NodeValue = 0;
- pq_sat_data[i].IndexValue = 0;
- pq_sat_data[i].RegValue = 0;
- pq_sat_data[i].step = 0;
-
- pq_hue_data[i].TotalNode = 0;
- pq_hue_data[i].NodeValue = 0;
- pq_hue_data[i].IndexValue = 0;
- pq_hue_data[i].RegValue = 0;
- pq_hue_data[i].step = 0;
- }
-
- for (i = 0; i < 10; i++) {
- pq_sharpness_reg_data[i].length = 0;
- for (j = 0; j < 50; j++) {
- pq_sharpness_reg_data[i].reg_data[j].TotalNode = 0;
- pq_sharpness_reg_data[i].reg_data[j].Value.type = 0;
- pq_sharpness_reg_data[i].reg_data[j].Value.addr = 0;
- pq_sharpness_reg_data[i].reg_data[j].Value.mask = 0;
- pq_sharpness_reg_data[i].reg_data[j].Value.val = 0;
- pq_sharpness_reg_data[i].reg_data[j].NodeValue = 0;
- pq_sharpness_reg_data[i].reg_data[j].IndexValue = 0;
- pq_sharpness_reg_data[i].reg_data[j].step = 0;
- }
- }
-}
-
-CPqData::~CPqData()
-{
-}
-
-int CPqData::openDB()
-{
- int rval;
- project_info_t tmp_info;
- char *PARAM_PQ = "/param/pq.db";
- char SYSTEM_PQ[128] = {0};
- char tmp_buf[128] = {0};
-
- strcpy(SYSTEM_PQ, "/system/etc/pq.db");
-
- if (GetProjectInfo(&tmp_info) == 0) {
- strcpy(tmp_buf, "/system/etc/");
- strcat(tmp_buf, tmp_info.panel_type);
- strcat(tmp_buf, ".db");
- if (access(tmp_buf, 0) == 0) {
- strncpy(SYSTEM_PQ, tmp_buf, sizeof(SYSTEM_PQ) - 1);
- }
- }
-
- if (access(PARAM_PQ, 0) < 0) {
- CFile file(SYSTEM_PQ);
- if (file.copyTo(PARAM_PQ) != 0) {
- LOGE("%s, copy file \"%s\" to \"%s\" error", __FUNCTION__, SYSTEM_PQ, PARAM_PQ);
- return -1;
- } else {
- LOGD("%s, copy file \"%s\" to \"%s\" ok", __FUNCTION__, SYSTEM_PQ, PARAM_PQ);
- }
- }
-
- closeDb();
- rval = openDb(PARAM_PQ);
-
- char *err;
- bool isOk = integrityCheck();
- if (!isOk) {
- CFile file ( SYSTEM_PQ );
- if ( file.copyTo ( PARAM_PQ ) != 0 ) {
- LOGE ( "%s, copy file = %s , error", __FUNCTION__, SYSTEM_PQ );
- return -1;
- } else {
- closeDb();
- rval = openDb(PARAM_PQ);
- LOGD ( "%s, copy file = %s , ok", __FUNCTION__, SYSTEM_PQ );
- }
- }
- return rval;
-}
-
-int CPqData::getRegValues(tvin_port_t source, tvin_sig_fmt_t signal, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
-{
- CSqlite::Cursor c_tablelist, c_reg_list;
- int iOutRet = 0;
- char sqlmaster[256];
- int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
- //first get table name
- sprintf(sqlmaster, "select TableName from GeneralCommonTable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d ;",
- source, signal, mode);
- this->select(sqlmaster, c_tablelist);
- int index_am_reg = 0;
- if (c_tablelist.moveToFirst()) { //for table list
- int index_tablename = c_tablelist.getColumnIndex("TableName");
- do {
- sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s;", c_tablelist.getString(index_tablename).string());
- this->select(sqlmaster, c_reg_list);
- if (c_reg_list.moveToFirst()) { //reg list for each table
- int index_type = 0;//c_reg_list.getColumnIndex("RegType");
- int index_addr = 1;//c_reg_list.getColumnIndex("RegAddr");
- int index_mask = 2;//c_reg_list.getColumnIndex("RegMask");
- int index_val = 3;//c_reg_list.getColumnIndex("RegValue");
- do {
- regs->am_reg[index_am_reg].type = c_reg_list.getInt(index_type);
- regs->am_reg[index_am_reg].addr = c_reg_list.getInt(index_addr);
- regs->am_reg[index_am_reg].mask = c_reg_list.getInt(index_mask);
- regs->am_reg[index_am_reg].val = c_reg_list.getInt(index_val);
- index_am_reg++;
- } while (c_reg_list.moveToNext());
- }
- } while (c_tablelist.moveToNext());
- }
- //
- regs->length = index_am_reg;
- LOGD("getRegValues length = %d", regs->length);
- return index_am_reg;
-}
-
-int CPqData::getRegValuesByValue(const char *name, const char *f_name, const char *f2_name, const int val,
- const int val2, am_regs_t *regs)
-{
- CSqlite::Cursor c_reg_list;
- char sqlmaster[256];
- int rval = -1;
- //first get table name
- if ((strlen(f2_name) == 0) && (val2 == 0))
- sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s where %s = %d;", name, f_name, val);
- else
- sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s where %s = %d and %s = %d;", name, f_name, val,
- f2_name, val2);
-
- rval = this->select(sqlmaster, c_reg_list);
- int count = c_reg_list.getCount();
- if (count > 512) {
- LOGD("getRegValuesByValue regs is too more, in pq.db count = %d", count);
- return -1;
- }
- int index_am_reg = 0;
- if (c_reg_list.moveToFirst()) { //reg list for each table
- int index_type = 0;//c_reg_list.getColumnIndex("RegType");
- int index_addr = 1;//c_reg_list.getColumnIndex("RegAddr");
- int index_mask = 2;//c_reg_list.getColumnIndex("RegMask");
- int index_val = 3;//c_reg_list.getColumnIndex("RegValue");
- do {
- regs->am_reg[index_am_reg].type = c_reg_list.getInt(index_type);
- regs->am_reg[index_am_reg].addr = c_reg_list.getInt(index_addr);
- regs->am_reg[index_am_reg].mask = c_reg_list.getInt(index_mask);
- regs->am_reg[index_am_reg].val = c_reg_list.getInt(index_val);
- index_am_reg++;
- } while (c_reg_list.moveToNext());
- } else rval = -1;
- //
- regs->length = index_am_reg;
- LOGD("getRegValuesByValue length = %d", regs->length);
- return rval;
-}
-
-int CPqData::getRegValuesByValue_long(const char *name, const char *f_name, const char *f2_name, const int val, const int val2, am_regs_t *regs, am_regs_t *regs_1)
-{
- CSqlite::Cursor c_reg_list;
- char sqlmaster[256];
- int rval = -1;
- //first get table name
- if ((strlen(f2_name) == 0) && (val2 == 0))
- sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s where %s = %d;", name, f_name, val);
- else
- sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s where %s = %d and %s = %d;", name, f_name, val,
- f2_name, val2);
-
- rval = this->select(sqlmaster, c_reg_list);
-
- int index_am_reg = 0;
- int count = c_reg_list.getCount();
- if (count > 1024) {
- LOGD("getRegValuesByValue_long regs is too more, in pq.db count = %d", count);
- return -1;
- }
- if (c_reg_list.moveToFirst()) { //reg list for each table
- int index_type = 0;//c_reg_list.getColumnIndex("RegType");
- int index_addr = 1;//c_reg_list.getColumnIndex("RegAddr");
- int index_mask = 2;//c_reg_list.getColumnIndex("RegMask");
- int index_val = 3;//c_reg_list.getColumnIndex("RegValue");
- do {
- if (index_am_reg < 512) {
- regs->am_reg[index_am_reg].type = c_reg_list.getInt(index_type);
- regs->am_reg[index_am_reg].addr = c_reg_list.getInt(index_addr);
- regs->am_reg[index_am_reg].mask = c_reg_list.getInt(index_mask);
- regs->am_reg[index_am_reg].val = c_reg_list.getInt(index_val);
- } else if (index_am_reg >= 512 && index_am_reg < 1024) {
- regs_1->am_reg[index_am_reg - 512].type = c_reg_list.getInt(index_type);
- regs_1->am_reg[index_am_reg - 512].addr = c_reg_list.getInt(index_addr);
- regs_1->am_reg[index_am_reg - 512].mask = c_reg_list.getInt(index_mask);
- regs_1->am_reg[index_am_reg - 512].val = c_reg_list.getInt(index_val);
- } else {
- }
- index_am_reg++;
- } while (c_reg_list.moveToNext());
- } else rval = -1;
- //
- if (count < 512) {
- regs->length = index_am_reg;
- } else if (index_am_reg >= 512 && index_am_reg < 1024) {
- regs->length = 512;
- regs_1->length = index_am_reg - 512;
- }
- LOGD("getRegValuesByValue length = %d", index_am_reg);
- return rval;
-}
-int CPqData::PQ_GetBaseColorParams(vpp_color_basemode_t basemode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
- int rval = -1;
- sprintf(sqlmaster, "select TableName from GeneralColormanagementTable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d ;",
- source_port, sig_fmt, mode);
-
- this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- int index_TableName = 0;//c.getColumnIndex("TableName");
- rval = getRegValuesByValue(c.getString(index_TableName), CM_LEVEL_NAME, "", (int)basemode, 0, regs);
- }
- return rval;
-}
-
-int CPqData::PQ_GetCM2Params(vpp_color_management2_t basemode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
- int rval = -1;
- if (source_port >= TVIN_PORT_CVBS0 && source_port <= TVIN_PORT_CVBS7) {
- if (source_port != TVIN_PORT_CVBS3) {
- source_port = TVIN_PORT_CVBS1;
- }
- } else if (source_port >= TVIN_PORT_HDMI0 && source_port <= TVIN_PORT_HDMI7) {
- source_port = TVIN_PORT_HDMI0;
- } else if (source_port > TVIN_PORT_DTV || source_port < TVIN_PORT_NULL) {
- source_port = TVIN_PORT_MPEG0;
- }
-
- if (sig_fmt >= TVIN_SIG_FMT_MAX) {
- sig_fmt = TVIN_SIG_FMT_NULL;
- }
-
- sprintf(sqlmaster, "select TableName from GeneralCM2Table where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d ;",
- source_port, sig_fmt, mode);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- int index_TableName = 0;//c.getColumnIndex("TableName");
- rval = getRegValuesByValue(c.getString(index_TableName), CM_LEVEL_NAME, "", (int)basemode, 0, regs);
- }
- return rval;
-}
-
-int CPqData::PQ_GetNR2Params(vpp_noise_reduction2_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
- int rval = -1;
-
- if (source_port >= TVIN_PORT_CVBS0 && source_port <= TVIN_PORT_CVBS7) {
- if (source_port != TVIN_PORT_CVBS3) {
- source_port = TVIN_PORT_CVBS1;
- }
- } else if (source_port >= TVIN_PORT_HDMI0 && source_port <= TVIN_PORT_HDMI7) {
- source_port = TVIN_PORT_HDMI0;
- } else if (source_port > TVIN_PORT_DTV || source_port < TVIN_PORT_NULL) {
- source_port = TVIN_PORT_MPEG0;
- }
-
- sprintf(sqlmaster, "select TableName from GeneralNR2Table where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d ;",
- source_port, sig_fmt, mode);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- int index_TableName = 0;//c.getColumnIndex("TableName");
- rval = getRegValuesByValue(c.getString(index_TableName), LEVEL_NAME, "", (int)nr_mode, 0, regs);
- }
- return rval;
-}
-
-int CPqData::PQ_GetXVYCCParams(vpp_xvycc_mode_t xvycc_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs, am_regs_t *regs_1)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
- int rval = -1;
-
- if (source_port >= TVIN_PORT_CVBS0 && source_port <= TVIN_PORT_CVBS7) {
- if (source_port != TVIN_PORT_CVBS3) {
- source_port = TVIN_PORT_CVBS1;
- }
- } else if (source_port >= TVIN_PORT_HDMI0 && source_port <= TVIN_PORT_HDMI7) {
- source_port = TVIN_PORT_HDMI0;
- } else if (source_port > TVIN_PORT_DTV || source_port < TVIN_PORT_NULL) {
- source_port = TVIN_PORT_MPEG0;
- }
-
- sprintf(sqlmaster, "select TableName from GeneralXVYCCTable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d ;",
- source_port, sig_fmt, mode);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- int index_TableName = 0;//c.getColumnIndex("TableName");
- rval = getRegValuesByValue_long(c.getString(index_TableName), LEVEL_NAME, "", (int)xvycc_mode, 0, regs, regs_1);
- }
- return rval;
-}
-
-int CPqData::PQ_GetMCDIParams(vpp_mcdi_mode_t mcdi_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
- int rval = -1;
-
- if (source_port >= TVIN_PORT_CVBS0 && source_port <= TVIN_PORT_CVBS7) {
- if (source_port != TVIN_PORT_CVBS3) {
- source_port = TVIN_PORT_CVBS1;
- }
- } else if (source_port >= TVIN_PORT_HDMI0 && source_port <= TVIN_PORT_HDMI7) {
- source_port = TVIN_PORT_HDMI0;
- } else if (source_port > TVIN_PORT_DTV || source_port < TVIN_PORT_NULL) {
- source_port = TVIN_PORT_MPEG0;
- }
-
- sprintf(sqlmaster, "select TableName from GeneralMCDITable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d ;",
- source_port, sig_fmt, mode);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- int index_TableName = 0;//c.getColumnIndex("TableName");
- rval = getRegValuesByValue(c.getString(index_TableName), LEVEL_NAME, "", (int)mcdi_mode, 0, regs);
- }
- return rval;
-}
-
-int CPqData::PQ_GetColorTemperatureParams(vpp_color_temperature_mode_t Tempmode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt,
- tcon_rgb_ogo_t *params)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
-
- int rval = -1;
-
- //default
- params->en = 1;
- params->r_pre_offset = 0;
- params->g_pre_offset = 0;
- params->b_pre_offset = 0;
- params->r_gain = 1024;
- params->g_gain = 1024;
- params->b_gain = 1024;
- params->r_post_offset = 0;
- params->g_post_offset = 0;
- params->b_post_offset = 0;
-
- sprintf(sqlmaster, "select TableName from GeneralWhiteBalanceTable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d;",
- source_port, sig_fmt, trans_fmt);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- int index_TableName = 0;//c.getColumnIndex("TableName");
- sprintf(sqlmaster, "select Enable, R_Pre_Offset, G_Pre_Offset, B_Pre_Offset, R_Gain, G_Gain, B_Gain, R_Post_Offset, G_Post_Offset, B_Post_Offset from %s where "
- "Level = %d and def = 0;", c.getString(index_TableName).string(), (int)Tempmode);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- params->en = c.getInt(0);//index 0
- params->r_pre_offset = c.getInt(1);
- params->g_pre_offset = c.getInt(2);
- params->b_pre_offset = c.getInt(3);
- params->r_gain = c.getInt(4);
- params->g_gain = c.getInt(5);
- params->b_gain = c.getInt(6);
- params->r_post_offset = c.getInt(7);
- params->g_post_offset = c.getInt(8);
- params->b_post_offset = c.getInt(9);//index 9
- }
- }
- return rval;
-}
-int CPqData::PQ_SetColorTemperatureParams(vpp_color_temperature_mode_t Tempmode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt,
- tcon_rgb_ogo_t params)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- char sql[512];
-
- int rval = -1;
-
- sprintf(sqlmaster, "select TableName from GeneralWhiteBalanceTable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d;",
- source_port, sig_fmt, trans_fmt);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- int index_TableName = 0;//c.getColumnIndex("TableName");
- sprintf(sql, "update %s set Enable = %d, "
- "R_Pre_Offset = %d, G_Pre_Offset = %d, B_Pre_Offset = %d, R_Gain = %d, G_Gain = %d, B_Gain = %d, "
- "R_Post_Offset = %d, G_Post_Offset = %d, B_Post_Offset = %d where Level = %d and def = 0;", c.getString(index_TableName).string(),
- params.en, params.r_pre_offset, params.g_pre_offset, params.b_pre_offset, params.r_gain, params.g_gain,
- params.b_gain, params.r_post_offset, params.g_post_offset, params.b_post_offset, Tempmode);
-
- rval = this->exeSql(sql);
- }
- return rval;
-}
-
-int CPqData::PQ_ResetAllColorTemperatureParams(void)
-{
- CSqlite::Cursor c;
- char sqlmaster[512];
-
- int rval = -1;
-
- sprintf(sqlmaster, "select distinct TableName from GeneralWhiteBalanceTable ;");
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- int index_TableName = 0;//c.getColumnIndex("TableName");
- do { //delete
- sprintf(sqlmaster, "delete from %s where def = 0;"
- "insert into %s( Level , Enable , R_Pre_Offset, G_Pre_Offset, B_Pre_Offset, R_Gain, G_Gain, B_Gain, R_Post_Offset, G_Post_Offset, B_Post_Offset, def ) "
- "select Level, Enable, R_Pre_Offset, G_Pre_Offset, B_Pre_Offset, R_Gain, G_Gain, B_Gain, R_Post_Offset, G_Post_Offset, B_Post_Offset, 0 from %s where def = 1;",
- c.getString(index_TableName).string(), c.getString(index_TableName).string(), c.getString(index_TableName).string());
- rval = this->exeSql(sqlmaster);
- } while (c.moveToNext());
- }
- return rval;
-}
-
-int CPqData::PQ_GetDNLPParams(tvin_port_t source_port, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d,
- tvin_trans_fmt_t trans_fmt, ve_dnlp_t *params, ve_dnlp_table_t *newParams, int *dnlpFlag)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
- int rval = -1;
- //default
- params->en = 0;
- params->rt = VE_DNLP_RT_0S;
- params->rl = VE_DNLP_RL_01;
- params->black = VE_DNLP_EXT_00;
- params->white = VE_DNLP_EXT_00;
-
- mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);//(status << 16)|trans_fmt;
-
- sprintf(sqlmaster, "select TableName from GeneralDNLPTable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d ;",
- source_port, fmt, mode);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- int index_TableName = 0;//c.getColumnIndex("TableName");
- sprintf(sqlmaster, "select value from %s ", c.getString(index_TableName).string());
-
- rval = this->select(sqlmaster, c);
- int count = c.getCount();
- if (count == 1) {
- int val;
- c.moveToFirst();
- val = c.getInt(0);//index 0
- *dnlpFlag = 0;
- params->en = (val & 0xf0000000) >> 28;
- params->rt = (ve_dnlp_rt_e)((val & 0x0f000000) >> 24);
- params->rl = (ve_dnlp_rl_e)((val & 0x00ff0000) >> 16);
- params->black = (ve_dnlp_ext_e)((val & 0x0000ff00) >> 8);
- params->white = (ve_dnlp_ext_e)((val & 0x000000ff) >> 0);
- } else if (count > 1) {
- c.moveToFirst();
- c.moveToNext();
- *dnlpFlag = 1;
- newParams->en = c.getInt(0);
- c.moveToNext();
- newParams->method = c.getInt(0);
- c.moveToNext();
- newParams->cliprate = c.getInt(0);
- c.moveToNext();
- newParams->lowrange = c.getInt(0);
- c.moveToNext();
- newParams->hghrange = c.getInt(0);
- c.moveToNext();
- newParams->lowalpha = c.getInt(0);
- c.moveToNext();
- newParams->midalpha = c.getInt(0);
- c.moveToNext();
- newParams->hghalpha = c.getInt(0);
- }
- }
- return rval;
-}
-
-int CPqData::PQ_SetNoLineAllBrightnessParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
-{
- return SetNonlinearMapping(TVPQ_DATA_BRIGHTNESS, source_type, osd0, osd25, osd50, osd75, osd100);
-}
-int CPqData::PQ_GetNoLineAllBrightnessParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
-{
- int osdvalue[5] = {0};
- int rval;
- rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_BRIGHTNESS, source_type, osdvalue);
- *osd0 = osdvalue[0];
- *osd25 = osdvalue[1];
- *osd50 = osdvalue[2];
- *osd75 = osdvalue[3];
- *osd100 = osdvalue[4];
- if (rval) {
- LOGE("PQ_GetNoLineAllBrightnessParams Error %d\n", rval);
- }
- return rval;
-
-}
-
-int CPqData::PQ_GetBrightnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params)
-{
- int val;
-
- GetNonlinearMapping(TVPQ_DATA_BRIGHTNESS, source_port, level, &val);
- *params = CaculateLevelParam(pq_bri_data, bri_nodes, val);
- return 0;
-
-}
-int CPqData::PQ_SetBrightnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
-{
- return 0;
-}
-
-int CPqData::PQ_SetNoLineAllContrastParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
-{
- return SetNonlinearMapping(TVPQ_DATA_CONTRAST, source_type, osd0, osd25, osd50, osd75, osd100);
-}
-int CPqData::PQ_GetNoLineAllContrastParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
-{
- int osdvalue[5] = {0};
- int rval;
- rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_CONTRAST, source_type, osdvalue);
- *osd0 = osdvalue[0];
- *osd25 = osdvalue[1];
- *osd50 = osdvalue[2];
- *osd75 = osdvalue[3];
- *osd100 = osdvalue[4];
- if (rval) {
- LOGE("PQ_GetNoLineAllContrastParams Error %d\n", rval);
- }
- return rval;
-}
-
-int CPqData::PQ_GetContrastParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params)
-{
- int val;
- GetNonlinearMapping(TVPQ_DATA_CONTRAST, source_port, level, &val);
- *params = CaculateLevelParam(pq_con_data, con_nodes, val);
- return 0;
-}
-int CPqData::PQ_SetContrastParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
-{
- return 0;
-}
-
-int CPqData::PQ_SetNoLineAllSaturationParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
-{
- return SetNonlinearMapping(TVPQ_DATA_SATURATION, source_type, osd0, osd25, osd50, osd75, osd100);
-}
-int CPqData::PQ_GetNoLineAllSaturationParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
-{
- int osdvalue[5] = {0};
- int rval;
- rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_SATURATION, source_type, osdvalue);
- *osd0 = osdvalue[0];
- *osd25 = osdvalue[1];
- *osd50 = osdvalue[2];
- *osd75 = osdvalue[3];
- *osd100 = osdvalue[4];
- if (rval) {
- LOGE("PQ_GetNoLineAllSaturationParams Error %d\n", rval);
- }
- return rval;
-}
-
-int CPqData::PQ_GetSaturationParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params)
-{
- int val;
- GetNonlinearMapping(TVPQ_DATA_SATURATION, source_port, level, &val);
- *params = CaculateLevelParam(pq_sat_data, sat_nodes, val);
- return 0;
-}
-int CPqData::PQ_SetSaturationParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
-{
- return 0;
-}
-
-int CPqData::PQ_SetNoLineAllHueParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
-{
- return SetNonlinearMapping(TVPQ_DATA_HUE, source_type, osd0, osd25, osd50, osd75, osd100);
-}
-int CPqData::PQ_GetNoLineAllHueParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
-{
- int osdvalue[5] = {0};
- int rval;
- rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_HUE, source_type, osdvalue);
- *osd0 = osdvalue[0];
- *osd25 = osdvalue[1];
- *osd50 = osdvalue[2];
- *osd75 = osdvalue[3];
- *osd100 = osdvalue[4];
- if (rval) {
- LOGE("PQ_GetNoLineAllHueParams Error %d\n", rval);
- }
- return rval;
-}
-
-int CPqData::PQ_GetHueParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params)
-{
- int val;
- GetNonlinearMapping(TVPQ_DATA_HUE, source_port, level, &val);
- *params = CaculateLevelParam(pq_hue_data, hue_nodes, val);
- return 0;
-}
-int CPqData::PQ_SetHueParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
-{
- return 0;
-}
-
-int CPqData::PQ_SetNoLineAllSharpnessParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
-{
- return SetNonlinearMapping(TVPQ_DATA_SHARPNESS, source_type, osd0, osd25, osd50, osd75, osd100);
-}
-int CPqData::PQ_GetNoLineAllSharpnessParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
-{
- int osdvalue[5] = {0};
- int rval;
- rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_SHARPNESS, source_type, osdvalue);
- *osd0 = osdvalue[0];
- *osd25 = osdvalue[1];
- *osd50 = osdvalue[2];
- *osd75 = osdvalue[3];
- *osd100 = osdvalue[4];
- if (rval) {
- LOGE("PQ_GetNoLineAllSharpnessParams Error %d\n", rval);
- }
- return rval;
-}
-
-int CPqData::PQ_GetSharpnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, am_regs_t *regs)
-{
- int val;
- GetNonlinearMapping(TVPQ_DATA_SHARPNESS, source_port, level, &val);
- LOGD("val = %d\n", val);
- *regs = CaculateLevelRegsParam(pq_sharpness_reg_data, val);
- return 0;
-}
-int CPqData::PQ_GetPLLParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, am_regs_t *regs)
-{
- int ret = -1;
- int i = 0;
-
- ret = getRegValuesByValue(ADC_SETTING, PORT, FORMAT, source_port, sig_fmt, regs);
-#ifdef CPQDB_DEBUG
- if (ret == 0) {
- for (i = 0; i < regs->length; i++) {
- LOGD("%s, =================================================", "TV");
- LOGD("%s, regData.am_reg[%d].type = %d", "TV", i, regs->am_reg[i].type);
- LOGD("%s, regData.am_reg[%d].addr = %d", "TV", i, regs->am_reg[i].addr);
- LOGD("%s, regData.am_reg[%d].mask = %d", "TV", i, regs->am_reg[i].mask);
- LOGD("%s, regData.am_reg[%d].val = %d", "TV", i, regs->am_reg[i].val);
- }
- }
-#endif
- if (regs->am_reg[0].val == 0 && regs->am_reg[1].val == 0 && regs->am_reg[2].val == 0 && regs->am_reg[3].val == 0) {
- LOGE("%s,db's value is all zeros, that's not OK!!!\n", "TV");
- return -1;
- }
- return ret;
-}
-int CPqData::PQ_GetCVD2Params(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, am_regs_t *regs)
-{
- int ret = -1;
- int i = 0;
- ret = getRegValuesByValue(CVD2_SETTING, PORT, FORMAT, source_port, sig_fmt, regs);
-#ifdef CPQDB_DEBUG
- if (ret == 0) {
- for (i = 0; i < regs->length; i++) {
- LOGD("%s, =================================================", "TV");
- LOGD("%s, regData.am_reg[%d].type = %d", "TV", i, regs->am_reg[i].type);
- LOGD("%s, regData.am_reg[%d].addr = %d", "TV", i, regs->am_reg[i].addr);
- LOGD("%s, regData.am_reg[%d].mask = %d", "TV", i, regs->am_reg[i].mask);
- LOGD("%s, regData.am_reg[%d].val = %d", "TV", i, regs->am_reg[i].val);
- }
- }
-#endif
- if (regs->am_reg[0].val == 0 && regs->am_reg[1].val == 0 && regs->am_reg[2].val == 0 && regs->am_reg[3].val == 0) {
- LOGE("%s,db's value is all zeros, that's not OK!!!\n", "TV");
- return -1;
- }
-
- return ret;
-}
-int CPqData::PQ_SetSharpnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, am_regs_t regs)
-{
- return 0;
-}
-
-int CPqData::PQ_SetNoLineAllVolumeParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
-{
- return SetNonlinearMapping(TVPQ_DATA_VOLUME, source_type, osd0, osd25, osd50, osd75, osd100);
-}
-int CPqData::PQ_GetNoLineAllVolumeParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
-{
- int osdvalue[5] = {0};
- int rval;
- rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_VOLUME, source_type, osdvalue);
- *osd0 = osdvalue[0];
- *osd25 = osdvalue[1];
- *osd50 = osdvalue[2];
- *osd75 = osdvalue[3];
- *osd100 = osdvalue[4];
- if (rval) {
- LOGE("PQ_GetNoLineAllSharpnessParams Error %d\n", rval);
- }
- return rval;
-}
-
-int CPqData::PQ_SetVolumeParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
-{
- return 0;
-}
-
-
-int CPqData::PQ_ResetAllNoLineParams(void)
-{
- int rval;
- char sqlmaster[256];
- char *err = NULL;
-
- sprintf(sqlmaster, "delete from NonlinearMapping; "
- "insert into NonlinearMapping(TVIN_PORT, Item_ID, Level, Value) select TVIN_PORT, Item_ID, Level, Value from NonlinearMapping_Default;");
-
- rval = this->exeSql(sqlmaster);
- return rval;
-}
-
-
-int CPqData::PQ_GetNoiseReductionParams(vpp_noise_reduction_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int *params)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
- int rval = -1;
-
- sprintf(sqlmaster, "select TableName from GeneralNoiseReductionTable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d ;",
- source_port, sig_fmt, mode);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- int index_TableName = 0;//c.getColumnIndex("TableName");
- sprintf(sqlmaster, "select NRValue from %s where NRLevel = %d;" , c.getString(index_TableName).string(), (int)nr_mode);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- *params = c.getInt(0);
- }
- }
- return rval;
-}
-
-int CPqData::PQ_SetNoiseReductionParams(vpp_noise_reduction_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int *params)
-{
- return 0;
-}
-
-int CPqData::PQ_GetOverscanParams(tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, vpp_display_mode_t dmode, tvin_cutwin_t *cutwin_t)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
- int rval = -1;
-
- cutwin_t->hs = 0;
- cutwin_t->he = 0;
- cutwin_t->vs = 0;
- cutwin_t->ve = 0;
-
- sprintf(sqlmaster, "select Hs, He, Vs, Ve from OVERSCAN where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d ;",
- source_type, fmt, mode);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- cutwin_t->hs = c.getInt(0);
- cutwin_t->he = c.getInt(1);
- cutwin_t->vs = c.getInt(2);
- cutwin_t->ve = c.getInt(3);
- }
- return rval;
-}
-int CPqData::PQ_SetOverscanParams(tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, tvin_cutwin_t cutwin_t)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
- int rval = -1;
-
- sprintf(sqlmaster, "select * from OVERSCAN where TVIN_PORT = %d and TVIN_SIG_FMT = %d and TVIN_TRANS_FMT = %d;", source_type, fmt, mode);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- sprintf(sqlmaster, "update OVERSCAN set Hs = %d, He = %d, Vs = %d, Ve = %d where TVIN_PORT = %d and TVIN_SIG_FMT = %d and TVIN_TRANS_FMT = %d;",
- cutwin_t.hs, cutwin_t.he, cutwin_t.vs, cutwin_t.ve, source_type, fmt, mode);
- } else {
- sprintf(sqlmaster, "Insert into OVERSCAN(TVIN_PORT, TVIN_SIG_FMT, TVIN_TRANS_FMT, Hs, He, Vs, Ve) values(%d, %d, %d ,%d ,%d, %d, %d);",
- source_type, fmt, mode, cutwin_t.hs, cutwin_t.he, cutwin_t.vs, cutwin_t.ve);
- }
- rval = this->exeSql(sqlmaster);
-
- return rval;
-}
-
-int CPqData::PQ_ResetAllOverscanParams(void)
-{
- int rval;
- char sqlmaster[256];
-
- sprintf(sqlmaster, "delete from OVERSCAN; insert into OVERSCAN(TVIN_PORT, TVIN_SIG_FMT, TVIN_TRANS_FMT, hs, he, vs, ve) select TVIN_PORT, TVIN_SIG_FMT, TVIN_TRANS_FMT, hs, he, vs, ve from OVERSCAN_default;");
- rval = this->exeSql(sqlmaster);
-
- return rval;
-}
-
-int CPqData::PQ_GetPQModeParams(tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
-
- int rval = -1;
-
- sprintf(sqlmaster, "select Brightness, Contrast, Saturation, Hue, Sharpness, Backlight, NR from Picture_Mode where "
- "TVIN_PORT = %d and "
- "Mode = %d ;",
- source_type, pq_mode);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- params->brightness = c.getInt(0);
- params->contrast = c.getInt(1);
- params->saturation = c.getInt(2);
- params->hue = c.getInt(3);
- params->sharpness = c.getInt(4);
- params->backlight = c.getInt(5);
- params->nr = c.getInt(6);
- }
- return rval;
-}
-int CPqData::PQ_SetPQModeParams(tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params)
-{
- int rval;
- char sql[256];
-
- sprintf(sql, "update Picture_Mode set Brightness = %d, Contrast = %d, Saturation = %d, Hue = %d, Sharpness = %d, Backlight = %d, NR= %d "
- " where TVIN_PORT = %d and Mode = %d;",
- params->brightness, params->contrast, params->saturation,
- params->hue, params->sharpness, params->backlight, params->nr,
- source_type, pq_mode);
- rval = this->exeSql(sql);
- return 0;
-}
-
-int CPqData::PQ_SetPQModeParamsByName(const char *name, tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params)
-{
- int rval;
- char sql[256];
-
- sprintf(sql, "insert into %s(TVIN_PORT, Mode, Brightness, Contrast, Saturation, Hue, Sharpness, Backlight, NR)"
- " values(%d,%d,%d,%d,%d,%d,%d,%d,%d);", name, source_type, pq_mode, params->brightness, params->contrast, params->saturation,
- params->hue, params->sharpness, params->backlight, params->nr);
-
- rval = this->exeSql(sql);
- return 0;
-}
-
-int CPqData::PQ_ResetAllPQModeParams(void)
-{
- int rval;
- char sqlmaster[256];
-
- sprintf(sqlmaster, "delete from picture_mode; insert into picture_mode(TVIN_PORT, Mode, Brightness, Contrast, Saturation, Hue, Sharpness, Backlight, NR) select TVIN_PORT, Mode, Brightness, Contrast, Saturation, Hue, Sharpness, Backlight, NR from picture_mode_default;");
-
- rval = this->exeSql(sqlmaster);
- return rval;
-}
-
-int CPqData::PQ_GetGammaSpecialTable(int gammaValue, const char *f_name, tcon_gamma_table_t *gamma_value)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int rval = -1;
-
- sprintf(sqlmaster, "select %s from GAMMA_%d", f_name, gammaValue);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- int index = 0;
- do {
- gamma_value->data[index] = c.getInt(0);
- index++;
- } while (c.moveToNext());
- }
- return rval;
-}
-
-int CPqData::PQ_GetGammaTableR(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_r)
-{
- return PQ_GetGammaTable(panel_id, source_port, fmt, "Red", gamma_r);
-}
-
-int CPqData::PQ_GetGammaTableG(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_g)
-{
- return PQ_GetGammaTable(panel_id, source_port, fmt, "Green", gamma_g);
-}
-
-int CPqData::PQ_GetGammaTableB(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_b)
-{
- return PQ_GetGammaTable(panel_id, source_port, fmt, "Blue", gamma_b);
-}
-
-int CPqData::PQ_GetGammaTable(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, const char *f_name, tcon_gamma_table_t *val)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
-
- int rval = -1;
-
- sprintf(sqlmaster, "select TableName from GeneralGammaTable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d;",
- source_port, fmt);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- int index_TableName = 0;//c.getColumnIndex("TableName");
- sprintf(sqlmaster, "select %s from %s;", f_name, c.getString(index_TableName).string());
-
- rval = this->select(sqlmaster, c);
- if (c.moveToFirst()) {
- int index = 0;
- do {
- val->data[index] = c.getInt(0);
- index++;
- } while (c.moveToNext());
- }
- }
- return rval;
-}
-
-
-int CPqData::PQ_GetVGAAjustPara(tvin_sig_fmt_t vga_fmt, tvafe_vga_parm_t *adjparam)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int rval = -1;
-
- adjparam->clk_step = 0;
- adjparam->phase = 0;
- adjparam->hpos_step = 0;
- adjparam->vpos_step = 0;
- adjparam->vga_in_clean = 0;
-
- sprintf(sqlmaster, "select Clk, Phase, HPos, VPos, Vga_in_clean from VGA_AutoParams where TVIN_SIG_FMT = %d", vga_fmt);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- adjparam->clk_step = c.getInt(0);
- adjparam->phase = c.getInt(1);
- adjparam->hpos_step = c.getInt(2);
- adjparam->vpos_step = c.getInt(3);
- adjparam->vga_in_clean = c.getInt(4);
- }
- return rval;
-}
-int CPqData::PQ_SetVGAAjustPara(tvin_sig_fmt_t vga_fmt, tvafe_vga_parm_t adjparam)
-{
- CSqlite::Cursor c;
- char sql[256];
- int rval = -1;
-
- sprintf(sql, "select * from VGA_AutoParams where TVIN_SIG_FMT = %d;", vga_fmt);
-
- rval = this->select(sql, c);
-
- if (c.moveToFirst()) {
- sprintf(sql, "Insert into VGA_AutoParams(TVIN_SIG_FMT, Clk, Phase, HPos, VPos, Vga_in_clean) values(%d, %d, %d ,%d ,%d, %d);",
- vga_fmt, adjparam.clk_step, adjparam.phase, adjparam.hpos_step, adjparam.vpos_step, adjparam.vga_in_clean);
- } else {
- sprintf(sql, "update VGA_AutoParams set Clk = %d, Phase = %d, HPos = %d, VPos = %d, Vga_in_clean = %d where TVIN_SIG_FMT = %d;",
- adjparam.clk_step, adjparam.phase, adjparam.hpos_step, adjparam.vpos_step, adjparam.vga_in_clean, vga_fmt);
- }
- rval = this->exeSql(sql);
- return rval;
-}
-
-int CPqData::CaculateLevelParam(tvpq_data_t *pq_data, int nodes, int level)
-{
- int i;
-
- for (i = 0; i < nodes; i++) {
- if (level < pq_data[i].IndexValue) {
- break;
- }
- }
-
- if (i == 0) {
- return pq_data[i].RegValue;
- } else if (i == nodes) {
- return pq_data[i - 1].RegValue;
- } else {
- return pq_data[i - 1].RegValue + (level - pq_data[i - 1].IndexValue) * pq_data[i - 1].step;
- }
-}
-
-am_regs_t CPqData::CaculateLevelRegsParam(tvpq_sharpness_regs_t *pq_regs, int level)
-{
- am_regs_t regs;
- int i;
-
- for (i = 0; i < sha_nodes; i++) {
- if (level < pq_regs[i].reg_data[0].IndexValue) {
- break;
- }
- }
-
- if (i == 0) {
- regs.length = pq_regs[i].length;
- for (int j = 0; j < pq_regs[i].length; j++) {
- regs.am_reg[j].type = pq_regs[i].reg_data[j].Value.type;
- regs.am_reg[j].addr = pq_regs[i].reg_data[j].Value.addr;
- regs.am_reg[j].mask = pq_regs[i].reg_data[j].Value.mask;
- regs.am_reg[j].val = pq_regs[i].reg_data[j].Value.val;
- }
-
- } else if (i == sha_nodes) {
- regs.length = pq_regs[i - 1].length;
- for (int j = 0; j < pq_regs[i - 1].length; j++) {
- regs.am_reg[j].type = pq_regs[i - 1].reg_data[j].Value.type;
- regs.am_reg[j].addr = pq_regs[i - 1].reg_data[j].Value.addr;
- regs.am_reg[j].mask = pq_regs[i - 1].reg_data[j].Value.mask;
- regs.am_reg[j].val = pq_regs[i - 1].reg_data[j].Value.val;
- }
- } else {
- regs.length = pq_regs[i - 1].length;
- for (int j = 0; j < pq_regs[i - 1].length; j++) {
- regs.am_reg[j].type = pq_regs[i - 1].reg_data[j].Value.type;
- regs.am_reg[j].addr = pq_regs[i - 1].reg_data[j].Value.addr;
- regs.am_reg[j].mask = pq_regs[i - 1].reg_data[j].Value.mask;
- regs.am_reg[j].val = pq_regs[i - 1].reg_data[j].Value.val + (level - pq_regs[i - 1].reg_data[j].IndexValue) * pq_regs[i - 1].reg_data[j].step;
- }
- }
-
- return regs;
-}
-
-
-int CPqData::GetNonlinearMapping(tvpq_data_type_t data_type, tvin_port_t source_port, int level, int *params)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int rval = -1;
-
- tv_source_input_type_t type;
- //showboz
- type = CTvin::Tvin_SourcePortToSourceInputType(source_port);//???
-
- sprintf(sqlmaster, "select Value from NonlinearMapping where "
- "TVIN_PORT = %d and "
- "Item_ID = %d and "
- "Level = %d ;",
- type, data_type, level);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- *params = c.getInt(0);
- }
- return rval;
-}
-
-int CPqData::GetNonlinearMappingByOSDFac(tvpq_data_type_t data_type, tv_source_input_type_t source_type, int *params)
-{
- CSqlite::Cursor c;
- char sqlmaster[256];
- int rval = -1;
-
- sprintf(sqlmaster, "select Value from NonlinearMapping where "
- "TVIN_PORT = %d and "
- "Item_ID = %d and ("
- "Level = 0 or Level = 25 or Level = 50 or Level = 75 or Level = 100);",
- source_type, data_type);
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- params[0] = c.getInt(0);
- params[1] = c.getInt(1);
- params[2] = c.getInt(2);
- params[3] = c.getInt(3);
- params[4] = c.getInt(4);
- }
- return rval;
-}
-
-int CPqData::SetNonlinearMapping(tvpq_data_type_t data_type, tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
-{
-
- int rval;
- char *err = NULL;
- int osdvalue[101];
- double step[4];
- char sql[256];
-
- step[0] = (osd25 - osd0) / 25.0;
- step[1] = (osd50 - osd25) / 25.0;
- step[2] = (osd75 - osd50) / 25.0;
- step[3] = (osd100 - osd75) / 25.0;
-
-
- for (int i = 0; i <= 100; i++) {
- if (i == 0) {
- osdvalue[i] = osd0;
- } else if ((i > 0) && (i <= 25)) {
- osdvalue[i] = osd0 + (int)(i * step[0]);
- } else if ((i > 25) && (i <= 50)) {
- osdvalue[i] = osd25 + (int)((i - 25) * step[1]);
- } else if ((i > 50) && (i <= 75)) {
- osdvalue[i] = osd50 + (int)((i - 50) * step[2]);
- } else if ((i > 75) && (i <= 100)) {
- osdvalue[i] = osd75 + (int)((i - 75) * step[3]);
- }
- sprintf(sql, "update NonLinearMapping set Value = %d where TVIN_PORT = %d and Item_ID = %d and Level = %d ;", osdvalue[i], source_type, data_type, i);
- if (!(this->exeSql(sql))) {
- return -1;
- }
- }
- return 0;
-}
-
-int CPqData::SetNonlinearMappingByName(const char *name, tvpq_data_type_t data_type, tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
-{
- int rval;
- char *err = NULL;
- int osdvalue[101];
- double step[4];
- char sql[256];
-
- step[0] = (osd25 - osd0) / 25.0;
- step[1] = (osd50 - osd25) / 25.0;
- step[2] = (osd75 - osd50) / 25.0;
- step[3] = (osd100 - osd75) / 25.0;
-
- for (int i = 0; i <= 100; i++) {
- if (i == 0) {
- osdvalue[i] = osd0;
- } else if ((i > 0) && (i <= 25)) {
- osdvalue[i] = osd0 + (int)(i * step[0]);
- } else if ((i > 25) && (i <= 50)) {
- osdvalue[i] = osd25 + (int)((i - 25) * step[1]);
- } else if ((i > 50) && (i <= 75)) {
- osdvalue[i] = osd50 + (int)((i - 50) * step[2]);
- } else if ((i > 75) && (i <= 100)) {
- osdvalue[i] = osd75 + (int)((i - 75) * step[3]);
- }
- memset(sql, '\0', 256);
- sprintf(sql, "insert into %s(TVIN_PORT, Item_ID, Level, Value) values(%d,%d,%d,%d);", name, source_type, data_type, i, osdvalue[i]);
- if (!(this->exeSql(sql))) {
- return -1;
- }
- }
- return 0;
-}
-
-int CPqData::LoadPQData(tvpq_data_type_t data_type, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int flag)
-{
- CSqlite::Cursor c;
- int rval;
- char sqlmaster[256];
- int mode = is2dOr3d;
- tvpq_data_t *pq_data = NULL;
- int *pq_nodes = NULL;
-
- switch (data_type) {
- case TVPQ_DATA_BRIGHTNESS:
- sprintf(sqlmaster, "select TableName from GeneralContrastBrightnessTable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d and "
- "%s = %d;",
- source_port, sig_fmt, mode, ID_FIELD, BRIGHTNESS_ID);
- pq_data = pq_bri_data;
- pq_nodes = &bri_nodes;
- break;
- case TVPQ_DATA_CONTRAST:
- sprintf(sqlmaster, "select TableName from GeneralContrastBrightnessTable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d and "
- "%s = %d;",
- source_port, sig_fmt, mode, ID_FIELD, CONTRAST_ID);
- pq_data = pq_con_data;
- pq_nodes = &con_nodes;
- break;
- case TVPQ_DATA_HUE:
- sprintf(sqlmaster, "select TableName from GeneralSaturationHueTable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d and "
- "%s = %d;",
- source_port, sig_fmt, mode, ID_FIELD, HUE_ID);
- pq_data = pq_hue_data;
- pq_nodes = &hue_nodes;
- break;
- case TVPQ_DATA_SATURATION:
- sprintf(sqlmaster, "select TableName from GeneralSaturationHueTable where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d and "
- "%s = %d;",
- source_port, sig_fmt, mode, ID_FIELD, SATURATION_ID);
- pq_data = pq_sat_data;
- pq_nodes = &sat_nodes;
- break;
- case TVPQ_DATA_SHARPNESS:
- //sprintf(sqlmaster, "select TableName from GeneralSharpnessTable where "
- sprintf(sqlmaster, "select TableName from GeneralSharpnessG9Table where "
- "TVIN_PORT = %d and "
- "TVIN_SIG_FMT = %d and "
- "TVIN_TRANS_FMT = %d and "
- "%s = %d;",
- source_port, sig_fmt, mode, ID_FIELD, SHARPNESS_ID);
- pq_data = NULL;
- pq_nodes = &sha_nodes;
- break;
- default:
- break;
- }
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- switch (data_type) {
- case TVPQ_DATA_BRIGHTNESS:
- case TVPQ_DATA_CONTRAST:
- case TVPQ_DATA_HUE:
- case TVPQ_DATA_SATURATION:
- sprintf(sqlmaster, "select TotalNode, NodeNumber, IndexValue, RegValue, StepUp from %s order by NodeNumber asc;", c.getString(0).string());
- break;
- case TVPQ_DATA_SHARPNESS:
- sprintf(sqlmaster, "select TotalNode, NodeNumber, RegType, RegAddr, RegMask, IndexValue, RegValue, StepUp from %s order by NodeNumber asc;", c.getString(0).string());
- break;
- default:
- break;
- }
- }
-
- rval = this->select(sqlmaster, c);
-
- if (c.moveToFirst()) {
- if (data_type == TVPQ_DATA_SHARPNESS) {
- *pq_nodes = c.getInt(0);//TotalNode?
- int length = c.getCount() / (*pq_nodes);
- int index = 0;
- for (int i = 0; i < *pq_nodes; i++) {
- pq_sharpness_reg_data[i].length = length;
- }
- do {
- pq_sharpness_reg_data[index / length].reg_data[index % length].TotalNode = c.getInt(0);
- pq_sharpness_reg_data[index / length].reg_data[index % length].NodeValue = c.getInt(1);
- pq_sharpness_reg_data[index / length].reg_data[index % length].Value.type = c.getUInt(2);
- pq_sharpness_reg_data[index / length].reg_data[index % length].Value.addr = c.getUInt(3);
- pq_sharpness_reg_data[index / length].reg_data[index % length].Value.mask = c.getUInt(4);
- pq_sharpness_reg_data[index / length].reg_data[index % length].IndexValue = c.getInt(5);
- pq_sharpness_reg_data[index / length].reg_data[index % length].Value.val = c.getUInt(6);
- pq_sharpness_reg_data[index / length].reg_data[index % length].step = c.getF(7);
- index++;
- } while (c.moveToNext());
- } else {
- int index = 0;
- do {
- pq_data[index].TotalNode = c.getInt(0);
- pq_data[index].NodeValue = c.getInt(1);
- pq_data[index].IndexValue = c.getInt(2);
- pq_data[index].RegValue = c.getInt(3);
- pq_data[index].step = c.getF(4);
- if (flag == 1) {
- if (data_type == TVPQ_DATA_BRIGHTNESS) {
- LOGD("%s, bri pq_data[%d].RegValue = %d\n", "TV", index, pq_data[index].RegValue);
- pq_data[index].RegValue -= 64;
- LOGD("%s, bri pq_data[%d].RegValue + 64 = %d\n", "TV", index, pq_data[index].RegValue);
- } else if (data_type == TVPQ_DATA_CONTRAST) {
- LOGD("%s, con pq_data[%d].RegValue = %d\n", "TV", index, pq_data[index].RegValue);
- pq_data[index].RegValue += 64;
- LOGD("%s, con pq_data[%d].RegValue + 64 = %d\n", "TV", index, pq_data[index].RegValue);
- }
- }
- index++;
- } while (c.moveToNext());
- *pq_nodes = index;
- }
- }
-
- return rval;
-}
-
-int CPqData::LoadAllPQData(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int flag)
-{
- int rval = -1;
- rval = LoadPQData(TVPQ_DATA_BRIGHTNESS, source_port, sig_fmt, is2dOr3d, trans_fmt, flag);
- if (rval) {
- return rval;
- }
- rval = LoadPQData(TVPQ_DATA_CONTRAST, source_port, sig_fmt, is2dOr3d, trans_fmt, flag);
- if (rval) {
- return rval;
- }
- rval = LoadPQData(TVPQ_DATA_SATURATION, source_port, sig_fmt, is2dOr3d, trans_fmt, -1);
- if (rval) {
- return rval;
- }
- rval = LoadPQData(TVPQ_DATA_HUE, source_port, sig_fmt, is2dOr3d, trans_fmt, -1);
- if (rval) {
- return rval;
- }
- rval = LoadPQData(TVPQ_DATA_SHARPNESS, source_port, sig_fmt, is2dOr3d, trans_fmt, -1);
- if (rval) {
- return rval;
- }
- return rval;
-}
-
-typedef enum initial_type_e {
- TYPE_PMode = 0,
- TYPE_PMode_Default,
- TYPE_Nonlinear,
- TYPE_NonLinear_Default,
- TYPE_VGA_AUTO,
- TYPE_OVERSCAN,
-} initial_type_t;
-
-const char *Pmode_name[6] = {
- "Picture_Mode",
- "Picture_Mode_Default",
- "NonlinearMapping",
- "NonlinearMapping_Default",
- "VGA_AutoParams",
- "OVERSCAN"
-};
-
-void CPqData::initialTable(int type)
-{
- vpp_pq_para_t pmode_default;
-
- pmode_default.backlight = 100;
- pmode_default.brightness = 50;
- pmode_default.contrast = 50;
- pmode_default.hue = 50;
- pmode_default.nr = 0;
- pmode_default.saturation = 50;
- pmode_default.sharpness = 50;
-
-
- switch (type) {
- case TYPE_PMode:
- case TYPE_PMode_Default:
- for (int i = 0; i < 6; i++ ) {
- for (int j = 0; j < 4; j++) {
- PQ_SetPQModeParamsByName(Pmode_name[type], (tv_source_input_type_t) i, (vpp_picture_mode_t)j, &pmode_default);
- }
- }
- break;
- case TYPE_Nonlinear:
- case TYPE_NonLinear_Default:
- for (int i = 0; i < 6; i++ ) {
- for (int j = 0; j < 5; j++) {
- SetNonlinearMappingByName(Pmode_name[type], (tvpq_data_type_t) j, (tv_source_input_type_t)i, 0, (int)255 / 4.0, (int)255 * 2 / 4.0, (int)255 * 3 / 4.0, 255);
- }
- }
- break;
- case TYPE_VGA_AUTO:
- break;
- case TYPE_OVERSCAN:
- break;
- }
-}
-
-int CPqData::PQ_GetPhaseArray(am_phase_t *am_phase)
-{
- CSqlite::Cursor c;
- int iOutRet = 0;
- char sqlmaster[256];
- sprintf(sqlmaster, "select Phase from Phase order by Format ASC; ");
-
- this->select(sqlmaster, c);
- int nums = 0;
- am_phase->length = c.getCount();
- if (c.moveToFirst()) {
- do {
- am_phase->phase[nums] = c.getInt(0);//col index is 0[Phase]
- nums++;
- } while (c.moveToNext());
- }
- //
- return nums;
-}
-
+/*
+ * CPQdb.cpp
+ *
+ * Created on: 2011-12-13
+ * Author: casey
+ *
+ * change 2015.04
+ * showbo
+ */
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include "CPQdb.h"
+#include "../tvutils/tvutils.h"
+#include "../tvutils/tvutils.h"
+
+#if (PQ_NO_ANDROID == 0)
+#include <android/log.h>
+
+#define LOG_TAG "CPQdb"
+#include "CTvLog.h"
+#endif
+
+
+#if (PQ_NO_ANDROID == 1)
+using namespace std;
+#endif
+
+//#define CPQDB_DEBUG
+
+#define BRIGHTNESS_ID 0
+#define CONTRAST_ID 1
+#define SATURATION_ID 1
+#define HUE_ID 0
+#define SHARPNESS_ID 1
+
+//static char *str_buf[256];
+
+#define ID_FIELD "TableID"
+#define NR_LEVEL_NAME "NRLevel"
+#define CM_LEVEL_NAME "CMLevel"
+#define LEVEL_NAME "Level"
+#define ADC_SETTING "ADC_Settings"
+#define CVD2_SETTING "CVD2_Settings"
+#define PORT "Port"
+#define FORMAT "Format"
+
+
+#define CC_LINE_MAX_LEN (1024)
+
+#define LOG_TAG "CPQdb"
+//#define CPQDB_DEBUG
+
+
+/*int get_pq_from_file(const char *file_name, const char *screen_size, char *key_str_buf[]) {
+ FILE *fp = NULL;
+ int flag = -1;
+ char *str = NULL;
+ char r_line_buf[CC_LINE_MAX_LEN];
+
+ if (file_name == NULL || screen_size == NULL || key_str_buf == NULL) {
+ return -1;
+ }
+
+ fp = fopen(file_name, "r");
+ if (fp == NULL) {
+ LOGE("%s: open file \"%s\" error(%s).\n", "TV", file_name, strerror(errno));
+ return -1;
+ }
+
+ while (fgets(r_line_buf, CC_LINE_MAX_LEN, fp)) {
+ LOGD("%s, fgets_buf = %s\n","TV", r_line_buf);
+ if(NULL != strstr(r_line_buf, screen_size)){
+ LOGD("%s, screen_size_buf = %s\n","TV", r_line_buf);
+ str = (char*)malloc(strlen(r_line_buf));
+ memset(str, 0, strlen(str));
+ if(NULL != str){
+ strcpy(str, r_line_buf);
+ key_str_buf[0] = str;
+ LOGD("%s, key_str_buf[0] = %s\n","TV", key_str_buf[0]);
+ }
+ flag = 0;
+ break;
+ }
+ }
+
+ if(flag != 0)
+ key_str_buf[0] = NULL;
+
+ fclose(fp);
+ fp = NULL;
+
+ return flag;
+}*/
+
+/*int getFileSizeSystemCall(char * strFileName)
+{
+ struct stat temp;
+ stat(strFileName, &temp);
+ return temp.st_size;
+}*/
+
+CPqData::CPqData()
+{
+ int i = 0, j = 0;
+
+ for (i = 0; i < 15; i++) {
+ pq_bri_data[i].TotalNode = 0;
+ pq_bri_data[i].NodeValue = 0;
+ pq_bri_data[i].IndexValue = 0;
+ pq_bri_data[i].RegValue = 0;
+ pq_bri_data[i].step = 0;
+
+ pq_con_data[i].TotalNode = 0;
+ pq_con_data[i].NodeValue = 0;
+ pq_con_data[i].IndexValue = 0;
+ pq_con_data[i].RegValue = 0;
+ pq_con_data[i].step = 0;
+
+ pq_sat_data[i].TotalNode = 0;
+ pq_sat_data[i].NodeValue = 0;
+ pq_sat_data[i].IndexValue = 0;
+ pq_sat_data[i].RegValue = 0;
+ pq_sat_data[i].step = 0;
+
+ pq_hue_data[i].TotalNode = 0;
+ pq_hue_data[i].NodeValue = 0;
+ pq_hue_data[i].IndexValue = 0;
+ pq_hue_data[i].RegValue = 0;
+ pq_hue_data[i].step = 0;
+ }
+
+ for (i = 0; i < 10; i++) {
+ pq_sharpness_reg_data[i].length = 0;
+ for (j = 0; j < 50; j++) {
+ pq_sharpness_reg_data[i].reg_data[j].TotalNode = 0;
+ pq_sharpness_reg_data[i].reg_data[j].Value.type = 0;
+ pq_sharpness_reg_data[i].reg_data[j].Value.addr = 0;
+ pq_sharpness_reg_data[i].reg_data[j].Value.mask = 0;
+ pq_sharpness_reg_data[i].reg_data[j].Value.val = 0;
+ pq_sharpness_reg_data[i].reg_data[j].NodeValue = 0;
+ pq_sharpness_reg_data[i].reg_data[j].IndexValue = 0;
+ pq_sharpness_reg_data[i].reg_data[j].step = 0;
+ }
+ }
+}
+
+CPqData::~CPqData()
+{
+}
+
+int CPqData::openDB()
+{
+ int rval;
+ project_info_t tmp_info;
+ char *PARAM_PQ = "/param/pq.db";
+ char SYSTEM_PQ[128] = {0};
+ char tmp_buf[128] = {0};
+
+ strcpy(SYSTEM_PQ, "/system/etc/pq.db");
+
+ if (GetProjectInfo(&tmp_info) == 0) {
+ strcpy(tmp_buf, "/system/etc/");
+ strcat(tmp_buf, tmp_info.panel_type);
+ strcat(tmp_buf, ".db");
+ if (access(tmp_buf, 0) == 0) {
+ strncpy(SYSTEM_PQ, tmp_buf, sizeof(SYSTEM_PQ) - 1);
+ }
+ }
+
+ if (access(PARAM_PQ, 0) < 0) {
+ CFile file(SYSTEM_PQ);
+ if (file.copyTo(PARAM_PQ) != 0) {
+ LOGE("%s, copy file \"%s\" to \"%s\" error", __FUNCTION__, SYSTEM_PQ, PARAM_PQ);
+ return -1;
+ } else {
+ LOGD("%s, copy file \"%s\" to \"%s\" ok", __FUNCTION__, SYSTEM_PQ, PARAM_PQ);
+ }
+ }
+
+ closeDb();
+ rval = openDb(PARAM_PQ);
+
+ char *err;
+ bool isOk = integrityCheck();
+ if(!isOk) {
+ CFile file ( SYSTEM_PQ );
+ if ( file.copyTo ( PARAM_PQ ) != 0 ) {
+ LOGE ( "%s, copy file = %s , error", __FUNCTION__, SYSTEM_PQ );
+ return -1;
+ } else {
+ closeDb();
+ rval = openDb(PARAM_PQ);
+ LOGD ( "%s, copy file = %s , ok", __FUNCTION__, SYSTEM_PQ );
+ }
+ }
+ return rval;
+}
+
+int CPqData::getRegValues(tvin_port_t source, tvin_sig_fmt_t signal, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
+{
+ CSqlite::Cursor c_tablelist, c_reg_list;
+ int iOutRet = 0;
+ char sqlmaster[256];
+ int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
+ //first get table name
+ sprintf(sqlmaster, "select TableName from GeneralCommonTable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d ;",
+ source, signal, mode);
+ this->select(sqlmaster, c_tablelist);
+ int index_am_reg = 0;
+ if(c_tablelist.moveToFirst()) { //for table list
+ int index_tablename = c_tablelist.getColumnIndex("TableName");
+ do {
+ sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s;", c_tablelist.getString(index_tablename).string());
+ this->select(sqlmaster, c_reg_list);
+ if(c_reg_list.moveToFirst()) { //reg list for each table
+ int index_type = 0;//c_reg_list.getColumnIndex("RegType");
+ int index_addr = 1;//c_reg_list.getColumnIndex("RegAddr");
+ int index_mask = 2;//c_reg_list.getColumnIndex("RegMask");
+ int index_val = 3;//c_reg_list.getColumnIndex("RegValue");
+ do {
+ regs->am_reg[index_am_reg].type = c_reg_list.getInt(index_type);
+ regs->am_reg[index_am_reg].addr = c_reg_list.getInt(index_addr);
+ regs->am_reg[index_am_reg].mask = c_reg_list.getInt(index_mask);
+ regs->am_reg[index_am_reg].val = c_reg_list.getInt(index_val);
+ index_am_reg++;
+ } while(c_reg_list.moveToNext());
+ }
+ } while(c_tablelist.moveToNext());
+ }
+ //
+ regs->length = index_am_reg;
+ LOGD("getRegValues length = %d", regs->length);
+ return index_am_reg;
+}
+
+int CPqData::getRegValuesByValue(const char *name, const char *f_name, const char *f2_name, const int val,
+ const int val2, am_regs_t *regs)
+{
+ CSqlite::Cursor c_reg_list;
+ char sqlmaster[256];
+ int rval = -1;
+ //first get table name
+ if((strlen(f2_name) == 0) && (val2 == 0))
+ sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s where %s = %d;", name, f_name, val);
+ else
+ sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s where %s = %d and %s = %d;", name, f_name, val,
+ f2_name, val2);
+
+ rval = this->select(sqlmaster, c_reg_list);
+ int count = c_reg_list.getCount();
+ if(count > 512) {
+ LOGD("getRegValuesByValue regs is too more, in pq.db count = %d", count);
+ return -1;
+ }
+ int index_am_reg = 0;
+ if(c_reg_list.moveToFirst()) { //reg list for each table
+ int index_type = 0;//c_reg_list.getColumnIndex("RegType");
+ int index_addr = 1;//c_reg_list.getColumnIndex("RegAddr");
+ int index_mask = 2;//c_reg_list.getColumnIndex("RegMask");
+ int index_val = 3;//c_reg_list.getColumnIndex("RegValue");
+ do {
+ regs->am_reg[index_am_reg].type = c_reg_list.getInt(index_type);
+ regs->am_reg[index_am_reg].addr = c_reg_list.getInt(index_addr);
+ regs->am_reg[index_am_reg].mask = c_reg_list.getInt(index_mask);
+ regs->am_reg[index_am_reg].val = c_reg_list.getInt(index_val);
+ index_am_reg++;
+ } while(c_reg_list.moveToNext());
+ } else rval = -1;
+ //
+ regs->length = index_am_reg;
+ LOGD("getRegValuesByValue length = %d", regs->length);
+ return rval;
+}
+
+int CPqData::getRegValuesByValue_long(const char *name, const char *f_name, const char *f2_name, const int val, const int val2, am_regs_t *regs, am_regs_t *regs_1)
+{
+ CSqlite::Cursor c_reg_list;
+ char sqlmaster[256];
+ int rval = -1;
+ //first get table name
+ if((strlen(f2_name) == 0) && (val2 == 0))
+ sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s where %s = %d;", name, f_name, val);
+ else
+ sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s where %s = %d and %s = %d;", name, f_name, val,
+ f2_name, val2);
+
+ rval = this->select(sqlmaster, c_reg_list);
+
+ int index_am_reg = 0;
+ int count = c_reg_list.getCount();
+ if(count > 1024) {
+ LOGD("getRegValuesByValue_long regs is too more, in pq.db count = %d", count);
+ return -1;
+ }
+ if(c_reg_list.moveToFirst()) { //reg list for each table
+ int index_type = 0;//c_reg_list.getColumnIndex("RegType");
+ int index_addr = 1;//c_reg_list.getColumnIndex("RegAddr");
+ int index_mask = 2;//c_reg_list.getColumnIndex("RegMask");
+ int index_val = 3;//c_reg_list.getColumnIndex("RegValue");
+ do {
+ if(index_am_reg < 512) {
+ regs->am_reg[index_am_reg].type = c_reg_list.getInt(index_type);
+ regs->am_reg[index_am_reg].addr = c_reg_list.getInt(index_addr);
+ regs->am_reg[index_am_reg].mask = c_reg_list.getInt(index_mask);
+ regs->am_reg[index_am_reg].val = c_reg_list.getInt(index_val);
+ } else if(index_am_reg >= 512 && index_am_reg < 1024) {
+ regs_1->am_reg[index_am_reg - 512].type = c_reg_list.getInt(index_type);
+ regs_1->am_reg[index_am_reg - 512].addr = c_reg_list.getInt(index_addr);
+ regs_1->am_reg[index_am_reg - 512].mask = c_reg_list.getInt(index_mask);
+ regs_1->am_reg[index_am_reg - 512].val = c_reg_list.getInt(index_val);
+ } else {
+ }
+ index_am_reg++;
+ } while(c_reg_list.moveToNext());
+ } else rval = -1;
+ //
+ if(count < 512) {
+ regs->length = index_am_reg;
+ } else if(index_am_reg >= 512 && index_am_reg < 1024) {
+ regs->length = 512;
+ regs_1->length = index_am_reg - 512;
+ }
+ LOGD("getRegValuesByValue length = %d", index_am_reg);
+ return rval;
+}
+int CPqData::PQ_GetBaseColorParams(vpp_color_basemode_t basemode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
+ int rval = -1;
+ sprintf(sqlmaster, "select TableName from GeneralColormanagementTable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d ;",
+ source_port, sig_fmt, mode);
+
+ this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ int index_TableName = 0;//c.getColumnIndex("TableName");
+ rval = getRegValuesByValue(c.getString(index_TableName), CM_LEVEL_NAME, "", (int)basemode, 0, regs);
+ }
+ return rval;
+}
+
+int CPqData::PQ_GetCM2Params(vpp_color_management2_t basemode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
+ int rval = -1;
+ if(source_port >= TVIN_PORT_CVBS0 && source_port <= TVIN_PORT_CVBS7) {
+ if(source_port != TVIN_PORT_CVBS3) {
+ source_port = TVIN_PORT_CVBS1;
+ }
+ } else if (source_port >= TVIN_PORT_HDMI0 && source_port <= TVIN_PORT_HDMI7) {
+ source_port = TVIN_PORT_HDMI0;
+ } else if(source_port > TVIN_PORT_DTV || source_port < TVIN_PORT_NULL) {
+ source_port = TVIN_PORT_MPEG0;
+ }
+
+ if(sig_fmt >= TVIN_SIG_FMT_MAX) {
+ sig_fmt = TVIN_SIG_FMT_NULL;
+ }
+
+ sprintf(sqlmaster, "select TableName from GeneralCM2Table where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d ;",
+ source_port, sig_fmt, mode);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ int index_TableName = 0;//c.getColumnIndex("TableName");
+ rval = getRegValuesByValue(c.getString(index_TableName), CM_LEVEL_NAME, "", (int)basemode, 0, regs);
+ }
+ return rval;
+}
+
+int CPqData::PQ_GetNR2Params(vpp_noise_reduction2_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
+ int rval = -1;
+
+ if(source_port >= TVIN_PORT_CVBS0 && source_port <= TVIN_PORT_CVBS7) {
+ if(source_port != TVIN_PORT_CVBS3) {
+ source_port = TVIN_PORT_CVBS1;
+ }
+ } else if (source_port >= TVIN_PORT_HDMI0 && source_port <= TVIN_PORT_HDMI7) {
+ source_port = TVIN_PORT_HDMI0;
+ } else if(source_port > TVIN_PORT_DTV || source_port < TVIN_PORT_NULL) {
+ source_port = TVIN_PORT_MPEG0;
+ }
+
+ sprintf(sqlmaster, "select TableName from GeneralNR2Table where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d ;",
+ source_port, sig_fmt, mode);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ int index_TableName = 0;//c.getColumnIndex("TableName");
+ rval = getRegValuesByValue(c.getString(index_TableName), LEVEL_NAME, "", (int)nr_mode, 0, regs);
+ }
+ return rval;
+}
+
+int CPqData::PQ_GetXVYCCParams(vpp_xvycc_mode_t xvycc_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs, am_regs_t *regs_1)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
+ int rval = -1;
+
+ if(source_port >= TVIN_PORT_CVBS0 && source_port <= TVIN_PORT_CVBS7) {
+ if(source_port != TVIN_PORT_CVBS3) {
+ source_port = TVIN_PORT_CVBS1;
+ }
+ } else if (source_port >= TVIN_PORT_HDMI0 && source_port <= TVIN_PORT_HDMI7) {
+ source_port = TVIN_PORT_HDMI0;
+ } else if(source_port > TVIN_PORT_DTV || source_port < TVIN_PORT_NULL) {
+ source_port = TVIN_PORT_MPEG0;
+ }
+
+ sprintf(sqlmaster, "select TableName from GeneralXVYCCTable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d ;",
+ source_port, sig_fmt, mode);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ int index_TableName = 0;//c.getColumnIndex("TableName");
+ rval = getRegValuesByValue_long(c.getString(index_TableName), LEVEL_NAME, "", (int)xvycc_mode, 0, regs, regs_1);
+ }
+ return rval;
+}
+
+int CPqData::PQ_GetMCDIParams(vpp_mcdi_mode_t mcdi_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
+ int rval = -1;
+
+ if(source_port >= TVIN_PORT_CVBS0 && source_port <= TVIN_PORT_CVBS7) {
+ if(source_port != TVIN_PORT_CVBS3) {
+ source_port = TVIN_PORT_CVBS1;
+ }
+ } else if (source_port >= TVIN_PORT_HDMI0 && source_port <= TVIN_PORT_HDMI7) {
+ source_port = TVIN_PORT_HDMI0;
+ } else if(source_port > TVIN_PORT_DTV || source_port < TVIN_PORT_NULL) {
+ source_port = TVIN_PORT_MPEG0;
+ }
+
+ sprintf(sqlmaster, "select TableName from GeneralMCDITable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d ;",
+ source_port, sig_fmt, mode);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ int index_TableName = 0;//c.getColumnIndex("TableName");
+ rval = getRegValuesByValue(c.getString(index_TableName), LEVEL_NAME, "", (int)mcdi_mode, 0, regs);
+ }
+ return rval;
+}
+
+int CPqData::PQ_GetColorTemperatureParams(vpp_color_temperature_mode_t Tempmode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt,
+ tcon_rgb_ogo_t *params)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+
+ int rval = -1;
+
+ //default
+ params->en = 1;
+ params->r_pre_offset = 0;
+ params->g_pre_offset = 0;
+ params->b_pre_offset = 0;
+ params->r_gain = 1024;
+ params->g_gain = 1024;
+ params->b_gain = 1024;
+ params->r_post_offset = 0;
+ params->g_post_offset = 0;
+ params->b_post_offset = 0;
+
+ sprintf(sqlmaster, "select TableName from GeneralWhiteBalanceTable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d;",
+ source_port, sig_fmt, trans_fmt);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ int index_TableName = 0;//c.getColumnIndex("TableName");
+ sprintf(sqlmaster, "select Enable, R_Pre_Offset, G_Pre_Offset, B_Pre_Offset, R_Gain, G_Gain, B_Gain, R_Post_Offset, G_Post_Offset, B_Post_Offset from %s where "
+ "Level = %d and def = 0;", c.getString(index_TableName).string(), (int)Tempmode);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ params->en = c.getInt(0);//index 0
+ params->r_pre_offset = c.getInt(1);
+ params->g_pre_offset = c.getInt(2);
+ params->b_pre_offset = c.getInt(3);
+ params->r_gain = c.getInt(4);
+ params->g_gain = c.getInt(5);
+ params->b_gain = c.getInt(6);
+ params->r_post_offset = c.getInt(7);
+ params->g_post_offset = c.getInt(8);
+ params->b_post_offset = c.getInt(9);//index 9
+ }
+ }
+ return rval;
+}
+int CPqData::PQ_SetColorTemperatureParams(vpp_color_temperature_mode_t Tempmode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt,
+ tcon_rgb_ogo_t params)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ char sql[512];
+
+ int rval = -1;
+
+ sprintf(sqlmaster, "select TableName from GeneralWhiteBalanceTable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d;",
+ source_port, sig_fmt, trans_fmt);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ int index_TableName = 0;//c.getColumnIndex("TableName");
+ sprintf(sql, "update %s set Enable = %d, "
+ "R_Pre_Offset = %d, G_Pre_Offset = %d, B_Pre_Offset = %d, R_Gain = %d, G_Gain = %d, B_Gain = %d, "
+ "R_Post_Offset = %d, G_Post_Offset = %d, B_Post_Offset = %d where Level = %d and def = 0;", c.getString(index_TableName).string(),
+ params.en, params.r_pre_offset, params.g_pre_offset, params.b_pre_offset, params.r_gain, params.g_gain,
+ params.b_gain, params.r_post_offset, params.g_post_offset, params.b_post_offset, Tempmode);
+
+ rval = this->exeSql(sql);
+ }
+ return rval;
+}
+
+int CPqData::PQ_ResetAllColorTemperatureParams(void)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[512];
+
+ int rval = -1;
+
+ sprintf(sqlmaster, "select distinct TableName from GeneralWhiteBalanceTable ;");
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ int index_TableName = 0;//c.getColumnIndex("TableName");
+ do { //delete
+ sprintf(sqlmaster, "delete from %s where def = 0;"
+ "insert into %s( Level , Enable , R_Pre_Offset, G_Pre_Offset, B_Pre_Offset, R_Gain, G_Gain, B_Gain, R_Post_Offset, G_Post_Offset, B_Post_Offset, def ) "
+ "select Level, Enable, R_Pre_Offset, G_Pre_Offset, B_Pre_Offset, R_Gain, G_Gain, B_Gain, R_Post_Offset, G_Post_Offset, B_Post_Offset, 0 from %s where def = 1;",
+ c.getString(index_TableName).string(), c.getString(index_TableName).string(), c.getString(index_TableName).string());
+ rval = this->exeSql(sqlmaster);
+ } while(c.moveToNext());
+ }
+ return rval;
+}
+
+int CPqData::PQ_GetDNLPParams(tvin_port_t source_port, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d,
+ tvin_trans_fmt_t trans_fmt, ve_dnlp_t *params, ve_dnlp_table_t *newParams, int *dnlpFlag)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
+ int rval = -1;
+ //default
+ params->en = 0;
+ params->rt = VE_DNLP_RT_0S;
+ params->rl = VE_DNLP_RL_01;
+ params->black = VE_DNLP_EXT_00;
+ params->white = VE_DNLP_EXT_00;
+
+ mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);//(status << 16)|trans_fmt;
+
+ sprintf(sqlmaster, "select TableName from GeneralDNLPTable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d ;",
+ source_port, fmt, mode);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ int index_TableName = 0;//c.getColumnIndex("TableName");
+ sprintf(sqlmaster, "select value from %s ", c.getString(index_TableName).string());
+
+ rval = this->select(sqlmaster, c);
+ int count = c.getCount();
+ if (count == 1) {
+ int val;
+ c.moveToFirst();
+ val = c.getInt(0);//index 0
+ *dnlpFlag = 0;
+ params->en = (val & 0xf0000000) >> 28;
+ params->rt = (ve_dnlp_rt_e)((val & 0x0f000000) >> 24);
+ params->rl = (ve_dnlp_rl_e)((val & 0x00ff0000) >> 16);
+ params->black = (ve_dnlp_ext_e)((val & 0x0000ff00) >> 8);
+ params->white = (ve_dnlp_ext_e)((val & 0x000000ff) >> 0);
+ } else if (count > 1) {
+ c.moveToFirst();
+ c.moveToNext();
+ *dnlpFlag = 1;
+ newParams->en = c.getInt(0);
+ c.moveToNext();
+ newParams->method = c.getInt(0);
+ c.moveToNext();
+ newParams->cliprate = c.getInt(0);
+ c.moveToNext();
+ newParams->lowrange = c.getInt(0);
+ c.moveToNext();
+ newParams->hghrange = c.getInt(0);
+ c.moveToNext();
+ newParams->lowalpha = c.getInt(0);
+ c.moveToNext();
+ newParams->midalpha = c.getInt(0);
+ c.moveToNext();
+ newParams->hghalpha = c.getInt(0);
+ }
+ }
+ return rval;
+}
+
+int CPqData::PQ_SetNoLineAllBrightnessParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
+{
+ return SetNonlinearMapping(TVPQ_DATA_BRIGHTNESS, source_type, osd0, osd25, osd50, osd75, osd100);
+}
+int CPqData::PQ_GetNoLineAllBrightnessParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
+{
+ int osdvalue[5] = {0};
+ int rval;
+ rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_BRIGHTNESS, source_type, osdvalue);
+ *osd0 = osdvalue[0];
+ *osd25 = osdvalue[1];
+ *osd50 = osdvalue[2];
+ *osd75 = osdvalue[3];
+ *osd100 = osdvalue[4];
+ if(rval) {
+ LOGE("PQ_GetNoLineAllBrightnessParams Error %d\n", rval);
+ }
+ return rval;
+
+}
+
+int CPqData::PQ_GetBrightnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params)
+{
+ int val;
+
+ GetNonlinearMapping(TVPQ_DATA_BRIGHTNESS, source_port, level, &val);
+ *params = CaculateLevelParam(pq_bri_data, bri_nodes, val);
+ return 0;
+
+}
+int CPqData::PQ_SetBrightnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
+{
+ return 0;
+}
+
+int CPqData::PQ_SetNoLineAllContrastParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
+{
+ return SetNonlinearMapping(TVPQ_DATA_CONTRAST, source_type, osd0, osd25, osd50, osd75, osd100);
+}
+int CPqData::PQ_GetNoLineAllContrastParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
+{
+ int osdvalue[5] = {0};
+ int rval;
+ rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_CONTRAST, source_type, osdvalue);
+ *osd0 = osdvalue[0];
+ *osd25 = osdvalue[1];
+ *osd50 = osdvalue[2];
+ *osd75 = osdvalue[3];
+ *osd100 = osdvalue[4];
+ if(rval) {
+ LOGE("PQ_GetNoLineAllContrastParams Error %d\n", rval);
+ }
+ return rval;
+}
+
+int CPqData::PQ_GetContrastParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params)
+{
+ int val;
+ GetNonlinearMapping(TVPQ_DATA_CONTRAST, source_port, level, &val);
+ *params = CaculateLevelParam(pq_con_data, con_nodes, val);
+ return 0;
+}
+int CPqData::PQ_SetContrastParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
+{
+ return 0;
+}
+
+int CPqData::PQ_SetNoLineAllSaturationParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
+{
+ return SetNonlinearMapping(TVPQ_DATA_SATURATION, source_type, osd0, osd25, osd50, osd75, osd100);
+}
+int CPqData::PQ_GetNoLineAllSaturationParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
+{
+ int osdvalue[5] = {0};
+ int rval;
+ rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_SATURATION, source_type, osdvalue);
+ *osd0 = osdvalue[0];
+ *osd25 = osdvalue[1];
+ *osd50 = osdvalue[2];
+ *osd75 = osdvalue[3];
+ *osd100 = osdvalue[4];
+ if(rval) {
+ LOGE("PQ_GetNoLineAllSaturationParams Error %d\n", rval);
+ }
+ return rval;
+}
+
+int CPqData::PQ_GetSaturationParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params)
+{
+ int val;
+ GetNonlinearMapping(TVPQ_DATA_SATURATION, source_port, level, &val);
+ *params = CaculateLevelParam(pq_sat_data, sat_nodes, val);
+ return 0;
+}
+int CPqData::PQ_SetSaturationParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
+{
+ return 0;
+}
+
+int CPqData::PQ_SetNoLineAllHueParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
+{
+ return SetNonlinearMapping(TVPQ_DATA_HUE, source_type, osd0, osd25, osd50, osd75, osd100);
+}
+int CPqData::PQ_GetNoLineAllHueParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
+{
+ int osdvalue[5] = {0};
+ int rval;
+ rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_HUE, source_type, osdvalue);
+ *osd0 = osdvalue[0];
+ *osd25 = osdvalue[1];
+ *osd50 = osdvalue[2];
+ *osd75 = osdvalue[3];
+ *osd100 = osdvalue[4];
+ if(rval) {
+ LOGE("PQ_GetNoLineAllHueParams Error %d\n", rval);
+ }
+ return rval;
+}
+
+int CPqData::PQ_GetHueParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params)
+{
+ int val;
+ GetNonlinearMapping(TVPQ_DATA_HUE, source_port, level, &val);
+ *params = CaculateLevelParam(pq_hue_data, hue_nodes, val);
+ return 0;
+}
+int CPqData::PQ_SetHueParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
+{
+ return 0;
+}
+
+int CPqData::PQ_SetNoLineAllSharpnessParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
+{
+ return SetNonlinearMapping(TVPQ_DATA_SHARPNESS, source_type, osd0, osd25, osd50, osd75, osd100);
+}
+int CPqData::PQ_GetNoLineAllSharpnessParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
+{
+ int osdvalue[5] = {0};
+ int rval;
+ rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_SHARPNESS, source_type, osdvalue);
+ *osd0 = osdvalue[0];
+ *osd25 = osdvalue[1];
+ *osd50 = osdvalue[2];
+ *osd75 = osdvalue[3];
+ *osd100 = osdvalue[4];
+ if(rval) {
+ LOGE("PQ_GetNoLineAllSharpnessParams Error %d\n", rval);
+ }
+ return rval;
+}
+
+int CPqData::PQ_GetSharpnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, am_regs_t *regs)
+{
+ int val;
+ GetNonlinearMapping(TVPQ_DATA_SHARPNESS, source_port, level, &val);
+ LOGD("val = %d\n", val);
+ *regs = CaculateLevelRegsParam(pq_sharpness_reg_data, val);
+ return 0;
+}
+int CPqData::PQ_GetPLLParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, am_regs_t *regs)
+{
+ int ret = -1;
+ int i = 0;
+
+ ret = getRegValuesByValue(ADC_SETTING, PORT, FORMAT, source_port, sig_fmt, regs);
+#ifdef CPQDB_DEBUG
+ if(ret == 0) {
+ for(i = 0; i < regs->length; i++) {
+ LOGD("%s, =================================================", "TV");
+ LOGD("%s, regData.am_reg[%d].type = %d", "TV", i, regs->am_reg[i].type);
+ LOGD("%s, regData.am_reg[%d].addr = %d", "TV", i, regs->am_reg[i].addr);
+ LOGD("%s, regData.am_reg[%d].mask = %d", "TV", i, regs->am_reg[i].mask);
+ LOGD("%s, regData.am_reg[%d].val = %d", "TV", i, regs->am_reg[i].val);
+ }
+ }
+#endif
+ if(regs->am_reg[0].val == 0 && regs->am_reg[1].val == 0 && regs->am_reg[2].val == 0 && regs->am_reg[3].val == 0) {
+ LOGE("%s,db's value is all zeros, that's not OK!!!\n", "TV");
+ return -1;
+ }
+ return ret;
+}
+int CPqData::PQ_GetCVD2Params(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, am_regs_t *regs)
+{
+ int ret = -1;
+ int i = 0;
+ ret = getRegValuesByValue(CVD2_SETTING, PORT, FORMAT, source_port, sig_fmt, regs);
+#ifdef CPQDB_DEBUG
+ if(ret == 0) {
+ for(i = 0; i < regs->length; i++) {
+ LOGD("%s, =================================================", "TV");
+ LOGD("%s, regData.am_reg[%d].type = %d", "TV", i, regs->am_reg[i].type);
+ LOGD("%s, regData.am_reg[%d].addr = %d", "TV", i, regs->am_reg[i].addr);
+ LOGD("%s, regData.am_reg[%d].mask = %d", "TV", i, regs->am_reg[i].mask);
+ LOGD("%s, regData.am_reg[%d].val = %d", "TV", i, regs->am_reg[i].val);
+ }
+ }
+#endif
+ if(regs->am_reg[0].val == 0 && regs->am_reg[1].val == 0 && regs->am_reg[2].val == 0 && regs->am_reg[3].val == 0) {
+ LOGE("%s,db's value is all zeros, that's not OK!!!\n", "TV");
+ return -1;
+ }
+
+ return ret;
+}
+int CPqData::PQ_SetSharpnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, am_regs_t regs)
+{
+ return 0;
+}
+
+int CPqData::PQ_SetNoLineAllVolumeParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
+{
+ return SetNonlinearMapping(TVPQ_DATA_VOLUME, source_type, osd0, osd25, osd50, osd75, osd100);
+}
+int CPqData::PQ_GetNoLineAllVolumeParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
+{
+ int osdvalue[5] = {0};
+ int rval;
+ rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_VOLUME, source_type, osdvalue);
+ *osd0 = osdvalue[0];
+ *osd25 = osdvalue[1];
+ *osd50 = osdvalue[2];
+ *osd75 = osdvalue[3];
+ *osd100 = osdvalue[4];
+ if(rval) {
+ LOGE("PQ_GetNoLineAllSharpnessParams Error %d\n", rval);
+ }
+ return rval;
+}
+
+int CPqData::PQ_SetVolumeParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
+{
+ return 0;
+}
+
+
+int CPqData::PQ_ResetAllNoLineParams(void)
+{
+ int rval;
+ char sqlmaster[256];
+ char *err = NULL;
+
+ sprintf(sqlmaster, "delete from NonlinearMapping; "
+ "insert into NonlinearMapping(TVIN_PORT, Item_ID, Level, Value) select TVIN_PORT, Item_ID, Level, Value from NonlinearMapping_Default;");
+
+ rval = this->exeSql(sqlmaster);
+ return rval;
+}
+
+
+int CPqData::PQ_GetNoiseReductionParams(vpp_noise_reduction_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int *params)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
+ int rval = -1;
+
+ sprintf(sqlmaster, "select TableName from GeneralNoiseReductionTable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d ;",
+ source_port, sig_fmt, mode);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ int index_TableName = 0;//c.getColumnIndex("TableName");
+ sprintf(sqlmaster, "select NRValue from %s where NRLevel = %d;" , c.getString(index_TableName).string(), (int)nr_mode);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ *params = c.getInt(0);
+ }
+ }
+ return rval;
+}
+
+int CPqData::PQ_SetNoiseReductionParams(vpp_noise_reduction_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int *params)
+{
+ return 0;
+}
+
+int CPqData::PQ_GetOverscanParams(tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, vpp_display_mode_t dmode, tvin_cutwin_t *cutwin_t)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
+ int rval = -1;
+
+ cutwin_t->hs = 0;
+ cutwin_t->he = 0;
+ cutwin_t->vs = 0;
+ cutwin_t->ve = 0;
+
+ sprintf(sqlmaster, "select Hs, He, Vs, Ve from OVERSCAN where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d ;",
+ source_type, fmt, mode);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ cutwin_t->hs = c.getInt(0);
+ cutwin_t->he = c.getInt(1);
+ cutwin_t->vs = c.getInt(2);
+ cutwin_t->ve = c.getInt(3);
+ }
+ return rval;
+}
+int CPqData::PQ_SetOverscanParams(tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, tvin_cutwin_t cutwin_t)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
+ int rval = -1;
+
+ sprintf(sqlmaster, "select * from OVERSCAN where TVIN_PORT = %d and TVIN_SIG_FMT = %d and TVIN_TRANS_FMT = %d;", source_type, fmt, mode);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ sprintf(sqlmaster, "update OVERSCAN set Hs = %d, He = %d, Vs = %d, Ve = %d where TVIN_PORT = %d and TVIN_SIG_FMT = %d and TVIN_TRANS_FMT = %d;",
+ cutwin_t.hs, cutwin_t.he, cutwin_t.vs, cutwin_t.ve, source_type, fmt, mode);
+ } else {
+ sprintf(sqlmaster, "Insert into OVERSCAN(TVIN_PORT, TVIN_SIG_FMT, TVIN_TRANS_FMT, Hs, He, Vs, Ve) values(%d, %d, %d ,%d ,%d, %d, %d);",
+ source_type, fmt, mode, cutwin_t.hs, cutwin_t.he, cutwin_t.vs, cutwin_t.ve);
+ }
+ rval = this->exeSql(sqlmaster);
+
+ return rval;
+}
+
+int CPqData::PQ_ResetAllOverscanParams(void)
+{
+ int rval;
+ char sqlmaster[256];
+
+ sprintf(sqlmaster, "delete from OVERSCAN; insert into OVERSCAN(TVIN_PORT, TVIN_SIG_FMT, TVIN_TRANS_FMT, hs, he, vs, ve) select TVIN_PORT, TVIN_SIG_FMT, TVIN_TRANS_FMT, hs, he, vs, ve from OVERSCAN_default;");
+ rval = this->exeSql(sqlmaster);
+
+ return rval;
+}
+
+int CPqData::PQ_GetPQModeParams(tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+
+ int rval = -1;
+
+ sprintf(sqlmaster, "select Brightness, Contrast, Saturation, Hue, Sharpness, Backlight, NR from Picture_Mode where "
+ "TVIN_PORT = %d and "
+ "Mode = %d ;",
+ source_type, pq_mode);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ params->brightness = c.getInt(0);
+ params->contrast = c.getInt(1);
+ params->saturation = c.getInt(2);
+ params->hue = c.getInt(3);
+ params->sharpness = c.getInt(4);
+ params->backlight = c.getInt(5);
+ params->nr = c.getInt(6);
+ }
+ return rval;
+}
+int CPqData::PQ_SetPQModeParams(tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params)
+{
+ int rval;
+ char sql[256];
+
+ sprintf(sql, "update Picture_Mode set Brightness = %d, Contrast = %d, Saturation = %d, Hue = %d, Sharpness = %d, Backlight = %d, NR= %d "
+ " where TVIN_PORT = %d and Mode = %d;",
+ params->brightness, params->contrast, params->saturation,
+ params->hue, params->sharpness, params->backlight, params->nr,
+ source_type, pq_mode);
+ rval = this->exeSql(sql);
+ return 0;
+}
+
+int CPqData::PQ_SetPQModeParamsByName(const char *name, tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params)
+{
+ int rval;
+ char sql[256];
+
+ sprintf(sql, "insert into %s(TVIN_PORT, Mode, Brightness, Contrast, Saturation, Hue, Sharpness, Backlight, NR)"
+ " values(%d,%d,%d,%d,%d,%d,%d,%d,%d);", name, source_type, pq_mode, params->brightness, params->contrast, params->saturation,
+ params->hue, params->sharpness, params->backlight, params->nr);
+
+ rval = this->exeSql(sql);
+ return 0;
+}
+
+int CPqData::PQ_ResetAllPQModeParams(void)
+{
+ int rval;
+ char sqlmaster[256];
+
+ sprintf(sqlmaster, "delete from picture_mode; insert into picture_mode(TVIN_PORT, Mode, Brightness, Contrast, Saturation, Hue, Sharpness, Backlight, NR) select TVIN_PORT, Mode, Brightness, Contrast, Saturation, Hue, Sharpness, Backlight, NR from picture_mode_default;");
+
+ rval = this->exeSql(sqlmaster);
+ return rval;
+}
+
+int CPqData::PQ_GetGammaSpecialTable(int gammaValue, const char *f_name, tcon_gamma_table_t *gamma_value)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int rval = -1;
+
+ sprintf(sqlmaster, "select %s from GAMMA_%d", f_name, gammaValue);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ int index = 0;
+ do {
+ gamma_value->data[index] = c.getInt(0);
+ index++;
+ } while(c.moveToNext());
+ }
+ return rval;
+}
+
+int CPqData::PQ_GetGammaTableR(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_r)
+{
+ return PQ_GetGammaTable(panel_id, source_port, fmt, "Red", gamma_r);
+}
+
+int CPqData::PQ_GetGammaTableG(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_g)
+{
+ return PQ_GetGammaTable(panel_id, source_port, fmt, "Green", gamma_g);
+}
+
+int CPqData::PQ_GetGammaTableB(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_b)
+{
+ return PQ_GetGammaTable(panel_id, source_port, fmt, "Blue", gamma_b);
+}
+
+int CPqData::PQ_GetGammaTable(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, const char *f_name, tcon_gamma_table_t *val)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+
+ int rval = -1;
+
+ sprintf(sqlmaster, "select TableName from GeneralGammaTable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d;",
+ source_port, fmt);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ int index_TableName = 0;//c.getColumnIndex("TableName");
+ sprintf(sqlmaster, "select %s from %s;", f_name, c.getString(index_TableName).string());
+
+ rval = this->select(sqlmaster, c);
+ if(c.moveToFirst()) {
+ int index = 0;
+ do {
+ val->data[index] = c.getInt(0);
+ index++;
+ } while(c.moveToNext());
+ }
+ }
+ return rval;
+}
+
+
+int CPqData::PQ_GetVGAAjustPara(tvin_sig_fmt_t vga_fmt, tvafe_vga_parm_t *adjparam)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int rval = -1;
+
+ adjparam->clk_step = 0;
+ adjparam->phase = 0;
+ adjparam->hpos_step = 0;
+ adjparam->vpos_step = 0;
+ adjparam->vga_in_clean = 0;
+
+ sprintf(sqlmaster, "select Clk, Phase, HPos, VPos, Vga_in_clean from VGA_AutoParams where TVIN_SIG_FMT = %d", vga_fmt);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ adjparam->clk_step = c.getInt(0);
+ adjparam->phase = c.getInt(1);
+ adjparam->hpos_step = c.getInt(2);
+ adjparam->vpos_step = c.getInt(3);
+ adjparam->vga_in_clean = c.getInt(4);
+ }
+ return rval;
+}
+int CPqData::PQ_SetVGAAjustPara(tvin_sig_fmt_t vga_fmt, tvafe_vga_parm_t adjparam)
+{
+ CSqlite::Cursor c;
+ char sql[256];
+ int rval = -1;
+
+ sprintf(sql, "select * from VGA_AutoParams where TVIN_SIG_FMT = %d;", vga_fmt);
+
+ rval = this->select(sql, c);
+
+ if(c.moveToFirst()) {
+ sprintf(sql, "Insert into VGA_AutoParams(TVIN_SIG_FMT, Clk, Phase, HPos, VPos, Vga_in_clean) values(%d, %d, %d ,%d ,%d, %d);",
+ vga_fmt, adjparam.clk_step, adjparam.phase, adjparam.hpos_step, adjparam.vpos_step, adjparam.vga_in_clean);
+ } else {
+ sprintf(sql, "update VGA_AutoParams set Clk = %d, Phase = %d, HPos = %d, VPos = %d, Vga_in_clean = %d where TVIN_SIG_FMT = %d;",
+ adjparam.clk_step, adjparam.phase, adjparam.hpos_step, adjparam.vpos_step, adjparam.vga_in_clean, vga_fmt);
+ }
+ rval = this->exeSql(sql);
+ return rval;
+}
+
+int CPqData::CaculateLevelParam(tvpq_data_t *pq_data, int nodes, int level)
+{
+ int i;
+
+ for(i = 0; i < nodes; i++) {
+ if(level < pq_data[i].IndexValue) {
+ break;
+ }
+ }
+
+ if(i == 0) {
+ return pq_data[i].RegValue;
+ } else if(i == nodes) {
+ return pq_data[i - 1].RegValue;
+ } else {
+ return pq_data[i - 1].RegValue + (level - pq_data[i - 1].IndexValue) * pq_data[i - 1].step;
+ }
+}
+
+am_regs_t CPqData::CaculateLevelRegsParam(tvpq_sharpness_regs_t *pq_regs, int level)
+{
+ am_regs_t regs;
+ int i;
+
+ for(i = 0; i < sha_nodes; i++) {
+ if(level < pq_regs[i].reg_data[0].IndexValue) {
+ break;
+ }
+ }
+
+ if(i == 0) {
+ regs.length = pq_regs[i].length;
+ for(int j = 0; j < pq_regs[i].length; j++) {
+ regs.am_reg[j].type = pq_regs[i].reg_data[j].Value.type;
+ regs.am_reg[j].addr = pq_regs[i].reg_data[j].Value.addr;
+ regs.am_reg[j].mask = pq_regs[i].reg_data[j].Value.mask;
+ regs.am_reg[j].val = pq_regs[i].reg_data[j].Value.val;
+ }
+
+ } else if(i == sha_nodes) {
+ regs.length = pq_regs[i - 1].length;
+ for(int j = 0; j < pq_regs[i - 1].length; j++) {
+ regs.am_reg[j].type = pq_regs[i - 1].reg_data[j].Value.type;
+ regs.am_reg[j].addr = pq_regs[i - 1].reg_data[j].Value.addr;
+ regs.am_reg[j].mask = pq_regs[i - 1].reg_data[j].Value.mask;
+ regs.am_reg[j].val = pq_regs[i - 1].reg_data[j].Value.val;
+ }
+ } else {
+ regs.length = pq_regs[i - 1].length;
+ for(int j = 0; j < pq_regs[i - 1].length; j++) {
+ regs.am_reg[j].type = pq_regs[i - 1].reg_data[j].Value.type;
+ regs.am_reg[j].addr = pq_regs[i - 1].reg_data[j].Value.addr;
+ regs.am_reg[j].mask = pq_regs[i - 1].reg_data[j].Value.mask;
+ regs.am_reg[j].val = pq_regs[i - 1].reg_data[j].Value.val + (level - pq_regs[i - 1].reg_data[j].IndexValue) * pq_regs[i - 1].reg_data[j].step;
+ }
+ }
+
+ return regs;
+}
+
+
+int CPqData::GetNonlinearMapping(tvpq_data_type_t data_type, tvin_port_t source_port, int level, int *params)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int rval = -1;
+
+ tv_source_input_type_t type;
+ //showboz
+ type = CTvin::Tvin_SourcePortToSourceInputType(source_port);//???
+
+ sprintf(sqlmaster, "select Value from NonlinearMapping where "
+ "TVIN_PORT = %d and "
+ "Item_ID = %d and "
+ "Level = %d ;",
+ type, data_type, level);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ *params = c.getInt(0);
+ }
+ return rval;
+}
+
+int CPqData::GetNonlinearMappingByOSDFac(tvpq_data_type_t data_type, tv_source_input_type_t source_type, int *params)
+{
+ CSqlite::Cursor c;
+ char sqlmaster[256];
+ int rval = -1;
+
+ sprintf(sqlmaster, "select Value from NonlinearMapping where "
+ "TVIN_PORT = %d and "
+ "Item_ID = %d and ("
+ "Level = 0 or Level = 25 or Level = 50 or Level = 75 or Level = 100);",
+ source_type, data_type);
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ params[0] = c.getInt(0);
+ params[1] = c.getInt(1);
+ params[2] = c.getInt(2);
+ params[3] = c.getInt(3);
+ params[4] = c.getInt(4);
+ }
+ return rval;
+}
+
+int CPqData::SetNonlinearMapping(tvpq_data_type_t data_type, tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
+{
+
+ int rval;
+ char *err = NULL;
+ int osdvalue[101];
+ double step[4];
+ char sql[256];
+
+ step[0] = (osd25 - osd0) / 25.0;
+ step[1] = (osd50 - osd25) / 25.0;
+ step[2] = (osd75 - osd50) / 25.0;
+ step[3] = (osd100 - osd75) / 25.0;
+
+
+ for(int i = 0; i <= 100; i++) {
+ if(i == 0) {
+ osdvalue[i] = osd0;
+ } else if((i > 0) && (i <= 25)) {
+ osdvalue[i] = osd0 + (int)(i * step[0]);
+ } else if((i > 25) && (i <= 50)) {
+ osdvalue[i] = osd25 + (int)((i - 25) * step[1]);
+ } else if((i > 50) && (i <= 75)) {
+ osdvalue[i] = osd50 + (int)((i - 50) * step[2]);
+ } else if((i > 75) && (i <= 100)) {
+ osdvalue[i] = osd75 + (int)((i - 75) * step[3]);
+ }
+ sprintf(sql, "update NonLinearMapping set Value = %d where TVIN_PORT = %d and Item_ID = %d and Level = %d ;", osdvalue[i], source_type, data_type, i);
+ if(!(this->exeSql(sql))) {
+ return -1;
+ }
+ }
+ return 0;
+}
+
+int CPqData::SetNonlinearMappingByName(const char *name, tvpq_data_type_t data_type, tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
+{
+ int rval;
+ char *err = NULL;
+ int osdvalue[101];
+ double step[4];
+ char sql[256];
+
+ step[0] = (osd25 - osd0) / 25.0;
+ step[1] = (osd50 - osd25) / 25.0;
+ step[2] = (osd75 - osd50) / 25.0;
+ step[3] = (osd100 - osd75) / 25.0;
+
+ for(int i = 0; i <= 100; i++) {
+ if(i == 0) {
+ osdvalue[i] = osd0;
+ } else if((i > 0) && (i <= 25)) {
+ osdvalue[i] = osd0 + (int)(i * step[0]);
+ } else if((i > 25) && (i <= 50)) {
+ osdvalue[i] = osd25 + (int)((i - 25) * step[1]);
+ } else if((i > 50) && (i <= 75)) {
+ osdvalue[i] = osd50 + (int)((i - 50) * step[2]);
+ } else if((i > 75) && (i <= 100)) {
+ osdvalue[i] = osd75 + (int)((i - 75) * step[3]);
+ }
+ memset(sql, '\0', 256);
+ sprintf(sql, "insert into %s(TVIN_PORT, Item_ID, Level, Value) values(%d,%d,%d,%d);", name, source_type, data_type, i, osdvalue[i]);
+ if(!(this->exeSql(sql))) {
+ return -1;
+ }
+ }
+ return 0;
+}
+
+int CPqData::LoadPQData(tvpq_data_type_t data_type, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int flag)
+{
+ CSqlite::Cursor c;
+ int rval;
+ char sqlmaster[256];
+ int mode = is2dOr3d;
+ tvpq_data_t *pq_data = NULL;
+ int *pq_nodes = NULL;
+
+ switch(data_type) {
+ case TVPQ_DATA_BRIGHTNESS:
+ sprintf(sqlmaster, "select TableName from GeneralContrastBrightnessTable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d and "
+ "%s = %d;",
+ source_port, sig_fmt, mode, ID_FIELD, BRIGHTNESS_ID);
+ pq_data = pq_bri_data;
+ pq_nodes = &bri_nodes;
+ break;
+ case TVPQ_DATA_CONTRAST:
+ sprintf(sqlmaster, "select TableName from GeneralContrastBrightnessTable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d and "
+ "%s = %d;",
+ source_port, sig_fmt, mode, ID_FIELD, CONTRAST_ID);
+ pq_data = pq_con_data;
+ pq_nodes = &con_nodes;
+ break;
+ case TVPQ_DATA_HUE:
+ sprintf(sqlmaster, "select TableName from GeneralSaturationHueTable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d and "
+ "%s = %d;",
+ source_port, sig_fmt, mode, ID_FIELD, HUE_ID);
+ pq_data = pq_hue_data;
+ pq_nodes = &hue_nodes;
+ break;
+ case TVPQ_DATA_SATURATION:
+ sprintf(sqlmaster, "select TableName from GeneralSaturationHueTable where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d and "
+ "%s = %d;",
+ source_port, sig_fmt, mode, ID_FIELD, SATURATION_ID);
+ pq_data = pq_sat_data;
+ pq_nodes = &sat_nodes;
+ break;
+ case TVPQ_DATA_SHARPNESS:
+ //sprintf(sqlmaster, "select TableName from GeneralSharpnessTable where "
+ sprintf(sqlmaster, "select TableName from GeneralSharpnessG9Table where "
+ "TVIN_PORT = %d and "
+ "TVIN_SIG_FMT = %d and "
+ "TVIN_TRANS_FMT = %d and "
+ "%s = %d;",
+ source_port, sig_fmt, mode, ID_FIELD, SHARPNESS_ID);
+ pq_data = NULL;
+ pq_nodes = &sha_nodes;
+ break;
+ default:
+ break;
+ }
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ switch(data_type) {
+ case TVPQ_DATA_BRIGHTNESS:
+ case TVPQ_DATA_CONTRAST:
+ case TVPQ_DATA_HUE:
+ case TVPQ_DATA_SATURATION:
+ sprintf(sqlmaster, "select TotalNode, NodeNumber, IndexValue, RegValue, StepUp from %s order by NodeNumber asc;", c.getString(0).string());
+ break;
+ case TVPQ_DATA_SHARPNESS:
+ sprintf(sqlmaster, "select TotalNode, NodeNumber, RegType, RegAddr, RegMask, IndexValue, RegValue, StepUp from %s order by NodeNumber asc;", c.getString(0).string());
+ break;
+ default:
+ break;
+ }
+ }
+
+ rval = this->select(sqlmaster, c);
+
+ if(c.moveToFirst()) {
+ if(data_type == TVPQ_DATA_SHARPNESS) {
+ *pq_nodes = c.getInt(0);//TotalNode?
+ int length = c.getCount() / (*pq_nodes);
+ int index = 0;
+ for(int i = 0; i < *pq_nodes; i++) {
+ pq_sharpness_reg_data[i].length = length;
+ }
+ do {
+ pq_sharpness_reg_data[index / length].reg_data[index % length].TotalNode = c.getInt(0);
+ pq_sharpness_reg_data[index / length].reg_data[index % length].NodeValue = c.getInt(1);
+ pq_sharpness_reg_data[index / length].reg_data[index % length].Value.type = c.getUInt(2);
+ pq_sharpness_reg_data[index / length].reg_data[index % length].Value.addr = c.getUInt(3);
+ pq_sharpness_reg_data[index / length].reg_data[index % length].Value.mask = c.getUInt(4);
+ pq_sharpness_reg_data[index / length].reg_data[index % length].IndexValue = c.getInt(5);
+ pq_sharpness_reg_data[index / length].reg_data[index % length].Value.val = c.getUInt(6);
+ pq_sharpness_reg_data[index / length].reg_data[index % length].step = c.getF(7);
+ index++;
+ } while(c.moveToNext());
+ } else {
+ int index = 0;
+ do {
+ pq_data[index].TotalNode = c.getInt(0);
+ pq_data[index].NodeValue = c.getInt(1);
+ pq_data[index].IndexValue = c.getInt(2);
+ pq_data[index].RegValue = c.getInt(3);
+ pq_data[index].step = c.getF(4);
+ if(flag == 1) {
+ if(data_type == TVPQ_DATA_BRIGHTNESS) {
+ LOGD("%s, bri pq_data[%d].RegValue = %d\n", "TV", index, pq_data[index].RegValue);
+ pq_data[index].RegValue -= 64;
+ LOGD("%s, bri pq_data[%d].RegValue + 64 = %d\n", "TV", index, pq_data[index].RegValue);
+ } else if(data_type == TVPQ_DATA_CONTRAST) {
+ LOGD("%s, con pq_data[%d].RegValue = %d\n", "TV", index, pq_data[index].RegValue);
+ pq_data[index].RegValue += 64;
+ LOGD("%s, con pq_data[%d].RegValue + 64 = %d\n", "TV", index, pq_data[index].RegValue);
+ }
+ }
+ index++;
+ } while(c.moveToNext());
+ *pq_nodes = index;
+ }
+ }
+
+ return rval;
+}
+
+int CPqData::LoadAllPQData(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int flag)
+{
+ int rval = -1;
+ rval = LoadPQData(TVPQ_DATA_BRIGHTNESS, source_port, sig_fmt, is2dOr3d, trans_fmt, flag);
+ if(rval) {
+ return rval;
+ }
+ rval = LoadPQData(TVPQ_DATA_CONTRAST, source_port, sig_fmt, is2dOr3d, trans_fmt, flag);
+ if(rval) {
+ return rval;
+ }
+ rval = LoadPQData(TVPQ_DATA_SATURATION, source_port, sig_fmt, is2dOr3d, trans_fmt, -1);
+ if(rval) {
+ return rval;
+ }
+ rval = LoadPQData(TVPQ_DATA_HUE, source_port, sig_fmt, is2dOr3d, trans_fmt, -1);
+ if(rval) {
+ return rval;
+ }
+ rval = LoadPQData(TVPQ_DATA_SHARPNESS, source_port, sig_fmt, is2dOr3d, trans_fmt, -1);
+ if(rval) {
+ return rval;
+ }
+ return rval;
+}
+
+typedef enum initial_type_e {
+ TYPE_PMode = 0,
+ TYPE_PMode_Default,
+ TYPE_Nonlinear,
+ TYPE_NonLinear_Default,
+ TYPE_VGA_AUTO,
+ TYPE_OVERSCAN,
+} initial_type_t;
+
+const char *Pmode_name[6] = {
+ "Picture_Mode",
+ "Picture_Mode_Default",
+ "NonlinearMapping",
+ "NonlinearMapping_Default",
+ "VGA_AutoParams",
+ "OVERSCAN"
+};
+
+void CPqData::initialTable(int type)
+{
+ vpp_pq_para_t pmode_default;
+
+ pmode_default.backlight = 100;
+ pmode_default.brightness = 50;
+ pmode_default.contrast = 50;
+ pmode_default.hue = 50;
+ pmode_default.nr = 0;
+ pmode_default.saturation = 50;
+ pmode_default.sharpness = 50;
+
+
+ switch(type) {
+ case TYPE_PMode:
+ case TYPE_PMode_Default:
+ for(int i = 0; i < 6; i++ ) {
+ for(int j = 0; j < 4; j++) {
+ PQ_SetPQModeParamsByName(Pmode_name[type], (tv_source_input_type_t) i, (vpp_picture_mode_t)j, &pmode_default);
+ }
+ }
+ break;
+ case TYPE_Nonlinear:
+ case TYPE_NonLinear_Default:
+ for(int i = 0; i < 6; i++ ) {
+ for(int j = 0; j < 5; j++) {
+ SetNonlinearMappingByName(Pmode_name[type], (tvpq_data_type_t) j, (tv_source_input_type_t)i, 0, (int)255 / 4.0, (int)255 * 2 / 4.0, (int)255 * 3 / 4.0, 255);
+ }
+ }
+ break;
+ case TYPE_VGA_AUTO:
+ break;
+ case TYPE_OVERSCAN:
+ break;
+ }
+}
+
+/*void CPqData::transferFixTable()
+{
+ char sql[256];
+ char * err = NULL;
+ char ** rsltReg = NULL;
+ int rval, rows, columns;
+ unsigned int tvin, sig, trans;
+ char tablename[256];
+
+ sprintf(sql, "Select TVIN_PORT, TVIN_SIG_FMT, TVIN_TRANS_FMT, TableName from GeneralSharpnessTable where TableID = 0;");
+
+ rval = sqlite3_get_table(DB, sql, &rsltReg, &rows, &columns, &err);
+
+ if(rval) {
+ if(rsltReg != NULL) {
+ sqlite3_free_table(rsltReg);
+ rsltReg = NULL;
+ }
+ if(err != NULL) {
+ sqlite3_free(err);
+ err = NULL;
+ }
+ return;
+ } else {
+ for(int i=1; i<=rows; i++) {
+ memset(sql,'\0',256);
+
+ sscanf(rsltReg[i*columns], "%u", &tvin);
+ sscanf(rsltReg[i*columns+1], "%u", &sig);
+ sscanf(rsltReg[i*columns+2], "%u", &trans);
+ sscanf(rsltReg[i*columns+3], "%s", tablename);
+
+ sprintf(sql, "insert into GeneralCommonTable(TVIN_PORT, TVIN_SIG_FMT, TVIN_TRANS_FMT, TableID, TableName) values(%d,%d,%d,0,\"%s\");",
+ tvin, sig, trans, tablename);
+ rval = sqlite3_exec(DB, sql, NULL, NULL, &err);
+ if(rval) {
+ if(err != NULL) {
+ sqlite3_free(err);
+ err = NULL;
+ }
+ return;
+ }
+ if(err != NULL) {
+ sqlite3_free(err);
+ err = NULL;
+ }
+ }
+ memset(sql,'\0',256);
+ sprintf(sql, "delete from GeneralSharpnessTable where TableID = 0;");
+ rval = sqlite3_exec(DB, sql, NULL, NULL, &err);
+ if(rval) {
+ if(err != NULL) {
+ sqlite3_free(err);
+ err = NULL;
+ }
+ return;
+ }
+ if(err != NULL) {
+ sqlite3_free(err);
+ err = NULL;
+ }
+ }
+}*/
+
+int CPqData::PQ_GetPhaseArray(am_phase_t *am_phase)
+{
+ CSqlite::Cursor c;
+ int iOutRet = 0;
+ char sqlmaster[256];
+ sprintf(sqlmaster, "select Phase from Phase order by Format ASC; ");
+
+ this->select(sqlmaster, c);
+ int nums = 0;
+ am_phase->length = c.getCount();
+ if(c.moveToFirst()) {
+ do {
+ am_phase->phase[nums] = c.getInt(0);//col index is 0[Phase]
+ nums++;
+ } while(c.moveToNext());
+ }
+ //
+ return nums;
+}
+
diff --git a/tvapi/libtv/vpp/CPQdb.h b/tvapi/libtv/vpp/CPQdb.h
index f9c3cef..74aa5c9 100644
--- a/tvapi/libtv/vpp/CPQdb.h
+++ b/tvapi/libtv/vpp/CPQdb.h
@@ -1,161 +1,160 @@
-/*
- * CPQdb.h
- *
- * Created on: 2011-12-13
- * Author: casey
- */
-
-#ifndef CPQDB_H_
-#define CPQDB_H_
-
-#define PQ_NO_ANDROID 0
-
-
-#if (PQ_NO_ANDROID == 1)
-#include "sqlite3.h"
-#else
-#include "../../sqlite/dist/sqlite3.h"
-#endif
-#include "tvutils/CFile.h"
-#include "../tvin/CTvin.h"
-#include "CVpp.h"
-#include "tvutils/CSqlite.h"
-
-typedef enum tvpq_data_type_e {
- TVPQ_DATA_BRIGHTNESS,
- TVPQ_DATA_CONTRAST,
- TVPQ_DATA_SATURATION,
- TVPQ_DATA_HUE,
- TVPQ_DATA_SHARPNESS,
- TVPQ_DATA_VOLUME,
-
- TVPQ_DATA_MAX,
-} tvpq_data_type_t;
-
-typedef struct tvpq_data_s {
- int TotalNode;
- int NodeValue;
- int IndexValue;
- int RegValue;
- double step;
-} tvpq_data_t;
-
-typedef struct tvpq_sharpness_reg_s {
- int TotalNode;
- am_reg_t Value;
- int NodeValue;
- int IndexValue;
- double step;
-} tvpq_sharpness_reg_t;
-
-typedef struct tvpq_sharpness_regs_s {
- int length;
- tvpq_sharpness_reg_t reg_data[50];
-} tvpq_sharpness_regs_t;
-
-typedef struct tvpq_nonlinear_s {
- int osd0;
- int osd25;
- int osd50;
- int osd75;
- int osd100;
-} tvpq_nonlinear_t;
-
-
-class CPqData: public CSqlite
-{
-public:
- CPqData();
- ~CPqData();
- int PQ_GetColorDemoParams(vpp_color_demomode_t demomode, void *params);
- int PQ_GetBaseColorParams(vpp_color_basemode_t basemode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs);
- int PQ_GetCM2Params(vpp_color_management2_t basemode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs);
- int PQ_GetNR2Params(vpp_noise_reduction2_mode_t basemode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs);
- int PQ_GetXVYCCParams(vpp_xvycc_mode_t xvycc_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs, am_regs_t *regs_1);
- int PQ_GetMCDIParams(vpp_mcdi_mode_t mcdi_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs);
- int PQ_ColorTemperatureRGBogo2Params(void *params, tcon_rgb_ogo_t rgb_ogo);
- int PQ_ColorTemperatureParams2RGBogo(tcon_rgb_ogo_t *rgb_ogo, void *params);
- int PQ_GetColorTemperatureParams(vpp_color_temperature_mode_t Tempmode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt,
- tcon_rgb_ogo_t *params);
- int PQ_SetColorTemperatureParams(vpp_color_temperature_mode_t Tempmode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt,
- tcon_rgb_ogo_t params);
- int PQ_ResetAllColorTemperatureParams(void);
- int PQ_GetBacklightParams(tvin_port_t source_port, int level, int *params);
- int PQ_SetBacklightParams(tvin_port_t source_port, int level, int params);
- int PQ_SetNoLineAllBrightnessParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
- int PQ_GetNoLineAllBrightnessParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100);
- int PQ_GetBrightnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params);
- int PQ_SetBrightnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params);
- int PQ_SetNoLineAllContrastParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
- int PQ_GetNoLineAllContrastParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100);
- int PQ_GetContrastParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params);
- int PQ_SetContrastParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params);
- int PQ_SetNoLineAllSaturationParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
- int PQ_GetNoLineAllSaturationParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100);
- int PQ_GetSaturationParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params);
- int PQ_SetSaturationParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params);
- int PQ_SetNoLineAllHueParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
- int PQ_GetNoLineAllHueParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100);
- int PQ_GetHueParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params);
- int PQ_SetHueParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params);
- int PQ_SetNoLineAllSharpnessParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
- int PQ_GetNoLineAllSharpnessParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100);
- int PQ_GetSharpnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, am_regs_t *regs);
- int PQ_SetSharpnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, am_regs_t regs);
- int PQ_SetNoLineAllVolumeParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
- int PQ_GetNoLineAllVolumeParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100);
- int PQ_GetVolumeParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int *length, int *params);
- int PQ_SetVolumeParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params);
- int PQ_ResetAllNoLineParams(void);
- int PQ_GetNoiseReductionParams(vpp_noise_reduction_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int *params);
- int PQ_SetNoiseReductionParams(vpp_noise_reduction_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int *params);
- int PQ_GetDNLPParams(tvin_port_t source_port, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, ve_dnlp_t *params, ve_dnlp_table_t *newParams, int *dnlpFlag);
- int PQ_GetBlackExtParams(tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, ve_bext_t *params);
- int PQ_GetOverscanParams(tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, vpp_display_mode_t dmode, tvin_cutwin_t *cutwin_t);
- int PQ_SetOverscanParams(tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, tvin_cutwin_t cutwin_t);
- int PQ_ResetAllOverscanParams(void);
- int PQ_GetPQModeParams(tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params);
- int PQ_SetPQModeParams(tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params);
- int PQ_ResetAllPQModeParams(void);
- int PQ_GetGammaTableR(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_r);
- int PQ_GetGammaTableG(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_g);
- int PQ_GetGammaTableB(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_b);
- int PQ_GetGammaSpecialTable(int gammaValue, const char *f_name, tcon_gamma_table_t *gamma_r);
- int PQ_GetVGAAjustPara(tvin_sig_fmt_t vga_fmt, tvafe_vga_parm_t *adjparam);
- int PQ_SetVGAAjustPara(tvin_sig_fmt_t vga_fmt, tvafe_vga_parm_t adjparam);
- int PQ_GetPhaseArray(am_phase_t *am_phase);
- int PQ_GetPLLParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, am_regs_t *regs);
- int PQ_GetCVD2Params(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, am_regs_t *regs);
-
- int openDB();
- int closeDB();
- int getRegValues(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs);
- int getRegValuesByValue(const char *name, const char *f_name, const char *f2_name, const int val, const int val2, am_regs_t *regs);
- int getRegValuesByValue_long(const char *name, const char *f_name, const char *f2_name, const int val, const int val2, am_regs_t *regs, am_regs_t *regs_1);
- int LoadAllPQData(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int flag);
- void initialTable(int type);
- void transferFixTable();
-
-private:
- int CaculateLevelParam(tvpq_data_t *pq_data, int nodes, int level);
- am_regs_t CaculateLevelRegsParam(tvpq_sharpness_regs_t *pq_regs, int level);
- int GetNonlinearMapping(tvpq_data_type_t data_type, tvin_port_t source_port, int level, int *params);
- int GetNonlinearMappingByOSDFac(tvpq_data_type_t data_type, tv_source_input_type_t source_type, int *params);
- int SetNonlinearMapping(tvpq_data_type_t data_type, tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
- int LoadPQData(tvpq_data_type_t data_type, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int flag);
- int PQ_GetGammaTable(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, const char *f_name, tcon_gamma_table_t *val);
- int SetNonlinearMappingByName(const char *name, tvpq_data_type_t data_type, tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
- int PQ_SetPQModeParamsByName(const char *name, tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params);
-
- tvpq_data_t pq_bri_data[15];
- tvpq_data_t pq_con_data[15];
- tvpq_data_t pq_sat_data[15];
- tvpq_data_t pq_hue_data[15];
- tvpq_sharpness_regs_t pq_sharpness_reg_data[10];
- int bri_nodes;
- int con_nodes;
- int hue_nodes;
- int sat_nodes;
- int sha_nodes;
-};
-#endif
+/*
+ * CPQdb.h
+ *
+ * Created on: 2011-12-13
+ * Author: casey
+ */
+
+#ifndef CPQDB_H_
+#define CPQDB_H_
+
+#define PQ_NO_ANDROID 0
+
+
+#if (PQ_NO_ANDROID == 1)
+#include "sqlite3.h"
+#else
+#include "../../sqlite/dist/sqlite3.h"
+#endif
+#include "tvutils/CFile.h"
+#include "../tvin/CTvin.h"
+#include "CVpp.h"
+#include "tvutils/CSqlite.h"
+
+typedef enum tvpq_data_type_e {
+ TVPQ_DATA_BRIGHTNESS,
+ TVPQ_DATA_CONTRAST,
+ TVPQ_DATA_SATURATION,
+ TVPQ_DATA_HUE,
+ TVPQ_DATA_SHARPNESS,
+ TVPQ_DATA_VOLUME,
+
+ TVPQ_DATA_MAX,
+} tvpq_data_type_t;
+
+typedef struct tvpq_data_s {
+ int TotalNode;
+ int NodeValue;
+ int IndexValue;
+ int RegValue;
+ double step;
+} tvpq_data_t;
+
+typedef struct tvpq_sharpness_reg_s {
+ int TotalNode;
+ am_reg_t Value;
+ int NodeValue;
+ int IndexValue;
+ double step;
+} tvpq_sharpness_reg_t;
+
+typedef struct tvpq_sharpness_regs_s {
+ int length;
+ tvpq_sharpness_reg_t reg_data[50];
+} tvpq_sharpness_regs_t;
+
+typedef struct tvpq_nonlinear_s {
+ int osd0;
+ int osd25;
+ int osd50;
+ int osd75;
+ int osd100;
+} tvpq_nonlinear_t;
+
+
+class CPqData: public CSqlite {
+public:
+ CPqData();
+ ~CPqData();
+ int PQ_GetColorDemoParams(vpp_color_demomode_t demomode, void *params);
+ int PQ_GetBaseColorParams(vpp_color_basemode_t basemode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs);
+ int PQ_GetCM2Params(vpp_color_management2_t basemode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs);
+ int PQ_GetNR2Params(vpp_noise_reduction2_mode_t basemode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs);
+ int PQ_GetXVYCCParams(vpp_xvycc_mode_t xvycc_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs, am_regs_t *regs_1);
+ int PQ_GetMCDIParams(vpp_mcdi_mode_t mcdi_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs);
+ int PQ_ColorTemperatureRGBogo2Params(void *params, tcon_rgb_ogo_t rgb_ogo);
+ int PQ_ColorTemperatureParams2RGBogo(tcon_rgb_ogo_t *rgb_ogo, void *params);
+ int PQ_GetColorTemperatureParams(vpp_color_temperature_mode_t Tempmode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt,
+ tcon_rgb_ogo_t *params);
+ int PQ_SetColorTemperatureParams(vpp_color_temperature_mode_t Tempmode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt,
+ tcon_rgb_ogo_t params);
+ int PQ_ResetAllColorTemperatureParams(void);
+ int PQ_GetBacklightParams(tvin_port_t source_port, int level, int *params);
+ int PQ_SetBacklightParams(tvin_port_t source_port, int level, int params);
+ int PQ_SetNoLineAllBrightnessParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
+ int PQ_GetNoLineAllBrightnessParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100);
+ int PQ_GetBrightnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params);
+ int PQ_SetBrightnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params);
+ int PQ_SetNoLineAllContrastParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
+ int PQ_GetNoLineAllContrastParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100);
+ int PQ_GetContrastParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params);
+ int PQ_SetContrastParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params);
+ int PQ_SetNoLineAllSaturationParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
+ int PQ_GetNoLineAllSaturationParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100);
+ int PQ_GetSaturationParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params);
+ int PQ_SetSaturationParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params);
+ int PQ_SetNoLineAllHueParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
+ int PQ_GetNoLineAllHueParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100);
+ int PQ_GetHueParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params);
+ int PQ_SetHueParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params);
+ int PQ_SetNoLineAllSharpnessParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
+ int PQ_GetNoLineAllSharpnessParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100);
+ int PQ_GetSharpnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, am_regs_t *regs);
+ int PQ_SetSharpnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, am_regs_t regs);
+ int PQ_SetNoLineAllVolumeParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
+ int PQ_GetNoLineAllVolumeParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100);
+ int PQ_GetVolumeParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int *length, int *params);
+ int PQ_SetVolumeParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params);
+ int PQ_ResetAllNoLineParams(void);
+ int PQ_GetNoiseReductionParams(vpp_noise_reduction_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int *params);
+ int PQ_SetNoiseReductionParams(vpp_noise_reduction_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int *params);
+ int PQ_GetDNLPParams(tvin_port_t source_port, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, ve_dnlp_t *params, ve_dnlp_table_t *newParams, int *dnlpFlag);
+ int PQ_GetBlackExtParams(tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, ve_bext_t *params);
+ int PQ_GetOverscanParams(tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, vpp_display_mode_t dmode, tvin_cutwin_t *cutwin_t);
+ int PQ_SetOverscanParams(tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, tvin_cutwin_t cutwin_t);
+ int PQ_ResetAllOverscanParams(void);
+ int PQ_GetPQModeParams(tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params);
+ int PQ_SetPQModeParams(tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params);
+ int PQ_ResetAllPQModeParams(void);
+ int PQ_GetGammaTableR(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_r);
+ int PQ_GetGammaTableG(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_g);
+ int PQ_GetGammaTableB(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_b);
+ int PQ_GetGammaSpecialTable(int gammaValue, const char *f_name, tcon_gamma_table_t *gamma_r);
+ int PQ_GetVGAAjustPara(tvin_sig_fmt_t vga_fmt, tvafe_vga_parm_t *adjparam);
+ int PQ_SetVGAAjustPara(tvin_sig_fmt_t vga_fmt, tvafe_vga_parm_t adjparam);
+ int PQ_GetPhaseArray(am_phase_t *am_phase);
+ int PQ_GetPLLParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, am_regs_t *regs);
+ int PQ_GetCVD2Params(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, am_regs_t *regs);
+
+ int openDB();
+ int closeDB();
+ int getRegValues(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs);
+ int getRegValuesByValue(const char *name, const char *f_name, const char *f2_name, const int val, const int val2, am_regs_t *regs);
+ int getRegValuesByValue_long(const char *name, const char *f_name, const char *f2_name, const int val, const int val2, am_regs_t *regs, am_regs_t *regs_1);
+ int LoadAllPQData(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int flag);
+ void initialTable(int type);
+ void transferFixTable();
+
+private:
+ int CaculateLevelParam(tvpq_data_t *pq_data, int nodes, int level);
+ am_regs_t CaculateLevelRegsParam(tvpq_sharpness_regs_t *pq_regs, int level);
+ int GetNonlinearMapping(tvpq_data_type_t data_type, tvin_port_t source_port, int level, int *params);
+ int GetNonlinearMappingByOSDFac(tvpq_data_type_t data_type, tv_source_input_type_t source_type, int *params);
+ int SetNonlinearMapping(tvpq_data_type_t data_type, tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
+ int LoadPQData(tvpq_data_type_t data_type, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int flag);
+ int PQ_GetGammaTable(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, const char *f_name, tcon_gamma_table_t *val);
+ int SetNonlinearMappingByName(const char *name, tvpq_data_type_t data_type, tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100);
+ int PQ_SetPQModeParamsByName(const char *name, tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params);
+
+ tvpq_data_t pq_bri_data[15];
+ tvpq_data_t pq_con_data[15];
+ tvpq_data_t pq_sat_data[15];
+ tvpq_data_t pq_hue_data[15];
+ tvpq_sharpness_regs_t pq_sharpness_reg_data[10];
+ int bri_nodes;
+ int con_nodes;
+ int hue_nodes;
+ int sat_nodes;
+ int sha_nodes;
+};
+#endif
diff --git a/tvapi/libtv/vpp/CVpp.cpp b/tvapi/libtv/vpp/CVpp.cpp
index f7af190..78a4318 100644
--- a/tvapi/libtv/vpp/CVpp.cpp
+++ b/tvapi/libtv/vpp/CVpp.cpp
@@ -25,475 +25,475 @@
#endif
CVpp::CVpp()
{
- vpp_amvideo_fd = -1;
- vpp_amvideo_3d_fd = -1;
- mpPqData = new CPqData();
+ vpp_amvideo_fd = -1;
+ vpp_amvideo_3d_fd = -1;
+ mpPqData = new CPqData();
}
CVpp::~CVpp()
{
- if (mpPqData != NULL) {
- delete mpPqData;
- mpPqData = NULL;
- }
+ if(mpPqData != NULL) {
+ delete mpPqData;
+ mpPqData = NULL;
+ }
}
int CVpp::Vpp_Init ( void )
{
- if (mpPqData->openDB() ) {
- LOGW ( "%s, open pq failed!", __FUNCTION__ );
- } else {
- LOGD ( "%s, open pq success!", __FUNCTION__ );
- }
+ if (mpPqData->openDB() ) {
+ LOGW ( "%s, open pq failed!", __FUNCTION__ );
+ } else {
+ LOGD ( "%s, open pq success!", __FUNCTION__ );
+ }
- int ret = -1;
- int backlight = 100;
- int offset_r = 0, offset_g = 0, offset_b = 0, gain_r = 1024, gain_g = 1024, gain_b = 1024;
+ int ret = -1;
+ int backlight = 100;
+ int offset_r = 0, offset_g = 0, offset_b = 0, gain_r = 1024, gain_g = 1024, gain_b = 1024;
- Vpp_GetVppConfig();
+ Vpp_GetVppConfig();
- ret = VPP_OpenModule();
- backlight = Tv_GetBacklight ( SOURCE_TYPE_TV );
+ ret = VPP_OpenModule();
+ backlight = Tv_GetBacklight ( SOURCE_TYPE_TV );
- if ( mbVppCfg_backlight_init) {
- backlight = ( backlight + 100 ) * 255 / 200;
+ if ( mbVppCfg_backlight_init) {
+ backlight = ( backlight + 100 ) * 255 / 200;
- if ( backlight < 127 || backlight > 255 ) {
- backlight = 255;
- }
- }
+ if ( backlight < 127 || backlight > 255 ) {
+ backlight = 255;
+ }
+ }
- Tv_SetBacklightWithoutSave ( backlight, SOURCE_TYPE_TV );
+ Tv_SetBacklightWithoutSave ( backlight, SOURCE_TYPE_TV );
- if ( SSMReadNonStandardValue() & 1 ) {
- Set_Fixed_NonStandard ( 0 ); //close
- } else {
- Set_Fixed_NonStandard ( 2 ); //open
- }
+ if ( SSMReadNonStandardValue() & 1 ) {
+ Set_Fixed_NonStandard ( 0 ); //close
+ } else {
+ Set_Fixed_NonStandard ( 2 ); //open
+ }
- Tv_LoadVppSettings ( SOURCE_TYPE_MPEG, TVIN_SIG_FMT_NULL, INDEX_2D, TVIN_TFMT_2D );
+ Tv_LoadVppSettings ( SOURCE_TYPE_MPEG, TVIN_SIG_FMT_NULL, INDEX_2D, TVIN_TFMT_2D );
- return ret;
+ return ret;
}
int CVpp::Vpp_Uninit ( void )
{
- Vpp_ResetLastVppSettingsSourceType();
- VPP_CloseModule();
- mpPqData->closeDb();
- return 0;
+ Vpp_ResetLastVppSettingsSourceType();
+ VPP_CloseModule();
+ mpPqData->closeDb();
+ return 0;
}
CPqData *CVpp::getPqData()
{
- return mpPqData;
+ return mpPqData;
}
int CVpp::VPP_OpenModule ( void )
{
- if ( vpp_amvideo_fd < 0 ) {
- vpp_amvideo_fd = open ( VPP_DEV_PATH, O_RDWR );
+ if ( vpp_amvideo_fd < 0 ) {
+ vpp_amvideo_fd = open ( VPP_DEV_PATH, O_RDWR );
- LOGD ( "~~~open~~~##VPP_OpenModule##VPP_DEV_PATH : %s##" , VPP_DEV_PATH);
+ LOGD ( "~~~open~~~##VPP_OpenModule##VPP_DEV_PATH : %s##" , VPP_DEV_PATH);
- if ( vpp_amvideo_fd < 0 ) {
- LOGE ( "Open vpp module, error(%s)!\n", strerror ( errno ) );
- return -1;
- }
- }
+ if ( vpp_amvideo_fd < 0 ) {
+ LOGE ( "Open vpp module, error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
+ }
- if ( vpp_amvideo_3d_fd < 0 ) {
- vpp_amvideo_3d_fd = open ( VPP_3D_DEV_PATH, O_RDWR );
- LOGD ( "~~~open~~~##VPP_OpenModule##VPP_3D_DEV_PATH : %s##" , VPP_3D_DEV_PATH);
+ if ( vpp_amvideo_3d_fd < 0 ) {
+ vpp_amvideo_3d_fd = open ( VPP_3D_DEV_PATH, O_RDWR );
+ LOGD ( "~~~open~~~##VPP_OpenModule##VPP_3D_DEV_PATH : %s##" , VPP_3D_DEV_PATH);
- if ( vpp_amvideo_3d_fd < 0 ) {
- LOGE ( "Open vpp 3d module, error(%s)!\n", strerror ( errno ) );
- return -1;
- }
- }
+ if ( vpp_amvideo_3d_fd < 0 ) {
+ LOGE ( "Open vpp 3d module, error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
+ }
- return vpp_amvideo_fd;
+ return vpp_amvideo_fd;
}
int CVpp::VPP_CloseModule ( void )
{
- if ( vpp_amvideo_fd >= 0 ) {
- close ( vpp_amvideo_fd );
- vpp_amvideo_fd = -1;
- }
+ if ( vpp_amvideo_fd >= 0 ) {
+ close ( vpp_amvideo_fd );
+ vpp_amvideo_fd = -1;
+ }
- if ( vpp_amvideo_3d_fd >= 0 ) {
- close ( vpp_amvideo_3d_fd );
- vpp_amvideo_3d_fd = -1;
- }
+ if ( vpp_amvideo_3d_fd >= 0 ) {
+ close ( vpp_amvideo_3d_fd );
+ vpp_amvideo_3d_fd = -1;
+ }
- return 0;
+ return 0;
}
int CVpp::VPP_DeviceIOCtl ( int request, ... )
{
- int tmp_ret = -1;
- va_list ap;
- void *arg;
- va_start ( ap, request );
- arg = va_arg ( ap, void * );
- va_end ( ap );
- tmp_ret = ioctl ( vpp_amvideo_fd, request, arg );
- return tmp_ret;
+ int tmp_ret = -1;
+ va_list ap;
+ void *arg;
+ va_start ( ap, request );
+ arg = va_arg ( ap, void * );
+ va_end ( ap );
+ tmp_ret = ioctl ( vpp_amvideo_fd, request, arg );
+ return tmp_ret;
}
int CVpp::Vpp_LoadRegs ( am_regs_t regs )
{
- int rt = VPP_DeviceIOCtl ( AMVECM_IOC_LOAD_REG, &regs );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##Vpp_LoadRegs##AMVECM_IOC_LOAD_REG##" );
+ int rt = VPP_DeviceIOCtl ( AMVECM_IOC_LOAD_REG, &regs );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##Vpp_LoadRegs##AMVECM_IOC_LOAD_REG##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_LoadRegs, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_LoadRegs, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::Tv_LoadVppSettings ( tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt )
{
- int val = 0, ret = -1;
- vpp_color_temperature_mode_t temp_mode = VPP_COLOR_TEMPERATURE_MODE_STANDARD;
- vpp_picture_mode_t pqmode = VPP_PICTURE_MODE_STANDARD;
- vpp_display_mode_t dispmode = VPP_DISPLAY_MODE_169;
- vpp_noise_reduction_mode_t nr_mode = VPP_NOISE_REDUCTION_MODE_MID;
- tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
+ int val = 0, ret = -1;
+ vpp_color_temperature_mode_t temp_mode = VPP_COLOR_TEMPERATURE_MODE_STANDARD;
+ vpp_picture_mode_t pqmode = VPP_PICTURE_MODE_STANDARD;
+ vpp_display_mode_t dispmode = VPP_DISPLAY_MODE_169;
+ vpp_noise_reduction_mode_t nr_mode = VPP_NOISE_REDUCTION_MODE_MID;
+ tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
- if ( ( vpp_setting_last_source_type == source_type )
- && ( vpp_setting_last_sig_fmt == sig_fmt )
- /*&& ( vpp_setting_last_3d_status == status showbo mark)*/
- && ( vpp_setting_last_trans_fmt == trans_fmt ) ) {
- return -1;
- }
+ if ( ( vpp_setting_last_source_type == source_type )
+ && ( vpp_setting_last_sig_fmt == sig_fmt )
+ /*&& ( vpp_setting_last_3d_status == status showbo mark)*/
+ && ( vpp_setting_last_trans_fmt == trans_fmt ) ) {
+ return -1;
+ }
- nr_mode = Tv_GetNoiseReductionMode ( source_type );
- ret |= Vpp_SetNoiseReductionMode ( nr_mode, source_type , source_port, sig_fmt, is3d, trans_fmt);
- ret |= Vpp_SetXVYCCMode( VPP_XVYCC_MODE_STANDARD, source_type, source_port, sig_fmt, is3d, trans_fmt );
- ret |= Vpp_SetMCDIMode( VPP_MCDI_MODE_STANDARD, source_type , source_port, sig_fmt, is3d, trans_fmt );
+ nr_mode = Tv_GetNoiseReductionMode ( source_type );
+ ret |= Vpp_SetNoiseReductionMode ( nr_mode, source_type , source_port, sig_fmt, is3d, trans_fmt);
+ ret |= Vpp_SetXVYCCMode( VPP_XVYCC_MODE_STANDARD, source_type, source_port, sig_fmt, is3d, trans_fmt );
+ ret |= Vpp_SetMCDIMode( VPP_MCDI_MODE_STANDARD, source_type , source_port, sig_fmt, is3d, trans_fmt );
- Vpp_LoadBasicRegs ( source_type, sig_fmt, is3d, trans_fmt );
- Vpp_LoadGamma ( source_type, sig_fmt );
+ Vpp_LoadBasicRegs ( source_type, sig_fmt, is3d, trans_fmt );
+ Vpp_LoadGamma ( source_type, sig_fmt );
- ret |= Vpp_SetBaseColorMode ( Tv_GetBaseColorMode() , source_port, sig_fmt, is3d, trans_fmt);
+ ret |= Vpp_SetBaseColorMode ( Tv_GetBaseColorMode() , source_port, sig_fmt, is3d, trans_fmt);
- temp_mode = Tv_GetColorTemperature ( source_type );
+ temp_mode = Tv_GetColorTemperature ( source_type );
- if ( temp_mode == VPP_COLOR_TEMPERATURE_MODE_USER ) {
- ret |= Vpp_SetColorTemperatureUser ( temp_mode, source_type );
- } else {
- CheckColorTemperatureParamAlldata(TVIN_PORT_HDMI0, sig_fmt, trans_fmt); // check colortmp backup data
- ret |= Vpp_SetColorTemperature ( temp_mode, source_type , source_port, sig_fmt, trans_fmt);
- }
+ if ( temp_mode == VPP_COLOR_TEMPERATURE_MODE_USER ) {
+ ret |= Vpp_SetColorTemperatureUser ( temp_mode, source_type );
+ } else {
+ CheckColorTemperatureParamAlldata(TVIN_PORT_HDMI0, sig_fmt, trans_fmt); // check colortmp backup data
+ ret |= Vpp_SetColorTemperature ( temp_mode, source_type , source_port, sig_fmt, trans_fmt);
+ }
- pqmode = Tv_GetPQMode ( source_type );
- ret |= Vpp_SetPQMode ( pqmode, source_type , source_port, sig_fmt, is3d, trans_fmt);
+ pqmode = Tv_GetPQMode ( source_type );
+ ret |= Vpp_SetPQMode ( pqmode, source_type , source_port, sig_fmt, is3d, trans_fmt);
- ret |= Tv_SetDNLP(source_type , source_port, sig_fmt, is3d, trans_fmt);
+ ret |= Tv_SetDNLP(source_type , source_port, sig_fmt, is3d, trans_fmt);
- vpp_setting_last_source_type = source_type;
- vpp_setting_last_sig_fmt = sig_fmt;
- //showbo mark vpp_setting_last_3d_status = status;
- vpp_setting_last_trans_fmt = trans_fmt;
+ vpp_setting_last_source_type = source_type;
+ vpp_setting_last_sig_fmt = sig_fmt;
+ //showbo mark vpp_setting_last_3d_status = status;
+ vpp_setting_last_trans_fmt = trans_fmt;
- return 0;
+ return 0;
}
int CVpp::Vpp_GetVppConfig ( void )
{
- const char *config_value;
- int cfg_item_count = 0;
- char *token = NULL;
- const char *strDelimit = ",";
- char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
+ const char *config_value;
+ int cfg_item_count = 0;
+ char *token = NULL;
+ const char *strDelimit = ",";
+ char data_str[CC_CFG_VALUE_STR_MAX_LEN] = { 0 };
- config_value = config_get_str ( "TV", "vpp.pqmode.depend.bklight", "null" );
+ config_value = config_get_str ( "TV", "vpp.pqmode.depend.bklight", "null" );
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- mbVppCfg_pqmode_depend_bklight = true;
- } else {
- mbVppCfg_pqmode_depend_bklight = false;
- }
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ mbVppCfg_pqmode_depend_bklight = true;
+ } else {
+ mbVppCfg_pqmode_depend_bklight = false;
+ }
- config_value = config_get_str ( "TV", "vpp.color.temp.bysource", "enable" );
+ config_value = config_get_str ( "TV", "vpp.color.temp.bysource", "enable" );
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- mbVppCfg_colortemp_by_source = true;
- } else {
- mbVppCfg_colortemp_by_source = true;
- }
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ mbVppCfg_colortemp_by_source = true;
+ } else {
+ mbVppCfg_colortemp_by_source = true;
+ }
- config_value = config_get_str ( "TV", "vpp.panoroma.switch", "null" );
+ config_value = config_get_str ( "TV", "vpp.panoroma.switch", "null" );
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- mbVppCfg_panorama_switch = true;
- } else {
- mbVppCfg_panorama_switch = false;
- }
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ mbVppCfg_panorama_switch = true;
+ } else {
+ mbVppCfg_panorama_switch = false;
+ }
- config_value = config_get_str ( "TV", "vpp.backlight.reverse", "null" );
+ config_value = config_get_str ( "TV", "vpp.backlight.reverse", "null" );
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- mbVppCfg_backlight_reverse = true;
- } else {
- mbVppCfg_backlight_reverse = false;
- }
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ mbVppCfg_backlight_reverse = true;
+ } else {
+ mbVppCfg_backlight_reverse = false;
+ }
- config_value = config_get_str ( "TV", "vpp.backlight.init", "null" );
+ config_value = config_get_str ( "TV", "vpp.backlight.init", "null" );
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- mbVppCfg_backlight_init = true;
- } else {
- mbVppCfg_backlight_init = false;
- }
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ mbVppCfg_backlight_init = true;
+ } else {
+ mbVppCfg_backlight_init = false;
+ }
- config_value = config_get_str ( "TV", "vpp.pqwithout.hue", "null" );
+ config_value = config_get_str ( "TV", "vpp.pqwithout.hue", "null" );
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- mbVppCfg_pqmode_without_hue = true;
- } else {
- mbVppCfg_pqmode_without_hue = false;
- }
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ mbVppCfg_pqmode_without_hue = true;
+ } else {
+ mbVppCfg_pqmode_without_hue = false;
+ }
- config_value = config_get_str ( "TV", "vpp.hue.reverse", "null" );
+ config_value = config_get_str ( "TV", "vpp.hue.reverse", "null" );
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- mbVppCfg_hue_reverse = true;
- } else {
- mbVppCfg_hue_reverse = false;
- }
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ mbVppCfg_hue_reverse = true;
+ } else {
+ mbVppCfg_hue_reverse = false;
+ }
- config_value = config_get_str ( "TV", "vpp.gamma.onoff", "null" );
+ config_value = config_get_str ( "TV", "vpp.gamma.onoff", "null" );
- if ( strcmp ( config_value, "disable" ) == 0 ) {
- mbVppCfg_gamma_onoff = true;
- } else {
- mbVppCfg_gamma_onoff = false;
- }
+ if ( strcmp ( config_value, "disable" ) == 0 ) {
+ mbVppCfg_gamma_onoff = true;
+ } else {
+ mbVppCfg_gamma_onoff = false;
+ }
- config_value = config_get_str ( "TV", "vpp.whitebalance.same_param", "null" );
+ config_value = config_get_str ( "TV", "vpp.whitebalance.same_param", "null" );
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- mbVppCfg_whitebalance_sameparam = true;
- } else {
- mbVppCfg_whitebalance_sameparam = false;
- }
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ mbVppCfg_whitebalance_sameparam = true;
+ } else {
+ mbVppCfg_whitebalance_sameparam = false;
+ }
- config_value = config_get_str ( "TV", "vpp.new.cm", "disable" );
+ config_value = config_get_str ( "TV", "vpp.new.cm", "disable" );
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- mbVppCfg_new_cm = true;
- } else {
- mbVppCfg_new_cm = false;
- }
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ mbVppCfg_new_cm = true;
+ } else {
+ mbVppCfg_new_cm = false;
+ }
- config_value = config_get_str ( "TV", "vpp.new.nr", "disable" );
+ config_value = config_get_str ( "TV", "vpp.new.nr", "disable" );
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- mbVppCfg_new_nr = true;
- } else {
- mbVppCfg_new_nr = false;
- }
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ mbVppCfg_new_nr = true;
+ } else {
+ mbVppCfg_new_nr = false;
+ }
- return 0;
+ return 0;
}
int CVpp::Vpp_LoadBasicRegs ( tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt )
{
- am_regs_t regs;
- int ret = -1, rangeRet = -1, formatRet = -1, enableFlag = -1;
+ am_regs_t regs;
+ int ret = -1, rangeRet = -1, formatRet = -1, enableFlag = -1;
- if ( source_type == SOURCE_TYPE_HDMI ) {
- rangeRet = GetFileAttrIntValue ( "/sys/module/tvin_hdmirx/parameters/rgb_quant_range" );
- formatRet = GetFileAttrIntValue ( "/sys/module/tvin_hdmirx/parameters/cur_colorspace" );
+ if ( source_type == SOURCE_TYPE_HDMI ) {
+ rangeRet = GetFileAttrIntValue ( "/sys/module/tvin_hdmirx/parameters/rgb_quant_range" );
+ formatRet = GetFileAttrIntValue ( "/sys/module/tvin_hdmirx/parameters/cur_colorspace" );
- if ( rangeRet == LIMIT_RANGE && formatRet == RGB_FORMAT ) {
- enableFlag = 1;
- }
- }
+ if ( rangeRet == LIMIT_RANGE && formatRet == RGB_FORMAT ) {
+ enableFlag = 1;
+ }
+ }
- tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
+ tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
- if ( mpPqData->getRegValues ( source_port, sig_fmt, is3d, trans_fmt, &regs ) > 0 ) {
- if ( Vpp_LoadRegs ( regs ) < 0 ) {
- LOGE ( "%s, Vpp_LoadRegs failed!\n", __FUNCTION__ );
- } else {
- ret = 0;
- }
- } else {
- LOGE ( "%s getRegValues failed!\n", "Vpp_LoadBasicRegs" );
- }
+ if ( mpPqData->getRegValues ( source_port, sig_fmt, is3d, trans_fmt, &regs ) > 0 ) {
+ if ( Vpp_LoadRegs ( regs ) < 0 ) {
+ LOGE ( "%s, Vpp_LoadRegs failed!\n", __FUNCTION__ );
+ } else {
+ ret = 0;
+ }
+ } else {
+ LOGE ( "%s getRegValues failed!\n", "Vpp_LoadBasicRegs" );
+ }
- if (mpPqData->LoadAllPQData ( source_port, sig_fmt, is3d, trans_fmt, enableFlag ) == 0 ) {
- ret = 0;
- } else {
- LOGE ( "%s, getPQData failed!\n", "Vpp_LoadBasicRegs" );
- ret = -1;
- }
+ if (mpPqData->LoadAllPQData ( source_port, sig_fmt, is3d, trans_fmt, enableFlag ) == 0 ) {
+ ret = 0;
+ } else {
+ LOGE ( "%s, getPQData failed!\n", "Vpp_LoadBasicRegs" );
+ ret = -1;
+ }
- return ret;
+ return ret;
}
int CVpp::Vpp_ResetLastVppSettingsSourceType ( void )
{
- vpp_setting_last_source_type = SOURCE_TYPE_MAX;
- vpp_setting_last_sig_fmt = TVIN_SIG_FMT_MAX;
- //showbo mark vpp_setting_last_3d_status = STATUS3D_MAX;
- vpp_setting_last_trans_fmt = TVIN_TFMT_3D_MAX;
- return 0;
+ vpp_setting_last_source_type = SOURCE_TYPE_MAX;
+ vpp_setting_last_sig_fmt = TVIN_SIG_FMT_MAX;
+ //showbo mark vpp_setting_last_3d_status = STATUS3D_MAX;
+ vpp_setting_last_trans_fmt = TVIN_TFMT_3D_MAX;
+ return 0;
}
int CVpp::VPP3D_DeviceIOCtl ( int request, ... )
{
- int tmp_ret = -1;
- va_list ap;
- void *arg;
+ int tmp_ret = -1;
+ va_list ap;
+ void *arg;
- if ( vpp_amvideo_3d_fd >= 0 ) {
- va_start ( ap, request );
- arg = va_arg ( ap, void * );
- va_end ( ap );
+ if ( vpp_amvideo_3d_fd >= 0 ) {
+ va_start ( ap, request );
+ arg = va_arg ( ap, void * );
+ va_end ( ap );
- tmp_ret = ioctl ( vpp_amvideo_3d_fd, request, arg );
- return tmp_ret;
- }
+ tmp_ret = ioctl ( vpp_amvideo_3d_fd, request, arg );
+ return tmp_ret;
+ }
- return -1;
+ return -1;
}
int CVpp::Vpp_GetPQModeValue ( tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *pq_para )
{
- vpp_pq_para_t parms;
- vpp_picture_mode_t real_pq_mode;
-
- if ( pq_para == NULL ) {
- return -1;
- }
-
- if (pq_mode == VPP_PICTURE_MODE_MOVIE) {
- real_pq_mode = VPP_PICTURE_MODE_SOFT;
- } else if (pq_mode == VPP_PICTURE_MODE_COLORFUL) {
- real_pq_mode = VPP_PICTURE_MODE_BRIGHT;
- } else {
- real_pq_mode = pq_mode;
- }
- if ( mpPqData->PQ_GetPQModeParams ( source_type, real_pq_mode, pq_para ) == 0 ) {
- if ( mbVppCfg_pqmode_without_hue) {
- SSMReadHue ( source_type, & ( pq_para->hue ) );
- }
- if (pq_mode == VPP_PICTURE_MODE_MOVIE) {
- pq_para->brightness -= 10;
- pq_para->contrast -= 10;
- pq_para->saturation -= 10;
- pq_para->sharpness -= 10;
- } else if (pq_mode == VPP_PICTURE_MODE_COLORFUL) {
- pq_para->brightness += 10;
- pq_para->contrast += 10;
- pq_para->saturation += 10;
- pq_para->sharpness += 10;
- } else {}
-
- } else {
- LOGE ( "%s, PQ_GetPQModeParams failed!\n", "Vpp_GetPQModeValue" );
- return -1;
- }
-
- return 0;
+ vpp_pq_para_t parms;
+ vpp_picture_mode_t real_pq_mode;
+
+ if ( pq_para == NULL ) {
+ return -1;
+ }
+
+ if (pq_mode == VPP_PICTURE_MODE_MOVIE) {
+ real_pq_mode = VPP_PICTURE_MODE_SOFT;
+ } else if (pq_mode == VPP_PICTURE_MODE_COLORFUL) {
+ real_pq_mode = VPP_PICTURE_MODE_BRIGHT;
+ } else {
+ real_pq_mode = pq_mode;
+ }
+ if ( mpPqData->PQ_GetPQModeParams ( source_type, real_pq_mode, pq_para ) == 0 ) {
+ if ( mbVppCfg_pqmode_without_hue) {
+ SSMReadHue ( source_type, & ( pq_para->hue ) );
+ }
+ if (pq_mode == VPP_PICTURE_MODE_MOVIE) {
+ pq_para->brightness -= 10;
+ pq_para->contrast -= 10;
+ pq_para->saturation -= 10;
+ pq_para->sharpness -= 10;
+ } else if (pq_mode == VPP_PICTURE_MODE_COLORFUL) {
+ pq_para->brightness += 10;
+ pq_para->contrast += 10;
+ pq_para->saturation += 10;
+ pq_para->sharpness += 10;
+ } else {}
+
+ } else {
+ LOGE ( "%s, PQ_GetPQModeParams failed!\n", "Vpp_GetPQModeValue" );
+ return -1;
+ }
+
+ return 0;
}
int CVpp::Vpp_SetPQParams ( tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t pq_para , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt)
{
- int ret = 0, brightness = 50, contrast = 50, saturation = 50, hue = 50, sharnpess = 50;
- am_regs_t regs;
- int level;
-
- if ( pq_para.brightness >= 0 && pq_para.brightness <= 100 ) {
- if ( mpPqData->PQ_GetBrightnessParams ( source_port, sig_fmt, is3d, trans_fmt, pq_para.brightness, &brightness ) == 0 ) {
- } else {
- LOGE ( "%s, PQ_GetBrightnessParams error!\n", "Vpp_SetPQParams" );
- }
-
- ret |= VPP_SetVideoBrightness ( brightness );
- }
-
- if ( pq_para.contrast >= 0 && pq_para.contrast <= 100 ) {
- if ( mpPqData->PQ_GetContrastParams ( source_port, sig_fmt, is3d, trans_fmt, pq_para.contrast, &contrast ) == 0 ) {
- } else {
- LOGE ( "%s, PQ_GetBrightnessParams error!\n", "Vpp_SetPQParams" );
- }
-
- ret |= VPP_SetVideoContrast ( contrast );
- }
-
- if ( pq_para.saturation >= 0 && pq_para.saturation <= 100 ) {
- if ( mpPqData->PQ_GetSaturationParams ( source_port, sig_fmt, is3d, trans_fmt, pq_para.saturation, &saturation ) == 0 ) {
-
- if ( mbVppCfg_hue_reverse) {
- pq_para.hue = 100 - pq_para.hue;
- } else {
- pq_para.hue = pq_para.hue;
- }
-
- if ( mpPqData->PQ_GetHueParams ( source_port, sig_fmt, is3d, trans_fmt, pq_para.hue, &hue ) == 0 ) {
- if ( ( source_type == SOURCE_TYPE_TV || source_type == SOURCE_TYPE_AV )
- && ( sig_fmt == TVIN_SIG_FMT_CVBS_NTSC_M || sig_fmt == TVIN_SIG_FMT_CVBS_NTSC_443 ) ) {
- } else {
- hue = 0;
- }
- } else {
- LOGE ( "%s, PQ_GetHueParams error!\n", "Vpp_SetPQParams" );
- }
- } else {
- LOGE ( "%s, PQ_GetSaturationParams error!\n", "Vpp_SetPQParams" );
- }
-
- ret |= VPP_SetVideoSaturationHue ( saturation, hue );
- }
-
- if ( pq_para.sharpness >= 0 && pq_para.sharpness <= 100) {
- level = pq_para.sharpness;
-
- if ( mpPqData->PQ_GetSharpnessParams ( source_port, sig_fmt, is3d, trans_fmt, level, &regs ) == 0 ) {
- if ( Vpp_LoadRegs ( regs ) < 0 ) {
- LOGE ( "%s, PQ_GetSharpnessParams failed!\n", "Vpp_SetPQParams" );
- }
- } else {
- LOGE ( "%s, PQ_GetSharpnessParams failed!\n", "Vpp_SetPQParams" );
- }
- }
-
- if (pq_mode == VPP_PICTURE_MODE_MOVIE) {
- ret |= Tv_SetColorTemperature(VPP_COLOR_TEMPERATURE_MODE_WARM, source_type, 1);
- } else if (pq_mode == VPP_PICTURE_MODE_COLORFUL) {
- ret |= Tv_SetColorTemperature(VPP_COLOR_TEMPERATURE_MODE_COLD, source_type, 1);
- }
-
- return ret;
+ int ret = 0, brightness = 50, contrast = 50, saturation = 50, hue = 50, sharnpess = 50;
+ am_regs_t regs;
+ int level;
+
+ if ( pq_para.brightness >= 0 && pq_para.brightness <= 100 ) {
+ if ( mpPqData->PQ_GetBrightnessParams ( source_port, sig_fmt, is3d, trans_fmt, pq_para.brightness, &brightness ) == 0 ) {
+ } else {
+ LOGE ( "%s, PQ_GetBrightnessParams error!\n", "Vpp_SetPQParams" );
+ }
+
+ ret |= VPP_SetVideoBrightness ( brightness );
+ }
+
+ if ( pq_para.contrast >= 0 && pq_para.contrast <= 100 ) {
+ if ( mpPqData->PQ_GetContrastParams ( source_port, sig_fmt, is3d, trans_fmt, pq_para.contrast, &contrast ) == 0 ) {
+ } else {
+ LOGE ( "%s, PQ_GetBrightnessParams error!\n", "Vpp_SetPQParams" );
+ }
+
+ ret |= VPP_SetVideoContrast ( contrast );
+ }
+
+ if ( pq_para.saturation >= 0 && pq_para.saturation <= 100 ) {
+ if ( mpPqData->PQ_GetSaturationParams ( source_port, sig_fmt, is3d, trans_fmt, pq_para.saturation, &saturation ) == 0 ) {
+
+ if ( mbVppCfg_hue_reverse) {
+ pq_para.hue = 100 - pq_para.hue;
+ } else {
+ pq_para.hue = pq_para.hue;
+ }
+
+ if ( mpPqData->PQ_GetHueParams ( source_port, sig_fmt, is3d, trans_fmt, pq_para.hue, &hue ) == 0 ) {
+ if ( ( source_type == SOURCE_TYPE_TV || source_type == SOURCE_TYPE_AV )
+ && ( sig_fmt == TVIN_SIG_FMT_CVBS_NTSC_M || sig_fmt == TVIN_SIG_FMT_CVBS_NTSC_443 ) ) {
+ } else {
+ hue = 0;
+ }
+ } else {
+ LOGE ( "%s, PQ_GetHueParams error!\n", "Vpp_SetPQParams" );
+ }
+ } else {
+ LOGE ( "%s, PQ_GetSaturationParams error!\n", "Vpp_SetPQParams" );
+ }
+
+ ret |= VPP_SetVideoSaturationHue ( saturation, hue );
+ }
+
+ if ( pq_para.sharpness >= 0 && pq_para.sharpness <= 100) {
+ level = pq_para.sharpness;
+
+ if ( mpPqData->PQ_GetSharpnessParams ( source_port, sig_fmt, is3d, trans_fmt, level, &regs ) == 0 ) {
+ if ( Vpp_LoadRegs ( regs ) < 0 ) {
+ LOGE ( "%s, PQ_GetSharpnessParams failed!\n", "Vpp_SetPQParams" );
+ }
+ } else {
+ LOGE ( "%s, PQ_GetSharpnessParams failed!\n", "Vpp_SetPQParams" );
+ }
+ }
+
+ if (pq_mode == VPP_PICTURE_MODE_MOVIE) {
+ ret |= Tv_SetColorTemperature(VPP_COLOR_TEMPERATURE_MODE_WARM, source_type, 1);
+ } else if (pq_mode == VPP_PICTURE_MODE_COLORFUL) {
+ ret |= Tv_SetColorTemperature(VPP_COLOR_TEMPERATURE_MODE_COLD, source_type, 1);
+ }
+
+ return ret;
}
int CVpp::Vpp_SetPQMode ( vpp_picture_mode_t pq_mode, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt)
{
- vpp_pq_para_t pq_para;
- int ret = -1;
+ vpp_pq_para_t pq_para;
+ int ret = -1;
- if ( pq_mode == VPP_PICTURE_MODE_USER ) {
- ret = SSMReadBrightness ( source_type, &pq_para.brightness );
- ret = SSMReadContrast ( source_type, &pq_para.contrast );
- ret = SSMReadSaturation ( source_type, &pq_para.saturation );
- ret = SSMReadHue ( source_type, &pq_para.hue );
- ret = SSMReadSharpness ( source_type, &pq_para.sharpness );
- } /*else if (pq_mode == VPP_PICTURE_MODE_MOVIE) {
+ if ( pq_mode == VPP_PICTURE_MODE_USER ) {
+ ret = SSMReadBrightness ( source_type, &pq_para.brightness );
+ ret = SSMReadContrast ( source_type, &pq_para.contrast );
+ ret = SSMReadSaturation ( source_type, &pq_para.saturation );
+ ret = SSMReadHue ( source_type, &pq_para.hue );
+ ret = SSMReadSharpness ( source_type, &pq_para.sharpness );
+ } /*else if (pq_mode == VPP_PICTURE_MODE_MOVIE) {
ret = Vpp_GetPQModeValue ( source_type, VPP_PICTURE_MODE_SOFT, &pq_para );
pq_para.brightness -=10;
pq_para.contrast -=10;
@@ -506,745 +506,745 @@ int CVpp::Vpp_SetPQMode ( vpp_picture_mode_t pq_mode, tv_source_input_type_t sou
pq_para.saturation +=10;
pq_para.sharpness +=10;
}*/ else {
- ret = Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para );
- }
+ ret = Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para );
+ }
- ret |= Vpp_SetPQParams ( source_type, pq_mode, pq_para , source_port , sig_fmt , is3d , trans_fmt );
+ ret |= Vpp_SetPQParams ( source_type, pq_mode, pq_para , source_port , sig_fmt , is3d , trans_fmt );
- return ret;
+ return ret;
}
int CVpp::Tv_SavePQMode ( vpp_picture_mode_t pq_mode, tv_source_input_type_t source_type )
{
- vpp_pq_para_t pq_para;
- int ret = -1;
- int tmp_pic_mode = 0;
+ vpp_pq_para_t pq_para;
+ int ret = -1;
+ int tmp_pic_mode = 0;
- tmp_pic_mode = ( int ) pq_mode;
- ret = SSMSavePictureMode ( source_type, tmp_pic_mode );
- return ret;
+ tmp_pic_mode = ( int ) pq_mode;
+ ret = SSMSavePictureMode ( source_type, tmp_pic_mode );
+ return ret;
}
int CVpp::Tv_SetPQMode ( vpp_picture_mode_t pq_mode, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save )
{
- tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
+ tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
- if ( 0 == Vpp_SetPQMode ( pq_mode, source_type , source_port , sig_fmt , is3d , trans_fmt) ) {
- if ( is_save == 1 ) {
- return Tv_SavePQMode ( pq_mode, source_type );
- } else {
- return 0;
- }
- }
+ if ( 0 == Vpp_SetPQMode ( pq_mode, source_type , source_port , sig_fmt , is3d , trans_fmt) ) {
+ if ( is_save == 1 ) {
+ return Tv_SavePQMode ( pq_mode, source_type );
+ } else {
+ return 0;
+ }
+ }
- LOGE ( "%s, failed!", "Tv_SetPQMode" );
- return -1;
+ LOGE ( "%s, failed!", "Tv_SetPQMode" );
+ return -1;
}
vpp_picture_mode_t CVpp::Tv_GetPQMode ( tv_source_input_type_t source_type )
{
- vpp_picture_mode_t data = VPP_PICTURE_MODE_STANDARD;
- int tmp_pic_mode = 0;
+ vpp_picture_mode_t data = VPP_PICTURE_MODE_STANDARD;
+ int tmp_pic_mode = 0;
- SSMReadPictureMode ( source_type, &tmp_pic_mode );
- data = ( vpp_picture_mode_t ) tmp_pic_mode;
+ SSMReadPictureMode ( source_type, &tmp_pic_mode );
+ data = ( vpp_picture_mode_t ) tmp_pic_mode;
- if ( data < VPP_PICTURE_MODE_STANDARD || data >= VPP_PICTURE_MODE_MAX ) {
- data = VPP_PICTURE_MODE_STANDARD;
- }
+ if ( data < VPP_PICTURE_MODE_STANDARD || data >= VPP_PICTURE_MODE_MAX ) {
+ data = VPP_PICTURE_MODE_STANDARD;
+ }
- return data;
+ return data;
}
int CVpp::Vpp_SetColorDemoMode ( vpp_color_demomode_t demomode )
{
- cm_regmap_t regmap;
- unsigned long *temp_regmap;
- int i = 0;
- int tmp_demo_mode = 0;
- vpp_display_mode_t displaymode = VPP_DISPLAY_MODE_MODE43;
-
- switch ( demomode ) {
- case VPP_COLOR_DEMO_MODE_YOFF:
- temp_regmap = DemoColorYOffRegMap;
- break;
-
- case VPP_COLOR_DEMO_MODE_COFF:
- temp_regmap = DemoColorCOffRegMap;
- break;
-
- case VPP_COLOR_DEMO_MODE_GOFF:
- temp_regmap = DemoColorGOffRegMap;
- break;
-
- case VPP_COLOR_DEMO_MODE_MOFF:
- temp_regmap = DemoColorMOffRegMap;
- break;
-
- case VPP_COLOR_DEMO_MODE_ROFF:
- temp_regmap = DemoColorROffRegMap;
- break;
-
- case VPP_COLOR_DEMO_MODE_BOFF:
- temp_regmap = DemoColorBOffRegMap;
- break;
-
- case VPP_COLOR_DEMO_MODE_RGBOFF:
- temp_regmap = DemoColorRGBOffRegMap;
- break;
-
- case VPP_COLOR_DEMO_MODE_YMCOFF:
- temp_regmap = DemoColorYMCOffRegMap;
- break;
-
- case VPP_COLOR_DEMO_MODE_ALLOFF:
- temp_regmap = DemoColorALLOffRegMap;
- break;
-
- case VPP_COLOR_DEMO_MODE_ALLON:
- default:
- if ( displaymode == VPP_DISPLAY_MODE_MODE43 ) {
- temp_regmap = DemoColorSplit4_3RegMap;
- } else {
- temp_regmap = DemoColorSplitRegMap;
- }
+ cm_regmap_t regmap;
+ unsigned long *temp_regmap;
+ int i = 0;
+ int tmp_demo_mode = 0;
+ vpp_display_mode_t displaymode = VPP_DISPLAY_MODE_MODE43;
- break;
- }
+ switch ( demomode ) {
+ case VPP_COLOR_DEMO_MODE_YOFF:
+ temp_regmap = DemoColorYOffRegMap;
+ break;
- for ( i = 0; i < CM_REG_NUM; i++ ) {
- regmap.reg[i] = temp_regmap[i];
- }
+ case VPP_COLOR_DEMO_MODE_COFF:
+ temp_regmap = DemoColorCOffRegMap;
+ break;
- if ( VPP_SetCMRegisterMap ( &regmap ) == 0 ) {
- tmp_demo_mode = demomode;
- LOGD ( "%s, demomode[%d] success.", "Vpp_SetColorDemoMode", demomode );
- return 0;
- }
+ case VPP_COLOR_DEMO_MODE_GOFF:
+ temp_regmap = DemoColorGOffRegMap;
+ break;
+
+ case VPP_COLOR_DEMO_MODE_MOFF:
+ temp_regmap = DemoColorMOffRegMap;
+ break;
+
+ case VPP_COLOR_DEMO_MODE_ROFF:
+ temp_regmap = DemoColorROffRegMap;
+ break;
+
+ case VPP_COLOR_DEMO_MODE_BOFF:
+ temp_regmap = DemoColorBOffRegMap;
+ break;
- LOGE ( "%s, demomode[%d] failed.", "Vpp_SetColorDemoMode", demomode );
- return -1;
+ case VPP_COLOR_DEMO_MODE_RGBOFF:
+ temp_regmap = DemoColorRGBOffRegMap;
+ break;
+
+ case VPP_COLOR_DEMO_MODE_YMCOFF:
+ temp_regmap = DemoColorYMCOffRegMap;
+ break;
+
+ case VPP_COLOR_DEMO_MODE_ALLOFF:
+ temp_regmap = DemoColorALLOffRegMap;
+ break;
+
+ case VPP_COLOR_DEMO_MODE_ALLON:
+ default:
+ if ( displaymode == VPP_DISPLAY_MODE_MODE43 ) {
+ temp_regmap = DemoColorSplit4_3RegMap;
+ } else {
+ temp_regmap = DemoColorSplitRegMap;
+ }
+
+ break;
+ }
+
+ for ( i = 0; i < CM_REG_NUM; i++ ) {
+ regmap.reg[i] = temp_regmap[i];
+ }
+
+ if ( VPP_SetCMRegisterMap ( &regmap ) == 0 ) {
+ tmp_demo_mode = demomode;
+ LOGD ( "%s, demomode[%d] success.", "Vpp_SetColorDemoMode", demomode );
+ return 0;
+ }
+
+ LOGE ( "%s, demomode[%d] failed.", "Vpp_SetColorDemoMode", demomode );
+ return -1;
}
int CVpp::Vpp_SetBaseColorMode ( vpp_color_basemode_t basemode , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt)
{
- int ret = -1;
- am_regs_t regs;
- LOGD ( "%s.\n", "Vpp_SetBaseColorMode" );
-
- if ( mbVppCfg_new_cm) {
- if ( mpPqData->PQ_GetCM2Params ( ( vpp_color_management2_t ) basemode, source_port, sig_fmt, is3d, trans_fmt, &regs ) == 0 ) {
- ret = Vpp_LoadRegs ( regs );
- } else {
- LOGE ( "PQ_GetCM2Params failed!\n" );
- }
- }
+ int ret = -1;
+ am_regs_t regs;
+ LOGD ( "%s.\n", "Vpp_SetBaseColorMode" );
- return ret;
+ if ( mbVppCfg_new_cm) {
+ if ( mpPqData->PQ_GetCM2Params ( ( vpp_color_management2_t ) basemode, source_port, sig_fmt, is3d, trans_fmt, &regs ) == 0 ) {
+ ret = Vpp_LoadRegs ( regs );
+ } else {
+ LOGE ( "PQ_GetCM2Params failed!\n" );
+ }
+ }
+
+ return ret;
}
int CVpp::Vpp_SetColorTemperatureUser ( vpp_color_temperature_mode_t temp_mode, tv_source_input_type_t source_type )
{
- tcon_rgb_ogo_t rgbogo;
- unsigned int gain_r, gain_g, gain_b;
+ tcon_rgb_ogo_t rgbogo;
+ unsigned int gain_r, gain_g, gain_b;
- if ( SSMReadRGBGainRStart ( 0, &gain_r ) != 0 ) {
- return -1;
- }
+ if ( SSMReadRGBGainRStart ( 0, &gain_r ) != 0 ) {
+ return -1;
+ }
- rgbogo.r_gain = gain_r;
+ rgbogo.r_gain = gain_r;
- if ( SSMReadRGBGainGStart ( 0, &gain_g ) != 0 ) {
- return -1;
- }
+ if ( SSMReadRGBGainGStart ( 0, &gain_g ) != 0 ) {
+ return -1;
+ }
- rgbogo.g_gain = gain_g;
+ rgbogo.g_gain = gain_g;
- if ( SSMReadRGBGainBStart ( 0, &gain_b ) != 0 ) {
- return -1;
- }
+ if ( SSMReadRGBGainBStart ( 0, &gain_b ) != 0 ) {
+ return -1;
+ }
- rgbogo.b_gain = gain_b;
- rgbogo.r_post_offset = 0;
- rgbogo.r_pre_offset = 0;
- rgbogo.g_post_offset = 0;
- rgbogo.g_pre_offset = 0;
- rgbogo.b_post_offset = 0;
- rgbogo.b_pre_offset = 0;
+ rgbogo.b_gain = gain_b;
+ rgbogo.r_post_offset = 0;
+ rgbogo.r_pre_offset = 0;
+ rgbogo.g_post_offset = 0;
+ rgbogo.g_pre_offset = 0;
+ rgbogo.b_post_offset = 0;
+ rgbogo.b_pre_offset = 0;
- if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
- return 0;
- }
+ if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
+ return 0;
+ }
- LOGE ( "%s, source_type_user[%d] failed.", "Vpp_SetColorTemperatureUser", source_type );
- return -1;
+ LOGE ( "%s, source_type_user[%d] failed.", "Vpp_SetColorTemperatureUser", source_type );
+ return -1;
}
int CVpp::Vpp_SetColorTemperature ( vpp_color_temperature_mode_t Tempmode, tv_source_input_type_t source_type, tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt)
{
- tcon_rgb_ogo_t rgbogo, rgbPreOffset;
- int ret = -1;
+ tcon_rgb_ogo_t rgbogo, rgbPreOffset;
+ int ret = -1;
- if ( mbVppCfg_gamma_onoff) {
- VPP_SetGammaOnOff ( 0 );
- } else {
- VPP_SetGammaOnOff ( 1 );
- }
+ if ( mbVppCfg_gamma_onoff) {
+ VPP_SetGammaOnOff ( 0 );
+ } else {
+ VPP_SetGammaOnOff ( 1 );
+ }
- GetColorTemperatureParams ( Tempmode, &rgbogo );
+ GetColorTemperatureParams ( Tempmode, &rgbogo );
- if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
- return 0;
- }
+ if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
+ return 0;
+ }
- LOGE ( "%s, source_type[%d] failed.", "Vpp_SetColorTemperature", source_type );
- return -1;
+ LOGE ( "%s, source_type[%d] failed.", "Vpp_SetColorTemperature", source_type );
+ return -1;
}
int CVpp::Vpp_SetBrightness ( int value, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt )
{
- int ret = -1;
- int params;
- int level;
-
- if ( value >= 0 && value <= 100) {
- level = value;
- LOGD ( "%s.\n", "Vpp_SetBrightness" );
-
- if ( mpPqData->PQ_GetBrightnessParams ( source_port, sig_fmt, is3d, trans_fmt, level, &params ) == 0 ) {
- if ( VPP_SetVideoBrightness ( params ) == 0 ) {
- return 0;
- }
- } else {
- LOGE ( "%s, PQ_GetBrightnessParams failed!\n", "Vpp_SetBrightness" );
- }
- }
+ int ret = -1;
+ int params;
+ int level;
- return ret;
+ if ( value >= 0 && value <= 100) {
+ level = value;
+ LOGD ( "%s.\n", "Vpp_SetBrightness" );
+
+ if ( mpPqData->PQ_GetBrightnessParams ( source_port, sig_fmt, is3d, trans_fmt, level, &params ) == 0 ) {
+ if ( VPP_SetVideoBrightness ( params ) == 0 ) {
+ return 0;
+ }
+ } else {
+ LOGE ( "%s, PQ_GetBrightnessParams failed!\n", "Vpp_SetBrightness" );
+ }
+ }
+
+ return ret;
}
int CVpp::VPP_SetVideoBrightness ( int value )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/class/amvecm/brightness", "w" );
+ fp = fopen ( "/sys/class/amvecm/brightness", "w" );
- LOGD ( "~~~fopen~~~##VPP_SetVideoBrightness##%s : %d ##" , "/sys/class/amvecm/brightness", value);
+ LOGD ( "~~~fopen~~~##VPP_SetVideoBrightness##%s : %d ##" , "/sys/class/amvecm/brightness", value);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/amvecm/brightness error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/amvecm/brightness error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", value );
- fclose ( fp );
- fp = NULL;
+ fprintf ( fp, "%d", value );
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CVpp::Tv_SetBrightness ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save )
{
- tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
+ tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
- if ( 0 == Vpp_SetBrightness ( value, source_type, source_port, sig_fmt, is3d, trans_fmt ) ) {
- if ( is_save == 1 ) {
- return SSMSaveBrightness ( source_type, value );
- } else {
- return 0;
- }
- } else {
- LOGE ( "%s, failed!", "Tv_SetBrightness" );
- return -1;
- }
- return 0;
+ if ( 0 == Vpp_SetBrightness ( value, source_type, source_port, sig_fmt, is3d, trans_fmt ) ) {
+ if ( is_save == 1 ) {
+ return SSMSaveBrightness ( source_type, value );
+ } else {
+ return 0;
+ }
+ } else {
+ LOGE ( "%s, failed!", "Tv_SetBrightness" );
+ return -1;
+ }
+ return 0;
}
int CVpp::Tv_GetBrightness ( tv_source_input_type_t source_type )
{
- int data = 50;
- vpp_pq_para_t pq_para;
- vpp_picture_mode_t pq_mode = Tv_GetPQMode ( source_type );
+ int data = 50;
+ vpp_pq_para_t pq_para;
+ vpp_picture_mode_t pq_mode = Tv_GetPQMode ( source_type );
- if ( pq_mode == VPP_PICTURE_MODE_USER ) {
- SSMReadBrightness ( source_type, &data );
- } else {
- if ( Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para ) == 0 ) {
- data = pq_para.brightness;
- }
- }
+ if ( pq_mode == VPP_PICTURE_MODE_USER ) {
+ SSMReadBrightness ( source_type, &data );
+ } else {
+ if ( Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para ) == 0 ) {
+ data = pq_para.brightness;
+ }
+ }
- if ( data < 0 || data > 100 ) {
- data = 50;
- }
+ if ( data < 0 || data > 100 ) {
+ data = 50;
+ }
- return data;
+ return data;
}
int CVpp::Vpp_SetContrast ( int value, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt )
{
- int ret = -1;
- int params;
- int level;
-
- if ( value >= 0 && value <= 100 ) {
- level = value;
- LOGD ( "%s.\n", "Vpp_SetContrast" );
-
- if ( mpPqData->PQ_GetContrastParams ( source_port, sig_fmt, is3d, trans_fmt, level, &params ) == 0 ) {
- if ( VPP_SetVideoContrast ( params ) == 0 ) {
- return 0;
- }
- } else {
- LOGE ( "%s, PQ_GetContrastParams failed!\n", "Vpp_SetContrast" );
- }
- }
+ int ret = -1;
+ int params;
+ int level;
- return ret;
+ if ( value >= 0 && value <= 100 ) {
+ level = value;
+ LOGD ( "%s.\n", "Vpp_SetContrast" );
+
+ if ( mpPqData->PQ_GetContrastParams ( source_port, sig_fmt, is3d, trans_fmt, level, &params ) == 0 ) {
+ if ( VPP_SetVideoContrast ( params ) == 0 ) {
+ return 0;
+ }
+ } else {
+ LOGE ( "%s, PQ_GetContrastParams failed!\n", "Vpp_SetContrast" );
+ }
+ }
+
+ return ret;
}
int CVpp::VPP_SetVideoContrast ( int value )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/class/amvecm/contrast", "w" );
- LOGD ( "~~~fopen~~~##VPP_SetVideoContrast##%s : %d ##" , "/sys/class/amvecm/contrast", value);
+ fp = fopen ( "/sys/class/amvecm/contrast", "w" );
+ LOGD ( "~~~fopen~~~##VPP_SetVideoContrast##%s : %d ##" , "/sys/class/amvecm/contrast", value);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/amvecm/contrast error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/amvecm/contrast error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", value );
- fclose ( fp );
- fp = NULL;
+ fprintf ( fp, "%d", value );
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CVpp::Tv_SetContrast ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save )
{
- tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
+ tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
- if ( 0 == Vpp_SetContrast ( value, source_type, source_port, sig_fmt, is3d, trans_fmt ) ) {
- if ( is_save == 1 ) {
- return SSMSaveContrast ( source_type, value );
- } else {
- return 0;
- }
- } else {
- LOGE ( "%s, failed!", "Tv_SetContrast" );
- return -1;
- }
+ if ( 0 == Vpp_SetContrast ( value, source_type, source_port, sig_fmt, is3d, trans_fmt ) ) {
+ if ( is_save == 1 ) {
+ return SSMSaveContrast ( source_type, value );
+ } else {
+ return 0;
+ }
+ } else {
+ LOGE ( "%s, failed!", "Tv_SetContrast" );
+ return -1;
+ }
}
int CVpp::Tv_GetContrast ( tv_source_input_type_t source_type )
{
- int data = 50;
- vpp_pq_para_t pq_para;
- vpp_picture_mode_t pq_mode = Tv_GetPQMode ( source_type );
+ int data = 50;
+ vpp_pq_para_t pq_para;
+ vpp_picture_mode_t pq_mode = Tv_GetPQMode ( source_type );
- if ( pq_mode == VPP_PICTURE_MODE_USER ) {
- SSMReadContrast ( source_type, &data );
- } else {
- if ( Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para ) == 0 ) {
- data = pq_para.contrast;
- }
- }
+ if ( pq_mode == VPP_PICTURE_MODE_USER ) {
+ SSMReadContrast ( source_type, &data );
+ } else {
+ if ( Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para ) == 0 ) {
+ data = pq_para.contrast;
+ }
+ }
- if ( data < 0 || data > 100 ) {
- data = 50;
- }
+ if ( data < 0 || data > 100 ) {
+ data = 50;
+ }
- return data;
+ return data;
}
int CVpp::Vpp_SetSaturation ( int value, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt )
{
- int ret = -1;
- int params;
- int level;
- int hue = 0;
-
- if ( value >= 0 && value <= 100) {
- level = value;
-
- if ( mpPqData->PQ_GetSaturationParams ( source_port, sig_fmt, is3d, trans_fmt, level, &params ) == 0 ) {
- if ( VPP_SetVideoSaturationHue ( params, hue ) == 0 ) {
- return 0;
- }
- } else {
- }
- }
+ int ret = -1;
+ int params;
+ int level;
+ int hue = 0;
- return ret;
+ if ( value >= 0 && value <= 100) {
+ level = value;
+
+ if ( mpPqData->PQ_GetSaturationParams ( source_port, sig_fmt, is3d, trans_fmt, level, &params ) == 0 ) {
+ if ( VPP_SetVideoSaturationHue ( params, hue ) == 0 ) {
+ return 0;
+ }
+ } else {
+ }
+ }
+
+ return ret;
}
int CVpp::Tv_SetSaturation ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save )
{
- tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
+ tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
- if ( 0 == Vpp_SetSaturation ( value, source_type, source_port, sig_fmt, is3d, trans_fmt ) ) {
- if ( is_save == 1 ) {
- return SSMSaveSaturation ( source_type, value );
- } else {
- return 0;
- }
- } else {
- LOGE ( "%s, failed!", "Tv_SetSaturation" );
- return -1;
- }
+ if ( 0 == Vpp_SetSaturation ( value, source_type, source_port, sig_fmt, is3d, trans_fmt ) ) {
+ if ( is_save == 1 ) {
+ return SSMSaveSaturation ( source_type, value );
+ } else {
+ return 0;
+ }
+ } else {
+ LOGE ( "%s, failed!", "Tv_SetSaturation" );
+ return -1;
+ }
}
int CVpp::Tv_GetSaturation ( tv_source_input_type_t source_type )
{
- int data = 50;
- vpp_pq_para_t pq_para;
- vpp_picture_mode_t pq_mode = Tv_GetPQMode ( source_type );
+ int data = 50;
+ vpp_pq_para_t pq_para;
+ vpp_picture_mode_t pq_mode = Tv_GetPQMode ( source_type );
- if ( pq_mode == VPP_PICTURE_MODE_USER ) {
- SSMReadSaturation ( source_type, &data );
- } else {
- if ( Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para ) == 0 ) {
- data = pq_para.saturation;
- }
- }
+ if ( pq_mode == VPP_PICTURE_MODE_USER ) {
+ SSMReadSaturation ( source_type, &data );
+ } else {
+ if ( Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para ) == 0 ) {
+ data = pq_para.saturation;
+ }
+ }
- if ( data < 0 || data > 100 ) {
- data = 50;
- }
+ if ( data < 0 || data > 100 ) {
+ data = 50;
+ }
- return data;
+ return data;
}
int CVpp::Vpp_SetHue ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_port_t source_port, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt )
{
- int ret = -1;
- int params, saturation_params;
- int level, saturation_level;
-
- if ( value >= 0 && value <= 100 ) {
- if ( mbVppCfg_hue_reverse) {
- level = 100 - value;
- } else {
- level = value;
- }
+ int ret = -1;
+ int params, saturation_params;
+ int level, saturation_level;
- if ( mpPqData->PQ_GetHueParams ( source_port, sig_fmt, is3d, trans_fmt, level, &params ) == 0 ) {
- saturation_level = Tv_GetSaturation ( source_type );
+ if ( value >= 0 && value <= 100 ) {
+ if ( mbVppCfg_hue_reverse) {
+ level = 100 - value;
+ } else {
+ level = value;
+ }
- if ( mpPqData->PQ_GetSaturationParams ( source_port, sig_fmt, is3d, trans_fmt, saturation_level, &saturation_params ) == 0 ) {
- } else {
- saturation_params = -20;
- }
+ if ( mpPqData->PQ_GetHueParams ( source_port, sig_fmt, is3d, trans_fmt, level, &params ) == 0 ) {
+ saturation_level = Tv_GetSaturation ( source_type );
- if ( VPP_SetVideoSaturationHue ( saturation_params, params ) == 0 ) {
- return 0;
- }
- } else {
- LOGE ( "PQ_GetHueParams failed!\n" );
- }
- }
+ if ( mpPqData->PQ_GetSaturationParams ( source_port, sig_fmt, is3d, trans_fmt, saturation_level, &saturation_params ) == 0 ) {
+ } else {
+ saturation_params = -20;
+ }
- return ret;
+ if ( VPP_SetVideoSaturationHue ( saturation_params, params ) == 0 ) {
+ return 0;
+ }
+ } else {
+ LOGE ( "PQ_GetHueParams failed!\n" );
+ }
+ }
+
+ return ret;
}
int CVpp::Tv_SetHue ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save )
{
- tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
+ tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
- if ( 0 == Vpp_SetHue ( value, source_type, sig_fmt, source_port, is3d, trans_fmt ) ) {
- if ( is_save == 1 ) {
- return SSMSaveHue ( source_type, value );
- } else {
- return 0;
- }
- } else {
- LOGE ( "%s, failed!", "Tv_SetHue" );
- return -1;
- }
+ if ( 0 == Vpp_SetHue ( value, source_type, sig_fmt, source_port, is3d, trans_fmt ) ) {
+ if ( is_save == 1 ) {
+ return SSMSaveHue ( source_type, value );
+ } else {
+ return 0;
+ }
+ } else {
+ LOGE ( "%s, failed!", "Tv_SetHue" );
+ return -1;
+ }
- return 0;
+ return 0;
}
int CVpp::Tv_GetHue ( tv_source_input_type_t source_type )
{
- int data = 50;
- vpp_pq_para_t pq_para;
- vpp_picture_mode_t pq_mode = Tv_GetPQMode ( source_type );
+ int data = 50;
+ vpp_pq_para_t pq_para;
+ vpp_picture_mode_t pq_mode = Tv_GetPQMode ( source_type );
- if ( pq_mode == VPP_PICTURE_MODE_USER ) {
- SSMReadHue ( source_type, &data );
- } else {
- if ( Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para ) == 0 ) {
- data = pq_para.hue;
- }
- }
+ if ( pq_mode == VPP_PICTURE_MODE_USER ) {
+ SSMReadHue ( source_type, &data );
+ } else {
+ if ( Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para ) == 0 ) {
+ data = pq_para.hue;
+ }
+ }
- if ( data < 0 || data > 100 ) {
- data = 50;
- }
+ if ( data < 0 || data > 100 ) {
+ data = 50;
+ }
- return data;
+ return data;
}
int CVpp::Vpp_SetSharpness ( int value, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt )
{
- int ret = -1;
- am_regs_t regs;
- int level;
-
- if ( value >= 0 && value <= 100 ) {
- level = value;
-
- if ( mpPqData->PQ_GetSharpnessParams ( source_port, sig_fmt, is3d, trans_fmt, level, &regs ) == 0 ) {
- if ( Vpp_LoadRegs ( regs ) < 0 ) {
- } else {
- ret = 0;
- }
- } else {
- }
- }
+ int ret = -1;
+ am_regs_t regs;
+ int level;
- return ret;
+ if ( value >= 0 && value <= 100 ) {
+ level = value;
+
+ if ( mpPqData->PQ_GetSharpnessParams ( source_port, sig_fmt, is3d, trans_fmt, level, &regs ) == 0 ) {
+ if ( Vpp_LoadRegs ( regs ) < 0 ) {
+ } else {
+ ret = 0;
+ }
+ } else {
+ }
+ }
+
+ return ret;
}
int CVpp::Tv_SetSharpness ( int value, tv_source_input_type_t source_type, int is_enable, is_3d_type_t is3d, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, int is_save )
{
- tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
+ tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
- if ( Vpp_SetSharpness ( value, source_type, source_port, sig_fmt, is3d, trans_fmt) < 0 ) {
- LOGE ( "%s, failed!", "Tv_SetSharpness" );
- return -1;
- }
+ if ( Vpp_SetSharpness ( value, source_type, source_port, sig_fmt, is3d, trans_fmt) < 0 ) {
+ LOGE ( "%s, failed!", "Tv_SetSharpness" );
+ return -1;
+ }
- if ( is_save == 1 ) {
- if ( is_enable ) {
- return SSMSaveSharpness ( source_type, value );
+ if ( is_save == 1 ) {
+ if ( is_enable ) {
+ return SSMSaveSharpness ( source_type, value );
- }
- }
+ }
+ }
- return 0;
+ return 0;
}
int CVpp::Tv_GetSharpness ( tv_source_input_type_t source_type )
{
- int data = 50;
- vpp_pq_para_t pq_para;
- vpp_picture_mode_t pq_mode = Tv_GetPQMode ( source_type );
+ int data = 50;
+ vpp_pq_para_t pq_para;
+ vpp_picture_mode_t pq_mode = Tv_GetPQMode ( source_type );
- if ( pq_mode == VPP_PICTURE_MODE_USER ) {
- SSMReadSharpness ( source_type, &data );
- } else {
- if ( Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para ) == 0 ) {
- data = pq_para.sharpness;
- }
- }
+ if ( pq_mode == VPP_PICTURE_MODE_USER ) {
+ SSMReadSharpness ( source_type, &data );
+ } else {
+ if ( Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para ) == 0 ) {
+ data = pq_para.sharpness;
+ }
+ }
- if ( data < 0 || data > 100 ) {
- data = 50;
- }
+ if ( data < 0 || data > 100 ) {
+ data = 50;
+ }
- LOGD ( "%s, data[%d].", "Tv_GetSharpness", data );
- return data;
+ LOGD ( "%s, data[%d].", "Tv_GetSharpness", data );
+ return data;
}
int CVpp::Tv_SetColorSpaceMode ( vpp_color_space_type_t colorSpace )
{
- int ret = -1, fileRet = -1;
- SSMSaveColorSpaceStart ( colorSpace );
-
- switch ( colorSpace ) {
- case VPP_COLOR_SPACE_RGB:
- //marked by haifeng
- // SetFileAttrValue ( "/sys/class/register/reg", "wc 0x1da1 0xc" );
- // SetFileAttrValue ( "/sys/class/register/reg", "wc 0x1d70 0x208" );
- // SetFileAttrValue ( "/sys/class/register/reg", "wc 0x1d71 0x74" );
- break;
-
- case VPP_COLOR_SPACE_YUV:
- //marked by haifeng
- // SetFileAttrValue ( "/sys/class/register/reg", "wc 0x1da1 0xe" );
- // SetFileAttrValue ( "/sys/class/register/reg", "wc 0x1d70 0x208" );
- // SetFileAttrValue ( "/sys/class/register/reg", "wc 0x1d71 0x76" );
- break;
-
- default:
- break;
- }
+ int ret = -1, fileRet = -1;
+ SSMSaveColorSpaceStart ( colorSpace );
+
+ switch ( colorSpace ) {
+ case VPP_COLOR_SPACE_RGB:
+ //marked by haifeng
+ // SetFileAttrValue ( "/sys/class/register/reg", "wc 0x1da1 0xc" );
+ // SetFileAttrValue ( "/sys/class/register/reg", "wc 0x1d70 0x208" );
+ // SetFileAttrValue ( "/sys/class/register/reg", "wc 0x1d71 0x74" );
+ break;
+
+ case VPP_COLOR_SPACE_YUV:
+ //marked by haifeng
+ // SetFileAttrValue ( "/sys/class/register/reg", "wc 0x1da1 0xe" );
+ // SetFileAttrValue ( "/sys/class/register/reg", "wc 0x1d70 0x208" );
+ // SetFileAttrValue ( "/sys/class/register/reg", "wc 0x1d71 0x76" );
+ break;
+
+ default:
+ break;
+ }
- return 0;
+ return 0;
}
int CVpp::Vpp_SetNoiseReductionMode ( vpp_noise_reduction_mode_t nr_mode, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt )
{
- int ret = -1;
- am_regs_t regs;
+ int ret = -1;
+ am_regs_t regs;
- if ( mbVppCfg_new_nr) {
- if ( mpPqData->PQ_GetNR2Params ( ( vpp_noise_reduction2_mode_t ) nr_mode, source_port, sig_fmt, is3d, trans_fmt, &regs ) == 0 ) {
- ret = Vpp_LoadRegs ( regs );
- } else {
- LOGE ( "PQ_GetNR2Params failed!\n" );
- }
- }
+ if ( mbVppCfg_new_nr) {
+ if ( mpPqData->PQ_GetNR2Params ( ( vpp_noise_reduction2_mode_t ) nr_mode, source_port, sig_fmt, is3d, trans_fmt, &regs ) == 0 ) {
+ ret = Vpp_LoadRegs ( regs );
+ } else {
+ LOGE ( "PQ_GetNR2Params failed!\n" );
+ }
+ }
- return ret;
+ return ret;
}
int CVpp::Tv_SaveNoiseReductionMode ( vpp_noise_reduction_mode_t nr_mode, tv_source_input_type_t source_type )
{
- int tmp_save_noisereduction_mode = ( int ) nr_mode;
- return SSMSaveNoiseReduction ( source_type, tmp_save_noisereduction_mode );
+ int tmp_save_noisereduction_mode = ( int ) nr_mode;
+ return SSMSaveNoiseReduction ( source_type, tmp_save_noisereduction_mode );
}
int CVpp::Tv_SetNoiseReductionMode ( vpp_noise_reduction_mode_t nr_mode, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt, int is_save )
{
- tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
- if ( 0 == Vpp_SetNoiseReductionMode ( nr_mode, source_type, source_port, sig_fmt, is3d, trans_fmt ) ) {
- if ( is_save == 1 ) {
- return Tv_SaveNoiseReductionMode ( nr_mode, source_type );
- } else {
- return 0;
- }
- }
+ tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
+ if ( 0 == Vpp_SetNoiseReductionMode ( nr_mode, source_type, source_port, sig_fmt, is3d, trans_fmt ) ) {
+ if ( is_save == 1 ) {
+ return Tv_SaveNoiseReductionMode ( nr_mode, source_type );
+ } else {
+ return 0;
+ }
+ }
- LOGE ( "%s, failed!", __FUNCTION__ );
- return -1;
+ LOGE ( "%s, failed!", __FUNCTION__ );
+ return -1;
}
vpp_noise_reduction_mode_t CVpp::Tv_GetNoiseReductionMode ( tv_source_input_type_t source_type )
{
- vpp_noise_reduction_mode_t data = VPP_NOISE_REDUCTION_MODE_MID;
- int tmp_nr_mode = 0;
+ vpp_noise_reduction_mode_t data = VPP_NOISE_REDUCTION_MODE_MID;
+ int tmp_nr_mode = 0;
- SSMReadNoiseReduction ( source_type, &tmp_nr_mode );
- data = ( vpp_noise_reduction_mode_t ) tmp_nr_mode;
+ SSMReadNoiseReduction ( source_type, &tmp_nr_mode );
+ data = ( vpp_noise_reduction_mode_t ) tmp_nr_mode;
- if ( data < VPP_NOISE_REDUCTION_MODE_OFF || data > VPP_NOISE_REDUCTION_MODE_AUTO ) {
- data = VPP_NOISE_REDUCTION_MODE_MID;
- }
+ if ( data < VPP_NOISE_REDUCTION_MODE_OFF || data > VPP_NOISE_REDUCTION_MODE_AUTO ) {
+ data = VPP_NOISE_REDUCTION_MODE_MID;
+ }
- return data;
+ return data;
}
int CVpp::Vpp_SetXVYCCMode ( vpp_xvycc_mode_t xvycc_mode, tv_source_input_type_t source_type, tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt )
{
- int ret = -1;
- am_regs_t regs, regs_1;
- char prop_value[PROPERTY_VALUE_MAX];
-
- memset ( prop_value, '\0', 16 );
- const char *config_value;
- config_value = config_get_str ( "TV", "vpp.xvycc.switch_control", "null" );
-
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- if ( mpPqData->PQ_GetXVYCCParams ( ( vpp_xvycc_mode_t ) xvycc_mode, source_port, sig_fmt, is3d, trans_fmt, &regs , &regs_1) == 0 ) {
- ret = Vpp_LoadRegs ( regs );
- ret |= Vpp_LoadRegs ( regs_1 );
- } else {
- LOGE ( "PQ_GetXVYCCParams failed!\n" );
- }
- } else {
- LOGE("disable xvycc!\n");
- }
- return ret;
+ int ret = -1;
+ am_regs_t regs, regs_1;
+ char prop_value[PROPERTY_VALUE_MAX];
+
+ memset ( prop_value, '\0', 16 );
+ const char *config_value;
+ config_value = config_get_str ( "TV", "vpp.xvycc.switch_control", "null" );
+
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ if ( mpPqData->PQ_GetXVYCCParams ( ( vpp_xvycc_mode_t ) xvycc_mode, source_port, sig_fmt, is3d, trans_fmt, &regs , &regs_1) == 0 ) {
+ ret = Vpp_LoadRegs ( regs );
+ ret |= Vpp_LoadRegs ( regs_1 );
+ } else {
+ LOGE ( "PQ_GetXVYCCParams failed!\n" );
+ }
+ } else {
+ LOGE("disable xvycc!\n");
+ }
+ return ret;
}
int CVpp::Vpp_SetMCDIMode ( vpp_mcdi_mode_t mcdi_mode, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt)
{
- int ret = -1;
- am_regs_t regs;
+ int ret = -1;
+ am_regs_t regs;
- if ( mpPqData->PQ_GetMCDIParams ( ( vpp_mcdi_mode_t ) mcdi_mode, source_port, sig_fmt, is3d, trans_fmt, &regs ) == 0 ) {
- ret = Vpp_LoadRegs ( regs );
- } else {
- LOGE ( "PQ_GetMCDIParams failed!\n" );
- }
- return ret;
+ if ( mpPqData->PQ_GetMCDIParams ( ( vpp_mcdi_mode_t ) mcdi_mode, source_port, sig_fmt, is3d, trans_fmt, &regs ) == 0 ) {
+ ret = Vpp_LoadRegs ( regs );
+ } else {
+ LOGE ( "PQ_GetMCDIParams failed!\n" );
+ }
+ return ret;
}
int CVpp::Vpp_LoadGammaDefault ( tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt )
{
- int ret = -1;
- int panel_id = 0;
- tcon_gamma_table_t gamma_r, gamma_g, gamma_b;
+ int ret = -1;
+ int panel_id = 0;
+ tcon_gamma_table_t gamma_r, gamma_g, gamma_b;
- tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
+ tvin_port_t source_port = CTvin::Tvin_GetSourcePortBySourceType ( source_type );
- LOGD ( "Enter %s.\n", __FUNCTION__ );
- ret = mpPqData->PQ_GetGammaTableR ( panel_id, source_port, sig_fmt, &gamma_r );
- ret |= mpPqData->PQ_GetGammaTableG ( panel_id, source_port, sig_fmt, &gamma_g );
- ret |= mpPqData->PQ_GetGammaTableB ( panel_id, source_port, sig_fmt, &gamma_b );
-
- if ( ret == 0 ) {
- VPP_SetGammaTbl_R ( ( unsigned short * ) gamma_r.data );
- VPP_SetGammaTbl_G ( ( unsigned short * ) gamma_g.data );
- VPP_SetGammaTbl_B ( ( unsigned short * ) gamma_b.data );
- } else {
- LOGE ( "%s, PQ_GetGammaTable failed!", __FUNCTION__ );
- }
+ LOGD ( "Enter %s.\n", __FUNCTION__ );
+ ret = mpPqData->PQ_GetGammaTableR ( panel_id, source_port, sig_fmt, &gamma_r );
+ ret |= mpPqData->PQ_GetGammaTableG ( panel_id, source_port, sig_fmt, &gamma_g );
+ ret |= mpPqData->PQ_GetGammaTableB ( panel_id, source_port, sig_fmt, &gamma_b );
- return ret;
+ if ( ret == 0 ) {
+ VPP_SetGammaTbl_R ( ( unsigned short * ) gamma_r.data );
+ VPP_SetGammaTbl_G ( ( unsigned short * ) gamma_g.data );
+ VPP_SetGammaTbl_B ( ( unsigned short * ) gamma_b.data );
+ } else {
+ LOGE ( "%s, PQ_GetGammaTable failed!", __FUNCTION__ );
+ }
+
+ return ret;
}
int CVpp::Vpp_LoadGammaSpecial ( int gammaValue )
{
- int ret = -1;
- int panel_id = 0;
- tcon_gamma_table_t gamma_r, gamma_g, gamma_b;
-
- LOGD ( "Enter %s.\n", __FUNCTION__ );
- ret = mpPqData->PQ_GetGammaSpecialTable ( gammaValue, "Red", &gamma_r );
- ret |= mpPqData->PQ_GetGammaSpecialTable ( gammaValue, "Green", &gamma_g );
- ret |= mpPqData->PQ_GetGammaSpecialTable ( gammaValue, "Blue", &gamma_b );
-
- if ( ret == 0 ) {
- VPP_SetGammaTbl_R ( ( unsigned short * ) gamma_r.data );
- VPP_SetGammaTbl_G ( ( unsigned short * ) gamma_g.data );
- VPP_SetGammaTbl_B ( ( unsigned short * ) gamma_b.data );
- } else {
- LOGE ( "%s, PQ_GetGammaSpecialTable failed!", __FUNCTION__ );
- }
+ int ret = -1;
+ int panel_id = 0;
+ tcon_gamma_table_t gamma_r, gamma_g, gamma_b;
- return ret;
+ LOGD ( "Enter %s.\n", __FUNCTION__ );
+ ret = mpPqData->PQ_GetGammaSpecialTable ( gammaValue, "Red", &gamma_r );
+ ret |= mpPqData->PQ_GetGammaSpecialTable ( gammaValue, "Green", &gamma_g );
+ ret |= mpPqData->PQ_GetGammaSpecialTable ( gammaValue, "Blue", &gamma_b );
+
+ if ( ret == 0 ) {
+ VPP_SetGammaTbl_R ( ( unsigned short * ) gamma_r.data );
+ VPP_SetGammaTbl_G ( ( unsigned short * ) gamma_g.data );
+ VPP_SetGammaTbl_B ( ( unsigned short * ) gamma_b.data );
+ } else {
+ LOGE ( "%s, PQ_GetGammaSpecialTable failed!", __FUNCTION__ );
+ }
+
+ return ret;
}
int CVpp::Vpp_LoadGamma ( tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt )
{
- int gammaValue = 0, ret = -1;
+ int gammaValue = 0, ret = -1;
- if ( SSMReadGammaValue ( &gammaValue ) < 0 ) {
- LOGE ( "%s, SSMReadGammaValue ERROR, So Load Default GAMMA!\n", __FUNCTION__ );
- ret = Vpp_LoadGammaDefault ( source_type, sig_fmt );
- return -1;
- }
+ if ( SSMReadGammaValue ( &gammaValue ) < 0 ) {
+ LOGE ( "%s, SSMReadGammaValue ERROR, So Load Default GAMMA!\n", __FUNCTION__ );
+ ret = Vpp_LoadGammaDefault ( source_type, sig_fmt );
+ return -1;
+ }
- if ( gammaValue < -4 || gammaValue > 4 ) {
- LOGE ( "%s, Gamma Value beyond the UI's range of -4 to 4 .\n", __FUNCTION__ );
- gammaValue = 0;
- SSMSaveGammaValue ( gammaValue );
- }
+ if ( gammaValue < -4 || gammaValue > 4 ) {
+ LOGE ( "%s, Gamma Value beyond the UI's range of -4 to 4 .\n", __FUNCTION__ );
+ gammaValue = 0;
+ SSMSaveGammaValue ( gammaValue );
+ }
- switch ( gammaValue ) {
- case 0:
- ret = Vpp_LoadGammaDefault ( source_type, sig_fmt );
- break;
+ switch ( gammaValue ) {
+ case 0:
+ ret = Vpp_LoadGammaDefault ( source_type, sig_fmt );
+ break;
- default:
- ret = Vpp_LoadGammaSpecial ( gammaValue );
- break;
- }
+ default:
+ ret = Vpp_LoadGammaSpecial ( gammaValue );
+ break;
+ }
- return ret;
+ return ret;
}
/*int CVpp::Tv_SetGammaValue(int gammaValue)
@@ -1257,7 +1257,7 @@ int CVpp::Vpp_LoadGamma ( tv_source_input_type_t source_type, tvin_sig_fmt_t sig
LOGD("%s, source_type = %d, sig_fmt = %d, gammaValue = %d\n", __FUNCTION__, (int)source_type,
(int)sig_fmt, gammaValue);
if (gammaValue >= -4 || gammaValue <= 4) {
- switch (gammaValue) {
+ switch(gammaValue) {
case 0:
ret = Vpp_LoadGammaDefault(source_type, sig_fmt);
break;
@@ -1265,7 +1265,7 @@ int CVpp::Vpp_LoadGamma ( tv_source_input_type_t source_type, tvin_sig_fmt_t sig
ret = Vpp_LoadGammaSpecial(gammaValue);
break;
}
- if (0 == ret)
+ if(0 == ret)
ret = SSMSaveGammaValue(gammaValue);
}
return ret;
@@ -1273,14 +1273,14 @@ int CVpp::Vpp_LoadGamma ( tv_source_input_type_t source_type, tvin_sig_fmt_t sig
int CVpp::Tv_GetGammaValue()
{
- int gammaValue = 0;
+ int gammaValue = 0;
- if ( SSMReadGammaValue ( &gammaValue ) < 0 ) {
- LOGE ( "%s, SSMReadGammaValue ERROR!!!\n", __FUNCTION__ );
- return -1;
- }
+ if ( SSMReadGammaValue ( &gammaValue ) < 0 ) {
+ LOGE ( "%s, SSMReadGammaValue ERROR!!!\n", __FUNCTION__ );
+ return -1;
+ }
- return gammaValue;
+ return gammaValue;
}
/*int CVpp::Tv_SetColorDemoMode ( vpp_color_demomode_t demomode )
@@ -1296,2416 +1296,2416 @@ int CVpp::Tv_GetGammaValue()
vpp_color_demomode_t CVpp::Tv_GetColorDemoMode ( void )
{
- vpp_color_demomode_t data = VPP_COLOR_DEMO_MODE_ALLON;
- unsigned char tmp_demo_mode = 0;
- SSMReadColorDemoMode ( &tmp_demo_mode );
- data = ( vpp_color_demomode_t ) tmp_demo_mode;
+ vpp_color_demomode_t data = VPP_COLOR_DEMO_MODE_ALLON;
+ unsigned char tmp_demo_mode = 0;
+ SSMReadColorDemoMode ( &tmp_demo_mode );
+ data = ( vpp_color_demomode_t ) tmp_demo_mode;
- if ( data < VPP_COLOR_DEMO_MODE_ALLON || data > VPP_COLOR_DEMO_MODE_ALLOFF ) {
- data = VPP_COLOR_DEMO_MODE_ALLON;
- }
+ if ( data < VPP_COLOR_DEMO_MODE_ALLON || data > VPP_COLOR_DEMO_MODE_ALLOFF ) {
+ data = VPP_COLOR_DEMO_MODE_ALLON;
+ }
- return data;
+ return data;
}
int CVpp::Tv_SetBaseColorModeWithoutSave ( vpp_color_basemode_t basemode , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt)
{
- int ret = -1;
- am_regs_t regs;
+ int ret = -1;
+ am_regs_t regs;
- if ( mbVppCfg_new_cm) {
- if ( mpPqData->PQ_GetCM2Params ( ( vpp_color_management2_t ) basemode, source_port, sig_fmt, is3d, trans_fmt, &regs ) == 0 ) {
- ret = Vpp_LoadRegs ( regs );
- } else {
- LOGE ( "PQ_GetCM2Params failed!\n" );
- }
- }
+ if ( mbVppCfg_new_cm) {
+ if ( mpPqData->PQ_GetCM2Params ( ( vpp_color_management2_t ) basemode, source_port, sig_fmt, is3d, trans_fmt, &regs ) == 0 ) {
+ ret = Vpp_LoadRegs ( regs );
+ } else {
+ LOGE ( "PQ_GetCM2Params failed!\n" );
+ }
+ }
- return ret;
+ return ret;
}
int CVpp::Tv_SaveBaseColorMode ( vpp_color_basemode_t basemode )
{
- int ret = -1;
+ int ret = -1;
- if ( basemode == VPP_COLOR_BASE_MODE_DEMO ) {
- ret = 0;
- } else {
- ret |= SSMSaveColorBaseMode ( basemode );
- }
+ if ( basemode == VPP_COLOR_BASE_MODE_DEMO ) {
+ ret = 0;
+ } else {
+ ret |= SSMSaveColorBaseMode ( basemode );
+ }
- return ret;
+ return ret;
}
int CVpp::Tv_SetBaseColorMode ( vpp_color_basemode_t basemode , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt)
{
- if ( 0 == Tv_SetBaseColorModeWithoutSave ( basemode, source_port, sig_fmt, is3d, trans_fmt) ) {
- return Tv_SaveBaseColorMode ( basemode );
- } else {
- LOGE ( "Tv_SetBaseColorMode() Failed!!!" );
- return -1;
- }
- return 0;
+ if ( 0 == Tv_SetBaseColorModeWithoutSave ( basemode, source_port, sig_fmt, is3d, trans_fmt) ) {
+ return Tv_SaveBaseColorMode ( basemode );
+ } else {
+ LOGE ( "Tv_SetBaseColorMode() Failed!!!" );
+ return -1;
+ }
+ return 0;
}
vpp_color_basemode_t CVpp::Tv_GetBaseColorMode ( void )
{
- vpp_color_basemode_t data = VPP_COLOR_BASE_MODE_OFF;
- unsigned char tmp_base_mode = 0;
- SSMReadColorBaseMode ( &tmp_base_mode );
- data = ( vpp_color_basemode_t ) tmp_base_mode;
+ vpp_color_basemode_t data = VPP_COLOR_BASE_MODE_OFF;
+ unsigned char tmp_base_mode = 0;
+ SSMReadColorBaseMode ( &tmp_base_mode );
+ data = ( vpp_color_basemode_t ) tmp_base_mode;
- if ( data < VPP_COLOR_BASE_MODE_OFF || data >= VPP_COLOR_BASE_MODE_MAX ) {
- data = VPP_COLOR_BASE_MODE_OPTIMIZE;
- }
+ if ( data < VPP_COLOR_BASE_MODE_OFF || data >= VPP_COLOR_BASE_MODE_MAX ) {
+ data = VPP_COLOR_BASE_MODE_OPTIMIZE;
+ }
- return data;
+ return data;
}
int CVpp::Tv_SetColorTempWithoutSave ( vpp_color_temperature_mode_t Tempmode, tv_source_input_type_t source_type )
{
- tcon_rgb_ogo_t rgbogo;
- int ret = -1;
+ tcon_rgb_ogo_t rgbogo;
+ int ret = -1;
- if ( mbVppCfg_whitebalance_sameparam) {
- source_type = SOURCE_TYPE_TV; //set all source share to use one group
- }
+ if ( mbVppCfg_whitebalance_sameparam) {
+ source_type = SOURCE_TYPE_TV; //set all source share to use one group
+ }
- if ( mbVppCfg_gamma_onoff) {
- VPP_SetGammaOnOff ( 0 );
- } else {
- VPP_SetGammaOnOff ( 1 );
- }
+ if ( mbVppCfg_gamma_onoff) {
+ VPP_SetGammaOnOff ( 0 );
+ } else {
+ VPP_SetGammaOnOff ( 1 );
+ }
- GetColorTemperatureParams ( Tempmode, &rgbogo );
+ GetColorTemperatureParams ( Tempmode, &rgbogo );
- return VPP_SetRGBOGO ( &rgbogo );
+ return VPP_SetRGBOGO ( &rgbogo );
}
int CVpp::Tv_SaveColorTemp ( vpp_color_temperature_mode_t Tempmode, tv_source_input_type_t source_type )
{
- int ret = -1;
- int tmp_temp_mode = 0;
- tcon_rgb_ogo_t rgbogo;
+ int ret = -1;
+ int tmp_temp_mode = 0;
+ tcon_rgb_ogo_t rgbogo;
- if ( mbVppCfg_whitebalance_sameparam) {
- source_type = SOURCE_TYPE_TV; //set all source share to use one group
- }
+ if ( mbVppCfg_whitebalance_sameparam) {
+ source_type = SOURCE_TYPE_TV; //set all source share to use one group
+ }
- GetColorTemperatureParams ( Tempmode, &rgbogo );
+ GetColorTemperatureParams ( Tempmode, &rgbogo );
- if ( Tempmode < VPP_COLOR_TEMPERATURE_MODE_USER ) {
- ret = SSMSaveRGBGainRStart ( 0, rgbogo.r_gain );
- ret |= SSMSaveRGBGainGStart ( 0, rgbogo.g_gain );
- ret |= SSMSaveRGBGainBStart ( 0, rgbogo.b_gain );
- }
+ if ( Tempmode < VPP_COLOR_TEMPERATURE_MODE_USER ) {
+ ret = SSMSaveRGBGainRStart ( 0, rgbogo.r_gain );
+ ret |= SSMSaveRGBGainGStart ( 0, rgbogo.g_gain );
+ ret |= SSMSaveRGBGainBStart ( 0, rgbogo.b_gain );
+ }
- tmp_temp_mode = ( int ) Tempmode;
+ tmp_temp_mode = ( int ) Tempmode;
- if ( mbVppCfg_colortemp_by_source) {
- ret |= SSMSaveColorTemperature ( ( int ) source_type, tmp_temp_mode );
- } else {
- ret |= SSMSaveColorTemperature ( 0, tmp_temp_mode );
- }
+ if ( mbVppCfg_colortemp_by_source) {
+ ret |= SSMSaveColorTemperature ( ( int ) source_type, tmp_temp_mode );
+ } else {
+ ret |= SSMSaveColorTemperature ( 0, tmp_temp_mode );
+ }
- return ret;
+ return ret;
}
int CVpp::Tv_SetColorTemperature ( vpp_color_temperature_mode_t Tempmode, tv_source_input_type_t source_type, int is_save )
{
- if ( Tv_SetColorTempWithoutSave ( Tempmode, source_type ) < 0 ) {
- LOGE ( "%s, failed!", __FUNCTION__ );
- return -1;
- } else {
- if ( is_save == 1 ) {
- return Tv_SaveColorTemp ( Tempmode, source_type );
- } else {
- return 0;
- }
- }
+ if ( Tv_SetColorTempWithoutSave ( Tempmode, source_type ) < 0 ) {
+ LOGE ( "%s, failed!", __FUNCTION__ );
+ return -1;
+ } else {
+ if ( is_save == 1 ) {
+ return Tv_SaveColorTemp ( Tempmode, source_type );
+ } else {
+ return 0;
+ }
+ }
}
vpp_color_temperature_mode_t CVpp::Tv_GetColorTemperature ( tv_source_input_type_t source_type )
{
- vpp_color_temperature_mode_t data = VPP_COLOR_TEMPERATURE_MODE_STANDARD;
- int tmp_temp_mode = 0;
+ vpp_color_temperature_mode_t data = VPP_COLOR_TEMPERATURE_MODE_STANDARD;
+ int tmp_temp_mode = 0;
- if ( mbVppCfg_colortemp_by_source) {
- SSMReadColorTemperature ( ( int ) source_type, &tmp_temp_mode );
- } else {
- SSMReadColorTemperature ( 0, &tmp_temp_mode );
- }
+ if ( mbVppCfg_colortemp_by_source) {
+ SSMReadColorTemperature ( ( int ) source_type, &tmp_temp_mode );
+ } else {
+ SSMReadColorTemperature ( 0, &tmp_temp_mode );
+ }
- data = ( vpp_color_temperature_mode_t ) tmp_temp_mode;
+ data = ( vpp_color_temperature_mode_t ) tmp_temp_mode;
- if ( data < VPP_COLOR_TEMPERATURE_MODE_STANDARD || data > VPP_COLOR_TEMPERATURE_MODE_USER ) {
- data = VPP_COLOR_TEMPERATURE_MODE_STANDARD;
- }
+ if ( data < VPP_COLOR_TEMPERATURE_MODE_STANDARD || data > VPP_COLOR_TEMPERATURE_MODE_USER ) {
+ data = VPP_COLOR_TEMPERATURE_MODE_STANDARD;
+ }
- return data;
+ return data;
}
int CVpp::VPP_SetNonLinearFactor ( int value )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/class/video/nonlinear_factor", "w" );
- LOGD ( "~~~fopen~~~##VPP_SetNonLinearFactor##%s : %d ##" , "/sys/class/video/nonlinear_factor", value);
+ fp = fopen ( "/sys/class/video/nonlinear_factor", "w" );
+ LOGD ( "~~~fopen~~~##VPP_SetNonLinearFactor##%s : %d ##" , "/sys/class/video/nonlinear_factor", value);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/video/nonlinear_factor error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/video/nonlinear_factor error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", value );
+ fprintf ( fp, "%d", value );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
vpp_display_mode_t CVpp::Tv_GetDisplayMode ( tv_source_input_type_t source_type )
{
- vpp_display_mode_t data = VPP_DISPLAY_MODE_169;
- int tmp_dis_mode = 0;
+ vpp_display_mode_t data = VPP_DISPLAY_MODE_169;
+ int tmp_dis_mode = 0;
- SSMReadDisplayMode ( source_type, &tmp_dis_mode );
- data = ( vpp_display_mode_t ) tmp_dis_mode;
+ SSMReadDisplayMode ( source_type, &tmp_dis_mode );
+ data = ( vpp_display_mode_t ) tmp_dis_mode;
- return data;
+ return data;
}
int CVpp::Tv_SetBacklightWithoutSave ( int value, tv_source_input_type_t source_type )
{
- int backlight_value, backlight_reverse = 0;
- int ret = -1;
- int tmp_pic_mode = 0;
+ int backlight_value, backlight_reverse = 0;
+ int ret = -1;
+ int tmp_pic_mode = 0;
- source_type = SOURCE_TYPE_TV;
+ source_type = SOURCE_TYPE_TV;
- if ( value < 0 || value > 100 ) {
- value = 100;
- }
+ if ( value < 0 || value > 100 ) {
+ value = 100;
+ }
- if ( mbVppCfg_backlight_reverse) {
- backlight_value = ( 100 - value ) * 255 / 100;
- } else {
- backlight_value = value * 255 / 100;
- }
+ if ( mbVppCfg_backlight_reverse) {
+ backlight_value = ( 100 - value ) * 255 / 100;
+ } else {
+ backlight_value = value * 255 / 100;
+ }
- return VPP_SetBackLightLevel ( backlight_value );
+ return VPP_SetBackLightLevel ( backlight_value );
}
int CVpp::VPP_SetBackLightLevel ( int value )
{
- FILE *fp = NULL;
- const char *config_value;
+ FILE *fp = NULL;
+ const char *config_value;
- config_value = config_get_str ( "TV", "vpp.backlight.built_in_ctrl", "null" );
+ config_value = config_get_str ( "TV", "vpp.backlight.built_in_ctrl", "null" );
- if ( strcmp ( config_value, "enable" ) == 0 ) {
- fp = fopen ( "/sys/class/backlight/aml-bl/brightness", "w" );
- LOGD ( "~~~fopen~~~##VPP_SetBackLightLevel##%s : %d ##" , "/sys/class/backlight/aml-bl/brightness", value);
+ if ( strcmp ( config_value, "enable" ) == 0 ) {
+ fp = fopen ( "/sys/class/backlight/aml-bl/brightness", "w" );
+ LOGD ( "~~~fopen~~~##VPP_SetBackLightLevel##%s : %d ##" , "/sys/class/backlight/aml-bl/brightness", value);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/backlight/aml-bl/brightness error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/backlight/aml-bl/brightness error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", value );
+ fprintf ( fp, "%d", value );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
- } else {
- // TODO : control the backlight through the CEC.
+ return 0;
+ } else {
+ // TODO : control the backlight through the CEC.
- return 0;
- }
+ return 0;
+ }
}
int CVpp::Tv_SetBacklight ( int value, tv_source_input_type_t source_type, int is_save )
{
- if ( Tv_SetBacklightWithoutSave ( value, source_type ) < 0 ) {
- LOGE ( "%s, failed !", __FUNCTION__ );
- return -1;
- }
+ if ( Tv_SetBacklightWithoutSave ( value, source_type ) < 0 ) {
+ LOGE ( "%s, failed !", __FUNCTION__ );
+ return -1;
+ }
- if ( is_save == 1 ) {
- return Tv_SaveBacklight ( value, source_type );
- } else {
- return 0;
- }
+ if ( is_save == 1 ) {
+ return Tv_SaveBacklight ( value, source_type );
+ } else {
+ return 0;
+ }
}
int CVpp::Tv_GetBacklight ( tv_source_input_type_t source_type )
{
- int data = 0;
- vpp_pq_para_t pq_para;
+ int data = 0;
+ vpp_pq_para_t pq_para;
- if ( mbVppCfg_pqmode_depend_bklight) {
- vpp_picture_mode_t pq_mode = Tv_GetPQMode ( source_type );
+ if ( mbVppCfg_pqmode_depend_bklight) {
+ vpp_picture_mode_t pq_mode = Tv_GetPQMode ( source_type );
- if ( pq_mode == VPP_PICTURE_MODE_USER ) {
- SSMReadBackLightVal ( source_type, &data );
- } else {
- Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para );
- data = pq_para.backlight;
- }
- } else {
- source_type = SOURCE_TYPE_TV;
- SSMReadBackLightVal ( source_type, &data );
- }
+ if ( pq_mode == VPP_PICTURE_MODE_USER ) {
+ SSMReadBackLightVal ( source_type, &data );
+ } else {
+ Vpp_GetPQModeValue ( source_type, pq_mode, &pq_para );
+ data = pq_para.backlight;
+ }
+ } else {
+ source_type = SOURCE_TYPE_TV;
+ SSMReadBackLightVal ( source_type, &data );
+ }
- if ( data < 0 || data > 100 ) {
- data = 100;
- }
+ if ( data < 0 || data > 100 ) {
+ data = 100;
+ }
- return data;
+ return data;
}
int CVpp::Tv_SaveBacklight ( int value, tv_source_input_type_t source_type )
{
- int backlight_value, backlight_reverse = 0;
- int ret = -1;
- int tmp_pic_mode = 0;
+ int backlight_value, backlight_reverse = 0;
+ int ret = -1;
+ int tmp_pic_mode = 0;
- if ( !mbVppCfg_pqmode_depend_bklight ) {
- source_type = SOURCE_TYPE_TV;
- }
+ if ( !mbVppCfg_pqmode_depend_bklight ) {
+ source_type = SOURCE_TYPE_TV;
+ }
- if ( value < 0 || value > 100 ) {
- value = 100;
- }
+ if ( value < 0 || value > 100 ) {
+ value = 100;
+ }
- ret = SSMSaveBackLightVal ( source_type, value );
+ ret = SSMSaveBackLightVal ( source_type, value );
- return ret;
+ return ret;
}
int CVpp::Tv_SetDNLP ( tv_source_input_type_t source_type, tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt )
{
- unsigned int dnlp_switch = 0;
+ unsigned int dnlp_switch = 0;
- int ret = -1;
- int dnlpFlag = -1;
- ve_dnlp_t dnlp;
- ve_dnlp_table_t newdnlp;
-
- dnlp_switch = 1;
-
-
- if ( mpPqData->PQ_GetDNLPParams ( source_port, sig_fmt, is3d, trans_fmt, &dnlp, &newdnlp, &dnlpFlag ) == 0 ) {
- newdnlp.en = dnlp_switch;
- LOGE ( "PQ_GetDNLPParams ok!\n" );
- LOGE ( "newdnlp.en:%d,newdnlp.method:%d,newdnlp.cliprate:%d,newdnlp.lowrange:%d,newdnlp.hghrange:%d,newdnlp.lowalpha:%d,newdnlp.midalpha:%d,newdnlp.hghalpha:%d\n",
- newdnlp.en, newdnlp.method, newdnlp.cliprate, newdnlp.lowrange, newdnlp.hghrange, newdnlp.lowalpha, newdnlp.midalpha, newdnlp.hghalpha);
- VPP_SetVENewDNLP ( &newdnlp );
- SetFileAttrValue ( "/sys/module/am_vecm/parameters/dnlp_en", "1" );
- ret = 1;
- } else {
- LOGE ( "mpPqData->PQ_GetDNLPParams failed!\n" );
- }
+ int ret = -1;
+ int dnlpFlag = -1;
+ ve_dnlp_t dnlp;
+ ve_dnlp_table_t newdnlp;
- return ret;
+ dnlp_switch = 1;
+
+
+ if ( mpPqData->PQ_GetDNLPParams ( source_port, sig_fmt, is3d, trans_fmt, &dnlp, &newdnlp, &dnlpFlag ) == 0 ) {
+ newdnlp.en = dnlp_switch;
+ LOGE ( "PQ_GetDNLPParams ok!\n" );
+ LOGE ( "newdnlp.en:%d,newdnlp.method:%d,newdnlp.cliprate:%d,newdnlp.lowrange:%d,newdnlp.hghrange:%d,newdnlp.lowalpha:%d,newdnlp.midalpha:%d,newdnlp.hghalpha:%d\n",
+ newdnlp.en, newdnlp.method, newdnlp.cliprate, newdnlp.lowrange, newdnlp.hghrange, newdnlp.lowalpha, newdnlp.midalpha, newdnlp.hghalpha);
+ VPP_SetVENewDNLP ( &newdnlp );
+ SetFileAttrValue ( "/sys/module/am_vecm/parameters/dnlp_en", "1" );
+ ret = 1;
+ } else {
+ LOGE ( "mpPqData->PQ_GetDNLPParams failed!\n" );
+ }
+
+ return ret;
}
int CVpp::VPP_SetVEDNLP ( const struct ve_dnlp_s *pDNLP )
{
- int rt = VPP_DeviceIOCtl ( AMVECM_IOC_VE_DNLP, pDNLP );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVEDNLP##AMVECM_IOC_VE_DNLP##" );
+ int rt = VPP_DeviceIOCtl ( AMVECM_IOC_VE_DNLP, pDNLP );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVEDNLP##AMVECM_IOC_VE_DNLP##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetVEDNLP, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetVEDNLP, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetVENewDNLP ( const ve_dnlp_table_t *pDNLP )
{
- int rt = VPP_DeviceIOCtl ( AMVECM_IOC_VE_NEW_DNLP, pDNLP );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVENewDNLP##AMVECM_IOC_VE_NEW_DNLP##" );
+ int rt = VPP_DeviceIOCtl ( AMVECM_IOC_VE_NEW_DNLP, pDNLP );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVENewDNLP##AMVECM_IOC_VE_NEW_DNLP##" );
- if ( rt < 0 ) {
- LOGE ( "VPP_SetVENewDNLP, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "VPP_SetVENewDNLP, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::Tv_SetDnlp_OFF ( void )
{
- if ( Vpp_SetDnlpOff() < 0 ) {
- LOGE ( "%s failed.\n", __FUNCTION__ );
- return -1;
- } else {
- LOGE ( "%s success.\n", __FUNCTION__ );
- SSMSaveDnlpStart ( 1 ); //save dnlp status to e2rom
- return 0;
- }
+ if ( Vpp_SetDnlpOff() < 0 ) {
+ LOGE ( "%s failed.\n", __FUNCTION__ );
+ return -1;
+ } else {
+ LOGE ( "%s success.\n", __FUNCTION__ );
+ SSMSaveDnlpStart ( 1 ); //save dnlp status to e2rom
+ return 0;
+ }
}
int CVpp::Tv_SetDnlp_ON ( void )
{
- if ( Vpp_SetDnlpOn() < 0 ) {
- LOGE ( "%s failed.\n", __FUNCTION__ );
- return -1;
- } else {
- LOGE ( "%s success.\n", __FUNCTION__ );
- SSMSaveDnlpStart ( 0 ); //save dnlp status to e2rom
- return 0;
- }
+ if ( Vpp_SetDnlpOn() < 0 ) {
+ LOGE ( "%s failed.\n", __FUNCTION__ );
+ return -1;
+ } else {
+ LOGE ( "%s success.\n", __FUNCTION__ );
+ SSMSaveDnlpStart ( 0 ); //save dnlp status to e2rom
+ return 0;
+ }
}
int CVpp::Vpp_SetDnlpOff ( void )
{
- //According linux driver to modify the AMSTREAM_IOC_VE_DNLP_DIS to the AMVECM_IOC_VE_DNLP_DIS.
- //int rt = VPP_DeviceIOCtl(AMSTREAM_IOC_VE_DNLP_DIS);
- int rt = VPP_DeviceIOCtl ( AMVECM_IOC_VE_DNLP_DIS );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##Vpp_SetDnlpOff##AMVECM_IOC_VE_DNLP_DIS##" );
+ //According linux driver to modify the AMSTREAM_IOC_VE_DNLP_DIS to the AMVECM_IOC_VE_DNLP_DIS.
+ //int rt = VPP_DeviceIOCtl(AMSTREAM_IOC_VE_DNLP_DIS);
+ int rt = VPP_DeviceIOCtl ( AMVECM_IOC_VE_DNLP_DIS );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##Vpp_SetDnlpOff##AMVECM_IOC_VE_DNLP_DIS##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_SetDnlpOff, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_SetDnlpOff, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::Vpp_SetDnlpOn ( void )
{
- //According linux driver to modify the AMSTREAM_IOC_VE_DNLP_DIS to the AMVECM_IOC_VE_DNLP_DIS.
- //int rt = VPP_DeviceIOCtl(AMSTREAM_IOC_VE_DNLP_EN);
- int rt = VPP_DeviceIOCtl ( AMVECM_IOC_VE_DNLP_EN );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##Vpp_SetDnlpOn##AMVECM_IOC_VE_DNLP_EN##" );
+ //According linux driver to modify the AMSTREAM_IOC_VE_DNLP_DIS to the AMVECM_IOC_VE_DNLP_DIS.
+ //int rt = VPP_DeviceIOCtl(AMSTREAM_IOC_VE_DNLP_EN);
+ int rt = VPP_DeviceIOCtl ( AMVECM_IOC_VE_DNLP_EN );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##Vpp_SetDnlpOn##AMVECM_IOC_VE_DNLP_EN##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_SetDnlpOn, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_SetDnlpOn, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::Tv_GetDnlp_Status()
{
- unsigned char status = 0;
- SSMReadDnlpStart ( &status );
- LOGD ( "%s, %d.", __FUNCTION__, status );
- return status;
+ unsigned char status = 0;
+ SSMReadDnlpStart ( &status );
+ LOGD ( "%s, %d.", __FUNCTION__, status );
+ return status;
}
int CVpp::VPP_SetRGBOGO ( const struct tcon_rgb_ogo_s *rgbogo )
{
- int rt = VPP_DeviceIOCtl ( AMVECM_IOC_S_RGB_OGO, rgbogo );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetRGBOGO##AMVECM_IOC_S_RGB_OGO##" );
- usleep ( 50 * 1000 );
+ int rt = VPP_DeviceIOCtl ( AMVECM_IOC_S_RGB_OGO, rgbogo );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetRGBOGO##AMVECM_IOC_S_RGB_OGO##" );
+ usleep ( 50 * 1000 );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetRGBOGO, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetRGBOGO, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_GetRGBOGO ( const struct tcon_rgb_ogo_s *rgbogo )
{
- int rt = VPP_DeviceIOCtl ( AMVECM_IOC_G_RGB_OGO, rgbogo );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_GetRGBOGO##AMVECM_IOC_G_RGB_OGO##" );
+ int rt = VPP_DeviceIOCtl ( AMVECM_IOC_G_RGB_OGO, rgbogo );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_GetRGBOGO##AMVECM_IOC_G_RGB_OGO##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_GetRGBOGO, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_GetRGBOGO, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::Tv_SetRGBOGO_PostOffset(int rgb, int offset)
{
- tcon_rgb_ogo_t rgbogo;
-
- if ( VPP_GetRGBOGO ( &rgbogo ) < 0 ) return -1;
- switch (rgb) {
- case 0://r
- rgbogo.r_post_offset = offset;
- break;
- case 1://g
- rgbogo.g_post_offset = offset;
- break;
- case 2://b
- rgbogo.b_post_offset = offset;
- break;
- default:
- break;
- }
- if ( VPP_SetRGBOGO ( &rgbogo ) != 0 ) return -1;
- int ret = 0;
- switch (rgb) {
- case 0:
- ret = SSMSaveRGBPostOffsetRStart ( 0, offset);
- break;
- case 1:
- ret = SSMSaveRGBPostOffsetGStart ( 0, offset);
- break;
- case 2:
- ret = SSMSaveRGBPostOffsetBStart ( 0, offset);
- break;
- default:
- break;
- }
- return ret;
+ tcon_rgb_ogo_t rgbogo;
+
+ if ( VPP_GetRGBOGO ( &rgbogo ) < 0 ) return -1;
+ switch(rgb) {
+ case 0://r
+ rgbogo.r_post_offset = offset;
+ break;
+ case 1://g
+ rgbogo.g_post_offset = offset;
+ break;
+ case 2://b
+ rgbogo.b_post_offset = offset;
+ break;
+ default:
+ break;
+ }
+ if ( VPP_SetRGBOGO ( &rgbogo ) != 0 ) return -1;
+ int ret = 0;
+ switch(rgb) {
+ case 0:
+ ret = SSMSaveRGBPostOffsetRStart ( 0, offset);
+ break;
+ case 1:
+ ret = SSMSaveRGBPostOffsetGStart ( 0, offset);
+ break;
+ case 2:
+ ret = SSMSaveRGBPostOffsetBStart ( 0, offset);
+ break;
+ default:
+ break;
+ }
+ return ret;
}
int CVpp::Tv_SetRGBOGO_Gain(int rgb, int gain)
{
- tcon_rgb_ogo_t rgbogo;
-
- if ( VPP_GetRGBOGO ( &rgbogo ) < 0 ) return -1;
-
- switch (rgb) {
- case 0://r
- rgbogo.r_gain = gain;
- break;
- case 1://g
- rgbogo.g_gain = gain;
- break;
- case 2://b
- rgbogo.b_gain = gain;
- break;
- default:
- break;
- }
-
- if ( VPP_SetRGBOGO ( &rgbogo ) != 0 ) return -1;
-
- int ret = 0;
- switch (rgb) {
- case 0:
- ret = SSMSaveRGBGainRStart ( 0, gain);
- break;
- case 1:
- ret = SSMSaveRGBGainGStart ( 0, gain);
- break;
- case 2:
- ret = SSMSaveRGBGainBStart ( 0, gain);
- break;
- default:
- break;
- }
-
- return ret;
+ tcon_rgb_ogo_t rgbogo;
+
+ if ( VPP_GetRGBOGO ( &rgbogo ) < 0 ) return -1;
+
+ switch(rgb) {
+ case 0://r
+ rgbogo.r_gain = gain;
+ break;
+ case 1://g
+ rgbogo.g_gain = gain;
+ break;
+ case 2://b
+ rgbogo.b_gain = gain;
+ break;
+ default:
+ break;
+ }
+
+ if ( VPP_SetRGBOGO ( &rgbogo ) != 0 ) return -1;
+
+ int ret = 0;
+ switch(rgb) {
+ case 0:
+ ret = SSMSaveRGBGainRStart ( 0, gain);
+ break;
+ case 1:
+ ret = SSMSaveRGBGainGStart ( 0, gain);
+ break;
+ case 2:
+ ret = SSMSaveRGBGainBStart ( 0, gain);
+ break;
+ default:
+ break;
+ }
+
+ return ret;
}
int CVpp::Tv_GetRGBOGO_PostOffset ( int rgb )
{
- int offset = 0;
- int ret = 0;
- switch (rgb) {
- case 0:
- ret = SSMReadRGBPostOffsetRStart ( 0, &offset ) ;
- break;
- case 1:
- ret = SSMReadRGBPostOffsetGStart ( 0, &offset ) ;
- break;
- case 2:
- ret = SSMReadRGBPostOffsetBStart ( 0, &offset ) ;
- break;
- default:
- break;
- }
-
- if ( offset < -1024 || offset > 1023 ) {
- offset = 0;
- }
-
- return offset;
+ int offset = 0;
+ int ret = 0;
+ switch(rgb) {
+ case 0:
+ ret = SSMReadRGBPostOffsetRStart ( 0, &offset ) ;
+ break;
+ case 1:
+ ret = SSMReadRGBPostOffsetGStart ( 0, &offset ) ;
+ break;
+ case 2:
+ ret = SSMReadRGBPostOffsetBStart ( 0, &offset ) ;
+ break;
+ default:
+ break;
+ }
+
+ if ( offset < -1024 || offset > 1023 ) {
+ offset = 0;
+ }
+
+ return offset;
}
int CVpp::Tv_GetRGBOGO_Gain ( int rgb )
{
- unsigned int gain = 0;
-
- int ret = 0;
- switch (rgb) {
- case 0:
- ret = SSMReadRGBGainRStart ( 0, &gain ) ;
- break;
- case 1:
- ret = SSMReadRGBGainGStart ( 0, &gain ) ;
- break;
- case 2:
- ret = SSMReadRGBGainBStart ( 0, &gain ) ;
- break;
- default:
- break;
- }
+ unsigned int gain = 0;
- if ( /*gain_r < 0 || */gain > 2047 ) {
- gain = 1024;
- }
+ int ret = 0;
+ switch(rgb) {
+ case 0:
+ ret = SSMReadRGBGainRStart ( 0, &gain ) ;
+ break;
+ case 1:
+ ret = SSMReadRGBGainGStart ( 0, &gain ) ;
+ break;
+ case 2:
+ ret = SSMReadRGBGainBStart ( 0, &gain ) ;
+ break;
+ default:
+ break;
+ }
- return gain;
+ if ( /*gain_r < 0 || */gain > 2047 ) {
+ gain = 1024;
+ }
+
+ return gain;
}
//RGB GAIN:0~255 <-----> 512~1536
-int CVpp::Tv_RGBGainValueSSMToRisterMapping ( int gainValue ) //0~255
+int CVpp::Tv_RGBGainValueSSMToRisterMapping ( int gainValue ) //0~255
{
- int mapValue = 0;
+ int mapValue = 0;
- if ( gainValue < 0 || gainValue > 255 ) {
- mapValue = 1024;
- } else {
- if ( gainValue == 255 ) {
- mapValue = 1536;
- } else {
- mapValue = 512 + gainValue * ( 1536 - 512 ) / 256;
- }
- }
+ if ( gainValue < 0 || gainValue > 255 ) {
+ mapValue = 1024;
+ } else {
+ if ( gainValue == 255 ) {
+ mapValue = 1536;
+ } else {
+ mapValue = 512 + gainValue * ( 1536 - 512 ) / 256;
+ }
+ }
- return mapValue;//512~1536
+ return mapValue;//512~1536
}
//RGB OFFSET:-128~127 <-----> -512~512
-int CVpp::Tv_RGBOffsetValueSSMToRisterMapping ( int offsetValue ) //-128~127
+int CVpp::Tv_RGBOffsetValueSSMToRisterMapping ( int offsetValue ) //-128~127
{
- int mapValue = 0;
+ int mapValue = 0;
- if ( offsetValue < -128 || offsetValue > 127 ) {
- offsetValue = 0;
- }
+ if ( offsetValue < -128 || offsetValue > 127 ) {
+ offsetValue = 0;
+ }
- if ( offsetValue == 127 ) {
- mapValue = 512;
- } else {
- mapValue = 1024 * offsetValue / 256;
- }
+ if ( offsetValue == 127 ) {
+ mapValue = 512;
+ } else {
+ mapValue = 1024 * offsetValue / 256;
+ }
- return mapValue;//-512~512
+ return mapValue;//-512~512
}
int CVpp::Tv_FactorySetPQMode_Brightness ( int source_type, int pq_mode, int brightness )
{
- int ret = -1;
- vpp_pq_para_t pq_para;
+ int ret = -1;
+ vpp_pq_para_t pq_para;
- if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
- pq_para.brightness = brightness;
+ if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
+ pq_para.brightness = brightness;
- if ( mpPqData->PQ_SetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
- ret = 0;
- } else {
- ret = 1;
- }
- } else {
- ret = -1;
- }
+ if ( mpPqData->PQ_SetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
+ ret = 0;
+ } else {
+ ret = 1;
+ }
+ } else {
+ ret = -1;
+ }
- return ret;
+ return ret;
}
int CVpp::Tv_FactoryGetPQMode_Brightness ( int source_type, int pq_mode )
{
- vpp_pq_para_t pq_para;
+ vpp_pq_para_t pq_para;
- if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) != 0 ) {
- return -1;
- }
+ if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) != 0 ) {
+ return -1;
+ }
- return pq_para.brightness;
+ return pq_para.brightness;
}
int CVpp::Tv_FactorySetPQMode_Contrast ( int source_type, int pq_mode, int contrast )
{
- int ret = -1;
- vpp_pq_para_t pq_para;
+ int ret = -1;
+ vpp_pq_para_t pq_para;
- if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
- pq_para.contrast = contrast;
+ if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
+ pq_para.contrast = contrast;
- if ( mpPqData->PQ_SetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
- ret = 0;
- } else {
- ret = 1;
- }
- } else {
- ret = -1;
- }
+ if ( mpPqData->PQ_SetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
+ ret = 0;
+ } else {
+ ret = 1;
+ }
+ } else {
+ ret = -1;
+ }
- return ret;
+ return ret;
}
int CVpp::Tv_FactoryGetPQMode_Contrast ( int source_type, int pq_mode )
{
- vpp_pq_para_t pq_para;
+ vpp_pq_para_t pq_para;
- if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) != 0 ) {
- return -1;
- }
+ if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) != 0 ) {
+ return -1;
+ }
- return pq_para.contrast;
+ return pq_para.contrast;
}
int CVpp::Tv_FactorySetPQMode_Saturation ( int source_type, int pq_mode, int saturation )
{
- int ret = -1;
- vpp_pq_para_t pq_para;
+ int ret = -1;
+ vpp_pq_para_t pq_para;
- if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
- pq_para.saturation = saturation;
+ if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
+ pq_para.saturation = saturation;
- if ( mpPqData->PQ_SetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
- ret = 0;
- } else {
- ret = 1;
- }
- } else {
- ret = -1;
- }
+ if ( mpPqData->PQ_SetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
+ ret = 0;
+ } else {
+ ret = 1;
+ }
+ } else {
+ ret = -1;
+ }
- return ret;
+ return ret;
}
int CVpp::Tv_FactoryGetPQMode_Saturation ( int source_type, int pq_mode )
{
- vpp_pq_para_t pq_para;
+ vpp_pq_para_t pq_para;
- if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) != 0 ) {
- return -1;
- }
+ if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) != 0 ) {
+ return -1;
+ }
- return pq_para.saturation;
+ return pq_para.saturation;
}
int CVpp::Tv_FactorySetPQMode_Hue ( int source_type, int pq_mode, int hue )
{
- int ret = -1;
- vpp_pq_para_t pq_para;
+ int ret = -1;
+ vpp_pq_para_t pq_para;
- if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
- pq_para.hue = hue;
+ if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
+ pq_para.hue = hue;
- if ( mpPqData->PQ_SetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
- ret = 0;
- } else {
- ret = 1;
- }
- } else {
- ret = -1;
- }
+ if ( mpPqData->PQ_SetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
+ ret = 0;
+ } else {
+ ret = 1;
+ }
+ } else {
+ ret = -1;
+ }
- return ret;
+ return ret;
}
int CVpp::Tv_FactoryGetPQMode_Hue ( int source_type, int pq_mode )
{
- vpp_pq_para_t pq_para;
+ vpp_pq_para_t pq_para;
- if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) != 0 ) {
- return -1;
- }
+ if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) != 0 ) {
+ return -1;
+ }
- return pq_para.hue;
+ return pq_para.hue;
}
int CVpp::Tv_FactorySetPQMode_Sharpness ( int source_type, int pq_mode, int sharpness )
{
- int ret = -1;
- vpp_pq_para_t pq_para;
+ int ret = -1;
+ vpp_pq_para_t pq_para;
- if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
- pq_para.sharpness = sharpness;
+ if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
+ pq_para.sharpness = sharpness;
- if ( mpPqData->PQ_SetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
- ret = 0;
- } else {
- ret = 1;
- }
- } else {
- ret = -1;
- }
+ if ( mpPqData->PQ_SetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) == 0 ) {
+ ret = 0;
+ } else {
+ ret = 1;
+ }
+ } else {
+ ret = -1;
+ }
- return ret;
+ return ret;
}
int CVpp::Tv_FactoryGetPQMode_Sharpness ( int source_type, int pq_mode )
{
- vpp_pq_para_t pq_para;
+ vpp_pq_para_t pq_para;
- if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) != 0 ) {
- return -1;
- }
+ if ( mpPqData->PQ_GetPQModeParams ( ( tv_source_input_type_t ) source_type, ( vpp_picture_mode_t ) pq_mode, &pq_para ) != 0 ) {
+ return -1;
+ }
- return pq_para.sharpness;
+ return pq_para.sharpness;
}
unsigned short CVpp::CalColorTemperatureParamsChecksum ( void )
{
- unsigned char data_buf[SSM_CR_RGBOGO_LEN];
- unsigned short sum = 0;
- int cnt;
- USUC usuc;
+ unsigned char data_buf[SSM_CR_RGBOGO_LEN];
+ unsigned short sum = 0;
+ int cnt;
+ USUC usuc;
- SSMReadRGBOGOValue ( 0, SSM_CR_RGBOGO_LEN, data_buf );
+ SSMReadRGBOGOValue ( 0, SSM_CR_RGBOGO_LEN, data_buf );
- for ( cnt = 0; cnt < SSM_CR_RGBOGO_LEN; cnt++ ) {
- sum += data_buf[cnt];
- }
+ for ( cnt = 0; cnt < SSM_CR_RGBOGO_LEN; cnt++ ) {
+ sum += data_buf[cnt];
+ }
- //checksum = 0xff - sum % 0xff;
+ //checksum = 0xff - sum % 0xff;
- LOGD ( "%s, sum = 0x%X.\n", __FUNCTION__, sum );
+ LOGD ( "%s, sum = 0x%X.\n", __FUNCTION__, sum );
- return sum;
+ return sum;
}
int CVpp::SetColorTempParamsChecksum ( void )
{
- int ret = 0;
- USUC usuc;
+ int ret = 0;
+ USUC usuc;
- usuc.s = CalColorTemperatureParamsChecksum();
+ usuc.s = CalColorTemperatureParamsChecksum();
- LOGD ( "%s, sum = 0x%X.\n", __FUNCTION__, usuc.s );
+ LOGD ( "%s, sum = 0x%X.\n", __FUNCTION__, usuc.s );
- ret |= SSMSaveRGBOGOValue ( SSM_CR_RGBOGO_LEN, SSM_CR_RGBOGO_CHKSUM_LEN, usuc.c );
+ ret |= SSMSaveRGBOGOValue ( SSM_CR_RGBOGO_LEN, SSM_CR_RGBOGO_CHKSUM_LEN, usuc.c );
- return ret;
+ return ret;
}
unsigned short CVpp::GetColorTempParamsChecksum ( void )
{
- USUC usuc;
+ USUC usuc;
- SSMReadRGBOGOValue ( SSM_CR_RGBOGO_LEN, SSM_CR_RGBOGO_CHKSUM_LEN, usuc.c );
+ SSMReadRGBOGOValue ( SSM_CR_RGBOGO_LEN, SSM_CR_RGBOGO_CHKSUM_LEN, usuc.c );
- LOGD ( "%s, sum = 0x%X.\n", __FUNCTION__, usuc.s );
+ LOGD ( "%s, sum = 0x%X.\n", __FUNCTION__, usuc.s );
- return usuc.s;
+ return usuc.s;
}
int CVpp::CheckTempDataLable ( void )
{
- USUC usuc;
- USUC ret;
+ USUC usuc;
+ USUC ret;
- SSMReadRGBOGOValue ( SSM_CR_RGBOGO_LEN - 2, 2, ret.c );
+ SSMReadRGBOGOValue ( SSM_CR_RGBOGO_LEN - 2, 2, ret.c );
- usuc.c[0] = 0x55;
- usuc.c[1] = 0xAA;
+ usuc.c[0] = 0x55;
+ usuc.c[1] = 0xAA;
- if ( ( usuc.c[0] == ret.c[0] ) && ( usuc.c[1] == ret.c[1] ) ) {
- LOGD ( "%s, lable ok.\n", __FUNCTION__ );
- return 1;
- } else {
- LOGD ( "%s, lable error.\n", "TV" );
- return 0;
- }
+ if ( ( usuc.c[0] == ret.c[0] ) && ( usuc.c[1] == ret.c[1] ) ) {
+ LOGD ( "%s, lable ok.\n", __FUNCTION__ );
+ return 1;
+ } else {
+ LOGD ( "%s, lable error.\n", "TV" );
+ return 0;
+ }
}
int CVpp::SetTempDataLable ( void )
{
- USUC usuc;
- int ret = 0;
+ USUC usuc;
+ int ret = 0;
- usuc.c[0] = 0x55;
- usuc.c[1] = 0xAA;
+ usuc.c[0] = 0x55;
+ usuc.c[1] = 0xAA;
- ret = SSMSaveRGBOGOValue ( SSM_CR_RGBOGO_LEN - 2, 2, usuc.c );
+ ret = SSMSaveRGBOGOValue ( SSM_CR_RGBOGO_LEN - 2, 2, usuc.c );
- return ret;
+ return ret;
}
int CVpp::GetColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params )
{
- // CheckColorTemperatureParamAlldata(source_port,sig_fmt,trans_fmt);
+ // CheckColorTemperatureParamAlldata(source_port,sig_fmt,trans_fmt);
- return ReadColorTemperatureParams ( Tempmode, params );
+ return ReadColorTemperatureParams ( Tempmode, params );
}
int CVpp::ReadColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params )
{
- SUC suc;
- USUC usuc;
- int ret = 0;
+ SUC suc;
+ USUC usuc;
+ int ret = 0;
- if ( VPP_COLOR_TEMPERATURE_MODE_STANDARD == Tempmode ) { //standard
- ret |= SSMReadRGBOGOValue ( 0, 2, usuc.c );
- params->en = usuc.s;
+ if ( VPP_COLOR_TEMPERATURE_MODE_STANDARD == Tempmode ) { //standard
+ ret |= SSMReadRGBOGOValue ( 0, 2, usuc.c );
+ params->en = usuc.s;
- ret |= SSMReadRGBOGOValue ( 2, 2, suc.c );
- params->r_pre_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 2, 2, suc.c );
+ params->r_pre_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 4, 2, suc.c );
- params->g_pre_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 4, 2, suc.c );
+ params->g_pre_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 6, 2, suc.c );
- params->b_pre_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 6, 2, suc.c );
+ params->b_pre_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 8, 2, usuc.c );
- params->r_gain = usuc.s;
+ ret |= SSMReadRGBOGOValue ( 8, 2, usuc.c );
+ params->r_gain = usuc.s;
- ret |= SSMReadRGBOGOValue ( 10, 2, usuc.c );
- params->g_gain = usuc.s;
+ ret |= SSMReadRGBOGOValue ( 10, 2, usuc.c );
+ params->g_gain = usuc.s;
- ret |= SSMReadRGBOGOValue ( 12, 2, usuc.c );
- params->b_gain = usuc.s;
+ ret |= SSMReadRGBOGOValue ( 12, 2, usuc.c );
+ params->b_gain = usuc.s;
- ret |= SSMReadRGBOGOValue ( 14, 2, suc.c );
- params->r_post_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 14, 2, suc.c );
+ params->r_post_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 16, 2, suc.c );
- params->g_post_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 16, 2, suc.c );
+ params->g_post_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 18, 2, suc.c );
- params->b_post_offset = suc.s;
- } else if ( VPP_COLOR_TEMPERATURE_MODE_WARM == Tempmode ) { //warm
- ret |= SSMReadRGBOGOValue ( 20, 2, usuc.c );
- params->en = usuc.s;
+ ret |= SSMReadRGBOGOValue ( 18, 2, suc.c );
+ params->b_post_offset = suc.s;
+ } else if ( VPP_COLOR_TEMPERATURE_MODE_WARM == Tempmode ) { //warm
+ ret |= SSMReadRGBOGOValue ( 20, 2, usuc.c );
+ params->en = usuc.s;
- ret |= SSMReadRGBOGOValue ( 22, 2, suc.c );
- params->r_pre_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 22, 2, suc.c );
+ params->r_pre_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 24, 2, suc.c );
- params->g_pre_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 24, 2, suc.c );
+ params->g_pre_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 26, 2, suc.c );
- params->b_pre_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 26, 2, suc.c );
+ params->b_pre_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 28, 2, usuc.c );
- params->r_gain = usuc.s;
- ret |= SSMReadRGBOGOValue ( 30, 2, usuc.c );
- params->g_gain = usuc.s;
+ ret |= SSMReadRGBOGOValue ( 28, 2, usuc.c );
+ params->r_gain = usuc.s;
+ ret |= SSMReadRGBOGOValue ( 30, 2, usuc.c );
+ params->g_gain = usuc.s;
- ret |= SSMReadRGBOGOValue ( 32, 2, usuc.c );
- params->b_gain = usuc.s;
+ ret |= SSMReadRGBOGOValue ( 32, 2, usuc.c );
+ params->b_gain = usuc.s;
- ret |= SSMReadRGBOGOValue ( 34, 2, suc.c );
- params->r_post_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 34, 2, suc.c );
+ params->r_post_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 36, 2, suc.c );
- params->g_post_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 36, 2, suc.c );
+ params->g_post_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 38, 2, suc.c );
- params->b_post_offset = suc.s;
- } else if ( VPP_COLOR_TEMPERATURE_MODE_COLD == Tempmode ) { //cool
- ret |= SSMReadRGBOGOValue ( 40, 2, usuc.c );
- params->en = usuc.s;
+ ret |= SSMReadRGBOGOValue ( 38, 2, suc.c );
+ params->b_post_offset = suc.s;
+ } else if ( VPP_COLOR_TEMPERATURE_MODE_COLD == Tempmode ) { //cool
+ ret |= SSMReadRGBOGOValue ( 40, 2, usuc.c );
+ params->en = usuc.s;
- ret |= SSMReadRGBOGOValue ( 42, 2, suc.c );
- params->r_pre_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 42, 2, suc.c );
+ params->r_pre_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 44, 2, suc.c );
- params->g_pre_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 44, 2, suc.c );
+ params->g_pre_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 46, 2, suc.c );
- params->b_pre_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 46, 2, suc.c );
+ params->b_pre_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 48, 2, usuc.c );
- params->r_gain = usuc.s;
- ret |= SSMReadRGBOGOValue ( 50, 2, usuc.c );
- params->g_gain = usuc.s;
+ ret |= SSMReadRGBOGOValue ( 48, 2, usuc.c );
+ params->r_gain = usuc.s;
+ ret |= SSMReadRGBOGOValue ( 50, 2, usuc.c );
+ params->g_gain = usuc.s;
- ret |= SSMReadRGBOGOValue ( 52, 2, usuc.c );
- params->b_gain = usuc.s;
- ret |= SSMReadRGBOGOValue ( 54, 2, suc.c );
- params->r_post_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 52, 2, usuc.c );
+ params->b_gain = usuc.s;
+ ret |= SSMReadRGBOGOValue ( 54, 2, suc.c );
+ params->r_post_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 56, 2, suc.c );
- params->g_post_offset = suc.s;
+ ret |= SSMReadRGBOGOValue ( 56, 2, suc.c );
+ params->g_post_offset = suc.s;
- ret |= SSMReadRGBOGOValue ( 58, 2, suc.c );
- params->b_post_offset = suc.s;
- }
+ ret |= SSMReadRGBOGOValue ( 58, 2, suc.c );
+ params->b_post_offset = suc.s;
+ }
- LOGD ( "%s, rgain[%d], ggain[%d],bgain[%d],roffset[%d],goffset[%d],boffset[%d]\n", __FUNCTION__, params->r_gain, params->g_gain,
- params->b_gain, params->r_post_offset, params->g_post_offset, params->b_post_offset );
+ LOGD ( "%s, rgain[%d], ggain[%d],bgain[%d],roffset[%d],goffset[%d],boffset[%d]\n", __FUNCTION__, params->r_gain, params->g_gain,
+ params->b_gain, params->r_post_offset, params->g_post_offset, params->b_post_offset );
- return ret;
+ return ret;
}
int CVpp::SetColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params )
{
- // CheckColorTemperatureParamAlldata(source_port,sig_fmt,trans_fmt);
+ // CheckColorTemperatureParamAlldata(source_port,sig_fmt,trans_fmt);
- SaveColorTemperatureParams ( Tempmode, params );
- SetColorTempParamsChecksum();
+ SaveColorTemperatureParams ( Tempmode, params );
+ SetColorTempParamsChecksum();
- return 0;
+ return 0;
}
int CVpp::SaveColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params )
{
- SUC suc;
- USUC usuc;
- int ret = 0;
+ SUC suc;
+ USUC usuc;
+ int ret = 0;
- if ( VPP_COLOR_TEMPERATURE_MODE_STANDARD == Tempmode ) { //standard
- usuc.s = params.en;
- ret |= SSMSaveRGBOGOValue ( 0, 2, usuc.c );
+ if ( VPP_COLOR_TEMPERATURE_MODE_STANDARD == Tempmode ) { //standard
+ usuc.s = params.en;
+ ret |= SSMSaveRGBOGOValue ( 0, 2, usuc.c );
- suc.s = params.r_pre_offset;
- ret |= SSMSaveRGBOGOValue ( 2, 2, suc.c );
+ suc.s = params.r_pre_offset;
+ ret |= SSMSaveRGBOGOValue ( 2, 2, suc.c );
- suc.s = params.g_pre_offset;
- ret |= SSMSaveRGBOGOValue ( 4, 2, suc.c );
+ suc.s = params.g_pre_offset;
+ ret |= SSMSaveRGBOGOValue ( 4, 2, suc.c );
- suc.s = params.b_pre_offset;
- ret |= SSMSaveRGBOGOValue ( 6, 2, suc.c );
+ suc.s = params.b_pre_offset;
+ ret |= SSMSaveRGBOGOValue ( 6, 2, suc.c );
- usuc.s = params.r_gain;
- ret |= SSMSaveRGBOGOValue ( 8, 2, usuc.c );
+ usuc.s = params.r_gain;
+ ret |= SSMSaveRGBOGOValue ( 8, 2, usuc.c );
- usuc.s = params.g_gain;
- ret |= SSMSaveRGBOGOValue ( 10, 2, usuc.c );
+ usuc.s = params.g_gain;
+ ret |= SSMSaveRGBOGOValue ( 10, 2, usuc.c );
- usuc.s = params.b_gain;
- ret |= SSMSaveRGBOGOValue ( 12, 2, usuc.c );
+ usuc.s = params.b_gain;
+ ret |= SSMSaveRGBOGOValue ( 12, 2, usuc.c );
- suc.s = params.r_post_offset;
- ret |= SSMSaveRGBOGOValue ( 14, 2, suc.c );
+ suc.s = params.r_post_offset;
+ ret |= SSMSaveRGBOGOValue ( 14, 2, suc.c );
- suc.s = params.g_post_offset;
- ret |= SSMSaveRGBOGOValue ( 16, 2, suc.c );
+ suc.s = params.g_post_offset;
+ ret |= SSMSaveRGBOGOValue ( 16, 2, suc.c );
- suc.s = params.b_post_offset;
- ret |= SSMSaveRGBOGOValue ( 18, 2, suc.c );
- } else if ( VPP_COLOR_TEMPERATURE_MODE_WARM == Tempmode ) { //warm
- usuc.s = params.en;
- ret |= SSMSaveRGBOGOValue ( 20, 2, usuc.c );
+ suc.s = params.b_post_offset;
+ ret |= SSMSaveRGBOGOValue ( 18, 2, suc.c );
+ } else if ( VPP_COLOR_TEMPERATURE_MODE_WARM == Tempmode ) { //warm
+ usuc.s = params.en;
+ ret |= SSMSaveRGBOGOValue ( 20, 2, usuc.c );
- suc.s = params.r_pre_offset;
- ret |= SSMSaveRGBOGOValue ( 22, 2, suc.c );
+ suc.s = params.r_pre_offset;
+ ret |= SSMSaveRGBOGOValue ( 22, 2, suc.c );
- suc.s = params.g_pre_offset;
- ret |= SSMSaveRGBOGOValue ( 24, 2, suc.c );
- suc.s = params.b_pre_offset;
- ret |= SSMSaveRGBOGOValue ( 26, 2, suc.c );
+ suc.s = params.g_pre_offset;
+ ret |= SSMSaveRGBOGOValue ( 24, 2, suc.c );
+ suc.s = params.b_pre_offset;
+ ret |= SSMSaveRGBOGOValue ( 26, 2, suc.c );
- usuc.s = params.r_gain;
- ret |= SSMSaveRGBOGOValue ( 28, 2, usuc.c );
+ usuc.s = params.r_gain;
+ ret |= SSMSaveRGBOGOValue ( 28, 2, usuc.c );
- usuc.s = params.g_gain;
- ret |= SSMSaveRGBOGOValue ( 30, 2, usuc.c );
+ usuc.s = params.g_gain;
+ ret |= SSMSaveRGBOGOValue ( 30, 2, usuc.c );
- usuc.s = params.b_gain;
- ret |= SSMSaveRGBOGOValue ( 32, 2, usuc.c );
+ usuc.s = params.b_gain;
+ ret |= SSMSaveRGBOGOValue ( 32, 2, usuc.c );
- suc.s = params.r_post_offset;
- ret |= SSMSaveRGBOGOValue ( 34, 2, suc.c );
+ suc.s = params.r_post_offset;
+ ret |= SSMSaveRGBOGOValue ( 34, 2, suc.c );
- suc.s = params.g_post_offset;
- ret |= SSMSaveRGBOGOValue ( 36, 2, suc.c );
+ suc.s = params.g_post_offset;
+ ret |= SSMSaveRGBOGOValue ( 36, 2, suc.c );
- suc.s = params.b_post_offset;
- ret |= SSMSaveRGBOGOValue ( 38, 2, suc.c );
- } else if ( VPP_COLOR_TEMPERATURE_MODE_COLD == Tempmode ) { //cool
- usuc.s = params.en;
- ret |= SSMSaveRGBOGOValue ( 40, 2, usuc.c );
+ suc.s = params.b_post_offset;
+ ret |= SSMSaveRGBOGOValue ( 38, 2, suc.c );
+ } else if ( VPP_COLOR_TEMPERATURE_MODE_COLD == Tempmode ) { //cool
+ usuc.s = params.en;
+ ret |= SSMSaveRGBOGOValue ( 40, 2, usuc.c );
- suc.s = params.r_pre_offset;
- ret |= SSMSaveRGBOGOValue ( 42, 2, suc.c );
+ suc.s = params.r_pre_offset;
+ ret |= SSMSaveRGBOGOValue ( 42, 2, suc.c );
- suc.s = params.g_pre_offset;
- ret |= SSMSaveRGBOGOValue ( 44, 2, suc.c );
+ suc.s = params.g_pre_offset;
+ ret |= SSMSaveRGBOGOValue ( 44, 2, suc.c );
- suc.s = params.b_pre_offset;
- ret |= SSMSaveRGBOGOValue ( 46, 2, suc.c );
+ suc.s = params.b_pre_offset;
+ ret |= SSMSaveRGBOGOValue ( 46, 2, suc.c );
- usuc.s = params.r_gain;
- ret |= SSMSaveRGBOGOValue ( 48, 2, usuc.c );
+ usuc.s = params.r_gain;
+ ret |= SSMSaveRGBOGOValue ( 48, 2, usuc.c );
- usuc.s = params.g_gain;
- ret |= SSMSaveRGBOGOValue ( 50, 2, usuc.c );
+ usuc.s = params.g_gain;
+ ret |= SSMSaveRGBOGOValue ( 50, 2, usuc.c );
- usuc.s = params.b_gain;
- ret |= SSMSaveRGBOGOValue ( 52, 2, usuc.c );
+ usuc.s = params.b_gain;
+ ret |= SSMSaveRGBOGOValue ( 52, 2, usuc.c );
- suc.s = params.r_post_offset;
- ret |= SSMSaveRGBOGOValue ( 54, 2, suc.c );
+ suc.s = params.r_post_offset;
+ ret |= SSMSaveRGBOGOValue ( 54, 2, suc.c );
- suc.s = params.g_post_offset;
- ret |= SSMSaveRGBOGOValue ( 56, 2, suc.c );
+ suc.s = params.g_post_offset;
+ ret |= SSMSaveRGBOGOValue ( 56, 2, suc.c );
- suc.s = params.b_post_offset;
- ret |= SSMSaveRGBOGOValue ( 58, 2, suc.c );
- }
+ suc.s = params.b_post_offset;
+ ret |= SSMSaveRGBOGOValue ( 58, 2, suc.c );
+ }
- LOGD ( "%s, rgain[%d], ggain[%d],bgain[%d],roffset[%d],goffset[%d],boffset[%d]\n", __FUNCTION__, params.r_gain, params.g_gain,
- params.b_gain, params.r_post_offset, params.g_post_offset, params.b_post_offset );
- return ret;
+ LOGD ( "%s, rgain[%d], ggain[%d],bgain[%d],roffset[%d],goffset[%d],boffset[%d]\n", __FUNCTION__, params.r_gain, params.g_gain,
+ params.b_gain, params.r_post_offset, params.g_post_offset, params.b_post_offset );
+ return ret;
}
int CVpp::CheckColorTemperatureParams ( void )
{
- int i = 0;
- tcon_rgb_ogo_t rgbogo;
+ int i = 0;
+ tcon_rgb_ogo_t rgbogo;
- for ( i = 0; i < 3; i++ ) {
- ReadColorTemperatureParams ( ( vpp_color_temperature_mode_t ) i, &rgbogo );
+ for ( i = 0; i < 3; i++ ) {
+ ReadColorTemperatureParams ( ( vpp_color_temperature_mode_t ) i, &rgbogo );
- if ( rgbogo.r_gain > 2047 || rgbogo.b_gain > 2047 || rgbogo.g_gain > 2047
- || rgbogo.r_gain < 0 || rgbogo.b_gain < 0 || rgbogo.g_gain < 0 ) {
- if ( rgbogo.r_post_offset > 1023 || rgbogo.g_post_offset > 1023 || rgbogo.b_post_offset > 1023
- || rgbogo.r_post_offset < -1024 || rgbogo.g_post_offset < -1024 || rgbogo.b_post_offset < -1024 ) {
- return 0;
- }
- }
- }
+ if ( rgbogo.r_gain > 2047 || rgbogo.b_gain > 2047 || rgbogo.g_gain > 2047
+ || rgbogo.r_gain < 0 || rgbogo.b_gain < 0 || rgbogo.g_gain < 0 ) {
+ if ( rgbogo.r_post_offset > 1023 || rgbogo.g_post_offset > 1023 || rgbogo.b_post_offset > 1023
+ || rgbogo.r_post_offset < -1024 || rgbogo.g_post_offset < -1024 || rgbogo.b_post_offset < -1024 ) {
+ return 0;
+ }
+ }
+ }
- return 1;
+ return 1;
}
int CVpp::RestoeColorTemperatureParamsFromDB ( tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt )
{
- int i = 0;
- tcon_rgb_ogo_t rgbogo;
+ int i = 0;
+ tcon_rgb_ogo_t rgbogo;
- LOGD ( "%s, restore color temperature params from DB.\n", __FUNCTION__ );
+ LOGD ( "%s, restore color temperature params from DB.\n", __FUNCTION__ );
- for ( i = 0; i < 3; i++ ) {
- mpPqData->PQ_GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) i, source_port, sig_fmt, trans_fmt, &rgbogo );
- SaveColorTemperatureParams ( ( vpp_color_temperature_mode_t ) i, rgbogo );
- }
+ for ( i = 0; i < 3; i++ ) {
+ mpPqData->PQ_GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) i, source_port, sig_fmt, trans_fmt, &rgbogo );
+ SaveColorTemperatureParams ( ( vpp_color_temperature_mode_t ) i, rgbogo );
+ }
- SetColorTempParamsChecksum();
+ SetColorTempParamsChecksum();
- return 0;
+ return 0;
}
int CVpp::CheckColorTemperatureParamAlldata ( tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt )
{
- if ( CheckTempDataLable() && ( CalColorTemperatureParamsChecksum() == GetColorTempParamsChecksum() ) ) {
- LOGD ( "%s, color temperature param lable & checksum ok.\n", __FUNCTION__ );
+ if ( CheckTempDataLable() && ( CalColorTemperatureParamsChecksum() == GetColorTempParamsChecksum() ) ) {
+ LOGD ( "%s, color temperature param lable & checksum ok.\n", __FUNCTION__ );
- if ( CheckColorTemperatureParams() == 0 ) {
- LOGD ( "%s, color temperature params check failed.\n", __FUNCTION__ );
- RestoeColorTemperatureParamsFromDB(source_port, sig_fmt, trans_fmt);
- }
- } else {
- LOGD ( "%s, color temperature param data error.\n", __FUNCTION__ );
+ if ( CheckColorTemperatureParams() == 0 ) {
+ LOGD ( "%s, color temperature params check failed.\n", __FUNCTION__ );
+ RestoeColorTemperatureParamsFromDB(source_port, sig_fmt, trans_fmt);
+ }
+ } else {
+ LOGD ( "%s, color temperature param data error.\n", __FUNCTION__ );
- SetTempDataLable();
- RestoeColorTemperatureParamsFromDB(source_port, sig_fmt, trans_fmt);
- }
+ SetTempDataLable();
+ RestoeColorTemperatureParamsFromDB(source_port, sig_fmt, trans_fmt);
+ }
- return 0;
+ return 0;
}
int CVpp::Tv_FactorySetColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo );
- rgbogo.r_gain = rgain;
- LOGD ( "%s, source_type[%d], colortemp_mode[%d], rgain[%d].", __FUNCTION__, source_type, colortemp_mode, rgain );
- rgbogo.en = 1;
+ GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo );
+ rgbogo.r_gain = rgain;
+ LOGD ( "%s, source_type[%d], colortemp_mode[%d], rgain[%d].", __FUNCTION__, source_type, colortemp_mode, rgain );
+ rgbogo.en = 1;
- if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
- return 0;
- }
+ if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
+ return 0;
+ }
- return -1;
+ return -1;
}
int CVpp::Tv_FactorySaveColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
- rgbogo.r_gain = rgain;
- return SetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, rgbogo );
- }
+ if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
+ rgbogo.r_gain = rgain;
+ return SetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, rgbogo );
+ }
- LOGE ( "Tv_FactorySaveColorTemp_Rgain error!\n" );
- return -1;
+ LOGE ( "Tv_FactorySaveColorTemp_Rgain error!\n" );
+ return -1;
}
int CVpp::Tv_FactoryGetColorTemp_Rgain ( int source_type, int colortemp_mode )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
- return rgbogo.r_gain;
- }
+ if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
+ return rgbogo.r_gain;
+ }
- LOGE ( "Tv_FactoryGetColorTemp_Rgain error!\n" );
- return -1;
+ LOGE ( "Tv_FactoryGetColorTemp_Rgain error!\n" );
+ return -1;
}
int CVpp::Tv_FactorySetColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo );
- rgbogo.g_gain = ggain;
- LOGD ( "%s, source_type[%d], colortemp_mode[%d], ggain[%d].", __FUNCTION__, source_type, colortemp_mode, ggain );
- rgbogo.en = 1;
+ GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo );
+ rgbogo.g_gain = ggain;
+ LOGD ( "%s, source_type[%d], colortemp_mode[%d], ggain[%d].", __FUNCTION__, source_type, colortemp_mode, ggain );
+ rgbogo.en = 1;
- if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
- return 0;
- }
+ if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
+ return 0;
+ }
- return -1;
+ return -1;
}
int CVpp::Tv_FactorySaveColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
- rgbogo.g_gain = ggain;
- return SetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, rgbogo );
- }
+ if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
+ rgbogo.g_gain = ggain;
+ return SetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, rgbogo );
+ }
- LOGE ( "Tv_FactorySaveColorTemp_Ggain error!\n" );
- return -1;
+ LOGE ( "Tv_FactorySaveColorTemp_Ggain error!\n" );
+ return -1;
}
int CVpp::Tv_FactoryGetColorTemp_Ggain ( int source_type, int colortemp_mode )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
- return rgbogo.g_gain;
- }
+ if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
+ return rgbogo.g_gain;
+ }
- LOGE ( "Tv_FactoryGetColorTemp_Ggain error!\n" );
- return -1;
+ LOGE ( "Tv_FactoryGetColorTemp_Ggain error!\n" );
+ return -1;
}
int CVpp::Tv_FactorySetColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo );
- rgbogo.b_gain = bgain;
- LOGD ( "%s, source_type[%d], colortemp_mode[%d], bgain[%d].", __FUNCTION__, source_type, colortemp_mode, bgain );
- rgbogo.en = 1;
+ GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo );
+ rgbogo.b_gain = bgain;
+ LOGD ( "%s, source_type[%d], colortemp_mode[%d], bgain[%d].", __FUNCTION__, source_type, colortemp_mode, bgain );
+ rgbogo.en = 1;
- if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
- return 0;
- }
+ if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
+ return 0;
+ }
- return -1;
+ return -1;
}
int CVpp::Tv_FactorySaveColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
- rgbogo.b_gain = bgain;
- return SetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, rgbogo );
- }
+ if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
+ rgbogo.b_gain = bgain;
+ return SetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, rgbogo );
+ }
- LOGE ( "Tv_FactorySaveColorTemp_Bgain error!\n" );
- return -1;
+ LOGE ( "Tv_FactorySaveColorTemp_Bgain error!\n" );
+ return -1;
}
int CVpp::Tv_FactoryGetColorTemp_Bgain ( int source_type, int colortemp_mode )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
- return rgbogo.b_gain;
- }
+ if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
+ return rgbogo.b_gain;
+ }
- LOGE ( "Tv_FactoryGetColorTemp_Bgain error!\n" );
- return -1;
+ LOGE ( "Tv_FactoryGetColorTemp_Bgain error!\n" );
+ return -1;
}
int CVpp::Tv_FactorySetColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo );
- rgbogo.r_post_offset = roffset;
- LOGD ( "%s, source_type[%d], colortemp_mode[%d], r_post_offset[%d].", __FUNCTION__, source_type, colortemp_mode, roffset );
- rgbogo.en = 1;
+ GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo );
+ rgbogo.r_post_offset = roffset;
+ LOGD ( "%s, source_type[%d], colortemp_mode[%d], r_post_offset[%d].", __FUNCTION__, source_type, colortemp_mode, roffset );
+ rgbogo.en = 1;
- if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
- return 0;
- }
+ if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
+ return 0;
+ }
- return -1;
+ return -1;
}
int CVpp::Tv_FactorySaveColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
- rgbogo.r_post_offset = roffset;
- return SetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, rgbogo );
- }
+ if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
+ rgbogo.r_post_offset = roffset;
+ return SetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, rgbogo );
+ }
- LOGE ( "Tv_FactorySaveColorTemp_Roffset error!\n" );
- return -1;
+ LOGE ( "Tv_FactorySaveColorTemp_Roffset error!\n" );
+ return -1;
}
int CVpp::Tv_FactoryGetColorTemp_Roffset ( int source_type, int colortemp_mode )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
- return rgbogo.r_post_offset;
- }
+ if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
+ return rgbogo.r_post_offset;
+ }
- LOGE ( "Tv_FactoryGetColorTemp_Roffset error!\n" );
- return -1;
+ LOGE ( "Tv_FactoryGetColorTemp_Roffset error!\n" );
+ return -1;
}
int CVpp::Tv_FactorySetColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo );
- rgbogo.g_post_offset = goffset;
- LOGD ( "%s, source_type[%d], colortemp_mode[%d], g_post_offset[%d].", __FUNCTION__, source_type, colortemp_mode, goffset );
- rgbogo.en = 1;
+ GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo );
+ rgbogo.g_post_offset = goffset;
+ LOGD ( "%s, source_type[%d], colortemp_mode[%d], g_post_offset[%d].", __FUNCTION__, source_type, colortemp_mode, goffset );
+ rgbogo.en = 1;
- if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
- return 0;
- }
+ if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
+ return 0;
+ }
- return -1;
+ return -1;
}
int CVpp::Tv_FactorySaveColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
- rgbogo.g_post_offset = goffset;
- return SetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, rgbogo );
- }
+ if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
+ rgbogo.g_post_offset = goffset;
+ return SetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, rgbogo );
+ }
- LOGE ( "Tv_FactorySaveColorTemp_Goffset error!\n" );
- return -1;
+ LOGE ( "Tv_FactorySaveColorTemp_Goffset error!\n" );
+ return -1;
}
int CVpp::Tv_FactoryGetColorTemp_Goffset ( int source_type, int colortemp_mode )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
- return rgbogo.g_post_offset;
- }
+ if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
+ return rgbogo.g_post_offset;
+ }
- LOGE ( "Tv_FactoryGetColorTemp_Goffset error!\n" );
- return -1;
+ LOGE ( "Tv_FactoryGetColorTemp_Goffset error!\n" );
+ return -1;
}
int CVpp::Tv_FactorySetColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo );
- rgbogo.b_post_offset = boffset;
- LOGD ( "%s, source_type[%d], colortemp_mode[%d], b_post_offset[%d].", __FUNCTION__, source_type, colortemp_mode, boffset );
- rgbogo.en = 1;
+ GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo );
+ rgbogo.b_post_offset = boffset;
+ LOGD ( "%s, source_type[%d], colortemp_mode[%d], b_post_offset[%d].", __FUNCTION__, source_type, colortemp_mode, boffset );
+ rgbogo.en = 1;
- if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
- return 0;
- }
+ if ( VPP_SetRGBOGO ( &rgbogo ) == 0 ) {
+ return 0;
+ }
- return -1;
+ return -1;
}
int CVpp::Tv_FactorySaveColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
- rgbogo.b_post_offset = boffset;
- return SetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, rgbogo );
- }
+ if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
+ rgbogo.b_post_offset = boffset;
+ return SetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, rgbogo );
+ }
- LOGE ( "Tv_FactorySaveColorTemp_Boffset error!\n" );
- return -1;
+ LOGE ( "Tv_FactorySaveColorTemp_Boffset error!\n" );
+ return -1;
}
int CVpp::Tv_FactoryGetColorTemp_Boffset ( int source_type, int colortemp_mode )
{
- tcon_rgb_ogo_t rgbogo;
+ tcon_rgb_ogo_t rgbogo;
- if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
- return rgbogo.b_post_offset;
- }
+ if ( 0 == GetColorTemperatureParams ( ( vpp_color_temperature_mode_t ) colortemp_mode, &rgbogo ) ) {
+ return rgbogo.b_post_offset;
+ }
- LOGE ( "Tv_FactoryGetColorTemp_Boffset error!\n" );
- return -1;
+ LOGE ( "Tv_FactoryGetColorTemp_Boffset error!\n" );
+ return -1;
}
int CVpp::Tv_FactoryGetTestPattern ( void )
{
- unsigned char data = VPP_TEST_PATTERN_NONE;
- SSMReadTestPattern ( &data );
- return data;
+ unsigned char data = VPP_TEST_PATTERN_NONE;
+ SSMReadTestPattern ( &data );
+ return data;
}
int CVpp::Tv_FactoryResetPQMode ( void )
{
- mpPqData->PQ_ResetAllPQModeParams();
- return 0;
+ mpPqData->PQ_ResetAllPQModeParams();
+ return 0;
}
int CVpp::Tv_FactoryResetNonlinear ( void )
{
- mpPqData->PQ_ResetAllNoLineParams();
- return 0;
+ mpPqData->PQ_ResetAllNoLineParams();
+ return 0;
}
int CVpp::Tv_FactoryResetColorTemp ( void )
{
- mpPqData->PQ_ResetAllColorTemperatureParams();
- return 0;
+ mpPqData->PQ_ResetAllColorTemperatureParams();
+ return 0;
}
int CVpp::Tv_FactorySetParamsDefault ( void )
{
- Tv_FactoryResetPQMode();
- Tv_FactoryResetNonlinear();
- Tv_FactoryResetColorTemp();
- mpPqData->PQ_ResetAllOverscanParams();
- return 0;
+ Tv_FactoryResetPQMode();
+ Tv_FactoryResetNonlinear();
+ Tv_FactoryResetColorTemp();
+ mpPqData->PQ_ResetAllOverscanParams();
+ return 0;
}
int CVpp::Tv_FactorySetDDRSSC ( int step )
{
- int ret = -1;
+ int ret = -1;
- switch ( step ) {
- case 1:
- // ret = Tv_MiscRegs ( "wc 0x14e6 0x0000ac86" );
- break;
+ switch ( step ) {
+ case 1:
+ // ret = Tv_MiscRegs ( "wc 0x14e6 0x0000ac86" );
+ break;
- case 2:
- // ret = Tv_MiscRegs ( "wc 0x14e6 0x0000ac85" );
- break;
+ case 2:
+ // ret = Tv_MiscRegs ( "wc 0x14e6 0x0000ac85" );
+ break;
- case 3:
- // ret = Tv_MiscRegs ( "wc 0x14e6 0x0000ac75" );
- break;
+ case 3:
+ // ret = Tv_MiscRegs ( "wc 0x14e6 0x0000ac75" );
+ break;
- case 4:
- // ret = Tv_MiscRegs ( "wc 0x14e6 0x0000ac65" );
- break;
+ case 4:
+ // ret = Tv_MiscRegs ( "wc 0x14e6 0x0000ac65" );
+ break;
- case 5:
- // ret = Tv_MiscRegs ( "wc 0x14e6 0x0000acb3" );
- break;
+ case 5:
+ // ret = Tv_MiscRegs ( "wc 0x14e6 0x0000acb3" );
+ break;
- case 0:
- default:
- // ret = Tv_MiscRegs ( "wc 0x14e6 0x0000ac24" );
- break;
- }
+ case 0:
+ default:
+ // ret = Tv_MiscRegs ( "wc 0x14e6 0x0000ac24" );
+ break;
+ }
- if ( ret < 0 ) {
- return -1;
- }
+ if ( ret < 0 ) {
+ return -1;
+ }
- return SSMSaveDDRSSC ( step );
+ return SSMSaveDDRSSC ( step );
}
int CVpp::Tv_FactoryGetDDRSSC ( void )
{
- unsigned char data = 0;
- SSMReadDDRSSC ( &data );
- return data;
+ unsigned char data = 0;
+ SSMReadDDRSSC ( &data );
+ return data;
}
int CVpp::Tv_FactorySetLVDSSSC ( int step )
{
- int ret = -1;
+ int ret = -1;
- switch ( step ) {
- case 1:
- // ret = Tv_MiscRegs ( "wc 0x109e 0x4d625012" );
- // ret |= Tv_MiscRegs ( "wc 0x109f 0x36130" );
- break;
-
- case 2:
- // ret = Tv_MiscRegs ( "wc 0x109e 0x2d425012" );
- // ret |= Tv_MiscRegs ( "wc 0x109f 0x36130" );
- break;
-
- case 3:
- // ret = Tv_MiscRegs ( "wc 0x109e 0x1d425012" );
- // ret |= Tv_MiscRegs ( "wc 0x109f 0x36130" );
- break;
-
- case 4:
- // ret = Tv_MiscRegs ( "wc 0x109e 0x0d125012" );
- // ret |= Tv_MiscRegs ( "wc 0x109f 0x36130" );
- break;
-
- case 5:
- // ret = Tv_MiscRegs ( "wc 0x109e 0x0e425012" );
- // ret |= Tv_MiscRegs ( "wc 0x109f 0x36130" );
- break;
-
- case 0:
- default:
- // ret = Tv_MiscRegs ( "wc 0x109e 0x6d625012" );
- // ret |= Tv_MiscRegs ( "wc 0x109f 0x36130" );
- break;
- }
+ switch ( step ) {
+ case 1:
+ // ret = Tv_MiscRegs ( "wc 0x109e 0x4d625012" );
+ // ret |= Tv_MiscRegs ( "wc 0x109f 0x36130" );
+ break;
- if ( ret < 0 ) {
- return -1;
- }
+ case 2:
+ // ret = Tv_MiscRegs ( "wc 0x109e 0x2d425012" );
+ // ret |= Tv_MiscRegs ( "wc 0x109f 0x36130" );
+ break;
+
+ case 3:
+ // ret = Tv_MiscRegs ( "wc 0x109e 0x1d425012" );
+ // ret |= Tv_MiscRegs ( "wc 0x109f 0x36130" );
+ break;
+
+ case 4:
+ // ret = Tv_MiscRegs ( "wc 0x109e 0x0d125012" );
+ // ret |= Tv_MiscRegs ( "wc 0x109f 0x36130" );
+ break;
+
+ case 5:
+ // ret = Tv_MiscRegs ( "wc 0x109e 0x0e425012" );
+ // ret |= Tv_MiscRegs ( "wc 0x109f 0x36130" );
+ break;
- return SSMSaveLVDSSSC ( step );
+ case 0:
+ default:
+ // ret = Tv_MiscRegs ( "wc 0x109e 0x6d625012" );
+ // ret |= Tv_MiscRegs ( "wc 0x109f 0x36130" );
+ break;
+ }
+
+ if ( ret < 0 ) {
+ return -1;
+ }
+
+ return SSMSaveLVDSSSC ( step );
}
int CVpp::Tv_FactoryGetLVDSSSC ( void )
{
- unsigned char data = 0;
- SSMReadLVDSSSC ( &data );
- return data;
+ unsigned char data = 0;
+ SSMReadLVDSSSC ( &data );
+ return data;
}
noline_params_t CVpp::Tv_FactoryGetNolineParams ( int type, int source_type )
{
- int ret = -1;
- noline_params_t noline_params;
+ int ret = -1;
+ noline_params_t noline_params;
- memset ( &noline_params, 0, sizeof ( noline_params_t ) );
+ memset ( &noline_params, 0, sizeof ( noline_params_t ) );
- switch ( type ) {
- case NOLINE_PARAMS_TYPE_BRIGHTNESS:
- ret = mpPqData->PQ_GetNoLineAllBrightnessParams ( ( tv_source_input_type_t ) source_type, &noline_params.osd0, &noline_params.osd25, &noline_params.osd50, &noline_params.osd75, &noline_params.osd100 );
+ switch ( type ) {
+ case NOLINE_PARAMS_TYPE_BRIGHTNESS:
+ ret = mpPqData->PQ_GetNoLineAllBrightnessParams ( ( tv_source_input_type_t ) source_type, &noline_params.osd0, &noline_params.osd25, &noline_params.osd50, &noline_params.osd75, &noline_params.osd100 );
- case NOLINE_PARAMS_TYPE_CONTRAST:
- ret = mpPqData->PQ_GetNoLineAllContrastParams ( ( tv_source_input_type_t ) source_type, &noline_params.osd0, &noline_params.osd25, &noline_params.osd50, &noline_params.osd75, &noline_params.osd100 );
+ case NOLINE_PARAMS_TYPE_CONTRAST:
+ ret = mpPqData->PQ_GetNoLineAllContrastParams ( ( tv_source_input_type_t ) source_type, &noline_params.osd0, &noline_params.osd25, &noline_params.osd50, &noline_params.osd75, &noline_params.osd100 );
- case NOLINE_PARAMS_TYPE_SATURATION:
- ret = mpPqData->PQ_GetNoLineAllSaturationParams ( ( tv_source_input_type_t ) source_type, &noline_params.osd0, &noline_params.osd25, &noline_params.osd50, &noline_params.osd75, &noline_params.osd100 );
+ case NOLINE_PARAMS_TYPE_SATURATION:
+ ret = mpPqData->PQ_GetNoLineAllSaturationParams ( ( tv_source_input_type_t ) source_type, &noline_params.osd0, &noline_params.osd25, &noline_params.osd50, &noline_params.osd75, &noline_params.osd100 );
- case NOLINE_PARAMS_TYPE_HUE:
- ret = mpPqData->PQ_GetNoLineAllHueParams ( ( tv_source_input_type_t ) source_type, &noline_params.osd0, &noline_params.osd25, &noline_params.osd50, &noline_params.osd75, &noline_params.osd100 );
+ case NOLINE_PARAMS_TYPE_HUE:
+ ret = mpPqData->PQ_GetNoLineAllHueParams ( ( tv_source_input_type_t ) source_type, &noline_params.osd0, &noline_params.osd25, &noline_params.osd50, &noline_params.osd75, &noline_params.osd100 );
- case NOLINE_PARAMS_TYPE_SHARPNESS:
- ret = mpPqData->PQ_GetNoLineAllSharpnessParams ( ( tv_source_input_type_t ) source_type, &noline_params.osd0, &noline_params.osd25, &noline_params.osd50, &noline_params.osd75, &noline_params.osd100 );
+ case NOLINE_PARAMS_TYPE_SHARPNESS:
+ ret = mpPqData->PQ_GetNoLineAllSharpnessParams ( ( tv_source_input_type_t ) source_type, &noline_params.osd0, &noline_params.osd25, &noline_params.osd50, &noline_params.osd75, &noline_params.osd100 );
- case NOLINE_PARAMS_TYPE_VOLUME:
- ret = mpPqData->PQ_GetNoLineAllVolumeParams ( ( tv_source_input_type_t ) source_type, &noline_params.osd0, &noline_params.osd25, &noline_params.osd50, &noline_params.osd75, &noline_params.osd100 );
+ case NOLINE_PARAMS_TYPE_VOLUME:
+ ret = mpPqData->PQ_GetNoLineAllVolumeParams ( ( tv_source_input_type_t ) source_type, &noline_params.osd0, &noline_params.osd25, &noline_params.osd50, &noline_params.osd75, &noline_params.osd100 );
- default:
- break;
- }
+ default:
+ break;
+ }
- return noline_params;
+ return noline_params;
}
int CVpp::Tv_FactorySetNolineParams ( int type, int source_type, noline_params_t noline_params )
{
- int ret = -1;
+ int ret = -1;
- switch ( type ) {
- case NOLINE_PARAMS_TYPE_BRIGHTNESS:
- ret = mpPqData->PQ_SetNoLineAllBrightnessParams ( ( tv_source_input_type_t ) source_type, noline_params.osd0, noline_params.osd25, noline_params.osd50, noline_params.osd75, noline_params.osd100 );
- break;
+ switch ( type ) {
+ case NOLINE_PARAMS_TYPE_BRIGHTNESS:
+ ret = mpPqData->PQ_SetNoLineAllBrightnessParams ( ( tv_source_input_type_t ) source_type, noline_params.osd0, noline_params.osd25, noline_params.osd50, noline_params.osd75, noline_params.osd100 );
+ break;
- case NOLINE_PARAMS_TYPE_CONTRAST:
- ret = mpPqData->PQ_SetNoLineAllContrastParams ( ( tv_source_input_type_t ) source_type, noline_params.osd0, noline_params.osd25, noline_params.osd50, noline_params.osd75, noline_params.osd100 );
- break;
+ case NOLINE_PARAMS_TYPE_CONTRAST:
+ ret = mpPqData->PQ_SetNoLineAllContrastParams ( ( tv_source_input_type_t ) source_type, noline_params.osd0, noline_params.osd25, noline_params.osd50, noline_params.osd75, noline_params.osd100 );
+ break;
- case NOLINE_PARAMS_TYPE_SATURATION:
- ret = mpPqData->PQ_SetNoLineAllSaturationParams ( ( tv_source_input_type_t ) source_type, noline_params.osd0, noline_params.osd25, noline_params.osd50, noline_params.osd75, noline_params.osd100 );
+ case NOLINE_PARAMS_TYPE_SATURATION:
+ ret = mpPqData->PQ_SetNoLineAllSaturationParams ( ( tv_source_input_type_t ) source_type, noline_params.osd0, noline_params.osd25, noline_params.osd50, noline_params.osd75, noline_params.osd100 );
- case NOLINE_PARAMS_TYPE_HUE:
- ret = mpPqData->PQ_SetNoLineAllHueParams ( ( tv_source_input_type_t ) source_type, noline_params.osd0, noline_params.osd25, noline_params.osd50, noline_params.osd75, noline_params.osd100 );
+ case NOLINE_PARAMS_TYPE_HUE:
+ ret = mpPqData->PQ_SetNoLineAllHueParams ( ( tv_source_input_type_t ) source_type, noline_params.osd0, noline_params.osd25, noline_params.osd50, noline_params.osd75, noline_params.osd100 );
- case NOLINE_PARAMS_TYPE_SHARPNESS:
- ret = mpPqData->PQ_SetNoLineAllSharpnessParams ( ( tv_source_input_type_t ) source_type, noline_params.osd0, noline_params.osd25, noline_params.osd50, noline_params.osd75, noline_params.osd100 );
+ case NOLINE_PARAMS_TYPE_SHARPNESS:
+ ret = mpPqData->PQ_SetNoLineAllSharpnessParams ( ( tv_source_input_type_t ) source_type, noline_params.osd0, noline_params.osd25, noline_params.osd50, noline_params.osd75, noline_params.osd100 );
- case NOLINE_PARAMS_TYPE_VOLUME:
- ret = mpPqData->PQ_SetNoLineAllVolumeParams ( ( tv_source_input_type_t ) source_type, noline_params.osd0, noline_params.osd25, noline_params.osd50, noline_params.osd75, noline_params.osd100 );
+ case NOLINE_PARAMS_TYPE_VOLUME:
+ ret = mpPqData->PQ_SetNoLineAllVolumeParams ( ( tv_source_input_type_t ) source_type, noline_params.osd0, noline_params.osd25, noline_params.osd50, noline_params.osd75, noline_params.osd100 );
- default:
- break;
- }
+ default:
+ break;
+ }
- return ret;
+ return ret;
}
int CVpp::Tv_FactorySetOverscan ( int source_type, int fmt, int status_3d, int trans_fmt, tvin_cutwin_t cutwin_t )
{
- int ret = -1;
- ret = mpPqData->PQ_SetOverscanParams ( ( tv_source_input_type_t ) source_type, ( tvin_sig_fmt_t ) fmt, INDEX_2D, ( tvin_trans_fmt_t ) trans_fmt, cutwin_t );
+ int ret = -1;
+ ret = mpPqData->PQ_SetOverscanParams ( ( tv_source_input_type_t ) source_type, ( tvin_sig_fmt_t ) fmt, INDEX_2D, ( tvin_trans_fmt_t ) trans_fmt, cutwin_t );
- if ( ret == 0 ) {
- } else {
- LOGE ( "%s, PQ_SetOverscanParams fail.\n", __FUNCTION__ );
- }
- return ret;
+ if ( ret == 0 ) {
+ } else {
+ LOGE ( "%s, PQ_SetOverscanParams fail.\n", __FUNCTION__ );
+ }
+ return ret;
}
tvin_cutwin_t CVpp::Tv_FactoryGetOverscan ( int source_type, int fmt, is_3d_type_t is3d, int trans_fmt )
{
- int ret = -1;
- tvin_cutwin_t cutwin_t;
- memset ( &cutwin_t, 0, sizeof ( cutwin_t ) );
+ int ret = -1;
+ tvin_cutwin_t cutwin_t;
+ memset ( &cutwin_t, 0, sizeof ( cutwin_t ) );
- if ( trans_fmt < TVIN_TFMT_2D || trans_fmt > TVIN_TFMT_3D_LDGD ) {
- return cutwin_t;
- }
+ if ( trans_fmt < TVIN_TFMT_2D || trans_fmt > TVIN_TFMT_3D_LDGD ) {
+ return cutwin_t;
+ }
- ret = mpPqData->PQ_GetOverscanParams ( ( tv_source_input_type_t ) source_type, ( tvin_sig_fmt_t ) fmt, is3d, ( tvin_trans_fmt_t ) trans_fmt, VPP_DISPLAY_MODE_169, &cutwin_t );
+ ret = mpPqData->PQ_GetOverscanParams ( ( tv_source_input_type_t ) source_type, ( tvin_sig_fmt_t ) fmt, is3d, ( tvin_trans_fmt_t ) trans_fmt, VPP_DISPLAY_MODE_169, &cutwin_t );
- if ( ret == 0 ) {
- } else {
- LOGE ( "%s, PQ_GetOverscanParams faild.\n", __FUNCTION__ );
- }
+ if ( ret == 0 ) {
+ } else {
+ LOGE ( "%s, PQ_GetOverscanParams faild.\n", __FUNCTION__ );
+ }
- return cutwin_t;
+ return cutwin_t;
}
int CVpp::Tv_FactorySetBacklightPWM_Frequency ( int freq )
{
- LOGD("%s,Tv_FactorySetBacklightPWM_Frequency set freq %d .\n", __FUNCTION__, freq);
- return 1;
+ LOGD("%s,Tv_FactorySetBacklightPWM_Frequency set freq %d .\n", __FUNCTION__, freq);
+ return 1;
}
int CVpp::Tv_FactoryGetBacklightPWM_Frequency ( void )
{
- int freq = 50;
- LOGD("%s,Tv_FactoryGetBacklightPWM_Frequency set freq %d .\n", "TV", freq);
- return freq;
+ int freq = 50;
+ LOGD("%s,Tv_FactoryGetBacklightPWM_Frequency set freq %d .\n", "TV", freq);
+ return freq;
}
int CVpp::Tv_FactorySetBacklight_Switch_status ( int status )
{
- LOGD("%s,Tv_FactorySetBacklight_Switch_status set status %d .\n", __FUNCTION__, status);
- return 1;
+ LOGD("%s,Tv_FactorySetBacklight_Switch_status set status %d .\n", __FUNCTION__, status);
+ return 1;
}
int CVpp::Tv_FactoryGetBacklight_Switch_status ( void )
{
- int status = 1;
- LOGD("%s,Tv_FactoryGetBacklight_Switch_status get status %d .\n", __FUNCTION__, status);
- return status;
+ int status = 1;
+ LOGD("%s,Tv_FactoryGetBacklight_Switch_status get status %d .\n", __FUNCTION__, status);
+ return status;
}
int CVpp::Tv_FactorySetBacklightPWM_Duty ( int duty )
{
- LOGD("%s,Tv_FactorySetBacklight_Switch_status set duty %d .\n", __FUNCTION__, duty);
- return 1;
+ LOGD("%s,Tv_FactorySetBacklight_Switch_status set duty %d .\n", __FUNCTION__, duty);
+ return 1;
}
int CVpp::Tv_FactoryGetBacklightPWM_Duty ( void )
{
- int duty = 1;
- LOGD("%s,Tv_FactoryGetBacklight_Switch_status get duty %d .\n", __FUNCTION__, duty);
- return duty;
+ int duty = 1;
+ LOGD("%s,Tv_FactoryGetBacklight_Switch_status get duty %d .\n", __FUNCTION__, duty);
+ return duty;
}
int CVpp::Tv_FactorySetLVDS_ColorDepth ( int depth )
{
- LOGD("%s,Tv_FactorySetLVDS_ColorDepth set depth %d .\n", "TV", depth);
- return 1;
+ LOGD("%s,Tv_FactorySetLVDS_ColorDepth set depth %d .\n", "TV", depth);
+ return 1;
}
int CVpp::Tv_FactoryGetLVDS_ColorDepth ( void )
{
- int depth = 1;
- LOGD("%s,Tv_FactorySetLVDS_ColorDepth get freq %d .\n", __FUNCTION__, depth);
- return depth;
+ int depth = 1;
+ LOGD("%s,Tv_FactorySetLVDS_ColorDepth get freq %d .\n", __FUNCTION__, depth);
+ return depth;
}
int CVpp::Tv_FactorySetLVDS_ColorDither_status ( int status )
{
- LOGD("%s,Tv_FactorySetLVDS_ColorDither_status set status %d .\n", __FUNCTION__, status);
- return 1;
+ LOGD("%s,Tv_FactorySetLVDS_ColorDither_status set status %d .\n", __FUNCTION__, status);
+ return 1;
}
int CVpp::Tv_FactoryGetLVDS_ColorDither_status ( void )
{
- int status = 1;
- LOGD("%s,Tv_FactoryGetLVDS_ColorDither_status get status %d .\n", __FUNCTION__, status);
- return status;
+ int status = 1;
+ LOGD("%s,Tv_FactoryGetLVDS_ColorDither_status get status %d .\n", __FUNCTION__, status);
+ return status;
}
int CVpp::Tv_FactorySetLVDS_Mapping_status ( int status )
{
- LOGD("%s,Tv_FactorySetLVDS_Mapping_status set status %d .\n", __FUNCTION__, status);
- return 1;
+ LOGD("%s,Tv_FactorySetLVDS_Mapping_status set status %d .\n", __FUNCTION__, status);
+ return 1;
}
int CVpp::Tv_FactoryGetLVDS_Mapping_status ( void )
{
- int status = 1;
- LOGD("%s,Tv_FactoryGetLVDS_Mapping_status get status %d .\n", __FUNCTION__, status);
- return status;
+ int status = 1;
+ LOGD("%s,Tv_FactoryGetLVDS_Mapping_status get status %d .\n", __FUNCTION__, status);
+ return status;
}
int CVpp::Tv_FactorySetLVDS_PortSwap_status ( int status )
{
- LOGD("%s,Tv_FactorySetLVDS_PortSwap_status set status %d .\n", __FUNCTION__, status);
- return 1;
+ LOGD("%s,Tv_FactorySetLVDS_PortSwap_status set status %d .\n", __FUNCTION__, status);
+ return 1;
}
int CVpp::Tv_FactoryGetLVDS_PortSwap_status ( void )
{
- int status = 1;
- LOGD("%s,Tv_FactoryGetLVDS_PortSwap_status get status %d .\n", __FUNCTION__, status);
- return status;
+ int status = 1;
+ LOGD("%s,Tv_FactoryGetLVDS_PortSwap_status get status %d .\n", __FUNCTION__, status);
+ return status;
}
int CVpp::VPPSSMRestoreDefault()
{
- int i = 0, tmp_val = 0;
- int tmp_panorama_nor = 0, tmp_panorama_full = 0;
- int offset_r = 0, offset_g = 0, offset_b = 0, gain_r = 1024, gain_g = 1024, gain_b = 1024;
- int8_t std_buf[6] = {0, 0, 0, 0, 0, 0};
- int8_t warm_buf[6] = {0, 0, -8, 0, 0, 0};
- int8_t cold_buf[6] = { -8, 0, 0, 0, 0, 0};
- SSMSaveColorDemoMode ( VPP_COLOR_DEMO_MODE_ALLON );
- SSMSaveColorBaseMode ( VPP_COLOR_BASE_MODE_OPTIMIZE );
- SSMSaveRGBGainRStart ( 0, gain_r );
- SSMSaveRGBGainGStart ( 0, gain_g );
- SSMSaveRGBGainBStart ( 0, gain_b );
- SSMSaveRGBPostOffsetRStart ( 0, offset_r );
- SSMSaveRGBPostOffsetGStart ( 0, offset_g );
- SSMSaveRGBPostOffsetBStart ( 0, offset_b );
- SSMSaveUserNatureLightSwitch ( 1 );
- SSMSaveGammaValue ( 0 );
- SSMSaveGraphyBacklight ( 100 );
- SSMSaveDBCStart ( 0 );
- SSMSaveDnlpStart ( 0 ); //0: ON,1: OFF,default is on
- SSMSaveAPL ( 30 );
- SSMSaveAPL2 ( 30 );
- SSMSaveBD ( 30 );
- SSMSaveBP ( 30 );
-
- SSMSaveFBCELECmodeVal(11);
- SSMSaveFBCN360BackLightVal(10);
- SSMSaveFBCN360ColorTempVal(1); // standard colortemp
-
- for ( i = 0; i < 6; i++ ) {
- SSMSaveRGBValueStart ( i + VPP_COLOR_TEMPERATURE_MODE_STANDARD * 6 , std_buf[i] ); //0~5
- SSMSaveRGBValueStart ( i + VPP_COLOR_TEMPERATURE_MODE_WARM * 6, warm_buf[i] ); //6~11
- SSMSaveRGBValueStart ( i + VPP_COLOR_TEMPERATURE_MODE_COLD * 6, cold_buf[i] ); //12~17
- }
-
- for ( i = 0; i < SOURCE_TYPE_MAX; i++ ) {
- if ( i == SOURCE_TYPE_HDMI ) {
- SSMSaveColorSpaceStart ( VPP_COLOR_SPACE_AUTO );
- }
-
- tmp_val = VPP_COLOR_TEMPERATURE_MODE_STANDARD;
- tmp_panorama_nor = VPP_PANORAMA_MODE_NORMAL;
- tmp_panorama_full = VPP_PANORAMA_MODE_FULL;
-
- if ( i == SOURCE_TYPE_HDMI ) {
- SSMSavePanoramaStart ( i, tmp_panorama_full );
- } else {
- SSMSavePanoramaStart ( i, tmp_panorama_nor );
- }
-
- SSMSaveColorTemperature ( i, tmp_val );
- tmp_val = 50;
- SSMSaveBrightness ( i, tmp_val );
- SSMSaveContrast ( i, tmp_val );
- SSMSaveSaturation ( i, tmp_val );
- SSMSaveHue ( i, tmp_val );
- SSMSaveSharpness ( i, tmp_val );
- tmp_val = VPP_PICTURE_MODE_STANDARD;
- SSMSavePictureMode ( i, tmp_val );
- tmp_val = VPP_DISPLAY_MODE_169;
- SSMSaveDisplayMode ( i, tmp_val );
- tmp_val = VPP_NOISE_REDUCTION_MODE_MID;
- SSMSaveNoiseReduction ( i, tmp_val );
- tmp_val = 100;
- SSMSaveBackLightVal ( i, tmp_val );
- }
-
- SSMSaveDDRSSC ( 0 );
- SSMSaveLVDSSSC ( 0 );
- return 0;
+ int i = 0, tmp_val = 0;
+ int tmp_panorama_nor = 0, tmp_panorama_full = 0;
+ int offset_r = 0, offset_g = 0, offset_b = 0, gain_r = 1024, gain_g = 1024, gain_b = 1024;
+ int8_t std_buf[6] = {0, 0, 0, 0, 0, 0};
+ int8_t warm_buf[6] = {0, 0, -8, 0, 0, 0};
+ int8_t cold_buf[6] = { -8, 0, 0, 0, 0, 0};
+ SSMSaveColorDemoMode ( VPP_COLOR_DEMO_MODE_ALLON );
+ SSMSaveColorBaseMode ( VPP_COLOR_BASE_MODE_OPTIMIZE );
+ SSMSaveRGBGainRStart ( 0, gain_r );
+ SSMSaveRGBGainGStart ( 0, gain_g );
+ SSMSaveRGBGainBStart ( 0, gain_b );
+ SSMSaveRGBPostOffsetRStart ( 0, offset_r );
+ SSMSaveRGBPostOffsetGStart ( 0, offset_g );
+ SSMSaveRGBPostOffsetBStart ( 0, offset_b );
+ SSMSaveUserNatureLightSwitch ( 1 );
+ SSMSaveGammaValue ( 0 );
+ SSMSaveGraphyBacklight ( 100 );
+ SSMSaveDBCStart ( 0 );
+ SSMSaveDnlpStart ( 0 ); //0: ON,1: OFF,default is on
+ SSMSaveAPL ( 30 );
+ SSMSaveAPL2 ( 30 );
+ SSMSaveBD ( 30 );
+ SSMSaveBP ( 30 );
+
+ SSMSaveFBCELECmodeVal(11);
+ SSMSaveFBCN360BackLightVal(10);
+ SSMSaveFBCN360ColorTempVal(1); // standard colortemp
+
+ for ( i = 0; i < 6; i++ ) {
+ SSMSaveRGBValueStart ( i + VPP_COLOR_TEMPERATURE_MODE_STANDARD * 6 , std_buf[i] ); //0~5
+ SSMSaveRGBValueStart ( i + VPP_COLOR_TEMPERATURE_MODE_WARM * 6, warm_buf[i] ); //6~11
+ SSMSaveRGBValueStart ( i + VPP_COLOR_TEMPERATURE_MODE_COLD * 6, cold_buf[i] ); //12~17
+ }
+
+ for ( i = 0; i < SOURCE_TYPE_MAX; i++ ) {
+ if ( i == SOURCE_TYPE_HDMI ) {
+ SSMSaveColorSpaceStart ( VPP_COLOR_SPACE_AUTO );
+ }
+
+ tmp_val = VPP_COLOR_TEMPERATURE_MODE_STANDARD;
+ tmp_panorama_nor = VPP_PANORAMA_MODE_NORMAL;
+ tmp_panorama_full = VPP_PANORAMA_MODE_FULL;
+
+ if ( i == SOURCE_TYPE_HDMI ) {
+ SSMSavePanoramaStart ( i, tmp_panorama_full );
+ } else {
+ SSMSavePanoramaStart ( i, tmp_panorama_nor );
+ }
+
+ SSMSaveColorTemperature ( i, tmp_val );
+ tmp_val = 50;
+ SSMSaveBrightness ( i, tmp_val );
+ SSMSaveContrast ( i, tmp_val );
+ SSMSaveSaturation ( i, tmp_val );
+ SSMSaveHue ( i, tmp_val );
+ SSMSaveSharpness ( i, tmp_val );
+ tmp_val = VPP_PICTURE_MODE_STANDARD;
+ SSMSavePictureMode ( i, tmp_val );
+ tmp_val = VPP_DISPLAY_MODE_169;
+ SSMSaveDisplayMode ( i, tmp_val );
+ tmp_val = VPP_NOISE_REDUCTION_MODE_MID;
+ SSMSaveNoiseReduction ( i, tmp_val );
+ tmp_val = 100;
+ SSMSaveBackLightVal ( i, tmp_val );
+ }
+
+ SSMSaveDDRSSC ( 0 );
+ SSMSaveLVDSSSC ( 0 );
+ return 0;
}
int CVpp::VPPSSMFacRestoreDefault()
{
- return VPPSSMRestoreDefault();
+ return VPPSSMRestoreDefault();
}
int CVpp::Tv_SetRGBValue ( vpp_color_temperature_mode_t temp_mode, unsigned char data_buf[] )
{
- int8_t r_gain = 0, b_gain = 0, g_gain = 0, r_offset = 0, g_offset = 0, b_offset = 0;
- int ret = -1;
- tcon_rgb_ogo_t rgbogo;
- rgbogo.en = 1;
- rgbogo.r_pre_offset = 0;
- rgbogo.g_pre_offset = 0;
- rgbogo.b_pre_offset = 0;
- r_gain = data_buf[0];
- g_gain = data_buf[1];
- b_gain = data_buf[2];
- r_offset = data_buf[3];
- g_offset = data_buf[4];
- b_offset = data_buf[5];
- int mode = ( int ) temp_mode;
-
- switch ( mode ) {
- case 1:
- ret = SSMSaveRGBValueStart ( 0 + mode * 6, r_gain );
- ret |= SSMSaveRGBValueStart ( 1 + mode * 6, g_gain );
- ret |= SSMSaveRGBValueStart ( 2 + mode * 6, b_gain );
- ret |= SSMSaveRGBValueStart ( 3 + mode * 6, r_offset );
- ret |= SSMSaveRGBValueStart ( 4 + mode * 6, g_offset );
- ret |= SSMSaveRGBValueStart ( 5 + mode * 6, b_offset );
- break;
-
- case 2:
- ret = SSMSaveRGBValueStart ( 0 + mode * 6, r_gain );
- ret |= SSMSaveRGBValueStart ( 1 + mode * 6, g_gain );
- ret |= SSMSaveRGBValueStart ( 2 + mode * 6, b_gain );
- ret |= SSMSaveRGBValueStart ( 3 + mode * 6, r_offset );
- ret |= SSMSaveRGBValueStart ( 4 + mode * 6, g_offset );
- ret |= SSMSaveRGBValueStart ( 5 + mode * 6, b_offset );
- break;
-
- case 0:
- default:
- ret = SSMSaveRGBValueStart ( 0, r_gain );
- ret |= SSMSaveRGBValueStart ( 1, g_gain );
- ret |= SSMSaveRGBValueStart ( 2, b_gain );
- ret |= SSMSaveRGBValueStart ( 3, r_offset );
- ret |= SSMSaveRGBValueStart ( 4, g_offset );
- ret |= SSMSaveRGBValueStart ( 5, b_offset );
- break;
- }
-
- if ( ret == 0 ) {
- rgbogo.r_gain = Tv_RGBGainValueSSMToRisterMapping ( r_gain + 128 );
- rgbogo.g_gain = Tv_RGBGainValueSSMToRisterMapping ( g_gain + 128 );
- rgbogo.b_gain = Tv_RGBGainValueSSMToRisterMapping ( b_gain + 128 );
- rgbogo.r_post_offset = Tv_RGBOffsetValueSSMToRisterMapping ( r_offset );
- rgbogo.g_post_offset = Tv_RGBOffsetValueSSMToRisterMapping ( g_offset );
- rgbogo.b_post_offset = Tv_RGBOffsetValueSSMToRisterMapping ( b_offset );
- ret |= VPP_SetRGBOGO ( &rgbogo );
- }
-
- return ret;
+ int8_t r_gain = 0, b_gain = 0, g_gain = 0, r_offset = 0, g_offset = 0, b_offset = 0;
+ int ret = -1;
+ tcon_rgb_ogo_t rgbogo;
+ rgbogo.en = 1;
+ rgbogo.r_pre_offset = 0;
+ rgbogo.g_pre_offset = 0;
+ rgbogo.b_pre_offset = 0;
+ r_gain = data_buf[0];
+ g_gain = data_buf[1];
+ b_gain = data_buf[2];
+ r_offset = data_buf[3];
+ g_offset = data_buf[4];
+ b_offset = data_buf[5];
+ int mode = ( int ) temp_mode;
+
+ switch ( mode ) {
+ case 1:
+ ret = SSMSaveRGBValueStart ( 0 + mode * 6, r_gain );
+ ret |= SSMSaveRGBValueStart ( 1 + mode * 6, g_gain );
+ ret |= SSMSaveRGBValueStart ( 2 + mode * 6, b_gain );
+ ret |= SSMSaveRGBValueStart ( 3 + mode * 6, r_offset );
+ ret |= SSMSaveRGBValueStart ( 4 + mode * 6, g_offset );
+ ret |= SSMSaveRGBValueStart ( 5 + mode * 6, b_offset );
+ break;
+
+ case 2:
+ ret = SSMSaveRGBValueStart ( 0 + mode * 6, r_gain );
+ ret |= SSMSaveRGBValueStart ( 1 + mode * 6, g_gain );
+ ret |= SSMSaveRGBValueStart ( 2 + mode * 6, b_gain );
+ ret |= SSMSaveRGBValueStart ( 3 + mode * 6, r_offset );
+ ret |= SSMSaveRGBValueStart ( 4 + mode * 6, g_offset );
+ ret |= SSMSaveRGBValueStart ( 5 + mode * 6, b_offset );
+ break;
+
+ case 0:
+ default:
+ ret = SSMSaveRGBValueStart ( 0, r_gain );
+ ret |= SSMSaveRGBValueStart ( 1, g_gain );
+ ret |= SSMSaveRGBValueStart ( 2, b_gain );
+ ret |= SSMSaveRGBValueStart ( 3, r_offset );
+ ret |= SSMSaveRGBValueStart ( 4, g_offset );
+ ret |= SSMSaveRGBValueStart ( 5, b_offset );
+ break;
+ }
+
+ if ( ret == 0 ) {
+ rgbogo.r_gain = Tv_RGBGainValueSSMToRisterMapping ( r_gain + 128 );
+ rgbogo.g_gain = Tv_RGBGainValueSSMToRisterMapping ( g_gain + 128 );
+ rgbogo.b_gain = Tv_RGBGainValueSSMToRisterMapping ( b_gain + 128 );
+ rgbogo.r_post_offset = Tv_RGBOffsetValueSSMToRisterMapping ( r_offset );
+ rgbogo.g_post_offset = Tv_RGBOffsetValueSSMToRisterMapping ( g_offset );
+ rgbogo.b_post_offset = Tv_RGBOffsetValueSSMToRisterMapping ( b_offset );
+ ret |= VPP_SetRGBOGO ( &rgbogo );
+ }
+
+ return ret;
}
int CVpp::Tv_GetRGBValue ( vpp_color_temperature_mode_t temp_mode, tcon_rgb_ogo_t *p_rgbogo )
{
- int8_t r_gain = 0, b_gain = 0, g_gain = 0, r_offset = 0, g_offset = 0, b_offset = 0;
- int ret = -1;
-
- p_rgbogo->en = 1;
- p_rgbogo->r_pre_offset = 0;
- p_rgbogo->g_pre_offset = 0;
- p_rgbogo->b_pre_offset = 0;
- p_rgbogo->r_gain = 0;
- p_rgbogo->g_gain = 0;
- p_rgbogo->b_gain = 0;
- p_rgbogo->r_post_offset = 0;
- p_rgbogo->g_post_offset = 0;
- p_rgbogo->b_post_offset = 0;
- int mode = ( int ) temp_mode;
-
- switch ( mode ) {
- case 1:
- ret = SSMReadRGBValueStart ( 0 + mode * 6, &r_gain );
- ret |= SSMReadRGBValueStart ( 1 + mode * 6, &g_gain );
- ret |= SSMReadRGBValueStart ( 2 + mode * 6, &b_gain );
- ret |= SSMReadRGBValueStart ( 3 + mode * 6, &r_offset );
- ret |= SSMReadRGBValueStart ( 4 + mode * 6, &g_offset );
- ret |= SSMReadRGBValueStart ( 5 + mode * 6, &b_offset );
- break;
-
- case 2:
- ret = SSMReadRGBValueStart ( 0 + mode * 6, &r_gain );
- ret |= SSMReadRGBValueStart ( 1 + mode * 6, &g_gain );
- ret |= SSMReadRGBValueStart ( 2 + mode * 6, &b_gain );
- ret |= SSMReadRGBValueStart ( 3 + mode * 6, &r_offset );
- ret |= SSMReadRGBValueStart ( 4 + mode * 6, &g_offset );
- ret |= SSMReadRGBValueStart ( 5 + mode * 6, &b_offset );
- break;
-
- case 0:
- default:
- ret = SSMReadRGBValueStart ( 0, &r_gain );
- ret |= SSMReadRGBValueStart ( 1, &g_gain );
- ret |= SSMReadRGBValueStart ( 2, &b_gain );
- ret |= SSMReadRGBValueStart ( 3, &r_offset );
- ret |= SSMReadRGBValueStart ( 4, &g_offset );
- ret |= SSMReadRGBValueStart ( 5, &b_offset );
- break;
- }
-
- p_rgbogo->r_gain = r_gain + 128; //r_gain:-128~127
- p_rgbogo->g_gain = g_gain + 128;
- p_rgbogo->b_gain = b_gain + 128;
- p_rgbogo->r_post_offset = r_offset;
- p_rgbogo->g_post_offset = g_offset;
- p_rgbogo->b_post_offset = b_offset;
-
- return ret;
+ int8_t r_gain = 0, b_gain = 0, g_gain = 0, r_offset = 0, g_offset = 0, b_offset = 0;
+ int ret = -1;
+
+ p_rgbogo->en = 1;
+ p_rgbogo->r_pre_offset = 0;
+ p_rgbogo->g_pre_offset = 0;
+ p_rgbogo->b_pre_offset = 0;
+ p_rgbogo->r_gain = 0;
+ p_rgbogo->g_gain = 0;
+ p_rgbogo->b_gain = 0;
+ p_rgbogo->r_post_offset = 0;
+ p_rgbogo->g_post_offset = 0;
+ p_rgbogo->b_post_offset = 0;
+ int mode = ( int ) temp_mode;
+
+ switch ( mode ) {
+ case 1:
+ ret = SSMReadRGBValueStart ( 0 + mode * 6, &r_gain );
+ ret |= SSMReadRGBValueStart ( 1 + mode * 6, &g_gain );
+ ret |= SSMReadRGBValueStart ( 2 + mode * 6, &b_gain );
+ ret |= SSMReadRGBValueStart ( 3 + mode * 6, &r_offset );
+ ret |= SSMReadRGBValueStart ( 4 + mode * 6, &g_offset );
+ ret |= SSMReadRGBValueStart ( 5 + mode * 6, &b_offset );
+ break;
+
+ case 2:
+ ret = SSMReadRGBValueStart ( 0 + mode * 6, &r_gain );
+ ret |= SSMReadRGBValueStart ( 1 + mode * 6, &g_gain );
+ ret |= SSMReadRGBValueStart ( 2 + mode * 6, &b_gain );
+ ret |= SSMReadRGBValueStart ( 3 + mode * 6, &r_offset );
+ ret |= SSMReadRGBValueStart ( 4 + mode * 6, &g_offset );
+ ret |= SSMReadRGBValueStart ( 5 + mode * 6, &b_offset );
+ break;
+
+ case 0:
+ default:
+ ret = SSMReadRGBValueStart ( 0, &r_gain );
+ ret |= SSMReadRGBValueStart ( 1, &g_gain );
+ ret |= SSMReadRGBValueStart ( 2, &b_gain );
+ ret |= SSMReadRGBValueStart ( 3, &r_offset );
+ ret |= SSMReadRGBValueStart ( 4, &g_offset );
+ ret |= SSMReadRGBValueStart ( 5, &b_offset );
+ break;
+ }
+
+ p_rgbogo->r_gain = r_gain + 128; //r_gain:-128~127
+ p_rgbogo->g_gain = g_gain + 128;
+ p_rgbogo->b_gain = b_gain + 128;
+ p_rgbogo->r_post_offset = r_offset;
+ p_rgbogo->g_post_offset = g_offset;
+ p_rgbogo->b_post_offset = b_offset;
+
+ return ret;
}
#define PI 3.14159265358979
void CVpp::video_set_saturation_hue ( signed char saturation, signed char hue, signed long *mab )
{
- signed short ma = ( signed short ) ( cos ( ( float ) hue * PI / 128.0 ) * ( ( float ) saturation / 128.0 + 1.0 ) * 256.0 );
- signed short mb = ( signed short ) ( sin ( ( float ) hue * PI / 128.0 ) * ( ( float ) saturation / 128.0 + 1.0 ) * 256.0 );
+ signed short ma = ( signed short ) ( cos ( ( float ) hue * PI / 128.0 ) * ( ( float ) saturation / 128.0 + 1.0 ) * 256.0 );
+ signed short mb = ( signed short ) ( sin ( ( float ) hue * PI / 128.0 ) * ( ( float ) saturation / 128.0 + 1.0 ) * 256.0 );
- if ( ma > 511 ) {
- ma = 511;
- }
+ if ( ma > 511 ) {
+ ma = 511;
+ }
- if ( ma < -512 ) {
- ma = -512;
- }
+ if ( ma < -512 ) {
+ ma = -512;
+ }
- if ( mb > 511 ) {
- mb = 511;
- }
+ if ( mb > 511 ) {
+ mb = 511;
+ }
- if ( mb < -512 ) {
- mb = -512;
- }
+ if ( mb < -512 ) {
+ mb = -512;
+ }
- *mab = ( ( ma & 0x3ff ) << 16 ) | ( mb & 0x3ff );
+ *mab = ( ( ma & 0x3ff ) << 16 ) | ( mb & 0x3ff );
}
void CVpp::video_get_saturation_hue ( signed char *sat, signed char *hue, signed long *mab )
{
- signed long temp = *mab;
- signed int ma = ( signed int ) ( ( temp << 6 ) >> 22 );
- signed int mb = ( signed int ) ( ( temp << 22 ) >> 22 );
- signed int sat16 = ( signed int ) ( ( sqrt ( ( ( float ) ma * ( float ) ma + ( float ) mb * ( float ) mb ) / 65536.0 ) - 1.0 ) * 128.0 );
- signed int hue16 = ( signed int ) ( atan ( ( float ) mb / ( float ) ma ) * 128.0 / PI );
+ signed long temp = *mab;
+ signed int ma = ( signed int ) ( ( temp << 6 ) >> 22 );
+ signed int mb = ( signed int ) ( ( temp << 22 ) >> 22 );
+ signed int sat16 = ( signed int ) ( ( sqrt ( ( ( float ) ma * ( float ) ma + ( float ) mb * ( float ) mb ) / 65536.0 ) - 1.0 ) * 128.0 );
+ signed int hue16 = ( signed int ) ( atan ( ( float ) mb / ( float ) ma ) * 128.0 / PI );
- if ( sat16 > 127 ) {
- sat16 = 127;
- }
+ if ( sat16 > 127 ) {
+ sat16 = 127;
+ }
- if ( sat16 < -128 ) {
- sat16 = -128;
- }
+ if ( sat16 < -128 ) {
+ sat16 = -128;
+ }
- if ( hue16 > 127 ) {
- hue16 = 127;
- }
+ if ( hue16 > 127 ) {
+ hue16 = 127;
+ }
- if ( hue16 < -128 ) {
- hue16 = -128;
- }
+ if ( hue16 < -128 ) {
+ hue16 = -128;
+ }
- *sat = ( signed char ) sat16;
- *hue = ( signed char ) hue16;
+ *sat = ( signed char ) sat16;
+ *hue = ( signed char ) hue16;
}
int CVpp::VPP_SetVideoSaturationHue ( int satVal, int hueVal )
{
- FILE *fp = NULL;
- signed long temp;
+ FILE *fp = NULL;
+ signed long temp;
- fp = fopen ( "/sys/class/amvecm/saturation_hue", "w" );
- LOGD ( "~~~fopen~~~##VPP_SetVideoSaturationHue##%s : %d %d##" , "/sys/class/amvecm/saturation_hue", satVal, hueVal);
+ fp = fopen ( "/sys/class/amvecm/saturation_hue", "w" );
+ LOGD ( "~~~fopen~~~##VPP_SetVideoSaturationHue##%s : %d %d##" , "/sys/class/amvecm/saturation_hue", satVal, hueVal);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/amvecm/saturation_hue error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/amvecm/saturation_hue error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- video_set_saturation_hue ( satVal, hueVal, &temp );
- fprintf ( fp, "0x%lx", temp );
+ video_set_saturation_hue ( satVal, hueVal, &temp );
+ fprintf ( fp, "0x%lx", temp );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CVpp::VPP_SetVideoSaturation ( int saturation )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/class/amvecm/saturation_hue", "w" );
- LOGD ( "~~~fopen~~~##VPP_SetVideoSaturation##%s : %d ##" , "/sys/class/amvecm/saturation_hue", saturation);
+ fp = fopen ( "/sys/class/amvecm/saturation_hue", "w" );
+ LOGD ( "~~~fopen~~~##VPP_SetVideoSaturation##%s : %d ##" , "/sys/class/amvecm/saturation_hue", saturation);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/amvecm/saturation_hue error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/amvecm/saturation_hue error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "0x%x", saturation );
+ fprintf ( fp, "0x%x", saturation );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CVpp::VPP_SetVideoHue ( int hue )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/class/amvecm/saturation_hue", "w" );
- LOGD ( "~~~fopen~~~##VPP_SetVideoHue##%s : %d ##" , "/sys/class/amvecm/saturation_hue", hue);
+ fp = fopen ( "/sys/class/amvecm/saturation_hue", "w" );
+ LOGD ( "~~~fopen~~~##VPP_SetVideoHue##%s : %d ##" , "/sys/class/amvecm/saturation_hue", hue);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/amvecm/saturation_hue error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/amvecm/saturation_hue error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "0x%x", hue );
+ fprintf ( fp, "0x%x", hue );
- fclose ( fp );
- fp = NULL;
- return 0;
+ fclose ( fp );
+ fp = NULL;
+ return 0;
}
int CVpp::VPP_SetGammaTbl_R ( unsigned short red[256] )
{
- struct tcon_gamma_table_s Redtbl;
- int rt = -1, i = 0;
+ struct tcon_gamma_table_s Redtbl;
+ int rt = -1, i = 0;
- for ( i = 0; i < 256; i++ ) {
- Redtbl.data[i] = red[i];
- }
+ for ( i = 0; i < 256; i++ ) {
+ Redtbl.data[i] = red[i];
+ }
- rt = VPP_DeviceIOCtl ( AMVECM_IOC_GAMMA_TABLE_R, &Redtbl );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetGammaTbl_R##AMVECM_IOC_GAMMA_TABLE_R##" );
+ rt = VPP_DeviceIOCtl ( AMVECM_IOC_GAMMA_TABLE_R, &Redtbl );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetGammaTbl_R##AMVECM_IOC_GAMMA_TABLE_R##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetGammaTbl_R, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetGammaTbl_R, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetGammaTbl_G ( unsigned short green[256] )
{
- struct tcon_gamma_table_s Greentbl;
- int rt = -1, i = 0;
+ struct tcon_gamma_table_s Greentbl;
+ int rt = -1, i = 0;
- for ( i = 0; i < 256; i++ ) {
- Greentbl.data[i] = green[i];
- }
+ for ( i = 0; i < 256; i++ ) {
+ Greentbl.data[i] = green[i];
+ }
- rt = VPP_DeviceIOCtl ( AMVECM_IOC_GAMMA_TABLE_G, &Greentbl );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetGammaTbl_G##AMVECM_IOC_GAMMA_TABLE_G##" );
+ rt = VPP_DeviceIOCtl ( AMVECM_IOC_GAMMA_TABLE_G, &Greentbl );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetGammaTbl_G##AMVECM_IOC_GAMMA_TABLE_G##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetGammaTbl_R, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetGammaTbl_R, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetGammaTbl_B ( unsigned short blue[256] )
{
- struct tcon_gamma_table_s Bluetbl;
- int rt = -1, i = 0;
+ struct tcon_gamma_table_s Bluetbl;
+ int rt = -1, i = 0;
- for ( i = 0; i < 256; i++ ) {
- Bluetbl.data[i] = blue[i];
- }
+ for ( i = 0; i < 256; i++ ) {
+ Bluetbl.data[i] = blue[i];
+ }
- rt = VPP_DeviceIOCtl ( AMVECM_IOC_GAMMA_TABLE_B, &Bluetbl );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetGammaTbl_B##AMVECM_IOC_GAMMA_TABLE_B##" );
+ rt = VPP_DeviceIOCtl ( AMVECM_IOC_GAMMA_TABLE_B, &Bluetbl );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetGammaTbl_B##AMVECM_IOC_GAMMA_TABLE_B##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetGammaTbl_R, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetGammaTbl_R, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetGammaOnOff ( unsigned char onoff )
{
- int rt = -1;
+ int rt = -1;
- if ( onoff == 1 ) {
- rt = VPP_DeviceIOCtl ( AMVECM_IOC_GAMMA_TABLE_EN );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetGammaOnOff##AMVECM_IOC_GAMMA_TABLE_EN##" );
- }
+ if ( onoff == 1 ) {
+ rt = VPP_DeviceIOCtl ( AMVECM_IOC_GAMMA_TABLE_EN );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetGammaOnOff##AMVECM_IOC_GAMMA_TABLE_EN##" );
+ }
- if ( onoff == 0 ) {
- rt = VPP_DeviceIOCtl ( AMVECM_IOC_GAMMA_TABLE_DIS );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetGammaOnOff##AMVECM_IOC_GAMMA_TABLE_DIS##" );
- }
+ if ( onoff == 0 ) {
+ rt = VPP_DeviceIOCtl ( AMVECM_IOC_GAMMA_TABLE_DIS );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetGammaOnOff##AMVECM_IOC_GAMMA_TABLE_DIS##" );
+ }
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetGammaOnOff, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetGammaOnOff, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetGrayPattern(int value)
{
- FILE *fp = NULL;
- if (value < 0) {
- value = 0;
- } else if (value > 255) {
- value = 255;
- }
- value = value << 16 | 0x8080;
+ FILE *fp = NULL;
+ if (value < 0) {
+ value = 0;
+ } else if (value > 255) {
+ value = 255;
+ }
+ value = value << 16 | 0x8080;
- fp = fopen ( "/sys/class/video/test_screen", "w" );
- LOGD ( "~~~fopen~~~##VPP_SetGrayPattern##%s : %x ##" , "/sys/class/video/test_screen", value);
+ fp = fopen ( "/sys/class/video/test_screen", "w" );
+ LOGD ( "~~~fopen~~~##VPP_SetGrayPattern##%s : %x ##" , "/sys/class/video/test_screen", value);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/classs/video/test_screen error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/classs/video/test_screen error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "0x%x", value );
- fclose ( fp );
- fp = NULL;
+ fprintf ( fp, "0x%x", value );
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CVpp::VPP_GetGrayPattern()
{
- FILE *fp = NULL;
- int value;
- fp = fopen ( "/sys/class/video/test_screen", "r+" );
+ FILE *fp = NULL;
+ int value;
+ fp = fopen ( "/sys/class/video/test_screen", "r+" );
- LOGD ( "~~~fopen~~~##VPP_GetGrayPattern##%s ##" , "/sys/class/video/test_screen");
+ LOGD ( "~~~fopen~~~##VPP_GetGrayPattern##%s ##" , "/sys/class/video/test_screen");
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/video/test_screen error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/video/test_screen error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fscanf ( fp, "%d", &value );
- fclose ( fp );
- fp = NULL;
- if (value < 0) {
- return 0;
- } else {
- value = value >> 16;
- if (value > 255) {
- value = 255;
- }
- return value;
- }
+ fscanf ( fp, "%d", &value );
+ fclose ( fp );
+ fp = NULL;
+ if (value < 0) {
+ return 0;
+ } else {
+ value = value >> 16;
+ if (value > 255) {
+ value = 255;
+ }
+ return value;
+ }
}
int CVpp::VPP_SetVideoNoiseReduction ( int value )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/class/deinterlace/di0/parameters", "w" );
- LOGD ( "~~~fopen~~~##VPP_SetVideoNoiseReduction##%s : %d ##" , "/sys/class/deinterlace/di0/parameters", value);
+ fp = fopen ( "/sys/class/deinterlace/di0/parameters", "w" );
+ LOGD ( "~~~fopen~~~##VPP_SetVideoNoiseReduction##%s : %d ##" , "/sys/class/deinterlace/di0/parameters", value);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/class/deinterlace/di0/parameters ERROR(%s)!!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/class/deinterlace/di0/parameters ERROR(%s)!!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "noise_reduction_level=%x", value );
- fclose ( fp );
- fp = NULL;
+ fprintf ( fp, "noise_reduction_level=%x", value );
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CVpp::VPP_SetDeinterlaceMode ( int value )
{
- FILE *fp = NULL;
+ FILE *fp = NULL;
- fp = fopen ( "/sys/module/deinterlace/parameters/deinterlace_mode", "w" );
- LOGD ( "~~~fopen~~~##VPP_SetDeinterlaceMode##%s : %d ##" , "/sys/module/deinterlace/parameters/deinterlace_mode", value);
+ fp = fopen ( "/sys/module/deinterlace/parameters/deinterlace_mode", "w" );
+ LOGD ( "~~~fopen~~~##VPP_SetDeinterlaceMode##%s : %d ##" , "/sys/module/deinterlace/parameters/deinterlace_mode", value);
- if ( fp == NULL ) {
- LOGE ( "Open /sys/module/deinterlace/parameters/deinterlace_mode error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fp == NULL ) {
+ LOGE ( "Open /sys/module/deinterlace/parameters/deinterlace_mode error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- fprintf ( fp, "%d", value );
+ fprintf ( fp, "%d", value );
- fclose ( fp );
- fp = NULL;
+ fclose ( fp );
+ fp = NULL;
- return 0;
+ return 0;
}
int CVpp::Tv_GetHistogram_AVE ( void )
{
- ve_hist_t hist;
- hist.sum = 0;
- hist.height = 0;
- hist.width = 0;
- hist.ave = 0;
+ ve_hist_t hist;
+ hist.sum = 0;
+ hist.height = 0;
+ hist.width = 0;
+ hist.ave = 0;
- if ( Vpp_GetAVGHistogram ( &hist ) == 0 ) {
- LOGD ( "%s: %d.\n", __FUNCTION__, hist.ave );
- } else {
- LOGE ( "%s failed.\n", __FUNCTION__ );
- }
+ if ( Vpp_GetAVGHistogram ( &hist ) == 0 ) {
+ LOGD ( "%s: %d.\n", __FUNCTION__, hist.ave );
+ } else {
+ LOGE ( "%s failed.\n", __FUNCTION__ );
+ }
- return hist.ave;
+ return hist.ave;
}
int CVpp::Vpp_GetAVGHistogram ( struct ve_hist_s *hist )
{
- //int rt = VPP_DeviceIOCtl(AMSTREAM_IOC_G_HIST_AVG, hist);
- int rt = VPP_DeviceIOCtl ( AMVECM_IOC_G_HIST_AVG, hist );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##Vpp_GetAVGHistogram##AMVECM_IOC_G_HIST_AVG##" );
+ //int rt = VPP_DeviceIOCtl(AMSTREAM_IOC_G_HIST_AVG, hist);
+ int rt = VPP_DeviceIOCtl ( AMVECM_IOC_G_HIST_AVG, hist );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##Vpp_GetAVGHistogram##AMVECM_IOC_G_HIST_AVG##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_GetAVGHistogram, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_GetAVGHistogram, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetVEBlackExtension ( const struct ve_bext_s *pBExt )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_BEXT, pBExt );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVEBlackExtension##AMSTREAM_IOC_VE_BEXT##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_BEXT, pBExt );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVEBlackExtension##AMSTREAM_IOC_VE_BEXT##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetVEBlackExtension, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetVEBlackExtension, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
tvin_cutwin_t CVpp::Tv_GetOverscan ( tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt )
{
- int ret = -1;
- char tmp_buf[16];
- tvin_cutwin_t cutwin_t;
- memset ( &cutwin_t, 0, sizeof ( cutwin_t ) );
-
- if ( trans_fmt < TVIN_TFMT_2D || trans_fmt > TVIN_TFMT_3D_LDGD ) {
- return cutwin_t;
- }
-
- if (source_type == SOURCE_TYPE_DTV) {
- tmp_buf[0] = 0;
- ret = 0;
- if ((ret |= cfg_get_one_item("vpp.overscan.dtv", ",", 0, tmp_buf)) == 0) {
- cutwin_t.vs = strtol(tmp_buf, NULL, 10);
- }
- if ((ret |= cfg_get_one_item("vpp.overscan.dtv", ",", 1, tmp_buf)) == 0) {
- cutwin_t.hs = strtol(tmp_buf, NULL, 10);
- }
- if ((ret |= cfg_get_one_item("vpp.overscan.dtv", ",", 2, tmp_buf)) == 0) {
- cutwin_t.ve = strtol(tmp_buf, NULL, 10);
- }
- if ((ret |= cfg_get_one_item("vpp.overscan.dtv", ",", 3, tmp_buf)) == 0) {
- cutwin_t.he = strtol(tmp_buf, NULL, 10);
- }
-
- if (ret < 0) {
- cutwin_t.vs = 12;
- cutwin_t.hs = 27;
- cutwin_t.ve = 10;
- cutwin_t.he = 24;
- }
- return cutwin_t;
- }
-
- vpp_display_mode_t scrmode = Tv_GetDisplayMode ( source_type );
- ret = mpPqData->PQ_GetOverscanParams ( source_type, fmt, is3d, trans_fmt, scrmode, &cutwin_t );
-
- if ( ret != 0 ) {
- LOGW ( "%s, PQ_GetOverscanParams faild.\n", __FUNCTION__ );
-
- if ( source_type == SOURCE_TYPE_TV ) {
- if ( fmt == TVIN_SIG_FMT_CVBS_NTSC_M
- || fmt == TVIN_SIG_FMT_CVBS_NTSC_443 ) {
- cutwin_t.hs = 30;
- cutwin_t.he = 720 - 30 - 1;
- cutwin_t.vs = 2;
- cutwin_t.ve = 240 - 2 - 1;
- } else if ( fmt >= TVIN_SIG_FMT_CVBS_PAL_I && fmt <= TVIN_SIG_FMT_CVBS_SECAM ) {
- cutwin_t.hs = 32;
- cutwin_t.he = 720 - 32 - 1;
- cutwin_t.vs = 6;
- cutwin_t.ve = 288 - 8 - 1;
- }
- }
- }
-
- return cutwin_t;
+ int ret = -1;
+ char tmp_buf[16];
+ tvin_cutwin_t cutwin_t;
+ memset ( &cutwin_t, 0, sizeof ( cutwin_t ) );
+
+ if ( trans_fmt < TVIN_TFMT_2D || trans_fmt > TVIN_TFMT_3D_LDGD ) {
+ return cutwin_t;
+ }
+
+ if (source_type == SOURCE_TYPE_DTV) {
+ tmp_buf[0] = 0;
+ ret = 0;
+ if ((ret |= cfg_get_one_item("vpp.overscan.dtv", ",", 0, tmp_buf)) == 0) {
+ cutwin_t.vs = strtol(tmp_buf, NULL, 10);
+ }
+ if ((ret |= cfg_get_one_item("vpp.overscan.dtv", ",", 1, tmp_buf)) == 0) {
+ cutwin_t.hs = strtol(tmp_buf, NULL, 10);
+ }
+ if ((ret |= cfg_get_one_item("vpp.overscan.dtv", ",", 2, tmp_buf)) == 0) {
+ cutwin_t.ve = strtol(tmp_buf, NULL, 10);
+ }
+ if ((ret |= cfg_get_one_item("vpp.overscan.dtv", ",", 3, tmp_buf)) == 0) {
+ cutwin_t.he = strtol(tmp_buf, NULL, 10);
+ }
+
+ if (ret < 0) {
+ cutwin_t.vs = 12;
+ cutwin_t.hs = 27;
+ cutwin_t.ve = 10;
+ cutwin_t.he = 24;
+ }
+ return cutwin_t;
+ }
+
+ vpp_display_mode_t scrmode = Tv_GetDisplayMode ( source_type );
+ ret = mpPqData->PQ_GetOverscanParams ( source_type, fmt, is3d, trans_fmt, scrmode, &cutwin_t );
+
+ if ( ret != 0 ) {
+ LOGW ( "%s, PQ_GetOverscanParams faild.\n", __FUNCTION__ );
+
+ if ( source_type == SOURCE_TYPE_TV ) {
+ if ( fmt == TVIN_SIG_FMT_CVBS_NTSC_M
+ || fmt == TVIN_SIG_FMT_CVBS_NTSC_443 ) {
+ cutwin_t.hs = 30;
+ cutwin_t.he = 720 - 30 - 1;
+ cutwin_t.vs = 2;
+ cutwin_t.ve = 240 - 2 - 1;
+ } else if ( fmt >= TVIN_SIG_FMT_CVBS_PAL_I && fmt <= TVIN_SIG_FMT_CVBS_SECAM ) {
+ cutwin_t.hs = 32;
+ cutwin_t.he = 720 - 32 - 1;
+ cutwin_t.vs = 6;
+ cutwin_t.ve = 288 - 8 - 1;
+ }
+ }
+ }
+
+ return cutwin_t;
}
int CVpp::VPP_SetVideoCrop ( int Voffset0, int Hoffset0, int Voffset1, int Hoffset1 )
{
- int fd = -1;
- char set_str[32];
+ int fd = -1;
+ char set_str[32];
- fd = open ( "/sys/class/video/crop", O_RDWR );
+ fd = open ( "/sys/class/video/crop", O_RDWR );
- LOGD ( "~~~open~~~##VPP_SetVideoCrop##%s : %d %d %d %d##" , "/sys/class/video/crop", Voffset0, Hoffset0, Voffset1, Hoffset1);
+ LOGD ( "~~~open~~~##VPP_SetVideoCrop##%s : %d %d %d %d##" , "/sys/class/video/crop", Voffset0, Hoffset0, Voffset1, Hoffset1);
- if ( fd < 0 ) {
- LOGE ( "Open /sys/class/video/crop error(%s)!\n", strerror ( errno ) );
- return -1;
- }
+ if ( fd < 0 ) {
+ LOGE ( "Open /sys/class/video/crop error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
- memset ( set_str, 0, 32 );
- sprintf ( set_str, "%d %d %d %d", Voffset0, Hoffset0, Voffset1, Hoffset1 );
- write ( fd, set_str, strlen ( set_str ) );
- close ( fd );
+ memset ( set_str, 0, 32 );
+ sprintf ( set_str, "%d %d %d %d", Voffset0, Hoffset0, Voffset1, Hoffset1 );
+ write ( fd, set_str, strlen ( set_str ) );
+ close ( fd );
- return 0;
+ return 0;
}
int CVpp::VPP_SetVESharpness ( const struct ve_hsvs_s *pHSVS )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_HSVS, pHSVS );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVESharpness##AMSTREAM_IOC_VE_HSVS##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_HSVS, pHSVS );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVESharpness##AMSTREAM_IOC_VE_HSVS##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetVESharpness, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetVESharpness, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetVEChromaCoring ( const struct ve_ccor_s *pCCor )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_CCOR, pCCor );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVEChromaCoring##AMSTREAM_IOC_VE_CCOR##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_CCOR, pCCor );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVEChromaCoring##AMSTREAM_IOC_VE_CCOR##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetVEChromaCoring, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetVEChromaCoring, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetVEBlueEnh ( const struct ve_benh_s *pBEnh )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_BENH, pBEnh );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVEBlueEnh##AMSTREAM_IOC_VE_BENH##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_BENH, pBEnh );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVEBlueEnh##AMSTREAM_IOC_VE_BENH##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetVEBlueEnh, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetVEBlueEnh, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetVEDemo ( const struct ve_demo_s *pDemo )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_DEMO, pDemo );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVEDemo##AMSTREAM_IOC_VE_DEMO##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_DEMO, pDemo );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVEDemo##AMSTREAM_IOC_VE_DEMO##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetVEDemo, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetVEDemo, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetVERegisterMap ( const struct ve_regmap_s *pRegMap )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_REGMAP, pRegMap );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVERegisterMap##AMSTREAM_IOC_VE_REGMAP##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_REGMAP, pRegMap );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVERegisterMap##AMSTREAM_IOC_VE_REGMAP##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetVERegisterMap, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetVERegisterMap, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetVEDebug ( const unsigned long long *pLData )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_DEBUG, pLData );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVEDebug##AMSTREAM_IOC_VE_DEBUG##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_VE_DEBUG, pLData );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetVEDebug##AMSTREAM_IOC_VE_DEBUG##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetVEDebug, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetVEDebug, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetCMRegion ( const struct cm_region_s *pRegion )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_CM_REGION, pRegion );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetCMRegion##AMSTREAM_IOC_CM_REGION##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_CM_REGION, pRegion );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetCMRegion##AMSTREAM_IOC_CM_REGION##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetCMRegion, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetCMRegion, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetCMTopLayer ( const struct cm_top_s *pTop )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_CM_TOP, pTop );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetCMTopLayer##AMSTREAM_IOC_CM_TOP##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_CM_TOP, pTop );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetCMTopLayer##AMSTREAM_IOC_CM_TOP##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetCMTopLayer, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetCMTopLayer, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetCMDemo ( const struct cm_demo_s *pDemo )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_CM_DEMO, pDemo );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetCMDemo##AMSTREAM_IOC_CM_DEMO##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_CM_DEMO, pDemo );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetCMDemo##AMSTREAM_IOC_CM_DEMO##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetCMDemo, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetCMDemo, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetCMRegisterMap ( struct cm_regmap_s *pRegMap )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_CM_REGMAP, pRegMap );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetCMRegisterMap##AMSTREAM_IOC_CM_REGMAP##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_CM_REGMAP, pRegMap );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetCMRegisterMap##AMSTREAM_IOC_CM_REGMAP##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetCMRegisterMap, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetCMRegisterMap, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetCMDebug ( const unsigned long long *pLData )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_CM_DEBUG, pLData );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetCMDebug##AMSTREAM_IOC_CM_DEBUG##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_CM_DEBUG, pLData );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetCMDebug##AMSTREAM_IOC_CM_DEBUG##" );
- if ( rt < 0 ) {
- LOGE ( "=VPP CPP=> set cm debug, error (%s)", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "=VPP CPP=> set cm debug, error (%s)", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
int CVpp::VPP_SetAVSyncEnable ( const unsigned int enable )
{
- int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_SYNCENABLE, enable );
- LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetAVSyncEnable##AMSTREAM_IOC_SYNCENABLE##" );
+ int rt = VPP_DeviceIOCtl ( AMSTREAM_IOC_SYNCENABLE, enable );
+ LOGD ( "~~~VPP_DeviceIOCtl~~~##VPP_SetAVSyncEnable##AMSTREAM_IOC_SYNCENABLE##" );
- if ( rt < 0 ) {
- LOGE ( "Vpp_api_SetAVSyncEnable, error(%s)!\n", strerror ( errno ) );
- }
+ if ( rt < 0 ) {
+ LOGE ( "Vpp_api_SetAVSyncEnable, error(%s)!\n", strerror ( errno ) );
+ }
- return rt;
+ return rt;
}
diff --git a/tvapi/libtv/vpp/CVpp.h b/tvapi/libtv/vpp/CVpp.h
index abf865d..ae57822 100644
--- a/tvapi/libtv/vpp/CVpp.h
+++ b/tvapi/libtv/vpp/CVpp.h
@@ -30,409 +30,408 @@
#define MODE_VPP_3D_TO_2D_R 0x00000400
typedef union tag_suc {
- short s;
- unsigned char c[2];
+ short s;
+ unsigned char c[2];
} SUC;
typedef union tag_usuc {
- unsigned short s;
- unsigned char c[2];
+ unsigned short s;
+ unsigned char c[2];
} USUC;
typedef enum is_3d_type_e {
- INDEX_3D_INVALID = -1,
- INDEX_2D = 0,
- INDEX_3D = 1,
+ INDEX_3D_INVALID = -1,
+ INDEX_2D = 0,
+ INDEX_3D = 1,
} is_3d_type_t;
typedef enum vpp_panorama_mode_e {
- VPP_PANORAMA_MODE_FULL,
- VPP_PANORAMA_MODE_NORMAL,
- VPP_PANORAMA_MODE_MAX,
+ VPP_PANORAMA_MODE_FULL,
+ VPP_PANORAMA_MODE_NORMAL,
+ VPP_PANORAMA_MODE_MAX,
} vpp_panorama_mode_t;
typedef enum vpp_color_space_type_e {
- VPP_COLOR_SPACE_AUTO,
- VPP_COLOR_SPACE_YUV,
- VPP_COLOR_SPACE_RGB,
+ VPP_COLOR_SPACE_AUTO,
+ VPP_COLOR_SPACE_YUV,
+ VPP_COLOR_SPACE_RGB,
} vpp_color_space_type_t;
typedef enum vpp_display_mode_e {
- VPP_DISPLAY_MODE_169,
- VPP_DISPLAY_MODE_PERSON,
- VPP_DISPLAY_MODE_MOVIE,
- VPP_DISPLAY_MODE_CAPTION,
- VPP_DISPLAY_MODE_MODE43,
- VPP_DISPLAY_MODE_FULL,
- VPP_DISPLAY_MODE_NORMAL,
- VPP_DISPLAY_MODE_NOSCALEUP,
- VPP_DISPLAY_MODE_CROP_FULL,
- VPP_DISPLAY_MODE_CROP,
- VPP_DISPLAY_MODE_ZOOM,
- VPP_DISPLAY_MODE_FULL_REAL,//add for N360 by haifeng.liu
- VPP_DISPLAY_MODE_MAX,
+ VPP_DISPLAY_MODE_169,
+ VPP_DISPLAY_MODE_PERSON,
+ VPP_DISPLAY_MODE_MOVIE,
+ VPP_DISPLAY_MODE_CAPTION,
+ VPP_DISPLAY_MODE_MODE43,
+ VPP_DISPLAY_MODE_FULL,
+ VPP_DISPLAY_MODE_NORMAL,
+ VPP_DISPLAY_MODE_NOSCALEUP,
+ VPP_DISPLAY_MODE_CROP_FULL,
+ VPP_DISPLAY_MODE_CROP,
+ VPP_DISPLAY_MODE_ZOOM,
+ VPP_DISPLAY_MODE_FULL_REAL,//add for N360 by haifeng.liu
+ VPP_DISPLAY_MODE_MAX,
} vpp_display_mode_t;
typedef enum vpp_color_demomode_e {
- VPP_COLOR_DEMO_MODE_ALLON,
- VPP_COLOR_DEMO_MODE_YOFF,
- VPP_COLOR_DEMO_MODE_COFF,
- VPP_COLOR_DEMO_MODE_GOFF,
- VPP_COLOR_DEMO_MODE_MOFF,
- VPP_COLOR_DEMO_MODE_ROFF,
- VPP_COLOR_DEMO_MODE_BOFF,
- VPP_COLOR_DEMO_MODE_RGBOFF,
- VPP_COLOR_DEMO_MODE_YMCOFF,
- VPP_COLOR_DEMO_MODE_ALLOFF,
- VPP_COLOR_DEMO_MODE_MAX,
+ VPP_COLOR_DEMO_MODE_ALLON,
+ VPP_COLOR_DEMO_MODE_YOFF,
+ VPP_COLOR_DEMO_MODE_COFF,
+ VPP_COLOR_DEMO_MODE_GOFF,
+ VPP_COLOR_DEMO_MODE_MOFF,
+ VPP_COLOR_DEMO_MODE_ROFF,
+ VPP_COLOR_DEMO_MODE_BOFF,
+ VPP_COLOR_DEMO_MODE_RGBOFF,
+ VPP_COLOR_DEMO_MODE_YMCOFF,
+ VPP_COLOR_DEMO_MODE_ALLOFF,
+ VPP_COLOR_DEMO_MODE_MAX,
} vpp_color_demomode_t;
typedef enum vpp_color_basemode_e {
- VPP_COLOR_BASE_MODE_OFF,
- VPP_COLOR_BASE_MODE_OPTIMIZE,
- VPP_COLOR_BASE_MODE_ENHANCE,
- VPP_COLOR_BASE_MODE_DEMO,
- VPP_COLOR_BASE_MODE_MAX,
+ VPP_COLOR_BASE_MODE_OFF,
+ VPP_COLOR_BASE_MODE_OPTIMIZE,
+ VPP_COLOR_BASE_MODE_ENHANCE,
+ VPP_COLOR_BASE_MODE_DEMO,
+ VPP_COLOR_BASE_MODE_MAX,
} vpp_color_basemode_t;
typedef enum vpp_color_management2_e {
- VPP_COLOR_MANAGEMENT2_MODE_OFF,
- VPP_COLOR_MANAGEMENT2_MODE_OPTIMIZE,
- VPP_COLOR_MANAGEMENT2_MODE_ENHANCE,
- VPP_COLOR_MANAGEMENT2_MODE_DEMO,
- VPP_COLOR_MANAGEMENT2_MODE_MAX,
+ VPP_COLOR_MANAGEMENT2_MODE_OFF,
+ VPP_COLOR_MANAGEMENT2_MODE_OPTIMIZE,
+ VPP_COLOR_MANAGEMENT2_MODE_ENHANCE,
+ VPP_COLOR_MANAGEMENT2_MODE_DEMO,
+ VPP_COLOR_MANAGEMENT2_MODE_MAX,
} vpp_color_management2_t;
typedef enum vpp_noise_reduction2_mode_e {
- VPP_NOISE_REDUCTION2_MODE_OFF,
- VPP_NOISE_REDUCTION2_MODE_LOW,
- VPP_NOISE_REDUCTION2_MODE_MID,
- VPP_NOISE_REDUCTION2_MODE_HIGH,
- VPP_NOISE_REDUCTION2_MODE_AUTO,
- VPP_NOISE_REDUCTION2_MODE_MAX,
+ VPP_NOISE_REDUCTION2_MODE_OFF,
+ VPP_NOISE_REDUCTION2_MODE_LOW,
+ VPP_NOISE_REDUCTION2_MODE_MID,
+ VPP_NOISE_REDUCTION2_MODE_HIGH,
+ VPP_NOISE_REDUCTION2_MODE_AUTO,
+ VPP_NOISE_REDUCTION2_MODE_MAX,
} vpp_noise_reduction2_mode_t;
typedef enum vpp_xvycc_mode_e {
- VPP_XVYCC_MODE_OFF,
- VPP_XVYCC_MODE_STANDARD,
- VPP_XVYCC_MODE_ENHANCE,
- VPP_XVYCC_MODE_MAX,
+ VPP_XVYCC_MODE_OFF,
+ VPP_XVYCC_MODE_STANDARD,
+ VPP_XVYCC_MODE_ENHANCE,
+ VPP_XVYCC_MODE_MAX,
} vpp_xvycc_mode_t;
typedef enum vpp_mcdi_mode_e {
- VPP_MCDI_MODE_OFF,
- VPP_MCDI_MODE_STANDARD,
- VPP_MCDI_MODE_ENHANCE,
- VPP_MCDI_MODE_MAX,
+ VPP_MCDI_MODE_OFF,
+ VPP_MCDI_MODE_STANDARD,
+ VPP_MCDI_MODE_ENHANCE,
+ VPP_MCDI_MODE_MAX,
} vpp_mcdi_mode_t;
typedef enum vpp_picture_mode_e {
- VPP_PICTURE_MODE_STANDARD,
- VPP_PICTURE_MODE_BRIGHT,
- VPP_PICTURE_MODE_SOFT,
- VPP_PICTURE_MODE_USER,
- VPP_PICTURE_MODE_MOVIE,
- VPP_PICTURE_MODE_COLORFUL,
- VPP_PICTURE_MODE_MAX,
+ VPP_PICTURE_MODE_STANDARD,
+ VPP_PICTURE_MODE_BRIGHT,
+ VPP_PICTURE_MODE_SOFT,
+ VPP_PICTURE_MODE_USER,
+ VPP_PICTURE_MODE_MOVIE,
+ VPP_PICTURE_MODE_COLORFUL,
+ VPP_PICTURE_MODE_MAX,
} vpp_picture_mode_t;
typedef enum vpp_color_temperature_mode_e {
- VPP_COLOR_TEMPERATURE_MODE_STANDARD,
- VPP_COLOR_TEMPERATURE_MODE_WARM,
- VPP_COLOR_TEMPERATURE_MODE_COLD,
- VPP_COLOR_TEMPERATURE_MODE_USER,
- VPP_COLOR_TEMPERATURE_MODE_MAX,
+ VPP_COLOR_TEMPERATURE_MODE_STANDARD,
+ VPP_COLOR_TEMPERATURE_MODE_WARM,
+ VPP_COLOR_TEMPERATURE_MODE_COLD,
+ VPP_COLOR_TEMPERATURE_MODE_USER,
+ VPP_COLOR_TEMPERATURE_MODE_MAX,
} vpp_color_temperature_mode_t;
typedef enum vpp_noise_reduction_mode_e {
- VPP_NOISE_REDUCTION_MODE_OFF,
- VPP_NOISE_REDUCTION_MODE_LOW,
- VPP_NOISE_REDUCTION_MODE_MID,
- VPP_NOISE_REDUCTION_MODE_HIGH,
- VPP_NOISE_REDUCTION_MODE_AUTO,
- VPP_NOISE_REDUCTION_MODE_MAX,
+ VPP_NOISE_REDUCTION_MODE_OFF,
+ VPP_NOISE_REDUCTION_MODE_LOW,
+ VPP_NOISE_REDUCTION_MODE_MID,
+ VPP_NOISE_REDUCTION_MODE_HIGH,
+ VPP_NOISE_REDUCTION_MODE_AUTO,
+ VPP_NOISE_REDUCTION_MODE_MAX,
} vpp_noise_reduction_mode_t;
typedef enum vpp_test_pattern_e {
- VPP_TEST_PATTERN_NONE,
- VPP_TEST_PATTERN_RED,
- VPP_TEST_PATTERN_GREEN,
- VPP_TEST_PATTERN_BLUE,
- VPP_TEST_PATTERN_WHITE,
- VPP_TEST_PATTERN_BLACK,
- VPP_TEST_PATTERN_MAX,
+ VPP_TEST_PATTERN_NONE,
+ VPP_TEST_PATTERN_RED,
+ VPP_TEST_PATTERN_GREEN,
+ VPP_TEST_PATTERN_BLUE,
+ VPP_TEST_PATTERN_WHITE,
+ VPP_TEST_PATTERN_BLACK,
+ VPP_TEST_PATTERN_MAX,
} vpp_test_pattern_e;
typedef struct vpp_pq_para_s {
- int brightness;
- int contrast;
- int saturation;
- int hue;
- int sharpness;
- int backlight;
- int nr;
+ int brightness;
+ int contrast;
+ int saturation;
+ int hue;
+ int sharpness;
+ int backlight;
+ int nr;
} vpp_pq_para_t;
typedef enum noline_params_type_e {
- NOLINE_PARAMS_TYPE_BRIGHTNESS,
- NOLINE_PARAMS_TYPE_CONTRAST,
- NOLINE_PARAMS_TYPE_SATURATION,
- NOLINE_PARAMS_TYPE_HUE,
- NOLINE_PARAMS_TYPE_SHARPNESS,
- NOLINE_PARAMS_TYPE_VOLUME,
- NOLINE_PARAMS_TYPE_BACKLIGHT,
- NOLINE_PARAMS_TYPE_MAX,
+ NOLINE_PARAMS_TYPE_BRIGHTNESS,
+ NOLINE_PARAMS_TYPE_CONTRAST,
+ NOLINE_PARAMS_TYPE_SATURATION,
+ NOLINE_PARAMS_TYPE_HUE,
+ NOLINE_PARAMS_TYPE_SHARPNESS,
+ NOLINE_PARAMS_TYPE_VOLUME,
+ NOLINE_PARAMS_TYPE_BACKLIGHT,
+ NOLINE_PARAMS_TYPE_MAX,
} noline_params_type_t;
typedef struct noline_params_s {
- int osd0;
- int osd25;
- int osd50;
- int osd75;
- int osd100;
+ int osd0;
+ int osd25;
+ int osd50;
+ int osd75;
+ int osd100;
} noline_params_t;
typedef enum vpp_dream_panel_e {
- VPP_DREAM_PANEL_OFF,
- VPP_DREAM_PANEL_LIGHT,
- VPP_DREAM_PANEL_SCENE,
- VPP_DREAM_PANEL_FULL,
- VPP_DREAM_PANEL_DEMO,
- VPP_DREAM_PANEL_MAX,
+ VPP_DREAM_PANEL_OFF,
+ VPP_DREAM_PANEL_LIGHT,
+ VPP_DREAM_PANEL_SCENE,
+ VPP_DREAM_PANEL_FULL,
+ VPP_DREAM_PANEL_DEMO,
+ VPP_DREAM_PANEL_MAX,
} vpp_dream_panel_t;
class CPqData;
-class CVpp
-{
+class CVpp {
public:
- CVpp();
- ~CVpp();
- int Vpp_Init ( void );
- int Vpp_Uninit ( void );
- CPqData *getPqData();
- int Vpp_ResetLastVppSettingsSourceType ( void );
- int Vpp_SetColorDemoMode ( vpp_color_demomode_t demomode );
- int Vpp_SetBaseColorMode ( vpp_color_basemode_t basemode , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt);
- int Vpp_SetColorTemperatureUser ( vpp_color_temperature_mode_t temp_mode, tv_source_input_type_t source_type );
- int Vpp_SetColorTemperature ( vpp_color_temperature_mode_t Tempmode, tv_source_input_type_t source_type, tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt);
- int Vpp_SetBrightness ( int value, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- int Vpp_SetContrast ( int value, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- int Vpp_SetSaturation ( int value, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- int Vpp_SetHue ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_port_t source_port, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- int Vpp_SetSharpness ( int value, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- int Vpp_SetPQMode ( vpp_picture_mode_t pq_mode, tv_source_input_type_t source_type, tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- int Vpp_SetNoiseReductionMode ( vpp_noise_reduction_mode_t nr_mode, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- int Vpp_SetXVYCCMode ( vpp_xvycc_mode_t xvycc_mode, tv_source_input_type_t source_type, tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- int Vpp_SetMCDIMode ( vpp_mcdi_mode_t mcdi_mode, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt);
- int Vpp_SetZoom ( int value );
- int Vpp_LoadBasicRegs ( tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- int VppRegisterInterface();
- int Tv_RGBGainValueSSMToRisterMapping ( int gainValue );
- int Tv_RGBOffsetValueSSMToRisterMapping ( int gainValue );
- int Tv_SetRGBValue ( vpp_color_temperature_mode_t temp_mode, unsigned char data_buf[] );
- int Tv_GetRGBValue ( vpp_color_temperature_mode_t temp_mode, tcon_rgb_ogo_t *p_rgbogo );
- int Tv_SetColorSpaceMode ( vpp_color_space_type_t colorSpace );
- //int Tv_SetGammaValue(int gammaValue);
- int Tv_GetGammaValue();
- //int Tv_SetColorDemoMode ( vpp_color_demomode_t demomode );
- vpp_color_demomode_t Tv_GetColorDemoMode ( void );
-
- int Tv_SetBaseColorMode ( vpp_color_basemode_t basemode , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt);
- vpp_color_basemode_t Tv_GetBaseColorMode ( void );
- int Tv_SetBaseColorModeWithoutSave ( vpp_color_basemode_t basemode , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt);
- int Tv_SaveBaseColorMode ( vpp_color_basemode_t basemode );
- int Tv_SetColorTemperature ( vpp_color_temperature_mode_t Tempmode, tv_source_input_type_t source_type, int is_save );
- vpp_color_temperature_mode_t Tv_GetColorTemperature ( tv_source_input_type_t source_type );
- int Tv_SetColorTempWithoutSave ( vpp_color_temperature_mode_t Tempmode, tv_source_input_type_t source_type );
- int Tv_SaveColorTemp ( vpp_color_temperature_mode_t Tempmode, tv_source_input_type_t source_type );
- int Tv_SetBrightness ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save );
- int Tv_GetBrightness ( tv_source_input_type_t source_type );
- int Tv_SetContrast ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save );
- int Tv_GetContrast ( tv_source_input_type_t source_type );
- int Tv_SetSaturation ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save );
- int Tv_GetSaturation ( tv_source_input_type_t source_type );
- int Tv_SetHue ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save );
- int Tv_GetHue ( tv_source_input_type_t source_type );
- int Tv_SetSharpness ( int value, tv_source_input_type_t source_type, int is_enable, is_3d_type_t is3d, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, int is_save );
- int Tv_GetSharpness ( tv_source_input_type_t source_type );
- int Tv_SetBacklight ( int value, tv_source_input_type_t source_type, int is_save );
- int Tv_GetBacklight ( tv_source_input_type_t source_type );
- int Tv_SetBacklightWithoutSave ( int value, tv_source_input_type_t source_type );
- int Tv_SaveBacklight ( int value, tv_source_input_type_t source_type );
- int Tv_SetPQMode ( vpp_picture_mode_t pq_mode, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save );
- vpp_picture_mode_t Tv_GetPQMode ( tv_source_input_type_t source_type );
- int Tv_SavePQMode ( vpp_picture_mode_t pq_mode, tv_source_input_type_t source_type );
- int Tv_SetDisplayMode ( vpp_display_mode_t display_mode, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, int is_save );
- vpp_display_mode_t Tv_GetDisplayMode ( tv_source_input_type_t source_type );
- int Tv_SaveNoiseReductionMode ( vpp_noise_reduction_mode_t nr_mode, tv_source_input_type_t source_type );
- int Tv_SetNoiseReductionMode ( vpp_noise_reduction_mode_t nr_mode, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt, int is_save );
- vpp_noise_reduction_mode_t Tv_GetNoiseReductionMode ( tv_source_input_type_t source_type );
- int Tv_SetRGBOGO_PostOffset(int rgb, int offset);
- int Tv_SetRGBOGO_Gain(int rgb, int gain);
- int Tv_GetRGBOGO_PostOffset ( int rgb );
- int Tv_GetRGBOGO_Gain( int rgb );
- int Tv_SetDNLP ( tv_source_input_type_t source_type, tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- int Tv_LoadVppSettings ( tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- //int Tv_SetVppParamDefault(void);
-
-
- int Tv_FactorySetPQMode_Brightness ( int source_type, int pq_mode, int brightness );
- int Tv_FactoryGetPQMode_Brightness ( int source_type, int pq_mode );
- int Tv_FactorySetPQMode_Contrast ( int source_type, int pq_mode, int contrast );
- int Tv_FactoryGetPQMode_Contrast ( int source_type, int pq_mode );
- int Tv_FactorySetPQMode_Saturation ( int source_type, int pq_mode, int saturation );
- int Tv_FactoryGetPQMode_Saturation ( int source_type, int pq_mode );
- int Tv_FactorySetPQMode_Hue ( int source_type, int pq_mode, int hue );
- int Tv_FactoryGetPQMode_Hue ( int source_type, int pq_mode );
- int Tv_FactorySetPQMode_Sharpness ( int source_type, int pq_mode, int sharpness );
- int Tv_FactoryGetPQMode_Sharpness ( int source_type, int pq_mode );
- int Tv_FactorySetColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain );
- int Tv_FactorySaveColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain );
- int Tv_FactoryGetColorTemp_Rgain ( int source_type, int colortemp_mode );
- int Tv_FactorySetColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain );
- int Tv_FactorySaveColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain );
- int Tv_FactoryGetColorTemp_Ggain ( int source_type, int colortemp_mode );
- int Tv_FactorySetColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain );
- int Tv_FactorySaveColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain );
- int Tv_FactoryGetColorTemp_Bgain ( int source_type, int colortemp_mode );
- int Tv_FactorySetColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset );
- int Tv_FactorySaveColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset );
- int Tv_FactoryGetColorTemp_Roffset ( int source_type, int colortemp_mode );
- int Tv_FactorySetColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset );
- int Tv_FactorySaveColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset );
- int Tv_FactoryGetColorTemp_Goffset ( int source_type, int colortemp_mode );
- int Tv_FactorySetColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset );
- int Tv_FactorySaveColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset );
- int Tv_FactoryGetColorTemp_Boffset ( int source_type, int colortemp_mode );
- //int Tv_FactorySaveRGBDatatoAllSrc ( int source_type, int colortemp_mode );
- int Tv_FactoryGetTestPattern ( void );
- int Tv_FactoryResetPQMode ( void );
- int TV_FactoryResetNonlinear ( void );
- int Tv_FactoryResetColorTemp ( void );
- int Tv_FactorySetParamsDefault ( void );
- int Tv_FactorySetDDRSSC ( int step );
- int Tv_FactoryGetDDRSSC();
- int Tv_FactorySetLVDSSSC ( int step );
- int Tv_FactoryGetLVDSSSC();
- int Tv_FactorySetNolineParams ( int type, int source_type, noline_params_t noline_params );
- noline_params_t Tv_FactoryGetNolineParams ( int type, int source_type );
- int Tv_FactorySetOverscan ( int source_type, int fmt, int status_3d, int trans_fmt, tvin_cutwin_t cutwin_t );
- tvin_cutwin_t Tv_FactoryGetOverscan ( int source_type, int fmt, is_3d_type_t is3d, int trans_fmt );
- int Tv_FactorySetBacklightPWM_Frequency(int freq);
- int Tv_FactoryGetBacklightPWM_Frequency ( void );
- int Tv_FactorySetBacklight_Switch_status ( int status );
- int Tv_FactoryGetBacklight_Switch_status ( void );
- int Tv_FactorySetBacklightPWM_Duty ( int duty );
- int Tv_FactoryGetBacklightPWM_Duty ( void );
- int Tv_FactorySetLVDS_ColorDepth ( int depth );
- int Tv_FactoryGetLVDS_ColorDepth ( void );
- int Tv_FactorySetLVDS_ColorDither_status ( int status );
- int Tv_FactoryGetLVDS_ColorDither_status ( void );
- int Tv_FactorySetLVDS_Mapping_status ( int status );
- int Tv_FactoryGetLVDS_Mapping_status ( void );
- int Tv_FactorySetLVDS_PortSwap_status ( int status );
- int Tv_FactoryGetLVDS_PortSwap_status ( void );
-
- int VPPSSMRestoreDefault();
- int VPPSSMFacRestoreDefault();
-
-
- int Tv_GetHistogram_AVE();
- int Tv_SetDnlp_OFF();
- int Tv_SetDnlp_ON ( void );
- int Tv_GetDnlp_Status();
-
- int GetColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params );
- int ReadColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params );
- int SetColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params );
- int SaveColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params );
- unsigned short CalColorTemperatureParamsChecksum ( void );
- int SetColorTempParamsChecksum ( void );
- unsigned short GetColorTempParamsChecksum ( void );
- int CheckTempDataLable ( void );
- int SetTempDataLable ( void );
- int CheckColorTemperatureParams ( void );
- int RestoeColorTemperatureParamsFromDB ( tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt );
- int CheckColorTemperatureParamAlldata ( tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt );
- void Tvin_SetVideoScreenColorType ( int type );
- int Vpp_GetVppConfig();
- int Vpp_GetPQModeValue ( tv_source_input_type_t, vpp_picture_mode_t, vpp_pq_para_t * );
- int Vpp_SetPQParams ( tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t pq_para , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt);
-
- int Vpp_LoadGammaDefault ( tv_source_input_type_t, tvin_sig_fmt_t );
- int Vpp_LoadGammaSpecial ( int );
- int Vpp_LoadGamma ( tv_source_input_type_t, tvin_sig_fmt_t );
- int Tv_FactoryResetNonlinear();
- tvin_cutwin_t Tv_GetOverscan ( tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- static is_3d_type_t Check2Dor3D ( is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
- //api
- int VPP_SetVEBlackExtension ( const struct ve_bext_s *pBExt );
- int VPP_SetVideoCrop ( int Voffset0, int Hoffset0, int Voffset1, int Hoffset1 );
- int VPP_SetNonLinearFactor ( int value );
- int VPP_SetGrayPattern(int value);
- int VPP_GetGrayPattern();
+ CVpp();
+ ~CVpp();
+ int Vpp_Init ( void );
+ int Vpp_Uninit ( void );
+ CPqData *getPqData();
+ int Vpp_ResetLastVppSettingsSourceType ( void );
+ int Vpp_SetColorDemoMode ( vpp_color_demomode_t demomode );
+ int Vpp_SetBaseColorMode ( vpp_color_basemode_t basemode , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt);
+ int Vpp_SetColorTemperatureUser ( vpp_color_temperature_mode_t temp_mode, tv_source_input_type_t source_type );
+ int Vpp_SetColorTemperature ( vpp_color_temperature_mode_t Tempmode, tv_source_input_type_t source_type, tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt);
+ int Vpp_SetBrightness ( int value, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ int Vpp_SetContrast ( int value, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ int Vpp_SetSaturation ( int value, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ int Vpp_SetHue ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_port_t source_port, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ int Vpp_SetSharpness ( int value, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ int Vpp_SetPQMode ( vpp_picture_mode_t pq_mode, tv_source_input_type_t source_type, tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ int Vpp_SetNoiseReductionMode ( vpp_noise_reduction_mode_t nr_mode, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ int Vpp_SetXVYCCMode ( vpp_xvycc_mode_t xvycc_mode, tv_source_input_type_t source_type, tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ int Vpp_SetMCDIMode ( vpp_mcdi_mode_t mcdi_mode, tv_source_input_type_t source_type , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt);
+ int Vpp_SetZoom ( int value );
+ int Vpp_LoadBasicRegs ( tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ int VppRegisterInterface();
+ int Tv_RGBGainValueSSMToRisterMapping ( int gainValue );
+ int Tv_RGBOffsetValueSSMToRisterMapping ( int gainValue );
+ int Tv_SetRGBValue ( vpp_color_temperature_mode_t temp_mode, unsigned char data_buf[] );
+ int Tv_GetRGBValue ( vpp_color_temperature_mode_t temp_mode, tcon_rgb_ogo_t *p_rgbogo );
+ int Tv_SetColorSpaceMode ( vpp_color_space_type_t colorSpace );
+ //int Tv_SetGammaValue(int gammaValue);
+ int Tv_GetGammaValue();
+ //int Tv_SetColorDemoMode ( vpp_color_demomode_t demomode );
+ vpp_color_demomode_t Tv_GetColorDemoMode ( void );
+
+ int Tv_SetBaseColorMode ( vpp_color_basemode_t basemode , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt);
+ vpp_color_basemode_t Tv_GetBaseColorMode ( void );
+ int Tv_SetBaseColorModeWithoutSave ( vpp_color_basemode_t basemode , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt);
+ int Tv_SaveBaseColorMode ( vpp_color_basemode_t basemode );
+ int Tv_SetColorTemperature ( vpp_color_temperature_mode_t Tempmode, tv_source_input_type_t source_type, int is_save );
+ vpp_color_temperature_mode_t Tv_GetColorTemperature ( tv_source_input_type_t source_type );
+ int Tv_SetColorTempWithoutSave ( vpp_color_temperature_mode_t Tempmode, tv_source_input_type_t source_type );
+ int Tv_SaveColorTemp ( vpp_color_temperature_mode_t Tempmode, tv_source_input_type_t source_type );
+ int Tv_SetBrightness ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save );
+ int Tv_GetBrightness ( tv_source_input_type_t source_type );
+ int Tv_SetContrast ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save );
+ int Tv_GetContrast ( tv_source_input_type_t source_type );
+ int Tv_SetSaturation ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save );
+ int Tv_GetSaturation ( tv_source_input_type_t source_type );
+ int Tv_SetHue ( int value, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save );
+ int Tv_GetHue ( tv_source_input_type_t source_type );
+ int Tv_SetSharpness ( int value, tv_source_input_type_t source_type, int is_enable, is_3d_type_t is3d, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, int is_save );
+ int Tv_GetSharpness ( tv_source_input_type_t source_type );
+ int Tv_SetBacklight ( int value, tv_source_input_type_t source_type, int is_save );
+ int Tv_GetBacklight ( tv_source_input_type_t source_type );
+ int Tv_SetBacklightWithoutSave ( int value, tv_source_input_type_t source_type );
+ int Tv_SaveBacklight ( int value, tv_source_input_type_t source_type );
+ int Tv_SetPQMode ( vpp_picture_mode_t pq_mode, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt, is_3d_type_t is3d, int is_save );
+ vpp_picture_mode_t Tv_GetPQMode ( tv_source_input_type_t source_type );
+ int Tv_SavePQMode ( vpp_picture_mode_t pq_mode, tv_source_input_type_t source_type );
+ int Tv_SetDisplayMode ( vpp_display_mode_t display_mode, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, int is_save );
+ vpp_display_mode_t Tv_GetDisplayMode ( tv_source_input_type_t source_type );
+ int Tv_SaveNoiseReductionMode ( vpp_noise_reduction_mode_t nr_mode, tv_source_input_type_t source_type );
+ int Tv_SetNoiseReductionMode ( vpp_noise_reduction_mode_t nr_mode, tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt, int is_save );
+ vpp_noise_reduction_mode_t Tv_GetNoiseReductionMode ( tv_source_input_type_t source_type );
+ int Tv_SetRGBOGO_PostOffset(int rgb, int offset);
+ int Tv_SetRGBOGO_Gain(int rgb, int gain);
+ int Tv_GetRGBOGO_PostOffset ( int rgb );
+ int Tv_GetRGBOGO_Gain( int rgb );
+ int Tv_SetDNLP ( tv_source_input_type_t source_type, tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ int Tv_LoadVppSettings ( tv_source_input_type_t source_type, tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ //int Tv_SetVppParamDefault(void);
+
+
+ int Tv_FactorySetPQMode_Brightness ( int source_type, int pq_mode, int brightness );
+ int Tv_FactoryGetPQMode_Brightness ( int source_type, int pq_mode );
+ int Tv_FactorySetPQMode_Contrast ( int source_type, int pq_mode, int contrast );
+ int Tv_FactoryGetPQMode_Contrast ( int source_type, int pq_mode );
+ int Tv_FactorySetPQMode_Saturation ( int source_type, int pq_mode, int saturation );
+ int Tv_FactoryGetPQMode_Saturation ( int source_type, int pq_mode );
+ int Tv_FactorySetPQMode_Hue ( int source_type, int pq_mode, int hue );
+ int Tv_FactoryGetPQMode_Hue ( int source_type, int pq_mode );
+ int Tv_FactorySetPQMode_Sharpness ( int source_type, int pq_mode, int sharpness );
+ int Tv_FactoryGetPQMode_Sharpness ( int source_type, int pq_mode );
+ int Tv_FactorySetColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain );
+ int Tv_FactorySaveColorTemp_Rgain ( int source_type, int colortemp_mode, int rgain );
+ int Tv_FactoryGetColorTemp_Rgain ( int source_type, int colortemp_mode );
+ int Tv_FactorySetColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain );
+ int Tv_FactorySaveColorTemp_Ggain ( int source_type, int colortemp_mode, int ggain );
+ int Tv_FactoryGetColorTemp_Ggain ( int source_type, int colortemp_mode );
+ int Tv_FactorySetColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain );
+ int Tv_FactorySaveColorTemp_Bgain ( int source_type, int colortemp_mode, int bgain );
+ int Tv_FactoryGetColorTemp_Bgain ( int source_type, int colortemp_mode );
+ int Tv_FactorySetColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset );
+ int Tv_FactorySaveColorTemp_Roffset ( int source_type, int colortemp_mode, int roffset );
+ int Tv_FactoryGetColorTemp_Roffset ( int source_type, int colortemp_mode );
+ int Tv_FactorySetColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset );
+ int Tv_FactorySaveColorTemp_Goffset ( int source_type, int colortemp_mode, int goffset );
+ int Tv_FactoryGetColorTemp_Goffset ( int source_type, int colortemp_mode );
+ int Tv_FactorySetColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset );
+ int Tv_FactorySaveColorTemp_Boffset ( int source_type, int colortemp_mode, int boffset );
+ int Tv_FactoryGetColorTemp_Boffset ( int source_type, int colortemp_mode );
+ //int Tv_FactorySaveRGBDatatoAllSrc ( int source_type, int colortemp_mode );
+ int Tv_FactoryGetTestPattern ( void );
+ int Tv_FactoryResetPQMode ( void );
+ int TV_FactoryResetNonlinear ( void );
+ int Tv_FactoryResetColorTemp ( void );
+ int Tv_FactorySetParamsDefault ( void );
+ int Tv_FactorySetDDRSSC ( int step );
+ int Tv_FactoryGetDDRSSC();
+ int Tv_FactorySetLVDSSSC ( int step );
+ int Tv_FactoryGetLVDSSSC();
+ int Tv_FactorySetNolineParams ( int type, int source_type, noline_params_t noline_params );
+ noline_params_t Tv_FactoryGetNolineParams ( int type, int source_type );
+ int Tv_FactorySetOverscan ( int source_type, int fmt, int status_3d, int trans_fmt, tvin_cutwin_t cutwin_t );
+ tvin_cutwin_t Tv_FactoryGetOverscan ( int source_type, int fmt, is_3d_type_t is3d, int trans_fmt );
+ int Tv_FactorySetBacklightPWM_Frequency(int freq);
+ int Tv_FactoryGetBacklightPWM_Frequency ( void );
+ int Tv_FactorySetBacklight_Switch_status ( int status );
+ int Tv_FactoryGetBacklight_Switch_status ( void );
+ int Tv_FactorySetBacklightPWM_Duty ( int duty );
+ int Tv_FactoryGetBacklightPWM_Duty ( void );
+ int Tv_FactorySetLVDS_ColorDepth ( int depth );
+ int Tv_FactoryGetLVDS_ColorDepth ( void );
+ int Tv_FactorySetLVDS_ColorDither_status ( int status );
+ int Tv_FactoryGetLVDS_ColorDither_status ( void );
+ int Tv_FactorySetLVDS_Mapping_status ( int status );
+ int Tv_FactoryGetLVDS_Mapping_status ( void );
+ int Tv_FactorySetLVDS_PortSwap_status ( int status );
+ int Tv_FactoryGetLVDS_PortSwap_status ( void );
+
+ int VPPSSMRestoreDefault();
+ int VPPSSMFacRestoreDefault();
+
+
+ int Tv_GetHistogram_AVE();
+ int Tv_SetDnlp_OFF();
+ int Tv_SetDnlp_ON ( void );
+ int Tv_GetDnlp_Status();
+
+ int GetColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params );
+ int ReadColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t *params );
+ int SetColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params );
+ int SaveColorTemperatureParams ( vpp_color_temperature_mode_t Tempmode, tcon_rgb_ogo_t params );
+ unsigned short CalColorTemperatureParamsChecksum ( void );
+ int SetColorTempParamsChecksum ( void );
+ unsigned short GetColorTempParamsChecksum ( void );
+ int CheckTempDataLable ( void );
+ int SetTempDataLable ( void );
+ int CheckColorTemperatureParams ( void );
+ int RestoeColorTemperatureParamsFromDB ( tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt );
+ int CheckColorTemperatureParamAlldata ( tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt );
+ void Tvin_SetVideoScreenColorType ( int type );
+ int Vpp_GetVppConfig();
+ int Vpp_GetPQModeValue ( tv_source_input_type_t, vpp_picture_mode_t, vpp_pq_para_t * );
+ int Vpp_SetPQParams ( tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t pq_para , tvin_port_t source_port , tvin_sig_fmt_t sig_fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt);
+
+ int Vpp_LoadGammaDefault ( tv_source_input_type_t, tvin_sig_fmt_t );
+ int Vpp_LoadGammaSpecial ( int );
+ int Vpp_LoadGamma ( tv_source_input_type_t, tvin_sig_fmt_t );
+ int Tv_FactoryResetNonlinear();
+ tvin_cutwin_t Tv_GetOverscan ( tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ static is_3d_type_t Check2Dor3D ( is_3d_type_t is3d, tvin_trans_fmt_t trans_fmt );
+ //api
+ int VPP_SetVEBlackExtension ( const struct ve_bext_s *pBExt );
+ int VPP_SetVideoCrop ( int Voffset0, int Hoffset0, int Voffset1, int Hoffset1 );
+ int VPP_SetNonLinearFactor ( int value );
+ int VPP_SetGrayPattern(int value);
+ int VPP_GetGrayPattern();
private:
- //
- int VPP_OpenModule ( void );
- int VPP_CloseModule ( void );
- int VPP_SetVideoBrightness ( int value );
- int VPP_SetVideoContrast ( int value );
- int VPP_SetVideoSaturationHue ( int satVal, int hueVal );
- int VPP_SetCMRegisterMap ( struct cm_regmap_s *pRegMap );
- int Vpp_LoadRegs ( am_regs_t regs );
- int VPP_SetRGBOGO ( const struct tcon_rgb_ogo_s *rgbogo );
- int VPP_GetRGBOGO ( const struct tcon_rgb_ogo_s *rgbogo );
- int VPP_SetGammaOnOff ( unsigned char onoff );
- int VPP_SetGammaTbl_R ( unsigned short red[256] );
- int VPP_SetGammaTbl_G ( unsigned short green[256] );
- int VPP_SetGammaTbl_B ( unsigned short blue[256] );
- void video_set_saturation_hue ( signed char saturation, signed char hue, signed long *mab );
- void video_get_saturation_hue ( signed char *sat, signed char *hue, signed long *mab );
- int VPP_SetBackLightLevel ( int value );
- int VPP_SetVEDNLP ( const struct ve_dnlp_s *pDNLP );
- int VPP_SetVENewDNLP ( const ve_dnlp_table_t *pDNLP );
- int Vpp_GetAVGHistogram ( struct ve_hist_s *hist );
- int Vpp_SetDnlpOff ( void );
- int Vpp_SetDnlpOn ( void );
- int VPP_SetVESharpness ( const ve_hsvs_s * );
- int VPP_SetVEChromaCoring ( const ve_ccor_s * );
- int VPP_SetVEBlueEnh ( const ve_benh_s * );
- int VPP_SetVEDemo ( const ve_demo_s * );
- int VPP_SetVERegisterMap ( const ve_regmap_s * );
- int VPP_SetVEDebug ( const long long unsigned int * );
- int VPP_SetCMRegion ( const cm_region_s * );
- int VPP_SetCMTopLayer ( const cm_top_s * );
- int VPP_SetCMDemo ( const cm_demo_s * );
-
- int VPP_DeviceIOCtl ( int request, ... );
- int VPP3D_DeviceIOCtl ( int, ... );
- int VPP_SetCMDebug ( const long long unsigned int * );
- int VPP_SetAVSyncEnable ( unsigned int );
- int VPP_SetVideoNoiseReduction ( int );
- int VPP_SetVideoSaturation ( int );
- int VPP_SetVideoHue ( int );
- int VPP_SetDeinterlaceMode ( int );
-
-
- tv_source_input_type_t vpp_setting_last_source_type;
- tvin_sig_fmt_t vpp_setting_last_sig_fmt;
- tvin_trans_fmt_t vpp_setting_last_trans_fmt;
- //cfg
- bool mbVppCfg_backlight_reverse;
- bool mbVppCfg_backlight_init;
- bool mbVppCfg_pqmode_without_hue;
- bool mbVppCfg_hue_reverse;
- bool mbVppCfg_gamma_onoff;
- bool mbVppCfg_whitebalance_sameparam;
- bool mbVppCfg_new_cm;
- bool mbVppCfg_new_nr;
- bool mbVppCfg_panorama_switch;
- bool mbVppCfg_pqmode_depend_bklight;
- bool mbVppCfg_colortemp_by_source;
-
- CPqData *mpPqData;
-
- int vpp_amvideo_fd;
- int vpp_amvideo_3d_fd;
+ //
+ int VPP_OpenModule ( void );
+ int VPP_CloseModule ( void );
+ int VPP_SetVideoBrightness ( int value );
+ int VPP_SetVideoContrast ( int value );
+ int VPP_SetVideoSaturationHue ( int satVal, int hueVal );
+ int VPP_SetCMRegisterMap ( struct cm_regmap_s *pRegMap );
+ int Vpp_LoadRegs ( am_regs_t regs );
+ int VPP_SetRGBOGO ( const struct tcon_rgb_ogo_s *rgbogo );
+ int VPP_GetRGBOGO ( const struct tcon_rgb_ogo_s *rgbogo );
+ int VPP_SetGammaOnOff ( unsigned char onoff );
+ int VPP_SetGammaTbl_R ( unsigned short red[256] );
+ int VPP_SetGammaTbl_G ( unsigned short green[256] );
+ int VPP_SetGammaTbl_B ( unsigned short blue[256] );
+ void video_set_saturation_hue ( signed char saturation, signed char hue, signed long *mab );
+ void video_get_saturation_hue ( signed char *sat, signed char *hue, signed long *mab );
+ int VPP_SetBackLightLevel ( int value );
+ int VPP_SetVEDNLP ( const struct ve_dnlp_s *pDNLP );
+ int VPP_SetVENewDNLP ( const ve_dnlp_table_t *pDNLP );
+ int Vpp_GetAVGHistogram ( struct ve_hist_s *hist );
+ int Vpp_SetDnlpOff ( void );
+ int Vpp_SetDnlpOn ( void );
+ int VPP_SetVESharpness ( const ve_hsvs_s * );
+ int VPP_SetVEChromaCoring ( const ve_ccor_s * );
+ int VPP_SetVEBlueEnh ( const ve_benh_s * );
+ int VPP_SetVEDemo ( const ve_demo_s * );
+ int VPP_SetVERegisterMap ( const ve_regmap_s * );
+ int VPP_SetVEDebug ( const long long unsigned int * );
+ int VPP_SetCMRegion ( const cm_region_s * );
+ int VPP_SetCMTopLayer ( const cm_top_s * );
+ int VPP_SetCMDemo ( const cm_demo_s * );
+
+ int VPP_DeviceIOCtl ( int request, ... );
+ int VPP3D_DeviceIOCtl ( int, ... );
+ int VPP_SetCMDebug ( const long long unsigned int * );
+ int VPP_SetAVSyncEnable ( unsigned int );
+ int VPP_SetVideoNoiseReduction ( int );
+ int VPP_SetVideoSaturation ( int );
+ int VPP_SetVideoHue ( int );
+ int VPP_SetDeinterlaceMode ( int );
+
+
+ tv_source_input_type_t vpp_setting_last_source_type;
+ tvin_sig_fmt_t vpp_setting_last_sig_fmt;
+ tvin_trans_fmt_t vpp_setting_last_trans_fmt;
+ //cfg
+ bool mbVppCfg_backlight_reverse;
+ bool mbVppCfg_backlight_init;
+ bool mbVppCfg_pqmode_without_hue;
+ bool mbVppCfg_hue_reverse;
+ bool mbVppCfg_gamma_onoff;
+ bool mbVppCfg_whitebalance_sameparam;
+ bool mbVppCfg_new_cm;
+ bool mbVppCfg_new_nr;
+ bool mbVppCfg_panorama_switch;
+ bool mbVppCfg_pqmode_depend_bklight;
+ bool mbVppCfg_colortemp_by_source;
+
+ CPqData *mpPqData;
+
+ int vpp_amvideo_fd;
+ int vpp_amvideo_3d_fd;
};
#endif
diff --git a/tvapi/libtv/vpp/pqdata.cpp b/tvapi/libtv/vpp/pqdata.cpp
index a005245..c5dc6b5 100644
--- a/tvapi/libtv/vpp/pqdata.cpp
+++ b/tvapi/libtv/vpp/pqdata.cpp
@@ -2,142 +2,142 @@
//vpp
unsigned long DemoColorYOffRegMap[CM_REG_NUM] = {
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x80ff807f, 0x00800800, 0x00001000, 0x1077f010,
- 0xf077ff10, 0x7777ff10, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x80ff807f, 0x00800800, 0x00001000, 0x1077f010,
+ 0xf077ff10, 0x7777ff10, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
};
//vpp
unsigned long DemoColorCOffRegMap[CM_REG_NUM] = {
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x80ff807f, 0x00802800,
- 0x00001000, 0x1077f010, 0xf077ff10, 0x7777ff10, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x80ff807f, 0x00802800,
+ 0x00001000, 0x1077f010, 0xf077ff10, 0x7777ff10, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
};
unsigned long DemoColorGOffRegMap[CM_REG_NUM] = {
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x80ff807f, 0x00801800, 0x00001000,
- 0x1077f010, 0xf077ff10, 0x7777ff10, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x80ff807f, 0x00801800, 0x00001000,
+ 0x1077f010, 0xf077ff10, 0x7777ff10, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
};
unsigned long DemoColorMOffRegMap[CM_REG_NUM] = {
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x80ff807f, 0x00804800, 0x00001000, 0x1077f010, 0xf077ff10,
- 0x7777ff10, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x80ff807f, 0x00804800, 0x00001000, 0x1077f010, 0xf077ff10,
+ 0x7777ff10, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
};
unsigned long DemoColorROffRegMap[CM_REG_NUM] = {
- 0x80ff807f, 0x00805800, 0x00001000, 0x1077f010, 0xf077ff10,
- 0x7777ff10, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
+ 0x80ff807f, 0x00805800, 0x00001000, 0x1077f010, 0xf077ff10,
+ 0x7777ff10, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
};
unsigned long DemoColorBOffRegMap[CM_REG_NUM] = {
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80ff807f,
- 0x00803800, 0x00001000, 0x1077f010, 0xf077ff10, 0x7777ff10,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80ff807f,
+ 0x00803800, 0x00001000, 0x1077f010, 0xf077ff10, 0x7777ff10,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000
};
unsigned long DemoColorRGBOffRegMap[CM_REG_NUM] = {
- 0x80ff807f, 0x00805800, 0x00001000, 0x1077f010, 0xf077ff10,
- 0x7777ff10, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x80ff807f, 0x00801800, 0x00001000,
- 0x1077f010, 0xf077ff10, 0x7777ff10, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80ff807f,
- 0x00803800, 0x00001000, 0x1077f010, 0xf077ff10, 0x7777ff10,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
+ 0x80ff807f, 0x00805800, 0x00001000, 0x1077f010, 0xf077ff10,
+ 0x7777ff10, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x80ff807f, 0x00801800, 0x00001000,
+ 0x1077f010, 0xf077ff10, 0x7777ff10, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80ff807f,
+ 0x00803800, 0x00001000, 0x1077f010, 0xf077ff10, 0x7777ff10,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
};
unsigned long DemoColorYMCOffRegMap[CM_REG_NUM] = {
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x80ff807f, 0x00800800, 0x00001000, 0x1077f010,
- 0xf077ff10, 0x7777ff10, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x80ff807f, 0x00802800,
- 0x00001000, 0x1077f010, 0xf077ff10, 0x7777ff10, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x80ff807f, 0x00804800, 0x00001000, 0x1077f010, 0xf077ff10,
- 0x7777ff10, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x80ff807f, 0x00800800, 0x00001000, 0x1077f010,
+ 0xf077ff10, 0x7777ff10, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x80ff807f, 0x00802800,
+ 0x00001000, 0x1077f010, 0xf077ff10, 0x7777ff10, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x80ff807f, 0x00804800, 0x00001000, 0x1077f010, 0xf077ff10,
+ 0x7777ff10, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
};
unsigned long DemoColorALLOffRegMap[CM_REG_NUM] = {
- 0x81ff8080, 0x00805800, 0x00001000, 0x0077ff00, 0xff77ff00,
- 0x7777ff00, 0x80ff8080, 0x00800800, 0x00001000, 0x0077ff00,
- 0xff77ff00, 0x7777ff00, 0x80ff8080, 0x00a01800, 0x00000ccd,
- 0x0077ff00, 0xff77ff00, 0x7777ff00, 0x80ff8080, 0x00ff2800,
- 0x00000800, 0x0077ff00, 0xff77ff00, 0x7777ff00, 0x80ff8080,
- 0x00ff3c00, 0x00000800, 0x0077ff00, 0xff77ff00, 0x7777ff00,
- 0x80ff8080, 0x00ff4c00, 0x00000800, 0x0077ff00, 0x00000000,
- 0x7777ff00, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0xff77ff00, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
+ 0x81ff8080, 0x00805800, 0x00001000, 0x0077ff00, 0xff77ff00,
+ 0x7777ff00, 0x80ff8080, 0x00800800, 0x00001000, 0x0077ff00,
+ 0xff77ff00, 0x7777ff00, 0x80ff8080, 0x00a01800, 0x00000ccd,
+ 0x0077ff00, 0xff77ff00, 0x7777ff00, 0x80ff8080, 0x00ff2800,
+ 0x00000800, 0x0077ff00, 0xff77ff00, 0x7777ff00, 0x80ff8080,
+ 0x00ff3c00, 0x00000800, 0x0077ff00, 0xff77ff00, 0x7777ff00,
+ 0x80ff8080, 0x00ff4c00, 0x00000800, 0x0077ff00, 0x00000000,
+ 0x7777ff00, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0xff77ff00, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x80700124, 0x00000000,
};
unsigned long DemoColorSplit4_3RegMap[CM_REG_NUM] = {
- 0x8A58821E, 0x00525911, 0x000018FA, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8A3F8A14, 0x002803BB, 0x00003333, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8A6C8A24, 0x00130911, 0x00006BCA, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8AA48A50, 0x00440BBB, 0x00001E1E, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8ACC8221, 0x00AA1488, 0x00000C0C, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8AF48A24, 0x00632A22, 0x000014B0, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8AFF8A4C, 0x008536EE, 0x00000F66, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8AC68244, 0x00854800, 0x00000F66, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8492D024, 0x81000000
+ 0x8A58821E, 0x00525911, 0x000018FA, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8A3F8A14, 0x002803BB, 0x00003333, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8A6C8A24, 0x00130911, 0x00006BCA, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8AA48A50, 0x00440BBB, 0x00001E1E, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8ACC8221, 0x00AA1488, 0x00000C0C, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8AF48A24, 0x00632A22, 0x000014B0, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8AFF8A4C, 0x008536EE, 0x00000F66, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8AC68244, 0x00854800, 0x00000F66, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8492D024, 0x81000000
};
unsigned long DemoColorSplitRegMap[CM_REG_NUM] = {
- 0x8A58821E, 0x00525911, 0x000018FA, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8A3F8A14, 0x002803BB, 0x00003333, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8A6C8A24, 0x00130911, 0x00006BCA, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8AA48A50, 0x00440BBB, 0x00001E1E, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8ACC8221, 0x00AA1488, 0x00000C0C, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8AF48A24, 0x00632A22, 0x000014B0, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8AFF8A4C, 0x008536EE, 0x00000F66, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8AC68244, 0x00854800, 0x00000F66, 0x1033E010, 0xE033F50A, 0x3333E010,
- 0x8493C024, 0x81000000
+ 0x8A58821E, 0x00525911, 0x000018FA, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8A3F8A14, 0x002803BB, 0x00003333, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8A6C8A24, 0x00130911, 0x00006BCA, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8AA48A50, 0x00440BBB, 0x00001E1E, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8ACC8221, 0x00AA1488, 0x00000C0C, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8AF48A24, 0x00632A22, 0x000014B0, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8AFF8A4C, 0x008536EE, 0x00000F66, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8AC68244, 0x00854800, 0x00000F66, 0x1033E010, 0xE033F50A, 0x3333E010,
+ 0x8493C024, 0x81000000
};
diff --git a/tvapi/tvtests/Android.mk b/tvapi/tvtests/Android.mk
index 649f08c..b9e0039 100644
--- a/tvapi/tvtests/Android.mk
+++ b/tvapi/tvtests/Android.mk
@@ -1,49 +1,49 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- android_tvtest.cpp
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libutils \
- libbinder \
- libtvbinder \
- libnativehelper \
- libandroid_runtime \
- liblog
-
-LOCAL_C_INCLUDES += \
- bionic/libc/include \
- $(LOCAL_PATH)/../ \
- $(LOCAL_PATH)/../android
-
-LOCAL_MODULE:= tvtest
-
-include $(BUILD_EXECUTABLE)
-
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- comm_test.cpp
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libutils \
- libbinder \
- libtvbinder \
- libnativehelper \
- libandroid_runtime \
- liblog \
- libtv
-
-LOCAL_C_INCLUDES += \
- bionic/libc/include \
- $(LOCAL_PATH)/../ \
- $(LOCAL_PATH)/../libtv\
- $(LOCAL_PATH)/../android
-
-LOCAL_MODULE:= comm_test
-
-include $(BUILD_EXECUTABLE)
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES:= \
+ android_tvtest.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+ libcutils \
+ libutils \
+ libbinder \
+ libtvbinder \
+ libnativehelper \
+ libandroid_runtime \
+ liblog
+
+LOCAL_C_INCLUDES += \
+ bionic/libc/include \
+ $(LOCAL_PATH)/../ \
+ $(LOCAL_PATH)/../android
+
+LOCAL_MODULE:= tvtest
+
+include $(BUILD_EXECUTABLE)
+
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES:= \
+ comm_test.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+ libcutils \
+ libutils \
+ libbinder \
+ libtvbinder \
+ libnativehelper \
+ libandroid_runtime \
+ liblog \
+ libtv
+
+LOCAL_C_INCLUDES += \
+ bionic/libc/include \
+ $(LOCAL_PATH)/../ \
+ $(LOCAL_PATH)/../libtv\
+ $(LOCAL_PATH)/../android
+
+LOCAL_MODULE:= comm_test
+
+include $(BUILD_EXECUTABLE)
diff --git a/tvapi/tvtests/android_tvtest.cpp b/tvapi/tvtests/android_tvtest.cpp
index 6a6d8e2..2a25185 100644
--- a/tvapi/tvtests/android_tvtest.cpp
+++ b/tvapi/tvtests/android_tvtest.cpp
@@ -10,24 +10,24 @@ using namespace android;
void usage(char *processname)
{
- fprintf(stderr, "Usage: %s <cmd num> [arg1]... [argn]\n", processname);
- return;
+ fprintf(stderr, "Usage: %s <cmd num> [arg1]... [argn]\n", processname);
+ return;
}
int main(int argc, char **argv)
{
- if (argc < 2)
- usage(argv[0]);
- sp<Tv> tv = Tv::connect();
- int cmd = atoi(argv[1]);
- int arg1 = atoi(argv[2]);
- //send cmd
- Parcel p, r;
- p.writeInt32(cmd);
- p.writeInt32(arg1);
- tv->processCmd(p, &r);
- //exit
- tv.clear();
- return 0;
+ if(argc < 2)
+ usage(argv[0]);
+ sp<Tv> tv = Tv::connect();
+ int cmd = atoi(argv[1]);
+ int arg1 = atoi(argv[2]);
+ //send cmd
+ Parcel p, r;
+ p.writeInt32(cmd);
+ p.writeInt32(arg1);
+ tv->processCmd(p, &r);
+ //exit
+ tv.clear();
+ return 0;
}
diff --git a/tvapi/tvtests/comm_test.cpp b/tvapi/tvtests/comm_test.cpp
index c719cc1..79782ff 100644
--- a/tvapi/tvtests/comm_test.cpp
+++ b/tvapi/tvtests/comm_test.cpp
@@ -3,31 +3,31 @@
void usage(char *processname)
{
- fprintf(stderr, "Usage: %s <cmd num> [arg1]... [argn]\n", processname);
- return;
+ fprintf(stderr, "Usage: %s <cmd num> [arg1]... [argn]\n", processname);
+ return;
}
int main(int argc, char **argv)
{
- int cmd, go = 1;
- LOGD("---------------0------------------------");
- CFbcCommunication fbc;
- LOGD("---------------1-------------------------");
- fbc.run();
- LOGD("------------------2----------------------");
+ int cmd, go = 1;
+ LOGD("---------------0------------------------");
+ CFbcCommunication fbc;
+ LOGD("---------------1-------------------------");
+ fbc.run();
+ LOGD("------------------2----------------------");
- while (go) {
- scanf("%d", &cmd);
- switch (cmd) {
- case 1:
- go = 0;
- fbc.closeAll();
- break;
- case 2:
- break;
- default:
- break;
- }
- }
+ while(go) {
+ scanf("%d", &cmd);
+ switch(cmd) {
+ case 1:
+ go = 0;
+ fbc.closeAll();
+ break;
+ case 2:
+ break;
+ default:
+ break;
+ }
+ }
}
diff --git a/tvapi/tvtests/ssm_test.cpp b/tvapi/tvtests/ssm_test.cpp
index 5ed4110..44b0aea 100644
--- a/tvapi/tvtests/ssm_test.cpp
+++ b/tvapi/tvtests/ssm_test.cpp
@@ -1,210 +1,210 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <android/log.h>
-
-#include "ssm_api.h"
-
-#define LOG_TAG "ssm_test"
-#include "CTvLog.h"
-
-// The follow is R/W test struct declare.
-// The size of it is 11 when it aligned with 1 Byte
-// and is 16 when it aligned with 4 Bytes.
-// You should use the 1 Byte aligned mode when R/W ssm by using struct.
-
-#if 1 // memory aligned with 1 Bytes
-typedef struct tagS_TEST_STRUCT {
- char tmp_ch0;
- char tmp_ch1;
- int tmp_val0;
- unsigned char tmp_ch2;
- unsigned char tmp_ch3;
- unsigned char tmp_ch4;
- short tmp_short0;
-} __attribute__((packed)) S_TEST_STRUCT;
-#else // memory aligned with 4 Bytes
-typedef struct tagS_TEST_STRUCT {
- char tmp_ch0;
- char tmp_ch1;
- int tmp_val0;
- unsigned char tmp_ch2;
- unsigned char tmp_ch3;
- unsigned char tmp_ch4;
- short tmp_short0;
-} S_TEST_STRUCT;
-#endif
-
-static void TestRWOneByte(int tmp_rw_offset, int tmp_w_val, unsigned char tmp_w_ch);
-static void TestRWNBytes(int tmp_rw_offset);
-static void TestRWOneStruct(int tmp_rw_offset);
-
-int main()
-{
- TestRWOneByte(0, 1, -1);
- TestRWOneByte(1, 2, -2);
- TestRWOneByte(30, 3, -3);
- TestRWOneByte(31, -1, 1);
- TestRWOneByte(32, -2, 2);
- TestRWOneByte(33, -3, 3);
-
- TestRWNBytes(31);
-
- TestRWOneStruct(0);
-}
-
-static void TestRWOneByte(int tmp_rw_offset, int tmp_w_val, unsigned char tmp_w_ch)
-{
- int tmp_r_val = 0;
- unsigned char tmp_r_ch = 0;
-
- LOGD("\n\n");
- LOGD("**************Test R/W One Byte **************\n\n");
-
- LOGD("tmp_rw_offset = %d.\n", tmp_rw_offset);
-
- SSMWriteOneByte(tmp_rw_offset, tmp_w_ch);
- SSMReadOneByte(tmp_rw_offset, &tmp_r_ch);
- LOGD("tmp_w_ch = %d, tmp_r_ch = %d.\n", tmp_w_ch, tmp_r_ch);
-
- SSMWriteOneByte(tmp_rw_offset, tmp_w_val);
- SSMReadOneByte(tmp_rw_offset, &tmp_r_val);
- LOGD("tmp_w_val = %d, tmp_r_val = %d.\n", tmp_w_val, tmp_r_val);
-}
-
-static void TestRWNBytes(int tmp_rw_offset)
-{
- int i = 0, tmp_op_buf_size = 0;
- int device_size = 0, tmp_w_page_size = 0, tmp_r_page_size = 0;
- int *tmp_op_int_w_buf = NULL, *tmp_op_int_r_buf = NULL;
- unsigned char *tmp_op_char_w_buf = NULL, *tmp_op_char_r_buf = NULL;
-
- LOGD("\n\n");
- LOGD("**************Test R/W N Bytes **************\n\n");
-
- SSMGetDeviceTotalSize(&device_size);
- SSMGetDeviceWritePageSize(&tmp_w_page_size);
- SSMGetDeviceReadPageSize(&tmp_r_page_size);
-
- if (tmp_w_page_size < tmp_r_page_size) {
- tmp_op_buf_size = tmp_w_page_size * 2 / 3;
- } else if (tmp_r_page_size < tmp_w_page_size) {
- tmp_op_buf_size = tmp_r_page_size * 2 / 3;
- } else {
- tmp_op_buf_size = tmp_w_page_size;
- }
-
- if (tmp_op_buf_size > device_size) {
- tmp_op_buf_size = device_size;
- }
-
- if (tmp_op_buf_size > 0) {
- LOGD("tmp_rw_offset = %d.\n", tmp_rw_offset);
-
- tmp_op_char_w_buf = new unsigned char[tmp_op_buf_size];
- if (tmp_op_char_w_buf != NULL) {
- tmp_op_char_r_buf = new unsigned char[tmp_op_buf_size];
- if (tmp_op_char_r_buf != NULL) {
- for (i = 0; i < tmp_op_buf_size; i++) {
- tmp_op_char_w_buf[i] = (tmp_op_buf_size / 2) - i;
- LOGD("tmp_op_char_w_buf[%d] = %d\n", i, tmp_op_char_w_buf[i]);
- }
- SSMWriteNTypes(tmp_rw_offset, tmp_op_buf_size, tmp_op_char_w_buf);
-
- for (i = 0; i < tmp_op_buf_size; i++) {
- tmp_op_char_r_buf[i] = 0;
- }
- SSMReadNTypes(tmp_rw_offset, tmp_op_buf_size, tmp_op_char_r_buf);
-
- for (i = 0; i < tmp_op_buf_size; i++) {
- LOGD("tmp_op_char_r_buf[%d] = %d\n", i, tmp_op_char_r_buf[i]);
- }
-
- delete tmp_op_char_r_buf;
- tmp_op_char_r_buf = NULL;
- }
-
- delete tmp_op_char_w_buf;
- tmp_op_char_w_buf = NULL;
- }
-
- tmp_op_int_w_buf = new int[tmp_op_buf_size];
- if (tmp_op_int_w_buf != NULL) {
- tmp_op_int_r_buf = new int[tmp_op_buf_size];
- if (tmp_op_int_r_buf != NULL) {
- for (i = 0; i < tmp_op_buf_size; i++) {
- tmp_op_int_w_buf[i] = (tmp_op_buf_size / 2) - i;
- LOGD("tmp_op_int_w_buf[%d] = %d\n", i, tmp_op_int_w_buf[i]);
- }
- SSMWriteNTypes(tmp_rw_offset, tmp_op_buf_size, tmp_op_int_w_buf);
-
- for (i = 0; i < tmp_op_buf_size; i++) {
- tmp_op_int_r_buf[i] = 0;
- }
- SSMReadNTypes(tmp_rw_offset, tmp_op_buf_size, tmp_op_int_r_buf);
-
- for (i = 0; i < tmp_op_buf_size; i++) {
- LOGD("tmp_op_int_r_buf[%d] = %d\n", i, tmp_op_int_r_buf[i]);
- }
-
- delete tmp_op_int_r_buf;
- tmp_op_int_r_buf = NULL;
- }
-
- delete tmp_op_int_w_buf;
- tmp_op_int_w_buf = NULL;
- }
- }
-}
-
-static void TestRWOneStruct(int tmp_rw_offset)
-{
- S_TEST_STRUCT TestWriteStruct, TestReadStruct;
-
- LOGD("\n\n");
- LOGD("**************Test R/W One Struct **************\n\n");
-
- LOGD("tmp_rw_offset = %d.\n", tmp_rw_offset);
-
- TestWriteStruct.tmp_ch0 = -9;
- TestWriteStruct.tmp_ch1 = -8;
- TestWriteStruct.tmp_val0 = 9;
- TestWriteStruct.tmp_ch2 = 255;
- TestWriteStruct.tmp_ch3 = 254;
- TestWriteStruct.tmp_ch4 = 250;
- TestWriteStruct.tmp_short0 = -9;
-
- SSMWriteNTypes(tmp_rw_offset, sizeof(S_TEST_STRUCT), (unsigned char *) &TestWriteStruct);
-
- LOGD("\n\n");
- LOGD("write struct length = %d.\n", sizeof(S_TEST_STRUCT));
- LOGD("TestWriteStruct.tmp_ch0 = %d.\n", TestWriteStruct.tmp_ch0);
- LOGD("TestWriteStruct.tmp_ch1 = %d.\n", TestWriteStruct.tmp_ch1);
- LOGD("TestWriteStruct.tmp_val0 = %d.\n", TestWriteStruct.tmp_val0);
- LOGD("TestWriteStruct.tmp_ch2 = %d.\n", TestWriteStruct.tmp_ch2);
- LOGD("TestWriteStruct.tmp_ch3 = %d.\n", TestWriteStruct.tmp_ch3);
- LOGD("TestWriteStruct.tmp_ch4 = %d.\n", TestWriteStruct.tmp_ch4);
- LOGD("TestWriteStruct.tmp_short0 = %d.\n", TestWriteStruct.tmp_short0);
-
- TestReadStruct.tmp_ch0 = 0;
- TestReadStruct.tmp_ch1 = 0;
- TestReadStruct.tmp_val0 = 0;
- TestReadStruct.tmp_ch2 = 0;
- TestReadStruct.tmp_ch3 = 0;
- TestWriteStruct.tmp_ch4 = 0;
- TestWriteStruct.tmp_short0 = 0;
-
- SSMReadNTypes(tmp_rw_offset, sizeof(S_TEST_STRUCT), (unsigned char *) &TestReadStruct);
-
- LOGD("\n\n");
- LOGD("read struct length = %d.\n", sizeof(S_TEST_STRUCT));
- LOGD("TestReadStruct.tmp_ch0 = %d.\n", TestReadStruct.tmp_ch0);
- LOGD("TestReadStruct.tmp_ch1 = %d.\n", TestReadStruct.tmp_ch1);
- LOGD("TestReadStruct.tmp_val0 = %d.\n", TestReadStruct.tmp_val0);
- LOGD("TestReadStruct.tmp_ch2 = %d.\n", TestReadStruct.tmp_ch2);
- LOGD("TestReadStruct.tmp_ch3 = %d.\n", TestReadStruct.tmp_ch3);
- LOGD("TestReadStruct.tmp_ch4 = %d.\n", TestReadStruct.tmp_ch4);
- LOGD("TestReadStruct.tmp_short0 = %d.\n", TestReadStruct.tmp_short0);
-}
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <android/log.h>
+
+#include "ssm_api.h"
+
+#define LOG_TAG "ssm_test"
+#include "CTvLog.h"
+
+// The follow is R/W test struct declare.
+// The size of it is 11 when it aligned with 1 Byte
+// and is 16 when it aligned with 4 Bytes.
+// You should use the 1 Byte aligned mode when R/W ssm by using struct.
+
+#if 1 // memory aligned with 1 Bytes
+typedef struct tagS_TEST_STRUCT {
+ char tmp_ch0;
+ char tmp_ch1;
+ int tmp_val0;
+ unsigned char tmp_ch2;
+ unsigned char tmp_ch3;
+ unsigned char tmp_ch4;
+ short tmp_short0;
+} __attribute__((packed)) S_TEST_STRUCT;
+#else // memory aligned with 4 Bytes
+typedef struct tagS_TEST_STRUCT {
+ char tmp_ch0;
+ char tmp_ch1;
+ int tmp_val0;
+ unsigned char tmp_ch2;
+ unsigned char tmp_ch3;
+ unsigned char tmp_ch4;
+ short tmp_short0;
+} S_TEST_STRUCT;
+#endif
+
+static void TestRWOneByte(int tmp_rw_offset, int tmp_w_val, unsigned char tmp_w_ch);
+static void TestRWNBytes(int tmp_rw_offset);
+static void TestRWOneStruct(int tmp_rw_offset);
+
+int main()
+{
+ TestRWOneByte(0, 1, -1);
+ TestRWOneByte(1, 2, -2);
+ TestRWOneByte(30, 3, -3);
+ TestRWOneByte(31, -1, 1);
+ TestRWOneByte(32, -2, 2);
+ TestRWOneByte(33, -3, 3);
+
+ TestRWNBytes(31);
+
+ TestRWOneStruct(0);
+}
+
+static void TestRWOneByte(int tmp_rw_offset, int tmp_w_val, unsigned char tmp_w_ch)
+{
+ int tmp_r_val = 0;
+ unsigned char tmp_r_ch = 0;
+
+ LOGD("\n\n");
+ LOGD("**************Test R/W One Byte **************\n\n");
+
+ LOGD("tmp_rw_offset = %d.\n", tmp_rw_offset);
+
+ SSMWriteOneByte(tmp_rw_offset, tmp_w_ch);
+ SSMReadOneByte(tmp_rw_offset, &tmp_r_ch);
+ LOGD("tmp_w_ch = %d, tmp_r_ch = %d.\n", tmp_w_ch, tmp_r_ch);
+
+ SSMWriteOneByte(tmp_rw_offset, tmp_w_val);
+ SSMReadOneByte(tmp_rw_offset, &tmp_r_val);
+ LOGD("tmp_w_val = %d, tmp_r_val = %d.\n", tmp_w_val, tmp_r_val);
+}
+
+static void TestRWNBytes(int tmp_rw_offset)
+{
+ int i = 0, tmp_op_buf_size = 0;
+ int device_size = 0, tmp_w_page_size = 0, tmp_r_page_size = 0;
+ int *tmp_op_int_w_buf = NULL, *tmp_op_int_r_buf = NULL;
+ unsigned char *tmp_op_char_w_buf = NULL, *tmp_op_char_r_buf = NULL;
+
+ LOGD("\n\n");
+ LOGD("**************Test R/W N Bytes **************\n\n");
+
+ SSMGetDeviceTotalSize(&device_size);
+ SSMGetDeviceWritePageSize(&tmp_w_page_size);
+ SSMGetDeviceReadPageSize(&tmp_r_page_size);
+
+ if (tmp_w_page_size < tmp_r_page_size) {
+ tmp_op_buf_size = tmp_w_page_size * 2 / 3;
+ } else if (tmp_r_page_size < tmp_w_page_size) {
+ tmp_op_buf_size = tmp_r_page_size * 2 / 3;
+ } else {
+ tmp_op_buf_size = tmp_w_page_size;
+ }
+
+ if (tmp_op_buf_size > device_size) {
+ tmp_op_buf_size = device_size;
+ }
+
+ if (tmp_op_buf_size > 0) {
+ LOGD("tmp_rw_offset = %d.\n", tmp_rw_offset);
+
+ tmp_op_char_w_buf = new unsigned char[tmp_op_buf_size];
+ if (tmp_op_char_w_buf != NULL) {
+ tmp_op_char_r_buf = new unsigned char[tmp_op_buf_size];
+ if (tmp_op_char_r_buf != NULL) {
+ for (i = 0; i < tmp_op_buf_size; i++) {
+ tmp_op_char_w_buf[i] = (tmp_op_buf_size / 2) - i;
+ LOGD("tmp_op_char_w_buf[%d] = %d\n", i, tmp_op_char_w_buf[i]);
+ }
+ SSMWriteNTypes(tmp_rw_offset, tmp_op_buf_size, tmp_op_char_w_buf);
+
+ for (i = 0; i < tmp_op_buf_size; i++) {
+ tmp_op_char_r_buf[i] = 0;
+ }
+ SSMReadNTypes(tmp_rw_offset, tmp_op_buf_size, tmp_op_char_r_buf);
+
+ for (i = 0; i < tmp_op_buf_size; i++) {
+ LOGD("tmp_op_char_r_buf[%d] = %d\n", i, tmp_op_char_r_buf[i]);
+ }
+
+ delete tmp_op_char_r_buf;
+ tmp_op_char_r_buf = NULL;
+ }
+
+ delete tmp_op_char_w_buf;
+ tmp_op_char_w_buf = NULL;
+ }
+
+ tmp_op_int_w_buf = new int[tmp_op_buf_size];
+ if (tmp_op_int_w_buf != NULL) {
+ tmp_op_int_r_buf = new int[tmp_op_buf_size];
+ if (tmp_op_int_r_buf != NULL) {
+ for (i = 0; i < tmp_op_buf_size; i++) {
+ tmp_op_int_w_buf[i] = (tmp_op_buf_size / 2) - i;
+ LOGD("tmp_op_int_w_buf[%d] = %d\n", i, tmp_op_int_w_buf[i]);
+ }
+ SSMWriteNTypes(tmp_rw_offset, tmp_op_buf_size, tmp_op_int_w_buf);
+
+ for (i = 0; i < tmp_op_buf_size; i++) {
+ tmp_op_int_r_buf[i] = 0;
+ }
+ SSMReadNTypes(tmp_rw_offset, tmp_op_buf_size, tmp_op_int_r_buf);
+
+ for (i = 0; i < tmp_op_buf_size; i++) {
+ LOGD("tmp_op_int_r_buf[%d] = %d\n", i, tmp_op_int_r_buf[i]);
+ }
+
+ delete tmp_op_int_r_buf;
+ tmp_op_int_r_buf = NULL;
+ }
+
+ delete tmp_op_int_w_buf;
+ tmp_op_int_w_buf = NULL;
+ }
+ }
+}
+
+static void TestRWOneStruct(int tmp_rw_offset)
+{
+ S_TEST_STRUCT TestWriteStruct, TestReadStruct;
+
+ LOGD("\n\n");
+ LOGD("**************Test R/W One Struct **************\n\n");
+
+ LOGD("tmp_rw_offset = %d.\n", tmp_rw_offset);
+
+ TestWriteStruct.tmp_ch0 = -9;
+ TestWriteStruct.tmp_ch1 = -8;
+ TestWriteStruct.tmp_val0 = 9;
+ TestWriteStruct.tmp_ch2 = 255;
+ TestWriteStruct.tmp_ch3 = 254;
+ TestWriteStruct.tmp_ch4 = 250;
+ TestWriteStruct.tmp_short0 = -9;
+
+ SSMWriteNTypes(tmp_rw_offset, sizeof(S_TEST_STRUCT), (unsigned char *) &TestWriteStruct);
+
+ LOGD("\n\n");
+ LOGD("write struct length = %d.\n", sizeof(S_TEST_STRUCT));
+ LOGD("TestWriteStruct.tmp_ch0 = %d.\n", TestWriteStruct.tmp_ch0);
+ LOGD("TestWriteStruct.tmp_ch1 = %d.\n", TestWriteStruct.tmp_ch1);
+ LOGD("TestWriteStruct.tmp_val0 = %d.\n", TestWriteStruct.tmp_val0);
+ LOGD("TestWriteStruct.tmp_ch2 = %d.\n", TestWriteStruct.tmp_ch2);
+ LOGD("TestWriteStruct.tmp_ch3 = %d.\n", TestWriteStruct.tmp_ch3);
+ LOGD("TestWriteStruct.tmp_ch4 = %d.\n", TestWriteStruct.tmp_ch4);
+ LOGD("TestWriteStruct.tmp_short0 = %d.\n", TestWriteStruct.tmp_short0);
+
+ TestReadStruct.tmp_ch0 = 0;
+ TestReadStruct.tmp_ch1 = 0;
+ TestReadStruct.tmp_val0 = 0;
+ TestReadStruct.tmp_ch2 = 0;
+ TestReadStruct.tmp_ch3 = 0;
+ TestWriteStruct.tmp_ch4 = 0;
+ TestWriteStruct.tmp_short0 = 0;
+
+ SSMReadNTypes(tmp_rw_offset, sizeof(S_TEST_STRUCT), (unsigned char *) &TestReadStruct);
+
+ LOGD("\n\n");
+ LOGD("read struct length = %d.\n", sizeof(S_TEST_STRUCT));
+ LOGD("TestReadStruct.tmp_ch0 = %d.\n", TestReadStruct.tmp_ch0);
+ LOGD("TestReadStruct.tmp_ch1 = %d.\n", TestReadStruct.tmp_ch1);
+ LOGD("TestReadStruct.tmp_val0 = %d.\n", TestReadStruct.tmp_val0);
+ LOGD("TestReadStruct.tmp_ch2 = %d.\n", TestReadStruct.tmp_ch2);
+ LOGD("TestReadStruct.tmp_ch3 = %d.\n", TestReadStruct.tmp_ch3);
+ LOGD("TestReadStruct.tmp_ch4 = %d.\n", TestReadStruct.tmp_ch4);
+ LOGD("TestReadStruct.tmp_short0 = %d.\n", TestReadStruct.tmp_short0);
+}
diff --git a/tvapi/tvtests/tvconfig_test.cpp b/tvapi/tvtests/tvconfig_test.cpp
index ea90dd7..09a2b27 100644
--- a/tvapi/tvtests/tvconfig_test.cpp
+++ b/tvapi/tvtests/tvconfig_test.cpp
@@ -1,427 +1,427 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <android/log.h>
-
-#include "tvconfig_core.h"
-#include "tvconfig.h"
-
-#define LOG_TAG "tvconfig_test"
-#include "CTvLog.h"
-
-static int GetAudioAmplifierBiquadsDataBuffer00(int *biquad_count, int *biquad_item_count, int biquad_data_buf[]);
-static int GetAudioAmplifierBiquadsDataBuffer01(int *biquad_count, int *biquad_item_count, int biquad_data_buf[]);
-
-static int GetTvAudioCardID(char tv_card_id_buf[]);
-static int GetTvAudioCardName(char tv_card_name_buf[]);
-
-static int ATVGetFacRestoreChanInfo(int *chan_cnt, int *item_cnt, int chan_data_buf[]);
-
-static void PrintGPIOCfgData(int cfg_info_item_count, GPIOCFGInfo cfg_info_buf[]);
-static int GetAudioAnalogAmplifierMuteGPIOCFG(char gpio_grp_str[], int *mute_gpio_addr, int *mute_on_val, int *mute_off_val);
-static int GetAudioHeadSetMuteGPIOCFG(char gpio_grp_str[], int *mute_gpio_addr, int *mute_on_val, int *mute_off_val);
-static int GetAudioAVOutMuteGPIOCFG(char gpio_grp_str[], int *mute_gpio_addr, int *mute_on_val, int *mute_off_val);
-static int GetWriteProtectGPIOCFG(char gpio_grp_str[], int *protect_gpio_addr, int *protect_on_val, int *protect_off_val);
-
-typedef struct tagTvServerInfo {
- int power_on_off_channel;
- int last_source_select;
- int system_language;
-} TvServerInfo;
-
-int main(int argc, char **argv)
-{
- int i, j;
- char key_buf[CC_CFG_KEY_STR_MAX_LEN];
- char cfg_buf[CC_CFG_VALUE_STR_MAX_LEN];
-
- config_set_log_level (CC_LOG_LEVEL_ALL);
-
- config_init((char *) "tvconfig.conf");
-
- strcpy(key_buf, "media.amplayer.enable-acodecs");
- config_get(key_buf, cfg_buf, (char *) "");
- LOGD("file(%s)'s function(%s), key string \"%s\", value string \"%s\".\n", __FILE__, "TV", key_buf, cfg_buf);
-
- strcpy(key_buf, "media.amplayer.enable-acodecs");
- strcpy(cfg_buf, "shorthoho");
- config_set(key_buf, cfg_buf);
-
- strcpy(key_buf, "media.amplayer.enable-acodecs");
- config_get(key_buf, cfg_buf, (char *) "");
- LOGD("file(%s)'s function(%s), key string \"%s\", value string \"%s\".\n", __FILE__, "TV", key_buf, cfg_buf);
-
- strcpy(key_buf, "media.amplayer.enable-acodecs");
- config_get(key_buf, cfg_buf, (char *) "");
- LOGD("file(%s)'s function(%s), key string \"%s\", value string \"%s\".\n", __FILE__, "TV", key_buf, cfg_buf);
-
- strcpy(key_buf, "media.amplayer.enable-acodecs");
- strcpy(cfg_buf, "asf,wav,aac,mp3,m4a,ape,flac,alac,hohoho");
- config_set(key_buf, cfg_buf);
-
- strcpy(key_buf, "media.amplayer.enable-acodecs");
- config_get(key_buf, cfg_buf, (char *) "");
- LOGD("file(%s)'s function(%s), key string \"%s\", value string \"%s\".\n", __FILE__, "TV", key_buf, cfg_buf);
-
- strcpy(key_buf, "shoufu.zhao.test");
- config_get(key_buf, cfg_buf, (char *) "");
- LOGD("file(%s)'s function(%s), key string \"%s\", value string \"%s\".\n", __FILE__, "TV", key_buf, cfg_buf);
-
- strcpy(key_buf, "shoufu.zhao.test");
- strcpy(cfg_buf, "test hohoho");
- config_set(key_buf, cfg_buf);
-
- strcpy(key_buf, "shoufu.zhao.test");
- config_get(key_buf, cfg_buf, (char *) "");
- LOGD("file(%s)'s function(%s), key string \"%s\", value string \"%s\".\n", __FILE__, "TV", key_buf, cfg_buf);
-
- int biquad_count = 0, biquad_item_count = 0;
- int biquad_data_buf00[128] = { 0 };
- int biquad_data_buf01[128] = { 0 };
-
- GetAudioAmplifierBiquadsDataBuffer00(&biquad_count, &biquad_item_count, biquad_data_buf00);
- for (i = 0; i < biquad_count; i++) {
- for (j = 0; j < biquad_item_count; j++) {
- LOGD("0x%x\n", biquad_data_buf00[i * biquad_item_count + j]);
- }
-
- LOGD("\n");
- }
-
- GetAudioAmplifierBiquadsDataBuffer01(&biquad_count, &biquad_item_count, biquad_data_buf01);
- for (i = 0; i < biquad_count; i++) {
- for (j = 0; j < biquad_item_count; j++) {
- LOGD("0x%x\n", biquad_data_buf01[i * biquad_item_count + j]);
- }
-
- LOGD("\n");
- }
-
- char tv_card_id_buf[64] = { 0 };
- char tv_card_name_buf[64] = { 0 };
-
- GetTvAudioCardID(tv_card_id_buf);
-
- GetTvAudioCardName(tv_card_name_buf);
-
- printf("tvservice log cfg value = %d\n", config_log_cfg_get(CC_LOG_MODULE_TVSERVICE));
- printf("vpp log cfg value = %d\n", config_log_cfg_get(CC_LOG_MODULE_VPP));
-
- int chan_cnt = 0, item_cnt = 0;
- int chan_data_buf[256] = { 0 };
-
- ATVGetFacRestoreChanInfo(&chan_cnt, &item_cnt, chan_data_buf);
-
- for (i = 0; i < chan_cnt; i++) {
- for (j = 0; j < item_cnt; j++) {
- LOGD("%d\n", chan_data_buf[i * item_cnt + j]);
- }
-
- LOGD("\n");
- }
-
- char gpio_grp_str[32] = { 0 };
- int gpio_addr, gpio_on_val;
-
- int cfg_info_item_count = 0;
- GPIOCFGInfo cfg_info_buf[64];
-
- if (cfg_get_one_gpio_data("audio.avout.mute.gpio", gpio_grp_str, &gpio_addr, &gpio_on_val) == 0) {
- cfg_info_item_count = 1;
-
- strcpy(cfg_info_buf[0].gpio_grp_str, gpio_grp_str);
- cfg_info_buf[0].gpio_addr = gpio_addr;
- cfg_info_buf[0].gpio_val = gpio_on_val;
-
- PrintGPIOCfgData(cfg_info_item_count, &cfg_info_buf[0]);
- }
-
- if (cfg_get_gpio_data("audio.avout.mute.gpio", &cfg_info_item_count, cfg_info_buf) == 0) {
- PrintGPIOCfgData(cfg_info_item_count, cfg_info_buf);
- }
-
- cfg_info_item_count = 64;
- if (cfg_get_gpio_data("audio.initaudio.gpioctl", &cfg_info_item_count, cfg_info_buf) == 0) {
- PrintGPIOCfgData(cfg_info_item_count, cfg_info_buf);
- }
-
- char tmp_buf[32] = { 0 };
- int mute_gpio_addr, mute_on_gpio_val, mute_off_gpio_val;
-
- if (GetAudioAnalogAmplifierMuteGPIOCFG(gpio_grp_str, &mute_gpio_addr, &mute_on_gpio_val, &mute_off_gpio_val) == 0) {
- sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_on_gpio_val);
- LOGD("%s, mute on write command %s\n", "GetAudioAnalogAmplifierMuteGPIOCFG", tmp_buf);
-
- sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_off_gpio_val);
- LOGD("%s, mute off write command %s\n", "GetAudioAnalogAmplifierMuteGPIOCFG", tmp_buf);
- }
-
- if (GetAudioHeadSetMuteGPIOCFG(gpio_grp_str, &mute_gpio_addr, &mute_on_gpio_val, &mute_off_gpio_val) == 0) {
- sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_on_gpio_val);
- LOGD("%s, mute on write command %s\n", "GetAudioHeadSetMuteGPIOCFG", tmp_buf);
-
- sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_off_gpio_val);
- LOGD("%s, mute off write command %s\n", "GetAudioHeadSetMuteGPIOCFG", tmp_buf);
- }
-
- if (GetAudioAVOutMuteGPIOCFG(gpio_grp_str, &mute_gpio_addr, &mute_on_gpio_val, &mute_off_gpio_val) == 0) {
- sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_on_gpio_val);
- LOGD("%s, mute on write command %s\n", "GetAudioAVOutMuteGPIOCFG", tmp_buf);
-
- sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_off_gpio_val);
- LOGD("%s, mute off write command %s\n", "GetAudioAVOutMuteGPIOCFG", tmp_buf);
- }
-
- if (GetWriteProtectGPIOCFG(gpio_grp_str, &mute_gpio_addr, &mute_on_gpio_val, &mute_off_gpio_val) == 0) {
- sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_on_gpio_val);
- LOGD("%s, protect on write command %s\n", "GetWriteProtectGPIOCFG", tmp_buf);
-
- sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_off_gpio_val);
- LOGD("%s, protect off write command %s\n", "GetWriteProtectGPIOCFG", tmp_buf);
- }
-
- tmpInfo.power_on_off_channel = 0;
- tmpInfo.last_source_select = 0;
- tmpInfo.system_language = 1;
-
- for (i = 0; i < 12; i++) {
- tmpInfo.last_source_select = i;
- }
-
- char item_buf[128] = { 0 };
-
- for (i = 0; i < 16; i++) {
- cfg_get_one_item("misc.lastselsrc.show.cfg", i, item_buf);
- LOGD("item %d = %s\n", i, item_buf);
- }
-
- config_uninit();
-
- LOGD("file(%s)'s function(%s) exiting.\n", __FILE__, "TV");
- return 0;
-}
-
-static int RealGetAudioAmplifierBiquadsDataBuffer(const char *key_str, int *biquad_count, int *biquad_item_count, int biquad_data_buf[])
-{
- int cfg_item_count = 0, tmpTotalItemCount = 0;
- char *token = NULL;
- const char *strDelimit = ",";
- char prop_value[CC_CFG_VALUE_STR_MAX_LEN];
-
- memset(prop_value, '\0', CC_CFG_VALUE_STR_MAX_LEN);
-
- config_get(key_str, prop_value, "null");
- if (strcasecmp(prop_value, "null") == 0) {
- LOGE("%s, can't get config \"%s\"!!!\n", "TV", key_str);
- *biquad_count = 0;
- *biquad_item_count = 0;
- return -1;
- }
-
- tmpTotalItemCount = 0;
-
- token = strtok(prop_value, strDelimit);
- while (token != NULL) {
- if (cfg_item_count == 0) {
- *biquad_count = strtoul(token, NULL, 16);
- } else if (cfg_item_count == 1) {
- *biquad_item_count = strtoul(token, NULL, 16);
- } else if (cfg_item_count >= 2) {
- biquad_data_buf[tmpTotalItemCount] = strtoul(token, NULL, 16);
- tmpTotalItemCount += 1;
- }
-
- token = strtok(NULL, strDelimit);
- cfg_item_count += 1;
- }
-
- if ((*biquad_count) * (*biquad_item_count) != tmpTotalItemCount) {
- LOGE("%s, get item count error!!! should be %d, real is %d.\n", "TV", (*biquad_count) * (*biquad_item_count), tmpTotalItemCount);
- *biquad_count = 0;
- *biquad_item_count = 0;
- return -1;
- }
-
- LOGD("%s, biquad count = %d, biquad item count = %d.\n", "TV", *biquad_count, *biquad_item_count);
-
- return 0;
-}
-
-static int GetAudioAmplifierBiquadsDataBuffer00(int *biquad_count, int *biquad_item_count, int biquad_data_buf[])
-{
- return RealGetAudioAmplifierBiquadsDataBuffer("audio.amplifier.biquad00.data", biquad_count, biquad_item_count, biquad_data_buf);
-}
-
-static int GetAudioAmplifierBiquadsDataBuffer01(int *biquad_count, int *biquad_item_count, int biquad_data_buf[])
-{
- return RealGetAudioAmplifierBiquadsDataBuffer("audio.amplifier.biquad01.data", biquad_count, biquad_item_count, biquad_data_buf);
-}
-
-static int GetTvAudioCardID(char tv_card_id_buf[])
-{
- config_get("audio.tv.card.id", tv_card_id_buf, "null");
- LOGD("%s, get card id is \"%s\".\n", "TV", tv_card_id_buf);
-
- if (strcmp(tv_card_id_buf, "null") == 0) {
- strcpy(tv_card_id_buf, "hw:AMLM2");
- LOGD("%s, card id not config, we set to default \"%s\".\n", "TV", "hw:AMLM2");
- }
-
- return 0;
-}
-
-static int GetTvAudioCardName(char tv_card_name_buf[])
-{
- config_get("audio.tv.card.name", tv_card_name_buf, "null");
- LOGD("%s, get card name is \"%s\".\n", "TV", tv_card_name_buf);
-
- if (strcmp(tv_card_name_buf, "null") == 0) {
- strcpy(tv_card_name_buf, "AML-M2");
- LOGD("%s, card name not config, we set to default \"%s\".\n", "TV", "AML-M2");
- }
-
- return 0;
-}
-
-static int ATVGetFacRestoreChanInfo(int *chan_cnt, int *item_cnt, int chan_data_buf[])
-{
- int cfg_item_count = 0, tmpTotalItemCount = 0;
- char *token = NULL;
- const char *strDelimit = ",";
- const char *key_str = "atv.fac.defchaninfo";
- char prop_value[CC_CFG_VALUE_STR_MAX_LEN];
-
- memset(prop_value, '\0', CC_CFG_VALUE_STR_MAX_LEN);
-
- config_get(key_str, prop_value, "null");
- if (strcasecmp(prop_value, "null") == 0) {
- LOGE("%s, can't get config \"%s\"!!!\n", "TV", key_str);
- *chan_cnt = 0;
- *item_cnt = 0;
- return -1;
- }
-
- tmpTotalItemCount = 0;
-
- token = strtok(prop_value, strDelimit);
- while (token != NULL) {
- if (cfg_item_count == 0) {
- *chan_cnt = strtoul(token, NULL, 10);
- } else if (cfg_item_count == 1) {
- *item_cnt = strtoul(token, NULL, 10);
- } else if (cfg_item_count >= 2) {
- chan_data_buf[tmpTotalItemCount] = strtoul(token, NULL, 10);
- tmpTotalItemCount += 1;
- }
-
- token = strtok(NULL, strDelimit);
- cfg_item_count += 1;
- }
-
- if ((*chan_cnt) * (*item_cnt) != tmpTotalItemCount) {
- LOGE("%s, get item count error!!! should be %d, real is %d.\n", "TV", (*chan_cnt) * (*item_cnt), tmpTotalItemCount);
- *chan_cnt = 0;
- *item_cnt = 0;
- return -1;
- }
-
- LOGD("%s, channel count = %d, channel item count = %d.\n", "TV", *chan_cnt, *item_cnt);
-
- return 0;
-}
-
-static void PrintGPIOCfgData(int cfg_info_item_count, GPIOCFGInfo cfg_info_buf[])
-{
- int i = 0;
-
- LOGD("%s, cfg_info_item_count = %d\n", "TV", cfg_info_item_count);
-
- for (i = 0; i < cfg_info_item_count; i++) {
- LOGD("%s, %s %d %d %d\n", "TV", cfg_info_buf[i].gpio_grp_str, cfg_info_buf[i].gpio_addr, cfg_info_buf[i].gpio_val, !cfg_info_buf[i].gpio_val);
- }
-
- LOGD("\n");
-}
-
-static int GetWriteProtectGPIOCFG(char gpio_grp_str[], int *protect_gpio_addr, int *protect_on_val, int *protect_off_val)
-{
- if (cfg_get_one_gpio_data("ssm.writeprotect.gpio", gpio_grp_str, protect_gpio_addr, protect_on_val) < 0) {
- return -1;
- }
-
- *protect_off_val = !(*protect_on_val);
-
- return 0;
-}
-
-#define CC_AMPLIFIER_ANALOG_MUTE_GPIO_CFG_NAME "audio.amp.analog.mute.gpio"
-#define CC_HEADSET_MUTE_GPIO_CFG_NAME "audio.headset.mute.gpio"
-#define CC_AVOUT_MUTE_GPIO_CFG_NAME "audio.avout.mute.gpio"
-
-static int GetAudioAnalogAmplifierMuteGPIOCFG(char gpio_grp_str[], int *mute_gpio_addr, int *mute_on_val, int *mute_off_val)
-{
- if (cfg_get_one_gpio_data(CC_AMPLIFIER_ANALOG_MUTE_GPIO_CFG_NAME, gpio_grp_str, mute_gpio_addr, mute_on_val) < 0) {
- return -1;
- }
-
- *mute_off_val = !(*mute_on_val);
-
- return 0;
-}
-
-static int GetAudioHeadSetMuteGPIOCFG(char gpio_grp_str[], int *mute_gpio_addr, int *mute_on_val, int *mute_off_val)
-{
- if (cfg_get_one_gpio_data(CC_HEADSET_MUTE_GPIO_CFG_NAME, gpio_grp_str, mute_gpio_addr, mute_on_val) < 0) {
- return -1;
- }
-
- *mute_off_val = !(*mute_on_val);
-
- return 0;
-}
-
-static int GetAudioAVOutMuteGPIOCFG(char gpio_grp_str[], int *mute_gpio_addr, int *mute_on_val, int *mute_off_val)
-{
- if (cfg_get_one_gpio_data(CC_AVOUT_MUTE_GPIO_CFG_NAME, gpio_grp_str, mute_gpio_addr, mute_on_val) < 0) {
- return -1;
- }
-
- //Some projects has been volume production. They may not use the newest code, so we do compatible for old config.
- //old config 69,0,1
- //new config x,69,0
-
- if (gpio_grp_str[0] != 'x' || gpio_grp_str[0] != 'b' || gpio_grp_str[0] != 'd') {
- *mute_gpio_addr = strtol(gpio_grp_str, NULL, 10);
- gpio_grp_str[0] = 'x';
- gpio_grp_str[1] = '\0';
- *mute_off_val = *mute_on_val;
- *mute_on_val = !(*mute_off_val);
- } else {
- *mute_off_val = !(*mute_on_val);
- }
-
- return 0;
-}
-
-#define PROPERTY_VALUE_MAX (92)
-
-typedef enum tvin_source_input_e {
- SOURCE_TV,
- SOURCE_AV1,
- SOURCE_AV2,
- SOURCE_YPBPR1,
- SOURCE_YPBPR2,
- SOURCE_HDMI1,
- SOURCE_HDMI2,
- SOURCE_HDMI3,
- SOURCE_VGA,
- SOURCE_MPEG,
- SOURCE_DTV,
- SOURCE_MAX,
-} tv_source_input_t;
-
-static int property_set(const char *key_value, char *prop_value)
-{
- LOGD("%s, %s = %s\n", "TV", key_value, prop_value);
- return 0;
-}
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <android/log.h>
+
+#include "tvconfig_core.h"
+#include "tvconfig.h"
+
+#define LOG_TAG "tvconfig_test"
+#include "CTvLog.h"
+
+static int GetAudioAmplifierBiquadsDataBuffer00(int *biquad_count, int *biquad_item_count, int biquad_data_buf[]);
+static int GetAudioAmplifierBiquadsDataBuffer01(int *biquad_count, int *biquad_item_count, int biquad_data_buf[]);
+
+static int GetTvAudioCardID(char tv_card_id_buf[]);
+static int GetTvAudioCardName(char tv_card_name_buf[]);
+
+static int ATVGetFacRestoreChanInfo(int *chan_cnt, int *item_cnt, int chan_data_buf[]);
+
+static void PrintGPIOCfgData(int cfg_info_item_count, GPIOCFGInfo cfg_info_buf[]);
+static int GetAudioAnalogAmplifierMuteGPIOCFG(char gpio_grp_str[], int *mute_gpio_addr, int *mute_on_val, int *mute_off_val);
+static int GetAudioHeadSetMuteGPIOCFG(char gpio_grp_str[], int *mute_gpio_addr, int *mute_on_val, int *mute_off_val);
+static int GetAudioAVOutMuteGPIOCFG(char gpio_grp_str[], int *mute_gpio_addr, int *mute_on_val, int *mute_off_val);
+static int GetWriteProtectGPIOCFG(char gpio_grp_str[], int *protect_gpio_addr, int *protect_on_val, int *protect_off_val);
+
+typedef struct tagTvServerInfo {
+ int power_on_off_channel;
+ int last_source_select;
+ int system_language;
+} TvServerInfo;
+
+int main(int argc, char **argv)
+{
+ int i, j;
+ char key_buf[CC_CFG_KEY_STR_MAX_LEN];
+ char cfg_buf[CC_CFG_VALUE_STR_MAX_LEN];
+
+ config_set_log_level (CC_LOG_LEVEL_ALL);
+
+ config_init((char *) "tvconfig.conf");
+
+ strcpy(key_buf, "media.amplayer.enable-acodecs");
+ config_get(key_buf, cfg_buf, (char *) "");
+ LOGD("file(%s)'s function(%s), key string \"%s\", value string \"%s\".\n", __FILE__, "TV", key_buf, cfg_buf);
+
+ strcpy(key_buf, "media.amplayer.enable-acodecs");
+ strcpy(cfg_buf, "shorthoho");
+ config_set(key_buf, cfg_buf);
+
+ strcpy(key_buf, "media.amplayer.enable-acodecs");
+ config_get(key_buf, cfg_buf, (char *) "");
+ LOGD("file(%s)'s function(%s), key string \"%s\", value string \"%s\".\n", __FILE__, "TV", key_buf, cfg_buf);
+
+ strcpy(key_buf, "media.amplayer.enable-acodecs");
+ config_get(key_buf, cfg_buf, (char *) "");
+ LOGD("file(%s)'s function(%s), key string \"%s\", value string \"%s\".\n", __FILE__, "TV", key_buf, cfg_buf);
+
+ strcpy(key_buf, "media.amplayer.enable-acodecs");
+ strcpy(cfg_buf, "asf,wav,aac,mp3,m4a,ape,flac,alac,hohoho");
+ config_set(key_buf, cfg_buf);
+
+ strcpy(key_buf, "media.amplayer.enable-acodecs");
+ config_get(key_buf, cfg_buf, (char *) "");
+ LOGD("file(%s)'s function(%s), key string \"%s\", value string \"%s\".\n", __FILE__, "TV", key_buf, cfg_buf);
+
+ strcpy(key_buf, "shoufu.zhao.test");
+ config_get(key_buf, cfg_buf, (char *) "");
+ LOGD("file(%s)'s function(%s), key string \"%s\", value string \"%s\".\n", __FILE__, "TV", key_buf, cfg_buf);
+
+ strcpy(key_buf, "shoufu.zhao.test");
+ strcpy(cfg_buf, "test hohoho");
+ config_set(key_buf, cfg_buf);
+
+ strcpy(key_buf, "shoufu.zhao.test");
+ config_get(key_buf, cfg_buf, (char *) "");
+ LOGD("file(%s)'s function(%s), key string \"%s\", value string \"%s\".\n", __FILE__, "TV", key_buf, cfg_buf);
+
+ int biquad_count = 0, biquad_item_count = 0;
+ int biquad_data_buf00[128] = { 0 };
+ int biquad_data_buf01[128] = { 0 };
+
+ GetAudioAmplifierBiquadsDataBuffer00(&biquad_count, &biquad_item_count, biquad_data_buf00);
+ for (i = 0; i < biquad_count; i++) {
+ for (j = 0; j < biquad_item_count; j++) {
+ LOGD("0x%x\n", biquad_data_buf00[i * biquad_item_count + j]);
+ }
+
+ LOGD("\n");
+ }
+
+ GetAudioAmplifierBiquadsDataBuffer01(&biquad_count, &biquad_item_count, biquad_data_buf01);
+ for (i = 0; i < biquad_count; i++) {
+ for (j = 0; j < biquad_item_count; j++) {
+ LOGD("0x%x\n", biquad_data_buf01[i * biquad_item_count + j]);
+ }
+
+ LOGD("\n");
+ }
+
+ char tv_card_id_buf[64] = { 0 };
+ char tv_card_name_buf[64] = { 0 };
+
+ GetTvAudioCardID(tv_card_id_buf);
+
+ GetTvAudioCardName(tv_card_name_buf);
+
+ printf("tvservice log cfg value = %d\n", config_log_cfg_get(CC_LOG_MODULE_TVSERVICE));
+ printf("vpp log cfg value = %d\n", config_log_cfg_get(CC_LOG_MODULE_VPP));
+
+ int chan_cnt = 0, item_cnt = 0;
+ int chan_data_buf[256] = { 0 };
+
+ ATVGetFacRestoreChanInfo(&chan_cnt, &item_cnt, chan_data_buf);
+
+ for (i = 0; i < chan_cnt; i++) {
+ for (j = 0; j < item_cnt; j++) {
+ LOGD("%d\n", chan_data_buf[i * item_cnt + j]);
+ }
+
+ LOGD("\n");
+ }
+
+ char gpio_grp_str[32] = { 0 };
+ int gpio_addr, gpio_on_val;
+
+ int cfg_info_item_count = 0;
+ GPIOCFGInfo cfg_info_buf[64];
+
+ if (cfg_get_one_gpio_data("audio.avout.mute.gpio", gpio_grp_str, &gpio_addr, &gpio_on_val) == 0) {
+ cfg_info_item_count = 1;
+
+ strcpy(cfg_info_buf[0].gpio_grp_str, gpio_grp_str);
+ cfg_info_buf[0].gpio_addr = gpio_addr;
+ cfg_info_buf[0].gpio_val = gpio_on_val;
+
+ PrintGPIOCfgData(cfg_info_item_count, &cfg_info_buf[0]);
+ }
+
+ if (cfg_get_gpio_data("audio.avout.mute.gpio", &cfg_info_item_count, cfg_info_buf) == 0) {
+ PrintGPIOCfgData(cfg_info_item_count, cfg_info_buf);
+ }
+
+ cfg_info_item_count = 64;
+ if (cfg_get_gpio_data("audio.initaudio.gpioctl", &cfg_info_item_count, cfg_info_buf) == 0) {
+ PrintGPIOCfgData(cfg_info_item_count, cfg_info_buf);
+ }
+
+ char tmp_buf[32] = { 0 };
+ int mute_gpio_addr, mute_on_gpio_val, mute_off_gpio_val;
+
+ if (GetAudioAnalogAmplifierMuteGPIOCFG(gpio_grp_str, &mute_gpio_addr, &mute_on_gpio_val, &mute_off_gpio_val) == 0) {
+ sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_on_gpio_val);
+ LOGD("%s, mute on write command %s\n", "GetAudioAnalogAmplifierMuteGPIOCFG", tmp_buf);
+
+ sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_off_gpio_val);
+ LOGD("%s, mute off write command %s\n", "GetAudioAnalogAmplifierMuteGPIOCFG", tmp_buf);
+ }
+
+ if (GetAudioHeadSetMuteGPIOCFG(gpio_grp_str, &mute_gpio_addr, &mute_on_gpio_val, &mute_off_gpio_val) == 0) {
+ sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_on_gpio_val);
+ LOGD("%s, mute on write command %s\n", "GetAudioHeadSetMuteGPIOCFG", tmp_buf);
+
+ sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_off_gpio_val);
+ LOGD("%s, mute off write command %s\n", "GetAudioHeadSetMuteGPIOCFG", tmp_buf);
+ }
+
+ if (GetAudioAVOutMuteGPIOCFG(gpio_grp_str, &mute_gpio_addr, &mute_on_gpio_val, &mute_off_gpio_val) == 0) {
+ sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_on_gpio_val);
+ LOGD("%s, mute on write command %s\n", "GetAudioAVOutMuteGPIOCFG", tmp_buf);
+
+ sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_off_gpio_val);
+ LOGD("%s, mute off write command %s\n", "GetAudioAVOutMuteGPIOCFG", tmp_buf);
+ }
+
+ if (GetWriteProtectGPIOCFG(gpio_grp_str, &mute_gpio_addr, &mute_on_gpio_val, &mute_off_gpio_val) == 0) {
+ sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_on_gpio_val);
+ LOGD("%s, protect on write command %s\n", "GetWriteProtectGPIOCFG", tmp_buf);
+
+ sprintf(tmp_buf, "w %s %d %d", gpio_grp_str, mute_gpio_addr, mute_off_gpio_val);
+ LOGD("%s, protect off write command %s\n", "GetWriteProtectGPIOCFG", tmp_buf);
+ }
+
+ tmpInfo.power_on_off_channel = 0;
+ tmpInfo.last_source_select = 0;
+ tmpInfo.system_language = 1;
+
+ for (i = 0; i < 12; i++) {
+ tmpInfo.last_source_select = i;
+ }
+
+ char item_buf[128] = { 0 };
+
+ for (i = 0; i < 16; i++) {
+ cfg_get_one_item("misc.lastselsrc.show.cfg", i, item_buf);
+ LOGD("item %d = %s\n", i, item_buf);
+ }
+
+ config_uninit();
+
+ LOGD("file(%s)'s function(%s) exiting.\n", __FILE__, "TV");
+ return 0;
+}
+
+static int RealGetAudioAmplifierBiquadsDataBuffer(const char *key_str, int *biquad_count, int *biquad_item_count, int biquad_data_buf[])
+{
+ int cfg_item_count = 0, tmpTotalItemCount = 0;
+ char *token = NULL;
+ const char *strDelimit = ",";
+ char prop_value[CC_CFG_VALUE_STR_MAX_LEN];
+
+ memset(prop_value, '\0', CC_CFG_VALUE_STR_MAX_LEN);
+
+ config_get(key_str, prop_value, "null");
+ if (strcasecmp(prop_value, "null") == 0) {
+ LOGE("%s, can't get config \"%s\"!!!\n", "TV", key_str);
+ *biquad_count = 0;
+ *biquad_item_count = 0;
+ return -1;
+ }
+
+ tmpTotalItemCount = 0;
+
+ token = strtok(prop_value, strDelimit);
+ while (token != NULL) {
+ if (cfg_item_count == 0) {
+ *biquad_count = strtoul(token, NULL, 16);
+ } else if (cfg_item_count == 1) {
+ *biquad_item_count = strtoul(token, NULL, 16);
+ } else if (cfg_item_count >= 2) {
+ biquad_data_buf[tmpTotalItemCount] = strtoul(token, NULL, 16);
+ tmpTotalItemCount += 1;
+ }
+
+ token = strtok(NULL, strDelimit);
+ cfg_item_count += 1;
+ }
+
+ if ((*biquad_count) * (*biquad_item_count) != tmpTotalItemCount) {
+ LOGE("%s, get item count error!!! should be %d, real is %d.\n", "TV", (*biquad_count) * (*biquad_item_count), tmpTotalItemCount);
+ *biquad_count = 0;
+ *biquad_item_count = 0;
+ return -1;
+ }
+
+ LOGD("%s, biquad count = %d, biquad item count = %d.\n", "TV", *biquad_count, *biquad_item_count);
+
+ return 0;
+}
+
+static int GetAudioAmplifierBiquadsDataBuffer00(int *biquad_count, int *biquad_item_count, int biquad_data_buf[])
+{
+ return RealGetAudioAmplifierBiquadsDataBuffer("audio.amplifier.biquad00.data", biquad_count, biquad_item_count, biquad_data_buf);
+}
+
+static int GetAudioAmplifierBiquadsDataBuffer01(int *biquad_count, int *biquad_item_count, int biquad_data_buf[])
+{
+ return RealGetAudioAmplifierBiquadsDataBuffer("audio.amplifier.biquad01.data", biquad_count, biquad_item_count, biquad_data_buf);
+}
+
+static int GetTvAudioCardID(char tv_card_id_buf[])
+{
+ config_get("audio.tv.card.id", tv_card_id_buf, "null");
+ LOGD("%s, get card id is \"%s\".\n", "TV", tv_card_id_buf);
+
+ if (strcmp(tv_card_id_buf, "null") == 0) {
+ strcpy(tv_card_id_buf, "hw:AMLM2");
+ LOGD("%s, card id not config, we set to default \"%s\".\n", "TV", "hw:AMLM2");
+ }
+
+ return 0;
+}
+
+static int GetTvAudioCardName(char tv_card_name_buf[])
+{
+ config_get("audio.tv.card.name", tv_card_name_buf, "null");
+ LOGD("%s, get card name is \"%s\".\n", "TV", tv_card_name_buf);
+
+ if (strcmp(tv_card_name_buf, "null") == 0) {
+ strcpy(tv_card_name_buf, "AML-M2");
+ LOGD("%s, card name not config, we set to default \"%s\".\n", "TV", "AML-M2");
+ }
+
+ return 0;
+}
+
+static int ATVGetFacRestoreChanInfo(int *chan_cnt, int *item_cnt, int chan_data_buf[])
+{
+ int cfg_item_count = 0, tmpTotalItemCount = 0;
+ char *token = NULL;
+ const char *strDelimit = ",";
+ const char *key_str = "atv.fac.defchaninfo";
+ char prop_value[CC_CFG_VALUE_STR_MAX_LEN];
+
+ memset(prop_value, '\0', CC_CFG_VALUE_STR_MAX_LEN);
+
+ config_get(key_str, prop_value, "null");
+ if (strcasecmp(prop_value, "null") == 0) {
+ LOGE("%s, can't get config \"%s\"!!!\n", "TV", key_str);
+ *chan_cnt = 0;
+ *item_cnt = 0;
+ return -1;
+ }
+
+ tmpTotalItemCount = 0;
+
+ token = strtok(prop_value, strDelimit);
+ while (token != NULL) {
+ if (cfg_item_count == 0) {
+ *chan_cnt = strtoul(token, NULL, 10);
+ } else if (cfg_item_count == 1) {
+ *item_cnt = strtoul(token, NULL, 10);
+ } else if (cfg_item_count >= 2) {
+ chan_data_buf[tmpTotalItemCount] = strtoul(token, NULL, 10);
+ tmpTotalItemCount += 1;
+ }
+
+ token = strtok(NULL, strDelimit);
+ cfg_item_count += 1;
+ }
+
+ if ((*chan_cnt) * (*item_cnt) != tmpTotalItemCount) {
+ LOGE("%s, get item count error!!! should be %d, real is %d.\n", "TV", (*chan_cnt) * (*item_cnt), tmpTotalItemCount);
+ *chan_cnt = 0;
+ *item_cnt = 0;
+ return -1;
+ }
+
+ LOGD("%s, channel count = %d, channel item count = %d.\n", "TV", *chan_cnt, *item_cnt);
+
+ return 0;
+}
+
+static void PrintGPIOCfgData(int cfg_info_item_count, GPIOCFGInfo cfg_info_buf[])
+{
+ int i = 0;
+
+ LOGD("%s, cfg_info_item_count = %d\n", "TV", cfg_info_item_count);
+
+ for (i = 0; i < cfg_info_item_count; i++) {
+ LOGD("%s, %s %d %d %d\n", "TV", cfg_info_buf[i].gpio_grp_str, cfg_info_buf[i].gpio_addr, cfg_info_buf[i].gpio_val, !cfg_info_buf[i].gpio_val);
+ }
+
+ LOGD("\n");
+}
+
+static int GetWriteProtectGPIOCFG(char gpio_grp_str[], int *protect_gpio_addr, int *protect_on_val, int *protect_off_val)
+{
+ if (cfg_get_one_gpio_data("ssm.writeprotect.gpio", gpio_grp_str, protect_gpio_addr, protect_on_val) < 0) {
+ return -1;
+ }
+
+ *protect_off_val = !(*protect_on_val);
+
+ return 0;
+}
+
+#define CC_AMPLIFIER_ANALOG_MUTE_GPIO_CFG_NAME "audio.amp.analog.mute.gpio"
+#define CC_HEADSET_MUTE_GPIO_CFG_NAME "audio.headset.mute.gpio"
+#define CC_AVOUT_MUTE_GPIO_CFG_NAME "audio.avout.mute.gpio"
+
+static int GetAudioAnalogAmplifierMuteGPIOCFG(char gpio_grp_str[], int *mute_gpio_addr, int *mute_on_val, int *mute_off_val)
+{
+ if (cfg_get_one_gpio_data(CC_AMPLIFIER_ANALOG_MUTE_GPIO_CFG_NAME, gpio_grp_str, mute_gpio_addr, mute_on_val) < 0) {
+ return -1;
+ }
+
+ *mute_off_val = !(*mute_on_val);
+
+ return 0;
+}
+
+static int GetAudioHeadSetMuteGPIOCFG(char gpio_grp_str[], int *mute_gpio_addr, int *mute_on_val, int *mute_off_val)
+{
+ if (cfg_get_one_gpio_data(CC_HEADSET_MUTE_GPIO_CFG_NAME, gpio_grp_str, mute_gpio_addr, mute_on_val) < 0) {
+ return -1;
+ }
+
+ *mute_off_val = !(*mute_on_val);
+
+ return 0;
+}
+
+static int GetAudioAVOutMuteGPIOCFG(char gpio_grp_str[], int *mute_gpio_addr, int *mute_on_val, int *mute_off_val)
+{
+ if (cfg_get_one_gpio_data(CC_AVOUT_MUTE_GPIO_CFG_NAME, gpio_grp_str, mute_gpio_addr, mute_on_val) < 0) {
+ return -1;
+ }
+
+ //Some projects has been volume production. They may not use the newest code, so we do compatible for old config.
+ //old config 69,0,1
+ //new config x,69,0
+
+ if (gpio_grp_str[0] != 'x' || gpio_grp_str[0] != 'b' || gpio_grp_str[0] != 'd') {
+ *mute_gpio_addr = strtol(gpio_grp_str, NULL, 10);
+ gpio_grp_str[0] = 'x';
+ gpio_grp_str[1] = '\0';
+ *mute_off_val = *mute_on_val;
+ *mute_on_val = !(*mute_off_val);
+ } else {
+ *mute_off_val = !(*mute_on_val);
+ }
+
+ return 0;
+}
+
+#define PROPERTY_VALUE_MAX (92)
+
+typedef enum tvin_source_input_e {
+ SOURCE_TV,
+ SOURCE_AV1,
+ SOURCE_AV2,
+ SOURCE_YPBPR1,
+ SOURCE_YPBPR2,
+ SOURCE_HDMI1,
+ SOURCE_HDMI2,
+ SOURCE_HDMI3,
+ SOURCE_VGA,
+ SOURCE_MPEG,
+ SOURCE_DTV,
+ SOURCE_MAX,
+} tv_source_input_t;
+
+static int property_set(const char *key_value, char *prop_value)
+{
+ LOGD("%s, %s = %s\n", "TV", key_value, prop_value);
+ return 0;
+}