codegen:
  instance: bme280
  includes: ['driver/i2c.h', 'driver/bme280.h', 'driver/bme680_util.h']
  flags: ['drivers=bme280', 'arch_drivers=i2c']
  setup:
  - i2c.setup();
  - struct bme280_data sensordata;
  - bme280.intf = BME280_I2C_INTF;
  - bme280.read = bme680_i2c_read;
  - bme280.write = bme680_i2c_write;
  - bme280.delay_ms = bme680_delay_ms;

parameters:
- humidity_oversampling
- pressure_oversampling
- temperature_oversampling
- iir_filter
- standby_time

parameter_normalization:
  humidity_oversampling:
    enum:
      BME280_NO_OVERSAMPLING: 0
      BME280_OVERSAMPLING_1X: 1
      BME280_OVERSAMPLING_2X: 2
      BME280_OVERSAMPLING_4X: 4
      BME280_OVERSAMPLING_8X: 8
      BME280_OVERSAMPLING_16X: 16
  pressure_oversampling:
    enum:
      BME280_NO_OVERSAMPLING: 0
      BME280_OVERSAMPLING_1X: 1
      BME280_OVERSAMPLING_2X: 2
      BME280_OVERSAMPLING_4X: 4
      BME280_OVERSAMPLING_8X: 8
      BME280_OVERSAMPLING_16X: 16
  temperature_oversampling:
    enum:
      BME280_NO_OVERSAMPLING: 0
      BME280_OVERSAMPLING_1X: 1
      BME280_OVERSAMPLING_2X: 2
      BME280_OVERSAMPLING_4X: 4
      BME280_OVERSAMPLING_8X: 8
      BME280_OVERSAMPLING_16X: 16
  iir_filter:
    enum:
      BME280_FILTER_COEFF_OFF: 0
      BME280_FILTER_COEFF_2: 2
      BME280_FILTER_COEFF_4: 4
      BME280_FILTER_COEFF_8: 8
      BME280_FILTER_COEFF_16: 16
  standby_time:
    enum:
      BME280_STANDBY_TIME_0_5_MS: 0.5
      BME280_STANDBY_TIME_62_5_MS: 62.5
      BME280_STANDBY_TIME_125_MS: 125
      BME280_STANDBY_TIME_250_MS: 250
      BME280_STANDBY_TIME_500_MS: 500
      BME280_STANDBY_TIME_1000_MS: 1000
      BME280_STANDBY_TIME_10_MS: 10
      BME280_STANDBY_TIME_20_MS: 20

states:
  - UNINITIALIZED
  - SLEEP
  - NORMAL

transition:
  init:
    src: [UNINITIALIZED]
    dst: SLEEP
    set_param:
      humidity_oversampling: BME280_NO_OVERSAMPLING
      pressure_oversampling: BME280_NO_OVERSAMPLING
      temperature_oversampling: BME280_NO_OVERSAMPLING
      iir_filter: BME280_FILTER_COEFF_OFF
      standby_time: BME280_STANDBY_TIME_0_5_MS
  enterSleepMode:
    src: [NORMAL]
    dst: SLEEP
  enterNormalMode:
    src: [SLEEP]
    dst: NORMAL
  setHumidityOversampling:
    loop: [SLEEP, NORMAL]
    arguments:
    - name: os
      values: ['BME280_NO_OVERSAMPLING', 'BME280_OVERSAMPLING_1X', 'BME280_OVERSAMPLING_2X', 'BME280_OVERSAMPLING_4X', 'BME280_OVERSAMPLING_8X', 'BME280_OVERSAMPLING_16X']
      parameter: humidity_oversampling
  setPressureOversampling:
    loop: [SLEEP, NORMAL]
    arguments:
    - name: os
      values: ['BME280_NO_OVERSAMPLING', 'BME280_OVERSAMPLING_1X', 'BME280_OVERSAMPLING_2X', 'BME280_OVERSAMPLING_4X', 'BME280_OVERSAMPLING_8X', 'BME280_OVERSAMPLING_16X']
      parameter: pressure_oversampling
  setTemperatureOversampling:
    loop: [SLEEP, NORMAL]
    arguments:
    - name: os
      values: ['BME280_NO_OVERSAMPLING', 'BME280_OVERSAMPLING_1X', 'BME280_OVERSAMPLING_2X', 'BME280_OVERSAMPLING_4X', 'BME280_OVERSAMPLING_8X', 'BME280_OVERSAMPLING_16X']
      parameter: temperature_oversampling
  setFilter:
    loop: [SLEEP, NORMAL]
    arguments:
    - name: filter
      values: ['BME280_FILTER_COEFF_OFF', 'BME280_FILTER_COEFF_2', 'BME280_FILTER_COEFF_4', 'BME280_FILTER_COEFF_8', 'BME280_FILTER_COEFF_16']
      parameter: iir_filter

  setStandbyTime:
    loop: [SLEEP, NORMAL]
    arguments:
    - name: standby_time
      values: ['BME280_STANDBY_TIME_0_5_MS', 'BME280_STANDBY_TIME_62_5_MS', 'BME280_STANDBY_TIME_125_MS', 'BME280_STANDBY_TIME_250_MS', 'BME280_STANDBY_TIME_500_MS', 'BME280_STANDBY_TIME_1000_MS', 'BME280_STANDBY_TIME_10_MS', 'BME280_STANDBY_TIME_20_MS']
      parameter: standby_time
  getSensorData:
    src: [NORMAL]
    dst: NORMAL
    arguments:
      - name: what
        values: ['BME280_ALL']
      - name: data
        values: ['&sensordata']