SVG5/commondata.cpp.old
2025-10-12 13:55:56 +09:00

2080 lines
54 KiB
C++

#include "commondata.h"
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <QDir>
#include <QDirIterator>
#include <QStorageInfo>
CommonData::CommonData()
{
m_pLogFile = NULL;
if(m_pLogFile==NULL)
{
QDir dirLog("/home/birdhead/Log");
if(dirLog.exists()==false)
{
QDir().mkdir("/home/birdhead/Log");
}
QString strLogFile = QString("/home/birdhead/Log/%1.log").arg(QDateTime::currentDateTime().toString("yyyyMMdd_HHmmss"));
m_pLogFile = new QFile(strLogFile);
m_pLogFile->open(QFile::ReadWrite | QFile::Unbuffered);
}
/*
#ifdef _SAVE_LOG
QDir().mkdir("Log");
QString strLogFile = QString("Log/%1.log").arg(QDateTime::currentDateTime().toString("yyyyMMdd_HHmmss"));
m_pLogFile = new QFile(strLogFile);
m_pLogFile->open(QFile::ReadWrite | QFile::Unbuffered);
#endif
*/
m_bConnectHDMI = false;
#ifdef _4K
m_nVideoWidth = 3840;
m_nVideoHeight = 2160;
#else
m_nVideoWidth = 1920;
m_nVideoHeight = 1080;
#endif
m_pBitmapData = new uint8_t[m_nVideoWidth*m_nVideoHeight*3+1000];
m_nGPIO_Buzzer = 0;
m_nVideoMode = 0;
m_nCropMode = 0;
m_nUseFixWidthLevel = 0;
m_nUseLogLevel = 0;
m_nScreenSaverTime = 0;
m_pSambaClient = NULL;
m_bAutoExitCaptureSendDICOM = false;
m_bAutoCaptureSendDICOM = false;
m_bAutoVideoCapture = false;
m_bAutoLogin = false;
m_bActiveDetect = false;
m_bAutoCloseSendFinish = false;
m_nGPIO_HandSwitch = 0;
m_nSearchItemHistoryStudyIndex = -1;
m_bIsCapturing = false;
//m_strImageExtension = "jpg";
m_strImageExtension = "bmp";
m_pDatabase = new SDatabase();
m_pDCMWorklist = new SDCMWorklist;
m_pListHistorySearch = new vector<HISTORY_STUDY*>;
m_pListHistoryImage = new vector<ImageSelect*>;
m_pWorklistData = new vector<WorklistResponseData>;
m_pDCMDumpList = new vector<CSDCM*>;
m_pFindSCUDataCallback = new SDCMFindSCUDataCallback(m_pDCMWorklist->GetExtractMode(), m_pDCMWorklist->GetCancelAfterNResponses());
m_pFindSCUDataCallback->SetWorklistData(m_pWorklistData);
m_pFindSCUDataCallback->SetWorklistDump(m_pDCMDumpList);
m_pCurrentWorklist = NULL;
m_pRTSPThread = NULL;
m_pListCaptureImage = new vector<CAPTURE_IMAGE*>;
m_pImageCapture = new RGB_Data[m_nVideoWidth*m_nVideoHeight];
memset(m_pImageCapture, 0, sizeof(RGB_Data)*m_nVideoWidth*m_nVideoHeight);
m_strStorageDirectory = "/home/birdhead/test_save";
m_pCurrentHistoryStudy = NULL;
m_bVideoEncoding = false;
m_pWorklistTableHeader = new STableHeader;
m_pHistoryTableHeader = new STableHeader;
QDate dt = QDate::currentDate();
SetDateSearchWorklistStart(dt);
SetDateSearchWorklistEnd(dt);
SetDateSearchHistoryStart(dt);
SetDateSearchHistoryEnd(dt);
InitWorklistIndex();
InitHistoryIndex();
InitSetting();
//m_pWorklistTableHeader->UpdateTableHeaderInfo(m_MapWorklistIndex);
#ifdef _XAVIER_NX
//m_nGPIO_Buzzer = open("/sys/class/gpio/gpio393/value", O_WRONLY);
m_strGPIOBeep = "/sys/class/gpio/gpio393/value";
m_strGPIOHandSwitch = "/sys/class/gpio/gpio271/value";
#endif
#ifdef _JETSON_TX2_NX
m_strGPIOBeep = "/sys/class/gpio/gpio269/value";
m_strGPIOHandSwitch = "/sys/class/gpio/gpio341/value";
#endif
if(m_strGPIOBeep.size()>0)
{
m_nGPIO_Buzzer = open(m_strGPIOBeep.toUtf8(), O_WRONLY);
if(m_nGPIO_Buzzer==-1)
{
}
}
ComputeStorageSize();
}
CommonData::~CommonData()
{
SAFE_ARRAY_DELETE(m_pBitmapData);
SAFE_ARRAY_DELETE(m_pImageCapture);
SAFE_DELETE(m_pDatabase);
SAFE_DELETE(m_pWorklistTableHeader);
SAFE_DELETE(m_pHistoryTableHeader);
ClearHistorySearchResult();
SAFE_DELETE(m_pListHistorySearch);
ClearHistoryImage();
SAFE_DELETE(m_pListHistoryImage);
ClearCaptureImage();
SAFE_DELETE(m_pListCaptureImage);
SAFE_DELETE(m_pFindSCUDataCallback);
SAFE_DELETE(m_pDCMWorklist);
SAFE_DELETE(m_pWorklistData);
SAFE_DELETE(m_pDCMDumpList);
if(m_nGPIO_Buzzer>0)
{
close(m_nGPIO_Buzzer);
}
if(m_pLogFile!=NULL)
{
m_pLogFile->flush();
m_pLogFile->close();
SAFE_DELETE(m_pLogFile);
}
STableHeader::ClearMapData();
}
QDate CommonData::GetDateSearchWorklistStart()
{
return m_SearchDateWorklist.m_DateStart;
}
QDate CommonData::GetDateSearchWorklistEnd()
{
return m_SearchDateWorklist.m_DateEnd;
}
void CommonData::SetDateSearchWorklistStart(QDate date)
{
m_SearchDateWorklist.m_DateStart = date;
}
void CommonData::SetDateSearchWorklistEnd(QDate date)
{
m_SearchDateWorklist.m_DateEnd = date;
}
QString CommonData::GetStorageDirectory()
{
return m_strStorageDirectory;
}
QDate CommonData::GetDateSearchHistoryStart()
{
return m_SearchDateHistory.m_DateStart;
}
QDate CommonData::GetDateSearchHistoryEnd()
{
return m_SearchDateHistory.m_DateEnd;
}
void CommonData::SetDateSearchHistoryStart(QDate date)
{
m_SearchDateHistory.m_DateStart = date;
}
void CommonData::SetDateSearchHistoryEnd(QDate date)
{
m_SearchDateHistory.m_DateEnd = date;
}
SEARCH_ITEM* CommonData::GetSearchItemWorklist()
{
return &m_SearchItemWorklist;
}
SDCMFindSCUDataCallback* CommonData::GetFindSCUDataCallback()
{
return m_pFindSCUDataCallback;
}
vector<WorklistResponseData>* CommonData::GetWorklistData()
{
m_LockWorklistData.lock();
return m_pWorklistData;
}
void CommonData::ReleaseWorklistData()
{
m_LockWorklistData.unlock();
}
vector<CSDCM*>* CommonData::GetWorklistDump()
{
return m_pDCMDumpList;
}
void CommonData::SetRTSPThread(QRTSPThread* pThread)
{
m_pRTSPThread = pThread;
}
QRTSPThread* CommonData::GetThreadRTSP()
{
return m_pRTSPThread;
}
void CommonData::SetThreadCaptureImage(SThreadImageSave* pThread)
{
m_pThreadCaptureImage = pThread;
}
void CommonData::SetThreadSendDICOM(SThreadSendDICOM* pThread)
{
m_pThreadSendDICOM = pThread;
}
SThreadImageSave* CommonData::GetThreadCaptureImage()
{
return m_pThreadCaptureImage;
}
SThreadSendDICOM* CommonData::GetThreadSendDICOM()
{
return m_pThreadSendDICOM;
}
void CommonData::AddCaptureImageWithHistory()
{
int i=0;
ClearCaptureImage();
int nImages = m_pListHistoryImage->size();
QImage* pImageTmp = NULL;
m_LockAddHistory.lock();
for(i=0 ; i<nImages ; i++)
{
ImageSelect* pImageHistory = (*m_pListHistoryImage)[nImages-1-i];
QString strDate = pImageHistory->m_strDate;
QString strTime = pImageHistory->m_strTime;
int nWidth = pImageHistory->GetWidth();
int nHeight = pImageHistory->GetHeight();
QImage::Format fmt = (QImage::Format)pImageHistory->GetFormat();
int nType = pImageHistory->m_nType;
QString strFilename = pImageHistory->m_strFile;
bool bDelete = pImageHistory->m_bDelete;
QString strTimeFormat = "yyyyMMdd HHmmss";
QString strDateTime = QString("%1 %2").arg(strDate).arg(strTime);
QDateTime dtCapture = QDateTime::fromString(strDateTime, strTimeFormat);
CAPTURE_IMAGE* pImageNew = new CAPTURE_IMAGE;
pImageNew->m_pImageSmall = new QImage(nWidth/4, nHeight/4, fmt);
if(pImageTmp==NULL)
{
pImageTmp = new QImage(nWidth, nHeight, fmt);
}
else
{
if(pImageTmp->width()!=nWidth || pImageTmp->height()!=nHeight || pImageTmp->format()!=fmt)
{
SAFE_DELETE(pImageTmp);
pImageTmp = new QImage(nWidth, nHeight, fmt);
}
}
{
uint8_t* pImageData = pImageTmp->bits();
memcpy(pImageData, pImageHistory->m_pImageData, nWidth*nHeight*3);
//
QImage imgSmall = pImageTmp->scaled(nWidth/4, nHeight/4);
*pImageNew->m_pImageSmall = imgSmall.copy();
SAFE_ARRAY_DELETE(pImageNew->m_pImageCaptureRaw);
SAFE_ARRAY_DELETE(pImageNew->m_pImageCaptureColor);
imgSmall.detach();
}
bool bTest = true;
if(bTest==true)
{
//CAPTURE_IMAGE* pImageNew = AddCaptureImage(pImageOri->bits(), nWidth, nHeight, pImageHistory->m_nType);
pImageNew->m_DateTime = dtCapture;//QDateTime::currentDateTime();
pImageNew->m_nType = (DISPLAY_TYPE)nType;
pImageNew->m_strImageFilename = strFilename;
if(pImageNew->m_nType==DISPLAY_VIDEO)
{
pImageNew->m_strVideoFilename = strFilename;
pImageNew->m_strVideoFilename.replace(".bmp", ".mkv");
pImageNew->m_strVideoFilename.replace(".jpg", ".mkv");
pImageNew->m_strVideoFilename.replace(".png", ".mkv");
}
pImageNew->m_bCheck = true;
pImageNew->m_nType = (DISPLAY_TYPE)nType;
pImageNew->m_bDelete = bDelete;
pImageNew->m_bSaveFile = true;
pImageNew->m_nIndex = i;
m_LockAddCapture.lock();
m_pListCaptureImage->push_back(pImageNew);
m_LockAddCapture.unlock();
}
}
SAFE_DELETE(pImageTmp);
m_LockAddHistory.unlock();
ClearHistoryImage();
}
vector<CAPTURE_IMAGE*>* CommonData::GetListCaptureImage()
{
m_LockAddCapture.lock();
return m_pListCaptureImage;
}
void CommonData::ReleaseListCaptureImage()
{
m_LockAddCapture.unlock();
}
void CommonData::ClearCaptureImage()
{
m_LockAddCapture.lock();
{
int i=0;
for(i=0 ; i<m_pListCaptureImage->size() ; i++)
{
CAPTURE_IMAGE* pCaptureImage = (*m_pListCaptureImage)[i];
if(pCaptureImage!=NULL)
{
if(pCaptureImage->m_pImage!=NULL)
{
//pCaptureImage->m_pImage->detach();
}
if(pCaptureImage->m_pImageSmall!=NULL)
{
//pCaptureImage->m_pImageSmall->detach();
}
SAFE_DELETE(pCaptureImage->m_pImage);
SAFE_DELETE(pCaptureImage->m_pImageSmall);
SAFE_ARRAY_DELETE(pCaptureImage->m_pImageCaptureRaw);
SAFE_ARRAY_DELETE(pCaptureImage->m_pImageCaptureColor);
SAFE_ARRAY_DELETE(pCaptureImage->m_pImageData);
SAFE_DELETE(pCaptureImage);
}
}
m_pListCaptureImage->clear();
//SAFE_DELETE(m_pListCaptureImage);
//m_pListCaptureImage = new vector<CAPTURE_IMAGE*>;
}
m_LockAddCapture.unlock();
}
CAPTURE_IMAGE* CommonData::AddCaptureImage(uint8_t* pData, int nWidth, int nHeight, int nCaptureType)
{
CAPTURE_IMAGE* pCaptureImage = NULL;
m_LockAddCapture.lock();
{
pCaptureImage = new CAPTURE_IMAGE;
pCaptureImage->m_DateTime = QDateTime::currentDateTime();
pCaptureImage->m_nType = (DISPLAY_TYPE)nCaptureType;
if(nWidth>0 && nHeight>0 && pData!=NULL)
{
pCaptureImage->m_pImageCaptureRaw = NULL;
pCaptureImage->m_pImageCaptureRaw = new uint8_t[nWidth*nHeight*2];
memset(pCaptureImage->m_pImageCaptureRaw, 0, sizeof(uint8_t)*nWidth*nHeight*2);
memcpy(pCaptureImage->m_pImageCaptureRaw, pData, sizeof(uint8_t)*nWidth*nHeight*2);
}
else
{
pCaptureImage->m_pImageCaptureRaw = NULL;
}
{
m_pListCaptureImage->push_back(pCaptureImage);
}
}
m_LockAddCapture.unlock();
return pCaptureImage;
}
uint8_t* CommonData::ConvertColor(uint8_t* pData, int nWidth, int nHeight)
{
int i=0;
int j=0;
for(i=0 ; i<nHeight ; i++)
{
int nIndex = 0;
for(j=0 ; j<nWidth/2 ; j++)
{
//UYVY
float fU = (float)pData[i*m_nVideoWidth*2+j*4+0] / 255.0f;
float fY1 = (float)pData[i*m_nVideoWidth*2+j*4+1] / 255.0f;
float fV = (float)pData[i*m_nVideoWidth*2+j*4+2] / 255.0f;
float fY2 = (float)pData[i*m_nVideoWidth*2+j*4+3] / 255.0f;
float fR = 0;
float fG = 0;
float fB = 0;
fY1=1.1643*(fY1-0.0625);
fY2=1.1643*(fY2-0.0625);
fU=fU-0.5;
fV=fV-0.5;
fR = CLAMP(fY1+1.5958*fV, 0.0, 1.0);
fG = CLAMP(fY1-0.39173*fU-0.81290*fV, 0.0, 1.0);
fB = CLAMP(fY1+2.017*fU, 0.0, 1.0);
m_pImageCapture[i*nWidth+nIndex].r = fR*255;
m_pImageCapture[i*nWidth+nIndex].g = fG*255;
m_pImageCapture[i*nWidth+nIndex].b = fB*255;
nIndex++;
fR = CLAMP(fY2+1.5958*fV, 0.0, 1.0);
fG = CLAMP(fY2-0.39173*fU-0.81290*fV, 0.0, 1.0);
fB = CLAMP(fY2+2.017*fU, 0.0, 1.0);
m_pImageCapture[i*nWidth+nIndex].r = fR*255;
m_pImageCapture[i*nWidth+nIndex].g = fG*255;
m_pImageCapture[i*nWidth+nIndex].b = fB*255;
nIndex++;
}
}
return (uint8_t*)m_pImageCapture;
}
void CommonData::ConvertColor2(uint8_t* pSrcData, uint8_t* pDestData, int nOffsetX, int nOffsetY, int nWidth, int nHeight)
{
int i=0;
int j=0;
RGB_Data* pColorData = (RGB_Data*)pDestData;
for(i=0 ; i<nHeight ; i++)
{
int nIndex = 0;
for(j=0 ; j<nWidth/2 ; j++)
{
//UYVY
float fU = (float)pSrcData[(i+nOffsetY)*m_nVideoWidth*2+(nOffsetX*2+j*4+0)] / 255.0f;
float fY1 = (float)pSrcData[(i+nOffsetY)*m_nVideoWidth*2+(nOffsetX*2+j*4+1)] / 255.0f;
float fV = (float)pSrcData[(i+nOffsetY)*m_nVideoWidth*2+(nOffsetX*2+j*4+2)] / 255.0f;
float fY2 = (float)pSrcData[(i+nOffsetY)*m_nVideoWidth*2+(nOffsetX*2+j*4+3)] / 255.0f;
float fR = 0;
float fG = 0;
float fB = 0;
fY1=1.1643*(fY1-0.0625);
fY2=1.1643*(fY2-0.0625);
fU=fU-0.5;
fV=fV-0.5;
fR = CLAMP(fY1+1.5958*fV, 0.0, 1.0);
fG = CLAMP(fY1-0.39173*fU-0.81290*fV, 0.0, 1.0);
fB = CLAMP(fY1+2.017*fU, 0.0, 1.0);
pColorData[i*nWidth+nIndex].r = fR*255;
pColorData[i*nWidth+nIndex].g = fG*255;
pColorData[i*nWidth+nIndex].b = fB*255;
nIndex++;
fR = CLAMP(fY2+1.5958*fV, 0.0, 1.0);
fG = CLAMP(fY2-0.39173*fU-0.81290*fV, 0.0, 1.0);
fB = CLAMP(fY2+2.017*fU, 0.0, 1.0);
pColorData[i*nWidth+nIndex].r = fR*255;
pColorData[i*nWidth+nIndex].g = fG*255;
pColorData[i*nWidth+nIndex].b = fB*255;
nIndex++;
}
}
}
QString CommonData::GetNewFilename(int nType)
{
QString strFile;
QDateTime dt = QDateTime::currentDateTime();
int nYear = dt.date().year();
int nMonth = dt.date().month();
int nDay = dt.date().day();
ACQUISITION_INFO* pAcquisitionInfo = GetAcquisitionInfo();
SDATA_PATIENT* pPatientInfo = pAcquisitionInfo->GetPatientInfo();
QString strPatientID = pPatientInfo->strPatientID;
ReleaseAcquisitionInfo();
//QString strStorageDirectory = pMainWindow->GetStorageDirectory();
QString strStorageDirectory = "/data";
QString strDirectoryImage;
QString strImageExtention;
if(nType==DISPLAY_IMAGE)
{
strDirectoryImage = QString("%1/image").arg(strStorageDirectory);
strImageExtention = m_strImageExtension;
}
else if(nType==DISPLAY_VIDEO)
{
strDirectoryImage = QString("%1/video").arg(strStorageDirectory);
strImageExtention = "mkv";
}
QString strDirectoryDate = QString("%1/%2%3%4").arg(strDirectoryImage).arg(QString::number(nYear).rightJustified(4, '0')).arg(QString::number(nMonth).rightJustified(2, '0'))
.arg(QString::number(nDay).rightJustified(2, '0'));
if(strPatientID.size()<1)
{
strPatientID = "unknown";
}
QString strDirectoryPatient = QString("%1/%2").arg(strDirectoryDate).arg(strPatientID);
uint captureTime = dt.toMSecsSinceEpoch();
QDir().mkdir(strDirectoryImage);
QDir().mkdir(strDirectoryDate);
QDir().mkdir(strDirectoryPatient);
vector<CAPTURE_IMAGE*>::iterator it;
strFile = QString("%1/%2.%3").arg(strDirectoryPatient).arg(QString::number(captureTime)).arg(strImageExtention);
m_LockAddCapture.lock();
int nCheckCount = -1;
for(it=m_pListCaptureImage->begin() ; it!=m_pListCaptureImage->end() ; ++it)
{
CAPTURE_IMAGE* pCheckImage = *it;
if(pCheckImage->m_strImageFilename==strFile)
{
nCheckCount++;
strFile = QString("%1/%2_%4.%3").arg(strDirectoryPatient).arg(QString::number(captureTime)).arg(strImageExtention).arg(QString::number(nCheckCount));
}
}
m_LockAddCapture.unlock();
return strFile;
}
void CommonData::ConvertCaptureImage(CAPTURE_IMAGE* pCaptureImage, int nWidth, int nHeight)
{
//ConvertCaptureImageRGBA(pCaptureImage, nWidth, nHeight);
//return;
int i=0;
int j=0;
if(pCaptureImage->m_pImageCaptureRaw==NULL)
{
pCaptureImage->m_pImageCaptureRaw = new uint8_t[m_nVideoWidth*m_nVideoHeight*2];
}
uint8_t* pData = pCaptureImage->m_pImageCaptureRaw;
bool bSaveOri = false;
if(bSaveOri==true)
{
QFile file("save_ori.data");
file.open(QFile::ReadWrite);
file.write((char*)pData, nWidth*2*nHeight);
file.close();
}
memset(m_pImageCapture, 0, sizeof(RGB_Data)*m_nVideoWidth*m_nVideoHeight);
for(i=0 ; i<nHeight ; i++)
{
int nIndex = 0;
for(j=0 ; j<nWidth/2 ; j++)
{
//UYVY
float fU = (float)pData[i*nWidth*2+j*4+0] / 255.0f;
float fY1 = (float)pData[i*nWidth*2+j*4+1] / 255.0f;
float fV = (float)pData[i*nWidth*2+j*4+2] / 255.0f;
float fY2 = (float)pData[i*nWidth*2+j*4+3] / 255.0f;
/*
//YUY2
float fY1 = (float)pData[i*nWidth*2+j*4+0] / 255.0f;
float fU = (float)pData[i*nWidth*2+j*4+1] / 255.0f;
float fY2 = (float)pData[i*nWidth*2+j*4+2] / 255.0f;
float fV = (float)pData[i*nWidth*2+j*4+3] / 255.0f;
*/
float fR = 0;
float fG = 0;
float fB = 0;
fY1=1.1643*(fY1-0.0625);
fY2=1.1643*(fY2-0.0625);
fU=fU-0.5;
fV=fV-0.5;
fR = CLAMP(fY1+1.5958*fV, 0.0, 1.0);
fG = CLAMP(fY1-0.39173*fU-0.81290*fV, 0.0, 1.0);
fB = CLAMP(fY1+2.017*fU, 0.0, 1.0);
m_pImageCapture[i*nWidth+nIndex].r = fR*255;
m_pImageCapture[i*nWidth+nIndex].g = fG*255;
m_pImageCapture[i*nWidth+nIndex].b = fB*255;
nIndex++;
fR = CLAMP(fY2+1.5958*fV, 0.0, 1.0);
fG = CLAMP(fY2-0.39173*fU-0.81290*fV, 0.0, 1.0);
fB = CLAMP(fY2+2.017*fU, 0.0, 1.0);
m_pImageCapture[i*nWidth+nIndex].r = fR*255;
m_pImageCapture[i*nWidth+nIndex].g = fG*255;
m_pImageCapture[i*nWidth+nIndex].b = fB*255;
nIndex++;
}
}
SAFE_ARRAY_DELETE(pCaptureImage->m_pImageCaptureRaw);
QString strFile = GetNewFilename(DISPLAY_IMAGE);
SAFE_ARRAY_DELETE(pCaptureImage->m_pImageCaptureColor);
//pCaptureImage->m_pImage = new QImage((uchar*)m_pImageCapture, nWidth, nHeight, QImage::Format_RGB888);
pCaptureImage->m_pImage = new QImage(nWidth, nHeight, QImage::Format_RGB888);
{
uint8_t* pImageDest = pCaptureImage->m_pImage->bits();
memcpy(pImageDest, m_pImageCapture, nWidth*nHeight*3);
}
pCaptureImage->m_bCheck = true;
pCaptureImage->m_strImageFilename = strFile;
if(pCaptureImage->m_nType==DISPLAY_VIDEO)
{
QString strVideo = pCaptureImage->m_strVideoFilename;
QString strImageExtention = m_strImageExtension;
if(strVideo.size()==0)
{
strVideo = GetNewFilename(DISPLAY_VIDEO);
pCaptureImage->m_strVideoFilename = strVideo;
}
strFile = strVideo.replace("mkv", strImageExtention);
pCaptureImage->m_strImageFilename = strFile;
}
pCaptureImage->m_bSaveFile = false;
m_pThreadCaptureImage->AddCaptureSaveToFile(pCaptureImage);
QImage image = pCaptureImage->m_pImage->scaled(nWidth/4, nHeight/4, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
pCaptureImage->m_pImageSmall = new QImage(nWidth/4, nHeight/4, image.format());
//*pCaptureImage->m_pImageSmall = image.rgbSwapped();
*pCaptureImage->m_pImageSmall = image.copy();
ACQUISITION_INFO* pAcquisitionInfo = GetAcquisitionInfo();
if(pAcquisitionInfo->GetPatientInfo()->strPatientID.length() > 0 &&
pAcquisitionInfo->GetPatientInfo()->strPatientName.length() >0)
{
pAcquisitionInfo->m_strImageFilename = pCaptureImage->m_strImageFilename;
pAcquisitionInfo->m_strVideoFilename = pCaptureImage->m_strVideoFilename;
if(pCaptureImage->m_nType==DISPLAY_IMAGE)
{
m_pDatabase->InsertImage(pAcquisitionInfo);
}
else if(pCaptureImage->m_nType==DISPLAY_VIDEO)
{
m_pDatabase->InsertVideo(pAcquisitionInfo);
}
}
ReleaseAcquisitionInfo();
usleep(100);
}
void CommonData::ConvertCaptureImageRGBA(CAPTURE_IMAGE* pCaptureImage, int nWidth, int nHeight)
{
//uint8_t* pData = pCaptureImage->m_pImageCaptureRaw;
//int nYear = pCaptureImage->m_DateTime.date().year();
//int nMonth = pCaptureImage->m_DateTime.date().month();
//int nDay = pCaptureImage->m_DateTime.date().day();
//int nHour = pCaptureImage->m_DateTime.time().hour();
//int nMinute = pCaptureImage->m_DateTime.time().minute();
//int nSec = pCaptureImage->m_DateTime.time().second();
//QString strStorageDirectory = GetStorageDirectory();
//QString strDirectoryImage = QString("%1").arg(strStorageDirectory);
//QString strPatientID = "123";
QString strImageExtention = m_strImageExtension;
pCaptureImage->m_pImage = new QImage((uchar*)pCaptureImage->m_pImageCaptureRaw, nWidth, nHeight, QImage::Format_RGB32);
*pCaptureImage->m_pImage = pCaptureImage->m_pImage->convertToFormat(QImage::Format_RGB888);
*pCaptureImage->m_pImage = pCaptureImage->m_pImage->rgbSwapped();
//QString strFile = QString("%1/%2%3%4.%5").arg(strDirectoryImage).arg(QString::number(nHour).rightJustified(2, '0')).arg(QString::number(nMinute).rightJustified(2, '0')).arg(QString::number(nSec).rightJustified(2, '0')).arg(strImageExtention);
QString strFile = GetNewFilename(DISPLAY_IMAGE);
{
/*
vector<CAPTURE_IMAGE*>::iterator it;
int nCheckCount = -1;
for(it=m_pListCaptureImage->begin() ; it!=m_pListCaptureImage->end() ; ++it)
{
CAPTURE_IMAGE* pCheckImage = *it;
if(pCheckImage->m_strImageFilename==strFile)
{
nCheckCount++;
strFile = QString("%1/%2%3%4_%5.%6").arg(strDirectoryImage).arg(QString::number(nHour).rightJustified(2, '0')).arg(QString::number(nMinute).rightJustified(2, '0')).arg(QString::number(nSec).rightJustified(2, '0')).arg(QString::number(nCheckCount)).arg(strImageExtention);
}
}
*/
}
pCaptureImage->m_strImageFilename = strFile;
if(pCaptureImage->m_nType==DISPLAY_VIDEO)
{
QString strVideo = strFile;
strVideo = strVideo.replace(strImageExtention, "mkv");
//QString strVideo = QString("%1/%2%3%4.mkv").arg(strDirectoryImage).arg(QString::number(nHour).rightJustified(2, '0')).arg(QString::number(nMinute).rightJustified(2, '0')).arg(QString::number(nSec).rightJustified(2, '0'));
pCaptureImage->m_strVideoFilename = strVideo;
}
pCaptureImage->m_bSaveFile = false;
m_pThreadCaptureImage->AddCaptureSaveToFile(pCaptureImage);
QImage image = pCaptureImage->m_pImage->scaled(nWidth/4, nHeight/4, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
pCaptureImage->m_pImageSmall = new QImage(nWidth/4, nHeight/4, image.format());
*pCaptureImage->m_pImageSmall = image;
SAFE_ARRAY_DELETE(pCaptureImage->m_pImageCaptureRaw);
if(m_AcquisitionInfo.GetPatientInfo()->strPatientID.length() > 0 &&
m_AcquisitionInfo.GetPatientInfo()->strPatientName.length() >0)
{
m_AcquisitionInfo.m_strImageFilename = pCaptureImage->m_strImageFilename;
m_AcquisitionInfo.m_strVideoFilename = pCaptureImage->m_strVideoFilename;
if(pCaptureImage->m_nType==DISPLAY_IMAGE)
{
m_pDatabase->InsertImage(&m_AcquisitionInfo);
}
else if(pCaptureImage->m_nType==DISPLAY_VIDEO)
{
m_pDatabase->InsertVideo(&m_AcquisitionInfo);
}
}
usleep(10*1000);
}
SDatabase* CommonData::GetDatabase()
{
return m_pDatabase;
}
ACQUISITION_INFO* CommonData::GetAcquisitionInfo()
{
m_LockAcquisitionInfo.lock();
return &m_AcquisitionInfo;
}
void CommonData::ReleaseAcquisitionInfo()
{
m_LockAcquisitionInfo.unlock();
}
vector<ImageSelect*>* CommonData::GetListHistoryImage()
{
m_LockAddHistory.lock();
return m_pListHistoryImage;
}
void CommonData::ReleaseListHistoryImage()
{
m_LockAddHistory.unlock();
}
void CommonData::ClearHistoryImage()
{
m_LockAddHistory.lock();
int i=0;
for(i=0 ; i<m_pListHistoryImage->size() ; i++)
{
ImageSelect* pHistoryImage = (*m_pListHistoryImage)[i];
if(pHistoryImage!=NULL)
{
SAFE_ARRAY_DELETE(pHistoryImage->m_pImageData);
}
SAFE_DELETE(pHistoryImage);
}
m_pListHistoryImage->clear();
SAFE_DELETE(m_pListHistoryImage);
m_pListHistoryImage = new vector<ImageSelect*>;
m_LockAddHistory.unlock();
}
vector<HISTORY_STUDY*>* CommonData::GetHistorySearchResult()
{
return m_pListHistorySearch;
}
void CommonData::ClearHistorySearchResult()
{
m_LockCurrentHistoryStudy.lock();
int i=0;
for(i=0 ; i<m_pListHistorySearch->size() ; i++)
{
HISTORY_STUDY* pHistoryStudy = (*m_pListHistorySearch)[i];
SAFE_DELETE(pHistoryStudy);
}
m_pListHistorySearch->clear();
m_pCurrentHistoryStudy = NULL;
m_LockCurrentHistoryStudy.unlock();
}
HISTORY_STUDY* CommonData::GetCurrentHistoryStudy()
{
m_LockCurrentHistoryStudy.lock();
return m_pCurrentHistoryStudy;
}
void CommonData::ReleaseCurrentHistoryStudy()
{
m_LockCurrentHistoryStudy.unlock();
}
void CommonData::SetCurrentHistoryStudy(int nIndex)
{
m_LockCurrentHistoryStudy.lock();
if(nIndex < m_pListHistorySearch->size())
{
m_pCurrentHistoryStudy = (*m_pListHistorySearch)[nIndex];
}
else
{
m_pCurrentHistoryStudy = NULL;
}
m_LockCurrentHistoryStudy.unlock();
}
bool CommonData::IsEncodingVideo()
{
return m_bVideoEncoding;
}
void CommonData::SetEncodingVideo(bool bEncoding)
{
m_bVideoEncoding = bEncoding;
}
STableHeader* CommonData::GetWorklistTableHeader()
{
return m_pWorklistTableHeader;
}
STableHeader* CommonData::GetHistoryTableHeader()
{
return m_pHistoryTableHeader;
}
void CommonData::Exit()
{
if(m_pRTSPThread!=NULL)
{
m_pRTSPThread->ChangeState(1000);
while(m_pRTSPThread->isRunning()==true)
{
usleep(10*1000);
}
m_pRTSPThread->stop();
}
if(m_pThreadCaptureImage!=NULL)
{
m_pThreadCaptureImage->ChangeState(1000);
while(m_pThreadCaptureImage->isRunning()==true)
{
usleep(10*1000);
}
}
}
int CommonData::GetDisplayType()
{
return m_nDisplayType;
}
void CommonData::SetDisplayType(int nType)
{
m_nDisplayType = nType;
}
SDCMWorklist* CommonData::GetWorklistClass()
{
return m_pDCMWorklist;
}
#define pp pair<int, int>
bool cmp(const pp& a, const pp& b)
{
//if(a.second==b.second) return a.first < b.first;
//return a.second < b.second;
return a.first > b.first;
}
void CommonData::InitWorklistIndex()
{
QList<QStringList*>* pResult = m_pDatabase->QueryWorklistTableHeader();
m_pWorklistTableHeader->SetDataWorklist(pResult);
}
void CommonData::UpdateWorklistIndex()
{
int i=0;
vector<TableHeader*>* pListActivate = m_pWorklistTableHeader->GetListActive();
vector<TableHeader*>* pListInactivate = m_pWorklistTableHeader->GetListInactive();
QString strUpdate;
int nIndex = 0;
for(i=0 ; i<pListActivate->size() ; i++)
{
TableHeader* pTableHeader = (*pListActivate)[i];
pTableHeader->m_nIndex = nIndex;
strUpdate = QString("update WorklistTableHeader SET `DisplayIndex`='%1' , `Visible`='%2' where `DefaultIndex`='%3';").arg(QString::number(nIndex)).arg(QString::number(1)).arg(QString::number(pTableHeader->m_nIndexDefault));
m_pDatabase->Execute(strUpdate);
nIndex++;
}
for(i=0 ; i<pListInactivate->size() ; i++)
{
TableHeader* pTableHeader = (*pListInactivate)[i];
pTableHeader->m_nIndex = nIndex;
strUpdate = QString("update WorklistTableHeader SET DisplayIndex='%1' , Visible='%2' where DefaultIndex='%3';").arg(QString::number(nIndex)).arg(QString::number(0)).arg(QString::number(pTableHeader->m_nIndexDefault));
m_pDatabase->Execute(strUpdate);
nIndex++;
}
}
void CommonData::InitHistoryIndex()
{
QList<QStringList*>* pResult = m_pDatabase->QueryHistoryTableHeader();
m_pHistoryTableHeader->SetDataHistory(pResult);
}
void CommonData::UpdateHistoryIndex()
{
int i=0;
vector<TableHeader*>* pListActivate = m_pHistoryTableHeader->GetListActive();
vector<TableHeader*>* pListInactivate = m_pHistoryTableHeader->GetListInactive();
QString strUpdate;
int nIndex = 0;
for(i=0 ; i<pListActivate->size() ; i++)
{
TableHeader* pTableHeader = (*pListActivate)[i];
pTableHeader->m_nIndex = nIndex;
strUpdate = QString("update HistoryTableHeader SET `DisplayIndex`='%1' , `Visible`='%2' where `DefaultIndex`='%3';").arg(QString::number(nIndex)).arg(QString::number(1)).arg(QString::number(pTableHeader->m_nIndexDefault));
m_pDatabase->Execute(strUpdate);
nIndex++;
}
for(i=0 ; i<pListInactivate->size() ; i++)
{
TableHeader* pTableHeader = (*pListInactivate)[i];
pTableHeader->m_nIndex = nIndex;
strUpdate = QString("update HistoryTableHeader SET DisplayIndex='%1' , Visible='%2' where DefaultIndex='%3';").arg(QString::number(nIndex)).arg(QString::number(0)).arg(QString::number(pTableHeader->m_nIndexDefault));
m_pDatabase->Execute(strUpdate);
nIndex++;
}
}
SDCM_SERVER_INFO* CommonData::GetServerWorklistInfo()
{
return &m_ServerWorklistInfo;
}
SDCM_SERVER_INFO* CommonData::GetServerStorageInfo()
{
return &m_ServerStorageInfo;
}
void CommonData::UpdateSetting()
{
QString strEnableLog = "Disabled";
QString strQuery = QString("update ConnectionInfo SET WorklistServerIP='%1', WorklistPort='%2', WorklistServerTitle='%3', WorklistClientTitle='%4', StorageServerIP='%5', StoragePort='%6', StorageServerTitle='%7', StorageClientTitle='%8', Modality='%9', HospitalName='%10', StationName='%11', EnableLog='%12', LocalImageFolder='%13', LocalLogFolder='%14', LocalHistoryFolder='%15' where ID=1")
.arg(m_ServerWorklistInfo.m_strServer_IP)
.arg(m_ServerWorklistInfo.m_nServer_Port)
.arg(m_ServerWorklistInfo.m_strServer_AETitle)
.arg(m_ServerWorklistInfo.m_strClient_AETitle).
arg(m_ServerStorageInfo.m_strServer_IP).
arg(m_ServerStorageInfo.m_nServer_Port).
arg(m_ServerStorageInfo.m_strServer_AETitle).
arg(m_ServerStorageInfo.m_strClient_AETitle).
arg(m_strModality).
arg(m_strInstitutionName).
arg(m_strStationName).
arg(strEnableLog).
arg(m_strLocalImageFolder).
arg(m_strLogFolder).
arg(m_strLocalHistoryFolder);
qDebug() << strQuery;
m_pDatabase->Execute(strQuery);
}
void CommonData::UpdateAdvancedSetting()
{
QString strEnableNetworkShare = "Disabled";
if(m_NetworkShareInfo.m_bEnable==true)
{
strEnableNetworkShare = "Enabled";
}
QString strNetworkAutoSend = "Disabled";
if(m_NetworkShareInfo.m_bAutoSend==true)
{
strNetworkAutoSend = "Enabled";
}
int nAutoExitCaptureSendDICOM = 0;
int nAutoCaptureSendDICOM = 0;
int nAutoVideoCapture = 0;
int nAutoCloseSendFinish = 0;
int nAutoLogin = 0;
int nDICOMCompress = 0;
int nVideoMode = 0;
int nCropMode = 0;
int nUseFixWidthLevel = 0;
int nUseLogLevel = 0;
int nScreenSaverTime = 0;
if(m_bAutoExitCaptureSendDICOM==true)
{
nAutoExitCaptureSendDICOM = 1;
}
if(m_bAutoCaptureSendDICOM==true)
{
nAutoCaptureSendDICOM = 1;
}
if(m_bAutoVideoCapture==true)
{
nAutoVideoCapture = 1;
}
if(m_bAutoCloseSendFinish==true)
{
nAutoCloseSendFinish = 1;
}
if(m_bAutoLogin==true)
{
nAutoLogin = 1;
}
if(m_nTransferSyntax==1)
{
nDICOMCompress = 1;
}
if(m_nVideoMode==1)
{
nVideoMode = 1;
}
if(m_nCropMode==1)
{
nCropMode = 1;
}
if(m_nUseFixWidthLevel==1)
{
nUseFixWidthLevel = 1;
}
if(m_nUseLogLevel>0)
{
nUseLogLevel = m_nUseLogLevel;
}
if(m_nScreenSaverTime>0)
{
nScreenSaverTime = m_nScreenSaverTime;
}
QString strQuery = QString("update AdvancedSetting SET EnableNetworkShare='%1', NetworkShareIP='%2', NetworkShareFolder='%3', NetworkShareID='%4', NetworkSharePassword='%5', "
"NetworkSMBVersion='%6', NetworkAutoSend='%7', AutoExitCaptureSendDICOM='%8', AutoCaptureSendDICOM='%9', AutoVideoCapture='%10', "
"DICOMCharacterSet='%11', AutoCloseSendFinish='%12', AutoLogin='%13', DICOMCompress='%14', VideoMode='%15', CropMode='%16', "
"UseFixWidthLevel='%17', UseLogLevel='%18', ScreenSaverTime='%19' where ID=1")
.arg(strEnableNetworkShare)
.arg(m_NetworkShareInfo.m_strIP)
.arg(m_NetworkShareInfo.m_strShareFolder)
.arg(m_NetworkShareInfo.m_strID)
.arg(m_NetworkShareInfo.m_strPassword)
.arg(m_NetworkShareInfo.m_strVersion)
.arg(strNetworkAutoSend)
.arg(nAutoExitCaptureSendDICOM)
.arg(nAutoCaptureSendDICOM)
.arg(nAutoVideoCapture)
.arg(m_strDICOMCharacterSet)
.arg(nAutoCloseSendFinish)
.arg(nAutoLogin)
.arg(nDICOMCompress)
.arg(nVideoMode)
.arg(nCropMode)
.arg(nUseFixWidthLevel)
.arg(nUseLogLevel)
.arg(nScreenSaverTime);
qDebug() << strQuery;
m_pDatabase->Execute(strQuery);
if(m_nUseLogLevel==0)
{
if(m_pLogFile!=NULL)
{
m_pLogFile->flush();
m_pLogFile->close();
SAFE_DELETE(m_pLogFile);
}
}
}
void CommonData::InitSetting()
{
QString strQuery = QString("select WorklistServerIP, WorklistPort, WorklistServerTitle, WorklistClientTitle, StorageServerIP, StoragePort, StorageServerTitle, StorageClientTitle, Modality, HospitalName, StationName, EnableLog, LocalImageFolder, LocalLogFolder, LocalHistoryFolder from ConnectionInfo;");
m_pDatabase->ExecuteQuery(strQuery);
QList<QStringList*>* pResult = m_pDatabase->GetResult();
QStringList* pListData = (*pResult)[0];
int nIndex = 0;
QString strWorklistServerIP = (*pListData)[nIndex]; nIndex++;
QString strWorklistPort = (*pListData)[nIndex]; nIndex++;
QString strWorklistServerTitle = (*pListData)[nIndex]; nIndex++;
QString strWorklistClientTitle = (*pListData)[nIndex]; nIndex++;
QString strStorageServerIP = (*pListData)[nIndex]; nIndex++;
QString strStoragePort = (*pListData)[nIndex]; nIndex++;
QString strStorageServerTitle = (*pListData)[nIndex]; nIndex++;
QString strStorageClientTitle = (*pListData)[nIndex]; nIndex++;
QString strModality = (*pListData)[nIndex]; nIndex++;
QString strHospitalName = (*pListData)[nIndex]; nIndex++;
QString strStationName = (*pListData)[nIndex]; nIndex++;
QString strEnableLog = (*pListData)[nIndex]; nIndex++;
QString strLocalImageFolder = (*pListData)[nIndex]; nIndex++;
QString strLocalLogFolder = (*pListData)[nIndex]; nIndex++;
QString strLocalHistoryFolder = (*pListData)[nIndex]; nIndex++;
strQuery = QString("select EnableNetworkShare, NetworkShareIP, NetworkShareFolder, NetworkShareID, "
"NetworkSharePassword, NetworkSMBVersion, NetworkAutoSend, AutoExitCaptureSendDICOM, "
"AutoCaptureSendDICOM, AutoVideoCapture, DICOMCharacterSet, AutoCloseSendFinish, AutoLogin, "
"DICOMCompress, VideoMode, CropMode, UseFixWidthLevel, UseLogLevel, ScreenSaverTime from AdvancedSetting where ID=1;");
m_pDatabase->ExecuteQuery(strQuery);
pResult = m_pDatabase->GetResult();
pListData = (*pResult)[0];
nIndex = 0;
QString strEnableNetworkShare = (*pListData)[nIndex]; nIndex++;
QString strNetworkShareIP = (*pListData)[nIndex]; nIndex++;
QString strNetworkShareFolder = (*pListData)[nIndex]; nIndex++;
QString strNetworkShareID = (*pListData)[nIndex]; nIndex++;
QString strNetworkSharePassword = (*pListData)[nIndex]; nIndex++;
QString strSMBVersion = (*pListData)[nIndex]; nIndex++;
QString strNetworkAutoSend = (*pListData)[nIndex]; nIndex++;
QString strAutoExitCaptureSendDICOM = (*pListData)[nIndex]; nIndex++;
QString strAutoCaptureSendDICOM = (*pListData)[nIndex]; nIndex++;
QString strAutoVideoCapture = (*pListData)[nIndex]; nIndex++;
QString strDICOMCharacterSet = (*pListData)[nIndex]; nIndex++;
QString strAutoCloseSendFinish = (*pListData)[nIndex]; nIndex++;
QString strAutoLogin = (*pListData)[nIndex]; nIndex++;
QString strDICOMCompress = (*pListData)[nIndex]; nIndex++;
QString strVideoMode = (*pListData)[nIndex]; nIndex++;
QString strCropMode = (*pListData)[nIndex]; nIndex++;
QString strUseFixWidthLevel = (*pListData)[nIndex]; nIndex++;
QString strUseLogLevel = (*pListData)[nIndex]; nIndex++;
QString strScreenSaverTime = (*pListData)[nIndex]; nIndex++;
m_ServerWorklistInfo.m_strServer_IP = strWorklistServerIP;
m_ServerWorklistInfo.m_nServer_Port = strWorklistPort.toInt();
m_ServerWorklistInfo.m_strServer_AETitle = strWorklistServerTitle;
m_ServerWorklistInfo.m_strClient_AETitle = strWorklistClientTitle;
m_ServerStorageInfo.m_strServer_IP = strStorageServerIP;
m_ServerStorageInfo.m_nServer_Port = strStoragePort.toInt();
m_ServerStorageInfo.m_strServer_AETitle = strStorageServerTitle;
m_ServerStorageInfo.m_strClient_AETitle = strStorageClientTitle;
m_strModality = strModality;
m_strInstitutionName = strHospitalName;
m_strStationName = strStationName;
m_nTransferSyntax = 0;
m_NetworkShareInfo.m_bEnable = true;
if(strEnableNetworkShare=="Disabled")
{
m_NetworkShareInfo.m_bEnable = false;
}
m_NetworkShareInfo.m_strIP = strNetworkShareIP;
m_NetworkShareInfo.m_strShareFolder = strNetworkShareFolder;
m_NetworkShareInfo.m_strID = strNetworkShareID;
m_NetworkShareInfo.m_strPassword = strNetworkSharePassword;
m_NetworkShareInfo.m_strVersion = strSMBVersion;
m_NetworkShareInfo.m_bAutoSend = true;
if(strNetworkAutoSend=="Disabled")
{
m_NetworkShareInfo.m_bAutoSend = false;
}
m_bAutoExitCaptureSendDICOM = false;
if(strAutoExitCaptureSendDICOM=="1")
{
m_bAutoExitCaptureSendDICOM = true;
}
m_bAutoCaptureSendDICOM = false;
if(strAutoCaptureSendDICOM=="1")
{
m_bAutoCaptureSendDICOM = true;
}
m_bAutoVideoCapture = false;
if(strAutoVideoCapture=="1")
{
m_bAutoVideoCapture = true;
}
m_bAutoCloseSendFinish = false;
if(strAutoCloseSendFinish=="1")
{
m_bAutoCloseSendFinish = true;
}
m_bAutoLogin = false;
if(strAutoLogin=="1")
{
m_bAutoLogin = true;
}
m_strDICOMCharacterSet = strDICOMCharacterSet;
m_nTransferSyntax = strDICOMCompress.toInt();
m_nVideoMode = strVideoMode.toInt();
SetVideoMode(m_nVideoMode);
m_nCropMode = strCropMode.toInt();
SetCropMode(m_nCropMode);
m_nUseFixWidthLevel = strUseFixWidthLevel.toInt();
SetUseFixWidthLevel(m_nUseFixWidthLevel);
m_nUseLogLevel = strUseLogLevel.toInt();
SetLogLevel(m_nUseLogLevel);
m_nScreenSaverTime = strScreenSaverTime.toInt();
SetScreenSaverTime(m_nScreenSaverTime);
if(m_nUseLogLevel>0)
{
if(m_pLogFile==NULL)
{
QDir().mkdir("Log");
QString strLogFile = QString("Log/%1.log").arg(QDateTime::currentDateTime().toString("yyyyMMdd_HHmmss"));
m_pLogFile = new QFile(strLogFile);
m_pLogFile->open(QFile::ReadWrite | QFile::Unbuffered);
}
}
//test code
//m_bAutoExitCaptureSendDICOM = true;
//m_bAutoVideoCapture = true;
m_pDCMWorklist->SetWorklistInfo(strWorklistServerIP, strWorklistPort, strWorklistServerTitle, strWorklistClientTitle);
}
QString CommonData::GetModality()
{
return m_strModality;
}
QString CommonData::GetInstitutionName()
{
return m_strInstitutionName;
}
QString CommonData::GetStationName()
{
return m_strStationName;
}
int CommonData::GetTransferSyntax()
{
return m_nTransferSyntax;
}
void CommonData::SetModality(QString strModality)
{
m_strModality = strModality;
}
void CommonData::SetInstitutionName(QString strInstitutionName)
{
m_strInstitutionName = strInstitutionName;
}
void CommonData::SetStationName(QString strStationName)
{
m_strStationName = strStationName;
}
void CommonData::SetTransferSyntax(int nTransferSyntax)
{
m_nTransferSyntax = nTransferSyntax;
}
bool CommonData::GetEnableLog()
{
return m_bEnableLog;
}
QString CommonData::GetLocalImageFolder()
{
return m_strLocalImageFolder;
}
QString CommonData::GetLogFolder()
{
return m_strLogFolder;
}
QString CommonData::GetLocalHistoryFolder()
{
return m_strLocalHistoryFolder;
}
void CommonData::SetEnableLog(int bEnable)
{
m_bEnableLog = bEnable;
}
void CommonData::SetLocalImageFolder(QString strLocalImageFolder)
{
m_strLocalImageFolder = strLocalImageFolder;
}
void CommonData::SetLogFolder(QString strLogFolder)
{
m_strLogFolder = strLogFolder;
}
void CommonData::SetLocalHistoryFolder(QString strLocalHistoryFolder)
{
m_strLocalHistoryFolder = strLocalHistoryFolder;
}
void CommonData::Beep(bool bSound)
{
if(m_nGPIO_Buzzer<=0)
{
return;
}
if(bSound==true)
{
m_bIsCapturing = true;
if(write(m_nGPIO_Buzzer, "1", 1) != 1)
{
}
}
else
{
m_bIsCapturing = false;
if(write(m_nGPIO_Buzzer, "0", 1) != 1)
{
}
}
}
int CommonData::GetHandSwitchValue()
{
char cRead = 0;
int nReadCount = 0;
if(m_nGPIO_HandSwitch>0)
{
nReadCount = read(m_nGPIO_HandSwitch, &cRead, sizeof(char));
}
if(nReadCount==0)
{
close(m_nGPIO_HandSwitch);
//m_nGPIO_HandSwitch = open("/sys/class/gpio/gpio271/value", O_RDONLY);
m_nGPIO_HandSwitch = open(m_strGPIOHandSwitch.toUtf8(), O_RDONLY);
}
if(m_nGPIO_HandSwitch==-1)
{
qDebug() << "271 Open Failed";
}
else
{
//qDebug() << "271 Open success";
nReadCount = read(m_nGPIO_HandSwitch, &cRead, sizeof(char));
if(nReadCount>0)
{
//qDebug() << cRead;
if(cRead=='1')
{
return 1;
}
return 0;
}
//close(m_nGPIO_HandSwitch);
}
//m_nGPIO_HandSwitch = 0;
return -1;
}
bool CommonData::IsCapturing()
{
return m_bIsCapturing;
}
WorklistResponseData CommonData::GetCurrentHistoryWorklistData()
{
WorklistResponseData rd;
//rd.m_Patient = m_pCurrentHistoryStudy->pStrPatientName->toStdString().c_str();
rd.m_Patient.strPatientID = m_pCurrentHistoryStudy->pStrPatientID->toStdString().c_str();
rd.m_Patient.strPatientName = m_pCurrentHistoryStudy->pStrPatientName->toStdString().c_str();
rd.m_Patient.strPatientWeight = m_pCurrentHistoryStudy->pStrPatientWeight->toStdString().c_str();
rd.m_Patient.strPatientSex = m_pCurrentHistoryStudy->pStrPatientSex->toStdString().c_str();
rd.m_Patient.strPatientBirthDate = m_pCurrentHistoryStudy->pStrPatientBirthDate->toStdString().c_str();
rd.m_Study.strStudyInstanceUID = m_pCurrentHistoryStudy->pStrStudyInstanceUID->toStdString().c_str();
rd.m_Study.strStudyDescription = m_pCurrentHistoryStudy->pStrStudyDescription->toStdString().c_str();
rd.m_Study.strStudyDate = m_pCurrentHistoryStudy->pStrStudyDate->toStdString().c_str();
rd.m_Study.strStudyTime = m_pCurrentHistoryStudy->pStrStudyTime->toStdString().c_str();
rd.m_ScheduledData.strScheduledCodeValue = m_pCurrentHistoryStudy->pStrStudyCodeValue->toStdString().c_str();
rd.m_Study.strReferringPhysiciansName = m_pCurrentHistoryStudy->pStrReferringPhysiciansName->toStdString().c_str();
rd.m_Study.strAccessionNumber = m_pCurrentHistoryStudy->pStrAccessionNumber->toStdString().c_str();
rd.m_Series.strSeriesInstanceUID = m_pCurrentHistoryStudy->pStrSeriesInstanceUID->toStdString().c_str();
rd.m_Series.strSeriesDescription = m_pCurrentHistoryStudy->pStrSeriesDescription->toStdString().c_str();
rd.m_Series.strModality = m_pCurrentHistoryStudy->pStrModality->toStdString().c_str();
rd.m_Series.strSeriesDate = m_pCurrentHistoryStudy->pStrSeriesDate->toStdString().c_str();
rd.m_Series.strSeriesTime = m_pCurrentHistoryStudy->pStrSeriesTime->toStdString().c_str();
//rd.m_Series.strBodyPartExamined;
rd.m_Series.strOperatorsName = m_pCurrentHistoryStudy->pStrOperatorsName->toStdString().c_str();
return rd;
}
WorklistResponseData CommonData::GetCurrentWorklistData()
{
WorklistResponseData rd;
m_LockAcquisitionInfo.lock();
rd.m_Patient = *m_AcquisitionInfo.GetPatientInfo();
rd.m_Study = *m_AcquisitionInfo.GetStudyInfo();
rd.m_Series = *m_AcquisitionInfo.GetSeriesInfo();
rd.m_Image = *m_AcquisitionInfo.GetImageInfo();
rd.m_ScheduledData = *m_AcquisitionInfo.GetScheduledDataInfo();
return rd;
}
void CommonData::ReleaseCurrentWorklistData()
{
m_LockAcquisitionInfo.unlock();
}
qint64 CommonData::ComputeStorageSize()
{
foreach (const QStorageInfo &storage, QStorageInfo::mountedVolumes()) {
QString strRootPath = storage.rootPath();
qDebug() << strRootPath;
if(strRootPath=="/data")
{
if (storage.isReadOnly())
qDebug() << "isReadOnly:" << storage.isReadOnly();
qDebug() << "name:" << storage.name();
qDebug() << "fileSystemType:" << storage.fileSystemType();
qDebug() << "size:" << storage.bytesTotal()/1000/1000 << "MB";
qDebug() << "availableSize:" << storage.bytesAvailable()/1000/1000 << "MB";
m_nStorageFreeSize = storage.bytesAvailable();
m_nStorageSize = storage.bytesTotal();
}
}
return m_nStorageSize;
QString strDirectory = "/data";
QFileInfo pathInfo(strDirectory);
if(pathInfo.isDir()==false)
{
return 0;
}
QDirIterator it(strDirectory, QDirIterator::Subdirectories);
qint64 total = 0;
while(it.hasNext()==true)
{
it.next();
QFileInfo fi = it.fileInfo();
if(fi.isFile()==true && fi.isSymLink()==false && fi.isAbsolute()==true)
{
total += fi.size();
}
}
qDebug() << "/data size: " << total;
m_nStorageSize = total;
return total;
}
int CommonData::GetStorageSize()
{
return (int)(m_nStorageSize/(1000*1000));
}
int CommonData::GetStorageFreeSize()
{
return (int)(m_nStorageFreeSize/(1000*1000));
}
vector<QString>* CommonData::GetExportList()
{
return &m_ListExport;
}
QString* CommonData::GetExternalDiskPath()
{
return &m_strExternalDiskPath;
}
QString* CommonData::GetImageExtension()
{
return &m_strImageExtension;
}
void CommonData::SetSearchItemHistory(SEARCH_ITEM si)
{
m_SearchItemHistory = si;
}
void CommonData::SetHistorySearchStudyIndex(int nStudyIndex)
{
m_nSearchItemHistoryStudyIndex = nStudyIndex;
}
SEARCH_ITEM* CommonData::GetSearchItemHistory()
{
return &m_SearchItemHistory;
}
int CommonData::GetHistorySearchStudyIndex()
{
return m_nSearchItemHistoryStudyIndex;
}
void CommonData::ClearHistorySearchItem()
{
m_SearchItemHistory.Clear();
}
void CommonData::ClearHistorySearchStudyIndex()
{
m_nSearchItemHistoryStudyIndex = -1;
}
bool CommonData::IsAutoCloseSendFinish()
{
return m_bAutoCloseSendFinish;
}
bool CommonData::IsAutoLogin()
{
return m_bAutoLogin;
}
void CommonData::SetAutoLogin(bool bEnable)
{
m_bAutoLogin = bEnable;
}
QString CommonData::GetBeepGPIONumber()
{
return m_strGPIOBeep;
}
QString CommonData::GetHandswitchGPIONumber()
{
return m_strGPIOHandSwitch;
}
bool CommonData::IsActiveDetect()
{
return m_bActiveDetect;
}
void CommonData::SetActiveDetect(bool bActive)
{
m_bActiveDetect = bActive;
}
void CommonData::SetUseNetworkBackupVideo(bool bUse)
{
m_NetworkShareInfo.m_bEnable = bUse;
}
bool CommonData::IsUseNetworkBackupVideo()
{
return m_NetworkShareInfo.m_bEnable;
}
NetworkShareInfo* CommonData::GetNetworkShareInfo()
{
return &m_NetworkShareInfo;
}
bool CommonData::IsAutoExitCaptureSendDICOM()
{
return m_bAutoExitCaptureSendDICOM;
}
bool CommonData::IsAutoCaptureSendDICOM()
{
return m_bAutoCaptureSendDICOM;
}
bool CommonData::IsAutoVideoCapture()
{
return m_bAutoVideoCapture;
}
void CommonData::SetAutoExitCaptureSendDICOM(bool bEnable)
{
m_bAutoExitCaptureSendDICOM = bEnable;
}
void CommonData::SetAutoCaptureSendDICOM(bool bEnable)
{
m_bAutoCaptureSendDICOM = bEnable;
}
void CommonData::SetAutoVideoCapture(bool bEnable)
{
m_bAutoVideoCapture = bEnable;
}
SambaClient* CommonData::GetSambaClient()
{
return m_pSambaClient;
}
void CommonData::CreateSambaClient()
{
m_pSambaClient = new SambaClient;
}
QString CommonData::GetDICOMCharacterSet()
{
return m_strDICOMCharacterSet;
}
void CommonData::SetDICOMCharacterSet(QString strCharacterSet)
{
m_strDICOMCharacterSet = strCharacterSet;
}
void CommonData::SetAutoCloseSendComplete(bool bEnable)
{
m_bAutoCloseSendFinish = bEnable;
}
void CommonData::WriteLog(QString strLog)
{
if(m_nUseLogLevel>0)
{
m_LockLog.lock();
m_ListLog.push_back(strLog);
m_LockLog.unlock();
}
}
void CommonData::WriteLogFile(QString strLog)
{
m_LockLog.lock();
m_pLogFile->write(strLog.toStdString().c_str());
m_LockLog.unlock();
fsync(m_pLogFile->handle());
}
QStringList* CommonData::GetListLog()
{
m_LockLog.lock();
return &m_ListLog;
}
void CommonData::ReleaseListLog()
{
m_LockLog.unlock();
}
void CommonData::SetVideoMode(int nMode)
{
nMode = 0;
m_nVideoMode = nMode;
if(m_nVideoMode==0)
{
#ifdef _4K
m_nVideoWidth = 3840;
m_nVideoHeight = 2160;
#else
m_nVideoWidth = 1920;
m_nVideoHeight = 1080;
#endif
}
else if(m_nVideoMode==1)
{
m_nVideoWidth = 1280;
m_nVideoHeight = 720;
}
}
int CommonData::GetVideoMode()
{
return m_nVideoMode;
}
void CommonData::SetCropMode(int bCropMode)
{
m_nCropMode = bCropMode;
}
int CommonData::GetCropMode()
{
return m_nCropMode;
}
void CommonData::SetUseFixWidthLevel(int bFixWidthLevel)
{
m_nUseFixWidthLevel = bFixWidthLevel;
}
int CommonData::GetUseFixWidthLevel()
{
return m_nUseFixWidthLevel;
}
void CommonData::SetLogLevel(int nLevel)
{
m_nUseLogLevel = nLevel;
}
int CommonData::GetLogLevel()
{
return m_nUseLogLevel;
}
int CommonData::GetVideoWidth()
{
return m_nVideoWidth;
}
int CommonData::GetVideoHeight()
{
return m_nVideoHeight;
}
void CommonData::MakeBitmapHeader(int nWidth, int nHeight)
{
memset(m_pBitmapData, 0, m_nVideoWidth*m_nVideoHeight*3+1000);
int nSizeBitmapHeader = sizeof(BITMAPFILEHADER);
int nSizeBitmapInfoHeader = sizeof(BITMAPINFOHEADER);
memset(&m_bf, 0, sizeof(&m_bf));
m_bf.bfType = 0x4d42;
m_bf.bfOffBits = nSizeBitmapHeader + nSizeBitmapInfoHeader;
m_bf.bfSize = m_bf.bfOffBits + nWidth*nHeight*3;
m_bf.bfReserved1 = 0;
m_bf.bfReserved2 = 0;
memcpy(&m_pBitmapData[0], &m_bf, nSizeBitmapHeader);
memset(&m_bi, 0, sizeof(&m_bi));
m_bi.biSize = sizeof(BITMAPINFOHEADER);
m_bi.biWidth = nWidth;
m_bi.biHeight = -1* nHeight;
m_bi.biPlanes = 1;
m_bi.biBitCount = 24;
m_bi.biCompression = 0;
m_bi.biSizeImage = nWidth*nHeight*3;
m_bi.biXPelsPerMeter = 2835;
m_bi.biYPelsPerMeter = 2835;
m_bi.biClrUsed = 0;
m_bi.biClrImportant = 0;
memcpy(&m_pBitmapData[nSizeBitmapHeader], &m_bi, nSizeBitmapInfoHeader);
}
void CommonData::WriteBitmapFile(QString strFile, QImage* pImage)
{
int nWidth = pImage->width();
int nHeight = pImage->height();
MakeBitmapHeader(nWidth, nHeight);
QImage tmpImage = pImage->rgbSwapped();
memcpy(&m_pBitmapData[m_bf.bfOffBits], tmpImage.bits(), nWidth*nHeight*3);
//MakeBitmapHeader(1920, 1080);
QFile t2(strFile);
if(t2.exists()==true)
{
t2.remove();
}
t2.open(QFile::ReadWrite);
t2.write((const char*)m_pBitmapData, m_bf.bfSize);
t2.flush();
//t2.write((const char*)&m_bf, sizeof(BITMAPFILEHADER));
//t2.write((const char*)&m_bi, sizeof(BITMAPINFOHEADER));
//t2.write((const char*)tmpImage.bits(), 1920*1080*3);
//t2.flush();
fsync(t2.handle());
t2.close();
}
void CommonData::SetScreenSaverTime(int nMinutes)
{
m_nScreenSaverTime = nMinutes;
}
int CommonData::GetScreenSaverTime()
{
return m_nScreenSaverTime;
}
void CommonData::SetConnectHDMI(bool bConnect)
{
m_bConnectHDMI = bConnect;
}
bool CommonData::IsConnectHDMI()
{
return m_bConnectHDMI;
}