14#define PTP_TIMEOUT 1000
17#define CAMLIB_WAIT_MS 1000
23 #define CAMLIB_SLEEP(ms) usleep(ms * 1000)
27void ptp_verbose_log(
char *fmt, ...);
28__attribute__ ((noreturn))
void ptp_panic(
char *fmt, ...);
31#define CAMLIB_DEFAULT_SIZE 1000000
55 PTP_LV_EOS_ML_BMP = 4,
66 PTP_DEV_PANASONIC = 6,
75 IMG_FORMAT_RAW_JPEG = 4,
81 PTP_IP_USB = (1 << 1),
122 struct PtpDeviceInfo *
di;
149 struct ObjectCache *oc;
157 const char *str_value;
268int ptp_write_unicode_string(
char *dat,
char *
string);
269int ptp_read_unicode_string(
char *buffer,
char *dat,
int max);
270int ptp_read_utf8_string(
void *dat,
char *
string,
int max);
271int ptp_read_string(uint8_t *dat,
char *
string,
int max);
272int ptp_write_string(uint8_t *dat,
char *
string);
273int ptp_write_utf8_string(
void *dat,
char *
string);
274int ptp_read_uint16_array(uint8_t *dat, uint16_t *buf,
int max,
int *length);
275int ptp_read_uint16_array_s(uint8_t *bs, uint8_t *be, uint16_t *buf,
int max,
int *length);
276inline static int ptp_write_u8 (
void *buf, uint8_t out) { ((uint8_t *)buf)[0] = out;
return 1; }
277inline static int ptp_write_u16(
void *buf, uint16_t out) { ((uint16_t *)buf)[0] = out;
return 2; }
278inline static int ptp_write_u32(
void *buf, uint32_t out) { ((uint32_t *)buf)[0] = out;
return 4; }
279inline static int ptp_read_u32 (
void *buf, uint32_t *out) { *out = ((uint32_t *)buf)[0];
return 4; }
280inline static int ptp_read_u16 (
void *buf, uint16_t *out) { *out = ((uint16_t *)buf)[0];
return 2; }
281inline static int ptp_read_u8 (
void *buf, uint8_t *out) { *out = ((uint8_t *)buf)[0];
return 1; }
290int ptpip_data_start_packet(
struct PtpRuntime *r,
int data_length);
291int ptpip_data_end_packet(
struct PtpRuntime *r,
void *
data,
int data_length);
294void ptp_update_transaction(
struct PtpRuntime *r,
int t);
297void ptp_set_prop_avail_info(
struct PtpRuntime *r,
int code,
int memb_size,
int cnt,
void *
data);
305#define CAMLIB_INCLUDE_IMPL
307#include "cl_backend.h"
313#ifndef CAMLIB_NO_COMPAT
314 #define ptp_get_last_transaction(...) ptp_get_last_transaction_id(__VA_ARGS__)
315 #define ptp_generic_new(...) ptp_new(__VA_ARGS__)
316 #define ptp_generic_close(...) ptp_close(__VA_ARGS__)
317 #define ptp_generic_reset(...) ptp_reset(__VA_ARGS__)
318 #define ptp_generic_init(...) ptp_init(__VA_ARGS__)
319 #define ptp_generic_send(...) ptp_send(__VA_ARGS__)
320 #define ptp_generic_send_data(...) ptp_send_data(__VA_ARGS__)
323typedef void ptp_object_found_callback(
struct PtpRuntime *r,
struct PtpObjectInfo *oi,
void *arg);
326struct ObjectCache *ptp_create_object_service(
int *handles,
int length, ptp_object_found_callback *callback,
void *arg);
327struct PtpObjectInfo *ptp_object_service_get(
struct PtpRuntime *r,
struct ObjectCache *oc,
int handle);
328struct PtpObjectInfo *ptp_object_service_get_index(
struct PtpRuntime *r,
struct ObjectCache *oc,
int req_i);
329int ptp_object_service_length(
struct PtpRuntime *r,
struct ObjectCache *oc);
330int ptp_object_service_step(
struct PtpRuntime *r,
struct ObjectCache *oc);
331void ptp_object_service_add_priority(
struct PtpRuntime *r,
struct ObjectCache *oc,
int handle);
int ptp_dump(struct PtpRuntime *r)
const char * ptp_perror(int rc)
Evaluates PtpGeneralError into string message.
PtpConnType
Tells lib what backend and packet style to use.
Definition camlib.h:79
PtpGeneralError
Camlib library errors, not PTP return codes.
Definition camlib.h:34
PtpVendors
Unique camera types - each type should have similar opcodes and behavior.
Definition camlib.h:59
Generic Struct for arrays.
Definition camlib.h:169
Generic PTP command structure - accepted by operation API.
Definition camlib.h:161
Generic event / property change.
Definition camlib.h:153
Linked list to handle currently possible values for a property.
Definition camlib.h:86
Holds all camlib instance info.
Definition camlib.h:97
struct PtpRuntime * ptp_new(int options)
Allocate new PtpRuntime based on bitfield options - see PtpConnType.
void ptp_reset(struct PtpRuntime *r)
Reset all session-specific fields of PtpRuntime - both libusb and libwpd backends call this before es...
uint8_t io_kill_switch
Set to 1 to kill all IO operations. By default, this is 1. When a valid connection is achieved by lib...
Definition camlib.h:101
int ptp_send_data(struct PtpRuntime *r, struct PtpCommand *cmd, void *data, int length)
Send a command request to the device with a data phase (thread safe)
int ptp_get_param_length(struct PtpRuntime *r)
Get number of parameters in packet in data buffer.
uint8_t response_wait_default
Default value for wait_for_response.
Definition camlib.h:142
void ptp_close(struct PtpRuntime *r)
Frees PtpRuntime data buffer - doesn't free the actual structure, or device info (yet)
int ptp_get_event(struct PtpRuntime *r, struct PtpEventContainer *ec)
Try and get an event from the camera over int endpoint (USB-only)
int ptp_get_return_code(struct PtpRuntime *r)
Returns the return code (RC) currently in the data buffer.
void * comm_backend
For session comm/io structures (holds backend instance pointers)
Definition camlib.h:130
int ptp_check_prop(struct PtpRuntime *r, int code)
Check if a property code is supported by looking through supported props in r->di.
int ptp_send(struct PtpRuntime *r, struct PtpCommand *cmd)
Send a command request to the device with no data phase.
void ptp_init(struct PtpRuntime *r)
Init PtpRuntime locally - uses default recommended settings (USB)
uint8_t * data
Global buffer for data reading and writing.
Definition camlib.h:113
int ptp_get_payload_length(struct PtpRuntime *r)
Get length of payload returned by ptp_get_payload.
uint8_t * ptp_get_payload(struct PtpRuntime *r)
Get ptr of packet payload in data buffer, after packet header.
struct PtpPropAvail * avail
For devices that implement it, this will hold a linked list of properties and an array of their suppo...
Definition camlib.h:147
int ptp_get_last_transaction_id(struct PtpRuntime *r)
Get transaction ID of packet in the data buffer.
int transaction
Definition camlib.h:108
void ptp_mutex_keep_locked(struct PtpRuntime *r)
Keep the mutex locked one more time for the current thread.
void ptp_mutex_lock(struct PtpRuntime *r)
Lock the IO mutex - only should be used by backend.
int max_packet_size
Definition camlib.h:118
pthread_mutex_t * mutex
Optional (see CAMLIB_DONT_USE_MUTEX)
Definition camlib.h:135
int data_phase_length
For Windows compatibility, this is set to indicate lenth for a data packet that will be sent after a ...
Definition camlib.h:127
int ptp_buffer_resize(struct PtpRuntime *r, size_t size)
Mostly for internal use - realloc the data buffer.
uint32_t ptp_get_param(struct PtpRuntime *r, int i)
Get parameter at index i.
struct PtpDeviceInfo * di
Info about current connection, used to detect camera type, supported opodes, etc.
Definition camlib.h:122
uint8_t wait_for_response
Optionally wait up to 256 seconds for a response. Some PTP operations require this,...
Definition camlib.h:139
int ptp_check_opcode(struct PtpRuntime *r, int opcode)
Check if an opcode is supported by looking through supported props in r->di.
uint8_t connection_type
One of enum PtpConnType.
Definition camlib.h:105
void ptp_mutex_unlock(struct PtpRuntime *r)
Unlock the IO mutex (unless it was kept locked)
int ptp_device_type(struct PtpRuntime *r)
Gets type of device from r->di.