Exemple #1
0
static void reattach(void)
{
	usb_dev_handle *ir;

	ir = get_ir();
	if (ir) {
		usb_release_interface(ir, 0);
		/* attach fails if we still have the file
		   descriptor open */
		usb_close(ir);
		usb_attach_kernel_driver_np(ir, 0, "usbhid");
	}
}
Exemple #2
0
int main(int argc, char **argv)
{
	struct ftdi_context ftdic;
	int force_status = -1;
	int ret;

	if (argc == 2) {
		if (strcmp(argv[1], "on") == 0)
			force_status = 1;
		else if (strcmp(argv[1], "off") == 0)
			force_status = 0;
		else
			usage();
	}

	ret = ftdi_init(&ftdic);
	if (ret < 0) {
		fprintf(stderr, "ftdi_init failed\n");
		return EXIT_FAILURE;
	}

	ret = ftdi_usb_open(&ftdic, 0x0403, 0x6015);
	if (ret < 0) {
		fprintf(stderr, "Can't open ftdi device\n");
		return EXIT_FAILURE;
	}

	ret = ftdi_set_bitmode(&ftdic, CBUS_3_OUT_HIGH, BITMODE_CBUS);
	if (ret < 0) {
		fprintf(stderr, "unable to set low: %s\n",
			ftdi_get_error_string(&ftdic));
		return EXIT_FAILURE;
	}

	ret = modem_is_on(&ftdic);
	if (ret < 0) {
		fprintf(stderr, "unable to read modem status: %s\n",
			ftdi_get_error_string(&ftdic));
		return EXIT_FAILURE;
	}

	if ((force_status >= 0) && (force_status ^ ret)) {
		/* Force status changing! */
		ret = ftdi_set_bitmode(&ftdic, CBUS_3_OUT_LOW, BITMODE_CBUS);
		if (ret < 0) {
			fprintf(stderr, "unable to set low: %s\n",
				ftdi_get_error_string(&ftdic));
			return EXIT_FAILURE;
		}

		usleep(2000000);	/* 2s */
	
		ret = ftdi_set_bitmode(&ftdic, CBUS_3_OUT_HIGH, BITMODE_CBUS);
		if (ret < 0) {
			fprintf(stderr, "unable to set high: %s\n",
				ftdi_get_error_string(&ftdic));
			return EXIT_FAILURE;
		}
	
		usleep(2000000);	/* 2s */
	
		ret = modem_is_on(&ftdic);
		if (ret < 0) {
			fprintf(stderr, "unable to read modem status: %s\n",
				ftdi_get_error_string(&ftdic));
			return EXIT_FAILURE;
		}
	}
	printf("modem is %s\n", ret ? "on" : "off");

#ifdef LIBFTDI_LINUX_ASYNC_MODE
	/* try to release some kernel resources */
	ftdi_async_complete(ftdi, 1);
#endif

	ret = usb_release_interface(ftdic.usb_dev, ftdic.interface);
	if (ret < 0) {
		fprintf(stderr, "unable to release interface (%s)\n",
			strerror(errno));
		return EXIT_FAILURE;
	}

	ret = usb_attach_kernel_driver_np(ftdic.usb_dev, ftdic.interface);
	if (ret < 0) {
		fprintf(stderr, "unable to reattach the driver (%s)\n",
			strerror(errno));
		return EXIT_FAILURE;
	}

	ftdi_usb_close(&ftdic);
	ftdi_deinit(&ftdic);

	return 0;
}