diff options
author | Giovanni Di Sirio <gdisirio@gmail.com> | 2016-06-07 13:10:04 +0000 |
---|---|---|
committer | Giovanni Di Sirio <gdisirio@gmail.com> | 2016-06-07 13:10:04 +0000 |
commit | 02d65c01db18d4460e421242e4be82b25a723ad0 (patch) | |
tree | ce0b5928a26ad79453a457f607be05d949321363 /os/hal/src | |
parent | afc0508c0b98188ecd6467391cd8043f0ba9ff57 (diff) | |
download | ChibiOS-02d65c01db18d4460e421242e4be82b25a723ad0.tar.gz ChibiOS-02d65c01db18d4460e421242e4be82b25a723ad0.tar.bz2 ChibiOS-02d65c01db18d4460e421242e4be82b25a723ad0.zip |
Configuration cleanup on stop in the entire HAL.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9601 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/src')
-rw-r--r-- | os/hal/src/hal_adc.c | 6 | ||||
-rw-r--r-- | os/hal/src/hal_can.c | 1 | ||||
-rw-r--r-- | os/hal/src/hal_dac.c | 3 | ||||
-rw-r--r-- | os/hal/src/hal_ext.c | 6 | ||||
-rw-r--r-- | os/hal/src/hal_gpt.c | 6 | ||||
-rw-r--r-- | os/hal/src/hal_i2c.c | 8 | ||||
-rw-r--r-- | os/hal/src/hal_i2s.c | 6 | ||||
-rw-r--r-- | os/hal/src/hal_icu.c | 6 | ||||
-rw-r--r-- | os/hal/src/hal_mac.c | 6 | ||||
-rw-r--r-- | os/hal/src/hal_mmc_spi.c | 3 | ||||
-rw-r--r-- | os/hal/src/hal_pwm.c | 4 | ||||
-rw-r--r-- | os/hal/src/hal_qspi.c | 3 | ||||
-rw-r--r-- | os/hal/src/hal_sdc.c | 6 | ||||
-rw-r--r-- | os/hal/src/hal_serial.c | 6 | ||||
-rw-r--r-- | os/hal/src/hal_serial_usb.c | 5 | ||||
-rw-r--r-- | os/hal/src/hal_spi.c | 6 | ||||
-rw-r--r-- | os/hal/src/hal_uart.c | 5 | ||||
-rw-r--r-- | os/hal/src/hal_usb.c | 6 | ||||
-rw-r--r-- | os/hal/src/hal_wdg.c | 6 |
19 files changed, 80 insertions, 18 deletions
diff --git a/os/hal/src/hal_adc.c b/os/hal/src/hal_adc.c index 0945ea9f2..222aaea4f 100644 --- a/os/hal/src/hal_adc.c +++ b/os/hal/src/hal_adc.c @@ -117,10 +117,14 @@ void adcStop(ADCDriver *adcp) { osalDbgCheck(adcp != NULL);
osalSysLock();
+
osalDbgAssert((adcp->state == ADC_STOP) || (adcp->state == ADC_READY),
"invalid state");
+
adc_lld_stop(adcp);
- adcp->state = ADC_STOP;
+ adcp->config = NULL;
+ adcp->state = ADC_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_can.c b/os/hal/src/hal_can.c index 173700afd..08cf7cc5e 100644 --- a/os/hal/src/hal_can.c +++ b/os/hal/src/hal_can.c @@ -129,6 +129,7 @@ void canStop(CANDriver *canp) { /* The low level driver is stopped.*/
can_lld_stop(canp);
+ canp->config = NULL;
canp->state = CAN_STOP;
/* Threads waiting on CAN APIs are notified that the driver has been
diff --git a/os/hal/src/hal_dac.c b/os/hal/src/hal_dac.c index 3496bead5..0297f9bd4 100644 --- a/os/hal/src/hal_dac.c +++ b/os/hal/src/hal_dac.c @@ -125,7 +125,8 @@ void dacStop(DACDriver *dacp) { "invalid state");
dac_lld_stop(dacp);
- dacp->state = DAC_STOP;
+ dacp->config = NULL;
+ dacp->state = DAC_STOP;
osalSysUnlock();
}
diff --git a/os/hal/src/hal_ext.c b/os/hal/src/hal_ext.c index 9d0c6ff33..658640e31 100644 --- a/os/hal/src/hal_ext.c +++ b/os/hal/src/hal_ext.c @@ -106,10 +106,14 @@ void extStop(EXTDriver *extp) { osalDbgCheck(extp != NULL);
osalSysLock();
+
osalDbgAssert((extp->state == EXT_STOP) || (extp->state == EXT_ACTIVE),
"invalid state");
+
ext_lld_stop(extp);
- extp->state = EXT_STOP;
+ extp->config = NULL;
+ extp->state = EXT_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_gpt.c b/os/hal/src/hal_gpt.c index cd08a2779..b224fc5fb 100644 --- a/os/hal/src/hal_gpt.c +++ b/os/hal/src/hal_gpt.c @@ -104,10 +104,14 @@ void gptStop(GPTDriver *gptp) { osalDbgCheck(gptp != NULL);
osalSysLock();
+
osalDbgAssert((gptp->state == GPT_STOP) || (gptp->state == GPT_READY),
"invalid state");
+
gpt_lld_stop(gptp);
- gptp->state = GPT_STOP;
+ gptp->config = NULL;
+ gptp->state = GPT_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_i2c.c b/os/hal/src/hal_i2c.c index 30e8809a1..54a362f0c 100644 --- a/os/hal/src/hal_i2c.c +++ b/os/hal/src/hal_i2c.c @@ -113,12 +113,16 @@ void i2cStart(I2CDriver *i2cp, const I2CConfig *config) { void i2cStop(I2CDriver *i2cp) {
osalDbgCheck(i2cp != NULL);
+
+ osalSysLock();
+
osalDbgAssert((i2cp->state == I2C_STOP) || (i2cp->state == I2C_READY) ||
(i2cp->state == I2C_LOCKED), "invalid state");
- osalSysLock();
i2c_lld_stop(i2cp);
- i2cp->state = I2C_STOP;
+ i2cp->config = NULL;
+ i2cp->state = I2C_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_i2s.c b/os/hal/src/hal_i2s.c index 2434e8477..e34068bf5 100644 --- a/os/hal/src/hal_i2s.c +++ b/os/hal/src/hal_i2s.c @@ -104,10 +104,14 @@ void i2sStop(I2SDriver *i2sp) { osalDbgCheck(i2sp != NULL);
osalSysLock();
+
osalDbgAssert((i2sp->state == I2S_STOP) || (i2sp->state == I2S_READY),
"invalid state");
+
i2s_lld_stop(i2sp);
- i2sp->state = I2S_STOP;
+ i2sp->config = NULL;
+ i2sp->state = I2S_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_icu.c b/os/hal/src/hal_icu.c index 8ee4ed8cd..cb8eaec64 100644 --- a/os/hal/src/hal_icu.c +++ b/os/hal/src/hal_icu.c @@ -104,10 +104,14 @@ void icuStop(ICUDriver *icup) { osalDbgCheck(icup != NULL);
osalSysLock();
+
osalDbgAssert((icup->state == ICU_STOP) || (icup->state == ICU_READY),
"invalid state");
+
icu_lld_stop(icup);
- icup->state = ICU_STOP;
+ icup->config = NULL;
+ icup->state = ICU_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_mac.c b/os/hal/src/hal_mac.c index c4027f500..7d0f4cf43 100644 --- a/os/hal/src/hal_mac.c +++ b/os/hal/src/hal_mac.c @@ -117,10 +117,14 @@ void macStop(MACDriver *macp) { osalDbgCheck(macp != NULL);
osalSysLock();
+
osalDbgAssert((macp->state == MAC_STOP) || (macp->state == MAC_ACTIVE),
"invalid state");
+
mac_lld_stop(macp);
- macp->state = MAC_STOP;
+ macp->config = NULL;
+ macp->state = MAC_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_mmc_spi.c b/os/hal/src/hal_mmc_spi.c index 19c794501..2e6ef7658 100644 --- a/os/hal/src/hal_mmc_spi.c +++ b/os/hal/src/hal_mmc_spi.c @@ -430,7 +430,8 @@ void mmcStop(MMCDriver *mmcp) { "invalid state");
spiStop(mmcp->config->spip);
- mmcp->state = BLK_STOP;
+ mmcp->config = NULL;
+ mmcp->state = BLK_STOP;
}
/**
diff --git a/os/hal/src/hal_pwm.c b/os/hal/src/hal_pwm.c index e11011248..453606c19 100644 --- a/os/hal/src/hal_pwm.c +++ b/os/hal/src/hal_pwm.c @@ -113,11 +113,15 @@ void pwmStop(PWMDriver *pwmp) { osalDbgCheck(pwmp != NULL);
osalSysLock();
+
osalDbgAssert((pwmp->state == PWM_STOP) || (pwmp->state == PWM_READY),
"invalid state");
+
pwm_lld_stop(pwmp);
pwmp->enabled = 0;
+ pwmp->config = NULL;
pwmp->state = PWM_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_qspi.c b/os/hal/src/hal_qspi.c index dd091498b..cca5dd747 100644 --- a/os/hal/src/hal_qspi.c +++ b/os/hal/src/hal_qspi.c @@ -124,7 +124,8 @@ void qspiStop(QSPIDriver *qspip) { "invalid state");
qspi_lld_stop(qspip);
- qspip->state = QSPI_STOP;
+ qspip->config = NULL;
+ qspip->state = QSPI_STOP;
osalSysUnlock();
}
diff --git a/os/hal/src/hal_sdc.c b/os/hal/src/hal_sdc.c index 654f179e4..80cbca3bf 100644 --- a/os/hal/src/hal_sdc.c +++ b/os/hal/src/hal_sdc.c @@ -594,10 +594,14 @@ void sdcStop(SDCDriver *sdcp) { osalDbgCheck(sdcp != NULL);
osalSysLock();
+
osalDbgAssert((sdcp->state == BLK_STOP) || (sdcp->state == BLK_ACTIVE),
"invalid state");
+
sdc_lld_stop(sdcp);
- sdcp->state = BLK_STOP;
+ sdcp->config = NULL;
+ sdcp->state = BLK_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_serial.c b/os/hal/src/hal_serial.c index 0b578fdc4..5439245ed 100644 --- a/os/hal/src/hal_serial.c +++ b/os/hal/src/hal_serial.c @@ -170,13 +170,17 @@ void sdStop(SerialDriver *sdp) { osalDbgCheck(sdp != NULL);
osalSysLock();
+
osalDbgAssert((sdp->state == SD_STOP) || (sdp->state == SD_READY),
"invalid state");
+
sd_lld_stop(sdp);
- sdp->state = SD_STOP;
+ sdp->config = NULL;
+ sdp->state = SD_STOP;
oqResetI(&sdp->oqueue);
iqResetI(&sdp->iqueue);
osalOsRescheduleS();
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_serial_usb.c b/os/hal/src/hal_serial_usb.c index adf5856c4..7d4ed05a8 100644 --- a/os/hal/src/hal_serial_usb.c +++ b/os/hal/src/hal_serial_usb.c @@ -264,6 +264,7 @@ void sduStop(SerialUSBDriver *sdup) { osalDbgCheck(sdup != NULL);
osalSysLock();
+
osalDbgAssert((sdup->state == SDU_STOP) || (sdup->state == SDU_READY),
"invalid state");
@@ -273,11 +274,13 @@ void sduStop(SerialUSBDriver *sdup) { if (sdup->config->int_in > 0U) {
usbp->in_params[sdup->config->int_in - 1U] = NULL;
}
- sdup->state = SDU_STOP;
+ sdup->config = NULL;
+ sdup->state = SDU_STOP;
/* Enforces a disconnection.*/
sduDisconnectI(sdup);
osalOsRescheduleS();
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_spi.c b/os/hal/src/hal_spi.c index 86bd78677..a16b61591 100644 --- a/os/hal/src/hal_spi.c +++ b/os/hal/src/hal_spi.c @@ -115,10 +115,14 @@ void spiStop(SPIDriver *spip) { osalDbgCheck(spip != NULL);
osalSysLock();
+
osalDbgAssert((spip->state == SPI_STOP) || (spip->state == SPI_READY),
"invalid state");
+
spi_lld_stop(spip);
- spip->state = SPI_STOP;
+ spip->config = NULL;
+ spip->state = SPI_STOP;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_uart.c b/os/hal/src/hal_uart.c index 8db39deb9..72d6221dd 100644 --- a/os/hal/src/hal_uart.c +++ b/os/hal/src/hal_uart.c @@ -120,13 +120,16 @@ void uartStop(UARTDriver *uartp) { osalDbgCheck(uartp != NULL);
osalSysLock();
+
osalDbgAssert((uartp->state == UART_STOP) || (uartp->state == UART_READY),
"invalid state");
uart_lld_stop(uartp);
- uartp->state = UART_STOP;
+ uartp->config = NULL;
+ uartp->state = UART_STOP;
uartp->txstate = UART_TX_IDLE;
uartp->rxstate = UART_RX_IDLE;
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_usb.c b/os/hal/src/hal_usb.c index bc0cf088b..f0da64978 100644 --- a/os/hal/src/hal_usb.c +++ b/os/hal/src/hal_usb.c @@ -314,12 +314,15 @@ void usbStop(USBDriver *usbp) { osalDbgCheck(usbp != NULL);
osalSysLock();
+
osalDbgAssert((usbp->state == USB_STOP) || (usbp->state == USB_READY) ||
(usbp->state == USB_SELECTED) || (usbp->state == USB_ACTIVE) ||
(usbp->state == USB_SUSPENDED),
+
"invalid state");
usb_lld_stop(usbp);
- usbp->state = USB_STOP;
+ spip->config = NULL;
+ spip->state = USB_STOP;
/* Resetting all ongoing synchronous operations.*/
for (i = 0; i <= (unsigned)USB_MAX_ENDPOINTS; i++) {
@@ -336,6 +339,7 @@ void usbStop(USBDriver *usbp) { usbp->epc[i] = NULL;
}
osalOsRescheduleS();
+
osalSysUnlock();
}
diff --git a/os/hal/src/hal_wdg.c b/os/hal/src/hal_wdg.c index 1b3ec70c6..c5797e810 100644 --- a/os/hal/src/hal_wdg.c +++ b/os/hal/src/hal_wdg.c @@ -91,10 +91,14 @@ void wdgStop(WDGDriver *wdgp) { osalDbgCheck(wdgp != NULL);
osalSysLock();
+
osalDbgAssert((wdgp->state == WDG_STOP) || (wdgp->state == WDG_READY),
"invalid state");
+
wdg_lld_stop(wdgp);
- wdgp->state = WDG_STOP;
+ wdgp->config = NULL;
+ wdgp->state = WDG_STOP;
+
osalSysUnlock();
}
|