/
boot0.js
132 lines (116 loc) · 3.6 KB
/
boot0.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// Inital boot file for M5Stick-C
I2C1.setup({scl:22,sda:21,bitrate:400000});
var AXP192 = {
writeByte:(a,d) => {
I2C1.writeTo(0x34,a,d);
},
readByte:(a) => {
I2C1.writeTo(0x34, a);
return I2C1.readFrom(0x34,1)[0];
},
backlight:(state) => {
var buf = AXP192.readByte(0x12);
AXP192.writeByte(0x12, state?(buf | 0x04):(buf & ~0x04));
},
brightness:(b) => {
b = b<0?0:b>1?1:b;
b = Math.floor(b*10)+2;
var buf = AXP192.readByte(0x28);
AXP192.writeByte(0x28 , ((buf & 0x0f) | (b << 4)) );
},
deepSleep:(usec,pin)=>{
AXP192.writeByte(0x31 , AXP192.readByte(0x31) | ( 1 << 3));
AXP192.writeByte(0x90 , AXP192.readByte(0x90) | 0x07);
AXP192.writeByte(0x82, 0x00);
AXP192.writeByte(0x12, AXP192.readByte(0x12) & 0xA1);
ESP32.deepSleep(usec,pin);
},
batV:() => {
I2C1.writeTo(0x34,0x78);
var d = I2C1.readFrom(0x34,2);
var v = d[0]*16+d[1];
const ADCLSB = 1.1 / 1000.0;
return v * ADCLSB;
},
batA:() => {
function read13(a){
I2C1.writeTo(0x34,a);
var d = I2C1.readFrom(0x34,2);
return d[0]*32+d[1];
}
// current in - current out (ma);
return ( read13(0x7A)-read13(0x7C))/2;
},
init:()=>{
// Set LDO2 & LDO3(TFT_LED & TFT) 3.0V
AXP192.writeByte(0x28, 0xcc);
// Set ADC to All Enable
AXP192.writeByte(0x82, 0xff);
// Bat charge voltage to 4.2, Current 100MA
AXP192.writeByte(0x33, 0xc0);
// Enable Bat,ACIN,VBUS,APS adc
AXP192.writeByte(0x82, 0xff);
// Enable Ext, LDO3, DCDC1
// Close DCDC2 output
// with out LD02 LCD light it is 0x49
AXP192.writeByte(0x12, 0x49);
// 128ms power on, 4s power off
AXP192.writeByte(0x36, 0x0C);
// Set RTC voltage to 3.3V
AXP192.writeByte(0x91, 0xF0);
// Set GPIO0 to LDO
AXP192.writeByte(0x90, 0x02);
// Disable vbus hold limit
AXP192.writeByte(0x30, 0x80);
// Set temperature protection
AXP192.writeByte(0x39, 0xfc);
// Enable RTC BAT charge
AXP192.writeByte(0x35, 0xa2);
// Enable bat detection
AXP192.writeByte(0x32, 0x46);
}
}
global.M5C = {
BTNA: D37,
BTNB: D39,
LED: D10,
IR: D9,
backlight:AXP192.backlight,
brightness:AXP192.brightness,
batV:AXP192.batV,
batA:AXP192.batA,
deepSleep:AXP192.deepSleep
}
AXP192.init();
if (require("Storage").read("rtc.js")){
eval(require("Storage").read("rtc.js"));
var rtc = RTC();
rtc.setSYS(); //set systemclock from Real-Time Clock;
}
function loadapp(){
clearInterval();
lcd.clear();
if (require("Storage").read("app.js"))
eval(require("Storage").read("app.js"));
}
if (require("Storage").read("lcd.js")){
eval(require("Storage").read("lcd.js"));
M5C.brightness(0.8);
var lcd = ST7735S();
setTimeout(() => {
lcd.setRotation(3);
lcd.setColor(0xFFFF);
lcd.setFont("6x8");
lcd.drawString("M5Stick-C Espruino",25,30);
var d = new Date();
lcd.drawString(d.toString().substr(0,15),25,40);
M5C.backlight(1);
setInterval(()=>{
var d = new Date();
lcd.drawString(d.toString().split(" ")[4],110,0,true);
lcd.drawString(M5C.batV().toFixed(1)+"V",130,70,true);
lcd.drawString(M5C.batA().toFixed(1)+"ma ",0,70,true);
if (!M5C.BTNB.read())loadapp();
},1000);
},200);
}