misc: IPC_MISC_ME_VERSION request data and new helpers
authorPaul Kocialkowski <contact@paulk.fr>
Thu, 3 Jul 2014 22:06:44 +0000 (00:06 +0200)
committerPaul Kocialkowski <contact@paulk.fr>
Thu, 3 Jul 2014 22:06:44 +0000 (00:06 +0200)
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
include/misc.h
samsung-ipc/misc.c

index ad1afad..7769f37 100644 (file)
  * Structures
  */
 
-struct ipc_misc_me_version_data {
+struct ipc_misc_me_version_request_data {
+    unsigned char magic;
+} __attribute__((__packed__));
+
+struct ipc_misc_me_version_response_data {
     unsigned char unknown;
     char software_version[32];
     char hardware_version[32];
@@ -59,8 +63,12 @@ struct ipc_misc_me_imsi_header {
     unsigned char length;
 } __attribute__((__packed__));
 
-struct ipc_misc_me_sn_data {
-    unsigned char type; // IPC_MISC_ME_SN_SERIAL_NUM
+struct ipc_misc_me_sn_request_data {
+    unsigned char type; // IPC_MISC_ME_SN_SERIAL
+} __attribute__((__packed__));
+
+struct ipc_misc_me_sn_response_data {
+    unsigned char type; // IPC_MISC_ME_SN_SERIAL
     unsigned char length;
     char data[32];
 } __attribute__((__packed__));
@@ -77,7 +85,9 @@ struct ipc_misc_time_info_data {
  * Helpers
  */
 
+int ipc_misc_me_version_setup(struct ipc_misc_me_version_request_data *data);
 char *ipc_misc_me_imsi_imsi_extract(const void *data, size_t size);
+char *ipc_misc_me_sn_extract(const struct ipc_misc_me_sn_response_data *data);
 
 #endif
 
index b766b3c..f10b9d3 100644 (file)
 
 #include <samsung-ipc.h>
 
+int ipc_misc_me_version_setup(struct ipc_misc_me_version_request_data *data)
+{
+    if (data == NULL)
+        return -1;
+
+    memset(data, 0, sizeof(struct ipc_misc_me_version_request_data));
+    data->magic = 0xff;
+
+    return 0;
+}
+
 char *ipc_misc_me_imsi_imsi_extract(const void *data, size_t size)
 {
     struct ipc_misc_me_imsi_header *header;
@@ -45,4 +56,22 @@ char *ipc_misc_me_imsi_imsi_extract(const void *data, size_t size)
     return imsi;
 }
 
+char *ipc_misc_me_sn_extract(const struct ipc_misc_me_sn_response_data *data)
+{
+    char *string;
+    size_t length;
+
+    if (data == NULL || data->length > sizeof(data->data))
+        return NULL;
+
+    length = data->length + sizeof(char);
+
+    string = (char *) calloc(1, length);
+
+    strncpy(string, (char *) &data->data, data->length);
+    string[data->length] = '\0';
+
+    return string;
+}
+
 // vim:ts=4:sw=4:expandtab