nt9856x/code/application/sifarsdk/333DE/hal/Message333DE.cpp

107 lines
3.1 KiB
C++

#include "Message333DE.h"
#include "SfTypeDefine.h"
#include "Log.h"
#include <string.h>
Message333DE::Message333DE() : MessageQueue("/tmp/sf_message")
{
pThumbFileCfg = nullptr;
mRecvThreadRuning = false;
mCameraHandle = std::make_shared<VCameraMessageHandle>();
mSDCardHandle = std::make_shared<VSDCardMessageHandle>();
}
std::shared_ptr<Message333DE> &Message333DE::GetInstance(std::shared_ptr<Message333DE> *impl)
{
static auto instance = std::make_shared<Message333DE>();
if (impl)
{
instance = *impl;
}
return instance;
}
void Message333DE::Init(void)
{
MessageQueueCreate();
auto recvThread = [](std::shared_ptr<Message333DE> message)
{
message->RecvThread();
};
mMessageHandle = std::thread(recvThread, shared_from_this());
}
void Message333DE::UnInit(void)
{
mRecvThreadRuning = false;
if (mMessageHandle.joinable())
{
mMessageHandle.join();
}
mCameraHandle.reset();
}
SINT32 Message333DE::sf_cardv_message_send(SINT32 cmdId, SINT8 *param, SINT32 paramLen)
{
SF_MESSAGE_BUF_S stMessagebuf = {0};
memset(&stMessagebuf, 0, sizeof(SF_MESSAGE_BUF_S));
stMessagebuf.mtype = 1;
stMessagebuf.cmdId = cmdId;
stMessagebuf.paramLen = paramLen;
if (param)
{
memcpy(stMessagebuf.paramBuf, param, paramLen);
}
MessageQueue::MessageQueueSend(&stMessagebuf);
return 0;
}
void Message333DE::RecvThread(void)
{
LogInfo("Camera recv from queue.\n");
SINT32 ret = 0;
SF_MESSAGE_BUF_S stMessagebuf = {0};
mRecvThreadRuning = true;
while (mRecvThreadRuning)
{
memset(&stMessagebuf, 0, sizeof(SF_MESSAGE_BUF_S));
ret = MessageQueueRecv(&stMessagebuf);
if (ret != SF_SUCCESS)
{
std::this_thread::sleep_for(std::chrono::milliseconds(100)); // TODO: Use select to handle??
mCameraHandle->CheckSpontaneousFilesToUpload();
continue;
}
LogInfo("cmdId:[%#x,%s]\n", stMessagebuf.cmdId, AppProcessMessageGetstatusstring(static_cast<SF_MESSAGE_TYPE_E>(stMessagebuf.cmdId)));
switch (stMessagebuf.cmdId & CMD_SERIES_FIX)
{
case CMD_FILE:
mCameraHandle->CameraTaskMessageResponse();
break;
case CMD_SD:
app_process_cmd_SD(&stMessagebuf);
break;
default:
break;
}
}
}
const SF_CHAR *Message333DE::AppProcessMessageGetstatusstring(const SF_MESSAGE_TYPE_E &enType)
{
switch (enType)
{
case CMD_KEY:
return "CMD_KEY";
case CMD_SD:
return "CMD_SD";
case CMD_LED:
return "CMD_LED";
case CMD_FILE:
return "CMD_FILE";
case CMD_POWEROFF:
return "CMD_POWEROFF";
case CMD_VENC:
return "CMD_VENC";
default:
return "Unknown";
}
}
SINT32 Message333DE::app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
{
mSDCardHandle->SetSDCardMessage(static_cast<SF_MESSAGE_CMD_SD_E>(pMessageBuf->cmdId)); // TODO:
return SF_SUCCESS;
}