// // begin license header // // This file is part of Pixy CMUcam5 or "Pixy" for short // // All Pixy source code is provided under the terms of the // GNU General Public License v2 (http://www.gnu.org/licenses/gpl-2.0.html). // Those wishing to use Pixy source code, software and/or // technologies under different licensing terms should contact us at // cmucam@cs.cmu.edu. Such licensing terms are available for // all portions of the Pixy codebase presented here. // // end license header // #ifndef __PIXY_H__ #define __PIXY_H__ #include #include #include "pixydefs.h" // Pixy C API // #ifdef __cplusplus extern "C" { #endif /** * @defgroup pixy Pixy * The Pixy Module */ /*@{*/ #define PIXY_MAX_SIGNATURE 7 // Pixy x-y position values #define PIXY_MIN_X 0 #define PIXY_MAX_X 319 #define PIXY_MIN_Y 0 #define PIXY_MAX_Y 199 // RC-servo values #define PIXY_RCS_MIN_POS 0 #define PIXY_RCS_MAX_POS 1000 #define PIXY_RCS_CENTER_POS ((PIXY_RCS_MAX_POS-PIXY_RCS_MIN_POS)/2) // Block types #define PIXY_BLOCKTYPE_NORMAL 0 #define PIXY_BLOCKTYPE_COLOR_CODE 1 struct Block { /*void print(char *buf) { int i, j; char sig[6], d; bool flag; if (type==PIXY_BLOCKTYPE_COLOR_CODE) { // convert signature number to an octal string for (i=12, j=0, flag=false; i>=0; i-=3) { d = (signature>>i)&0x07; if (d>0 && !flag) flag = true; if (flag) sig[j++] = d + '0'; } sig[j] = '\0'; sprintf(buf, "CC block! sig: %s (%d decimal) x: %d y: %d width: %d height: %d angle %d", sig, signature, x, y, width, height, angle); } else // regular block. Note, angle is always zero, so no need to print sprintf(buf, "sig: %d x: %d y: %d width: %d height: %d", signature, x, y, width, height); }*/ uint16_t type; uint16_t signature; uint16_t x; uint16_t y; uint16_t width; uint16_t height; int16_t angle; }; /** @brief Creates a connection with Pixy and listens for Pixy messages. @return 0 Success @return PIXY_ERROR_USB_IO USB Error: I/O @return PIXY_ERROR_NOT_FOUND USB Error: Pixy not found @return PIXY_ERROR_USB_BUSY USB Error: Busy @return PIXY_ERROR_USB_NO_DEVICE USB Error: No device */ int pixy_init(); /** @brief Indicates when new block data from Pixy is received. @return 1 New Data: Block data has been updated. @return 0 Stale Data: Block data has not changed since pixy_get_blocks() was last called. */ int pixy_blocks_are_new(); /** @brief Copies up to 'max_blocks' number of Blocks to the address pointed to by 'blocks'. @param[in] max_blocks Maximum number of Blocks to copy to the address pointed to by 'blocks'. @param[out] blocks Address of an array in which to copy the blocks to. The array must be large enough to write 'max_blocks' number of Blocks to. @return Non-negative Success: Number of blocks copied @return PIXY_ERROR_USB_IO USB Error: I/O @return PIXY_ERROR_NOT_FOUND USB Error: Pixy not found @return PIXY_ERROR_USB_BUSY USB Error: Busy @return PIXY_ERROR_USB_NO_DEVICE USB Error: No device @return PIXY_ERROR_INVALID_PARAMETER Invalid pararmeter specified */ int pixy_get_blocks(uint16_t max_blocks, struct Block * blocks); int pixy_service(); /** @brief Send a command to Pixy. @param[in] name Chirp remote procedure call identifier string. @return -1 Error */ int pixy_command(const char *name, ...); /** @brief Terminates connection with Pixy. */ void pixy_close(); /** @brief Send description of pixy error to stdout. @param[in] error_code Pixy error code */ void pixy_error(int error_code); /** @brief Set color of pixy LED. @param[in] red Brightness value for red LED element. [0, 255] 0 = Off, 255 = On @param[in] green Brightness value for green LED element. [0, 255] 0 = Off, 255 = On @param[in] blue Brightness value for blue LED element. [0, 255] 0 = Off, 255 = On @return 0 Success @return Negative Error */ int pixy_led_set_RGB(uint8_t red, uint8_t green, uint8_t blue); /** @brief Set pixy LED maximum current. @param[in] current Maximum current (microamps). @return 0 Success @return Negative Error */ int pixy_led_set_max_current(uint32_t current); /** @brief Get pixy LED maximum current. @return Non-negative Maximum LED current value (microamps). @return Negative Error */ int pixy_led_get_max_current(); /** @brief Enable or disable pixy camera auto white balance. @param value 1: Enable white balance. 0: Disable white balance. @return 0 Success @return Negative Error */ int pixy_cam_set_auto_white_balance(uint8_t value); /** @brief Get pixy camera auto white balance setting. @return 1 Auto white balance is enabled. @return 0 Auto white balance is disabled. @return Negative Error */ int pixy_cam_get_auto_white_balance(); /** @brief Get pixy camera white balance() @return Composite value for RGB white balance: white balance = green_value + (red_value << 8) + (blue << 16) */ uint32_t pixy_cam_get_white_balance_value(); /** @brief Set pixy camera white balance. @param[in] red Red white balance value. @param[in] green Green white balance value. @param[in] blue Blue white balance value. @return 0 Success @return Negative Error */ int pixy_cam_set_white_balance_value(uint8_t red, uint8_t green, uint8_t blue); /** @brief Enable or disable pixy camera auto exposure compensation. @param[in] enable 0: Disable auto exposure compensation. 1: Enable auto exposure compensation. @return 0 Success @return Negative Error */ int pixy_cam_set_auto_exposure_compensation(uint8_t enable); /** @brief Get pixy camera auto exposure compensation setting. @return 1 Auto exposure compensation enabled. @return 0 Auto exposure compensation disabled. @return Negative Error */ int pixy_cam_get_auto_exposure_compensation(); /** @brief Set pixy camera exposure compensation. @param[in] gain Camera gain. @param[in] comp Camera exposure compensation. @return 0 Success @return Negative Error */ int pixy_cam_set_exposure_compensation(uint8_t gain, uint16_t comp); /** @brief Get pixy camera exposure compensation. @param[out] gain Camera gain. @param[out] comp Camera exposure compensation. @return 0 Success @return Negative Error */ int pixy_cam_get_exposure_compensation(uint8_t * gain, uint16_t * comp); /** @brief Set pixy camera brightness. @param[in] brightness Brightness value. @return 0 Success @return Negative Error */ int pixy_cam_set_brightness(uint8_t brightness); /** @brief Get pixy camera brightness. @return Non-negative Brightness value. @return Negative Error */ int pixy_cam_get_brightness(); /** @brief Get pixy servo axis position. @param channel Channel value. Range: [0, 1] @return Position of channel. Range: [0, 999] @return Negative Error */ int pixy_rcs_get_position(uint8_t channel); /** @brief Set pixy servo axis position. @param channel Channel value. Range: [0, 1] @param position Position value of the channel. Range: [0, 999] @return 0 Success @return Negative Error */ int pixy_rcs_set_position(uint8_t channel, uint16_t position); /** @brief Set pixy servo pulse width modulation (PWM) frequency. @param frequency Range: [20, 300] Hz Default: 50 Hz */ int pixy_rcs_set_frequency(uint16_t frequency); /** @brief Get pixy firmware version. @param[out] major Major version component @param[out] minor Minor version component @param[out] build Build identifier @return 0 Success @return Negative Error */ int pixy_get_firmware_version(uint16_t * major, uint16_t * minor, uint16_t * build); /*@}*/ #ifdef __cplusplus } #endif #endif