Compare commits
3 Commits
3ae5bb9bdf
...
8aa309b0c6
Author | SHA1 | Date | |
---|---|---|---|
|
8aa309b0c6 | ||
|
42c01e1d08 | ||
|
23d3c47374 |
@ -59,6 +59,30 @@ bool MAX3010X_soft_reset(void)
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_MODE_CFG_REG, data);
|
||||
}
|
||||
|
||||
bool MAX3010X_shutdown(void)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
if(!i2c_read_reg(MAX3010X_I2C_ADDR, MAX3010X_MODE_CFG_REG, &data)) return false;
|
||||
|
||||
// We set the shutdown bit and write the data back to the register
|
||||
data |= 1 << MAX3010X_MODE_CFG_SHDN_BIT_POS;
|
||||
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_MODE_CFG_REG, data);
|
||||
}
|
||||
|
||||
bool MAX3010X_wakeup(void)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
if(!i2c_read_reg(MAX3010X_I2C_ADDR, MAX3010X_MODE_CFG_REG, &data)) return false;
|
||||
|
||||
// We clear the shutdown bit and write the data back to the register
|
||||
data &= ~(1 << MAX3010X_MODE_CFG_SHDN_BIT_POS);
|
||||
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_MODE_CFG_REG, data);
|
||||
}
|
||||
|
||||
bool MAX3010X_set_FIFO_average(MAX3010X_Sample_Average_e sampleAverage)
|
||||
{
|
||||
uint8_t data;
|
||||
@ -84,6 +108,112 @@ bool MAX3010X_enable_FIFO_rollover(bool enabled)
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_FIFO_CFG_REG, data);
|
||||
}
|
||||
|
||||
bool MAX3010X_set_LED_mode(MAX3010X_LED_Mode_e LEDMode)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
if(!i2c_read_reg(MAX3010X_I2C_ADDR, MAX3010X_MODE_CFG_REG, &data)) return false;
|
||||
|
||||
data &= 0xF8;
|
||||
data |= LEDMode;
|
||||
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_MODE_CFG_REG, data);
|
||||
}
|
||||
|
||||
bool MAX3010X_set_ADC_range(MAX3010X_ADC_Range_e ADCRange)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
if(!i2c_read_reg(MAX3010X_I2C_ADDR, MAX3010X_SPO2_CFG_REG, &data)) return false;
|
||||
|
||||
data &= 0x9F;
|
||||
data |= ADCRange << 5;
|
||||
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_SPO2_CFG_REG, data);
|
||||
}
|
||||
|
||||
bool MAX3010X_set_sample_rate(MAX3010X_Sample_Rate_e sampleRate)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
if(!i2c_read_reg(MAX3010X_I2C_ADDR, MAX3010X_SPO2_CFG_REG, &data)) return false;
|
||||
|
||||
data &= 0xE3;
|
||||
data |= sampleRate << 2;
|
||||
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_SPO2_CFG_REG, data);
|
||||
}
|
||||
|
||||
bool MAX3010X_set_pulse_width(MAX3010X_LED_Pulse_Width_e LEDPulseWidth)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
if(!i2c_read_reg(MAX3010X_I2C_ADDR, MAX3010X_SPO2_CFG_REG, &data)) return false;
|
||||
|
||||
data &= 0xFC;
|
||||
data |= LEDPulseWidth;
|
||||
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_SPO2_CFG_REG, data);
|
||||
}
|
||||
|
||||
bool MAX3010X_set_pulse_amplitude_red(uint8_t powerLevel)
|
||||
{
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_LED1_PULSE_AMP_REG, powerLevel);
|
||||
}
|
||||
|
||||
bool MAX3010X_set_pulse_amplitude_IR(uint8_t powerLevel)
|
||||
{
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_LED2_PULSE_AMP_REG, powerLevel);
|
||||
}
|
||||
|
||||
bool MAX3010X_set_multi_LED_mode_slot(uint8_t slot, MAX3010X_SLOT_LED_e slotLED)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
switch(slot)
|
||||
{
|
||||
case 1:
|
||||
if(!i2c_read_reg(MAX3010X_I2C_ADDR, MAX3010X_MULTI_LED_MODE_CTRL_SLOT1_2_REG, &data)) return false;
|
||||
|
||||
data &= 0xF8;
|
||||
data |= slotLED;
|
||||
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_MULTI_LED_MODE_CTRL_SLOT1_2_REG, data);
|
||||
case 2:
|
||||
if(!i2c_read_reg(MAX3010X_I2C_ADDR, MAX3010X_MULTI_LED_MODE_CTRL_SLOT1_2_REG, &data)) return false;
|
||||
|
||||
data &= 0x8F;
|
||||
data |= slotLED << 4;
|
||||
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_MULTI_LED_MODE_CTRL_SLOT1_2_REG, data);
|
||||
case 3:
|
||||
if(!i2c_read_reg(MAX3010X_I2C_ADDR, MAX3010X_MULTI_LED_MODE_CTRL_SLOT3_4_REG, &data)) return false;
|
||||
|
||||
data &= 0xF8;
|
||||
data |= slotLED;
|
||||
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_MULTI_LED_MODE_CTRL_SLOT3_4_REG, data);
|
||||
case 4:
|
||||
if(!i2c_read_reg(MAX3010X_I2C_ADDR, MAX3010X_MULTI_LED_MODE_CTRL_SLOT3_4_REG, &data)) return false;
|
||||
|
||||
data &= 0x8F;
|
||||
data |= slotLED << 4;
|
||||
|
||||
return i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_MULTI_LED_MODE_CTRL_SLOT3_4_REG, data);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool MAX3010X_clear_FIFO(void)
|
||||
{
|
||||
if(!i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_FIFO_WR_PTR_REG, 0x00)) return false;
|
||||
if(!i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_FIFO_OVERFLOW_CNT_REG, 0x00)) return false;
|
||||
if(!i2c_write_reg(MAX3010X_I2C_ADDR, MAX3010X_FIFO_RD_PTR_REG, 0x00)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MAX3010X_configure(uint8_t powerLevel, MAX3010X_Sample_Average_e sampleAverage, MAX3010X_LED_Mode_e LEDMode, MAX3010X_Sample_Rate_e sampleRate, MAX3010X_LED_Pulse_Width_e LEDPulseWidth, MAX3010X_ADC_Range_e ADCRange)
|
||||
{
|
||||
if(!MAX3010X_soft_reset()) return false;
|
||||
@ -92,5 +222,24 @@ bool MAX3010X_configure(uint8_t powerLevel, MAX3010X_Sample_Average_e sampleAver
|
||||
|
||||
if(!MAX3010X_enable_FIFO_rollover(true)) return false;
|
||||
|
||||
if(!MAX3010X_set_LED_mode(LEDMode)) return false;
|
||||
|
||||
if(!MAX3010X_set_ADC_range(ADCRange)) return false;
|
||||
|
||||
if(!MAX3010X_set_sample_rate(sampleRate)) return false;
|
||||
|
||||
if(!MAX3010X_set_pulse_width(LEDPulseWidth)) return false;
|
||||
|
||||
if(!MAX3010X_set_pulse_amplitude_red(powerLevel)) return false;
|
||||
|
||||
if(!MAX3010X_set_pulse_amplitude_IR(powerLevel)) return false;
|
||||
|
||||
if(!MAX3010X_set_multi_LED_mode_slot(1, MAX3010X_SLOT_LED_RED)) return false;
|
||||
|
||||
if(LEDMode > MAX3010X_LED_MODE_RED_ONLY)
|
||||
if(!MAX3010X_set_multi_LED_mode_slot(2, MAX3010X_SLOT_LED_IR)) return false;
|
||||
|
||||
if(!MAX3010X_clear_FIFO()) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -46,6 +46,13 @@ typedef enum MAX3010X_ADC_Range
|
||||
MAX3010X_ADC_RANGE_16384 = 0x03,
|
||||
} MAX3010X_ADC_Range_e;
|
||||
|
||||
typedef enum MAX3010X_SLOT_LED
|
||||
{
|
||||
MAX3010X_SLOT_LED_NONE = 0x00,
|
||||
MAX3010X_SLOT_LED_RED = 0x01,
|
||||
MAX3010X_SLOT_LED_IR = 0x02,
|
||||
} MAX3010X_SLOT_LED_e;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Initializes the MAX3010X sensor. This must be called before any other API functions.
|
||||
@ -58,10 +65,30 @@ bool MAX3010X_init(void);
|
||||
|
||||
bool MAX3010X_soft_reset(void);
|
||||
|
||||
bool MAX3010X_shutdown(void);
|
||||
|
||||
bool MAX3010X_wakeup(void);
|
||||
|
||||
bool MAX3010X_set_FIFO_average(MAX3010X_Sample_Average_e sampleAverage);
|
||||
|
||||
bool MAX3010X_enable_FIFO_rollover(bool enabled);
|
||||
|
||||
bool MAX3010X_set_LED_mode(MAX3010X_LED_Mode_e LEDMode);
|
||||
|
||||
bool MAX3010X_set_ADC_range(MAX3010X_ADC_Range_e ADCRange);
|
||||
|
||||
bool MAX3010X_set_sample_rate(MAX3010X_Sample_Rate_e sampleRate);
|
||||
|
||||
bool MAX3010X_set_pulse_width(MAX3010X_LED_Pulse_Width_e LEDPulseWidth);
|
||||
|
||||
bool MAX3010X_set_pulse_amplitude_red(uint8_t powerLevel);
|
||||
|
||||
bool MAX3010X_set_pulse_amplitude_IR(uint8_t powerLevel);
|
||||
|
||||
bool MAX3010X_set_multi_LED_mode_slot(uint8_t slot, MAX3010X_SLOT_LED_e slotLED);
|
||||
|
||||
bool MAX3010X_clear_FIFO(void);
|
||||
|
||||
bool MAX3010X_configure(uint8_t powerLevel, MAX3010X_Sample_Average_e sampleAverage, MAX3010X_LED_Mode_e LEDMode, MAX3010X_Sample_Rate_e sampleRate, MAX3010X_LED_Pulse_Width_e LEDPulseWidth, MAX3010X_ADC_Range_e ADCRange);
|
||||
|
||||
#endif //MAX3010X_H
|
@ -349,7 +349,7 @@ void altimeter_screen_create(AltimeterScreen_t * const altimeterScreen)
|
||||
}
|
||||
|
||||
altimeterScreen->display = lv_obj_create(NULL);
|
||||
lv_obj_set_style_bg_color(altimeterScreen->display, lv_color_make(0xFF,0xFF,0xFF), LV_PART_MAIN);/*
|
||||
lv_obj_set_style_bg_color(altimeterScreen->display, lv_color_white(), LV_PART_MAIN);/*
|
||||
lv_obj_set_style_radius(altimeterScreen->display, LV_RADIUS_CIRCLE, LV_PART_MAIN);*/
|
||||
|
||||
if(altimeterScreen->inner_circle)
|
||||
|
@ -127,7 +127,7 @@ void find_my_phone_screen_create(FindMyPhoneScreen_t * const findMyPhoneScreen)
|
||||
findMyPhoneScreen->display = NULL;
|
||||
}
|
||||
findMyPhoneScreen->display = lv_obj_create(NULL);
|
||||
lv_obj_set_style_bg_color(findMyPhoneScreen->display, lv_color_make(0xFF,0xFF,0xFF), LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(findMyPhoneScreen->display, lv_color_white(), LV_PART_MAIN);
|
||||
|
||||
if(findMyPhoneScreen->innerCircle)
|
||||
{
|
||||
@ -138,7 +138,7 @@ void find_my_phone_screen_create(FindMyPhoneScreen_t * const findMyPhoneScreen)
|
||||
findMyPhoneScreen->innerCircle = lv_obj_create(findMyPhoneScreen->display);
|
||||
lv_obj_center(findMyPhoneScreen->innerCircle);
|
||||
lv_obj_set_size(findMyPhoneScreen->innerCircle, 240, 240);
|
||||
lv_obj_set_style_bg_color(findMyPhoneScreen->innerCircle, lv_color_make(0xFF,0xFF,0xFF), LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(findMyPhoneScreen->innerCircle, lv_color_white(), LV_PART_MAIN);
|
||||
lv_obj_set_style_radius(findMyPhoneScreen->innerCircle, LV_RADIUS_CIRCLE, LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(findMyPhoneScreen->innerCircle, 15, LV_PART_MAIN);
|
||||
|
||||
|
@ -31,6 +31,6 @@ void find_my_phone_screen_notify_BLE_connection_state(FindMyPhoneScreen_t * cons
|
||||
|
||||
void find_my_phone_screen_create(FindMyPhoneScreen_t * const findMyPhoneScreen);
|
||||
|
||||
void find_my__phone_screen_destroy(FindMyPhoneScreen_t * const findMyPhoneScreen);
|
||||
void find_my_phone_screen_destroy(FindMyPhoneScreen_t * const findMyPhoneScreen);
|
||||
|
||||
#endif //FIND_PHONE_SCREEN_H
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "compass_screen.h"
|
||||
#include "altimeter_screen.h"
|
||||
#include "find_my_phone_screen.h"
|
||||
#include "music_player_screen.h"
|
||||
|
||||
|
||||
/*********************
|
||||
@ -79,6 +80,7 @@ CompassScreen_t compassScreen;
|
||||
SettingsScreen_t settingsScreen;
|
||||
AltimeterScreen_t altimeterScreen;
|
||||
FindMyPhoneScreen_t findMyPhoneScreen;
|
||||
MusicPlayerScreen_t musicPlayerScreen;
|
||||
|
||||
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow)
|
||||
{
|
||||
@ -108,6 +110,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLi
|
||||
find_my_phone_screen_init(&findMyPhoneScreen);
|
||||
find_my_phone_screen_register_BLE_command_send_cb(&findMyPhoneScreen, &(sendMyFindPhoneBLECommandCb));
|
||||
find_my_phone_screen_notify_BLE_connection_state(&findMyPhoneScreen, true);
|
||||
music_player_screen_init(&musicPlayerScreen);
|
||||
|
||||
altimeter_screen_register_measurement_cb(&altimeterScreen, &(alti_meas_cb));
|
||||
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include "compass_screen.h"
|
||||
#include "altimeter_screen.h"
|
||||
#include "find_my_phone_screen.h"
|
||||
#include "music_player_screen.h"
|
||||
|
||||
#define array_size(array) (sizeof(array)/sizeof(array[0]))
|
||||
|
||||
@ -25,6 +26,12 @@ static void menu_item_cb(lv_event_t *e)
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
extern MusicPlayerScreen_t musicPlayerScreen;
|
||||
music_player_screen_create(&musicPlayerScreen);
|
||||
//lv_scr_load_anim(watchFace.display, LV_SCR_LOAD_ANIM_FADE_ON, 400, 0, true);
|
||||
lv_scr_load_anim(musicPlayerScreen.display, LV_SCR_LOAD_ANIM_MOVE_LEFT, 400, 0, true);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
{
|
||||
@ -142,7 +149,7 @@ void menu_screen_create(MenuScreen_t * const menuScreen)
|
||||
common_screen_header_component(menuScreen->display, "Menu", 50);
|
||||
|
||||
lv_obj_t *scroll_item_container = lv_obj_create(menuScreen->display);
|
||||
lv_obj_set_style_bg_color(scroll_item_container, lv_color_make(0xFF,0xFF,0xFF), LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(scroll_item_container, lv_color_white(), LV_PART_MAIN);
|
||||
lv_obj_set_size(scroll_item_container, lv_pct(100), 240-50);
|
||||
lv_obj_set_pos(scroll_item_container, 0, 50);
|
||||
lv_obj_set_style_pad_all(scroll_item_container, 0, LV_PART_MAIN);
|
||||
|
@ -1 +0,0 @@
|
||||
#include "music_control_screen.h"
|
@ -1,25 +0,0 @@
|
||||
#ifndef MUSIC_CONTROL_SCREEN_H
|
||||
#define MUSIC_CONTROL_SCREEN_H
|
||||
|
||||
#include "lvgl.h"
|
||||
|
||||
typedef void (*SendMusicPlaybackCtrlCb_t)(void);
|
||||
|
||||
typedef struct MusicControlScreen
|
||||
{
|
||||
//Can be erased attributes
|
||||
lv_obj_t *display;
|
||||
//Should not be erased attributes
|
||||
} MusicControlScreen_t;
|
||||
|
||||
void music_control_screen_init(MusicControlScreen_t * const musicControlScreen);
|
||||
|
||||
void music_control_screen_register_BLE_command_send_cb(MusicControlScreen_t * const musicControlScreen, SendMusicPlaybackCtrlCb_t sendMusicPlaybackCtrlCb);
|
||||
|
||||
void music_control_screen_set_playing_music_title(MusicControlScreen_t * const musicControlScreen, const char *title);
|
||||
|
||||
void music_control_screen_create(MusicControlScreen_t * const musicControlScreen);
|
||||
|
||||
void music_control_screen_destroy(MusicControlScreen_t * const musicControlScreen);
|
||||
|
||||
#endif // MUSIC_CONTROL_SCREEN_H
|
@ -0,0 +1,93 @@
|
||||
#include "music_player_screen.h"
|
||||
#include "menu_screen.h"
|
||||
|
||||
static void gesture_event_cb(lv_event_t *e)
|
||||
{
|
||||
MusicPlayerScreen_t *musicPlayerScreen = e->user_data;
|
||||
|
||||
lv_dir_t gesture;
|
||||
switch(gesture = lv_indev_get_gesture_dir(lv_indev_get_act()))
|
||||
{
|
||||
case LV_DIR_LEFT:
|
||||
LV_LOG_USER("GESTURE : LEFT");
|
||||
break;
|
||||
case LV_DIR_RIGHT:
|
||||
LV_LOG_USER("GESTURE : RIGHT");
|
||||
// We create the menu screen and switch to it
|
||||
extern MenuScreen_t menuScreen;
|
||||
menu_screen_create(&menuScreen);
|
||||
lv_scr_load_anim(menuScreen.display, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 400, 0, true);
|
||||
break;
|
||||
case LV_DIR_TOP:
|
||||
LV_LOG_USER("GESTURE : TOP");
|
||||
break;
|
||||
case LV_DIR_BOTTOM:
|
||||
LV_LOG_USER("GESTURE : BOTTOM");
|
||||
break;
|
||||
default:
|
||||
LV_LOG_USER("GESTURE : %u", gesture);
|
||||
}
|
||||
}
|
||||
|
||||
static void cleanup_event_cb(lv_event_t *e)
|
||||
{
|
||||
MusicPlayerScreen_t *musicPlayerScreen = e->user_data;
|
||||
music_player_screen_destroy(musicPlayerScreen);
|
||||
LV_LOG_USER("cleanup");
|
||||
}
|
||||
|
||||
void music_player_screen_init(MusicPlayerScreen_t * const musicPlayerScreen)
|
||||
{
|
||||
if(!musicPlayerScreen)
|
||||
{
|
||||
LV_LOG_ERROR("NULL pointer given !");
|
||||
return;
|
||||
}
|
||||
|
||||
memset(musicPlayerScreen, 0, sizeof(MusicPlayerScreen_t));
|
||||
}
|
||||
|
||||
void music_player_screen_register_music_playback_control_cb(MusicPlayerScreen_t * const musicPlayerScreen, MusicPlaybackCtrlCb_t musicPlaybackCtrlCb)
|
||||
{
|
||||
if(!musicPlayerScreen)
|
||||
{
|
||||
LV_LOG_ERROR("NULL pointer given !");
|
||||
return;
|
||||
}
|
||||
|
||||
musicPlayerScreen->musicPlaybackCtrlCb = musicPlaybackCtrlCb;
|
||||
}
|
||||
|
||||
void music_player_screen_create(MusicPlayerScreen_t * const musicPlayerScreen)
|
||||
{
|
||||
if(!musicPlayerScreen)
|
||||
{
|
||||
LV_LOG_ERROR("NULL pointer given !");
|
||||
return;
|
||||
}
|
||||
|
||||
if(musicPlayerScreen->display)
|
||||
{
|
||||
LV_LOG_ERROR("display should be NULL here !");
|
||||
lv_obj_del(musicPlayerScreen->display);
|
||||
musicPlayerScreen->display = NULL;
|
||||
}
|
||||
musicPlayerScreen->display = lv_obj_create(NULL);
|
||||
lv_obj_set_style_bg_color(musicPlayerScreen->display, lv_color_black(), LV_PART_MAIN);
|
||||
|
||||
//We register the event callback to handle gestures
|
||||
lv_obj_add_event_cb(musicPlayerScreen->display, &(gesture_event_cb), LV_EVENT_GESTURE, musicPlayerScreen);
|
||||
//We register the event callback to handle the cleanup
|
||||
lv_obj_add_event_cb(musicPlayerScreen->display, &(cleanup_event_cb), LV_EVENT_DELETE, musicPlayerScreen);
|
||||
}
|
||||
|
||||
void music_player_screen_destroy(MusicPlayerScreen_t * const musicPlayerScreen)
|
||||
{
|
||||
if(!musicPlayerScreen)
|
||||
{
|
||||
LV_LOG_ERROR("NULL pointer given !");
|
||||
return;
|
||||
}
|
||||
|
||||
memset(musicPlayerScreen, 0, offsetof(MusicPlayerScreen_t, musicPlaybackCtrlCb));
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
#ifndef MUSIC_PLAYER_SCREEN_H
|
||||
#define MUSIC_PLAYER_SCREEN_H
|
||||
|
||||
#include "lvgl.h"
|
||||
|
||||
typedef void (*MusicPlaybackCtrlCb_t)(void);
|
||||
|
||||
typedef struct MusicPlayerScreen
|
||||
{
|
||||
//Can be erased attributes
|
||||
lv_obj_t *display;
|
||||
//Should not be erased attributes
|
||||
MusicPlaybackCtrlCb_t musicPlaybackCtrlCb;
|
||||
} MusicPlayerScreen_t;
|
||||
|
||||
void music_player_screen_init(MusicPlayerScreen_t * const musicPlayerScreen);
|
||||
|
||||
void music_player_screen_register_music_playback_control_cb(MusicPlayerScreen_t * const musicPlayerScreen, MusicPlaybackCtrlCb_t musicPlaybackCtrlCb);
|
||||
|
||||
void music_player_screen_set_playing_music_title(MusicPlayerScreen_t * const musicPlayerScreen, const char *title);
|
||||
|
||||
void music_player_screen_create(MusicPlayerScreen_t * const musicPlayerScreen);
|
||||
|
||||
void music_player_screen_destroy(MusicPlayerScreen_t * const musicPlayerScreen);
|
||||
|
||||
#endif // MUSIC_PLAYER_SCREEN_H
|
Loading…
Reference in New Issue
Block a user