Пример #1
0
static void cb_parse_object(struct libusb_transfer *transfer)
{
	struct aura_node *node = transfer->user_data;
	struct usb_dev_info *inf = aura_get_transportdata(node);
	char is_method;
	char *name, *afmt, *rfmt;

	check_control(transfer);
	name = (char *) libusb_control_transfer_get_data(transfer);

	is_method = *name++;
	afmt = next(name);
	rfmt = next(afmt);

	slog(4, SLOG_DEBUG, "usb: got %s %s / '%s' '%s'", 
	     is_method ? "method" : "event",
	     name, afmt, rfmt);

	aura_etable_add(inf->etbl, name, 
			is_method ? afmt : NULL, 
			rfmt);

	if (inf->current_object == inf->num_objects) { 
		slog(4, SLOG_DEBUG, "etable becomes active");
		aura_etable_activate(inf->etbl);
		aura_set_status(node, AURA_STATUS_ONLINE);
		inf->state = AUSB_DEVICE_OPERATIONAL;
		itransfer_enable(node, true);
		return;
	}

	slog(4, SLOG_DEBUG, "Requesting info about obj %d", inf->current_object);
	/* Resubmit the transfer for the next round */
	request_object(node, inf->current_object++);
}
Пример #2
0
static int l_etable_add(lua_State *L)
{
	struct aura_export_table *tbl;
	const char *name, *arg, *ret;

	TRACE();
	aura_check_args(L, 4);

	if (!lua_islightuserdata(L, 1))
		aura_typeerror(L, 1, "ludata");
	if (!lua_isstring(L, 2))
		aura_typeerror(L, 1, "string");
	if (!lua_isstring(L, 3))
		aura_typeerror(L, 1, "string");
	if (!lua_isstring(L, 4))
		aura_typeerror(L, 1, "string");

	tbl = lua_touserdata(L, 1);
	name = lua_tostring(L, 2);
	arg = lua_tostring(L, 3);
	ret = lua_tostring(L, 4);

	aura_etable_add(tbl, name, arg, ret);
	return 0;
}
Пример #3
0
static int gpio_open(struct aura_node *node, const char *opts)
{
	slog(0, SLOG_INFO, "Opening sysfs/gpio transport");
	struct aura_export_table *etbl = aura_etable_create(node, 16);
	if (!etbl)
		BUG(node, "Failed to create etable");
	aura_etable_add(etbl, "write", "33", "");
	aura_etable_add(etbl, "read", "3", "3");
	aura_etable_add(etbl, "out", "3", "");
	aura_etable_add(etbl, "in", "3", "");
	aura_etable_add(etbl, "export", "3", "3");
	aura_etable_add(etbl, "watch", "3", "");
	//Change notification
	aura_etable_add(etbl, "gpio_changed", NULL, "333");
	aura_etable_activate(etbl);
	aura_set_status(node, AURA_STATUS_ONLINE);
	slog(0, SLOG_INFO, "Opened sysfs/gpio transport");
	return 0;
}