Forum: Mikrocontroller und Digitale Elektronik Nest Thermostat Recycling


von Johannes (Gast)


Lesenswert?

Hallo miteinander.
Beim gestrigen Besuch meines Lieblings Schrottis habe ich ein Nest 
Thermostat mitgenommen.
Eigentlich wollte ich es zerlegen und schauen was so drin ist und vor 
allem wie der Encoder gebaut ist weil mir die Haptik gefällt. Das gerät 
hat ein rundes Display und man kann den Metallring welcher das Gehäuse 
ist zur Bedienung drehen.
Zuhause an den Usb angeschlossen ging es sogar noch an. Es scheint wohl 
nicht mal defekt zu sein, allerdings wartet es auf ein fehlendes 
"Heatlink"
Google erzählte mir das im inneren ein Linux werkelt und auch gleich wie 
man das Ding Rootet.
https://www.exploitee.rs/index.php/Exploiting_Nest_Thermostats

Ich bin allerdings bis auf einige stunden Basteln mit der Vip1710 damals 
recht Unerfahren mit Embedded Linux

Ich habe einige Quellen gefunden
https://www.exploitee.rs/index.php/Nest_Hacking#Display
https://nest.com/legal/compliance/

Nun stellt sich mir die Frage. Wie bekomme ich eigene Programme drauf 
bzw woher bekommt man Compiler und co ?

Es wäre ja schon super dem Ding eine neue Aufgabe zu geben. Zb Digitaler 
Bilderrahmen oder zur Bedingung einiger Smarthome Elemente.

von Johannes (Gast)


Lesenswert?

Das Root hat sehr gut geklappt. #

root@02AA01AC081503C2# dmesg
Linux version 2.6.37 (bamboo@ip-10-168-83-248) (gcc version 4.4.1 
(Sourcery G++ Lite 2010q1-202) ) #1 PREEMPT Sun Jun 21 05:50:16 UTC 2015
CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7f
CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: Nest J49
Reserving 2097152 bytes SDRAM for VRAM
Memory policy: ECC disabled, Data cache writeback
OMAP3630 ES1.2 (l2cache neon isp 192mhz_clk )
SRAM: Mapped pa 0x40200000 to va 0xfe400000 size: 0x10000
On node 0 totalpages: 15872
free_area_init_node: node 0, pgdat c047c4e8, node_mem_map c049a000
  Normal zone: 128 pages used for memmap
  Normal zone: 0 pages reserved
  Normal zone: 15744 pages, LIFO batch:3
pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
pcpu-alloc: [0] 0
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 
15744
Kernel command line: root=/dev/mtdblock7 rootfstype=jffs2 console= 
nlmodel=Display-2.14 brightness=108 panic=1
PID hash table entries: 256 (order: -2, 1024 bytes)
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 62MB = 62MB total
Memory: 58172k/58172k available, 7364k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    DMA     : 0xffc00000 - 0xffe00000   (   2 MB)
    vmalloc : 0xc4800000 - 0xf8000000   ( 824 MB)
    lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)
    modules : 0xbf000000 - 0xc0000000   (  16 MB)
      .init : 0xc0008000 - 0xc004e000   ( 280 kB)
      .text : 0xc004e000 - 0xc04484bc   (4074 kB)
      .data : 0xc044a000 - 0xc04810e0   ( 221 kB)
Preemptable hierarchical RCU implementation.
        RCU-based detection of stalled CPUs is disabled.
        Verbose stalled-CPUs detection is disabled.
