Posts by Teamdevel

    Hallo Wolfgang1950.
    Ich hoffe du denkst auch dran… das Maschinen Code nicht gleich Maschinen Code ist …
    Also ob X86, MIPS oder ARM…

    4 Byte vom RAM ins register laden und zurück.

    Mips bsp.
    [font="Courier New"]lw REGISTER, RAM Source[/font]
    [font="Courier New"]sw REGISTER, RAM Destination[/font]

    X86 32bit bsp.
    [font="Courier New"]mov REGISTER, RAM[/font]
    [font="Courier New"]mov RAM, REGISTER[/font]

    Arm bsp.
    [font="Courier New"]ldr REGISTER, RAM Source[/font]
    [font="Courier New"]str REGISTER, RAM Destination[/font]


    Wobei X86 und ARM ähnlich ist, MIPS ist sehr Gewöhnungsbedürftig,
    damit hatte ich auch bisher sehr wenig zu tun… da kenn ich nur die grund instruktionen.
    Fürs PI brauchst du ARM Assembler.

    grüße
    Andreas

    Hallo Tobii5

    Darf ich Fragen wie erfahren du bist?
    Also wenn du gute Erfahrung mit C/C++ hast ist das keine große Hexerei…

    @morob65
    „es gibt eine graphische öberfläche ohne x, framebuffer programmierung. wird heute nur kaum noch verwendet.“
    Hmm, also alle mir bekannten systeme ob Android, X Window, DirectFB nutzen zuerst mal das
    Framebuffer Device bevor sie was anderes machen… Android macht immensen Gebrauch davon…
    Wenn du damit meinst dass die wenigsten die Variante in ihren Anwendungen benutzen,
    da hast du recht…


    Die Manuellen schritte sind …
    Framebuffer öffnen …
    Console umleiten …
    Input Device öffnen…
    Optional Graphics Library Initialisieren …
    Auf die Input Events hören …
    Input Device schließen …
    Console zurückstellen…
    Framebuffer schließen…
    Machen alle Fenstersysteme bei Unix in der art…

    Alternativ gibt’s da noch die DirectFB library … beinhaltet auch ein kleines fenster system …
    Die frage ist ja brauchst du ein Fenster-System?
    Oder reicht dir die ausgabe am Screen/Display?

    Hier ein Beispiel (Framebuffer mit Cairo)
    das ich für meine eigene Platform geschrieben hab...
    du musst nur "/System/Devices/fb0" durch "/dev/fb0" ersetzen...


    [font="Courier New"]

    Display Spoiler

    [/font]
    [font="Courier New"]#include[/font][font="Courier New"] <stdio.h>[/font]
    [font="Courier New"]#include[/font][font="Courier New"] <stdlib.h>[/font]
    [font="Courier New"]#include[/font][font="Courier New"] <sys/mman.h>[/font]
    [font="Courier New"]#include[/font][font="Courier New"] <sys/ioctl.h>[/font]
    [font="Courier New"]#include[/font][font="Courier New"] <cairo/cairo.h>[/font]
    [font="Courier New"]#include[/font][font="Courier New"] <linux/types.h>[/font]
    [font="Courier New"]#include[/font][font="Courier New"] <linux/limits.h>[/font]
    [font="Courier New"]#include[/font][font="Courier New"] <linux/fb.h>[/font]
    [font="Courier New"]#include[/font][font="Courier New"] <unistd.h>[/font]
    [font="Courier New"]#include[/font][font="Courier New"] <fcntl.h>[/font]
    [font="Courier New"]#include[/font][font="Courier New"] <math.h>[/font]


    [font="Courier New"]/* Locals */[/font]
    [font="Courier New"]static[/font][font="Courier New"] cairo_t *fb_context;[/font]
    [font="Courier New"]static[/font][font="Courier New"] cairo_surface_t *fb_surface;[/font]
    [font="Courier New"]static void[/font][font="Courier New"] *fb_data;[/font]
    [font="Courier New"]static int[/font][font="Courier New"] fb_handle;[/font]
    [font="Courier New"]static int[/font][font="Courier New"] fb_height;[/font]
    [font="Courier New"]static int[/font][font="Courier New"] fb_stride;[/font]
    [font="Courier New"]static int[/font][font="Courier New"] fb_width;[/font]
    [font="Courier New"]static int[/font][font="Courier New"] fb_size;[/font]
    [font="Courier New"]static int[/font][font="Courier New"] fb_bpp;[/font]

    [font="Courier New"]/* Open the Fraembuffer Device */[/font]
    [font="Courier New"]static int[/font][font="Courier New"] OpenFramebuffer(void)[/font]
    [font="Courier New"]{[/font]
    [font="Courier New"] int handle = -1;[/font]
    [font="Courier New"] if ((handle = open("/System/Devices/fb0", O_RDWR)) < 0)[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] printf("Open Framebuffer failed!\n");[/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] struct fb_fix_screeninfo fix;[/font]
    [font="Courier New"] if (ioctl(handle, FBIOGET_FSCREENINFO, &fix) < 0)[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] printf("FBIOGET_FSCREENINFO failed!\n");[/font]
    [font="Courier New"] close(handle);[/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] struct fb_var_screeninfo var;[/font]
    [font="Courier New"] if (ioctl(handle, FBIOGET_VSCREENINFO, &var) < 0)[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] printf("FBIOGET_VSCREENINFO failed!\n");[/font]
    [font="Courier New"] close(handle);[/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] void *data = NULL;[/font]
    [font="Courier New"] size_t length = (var.yres * fix.line_length);[/font]
    [font="Courier New"] if ((data = mmap(NULL, length, PROT_READ|PROT_WRITE, MAP_SHARED, handle, 0)) == MAP_FAILED)[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] printf("Map Memory failed!\n");[/font]
    [font="Courier New"] close(handle);[/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] fb_handle = handle;[/font]
    [font="Courier New"] fb_width = (int)var.xres;[/font]
    [font="Courier New"] fb_height = (int)var.yres;[/font]
    [font="Courier New"] fb_stride = (int)fix.line_length;[/font]
    [font="Courier New"] fb_size = (int)(var.yres * fix.line_length);[/font]
    [font="Courier New"] fb_bpp = (int)var.bits_per_pixel;[/font]
    [font="Courier New"] fb_data = data;[/font]

    [font="Courier New"] printf("Width: %d\n", fb_width);[/font]
    [font="Courier New"] printf("Height: %d\n", fb_height);[/font]
    [font="Courier New"] printf("Bpp: %d\n", fb_bpp);[/font]

    [font="Courier New"] return 1;[/font]

    [font="Courier New"]}[/font]

    [font="Courier New"]/* Get the Cairo Format from Framebuffer Device. */[/font]
    [font="Courier New"]static[/font][font="Courier New"] cairo_format_t GetFramebufferFormat(int bpp)[/font]
    [font="Courier New"]{[/font]
    [font="Courier New"] switch (bpp)[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] case 16:[/font]
    [font="Courier New"] return CAIRO_FORMAT_RGB16_565;[/font]
    [font="Courier New"] case 24:[/font]
    [font="Courier New"] return CAIRO_FORMAT_RGB24;[/font]
    [font="Courier New"] case 32:[/font]
    [font="Courier New"] return CAIRO_FORMAT_ARGB32;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] return CAIRO_FORMAT_INVALID;[/font]
    [font="Courier New"]}[/font]

    [font="Courier New"]/* Creates the Framebuffer Surface. */[/font]
    [font="Courier New"]static int[/font][font="Courier New"] CreateFramebufferSurface(void)[/font]
    [font="Courier New"]{[/font]
    [font="Courier New"] cairo_format_t format;[/font]
    [font="Courier New"] if ((fb_data == NULL) || (fb_width <= 0) || (fb_height <= 0))[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] printf("Invalid Framebuffer!\n");[/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] format = GetFramebufferFormat(fb_bpp);[/font]
    [font="Courier New"] if (format == CAIRO_FORMAT_INVALID)[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] printf("Invalid Framebuffer format!\n");[/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] fb_surface = cairo_image_surface_create_for_data((unsigned char*)fb_data, format, fb_width, fb_height, fb_stride);[/font]
    [font="Courier New"] if ((fb_surface == NULL))[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] printf("Create Surface failed!\n");[/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] return 1;[/font]
    [font="Courier New"]}[/font]

    [font="Courier New"]static int[/font][font="Courier New"] DestroySurface(void)[/font]
    [font="Courier New"]{[/font]
    [font="Courier New"] return 1;[/font]
    [font="Courier New"]}[/font]

    [font="Courier New"]static int[/font][font="Courier New"] DrawText(void)[/font]
    [font="Courier New"]{[/font]
    [font="Courier New"] cairo_save(fb_context);[/font]
    [font="Courier New"] cairo_set_source_rgb(fb_context, 0.0, 1.0, 1.0); [/font]
    [font="Courier New"] cairo_set_font_size(fb_context, 30);[/font]

    [font="Courier New"] cairo_move_to(fb_context, 20, 30);[/font]
    [font="Courier New"] cairo_show_text(fb_context, "Most relationships seem so transitory");[/font]

    [font="Courier New"] cairo_move_to(fb_context, 20, 60);[/font]
    [font="Courier New"] cairo_show_text(fb_context, "They're all good but not the permanent one");[/font]

    [font="Courier New"] cairo_move_to(fb_context, 20, 120);[/font]
    [font="Courier New"] cairo_show_text(fb_context, "Who doesn't long for someone to hold");[/font]

    [font="Courier New"] cairo_move_to(fb_context, 20, 150);[/font]
    [font="Courier New"] cairo_show_text(fb_context, "Who knows how to love you without being told");[/font]

    [font="Courier New"] cairo_move_to(fb_context, 20, 180);[/font]
    [font="Courier New"] cairo_show_text(fb_context, "Somebody tell me why I'm on my own");[/font]

    [font="Courier New"] cairo_move_to(fb_context, 20, 210);[/font]
    [font="Courier New"] cairo_show_text(fb_context, "If there's a soulmate for everyone");[/font]

    [font="Courier New"] cairo_restore(fb_context);[/font]
    [font="Courier New"] return 1;[/font]

    [font="Courier New"]}[/font]

    [font="Courier New"]/* Close the Framebuffer Device */[/font]
    [font="Courier New"]static int[/font][font="Courier New"] CloseFramebuffer(void)[/font]
    [font="Courier New"]{[/font]
    [font="Courier New"] if ((fb_data != NULL))[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] munmap(fb_data, fb_size);[/font]
    [font="Courier New"] fb_data = NULL;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] if ((fb_handle >= 0))[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] close(fb_handle);[/font]
    [font="Courier New"] fb_handle = -1;[/font]
    [font="Courier New"] }[/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"]}[/font]

    [font="Courier New"]/* Entry Point */[/font]
    [font="Courier New"]int[/font][font="Courier New"] main(int argc, char *argv[])[/font]
    [font="Courier New"]{[/font]
    [font="Courier New"] int count = 0;[/font]
    [font="Courier New"] fb_context = NULL;[/font]
    [font="Courier New"] fb_surface = NULL;[/font]

    [font="Courier New"] /* Open the Framebuffer */[/font]
    [font="Courier New"] if ((OpenFramebuffer() <= 0))[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] if ((CreateFramebufferSurface() <= 0))[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] fb_context = cairo_create(fb_surface);[/font]
    [font="Courier New"] if ((fb_context == NULL))[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] cairo_set_source_rgb(fb_context, 0, 0, 0);[/font]
    [font="Courier New"] cairo_set_line_width(fb_context, 1);[/font]
    [font="Courier New"] cairo_rectangle(fb_context, 20, 20, 120, 80);[/font]
    [font="Courier New"] cairo_rectangle(fb_context, 180, 20, 80, 80);[/font]
    [font="Courier New"] cairo_stroke_preserve(fb_context);[/font]
    [font="Courier New"] cairo_set_source_rgb(fb_context, 1, 1, 1);[/font]
    [font="Courier New"] cairo_fill(fb_context);[/font]

    [font="Courier New"] cairo_set_source_rgb(fb_context, 0, 0, 0);[/font]
    [font="Courier New"] cairo_arc(fb_context, 330, 60, 40, 0, 2*M_PI);[/font]
    [font="Courier New"] cairo_stroke_preserve(fb_context);[/font]
    [font="Courier New"] cairo_set_source_rgb(fb_context, 1, 1, 1);[/font]
    [font="Courier New"] cairo_fill(fb_context);[/font]

    [font="Courier New"] cairo_set_source_rgb(fb_context, 0, 0, 0);[/font]
    [font="Courier New"] cairo_arc(fb_context, 90, 160, 40, M_PI/4, M_PI);[/font]
    [font="Courier New"] cairo_close_path(fb_context);[/font]
    [font="Courier New"] cairo_stroke_preserve(fb_context);[/font]

    [font="Courier New"] cairo_set_source_rgb(fb_context, 1, 1, 1);[/font]
    [font="Courier New"] cairo_fill(fb_context);[/font]


    [font="Courier New"] cairo_set_source_rgb(fb_context, 0, 0, 0);[/font]
    [font="Courier New"] cairo_translate(fb_context, 220, 180);[/font]
    [font="Courier New"] cairo_scale(fb_context, 1, 0.7);[/font]
    [font="Courier New"] cairo_arc(fb_context, 0, 0, 50, 0, 2*M_PI);[/font]
    [font="Courier New"] cairo_stroke_preserve(fb_context);[/font]
    [font="Courier New"] cairo_set_source_rgb(fb_context, 1, 1, 1);[/font]

    [font="Courier New"] cairo_fill(fb_context);[/font]

    [font="Courier New"] while ((count <= 10))[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] DrawText();[/font]
    [font="Courier New"] sleep(1);[/font]
    [font="Courier New"] count++;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] cairo_destroy(fb_context);[/font]
    [font="Courier New"] DestroySurface();[/font]
    [font="Courier New"] CloseFramebuffer();

    [/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"]}


    Vielleicht kannst du damit was anfangen...
    Der einstieg ist nicht all zu leicht...
    aber die Performance spricht für sich …

    Grüße
    Andreas

    [/font]

    Ich bin leider kein spiritueller oder religiöser Mensch aber
    Ehre, Ehrlichkeit und Loyalität gegen über der Familie haben bei mir auch den
    Höchsten Stellenwert.

    Deshalb halte ich auch nichts von social network denn das ist dort nicht zu finden.
    Deswegen diskutiere ich im normal fall auch nur sachlich.
    Ich finde momentan nur innerliche ruhe, in dem ich Probleme technischer Natur lösen kann.

    Wie geht's Dir? Wirklich ein gutes Beispiel … den da erwisch ich mich selber
    Auch immer wieder…

    War auch nicht als Rechtfertigung gemeint, das mach ich nie…
    Aber dadurch lernt man sich, denk ich, etwas besser kennen…
    Denn der gesellschaftliche Neid ist auch hier im board sehr deutlich zu Spüren…

    Auf jeden Fall ist es inspirierend mit dir zu kommunizieren.

    dreamshader
    Da kann ich dir jetzt nur 100% zustimmen…
    Und genau diese Kleinigkeiten sind es warum die familie, freundin usw…
    100% hinter dem stehen was ich mache…

    Ich definiere mich über mein Wissen nicht über das Kapital,
    Weisheit hab ich noch Zuwenig…

    Das Geld hat für mich insofern Bedeutung, das ich weiß, sollte mal was sein …
    braucht sich die Familie nicht gleich Gedanken machen wies weitergeht…

    (Spielekonsole, das ist für mich nur eine neue Herausforderung)

    dreamshader
    Wahrscheinlich hab ich das Thema anders aufgegriffen…

    Du machst imho genau das, worauf dieses "System" aufbaut. Du schwimmst mit dem Mainstream,
    musst du mir bitte nochmal erklären... den der Bezug fehlt mir

    Wir kennen uns leider noch nicht gut genug… deshalb kommen meine Worte vielleicht nicht richtig an….
    Ich liebe es ein Außenseiter zu sein… in jeder Hinsicht… lass mein Handy zuhause, versuch nicht erreichbar zu sein…,
    FB zugang gibt’s bei mir nicht… Neid kenn ich nicht… gelt muss ich nicht haben…

    Aber ich bin auch Realist und hab für andere zu sorgen… also muss ich mich der Gesellschaft in vielen Dingen beugen….
    Aber nur solange biss ich mich irgendwo hin zurückziehen kann.

    Grüße

    Also ich müsste jeden davon abraten…
    In die Professionelle Open Source Welt, einzusteigen…
    Den was sich da abspielt ist nicht besser als wie bei MS,Apple usw…
    Immenser Konkurrenz Kampf zwischen den Entwickler Gruppen.

    Gesteuert wird alles von den großen Unternehmen dahinter… Google, Intel, Novel, xorg foundation usw…
    Hier geht es auch nur mehr ums Geld und am meisten von Open Source profitieren die großen.

    Der Gedanke Kooperation statt Konkurrenz ist super… verfolge ich auch noch immer…
    Aber den gibt es dort fast nicht mehr…
    Die einzigen die diesen Gedanken noch verfolgen sind die linux kernel entwickler
    mit denen kommt man gut aus…

    Schön dass ihr den Ausstieg geschaft habt … ist mir nicht gelungen… Rauche, drinke zuviel Kaffee alles scheiße… Freundin schimpft… usw…
    Sport mach ich schon etwas.
    Aber zumindest kann ich das machen was ich möchte.

    Würde mich auch interessieren mal mit ein paar fachkundigen zusammen zu sitzen und
    Sachgemäß zu diskutieren..

    Grüße und sorry für Offtopic…
    Andreas

    Nur noch mal zur info ....
    der kernel bzw. die firmware beinhaltet alles um das zu
    bewerkstelligen ... mehr kann man dazu nicht sagen ...

    hier ein auszug aus dem interface header ...

    [font="Courier New"]
    /*[/font]
    [font="Courier New"]Copyright (c) 2012, Broadcom Europe Ltd[/font]
    [font="Courier New"]All rights reserved.[/font]

    [font="Courier New"]Redistribution and use in source and binary forms, with or without[/font]
    [font="Courier New"]modification, are permitted provided that the following conditions are met:[/font]
    [font="Courier New"] * Redistributions of source code must retain the above copyright[/font]
    [font="Courier New"] notice, this list of conditions and the following disclaimer.[/font]
    [font="Courier New"] * Redistributions in binary form must reproduce the above copyright[/font]
    [font="Courier New"] notice, this list of conditions and the following disclaimer in the[/font]
    [font="Courier New"] documentation and/or other materials provided with the distribution.[/font]
    [font="Courier New"] * Neither the name of the copyright holder nor the[/font]
    [font="Courier New"] names of its contributors may be used to endorse or promote products[/font]
    [font="Courier New"] derived from this software without specific prior written permission.[/font]

    [font="Courier New"]THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND[/font]
    [font="Courier New"]ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED[/font]
    [font="Courier New"]WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE[/font]
    [font="Courier New"]DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY[/font]
    [font="Courier New"]DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES[/font]
    [font="Courier New"](INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;[/font]
    [font="Courier New"]LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND[/font]
    [font="Courier New"]ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT[/font]
    [font="Courier New"](INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS[/font]
    [font="Courier New"]SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.[/font]
    [font="Courier New"]*/[/font]

    [font="Courier New"]// Display manager service API[/font]

    [font="Courier New"]#ifndef _VC_DISPMANX_H_[/font]
    [font="Courier New"]#define _VC_DISPMANX_H_[/font]

    [font="Courier New"]#include "interface/vcos/vcos.h"[/font]
    [font="Courier New"]#include "interface/vctypes/vc_image_types.h"[/font]
    [font="Courier New"]#include "vc_dispservice_x_defs.h"[/font]
    [font="Courier New"]#include "interface/vmcs_host/vc_dispmanx_types.h"[/font]
    [font="Courier New"]#include "interface/vchi/vchi.h"[/font]

    [font="Courier New"]#ifdef __cplusplus[/font]
    [font="Courier New"]extern "C" {[/font]
    [font="Courier New"]#endif[/font]
    [font="Courier New"]// Same function as above, to aid migration of code.[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_dispman_init( void );[/font]
    [font="Courier New"]// Stop the service from being used[/font]
    [font="Courier New"]VCHPRE_ void VCHPOST_ vc_dispmanx_stop( void );[/font]
    [font="Courier New"]// Set the entries in the rect structure[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_dispmanx_rect_set( VC_RECT_T *rect, uint32_t x_offset, uint32_t y_offset, uint32_t width, uint32_t height );[/font]
    [font="Courier New"]// Resources[/font]
    [font="Courier New"]// Create a new resource[/font]
    [font="Courier New"]VCHPRE_ DISPMANX_RESOURCE_HANDLE_T VCHPOST_ vc_dispmanx_resource_create( VC_IMAGE_TYPE_T type, uint32_t width, uint32_t height, uint32_t *native_image_handle );[/font]
    [font="Courier New"]// Write the bitmap data to VideoCore memory[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_dispmanx_resource_write_data( DISPMANX_RESOURCE_HANDLE_T res, VC_IMAGE_TYPE_T src_type, int src_pitch, void * src_address, const VC_RECT_T * rect );[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_dispmanx_resource_write_data_handle( DISPMANX_RESOURCE_HANDLE_T res, VC_IMAGE_TYPE_T src_type, int src_pitch, VCHI_MEM_HANDLE_T handle, uint32_t offset, const VC_RECT_T * rect );[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_dispmanx_resource_read_data([/font]
    [font="Courier New"] DISPMANX_RESOURCE_HANDLE_T handle,[/font]
    [font="Courier New"] const VC_RECT_T* p_rect,[/font]
    [font="Courier New"] void * dst_address,[/font]
    [font="Courier New"] uint32_t dst_pitch );[/font]
    [font="Courier New"]// Delete a resource[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_dispmanx_resource_delete( DISPMANX_RESOURCE_HANDLE_T res );[/font]

    [font="Courier New"]// Displays[/font]
    [font="Courier New"]// Opens a display on the given device[/font]
    [font="Courier New"]VCHPRE_ DISPMANX_DISPLAY_HANDLE_T VCHPOST_ vc_dispmanx_display_open( uint32_t device );[/font]
    [font="Courier New"]// Opens a display on the given device in the request mode[/font]
    [font="Courier New"]VCHPRE_ DISPMANX_DISPLAY_HANDLE_T VCHPOST_ vc_dispmanx_display_open_mode( uint32_t device, uint32_t mode );[/font]
    [font="Courier New"]// Open an offscreen display[/font]
    [font="Courier New"]VCHPRE_ DISPMANX_DISPLAY_HANDLE_T VCHPOST_ vc_dispmanx_display_open_offscreen( DISPMANX_RESOURCE_HANDLE_T dest, VC_IMAGE_TRANSFORM_T orientation );[/font]
    [font="Courier New"]// Change the mode of a display[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_dispmanx_display_reconfigure( DISPMANX_DISPLAY_HANDLE_T display, uint32_t mode );[/font]
    [font="Courier New"]// Sets the desstination of the display to be the given resource[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_dispmanx_display_set_destination( DISPMANX_DISPLAY_HANDLE_T display, DISPMANX_RESOURCE_HANDLE_T dest );[/font]
    [font="Courier New"]// Set the background colour of the display[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_dispmanx_display_set_background( DISPMANX_UPDATE_HANDLE_T update, DISPMANX_DISPLAY_HANDLE_T display,[/font]
    [font="Courier New"] uint8_t red, uint8_t green, uint8_t blue );[/font]
    [font="Courier New"]// get the width, height, frame rate and aspect ratio of the display[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_dispmanx_display_get_info( DISPMANX_DISPLAY_HANDLE_T display, DISPMANX_MODEINFO_T * pinfo );[/font]
    [font="Courier New"]// Closes a display[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_dispmanx_display_close( DISPMANX_DISPLAY_HANDLE_T display );[/font]

    [font="Courier New"]// Updates[/font]
    [font="Courier New"]// Start a new update, DISPMANX_NO_HANDLE on error[/font]
    [font="Courier New"]VCHPRE_ DISPMANX_UPDATE_HANDLE_T VCHPOST_ vc_dispmanx_update_start( int32_t priority );[/font]


    usw ... usw ...
    das ist noch um einiges länger...


    dan gibt es noch das tv-service interface ...

    [font="Courier New"]

    /*[/font]
    [font="Courier New"]Copyright (c) 2012, Broadcom Europe Ltd[/font]
    [font="Courier New"]All rights reserved.[/font]

    [font="Courier New"]Redistribution and use in source and binary forms, with or without[/font]
    [font="Courier New"]modification, are permitted provided that the following conditions are met:[/font]
    [font="Courier New"] * Redistributions of source code must retain the above copyright[/font]
    [font="Courier New"] notice, this list of conditions and the following disclaimer.[/font]
    [font="Courier New"] * Redistributions in binary form must reproduce the above copyright[/font]
    [font="Courier New"] notice, this list of conditions and the following disclaimer in the[/font]
    [font="Courier New"] documentation and/or other materials provided with the distribution.[/font]
    [font="Courier New"] * Neither the name of the copyright holder nor the[/font]
    [font="Courier New"] names of its contributors may be used to endorse or promote products[/font]
    [font="Courier New"] derived from this software without specific prior written permission.[/font]

    [font="Courier New"]THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND[/font]
    [font="Courier New"]ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED[/font]
    [font="Courier New"]WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE[/font]
    [font="Courier New"]DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY[/font]
    [font="Courier New"]DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES[/font]
    [font="Courier New"](INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;[/font]
    [font="Courier New"]LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND[/font]
    [font="Courier New"]ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT[/font]
    [font="Courier New"](INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS[/font]
    [font="Courier New"]SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.[/font]
    [font="Courier New"]*/[/font]

    [font="Courier New"]/*[/font]
    [font="Courier New"] * TV service host API,[/font]
    [font="Courier New"] * See vc_hdmi.h for HDMI related constants[/font]
    [font="Courier New"] * See vc_sdtv.h for SDTV related constants[/font]
    [font="Courier New"] */[/font]

    [font="Courier New"]#ifndef _VC_TVSERVICE_H_[/font]
    [font="Courier New"]#define _VC_TVSERVICE_H_[/font]

    [font="Courier New"]#include "vcinclude/common.h"[/font]
    [font="Courier New"]#include "interface/vcos/vcos.h"[/font]
    [font="Courier New"]#include "interface/vchi/vchi.h"[/font]
    [font="Courier New"]#include "interface/vmcs_host/vc_tvservice_defs.h"[/font]
    [font="Courier New"]#include "interface/vmcs_host/vc_hdmi.h"[/font]
    [font="Courier New"]#include "interface/vmcs_host/vc_sdtv.h"[/font]

    [font="Courier New"]/**[/font]
    [font="Courier New"] * \file[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * This API defines the controls for both HDMI and analogue TVs. It allows[/font]
    [font="Courier New"] * the user to dynamically switch between HDMI and SDTV without having[/font]
    [font="Courier New"] * to worry about switch one off before turning the other on. It also[/font]
    [font="Courier New"] * allows the user to query the supported HDMI resolutions and audio[/font]
    [font="Courier New"] * formats and turn on/off copy protection.[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * There are three ways to turn on HDMI: preferred mode; best matched mode[/font]
    [font="Courier New"] * and explicit mode. See the three power on functions for details.[/font]
    [font="Courier New"] */[/font]

    [font="Courier New"]/**[/font]
    [font="Courier New"] * TVSERVICE_CALLBACK_T is the callback function for host side notification.[/font]
    [font="Courier New"] * Host applications register a single callback for all TV related notifications.[/font]
    [font="Courier New"] * See <DFN>VC_HDMI_NOTIFY_T</DFN> and <DFN>VC_SDTV_NOTIFY_T</DFN> in vc_hdmi.h and vc_sdtv.h[/font]
    [font="Courier New"] * respectively for list of reasons and respective param1 and param2[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param callback_data is the context passed in during the call to vc_tv_register_callback[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param reason is the notification reason[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param param1 is the first optional parameter[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param param2 is the second optional parameter[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @return void[/font]
    [font="Courier New"] */[/font]
    [font="Courier New"]typedef void (*TVSERVICE_CALLBACK_T)(void *callback_data, uint32_t reason, uint32_t param1, uint32_t param2);[/font]

    [font="Courier New"]/* API at application start time */[/font]
    [font="Courier New"]/**[/font]
    [font="Courier New"] * <DFN>vc_vchi_tv_init</DFN> is called at the beginning of the application[/font]
    [font="Courier New"] * to initialise the client to TV service[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param initialise_instance is the VCHI instance[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param array of pointers of connections[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param number of connections (currently this is always <DFN>1</DFN>[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @return Zero is successful A negative return value indicates failure (which may mean it has not been started on VideoCore).[/font]
    [font="Courier New"] */[/font]
    [font="Courier New"]VCHPRE_ int vc_vchi_tv_init(VCHI_INSTANCE_T initialise_instance, VCHI_CONNECTION_T **connections, uint32_t num_connections );[/font]

    [font="Courier New"]/**[/font]
    [font="Courier New"] * <DFN>vc_vchi_tv_stop</DNF> is called to stop the host side of TV service.[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param none[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @return void[/font]
    [font="Courier New"] */[/font]
    [font="Courier New"]VCHPRE_ void vc_vchi_tv_stop( void );[/font]

    [font="Courier New"]/**[/font]
    [font="Courier New"] * Host applications should call <DFN>vc_tv_register_callback</DNF> at[/font]
    [font="Courier New"] * the beginning to register a callback function to handle all notifications.[/font]
    [font="Courier New"] * See <DFN>TVSERVICE_CALLBACK_T </DFN>[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param callback function[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param callback_data is the context to be passed when function is called[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @return void[/font]
    [font="Courier New"] */[/font]
    [font="Courier New"]VCHPRE_ void vc_tv_register_callback(TVSERVICE_CALLBACK_T callback, void *callback_data);[/font]

    [font="Courier New"]/**[/font]
    [font="Courier New"] * <DFN>vc_tv_unregister_callback</DNF> removes a function registered with[/font]
    [font="Courier New"] * <DFN>vc_tv_register_callback</DNF> from the list of callbacks.[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param callback function[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @return void[/font]
    [font="Courier New"] */[/font]
    [font="Courier New"]VCHPRE_ void vc_tv_unregister_callback(TVSERVICE_CALLBACK_T callback);[/font]

    [font="Courier New"]/**[/font]
    [font="Courier New"] * In the following API any functions applying to HDMI only will have hdmi_[/font]
    [font="Courier New"] * in the name, ditto for SDTV only will have sdtv_ in the name,[/font]
    [font="Courier New"] * Otherwise the function applies to both SDTV and HDMI (e.g. power off)[/font]
    [font="Courier New"] */[/font]

    [font="Courier New"]/**[/font]
    [font="Courier New"] * <DFN>vc_tv_get_state</DFN> is used to obtain the current TV state.[/font]
    [font="Courier New"] * Host applications should call this function right after registering[/font]
    [font="Courier New"] * a callback in case any notifications are missed.[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * Now deprecated - use vc_tv_get_display_state instead[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param pointer to TV_GET_STATE_RESP_T[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @return zero if the command is sent successfully, non zero otherwise[/font]
    [font="Courier New"] * If the command fails to be sent, passed in state is unchanged[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] */[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_tv_get_state(TV_GET_STATE_RESP_T *tvstate);[/font]

    [font="Courier New"]/**[/font]
    [font="Courier New"] * <DFN>vc_tv_get_display_state</DFN> is used to obtain the current TV display[/font]
    [font="Courier New"] * state. This function supersedes vc_tv_get_state (which is only kept for[/font]
    [font="Courier New"] * backward compatibility.[/font]
    [font="Courier New"] * Host applications should call this function right after registering[/font]
    [font="Courier New"] * a callback in case any notifications are missed.[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @param pointer to TV_DISPLAY_STATE_T[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] * @return zero if the command is sent successfully, non zero otherwise[/font]
    [font="Courier New"] * If the command fails to be sent, passed in state is unchanged[/font]
    [font="Courier New"] *[/font]
    [font="Courier New"] */[/font]
    [font="Courier New"]VCHPRE_ int VCHPOST_ vc_tv_get_display_state(TV_DISPLAY_STATE_T *tvstate);[/font]


    usw ... usw ...


    Ist leider sehr schlecht dokumentiert aber vorhanden...
    grüße

    Dann sag mir mal deine Entgelt Vorstellungen, denn technisch kann ich
    dir das machen, aber preislich übersteigt das wahrscheinlich deinen Vorstellungen.
    Da reden wir über 1000€ aufwärts, da brauchen wir kein Geheimnis draus machen.

    Kernel Entwicklungen sind kompliziert und zeit aufwändig!
    Zahlt sich in den meisten Fällen nicht aus…

    grüße
    Andreas

    Du siehst ja ... die Datei ist vorhanden...
    Oberfläche vom Raspian...

    Also ich muss jetzt gleich weiter...

    Das sieht mir nach der falschen platform version aus...
    jdk-8-ea-b100-linux-arm-vfp-hflt-24_jul_2013.tar.gz

    du hast die soft-fp distro... vfp-hflt sieht verdächtig nach hard-float aus....

    Du versuchst den Typ der variable zu ändern...
    stichwort Typisierung

    Das ganze nochmal ...

    [font="Courier New"]#include <iostream>[/font]
    [font="Courier New"]#include <fstream>[/font]
    [font="Courier New"]#include <string>[/font]
    [font="Courier New"]#include <stdlib.h>[/font]
    [font="Courier New"]using namespace std;[/font]


    [font="Courier New"]/* Entry Point */[/font]
    [font="Courier New"]int main (int argc, char **argv)[/font]
    [font="Courier New"]{[/font]
    [font="Courier New"] ifstream datei;[/font]
    [font="Courier New"] int temperatur;[/font]
    [font="Courier New"] float variable1;[/font]
    [font="Courier New"] string text;[/font]
    [font="Courier New"] int abort = 0;[/font]

    [font="Courier New"] while ((abort != 1))[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] datei.open("/sys/class/thermal/thermal_zone0/temp", ios::in);[/font]
    [font="Courier New"] if ((datei.fail()))[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] cout << "Konnte datei nicht öffnen!";[/font]
    [font="Courier New"]
                /* Man könnte hier auch break nehmen um die schleife abzubrechen. */[/font]
    [font="Courier New"] /* break; */[/font][font="Courier New"]
                return 0;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] /* Zeiger Position immer auf 0, wir haben nur eine Zeile zum lesen ... */[/font]
    [font="Courier New"] datei.seekg (0, datei.beg);[/font]

    [font="Courier New"] getline(datei, text);[/font]

    [font="Courier New"] temperatur = atoi(text.c_str());[/font]

    [font="Courier New"] variable1 = ((float)temperatur) / 1000.0f;[/font][font="Courier New"]

    /* Wenn er hier keine nach Komma stellen anzeigt, versucht */
    /* printf("%f\n", variable1); */[/font][font="Courier New"]

    cout << variable1 << "\n";[/font]

    [font="Courier New"] datei.close();[/font]

    [font="Courier New"] sleep(1);[/font]
    [font="Courier New"] }[/font][font="Courier New"]

    /* Mit break geht es hier weiter mit der ausführung. */[/font]
    [font="Courier New"]
        //::getchar();[/font]

    [font="Courier New"] return 0;[/font]
    [font="Courier New"]}


    [/font]
    @meigrafd
    Gerne...


    Noch was, also wen ihr noch beim Lernen seid, kompiliert
    Mit der Option –Wall, dann gibt euch der gcc alle Warnungen aus.
    Da sind auch ein paar dabei die könnt ihr getrost ignorieren.
    z.B. dass die variable definiert wurde aber nicht benutzt.
    Das könnt ihr auch mit –Wno-unused-variable abstellen.
    Aber ihr seht wo was nicht stimmt.

    Ein paar möglichkeiten…

    -Wno-unused-function
    -Wno-unused-label
    -Wno-unused-parameter
    -Wno-unused-value
    -Wno-unused-variable

    Also z.B.

    g++ -Wall -Wno-unused-variable -o temp temp.cpp


    grüße

    Versuch mal Datei zu inkludieren ...
    Hab leider kein board oder was hier zum testen!

    [font="Courier New"]#include <stdlib.h> /* atoi */

    Man kann auch noch das testen ...

    Globaler Namensraum …

    ::atoi

    Und der std namespace beinhaltet normalerweise alle ANSI C Funktionen
    aber da kann es Abweichungen geben.

    std::atoi

    da hat jede runtime (eglibc, glibc, uclibc) so seine eigenheiten...

    grüße
    Andreas
    [/font]

    @Maxtheprinz

    Als erstes solltest du als Anfänger soviel Fehler Meldungen einbauen wie geht...
    Die schleife wird bei unserer Taktrate ca. 40.000 bis 50.000 mal pro Sekunde durchlaufen.
    Dein fehler ist hier...

    [font="Courier New"]while(!datei.eof())[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] getline(datei, temptext);[/font]
    [font="Courier New"] }
    [/font]
    Die zweite Zeile kann leer sein!
    Hier der richtige weg...


    [font="Courier New"]#include <iostream>[/font]
    [font="Courier New"]#include <fstream>[/font]
    [font="Courier New"]#include <string>[/font]
    [font="Courier New"]using namespace std;[/font]


    [font="Courier New"]/* Entry Point */[/font]
    [font="Courier New"]int main (int argc, char **argv)[/font]
    [font="Courier New"]{[/font]
    [font="Courier New"] ifstream datei;[/font]
    [font="Courier New"] int temperatur;[/font]
    [font="Courier New"] string text;[/font]
    [font="Courier New"] int abort = 0;[/font]

    [font="Courier New"] while ((abort != 1))[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] datei.open("/sys/class/thermal/thermal_zone0/temp", ios::in);[/font]
    [font="Courier New"] if ((datei.fail()))[/font]
    [font="Courier New"] {[/font]
    [font="Courier New"] cout << "Konnte datei nicht öffnen!";[/font]

    [font="Courier New"] return 0;[/font]
    [font="Courier New"] }[/font]

    [font="Courier New"] /* Zeiger Position immer auf 0, wir haben nur eine Zeile zum lesen ... */[/font][font="Courier New"]
    datei.seekg (0, datei.beg);[/font]

    [font="Courier New"] getline(datei, text);[/font]

    [font="Courier New"] temperatur = atoi(text.c_str());[/font]

    [font="Courier New"] temperatur = temperatur / 1000;[/font]

    [font="Courier New"] cout << temperatur << "\n";[/font]

    [font="Courier New"] datei.close();[/font]

    [font="Courier New"] sleep(1);[/font]
    [font="Courier New"] }[/font]


    [font="Courier New"] //::getchar();[/font]
    [font="Courier New"] return 0;[/font]
    [font="Courier New"]}
    [/font]

    den Rest schaffst du alleine und
    Normalerweise macht man auch in keiner schleife eine Datei auf…

    grüße und viel Glück
    Andreas

    Will euch mal am laufenden halten.

    Also die NET Runtime (mono) funktioniert bisher zu 100% korrekt.
    In den Bildern seht ihr einmal, dass jetzt die Umgebungs Variablen richtig zurückgegeben werden. z.B.

    [font="Courier New"]Environment[/font][font="Courier New"].GetFolderPath(Environment.SpecialFolder.MyPictures);[/font]

    gibt [font="Courier New"]"/Applications/MeineApp/Pictures"[/font] zurück oder

    [font="Courier New"]Environment[/font][font="Courier New"].GetFolderPath(Environment.SpecialFolder.ApplicationData);[/font]

    gibt [font="Courier New"]"/Applications/MeineApp"[/font] zurück.


    Mathematische Berechnungen funktionieren einwandfrei.
    Keine float probleme und es wird mit der FPU gerechnet, das sehe ich an der assembler ausgabe.

    [font="Courier New"]…[/font]
    [font="Courier New"]flds s8, [r1, #0][/font]
    [font="Courier New"]flds s12, [r2, #0][/font]
    [font="Courier New"]flds s9, [r1, #4][/font]
    [font="Courier New"]flds s13, [r2, #4][/font]
    [font="Courier New"]flds s10, [r1, #8][/font]
    [font="Courier New"]fadds s12, s8, s12[/font]
    [font="Courier New"]fadds s13, s9, s13[/font]
    [font="Courier New"]fadds s14, s10, s14[/font]
    [font="Courier New"]…[/font]

    Datums Werte werden richtig zurückgegeben.
    Binformats aktiviert, heißt ich brauche nicht mehr mono ./Anwendung.exe eingeben sondern nur mehr ./Anwendung.exe
    Und auf dem letzten Bild seht ihr noch die Controller die momentan zum Einsatz kommen.
    Sorry für die schlechte Bild Qualität, hatte nichts Besseres zur Verfügung.


    Bin jetzt von der Arbeit aus zwei Wochen unterwegs, werde die interessierten aber
    Sicher am laufenden halten.



    grüße
    Andreas