48
48
#define AVINPUT_METHOD_GET_EDID_VERSION " getEdidVersion"
49
49
#define AVINPUT_METHOD_SET_EDID_ALLM_SUPPORT " setEdid2AllmSupport"
50
50
#define AVINPUT_METHOD_GET_EDID_ALLM_SUPPORT " getEdid2AllmSupport"
51
+ #define AVINPUT_METHOD_SET_VRR_SUPPORT " setVRRSupport"
52
+ #define AVINPUT_METHOD_GET_VRR_SUPPORT " getVRRSupport"
51
53
#define AVINPUT_METHOD_GET_HDMI_COMPATIBILITY_VERSION " getHdmiVersion"
52
54
#define AVINPUT_METHOD_SET_MIXER_LEVELS " setMixerLevels"
53
55
#define AVINPUT_METHOD_START_INPUT " startInput"
@@ -156,7 +158,11 @@ void AVInput::InitializeIARM()
156
158
IARM_BUS_DSMGR_NAME,
157
159
IARM_BUS_DSMGR_EVENT_HDMI_IN_ALLM_STATUS,
158
160
dsAVGameFeatureStatusEventHandler));
159
- IARM_CHECK (IARM_Bus_RegisterEventHandler (
161
+ IARM_CHECK (IARM_Bus_RegisterEventHandler (
162
+ IARM_BUS_DSMGR_NAME,
163
+ IARM_BUS_DSMGR_EVENT_HDMI_IN_VRR_STATUS,
164
+ dsAVGameFeatureStatusEventHandler));
165
+ IARM_CHECK (IARM_Bus_RegisterEventHandler (
160
166
IARM_BUS_DSMGR_NAME,
161
167
IARM_BUS_DSMGR_EVENT_COMPOSITE_IN_HOTPLUG,
162
168
dsAVEventHandler));
@@ -198,6 +204,9 @@ void AVInput::DeinitializeIARM()
198
204
IARM_CHECK (IARM_Bus_RemoveEventHandler (
199
205
IARM_BUS_DSMGR_NAME,
200
206
IARM_BUS_DSMGR_EVENT_HDMI_IN_ALLM_STATUS, dsAVGameFeatureStatusEventHandler));
207
+ IARM_CHECK (IARM_Bus_RemoveEventHandler (
208
+ IARM_BUS_DSMGR_NAME,
209
+ IARM_BUS_DSMGR_EVENT_HDMI_IN_VRR_STATUS, dsAVGameFeatureStatusEventHandler));
201
210
IARM_CHECK (IARM_Bus_RemoveEventHandler (
202
211
IARM_BUS_DSMGR_NAME,
203
212
IARM_BUS_DSMGR_EVENT_COMPOSITE_IN_HOTPLUG, dsAVEventHandler));
@@ -231,6 +240,8 @@ void AVInput::RegisterAll()
231
240
Register<JsonObject, JsonObject>(_T (AVINPUT_METHOD_SET_MIXER_LEVELS), &AVInput::setMixerLevels, this );
232
241
Register<JsonObject, JsonObject>(_T (AVINPUT_METHOD_SET_EDID_ALLM_SUPPORT), &AVInput::setEdid2AllmSupportWrapper, this );
233
242
Register<JsonObject, JsonObject>(_T (AVINPUT_METHOD_GET_EDID_ALLM_SUPPORT), &AVInput::getEdid2AllmSupportWrapper, this );
243
+ Register<JsonObject, JsonObject>(_T (AVINPUT_METHOD_SET_VRR_SUPPORT), &AVInput::setVRRSupportWrapper, this );
244
+ Register<JsonObject, JsonObject>(_T (AVINPUT_METHOD_GET_VRR_SUPPORT), &AVInput::getVRRSupportWrapper, this );
234
245
Register<JsonObject, JsonObject>(_T (AVINPUT_METHOD_GET_HDMI_COMPATIBILITY_VERSION), &AVInput::getHdmiVersionWrapper, this );
235
246
Register<JsonObject, JsonObject>(_T (AVINPUT_METHOD_START_INPUT), &AVInput::startInput, this );
236
247
Register<JsonObject, JsonObject>(_T (AVINPUT_METHOD_STOP_INPUT), &AVInput::stopInput, this );
@@ -239,6 +250,7 @@ void AVInput::RegisterAll()
239
250
Register<JsonObject, JsonObject>(_T (AVINPUT_METHOD_GAME_FEATURE_STATUS), &AVInput::getGameFeatureStatusWrapper, this );
240
251
m_primVolume = DEFAULT_PRIM_VOL_LEVEL;
241
252
m_inputVolume = DEFAULT_INPUT_VOL_LEVEL;
253
+ m_currentVrrType = dsVRR_NONE;
242
254
}
243
255
244
256
void AVInput::UnregisterAll ()
@@ -251,6 +263,8 @@ void AVInput::UnregisterAll()
251
263
Unregister (_T (AVINPUT_METHOD_READ_EDID));
252
264
Unregister (_T (AVINPUT_METHOD_READ_RAWSPD));
253
265
Unregister (_T (AVINPUT_METHOD_READ_SPD));
266
+ Unregister (_T (AVINPUT_METHOD_SET_VRR_SUPPORT));
267
+ Unregister (_T (AVINPUT_METHOD_GET_VRR_SUPPORT));
254
268
Unregister (_T (AVINPUT_METHOD_SET_EDID_VERSION));
255
269
Unregister (_T (AVINPUT_METHOD_GET_EDID_VERSION));
256
270
Unregister (_T (AVINPUT_METHOD_START_INPUT));
@@ -1001,6 +1015,28 @@ void AVInput::dsAVGameFeatureStatusEventHandler(const char *owner, IARM_EventId_
1001
1015
1002
1016
AVInput::_instance->AVInputALLMChange (hdmi_in_port, allm_mode);
1003
1017
}
1018
+ if (IARM_BUS_DSMGR_EVENT_HDMI_IN_VRR_STATUS == eventId)
1019
+ {
1020
+ IARM_Bus_DSMgr_EventData_t *eventData = (IARM_Bus_DSMgr_EventData_t *)data;
1021
+ int hdmi_in_port = eventData->data .hdmi_in_vrr_mode .port ;
1022
+ dsVRRType_t new_vrrType = eventData->data .hdmi_in_vrr_mode .vrr_type ;
1023
+ LOGWARN (" Received IARM_BUS_DSMGR_EVENT_HDMI_IN_VRR_STATUS event port: %d, VRR Type: %d" , hdmi_in_port,new_vrrType);
1024
+
1025
+ if (new_vrrType == dsVRR_NONE)
1026
+ {
1027
+ if (AVInput::_instance->m_currentVrrType != dsVRR_NONE){
1028
+ AVInput::_instance->AVInputVRRChange (hdmi_in_port, AVInput::_instance->m_currentVrrType , false );
1029
+ }
1030
+ }
1031
+ else
1032
+ {
1033
+ if (AVInput::_instance->m_currentVrrType != dsVRR_NONE){
1034
+ AVInput::_instance->AVInputVRRChange (hdmi_in_port, AVInput::_instance->m_currentVrrType , false );
1035
+ }
1036
+ AVInput::_instance->AVInputVRRChange (hdmi_in_port, new_vrrType, true );
1037
+ }
1038
+ AVInput::_instance->m_currentVrrType = new_vrrType;
1039
+ }
1004
1040
}
1005
1041
1006
1042
void AVInput::AVInputALLMChange ( int port , bool allm_mode)
@@ -1013,6 +1049,37 @@ void AVInput::AVInputALLMChange( int port , bool allm_mode)
1013
1049
sendNotify (AVINPUT_EVENT_ON_GAME_FEATURE_STATUS_CHANGED, params);
1014
1050
}
1015
1051
1052
+ void AVInput::AVInputVRRChange ( int port , dsVRRType_t vrr_type, bool vrr_mode)
1053
+ {
1054
+ JsonObject params;
1055
+ switch (vrr_type)
1056
+ {
1057
+ case dsVRR_HDMI_VRR:
1058
+ params[" id" ] = port;
1059
+ params[" gameFeature" ] = " VRR-HDMI" ;
1060
+ params[" mode" ] = vrr_mode;
1061
+ break ;
1062
+ case dsVRR_AMD_FREESYNC:
1063
+ params[" id" ] = port;
1064
+ params[" gameFeature" ] = " VRR-FREESYNC" ;
1065
+ params[" mode" ] = vrr_mode;
1066
+ break ;
1067
+ case dsVRR_AMD_FREESYNC_PREMIUM:
1068
+ params[" id" ] = port;
1069
+ params[" gameFeature" ] = " VRR-FREESYNC-PREMIUM" ;
1070
+ params[" mode" ] = vrr_mode;
1071
+ break ;
1072
+ case dsVRR_AMD_FREESYNC_PREMIUM_PRO:
1073
+ params[" id" ] = port;
1074
+ params[" gameFeature" ] = " VRR-FREESYNC-PREMIUM-PRO" ;
1075
+ params[" mode" ] = vrr_mode;
1076
+ break ;
1077
+ default :
1078
+ break ;
1079
+ }
1080
+ sendNotify (AVINPUT_EVENT_ON_GAME_FEATURE_STATUS_CHANGED, params);
1081
+ }
1082
+
1016
1083
uint32_t AVInput::getSupportedGameFeatures (const JsonObject& parameters, JsonObject& response)
1017
1084
{
1018
1085
LOGINFOMETHOD ();
@@ -1067,9 +1134,49 @@ uint32_t AVInput::getGameFeatureStatusWrapper(const JsonObject& parameters, Json
1067
1134
LOGWARN (" AVInput::getGameFeatureStatusWrapper ALLM MODE:%d" , allm);
1068
1135
response[" mode" ] = allm;
1069
1136
}
1137
+ else if (strcmp (sGameFeature .c_str (), " VRR-HDMI" ) == 0 )
1138
+ {
1139
+ bool hdmi_vrr = false ;
1140
+ dsVRRType_t vrrType;
1141
+ getVRRStatus (portId, &vrrType);
1142
+ if (vrrType == dsVRR_HDMI_VRR)
1143
+ hdmi_vrr = true ;
1144
+ LOGWARN (" AVInput::getGameFeatureStatusWrapper HDMI VRR MODE:%d" , hdmi_vrr);
1145
+ response[" mode" ] = hdmi_vrr;
1146
+ }
1147
+ else if (strcmp (sGameFeature .c_str (), " VRR-FREESYNC" ) == 0 )
1148
+ {
1149
+ bool freesync = false ;
1150
+ dsVRRType_t vrrType;
1151
+ getVRRStatus (portId, &vrrType);
1152
+ if (vrrType == dsVRR_AMD_FREESYNC)
1153
+ freesync = true ;
1154
+ LOGWARN (" AVInput::getGameFeatureStatusWrapper FREESYNC MODE:%d" , freesync);
1155
+ response[" mode" ] = freesync;
1156
+ }
1157
+ else if (strcmp (sGameFeature .c_str (), " VRR-FREESYNC-PREMIUM" ) == 0 )
1158
+ {
1159
+ bool freesync_premium = false ;
1160
+ dsVRRType_t vrrType;
1161
+ getVRRStatus (portId, &vrrType);
1162
+ if (vrrType == dsVRR_AMD_FREESYNC_PREMIUM)
1163
+ freesync_premium = true ;
1164
+ LOGWARN (" AVInput::getGameFeatureStatusWrapper FREESYNC PREMIUM MODE:%d" , freesync_premium);
1165
+ response[" mode" ] = freesync_premium;
1166
+ }
1167
+ else if (strcmp (sGameFeature .c_str (), " VRR-FREESYNC-PREMIUM-PRO" ) == 0 )
1168
+ {
1169
+ bool freesync_premium_pro = false ;
1170
+ dsVRRType_t vrrType;
1171
+ getVRRStatus (portId, &vrrType);
1172
+ if (vrrType == dsVRR_AMD_FREESYNC_PREMIUM_PRO)
1173
+ freesync_premium_pro = true ;
1174
+ LOGWARN (" AVInput::getGameFeatureStatusWrapper FREESYNC PREMIUM PRO MODE:%d" , freesync_premium_pro);
1175
+ response[" mode" ] = freesync_premium_pro;
1176
+ }
1070
1177
else
1071
1178
{
1072
- LOGWARN (" AVInput::getGameFeatureStatusWrapper Mode is not supported. Supported mode: ALLM" );
1179
+ LOGWARN (" AVInput::getGameFeatureStatusWrapper Mode is not supported. Supported mode: ALLM, VRR-HDMI, VRR-FREESYNC-PREMIUM " );
1073
1180
returnResponse (false );
1074
1181
}
1075
1182
returnResponse (true );
@@ -1091,6 +1198,21 @@ bool AVInput::getALLMStatus(int iPort)
1091
1198
return allm;
1092
1199
}
1093
1200
1201
+ void AVInput::getVRRStatus (int iPort, dsVRRType_t *vrrType)
1202
+ {
1203
+
1204
+ try
1205
+ {
1206
+ device::HdmiInput::getInstance ().getVRRStatus (iPort, vrrType);
1207
+ LOGWARN (" AVInput::getVRRStatus VRR TYPE: %d" , *vrrType);
1208
+ }
1209
+ catch (const device::Exception& err)
1210
+ {
1211
+ LOG_DEVICE_EXCEPTION1 (std::to_string (iPort));
1212
+ }
1213
+
1214
+ }
1215
+
1094
1216
uint32_t AVInput::getRawSPDWrapper (const JsonObject& parameters, JsonObject& response)
1095
1217
{
1096
1218
LOGINFOMETHOD ();
@@ -1363,6 +1485,96 @@ uint32_t AVInput::getEdid2AllmSupportWrapper(const JsonObject& parameters, JsonO
1363
1485
}
1364
1486
}
1365
1487
1488
+ bool AVInput::getVRRSupport (int portId,bool *vrrSupportValue)
1489
+ {
1490
+ bool ret = true ;
1491
+ try
1492
+ {
1493
+ device::HdmiInput::getInstance ().getVRRSupport (portId, vrrSupportValue);
1494
+ LOGINFO (" AVInput - getVRRSupport:%d" , *vrrSupportValue);
1495
+ }
1496
+ catch (const device::Exception& err)
1497
+ {
1498
+ LOG_DEVICE_EXCEPTION1 (std::to_string (portId));
1499
+ ret = false ;
1500
+ }
1501
+ return ret;
1502
+ }
1503
+
1504
+ uint32_t AVInput::getVRRSupportWrapper (const JsonObject& parameters, JsonObject& response)
1505
+ {
1506
+ LOGINFOMETHOD ();
1507
+ string sPortId = parameters[" portId" ].String ();
1508
+
1509
+ int portId = 0 ;
1510
+ bool vrrSupport = true ;
1511
+ returnIfParamNotFound (parameters, " portId" );
1512
+
1513
+ try {
1514
+ portId = stoi (sPortId );
1515
+ }catch (const std::exception& err) {
1516
+ LOGWARN (" sPortId invalid paramater: %s " , sPortId .c_str ());
1517
+ returnResponse (false );
1518
+ }
1519
+
1520
+ bool result = getVRRSupport (portId, &vrrSupport);
1521
+ if (result == true )
1522
+ {
1523
+ response[" vrrSupport" ] = vrrSupport;
1524
+ returnResponse (true );
1525
+ }
1526
+ else
1527
+ {
1528
+ returnResponse (false );
1529
+ }
1530
+ }
1531
+
1532
+ bool AVInput::setVRRSupport (int portId, bool vrrSupport)
1533
+ {
1534
+ bool ret = true ;
1535
+ try
1536
+ {
1537
+ device::HdmiInput::getInstance ().setVRRSupport (portId, vrrSupport);
1538
+ LOGWARN (" AVInput - vrrSupport:%d" , vrrSupport);
1539
+ }
1540
+ catch (const device::Exception& err)
1541
+ {
1542
+ LOG_DEVICE_EXCEPTION1 (std::to_string (portId));
1543
+ ret = false ;
1544
+ }
1545
+ return ret;
1546
+
1547
+ }
1548
+
1549
+ uint32_t AVInput::setVRRSupportWrapper (const JsonObject& parameters, JsonObject& response)
1550
+ {
1551
+ LOGINFOMETHOD ();
1552
+
1553
+ returnIfParamNotFound (parameters, " portId" );
1554
+ returnIfParamNotFound (parameters, " vrrSupport" );
1555
+
1556
+ int portId = 0 ;
1557
+ string sPortId = parameters[" portId" ].String ();
1558
+ bool vrrSupport = parameters[" vrrSupport" ].Boolean ();
1559
+
1560
+ try {
1561
+ portId = stoi (sPortId );
1562
+ }catch (const std::exception& err) {
1563
+ LOGWARN (" sPortId invalid paramater: %s " , sPortId .c_str ());
1564
+ returnResponse (false );
1565
+ }
1566
+
1567
+ bool result = setVRRSupport (portId, vrrSupport);
1568
+ if (result == true )
1569
+ {
1570
+ returnResponse (true );
1571
+ }
1572
+ else
1573
+ {
1574
+ returnResponse (false );
1575
+ }
1576
+ }
1577
+
1366
1578
uint32_t AVInput::setEdidVersionWrapper (const JsonObject& parameters, JsonObject& response)
1367
1579
{
1368
1580
LOGINFOMETHOD ();
0 commit comments