#ifndef CANON_BLE_REMOTE_H_ #define CANON_BLE_REMOTE_H_ #include #include #include "ArduinoNvs.h" class advdCallback : public BLEAdvertisedDeviceCallbacks { private: BLEAddress *paddress_to_connect; BLEUUID service_uuid_wanted; bool *pready_to_connect; public: advdCallback(BLEUUID service_uuid, bool *ready_to_connect, BLEAddress *address_to_connect); void onResult(BLEAdvertisedDevice advertisedDevice); }; class ConnectivityState : public BLEClientCallbacks { private: bool connected = false; public: void onConnect(BLEClient *pclient) override; void onDisconnect(BLEClient *pclient) override; bool isConnected(); }; class CanonBLERemote { private: // Trigger options const byte BUTTON_RELEASE = 0b10000000; const byte BUTTON_FOCUS = 0b01000000; const byte BUTTON_TELE = 0b00100000; const byte BUTTON_WIDE = 0b00010000; const byte MODE_IMMEDIATE = 0b00001100; const byte MODE_DELAY = 0b00000100; const byte MODE_MOVIE = 0b00001000; const BLEUUID SERVICE_UUID; const BLEUUID PAIRING_SERVICE; const BLEUUID SHUTTER_CONTROL_SERVICE; BLEClient *pclient = BLEDevice::createClient(); ConnectivityState *pconnection_state = new ConnectivityState(); BLEAddress camera_address = BLEAddress(""); BLERemoteService *pRemoteService; BLERemoteCharacteristic *pRemoteCharacteristic_Pairing; BLERemoteCharacteristic *pRemoteCharacteristic_Trigger; ArduinoNvs nvs; bool ready_to_connect = false; String device_name = ""; void scan(unsigned int scan_duration); bool connect(); void disconnect(); public: CanonBLERemote(String name); void init(); bool pair(unsigned int scan_duration); bool isConnected(); bool trigger(); bool focus(); BLEAddress getPairedAddress(); String getPairedAddressString(); }; #endif