MSS / Mbed 2 deprecated testSensor

Dependencies:   FXOS8700CQ HIH6130 IS31SE5000 MAG3110 MAX44000 MAX44005 MAX44008 MMA8451Q MMA8452Q MPL3115A2 VEML6040 VEML6075 mbed vt100 LM75B FXAS21002 MAX30101 VCNL4020 VCNL4100

Committer:
Rhyme
Date:
Tue Apr 26 02:38:14 2016 +0000
Revision:
0:d4bbd473a83c
Implementing sensor tests, up to FXOS8700CQ added.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:d4bbd473a83c 1 #include "mbed.h"
Rhyme 0:d4bbd473a83c 2 #include <string.h>
Rhyme 0:d4bbd473a83c 3 #include <ctype.h>
Rhyme 0:d4bbd473a83c 4 #include "vt100.h"
Rhyme 0:d4bbd473a83c 5 #include "MSS.h"
Rhyme 0:d4bbd473a83c 6 #include "MSU.h"
Rhyme 0:d4bbd473a83c 7 #include "dumb_i2c.h"
Rhyme 0:d4bbd473a83c 8 #define TEST_LOOP 10
Rhyme 0:d4bbd473a83c 9
Rhyme 0:d4bbd473a83c 10 DUMB_I2C *i2c = 0 ;
Rhyme 0:d4bbd473a83c 11 vt100 *tty = 0 ;
Rhyme 0:d4bbd473a83c 12 int test_loop = TEST_LOOP ;
Rhyme 0:d4bbd473a83c 13
Rhyme 0:d4bbd473a83c 14 void doClose(void)
Rhyme 0:d4bbd473a83c 15 {
Rhyme 0:d4bbd473a83c 16 if (i2c != 0) {
Rhyme 0:d4bbd473a83c 17 printf("Closing I2C at 0x%02X ... ", i2c->address()) ;
Rhyme 0:d4bbd473a83c 18 delete i2c ;
Rhyme 0:d4bbd473a83c 19 i2c = 0 ;
Rhyme 0:d4bbd473a83c 20 printf("Done\n") ;
Rhyme 0:d4bbd473a83c 21 }
Rhyme 0:d4bbd473a83c 22 }
Rhyme 0:d4bbd473a83c 23
Rhyme 0:d4bbd473a83c 24 void doOpen(void)
Rhyme 0:d4bbd473a83c 25 {
Rhyme 0:d4bbd473a83c 26 uint8_t address ;
Rhyme 0:d4bbd473a83c 27 scanf("%X", &address) ;
Rhyme 0:d4bbd473a83c 28 if (i2c != 0) {
Rhyme 0:d4bbd473a83c 29 doClose() ;
Rhyme 0:d4bbd473a83c 30 }
Rhyme 0:d4bbd473a83c 31 printf("Opening I2C at 0x%02X ... ", address) ;
Rhyme 0:d4bbd473a83c 32 i2c = new DUMB_I2C(PIN_SDA, PIN_SCL, address) ;
Rhyme 0:d4bbd473a83c 33 printf("Done\n") ;
Rhyme 0:d4bbd473a83c 34 }
Rhyme 0:d4bbd473a83c 35
Rhyme 0:d4bbd473a83c 36 void doRead(void)
Rhyme 0:d4bbd473a83c 37 {
Rhyme 0:d4bbd473a83c 38 int addr ;
Rhyme 0:d4bbd473a83c 39 int len ;
Rhyme 0:d4bbd473a83c 40 uint8_t *data ;
Rhyme 0:d4bbd473a83c 41 int result ;
Rhyme 0:d4bbd473a83c 42 if (i2c == 0) {
Rhyme 0:d4bbd473a83c 43 printf("I2C is not opened\n") ;
Rhyme 0:d4bbd473a83c 44 return ;
Rhyme 0:d4bbd473a83c 45 }
Rhyme 0:d4bbd473a83c 46 scanf("%X %X", &addr, &len) ;
Rhyme 0:d4bbd473a83c 47 if (len > 0) {
Rhyme 0:d4bbd473a83c 48 data = new uint8_t[len] ;
Rhyme 0:d4bbd473a83c 49 }
Rhyme 0:d4bbd473a83c 50 // i2c->read(addr, data, len) ;
Rhyme 0:d4bbd473a83c 51 printf("0x%02X : ", (unsigned int)addr) ;
Rhyme 0:d4bbd473a83c 52 for (int i = 0 ; i < len ; i++ ) {
Rhyme 0:d4bbd473a83c 53 result = i2c->read(addr+i, &data[i], 1) ;
Rhyme 0:d4bbd473a83c 54 if (result == 0) {
Rhyme 0:d4bbd473a83c 55 printf("%02X ", data[i]) ;
Rhyme 0:d4bbd473a83c 56 if (((i+1) < len)&&(((i+1)%0x10) == 0)) {
Rhyme 0:d4bbd473a83c 57 printf("\n") ;
Rhyme 0:d4bbd473a83c 58 printf("0x%02X : ", (unsigned int)(addr + i + 1)) ;
Rhyme 0:d4bbd473a83c 59 }
Rhyme 0:d4bbd473a83c 60 } else {
Rhyme 0:d4bbd473a83c 61 printf("failed to read 0x%02X\n", addr+i) ;
Rhyme 0:d4bbd473a83c 62 }
Rhyme 0:d4bbd473a83c 63 }
Rhyme 0:d4bbd473a83c 64 printf("\n") ;
Rhyme 0:d4bbd473a83c 65 }
Rhyme 0:d4bbd473a83c 66
Rhyme 0:d4bbd473a83c 67 void doWrite(void)
Rhyme 0:d4bbd473a83c 68 {
Rhyme 0:d4bbd473a83c 69 int addr ;
Rhyme 0:d4bbd473a83c 70 uint8_t len ;
Rhyme 0:d4bbd473a83c 71 uint8_t data ;
Rhyme 0:d4bbd473a83c 72 int ack ;
Rhyme 0:d4bbd473a83c 73 if (i2c == 0) {
Rhyme 0:d4bbd473a83c 74 printf("I2C is not opened\n") ;
Rhyme 0:d4bbd473a83c 75 return ;
Rhyme 0:d4bbd473a83c 76 }
Rhyme 0:d4bbd473a83c 77 scanf("%X %X", &addr, &data) ;
Rhyme 0:d4bbd473a83c 78 ack = i2c->write(addr, &data, 1) ;
Rhyme 0:d4bbd473a83c 79 if (ack != 0) {
Rhyme 0:d4bbd473a83c 80 printf("NAK at writing data[0x%02X] to address[0x%02X]\n",
Rhyme 0:d4bbd473a83c 81 data, addr ) ;
Rhyme 0:d4bbd473a83c 82 }
Rhyme 0:d4bbd473a83c 83 }
Rhyme 0:d4bbd473a83c 84
Rhyme 0:d4bbd473a83c 85 void doStatus(void)
Rhyme 0:d4bbd473a83c 86 {
Rhyme 0:d4bbd473a83c 87 if (i2c == 0) {
Rhyme 0:d4bbd473a83c 88 printf("i2c is not opened\n") ;
Rhyme 0:d4bbd473a83c 89 } else {
Rhyme 0:d4bbd473a83c 90 printf("i2c device at 0x%02X is opened at %d Hz\n",
Rhyme 0:d4bbd473a83c 91 i2c->address(), i2c->frequency()) ;
Rhyme 0:d4bbd473a83c 92 }
Rhyme 0:d4bbd473a83c 93 }
Rhyme 0:d4bbd473a83c 94
Rhyme 0:d4bbd473a83c 95 void doHelp(void)
Rhyme 0:d4bbd473a83c 96 {
Rhyme 0:d4bbd473a83c 97 printf("Simple I2C test program %s for %s\n", __DATE__, BOARD_NAME) ;
Rhyme 0:d4bbd473a83c 98 printf("\n === usage ===\n") ;
Rhyme 0:d4bbd473a83c 99 printf("open <7bit addr> : open i2c device at <7bit addr>\n") ;
Rhyme 0:d4bbd473a83c 100 printf("close : close currently opened i2c\n") ;
Rhyme 0:d4bbd473a83c 101 printf("read <addr> <len> : read <len> data from <addr>\n") ;
Rhyme 0:d4bbd473a83c 102 printf("write <addr> <data> : write <data> to register <addr>\n") ;
Rhyme 0:d4bbd473a83c 103 printf("frequency <freq> : change frequency to <freq> Hz\n") ;
Rhyme 0:d4bbd473a83c 104 printf("bus : bus scan for existing I2C addresses\n") ;
Rhyme 0:d4bbd473a83c 105 printf("test <sensor> : test a sensor\n") ;
Rhyme 0:d4bbd473a83c 106 printf("loop <number> : specify loop count for test\n") ;
Rhyme 0:d4bbd473a83c 107 printf("status : print current status\n") ;
Rhyme 0:d4bbd473a83c 108 printf("help : print this help\n") ;
Rhyme 0:d4bbd473a83c 109 printf("\nPlease set local-echo to see what you are typing.\n") ;
Rhyme 0:d4bbd473a83c 110 printf("\n") ;
Rhyme 0:d4bbd473a83c 111 }
Rhyme 0:d4bbd473a83c 112
Rhyme 0:d4bbd473a83c 113 void doFreq(void)
Rhyme 0:d4bbd473a83c 114 {
Rhyme 0:d4bbd473a83c 115 int freq = 0 ;
Rhyme 0:d4bbd473a83c 116 scanf("%d", &freq) ;
Rhyme 0:d4bbd473a83c 117 if (i2c != 0) {
Rhyme 0:d4bbd473a83c 118 i2c->frequency(freq) ;
Rhyme 0:d4bbd473a83c 119 }
Rhyme 0:d4bbd473a83c 120 }
Rhyme 0:d4bbd473a83c 121
Rhyme 0:d4bbd473a83c 122
Rhyme 0:d4bbd473a83c 123 void print_sensor_name(int address)
Rhyme 0:d4bbd473a83c 124 {
Rhyme 0:d4bbd473a83c 125 int i ;
Rhyme 0:d4bbd473a83c 126 for(i = 0; i2c_sensor[i].address != 0 ; i++) {
Rhyme 0:d4bbd473a83c 127 if (i2c_sensor[i].address == address) {
Rhyme 0:d4bbd473a83c 128 printf("%s ", i2c_sensor[i].name) ;
Rhyme 0:d4bbd473a83c 129 }
Rhyme 0:d4bbd473a83c 130 }
Rhyme 0:d4bbd473a83c 131 }
Rhyme 0:d4bbd473a83c 132
Rhyme 0:d4bbd473a83c 133 void doBusScan(void)
Rhyme 0:d4bbd473a83c 134 {
Rhyme 0:d4bbd473a83c 135 int address ;
Rhyme 0:d4bbd473a83c 136 uint8_t data ;
Rhyme 0:d4bbd473a83c 137 int result ;
Rhyme 0:d4bbd473a83c 138 if (i2c != 0) {
Rhyme 0:d4bbd473a83c 139 printf("Closing I2C at 0x%02X ... ", i2c->address()) ;
Rhyme 0:d4bbd473a83c 140 delete i2c ;
Rhyme 0:d4bbd473a83c 141 i2c = 0 ;
Rhyme 0:d4bbd473a83c 142 printf("Done\n") ;
Rhyme 0:d4bbd473a83c 143 }
Rhyme 0:d4bbd473a83c 144
Rhyme 0:d4bbd473a83c 145 for (address = 1; address < 127 ; address++) {
Rhyme 0:d4bbd473a83c 146 i2c = new DUMB_I2C(PIN_SDA, PIN_SCL, address) ;
Rhyme 0:d4bbd473a83c 147 result = i2c->read(address, &data, 1) ;
Rhyme 0:d4bbd473a83c 148 if (result == 0) {
Rhyme 0:d4bbd473a83c 149 printf("%02X : ", address) ;
Rhyme 0:d4bbd473a83c 150 print_sensor_name(address) ;
Rhyme 0:d4bbd473a83c 151 printf("\n") ;
Rhyme 0:d4bbd473a83c 152 }
Rhyme 0:d4bbd473a83c 153 delete i2c ;
Rhyme 0:d4bbd473a83c 154 i2c = 0 ;
Rhyme 0:d4bbd473a83c 155 }
Rhyme 0:d4bbd473a83c 156 printf("\n") ;
Rhyme 0:d4bbd473a83c 157 }
Rhyme 0:d4bbd473a83c 158
Rhyme 0:d4bbd473a83c 159 void setTestLoop(void)
Rhyme 0:d4bbd473a83c 160 {
Rhyme 0:d4bbd473a83c 161 int num ;
Rhyme 0:d4bbd473a83c 162 scanf("%d", &num) ;
Rhyme 0:d4bbd473a83c 163 if (num < 0) { num = 1 ; }
Rhyme 0:d4bbd473a83c 164 test_loop = num ;
Rhyme 0:d4bbd473a83c 165 printf("test loop count set to %d\n", test_loop) ;
Rhyme 0:d4bbd473a83c 166 }
Rhyme 0:d4bbd473a83c 167
Rhyme 0:d4bbd473a83c 168 void doTestSensor(void)
Rhyme 0:d4bbd473a83c 169 {
Rhyme 0:d4bbd473a83c 170 int i ;
Rhyme 0:d4bbd473a83c 171 char name[32] ;
Rhyme 0:d4bbd473a83c 172 scanf("%s", name) ;
Rhyme 0:d4bbd473a83c 173 for (i = 0 ; i2c_sensor[i].address != 0 ; i++) {
Rhyme 0:d4bbd473a83c 174 if (strcmp(name, i2c_sensor[i].name) == 0) { /* found */
Rhyme 0:d4bbd473a83c 175 i2c_sensor[i].test_func() ;
Rhyme 0:d4bbd473a83c 176 break ;
Rhyme 0:d4bbd473a83c 177 }
Rhyme 0:d4bbd473a83c 178 }
Rhyme 0:d4bbd473a83c 179 }
Rhyme 0:d4bbd473a83c 180
Rhyme 0:d4bbd473a83c 181 void doCommand(char *str)
Rhyme 0:d4bbd473a83c 182 {
Rhyme 0:d4bbd473a83c 183 switch(*str) {
Rhyme 0:d4bbd473a83c 184 case 'o': case 'O': /* open */
Rhyme 0:d4bbd473a83c 185 doOpen() ; break ;
Rhyme 0:d4bbd473a83c 186 case 'c': case 'C': /* close */
Rhyme 0:d4bbd473a83c 187 doClose() ; break ;
Rhyme 0:d4bbd473a83c 188 case 'r': case 'R': /* read */
Rhyme 0:d4bbd473a83c 189 doRead() ; break ;
Rhyme 0:d4bbd473a83c 190 case 'w': case 'W': /* write */
Rhyme 0:d4bbd473a83c 191 doWrite() ; break ;
Rhyme 0:d4bbd473a83c 192 case 's': case 'S': /* status */
Rhyme 0:d4bbd473a83c 193 doStatus() ; break ;
Rhyme 0:d4bbd473a83c 194 case 'f': case 'F': /* Frequency */
Rhyme 0:d4bbd473a83c 195 doFreq() ; break ;
Rhyme 0:d4bbd473a83c 196 case 't': case 'T': /* test sensor */
Rhyme 0:d4bbd473a83c 197 doTestSensor() ; break ;
Rhyme 0:d4bbd473a83c 198 case 'l': case 'L': /* set test_loop */
Rhyme 0:d4bbd473a83c 199 setTestLoop() ; break ;
Rhyme 0:d4bbd473a83c 200 case 'b': case 'B': /* Bus Scan */
Rhyme 0:d4bbd473a83c 201 doBusScan() ; break ;
Rhyme 0:d4bbd473a83c 202 default:
Rhyme 0:d4bbd473a83c 203 doHelp() ; break ;
Rhyme 0:d4bbd473a83c 204 }
Rhyme 0:d4bbd473a83c 205 }
Rhyme 0:d4bbd473a83c 206
Rhyme 0:d4bbd473a83c 207 int main() {
Rhyme 0:d4bbd473a83c 208 char cmd[32] ;
Rhyme 0:d4bbd473a83c 209 tty = new vt100() ;
Rhyme 0:d4bbd473a83c 210 tty->cls() ;
Rhyme 0:d4bbd473a83c 211 doHelp() ;
Rhyme 0:d4bbd473a83c 212 while(1) {
Rhyme 0:d4bbd473a83c 213 printf("> ") ;
Rhyme 0:d4bbd473a83c 214 scanf("%s", cmd) ;
Rhyme 0:d4bbd473a83c 215 doCommand(cmd) ;
Rhyme 0:d4bbd473a83c 216 }
Rhyme 0:d4bbd473a83c 217 }