~ubuntu-branches/ubuntu/precise/libmtp/precise-updates

« back to all changes in this revision

Viewing changes to src/ptp.c

  • Committer: Package Import Robot
  • Author(s): Alessio Treglia
  • Date: 2012-04-03 08:45:30 UTC
  • mfrom: (0.2.6)
  • mto: This revision was merged to the branch mainline in revision 44.
  • Revision ID: package-import@ubuntu.com-20120403084530-4pzddlb80jviafad
* New upstream bugfix release:
  - Soname libmtp.so.9.0.3 - binary compatible.
  - Probably nailed the bugs in the Samsung Galaxy Tab S2 family
    of devices. Ignacio Martinez helped us fixing this!
  - Build fixes by Alessio Treglia and others.
  - A horde of new devices in the database.
* Remove patches applied upstream:
  - 0001-broken_object_info.patch
  - 0002-devicedb_updates.patch
  - 2001-pkgconfig_requires.patch
* Refresh 1001-kfreebsd_hurd_ftbfs.patch.
* Refresh symbols file.
* Update debian/copyright.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* ptp.c
2
2
 *
3
3
 * Copyright (C) 2001-2004 Mariusz Woloszyn <emsi@ipartners.pl>
4
 
 * Copyright (C) 2003-2009 Marcus Meissner <marcus@jet.franken.de>
 
4
 * Copyright (C) 2003-2012 Marcus Meissner <marcus@jet.franken.de>
5
5
 * Copyright (C) 2006-2008 Linus Walleij <triad@df.lth.se>
6
6
 * Copyright (C) 2007 Tero Saarni <tero.saarni@gmail.com>
7
7
 * Copyright (C) 2009 Axel Waggershauser <awagger@web.de>
