2014-07-12 09:46:14 +02:00
|
|
|
#include "stdafx.h"
|
2015-08-21 22:57:49 +02:00
|
|
|
#include "Emu/IdManager.h"
|
2016-03-21 20:43:03 +01:00
|
|
|
#include "Emu/Cell/PPUModule.h"
|
2014-08-23 22:40:04 +02:00
|
|
|
|
2014-08-16 18:20:16 +02:00
|
|
|
#include "cellGem.h"
|
2013-09-28 04:36:57 +02:00
|
|
|
|
2017-05-13 20:30:37 +02:00
|
|
|
logs::channel cellGem("cellGem");
|
2013-09-28 04:36:57 +02:00
|
|
|
|
2015-08-21 22:57:49 +02:00
|
|
|
struct gem_t
|
|
|
|
|
{
|
|
|
|
|
CellGemAttribute attribute;
|
|
|
|
|
};
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemCalibrate()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemClearStatusFlags()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemConvertVideoFinish()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemConvertVideoStart()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemEnableCameraPitchAngleCorrection()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemEnableMagnetometer()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemEnd()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
2016-01-12 22:57:16 +01:00
|
|
|
cellGem.warning("cellGemEnd()");
|
2015-08-21 22:57:49 +02:00
|
|
|
|
|
|
|
|
if (!fxm::remove<gem_t>())
|
|
|
|
|
{
|
|
|
|
|
return CELL_GEM_ERROR_UNINITIALIZED;
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-28 04:36:57 +02:00
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemFilterState()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemForceRGB()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemGetAccelerometerPositionInDevice()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemGetAllTrackableHues()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemGetCameraState()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemGetEnvironmentLightingColor()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemGetHuePixels()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemGetImageState()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemGetInertialState()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemGetInfo(vm::ptr<CellGemInfo> info)
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
2016-01-12 22:57:16 +01:00
|
|
|
cellGem.todo("cellGemGetInfo(info=*0x%x)", info);
|
2014-10-18 20:14:16 +02:00
|
|
|
|
2015-08-21 22:57:49 +02:00
|
|
|
const auto gem = fxm::get<gem_t>();
|
|
|
|
|
|
|
|
|
|
if (!gem)
|
|
|
|
|
{
|
|
|
|
|
return CELL_GEM_ERROR_UNINITIALIZED;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO: Support connecting PlayStation Move controllers
|
|
|
|
|
info->max_connect = gem->attribute.max_connect;
|
|
|
|
|
info->now_connect = 0;
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < CELL_GEM_MAX_NUM; i++)
|
|
|
|
|
{
|
|
|
|
|
info->status[i] = CELL_GEM_STATUS_DISCONNECTED;
|
2017-06-19 07:17:19 +02:00
|
|
|
info->port[i] = 0;
|
2015-08-21 22:57:49 +02:00
|
|
|
}
|
2015-02-11 22:09:48 +01:00
|
|
|
|
2013-09-28 04:36:57 +02:00
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-12 19:12:06 +01:00
|
|
|
s32 cellGemGetMemorySize(s32 max_connect)
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
2016-01-12 22:57:16 +01:00
|
|
|
cellGem.warning("cellGemGetMemorySize(max_connect=%d)", max_connect);
|
2014-08-16 18:20:16 +02:00
|
|
|
|
2015-07-31 23:47:29 +02:00
|
|
|
if (max_connect > CELL_GEM_MAX_NUM || max_connect <= 0)
|
|
|
|
|
{
|
2014-08-16 18:20:16 +02:00
|
|
|
return CELL_GEM_ERROR_INVALID_PARAMETER;
|
2015-07-31 23:47:29 +02:00
|
|
|
}
|
2014-08-16 18:20:16 +02:00
|
|
|
|
2015-07-31 23:47:29 +02:00
|
|
|
return max_connect <= 2 ? 0x120000 : 0x140000;
|
2013-09-28 04:36:57 +02:00
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemGetRGB()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemGetRumble()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-19 07:17:19 +02:00
|
|
|
s32 cellGemGetState(u32 gem_num, u32 flag, u64 time_parameter, vm::ptr<CellGemState> gem_state)
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
2017-06-19 07:17:19 +02:00
|
|
|
cellGem.todo("cellGemGetState(gem_num=%d, flag=0x%x, time=0x%llx, gem_state=*0x%x)", gem_num, flag, time_parameter, gem_state);
|
|
|
|
|
const auto gem = fxm::get<gem_t>();
|
|
|
|
|
|
|
|
|
|
if (!gem)
|
|
|
|
|
return CELL_GEM_ERROR_UNINITIALIZED;
|
|
|
|
|
|
|
|
|
|
// clear out gem_state so no games get any funny ideas about them being connected...
|
|
|
|
|
std::memset(gem_state.get_ptr(), 0, sizeof(CellGemState));
|
|
|
|
|
|
|
|
|
|
return CELL_GEM_NOT_CONNECTED;
|
2013-09-28 04:36:57 +02:00
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemGetStatusFlags()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemGetTrackerHue()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemHSVtoRGB()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-08-21 22:57:49 +02:00
|
|
|
s32 cellGemInit(vm::cptr<CellGemAttribute> attribute)
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
2016-01-12 22:57:16 +01:00
|
|
|
cellGem.warning("cellGemInit(attribute=*0x%x)", attribute);
|
2014-09-09 17:44:02 +02:00
|
|
|
|
2015-08-21 22:57:49 +02:00
|
|
|
const auto gem = fxm::make<gem_t>();
|
|
|
|
|
|
|
|
|
|
if (!gem)
|
|
|
|
|
{
|
|
|
|
|
return CELL_GEM_ERROR_ALREADY_INITIALIZED;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gem->attribute = *attribute;
|
|
|
|
|
|
2013-09-28 04:36:57 +02:00
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemInvalidateCalibration()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemIsTrackableHue()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemPrepareCamera()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemPrepareVideoConvert()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
2015-07-31 23:47:29 +02:00
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
2014-10-18 20:14:16 +02:00
|
|
|
|
2015-07-31 23:47:29 +02:00
|
|
|
s32 cellGemReadExternalPortDeviceInfo()
|
|
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
2013-09-28 04:36:57 +02:00
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemReset()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemSetRumble()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemSetYaw()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemTrackHues()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemUpdateFinish()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemUpdateStart()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2015-07-09 17:30:37 +02:00
|
|
|
s32 cellGemWriteExternalPort()
|
2013-09-28 04:36:57 +02:00
|
|
|
{
|
|
|
|
|
UNIMPLEMENTED_FUNC(cellGem);
|
|
|
|
|
return CELL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-21 20:43:03 +01:00
|
|
|
DECLARE(ppu_module_manager::cellGem)("libgem", []()
|
|
|
|
|
{
|
|
|
|
|
REG_FUNC(libgem, cellGemCalibrate);
|
|
|
|
|
REG_FUNC(libgem, cellGemClearStatusFlags);
|
|
|
|
|
REG_FUNC(libgem, cellGemConvertVideoFinish);
|
|
|
|
|
REG_FUNC(libgem, cellGemConvertVideoStart);
|
|
|
|
|
REG_FUNC(libgem, cellGemEnableCameraPitchAngleCorrection);
|
|
|
|
|
REG_FUNC(libgem, cellGemEnableMagnetometer);
|
|
|
|
|
REG_FUNC(libgem, cellGemEnd);
|
|
|
|
|
REG_FUNC(libgem, cellGemFilterState);
|
|
|
|
|
REG_FUNC(libgem, cellGemForceRGB);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetAccelerometerPositionInDevice);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetAllTrackableHues);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetCameraState);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetEnvironmentLightingColor);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetHuePixels);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetImageState);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetInertialState);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetInfo);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetMemorySize);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetRGB);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetRumble);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetState);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetStatusFlags);
|
|
|
|
|
REG_FUNC(libgem, cellGemGetTrackerHue);
|
|
|
|
|
REG_FUNC(libgem, cellGemHSVtoRGB);
|
|
|
|
|
REG_FUNC(libgem, cellGemInit);
|
|
|
|
|
REG_FUNC(libgem, cellGemInvalidateCalibration);
|
|
|
|
|
REG_FUNC(libgem, cellGemIsTrackableHue);
|
|
|
|
|
REG_FUNC(libgem, cellGemPrepareCamera);
|
|
|
|
|
REG_FUNC(libgem, cellGemPrepareVideoConvert);
|
|
|
|
|
REG_FUNC(libgem, cellGemReadExternalPortDeviceInfo);
|
|
|
|
|
REG_FUNC(libgem, cellGemReset);
|
|
|
|
|
REG_FUNC(libgem, cellGemSetRumble);
|
|
|
|
|
REG_FUNC(libgem, cellGemSetYaw);
|
|
|
|
|
REG_FUNC(libgem, cellGemTrackHues);
|
|
|
|
|
REG_FUNC(libgem, cellGemUpdateFinish);
|
|
|
|
|
REG_FUNC(libgem, cellGemUpdateStart);
|
|
|
|
|
REG_FUNC(libgem, cellGemWriteExternalPort);
|
2015-02-18 17:22:06 +01:00
|
|
|
});
|