Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FreePilot PinDetect mbed-src
Fork of FreePilot_V2-2 by
base/checksum.h@45:ecd8c2e27948, 2015-03-10 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |
