Compilar chdkptp en Debian Wheezy

Con notas de actualización para Debian Jessie y ~~Ubuntu 16.04~~

Pre-requisitos para la compilación

Asegurarse que el repositorio de código fuente esté habilitado en la lista de fuentes de Debian en /etc/apt/sources.list. Si no, editar el archivo (como root) y agregar o descomentar esta línea:

deb-src http://ftp.us.debian.org/debian wheezy main

en Ubuntu 16.04 agregar la línea deb-src http://ar.archive.ubuntu.com/ubuntu/ xenial main

Actualizar la lista de paquetes (use sudo en Ubuntu o usuario root en Debian):

apt-get update

Instalar dependencias para usb

apt-get install libusb-1.0-0 libusb-dev liblua5.1-0-dev liblua5.1-0 libusb-1.0-0-dev

Verificar las siguientes dependencias de soporte para lua, readline y cairo

apt-get install lua5.1 liblua5.1-0-dev lua5.2 liblua5.2-dev libreadline-dev libreadline6-dev libcairo2-dev

Y verificar también:

apt-get install subversion git

Instalar IUP (Portable User Interface) y CD (Canvas Draw): Descargar los binarios precompilados de las librerías iup, cd (buscar los links de descarga a la ultima versión) del sitio del Instituto Tecgraf de Desenvolvimento de Software Técnico-Científico da PUC-Rio (Tecgraf/PUC-Rio)

Si bien la siguiente librería, IM (Image Representation, Storage, Capture and Processing), no es necesaria para chdkptp, debe instalarla si desea usar DALclick:

Excepto para las últimas versiones es posible que los archivos tar.gz descargados se descompriman en ./ (es decir, no se crea un subdirectorio). Realice un test previo descomprimiendo en una carpeta temporal, si no se crea una carpeta contenedora deberá crearla manualmente y mover el archivo tar.gz.

Nota: Para averiguar si nuestro sistema es de 32 o 64 bits puede usarse uname -m. Hay paquetes pre-compilados tanto para 32 como para 64 bits:

iup-<ver>_Linux32_64_lib.tar.gz
cd-<ver>_Linux32_64_lib.tar.gz
im-<ver>_Linux32_64_lib.tar.gz

Para instalar, ingresar a cada carpeta y ejecutar como root (o usando sudo) los scripts de instalación (en cada carpeta el archivo LINSTALL incluye más info sobre la instalación)

export USE_LUA52=Yes 
bash install
bash install_dev
bash 

Nota1: el primer comando configura la instalación para Lua 5.2. Por defecto los scripts estan preconfigurados para Lua 5.1 (2015)

Cambios en las versiones mas recientes de iup, im y cd

En versiones más recientes de precompilados de iup, im, y cd (~2015 en adelante) los módulos para Lua estan disponibles por separado, ej, para Lua 5.1:

Precompilado:                   Módulo para Lua 5.1:
cd-5.9_Linux32_lib.tar.gz ----> cd-5.9-Lua51_Linux32_lib.tar.gz
iup-3.18_Linux32_lib.tar.gz --> iup-3.18-Lua51_Linux32_lib.tar.gz
im-3.10_Linux32_lib.tar.gz ---> im-3.10-Lua51_Linux32_lib.tar.gz

Debe ejecutarse install en ambos directorios (opcionamente install_dev para desarrollo) y el script config_lua_module (que crea los accesos directos desde /usr/lib/lua/5.x a los archivos *.so en /usr/lib) sólo debe ejecutarse desde la carpeta del módulo Lua seleccionado y no en el precompilado.

Por ejemplo para IUP:

 #instalar precompilado de IUP
 cd /ruta/a/libs/tecgraf/iup-3.19.1_Linux32_64_lib
 bash install
 bash install_dev

 #instalar modulo para Lua 5.1
 export USE_LUA52=""
 cd ../iup-3.19.1-Lua51_Linux32_64_lib
 bash install
 bash install_dev
 config_lua_module

 #instalar modulo para Lua 5.2
 export USE_LUA52=Yes
 cd ../iup-3.19.1-Lua52_Linux32_64_lib
 bash install
 bash install_dev
 config_lua_module

