Changeset 11890 in project


Ignore:
Timestamp:
09/04/08 07:21:27 (13 years ago)
Author:
ecloud
Message:

added gps:has-data? to try to avoid blocking the polling thread

Location:
release/3/gps/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • release/3/gps/trunk/gps.meta

    r11039 r11890  
    1212 (doc-from-wiki)
    1313
    14  (hidden)
    15 
    1614 (author "Shawn Rutledge")
    1715
  • release/3/gps/trunk/gps.scm

    r11039 r11890  
    6969                                                ((foreign-lambda* void (((pointer (struct "gps_data_t")) s))
    7070                                                        "gps_set_raw_hook(s, C_raw_cb);") conn-data)
     71                                                ; ((foreign-lambda* void (((pointer (struct "gps_data_t")) s))
     72                                                        ; "int ret = fcntl(s->gps_fd, F_SETFD, O_NONBLOCK);
     73                                                        ; if (ret < 0)
     74                                                                ; perror(\"fcntl\");") conn-data)
    7175                                                (gps:query conn-data query-w-x))
    7276                                                ; ((foreign-safe-lambda*
     
    7781                                        ))))
    7882
     83        (define gps:has-data?
     84                (foreign-lambda* bool (((pointer (struct "gps_data_t")) s))
     85                        "fd_set rfds;
     86                        struct timeval tv;
     87                        int retval;
     88                        FD_ZERO(&rfds);
     89                        FD_SET(s->gps_fd, &rfds);
     90                        tv.tv_sec = 0;
     91                        tv.tv_usec = 100;
     92                        retval = select(s->gps_fd + 1, &rfds, NULL, NULL, &tv);
     93                        if (retval == -1)
     94                        {
     95                                perror(\"select(gps_fd)\");
     96                                C_return(0);
     97                        }
     98                        C_return(retval);"))
     99
    79100        ;; cb of the form (lambda (gps-data message) ... )
    80101        (set! gps:poll (lambda (cb)
    81102                (open-if-necessary)
    82                 (when conn-data
     103                (when (and conn-data (gps:has-data? conn-data))
    83104                        (set! registered-cb cb)
    84105                        (let loop ([done #f])
Note: See TracChangeset for help on using the changeset viewer.