Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Branch:
- RF24_library_test_tx
- Revision:
- 16:7a78838b3b8a
- Parent:
- 15:217b3e5a2275
- Child:
- 17:6ae73e8943ce
diff -r 217b3e5a2275 -r 7a78838b3b8a main.cpp
--- a/main.cpp Sat Dec 01 15:37:05 2018 +0000
+++ b/main.cpp Sat Dec 01 17:29:32 2018 +0000
@@ -10,6 +10,12 @@
#define spi_IRQ D4
#define TRANSFER_SIZE 15
+#define MAX_BUFFER_SIZE 255
+#define BUFFER_SIZE MAX_BUFFER_SIZE
+
+#define DATA_PROTOCOL_BEGIN '$'
+#define DATA_PROTOCOL_TOKEN ','
+#define DATA_PROTOCOL_END '*'
nRF24L01P nrf(spi_MOSI, spi_MISO, spi_SCK, nrf_CSN, nrf_CE, spi_IRQ); // mosi, miso, sck, csn, ce, irq
@@ -21,19 +27,30 @@
void initNRF();
void dumpRFInfo();
void getPayload(int id, unsigned int count, int lspeed, int rspeed, char* txData);
-
+int readSerialUntil(char *buffer, unsigned int buf_len, char terminator);
+char* inspectData(char *buffer, int buf_len);
-int main() {
+int main()
+{
int inByteCnt = 0;
- char buf[TRANSFER_SIZE+3];
-
+ char buffer[BUFFER_SIZE];
beepStart();
pc.baud(115200);
printf("I'm Master\r\n");
initNRF();
dumpRFInfo();
+ memset(buffer, NULL, BUFFER_SIZE);
+
while(1) {
+ int result = readSerialUntil(buffer, BUFFER_SIZE, DATA_PROTOCOL_END);
+ if(result>0) {
+ char *data = inspectData(buffer, BUFFER_SIZE);
+ printf("Data: %s\r\n", data);
+ free(data);
+
+ }
+ /*
while(pc.readable()) {
char inByte = pc.getc();
if(inByteCnt > TRANSFER_SIZE+2) {
@@ -41,15 +58,64 @@
inByteCnt = 0;
break;
} else if(inByte == '\0') {
- buf[inByteCnt] = '\0';
- printf("Command: %s\r\n", buf);
- nrf.write(NRF24L01P_PIPE_P0, buf, TRANSFER_SIZE);
+ buffer[inByteCnt] = '\0';
+ printf("Command: %s\r\n", buffer);
+ nrf.write(NRF24L01P_PIPE_P0, buffer, TRANSFER_SIZE);
inByteCnt=0;
} else {
- buf[inByteCnt++] = inByte;
+ buffer[inByteCnt++] = inByte;
+ }
+ }*/
+ }
+}
+
+char* inspectData(char *buffer, int buf_len)
+{
+ int start, end;
+ for(int i=0; buffer[i-1]!=DATA_PROTOCOL_BEGIN; i++) {
+ start = i;
+ if(i==buf_len) return 0;
+ }
+ for(int i=start+1; buffer[i-1]!=DATA_PROTOCOL_END; i++) {
+ end = i;
+ if(i==buf_len) return 0;
+ }
+ int data_len = end-start+1;
+
+ char *str = (char*)malloc(sizeof(char)*(data_len+1));
+ memset(str, NULL, data_len+1);
+ for(int i=0; i<data_len+1; i++){
+ *(str+i) = buffer[start+i];
+ }
+ return str;
+}
+
+int readSerialUntil(char *buffer, unsigned int buf_len, char term)
+{
+ int n=0;
+ char *str = (char*)malloc(sizeof(char)*buf_len);
+ memset(str, NULL, buf_len);
+ Timer t;
+ t.start();
+ int begin = t.read_ms();
+ while(t.read_ms()-begin < 100) {
+ if(pc.readable()) {
+ char inByte=pc.getc();
+ *(str+n)=inByte;
+ n++;
+ if(inByte == term) {
+ strcpy(buffer, str);
+ free(str);
+ return n;
+ }
+ if(n>buf_len) {
+ free(str);
+ return -1;
}
}
}
+ free(str);
+ return 0;
}
void dumpRFInfo()