Integrated pixy into emulator. Pixy is no longer in the common/libs folder but in emulator/libs and discovery/libs
This commit is contained in:
150
emulator/libs/Pixy/hello_pixy.cpp
Normal file
150
emulator/libs/Pixy/hello_pixy.cpp
Normal file
@@ -0,0 +1,150 @@
|
||||
//
|
||||
// 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
|
||||
//
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include "pixy.h"
|
||||
|
||||
#define BLOCK_BUFFER_SIZE 25
|
||||
|
||||
// Pixy Block buffer //
|
||||
struct Block blocks[BLOCK_BUFFER_SIZE];
|
||||
|
||||
static bool run_flag = true;
|
||||
|
||||
void handle_SIGINT(int unused)
|
||||
{
|
||||
// On CTRL+C - abort! //
|
||||
|
||||
run_flag = false;
|
||||
}
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
int i = 0;
|
||||
int index;
|
||||
int blocks_copied;
|
||||
int pixy_init_status;
|
||||
char buf[128];
|
||||
|
||||
// Catch CTRL+C (SIGINT) signals //
|
||||
signal(SIGINT, handle_SIGINT);
|
||||
|
||||
printf("Hello Pixy:\n libpixyusb Version: %s\n", __LIBPIXY_VERSION__);
|
||||
|
||||
// Connect to Pixy //
|
||||
pixy_init_status = pixy_init();
|
||||
|
||||
// Was there an error initializing pixy? //
|
||||
if(pixy_init_status != 0)
|
||||
{
|
||||
// Error initializing Pixy //
|
||||
printf("pixy_init(): ");
|
||||
pixy_error(pixy_init_status);
|
||||
|
||||
return pixy_init_status;
|
||||
}
|
||||
|
||||
// Request Pixy firmware version //
|
||||
{
|
||||
uint16_t major;
|
||||
uint16_t minor;
|
||||
uint16_t build;
|
||||
int return_value;
|
||||
|
||||
return_value = pixy_get_firmware_version(&major, &minor, &build);
|
||||
|
||||
if (return_value) {
|
||||
// Error //
|
||||
printf("Failed to retrieve Pixy firmware version. ");
|
||||
pixy_error(return_value);
|
||||
|
||||
return return_value;
|
||||
} else {
|
||||
// Success //
|
||||
printf(" Pixy Firmware Version: %d.%d.%d\n", major, minor, build);
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
// Pixy Command Examples //
|
||||
{
|
||||
int32_t response;
|
||||
int return_value;
|
||||
|
||||
// Execute remote procedure call "cam_setAWB" with one output (host->pixy) parameter (Value = 1)
|
||||
//
|
||||
// Parameters: Notes:
|
||||
//
|
||||
// pixy_command("cam_setAWB", String identifier for remote procedure
|
||||
// 0x01, Length (in bytes) of first output parameter
|
||||
// 1, Value of first output parameter
|
||||
// 0, Parameter list seperator token (See value of: END_OUT_ARGS)
|
||||
// &response, Pointer to memory address for return value from remote procedure call
|
||||
// 0); Parameter list seperator token (See value of: END_IN_ARGS)
|
||||
//
|
||||
|
||||
// Enable auto white balance //
|
||||
pixy_command("cam_setAWB", UINT8(0x01), END_OUT_ARGS, &response, END_IN_ARGS);
|
||||
|
||||
// Execute remote procedure call "cam_getAWB" with no output (host->pixy) parameters
|
||||
//
|
||||
// Parameters: Notes:
|
||||
//
|
||||
// pixy_command("cam_setAWB", String identifier for remote procedure
|
||||
// 0, Parameter list seperator token (See value of: END_OUT_ARGS)
|
||||
// &response, Pointer to memory address for return value from remote procedure call
|
||||
// 0); Parameter list seperator token (See value of: END_IN_ARGS)
|
||||
//
|
||||
|
||||
// Get auto white balance //
|
||||
return_value = pixy_command("cam_getAWB", END_OUT_ARGS, &response, END_IN_ARGS);
|
||||
|
||||
// Set auto white balance back to disabled //
|
||||
pixy_command("cam_setAWB", UINT8(0x00), END_OUT_ARGS, &response, END_IN_ARGS);
|
||||
}
|
||||
#endif
|
||||
|
||||
printf("Detecting blocks...\n");
|
||||
while(run_flag)
|
||||
{
|
||||
|
||||
// Wait for new blocks to be available //
|
||||
while(!pixy_blocks_are_new() && run_flag) {
|
||||
pixy_service();
|
||||
}
|
||||
|
||||
// Get blocks from Pixy //
|
||||
blocks_copied = pixy_get_blocks(BLOCK_BUFFER_SIZE, &blocks[0]);
|
||||
|
||||
if(blocks_copied < 0) {
|
||||
// Error: pixy_get_blocks //
|
||||
printf("pixy_get_blocks(): ");
|
||||
pixy_error(blocks_copied);
|
||||
}
|
||||
|
||||
// Display received blocks //
|
||||
printf("frame %d:\n", i);
|
||||
for(index = 0; index != blocks_copied; ++index) {
|
||||
blocks[index].print(buf);
|
||||
printf(" %s\n", buf);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
pixy_close();
|
||||
}
|
||||
Reference in New Issue
Block a user