REQUEST_UNSET_ATTR_INTEREST,
REQUEST_SET_RESOURCE_CONTROL,
REQUEST_GET_VALUE_INT,
+ REQUEST_GET_VALUE_INT64,
+ REQUEST_GET_VALUE_UINT,
+ REQUEST_GET_VALUE_UINT64,
+ REQUEST_GET_VALUE_DOUBLE,
+ REQUEST_GET_VALUE_STRING,
REQUEST_GET_RESOURCE_NUM,
REQUEST_GET_AVAILABLE_ATTRS,
REQUEST_MAX,
}
EXPORT
-int tmonitor_get_value_int(int id, int resource_id, u_int64_t attr_id, int *value)
+int tmonitor_get_value_int(int id, int resource_id, u_int64_t attr_id, int32_t *value)
{
char buffer[MAX_BUF_SIZE + 1];
int buffer_len;
}
EXPORT
+int tmonitor_get_value_int64(int id, int resource_id, u_int64_t attr_id, int64_t *value)
+{
+ char buffer[MAX_BUF_SIZE + 1];
+ int buffer_len;
+ int response_req;
+ int ret;
+
+ buffer_len = sprintf(buffer, "%d:%d:%"PRIu64,
+ REQUEST_GET_VALUE_INT64, resource_id, attr_id);
+ if (send(id, buffer, buffer_len, 0) < 0) {
+ _E("[libpass] error occurred while sending buffer");
+ return -EIO;
+ }
+
+ /* wait for response */
+ buffer_len = recv(id, buffer, MAX_BUF_SIZE, 0);
+ if (buffer_len <= 0) {
+ _E("[libpass] socket disconnected");
+ return -EIO;
+ }
+
+ buffer[buffer_len] = '\0';
+ if (sscanf(buffer, "%d:%"PRId64":%d", &response_req, value, &ret) < 3)
+ return -EINVAL;
+
+ if (response_req != REQUEST_GET_VALUE_INT64) {
+ _E("[libpass] wrong response");
+ return -EINVAL;
+ }
+
+ return ret;
+}
+
+EXPORT
+int tmonitor_get_value_uint(int id, int resource_id, u_int64_t attr_id, u_int32_t *value)
+{
+ char buffer[MAX_BUF_SIZE + 1];
+ int buffer_len;
+ int response_req;
+ int ret;
+
+ buffer_len = sprintf(buffer, "%d:%d:%"PRIu64,
+ REQUEST_GET_VALUE_UINT, resource_id, attr_id);
+ if (send(id, buffer, buffer_len, 0) < 0) {
+ _E("[libpass] error occurred while sending buffer");
+ return -EIO;
+ }
+
+ /* wait for response */
+ buffer_len = recv(id, buffer, MAX_BUF_SIZE, 0);
+ if (buffer_len <= 0) {
+ _E("[libpass] socket disconnected");
+ return -EIO;
+ }
+
+ buffer[buffer_len] = '\0';
+ if (sscanf(buffer, "%d:%d:%d", &response_req, value, &ret) < 3)
+ return -EINVAL;
+
+ if (response_req != REQUEST_GET_VALUE_UINT) {
+ _E("[libpass] wrong response");
+ return -EINVAL;
+ }
+
+ return ret;
+}
+
+EXPORT
+int tmonitor_get_value_uint64(int id, int resource_id, u_int64_t attr_id, u_int64_t *value)
+{
+ char buffer[MAX_BUF_SIZE + 1];
+ int buffer_len;
+ int response_req;
+ int ret;
+
+ buffer_len = sprintf(buffer, "%d:%d:%"PRIu64,
+ REQUEST_GET_VALUE_UINT64, resource_id, attr_id);
+ if (send(id, buffer, buffer_len, 0) < 0) {
+ _E("[libpass] error occurred while sending buffer");
+ return -EIO;
+ }
+
+ /* wait for response */
+ buffer_len = recv(id, buffer, MAX_BUF_SIZE, 0);
+ if (buffer_len <= 0) {
+ _E("[libpass] socket disconnected");
+ return -EIO;
+ }
+
+ buffer[buffer_len] = '\0';
+ if (sscanf(buffer, "%d:%"PRIu64":%d", &response_req, value, &ret) < 3)
+ return -EINVAL;
+
+ if (response_req != REQUEST_GET_VALUE_UINT64) {
+ _E("[libpass] wrong response");
+ return -EINVAL;
+ }
+
+ return ret;
+}
+
+EXPORT
+int tmonitor_get_value_double(int id, int resource_id, u_int64_t attr_id, double *value)
+{
+ char buffer[MAX_BUF_SIZE + 1];
+ int buffer_len;
+ int response_req;
+ int ret;
+
+ buffer_len = sprintf(buffer, "%d:%d:%"PRIu64,
+ REQUEST_GET_VALUE_DOUBLE, resource_id, attr_id);
+ if (send(id, buffer, buffer_len, 0) < 0) {
+ _E("[libpass] error occurred while sending buffer");
+ return -EIO;
+ }
+
+ /* wait for response */
+ buffer_len = recv(id, buffer, MAX_BUF_SIZE, 0);
+ if (buffer_len <= 0) {
+ _E("[libpass] socket disconnected");
+ return -EIO;
+ }
+
+ buffer[buffer_len] = '\0';
+ if (sscanf(buffer, "%d:%lf:%d", &response_req, value, &ret) < 3)
+ return -EINVAL;
+
+ if (response_req != REQUEST_GET_VALUE_DOUBLE) {
+ _E("[libpass] wrong response");
+ return -EINVAL;
+ }
+
+ return ret;
+}
+
+EXPORT
+int tmonitor_get_value_string(int id, int resource_id, u_int64_t attr_id, char *value)
+{
+ char buffer[MAX_BUF_SIZE + 1];
+ int buffer_len;
+ int response_req;
+ int ret;
+
+ buffer_len = sprintf(buffer, "%d:%d:%"PRIu64,
+ REQUEST_GET_VALUE_STRING, resource_id, attr_id);
+ if (send(id, buffer, buffer_len, 0) < 0) {
+ _E("[libpass] error occurred while sending buffer");
+ return -EIO;
+ }
+
+ /* wait for response */
+ buffer_len = recv(id, buffer, MAX_BUF_SIZE, 0);
+ if (buffer_len <= 0) {
+ _E("[libpass] socket disconnected");
+ return -EIO;
+ }
+
+ buffer[buffer_len] = '\0';
+ if (sscanf(buffer, "%d:%[^:]:%d", &response_req, value, &ret) < 3)
+ return -EINVAL;
+
+ if (response_req != REQUEST_GET_VALUE_STRING) {
+ _E("[libpass] wrong response");
+ return -EINVAL;
+ }
+
+ return ret;
+}
+
+
+EXPORT
int tmonitor_get_resource_num(int id, int resource_type)
{
return 0;
int tmonitor_update_resource(int id, int resource_id);
/**
- * @brief Get integer value of resource attribute
+ * @brief Get [int/int64/uint/uint64/double/string] value of resource attribute
* @param[in] Unique id of tizen monitor
* @param[in] Unique id of resource
* @param[in] Resoruce attribute id
* @param[out] Value retrieved from resource attribute
* @return @ 0 on success, otherwise a negative error value
*/
-int tmonitor_get_value_int(int id, int resource_id, u_int64_t attr, int *value);
+int tmonitor_get_value_int(int id, int resource_id, u_int64_t attr, int32_t *value);
+int tmonitor_get_value_int64(int id, int resource_id, u_int64_t attr, int64_t *value);
+int tmonitor_get_value_uint(int id, int resource_id, u_int64_t attr, u_int32_t *value);
+int tmonitor_get_value_uint64(int id, int resource_id, u_int64_t attr, u_int64_t *value);
+int tmonitor_get_value_double(int id, int resource_id, u_int64_t attr, double *value);
+int tmonitor_get_value_string(int id, int resource_id, u_int64_t attr, char *value);
/**
* @brief Get the supported resource number
return get_resource_attr_int(res, attr_id, value);
}
+static int handle_request_get_value_int64(struct request_client *client, char *args, int64_t *value)
+{
+ struct resource *res;
+ int resource_id;
+ u_int64_t attr_id;
+
+ if (!client || !args)
+ return -ENOENT;
+
+ /**
+ * Format of REQUEST_GET_VALUE_INT64 args:
+ * - <RESOURCE_ID:ATTR_ID>
+ */
+ if (sscanf(args, "%d:%"PRIu64, &resource_id, &attr_id) < 2)
+ return -EINVAL;
+
+ res = get_resource_by_id(client, resource_id);
+ if (!res)
+ return -EINVAL;
+
+ return get_resource_attr_int64(res, attr_id, value);
+}
+
+static int
+handle_request_get_value_uint(struct request_client *client, char *args, u_int32_t *value)
+{
+ struct resource *res;
+ int resource_id;
+ u_int64_t attr_id;
+
+ if (!client || !args)
+ return -ENOENT;
+
+ /**
+ * Format of REQUEST_GET_VALUE_UINT args:
+ * - <RESOURCE_ID:ATTR_ID>
+ */
+ if (sscanf(args, "%d:%"PRIu64, &resource_id, &attr_id) < 2)
+ return -EINVAL;
+
+ res = get_resource_by_id(client, resource_id);
+ if (!res)
+ return -EINVAL;
+
+ return get_resource_attr_uint(res, attr_id, value);
+}
+
+static int
+handle_request_get_value_uint64(struct request_client *client, char *args, u_int64_t *value)
+{
+ struct resource *res;
+ int resource_id;
+ u_int64_t attr_id;
+
+ if (!client || !args)
+ return -ENOENT;
+
+ /**
+ * Format of REQUEST_GET_VALUE_UINT64 args:
+ * - <RESOURCE_ID:ATTR_ID>
+ */
+ if (sscanf(args, "%d:%"PRIu64, &resource_id, &attr_id) < 2)
+ return -EINVAL;
+
+ res = get_resource_by_id(client, resource_id);
+ if (!res)
+ return -EINVAL;
+
+ return get_resource_attr_uint64(res, attr_id, value);
+}
+
+static int handle_request_get_value_double(struct request_client *client, char *args, double *value)
+{
+ struct resource *res;
+ int resource_id;
+ u_int64_t attr_id;
+
+ if (!client || !args)
+ return -ENOENT;
+
+ /**
+ * Format of REQUEST_GET_VALUE_DOUBLE args:
+ * - <RESOURCE_ID:ATTR_ID>
+ */
+ if (sscanf(args, "%d:%"PRIu64, &resource_id, &attr_id) < 2)
+ return -EINVAL;
+
+ res = get_resource_by_id(client, resource_id);
+ if (!res)
+ return -EINVAL;
+
+ return get_resource_attr_double(res, attr_id, value);
+}
+
+static int handle_request_get_value_string(struct request_client *client, char *args, char *value)
+{
+ struct resource *res;
+ int resource_id;
+ u_int64_t attr_id;
+
+ if (!client || !args)
+ return -ENOENT;
+
+ /**
+ * Format of REQUEST_GET_VALUE_INT args:
+ * - <RESOURCE_ID:ATTR_ID>
+ */
+ if (sscanf(args, "%d:%"PRIu64, &resource_id, &attr_id) < 2)
+ return -EINVAL;
+
+ res = get_resource_by_id(client, resource_id);
+ if (!res)
+ return -EINVAL;
+
+ return get_resource_attr_string(res, attr_id, value);
+}
+
static int split_request_type_and_args(char *buffer, char **args)
{
char *request_type_str;
buffer_len -= len;
}
break;
+ case REQUEST_GET_VALUE_INT64:
+ {
+ int64_t value;
+
+ ret = handle_request_get_value_int64(client, args, &value);
+ if (ret < 0)
+ _D("failed to get value");
+
+ len = snprintf(response, buffer_len, "%"PRId64":", value);
+ response += len;
+ buffer_len -= len;
+ }
+ break;
+ case REQUEST_GET_VALUE_UINT:
+ {
+ u_int32_t value;
+
+ ret = handle_request_get_value_uint(client, args, &value);
+ if (ret < 0)
+ _D("failed to get value");
+
+ len = snprintf(response, buffer_len, "%u:", value);
+ response += len;
+ buffer_len -= len;
+ }
+ break;
+ case REQUEST_GET_VALUE_UINT64:
+ {
+ u_int64_t value;
+
+ ret = handle_request_get_value_uint64(client, args, &value);
+ if (ret < 0)
+ _D("failed to get value");
+
+ len = snprintf(response, buffer_len, "%"PRIu64":", value);
+ response += len;
+ buffer_len -= len;
+ }
+ break;
+ case REQUEST_GET_VALUE_DOUBLE:
+ {
+ double value;
+
+ ret = handle_request_get_value_double(client, args, &value);
+ if (ret < 0)
+ _D("failed to get value");
+
+ len = snprintf(response, buffer_len, "%lf:", value);
+ response += len;
+ buffer_len -= len;
+ }
+ break;
+ case REQUEST_GET_VALUE_STRING:
+ {
+ char value[BUFF_MAX];
+
+ ret = handle_request_get_value_string(client, args, value);
+ if (ret < 0)
+ _D("failed to get value");
+
+ len = snprintf(response, buffer_len, "%s:", value);
+ response += len;
+ buffer_len -= len;
+ }
+ break;
default:
_E("Invliad request type: %d", request_type);
ret = -EINVAL;