Changeset 438

Show
Ignore:
Timestamp:
02/18/07 18:32:04 (2 years ago)
Author:
anthony_rowe
Message:

buffer mode and read buffer

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/projects/cmucam2/cmucam2.c

    r437 r438  
    6868  GET_INPUT, 
    6969  SET_TRACK, 
     70  BUF_MODE, 
     71  READ_FRAME, 
    7072  CONF_HISTOGRAM, 
    7173  CMUCAM2_CMD_END               // Must be last entry so array sizes are correct 
     
    9294 
    9395  /* Buffer Commands */ 
     96  cmucam2_cmds[BUF_MODE] = "BM"; 
    9497  //  BM buffer mode 
     98  cmucam2_cmds[READ_FRAME] = "RF"; 
    9599  //  RF read frame 
    96100 
     
    176180 
    177181static void cmucam2_get_histogram (cc3_histogram_pkt_t * h_pkt, 
    178                                    bool poll_mode, bool quiet); 
     182                                   bool poll_mode, bool buf_mode, bool quiet); 
    179183static void cmucam2_get_mean (cc3_color_info_pkt_t * t_pkt, bool poll_mode, 
    180                               bool line_mode, bool quiet); 
     184                              bool line_mode, bool buf_mode, bool quiet); 
    181185static void cmucam2_write_s_packet (cc3_color_info_pkt_t * pkt); 
    182186static void cmucam2_track_color (cc3_track_pkt_t * t_pkt, 
    183187                                 bool poll_mode, 
    184                                  bool line_mode, bool auto_led, cmucam2_servo_t *servo_settings, bool quiet); 
     188                                 bool line_mode, bool auto_led, cmucam2_servo_t *servo_settings,bool buf_mode, bool quiet); 
    185189static int32_t cmucam2_get_command (int32_t * cmd, int32_t * arg_list); 
    186190static void print_ACK (void); 
     
    197201  int32_t val, n; 
    198202  uint32_t arg_list[MAX_ARGS], start_time; 
    199   bool error, poll_mode, line_mode, auto_led, demo_mode
     203  bool error, poll_mode, line_mode, auto_led, demo_mode,buf_mode
    200204  cc3_track_pkt_t t_pkt; 
    201205  cc3_color_info_pkt_t s_pkt; 
     
    246250  poll_mode = false; 
    247251  line_mode = false; 
     252  buf_mode = false; 
    248253  h_pkt.bins = 28; 
    249254  t_pkt.track_invert = false; 
     
    322327        break; 
    323328 
     329     case READ_FRAME: 
     330        if (n != 0) { 
     331          error = true; 
     332          break; 
     333        } 
     334        print_ACK (); 
     335        cc3_pixbuf_load (); 
     336        break; 
    324337 
    325338      case GET_VERSION: 
     
    347360        if (arg_list[0] == 2) 
    348361          auto_led = true; 
     362        break; 
     363       
     364      case BUF_MODE: 
     365        if (n != 1 || arg_list[0]>1) { 
     366          error = true; 
     367          break; 
     368        } 
     369 
     370        print_ACK (); 
     371        if (arg_list[0] == 1) 
     372          buf_mode = true; 
     373        else 
     374          buf_mode = false; 
    349375        break; 
    350376 
     
    584610          t_pkt.upper_bound.channel[2] = arg_list[5]; 
    585611        } 
    586         cmucam2_track_color (&t_pkt, poll_mode, line_mode,auto_led,&servo_settings, 0); 
     612        cmucam2_track_color (&t_pkt, poll_mode, line_mode,auto_led,&servo_settings,buf_mode, 0); 
    587613        break; 
    588614 
     
    606632          cc3_pixbuf_set_roi (x0, y0, x1, y1); 
    607633          // call get mean 
    608           cmucam2_get_mean (&s_pkt, 1, line_mode, 1); 
     634          cmucam2_get_mean (&s_pkt, 1, line_mode,buf_mode, 1); 
    609635          // set window back to full size 
    610636          x0 = 0; 
     
    650676            tmp = 240; 
    651677          t_pkt.upper_bound.channel[2] = tmp; 
    652           cmucam2_track_color (&t_pkt, poll_mode, line_mode, auto_led,&servo_settings, 0); 
     678          cmucam2_track_color (&t_pkt, poll_mode, line_mode, auto_led,&servo_settings,buf_mode, 0); 
    653679        } 
    654680        demo_mode = false; 
     
    663689 
    664690        print_ACK (); 
    665         cmucam2_get_mean (&s_pkt, poll_mode, line_mode, 0); 
     691        cmucam2_get_mean (&s_pkt, poll_mode, line_mode,buf_mode, 0); 
    666692        break; 
    667693 
     
    675701        print_ACK (); 
    676702        h_pkt.channel = arg_list[0]; 
    677         cmucam2_get_histogram (&h_pkt, poll_mode, 0); 
     703        cmucam2_get_histogram (&h_pkt, poll_mode, buf_mode, 0); 
    678704        break; 
    679705 
     
    794820 
    795821 
    796 void cmucam2_get_histogram (cc3_histogram_pkt_t * h_pkt, bool poll_mode, 
     822void cmucam2_get_histogram (cc3_histogram_pkt_t * h_pkt, bool poll_mode, bool buf_mode, 
    797823                            bool quiet) 
    798824{ 
     
    809835        } 
    810836  do { 
    811     cc3_pixbuf_load (); 
     837    if(!buf_mode) cc3_pixbuf_load (); 
     838    else cc3_pixbuf_rewind(); 
    812839    if (cc3_histogram_scanline_start (h_pkt) != 0) { 
    813840      while (cc3_pixbuf_read_rows (img.pix, 1)) { 
     
    840867 
    841868void cmucam2_get_mean (cc3_color_info_pkt_t * s_pkt, 
    842                        bool poll_mode, bool line_mode, bool quiet) 
     869                       bool poll_mode, bool line_mode,bool buf_mode, bool quiet) 
    843870{ 
    844871  cc3_image_t img; 
     
    848875  img.pix = malloc (3 * img.width); 
    849876  do { 
    850     cc3_pixbuf_load (); 
     877    if(!buf_mode) cc3_pixbuf_load (); 
     878    else cc3_pixbuf_rewind(); 
    851879    if (cc3_color_info_scanline_start (s_pkt) != 0) { 
    852880      while (cc3_pixbuf_read_rows (img.pix, 1)) { 
     
    873901void cmucam2_track_color (cc3_track_pkt_t * t_pkt, 
    874902                          bool poll_mode, 
    875                           bool line_mode, bool auto_led,cmucam2_servo_t *servo_settings, bool quiet) 
     903                          bool line_mode, bool auto_led,cmucam2_servo_t *servo_settings,bool buf_mode, bool quiet) 
    876904{ 
    877905  cc3_image_t img; 
     
    891919   
    892920  do { 
    893     cc3_pixbuf_load (); 
     921    if(!buf_mode) cc3_pixbuf_load (); 
     922    else cc3_pixbuf_rewind(); 
    894923    if (cc3_track_color_scanline_start (t_pkt) != 0) { 
    895924      uint8_t lm_width, lm_height;