pcc.h-Dateireferenz


Ausführliche Beschreibung

Definitionen und Funktionen PC-Communication.

Revision
0.1
Date
16.04.2007
Author
Olaf Petersen

Description: new functions has been added:
Version:
V1.0 - 16.04.2007 - Olaf Petersen
created

Definiert in Datei pcc.h.

Dieser Graph zeigt, welche Datei direkt oder indirekt diese Datei enthält:

gehe zum Quellcode dieser Datei

Datenstrukturen

struct  pcc_t
union  tunHeader
 header der Nachricht Mehr ...
struct  tstMessage
 struktur einer nachricht Mehr ...

Makrodefinitionen

#define LEFT   0
#define RIGHT   1
#define PCC_SYNC   00
#define PCC_BOARD_GET   01
 Pins abfragen.
#define PCC_BOARD_SET   02
 PINs setzen.
#define PCC_BOARD_AKKU   03
 Akku Spannung abfragen.
#define PCC_BOARD_I2C   04
 reserviert für I²C , OHNE FUNKTION
#define PCC_BOARD_TIME   05
 Sytemzeit abfragen.
#define PCC_MOT_L_ENC   10
 Encoderwert.
#define PCC_MOT_L_CUR   11
 Motorstrom.
#define PCC_MOT_L_ACS   12
 Istdrehzahl (Actual Speed).
#define PCC_MOT_L_SRS   13
 Solldrehzahl (Set Rotation Speed).
#define PCC_MOT_L_TMP   14
 reserviert für Tempreratur, OHNE FUNKTION
#define PCC_MOT_R_ENC   16
 Encoderwert.
#define PCC_MOT_R_CUR   17
 Motorstrom.
#define PCC_MOT_R_ACS   18
 Istdrehzahl (Actual Speed).
#define PCC_MOT_R_SRS   19
 Solldrehzahl (Set Rotation Speed).
#define PCC_MOT_R_TMP   20
 reserviert für Tempreratur, OHNE FUNKTION
#define PCC_SENS_IR1   21
 Infrarot Abstandssensor(SHARP) 1.
#define PCC_SENS_IR2   22
 Infrarot Abstandssensor(SHARP) 2.
#define PCC_SENS_ACC   23
 reserviert für Beschleunigugssensor(acceleration), OHNE FUNKTION
#define PCC_SENS_ORI   24
 reserviert für Kompass(orientation), OHNE FUNKTION
#define PCC_ACTION_MOVE   31
 Fahre geradeaus.
#define PCC_ACTION_TURN   30
 Fahre Kurve.
#define MAX_BUF   100

Funktionen

void pcc_init (const pcc_t *daten)
 Initialisiert die PC Kommunikation.
void pcc_rx (uint8_t buf)
 Hier werden die empfangenen Daten ausgewertet.
void pcc (void)
 Server.
void pcc_send (tstMessage *message)


Makro-Dokumentation

#define LEFT   0

Definiert in Zeile 22 der Datei pcc.h.

Wird benutzt von main(), pcc() und regelung().

#define MAX_BUF   100

Definiert in Zeile 79 der Datei pcc.h.

#define PCC_ACTION_MOVE   31

Fahre geradeaus.

Definiert in Zeile 75 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_ACTION_TURN   30

Fahre Kurve.

Definiert in Zeile 76 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_BOARD_AKKU   03

Akku Spannung abfragen.

Definiert in Zeile 54 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_BOARD_GET   01

Pins abfragen.

Definiert in Zeile 52 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_BOARD_I2C   04

reserviert für I²C , OHNE FUNKTION

Definiert in Zeile 55 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_BOARD_SET   02

PINs setzen.

Definiert in Zeile 53 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_BOARD_TIME   05

Sytemzeit abfragen.

Definiert in Zeile 56 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_MOT_L_ACS   12

Istdrehzahl (Actual Speed).

Definiert in Zeile 60 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_MOT_L_CUR   11

Motorstrom.

Definiert in Zeile 59 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_MOT_L_ENC   10

