{"action":"created","comment":{"url":"https://api.github.com/repos/cleanflight/cleanflight/pulls/comments/55659696","id":55659696,"diff_hunk":"@@ -0,0 +1,293 @@\n+/*\n+ * This file is part of Cleanflight.\n+ *\n+ * Cleanflight is free software: you can redistribute it and/or modify\n+ * it under the terms of the GNU General Public License as published by\n+ * the Free Software Foundation, either version 3 of the License, or\n+ * (at your option) any later version.\n+ *\n+ * Cleanflight is distributed in the hope that it will be useful,\n+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+ * GNU General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU General Public License\n+ * along with Cleanflight.  If not, see <http://www.gnu.org/licenses/>.\n+ */\n+\n+// This file borrows heavily from project Deviation,\n+// see http://deviationtx.com\n+\n+#include <stdbool.h>\n+#include <stdint.h>\n+#include <string.h>\n+\n+#include \"platform.h\"\n+#include \"build_config.h\"\n+\n+#ifdef USE_RX_SYMA\n+\n+#include \"drivers/rx_nrf24l01.h\"\n+#include \"drivers/system.h\"\n+\n+#include \"rx/nrf24.h\"\n+#include \"rx/nrf24_syma.h\"\n+\n+/*\n+ * Deviation transmitter sends 345 bind packets, then starts sending data packets.\n+ * Packets are send at rate of at least one every 4 milliseconds, ie at least 250Hz.\n+ * This means binding phase lasts 1.4 seconds, the transmitter then enters the data phase.\n+ * Other transmitters may vary but should have similar characteristics.\n+ */\n+\n+\n+/*\n+ * SymaX Protocol\n+ * No auto acknowledgment\n+ * Data rate is 250Kbps\n+ * Payload size is 10, static\n+ * Bind Phase\n+ * uses address {0xab,0xac,0xad,0xae,0xaf}\n+ * hops between 4 channels {0x4b, 0x30, 0x40, 0x20}\n+ * Data Phase\n+ * uses address received in bind packets\n+ * hops between 4 channels generated from address received in bind packets\n+ *\n+ * SymaX5 Protocol\n+ * No auto acknowledgment\n+ * Payload size is 16, static\n+ * Data rate is 1Mbps\n+ * Bind Phase\n+ * uses address {0x6d,0x6a,0x73,0x73,0x73}\n+ * hops between 16 channels {0x27, 0x1b, 0x39, 0x28, 0x24, 0x22, 0x2e, 0x36, 0x19, 0x21, 0x29, 0x14, 0x1e, 0x12, 0x2d, 0x18};\n+ * Data phase\n+ * uses same address as bind phase\n+ * hops between 15 channels {0x1d, 0x2f, 0x26, 0x3d, 0x15, 0x2b, 0x25, 0x24, 0x27, 0x2c, 0x1c, 0x3e, 0x39, 0x2d, 0x22};\n+ * (common channels between both phases are: 0x27, 0x39, 0x24, 0x22, 0x2d)\n+ */\n+\n+STATIC_UNIT_TESTED nrf24_protocol_t symaProtocol;\n+\n+typedef enum {\n+    STATE_BIND = 0,\n+    STATE_DATA\n+} protocol_state_t;\n+\n+STATIC_UNIT_TESTED protocol_state_t protocolState;\n+\n+// X11, X12, X5C-1 have 10-byte payload, X5C has 16-byte payload\n+STATIC_UNIT_TESTED uint8_t payloadSize;\n+\n+#define RX_TX_ADDR_LEN     5\n+// set rxTxAddr to SymaX bind values\n+STATIC_UNIT_TESTED uint8_t rxTxAddr[RX_TX_ADDR_LEN] = {0xab, 0xac, 0xad, 0xae, 0xaf};\n+STATIC_UNIT_TESTED const uint8_t rxTxAddrX5C[RX_TX_ADDR_LEN] = {0x6d, 0x6a, 0x73, 0x73, 0x73};   // X5C uses same address for bind and data\n+\n+// radio channels for frequency hopping\n+static int packetCount = 0;\n+STATIC_UNIT_TESTED uint8_t rfChannelIndex = 0;\n+STATIC_UNIT_TESTED uint8_t rfChannelCount = SYMA_X_RF_CHANNEL_COUNT;\n+// set rfChannels to SymaX bind channels, reserve enough space for SymaX5C channels\n+STATIC_UNIT_TESTED uint8_t rfChannels[SYMA_X5C_RF_BIND_CHANNEL_COUNT]  = {0x4b, 0x30, 0x40, 0x20};\n+STATIC_UNIT_TESTED const uint8_t rfChannelsX5C[SYMA_X5C_RF_CHANNEL_COUNT] = {0x1d, 0x2f, 0x26, 0x3d, 0x15, 0x2b, 0x25, 0x24, 0x27, 0x2c, 0x1c, 0x3e, 0x39, 0x2d, 0x22};\n+\n+static uint32_t timeOfLastHop;\n+static uint32_t hopTimeout = 10000; // 10ms\n+\n+void symaNrf24Init(nrf24_protocol_t protocol)\n+{\n+    symaProtocol = protocol;\n+    NRF24L01_Initialize(BV(NRF24L01_00_CONFIG_EN_CRC) | BV( NRF24L01_00_CONFIG_CRCO)); // sets PWR_UP, EN_CRC, CRCO - 2 byte CRC\n+\n+    NRF24L01_WriteReg(NRF24L01_01_EN_AA, 0); // No auto acknowledgment\n+    NRF24L01_WriteReg(NRF24L01_02_EN_RXADDR, BV(NRF24L01_02_EN_RXADDR_ERX_P0));\n+    NRF24L01_WriteReg(NRF24L01_03_SETUP_AW, NRF24L01_03_SETUP_AW_5BYTES);   // 5-byte RX/TX address\n+    if (symaProtocol == NRF24RX_SYMA_X) {\n+        payloadSize = SYMA_X_PROTOCOL_PAYLOAD_SIZE;\n+        NRF24L01_WriteReg(NRF24L01_06_RF_SETUP, NRF24L01_06_RF_SETUP_RF_DR_250Kbps | NRF24L01_06_RF_SETUP_RF_PWR_n12dbm);\n+        protocolState = STATE_BIND;\n+        // RX_ADDR for pipes P1-P5 are left at default values\n+        NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rxTxAddr, RX_TX_ADDR_LEN);\n+    } else {\n+        payloadSize = SYMA_X5C_PROTOCOL_PAYLOAD_SIZE;\n+        NRF24L01_WriteReg(NRF24L01_06_RF_SETUP, NRF24L01_06_RF_SETUP_RF_DR_1Mbps | NRF24L01_06_RF_SETUP_RF_PWR_n12dbm);\n+        // RX_ADDR for pipes P1-P5 are left at default values\n+        NRF24L01_WriteRegisterMulti(NRF24L01_0A_RX_ADDR_P0, rxTxAddrX5C, RX_TX_ADDR_LEN);\n+        // just go straight into data mode, since the SYMA_X5C protocol does not actually require binding\n+        protocolState = STATE_DATA;\n+        rfChannelCount = SYMA_X5C_RF_CHANNEL_COUNT;\n+        memcpy(rfChannels, rfChannelsX5C, SYMA_X5C_RF_CHANNEL_COUNT);\n+    }\n+    NRF24L01_SetChannel(rfChannels[0]);\n+\n+    NRF24L01_WriteReg(NRF24L01_08_OBSERVE_TX, 0x00);\n+    NRF24L01_WriteReg(NRF24L01_1C_DYNPD, 0x00); // Disable dynamic payload length on all pipes\n+\n+    NRF24L01_WriteReg(NRF24L01_11_RX_PW_P0, payloadSize);\n+\n+    NRF24L01_SetRxMode(); // enter receive mode to start listening for packets\n+}\n+\n+STATIC_UNIT_TESTED uint16_t convertToPwmUnsigned(uint8_t val)\n+{\n+    uint32_t ret = val;\n+    ret = ret * (PWM_RANGE_MAX - PWM_RANGE_MIN) / UINT8_MAX + PWM_RANGE_MIN;\n+    return (uint16_t)ret;\n+}\n+\n+STATIC_UNIT_TESTED uint16_t convertToPwmSigned(uint8_t val)\n+{\n+    int32_t ret = val & 0x7f;","path":"src/main/rx/nrf24_syma.c","position":140,"original_position":140,"commit_id":"920b21750f7fcd670996579f084e9dce34cbc541","original_commit_id":"920b21750f7fcd670996579f084e9dce34cbc541","user":{"login":"ledvinap","id":2318015,"avatar_url":"https://avatars.githubusercontent.com/u/2318015?v=3","gravatar_id":"","url":"https://api.github.com/users/ledvinap","html_url":"https://github.com/ledvinap","followers_url":"https://api.github.com/users/ledvinap/followers","following_url":"https://api.github.com/users/ledvinap/following{/other_user}","gists_url":"https://api.github.com/users/ledvinap/gists{/gist_id}","starred_url":"https://api.github.com/users/ledvinap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ledvinap/subscriptions","organizations_url":"https://api.github.com/users/ledvinap/orgs","repos_url":"https://api.github.com/users/ledvinap/repos","events_url":"https://api.github.com/users/ledvinap/events{/privacy}","received_events_url":"https://api.github.com/users/ledvinap/received_events","type":"User","site_admin":false},"body":"int tmp = (val & 0x80) ? -(val & 0x7f) : val & 0x7f;\r\nreturn scaleRange(tmp, -127, 127, PWM_RANGE_MIN, PWM_RANGE_MAX);","created_at":"2016-03-10T10:25:17Z","updated_at":"2016-03-10T10:25:17Z","html_url":"https://github.com/cleanflight/cleanflight/pull/1937#discussion_r55659696","pull_request_url":"https://api.github.com/repos/cleanflight/cleanflight/pulls/1937","_links":{"self":{"href":"https://api.github.com/repos/cleanflight/cleanflight/pulls/comments/55659696"},"html":{"href":"https://github.com/cleanflight/cleanflight/pull/1937#discussion_r55659696"},"pull_request":{"href":"https://api.github.com/repos/cleanflight/cleanflight/pulls/1937"}}},"pull_request":{"url":"https://api.github.com/repos/cleanflight/cleanflight/pulls/1937","id":62119712,"html_url":"https://github.com/cleanflight/cleanflight/pull/1937","diff_url":"https://github.com/cleanflight/cleanflight/pull/1937.diff","patch_url":"https://github.com/cleanflight/cleanflight/pull/1937.patch","issue_url":"https://api.github.com/repos/cleanflight/cleanflight/issues/1937","number":1937,"state":"open","locked":false,"title":"Support for Crazepony MINI flight controller and NRF24L01 transceiver","user":{"login":"martinbudden","id":194586,"avatar_url":"https://avatars.githubusercontent.com/u/194586?v=3","gravatar_id":"","url":"https://api.github.com/users/martinbudden","html_url":"https://github.com/martinbudden","followers_url":"https://api.github.com/users/martinbudden/followers","following_url":"https://api.github.com/users/martinbudden/following{/other_user}","gists_url":"https://api.github.com/users/martinbudden/gists{/gist_id}","starred_url":"https://api.github.com/users/martinbudden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/martinbudden/subscriptions","organizations_url":"https://api.github.com/users/martinbudden/orgs","repos_url":"https://api.github.com/users/martinbudden/repos","events_url":"https://api.github.com/users/martinbudden/events{/privacy}","received_events_url":"https://api.github.com/users/martinbudden/received_events","type":"User","site_admin":false},"body":"This PR addresses issue https://github.com/cleanflight/cleanflight/issues/1936 and issue https://github.com/cleanflight/cleanflight/issues/1935 .\r\n\r\nThis submission is a joint effort by @goebish and @martinbudden\r\n\r\n@goebish provided\r\n1. Crazepony MINI port of Cleanflight\r\n2. NRF24L01 device driver\r\n3. V202 transmitter protocol for NRF24L01\r\n4. SPI implementation for CJMCU flight controller\r\n\r\n@martinbudden provided:\r\n1. Merge of code into latest version of Cleanflight\r\n2. Some additional NRF24L01 device driver utility functions\r\n3. SymaX, SymaX5C and Cheerson CX10 transmitter protocols for NFR24L01\r\n4. Framework to allow setting of NRF24L01 transmitter protocol\r\n5. Testcode\r\n\r\nNRF24L01 receiver code and transmitter protocols are all under build `#define`s that can be set in the `target.h` file, so there is no ROM cost to other flight controllers.\r\n\r\nThe V202 transmitter protocol allows Cleanflight to be used withwith WLtoys V2x2 transmitters. These are cheaply available for under £20.\r\n\r\nThe SymaX and SymaX5C transmitter protocols allow Cleanflight to be used with Syma transmitters. These are cheaply available for under £20.\r\n\r\nThe CX10 transmitter protocol allows Cleanflight to be used with Cheerson CX10 transmitters.\r\n\r\nWith any of these protocols a Walker Devo transmitter with Deviationtx software and NRF24L01 modification could be used.\r\n\r\nNote SPRACINGF3EVO target has been removed (temporarily) from `Makefile` since the SPRACINGF3EVO build is currently broken (see issue https://github.com/cleanflight/cleanflight/issues/1919).","created_at":"2016-03-08T19:09:24Z","updated_at":"2016-03-10T10:25:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5409e15b79ed11ea37980d4086cee5ef187914d0","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/cleanflight/cleanflight/pulls/1937/commits","review_comments_url":"https://api.github.com/repos/cleanflight/cleanflight/pulls/1937/comments","review_comment_url":"https://api.github.com/repos/cleanflight/cleanflight/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cleanflight/cleanflight/issues/1937/comments","statuses_url":"https://api.github.com/repos/cleanflight/cleanflight/statuses/920b21750f7fcd670996579f084e9dce34cbc541","head":{"label":"martinbudden:nrf24","ref":"nrf24","sha":"920b21750f7fcd670996579f084e9dce34cbc541","user":{"login":"martinbudden","id":194586,"avatar_url":"https://avatars.githubusercontent.com/u/194586?v=3","gravatar_id":"","url":"https://api.github.com/users/martinbudden","html_url":"https://github.com/martinbudden","followers_url":"https://api.github.com/users/martinbudden/followers","following_url":"https://api.github.com/users/martinbudden/following{/other_user}","gists_url":"https://api.github.com/users/martinbudden/gists{/gist_id}","starred_url":"https://api.github.com/users/martinbudden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/martinbudden/subscriptions","organizations_url":"https://api.github.com/users/martinbudden/orgs","repos_url":"https://api.github.com/users/martinbudden/repos","events_url":"https://api.github.com/users/martinbudden/events{/privacy}","received_events_url":"https://api.github.com/users/martinbudden/received_events","type":"User","site_admin":false},"repo":{"id":46673290,"name":"cleanflight","full_name":"martinbudden/cleanflight","owner":{"login":"martinbudden","id":194586,"avatar_url":"https://avatars.githubusercontent.com/u/194586?v=3","gravatar_id":"","url":"https://api.github.com/users/martinbudden","html_url":"https://github.com/martinbudden","followers_url":"https://api.github.com/users/martinbudden/followers","following_url":"https://api.github.com/users/martinbudden/following{/other_user}","gists_url":"https://api.github.com/users/martinbudden/gists{/gist_id}","starred_url":"https://api.github.com/users/martinbudden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/martinbudden/subscriptions","organizations_url":"https://api.github.com/users/martinbudden/orgs","repos_url":"https://api.github.com/users/martinbudden/repos","events_url":"https://api.github.com/users/martinbudden/events{/privacy}","received_events_url":"https://api.github.com/users/martinbudden/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/martinbudden/cleanflight","description":"Clean-code version of the baseflight flight controller firmware","fork":true,"url":"https://api.github.com/repos/martinbudden/cleanflight","forks_url":"https://api.github.com/repos/martinbudden/cleanflight/forks","keys_url":"https://api.github.com/repos/martinbudden/cleanflight/keys{/key_id}","collaborators_url":"https://api.github.com/repos/martinbudden/cleanflight/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/martinbudden/cleanflight/teams","hooks_url":"https://api.github.com/repos/martinbudden/cleanflight/hooks","issue_events_url":"https://api.github.com/repos/martinbudden/cleanflight/issues/events{/number}","events_url":"https://api.github.com/repos/martinbudden/cleanflight/events","assignees_url":"https://api.github.com/repos/martinbudden/cleanflight/assignees{/user}","branches_url":"https://api.github.com/repos/martinbudden/cleanflight/branches{/branch}","tags_url":"https://api.github.com/repos/martinbudden/cleanflight/tags","blobs_url":"https://api.github.com/repos/martinbudden/cleanflight/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/martinbudden/cleanflight/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/martinbudden/cleanflight/git/refs{/sha}","trees_url":"https://api.github.com/repos/martinbudden/cleanflight/git/trees{/sha}","statuses_url":"https://api.github.com/repos/martinbudden/cleanflight/statuses/{sha}","languages_url":"https://api.github.com/repos/martinbudden/cleanflight/languages","stargazers_url":"https://api.github.com/repos/martinbudden/cleanflight/stargazers","contributors_url":"https://api.github.com/repos/martinbudden/cleanflight/contributors","subscribers_url":"https://api.github.com/repos/martinbudden/cleanflight/subscribers","subscription_url":"https://api.github.com/repos/martinbudden/cleanflight/subscription","commits_url":"https://api.github.com/repos/martinbudden/cleanflight/commits{/sha}","git_commits_url":"https://api.github.com/repos/martinbudden/cleanflight/git/commits{/sha}","comments_url":"https://api.github.com/repos/martinbudden/cleanflight/comments{/number}","issue_comment_url":"https://api.github.com/repos/martinbudden/cleanflight/issues/comments{/number}","contents_url":"https://api.github.com/repos/martinbudden/cleanflight/contents/{+path}","compare_url":"https://api.github.com/repos/martinbudden/cleanflight/compare/{base}...{head}","merges_url":"https://api.github.com/repos/martinbudden/cleanflight/merges","archive_url":"https://api.github.com/repos/martinbudden/cleanflight/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/martinbudden/cleanflight/downloads","issues_url":"https://api.github.com/repos/martinbudden/cleanflight/issues{/number}","pulls_url":"https://api.github.com/repos/martinbudden/cleanflight/pulls{/number}","milestones_url":"https://api.github.com/repos/martinbudden/cleanflight/milestones{/number}","notifications_url":"https://api.github.com/repos/martinbudden/cleanflight/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/martinbudden/cleanflight/labels{/name}","releases_url":"https://api.github.com/repos/martinbudden/cleanflight/releases{/id}","deployments_url":"https://api.github.com/repos/martinbudden/cleanflight/deployments","created_at":"2015-11-22T18:18:03Z","updated_at":"2016-01-12T14:28:11Z","pushed_at":"2016-03-09T21:21:07Z","git_url":"git://github.com/martinbudden/cleanflight.git","ssh_url":"git@github.com:martinbudden/cleanflight.git","clone_url":"https://github.com/martinbudden/cleanflight.git","svn_url":"https://github.com/martinbudden/cleanflight","homepage":"http://cleanflight.com","size":35198,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"cleanflight:master","ref":"master","sha":"d53f5dfdc4e1af7b36908173a772982e17889ef8","user":{"login":"cleanflight","id":8776523,"avatar_url":"https://avatars.githubusercontent.com/u/8776523?v=3","gravatar_id":"","url":"https://api.github.com/users/cleanflight","html_url":"https://github.com/cleanflight","followers_url":"https://api.github.com/users/cleanflight/followers","following_url":"https://api.github.com/users/cleanflight/following{/other_user}","gists_url":"https://api.github.com/users/cleanflight/gists{/gist_id}","starred_url":"https://api.github.com/users/cleanflight/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cleanflight/subscriptions","organizations_url":"https://api.github.com/users/cleanflight/orgs","repos_url":"https://api.github.com/users/cleanflight/repos","events_url":"https://api.github.com/users/cleanflight/events{/privacy}","received_events_url":"https://api.github.com/users/cleanflight/received_events","type":"Organization","site_admin":false},"repo":{"id":9066347,"name":"cleanflight","full_name":"cleanflight/cleanflight","owner":{"login":"cleanflight","id":8776523,"avatar_url":"https://avatars.githubusercontent.com/u/8776523?v=3","gravatar_id":"","url":"https://api.github.com/users/cleanflight","html_url":"https://github.com/cleanflight","followers_url":"https://api.github.com/users/cleanflight/followers","following_url":"https://api.github.com/users/cleanflight/following{/other_user}","gists_url":"https://api.github.com/users/cleanflight/gists{/gist_id}","starred_url":"https://api.github.com/users/cleanflight/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cleanflight/subscriptions","organizations_url":"https://api.github.com/users/cleanflight/orgs","repos_url":"https://api.github.com/users/cleanflight/repos","events_url":"https://api.github.com/users/cleanflight/events{/privacy}","received_events_url":"https://api.github.com/users/cleanflight/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cleanflight/cleanflight","description":"Clean-code version of the baseflight flight controller firmware","fork":false,"url":"https://api.github.com/repos/cleanflight/cleanflight","forks_url":"https://api.github.com/repos/cleanflight/cleanflight/forks","keys_url":"https://api.github.com/repos/cleanflight/cleanflight/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cleanflight/cleanflight/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cleanflight/cleanflight/teams","hooks_url":"https://api.github.com/repos/cleanflight/cleanflight/hooks","issue_events_url":"https://api.github.com/repos/cleanflight/cleanflight/issues/events{/number}","events_url":"https://api.github.com/repos/cleanflight/cleanflight/events","assignees_url":"https://api.github.com/repos/cleanflight/cleanflight/assignees{/user}","branches_url":"https://api.github.com/repos/cleanflight/cleanflight/branches{/branch}","tags_url":"https://api.github.com/repos/cleanflight/cleanflight/tags","blobs_url":"https://api.github.com/repos/cleanflight/cleanflight/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cleanflight/cleanflight/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cleanflight/cleanflight/git/refs{/sha}","trees_url":"https://api.github.com/repos/cleanflight/cleanflight/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cleanflight/cleanflight/statuses/{sha}","languages_url":"https://api.github.com/repos/cleanflight/cleanflight/languages","stargazers_url":"https://api.github.com/repos/cleanflight/cleanflight/stargazers","contributors_url":"https://api.github.com/repos/cleanflight/cleanflight/contributors","subscribers_url":"https://api.github.com/repos/cleanflight/cleanflight/subscribers","subscription_url":"https://api.github.com/repos/cleanflight/cleanflight/subscription","commits_url":"https://api.github.com/repos/cleanflight/cleanflight/commits{/sha}","git_commits_url":"https://api.github.com/repos/cleanflight/cleanflight/git/commits{/sha}","comments_url":"https://api.github.com/repos/cleanflight/cleanflight/comments{/number}","issue_comment_url":"https://api.github.com/repos/cleanflight/cleanflight/issues/comments{/number}","contents_url":"https://api.github.com/repos/cleanflight/cleanflight/contents/{+path}","compare_url":"https://api.github.com/repos/cleanflight/cleanflight/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cleanflight/cleanflight/merges","archive_url":"https://api.github.com/repos/cleanflight/cleanflight/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cleanflight/cleanflight/downloads","issues_url":"https://api.github.com/repos/cleanflight/cleanflight/issues{/number}","pulls_url":"https://api.github.com/repos/cleanflight/cleanflight/pulls{/number}","milestones_url":"https://api.github.com/repos/cleanflight/cleanflight/milestones{/number}","notifications_url":"https://api.github.com/repos/cleanflight/cleanflight/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cleanflight/cleanflight/labels{/name}","releases_url":"https://api.github.com/repos/cleanflight/cleanflight/releases{/id}","deployments_url":"https://api.github.com/repos/cleanflight/cleanflight/deployments","created_at":"2013-03-27T23:49:19Z","updated_at":"2016-03-10T06:08:02Z","pushed_at":"2016-03-09T14:37:17Z","git_url":"git://github.com/cleanflight/cleanflight.git","ssh_url":"git@github.com:cleanflight/cleanflight.git","clone_url":"https://github.com/cleanflight/cleanflight.git","svn_url":"https://github.com/cleanflight/cleanflight","homepage":"http://cleanflight.com","size":91722,"stargazers_count":936,"watchers_count":936,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":907,"mirror_url":null,"open_issues_count":464,"forks":907,"open_issues":464,"watchers":936,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cleanflight/cleanflight/pulls/1937"},"html":{"href":"https://github.com/cleanflight/cleanflight/pull/1937"},"issue":{"href":"https://api.github.com/repos/cleanflight/cleanflight/issues/1937"},"comments":{"href":"https://api.github.com/repos/cleanflight/cleanflight/issues/1937/comments"},"review_comments":{"href":"https://api.github.com/repos/cleanflight/cleanflight/pulls/1937/comments"},"review_comment":{"href":"https://api.github.com/repos/cleanflight/cleanflight/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cleanflight/cleanflight/pulls/1937/commits"},"statuses":{"href":"https://api.github.com/repos/cleanflight/cleanflight/statuses/920b21750f7fcd670996579f084e9dce34cbc541"}}}}