Revision 9e0ef580de526e6a31df5ded03b4e917e14db727 authored by a1ex on 06 June 2011, 20:52:56 UTC, committed by a1ex on 06 June 2011, 20:52:56 UTC
1 parent 46f9560
ptp-chdk.h
#ifndef __PTP_H
#define __PTP_H
// N.B.: not checking to see if CAM_CHDK_PTP is set as ptp.h is currently
// only included by ptp.c (which already checks this before including ptp.h)
#define PTP_CHDK_VERSION_MAJOR 0 // increase only with backwards incompatible changes (and reset minor)
#define PTP_CHDK_VERSION_MINOR 1 // increase with extensions of functionality
#define PTP_OC_CHDK 0x9999
#define PTP_RC_OK 0x2001
#define PTP_RC_GeneralError 0x2002
#define PTP_RC_ParameterNotSupported 0x2006
// N.B.: unused parameters should be set to 0
enum {
PTP_CHDK_Version = 0, // return param1 is major version number
// return param2 is minor version number
PTP_CHDK_GetMemory, // param2 is base address (not NULL; circumvent by taking 0xFFFFFFFF and size+1)
// param3 is size (in bytes)
// return data is memory block
PTP_CHDK_SetMemory, // param2 is address
// param3 is size (in bytes)
// data is new memory block
PTP_CHDK_CallFunction, // data is array of function pointer and (long) arguments (max: 10 args)
// return param1 is return value
PTP_CHDK_TempData, // data is data to be stored for later
// param2 is for the TD flags below
PTP_CHDK_UploadFile, // data is 4-byte length of filename, followed by filename and contents
PTP_CHDK_DownloadFile, // preceded by PTP_CHDK_TempData with filename
// return data are file contents
PTP_CHDK_ExecuteScript, // data is script to be executed
// param2 is language of script
// param3 is for the ES flags below
} ptp_chdk_command;
// data types as used by TempData and ExecuteScript
enum {
PTP_CHDK_TYPE_NOTHING = 0,
PTP_CHDK_TYPE_NIL,
PTP_CHDK_TYPE_BOOLEAN,
PTP_CHDK_TYPE_INTEGER,
PTP_CHDK_TYPE_STRING
} ptp_chdk_type;
// TempData flags
#define PTP_CHDK_TD_DOWNLOAD 0x1 // download data instead of upload
#define PTP_CHDK_TD_CLEAR 0x2 // clear the stored data; with DOWNLOAD this
// means first download, then clear and
// without DOWNLOAD this means no uploading,
// just clear
// ExecuteScript flags
#define PTP_CHDK_ES_WAIT 0x1 // do not return after script initialisation
// but wait until execution has finished
// (should only be used with short execution
// times)
#define PTP_CHDK_ES_RESULT 0x2 // only in combination with WAIT; return
// param1 will be the ptp_chdk_type of the
// code result and param2 the value (booleans
// and integers) or length (strings)
// Script Languages
#define PTP_CHDK_SL_LUA 0
#define PTP_CHDK_SL_UBASIC 1
#endif // __PTP_H
#define BUF_SIZE 128
static int recv_ptp_data(struct ptp_context *data, char *buf, int size)
// repeated calls per transaction are ok
{
while ( size >= BUF_SIZE )
{
data->recv_data(data->handle,buf,BUF_SIZE,0,0);
// XXX check for success??
size -= BUF_SIZE;
buf += BUF_SIZE;
}
if ( size != 0 )
{
data->recv_data(data->handle,buf,size,0,0);
// XXX check for success??
}
return 1;
}
static int send_ptp_data(struct ptp_context *data, const char *buf, int size)
// repeated calls per transaction are *not* ok
{
int tmpsize;
tmpsize = size;
while ( size >= BUF_SIZE )
{
if ( data->send_data(data->handle,buf,BUF_SIZE,tmpsize,0,0,0) )
{
return 0;
}
tmpsize = 0;
size -= BUF_SIZE;
buf += BUF_SIZE;
}
if ( size != 0 )
{
if ( data->send_data(data->handle,buf,size,tmpsize,0,0,0) )
{
return 0;
}
}
return 1;
}
Computing file changes ...