Encoderwert.

Definiert in Zeile 58 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_MOT_L_SRS   13

Solldrehzahl (Set Rotation Speed).

Definiert in Zeile 61 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_MOT_L_TMP   14

reserviert für Tempreratur, OHNE FUNKTION

Definiert in Zeile 62 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_MOT_R_ACS   18

Istdrehzahl (Actual Speed).

Definiert in Zeile 66 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_MOT_R_CUR   17

Motorstrom.

Definiert in Zeile 65 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_MOT_R_ENC   16

Encoderwert.

Definiert in Zeile 64 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_MOT_R_SRS   19

Solldrehzahl (Set Rotation Speed).

Definiert in Zeile 67 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_MOT_R_TMP   20

reserviert für Tempreratur, OHNE FUNKTION

Definiert in Zeile 68 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_SENS_ACC   23

reserviert für Beschleunigugssensor(acceleration), OHNE FUNKTION

Definiert in Zeile 72 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_SENS_IR1   21

Infrarot Abstandssensor(SHARP) 1.

Definiert in Zeile 70 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_SENS_IR2   22

Infrarot Abstandssensor(SHARP) 2.

Definiert in Zeile 71 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_SENS_ORI   24

reserviert für Kompass(orientation), OHNE FUNKTION

Definiert in Zeile 73 der Datei pcc.h.

Wird benutzt von pcc().

#define PCC_SYNC   00

Definiert in Zeile 50 der Datei pcc.h.

Wird benutzt von pcc() und pcc_sendError().

#define RIGHT   1

Definiert in Zeile 23 der Datei pcc.h.

Wird benutzt von main(), pcc() und regelung().


Dokumentation der Funktionen

void pcc ( void   ) 

Server.

Definiert in Zeile 123 der Datei pcc.c.

Benutzt tunHeader::cmdid, tstMessage::header, LEFT, tunHeader::length, tstMessage::message, PCC_ACTION_MOVE, PCC_ACTION_TURN, PCC_BOARD_AKKU, PCC_BOARD_GET, PCC_BOARD_I2C, PCC_BOARD_SET, PCC_BOARD_TIME, PCC_MOT_L_ACS, PCC_MOT_L_CUR, PCC_MOT_L_ENC, PCC_MOT_L_SRS, PCC_MOT_L_TMP, PCC_MOT_R_ACS, PCC_MOT_R_CUR, PCC_MOT_R_ENC, PCC_MOT_R_SRS, PCC_MOT_R_TMP, pcc_reset(), pcc_rx_befehlsempfang, pcc_rx_done, pcc_rx_fehler, pcc_rx_ready, pcc_send(), pcc_sendError(), PCC_SENS_ACC, PCC_SENS_IR1, PCC_SENS_IR2, PCC_SENS_ORI, PCC_SYNC, receivedMessage, RIGHT, sm_rx und transmitMessage.

Wird benutzt von main().

