Use IPC helpers for y2r

This commit is contained in:
Lectem 2015-09-09 17:07:30 -04:00
parent deb7518153
commit 123d8c6d6e

View File

@ -4,6 +4,7 @@
#include <3ds/srv.h> #include <3ds/srv.h>
#include <3ds/svc.h> #include <3ds/svc.h>
#include <3ds/types.h> #include <3ds/types.h>
#include <3ds/ipc.h>
Handle y2rHandle = 0; Handle y2rHandle = 0;
static bool initialized = false; static bool initialized = false;
@ -51,7 +52,7 @@ Result Y2RU_SetInputFormat(Y2R_InputFormat format)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00010040; cmdbuf[0] = IPC_MakeHeader(0x1,1,0); // 0x10040
cmdbuf[1] = format; cmdbuf[1] = format;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -62,7 +63,7 @@ Result Y2RU_SetOutputFormat(Y2R_OutputFormat format)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00030040; cmdbuf[0] = IPC_MakeHeader(0x3,1,0); // 0x30040
cmdbuf[1] = format; cmdbuf[1] = format;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -73,7 +74,7 @@ Result Y2RU_SetRotation(Y2R_Rotation rotation)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00050040; cmdbuf[0] = IPC_MakeHeader(0x5,1,0); // 0x50040
cmdbuf[1] = rotation; cmdbuf[1] = rotation;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -84,7 +85,7 @@ Result Y2RU_SetBlockAlignment(Y2R_BlockAlignment alignment)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00070040; cmdbuf[0] = IPC_MakeHeader(0x7,1,0); // 0x70040
cmdbuf[1] = alignment; cmdbuf[1] = alignment;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -95,7 +96,7 @@ Result Y2RU_SetTransferEndInterrupt(bool should_interrupt)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000D0040; cmdbuf[0] = IPC_MakeHeader(0xD,1,0); // 0xD0040
cmdbuf[1] = should_interrupt; cmdbuf[1] = should_interrupt;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -112,7 +113,7 @@ Result Y2RU_GetTransferEndEvent(Handle* end_event)
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000F0000; cmdbuf[0] = IPC_MakeHeader(0xF,0,0); // 0xF0000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -124,12 +125,12 @@ Result Y2RU_SetSendingY(const void* src_buf, u32 image_size, s16 transfer_unit,
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00100102; cmdbuf[0] = IPC_MakeHeader(0x10,4,2); // 0x100102
cmdbuf[1] = (u32)src_buf; cmdbuf[1] = (u32)src_buf;
cmdbuf[2] = image_size; cmdbuf[2] = image_size;
cmdbuf[3] = transfer_unit; cmdbuf[3] = transfer_unit;
cmdbuf[4] = transfer_gap; cmdbuf[4] = transfer_gap;
cmdbuf[5] = 0; cmdbuf[5] = IPC_Desc_SharedHandles(1);
cmdbuf[6] = CUR_PROCESS_HANDLE; cmdbuf[6] = CUR_PROCESS_HANDLE;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -140,12 +141,12 @@ Result Y2RU_SetSendingU(const void* src_buf, u32 image_size, s16 transfer_unit,
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00110102; cmdbuf[0] = IPC_MakeHeader(0x11,4,2); // 0x110102
cmdbuf[1] = (u32)src_buf; cmdbuf[1] = (u32)src_buf;
cmdbuf[2] = image_size; cmdbuf[2] = image_size;
cmdbuf[3] = transfer_unit; cmdbuf[3] = transfer_unit;
cmdbuf[4] = transfer_gap; cmdbuf[4] = transfer_gap;
cmdbuf[5] = 0; cmdbuf[5] = IPC_Desc_SharedHandles(1);
cmdbuf[6] = CUR_PROCESS_HANDLE; cmdbuf[6] = CUR_PROCESS_HANDLE;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -156,12 +157,12 @@ Result Y2RU_SetSendingV(const void* src_buf, u32 image_size, s16 transfer_unit,
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00120102; cmdbuf[0] = IPC_MakeHeader(0x12,4,2); // 0x120102
cmdbuf[1] = (u32)src_buf; cmdbuf[1] = (u32)src_buf;
cmdbuf[2] = image_size; cmdbuf[2] = image_size;
cmdbuf[3] = transfer_unit; cmdbuf[3] = transfer_unit;
cmdbuf[4] = transfer_gap; cmdbuf[4] = transfer_gap;
cmdbuf[5] = 0; cmdbuf[5] = IPC_Desc_SharedHandles(1);
cmdbuf[6] = CUR_PROCESS_HANDLE; cmdbuf[6] = CUR_PROCESS_HANDLE;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -172,12 +173,12 @@ Result Y2RU_SetSendingYUYV(const void* src_buf, u32 image_size, s16 transfer_uni
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00130102; cmdbuf[0] = IPC_MakeHeader(0x13,4,2); // 0x130102
cmdbuf[1] = (u32)src_buf; cmdbuf[1] = (u32)src_buf;
cmdbuf[2] = image_size; cmdbuf[2] = image_size;
cmdbuf[3] = transfer_unit; cmdbuf[3] = transfer_unit;
cmdbuf[4] = transfer_gap; cmdbuf[4] = transfer_gap;
cmdbuf[5] = 0; cmdbuf[5] = IPC_Desc_SharedHandles(1);
cmdbuf[6] = CUR_PROCESS_HANDLE; cmdbuf[6] = CUR_PROCESS_HANDLE;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -188,7 +189,7 @@ Result Y2RU_IsDoneSendingYUYV(bool* is_done)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00140000; cmdbuf[0] = IPC_MakeHeader(0x14,0,0); // 0x140000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*is_done = cmdbuf[2] & 0xFF; *is_done = cmdbuf[2] & 0xFF;
@ -199,7 +200,7 @@ Result Y2RU_IsDoneSendingY(bool* is_done)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00150000; cmdbuf[0] = IPC_MakeHeader(0x15,0,0); // 0x150000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*is_done = cmdbuf[2] & 0xFF; *is_done = cmdbuf[2] & 0xFF;
@ -210,7 +211,7 @@ Result Y2RU_IsDoneSendingU(bool* is_done)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00160000; cmdbuf[0] = IPC_MakeHeader(0x16,0,0); // 0x160000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*is_done = cmdbuf[2] & 0xFF; *is_done = cmdbuf[2] & 0xFF;
@ -221,7 +222,7 @@ Result Y2RU_IsDoneSendingV(bool* is_done)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00170000; cmdbuf[0] = IPC_MakeHeader(0x17,0,0); // 0x170000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*is_done = cmdbuf[2] & 0xFF; *is_done = cmdbuf[2] & 0xFF;
@ -232,12 +233,12 @@ Result Y2RU_SetReceiving(void* dst_buf, u32 image_size, s16 transfer_unit, s16 t
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00180102; cmdbuf[0] = IPC_MakeHeader(0x18,4,2); // 0x180102
cmdbuf[1] = (u32)dst_buf; cmdbuf[1] = (u32)dst_buf;
cmdbuf[2] = image_size; cmdbuf[2] = image_size;
cmdbuf[3] = transfer_unit; cmdbuf[3] = transfer_unit;
cmdbuf[4] = transfer_gap; cmdbuf[4] = transfer_gap;
cmdbuf[5] = 0; cmdbuf[5] = IPC_Desc_SharedHandles(1);
cmdbuf[6] = CUR_PROCESS_HANDLE; cmdbuf[6] = CUR_PROCESS_HANDLE;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -248,7 +249,7 @@ Result Y2RU_IsDoneReceiving(bool* is_done)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00190000; cmdbuf[0] = IPC_MakeHeader(0x19,0,0); // 0x190000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*is_done = cmdbuf[2] & 0xFF; *is_done = cmdbuf[2] & 0xFF;
@ -259,7 +260,7 @@ Result Y2RU_SetInputLineWidth(u16 line_width)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x001A0040; cmdbuf[0] = IPC_MakeHeader(0x1A,1,0); // 0x1A0040
cmdbuf[1] = line_width; cmdbuf[1] = line_width;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -270,7 +271,7 @@ Result Y2RU_SetInputLines(u16 num_lines)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x001C0040; cmdbuf[0] = IPC_MakeHeader(0x1C,1,0); // 0x1C0040
cmdbuf[1] = num_lines; cmdbuf[1] = num_lines;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -281,7 +282,7 @@ Result Y2RU_SetCoefficients(const Y2R_ColorCoefficients* coefficients)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x001E0100; cmdbuf[0] = IPC_MakeHeader(0x1E,4,0); // 0x1E0100
memcpy(&cmdbuf[1], coefficients, sizeof(Y2R_ColorCoefficients)); memcpy(&cmdbuf[1], coefficients, sizeof(Y2R_ColorCoefficients));
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -292,7 +293,7 @@ Result Y2RU_SetStandardCoefficient(Y2R_StandardCoefficient coefficient)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00200040; cmdbuf[0] = IPC_MakeHeader(0x20,1,0); // 0x200040
cmdbuf[1] = coefficient; cmdbuf[1] = coefficient;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -303,7 +304,7 @@ Result Y2RU_SetAlpha(u16 alpha)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00220040; cmdbuf[0] = IPC_MakeHeader(0x22,1,0); // 0x220040
cmdbuf[1] = alpha; cmdbuf[1] = alpha;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -314,7 +315,7 @@ Result Y2RU_SetUnknownParams(const u16 params[16])
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00240200; cmdbuf[0] = IPC_MakeHeader(0x24,8,0); // 0x240200
memcpy(&cmdbuf[1], params, sizeof(u16) * 16); memcpy(&cmdbuf[1], params, sizeof(u16) * 16);
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -325,7 +326,7 @@ Result Y2RU_StartConversion(void)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00260000; cmdbuf[0] = IPC_MakeHeader(0x26,0,0); // 0x260000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
return cmdbuf[1]; return cmdbuf[1];
@ -335,7 +336,7 @@ Result Y2RU_StopConversion(void)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00270000; cmdbuf[0] = IPC_MakeHeader(0x27,0,0); // 0x270000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
return cmdbuf[1]; return cmdbuf[1];
@ -345,7 +346,7 @@ Result Y2RU_IsBusyConversion(bool* is_busy)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00280000; cmdbuf[0] = IPC_MakeHeader(0x28,0,0); // 0x280000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*is_busy = cmdbuf[2] & 0xFF; *is_busy = cmdbuf[2] & 0xFF;
@ -356,7 +357,7 @@ Result Y2RU_SetConversionParams(const Y2R_ConversionParams* params)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x002901C0; cmdbuf[0] = IPC_MakeHeader(0x29,7,0); // 0x2901C0
memcpy(&cmdbuf[1], params, sizeof(Y2R_ConversionParams)); memcpy(&cmdbuf[1], params, sizeof(Y2R_ConversionParams));
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -367,7 +368,7 @@ Result Y2RU_PingProcess(u8* ping)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x002A0000; cmdbuf[0] = IPC_MakeHeader(0x2A,0,0); // 0x2A0000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*ping = (u8)cmdbuf[2]; *ping = (u8)cmdbuf[2];
@ -378,7 +379,7 @@ Result Y2RU_DriverInitialize(void)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x002B0000; cmdbuf[0] = IPC_MakeHeader(0x2B,0,0); // 0x2B0000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
return cmdbuf[1]; return cmdbuf[1];
@ -388,7 +389,7 @@ Result Y2RU_DriverFinalize(void)
{ {
Result ret = 0; Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x002C0000; cmdbuf[0] = IPC_MakeHeader(0x2C,0,0); // 0x2C0000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret; if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
return cmdbuf[1]; return cmdbuf[1];