Add news:s support.
This commit is contained in:
parent
3d66e29a5d
commit
65eaba5b2d
@ -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);
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user