Skip to content

Instantly share code, notes, and snippets.

@trieb
Created April 25, 2019 12:01
Show Gist options
  • Save trieb/9614c3f4b6bc5e1097d27cee58fb13a3 to your computer and use it in GitHub Desktop.
Save trieb/9614c3f4b6bc5e1097d27cee58fb13a3 to your computer and use it in GitHub Desktop.
GATT server example
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
///Attributes State Machine
//enum
//{
// IDX_SVC, //service w/ UUID
// IDX_CHAR_A, //characteristic
// IDX_CHAR_VAL_A, //characteristic value w/UUID
// IDX_CHAR_CFG_A, //descriptor for CCCD
//
// IDX_CHAR_B, //characteristic
// IDX_CHAR_VAL_B, //characteristic value w/UUID
// IDX_CHAR_CFG_B, //descriptor for CCCD
//
// IDX_CHAR_C, //characteristic
// IDX_CHAR_VAL_C, //characteristic value w/UUID
// IDX_CHAR_CFG_C, //descriptor for CCCD
//
// HRS_IDX_NB, //number of entries
//};
enum
{
IDX_SVC_DEVICE, //service w/ UUID
IDX_CHAR_DEVICE_A, //characteristic
IDX_CHAR_DEVICE_A_FIRMWARE_REVISION, //characteristic value w/UUID
IDX_CHAR_DEVICE_A_CFG, //descriptor for CCCD
IDX_CHAR_DEVICE_B, //characteristic
IDX_CHAR_DEVICE_B_CHIP_ID, //characteristic value w/UUID
IDX_CHAR_DEVICE_B_CFG, //descriptor for CCCD
IDX_CHAR_DEVICE_C, //characteristic
IDX_CHAR_DEVICE_C_COMMUNICATION_MODE, //characteristic value w/UUID
IDX_CHAR_DEVICE_C_CFG, //descriptor for CCCD
IDX_CHAR_DEVICE_D, //characteristic
IDX_CHAR_DEVICE_D_PRODUCT_VOLTAGE_RATING, //characteristic value w/UUID
IDX_CHAR_DEVICE_D_CFG, //descriptor for CCCD
IDX_CHAR_DEVICE_E, //characteristic
IDX_CHAR_DEVICE_E_OUTLET_STATE, //characteristic value w/UUID
IDX_CHAR_DEVICE_E_CFG, //descriptor for CCCD
IDX_CHAR_DEVICE_F, //characteristic
IDX_CHAR_DEVICE_F_CURRENT_TIME, //characteristic value w/UUID
IDX_CHAR_DEVICE_F_CFG, //descriptor for CCCD
IDX_CHAR_DEVICE_G, //characteristic
IDX_CHAR_DEVICE_G_DATE_PROGRAMMED, //characteristic value w/UUID
IDX_CHAR_DEVICE_G_CFG, //descriptor for CCCD
IDX_CHAR_DEVICE_H, //characteristic
IDX_CHAR_DEVICE_H_HARDWARE_REVISION, //characteristic value w/UUID
IDX_CHAR_DEVICE_H_CFG, //descriptor for CCCD
IDX_CHAR_DEVICE_I, //characteristic
IDX_CHAR_DEVICE_I_CONNECTED_NAME, //characteristic value w/UUID
IDX_CHAR_DEVICE_I_CFG, //descriptor for CCCD
IDX_CHAR_DEVICE_J, //characteristic
IDX_CHAR_DEVICE_J_SET_CONNECTED_NAME, //characteristic value w/UUID
IDX_CHAR_DEVICE_K, //characteristic
IDX_CHAR_DEVICE_K_SET_LOCAL_NAME, //characteristic value w/UUID
ESP_IDX_DEVICE_NB, //number of entries
};
enum
{
IDX_SVC_MEASUREMENTS, //service w/ UUID
IDX_CHAR_MEASUREMENTS_A, //characteristic
IDX_CHAR_MEASUREMENTS_A_RMS_LINEVOLTAGE, //characteristic value w/UUID
IDX_CHAR_MEASUREMENTS_A_CFG, //descriptor for CCCD
IDX_CHAR_MEASUREMENTS_B, //characteristic
IDX_CHAR_MEASUREMENTS_B_RMS_NGVOLTAGE, //characteristic value w/UUID
IDX_CHAR_MEASUREMENTS_B_CFG, //descriptor for CCCD
IDX_CHAR_MEASUREMENTS_C, //characteristic
IDX_CHAR_MEASUREMENTS_C_RMS_CURRENT, //characteristic value w/UUID
IDX_CHAR_MEASUREMENTS_C_CFG, //descriptor for CCCD
IDX_CHAR_MEASUREMENTS_D, //characteristic
IDX_CHAR_MEASUREMENTS_D_AVERAGE_POWER, //characteristic value w/UUID
IDX_CHAR_MEASUREMENTS_D_CFG, //descriptor for CCCD
IDX_CHAR_MEASUREMENTS_E, //characteristic
IDX_CHAR_MEASUREMENTS_E_POWER_FACTOR, //characteristic value w/UUID
IDX_CHAR_MEASUREMENTS_E_CFG, //descriptor for CCCD
IDX_CHAR_MEASUREMENTS_F, //characteristic
IDX_CHAR_MEASUREMENTS_F_LINE_FREQUENCY, //characteristic value w/UUID
IDX_CHAR_MEASUREMENTS_F_CFG, //descriptor for CCCD
IDX_CHAR_MEASUREMENTS_G, //characteristic
IDX_CHAR_MEASUREMENTS_G_CREST_FACTOR, //characteristic value w/UUID
IDX_CHAR_MEASUREMENTS_G_CFG, //descriptor for CCCD
IDX_CHAR_MEASUREMENTS_H, //characteristic
IDX_CHAR_MEASUREMENTS_H_INTERNAL_TEMPERATURE, //characteristic value w/UUID
IDX_CHAR_MEASUREMENTS_H_CFG, //descriptor for CCCD
IDX_CHAR_MEASUREMENTS_I, //characteristic
IDX_CHAR_MEASUREMENTS_I_BATTERY_VOLTAGE, //characteristic value w/UUID
IDX_CHAR_MEASUREMENTS_I_CFG, //descriptor for CCCD
IDX_CHAR_MEASUREMENTS_J, //characteristic
IDX_CHAR_MEASUREMENTS_J_ENERGY_USAGE, //characteristic value w/UUID
IDX_CHAR_MEASUREMENTS_J_CFG, //descriptor for CCCD
IDX_CHAR_MEASUREMENTS_K, //characteristic
IDX_CHAR_MEASUREMENTS_K_ENERGY_USAGE_DATE, //characteristic value w/UUID
IDX_CHAR_MEASUREMENTS_K_CFG, //descriptor for CCCD
ESP_IDX_MEASUREMENTS_NB, //number of entries
};
enum
{
IDX_SVC_EVENTS, //service w/ UUID
IDX_CHAR_EVENTS_A, //characteristic
IDX_CHAR_EVENTS_A_UNDERVOLTAGE_RECORD_COUNT, //characteristic value w/UUID
IDX_CHAR_EVENTS_A_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_B, //characteristic
IDX_CHAR_EVENTS_B_UNDERVOLTAGE_TURNOFF_COUNT, //characteristic value w/UUID
IDX_CHAR_EVENTS_B_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_C, //characteristic
IDX_CHAR_EVENTS_C_OVERVOLTAGE_RECORD_COUNT, //characteristic value w/UUID
IDX_CHAR_EVENTS_C_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_D, //characteristic
IDX_CHAR_EVENTS_D_OVERVOLTAGE_TURNOFF_COUNT, //characteristic value w/UUID
IDX_CHAR_EVENTS_D_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_E, //characteristic
IDX_CHAR_EVENTS_E_POWEROUTAGE_COUNT, //characteristic value w/UUID
IDX_CHAR_EVENTS_E_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_F, //characteristic
IDX_CHAR_EVENTS_F_SURGE_COUNT, //characteristic value w/UUID
IDX_CHAR_EVENTS_F_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_G, //characteristic
IDX_CHAR_EVENTS_G_OVERLOAD_RECORD_COUNT, //characteristic value w/UUID
IDX_CHAR_EVENTS_G_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_H, //characteristic
IDX_CHAR_EVENTS_H_OVERTEMPERATURE_RECORD_COUNT, //characteristic value w/UUID
IDX_CHAR_EVENTS_H_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_I, //characteristic
IDX_CHAR_EVENTS_I_TIME_SINCE_LAST_EVENT_XG, //characteristic value w/UUID
IDX_CHAR_EVENTS_I_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_J, //characteristic
IDX_CHAR_EVENTS_J_LAST_EVENT_EV, //characteristic value w/UUID
IDX_CHAR_EVENTS_J_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_K, //characteristic
IDX_CHAR_EVENTS_K_UNDERVOLTAGE_CUTOFF_THRESHOLD, //characteristic value w/UUID
IDX_CHAR_EVENTS_K_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_L, //characteristic
IDX_CHAR_EVENTS_L_UNDERVOLTAGE_RECORD_THRESHOLD, //characteristic value w/UUID
IDX_CHAR_EVENTS_L_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_M, //characteristic
IDX_CHAR_EVENTS_M_UNDERVOLTAGE_RESTORE_THRESHOLD, //characteristic value w/UUID
IDX_CHAR_EVENTS_M_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_N, //characteristic
IDX_CHAR_EVENTS_N_OVERVOLTAGE_CUTOFF_THRESHOLD, //characteristic value w/UUID
IDX_CHAR_EVENTS_N_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_O, //characteristic
IDX_CHAR_EVENTS_O_OVERVOLTAGE_RECORD_THRESHOLD, //characteristic value w/UUID
IDX_CHAR_EVENTS_O_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_P, //characteristic
IDX_CHAR_EVENTS_P_OVERVOLTAGE_RESTORE_THRESHOLD, //characteristic value w/UUID
IDX_CHAR_EVENTS_P_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_Q, //characteristic
IDX_CHAR_EVENTS_Q_OVERLOAD_RECORD_THRESHOLD, //characteristic value w/UUID
IDX_CHAR_EVENTS_Q_CFG, //descriptor for CCCD
IDX_CHAR_EVENTS_R, //characteristic
IDX_CHAR_EVENTS_R_UPDATE_THRESHOLD_EV, //characteristic value w/UUID
IDX_CHAR_EVENTS_S, //characteristic
IDX_CHAR_EVENTS_S_UPDATE_THRESHOLD_XG, //characteristic value w/UUID
ESP_IDX_EVENTS_NB, //number of entries
};
enum
{
IDX_SVC_SETTINGS, //service w/ UUID
IDX_CHAR_SETTINGS_A, //characteristic
IDX_CHAR_SETTINGS_A_AUTOTRANSMIT, //characteristic value w/UUID
IDX_CHAR_SETTINGS_A_CFG, //descriptor for CCCD
IDX_CHAR_SETTINGS_B, //characteristic
IDX_CHAR_SETTINGS_B_LINE_VOLTAGE_CONFIGURATION, //characteristic value w/UUID
IDX_CHAR_SETTINGS_B_CFG, //descriptor for CCCD
IDX_CHAR_SETTINGS_C, //characteristic
IDX_CHAR_SETTINGS_C_CLEAR_MEMORY_ALL, //characteristic value w/UUID
IDX_CHAR_SETTINGS_D, //characteristic
IDX_CHAR_SETTINGS_D_CLEAR_EVENT_COUNTS, //characteristic value w/UUID
IDX_CHAR_SETTINGS_E, //characteristic
IDX_CHAR_SETTINGS_E_CLEAR_TIMESTAMPS, //characteristic value w/UUID
IDX_CHAR_SETTINGS_F, //characteristic
IDX_CHAR_SETTINGS_F_CLEAR_HISTORICAL_DATA, //characteristic value w/UUID
IDX_CHAR_SETTINGS_G, //characteristic
IDX_CHAR_SETTINGS_G_RESET_ENERGY_USAGE, //characteristic value w/UUID
IDX_CHAR_SETTINGS_H, //characteristic
IDX_CHAR_SETTINGS_H_SET_DEVICE_TIME, //characteristic value w/UUID
IDX_CHAR_SETTINGS_I, //characteristic
IDX_CHAR_SETTINGS_I_INTERNAL_CHART_MODE, //characteristic value w/UUID
IDX_CHAR_SETTINGS_I_CFG, //descriptor for CCCD
IDX_CHAR_SETTINGS_J, //characteristic
IDX_CHAR_SETTINGS_J_GROUND_DETECTION, //characteristic value w/UUID
IDX_CHAR_SETTINGS_J_CFG, //descriptor for CCCD
IDX_CHAR_SETTINGS_K, //characteristic
IDX_CHAR_SETTINGS_K_OVERLOAD_SHUTDOWN, //characteristic value w/UUID
IDX_CHAR_SETTINGS_K_CFG, //descriptor for CCCD
IDX_CHAR_SETTINGS_L, //characteristic
IDX_CHAR_SETTINGS_L_POWER_FAIL_HOLD, //characteristic value w/UUID
IDX_CHAR_SETTINGS_L_CFG, //descriptor for CCCD
ESP_IDX_SETTINGS_NB, //number of entries
};
enum
{
IDX_SVC_DATASETS, //service w/ UUID
IDX_CHAR_DATASETS_A, //characteristic
IDX_CHAR_DATASETS_A_EEPROM_XG, //characteristic value w/UUID
IDX_CHAR_DATASETS_A_CFG, //descriptor for CCCD
IDX_CHAR_DATASETS_B, //characteristic
IDX_CHAR_DATASETS_B_HISTORICAL_DATA, //characteristic value w/UUID
IDX_CHAR_DATASETS_B_CFG, //descriptor for CCCD
IDX_CHAR_DATASETS_C, //characteristic
IDX_CHAR_DATASETS_C_TIMESTAMPED_DATA, //characteristic value w/UUID
IDX_CHAR_DATASETS_C_CFG, //descriptor for CCCD
IDX_CHAR_DATASETS_D, //characteristic
IDX_CHAR_DATASETS_D_INTERNAL_CHART_DATA, //characteristic value w/UUID
IDX_CHAR_DATASETS_D_CFG, //descriptor for CCCD
IDX_CHAR_DATASETS_E, //characteristic
IDX_CHAR_DATASETS_E_TIMESTAMPED_WAVEFORMS, //characteristic value w/UUID
IDX_CHAR_DATASETS_E_CFG, //descriptor for CCCD
ESP_IDX_DATASETS_NB, //number of entries
};
enum
{
IDX_SVC_STREAMING, //service w/ UUID
IDX_CHAR_STREAMING_A, //characteristic
IDX_CHAR_STREAMING_A_STREAM_SCOPE_DATA, //characteristic value w/UUID
IDX_CHAR_STREAMING_A_CFG, //descriptor for CCCD
IDX_CHAR_STREAMING_B, //characteristic
IDX_CHAR_STREAMING_B_VOLTAGE_SCOPE, //characteristic value w/UUID
IDX_CHAR_STREAMING_B_CFG, //descriptor for CCCD
IDX_CHAR_STREAMING_C, //characteristic
IDX_CHAR_STREAMING_C_CURRENT_SCOPE, //characteristic value w/UUID
IDX_CHAR_STREAMING_C_CFG, //descriptor for CCCD
IDX_CHAR_STREAMING_D, //characteristic
IDX_CHAR_STREAMING_D_VOLTAGE_CURRENT_SCOPE, //characteristic value w/UUID
IDX_CHAR_STREAMING_D_CFG, //descriptor for CCCD
ESP_IDX_STREAMING_NB, //number of entries
};
enum
{
IDX_SVC_BATTERY, //service w/ UUID
IDX_CHAR_BATTERY_A, //characteristic
IDX_CHAR_BATTERY_A_BATTERY_LEVEL, //characteristic value w/UUID
IDX_CHAR_BATTERY_A_CFG, //descriptor for CCCD
ESP_IDX_BATTERY_NB, //number of entries
};
enum
{
IDX_SVC_CONFIGURATION, //service w/ UUID
IDX_CHAR_CONFIGURATION_A, //characteristic
IDX_CHAR_CONFIGURATION_A_STREAM_SCOPE_DATA, //characteristic value w/UUID
IDX_CHAR_CONFIGURATION_A_CFG, //descriptor for CCCD
IDX_CHAR_CONFIGURATION_B, //characteristic
IDX_CHAR_CONFIGURATION_B_VOLTAGE_SCOPE, //characteristic value w/UUID
IDX_CHAR_CONFIGURATION_B_CFG, //descriptor for CCCD
IDX_CHAR_CONFIGURATION_C, //characteristic
IDX_CHAR_CONFIGURATION_C_CURRENT_SCOPE, //characteristic value w/UUID
IDX_CHAR_CONFIGURATION_C_CFG, //descriptor for CCCD
IDX_CHAR_CONFIGURATION_D, //characteristic
IDX_CHAR_CONFIGURATION_D_VOLTAGE_CURRENT_SCOPE, //characteristic value w/UUID
IDX_CHAR_CONFIGURATION_D_CFG, //descriptor for CCCD
ESP_IDX_CONFIGURATION_NB, //number of entries
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment