{"action":"created","comment":{"url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/comments/241812848","pull_request_review_id":185168708,"id":241812848,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0MTgxMjg0OA==","diff_hunk":"@@ -16,277 +16,306 @@ To enable OEM proprietary mobile apps to read raw CAN/Network data by specifying\n \n ## Proposed solution\n \n-Solution is to provide a Generic RPC, which can GET/SUBSCRIBE/UNSUBSCRIBE to any available Vehicle Data. \n-* Mobile app would pass a unique identifier and optionally an array of attributes through this RPC. These attributes are required to identify vehicle data requested by the app.\n-* These attributes are proprietary for OEMs, so Mobile app needs to have access to proprietary interface definitions for vehicle data/service layer with which SDL interfaces to access vehicle data.\n-* OEM implementation needs to enforce tracking of “unique identifier” to avoid duplicate subscriptions and to optimize subscription requests from multiple apps.\n-* Mobile App is responsible to keep track of vehicle data it requests with help of field called \"Id\".\n-* Mobile App can pick from three modes:\n-  * GET\t\t: Used for one time request to read current state/value of vehicle data\n-  * SUBSCRIBE\t: Used to receive updates to vehicle data for the period of subscription\n-  * UNSUBSCRIBE: Used to stop the updates to vehicle data which was subscribed earlier\n+Solution is to replace the way vehicle data items are validated for _GetVehicleData/SubscribeVehicleData/UnsubscribeVehicleData/OnVehicleData_ APIs. \n \n-**Request XML:**\n+Instead of validating vehicle data items against APIs XML, SDL would rely on a dedicated vehicle data items schema as below:\n ```\n-<function name=\"GenericNetworkData\" functionID=\"GenericNetworkDataID\" messagetype=\"request\">\n-    <description>Vehicle network data request</description>\n+{\n+\t\"id\":\"VehicleDataItem\",\n+\t\"dataType\":\"SDLDataType\",\n+\t\"reference\":\"OEMDataRef\",\n+\t\"array\":true/false,\n+\t\"mandatory\":true/false\n+}\n+```\n+* VehicleDataItem - It is the vehicle data item in question. e.g. gps, speed etc. SDL would use this as vehicle data param for requests from App and to validate policies permissions\n+* SDLDataType - Return data type of the vehicle data item. It can be generic SDL data type e.g. Integer, String, Float etc OR an Enumeration defined in APIs XML. For vehicle data item which has sub-params, this would be Struct.\n+* OEMDataRef - This is a reference for OEM mapping table which defines signal attributes for this vehicle data items. OEMs may use this table to differentiate between various vehicle and SW configurations. SDL will pass along this reference to HMI, HMI would be responsible to resolve this reference using OEM specific mapping table.\n \n-    <param name=\"id\" type=\"String\" maxlength=\"100\" mandatory=\"true\">\n-\t\t<description>\n-\t\t\tParameter ID for the requested vehicle data.\t\n-\t\t\tShould not be Blank or contain whitespaces.\n-\t\t\tSame ID can be used for GET/SUBSCRIBE/UNSUBSCIRBE requests for same vehicle data.\n-\t\t\tRefer to OEM specific vehicle data identifier list for information on format of identifier and mapping of vehicle data.\n-\t\t</description>\n-    </param>\n+* _array_ : To speciify if the vehicle data item/param response is an array.\n+* _mandatory_ : To specify if the vehicle data param is mandatory to be included in response for overall vehicle data item.\n \n-\t<param name=\"networkDataRequestMode\" type=\"NetworkDataRequestMode\" mandatory=\"true\">\n-\t\t<description>\n-\t\t\tEnumeration to control the network data request type.\n-\t\t\tGET\n-\t\t\tSUBSCRIBE\n-\t\t\tUNSUBSCRIBE\n-\t\t</description>\n-    </param>\n-\t\n-   <param name=\"networkDataAttribute\" type=\"String\" maxlength=\"500\" minsize=\"1\" maxsize=\"100\" array=\"true\" mandatory=\"false\">\n-\t\t<description>\n-\t\t\tString Array of additional Network Data Attributes which identify network data as per OEM implementation \t\t\t\n-\t\t</description>\n-    </param>\n-\t\n-</function>\n+* _id_ is required for top level vehicle data items while _dataType_ & _reference_ are required fields for vehicle data and sub-params, _array_ and _mandatory_ can be omitted. If omitted, _array_ defaults to *false* and _mandatory_ defaults to *true*\n \n-<enum name=\"NetworkDataRequestMode\">\n-\t<description>Describes how the GenericNetworkData should behave on the platform</description>\n-\t<element name=\"GET\">\n-\t\t<description>Denotes that the request type is single read request for network data</description>\n-\t</element>\n-\t<element name=\"SUBSCRIBE\" >\n-\t\t<description>Denotes that the request type is to receive network data update with every change\n-\t\tRequest is ignored if requested network data is already subscribed \t\t\n-\t\t</description>\n-\t</element>\n-\t<element name=\"UNSUBSCRIBE\" >\n-\t\t<description>Denotes that the request type is to end the previous network data subscription\n-\t\tRequest is ignored if requested network data is NOT already subscribed\n-\t\t</description>\n-\t</element>\n-</enum>\n+#### Schema file location and updates\n+We will keep a base JSON schema file for SDL core and proxy locally and another one in the OEM cloud. OEMs can update the schema file with OEM specific items which SDL core would be able to download over the cloud along with policy update and SDL proxy would be able to download via a URL passed to the app from HMI as an _endpoint_ shown below:\n ```\n-\n-Head unit, would in turn GET/SUBCRIBE/UNSUBSCRIBE the vehicle data from underlying vehicle service layers. \n-* Mobile app will receive the response with confirmation of successful operation and a result code.\n-* Response will contain the mode for the vehicle data response\n-  * GET\t\t: Result code in this mode represents if current vehicle data read operation is successful or not\n-  * SUBSCRIBE\t: Result code in this mode represents if Subscribe operation is successful or not\n-  * UNSUBSCRIBE: Result code in this mode represents if Unsubscribe operation is successful or not\n-* Response will contain an array of network data. Network data element in the array will contain \"id\" (which mobile app had set while requesting for data) and value of the vehicle data.\n-* Mobile app will be responsible for decoding the String value of requested data into a usable form by applying conversions as defined by OEM proprietary spec sheet for corresponding vehicle data.\n-* Response will also contain an optional “info” field. This field contains additional human readable information regarding the request/response\n-\n-**Response XML:**\n+\"endpoints\": {\n+    \"0x07\": {\n+        \"default\": [\"http://x.x.x.x:3000/api/1/policies/proprietary\"]\n+     },\n+     \"0x04\": {\n+         \"default\": [\"http://x.x.x.x:3000/api/1/softwareUpdate\"]\n+     },\n+     \"queryAppsUrl\": {\n+         \"default\": [\"http://sdl.shaid.server\"]\n+     },\n+     \"lock_screen_icon_url\": {\n+         \"default\": [\"http://i.imgur.com/TgkvOIZ.png\"]\n+     },\n+     \"extended_vehicle_data_url\": {\n+         \"default\": [\"http://x.x.x.x:3000/api/1/vehicledata/\"]\n+     }\n+}\n+```\n+This new design would ensure flexibility to add OEM specific vehicle data items while maintaining access control via policies the same it is done today.\n+\n+### Example of sample schema addition to policy table for SDL core update:\n+```json\n+....\n+      \"BaseBeforeDataConsent\"\n+        ]\n+      }\n+    },\n+\t\"VehicleDataItems\":\n+\t[\n+\t\t{\n+\t\t\t\"id\":\"rpm\",\n+\t\t\t\"dataType\":\"Integer\",\n+\t\t\t\"reference\":\"OEM_REF_RPM\",\n+\t\t\t\"array\":false,\n+\t\t\t\"mandatory\":true\n+\t\t},\n+\t\t{\n+\t\t\t\"id\":\"headLampStatus\",\n+\t\t\t\"dataType\":\"Struct\",\n+\t\t\t\"reference\":\"OEM_REF_STRUCT\",\n+\t\t\t\"ambientLightSensorStatus\":{\n+\t\t\t\t\"dataType\":\"AmbientLightStatus\",\n+\t\t\t\t\"reference\":\"OEM_REF_AMB_LIGHT\",\n+\t\t\t\t\"mandatory\":false\n+\t\t\t},\n+\t\t\t\"highBeamsOn\":{\n+\t\t\t\t\"dataType\":\"Boolean\",\n+\t\t\t\t\"reference\":\"OEM_REF_HIGH_BEAM\"\n+\t\t\t},\n+\t\t\t\"lowBeamsOn\":{\n+\t\t\t\t\"dataType\":\"Boolean\",\n+\t\t\t\t\"reference\":\"OEM_REF_LOW_BEAM\"\n+\t\t\t}\n+\t\t},\n+\t\t{\n+\t\t\t\"id\":\"engineState\",\n+\t\t\t\"dataType\":\"Struct\",\n+\t\t\t\"reference\":\"OEM_REF_STRUCT\",\n+\t\t\t\"engineCoolantTemp\" : {\n+\t\t\t\t\"dataType\":\"Integer\",\n+\t\t\t\t\"reference\":\"OEM_REF_ENG_COOL_TEMP\",\n+\t\t\t\t\"array\":false,\n+\t\t\t\t\"mandatory\":false\n+\t\t\t},\n+\t\t\t\"engineO2Sat\":{\n+\t\t\t\t\"dataType\":\"Float\",\n+\t\t\t\t\"reference\":\"OEM_REF_ENG_O2_SAT\",\t\t\t\t\n+\t\t\t\t\"mandatory\":false\n+\t\t\t},\n+\t\t\t\"engineState\":{\n+\t\t\t\t\"dataType\":\"String\",\n+\t\t\t\t\"reference\":\"OEM_REF_ENG_STATE\"\n+\t\t\t},\n+\t\t\t\"engineServiceRequired\":{\n+\t\t\t\t\"dataType\":\"Boolean\",\n+\t\t\t\t\"reference\":\"OEM_REF_ENG_SER_REQ\",\n+\t\t\t\t\"array\":false,\n+\t\t\t\t\"mandatory\":false\n+\t\t\t}\n+\t\t},\n+\t\t{\n+\t\t\t\"id\":\"messageName\",\n+\t\t\t\"dataType\":\"String\",\n+\t\t\t\"reference\":\"OEM_REF_MSG\",\n+\t\t\t\"array\":false,\n+\t\t\t\"mandatory\":true\n+\t\t}\n+\t]\n+....\n ```\n- <function name=\"GenericNetworkData\" functionID=\"GenericNetworkDataID\" messagetype=\"response\">\n-\n-    <param name=\"success\" type=\"Boolean\" platform=\"documentation\">\n-\t\t<description> true, if successful; false, if failed </description>\n-\t  </param>\n-\n-    <param name=\"resultCode\" type=\"Result\" platform=\"documentation\">\n-      <description>See Result</description>\n-      <element name=\"SUCCESS\"/>\n-\t  <element name=\"IGNORED\"/>\n-      <element name=\"INVALID_DATA\"/>\n-      <element name=\"OUT_OF_MEMORY\"/>\n-      <element name=\"TOO_MANY_PENDING_REQUESTS\"/>\n-      <element name=\"APPLICATION_NOT_REGISTERED\"/>\n-      <element name=\"GENERIC_ERROR\"/>\n-\t  <element name=\"TIMED_OUT\"/>\n-      <element name=\"REJECTED\"/>\n-      <element name=\"DISALLOWED\"/>\n-      <element name=\"USER_DISALLOWED\"/>\n-      <element name=\"TRUNCATED_DATA\"/>\n-    </param>\n-\n-\t<param name=\"networkDataRequestMode\" type=\"NetworkDataRequestMode\" mandatory=\"true\">\n-      <description>\n-      \tEnumeration to control the network data request type.\n-      \tGET\n-\t\tSUBSCRIBE\n-\t\tUNSUBSCRIBE\n-      </description>\n-    </param>\n-\t\n-    <param name=\"info\" type=\"String\" maxlength=\"1000\" mandatory=\"false\" platform=\"documentation\">\n-      <description>Provides additional human readable info regarding the result.</description>\n-    </param>\n \n-    <param name=\"networkData\" type=\"NetworkData\" mandatory=\"false\" array=\"false\">\n-      <description>\n-      \tReturned Network Data value for a paramId\n-      </description>\n-    </param>\n+#### Note: Only 2 levels of nesting allowed for vehicle data items/Sub items. i.e. vehicle data item can have params e.g. \"headLampStatus\" has \"highBeamsOn\" as param from above schema. But params can't have sub-params, e.g. \"highBeamsOn\" can't have any further nesting of params.\n \n-  </function>\n+### Vehicle data items can be arranged in structures. See below example for existing vehicle data item _rpm_\n \n-<struct name=\"NetworkData\">\n-\t <param name=\"id\" type=\"String\" maxlength=\"100\" mandatory=\"true\">\n-\t\t<description>\n-\t\t\tUnique Parameter ID for the request.\t\t\t\n-\t\t\tShould not be Blank or contain whitespaces.\n-\t\t\tShould not be same as existing active GET/SUBSCRIBE/UNSUBSCIRBE request\n-\t\t</description>\n-    </param>\n-\t\t\n-\t<param name=\"value\" type=\"Integer\" minvalue=\"0\" maxvalue=\"255\" minsize=\"1\" maxsize=\"512\" array=\"true\" mandatory=\"true\">\n-      <description>\n-      \tNetwork data byte array for corresponding vehicle data.\n-      </description>\n-    </param>\n-\t\n-</struct>\n+Sample Value for map:\n+```json\n+{\n+\t\"id\":\"rpm\",\n+\t\"dataType\":\"Integer\",\n+\t\"reference\":\"OEM_REF_RPM\",\n+\t\"array\":false,\n+\t\"mandatory\":true\n+}\n ```\n-\n-In case of successful subscription, mobile app will receive periodic updates for requested vehicle data through OnGenericNetworkData notification.\n-* Response will contain an array of network data. Network data element in the array will contain \"id\" (which mobile app had set while requesting for data) and value of the vehicle data.\n-* Mobile app will be responsible for decoding the String value of vehicle data into a usable form by applying conversions as defined by OEM proprietary spec sheet for corresponding vehicle data.\n-* Response will also contain an optional “info” field. This field contains additional human readable information regarding the request/response\n-\n+Sample response from module:\n+```json\n+{\n+\t\"rpm\":844\n+}\n ```\n-<function name=\"OnGenericNetworkData\" functionID=\"OnGenericNetworkDataID\" messagetype=\"notification\">\n-    <description>Callback for the periodic and non-periodic generic vehicle data read function.</description>\n-    \n-\t<param name=\"networkData\" type=\"NetworkData\" mandatory=\"false\" minsize=\"1\" maxsize=\"500\" array=\"true\">\n-      <description>\n-      \tReturned Network Data value\n-      </description>\n-    </param>  \n-\n-\t<param name=\"info\" type=\"String\" maxlength=\"1000\" mandatory=\"false\" platform=\"documentation\">\n-      <description>Provides additional human readable info regarding the notification.</description>\n-    </param>\t\n-\t\n-</function>\n+Structure in API:\n ```\n-\n-## Potential downsides\n-\n-* This approach has underlying assumption that Mobile app would have access to OEM specific proprietary interface details.\n-  * This is acceptable since we target only OEM proprietary Mobile apps to utilize this feature. Moreover, benefits of access to more vehicle data params outweigh this limitation.\n-* Mobile app is responsible for maintaining the network definitions as well as decoding the raw value received from vehicle.\n-  * Alternate way would be to maintain all the network signal definitions at head unit side. Which means it might not be scalable with any changes/additions to network signal definitions with introduction of newer vehicle architectures/features. On the contrary, Mobile app will maintain only the required network signal definitions, which will be significantly smaller than entire suite of network definitions.\n-\n-## Impact on existing code\n-\n-SDL needs to track requests by NetworkDataIdentifier per app and work through the business logic of duplicate requests. SDL would also need to distribute the received data to apps which have subscribed. \n-\n-## Alternatives considered\n-\n-* Add additional parameter in existing GetVehicleData/SunscribeVehicleData/UnsubscribeVehicleData RPCs:\n-  * networkDataRequest - which specifies paramId and NetworkDataAttribute String array to identify the network data item\n-\n+<param name=\"rpm\" type=\"Integer\" minvalue=\"0\" maxvalue=\"20000\" mandatory=\"false\">\n+\t<description>The number of revolutions per minute of the engine</description>\n+</param>\n+```\n+* Structure defines the data type as Integer and a reference as OEM_REF_RPM\n+* OEM_REF_RPM (or a more suitable nomenclature)\n+  * This acts as a key for OEM side mapping to signal information associated with RPM. \n+  * The mapping table for this reference is purely at OEM side. OEM may choose to implement it at HMI layer, fetch it over the cloud or both.\n+  * Mapping table defines OEM specific encoding for various identifier attributes, SW versions & configurations as needed, e.g.:\n+    * OEM_REF_RPM :: hev#veh_actl_spd#veh_status_msg#HS3#500ms\n+    * OR a JSON sub structure in table. Again, it is up to OEM to decide and implement\n+* HMI sends response as integer for RPM\n+\n+### For complex data items, a substructure is provided as shown in below example for _headLampStatus_:\n+\n+Sample Value for map:\n+```json\n+{\n+\t\"id\":\"headLampStatus\",\n+\t\"dataType\":\"Struct\",\n+\t\"reference\":\"OEM_REF_STRUCT\",\n+\t\"ambientLightSensorStatus\":{\n+\t\t\"dataType\":\"AmbientLightStatus\",\n+\t\t\"reference\":\"OEM_REF_AMB_LIGHT\",\n+\t\t\"mandatory\":false\n+\t},\n+\t\"highBeamsOn\":{\n+\t\t\"dataType\":\"Boolean\",\n+\t\t\"reference\":\"OEM_REF_HIGH_BEAM\"\n+\t},\n+\t\"lowBeamsOn\":{\n+\t\t\"dataType\":\"Boolean\",\n+\t\t\"reference\":\"OEM_REF_LOW_BEAM\"\n+\t}\n+}\n+```\n+Sample Response from module:\n+```json\n+{\n+\t\"headLampStatus\":{\n+\t\t\"ambientLightSensorStatus\":\"NIGHT\",\n+\t\t\"highBeamsOn\":false,\n+\t\t\"lowBeamsOn\":true\n+   }\n+}\n ```\n-<function name=\"GetVehicleData\" functionID=\"GetVehicleDataID\" messagetype=\"request\">\n-    <description>Non periodic vehicle data read request.</description>\n+Structure in API:\n+```\n+<struct name=\"HeadLampStatus\">\n+\t<param name=\"lowBeamsOn\" type=\"Boolean\" mandatory=\"true\">\n+\t\t<description>Status of the low beam lamps.  References signal \"HeadLampLoActv_B_Stat\".</description>\n+\t</param>\n+\t<param name=\"highBeamsOn\" type=\"Boolean\" mandatory=\"true\">\n+\t\t<description>Status of the high beam lamps.  References signal \"HeadLghtHiOn_B_Stat\".</description>\n+\t</param>\n+\t<param name=\"ambientLightSensorStatus\" type=\"AmbientLightStatus\" mandatory=\"false\">\n+\t\t<description>Status of the ambient light sensor.</description>\n+\t</param>\n+</struct>\n \n-    <param name=\"gps\" type=\"Boolean\" mandatory=\"false\">\n-      <description>See GPSData</description>\n-    </param>\n     \n-\t<!-- Not showing other params -->\n-\t\n-\t<param name=\"networkDataRequest\" type=\"NetworkDataRequest\" mandatory=\"false\">\t\n-      <description>Request Generic Network data</description>\n-    </param>\n-</function>\n-  \n-  \n-<struct name=\"NetworkDataRequest\">\n-\t<param name=\"paramId\" type=\"Integer\" minvalue=\"1\" maxvalue=\"65535\" mandatory=\"true\">\n-      <description>Paramter ID for the request.</description>\n-    </param>\n-\t\n-\t<param name=\"NetworkDataAttribute\" type=\"String\" maxlength=\"500\" minsize=\"1\" maxsize=\"100\" array=\"true\" mandatory=\"true\">\n-      <description>Array of Network Data Attributes which uniquely identify network data as per OEM implementation \n-\t  Should be uniquely identifiable network data item, else response would be INVALID_DATA\n-\t  </description>\n-    </param>\n-</struct>\n-```\n+<enum name=\"AmbientLightStatus\">\n+\t<description>Reflects the status of the ambient light sensor.</description>\n+\t<element name=\"NIGHT\" />\n+\t<element name=\"TWILIGHT_1\" />\n+\t<element name=\"TWILIGHT_2\" />\n+\t<element name=\"TWILIGHT_3\" />\n+\t<element name=\"TWILIGHT_4\" />\n+\t<element name=\"DAY\" />\n+\t<element name=\"UNKNOWN\" internal_name=\"ALS_UNKNOWN\" />\n+\t<element name=\"INVALID\" />\n+</enum> \n \n-* For GetVehicleData response/OnVehicleData, add additional response structure:\n-  * networkData - It has a paramId and value returned from vehicle. Value returned will be a Hex string.\n-  \n ```\n-<function name=\"GetVehicleData\" functionID=\"GetVehicleDataID\" messagetype=\"response\">\n \n-    <param name=\"success\" type=\"Boolean\" platform=\"documentation\">\n-\t\t<description> true, if successful; false, if failed </description>\n-\t</param>\n-\n-    <param name=\"resultCode\" type=\"Result\" platform=\"documentation\">\n-      <description>See Result</description>\n-      <element name=\"SUCCESS\"/>\n-      <element name=\"INVALID_DATA\"/>\n-      <element name=\"OUT_OF_MEMORY\"/>\n-      <element name=\"TOO_MANY_PENDING_REQUESTS\"/>\n-      <element name=\"APPLICATION_NOT_REGISTERED\"/>\n-      <element name=\"GENERIC_ERROR\"/>\n-      <element name=\"REJECTED\"/>\n-      <element name=\"VEHICLE_DATA_NOT_AVAILABLE\"/>\n-      <element name=\"USER_DISALLOWED\"/>\n-    </param>\n+* As you see, there are 3 sub items, “ambientLightSensorStatus”, “highBeamsOn” and “lowBeamsOn”. Each of these individual data types and references\n+* You many notice that “ambientLightSensorStatus” has data type as “AmbientLightStatus”. This enumeration is read from existing Mobile API.\n+  * This can be extrapolated to all existing data types. For new data types enumerations, we’d still either need to add to Mobile API or create a new structure for vehicle data enumerations.\n+\n+### Next example touches on a *new* OEM specific vehicle data item, _engineState_\n+\n+Sample value for map:\n+```json\n+{\n+\t\"id\":\"engineState\",\n+\t\"dataType\":\"Struct\",\n+\t\"reference\":\"OEM_REF_STRUCT\",\n+\t\"engineCoolantTemp\" : {\n+\t\t\"dataType\":\"Integer\",\n+\t\t\"reference\":\"OEM_REF_ENG_COOL_TEMP\",\n+\t\t\"array\":false,\n+\t\t\"mandatory\":false\n+\t},\n+\t\"engineO2Sat\":{\n+\t\t\"dataType\":\"Float\",\n+\t\t\"reference\":\"OEM_REF_ENG_O2_SAT\",\t\t\t\t\n+\t\t\"mandatory\":false\n+\t},\n+\t\"engineState\":{\n+\t\t\"dataType\":\"String\",\n+\t\t\"reference\":\"OEM_REF_ENG_STATE\"\n+\t},\n+\t\"engineServiceRequired\":{\n+\t\t\"dataType\":\"Boolean\",\n+\t\t\"reference\":\"OEM_REF_ENG_SER_REQ\",\n+\t\t\"array\":false,\n+\t\t\"mandatory\":false\n+\t}\n+}\n+```\n+Sample response from module:\n+```json\n+{\n+\t\"engineState\": {\n+\t\t\"engineCoolantTemp\":140,\n+\t\t\"engineO2Sat\":95.5,\n+\t\t\"engineState\":\"NORMAL\",\n+\t\t\"engineServiceRequired\":false\n+\t}\n+}\n+```\n+#### engineState would ideally be an enum if it was a Standardized data type. But since this it OEM example of vehicle data on the fly, we can use String data type.\n+\n+* _engineState_ would need to be added to both SDL core and proxy schema. Once new schema is downloaded by both core and proxy, an app may request _engineState_ vehicle data item.","path":"proposals/0173-Read-Generic-Network-Signal-data.md","position":475,"original_position":475,"commit_id":"a33ca421b13cc7b46e7521ffdb15c760687baaad","original_commit_id":"a33ca421b13cc7b46e7521ffdb15c760687baaad","user":{"login":"jordynmackool","id":42153846,"node_id":"MDQ6VXNlcjQyMTUzODQ2","avatar_url":"https://avatars1.githubusercontent.com/u/42153846?v=4","gravatar_id":"","url":"https://api.github.com/users/jordynmackool","html_url":"https://github.com/jordynmackool","followers_url":"https://api.github.com/users/jordynmackool/followers","following_url":"https://api.github.com/users/jordynmackool/following{/other_user}","gists_url":"https://api.github.com/users/jordynmackool/gists{/gist_id}","starred_url":"https://api.github.com/users/jordynmackool/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jordynmackool/subscriptions","organizations_url":"https://api.github.com/users/jordynmackool/orgs","repos_url":"https://api.github.com/users/jordynmackool/repos","events_url":"https://api.github.com/users/jordynmackool/events{/privacy}","received_events_url":"https://api.github.com/users/jordynmackool/received_events","type":"User","site_admin":false},"body":"Change to: \r\n_engineState_ would need to be added to both SDL core and proxy schema. Once **the** new schema is downloaded by both core and proxy, an app may request _engineState_ vehicle data item.","created_at":"2018-12-14T16:29:15Z","updated_at":"2018-12-14T16:52:41Z","html_url":"https://github.com/smartdevicelink/sdl_evolution/pull/646#discussion_r241812848","pull_request_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/646","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/comments/241812848"},"html":{"href":"https://github.com/smartdevicelink/sdl_evolution/pull/646#discussion_r241812848"},"pull_request":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/646"}}},"pull_request":{"url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/646","id":238494240,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM4NDk0MjQw","html_url":"https://github.com/smartdevicelink/sdl_evolution/pull/646","diff_url":"https://github.com/smartdevicelink/sdl_evolution/pull/646.diff","patch_url":"https://github.com/smartdevicelink/sdl_evolution/pull/646.patch","issue_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues/646","number":646,"state":"open","locked":false,"title":"0173-Read-Generic-Network-Signal-data.md","user":{"login":"atiwari9","id":18143556,"node_id":"MDQ6VXNlcjE4MTQzNTU2","avatar_url":"https://avatars3.githubusercontent.com/u/18143556?v=4","gravatar_id":"","url":"https://api.github.com/users/atiwari9","html_url":"https://github.com/atiwari9","followers_url":"https://api.github.com/users/atiwari9/followers","following_url":"https://api.github.com/users/atiwari9/following{/other_user}","gists_url":"https://api.github.com/users/atiwari9/gists{/gist_id}","starred_url":"https://api.github.com/users/atiwari9/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atiwari9/subscriptions","organizations_url":"https://api.github.com/users/atiwari9/orgs","repos_url":"https://api.github.com/users/atiwari9/repos","events_url":"https://api.github.com/users/atiwari9/events{/privacy}","received_events_url":"https://api.github.com/users/atiwari9/received_events","type":"User","site_admin":false},"body":"To make vehicle data APIs (_GetVehicleData/SubscribeVehicleData/UnsubscribeVehicleData/OnVehicleData_) more flexible to allow addition of new vehicle data items while maintaining the security access via policies.\r\n\r\n**Updated proposal to reflect feedback from Livio as per last meeting on this.**\r\n","created_at":"2018-12-13T18:51:24Z","updated_at":"2018-12-14T16:52:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1b5ac2dfbf4c654ecd79ac7e6d73a97a124a70eb","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/646/commits","review_comments_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/646/comments","review_comment_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/comments{/number}","comments_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues/646/comments","statuses_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/statuses/a33ca421b13cc7b46e7521ffdb15c760687baaad","head":{"label":"atiwari9:patch-5","ref":"patch-5","sha":"a33ca421b13cc7b46e7521ffdb15c760687baaad","user":{"login":"atiwari9","id":18143556,"node_id":"MDQ6VXNlcjE4MTQzNTU2","avatar_url":"https://avatars3.githubusercontent.com/u/18143556?v=4","gravatar_id":"","url":"https://api.github.com/users/atiwari9","html_url":"https://github.com/atiwari9","followers_url":"https://api.github.com/users/atiwari9/followers","following_url":"https://api.github.com/users/atiwari9/following{/other_user}","gists_url":"https://api.github.com/users/atiwari9/gists{/gist_id}","starred_url":"https://api.github.com/users/atiwari9/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atiwari9/subscriptions","organizations_url":"https://api.github.com/users/atiwari9/orgs","repos_url":"https://api.github.com/users/atiwari9/repos","events_url":"https://api.github.com/users/atiwari9/events{/privacy}","received_events_url":"https://api.github.com/users/atiwari9/received_events","type":"User","site_admin":false},"repo":{"id":134888952,"node_id":"MDEwOlJlcG9zaXRvcnkxMzQ4ODg5NTI=","name":"sdl_evolution","full_name":"atiwari9/sdl_evolution","private":false,"owner":{"login":"atiwari9","id":18143556,"node_id":"MDQ6VXNlcjE4MTQzNTU2","avatar_url":"https://avatars3.githubusercontent.com/u/18143556?v=4","gravatar_id":"","url":"https://api.github.com/users/atiwari9","html_url":"https://github.com/atiwari9","followers_url":"https://api.github.com/users/atiwari9/followers","following_url":"https://api.github.com/users/atiwari9/following{/other_user}","gists_url":"https://api.github.com/users/atiwari9/gists{/gist_id}","starred_url":"https://api.github.com/users/atiwari9/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atiwari9/subscriptions","organizations_url":"https://api.github.com/users/atiwari9/orgs","repos_url":"https://api.github.com/users/atiwari9/repos","events_url":"https://api.github.com/users/atiwari9/events{/privacy}","received_events_url":"https://api.github.com/users/atiwari9/received_events","type":"User","site_admin":false},"html_url":"https://github.com/atiwari9/sdl_evolution","description":"Tracking and proposing changes to SDL's public APIs.","fork":true,"url":"https://api.github.com/repos/atiwari9/sdl_evolution","forks_url":"https://api.github.com/repos/atiwari9/sdl_evolution/forks","keys_url":"https://api.github.com/repos/atiwari9/sdl_evolution/keys{/key_id}","collaborators_url":"https://api.github.com/repos/atiwari9/sdl_evolution/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/atiwari9/sdl_evolution/teams","hooks_url":"https://api.github.com/repos/atiwari9/sdl_evolution/hooks","issue_events_url":"https://api.github.com/repos/atiwari9/sdl_evolution/issues/events{/number}","events_url":"https://api.github.com/repos/atiwari9/sdl_evolution/events","assignees_url":"https://api.github.com/repos/atiwari9/sdl_evolution/assignees{/user}","branches_url":"https://api.github.com/repos/atiwari9/sdl_evolution/branches{/branch}","tags_url":"https://api.github.com/repos/atiwari9/sdl_evolution/tags","blobs_url":"https://api.github.com/repos/atiwari9/sdl_evolution/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/atiwari9/sdl_evolution/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/atiwari9/sdl_evolution/git/refs{/sha}","trees_url":"https://api.github.com/repos/atiwari9/sdl_evolution/git/trees{/sha}","statuses_url":"https://api.github.com/repos/atiwari9/sdl_evolution/statuses/{sha}","languages_url":"https://api.github.com/repos/atiwari9/sdl_evolution/languages","stargazers_url":"https://api.github.com/repos/atiwari9/sdl_evolution/stargazers","contributors_url":"https://api.github.com/repos/atiwari9/sdl_evolution/contributors","subscribers_url":"https://api.github.com/repos/atiwari9/sdl_evolution/subscribers","subscription_url":"https://api.github.com/repos/atiwari9/sdl_evolution/subscription","commits_url":"https://api.github.com/repos/atiwari9/sdl_evolution/commits{/sha}","git_commits_url":"https://api.github.com/repos/atiwari9/sdl_evolution/git/commits{/sha}","comments_url":"https://api.github.com/repos/atiwari9/sdl_evolution/comments{/number}","issue_comment_url":"https://api.github.com/repos/atiwari9/sdl_evolution/issues/comments{/number}","contents_url":"https://api.github.com/repos/atiwari9/sdl_evolution/contents/{+path}","compare_url":"https://api.github.com/repos/atiwari9/sdl_evolution/compare/{base}...{head}","merges_url":"https://api.github.com/repos/atiwari9/sdl_evolution/merges","archive_url":"https://api.github.com/repos/atiwari9/sdl_evolution/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/atiwari9/sdl_evolution/downloads","issues_url":"https://api.github.com/repos/atiwari9/sdl_evolution/issues{/number}","pulls_url":"https://api.github.com/repos/atiwari9/sdl_evolution/pulls{/number}","milestones_url":"https://api.github.com/repos/atiwari9/sdl_evolution/milestones{/number}","notifications_url":"https://api.github.com/repos/atiwari9/sdl_evolution/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/atiwari9/sdl_evolution/labels{/name}","releases_url":"https://api.github.com/repos/atiwari9/sdl_evolution/releases{/id}","deployments_url":"https://api.github.com/repos/atiwari9/sdl_evolution/deployments","created_at":"2018-05-25T18:02:00Z","updated_at":"2018-05-25T18:02:03Z","pushed_at":"2018-12-13T18:48:24Z","git_url":"git://github.com/atiwari9/sdl_evolution.git","ssh_url":"git@github.com:atiwari9/sdl_evolution.git","clone_url":"https://github.com/atiwari9/sdl_evolution.git","svn_url":"https://github.com/atiwari9/sdl_evolution","homepage":"https://smartdevicelink.github.io/sdl_evolution/","size":10577,"stargazers_count":0,"watchers_count":0,"language":"XSLT","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"smartdevicelink:master","ref":"master","sha":"026819fad418fdd9258e613c9fa97bbf956f2089","user":{"login":"smartdevicelink","id":8671397,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg2NzEzOTc=","avatar_url":"https://avatars3.githubusercontent.com/u/8671397?v=4","gravatar_id":"","url":"https://api.github.com/users/smartdevicelink","html_url":"https://github.com/smartdevicelink","followers_url":"https://api.github.com/users/smartdevicelink/followers","following_url":"https://api.github.com/users/smartdevicelink/following{/other_user}","gists_url":"https://api.github.com/users/smartdevicelink/gists{/gist_id}","starred_url":"https://api.github.com/users/smartdevicelink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smartdevicelink/subscriptions","organizations_url":"https://api.github.com/users/smartdevicelink/orgs","repos_url":"https://api.github.com/users/smartdevicelink/repos","events_url":"https://api.github.com/users/smartdevicelink/events{/privacy}","received_events_url":"https://api.github.com/users/smartdevicelink/received_events","type":"Organization","site_admin":false},"repo":{"id":63362559,"node_id":"MDEwOlJlcG9zaXRvcnk2MzM2MjU1OQ==","name":"sdl_evolution","full_name":"smartdevicelink/sdl_evolution","private":false,"owner":{"login":"smartdevicelink","id":8671397,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg2NzEzOTc=","avatar_url":"https://avatars3.githubusercontent.com/u/8671397?v=4","gravatar_id":"","url":"https://api.github.com/users/smartdevicelink","html_url":"https://github.com/smartdevicelink","followers_url":"https://api.github.com/users/smartdevicelink/followers","following_url":"https://api.github.com/users/smartdevicelink/following{/other_user}","gists_url":"https://api.github.com/users/smartdevicelink/gists{/gist_id}","starred_url":"https://api.github.com/users/smartdevicelink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smartdevicelink/subscriptions","organizations_url":"https://api.github.com/users/smartdevicelink/orgs","repos_url":"https://api.github.com/users/smartdevicelink/repos","events_url":"https://api.github.com/users/smartdevicelink/events{/privacy}","received_events_url":"https://api.github.com/users/smartdevicelink/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/smartdevicelink/sdl_evolution","description":"Tracking and proposing changes to SDL's public APIs.","fork":false,"url":"https://api.github.com/repos/smartdevicelink/sdl_evolution","forks_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/forks","keys_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/keys{/key_id}","collaborators_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/teams","hooks_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/hooks","issue_events_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues/events{/number}","events_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/events","assignees_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/assignees{/user}","branches_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/branches{/branch}","tags_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/tags","blobs_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/git/refs{/sha}","trees_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/git/trees{/sha}","statuses_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/statuses/{sha}","languages_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/languages","stargazers_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/stargazers","contributors_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/contributors","subscribers_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/subscribers","subscription_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/subscription","commits_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/commits{/sha}","git_commits_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/git/commits{/sha}","comments_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/comments{/number}","issue_comment_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues/comments{/number}","contents_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/contents/{+path}","compare_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/compare/{base}...{head}","merges_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/merges","archive_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/downloads","issues_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues{/number}","pulls_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls{/number}","milestones_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/milestones{/number}","notifications_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/labels{/name}","releases_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/releases{/id}","deployments_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/deployments","created_at":"2016-07-14T19:08:19Z","updated_at":"2018-12-12T20:38:40Z","pushed_at":"2018-12-14T16:39:59Z","git_url":"git://github.com/smartdevicelink/sdl_evolution.git","ssh_url":"git@github.com:smartdevicelink/sdl_evolution.git","clone_url":"https://github.com/smartdevicelink/sdl_evolution.git","svn_url":"https://github.com/smartdevicelink/sdl_evolution","homepage":"https://smartdevicelink.github.io/sdl_evolution/","size":10726,"stargazers_count":24,"watchers_count":24,"language":"XSLT","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":85,"mirror_url":null,"archived":false,"open_issues_count":22,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":85,"open_issues":22,"watchers":24,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/646"},"html":{"href":"https://github.com/smartdevicelink/sdl_evolution/pull/646"},"issue":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues/646"},"comments":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues/646/comments"},"review_comments":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/646/comments"},"review_comment":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/646/commits"},"statuses":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/statuses/a33ca421b13cc7b46e7521ffdb15c760687baaad"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"jordynmackool"}}