00001
00024 #ifndef SERIAL_PORT_HAL_H
00025 #define SERIAL_PORT_HAL_H
00026
00027 #define UART
00028
00029
00030 #if defined( UART ) && defined( FTDI )
00031 #error Only able to support UART or FTDI USB phy interface.
00032 #endif
00033
00034
00035 #include<stdbool.h>
00036 #include<stdint.h>
00037
00038 #include "compiler.h"
00039
00040 #include"chat.h"
00041
00042 #ifdef UART
00043 #include"usart.h"
00044 #else
00045 #include"ftdi.h"
00046 #endif
00047
00048 #define RECEIVE_BUFFER_SIZE 64
00049
00050 #ifdef UART
00051
00052 #define RECEIVER_ON ENABLE_RECEIVE_COMPLETE_INTERRUPT
00053 #define RECEIVER_OFF DISABLE_RECEIVE_COMPLETE_INTERRUPT
00054 #else
00055
00056 #define RECEIVER_ON FTDI_ENABLE_RECEIVER( )
00057 #define RECEIVER_OFF FTDI_DISABLE_RECEIVER( )
00058 #endif
00059
00060 #define PARAMETER_DELIMITER ','
00061 #define PARAMETER_PREAMBLE_A ':'
00062 #define PARAMETER_PREAMBLE_B ' '
00063 #define EOC_DELIMITER '\r'
00064
00065 #define NULL_PARAMETER ((unsigned char *)0)
00066
00067
00071 typedef enum{
00072
00073 SOC = 0x00,
00074 PARAM_PREAMBLE,
00075 COLLECT_PARAMETERS,
00076 EOC
00077 }rxState_t;
00078
00081 typedef enum{
00082
00083 NO_ERROR = 0x00,
00084 BUFFER_OVERFLOW,
00085 UNKNOWN_RX_STATE,
00086 UNKNOWN_SEQUENCE,
00087 UNKNOWN_EOC_SEQUENCE
00088 }rxError_t;
00089
00092 typedef struct{
00093
00094 #define LENGTH_OF_COMMAND 4
00095 unsigned char ATCommand[ LENGTH_OF_COMMAND + 1 ];
00096 uint8_t rx_i;
00097
00098 #define LENGTH_OF_PARAMETER_BUFFER 64
00099 #define NUMBER_OF_PARAMETERS 4
00100 unsigned char parameters[ LENGTH_OF_PARAMETER_BUFFER ];
00101 unsigned char *parameter[ NUMBER_OF_PARAMETERS ];
00102 uint8_t numberOfReceivedParameters;
00103
00104 bool receptionComplete;
00105 rxError_t error;
00106 }rxDataBlock_t;
00107
00110 typedef enum{
00111 PARAMETER_1 = 0x00,
00112 PARAMETER_2 = 0x01,
00113 PARAMETER_3 = 0x02
00114 }paramter_t;
00115
00116
00117 void sendString( const unsigned char *string );
00118 void sendFlashString( const unsigned char __flash *string );
00119 void sendOK( void );
00120 void sendERROR( const chatError_t err );
00121 void sendAssociationNotification( void );
00122 void sendDisAssociationNotification( void );
00123 void sendDataNotification( uint8_t length, unsigned char *data );
00124 void serialInterfaceInitialization( void );
00125 void rxReset( void );
00126 unsigned char * getATCommand( void );
00127 unsigned char * getParameterNumber( paramter_t parameterNumber );
00128 rxError_t getError( void );
00129 bool dataAvailable( void );
00130
00131 #ifdef UART
00132 ISR( USART0_RX_vect );
00133 #else
00134 ISR( INT7_vect );
00135 #endif
00136 #endif