NR_IRQS:409
Clocking rate (Crystal/Core/MPU): 19.2/332/300 MHz
omap_hwmod: i2c1: softreset failed (waited 10000 usec)
omap_hwmod: i2c2: softreset failed (waited 10000 usec)
omap_hwmod: i2c3: softreset failed (waited 10000 usec)
Reprogramming SDRC clock to 332000000 Hz
IRQ: Found an INTC at 0xfa200000 (revision 4.0) with 96 interrupts
Total of 96 interrupts on 1 active controller
GPMC revision 5.0
Trying to install interrupt handler for IRQ402
Trying to install interrupt handler for IRQ403
Trying to install interrupt handler for IRQ404
Trying to install interrupt handler for IRQ405
Trying to install interrupt handler for IRQ406
Trying to install interrupt handler for IRQ407
Trying to install interrupt handler for IRQ408
Trying to install type control for IRQ409
Trying to set irq flags for IRQ409
OMAP clockevent source: GPTIMER1 at 32768 Hz
Console: colour dummy device 80x30
Calibrating delay loop... 298.32 BogoMIPS (lpj=1167360)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
devtmpfs: initialized
regulator: core version 0.5
regulator: dummy:
NET: Registered protocol family 16
OMAP GPIO hardware version 2.5
OMAP GPIO hardware version 2.5
OMAP GPIO hardware version 2.5
OMAP GPIO hardware version 2.5
OMAP GPIO hardware version 2.5
OMAP GPIO hardware version 2.5
Machine: Nest Display D2D, Revision 14
omap_mux_init: Add partition: #1: core, flags: 0
hw-breakpoint: debug architecture 0x4 unsupported.
OMAP DMA hardware revision 5.0
bio: create slab <bio-0> at 0
regulator: vmmc2: 1800 mV normal
SCSI subsystem initialized
omap2_mcspi omap2_mcspi.1: registered master spi1
spi spi1.0: setup mode 0, 8 bits/w, 10000000 Hz max --> 0
omap2_mcspi omap2_mcspi.1: registered child spi1.0
omap2_mcspi omap2_mcspi.2: registered master spi2
spi spi2.0: setup mode 0, 8 bits/w, 1000000 Hz max --> 0
omap2_mcspi omap2_mcspi.2: registered child spi2.0
omap2_mcspi omap2_mcspi.3: registered master spi3
omap2_mcspi omap2_mcspi.4: registered master spi4
omap_device: omap_i2c.1: new worst case activate latency 0: 30517
omap_i2c omap_i2c.1: bus 1 rev4.0 at 400 kHz
twl4030: PIH (irq 7) chaining IRQs 368..375
twl4030: power (irq 373) chaining IRQs 376..383
twl4030: gpio (irq 368) chaining IRQs 384..401
regulator: VUSB1V5: 1500 mV normal standby
regulator: VUSB1V8: 1800 mV normal standby
regulator: VUSB3V1: 3100 mV normal standby
twl4030_usb twl4030_usb: Initialized TWL4030 USB module
regulator: VAUX2_4030: 2800 mV normal standby
regulator: VDVI: 1800 mV normal standby
omap_device: omap_i2c.1: new worst case deactivate latency 0: 30517
omap_i2c omap_i2c.2: bus 2 rev4.0 at 400 kHz
omap_i2c omap_i2c.3: bus 3 rev4.0 at 400 kHz
Switching to clocksource 32k_counter
musb-hdrc: version 6.0, peripheral, debug=0
musb-hdrc musb-hdrc.0: dma type: dma-inventra
musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, 
HB-ISO Rx, HB-ISO Tx, SoftConn)
musb-hdrc: MHDRC RTL version 1.800
musb-hdrc: setup fifo_mode 4
musb-hdrc: 28/31 max ep, 16384/16384 memory
musb-hdrc musb-hdrc.0: USB Peripheral mode controller at fa0ab000 using 
DMA, IRQ 92
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (double precision)
omap_init_opp_table: no hwmod or odev for iva, [6] cannot add OPPs.
Diamond Backplate GPIO Driver 2011-03-21
Diamond Battery GPIO Driver 2011-05-11
Diamond ZigBee GPIO Driver 2011-03-21
omap-iommu omap-iommu.0: isp registered
VFS: Disk quotas dquot_6.5.2
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
msgmni has been set to 113
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
i2c 3-0036: Driver lm3530-backlight requests probe deferral
OMAP DSS rev 2.0
OMAP RFBI rev 1.0
OMAP DISPC rev 3.0
OMAP DSI rev 1.0
Samsung LMS350DF03 LCD Driver 2010-10-04
Tianma TM025ZDZ01 LCD Driver 2011-05-09
s6d05a1 spi1.0: setup mode 3, 8 bits/w, 10000000 Hz max --> 0
omap_uart.0: ttyO0 at MMIO 0x4806a000 (irq = 72) is a OMAP UART0
omap_uart.1: ttyO1 at MMIO 0x4806c000 (irq = 73) is a OMAP UART1
omap_uart.2: ttyO2 at MMIO 0x49020000 (irq = 74) is a OMAP UART2
omap_uart.3: ttyO3 at MMIO 0x49042000 (irq = 80) is a OMAP UART3
brd: module loaded
loop: module loaded
MADC driver.
omap2-nand driver initializing
Non-ONFI flash detected
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xba (Micron NAND 256MiB 
1,8V 16-bit)
Creating 15 MTD partitions on "omap2-nand.0":
0x000000000000-0x000010000000 : "nand0"
0x000000000000-0x000000040000 : "ipl"
0x000000040000-0x0000001c0000 : "spl0"
0x0000001c0000-0x000000340000 : "spl1"
0x000000340000-0x0000003a0000 : "env0"
0x0000003a0000-0x000000400000 : "env1"
0x000000400000-0x000000c00000 : "boot0"
0x000000c00000-0x000003a00000 : "root0"
0x000003a00000-0x000004200000 : "boot1"
0x000004200000-0x000007000000 : "root1"
0x000007000000-0x000007400000 : "system-config"
0x000007400000-0x000007c00000 : "user-config"
0x000007c00000-0x000009000000 : "data"
0x000009000000-0x00000a400000 : "log"
0x00000a400000-0x000010000000 : "scratch"
tun: Universal TUN/TAP device driver, 1.6
tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
Dynamic Multi-function Composite USB Gadget Driver 2011-02-28
dynamic_usb gadget: dynamic_usb ready
fsg_probe pdev: c045a448, pdata: c045b4c4
dynamic_register_function usb_mass_storage
dynamic_usb gadget: Mass Storage Function, version: 2009/09/11
dynamic_usb gadget: Number of LUNs=1
 lun0: LUN: removable file: (no medium)
