Files
2026-08-24 10:03:24 +08:00

83 lines
2.1 KiB
C++

// ImageDisplayThread.cpp
#include "QtRx.h"
QtRx::QtRx()
{
mpTvClient = TvClient::GetInstance();
mpTvClient->setTvClientObserver(this);
}
QtRx::~QtRx()
{
mpTvClient->Release();
}
static int WriteSysfs(const char *path, const char *cmd)
{
int fd;
fd = open(path, O_CREAT|O_RDWR | O_TRUNC, 0777);
if (fd >= 0) {
write(fd, cmd, strlen(cmd));
close(fd);
return 0;
}
return -1;
}
static int WriteSysfs(const char *path, int value)
{
char cmdbuf[32] = {0};
sprintf(cmdbuf,"%d",value);
return WriteSysfs(path, cmdbuf);
}
void QtRx::onTvClientEvent(CTvEvent &event)
{
int eventType = event.getEventType();
printf("%s: eventType: %d.\n", __FUNCTION__, eventType);
switch (eventType) {
case CTvEvent::TV_EVENT_SINGLE_DETECT: {
TvEvent::SignalDetectEvent *signalDetectEvent = (TvEvent::SignalDetectEvent *)(&event);
printf("%s: source: %d, signalFmt: %d, transFmt: %d, status: %d, isDVI: %d, Hdrinfo: %ud.\n", __FUNCTION__,
signalDetectEvent->mSourceInput,
signalDetectEvent->mFmt,
signalDetectEvent->mTrans_fmt,
signalDetectEvent->mStatus,
signalDetectEvent->mDviFlag,
signalDetectEvent->mhdr_info);
WriteSysfs("/sys/class/video/disable_video", 0);
break;
}
case CTvEvent::TV_EVENT_SOURCE_CONNECT: {
TvEvent::SourceConnectEvent *sourceConnectEvent = (TvEvent::SourceConnectEvent *)(&event);
printf("%s: source: %d, connectStatus: %d\n", __FUNCTION__,
sourceConnectEvent->mSourceInput, sourceConnectEvent->connectionState);
break;
}
default:
printf("invalid event!\n", __FUNCTION__);
break;
}
return;
}
int QtRx::SendCmd(const char *data) {
printf("%s: cmd is %s.\n", __FUNCTION__, data);
if (strcmp(data, "start") == 0) {
mpTvClient->StartTv(CurrentSource);
} else if (strcmp(data, "stop") == 0) {
mpTvClient->StopTv(CurrentSource);
} else {
printf("%s: invalid cmd\n", __FUNCTION__);
}
return 0;
}