
========================================================
  overview on displays: http://beck-oled-lcd-tft-display.de/
  
  handy displays: http://www.module.ro/nokia_3510.html
  
  open source display software driver: http://serdisplib.sourceforge.net/

  baugleiche nokia modelle 
      nokiaport.de
  nokia 2310    TFT, 65.000 Farben, 96 x 68 Pixel 
    Display ist auch in 1600 2310 6125 vielleicht auch 1208 1209
    baugleich mit 1110 1110i 1112 1200 1208 1600 2310 2610 6030
    
      Bei der suche nach dem 1600, hinweis auf 
      A)  ST7626 65K Color 68 X 98RGB -- COG 68(8/16), 80(8/16), 4L, 3L
          http://www.sitronix.com.tw/sitronix/product.nsf/Doc/ST7626?OpenDocument
          (Quelle: http://forum.lcdinfo.com/viewtopic.php?t=2735)
      B) Andere quelle spricht vom PCF8833 fr das 1600
          http://rossum.posterous.com/screen-play-lots-of-other-screens-for-microco
          https://sourceforge.net/projects/nokiasuperbreak/
              --> sourcecode benutzt den PCF8833
              
          Dann gibt es noch diesen da: SPFD54124B
  
    vielleicht kompatibel mit dem nokia 6100, controller wren dann S1D15G10 oder PCF8833
        Nokia Display tutorial by Jams Lynch
      Epson datasheet EPSON-S1D15G00_REV1_0.pdf
      Phillips datasheet PHILIPS-lds176_spec.pdf
      Phillips PCF8833 datasheet philips-PCF8833_1.pdf

  Displays, die man mal kaufen knnte
  DFRobot ST7920
  http://www.komputer.de/zen/index.php?main_page=product_info&products_id=146&zenid=b4dc26bdef02415db0d74e51121d4bcb
  oder hier:
  http://www.mindkits.co.nz/store/led-lcds/128x64-graphic-lcd
  
  Von Newhaven gibt es auch ein ST7920 display: 
  http://www.newhavendisplay.com/specs/NHD-19232WG-BTMI-VT.pdf          lieferbar!!!
  http://www.newhavendisplay.com/app_notes/ST7920.pdf
  Das ST7920 gibt es auch hier:
    http://www.komputer.de/zen/index.php?main_page=product_info&cPath=30&products_id=146

  auch interessant:
  http://www.ledsee.com/index.php?page=shop.browse&category_id=24&option=com_virtuemart&Itemid=1
  z.B. ein 192x64 display, 
  
  4D displays:
    http://www.tigal.com/category/148
  oder von hier:
    http://www.tinkersoup.de/product_info.php?products_id=359
  
  Sparkfun Color LCD Shield (Nokia 6100)
    http://www.sparkfun.com/products/9363
  Das Sparkfun Nokia 6100 display gibt es im arduino shop
    http://store.arduino.cc/ww/index.php?main_page=product_info&cPath=11&products_id=125
  oder in berlin zu haben:
    http://www.tinkersoup.de/product_info.php?products_id=427

  http://www.shieldlist.org/nuelectronics/colorlcd-joystick
  
  http://www.shieldlist.org/nuelectronics/tft-2.8-lcd
  
  http://www.display3000.com/  --> komisch, sehr sparsam mit dokumentation
  
  http://www.watterott.com/de/MI0283QT-2-Adapter   ---> GUTER PREIS, deutsch?
  
  auch interessant:
  http://www.seeedstudio.com/depot/grove-oled-display-12864-p-781.html?cPath=163_167
  
  Nokia LCD 84x48
  http://www.komputer.de/zen/index.php?main_page=product_info&cPath=0&products_id=74
  oder dieses:
  http://www.komputer.de/zen/index.php?main_page=product_info&cPath=32&products_id=52
  
  Newhaven 128x64 OLED mit SSD1325 (16 Graustufen):
    http://www.newhavendisplay.com/index.php?main_page=product_info&cPath=315&products_id=3621
    mouser:
    http://de.mouser.com/ProductDetail/Newhaven-Display/NHD-27-12864UCY3/?qs=EQmeiuRlVUS%252btJZDdlK%252bDg%3d%3d

  FAZIT: 
    Nokia 6100 color lcd wre mal was: http://www.tinkersoup.de/product_info.php?products_id=427
  
  