input: pwm-beeper as /devices/platform/pwm-beeper/input/input0
Avago ADBS driver
input: avago-adbs-a330 as 
/devices/platform/omap/omap_i2c.2/i2c-2/2-0057/input/input1
input: twl4030_pwrbutton as 
/devices/platform/omap/omap_i2c.1/i2c-1/1-0049/twl4030_pwrbutton/input/i 
nput2
using rtc device, twl_rtc, for alarms
twl_rtc twl_rtc: rtc core: registered twl_rtc as rtc0
twl_rtc twl_rtc: Power up reset detected.
twl_rtc twl_rtc: Enabling TWL-RTC.
i2c /dev entries driver
omap_wdt: OMAP Watchdog Timer Rev 0x31: initial timeout 60 sec
omap_wdt: Last boot caused by Reset
omap_device: omap_wdt.-1: new worst case deactivate latency 0: 30517
ip_tables: (C) 2000-2006 Netfilter Core Team
arp_tables: (C) 2002 David S. Miller
TCP cubic registered
Initializing XFRM netlink socket
NET: Registered protocol family 10
lo: Disabled Privacy Extensions
NET: Registered protocol family 17
NET: Registered protocol family 15
Registering the dns_resolver key type
VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
Power Management for TI OMAP3.
sr_init: No PMIC hook to init smartreflex
smartreflex smartreflex.0: omap_sr_probe: SmartReflex driver initialized
smartreflex smartreflex.1: omap_sr_probe: SmartReflex driver initialized
clock: disabling unused clocks to save power
platform mpu.0: omap_voltage_scale: Already at the requestedrate 
300000000
Console: switching to colour frame buffer device 40x40
omapdss DPI: Could not find exact pixel clock. Requested 7180 kHz, got 
7200 kHz
mmc0: card claims to support voltages below the defined range. These 
will be ignored.
mmc0: queuing unknown CIS tuple 0x91 (3 bytes)
mmc0: new SDIO card at address 0001
tianma_tm025zdz01 display0: display ID: 68 45 01
Warning: unable to open an initial console.
Empty flash at 0x02318dd4 ends at 0x02319000
VFS: Mounted root (jffs2 filesystem) on device 31:7.
Mounted root...
devtmpfs: mounted
Freeing init memory: 280K
dynamic_usb gadget: high speed config #1: dynamic
udev[120]: starting version 166
linux sdio_bus_probe
linux sdio_bus_probe
cfg80211: Calling CRDA to update world regulatory domain
Compat-wireless backport release: r5.00.15-build_188-1-g258226a
Backport based on wl12xx.git ol_R5.SP4.01
wl12xx: driver version: ol_R5.SP4.01
wl12xx: compilation time: Sun Jun 21 05:52:20 2015
omap_device: omap_wdt.-1: new worst case activate latency 0: 30517
wl12xx: restore WiFi powerwl12xx: remove WiFi power
wl12xx: loaded
dynamic_usb gadget: high speed config #1: dynamic
wl12xx: state: 0
wl12xx: restore WiFi power
wl12xx: firmware booted (Rev 4.99.11.5.1)
ADDRCONF(NETDEV_UP): wlan0: link is not ready
spidev spi2.0: setup mode 0, 8 bits/w, 1000000 Hz max --> 0
spidev spi2.0: spi mode 00
spidev spi2.0: setup mode 0, 8 bits/w, 1000000 Hz max --> 0
spidev spi2.0: 8 bits per word
spidev spi2.0: setup mode 0, 8 bits/w, 1048576 Hz max --> 0
spidev spi2.0: 1048576 Hz (max)
wl12xx: removing interface 18:b4:30:19:54:52
wl12xx: remove WiFi power
wpan0: Disabled Privacy Extensions
wpan0-L: Disabled Privacy Extensions
spidev spi2.0: setup mode 0, 8 bits/w, 1048576 Hz max --> 0
spidev spi2.0: spi mode 00
spidev spi2.0: setup mode 0, 8 bits/w, 1048576 Hz max --> 0
spidev spi2.0: 8 bits per word
spidev spi2.0: setup mode 0, 8 bits/w, 1048576 Hz max --> 0
spidev spi2.0: 1048576 Hz (max)
wpan0: Disabled Privacy Extensions
wpan0: no IPv6 routers present
omap_device: omap_i2c.3: new worst case activate latency 0: 61035
omap_device: omap_uart.3: new worst case deactivate latency 0: 30517
omap_device: omap_uart.0: new worst case activate latency 0: 61035
omap_device: omap_i2c.1: new worst case activate latency 0: 122070
omap_device: omap_i2c.1: new worst case deactivate latency 0: 91552
wl12xx: state: 0
wl12xx: restore WiFi power
wl12xx: firmware booted (Rev 4.99.11.5.1)
ADDRCONF(NETDEV_UP): wlan0: link is not ready
wlan0: authenticate with 88:03:55:dc:61:c4 (try 1)
wlan0: authenticated
wlan0: associate with 88:03:55:dc:61:c4 (try 1)
wlan0: RX AssocResp from 88:03:55:dc:61:c4 (capab=0x411 status=0 aid=2)
wlan0: associated
wlan0: moving STA 88:03:55:dc:61:c4 to state 1
wlan0: moving STA 88:03:55:dc:61:c4 to state 2
ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
wl12xx: Association completed.
wlan0: moving STA 88:03:55:dc:61:c4 to state 3
wlan0: no IPv6 routers present
omap_device: omap_i2c.2: new worst case deactivate latency 0: 2319335
root@02AA01AC081503C2#

