Changeset c8dd5b1 in mainline


Ignore:
Timestamp:
2011-02-07T13:39:21Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
52b7f15f
Parents:
9e80904
Message:

Adds tracker interrupt_in and interrupt_out implementaion

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/uhci-hcd/tracker.c

    r9e80904 rc8dd5b1  
    163163            instance->buffer_size - instance->buffer_offset);
    164164
     165        //TODO: add toggle here
    165166        transfer_descriptor_init(instance->td, DEFAULT_ERROR_COUNT,
    166167            instance->packet_size, false, instance->target, USB_PID_IN,
     
    171172        /* set next step */
    172173        if ((instance->buffer_offset + instance->packet_size)
    173             < instance->buffer_size) {
     174            >= instance->buffer_size) {
    174175                /* that's all, end coomunication */
    175176                instance->next_step = tracker_control_read_status;
     
    196197        memcpy(instance->packet, instance->buffer + instance->buffer_offset,
    197198            instance->packet_size);
     199
     200        // TODO: add toggle here
    198201        transfer_descriptor_init(instance->td, DEFAULT_ERROR_COUNT,
    199202            instance->packet_size, false, instance->target, USB_PID_OUT,
     
    204207        /* set next step */
    205208        if ((instance->buffer_offset + instance->packet_size)
    206             < instance->buffer_size) {
     209            >= instance->buffer_size) {
    207210                /* that's all, end coomunication */
    208211                instance->next_step = tracker_control_write_status;
     
    268271void tracker_interrupt_in(tracker_t *instance)
    269272{
     273        assert(instance);
     274
     275        /* check for errors */
     276        int err = transfer_descriptor_status(instance->td);
     277        if (err != EOK) {
     278                tracker_call_in_and_dispose(instance);
     279                return;
     280        }
     281
     282        if (instance->packet_size) {
     283                /* we are data in, we want data from our device. if there is data */
     284                memcpy(instance->buffer + instance->buffer_offset, instance->packet,
     285                                instance->packet_size);
     286                instance->buffer_offset += instance->packet_size;
     287        }
     288
     289        /* prepare next packet, no copy, we are receiving data */
     290        instance->packet_size = MIN(instance->max_packet_size,
     291                        instance->buffer_size - instance->buffer_offset);
     292
     293        //TODO: add toggle here
     294        transfer_descriptor_init(instance->td, DEFAULT_ERROR_COUNT,
     295            instance->packet_size, false, instance->target, USB_PID_IN,
     296            instance->packet);
     297
     298        tracker_schedule(instance);
     299
     300        /* set next step */
     301        if ((instance->buffer_offset + instance->packet_size)
     302            >= instance->buffer_size) {
     303                /* that's all, end coomunication */
     304                instance->next_step = tracker_call_in_and_dispose;
     305        }
    270306}
    271307/*----------------------------------------------------------------------------*/
    272308void tracker_interrupt_out(tracker_t *instance)
    273309{
     310        assert(instance);
     311
     312        /* check for errors */
     313        int err = transfer_descriptor_status(instance->td);
     314        if (err != EOK) {
     315                tracker_call_out_and_dispose(instance);
     316                return;
     317        }
     318
     319        /* we are data out, we down't want data from our device */
     320        instance->buffer_offset += instance->packet_size;
     321
     322        /* prepare next packet, copy data to packet */
     323        instance->packet_size = MIN(instance->max_packet_size,
     324            instance->buffer_size - instance->buffer_offset);
     325        memcpy(instance->packet, instance->buffer + instance->buffer_offset,
     326            instance->packet_size);
     327
     328        // TODO: add toggle here
     329        transfer_descriptor_init(instance->td, DEFAULT_ERROR_COUNT,
     330            instance->packet_size, false, instance->target, USB_PID_OUT,
     331            instance->packet);
     332
     333        tracker_schedule(instance);
     334
     335        /* set next step */
     336        if ((instance->buffer_offset + instance->packet_size)
     337            >= instance->buffer_size) {
     338                /* that's all, end coomunication */
     339                instance->next_step = tracker_call_out_and_dispose;
     340        }
    274341}
    275342/*----------------------------------------------------------------------------*/
Note: See TracChangeset for help on using the changeset viewer.