Provisioning ExampleΒΆ

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include <cl.h>

void help(const char *app_name);
void provisioning();

int main(int argc, char **argv)
{
    int c;
        
    while ((c = getopt (argc, argv, "h?")) != -1)
    {
        switch(c)
        {           
            case 'h':
            case '?':
            default:
                help(argv[0]);
        }
    }

    provisioning();

    return 0;
}

// ******************************************

void help(const char *app_name)
{
    printf("%s.\n\n", app_name);

    printf("Provisioning example.\n\n");
    
    printf("Usage: %s [-h|-?]\n\n", app_name);
    
    printf("   -h          This help\n");

    printf("Examples:\n");
    printf("%s\n", app_name);
    
    exit(1);
}

void provisioning_status_handler(const cl_provisioning_event_t status)
{
    switch (status)
    {
        case CL_PROVISIONING_ERROR:
            printf("Provisioning error.\n");
            break;
            
        case CL_PROVISIONING_BIND_ERROR:
            printf("Bind error.\n");
            break;

        case CL_PROVISIONING_WAITING_CLIENT:
            printf("Waiting a client.\n");
            break;

        case CL_PROVISIONING_CLIENT_CONNECTED:
            printf("Client connected.\n");
            break;

        case CL_PROVISIONING_CLIENT_DISCONNECTED:
            printf("Client disconnected.\n");
            break;

        case CL_PROVISIONING_DATA_RECEIVED:
            printf("Data received.\n");
            break;

        case CL_PROVISIONING_RESPONSE_SENT:
            printf("Response sent.\n");
            break;

        case CL_PROVISIONING_FINISHED:
            printf("Finished.\n");
            break;
    }
}

/*
{"region":"[REGION]","associationToken":"[ASSOCIATION_TOKEN]","ssid":"[SSID]","password":"[PASSWORD]"}
*/
void provisioning_data_handler(const unsigned char *recvbuf, size_t recvlen)
{
    printf("Data received: %s\n", recvbuf);
}

void provisioning()
{
    cl_return_t result;

    printf("[.]. Initialize context...\n");
    strcpy(cl_handle.developer_key, DEVELOPER_KEY);
    strcpy(cl_handle.iot_brand_name, IOT_BRAND_NAME);
    strcpy(cl_handle.iot_model_name, IOT_MODEL_NAME);
    strcpy(cl_handle.iot_submodel_name, IOT_SUBMODEL_NAME);
    strcpy(cl_handle.iot_system, IOT_SYSTEM);
    
    printf("[.]. Initialize...\n");
    result = cl_provisioning_init(&cl_handle);
    switch (result) {
        case CL_SUCCESS:
            printf("[+]. Initialization ok.\n");
            break;
        
        case CL_FAILURE: 
        default:
            // OTHER
            printf("[-]. Failed to init the library provisioning.\n");
            break;
    }
    
    printf("[.]. Initialize callbacks...\n");
    cl_provisioning_get_status(provisioning_status_handler);
    cl_provisioning_get_data(provisioning_data_handler);

    printf("[.]. Start...\n");
    result = cl_provisioning_start();
    switch (result) {
        case CL_SUCCESS:
            printf("[+]. Success.\n");
            break;
        
        case CL_FAILURE: 
        default:
            // OTHER
            printf("[-]. Error during the provisioning.\n");
            break;
    }

    printf("[.]. Deinit...\n");
    result = cl_provisioning_deinit();
    switch (result) {
        case CL_SUCCESS:
            printf("[+]. Deinit ok.\n");
            break;
        
        case CL_FAILURE: 
        default:
            // OTHER
            printf("[-]. Failed to deinit the library provisioning.\n");
            break;
    }
}