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

Dependencies:   mbed

Committer:
pwheels
Date:
Thu Mar 24 17:21:29 2011 +0000
Revision:
0:1193dbfe28e2

        

Who changed what in which revision?

UserRevisionLine numberNew 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 */