Sto iniziando a scrivere una piccola applicazione per Linux sotto il framework Mono, l'applicazione sarà essenzialmente un piccolo front-end kiosk con un'interazione utente minima. Questo è per sostituire una versione precedente della stessa applicazione che era basata su testo/console al 100%.Come accedere a un Framebuffer Linux in Mono (Mono.Cairo/GTK #)?
Poiché verrà eseguito su un Raspberry Pi, voglio evitare di eseguire X e la mia applicazione parla direttamente al Framebuffer. Sono impostato sull'utilizzo di Mono framework e C# come mio linguaggio di sviluppo poiché conosco molto bene C#. La portabilità non è un problema in questo caso.
Sto riscontrando qualche problema nel trovare librerie e associazioni appropriate per consentire l'accesso al Framebuffer da Mono. Le librerie GTK#
si collegano in modo esplicito all'interfaccia X11 e, in ogni caso, non sembrano esserci librerie GtkFB preinstallate in Debian Wheezy per l'architettura ARM Soft-Float (armel).
La biblioteca Mono.Cairo
espone un tipo DirectFBSurface
, tuttavia il costruttore di quella superficie prende due IntPtr
argomenti e non è documentato in modo da non so cosa dovrebbe essere passato al costruttore per inizializzare correttamente il framebuffer come superficie del Cairo.
Qualcuno ha collaborato con Mono e C# per parlare con il Linux Framebuffer e, in tal caso, è possibile fornire esempi di base per l'inizializzazione e l'avvio del disegno sull'FB oppure fare riferimento alla documentazione in linea per fornire assistenza?
Update 1
ho pensato di provare istanziare la DirectFBSurface con null
per entrambi i parametri del costruttore, con il seguente codice:
public static void Main(string[] args)
{
// ...
DirectFBSurface surface = new DirectFBSurface(((IntPtr)null), ((IntPtr)null));
// ...
}
Mi aspettavo questo per generare un'eccezione che indica che null
i valori dei parametri non erano consentiti, tuttavia sembra che DirectFBSurface non sia implementato in Mono.Cairo
o non sia compilato nella libreria fornita con Debian Wheezy (armel):
Unhandled Exception: System.EntryPointNotFoundException: cairo_directfb_surface_create
at (wrapper managed-to-native) Cairo.NativeMethods:cairo_directfb_surface_create (intptr,intptr)
at Cairo.DirectFBSurface..ctor (IntPtr dfb, IntPtr dfb_surface) [0x00000] in <filename unknown>:0
at Info.Insch.SandBox.TestCairo.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
così sembra che l'approccio Mono.Cairo
probabilmente non funzionerà per le mie esigenze, e come notato sopra, GTK#
libreria framebuffer non sembra far parte di Debian Wheezy per armel. C'è un altro set di librerie che potrei usare per accedere al Linux Framebuffer di Mono?
sei tu? http://www.raspberrypi.org/phpBB3/viewtopic.php?t=15788&p=160933 – IanNorton
In tal caso, è possibile disegnare su una superficie software al Cairo e mescolarlo alla superficie SDL ogni tanto. – IanNorton
Sembra che sia necessario passare un puntatore a un IDirectFB nativo e una IDirectFBSurface. Ecco la fonte per Mono.Cairo: https://github.com/mono/mono/blob/master/mcs/class/Mono.Cairo/Mono.Cairo/DirectFBSurface.cs E qui è la fonte di cairo per quel costruttore: http : //cgit.freedesktop.org/cairo/tree/src/cairo-directfb-surface.c#n499 – joncham