60935f7ae78737111dbe159bc0d4203e50a8bde4
[scm/bb/tizen-distro.git] / meta-tizen / meta-tizen-adaptation-oe-core / recipes-connectivity / neard / neard / 0001-ndef-Support-RAW-ndef-writes.patch
1 From 947a28f4000b4638316f30f88f124d87fbdda218 Mon Sep 17 00:00:00 2001
2 From: Samuel Ortiz <sameo@linux.intel.com>
3 Date: Thu, 25 Oct 2012 18:58:06 +0200
4 Subject: [PATCH 1/5] ndef: Support RAW ndef writes
5
6 Change-Id: I21a341b2482556458e381b4a3033ef3e9313194c
7 ---
8  doc/tag-api.txt |  2 ++
9  src/ndef.c      | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
10  test/test-tag   | 13 ++++++++++++
11  3 files changed, 76 insertions(+)
12
13 diff --git a/doc/tag-api.txt b/doc/tag-api.txt
14 index 303438b..768c75f 100644
15 --- a/doc/tag-api.txt
16 +++ b/doc/tag-api.txt
17 @@ -13,6 +13,8 @@ Method                void Write(dict attributes)
18                         record type and is described by the Record properties.
19                         For example, one would add a type, a Language, an
20                         Encoding and a Representation for a text record.
21 +                       To push raw NDEF, one should use the NDEF key and use
22 +                       an array of bytes for the NDEF stream.
23  
24                         Possible Errors: org.neard.Error.PermissionDenied
25                                          org.neard.Error.InvalidArguments
26 diff --git a/src/ndef.c b/src/ndef.c
27 index e8f950e..4427f08 100644
28 --- a/src/ndef.c
29 +++ b/src/ndef.c
30 @@ -3618,6 +3618,64 @@ static struct near_ndef_message *build_mime_record(DBusMessage *msg)
31         return NULL;
32  }
33  
34 +static struct near_ndef_message * build_raw_ndef(DBusMessage *msg)
35 +{
36 +       DBusMessageIter iter, arr_iter;
37 +       struct near_ndef_message *ndef;
38 +
39 +       DBG("");
40 +
41 +       ndef = NULL;
42 +
43 +       dbus_message_iter_init(msg, &iter);
44 +       dbus_message_iter_recurse(&iter, &arr_iter);
45 +
46 +       while (dbus_message_iter_get_arg_type(&arr_iter) !=
47 +                                       DBUS_TYPE_INVALID) {
48 +               const char *key;
49 +               DBusMessageIter ent_iter;
50 +               DBusMessageIter var_iter;
51 +
52 +               dbus_message_iter_recurse(&arr_iter, &ent_iter);
53 +               dbus_message_iter_get_basic(&ent_iter, &key);
54 +               dbus_message_iter_next(&ent_iter);
55 +               dbus_message_iter_recurse(&ent_iter, &var_iter);
56 +
57 +               switch (dbus_message_iter_get_arg_type(&var_iter)) {
58 +               case DBUS_TYPE_ARRAY:
59 +                       if (g_strcmp0(key, "NDEF") == 0) {
60 +                               DBusMessageIter array;
61 +                               uint8_t *data;
62 +                               int data_size;
63 +
64 +                               dbus_message_iter_recurse(&var_iter, &array);
65 +                               dbus_message_iter_get_fixed_array(&array,
66 +                                                               &data,
67 +                                                               &data_size);
68 +
69 +                               ndef = g_try_malloc0(data_size);
70 +                               if (ndef == NULL)
71 +                                       break;
72 +
73 +                               ndef->data = g_try_malloc0(data_size);
74 +                               if (ndef->data == NULL) {
75 +                                       g_free(ndef);
76 +                                       break;
77 +                               }
78 +
79 +                               ndef->length = data_size;
80 +                               memcpy(ndef->data, data, data_size);
81 +                       }
82 +
83 +                       break;
84 +               }
85 +
86 +               dbus_message_iter_next(&arr_iter);
87 +       }
88 +
89 +       return ndef;
90 +}
91 +
92  struct near_ndef_message *__ndef_build_from_message(DBusMessage *msg)
93  {
94         DBusMessageIter iter;
95 @@ -3672,6 +3730,9 @@ struct near_ndef_message *__ndef_build_from_message(DBusMessage *msg)
96                         } else if (g_strcmp0(value, "MIME") == 0) {
97                                 ndef = build_mime_record(msg);
98                                 break;
99 +                       } else if (g_strcmp0(value, "Raw") == 0) {
100 +                               ndef = build_raw_ndef(msg);
101 +                               break;
102                         } else {
103                                 near_error("%s not supported", value);
104                                 ndef = NULL;
105 diff --git a/test/test-tag b/test/test-tag
106 index 3d2c226..935ab6f 100755
107 --- a/test/test-tag
108 +++ b/test/test-tag
109 @@ -28,6 +28,7 @@ def usage():
110         print "            Type is MIME, parameters are wifi_wsc <ssid> <passphrase>"
111         print "         If type is MIME, and WiFi AP is open network"
112         print "            Type is MIME, parameters are wifi_wsc <ssid>"
113 +       print "         If type is RAW, parameters are Raw <NDEF_file>"
114         print "e.g. < %s /org/neard/nfc0/tag0 Text UTF-8 en-US hello,NFC! >" % (sys.argv[0])
115         print "e.g. < %s /org/neard/nfc0/tag0 URI http://www.nfc-forum.com >" % (sys.argv[0])
116         print "e.g. < %s /org/neard/nfc0/tag0 SmartPoster http://www.nfc-forum.com >" % (sys.argv[0])
117 @@ -35,6 +36,7 @@ def usage():
118         print "e.g. < %s /org/neard/nfc0/tag0 E-Mail test@test.com >" % (sys.argv[0])
119         print "e.g. < %s /org/neard/nfc0/tag0 MIME wifi_wsc YourAPname passphrase >" % (sys.argv[0])
120         print "e.g. < %s /org/neard/nfc0/tag0 MIME wifi_wsc YourAPname >" % (sys.argv[0])
121 +       print "e.g. < %s /org/neard/nfc0/tag0 Raw <NDEF_file> >" % (sys.argv[0])
122  
123  
124         sys.exit(1)
125 @@ -129,6 +131,17 @@ if (sys.argv[1] == "write"):
126                                 "MIME" : "application/vnd.wfa.wsc",
127                                 "SSID" : sys.argv[5],
128                                 "Passphrase" : sys.argv[6] }))
129 +
130 +       elif sys.argv[3] in ["Raw"]:
131 +               ndef = file(sys.argv[4]).read().rsplit(' ')
132 +               ndef_stream = bytearray()
133 +
134 +               for b in ndef:
135 +                       ndef_stream.append(int(b, 16))
136 +
137 +               tag.Write(({ "Type" : "Raw",
138 +                               "NDEF" : dbus.ByteArray(ndef_stream) }))
139 +
140         else:
141                 usage()
142  
143 -- 
144 1.8.1.4
145