![](/media/cache/profiles/a7bf3f5462cc82062e41b3a2262e1a21.50x50_q85.jpg)
1-Wire implementation, using DS2480B controller interfaced with serial port, working example to read DS18B20, based on work already in progress / Dallas - Public domain code
mbedlnk.cpp@0:1193dbfe28e2, 2011-03-24 (annotated)
- Committer:
- pwheels
- Date:
- Thu Mar 24 17:21:29 2011 +0000
- Revision:
- 0:1193dbfe28e2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pwheels | 0:1193dbfe28e2 | 1 | //--------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 2 | // Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved. |
pwheels | 0:1193dbfe28e2 | 3 | // |
pwheels | 0:1193dbfe28e2 | 4 | // Permission is hereby granted, free of charge, to any person obtaining a |
pwheels | 0:1193dbfe28e2 | 5 | // copy of this software and associated documentation files (the "Software"), |
pwheels | 0:1193dbfe28e2 | 6 | // to deal in the Software without restriction, including without limitation |
pwheels | 0:1193dbfe28e2 | 7 | // the rights to use, copy, modify, merge, publish, distribute, sublicense, |
pwheels | 0:1193dbfe28e2 | 8 | // and/or sell copies of the Software, and to permit persons to whom the |
pwheels | 0:1193dbfe28e2 | 9 | // Software is furnished to do so, subject to the following conditions: |
pwheels | 0:1193dbfe28e2 | 10 | // |
pwheels | 0:1193dbfe28e2 | 11 | // The above copyright notice and this permission notice shall be included |
pwheels | 0:1193dbfe28e2 | 12 | // in all copies or substantial portions of the Software. |
pwheels | 0:1193dbfe28e2 | 13 | // |
pwheels | 0:1193dbfe28e2 | 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
pwheels | 0:1193dbfe28e2 | 15 | // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
pwheels | 0:1193dbfe28e2 | 16 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
pwheels | 0:1193dbfe28e2 | 17 | // IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES |
pwheels | 0:1193dbfe28e2 | 18 | // OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
pwheels | 0:1193dbfe28e2 | 19 | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
pwheels | 0:1193dbfe28e2 | 20 | // OTHER DEALINGS IN THE SOFTWARE. |
pwheels | 0:1193dbfe28e2 | 21 | // |
pwheels | 0:1193dbfe28e2 | 22 | // Except as contained in this notice, the name of Dallas Semiconductor |
pwheels | 0:1193dbfe28e2 | 23 | // shall not be used except as stated in the Dallas Semiconductor |
pwheels | 0:1193dbfe28e2 | 24 | // Branding Policy. |
pwheels | 0:1193dbfe28e2 | 25 | //--------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 26 | // |
pwheels | 0:1193dbfe28e2 | 27 | // TODO.C - COM functions required to communicate with the DS2480 based |
pwheels | 0:1193dbfe28e2 | 28 | // Universal Serial Adapter 'U'. Fill in the platform specific code. |
pwheels | 0:1193dbfe28e2 | 29 | // |
pwheels | 0:1193dbfe28e2 | 30 | // Version: 2.00 |
pwheels | 0:1193dbfe28e2 | 31 | // |
pwheels | 0:1193dbfe28e2 | 32 | // History: 1.00 -> 1.01 Added function msDelay. |
pwheels | 0:1193dbfe28e2 | 33 | // |
pwheels | 0:1193dbfe28e2 | 34 | // 1.01 -> 1.02 Changed to generic OpenCOM/CloseCOM for easier |
pwheels | 0:1193dbfe28e2 | 35 | // use with other platforms. |
pwheels | 0:1193dbfe28e2 | 36 | // |
pwheels | 0:1193dbfe28e2 | 37 | // 1.02 -> 1.03 Removed caps in #includes for Linux capatibility |
pwheels | 0:1193dbfe28e2 | 38 | // Add function msGettick() |
pwheels | 0:1193dbfe28e2 | 39 | // 1.03 -> 2.00 Changed 'MLan' to 'ow'. Added support for |
pwheels | 0:1193dbfe28e2 | 40 | // multiple ports. |
pwheels | 0:1193dbfe28e2 | 41 | // 2.00 -> 2.10 some changes made as to allow MBED usage and multiple ports |
pwheels | 0:1193dbfe28e2 | 42 | // |
pwheels | 0:1193dbfe28e2 | 43 | // work to be done, evaluate functions at been removed / flagged |
pwheels | 0:1193dbfe28e2 | 44 | // as text if migrate to mbed is meaningfull / needed |
pwheels | 0:1193dbfe28e2 | 45 | // |
pwheels | 0:1193dbfe28e2 | 46 | |
pwheels | 0:1193dbfe28e2 | 47 | //#include "onewire_config.h" // missing include file, handled locally now |
pwheels | 0:1193dbfe28e2 | 48 | |
pwheels | 0:1193dbfe28e2 | 49 | #include "ownet.h" |
pwheels | 0:1193dbfe28e2 | 50 | #include "mbed.h" |
pwheels | 0:1193dbfe28e2 | 51 | #include <string> |
pwheels | 0:1193dbfe28e2 | 52 | using namespace std; |
pwheels | 0:1193dbfe28e2 | 53 | |
pwheels | 0:1193dbfe28e2 | 54 | #define ONEWIRE_TX p9 |
pwheels | 0:1193dbfe28e2 | 55 | #define ONEWIRE_RX p10 |
pwheels | 0:1193dbfe28e2 | 56 | |
pwheels | 0:1193dbfe28e2 | 57 | Serial com1( ONEWIRE_TX , ONEWIRE_RX ); // uart 1 = p13_p14, tx, rx |
pwheels | 0:1193dbfe28e2 | 58 | Serial com2( ONEWIRE_TX , ONEWIRE_RX ); // uart 2 = p28_p27, tx, rx |
pwheels | 0:1193dbfe28e2 | 59 | Serial com3( ONEWIRE_TX , ONEWIRE_RX ); // uart 3 = p9_p10, tx, rx |
pwheels | 0:1193dbfe28e2 | 60 | |
pwheels | 0:1193dbfe28e2 | 61 | // exportable functions required |
pwheels | 0:1193dbfe28e2 | 62 | SMALLINT OpenCOM(int,char *); |
pwheels | 0:1193dbfe28e2 | 63 | SMALLINT WriteCOM(int,int,uchar *); |
pwheels | 0:1193dbfe28e2 | 64 | void FlushCOM(int); |
pwheels | 0:1193dbfe28e2 | 65 | int ReadCOM(int,int,uchar *); |
pwheels | 0:1193dbfe28e2 | 66 | void BreakCOM(int); |
pwheels | 0:1193dbfe28e2 | 67 | void SetBaudCOM(int,int); |
pwheels | 0:1193dbfe28e2 | 68 | void CloseCOM(int); |
pwheels | 0:1193dbfe28e2 | 69 | long msGettick(void); |
pwheels | 0:1193dbfe28e2 | 70 | void msDelay(int); |
pwheels | 0:1193dbfe28e2 | 71 | SMALLINT owHasPowerDelivery(int); |
pwheels | 0:1193dbfe28e2 | 72 | SMALLINT owHasOverDrive(int); |
pwheels | 0:1193dbfe28e2 | 73 | SMALLINT owHasProgramPulse(int); |
pwheels | 0:1193dbfe28e2 | 74 | SMALLINT owWriteBytePower(int,SMALLINT); |
pwheels | 0:1193dbfe28e2 | 75 | SMALLINT owReadBitPower(int,SMALLINT); |
pwheels | 0:1193dbfe28e2 | 76 | |
pwheels | 0:1193dbfe28e2 | 77 | |
pwheels | 0:1193dbfe28e2 | 78 | //--------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 79 | // Attempt to open a com port. Keep the handle in ComID. |
pwheels | 0:1193dbfe28e2 | 80 | // Set the starting baud rate to 9600. |
pwheels | 0:1193dbfe28e2 | 81 | // |
pwheels | 0:1193dbfe28e2 | 82 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number provided will |
pwheels | 0:1193dbfe28e2 | 83 | // be used to indicate the port number desired when calling |
pwheels | 0:1193dbfe28e2 | 84 | // all other functions in this library. |
pwheels | 0:1193dbfe28e2 | 85 | // |
pwheels | 0:1193dbfe28e2 | 86 | // 'port_zstr' - zero terminate port name. For this platform |
pwheels | 0:1193dbfe28e2 | 87 | // use format COMX where X is the port number. |
pwheels | 0:1193dbfe28e2 | 88 | // NOTE: not being used by MBED |
pwheels | 0:1193dbfe28e2 | 89 | // |
pwheels | 0:1193dbfe28e2 | 90 | // |
pwheels | 0:1193dbfe28e2 | 91 | // Returns: TRUE(1) - success, COM port opened |
pwheels | 0:1193dbfe28e2 | 92 | // FALSE(0) - failure, could not open specified port |
pwheels | 0:1193dbfe28e2 | 93 | // |
pwheels | 0:1193dbfe28e2 | 94 | SMALLINT OpenCOM(int portnum, char *port_zstr) { |
pwheels | 0:1193dbfe28e2 | 95 | |
pwheels | 0:1193dbfe28e2 | 96 | switch (portnum) { |
pwheels | 0:1193dbfe28e2 | 97 | case 1: |
pwheels | 0:1193dbfe28e2 | 98 | com1.baud( 9600); |
pwheels | 0:1193dbfe28e2 | 99 | break; |
pwheels | 0:1193dbfe28e2 | 100 | case 2: |
pwheels | 0:1193dbfe28e2 | 101 | com2.baud( 9600); |
pwheels | 0:1193dbfe28e2 | 102 | break; |
pwheels | 0:1193dbfe28e2 | 103 | case 3: |
pwheels | 0:1193dbfe28e2 | 104 | com3.baud( 9600); |
pwheels | 0:1193dbfe28e2 | 105 | break; |
pwheels | 0:1193dbfe28e2 | 106 | default: |
pwheels | 0:1193dbfe28e2 | 107 | return 0; |
pwheels | 0:1193dbfe28e2 | 108 | } |
pwheels | 0:1193dbfe28e2 | 109 | return 1; |
pwheels | 0:1193dbfe28e2 | 110 | } |
pwheels | 0:1193dbfe28e2 | 111 | |
pwheels | 0:1193dbfe28e2 | 112 | //--------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 113 | // Attempt to open a com port. Keep the handle in ComID. |
pwheels | 0:1193dbfe28e2 | 114 | // Set the starting baud rate to 9600. |
pwheels | 0:1193dbfe28e2 | 115 | // |
pwheels | 0:1193dbfe28e2 | 116 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number provided will |
pwheels | 0:1193dbfe28e2 | 117 | // be used to indicate the port number desired when calling |
pwheels | 0:1193dbfe28e2 | 118 | // all other functions in this library. |
pwheels | 0:1193dbfe28e2 | 119 | // |
pwheels | 0:1193dbfe28e2 | 120 | // |
pwheels | 0:1193dbfe28e2 | 121 | // Returns: the port number if it was successful otherwise -1 |
pwheels | 0:1193dbfe28e2 | 122 | // |
pwheels | 0:1193dbfe28e2 | 123 | int OpenCOMEx(char *port_zstr) { |
pwheels | 0:1193dbfe28e2 | 124 | |
pwheels | 0:1193dbfe28e2 | 125 | int portnum = -1; |
pwheels | 0:1193dbfe28e2 | 126 | |
pwheels | 0:1193dbfe28e2 | 127 | if ( port_zstr[0] == '1') { |
pwheels | 0:1193dbfe28e2 | 128 | portnum = 1; |
pwheels | 0:1193dbfe28e2 | 129 | } |
pwheels | 0:1193dbfe28e2 | 130 | |
pwheels | 0:1193dbfe28e2 | 131 | if ( port_zstr[0] == '2') { |
pwheels | 0:1193dbfe28e2 | 132 | portnum = 2; |
pwheels | 0:1193dbfe28e2 | 133 | } |
pwheels | 0:1193dbfe28e2 | 134 | |
pwheels | 0:1193dbfe28e2 | 135 | if ( port_zstr[0] == '3') { |
pwheels | 0:1193dbfe28e2 | 136 | portnum = 3; |
pwheels | 0:1193dbfe28e2 | 137 | } |
pwheels | 0:1193dbfe28e2 | 138 | |
pwheels | 0:1193dbfe28e2 | 139 | if(!OpenCOM(portnum, port_zstr)) { |
pwheels | 0:1193dbfe28e2 | 140 | return -1; |
pwheels | 0:1193dbfe28e2 | 141 | } |
pwheels | 0:1193dbfe28e2 | 142 | return portnum; |
pwheels | 0:1193dbfe28e2 | 143 | } |
pwheels | 0:1193dbfe28e2 | 144 | |
pwheels | 0:1193dbfe28e2 | 145 | //--------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 146 | // Closes the connection to the port. |
pwheels | 0:1193dbfe28e2 | 147 | // |
pwheels | 0:1193dbfe28e2 | 148 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 149 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 150 | // |
pwheels | 0:1193dbfe28e2 | 151 | void CloseCOM(int portnum) { |
pwheels | 0:1193dbfe28e2 | 152 | // no need to implement, mbed doesn't support close ! |
pwheels | 0:1193dbfe28e2 | 153 | } |
pwheels | 0:1193dbfe28e2 | 154 | |
pwheels | 0:1193dbfe28e2 | 155 | //--------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 156 | // Flush the rx and tx buffers |
pwheels | 0:1193dbfe28e2 | 157 | // |
pwheels | 0:1193dbfe28e2 | 158 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 159 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 160 | // |
pwheels | 0:1193dbfe28e2 | 161 | void FlushCOM(int portnum) { |
pwheels | 0:1193dbfe28e2 | 162 | |
pwheels | 0:1193dbfe28e2 | 163 | switch (portnum) { |
pwheels | 0:1193dbfe28e2 | 164 | case 1: |
pwheels | 0:1193dbfe28e2 | 165 | // Flush TX & RX FIFO buffer |
pwheels | 0:1193dbfe28e2 | 166 | LPC_UART1->FCR |= 0x06; |
pwheels | 0:1193dbfe28e2 | 167 | break; |
pwheels | 0:1193dbfe28e2 | 168 | case 2: |
pwheels | 0:1193dbfe28e2 | 169 | // Flush TX & RX FIFO buffer |
pwheels | 0:1193dbfe28e2 | 170 | LPC_UART2->FCR |= 0x06; |
pwheels | 0:1193dbfe28e2 | 171 | break; |
pwheels | 0:1193dbfe28e2 | 172 | case 3: |
pwheels | 0:1193dbfe28e2 | 173 | // Flush TX & RX FIFO buffer |
pwheels | 0:1193dbfe28e2 | 174 | LPC_UART3->FCR |= 0x06; |
pwheels | 0:1193dbfe28e2 | 175 | break; |
pwheels | 0:1193dbfe28e2 | 176 | } |
pwheels | 0:1193dbfe28e2 | 177 | } |
pwheels | 0:1193dbfe28e2 | 178 | |
pwheels | 0:1193dbfe28e2 | 179 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 180 | // Write an array of bytes to the COM port, verify that it was |
pwheels | 0:1193dbfe28e2 | 181 | // sent out. Assume that baud rate has been set. |
pwheels | 0:1193dbfe28e2 | 182 | // |
pwheels | 0:1193dbfe28e2 | 183 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 184 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 185 | // 'outlen' - number of bytes to write to COM port |
pwheels | 0:1193dbfe28e2 | 186 | // 'outbuf' - pointer ot an array of bytes to write |
pwheels | 0:1193dbfe28e2 | 187 | // |
pwheels | 0:1193dbfe28e2 | 188 | // Returns: TRUE(1) - success |
pwheels | 0:1193dbfe28e2 | 189 | // FALSE(0) - failure |
pwheels | 0:1193dbfe28e2 | 190 | // |
pwheels | 0:1193dbfe28e2 | 191 | SMALLINT WriteCOM(int portnum, int outlen, uchar *outbuf) { |
pwheels | 0:1193dbfe28e2 | 192 | |
pwheels | 0:1193dbfe28e2 | 193 | //printf("port-%d\r\n",portnum); |
pwheels | 0:1193dbfe28e2 | 194 | for ( int x=0; x < outlen; x++ ) |
pwheels | 0:1193dbfe28e2 | 195 | { |
pwheels | 0:1193dbfe28e2 | 196 | switch (portnum) { |
pwheels | 0:1193dbfe28e2 | 197 | case 1: |
pwheels | 0:1193dbfe28e2 | 198 | if (com1.writeable()) { |
pwheels | 0:1193dbfe28e2 | 199 | com1.putc( outbuf[x]); |
pwheels | 0:1193dbfe28e2 | 200 | } |
pwheels | 0:1193dbfe28e2 | 201 | break; |
pwheels | 0:1193dbfe28e2 | 202 | case 2: |
pwheels | 0:1193dbfe28e2 | 203 | if (com2.writeable()) { |
pwheels | 0:1193dbfe28e2 | 204 | com2.putc( outbuf[x]); |
pwheels | 0:1193dbfe28e2 | 205 | } |
pwheels | 0:1193dbfe28e2 | 206 | break; |
pwheels | 0:1193dbfe28e2 | 207 | case 3: |
pwheels | 0:1193dbfe28e2 | 208 | if (com3.writeable()) { |
pwheels | 0:1193dbfe28e2 | 209 | com3.putc( outbuf[x]); |
pwheels | 0:1193dbfe28e2 | 210 | //printf("idx-%d, char-%2x\r\n", x, outbuf[x]); |
pwheels | 0:1193dbfe28e2 | 211 | } |
pwheels | 0:1193dbfe28e2 | 212 | break; |
pwheels | 0:1193dbfe28e2 | 213 | } |
pwheels | 0:1193dbfe28e2 | 214 | wait_ms(1); |
pwheels | 0:1193dbfe28e2 | 215 | } |
pwheels | 0:1193dbfe28e2 | 216 | |
pwheels | 0:1193dbfe28e2 | 217 | switch (portnum) { |
pwheels | 0:1193dbfe28e2 | 218 | case 1: |
pwheels | 0:1193dbfe28e2 | 219 | while ( (LPC_UART1->LSR & 0x40) == 0 ) {} |
pwheels | 0:1193dbfe28e2 | 220 | break; |
pwheels | 0:1193dbfe28e2 | 221 | case 2: |
pwheels | 0:1193dbfe28e2 | 222 | while ( (LPC_UART2->LSR & 0x40) == 0 ) {} |
pwheels | 0:1193dbfe28e2 | 223 | break; |
pwheels | 0:1193dbfe28e2 | 224 | case 3: |
pwheels | 0:1193dbfe28e2 | 225 | while ( (LPC_UART3->LSR & 0x40) == 0 ) {} |
pwheels | 0:1193dbfe28e2 | 226 | break; |
pwheels | 0:1193dbfe28e2 | 227 | } |
pwheels | 0:1193dbfe28e2 | 228 | return 1; |
pwheels | 0:1193dbfe28e2 | 229 | } |
pwheels | 0:1193dbfe28e2 | 230 | |
pwheels | 0:1193dbfe28e2 | 231 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 232 | // Read an array of bytes from the COM port, verify that it was |
pwheels | 0:1193dbfe28e2 | 233 | // received. Assume that baud rate has been set. |
pwheels | 0:1193dbfe28e2 | 234 | // |
pwheels | 0:1193dbfe28e2 | 235 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 236 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 237 | // 'inlen' - number of bytes to read from COM port |
pwheels | 0:1193dbfe28e2 | 238 | // 'inbuf' - pointer to a buffer to hold the incoming bytes |
pwheels | 0:1193dbfe28e2 | 239 | // |
pwheels | 0:1193dbfe28e2 | 240 | // Returns: number of characters read |
pwheels | 0:1193dbfe28e2 | 241 | // |
pwheels | 0:1193dbfe28e2 | 242 | int ReadCOM(int portnum, int inlen, unsigned char *inbuf) { |
pwheels | 0:1193dbfe28e2 | 243 | |
pwheels | 0:1193dbfe28e2 | 244 | string buffer (""); |
pwheels | 0:1193dbfe28e2 | 245 | Timer t; |
pwheels | 0:1193dbfe28e2 | 246 | int numchar = 0; |
pwheels | 0:1193dbfe28e2 | 247 | int read =0; |
pwheels | 0:1193dbfe28e2 | 248 | |
pwheels | 0:1193dbfe28e2 | 249 | t.start(); // Start timeout timer |
pwheels | 0:1193dbfe28e2 | 250 | |
pwheels | 0:1193dbfe28e2 | 251 | while ( t.read_ms() < 1000 ) { // If we haven't timed out.... |
pwheels | 0:1193dbfe28e2 | 252 | switch (portnum) { |
pwheels | 0:1193dbfe28e2 | 253 | case 1: |
pwheels | 0:1193dbfe28e2 | 254 | if (com1.readable()) { |
pwheels | 0:1193dbfe28e2 | 255 | read = com1.getc(); |
pwheels | 0:1193dbfe28e2 | 256 | buffer += read; |
pwheels | 0:1193dbfe28e2 | 257 | numchar++; |
pwheels | 0:1193dbfe28e2 | 258 | t.reset(); |
pwheels | 0:1193dbfe28e2 | 259 | } |
pwheels | 0:1193dbfe28e2 | 260 | break; |
pwheels | 0:1193dbfe28e2 | 261 | case 2: |
pwheels | 0:1193dbfe28e2 | 262 | if (com2.readable()) { |
pwheels | 0:1193dbfe28e2 | 263 | read = com2.getc(); |
pwheels | 0:1193dbfe28e2 | 264 | buffer += read; |
pwheels | 0:1193dbfe28e2 | 265 | numchar++; |
pwheels | 0:1193dbfe28e2 | 266 | t.reset(); |
pwheels | 0:1193dbfe28e2 | 267 | } |
pwheels | 0:1193dbfe28e2 | 268 | break; |
pwheels | 0:1193dbfe28e2 | 269 | case 3: |
pwheels | 0:1193dbfe28e2 | 270 | if (com3.readable()) { |
pwheels | 0:1193dbfe28e2 | 271 | read = com3.getc(); |
pwheels | 0:1193dbfe28e2 | 272 | buffer += read; |
pwheels | 0:1193dbfe28e2 | 273 | numchar++; |
pwheels | 0:1193dbfe28e2 | 274 | t.reset(); |
pwheels | 0:1193dbfe28e2 | 275 | } |
pwheels | 0:1193dbfe28e2 | 276 | break; |
pwheels | 0:1193dbfe28e2 | 277 | } |
pwheels | 0:1193dbfe28e2 | 278 | |
pwheels | 0:1193dbfe28e2 | 279 | if (numchar == inlen) |
pwheels | 0:1193dbfe28e2 | 280 | { |
pwheels | 0:1193dbfe28e2 | 281 | break; |
pwheels | 0:1193dbfe28e2 | 282 | } |
pwheels | 0:1193dbfe28e2 | 283 | } |
pwheels | 0:1193dbfe28e2 | 284 | |
pwheels | 0:1193dbfe28e2 | 285 | buffer.copy( (char*)inbuf, numchar ); |
pwheels | 0:1193dbfe28e2 | 286 | |
pwheels | 0:1193dbfe28e2 | 287 | return numchar; |
pwheels | 0:1193dbfe28e2 | 288 | } |
pwheels | 0:1193dbfe28e2 | 289 | |
pwheels | 0:1193dbfe28e2 | 290 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 291 | // Send a break on the com port for at least 2 ms |
pwheels | 0:1193dbfe28e2 | 292 | // |
pwheels | 0:1193dbfe28e2 | 293 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 294 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 295 | // |
pwheels | 0:1193dbfe28e2 | 296 | void BreakCOM(int portnum) { |
pwheels | 0:1193dbfe28e2 | 297 | int BREAK_time = 2; |
pwheels | 0:1193dbfe28e2 | 298 | |
pwheels | 0:1193dbfe28e2 | 299 | switch (portnum) { |
pwheels | 0:1193dbfe28e2 | 300 | case 1: |
pwheels | 0:1193dbfe28e2 | 301 | // Send Line Break |
pwheels | 0:1193dbfe28e2 | 302 | LPC_UART1->LCR |= 0x40; |
pwheels | 0:1193dbfe28e2 | 303 | wait_ms( BREAK_time ); |
pwheels | 0:1193dbfe28e2 | 304 | // Mark after break |
pwheels | 0:1193dbfe28e2 | 305 | LPC_UART1->LCR &= ~(0x40); |
pwheels | 0:1193dbfe28e2 | 306 | break; |
pwheels | 0:1193dbfe28e2 | 307 | case 2: |
pwheels | 0:1193dbfe28e2 | 308 | // Send Line Break |
pwheels | 0:1193dbfe28e2 | 309 | LPC_UART2->LCR |= 0x40; |
pwheels | 0:1193dbfe28e2 | 310 | wait_ms( BREAK_time ); |
pwheels | 0:1193dbfe28e2 | 311 | // Mark after break |
pwheels | 0:1193dbfe28e2 | 312 | LPC_UART2->LCR &= ~(0x40); |
pwheels | 0:1193dbfe28e2 | 313 | break; |
pwheels | 0:1193dbfe28e2 | 314 | case 3: |
pwheels | 0:1193dbfe28e2 | 315 | // Send Line Break |
pwheels | 0:1193dbfe28e2 | 316 | LPC_UART3->LCR |= 0x40; |
pwheels | 0:1193dbfe28e2 | 317 | wait_ms( BREAK_time ); |
pwheels | 0:1193dbfe28e2 | 318 | // Mark after break |
pwheels | 0:1193dbfe28e2 | 319 | LPC_UART3->LCR &= ~(0x40); |
pwheels | 0:1193dbfe28e2 | 320 | break; |
pwheels | 0:1193dbfe28e2 | 321 | default: |
pwheels | 0:1193dbfe28e2 | 322 | break; |
pwheels | 0:1193dbfe28e2 | 323 | } |
pwheels | 0:1193dbfe28e2 | 324 | |
pwheels | 0:1193dbfe28e2 | 325 | wait_us( BREAK_time ); |
pwheels | 0:1193dbfe28e2 | 326 | } |
pwheels | 0:1193dbfe28e2 | 327 | |
pwheels | 0:1193dbfe28e2 | 328 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 329 | // Set the baud rate on the com port. |
pwheels | 0:1193dbfe28e2 | 330 | // |
pwheels | 0:1193dbfe28e2 | 331 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 332 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 333 | // 'new_baud' - new baud rate defined as |
pwheels | 0:1193dbfe28e2 | 334 | // PARMSET_9600 0x00 |
pwheels | 0:1193dbfe28e2 | 335 | // PARMSET_19200 0x02 |
pwheels | 0:1193dbfe28e2 | 336 | // PARMSET_57600 0x04 |
pwheels | 0:1193dbfe28e2 | 337 | // PARMSET_115200 0x06 |
pwheels | 0:1193dbfe28e2 | 338 | // |
pwheels | 0:1193dbfe28e2 | 339 | void SetBaudCOM(int portnum, int new_baud) { |
pwheels | 0:1193dbfe28e2 | 340 | |
pwheels | 0:1193dbfe28e2 | 341 | int baud_rate = 9600; |
pwheels | 0:1193dbfe28e2 | 342 | |
pwheels | 0:1193dbfe28e2 | 343 | switch (new_baud) { |
pwheels | 0:1193dbfe28e2 | 344 | case 0: |
pwheels | 0:1193dbfe28e2 | 345 | baud_rate = 9600; |
pwheels | 0:1193dbfe28e2 | 346 | break; |
pwheels | 0:1193dbfe28e2 | 347 | case 2: |
pwheels | 0:1193dbfe28e2 | 348 | baud_rate = 19200; |
pwheels | 0:1193dbfe28e2 | 349 | break; |
pwheels | 0:1193dbfe28e2 | 350 | case 4: |
pwheels | 0:1193dbfe28e2 | 351 | baud_rate = 57600; |
pwheels | 0:1193dbfe28e2 | 352 | break; |
pwheels | 0:1193dbfe28e2 | 353 | case 6: |
pwheels | 0:1193dbfe28e2 | 354 | baud_rate = 115200; |
pwheels | 0:1193dbfe28e2 | 355 | break; |
pwheels | 0:1193dbfe28e2 | 356 | } |
pwheels | 0:1193dbfe28e2 | 357 | |
pwheels | 0:1193dbfe28e2 | 358 | switch (portnum) { |
pwheels | 0:1193dbfe28e2 | 359 | |
pwheels | 0:1193dbfe28e2 | 360 | case 1: |
pwheels | 0:1193dbfe28e2 | 361 | com1.baud(baud_rate); |
pwheels | 0:1193dbfe28e2 | 362 | break; |
pwheels | 0:1193dbfe28e2 | 363 | case 2: |
pwheels | 0:1193dbfe28e2 | 364 | com2.baud(baud_rate); |
pwheels | 0:1193dbfe28e2 | 365 | break; |
pwheels | 0:1193dbfe28e2 | 366 | case 3: |
pwheels | 0:1193dbfe28e2 | 367 | com2.baud(baud_rate); |
pwheels | 0:1193dbfe28e2 | 368 | break; |
pwheels | 0:1193dbfe28e2 | 369 | } |
pwheels | 0:1193dbfe28e2 | 370 | } |
pwheels | 0:1193dbfe28e2 | 371 | |
pwheels | 0:1193dbfe28e2 | 372 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 373 | // Description: |
pwheels | 0:1193dbfe28e2 | 374 | // Delay for at least 'len' ms |
pwheels | 0:1193dbfe28e2 | 375 | // |
pwheels | 0:1193dbfe28e2 | 376 | void msDelay(int len) |
pwheels | 0:1193dbfe28e2 | 377 | { |
pwheels | 0:1193dbfe28e2 | 378 | wait_ms( len ); |
pwheels | 0:1193dbfe28e2 | 379 | } |
pwheels | 0:1193dbfe28e2 | 380 | |
pwheels | 0:1193dbfe28e2 | 381 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 382 | // Get the current millisecond tick count. Does not have to represent |
pwheels | 0:1193dbfe28e2 | 383 | // an actual time, it just needs to be an incrementing timer. |
pwheels | 0:1193dbfe28e2 | 384 | // |
pwheels | 0:1193dbfe28e2 | 385 | long msGettick(void) { |
pwheels | 0:1193dbfe28e2 | 386 | // add platform specific code here |
pwheels | 0:1193dbfe28e2 | 387 | return 0; |
pwheels | 0:1193dbfe28e2 | 388 | } |
pwheels | 0:1193dbfe28e2 | 389 | |
pwheels | 0:1193dbfe28e2 | 390 | /* from here onwards functions have been removed, further evaluation needed |
pwheels | 0:1193dbfe28e2 | 391 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 392 | // This procedure indicates wether the adapter can deliver power. |
pwheels | 0:1193dbfe28e2 | 393 | // |
pwheels | 0:1193dbfe28e2 | 394 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 395 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 396 | // |
pwheels | 0:1193dbfe28e2 | 397 | // Returns: TRUE if adapter is capable of delivering power. |
pwheels | 0:1193dbfe28e2 | 398 | // |
pwheels | 0:1193dbfe28e2 | 399 | SMALLINT owHasPowerDelivery(int portnum) { |
pwheels | 0:1193dbfe28e2 | 400 | |
pwheels | 0:1193dbfe28e2 | 401 | // add adapter specific code here |
pwheels | 0:1193dbfe28e2 | 402 | return TRUE; |
pwheels | 0:1193dbfe28e2 | 403 | } |
pwheels | 0:1193dbfe28e2 | 404 | |
pwheels | 0:1193dbfe28e2 | 405 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 406 | // This procedure indicates wether the adapter can deliver power. |
pwheels | 0:1193dbfe28e2 | 407 | // |
pwheels | 0:1193dbfe28e2 | 408 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 409 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 410 | // |
pwheels | 0:1193dbfe28e2 | 411 | // Returns: TRUE if adapter is capable of over drive. |
pwheels | 0:1193dbfe28e2 | 412 | // |
pwheels | 0:1193dbfe28e2 | 413 | SMALLINT owHasOverDrive(int portnum) { |
pwheels | 0:1193dbfe28e2 | 414 | |
pwheels | 0:1193dbfe28e2 | 415 | // add adapter specific code here |
pwheels | 0:1193dbfe28e2 | 416 | return TRUE; |
pwheels | 0:1193dbfe28e2 | 417 | } |
pwheels | 0:1193dbfe28e2 | 418 | |
pwheels | 0:1193dbfe28e2 | 419 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 420 | // This procedure creates a fixed 480 microseconds 12 volt pulse |
pwheels | 0:1193dbfe28e2 | 421 | // on the 1-Wire Net for programming EPROM iButtons. |
pwheels | 0:1193dbfe28e2 | 422 | // |
pwheels | 0:1193dbfe28e2 | 423 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 424 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 425 | // |
pwheels | 0:1193dbfe28e2 | 426 | // Returns: TRUE program volatage available |
pwheels | 0:1193dbfe28e2 | 427 | // FALSE program voltage not available |
pwheels | 0:1193dbfe28e2 | 428 | SMALLINT owHasProgramPulse(int portnum) |
pwheels | 0:1193dbfe28e2 | 429 | { |
pwheels | 0:1193dbfe28e2 | 430 | // add adapter specific code here |
pwheels | 0:1193dbfe28e2 | 431 | return TRUE; |
pwheels | 0:1193dbfe28e2 | 432 | } |
pwheels | 0:1193dbfe28e2 | 433 | |
pwheels | 0:1193dbfe28e2 | 434 | |
pwheels | 0:1193dbfe28e2 | 435 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 436 | // Send 8 bits of communication to the 1-Wire Net and verify that the |
pwheels | 0:1193dbfe28e2 | 437 | // 8 bits read from the 1-Wire Net is the same (write operation). |
pwheels | 0:1193dbfe28e2 | 438 | // The parameter 'sendbyte' least significant 8 bits are used. After the |
pwheels | 0:1193dbfe28e2 | 439 | // 8 bits are sent change the level of the 1-Wire net. |
pwheels | 0:1193dbfe28e2 | 440 | // |
pwheels | 0:1193dbfe28e2 | 441 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 442 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 443 | // 'sendbyte' - 8 bits to send (least significant byte) |
pwheels | 0:1193dbfe28e2 | 444 | // |
pwheels | 0:1193dbfe28e2 | 445 | // Returns: TRUE: bytes written and echo was the same |
pwheels | 0:1193dbfe28e2 | 446 | // FALSE: echo was not the same |
pwheels | 0:1193dbfe28e2 | 447 | // |
pwheels | 0:1193dbfe28e2 | 448 | SMALLINT owWriteBytePower(int portnum, SMALLINT sendbyte) |
pwheels | 0:1193dbfe28e2 | 449 | { |
pwheels | 0:1193dbfe28e2 | 450 | // replace if platform has better implementation (faster response) |
pwheels | 0:1193dbfe28e2 | 451 | if (!owHasPowerDelivery(portnum)) |
pwheels | 0:1193dbfe28e2 | 452 | return FALSE; |
pwheels | 0:1193dbfe28e2 | 453 | |
pwheels | 0:1193dbfe28e2 | 454 | if(owTouchByte(portnum,sendbyte) != sendbyte) |
pwheels | 0:1193dbfe28e2 | 455 | return FALSE; |
pwheels | 0:1193dbfe28e2 | 456 | |
pwheels | 0:1193dbfe28e2 | 457 | if(owLevel(portnum,MODE_STRONG5) != MODE_STRONG5) |
pwheels | 0:1193dbfe28e2 | 458 | return FALSE; |
pwheels | 0:1193dbfe28e2 | 459 | |
pwheels | 0:1193dbfe28e2 | 460 | return TRUE; |
pwheels | 0:1193dbfe28e2 | 461 | } |
pwheels | 0:1193dbfe28e2 | 462 | |
pwheels | 0:1193dbfe28e2 | 463 | |
pwheels | 0:1193dbfe28e2 | 464 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 465 | // Send 1 bit of communication to the 1-Wire Net and verify that the |
pwheels | 0:1193dbfe28e2 | 466 | // response matches the 'applyPowerResponse' bit and apply power delivery |
pwheels | 0:1193dbfe28e2 | 467 | // to the 1-Wire net. Note that some implementations may apply the power |
pwheels | 0:1193dbfe28e2 | 468 | // first and then turn it off if the response is incorrect. |
pwheels | 0:1193dbfe28e2 | 469 | // |
pwheels | 0:1193dbfe28e2 | 470 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 471 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 472 | // 'applyPowerResponse' - 1 bit response to check, if correct then start |
pwheels | 0:1193dbfe28e2 | 473 | // power delivery |
pwheels | 0:1193dbfe28e2 | 474 | // |
pwheels | 0:1193dbfe28e2 | 475 | // Returns: TRUE: bit written and response correct, strong pullup now on |
pwheels | 0:1193dbfe28e2 | 476 | // FALSE: response incorrect |
pwheels | 0:1193dbfe28e2 | 477 | // |
pwheels | 0:1193dbfe28e2 | 478 | SMALLINT owReadBitPower(int portnum, SMALLINT applyPowerResponse) |
pwheels | 0:1193dbfe28e2 | 479 | { |
pwheels | 0:1193dbfe28e2 | 480 | // replace if platform has better implementation (faster response) |
pwheels | 0:1193dbfe28e2 | 481 | if (!owHasPowerDelivery(portnum)) |
pwheels | 0:1193dbfe28e2 | 482 | return FALSE; |
pwheels | 0:1193dbfe28e2 | 483 | |
pwheels | 0:1193dbfe28e2 | 484 | if(owTouchBit(portnum,0x01) != applyPowerResponse) |
pwheels | 0:1193dbfe28e2 | 485 | return FALSE; |
pwheels | 0:1193dbfe28e2 | 486 | |
pwheels | 0:1193dbfe28e2 | 487 | if(owLevel(portnum,MODE_STRONG5) != MODE_STRONG5) |
pwheels | 0:1193dbfe28e2 | 488 | return FALSE; |
pwheels | 0:1193dbfe28e2 | 489 | |
pwheels | 0:1193dbfe28e2 | 490 | return TRUE; |
pwheels | 0:1193dbfe28e2 | 491 | } |
pwheels | 0:1193dbfe28e2 | 492 | |
pwheels | 0:1193dbfe28e2 | 493 | */ |