Example #1
0
static void adapter_property_change(GDBusProxy *proxy, const char *name,
		DBusMessageIter *iter, void *user_data)
{
	struct connman_device *device;
	const char *path;
	bool adapter_powered, device_powered;

	if (strcmp(name, "Powered") != 0)
		return;

	path = g_dbus_proxy_get_path(proxy);
	device = g_hash_table_lookup(devices, path);

	adapter_powered = proxy_get_bool(proxy, "Powered");
	device_powered = connman_device_get_powered(device);

	DBG("device %p %s device powered %d adapter powered %d", device, path,
			device_powered, adapter_powered);

	if (device_powered != adapter_powered) {
		if (adapter_powered)
			enable_device(device, path);
		else
			disable_device(device, path);
	}
}
Example #2
0
File: ps2.c Project: sjrct/Frosk
// device should be disabled
static void detect_device(uint port, uchar enable, uchar test, uchar mask)
{
	ps2_device * ps2d;
	uchar check = 0;
	ushort type = 0;

	if (get_config() & mask) {
		outb(PS2_CMND, enable);

		if (!(get_config() & mask)) {
			outb(PS2_CMND, test);
			do_assert(wait_read());

			if (!inb(PS2_DATA)) {
				ps2_command(port, 0xFF, &check, 1);

				if (check == 0xAA) {
					ps2_command(port, 0xF5, NULL, 0);
					ps2_command(port, 0xF2, (uchar *)(&type), 2);

					if (type == PS2_NO_DEVICE) {
						type = PS2_KB_NORMAL;
					}

					if (type == PS2_KB_NORMAL || type == PS2_KB_MF2) {
						ps2_devs[port] = create_stream(
								sizeof(unsigned),
								ps2_kb_enable,
								ps2_kb_disable,
								ps2_kb_read,
								NULL
						);

						ps2d = kalloc(sizeof(ps2_device));
						ps2d->type = type;
						ps2d->port = port;
						ps2_devs[port]->data = ps2d;

						reg_dev(DEVICE_INPUT, ps2_devs[port]->hndl);
						enable_device(ps2_devs[port]);
					} else {
						ps2_devs[port] = NULL; //TODO: implement
					}

					kprintf("PS/2 Device %x detected.\n", type);
				}
			} else {
				outb(PS2_CMND, enable - 1);
			}
		}
	}
}
Example #3
0
/*capture()
 *
 * 完成视频采集的函数,采集到的数据以祯的形式,存放到video_cap指定的
 * 数据结构中相应的域buffer(缓冲区),以供调用者进一步处理祯数据。
 *
 * video_cap 这个结构既有格式信息,又会报存采集到的每一祯的视频信息
 */
int capture(struct vd_capture *vd_cap)
{
    int rval=0, capturedsize=0;
    if (!vd_cap->streaming)
        if (enable_device(vd_cap)) goto errcap;

    memset(&vd_cap->buf, 0, sizeof(struct v4l2_buffer));
    vd_cap->buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    vd_cap->buf.memory = V4L2_MEMORY_MMAP;
    rval = ioctl(vd_cap->fd, VIDIOC_DQBUF, &vd_cap->buf);
    if (rval < 0) {
        printf("error when dequeue the buffer: %d \n", errno);
        goto errcap;
    }
    //开始采集视频数据
    capturedsize=vd_cap->buf.bytesused;
    if (capturedsize > vd_cap->framesize) capturedsize=vd_cap->framesize;
    switch (vd_cap->format) {
    case V4L2_PIX_FMT_MJPEG:
        if (vd_cap->buf.bytesused<0xaf) return 0;
        //memcpy(vd_cap->framebuffer, vd_cap->mem[vd_cap->buf.index], (size_t) vd_cap->buf.bytesused);
        /*if(jpeg_decode(&vd_cap->decbuffer, vd_cap->tmpbuffer, &vd_cap->width, &vd_cap->height)<0) {
        	printf("Error when decode the jpeg pic\n");
        	goto errcap;
        }
        yuv422to420p(vd_cap->decbuffer, vd_cap->framebuffer, vd_cap->width, vd_cap->height);*/
        //break;
    case V4L2_PIX_FMT_YUYV:
        if (vd_cap->buf.bytesused > vd_cap->framesize)
            memcpy(vd_cap->framebuffer, vd_cap->mem[vd_cap->buf.index], (size_t) vd_cap->framesize);
        else memcpy(vd_cap->framebuffer, vd_cap->mem[vd_cap->buf.index], (size_t)vd_cap->buf.bytesused);
        break;
    default:
        goto errcap;
        break;
    };
    rval = ioctl(vd_cap->fd, VIDIOC_QBUF, &vd_cap->buf);
    if (rval < 0) {
        printf("error when requeue the buffer: %d \n", errno);
        goto errcap;
    }
    return capturedsize;
errcap:
    vd_cap->quit=0;
    return -1;
}
Example #4
0
static void device_enable_cb(const DBusError *error, void *user_data)
{
	char *path = user_data;
	struct connman_device *device;

	device = g_hash_table_lookup(devices, path);
	if (!device) {
		DBG("device already removed");
		goto out;
	}

	if (dbus_error_is_set(error)) {
		connman_warn("Bluetooth device %s not enabled %s",
				path, error->message);
		goto out;
	}

	enable_device(device, path);
out:
	g_free(path);
}
Example #5
0
void HardwareCAN::begin(CANFrequency frequency, uint32 options, uint32 mode) {
    options |= CAN_TX_FIFO;
    mode |= CAN_MODE_LOOPBACK | CAN_MODE_SILENT;
    uint32 ier_options = 0;
    enable_device(this->can_d, frequency, options, ier_options, mode);
}