inBuffer.mutex = xSemaphoreCreateMutex();
inBuffer.initialized = 1;
}
-portBASE_TYPE printToOutputBuffer(const uint8_t * string, uint32_t length, portTickType ticks) {
- return print(&outBuffer, string, length, ticks);
+portBASE_TYPE print(const uint8_t * string, uint32_t length) {
+ return genericPrint(&outBuffer, string, length);
}
-portBASE_TYPE printToInputBuffer(const uint8_t * string, uint32_t length, portTickType ticks) {
- return print(&inBuffer, string, length, ticks);
+portBASE_TYPE read(uint8_t * ch) {
+ return genericRead(&inBuffer, ch);
}
-portBASE_TYPE readFromOutputBuffer(uint8_t * ch, portTickType ticks) {
- return read(&outBuffer, ch, ticks);
-}
-portBASE_TYPE readFromInputBuffer(uint8_t * ch, portTickType ticks) {
- return read(&inBuffer, ch, ticks);
-}
-portBASE_TYPE read(tBuffer* buffer, uint8_t * ch, portTickType ticks) {
+portBASE_TYPE genericRead(tBuffer* buffer, uint8_t * ch) {
+ if (!buffer->initialized) return errBUFFER_NOT_INITIALIZED;
portBASE_TYPE ret;
- ret = xQueueReceive(buffer->buf, ch, ticks);
+ ret = xQueueReceive(buffer->buf, ch, portMAX_DELAY);
return ret;
}
-portBASE_TYPE print(tBuffer* buffer, const uint8_t * string, uint32_t length, portTickType ticks) {
+portBASE_TYPE genericPrint(tBuffer* buffer, const uint8_t * string, uint32_t length) {
+ if (!buffer->initialized) return errBUFFER_NOT_INITIALIZED;
uint32_t i = 0;
portBASE_TYPE ret = pdPASS;
+ xSemaphoreTake(buffer->mutex, portMAX_DELAY);
while (i < length && string[i] != '\0') {
- ret = xQueueSend(buffer->buf, (void*)&string[i++], ticks);
+ if (xQueueSend(buffer->buf, (void*)&string[i], 0) == pdPASS) {
+ i++;
+ }
+ else sciSend(sciREG, 1, NULL);
}
-
+ sciSend(sciREG, 1, NULL);
+ xSemaphoreGive(buffer->mutex);
return ret;
}
-void clearInputBuffer() {
- clearBuffer(&inBuffer);
+portBASE_TYPE clearInputBuffer() {
+ return clearBuffer(&inBuffer);
}
-void clearOutputBuffer() {
- clearBuffer(&outBuffer);
+portBASE_TYPE clearOutputBuffer() {
+ return clearBuffer(&outBuffer);
}
-void clearBuffer(tBuffer * buffer) {
+portBASE_TYPE clearBuffer(tBuffer * buffer) {
+ if (!buffer->initialized) return errBUFFER_NOT_INITIALIZED;
while ((xQueueReceive(buffer->buf, NULL, 0)) != errQUEUE_EMPTY) // Delete content of queue
;
+ return pdPASS;
}
-int buf_putc(cmd_io_t *cmd_io, int ch) {
+int tisci_putc(cmd_io_t *cmd_io, int ch) {
uint8_t c = (uint8_t)ch;
- xSemaphoreTake(outBuffer.mutex, portMAX_DELAY);
- if (print(&outBuffer, (uint8_t *)&c, 1, portMAX_DELAY) != pdPASS) {
- xSemaphoreGive(outBuffer.mutex);
+ if (print((uint8_t *)&c, 1) != pdPASS) {
return 0;
}
- xSemaphoreGive(outBuffer.mutex);
return 1;
}
-int buf_getc(cmd_io_t *cmd_io) {
+int tisci_getc(cmd_io_t *cmd_io) {
uint8_t ret = '\0';
- xSemaphoreTake(inBuffer.mutex, portMAX_DELAY);
- if (xQueueReceive(inBuffer.buf, &ret, portMAX_DELAY) != pdPASS) {
+ if (read(&ret) != pdPASS) {
ret = '\0';
}
- xSemaphoreGive(inBuffer.mutex);
return ret;
}
-int buf_write(cmd_io_t *cmd_io, const void *buf, int count) {
+int tisci_write(cmd_io_t *cmd_io, const void *buf, int count) {
const char *tmpBuf = buf;
- int i = 0;
- xSemaphoreTake(outBuffer.mutex, portMAX_DELAY);
- while (i < count) {
- print(&outBuffer, (uint8_t *)&tmpBuf[i], 1, portMAX_DELAY);
- i++;
- }
- xSemaphoreGive(outBuffer.mutex);
- return i;
+ if (print((uint8_t *)tmpBuf, count) != pdPASS)
+ return 0;
+ return count;
}
-int buf_read(cmd_io_t *cmd_io, void *buf, int count) {
+int tisci_read(cmd_io_t *cmd_io, void *buf, int count) {
char *tmpBuf = buf;
int i = 0;
- xSemaphoreTake(inBuffer.mutex, portMAX_DELAY);
-
while (i < count) {
- if (xQueueReceive(inBuffer.buf, &tmpBuf[i], 0) != pdPASS)
+ if (read((uint8_t *)&tmpBuf[i]) != pdPASS)
break;
i++;
}
- xSemaphoreGive(inBuffer.mutex);
return i;
}
/* Setting io stack for cmdProc */
cmd_io_t cmd_io_buf={
- buf_putc,
- buf_getc,
- buf_write,
- buf_read
+ tisci_putc,
+ tisci_getc,
+ tisci_write,
+ tisci_read
};