예제 #1
0
파일: param.cpp 프로젝트: AndriiDSD/pixy
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;	
}
예제 #2
0
파일: param.cpp 프로젝트: Neon22/pixy
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;	
}