Radar_RTOS

Dependencies:   mbed

Dependents:   Radar_RTOS_Kart

Fork of Nucleo_radar_buz by Contest IOT GSE5

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers UART_Radar.cpp Source File

UART_Radar.cpp

00001 #include "UART_Radar.h"
00002 #include "mbed.h"
00003 #include <string.h>
00004 Serial carte(PA_9, PA_10); //emission --- tx, rx
00005 Serial pc(USBTX, USBRX); //reception --- tx, rx
00006 
00007 void USART1_puts(char *text){
00008     while(*text != '\0'){
00009         
00010         if(carte.writeable()){ 
00011             carte.putc(*text);
00012             text++;
00013         }
00014         
00015     }
00016 }
00017         
00018 
00019 void format(char *msg, char *msg_formated){
00020     int somme=5;
00021     int i=0;
00022     msg_formated[0]=2;
00023     printf("\n\r");
00024     while(msg[i]!=0){
00025         somme= somme + msg[i];
00026         msg_formated[i+1]=msg[i];
00027         i++;
00028     }
00029     if(somme>255){
00030             somme++;
00031     }
00032     somme=somme%256;
00033     msg_formated[i+1]=~somme;
00034     msg_formated[i+2]=3;
00035     msg_formated[i+3]=0;
00036 
00037    //A supprimer
00038     i=0;
00039     while(msg_formated[i]!=0){
00040         printf("[%d] ", msg_formated[i]);
00041         i++;
00042     }
00043 }
00044 
00045 
00046 void send(char *data){
00047         char trame[52]="";
00048         format(data, trame);
00049         USART1_puts(trame);
00050 }
00051 
00052 int receive(char *frame){
00053     int I;
00054     unsigned int sommeBuffer;
00055     char r;
00056     Timer timeout;
00057     timeout.start();
00058     while(1){
00059         if(timeout.read_ms() > 100) return 1;
00060         if(carte.readable()){
00061             r = carte.getc();
00062             
00063             switch(r){
00064                 case 2: //Start
00065                     I=0;
00066                     sommeBuffer=2;
00067                     break;
00068                     
00069                 case 3: //Stop
00070                     frame[I]=0;
00071                     sommeBuffer+=3;
00072                     
00073                     if(sommeBuffer>255){
00074                         sommeBuffer++;
00075                     }
00076                     sommeBuffer=~sommeBuffer;
00077                     sommeBuffer=sommeBuffer%256;
00078                 
00079                     if(sommeBuffer==0){ //Les sommes concordent, les données sont valides
00080                         frame[I-1]=0;
00081                         return 0;
00082                     }else{ //Message invalidé par la somme
00083                         frame[0]=0;
00084                         return 1;
00085                     }
00086                     
00087                 default : 
00088                     frame[I]=r;
00089                     sommeBuffer+=r;        
00090                     I++;
00091                     break;
00092                 }
00093             }
00094         }
00095 }
00096 
00097 int controle(char *frame){
00098     if (*frame!=6) return 0;
00099     else return 1;  
00100 }