| 68 | } |
| 69 | |
| 70 | static uint8_t rtc_read(const uint16_t pio, bool peek) { |
| 71 | uint8_t index = pio & 0xFF; |
| 72 | uint8_t bit_offset = (index & 3) << 3; |
| 73 | |
| 74 | uint8_t value = 0; |
| 75 | (void)peek; |
| 76 | |
| 77 | switch (index) { |
| 78 | case 0x00: |
| 79 | value = (rtc.control & 128) ? rtc.readSec : rtc.holdSec; |
| 80 | break; |
| 81 | case 0x04: |
| 82 | value = (rtc.control & 128) ? rtc.readMin : rtc.holdMin; |
| 83 | break; |
| 84 | case 0x08: |
| 85 | value = (rtc.control & 128) ? rtc.readHour : rtc.holdHour; |
| 86 | break; |
| 87 | case 0x0C: case 0x0D: |
| 88 | value = read8((rtc.control & 128) ? rtc.readDay : rtc.holdDay, bit_offset); |
| 89 | break; |
| 90 | case 0x10: |
| 91 | value = rtc.alarmSec; |
| 92 | break; |
| 93 | case 0x14: |
| 94 | value = rtc.alarmMin; |
| 95 | break; |
| 96 | case 0x18: |
| 97 | value = rtc.alarmHour; |
| 98 | break; |
| 99 | case 0x20: |
| 100 | value = rtc.control; |
| 101 | break; |
| 102 | case 0x24: |
| 103 | value = rtc.writeSec; |
| 104 | break; |
| 105 | case 0x28: |
| 106 | value = rtc.writeMin; |
| 107 | break; |
| 108 | case 0x2C: |
| 109 | value = rtc.writeHour; |
| 110 | break; |
| 111 | case 0x30: case 0x31: |
| 112 | value = read8(rtc.writeDay, bit_offset); |
| 113 | break; |
| 114 | case 0x34: |
| 115 | value = rtc.interrupt; |
| 116 | break; |
| 117 | case 0x3C: case 0x3D: case 0x3E: case 0x3F: |
| 118 | value = read8(rtc.revision, bit_offset); |
| 119 | break; |
| 120 | case 0x44: case 0x45: case 0x46: case 0x47: |
| 121 | value = read8(rtc.readSec | (rtc.readMin<<6) | (rtc.readHour<<12) | (rtc.readDay<<17), bit_offset); |
| 122 | break; |
| 123 | default: |
| 124 | break; |
| 125 | } |
| 126 | |
| 127 | return value; |
nothing calls this directly
no outgoing calls
no test coverage detected