v2 framed-protocol entry point. Import with from tapsdk import TapSDK2, or prefer connect() which returns TapSDK or TapSDK2.
Commands and events use framed messages on c3ff000e (notify) / c3ff000f (write). There is no NUS set_input_mode path — enable streams with DeviceFeatures.
TapSDK2(client=None, address=None, *, get_timeout=2.0, keepalive_timeout=10)
| Parameter |
Description |
client |
Optional already-connected TapClient (from connect()) |
address |
Optional BLE address / platform device id |
get_timeout |
Seconds to wait for get-request replies (default 2.0) |
keepalive_timeout |
Seconds between keepalive writes after start() (default 10) |
Start notifications on the framed read characteristic, read the serial number, start keepalive, then invoke the connection callback with the serial (bytes). Raises ConnectionError if the client is not connected.
Connect via shared connect_tap() if needed, then call start().
await sdk.set_feature(DeviceFeatures.RAW_IMU_DATA, True)
enabled = await sdk.get_feature(DeviceFeatures.RAW_IMU_DATA)
| Method |
Description |
async set_feature(feature, enable, identifier=None) |
Enable or disable a DeviceFeatures stream |
async get_feature(feature, identifier=None) -> bool |
Read current feature enable state |
| Method |
Returns |
async set_vision_sensor_op_mode(mode: VisionSensorOpModes) |
— |
async get_vision_sensor_op_mode() -> VisionSensorOpModes |
Current op mode |
async set_vision_sensor_model(model: ModelTypes) |
— |
async get_vision_sensor_model() -> ModelTypes |
Current model |
await sdk.set_imu_sensitivity(
xl_sensitivity=ImuAcclSensitivity.G2,
gyro_sensitivity=ImuGyroSensitivity.DPS125,
scaled=True,
)
gyro, xl = await sdk.get_imu_sensitivity()
| Parameter |
Description |
xl_sensitivity |
Thumb IMU accelerometer range |
gyro_sensitivity |
Thumb IMU gyroscope range |
scaled |
If True, raw IMU callbacks use mg/mdps scale factors |
finger_accl_sens |
Optional finger accel enum used only for local scaling |
| Method |
Description |
async set_haptic_pattern(sequence) |
Periods in ms; each clamped to 0–2550 as value // 10; max 18 values |
async send_vibration_sequence(sequence) |
Alias for set_haptic_pattern |
async send_keepalive_message() |
Manual keepalive (also sent periodically after start()) |
| Method |
Returns |
async set_standby_state(standby: bool) |
— |
async get_standby_state() -> bool |
True if device reports standby |
async get_device_info() -> DeviceInfo — same DIS/BAS reader as TapSDK. Shared via tapsdk.device_info.
See Events for callback shapes. Methods:
| Method |
Notes |
register_connection_events |
(serial_number: bytes) |
register_disconnection_events |
(client) |
register_tap_events |
Tap gesture from model detection |
register_air_gesture_events |
Unified air-gesture codes |
register_raw_imu_data_events |
Raw IMU packet batches |
register_raw_data_events |
Alias for register_raw_imu_data_events |
register_imu_motion_data_events |
Motion deltas + Euler angles |
register_standby_state_events |
Standby boolean |
TapSDK2 does not expose register_mouse_events or register_air_gesture_state_events.
| Attribute |
Meaning |
client |
Underlying TapClient / BleakClient |
device_serial_number |
Serial bytes after start(); None before |
keep_alive_manager |
KeepAliveManager instance |