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; }
//------------------------------------------------------------------------------ //! 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; }