2a2d585bc709edf144570f67c5fa9c4f4b01b97d
[fw/sdcc] / device / examples / ds390 / ow390 / tstow.c
1 //---------------------------------------------------------------------------
2 // Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved.
3 // 
4 // Permission is hereby granted, free of charge, to any person obtaining a 
5 // copy of this software and associated documentation files (the "Software"), 
6 // to deal in the Software without restriction, including without limitation 
7 // the rights to use, copy, modify, merge, publish, distribute, sublicense, 
8 // and/or sell copies of the Software, and to permit persons to whom the 
9 // Software is furnished to do so, subject to the following conditions:
10 // 
11 // The above copyright notice and this permission notice shall be included 
12 // in all copies or substantial portions of the Software.
13 // 
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
15 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
16 // MERCHANTABILITY,  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
17 // IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES 
18 // OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
19 // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
20 // OTHER DEALINGS IN THE SOFTWARE.
21 // 
22 // Except as contained in this notice, the name of Dallas Semiconductor 
23 // shall not be used except as stated in the Dallas Semiconductor 
24 // Branding Policy. 
25 //---------------------------------------------------------------------------
26 //
27 //  tstow.C - Test application to test 1-Wire Net functions. No EPROM writes.
28 //
29 //  Version: 2.00
30 //
31 //  History: 1.00 -> 1.01  Change to use msDelay instead of Sleep. 
32 //
33 //           1.01 -> 1.02  Changed to generic OpenCOM/CloseCOM for easier 
34 //                           use with other platforms.  
35 //           1.02 -> 1.03  Removed caps in #includes for Linux capatibility
36 //                         Changed to use Acquire/Release 1-Wire Net functions
37 //           1.03 -> 2.00  Reorganization of Public Domain Kit 
38 //
39
40 #include <stdio.h>
41 #include <stdlib.h>
42 #include "ownet.h"
43
44 // local funcitons
45 void PrintSerialNum(int portnum);
46
47 // tini hack
48 int argc=2;
49 char *argv[]={__FILE__, "exow"};
50
51 //----------------------------------------------------------------------
52 //  Main Test
53 //
54 int main() //short argc, char **argv)
55 {
56    int PortNum=1,rslt,i,j,testcnt=0,length;
57    uchar TempSerialNum[8];
58    uchar tran_buffer[2000], filename[10];
59    char return_msg[128];
60    int portnum=0;
61
62    // check for required port name
63    if (argc != 2)
64    {
65       printf("1-Wire Net name required on command line!\n"
66              " (example: \"COM1\" (Win32 DS2480),\"/dev/cua0\" "
67              "(Linux DS2480),\"1\" (Win32 TMEX)\n");
68       exit(1);
69    }
70
71    // attempt to acquire the 1-Wire Net
72    if (!owAcquire(portnum, argv[1], return_msg))
73    {  
74       printf("%s",return_msg);
75       exit(1);
76    }
77
78    // success
79    printf("%s",return_msg);
80
81    //----------------------------------------
82    // Introduction
83    printf("\n/---------------------------------------------\n");
84     printf("  The following is a test excersize of the\n"
85           "  1-Wire Net public domain library Version 2.00.\n\n"
86           "  This test was run using with 2 DS1920's (DS1820),\n"
87           "  1 DS1971 (DS2430), and 1 DS1996.\n\n");
88
89    //----------------------------------------
90    // First the devices on the 1-Wire Net
91    printf("\n/---------------------------------------------\n");
92    printf("TEST%d: Searching for devices on 1-Wire Net\n",testcnt++);
93
94    // find the first device (all devices not just alarming)
95    rslt = owFirst(portnum,TRUE, FALSE);
96    while (rslt)
97    {
98       // print the Serial Number of the device just found
99       PrintSerialNum(portnum);
100
101       // find the next device
102       rslt = owNext(portnum,TRUE, FALSE);
103    }
104
105    //----------------------------------------
106    // now search for the part with a 0x0C family code (DS1996)
107    printf("\n/---------------------------------------------\n");
108    printf("TEST%d: Set to find first device with 0x0C family code\n",testcnt++);
109
110    owFamilySearchSetup(portnum,0x0C);
111
112    // find the first 0x0c device
113    TempSerialNum[0]=0;
114    while (TempSerialNum[0]!=0x0c && owNext(portnum,TRUE,FALSE)) {
115      owSerialNum(portnum,TempSerialNum,TRUE);
116    }
117    printf("search result %d\n",TempSerialNum[0]==0x0c);
118
119    // print the Serial Number of the device just found
120    PrintSerialNum(portnum);
121    
122    //----------------------------------------
123    // Access a device and read ram
124    printf("\n/---------------------------------------------\n");
125    printf("TEST%d: Access the current device and read ram\n",testcnt++);
126
127    printf("owAccess %d\n",owAccess(portnum));
128
129    printf("Read Ram 0xF0: %02X\n",owTouchByte(portnum,0xF0));
130    printf("Address0 0x00: %02X\n",owTouchByte(portnum,0x00));
131    printf("Address1 0x00: %02X\n",owTouchByte(portnum,0x00));
132
133    printf("Page 0: ");
134    for (i = 0; i < 32; i++)
135       printf("%02X ",owTouchByte(portnum,0xFF));
136    printf("\n");
137
138    //----------------------------------------
139    // Read ram with owBlock
140    printf("\n/---------------------------------------------\n");
141    printf("TEST%d: Read ram with owBlock\n",testcnt++);
142    for (i = 0; i < 32; i++)
143       tran_buffer[i] = 0xFF;
144
145    printf("owBlock %d\n",owBlock(portnum,FALSE,tran_buffer,32));
146    printf("Page 1: ");
147    for (i = 0; i < 32; i++)
148       printf("%02X ",tran_buffer[i]);
149    printf("\n");
150
151    //----------------------------------------
152    // Write a packet in each page of DS1996
153    printf("\n/---------------------------------------------\n");
154    printf("TEST%d: Place the DS1996 into overdrive\n",testcnt++);
155    printf("owOverdriveAccess %d\n",owOverdriveAccess(portnum));
156
157    //----------------------------------------
158    // Write 4 packets with owWritePacketStd 
159    printf("\n/---------------------------------------------\n");
160    printf("TEST%d: Write 4 packets with owWritePacketStd\n",testcnt++);
161      
162    for (j = 0; j < 4; j++)
163    {
164       for (i = 0; i < 29; i++)
165         tran_buffer[i] = (uchar)i + j;
166
167       printf("Write page %d: %d\n",j,owWritePacketStd(portnum,j,tran_buffer,29,FALSE,FALSE));
168
169       for (i = 0; i < 29; i++)
170          tran_buffer[i] = 0;
171    
172       length = owReadPacketStd(portnum,TRUE,j,tran_buffer);
173
174       printf("Read page %d: %d\n",j,length);
175
176       for (i = 0; i < length; i++)
177          printf("%02X",tran_buffer[i]);
178       printf("\n");
179    }
180
181    //----------------------------------------
182    // Write a file to DS1996
183    printf("\n/---------------------------------------------\n");
184    printf("TEST%d: Format and write a file (in overdrive)\n",testcnt++);
185    sprintf(filename,"DEMO");
186    // set the data to write
187    for (i = 0; i < 2000; i++)
188       tran_buffer[i] = i % 255;
189    printf("Format and write file DEMO.000 %d\n",
190           owFormatWriteFile(portnum,filename,2000,tran_buffer));
191
192    // clear the buffer
193    for (i = 0; i < 2000; i++)
194       tran_buffer[i] = 0x55;
195    printf("Read file DEMO.000 %d\n",owReadFile(portnum,filename,tran_buffer));
196    // print the data result
197    for (i = 0; i < 2000; i++)
198    {
199       if ((i % 0x20) == 0)
200          printf("\n%03X    ",i);
201       printf("%02X",tran_buffer[i]);
202    }
203    printf("\n");
204   
205    //----------------------------------------
206    // Turn off overdrive
207    printf("\n/---------------------------------------------\n");
208    printf("TEST%d: Turn off overdrive\n",testcnt++);
209    printf("Set 1-Wire Net speed to normal %d\n",owSpeed(portnum,MODE_NORMAL));
210
211    //----------------------------------------
212    // Verify a device
213    printf("\n/---------------------------------------------\n");
214    printf("TEST%d: Verify the current device\n",testcnt++);
215
216    printf("owVerify (normal) %d\n",owVerify(portnum,FALSE));
217    printf("owVerify (alarm)  %d\n",owVerify(portnum,TRUE));
218
219    //----------------------------------------
220    // Skip the first family code found
221    printf("\n/---------------------------------------------\n");
222    printf("TEST%d: Skip the first family code found\n",testcnt++);
223    
224    // find the next device
225    printf("search result of owFirst %d\n",owFirst(portnum,TRUE, FALSE));
226
227    // print the Serial Number of the device just found
228    PrintSerialNum(portnum);
229
230    // skip the first family type found
231    owSkipFamily(portnum);
232    printf("owSkipFamily called\n");
233
234    // find the next device
235    printf("search result of owNext %d\n",owNext(portnum,TRUE, FALSE));
236    
237    // print the Serial Number of the device just found
238    PrintSerialNum(portnum);
239
240    //----------------------------------------
241    // Find first family code (DS1920) and read temperature
242    printf("\n/---------------------------------------------\n");
243    printf("TEST%d: Find first family code (DS1920) and read temperature\n",testcnt++);
244
245    // find the next device
246    printf("search result of owFirst %d\n",owFirst(portnum,TRUE, FALSE));
247
248    // print the Serial Number of the device just found
249    PrintSerialNum(portnum);
250
251    // send the convert temperature command
252    printf("Convert temperature command %02X\n",owTouchByte(portnum,0x44));
253
254    // set the 1-Wire Net to strong pull-up
255    printf("Set power delivery %d\n",owLevel(portnum,MODE_STRONG5));
256
257    // sleep for 1 second
258    msDelay(1000);
259
260    // turn off the 1-Wire Net strong pull-up
261    printf("Disable power delivery %d\n",owLevel(portnum,MODE_NORMAL));
262
263    // read the DS1920 temperature value
264    printf("Access the DS1920 %d\n",owAccess(portnum));
265    tran_buffer[0] = 0xBE;
266    tran_buffer[1] = 0xFF;
267    tran_buffer[2] = 0xFF;
268    printf("Block to read temperature %d\n",owBlock(portnum,FALSE,tran_buffer,3));
269    // interpret the result
270    printf("result: DS1920 temperature read: %d C\n", (tran_buffer[1] |
271            ((int)tran_buffer[2] << 8)) / 2);
272   
273    //----------------------------------------
274    //  Verify the current device, could also be alarming
275    printf("\n/---------------------------------------------\n");
276    printf("TEST%d: Verify the current device, could also be alarming\n",testcnt++);
277
278    printf("owVerify (normal) %d\n",owVerify(portnum,FALSE));
279    printf("owVerify (alarm)  %d\n",owVerify(portnum,TRUE));
280
281    //----------------------------------------
282    // Test setting the Serial Number with owSerialNum
283    printf("\n/---------------------------------------------\n");
284    printf("TEST%d: Test setting the Serial Number with owSerialNum\n",testcnt++);
285
286    // set the Serial Num to 0 to 7
287    for (i = 0; i < 8; i++)
288       TempSerialNum[i] = (uchar)i;
289    owSerialNum(portnum,TempSerialNum,FALSE);
290
291    // read back the Serial Number 
292    PrintSerialNum(portnum);
293
294    //----------------------------------------
295    //  Verify the current device (should fail, no such device)
296    printf("\n/---------------------------------------------\n");
297    printf("TEST%d: Verify the current device (should fail, no such device)\n",testcnt++);
298
299    printf("owVerify (normal) %d\n",owVerify(portnum,FALSE));
300    printf("owVerify (alarm)  %d\n",owVerify(portnum,TRUE));
301
302    // release the 1-Wire Net
303    owRelease(portnum,return_msg);
304    printf("%s",return_msg);
305    exit(0);
306
307    return 0;
308 }
309
310 //----------------------------------------------------------------------
311 //  Read and print the Serial Number.
312 //
313 void PrintSerialNum(int portnum)
314 {
315    uchar TempSerialNumber[8];
316    int i;
317
318    owSerialNum(portnum,TempSerialNumber,TRUE);
319    for (i = 7; i >= 0; i--)
320       printf("%02X",TempSerialNumber[i]);
321    printf("\n");
322 }