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}