static void spu_printf_handler_entry(uint64_t arg) { SampleUtilSpursPrintfService *service = (SampleUtilSpursPrintfService *)(uintptr_t)arg; int ret; for (;;) { sys_spu_thread_t spu; sys_event_t event; ret = sys_event_queue_receive(service->equeue, &event, 0); if (event.source == TERMINATING_PORT_NAME) { printf ("Finalizing the spu printf handler\n"); sys_ppu_thread_exit(0); } spu = event.data1; int sret = spu_thread_printf(spu, event.data3); ret = sys_spu_thread_write_spu_mb(spu, sret); if (ret) { printf ("sys_spu_thread_write_spu_mb failed (%d)\n", ret); sys_ppu_thread_exit(-1); } } /* never reach here */ sys_ppu_thread_exit(0); }
//UPDATE: this function is not currently being used in the speex task or spurs manager void _SpursPrintfThreadMain(uint64_t arg) { sys_event_t event; int iReturn; // E For unused parameter warnings (void) arg; while (1) { iReturn=sys_event_queue_receive(_g_SpuPrintfEventQueue, &event, SYS_NO_TIMEOUT); if (iReturn!=CELL_OK) { fprintf(stderr, "Event queue receive wasn't successful: %i\n", iReturn); exit(-1); } iReturn=spu_thread_printf(event.data1, event.data3); sys_spu_thread_write_spu_mb(event.data1, iReturn); } }