Changeset 500
- Timestamp:
- 02/28/07 14:41:17 (2 years ago)
- Files:
-
- trunk/projects/cmucam2/cmucam2.c (modified) (40 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/projects/cmucam2/cmucam2.c
r499 r500 94 94 HIRES_DIFF, 95 95 96 RETURN, // Must be second to last97 CMUCAM2_CMDS_COUNT // Must be last entry so array sizes are correct96 RETURN, // Must be second to last 97 CMUCAM2_CMDS_COUNT // Must be last entry so array sizes are correct 98 98 } cmucam2_command_t; 99 99 … … 191 191 bool poll_mode, bool line_mode, bool buf_mode, 192 192 bool auto_led, bool quiet); 193 static int32_t cmucam2_get_command (cmucam2_command_t * cmd,193 static int32_t cmucam2_get_command (cmucam2_command_t * cmd, 194 194 uint32_t arg_list[]); 195 static int32_t cmucam2_get_command_raw (cmucam2_command_t * cmd,195 static int32_t cmucam2_get_command_raw (cmucam2_command_t * cmd, 196 196 uint32_t arg_list[]); 197 197 static void print_ACK (void); … … 204 204 static void cmucam2_send_image_direct (bool auto_led); 205 205 206 static void raw_print (uint8_t val);206 static void raw_print (uint8_t val); 207 207 208 208 static bool packet_filter_flag; … … 323 323 324 324 if (demo_mode) { 325 cc3_led_set_state (0, true);326 cc3_timer_wait_ms (5000);327 cc3_camera_set_auto_exposure (false);328 cc3_camera_set_auto_white_balance (false);325 cc3_led_set_state (0, true); 326 cc3_timer_wait_ms (5000); 327 cc3_camera_set_auto_exposure (false); 328 cc3_camera_set_auto_white_balance (false); 329 329 // Wait for second button press as target lock 330 330 while (1) { … … 347 347 command = TRACK_WINDOW; 348 348 } 349 else 350 if (raw_mode_input) {351 n = cmucam2_get_command_raw (&command, arg_list);352 }else {353 n = cmucam2_get_command (&command, arg_list);354 }349 else if (raw_mode_input) { 350 n = cmucam2_get_command_raw (&command, arg_list); 351 } 352 else { 353 n = cmucam2_get_command (&command, arg_list); 354 } 355 355 if (n != -1) { 356 356 switch (command) { … … 643 643 raw_mode_no_confirmations = arg_list[0] & 2; 644 644 raw_mode_input = arg_list[0] & 4; 645 print_ACK (); // last because ACK may be supressed645 print_ACK (); // last because ACK may be supressed 646 646 break; 647 647 … … 701 701 print_ACK (); 702 702 if (raw_mode_output) { 703 putchar(255); 704 raw_print(t_pkt.lower_bound.channel[0]); 705 raw_print(t_pkt.lower_bound.channel[1]); 706 raw_print(t_pkt.lower_bound.channel[2]); 707 raw_print(t_pkt.upper_bound.channel[0]); 708 raw_print(t_pkt.upper_bound.channel[1]); 709 raw_print(t_pkt.upper_bound.channel[2]); 710 } else { 703 putchar (255); 704 raw_print (t_pkt.lower_bound.channel[0]); 705 raw_print (t_pkt.lower_bound.channel[1]); 706 raw_print (t_pkt.lower_bound.channel[2]); 707 raw_print (t_pkt.upper_bound.channel[0]); 708 raw_print (t_pkt.upper_bound.channel[1]); 709 raw_print (t_pkt.upper_bound.channel[2]); 710 } 711 else { 711 712 printf ("%d %d %d %d %d %d\r", t_pkt.lower_bound.channel[0], 712 713 t_pkt.lower_bound.channel[1], t_pkt.lower_bound.channel[2], … … 724 725 print_ACK (); 725 726 if (raw_mode_output) { 726 putchar(255); 727 raw_print(cc3_g_pixbuf_frame.x0 / 2); 728 raw_print(cc3_g_pixbuf_frame.y0); 729 raw_print(cc3_g_pixbuf_frame.x1 / 2); 730 raw_print(cc3_g_pixbuf_frame.y1); 731 } else { 727 putchar (255); 728 raw_print (cc3_g_pixbuf_frame.x0 / 2); 729 raw_print (cc3_g_pixbuf_frame.y0); 730 raw_print (cc3_g_pixbuf_frame.x1 / 2); 731 raw_print (cc3_g_pixbuf_frame.y1); 732 } 733 else { 732 734 printf ("%d %d %d %d\r", cc3_g_pixbuf_frame.x0 / 2, 733 735 cc3_g_pixbuf_frame.y0, cc3_g_pixbuf_frame.x1 / 2, … … 901 903 uint8_t servo = cc3_gpio_get_servo_position (arg_list[0]); 902 904 if (raw_mode_output) { 903 putchar(255); 904 raw_print(servo); 905 } else { 905 putchar (255); 906 raw_print (servo); 907 } 908 else { 906 909 printf ("%d\r", servo); 907 910 } … … 923 926 (cc3_gpio_get_value (arg_list[3]) << 3); 924 927 if (raw_mode_output) { 925 putchar(255); 926 raw_print(input); 927 } else { 928 putchar (255); 929 raw_print (input); 930 } 931 else { 928 932 printf ("%d\r", input); 929 933 } … … 951 955 952 956 { 953 int button = cc3_button_get_and_reset_trigger ()? 1 : 0;957 int button = cc3_button_get_and_reset_trigger ()? 1 : 0; 954 958 if (raw_mode_output) { 955 putchar(255); 956 raw_print(button); 957 } else { 958 printf("%d\r", button); 959 putchar (255); 960 raw_print (button); 961 } 962 else { 963 printf ("%d\r", button); 959 964 } 960 965 } … … 1061 1066 cc3_histogram_scanline_finish (h_pkt); 1062 1067 while (!cc3_uart_has_data (0)) { 1063 if (getchar () == '\r') {1068 if (getchar () == '\r') { 1064 1069 free (img.pix); 1065 1070 free (h_pkt->hist); … … 1071 1076 } 1072 1077 if (!cc3_uart_has_data (0)) { 1073 if (getchar () == '\r')1078 if (getchar () == '\r') 1074 1079 break; 1075 1080 } … … 1149 1154 1150 1155 while (!cc3_uart_has_data (0)) { 1151 if (getchar () == '\r') {1156 if (getchar () == '\r') { 1152 1157 cc3_pixbuf_frame_set_coi (old_coi); 1153 1158 free (pkt->current_template); 1154 1159 free (img.pix); 1155 1160 return; 1156 }1161 } 1157 1162 } 1158 1163 if (!quiet) { … … 1173 1178 1174 1179 if (!(packet_filter_flag && 1175 t_pkt.num_pixels == 0 && 1176 prev_packet_empty)) { 1180 t_pkt.num_pixels == 0 && prev_packet_empty)) { 1177 1181 cmucam2_write_t_packet (&t_pkt, NULL); 1178 1182 } … … 1183 1187 1184 1188 if (!cc3_uart_has_data (0)) { 1185 if (getchar () == '\r')1189 if (getchar () == '\r') 1186 1190 break; 1187 1191 } … … 1213 1217 cc3_color_info_scanline_finish (s_pkt); 1214 1218 while (!cc3_uart_has_data (0)) { 1215 if (getchar() == '\r') 1216 { 1219 if (getchar () == '\r') { 1217 1220 free (img.pix); 1218 1221 return; 1219 }1222 } 1220 1223 } 1221 1224 if (!quiet) … … 1223 1226 } 1224 1227 if (!cc3_uart_has_data (0)) { 1225 if (getchar () == '\r')1228 if (getchar () == '\r') 1226 1229 break; 1227 1230 } … … 1287 1290 // keep this check here if you don't want the CMUcam2 GUI to hang after exiting a command in line mode 1288 1291 while (!cc3_uart_has_data (0)) { 1289 if (getchar () == '\r') {1292 if (getchar () == '\r') { 1290 1293 free (img.pix); 1291 1294 return; 1292 }1295 } 1293 1296 } 1294 1297 for (int j = 0; j < lm_width; j++) { … … 1306 1309 // keep this check here if you don't want the CMUcam2 GUI to hang after exiting a command in line mode 1307 1310 while (!cc3_uart_has_data (0)) { 1308 if (getchar () == '\r') {1311 if (getchar () == '\r') { 1309 1312 free (img.pix); 1310 1313 return; 1311 }1314 } 1312 1315 } 1313 1316 cc3_track_color_scanline_finish (t_pkt); … … 1344 1347 servo_settings->x += t_step; 1345 1348 #endif 1346 t_step=0;1349 t_step = 0; 1347 1350 if (servo_settings->x > SERVO_MAX) 1348 1351 servo_settings->x = SERVO_MAX; … … 1380 1383 if (!quiet) { 1381 1384 if (!(packet_filter_flag && 1382 t_pkt->num_pixels == 0 && 1383 prev_packet_empty)) { 1385 t_pkt->num_pixels == 0 && prev_packet_empty)) { 1384 1386 cmucam2_write_t_packet (t_pkt, servo_settings); 1385 1387 } … … 1391 1393 1392 1394 while (!cc3_uart_has_data (0)) { 1393 if (getchar () == '\r')1395 if (getchar () == '\r') 1394 1396 break; 1395 1397 } … … 1426 1428 if (pkt->num_pixels == 0) { 1427 1429 p[0] = p[1] = p[2] = p[3] = p[4] = p[5] = p[6] = p[7] = 0; 1428 } else { 1430 } 1431 else { 1429 1432 p[0] = pkt->centroid_x; 1430 1433 p[1] = pkt->centroid_y; … … 1439 1442 uint8_t mask = t_pkt_mask; 1440 1443 if (raw_mode_output) { 1441 putchar (255);1442 } 1443 printf ("T");1444 putchar (255); 1445 } 1446 printf ("T"); 1444 1447 1445 1448 // print out fields using mask … … 1447 1450 if (mask & 0x1) { 1448 1451 if (raw_mode_output) { 1449 raw_print(p[i]); 1450 } else { 1451 printf(" %d", p[i]); 1452 raw_print (p[i]); 1453 } 1454 else { 1455 printf (" %d", p[i]); 1452 1456 } 1453 1457 } … … 1462 1466 if (servo_settings->x_report) { 1463 1467 if (raw_mode_output) { 1464 raw_print(sx); 1465 } else { 1466 printf(" %d", sx); 1468 raw_print (sx); 1469 } 1470 else { 1471 printf (" %d", sx); 1467 1472 } 1468 1473 } 1469 1474 if (servo_settings->y_report) { 1470 1475 if (raw_mode_output) { 1471 raw_print(sy); 1472 } else { 1473 printf(" %d", sy); 1474 } 1475 } 1476 } 1477 1478 print_cr(); 1476 raw_print (sy); 1477 } 1478 else { 1479 printf (" %d", sy); 1480 } 1481 } 1482 } 1483 1484 print_cr (); 1479 1485 } 1480 1486 … … 1487 1493 1488 1494 if (raw_mode_output) { 1489 putchar (255);1495 putchar (255); 1490 1496 } 1491 1497 printf ("H"); … … 1497 1503 1498 1504 if (raw_mode_output) { 1499 raw_print(pkt->hist[i]); 1500 } else { 1505 raw_print (pkt->hist[i]); 1506 } 1507 else { 1501 1508 printf (" %d", pkt->hist[i]); 1502 1509 } 1503 1510 } 1504 1511 1505 print_cr ();1512 print_cr (); 1506 1513 } 1507 1514 … … 1512 1519 1513 1520 if (raw_mode_output) { 1514 putchar (255);1521 putchar (255); 1515 1522 } 1516 1523 … … 1527 1534 if (mask & 0x1) { 1528 1535 if (raw_mode_output) { 1529 putchar(pkt2[i]); 1530 } else { 1531 printf(" %d", pkt2[i]); 1536 putchar (pkt2[i]); 1537 } 1538 else { 1539 printf (" %d", pkt2[i]); 1532 1540 } 1533 1541 } … … 1535 1543 } 1536 1544 1537 print_cr ();1545 print_cr (); 1538 1546 } 1539 1547 … … 1562 1570 } 1563 1571 1564 int32_t cmucam2_get_command (cmucam2_command_t * cmd, uint32_t *arg_list)1572 int32_t cmucam2_get_command (cmucam2_command_t * cmd, uint32_t * arg_list) 1565 1573 { 1566 1574 char line_buf[MAX_LINE]; … … 1574 1582 c = 0; 1575 1583 while (c != '\r') { 1576 c = getchar ();1584 c = getchar (); 1577 1585 1578 1586 if (length < (MAX_LINE - 1) && c != EOF) { 1579 1587 line_buf[length] = c; 1580 1588 length++; 1581 } else { 1589 } 1590 else { 1582 1591 // too long or EOF 1583 1592 return -1; … … 1587 1596 line_buf[length] = '\0'; 1588 1597 1589 // check for empty command1598 // check for empty command 1590 1599 if (line_buf[0] == '\r' || line_buf[0] == '\n') { 1591 1600 *cmd = RETURN; … … 1644 1653 } 1645 1654 1646 int32_t cmucam2_get_command_raw (cmucam2_command_t * cmd, uint32_t *arg_list)1655 int32_t cmucam2_get_command_raw (cmucam2_command_t * cmd, uint32_t * arg_list) 1647 1656 { 1648 1657 bool fail; … … 1656 1665 // read characters 1657 1666 for (i = 0; i < 2; i++) { 1658 c = getchar ();1667 c = getchar (); 1659 1668 if (c == EOF) { 1660 1669 return -1; … … 1678 1687 1679 1688 // read argc 1680 c = getchar ();1689 c = getchar (); 1681 1690 if (c == EOF) { 1682 1691 return -1; … … 1689 1698 // read args 1690 1699 for (i = 0; i < argc; i++) { 1691 c = getchar ();1700 c = getchar (); 1692 1701 if (c == EOF) { 1693 1702 return -1; 1694 1703 } 1695 1704 1696 arg_list[i] = toupper (c);1705 arg_list[i] = toupper (c); 1697 1706 } 1698 1707 … … 1702 1711 1703 1712 1704 void 1705 raw_print (uint8_t val) 1713 void raw_print (uint8_t val) 1706 1714 { 1707 1715 if (val == 255) { 1708 putchar(254); // avoid confusion 1709 } else { 1710 putchar(val); 1716 putchar (254); // avoid confusion 1717 } 1718 else { 1719 putchar (val); 1711 1720 } 1712 1721 }
