int active_g(int g)
{
	if ( g != 2 && g != 4 && g != 8 )
	{
		printf("Value of passed argument must be 2, 4 or 8\n");
		return -1;
	}
	
	//try to put the device into standby mode
	if (!standby())
		return -1;

	//chooses the g mode
	char addr = 0x0E;
	char n = 0b11111100;
	write_acc(addr, read_acc(addr) & n);

	if ( g == 4 )
	{
		n = 0b00000001;
		write_acc(addr, read_acc(addr) | n);
	}
	else if ( g == 8 )
	{
		n = 0b00000010;
		write_acc(addr, read_acc(addr) | n);
	}

	//try to put the device into active mode
	if (!active())
		return -1;
	return g;

}
A2dpAudioInterface::A2dpAudioStreamOut::~A2dpAudioStreamOut()
{
    LOGV("A2dpAudioStreamOut destructor");
    standby();
    close();
    LOGV("A2dpAudioStreamOut destructor returning from close()");
}
void FXAS21002C::init()
{
	standby();  // Must be in standby to change registers

	// Set up the full scale range to 250, 500, 1000, or 2000 deg/s.
	writeReg(FXAS21002C_H_CTRL_REG0, gyroFSR); 
	 // Setup the 3 data rate bits, 4:2
	if (gyroODR < 8) 
		writeReg(FXAS21002C_H_CTRL_REG1, gyroODR << 2);      

	// Disable FIFO, route FIFO and rate threshold interrupts to INT2, enable data ready interrupt, route to INT1
  	// Active HIGH, push-pull output driver on interrupts
  	writeReg(FXAS21002C_H_CTRL_REG2, 0x0E);

  	 // Set up rate threshold detection; at max rate threshold = FSR; rate threshold = THS*FSR/128
  	writeReg(FXAS21002C_H_RT_CFG, 0x07);         // enable rate threshold detection on all axes
  	writeReg(FXAS21002C_H_RT_THS, 0x00 | 0x0D);  // unsigned 7-bit THS, set to one-tenth FSR; set clearing debounce counter
  	writeReg(FXAS21002C_H_RT_COUNT, 0x04);       // set to 4 (can set up to 255)         
	// Configure interrupts 1 and 2
	//writeReg(CTRL_REG3, readReg(CTRL_REG3) & ~(0x02)); // clear bits 0, 1 
	//writeReg(CTRL_REG3, readReg(CTRL_REG3) |  (0x02)); // select ACTIVE HIGH, push-pull interrupts    
	//writeReg(CTRL_REG4, readReg(CTRL_REG4) & ~(0x1D)); // clear bits 0, 3, and 4
	//writeReg(CTRL_REG4, readReg(CTRL_REG4) |  (0x1D)); // DRDY, Freefall/Motion, P/L and tap ints enabled  
	//writeReg(CTRL_REG5, 0x01);  // DRDY on INT1, P/L and taps on INT2

	active();  // Set to active to start reading
}
Ejemplo n.º 4
0
/**
 *  writeTo - Write a word to specified address
 *  @addr: address to write to
 *  @value: value to store
 *
 *  Returns false if write did not complete.
 *
 *  Note: Make sure EEPROM is selected and writable before attempting
 *        to write. Use getReady() and stop() to select/deselect
 *        EEPROM.
 **/
