)]}'
{
  "log": [
    {
      "commit": "f661990d0379f1030bdaa93c573ef4a50e9c6e66",
      "tree": "f05776e43faaedc4b58f8b38e20bdf050a59b264",
      "parents": [
        "dbaec98fc97ebbbf2aa3ac81ee3f4502a55a4038"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@chromium.org",
        "time": "Tue Aug 04 15:23:57 2020"
      },
      "committer": {
        "name": "Commit Bot",
        "email": "commit-bot@chromium.org",
        "time": "Wed Aug 05 00:19:53 2020"
      },
      "message": "fix OWNERS path\n\nThe find owners module will use the path in the current repo as the\nimplicit prefix even when crossing repo boundaries, so make sure we\nhave an explicit / anchor when loading.  It doesn\u0027t make a difference\nin this repo, but might as well avoid copy \u0026 paste confusion.\n\nBUG\u003dNone\nTEST\u003dfind owners can find owners for this\n\nChange-Id: I6b20e46e6e8c5f7a4e41f5474cff4a31f888525a\nReviewed-on: https://chromium-review.googlesource.com/c/chromiumos/graphyte/+/2336815\nTested-by: Mike Frysinger \u003cvapier@chromium.org\u003e\nAuto-Submit: Mike Frysinger \u003cvapier@chromium.org\u003e\nReviewed-by: Hung-Te Lin \u003chungte@chromium.org\u003e\nCommit-Queue: Hung-Te Lin \u003chungte@chromium.org\u003e\n"
    },
    {
      "commit": "dbaec98fc97ebbbf2aa3ac81ee3f4502a55a4038",
      "tree": "068a93a9d64357042300153808eb9309ee5fee5c",
      "parents": [
        "3acbab67202baa3d7b298601b37ebf61d03edc7c"
      ],
      "author": {
        "name": "cyueh",
        "email": "cyueh@google.com",
        "time": "Mon Dec 09 05:20:38 2019"
      },
      "committer": {
        "name": "Commit Bot",
        "email": "commit-bot@chromium.org",
        "time": "Tue Mar 10 05:52:29 2020"
      },
      "message": "graphyte: Make \"make test\" python 2/3 compatible.\n\npython2 is deprecated in 2020.\n\n(1) Use list instead of map function to create lists.\n(2) Decodes bytes input from socket to string.\n(3) Encodes string output to socket to bytes.\n(4) Adapts inspect library behavior changes.\n(5) Replace iteritems() with items().\n(6) Import packages from six.moves.\n(7) Use python3 print function syntax.\n\nBUG\u003dchromium:1019481\nTEST\u003dmake test PYTHON\u003dpython2; make test PYTHON\u003dpython3\n\nChange-Id: I82dcf6efa00da4d7cb6e9f1ec63101c027f00047\nReviewed-on: https://chromium-review.googlesource.com/c/chromiumos/graphyte/+/2058226\nCommit-Queue: Cheng Yueh \u003ccyueh@chromium.org\u003e\nTested-by: Cheng Yueh \u003ccyueh@chromium.org\u003e\nReviewed-by: Mike Frysinger \u003cvapier@chromium.org\u003e\nReviewed-by: Yong Hong \u003cyhong@chromium.org\u003e\n"
    },
    {
      "commit": "3acbab67202baa3d7b298601b37ebf61d03edc7c",
      "tree": "3f4cc1937d9265126a405f39d7abff654605866c",
      "parents": [
        "dc1ab2d84aec906a716e594ac35c4b18d51639ec"
      ],
      "author": {
        "name": "cyueh",
        "email": "cyueh@google.com",
        "time": "Mon Dec 09 11:15:43 2019"
      },
      "committer": {
        "name": "Commit Bot",
        "email": "commit-bot@chromium.org",
        "time": "Thu Dec 19 16:47:04 2019"
      },
      "message": "graphyte_utils: Guard current working directory\n\nCurrently in Graphyte, all plugins run on the same process. It is\npossible that the current working directory is changed by other\nplugins. One way to solve this is running each plugins on a different\nprocess. However, it needs a lot of work. Another approach is using\ndecorator. This CL adds a decorater which can guard the current working\ndirectory and uses it on dummy_dut and dummy_inst for example.\n\nBUG\u003dNone\nTEST\u003dmake test PYTHON\u003dpython2; manually test on devices\n\nChange-Id: I16c7f25826d93cf77cbc64c41ee1941789f93523\nReviewed-on: https://chromium-review.googlesource.com/c/chromiumos/graphyte/+/1958081\nReviewed-by: Yong Hong \u003cyhong@chromium.org\u003e\nCommit-Queue: Cheng Yueh \u003ccyueh@chromium.org\u003e\nTested-by: Cheng Yueh \u003ccyueh@chromium.org\u003e\n"
    },
    {
      "commit": "dc1ab2d84aec906a716e594ac35c4b18d51639ec",
      "tree": "dac4fbc2fb71c76576b09cf22b3524b068563231",
      "parents": [
        "fb22c5af6218f7fe048e0a4b782f4de25f6d630e"
      ],
      "author": {
        "name": "cyueh",
        "email": "cyueh@google.com",
        "time": "Thu Oct 31 06:42:45 2019"
      },
      "committer": {
        "name": "Commit Bot",
        "email": "commit-bot@chromium.org",
        "time": "Wed Dec 04 08:49:33 2019"
      },
      "message": "testplan: Check Bluetooth test plan according to core spec.\n\nThis CL checks more detail about the test plan arguments arccording to the\npacket type. A result limit interval should be contained by the interval\nfrom the core specification.\n\nBUG\u003dNone\nTEST\u003dmanually run with test plans\nTEST\u003dmake test PYTHON\u003dpython2\n\nCq-Depend: chromium:1886573\nChange-Id: I8acaeb59af1ced04eba042568223369131b58f4c\nReviewed-on: https://chromium-review.googlesource.com/c/chromiumos/graphyte/+/1895109\nTested-by: Cheng Yueh \u003ccyueh@chromium.org\u003e\nReviewed-by: Yong Hong \u003cyhong@chromium.org\u003e\nCommit-Queue: Cheng Yueh \u003ccyueh@chromium.org\u003e\n"
    },
    {
      "commit": "fb22c5af6218f7fe048e0a4b782f4de25f6d630e",
      "tree": "1aee834a5242d6aab30fca83913aa7ba8faa3178",
      "parents": [
        "2e3200e667ea00621241d42dcd1c385f4c77db25"
      ],
      "author": {
        "name": "cyueh",
        "email": "cyueh@google.com",
        "time": "Tue Oct 29 10:04:16 2019"
      },
      "committer": {
        "name": "Commit Bot",
        "email": "commit-bot@chromium.org",
        "time": "Wed Nov 20 07:19:46 2019"
      },
      "message": "testplan: Check wlan test plan according to 802.11.\n\nThis CL checks more detail about the test plan arguments arccording to each\nstandard. A result limit interval should be contained by the standard\nspecified interval.\n\nBUG\u003dNone\nTEST\u003dManually run with test plan and make test.\n\nChange-Id: I7ac785b814c6b775d7eb200b9cbe85344efb0d3c\nReviewed-on: https://chromium-review.googlesource.com/c/chromiumos/graphyte/+/1886573\nTested-by: Cheng Yueh \u003ccyueh@chromium.org\u003e\nReviewed-by: Yong Hong \u003cyhong@chromium.org\u003e\nCommit-Queue: Cheng Yueh \u003ccyueh@chromium.org\u003e\n"
    },
    {
      "commit": "2e3200e667ea00621241d42dcd1c385f4c77db25",
      "tree": "f69a077c20bd77b1d127210c32bf73fe4140f3ef",
      "parents": [
        "10d607271aef6033e704ce55cabfef486fdd3211"
      ],
      "author": {
        "name": "cyueh",
        "email": "cyueh@google.com",
        "time": "Mon Oct 21 09:22:22 2019"
      },
      "committer": {
        "name": "Commit Bot",
        "email": "commit-bot@chromium.org",
        "time": "Thu Nov 14 09:58:54 2019"
      },
      "message": "device: Requires logs of device version in plugins.\n\nIn new graphyte development workflow, we requires vendors to provide test plan,\nexecution log, and results before their code to be reviewed. This CL requires a\nnew function GetVersion to be implemented in order to double check the device\nenvironment.\n\nBUG\u003dNone\nTEST\u003dManually test on devices\n\nChange-Id: Ic36e8218333a905ea38d8d8815b20d4724e6e49b\nReviewed-on: https://chromium-review.googlesource.com/c/chromiumos/graphyte/+/1871790\nTested-by: Cheng Yueh \u003ccyueh@chromium.org\u003e\nReviewed-by: Yong Hong \u003cyhong@chromium.org\u003e\nCommit-Queue: Cheng Yueh \u003ccyueh@chromium.org\u003e\n"
    },
    {
      "commit": "10d607271aef6033e704ce55cabfef486fdd3211",
      "tree": "ff335ce23ca77233ce3792d33bde20c26463709a",
      "parents": [
        "7ea5c995be1ba3ff1a39e5e63fdee4b57c6434e5"
      ],
      "author": {
        "name": "Hung-Te Lin",
        "email": "hungte@chromium.org",
        "time": "Tue May 28 23:51:58 2019"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu May 30 23:57:53 2019"
      },
      "message": "Add OWNERS file\n\nSet the owners follow factory repo owners.\n\nBUG\u003dNone\nTEST\u003dNone\n\nChange-Id: I2fbfd77190266dfdc62ff7091856d80754f9437f\nReviewed-on: https://chromium-review.googlesource.com/1632058\nCommit-Ready: Hung-Te Lin \u003chungte@chromium.org\u003e\nTested-by: Hung-Te Lin \u003chungte@chromium.org\u003e\nLegacy-Commit-Queue: Commit Bot \u003ccommit-bot@chromium.org\u003e\nReviewed-by: Chris McDonald \u003ccjmcdonald@chromium.org\u003e\n"
    },
    {
      "commit": "7ea5c995be1ba3ff1a39e5e63fdee4b57c6434e5",
      "tree": "258b926cac53ed49eb46d400e5bcd8014313053b",
      "parents": [
        "5042b8cf876294f36b721bde1d71e32f1a9c45cd"
      ],
      "author": {
        "name": "Yong Hong",
        "email": "yhong@chromium.org",
        "time": "Fri Jun 29 18:35:40 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Sat Jun 30 00:50:24 2018"
      },
      "message": "testplan: Fix key error when checking if test case passes\n\nBUG\u003db:110987319\nTEST\u003dmanually test\n\nChange-Id: Ie36cce7c76b986a4bf8313bff2dab8b5a1dab010\nReviewed-on: https://chromium-review.googlesource.com/1120896\nCommit-Ready: Yong Hong \u003cyhong@google.com\u003e\nTested-by: Yong Hong \u003cyhong@google.com\u003e\nReviewed-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\n"
    },
    {
      "commit": "5042b8cf876294f36b721bde1d71e32f1a9c45cd",
      "tree": "7814fea539cd033bcf438148b35d6a7a21e8d7b3",
      "parents": [
        "8676674f685c84a565e7f4839553a2fa1f3e7922"
      ],
      "author": {
        "name": "Hung-Te Lin",
        "email": "hungte@chromium.org",
        "time": "Thu May 17 07:44:26 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Sat May 19 03:08:16 2018"
      },
      "message": "README.md: Add flow chart diagram.\n\nMove \"Graphyte Flow.png\" to doc/images and have it displayed in\nREADME.md.\n\nBUG\u003dNone\nTEST\u003dNone\n\nChange-Id: Ia3c925500ec9b985508b0f2437b5f20a87d9676c\nReviewed-on: https://chromium-review.googlesource.com/1063850\nCommit-Ready: ChromeOS CL Exonerator Bot \u003cchromiumos-cl-exonerator@appspot.gserviceaccount.com\u003e\nTested-by: Hung-Te Lin \u003chungte@chromium.org\u003e\nReviewed-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\n"
    },
    {
      "commit": "8676674f685c84a565e7f4839553a2fa1f3e7922",
      "tree": "46eaab2e11593387156691df7f8171f07a7f5569",
      "parents": [
        "e9de87f00d2e0a3196f2cf6cba8471ba9403597b"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@chromium.org",
        "time": "Tue Feb 27 05:01:28 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu Mar 08 12:06:38 2018"
      },
      "message": "Graphyte: Log detail settings of test cases\n\nPrint detail settings for test cases to log files.\n\nBUG\u003db:70715145\nTEST\u003dRun Graphyte and check the detail settings are present in log.\n\nChange-Id: I0cb06427832eb9bfac3a21bf6a590b6dacc59f33\nReviewed-on: https://chromium-review.googlesource.com/939064\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Yong Hong \u003cyhong@google.com\u003e\n"
    },
    {
      "commit": "e9de87f00d2e0a3196f2cf6cba8471ba9403597b",
      "tree": "afe3f2ef083ad35d5b79a7e61289ffcca8661dd3",
      "parents": [
        "c5a4fbab7a38be02a955895ef83b635e34138b88"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@chromium.org",
        "time": "Mon Feb 26 07:05:54 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu Mar 08 12:06:37 2018"
      },
      "message": "links: Also find identity file in config folder\n\nBUG\u003db:73218647\nTEST\u003dPut identity file under config folder, and run graphyte.\n\nChange-Id: I623303e46af5e352c507c136fd98892dcc909b74\nReviewed-on: https://chromium-review.googlesource.com/939062\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Yong Hong \u003cyhong@google.com\u003e\n"
    },
    {
      "commit": "c5a4fbab7a38be02a955895ef83b635e34138b88",
      "tree": "aee8b21e478744932bff24bc765fcaa07d9bf044",
      "parents": [
        "2afc9a0d2cc0f08d422cdf9eb7309cf6a9c2309f"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@chromium.org",
        "time": "Wed Feb 21 03:16:27 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Feb 27 15:32:02 2018"
      },
      "message": "graphyte: Add debug log when loading config files.\n\nBUG\u003db:73218647\nTEST\u003dRun Graphyte and check debug logs of searching config files.\n\nChange-Id: I3144c98cc16daac1aba24eba76ca2dd9c35d621d\nReviewed-on: https://chromium-review.googlesource.com/927963\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Yong Hong \u003cyhong@google.com\u003e\n"
    },
    {
      "commit": "2afc9a0d2cc0f08d422cdf9eb7309cf6a9c2309f",
      "tree": "a9e4ca29246a820a08bd324ad43f0120168b18ef",
      "parents": [
        "3296a1970350fbabb4d5bf4a7e3c2e2f3640de8b"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@chromium.org",
        "time": "Mon Feb 12 11:18:42 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Feb 27 15:32:01 2018"
      },
      "message": "graphyte: Fix plugin shell unittest\n\nThe command \u0027set_test_type\u0027 is replaced by \u0027choose\u0027. Set the test case\ndirectly in the unittest.\n\nBUG\u003db:72921753\nTEST\u003dmake test\n\nChange-Id: Idab707076484bc9eba1e11f4e4b2cc2f11e27307\nReviewed-on: https://chromium-review.googlesource.com/912914\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Yong Hong \u003cyhong@google.com\u003e\n"
    },
    {
      "commit": "3296a1970350fbabb4d5bf4a7e3c2e2f3640de8b",
      "tree": "3f3fe64b2de0beca5ae999feb1e7a764c007b3fb",
      "parents": [
        "c647ad68c757cf77c2082d483762e7cd09ad256b"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@chromium.org",
        "time": "Mon Feb 12 10:28:34 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Feb 27 15:32:00 2018"
      },
      "message": "graphyte: Do not use relative imports\n\nUse package-style import instead of relative imports. Since relative\nimports have many drawbacks for development and deployment, especially\nwhen we\u0027re asking vendors to develope their DUT/instrument plugins.\n\nAlso, use symbolic link \u0027graphyte_common.py\u0027 to automagically fill the\nmissing package path, even when the package is not installed using pip,\nor the package path is missing from environment variable PYTHONPATH.\n\nBUG\u003db:73277431\nTEST\u003dmake test\nTEST\u003dgraphyte/main.py\n\nChange-Id: I8b30c1d77acc232f976e4b63b18b196184c54abf\nReviewed-on: https://chromium-review.googlesource.com/912913\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Yong Hong \u003cyhong@google.com\u003e\n"
    },
    {
      "commit": "c647ad68c757cf77c2082d483762e7cd09ad256b",
      "tree": "c36c9e59bde3f1eb6dd48ebb042c8d691e2e71b0",
      "parents": [
        "2997e84328ff348ab2daf6e7747fe24c68168c4b"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@chromium.org",
        "time": "Mon Feb 12 08:52:19 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Feb 27 13:14:36 2018"
      },
      "message": "devtools: vim: Port vim settings from factory repo\n\nBUG\u003dNone\nTEST\u003dMake sure vim can recognize project-specific settings.\n\nChange-Id: I98d452ca561f7ac4511a9a4c9c39d639d81b17cc\nReviewed-on: https://chromium-review.googlesource.com/912912\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Yong Hong \u003cyhong@google.com\u003e\n"
    },
    {
      "commit": "2997e84328ff348ab2daf6e7747fe24c68168c4b",
      "tree": "81cdd4fcc5f1c265bfd3ab9ea120c5c3811a5373",
      "parents": [
        "6168e786086e0b9666144892968092962d4f60ae"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@chromium.org",
        "time": "Mon Feb 05 10:24:06 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Feb 06 12:55:26 2018"
      },
      "message": "graphyte: Add \u0027auto\u0027 to power level\n\nPower level setting might be a special string \u0027auto\u0027, indicating that the\npower level is automatically adjusted by the driver/firmware.\n\nBUG\u003db:72720023\nTEST\u003dRun plugin shell, and check the tx_start_ex() command for different\nsettings of power level.\n\nChange-Id: Ia8fe25dcf5c81c2a5508fbd9a41a059b33113441\nReviewed-on: https://chromium-review.googlesource.com/901305\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "6168e786086e0b9666144892968092962d4f60ae",
      "tree": "4102fa5bba1ce4164a155b241fcf2d55b6a0e737",
      "parents": [
        "c4daf9318c3c4586304db17bb34390e844e24653"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@chromium.org",
        "time": "Mon Feb 05 09:35:23 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Feb 06 12:55:25 2018"
      },
      "message": "graphyte: Run test step-by-step in plugin shell\n\nAdd a command \u0027run\u0027 to plugin shell, to run the test step-by-step.\n\nBUG\u003db:72921753\nTEST\u003dRun the \u0027run\u0027 command in plugin shell.\n\nChange-Id: I846de9d66d60a9a884b182f237a61afb0477d9da\nReviewed-on: https://chromium-review.googlesource.com/901083\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\n"
    },
    {
      "commit": "c4daf9318c3c4586304db17bb34390e844e24653",
      "tree": "561d78e25afa58df19556715d289d548c4e34ad4",
      "parents": [
        "95983fe63a86126bfe50315f279646936ef0f6e5"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@chromium.org",
        "time": "Mon Feb 05 06:36:35 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Feb 05 23:44:47 2018"
      },
      "message": "graphyte: Choose test case in plugin shell\n\nAdd a command to let user choose a test case from the test plan.\n\nBUG\u003db:72921753\nTEST\u003dRun plugin shell, and use \u0027choose\u0027 command to select a test.\n\nChange-Id: Idc9d91ce617e109dffe2e5da4b7fcf20a1527e88\nReviewed-on: https://chromium-review.googlesource.com/899409\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "95983fe63a86126bfe50315f279646936ef0f6e5",
      "tree": "452ccc61a4297e3b6b697076eb5f2e0645319a83",
      "parents": [
        "a830a191725e95e19bbe4e55f70378b26f997352"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@chromium.org",
        "time": "Fri Feb 02 11:53:57 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Feb 05 12:33:27 2018"
      },
      "message": "graphyte: Add OnFailure hook to DUT and instrument\n\nSometimes plugins from vendors have experimental and unstable driver,\nand it needs to have an OnFailure hook to be notified when the test\nis failed.\n\nBUG\u003db:70715145\nTEST\u003dCheck DUT plugin\u0027s OnFailure hook is called when a test is failed.\n\nChange-Id: I59f4a6db852013a02ed6e1df46d20e2d49da92a6\nReviewed-on: https://chromium-review.googlesource.com/896677\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "a830a191725e95e19bbe4e55f70378b26f997352",
      "tree": "6fc1663d7adf4f70b19c5cde3f4575271067b238",
      "parents": [
        "cab8671dc9437e8e6c79914c7c454d59bee21b76"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@chromium.org",
        "time": "Fri Feb 02 11:44:32 2018"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Feb 05 12:33:26 2018"
      },
      "message": "graphyte: Use a more reasonable default timeout\n\nIn some device, and especially in proto builds, devices are not tweaked\nperfectly, and the unit might take more than 1 second to establish the\nSSH connection. Loose the default timeout from 1 second to 5 seconds.\n\nBUG\u003dNone\nTEST\u003dTest on a proto0 board.\n\nChange-Id: Ic6b0da72422f26d6011bd3fae170b8f2a5fb16d5\nReviewed-on: https://chromium-review.googlesource.com/896676\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "cab8671dc9437e8e6c79914c7c454d59bee21b76",
      "tree": "f2eda6565a783627e8959341cb1855a2ff4e2a16",
      "parents": [
        "d6a8e7704e8257c9d6dd866889fca3d5192b0c30"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@google.com",
        "time": "Wed Jul 26 09:35:03 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Jul 31 09:28:59 2017"
      },
      "message": "graphyte: Add document for plugin shell\n\nAdd some instructions to use the plugin shell.\n\nBUG\u003dnone\nTEST\u003dnone\n\nChange-Id: I67643621df8495a3a08dec80878768c73aa61b94\nReviewed-on: https://chromium-review.googlesource.com/586207\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "d6a8e7704e8257c9d6dd866889fca3d5192b0c30",
      "tree": "f2c71d04813964d9a52af883db83c1aaa9fcde7a",
      "parents": [
        "3ea4d1b04d522a14624c61f11dda6fb1f2783579"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Jul 06 07:21:22 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Fri Jul 14 05:03:33 2017"
      },
      "message": "Implement plugin running shell.\n\nA plugin runner is implemented to help diagnosis\nin graphyte framework when deploying, testing, etc.\n\nThe plugin runner is a interactive shell, and it\nshould be self-explained. Type \u0027help\u0027 in the command\nprompt shows an informative usage guide.\n\nBUG\u003dchromium:713589\nTEST\u003dnone\n\nChange-Id: Ibed1acafa94352fae8514a0ffead3b938a5eecd7\nReviewed-on: https://chromium-review.googlesource.com/561260\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "3ea4d1b04d522a14624c61f11dda6fb1f2783579",
      "tree": "11563bed0830c1ff7968550baee56784b1f3b5e0",
      "parents": [
        "d8261057d707d7c728cbb506accfbc83c504de9a"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@google.com",
        "time": "Tue Jul 11 07:20:49 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Fri Jul 14 05:03:33 2017"
      },
      "message": "Graphyte - re-order tx command sequence\n\nFor a Tx test, the DUT sends, and the instrumenet receives.\n\nIn dut.start(), it is designed to make the DUT starts to\nsend *repeatedly*, until dut.stop() is called.\n\nSo, a Tx test can be ordering in a more symmetric way:\n1. Dut.start\n2. Inst.start\n3. Inst.stop\n4. Dut.stop\n\nBUG\u003dnone\nTEST\u003dnone\n\nChange-Id: I4a6f033ae691c3e7f5f2519571812a7138cf5ed9\nReviewed-on: https://chromium-review.googlesource.com/566171\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "d8261057d707d7c728cbb506accfbc83c504de9a",
      "tree": "63e4cb75725a14c07171791613320a4e6168305f",
      "parents": [
        "9c43af8f787ebfb51333f59b25e54347ea0a233d"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@google.com",
        "time": "Mon Jul 10 09:53:27 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Fri Jul 14 05:03:33 2017"
      },
      "message": "graphyte - pass exception to caller\n\nPass the exception to the caller when initializing devices.\nThe caller can print the whole backtrace if needed.\n\nBUG\u003dnone\nTEST\u003dnone\n\nChange-Id: I7172f7e18e4091fd6648fcee4b55c42a617d3091\nReviewed-on: https://chromium-review.googlesource.com/564100\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "9c43af8f787ebfb51333f59b25e54347ea0a233d",
      "tree": "bf37a91334f8e265c6ee85c09f47371627372454",
      "parents": [
        "4731fc9f7a0ffe5d6ba13082429786871d19aaf8"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@google.com",
        "time": "Mon Jul 10 07:39:53 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Fri Jul 14 05:03:33 2017"
      },
      "message": "Preserve device.link after close\n\nThe device.link is filled up by the user config,\nthe config should be preserve after a terminate() call,\nso the user can call initialize() afterwards.\n\nBUG\u003dnone\nTEST\u003dnone\n\nChange-Id: I32e85b62965d96c606ea8311ac4f01bc4dc90186\nReviewed-on: https://chromium-review.googlesource.com/564099\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "4731fc9f7a0ffe5d6ba13082429786871d19aaf8",
      "tree": "0dc5635a38924255a3d53db7d9ccc26d90c01427",
      "parents": [
        "c2dd673c313ee886ad2c532753da826c5e5fe64f"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@google.com",
        "time": "Mon Jul 10 06:37:12 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Fri Jul 14 00:30:28 2017"
      },
      "message": "Supppress output in ControlMaster\u0027s polling\n\nIn a SSH link, a thread will be spawned to monitor the\nprocess run via the SSH link. It will keep polling the\nstatus of the process, and monitor the connection status.\n\nTo check if the connection is still in a good state, it\nuses \u0027ssh -O check\u0027 to check the status. However, this\nwill output a string \u0027Master running (pid\u003dxxx)\u0027 to\nstandard output/error stream.\n\nTo fix this, the output of this specific is marked\nas pipe, which keeps the output console clean.\n\nBUG\u003dnone\nTEST\u003dnone\n\nChange-Id: Ie1cd343ba91d096246485683842edf2ad362f742\nReviewed-on: https://chromium-review.googlesource.com/566170\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "c2dd673c313ee886ad2c532753da826c5e5fe64f",
      "tree": "af339ff28b4e8b4054ce23170fcbf23dd9000059",
      "parents": [
        "69129a35cd1cc5c25229eebec3841869e6edbb92"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Jul 06 07:16:47 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Fri Jul 14 00:30:28 2017"
      },
      "message": "graphyte: Move SetLogging out of Graphyte class.\n\nAdd a bootstrap class to do process-wide resource\ninitialization. Currently, only need to initialize\nlogger.\n\nBUG\u003dnone\nTEST\u003dmake test\n\nChange-Id: Iee017cdb438b058fa64dfa5695330f8b70f4afb1\nReviewed-on: https://chromium-review.googlesource.com/561256\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "69129a35cd1cc5c25229eebec3841869e6edbb92",
      "tree": "aad32a10d9665238ff774d7fd368190f257fb4a6",
      "parents": [
        "2d565480441b168084b4b962f79ee781d96c0546"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Jul 06 08:58:59 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Fri Jul 14 00:30:28 2017"
      },
      "message": "graphyte: Split the plugin controlling methods.\n\nIn Graphyte core class, some methods are used to control both DUT\nand instrument plugins at the same time:\n  - InitializeDevices\n  - TerminateDevices\n  - SetRF\n\nWhen we implement the plugin runner, it might control only one side\nof the plugins. Therefore, we added a class DeviceType used to assign\nwhich plugin should be controlled.\n\nBUG\u003dchromium:713589\nTEST\u003dmake test\n\nChange-Id: I456c02698441223215fee824cb730b6a3bf29284\nReviewed-on: https://chromium-review.googlesource.com/561259\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\n"
    },
    {
      "commit": "2d565480441b168084b4b962f79ee781d96c0546",
      "tree": "4bca8f506a62ecfe1323009a9700d283e7b373f9",
      "parents": [
        "cc6ec7c05761cee1801a75e6678fc2042f8b9783"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Jul 06 08:54:56 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Fri Jul 14 00:30:28 2017"
      },
      "message": "device: Check the change of RF type in device class.\n\nOriginally, we checked the change RF type in Graphyte core class,\nbecause DUT and instrument plugins should change at the same time\nduring running.\n\nHowever, we will implement a plugin runner that might only run one\ndevice. Therefore, we moved the check to the device itself.\n\nBUG\u003dchromium:713589\nTEST\u003dmake test\n\nChange-Id: I544a5e49388a58930c22048fa9d36e7343fed2d4\nReviewed-on: https://chromium-review.googlesource.com/561258\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\n"
    },
    {
      "commit": "cc6ec7c05761cee1801a75e6678fc2042f8b9783",
      "tree": "79b6f3208d2c3a3ea0096468ee5f47ebd093bcf1",
      "parents": [
        "c6993bd135d45b4490bb565a45819b3df6a5b7d2"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Jul 06 08:59:14 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Fri Jul 14 00:30:28 2017"
      },
      "message": "graphyte: Add unittest for Graphyte core class.\n\nAdded a unittest to check the calling sequence of DUT and instrument\nplugins.\n\nBUG\u003dchromium:713589\nTEST\u003dmake test\n\nChange-Id: I5f253f73e6684667d12a15a99a35be4bb6727b97\nReviewed-on: https://chromium-review.googlesource.com/561257\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\n"
    },
    {
      "commit": "c6993bd135d45b4490bb565a45819b3df6a5b7d2",
      "tree": "7a08f226de5651b6fd3158f314328e1891fec219",
      "parents": [
        "71b9f6d026d7d47de41c4f26063999ad49025f8b"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@google.com",
        "time": "Fri Jul 07 06:40:47 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu Jul 13 15:32:58 2017"
      },
      "message": "Factor out test plan supported types\n\nFactor out variables to keep track to test plan\nsupported types\n\nBUG\u003dnone\nTEST\u003dmake test\n\nChange-Id: Iaa9e846e8f3d6c8f269b16c197a098a01a27b97d\nReviewed-on: https://chromium-review.googlesource.com/563145\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "71b9f6d026d7d47de41c4f26063999ad49025f8b",
      "tree": "fc8d08250bd5f908cab0380f7cf06e7ee78aa33e",
      "parents": [
        "ae245d426d42af73eccdec6fe5798b0318a9d25e"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Jul 13 06:05:48 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu Jul 13 13:51:36 2017"
      },
      "message": "inst: Add VALID_PORT_NAMES field to declare the valid ports.\n\nIn the port config file, we maps each antenna of DUT to the port of\nthe instrument. VALID_PORTS field is used to declare the valid port\nnames of the instrument. Then we check the port name when we load\nthe port config.\n\nBUG\u003dchromium:713589\nTEST\u003dmake test\n\nChange-Id: I6910e5b43c6853561fafb4d444b5c706b470cf61\nReviewed-on: https://chromium-review.googlesource.com/569280\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\n"
    },
    {
      "commit": "ae245d426d42af73eccdec6fe5798b0318a9d25e",
      "tree": "41efa9b3797071d398dbe70a347ff8f81effaa64",
      "parents": [
        "1a3a32c0f95a361b0e7584afadc8012cbd405eb7"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Tue Jul 04 06:31:21 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Jul 04 13:51:01 2017"
      },
      "message": "graphyte_utils: Add `LogAllMethods` decorator.\n\nWhen implementing the plugin, we usually wrap the partners\u0027 tools or\nAPIs. In this case, `LogAllMethods` decorator can be used to log all\nthe method calls of a certain class.\n\nBUG\u003dnone\nTEST\u003dmake test\n\nChange-Id: If3f2ebc273182df63c8686040d15ca93411626f1\nReviewed-on: https://chromium-review.googlesource.com/558894\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\n"
    },
    {
      "commit": "1a3a32c0f95a361b0e7584afadc8012cbd405eb7",
      "tree": "30243b9e4b7c3c50c64c74c05cd14496c5385808",
      "parents": [
        "e484d1d9843c6ebd7849d0115d30f0df3e2e22d8"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@google.com",
        "time": "Tue May 23 11:32:51 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Jun 14 08:19:32 2017"
      },
      "message": "graphyte: more debug log\n\nIn CallOutput(), no exception is thrown if the command is not executed\nsuccessfully. Ideally, the caller should be aware that the return value\nmight be None if something goes wrong, but some may not ne aware of this.\nTo make debugging more easily, a debug log is recorded. Debugger can\nrun in verbose mode to see the error log in the console.\n\nBUG\u003dnone\nTEST\u003dmanually test\n\nChange-Id: I59d9847c658401b2439478265345172df885d131\nReviewed-on: https://chromium-review.googlesource.com/512683\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "e484d1d9843c6ebd7849d0115d30f0df3e2e22d8",
      "tree": "eebeb155927e262280b238b92cbca7decbd1006b",
      "parents": [
        "197d3841775d8d6dad43910b7e2d56c3489ab54d"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@google.com",
        "time": "Mon May 22 04:26:23 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Jun 13 09:13:03 2017"
      },
      "message": "Graphyte: Use README.md\n\nSwitch to use README.md to show some useful information on the\nsource code website:\nhttps://chromium.googlesource.com/chromiumos/graphyte/\n\nBUG\u003dnone\nTEST\u003dnone\n\nChange-Id: I7b9903ff86be050a24cc548317225a5d6e6ce7f9\nReviewed-on: https://chromium-review.googlesource.com/510465\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Wei-Han Chen \u003cstimim@chromium.org\u003e\n"
    },
    {
      "commit": "197d3841775d8d6dad43910b7e2d56c3489ab54d",
      "tree": "a300f78c29bfffd8f67619010fe57ff29ba4c4d7",
      "parents": [
        "51c13d169e7dcf7f9acbafbebd373cd6b310ed86"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@google.com",
        "time": "Tue May 23 10:11:05 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Thu Jun 01 07:51:39 2017"
      },
      "message": "graphyte: stop when initialization failed\n\nWhen initializing the instrument and/or the DUT, the script is now\nstopped as early as possible when it detects an error. This makes it\neasier to trace from the console output message. Now, if the instrument\nor the DUT cannot be correctly initialized, the last line of the console\noutput will say it clearly.\n\nBUG\u003dnone\nTEST\u003dturn off the instrument, run graphyte, and check the console output.\nTEST\u003dturn off the DUT, run graphyte, and check the console output\n\nChange-Id: I39568cdd2f0b5ddac84f64b0f7c68e9c92d833a3\nReviewed-on: https://chromium-review.googlesource.com/512682\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "51c13d169e7dcf7f9acbafbebd373cd6b310ed86",
      "tree": "7e8468749e0dc15b3fe293e0730f8af741f2c0b5",
      "parents": [
        "b2d7015c3721926cc39018e778790cd2c463534e"
      ],
      "author": {
        "name": "Shen-En Shih",
        "email": "petershih@google.com",
        "time": "Mon May 22 04:26:00 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon May 22 12:02:46 2017"
      },
      "message": "Graphyte: refine make (default)/install/dist\n\nRefine the makefile to support following operations:\n* Build (default): make\n  Note: No build step is required\n* Install: make install\n  Use pip install\n* Distribution: make dist\n  Generate a tarball to distribute to another machine.\n\nBUG\u003dnone\nTEST\u003dmanually test\n\nChange-Id: I683eab73b64e998ae3cf3ec696beef43cef4ffb6\nReviewed-on: https://chromium-review.googlesource.com/510464\nCommit-Ready: Shen-En Shih \u003cpetershih@chromium.org\u003e\nTested-by: Shen-En Shih \u003cpetershih@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "b2d7015c3721926cc39018e778790cd2c463534e",
      "tree": "4a4e2d0558f8b0413a48cc660b5db37df6551e05",
      "parents": [
        "bc2b13103ce78ca1ff99296b0762629317fb979e"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Apr 20 09:29:56 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Apr 26 16:21:05 2017"
      },
      "message": "Explicitly call the functions of RF controller.\n\nWe separate the plugin API to two layers: device layer and\nRF controller layer. Originally, we called the function of the\nRF controller by __getattr__, which means that if the device doesn\u0027t\nhave the function, then we find the function from the active\ncontroller.\n\nBut it causes bug that both layers have \"Initialize\" and \"Terminate\"\nfunctions. The functions of the RF controller will not be called and\nit is confusing to find which function is called.\n\nNow we explicitly call the RF controller function by:\ndevice.active_controller.Function() instead of using __getattr__, and\nchange \"_Initialize\", \"_Terminate\" functions optional.\n\nBUG\u003dchromium:713589\nTEST\u003dnone\n\nChange-Id: Ie34a71358d621b8b84b40d516aa1cde27e116bb0\nReviewed-on: https://chromium-review.googlesource.com/483260\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Joel Kitching \u003ckitching@chromium.org\u003e\n"
    },
    {
      "commit": "bc2b13103ce78ca1ff99296b0762629317fb979e",
      "tree": "d5db5a2b80dfed2c411d6429bb45a78d20369fbe",
      "parents": [
        "a74b27b2fd674dc006d7cadff285defdcbeed425"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Apr 20 08:18:52 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Apr 26 14:17:33 2017"
      },
      "message": "Remove TxConfig and RxConfig API.\n\nOriginally we plan to accelerate the execution time by parallelly\nrunning the config function of DUT and instrument. But it turns\nout that simplifying the API to make the development easier is\nmore important than the speed. Therefore, we combine the functions\nto the later one. For example, the command sequence of Tx test is:\n\n- dut.TxConfig\n- inst.TxConfig\n- dut.TxStart\n- inst.TxMeasure\n- dut.TxStop\n- return inst.TxGetResult\n\nSo the logic of dut.TxConfig moves to dut.TxStart, and the logic of\nisnt.TxConfig moves to inst.TxMeasure.\n\nBUG\u003dchromium:713589\nTEST\u003dmake test\n\nChange-Id: I34a28722d9ec5c2db22728204056f7d1bb989a4c\nReviewed-on: https://chromium-review.googlesource.com/483180\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Joel Kitching \u003ckitching@chromium.org\u003e\n"
    },
    {
      "commit": "a74b27b2fd674dc006d7cadff285defdcbeed425",
      "tree": "afaf7eb9029e3c3a9cfa2955ce341155ac04a749",
      "parents": [
        "a41e565e216465f30d556a33205d27d7b90bdcc9"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Apr 20 07:03:30 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Apr 26 14:17:33 2017"
      },
      "message": "Remove inst.SelfCalibrate.\n\nWe plan to calibrate the instrument by this API, but we find out in\nthe real case we should calibrate the instrument before running the\nGraphyte. Therefore we deprecate this function.\n\nBUG\u003dchromium:713589\nTEST\u003dnone\n\nChange-Id: If2520054de2e263435736c4d81dda0f0245289d9\nReviewed-on: https://chromium-review.googlesource.com/483179\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Joel Kitching \u003ckitching@chromium.org\u003e\n"
    },
    {
      "commit": "a41e565e216465f30d556a33205d27d7b90bdcc9",
      "tree": "477a2612eb8dc567121d0ed417f1ee026cf411fc",
      "parents": [
        "3708122b40476f85a15a46d96cf8da007796e0c7"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Mar 31 14:19:09 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Apr 18 12:34:26 2017"
      },
      "message": "n1914a: support multiple port.\n\nOriginally keysight n1914a plugin only support measurement of\nport A. Now we support port A and port B.\n\nBUG\u003dchromium:707213\nTEST\u003dnone\n\nChange-Id: Ifd27c27e2cb5548c329a608098a2d9d02b9cbecb\nReviewed-on: https://chromium-review.googlesource.com/464587\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Wei-Han Chen \u003cstimim@chromium.org\u003e\n"
    },
    {
      "commit": "3708122b40476f85a15a46d96cf8da007796e0c7",
      "tree": "a450a52100f0d4fd54103ae69b5e2fb7a17c0c0a",
      "parents": [
        "8c097e331c72dc040fc35b6c99a324d3fcc2117e"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Feb 20 04:31:17 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Apr 18 12:34:26 2017"
      },
      "message": "pylint: allow UPPERCASE_WITH_UNDERLINE variable.\n\nIn convention, we use UPPERCASE_WITH_UNDERLINE for constant variable.\n\nBUG\u003dnone\nTEST\u003dnone\n\nChange-Id: I46c891a4b1623f6ffdff79626b660007ae7b4e5b\nReviewed-on: https://chromium-review.googlesource.com/444693\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Wei-Han Chen \u003cstimim@chromium.org\u003e\n"
    },
    {
      "commit": "8c097e331c72dc040fc35b6c99a324d3fcc2117e",
      "tree": "2769f66b52981aa6cb35ba1012066d8e2b81b462",
      "parents": [
        "99a1183a4f4f9a85f17295d8043e7c147c8fe869"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Mar 16 10:07:23 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Sat Mar 25 18:43:54 2017"
      },
      "message": "Remove __del__ functions and terminate connection explicitly.\n\nOriginally, we rely on __del__ to clean connection, close files, but\nthe __del__ function is not so reliable. It won\u0027t be called in some\ncorner cases. For example, the cyclic link trick that prevents to\ntrigger garbage collection.\n\nAnother case is that if we call logging function in __del__ of other\ninstance, and logging module is already close the logging file, then\nit will reopen the logging file and truncate all content of the file.\n\nTherefore, we replaced all __del__ method with \"Close\" and called it\nexplicitly before the program ends.\n\nBUG\u003dnone\nTEST\u003dmake test\n\nChange-Id: I0e741585085de150306e04f2140ba1b8a0dd6bca\nReviewed-on: https://chromium-review.googlesource.com/455717\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Joel Kitching \u003ckitching@chromium.org\u003e\n"
    },
    {
      "commit": "99a1183a4f4f9a85f17295d8043e7c147c8fe869",
      "tree": "a459b9efcb112962f986c42c77719e73c4816384",
      "parents": [
        "5b4f31c7f37cfc6d59d9f2548979c28486bc50e4"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Mar 16 10:01:50 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Mar 21 12:02:07 2017"
      },
      "message": "Create DeviceBase class.\n\nThe structure of DUT and instrument class is similar, so we created\na DeviceBase class as their parent class.\n\nBUG\u003dnone\nTEST\u003dnone\n\nChange-Id: If35b28d8490d63a6dd2b918b8079bc32f8303a10\nReviewed-on: https://chromium-review.googlesource.com/456183\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Joel Kitching \u003ckitching@chromium.org\u003e\n"
    },
    {
      "commit": "5b4f31c7f37cfc6d59d9f2548979c28486bc50e4",
      "tree": "689ea9652173da7a0a362d95310a61de2ff0f060",
      "parents": [
        "c63233a40044e4aa5fb9a57a85d25df8ec3cd447"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Mar 13 09:32:50 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Mar 21 12:02:07 2017"
      },
      "message": "Fix the logging file is trucated.\n\nlogging module closes the file handler at \"atexit\" shutdown hook. If\na logging function is called at any \"__del__\" method, it will reopen\nthe file and write the content back. Therefore if we use \"write mode\"\nto open log file, the file content will be trucated.\n\nNow we remove the original log file at the beginning, and use\n\"append mode\" to open the log file. If any logging functions are\ncalled in __del__ method, then the log file will be reopened with\n\"append mode\" as well. Therefore the file won\u0027t be trucated.\n\nBUG\u003dnone\nTEST\u003dmanually test\n\nChange-Id: I4f61d324a9fc26f0d596a2cd1b4e41b53b60893a\nReviewed-on: https://chromium-review.googlesource.com/453581\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Joel Kitching \u003ckitching@chromium.org\u003e\n"
    },
    {
      "commit": "c63233a40044e4aa5fb9a57a85d25df8ec3cd447",
      "tree": "295fa54cc4d9df1c49b702bb9662ec91126e6d9d",
      "parents": [
        "dd04ba6f05d6b2324e9cd4c253bba0173650deb1"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Mar 13 08:45:21 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Mar 21 12:02:07 2017"
      },
      "message": "Add `PowerMetercontrollerBase` class.\n\nThe RF controller of the power meter should be able to measure all\nkinds of RF type. Therefore we set the dafault RF type \"ALL\" that\naccepts every RF type.\n\nBUG\u003dchromium:681734\nTEST\u003dmake test\n\nChange-Id: I20578bf285fb2b21968c477ff910c7a0e3e91968\nReviewed-on: https://chromium-review.googlesource.com/453580\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Joel Kitching \u003ckitching@chromium.org\u003e\nReviewed-by: Wei-Han Chen \u003cstimim@chromium.org\u003e\n"
    },
    {
      "commit": "dd04ba6f05d6b2324e9cd4c253bba0173650deb1",
      "tree": "ad8fc99ef2aa9f6a3a2547699abf74b6a941bb69",
      "parents": [
        "e6f98087c8bd9420bebf4e0f28cc52cbca61fa20"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Feb 23 08:29:48 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Mar 20 17:33:11 2017"
      },
      "message": "Port utils modules and SSH control master.\n\nTo reduce the testing time for SSH link device, we ported the\ncontrol master from factory repo. Also ported the related utils\nmodules.\n\nBUG\u003dchromium:698650\nTEST\u003dmake test\n\nChange-Id: I1c901fccf7f158abb407754dffcbcf34c16559a5\nReviewed-on: https://chromium-review.googlesource.com/446198\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Wei-Han Chen \u003cstimim@chromium.org\u003e\n"
    },
    {
      "commit": "e6f98087c8bd9420bebf4e0f28cc52cbca61fa20",
      "tree": "d2c14eec28de11027fc4c4cdbb130e3d16364e9d",
      "parents": [
        "d99e1e86ab38819c880d48dfea1445d2fe02aee1"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Feb 22 04:35:34 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Feb 22 14:31:41 2017"
      },
      "message": "device: keep test type and rf type in test case.\n\nSince some plugins still needs the information, we keep it in the\ntest case.\n\nBUG\u003dnone\nTEST\u003dnone\n\nChange-Id: I7fdf98b0e8c23166ebbcab56e3630986c9d81721\nReviewed-on: https://chromium-review.googlesource.com/446236\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\n"
    },
    {
      "commit": "d99e1e86ab38819c880d48dfea1445d2fe02aee1",
      "tree": "3aac6b1771553003ee0047a0d0bbf2bd6b039a2d",
      "parents": [
        "68ab9f05b8fea271f2b29ab0116d53a8d26ca823"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Tue Jan 17 03:36:12 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Jan 18 13:28:27 2017"
      },
      "message": "Change TxConfig and RxConfig as optional implementation.\n\n`TxConfig` or `RxConfig` is aimed to configure the device setting\nbefore transmitting or receiving. But in practice we just implemented\nthe configuration in the TxStart or RxMeasure in most case.\nWe will consider to remove these APIs later.\n\nBUG\u003dchromium:681734\nTEST\u003dmake test\n\nChange-Id: Ib2173e8db08272fc69a77b333828b0185fdcdf19\nReviewed-on: https://chromium-review.googlesource.com/428480\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Joel Kitching \u003ckitching@chromium.org\u003e\n"
    },
    {
      "commit": "68ab9f05b8fea271f2b29ab0116d53a8d26ca823",
      "tree": "291df6e08b603973626778b96f3c0c38fda3581f",
      "parents": [
        "70947d878ab885e4944d72dd7b9feda1fa5d82a7"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Dec 19 04:18:26 2016"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Wed Jan 18 13:28:25 2017"
      },
      "message": "Remove test_type and rf_type argument in each API.\n\nThese two arguments are for function delegation. After delegating to\nthe API, they are useless. Also fixed the style of the docstring.\n\nBUG\u003dchromium:681734\nTEST\u003dmake test\n\nChange-Id: I762b7d1b334663e602e448604f27e4ef6b62312f\nReviewed-on: https://chromium-review.googlesource.com/428479\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Joel Kitching \u003ckitching@chromium.org\u003e\n"
    },
    {
      "commit": "70947d878ab885e4944d72dd7b9feda1fa5d82a7",
      "tree": "1f32306c488b42b2f5c0dc44c09100d7e14f1144",
      "parents": [
        "d556c498ee2b1d91a6d5811fb70edbc9bef4d87f"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Tue Jan 17 03:25:02 2017"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Tue Jan 17 09:51:23 2017"
      },
      "message": "Add the rx_number_packets and rx_number_bits in Bluetooth Rx API.\n\nThere are 3 kinds of packet type in Bluetooth testing: BDR, EDR, and\nLE. We measure packet error rate in LE, and measure bit error rate in\nBDR and EDR. Therefore we need the number of transmitted packets in\nLE, otherwise the number of transmitted bits. Add these two arguments\nin each Bluetooth Rx API with default value \"None\".\n\nBUG\u003dchromium:681734\nTEST\u003dmake test\n\nChange-Id: I3fd5abec604f6e4f9f6956846f14133403713e05\nReviewed-on: https://chromium-review.googlesource.com/428478\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Joel Kitching \u003ckitching@chromium.org\u003e\n"
    },
    {
      "commit": "d556c498ee2b1d91a6d5811fb70edbc9bef4d87f",
      "tree": "88ba1d3c61cd2db0f29dc8c3f0409aa7f2e1139e",
      "parents": [
        "a11f21a113daf27c3a9d47ce6f1bec7ef6fba824"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Dec 12 06:24:34 2016"
      },
      "committer": {
        "name": "chrome-bot",
        "email": "chrome-bot@chromium.org",
        "time": "Mon Dec 12 13:22:13 2016"
      },
      "message": "links: Port local link from cros.factory.device.links.\n\nBUG\u003dnone\nTEST\u003dnone\n\nChange-Id: I7cdb8669257bb713e6e488f8d25d95005598be3d\nReviewed-on: https://chromium-review.googlesource.com/418540\nCommit-Ready: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nTested-by: Chih-Yu Huang \u003cakahuang@chromium.org\u003e\nReviewed-by: Wei-Han Chen \u003cstimim@chromium.org\u003e\n"
    },
    {
      "commit": "a11f21a113daf27c3a9d47ce6f1bec7ef6fba824",
      "tree": "ed73f7d9c9eb16857e63c094c321df70328efc27",
      "parents": [
        "6aeec39b0d11aefc7fa8ee588c978381479d5872"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Aug 17 09:01:22 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Sep 12 07:34:54 2016"
      },
      "message": "testplan: logging all failed result.\n\nOriginally we only log the first failed result. Now we log all the\nfailed and missing result.\nAlso updated the docstring of some methods.\n\nBUG\u003dnone\nTEST\u003dmake lint\n\nChange-Id: Ife7b4426ace538c4d88966b4c8c04a1253aac65e\n"
    },
    {
      "commit": "6aeec39b0d11aefc7fa8ee588c978381479d5872",
      "tree": "907286d1df218f2d5491046a01773393f2757f5b",
      "parents": [
        "1384908f41033e112f7638b3276ed42301d254f7"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Jul 20 09:51:43 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Sep 12 03:12:49 2016"
      },
      "message": "Change the device config loading flow and code structure.\n\nWe change the loading flow of the device config. Now it has 3-layer\nconfig setting: default config file, overridden config file, and\noverridden config.\n\nNote that originally `dut_config` refers to the config file path.\nBut now `dut_config` refers to the dict and `dut_config_file`\nrefers the overridden config file path.\nPlease refer go/graphyte-doc for more detail.\n\nWe also change the code structure of the plugin. Originally the device\nplugin should be placed at\n  graphyte/{dut,inst\u003e/\u003cplugin_name\u003e/\u003cplugin_name\u003e.py\nNow we change to place the plugin at\n  graphyte/{dut,inst\u003e/\u003ccompany_name\u003e/\u003cdevice_name\u003e.py\n\nFor example, we move\n  graphyte/inst/anritsu_ml2437a/anritsu_ml2437a.py\nto\n  graphyte/inst/anritsu/ml2437a.py\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: I0f36e6da6f83cd653b1ecbdb46cedccaaaa5a229\n"
    },
    {
      "commit": "1384908f41033e112f7638b3276ed42301d254f7",
      "tree": "e4055ec8fde862bce71e33cd4aeb7fb169939c2f",
      "parents": [
        "c8431b5cb2db180f55d0003b472807418c8b5b36"
      ],
      "author": {
        "name": "Wei-Han Chen",
        "email": "stimim@google.com",
        "time": "Thu Aug 18 04:51:32 2016"
      },
      "committer": {
        "name": "Wei-Han Chen",
        "email": "stimim@google.com",
        "time": "Wed Aug 24 02:44:36 2016"
      },
      "message": "graphyte: ssh: don\u0027t quote commands if it was a string\n\nWhen the command is given by a string, e.g:\n  \"echo 123 \u003e/tmp/abc\"\n\nwe first split it into tokens:\n  [\u0027echo\u0027, \u0027123\u0027, \u0027\u003e/tmp/abc\u0027]\n\nand then, we should not quote these tokens, otherwise it will become:\n  [\u0027echo\u0027, \u0027123\u0027, \"\u0027\u003e/tmp/abc\u0027\"]\n\nwhich is not redirect output to /tmp/abc, but an additional argument\n\u0027\u003e/tmp/abc\u0027 for command echo.\n\nBUG\u003dNone\nTEST\u003dmanual\n\nChange-Id: I16e75ffa4085555e0d4086b0426ab07def4fedef\n"
    },
    {
      "commit": "c8431b5cb2db180f55d0003b472807418c8b5b36",
      "tree": "28a940e0453d40e3e9b86b9912e478481cbcc737",
      "parents": [
        "b4332b83e4f954d0a3589164ef4aded2e1300c36",
        "0d0e5da2bb6faf652d99f367f156622321289e3d"
      ],
      "author": {
        "name": "ChromeOS Commit Bot",
        "email": "chromeos-commit-bot@chromium.org",
        "time": "Mon Aug 22 10:34:46 2016"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 22 10:34:47 2016"
      },
      "message": "Merge \"Implement Keysight N1914a plugin.\""
    },
    {
      "commit": "b4332b83e4f954d0a3589164ef4aded2e1300c36",
      "tree": "cbcd6bdc3a9dd3e5c0a0f99a1fbf995b6ec5e753",
      "parents": [
        "1aeafe6ae813c5758dc5dfd24ef2019a3f5f0ca8",
        "9c327e4fa6c52d273396017d40839022fa20d931"
      ],
      "author": {
        "name": "ChromeOS Commit Bot",
        "email": "chromeos-commit-bot@chromium.org",
        "time": "Mon Aug 22 10:34:40 2016"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 22 10:34:40 2016"
      },
      "message": "Merge \"link: Implement SCPI link class.\""
    },
    {
      "commit": "0d0e5da2bb6faf652d99f367f156622321289e3d",
      "tree": "12e110574204035cb514929a72519481d5da5c90",
      "parents": [
        "9c327e4fa6c52d273396017d40839022fa20d931"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon May 30 10:21:38 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Aug 22 09:19:06 2016"
      },
      "message": "Implement Keysight N1914a plugin.\n\nN1914a is a power meter with SCPI interface. The implementation of\nthe plugin is referenced by the Keysight official document:\nN1913A/N1914A EPM series Power Meter Programming Guide.\n\nBUG\u003db:27818897\nTEST\u003dmanually\n\nChange-Id: Ia40db44bc22ad169f8578a56c4e61159eb72a333\n"
    },
    {
      "commit": "9c327e4fa6c52d273396017d40839022fa20d931",
      "tree": "257a72d43369a05d64867ed83848fea630542cf7",
      "parents": [
        "b96328f234efe82a8105479422d5f3e5c6b92360"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon May 30 07:41:44 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Aug 22 09:19:00 2016"
      },
      "message": "link: Implement SCPI link class.\n\nSCPI link is used for the instrument that use SCPI-over-TCP interface.\nIt creates a socket connection, and sends SCPI command over it.\n\nBUG\u003db:27818897\nTEST\u003dmake test; make lint\n\nChange-Id: I5ec3b599c2371a32aa474117ceb15041b22154af\n"
    },
    {
      "commit": "1aeafe6ae813c5758dc5dfd24ef2019a3f5f0ca8",
      "tree": "5a238c136f5bf09c1d29d91be85c299647152c47",
      "parents": [
        "b96328f234efe82a8105479422d5f3e5c6b92360",
        "da3724c5482714ef09676a99338f946908894f38"
      ],
      "author": {
        "name": "ChromeOS Commit Bot",
        "email": "chromeos-commit-bot@chromium.org",
        "time": "Mon Aug 22 06:19:19 2016"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 22 06:19:19 2016"
      },
      "message": "Merge \"anritsu: move duty cycle as argument.\""
    },
    {
      "commit": "da3724c5482714ef09676a99338f946908894f38",
      "tree": "b88c86f4f7eea42df8d54f7f50691ff933d6afa4",
      "parents": [
        "19905862042794a8000463e80429725086ac3914"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Aug 17 09:08:48 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Aug 17 09:08:48 2016"
      },
      "message": "anritsu: move duty cycle as argument.\n\nWe might use the power meter to measure continuous wave or\nframe-based signal in each of RF type. So move the duty cycle to\nconfig and pass into the plugin.\n\nBUG\u003dnone\nTEST\u003dmake lint\n\nChange-Id: I6c329ca356cd8415e17cac7ea6bfcb72dbced168\n"
    },
    {
      "commit": "b96328f234efe82a8105479422d5f3e5c6b92360",
      "tree": "b7c799f1eb77e1a7bf6727293cb0af9429397783",
      "parents": [
        "19905862042794a8000463e80429725086ac3914"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Jul 20 09:48:18 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Aug 12 02:47:41 2016"
      },
      "message": "setup.py: use setuptools to replace distutils\n\nWe use `find_packages` method to find all the plugin module, so we\nchange to use setuptools.\n\nBUG\u003dnone\nTEST\u003dmake test\n\nChange-Id: I09a0dc007d74859b9505d111aed0f29b44084f94\n"
    },
    {
      "commit": "19905862042794a8000463e80429725086ac3914",
      "tree": "f5d19d107eaf3661c485be5b7103c0c01471bc93",
      "parents": [
        "744e20501342c6198b9f56f640d682156a85370c",
        "0979584255f43023c854611e1087773a0f80b1cc"
      ],
      "author": {
        "name": "ChromeOS Commit Bot",
        "email": "chromeos-commit-bot@chromium.org",
        "time": "Mon Aug 08 06:35:39 2016"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 08 06:35:40 2016"
      },
      "message": "Merge \"anritsu: add duty cycle method.\""
    },
    {
      "commit": "744e20501342c6198b9f56f640d682156a85370c",
      "tree": "298e6fb76c9f0a006702fcb90f8d017770031f46",
      "parents": [
        "fe0ad8145cbc0e72351b44f97ca87079ed9b0b46"
      ],
      "author": {
        "name": "Wei-Han Chen",
        "email": "stimim@google.com",
        "time": "Mon Jul 25 07:18:47 2016"
      },
      "committer": {
        "name": "Wei-Han Chen",
        "email": "stimim@google.com",
        "time": "Mon Jul 25 07:18:47 2016"
      },
      "message": "graphyte: ssh link: convert DOS path to Unix path\n\nThe SCP command on windows has trouble to deal with DOS paths (e.g.\nC:\\path\\to\\file), but works fine if we convert it to Unix paths (e.g.\n/c/path/to/file).\n\nTherefore, if graphyte is running on Windows machine, convert local\npath (path on Windows machine) to Unix style before calling SCP.\n\nTEST\u003dmanual\nBUG\u003dNone\n\nChange-Id: If7a1ab22fb1ecb69ebd4bff88cd856e6a3bd4522\n"
    },
    {
      "commit": "fe0ad8145cbc0e72351b44f97ca87079ed9b0b46",
      "tree": "1bcdc976c04400344848e4e3fa09f8cd366012ac",
      "parents": [
        "4c1006232c2d502c020c774723c04f253a82f8db"
      ],
      "author": {
        "name": "Wei-Han Chen",
        "email": "stimim@google.com",
        "time": "Mon Jul 25 06:54:08 2016"
      },
      "committer": {
        "name": "Wei-Han Chen",
        "email": "stimim@google.com",
        "time": "Mon Jul 25 06:54:08 2016"
      },
      "message": "graphyte: ssh link: better support of SHELL commands\n\nOn windows, if we\u0027d like to execute shell commands (might contain\nredirecting IOs, assigning environment variables etc), the pipes.quote\ndoes not work for windows default shell.\n\nTo make it work on windows, we don\u0027t use the \"shell\u003dTrue\" argument, but\nsplit the shell command into tokens and call SSH by argument list.\n\nThat is, if we\u0027d like to execute \u0027VAR\u003dX cmd arg0 arg1 \u003ef 2\u003eg\u0027.\nWe used to do subprocess call by:\n  call(\u0027ssh \u003cSSH OPTIONS\u003e \u003cpipes.quote(\u0027VAR\u003dX cmd arg0 arg1 \u003ef 2\u003eg\u0027)\u003e\u0027,\n       shell\u003dTrue)\nNow we do:\n  call([\u0027ssh\u0027, \u003cSSH OPTIONS\u003e..., \u0027VAR\u003dX\u0027, \u0027cmd\u0027, \u0027arg0\u0027, \u0027arg1\u0027, ...])\n\nBUG\u003dNone\nTEST\u003dmanual\n\nChange-Id: Id045133ca41629fcf5ba8860882957ab7955a7a9\n"
    },
    {
      "commit": "4c1006232c2d502c020c774723c04f253a82f8db",
      "tree": "896a5c7fb5a72e72a6eeccfe0bd4fb0fb6212781",
      "parents": [
        "35c6bc6008907ea4e31cedc7b55642f7cc228a7f"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Jul 01 00:04:41 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Jul 20 03:03:20 2016"
      },
      "message": "graphyte: add retry mechanism.\n\nWhen the testing environment is unstable, we need to add the retry\nmechanism to stabilize the test. Now we can add \"retries\" in the\nconfig file to enable the functionality. Each test item will be\nretried individually.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: I2b10312b903f7738067c04289eacac2a169f7d8c\n"
    },
    {
      "commit": "35c6bc6008907ea4e31cedc7b55642f7cc228a7f",
      "tree": "613c90572322df99a7231745c5f0c39ae9ee70e2",
      "parents": [
        "b09428c50c33ffe99f182adabb56319678e00423"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Jul 18 11:01:13 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Tue Jul 19 03:23:41 2016"
      },
      "message": "result_writer: Split the result of multi-antenna.\n\nThe result of multi-antenna test item might be a number or a\ndictionary, which key is antenna index and value is the actual result.\nOriginally we output the dictionary-style value to the CSV file.\nSuch as:\n  {0: 10.1, 1: 9.9}\nBut it increases the complexity of post-processing, so now we split\nthe data into multiple line, and add suffix at the name of test item.\nThe name of test item should be ended like:\n  ANTENNA-01-0\nwhich means the test item enables antenna 0 and 1, and the result is\nfor antenna 0.\n\nBUG\u003dnone\nTEST\u003dmake test\n\nChange-Id: Iae0f61a734c8ac52c3f24cddc3d16861fe765718\n"
    },
    {
      "commit": "0979584255f43023c854611e1087773a0f80b1cc",
      "tree": "8eda6b495196ea9039f44750403d1d8be03994e3",
      "parents": [
        "b09428c50c33ffe99f182adabb56319678e00423"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Jul 13 08:59:31 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Jul 18 07:23:48 2016"
      },
      "message": "anritsu: add duty cycle method.\n\nWhile we measure the pulse wave instead of continuous wave, we\nshould set the duty cycle and modulated average config.\n\nBUG\u003dnone\nTEST\u003dmanual\n\nChange-Id: Ifb01307a8557d246d473042d711aa4e3df1a962a\n"
    },
    {
      "commit": "b09428c50c33ffe99f182adabb56319678e00423",
      "tree": "942145615d74f93eff8b6057f2a16aea077ebcf5",
      "parents": [
        "b04f3da1fe43ba4b8c328c527d91d409b5991cec"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Jun 16 03:50:55 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Jun 27 17:48:50 2016"
      },
      "message": "testplan: add `freq_drift` result in Bluetooth BDR.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: I2fbb768db5c9005cc6195c86a28051677f11c6e3\n"
    },
    {
      "commit": "b04f3da1fe43ba4b8c328c527d91d409b5991cec",
      "tree": "fcaae4ca2bdc943a2ee4b9f57451de675823c704",
      "parents": [
        "5536269c747efa81c19259827efe0571048c1e6c"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Tue Jun 14 11:07:17 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon Jun 27 17:48:44 2016"
      },
      "message": "utils: Implement LogFunc decorator.\n\nThe decorator would log the method and the arguments while the\nmethod is called. It is useful for tracking partner\u0027s API\ncalling sequence.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: I984789528f6eb16da6014bc895ef10f3a71e10d7\n"
    },
    {
      "commit": "5536269c747efa81c19259827efe0571048c1e6c",
      "tree": "dfc7b604e61c63d9cb63b4f59ca8921987bf6407",
      "parents": [
        "ac36172e22c3eef0820e4a06d66135395056585b"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Tue Jun 14 06:33:42 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Jun 17 10:39:31 2016"
      },
      "message": "Update the initialization flow of DUT and instrument.\n\nOriginally, the initialization flow of DUT and instrument are\ndifferent. The intrument only call initialize method once before all\ntests running, and the DUT call initialize method while the RF type\nis changed. Because we assume the instrument initialization does not\ndepend on the RF type, but DUT does.\n\nNow both DUT and instrument plugins have two-level initialize and\nterminate method, device level and RF controller level. Before the\ntests are executed, the initialize method of device level will be\ncalled. When we change the RF type, the initialize method of RF\ncontroller level will be called. Here is the pseudo code:\n\n  device.Initialze()\n  for each RF type:\n    device.RFController.Initialze()\n    Execute tests of this RF type\n    device.RFController.Terminate()\n  device.Terminate()\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: Ic698e642d141dae95d108c13152fe39e8f4f8302\n"
    },
    {
      "commit": "ac36172e22c3eef0820e4a06d66135395056585b",
      "tree": "98927d8beef5b86eb9edf862c8018d84bc4f1a74",
      "parents": [
        "5e56dd43e459aa640a75b36b53d2eef777b9b04f"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Jun 02 09:29:14 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Jun 17 10:39:31 2016"
      },
      "message": "utils: add CalculateAverageResult.\n\nFor WLAN multi-antenna case, the result would be a dict where the key\nis the antenna index. So we need to handle this kind of situation in\nCalculateAverage method.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: Ie4ff8c7df1e29c65aeaf424ab19a775ce00f828e\n"
    },
    {
      "commit": "5e56dd43e459aa640a75b36b53d2eef777b9b04f",
      "tree": "f707f09904485a900807ad3921342cb92d69ad06",
      "parents": [
        "f5140c470b10f401d18dcbe0c5ebb1e3f209501c"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon May 09 10:34:18 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Jun 17 10:39:31 2016"
      },
      "message": "testplan: add Bluetooth Rx arguments and results.\n\nIn Bluetooth Rx test, we measure packet error rate (PER) in LE, and\nmeasure bit error rate (BER) in BDR and EDR. So we need to add\n`rx_num_packets` argument and `rx_per` result for LE, and add\n`rx_num_bits` argument and `rx_ber` result for BDR/EDR in the test plan.\n\nWe also calculate the number of packets for BDR and EDR while creating\nthe test item. In convention, the RF instrument would transmit the\npackets with maximum size in RX test, and transmit 10% more packets\nfor the packet loss.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: I00da0fb76ce88cdfb0c7d13e72e6a636b0bd4e5b\n"
    },
    {
      "commit": "f5140c470b10f401d18dcbe0c5ebb1e3f209501c",
      "tree": "bb09e8d807280fcbe4e6907a8ee04805f52bd216",
      "parents": [
        "538dc668809cecef07179d3000113317e0056056"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri May 13 08:50:17 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Jun 17 10:39:31 2016"
      },
      "message": "testplan: Update Bluetooth result list.\n\n- `freq_deviation` is only for BDR and EDR. LE has `freq_offset`.\n- Add BDR `delta_f1_avg`, `delta_f2_avg`, `delta_f2_max` result.\n- Change BDR `delta_f2_f1` to `delta_f2_f1_avg` for consistency.\n- `delta_f2_f1_avg` needs `F0` and `AA` patterns.\n\nAlso implement the delta_f2_f1_avg result in inst/__init__.py.\ndelta_f2_f1_avg is the ratio of delta_f2_avg and delta_f1_avg, but\nthese two results come from different bit patterns: F0 and AA. So we\nmeasure both results separately and store them. While both results are\nmeasured, then we calculate the delta_f2_f1_avg.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: Ic22329fd53ac4368d8ffc2a2241d67f6086f482f\n"
    },
    {
      "commit": "538dc668809cecef07179d3000113317e0056056",
      "tree": "d4747d8d7351498956241e245fbc6a61416a9a2c",
      "parents": [
        "5f3c9b20f7618eb7a1b31b24e7aa95616238c39b"
      ],
      "author": {
        "name": "Wei-Han Chen",
        "email": "stimim@google.com",
        "time": "Wed Jun 08 18:48:02 2016"
      },
      "committer": {
        "name": "Wei-Han Chen",
        "email": "stimim@google.com",
        "time": "Wed Jun 08 18:48:02 2016"
      },
      "message": "graphyte: add Retry\n\nRetry function wraps a callable object, and tries to call this object\nat most \u0027max_retry_times\u0027 times. The function call is considered\nsuccessful if the return value is non-empty. The return value will be\nreturned immediately when a call is success.\n\nBUG\u003dNone\nTEST\u003dNone\n\nChange-Id: Ic6aa5da8ae3bb4ffea472899a4d807d5e41124c6\n"
    },
    {
      "commit": "5f3c9b20f7618eb7a1b31b24e7aa95616238c39b",
      "tree": "b5fffbb5c4c19c3dcb9156aefdcf408e11ee5f7b",
      "parents": [
        "5e477947bd8bfd7bfe86d494775dae794b0ce1ef"
      ],
      "author": {
        "name": "Wei-Han Chen",
        "email": "stimim@google.com",
        "time": "Wed Jun 08 18:44:46 2016"
      },
      "committer": {
        "name": "Wei-Han Chen",
        "email": "stimim@google.com",
        "time": "Wed Jun 08 18:44:46 2016"
      },
      "message": "graphyte: add ReadFile, ReadSpecialFile\n\nThese function are copied from ChromeOS factory.\nReadFile: read the content of a normal file.\nReadSpecialFile: use \u0027dd\u0027 to read (a part of) file, the file can be a\n    special file such as GPIO values or block devices.\n\nBUG\u003dNone\nTEST\u003dNone\n\nChange-Id: I23f36acd56c54e229dd0583d71422407b51f06b6\n"
    },
    {
      "commit": "5e477947bd8bfd7bfe86d494775dae794b0ce1ef",
      "tree": "76d6b3e8b722405c282b857909ab974f2baa3f13",
      "parents": [
        "0f3d6f11989fc752f9be5341df990e74a2a2a433"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Tue May 17 11:10:16 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Jun 01 03:42:08 2016"
      },
      "message": "testplan: Update Bluetooth packet_type from DHx to 1DHx.\n\nFor naming consistency, we change the packet_type from:\nDH1 \u003d\u003e 1DH1\nDH3 \u003d\u003e 1DH3\nDH5 \u003d\u003e 1DH5\n\nBUG\u003dchrome-os-partner:47868\nTEST\u003dmake test; make lint\n\nChange-Id: Ibc9f26fc6893d2e5d711c956761d3c8472424d69\n"
    },
    {
      "commit": "0f3d6f11989fc752f9be5341df990e74a2a2a433",
      "tree": "9b61cd434f5072cf60c9a91c4548af2373d48410",
      "parents": [
        "b47bc676d7b40ff3db0b3909060a9916ed8eaf4b"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon May 23 07:22:57 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Jun 01 03:42:08 2016"
      },
      "message": "testplan: support MCS to 31.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: If8156a99e62650652c0f58ffea49c0750d15c8c5\n"
    },
    {
      "commit": "b47bc676d7b40ff3db0b3909060a9916ed8eaf4b",
      "tree": "41d37a3d9bb5cd8eeb1cf16a43b38511222e6bc2",
      "parents": [
        "73db19ba129645d98d7e053bdd10409d6a7d236c"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon May 30 10:50:26 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Jun 01 03:42:08 2016"
      },
      "message": "utils: move MakeMockPassResult to utils.py.\n\nIn sample_dut and sample_inst, we need to generate the pass results.\nIn this CL the method is moved to utils.py, and handle the case that\nthe lower bound and upper bound are both None.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: I39a888a0312ebf2611b98d1b7e93936884c0fa45\n"
    },
    {
      "commit": "73db19ba129645d98d7e053bdd10409d6a7d236c",
      "tree": "ac1717a9d655ba796f9c8b5e3b160ca362363305",
      "parents": [
        "33473a39837912acd84d3aa7e48eedc3707b64e3"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon May 30 10:35:40 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Jun 01 03:42:08 2016"
      },
      "message": "link: add WriteFile method.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: Idc18639ea4a1ed89d862462490435ef80457fe3c\n"
    },
    {
      "commit": "33473a39837912acd84d3aa7e48eedc3707b64e3",
      "tree": "38403ee251d242e0732b9c18b5baac0af75b191a",
      "parents": [
        "580bda4e7a244c7e8d80f13f1fe5faf8b2aa748c"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri May 20 08:25:13 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Jun 01 03:41:04 2016"
      },
      "message": "utils: add Enum method.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: I87e7cddf54d8d2b1b27b3dae9404a99a95d66811\n"
    },
    {
      "commit": "580bda4e7a244c7e8d80f13f1fe5faf8b2aa748c",
      "tree": "286fe2d3b36e2dc07e385003d023daa69c643ce0",
      "parents": [
        "5890a3c098d76865c1d8177d86a120ead346fa7d"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed May 11 09:37:35 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon May 30 11:02:25 2016"
      },
      "message": "Makefile: Search overlay from project-goofy-private.\n\nBUG\u003dnone\nTEST\u003dnone\n\nChange-Id: I996302eae1cb77443ba998f0e7acde493d9fa8ca\n"
    },
    {
      "commit": "5890a3c098d76865c1d8177d86a120ead346fa7d",
      "tree": "bb5b5b2e0d50d9e93d6e1233e3639a5165c715d0",
      "parents": [
        "28c6b36f6201389bc6719b0df97e29572bd11219"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon May 30 06:21:29 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Mon May 30 11:00:33 2016"
      },
      "message": "Update version to 0.2\n\nSince the Graphyte is successfully launched at the first project, we\nincrease the version number.\n\nBUG\u003dnone\nTEST\u003dnone\n\nChange-Id: Ib55dbe73676a86f7cdd4bbe74da2305c6cb36630\n"
    },
    {
      "commit": "28c6b36f6201389bc6719b0df97e29572bd11219",
      "tree": "ef91dc90c87895bb871ec5e36ca3ec25384f76eb",
      "parents": [
        "1a3f5a753f3825bdcfaf530c775e01d86370feda"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Tue May 10 06:29:34 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Tue May 10 06:32:55 2016"
      },
      "message": "utils: Import WaitFor method from factory.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: I3f5fdc6ba844ecd73e4492129ca10853f84b5734\n"
    },
    {
      "commit": "1a3f5a753f3825bdcfaf530c775e01d86370feda",
      "tree": "fa609aa64f06c804ab5b8661b4ef681143873491",
      "parents": [
        "64ed64a5153915b04e09f5735974f310c0018061"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Apr 20 09:23:25 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Apr 22 08:15:22 2016"
      },
      "message": "Makefile: Add FORMATS arguments.\n\nBecause we may deploy Graphyte to Windows platform, we add the\nmakefile argument to generate zip bundle file.\n\nBUG\u003dnone\nTEST\u003d`make FORMATS\u003dzip` and confirm the zip file is generated.\n\nChange-Id: Ie59a6ecd5b05e1e941d1986cee01300a71966795\n"
    },
    {
      "commit": "64ed64a5153915b04e09f5735974f310c0018061",
      "tree": "2e13fd14a905068e64e1b34a8aa9f969a909ba9e",
      "parents": [
        "9203d1e8da4aeadc8cd0b6e9f5e618df98da520a"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Apr 21 06:22:34 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Apr 22 08:13:26 2016"
      },
      "message": "inst: Add Graphyte IO and wait_inst class.\n\nIn environment setup, sometimes we need DUT to keep transmitting\nsignal to find the place to put the antenna, so we add an instrument\nwait_inst to let DUT transmit signal until we press enter button or\na fixed period.\nWe also create GRAPHTYE_IN and GRAPHYTE_OUT and separate the logic\nand the IO of the framework.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: Ife6e6ae2e2d624a788605b45c3812861faaac094\n"
    },
    {
      "commit": "9203d1e8da4aeadc8cd0b6e9f5e618df98da520a",
      "tree": "073b7da919755412ff363982d00280feadfdb044",
      "parents": [
        "5405a035fc173463a1692297335e046a0a2f3927"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Wed Apr 20 07:52:55 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Apr 21 04:00:09 2016"
      },
      "message": "dut/inst: Change the format of the __init__\n\nOriginally, we think the contruction of device instance is:\n- General setup, such as create link instance and initialize data member\n- Assign the RF controllers\nso we only split the setting RF controller part out to SetRFController\n\nBut we found out:\n- There are usually module-specific arguments need to set from config file\n- SetController need to be assigned at last of the __init__ because I will pass\n  the dut/inst instance into it, and it should be already initialized.\nAt the result, I have to override the __init__ method instead of implementing\nSetRFController only.\n\nNow we change to this way:\nDUTBase.__init__:\n- General setup: create link instance and initialize common arguments\nDUT.__init__:\n- Call DUTBase.__init__\n- Initialize the module-specific settings and arguments\n- Assign the RF controllers\nThis way provides more flexibility as well.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: Icea1c7bd7a4703db6179ebd07ddbe42be2206288\n"
    },
    {
      "commit": "5405a035fc173463a1692297335e046a0a2f3927",
      "tree": "184302705044809c384c3ea78dafeae4d0d35f49",
      "parents": [
        "4ce437b60665509c92001afa296fbb1ab65e0863"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Tue Apr 19 06:37:52 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Apr 21 03:43:37 2016"
      },
      "message": "Makefile: Add test and lint for overlay.\n\nWe plan to place the private instrument plugin at\n\"src/partner_private/graphyte-\u003cname\u003e\", and the DUT plugin at\nthe private overlay \"chromeos-base\" folder.\n\nBUG\u003dnone\nTEST\u003dmake test-overlay-\u003cname\u003e; make lint-overlay-\u003cname\u003e\n\nChange-Id: I63a16c793a935cf1b2e6fa09ce70041d27d8d2de\n"
    },
    {
      "commit": "4ce437b60665509c92001afa296fbb1ab65e0863",
      "tree": "d441b8e50805c610161e4c232518a6735b82a443",
      "parents": [
        "ad61fd76602c6922bf61cf3bd09532bda924967c",
        "d079ca0c3e7f66412c9546c89bf5674ea50b78e7"
      ],
      "author": {
        "name": "ChromeOS bot",
        "email": "3su6n15k.default@developer.gserviceaccount.com",
        "time": "Mon Apr 18 04:06:13 2016"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 18 04:06:13 2016"
      },
      "message": "Merge \"main: Move graphyte_main.py to graphyte/main.py\""
    },
    {
      "commit": "ad61fd76602c6922bf61cf3bd09532bda924967c",
      "tree": "bc11dda8daf189a384e03c760d2b8f8dc91c66a6",
      "parents": [
        "6ad5a86d49bcad7ab3775b89772bd398b3a8ee88",
        "430b90eac3469458dd663718adcf83062d858123"
      ],
      "author": {
        "name": "ChromeOS bot",
        "email": "3su6n15k.default@developer.gserviceaccount.com",
        "time": "Mon Apr 18 04:06:09 2016"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 18 04:06:09 2016"
      },
      "message": "Merge \"ssh: Set close_fds False at Windows platform.\""
    },
    {
      "commit": "6ad5a86d49bcad7ab3775b89772bd398b3a8ee88",
      "tree": "e41720c3111dbf8c138ce22c8e86f21d1b57642b",
      "parents": [
        "fc9ff67631dc460db8a14bbe89ddf378d6d09f12",
        "9202e06f9a1e7203b7659ca1835446042749aa5b"
      ],
      "author": {
        "name": "ChromeOS bot",
        "email": "3su6n15k.default@developer.gserviceaccount.com",
        "time": "Mon Apr 18 04:06:04 2016"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 18 04:06:05 2016"
      },
      "message": "Merge \"logging: Use the module-specific logger.\""
    },
    {
      "commit": "fc9ff67631dc460db8a14bbe89ddf378d6d09f12",
      "tree": "611bccc379fce30e45ce9d5ca536eaf3ddb054c2",
      "parents": [
        "17a6152c4b0f082588126b11db94e58960fd3b1f",
        "6aa203f48b61560c5e0e68ab25abe9da1e00fc91"
      ],
      "author": {
        "name": "ChromeOS bot",
        "email": "3su6n15k.default@developer.gserviceaccount.com",
        "time": "Mon Apr 18 04:06:01 2016"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 18 04:06:01 2016"
      },
      "message": "Merge \"Replace yaml with json format.\""
    },
    {
      "commit": "17a6152c4b0f082588126b11db94e58960fd3b1f",
      "tree": "9530327a2161e64d3acfc7ea7948f13e44178f62",
      "parents": [
        "9e39f458e20e0c570fe9ab20c95c25cd6230c5e6",
        "7779d1bd95052a141868f60480e05ae0d02c24a5"
      ],
      "author": {
        "name": "ChromeOS bot",
        "email": "3su6n15k.default@developer.gserviceaccount.com",
        "time": "Mon Apr 18 04:04:44 2016"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 18 04:04:44 2016"
      },
      "message": "Merge \"graphyte_main: add result-file option.\""
    },
    {
      "commit": "9e39f458e20e0c570fe9ab20c95c25cd6230c5e6",
      "tree": "f69d63bcbd17918b9f5cacd0898a110ca06ed39c",
      "parents": [
        "4c4ee9d80dbe7b281acf2002af0e38a02dc9b644",
        "5c9e1d67db5b7ada9c4e1d3df3b714f93e962d22"
      ],
      "author": {
        "name": "ChromeOS bot",
        "email": "3su6n15k.default@developer.gserviceaccount.com",
        "time": "Mon Apr 18 04:04:39 2016"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 18 04:04:39 2016"
      },
      "message": "Merge \"inst: Fix bug of anritsu power meter.\""
    },
    {
      "commit": "4c4ee9d80dbe7b281acf2002af0e38a02dc9b644",
      "tree": "baa4bd7b6fd5b363e830e09ff2fbb4a0c23fbf03",
      "parents": [
        "672d8e0079b765800a0dc5e0873004e3a20ded25",
        "102046c9510fe7c2a622a070bb77d0d327bc680f"
      ],
      "author": {
        "name": "ChromeOS bot",
        "email": "3su6n15k.default@developer.gserviceaccount.com",
        "time": "Mon Apr 18 03:29:08 2016"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 18 03:29:08 2016"
      },
      "message": "Merge \"GPIB: fix bug about PyVisa return value.\""
    },
    {
      "commit": "d079ca0c3e7f66412c9546c89bf5674ea50b78e7",
      "tree": "d441b8e50805c610161e4c232518a6735b82a443",
      "parents": [
        "430b90eac3469458dd663718adcf83062d858123"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Apr 15 13:54:08 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Apr 15 14:15:20 2016"
      },
      "message": "main: Move graphyte_main.py to graphyte/main.py\n\nOriginally we use graphyte_main.py as the entrance script. Now we\nchange to use \u0027python -m graphyte.main\u0027 to execute it, then we can\navoid considering the path of the script, especially when we install\nit at Windows platform.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: If4281b1d18dd800cc63bd3e8066cd0d3074aacac\n"
    },
    {
      "commit": "430b90eac3469458dd663718adcf83062d858123",
      "tree": "bc11dda8daf189a384e03c760d2b8f8dc91c66a6",
      "parents": [
        "9202e06f9a1e7203b7659ca1835446042749aa5b"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Apr 15 12:22:12 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Apr 15 14:13:42 2016"
      },
      "message": "ssh: Set close_fds False at Windows platform.\n\nclose_fds is not supported at Windows platform while standard streams\nare redirected.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: I9b5fcace29c2222346b988b99df0dd0f0c137837\n"
    },
    {
      "commit": "9202e06f9a1e7203b7659ca1835446042749aa5b",
      "tree": "e41720c3111dbf8c138ce22c8e86f21d1b57642b",
      "parents": [
        "6aa203f48b61560c5e0e68ab25abe9da1e00fc91"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Apr 15 07:56:20 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Apr 15 14:09:35 2016"
      },
      "message": "logging: Use the module-specific logger.\n\nGraphyte may be called by other python module. To isolate the log,\nwe use the module-specific logger instead of the root logger.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: I101aaef8272f5fca40e1898ecc08f4032b8f3952\n"
    },
    {
      "commit": "6aa203f48b61560c5e0e68ab25abe9da1e00fc91",
      "tree": "611bccc379fce30e45ce9d5ca536eaf3ddb054c2",
      "parents": [
        "7779d1bd95052a141868f60480e05ae0d02c24a5"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Apr 14 08:50:59 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Apr 15 14:09:35 2016"
      },
      "message": "Replace yaml with json format.\n\nSince PyYaml is not part of Python standard library, and the format\nis also confusing while the data is full of dict and list. We change\nto use JSON format. JSON file doesn\u0027t support comment so we remove\nthe copyright header.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: Ifd8ff47f2ad841df2c364ec517d733cbaef2e582\n"
    },
    {
      "commit": "7779d1bd95052a141868f60480e05ae0d02c24a5",
      "tree": "9530327a2161e64d3acfc7ea7948f13e44178f62",
      "parents": [
        "5c9e1d67db5b7ada9c4e1d3df3b714f93e962d22"
      ],
      "author": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Thu Apr 14 06:41:25 2016"
      },
      "committer": {
        "name": "Chih-Yu Huang",
        "email": "akahuang@google.com",
        "time": "Fri Apr 15 14:08:28 2016"
      },
      "message": "graphyte_main: add result-file option.\n\nAdd the --result-file option to assign the path of the result file.\nAlso remove the default value of options since the constructor of\nGraphyte class already has the default value.\n\nBUG\u003dnone\nTEST\u003dmake test; make lint\n\nChange-Id: I4dbb3714f10dbbaa42847638f040a2f2fdf4c04d\n"
    }
  ],
  "next": "5c9e1d67db5b7ada9c4e1d3df3b714f93e962d22"
}
