]> rtime.felk.cvut.cz Git - pes-rpp/rpp-test-sw.git/blobdiff - source/cmdio_tisci.c
Debugging and rewriting send not to use interrupts, but direct sending.
[pes-rpp/rpp-test-sw.git] / source / cmdio_tisci.c
index 6121226320a8f2a21a4062624d49faf2303b77e4..2c99a07f105cf74acb5db5bc9a552178be559c5b 100644 (file)
@@ -21,93 +21,83 @@ void initIoBuffer() {
        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
 };