create i2c command tasks with mutex
This commit is contained in:
@@ -112,11 +112,7 @@ bool H2201_dipswitch_read(int sw)
|
||||
static void IRAM_ATTR H2201_buttons_ISR(void *arg)
|
||||
{
|
||||
uint32_t io_num = (uint32_t)arg;
|
||||
// if (gpio_get_level(io_num) == 0)
|
||||
//{
|
||||
// h2201_dispatcher_add_event(BUTTON_EVENTS, BUTTON_PRESS_EVENT, io_num);
|
||||
h2201_dispatcher_dowork_fromISR(h2201_buttons_eventhandler, BUTTON_PRESS_EVENT, &io_num, sizeof(io_num));
|
||||
// }
|
||||
}
|
||||
|
||||
void H2201_buttons_init(void)
|
||||
|
||||
@@ -20,7 +20,7 @@ bool h2201_dispatcher_dowork(h2201_dispatcher_cb_t p_cback, uint16_t event, void
|
||||
h2201_dispatcher_msg_t msg;
|
||||
memset(&msg, 0, sizeof(h2201_dispatcher_msg_t));
|
||||
|
||||
msg.sig = BT_APP_SIG_WORK_DISPATCH;
|
||||
msg.sig = H2201_DISPATCHER_SIG_DOWORK;
|
||||
msg.event = event;
|
||||
msg.cb = p_cback;
|
||||
|
||||
@@ -59,7 +59,7 @@ void h2201_dispatcher_dowork_fromISR(h2201_dispatcher_cb_t p_cback, uint16_t eve
|
||||
h2201_dispatcher_msg_t msg;
|
||||
memset(&msg, 0, sizeof(h2201_dispatcher_msg_t));
|
||||
|
||||
msg.sig = BT_APP_SIG_WORK_DISPATCH;
|
||||
msg.sig = H2201_DISPATCHER_SIG_DOWORK;
|
||||
msg.event = event;
|
||||
msg.cb = p_cback;
|
||||
|
||||
@@ -90,7 +90,7 @@ bool h2201_dispatcher_dowork_simple_fromISR(h2201_dispatcher_cb_t p_cback, uint1
|
||||
h2201_dispatcher_msg_t msg;
|
||||
// memset(&msg, 0, sizeof(h2201_dispatcher_msg_t));
|
||||
|
||||
msg.sig = BT_APP_SIG_WORK_DISPATCH;
|
||||
msg.sig = H2201_DISPATCHER_SIG_DOWORK;
|
||||
msg.event = event;
|
||||
msg.cb = p_cback;
|
||||
msg.param = NULL;
|
||||
@@ -149,8 +149,7 @@ static void H2201_dispatcher_task(void *arg)
|
||||
ESP_LOGI(H2201_DISPATCHER_TAG, "sig 0x%x", msg.sig);
|
||||
switch (msg.sig)
|
||||
{
|
||||
case BT_APP_SIG_WORK_DISPATCH:
|
||||
// h2201_dispatcher_work_dispatched(&msg);
|
||||
case H2201_DISPATCHER_SIG_DOWORK:
|
||||
if (msg.cb)
|
||||
{
|
||||
msg.cb(msg.event, msg.param);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
#define H2201_DISPATCHER_QUEUE_SIZE 30
|
||||
|
||||
#define BT_APP_SIG_WORK_DISPATCH (0x01)
|
||||
#define H2201_DISPATCHER_SIG_DOWORK (0x01)
|
||||
|
||||
/**
|
||||
* @brief handler for the dispatched work
|
||||
|
||||
@@ -7,6 +7,57 @@
|
||||
#include "H2201_V1_IC1_PARAM.h"
|
||||
#include "SigmaStudioFW.h"
|
||||
|
||||
SemaphoreHandle_t i2c_block_mutex = NULL;
|
||||
|
||||
void H2201_i2c_beep_task(void *arg)
|
||||
{
|
||||
printf("start beep task \n");
|
||||
if (xSemaphoreTake(i2c_block_mutex, (TickType_t)portMAX_DELAY) == pdTRUE)
|
||||
{
|
||||
ADI_REG_TYPE beep_on[4] = {0x00, 0x80, 0x00, 0x00};
|
||||
SIGMA_WRITE_REGISTER_BLOCK(DEVICE_ADDR_IC1, MOD_BEEPSWITCH_ISON_ADDR, 4, beep_on);
|
||||
vTaskDelay(400 / portTICK_PERIOD_MS);
|
||||
ADI_REG_TYPE beep_off[4] = {0x00, 0x00, 0x00, 0x00};
|
||||
SIGMA_WRITE_REGISTER_BLOCK(DEVICE_ADDR_IC1, MOD_BEEPSWITCH_ISON_ADDR, 4, beep_off);
|
||||
|
||||
xSemaphoreGive(i2c_block_mutex);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("cannot get mutex \n");
|
||||
}
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
void H2201_i2c_beep(void)
|
||||
{
|
||||
xTaskCreate(H2201_i2c_beep_task, "beep", 2048, NULL, configMAX_PRIORITIES - 3, NULL);
|
||||
}
|
||||
|
||||
void H2201_i2c_volume_task(void *arg)
|
||||
{
|
||||
printf("start volume task \n");
|
||||
uint8_t volume = *((uint8_t *)arg);
|
||||
if (xSemaphoreTake(i2c_block_mutex, (TickType_t)portMAX_DELAY) == pdTRUE)
|
||||
{
|
||||
printf("Master vol %d\n", volume);
|
||||
|
||||
SIGMA_WRITE_REGISTER(DEVICE_ADDR_IC1, REG_PLAYBACK_HEADPHONE_LEFT_IC1_ADDR, volume);
|
||||
// vTaskDelay(10 / portTICK_PERIOD_MS);
|
||||
SIGMA_WRITE_REGISTER(DEVICE_ADDR_IC1, REG_PLAYBACK_HEADPHONE_RIGHT_IC1_ADDR, volume);
|
||||
|
||||
xSemaphoreGive(i2c_block_mutex);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("cannot get mutex \n");
|
||||
}
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
void H2201_i2c_mastervolume(uint8_t volume)
|
||||
{
|
||||
xTaskCreate(H2201_i2c_volume_task, "volume", 2048, (void *)&volume, configMAX_PRIORITIES - 3, NULL);
|
||||
}
|
||||
|
||||
void H2201_i2c_master_init(void)
|
||||
{
|
||||
i2c_config_t i2c_config = {
|
||||
@@ -29,26 +80,12 @@ void H2201_i2c_master_init(void)
|
||||
ESP_LOGE(H2201_I2C_TAG, "%s i2c driver config failed: %s\n", __func__, esp_err_to_name(err));
|
||||
return;
|
||||
}
|
||||
|
||||
i2c_block_mutex = xSemaphoreCreateBinary();
|
||||
xSemaphoreGive(i2c_block_mutex);
|
||||
}
|
||||
|
||||
void H2201_i2c_adau1761_init(void)
|
||||
{
|
||||
default_download_IC1();
|
||||
}
|
||||
|
||||
void H2201_i2c_beep(void)
|
||||
{
|
||||
ADI_REG_TYPE beep_on[4] = {0x00, 0x80, 0x00, 0x00};
|
||||
SIGMA_WRITE_REGISTER_BLOCK(DEVICE_ADDR_IC1, MOD_BEEPSWITCH_ISON_ADDR, 4, beep_on);
|
||||
vTaskDelay(400 / portTICK_PERIOD_MS);
|
||||
ADI_REG_TYPE beep_off[4] = {0x00, 0x00, 0x00, 0x00};
|
||||
SIGMA_WRITE_REGISTER_BLOCK(DEVICE_ADDR_IC1, MOD_BEEPSWITCH_ISON_ADDR, 4, beep_off);
|
||||
}
|
||||
|
||||
void H2201_i2c_mastervolume(uint8_t volume)
|
||||
{
|
||||
printf("Master vol %d\n", volume);
|
||||
SIGMA_WRITE_REGISTER(DEVICE_ADDR_IC1, REG_PLAYBACK_HEADPHONE_LEFT_IC1_ADDR, volume);
|
||||
vTaskDelay(10 / portTICK_PERIOD_MS);
|
||||
SIGMA_WRITE_REGISTER(DEVICE_ADDR_IC1, REG_PLAYBACK_HEADPHONE_RIGHT_IC1_ADDR, volume);
|
||||
}
|
||||
Reference in New Issue
Block a user