mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-16 04:24:45 -07:00
run fbt format, add smol fix
This commit is contained in:
@@ -126,6 +126,7 @@ void subghz_last_settings_load(SubGhzLastSettings* instance, size_t preset_count
|
||||
instance->timestamp_file_names = false;
|
||||
instance->external_module_power_amp = false;
|
||||
instance->enable_hopping = false;
|
||||
instance->delete_old_signals = false;
|
||||
instance->ignore_filter = 0x00;
|
||||
// See bin_raw_value in applications/main/subghz/scenes/subghz_scene_receiver_config.c
|
||||
instance->filter = SubGhzProtocolFlag_Decodable;
|
||||
|
||||
@@ -27,8 +27,8 @@ typedef struct {
|
||||
bool ptt_pressed;
|
||||
bool mic_pressed;
|
||||
bool connected;
|
||||
FuriString *os;
|
||||
FuriString *app;
|
||||
FuriString* os;
|
||||
FuriString* app;
|
||||
size_t osIndex;
|
||||
size_t appIndex;
|
||||
size_t window_position;
|
||||
@@ -65,215 +65,279 @@ static void hid_ptt_stop_ptt_meet_zoom(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_release(hid_ptt->hid, HID_KEYBOARD_SPACEBAR);
|
||||
}
|
||||
static void hid_ptt_trigger_mute_macos_meet(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_D);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_D);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_D);
|
||||
}
|
||||
static void hid_ptt_trigger_mute_linux_meet(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_D);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_D);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_D);
|
||||
}
|
||||
static void hid_ptt_trigger_camera_macos_meet(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_E);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_E);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_E);
|
||||
}
|
||||
static void hid_ptt_trigger_camera_linux_meet(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_E);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_E );
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_E);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_E);
|
||||
}
|
||||
static void hid_ptt_trigger_hand_macos_meet(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_CTRL |HID_KEYBOARD_H);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_CTRL |HID_KEYBOARD_H);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_CTRL | HID_KEYBOARD_H);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_CTRL | HID_KEYBOARD_H);
|
||||
}
|
||||
static void hid_ptt_trigger_hand_linux_meet(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_ALT |HID_KEYBOARD_H);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_ALT |HID_KEYBOARD_H);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_ALT | HID_KEYBOARD_H);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_ALT | HID_KEYBOARD_H);
|
||||
}
|
||||
static void hid_ptt_trigger_mute_macos_zoom(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_A);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_A);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_A);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_A);
|
||||
}
|
||||
static void hid_ptt_trigger_mute_linux_zoom(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_ALT | HID_KEYBOARD_A);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_ALT | HID_KEYBOARD_A);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_ALT | HID_KEYBOARD_A);
|
||||
}
|
||||
static void hid_ptt_trigger_camera_macos_zoom(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
|
||||
}
|
||||
static void hid_ptt_trigger_camera_linux_zoom(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_ALT | HID_KEYBOARD_V);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_ALT | HID_KEYBOARD_V);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_ALT | HID_KEYBOARD_V);
|
||||
}
|
||||
static void hid_ptt_trigger_hand_zoom(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_ALT | HID_KEYBOARD_Y);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_ALT | HID_KEYBOARD_Y);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_ALT | HID_KEYBOARD_Y);
|
||||
}
|
||||
|
||||
// this one is widely used across different apps
|
||||
static void hid_ptt_trigger_cmd_shift_m(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
}
|
||||
|
||||
// Hangouts HidPushToTalkAppIndexGoogleHangouts
|
||||
static void hid_ptt_trigger_mute_macos_hangouts(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_D);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_D);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_D);
|
||||
}
|
||||
static void hid_ptt_trigger_mute_linux_hangouts(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_D);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_D);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_D);
|
||||
}
|
||||
static void hid_ptt_trigger_camera_macos_hangouts(HidPushToTalk* hid_ptt) { // and hand in teams
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_E);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_E);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_E);
|
||||
}
|
||||
static void hid_ptt_trigger_camera_linux_hangouts(HidPushToTalk* hid_ptt) { // and hand in teams
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_E);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_E);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_E);
|
||||
}
|
||||
|
||||
// Signal
|
||||
static void hid_ptt_trigger_mute_signal(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
}
|
||||
static void hid_ptt_trigger_camera_signal(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
|
||||
}
|
||||
|
||||
// skype
|
||||
static void hid_ptt_trigger_mute_linux_skype(HidPushToTalk* hid_ptt) { // and webex
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_M);
|
||||
}
|
||||
static void hid_ptt_trigger_camera_macos_skype(HidPushToTalk* hid_ptt) { // and hand in teams
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_K);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_K);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_K);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_K);
|
||||
}
|
||||
static void hid_ptt_trigger_camera_linux_skype(HidPushToTalk* hid_ptt) { // and hand in teams
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_K);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_K);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_K);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_K);
|
||||
}
|
||||
|
||||
// slack call
|
||||
static void hid_ptt_trigger_mute_slack_call(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, HID_KEYBOARD_M);
|
||||
}
|
||||
static void hid_ptt_trigger_camera_slack_call(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, HID_KEYBOARD_V);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, HID_KEYBOARD_V);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, HID_KEYBOARD_V);
|
||||
}
|
||||
|
||||
// slack hubble
|
||||
static void hid_ptt_trigger_mute_macos_slack_hubble(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_SPACEBAR);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_SPACEBAR);
|
||||
hid_hal_keyboard_press(
|
||||
hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_SPACEBAR);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_SPACEBAR);
|
||||
}
|
||||
static void hid_ptt_trigger_mute_linux_slack_hubble(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_SPACEBAR);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_SPACEBAR);
|
||||
hid_hal_keyboard_press(
|
||||
hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_SPACEBAR);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_SPACEBAR);
|
||||
}
|
||||
|
||||
// discord
|
||||
static void hid_ptt_trigger_mute_macos_discord(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_press(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT |
|
||||
HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT |
|
||||
HID_KEYBOARD_M);
|
||||
}
|
||||
static void hid_ptt_start_ptt_macos_discord(HidPushToTalk* hid_ptt) { // and TeamSpeak
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_P);
|
||||
hid_hal_keyboard_press(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT |
|
||||
HID_KEYBOARD_P);
|
||||
}
|
||||
static void hid_ptt_stop_ptt_macos_discord(HidPushToTalk* hid_ptt) { // and TeamSpeak
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_P);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT |
|
||||
HID_KEYBOARD_P);
|
||||
}
|
||||
static void hid_ptt_trigger_mute_linux_discord(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_press(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT |
|
||||
HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT |
|
||||
HID_KEYBOARD_M);
|
||||
}
|
||||
static void hid_ptt_start_ptt_linux_discord(HidPushToTalk* hid_ptt) { // and TeamSpeak
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_P);
|
||||
hid_hal_keyboard_press(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT |
|
||||
HID_KEYBOARD_P);
|
||||
}
|
||||
static void hid_ptt_stop_ptt_linux_discord(HidPushToTalk* hid_ptt) { // and TeamSpeak
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_P);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_LEFT_SHIFT |
|
||||
HID_KEYBOARD_P);
|
||||
}
|
||||
|
||||
// teamspeak
|
||||
static void hid_ptt_trigger_mute_macos_teamspeak(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_press(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT |
|
||||
HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT |
|
||||
HID_KEYBOARD_M);
|
||||
}
|
||||
static void hid_ptt_start_ptt_macos_teamspeak(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_P);
|
||||
hid_hal_keyboard_press(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT |
|
||||
HID_KEYBOARD_P);
|
||||
}
|
||||
static void hid_ptt_stop_ptt_macos_teamspeak(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_P);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_GUI | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT |
|
||||
HID_KEYBOARD_P);
|
||||
}
|
||||
static void hid_ptt_trigger_mute_linux_teamspeak(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_press(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT |
|
||||
HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT |
|
||||
HID_KEYBOARD_M);
|
||||
}
|
||||
static void hid_ptt_start_ptt_linux_teamspeak(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_P);
|
||||
hid_hal_keyboard_press(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT |
|
||||
HID_KEYBOARD_P);
|
||||
}
|
||||
static void hid_ptt_stop_ptt_linux_teamspeak(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_P);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid,
|
||||
KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_CTRL | KEY_MOD_RIGHT_ALT | KEY_MOD_RIGHT_SHIFT |
|
||||
HID_KEYBOARD_P);
|
||||
}
|
||||
|
||||
// teams
|
||||
static void hid_ptt_start_ptt_macos_teams(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI|HID_KEYBOARD_SPACEBAR);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_SPACEBAR);
|
||||
}
|
||||
static void hid_ptt_start_ptt_linux_teams(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL|HID_KEYBOARD_SPACEBAR);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_SPACEBAR);
|
||||
}
|
||||
static void hid_ptt_stop_ptt_macos_teams(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI|HID_KEYBOARD_SPACEBAR);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | HID_KEYBOARD_SPACEBAR);
|
||||
}
|
||||
static void hid_ptt_stop_ptt_linux_teams(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL|HID_KEYBOARD_SPACEBAR);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | HID_KEYBOARD_SPACEBAR);
|
||||
}
|
||||
static void hid_ptt_trigger_mute_linux_teams(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_M);
|
||||
}
|
||||
static void hid_ptt_trigger_camera_macos_teams(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_O);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_O);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_O);
|
||||
}
|
||||
static void hid_ptt_trigger_camera_linux_teams(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_O);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT |HID_KEYBOARD_O);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_O);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_O);
|
||||
}
|
||||
|
||||
// Jamulus
|
||||
static void hid_ptt_trigger_mute_jamulus(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_ALT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_ALT | HID_KEYBOARD_M);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_ALT | HID_KEYBOARD_M);
|
||||
}
|
||||
|
||||
// webex
|
||||
|
||||
|
||||
static void hid_ptt_trigger_camera_webex(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL| KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT | HID_KEYBOARD_V);
|
||||
}
|
||||
static void hid_ptt_trigger_hand_macos_webex(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_R);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_R);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_R);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid, KEY_MOD_LEFT_GUI | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_R);
|
||||
}
|
||||
static void hid_ptt_trigger_hand_linux_webex(HidPushToTalk* hid_ptt) {
|
||||
hid_hal_keyboard_press( hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_R);
|
||||
hid_hal_keyboard_release(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_R);
|
||||
hid_hal_keyboard_press(hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_R);
|
||||
hid_hal_keyboard_release(
|
||||
hid_ptt->hid, KEY_MOD_LEFT_CTRL | KEY_MOD_RIGHT_SHIFT | HID_KEYBOARD_R);
|
||||
}
|
||||
|
||||
static void hid_ptt_menu_callback(void* context, uint32_t osIndex, FuriString* osLabel, uint32_t appIndex, FuriString* appLabel) {
|
||||
static void hid_ptt_menu_callback(
|
||||
void* context,
|
||||
uint32_t osIndex,
|
||||
FuriString* osLabel,
|
||||
uint32_t appIndex,
|
||||
FuriString* appLabel) {
|
||||
furi_assert(context);
|
||||
HidPushToTalk* hid_ptt = context;
|
||||
with_view_model(
|
||||
hid_ptt->view, HidPushToTalkModel * model, {
|
||||
hid_ptt->view,
|
||||
HidPushToTalkModel * model,
|
||||
{
|
||||
furi_string_set(model->os, osLabel);
|
||||
furi_string_set(model->app, appLabel);
|
||||
model->osIndex = osIndex;
|
||||
@@ -364,7 +428,7 @@ static void hid_ptt_menu_callback(void* context, uint32_t osIndex, FuriString* o
|
||||
model->callback_stop_ptt = hid_ptt_stop_ptt_meet_zoom;
|
||||
break;
|
||||
}
|
||||
} else if (osIndex == HidPushToTalkLinux) {
|
||||
} else if(osIndex == HidPushToTalkLinux) {
|
||||
switch(appIndex) {
|
||||
case HidPushToTalkAppIndexDiscord:
|
||||
model->callback_trigger_mute = hid_ptt_trigger_mute_linux_discord;
|
||||
@@ -441,15 +505,14 @@ static void hid_ptt_menu_callback(void* context, uint32_t osIndex, FuriString* o
|
||||
}
|
||||
}
|
||||
|
||||
char *app_specific_help = "";
|
||||
char* app_specific_help = "";
|
||||
switch(appIndex) {
|
||||
case HidPushToTalkAppIndexGoogleMeet:
|
||||
app_specific_help =
|
||||
"Google Meet:\n"
|
||||
"This feature is off by default in your audio settings "
|
||||
"and may not work for Windows users who use their screen "
|
||||
"reader. In this situation, the spacebar performs a different action.\n\n"
|
||||
;
|
||||
"reader. In this situation, the spacebar performs a different action.\n\n";
|
||||
break;
|
||||
case HidPushToTalkAppIndexDiscord:
|
||||
app_specific_help =
|
||||
@@ -458,25 +521,22 @@ static void hid_ptt_menu_callback(void* context, uint32_t osIndex, FuriString* o
|
||||
"check the box next to Push to Talk.\n"
|
||||
"2. Scroll down to SHORTCUT, click Record Keybinder.\n"
|
||||
"3. Press PTT in the app to bind it."
|
||||
"4. Go to Keybinds and assign mute button.\n\n"
|
||||
;
|
||||
"4. Go to Keybinds and assign mute button.\n\n";
|
||||
break;
|
||||
case HidPushToTalkAppIndexTeamSpeak:
|
||||
app_specific_help =
|
||||
"TeamSpeak:\n"
|
||||
"To make keys working bind them in TeamSpeak settings.\n\n"
|
||||
;
|
||||
app_specific_help = "TeamSpeak:\n"
|
||||
"To make keys working bind them in TeamSpeak settings.\n\n";
|
||||
break;
|
||||
case HidPushToTalkAppIndexTeams:
|
||||
app_specific_help =
|
||||
"Teams:\n"
|
||||
"Go to Settings > Privacy. Make sure Keyboard shortcut to unmute is toggled on.\n\n"
|
||||
;
|
||||
"Go to Settings > Privacy. Make sure Keyboard shortcut to unmute is toggled on.\n\n";
|
||||
break;
|
||||
}
|
||||
|
||||
FuriString *msg = furi_string_alloc();
|
||||
furi_string_cat_printf(msg,
|
||||
FuriString* msg = furi_string_alloc();
|
||||
furi_string_cat_printf(
|
||||
msg,
|
||||
"%sGeneral:\n"
|
||||
"To operate properly flipper microphone "
|
||||
"status must be in sync with your computer.\n"
|
||||
@@ -484,10 +544,13 @@ static void hid_ptt_menu_callback(void* context, uint32_t osIndex, FuriString* o
|
||||
"Hold < to open this help.\n"
|
||||
"Press BACK to switch mic on/off.\n"
|
||||
"Hold 'o' for PTT mode (mic will be off once you release 'o')\n"
|
||||
"Hold BACK to exit.", app_specific_help);
|
||||
widget_add_text_scroll_element(hid_ptt->help, 0, 0, 128, 64, furi_string_get_cstr(msg));
|
||||
"Hold BACK to exit.",
|
||||
app_specific_help);
|
||||
widget_add_text_scroll_element(
|
||||
hid_ptt->help, 0, 0, 128, 64, furi_string_get_cstr(msg));
|
||||
furi_string_free(msg);
|
||||
}, true);
|
||||
},
|
||||
true);
|
||||
view_dispatcher_switch_to_view(hid_ptt->hid->view_dispatcher, HidViewPushToTalk);
|
||||
}
|
||||
|
||||
@@ -500,8 +563,9 @@ static void hid_ptt_draw_text_centered(Canvas* canvas, uint8_t y, FuriString* st
|
||||
FuriString* disp_str;
|
||||
disp_str = furi_string_alloc_set(str);
|
||||
elements_string_fit_width(canvas, disp_str, canvas_width(canvas));
|
||||
uint8_t x_pos = (canvas_width(canvas) - canvas_string_width(canvas,furi_string_get_cstr(disp_str))) / 2;
|
||||
canvas_draw_str(canvas,x_pos,y,furi_string_get_cstr(disp_str));
|
||||
uint8_t x_pos =
|
||||
(canvas_width(canvas) - canvas_string_width(canvas, furi_string_get_cstr(disp_str))) / 2;
|
||||
canvas_draw_str(canvas, x_pos, y, furi_string_get_cstr(disp_str));
|
||||
furi_string_free(disp_str);
|
||||
}
|
||||
|
||||
@@ -534,7 +598,6 @@ static void hid_ptt_draw_callback(Canvas* canvas, void* context) {
|
||||
canvas_draw_icon(canvas, 0, 115, &I_Help_exit_64x9);
|
||||
canvas_draw_icon(canvas, 24, 115, &I_BtnBackV_9x9);
|
||||
|
||||
|
||||
const uint8_t x_1 = 0;
|
||||
const uint8_t x_2 = x_1 + 19 + 4;
|
||||
const uint8_t x_3 = x_1 + 19 * 2 + 8;
|
||||
@@ -567,7 +630,7 @@ static void hid_ptt_draw_callback(Canvas* canvas, void* context) {
|
||||
elements_slightly_rounded_box(canvas, x_1 + 3, y_2 + 2, 13, 13);
|
||||
canvas_set_color(canvas, ColorWhite);
|
||||
}
|
||||
if (model->callback_trigger_hand) {
|
||||
if(model->callback_trigger_hand) {
|
||||
canvas_draw_icon(canvas, x_1 + 4, y_2 + 3, &I_Hand_8x10);
|
||||
} else {
|
||||
canvas_draw_icon(canvas, x_1 + 2, y_2 + 1, &I_BrokenButton_15x15);
|
||||
@@ -580,19 +643,18 @@ static void hid_ptt_draw_callback(Canvas* canvas, void* context) {
|
||||
elements_slightly_rounded_box(canvas, x_3 + 3, y_2 + 2, 13, 13);
|
||||
canvas_set_color(canvas, ColorWhite);
|
||||
}
|
||||
if (model->callback_trigger_camera) {
|
||||
if(model->callback_trigger_camera) {
|
||||
hid_ptt_draw_camera(canvas, x_3 + 4, y_2 + 5);
|
||||
} else {
|
||||
canvas_draw_icon(canvas, x_3 + 2, y_2 + 1, &I_BrokenButton_15x15);
|
||||
}
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
|
||||
|
||||
// Back / Mic
|
||||
const uint8_t x_mic = x_3;
|
||||
canvas_draw_icon(canvas, x_mic, 0, &I_RoundButtonUnpressed_16x16);
|
||||
|
||||
if (!(!model->muted || (model->ptt_pressed))) {
|
||||
if(!(!model->muted || (model->ptt_pressed))) {
|
||||
// show muted
|
||||
if(model->mic_pressed) {
|
||||
// canvas_draw_icon(canvas, x_mic + 1, 0, &I_MicrophonePressedCrossed_15x15);
|
||||
@@ -614,19 +676,21 @@ static void hid_ptt_draw_callback(Canvas* canvas, void* context) {
|
||||
const uint8_t x_ptt_margin = 4;
|
||||
const uint8_t x_ptt_width = 17;
|
||||
const uint8_t x_ptt = x_1 + 19;
|
||||
canvas_draw_icon(canvas, x_ptt , y_2 , &I_BtnFrameLeft_3x18);
|
||||
canvas_draw_icon(canvas, x_ptt + x_ptt_width + 3 + x_ptt_margin, y_2 , &I_BtnFrameRight_2x18);
|
||||
canvas_draw_line(canvas, x_ptt + 3 , y_2 , x_ptt + x_ptt_width + 2 + x_ptt_margin, y_2);
|
||||
canvas_draw_line(canvas, x_ptt + 3 , y_2 + 16, x_ptt + x_ptt_width + 2 + x_ptt_margin, y_2 + 16);
|
||||
canvas_draw_line(canvas, x_ptt + 3 , y_2 + 17, x_ptt + x_ptt_width + 2 + x_ptt_margin, y_2 + 17);
|
||||
canvas_draw_icon(canvas, x_ptt, y_2, &I_BtnFrameLeft_3x18);
|
||||
canvas_draw_icon(canvas, x_ptt + x_ptt_width + 3 + x_ptt_margin, y_2, &I_BtnFrameRight_2x18);
|
||||
canvas_draw_line(canvas, x_ptt + 3, y_2, x_ptt + x_ptt_width + 2 + x_ptt_margin, y_2);
|
||||
canvas_draw_line(
|
||||
canvas, x_ptt + 3, y_2 + 16, x_ptt + x_ptt_width + 2 + x_ptt_margin, y_2 + 16);
|
||||
canvas_draw_line(
|
||||
canvas, x_ptt + 3, y_2 + 17, x_ptt + x_ptt_width + 2 + x_ptt_margin, y_2 + 17);
|
||||
|
||||
|
||||
if (model->ptt_pressed) {
|
||||
if(model->ptt_pressed) {
|
||||
elements_slightly_rounded_box(canvas, x_ptt + 3, y_2 + 2, x_ptt_width + x_ptt_margin, 13);
|
||||
canvas_set_color(canvas, ColorWhite);
|
||||
}
|
||||
canvas_set_font(canvas, FontPrimary);
|
||||
elements_multiline_text_aligned(canvas, x_ptt + 2 + x_ptt_margin / 2, y_2 + 13, AlignLeft, AlignBottom, "PTT");
|
||||
elements_multiline_text_aligned(
|
||||
canvas, x_ptt + 2 + x_ptt_margin / 2, y_2 + 13, AlignLeft, AlignBottom, "PTT");
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
canvas_set_color(canvas, ColorBlack);
|
||||
}
|
||||
@@ -649,8 +713,8 @@ static void hid_ptt_process(HidPushToTalk* hid_ptt, InputEvent* event) {
|
||||
model->right_pressed = true;
|
||||
} else if(event->key == InputKeyOk) {
|
||||
model->ptt_pressed = true;
|
||||
if (!model->mic_pressed && model->muted){
|
||||
model->callback_start_ptt ? model->callback_start_ptt(hid_ptt):0;
|
||||
if(!model->mic_pressed && model->muted) {
|
||||
model->callback_start_ptt ? model->callback_start_ptt(hid_ptt) : 0;
|
||||
}
|
||||
} else if(event->key == InputKeyBack) {
|
||||
model->mic_pressed = true;
|
||||
@@ -658,12 +722,12 @@ static void hid_ptt_process(HidPushToTalk* hid_ptt, InputEvent* event) {
|
||||
} else if(event->type == InputTypeRelease) {
|
||||
if(event->key == InputKeyUp) {
|
||||
model->up_pressed = false;
|
||||
if (!model->ptt_pressed){
|
||||
if(!model->ptt_pressed) {
|
||||
hid_hal_consumer_key_release(hid_ptt->hid, HID_CONSUMER_VOLUME_INCREMENT);
|
||||
}
|
||||
} else if(event->key == InputKeyDown) {
|
||||
model->down_pressed = false;
|
||||
if (!model->ptt_pressed){
|
||||
if(!model->ptt_pressed) {
|
||||
hid_hal_consumer_key_release(hid_ptt->hid, HID_CONSUMER_VOLUME_DECREMENT);
|
||||
}
|
||||
} else if(event->key == InputKeyLeft) {
|
||||
@@ -674,10 +738,11 @@ static void hid_ptt_process(HidPushToTalk* hid_ptt, InputEvent* event) {
|
||||
} else if(event->key == InputKeyOk) {
|
||||
model->ptt_pressed = false;
|
||||
if(!model->mic_pressed) {
|
||||
if (model->muted) {
|
||||
model->callback_stop_ptt ? model->callback_stop_ptt(hid_ptt):0;
|
||||
if(model->muted) {
|
||||
model->callback_stop_ptt ? model->callback_stop_ptt(hid_ptt) : 0;
|
||||
} else {
|
||||
model->callback_trigger_mute ? model->callback_trigger_mute(hid_ptt):0;
|
||||
model->callback_trigger_mute ? model->callback_trigger_mute(hid_ptt) :
|
||||
0;
|
||||
model->muted = true;
|
||||
}
|
||||
}
|
||||
@@ -685,13 +750,13 @@ static void hid_ptt_process(HidPushToTalk* hid_ptt, InputEvent* event) {
|
||||
model->mic_pressed = false;
|
||||
}
|
||||
} else if(event->type == InputTypeShort && !model->ptt_pressed) {
|
||||
if(event->key == InputKeyBack ) { // no changes if PTT is pressed
|
||||
if(event->key == InputKeyBack) { // no changes if PTT is pressed
|
||||
model->muted = !model->muted;
|
||||
model->callback_trigger_mute ? model->callback_trigger_mute(hid_ptt):0;
|
||||
model->callback_trigger_mute ? model->callback_trigger_mute(hid_ptt) : 0;
|
||||
} else if(event->key == InputKeyRight) {
|
||||
model->callback_trigger_camera ? model->callback_trigger_camera(hid_ptt):0;
|
||||
model->callback_trigger_camera ? model->callback_trigger_camera(hid_ptt) : 0;
|
||||
} else if(event->key == InputKeyLeft) {
|
||||
model->callback_trigger_hand ? model->callback_trigger_hand(hid_ptt):0;
|
||||
model->callback_trigger_hand ? model->callback_trigger_hand(hid_ptt) : 0;
|
||||
}
|
||||
} else if(event->type == InputTypeLong && event->key == InputKeyRight) {
|
||||
model->muted = !model->muted;
|
||||
@@ -699,10 +764,11 @@ static void hid_ptt_process(HidPushToTalk* hid_ptt, InputEvent* event) {
|
||||
} else if(event->type == InputTypeLong && event->key == InputKeyLeft) {
|
||||
notification_message(hid_ptt->hid->notifications, &sequence_single_vibro);
|
||||
model->left_pressed = false;
|
||||
view_dispatcher_switch_to_view(hid_ptt->hid->view_dispatcher, HidViewPushToTalkHelp);
|
||||
view_dispatcher_switch_to_view(
|
||||
hid_ptt->hid->view_dispatcher, HidViewPushToTalkHelp);
|
||||
}
|
||||
//LED
|
||||
if (!model->muted || (model->ptt_pressed)) {
|
||||
if(!model->muted || (model->ptt_pressed)) {
|
||||
notification_message(hid_ptt->hid->notifications, &sequence_set_red_255);
|
||||
} else {
|
||||
notification_message(hid_ptt->hid->notifications, &sequence_reset_red);
|
||||
@@ -747,45 +813,199 @@ HidPushToTalk* hid_ptt_alloc(Hid* hid) {
|
||||
view_set_orientation(hid_ptt->view, ViewOrientationVerticalFlip);
|
||||
|
||||
with_view_model(
|
||||
hid_ptt->view, HidPushToTalkModel * model, {
|
||||
hid_ptt->view,
|
||||
HidPushToTalkModel * model,
|
||||
{
|
||||
model->transport = hid->transport;
|
||||
model->muted = true; // assume we're muted
|
||||
model->os = furi_string_alloc();
|
||||
model->app = furi_string_alloc();
|
||||
}, true);
|
||||
},
|
||||
true);
|
||||
|
||||
FURI_LOG_I(TAG, "Calling adding list");
|
||||
ptt_menu_add_list(hid->hid_ptt_menu, "macOS", HidPushToTalkMacOS);
|
||||
ptt_menu_add_list(hid->hid_ptt_menu, "Win/Linux", HidPushToTalkLinux);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "Google Meet", HidPushToTalkAppIndexGoogleMeet, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkLinux, "Google Meet", HidPushToTalkAppIndexGoogleMeet, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "Google Hangouts", HidPushToTalkAppIndexGoogleHangouts, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkLinux, "Google Hangouts", HidPushToTalkAppIndexGoogleHangouts, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "Discord", HidPushToTalkAppIndexDiscord, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkLinux, "Discord", HidPushToTalkAppIndexDiscord, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "FaceTime", HidPushToTalkAppIndexFaceTime, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "Jamulus", HidPushToTalkAppIndexJamulus, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkLinux, "Jamulus", HidPushToTalkAppIndexJamulus, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "Signal", HidPushToTalkAppIndexSignal, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkLinux, "Signal", HidPushToTalkAppIndexSignal, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "Skype", HidPushToTalkAppIndexSkype, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkLinux, "Skype", HidPushToTalkAppIndexSkype, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "Slack Call", HidPushToTalkAppIndexSlackCall, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkLinux, "Slack Call", HidPushToTalkAppIndexSlackCall, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "Slack Hubble", HidPushToTalkAppIndexSlackHubble, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkLinux, "Slack Hubble", HidPushToTalkAppIndexSlackHubble, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "TeamSpeak", HidPushToTalkAppIndexTeamSpeak, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkLinux, "TeamSpeak", HidPushToTalkAppIndexTeamSpeak, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "Teams", HidPushToTalkAppIndexTeams, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkLinux, "Teams", HidPushToTalkAppIndexTeams, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "Zoom", HidPushToTalkAppIndexZoom, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkLinux, "Zoom", HidPushToTalkAppIndexZoom, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkMacOS, "Webex", HidPushToTalkAppIndexWebex, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(hid->hid_ptt_menu, HidPushToTalkLinux, "Webex", HidPushToTalkAppIndexWebex, hid_ptt_menu_callback, hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"Google Meet",
|
||||
HidPushToTalkAppIndexGoogleMeet,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkLinux,
|
||||
"Google Meet",
|
||||
HidPushToTalkAppIndexGoogleMeet,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"Google Hangouts",
|
||||
HidPushToTalkAppIndexGoogleHangouts,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkLinux,
|
||||
"Google Hangouts",
|
||||
HidPushToTalkAppIndexGoogleHangouts,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"Discord",
|
||||
HidPushToTalkAppIndexDiscord,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkLinux,
|
||||
"Discord",
|
||||
HidPushToTalkAppIndexDiscord,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"FaceTime",
|
||||
HidPushToTalkAppIndexFaceTime,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"Jamulus",
|
||||
HidPushToTalkAppIndexJamulus,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkLinux,
|
||||
"Jamulus",
|
||||
HidPushToTalkAppIndexJamulus,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"Signal",
|
||||
HidPushToTalkAppIndexSignal,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkLinux,
|
||||
"Signal",
|
||||
HidPushToTalkAppIndexSignal,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"Skype",
|
||||
HidPushToTalkAppIndexSkype,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkLinux,
|
||||
"Skype",
|
||||
HidPushToTalkAppIndexSkype,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"Slack Call",
|
||||
HidPushToTalkAppIndexSlackCall,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkLinux,
|
||||
"Slack Call",
|
||||
HidPushToTalkAppIndexSlackCall,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"Slack Hubble",
|
||||
HidPushToTalkAppIndexSlackHubble,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkLinux,
|
||||
"Slack Hubble",
|
||||
HidPushToTalkAppIndexSlackHubble,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"TeamSpeak",
|
||||
HidPushToTalkAppIndexTeamSpeak,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkLinux,
|
||||
"TeamSpeak",
|
||||
HidPushToTalkAppIndexTeamSpeak,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"Teams",
|
||||
HidPushToTalkAppIndexTeams,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkLinux,
|
||||
"Teams",
|
||||
HidPushToTalkAppIndexTeams,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"Zoom",
|
||||
HidPushToTalkAppIndexZoom,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkLinux,
|
||||
"Zoom",
|
||||
HidPushToTalkAppIndexZoom,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkMacOS,
|
||||
"Webex",
|
||||
HidPushToTalkAppIndexWebex,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
ptt_menu_add_item_to_list(
|
||||
hid->hid_ptt_menu,
|
||||
HidPushToTalkLinux,
|
||||
"Webex",
|
||||
HidPushToTalkAppIndexWebex,
|
||||
hid_ptt_menu_callback,
|
||||
hid_ptt);
|
||||
|
||||
hid_ptt->help = widget_alloc();
|
||||
view_set_previous_callback(widget_get_view(hid_ptt->help), hid_ptt_view);
|
||||
view_dispatcher_add_view(hid->view_dispatcher, HidViewPushToTalkHelp, widget_get_view(hid_ptt->help));
|
||||
view_dispatcher_add_view(
|
||||
hid->view_dispatcher, HidViewPushToTalkHelp, widget_get_view(hid_ptt->help));
|
||||
return hid_ptt;
|
||||
}
|
||||
|
||||
@@ -793,10 +1013,13 @@ void hid_ptt_free(HidPushToTalk* hid_ptt) {
|
||||
furi_assert(hid_ptt);
|
||||
notification_message(hid_ptt->hid->notifications, &sequence_reset_red);
|
||||
with_view_model(
|
||||
hid_ptt->view, HidPushToTalkModel * model, {
|
||||
hid_ptt->view,
|
||||
HidPushToTalkModel * model,
|
||||
{
|
||||
furi_string_free(model->os);
|
||||
furi_string_free(model->app);
|
||||
}, true);
|
||||
},
|
||||
true);
|
||||
view_dispatcher_remove_view(hid_ptt->hid->view_dispatcher, HidViewPushToTalkHelp);
|
||||
widget_free(hid_ptt->help);
|
||||
view_free(hid_ptt->view);
|
||||
@@ -806,10 +1029,13 @@ void hid_ptt_free(HidPushToTalk* hid_ptt) {
|
||||
void hid_ptt_set_connected_status(HidPushToTalk* hid_ptt, bool connected) {
|
||||
furi_assert(hid_ptt);
|
||||
with_view_model(
|
||||
hid_ptt->view, HidPushToTalkModel * model, {
|
||||
if (!connected && model->connected) {
|
||||
hid_ptt->view,
|
||||
HidPushToTalkModel * model,
|
||||
{
|
||||
if(!connected && model->connected) {
|
||||
notification_message(hid_ptt->hid->notifications, &sequence_single_vibro);
|
||||
}
|
||||
model->connected = connected;
|
||||
}, true);
|
||||
},
|
||||
true);
|
||||
}
|
||||
|
||||
@@ -58,11 +58,12 @@ typedef struct {
|
||||
size_t list_position;
|
||||
size_t position;
|
||||
size_t window_position;
|
||||
PushToTalkMenuList *lists;
|
||||
PushToTalkMenuList* lists;
|
||||
int lists_count;
|
||||
} HidPushToTalkMenuModel;
|
||||
|
||||
static void hid_ptt_menu_draw_list(Canvas* canvas, void* context, const PushToTalkMenuItemArray_t items) {
|
||||
static void
|
||||
hid_ptt_menu_draw_list(Canvas* canvas, void* context, const PushToTalkMenuItemArray_t items) {
|
||||
furi_assert(context);
|
||||
HidPushToTalkMenuModel* model = context;
|
||||
const uint8_t item_height = 16;
|
||||
@@ -71,7 +72,8 @@ static void hid_ptt_menu_draw_list(Canvas* canvas, void* context, const PushToTa
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
size_t position = 0;
|
||||
PushToTalkMenuItemArray_it_t it;
|
||||
for(PushToTalkMenuItemArray_it(it, items); !PushToTalkMenuItemArray_end_p(it); PushToTalkMenuItemArray_next(it)) {
|
||||
for(PushToTalkMenuItemArray_it(it, items); !PushToTalkMenuItemArray_end_p(it);
|
||||
PushToTalkMenuItemArray_next(it)) {
|
||||
const size_t item_position = position - model->window_position;
|
||||
const size_t items_on_screen = 3;
|
||||
uint8_t y_offset = 16;
|
||||
@@ -105,15 +107,14 @@ static void hid_ptt_menu_draw_list(Canvas* canvas, void* context, const PushToTa
|
||||
|
||||
position++;
|
||||
}
|
||||
elements_scrollbar_pos(canvas, 128 , 17, 46, model->position, PushToTalkMenuItemArray_size(items));
|
||||
elements_scrollbar_pos(
|
||||
canvas, 128, 17, 46, model->position, PushToTalkMenuItemArray_size(items));
|
||||
}
|
||||
|
||||
PushToTalkMenuList * hid_ptt_menu_get_list_at_index(
|
||||
void* context,
|
||||
uint32_t index) {
|
||||
PushToTalkMenuList* hid_ptt_menu_get_list_at_index(void* context, uint32_t index) {
|
||||
furi_assert(context);
|
||||
HidPushToTalkMenuModel* model = context;
|
||||
for (int i = 0; i < model->lists_count; i++) {
|
||||
for(int i = 0; i < model->lists_count; i++) {
|
||||
PushToTalkMenuList* list = &model->lists[i];
|
||||
if(index == list->index) {
|
||||
return list;
|
||||
@@ -125,7 +126,7 @@ PushToTalkMenuList * hid_ptt_menu_get_list_at_index(
|
||||
static void hid_ptt_menu_draw_callback(Canvas* canvas, void* context) {
|
||||
furi_assert(context);
|
||||
HidPushToTalkMenuModel* model = context;
|
||||
if (model->lists_count == 0){
|
||||
if(model->lists_count == 0) {
|
||||
return;
|
||||
}
|
||||
uint8_t item_width = canvas_width(canvas) - 5;
|
||||
@@ -139,32 +140,28 @@ static void hid_ptt_menu_draw_callback(Canvas* canvas, void* context) {
|
||||
FuriString* disp_str;
|
||||
disp_str = furi_string_alloc_set(list->label);
|
||||
elements_string_fit_width(canvas, disp_str, item_width - (6 * 2));
|
||||
uint8_t x_pos = (canvas_width(canvas) - canvas_string_width(canvas,furi_string_get_cstr(disp_str))) / 2;
|
||||
canvas_draw_str(canvas,x_pos,11,furi_string_get_cstr(disp_str));
|
||||
uint8_t x_pos =
|
||||
(canvas_width(canvas) - canvas_string_width(canvas, furi_string_get_cstr(disp_str))) / 2;
|
||||
canvas_draw_str(canvas, x_pos, 11, furi_string_get_cstr(disp_str));
|
||||
furi_string_free(disp_str);
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
hid_ptt_menu_draw_list(
|
||||
canvas,
|
||||
context,
|
||||
list->items
|
||||
);
|
||||
hid_ptt_menu_draw_list(canvas, context, list->items);
|
||||
}
|
||||
|
||||
void ptt_menu_add_list(
|
||||
HidPushToTalkMenu* hid_ptt_menu,
|
||||
const char* label,
|
||||
uint32_t index) {
|
||||
void ptt_menu_add_list(HidPushToTalkMenu* hid_ptt_menu, const char* label, uint32_t index) {
|
||||
furi_assert(label);
|
||||
furi_assert(hid_ptt_menu);
|
||||
with_view_model(
|
||||
hid_ptt_menu->view, HidPushToTalkMenuModel * model,
|
||||
hid_ptt_menu->view,
|
||||
HidPushToTalkMenuModel * model,
|
||||
{
|
||||
if (model->lists_count == 0) {
|
||||
model->lists = (PushToTalkMenuList *)malloc(sizeof(PushToTalkMenuList));
|
||||
if(model->lists_count == 0) {
|
||||
model->lists = (PushToTalkMenuList*)malloc(sizeof(PushToTalkMenuList));
|
||||
} else {
|
||||
model->lists = (PushToTalkMenuList *)realloc(model->lists, (model->lists_count + 1) * sizeof(PushToTalkMenuList));
|
||||
model->lists = (PushToTalkMenuList*)realloc(
|
||||
model->lists, (model->lists_count + 1) * sizeof(PushToTalkMenuList));
|
||||
}
|
||||
if (model->lists == NULL) {
|
||||
if(model->lists == NULL) {
|
||||
FURI_LOG_E(TAG, "Memory reallocation failed (%i)", model->lists_count);
|
||||
return;
|
||||
}
|
||||
@@ -177,7 +174,6 @@ void ptt_menu_add_list(
|
||||
true);
|
||||
}
|
||||
|
||||
|
||||
void ptt_menu_add_item_to_list(
|
||||
HidPushToTalkMenu* hid_ptt_menu,
|
||||
uint32_t list_index,
|
||||
@@ -190,10 +186,11 @@ void ptt_menu_add_item_to_list(
|
||||
furi_assert(hid_ptt_menu);
|
||||
UNUSED(list_index);
|
||||
with_view_model(
|
||||
hid_ptt_menu->view, HidPushToTalkMenuModel * model,
|
||||
hid_ptt_menu->view,
|
||||
HidPushToTalkMenuModel * model,
|
||||
{
|
||||
PushToTalkMenuList* list = hid_ptt_menu_get_list_at_index(model, list_index);
|
||||
if (list == NULL){
|
||||
if(list == NULL) {
|
||||
FURI_LOG_E(TAG, "Adding item %s to unknown index %li", label, list_index);
|
||||
return;
|
||||
}
|
||||
@@ -206,16 +203,17 @@ void ptt_menu_add_item_to_list(
|
||||
true);
|
||||
}
|
||||
|
||||
void ptt_menu_shift_list(HidPushToTalkMenu* hid_ptt_menu, int shift){
|
||||
void ptt_menu_shift_list(HidPushToTalkMenu* hid_ptt_menu, int shift) {
|
||||
size_t new_position = 0;
|
||||
uint32_t index = 0;
|
||||
with_view_model(
|
||||
hid_ptt_menu->view, HidPushToTalkMenuModel * model,
|
||||
hid_ptt_menu->view,
|
||||
HidPushToTalkMenuModel * model,
|
||||
{
|
||||
int new_list_position = (short) model->list_position + shift;
|
||||
if (new_list_position >= model->lists_count) {
|
||||
int new_list_position = (short)model->list_position + shift;
|
||||
if(new_list_position >= model->lists_count) {
|
||||
new_list_position = 0;
|
||||
} else if (new_list_position < 0) {
|
||||
} else if(new_list_position < 0) {
|
||||
new_list_position = model->lists_count - 1;
|
||||
}
|
||||
PushToTalkMenuList* list = &model->lists[model->list_position];
|
||||
@@ -225,8 +223,9 @@ void ptt_menu_shift_list(HidPushToTalkMenu* hid_ptt_menu, int shift){
|
||||
size_t position = 0;
|
||||
// Find item index from current list
|
||||
PushToTalkMenuItemArray_it_t it;
|
||||
for(PushToTalkMenuItemArray_it(it, list->items); !PushToTalkMenuItemArray_end_p(it); PushToTalkMenuItemArray_next(it)) {
|
||||
if (position == model->position){
|
||||
for(PushToTalkMenuItemArray_it(it, list->items); !PushToTalkMenuItemArray_end_p(it);
|
||||
PushToTalkMenuItemArray_next(it)) {
|
||||
if(position == model->position) {
|
||||
index = PushToTalkMenuItemArray_cref(it)->index;
|
||||
break;
|
||||
}
|
||||
@@ -235,8 +234,10 @@ void ptt_menu_shift_list(HidPushToTalkMenu* hid_ptt_menu, int shift){
|
||||
// Try to find item with the same index in a new list
|
||||
position = 0;
|
||||
bool item_exists_in_new_list = false;
|
||||
for(PushToTalkMenuItemArray_it(it, new_list->items); !PushToTalkMenuItemArray_end_p(it); PushToTalkMenuItemArray_next(it)) {
|
||||
if (PushToTalkMenuItemArray_cref(it)->index == index) {
|
||||
for(PushToTalkMenuItemArray_it(it, new_list->items);
|
||||
!PushToTalkMenuItemArray_end_p(it);
|
||||
PushToTalkMenuItemArray_next(it)) {
|
||||
if(PushToTalkMenuItemArray_cref(it)->index == index) {
|
||||
item_exists_in_new_list = true;
|
||||
new_position = position;
|
||||
break;
|
||||
@@ -246,20 +247,20 @@ void ptt_menu_shift_list(HidPushToTalkMenu* hid_ptt_menu, int shift){
|
||||
|
||||
// This list item is not presented in a new list, let's try to keep position as is.
|
||||
// If it's out of range for the new list set it to the end
|
||||
if (!item_exists_in_new_list) {
|
||||
if(!item_exists_in_new_list) {
|
||||
new_position = items_size - 1 < model->position ? items_size - 1 : model->position;
|
||||
}
|
||||
|
||||
// Tune window position. As we have 3 items on screen, keep focus centered
|
||||
const size_t items_on_screen = 3;
|
||||
|
||||
if (new_position >= items_size - 1) {
|
||||
if (items_size < items_on_screen + 1) {
|
||||
if(new_position >= items_size - 1) {
|
||||
if(items_size < items_on_screen + 1) {
|
||||
new_window_position = 0;
|
||||
} else {
|
||||
new_window_position = items_size - items_on_screen;
|
||||
}
|
||||
} else if (new_position < items_on_screen - 1) {
|
||||
} else if(new_position < items_on_screen - 1) {
|
||||
new_window_position = 0;
|
||||
} else {
|
||||
new_window_position = new_position - 1;
|
||||
@@ -273,7 +274,8 @@ void ptt_menu_shift_list(HidPushToTalkMenu* hid_ptt_menu, int shift){
|
||||
|
||||
void ptt_menu_process_up(HidPushToTalkMenu* hid_ptt_menu) {
|
||||
with_view_model(
|
||||
hid_ptt_menu->view, HidPushToTalkMenuModel * model,
|
||||
hid_ptt_menu->view,
|
||||
HidPushToTalkMenuModel * model,
|
||||
{
|
||||
PushToTalkMenuList* list = &model->lists[model->list_position];
|
||||
const size_t items_on_screen = 3;
|
||||
@@ -296,7 +298,8 @@ void ptt_menu_process_up(HidPushToTalkMenu* hid_ptt_menu) {
|
||||
|
||||
void ptt_menu_process_down(HidPushToTalkMenu* hid_ptt_menu) {
|
||||
with_view_model(
|
||||
hid_ptt_menu->view, HidPushToTalkMenuModel * model,
|
||||
hid_ptt_menu->view,
|
||||
HidPushToTalkMenuModel * model,
|
||||
{
|
||||
PushToTalkMenuList* list = &model->lists[model->list_position];
|
||||
const size_t items_on_screen = 3;
|
||||
@@ -320,7 +323,8 @@ void ptt_menu_process_ok(HidPushToTalkMenu* hid_ptt_menu) {
|
||||
PushToTalkMenuList* list = NULL;
|
||||
PushToTalkMenuItem* item = NULL;
|
||||
with_view_model(
|
||||
hid_ptt_menu->view, HidPushToTalkMenuModel * model,
|
||||
hid_ptt_menu->view,
|
||||
HidPushToTalkMenuModel * model,
|
||||
{
|
||||
list = &model->lists[model->list_position];
|
||||
const size_t items_size = PushToTalkMenuItemArray_size(list->items);
|
||||
@@ -390,24 +394,30 @@ HidPushToTalkMenu* hid_ptt_menu_alloc(Hid* hid) {
|
||||
view_set_input_callback(hid_ptt_menu->view, hid_ptt_menu_input_callback);
|
||||
|
||||
with_view_model(
|
||||
hid_ptt_menu->view, HidPushToTalkMenuModel * model, {
|
||||
hid_ptt_menu->view,
|
||||
HidPushToTalkMenuModel * model,
|
||||
{
|
||||
model->lists_count = 0;
|
||||
model->position = 0;
|
||||
model->window_position = 0;
|
||||
}, true);
|
||||
},
|
||||
true);
|
||||
return hid_ptt_menu;
|
||||
}
|
||||
|
||||
void hid_ptt_menu_free(HidPushToTalkMenu* hid_ptt_menu) {
|
||||
furi_assert(hid_ptt_menu);
|
||||
with_view_model(
|
||||
hid_ptt_menu->view, HidPushToTalkMenuModel * model, {
|
||||
for (int i = 0; i < model->lists_count; i++) {
|
||||
hid_ptt_menu->view,
|
||||
HidPushToTalkMenuModel * model,
|
||||
{
|
||||
for(int i = 0; i < model->lists_count; i++) {
|
||||
PushToTalkMenuItemArray_clear(model->lists[i].items);
|
||||
furi_string_free(model->lists[i].label);
|
||||
}
|
||||
free(model->lists);
|
||||
}, true);
|
||||
},
|
||||
true);
|
||||
view_free(hid_ptt_menu->view);
|
||||
free(hid_ptt_menu);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,12 @@
|
||||
typedef struct Hid Hid;
|
||||
typedef struct HidPushToTalkMenu HidPushToTalkMenu;
|
||||
|
||||
typedef void (*PushToTalkMenuItemCallback)(void* context, uint32_t listIndex, FuriString* listLabel, uint32_t itemIndex, FuriString* itemLabel );
|
||||
typedef void (*PushToTalkMenuItemCallback)(
|
||||
void* context,
|
||||
uint32_t listIndex,
|
||||
FuriString* listLabel,
|
||||
uint32_t itemIndex,
|
||||
FuriString* itemLabel);
|
||||
|
||||
HidPushToTalkMenu* hid_ptt_menu_alloc(Hid* bt_hid);
|
||||
|
||||
@@ -21,7 +26,4 @@ void ptt_menu_add_item_to_list(
|
||||
PushToTalkMenuItemCallback callback,
|
||||
void* callback_context);
|
||||
|
||||
void ptt_menu_add_list(
|
||||
HidPushToTalkMenu* hid_ptt_menu,
|
||||
const char* label,
|
||||
uint32_t index);
|
||||
void ptt_menu_add_list(HidPushToTalkMenu* hid_ptt_menu, const char* label, uint32_t index);
|
||||
Reference in New Issue
Block a user