Merge remote-tracking branch 'origin/main'

rtmpsuck
jxjajs 5 months ago
commit eb26477067

@ -5,7 +5,7 @@ plugins {
// 10,00,000 major-minor-build // 10,00,000 major-minor-build
def AppMajorVersion = 1 def AppMajorVersion = 1
def AppMinorVersion = 1 def AppMinorVersion = 1
def AppBuildNumber = 40 def AppBuildNumber = 47
def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber
def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber

@ -47,12 +47,11 @@ add_definitions(-DUSING_EXEC_HDRP=1)
set(USING_EXEC_HDRP 1) set(USING_EXEC_HDRP 1)
# add_definitions(-DUSING_PLZ)
if(ANDROID_ABI STREQUAL "armeabi-v7a") if(ANDROID_ABI STREQUAL "armeabi-v7a")
add_definitions(-DUSING_N938) add_definitions(-DUSING_N938)
elseif(ANDROID_ABI STREQUAL "arm64-v8a") elseif(ANDROID_ABI STREQUAL "arm64-v8a")
# add_definitions(-DUSING_N938) # add_definitions(-DUSING_N938)
add_definitions(-DUSING_PLZ)
endif() endif()
# include_directories(${OpenCV_DIR}/include) # include_directories(${OpenCV_DIR}/include)

@ -35,6 +35,7 @@ size_t GpioControl::turnOnImpl(const IOT_PARAM& param)
std::vector<ITEM>::iterator it; std::vector<ITEM>::iterator it;
int res = 0; int res = 0;
int fd = -1; int fd = -1;
time_t now = time(NULL);
fd = open(GPIO_NODE_MP, O_RDONLY); fd = open(GPIO_NODE_MP, O_RDONLY);
if( fd > 0 ) if( fd > 0 )
@ -47,16 +48,20 @@ size_t GpioControl::turnOnImpl(const IOT_PARAM& param)
if (it->cmd == param.cmd) if (it->cmd == param.cmd)
{ {
it->references++; it->references++;
it->closeTime = 0; // it->closeTime = 0;
references = it->references; references = it->references;
if(it->openTime == 0)
it->openTime = now;
SetCamerastatus(it->cmd, true); SetCamerastatus(it->cmd, true);
break; break;
} }
} }
if (it == m_items.end()) if (it == m_items.end())
{ {
ITEM item = {param.cmd, references, 0, 0}; ITEM item = {param.cmd, references, 0, 0, 0};
item.openTime = now;
m_items.push_back(item); m_items.push_back(item);
SetCamerastatus(param.cmd, true);
} }
} }
#ifdef _DEBUG #ifdef _DEBUG
@ -327,7 +332,10 @@ bool GpioControl::SetCamerastatus(int cmd, bool status)
#endif #endif
#ifdef USING_PLZ #ifdef USING_PLZ
if(cmd == CMD_SET_PTZ_PWR_ENABLE) if(cmd == CMD_SET_PTZ_PWR_ENABLE)
{
m_cameraPowerStatus = status; m_cameraPowerStatus = status;
}
#endif #endif
return true; return true;
} }
@ -336,6 +344,28 @@ bool GpioControl::GetCamerastatus()
return m_cameraPowerStatus; return m_cameraPowerStatus;
} }
bool GpioControl::GetSelftestStatus(time_t wait_time)
{
int cmd;
#ifdef USING_N938
cmd = CMD_SET_PIC1_POWER;
#endif
#ifdef USING_PLZ
cmd = CMD_SET_PTZ_PWR_ENABLE;
#endif
time_t now = time(NULL);
std::vector<ITEM>::iterator it;
for (it = m_items.begin(); it != m_items.end(); ++it)
{
if (it->cmd == cmd && (now - it->openTime >= wait_time))
{
return true;
}
}
return false;
}
void GpioControl::PowerControlThreadProc() void GpioControl::PowerControlThreadProc()
{ {
time_t ts = 0; time_t ts = 0;
@ -360,7 +390,7 @@ void GpioControl::PowerControlThreadProc()
if (it->references == 0 && it->closeCmds == 0 && it->closeTime == 0) if (it->references == 0 && it->closeCmds == 0 && it->closeTime == 0)
{ {
#ifdef _DEBUG #ifdef _DEBUG
ALOGI("PWR TH cmd=%d ref=%u closeCmds=%u", it->cmd, (uint32_t)it->references, (uint32_t)it->closeCmds); ALOGI("PWR THREAD cmd=%d ref=%u closeCmds=%u", it->cmd, (uint32_t)it->references, (uint32_t)it->closeCmds);
#endif #endif
continue; continue;
} }
@ -388,8 +418,9 @@ void GpioControl::PowerControlThreadProc()
// close it directly // close it directly
setInt(it->cmd, 0); setInt(it->cmd, 0);
it->closeTime = 0; it->closeTime = 0;
it->openTime = 0;
#ifdef _DEBUG #ifdef _DEBUG
ALOGI("PWR TH DO TurnOff cmd=%d", it->cmd); ALOGI("PWR THREAD DO TurnOff cmd=%d", it->cmd);
#endif #endif
SetCamerastatus(it->cmd, false); SetCamerastatus(it->cmd, false);
} }
@ -404,7 +435,7 @@ void GpioControl::PowerControlThreadProc()
} }
} }
#ifdef _DEBUG #ifdef _DEBUG
ALOGI("PWR TH cmd=%d ref=%u closeCmds=%u", it->cmd, (uint32_t)it->references, (uint32_t)it->closeCmds); ALOGI("PWR THREAD cmd=%d ref=%u closeCmds=%u", it->cmd, (uint32_t)it->references, (uint32_t)it->closeCmds);
#endif #endif
} }
m_locker.unlock(); m_locker.unlock();

