Works now with Windows Visual Studio C++ too
[owTools.git] / windows / owTools / ownet.h
1 //---------------------------------------------------------------------------\r
2 // Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved.\r
3 //\r
4 // Permission is hereby granted, free of charge, to any person obtaining a\r
5 // copy of this software and associated documentation files (the "Software"),\r
6 // to deal in the Software without restriction, including without limitation\r
7 // the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
8 // and/or sell copies of the Software, and to permit persons to whom the\r
9 // Software is furnished to do so, subject to the following conditions:\r
10 //\r
11 // The above copyright notice and this permission notice shall be included\r
12 // in all copies or substantial portions of the Software.\r
13 //\r
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
15 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
16 // MERCHANTABILITY,  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r
17 // IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES\r
18 // OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\r
19 // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r
20 // OTHER DEALINGS IN THE SOFTWARE.\r
21 //\r
22 // Except as contained in this notice, the name of Dallas Semiconductor\r
23 // shall not be used except as stated in the Dallas Semiconductor\r
24 // Branding Policy.\r
25 //---------------------------------------------------------------------------\r
26 //\r
27 // ownet.h - Include file for 1-Wire Net library\r
28 //\r
29 // Version: 2.10\r
30 //\r
31 // History: 1.02 -> 1.03 Make sure uchar is not defined twice.\r
32 //          1.03 -> 2.00 Changed 'MLan' to 'ow'.\r
33 //          2.00 -> 2.01 Added error handling. Added circular-include check.\r
34 //          2.01 -> 2.10 Added raw memory error handling and SMALLINT\r
35 //          2.10 -> 3.00 Added memory bank functionality\r
36 //                       Added file I/O operations\r
37 //\r
38 \r
39 #ifndef OWNET_H\r
40 #define OWNET_H\r
41 \r
42 //--------------------------------------------------------------//\r
43 // Common Includes to ownet applications\r
44 //--------------------------------------------------------------//\r
45 #include <stdlib.h>\r
46 #include <stdint.h>\r
47 \r
48 \r
49 //--------------------------------------------------------------//\r
50 // Target Specific Information\r
51 //--------------------------------------------------------------//\r
52 //--------------------------------------------------------------//\r
53 // Handhelds (PalmOS, WinCE)\r
54 //--------------------------------------------------------------//\r
55 #ifdef __MC68K__\r
56    //MC68K is the type of processor in the PILOT\r
57    //Metrowerk's CodeWarrior defines this symbol\r
58    #include <string.h>\r
59    #ifndef strcmp\r
60       #include <StringMgr.h>\r
61       #define strcmp StrCompare\r
62    #endif\r
63    #include <file_struc.h>\r
64 #endif\r
65 \r
66 #ifdef _WIN32_WCE\r
67    //All of our projects had this flag defined by default (_WIN32_WCE),\r
68    //but I'm not 100% positive that this is _the_ definitive\r
69    //flag to use to identify a WinCE system.\r
70    #include "WinCElnk.h"\r
71    #ifndef FILE\r
72       #define FILE int\r
73       extern int sprintf(char *buffer, char *format,...);\r
74       extern void fprintf(FILE *fp, char *format,...);\r
75       extern void printf(char *format,...);\r
76    #endif\r
77 #endif\r
78 \r
79 #if !defined(_WIN32_WCE) && !defined(__MC68K__)\r
80    #include <stdio.h>\r
81 #endif\r
82 \r
83 #ifdef __C51__\r
84    #define FILE int\r
85    #define exit(c) return\r
86    typedef unsigned int ushort;\r
87    typedef unsigned long ulong;\r
88    #define SMALLINT uchar\r
89 #endif\r
90 \r
91 #ifdef __ICCMAXQ__\r
92    #define FILE int\r
93    #define stdout 0\r
94    #define stdin  1\r
95    #define stderr 2\r
96    typedef unsigned int ushort;\r
97    typedef unsigned long ulong;\r
98    #define SMALLINT short\r
99    #define main micro_main\r
100    #define real_main main\r
101    #define SMALL_MEMORY_TARGET\r
102 #endif\r
103 \r
104 \r
105 //--------------------------------------------------------------//\r
106 // Typedefs\r
107 //--------------------------------------------------------------//\r
108 #ifndef SMALLINT\r
109    //\r
110    // purpose of smallint is for compile-time changing of formal\r
111    // parameters and return values of functions.  For each target\r
112    // machine, an integer is alleged to represent the most "simple"\r
113    // number representable by that architecture.  This should, in\r
114    // most cases, produce optimal code for that particular arch.\r
115    // BUT...  The majority of compilers designed for embedded\r
116    // processors actually keep an int at 16 bits, although the\r
117    // architecture might only be comfortable with 8 bits.\r
118    // The default size of smallint will be the same as that of\r
119    // an integer, but this allows for easy overriding of that size.\r
120    //\r
121    // NOTE:\r
122    // In all cases where a smallint is used, it is assumed that\r
123    // decreasing the size of this integer to something as low as\r
124    // a single byte _will_not_ change the functionality of the\r
125    // application.  e.g. a loop counter that will iterate through\r
126    // several kilobytes of data should not be SMALLINT.  The most\r
127    // common place you'll see smallint is for boolean return types.\r
128    //\r
129    #define SMALLINT int\r
130 #endif\r
131 \r
132 // setting max baud\r
133 #ifdef _WINDOWS\r
134    // 0x02 = PARAMSET_19200\r
135 #define MAX_BAUD 0x02\r
136 #else\r
137    // 0x06 = PARMSET_115200\r
138 #define MAX_BAUD 0x06\r
139 #endif\r
140 \r
141 #ifndef OW_UCHAR\r
142    #define OW_UCHAR\r
143    typedef unsigned char uchar;\r
144    #if !defined(__MINGW32__) && (defined(__CYGWIN__) || defined(__GNUC__))\r
145       typedef unsigned long ulong;\r
146       //ushort already defined in sys/types.h\r
147       #include <sys/types.h>\r
148    #else\r
149       #if defined(_WIN32) || defined(WIN32) || defined(__MC68K__) || defined(_WIN32_WCE) || defined(_DOS)  || defined(_WINDOWS) || defined(__MINGW32__)\r
150          typedef unsigned short ushort;\r
151          typedef unsigned long ulong;\r
152       #endif\r
153    #endif\r
154    #ifdef __sun__\r
155       #include <sys/types.h>\r
156    #endif\r
157    #ifdef SDCC\r
158       //intent of ushort is 2 bytes unsigned.\r
159       //for ds390 in sdcc, an int, not a short,\r
160       //is 2 bytes.\r
161       typedef unsigned int ushort;\r
162    #endif\r
163 #endif\r
164 \r
165 // general defines\r
166 #define WRITE_FUNCTION 1\r
167 #define READ_FUNCTION  0\r
168 \r
169 // error codes\r
170 // todo: investigate these and replace with new Error Handling library\r
171 #define READ_ERROR    -1\r
172 #define INVALID_DIR   -2\r
173 #define NO_FILE       -3\r
174 #define WRITE_ERROR   -4\r
175 #define WRONG_TYPE    -5\r
176 #define FILE_TOO_BIG  -6\r
177 \r
178 // Misc\r
179 #define FALSE          0\r
180 #define TRUE           1\r
181 \r
182 #ifndef MAX_PORTNUM\r
183    #define MAX_PORTNUM    16\r
184 #endif\r
185 \r
186 // mode bit flags\r
187 #define MODE_NORMAL                    0x00\r
188 #define MODE_OVERDRIVE                 0x01\r
189 #define MODE_STRONG5                   0x02\r
190 #define MODE_PROGRAM                   0x04\r
191 #define MODE_BREAK                     0x08\r
192 \r
193 // Output flags\r
194 #define LV_ALWAYS          2\r
195 #define LV_OPTIONAL        1\r
196 #define LV_VERBOSE         0\r
197 \r
198 //--------------------------------------------------------------//\r
199 // Error handling\r
200 //--------------------------------------------------------------//\r
201 extern int owGetErrorNum(void);\r
202 extern int owHasErrors(void);\r
203 \r
204 //Clears the stack.\r
205 #define OWERROR_CLEAR() while(owHasErrors()) owGetErrorNum();\r
206 \r
207 #ifdef DEBUG\r
208    //Raises an exception with extra debug info\r
209    #define OWERROR(err) owRaiseError(err,__LINE__,__FILE__)\r
210    extern void owRaiseError(int,int,char*);\r
211    #define OWASSERT(s,err,ret) if(!(s)){owRaiseError((err),__LINE__,__FILE__);return (ret);}\r
212 #else\r
213    //Raises an exception with just the error code\r
214    #define OWERROR(err) owRaiseError(err)\r
215    extern void owRaiseError(int);\r
216    #define OWASSERT(s,err,ret) if(!(s)){owRaiseError((err));return (ret);}\r
217 #endif\r
218 \r
219 #ifdef SMALL_MEMORY_TARGET\r
220    #define OWERROR_DUMP(fileno) /*no-op*/;\r
221 #else\r
222    //Prints the stack out to the given file.\r
223    #define OWERROR_DUMP(fileno) while(owHasErrors()) owPrintErrorMsg(fileno);\r
224    extern void owPrintErrorMsg(FILE *);\r
225    extern void owPrintErrorMsgStd();\r
226    extern char *owGetErrorMsg(int);\r
227 #endif\r
228 \r
229 #define OWERROR_NO_ERROR_SET                    0\r
230 #define OWERROR_NO_DEVICES_ON_NET               1\r
231 #define OWERROR_RESET_FAILED                    2\r
232 #define OWERROR_SEARCH_ERROR                    3\r
233 #define OWERROR_ACCESS_FAILED                   4\r
234 #define OWERROR_DS2480_NOT_DETECTED             5\r
235 #define OWERROR_DS2480_WRONG_BAUD               6\r
236 #define OWERROR_DS2480_BAD_RESPONSE             7\r
237 #define OWERROR_OPENCOM_FAILED                  8\r
238 #define OWERROR_WRITECOM_FAILED                 9\r
239 #define OWERROR_READCOM_FAILED                  10\r
240 #define OWERROR_BLOCK_TOO_BIG                   11\r
241 #define OWERROR_BLOCK_FAILED                    12\r
242 #define OWERROR_PROGRAM_PULSE_FAILED            13\r
243 #define OWERROR_PROGRAM_BYTE_FAILED             14\r
244 #define OWERROR_WRITE_BYTE_FAILED               15\r
245 #define OWERROR_READ_BYTE_FAILED                16\r
246 #define OWERROR_WRITE_VERIFY_FAILED             17\r
247 #define OWERROR_READ_VERIFY_FAILED              18\r
248 #define OWERROR_WRITE_SCRATCHPAD_FAILED         19\r
249 #define OWERROR_COPY_SCRATCHPAD_FAILED          20\r
250 #define OWERROR_INCORRECT_CRC_LENGTH            21\r
251 #define OWERROR_CRC_FAILED                      22\r
252 #define OWERROR_GET_SYSTEM_RESOURCE_FAILED      23\r
253 #define OWERROR_SYSTEM_RESOURCE_INIT_FAILED     24\r
254 #define OWERROR_DATA_TOO_LONG                   25\r
255 #define OWERROR_READ_OUT_OF_RANGE               26\r
256 #define OWERROR_WRITE_OUT_OF_RANGE              27\r
257 #define OWERROR_DEVICE_SELECT_FAIL              28\r
258 #define OWERROR_READ_SCRATCHPAD_VERIFY          29\r
259 #define OWERROR_COPY_SCRATCHPAD_NOT_FOUND       30\r
260 #define OWERROR_ERASE_SCRATCHPAD_NOT_FOUND      31\r
261 #define OWERROR_ADDRESS_READ_BACK_FAILED        32\r
262 #define OWERROR_EXTRA_INFO_NOT_SUPPORTED        33\r
263 #define OWERROR_PG_PACKET_WITHOUT_EXTRA         34\r
264 #define OWERROR_PACKET_LENGTH_EXCEEDS_PAGE      35\r
265 #define OWERROR_INVALID_PACKET_LENGTH           36\r
266 #define OWERROR_NO_PROGRAM_PULSE                37\r
267 #define OWERROR_READ_ONLY                       38\r
268 #define OWERROR_NOT_GENERAL_PURPOSE             39\r
269 #define OWERROR_READ_BACK_INCORRECT             40\r
270 #define OWERROR_INVALID_PAGE_NUMBER             41\r
271 #define OWERROR_CRC_NOT_SUPPORTED               42\r
272 #define OWERROR_CRC_EXTRA_INFO_NOT_SUPPORTED    43\r
273 #define OWERROR_READ_BACK_NOT_VALID             44\r
274 #define OWERROR_COULD_NOT_LOCK_REDIRECT         45\r
275 #define OWERROR_READ_STATUS_NOT_COMPLETE        46\r
276 #define OWERROR_PAGE_REDIRECTION_NOT_SUPPORTED  47\r
277 #define OWERROR_LOCK_REDIRECTION_NOT_SUPPORTED  48\r
278 #define OWERROR_READBACK_EPROM_FAILED           49\r
279 #define OWERROR_PAGE_LOCKED                     50\r
280 #define OWERROR_LOCKING_REDIRECTED_PAGE_AGAIN   51\r
281 #define OWERROR_REDIRECTED_PAGE                 52\r
282 #define OWERROR_PAGE_ALREADY_LOCKED             53\r
283 #define OWERROR_WRITE_PROTECTED                 54\r
284 #define OWERROR_NONMATCHING_MAC                 55\r
285 #define OWERROR_WRITE_PROTECT                   56\r
286 #define OWERROR_WRITE_PROTECT_SECRET            57\r
287 #define OWERROR_COMPUTE_NEXT_SECRET             58\r
288 #define OWERROR_LOAD_FIRST_SECRET               59\r
289 #define OWERROR_POWER_NOT_AVAILABLE             60\r
290 #define OWERROR_XBAD_FILENAME                   61\r
291 #define OWERROR_XUNABLE_TO_CREATE_DIR           62\r
292 #define OWERROR_REPEAT_FILE                     63\r
293 #define OWERROR_DIRECTORY_NOT_EMPTY             64\r
294 #define OWERROR_WRONG_TYPE                      65\r
295 #define OWERROR_BUFFER_TOO_SMALL                66\r
296 #define OWERROR_NOT_WRITE_ONCE                  67\r
297 #define OWERROR_FILE_NOT_FOUND                  68\r
298 #define OWERROR_OUT_OF_SPACE                    69\r
299 #define OWERROR_TOO_LARGE_BITNUM                70\r
300 #define OWERROR_NO_PROGRAM_JOB                  71\r
301 #define OWERROR_FUNC_NOT_SUP                    72\r
302 #define OWERROR_HANDLE_NOT_USED                 73\r
303 #define OWERROR_FILE_WRITE_ONLY                 74\r
304 #define OWERROR_HANDLE_NOT_AVAIL                75\r
305 #define OWERROR_INVALID_DIRECTORY               76\r
306 #define OWERROR_HANDLE_NOT_EXIST                77\r
307 #define OWERROR_NONMATCHING_SNUM                78\r
308 #define OWERROR_NON_PROGRAM_PARTS               79\r
309 #define OWERROR_PROGRAM_WRITE_PROTECT           80\r
310 #define OWERROR_FILE_READ_ERR                   81\r
311 #define OWERROR_ADDFILE_TERMINATED              82\r
312 #define OWERROR_READ_MEMORY_PAGE_FAILED         83\r
313 #define OWERROR_MATCH_SCRATCHPAD_FAILED         84\r
314 #define OWERROR_ERASE_SCRATCHPAD_FAILED         85\r
315 #define OWERROR_READ_SCRATCHPAD_FAILED          86\r
316 #define OWERROR_SHA_FUNCTION_FAILED             87\r
317 #define OWERROR_NO_COMPLETION_BYTE              88\r
318 #define OWERROR_WRITE_DATA_PAGE_FAILED          89\r
319 #define OWERROR_COPY_SECRET_FAILED              90\r
320 #define OWERROR_BIND_SECRET_FAILED              91\r
321 #define OWERROR_INSTALL_SECRET_FAILED           92\r
322 #define OWERROR_VERIFY_SIG_FAILED               93\r
323 #define OWERROR_SIGN_SERVICE_DATA_FAILED        94\r
324 #define OWERROR_VERIFY_AUTH_RESPONSE_FAILED     95\r
325 #define OWERROR_ANSWER_CHALLENGE_FAILED         96\r
326 #define OWERROR_CREATE_CHALLENGE_FAILED         97\r
327 #define OWERROR_BAD_SERVICE_DATA                98\r
328 #define OWERROR_SERVICE_DATA_NOT_UPDATED        99\r
329 #define OWERROR_CATASTROPHIC_SERVICE_FAILURE    100\r
330 #define OWERROR_LOAD_FIRST_SECRET_FAILED        101\r
331 #define OWERROR_MATCH_SERVICE_SIGNATURE_FAILED  102\r
332 #define OWERROR_KEY_OUT_OF_RANGE                103\r
333 #define OWERROR_BLOCK_ID_OUT_OF_RANGE           104\r
334 #define OWERROR_PASSWORDS_ENABLED               105\r
335 #define OWERROR_PASSWORD_INVALID                106\r
336 #define OWERROR_NO_READ_ONLY_PASSWORD           107\r
337 #define OWERROR_NO_READ_WRITE_PASSWORD          108\r
338 #define OWERROR_OW_SHORTED                      109\r
339 #define OWERROR_ADAPTER_ERROR                   110\r
340 #define OWERROR_EOP_COPY_SCRATCHPAD_FAILED      111\r
341 #define OWERROR_EOP_WRITE_SCRATCHPAD_FAILED     112\r
342 #define OWERROR_HYGRO_STOP_MISSION_UNNECESSARY  113\r
343 #define OWERROR_HYGRO_STOP_MISSION_ERROR        114\r
344 #define OWERROR_PORTNUM_ERROR                   115\r
345 #define OWERROR_LEVEL_FAILED                    116\r
346 #define OWERROR_PASSWORD_NOT_SET                117\r
347 #define OWERROR_LATCH_NOT_SET                   118\r
348 #define OWERROR_LIBUSB_OPEN_FAILED              119\r
349 #define OWERROR_LIBUSB_DEVICE_ALREADY_OPENED    120\r
350 #define OWERROR_LIBUSB_SET_CONFIGURATION_ERROR  121\r
351 #define OWERROR_LIBUSB_CLAIM_INTERFACE_ERROR    122\r
352 #define OWERROR_LIBUSB_SET_ALTINTERFACE_ERROR   123\r
353 #define OWERROR_LIBUSB_NO_ADAPTER_FOUND         124\r
354    \r
355 \r
356            // One Wire functions defined in ownetu.c\r
357            SMALLINT  owFirst_(int portnum, SMALLINT do_reset, SMALLINT alarm_only);\r
358            SMALLINT  owNext_(int portnum, SMALLINT do_reset, SMALLINT alarm_only);\r
359            void      owSerialNum(int portnum, uchar *serialnum_buf, SMALLINT do_read);\r
360            void      owFamilySearchSetup(int portnum, SMALLINT search_family);\r
361            void      owSkipFamily(int portnum);\r
362            SMALLINT  owAccess(int portnum);\r
363            SMALLINT  owVerify(int portnum, SMALLINT alarm_only);\r
364            SMALLINT  owOverdriveAccess(int portnum);\r
365 \r
366 \r
367            // external One Wire functions defined in owsesu.c\r
368            SMALLINT owAcquire(int portnum, char *port_zstr);\r
369            int      owAcquireEx(char *port_zstr);\r
370            void     owRelease(int portnum);\r
371 \r
372            // external One Wire functions defined in findtype.c\r
373            // SMALLINT FindDevices(int,uchar FamilySN[][8],SMALLINT,int);\r
374 \r
375            // external One Wire functions from link layer owllu.c\r
376            SMALLINT owTouchReset(int portnum);\r
377            SMALLINT owTouchBit(int portnum, SMALLINT sendbit);\r
378            SMALLINT owTouchByte(int portnum, SMALLINT sendbyte);\r
379            SMALLINT owWriteByte(int portnum, SMALLINT sendbyte);\r
380            SMALLINT owReadByte(int portnum);\r
381            SMALLINT owSpeed(int portnum, SMALLINT new_speed);\r
382            SMALLINT owLevel(int portnum, SMALLINT new_level);\r
383            SMALLINT owProgramPulse(int portnum);\r
384            SMALLINT owWriteBytePower(int portnum, SMALLINT sendbyte);\r
385            SMALLINT owReadBytePower(int portnum);\r
386            SMALLINT owHasPowerDelivery(int portnum);\r
387            SMALLINT owHasProgramPulse(int portnum);\r
388            SMALLINT owHasOverDrive(int portnum);\r
389            SMALLINT owReadBitPower(int portnum, SMALLINT applyPowerResponse);\r
390            // external One Wire global from owllu.c\r
391            extern SMALLINT FAMILY_CODE_04_ALARM_TOUCHRESET_COMPLIANCE;\r
392 \r
393            // external One Wire functions from transaction layer in owtrnu.c\r
394            SMALLINT owBlock(int portnum, SMALLINT do_reset, uchar *tran_buf, SMALLINT tran_len);\r
395            SMALLINT owReadPacketStd(int portnum, SMALLINT do_access, int start_page, uchar *read_buf);\r
396            SMALLINT owWritePacketStd(int portnum, int start_page, uchar *write_buf,\r
397                    SMALLINT write_len, SMALLINT is_eprom, SMALLINT crc_type);\r
398            SMALLINT owProgramByte(int portnum, SMALLINT write_byte, int addr, SMALLINT write_cmd,\r
399                    SMALLINT crc_type, SMALLINT do_access);\r
400 \r
401            // link functions\r
402            void      msDelay(int len);\r
403            long      msGettick(void);\r
404 \r
405            // ioutil.c functions prototypes\r
406            int  EnterString(char *msg, char *buf, int min, int max);\r
407            int  EnterNum(char *msg, int numchars, long *value, long min, long max);\r
408            int  EnterHex(char *msg, int numchars, ulong *value);\r
409            int  ToHex(char ch);\r
410            int  getkeystroke(void);\r
411            int  key_abort(void);\r
412            void ExitProg(char *msg, int exit_code);\r
413            int  getData(uchar *write_buff, int max_len, SMALLINT gethex);\r
414            void PrintHex(uchar* buffer, int cnt);\r
415            void PrintChars(uchar* buffer, int cnt);\r
416            void PrintSerialNum(uchar* buffer);\r
417 \r
418            // external functions defined in crcutil.c\r
419            void setcrc16(int portnum, ushort reset);\r
420            ushort docrc16(int portnum, ushort cdata);\r
421            void setcrc8(int portnum, uchar reset);\r
422            uchar docrc8(int portnum, uchar x);\r
423 \r
424            extern int owInUse;\r
425 \r
426 #endif //OWNET_H\r