master/datagram_pair.c
branchredundancy
changeset 2368 dd84ef164869
parent 2367 8527429b6137
child 2374 e898451c054a
equal deleted inserted replaced
2367:8527429b6137 2368:dd84ef164869
   145 
   145 
   146 /*****************************************************************************/
   146 /*****************************************************************************/
   147 
   147 
   148 /** Process received data.
   148 /** Process received data.
   149  */
   149  */
   150 unsigned int ec_datagram_pair_process(
   150 uint16_t ec_datagram_pair_process(
   151         ec_datagram_pair_t *pair /**< Datagram pair. */
   151         ec_datagram_pair_t *pair, /**< Datagram pair. */
       
   152         uint16_t wc_sum[EC_NUM_DEVICES] /**< Working counter sums. */
   152         )
   153         )
   153 {
   154 {
   154     unsigned int dev_idx, wc_sum = 0;
   155     unsigned int dev_idx;
       
   156     uint16_t pair_wc = 0;
   155 
   157 
   156     for (dev_idx = 0; dev_idx < EC_NUM_DEVICES; dev_idx++) {
   158     for (dev_idx = 0; dev_idx < EC_NUM_DEVICES; dev_idx++) {
   157         ec_datagram_t *datagram = &pair->datagrams[dev_idx];
   159         ec_datagram_t *datagram = &pair->datagrams[dev_idx];
   158 
   160 
   159         ec_datagram_output_stats(datagram);
   161         ec_datagram_output_stats(datagram);
   160 
   162 
   161         if (datagram->state == EC_DATAGRAM_RECEIVED) {
   163         if (datagram->state == EC_DATAGRAM_RECEIVED) {
   162             wc_sum += datagram->working_counter;
   164             pair_wc += datagram->working_counter;
       
   165             wc_sum[dev_idx] += datagram->working_counter;
   163         }
   166         }
   164     }
   167     }
   165 
   168 
   166     return wc_sum;
   169     return pair_wc;
   167 }
   170 }
   168 
   171 
   169 /*****************************************************************************/
   172 /*****************************************************************************/
   170 
       
   171 /** Process received data.
       
   172  */
       
   173 int ec_datagram_pair_data_changed(
       
   174         const ec_datagram_pair_t *pair,
       
   175         size_t offset,
       
   176         size_t size,
       
   177         ec_device_index_t dev_idx
       
   178         )
       
   179 {
       
   180     uint8_t *sent = pair->send_buffer + offset;
       
   181     uint8_t *recv = pair->datagrams[dev_idx].data + offset;
       
   182     size_t i;
       
   183 
       
   184     for (i = 0; i < size; i++) {
       
   185         if (recv[i] != sent[i]) {
       
   186             return 1;
       
   187         }
       
   188     }
       
   189 
       
   190     return 0;
       
   191 }
       
   192 
       
   193 /*****************************************************************************/