{"action":"created","comment":{"url":"https://api.github.com/repos/cleanflight/cleanflight/pulls/comments/38135105","id":38135105,"diff_hunk":"@@ -256,16 +267,146 @@ TEST(FlightFailsafeTest, TestFailsafeCausesLanding)\n     DISABLE_ARMING_FLAG(ARMED);\n \n     // when\n-    failsafeOnRxCycleStarted();\n-    // no call to failsafeOnValidDataReceived();\n-    failsafeUpdateState();\n+    for (int i = 0; i < callsToMakeToSimulateFiftySeconds - 1; i++) {\n+\n+        failsafeOnRxCycleStarted();\n+        failsafeOnValidDataReceived();\n+\n+        failsafeUpdateState();\n+    }\n \n     // then\n     EXPECT_EQ(false, failsafeIsActive());\n-    EXPECT_EQ(FAILSAFE_LANDED, failsafePhase());\n+    EXPECT_EQ(FAILSAFE_IDLE, failsafePhase());\n     EXPECT_EQ(1, CALL_COUNTER(COUNTER_MW_DISARM)); // disarm not called repeatedly.\n-    EXPECT_TRUE(ARMING_FLAG(PREVENT_ARMING));\n+    EXPECT_FALSE(ARMING_FLAG(PREVENT_ARMING));\n+}\n+\n+TEST(FlightFailsafeTest, TestFailsafeDetectsRxLossAndJustDisarms)\n+{\n+    // given\n+    int callsToMakeToSimulateTwentyFiveSeconds = FAILSAFE_UPDATE_HZ * 25;\n+    ENABLE_ARMING_FLAG(ARMED);\n+    resetCallCounters();\n+\n+    // and\n+    failsafeStartMonitoring();\n+    testMinThrottle = 1100;\n+    rcCommand[THROTTLE] = testMinThrottle - 1;  // just below configured min throttle to go for a failsafe just-disarm procedure\n+\n+    //\n+    // currently 20 cycles must occur before the lack of an update triggers RX loss detection.\n+    //\n+    // FIXME see comments about RX_SERIAL/RX_MSP above, the test should likely deal with time rather than counters.\n+    int failsafeCounterThreshold = 20;\n+\n+    // when\n+    for (int i = 0; i < failsafeCounterThreshold; i++) {\n \n+        failsafeOnRxCycleStarted();\n+        // no call to failsafeOnValidDataReceived();\n+\n+        failsafeUpdateState();\n+\n+        // then\n+        EXPECT_EQ(FAILSAFE_IDLE, failsafePhase());\n+        EXPECT_EQ(false, failsafeIsActive());\n+    }\n+\n+    // when\n+    for (int i = 0; i < FAILSAFE_UPDATE_HZ - failsafeCounterThreshold; i++) {\n+\n+        failsafeOnRxCycleStarted();\n+        // no call to failsafeOnValidDataReceived();\n+\n+        failsafeUpdateState();\n+\n+        // then\n+        EXPECT_EQ(FAILSAFE_RX_LOSS_MONITORING, failsafePhase());\n+        EXPECT_EQ(true, failsafeIsActive());\n+        EXPECT_EQ(1, CALL_COUNTER(COUNTER_MW_DISARM));\n+        EXPECT_TRUE(ARMING_FLAG(PREVENT_ARMING));\n+    }\n+\n+    // when\n+    for (int i = 0; i < callsToMakeToSimulateTwentyFiveSeconds - 1; i++) {\n+\n+        failsafeOnRxCycleStarted();\n+        failsafeOnValidDataReceived();\n+\n+        failsafeUpdateState();\n+    }\n+\n+    // then\n+    EXPECT_EQ(false, failsafeIsActive());\n+    EXPECT_EQ(FAILSAFE_IDLE, failsafePhase());\n+    EXPECT_EQ(1, CALL_COUNTER(COUNTER_MW_DISARM)); // disarm not called repeatedly.\n+    EXPECT_FALSE(ARMING_FLAG(PREVENT_ARMING));\n+}\n+\n+TEST(FlightFailsafeTest, TestFailsafeDetectsRxLossAndKillswitchEvent)\n+{\n+    // given\n+    int callsToMakeToSimulateTwoSeconds = FAILSAFE_UPDATE_HZ * 2;\n+    ENABLE_ARMING_FLAG(ARMED);\n+    resetCallCounters();\n+\n+    // and\n+    failsafeStartMonitoring();\n+    testMinThrottle = 1100;\n+    rcCommand[THROTTLE] = testMinThrottle - 1;  // just below configured min throttle to go for a failsafe just-disarm procedure\n+    failsafeConfig.failsafe_kill_switch = 1;    // configure AUX switch as kill switch\n+    ACTIVATE_RC_MODE(BOXFAILSAFE);              // and activate it\n+\n+    //\n+    // currently 20 cycles must occur before the lack of an update triggers RX loss detection.\n+    //\n+    // FIXME see comments about RX_SERIAL/RX_MSP above, the test should likely deal with time rather than counters.\n+    int failsafeCounterThreshold = 20;\n+\n+    // when\n+    for (int i = 0; i < failsafeCounterThreshold; i++) {\n+\n+        failsafeOnRxCycleStarted();\n+        // no call to failsafeOnValidDataReceived();\n+\n+        failsafeUpdateState();\n+\n+        // then\n+        EXPECT_EQ(FAILSAFE_IDLE, failsafePhase());\n+        EXPECT_EQ(false, failsafeIsActive());\n+    }\n+\n+    // when\n+    for (int i = 0; i < FAILSAFE_UPDATE_HZ - failsafeCounterThreshold; i++) {\n+\n+        failsafeOnRxCycleStarted();\n+        // no call to failsafeOnValidDataReceived();\n+\n+        failsafeUpdateState();\n+\n+        // then\n+        EXPECT_EQ(FAILSAFE_RX_LOSS_MONITORING, failsafePhase());\n+        EXPECT_EQ(true, failsafeIsActive());\n+        EXPECT_EQ(1, CALL_COUNTER(COUNTER_MW_DISARM));\n+        EXPECT_TRUE(ARMING_FLAG(PREVENT_ARMING));\n+    }\n+\n+    // when\n+    rcModeActivationMask = 0;                   // de-activate BOXFAILSAFE\n+    for (int i = 0; i < callsToMakeToSimulateTwoSeconds - 1; i++) {\n+\n+        failsafeOnRxCycleStarted();\n+        failsafeOnValidDataReceived();\n+\n+        failsafeUpdateState();\n+    }\n+\n+    // then\n+    EXPECT_EQ(false, failsafeIsActive());\n+    EXPECT_EQ(FAILSAFE_IDLE, failsafePhase());\n+    EXPECT_EQ(1, CALL_COUNTER(COUNTER_MW_DISARM)); // disarm not called repeatedly.\n+    EXPECT_FALSE(ARMING_FLAG(PREVENT_ARMING));\n }","path":"src/test/unit/flight_failsafe_unittest.cc","position":211,"original_position":211,"commit_id":"acc2cb8a1c82dafe6f84a38058870301293d69ab","original_commit_id":"acc2cb8a1c82dafe6f84a38058870301293d69ab","user":{"login":"hydra","id":57075,"avatar_url":"https://avatars.githubusercontent.com/u/57075?v=3","gravatar_id":"","url":"https://api.github.com/users/hydra","html_url":"https://github.com/hydra","followers_url":"https://api.github.com/users/hydra/followers","following_url":"https://api.github.com/users/hydra/following{/other_user}","gists_url":"https://api.github.com/users/hydra/gists{/gist_id}","starred_url":"https://api.github.com/users/hydra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hydra/subscriptions","organizations_url":"https://api.github.com/users/hydra/orgs","repos_url":"https://api.github.com/users/hydra/repos","events_url":"https://api.github.com/users/hydra/events{/privacy}","received_events_url":"https://api.github.com/users/hydra/received_events","type":"User","site_admin":false},"body":"counters everywhere!  yes.  the failsafe needs to move away from counters and release itself from expected call frequency problem it has.","created_at":"2015-08-27T19:16:17Z","updated_at":"2015-08-27T19:16:17Z","html_url":"https://github.com/cleanflight/cleanflight/pull/852#discussion_r38135105","pull_request_url":"https://api.github.com/repos/cleanflight/cleanflight/pulls/852","_links":{"self":{"href":"https://api.github.com/repos/cleanflight/cleanflight/pulls/comments/38135105"},"html":{"href":"https://github.com/cleanflight/cleanflight/pull/852#discussion_r38135105"},"pull_request":{"href":"https://api.github.com/repos/cleanflight/cleanflight/pulls/852"}}},"pull_request":{"url":"https://api.github.com/repos/cleanflight/cleanflight/pulls/852","id":34865740,"html_url":"https://github.com/cleanflight/cleanflight/pull/852","diff_url":"https://github.com/cleanflight/cleanflight/pull/852.diff","patch_url":"https://github.com/cleanflight/cleanflight/pull/852.patch","issue_url":"https://api.github.com/repos/cleanflight/cleanflight/issues/852","number":852,"state":"open","locked":false,"title":"Failsafe - New failsafe functionality (Phase 1)","user":{"login":"ProDrone","id":7206988,"avatar_url":"https://avatars.githubusercontent.com/u/7206988?v=3","gravatar_id":"","url":"https://api.github.com/users/ProDrone","html_url":"https://github.com/ProDrone","followers_url":"https://api.github.com/users/ProDrone/followers","following_url":"https://api.github.com/users/ProDrone/following{/other_user}","gists_url":"https://api.github.com/users/ProDrone/gists{/gist_id}","starred_url":"https://api.github.com/users/ProDrone/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ProDrone/subscriptions","organizations_url":"https://api.github.com/users/ProDrone/orgs","repos_url":"https://api.github.com/users/ProDrone/repos","events_url":"https://api.github.com/users/ProDrone/events{/privacy}","received_events_url":"https://api.github.com/users/ProDrone/received_events","type":"User","site_admin":false},"body":"__This pull request is to replace and add all the features (and some more) of #185__\r\n\r\n__NOTE:__ The timing is currently based on the assumption that several functions are called with 50Hz.\r\nThis means that you need to measure the effective timing of the CLI variables:\r\n`failsafe_delay`, `failsafe_off_delay`, `failsafe_throttle_low_delay` and adjust until the desired timing is achieved. This depends mostly on the type of receiver used.\r\n\r\n\r\n### Changes in functionality\r\n* Added a Failsafe flightmode.\r\n\r\n* Added AUX switch (RC controlbox) to manually activate failsafe mode.\r\n\r\n* Prevent arming when failsafe mode via AUX switch is active (safety issue).\r\n\r\n* Added a CLI variable `failsafe_kill_switch` for instant disarm (__Kill switch event__).\r\nWhen set to 1 (0 is default), the failsafe switch will instantly disarm\r\ninstead of executing the auto-land procedure. Arming is NOT locked after\r\nthis, so the craft could be re-armed if needed.\r\nThis is intended for racing quads where damage and danger must be\r\nminimized in case of a pilot error.\r\n\r\n* Make failsafe disarm if motors armed and throttle below `min_throttle` for `failsafe_throttle_low_delay` time (__Just-disarm event__).\r\n Applied code changes to effectively add PR #717.\r\n\r\n* Updated the failsafe documentation.\r\n\r\n* Re-enable arming at end of failsafe procedure (alternative implementation for #1181).\r\nAt the end of a handled failsafe event, that means: auto-landing, silent disarm or kill switch action, the RX link is monitored for valid data. Monitoring is a part of the failsafe handling, which means the craft is still in failsafe mode while this is done. Arming is re-enabled (allowed) when there is a valid RX link for more then XX seconds, where XX depends on the handled event like this:\r\n\r\n* `XX = 0 seconds after kill switch action.`\r\n* `XX = 3 seconds after silent disarm.`\r\n* `XX = 30 seconds after auto landing.`\r\n\r\n* __NOTE:__\r\nWhen armed via an AUX switch, you will have to switch to the disarmed position at the very end to be able to re-arm. _The failsafe mode will not end until you do._\r\n","created_at":"2015-05-06T22:11:06Z","updated_at":"2015-08-27T19:16:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8e4780e6114c7f08853828366abe526ba267b682","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/cleanflight/cleanflight/pulls/852/commits","review_comments_url":"https://api.github.com/repos/cleanflight/cleanflight/pulls/852/comments","review_comment_url":"https://api.github.com/repos/cleanflight/cleanflight/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cleanflight/cleanflight/issues/852/comments","statuses_url":"https://api.github.com/repos/cleanflight/cleanflight/statuses/acc2cb8a1c82dafe6f84a38058870301293d69ab","head":{"label":"ProDrone:Failsafe_features_1","ref":"Failsafe_features_1","sha":"acc2cb8a1c82dafe6f84a38058870301293d69ab","user":{"login":"ProDrone","id":7206988,"avatar_url":"https://avatars.githubusercontent.com/u/7206988?v=3","gravatar_id":"","url":"https://api.github.com/users/ProDrone","html_url":"https://github.com/ProDrone","followers_url":"https://api.github.com/users/ProDrone/followers","following_url":"https://api.github.com/users/ProDrone/following{/other_user}","gists_url":"https://api.github.com/users/ProDrone/gists{/gist_id}","starred_url":"https://api.github.com/users/ProDrone/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ProDrone/subscriptions","organizations_url":"https://api.github.com/users/ProDrone/orgs","repos_url":"https://api.github.com/users/ProDrone/repos","events_url":"https://api.github.com/users/ProDrone/events{/privacy}","received_events_url":"https://api.github.com/users/ProDrone/received_events","type":"User","site_admin":false},"repo":{"id":20747081,"name":"cleanflight","full_name":"ProDrone/cleanflight","owner":{"login":"ProDrone","id":7206988,"avatar_url":"https://avatars.githubusercontent.com/u/7206988?v=3","gravatar_id":"","url":"https://api.github.com/users/ProDrone","html_url":"https://github.com/ProDrone","followers_url":"https://api.github.com/users/ProDrone/followers","following_url":"https://api.github.com/users/ProDrone/following{/other_user}","gists_url":"https://api.github.com/users/ProDrone/gists{/gist_id}","starred_url":"https://api.github.com/users/ProDrone/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ProDrone/subscriptions","organizations_url":"https://api.github.com/users/ProDrone/orgs","repos_url":"https://api.github.com/users/ProDrone/repos","events_url":"https://api.github.com/users/ProDrone/events{/privacy}","received_events_url":"https://api.github.com/users/ProDrone/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ProDrone/cleanflight","description":"Clean-code version of the baseflight flight controller","fork":true,"url":"https://api.github.com/repos/ProDrone/cleanflight","forks_url":"https://api.github.com/repos/ProDrone/cleanflight/forks","keys_url":"https://api.github.com/repos/ProDrone/cleanflight/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ProDrone/cleanflight/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ProDrone/cleanflight/teams","hooks_url":"https://api.github.com/repos/ProDrone/cleanflight/hooks","issue_events_url":"https://api.github.com/repos/ProDrone/cleanflight/issues/events{/number}","events_url":"https://api.github.com/repos/ProDrone/cleanflight/events","assignees_url":"https://api.github.com/repos/ProDrone/cleanflight/assignees{/user}","branches_url":"https://api.github.com/repos/ProDrone/cleanflight/branches{/branch}","tags_url":"https://api.github.com/repos/ProDrone/cleanflight/tags","blobs_url":"https://api.github.com/repos/ProDrone/cleanflight/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ProDrone/cleanflight/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ProDrone/cleanflight/git/refs{/sha}","trees_url":"https://api.github.com/repos/ProDrone/cleanflight/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ProDrone/cleanflight/statuses/{sha}","languages_url":"https://api.github.com/repos/ProDrone/cleanflight/languages","stargazers_url":"https://api.github.com/repos/ProDrone/cleanflight/stargazers","contributors_url":"https://api.github.com/repos/ProDrone/cleanflight/contributors","subscribers_url":"https://api.github.com/repos/ProDrone/cleanflight/subscribers","subscription_url":"https://api.github.com/repos/ProDrone/cleanflight/subscription","commits_url":"https://api.github.com/repos/ProDrone/cleanflight/commits{/sha}","git_commits_url":"https://api.github.com/repos/ProDrone/cleanflight/git/commits{/sha}","comments_url":"https://api.github.com/repos/ProDrone/cleanflight/comments{/number}","issue_comment_url":"https://api.github.com/repos/ProDrone/cleanflight/issues/comments{/number}","contents_url":"https://api.github.com/repos/ProDrone/cleanflight/contents/{+path}","compare_url":"https://api.github.com/repos/ProDrone/cleanflight/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ProDrone/cleanflight/merges","archive_url":"https://api.github.com/repos/ProDrone/cleanflight/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ProDrone/cleanflight/downloads","issues_url":"https://api.github.com/repos/ProDrone/cleanflight/issues{/number}","pulls_url":"https://api.github.com/repos/ProDrone/cleanflight/pulls{/number}","milestones_url":"https://api.github.com/repos/ProDrone/cleanflight/milestones{/number}","notifications_url":"https://api.github.com/repos/ProDrone/cleanflight/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ProDrone/cleanflight/labels{/name}","releases_url":"https://api.github.com/repos/ProDrone/cleanflight/releases{/id}","created_at":"2014-06-11T22:55:25Z","updated_at":"2015-06-29T05:03:31Z","pushed_at":"2015-08-27T12:40:19Z","git_url":"git://github.com/ProDrone/cleanflight.git","ssh_url":"git@github.com:ProDrone/cleanflight.git","clone_url":"https://github.com/ProDrone/cleanflight.git","svn_url":"https://github.com/ProDrone/cleanflight","homepage":"","size":33272,"stargazers_count":1,"watchers_count":1,"language":"C","has_issues":false,"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":1,"default_branch":"master"}},"base":{"label":"cleanflight:master","ref":"master","sha":"c49bd407bfe716b2566ec119953941a3c2283e8d","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}","created_at":"2013-03-27T23:49:19Z","updated_at":"2015-08-27T07:30:12Z","pushed_at":"2015-08-27T12:42:04Z","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":62087,"stargazers_count":506,"watchers_count":506,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":456,"mirror_url":null,"open_issues_count":306,"forks":456,"open_issues":306,"watchers":506,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cleanflight/cleanflight/pulls/852"},"html":{"href":"https://github.com/cleanflight/cleanflight/pull/852"},"issue":{"href":"https://api.github.com/repos/cleanflight/cleanflight/issues/852"},"comments":{"href":"https://api.github.com/repos/cleanflight/cleanflight/issues/852/comments"},"review_comments":{"href":"https://api.github.com/repos/cleanflight/cleanflight/pulls/852/comments"},"review_comment":{"href":"https://api.github.com/repos/cleanflight/cleanflight/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cleanflight/cleanflight/pulls/852/commits"},"statuses":{"href":"https://api.github.com/repos/cleanflight/cleanflight/statuses/acc2cb8a1c82dafe6f84a38058870301293d69ab"}}}}