Rev 4 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4 | Rev 5 | ||
---|---|---|---|
Line 30... | Line 30... | ||
30 | static bool |
30 | static bool |
31 | decodePacket(char *linebuff, int linePos, Location *loc); |
31 | decodePacket(char *linebuff, int linePos, Location *loc); |
32 | 32 | ||
33 | bool updateLocation(Location *loc, usart_ctl *uc) |
33 | bool updateLocation(Location *loc, usart_ctl *uc) |
34 | { |
34 | { |
35 | unsigned chars = SerialCharsReceived(uc); |
35 | while(PollSerial(uc)) |
36 | if (!chars) |
- | |
37 | return false; // nothing to read, return immediately |
- | |
38 | - | ||
39 | for (int i = 0; i < chars; i++) |
- | |
40 | { |
36 | { |
41 | char c = GetCharSerial(uc); |
37 | char c = GetCharSerial(uc); |
42 | switch (lineState) |
38 | switch (lineState) |
43 | { |
39 | { |
44 | case SEARCH: |
40 | case SEARCH: |
Line 50... | Line 46... | ||
50 | if (c == '\r') |
46 | if (c == '\r') |
51 | { |
47 | { |
52 | // log the actual time of reading |
48 | // log the actual time of reading |
53 | 49 | ||
54 | // handle the packet |
50 | // handle the packet |
55 | bool success = decodePacket(linebuff, linePos, loc); |
51 | decodePacket(linebuff, linePos, loc); |
56 | 52 | ||
57 | lineState = SEARCH; |
53 | lineState = SEARCH; |
58 | - | ||
59 | linePos = 0; |
54 | break; |
60 | return success; |
- | |
61 | } |
55 | } |
62 | // if the line buffer is not full, place character in buffer |
56 | // if the line buffer is not full, place character in buffer |
63 | if (linePos < sizeof(linebuff)) |
57 | if (linePos < sizeof(linebuff)) |
64 | linebuff[linePos++] = c; |
58 | linebuff[linePos++] = c; |
65 | else |
59 | else |