Add news:s support.

This commit is contained in:
Steven Smith 2015-11-08 13:26:29 -08:00
parent 3d66e29a5d
commit 65eaba5b2d
2 changed files with 19 additions and 10 deletions

View File

@ -20,4 +20,4 @@ void newsExit(void);
* @param imageSize Size of the image data in bytes. * @param imageSize Size of the image data in bytes.
* @param jpeg Whether the image is a JPEG or not. * @param jpeg Whether the image is a JPEG or not.
*/ */
Result NEWSU_AddNotification(const u16* title, u32 titleLength, const u16* message, u32 messageLength, const void* imageData, u32 imageSize, bool jpeg); Result NEWS_AddNotification(const u16* title, u32 titleLength, const u16* message, u32 messageLength, const void* imageData, u32 imageSize, bool jpeg);

View File

@ -22,11 +22,14 @@ typedef struct {
static Handle newsHandle; static Handle newsHandle;
static int newsRefCount; static int newsRefCount;
static bool useNewsS;
Result newsInit(void) { Result newsInit(void) {
Result res; Result res;
if (AtomicPostIncrement(&newsRefCount)) return 0; if (AtomicPostIncrement(&newsRefCount)) return 0;
res = srvGetServiceHandle(&newsHandle, "news:u"); res = srvGetServiceHandle(&newsHandle, "news:u");
useNewsS = R_FAILED(res);
if (useNewsS) res = srvGetServiceHandle(&newsHandle, "news:s");
if (R_FAILED(res)) AtomicDecrement(&newsRefCount); if (R_FAILED(res)) AtomicDecrement(&newsRefCount);
return res; return res;
} }
@ -36,7 +39,7 @@ void newsExit(void) {
svcCloseHandle(newsHandle); svcCloseHandle(newsHandle);
} }
Result NEWSU_AddNotification(const u16* title, u32 titleLength, const u16* message, u32 messageLength, const void* imageData, u32 imageSize, bool jpeg) Result NEWS_AddNotification(const u16* title, u32 titleLength, const u16* message, u32 messageLength, const void* imageData, u32 imageSize, bool jpeg)
{ {
NotificationHeader header = { 0 }; NotificationHeader header = { 0 };
header.dataSet = true; header.dataSet = true;
@ -53,14 +56,20 @@ Result NEWSU_AddNotification(const u16* title, u32 titleLength, const u16* messa
cmdbuf[1] = sizeof(NotificationHeader); cmdbuf[1] = sizeof(NotificationHeader);
cmdbuf[2] = (messageLength + 1) * sizeof(u16); cmdbuf[2] = (messageLength + 1) * sizeof(u16);
cmdbuf[3] = imageSize; cmdbuf[3] = imageSize;
cmdbuf[4] = IPC_Desc_CurProcessHandle();
cmdbuf[5] = 0; // Process ID, Filled automatically by the ARM11 kernel. u32 baseIndex = 4;
cmdbuf[6] = IPC_Desc_Buffer(sizeof(NotificationHeader),IPC_BUFFER_R); if (!useNewsS) {
cmdbuf[7] = (u32) &header; cmdbuf[baseIndex] = IPC_Desc_CurProcessHandle();
cmdbuf[8] = IPC_Desc_Buffer((messageLength + 1) * sizeof(u16),IPC_BUFFER_R); cmdbuf[baseIndex + 1] = 0; // Process ID, Filled automatically by the ARM11 kernel.
cmdbuf[9] = (u32) message; baseIndex += 2;
cmdbuf[10] = IPC_Desc_Buffer(imageSize,IPC_BUFFER_R); }
cmdbuf[11] = (u32) imageData;
cmdbuf[baseIndex] = IPC_Desc_Buffer(sizeof(NotificationHeader),IPC_BUFFER_R);
cmdbuf[baseIndex + 1] = (u32) &header;
cmdbuf[baseIndex + 2] = IPC_Desc_Buffer((messageLength + 1) * sizeof(u16),IPC_BUFFER_R);
cmdbuf[baseIndex + 3] = (u32) message;
cmdbuf[baseIndex + 4] = IPC_Desc_Buffer(imageSize,IPC_BUFFER_R);
cmdbuf[baseIndex + 5] = (u32) imageData;
if(R_FAILED(ret = svcSendSyncRequest(newsHandle))) return ret; if(R_FAILED(ret = svcSendSyncRequest(newsHandle))) return ret;