GitHub PullRequestReviewCommentEvent at 2014-10-21 08:59:15
Repository: RIOT
Actor: thomaseichinger
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments/19136393","id":19136393,"diff_hunk":"@@ -240,21 +363,320 @@ void at86rf231_reset(void)\n     while (delay--){}\n \n     gpio_set(AT86RF231_RESET);\n+}\n \n-    /* Send a FORCE TRX OFF command */\n-    at86rf231_reg_write(AT86RF231_REG__TRX_STATE, AT86RF231_TRX_STATE__FORCE_TRX_OFF);\n+int at86rf231_get_option(netdev_t *dev, netdev_opt_t opt, void *value,\n+                         size_t *value_len)\n+{\n+    /* XXX: first check only for backwards compatibility with transceiver\n+     *      (see at86rf231_init) remove when adapter for transceiver exists */\n+    if (dev != &at86rf231_netdev) {\n+        return -ENODEV;\n+    }\n \n-    /* busy wait for TRX_OFF state */\n-    uint8_t status;\n-    uint8_t max_wait = 100;\n+    switch (opt) {\n+        case NETDEV_OPT_CHANNEL:\n+            if (*value_len < sizeof(unsigned int)) {\n+                return -EOVERFLOW;\n+            }\n+            if (*value_len > sizeof(unsigned int)) {\n+                *value_len = sizeof(unsigned int);\n+            }\n+            *((unsigned int *)value) = at86rf231_get_channel();\n+            break;\n \n-    do {\n-        status = at86rf231_get_status();\n+        case NETDEV_OPT_ADDRESS:\n+            if (*value_len < sizeof(uint16_t)) {\n+                return -EOVERFLOW;\n+            }\n+            if (*value_len > sizeof(uint16_t)) {\n+                *value_len = sizeof(uint16_t);\n+            }\n+            *((uint16_t *)value) = at86rf231_get_address();\n+            break;\n \n-        if (!--max_wait) {\n-            printf(\"at86rf231 : ERROR : could not enter TRX_OFF mode\\n\");\n+        case NETDEV_OPT_NID:\n+            if (*value_len < sizeof(uint16_t)) {\n+                return -EOVERFLOW;\n+            }\n+            if (*value_len > sizeof(uint16_t)) {\n+                *value_len = sizeof(uint16_t);\n+            }\n+            *((uint16_t *)value) = at86rf231_get_pan();\n             break;\n-        }\n-    } while ((status & AT86RF231_TRX_STATUS_MASK__TRX_STATUS)\n-             != AT86RF231_TRX_STATUS__TRX_OFF);\n+\n+        case NETDEV_OPT_ADDRESS_LONG:\n+            if (*value_len < sizeof(uint64_t)) {\n+                return -EOVERFLOW;\n+            }\n+            if (*value_len > sizeof(uint64_t)) {\n+                *value_len = sizeof(uint64_t);\n+            }\n+            *((uint64_t *)value) = at86rf231_get_address_long();\n+            break;\n+\n+        case NETDEV_OPT_MAX_PACKET_SIZE:\n+            if (*value_len == 0) {\n+                return -EOVERFLOW;\n+            }\n+            if (*value_len > sizeof(uint8_t)) {\n+                *value_len = sizeof(uint8_t);\n+            }\n+            *((uint8_t *)value) = AT86RF231_MAX_PKT_LENGTH;\n+            break;\n+\n+        case NETDEV_OPT_PROTO:\n+            if (*value_len < sizeof(netdev_proto_t)) {\n+                return -EOVERFLOW;\n+            }\n+            if (*value_len > sizeof(netdev_proto_t)) {\n+                *value_len = sizeof(netdev_proto_t);\n+            }\n+            *((netdev_type_t *)value) = NETDEV_PROTO_802154;\n+            break;\n+\n+        case NETDEV_OPT_SRC_LEN:\n+            if (*value_len < sizeof(size_t)) {\n+                return -EOVERFLOW;\n+            }\n+            if (*value_len > sizeof(size_t)) {\n+                *value_len = sizeof(size_t);\n+            }\n+            *((size_t *)value) = _default_src_addr_len;\n+\n+        default:\n+            return -ENOTSUP;\n+    }\n+\n+    return 0;\n+}\n+\n+static int _type_pun_up_unsigned(void *value_out, size_t desired_len,\n+                                 void *value_in, size_t given_len)\n+{\n+    if (given_len > desired_len) {\n+        return -EOVERFLOW;\n+    }\n+\n+    /* XXX this is ugly, but bear with me */\n+    switch (given_len) {\n+        case 8:\n+            switch (desired_len) {\n+                case 8:\n+                    *((uint64_t *)value_out) = (*((uint64_t *)value_in));\n+                    return 0;\n+                default:\n+                    return -EINVAL;\n+            }\n+\n+        case 4:\n+            switch (desired_len) {\n+                case 8:\n+                    *((uint64_t *)value_out) = (uint64_t)(*((uint32_t *)value_in));\n+                    return 0;\n+                case 4:\n+                    *((uint32_t *)value_out) = (*((uint32_t *)value_in));\n+                    return 0;\n+                default:\n+                    return -EINVAL;\n+            }\n+\n+        case 2:\n+            switch (desired_len) {\n+                case 8:\n+                    *((uint64_t *)value_out) = (uint64_t)(*((uint16_t *)value_in));\n+                    return 0;\n+                case 4:\n+                    *((uint32_t *)value_out) = (uint32_t)(*((uint16_t *)value_in));\n+                    return 0;\n+                case 2:\n+                    *((uint16_t *)value_out) = (*((uint16_t *)value_in));\n+                    return 0;\n+                default:\n+                    return -EINVAL;\n+            }\n+\n+        case 1:\n+            switch (desired_len) {\n+                case 8:\n+                    *((uint64_t *)value_out) = (uint64_t)(*((uint8_t *)value_in));\n+                    return 0;\n+                case 4:\n+                    *((uint32_t *)value_out) = (uint32_t)(*((uint8_t *)value_in));\n+                    return 0;\n+                case 2:\n+                    *((uint16_t *)value_out) = (uint16_t)(*((uint8_t *)value_in));\n+                    return 0;\n+                case 1:\n+                    *((uint8_t *)value_out) = (*((uint8_t *)value_in));\n+                    return 0;\n+                default:\n+                    return -EINVAL;\n+            }\n+\n+        default:\n+            return -EINVAL;\n+    }\n+}\n+\n+int at86rf231_set_option(netdev_t *dev, netdev_opt_t opt, void *value,\n+                         size_t value_len)\n+{\n+    uint8_t set_value[sizeof(uint64_t)];\n+    int res = 0;\n+\n+    /* XXX: first check only for backwards compatibility with transceiver\n+     *      (see at86rf231_init) remove when adapter for transceiver exists */\n+    if (dev != &at86rf231_netdev) {\n+        return -ENODEV;\n+    }\n+\n+    switch (opt) {\n+        case NETDEV_OPT_CHANNEL:\n+            if ((res = _type_pun_up_unsigned(set_value, sizeof(unsigned int),\n+                                             value, value_len)) == 0) {\n+                unsigned int *v = (unsigned int *)set_value;\n+                if (*v > 26) {\n+                    return -EINVAL;\n+                }\n+                at86rf231_set_channel(*v);\n+            }\n+            break;\n+\n+        case NETDEV_OPT_ADDRESS:\n+            if ((res = _type_pun_up_unsigned(set_value, sizeof(uint16_t),\n+                                             value, value_len)) == 0) {\n+                uint16_t *v = (uint16_t *)set_value;\n+                if (*v == 0xffff) {\n+                    /* Do not allow setting to broadcast */\n+                    return -EINVAL;\n+                }\n+                at86rf231_set_address(*v);\n+            }\n+            break;\n+\n+        case NETDEV_OPT_NID:\n+            if ((res = _type_pun_up_unsigned(set_value, sizeof(uint16_t),\n+                                             value, value_len)) == 0) {\n+                uint16_t *v = (uint16_t *)set_value;\n+                if (*v == 0xffff) {\n+                    /* Do not allow setting to broadcast */\n+                    return -EINVAL;\n+                }\n+                at86rf231_set_pan(*v);\n+            }\n+            break;\n+\n+        case NETDEV_OPT_ADDRESS_LONG:\n+            if ((res = _type_pun_up_unsigned(set_value, sizeof(uint64_t),\n+                                             value, value_len)) == 0) {\n+                uint64_t *v = (uint64_t *)set_value;\n+                /* TODO: error checking? */\n+                at86rf231_set_address_long(*v);\n+            }\n+            break;\n+\n+        case NETDEV_OPT_SRC_LEN:\n+            if ((res = _type_pun_up_unsigned(set_value, sizeof(size_t),\n+                                             value, value_len)) == 0) {\n+                size_t *v = (size_t *)set_value;\n+\n+                if (*v != 2 || *v != 8) {\n+                    return -EINVAL;\n+                }\n+                _default_src_addr_len = *v;\n+            }\n+            break;\n+\n+        default:\n+            return -ENOTSUP;\n+    }\n+\n+    return res;\n+}\n+\n+int at86rf231_get_state(netdev_t *dev, netdev_state_t *state)\n+{\n+    /* XXX: first check only for backwards compatibility with transceiver\n+     *      (see at86rf231_init) remove when adapter for transceiver exists */\n+    if (dev != &at86rf231_netdev) {\n+        return -ENODEV;\n+    }\n+\n+    if (!at86rf231_is_on()) {\n+        *state = NETDEV_STATE_POWER_OFF;\n+    }\n+    else if (at86rf231_get_monitor()) {\n+        *state = NETDEV_STATE_PROMISCUOUS_MODE;\n+    }\n+    else {\n+        *state = NETDEV_STATE_RX_MODE;\n+    }\n+\n+    return 0;\n+}\n+\n+int at86rf231_set_state(netdev_t *dev, netdev_state_t state)\n+{\n+    /* XXX: first check only for backwards compatibility with transceiver\n+     *      (see at86rf231_init) remove when adapter for transceiver exists */\n+    if (dev != &at86rf231_netdev) {\n+        return -ENODEV;\n+    }\n+\n+    if (state != NETDEV_STATE_PROMISCUOUS_MODE && at86rf231_get_monitor()) {\n+        at86rf231_set_monitor(0);\n+    }\n+\n+    switch (state) {\n+        case NETDEV_STATE_POWER_OFF:\n+            at86rf231_off();\n+            break;\n+\n+        case NETDEV_STATE_RX_MODE:\n+            at86rf231_switch_to_rx();\n+            break;\n+\n+        case NETDEV_STATE_PROMISCUOUS_MODE:\n+            at86rf231_set_monitor(1);\n+            break;\n+\n+        default:\n+            return -ENOTSUP;\n+    }\n+\n+    return 0;\n+}\n+\n+int at86rf231_channel_clear(netdev_t *dev)\n+{\n+    (void)dev;\n+    /* channel is checked by hardware automatically before transmission */\n+    return 1;\n }\n+\n+void at86rf231_event(netdev_t *dev, uint32_t event_type)\n+{\n+    (void)dev;\n+    (void)event_type;\n+}\n+\n+const netdev_802154_driver_t at86rf231_driver = {","path":"drivers/at86rf231/at86rf231.c","position":603,"original_position":606,"commit_id":"3fa6521aff0b47bc50b4b4fda141c366c807a9a0","original_commit_id":"ae5f9cbce801ba899e7fb5c03a9073d536816902","user":{"login":"thomaseichinger","id":56618,"avatar_url":"https://avatars.githubusercontent.com/u/56618?v=2","gravatar_id":"","url":"https://api.github.com/users/thomaseichinger","html_url":"https://github.com/thomaseichinger","followers_url":"https://api.github.com/users/thomaseichinger/followers","following_url":"https://api.github.com/users/thomaseichinger/following{/other_user}","gists_url":"https://api.github.com/users/thomaseichinger/gists{/gist_id}","starred_url":"https://api.github.com/users/thomaseichinger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thomaseichinger/subscriptions","organizations_url":"https://api.github.com/users/thomaseichinger/orgs","repos_url":"https://api.github.com/users/thomaseichinger/repos","events_url":"https://api.github.com/users/thomaseichinger/events{/privacy}","received_events_url":"https://api.github.com/users/thomaseichinger/received_events","type":"User","site_admin":false},"body":"addressed designated initializers, forgot to add `drivers/include/netdev/802154.h` which defines `netdev_802154_driver_t`. thanks for pointing this out.","created_at":"2014-10-21T08:59:15Z","updated_at":"2014-10-21T08:59:15Z","html_url":"https://github.com/RIOT-OS/RIOT/pull/1846#discussion_r19136393","pull_request_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/1846","_links":{"self":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments/19136393"},"html":{"href":"https://github.com/RIOT-OS/RIOT/pull/1846#discussion_r19136393"},"pull_request":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/1846"}}},"pull_request":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/1846","id":23021282,"html_url":"https://github.com/RIOT-OS/RIOT/pull/1846","diff_url":"https://github.com/RIOT-OS/RIOT/pull/1846.diff","patch_url":"https://github.com/RIOT-OS/RIOT/pull/1846.patch","issue_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/1846","number":1846,"state":"open","locked":false,"title":"drivers/at86rf231: refactoring of the at86rf231 radio driver","user":{"login":"thomaseichinger","id":56618,"avatar_url":"https://avatars.githubusercontent.com/u/56618?v=2","gravatar_id":"","url":"https://api.github.com/users/thomaseichinger","html_url":"https://github.com/thomaseichinger","followers_url":"https://api.github.com/users/thomaseichinger/followers","following_url":"https://api.github.com/users/thomaseichinger/following{/other_user}","gists_url":"https://api.github.com/users/thomaseichinger/gists{/gist_id}","starred_url":"https://api.github.com/users/thomaseichinger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thomaseichinger/subscriptions","organizations_url":"https://api.github.com/users/thomaseichinger/orgs","repos_url":"https://api.github.com/users/thomaseichinger/repos","events_url":"https://api.github.com/users/thomaseichinger/events{/privacy}","received_events_url":"https://api.github.com/users/thomaseichinger/received_events","type":"User","site_admin":false},"body":"* deploy extended operation mode\r\n* cleanup\r\n* implement netdev 802154.h interface","created_at":"2014-10-20T15:10:25Z","updated_at":"2014-10-21T08:59:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9f4b6db9374c77f48b0b33d37b2172fa946463ef","assignee":{"login":"OlegHahm","id":1590423,"avatar_url":"https://avatars.githubusercontent.com/u/1590423?v=2","gravatar_id":"","url":"https://api.github.com/users/OlegHahm","html_url":"https://github.com/OlegHahm","followers_url":"https://api.github.com/users/OlegHahm/followers","following_url":"https://api.github.com/users/OlegHahm/following{/other_user}","gists_url":"https://api.github.com/users/OlegHahm/gists{/gist_id}","starred_url":"https://api.github.com/users/OlegHahm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OlegHahm/subscriptions","organizations_url":"https://api.github.com/users/OlegHahm/orgs","repos_url":"https://api.github.com/users/OlegHahm/repos","events_url":"https://api.github.com/users/OlegHahm/events{/privacy}","received_events_url":"https://api.github.com/users/OlegHahm/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones/7","labels_url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones/7/labels","id":601251,"number":7,"title":"Release NEXT MAJOR","description":"This is the next major milestone. It gets a valid name if we know the next date to release on.","creator":{"login":"OlegHahm","id":1590423,"avatar_url":"https://avatars.githubusercontent.com/u/1590423?v=2","gravatar_id":"","url":"https://api.github.com/users/OlegHahm","html_url":"https://github.com/OlegHahm","followers_url":"https://api.github.com/users/OlegHahm/followers","following_url":"https://api.github.com/users/OlegHahm/following{/other_user}","gists_url":"https://api.github.com/users/OlegHahm/gists{/gist_id}","starred_url":"https://api.github.com/users/OlegHahm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OlegHahm/subscriptions","organizations_url":"https://api.github.com/users/OlegHahm/orgs","repos_url":"https://api.github.com/users/OlegHahm/repos","events_url":"https://api.github.com/users/OlegHahm/events{/privacy}","received_events_url":"https://api.github.com/users/OlegHahm/received_events","type":"User","site_admin":false},"open_issues":69,"closed_issues":202,"state":"open","created_at":"2014-03-18T09:15:46Z","updated_at":"2014-10-21T07:56:24Z","due_on":null},"commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/1846/commits","review_comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/1846/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/1846/comments","statuses_url":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/3fa6521aff0b47bc50b4b4fda141c366c807a9a0","head":{"label":"thomaseichinger:at86rf23x","ref":"at86rf23x","sha":"3fa6521aff0b47bc50b4b4fda141c366c807a9a0","user":{"login":"thomaseichinger","id":56618,"avatar_url":"https://avatars.githubusercontent.com/u/56618?v=2","gravatar_id":"","url":"https://api.github.com/users/thomaseichinger","html_url":"https://github.com/thomaseichinger","followers_url":"https://api.github.com/users/thomaseichinger/followers","following_url":"https://api.github.com/users/thomaseichinger/following{/other_user}","gists_url":"https://api.github.com/users/thomaseichinger/gists{/gist_id}","starred_url":"https://api.github.com/users/thomaseichinger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thomaseichinger/subscriptions","organizations_url":"https://api.github.com/users/thomaseichinger/orgs","repos_url":"https://api.github.com/users/thomaseichinger/repos","events_url":"https://api.github.com/users/thomaseichinger/events{/privacy}","received_events_url":"https://api.github.com/users/thomaseichinger/received_events","type":"User","site_admin":false},"repo":{"id":11602439,"name":"RIOT","full_name":"thomaseichinger/RIOT","owner":{"login":"thomaseichinger","id":56618,"avatar_url":"https://avatars.githubusercontent.com/u/56618?v=2","gravatar_id":"","url":"https://api.github.com/users/thomaseichinger","html_url":"https://github.com/thomaseichinger","followers_url":"https://api.github.com/users/thomaseichinger/followers","following_url":"https://api.github.com/users/thomaseichinger/following{/other_user}","gists_url":"https://api.github.com/users/thomaseichinger/gists{/gist_id}","starred_url":"https://api.github.com/users/thomaseichinger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thomaseichinger/subscriptions","organizations_url":"https://api.github.com/users/thomaseichinger/orgs","repos_url":"https://api.github.com/users/thomaseichinger/repos","events_url":"https://api.github.com/users/thomaseichinger/events{/privacy}","received_events_url":"https://api.github.com/users/thomaseichinger/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/thomaseichinger/RIOT","description":"RIOT OS -  The revolutionary IoT OS","fork":true,"url":"https://api.github.com/repos/thomaseichinger/RIOT","forks_url":"https://api.github.com/repos/thomaseichinger/RIOT/forks","keys_url":"https://api.github.com/repos/thomaseichinger/RIOT/keys{/key_id}","collaborators_url":"https://api.github.com/repos/thomaseichinger/RIOT/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/thomaseichinger/RIOT/teams","hooks_url":"https://api.github.com/repos/thomaseichinger/RIOT/hooks","issue_events_url":"https://api.github.com/repos/thomaseichinger/RIOT/issues/events{/number}","events_url":"https://api.github.com/repos/thomaseichinger/RIOT/events","assignees_url":"https://api.github.com/repos/thomaseichinger/RIOT/assignees{/user}","branches_url":"https://api.github.com/repos/thomaseichinger/RIOT/branches{/branch}","tags_url":"https://api.github.com/repos/thomaseichinger/RIOT/tags","blobs_url":"https://api.github.com/repos/thomaseichinger/RIOT/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/thomaseichinger/RIOT/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/thomaseichinger/RIOT/git/refs{/sha}","trees_url":"https://api.github.com/repos/thomaseichinger/RIOT/git/trees{/sha}","statuses_url":"https://api.github.com/repos/thomaseichinger/RIOT/statuses/{sha}","languages_url":"https://api.github.com/repos/thomaseichinger/RIOT/languages","stargazers_url":"https://api.github.com/repos/thomaseichinger/RIOT/stargazers","contributors_url":"https://api.github.com/repos/thomaseichinger/RIOT/contributors","subscribers_url":"https://api.github.com/repos/thomaseichinger/RIOT/subscribers","subscription_url":"https://api.github.com/repos/thomaseichinger/RIOT/subscription","commits_url":"https://api.github.com/repos/thomaseichinger/RIOT/commits{/sha}","git_commits_url":"https://api.github.com/repos/thomaseichinger/RIOT/git/commits{/sha}","comments_url":"https://api.github.com/repos/thomaseichinger/RIOT/comments{/number}","issue_comment_url":"https://api.github.com/repos/thomaseichinger/RIOT/issues/comments/{number}","contents_url":"https://api.github.com/repos/thomaseichinger/RIOT/contents/{+path}","compare_url":"https://api.github.com/repos/thomaseichinger/RIOT/compare/{base}...{head}","merges_url":"https://api.github.com/repos/thomaseichinger/RIOT/merges","archive_url":"https://api.github.com/repos/thomaseichinger/RIOT/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/thomaseichinger/RIOT/downloads","issues_url":"https://api.github.com/repos/thomaseichinger/RIOT/issues{/number}","pulls_url":"https://api.github.com/repos/thomaseichinger/RIOT/pulls{/number}","milestones_url":"https://api.github.com/repos/thomaseichinger/RIOT/milestones{/number}","notifications_url":"https://api.github.com/repos/thomaseichinger/RIOT/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/thomaseichinger/RIOT/labels{/name}","releases_url":"https://api.github.com/repos/thomaseichinger/RIOT/releases{/id}","created_at":"2013-07-23T07:33:28Z","updated_at":"2014-06-23T08:50:01Z","pushed_at":"2014-10-21T08:58:57Z","git_url":"git://github.com/thomaseichinger/RIOT.git","ssh_url":"git@github.com:thomaseichinger/RIOT.git","clone_url":"https://github.com/thomaseichinger/RIOT.git","svn_url":"https://github.com/thomaseichinger/RIOT","homepage":"https://github.com/RIOT-OS/RIOT/wiki","size":19977,"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":2,"forks":2,"open_issues":2,"watchers":0,"default_branch":"master"}},"base":{"label":"RIOT-OS:master","ref":"master","sha":"a2bb383a86f99bcdacae8c8fcd0cd6920c1d9ccc","user":{"login":"RIOT-OS","id":3079480,"avatar_url":"https://avatars.githubusercontent.com/u/3079480?v=2","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=2","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}","created_at":"2012-12-29T20:38:40Z","updated_at":"2014-10-19T06:36:11Z","pushed_at":"2014-10-21T07:56:24Z","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":95014,"stargazers_count":182,"watchers_count":182,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":141,"mirror_url":null,"open_issues_count":250,"forks":141,"open_issues":250,"watchers":182,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/1846"},"html":{"href":"https://github.com/RIOT-OS/RIOT/pull/1846"},"issue":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/issues/1846"},"comments":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/issues/1846/comments"},"review_comments":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/1846/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/1846/commits"},"statuses":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/3fa6521aff0b47bc50b4b4fda141c366c807a9a0"}}}}