Para desinstalar (como root):

bash uninstall

Obtener el código fuente de chdkptp

Descargar el repositorio oficial

 svn co http://subversion.assembla.com/svn/chdkptp/trunk chdkptp

Compatibilidad con DALclick

En el caso de instalar chdkptp para usarlo con DALclick, para obtener el código de la versión compatible de chdkptp use:

 cd chdkptp
 svn up -r461

Versiones seguras de cd, iup, im para DALclick (probadas en Debian Wheezy 32 bits)

 iup-3.8_Linux32_lib
 cd-5.6.1_Linux32_lib
 im-3.8.2_Linux32_lib

actualizacion 2016 Versiones seguras para DALclick (probadas en Debian Jessie 64 bits)

 iup-3.19.1_Linux32_64_lib
 cd-5.10_Linux32_64_lib
 im-3.11_Linux32_64_lib

Configurar chdkptp

Crear archivo de configuración a partir del ejemplo

 mv config-sample-linux.mk config.mk

Configurar para compatibilidad con DALclick (r461)

Editar el archivo config.mk con los siguientes parámetros y agregar los links a las librerias:

IUP_SUPPORT=1
CD_SUPPORT=1
CD_USE_PLUS=cairo
PTPIP_SUPPORT=0

LUA_INCLUDE_DIR=/usr/include/lua5.1
LUA_LIB=lua5.1

DEBUG=1

IUP_LIB_DIR=/opt/src/iup-<ver>_Linux32_lib
IUP_INCLUDE_DIR=/opt/src/iup-<ver>_Linux32_lib/include
CD_LIB_DIR=/opt/src/cd-<ver>_Linux32_lib
CD_INCLUDE_DIR=/opt/src/cd-<ver>_Linux32_lib/include

Configurar para versiones más recientes (2016)

ejemplo de config.mk para chdkptp changeset 659, tecgraf precomp. libs: IUP ver 3.15 32/64 y CD ver 5.8.2 32/64

USE_LUA_52=1

IUP_SUPPORT=1
CD_SUPPORT=1
CD_USE_PLUS=cairo
PTPIP_SUPPORT=0

READLINE_SUPPORT=1

LUA_INCLUDE_DIR=/usr/include/lua5.2
LUA_LIB=lua5.2

IUP_LIB_DIR=/opt/src/iup-<ver>_Linux32_64_lib
IUP_INCLUDE_DIR=/opt/src/iup-<ver>_Linux32_64_lib/include
CD_LIB_DIR=/opt/src/cd-<ver>_Linux32_64_lib
CD_INCLUDE_DIR=/opt/src/cd-<ver>_Linux32_64_lib/include

Compilar

Dentro la carpeta chdkptp ejecutar

make

Nota: si se vuelve a compilar no olvidar hacer make clean antes del nuevo make

Verificaciones previas para ejecutar chdkptp

chdkptp no podrá conectarse con el dispositivo si se encuentra montado por el sistema. Es práctico desactivar el servicio de escritorio que monta automáticamente los dispositivos cuando son detectados. En caso contrario habrá que desmontarlo manualmente cada vez que se vuelva a conectar o encender la cámara. Para evitar automount:

 #desactivar automount antes de ejecutar chdkptp
 gsettings set org.gnome.desktop.media-handling automount "false"
 gsettings set org.gnome.desktop.media-handling automount-open "false"

 #activar automount luego de cerrar chdkptp
 gsettings set org.gnome.desktop.media-handling automount "true"
 gsettings set org.gnome.desktop.media-handling automount-open "true"

