1/* 2 * Copyright 2009, Haiku, Inc. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Michael Lotz <mmlr@mlotz.ch> 7 */ 8#ifndef REMOTE_HW_INTERFACE_H 9#define REMOTE_HW_INTERFACE_H 10 11#include "HWInterface.h" 12 13#include <AutoDeleter.h> 14#include <Locker.h> 15#include <ObjectList.h> 16 17class BNetEndpoint; 18class StreamingRingBuffer; 19class NetSender; 20class NetReceiver; 21class RemoteEventStream; 22class RemoteMessage; 23 24struct callback_info; 25 26 27class RemoteHWInterface : public HWInterface { 28public: 29 RemoteHWInterface(const char* target); 30virtual ~RemoteHWInterface(); 31 32virtual status_t Initialize(); 33virtual status_t Shutdown(); 34 35virtual DrawingEngine* CreateDrawingEngine(); 36virtual EventStream* CreateEventStream(); 37 38virtual status_t SetMode(const display_mode& mode); 39virtual void GetMode(display_mode* mode); 40virtual status_t GetPreferredMode(display_mode* mode); 41 42virtual status_t GetDeviceInfo(accelerant_device_info* info); 43virtual status_t GetFrameBufferConfig( 44 frame_buffer_config& config); 45 46virtual status_t GetModeList(display_mode** _modeList, 47 uint32* _count); 48virtual status_t GetPixelClockLimits(display_mode* mode, 49 uint32* _low, uint32* _high); 50virtual status_t GetTimingConstraints( 51 display_timing_constraints* constraints); 52virtual status_t ProposeMode(display_mode* candidate, 53 const display_mode* low, 54 const display_mode* high); 55 56virtual sem_id RetraceSemaphore(); 57virtual status_t WaitForRetrace( 58 bigtime_t timeout = B_INFINITE_TIMEOUT); 59 60virtual status_t SetDPMSMode(uint32 state); 61virtual uint32 DPMSMode(); 62virtual uint32 DPMSCapabilities(); 63 64virtual status_t SetBrightness(float); 65virtual status_t GetBrightness(float*); 66 67 // cursor handling 68virtual void SetCursor(ServerCursor* cursor); 69virtual void SetCursorVisible(bool visible); 70virtual void MoveCursorTo(float x, float y); 71virtual void SetDragBitmap(const ServerBitmap* bitmap, 72 const BPoint& offsetFormCursor); 73 74 // frame buffer access 75virtual RenderingBuffer* FrontBuffer() const; 76virtual RenderingBuffer* BackBuffer() const; 77virtual bool IsDoubleBuffered() const; 78 79virtual status_t InvalidateRegion(const BRegion& region); 80virtual status_t Invalidate(const BRect& frame); 81virtual status_t CopyBackToFront(const BRect& frame); 82 83 // drawing engine interface 84 StreamingRingBuffer* ReceiveBuffer() 85 { return fReceiveBuffer.Get(); } 86 StreamingRingBuffer* SendBuffer() { return fSendBuffer.Get(); } 87 88typedef bool (*CallbackFunction)(void* cookie, RemoteMessage& message); 89 90 status_t AddCallback(uint32 token, 91 CallbackFunction callback, 92 void* cookie); 93 bool RemoveCallback(uint32 token); 94 95private: 96 callback_info* _FindCallback(uint32 token); 97static int _CallbackCompare(const uint32* key, 98 const callback_info* info); 99 100static int32 _EventThreadEntry(void* data); 101 status_t _EventThread(); 102 103static status_t _NewConnectionCallback(void *cookie, 104 BNetEndpoint &endpoint); 105 status_t _NewConnection(BNetEndpoint &endpoint); 106 107 void _Disconnect(); 108 109 void _FillDisplayModeTiming(display_mode &mode); 110 111 const char* fTarget; 112 status_t fInitStatus; 113 bool fIsConnected; 114 uint32 fProtocolVersion; 115 uint32 fConnectionSpeed; 116 display_mode fFallbackMode; 117 display_mode fCurrentMode; 118 display_mode fClientMode; 119 uint16 fListenPort; 120 121 ObjectDeleter<BNetEndpoint> fListenEndpoint; 122 ObjectDeleter<StreamingRingBuffer> 123 fSendBuffer; 124 ObjectDeleter<StreamingRingBuffer> 125 fReceiveBuffer; 126 127 ObjectDeleter<NetSender> fSender; 128 ObjectDeleter<NetReceiver> fReceiver; 129 130 thread_id fEventThread; 131 ObjectDeleter<RemoteEventStream> 132 fEventStream; 133 134 BLocker fCallbackLocker; 135 BObjectList<callback_info> fCallbacks; 136}; 137 138#endif // REMOTE_HW_INTERFACE_H 139