diff --git a/sys/include/suit/coap.h b/sys/include/suit/coap.h index e04cdea08d..f909a61eb5 100644 --- a/sys/include/suit/coap.h +++ b/sys/include/suit/coap.h @@ -19,6 +19,8 @@ * * @brief SUIT CoAP helper API * @author Kaspar Schleiser + * @author Francisco Molina + * @author Alexandre Abadie * */ @@ -141,6 +143,19 @@ int suit_coap_get_blockwise_url(const char *url, coap_blksize_t blksize, coap_blockwise_cb_t callback, void *arg); +/** + * @brief Set the url used to fetch the SUIT manifest + * + * @param[in] url url pointer containing the full coap url to the manifest + * @param[in] len length of the url + */ +void suit_coap_set_url(const uint8_t *url, size_t len); + +/** + * @brief Trigger a SUIT udate + */ +void suit_coap_trigger(void); + #endif /* DOXYGEN */ #ifdef __cplusplus diff --git a/sys/suit/coap.c b/sys/suit/coap.c index e62771f1e1..53e1006b43 100644 --- a/sys/suit/coap.c +++ b/sys/suit/coap.c @@ -17,6 +17,8 @@ * * @author Koen Zandberg * @author Kaspar Schleiser + * @author Francisco Molina + * @author Alexandre Abadie * @} */ @@ -480,13 +482,9 @@ static ssize_t _trigger_handler(coap_pkt_t *pkt, uint8_t *buf, size_t len, code = COAP_CODE_REQUEST_ENTITY_TOO_LARGE; } else { - memcpy(_url, pkt->payload, payload_len); - _url[payload_len] = '\0'; - code = COAP_CODE_CREATED; - LOG_INFO("suit: received URL: \"%s\"\n", _url); - msg_t m = { .content.value = SUIT_MSG_TRIGGER }; - msg_send(&m, _suit_coap_pid); + LOG_INFO("suit: received URL: \"%s\"\n", (char*)pkt->payload); + suit_coap_trigger(pkt->payload, payload_len); } } else { @@ -497,6 +495,14 @@ static ssize_t _trigger_handler(coap_pkt_t *pkt, uint8_t *buf, size_t len, COAP_FORMAT_NONE, NULL, 0); } +void suit_coap_trigger(const uint8_t *url, size_t len) +{ + memcpy(_url, url, len); + _url[len] = '\0'; + msg_t m = { .content.value = SUIT_MSG_TRIGGER }; + msg_send(&m, _suit_coap_pid); +} + static const coap_resource_t _subtree[] = { #ifdef MODULE_RIOTBOOT_SLOT { "/suit/slot/active", COAP_METHOD_GET, _slot_handler, NULL },