295 lines
8.7 KiB
C
295 lines
8.7 KiB
C
//
|
|
// 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 <stdint.h>
|
|
#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
|