Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static void *softPwmThread (void *arg)
- {
- int pin, mark, space ;
- struct sched_param param ;
- param.sched_priority = sched_get_priority_max (SCHED_RR) ;
- pthread_setschedparam (pthread_self (), SCHED_RR, ¶m) ;
- pin = *((int *)arg) ;
- free (arg) ;
- pin = newPin ;
- newPin = -1 ;
- piHiPri (90) ; //Adjusts priority - 99max - 1min
- for (;;)
- {
- mark = marks [pin] ;
- space = range [pin] - mark ;
- if (mark != 0)
- digitalWrite (pin, HIGH) ;
- delayMicroseconds (mark * 100) ;
- if (space != 0)
- digitalWrite (pin, LOW) ;
- delayMicroseconds (space * 100) ;
- }
- return NULL ;
- }
- // Publisher code, starts a bunch of callbacks
- int rover::RoverPahoMQTT::publish (void)
- {
- this->flushFlags ();
- this->client = new MQTTAsync;
- this->conn_opts = MQTTAsync_connectOptions_initializer;
- int rc;
- /* Construct the address */
- char my_addr[20];
- this->constructAddress (my_addr);
- MQTTAsync_create ( &(this->client),
- my_addr,
- this->defaultRoverMQTTConfigure.clientID,
- MQTTCLIENT_PERSISTENCE_NONE,
- NULL);
- MQTTAsync_setCallbacks (this->client, NULL, rover::RoverPahoMQTT::onConnectionLost_Redirect, NULL, NULL);
- conn_opts.keepAliveInterval = 20;
- conn_opts.cleansession = 1;
- conn_opts.onSuccess = rover::RoverPahoMQTT::onPublisherConnect_Redirect;
- conn_opts.onFailure = rover::RoverPahoMQTT::onConnectFailure_Redirect;
- conn_opts.context = this;
- if ((rc = MQTTAsync_connect(this->client, &(this->conn_opts))) != MQTTASYNC_SUCCESS)
- {
- //printf("Failed to start connect, return code %dn", rc);
- this->defaultReturnCodes.rc_publish = rc;
- //return rc;
- }
- else
- {
- while (!(this->defaultRoverMQTTFlags.f_mqtt_finished))
- usleep(this->defaultRoverMQTTConfigure.timeout);
- }
- MQTTAsync_destroy(&(this->client));
- return this->defaultReturnCodes.rc_publish;
- }
- //Subscriber code, starts a bunch of callbacks
- int rover::RoverPahoMQTT::subscribe (void)
- {
- this->flushFlags ();
- this->client = new MQTTAsync;
- this->conn_opts = MQTTAsync_connectOptions_initializer;
- this->disc_opts = MQTTAsync_disconnectOptions_initializer;
- this->disc_opts.context = this; //Important to pass context with options.
- int rc;
- int ch;
- /* Construct the address */
- char my_addr[20];
- this->constructAddress (my_addr);
- //printf("%sn",my_addr);
- MQTTAsync_create ( &(this->client),
- my_addr,
- this->defaultRoverMQTTConfigure.clientID,
- MQTTCLIENT_PERSISTENCE_NONE,
- NULL);
- MQTTAsync_setCallbacks(this->client, this, rover::RoverPahoMQTT::onConnectionLost_Redirect,
- rover::RoverPahoMQTT::onSubscriberMessageArrived_Redirect,
- NULL);
- this->conn_opts.keepAliveInterval = 20;
- this->conn_opts.cleansession = 1;
- this->conn_opts.onSuccess = rover::RoverPahoMQTT::onSubscriberConnect_Redirect;
- this->conn_opts.onFailure = rover::RoverPahoMQTT::onSubscribeFailure_Redirect;
- this->conn_opts.context = this;
- if ((rc = MQTTAsync_connect(this->client, &(this->conn_opts))) != MQTTASYNC_SUCCESS)
- {
- //printf("Failed to start connect, return code %dn", rc);
- this->defaultReturnCodes.rc_subscribe = rc;
- }
- else
- {
- while (!this->defaultRoverMQTTFlags.f_mqtt_subscribed)
- {
- usleep(this->defaultRoverMQTTConfigure.timeout);
- }
- }
- if (this->defaultRoverMQTTFlags.f_mqtt_finished)
- {
- MQTTAsync_destroy(&(this->client));
- }
- return this->defaultReturnCodes.rc_subscribe;
- }
- int MQTTAsync_connect(MQTTAsync handle, const MQTTAsync_connectOptions* options)
- {
- MQTTAsyncs* m = handle;
- int rc = MQTTASYNC_SUCCESS;
- MQTTAsync_queuedCommand* conn;
- FUNC_ENTRY;
- if (options == NULL)
- {
- rc = MQTTASYNC_NULL_PARAMETER;
- goto exit;
- }
- if (strncmp(options->struct_id, "MQTC", 4) != 0 || options->struct_version < 0 || options->struct_version > 5)
- {
- rc = MQTTASYNC_BAD_STRUCTURE;
- goto exit;
- }
- if (options->will) /* check validity of will options structure */
- {
- if (strncmp(options->will->struct_id, "MQTW", 4) != 0 || (options->will->struct_version != 0 && options->will->struct_version != 1))
- {
- rc = MQTTASYNC_BAD_STRUCTURE;
- goto exit;
- }
- if (options->will->qos < 0 || options->will->qos > 2)
- {
- rc = MQTTASYNC_BAD_QOS;
- goto exit;
- }
- }
- if (options->struct_version != 0 && options->ssl) /* check validity of SSL options structure */
- {
- if (strncmp(options->ssl->struct_id, "MQTS", 4) != 0 || options->ssl->struct_version < 0 || options->ssl->struct_version > 1)
- {
- rc = MQTTASYNC_BAD_STRUCTURE;
- goto exit;
- }
- }
- if ((options->username && !UTF8_validateString(options->username)) ||
- (options->password && !UTF8_validateString(options->password)))
- {
- rc = MQTTASYNC_BAD_UTF8_STRING;
- goto exit;
- }
- m->connect.onSuccess = options->onSuccess;
- m->connect.onFailure = options->onFailure;
- m->connect.context = options->context;
- m->connectTimeout = options->connectTimeout;
- tostop = 0;
- if (sendThread_state != STARTING && sendThread_state != RUNNING)
- {
- MQTTAsync_lock_mutex(mqttasync_mutex);
- sendThread_state = STARTING;
- Thread_start(MQTTAsync_sendThread, NULL);
- MQTTAsync_unlock_mutex(mqttasync_mutex);
- }
- if (receiveThread_state != STARTING && receiveThread_state != RUNNING)
- {
- MQTTAsync_lock_mutex(mqttasync_mutex);
- receiveThread_state = STARTING;
- Thread_start(MQTTAsync_receiveThread, handle);
- MQTTAsync_unlock_mutex(mqttasync_mutex);
- }
- m->c->keepAliveInterval = options->keepAliveInterval;
- setRetryLoopInterval(options->keepAliveInterval);
- m->c->cleansession = options->cleansession;
- m->c->maxInflightMessages = options->maxInflight;
- if (options->struct_version >= 3)
- m->c->MQTTVersion = options->MQTTVersion;
- else
- m->c->MQTTVersion = 0;
- if (options->struct_version >= 4)
- {
- m->automaticReconnect = options->automaticReconnect;
- m->minRetryInterval = options->minRetryInterval;
- m->maxRetryInterval = options->maxRetryInterval;
- }
- if (m->c->will)
- {
- free(m->c->will->payload);
- free(m->c->will->topic);
- free(m->c->will);
- m->c->will = NULL;
- }
- if (options->will && (options->will->struct_version == 0 || options->will->struct_version == 1))
- {
- const void* source = NULL;
- m->c->will = malloc(sizeof(willMessages));
- if (options->will->message || (options->will->struct_version == 1 && options->will->payload.data))
- {
- if (options->will->struct_version == 1 && options->will->payload.data)
- {
- m->c->will->payloadlen = options->will->payload.len;
- source = options->will->payload.data;
- }
- else
- {
- m->c->will->payloadlen = strlen(options->will->message);
- source = (void*)options->will->message;
- }
- m->c->will->payload = malloc(m->c->will->payloadlen);
- memcpy(m->c->will->payload, source, m->c->will->payloadlen);
- }
- else
- {
- m->c->will->payload = NULL;
- m->c->will->payloadlen = 0;
- }
- m->c->will->qos = options->will->qos;
- m->c->will->retained = options->will->retained;
- m->c->will->topic = MQTTStrdup(options->will->topicName);
- }
- #if defined(OPENSSL)
- if (m->c->sslopts)
- {
- if (m->c->sslopts->trustStore)
- free((void*)m->c->sslopts->trustStore);
- if (m->c->sslopts->keyStore)
- free((void*)m->c->sslopts->keyStore);
- if (m->c->sslopts->privateKey)
- free((void*)m->c->sslopts->privateKey);
- if (m->c->sslopts->privateKeyPassword)
- free((void*)m->c->sslopts->privateKeyPassword);
- if (m->c->sslopts->enabledCipherSuites)
- free((void*)m->c->sslopts->enabledCipherSuites);
- free((void*)m->c->sslopts);
- m->c->sslopts = NULL;
- }
- if (options->struct_version != 0 && options->ssl)
- {
- m->c->sslopts = malloc(sizeof(MQTTClient_SSLOptions));
- memset(m->c->sslopts, '