bool EEPROMTest::writeTo(uint16_t addr, uint16_t value)
{
    writeOpAddr(WRITE_OPCODE, WRITE_OPCODE_BITS, addr, WRITE_ADDR_BITS);
    writeData(value);
    standby();
    return waitForCompletion();
}
Ejemplo n.º 5
0
// INITIALIZATION
//	This function initializes the MMA8452Q. It sets up the scale (either 2, 4,
//	or 8g), output data rate, portrait/landscape detection and tap detection.
//	It also checks the WHO_AM_I register to make sure we can communicate with
//	the sensor. Returns a 0 if communication failed, 1 if successful.
byte MMA8452Q::init(MMA8452Q_Scale fsr, MMA8452Q_ODR odr)
{
	scale = fsr; // Haul fsr into our class variable, scale
	
 	Wire.setModule(1);
	Wire.begin(); // Initialize I2C
	
	byte c = readRegister(WHO_AM_I);  // Read WHO_AM_I register
	
	if (c != 0x2A) // WHO_AM_I should always be 0x2A
	{
		return 0;
	}
	
	standby();  // Must be in standby to change registers
	
	setScale(scale);  // Set up accelerometer scale
	setODR(odr);  // Set up output data rate
	setupPL();  // Set up portrait/landscape detection
	// Multiply parameter by 0.0625g to calculate threshold.
	setupTap(0x80, 0x80, 0x08); // Disable x, y, set z to 0.5g
	
	active();  // Set to active to start reading
	
	return 1;
}
status_t A2dpAudioInterface::A2dpAudioStreamOut::setSuspended(bool onOff)
{
    LOGV("setSuspended %d", onOff);
    mSuspended = onOff;
    standby();
    return NO_ERROR;
}
Ejemplo n.º 7
0
void r8712_eeprom_write16(struct _adapter *padapter, u16 reg, u16 data)
{
	u8 x;
	u8 tmp8_ori, tmp8_new, tmp8_clk_ori, tmp8_clk_new;

	tmp8_ori = r8712_read8(padapter, 0x102502f1);
	tmp8_new = tmp8_ori & 0xf7;
	if (tmp8_ori != tmp8_new)
		r8712_write8(padapter, 0x102502f1, tmp8_new);
	tmp8_clk_ori = r8712_read8(padapter, 0x10250003);
	tmp8_clk_new = tmp8_clk_ori | 0x20;
	if (tmp8_clk_new != tmp8_clk_ori)
		r8712_write8(padapter, 0x10250003, tmp8_clk_new);
	x = r8712_read8(padapter, EE_9346CR);
	x &= ~(_EEDI | _EEDO | _EESK | _EEM0);
	x |= _EEM1 | _EECS;
	r8712_write8(padapter, EE_9346CR, x);
	shift_out_bits(padapter, EEPROM_EWEN_OPCODE, 5);
	if (padapter->EepromAddressSize == 8)	/*CF+ and SDIO*/
		shift_out_bits(padapter, 0, 6);
	else	/* USB */
		shift_out_bits(padapter, 0, 4);
	standby(padapter);
	/* Erase this particular word.  Write the erase opcode and register
	 * number in that order. The opcode is 3bits in length; reg is 6
	 * bits long.
	 */
	standby(padapter);
	/* write the new word to the EEPROM
	 * send the write opcode the EEPORM
	 */
	shift_out_bits(padapter, EEPROM_WRITE_OPCODE, 3);
	/* select which word in the EEPROM that we are writing to. */
	shift_out_bits(padapter, reg, padapter->EepromAddressSize);
	/* write the data to the selected EEPROM word. */
	shift_out_bits(padapter, data, 16);
	if (wait_eeprom_cmd_done(padapter)) {
		standby(padapter);
		shift_out_bits(padapter, EEPROM_EWDS_OPCODE, 5);
		shift_out_bits(padapter, reg, 4);
		eeprom_clean(padapter);
	}
	if (tmp8_clk_new != tmp8_clk_ori)
		r8712_write8(padapter, 0x10250003, tmp8_clk_ori);
	if (tmp8_new != tmp8_ori)
		r8712_write8(padapter, 0x102502f1, tmp8_ori);
}
Ejemplo n.º 8
0
    void testEraseAll()
    {
        //unused: int i;
        uint16_t addr = 0x1F;

        getReady();
        // Enable write
        writeOpAddr(EWEN_OPCODE, EWEN_OPCODE_BITS, 0, EWEN_ADDR_BITS);
        standby();
        // Fill all memory
        writeOpAddr(WRITE_OPCODE, WRITE_OPCODE_BITS, addr, WRITE_ADDR_BITS);
        writeData(0);
        standby();

        if (waitForCompletion()) {
            stop();
            getReady();
            // Write successful -- verify random location
            CPPUNIT_ASSERT_EQUAL((uint16_t)0, readAt(addr));
            stop();
            getReady();

            writeOpAddr(ERAL_OPCODE, ERAL_OPCODE_BITS, addr, ERAL_ADDR_BITS);
            standby();

            if (!waitForCompletion()) {
                CPPUNIT_FAIL("EEPROM erase was not completed");
                stop();
                return;
            }

            standby();

            writeOpAddr(EWDS_OPCODE, EWDS_OPCODE_BITS, 0, EWDS_ADDR_BITS);
            stop();

            getReady();
            for ( addr=0; addr < EEPROM93C46::SIZE; addr++ ) {
                CPPUNIT_ASSERT_EQUAL((uint16_t)0xFFFF, readAt(addr));
            }
        }
        else {
            CPPUNIT_FAIL("EEPROM write was not completed");
        }
        stop();
    }