========================================================


21.10.2011
  - U8G_DEV_MSG_PRIMITIVE_START und U8G_DEV_MSG_PRIMITIVE_END durch U8G_DEV_MSG_IS_BBX_INTERSECTION ersetzen
      --> 22.10.2011 ERLEDIGT
  - check for bbx --> nachricht an device
      --> 24.10.2011 ERLEDIGT
  - check for bbx --> in den high level procedures implementieren
      --> 24.10.2011 ERLEDIGT
  - COM treiber schreiben
      --> 23.10.2011 ERLEDIGT
  - die WIDTH / HEIGHT nachrichten zusammenfassen und die gren in der haupt-struktur ablegen.
      --> erstmal aufgeschoben
  - dev_rot und dev_stdout sind hinsichtlich der internen speicherverwendung inkonsistent.
     jede dev sollte einen ffentliche speicher besitzen, der irgendwie als parameter bergeben wird. 
     gleiches wird wohl fr den COM treiber gelten.
     --> 22.10.2011 ERLEDIGT (rot erscheint aber nicht mehr als device, sondern ist jetzt eine api funktion)
       .... noch keine 100% lsung... siehe nchster punkt
       --> nochmal alles angepasst
  - Im moment greift der dev treiber noch ber das u8g auf seinen eigenen speicher zu. das ist schlecht,
      weil damit keine doppelt devices realisiert werden knnen.
      den devices muss ihr eigener speicher bergeben werden
      zustzlicher parameter an die device-funktionen
      --> nein, der parameter ist in der u8g struktur enthalten
      --> 22.10.2011 ERLEDIGT
       --> nochmal alles angepasst, mem parameter nicht mehr in der struct --> argument der device function
      
  - das pbm device muss  noch angepasst werden
      --> 22.10.2011 ERLEDIGT
  
  - die anderen rotations procedures schreiben (rot180, rot270), rot180 funktioniert
      --> 23.10.2011 ERLEDIGT
  - stdout funktioniert nicht richtig, wenn die hhe nicht durch 8 teilbar ist (sieht man beim rot180)
      --> 23.10.2011 ERLEDIGT (dabei auch einen fehler in den page routinen gefunden 
  - Der com Treiber braucht noch eine PROGMEM Sequence Write funktion
      --> 23.10.2011 ERLEDIGT
  31.10.2011
    - cu12 font: upper lower page mit bdf2u8g benutzen und einen font erzeugen
      --> 31.10.2011 ERLEDIGT
    - die ttf fonts convertieren
      --> 31.10.2011 ERLEDIGT
    - pcs fonts convertieren
      --> 31.10.2011 ERLEDIGT
    - alles geeignet ablegen
      --> 31.10.2011 ERLEDIGT
  - prfen: weglassen nicht bentigter funktionen durch den linker: Funktioniert das auch indirekt mit nicht benutzten Strukturen (u8g_dev_t)?
        mal berprfen, wenn es mehrere com devices pro display gibt
        konkret ist die frage, ob mehrere devices in einer datei ligen drfen.
      --> siehe unten
  - generische delay function 
      --> siehe unten
  - generische callback procedure fr pb8v1 erstellen und in den device procedures aufrufen
      --> ERLEDIGT
  
  - mehr tests mit buchstaben rotation und bildschirm rotation erstellen. Im zusammenhang mit den IsBBXIntersection bin ich mir
      da nicht so sicher, ob das funktioniert
      --> siehe unten
      
  - Prfen, was passiert, wenn ein illegales zeichen abgerufen wird.
      --> ERLEDIGT (hinreichend geprft im picgen)
  - Umsetzen font format 1: data len muss noch angepasst werden, da die struktur ja jetzt nur 4 bytes gro ist
      --> 4.11.2011 alles ERLEDIGT
  - ausgabe der zeichen sollte bei 1 beginnen (picgen und bdf2u8g ndern!)
      --> 4.11.2011 wohl ERLEDIGT
  - die berechnungsroutine der font gre an format 1 anpassen
      --> 9.11.2011 ERLEDIGT
  - fonts mssen bei 0 (oder 1) anfangen knnen --> picgen anpassen, ggf format 0 anpassen
      es tritt noch ein fehler hier auf:
          ../bdf2u8g/bdf2u8g -l 78 -u 79 ../bdf/10x20.bdf u8g_font_10x20_78_79 u8g_font_10x20_78_79.c > /dev/null
          wieso taucht da ein code 128 auf????
      --> 7.11.2011 ERLEDIGT --> format 0 komplett umgestellt, fehler waren wohl die positionsangaben fr A und a
  - Encoding aus format 0 entfernen, ende byte entfernen
      --> 9.11.2011 ERLEDIGT

31.10.2011
  
  
  - Capital A berechnung: Wenn a nicht vorhanden, dann 0 nehmen --> number fonts!
        --> 11.11.2011 ERLEDIGT
  - Warum wird beim cursor font das das " " nicht angezeigt?
        --> 11.11.2011 ERLEDIGT
  - pb8v1               --> siehe unten
    1) device structur um color index erweitern
    2) routinen so umbauen, dass berall das dev-arg bergeben wird
    
  - fehler gefunden: wenn ein g mit dem 10x20 font an 0,5 geschrieben wird, dann wird das g nur zum teil gezeichnet.
      g ist 12 pixel hoch und hat ein y von -4, obere linke ecke der bounding box wre dann 5 + 4 - 12 + 1= -3 + 1 
      --> in DrawGlyph korrigiert, aus
            if ( u8g_IsBBXIntersection(u8g, x, y-h-1, w, h) == 0 )
          wurde
            if ( u8g_IsBBXIntersection(u8g, x, y-h+1, w, h) == 0 )
      ist aber auch (noch) nicht korrekt: das g an (0,5) geht immer noch nicht
        --> das problem ist die intersection bedingung in u8g_pb8v1_IsYIntersection
            if ( c2 && c3 ) return 0;
          allerdings wre gerade diese bedingung wichtig fr die performance: wenn c2 und c3 true sind, dann sind
          beide grenzen oberhalb von y2. Wegen der unsigned rechnung ist das tatschlich auch wahr.
          allerdings, man knnte eine zustzliche prfung einfhren, nmlich y1 < y2
        --> soweit gelst durch einfhrung einer neuen bedingung c
        --> nochmal alle bedingungen zur intersection systematisch prfen.
        --> soweit in dem extra programm durchgefhrt und neue routine ermittelnt --> muss noch bertragen werden + prfung ob das tut
        --> 16.11.2011 ERLEDIGT

  - wird bei DrawFrame eigentlich die intersection geprft ---> mal nachschauen
      --> siehe unten
  
  
  - restructurierung: addons aufsplitten in "tools" und "sys". Verzeichniss "arduino" kommt nach "sys".
     testapps wird in "stdout" umbenannt und kommt auch nach "sys"
        --> 16.11.2011 ERLEDIGT
        
  - micror font herausnehmen (schon erledigt fr picgen, fehlt noch build)
      build script und .h datei erledigt
        --> 19.11.2011 ERLEDIGT
  
  - u8g_DrawStr(&u8g, 80, 9, 1, "gabc"); sieht falsch aus (das g ist nach rechts (unten) statt nach unten (rechts) verschoben) --> helloworld sdl
        --> 19.11.2011 ERLEDIGT (x,y waren falsch fr dir 1, 2 & 3)

  - place u8g_dev_arg_pixel_t into u8g struct, remove color_index, replace by color from pixel_arg
        --> 19.11.2011 ERLEDIGT (jedenfalls das meiste)
  
  - pb8v1: Es wird bei den 4 richtungen immer der color index 1 verwendet --> ndern
        --> 19.11.2011 ERLEDIGT (war auskommentiert)
        
  - com routine: erweitern. es macht vermutlich mehr sinn, einiges explizit einzubauen:
      * adress line (d.h. data/command), ersetzt das EXTRA signal --> soweit erledigt
      * reset
      * chip select, ersetzt das ENABLE/DISABLE signal  --> in umsetzung....
      enable und write signal (fr KS0108) sollte intern behandelt werden.
        --> 20.11.2011 ERLEDIGT
      
  - KS0108 umsetzen
        --> 21.11.2011 ERLEDIGT
  
  - das pbm und stdout device in den entsprechenden system ordner verschieben (hnlich sdl device)
        --> 22.11.2011 ERLEDIGT
        
  - SetPixel und Set8Pixel in DrawPixel und Draw8Pixel umbenennen
        --> siehe unten
  
  - DrawBitmap
        --> 23.11.2011 ERLEDIGT
 
  
  - gprof variante: die pb8v1 base function aufrufen. teilweise umgesetzt, noch testen
        --> siehe unten
  
  
  - Optional: man sollte von rechtecken doch eher die untere linke ecke angeben
      naja, zumindest nach der doku ist das gleich wie in der glcd lib
      --> BLEIBT WIE ES IST.
  
     
