void state_binding()

in apps/blemesh_models_example_2/src/state_binding.c [136:212]


void state_binding(uint8_t light, uint8_t temp)
{
	switch (temp) {
	case ONOFF_TEMP:
	case CTL_TEMP:
		temperature =
			light_ctl_temp_to_level(light_ctl_srv_user_data.temp);

		gen_level_srv_s0_user_data.level = temperature;
		break;
	case LEVEL_TEMP:
		temperature = gen_level_srv_s0_user_data.level;
		light_ctl_srv_user_data.temp =
			level_to_light_ctl_temp(temperature);
		break;
	default:
		break;
	}

	switch (light) {
	case ONPOWERUP:
		if (gen_onoff_srv_root_user_data.onoff == STATE_OFF) {
			lightness = 0U;
		} else if (gen_onoff_srv_root_user_data.onoff == STATE_ON) {
			lightness = light_lightness_srv_user_data.last;
		}
		break;
	case ONOFF:
		if (gen_onoff_srv_root_user_data.onoff == STATE_OFF) {
			lightness = 0U;
		} else if (gen_onoff_srv_root_user_data.onoff == STATE_ON) {
			if (light_lightness_srv_user_data.def == 0) {
				lightness = light_lightness_srv_user_data.last;
			} else {
				lightness = light_lightness_srv_user_data.def;
			}
		}
		break;
	case LEVEL:
		lightness = gen_level_srv_root_user_data.level + 32768;
		break;
	case DELTA_LEVEL:
		lightness = gen_level_srv_root_user_data.level + 32768;
		constrain_lightness2(lightness);
		goto jump;
	case ACTUAL:
		lightness = light_lightness_srv_user_data.actual;
		break;
	case LINEAR:
		lightness =
			linear_to_actual(light_lightness_srv_user_data.linear);
		break;
	case CTL:
		lightness = light_ctl_srv_user_data.lightness;
		break;
	default:
		break;
	}

	constrain_lightness(lightness);

jump:
	if (lightness != 0) {
		light_lightness_srv_user_data.last = lightness;
	}

	if (lightness) {
		gen_onoff_srv_root_user_data.onoff = STATE_ON;
	} else {
		gen_onoff_srv_root_user_data.onoff = STATE_OFF;
	}

	gen_level_srv_root_user_data.level = lightness - 32768;
	light_lightness_srv_user_data.actual = lightness;
	light_lightness_srv_user_data.linear = actual_to_linear(lightness);
	light_ctl_srv_user_data.lightness = lightness;
}