Ejemplo n.º 1
0
int32_t cam_getFrameChirp(const uint8_t &type, const uint16_t &xOffset, const uint16_t &yOffset, const uint16_t &xWidth, const uint16_t &yWidth, Chirp *chirp)
{
	int32_t result, prebuf;
	uint8_t *frame = (uint8_t *)SRAM0_LOC;

	// force an error to get prebuf length
	CRP_RETURN(chirp, USE_BUFFER(SRAM0_SIZE, frame), HTYPE(0), UINT16(0), UINT16(0), UINTS8(0, 0), END);
	prebuf = chirp->getPreBufLen();

	if ((result=cam_getFrame(frame+prebuf, SRAM0_SIZE-prebuf, type, xOffset, yOffset, xWidth, yWidth))>=0)
		// send frame, use in-place buffer	
		CRP_RETURN(chirp, USE_BUFFER(SRAM0_SIZE, frame), HTYPE(FOURCC('B','A','8','1')), UINT16(xWidth), UINT16(yWidth), UINTS8(xWidth*yWidth, frame+prebuf), END);

	return result;
}
Ejemplo n.º 2
0
int32_t exec_versionType(Chirp *chirp)
{
	if (chirp)
		CRP_RETURN(chirp, STRING(FW_TYPE), END);

	return 0;
}
Ejemplo n.º 3
0
int32_t  prm_getAll(const uint16_t &index, Chirp *chirp)
{
	int res;
	uint16_t i;
	uint32_t len;
	uint8_t *data, argList[CRP_MAX_ARGS];
	ParamRecord *rec;
	Shadow *shadow;

	for (i=0, rec=(ParamRecord *)PRM_FLASH_LOC; rec->crc!=0xffff && rec<(ParamRecord *)PRM_ENDREC; i++, rec++)
	{
		if(i==index)
		{
			shadow = prm_findShadow(prm_getId(rec));

			if (shadow && shadow->data)
			{
				len = shadow->len;
				data = shadow->data;
			}
			else
			{
				len = rec->len;
				data = (uint8_t *)rec+prm_getDataOffset(rec);
			}
			res = Chirp::getArgList(data, rec->len, argList);
			if (res<0)
				return res;
			CRP_RETURN(chirp, UINT32(rec->flags), STRING(argList), STRING(prm_getId(rec)), STRING(prm_getDesc(rec)),  UINTS8(len, data), END);
			return 0;
		}
	}
	return -1;	
}
Ejemplo n.º 4
0
int32_t exec_version(Chirp *chirp)
{
	uint16_t ver[] = {FW_MAJOR_VER, FW_MINOR_VER, FW_BUILD_VER};

	cprintf("Pixy firmware version %d.%d.%d\n", ver[0], ver[1], ver[2]);
	if (chirp)
		CRP_RETURN(chirp, UINTS16(sizeof(ver), ver), END);

	return 0;
}
Ejemplo n.º 5
0
int32_t prm_getChirp(const char *id, Chirp *chirp)
{
	ParamRecord *rec;

	Shadow *shadow = prm_findShadow(id);

	if (shadow && shadow->data)
		CRP_RETURN(chirp, UINTS8(shadow->len, shadow->data), END);
	else
	{
		rec = prm_find(id);
		if (rec==NULL)
			return -1;
	
		CRP_RETURN(chirp, UINTS8(rec->len, (uint8_t *)rec+prm_getDataOffset(rec)), END);
	}

	return 0;
}
Ejemplo n.º 6
0
int32_t exec_getAction(const uint16_t &index, Chirp *chirp)
{
	int n = sizeof(actions)/sizeof(ActionScriptlet);

	if (index>=n)
		return -1;

	if (chirp)
		CRP_RETURN(chirp, STRING(actions[index].action), STRING(actions[index].scriptlet), END);

	return 0;		
}
Ejemplo n.º 7
0
int32_t prm_getChirp(const char *id, Chirp *chirp)
{
	ParamRecord *rec;

	rec = prm_find(id);
	if (rec==NULL)
		return -1;
	
	CRP_RETURN(chirp, UINTS8(rec->len, (uint8_t *)rec+prm_getDataOffset(rec)), END);

	return 0;
}
Ejemplo n.º 8
0
int32_t  prm_getInfo(const char *id, Chirp *chirp)
{
	ParamRecord *rec;

	for (rec=(ParamRecord *)PRM_FLASH_LOC; rec->crc!=0xffff && rec<(ParamRecord *)PRM_ENDREC; rec++)
	{
		if(strcmp(id, (char *)rec->data)==0)
		{
			CRP_RETURN(chirp, STRING(prm_getDesc(rec)));
			return 0;
		}
	}
	return -1;	
}
Ejemplo n.º 9
0
int32_t  prm_getAll(const uint16_t &index, Chirp *chirp)
{
	uint16_t i;
	ParamRecord *rec;

	for (i=0, rec=(ParamRecord *)PRM_FLASH_LOC; rec->crc!=0xffff && rec<(ParamRecord *)PRM_ENDREC; i++, rec++)
	{
		if(i==index)
		{
			CRP_RETURN(chirp, STRING(prm_getId(rec)), STRING(prm_getDesc(rec)),  UINTS8(rec->len, (uint8_t *)rec+prm_getDataOffset(rec)));
			return 0;
		}
	}
	return -1;	
}
int cc_sendBlobs(Chirp *chirp, const BlobA *blobs, uint32_t len, const BlobB *ccBlobs, uint32_t ccLen, uint8_t renderFlags)
{
	CRP_RETURN(chirp, HTYPE(FOURCC('C','C','B','2')), HINT8(renderFlags), HINT16(CAM_RES2_WIDTH), HINT16(CAM_RES2_HEIGHT), UINTS16(len*sizeof(BlobA)/sizeof(uint16_t), blobs), UINTS16(ccLen*sizeof(BlobB)/sizeof(uint16_t), ccBlobs), END);
	return 0;
}
Ejemplo n.º 11
0
int32_t cc_getRLSCCChirp(Chirp *chirp)
{
	
	int16_t* c_components = new int16_t[MAX_BLOBS*4];
	
	
	uint32_t numRls, result;//, prebuf;
	uint32_t *memory = (uint32_t *)RLS_MEMORY;
	result = cc_getRLSFrame(memory, LUT_MEMORY, &numRls);
	
	CBlobAssembler blobber;
	
	int32_t row;
	uint32_t i, startCol, length;
	uint8_t model;

	for (i=0, row=-1; i<numRls; i++)
	{
			if (memory[i]==0)
			{
					row++;
					continue;
			}
			model = memory[i]&0x03;
			memory[i] >>= 3;
			startCol = memory[i]&0x1ff;
			memory[i] >>= 9;
			length = memory[i]&0x1ff;
			if(!handleRL(&blobber, model, row, startCol, length))
				break;
	}
	
	blobber.EndFrame();
	blobber.SortFinished();
	
	//
	// Take Finished blobs and return with chirp
	//
	CBlob *blob, *temp;
	blob = blobber.finishedBlobs;
	
	uint32_t cc_num = 0;
	temp = blob;
	while (temp)
	{
		int16_t top, right, bottom, left;
		temp->getBBox(left, top, right, bottom);
		
		// Don't want objects with area less than 9...
		if ((right-left)*(bottom-top) < 9)
			break;
		
		temp = temp->next;
		cc_num++;
	}
	
	// Remove the rest that we don't care about
	/*while(temp)
	{
		CBlob *next = temp->next;
		temp->~CBlob();
		temp = NULL;
		temp = next;
	}*/
	
	cc_num = (cc_num < 15) ? cc_num : MAX_BLOBS;

	// Populate return w/ result
	//void* mem = malloc(sizeof(int16_t)*cc_num*4);
	//if (mem == NULL)
	//	int i = 0;
	//free(mem);
	//int16_t* c_components = new int16_t[cc_num*4];
	//g_mem += sizeof(int16_t)*cc_num*4;
	memset((void *)c_components, 0, sizeof(uint16_t)*cc_num*4);

	for (int i = 0; i < cc_num; i++)
	{
		int16_t top, right, bottom, left;
		blob->getBBox(left, top, right, bottom);
		c_components[(i*4)+0] = top;
		c_components[(i*4)+1] = right;
		c_components[(i*4)+2] = bottom;
		c_components[(i*4)+3] = left;

		blob = blob->next;
	}
	
	//CRP_RETURN(chirp, USE_BUFFER(SRAM0_SIZE, SRAM0_LOC), HTYPE(0), UINT16(0), UINT16(0), UINTS8(0, 0), END);
	//prebuf = chirp->getPreBufLen();
	
	blobber.Reset();
	
	CRP_RETURN(chirp, HTYPE(FOURCC('V','I','S','U')), UINTS16(cc_num*4, c_components), END);
	
	delete[] c_components;
	//g_mem -= sizeof(int16_t)*cc_num*4;

	return result;
}