23.11.2011
  - pb8v1             
    1) device structur um color index erweitern
      --> ERLEDIGT
    2) routinen so umbauen, dass berall das dev-arg bergeben wird
      --> ERLEDIGT
  - wird bei DrawFrame eigentlich die intersection geprft ---> mal nachschauen
  - SetPixel und Set8Pixel in DrawPixel und Draw8Pixel umbenennen
      --> ERLEDIGT, 23.11.2011
  - die WIDTH / HEIGHT nachrichten zusammenfassen und die gren in der haupt-struktur ablegen.
      --> erstmal aufgeschoben
      --> ERLEDIGT
      
  - prfen: weglassen nicht bentigter funktionen durch den linker: Funktioniert das auch indirekt mit nicht benutzten Strukturen (u8g_dev_t)?
        mal berprfen, wenn es mehrere com devices pro display gibt
        konkret ist die frage, ob mehrere devices in einer datei ligen drfen.
          Es scheint grundstzlich nicht fr COMMONS zu gelten. Wenn -fno-commons gesetzt ist oder das attribut nocommens angegeben is,
          dann werden variablen direct in die bss section geladen.
      --> ERLEDIGT
        
  - mehr tests mit buchstaben rotation und bildschirm rotation erstellen. Im zusammenhang mit den IsBBXIntersection bin ich mir
      da nicht so sicher, ob das funktioniert
  - gprof variante: die pb8v1 base function aufrufen. teilweise umgesetzt, noch testen
  
  - documentation: picture loop: (1) use procedure (2) do all inits (font, color index)
  - zur Erinnerung: 
      sed
        find . -name "*.[hc]" -exec sed -i 's/m2_rom_byte_p/m2_rom_char_p/g' {} \;
      ffmpeg (aus einzelbildern animation erstellen)
        ffmpeg -f image2 -i img%02d.jpg -b 500k output2.mpg
      sdl surface speichern
        http://www.libsdl.org/docs/html/sdlsavebmp.html
      aus bildern gif erzeugen
        convert -delay 100 -loop 0 image*.jpg animation.gif
      
  - Interface for dogm128.h schreiben
        spacetrash.c compiliert schon mal, dog_itoa muss noch bernommen werden, noch nichs getestet
      --> ERLEDIGT, 25.11.2011 (.. fr SLD, aber texte sind allerdings ein pixel zu tief)
  
  - spacetrash sollte nicht in dem normalen source folder liegen (zumindest nicht die variante, die noch das alte api benutzt)
      --> ERLEDIGT, 30.11.2011 (das ganze dogm api umgezogen)

  - spacetrash: fps counter implementieren
      umgesetzt fr das .pde file --> mal testen
      --> ERLEDIGT, 29.11.2011
  
  - spacetrash: auf das neue api umstellen
  
  - spacetrash kleiner machen.
      vielleicht hilft:     nm --size-sort SpaceTrash.elf 
      
  - bei spacetrash rutscht der FPS counter ber die punkte-anzeige... warum?
  
  - font routinen & use cases zur font metrik berechnung
  
  - GetWidth, GetHeight --> das sollten keine unterprogrammaufrufe sein. Vielmehr sollte die dimension des displays in der u8g struct gecached werden.
      --> ERLEDIGT, 23.11.2011
  - u8g_DrawStrP() fehlt
      --> ERLEDIGT, 24.11.2011
      
  - warum gibt es ein #ifdef ARDUINO um die dev treiber????
      --> muss ich noch machen (27.11.2011)
      --> ERLEDIGT, 27.11.2011
   
  - generische delay function 
      --> vor allem deshalb wichtig, damit wir die Arduini-abhngigen includes aus den dev treibern herausbekomment
      --> u8g_dev_dogs102 muss noch auf u8g_Delay() umgestellt werden
      --> ERLEDIGT, 27.11.2011

 -  hw-spi programmieren
      --> ERLEDIGT, 29.11.2011
 
 - pb8v2 programmieren
      --> ERLEDIGT, 02.12.2011
 
 - pb8v4 programmieren
 
 - was die pb proceduren betrifft, knnte man durchaus ein paar generische routinen schreiben:
    Clear, x/y intersection, u8g_pb8v2_WriteBuffer
        u8g_pb.c erstellt
      --> ERLEDIGT, 2.12.2011
    
 - wenn SetFont nicht ausgefhrt wurde, strzt u8g_GetFontBBXWidth ab, weil der font ptr NULL ist
    --> dokumentieren
 
 - Wenn kein font gesetzt wurde, strzen die font funktionen ab --> abfangen