699
699
{
700
700
        uint16_t ret;
701
701
        PTPContainer ptp;
702
 
        int len;
703
702
 
704
703
        PTP_CNT_INIT(ptp);
705
704
        ptp.Code=PTP_OC_GetNumObjects;
707
706
        ptp.Param2=objectformatcode;
708
707
        ptp.Param3=associationOH;
709
708
        ptp.Nparam=3;
710
 
        len=0;
711
709
        ret=ptp_transaction(params, &ptp, PTP_DP_NODATA, 0, NULL, NULL);
712
710
        if (ret == PTP_RC_OK) {
713
711
                if (ptp.Nparam >= 1)
1829
1827
        return ret;
1830
1828
}
1831
1829
 
 
1830
uint16_t
 
1831
ptp_canon_eos_getobjectinfoex (
 
1832
        PTPParams* params, uint32_t storageid, uint32_t oid, uint32_t unk,
 
1833
        PTPCANONFolderEntry **entries, unsigned int *nrofentries
 
1834
) {
 
1835
        PTPContainer    ptp;
 
1836
        unsigned int    i, size = 0;
 
1837
        unsigned char   *data, *xdata;
 
1838
        uint16_t        ret;
 
1839
 
 
1840
        data = NULL;
 
1841
        PTP_CNT_INIT(ptp);
 
1842
        ptp.Code        = PTP_OC_CANON_EOS_GetObjectInfoEx;
 
1843
        ptp.Nparam      = 3;
 
1844
        ptp.Param1      = storageid;
 
1845
        ptp.Param2      = oid;
 
1846
        ptp.Param3      = unk;
 
1847
        ret = ptp_transaction(params, &ptp, PTP_DP_GETDATA, 0, &data, &size);
 
1848
        if (ret != PTP_RC_OK)
 
1849
                return ret;
 
1850
 
 
1851
        *nrofentries = dtoh32a(data);
 
1852
        *entries = malloc(*nrofentries * sizeof(PTPCANONFolderEntry));
 
1853
        if (!*entries)
 
1854
                return PTP_RC_GeneralError;
 
1855
 
 
1856
        xdata = data+sizeof(uint32_t);
 
1857
        for (i=0;i<*nrofentries;i++) {
 
1858
                ptp_unpack_Canon_EOS_FE (params, &xdata[4], &((*entries)[i]));
 
1859
                xdata += dtoh32a(xdata);
 
1860
        }
 
1861
        return PTP_RC_OK;
 
1862
}
 
1863
 
1832
1864
/**
1833
1865
 * ptp_canon_eos_getpartialobject:
1834
1866
 * 
2832
2864
        return ret;
2833
2865
}
2834
2866
 
 
2867
uint16_t
 
2868
ptp_mtpz_sendwmdrmpdapprequest (PTPParams* params, unsigned char *appcertmsg, uint32_t size)
 
2869
{
 
2870
        PTPContainer ptp;
 
2871
 
 
2872
        PTP_CNT_INIT(ptp);
 
2873
        ptp.Code=PTP_OC_MTP_WMDRMPD_SendWMDRMPDAppRequest;
 
2874
        return ptp_transaction (params, &ptp, PTP_DP_SENDDATA, size, &appcertmsg, NULL);
 
2875
}
 
2876
 
 
2877
uint16_t
 
2878
ptp_mtpz_getwmdrmpdappresponse (PTPParams* params, unsigned char **response, uint32_t *size)
 
2879
{
 
2880
        PTPContainer ptp;
 
2881
 
 
2882
        PTP_CNT_INIT(ptp);
 
2883
        ptp.Code = PTP_OC_MTP_WMDRMPD_GetWMDRMPDAppResponse;
 
2884
        *size = 0;
 
2885
        *response = NULL;
 
2886
        return ptp_transaction (params, &ptp, PTP_DP_GETDATA, 0, response, size);
 
2887
}
 
2888
 
2835
2889
/****** CHDK interface ******/
2836
2890
 
2837
2891
uint16_t
5413
5467
                        for (i=0;i<ob->nrofmtpprops;i++,prop++) {
5414
5468
                                switch (prop->property) {
5415
5469
                                case PTP_OPC_StorageID:
5416
 
                                  ob->oi.StorageID = prop->propval.u32;
5417
 
                                  break;
 
5470
                                        ob->oi.StorageID = prop->propval.u32;
 
5471
                                        break;
5418
5472
                                case PTP_OPC_ObjectFormat:
5419
 
                                  ob->oi.ObjectFormat = prop->propval.u16;
5420
 
                                  break;
 
5473
                                        ob->oi.ObjectFormat = prop->propval.u16;
 
5474
                                        break;
5421
5475
                                case PTP_OPC_ProtectionStatus:
5422
 
                                  ob->oi.ProtectionStatus = prop->propval.u16;
5423
 
                                  break;
 
5476
                                        ob->oi.ProtectionStatus = prop->propval.u16;
 
5477
                                        break;
5424
5478
                                case PTP_OPC_ObjectSize:
5425
 
                                  if (prop->datatype == PTP_DTC_UINT64) {
5426
 
                                        if (prop->propval.u64 > 0xFFFFFFFFU)
5427
 
                                                ob->oi.ObjectCompressedSize = 0xFFFFFFFFU;
5428
 
                                        else
5429
 
                                                ob->oi.ObjectCompressedSize = (uint32_t)prop->propval.u64;
5430
 
                                  } else if (prop->datatype == PTP_DTC_UINT32) {
5431
 
                                        ob->oi.ObjectCompressedSize = prop->propval.u32;
5432
 
                                  }
5433
 
                                  break;
 
5479
                                        if (prop->datatype == PTP_DTC_UINT64) {
 
5480
                                                if (prop->propval.u64 > 0xFFFFFFFFU)
 
5481
                                                        ob->oi.ObjectCompressedSize = 0xFFFFFFFFU;
 
5482
                                                else
 
5483
                                                        ob->oi.ObjectCompressedSize = (uint32_t)prop->propval.u64;
 
5484
                                        } else if (prop->datatype == PTP_DTC_UINT32) {
 
5485
                                                ob->oi.ObjectCompressedSize = prop->propval.u32;
 
5486
                                        }
 
5487
                                        break;
5434
5488
                                case PTP_OPC_AssociationType:
5435
 
                                  ob->oi.AssociationType = prop->propval.u16;
5436
 
                                  break;
 
5489
                                        ob->oi.AssociationType = prop->propval.u16;
 
5490
                                        break;
5437
5491
                                case PTP_OPC_AssociationDesc:
5438
 
                                  ob->oi.AssociationDesc = prop->propval.u32;
5439
 
                                  break;
 
5492
                                        ob->oi.AssociationDesc = prop->propval.u32;
 
5493
                                        break;
5440
5494
                                case PTP_OPC_ObjectFileName:
5441
 
                                  if (prop->propval.str) {
5442
 
                                          free(ob->oi.Filename);
5443
 
                                          ob->oi.Filename = strdup(prop->propval.str);
5444
 
                                  }
5445
 
                                  break;
 
5495
                                        if (prop->propval.str) {
 
5496
                                                free(ob->oi.Filename);
 
5497
                                                ob->oi.Filename = strdup(prop->propval.str);
 
5498
                                        }
 
5499
                                        break;
5446
5500
                                case PTP_OPC_DateCreated:
5447
 
                                  ob->oi.CaptureDate = ptp_unpack_PTPTIME(prop->propval.str);
5448
 
                                  break;
 
5501
                                        ob->oi.CaptureDate = ptp_unpack_PTPTIME(prop->propval.str);
 
5502
                                        break;
5449
5503
                                case PTP_OPC_DateModified:
5450
 
                                  ob->oi.ModificationDate = ptp_unpack_PTPTIME(prop->propval.str);
5451
 
                                  break;
 
5504
                                        ob->oi.ModificationDate = ptp_unpack_PTPTIME(prop->propval.str);
 
5505
                                        break;
5452
5506
                                case PTP_OPC_Keywords:
5453
 
                                  if (prop->propval.str) {
5454
 
                                          free(ob->oi.Keywords);
5455
 
                                          ob->oi.Keywords = strdup(prop->propval.str);
5456
 
                                  }
5457
 
                                  break;
 
5507
                                        if (prop->propval.str) {
 
5508
                                                free(ob->oi.Keywords);
 
5509
                                                ob->oi.Keywords = strdup(prop->propval.str);
 
5510
                                        }
 
5511
                                        break;
5458
5512
                                case PTP_OPC_ParentObject:
5459
 
                                  ob->oi.ParentObject = prop->propval.u32;
5460
 
                                  break;
 
5513
                                        ob->oi.ParentObject = prop->propval.u32;
 
5514
                                        break;
5461
5515
                                }
5462
5516
                        }
5463
5517
                }