Dependencies:   ChaNFSSD mbed BMP085 SHT2x

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers UBXPacket.c Source File

UBXPacket.c

00001 /*
00002  * Copyright (c) 2011 Toshihisa T
00003  * Released under the MIT License: http://mbed.org/license/mit
00004  */
00005 
00006 #include "UBXPacket.h"
00007 
00008 void UBXPacket_CalcSum(struct UBXPacket_s *info,int c)
00009 {
00010     *(info->sum + 0) = *(info->sum + 0) + ((unsigned char)c);
00011     *(info->sum + 1) = *(info->sum + 1) + *(info->sum + 0);
00012 }
00013 
00014 int UBXPacket_Parse(struct UBXPacket_s *info,int c)
00015 {
00016     if(info->cjobst == 0){
00017         info->cjobst = (c == 0xB5) ? 1 /* OK */ : 0 /*Err*/;
00018     } else if(info->cjobst == 1){
00019         info->cjobst = (c == 0x62) ? 2 /* OK */ : 0 /*Err*/;
00020         info->sum[0] = info->sum[1] = 0;
00021     } else if(info->cjobst == 2){
00022         UBXPacket_CalcSum(info,c);
00023         info->cls = (unsigned char)c;
00024         info->cjobst++;
00025     } else if(info->cjobst == 3){
00026         UBXPacket_CalcSum(info,c);
00027         info->id = (unsigned char)c;
00028         info->cjobst++;
00029     } else if(info->cjobst == 4){
00030         UBXPacket_CalcSum(info,c);
00031         info->len = (unsigned char)c;
00032         info->cjobst++;
00033     } else if(info->cjobst == 5){
00034         UBXPacket_CalcSum(info,c);
00035         info->len |= (((unsigned short)c) << 8);
00036         info->idx = 0;
00037         info->cjobst++;
00038     } else if(info->cjobst == 6){
00039         UBXPacket_CalcSum(info,c);
00040         info->body[info->idx] = (unsigned char)c;
00041         info->idx++;
00042         if(info->idx >= info->len){
00043             info->cjobst = 7;
00044         }
00045     } else if(info->cjobst == 7){
00046         info->cjobst = (c == info->sum[0]) ? 8 /* OK */ : 0 /*Err*/;
00047     } else if(info->cjobst == 8){
00048         info->cjobst = (c == info->sum[1]) ? 100 /* OK */ : 0 /*Err*/;
00049     }
00050     return info->cjobst;
00051 }
00052 
00053 
00054