1
0
forked from me/IronOS
Files
IronOS/source/Core/BSP/Pinecilv2/ble_handlers.cpp
2022-11-20 21:28:15 +11:00

90 lines
2.4 KiB
C++

#include <FreeRTOS.h>
#include <errno.h>
#include <stdbool.h>
#include <stdlib.h>
#include <task.h>
#include "types.h"
#include "BSP.h"
#include "TipThermoModel.h"
#include "ble_peripheral.h"
#include "bluetooth.h"
#include "configuration.h"
#include "conn.h"
#include "gatt.h"
#include "hal_clock.h"
#include "hci_core.h"
#include "log.h"
#include "uuid.h"
#include "USBPD.h"
#include "ble_characteristics.h"
#include "ble_handlers.h"
#include "pd.h"
#include "power.hpp"
int ble_char_read_status_callback(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {
if (attr == NULL || attr->uuid == NULL) {
return 0;
}
uint16_t uuid_value = ((struct bt_uuid_16 *)attr->uuid)->val;
uint32_t temp = 0;
switch (uuid_value) {
case 1: // Live temp
{
temp = TipThermoModel::getTipInC();
memcpy(buf, &temp, sizeof(temp));
return sizeof(temp);
} break;
case 2: // Setpoint temp
temp = getSettingValue(SettingsOptions::SolderingTemp);
memcpy(buf, &temp, sizeof(temp));
return sizeof(temp);
break;
case 3: // DC Input
temp = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);
memcpy(buf, &temp, sizeof(temp));
return sizeof(temp);
break;
case 4: // Handle temp
temp = getHandleTemperature(0);
memcpy(buf, &temp, sizeof(temp));
return sizeof(temp);
break;
case 5: // power level
// return current PWM level
temp = X10WattsToPWM(x10WattHistory.average());
memcpy(buf, &temp, sizeof(temp));
return sizeof(temp);
break;
case 6: // power src
// Todo return enum for current power source
break;
}
MSG("Unhandled attr read %d | %d\n", (uint32_t)attr->uuid, uuid_value);
return 0;
}
int ble_tp_recv_wr(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, u16_t len, u16_t offset, u8_t flags) {
BT_WARN("recv data len=%d, offset=%d, flag=%d\n", len, offset, flags);
BT_WARN("recv data:%s\n", bt_hex(buf, len));
if (flags & BT_GATT_WRITE_FLAG_PREPARE) {
// Don't use prepare write data, execute write will upload data again.
BT_WARN("recv prepare write request\n");
return 0;
}
if (flags & BT_GATT_WRITE_FLAG_CMD) {
// Use write command data.
BT_WARN("recv write command\n");
} else {
// Use write request / execute write data.
BT_WARN("recv write request / exce write\n");
}
return len;
}