Gaëtan Andrieu / DWM_API_Tennis
Committer:
nguyentony
Date:
Mon Mar 25 16:32:43 2019 +0000
Revision:
0:bb732ce5e423
Child:
2:bfd4fcab6a0f
simple program to work with DWM1001

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nguyentony 0:bb732ce5e423 1 #include "dwm_uart.h"
nguyentony 0:bb732ce5e423 2 //pour compter le temps entre 2 envoies de commande
nguyentony 0:bb732ce5e423 3 // le temps maximum le dwm1001 peut attendre est de 700us
nguyentony 0:bb732ce5e423 4 // ici, on met le temps timeout = 600us
nguyentony 0:bb732ce5e423 5 //dans le cas de reception, si il n'y a pas de reponse pendant 100ms,
nguyentony 0:bb732ce5e423 6 //c'est un echec
nguyentony 0:bb732ce5e423 7 Timer timer;
nguyentony 0:bb732ce5e423 8
nguyentony 0:bb732ce5e423 9
nguyentony 0:bb732ce5e423 10 dwm::dwm(PinName tx_pin, PinName rx_pin, int baudrate):
nguyentony 0:bb732ce5e423 11 dwm_uart(tx_pin, rx_pin, baudrate)
nguyentony 0:bb732ce5e423 12 {
nguyentony 0:bb732ce5e423 13 flushSerialBuffer();
nguyentony 0:bb732ce5e423 14 }
nguyentony 0:bb732ce5e423 15
nguyentony 0:bb732ce5e423 16 int dwm::uart_write(uint8_t* tx_buffer, uint8_t len)
nguyentony 0:bb732ce5e423 17 {
nguyentony 0:bb732ce5e423 18
nguyentony 0:bb732ce5e423 19 int i, begin, end;
nguyentony 0:bb732ce5e423 20 timer.start();
nguyentony 0:bb732ce5e423 21
nguyentony 0:bb732ce5e423 22 for(i=0; i<len; i++)
nguyentony 0:bb732ce5e423 23 {
nguyentony 0:bb732ce5e423 24 begin = timer.read_us();
nguyentony 0:bb732ce5e423 25 //while(dwm_uart.writeable() == false){}
nguyentony 0:bb732ce5e423 26 while(dwm_uart.writeable())
nguyentony 0:bb732ce5e423 27 {
nguyentony 0:bb732ce5e423 28 dwm_uart.putc(tx_buffer[i]);
nguyentony 0:bb732ce5e423 29 }
nguyentony 0:bb732ce5e423 30 end = timer.read_us();
nguyentony 0:bb732ce5e423 31 wait_us(50);
nguyentony 0:bb732ce5e423 32 if((end-begin)>DWM_WRITE_TIMEOUT) return RV_ERR; //echec
nguyentony 0:bb732ce5e423 33 }
nguyentony 0:bb732ce5e423 34 timer.stop();
nguyentony 0:bb732ce5e423 35 return RV_OK; //reussi
nguyentony 0:bb732ce5e423 36 }
nguyentony 0:bb732ce5e423 37
nguyentony 0:bb732ce5e423 38 void dwm::flushSerialBuffer(void)
nguyentony 0:bb732ce5e423 39 {
nguyentony 0:bb732ce5e423 40 while (dwm_uart.readable())
nguyentony 0:bb732ce5e423 41 {
nguyentony 0:bb732ce5e423 42 dwm_uart.getc();
nguyentony 0:bb732ce5e423 43 }
nguyentony 0:bb732ce5e423 44 }
nguyentony 0:bb732ce5e423 45
nguyentony 0:bb732ce5e423 46 int dwm::uart_read(uint8_t* rx_buffer, int len_prevu)
nguyentony 0:bb732ce5e423 47 {
nguyentony 0:bb732ce5e423 48 int i, len=0;
nguyentony 0:bb732ce5e423 49 int begin, end;
nguyentony 0:bb732ce5e423 50 timer.start();
nguyentony 0:bb732ce5e423 51 begin = timer.read_ms();
nguyentony 0:bb732ce5e423 52 //recuperer le type et la longeur des donnees
nguyentony 0:bb732ce5e423 53 for(i=0; i<3; i++)
nguyentony 0:bb732ce5e423 54 {
nguyentony 0:bb732ce5e423 55 while(dwm_uart.readable() == false)
nguyentony 0:bb732ce5e423 56 {
nguyentony 0:bb732ce5e423 57
nguyentony 0:bb732ce5e423 58 end = timer.read_ms();
nguyentony 0:bb732ce5e423 59 //wait_us(2);
nguyentony 0:bb732ce5e423 60 if((end-begin)>DWM_READ_TIMEOUT) return RV_TIME; //echec
nguyentony 0:bb732ce5e423 61
nguyentony 0:bb732ce5e423 62 }
nguyentony 0:bb732ce5e423 63 while(dwm_uart.readable())
nguyentony 0:bb732ce5e423 64 {
nguyentony 0:bb732ce5e423 65 rx_buffer[i] = dwm_uart.getc();
nguyentony 0:bb732ce5e423 66 len = len + 1;
nguyentony 0:bb732ce5e423 67 }
nguyentony 0:bb732ce5e423 68 }
nguyentony 0:bb732ce5e423 69 //recuperer des donnees si rx_buffer[2] == 0
nguyentony 0:bb732ce5e423 70 if(rx_buffer[2] == 0)
nguyentony 0:bb732ce5e423 71 {
nguyentony 0:bb732ce5e423 72 for(int i=3; i<len_prevu; i++)
nguyentony 0:bb732ce5e423 73 {
nguyentony 0:bb732ce5e423 74 while(dwm_uart.readable() == false)
nguyentony 0:bb732ce5e423 75 {
nguyentony 0:bb732ce5e423 76
nguyentony 0:bb732ce5e423 77 end = timer.read_ms();
nguyentony 0:bb732ce5e423 78 //wait_us(2);
nguyentony 0:bb732ce5e423 79 if((end-begin)>DWM_READ_TIMEOUT) return RV_TIME; //echec
nguyentony 0:bb732ce5e423 80
nguyentony 0:bb732ce5e423 81 }
nguyentony 0:bb732ce5e423 82 while(dwm_uart.readable())
nguyentony 0:bb732ce5e423 83 {
nguyentony 0:bb732ce5e423 84 rx_buffer[i] = dwm_uart.getc();
nguyentony 0:bb732ce5e423 85 len = len + 1;
nguyentony 0:bb732ce5e423 86 }
nguyentony 0:bb732ce5e423 87 }
nguyentony 0:bb732ce5e423 88 }
nguyentony 0:bb732ce5e423 89
nguyentony 0:bb732ce5e423 90 timer.stop();
nguyentony 0:bb732ce5e423 91 if(len != len_prevu) return RV_ERR;
nguyentony 0:bb732ce5e423 92 return RV_OK;
nguyentony 0:bb732ce5e423 93 }
nguyentony 0:bb732ce5e423 94
nguyentony 0:bb732ce5e423 95 int dwm::dwm_gpio_cfg_output()
nguyentony 0:bb732ce5e423 96 {
nguyentony 0:bb732ce5e423 97 uint8_t tx_buffer[4];
nguyentony 0:bb732ce5e423 98 uint8_t rx_buffer[255];
nguyentony 0:bb732ce5e423 99 int rx_len;
nguyentony 0:bb732ce5e423 100 //dwm_gpio_cfg_output
nguyentony 0:bb732ce5e423 101 tx_buffer[0] = 0x28;
nguyentony 0:bb732ce5e423 102 tx_buffer[1] = 0x02;
nguyentony 0:bb732ce5e423 103 tx_buffer[2] = 0x0d;
nguyentony 0:bb732ce5e423 104 tx_buffer[3] = 0x01;
nguyentony 0:bb732ce5e423 105 uart_write(tx_buffer, 4);
nguyentony 0:bb732ce5e423 106 wait_us(50);
nguyentony 0:bb732ce5e423 107 rx_len = uart_read(rx_buffer,3);
nguyentony 0:bb732ce5e423 108 if(rx_len == 0)
nguyentony 0:bb732ce5e423 109 {
nguyentony 0:bb732ce5e423 110 if(rx_buffer[0] != 0x40) return -1;
nguyentony 0:bb732ce5e423 111 if(rx_buffer[1] != 0x01) return -2;
nguyentony 0:bb732ce5e423 112 if(rx_buffer[2] != 0x00) return -3;
nguyentony 0:bb732ce5e423 113 }
nguyentony 0:bb732ce5e423 114 else return -1*rx_len;
nguyentony 0:bb732ce5e423 115 return 0;
nguyentony 0:bb732ce5e423 116 }
nguyentony 0:bb732ce5e423 117
nguyentony 0:bb732ce5e423 118 int dwm::dwm_pos_get()
nguyentony 0:bb732ce5e423 119 {
nguyentony 0:bb732ce5e423 120 uint8_t TXbuffer[2];
nguyentony 0:bb732ce5e423 121 uint8_t rx_buffer[255];
nguyentony 0:bb732ce5e423 122 int i, ret;
nguyentony 0:bb732ce5e423 123 //dwm_gpio_cfg_output
nguyentony 0:bb732ce5e423 124 TXbuffer[0] = 0x02;
nguyentony 0:bb732ce5e423 125 TXbuffer[1] = 0x00;
nguyentony 0:bb732ce5e423 126 uart_write(TXbuffer, 2);
nguyentony 0:bb732ce5e423 127
nguyentony 0:bb732ce5e423 128 ret = uart_read(rx_buffer, 18);
nguyentony 0:bb732ce5e423 129 if(ret == RV_OK)
nguyentony 0:bb732ce5e423 130 {
nguyentony 0:bb732ce5e423 131 i = 5;
nguyentony 0:bb732ce5e423 132 node_pos.x = rx_buffer[i]
nguyentony 0:bb732ce5e423 133 +(rx_buffer[i+1]<<8)
nguyentony 0:bb732ce5e423 134 +(rx_buffer[i+2]<<16)
nguyentony 0:bb732ce5e423 135 +(rx_buffer[i+3]<<24);
nguyentony 0:bb732ce5e423 136 i += 4;
nguyentony 0:bb732ce5e423 137 node_pos.y = rx_buffer[i]
nguyentony 0:bb732ce5e423 138 +(rx_buffer[i+1]<<8)
nguyentony 0:bb732ce5e423 139 +(rx_buffer[i+2]<<16)
nguyentony 0:bb732ce5e423 140 +(rx_buffer[i+3]<<24);
nguyentony 0:bb732ce5e423 141 i += 4;
nguyentony 0:bb732ce5e423 142 node_pos.z = rx_buffer[i]
nguyentony 0:bb732ce5e423 143 +(rx_buffer[i+1]<<8)
nguyentony 0:bb732ce5e423 144 +(rx_buffer[i+2]<<16)
nguyentony 0:bb732ce5e423 145 +(rx_buffer[i+3]<<24);
nguyentony 0:bb732ce5e423 146 i += 4;
nguyentony 0:bb732ce5e423 147 node_pos.qf = rx_buffer[i];
nguyentony 0:bb732ce5e423 148 }
nguyentony 0:bb732ce5e423 149 else return ret;//***
nguyentony 0:bb732ce5e423 150
nguyentony 0:bb732ce5e423 151 return ret;//****
nguyentony 0:bb732ce5e423 152 }