Agra-GPS / FreePilot_V2-3

Dependencies:   FreePilot PinDetect mbed-src

Fork of FreePilot_V2-2 by Agra-GPS

Committer:
maximbolduc
Date:
Tue Mar 10 23:14:18 2015 +0000
Revision:
45:ecd8c2e27948
Parent:
40:a68cc1a1a1e7
Child:
50:07dfcda65732
checksum fixed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
maximbolduc 45:ecd8c2e27948 1 /*char* checksum2;
maximbolduc 34:c2bc9f9be7ff 2 int getCheckSum(char *string)
maximbolduc 34:c2bc9f9be7ff 3 {
maximbolduc 34:c2bc9f9be7ff 4 int i;
maximbolduc 34:c2bc9f9be7ff 5 int XOR;
maximbolduc 34:c2bc9f9be7ff 6 int c;
maximbolduc 34:c2bc9f9be7ff 7 bool started = false;
maximbolduc 40:a68cc1a1a1e7 8 for (XOR = 0, i = 0; i < strlen(string); i++) {
maximbolduc 34:c2bc9f9be7ff 9 c = (unsigned char)string[i];
maximbolduc 34:c2bc9f9be7ff 10 if ( c == '$' )started = true;
maximbolduc 40:a68cc1a1a1e7 11
maximbolduc 40:a68cc1a1a1e7 12 if ( started == true ) {
maximbolduc 40:a68cc1a1a1e7 13 if (c == '*') {
maximbolduc 40:a68cc1a1a1e7 14 break;
maximbolduc 40:a68cc1a1a1e7 15 }
maximbolduc 40:a68cc1a1a1e7 16 if (c != '$') XOR ^= c;
maximbolduc 34:c2bc9f9be7ff 17 }
maximbolduc 34:c2bc9f9be7ff 18 }
maximbolduc 34:c2bc9f9be7ff 19 return XOR;
maximbolduc 34:c2bc9f9be7ff 20 }
maximbolduc 34:c2bc9f9be7ff 21
maximbolduc 34:c2bc9f9be7ff 22 bool validate_checksum(char* validating)
maximbolduc 34:c2bc9f9be7ff 23 {
maximbolduc 34:c2bc9f9be7ff 24 bool valid = false;
maximbolduc 34:c2bc9f9be7ff 25 int tempo = getCheckSum(validating);
maximbolduc 34:c2bc9f9be7ff 26 string token, mystring(validating);
maximbolduc 40:a68cc1a1a1e7 27 while(token != mystring) {
maximbolduc 34:c2bc9f9be7ff 28 token = mystring.substr(0,mystring.find_first_of("*"));
maximbolduc 34:c2bc9f9be7ff 29 mystring = mystring.substr(mystring.find_first_of("*") + 1,2);
maximbolduc 34:c2bc9f9be7ff 30 }
maximbolduc 34:c2bc9f9be7ff 31 int checksumm = atoh <uint16_t>(token.c_str());
maximbolduc 40:a68cc1a1a1e7 32 if (tempo == checksumm) {
maximbolduc 34:c2bc9f9be7ff 33 valid = true;
maximbolduc 34:c2bc9f9be7ff 34 }
maximbolduc 34:c2bc9f9be7ff 35 return valid;
maximbolduc 45:ecd8c2e27948 36 }*/
maximbolduc 45:ecd8c2e27948 37
maximbolduc 45:ecd8c2e27948 38
maximbolduc 45:ecd8c2e27948 39
maximbolduc 45:ecd8c2e27948 40
maximbolduc 45:ecd8c2e27948 41 char* checksum2;
maximbolduc 45:ecd8c2e27948 42 int getCheckSum(char *string)
maximbolduc 45:ecd8c2e27948 43 {
maximbolduc 45:ecd8c2e27948 44 int i;
maximbolduc 45:ecd8c2e27948 45 int XOR;
maximbolduc 45:ecd8c2e27948 46 int c;
maximbolduc 45:ecd8c2e27948 47 bool started = false;
maximbolduc 45:ecd8c2e27948 48 for (XOR = 0, i = 0; i < strlen(string); i++) {
maximbolduc 45:ecd8c2e27948 49 c = (unsigned char)string[i];
maximbolduc 45:ecd8c2e27948 50 if ( c == '$' )started = true;
maximbolduc 45:ecd8c2e27948 51
maximbolduc 45:ecd8c2e27948 52 if ( started == true ) {
maximbolduc 45:ecd8c2e27948 53 if (c == '*') {
maximbolduc 45:ecd8c2e27948 54 break;
maximbolduc 45:ecd8c2e27948 55 }
maximbolduc 45:ecd8c2e27948 56 if (c != '$') XOR ^= c;
maximbolduc 45:ecd8c2e27948 57 }
maximbolduc 45:ecd8c2e27948 58 }
maximbolduc 45:ecd8c2e27948 59 return XOR;
maximbolduc 45:ecd8c2e27948 60 }
maximbolduc 45:ecd8c2e27948 61
maximbolduc 45:ecd8c2e27948 62 bool validate_checksum(char* validating, char* &returning)
maximbolduc 45:ecd8c2e27948 63 {
maximbolduc 45:ecd8c2e27948 64 bool valid = false;
maximbolduc 45:ecd8c2e27948 65 if (string(validating).find("*") != std::string::npos) {
maximbolduc 45:ecd8c2e27948 66
maximbolduc 45:ecd8c2e27948 67 int tempo = getCheckSum(validating);
maximbolduc 45:ecd8c2e27948 68 string token = "";
maximbolduc 45:ecd8c2e27948 69 string mystring(validating);
maximbolduc 45:ecd8c2e27948 70 while(token != mystring) {
maximbolduc 45:ecd8c2e27948 71 token = mystring.substr(0,mystring.find_first_of("*"));
maximbolduc 45:ecd8c2e27948 72 mystring = mystring.substr(mystring.find_first_of("*") + 1,2);
maximbolduc 45:ecd8c2e27948 73 }
maximbolduc 45:ecd8c2e27948 74 int checksumm = atoh <uint16_t>(token.c_str());
maximbolduc 45:ecd8c2e27948 75 if (tempo == checksumm) {
maximbolduc 45:ecd8c2e27948 76 valid = true;
maximbolduc 45:ecd8c2e27948 77 returning = (char*)(string(validating).substr(0,string(validating).find('*'))+"\r\n").c_str();
maximbolduc 45:ecd8c2e27948 78 } else {
maximbolduc 45:ecd8c2e27948 79 returning = (char*)(string(validating).substr(0,string(validating).find('*'))+"\r\n").c_str();
maximbolduc 45:ecd8c2e27948 80 }
maximbolduc 45:ecd8c2e27948 81 } else {
maximbolduc 45:ecd8c2e27948 82 returning = validating;
maximbolduc 45:ecd8c2e27948 83 valid = true;
maximbolduc 45:ecd8c2e27948 84 }
maximbolduc 45:ecd8c2e27948 85 return valid;
maximbolduc 34:c2bc9f9be7ff 86 }