33 #define CMUCAM4_FIRMWARE_V100 100
38 #define CMUCAM4_FIRMWARE_V101 101
43 #define CMUCAM4_FIRMWARE_V102 102
48 #define CMUCAM4_FIRMWARE_V103 103
53 #define CMUCAM4_NATIVE_H_RES 160
58 #define CMUCAM4_NATIVE_V_RES 120
63 #define CMUCAM4_BINARY_H_RES (CMUCAM4_NATIVE_H_RES / 2)
68 #define CMUCAM4_BINARY_V_RES (CMUCAM4_NATIVE_V_RES / 2)
73 #define CMUCAM4_MIN_NATIVE_ROW 0
78 #define CMUCAM4_MIN_NATIVE_COLUMN 0
83 #define CMUCAM4_MAX_NATIVE_ROW (CMUCAM4_NATIVE_V_RES - 1)
88 #define CMUCAM4_MAX_NATIVE_COLUMN (CMUCAM4_NATIVE_H_RES - 1)
93 #define CMUCAM4_MIN_BINARY_ROW 0
98 #define CMUCAM4_MIN_BINARY_COLUMN 0
103 #define CMUCAM4_MAX_BINARY_ROW (CMUCAM4_BINARY_V_RES - 1)
108 #define CMUCAM4_MAX_BINARY_COLUMN (CMUCAM4_BINARY_H_RES - 1)
115 #define CMUCAM4_IN_TP_LL 0
122 #define CMUCAM4_IN_TP_LH 1
129 #define CMUCAM4_IN_TP_HL 2
136 #define CMUCAM4_IN_TP_HH 3
143 #define CMUCAM4_DIR_TP_II 0
150 #define CMUCAM4_DIR_TP_IO 1
157 #define CMUCAM4_DIR_TP_OI 2
164 #define CMUCAM4_DIR_TP_OO 3
171 #define CMUCAM4_OUT_TP_LL 0
178 #define CMUCAM4_OUT_TP_LH 1
185 #define CMUCAM4_OUT_TP_HL 2
192 #define CMUCAM4_OUT_TP_HH 3
199 #define CMUCAM4_LED_OFF -1
206 #define CMUCAM4_LED_ON 0
213 #define CMUCAM4_PAN_SERVO 0
220 #define CMUCAM4_TILT_SERVO 1
226 #define CMUCAM4_RED_CHANNEL 0
232 #define CMUCAM4_GREEN_CHANNEL 1
238 #define CMUCAM4_BLUE_CHANNEL 2
244 #define CMUCAM4_H1_BINS 0
250 #define CMUCAM4_H2_BINS 1
256 #define CMUCAM4_H4_BINS 2
262 #define CMUCAM4_H8_BINS 3
268 #define CMUCAM4_H16_BINS 4
274 #define CMUCAM4_H32_BINS 5
280 #define CMUCAM4_H64_BINS 6
286 #define CMUCAM4_HR_640 0
292 #define CMUCAM4_HR_320 1
298 #define CMUCAM4_HR_160 2
304 #define CMUCAM4_HR_80 3
310 #define CMUCAM4_VR_480 0
316 #define CMUCAM4_VR_240 1
322 #define CMUCAM4_VR_120 2
328 #define CMUCAM4_VR_60 3
333 #define CMUCAM4_ID_T_R CMUCAM4_BINARY_V_RES
338 #define CMUCAM4_ID_T_C (CMUCAM4_BINARY_H_RES / 8)
344 #define CMUCAM4_ID_T_LENGTH (CMUCAM4_ID_T_R * CMUCAM4_ID_T_C)
350 #define CMUCAM4_HD_1_T_LENGTH (1 << CMUCAM4_H1_BINS)
356 #define CMUCAM4_HD_2_T_LENGTH (1 << CMUCAM4_H2_BINS)
362 #define CMUCAM4_HD_4_T_LENGTH (1 << CMUCAM4_H4_BINS)
368 #define CMUCAM4_HD_8_T_LENGTH (1 << CMUCAM4_H8_BINS)
374 #define CMUCAM4_HD_16_T_LENGTH (1 << CMUCAM4_H16_BINS)
380 #define CMUCAM4_HD_32_T_LENGTH (1 << CMUCAM4_H32_BINS)
386 #define CMUCAM4_HD_64_T_LENGTH (1 << CMUCAM4_H64_BINS)
391 #define CMUCAM4_VL_LENGTH 11
396 #define CMUCAM4_FST_LENGTH 8
401 #define CMUCAM4_NAME_LENGTH 12
406 #define CMUCAM4_ATTR_LENGTH 6
411 #define CMUCAM4_RETURN_SUCCESS 0
416 #define CMUCAM4_RETURN_FAILURE -1
421 #define CMUCAM4_NOT_ACTIVATED -2
426 #define CMUCAM4_NCK_RESPONCE -3
431 #define CMUCAM4_UNSUPPORTED_VERSION -4
436 #define CMUCAM4_UNEXPECTED_RESPONCE -5
442 #define CMUCAM4_COMMAND_OVERFLOW -6
450 #define CMUCAM4_RESPONCE_OVERFLOW -7
455 #define CMUCAM4_STREAM_END -8
460 #define CMUCAM4_SERIAL_TIMEOUT -9
465 #define CMUCAM4_CAMERA_TIMEOUT_ERROR -10
470 #define CMUCAM4_CAMERA_CONNECTION_ERROR -11
475 #define CMUCAM4_DISK_IO_ERROR -12
480 #define CMUCAM4_FILE_SYSTEM_CORRUPTED -13
485 #define CMUCAM4_FILE_SYSTEM_UNSUPPORTED -14
490 #define CMUCAM4_CARD_NOT_DETECTED -15
496 #define CMUCAM4_DISK_MAY_BE_FULL -16
502 #define CMUCAM4_DIRECTORY_FULL -17
507 #define CMUCAM4_EXPECTED_AN_ENTRY -18
512 #define CMUCAM4_EXPECTED_A_DIRECTORY -19
517 #define CMUCAM4_ENTRY_NOT_ACCESSIBLE -20
522 #define CMUCAM4_ENTRY_NOT_MODIFIABLE -21
527 #define CMUCAM4_ENTRY_NOT_FOUND -22
532 #define CMUCAM4_ENTRY_ALREADY_EXISTS -23
537 #define CMUCAM4_DIRECTORY_LINK_MISSING -24
542 #define CMUCAM4_DIRECTORY_NOT_EMPTY -25
547 #define CMUCAM4_NOT_A_DIRECTORY -26
552 #define CMUCAM4_NOT_A_FILE -27
559 #define CMUCAM4_VL_LENGTH_STR CMUCOM4_V_TO_S(CMUCAM4_VL_LENGTH)
564 #define CMUCAM4_FST_LENGTH_STR CMUCOM4_V_TO_S(CMUCAM4_FST_LENGTH)
569 #define CMUCAM4_NAME_LENGTH_STR CMUCOM4_V_TO_S(CMUCAM4_NAME_LENGTH)
574 #define CMUCAM4_ATTR_LENGTH_STR CMUCOM4_V_TO_S(CMUCAM4_ATTR_LENGTH)
579 #define CMUCAM4_CAMERA_TIMEOUT_ERROR_SUM ('E'+'R'+'R'+':'+' '+\
580 'C'+'a'+'m'+'e'+'r'+'a'+' '+\
581 'T'+'i'+'m'+'e'+'o'+'u'+'t'+' '+\
587 #define CMUCAM4_CAMERA_CONNECTION_ERROR_SUM ('E'+'R'+'R'+':'+' '+\
588 'C'+'a'+'m'+'e'+'r'+'a'+' '+\
589 'C'+'o'+'n'+'n'+'e'+'c'+'t'+'i'+'o'+'n'+' '+\
595 #define CMUCAM4_DISK_IO_ERROR_SUM ('E'+'R'+'R'+':'+' '+\
596 'D'+'i'+'s'+'k'+' '+\
603 #define CMUCAM4_FILE_SYSTEM_CORRUPTED_SUM ('E'+'R'+'R'+':'+' '+\
604 'F'+'i'+'l'+'e'+' '+\
605 'S'+'y'+'s'+'t'+'e'+'m'+' '+\
606 'C'+'o'+'r'+'r'+'u'+'p'+'t'+'e'+'d')
611 #define CMUCAM4_FILE_SYSTEM_UNSUPPORTED_SUM ('E'+'R'+'R'+':'+' '+\
612 'F'+'i'+'l'+'e'+' '+\
613 'S'+'y'+'s'+'t'+'e'+'m'+' '+\
614 'U'+'n'+'s'+'u'+'p'+'p'+'o'+'r'+'t'+'e'+'d')
619 #define CMUCAM4_CARD_NOT_DETECTED_SUM ('E'+'R'+'R'+':'+' '+\
620 'C'+'a'+'r'+'d'+' '+\
622 'D'+'e'+'t'+'e'+'c'+'t'+'e'+'d')
627 #define CMUCAM4_DISK_MAY_BE_FULL_SUM ('E'+'R'+'R'+':'+' '+\
628 'D'+'i'+'s'+'k'+' '+\
636 #define CMUCAM4_DIRECTORY_FULL_SUM ('E'+'R'+'R'+':'+' '+\
637 'D'+'i'+'r'+'e'+'c'+'t'+'o'+'r'+'y'+' '+\
643 #define CMUCAM4_EXPECTED_AN_ENTRY_SUM ('E'+'R'+'R'+':'+' '+\
644 'E'+'x'+'p'+'e'+'c'+'t'+'e'+'d'+' '+\
651 #define CMUCAM4_EXPECTED_A_DIRECTORY_SUM ('E'+'R'+'R'+':'+' '+\
652 'E'+'x'+'p'+'e'+'c'+'t'+'e'+'d'+' '+\
654 'D'+'i'+'r'+'e'+'c'+'t'+'o'+'r'+'y')
659 #define CMUCAM4_ENTRY_NOT_ACCESSIBLE_SUM ('E'+'R'+'R'+':'+' '+\
660 'E'+'n'+'t'+'r'+'y'+' '+\
662 'A'+'c'+'c'+'e'+'s'+'s'+'i'+'b'+'l'+'e')
667 #define CMUCAM4_ENTRY_NOT_MODIFIABLE_SUM ('E'+'R'+'R'+':'+' '+\
668 'E'+'n'+'t'+'r'+'y'+' '+\
670 'M'+'o'+'d'+'i'+'f'+'i'+'a'+'b'+'l'+'e')
675 #define CMUCAM4_ENTRY_NOT_FOUND_SUM ('E'+'R'+'R'+':'+' '+\
676 'E'+'n'+'t'+'r'+'y'+' '+\
683 #define CMUCAM4_ENTRY_ALREADY_EXISTS_SUM ('E'+'R'+'R'+':'+' '+\
684 'E'+'n'+'t'+'r'+'y'+' '+\
685 'A'+'l'+'r'+'e'+'a'+'d'+'y'+' '+\
686 'E'+'x'+'i'+'s'+'t'+'s')
691 #define CMUCAM4_DIRECTORY_LINK_MISSING_SUM ('E'+'R'+'R'+':'+' '+\
692 'D'+'i'+'r'+'e'+'c'+'t'+'o'+'r'+'y'+' '+\
693 'L'+'i'+'n'+'k'+' '+\
694 'M'+'i'+'s'+'s'+'i'+'n'+'g')
699 #define CMUCAM4_DIRECTORY_NOT_EMPTY_SUM ('E'+'R'+'R'+':'+' '+\
700 'D'+'i'+'r'+'e'+'c'+'t'+'o'+'r'+'y'+' '+\
707 #define CMUCAM4_NOT_A_DIRECTORY_SUM ('E'+'R'+'R'+':'+' '+\
710 'D'+'i'+'r'+'e'+'c'+'t'+'o'+'r'+'y')
715 #define CMUCAM4_NOT_A_FILE_SUM ('E'+'R'+'R'+':'+' '+\
723 #define CMUCAM4_RES_BUFFER_SIZE CMUCOM4_INPUT_BUFFER_SIZE
724 #if (CMUCAM4_RES_BUFFER_SIZE < 1) // Responce buffer size limit.
725 #error "Error: The responce (input) buffer size is too small!"
731 #define CMUCAM4_CMD_BUFFER_SIZE CMUCOM4_OUTPUT_BUFFER_SIZE
732 #if (CMUCAM4_CMD_BUFFER_SIZE < 1) // Command buffer size limit.
733 #error "Error: The command (output) buffer size is too small!"
739 #define CMUCAM4_RESET_TRIES 4
744 #define CMUCAM4_RESET_TIMEOUT 2250
749 #define CMUCAM4_IDLE_TRIES 4
754 #define CMUCAM4_IDLE_TIMEOUT 750
759 #define CMUCAM4_NON_FS_TIMEOUT 1000
764 #define CMUCAM4_FS_TIMEOUT 3600000
769 #define CMUCAM4_IC_STRING ":ACK\rCMUcam4 v%d.%02d\r:"
774 #define CMUCAM4_IC_LENGTH sizeof(CMUCAM4_IC_STRING)
779 #define CMUCAM4_FRAME_H_RES 640
784 #define CMUCAM4_FRAME_V_RES 480
1124 #define CMUCAM4_GET_PIXEL(pointer, row, column) \
1126 (((pointer)->pixels[((row) * CMUCAM4_ID_T_C) + ((column) / 8)] \
1127 >> (7 - ((column) & 7))) & 1)
1155 #define CMUCAM4_SET_PIXEL(pointer, row, column, value) \
1157 int bitIndex = (7 - ((column) & 7)); \
1158 int byteIndex = (((row) * CMUCAM4_ID_T_C) + ((column) / 8)); \
1160 (pointer)->pixels[byteIndex] = \
1161 (((~(1<<bitIndex))&((pointer)->pixels[byteIndex]))|(((value)?1:0)<<bitIndex)) \
1426 int panOutput(
int direction,
int output);
1472 int LEDOn(
long frequency);
1590 int greenMin,
int greenMax,
1591 int blueMin,
int blueMax);
1611 int bottomRightX,
int bottomRightY);
1648 int greenMin,
int greenMax,
1649 int blueMin,
int blueMax);
1669 int trackWindow(
int redRange,
int greenRange,
int blueRange);
1924 const char * attributes);
1964 size_t size,
unsigned long offset);
1979 int moveEntry(
const char * oldEntryPathAndName,
1980 const char * newEntryPathAndName);
1988 int printLine(
const char * filePathAndName,
const char * textToAppend);
1999 long filePrint(
const char * filePathAndName, uint8_t * buffer,
2000 size_t size,
unsigned long offset);
2007 int removeEntry(
const char * fileOrDirectoryPathAndName);
2033 int dumpFrame(
int horizontalResolution,
int verticalResolution);
2061 int sendFrame(
int horizontalResolution,
int verticalResolution,
2063 size_t horizonalSize,
size_t horizontalOffset,
2064 size_t verticalSize,
size_t verticalOffset);
2074 int _voidCommandWrapper(
const char * command,
unsigned long timeout);
2082 int _intCommandWrapper(
const char * command,
unsigned long timeout);
2092 int _commandWrapper(
const char * command,
unsigned long timeout);
2100 int _responceWrapper(
char responce);
2105 void _waitForIdle();
2110 void _waitForResponce();
2115 void _receiveData();
2120 void _handleError();
2127 void _waitForString(
const char *
string);
2134 int _startsWithString(
const char *
string);
2144 void _readBinary(uint8_t * buffer,
size_t size,
2145 unsigned long packetSize,
2146 unsigned long packetOffset);
2162 void _setReadTimeout(
unsigned long timeout);
2168 int _readWithTimeout();
2173 unsigned long _timeout;
2178 unsigned long _milliseconds;
2193 enum _CMUcam4_version
2205 char _resBuffer[CMUCAM4_RES_BUFFER_SIZE];
2210 char _cmdBuffer[CMUCAM4_CMD_BUFFER_SIZE];