@ -26,16 +26,16 @@
#define CMD_SET_NETWORK_STATE 106 #define CMD_SET_NETWORK_STATE 106
#define CMD_SET_OTG_STATE 107 #define CMD_SET_OTG_STATE 107
#define CMD_GET_OTG_STATE 108 #define CMD_GET_OTG_STATE 108
#define CMD_GET_CHARGING_VOL_STATE 110 //#define CMD_GET_CHARGING_VOL_STATE 110
#define CMD_GET_CHARGING_SHUNT_VOLTAGE_STATE 111 //#define CMD_GET_CHARGING_SHUNT_VOLTAGE_STATE 111
#define CMD_GET_CHARGING_BUS_VOLTAGE_STATE 112 #define CMD_GET_CHARGING_BUS_VOLTAGE_STATE 112
#define CMD_GET_CHARGING_POWER_STATE 113 //#define CMD_GET_CHARGING_POWER_STATE 113
#define CMD_GET_CHARGING_CURRENT_STATE 114 //#define CMD_GET_CHARGING_CURRENT_STATE 114
#define CMD_GET_BAT_VOL_STATE 115 //#define CMD_GET_BAT_VOL_STATE 115
#define CMD_GET_BAT_SHUNT_VOLTAGE_STATE 116 //#define CMD_GET_BAT_SHUNT_VOLTAGE_STATE 116
#define CMD_GET_BAT_BUS_VOLTAGE_STATE 117 #define CMD_GET_BAT_BUS_VOLTAGE_STATE 117
#define CMD_GET_BAT_POWER_STATE 118 //#define CMD_GET_BAT_POWER_STATE 118
#define CMD_GET_BAT_CURRENT_STATE 119 //#define CMD_GET_BAT_CURRENT_STATE 119
#define CMD_SET_485_STATE 121 #define CMD_SET_485_STATE 121
#define CMD_SET_SPI_MODE 123 #define CMD_SET_SPI_MODE 123
#define CMD_SET_SPI_BITS_PER_WORD 124 #define CMD_SET_SPI_BITS_PER_WORD 124
@ -56,18 +56,13 @@
#define CMD_GET_OTG_STATE 108 #define CMD_GET_OTG_STATE 108
#define CMD_SET_SPI_POWER 129 #define CMD_SET_SPI_POWER 129
#define CMD_SET_12V_EN_STATE 0 // TO BE ADDED #define CMD_SET_12V_EN_STATE 0 // TO BE ADDED
#define CMD_SET_SYSTEM_RESET 0 // TO BE ADDED #define CMD_SET_SYSTEM_RESET 202
#define CMD_GET_CHARGING_VOL_STATE 0 // TO BE ADDED #define CMD_GET_LIGHT_ADC 101
#define CMD_GET_CHARGING_SHUNT_VOLTAGE_STATE 0 // TO BE ADDED #define CMD_SET_LIGHT_ADC 102
#define CMD_GET_CHARGING_BUS_VOLTAGE_STATE 0 // TO BE ADDED #define CMD_GET_CHARGING_BUS_VOLTAGE_STATE 112
#define CMD_GET_CHARGING_POWER_STATE 0 // TO BE ADDED #define CMD_GET_BAT_BUS_VOLTAGE_STATE 117
#define CMD_GET_CHARGING_CURRENT_STATE 0 // TO BE ADDED
#define CMD_GET_BAT_VOL_STATE 0 // TO BE ADDED
#define CMD_GET_BAT_SHUNT_VOLTAGE_STATE 0 // TO BE ADDED
#define CMD_GET_BAT_BUS_VOLTAGE_STATE 0 // TO BE ADDED
#define CMD_GET_BAT_POWER_STATE 0 // TO BE ADDED
#define CMD_GET_BAT_CURRENT_STATE 0 // TO BE ADDED
#define CMD_SET_SPI_MODE 0 // TO BE ADDED #define CMD_SET_SPI_MODE 0 // TO BE ADDED
#define CMD_SET_SPI_BITS_PER_WORD 0 // TO BE ADDED #define CMD_SET_SPI_BITS_PER_WORD 0 // TO BE ADDED
#define CMD_SET_SPI_MAXSPEEDHZ 0 // TO BE ADDED #define CMD_SET_SPI_MAXSPEEDHZ 0 // TO BE ADDED
@ -132,6 +127,9 @@
#define CMD_SET_485_EN_STATE 131 #define CMD_SET_485_EN_STATE 131
#define CMD_SET_OTG_STATE 107 #define CMD_SET_OTG_STATE 107
#define CMD_GET_CHARGING_BUS_VOLTAGE_STATE 112
#define CMD_GET_BAT_BUS_VOLTAGE_STATE 117
#endif // USING_N938 #endif // USING_N938
@ -156,6 +154,7 @@ public:
size_t references; size_t references;
size_t closeCmds; size_t closeCmds;
time_t closeTime; time_t closeTime;
time_t openTime;
}; };
private: private:
@ -181,6 +180,7 @@ public:
static size_t TurnOffImmediately(int cmd); static size_t TurnOffImmediately(int cmd);
static bool SetCamerastatus(int cmd, bool status); static bool SetCamerastatus(int cmd, bool status);
static bool GetCamerastatus(); static bool GetCamerastatus();
static bool GetSelftestStatus(time_t wait_time);
static void PowerControlThreadProc(); static void PowerControlThreadProc();
@ -320,12 +320,13 @@ public:
static int getChargingVoltage() static int getChargingVoltage()
{ {
#ifndef USING_N938 #ifndef USING_N938
return getInt(CMD_GET_CHARGING_VOL_STATE); return getInt(CMD_GET_CHARGING_BUS_VOLTAGE_STATE);
#else #else
return -1; return -1;
#endif #endif
} }
#if 0
static int getChargingShuntVoltage() static int getChargingShuntVoltage()
{ {
#ifndef USING_N938 #ifndef USING_N938
@ -334,6 +335,7 @@ public:
return -1; return -1;
#endif #endif
} }
#endif
static int getChargingBusVoltage() { static int getChargingBusVoltage() {
#ifndef USING_N938 #ifndef USING_N938
@ -343,6 +345,7 @@ public:
#endif #endif
} }
#if 0
static int getChargingPower() { static int getChargingPower() {
#ifndef USING_N938 #ifndef USING_N938
return getInt(CMD_GET_CHARGING_POWER_STATE); return getInt(CMD_GET_CHARGING_POWER_STATE);
@ -358,15 +361,13 @@ public:
return -1; return -1;
#endif #endif
} }
#endif
static int getBatteryVoltage() { static int getBatteryVoltage() {
#ifndef USING_N938 return getInt(CMD_GET_BAT_BUS_VOLTAGE_STATE);
return getInt(CMD_GET_BAT_VOL_STATE);
#else
return -1;
#endif
} }
#if 0
static int getBatteryShuntVoltage() { static int getBatteryShuntVoltage() {
#ifndef USING_N938 #ifndef USING_N938
return getInt(CMD_GET_BAT_SHUNT_VOLTAGE_STATE); return getInt(CMD_GET_BAT_SHUNT_VOLTAGE_STATE);
@ -374,15 +375,13 @@ public:
return -1; return -1;
#endif #endif
} }
#endif
static int getBatteryBusVoltage() { static int getBatteryBusVoltage() {
#ifndef USING_N938
return getInt(CMD_GET_BAT_BUS_VOLTAGE_STATE); return getInt(CMD_GET_BAT_BUS_VOLTAGE_STATE);
#else
return -1;
#endif
} }
#if 0
static int getBatteryPower() { static int getBatteryPower() {
#ifndef USING_N938 #ifndef USING_N938
return getInt(CMD_GET_BAT_POWER_STATE); return getInt(CMD_GET_BAT_POWER_STATE);
@ -398,6 +397,7 @@ public:
return -1; return -1;
#endif #endif
} }
#endif
static void set485WriteMode() { static void set485WriteMode() {
#if 0 #if 0
@ -463,7 +463,7 @@ public:
m_cmds.resize(4, cmd1); m_cmds.resize(4, cmd1);
m_cmds[1] = cmd2; m_cmds[1] = cmd2;
m_cmds[2] = cmd3; m_cmds[2] = cmd3;
m_cmds[3] = cmd3; m_cmds[3] = cmd4;
TurnOn(); TurnOn();
} }
PowerControl(int cmd1, int cmd2, int cmd3, int cmd4, int cmd5, uint32_t closeDelayTime) : m_delayCloseTime(closeDelayTime) PowerControl(int cmd1, int cmd2, int cmd3, int cmd4, int cmd5, uint32_t closeDelayTime) : m_delayCloseTime(closeDelayTime)
@ -471,8 +471,30 @@ public:
m_cmds.resize(5, cmd1); m_cmds.resize(5, cmd1);
m_cmds[1] = cmd2; m_cmds[1] = cmd2;
m_cmds[2] = cmd3; m_cmds[2] = cmd3;
m_cmds[3] = cmd3; m_cmds[3] = cmd4;
m_cmds[4] = cmd4; m_cmds[4] = cmd5;
TurnOn();
}
PowerControl(int cmd1, int cmd2, int cmd3, int cmd4, int cmd5, int cmd6, uint32_t closeDelayTime) : m_delayCloseTime(closeDelayTime)
{
m_cmds.resize(6, cmd1);
m_cmds[1] = cmd2;
m_cmds[2] = cmd3;
m_cmds[3] = cmd4;
m_cmds[4] = cmd5;
m_cmds[5] = cmd6;
TurnOn();
}
PowerControl(int cmd1, int cmd2, int cmd3, int cmd4, int cmd5, int cmd6, int cmd7, uint32_t closeDelayTime) : m_delayCloseTime(closeDelayTime)
{
m_cmds.resize(7, cmd1);
m_cmds[1] = cmd2;
m_cmds[2] = cmd3;
m_cmds[3] = cmd4;
m_cmds[4] = cmd5;
m_cmds[5] = cmd6;
m_cmds[6] = cmd7;
TurnOn(); TurnOn();
} }
@ -534,7 +556,7 @@ public:
PowerControl(CMD_SET_OTG_STATE, CMD_SET_NETWORK_POWER_EN, CMD_SET_PIC1_POWER, CMD_SET_485_EN_STATE, closeDelayTime) PowerControl(CMD_SET_OTG_STATE, CMD_SET_NETWORK_POWER_EN, CMD_SET_PIC1_POWER, CMD_SET_485_EN_STATE, closeDelayTime)
#else // USING_N938 #else // USING_N938
#ifdef USING_PLZ #ifdef USING_PLZ
PowerControl(CMD_SET_OTG_STATE, CMD_SET_PTZ_PWR_ENABLE, CMD_SET_100M_ENABLE, CMD_SET_100M_SWITCH_PWR_ENABLE, CMD_SET_12V_EN_STATE, closeDelayTime) PowerControl(CMD_SET_3V3_PWR_EN, CMD_SET_OTG_STATE, CMD_SET_PTZ_PWR_ENABLE, CMD_SET_100M_ENABLE, CMD_SET_100M_SWITCH_PWR_ENABLE, CMD_SET_485_ENABLE, CMD_SET_12V_EN_STATE, closeDelayTime)
#else // USING_PLZ #else // USING_PLZ
PowerControl(CMD_SET_OTG_STATE, CMD_SET_12V_EN_STATE, closeDelayTime) PowerControl(CMD_SET_OTG_STATE, CMD_SET_12V_EN_STATE, closeDelayTime)
#endif // USING_PLZ #endif // USING_PLZ

