diff --git a/components/BLEh b/components/BLEh index 2ce2ec0..cb5fe57 160000 --- a/components/BLEh +++ b/components/BLEh @@ -1 +1 @@ -Subproject commit 2ce2ec0e5a803896c8797eada748f2f98dc1f3fa +Subproject commit cb5fe57c53034b9adcb4f89270373156b80153e5 diff --git a/main/Alim1000W.c b/main/Alim1000W.c index 8a7076c..321e1a0 100644 --- a/main/Alim1000W.c +++ b/main/Alim1000W.c @@ -121,8 +121,37 @@ void app_main(void){ .descrH = NSP_DESC_MAIN & 0xff, .descrL = (NSP_DESC_MAIN>>8) & 0xff, }; - - gatt_value_server_handle_t raw_mv_serve_handle = simple_gatt_value_server(raw_mv_meas, sizeof(uint32_t), ADC_IN_PIN_NUM, mv_char_pres_format, &gatt_svcs[RAW_VALUES_SVC_ID], RAW_VALUES_SVC_ID, BLE_UUID16_DECLARE(VOLTAGE_CHAR)); + + gatt_value_server_handle_t raw_mv_serve_handle = simple_gatt_identical_values_server(raw_mv_meas, sizeof(uint32_t), ADC_IN_PIN_NUM, &mv_char_pres_format, &gatt_svcs[RAW_VALUES_SVC_ID], RAW_VALUES_SVC_ID, BLE_UUID16_DECLARE(VOLTAGE_CHAR)); + + uint32_t calc_meas[ADC_IN_PIN_NUM]; + + struct char_pres_format mA_char_pres_format = { + .format = FORMAT_UINT32, + .unit = AMPERE_UNIT_UUID, + .exponent = -3, + .namespc = 1, + .descrH = NSP_DESC_MAIN & 0xff, + .descrL = (NSP_DESC_MAIN>>8) & 0xff, + }; + + struct char_pres_format* calc_meas_formats[ADC_IN_PIN_NUM]; + + ble_uuid_t* calc_meas_char_uuid[ADC_IN_PIN_NUM]; + + for(int i = 0; i < ADC_IN_PIN_NUM; i++){ + switch(adc_pins[i]){ + case CONFIG_OUT_VOLT_PIN: + calc_meas_formats[i] = &mv_char_pres_format; + calc_meas_char_uuid[i] = BLE_UUID16_DECLARE(VOLTAGE_CHAR); + break; + default: + calc_meas_formats[i] = &mA_char_pres_format; + calc_meas_char_uuid[i] = BLE_UUID16_DECLARE(ELECTRIC_CURRENT_CHAR); + } + } + + gatt_value_server_handle_t calc_meas_serve_handle = simple_gatt_value_server(calc_meas, sizeof(uint32_t), ADC_IN_PIN_NUM, calc_meas_formats, &gatt_svcs[CALC_VALUES_SVC_ID], CALC_VALUES_SVC_ID, calc_meas_char_uuid); set_gatt_services(gatt_svcs, SVCS_NUM); @@ -153,23 +182,29 @@ void app_main(void){ switch(adc_pins[i]){ case CONFIG_OUT_VOLT_PIN: ESP_LOGI(TAG, "Output voltage %d mV", mv); + calc_meas[i] = mv * 33; break; case CONFIG_OUT_CURR_PIN: ESP_LOGI(TAG, "Output current %d mV", mv); + calc_meas[i] = mv * 10; break; case CONFIG_PHASE1_CURR_PIN: ESP_LOGI(TAG, "Phase 1 current %d mV", mv); + calc_meas[i] = mv * 10; break; case CONFIG_PHASE2_CURR_PIN: ESP_LOGI(TAG, "Phase 2 current %d mV", mv); + calc_meas[i] = mv * 10; break; case CONFIG_PHASE3_CURR_PIN: ESP_LOGI(TAG, "Phase 3 current %d mV", mv); + calc_meas[i] = mv * 10; break; } } simple_gatt_value_server_notify(raw_mv_serve_handle, ADC_IN_PIN_NUM); + simple_gatt_value_server_notify(calc_meas_serve_handle, ADC_IN_PIN_NUM); vTaskDelay(pdMS_TO_TICKS(CONFIG_UPD_DELAY)); } diff --git a/main/BLE.c b/main/BLE.c index 77e0d99..9a98fe3 100644 --- a/main/BLE.c +++ b/main/BLE.c @@ -24,6 +24,10 @@ struct ble_gatt_svc_def gatt_svcs[] = { .type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = BLE_UUID16_DECLARE(METROLOGY_SERVICE), }, + [CALC_VALUES_SVC_ID] = { + .type = BLE_GATT_SVC_TYPE_PRIMARY, + .uuid = BLE_UUID16_DECLARE(METROLOGY_SERVICE), + }, [CONFIGURATION_SVC_ID] = { .type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = BLE_UUID16_DECLARE(CONFIGURATION_SERVICE), diff --git a/main/BLE.h b/main/BLE.h index 0d0f312..1ea79b8 100644 --- a/main/BLE.h +++ b/main/BLE.h @@ -2,5 +2,5 @@ #include "host/ble_gatt.h" -enum {RAW_VALUES_SVC_ID, CONFIGURATION_SVC_ID, SVCS_NUM}; +enum {RAW_VALUES_SVC_ID, CALC_VALUES_SVC_ID, CONFIGURATION_SVC_ID, SVCS_NUM}; extern struct ble_gatt_svc_def gatt_svcs[SVCS_NUM + 1];