diff options
author | Bart H. Plague <barthplague@gmail.com> | 2022-01-17 21:25:01 +0100 |
---|---|---|
committer | Marcus Meissner <meissner@suse.de> | 2022-01-18 10:36:29 +0100 |
commit | fac2ae7aa20fa567eb3d13ee3e2fb4907e4dcb2a (patch) | |
tree | ad41c1f72511bec20f57ac11286eaafb243f6b13 /camlibs/ptp2/ptp.c | |
parent | 4602672a02a4daeeeeb6ef80a1ee6db7c4ebd14c (diff) | |
download | libgphoto2-fac2ae7aa20fa567eb3d13ee3e2fb4907e4dcb2a.tar.gz |
Added PTP support for Panasonic BGH1
Diffstat (limited to 'camlibs/ptp2/ptp.c')
-rw-r--r-- | camlibs/ptp2/ptp.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/camlibs/ptp2/ptp.c b/camlibs/ptp2/ptp.c index 85f8470fc..09b55c1b0 100644 --- a/camlibs/ptp2/ptp.c +++ b/camlibs/ptp2/ptp.c @@ -1605,6 +1605,55 @@ ptp_panasonic_manualfocusdrive (PTPParams* params, uint16_t mode) } uint16_t +ptp_panasonic_recordmode (PTPParams* params, uint16_t mode) +{ + PTPContainer ptp; + unsigned char data[10]; + unsigned char *xdata = data; + uint32_t propcode = 0x06000011; + uint32_t type = 2; + + htod32a(data, propcode); /* memcpy(data, &propcode, 4); */ + htod32a(&data[4], type); /* memcpy(&data[4], &type, 4); */ + htod16a(&data[8], mode); /* memcpy(&data[8], &mode, 2); */ + + PTP_CNT_INIT(ptp, PTP_OC_PANASONIC_9409, propcode); + return ptp_transaction(params, &ptp, PTP_DP_SENDDATA, sizeof(data), &xdata, NULL); +} + +uint16_t +ptp_panasonic_startrecording (PTPParams* params) +{ + PTPContainer ptp; + unsigned char data[8]; + unsigned char *xdata = data; + uint32_t propcode = 0x07000011; + uint32_t type = 0; + + htod32a(data, propcode); /* memcpy(data, &propcode, 4); */ + htod32a(&data[4], type); /* memcpy(&data[4], &type, 4); */ + + PTP_CNT_INIT(ptp, PTP_OC_PANASONIC_MovieRecControl, propcode); + return ptp_transaction(params, &ptp, PTP_DP_SENDDATA, sizeof(data), &xdata, NULL); +} + +uint16_t +ptp_panasonic_stoprecording (PTPParams* params) +{ + PTPContainer ptp; + unsigned char data[8]; + unsigned char *xdata = data; + uint32_t propcode = 0x07000012; + uint32_t type = 0; + + htod32a(data, propcode); /* memcpy(data, &propcode, 4); */ + htod32a(&data[4], type); /* memcpy(&data[4], &type, 4); */ + + PTP_CNT_INIT(ptp, PTP_OC_PANASONIC_MovieRecControl, propcode); + return ptp_transaction(params, &ptp, PTP_DP_SENDDATA, sizeof(data), &xdata, NULL); +} + +uint16_t ptp_panasonic_getcapturetarget (PTPParams* params, uint16_t *target) { PTPContainer ptp; @@ -1706,6 +1755,34 @@ ptp_panasonic_getdevicepropertydesc (PTPParams *params, uint32_t propcode, uint1 return ret; } + uint16_t +ptp_panasonic_getrecordingstatus (PTPParams *params, uint32_t propcode, uint16_t *valuesize, uint32_t *currentValue) +{ + PTPContainer ptp; + unsigned char *data = NULL; + unsigned int size = 0; + uint16_t ret = PTP_RC_OK; + + PTP_CNT_INIT(ptp, PTP_OC_PANASONIC_PollEvents, propcode); + CHECK_PTP_RC(ptp_transaction(params, &ptp, PTP_DP_GETDATA, 0, &data, &size)); + if (!data) return PTP_RC_GeneralError; + + if(size < 8) return PTP_RC_GeneralError; + *valuesize = dtoh32a( (data + 4) ); + + if(size < 8u + (*valuesize)) return PTP_RC_GeneralError; + if(*valuesize == 4) { + *currentValue = dtoh32a( (data + 8) ); + } else if(*valuesize == 2) { + *currentValue = (uint32_t) dtoh16a( (data + 8) ); + } else { + return PTP_RC_GeneralError; + } + //printf("ptp_panasonic_getdeviceproperty: size: %lu, valuesize: %d, currentValue: %lu\n", size, *valuesize, *currentValue); + + free (data); + return ret; +} uint16_t ptp_panasonic_getdeviceproperty (PTPParams *params, uint32_t propcode, uint16_t *valuesize, uint32_t *currentValue) |