drivers/rn2xx3: cleanup sleep function
This commit is contained in:
parent
02ae803acc
commit
76267bdfea
@ -260,22 +260,14 @@ int rn2xx3_mac_init(rn2xx3_t *dev);
|
|||||||
int rn2xx3_write_cmd(rn2xx3_t *dev);
|
int rn2xx3_write_cmd(rn2xx3_t *dev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Writes a command to the RN2XX3 device but don't wait for timeout
|
* @brief Writes a command to the RN2XX3 device but don't wait for timeout or response
|
||||||
*
|
*
|
||||||
* The module will immediately reply with a meaningful message if the command
|
* The response can be checked in the `dev->resp_buf` buffer after a small delay
|
||||||
* is valid or not.
|
* (for example 1ms).
|
||||||
*
|
*
|
||||||
* @param[in] dev RN2XX3 device descriptor
|
* @param[in] dev RN2XX3 device descriptor
|
||||||
*
|
*
|
||||||
* @return RN2XX3_OK on success
|
* @return RN2XX3_OK on success
|
||||||
* @return RN2XX3_ERR_INVALID_PARAM if command is invalid
|
|
||||||
* @return RN2XX3_ERR_NOT_JOINED if network is not joined
|
|
||||||
* @return RN2XX3_ERR_NO_FREE_CH if no free channel
|
|
||||||
* @return RN2XX3_ERR_SILENT if device is in Silent state
|
|
||||||
* @return RN2XX3_ERR_FR_CNT_REJOIN_NEEDED if frame counter rolled over
|
|
||||||
* @return RN2XX3_ERR_BUSY if MAC is not in Idle state
|
|
||||||
* @return RN2XX3_ERR_INVALID_DATA_LENGTH if payload is too large
|
|
||||||
* @return RN2XX3_ERR_KEYS_NOT_INIT if keys are not configured
|
|
||||||
*/
|
*/
|
||||||
int rn2xx3_write_cmd_no_wait(rn2xx3_t *dev);
|
int rn2xx3_write_cmd_no_wait(rn2xx3_t *dev);
|
||||||
|
|
||||||
|
|||||||
@ -222,9 +222,23 @@ int rn2xx3_sys_factory_reset(rn2xx3_t *dev)
|
|||||||
int rn2xx3_sys_sleep(rn2xx3_t *dev)
|
int rn2xx3_sys_sleep(rn2xx3_t *dev)
|
||||||
{
|
{
|
||||||
size_t p = snprintf(dev->cmd_buf, sizeof(dev->cmd_buf) - 1,
|
size_t p = snprintf(dev->cmd_buf, sizeof(dev->cmd_buf) - 1,
|
||||||
"sys sleep %lu", (unsigned long)dev->sleep);
|
"sys sleep %" PRIu32 "", dev->sleep);
|
||||||
dev->cmd_buf[p] = 0;
|
dev->cmd_buf[p] = 0;
|
||||||
if (rn2xx3_write_cmd_no_wait(dev) == RN2XX3_ERR_INVALID_PARAM) {
|
|
||||||
|
if (dev->int_state == RN2XX3_INT_STATE_SLEEP) {
|
||||||
|
DEBUG("[rn2xx3] sleep: device already in sleep mode\n");
|
||||||
|
return RN2XX3_ERR_SLEEP_MODE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* always succeeds */
|
||||||
|
rn2xx3_write_cmd_no_wait(dev);
|
||||||
|
|
||||||
|
/* Wait a little to check if the device could go to sleep. No answer means
|
||||||
|
it worked. */
|
||||||
|
xtimer_usleep(US_PER_MS);
|
||||||
|
|
||||||
|
DEBUG("[rn2xx3] RESP: %s\n", dev->resp_buf);
|
||||||
|
if (rn2xx3_process_response(dev) == RN2XX3_ERR_INVALID_PARAM) {
|
||||||
DEBUG("[rn2xx3] sleep: cannot put module in sleep mode\n");
|
DEBUG("[rn2xx3] sleep: cannot put module in sleep mode\n");
|
||||||
return RN2XX3_ERR_INVALID_PARAM;
|
return RN2XX3_ERR_INVALID_PARAM;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -178,22 +178,14 @@ int rn2xx3_write_cmd(rn2xx3_t *dev)
|
|||||||
|
|
||||||
int rn2xx3_write_cmd_no_wait(rn2xx3_t *dev)
|
int rn2xx3_write_cmd_no_wait(rn2xx3_t *dev)
|
||||||
{
|
{
|
||||||
DEBUG("[rn2xx3] CMD: %s\n", dev->cmd_buf);
|
DEBUG("[rn2xx3] CMD (NO WAIT): %s\n", dev->cmd_buf);
|
||||||
|
|
||||||
if (dev->int_state == RN2XX3_INT_STATE_SLEEP) {
|
|
||||||
DEBUG("[rn2xx3] ABORT: device is in sleep mode\n");
|
|
||||||
return RN2XX3_ERR_SLEEP_MODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex_lock(&(dev->cmd_lock));
|
mutex_lock(&(dev->cmd_lock));
|
||||||
_uart_write_str(dev, dev->cmd_buf);
|
_uart_write_str(dev, dev->cmd_buf);
|
||||||
_uart_write_str(dev, closing_seq);
|
_uart_write_str(dev, closing_seq);
|
||||||
|
|
||||||
DEBUG("[rn2xx3] RET: %s\n", dev->resp_buf);
|
|
||||||
|
|
||||||
mutex_unlock(&(dev->cmd_lock));
|
mutex_unlock(&(dev->cmd_lock));
|
||||||
|
|
||||||
return rn2xx3_process_response(dev);
|
return RN2XX3_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rn2xx3_wait_response(rn2xx3_t *dev)
|
int rn2xx3_wait_response(rn2xx3_t *dev)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user