Bonjour,
j'ouvre ce topic sur le hack cadre photo, pour les transformer en écran usb,
les hacks fonctionne principalement sur des environnements GNU/Linux
exemple de résultat final :
plusieurs modèles de cadres sont modifiable:
- ceux basé sur une puce AX206 (celui que j'utilise)
- basé sur une puce ST2205
- cadre photo samsung (sous Windows ça fonctionne de base)
- parrot df3120
pour les modèle à base de AX206 :
la première chose est d'en trouver un qui soit modifiable et qu'il est un écran de bonne qualité,
la liste des modèles ce trouve ici
modèle 1,5 pouce:
j'ai commandé le modèle delight-digi censé être supporté, au final il est supporté mais avec le modèle dx27893,
ce qui implique que les firmwares sont très variable, bon point pour l'écran qui est de bonne qualité (couleur / angle de vision)
le modèle dx27893 est dispo pour un peut plus cher sur dealxtreme avec la confirmation dans les avis que l’écran est de bonne qualité
modèle 2.4 pouce:
celui ou je suis sur de la qualité est le pearl mais il faut avoir quelqu'un en Allemagne pour le commander
le modèle link-delighta des angles de vision très moyen
partie logiciel :
la compilation fonctionne parfaitement sur une Debian squeeze,
sur les autre distributions il est possible que la partie génération des firmwares modifié ne fonctionne pas car les mise à jours de sdcc sont à priori incompatible avec ceux ci
Installation des dépendances :
Code :
- sudo apt-get install gcc python-dev libc6 libusb-dev zlib1g-dev libssl-dev make
|
télécharger les sources de dpf-ax et lancer la compilation
pour les firmwares, il y a 2 possibilité:
-télécharger les firmware pré compilé(méthode facile)
-ou compiler ceux ci (méthode longue):
pour commencer il faut installer quelque dépendance
installation de sdcc :
sous debian squeeze :
ou pour debian wheezy et ubuntu (tester sous wheezy), cc1111 est un fork de sdcc
Code :
- sudo apt-get install cc1111
|
intelhex est aussi nécessaire :
pour terminer on lance la génération des firmwares
le hack
sauvegarde du firmware (penser à le conserver, pour le reflasher à son état d'origine en cas de problème)
il faut passer le cadre en connexion USB (en principe il faut appuyer 3 fois sur le bouton menu)
Code :
- cd tools
- sudo python fulldump.py /dev/sg1 (ou /dev/sr1)
|
et on verifie si le hack peut fonctionner (le nom du fichier contient la date, à modifier si besoin)
Code :
- python identify.py fulldump_*.bin
|
exemple quand le cadre est connue pour être modifiable
Citation :
Looking for firmware.............: Found (buildwin, 128x128 px).
Looking for Openwin..............: Found.
Looking for LcdIniTbl............: Found.
Looking for backlight & contrast.: Found, Found.
Looking for known signatures.....: Found.
Your dpf is compatible with model ['dx27893_2'].
|
l'élément important à noter est : dx27893_2
ensuite il faut démarrer le cadre photo en mode recovery
appuyer dessus le bouton menu et reset (avec un trombone),
tous en restant appuyer brancher le câble usb (avec une troisième main c'est plus facile)
l’écran ne doit pas s'allumer et avec la commande dmesg on devrait avoir quelque chose qui ressemble à ça
Citation :
hiddev0,hidraw0: USB HID v2.01 Device
|
installer le nouveau firmware :
Code :
- ./hiddetach
- sudo python restore.py ../src/fw_<<ref_cadre>>.bin -f
|
<<ref_cadre>> est à remplacer par le nom du modèle donner au moment de l'identification
si l'opération ce passe bien l'écran devrais afficher des yeux
exemple
exploitation du cadre de l'écran USB
lcd4linux (linux) :
- installation des dépendances (sous debian sqeeze)
Code :
- sudo apt-get install libtool automake autoconf subversion libgd2-noxpm-dev libmpdclient-dev libibus-dev
|
- installation des dépendances (sous debian wheezy)
Code :
- sudo apt-get install libtool automake autoconf subversion libgd2-noxpm-dev libmpdclient-dev libibus-1.0-dev
|
si vous utiliser plusieurs type d’écran avec lcd4linux :
éditer le fichier build-dpf-lcd4linux.sh
Code :
- nano build-dpf-lcd4linux.sh
|
vers la ligne 49, changer ceci :
./configure --with-drivers=DPF
par
./configure --with-drivers=all
ensuite on lance la compilation de lcd4linux
lors de la compilation on a un récapitulatif des drivers et plugin dispo
Citation :
included drivers:
drv_dpf.o drv_generic_graphic.o widget_image.o
-----------------------------------------
included plugins:
plugin_apm.o plugin_button_exec.o plugin_asterisk.o plugin_cpuinfo.o plugin_dbus.o plugin_diskstats.o plugin_dvb.o plugin_exec.o plugin_event.o plugin_file.o plugin_fifo.o plugin_hddtemp.o plugin_huawei.o plugin_i2c_sensors.o plugin_imon.o plugin_isdn.o plugin_kvv.o plugin_loadavg.o plugin_meminfo.o plugin_mpd.o plugin_mpris_dbus.o plugin_netdev.o plugin_netinfo.o plugin_pop3.o plugin_ppp.o plugin_proc_stat.o plugin_sample.o plugin_seti.o plugin_statfs.o plugin_uname.o plugin_uptime.o plugin_w1retap.o plugin_wireless.o plugin_xmms.o
|
et parmi les plugins non dispo (car dépendance non installé) on a:
Citation :
configure: WARNING: nmeap.h header not found: gps plugin disabled
configure: WARNING: iconv not found: iconv plugin disabled
configure: WARNING: mysql/mysql.h header not found: mysql plugin disabled
configure: WARNING: sqlite3.h header not found: qnaplog plugin disabled
|
à vous d'installer les packets si vous en avez besoin.
ensuite on copie le binaire lcd4linux dans /usr/local/bin
(à noter que le binaire peut être utiliser sur un autre système tous pendant que la base matériel est la même et que les dépendances sont installé)
Code :
- sudo cp lcd4linux/lcd4linux /usr/local/bin
|
et on créer et remplis un fichier de conf (exemple en 128x128 qui permet d'avoir comme ce qu'il y a dessus la photo en tête de topic)
Code :
- sudo nano /etc/lcd4linux.conf
|
Citation :
Layout 'dpf128'
Display 'DPF'
Plugin MPD {
enabled 1
server 'localhost'
port 6600
# password 'secret'
minUpdateTime 500
} Variables {
# Ticks:
second 1000
minute 60 * second
# Standard Dimensions:
linesize 21 # max line length, for status lines etc.
width100 19 # full width after padding (border)
width050 10 # 1/2 of full width
width033 7 # 1/3 of full width
width025 5 # 1/4 of full width
width010 2 # 1/10 of full width
# Colors:
# ToDo: Alphakanal ausnutzen
black '000000'
white 'ffffff'
red 'ff0000'
darkblue '000066'
lightgray 'b2b2b2'
darkgray '191919'
barcolor0 '5f5fff'
barcolor1 'ff5f5c'
t_onesec 1000
t_500m 500
tack 500
tick 100
tacku 100
scroller 300
}
Display dpf {
Driver 'DPF'
Port 'usb0'
Font '6x8'
Foreground lightgray
Background black
Basecolor black
}
Widget System {
class 'Text'
expression uname('nodename') . ' '. netinfo::ipaddr('wlan0')
width linesize
align 'C'
Background lightgray
Foreground darkgray
}
Widget Time {
class 'Text' expression strftime('%d.%m.%Y %H:%M:%S', time())
width linesize align 'C'
update 1 * second
Background lightgray
Foreground darkgray
}
Widget Uptime {
class 'Text'
expression 'Up: ' . uptime('%d days %H:%M')
width linesize
align 'C'
update 1 * second
Background lightgray
Foreground darkgray
}
# display artist and album, scrolling
Widget mpd-combo {
class 'Text'
expression mpd::artist() . '/' . mpd::title() width linesize
align 'A'
speed scroller
update tack
}
Widget mpd-state {
class 'Icon'
speed tack
update tack
bitmap {
row1 '......|.*....|.......|......'
row2 '......|.**...|.......|......'
row3 '......|.***..|.**..**|.*****'
row4 '......|.****.|.**..**|.*****'
row5 '......|.***..|.**..**|.*****'
row6 '......|.**...|.**..**|.*****'
row7 '......|.*....|.**..**|.*****'
row8 '......|......|.......|......'
}
frame (mpd::getStateInt())
visible (1)
}
# small playbar and track time
Widget smallMP3Bar_part1 {
class 'Bar'
expression mpd::elapsedTimeSec()
length 14
min 0
max mpd::totalTimeSec()
direction 'E'
style 'H'
update tack
}
Widget smallMP3Bar_part2 {
class 'Text'
expression mpd::formatTimeMMSS( mpd::elapsedTimeSec() ).'/'.mpd::formatTimeMMSS( mpd::totalTimeSec() )
width 13
update tack
align 'L'
}
# display mpd repeat icon
Widget mpd-repeat {
class 'Icon'
speed tack
update tack
bitmap {
row1 '......|......'
row2 '......|******'
row3 '......|*....*'
row4 '******|*..***'
row5 '******|*...**'
row6 '......|*....*'
row7 '......|*.....'
row8 '......|******'
}
frame (mpd::getRepeatInt())
visible (1)
}
# display mpd random icon
Widget mpd-random {
class 'Icon'
speed tack
update tack
bitmap {
row1 '......|......'
row2 '......|******'
row3 '......|.....*'
row4 '******|*..***'
row5 '******|**..**'
row6 '......|***..*'
row7 '......|*.....'
row8 '......|******'
}
frame (mpd::getRandomInt())
visible (1)
}
# display current song id and number of total song
Widget mpd-playlist-pos {
class 'Text'
expression 'P: '.mpd::getMpdPlaylistGetCurrentId().'/' .mpd::getMpdPlaylistLength()
width 12 align 'L'
update tack
}
# display volume
Widget mpd-vol {
class 'Text'
expression 'V:'.mpd::getVolume()
width 7
align 'R'
update tack }
Widget mpd-bitrate {
class 'Text'
expression mpd::bitRate().'k'
width 15
update tack
align 'L'
}
Widget Load {
class 'Text'
expression loadavg(1)
prefix 'Load'
postfix loadavg(1) > 1.0 ? '!' : ''
width linesize
precision 1
align 'R'
update 1 * second
}
Widget Eth {
class 'Text'
expression (netdev('wlan0', 'Rx_bytes', 1 * second) + netdev('wlan0', 'Tx_bytes', 1 * second)) / 1024
prefix 'wlan0'
postfix ' KB/s'
width linesize
precision 1
align 'R'
update 4 * second
}
Widget EthTraffic {
class 'Text'
expression (netdev('wlan0', 'Rx_bytes', 0)+netdev('wlan0', 'Tx_bytes', 0))/1024/1024/1024
prefix 'Traffic'
postfix ' GB'
width linesize
precision 3
align 'R'
update 10 * second
}
Widget FSSpace {
class 'Text' expression statfs('/home', 'bavail') * statfs('/home', 'bsize') / 1024 / 1024 / 1024
prefix '/home' postfix ' GB'
width linesize
precision 2
align 'R' update 10 * second }
Widget MemoryFree {
class 'Text'
expression (meminfo('MemFree') + meminfo('Cached')) / 1024
prefix 'Memory Free '
postfix ' MB'
width linesize
precision 0
align 'R'
update 5 * second
}
Layout dpf128 {
Row01.Col01 'System'
Row02.Col01 'Time'
Row03.Col01 'Uptime'
Row5.Col01 'mpd-combo'
Row6 {
Col02 'mpd-state'
Col04 'mpd-repeat'
Col06 'mpd-random'
Col08 'smallMP3Bar_part1' }
Row8 {
Col01 'smallMP3Bar_part2'
Col14 'mpd-bitrate' }
Row9 {
Col01 'mpd-playlist-pos'
Col14 'mpd-vol' }
Row11.Col01 'Load'
Row12.Col01 'Eth'
Row13.Col01 'EthTraffic'
Row14.Col01 'FSSpace'
Row15.Col01 'MemoryFree'
}
|
le fichier de conf doit être visible que par root sinon il ne ce lance pas
Code :
- sudo chmod 0600 /etc/lcd4linux.conf
|
et lancer lcd4linux
sources:
http://forum.doozan.com/read.php?9,2435 (surtout vers les dernière page)
http://geekparadise.de/2011/04/dig [...] -dockstar/
http://www.mikrocontroller.net/topic/246772
http://tech.section5.ch/news/
http://openschemes.com/2011/08/29/ [...] mware-sdk/
http://sourceforge.net/projects/pydpf/
to be continued ...
Message édité par ktalog le 01-06-2013 à 17:37:52