void tick_handler(struct tm *tick_time, TimeUnits units_changed){
  //check if should be in standby
  standby();
  
  //update the time
  if (standbyFlag==false){
    updateTime();
  }
}
Ejemplo n.º 10
0
int main() { // line 25
	
	setup();
	timerSetup();
	
	while(1) {
		standby();
	}
	return 0;
}
Ejemplo n.º 11
0
/**
 *  waitForCompletion - Wait until EEPROM clears the busy bit
 *
 *  Returns false if the EEPROM is still busy.
 */
bool EEPROMTest::waitForCompletion() {
    for (int i = 0; i < 200; i++) {
        if (eeprom->read() & DO) {
            standby();
            return true;
        }
        // Wait 50 usec;
    }

    return false;
}
Ejemplo n.º 12
0
    void testRead()
    {
        getReady();
        for ( uint32_t wordAddr=0; wordAddr < EEPROM93C46::SIZE; wordAddr++ ) {
            shiftOutBits(READ_OPCODE, READ_OPCODE_BITS);
            shiftOutBits(wordAddr, READ_ADDR_BITS);

            CPPUNIT_ASSERT_EQUAL( initialContent[wordAddr], (uint16_t)wordAddr );
            CPPUNIT_ASSERT_EQUAL( initialContent[wordAddr], shiftInBits(DATA_BITS) );
            standby();
        }
        stop();
    }
Ejemplo n.º 13
0
void really(int i)
{
	if (i < 3)
	{
		puts("Try again...");
	}
	else
	{
		puts("Come back after learning to read.");
		standby();
		exit(0);
	}
}
Ejemplo n.º 14
0
static u16 wait_eeprom_cmd_done(struct _adapter *padapter)
{
	u8	x;
	u16	i;

	standby(padapter);
	for (i = 0; i < 200; i++) {
		x = r8712_read8(padapter, EE_9346CR);
		if (x & _EEDO)
			return true;
		udelay(CLOCK_RATE);
	}
	return false;
}
Ejemplo n.º 15
0
void suspend_power_down(void)
{
#ifdef NO_SUSPEND_POWER_DOWN
    ;
#elif defined(SUSPEND_MODE_NOPOWERSAVE)
    ;
#elif defined(SUSPEND_MODE_STANDBY)
    standby();
#elif defined(SUSPEND_MODE_IDLE)
    idle();
#else
    power_down(WDTO_15MS);
#endif
}
Ejemplo n.º 16
0
void error(char *msg)
{
	unsigned char i;
	standby();
	battery_state = STATE_ERROR;
	
	for(i=0; i<8 ;i++)
	{
		error_msg[i] = msg[i];
	}
	
	RESET_LEDS();
	SET_LED(LED_R);
}
Ejemplo n.º 17
0
    void testWrite()
    {
        //unused: int i;
        uint16_t wordAddr;

        getReady();
        // Enable write
        writeOpAddr(EWEN_OPCODE, EWEN_OPCODE_BITS, 0, EWEN_ADDR_BITS);
        standby();

        for ( wordAddr=0; wordAddr < EEPROM93C46::SIZE; wordAddr++ ) {
            //writeOpAddr(WRITE_OPCODE, WRITE_OPCODE_BITS, (uint16_t)wordAddr, WRITE_ADDR_BITS);
            writeTo(wordAddr, 0x3F00 - (wordAddr<<8));
            standby();

            if (!waitForCompletion()) {
                CPPUNIT_FAIL("EEPROM write was not completed");
                stop();
                return;
            }
            standby();
        }

        // Disable write
        writeOpAddr(EWDS_OPCODE, EWDS_OPCODE_BITS, 0, EWDS_ADDR_BITS);

        stop();

        // Now check the result
        getReady();
        writeOpAddr(READ_OPCODE, READ_OPCODE_BITS, 0, READ_ADDR_BITS);
        for ( wordAddr=0; wordAddr < EEPROM93C46::SIZE; wordAddr++ ) {
            CPPUNIT_ASSERT_EQUAL((uint16_t)(0x3F00 - (wordAddr<<8)), shiftInBits(DATA_BITS) );
        }
        stop();
    }
