1package ecg
 2
 3import (
 4	"odoki-firmware/ads1293"
 5	"odoki-firmware/constants"
 6
 7	"machine"
 8
 9	"tinygo.org/x/drivers"
10)
11
12var device ads1293.Device
13var buffers [constants.ChannelCount][constants.BufferSize]int32
14var bufferIndex uint32
15
16var DisplayBuffers [constants.ChannelCount][constants.DisplayECGBufferSize]int32
17var displayBufferInternalIndex int16
18var DisplayBufferIndex int16
19
20var HeartRate uint8 = 0
21
22func Init(drdyPin, csPin machine.Pin, spiBus drivers.SPI) {
23	device = ads1293.New(ads1293.Config{
24		DrdyPin: drdyPin,
25		CsPin:   csPin,
26		SPIBus:  spiBus,
27	})
28	device.SetAds1293Pins()
29	device.Ads1293Begin3LeadECG()
30}
31
32func HandleData(p machine.Pin) {
33	ready, ecgCh1, ecgCh2, ecgCh3 := device.ReadChannelsIfReady()
34	if ready {
35		buffers[0][bufferIndex] = ecgCh1
36		buffers[1][bufferIndex] = ecgCh2
37		buffers[2][bufferIndex] = ecgCh3
38		bufferIndex++
39
40		displayBufferInternalIndex++
41		if displayBufferInternalIndex == constants.DisplayECGRecEvery-1 {
42			//comms.WriteECG(ecgCh1)
43			displayBufferInternalIndex = 0
44			DisplayBuffers[0][DisplayBufferIndex] = ecgCh1
45			DisplayBuffers[1][DisplayBufferIndex] = ecgCh2
46			DisplayBuffers[2][DisplayBufferIndex] = ecgCh3
47			DisplayBufferIndex++
48		}
49
50		if DisplayBufferIndex == constants.DisplayECGBufferSize {
51			DisplayBufferIndex = 0
52		}
53
54		if bufferIndex == constants.BufferSize-1 {
55			bufferIndex = 0
56		}
57
58	}
59}
60
61func SetReadoutInterrupt() {
62	device.DrdyPin.SetInterrupt(machine.PinFalling, HandleData)
63}