von Erich (Gast)


Lesenswert?

Dann ist ja alles gut!

von Johannes (Gast)


Lesenswert?

;) Fast.

Mir fehlt der Schritt um auf so einer Hardware ein Programm zu 
schreiben.
Google liefert mir da mangels Fragewort keine antworten.

Angenommen ich möchte ein einfaches hallo Welt in C Schreiben und auf 
dem Gerät Starten.
Wie stellt man das an?

von Keks (Gast)


Lesenswert?

Hi, aller wahrscheinlichkeit nach wird auf dem ding direkt kein gcc oder 
anderer compiler. drauf sein. Einfach mal gcc auf der konsole eingeben 
und gucken. Oder alle verzeichnisse des suchpfades durchgucken, was da 
so rumsteht.

Falls kein compiler dabei ist, braucst du zunächst mal einen 
Crosscompiler+BuildTools, die -auf einer abweichenden hardware- Code für 
deine Zielplattform generieren. Ganz oben im bootlog steht der Name der 
Target-CPU, die linux-kernel version und die für den build des kernel 
verwendete gcc-Version.

Am die meisten Cross-Toolchains gibts für Linux. Dh einfach mal dein 
preferred linux in einer VM installieren(geht am schnellsten), cross 
toolchain oben drauf, suchpfade anpassen, fertig.

Dann musst du dein hello world programm noch irgendwie aufs target 
bekommen. Am einfachsten wäre hier ein nfs-mount auf deine linux-vm, 
netzwerk ist ja lt bootlog gestartet. Ggf noch die ssid und 
wpa2-passphrase in /etc/network auf dem target anpassen.

