diff options
| author | Marcus Huderle <huderlem@gmail.com> | 2019-03-23 09:39:46 -0500 |
|---|---|---|
| committer | Marcus Huderle <huderlem@gmail.com> | 2019-03-23 09:39:46 -0500 |
| commit | 65391a1eb2979dc050dd4a98afea02bb0ef310ea (patch) | |
| tree | e31a90d0966cec7e8713ead9ca8083d439c8d9b5 /src/siirtc.c | |
| parent | eb48cc2f7eefc1e56c2dcec21c38381b4534b897 (diff) | |
| parent | abe56579c107af58e6f3a43968ba2257ff358189 (diff) | |
Merge remote-tracking branch 'upstream/master' into use_pokeblock
# Conflicts:
# src/use_pokeblock.c
Diffstat (limited to 'src/siirtc.c')
| -rw-r--r-- | src/siirtc.c | 139 |
1 files changed, 76 insertions, 63 deletions
diff --git a/src/siirtc.c b/src/siirtc.c index 965a068f1..5c153a841 100644 --- a/src/siirtc.c +++ b/src/siirtc.c @@ -46,6 +46,19 @@ #define CMD_TIME CMD(3) #define CMD_ALARM CMD(4) +#define SCK_HI 1 +#define SIO_HI 2 +#define CS_HI 4 + +#define DIR_0_IN 0 +#define DIR_0_OUT 1 +#define DIR_1_IN 0 +#define DIR_1_OUT 2 +#define DIR_2_IN 0 +#define DIR_2_OUT 4 +#define DIR_ALL_IN (DIR_0_IN | DIR_1_IN | DIR_2_IN) +#define DIR_ALL_OUT (DIR_0_OUT | DIR_1_OUT | DIR_2_OUT) + #define GPIO_PORT_DATA (*(vu16 *)0x80000C4) #define GPIO_PORT_DIRECTION (*(vu16 *)0x80000C6) #define GPIO_PORT_READ_ENABLE (*(vu16 *)0x80000C8) @@ -63,19 +76,19 @@ static void DisableGpioPortRead(); static const char AgbLibRtcVersion[] = "SIIRTC_V001"; -void SiiRtcUnprotect() +void SiiRtcUnprotect(void) { EnableGpioPortRead(); sLocked = FALSE; } -void SiiRtcProtect() +void SiiRtcProtect(void) { DisableGpioPortRead(); sLocked = TRUE; } -u8 SiiRtcProbe() +u8 SiiRtcProbe(void) { u8 errorCode; struct SiiRtcInfo rtc; @@ -116,7 +129,7 @@ u8 SiiRtcProbe() return (errorCode << 4) | 1; } -bool8 SiiRtcReset() +bool8 SiiRtcReset(void) { u8 result; struct SiiRtcInfo rtc; @@ -126,15 +139,15 @@ bool8 SiiRtcReset() sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_RESET | WR); - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -154,14 +167,14 @@ bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc) sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_STATUS | RD); - GPIO_PORT_DIRECTION = 5; + GPIO_PORT_DIRECTION = DIR_0_OUT | DIR_1_IN | DIR_2_OUT; statusData = ReadData(); @@ -170,8 +183,8 @@ bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc) | ((statusData & STATUS_INTME) >> 2) | ((statusData & STATUS_INTFE) >> 1); - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -187,22 +200,22 @@ bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc) sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; statusData = STATUS_24HOUR | ((rtc->status & SIIRTCINFO_INTAE) << 3) | ((rtc->status & SIIRTCINFO_INTME) << 2) | ((rtc->status & SIIRTCINFO_INTFE) << 1); - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_STATUS | WR); WriteData(statusData); - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -218,22 +231,22 @@ bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc) sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_DATETIME | RD); - GPIO_PORT_DIRECTION = 5; + GPIO_PORT_DIRECTION = DIR_0_OUT | DIR_1_IN | DIR_2_OUT; for (i = 0; i < DATETIME_BUF_LEN; i++) DATETIME_BUF(rtc, i) = ReadData(); INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -249,18 +262,18 @@ bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc) sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_DATETIME | WR); for (i = 0; i < DATETIME_BUF_LEN; i++) WriteData(DATETIME_BUF(rtc, i)); - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -276,22 +289,22 @@ bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc) sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_TIME | RD); - GPIO_PORT_DIRECTION = 5; + GPIO_PORT_DIRECTION = DIR_0_OUT | DIR_1_IN | DIR_2_OUT; for (i = 0; i < TIME_BUF_LEN; i++) TIME_BUF(rtc, i) = ReadData(); INFO_BUF(rtc, OFFSET_HOUR) &= 0x7F; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -307,18 +320,18 @@ bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc) sLocked = TRUE; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIO_PORT_DIRECTION = 7; + GPIO_PORT_DIRECTION = DIR_ALL_OUT; WriteCommand(CMD_TIME | WR); for (i = 0; i < TIME_BUF_LEN; i++) WriteData(TIME_BUF(rtc, i)); - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -347,18 +360,18 @@ bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc) alarmData[1] = rtc->alarmMinute; - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 5; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; - GPIOPortDirection = 7; // Why is this the only instance that uses a symbol? + GPIOPortDirection = DIR_ALL_OUT; // Why is this the only instance that uses a symbol? WriteCommand(CMD_ALARM | WR); for (i = 0; i < 2; i++) WriteData(alarmData[i]); - GPIO_PORT_DATA = 1; - GPIO_PORT_DATA = 1; + GPIO_PORT_DATA = SCK_HI; + GPIO_PORT_DATA = SCK_HI; sLocked = FALSE; @@ -373,10 +386,10 @@ static int WriteCommand(u8 value) for (i = 0; i < 8; i++) { temp = ((value >> (7 - i)) & 1); - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 5; + GPIO_PORT_DATA = (temp << 1) | CS_HI; + GPIO_PORT_DATA = (temp << 1) | CS_HI; + GPIO_PORT_DATA = (temp << 1) | CS_HI; + GPIO_PORT_DATA = (temp << 1) | SCK_HI | CS_HI; } // control reaches end of non-void function @@ -390,10 +403,10 @@ static int WriteData(u8 value) for (i = 0; i < 8; i++) { temp = ((value >> i) & 1); - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 4; - GPIO_PORT_DATA = (temp << 1) | 5; + GPIO_PORT_DATA = (temp << 1) | CS_HI; + GPIO_PORT_DATA = (temp << 1) | CS_HI; + GPIO_PORT_DATA = (temp << 1) | CS_HI; + GPIO_PORT_DATA = (temp << 1) | SCK_HI | CS_HI; } // control reaches end of non-void function @@ -407,14 +420,14 @@ static u8 ReadData() for (i = 0; i < 8; i++) { - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 4; - GPIO_PORT_DATA = 5; - - temp = ((GPIO_PORT_DATA & 2) >> 1); + GPIO_PORT_DATA = CS_HI; + GPIO_PORT_DATA = CS_HI; + GPIO_PORT_DATA = CS_HI; + GPIO_PORT_DATA = CS_HI; + GPIO_PORT_DATA = CS_HI; + GPIO_PORT_DATA = SCK_HI | CS_HI; + + temp = ((GPIO_PORT_DATA & SIO_HI) >> 1); value = (value >> 1) | (temp << 7); // UB: accessing uninitialized var } |
