Backing up an unused program in case of future need

Dependencies:   mbed

Committer:
andrewboyson
Date:
Thu Dec 06 11:40:19 2018 +0000
Revision:
8:45a0205a298f
Parent:
3:accba7e07a0d
Backing up

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewboyson 3:accba7e07a0d 1 #include "mbed.h"
andrewboyson 3:accba7e07a0d 2 static RawSerial uart(p9, p10); // tx, rx
andrewboyson 3:accba7e07a0d 3
andrewboyson 3:accba7e07a0d 4 #define RECV_BUFFER_LENGTH 1024
andrewboyson 3:accba7e07a0d 5 #define SEND_BUFFER_LENGTH 1024
andrewboyson 3:accba7e07a0d 6 static char recvbuffer[RECV_BUFFER_LENGTH];
andrewboyson 3:accba7e07a0d 7 static char sendbuffer[SEND_BUFFER_LENGTH];
andrewboyson 3:accba7e07a0d 8 static char* pRecvPush; //Initialised in init
andrewboyson 3:accba7e07a0d 9 static char* pRecvPull; //Initialised in init
andrewboyson 3:accba7e07a0d 10 static char* pSendPush; //Initialised in init
andrewboyson 3:accba7e07a0d 11 static char* pSendPull; //Initialised in init
andrewboyson 3:accba7e07a0d 12
andrewboyson 3:accba7e07a0d 13 static void incrementPushPullPointer(char** pp, char* pbuffer, int bufferlength)
andrewboyson 3:accba7e07a0d 14 {
andrewboyson 3:accba7e07a0d 15 ++*pp; //increment the pointer by one
andrewboyson 3:accba7e07a0d 16 if (*pp == pbuffer + bufferlength) *pp = pbuffer; //if the pointer is now beyond the end then point it back to the start
andrewboyson 3:accba7e07a0d 17 }
andrewboyson 3:accba7e07a0d 18 static void recvpush(void) //Called by the uart data received interrupt.
andrewboyson 3:accba7e07a0d 19 {
andrewboyson 3:accba7e07a0d 20 while (uart.readable())
andrewboyson 3:accba7e07a0d 21 {
andrewboyson 3:accba7e07a0d 22 int c = uart.getc();
andrewboyson 3:accba7e07a0d 23 *pRecvPush = c;
andrewboyson 3:accba7e07a0d 24 incrementPushPullPointer(&pRecvPush, recvbuffer, RECV_BUFFER_LENGTH);
andrewboyson 3:accba7e07a0d 25 }
andrewboyson 3:accba7e07a0d 26 }
andrewboyson 3:accba7e07a0d 27 static int sendpull(void) //Called every scan by UartMain. Returns the next byte or EOF if no more are available
andrewboyson 3:accba7e07a0d 28 {
andrewboyson 3:accba7e07a0d 29 if (pSendPull == pSendPush) return EOF;
andrewboyson 3:accba7e07a0d 30 char c = *pSendPull;
andrewboyson 3:accba7e07a0d 31 incrementPushPullPointer(&pSendPull, sendbuffer, SEND_BUFFER_LENGTH);
andrewboyson 3:accba7e07a0d 32 return c;
andrewboyson 3:accba7e07a0d 33 }
andrewboyson 3:accba7e07a0d 34 int UartRecvPull(void) //Returns the next byte or EOF if no more are available
andrewboyson 3:accba7e07a0d 35 {
andrewboyson 3:accba7e07a0d 36 if (pRecvPull == pRecvPush) return EOF;
andrewboyson 3:accba7e07a0d 37 char c = *pRecvPull;
andrewboyson 3:accba7e07a0d 38 incrementPushPullPointer(&pRecvPull, recvbuffer, RECV_BUFFER_LENGTH);
andrewboyson 3:accba7e07a0d 39 return c;
andrewboyson 3:accba7e07a0d 40 }
andrewboyson 3:accba7e07a0d 41 void UartSendPush(char c) //Called whenever something needs to be sent
andrewboyson 3:accba7e07a0d 42 {
andrewboyson 3:accba7e07a0d 43 *pSendPush = c;
andrewboyson 3:accba7e07a0d 44 incrementPushPullPointer(&pSendPush, sendbuffer, SEND_BUFFER_LENGTH);
andrewboyson 3:accba7e07a0d 45 }
andrewboyson 3:accba7e07a0d 46 void UartBaud(int baud)
andrewboyson 3:accba7e07a0d 47 {
andrewboyson 3:accba7e07a0d 48 uart.baud(baud);
andrewboyson 3:accba7e07a0d 49 }
andrewboyson 3:accba7e07a0d 50 void UartReset()
andrewboyson 3:accba7e07a0d 51 {
andrewboyson 3:accba7e07a0d 52 pRecvPush = recvbuffer;
andrewboyson 3:accba7e07a0d 53 pRecvPull = recvbuffer;
andrewboyson 3:accba7e07a0d 54 pSendPush = sendbuffer;
andrewboyson 3:accba7e07a0d 55 pSendPull = sendbuffer;
andrewboyson 3:accba7e07a0d 56 }
andrewboyson 3:accba7e07a0d 57 int UartInit()
andrewboyson 3:accba7e07a0d 58 {
andrewboyson 3:accba7e07a0d 59 UartReset();
andrewboyson 3:accba7e07a0d 60 uart.attach(&recvpush, Serial::RxIrq);
andrewboyson 3:accba7e07a0d 61 return 0;
andrewboyson 3:accba7e07a0d 62 }
andrewboyson 3:accba7e07a0d 63 int UartMain()
andrewboyson 3:accba7e07a0d 64 {
andrewboyson 3:accba7e07a0d 65 while(uart.writeable())
andrewboyson 3:accba7e07a0d 66 {
andrewboyson 3:accba7e07a0d 67 int c = sendpull();
andrewboyson 3:accba7e07a0d 68 if (c == EOF) break;
andrewboyson 3:accba7e07a0d 69 uart.putc(c);
andrewboyson 3:accba7e07a0d 70 }
andrewboyson 3:accba7e07a0d 71 return 0;
andrewboyson 3:accba7e07a0d 72 }