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
owllu.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 | // owLLU.C - Link Layer 1-Wire Net functions using the DS2480/DS2480B (U) |
pwheels | 0:1193dbfe28e2 | 28 | // serial interface chip. |
pwheels | 0:1193dbfe28e2 | 29 | // |
pwheels | 0:1193dbfe28e2 | 30 | // Version: 3.00 |
pwheels | 0:1193dbfe28e2 | 31 | // |
pwheels | 0:1193dbfe28e2 | 32 | // History: 1.00 -> 1.01 DS2480 version number now ignored in |
pwheels | 0:1193dbfe28e2 | 33 | // owTouchReset. |
pwheels | 0:1193dbfe28e2 | 34 | // 1.02 -> 1.03 Removed caps in #includes for Linux capatibility |
pwheels | 0:1193dbfe28e2 | 35 | // Removed #include <windows.h> |
pwheels | 0:1193dbfe28e2 | 36 | // Add #include "ownet.h" to define TRUE,FALSE |
pwheels | 0:1193dbfe28e2 | 37 | // 1.03 -> 2.00 Changed 'MLan' to 'ow'. Added support for |
pwheels | 0:1193dbfe28e2 | 38 | // multiple ports. |
pwheels | 0:1193dbfe28e2 | 39 | // 2.00 -> 2.01 Added error handling. Added circular-include check. |
pwheels | 0:1193dbfe28e2 | 40 | // 2.01 -> 2.10 Added raw memory error handling and SMALLINT |
pwheels | 0:1193dbfe28e2 | 41 | // 2.10 -> 3.00 Added memory bank functionality |
pwheels | 0:1193dbfe28e2 | 42 | // Added file I/O operations |
pwheels | 0:1193dbfe28e2 | 43 | // Added owReadBitPower and owWriteBytePower |
pwheels | 0:1193dbfe28e2 | 44 | // Added support for THE LINK |
pwheels | 0:1193dbfe28e2 | 45 | // Updated owLevel to match AN192 |
pwheels | 0:1193dbfe28e2 | 46 | // |
pwheels | 0:1193dbfe28e2 | 47 | |
pwheels | 0:1193dbfe28e2 | 48 | #include "ownet.h" |
pwheels | 0:1193dbfe28e2 | 49 | #include "ds2480.h" |
pwheels | 0:1193dbfe28e2 | 50 | |
pwheels | 0:1193dbfe28e2 | 51 | int dodebug=0; |
pwheels | 0:1193dbfe28e2 | 52 | |
pwheels | 0:1193dbfe28e2 | 53 | // external globals |
pwheels | 0:1193dbfe28e2 | 54 | extern SMALLINT ULevel[MAX_PORTNUM]; // current DS2480B 1-Wire Net level |
pwheels | 0:1193dbfe28e2 | 55 | extern SMALLINT UBaud[MAX_PORTNUM]; // current DS2480B baud rate |
pwheels | 0:1193dbfe28e2 | 56 | extern SMALLINT UMode[MAX_PORTNUM]; // current DS2480B command or data mode state |
pwheels | 0:1193dbfe28e2 | 57 | extern SMALLINT USpeed[MAX_PORTNUM]; // current DS2480B 1-Wire Net communication speed |
pwheels | 0:1193dbfe28e2 | 58 | extern SMALLINT UVersion[MAX_PORTNUM]; // current DS2480B version |
pwheels | 0:1193dbfe28e2 | 59 | |
pwheels | 0:1193dbfe28e2 | 60 | // new global for DS1994/DS2404/DS1427. If TRUE, puts a delay in owTouchReset to compensate for alarming clocks. |
pwheels | 0:1193dbfe28e2 | 61 | SMALLINT FAMILY_CODE_04_ALARM_TOUCHRESET_COMPLIANCE = FALSE; // default owTouchReset to quickest response. |
pwheels | 0:1193dbfe28e2 | 62 | |
pwheels | 0:1193dbfe28e2 | 63 | // local varable flag, true if program voltage available |
pwheels | 0:1193dbfe28e2 | 64 | static SMALLINT ProgramAvailable[MAX_PORTNUM]; |
pwheels | 0:1193dbfe28e2 | 65 | |
pwheels | 0:1193dbfe28e2 | 66 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 67 | // Reset all of the devices on the 1-Wire Net and return the result. |
pwheels | 0:1193dbfe28e2 | 68 | // |
pwheels | 0:1193dbfe28e2 | 69 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 70 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 71 | // |
pwheels | 0:1193dbfe28e2 | 72 | // Returns: TRUE(1): presense pulse(s) detected, device(s) reset |
pwheels | 0:1193dbfe28e2 | 73 | // FALSE(0): no presense pulses detected |
pwheels | 0:1193dbfe28e2 | 74 | // |
pwheels | 0:1193dbfe28e2 | 75 | // WARNING: Without setting the above global (FAMILY_CODE_04_ALARM_TOUCHRESET_COMPLIANCE) |
pwheels | 0:1193dbfe28e2 | 76 | // to TRUE, this routine will not function correctly on some |
pwheels | 0:1193dbfe28e2 | 77 | // Alarm reset types of the DS1994/DS1427/DS2404 with |
pwheels | 0:1193dbfe28e2 | 78 | // Rev 1,2, and 3 of the DS2480/DS2480B. |
pwheels | 0:1193dbfe28e2 | 79 | // |
pwheels | 0:1193dbfe28e2 | 80 | // |
pwheels | 0:1193dbfe28e2 | 81 | SMALLINT owTouchReset(int portnum) |
pwheels | 0:1193dbfe28e2 | 82 | { |
pwheels | 0:1193dbfe28e2 | 83 | uchar readbuffer[10],sendpacket[10]; |
pwheels | 0:1193dbfe28e2 | 84 | uchar sendlen=0; |
pwheels | 0:1193dbfe28e2 | 85 | |
pwheels | 0:1193dbfe28e2 | 86 | if (dodebug) |
pwheels | 0:1193dbfe28e2 | 87 | printf("\nRST ");//?????????????? |
pwheels | 0:1193dbfe28e2 | 88 | |
pwheels | 0:1193dbfe28e2 | 89 | // make sure normal level |
pwheels | 0:1193dbfe28e2 | 90 | owLevel(portnum,MODE_NORMAL); |
pwheels | 0:1193dbfe28e2 | 91 | |
pwheels | 0:1193dbfe28e2 | 92 | // check if correct mode |
pwheels | 0:1193dbfe28e2 | 93 | if (UMode[portnum] != MODSEL_COMMAND) |
pwheels | 0:1193dbfe28e2 | 94 | { |
pwheels | 0:1193dbfe28e2 | 95 | UMode[portnum] = MODSEL_COMMAND; |
pwheels | 0:1193dbfe28e2 | 96 | sendpacket[sendlen++] = MODE_COMMAND; |
pwheels | 0:1193dbfe28e2 | 97 | } |
pwheels | 0:1193dbfe28e2 | 98 | |
pwheels | 0:1193dbfe28e2 | 99 | // construct the command |
pwheels | 0:1193dbfe28e2 | 100 | sendpacket[sendlen++] = (uchar)(CMD_COMM | FUNCTSEL_RESET | USpeed[portnum]); |
pwheels | 0:1193dbfe28e2 | 101 | |
pwheels | 0:1193dbfe28e2 | 102 | // flush the buffers |
pwheels | 0:1193dbfe28e2 | 103 | FlushCOM(portnum); |
pwheels | 0:1193dbfe28e2 | 104 | |
pwheels | 0:1193dbfe28e2 | 105 | // send the packet |
pwheels | 0:1193dbfe28e2 | 106 | if (WriteCOM(portnum,sendlen,sendpacket)) |
pwheels | 0:1193dbfe28e2 | 107 | { |
pwheels | 0:1193dbfe28e2 | 108 | // read back the 1 byte response |
pwheels | 0:1193dbfe28e2 | 109 | if (ReadCOM(portnum,1,readbuffer) == 1) |
pwheels | 0:1193dbfe28e2 | 110 | { |
pwheels | 0:1193dbfe28e2 | 111 | // make sure this byte looks like a reset byte |
pwheels | 0:1193dbfe28e2 | 112 | if (((readbuffer[0] & RB_RESET_MASK) == RB_PRESENCE) || |
pwheels | 0:1193dbfe28e2 | 113 | ((readbuffer[0] & RB_RESET_MASK) == RB_ALARMPRESENCE)) |
pwheels | 0:1193dbfe28e2 | 114 | { |
pwheels | 0:1193dbfe28e2 | 115 | // check if programming voltage available |
pwheels | 0:1193dbfe28e2 | 116 | ProgramAvailable[portnum] = ((readbuffer[0] & 0x20) == 0x20); |
pwheels | 0:1193dbfe28e2 | 117 | UVersion[portnum] = (readbuffer[0] & VERSION_MASK); |
pwheels | 0:1193dbfe28e2 | 118 | |
pwheels | 0:1193dbfe28e2 | 119 | // only check for alarm pulse if DS2404 present and not using THE LINK |
pwheels | 0:1193dbfe28e2 | 120 | if ((FAMILY_CODE_04_ALARM_TOUCHRESET_COMPLIANCE) && |
pwheels | 0:1193dbfe28e2 | 121 | (UVersion[portnum] != VER_LINK)) |
pwheels | 0:1193dbfe28e2 | 122 | { |
pwheels | 0:1193dbfe28e2 | 123 | msDelay(5); // delay 5 ms to give DS1994 enough time |
pwheels | 0:1193dbfe28e2 | 124 | FlushCOM(portnum); |
pwheels | 0:1193dbfe28e2 | 125 | } |
pwheels | 0:1193dbfe28e2 | 126 | return TRUE; |
pwheels | 0:1193dbfe28e2 | 127 | } |
pwheels | 0:1193dbfe28e2 | 128 | else |
pwheels | 0:1193dbfe28e2 | 129 | OWERROR(OWERROR_RESET_FAILED); |
pwheels | 0:1193dbfe28e2 | 130 | |
pwheels | 0:1193dbfe28e2 | 131 | } |
pwheels | 0:1193dbfe28e2 | 132 | else |
pwheels | 0:1193dbfe28e2 | 133 | OWERROR(OWERROR_READCOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 134 | } |
pwheels | 0:1193dbfe28e2 | 135 | else |
pwheels | 0:1193dbfe28e2 | 136 | OWERROR(OWERROR_WRITECOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 137 | |
pwheels | 0:1193dbfe28e2 | 138 | // an error occured so re-sync with DS2480 |
pwheels | 0:1193dbfe28e2 | 139 | DS2480Detect(portnum); |
pwheels | 0:1193dbfe28e2 | 140 | |
pwheels | 0:1193dbfe28e2 | 141 | return FALSE; |
pwheels | 0:1193dbfe28e2 | 142 | } |
pwheels | 0:1193dbfe28e2 | 143 | |
pwheels | 0:1193dbfe28e2 | 144 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 145 | // Send 1 bit of communication to the 1-Wire Net and return the |
pwheels | 0:1193dbfe28e2 | 146 | // result 1 bit read from the 1-Wire Net. The parameter 'sendbit' |
pwheels | 0:1193dbfe28e2 | 147 | // least significant bit is used and the least significant bit |
pwheels | 0:1193dbfe28e2 | 148 | // of the result is the return bit. |
pwheels | 0:1193dbfe28e2 | 149 | // |
pwheels | 0:1193dbfe28e2 | 150 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 151 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 152 | // 'sendbit' - the least significant bit is the bit to send |
pwheels | 0:1193dbfe28e2 | 153 | // |
pwheels | 0:1193dbfe28e2 | 154 | // Returns: 0: 0 bit read from sendbit |
pwheels | 0:1193dbfe28e2 | 155 | // 1: 1 bit read from sendbit |
pwheels | 0:1193dbfe28e2 | 156 | // |
pwheels | 0:1193dbfe28e2 | 157 | SMALLINT owTouchBit(int portnum, SMALLINT sendbit) |
pwheels | 0:1193dbfe28e2 | 158 | { |
pwheels | 0:1193dbfe28e2 | 159 | uchar readbuffer[10],sendpacket[10]; |
pwheels | 0:1193dbfe28e2 | 160 | uchar sendlen=0; |
pwheels | 0:1193dbfe28e2 | 161 | |
pwheels | 0:1193dbfe28e2 | 162 | // make sure normal level |
pwheels | 0:1193dbfe28e2 | 163 | owLevel(portnum,MODE_NORMAL); |
pwheels | 0:1193dbfe28e2 | 164 | |
pwheels | 0:1193dbfe28e2 | 165 | // check if correct mode |
pwheels | 0:1193dbfe28e2 | 166 | if (UMode[portnum] != MODSEL_COMMAND) |
pwheels | 0:1193dbfe28e2 | 167 | { |
pwheels | 0:1193dbfe28e2 | 168 | UMode[portnum] = MODSEL_COMMAND; |
pwheels | 0:1193dbfe28e2 | 169 | sendpacket[sendlen++] = MODE_COMMAND; |
pwheels | 0:1193dbfe28e2 | 170 | } |
pwheels | 0:1193dbfe28e2 | 171 | |
pwheels | 0:1193dbfe28e2 | 172 | // construct the command |
pwheels | 0:1193dbfe28e2 | 173 | sendpacket[sendlen] = (sendbit != 0) ? BITPOL_ONE : BITPOL_ZERO; |
pwheels | 0:1193dbfe28e2 | 174 | sendpacket[sendlen++] |= CMD_COMM | FUNCTSEL_BIT | USpeed[portnum]; |
pwheels | 0:1193dbfe28e2 | 175 | |
pwheels | 0:1193dbfe28e2 | 176 | // flush the buffers |
pwheels | 0:1193dbfe28e2 | 177 | FlushCOM(portnum); |
pwheels | 0:1193dbfe28e2 | 178 | |
pwheels | 0:1193dbfe28e2 | 179 | // send the packet |
pwheels | 0:1193dbfe28e2 | 180 | if (WriteCOM(portnum,sendlen,sendpacket)) |
pwheels | 0:1193dbfe28e2 | 181 | { |
pwheels | 0:1193dbfe28e2 | 182 | // read back the response |
pwheels | 0:1193dbfe28e2 | 183 | if (ReadCOM(portnum,1,readbuffer) == 1) |
pwheels | 0:1193dbfe28e2 | 184 | { |
pwheels | 0:1193dbfe28e2 | 185 | // interpret the response |
pwheels | 0:1193dbfe28e2 | 186 | if (((readbuffer[0] & 0xE0) == 0x80) && |
pwheels | 0:1193dbfe28e2 | 187 | ((readbuffer[0] & RB_BIT_MASK) == RB_BIT_ONE)) |
pwheels | 0:1193dbfe28e2 | 188 | return 1; |
pwheels | 0:1193dbfe28e2 | 189 | else |
pwheels | 0:1193dbfe28e2 | 190 | return 0; |
pwheels | 0:1193dbfe28e2 | 191 | } |
pwheels | 0:1193dbfe28e2 | 192 | else |
pwheels | 0:1193dbfe28e2 | 193 | OWERROR(OWERROR_READCOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 194 | } |
pwheels | 0:1193dbfe28e2 | 195 | else |
pwheels | 0:1193dbfe28e2 | 196 | OWERROR(OWERROR_WRITECOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 197 | |
pwheels | 0:1193dbfe28e2 | 198 | // an error occured so re-sync with DS2480 |
pwheels | 0:1193dbfe28e2 | 199 | DS2480Detect(portnum); |
pwheels | 0:1193dbfe28e2 | 200 | |
pwheels | 0:1193dbfe28e2 | 201 | return 0; |
pwheels | 0:1193dbfe28e2 | 202 | } |
pwheels | 0:1193dbfe28e2 | 203 | |
pwheels | 0:1193dbfe28e2 | 204 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 205 | // Send 8 bits of communication to the 1-Wire Net and verify that the |
pwheels | 0:1193dbfe28e2 | 206 | // 8 bits read from the 1-Wire Net is the same (write operation). |
pwheels | 0:1193dbfe28e2 | 207 | // The parameter 'sendbyte' least significant 8 bits are used. |
pwheels | 0:1193dbfe28e2 | 208 | // |
pwheels | 0:1193dbfe28e2 | 209 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 210 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 211 | // 'sendbyte' - 8 bits to send (least significant byte) |
pwheels | 0:1193dbfe28e2 | 212 | // |
pwheels | 0:1193dbfe28e2 | 213 | // Returns: TRUE: bytes written and echo was the same |
pwheels | 0:1193dbfe28e2 | 214 | // FALSE: echo was not the same |
pwheels | 0:1193dbfe28e2 | 215 | // |
pwheels | 0:1193dbfe28e2 | 216 | SMALLINT owWriteByte(int portnum, SMALLINT sendbyte) |
pwheels | 0:1193dbfe28e2 | 217 | { |
pwheels | 0:1193dbfe28e2 | 218 | return (owTouchByte(portnum,sendbyte) == (0xff & sendbyte)) ? TRUE : FALSE; |
pwheels | 0:1193dbfe28e2 | 219 | } |
pwheels | 0:1193dbfe28e2 | 220 | |
pwheels | 0:1193dbfe28e2 | 221 | |
pwheels | 0:1193dbfe28e2 | 222 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 223 | // Send 8 bits of read communication to the 1-Wire Net and and return the |
pwheels | 0:1193dbfe28e2 | 224 | // result 8 bits read from the 1-Wire Net. |
pwheels | 0:1193dbfe28e2 | 225 | // |
pwheels | 0:1193dbfe28e2 | 226 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 227 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 228 | // |
pwheels | 0:1193dbfe28e2 | 229 | // Returns: 8 bits read from 1-Wire Net |
pwheels | 0:1193dbfe28e2 | 230 | // |
pwheels | 0:1193dbfe28e2 | 231 | SMALLINT owReadByte(int portnum) |
pwheels | 0:1193dbfe28e2 | 232 | { |
pwheels | 0:1193dbfe28e2 | 233 | return owTouchByte(portnum,(SMALLINT)0xFF); |
pwheels | 0:1193dbfe28e2 | 234 | } |
pwheels | 0:1193dbfe28e2 | 235 | |
pwheels | 0:1193dbfe28e2 | 236 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 237 | // Send 8 bits of communication to the 1-Wire Net and return the |
pwheels | 0:1193dbfe28e2 | 238 | // result 8 bits read from the 1-Wire Net. The parameter 'sendbyte' |
pwheels | 0:1193dbfe28e2 | 239 | // least significant 8 bits are used and the least significant 8 bits |
pwheels | 0:1193dbfe28e2 | 240 | // of the result is the return byte. |
pwheels | 0:1193dbfe28e2 | 241 | // |
pwheels | 0:1193dbfe28e2 | 242 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 243 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 244 | // 'sendbyte' - 8 bits to send (least significant byte) |
pwheels | 0:1193dbfe28e2 | 245 | // |
pwheels | 0:1193dbfe28e2 | 246 | // Returns: 8 bits read from sendbyte |
pwheels | 0:1193dbfe28e2 | 247 | // |
pwheels | 0:1193dbfe28e2 | 248 | SMALLINT owTouchByte(int portnum, SMALLINT sendbyte) |
pwheels | 0:1193dbfe28e2 | 249 | { |
pwheels | 0:1193dbfe28e2 | 250 | uchar readbuffer[10],sendpacket[10]; |
pwheels | 0:1193dbfe28e2 | 251 | uchar sendlen=0; |
pwheels | 0:1193dbfe28e2 | 252 | |
pwheels | 0:1193dbfe28e2 | 253 | // make sure normal level |
pwheels | 0:1193dbfe28e2 | 254 | owLevel(portnum,MODE_NORMAL); |
pwheels | 0:1193dbfe28e2 | 255 | |
pwheels | 0:1193dbfe28e2 | 256 | // check if correct mode |
pwheels | 0:1193dbfe28e2 | 257 | if (UMode[portnum] != MODSEL_DATA) |
pwheels | 0:1193dbfe28e2 | 258 | { |
pwheels | 0:1193dbfe28e2 | 259 | UMode[portnum] = MODSEL_DATA; |
pwheels | 0:1193dbfe28e2 | 260 | sendpacket[sendlen++] = MODE_DATA; |
pwheels | 0:1193dbfe28e2 | 261 | } |
pwheels | 0:1193dbfe28e2 | 262 | |
pwheels | 0:1193dbfe28e2 | 263 | // add the byte to send |
pwheels | 0:1193dbfe28e2 | 264 | sendpacket[sendlen++] = (uchar)sendbyte; |
pwheels | 0:1193dbfe28e2 | 265 | |
pwheels | 0:1193dbfe28e2 | 266 | // check for duplication of data that looks like COMMAND mode |
pwheels | 0:1193dbfe28e2 | 267 | if (sendbyte ==(SMALLINT)MODE_COMMAND) |
pwheels | 0:1193dbfe28e2 | 268 | sendpacket[sendlen++] = (uchar)sendbyte; |
pwheels | 0:1193dbfe28e2 | 269 | |
pwheels | 0:1193dbfe28e2 | 270 | // flush the buffers |
pwheels | 0:1193dbfe28e2 | 271 | FlushCOM(portnum); |
pwheels | 0:1193dbfe28e2 | 272 | |
pwheels | 0:1193dbfe28e2 | 273 | // send the packet |
pwheels | 0:1193dbfe28e2 | 274 | if (WriteCOM(portnum,sendlen,sendpacket)) |
pwheels | 0:1193dbfe28e2 | 275 | { |
pwheels | 0:1193dbfe28e2 | 276 | // read back the 1 byte response |
pwheels | 0:1193dbfe28e2 | 277 | if (ReadCOM(portnum,1,readbuffer) == 1) |
pwheels | 0:1193dbfe28e2 | 278 | { |
pwheels | 0:1193dbfe28e2 | 279 | if (dodebug) |
pwheels | 0:1193dbfe28e2 | 280 | printf("%02X ",readbuffer[0]);//?????????????? |
pwheels | 0:1193dbfe28e2 | 281 | |
pwheels | 0:1193dbfe28e2 | 282 | // return the response |
pwheels | 0:1193dbfe28e2 | 283 | return (int)readbuffer[0]; |
pwheels | 0:1193dbfe28e2 | 284 | } |
pwheels | 0:1193dbfe28e2 | 285 | else |
pwheels | 0:1193dbfe28e2 | 286 | OWERROR(OWERROR_READCOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 287 | } |
pwheels | 0:1193dbfe28e2 | 288 | else |
pwheels | 0:1193dbfe28e2 | 289 | OWERROR(OWERROR_WRITECOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 290 | |
pwheels | 0:1193dbfe28e2 | 291 | // an error occured so re-sync with DS2480 |
pwheels | 0:1193dbfe28e2 | 292 | DS2480Detect(portnum); |
pwheels | 0:1193dbfe28e2 | 293 | |
pwheels | 0:1193dbfe28e2 | 294 | return 0; |
pwheels | 0:1193dbfe28e2 | 295 | } |
pwheels | 0:1193dbfe28e2 | 296 | |
pwheels | 0:1193dbfe28e2 | 297 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 298 | // Set the 1-Wire Net communucation speed. |
pwheels | 0:1193dbfe28e2 | 299 | // |
pwheels | 0:1193dbfe28e2 | 300 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 301 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 302 | // 'new_speed' - new speed defined as |
pwheels | 0:1193dbfe28e2 | 303 | // MODE_NORMAL 0x00 |
pwheels | 0:1193dbfe28e2 | 304 | // MODE_OVERDRIVE 0x01 |
pwheels | 0:1193dbfe28e2 | 305 | // |
pwheels | 0:1193dbfe28e2 | 306 | // Returns: current 1-Wire Net speed |
pwheels | 0:1193dbfe28e2 | 307 | // |
pwheels | 0:1193dbfe28e2 | 308 | SMALLINT owSpeed(int portnum, SMALLINT new_speed) |
pwheels | 0:1193dbfe28e2 | 309 | { |
pwheels | 0:1193dbfe28e2 | 310 | uchar sendpacket[5]; |
pwheels | 0:1193dbfe28e2 | 311 | uchar sendlen=0; |
pwheels | 0:1193dbfe28e2 | 312 | uchar rt = FALSE; |
pwheels | 0:1193dbfe28e2 | 313 | |
pwheels | 0:1193dbfe28e2 | 314 | // check if change from current mode |
pwheels | 0:1193dbfe28e2 | 315 | if (((new_speed == MODE_OVERDRIVE) && |
pwheels | 0:1193dbfe28e2 | 316 | (USpeed[portnum] != SPEEDSEL_OD)) || |
pwheels | 0:1193dbfe28e2 | 317 | ((new_speed == MODE_NORMAL) && |
pwheels | 0:1193dbfe28e2 | 318 | (USpeed[portnum] != SPEEDSEL_FLEX))) |
pwheels | 0:1193dbfe28e2 | 319 | { |
pwheels | 0:1193dbfe28e2 | 320 | if (new_speed == MODE_OVERDRIVE) |
pwheels | 0:1193dbfe28e2 | 321 | { |
pwheels | 0:1193dbfe28e2 | 322 | // check for unsupported mode in THE LINK |
pwheels | 0:1193dbfe28e2 | 323 | if (UVersion[portnum] == VER_LINK) |
pwheels | 0:1193dbfe28e2 | 324 | { |
pwheels | 0:1193dbfe28e2 | 325 | OWERROR(OWERROR_FUNC_NOT_SUP); |
pwheels | 0:1193dbfe28e2 | 326 | // if overdrive then switch to higher baud |
pwheels | 0:1193dbfe28e2 | 327 | } |
pwheels | 0:1193dbfe28e2 | 328 | else |
pwheels | 0:1193dbfe28e2 | 329 | { |
pwheels | 0:1193dbfe28e2 | 330 | if (DS2480ChangeBaud(portnum,MAX_BAUD) == MAX_BAUD) |
pwheels | 0:1193dbfe28e2 | 331 | { |
pwheels | 0:1193dbfe28e2 | 332 | USpeed[portnum] = SPEEDSEL_OD; |
pwheels | 0:1193dbfe28e2 | 333 | rt = TRUE; |
pwheels | 0:1193dbfe28e2 | 334 | } |
pwheels | 0:1193dbfe28e2 | 335 | } |
pwheels | 0:1193dbfe28e2 | 336 | } |
pwheels | 0:1193dbfe28e2 | 337 | else if (new_speed == MODE_NORMAL) |
pwheels | 0:1193dbfe28e2 | 338 | { |
pwheels | 0:1193dbfe28e2 | 339 | // else normal so set to 9600 baud |
pwheels | 0:1193dbfe28e2 | 340 | if (DS2480ChangeBaud(portnum,PARMSET_9600) == PARMSET_9600) |
pwheels | 0:1193dbfe28e2 | 341 | { |
pwheels | 0:1193dbfe28e2 | 342 | USpeed[portnum] = SPEEDSEL_FLEX; |
pwheels | 0:1193dbfe28e2 | 343 | rt = TRUE; |
pwheels | 0:1193dbfe28e2 | 344 | } |
pwheels | 0:1193dbfe28e2 | 345 | |
pwheels | 0:1193dbfe28e2 | 346 | } |
pwheels | 0:1193dbfe28e2 | 347 | |
pwheels | 0:1193dbfe28e2 | 348 | // if baud rate is set correctly then change DS2480 speed |
pwheels | 0:1193dbfe28e2 | 349 | if (rt) |
pwheels | 0:1193dbfe28e2 | 350 | { |
pwheels | 0:1193dbfe28e2 | 351 | // check if correct mode |
pwheels | 0:1193dbfe28e2 | 352 | if (UMode[portnum] != MODSEL_COMMAND) |
pwheels | 0:1193dbfe28e2 | 353 | { |
pwheels | 0:1193dbfe28e2 | 354 | UMode[portnum] = MODSEL_COMMAND; |
pwheels | 0:1193dbfe28e2 | 355 | sendpacket[sendlen++] = MODE_COMMAND; |
pwheels | 0:1193dbfe28e2 | 356 | } |
pwheels | 0:1193dbfe28e2 | 357 | |
pwheels | 0:1193dbfe28e2 | 358 | // proceed to set the DS2480 communication speed |
pwheels | 0:1193dbfe28e2 | 359 | sendpacket[sendlen++] = CMD_COMM | FUNCTSEL_SEARCHOFF | USpeed[portnum]; |
pwheels | 0:1193dbfe28e2 | 360 | |
pwheels | 0:1193dbfe28e2 | 361 | // send the packet |
pwheels | 0:1193dbfe28e2 | 362 | if (!WriteCOM(portnum,sendlen,sendpacket)) |
pwheels | 0:1193dbfe28e2 | 363 | { |
pwheels | 0:1193dbfe28e2 | 364 | OWERROR(OWERROR_WRITECOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 365 | rt = FALSE; |
pwheels | 0:1193dbfe28e2 | 366 | // lost communication with DS2480 then reset |
pwheels | 0:1193dbfe28e2 | 367 | DS2480Detect(portnum); |
pwheels | 0:1193dbfe28e2 | 368 | } |
pwheels | 0:1193dbfe28e2 | 369 | } |
pwheels | 0:1193dbfe28e2 | 370 | } |
pwheels | 0:1193dbfe28e2 | 371 | |
pwheels | 0:1193dbfe28e2 | 372 | // return the current speed |
pwheels | 0:1193dbfe28e2 | 373 | return (USpeed[portnum] == SPEEDSEL_OD) ? MODE_OVERDRIVE : MODE_NORMAL; |
pwheels | 0:1193dbfe28e2 | 374 | } |
pwheels | 0:1193dbfe28e2 | 375 | |
pwheels | 0:1193dbfe28e2 | 376 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 377 | // Set the 1-Wire Net line level. The values for new_level are |
pwheels | 0:1193dbfe28e2 | 378 | // as follows: |
pwheels | 0:1193dbfe28e2 | 379 | // |
pwheels | 0:1193dbfe28e2 | 380 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 381 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 382 | // 'new_level' - new level defined as |
pwheels | 0:1193dbfe28e2 | 383 | // MODE_NORMAL 0x00 |
pwheels | 0:1193dbfe28e2 | 384 | // MODE_STRONG5 0x02 |
pwheels | 0:1193dbfe28e2 | 385 | // MODE_PROGRAM 0x04 |
pwheels | 0:1193dbfe28e2 | 386 | // MODE_BREAK 0x08 (not supported) |
pwheels | 0:1193dbfe28e2 | 387 | // |
pwheels | 0:1193dbfe28e2 | 388 | // Returns: current 1-Wire Net level |
pwheels | 0:1193dbfe28e2 | 389 | // |
pwheels | 0:1193dbfe28e2 | 390 | SMALLINT owLevel(int portnum, SMALLINT new_level) |
pwheels | 0:1193dbfe28e2 | 391 | { |
pwheels | 0:1193dbfe28e2 | 392 | uchar sendpacket[10],readbuffer[10]; |
pwheels | 0:1193dbfe28e2 | 393 | uchar sendlen=0; |
pwheels | 0:1193dbfe28e2 | 394 | uchar rt=FALSE; |
pwheels | 0:1193dbfe28e2 | 395 | |
pwheels | 0:1193dbfe28e2 | 396 | // check if need to change level |
pwheels | 0:1193dbfe28e2 | 397 | if (new_level != ULevel[portnum]) |
pwheels | 0:1193dbfe28e2 | 398 | { |
pwheels | 0:1193dbfe28e2 | 399 | // check if correct mode |
pwheels | 0:1193dbfe28e2 | 400 | if (UMode[portnum] != MODSEL_COMMAND) |
pwheels | 0:1193dbfe28e2 | 401 | { |
pwheels | 0:1193dbfe28e2 | 402 | UMode[portnum] = MODSEL_COMMAND; |
pwheels | 0:1193dbfe28e2 | 403 | sendpacket[sendlen++] = MODE_COMMAND; |
pwheels | 0:1193dbfe28e2 | 404 | } |
pwheels | 0:1193dbfe28e2 | 405 | |
pwheels | 0:1193dbfe28e2 | 406 | // check if just putting back to normal |
pwheels | 0:1193dbfe28e2 | 407 | if (new_level == MODE_NORMAL) |
pwheels | 0:1193dbfe28e2 | 408 | { |
pwheels | 0:1193dbfe28e2 | 409 | // stop pulse command |
pwheels | 0:1193dbfe28e2 | 410 | sendpacket[sendlen++] = MODE_STOP_PULSE; |
pwheels | 0:1193dbfe28e2 | 411 | |
pwheels | 0:1193dbfe28e2 | 412 | // add the command to begin the pulse WITHOUT prime |
pwheels | 0:1193dbfe28e2 | 413 | sendpacket[sendlen++] = CMD_COMM | FUNCTSEL_CHMOD | SPEEDSEL_PULSE | BITPOL_5V | PRIME5V_FALSE; |
pwheels | 0:1193dbfe28e2 | 414 | |
pwheels | 0:1193dbfe28e2 | 415 | // stop pulse command |
pwheels | 0:1193dbfe28e2 | 416 | sendpacket[sendlen++] = MODE_STOP_PULSE; |
pwheels | 0:1193dbfe28e2 | 417 | |
pwheels | 0:1193dbfe28e2 | 418 | // flush the buffers |
pwheels | 0:1193dbfe28e2 | 419 | FlushCOM(portnum); |
pwheels | 0:1193dbfe28e2 | 420 | |
pwheels | 0:1193dbfe28e2 | 421 | // send the packet |
pwheels | 0:1193dbfe28e2 | 422 | if (WriteCOM(portnum,sendlen,sendpacket)) |
pwheels | 0:1193dbfe28e2 | 423 | { |
pwheels | 0:1193dbfe28e2 | 424 | // read back the 2 byte response |
pwheels | 0:1193dbfe28e2 | 425 | if (ReadCOM(portnum,2,readbuffer) == 2) |
pwheels | 0:1193dbfe28e2 | 426 | { |
pwheels | 0:1193dbfe28e2 | 427 | // check response byte |
pwheels | 0:1193dbfe28e2 | 428 | if (((readbuffer[0] & 0xE0) == 0xE0) && |
pwheels | 0:1193dbfe28e2 | 429 | ((readbuffer[1] & 0xE0) == 0xE0)) |
pwheels | 0:1193dbfe28e2 | 430 | { |
pwheels | 0:1193dbfe28e2 | 431 | rt = TRUE; |
pwheels | 0:1193dbfe28e2 | 432 | ULevel[portnum] = MODE_NORMAL; |
pwheels | 0:1193dbfe28e2 | 433 | } |
pwheels | 0:1193dbfe28e2 | 434 | } |
pwheels | 0:1193dbfe28e2 | 435 | else |
pwheels | 0:1193dbfe28e2 | 436 | OWERROR(OWERROR_READCOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 437 | } |
pwheels | 0:1193dbfe28e2 | 438 | else |
pwheels | 0:1193dbfe28e2 | 439 | OWERROR(OWERROR_WRITECOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 440 | } |
pwheels | 0:1193dbfe28e2 | 441 | // set new level |
pwheels | 0:1193dbfe28e2 | 442 | else |
pwheels | 0:1193dbfe28e2 | 443 | { |
pwheels | 0:1193dbfe28e2 | 444 | // strong 5 volts |
pwheels | 0:1193dbfe28e2 | 445 | if (new_level == MODE_STRONG5) |
pwheels | 0:1193dbfe28e2 | 446 | { |
pwheels | 0:1193dbfe28e2 | 447 | // set the SPUD time value |
pwheels | 0:1193dbfe28e2 | 448 | sendpacket[sendlen++] = CMD_CONFIG | PARMSEL_5VPULSE | PARMSET_infinite; |
pwheels | 0:1193dbfe28e2 | 449 | // add the command to begin the pulse |
pwheels | 0:1193dbfe28e2 | 450 | sendpacket[sendlen++] = CMD_COMM | FUNCTSEL_CHMOD | SPEEDSEL_PULSE | BITPOL_5V; |
pwheels | 0:1193dbfe28e2 | 451 | } |
pwheels | 0:1193dbfe28e2 | 452 | // 12 volts |
pwheels | 0:1193dbfe28e2 | 453 | else if (new_level == MODE_PROGRAM) |
pwheels | 0:1193dbfe28e2 | 454 | { |
pwheels | 0:1193dbfe28e2 | 455 | // check if programming voltage available |
pwheels | 0:1193dbfe28e2 | 456 | if (!ProgramAvailable[portnum]) |
pwheels | 0:1193dbfe28e2 | 457 | return MODE_NORMAL; |
pwheels | 0:1193dbfe28e2 | 458 | |
pwheels | 0:1193dbfe28e2 | 459 | // set the PPD time value |
pwheels | 0:1193dbfe28e2 | 460 | sendpacket[sendlen++] = CMD_CONFIG | PARMSEL_12VPULSE | PARMSET_infinite; |
pwheels | 0:1193dbfe28e2 | 461 | // add the command to begin the pulse |
pwheels | 0:1193dbfe28e2 | 462 | sendpacket[sendlen++] = CMD_COMM | FUNCTSEL_CHMOD | SPEEDSEL_PULSE | BITPOL_12V; |
pwheels | 0:1193dbfe28e2 | 463 | } |
pwheels | 0:1193dbfe28e2 | 464 | |
pwheels | 0:1193dbfe28e2 | 465 | // flush the buffers |
pwheels | 0:1193dbfe28e2 | 466 | FlushCOM(portnum); |
pwheels | 0:1193dbfe28e2 | 467 | |
pwheels | 0:1193dbfe28e2 | 468 | // send the packet |
pwheels | 0:1193dbfe28e2 | 469 | if (WriteCOM(portnum,sendlen,sendpacket)) |
pwheels | 0:1193dbfe28e2 | 470 | { |
pwheels | 0:1193dbfe28e2 | 471 | // read back the 1 byte response from setting time limit |
pwheels | 0:1193dbfe28e2 | 472 | if (ReadCOM(portnum,1,readbuffer) == 1) |
pwheels | 0:1193dbfe28e2 | 473 | { |
pwheels | 0:1193dbfe28e2 | 474 | // check response byte |
pwheels | 0:1193dbfe28e2 | 475 | if ((readbuffer[0] & 0x81) == 0) |
pwheels | 0:1193dbfe28e2 | 476 | { |
pwheels | 0:1193dbfe28e2 | 477 | ULevel[portnum] = new_level; |
pwheels | 0:1193dbfe28e2 | 478 | rt = TRUE; |
pwheels | 0:1193dbfe28e2 | 479 | } |
pwheels | 0:1193dbfe28e2 | 480 | } |
pwheels | 0:1193dbfe28e2 | 481 | else |
pwheels | 0:1193dbfe28e2 | 482 | OWERROR(OWERROR_READCOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 483 | } |
pwheels | 0:1193dbfe28e2 | 484 | else |
pwheels | 0:1193dbfe28e2 | 485 | OWERROR(OWERROR_WRITECOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 486 | } |
pwheels | 0:1193dbfe28e2 | 487 | |
pwheels | 0:1193dbfe28e2 | 488 | // if lost communication with DS2480 then reset |
pwheels | 0:1193dbfe28e2 | 489 | if (rt != TRUE) |
pwheels | 0:1193dbfe28e2 | 490 | DS2480Detect(portnum); |
pwheels | 0:1193dbfe28e2 | 491 | } |
pwheels | 0:1193dbfe28e2 | 492 | |
pwheels | 0:1193dbfe28e2 | 493 | // return the current level |
pwheels | 0:1193dbfe28e2 | 494 | return ULevel[portnum]; |
pwheels | 0:1193dbfe28e2 | 495 | } |
pwheels | 0:1193dbfe28e2 | 496 | |
pwheels | 0:1193dbfe28e2 | 497 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 498 | // This procedure creates a fixed 480 microseconds 12 volt pulse |
pwheels | 0:1193dbfe28e2 | 499 | // on the 1-Wire Net for programming EPROM iButtons. |
pwheels | 0:1193dbfe28e2 | 500 | // |
pwheels | 0:1193dbfe28e2 | 501 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 502 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 503 | // |
pwheels | 0:1193dbfe28e2 | 504 | // Returns: TRUE successful |
pwheels | 0:1193dbfe28e2 | 505 | // FALSE program voltage not available |
pwheels | 0:1193dbfe28e2 | 506 | // |
pwheels | 0:1193dbfe28e2 | 507 | SMALLINT owProgramPulse(int portnum) |
pwheels | 0:1193dbfe28e2 | 508 | { |
pwheels | 0:1193dbfe28e2 | 509 | uchar sendpacket[10],readbuffer[10]; |
pwheels | 0:1193dbfe28e2 | 510 | uchar sendlen=0; |
pwheels | 0:1193dbfe28e2 | 511 | |
pwheels | 0:1193dbfe28e2 | 512 | // check if programming voltage available |
pwheels | 0:1193dbfe28e2 | 513 | if (!ProgramAvailable[portnum]) |
pwheels | 0:1193dbfe28e2 | 514 | return FALSE; |
pwheels | 0:1193dbfe28e2 | 515 | |
pwheels | 0:1193dbfe28e2 | 516 | // make sure normal level |
pwheels | 0:1193dbfe28e2 | 517 | owLevel(portnum,MODE_NORMAL); |
pwheels | 0:1193dbfe28e2 | 518 | |
pwheels | 0:1193dbfe28e2 | 519 | // check if correct mode |
pwheels | 0:1193dbfe28e2 | 520 | if (UMode[portnum] != MODSEL_COMMAND) |
pwheels | 0:1193dbfe28e2 | 521 | { |
pwheels | 0:1193dbfe28e2 | 522 | UMode[portnum] = MODSEL_COMMAND; |
pwheels | 0:1193dbfe28e2 | 523 | sendpacket[sendlen++] = MODE_COMMAND; |
pwheels | 0:1193dbfe28e2 | 524 | } |
pwheels | 0:1193dbfe28e2 | 525 | |
pwheels | 0:1193dbfe28e2 | 526 | // set the SPUD time value |
pwheels | 0:1193dbfe28e2 | 527 | sendpacket[sendlen++] = CMD_CONFIG | PARMSEL_12VPULSE | PARMSET_512us; |
pwheels | 0:1193dbfe28e2 | 528 | |
pwheels | 0:1193dbfe28e2 | 529 | // pulse command |
pwheels | 0:1193dbfe28e2 | 530 | sendpacket[sendlen++] = CMD_COMM | FUNCTSEL_CHMOD | BITPOL_12V | SPEEDSEL_PULSE; |
pwheels | 0:1193dbfe28e2 | 531 | |
pwheels | 0:1193dbfe28e2 | 532 | // flush the buffers |
pwheels | 0:1193dbfe28e2 | 533 | FlushCOM(portnum); |
pwheels | 0:1193dbfe28e2 | 534 | |
pwheels | 0:1193dbfe28e2 | 535 | // send the packet |
pwheels | 0:1193dbfe28e2 | 536 | if (WriteCOM(portnum,sendlen,sendpacket)) |
pwheels | 0:1193dbfe28e2 | 537 | { |
pwheels | 0:1193dbfe28e2 | 538 | // read back the 2 byte response |
pwheels | 0:1193dbfe28e2 | 539 | if (ReadCOM(portnum,2,readbuffer) == 2) |
pwheels | 0:1193dbfe28e2 | 540 | { |
pwheels | 0:1193dbfe28e2 | 541 | // check response byte |
pwheels | 0:1193dbfe28e2 | 542 | if (((readbuffer[0] | CMD_CONFIG) == |
pwheels | 0:1193dbfe28e2 | 543 | (CMD_CONFIG | PARMSEL_12VPULSE | PARMSET_512us)) && |
pwheels | 0:1193dbfe28e2 | 544 | ((readbuffer[1] & 0xFC) == |
pwheels | 0:1193dbfe28e2 | 545 | (0xFC & (CMD_COMM | FUNCTSEL_CHMOD | BITPOL_12V | SPEEDSEL_PULSE)))) |
pwheels | 0:1193dbfe28e2 | 546 | return TRUE; |
pwheels | 0:1193dbfe28e2 | 547 | } |
pwheels | 0:1193dbfe28e2 | 548 | else |
pwheels | 0:1193dbfe28e2 | 549 | OWERROR(OWERROR_READCOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 550 | } |
pwheels | 0:1193dbfe28e2 | 551 | else |
pwheels | 0:1193dbfe28e2 | 552 | OWERROR(OWERROR_WRITECOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 553 | |
pwheels | 0:1193dbfe28e2 | 554 | // an error occured so re-sync with DS2480 |
pwheels | 0:1193dbfe28e2 | 555 | DS2480Detect(portnum); |
pwheels | 0:1193dbfe28e2 | 556 | |
pwheels | 0:1193dbfe28e2 | 557 | return FALSE; |
pwheels | 0:1193dbfe28e2 | 558 | } |
pwheels | 0:1193dbfe28e2 | 559 | |
pwheels | 0:1193dbfe28e2 | 560 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 561 | // Send 8 bits of communication to the 1-Wire Net and verify that the |
pwheels | 0:1193dbfe28e2 | 562 | // 8 bits read from the 1-Wire Net is the same (write operation). |
pwheels | 0:1193dbfe28e2 | 563 | // The parameter 'sendbyte' least significant 8 bits are used. After the |
pwheels | 0:1193dbfe28e2 | 564 | // 8 bits are sent change the level of the 1-Wire net. |
pwheels | 0:1193dbfe28e2 | 565 | // |
pwheels | 0:1193dbfe28e2 | 566 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 567 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 568 | // 'sendbyte' - 8 bits to send (least significant bit) |
pwheels | 0:1193dbfe28e2 | 569 | // |
pwheels | 0:1193dbfe28e2 | 570 | // Returns: TRUE: bytes written and echo was the same, strong pullup now on |
pwheels | 0:1193dbfe28e2 | 571 | // FALSE: echo was not the same |
pwheels | 0:1193dbfe28e2 | 572 | // |
pwheels | 0:1193dbfe28e2 | 573 | SMALLINT owWriteBytePower(int portnum, SMALLINT sendbyte) |
pwheels | 0:1193dbfe28e2 | 574 | { |
pwheels | 0:1193dbfe28e2 | 575 | uchar sendpacket[10],readbuffer[10]; |
pwheels | 0:1193dbfe28e2 | 576 | uchar sendlen=0; |
pwheels | 0:1193dbfe28e2 | 577 | uchar rt=FALSE; |
pwheels | 0:1193dbfe28e2 | 578 | uchar i, temp_byte; |
pwheels | 0:1193dbfe28e2 | 579 | |
pwheels | 0:1193dbfe28e2 | 580 | if (dodebug) |
pwheels | 0:1193dbfe28e2 | 581 | printf("P%02X ",sendbyte);//?????????????? |
pwheels | 0:1193dbfe28e2 | 582 | |
pwheels | 0:1193dbfe28e2 | 583 | // check if correct mode |
pwheels | 0:1193dbfe28e2 | 584 | if (UMode[portnum] != MODSEL_COMMAND) |
pwheels | 0:1193dbfe28e2 | 585 | { |
pwheels | 0:1193dbfe28e2 | 586 | UMode[portnum] = MODSEL_COMMAND; |
pwheels | 0:1193dbfe28e2 | 587 | sendpacket[sendlen++] = MODE_COMMAND; |
pwheels | 0:1193dbfe28e2 | 588 | } |
pwheels | 0:1193dbfe28e2 | 589 | |
pwheels | 0:1193dbfe28e2 | 590 | // set the SPUD time value |
pwheels | 0:1193dbfe28e2 | 591 | sendpacket[sendlen++] = CMD_CONFIG | PARMSEL_5VPULSE | PARMSET_infinite; |
pwheels | 0:1193dbfe28e2 | 592 | |
pwheels | 0:1193dbfe28e2 | 593 | // construct the stream to include 8 bit commands with the last one |
pwheels | 0:1193dbfe28e2 | 594 | // enabling the strong-pullup |
pwheels | 0:1193dbfe28e2 | 595 | temp_byte = sendbyte; |
pwheels | 0:1193dbfe28e2 | 596 | for (i = 0; i < 8; i++) |
pwheels | 0:1193dbfe28e2 | 597 | { |
pwheels | 0:1193dbfe28e2 | 598 | sendpacket[sendlen++] = ((temp_byte & 0x01) ? BITPOL_ONE : BITPOL_ZERO) |
pwheels | 0:1193dbfe28e2 | 599 | | CMD_COMM | FUNCTSEL_BIT | USpeed[portnum] | |
pwheels | 0:1193dbfe28e2 | 600 | ((i == 7) ? PRIME5V_TRUE : PRIME5V_FALSE); |
pwheels | 0:1193dbfe28e2 | 601 | temp_byte >>= 1; |
pwheels | 0:1193dbfe28e2 | 602 | } |
pwheels | 0:1193dbfe28e2 | 603 | |
pwheels | 0:1193dbfe28e2 | 604 | // flush the buffers |
pwheels | 0:1193dbfe28e2 | 605 | FlushCOM(portnum); |
pwheels | 0:1193dbfe28e2 | 606 | |
pwheels | 0:1193dbfe28e2 | 607 | // send the packet |
pwheels | 0:1193dbfe28e2 | 608 | if (WriteCOM(portnum,sendlen,sendpacket)) |
pwheels | 0:1193dbfe28e2 | 609 | { |
pwheels | 0:1193dbfe28e2 | 610 | // read back the 9 byte response from setting time limit |
pwheels | 0:1193dbfe28e2 | 611 | if (ReadCOM(portnum,9,readbuffer) == 9) |
pwheels | 0:1193dbfe28e2 | 612 | { |
pwheels | 0:1193dbfe28e2 | 613 | // check response |
pwheels | 0:1193dbfe28e2 | 614 | if ((readbuffer[0] & 0x81) == 0) |
pwheels | 0:1193dbfe28e2 | 615 | { |
pwheels | 0:1193dbfe28e2 | 616 | // indicate the port is now at power delivery |
pwheels | 0:1193dbfe28e2 | 617 | ULevel[portnum] = MODE_STRONG5; |
pwheels | 0:1193dbfe28e2 | 618 | |
pwheels | 0:1193dbfe28e2 | 619 | // reconstruct the echo byte |
pwheels | 0:1193dbfe28e2 | 620 | temp_byte = 0; |
pwheels | 0:1193dbfe28e2 | 621 | for (i = 0; i < 8; i++) |
pwheels | 0:1193dbfe28e2 | 622 | { |
pwheels | 0:1193dbfe28e2 | 623 | temp_byte >>= 1; |
pwheels | 0:1193dbfe28e2 | 624 | temp_byte |= (readbuffer[i + 1] & 0x01) ? 0x80 : 0; |
pwheels | 0:1193dbfe28e2 | 625 | } |
pwheels | 0:1193dbfe28e2 | 626 | |
pwheels | 0:1193dbfe28e2 | 627 | if (temp_byte == sendbyte) |
pwheels | 0:1193dbfe28e2 | 628 | rt = TRUE; |
pwheels | 0:1193dbfe28e2 | 629 | } |
pwheels | 0:1193dbfe28e2 | 630 | } |
pwheels | 0:1193dbfe28e2 | 631 | else |
pwheels | 0:1193dbfe28e2 | 632 | OWERROR(OWERROR_READCOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 633 | } |
pwheels | 0:1193dbfe28e2 | 634 | else |
pwheels | 0:1193dbfe28e2 | 635 | OWERROR(OWERROR_WRITECOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 636 | |
pwheels | 0:1193dbfe28e2 | 637 | // if lost communication with DS2480 then reset |
pwheels | 0:1193dbfe28e2 | 638 | if (rt != TRUE) |
pwheels | 0:1193dbfe28e2 | 639 | DS2480Detect(portnum); |
pwheels | 0:1193dbfe28e2 | 640 | |
pwheels | 0:1193dbfe28e2 | 641 | return rt; |
pwheels | 0:1193dbfe28e2 | 642 | } |
pwheels | 0:1193dbfe28e2 | 643 | |
pwheels | 0:1193dbfe28e2 | 644 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 645 | // Send 8 bits of communication to the 1-Wire Net and verify that the |
pwheels | 0:1193dbfe28e2 | 646 | // 8 bits read from the 1-Wire Net is the same (write operation). |
pwheels | 0:1193dbfe28e2 | 647 | // The parameter 'sendbyte' least significant 8 bits are used. After the |
pwheels | 0:1193dbfe28e2 | 648 | // 8 bits are sent change the level of the 1-Wire net. |
pwheels | 0:1193dbfe28e2 | 649 | // |
pwheels | 0:1193dbfe28e2 | 650 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 651 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 652 | // 'sendbyte' - 8 bits to send (least significant bit) |
pwheels | 0:1193dbfe28e2 | 653 | // |
pwheels | 0:1193dbfe28e2 | 654 | // Returns: TRUE: bytes written and echo was the same, strong pullup now on |
pwheels | 0:1193dbfe28e2 | 655 | // FALSE: echo was not the same |
pwheels | 0:1193dbfe28e2 | 656 | // |
pwheels | 0:1193dbfe28e2 | 657 | SMALLINT owReadBytePower(int portnum) |
pwheels | 0:1193dbfe28e2 | 658 | { |
pwheels | 0:1193dbfe28e2 | 659 | uchar sendpacket[10],readbuffer[10]; |
pwheels | 0:1193dbfe28e2 | 660 | uchar sendlen=0; |
pwheels | 0:1193dbfe28e2 | 661 | uchar rt=FALSE; |
pwheels | 0:1193dbfe28e2 | 662 | uchar i, temp_byte; |
pwheels | 0:1193dbfe28e2 | 663 | |
pwheels | 0:1193dbfe28e2 | 664 | // check if correct mode |
pwheels | 0:1193dbfe28e2 | 665 | if (UMode[portnum] != MODSEL_COMMAND) |
pwheels | 0:1193dbfe28e2 | 666 | { |
pwheels | 0:1193dbfe28e2 | 667 | UMode[portnum] = MODSEL_COMMAND; |
pwheels | 0:1193dbfe28e2 | 668 | sendpacket[sendlen++] = MODE_COMMAND; |
pwheels | 0:1193dbfe28e2 | 669 | } |
pwheels | 0:1193dbfe28e2 | 670 | |
pwheels | 0:1193dbfe28e2 | 671 | // set the SPUD time value |
pwheels | 0:1193dbfe28e2 | 672 | sendpacket[sendlen++] = CMD_CONFIG | PARMSEL_5VPULSE | PARMSET_infinite; |
pwheels | 0:1193dbfe28e2 | 673 | |
pwheels | 0:1193dbfe28e2 | 674 | // construct the stream to include 8 bit commands with the last one |
pwheels | 0:1193dbfe28e2 | 675 | // enabling the strong-pullup |
pwheels | 0:1193dbfe28e2 | 676 | temp_byte = 0xFF; |
pwheels | 0:1193dbfe28e2 | 677 | for (i = 0; i < 8; i++) |
pwheels | 0:1193dbfe28e2 | 678 | { |
pwheels | 0:1193dbfe28e2 | 679 | sendpacket[sendlen++] = ((temp_byte & 0x01) ? BITPOL_ONE : BITPOL_ZERO) |
pwheels | 0:1193dbfe28e2 | 680 | | CMD_COMM | FUNCTSEL_BIT | USpeed[portnum] | |
pwheels | 0:1193dbfe28e2 | 681 | ((i == 7) ? PRIME5V_TRUE : PRIME5V_FALSE); |
pwheels | 0:1193dbfe28e2 | 682 | temp_byte >>= 1; |
pwheels | 0:1193dbfe28e2 | 683 | } |
pwheels | 0:1193dbfe28e2 | 684 | |
pwheels | 0:1193dbfe28e2 | 685 | // flush the buffers |
pwheels | 0:1193dbfe28e2 | 686 | FlushCOM(portnum); |
pwheels | 0:1193dbfe28e2 | 687 | |
pwheels | 0:1193dbfe28e2 | 688 | // send the packet |
pwheels | 0:1193dbfe28e2 | 689 | if (WriteCOM(portnum,sendlen,sendpacket)) |
pwheels | 0:1193dbfe28e2 | 690 | { |
pwheels | 0:1193dbfe28e2 | 691 | // read back the 9 byte response from setting time limit |
pwheels | 0:1193dbfe28e2 | 692 | if (ReadCOM(portnum,9,readbuffer) == 9) |
pwheels | 0:1193dbfe28e2 | 693 | { |
pwheels | 0:1193dbfe28e2 | 694 | // check response |
pwheels | 0:1193dbfe28e2 | 695 | if ((readbuffer[0] & 0x81) == 0) |
pwheels | 0:1193dbfe28e2 | 696 | { |
pwheels | 0:1193dbfe28e2 | 697 | // indicate the port is now at power delivery |
pwheels | 0:1193dbfe28e2 | 698 | ULevel[portnum] = MODE_STRONG5; |
pwheels | 0:1193dbfe28e2 | 699 | |
pwheels | 0:1193dbfe28e2 | 700 | // reconstruct the return byte |
pwheels | 0:1193dbfe28e2 | 701 | temp_byte = 0; |
pwheels | 0:1193dbfe28e2 | 702 | for (i = 0; i < 8; i++) |
pwheels | 0:1193dbfe28e2 | 703 | { |
pwheels | 0:1193dbfe28e2 | 704 | temp_byte >>= 1; |
pwheels | 0:1193dbfe28e2 | 705 | temp_byte |= (readbuffer[i + 1] & 0x01) ? 0x80 : 0; |
pwheels | 0:1193dbfe28e2 | 706 | } |
pwheels | 0:1193dbfe28e2 | 707 | |
pwheels | 0:1193dbfe28e2 | 708 | rt = TRUE; |
pwheels | 0:1193dbfe28e2 | 709 | } |
pwheels | 0:1193dbfe28e2 | 710 | } |
pwheels | 0:1193dbfe28e2 | 711 | else |
pwheels | 0:1193dbfe28e2 | 712 | OWERROR(OWERROR_READCOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 713 | } |
pwheels | 0:1193dbfe28e2 | 714 | else |
pwheels | 0:1193dbfe28e2 | 715 | OWERROR(OWERROR_WRITECOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 716 | |
pwheels | 0:1193dbfe28e2 | 717 | // if lost communication with DS2480 then reset |
pwheels | 0:1193dbfe28e2 | 718 | if (rt != TRUE) |
pwheels | 0:1193dbfe28e2 | 719 | DS2480Detect(portnum); |
pwheels | 0:1193dbfe28e2 | 720 | |
pwheels | 0:1193dbfe28e2 | 721 | if (dodebug) |
pwheels | 0:1193dbfe28e2 | 722 | printf("PFF%02X ",temp_byte);//?????????????? |
pwheels | 0:1193dbfe28e2 | 723 | |
pwheels | 0:1193dbfe28e2 | 724 | return temp_byte; |
pwheels | 0:1193dbfe28e2 | 725 | } |
pwheels | 0:1193dbfe28e2 | 726 | |
pwheels | 0:1193dbfe28e2 | 727 | |
pwheels | 0:1193dbfe28e2 | 728 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 729 | // Send 1 bit of communication to the 1-Wire Net and verify that the |
pwheels | 0:1193dbfe28e2 | 730 | // response matches the 'applyPowerResponse' bit and apply power delivery |
pwheels | 0:1193dbfe28e2 | 731 | // to the 1-Wire net. Note that some implementations may apply the power |
pwheels | 0:1193dbfe28e2 | 732 | // first and then turn it off if the response is incorrect. |
pwheels | 0:1193dbfe28e2 | 733 | // |
pwheels | 0:1193dbfe28e2 | 734 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 735 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 736 | // 'applyPowerResponse' - 1 bit response to check, if correct then start |
pwheels | 0:1193dbfe28e2 | 737 | // power delivery |
pwheels | 0:1193dbfe28e2 | 738 | // |
pwheels | 0:1193dbfe28e2 | 739 | // Returns: TRUE: bit written and response correct, strong pullup now on |
pwheels | 0:1193dbfe28e2 | 740 | // FALSE: response incorrect |
pwheels | 0:1193dbfe28e2 | 741 | // |
pwheels | 0:1193dbfe28e2 | 742 | SMALLINT owReadBitPower(int portnum, SMALLINT applyPowerResponse) |
pwheels | 0:1193dbfe28e2 | 743 | { |
pwheels | 0:1193dbfe28e2 | 744 | uchar sendpacket[3],readbuffer[3]; |
pwheels | 0:1193dbfe28e2 | 745 | uchar sendlen=0; |
pwheels | 0:1193dbfe28e2 | 746 | uchar rt=FALSE; |
pwheels | 0:1193dbfe28e2 | 747 | |
pwheels | 0:1193dbfe28e2 | 748 | // check if correct mode |
pwheels | 0:1193dbfe28e2 | 749 | if (UMode[portnum] != MODSEL_COMMAND) |
pwheels | 0:1193dbfe28e2 | 750 | { |
pwheels | 0:1193dbfe28e2 | 751 | UMode[portnum] = MODSEL_COMMAND; |
pwheels | 0:1193dbfe28e2 | 752 | sendpacket[sendlen++] = MODE_COMMAND; |
pwheels | 0:1193dbfe28e2 | 753 | } |
pwheels | 0:1193dbfe28e2 | 754 | |
pwheels | 0:1193dbfe28e2 | 755 | // set the SPUD time value |
pwheels | 0:1193dbfe28e2 | 756 | sendpacket[sendlen++] = CMD_CONFIG | PARMSEL_5VPULSE | PARMSET_infinite; |
pwheels | 0:1193dbfe28e2 | 757 | |
pwheels | 0:1193dbfe28e2 | 758 | // enabling the strong-pullup after bit |
pwheels | 0:1193dbfe28e2 | 759 | sendpacket[sendlen++] = BITPOL_ONE |
pwheels | 0:1193dbfe28e2 | 760 | | CMD_COMM | FUNCTSEL_BIT | USpeed[portnum] | |
pwheels | 0:1193dbfe28e2 | 761 | PRIME5V_TRUE; |
pwheels | 0:1193dbfe28e2 | 762 | // flush the buffers |
pwheels | 0:1193dbfe28e2 | 763 | FlushCOM(portnum); |
pwheels | 0:1193dbfe28e2 | 764 | |
pwheels | 0:1193dbfe28e2 | 765 | // send the packet |
pwheels | 0:1193dbfe28e2 | 766 | if (WriteCOM(portnum,sendlen,sendpacket)) |
pwheels | 0:1193dbfe28e2 | 767 | { |
pwheels | 0:1193dbfe28e2 | 768 | // read back the 2 byte response from setting time limit |
pwheels | 0:1193dbfe28e2 | 769 | if (ReadCOM(portnum,2,readbuffer) == 2) |
pwheels | 0:1193dbfe28e2 | 770 | { |
pwheels | 0:1193dbfe28e2 | 771 | // check response to duration set |
pwheels | 0:1193dbfe28e2 | 772 | if ((readbuffer[0] & 0x81) == 0) |
pwheels | 0:1193dbfe28e2 | 773 | { |
pwheels | 0:1193dbfe28e2 | 774 | // indicate the port is now at power delivery |
pwheels | 0:1193dbfe28e2 | 775 | ULevel[portnum] = MODE_STRONG5; |
pwheels | 0:1193dbfe28e2 | 776 | |
pwheels | 0:1193dbfe28e2 | 777 | // check the response bit |
pwheels | 0:1193dbfe28e2 | 778 | if ((readbuffer[1] & 0x01) == applyPowerResponse) |
pwheels | 0:1193dbfe28e2 | 779 | rt = TRUE; |
pwheels | 0:1193dbfe28e2 | 780 | else |
pwheels | 0:1193dbfe28e2 | 781 | owLevel(portnum,MODE_NORMAL); |
pwheels | 0:1193dbfe28e2 | 782 | |
pwheels | 0:1193dbfe28e2 | 783 | return rt; |
pwheels | 0:1193dbfe28e2 | 784 | } |
pwheels | 0:1193dbfe28e2 | 785 | } |
pwheels | 0:1193dbfe28e2 | 786 | else |
pwheels | 0:1193dbfe28e2 | 787 | OWERROR(OWERROR_READCOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 788 | } |
pwheels | 0:1193dbfe28e2 | 789 | else |
pwheels | 0:1193dbfe28e2 | 790 | OWERROR(OWERROR_WRITECOM_FAILED); |
pwheels | 0:1193dbfe28e2 | 791 | |
pwheels | 0:1193dbfe28e2 | 792 | // if lost communication with DS2480 then reset |
pwheels | 0:1193dbfe28e2 | 793 | if (rt != TRUE) |
pwheels | 0:1193dbfe28e2 | 794 | DS2480Detect(portnum); |
pwheels | 0:1193dbfe28e2 | 795 | |
pwheels | 0:1193dbfe28e2 | 796 | return rt; |
pwheels | 0:1193dbfe28e2 | 797 | } |
pwheels | 0:1193dbfe28e2 | 798 | |
pwheels | 0:1193dbfe28e2 | 799 | |
pwheels | 0:1193dbfe28e2 | 800 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 801 | // This procedure indicates whether the adapter can deliver power. |
pwheels | 0:1193dbfe28e2 | 802 | // |
pwheels | 0:1193dbfe28e2 | 803 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 804 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 805 | // |
pwheels | 0:1193dbfe28e2 | 806 | // Returns: TRUE because all userial adapters have over drive. |
pwheels | 0:1193dbfe28e2 | 807 | // |
pwheels | 0:1193dbfe28e2 | 808 | SMALLINT owHasPowerDelivery(int portnum) |
pwheels | 0:1193dbfe28e2 | 809 | { |
pwheels | 0:1193dbfe28e2 | 810 | return TRUE; |
pwheels | 0:1193dbfe28e2 | 811 | } |
pwheels | 0:1193dbfe28e2 | 812 | |
pwheels | 0:1193dbfe28e2 | 813 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 814 | // This procedure indicates wether the adapter can deliver power. |
pwheels | 0:1193dbfe28e2 | 815 | // |
pwheels | 0:1193dbfe28e2 | 816 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 817 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 818 | // |
pwheels | 0:1193dbfe28e2 | 819 | // Returns: TRUE because all userial adapters have over drive. |
pwheels | 0:1193dbfe28e2 | 820 | // |
pwheels | 0:1193dbfe28e2 | 821 | SMALLINT owHasOverDrive(int portnum) |
pwheels | 0:1193dbfe28e2 | 822 | { |
pwheels | 0:1193dbfe28e2 | 823 | return TRUE; |
pwheels | 0:1193dbfe28e2 | 824 | } |
pwheels | 0:1193dbfe28e2 | 825 | //-------------------------------------------------------------------------- |
pwheels | 0:1193dbfe28e2 | 826 | // This procedure creates a fixed 480 microseconds 12 volt pulse |
pwheels | 0:1193dbfe28e2 | 827 | // on the 1-Wire Net for programming EPROM iButtons. |
pwheels | 0:1193dbfe28e2 | 828 | // |
pwheels | 0:1193dbfe28e2 | 829 | // 'portnum' - number 0 to MAX_PORTNUM-1. This number was provided to |
pwheels | 0:1193dbfe28e2 | 830 | // OpenCOM to indicate the port number. |
pwheels | 0:1193dbfe28e2 | 831 | // |
pwheels | 0:1193dbfe28e2 | 832 | // Returns: TRUE program volatage available |
pwheels | 0:1193dbfe28e2 | 833 | // FALSE program voltage not available |
pwheels | 0:1193dbfe28e2 | 834 | SMALLINT owHasProgramPulse(int portnum) |
pwheels | 0:1193dbfe28e2 | 835 | { |
pwheels | 0:1193dbfe28e2 | 836 | return ProgramAvailable[portnum]; |
pwheels | 0:1193dbfe28e2 | 837 | } |
pwheels | 0:1193dbfe28e2 | 838 |