1// The driver for DS18B20 chip, it is a temperature sensor.
2
3// Require libjs/lib/onewire.js module.
4import * as onewire from 'onewire'
5
6var DS18B20Dev;
7var start_flag = 0;
8
9/*
10 * prebuild:
11 *      ./qjsc -c -m ../jsmodules/ds18b20.js -N jslib_ds18b20 -M onewire -o bytecode/jslib_ds18b20.c
12 * config DS18B20
13 * GPIO's options are configured in app.json. Specify the ID, e.g. GPIO below to init DS18B20.
14 {
15    "version": "1.0.0",
16    "io": {
17        "DS18B20": {
18            "type": "GPIO",
19            "port": 4,
20            "dir": "output",
21            "pull": "pullup"
22        }
23    },
24    "debugLevel": "DEBUG"
25 }
26
27 */
28export function init(gpioid) {
29    DS18B20Dev = onewire.open({id: gpioid});
30}
31
32// Get temperature
33export function getTemperature()
34{
35    var TL, TH;
36    var tem;
37
38   /*
39    {
40        DS18B20Dev.setspeed(1);
41        start_flag = 1;
42    }
43
44    DS18B20Dev.reset();
45
46    DS18B20Dev.writeByte(0x55);*/
47
48    if(1)
49    {
50        if(!start_flag)
51        {
52            DS18B20Dev.setspeed(1);
53            DS18B20Dev.reset();
54
55            DS18B20Dev.writeByte(0xcc);
56            DS18B20Dev.writeByte(0x44);
57
58            start_flag = 1;
59        }
60
61
62        DS18B20Dev.reset();
63
64        DS18B20Dev.writeByte(0xcc);
65        DS18B20Dev.writeByte(0xbe);
66
67        TL = DS18B20Dev.readByte();    /* LSB first */
68        TH = DS18B20Dev.readByte();
69
70        if (TH > 7)
71        {
72            TH =~ TH;
73            TL =~ TL;
74            tem = TH;
75            tem <<= 8;
76            tem += TL;
77            tem = (tem * 0.0625 * 10 + 0.5);
78            return -tem;
79        }
80        else
81        {
82            tem = TH;
83            tem <<= 8;
84            tem += TL;
85            tem = (tem * 0.0625 * 10 + 0.5);
86            return tem;
87        }
88    }
89
90}
91
92// De-init Si7006
93export function deinit() {
94    DS18B20Dev.close();
95}
96