summaryrefslogtreecommitdiff
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/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;
}