Exemplo n.º 1
0
jdm_fshandle_t *
jdm_getfshandle( char *mntpnt )
{
	fshandle_t *fshandlep;
	size_t fshandlesz;
	char resolved[MAXPATHLEN];

	/* sanity checks */
	ASSERT( sizeof( fshandle_t ) == FSHANDLE_SZ );
	ASSERT( sizeof( filehandle_t ) == FILEHANDLE_SZ );
	ASSERT( sizeof( filehandle_t )
		-
		offsetofmember( filehandle_t, fh_pad )
		==
		FILEHANDLE_SZ_FOLLOWING );
	ASSERT( sizeofmember( filehandle_t, fh_pad ) == FILEHANDLE_SZ_PAD );
	ASSERT( FILEHANDLE_SZ_PAD == sizeof( int16_t ));

	fshandlep = NULL; /* for lint */
	fshandlesz = sizeof( *fshandlep );

	if (!realpath( mntpnt, resolved ))
		return NULL;

	if (path_to_fshandle( resolved, ( void ** )&fshandlep, &fshandlesz ))
		return NULL;

	assert( fshandlesz == sizeof( *fshandlep ));

	return ( jdm_fshandle_t * )fshandlep;
}
Exemplo n.º 2
0
//------------------------------------------------------------------------------
//! void CAN_UserProcessMsg(void)
//------------------------------------------------------------------------------
//! @brief	Processes incoming CAN messages
//------------------------------------------------------------------------------
void CAN_UserProcessMsg(void){
	RTC rtc;
	CANMsg_t msg;
	u8_t res=0;
	static u8_t toggle_led=0;
	CRCInit_t cfg= CRC32_CONFIG;
	u32_t cnt=0;


	res = CAN_UserRead(&msg);
	if(!res)
		return;

#if 0
	if(toggle_led){
		HW_SetLED (HW_LED_STATUS_2, HW_LED_GREEN);
		toggle_led = 0;
	}else{
		HW_SetLED (HW_LED_STATUS_2, HW_LED_ORANGE);
		toggle_led = 1;
	}
#endif

	if(msg.Id<INCOMING_CAN_ID_MIN || msg.Id>INCOMING_CAN_ID_MAX)
		return;

	switch(msg.Id){
	case SYM_OUT_IO:
		HW_SetDOUTn(HW_DOUT_1, (msg.Data.Data8[0] & 0x01));

		if (msg.Data.Data8[0] & 0x02)
			HW_GPS_PowerOn();
		else
			HW_GPS_PowerOff();
		break;

	case SYM_OUT_POWEROFF:
		if(msg.Data.Data8[0]&0x01)
			HW_SwitchOFF();
		break;

	case SYM_OUT_GYRO:
		MEMS_L3GD20_SetRange(msg.Data.Data8[0]&0x03);
		break;

	case SYM_OUT_ACC_SCALE:
		MEMS_BMC050_SetAccRange(msg.Data.Data8[0]&0x7);
		break;

	case SYM_OUT_SAVE_CFG:
		// only write configuration if LSB in lowest byte is set
		if(!(msg.Data.Data8[0]&0x1))
			break;

		MEMS_BMC050_GetAccCalTargets(	&cfg_data.Acc.cmp_target_x,
										&cfg_data.Acc.cmp_target_y,
										&cfg_data.Acc.cmp_target_z);
		MEMS_BMC050_GetAccRange(&cfg_data.Acc.range);
#if STORE_ACC_COMPENSATION_PERMANENT
		cfg_data.Acc.flags |= ACC_USE_EEPROM_RAW_COMPENSATION_VALUES;
		cfg_data.Acc.flags |= ACC_USE_EEPROM_FILT_COMPENSATION_VALUES;

		MEMS_BMC050_GetAccCalFiltValues(&cfg_data.Acc.cmp_filt_x,
										&cfg_data.Acc.cmp_filt_y,
										&cfg_data.Acc.cmp_filt_z);
		MEMS_BMC050_GetAccCalRawValues(	&cfg_data.Acc.cmp_raw_x,
										&cfg_data.Acc.cmp_raw_y,
										&cfg_data.Acc.cmp_raw_z);
#else
		cfg_data.Acc.flags = 0;
#endif

		MEMS_L3GD20_GetRange(&cfg_data.Gyro.range);

		res = CRC_Init(&cfg);
		if(res != CRC_ERR_OK)
			break;

		cnt = sizeof(cfg_data)-sizeofmember(S_CONFIG_DATA_t, crc32);
		res = CRC_CalcCRC((void*) &cfg_data, cnt, t_crc_8_bit, &cfg_data.crc32);
		if(res != CRC_ERR_OK)
					break;

		if(EEPROM_Write(EEPROM_INT, EEPROM_CFG_ADDR, &cfg_data,
				sizeof(cfg_data))!= EEPROM_ERR_OK){
			// write failed
		}
		if(EEPROM_FlushCache(EEPROM_INT)!= EEPROM_ERR_OK){
			// flush failed
		}
		break;

	case SYM_OUT_RTC_SET_TIME:
		rtc.sec = msg.Data.Data8[0] ;
		rtc.min	= msg.Data.Data8[1] ;
		rtc.hour = msg.Data.Data8[2] ;
		rtc.wday = msg.Data.Data8[3] ;
		rtc.mday = msg.Data.Data8[4] ;
		rtc.month = msg.Data.Data8[5] ;
		rtc.year = msg.Data.Data16[3] ;
		rtc_settime(&rtc);
		break;

	case SYM_OUT_RTC_ADOPT_GPS_TIME:
		if(!(msg.Data.Data8[0]&0x1))
			break;

		// only copy values if they are valid
		if((MAX7W_Readings.Validity & GPS_TIME_VALID)!=GPS_TIME_VALID)
			break;
		if((MAX7W_Readings.Validity & GPS_DATE_VALID)!=GPS_DATE_VALID)
			break;

		// get old values to keep day of week that was set before
		rtc_gettime(&rtc);

		rtc.sec = MAX7W_Readings.Time_Sec;
		rtc.min	= MAX7W_Readings.Time_Min;
		rtc.hour = MAX7W_Readings.Time_Hrs;
		rtc.mday = MAX7W_Readings.Date_DayOfMonth;
		rtc.month = MAX7W_Readings.Date_Month;
		rtc.year = MAX7W_Readings.Date_Year;
		rtc_settime(&rtc);
		break;

	case SYM_OUT_ACC_FAST_CALIBRATION:
		MEMS_BMC050_SetAccCalTargets(&msg.Data.Data8[0], &msg.Data.Data8[1], &msg.Data.Data8[2]);
		if(msg.Data.Data8[3]&0x1)
			MEMS_BMC050_StartFastAccCompensation();
		break;

	default:
		break;
	}

	return;
}