summaryrefslogtreecommitdiff
path: root/camlibs/ptp2/ptp.c
diff options
context:
space:
mode:
authorBart H. Plague <barthplague@gmail.com>2022-01-17 21:25:01 +0100
committerMarcus Meissner <meissner@suse.de>2022-01-18 10:36:29 +0100
commitfac2ae7aa20fa567eb3d13ee3e2fb4907e4dcb2a (patch)
treead41c1f72511bec20f57ac11286eaafb243f6b13 /camlibs/ptp2/ptp.c
parent4602672a02a4daeeeeb6ef80a1ee6db7c4ebd14c (diff)
downloadlibgphoto2-fac2ae7aa20fa567eb3d13ee3e2fb4907e4dcb2a.tar.gz
Added PTP support for Panasonic BGH1
Diffstat (limited to 'camlibs/ptp2/ptp.c')
-rw-r--r--camlibs/ptp2/ptp.c77
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)