Ob das geht, hängt davon ab, ob auf dem target überhaupt ein nfs client 
installiert ist. Wenn nicht, guck mal ob ein ftp(d) oder ssh(d) oder 
ähnliches drauf ist. Irgendwie musst du das hello world aufs target 
kriegen. Ein beschreibbares filesystem auf dem target wird es in jedem 
fall geben, /var oder /tmp geht immer. Evtl ist auch eines der 
flash-filesysteme beschreibbar, dann überlebt dein hello world sogar 
einen reboot.

von Johannes (Gast)


Lesenswert?

Also auf dem Gerät habe ich erst mal nix gefunden aber einen Gcc für Pc 
war sogar einfach :) Da ich schon auf Linux bin brauchte ich auch keine 
Vm :)
Ich bekomme über einen Umweg über Curl die Datei von meinem Nas 
Webserver auf den Nest. Und siehe da es klappt :)
Jetzt werde ich mich mal versuchen das Netzwerk zu Mounten damit das 
ganze etwas einfacher wird.

Bleiben noch zwei Essentielle Probleme. Wie bekomme ich ein Bild auf das 
Display und wie frage ich den Ringencoder ab.
Grafik ist unter Fb0 erreichbar mit cat /dev/urandom > /dev/fb0 bekomme 
ich bunte Pixel.
Aber wie setze ich aus C einen Pixel
und wie komme ich an die Eingänge

input: pwm-beeper as /devices/platform/pwm-beeper/input/input0
Avago ADBS driver
input: avago-adbs-a330 as
/devices/platform/omap/omap_i2c.2/i2c-2/2-0057/input/input1
input: twl4030_pwrbutton as
/devices/platform/omap/omap_i2c.1/i2c-1/1-0049/twl4030_pwrbutton/input/i
nput2

von Keks (Gast)


Lesenswert?

Bei "linux using input subsystem" oder " ... /dev/fb0" schmeisst deine 
suchmaschine viele brauchbare treffer...

von Johannes (Gast)


Lesenswert?

Keks schrieb:
> schmeisst deine
> suchmaschine viele brauchbare treffer...

Absolut :) nur leider zu viele. Und ich habe zu wenig Ahnung.
Okay ich habe da ein Programm gefunden leider ohne Beschreibung.
Es lässt das Display in Grau / Schwarz erstrahlen
Über memset(FrameBuffer, 128, FixedInfo.smem_len); werden daten in den 
Buffer geschoben. nur finde ich nicht woher diese kommen?
Ich hätte eine schleife erwartet in welcher erstmals die 0 Pixel erzeugt 
werden oder so.
Es gibt einige andere Beispiele bei denen das so ist aber diese erzeugen 
auf dem Nest nur eine Fehlermeldung dort wird auch anstelle von memset 
nur mit munmap gearbeitet.