00124 {
00125   switch (sm_rx)
00126   {
00127     case pcc_rx_ready:
00128     case pcc_rx_befehlsempfang: 
00129       break;
00130     case pcc_rx_fehler:
00131       pcc_sendError();
00132       pcc_reset();
00133       sm_rx = pcc_rx_ready;
00134       break;
00135     case pcc_rx_done:
00136       switch (receivedMessage.header.cmdid)
00137       {
00138         case PCC_SYNC: 
00139           pcc_reset();
00140           break;
00141         case PCC_BOARD_GET:
00142           if(receivedMessage.header.length == 1)
00143           {
00144             transmitMessage.header.cmdid = PCC_BOARD_GET;
00145             transmitMessage.header.length = 2;
00146             switch (receivedMessage.message[0])
00147             {
00148               case 'A': 
00149                 transmitMessage.message[0] = DDRA;
00150                 transmitMessage.message[1] = PINA;
00151                 break;
00152               case 'B': 
00153                 transmitMessage.message[0] = DDRB;
00154                 transmitMessage.message[1] = PINB;
00155                 break;
00156               case 'C': 
00157                 transmitMessage.message[0] = DDRC;
00158                 transmitMessage.message[1] = PINC;
00159                 break;
00160               case 'D': 
00161                 transmitMessage.message[0] = DDRD;
00162                 transmitMessage.message[1] = PIND;
00163                 break;
00164               default: 
00165                 transmitMessage.message[0] = 0;
00166                 transmitMessage.message[1] = 0;
00167             }
00168             pcc_send(&transmitMessage);
00169           } else 
00170             pcc_sendError();
00171           break;
00172         case PCC_BOARD_SET:
00173           if(receivedMessage.header.length == 3)
00174           {
00175           }
00176           else
00177             pcc_sendError();
00178           break;
00179         case PCC_BOARD_AKKU:
00180           if(receivedMessage.header.length == 0)
00181           {
00182           }
00183           else
00184             pcc_sendError();
00185           break;
00186         case PCC_BOARD_I2C:
00187         case PCC_BOARD_TIME:
00188           if(receivedMessage.header.length == 0)
00189           {
00190             transmitMessage.header.cmdid = PCC_BOARD_TIME;
00191             transmitMessage.header.length = 4;
00192             transmitMessage.message[0] = *((*ppcc).time)>>24;
00193             transmitMessage.message[1] = *((*ppcc).time)>>16;
00194             transmitMessage.message[2] = *((*ppcc).time)>>8;
00195             transmitMessage.message[3] = *((*ppcc).time);
00196             pcc_send(&transmitMessage);
00197           }
00198           else
00199             pcc_sendError();
00200           break;
00201         case PCC_MOT_L_ENC:
00202           if(receivedMessage.header.length == 0)
00203           {
00204             transmitMessage.header.cmdid = PCC_MOT_L_ENC;
00205             transmitMessage.header.length = 2;  
00206             transmitMessage.message[0] = *((*ppcc).encoder[LEFT])>>8;
00207             transmitMessage.message[1] = *((*ppcc).encoder[LEFT]);
00208             pcc_send(&transmitMessage);         
00209           }
00210           else
00211             pcc_sendError();
00212           break;
00213         case PCC_MOT_L_CUR:
00214         case PCC_MOT_L_ACS:
00215           if(receivedMessage.header.length == 0)
00216           {
00217             transmitMessage.header.cmdid = PCC_MOT_L_ACS;
00218             transmitMessage.header.length = 2;  
00219             transmitMessage.message[0] = *((*ppcc).istwert[LEFT])>>8;
00220             transmitMessage.message[1] = *((*ppcc).istwert[LEFT]);
00221             pcc_send(&transmitMessage);         
00222           }
00223           else
00224             pcc_sendError();
00225           break;
00226         case PCC_MOT_L_SRS:
00227           if(receivedMessage.header.length == 0)
00228           {
00229             transmitMessage.header.cmdid = PCC_MOT_L_SRS;
00230             transmitMessage.header.length = 2;  
00231             transmitMessage.message[0] = *((*ppcc).sollwert[LEFT])>>8;
00232             transmitMessage.message[1] = *((*ppcc).sollwert[LEFT]);
00233             pcc_send(&transmitMessage);         
00234           }
00235           else
00236             pcc_sendError();
00237           break;
00238         case PCC_MOT_L_TMP:
00239         case PCC_MOT_R_ENC:
00240           if(receivedMessage.header.length == 0)
00241           {
00242             transmitMessage.header.cmdid = PCC_MOT_R_ENC;
00243             transmitMessage.header.length = 2;  
00244             transmitMessage.message[0] = *((*ppcc).encoder[RIGHT])>>8;
00245             transmitMessage.message[1] = *((*ppcc).encoder[RIGHT]);
00246             pcc_send(&transmitMessage);         
00247           }
00248           else
00249             pcc_sendError();
00250           break;
00251         case PCC_MOT_R_CUR:
00252         case PCC_MOT_R_ACS:
00253           if(receivedMessage.header.length == 0)
00254           {
00255             transmitMessage.header.cmdid = PCC_MOT_L_ACS;
00256             transmitMessage.header.length = 2;  
00257             transmitMessage.message[0] = *((*ppcc).istwert[RIGHT])>>8;
00258             transmitMessage.message[1] = *((*ppcc).istwert[RIGHT]);
00259             pcc_send(&transmitMessage);         
00260           }
00261           else
00262             pcc_sendError();
00263           break;
00264         case PCC_MOT_R_SRS:
00265           if(receivedMessage.header.length == 0)
00266           {
00267             transmitMessage.header.cmdid = PCC_MOT_L_SRS;
00268             transmitMessage.header.length = 2;  
00269             transmitMessage.message[0] = *((*ppcc).sollwert[RIGHT])>>8;
00270             transmitMessage.message[1] = *((*ppcc).sollwert[RIGHT]);
00271             pcc_send(&transmitMessage);         
00272           }
00273           else
00274             pcc_sendError();
00275           break;
00276         case PCC_MOT_R_TMP:
00277         case PCC_SENS_IR1:
00278         case PCC_SENS_IR2:
00279         case PCC_SENS_ACC:
00280         case PCC_SENS_ORI:
00281         case PCC_ACTION_MOVE:
00282         case PCC_ACTION_TURN: 
00283           break;
00284         default:
00285           pcc_sendError();
00286       }
00287       pcc_reset();
00288       sm_rx = pcc_rx_ready;
00289       break;
00290   }
00291 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

void pcc_init ( const pcc_t daten  ) 

Initialisiert die PC Kommunikation.

Definiert in Zeile 64 der Datei pcc.c.

Benutzt pcc_reset(), pcc_rx_ready, ppcc und sm_rx.

Wird benutzt von main().

00065 {
00066   ppcc = daten; // datenpoiter übergeben
00067   sm_rx = pcc_rx_ready;
00068   pcc_reset();
00069 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

void pcc_rx ( uint8_t  buf  ) 

Hier werden die empfangenen Daten ausgewertet.

Definiert in Zeile 94 der Datei pcc.c.

Benutzt empfangeneBytes, tstMessage::header, tunHeader::length, tstMessage::message, pcc_rx_befehlsempfang, pcc_rx_done, pcc_rx_fehler, pcc_rx_ready, receivedMessage, sm_rx und tunHeader::y.

Wird benutzt von main().

00095 {
00096   if(sm_rx == pcc_rx_ready || sm_rx == pcc_rx_befehlsempfang)
00097   {
00098     sm_rx = pcc_rx_befehlsempfang;
00099     
00100     if(empfangeneBytes == 0)                                          // Header wird empfangen
00101     {
00102       receivedMessage.header.y = buf;
00103     } else if((receivedMessage.header.length) >= empfangeneBytes)   // Daten werden empfangen
00104     {
00105       receivedMessage.message[(empfangeneBytes-1)] = buf;     
00106     } 
00107     if((receivedMessage.header.length) == empfangeneBytes)            // Nachricht vollständig empfangen
00108     {
00109       sm_rx = pcc_rx_done;                  
00110     }
00111   } else                                                              // alter Befehl noch nicht abgearbeitet
00112   {
00113     sm_rx = pcc_rx_fehler;            
00114   }
00115   empfangeneBytes++;
00116 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

void pcc_send ( tstMessage message  ) 

Definiert in Zeile 293 der Datei pcc.c.

Benutzt versendeteBytes.

Wird benutzt von pcc() und pcc_sendError().

00294 {
00295   uint8_t *buf = (uint8_t *)message;
00296   uint8_t versendeteBytes = 0;
00297   
00298   
00299   
00300   do 
00301   {
00302     uart_putc(*buf++);
00303     versendeteBytes++;
00304   }while(versendeteBytes < ((*message).header.length)+1);
00305 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:


Erzeugt am Sun Apr 22 20:00:40 2007 für nBot von  doxygen 1.5.1-p1