symbian-qemu-0.9.1-12/model-libraries/syborg-graphicswrapper/syborg-graphicswrapper.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/model-libraries/syborg-graphicswrapper/syborg-graphicswrapper.cpp Wed Jun 02 11:02:14 2010 +0300
@@ -0,0 +1,150 @@
+// This is the main DLL file.
+
+#include "platformtypes.h"
+#include <KhronosAPIWrapper.h>
+#include <VirtualVideoInterfaceConstants.h> //Registers and enums
+#include <platformthreading.h> //mutex
+#include <protocol_MGraphicsVHWCallback.h>
+#include "syborg-graphicswrapper.h"
+
+SyborgGraphicsWrapper::SyborgGraphicsWrapper()
+ {
+ }
+
+SyborgGraphicsWrapper::~SyborgGraphicsWrapper()
+ {
+ delete m_wrapper;
+ m_wrapper = 0;
+
+ Psu::platform_release_semaphore(m_outputBufferSemaphore);
+ }
+
+int SyborgGraphicsWrapper::Reset( uint32_t *aGraphicsMemBase, uint32_t *aCommandMemBase )
+ {
+ int ret = -1;
+ if ( m_wrapper )
+ {
+ delete m_wrapper;
+ }
+ m_wrapper = NULL;
+
+ uint8_t *cmd_buffer = (uint8_t *)aCommandMemBase;
+ uint8_t *frame_buffer = (uint8_t *)aGraphicsMemBase;
+ if( (cmd_buffer != NULL) && (frame_buffer != NULL) )
+ {
+ m_wrapper = new KhronosAPIWrapper( (protocol_MGraphicsVHWCallback*)this,
+ frame_buffer, &cmd_buffer[VVHW_INPUT_BASE], &cmd_buffer[VVHW_OUTPUT_BASE] );
+ //Reset synchronisation mechanisms
+ Psu::platform_release_semaphore(m_outputBufferSemaphore);
+ Psu::platform_create_semaphore(m_outputBufferSemaphore, 1, 1);
+ ret = 0;
+ }
+ else
+ {
+ ret = -1;
+ }
+ return ret;
+ }
+
+void SyborgGraphicsWrapper::LockOutputBuffer()
+ {
+ #ifdef KHRONOS_API_W_MULTITHREAD
+ Psu::platform_wait_for_signal(m_outputBufferSemaphore);
+ #endif
+ }
+
+void SyborgGraphicsWrapper::ReleaseOutputBuffer(){}
+
+void SyborgGraphicsWrapper::ProsessingDone(int i)
+ {
+ m_pythonCallBack( i );
+ }
+
+extern "C"
+ {
+ SYBORG_GRAPHICSWRAPPER_API SyborgGraphicsWrapper* create_SyborgGraphicsWrapper()
+ {
+ return new SyborgGraphicsWrapper();
+ }
+ SYBORG_GRAPHICSWRAPPER_API int initialize_SyborgGraphicsWrapper( SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
+ {
+ Psu::platform_create_semaphore(m_outputBufferSemaphore, 1, 1);
+ // Change to proper error handling
+ return 0;
+ }
+
+ SYBORG_GRAPHICSWRAPPER_API int set_GraphicsCallBack( SyborgGraphicsWrapper* aSyborgGraphicsWrapper, int (*aGraphicsCallBack) (int) )
+ {
+ m_pythonCallBack = aGraphicsCallBack;
+ // Change to proper error handling
+ return 0;
+ }
+
+ SYBORG_GRAPHICSWRAPPER_API int reset_SyborgGraphicsWrapper( SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t *aGraphicsMemBase, uint32_t *aCommandMemBase )
+ {
+ return aSyborgGraphicsWrapper->Reset( aGraphicsMemBase, aCommandMemBase );
+ }
+
+ SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputBufferTail( SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
+ {
+ return m_wrapper->InputBufferTail();
+ }
+ SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputBufferHead( SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
+ {
+ return m_wrapper->InputBufferHead( );
+ }
+ SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputBufferReadCount( SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
+ {
+ return m_wrapper->InputBufferReadCount( );
+ }
+ SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputBufferWriteCount( SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
+ {
+ return m_wrapper->InputBufferWriteCount( );
+ }
+ SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputMaxTailIndex( SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
+ {
+ return m_wrapper->InputMaxTailIndex( );
+ }
+ SYBORG_GRAPHICSWRAPPER_API uint32_t get_cmd_memsize( void )
+ {
+ return (VVI_PARAMETERS_INPUT_MEMORY_SIZE +
+ VVI_PARAMETERS_OUTPUT_MEMORY_SIZE);
+ }
+ SYBORG_GRAPHICSWRAPPER_API uint32_t get_framebuffer_memsize( void )
+ {
+ return VVI_FRAMEBUFFER_MEMORY_SIZE;
+ }
+
+
+ SYBORG_GRAPHICSWRAPPER_API unsigned int execute_command( SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
+ {
+ return m_wrapper->Execute( );
+ }
+ SYBORG_GRAPHICSWRAPPER_API void set_InputBufferTail( SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
+ {
+ m_wrapper->SetInputBufferTail( aVal );
+ }
+ SYBORG_GRAPHICSWRAPPER_API void set_InputBufferHead( SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
+ {
+ m_wrapper->SetInputBufferHead( aVal );
+ }
+ SYBORG_GRAPHICSWRAPPER_API void set_InputBufferReadCount( SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
+ {
+ m_wrapper->SetInputBufferReadCount( aVal );
+ }
+ SYBORG_GRAPHICSWRAPPER_API void set_InputBufferWriteCount( SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
+ {
+ m_wrapper->SetInputBufferWriteCount( aVal );
+ }
+ SYBORG_GRAPHICSWRAPPER_API void set_InputMaxTailIndex( SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
+ {
+ m_wrapper->SetInputMaxTailIndex( aVal );
+ }
+ SYBORG_GRAPHICSWRAPPER_API void signal_outputbuffer_semafore( SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
+ {
+ #ifdef KHRONOS_API_W_MULTITHREAD
+ Psu::platform_signal_semaphore(m_outputBufferSemaphore);
+ #endif
+ }
+
+ }
\ No newline at end of file