Actualización 2015 Debian Jessie Si lo anterior no funciona en Gnome 3 probar:

 #desactivar 
 gsettings set org.cinnamon.desktop.media-handling automount "false"
 gsettings set org.cinnamon.desktop.media-handling automount-open "false"

 #activar
 gsettings set org.cinnamon.desktop.media-handling automount "true"
 gsettings set org.cinnamon.desktop.media-handling automount-open "true"

Para escritorio "Mate" en Debian Jessie

 #desactivar automount antes de ejecutar chdkptp
 gsettings set org.mate.desktop.media-handling automount "false"
 gsettings set org.mate.desktop.media-handling automount-open "false"

 #activar automount luego de cerrar chdkptp
 gsettings set org.mate.desktop.media-handling automount "true"
 gsettings set org.mate.desktop.media-handling automount-open "true"

Nota: se puede explorar con dconf-editor (se instala con apt-get install dconf-editor) la ruta correcta desde la GUI.

Desactivar en forma permanente. ATENCION: tenga en cuenta que ya no se montarán automaticamente las cámaras al conectarlas a la PC (iniciando gphoto2 por ejemplo) si remueve estos paquetes

 sudo apt-get remove --purge gvfs-backends

verificar si el paquete está instalado o no en el sistema:

 dpkg -s gvfs-backends|grep Status

Ejecutar chdkptp

ir al directorio chdkptp

 cd /ruta/a/chdkptp

antes de ejecutar se deben definir algunas variables de entorno

 export LUA_PATH="./lua/?.lua"

si IUP está compilado pero no instalado en el sistema se debe especificar la ruta:

 export LD_LIBRARY_PATH=/path/to/iup:/path/to/cd

ejecutar chdkptp en interfase gráfica

 ./chdkptp

Documentación de chdkptp

Referencias relacionadas

