{"action":"created","comment":{"url":"https://api.github.com/repos/swift-nav/libsbp/pulls/comments/83976694","pull_request_review_id":4784787,"id":83976694,"diff_hunk":"@@ -0,0 +1,121 @@\n+### SBP changes before shipping Piksi Multi\n+\n+There are a few changes we would like to make in the SBP protocol. These changes\n+will be much more painful to make after we ship and customers are relying on\n+the protocol to be largely static, so we'd like to come to a consensus on\n+these and implement them before shipping Piksi Multi.\n+\n+These changes attempt to accomplish a few things:\n+- Make messages more bandwidth efficient\n+- Make user side logic of using messages more obvious\n+- Remove state from the protocol, where possible\n+\n+### 1. Replace obs forwarding with general purpose forwarding message\n+\n+Current there is a convention in the protocol that if the sender_id of a\n+MSG_OBS is 0, it means it is a forwarded observation from another device. We\n+propose to replace this with a general purpose forwarding message that wraps\n+the forwarded message, discarding the preamble and checksum of the forwarded\n+message. This way, the sender_id of the forwarded message will be preserved and\n+will remove the need for special handling of sender_id = 0 on obs messages.\n+\n+### 2. sender_id = device_uuid & 0xFFFF\n+\n+We need to decide where sender_id will come from on Piksi Multi. In deciding\n+this, we need to keep in mind the following goals:\n+- sender_id *does not* need to be globally unique amongst all Piksi Multi's\n+- sender_id *does* need to be unique amongst the Piksi Multi's on a customer's\n+local network of devices (for instance, point to multi-point ISM radio network,\n+TCP/IP network, etc)\n+\n+### 3. Remove request / response messages where possible\n+\n+The following request response messages are not used in Piksi Multi and can be\n+deprecated:\n+\n+- `MSG_BOOTLOADER_HANDSHAKE_REQ`\n+- `MSG_BOOTLOADER_HANDSHAKE_RESP`\n+- `MSG_FLASH_READ_REQ`\n+- `MSG_FLASH_READ_RESP`\n+- `MSG_FLASH_PROGRAM`\n+- `MSG_FLASH_ERASE`\n+- `MSG_FLASH_DONE`\n+- `MSG_STM_FLASH_LOCK_SECTOR`\n+- `MSG_STM_FLASH_UNLOCK_SECTOR`\n+- `MSG_M25_FLASH_WRITE_STATUS`\n+\n+The following messages could be part of a device ID message that is\n+periodically sent:\n+\n+- `MSG_NAP_DEVICE_DNA_REQ`\n+- `MSG_NAP_DEVICE_DNA_RESP`\n+- `MSG_STM_UNIQUE_ID_REQ`\n+- `MSG_STM_UNIQUE_ID_RESP`\n+\n+### 4. Observation message updates\n+\n+Updates to observation message to reduce bandwidth and allow observations to\n+always be sent regardless of whether they're usable (receiving device filters\n+them for usability rather than sending device).\n+\n+- Remove week number (2 bytes)\n+- Replace 4 byte obs.sid with 2 bytes, matching the firmware SID representation\n+  - Satellite ID (1 byte)\n+    - Should we make this actual satellite ID value, not value minus 1?\n+  - Signal (Band/Constellation/Etc) Code (1 byte)\n+- Replace 2 byte lock counter with 1 byte, conforming to DF402 from RTCM 10403.2\n+- Add 1 byte of flags for each satellite - need to talk to Estimation and Exafore about what these should be\n+  - Bit 0: Time fix valid (or code phase valid)\n+  - Bit 1: Carrier phase valid\n+  - Bit 2: Half cycle ambiguity resolved\n+  - Bits 3-7: Reserved\n+- Have observations be sent out at all times, use flags to indicate validity\n+\n+### 5. Send solution messages at all times, regardless of fix status\n+\n+- Affects the following messages:\n+  - GPS time\n+  - DOPS (to add)\n+  - Pos ECEF\n+  - Pos LLH\n+  - Baseline ECEF\n+  - Baseline NED\n+  - Vel ECEF\n+  - Vel NED\n+  - Baseline heading \n+- Have flags be consistent across all solution messages (except for GPS time)\n+  - 0 = Fix not available or invalid","path":"pre-piksi-multi-launch-updates.md","position":87,"original_position":87,"commit_id":"e95b791461fe442af85c055a39157463ee92ea6f","original_commit_id":"e95b791461fe442af85c055a39157463ee92ea6f","user":{"login":"cbeighley","id":502385,"avatar_url":"https://avatars.githubusercontent.com/u/502385?v=3","gravatar_id":"","url":"https://api.github.com/users/cbeighley","html_url":"https://github.com/cbeighley","followers_url":"https://api.github.com/users/cbeighley/followers","following_url":"https://api.github.com/users/cbeighley/following{/other_user}","gists_url":"https://api.github.com/users/cbeighley/gists{/gist_id}","starred_url":"https://api.github.com/users/cbeighley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cbeighley/subscriptions","organizations_url":"https://api.github.com/users/cbeighley/orgs","repos_url":"https://api.github.com/users/cbeighley/repos","events_url":"https://api.github.com/users/cbeighley/events{/privacy}","received_events_url":"https://api.github.com/users/cbeighley/received_events","type":"User","site_admin":false},"body":"Decided in meeting on Oct 18:\r\n- Bump message IDs\r\n- 0 is the value for Invalid\r\n- Baseline and Position messages will have same numerical values for Float/Fixed\r\n- Other messages are independent","created_at":"2016-10-19T00:07:56Z","updated_at":"2016-10-19T00:07:56Z","html_url":"https://github.com/swift-nav/libsbp/pull/386#discussion_r83976694","pull_request_url":"https://api.github.com/repos/swift-nav/libsbp/pulls/386","_links":{"self":{"href":"https://api.github.com/repos/swift-nav/libsbp/pulls/comments/83976694"},"html":{"href":"https://github.com/swift-nav/libsbp/pull/386#discussion_r83976694"},"pull_request":{"href":"https://api.github.com/repos/swift-nav/libsbp/pulls/386"}}},"pull_request":{"url":"https://api.github.com/repos/swift-nav/libsbp/pulls/386","id":89235538,"html_url":"https://github.com/swift-nav/libsbp/pull/386","diff_url":"https://github.com/swift-nav/libsbp/pull/386.diff","patch_url":"https://github.com/swift-nav/libsbp/pull/386.patch","issue_url":"https://api.github.com/repos/swift-nav/libsbp/issues/386","number":386,"state":"open","locked":false,"title":"Proposed changes before launch","user":{"login":"cbeighley","id":502385,"avatar_url":"https://avatars.githubusercontent.com/u/502385?v=3","gravatar_id":"","url":"https://api.github.com/users/cbeighley","html_url":"https://github.com/cbeighley","followers_url":"https://api.github.com/users/cbeighley/followers","following_url":"https://api.github.com/users/cbeighley/following{/other_user}","gists_url":"https://api.github.com/users/cbeighley/gists{/gist_id}","starred_url":"https://api.github.com/users/cbeighley/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cbeighley/subscriptions","organizations_url":"https://api.github.com/users/cbeighley/orgs","repos_url":"https://api.github.com/users/cbeighley/repos","events_url":"https://api.github.com/users/cbeighley/events{/privacy}","received_events_url":"https://api.github.com/users/cbeighley/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-10-13T16:19:46Z","updated_at":"2016-10-19T00:07:56Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0b301af01a09ec3480c9fed8c8d9b49bc9a01898","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/swift-nav/libsbp/pulls/386/commits","review_comments_url":"https://api.github.com/repos/swift-nav/libsbp/pulls/386/comments","review_comment_url":"https://api.github.com/repos/swift-nav/libsbp/pulls/comments{/number}","comments_url":"https://api.github.com/repos/swift-nav/libsbp/issues/386/comments","statuses_url":"https://api.github.com/repos/swift-nav/libsbp/statuses/e95b791461fe442af85c055a39157463ee92ea6f","head":{"label":"swift-nav:pre-piksi-multi-launch-updates","ref":"pre-piksi-multi-launch-updates","sha":"e95b791461fe442af85c055a39157463ee92ea6f","user":{"login":"swift-nav","id":1069835,"avatar_url":"https://avatars.githubusercontent.com/u/1069835?v=3","gravatar_id":"","url":"https://api.github.com/users/swift-nav","html_url":"https://github.com/swift-nav","followers_url":"https://api.github.com/users/swift-nav/followers","following_url":"https://api.github.com/users/swift-nav/following{/other_user}","gists_url":"https://api.github.com/users/swift-nav/gists{/gist_id}","starred_url":"https://api.github.com/users/swift-nav/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/swift-nav/subscriptions","organizations_url":"https://api.github.com/users/swift-nav/orgs","repos_url":"https://api.github.com/users/swift-nav/repos","events_url":"https://api.github.com/users/swift-nav/events{/privacy}","received_events_url":"https://api.github.com/users/swift-nav/received_events","type":"Organization","site_admin":false},"repo":{"id":26985599,"name":"libsbp","full_name":"swift-nav/libsbp","owner":{"login":"swift-nav","id":1069835,"avatar_url":"https://avatars.githubusercontent.com/u/1069835?v=3","gravatar_id":"","url":"https://api.github.com/users/swift-nav","html_url":"https://github.com/swift-nav","followers_url":"https://api.github.com/users/swift-nav/followers","following_url":"https://api.github.com/users/swift-nav/following{/other_user}","gists_url":"https://api.github.com/users/swift-nav/gists{/gist_id}","starred_url":"https://api.github.com/users/swift-nav/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/swift-nav/subscriptions","organizations_url":"https://api.github.com/users/swift-nav/orgs","repos_url":"https://api.github.com/users/swift-nav/repos","events_url":"https://api.github.com/users/swift-nav/events{/privacy}","received_events_url":"https://api.github.com/users/swift-nav/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/swift-nav/libsbp","description":"Swift Binary Protocol client libraries","fork":false,"url":"https://api.github.com/repos/swift-nav/libsbp","forks_url":"https://api.github.com/repos/swift-nav/libsbp/forks","keys_url":"https://api.github.com/repos/swift-nav/libsbp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/swift-nav/libsbp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/swift-nav/libsbp/teams","hooks_url":"https://api.github.com/repos/swift-nav/libsbp/hooks","issue_events_url":"https://api.github.com/repos/swift-nav/libsbp/issues/events{/number}","events_url":"https://api.github.com/repos/swift-nav/libsbp/events","assignees_url":"https://api.github.com/repos/swift-nav/libsbp/assignees{/user}","branches_url":"https://api.github.com/repos/swift-nav/libsbp/branches{/branch}","tags_url":"https://api.github.com/repos/swift-nav/libsbp/tags","blobs_url":"https://api.github.com/repos/swift-nav/libsbp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/swift-nav/libsbp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/swift-nav/libsbp/git/refs{/sha}","trees_url":"https://api.github.com/repos/swift-nav/libsbp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/swift-nav/libsbp/statuses/{sha}","languages_url":"https://api.github.com/repos/swift-nav/libsbp/languages","stargazers_url":"https://api.github.com/repos/swift-nav/libsbp/stargazers","contributors_url":"https://api.github.com/repos/swift-nav/libsbp/contributors","subscribers_url":"https://api.github.com/repos/swift-nav/libsbp/subscribers","subscription_url":"https://api.github.com/repos/swift-nav/libsbp/subscription","commits_url":"https://api.github.com/repos/swift-nav/libsbp/commits{/sha}","git_commits_url":"https://api.github.com/repos/swift-nav/libsbp/git/commits{/sha}","comments_url":"https://api.github.com/repos/swift-nav/libsbp/comments{/number}","issue_comment_url":"https://api.github.com/repos/swift-nav/libsbp/issues/comments{/number}","contents_url":"https://api.github.com/repos/swift-nav/libsbp/contents/{+path}","compare_url":"https://api.github.com/repos/swift-nav/libsbp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/swift-nav/libsbp/merges","archive_url":"https://api.github.com/repos/swift-nav/libsbp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/swift-nav/libsbp/downloads","issues_url":"https://api.github.com/repos/swift-nav/libsbp/issues{/number}","pulls_url":"https://api.github.com/repos/swift-nav/libsbp/pulls{/number}","milestones_url":"https://api.github.com/repos/swift-nav/libsbp/milestones{/number}","notifications_url":"https://api.github.com/repos/swift-nav/libsbp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/swift-nav/libsbp/labels{/name}","releases_url":"https://api.github.com/repos/swift-nav/libsbp/releases{/id}","deployments_url":"https://api.github.com/repos/swift-nav/libsbp/deployments","created_at":"2014-11-22T02:02:43Z","updated_at":"2016-07-25T18:29:35Z","pushed_at":"2016-10-18T19:02:52Z","git_url":"git://github.com/swift-nav/libsbp.git","ssh_url":"git@github.com:swift-nav/libsbp.git","clone_url":"https://github.com/swift-nav/libsbp.git","svn_url":"https://github.com/swift-nav/libsbp","homepage":"","size":11953,"stargazers_count":17,"watchers_count":17,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":45,"mirror_url":null,"open_issues_count":45,"forks":45,"open_issues":45,"watchers":17,"default_branch":"master"}},"base":{"label":"swift-nav:master","ref":"master","sha":"d99d0aff44222e0e0ac20b0aefa67ea75d259b0f","user":{"login":"swift-nav","id":1069835,"avatar_url":"https://avatars.githubusercontent.com/u/1069835?v=3","gravatar_id":"","url":"https://api.github.com/users/swift-nav","html_url":"https://github.com/swift-nav","followers_url":"https://api.github.com/users/swift-nav/followers","following_url":"https://api.github.com/users/swift-nav/following{/other_user}","gists_url":"https://api.github.com/users/swift-nav/gists{/gist_id}","starred_url":"https://api.github.com/users/swift-nav/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/swift-nav/subscriptions","organizations_url":"https://api.github.com/users/swift-nav/orgs","repos_url":"https://api.github.com/users/swift-nav/repos","events_url":"https://api.github.com/users/swift-nav/events{/privacy}","received_events_url":"https://api.github.com/users/swift-nav/received_events","type":"Organization","site_admin":false},"repo":{"id":26985599,"name":"libsbp","full_name":"swift-nav/libsbp","owner":{"login":"swift-nav","id":1069835,"avatar_url":"https://avatars.githubusercontent.com/u/1069835?v=3","gravatar_id":"","url":"https://api.github.com/users/swift-nav","html_url":"https://github.com/swift-nav","followers_url":"https://api.github.com/users/swift-nav/followers","following_url":"https://api.github.com/users/swift-nav/following{/other_user}","gists_url":"https://api.github.com/users/swift-nav/gists{/gist_id}","starred_url":"https://api.github.com/users/swift-nav/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/swift-nav/subscriptions","organizations_url":"https://api.github.com/users/swift-nav/orgs","repos_url":"https://api.github.com/users/swift-nav/repos","events_url":"https://api.github.com/users/swift-nav/events{/privacy}","received_events_url":"https://api.github.com/users/swift-nav/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/swift-nav/libsbp","description":"Swift Binary Protocol client libraries","fork":false,"url":"https://api.github.com/repos/swift-nav/libsbp","forks_url":"https://api.github.com/repos/swift-nav/libsbp/forks","keys_url":"https://api.github.com/repos/swift-nav/libsbp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/swift-nav/libsbp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/swift-nav/libsbp/teams","hooks_url":"https://api.github.com/repos/swift-nav/libsbp/hooks","issue_events_url":"https://api.github.com/repos/swift-nav/libsbp/issues/events{/number}","events_url":"https://api.github.com/repos/swift-nav/libsbp/events","assignees_url":"https://api.github.com/repos/swift-nav/libsbp/assignees{/user}","branches_url":"https://api.github.com/repos/swift-nav/libsbp/branches{/branch}","tags_url":"https://api.github.com/repos/swift-nav/libsbp/tags","blobs_url":"https://api.github.com/repos/swift-nav/libsbp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/swift-nav/libsbp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/swift-nav/libsbp/git/refs{/sha}","trees_url":"https://api.github.com/repos/swift-nav/libsbp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/swift-nav/libsbp/statuses/{sha}","languages_url":"https://api.github.com/repos/swift-nav/libsbp/languages","stargazers_url":"https://api.github.com/repos/swift-nav/libsbp/stargazers","contributors_url":"https://api.github.com/repos/swift-nav/libsbp/contributors","subscribers_url":"https://api.github.com/repos/swift-nav/libsbp/subscribers","subscription_url":"https://api.github.com/repos/swift-nav/libsbp/subscription","commits_url":"https://api.github.com/repos/swift-nav/libsbp/commits{/sha}","git_commits_url":"https://api.github.com/repos/swift-nav/libsbp/git/commits{/sha}","comments_url":"https://api.github.com/repos/swift-nav/libsbp/comments{/number}","issue_comment_url":"https://api.github.com/repos/swift-nav/libsbp/issues/comments{/number}","contents_url":"https://api.github.com/repos/swift-nav/libsbp/contents/{+path}","compare_url":"https://api.github.com/repos/swift-nav/libsbp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/swift-nav/libsbp/merges","archive_url":"https://api.github.com/repos/swift-nav/libsbp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/swift-nav/libsbp/downloads","issues_url":"https://api.github.com/repos/swift-nav/libsbp/issues{/number}","pulls_url":"https://api.github.com/repos/swift-nav/libsbp/pulls{/number}","milestones_url":"https://api.github.com/repos/swift-nav/libsbp/milestones{/number}","notifications_url":"https://api.github.com/repos/swift-nav/libsbp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/swift-nav/libsbp/labels{/name}","releases_url":"https://api.github.com/repos/swift-nav/libsbp/releases{/id}","deployments_url":"https://api.github.com/repos/swift-nav/libsbp/deployments","created_at":"2014-11-22T02:02:43Z","updated_at":"2016-07-25T18:29:35Z","pushed_at":"2016-10-18T19:02:52Z","git_url":"git://github.com/swift-nav/libsbp.git","ssh_url":"git@github.com:swift-nav/libsbp.git","clone_url":"https://github.com/swift-nav/libsbp.git","svn_url":"https://github.com/swift-nav/libsbp","homepage":"","size":11953,"stargazers_count":17,"watchers_count":17,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":45,"mirror_url":null,"open_issues_count":45,"forks":45,"open_issues":45,"watchers":17,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/swift-nav/libsbp/pulls/386"},"html":{"href":"https://github.com/swift-nav/libsbp/pull/386"},"issue":{"href":"https://api.github.com/repos/swift-nav/libsbp/issues/386"},"comments":{"href":"https://api.github.com/repos/swift-nav/libsbp/issues/386/comments"},"review_comments":{"href":"https://api.github.com/repos/swift-nav/libsbp/pulls/386/comments"},"review_comment":{"href":"https://api.github.com/repos/swift-nav/libsbp/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/swift-nav/libsbp/pulls/386/commits"},"statuses":{"href":"https://api.github.com/repos/swift-nav/libsbp/statuses/e95b791461fe442af85c055a39157463ee92ea6f"}}}}
{"actor":{"display_login":"cbeighley"}}