Source: deviceinfo.js

/*
 * Copyright (c) 2013-2015 LG Electronics
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
*/

/**
 * @namespace webOS.deviceInfo
 */

/**
  * @callback webOS~deviceCallback
  * @param {object} info - JSON object containing the device information details
  * @param {string} info.modelName Model name of device in UTF-8 format
  * @param {string} info.modelNameAscii Model name of device in ASCII format
  * @param {string} info.version Full OS firmware version string
  * @param {number} info.versionMajor Subset of OS version string: Major version number
  * @param {number} info.versionMinor Subset of OS version string: Minor version number
  * @param {number} info.versionDot Subset of OS version string: Dot version number
  * @param {string} info.sdkVersion webOS SDK version
  * @param {number} info.screenWidth Width in pixels
  * @param {number} info.screenHeight Height in pixels
  * @param {boolean} [info.uhd] Whether supports Ultra HD resolution.
  */

/**
 * Gets the device-specific information regarding model, OS version, specifications, etc.
 * @param {webOS~deviceCallback} callback - The function to call once the information is collected
 */
webOS.deviceInfo = function(callback) {
	if(!this.device) {
		this.device = {};
		try {
			var deviceInfo = JSON.parse(PalmSystem.deviceInfo);
			this.device.modelName = deviceInfo.modelName;
			this.device.modelNameAscii = deviceInfo.modelNameAscii;
			this.device.version = deviceInfo.platformVersion;
			this.device.versionMajor = deviceInfo.platformVersionMajor;
			this.device.versionMinor = deviceInfo.platformVersionMinor;
			this.device.versionDot = deviceInfo.platformVersionDot;
			this.device.sdkVersion = deviceInfo.platformVersion;
			this.device.screenWidth = deviceInfo.screenWidth;
			this.device.screenHeight = deviceInfo.screenHeight;
		} catch(e) {
			this.device.modelName = this.device.modelNameAscii = "webOS Device";
		}
		this.device.screenHeight = this.device.screenHeight || screen.height;
		this.device.screenWidth = this.device.screenWidth || screen.width;
		var self = this;
		webOS.service.request("luna://com.webos.service.tv.systemproperty", {
			method: "getSystemInfo",
			parameters: { "keys": ["firmwareVersion", "modelName", "sdkVersion", "UHD"] },
			onSuccess: function(response) {
				self.device.modelName = response.modelName || self.device.modelName;
				self.device.modelNameAscii  = response.modelName || self.device.modelNameAscii;
				self.device.sdkVersion  = response.sdkVersion || self.device.sdkVersion;
				self.device.uhd = (response.UHD==='true');
				if(response.firmwareVersion) {
					self.device.version = response.firmwareVersion;
					var segments = self.device.version.split(".");
					var keys = ["versionMajor", "versionMinor", "versionDot"];
					for(var i=0; i<keys.length; i++) {
						try {
							self.device[keys[i]] = parseInt(segments[i]);
						} catch(e) {
							self.device[keys[i]] = segments[i];
						}
					}
				}
				callback(self.device);
			},
			onFailure: function(inError) {
				callback(self.device);
			}
		});
	} else {
		callback(this.device);
	}
};