1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <string.h>
4
#include <fcntl.h>
5
#include <linux/fb.h>
6
#include <sys/mman.h>
7
struct fb_fix_screeninfo FixedInfo;
8
struct fb_var_screeninfo OrigVarInfo;
9
static int FrameBufferFD = -1;
10
void *FrameBuffer = (void *) -1;
11
12
#ifndef __ANDROID__
13
#define FRAMEBUFFER "/dev/fb0"
14
#else
15
#define FRAMEBUFFER "/dev/graphics/fb0"
16
#endif //__ANDROID__
17
18
void openFBDEV(void)
19
{
20
    /* open the framebuffer device */
21
    FrameBufferFD = open(FRAMEBUFFER, O_RDWR);
22
    if (FrameBufferFD < 0)
23
    {
24
        fprintf(stderr, "Error opening %s\n", FRAMEBUFFER);
25
        exit(1);
26
    }
27
    /* Get the fixed screen info */
28
    if (ioctl(FrameBufferFD, FBIOGET_FSCREENINFO, &FixedInfo))
29
    {
30
        fprintf(stderr, "error: ioctl(FBIOGET_FSCREENINFO) failed\n");
31
        exit(1);
32
    }
33
    /* get the variable screen info */
34
    if (ioctl(FrameBufferFD, FBIOGET_VSCREENINFO, &OrigVarInfo))
35
    {
36
        fprintf(stderr, "error: ioctl(FBIOGET_VSCREENINFO) failed\n");
37
        exit(1);
38
    }
39
40
    if (FixedInfo.visual != FB_VISUAL_TRUECOLOR
41
            && FixedInfo.visual != FB_VISUAL_DIRECTCOLOR)
42
    {
43
        fprintf(stderr,
44
                "non-TRUE/DIRECT-COLOR visuals (0x%x) not supported by this demo.\n",
45
                FixedInfo.visual);
46
        exit(1);
47
    }
48
    /*
49
     * fbdev says the frame buffer is at offset zero, and the mmio region
50
     * is immediately after.
51
     */
52
    /* mmap the framebuffer into our address space */
53
    FrameBuffer = (void *) mmap(0, /* start */
54
    FixedInfo.smem_len, /* bytes */
55
    PROT_READ | PROT_WRITE, /* prot */
56
    MAP_SHARED, /* flags */
57
    FrameBufferFD, /* fd */
58
    0 /* offset */);
59
    if (FrameBuffer == (void *) -1)
60
    {
61
        fprintf(stderr, "error: unable to mmap framebuffer\n");
62
        exit(1);
63
    }
64
}
65
void closeFBDEV(void)
66
{
67
    munmap(FrameBuffer, FixedInfo.smem_len);
68
    close(FrameBufferFD);
69
}
70
int main()
71
{
72
    openFBDEV();
73
    fprintf(stderr, "openFBDEV finish\n");
74
    memset(FrameBuffer, 128, FixedInfo.smem_len);
75
    sleep(5);
76
    closeFBDEV();
77
    fprintf(stderr, "closeFBDEV finish\n");
78
    return 0;
79
}

von Keks (Gast)


Lesenswert?

Das beispiel schreibt mit memset ganz dumpf 0x80 an jede fb-adresse, 
ohne sich um zeilen, spalten, bytes per pixel zu kümmern. Im endeffekt 
gibt das dann grau. Du kannst dieses beispiel aber erweitern, indem du 
die werte (und andere) aus fix_ und var_screeninfo rausklaubst und mit 
diesen infos dann strukturiert in FrameBuffer reinschreibst. Du brauchst 
dazu lediglich die organisation eines pixels im FB, die zeilenlänge und 
die Anzahl der Zeilen. Darauf kannst du dann deine eigenen 
Zeichenfunktionen aufsetzen.

von Johannes (Gast)


Lesenswert?

Also müsste ich um einen Pixel zu setzen mit memset drei aufeinander 
folgende Speicherzellen füllen ?

von Keks (Gast)


Lesenswert?

Ungefähr. es sind  bits_per_pixel/8 bytes. Meistens drei oder vier. RGB 
oder RGBA, kann aber auch was exotisches sein. ZB 565 bits für RGB und 
zwei bytes per pixel. Einfach mal ausprobieren. Und du kannst dann auch 
bei 32 bpp direkt einen uint32 per memset schreiben. Muss nicht 
unbedingt byteweise sein.

von Johannes (Gast)


Lesenswert?

Es sind 1 Byte Pro Pixel RGB und ein Byte ohne ersichtliche Funktion.
Somit sollte ich jetzt Schonmal Bilder auf das Display bekommen.

Ist das denn eigentlich der Richtige weg Bilder auf ein Display zu 
bekommen oder gibt es da einfachere Wege als im Speicher Pixel zu 
setzen?
Ich erinnere mich an qbasic zurück dort gab es so Draw und Circle 
functionen.

von Keks (Gast)


Lesenswert?

Draw und Circle setzen im endeffekt auch auf diese primitiven 
setze-pixel-funktionen auf...

von Johannes (Gast)


Lesenswert?

Keks schrieb:
> Draw und Circle setzen im endeffekt auch auf diese primitiven
> setze-pixel-funktionen auf...

Ich weiß :) ich hatte nur gehofft das es fertige befehle gibt damit ich 
nicht alles selber machen muss :)

von Keks (Gast)


Lesenswert?

Es gibt in den weiten des Internetz viele graphic libraries in C, die 
auf dem Framebuffer aufsetzen, von klein bis fett. Einfach mal suchen.
Hier eine von den einfacheren, vermittelt dir eine Idee, wie's gehen 
könnte:
https://github.com/boppreh/framebuffer
Wenn du Textdarstellung brauchst, findest du bestimmt auch eine fertige 
FontEngine.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.