unleashed-firmware/applications/services/bt/bt_service/bt.h
MX 66c60e65aa
Merge fixes
+ thanks @Willy-JL !
2024-02-19 03:52:35 +03:00

105 lines
2.3 KiB
C

#pragma once
#include <stdint.h>
#include <stdbool.h>
#include <furi_ble/profile_interface.h>
#include <core/common_defines.h>
#ifdef __cplusplus
extern "C" {
#endif
#define RECORD_BT "bt"
typedef struct Bt Bt;
typedef enum {
BtStatusUnavailable,
BtStatusOff,
BtStatusAdvertising,
BtStatusConnected,
} BtStatus;
typedef struct {
uint8_t rssi;
uint32_t since;
} BtRssi;
typedef void (*BtStatusChangedCallback)(BtStatus status, void* context);
/** Change BLE Profile
* @note Call of this function leads to 2nd core restart
*
* @param bt Bt instance
* @param profile_template Profile template to change to
* @param params Profile parameters. Can be NULL
*
* @return true on success
*/
FURI_WARN_UNUSED FuriHalBleProfileBase* bt_profile_start(
Bt* bt,
const FuriHalBleProfileTemplate* profile_template,
FuriHalBleProfileParams params);
/** Stop current BLE Profile and restore default profile
* @note Call of this function leads to 2nd core restart
*
* @param bt Bt instance
*
* @return true on success
*/
bool bt_profile_restore_default(Bt* bt);
/** Disconnect from Central
*
* @param bt Bt instance
*/
void bt_disconnect(Bt* bt);
/** Set callback for Bluetooth status change notification
*
* @param bt Bt instance
* @param callback BtStatusChangedCallback instance
* @param context pointer to context
*/
void bt_set_status_changed_callback(Bt* bt, BtStatusChangedCallback callback, void* context);
/** Forget bonded devices
* @note Leads to wipe ble key storage and deleting bt.keys
*
* @param bt Bt instance
*/
void bt_forget_bonded_devices(Bt* bt);
/** Set keys storage file path
*
* @param bt Bt instance
* @param keys_storage_path Path to file with saved keys
*/
void bt_keys_storage_set_storage_path(Bt* bt, const char* keys_storage_path);
/** Set default keys storage file path
*
* @param bt Bt instance
*/
void bt_keys_storage_set_default_path(Bt* bt);
bool bt_remote_rssi(Bt* bt, uint8_t* rssi);
/**
*
* (Probably bad) way of opening the RPC connection, everywhereTM
*/
void bt_open_rpc_connection(Bt* bt);
/**
*
* Closing the RPC connection, everywhereTM
*/
void bt_close_rpc_connection(Bt* bt);
#ifdef __cplusplus
}
#endif