AEB

Dependencies:   mbed

BBSerial.cpp

Committer:
clynamen
Date:
2016-07-30
Revision:
3:4bb49a5dfa47

File content as of revision 3:4bb49a5dfa47:

#include "BBSerial.h"

#include "stdio.h"

BBSerial::BBSerial() :
uart(PTC17, PTC16) // tx, rx of uart3
{
    uart.baud(9600);
    uart.format(8, SerialBase::Odd, 2);
}


void BBSerial::printf(const char* format, ...) {
    va_list argptr;
    va_start(argptr, format);
    
    char newFormat[200];
    
    // Add garbage and header in order to resolve first byte error
    sprintf(newFormat, "GARBAGEAAAAA%sZZZZZ\n", format);
    char buf[200];
    vsprintf(buf, newFormat, argptr);
    uart.printf("%s", buf);
 
    va_end(argptr);   
}

int BBSerial::scanf(const char* format, ...) {
    if(!uart.readable()) {
        return 0;
    }
    va_list argptr;
    va_start(argptr, format);
    
    char line[200];
    uart.gets(line, 200);
    line[199] = '\0';
    
    int read=0;
    
    int start = 0;
    for (int i = 0; i < 10; i++) {
        if(strncmp("AAAAA", &line[i], 5) == 0) {
            start = i+5;
        }
    }
    char *clean = &line[start];
    
    int end = strlen(clean)-6;
    clean[end] = 0;
    
    if(start < 1) {
        read = 0;
    } else {
        read = vsscanf(clean, format, argptr);
    }
      
    va_end(argptr);   
    return read;
}