예제 #1
0
int
main(int argc, char *argv[])
{
   int ret = 0;
   (void) argc;
   (void) argv;
   eo_init();

   Eo *obj = eo_add(SIMPLE_CLASS, NULL);

   fail_if(my_init_count != 2);

   eo_do(obj, simple_a_set(1), simple_b_set(2));

   int a, b;
   eo_do(obj, simple_a_get(&a), simple_b_get(&b),  mixin_add_and_print(5));

   eo_unref(obj);

   fail_if(my_init_count != 0);

   obj = eo_add(SIMPLE2_CLASS, NULL);
   fail_if(obj);

   obj = eo_add(SIMPLE3_CLASS, NULL);
   fail_if(obj);

   my_init_count = 0;
   obj = eo_add(SIMPLE4_CLASS, NULL);

   fail_if(my_init_count != 2);

   eo_unref(obj);

   fail_if(my_init_count != 0);

   obj = eo_add(SIMPLE5_CLASS, NULL);
   fail_if(!obj);
   eo_unref(obj);

   obj = eo_add(SIMPLE6_CLASS, NULL);
   fail_if(!obj);
   eo_unref(obj);

   obj = eo_add(SIMPLE7_CLASS, NULL);
   fail_if(obj);

   my_init_count = 0;
   obj = eo_add_custom(SIMPLE_CLASS, NULL, simple_constructor(7));
   fail_if(!obj);

   fail_if(my_init_count != 2);
   eo_do(obj, simple_a_get(&a));
   fail_if(a != 7);

   eo_unref(obj);

   eo_shutdown();
   return ret;
}
void constructor(void) {
	_Static_assert(sizeof(BrickContext) <= BRICKLET_CONTEXT_MAX_SIZE, "BrickContext too big");

	simple_constructor();

	BC->pin_alert = &BS->pin2_da;
	BC->pin_alert->type = PIO_INPUT;
	BC->pin_alert->attribute = PIO_PULLUP;
	BA->PIO_Configure(BC->pin_alert, 1);

	BC->averaging = INA226_DEFAULT_AVERAGING;
	BC->voltage_conversion_time = INA226_DEFAULT_CONVERSION_BV;
	BC->current_conversion_time = INA226_DEFAULT_CONVERSION_SV;

	ina226_configure();
	eeprom_read_calibration();
	ina226_write_mask();

	// 2 Milliohm
	// (((0.002/(2.5/1000/1000))*2097.152)/2048)*40.0 = 2^15

	// 4 Milliohm
	// (((0.004/(2.5/1000/1000))*2097.152)/2048)*20.0 = 2^15
	ina226_write_register(INA226_REG_CALIBRATION, 2048);
}
void constructor(void) {
	_Static_assert(sizeof(BrickContext) <= BRICKLET_CONTEXT_MAX_SIZE, "BrickContext too big");

	PIN_PWR.type = PIO_OUTPUT_0;
	PIN_PWR.attribute = PIO_DEFAULT;
	BA->PIO_Configure(&PIN_PWR, 1);

	PIN_SCL.type = PIO_INPUT;
	PIN_SCL.attribute = PIO_PULLUP;
	BA->PIO_Configure(&PIN_SCL, 1);

	PIN_SDA.type = PIO_INPUT;
	PIN_SDA.attribute = PIO_PULLUP;
	BA->PIO_Configure(&PIN_SCL, 1);

	PIN_PWM.type = PIO_INPUT;
	PIN_PWM.attribute = PIO_PULLUP;
	BA->PIO_Configure(&PIN_PWM, 1);

	SLEEP_MS(100);
	PIN_PWR.type = PIO_OUTPUT_1;
	BA->PIO_Configure(&PIN_PWR, 1);

	simple_constructor();

	BC->laser_enabled = false;
	BC->new_mode = 0;
	BC->moving_average_upto[SIMPLE_UNIT_DISTANCE] = DEFAULT_MOVING_AVERAGE_DISTANCE;
	BC->moving_average_upto[SIMPLE_UNIT_VELOCITY] = DEFAULT_MOVING_AVERAGE_VELOCITY;
	reinitialize_moving_average_distance();
	reinitialize_moving_average_velocity();

	BC->measurement_state = MS_START_ACQUISITION;
	BC->next_measurement_state_counter = 100;
}
예제 #4
0
void constructor(void) {
    _Static_assert(sizeof(BrickContext) <= BRICKLET_CONTEXT_MAX_SIZE, "BrickContext too big");

    PIN_OVER_CURRENT.type = PIO_INPUT;
    PIN_OVER_CURRENT.attribute = PIO_PULLUP;
    BA->PIO_Configure(&PIN_OVER_CURRENT, 1);

    BC->over_current = false;
    BC->current_avg = 0;
    adc_channel_enable(BS->adc_channel);

    uint16_t data;

    BA->bricklet_select(BS->port - 'a');
    BA->i2c_eeprom_master_read(BA->twid->pTwi,
                               EEPROM_POSITION,
                               (char *)&data,
                               2);
    BA->bricklet_deselect(BS->port - 'a');

    if(data == 0xFFFF) {
        BC->offset = 0;
    } else {
        BC->offset = data;
    }

    simple_constructor();
}
예제 #5
0
void constructor(void) {
	_Static_assert(sizeof(BrickContext) <= BRICKLET_CONTEXT_MAX_SIZE, "BrickContext too big");

    BC->value[SIMPLE_UNIT_HEART_RATE] = 0;
    
    BC->beat_intervals_filled = false;
    BC->debounce_high_filled = false;
    BC->previous_signal_state = false;
    BC->beat_state = 0;
    BC->beat_state_changed = 0;
    BC->beat_state_changed_callback_enabled = 0;
    BC->beat_intervals_iterator = 0;
    BC->debounce_high_iterator = 0;
    BC->tick_counter = 0;
    BC->last_high_at = 0;
    BC->last_low_at = 0;
    
    BC->beat_intervals[0] = 0;
    BC->beat_intervals[1] = 0;
    BC->beat_intervals[2] = 0;
    BC->beat_intervals[3] = 0;
    BC->beat_intervals[4] = 0;
    BC->beat_intervals[5] = 0;
    BC->beat_intervals[6] = 0;
    BC->beat_intervals[7] = 0;
    
    BC->debounce_high_times[0] = 0;
    BC->debounce_high_times[1] = 0;
    BC->debounce_high_times[2] = 0;
    BC->debounce_high_times[3] = 0;
    BC->debounce_high_times[4] = 0;
    BC->debounce_high_times[5] = 0;
    BC->debounce_high_times[6] = 0;
    BC->debounce_high_times[7] = 0;
    
    BC->debounce_low_times[0] = 0;
    BC->debounce_low_times[1] = 0;
    BC->debounce_low_times[2] = 0;
    BC->debounce_low_times[3] = 0;
    BC->debounce_low_times[4] = 0;
    BC->debounce_low_times[5] = 0;
    BC->debounce_low_times[6] = 0;
    BC->debounce_low_times[7] = 0;
    
    //default debounce values
    BC->debounce_high = MIN_DEBOUNCE;
    BC->debounce_low = MIN_DEBOUNCE;
    
    // Setting the signal pin as input
    PIN_SIGNAL.pio->PIO_ODR  = PIN_SIGNAL.mask;
    PIN_SIGNAL.pio->PIO_PER  = PIN_SIGNAL.mask;

	simple_constructor();
}
void constructor(void) {
	_Static_assert(sizeof(BrickContext) <= BRICKLET_CONTEXT_MAX_SIZE, "BrickContext too big");

	BC->i2c_mode = I2C_MODE_FAST;
	simple_constructor();
}