// Read the gyroscope data
void FXAS21002C::readGyroData()
{
	uint8_t rawData[6];  // x/y/z gyro register data stored here
	readRegs(FXAS21002C_H_OUT_X_MSB, 6, &rawData[0]);  // Read the six raw data registers into data array
	gyroData.x = ((int16_t)( rawData[0] << 8 | rawData[1])) >> 2;
	gyroData.y = ((int16_t)( rawData[2] << 8 | rawData[3])) >> 2;
	gyroData.z = ((int16_t)( rawData[4] << 8 | rawData[5])) >> 2;
}
void FXOS8700Q::disable(void) const
{
    uint8_t data[2];
    readRegs(FXOS8700Q_CTRL_REG1, &data[1], 1);
    data[1] &= 0xFE;
    data[0] = FXOS8700Q_CTRL_REG1;
    writeRegs(data, sizeof(data));
}
示例#3
0
// Read the magnometer data
void FXOS8700CQ::readMagData()
{
	uint8_t rawData[6];  // x/y/z accel register data stored here

	readRegs(FXOS8700CQ_M_OUT_X_MSB, 6, &rawData[0]);  // Read the six raw data registers into data array
	magData.x = ((int16_t) rawData[0] << 8 | rawData[1]) >> 2;
	magData.y = ((int16_t) rawData[2] << 8 | rawData[3]) >> 2;
	magData.z = ((int16_t) rawData[4] << 8 | rawData[5]) >> 2;
}
示例#4
0
void MCP79410_getDate (MCP79410_t *rtc, RTC_DateTime_t *dateTime)
{
    readRegs(rtc->twi, MCP79410_TIME_ADDR, 7);
    uint8_t *ptr = regsBuffer+MCP79410_TIME_ADDR;
    dateTime->seconds_bcd = (*ptr++) & 0x7F;
    dateTime->minutes_bcd = (*ptr++) & 0x7F;
    dateTime->hours_bcd = (*ptr++) & 0x3F;
    dateTime->weekday = (*ptr++) & 0x07;
    dateTime->day_bcd = (*ptr++) & 0x3F;
    dateTime->month_bcd = (*ptr++) & 0x1F;
    dateTime->year_bcd = (*ptr);
}
示例#5
0
static void MCP79410_setAlarm (MCP79410_t *rtc, uint8_t baseAddr, RTC_DateTime_t *dateTime, uint8_t alarmMask)
{
    readRegs(rtc->twi, baseAddr, 6);
    uint8_t *ptr = regsBuffer+baseAddr;
    *ptr = dateTime->seconds_bcd & 0x7F;
    ptr ++;
    *ptr++ = dateTime->minutes_bcd & 0x7F;
    *ptr = (*ptr & 0x40) | (dateTime->hours_bcd & 0x3F);
    ptr ++;
    *ptr++ = (alarmMask & 0xF4) | (dateTime->weekday & 0x07);
    *ptr++ = dateTime->day_bcd & 0x3F;
    *ptr++ = dateTime->month_bcd & 0x1F;
    writeRegs(rtc->twi, baseAddr, 6);
}
示例#6
0
CompassVec Compass::getMeasurements()
{
  byte buf[6];

  //writeReg(2, 1);
  //delay(10);

  readRegs(COMPASS_REG_DATA_OUT_X, 6, buf);

  float x, y, z;
  x = (float)makeI16(buf[0], buf[1]);
  z = (float)makeI16(buf[2], buf[3]);
  y = (float)makeI16(buf[4], buf[5]);

  CompassVec v(x, y, z);
  return applyCalibration(v);
}
示例#7
0
void MCP79410_setDate (MCP79410_t *rtc, RTC_DateTime_t *dateTime)
{
    readRegs(rtc->twi, MCP79410_TIME_ADDR, 7);
    uint8_t *ptr = regsBuffer+MCP79410_TIME_ADDR;
    *ptr = (*ptr & 0x80) | (dateTime->seconds_bcd & 0x7F);
    ptr ++;
    *ptr++ = dateTime->minutes_bcd & 0x7F;
    *ptr = (*ptr & 0x40) | (dateTime->hours_bcd & 0x3F);
    ptr ++;
    *ptr = (*ptr & 0xF4) | (dateTime->weekday & 0x07);
    ptr ++;
    *ptr++ = dateTime->day_bcd & 0x3F;
    *ptr = (*ptr & 0xE0) | (dateTime->month_bcd & 0x1F);
    ptr ++;
    *ptr = dateTime->year_bcd;
    writeRegs(rtc->twi, MCP79410_TIME_ADDR, 7);
}
void FXAS21002C::calibrate(float * gBias)
{
  int32_t gyro_bias[3] = {0, 0, 0};
  uint16_t ii, fcount;
  int16_t temp[3];
  
  // Clear all interrupts by reading the data output and STATUS registers
  //readGyroData(temp);
  readReg(FXAS21002C_H_STATUS);
  
  standby();  // Must be in standby to change registers

  writeReg(FXAS21002C_H_CTRL_REG1, 0x08);   // select 50 Hz ODR
  fcount = 50;                                     // sample for 1 second
  writeReg(FXAS21002C_H_CTRL_REG0, 0x03);   // select 200 deg/s full scale
  uint16_t gyrosensitivity = 41;                   // 40.96 LSB/deg/s

  active();  // Set to active to start collecting data
   
  uint8_t rawData[6];  // x/y/z FIFO accel data stored here
  for(ii = 0; ii < fcount; ii++)   // construct count sums for each axis
  {
  readRegs(FXAS21002C_H_OUT_X_MSB, 6, &rawData[0]);  // Read the FIFO data registers into data array
  temp[0] = ((int16_t)( rawData[0] << 8 | rawData[1])) >> 2;
  temp[1] = ((int16_t)( rawData[2] << 8 | rawData[3])) >> 2;
  temp[2] = ((int16_t)( rawData[4] << 8 | rawData[5])) >> 2;
  
  gyro_bias[0] += (int32_t) temp[0];
  gyro_bias[1] += (int32_t) temp[1];
  gyro_bias[2] += (int32_t) temp[2];
  
  delay(25); // wait for next data sample at 50 Hz rate
  }
 
  gyro_bias[0] /= (int32_t) fcount; // get average values
  gyro_bias[1] /= (int32_t) fcount;
  gyro_bias[2] /= (int32_t) fcount;
  
  gBias[0] = (float)gyro_bias[0]/(float) gyrosensitivity; // get average values
  gBias[1] = (float)gyro_bias[1]/(float) gyrosensitivity; // get average values
  gBias[2] = (float)gyro_bias[2]/(float) gyrosensitivity; // get average values

  ready();  // Set to ready
}
示例#9
0
int run_debugger(pid_t pid) 
{
    pid_t r_pid;
    int status;
    REGS regs;
    procmsg("[+] debugger start...\n");
    printf("[+] start to attach process pid %d\n",pid);
    /* attach process */
    if( -1 == attach_pid(pid)) 
    {
        printf("[-] fail to attach process pid %d\n",pid);
        return -1;
    }
    printf("[+] success to attach process pid %d\n",pid);
    
    if(-1 == (r_pid = waitpid(pid,&status,__WALL))){
        perror("waitpid error");
        return -1;
    }
    if(WIFSTOPPED(status)) 
    { 
        printf("[+] ****** attaching to  process pid %d\n",r_pid);
    
        /* read tracee regs info */
        readRegs(pid, &regs);
        
        printf("press any key to detach:");
        getchar();
    
        printf("[+] start to detach process pid %d\n",pid);
        /* detach process */
        if( -1 == detach_pid(pid)) 
        {
            printf("[-] fail to detach process pid %d\n",pid);
            return -1;
        }
        printf("[+] success to detach process pid %d\n",pid);
    }

    return 0;
}
示例#10
0
int16_t FXOS8700Q::getSensorAxis(uint8_t addr) const
{
    uint8_t res[2];
    readRegs(addr, res, sizeof(res));
    return static_cast<int16_t>((res[0] << 8) | res[1]);
}
示例#11
0
uint8_t FXOS8700Q::whoAmI() const
{
    uint8_t who_am_i = 0;
    readRegs(FXOS8700Q_WHOAMI, &who_am_i, sizeof(who_am_i));
    return who_am_i;
}
示例#12
0
uint32_t FXOS8700Q::dataReady(void) const
{
    uint8_t stat = 0;
    readRegs(FXOS8700Q_STATUS, &stat, 1);
    return (uint32_t)stat;
}