Loading...
Searching...
No Matches
flashwrite.c
1/***********************************************************************************
2 * @file flashWrite.c *
3 * @author Matt Ricci *
4 * @addtogroup RTOS *
5 * *
6 * @{ *
7 ***********************************************************************************/
8
9#include "flashwrite.h"
10
11extern EventGroupHandle_t xTaskEnableGroup;
12
13/* =============================================================================== */
22void vIdle(void *argument) {
23
24 enum State *flightState = StateHandle_getHandle("FlightState").state;
25 MemBuff *mem = (MemBuff *)argument;
26
27 for (;;) {
28 // Write if a page is available in the buffer
29 if (*flightState >= LAUNCH && mem->pageReady)
30 xEventGroupSetBits(xTaskEnableGroup, GROUP_TASK_ENABLE_FLASH);
31 }
32}
33
34/* =============================================================================== */
43void vFlashBuffer(void *argument) {
44 const TickType_t timeout = portMAX_DELAY;
45 uint32_t pageAddr = 0;
46
47 W25Q128_t *flash = DeviceList_getDeviceHandle(DEVICE_FLASH).device;
48 MemBuff *mem = (MemBuff *)argument;
49 uint8_t outBuff[flash->pageSize];
50
51 for (;;) {
52 // Wait for write flag to be ready, clear flag on exit
53 EventBits_t uxBits = xEventGroupWaitBits(xTaskEnableGroup, GROUP_TASK_ENABLE_FLASH, pdTRUE, pdFALSE, timeout);
54 if (uxBits & GROUP_TASK_ENABLE_FLASH) {
55 // Flush data to output buffer
56 bool success = mem->readPage(mem, outBuff);
57 if (success) {
58 taskENTER_CRITICAL();
59 // Write data to flash memory if within bounds
60 if (pageAddr / flash->pageSize < flash->pageCount - 1)
61 flash->writePage(flash, pageAddr, outBuff);
62
63 // Increment page address
64 pageAddr += 0x100;
65 taskEXIT_CRITICAL();
66 }
67 }
68 }
69}
70
DeviceHandle_t DeviceList_getDeviceHandle(DeviceKey)
Retrieve device handle from list by key.
Definition devicelist.c:36
int pageSize
Number of bytes per page.
Definition w25q128.h:34
void(* writePage)(struct W25Q128 *, uint32_t, uint8_t *)
Write page method.
Definition w25q128.h:38
long pageCount
Total number of pages.
Definition w25q128.h:35