-
Notifications
You must be signed in to change notification settings - Fork 636
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #139 from AWSSteveHa/master
Add Jobs support
- Loading branch information
Showing
31 changed files
with
3,118 additions
and
61 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,267 @@ | ||
/* | ||
* Copyright 2015-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"). | ||
* You may not use this file except in compliance with the License. | ||
* A copy of the License is located at | ||
* | ||
* http://aws.amazon.com/apache2.0 | ||
* | ||
* or in the "license" file accompanying this file. This file is distributed | ||
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either | ||
* express or implied. See the License for the specific language governing | ||
* permissions and limitations under the License. | ||
*/ | ||
|
||
/** | ||
* @file aws_iot_jobs_interface.h | ||
* @brief An interface for interacting with the AWS IoT Jobs system. | ||
* | ||
* This file defines utility functions for interacting with the AWS IoT jobs | ||
* APIs over MQTT. It provides functions for managing subscriptions to job | ||
* related topics and for sending queries and updates requests for jobs. | ||
* Callers are responsible for managing the subscriptions and associating | ||
* responses with the queries and update messages. | ||
*/ | ||
#ifndef AWS_IOT_JOBS_INTERFACE_H_ | ||
#define AWS_IOT_JOBS_INTERFACE_H_ | ||
|
||
#ifdef DISABLE_IOT_JOBS | ||
#error "Jobs API is disabled" | ||
#endif | ||
|
||
/** | ||
* @file aws_iot_jobs_interface.h | ||
* @brief Functions for interacting with the AWS IoT Jobs system. | ||
*/ | ||
#include "aws_iot_mqtt_client_interface.h" | ||
#include "aws_iot_jobs_topics.h" | ||
#include "aws_iot_jobs_types.h" | ||
#include "aws_iot_error.h" | ||
#include "aws_iot_json_utils.h" | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
/** | ||
* @brief Subscribe to jobs messages for the given thing and/or jobs. | ||
* | ||
* The function can be used to subscribe to all job related messages. To subscribe | ||
* to messages not related to a job the jobId passed should be null. The jobId | ||
* can also be "+" to subscribe to messages related to any job, or "$next" to | ||
* indicate the next pending job. | ||
* | ||
* See also #aws_iot_jobs_subscribe_to_all_job_messages to subscribe to all possible | ||
* messages in one operation. | ||
* | ||
* \note Subscribing with the same thing, job and topic type more than | ||
* once is undefined. | ||
* | ||
* \param pClient the client to use | ||
* \param qos the qos to use | ||
* \param thingName the name of the thing to subscribe to | ||
* \param jobId the job id to subscribe to. To subscribe to messages not related to | ||
* a job the jobId passed should be null. The jobId can also be "+" to subscribe to | ||
* messages related to any job, or "$next" to indicate the next pending job. | ||
* \param topicType the topic type to subscribe to | ||
* \param replyType the reply topic type to subscribe to | ||
* \param pApplicationHandler the callback handler | ||
* \param pApplicationHandlerData the callback context data. This must remain valid at least until | ||
* aws_iot_jobs_unsubscribe_from_job_messages is called. | ||
* \param topicBuffer. A buffer to use to hold the topic name for the subscription. This buffer | ||
* must remain valid at least until aws_iot_jobs_unsubscribe_from_job_messages is called. | ||
* \param topicBufferSize the size of the topic buffer. The function will fail | ||
* with LIMIT_EXCEEDED_ERROR if this is too small. | ||
* \return the result of subscribing to the topic (see aws_iot_mqtt_subscribe) | ||
*/ | ||
IoT_Error_t aws_iot_jobs_subscribe_to_job_messages( | ||
AWS_IoT_Client *pClient, QoS qos, | ||
const char *thingName, | ||
const char *jobId, | ||
AwsIotJobExecutionTopicType topicType, | ||
AwsIotJobExecutionTopicReplyType replyType, | ||
pApplicationHandler_t pApplicationHandler, | ||
void *pApplicationHandlerData, | ||
char *topicBuffer, | ||
uint16_t topicBufferSize); | ||
|
||
/** | ||
* @brief Subscribe to all job messages. | ||
* | ||
* Subscribe to all job messages for the given thing. | ||
* | ||
* \note Subscribing with the same thing more than once is undefined. | ||
* | ||
* \param pClient the client to use | ||
* \param qos the qos to use | ||
* \param thingName the name of the thing to subscribe to | ||
* \param pApplicationHandler the callback handler | ||
* \param pApplicationHandlerData the callback context data. This must remain valid at least until | ||
* aws_iot_jobs_unsubscribe_from_job_messages is called. | ||
* \param topicBuffer. A buffer to use to hold the topic name for the subscription. This buffer | ||
* must remain valid at least until aws_iot_jobs_unsubscribe_from_job_messages is called. | ||
* \param topicBufferSize the size of the topic buffer. The function will fail | ||
* with LIMIT_EXCEEDED_ERROR if this is too small. | ||
* \return the result of subscribing to the topic (see aws_iot_mqtt_subscribe) | ||
*/ | ||
IoT_Error_t aws_iot_jobs_subscribe_to_all_job_messages( | ||
AWS_IoT_Client *pClient, QoS qos, | ||
const char *thingName, | ||
pApplicationHandler_t pApplicationHandler, | ||
void *pApplicationHandlerData, | ||
char *topicBuffer, | ||
uint16_t topicBufferSize); | ||
|
||
/** | ||
* @brief Unsubscribe from a job subscription | ||
* | ||
* Remove the subscription created using #aws_iot_jobs_subscribe_to_job_messages or | ||
* #aws_iot_jobs_subscribe_to_all_job_messages. | ||
* | ||
* \param pClient the client to use | ||
* \param topicBuffer the topic buffer passed to #aws_iot_jobs_subscribe_to_job_messages or | ||
* #aws_iot_jobs_subscribe_to_all_job_messages when the subscription was created. | ||
* \return #SUCCESS or the first error encountered. | ||
*/ | ||
IoT_Error_t aws_iot_jobs_unsubscribe_from_job_messages( | ||
AWS_IoT_Client *pClient, | ||
char *topicBuffer); | ||
|
||
/** | ||
* @brief Send a query to one of the job query APIs. | ||
* | ||
* Send a query to one of the job query APIs. If jobId is null this | ||
* requests a list of pending jobs for the thing. If jobId is | ||
* not null then it sends a query for the details of that job. | ||
* If jobId is $next then it sends a query for the details for | ||
* the next pending job. | ||
* | ||
* \param pClient the client to use | ||
* \param qos the qos to use | ||
* \param thingName the thing name to query for | ||
* \param jobId the id of the job to query for. If null a list | ||
* of all pending jobs for the thing is requested. | ||
* \param clientToken the client token to use for the query. | ||
* If null no clientToken is sent resulting in an empty message. | ||
* \param topicBuffer the topic buffer to use. This may be discarded | ||
* as soon as this function returns | ||
* \param topicBufferSize the size of topicBuffer | ||
* \param messageBuffer the message buffer to use. May be NULL | ||
* if clientToken is NULL | ||
* \param messageBufferSize the size of messageBuffer | ||
* \param topicType the topic type to publish query to | ||
* \return LIMIT_EXCEEDED_ERROR if the topic buffer or | ||
* message buffer is too small, NULL_VALUE_ERROR if the any of | ||
* the required inputs are NULL, otherwise the result | ||
* of the mqtt publish | ||
*/ | ||
IoT_Error_t aws_iot_jobs_send_query( | ||
AWS_IoT_Client *pClient, QoS qos, | ||
const char *thingName, | ||
const char *jobId, | ||
const char *clientToken, | ||
char *topicBuffer, | ||
uint16_t topicBufferSize, | ||
char *messageBuffer, | ||
size_t messageBufferSize, | ||
AwsIotJobExecutionTopicType topicType); | ||
|
||
/** | ||
* @brief Send a start next command to the job start-next API. | ||
* | ||
* Send a start next command to the job start-next API. | ||
* | ||
* \param pClient the client to use | ||
* \param qos the qos to use | ||
* \param thingName the thing name to query for | ||
* \param startNextRequest the start-next request to send | ||
* \param topicBuffer the topic buffer to use. This may be discarded | ||
* as soon as this function returns | ||
* \param topicBufferSize the size of topicBuffer | ||
* \param messageBuffer the message buffer to use. May be NULL | ||
* if clientToken is NULL | ||
* \param messageBufferSize the size of messageBuffer | ||
* \return LIMIT_EXCEEDED_ERROR if the topic buffer or | ||
* message buffer is too small, NULL_VALUE_ERROR if the any of | ||
* the required inputs are NULL, otherwise the result | ||
* of the mqtt publish | ||
*/ | ||
IoT_Error_t aws_iot_jobs_start_next( | ||
AWS_IoT_Client *pClient, QoS qos, | ||
const char *thingName, | ||
const AwsIotStartNextPendingJobExecutionRequest *startNextRequest, | ||
char *topicBuffer, | ||
uint16_t topicBufferSize, | ||
char *messageBuffer, | ||
size_t messageBufferSize); | ||
|
||
/** | ||
* @brief Send a describe job query to the job query API. | ||
* | ||
* Send a describe job query to the job query API. If jobId is null this | ||
* requests a list of pending jobs for the thing. If jobId is | ||
* not null then it sends a query for the details of that job. | ||
* | ||
* \param pClient the client to use | ||
* \param qos the qos to use | ||
* \param thingName the thing name to query for | ||
* \param jobId the id of the job to query for. If null a list | ||
* of all pending jobs for the thing is requested. | ||
* \param describeRequest the describe request to send | ||
* \param topicBuffer the topic buffer to use. This may be discarded | ||
* as soon as this function returns | ||
* \param topicBufferSize the size of topicBuffer | ||
* \param messageBuffer the message buffer to use. May be NULL | ||
* if clientToken is NULL | ||
* \param messageBufferSize the size of messageBuffer | ||
* \return LIMIT_EXCEEDED_ERROR if the topic buffer or | ||
* message buffer is too small, NULL_VALUE_ERROR if the any of | ||
* the required inputs are NULL, otherwise the result | ||
* of the mqtt publish | ||
*/ | ||
IoT_Error_t aws_iot_jobs_describe( | ||
AWS_IoT_Client *pClient, QoS qos, | ||
const char *thingName, | ||
const char *jobId, | ||
const AwsIotDescribeJobExecutionRequest *describeRequest, | ||
char *topicBuffer, | ||
uint16_t topicBufferSize, | ||
char *messageBuffer, | ||
size_t messageBufferSize); | ||
|
||
/** | ||
* @brief Send an update about a job execution. | ||
* | ||
* Send an update about a job execution. | ||
* | ||
* \param pClient the client to use | ||
* \param qos the qos to use | ||
* \param thingName the thing name to send the update for | ||
* \param jobId the id of the job to send the update for | ||
* \param updateRequest the update request to send | ||
* \param topicBuffer the topic buffer to use. This may be discarded | ||
* as soon as this function returns | ||
* \param topicBufferSize the size of topicBuffer | ||
* \param messageBuffer the message buffer to use. | ||
* \param messageBufferSize the size of messageBuffer | ||
* \return LIMIT_EXCEEDED_ERROR if the topic buffer or | ||
* message buffer is too small, NULL_VALUE_ERROR if the any of | ||
* the required inputs are NULL, otherwise the result | ||
* of the mqtt publish | ||
*/ | ||
IoT_Error_t aws_iot_jobs_send_update( | ||
AWS_IoT_Client *pClient, QoS qos, | ||
const char *thingName, | ||
const char *jobId, | ||
const AwsIotJobExecutionUpdateRequest *updateRequest, | ||
char *topicBuffer, | ||
uint16_t topicBufferSize, | ||
char *messageBuffer, | ||
size_t messageBufferSize); | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#endif /* AWS_IOT_JOBS_INTERFACE_H_ */ |
Oops, something went wrong.