Generic communication interface between the wireless board (mote) and the sensor board. Any kind of sensor board can be connected to the mote using this specification given it provides a SPI peripheral, one input pin with interrupt capability and one digital output. The sensor board must implement a special register set from which all required information can be retrieved. Protocol: http://is.gd/wuQorh Github: http://is.gd/ySj1L9
sens_itf/sens_util.c@1:acdf490d94a7, 2014-04-08 (annotated)
- Committer:
- marcelobarrosalmeida
- Date:
- Tue Apr 08 16:34:20 2014 +0000
- Revision:
- 1:acdf490d94a7
Adding accel to sensor list
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
marcelobarrosalmeida | 1:acdf490d94a7 | 1 | #include <stdio.h> |
marcelobarrosalmeida | 1:acdf490d94a7 | 2 | #include <stdint.h> |
marcelobarrosalmeida | 1:acdf490d94a7 | 3 | #include <string.h> |
marcelobarrosalmeida | 1:acdf490d94a7 | 4 | #include <stdarg.h> |
marcelobarrosalmeida | 1:acdf490d94a7 | 5 | #include <assert.h> |
marcelobarrosalmeida | 1:acdf490d94a7 | 6 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 7 | #include "sens_util.h" |
marcelobarrosalmeida | 1:acdf490d94a7 | 8 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 9 | #define MAX_LOG_BUF 256 |
marcelobarrosalmeida | 1:acdf490d94a7 | 10 | static char buffer[MAX_LOG_BUF]; |
marcelobarrosalmeida | 1:acdf490d94a7 | 11 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 12 | static volatile int sens_util_log_started = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 13 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 14 | void sens_util_assert(int cond) |
marcelobarrosalmeida | 1:acdf490d94a7 | 15 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 16 | assert(cond); |
marcelobarrosalmeida | 1:acdf490d94a7 | 17 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 18 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 19 | const uint8_t *sens_util_strip_path(const uint8_t *filename) |
marcelobarrosalmeida | 1:acdf490d94a7 | 20 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 21 | int pos; |
marcelobarrosalmeida | 1:acdf490d94a7 | 22 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 23 | pos = strlen(filename) - 1; // avoiding null terminator |
marcelobarrosalmeida | 1:acdf490d94a7 | 24 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 25 | while( (filename[pos] != '\\') && (pos > 0) ) |
marcelobarrosalmeida | 1:acdf490d94a7 | 26 | pos--; |
marcelobarrosalmeida | 1:acdf490d94a7 | 27 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 28 | if(pos != 0) |
marcelobarrosalmeida | 1:acdf490d94a7 | 29 | pos++; // removing "\" |
marcelobarrosalmeida | 1:acdf490d94a7 | 30 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 31 | return &filename[pos]; |
marcelobarrosalmeida | 1:acdf490d94a7 | 32 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 33 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 34 | void sens_util_log(int cond, const uint8_t *line, ...) |
marcelobarrosalmeida | 1:acdf490d94a7 | 35 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 36 | va_list argp; |
marcelobarrosalmeida | 1:acdf490d94a7 | 37 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 38 | if((!cond) || (!sens_util_log_started)) |
marcelobarrosalmeida | 1:acdf490d94a7 | 39 | return; |
marcelobarrosalmeida | 1:acdf490d94a7 | 40 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 41 | va_start(argp, line); |
marcelobarrosalmeida | 1:acdf490d94a7 | 42 | vsnprintf(buffer,MAX_LOG_BUF,line, argp); |
marcelobarrosalmeida | 1:acdf490d94a7 | 43 | va_end(argp); |
marcelobarrosalmeida | 1:acdf490d94a7 | 44 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 45 | buffer[MAX_LOG_BUF-1] = '\0'; |
marcelobarrosalmeida | 1:acdf490d94a7 | 46 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 47 | // TODO |
marcelobarrosalmeida | 1:acdf490d94a7 | 48 | // define destination for this buffer: ethernet, serial, console, syslog ... |
marcelobarrosalmeida | 1:acdf490d94a7 | 49 | // |
marcelobarrosalmeida | 1:acdf490d94a7 | 50 | printf("%s",buffer); |
marcelobarrosalmeida | 1:acdf490d94a7 | 51 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 52 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 53 | void sens_util_dump_frame(const uint8_t * const data, int len) |
marcelobarrosalmeida | 1:acdf490d94a7 | 54 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 55 | int i, j, k; |
marcelobarrosalmeida | 1:acdf490d94a7 | 56 | uint8_t buf[50]; |
marcelobarrosalmeida | 1:acdf490d94a7 | 57 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 58 | for(k = 0 ; k < len ; k += 16) |
marcelobarrosalmeida | 1:acdf490d94a7 | 59 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 60 | for(i = k, j = 0 ; ( i< (k+16) ) && ( i < len ) ; i++, j+=3 ) |
marcelobarrosalmeida | 1:acdf490d94a7 | 61 | sprintf((char *)&buf[j],"%02X ",data[i]); |
marcelobarrosalmeida | 1:acdf490d94a7 | 62 | buf[j] = '\0'; |
marcelobarrosalmeida | 1:acdf490d94a7 | 63 | sens_util_log(1,"%s",buf); |
marcelobarrosalmeida | 1:acdf490d94a7 | 64 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 65 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 66 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 67 | int sens_util_log_stop(void) |
marcelobarrosalmeida | 1:acdf490d94a7 | 68 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 69 | if(sens_util_log_started) |
marcelobarrosalmeida | 1:acdf490d94a7 | 70 | sens_util_log_started = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 71 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 72 | return 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 73 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 74 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 75 | int sens_util_log_start(void) |
marcelobarrosalmeida | 1:acdf490d94a7 | 76 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 77 | if(!sens_util_log_started) |
marcelobarrosalmeida | 1:acdf490d94a7 | 78 | sens_util_log_started = 1; |
marcelobarrosalmeida | 1:acdf490d94a7 | 79 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 80 | return 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 81 | } |