Proyectos derivados/relacionados

  • pypi.python.org -> pyptpchdk A Python module that implements the Picture Transfer Protocol, including support for CHDK extensions.
  • Proyecto aparentemente derivado de chdkptp: photowall
  • github.com/markvdb -> [Software triggering on Debian](GNU Linux https://github.com/markvdb/diybookscanner/wiki/Software-triggering-on-Debian-GNU-Linux)
  • github.com/markvdb -> test_keypedal.sh

no CHDK

  • PSRemote http://www.breezesys.com/PSRemote/features.htm
  • capture http://capture.sourceforge.net/

Apuntes varios

chdkptp as library

  • https://chdk.setepontos.com/index.php?topic=6231.660
  • https://github.com/tudelft/chdkptp

patch

  • https://gist.github.com/adongy/55b232cfb759df4920bd
  • https://github.com/jbaiter/chdkptp.py/blob/master/chdkptp_module.diff

test lua include

  • https://gist.github.com/adongy/e203e9025379b1b3c90d
  • https://gist.github.com/adongy/5985b6b4611edf5858bc
  • http://codegist.net/code/how-to-run-chdkptp/

sobre fpic error

  • https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options
  • https://stackoverflow.com/questions/19364969/compilation-fails-with-relocation-r-x86-64-32-against-rodata-str1-8-can-not

https://askubuntu.com/questions/673259/restricting-mtp-devices-from-being-mounted-by-a-user-group (!)

udev monitor

 udevadm monitor -u

Reload the rules

 udevadm control -R

Blocking MTP and PTP

 cd /usr/lib/gvfs

Remove the execute permission for

 gvfsd-mtp

 gvfs-mtp-volume-monitor(for safer side)

 gvfsd-gphoto2

 gvfs-gphoto2-volume-monitor(for safer side)

Dispositivos manejados por gvfs

 gvfs-mount -li

otras rutas para intentar bloquear el servicio (Exec=/bin/false)

 /usr/share/dbus-1/services/org.gtk.vfs.GPhoto2VolumeMonitor.service

 --> $HOME/.local/share/dbus-1/system-services/...

mas info

  • https://wiki.gnome.org/Projects/gvfs/doc
  • https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=544148

https://github.com/markvdb/diybookscanner/wiki/Software-triggering-on-Debian-GNU-Linux#avoiding-competition-for-our-cameras


gvfs-gphoto2-volume-monitor

 # ps -Al | grep gvfs
 0 S  1000  2547     1  0  80   0 - 75972 -      ?        00:00:00 gvfs-udisks2-vo
 0 S  1000  2570     1  0  80   0 - 109493 -     ?        00:00:00 gvfsd-trash
 0 S  1000  2582     1he device and you have read/write ac  0  80   0 - 51681 -      ?        00:00:00 gvfs-mtp-volume
 0 S  1000  2586     1  0  80   0 - 50692 -      ?        00:00:00 gvfs-goa-volume
 0 S  1000  2590     1  0  80   0 - 57404 -      ?        00:00:00 gvfs-gphoto2-vo
 0 S  1000  2595     1  0  80   0 - 75076 -      ?        00:00:00 gvfs-afc-volume
 0 S  1000  2673     1  0  80   0 - 32728 -      ?        00:00:00 gvfsd-metadata
 0 S  1000  3196     1  0  80   0 - 52546 -      ?        00:00:00 gvfsd

 # killall  gvfs-gphoto2-volume-monitor

https://chdk.setepontos.com/index.php?topic=6254.500

 ACTION!="add", GOTO="libgphoto2_rules_end"
 SUBSYSTEM!="usb", GOTO="libgphoto2_usb_end"
 ENV{ID_USB_INTERFACES}=="", IMPORT{builtin}="usb_id"
 ENV{ID_USB_INTERFACES}=="*:060101:*", ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="PTP", MODE="0664", GROUP="plugdev"

 LABEL="libgphoto2_rules_end"

is now in /etc/udev/rules.d/40-libgphoto2-6.rules

 ACTION!="add", GOTO="libgphoto2_rules_end"
 SUBSYSTEM!="usb", GOTO="libgphoto2_usb_end"
 ENV{ID_USB_INTERFACES}=="", IMPORT{builtin}="usb_id"
 ENV{ID_USB_INTERFACES}=="*:060101:*", ATTR{idVendor}=="04a9", MODE="0664", GROUP="plugdev", GOTO="libgphoto2_rules_end"
 ENV{ID_USB_INTERFACES}=="*:060101:*", ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="PTP", MODE="0664", GROUP="plugdev"

 LABEL="libgphoto2_rules_end"

mas en * ! https://forum.diybookscanner.org/viewtopic.php?t=3146 * ! http://chdk.setepontos.com/index.php?topic=10664.msg115401#msg115401 * ! http://chdk.setepontos.com/index.php?topic=6231.msg100671#msg100671 * http://chdk.wikia.com/wiki/Getting_CHDKPTP_on_BeagleBone_Black_to_work


http://articulo.mercadolibre.com.ar/MLA-481116439-camara-digital-canon-powershot-a2200-hd-muy-poco-uso-_JM

http://chdk.setepontos.com/index.php?topic=6231.msg83548#msg83548

chdkptp -n -e"!mc=require('multicam')" -e"!mc:connect()" -e"!mc:start()" -e"!return mc:cmdwait('rec')" -e"!return mc:cmdwait('preshoot')" -e"!return mc:cmdwait('shoot')" -e"!return mc:cmdwait('play')" -e"!mc:cmd('exit')"

Rather than passing loads of -e commands, you would write your own lua file, and then do something like chdkptp -e"!dofile('myfile.lua')"


http://chdk.setepontos.com/index.php?topic=6231.msg88342#msg88342 una lista de dependencias para compilar


http://chdk.setepontos.com/index.php?topic=6231.msg90966#msg90966 multiple shot (!)


http://chdk.setepontos.com/index.php?topic=6231.msg94386#msg94386 cmo ejecutar lua script tip: exec sys.sleep(1000) para generar una pausa en la ejecución


http://chdk.setepontos.com/index.php?topic=6231.msg95265#msg95265 FYI, you may find it more convenient to put the commands into a file rather than using so many -e commands. e.g you could put the following in myfile.chdkptp

delete DCIM
exec sys.sleep(2000)
luar switch_mode_usb(1); set_zoom(0); set_prop(6, 3); shoot(); switch_mode_usb(0)
exec sys.sleep(2000)  
mdl DCIM /tmp/chdk-download
exec sys.sleep(2000) 
delete DCIM

sudo sh /home/pi/chdkptp/chdkptp-sample.sh -c -rmyfile.chdkptp

http://chdk.setepontos.com/index.php?topic=6231.msg98677#msg98677 You can get an idea of the time required for each step using the

set cli_time=true

http://chdk.setepontos.com/index.php?topic=6231.msg99844#msg99844 =t0=get_tick_count();press('shoot_half');repeat sleep(10) until get_shooting();t1=get_tick_count();click('shoot_full');repeat sleep(10) until not get_sho oting(); t2=get_tick_count();return t1-t0,t2-t1


Sobre el problema de los permisos en usb http://chdk.setepontos.com/index.php?topic=6231.msg89252#msg89252


Re: CHDK PTP multiple instances http://chdk.setepontos.com/index.php?topic=8769.msg91611#msg91611

___> !devs=chdk.list_usb_devices()
___> !con1=chdku.connection(devs[1])
___> !return con1:connect();
=true
___> !con2=chdku.connection(devs[2])
___> !return con2:connect()
=true

http://chdk.setepontos.com/index.php?topic=8454.0 Controlling two cameras at once creates some additional complications, but it is possible. You have two options: 1) Run two instances of the client program. This should work, but you have to be careful because some commands might reset the connection to the other camera. This could be done with either ptpcam or chdkptp client. 2) Control both cameras using a single instance of the chdkptp client. chdkptp supports connecting to multiple cameras in it's Lua API, but the normal CLI and GUI only support one camera at a time. This means you'd need to use Lua code to control the cameras.


http://chdk.wikia.com/wiki/Chdkptp_in_headless_linux_Dockstar_-remotecontrol

/usr/src/chdkptp/lua# /usr/src/chdkptp/chdkptp -i -c
<con> =switch_mode_usb(1)
<con> lua set_zoom(3)
<con> lua shoot()
<con> =switch_mode_usb(0)
<con> download A/DCIM/133CANON/IMG_7440.JPG /var/www/7440.jpg
<con>q

list remote http://chdk.setepontos.com/index.php?topic=8600.10

connected: Canon DIGITAL IXUS 30, max packet size 64

con> =return os.listdir('A/')
5:return:table:{[1]="CHDK",[2]="DISKBOOT.BIN",[3]="DCIM",[4]="badpixel.bin",[5]="ver.req",[6]="paramdmp.log",[7]="MISC",[8]="chdk_ixus30_111006am.tar.gz",}
con 5>

averiguar el nombre de la ultima foto

  • CDKPTP with Auto-file-transfer-to-PC for the S90 - Developmental Version http://chdk.setepontos.com/index.php?topic=9067.0
  • Downloading a picture that was just taken with chdkptp http://chdk.setepontos.com/index.php?topic=6872.0
  • Need advice on how to use CHDKPTP to retrieve file name of last picture taken http://chdk.setepontos.com/index.php?topic=10458.0
  • http://chdk.wikia.com/wiki/PTP_Extension/ptpcam_Examples
  • get_exp_count http://chdk.wikia.com/wiki/Script_commands
  • https://github.com/markvdb/diybookscanner/blob/master/misc/test_keypedal.sh

  • CHDK as a high-end webcam http://chdk.setepontos.com/index.php?topic=332.0

    download A/DCIM/133CANON/IMG_7440.JPG /var/www/7440.jpg q