Ejemplo n.º 18
0
// Run the function of the next state
void state() {

    switch (NEXT_STATE) {

    case STATE_NO_SD:
        STATE = STATE_NO_SD;
        noSD();
        break;

    case STATE_SD_SETUP:
        STATE = STATE_SD_SETUP;
        sdSetup();
        break;

    case STATE_STANDBY:
        STATE = STATE_STANDBY;
        standby();
        break;

    case STATE_DATA_SETUP:
        STATE = STATE_DATA_SETUP;
        dataSetup();
        break;

    case STATE_DATA_COLLECT:
        STATE = STATE_DATA_COLLECT;
        dataCollect_fixed();
        break;

    case STATE_DATA_CONCLUDE:
        STATE = STATE_DATA_CONCLUDE;
        dataConclude();
        break;

    case STATE_WARNING:
        STATE = STATE_WARNING;
        warning();
        break;

    case STATE_ERROR:
        STATE = STATE_ERROR;
        error();
        break;

    } // End of switch

} // End of state
Ejemplo n.º 19
0
void main(void)
{
	P2SEL=0;
	P2SELH=0;
	P2DIR=0xFF;
	i2c_init();
	i2c_WriteOneByte(0x00,0x0E);
	standby();
	for (;;)
	{
		active();
		Read_X_Value();
		Read_Y_Value();
		Read_Z_Value();
		_delay_cycles(500000);
	}
}
Ejemplo n.º 20
0
void FXOS8700CQ::init()
{
	reset();
	delayMicroseconds(1);

	standby();  // Must be in standby to change registers

	writeReg(FXOS8700CQ_XYZ_DATA_CFG, 0x00);  // Choose the full scale range to 2, 4, or 8 g.

	// write 0001 1111 = 0x1F to magnetometer control register 1
	// [7]: m_acal=1: auto calibration enabled
	// [6]: m_rst=0: no one-shot magnetic reset
	// [5]: m_ost=0: no one-shot magnetic measurement
	// [4-2]: m_os=111=7: 8x oversampling (for 200Hz) to reduce magnetometer noise
	// [1-0]: m_hms=11=3: select hybrid mode with accel and magnetometer active
	writeReg(FXOS8700CQ_M_CTRL_REG1, 0x1F);


	// write 0010 0000 = 0x20 to magnetometer control register 2
	// [7]: reserved
	// [6]: reserved
	// [5]: hyb_autoinc_mode=1 to map the magnetometer registers to follow the
	// accelerometer registers
	// [4]: m_maxmin_dis=0 to retain default min/max latching even though not used
	// [3]: m_maxmin_dis_ths=0
	// [2]: m_maxmin_rst=0
	// [1-0]: m_rst_cnt=00 to enable magnetic reset each cycle
	//writeReg(FXOS8700CQ_M_CTRL_REG2, 0x20);

//writeReg(FXOS8700CQ_CTRL_REG2, 0x02); // High Resolution mode

	//writeReg(FXOS8700CQ_CTRL_REG3, 0x01); // Open-drain, active low interrupt

	// write 0000 1100 = 0x0C to accelerometer control register 1
	// [7-6]: aslp_rate=00
	// [5-3]: dr=001 for 200Hz data rate (when in hybrid mode)
	// [2]: lnoise=1 for low noise mode
	// [1]: f_read=0 for normal 16 bit reads
	// [0]: active=0
	writeReg(FXOS8700CQ_CTRL_REG1, 0x0C);
//writeReg(FXOS8700CQ_CTRL_REG1, 0x34);

	active();  // Set to active to start reading
}
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
}
Ejemplo n.º 22
0
void I2C_EE_Upload(void)
{
	int percentage;
	uint8_t byte;
	unsigned int LEDbackup;
	int i;
	
	LEDbackup=LEDbyte;
	clear();
	write('S');
	write('e');
	write('n');
	write('d');
	write('i');
	write('n');
	write('g');
	
	for (i=CONFIGLENGTH;i<EEPROM_BYTES;i++)
	{
		if((i%100)==0){
		setCursor(0,1);
		percentage = (100*i)/(EEPROM_BYTES-CONFIGLENGTH);
			writenumber(percentage);
//		write('0'+(i/(EEPROM_BYTES-CONFIGLENGTH)*100)/100);
//		write('0'+((i/(EEPROM_BYTES-CONFIGLENGTH)*100)/10)%10);
//		write('0'+(i/(EEPROM_BYTES-CONFIGLENGTH)*100)%10);
		write('%');
		write(' ');
		write(' ');}
		LEDbyte = LEDGripple[(i/80)%10];
		setLEDS();
		I2C_EE_BufferRead(&byte, i, 1);
		UART_send_byte(byte);
	}
		clear();

	delay_ms(2000);
	clear();
	standby();

	LEDbyte=LEDbackup;
	setLEDS();
}
/**
* \brief begin function - must be called before using other functions
*
* This function enables the magnetometer.
* The magnetometer is an I2C device so we initialise the I2C communications,
* make contact with the magnetometer, and check that it's what we think it is.
*
* We set the sampling rate to 10Hz, but where the values are from a heavily
* oversampled set of values 
*/
void EngduinoMagnetometerClass::begin() 
{	uint8_t reg;

	// Join I2C bus as master
	//
	Wire.begin();
	
	// Check to see that the device is there
	//
	Wire.beginTransmission(FXMS3110_IIC_ADDRESS);
	int error = Wire.endTransmission();  
	if (error != 0) {
		Serial.println("Error: I2C device not found");
		return;
	}
	
	// Check that it's the device we think it is
	//
	readReg(FXMS3110_WHO_AM_I, &reg);
	if (reg != FXMS3110)  {
		Serial.println("Error: Not an FXMS3110");
		return;
	}

	// Set this to raw mode - no user correction
	// and automatically enable reset to deal with big magnetic
	// fields
	readReg(FXMS3110_CTRL_REG2,  &reg);
	reg |= AUTO_MRST_EN_MASK | RAW_MASK;
	writeReg(FXMS3110_CTRL_REG2, &reg);


	standby();		// Stop the magnetometer

	// Set 10Hz data rate = 1280 Hz ADC with 128 times oversampling
	readReg(FXMS3110_CTRL_REG1, &reg);
	reg &= ~(DR_MASK | OS_MASK);
	reg |= DATA_RATE_1280_128;
	writeReg(FXMS3110_CTRL_REG1, &reg);
	
	activate();		// And start it again
}
Ejemplo n.º 24
0
int main()
{
	// 1. Initiera (Görs ovan med definitionerna?)
	unsigned int door = DOOR_CLOSED;
	init_irq();

	while(1)
	{
		// Sätt IRQ typ till 0 eftersom vi inte har avbrott
		interrupt_type = NO_IRQ_TYPE;
		
		// Vänta på avbrott, WAI i assembler modulen
		standby();
		
		// Nu har vi avbrott, switcha på interrupt_type som sätts
		// i assemblermodulen för att avgöra vilken typ av avbrott
		switch(interrupt_type)
		{
			// Sensor har gett utslag, öppna dörren
			case SENSOR:
				if(door == DOOR_CLOSED)
					setControl(OPEN_DOOR);
				break;
			// Dörren har stängts
			case DOOR_CLOSED:
				door = DOOR_CLOSED;
				break;
			// Dörren har öppnats, börja räkna ner innan den ska stängas igen
			case DOOR_OPENED:
				door = DOOR_OPENED;
				set_timeout(30);
				break;
			// Timeouten är klar, stäng nu dörren
			case TIME_OUT:
				if(door == DOOR_OPENED)
					setControl(CLOSE_DOOR);
				break;
		}
	}
	return 0;
}
Ejemplo n.º 25
0
void I2C_EE_Erase(void)
{
	int percentage;
	unsigned int LEDbackup;
	int i;
	
	clear();
	write('E');
	write('R');
	write('A');
	write('S');
	write('I');
	write('N');
	write('G');
	
	for (i=CONFIGLENGTH;i<EEPROM_BYTES;i++)
	{
I2C_EE_BufferWrite(blank, i,  1);

//		I2C_EE_ByteWrite(blank, i);	
		
		if((i%100)==0){
		setCursor(0,1);
		percentage = (100*i)/(EEPROM_BYTES-CONFIGLENGTH);
		writenumber(percentage);
		write('%');
		write(' ');
		write(' ');}
		LEDbyte = LEDRripple[(i/80)%10];
		setLEDS();
	}
		clear();
	complete();
	delay_ms(2000);
	clear();
	standby();

	LEDbyte=LEDbackup;
	setLEDS();

}
Ejemplo n.º 26
0
void item_press(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
	ITEM_IMG *item_img = (ITEM_IMG *)data;
	gint index = item_img->index;

	switch(index)
	{
	case REBOOT:
		do_reboot();
		break;
	case STANDBY:
		standby();
		break;
	case SHUTDOWN:
		do_shutdown();
		break;
	case CANCEL:
		cancel();
		break;
	}
}
Ejemplo n.º 27
0
ssize_t AudioHardware::AudioStreamInMSM72xx::read( void* buffer, ssize_t bytes)
{
    LOGV("AudioStreamInMSM72xx::read(%p, %ld)", buffer, bytes);
    if (!mHardware) return -1;

    size_t count = bytes;
    uint8_t* p = static_cast<uint8_t*>(buffer);

    if (mState < AUDIO_INPUT_OPENED) {
        Mutex::Autolock lock(mHardware->mLock);
        if (set(mHardware, mDevices, &mFormat, &mChannels, &mSampleRate) != NO_ERROR) {
            return -1;
        }
    }

    if (mState < AUDIO_INPUT_STARTED) {
        mState = AUDIO_INPUT_STARTED;
        // force routing to input device
        mHardware->clearCurDevice();
        mHardware->doRouting();
        if (ioctl(mFd, AUDIO_START, 0)) {
            LOGE("Error starting record");
            standby();
            return -1;
        }
    }

    while (count) {
        ssize_t bytesRead = ::read(mFd, buffer, count);
        if (bytesRead >= 0) {
            count -= bytesRead;
            p += bytesRead;
        } else {
            if (errno != EAGAIN) return bytesRead;
            mRetryCount++;
            LOGW("EAGAIN - retrying");
        }
    }
    return bytes;
}
Ejemplo n.º 28
0
void I2C_EE_FinishLog(void)
{
//	int loglength = ((int)Config[0])<<8 + Config[1];
	int loglength;
	loglength = (currentByte-CONFIGLENGTH)/ENTRYBYTES;
	Config[0] = loglength>>8;
	Config[1] = loglength % 0x100;
	I2C_EE_WriteConfig();
	clear();
	write('S');
	write('t');
	write('o');
	write('p');
	write('p');
	write('i');
	write('n');
	write('g');
	delay_ms(2000);
	clear();
	standby();
	
}
Ejemplo n.º 29
0
void main() {

    puts("Started...");
    initIRQ();
    while(1)    {
        interruptType = NO_IRQ_TYPE;
        standby();
        switch(interruptType)   {
            case SENSOR :
                *base_address = 0x01;
                break;
            case OPENED_DOOR :
                setTimeout(1);
                break;
            case TIME_OUT :
                *base_address = 0x02;
                break;
            default :
            break;
        }
    }

}
Ejemplo n.º 30
0
void FXOS8700CQ::init()
{
	standby();  // Must be in standby to change registers

	// Configure the accelerometer
	writeReg(FXOS8700CQ_XYZ_DATA_CFG, accelFSR);  // Choose the full scale range to 2, 4, or 8 g.
	//writeReg(FXOS8700CQ_CTRL_REG1, readReg(FXOS8700CQ_CTRL_REG1) & ~(0x38)); // Clear the 3 data rate bits 5:3
	if (accelODR <= 7) 
		writeReg(FXOS8700CQ_CTRL_REG1, readReg(FXOS8700CQ_CTRL_REG1) | (accelODR << 3));      
	//writeReg(FXOS8700CQ_CTRL_REG2, readReg(FXOS8700CQ_CTRL_REG2) & ~(0x03)); // clear bits 0 and 1
	//writeReg(FXOS8700CQ_CTRL_REG2, readReg(FXOS8700CQ_CTRL_REG2) |  (0x02)); // select normal(00) or high resolution (10) mode

	// Configure the magnetometer
	writeReg(FXOS8700CQ_M_CTRL_REG1, 0x80 | magOSR << 2 | 0x03); // Set auto-calibration, set oversampling, enable hybrid mode 
		                                     
	// Configure interrupts 1 and 2
	//writeReg(CTRL_REG3, readReg(CTRL_REG3) & ~(0x02)); // clear bits 0, 1 
	//writeReg(CTRL_REG3, readReg(CTRL_REG3) |  (0x02)); // select ACTIVE HIGH, push-pull interrupts    
	//writeReg(CTRL_REG4, readReg(CTRL_REG4) & ~(0x1D)); // clear bits 0, 3, and 4
	//writeReg(CTRL_REG4, readReg(CTRL_REG4) |  (0x1D)); // DRDY, Freefall/Motion, P/L and tap ints enabled  
	//writeReg(CTRL_REG5, 0x01);  // DRDY on INT1, P/L and taps on INT2

	active();  // Set to active to start reading
}