]> Chaos Git - corbenik/ctrulib.git/commitdiff
Add news:s support.
authorSteven Smith <Steveice10@gmail.com>
Sun, 8 Nov 2015 21:26:29 +0000 (13:26 -0800)
committerSteven Smith <Steveice10@gmail.com>
Sun, 8 Nov 2015 21:26:29 +0000 (13:26 -0800)
libctru/include/3ds/services/news.h
libctru/source/services/news.c

index 14717af79633c65b1219c25fde70c82bc93f7651..5c265f687a6a17b2696e609417fce6dff11c3047 100644 (file)
@@ -20,4 +20,4 @@ void newsExit(void);
  * @param imageSize Size of the image data in bytes.
  * @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);
index 50ee1a324e8be97025db975a95be4c550bce7fd1..c2108cc15d623433210f56351d9653dd7c010c7d 100644 (file)
@@ -22,11 +22,14 @@ typedef struct {
 
 static Handle newsHandle;
 static int newsRefCount;
+static bool useNewsS;
 
 Result newsInit(void) {
        Result res;
        if (AtomicPostIncrement(&newsRefCount)) return 0;
        res = srvGetServiceHandle(&newsHandle, "news:u");
+       useNewsS = R_FAILED(res);
+       if (useNewsS) res = srvGetServiceHandle(&newsHandle, "news:s");
        if (R_FAILED(res)) AtomicDecrement(&newsRefCount);
        return res;
 }
@@ -36,7 +39,7 @@ void newsExit(void) {
        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 };
        header.dataSet = true;
@@ -53,14 +56,20 @@ Result NEWSU_AddNotification(const u16* title, u32 titleLength, const u16* messa
        cmdbuf[1] = sizeof(NotificationHeader);
        cmdbuf[2] = (messageLength + 1) * sizeof(u16);
        cmdbuf[3] = imageSize;
-       cmdbuf[4] = IPC_Desc_CurProcessHandle();
-       cmdbuf[5] = 0; // Process ID, Filled automatically by the ARM11 kernel.
-       cmdbuf[6] = IPC_Desc_Buffer(sizeof(NotificationHeader),IPC_BUFFER_R);
-       cmdbuf[7] = (u32) &header;
-       cmdbuf[8] = IPC_Desc_Buffer((messageLength + 1) * sizeof(u16),IPC_BUFFER_R);
-       cmdbuf[9] = (u32) message;
-       cmdbuf[10] = IPC_Desc_Buffer(imageSize,IPC_BUFFER_R);
-       cmdbuf[11] = (u32) imageData;
+
+       u32 baseIndex = 4;
+       if (!useNewsS) {
+               cmdbuf[baseIndex] = IPC_Desc_CurProcessHandle();
+               cmdbuf[baseIndex + 1] = 0; // Process ID, Filled automatically by the ARM11 kernel.
+               baseIndex += 2;
+       }
+
+       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;