{"action":"created","comment":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments/229368934","pull_request_review_id":169853562,"id":229368934,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyOTM2ODkzNA==","diff_hunk":"@@ -0,0 +1,220 @@\n+/*\n+ * Copyright (C) 2018 Gilles DOFFE <g.doffe@gmail.com>\n+ *\n+ * This file is subject to the terms and conditions of the GNU Lesser\n+ * General Public License v2.1. See the file LICENSE in the top level\n+ * directory for more details.\n+ */\n+\n+/**\n+ * @defgroup    drivers_motor DC Motor Driver\n+ * @ingroup     drivers_actuators\n+ * @brief       High-level driver for DC motors\n+ *\n+ * This API aims to handle DC motor analogic driver.\n+ * Boards using communition protocols (I2C, UART, etc...) are not in the\n+ * scope of this driver.\n+ * Mainly designed for H-bridge, it could also drive some brushless drivers.\n+ *\n+ * Some H-bridge handles several motors.\n+ * Maximum motor number by H-bridge is set to 2 with MOTOR_DRIVER_MAX macro.\n+ * This macro can be overiden to provide more motors by H-bridge.\n+ * However, MOTOR_DRIVER_MAX should not exceed PWM channels number.\n+ *\n+ * motor_driver_t structure represents an H-bridge.\n+ * As several H-bridge can share a same PWM device, motor_driver_t can\n+ * represent a group of H-bridge.\n+ *\n+ * Most of H-bridge boards uses the following I/Os for each motor :\n+ * - Enable/disable GPIO\n+ * - One or two direction GPIOs\n+ * - A PWM signal\n+ *\n+ * @verbatim\n+ *\n+ * Each motor direction is controlled (assuming it is enabled) according to\n+ * the following truth table :\n+ *  __________________________\n+ * | DIR0 | DIR1 |  BEHAVIOR  |\n+ * |--------------------------|\n+ * |  0   |  0   | BRAKE LOW  |\n+ * |  0   |  1   |     CW     |\n+ * |  1   |  0   |     CCW    |\n+ * |  1   |  1   | BRAKE HIGH |\n+ * |______|______|____________|\n+ *\n+ * In case of single GPIO for direction, only DIR0 is used without brake\n+ * capability :\n+ *  ___________________\n+ * | DIR0 |  BEHAVIOR  |\n+ * |-------------------|\n+ * |   0  |     CW     |\n+ * |   1  |     CCW    |\n+ * |______|____________|\n+ *\n+ * Some boards add a brake pin with single direction GPIO :\n+ *  ________________________\n+ * | DIR | BRAKE | BEHAVIOR |\n+ * |------------------------|\n+ * |  0  |   0   |    CW    |\n+ * |  0  |   1   |   BRAKE  |\n+ * |  1  |   0   |    CCW   |\n+ * |  1  |   1   |   BRAKE  |\n+ * |_____|_______|__________|\n+ *\n+ * @endverbatim\n+ *\n+ * From this truth tables we can extract three direction states :\n+ * - CW (ClockWise)\n+ * - CCW (Counter ClockWise)\n+ * - BRAKE\n+ *\n+ * BRAKE LOW is functionnaly the same than BRAKE HIGH but some H-bridge only\n+ * brake on BRAKE HIGH due to hardware.\n+ * In case of single direction GPIO, there is no BRAKE, PWM duty cycle is set\n+ * to 0.\n+\n+ * @{\n+ * @file\n+ * @brief       High-level driver for DC motors\n+ *\n+ * @author      Gilles DOFFE <g.doffe@gmail.com>\n+ */\n+\n+#ifndef MOTOR_DRIVER_H\n+#define MOTOR_DRIVER_H\n+\n+#include \"periph/pwm.h\"\n+#include \"periph/gpio.h\"\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+/**\n+ * @brief Maximum number of motors by motor driver\n+ */\n+#ifndef MOTOR_DRIVER_MAX\n+#define MOTOR_DRIVER_MAX    (2)\n+#endif /* MOTOR_DRIVER_MAX */\n+\n+#define MOTOR_DRIVER_DEV(x) (x)\n+\n+/**\n+ * @brief Describe DC motor driver modes\n+ */\n+typedef enum {\n+    MOTOR_DRIVER_2_DIRS         = 0,          /**< 2 GPIOS for direction, \\\n+                                                    handling BRAKE */\n+    MOTOR_DRIVER_1_DIR          = 1,          /**< Single GPIO for direction, \\\n+                                                    no BRAKE */\n+    MOTOR_DRIVER_1_DIR_BRAKE    = 2           /**< Single GPIO for direction, \\\n+                                                    Single GPIO for BRAKE */\n+} motor_driver_mode_t;\n+\n+/**\n+ * @brief Describe DC motor driver brake modes\n+ */\n+typedef enum {\n+    MOTOR_BRAKE_LOW     = 0,        /**< Low stage brake */\n+    MOTOR_BRAKE_HIGH    = 1,        /**< High stage brake */\n+} motor_driver_mode_brake_t;\n+\n+/**\n+ * @brief Describe DC motor direction states\n+ */\n+typedef enum {\n+    MOTOR_CW      = 0,          /**< clockwise */\n+    MOTOR_CCW     = 1,          /**< counter clockwise */\n+    MOTOR_BRAKE   = 2           /**< brake */\n+} motor_direction_t;\n+\n+/**\n+ * @brief Describe DC motor with PWM channel and GPIOs\n+ */\n+typedef struct {\n+    int pwm_channel;            /**< PWM channel the motor is connected to */\n+    gpio_t gpio_enable;         /**< GPIO to enable/disable motor */\n+    gpio_t gpio_dir0;           /**< GPIO to control rotation direction */\n+    gpio_t gpio_dir1_or_brake;  /**< GPIO to control rotation direction */\n+    uint8_t gpio_dir_reverse;   /**< flag to reverse direction */\n+    uint8_t gpio_enable_invert; /**< flag to set enable GPIO inverted mode */\n+    uint8_t gpio_brake_invert;  /**< flag to make brake active low */\n+} motor_t;\n+\n+/**\n+ * @brief   Default motor driver type definition\n+ */\n+typedef unsigned int motor_driver_t;\n+\n+/**\n+ * @brief   Motor callback. It is called at end of motor_set()\n+ */\n+typedef void (*motor_driver_cb_t)(const motor_driver_t motor_driver,","path":"drivers/include/motor_driver.h","position":153,"original_position":153,"commit_id":"41e7cc5e6e217214be72a96f745e61389fdfd5cb","original_commit_id":"41e7cc5e6e217214be72a96f745e61389fdfd5cb","user":{"login":"gdoffe","id":1143438,"node_id":"MDQ6VXNlcjExNDM0Mzg=","avatar_url":"https://avatars2.githubusercontent.com/u/1143438?v=4","gravatar_id":"","url":"https://api.github.com/users/gdoffe","html_url":"https://github.com/gdoffe","followers_url":"https://api.github.com/users/gdoffe/followers","following_url":"https://api.github.com/users/gdoffe/following{/other_user}","gists_url":"https://api.github.com/users/gdoffe/gists{/gist_id}","starred_url":"https://api.github.com/users/gdoffe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gdoffe/subscriptions","organizations_url":"https://api.github.com/users/gdoffe/orgs","repos_url":"https://api.github.com/users/gdoffe/repos","events_url":"https://api.github.com/users/gdoffe/events{/privacy}","received_events_url":"https://api.github.com/users/gdoffe/received_events","type":"User","site_admin":false},"body":"This callback is here to do specific board stuff. For example blinking a led when a motor is set, compute or display informations, etc.\r\nIn case of native board, used mainly for simulation, it is used to simulate the physical relation between QDEC driver and motor driver.\r\nOn native board, actuators driver must create simulation datas according to board sensors related to that actuator.\r\nIn a robot for example it could be positionning sensors (QDEC, IMU, triangulation, etc.).\r\nIf you use a function called each time after `motor_set` the user code is no more generic, it becomes heavier and is board dependant.\r\nAn other solution could be to use a weak function (like `panic_arch()`) but it would be the same function for each motor driver which is less flexible.","created_at":"2018-10-30T15:57:16Z","updated_at":"2018-10-30T15:57:17Z","html_url":"https://github.com/RIOT-OS/RIOT/pull/10290#discussion_r229368934","pull_request_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/10290","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments/229368934"},"html":{"href":"https://github.com/RIOT-OS/RIOT/pull/10290#discussion_r229368934"},"pull_request":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/10290"}},"in_reply_to_id":229251477},"pull_request":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/10290","id":226594928,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI2NTk0OTI4","html_url":"https://github.com/RIOT-OS/RIOT/pull/10290","diff_url":"https://github.com/RIOT-OS/RIOT/pull/10290.diff","patch_url":"https://github.com/RIOT-OS/RIOT/pull/10290.patch","issue_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/10290","number":10290,"state":"open","locked":false,"title":"drivers/motor_driver: driver for analogic H-bridge driving DC motors","user":{"login":"gdoffe","id":1143438,"node_id":"MDQ6VXNlcjExNDM0Mzg=","avatar_url":"https://avatars2.githubusercontent.com/u/1143438?v=4","gravatar_id":"","url":"https://api.github.com/users/gdoffe","html_url":"https://github.com/gdoffe","followers_url":"https://api.github.com/users/gdoffe/followers","following_url":"https://api.github.com/users/gdoffe/following{/other_user}","gists_url":"https://api.github.com/users/gdoffe/gists{/gist_id}","starred_url":"https://api.github.com/users/gdoffe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gdoffe/subscriptions","organizations_url":"https://api.github.com/users/gdoffe/orgs","repos_url":"https://api.github.com/users/gdoffe/repos","events_url":"https://api.github.com/users/gdoffe/events{/privacy}","received_events_url":"https://api.github.com/users/gdoffe/received_events","type":"User","site_admin":false},"body":"This driver API aims to control DC motors.\r\nIt handles :\r\n * motor controller associated to a PWM device\r\n * several motors by controller\r\n * motor rotation direction\r\n * brake capability\r\n * enable/disable motor individually (if hardware driver has enable/disable capability)\r\n * callback on motor_set() calls to perform some actions once PWM is set.\r\n\r\n### Contribution description\r\n\r\nThis contribution is a new feature adding a new actuator driver for nearly most kind of analogic H-bridge.\r\nSupport for nucleo-f446re board is added.\r\nSupport for native board is also added with a QDEC simulation callback. Native architecture pwm feature has been added for motor_driver simulation support. \r\n\r\n### Testing procedure\r\n\r\nGo to tests/driver_motor_driver and build with BOARD=native:\r\n`make BOARD=native`\r\nLaunch the binary:\r\n`bin/native/tests_driver_motor_driver.elf`\r\n\r\nTests have been done on Nucleo-F446RE with a simple H-bridge from AliExpress and with Dual VNH3SP30 Motor Driver Carrier MD03A from Pololu:\r\n- https://youtu.be/9qiPBo5LNIs\r\n- https://youtu.be/rjKRhW8Ke18\r\n\r\nTo build for Nucleo-F446RE:\r\n`make BOARD=nucleo-f446re flash`","created_at":"2018-10-29T15:02:54Z","updated_at":"2018-10-30T15:57:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"224d7e5dbb3f3bedc11068a1af0cb4f77f3b660b","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/10290/commits","review_comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/10290/comments","review_comment_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments{/number}","comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/10290/comments","statuses_url":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/41e7cc5e6e217214be72a96f745e61389fdfd5cb","head":{"label":"gdoffe:motor_driver","ref":"motor_driver","sha":"41e7cc5e6e217214be72a96f745e61389fdfd5cb","user":{"login":"gdoffe","id":1143438,"node_id":"MDQ6VXNlcjExNDM0Mzg=","avatar_url":"https://avatars2.githubusercontent.com/u/1143438?v=4","gravatar_id":"","url":"https://api.github.com/users/gdoffe","html_url":"https://github.com/gdoffe","followers_url":"https://api.github.com/users/gdoffe/followers","following_url":"https://api.github.com/users/gdoffe/following{/other_user}","gists_url":"https://api.github.com/users/gdoffe/gists{/gist_id}","starred_url":"https://api.github.com/users/gdoffe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gdoffe/subscriptions","organizations_url":"https://api.github.com/users/gdoffe/orgs","repos_url":"https://api.github.com/users/gdoffe/repos","events_url":"https://api.github.com/users/gdoffe/events{/privacy}","received_events_url":"https://api.github.com/users/gdoffe/received_events","type":"User","site_admin":false},"repo":{"id":138712451,"node_id":"MDEwOlJlcG9zaXRvcnkxMzg3MTI0NTE=","name":"RIOT","full_name":"gdoffe/RIOT","private":false,"owner":{"login":"gdoffe","id":1143438,"node_id":"MDQ6VXNlcjExNDM0Mzg=","avatar_url":"https://avatars2.githubusercontent.com/u/1143438?v=4","gravatar_id":"","url":"https://api.github.com/users/gdoffe","html_url":"https://github.com/gdoffe","followers_url":"https://api.github.com/users/gdoffe/followers","following_url":"https://api.github.com/users/gdoffe/following{/other_user}","gists_url":"https://api.github.com/users/gdoffe/gists{/gist_id}","starred_url":"https://api.github.com/users/gdoffe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gdoffe/subscriptions","organizations_url":"https://api.github.com/users/gdoffe/orgs","repos_url":"https://api.github.com/users/gdoffe/repos","events_url":"https://api.github.com/users/gdoffe/events{/privacy}","received_events_url":"https://api.github.com/users/gdoffe/received_events","type":"User","site_admin":false},"html_url":"https://github.com/gdoffe/RIOT","description":"RIOT -  The friendly OS for IoT","fork":true,"url":"https://api.github.com/repos/gdoffe/RIOT","forks_url":"https://api.github.com/repos/gdoffe/RIOT/forks","keys_url":"https://api.github.com/repos/gdoffe/RIOT/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gdoffe/RIOT/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gdoffe/RIOT/teams","hooks_url":"https://api.github.com/repos/gdoffe/RIOT/hooks","issue_events_url":"https://api.github.com/repos/gdoffe/RIOT/issues/events{/number}","events_url":"https://api.github.com/repos/gdoffe/RIOT/events","assignees_url":"https://api.github.com/repos/gdoffe/RIOT/assignees{/user}","branches_url":"https://api.github.com/repos/gdoffe/RIOT/branches{/branch}","tags_url":"https://api.github.com/repos/gdoffe/RIOT/tags","blobs_url":"https://api.github.com/repos/gdoffe/RIOT/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gdoffe/RIOT/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gdoffe/RIOT/git/refs{/sha}","trees_url":"https://api.github.com/repos/gdoffe/RIOT/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gdoffe/RIOT/statuses/{sha}","languages_url":"https://api.github.com/repos/gdoffe/RIOT/languages","stargazers_url":"https://api.github.com/repos/gdoffe/RIOT/stargazers","contributors_url":"https://api.github.com/repos/gdoffe/RIOT/contributors","subscribers_url":"https://api.github.com/repos/gdoffe/RIOT/subscribers","subscription_url":"https://api.github.com/repos/gdoffe/RIOT/subscription","commits_url":"https://api.github.com/repos/gdoffe/RIOT/commits{/sha}","git_commits_url":"https://api.github.com/repos/gdoffe/RIOT/git/commits{/sha}","comments_url":"https://api.github.com/repos/gdoffe/RIOT/comments{/number}","issue_comment_url":"https://api.github.com/repos/gdoffe/RIOT/issues/comments{/number}","contents_url":"https://api.github.com/repos/gdoffe/RIOT/contents/{+path}","compare_url":"https://api.github.com/repos/gdoffe/RIOT/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gdoffe/RIOT/merges","archive_url":"https://api.github.com/repos/gdoffe/RIOT/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gdoffe/RIOT/downloads","issues_url":"https://api.github.com/repos/gdoffe/RIOT/issues{/number}","pulls_url":"https://api.github.com/repos/gdoffe/RIOT/pulls{/number}","milestones_url":"https://api.github.com/repos/gdoffe/RIOT/milestones{/number}","notifications_url":"https://api.github.com/repos/gdoffe/RIOT/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gdoffe/RIOT/labels{/name}","releases_url":"https://api.github.com/repos/gdoffe/RIOT/releases{/id}","deployments_url":"https://api.github.com/repos/gdoffe/RIOT/deployments","created_at":"2018-06-26T09:03:27Z","updated_at":"2018-10-29T14:15:42Z","pushed_at":"2018-10-30T02:01:48Z","git_url":"git://github.com/gdoffe/RIOT.git","ssh_url":"git@github.com:gdoffe/RIOT.git","clone_url":"https://github.com/gdoffe/RIOT.git","svn_url":"https://github.com/gdoffe/RIOT","homepage":"https://github.com/RIOT-OS/RIOT/wiki","size":58648,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"lgpl-2.1","name":"GNU Lesser General Public License v2.1","spdx_id":"LGPL-2.1","url":"https://api.github.com/licenses/lgpl-2.1","node_id":"MDc6TGljZW5zZTEx"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"RIOT-OS:master","ref":"master","sha":"d07ac86ea1f79a57b9269284f97092b676f97790","user":{"login":"RIOT-OS","id":3079480,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwNzk0ODA=","avatar_url":"https://avatars2.githubusercontent.com/u/3079480?v=4","gravatar_id":"","url":"https://api.github.com/users/RIOT-OS","html_url":"https://github.com/RIOT-OS","followers_url":"https://api.github.com/users/RIOT-OS/followers","following_url":"https://api.github.com/users/RIOT-OS/following{/other_user}","gists_url":"https://api.github.com/users/RIOT-OS/gists{/gist_id}","starred_url":"https://api.github.com/users/RIOT-OS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RIOT-OS/subscriptions","organizations_url":"https://api.github.com/users/RIOT-OS/orgs","repos_url":"https://api.github.com/users/RIOT-OS/repos","events_url":"https://api.github.com/users/RIOT-OS/events{/privacy}","received_events_url":"https://api.github.com/users/RIOT-OS/received_events","type":"Organization","site_admin":false},"repo":{"id":7370241,"node_id":"MDEwOlJlcG9zaXRvcnk3MzcwMjQx","name":"RIOT","full_name":"RIOT-OS/RIOT","private":false,"owner":{"login":"RIOT-OS","id":3079480,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwNzk0ODA=","avatar_url":"https://avatars2.githubusercontent.com/u/3079480?v=4","gravatar_id":"","url":"https://api.github.com/users/RIOT-OS","html_url":"https://github.com/RIOT-OS","followers_url":"https://api.github.com/users/RIOT-OS/followers","following_url":"https://api.github.com/users/RIOT-OS/following{/other_user}","gists_url":"https://api.github.com/users/RIOT-OS/gists{/gist_id}","starred_url":"https://api.github.com/users/RIOT-OS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RIOT-OS/subscriptions","organizations_url":"https://api.github.com/users/RIOT-OS/orgs","repos_url":"https://api.github.com/users/RIOT-OS/repos","events_url":"https://api.github.com/users/RIOT-OS/events{/privacy}","received_events_url":"https://api.github.com/users/RIOT-OS/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/RIOT-OS/RIOT","description":"RIOT -  The friendly OS for IoT","fork":false,"url":"https://api.github.com/repos/RIOT-OS/RIOT","forks_url":"https://api.github.com/repos/RIOT-OS/RIOT/forks","keys_url":"https://api.github.com/repos/RIOT-OS/RIOT/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RIOT-OS/RIOT/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RIOT-OS/RIOT/teams","hooks_url":"https://api.github.com/repos/RIOT-OS/RIOT/hooks","issue_events_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/events{/number}","events_url":"https://api.github.com/repos/RIOT-OS/RIOT/events","assignees_url":"https://api.github.com/repos/RIOT-OS/RIOT/assignees{/user}","branches_url":"https://api.github.com/repos/RIOT-OS/RIOT/branches{/branch}","tags_url":"https://api.github.com/repos/RIOT-OS/RIOT/tags","blobs_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/refs{/sha}","trees_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/{sha}","languages_url":"https://api.github.com/repos/RIOT-OS/RIOT/languages","stargazers_url":"https://api.github.com/repos/RIOT-OS/RIOT/stargazers","contributors_url":"https://api.github.com/repos/RIOT-OS/RIOT/contributors","subscribers_url":"https://api.github.com/repos/RIOT-OS/RIOT/subscribers","subscription_url":"https://api.github.com/repos/RIOT-OS/RIOT/subscription","commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/commits{/sha}","git_commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/commits{/sha}","comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/comments{/number}","issue_comment_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/comments{/number}","contents_url":"https://api.github.com/repos/RIOT-OS/RIOT/contents/{+path}","compare_url":"https://api.github.com/repos/RIOT-OS/RIOT/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RIOT-OS/RIOT/merges","archive_url":"https://api.github.com/repos/RIOT-OS/RIOT/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RIOT-OS/RIOT/downloads","issues_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues{/number}","pulls_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls{/number}","milestones_url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones{/number}","notifications_url":"https://api.github.com/repos/RIOT-OS/RIOT/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RIOT-OS/RIOT/labels{/name}","releases_url":"https://api.github.com/repos/RIOT-OS/RIOT/releases{/id}","deployments_url":"https://api.github.com/repos/RIOT-OS/RIOT/deployments","created_at":"2012-12-29T20:38:40Z","updated_at":"2018-10-30T15:46:55Z","pushed_at":"2018-10-30T15:41:01Z","git_url":"git://github.com/RIOT-OS/RIOT.git","ssh_url":"git@github.com:RIOT-OS/RIOT.git","clone_url":"https://github.com/RIOT-OS/RIOT.git","svn_url":"https://github.com/RIOT-OS/RIOT","homepage":"https://github.com/RIOT-OS/RIOT/wiki","size":58925,"stargazers_count":2075,"watchers_count":2075,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1164,"mirror_url":null,"archived":false,"open_issues_count":878,"license":{"key":"lgpl-2.1","name":"GNU Lesser General Public License v2.1","spdx_id":"LGPL-2.1","url":"https://api.github.com/licenses/lgpl-2.1","node_id":"MDc6TGljZW5zZTEx"},"forks":1164,"open_issues":878,"watchers":2075,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/10290"},"html":{"href":"https://github.com/RIOT-OS/RIOT/pull/10290"},"issue":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/issues/10290"},"comments":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/issues/10290/comments"},"review_comments":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/10290/comments"},"review_comment":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/10290/commits"},"statuses":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/41e7cc5e6e217214be72a96f745e61389fdfd5cb"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"gdoffe"}}