static DBusMessage *activate_service(DBusConnection *conn, DBusMessage *msg, void *data) { DBusMessage *reply; const char *pattern; struct service *service; const char *busname = "org.bluez"; if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &pattern, DBUS_TYPE_INVALID)) return invalid_args(msg); service = search_service(pattern); if (!service) return no_such_service(msg); reply = dbus_message_new_method_return(msg); if (!reply) return NULL; dbus_message_append_args(reply, DBUS_TYPE_STRING, &busname, DBUS_TYPE_INVALID); return reply; }
static int pack_block_info(int n, felica_block_info *info, int *service_num, uint8 *services, uint8 *data) { int i, len, snum, s, slist[16] = {0}; uint8 *blklist; snum = 0; len = 0; blklist = data; for (i = 0; i < n; i++) { if (len >= DATASIZE) return -1; s = search_service(snum, slist, info[i].service); if (s < 0) { if (snum >= (int) (sizeof(slist)/sizeof(*slist))) { return -1; } slist[snum] = info[i].service; services[snum * 2] = L8(info[i].service); services[snum *2 + 1] = H8(info[i].service); s = snum; snum++; } blklist[0] = ((info[i].mode << 4) & 0x07) + (s & 0x0f); if (info[i].block > 255) { blklist[1] = L8(info[i].block); blklist[2] = H8(info[i].block); blklist += 3; len += 3; } else { blklist[0] |= 0x80; /* element size == 2 */ blklist[1] = info[i].block; blklist += 2; len += 2; } } *service_num = snum; return len; }