{"action":"created","comment":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments/93080678","pull_request_review_id":13601746,"id":93080678,"diff_hunk":"@@ -24,375 +24,108 @@\n  * @}\n  */\n \n-#include <stdint.h>\n-#include <string.h>\n-\n #include \"cpu.h\"\n+#include \"assert.h\"\n #include \"periph/pwm.h\"\n-#include \"periph_conf.h\"\n \n-/* FTM channel look up tables */\n-#if PWM_0_EN\n-static const uint8_t ftm0chan[] = {\n-#if PWM_0_CHANNELS > 0\n-    PWM_0_CH0_FTMCHAN,\n-#endif\n-#if PWM_0_CHANNELS > 1\n-    PWM_0_CH1_FTMCHAN,\n-#endif\n-#if PWM_0_CHANNELS > 2\n-    PWM_0_CH2_FTMCHAN,\n-#endif\n-#if PWM_0_CHANNELS > 3\n-    PWM_0_CH3_FTMCHAN,\n-#endif\n-#if PWM_0_CHANNELS > 4\n-    PWM_0_CH4_FTMCHAN,\n-#endif\n-#if PWM_0_CHANNELS > 5\n-    PWM_0_CH5_FTMCHAN,\n-#endif\n-#if PWM_0_CHANNELS > 6\n-    PWM_0_CH6_FTMCHAN,\n-#endif\n-#if PWM_0_CHANNELS > 7\n-    PWM_0_CH7_FTMCHAN,\n-#endif\n-};\n-#endif\n-#if PWM_1_EN\n-static const uint8_t ftm1chan[] = {\n-#if PWM_1_CHANNELS > 0\n-    PWM_1_CH0_FTMCHAN,\n-#endif\n-#if PWM_1_CHANNELS > 1\n-    PWM_1_CH1_FTMCHAN,\n-#endif\n-#if PWM_1_CHANNELS > 2\n-    PWM_1_CH2_FTMCHAN,\n-#endif\n-#if PWM_1_CHANNELS > 3\n-    PWM_1_CH3_FTMCHAN,\n-#endif\n-#if PWM_1_CHANNELS > 4\n-    PWM_1_CH4_FTMCHAN,\n-#endif\n-#if PWM_1_CHANNELS > 5\n-    PWM_1_CH5_FTMCHAN,\n-#endif\n-#if PWM_1_CHANNELS > 6\n-    PWM_1_CH6_FTMCHAN,\n-#endif\n-#if PWM_1_CHANNELS > 7\n-    PWM_1_CH7_FTMCHAN,\n-#endif\n-};\n-#endif\n+#define PRESCALER_MAX       (7U)\n \n-uint32_t pwm_init(pwm_t dev, pwm_mode_t mode, uint32_t freq, uint16_t res)\n+static inline FTM_Type *ftm(pwm_t pwm)\n {\n-    FTM_Type *ftm;\n-    int channels = 0;\n-    uint32_t pwm_clk = 0;\n-    const uint8_t *ftmchan = NULL;\n-\n-    switch (dev) {\n-#if PWM_0_EN\n-\n-        case PWM_0:\n-            channels = PWM_0_CHANNELS;\n-            pwm_clk = PWM_0_CLK;\n-            ftm = PWM_0_DEV;\n-            ftmchan = &ftm0chan[0];\n-            break;\n-#endif\n-#if PWM_1_EN\n-\n-        case PWM_1:\n-            channels = PWM_1_CHANNELS;\n-            pwm_clk = PWM_1_CLK;\n-            ftm = PWM_1_DEV;\n-            ftmchan = &ftm1chan[0];\n-            break;\n-#endif\n-\n-        default:\n-            return 0;\n-    }\n-\n-    switch (mode) {\n-        case PWM_LEFT:\n-        case PWM_RIGHT:\n-        case PWM_CENTER:\n-            break;\n+    return pwm_config[pwm].ftm;\n+}\n \n-        default:\n-            return 0;\n-    }\n+uint32_t pwm_init(pwm_t pwm, pwm_mode_t mode, uint32_t freq, uint16_t res)\n+{\n+    uint8_t pre = 0;\n \n-    if ((unsigned int)res > (PWM_MAX_VALUE + 1) || (res * freq) > pwm_clk) {\n+    if (pwm >= PWM_NUMOF || ((res * freq) > CLOCK_BUSCLOCK)) {\n         return 0;\n     }\n \n-    /* Try to find a good prescaler value */\n-    /* The prescaler divides the module clock by a power of two, between 2^0 and 2^7 */\n-    uint8_t prescaler = 0;\n-    /* (resolution * frequency) is the number of timer ticks per second */\n-    while ((pwm_clk >> prescaler) > (res * freq)) {\n-        ++prescaler;\n-        if (prescaler > 7) {\n-            /* Module clock is too fast to reach the requested frequency using the\n-             * hardware supported prescaler values */\n-            /* Note: The frequency might be reachable if the requested resolution\n-             * is increased. */\n-            return 0;\n-        }\n+    /* figure out the clock settings\n+     * the resulting frequency is calculated by\n+     *      ticks := BUS_CLK / 2 ^ pre\n+     *  where `ticks` is `freq * res`\n+     *  and `pre` must be between [0, 7].\n+     *\n+     *  The resulting prescaler yields a timer frequency, which is the closest\n+     *  possible frequency requested. */\n+    while ((CLOCK_BUSCLOCK >> pre) > (res * freq)) {\n+        ++pre;\n     }\n-    /* The chosen prescaler yields a timer frequency which is the\n-     * nearest possible frequency less than the requested frequency */\n-\n-    /* Turn on the peripheral */\n-    pwm_poweron(dev);\n-\n-    switch (dev) {\n-#if PWM_0_EN\n-\n-        case PWM_0:\n-            #if PWM_0_CHANNELS > 0\n-                gpio_init_port(PWM_0_CH0_GPIO, PORT_PCR_MUX(PWM_0_CH0_AF));\n-            #endif\n-            #if PWM_0_CHANNELS > 1\n-                gpio_init_port(PWM_0_CH1_GPIO, PORT_PCR_MUX(PWM_0_CH1_AF));\n-            #endif\n-            #if PWM_0_CHANNELS > 2\n-                gpio_init_port(PWM_0_CH2_GPIO, PORT_PCR_MUX(PWM_0_CH2_AF));\n-            #endif\n-            #if PWM_0_CHANNELS > 3\n-                gpio_init_port(PWM_0_CH3_GPIO, PORT_PCR_MUX(PWM_0_CH3_AF));\n-            #endif\n-            #if PWM_0_CHANNELS > 4\n-                gpio_init_port(PWM_0_CH4_GPIO, PORT_PCR_MUX(PWM_0_CH4_AF));\n-            #endif\n-            #if PWM_0_CHANNELS > 5\n-                gpio_init_port(PWM_0_CH5_GPIO, PORT_PCR_MUX(PWM_0_CH5_AF));\n-            #endif\n-            #if PWM_0_CHANNELS > 6\n-                gpio_init_port(PWM_0_CH6_GPIO, PORT_PCR_MUX(PWM_0_CH6_AF));\n-            #endif\n-            #if PWM_0_CHANNELS > 7\n-                gpio_init_port(PWM_0_CH7_GPIO, PORT_PCR_MUX(PWM_0_CH7_AF));\n-            #endif\n-            break;\n-#endif\n-#if PWM_1_EN\n-\n-        case PWM_1:\n-            #if PWM_1_CHANNELS > 0\n-                gpio_init_port(PWM_1_CH0_GPIO, PORT_PCR_MUX(PWM_1_CH0_AF));\n-            #endif\n-            #if PWM_1_CHANNELS > 1\n-                gpio_init_port(PWM_1_CH1_GPIO, PORT_PCR_MUX(PWM_1_CH1_AF));\n-            #endif\n-            #if PWM_1_CHANNELS > 2\n-                gpio_init_port(PWM_1_CH2_GPIO, PORT_PCR_MUX(PWM_1_CH2_AF));\n-            #endif\n-            #if PWM_1_CHANNELS > 3\n-                gpio_init_port(PWM_1_CH3_GPIO, PORT_PCR_MUX(PWM_1_CH3_AF));\n-            #endif\n-            #if PWM_1_CHANNELS > 4\n-                gpio_init_port(PWM_1_CH4_GPIO, PORT_PCR_MUX(PWM_1_CH4_AF));\n-            #endif\n-            #if PWM_1_CHANNELS > 5\n-                gpio_init_port(PWM_1_CH5_GPIO, PORT_PCR_MUX(PWM_1_CH5_AF));\n-            #endif\n-            #if PWM_1_CHANNELS > 6\n-                gpio_init_port(PWM_1_CH6_GPIO, PORT_PCR_MUX(PWM_1_CH6_AF));\n-            #endif\n-            #if PWM_1_CHANNELS > 7\n-                gpio_init_port(PWM_1_CH7_GPIO, PORT_PCR_MUX(PWM_1_CH7_AF));\n-            #endif\n-            break;\n-#endif\n-\n-        default:\n-            return 0;\n+    /* make sure the calculated prescaler is valid, else return */\n+    if (pre > PRESCALER_MAX) {\n+        return 0;\n     }\n \n+    /* configure the used timer */\n+    pwm_poweron(pwm);\n     /* disable write protect for changing settings */\n-    ftm->MODE = FTM_MODE_WPDIS_MASK;\n-\n-    /* reset timer match value */\n-    for (int i = 0; i < channels; i++) {\n-        ftm->CONTROLS[i].CnV = 0;\n+    ftm(pwm)->MODE = FTM_MODE_WPDIS_MASK;\n+    /* clear any existing configuration */\n+    ftm(pwm)->COMBINE = 0;\n+    ftm(pwm)->CNTIN = 0;\n+    ftm(pwm)->SWOCTRL = 0;\n+    /* apply prescaler and set resolution */\n+    ftm(pwm)->SC = FTM_SC_PS(pre);\n+    ftm(pwm)->MOD = (res - 1);\n+\n+    /* set CPWMS bit in the SC register in case of center aligned mode */\n+    if (mode == PWM_CENTER) {\n+        BITBAND_REG32(ftm(pwm)->SC, FTM_SC_CPWMS_SHIFT) = 1;\n     }\n \n-    /* reset timer configuration registers */\n-    ftm->COMBINE = 0;\n-    ftm->CNTIN = 0;\n-    ftm->SWOCTRL = 0;\n-\n-    /* set prescale and mod registers to matching values for resolution and frequency */\n-    ftm->SC = FTM_SC_PS(prescaler);\n-    ftm->MOD = res - 1;\n-\n-    /* set PWM mode */\n-    uint32_t mode_mask = 0;\n-    switch (mode) {\n-        case PWM_LEFT:\n-            mode_mask = (1 << FTM_CnSC_MSB_SHIFT) | (1 << FTM_CnSC_ELSB_SHIFT);\n-            break;\n-\n-        case PWM_RIGHT:\n-            mode_mask = (1 << FTM_CnSC_MSB_SHIFT) | (1 << FTM_CnSC_ELSA_SHIFT);\n-            break;\n-\n-        case PWM_CENTER:\n-            mode_mask = (1 << FTM_CnSC_MSB_SHIFT);\n-            ftm->SC |= (1 << FTM_SC_CPWMS_SHIFT);\n-            break;\n-    }\n-    for (int i = 0; i < channels; i++) {\n-        /* cppcheck thinks ftmchan may be NULL here, but the variable is\n-         * assigned in all non-returning branches of the switch at the top of\n-         * this function. */\n-        /* cppcheck-suppress nullPointer ftmchan */\n-        ftm->CONTROLS[ftmchan[i]].CnSC = mode_mask;\n+    /* setup the configured channels */\n+    for (int i = 0; i < (int)pwm_config[pwm].chan_numof; i++) {\n+        /* configure the used pin */\n+        gpio_init_port(pwm_config[pwm].chan[i].pin,\n+                       PORT_PCR_MUX(pwm_config[pwm].chan[i].af));\n+        /* set the given mode */\n+        ftm(pwm)->CONTROLS[pwm_config[pwm].chan[i].ftm_chan].CnSC = mode;\n+        /* and reset the PWM to 0% duty cycle */\n+        ftm(pwm)->CONTROLS[pwm_config[pwm].chan[i].ftm_chan].CnV = 0;\n     }\n \n-    /* enable timer ergo the PWM generation */\n-    pwm_start(dev);\n+    /* and now we start the actual waveform generation */\n+    pwm_start(pwm);\n \n-    /* Return actual frequency */\n-    return (pwm_clk / (1 << prescaler)) / res;\n+    /* finally we need to return the actual applies PWM frequency */","path":"cpu/kinetis_common/periph/pwm.c","position":307,"original_position":307,"commit_id":"d281c67317c5ee117d6196b4fdc34cf8c2957763","original_commit_id":"d281c67317c5ee117d6196b4fdc34cf8c2957763","user":{"login":"gebart","id":317506,"avatar_url":"https://avatars.githubusercontent.com/u/317506?v=3","gravatar_id":"","url":"https://api.github.com/users/gebart","html_url":"https://github.com/gebart","followers_url":"https://api.github.com/users/gebart/followers","following_url":"https://api.github.com/users/gebart/following{/other_user}","gists_url":"https://api.github.com/users/gebart/gists{/gist_id}","starred_url":"https://api.github.com/users/gebart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gebart/subscriptions","organizations_url":"https://api.github.com/users/gebart/orgs","repos_url":"https://api.github.com/users/gebart/repos","events_url":"https://api.github.com/users/gebart/events{/privacy}","received_events_url":"https://api.github.com/users/gebart/received_events","type":"User","site_admin":false},"body":"applies->applied","created_at":"2016-12-19T17:37:30Z","updated_at":"2016-12-19T17:37:30Z","html_url":"https://github.com/RIOT-OS/RIOT/pull/6230#discussion_r93080678","pull_request_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/6230","_links":{"self":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments/93080678"},"html":{"href":"https://github.com/RIOT-OS/RIOT/pull/6230#discussion_r93080678"},"pull_request":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/6230"}}},"pull_request":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/6230","id":98235294,"html_url":"https://github.com/RIOT-OS/RIOT/pull/6230","diff_url":"https://github.com/RIOT-OS/RIOT/pull/6230.diff","patch_url":"https://github.com/RIOT-OS/RIOT/pull/6230.patch","issue_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/6230","number":6230,"state":"open","locked":false,"title":"cpu/kinetis: reworked PWM driver implementation","user":{"login":"haukepetersen","id":620834,"avatar_url":"https://avatars.githubusercontent.com/u/620834?v=3","gravatar_id":"","url":"https://api.github.com/users/haukepetersen","html_url":"https://github.com/haukepetersen","followers_url":"https://api.github.com/users/haukepetersen/followers","following_url":"https://api.github.com/users/haukepetersen/following{/other_user}","gists_url":"https://api.github.com/users/haukepetersen/gists{/gist_id}","starred_url":"https://api.github.com/users/haukepetersen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haukepetersen/subscriptions","organizations_url":"https://api.github.com/users/haukepetersen/orgs","repos_url":"https://api.github.com/users/haukepetersen/repos","events_url":"https://api.github.com/users/haukepetersen/events{/privacy}","received_events_url":"https://api.github.com/users/haukepetersen/received_events","type":"User","site_admin":false},"body":"Some simplification and 'modern' style for the Kinetis PWM driver.\r\n\r\nEDIT:\r\n~~So far untested (hence WIP) and only adapted for the phyNODE and the mulle.~~\r\n\r\nConfirmed working for the `pba-d-01-kw2x` (phyNODE)","created_at":"2016-12-15T21:33:46Z","updated_at":"2016-12-19T17:42:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"62e405cbf45ae2cba2e9bb4d5a24cdee186db4b2","assignee":{"login":"gebart","id":317506,"avatar_url":"https://avatars.githubusercontent.com/u/317506?v=3","gravatar_id":"","url":"https://api.github.com/users/gebart","html_url":"https://github.com/gebart","followers_url":"https://api.github.com/users/gebart/followers","following_url":"https://api.github.com/users/gebart/following{/other_user}","gists_url":"https://api.github.com/users/gebart/gists{/gist_id}","starred_url":"https://api.github.com/users/gebart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gebart/subscriptions","organizations_url":"https://api.github.com/users/gebart/orgs","repos_url":"https://api.github.com/users/gebart/repos","events_url":"https://api.github.com/users/gebart/events{/privacy}","received_events_url":"https://api.github.com/users/gebart/received_events","type":"User","site_admin":false},"assignees":[{"login":"gebart","id":317506,"avatar_url":"https://avatars.githubusercontent.com/u/317506?v=3","gravatar_id":"","url":"https://api.github.com/users/gebart","html_url":"https://github.com/gebart","followers_url":"https://api.github.com/users/gebart/followers","following_url":"https://api.github.com/users/gebart/following{/other_user}","gists_url":"https://api.github.com/users/gebart/gists{/gist_id}","starred_url":"https://api.github.com/users/gebart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gebart/subscriptions","organizations_url":"https://api.github.com/users/gebart/orgs","repos_url":"https://api.github.com/users/gebart/repos","events_url":"https://api.github.com/users/gebart/events{/privacy}","received_events_url":"https://api.github.com/users/gebart/received_events","type":"User","site_admin":false},{"login":"jfischer-phytec-iot","id":9864546,"avatar_url":"https://avatars.githubusercontent.com/u/9864546?v=3","gravatar_id":"","url":"https://api.github.com/users/jfischer-phytec-iot","html_url":"https://github.com/jfischer-phytec-iot","followers_url":"https://api.github.com/users/jfischer-phytec-iot/followers","following_url":"https://api.github.com/users/jfischer-phytec-iot/following{/other_user}","gists_url":"https://api.github.com/users/jfischer-phytec-iot/gists{/gist_id}","starred_url":"https://api.github.com/users/jfischer-phytec-iot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jfischer-phytec-iot/subscriptions","organizations_url":"https://api.github.com/users/jfischer-phytec-iot/orgs","repos_url":"https://api.github.com/users/jfischer-phytec-iot/repos","events_url":"https://api.github.com/users/jfischer-phytec-iot/events{/privacy}","received_events_url":"https://api.github.com/users/jfischer-phytec-iot/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones/16","html_url":"https://github.com/RIOT-OS/RIOT/milestone/16","labels_url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones/16/labels","id":2079772,"number":16,"title":"Release 2017.01","description":"","creator":{"login":"miri64","id":675644,"avatar_url":"https://avatars.githubusercontent.com/u/675644?v=3","gravatar_id":"","url":"https://api.github.com/users/miri64","html_url":"https://github.com/miri64","followers_url":"https://api.github.com/users/miri64/followers","following_url":"https://api.github.com/users/miri64/following{/other_user}","gists_url":"https://api.github.com/users/miri64/gists{/gist_id}","starred_url":"https://api.github.com/users/miri64/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/miri64/subscriptions","organizations_url":"https://api.github.com/users/miri64/orgs","repos_url":"https://api.github.com/users/miri64/repos","events_url":"https://api.github.com/users/miri64/events{/privacy}","received_events_url":"https://api.github.com/users/miri64/received_events","type":"User","site_admin":false},"open_issues":260,"closed_issues":51,"state":"open","created_at":"2016-10-19T12:20:59Z","updated_at":"2016-12-19T08:44:41Z","due_on":"2017-01-31T08:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/6230/commits","review_comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/6230/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/6230/comments","statuses_url":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/d281c67317c5ee117d6196b4fdc34cf8c2957763","head":{"label":"haukepetersen:opt_kinetis_pwm","ref":"opt_kinetis_pwm","sha":"d281c67317c5ee117d6196b4fdc34cf8c2957763","user":{"login":"haukepetersen","id":620834,"avatar_url":"https://avatars.githubusercontent.com/u/620834?v=3","gravatar_id":"","url":"https://api.github.com/users/haukepetersen","html_url":"https://github.com/haukepetersen","followers_url":"https://api.github.com/users/haukepetersen/followers","following_url":"https://api.github.com/users/haukepetersen/following{/other_user}","gists_url":"https://api.github.com/users/haukepetersen/gists{/gist_id}","starred_url":"https://api.github.com/users/haukepetersen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haukepetersen/subscriptions","organizations_url":"https://api.github.com/users/haukepetersen/orgs","repos_url":"https://api.github.com/users/haukepetersen/repos","events_url":"https://api.github.com/users/haukepetersen/events{/privacy}","received_events_url":"https://api.github.com/users/haukepetersen/received_events","type":"User","site_admin":false},"repo":{"id":13741766,"name":"RIOT","full_name":"haukepetersen/RIOT","owner":{"login":"haukepetersen","id":620834,"avatar_url":"https://avatars.githubusercontent.com/u/620834?v=3","gravatar_id":"","url":"https://api.github.com/users/haukepetersen","html_url":"https://github.com/haukepetersen","followers_url":"https://api.github.com/users/haukepetersen/followers","following_url":"https://api.github.com/users/haukepetersen/following{/other_user}","gists_url":"https://api.github.com/users/haukepetersen/gists{/gist_id}","starred_url":"https://api.github.com/users/haukepetersen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/haukepetersen/subscriptions","organizations_url":"https://api.github.com/users/haukepetersen/orgs","repos_url":"https://api.github.com/users/haukepetersen/repos","events_url":"https://api.github.com/users/haukepetersen/events{/privacy}","received_events_url":"https://api.github.com/users/haukepetersen/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/haukepetersen/RIOT","description":"RIOT OS -  The revolutionary IoT OS","fork":true,"url":"https://api.github.com/repos/haukepetersen/RIOT","forks_url":"https://api.github.com/repos/haukepetersen/RIOT/forks","keys_url":"https://api.github.com/repos/haukepetersen/RIOT/keys{/key_id}","collaborators_url":"https://api.github.com/repos/haukepetersen/RIOT/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/haukepetersen/RIOT/teams","hooks_url":"https://api.github.com/repos/haukepetersen/RIOT/hooks","issue_events_url":"https://api.github.com/repos/haukepetersen/RIOT/issues/events{/number}","events_url":"https://api.github.com/repos/haukepetersen/RIOT/events","assignees_url":"https://api.github.com/repos/haukepetersen/RIOT/assignees{/user}","branches_url":"https://api.github.com/repos/haukepetersen/RIOT/branches{/branch}","tags_url":"https://api.github.com/repos/haukepetersen/RIOT/tags","blobs_url":"https://api.github.com/repos/haukepetersen/RIOT/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/haukepetersen/RIOT/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/haukepetersen/RIOT/git/refs{/sha}","trees_url":"https://api.github.com/repos/haukepetersen/RIOT/git/trees{/sha}","statuses_url":"https://api.github.com/repos/haukepetersen/RIOT/statuses/{sha}","languages_url":"https://api.github.com/repos/haukepetersen/RIOT/languages","stargazers_url":"https://api.github.com/repos/haukepetersen/RIOT/stargazers","contributors_url":"https://api.github.com/repos/haukepetersen/RIOT/contributors","subscribers_url":"https://api.github.com/repos/haukepetersen/RIOT/subscribers","subscription_url":"https://api.github.com/repos/haukepetersen/RIOT/subscription","commits_url":"https://api.github.com/repos/haukepetersen/RIOT/commits{/sha}","git_commits_url":"https://api.github.com/repos/haukepetersen/RIOT/git/commits{/sha}","comments_url":"https://api.github.com/repos/haukepetersen/RIOT/comments{/number}","issue_comment_url":"https://api.github.com/repos/haukepetersen/RIOT/issues/comments{/number}","contents_url":"https://api.github.com/repos/haukepetersen/RIOT/contents/{+path}","compare_url":"https://api.github.com/repos/haukepetersen/RIOT/compare/{base}...{head}","merges_url":"https://api.github.com/repos/haukepetersen/RIOT/merges","archive_url":"https://api.github.com/repos/haukepetersen/RIOT/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/haukepetersen/RIOT/downloads","issues_url":"https://api.github.com/repos/haukepetersen/RIOT/issues{/number}","pulls_url":"https://api.github.com/repos/haukepetersen/RIOT/pulls{/number}","milestones_url":"https://api.github.com/repos/haukepetersen/RIOT/milestones{/number}","notifications_url":"https://api.github.com/repos/haukepetersen/RIOT/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/haukepetersen/RIOT/labels{/name}","releases_url":"https://api.github.com/repos/haukepetersen/RIOT/releases{/id}","deployments_url":"https://api.github.com/repos/haukepetersen/RIOT/deployments","created_at":"2013-10-21T12:31:38Z","updated_at":"2015-03-02T09:15:38Z","pushed_at":"2016-12-19T13:18:08Z","git_url":"git://github.com/haukepetersen/RIOT.git","ssh_url":"git@github.com:haukepetersen/RIOT.git","clone_url":"https://github.com/haukepetersen/RIOT.git","svn_url":"https://github.com/haukepetersen/RIOT","homepage":"https://github.com/RIOT-OS/RIOT/wiki","size":34119,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":1,"forks":2,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"RIOT-OS:master","ref":"master","sha":"ee7f0013b8fd2747558336ac7d291d972efbc953","user":{"login":"RIOT-OS","id":3079480,"avatar_url":"https://avatars.githubusercontent.com/u/3079480?v=3","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,"name":"RIOT","full_name":"RIOT-OS/RIOT","owner":{"login":"RIOT-OS","id":3079480,"avatar_url":"https://avatars.githubusercontent.com/u/3079480?v=3","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},"private":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":"2016-12-19T06:53:49Z","pushed_at":"2016-12-19T16:50:44Z","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":32247,"stargazers_count":1018,"watchers_count":1018,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":684,"mirror_url":null,"open_issues_count":547,"forks":684,"open_issues":547,"watchers":1018,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/6230"},"html":{"href":"https://github.com/RIOT-OS/RIOT/pull/6230"},"issue":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/issues/6230"},"comments":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/issues/6230/comments"},"review_comments":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/6230/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/6230/commits"},"statuses":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/d281c67317c5ee117d6196b4fdc34cf8c2957763"}}}}
{"actor":{"display_login":"gebart"}}