@ -970,6 +970,7 @@ bool CPhoneDevice::QuerySystemProperties(std::map<std::string, std::string>& pro
int val = GpioControl::getLightAdc(); int val = GpioControl::getLightAdc();
it->second = std::to_string(val); it->second = std::to_string(val);
} }
#if 0
else if (it->first == (PROP_CHARGING_CURRENT)) else if (it->first == (PROP_CHARGING_CURRENT))
{ {
it->second = std::to_string(GpioControl::getChargingCurrent()); it->second = std::to_string(GpioControl::getChargingCurrent());
@ -978,6 +979,7 @@ bool CPhoneDevice::QuerySystemProperties(std::map<std::string, std::string>& pro
{ {
it->second = std::to_string(GpioControl::getChargingPower()); it->second = std::to_string(GpioControl::getChargingPower());
} }
#endif
else if (it->first == (PROP_CHARGING_BUS_VOL) || it->first == (PROP_CHARGING_VOLTAGE)) else if (it->first == (PROP_CHARGING_BUS_VOL) || it->first == (PROP_CHARGING_VOLTAGE))
{ {
double val = -1; double val = -1;
@ -994,10 +996,12 @@ bool CPhoneDevice::QuerySystemProperties(std::map<std::string, std::string>& pro
break; break;
} }
} }
#if 0
else if (it->first == (PROP_BATTERY_POWER)) else if (it->first == (PROP_BATTERY_POWER))
{ {
it->second = std::to_string(GpioControl::getBatteryPower()); it->second = std::to_string(GpioControl::getBatteryPower());
} }
#endif
else if (it->first == (PROP_BATTERY_BUS_VOL) || it->first == (PROP_BATTERY_VOLTAGE)) else if (it->first == (PROP_BATTERY_BUS_VOL) || it->first == (PROP_BATTERY_VOLTAGE))
{ {
int val = QueryBatteryVoltage(DEFAULT_BATTERY_QUERY_RETRIES); // // BatVol int val = QueryBatteryVoltage(DEFAULT_BATTERY_QUERY_RETRIES); // // BatVol
@ -1487,8 +1491,11 @@ bool CPhoneDevice::TakePhotoWithNetCamera(IDevice::PHOTO_INFO& localPhotoInfo, c
// AutoEnv autoEnv(pThis->m_vm); // AutoEnv autoEnv(pThis->m_vm);
time_t ts = time(NULL); time_t ts = time(NULL);
uint32_t waitTime = localPhotoInfo.selfTestingTime; uint32_t waitTime = localPhotoInfo.selfTestingTime;
waitTime = (waitTime!= 0) ? (waitTime * 1024) : 10240; if(!GpioControl::GetSelftestStatus(waitTime))
std::this_thread::sleep_for(std::chrono::milliseconds(waitTime)); {
waitTime = (waitTime != 0) ? (waitTime * 1024) : 10240;
std::this_thread::sleep_for(std::chrono::milliseconds(waitTime));
}
SetStaticIp(); SetStaticIp();
std::this_thread::sleep_for(std::chrono::milliseconds(256)); std::this_thread::sleep_for(std::chrono::milliseconds(256));
@ -1526,7 +1533,7 @@ bool CPhoneDevice::TakePhotoWithNetCamera(IDevice::PHOTO_INFO& localPhotoInfo, c
{ {
// Hai Kang // Hai Kang
netPhotoInfo.authType = HTTP_AUTH_TYPE_DIGEST; netPhotoInfo.authType = HTTP_AUTH_TYPE_DIGEST;
snprintf(netPhotoInfo.url, sizeof(netPhotoInfo.url), "/ISAPI/Streaming/channels/%u/picture", (uint32_t)localPhotoInfo.channel); snprintf(netPhotoInfo.url, sizeof(netPhotoInfo.url), "/ISAPI/Streaming/channels/%u/picture", (uint32_t)localPhotoInfo.cameraId);
} }
else if (localPhotoInfo.vendor == 2) else if (localPhotoInfo.vendor == 2)
{ {
@ -1538,7 +1545,7 @@ bool CPhoneDevice::TakePhotoWithNetCamera(IDevice::PHOTO_INFO& localPhotoInfo, c
// Yu Shi // Yu Shi
netPhotoInfo.authType = HTTP_AUTH_TYPE_DIGEST; netPhotoInfo.authType = HTTP_AUTH_TYPE_DIGEST;
int streamSid = 0; // should put into config int streamSid = 0; // should put into config
snprintf(netPhotoInfo.url, sizeof(netPhotoInfo.url), "/LAPI/V1.0/Channels/%u/Media/Video/Streams/%d/Snapshot", (uint32_t)localPhotoInfo.channel, streamSid); snprintf(netPhotoInfo.url, sizeof(netPhotoInfo.url), "/LAPI/V1.0/Channels/%u/Media/Video/Streams/%d/Snapshot", (uint32_t)localPhotoInfo.cameraId, streamSid);
} }
else if (localPhotoInfo.vendor == 5) else if (localPhotoInfo.vendor == 5)
{ {
@ -1547,7 +1554,7 @@ bool CPhoneDevice::TakePhotoWithNetCamera(IDevice::PHOTO_INFO& localPhotoInfo, c
// http://192.168.1.46/Snapshot/%u/RemoteImageCapture?ImageFormat=2&HorizontalPixel=1920&VerticalPixel=1080 // http://192.168.1.46/Snapshot/%u/RemoteImageCapture?ImageFormat=2&HorizontalPixel=1920&VerticalPixel=1080
// http://192.168.1.101/Snapshot/1/2/RemoteImageCaptureV2?ImageFormat=jpg // http://192.168.1.101/Snapshot/1/2/RemoteImageCaptureV2?ImageFormat=jpg
// http://192.168.1.101/Snapshot/1/1/RemoteImageCaptureV2?ImageFormat=jpg // http://192.168.1.101/Snapshot/1/1/RemoteImageCaptureV2?ImageFormat=jpg
snprintf(netPhotoInfo.url, sizeof(netPhotoInfo.url), "/Snapshot/%u/1/RemoteImageCaptureV2?ImageFormat=jpg", (uint32_t)localPhotoInfo.channel); snprintf(netPhotoInfo.url, sizeof(netPhotoInfo.url), "/Snapshot/%u/1/RemoteImageCaptureV2?ImageFormat=jpg", (uint32_t)localPhotoInfo.cameraId);
} }
else else
{ {
@ -3421,6 +3428,8 @@ bool CPhoneDevice::PostProcessPhoto(const PHOTO_INFO& photoInfo, const vector<ID
cv::Point lt(0, mat.rows - fs - 20 * ratio); cv::Point lt(0, mat.rows - fs - 20 * ratio);
cv::Point lt2(0, lt.y - 2 * ratio); cv::Point lt2(0, lt.y - 2 * ratio);
cv::Point rb(0 + textSize.width + 2 * ratio, lt2.y + textSize.height + 8 * ratio); cv::Point rb(0 + textSize.width + 2 * ratio, lt2.y + textSize.height + 8 * ratio);
cv::Point rt(0 + textSize.width + 2 * ratio, mat.rows - fs - 20 * ratio);
if (rb.x > (int)width - 1) if (rb.x > (int)width - 1)
{ {
@ -3467,6 +3476,16 @@ bool CPhoneDevice::PostProcessPhoto(const PHOTO_INFO& photoInfo, const vector<ID
} }
else if (it->alignment == OSD_ALIGNMENT_TOP_RIGHT) else if (it->alignment == OSD_ALIGNMENT_TOP_RIGHT)
{ {
std::size_t newlinePos = it->text.find('\n');
if (newlinePos != std::string::npos)
{
std::string textBeforeNewline = it->text.substr(0, newlinePos);
std::string textAfterNewline = it->text.substr(newlinePos + 1);
if(textBeforeNewline.length()>=textAfterNewline.length())
textSize = ft2->getTextSize(textBeforeNewline, fontSize, thickness, &baseline);
else
textSize = ft2->getTextSize(textAfterNewline, fontSize, thickness, &baseline);
}
pt.x = width - textSize.width - it->x * ratio; pt.x = width - textSize.width - it->x * ratio;
pt.y= it->y * ratio; pt.y= it->y * ratio;
} }
@ -3746,10 +3765,12 @@ void CPhoneDevice::CameraCtrl(unsigned short waitTime, unsigned short delayTime,
std::thread ctrlThread([pThis, waitTime, delayTime, cmdidx, channel, preset, serfileStr, baud, std::thread ctrlThread([pThis, waitTime, delayTime, cmdidx, channel, preset, serfileStr, baud,
addr]() mutable { addr]() mutable {
uint64_t wid = pThis->RequestWakelock(0); uint64_t wid = pThis->RequestWakelock(0);
XYLOG(XYLOG_SEVERITY_INFO,"CameraCtrl Command= %d, preset = %u", cmdidx, preset);
pThis->OpenPTZSensors(waitTime); pThis->OpenPTZSensors(waitTime);
CameraPhotoCmd(time(NULL), channel, cmdidx, 0, preset, serfileStr.c_str(), baud, CameraPhotoCmd(time(NULL), channel, cmdidx, 0, preset, serfileStr.c_str(), baud,
addr); addr);
pThis->ClosePTZSensors(delayTime); pThis->ClosePTZSensors(delayTime);
XYLOG(XYLOG_SEVERITY_INFO,"CameraCtrl over");
pThis->ReleaseWakelock(wid); pThis->ReleaseWakelock(wid);
}); });
ctrlThread.detach(); ctrlThread.detach();

@ -2969,7 +2969,7 @@ void ShxyProtocolDataProcess(int devno)
int i, j, aipnt, datanum; int i, j, aipnt, datanum;
SERIAL_DEV_DEF *pPortParam; SERIAL_DEV_DEF *pPortParam;
SIO_PARAM_SERIAL_DEF *curserial; SIO_PARAM_SERIAL_DEF *curserial;
char szbuf[64]; char szbuf[128];
pPortParam = &srdt.ms_dev[devno]; pPortParam = &srdt.ms_dev[devno];
curserial = &serialport[devparam[devno].commid]; curserial = &serialport[devparam[devno].commid];

@ -81,7 +81,7 @@ static void onSessionReady(void* context, ACameraCaptureSession *session)
static void onSessionClosed(void* context, ACameraCaptureSession *session) static void onSessionClosed(void* context, ACameraCaptureSession *session)
{ {
XYLOG(XYLOG_SEVERITY_INFO, "onSessionClosed %p", session); XYLOG(XYLOG_SEVERITY_DEBUG, "onSessionClosed %p", session);
} }
void onCaptureFailed(void* context, ACameraCaptureSession* session, ACaptureRequest* request, ACameraCaptureFailure* failure) void onCaptureFailed(void* context, ACameraCaptureSession* session, ACaptureRequest* request, ACameraCaptureFailure* failure)
@ -164,6 +164,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA
mHeight = height; mHeight = height;
mCaptureTriggered = false; mCaptureTriggered = false;
mFocusTriggered = false;
maxFrameDuration = 0; maxFrameDuration = 0;
afSupported = false; afSupported = false;
@ -732,201 +733,6 @@ int NdkCamera::open(const std::string& cameraId) {
CaptureRequest *request = CreateRequest(true); CaptureRequest *request = CreateRequest(true);
mCaptureRequests.push_back(request); mCaptureRequests.push_back(request);
#if 0
for (int idx = 0; idx <= burstCaptures; idx++)
{
CaptureRequest *request = new CaptureRequest();
std::memset(request, 0, sizeof(CaptureRequest));
bool isPreviewRequest = (idx == PREVIEW_REQUEST_IDX);
request->pThis = this;
request->imageReader = isPreviewRequest ? mPreviewImageReader : mImageReader;
request->imageWindow = isPreviewRequest ? mPreviewImageWindow : mImageWindow;
request->imageTarget = isPreviewRequest ? mPreviewOutputTarget : mOutputTarget;
request->templateId = isPreviewRequest ? TEMPLATE_PREVIEW : (ACameraDevice_request_template)m_params.requestTemplate;
// capture request
status = ACameraDevice_createCaptureRequest(camera_device, request->templateId, &request->request);
ACaptureRequest_setUserContext(request->request, request);
// uint8_t ctrlMode = sceneModeSupported ? ACAMERA_CONTROL_MODE_USE_SCENE_MODE : ACAMERA_CONTROL_MODE_AUTO;
uint8_t ctrlMode = ACAMERA_CONTROL_MODE_AUTO;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_MODE, 1, &ctrlMode);
uint8_t captureIntent = isPreviewRequest ? ACAMERA_CONTROL_CAPTURE_INTENT_PREVIEW : GetCaptureIntent(ACameraDevice_request_template)m_params.requestTemplate);
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_CAPTURE_INTENT, 1, &captureIntent);
uint8_t flashMode = ACAMERA_FLASH_MODE_OFF;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_FLASH_MODE, 1, &flashMode);
uint8_t nrMode = ACAMERA_NOISE_REDUCTION_MODE_HIGH_QUALITY;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_NOISE_REDUCTION_MODE, 1, &nrMode);
uint8_t edgeMode = ACAMERA_EDGE_MODE_FAST;
// status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_EDGE_MODE, 1, &edgeMode);
if (afSupported && m_params.autoFocus)
{
if (!m_params.zoom)
{
if (maxRegions[2] > 0)
{
int32_t centerX = activeArraySize[0] >> 1;
int32_t centerY = activeArraySize[1] >> 1;
int32_t sizeX = activeArraySize[0] >> 4;
int32_t sizeY = activeArraySize[1] >> 4;
int32_t afRegions[] = { centerX - sizeX, centerY - sizeY, centerX + sizeX, centerY + sizeY, 1000 };
// status = ACaptureRequest_setEntry_i32(request->request, ACAMERA_CONTROL_AF_REGIONS, 5, afRegions);
if (status == ACAMERA_OK)
{
#ifdef _DEBUG
int aa = 0;
#endif
}
}
// uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_VIDEO;
uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_PICTURE;
// uint8_t afMode = ACAMERA_CONTROL_AF_MODE_AUTO;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_MODE, 1, &afMode);
// uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_CANCEL;
// status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig);
trig = ACAMERA_CONTROL_AF_TRIGGER_START;
// status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig);
}
}
else
{
uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_START;
// status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig);
}
if (m_params.sceneMode != 0)
{
uint8_t sceneMode = m_params.sceneMode;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode);
}
if (m_params.autoExposure)
{
uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_ON;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode);
// ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity_);
if ((aeCompensationRange.min_ != 0 || aeCompensationRange.max_ != 0) && m_params.compensation != 0)
{
int32_t compensation = m_params.compensation;
if (compensation < aeCompensationRange.min_)
{
compensation = aeCompensationRange.min_;
}
if (compensation > aeCompensationRange.max_)
{
compensation = aeCompensationRange.max_;
}
// int32_t aeCompensation = aeCompensationRange.max_;
status = ACaptureRequest_setEntry_i32(request->request, ACAMERA_CONTROL_AE_EXPOSURE_COMPENSATION, 1, &compensation);
if (status != ACAMERA_OK)
{
int aa = 0;
}
}
if (maxRegions[0] > 0)
{
int32_t aeRegions[] = { 0, 0, activeArraySize[0] - 1, activeArraySize[1] - 1, 1000 };
// status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AE_REGIONS, 5, aeRegions);
if (status == ACAMERA_OK)
{
#ifdef _DEBUG
int aa = 0;
#endif
}
}
if (isPreviewRequest)
{
if (aeLockAvailable && (m_params.wait3ALocked & WAIT_AE_LOCKED))
{
uint8_t aeLock = ACAMERA_CONTROL_AE_LOCK_ON;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AE_LOCK, 1, &aeLock);
XYLOG(XYLOG_SEVERITY_DEBUG, "Try to Lock AE");
mResult.aeLockSetted = 1;
}
else
{
uint8_t aeLock = ACAMERA_CONTROL_AE_LOCK_OFF;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AE_LOCK, 1, &aeLock);
XYLOG(XYLOG_SEVERITY_DEBUG, "AE_Lock Not Supported");
}
uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger);
XYLOG(XYLOG_SEVERITY_DEBUG, "Trigger PRECAPTURE status=%d", (int)status);
m_precaptureStartTime = m_startTime;
// ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_LOCK, 1, &aeLockOff);
}
}
else
{
uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_OFF;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode);
if (m_params.sensitivity > 0)
{
int32_t sensitivity = m_params.sensitivity;
status = ACaptureRequest_setEntry_i32(request->request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity);
}
if (m_params.exposureTime > 0)
{
int64_t exposureTime = m_params.exposureTime;
status = ACaptureRequest_setEntry_i64(request->request, ACAMERA_SENSOR_EXPOSURE_TIME, 1, &exposureTime);
}
int64_t frameDuration = maxFrameDuration / 2;
// status = ACaptureRequest_setEntry_i64(request->request, ACAMERA_SENSOR_FRAME_DURATION, 1, &frameDuration);
}
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AWB_MODE, 1, &awbMode);
if ((awbMode == ACAMERA_CONTROL_AWB_MODE_AUTO) && awbLockAvailable && (m_params.wait3ALocked & WAIT_AWB_LOCKED))
{
uint8_t awbLock = ACAMERA_CONTROL_AWB_LOCK_ON;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AWB_LOCK, 1, &awbLock);
mResult.awbLockSetted = 1;
XYLOG(XYLOG_SEVERITY_DEBUG, "Try to Lock AWB AWBS=%u", (unsigned int)mResult.awbState);
}
#if 0
uint8_t antiBandingMode = ACAMERA_CONTROL_AE_ANTIBANDING_MODE_60HZ;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AE_ANTIBANDING_MODE, 1, &antiBandingMode);
uint8_t flicker = ACAMERA_STATISTICS_SCENE_FLICKER_60HZ;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_STATISTICS_SCENE_FLICKER, 1, &flicker);
#endif
if (m_params.zoom)
{
float zoomRatio = m_params.zoomRatio;
// uint8_t afMode = ACAMERA_CONTROL_AF_MODE_AUTO;
status = ACaptureRequest_setEntry_float(request->request, ACAMERA_CONTROL_ZOOM_RATIO, 1, &zoomRatio);
if (status != ACAMERA_OK)
{
}
}
status = ACaptureRequest_addTarget(request->request, request->imageTarget);
status = ACaptureSessionOutput_create(request->imageWindow, &request->sessionOutput);
status = ACaptureSessionOutputContainer_add(capture_session_output_container, request->sessionOutput);
}
#endif
// capture session // capture session
ACameraCaptureSession_stateCallbacks camera_capture_session_state_callbacks; ACameraCaptureSession_stateCallbacks camera_capture_session_state_callbacks;
@ -1023,14 +829,18 @@ NdkCamera::CaptureRequest* NdkCamera::CreateRequest(bool isPreviewRequest)
// uint8_t afMode = ACAMERA_CONTROL_AF_MODE_AUTO; // uint8_t afMode = ACAMERA_CONTROL_AF_MODE_AUTO;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_MODE, 1, &afMode); status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_MODE, 1, &afMode);
#if 0
// For ACAMERA_CONTROL_AF_MODE_CONTINUOUS_PICTURE, we SHOULD NOT call ACAMERA_CONTROL_AF_TRIGGER_START
// Refer to: https://source.android.google.cn/docs/core/camera/camera3_3Amodes?hl=zh-cn
if (isPreviewRequest) if (isPreviewRequest)
{ {
uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_CANCEL; // uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_CANCEL;
// status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); // status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig);
trig = ACAMERA_CONTROL_AF_TRIGGER_START; // trig = ACAMERA_CONTROL_AF_TRIGGER_START;
status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); // status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig);
} }
#endif
} }
} }
else else
@ -1163,6 +973,11 @@ NdkCamera::CaptureRequest* NdkCamera::CreateRequest(bool isPreviewRequest)
return request; return request;
} }
void NdkCamera::DestroyRequest(CaptureRequest* request)
{
}
void NdkCamera::close() void NdkCamera::close()
{ {
XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::try close %s", mCameraId.c_str()); XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::try close %s", mCameraId.c_str());
@ -1724,8 +1539,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val); status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val);
afState = (status == ACAMERA_OK) ? *(val.data.u8) : ACAMERA_CONTROL_AF_STATE_INACTIVE; afState = (status == ACAMERA_OK) ? *(val.data.u8) : ACAMERA_CONTROL_AF_STATE_INACTIVE;
// XYLOG(XYLOG_SEVERITY_DEBUG, "Preview State AFS=%u AES=%u AWBS=%u Time=%u", // XYLOG(XYLOG_SEVERITY_DEBUG, "Preview State AFS=%u AES=%u AWBS=%u Time=%u", (unsigned int)afState, (unsigned int)aeState, (unsigned int)awbState, (unsigned int)(ts - m_startTime));
// (unsigned int)afState, (unsigned int)aeState, (unsigned int)awbState, (unsigned int)(ts - m_startTime));
// Check if timeout // Check if timeout
if (ts - m_startTime < m_params.focusTimeout) if (ts - m_startTime < m_params.focusTimeout)
@ -1749,8 +1563,8 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
*/ */
if (afState != ACAMERA_CONTROL_AF_STATE_PASSIVE_FOCUSED && if (afState != ACAMERA_CONTROL_AF_STATE_PASSIVE_FOCUSED &&
afState != ACAMERA_CONTROL_AF_STATE_FOCUSED_LOCKED && afState != ACAMERA_CONTROL_AF_STATE_FOCUSED_LOCKED/* &&
afState != ACAMERA_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED) afState != ACAMERA_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED*/)
// if (afState != ACAMERA_CONTROL_AF_STATE_INACTIVE) // if (afState != ACAMERA_CONTROL_AF_STATE_INACTIVE)
{ {
//XYLOG(XYLOG_SEVERITY_DEBUG, "AF Enabled And Focused"); //XYLOG(XYLOG_SEVERITY_DEBUG, "AF Enabled And Focused");
@ -1767,7 +1581,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START;
status = ACaptureRequest_setEntry_u8(request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); status = ACaptureRequest_setEntry_u8(request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger);
//XYLOG(XYLOG_SEVERITY_DEBUG, "Trigger PRECAPTURE status=%d AES=%u", (int)status, (unsigned int)mResult.aeState); //XYLOG(XYLOG_SEVERITY_DEBUG, "Trigger PRECAPTURE status=%d AES=%u", (int)status, (unsigned int)aeState);
AASSERT(status == ACAMERA_OK, "Failed to call PRECAPTURE_TRIGGER, status=%d", status); AASSERT(status == ACAMERA_OK, "Failed to call PRECAPTURE_TRIGGER, status=%d", status);
readyForCapture = false; readyForCapture = false;
@ -1894,11 +1708,10 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque
status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_SENSITIVITY, &val); status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_SENSITIVITY, &val);
int sensitivity = (status == ACAMERA_OK) ? *(val.data.i32) : 0; int sensitivity = (status == ACAMERA_OK) ? *(val.data.i32) : 0;
uint8_t aeModeOff = ACAMERA_CONTROL_AE_MODE_OFF;
XYLOG(XYLOG_SEVERITY_INFO, "HDR: Base Exp=%lld ISO=%d", exTime / 1000, sensitivity); XYLOG(XYLOG_SEVERITY_INFO, "HDR: Base Exp=%lld ISO=%d", exTime / 1000, sensitivity);
if (exTime != -1 && sensitivity > 0) if (exTime != -1 && sensitivity > 0)
{ {
uint8_t aeModeOff = ACAMERA_CONTROL_AE_MODE_OFF;
for (int idx = 0; idx < burstCaptures; idx++) for (int idx = 0; idx < burstCaptures; idx++)
{ {
ACaptureRequest_setEntry_u8(requests[idx], ACAMERA_CONTROL_AE_MODE, 1, &aeModeOff); ACaptureRequest_setEntry_u8(requests[idx], ACAMERA_CONTROL_AE_MODE, 1, &aeModeOff);

@ -161,6 +161,7 @@ public:
void CreateSession(ANativeWindow* previewWindow); void CreateSession(ANativeWindow* previewWindow);
CaptureRequest* CreateRequest(bool isPreviewRequest); CaptureRequest* CreateRequest(bool isPreviewRequest);
void DestroyRequest(CaptureRequest* request);
void DestroySession(); void DestroySession();
@ -234,6 +235,7 @@ protected:
int32_t maxRegions[3]; int32_t maxRegions[3];
bool mCaptureTriggered; bool mCaptureTriggered;
bool mFocusTriggered;
CAPTURE_RESULT mResult; CAPTURE_RESULT mResult;
unsigned long long m_startTime; unsigned long long m_startTime;

@ -50,9 +50,12 @@ public:
Halide::Runtime::Buffer<uint16_t> imgs = burst.ToBuffer(); Halide::Runtime::Buffer<uint16_t> imgs = burst.ToBuffer();
if (imgs.dimensions() != 3 || imgs.extent(2) < 2) { if (imgs.dimensions() != 3 || imgs.extent(2) < 2) {
return output_img;
#if 0
throw std::invalid_argument( throw std::invalid_argument(
"The input of HDRPlus must be a 3-dimensional buffer with at least " "The input of HDRPlus must be a 3-dimensional buffer with at least "
"two channels."); "two channels.");
#endif
} }
const int cfa_pattern = static_cast<int>(burst.GetCfaPattern()); const int cfa_pattern = static_cast<int>(burst.GetCfaPattern());

@ -136,7 +136,9 @@ CfaPattern RawImage::GetCfaPattern() const {
} else if (cfa_pattern == std::string{1, 2, 0, 1}) { } else if (cfa_pattern == std::string{1, 2, 0, 1}) {
return CfaPattern::CFA_GBRG; return CfaPattern::CFA_GBRG;
} }
#if 0
throw std::invalid_argument("Unsupported CFA pattern: " + cfa_pattern); throw std::invalid_argument("Unsupported CFA pattern: " + cfa_pattern);
#endif
return CfaPattern::CFA_UNKNOWN; return CfaPattern::CFA_UNKNOWN;
} }

@ -90,7 +90,7 @@ int DoGetRequest(const char* url, int authType, const char* userName, const char
char * log = new char[data.size() + 1]; char * log = new char[data.size() + 1];
log[data.size()] = 0; log[data.size()] = 0;
memcpy(log, &data[0], data.size()); memcpy(log, &data[0], data.size());
printf(log); printf("%s", log);
delete[] log; delete[] log;
#endif #endif
} }

@ -426,7 +426,6 @@ public class MainActivity extends AppCompatActivity {
public void onClick(View view) { public void onClick(View view) {
MicroPhotoService.setOtgState(true); MicroPhotoService.setOtgState(true);
// SysApi.setOtgState(true);
MicroPhotoService.setCam3V3Enable(true); MicroPhotoService.setCam3V3Enable(true);
Runnable runnable = new Runnable() { Runnable runnable = new Runnable() {
@ -439,7 +438,7 @@ public class MainActivity extends AppCompatActivity {
MicroPhotoService.setCam3V3Enable(false); MicroPhotoService.setCam3V3Enable(false);
MicroPhotoService.setOtgState(false); MicroPhotoService.setOtgState(false);
binding.logs.append(cameraInfo + "\r\n"); MicroPhotoService.infoLog(cameraInfo);
Toast.makeText(view.getContext(), cameraInfo, Toast.LENGTH_LONG).show(); Toast.makeText(view.getContext(), cameraInfo, Toast.LENGTH_LONG).show();
} }
}; };

@ -78,6 +78,7 @@ import java.io.InputStreamReader;
import java.io.RandomAccessFile; import java.io.RandomAccessFile;
import java.io.Reader; import java.io.Reader;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.net.Inet4Address;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.URI; import java.net.URI;
import java.nio.channels.FileLock; import java.nio.channels.FileLock;
@ -812,8 +813,8 @@ public class MicroPhotoService extends Service {
long ts = System.currentTimeMillis() / 1000; long ts = System.currentTimeMillis() / 1000;
// long val = (ts << 24); // long val = (ts << 24);
long val = 0; long val = 0;
val |= ((long)channel << 16); val |= ((long)channel << 12);
val |= ((long)preset << 8); val |= ((long)preset << 4);
val |= photoOrVideo ? 0L : 1L; val |= photoOrVideo ? 0L : 1L;
schedules.add(Long.valueOf(val)); schedules.add(Long.valueOf(val));
@ -1519,9 +1520,12 @@ public class MicroPhotoService extends Service {
if (lp != null) { if (lp != null) {
List<LinkAddress> addresses = lp.getLinkAddresses(); List<LinkAddress> addresses = lp.getLinkAddresses();
if (addresses != null && addresses.size() > 0) { if (addresses != null && addresses.size() > 0) {
InetAddress inetAddress = addresses.get(0).getAddress(); for (LinkAddress linkAddress : addresses) {
if (inetAddress != null) { InetAddress inetAddress = linkAddress.getAddress();
ip = inetAddress.getHostAddress(); if (inetAddress != null && inetAddress instanceof Inet4Address) {
ip = inetAddress.getHostAddress();
break;
}
} }
} }
} }

@ -390,9 +390,6 @@ public class MpMasterService extends Service {
public boolean shouldSyncTime() { return mSyncTime; } public boolean shouldSyncTime() { return mSyncTime; }
public void startMpApp() { public void startMpApp() {
if (true) {
return;
}
try { try {
final Context context = getApplicationContext(); final Context context = getApplicationContext();
long ts = System.currentTimeMillis(); long ts = System.currentTimeMillis();
@ -422,7 +419,7 @@ public class MpMasterService extends Service {
long tempduration = mMpHeartbeatDuration; long tempduration = mMpHeartbeatDuration;
if(mMpHeartbeatDuration < 600000) if(mMpHeartbeatDuration < 600000)
tempduration = 300000; tempduration = 290000;
if (mPreviousMpHbTime <= ts && ts - mPreviousMpHbTime > tempduration * 2) { if (mPreviousMpHbTime <= ts && ts - mPreviousMpHbTime > tempduration * 2) {
// MpApp is not running // MpApp is not running
if (ts - mTimeToStartMpApp >= 1800000) { if (ts - mTimeToStartMpApp >= 1800000) {

Loading…
Cancel
Save