)]}'
{
  "log": [
    {
      "commit": "df4b507474b2bccb70bb06dd6552c42e0a2dad9f",
      "tree": "4b9421971b1e943c1a444964979c10df38dab9a3",
      "parents": [
        "d8afe483117a3704037d6767f11859ea035e16d6"
      ],
      "author": {
        "name": "robinz1x",
        "email": "robinx.zhang@intel.com",
        "time": "Mon Jul 09 10:37:56 2018 +0800"
      },
      "committer": {
        "name": "Guobin Zhang",
        "email": "guobin.zhang@intel.com",
        "time": "Mon Nov 19 17:19:21 2018 +0800"
      },
      "message": "Use uint32_t instead of int to support 2~4G file\n\nMtpDevice::sendObject is using int to define object size,\nif the object size is bigger than 2GB, the size will be type-cast to\na negative number. And it will cause a endless loop in MtpDataPacket::write\nuntil DUT auto reboot.\n\nAnd JNI api android_mtp_MtpDevice_send_object requires that object\nsize must be uint32_t , so MtpDevice::sendObject works well after its\nsize parameter is changed from int to uint32_t.\n\nAlso change the return type of below API from int to int64_5\nint64_t MtpDataPacket::write(struct usb_request *request, UrbPacketDivisionMode divisionMode,\n        int fd, size_t size)\nso that it can return the right size in the case of writing 2~4G file.\n\nTest: manual - connect Android device to Android Automotive\nTest: manual - select MTP/File Transfer in android device\nTest: manual - copy a file which is bigger than 2GB from automotive to the android device.\n\nbug: 115451170\n\nChange-Id: I65b89f195ef0527a802bccefc90721e536683b87\nSigned-off-by: robinz1x \u003crobinx.zhang@intel.com\u003e\nSigned-off-by: Guobin Zhang \u003cguobin.zhang@intel.com\u003e\n"
    },
    {
      "commit": "bc1d4b41f4df1b6dd04801ea5a526d23f5321340",
      "tree": "9c40c27d4c306658b10f622f5a32f111e2623c68",
      "parents": [
        "e1d2f7dd9b8f153fc581144ab4d4a77c6241918a"
      ],
      "author": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Tue Mar 27 15:25:03 2018 -0700"
      },
      "committer": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Tue Mar 27 17:32:27 2018 -0700"
      },
      "message": "Fix Unicode string handling\n\nLinux uses UTF8 but java and MTP both\nuse UTF16. In a few places, this results\nin the top byte of a UTF16 string being\ntruncated on conversion to UTF8.\n\nAlso, the hardcoded UTF to byte serialization\nin MtpStringBuffer is incorrect.\nReplace it with conversions from std, and\nreplace usages of MtpString with MtpStringBuffer.\n\nRemove any remaining usages of libutils\nand replace them with corresponding std\nlibraries.\n\nBug: 70546563\nTest: Mtp works, tests pass\nTest: file/folder names containing emoji can be transferred to/from\nwindows\nChange-Id: Idbcb73f1beac17ce8a90843fa254e759dd1a6369\n"
    },
    {
      "commit": "d4b4296b401162a7a42f757c96e3652b82255b13",
      "tree": "0c9433e61873d31b683753906c5ed4b0f21a81b2",
      "parents": [
        "d45003594f2ae928869f14579095687c4f090d06"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Tue Oct 04 17:34:43 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Fri Oct 07 10:04:30 2016 +0900"
      },
      "message": "Don\u0027t send short URB packet when sending MtpDataPacket.\n\nWhen sending a MtpDataPacket to a MTP device, the kernel driver splits\nit into multiple URB packets so that the URB packet size does not exceed\nthe buffer size at the MTP device.\n\nPreviously MtpDataPacket sends its header first, then sends the\npayload. It means the first URB packet only contains the header of\nMtpDataPacket and the URB packet size is smaller than the maximum URB\npacket size (short packet). Some MTP devices regard the short packet as\nthe end of the sequencail URB packets, thus the devices do not accept\nthe following URB packets that contain the payload.\n\nThe MTP spec says if the responder (MTP device) sends the data in a way\nwhere the first pacekt contains only the header, the initiator (MTP\nhost) must send data in the same way. Otherwise the initiator must not\nsend a short packet in the sequencial URB packets.\n\nThe CL fixes the MTP host implementation so that it remembers how the\nMTP device sends data, and uses the same way when sending data\nfrom the host.\n\nBug: 31165557\nTest: Manually invokes MtpDevice#sendObject\nChange-Id: Ic76eb4241ed74957414aef2990be08cd77a9f5a9\n"
    },
    {
      "commit": "8d20945c08dfdd85c252c8ba92d197bf1bd2b208",
      "tree": "c590e169fc722f641ba277d9d05917385e2d2e57",
      "parents": [
        "ecb008139a952a7e5d812e7eb0f5af0f9466d25d"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Tue Oct 04 17:45:31 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Tue Oct 04 17:45:31 2016 +0900"
      },
      "message": "Stop sending object handle with sendObject request.\n\nAccording to the MTP spec, the sendObject request must follow\nsendObjectInfo request and we could not send an object handle with\nsendObject request. The CL stops sending object handle with a sendObject\nrequest. Instead it checks if the given object handle equals to the\nobject handle returned by the previous sendObjectInfo request.\n\nBug: 31918048\nTest: manually invoked sendObjectInfo and sendObject.\nChange-Id: I0a80bdf67bf2913522821ac705f3dc548d3edead\n"
    },
    {
      "commit": "7fee6ca025bf4dcac5d658e8dcd8b6cb46b4ddc3",
      "tree": "12427e80139e0f6877479842a60acc47694fefc3",
      "parents": [
        "7cf6b434a082a4cefe4796c9b9d9914bc23881f3",
        "fdb1d0793cd65fd760dfa197728f7971ee13b760"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Fri Mar 25 13:04:01 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Mar 25 13:04:01 2016 +0000"
      },
      "message": "Merge \"Add getObjectPropValue function to MtpDevice.\" into nyc-dev am: 15ac558\nam: fdb1d07\n\n* commit \u0027fdb1d0793cd65fd760dfa197728f7971ee13b760\u0027:\n  Add getObjectPropValue function to MtpDevice.\n"
    },
    {
      "commit": "66a9abef47f7c8bd438bb1897617ebad3858c736",
      "tree": "ced5812a016c2917eb874575cef1c906b0810ba7",
      "parents": [
        "6fbc20c958c0c770261ca4d32a3748ea4ecd64d9"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Mar 24 20:56:13 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Fri Mar 25 19:49:05 2016 +0900"
      },
      "message": "Add getObjectPropValue function to MtpDevice.\n\nIn the MTP spec, the object size is stored in MtpObjectInfo as unsigned\n32-bit integer and fetched by the getObjectInfo operation. For the\nobjects that are more than 4GB, the object size is provided as one of\nextra properties, which are fetched by different operation.\n\nThe CL adds to getObjectPropValue method to MtpDevice class so that\nclient code can obtain 4GB+ object size from object property.\n\nBUG\u003d27805369\n\nChange-Id: I0b91facd07cdc19866cb29f7df08bb1698bcf60b\n"
    },
    {
      "commit": "6197c9bff627557000cd03ece93c14a12d5c5c8d",
      "tree": "673da8119245d0ee82391a0e7f604d4d7cb69094",
      "parents": [
        "ffe934a845444999aa60139c2c80a5fc83514a65",
        "d7221079292b17a81ec003adef06d58019d9236d"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Feb 18 01:44:40 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 18 01:44:40 2016 +0000"
      },
      "message": "Merge \"Fix the return type of MtpDevice#getStorageID().\""
    },
    {
      "commit": "326edd98bbc52d41de6e0943ca8a343228ed87a5",
      "tree": "4d457072ec3cae45b3ac0f609fd1b2290cae5073",
      "parents": [
        "a03910b23a31058eea178e8d3f5e84fcf852d5c2"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Fri Jan 22 15:34:46 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Jan 28 10:52:54 2016 +0900"
      },
      "message": "Add MtpDevice#getPartialObject64 method.\n\nThis is the method similar to getPartialObject but takes uint64_t as\noffset.\n\nBUG\u003d26703522\n\nChange-Id: I9b8b5f77225b744b527c4a78fe628e88ae89209f\n"
    },
    {
      "commit": "d7221079292b17a81ec003adef06d58019d9236d",
      "tree": "a9659e9d6667d340a16f50575e82314a3e85f169",
      "parents": [
        "f839b54888968d8344c477bf2d7b5a874fa3d371"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Fri Jan 22 14:22:28 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Fri Jan 22 14:56:40 2016 +0900"
      },
      "message": "Fix the return type of MtpDevice#getStorageID().\n\nBoth MtpObjectHandle and MtpStorageID are typedef of uint32_t, but\nMtpStorageID is more appropriate semantically.\n\nBUG\u003dNone\n\nChange-Id: Ibf5bb2105c54f7b73df559132d8737c272a1cefa\n"
    },
    {
      "commit": "59a90609cc340d2933c119aa47045a5c95530b48",
      "tree": "901a72751f1ec72bf3f9b56dc9f26e34fffbe3e6",
      "parents": [
        "4a9fc960b75e0718193d0df91936b6c6bd4195ae"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Mon Jan 11 13:36:57 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Tue Jan 12 12:06:46 2016 +0900"
      },
      "message": "Reland \"Return parameters of event as well as event code.\"\n\nThe CL was previously reviewed at ag/842911.\n\n\u003e The CL makes MtpDevice#reapEvent return event parameters as well as\n\u003e event code.\n\u003e\n\u003e BUG\u003d26480986\n\nChange-Id: Ie750a58248068cd0e804f20b57e7e86eef19d315\n"
    },
    {
      "commit": "4a7cea889d81bbf8f555df006fe384a405b3ba53",
      "tree": "ab733d7877cbc9861961149e24379fe369d612ec",
      "parents": [
        "3747d8ec383964285a50a58abbf85589f2d29315"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Fri Dec 11 15:49:43 2015 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Wed Jan 06 14:35:36 2016 +0900"
      },
      "message": "Add getPartialObject method to MtpDevice.\n\nThe CL adds getPartialObject operation to MtpDevice (host side\nimplementation).\n\nBUG\u003d26284424\n\nChange-Id: Ia8f41b0ebb7dfb4572729eacb5902f21360c8db1\n"
    },
    {
      "commit": "8a7ffae09a019de7109b30c505561c453910bde1",
      "tree": "85222bdac601b44a798890a651a08ac36d71a591",
      "parents": [
        "7bafd606eb2390574f0a2b0043074d9cdfde1120"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Aug 20 15:13:40 2015 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Tue Sep 15 18:50:37 2015 +0900"
      },
      "message": "Add functions to read MTP events from MTP devices.\n\nBUG\u003d23368533\n\nChange-Id: I2003dda961339677caf56e57ae90cf6df7bd7430\n"
    },
    {
      "commit": "532b4f23c7e08fdae9fff189c4b565f6216ffd2a",
      "tree": "460ae422b6e389e831fbf2fbd44f2e53c7b93cf9",
      "parents": [
        "f3c2b3df8bf616ad593e2c0101b04a718f291827"
      ],
      "author": {
        "name": "Tomasz Mikolajewski",
        "email": "mtomasz@google.com",
        "time": "Tue Aug 25 14:14:36 2015 +0900"
      },
      "committer": {
        "name": "Tomasz Mikolajewski",
        "email": "mtomasz@google.com",
        "time": "Thu Aug 27 16:49:21 2015 +0900"
      },
      "message": "Fix sendObject upload.\n\nTwo issues are resolved:\n- sendObject changed to accept raw arguments instead of objectinfo,\n  as calling getObjectInfo after sentObjectInfo is illegal,\n- send buffer decreased to 16K, as this is the maximum size working\n  per comments in other places.\n\nChange-Id: If71644dcbc508dd92c3fe74a2fdb7c6798059b42\n"
    },
    {
      "commit": "4fd9a8b9865addfedbcd84d5c9efea0f647086a0",
      "tree": "fcab096d691d3463873eba0c7c7a561416cee36b",
      "parents": [
        "6d5a0de5177bccc17d0eb1b69a8ed88d620884a5"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Aug 20 15:13:40 2015 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Mon Aug 24 17:53:28 2015 +0900"
      },
      "message": "Use common implementation for getObject and importFile.\n\nPreviously the two functions have separate but similar implementation. ag/750097\nfixed a bug in importFile, but we have a same bug in getObject. Instead fixing\nthe bug separately, the CL adds a common function that can be used from both\ngetObject and importFile.\n\nBUG\u003d23264575\n\nChange-Id: I0bdc876ee9b11301ba4c445cc16556e9c951a8b4\n"
    },
    {
      "commit": "025ffd9c17a7b30d862436954aa0db8d08bfaa9f",
      "tree": "6255d4904a7711eb4ec7e31120f09386aa97299a",
      "parents": [
        "b2d33aee5122c91a59c2a676c0b89ad340232450"
      ],
      "author": {
        "name": "Tomasz Mikolajewski",
        "email": "mtomasz@google.com",
        "time": "Tue Aug 04 18:38:31 2015 +0900"
      },
      "committer": {
        "name": "Tomasz Mikolajewski",
        "email": "mtomasz@google.com",
        "time": "Tue Aug 04 18:49:35 2015 +0900"
      },
      "message": "Add support for reading into a file descriptor on MTP devices.\n\nThis will allow to read files on Java side without copying all bytes to\nmemory first, which is problematic for large files such as movies.\n\nBug:22908937\nChange-Id: I67b116cf01d9e44af69f94c8edc64fd8fbf7b9a3\n"
    },
    {
      "commit": "ab063847e6e893740749029a04cce1f6b7345ed5",
      "tree": "8b840e9152cfa638aa354a0379962a89914e0006",
      "parents": [
        "745602d87607521f4fe84c4f3a6388fbdb6a867c"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@google.com",
        "time": "Wed Nov 12 14:20:06 2014 -0800"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@google.com",
        "time": "Wed Nov 12 16:08:37 2014 -0800"
      },
      "message": "MTP: add strict bounds checking for all incoming packets\n\nPreviously we did not sanity check incoming MTP packets,\nwhich could result in crashes due to reading off the edge of a packet.\nNow all MTP packet getter functions return a boolean result\n(true for OK, false for reading off the edge of the packet)\nand we now return errors for malformed packets.\n\nBug: 18113092\nChange-Id: Ic7623ee96f00652bdfb4f66acb16a93db5a1c105\n"
    },
    {
      "commit": "23f1b33c5f88f07510ca5dc01b3afd7af6843d6c",
      "tree": "801bb79c1b94e88d649a4066b631290e3de19ae9",
      "parents": [
        "f0cf63fff696b30a0b5760bb637efb1aa9bf1f55"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Thu Dec 30 15:38:45 2010 -0500"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Sat Jan 22 15:56:09 2011 -0800"
      },
      "message": "New APIs for MTP and PTP host support\n\nThis replaces the previous ContentProvider based interface\n\nChange-Id: I4cea2544854adb9fdcc04345e4d73d8ef05380f3\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "42d0b79a787814d42e4c6f9dfe14f13cc0f6a758",
      "tree": "9cb2c20fb8bf7d6b53c093c8e3dceb5dc0374523",
      "parents": [
        "d1108d74e13a74dc72e49513e0393e924f3d112c"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Jan 04 14:48:57 2011 -0500"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Thu Jan 06 11:46:55 2011 -0500"
      },
      "message": "MTP: changes to use new usb_request support in libusbhost\n\nChange-Id: Ic091eab166a66efcde0395dcebbbc513f2322fca\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "f7454622eaac287d20ab43013d7015fe42b894f8",
      "tree": "1bbc63dbaf849ed5226194e933f2de3c9bdb22e0",
      "parents": [
        "424c6cbfa75da5f4f889ab6517dfee4dd024ba2d"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Thu Dec 09 18:34:18 2010 -0800"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Thu Dec 09 18:34:18 2010 -0800"
      },
      "message": "MTP host: Handle receiving a response packet instead of data packet.\n\nThis will happen if the device needs to report an error rather than returning the data.\n\nChange-Id: I477512b3676c2f0518a85a4135832ed4475fbc2d\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "99e393a39a31bfbdeb435462939519e2d0279433",
      "tree": "b4fbe06804f106403ca1dad9eaf421d434566ce6",
      "parents": [
        "5da864845e024833c4c7f641acd7c88187a6bc1e"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Dec 07 18:53:04 2010 -0800"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Dec 07 18:53:04 2010 -0800"
      },
      "message": "MTP: Support format argument in host GetObjectPropDesc command\n\nChange-Id: Ic14313c0f95bea1d1d475cc6a001b256fccb91c8\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "0c7c7c76a96a82ec728a2d5c091941c4057ffb25",
      "tree": "19fc13f9b1d585ee08afe816939c27e5373cb091",
      "parents": [
        "98693f674125484de8873d969c209276a6dd604b"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Dec 07 11:24:28 2010 -0800"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Dec 07 17:13:12 2010 -0800"
      },
      "message": "MTP: Improve MtpProperty logging support\n\nChange-Id: I46800b99763edcc5e994d912941f9f5e9b1c94d2\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "98693f674125484de8873d969c209276a6dd604b",
      "tree": "58c69be45cd71ca9729f1a2388da9a8f18d3ae25",
      "parents": [
        "2e09e289b7e136481e9215bb61ed47cee5d9919b"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Dec 07 10:58:56 2010 -0800"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Dec 07 10:58:56 2010 -0800"
      },
      "message": "MTP: Host support for GetObjectPropsSupported and GetObjectPropDesc\n\nChange-Id: I6fd23587597fc68227dfb61118b097eda3e3e1d5\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "27afe3a1cc9c07ac4884a7720087a597aea3c76f",
      "tree": "9b82ea60a4996f39d1e0a33cc1fb300f7771143b",
      "parents": [
        "b9ff444a7eaf7ffd43970c0477110c6808bd4a7c"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Nov 19 13:52:20 2010 -0500"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Nov 19 13:55:22 2010 -0500"
      },
      "message": "PTP: Fix permissions problems with files imported via PTP\n\nChange-Id: I630a89c67e5b3d6d0c29e6c257f84e1909fa4de2\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "b9ff444a7eaf7ffd43970c0477110c6808bd4a7c",
      "tree": "6fcfa2ec5805ead1a62757b7875a20eee5b4a151",
      "parents": [
        "317ca79a49746dbd1b6bb83712e93e2dc5f6e4f0"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Nov 19 11:20:19 2010 -0500"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Nov 19 11:30:10 2010 -0500"
      },
      "message": "PTP: Improve performance and reliability of file importing\n\nNow the file copy is done completely within the media process\nrather than pushing data to the client via ContProvider.openFile().\n\nFile system writes are now interleaved with USB reads, which allows us\nto copy the data faster and prevents the camera from timing out during transfer.\n\nFile is automatically inserted in the media provider after a successful import\nand a Uri is returned to the client.\n\nBUG: 2994234\n\nChange-Id: Ie75c63da76f623343d3d966c6a707aa1ae871972\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "0cf89f2e622aa53f31fa5762ca4bc805bb509ed3",
      "tree": "e0983afa92472593e764f81d8e42b5d118a3a697",
      "parents": [
        "2b6c4a26499693ae3638e3df6d4255b13e34ee29"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Mon Jul 26 20:40:45 2010 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Mon Jul 26 20:40:45 2010 -0400"
      },
      "message": "MTP host: Add support for reading files from an MTP device via ParcelFileDescriptor\n\nAlso added some support for sending files to the device that hasn\u0027t been debugged yet.\nAdd locking to MtpDevice to prevent it from attempting multiple transactions simultaneously.\n\nChange-Id: I2b995ba0af086cc6920bd6b8c869f540ad78560a\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "b14e588bec4d5e39e61b020b5b575f2ce555d316",
      "tree": "f4d08eaa3bd5832b3bfebbdb9d19c8fcde45b54e",
      "parents": [
        "703f87c890591e3a20ba0da237233c36a7c47bc7"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Jun 29 18:11:52 2010 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Wed Jun 30 13:59:32 2010 -0400"
      },
      "message": "MTP: replace printfs with logcat\n\nChange-Id: I2c30921098e2dc049dc5fc1e0a548ead33c363e0\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "6afc41d095ccb159f6c4705bed903b6c048b922a",
      "tree": "d62715a9f700f2c56418968aa1d8199e62580bad",
      "parents": [
        "0c9e60c772ae007a68cbfa46e0d2fb429376cfd2"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Jun 11 16:34:52 2010 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Jun 11 17:47:35 2010 -0400"
      },
      "message": "MTP: Add host support for deleting objects.\n\nFor example, deleting pictures on a digital camera.\n\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "3e072b354d1e1e3ee62d58492f0739139df8aff1",
      "tree": "5c1d39a97b326b210d148dfefb70832ea87e1dab",
      "parents": [
        "fee87d7b4e60d7541aa2cb0d31f5bdf4ca9e6475"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Thu Jun 10 16:34:20 2010 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Thu Jun 10 16:58:03 2010 -0400"
      },
      "message": "MTP: Add support for retrieving thumbnails to MTP content provider.\n\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "a6c490b8b2d96ebaab632286029463f932ae3b6b",
      "tree": "05f47b431aa13127a4f62d9676d21f45169a7d9f",
      "parents": [
        "7dfffd78637f99ce396e7ce2008b05b2d5aec131"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Sat Jun 05 22:45:01 2010 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Mon Jun 07 09:34:41 2010 -0400"
      },
      "message": "MTP: host support for retrieving device property descriptors\n\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "5ed68d29a140e14c8d46980fa844548eb33b1e87",
      "tree": "76b370bbfac9fe8e2105c57bf21154f6dd245d38",
      "parents": [
        "77995c32095cc192823de3eedf0d5a404fbca72e"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue May 25 19:08:48 2010 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Jun 01 22:12:44 2010 -0400"
      },
      "message": "Prototype Content Provider support for MTP/PTP devices.\n\nAt this point much of the plumbing is in place, but only a few simple queries\nare supported.\nThis is enough to support a proof of concept sample program that navigates\nthe file hierarchy of a digital camera connected via USB.\n\nAlso removed obsolete ptptest host test program.\n\nChange-Id: I17644344b9f0ce1ecc302bc0478c1f3d44a1647f\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    }
  ]
}
