Lines Matching refs:cookie

68 get_elantech_movement(elantech_cookie *cookie, touchpad_movement *_event, bigtime_t timeout)
73 status_t status = acquire_sem_etc(cookie->sem, 1, B_CAN_INTERRUPT | B_RELATIVE_TIMEOUT,
78 if (!cookie->dev->active) {
83 if (packet_buffer_read(cookie->ring_buffer, packet,
84 cookie->dev->packet_size) != cookie->dev->packet_size) {
89 if (cookie->crcEnabled && (packet[3] & 0x08) != 0) {
92 } else if (!cookie->crcEnabled && ((packet[0] & 0x0c) != 0x04
106 cookie->fingers = (packet[4] & 0x80) == 0 ? packet[1] & 0x1f: 0;
108 cookie->fingers, packet[1]);
118 cookie->previousZ = event.zPressure;
120 cookie->x = event.xPosition = ((packet[1] & 0xf) << 8) | packet[2];
121 cookie->y = event.yPosition = ((packet[4] & 0xf) << 8) | packet[5];
123 cookie->x, cookie->y);
130 if (cookie->fingers == 0) return B_OK;
133 event.xPosition = cookie->x += 5 * (int8)packet[1];
134 event.yPosition = cookie->y += 5 * (int8)packet[2];
136 event.xPosition = cookie->x += (int8)packet[1];
137 event.yPosition = cookie->y += (int8)packet[2];
140 cookie->x, cookie->y);
149 event.fingerWidth = cookie->fingers == 1 ? 4 :0;
234 elantech_write_reg(elantech_cookie* cookie, uint8 reg, uint8 value)
241 ps2_dev* dev = cookie->dev;
242 switch (cookie->version) {
288 elantech_read_reg(elantech_cookie* cookie, uint8 reg, uint8 *value)
295 ps2_dev* dev = cookie->dev;
297 switch (cookie->version) {
326 if (cookie->version == 4)
336 get_resolution_v4(elantech_cookie* cookie, uint32* x, uint32* y)
339 if (elantech_dev_send_command(cookie->dev, ELANTECH_CMD_GET_RESOLUTION,
349 get_range(elantech_cookie* cookie, uint32* x_min, uint32* y_min, uint32* x_max,
353 switch (cookie->version) {
365 if ((cookie->send_command)(cookie->dev, ELANTECH_CMD_GET_ID, val, 3)
376 if ((cookie->send_command)(cookie->dev, ELANTECH_CMD_GET_ID, val, 3)
384 if (cookie->capabilities[1] < 2 || cookie->capabilities[1] > *x_max)
386 *width = *x_max / (cookie->capabilities[1] - 1);
394 enable_absolute_mode(elantech_cookie* cookie)
397 switch (cookie->version) {
399 status = elantech_write_reg(cookie, 0x10, 0x16);
401 status = elantech_write_reg(cookie, 0x11, 0x8f);
404 status = elantech_write_reg(cookie, 0x10, 0x54);
406 status = elantech_write_reg(cookie, 0x11, 0x88);
408 status = elantech_write_reg(cookie, 0x12, 0x60);
411 status = elantech_write_reg(cookie, 0x10, 0xb);
414 status = elantech_write_reg(cookie, 0x7, 0x1);
419 if (cookie->version < 4) {
423 status = elantech_read_reg(cookie, 0x10, &val);
457 elantech_cookie* cookie = (elantech_cookie*)malloc(
459 if (cookie == NULL)
461 memset(cookie, 0, sizeof(*cookie));
463 cookie->previousZ = 0;
464 *_cookie = cookie;
466 cookie->dev = dev;
467 dev->cookie = cookie;
473 cookie->ring_buffer = create_packet_buffer(
475 if (cookie->ring_buffer == NULL) {
481 cookie->sem = create_sem(0, "ps2_elantech_sem");
482 if (cookie->sem < 0) {
493 cookie->fwVersion = (val[0] << 16) | (val[1] << 8) | val[2];
494 if (cookie->fwVersion < 0x020030 || cookie->fwVersion == 0x020600)
495 cookie->version = 1;
500 cookie->version = 2;
503 cookie->version = 3;
507 cookie->version = 4;
515 cookie->version, cookie->fwVersion);
517 if (cookie->version >= 3)
518 cookie->send_command = &elantech_dev_send_command;
520 cookie->send_command = &synaptics_dev_send_command;
521 cookie->crcEnabled = (cookie->fwVersion & 0x4000) == 0x4000;
523 if ((cookie->send_command)(cookie->dev, ELANTECH_CMD_GET_CAPABILITIES,
524 cookie->capabilities, 3) != B_OK) {
529 if (enable_absolute_mode(cookie) != B_OK) {
535 if (get_range(cookie, &x_min, &y_min, &x_max, &y_max, &width) != B_OK) {
544 if (get_resolution_v4(cookie, &x_res, &y_res) != B_OK) {
572 delete_sem(cookie->sem);
574 delete_packet_buffer(cookie->ring_buffer);
576 free(cookie);
588 elantech_cookie *cookie = (elantech_cookie*)_cookie;
590 ps2_dev_command_timeout(cookie->dev, PS2_CMD_DISABLE, NULL, 0, NULL, 0,
593 delete_packet_buffer(cookie->ring_buffer);
594 delete_sem(cookie->sem);
596 atomic_and(&cookie->dev->flags, ~PS2_FLAG_OPEN);
597 atomic_and(&cookie->dev->flags, ~PS2_FLAG_ENABLED);
602 status_t status = ps2_reset_mouse(cookie->dev);
608 TRACE("ELANTECH: close %s done\n", cookie->dev->name);
624 elantech_cookie *cookie = (elantech_cookie*)_cookie;
640 if ((status = get_elantech_movement(cookie, &read.u.touchpad, read.timeout)) != B_OK)
653 elantech_read(void* cookie, off_t pos, void* buffer, size_t* _length)
661 elantech_write(void* cookie, off_t pos, const void* buffer, size_t* _length)
671 elantech_cookie* cookie = (elantech_cookie*)dev->cookie;
674 val = cookie->dev->history[0].data;
675 cookie->buffer[cookie->packet_index] = val;
676 cookie->packet_index++;
678 if (cookie->packet_index < PS2_PACKET_ELANTECH)
681 cookie->packet_index = 0;
682 if (packet_buffer_write(cookie->ring_buffer,
683 cookie->buffer, cookie->dev->packet_size)
684 != cookie->dev->packet_size) {
688 release_sem_etc(cookie->sem, 1, B_DO_NOT_RESCHEDULE);
696 elantech_cookie *cookie = (elantech_cookie*)dev->cookie;
700 release_sem(cookie->sem);