{"action":"created","comment":{"url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/comments/124382178","pull_request_review_id":46665409,"id":124382178,"diff_hunk":"@@ -0,0 +1,394 @@\n+/*\n+ * Copyright (c) 2017 Erwin Rol <erwin@erwinrol.com>\n+ * SPDX-License-Identifier: Apache-2.0\n+ */\n+\n+#define SYS_LOG_DOMAIN \"dev/eth_stm32_hal\"\n+#define SYS_LOG_LEVEL CONFIG_SYS_LOG_ETHERNET_LEVEL\n+#include <logging/sys_log.h>\n+\n+#include <kernel.h>\n+#include <device.h>\n+#include <misc/__assert.h>\n+#include <misc/util.h>\n+#include <errno.h>\n+#include <stdbool.h>\n+#include <net/net_pkt.h>\n+#include <net/net_if.h>\n+#include <soc.h>\n+#include <misc/printk.h>\n+#include <clock_control.h>\n+#include <clock_control/stm32_clock_control.h>\n+\n+#include <stm32f4xx_hal_eth.h>\n+\n+#include \"eth_stm32_hal_priv.h\"\n+\n+static ETH_DMADescTypeDef dma_rx_desc_tab[ETH_RXBUFNB] __aligned(4);\n+static ETH_DMADescTypeDef dma_tx_desc_tab[ETH_TXBUFNB] __aligned(4);\n+static u8_t dma_rx_buffer[ETH_RXBUFNB][ETH_RX_BUF_SIZE] __aligned(4);\n+static u8_t dma_tx_buffer[ETH_TXBUFNB][ETH_TX_BUF_SIZE] __aligned(4);\n+\n+static int eth_tx(struct net_if *iface, struct net_pkt *pkt)\n+{\n+\tstruct device *dev;\n+\tstruct eth_stm32_hal_dev_data *dev_data;\n+\tETH_HandleTypeDef *heth;\n+\tu8_t *dma_buffer;\n+\tint res;\n+\tstruct net_buf *frag;\n+\tu16_t total_len;\n+\t__IO ETH_DMADescTypeDef *dma_tx_desc;\n+\n+\t__ASSERT_NO_MSG(iface != NULL);\n+\t__ASSERT_NO_MSG(pkt != NULL);\n+\t__ASSERT_NO_MSG(pkt->frags != NULL);\n+\n+\tdev = net_if_get_device(iface);\n+\tdev_data = DEV_DATA(dev);\n+\n+\t__ASSERT_NO_MSG(dev != NULL);\n+\t__ASSERT_NO_MSG(dev_data != NULL);\n+\n+\theth = &dev_data->heth;\n+\n+\tk_mutex_lock(&dev_data->tx_mutex, K_FOREVER);\n+\n+\ttotal_len = net_pkt_ll_reserve(pkt) + net_pkt_get_len(pkt);\n+\tif (total_len > ETH_TX_BUF_SIZE) {\n+\t\tSYS_LOG_ERR(\"PKT to big\\n\");\n+\t\tres = -EIO;\n+\t\tgoto error;\n+\t}\n+\n+\tdma_tx_desc = heth->TxDesc;\n+\twhile ((dma_tx_desc->Status & ETH_DMATXDESC_OWN) != (u32_t)RESET) {\n+\t\tk_yield();\n+\t}\n+\n+\tdma_buffer = (u8_t *)(dma_tx_desc->Buffer1Addr);\n+\n+\tmemcpy(dma_buffer, net_pkt_ll(pkt),\n+\t\tnet_pkt_ll_reserve(pkt) + pkt->frags->len);\n+\tdma_buffer += net_pkt_ll_reserve(pkt) + pkt->frags->len;\n+\n+\tfrag = pkt->frags->frags;\n+\twhile (frag) {\n+\t\tmemcpy(dma_buffer, frag->data, frag->len);\n+\t\tdma_buffer += frag->len;\n+\t\tfrag = frag->frags;\n+\t}\n+\n+\tif (HAL_ETH_TransmitFrame(heth, total_len) != HAL_OK) {\n+\t\tSYS_LOG_ERR(\"HAL_ETH_TransmitFrame failed\\n\");\n+\t\tres = -EIO;\n+\t\tgoto error;\n+\t}\n+\n+\tres = 0;\n+error:\n+\t/* When Transmit Underflow flag is set, clear it and issue a\n+\t * Transmit Poll Demand to resume transmission.\n+\t */\n+\tif ((heth->Instance->DMASR & ETH_DMASR_TUS) != (u32_t)RESET) {\n+\t\t/* Clear TUS ETHERNET DMA flag */\n+\t\theth->Instance->DMASR = ETH_DMASR_TUS;\n+\t\t/* Resume DMA transmission*/\n+\t\theth->Instance->DMATPDR = 0;\n+\t}\n+\n+\tnet_pkt_unref(pkt);\n+\n+\tk_mutex_unlock(&dev_data->tx_mutex);\n+\n+\treturn res;\n+}\n+\n+static struct net_pkt *eth_rx(struct device *dev)\n+{\n+\tstruct eth_stm32_hal_dev_data *dev_data;\n+\tETH_HandleTypeDef *heth;\n+\t__IO ETH_DMADescTypeDef *dma_rx_desc;\n+\tstruct net_pkt *pkt;\n+\tu16_t total_len;\n+\tu8_t *dma_buffer;\n+\tint i;\n+\n+\t__ASSERT_NO_MSG(dev != NULL);\n+\n+\tdev_data = DEV_DATA(dev);\n+\n+\t__ASSERT_NO_MSG(dev_data != NULL);\n+\n+\theth = &dev_data->heth;\n+\n+\tif (HAL_ETH_GetReceivedFrame_IT(heth) != HAL_OK) {\n+\t\t/* no frame available */\n+\t\treturn NULL;\n+\t}\n+\n+\ttotal_len = heth->RxFrameInfos.length;\n+\tdma_buffer = (u8_t *)heth->RxFrameInfos.buffer;\n+\n+\tpkt = net_pkt_get_reserve_rx(0, K_NO_WAIT);\n+\tif (!pkt) {\n+\t\tSYS_LOG_ERR(\"Failed to obtain RX buffer\");\n+\t\tgoto release_desc;\n+\t}\n+\n+\tif (!net_pkt_append_all(pkt, total_len, dma_buffer, K_NO_WAIT)) {\n+\t\tSYS_LOG_ERR(\"Failed to append RX buffer to context buffer\");\n+\t\tnet_pkt_unref(pkt);\n+\t\tpkt = NULL;\n+\t\tgoto release_desc;\n+\t}\n+\n+release_desc:\n+\t/* Release descriptors to DMA */\n+\t/* Point to first descriptor */\n+\tdma_rx_desc = heth->RxFrameInfos.FSRxDesc;\n+\t/* Set Own bit in Rx descriptors: gives the buffers back to DMA */\n+\tfor (i = 0; i < heth->RxFrameInfos.SegCount; i++) {\n+\t\tdma_rx_desc->Status |= ETH_DMARXDESC_OWN;\n+\t\tdma_rx_desc = (ETH_DMADescTypeDef *)\n+\t\t\t(dma_rx_desc->Buffer2NextDescAddr);\n+\t}\n+\n+\t/* Clear Segment_Count */\n+\theth->RxFrameInfos.SegCount = 0;\n+\n+\t/* When Rx Buffer unavailable flag is set: clear it\n+\t * and resume reception.\n+\t */\n+\tif ((heth->Instance->DMASR & ETH_DMASR_RBUS) != (u32_t)RESET) {\n+\t\t/* Clear RBUS ETHERNET DMA flag */\n+\t\theth->Instance->DMASR = ETH_DMASR_RBUS;\n+\t\t/* Resume DMA reception */\n+\t\theth->Instance->DMARPDR = 0;\n+\t}\n+\n+\treturn pkt;\n+}\n+\n+static void rx_thread(void *arg1, void *unused1, void *unused2)\n+{\n+\tstruct device *dev;\n+\tstruct eth_stm32_hal_dev_data *dev_data;\n+\tstruct net_pkt *pkt;\n+\tint res;\n+\n+\t__ASSERT_NO_MSG(arg1 != NULL);\n+\tARG_UNUSED(unused1);\n+\tARG_UNUSED(unused2);\n+\n+\tdev = (struct device *)arg1;\n+\tdev_data = DEV_DATA(dev);\n+\n+\t__ASSERT_NO_MSG(dev_data != NULL);\n+\n+\twhile (1) {\n+\t\tk_sem_take(&dev_data->rx_int_sem, K_FOREVER);\n+\n+\t\twhile ((pkt = eth_rx(dev)) != NULL) {\n+\t\t\tnet_pkt_print_frags(pkt);\n+\t\t\tres = net_recv_data(dev_data->iface, pkt);\n+\t\t\tif (res < 0) {\n+\t\t\t\tSYS_LOG_ERR(\"Failed to enqueue frame \"\n+\t\t\t\t\t\"into RX queue: %d\", res);\n+\t\t\t\tnet_pkt_unref(pkt);\n+\t\t\t}\n+\t\t}\n+\t}\n+}\n+\n+static void eth_isr(void *arg)\n+{\n+\tstruct device *dev;\n+\tstruct eth_stm32_hal_dev_data *dev_data;\n+\tETH_HandleTypeDef *heth;\n+\n+\t__ASSERT_NO_MSG(arg != NULL);\n+\n+\tdev = (struct device *)arg;\n+\tdev_data = DEV_DATA(dev);\n+\n+\t__ASSERT_NO_MSG(dev_data != NULL);\n+\n+\theth = &dev_data->heth;\n+\n+\t__ASSERT_NO_MSG(heth != NULL);\n+\n+\tHAL_ETH_IRQHandler(heth);\n+}\n+\n+\n+void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth_handle)\n+{\n+\t__ASSERT_NO_MSG(heth_handle != NULL);\n+\n+\tstruct eth_stm32_hal_dev_data *dev_data =\n+\t\tCONTAINER_OF(heth_handle, struct eth_stm32_hal_dev_data, heth);\n+\n+\t__ASSERT_NO_MSG(dev_data != NULL);\n+\n+\tk_sem_give(&dev_data->rx_int_sem);\n+}\n+\n+static inline void __eth_stm32_hal_get_clock(struct device *dev)\n+{\n+\tstruct eth_stm32_hal_dev_data *dev_data = DEV_DATA(dev);\n+\tstruct device *clk = device_get_binding(STM32_CLOCK_CONTROL_NAME);\n+\n+\t__ASSERT_NO_MSG(clk);\n+\n+\tdev_data->clock = clk;\n+}\n+\n+static int eth_initialize(struct device *dev)\n+{\n+\tstruct eth_stm32_hal_dev_data *dev_data;\n+\tstruct eth_stm32_hal_dev_cfg *cfg;\n+\n+\t__ASSERT_NO_MSG(dev != NULL);\n+\n+\tdev_data = DEV_DATA(dev);\n+\tcfg = DEV_CFG(dev);\n+\n+\t__ASSERT_NO_MSG(dev_data != NULL);\n+\t__ASSERT_NO_MSG(cfg != NULL);\n+\n+\t__eth_stm32_hal_get_clock(dev);\n+\n+\t/* enable clock */\n+\tclock_control_on(dev_data->clock,\n+\t\t(clock_control_subsys_t *)&cfg->pclken);\n+\tclock_control_on(dev_data->clock,\n+\t\t(clock_control_subsys_t *)&cfg->pclken_tx);\n+\tclock_control_on(dev_data->clock,\n+\t\t(clock_control_subsys_t *)&cfg->pclken_rx);\n+\tclock_control_on(dev_data->clock,\n+\t\t(clock_control_subsys_t *)&cfg->pclken_ptp);\n+\n+\t__ASSERT_NO_MSG(cfg->config_func != NULL);\n+\n+\tcfg->config_func();\n+\n+\treturn 0;\n+}\n+\n+#if defined(CONFIG_ETH_STM32_HAL_RANDOM_MAC)\n+static void generate_mac(u8_t *mac_addr)\n+{\n+\tu32_t entropy;\n+\n+\tentropy = sys_rand32_get();\n+\n+\tmac_addr[3] = entropy >> 8;\n+\tmac_addr[4] = entropy >> 16;\n+\t/* Locally administered, unicast */\n+\tmac_addr[5] = ((entropy >> 0) & 0xfc) | 0x02;\n+}\n+#endif\n+\n+static void eth0_iface_init(struct net_if *iface)\n+{\n+\tstruct device *dev;\n+\tstruct eth_stm32_hal_dev_data *dev_data;\n+\tETH_HandleTypeDef *heth;\n+\n+\t__ASSERT_NO_MSG(iface != NULL);\n+\n+\tdev = net_if_get_device(iface);\n+\t__ASSERT_NO_MSG(dev != NULL);\n+\n+\tdev_data = DEV_DATA(dev);\n+\t__ASSERT_NO_MSG(dev_data != NULL);\n+\n+\theth = &dev_data->heth;\n+\n+\tdev_data->iface = iface;\n+\n+\t/* Initialize semaphores */\n+\tk_mutex_init(&dev_data->tx_mutex);\n+\tk_sem_init(&dev_data->rx_int_sem, 0, UINT_MAX);\n+\n+\t/* Start interruption-poll thread */\n+\tk_thread_create(&dev_data->rx_thread, dev_data->rx_thread_stack,\n+\t\t\tK_THREAD_STACK_SIZEOF(dev_data->rx_thread_stack),\n+\t\t\trx_thread, (void *) dev, NULL, NULL,\n+\t\t\tK_PRIO_COOP(CONFIG_ETH_STM32_HAL_RX_THREAD_PRIO),\n+\t\t\t0, K_NO_WAIT);\n+\n+#if defined(CONFIG_ETH_STM32_HAL_RANDOM_MAC)\n+\tgenerate_mac(dev_data->mac_addr);\n+#endif\n+\n+\theth->Instance = ETH;\n+\theth->Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE;\n+\theth->Init.PhyAddress = 0;\n+\theth->Init.MACAddr = dev_data->mac_addr;\n+\theth->Init.RxMode = ETH_RXINTERRUPT_MODE;\n+\theth->Init.ChecksumMode = ETH_CHECKSUM_BY_SOFTWARE;\n+\theth->Init.MediaInterface = ETH_MEDIA_INTERFACE_RMII;\n+\n+\tif (HAL_ETH_Init(heth) != HAL_OK) {\n+\t\tSYS_LOG_ERR(\"HAL_ETH_Init failed\\n\");\n+\t}\n+\n+\tHAL_ETH_DMATxDescListInit(heth, dma_tx_desc_tab,\n+\t\t&dma_tx_buffer[0][0], ETH_TXBUFNB);\n+\tHAL_ETH_DMARxDescListInit(heth, dma_rx_desc_tab,\n+\t\t&dma_rx_buffer[0][0], ETH_RXBUFNB);\n+\n+\tHAL_ETH_Start(heth);\n+\n+\t/* Register Ethernet MAC Address with the upper layer */\n+\tnet_if_set_link_addr(iface, dev_data->mac_addr,\n+\t\tsizeof(dev_data->mac_addr),","path":"drivers/ethernet/eth_stm32_hal.c","position":347,"original_position":347,"commit_id":"60c265448aee0e22832077b10f54d4aeee5b80d0","original_commit_id":"43f4cc7696ed10232cc1a1d00eb81d1afaf21b83","user":{"login":"lowlander","id":1266398,"avatar_url":"https://avatars0.githubusercontent.com/u/1266398?v=3","gravatar_id":"","url":"https://api.github.com/users/lowlander","html_url":"https://github.com/lowlander","followers_url":"https://api.github.com/users/lowlander/followers","following_url":"https://api.github.com/users/lowlander/following{/other_user}","gists_url":"https://api.github.com/users/lowlander/gists{/gist_id}","starred_url":"https://api.github.com/users/lowlander/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lowlander/subscriptions","organizations_url":"https://api.github.com/users/lowlander/orgs","repos_url":"https://api.github.com/users/lowlander/repos","events_url":"https://api.github.com/users/lowlander/events{/privacy}","received_events_url":"https://api.github.com/users/lowlander/received_events","type":"User","site_admin":false},"body":"It took several tries to make shipable happy, If you know how I should indent it without getting a shipable error I would be thankful.  \r\n","created_at":"2017-06-27T20:10:34Z","updated_at":"2017-06-27T20:10:34Z","html_url":"https://github.com/zephyrproject-rtos/zephyr/pull/538#discussion_r124382178","pull_request_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/538","_links":{"self":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/comments/124382178"},"html":{"href":"https://github.com/zephyrproject-rtos/zephyr/pull/538#discussion_r124382178"},"pull_request":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/538"}}},"pull_request":{"url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/538","id":126185697,"html_url":"https://github.com/zephyrproject-rtos/zephyr/pull/538","diff_url":"https://github.com/zephyrproject-rtos/zephyr/pull/538.diff","patch_url":"https://github.com/zephyrproject-rtos/zephyr/pull/538.patch","issue_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues/538","number":538,"state":"open","locked":false,"title":"drivers: eth_stm32_hal: Initial STM32F4 HAL based Ethernet driver","user":{"login":"lowlander","id":1266398,"avatar_url":"https://avatars0.githubusercontent.com/u/1266398?v=3","gravatar_id":"","url":"https://api.github.com/users/lowlander","html_url":"https://github.com/lowlander","followers_url":"https://api.github.com/users/lowlander/followers","following_url":"https://api.github.com/users/lowlander/following{/other_user}","gists_url":"https://api.github.com/users/lowlander/gists{/gist_id}","starred_url":"https://api.github.com/users/lowlander/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lowlander/subscriptions","organizations_url":"https://api.github.com/users/lowlander/orgs","repos_url":"https://api.github.com/users/lowlander/repos","events_url":"https://api.github.com/users/lowlander/events{/privacy}","received_events_url":"https://api.github.com/users/lowlander/received_events","type":"User","site_admin":false},"body":"Signed-off-by: Erwin Rol <erwin@erwinrol.com>","created_at":"2017-06-18T11:34:30Z","updated_at":"2017-06-27T20:10:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"558294c254ec8bd22dffac0714c1998aa866fb1b","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/538/commits","review_comments_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/538/comments","review_comment_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/comments{/number}","comments_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues/538/comments","statuses_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/statuses/60c265448aee0e22832077b10f54d4aeee5b80d0","head":{"label":"lowlander:stm32_eth","ref":"stm32_eth","sha":"60c265448aee0e22832077b10f54d4aeee5b80d0","user":{"login":"lowlander","id":1266398,"avatar_url":"https://avatars0.githubusercontent.com/u/1266398?v=3","gravatar_id":"","url":"https://api.github.com/users/lowlander","html_url":"https://github.com/lowlander","followers_url":"https://api.github.com/users/lowlander/followers","following_url":"https://api.github.com/users/lowlander/following{/other_user}","gists_url":"https://api.github.com/users/lowlander/gists{/gist_id}","starred_url":"https://api.github.com/users/lowlander/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lowlander/subscriptions","organizations_url":"https://api.github.com/users/lowlander/orgs","repos_url":"https://api.github.com/users/lowlander/repos","events_url":"https://api.github.com/users/lowlander/events{/privacy}","received_events_url":"https://api.github.com/users/lowlander/received_events","type":"User","site_admin":false},"repo":{"id":91885350,"name":"zephyr","full_name":"lowlander/zephyr","owner":{"login":"lowlander","id":1266398,"avatar_url":"https://avatars0.githubusercontent.com/u/1266398?v=3","gravatar_id":"","url":"https://api.github.com/users/lowlander","html_url":"https://github.com/lowlander","followers_url":"https://api.github.com/users/lowlander/followers","following_url":"https://api.github.com/users/lowlander/following{/other_user}","gists_url":"https://api.github.com/users/lowlander/gists{/gist_id}","starred_url":"https://api.github.com/users/lowlander/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lowlander/subscriptions","organizations_url":"https://api.github.com/users/lowlander/orgs","repos_url":"https://api.github.com/users/lowlander/repos","events_url":"https://api.github.com/users/lowlander/events{/privacy}","received_events_url":"https://api.github.com/users/lowlander/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/lowlander/zephyr","description":"Primary GIT Repository for the Zephyr Project","fork":true,"url":"https://api.github.com/repos/lowlander/zephyr","forks_url":"https://api.github.com/repos/lowlander/zephyr/forks","keys_url":"https://api.github.com/repos/lowlander/zephyr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lowlander/zephyr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lowlander/zephyr/teams","hooks_url":"https://api.github.com/repos/lowlander/zephyr/hooks","issue_events_url":"https://api.github.com/repos/lowlander/zephyr/issues/events{/number}","events_url":"https://api.github.com/repos/lowlander/zephyr/events","assignees_url":"https://api.github.com/repos/lowlander/zephyr/assignees{/user}","branches_url":"https://api.github.com/repos/lowlander/zephyr/branches{/branch}","tags_url":"https://api.github.com/repos/lowlander/zephyr/tags","blobs_url":"https://api.github.com/repos/lowlander/zephyr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lowlander/zephyr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lowlander/zephyr/git/refs{/sha}","trees_url":"https://api.github.com/repos/lowlander/zephyr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lowlander/zephyr/statuses/{sha}","languages_url":"https://api.github.com/repos/lowlander/zephyr/languages","stargazers_url":"https://api.github.com/repos/lowlander/zephyr/stargazers","contributors_url":"https://api.github.com/repos/lowlander/zephyr/contributors","subscribers_url":"https://api.github.com/repos/lowlander/zephyr/subscribers","subscription_url":"https://api.github.com/repos/lowlander/zephyr/subscription","commits_url":"https://api.github.com/repos/lowlander/zephyr/commits{/sha}","git_commits_url":"https://api.github.com/repos/lowlander/zephyr/git/commits{/sha}","comments_url":"https://api.github.com/repos/lowlander/zephyr/comments{/number}","issue_comment_url":"https://api.github.com/repos/lowlander/zephyr/issues/comments{/number}","contents_url":"https://api.github.com/repos/lowlander/zephyr/contents/{+path}","compare_url":"https://api.github.com/repos/lowlander/zephyr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lowlander/zephyr/merges","archive_url":"https://api.github.com/repos/lowlander/zephyr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lowlander/zephyr/downloads","issues_url":"https://api.github.com/repos/lowlander/zephyr/issues{/number}","pulls_url":"https://api.github.com/repos/lowlander/zephyr/pulls{/number}","milestones_url":"https://api.github.com/repos/lowlander/zephyr/milestones{/number}","notifications_url":"https://api.github.com/repos/lowlander/zephyr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lowlander/zephyr/labels{/name}","releases_url":"https://api.github.com/repos/lowlander/zephyr/releases{/id}","deployments_url":"https://api.github.com/repos/lowlander/zephyr/deployments","created_at":"2017-05-20T11:39:54Z","updated_at":"2017-05-20T11:40:30Z","pushed_at":"2017-06-23T17:16:06Z","git_url":"git://github.com/lowlander/zephyr.git","ssh_url":"git@github.com:lowlander/zephyr.git","clone_url":"https://github.com/lowlander/zephyr.git","svn_url":"https://github.com/lowlander/zephyr","homepage":"http://zephyrproject.org/doc","size":76335,"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,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"zephyrproject-rtos:master","ref":"master","sha":"9b1653061ad64bee21de25036c98f1ffb8e0dc65","user":{"login":"zephyrproject-rtos","id":19595895,"avatar_url":"https://avatars1.githubusercontent.com/u/19595895?v=3","gravatar_id":"","url":"https://api.github.com/users/zephyrproject-rtos","html_url":"https://github.com/zephyrproject-rtos","followers_url":"https://api.github.com/users/zephyrproject-rtos/followers","following_url":"https://api.github.com/users/zephyrproject-rtos/following{/other_user}","gists_url":"https://api.github.com/users/zephyrproject-rtos/gists{/gist_id}","starred_url":"https://api.github.com/users/zephyrproject-rtos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zephyrproject-rtos/subscriptions","organizations_url":"https://api.github.com/users/zephyrproject-rtos/orgs","repos_url":"https://api.github.com/users/zephyrproject-rtos/repos","events_url":"https://api.github.com/users/zephyrproject-rtos/events{/privacy}","received_events_url":"https://api.github.com/users/zephyrproject-rtos/received_events","type":"Organization","site_admin":false},"repo":{"id":59771425,"name":"zephyr","full_name":"zephyrproject-rtos/zephyr","owner":{"login":"zephyrproject-rtos","id":19595895,"avatar_url":"https://avatars1.githubusercontent.com/u/19595895?v=3","gravatar_id":"","url":"https://api.github.com/users/zephyrproject-rtos","html_url":"https://github.com/zephyrproject-rtos","followers_url":"https://api.github.com/users/zephyrproject-rtos/followers","following_url":"https://api.github.com/users/zephyrproject-rtos/following{/other_user}","gists_url":"https://api.github.com/users/zephyrproject-rtos/gists{/gist_id}","starred_url":"https://api.github.com/users/zephyrproject-rtos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zephyrproject-rtos/subscriptions","organizations_url":"https://api.github.com/users/zephyrproject-rtos/orgs","repos_url":"https://api.github.com/users/zephyrproject-rtos/repos","events_url":"https://api.github.com/users/zephyrproject-rtos/events{/privacy}","received_events_url":"https://api.github.com/users/zephyrproject-rtos/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/zephyrproject-rtos/zephyr","description":"Primary GIT Repository for the Zephyr Project","fork":false,"url":"https://api.github.com/repos/zephyrproject-rtos/zephyr","forks_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/forks","keys_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/teams","hooks_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/hooks","issue_events_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues/events{/number}","events_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/events","assignees_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/assignees{/user}","branches_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/branches{/branch}","tags_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/tags","blobs_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/git/refs{/sha}","trees_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/statuses/{sha}","languages_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/languages","stargazers_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/stargazers","contributors_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/contributors","subscribers_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/subscribers","subscription_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/subscription","commits_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/commits{/sha}","git_commits_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/git/commits{/sha}","comments_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/comments{/number}","issue_comment_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues/comments{/number}","contents_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/contents/{+path}","compare_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/merges","archive_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/downloads","issues_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues{/number}","pulls_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls{/number}","milestones_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/milestones{/number}","notifications_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/labels{/name}","releases_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/releases{/id}","deployments_url":"https://api.github.com/repos/zephyrproject-rtos/zephyr/deployments","created_at":"2016-05-26T17:54:19Z","updated_at":"2017-06-26T03:43:23Z","pushed_at":"2017-06-27T20:07:57Z","git_url":"git://github.com/zephyrproject-rtos/zephyr.git","ssh_url":"git@github.com:zephyrproject-rtos/zephyr.git","clone_url":"https://github.com/zephyrproject-rtos/zephyr.git","svn_url":"https://github.com/zephyrproject-rtos/zephyr","homepage":"http://zephyrproject.org/doc","size":76712,"stargazers_count":205,"watchers_count":205,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":193,"mirror_url":null,"open_issues_count":54,"forks":193,"open_issues":54,"watchers":205,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/538"},"html":{"href":"https://github.com/zephyrproject-rtos/zephyr/pull/538"},"issue":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues/538"},"comments":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/issues/538/comments"},"review_comments":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/538/comments"},"review_comment":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/pulls/538/commits"},"statuses":{"href":"https://api.github.com/repos/zephyrproject-rtos/zephyr/statuses/60c265448aee0e22832077b10f54d4aeee5b80d0"}}}}
{"actor":{"display_login":"lowlander"}}