- set8pixel procedures optimieren
      soweit abgeschlossen, es wird etwas mehr platz bentigt als bei dogm128
      --> ERLEDIGT, 2.12.2011

 - Namenskonvention fr devices
      u8g_dev_<chip>_<display_or_size>
      
      <chip>: name of the display controller
      <display_or_size>:  <width>x<height> or name of the display
      --> dokumentieren und umbenennen
 
 - Cursor Mal-Routinen implementieren
      wenn man dem subsystem mitteilt, dass sich nur der cursor gendert hat, mssten nur die pages neu
        gezeichnet werden, wo der cursor vorher war und wo er dann hinkommt.
        --> aufwndig
        --> cursor mal routinen mglichst einfach halten
      --> ERLEDIGT, 2.12.2011
 
 - u8g_cursorr.c weiter reduzieren und die 255 am ende entfernen (range limit)
      --> ERLEDIGT, 2.12.2011
      
 - Cursor Mal-Routinen am ende von Next aufrufen, hide&show procedure
      --> ERLEDIGT, 17.12.2011
        
 - DrawStr routinen: jeweils eine fr die richtungen, dir parameter entfallen lassen
       --> ERLEDIGT, 17.12.2011

 - tastatur handling fr spacetrash
      display muss noch rotiert werden --> erweiterung des dogm wrappers
       --> ERLEDIGT, 21.12.2011 
 
 - chess portieren
 
 - pins klappen gar nicht :-(
       --> ERLEDIGT, 20.12.2011

 
 - spacetrash rotation um 180 auf dem dogs102 klappt nicht
       --> ERLEDIGT, 21.12.2011 
 
 - fehlende zeilen bei spacetrash mit dogs102
      --> gilt auch fr das 0 Grad spacetrash
       --> ERLEDIGT, 20.12.2011 (War ein fehler in den box routinen)

 - dev handler: einsetzen der ESC-Write procedure
       --> ERLEDIGT, 23.12.2011 
      
 - irgendwas stimmt mit dem unifont nicht --> arduino Hello World
       --> ERLEDIGT, 30.12.2011 (script war falsch)
       
 - Image Draw Procedure
    hhe, breite, bits pro pixel (?), rohdaten
    statt bits pro pixel, lieber eigene proceduren
    
- NHD 27  --> 2-bit treiber schreiben, den alten umbenennen, aber wie?
       --> ERLEDIGT
       
 
 - Beschreibung im Wiki
      C++ Prototype:
      
      C Prototype:
      
      Description:
      
      Arguments:
      
      Returns:
      
      Use:               Inside/Outside Picture Loop
      
      Note:
      
      Example:
      
      See also:
      
  - conversions, idee: alles in rst schreiben und von dort nach google code und pdflatex convertieren
         http://docutils.sourceforge.net/docs/index.html
         http://code.google.com/p/wikir/
         sudo apt-get install python-docutils  --> rst2xyz (various conversions)
         sudo apt-get install python-setuptools   --> easy_install
         easy_install wikir
         wikir --> convert rst to google code wiki
         rst quick ref: http://docutils.sourceforge.net/docs/user/rst/quickref.html
         rst2html file.rst > file.html
         --> ERLEDIGT, eigener convertierer nach HTML
         
  - antialiased lines: 
    http://en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm --> pseudo code
    http://www.codeproject.com/KB/GDI/antialias.aspx --> integer version
    http://freespace.virgin.net/hugo.elias/graphics/x_wuline.htm
    Michael Abrash's Graphics Programming Black Book Special Edition, p 780
    
    
 - font reference punkt
     * Referenzpunkt des Font Autors
     * linke untere/obere ecke der minimalen bounding box des strings
          breite: string
          hhe: max ascent + max descent der zeichen des strings
     * linke untere/obere ecke der gA box
          breite: string
          hhe: ascent von 'A' + descent von 'g' der zeichen des strings                font_ptr[5] - font_ptr[12]
          referenzposition bezogen auf die linke untere ecke: dy = -font[12]
     * linke untere/obere ecke der font box
          breite: string
          hhe: ???  problem ist, wir kennen gar nicht den max ascent
             der zeichen ascent ist nmlich h-y, und darber msste man mal das max bilden
             das minimum ber y haben wir ja (aber nicht abgespeichert), dann wre die font box ascent-descent (da negativ) gro
             font_ptr[13]-font_ptr[14]
          referenzposition bezogen auf die linke untere ecke: dy = -font[14]
        
        
      Idee: 
        * bounding box berechnung festlegen: left_gA, left_max, Manuell, min box, gA Box, max box
            --> wie wre es nur die hhen festzulegen, die breite knnte man spter dazunehmen
              - min, ga, max, manual
        * referenzpunkt festlegen: Font (default), low left, low center, low right, ....
            --> wenn nur die hhen berechnet werden, wird das auch mit dem referenzpunkt einfacher. es gibt dann nur vier:
                - oben, mitte, unten, font (baseline)
        Einschrnkungen: Wenn keine bbx berechnung festgelegt ist, dann muss der referenzpunkt immer font sein oder low left, center left, upper left
          (progmem ersparnis!)
        * alles per callback lsen (hm mal sehen)
        * Berechnung (x,y) a, d
          # font - min, ga, max         --> keine transformation ntig
          # unten - ga                  --> y = y + decent
          # unten - max                  --> y = y + decent   (korrektur um die enfernung: unten zu baseline)
          # oben - ga                   --> y = y + ascent (korrektur um die enfernung: oben zu baseline)
          # oben - max                  -> wie oben
          # mitte - ga                          --> zunchst y nach unten transformieren (ascent + descent)/2 dann wie unten handlen
          vielleicht brauchen wir die min box gar nicht... oder bauen das mal als special ein.

          SetRefHeightFontOrigin(u8g)   <-- eventuell nicht ntig
            u8g->ascent = 0
            u8g->descent = 0
          SetRefHeightUpperCase(u8g)
            u8g->ascent = font_ptr[5]
            u8g->descent = font_ptr[12]
          SetRefHeightMax(u8g)
            u8g->ascent = font_ptr[13]
            u8g->descent = font_ptr[14]
          SetRefHeightManual(u8g, ascent, descent)
            u8g->ascent = ascent
            u8g->descent = descent
          SetRefHeightMinimal(u8g, char *s)
            u8g->ascent = ascent(s)
            u8g->descent = descent(s)
          
          SetRef
          
     