Semi-decennial update. 50% code inflation.
[cbaos.git] / test / test_1w.c
blob8da456f62221c3328ceef9c6ba5a224f423fe60f
1 /* Author: Domen Puncer <domen@cba.si>. License: WTFPL, see file LICENSE */
2 #include <stdio.h>
3 #include <string.h>
5 #include <sched.h>
7 #include <drivers/1w.h>
8 //#include <drivers/ds2482_1w.h>
9 #include <drivers/bitbang_1w.h>
12 void test_1w_func(u32 arg)
14 int pin = arg;
15 int i;
16 #if 0
17 struct ds2482_data ds2482_data = {
18 .i2c = &i2c0,
19 .addr = 0x1b,
21 struct w1_master _w1, *w1 = &_w1;
22 w1->priv = &ds2482_data;
23 ds2482_1w_register(w1);
24 #else
25 struct bitbang_1w_data bitbang_1w_data = {
26 .pin = pin,
28 struct w1_master _w1, *w1 = &_w1;
29 w1->priv = &bitbang_1w_data;
30 bitbang_1w_register(w1);
31 #endif
33 w1_addr_t addrs[5];
34 int n = w1_scan(w1, addrs, 5);
35 printf("found %i 1-wire devices:\n", n);
36 for (i=0; i<n; i++) {
37 u8 *b = addrs[i].bytes;
38 printf(" %02x%02x%02x%02x%02x%02x%02x%02x\n",
39 b[0], b[1], b[2], b[3],
40 b[4], b[5], b[6], b[7]);
43 n = w1_read_rom(w1, &addrs[0]);
44 printf("read_rom: %i\n", n);
45 u8 *b = addrs[0].bytes;
46 printf(" %02x%02x%02x%02x%02x%02x%02x%02x\n",
47 b[0], b[1], b[2], b[3],
48 b[4], b[5], b[6], b[7]);
51 /* some example code for ds2890 1-wire digital potentiometer */
52 w1_addr_t pot;
53 // 2c7147070000007b
54 memcpy(pot.bytes, "\x2c\x71\x47\x07\x00\x00\x00\x7b", 8);
56 /* read ctrl */
57 w1_match_rom(w1, pot);
58 w1_write(w1, '\xaa');
59 u8 tmp1 = w1_read(w1);
60 u8 tmp2 = w1_read(w1);
61 printf("%s, 1w: feat:%02x, ctrl:%02x\n", __func__, tmp1, tmp2);
63 /* read position */
64 w1_match_rom(w1, pot);
65 w1_write(w1, '\xf0');
66 tmp1 = w1_read(w1);
67 tmp2 = w1_read(w1);
68 printf("%s, 1w: ctrl:%02x, wiper:%02x\n", __func__, tmp1, tmp2);
70 /* write position */
71 w1_match_rom(w1, pot);
72 w1_write(w1, '\x0f');
73 w1_write(w1, '\xf0');
74 tmp1 = w1_read(w1);
75 if (tmp1 == '\xf0')
76 w1_write(w1, '\x96'); /* release code */
77 printf("%s, 1w: new pos:%02x\n", __func__, tmp1);
79 /* prepare for inc/dec */
80 w1_match_rom(w1, pot);
81 while (1) {
82 if (i % 32 < 20)
83 w1_write(w1, '\x99');
84 else
85 w1_write(w1, '\xc3');
86 printf("%s, %i, wiper pos:%02x\n", __func__, i++, w1_read(w1));
88 msleep(1000);