Remove task to notify
This commit is contained in:
parent
079e676baf
commit
ee925200c3
|
@ -75,6 +75,7 @@
|
||||||
#define configUSE_TIME_SLICING 0
|
#define configUSE_TIME_SLICING 0
|
||||||
#define configUSE_NEWLIB_REENTRANT 0
|
#define configUSE_NEWLIB_REENTRANT 0
|
||||||
#define configENABLE_BACKWARD_COMPATIBILITY 1
|
#define configENABLE_BACKWARD_COMPATIBILITY 1
|
||||||
|
#define configUSE_TASK_NOTIFICATIONS 0
|
||||||
|
|
||||||
/* Hook function related definitions. */
|
/* Hook function related definitions. */
|
||||||
#define configUSE_IDLE_HOOK 0
|
#define configUSE_IDLE_HOOK 0
|
||||||
|
|
|
@ -142,9 +142,6 @@ void DisplayApp::Process(void* instance) {
|
||||||
NRF_LOG_INFO("displayapp task started!");
|
NRF_LOG_INFO("displayapp task started!");
|
||||||
app->InitHw();
|
app->InitHw();
|
||||||
|
|
||||||
// Send a dummy notification to unlock the lvgl display driver for the first iteration
|
|
||||||
xTaskNotifyGive(xTaskGetCurrentTaskHandle());
|
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
app->Refresh();
|
app->Refresh();
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,9 +38,6 @@ void DisplayApp::Process(void* instance) {
|
||||||
auto* app = static_cast<DisplayApp*>(instance);
|
auto* app = static_cast<DisplayApp*>(instance);
|
||||||
NRF_LOG_INFO("displayapp task started!");
|
NRF_LOG_INFO("displayapp task started!");
|
||||||
|
|
||||||
// Send a dummy notification to unlock the lvgl display driver for the first iteration
|
|
||||||
xTaskNotifyGive(xTaskGetCurrentTaskHandle());
|
|
||||||
|
|
||||||
app->InitHw();
|
app->InitHw();
|
||||||
while (true) {
|
while (true) {
|
||||||
app->Refresh();
|
app->Refresh();
|
||||||
|
@ -94,7 +91,6 @@ void DisplayApp::DisplayLogo(uint16_t color) {
|
||||||
Pinetime::Tools::RleDecoder rleDecoder(infinitime_nb, sizeof(infinitime_nb), color, colorBlack);
|
Pinetime::Tools::RleDecoder rleDecoder(infinitime_nb, sizeof(infinitime_nb), color, colorBlack);
|
||||||
for (int i = 0; i < displayWidth; i++) {
|
for (int i = 0; i < displayWidth; i++) {
|
||||||
rleDecoder.DecodeNext(displayBuffer, displayWidth * bytesPerPixel);
|
rleDecoder.DecodeNext(displayBuffer, displayWidth * bytesPerPixel);
|
||||||
ulTaskNotifyTake(pdTRUE, 500);
|
|
||||||
lcd.DrawBuffer(0, i, displayWidth, 1, reinterpret_cast<const uint8_t*>(displayBuffer), displayWidth * bytesPerPixel);
|
lcd.DrawBuffer(0, i, displayWidth, 1, reinterpret_cast<const uint8_t*>(displayBuffer), displayWidth * bytesPerPixel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,7 +99,6 @@ void DisplayApp::DisplayOtaProgress(uint8_t percent, uint16_t color) {
|
||||||
const uint8_t barHeight = 20;
|
const uint8_t barHeight = 20;
|
||||||
std::fill(displayBuffer, displayBuffer + (displayWidth * bytesPerPixel), color);
|
std::fill(displayBuffer, displayBuffer + (displayWidth * bytesPerPixel), color);
|
||||||
for (int i = 0; i < barHeight; i++) {
|
for (int i = 0; i < barHeight; i++) {
|
||||||
ulTaskNotifyTake(pdTRUE, 500);
|
|
||||||
uint16_t barWidth = std::min(static_cast<float>(percent) * 2.4f, static_cast<float>(displayWidth));
|
uint16_t barWidth = std::min(static_cast<float>(percent) * 2.4f, static_cast<float>(displayWidth));
|
||||||
lcd.DrawBuffer(0, displayWidth - barHeight + i, barWidth, 1, reinterpret_cast<const uint8_t*>(displayBuffer), barWidth * bytesPerPixel);
|
lcd.DrawBuffer(0, displayWidth - barHeight + i, barWidth, 1, reinterpret_cast<const uint8_t*>(displayBuffer), barWidth * bytesPerPixel);
|
||||||
}
|
}
|
||||||
|
|
|
@ -152,10 +152,6 @@ void LittleVgl::SetFullRefresh(FullRefreshDirections direction) {
|
||||||
void LittleVgl::FlushDisplay(const lv_area_t* area, lv_color_t* color_p) {
|
void LittleVgl::FlushDisplay(const lv_area_t* area, lv_color_t* color_p) {
|
||||||
uint16_t y1, y2, width, height = 0;
|
uint16_t y1, y2, width, height = 0;
|
||||||
|
|
||||||
ulTaskNotifyTake(pdTRUE, 200);
|
|
||||||
// Notification is still needed (even if there is a mutex on SPI) because of the DataCommand pin
|
|
||||||
// which cannot be set/clear during a transfer.
|
|
||||||
|
|
||||||
if ((scrollDirection == LittleVgl::FullRefreshDirections::Down) && (area->y2 == visibleNbLines - 1)) {
|
if ((scrollDirection == LittleVgl::FullRefreshDirections::Down) && (area->y2 == visibleNbLines - 1)) {
|
||||||
writeOffset = ((writeOffset + totalNbLines) - visibleNbLines) % totalNbLines;
|
writeOffset = ((writeOffset + totalNbLines) - visibleNbLines) % totalNbLines;
|
||||||
} else if ((scrollDirection == FullRefreshDirections::Up) && (area->y1 == 0)) {
|
} else if ((scrollDirection == FullRefreshDirections::Up) && (area->y1 == 0)) {
|
||||||
|
@ -219,7 +215,6 @@ void LittleVgl::FlushDisplay(const lv_area_t* area, lv_color_t* color_p) {
|
||||||
|
|
||||||
if (height > 0) {
|
if (height > 0) {
|
||||||
lcd.DrawBuffer(area->x1, y1, width, height, reinterpret_cast<const uint8_t*>(color_p), width * height * 2);
|
lcd.DrawBuffer(area->x1, y1, width, height, reinterpret_cast<const uint8_t*>(color_p), width * height * 2);
|
||||||
ulTaskNotifyTake(pdTRUE, 100);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t pixOffset = width * height;
|
uint16_t pixOffset = width * height;
|
||||||
|
|
|
@ -136,20 +136,14 @@ void SpiMaster::OnEndEvent() {
|
||||||
|
|
||||||
spiBaseAddress->TASKS_START = 1;
|
spiBaseAddress->TASKS_START = 1;
|
||||||
} else {
|
} else {
|
||||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
|
||||||
if (taskToNotify != nullptr) {
|
|
||||||
vTaskNotifyGiveFromISR(taskToNotify, &xHigherPriorityTaskWoken);
|
|
||||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
|
||||||
}
|
|
||||||
|
|
||||||
nrf_gpio_pin_set(this->pinCsn);
|
nrf_gpio_pin_set(this->pinCsn);
|
||||||
if (this->TransactionHook != nullptr) {
|
if (this->TransactionHook != nullptr) {
|
||||||
this->TransactionHook(false);
|
this->TransactionHook(false);
|
||||||
}
|
}
|
||||||
currentBufferAddr = 0;
|
currentBufferAddr = 0;
|
||||||
BaseType_t xHigherPriorityTaskWoken2 = pdFALSE;
|
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||||
xSemaphoreGiveFromISR(mutex, &xHigherPriorityTaskWoken2);
|
xSemaphoreGiveFromISR(mutex, &xHigherPriorityTaskWoken);
|
||||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken | xHigherPriorityTaskWoken2);
|
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +175,6 @@ bool SpiMaster::Write(uint8_t pinCsn, const uint8_t* data, size_t size, void (*T
|
||||||
return false;
|
return false;
|
||||||
auto ok = xSemaphoreTake(mutex, portMAX_DELAY);
|
auto ok = xSemaphoreTake(mutex, portMAX_DELAY);
|
||||||
ASSERT(ok == true);
|
ASSERT(ok == true);
|
||||||
taskToNotify = xTaskGetCurrentTaskHandle();
|
|
||||||
|
|
||||||
this->TransactionHook = TransactionHook;
|
this->TransactionHook = TransactionHook;
|
||||||
this->pinCsn = pinCsn;
|
this->pinCsn = pinCsn;
|
||||||
|
@ -226,7 +219,6 @@ bool SpiMaster::Write(uint8_t pinCsn, const uint8_t* data, size_t size, void (*T
|
||||||
bool SpiMaster::Read(uint8_t pinCsn, uint8_t* cmd, size_t cmdSize, uint8_t* data, size_t dataSize) {
|
bool SpiMaster::Read(uint8_t pinCsn, uint8_t* cmd, size_t cmdSize, uint8_t* data, size_t dataSize) {
|
||||||
xSemaphoreTake(mutex, portMAX_DELAY);
|
xSemaphoreTake(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
taskToNotify = nullptr;
|
|
||||||
this->TransactionHook = nullptr;
|
this->TransactionHook = nullptr;
|
||||||
this->pinCsn = pinCsn;
|
this->pinCsn = pinCsn;
|
||||||
DisableWorkaroundForFtpan58(spiBaseAddress, 0, 0);
|
DisableWorkaroundForFtpan58(spiBaseAddress, 0, 0);
|
||||||
|
@ -275,8 +267,6 @@ void SpiMaster::Wakeup() {
|
||||||
bool SpiMaster::WriteCmdAndBuffer(uint8_t pinCsn, const uint8_t* cmd, size_t cmdSize, const uint8_t* data, size_t dataSize) {
|
bool SpiMaster::WriteCmdAndBuffer(uint8_t pinCsn, const uint8_t* cmd, size_t cmdSize, const uint8_t* data, size_t dataSize) {
|
||||||
xSemaphoreTake(mutex, portMAX_DELAY);
|
xSemaphoreTake(mutex, portMAX_DELAY);
|
||||||
|
|
||||||
taskToNotify = nullptr;
|
|
||||||
|
|
||||||
this->TransactionHook = nullptr;
|
this->TransactionHook = nullptr;
|
||||||
|
|
||||||
this->pinCsn = pinCsn;
|
this->pinCsn = pinCsn;
|
||||||
|
|
|
@ -57,7 +57,6 @@ namespace Pinetime {
|
||||||
|
|
||||||
volatile uint32_t currentBufferAddr = 0;
|
volatile uint32_t currentBufferAddr = 0;
|
||||||
volatile size_t currentBufferSize = 0;
|
volatile size_t currentBufferSize = 0;
|
||||||
volatile TaskHandle_t taskToNotify;
|
|
||||||
SemaphoreHandle_t mutex = nullptr;
|
SemaphoreHandle_t mutex = nullptr;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,7 +121,6 @@ void DisplayLogo() {
|
||||||
Pinetime::Tools::RleDecoder rleDecoder(infinitime_nb, sizeof(infinitime_nb));
|
Pinetime::Tools::RleDecoder rleDecoder(infinitime_nb, sizeof(infinitime_nb));
|
||||||
for (int i = 0; i < displayWidth; i++) {
|
for (int i = 0; i < displayWidth; i++) {
|
||||||
rleDecoder.DecodeNext(displayBuffer, displayWidth * bytesPerPixel);
|
rleDecoder.DecodeNext(displayBuffer, displayWidth * bytesPerPixel);
|
||||||
ulTaskNotifyTake(pdTRUE, 500);
|
|
||||||
lcd.DrawBuffer(0, i, displayWidth, 1, reinterpret_cast<const uint8_t*>(displayBuffer), displayWidth * bytesPerPixel);
|
lcd.DrawBuffer(0, i, displayWidth, 1, reinterpret_cast<const uint8_t*>(displayBuffer), displayWidth * bytesPerPixel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,7 +129,6 @@ void DisplayProgressBar(uint8_t percent, uint16_t color) {
|
||||||
static constexpr uint8_t barHeight = 20;
|
static constexpr uint8_t barHeight = 20;
|
||||||
std::fill(displayBuffer, displayBuffer + (displayWidth * bytesPerPixel), color);
|
std::fill(displayBuffer, displayBuffer + (displayWidth * bytesPerPixel), color);
|
||||||
for (int i = 0; i < barHeight; i++) {
|
for (int i = 0; i < barHeight; i++) {
|
||||||
ulTaskNotifyTake(pdTRUE, 500);
|
|
||||||
uint16_t barWidth = std::min(static_cast<float>(percent) * 2.4f, static_cast<float>(displayWidth));
|
uint16_t barWidth = std::min(static_cast<float>(percent) * 2.4f, static_cast<float>(displayWidth));
|
||||||
lcd.DrawBuffer(0, displayWidth - barHeight + i, barWidth, 1, reinterpret_cast<const uint8_t*>(displayBuffer), barWidth * bytesPerPixel);
|
lcd.DrawBuffer(0, displayWidth - barHeight + i, barWidth, 1, reinterpret_cast<const uint8_t*>(displayBuffer), barWidth * bytesPerPixel);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue