Index: trunk/fw_g473rct/SES/src/modbus.c
===================================================================
--- trunk/fw_g473rct/SES/src/modbus.c	(revision 65)
+++ trunk/fw_g473rct/SES/src/modbus.c	(revision 69)
@@ -19,13 +19,4 @@
   // -------------------- MODUL DEFINES ----------------------
   // ---------------------------------------------------------
-
-
-		
-
-  #define MODBUS_BROADCAST_ADDRESS        0x00
-  #define FC_READ_COILS                   0x01
-  #define FC_READ_HOLDING_REGISTERS       0x03
-  #define FC_WRITE_SINGLE_REGISTER        0x06
-  #define FC_WRITE_MULTIPLE_REGISTER      0x10
 
   /* Protocol exceptions */
@@ -143,11 +134,11 @@
     * @retval None    
   */
-  void mbUartInit(modbus_t * mb_data,UART_HandleTypeDef * usart, uint32_t baudrate,  uint32_t parityMode,  uint32_t stopBits , uint32_t nrOfBitsPerChar)
+  void mbUartInit(modbus_t* mb_data,UART_HandleTypeDef* usart, uint32_t baudrate, uint32_t parityMode, uint32_t stopBits, uint32_t nrOfBitsPerChar)
   {
     //--- Uart Init ------------------------------------------------------------
-    mb_data->uart      = usart;
+    mb_data->uart = usart;
     
     // Baudrate
-    mb_data->uart->Init.BaudRate   = baudrate;
+    mb_data->uart->Init.BaudRate = baudrate;
 
     // Parity Mode // Word length
@@ -326,5 +317,5 @@
 
   // Compute the MODBUS RTU CRC
-  uint16_t mbCrc16 ( uint8_t *buf, uint32_t len)
+  uint16_t mbCrc16(uint8_t* buf, uint32_t len)
   {
     uint16_t crc = 0xFFFF;
@@ -449,7 +440,7 @@
   }
 
-  void mbSlaveProcessRtuQuery(modbus_t * mb_data)
-  {
-    uint32_t tx_position=0; //die _Nchste_ Position in der Zeichen eingefgt werden mssen
+  void mbSlaveProcessRtuQuery(modbus_t* mb_data)
+  {
+    uint32_t tx_position=0; //die _Nächste_ Position in der Zeichen eingefügt werden müssen
     uint8_t *modbus_rx_message;
     modbus_rx_message = &mb_data->rx_buffer[0];
@@ -469,5 +460,5 @@
   }
 
-  uint32_t mbSlaveProcessPdu (uint8_t* response_string,    uint8_t * msg,    uint32_t tx_position,     uint8_t deviceID)
+  uint32_t mbSlaveProcessPdu (uint8_t* response_string, uint8_t* msg, uint32_t tx_position, uint8_t deviceID)
   {
     uint32_t function_code;
@@ -499,5 +490,5 @@
 
 
-  uint32_t mbSlaveReadHoldingRegisters( uint8_t * response_string, uint8_t *msg, uint32_t tx_position, uint8_t deviceID)
+  uint32_t mbSlaveReadHoldingRegisters(uint8_t* response_string, uint8_t* msg, uint32_t tx_position, uint8_t deviceID)
   {
     uint32_t start_adress;
@@ -508,5 +499,5 @@
     if((deviceID != sys_data.s.parameter.slave_address) && (deviceID != 0))
     {
-       return mbSlaveResponseException(response_string,FC_WRITE_SINGLE_REGISTER,GATEWAY_PROBLEM_TARGET,tx_position);
+       return mbSlaveResponseException(response_string, FC_WRITE_SINGLE_REGISTER, GATEWAY_PROBLEM_TARGET,tx_position);
     }
 
Index: trunk/fw_g473rct/SES/src/ring.c
===================================================================
--- trunk/fw_g473rct/SES/src/ring.c	(revision 69)
+++ trunk/fw_g473rct/SES/src/ring.c	(revision 69)
@@ -0,0 +1,66 @@
+#include "ring.h"
+
+//------------------------------------------------------------------------------
+
+void rb_init(ring_buffer_t* rb)
+{
+    rb->head = 0;
+    rb->tail = 0;
+}
+
+//------------------------------------------------------------------------------
+
+bool rb_push(ring_buffer_t* rb, uint8_t data)
+{
+    uint16_t next = (rb->head + 1) & (RB_SIZE - 1);
+
+    if (next == rb->tail)
+        return false; // buffer full
+
+    rb->buffer[rb->head] = data;
+    rb->head = next;
+    return true;
+}
+
+//------------------------------------------------------------------------------
+
+bool rb_pop(ring_buffer_t* rb, uint8_t* data)
+{
+    if (rb->head == rb->tail)
+        return false; // empty
+
+    *data = rb->buffer[rb->tail];
+    rb->tail = (rb->tail + 1) & (RB_SIZE - 1);
+    return true;
+}
+
+//------------------------------------------------------------------------------
+
+uint16_t rb_available(const ring_buffer_t* rb)
+{
+    return (rb->head - rb->tail) & (RB_SIZE - 1);
+}
+
+//------------------------------------------------------------------------------
+
+bool rb_peek(const ring_buffer_t* const rb, uint8_t* const data)
+{
+    if (rb->head == rb->tail)
+        return false; // empty
+
+    *data = rb->buffer[rb->tail];
+    return true;
+}
+
+//------------------------------------------------------------------------------
+
+bool rb_peek_at(const ring_buffer_t* const rb, uint16_t index, uint8_t* data)
+{
+    if (index >= rb_available(rb))
+        return false; // not enough data
+
+    uint16_t pos = (rb->tail + index) & (RB_SIZE - 1);
+    *data = rb->buffer[pos];
+
+    return true;
+}
