add handshake
This commit is contained in:
parent
113f95eab1
commit
6ba0d37d08
@ -11,6 +11,7 @@
|
|||||||
// I2C drivers
|
// I2C drivers
|
||||||
#include <ti/drivers/I2C.h>
|
#include <ti/drivers/I2C.h>
|
||||||
#include <ti/drivers/i2c/I2CCC32XX.h>
|
#include <ti/drivers/i2c/I2CCC32XX.h>
|
||||||
|
#include <mqueue.h>
|
||||||
|
|
||||||
extern void MQTTPublish(char * topic, char * payload);
|
extern void MQTTPublish(char * topic, char * payload);
|
||||||
|
|
||||||
@ -19,11 +20,17 @@ extern void MQTTPublish(char * topic, char * payload);
|
|||||||
|
|
||||||
char mqtt_topic[] = "top_pik";
|
char mqtt_topic[] = "top_pik";
|
||||||
|
|
||||||
|
extern mqd_t gsensorQueue;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
enum {Vooruit, Achteruit} richting;
|
enum {Vooruit, Achteruit} richting;
|
||||||
double timestamp;
|
double timestamp;
|
||||||
int8_t g;
|
int8_t g;
|
||||||
} pakketje;
|
} gsensorMsgQueue;
|
||||||
|
//typedef struct {
|
||||||
|
// enum {Vooruit, Achteruit} richting;
|
||||||
|
// double timestamp;
|
||||||
|
// int8_t g;
|
||||||
|
//} pakketje;
|
||||||
|
|
||||||
void * GSensorTask(void *args) {
|
void * GSensorTask(void *args) {
|
||||||
|
|
||||||
@ -53,16 +60,18 @@ void * GSensorTask(void *args) {
|
|||||||
// publish read into mailbox (defined in mqtt.c)
|
// publish read into mailbox (defined in mqtt.c)
|
||||||
timer += 0.1;
|
timer += 0.1;
|
||||||
|
|
||||||
// pakketje pakket;
|
gsensorMsgQueue pakket;
|
||||||
// pakket.richting = (buffer_rcv < 0) ? Achteruit : Vooruit;
|
pakket.richting = (buffer_rcv < 0) ? Achteruit : Vooruit;
|
||||||
// pakket.timestamp = timer;
|
pakket.timestamp = timer;
|
||||||
// pakket.g = abs(buffer_rcv);
|
pakket.g = abs(buffer_rcv);
|
||||||
|
|
||||||
char payload[150];
|
mq_send(gsensorQueue, (const char*)&pakket, sizeof(gsensorMsgQueue), 0);
|
||||||
|
|
||||||
sprintf(&payload, "handshake (richting: %s; timestamp: %.1f)", (buffer_rcv < 0) ? "Achteruit" : "Vooruit", timer);
|
// char payload[150];
|
||||||
|
//
|
||||||
MQTTPublish(&mqtt_topic, payload);
|
// sprintf(&payload, "handshake (richting: %s; timestamp: %.1f; g: %d)", (buffer_rcv < 0) ? "Achteruit" : "Vooruit", timer, abs(buffer_rcv));
|
||||||
|
//
|
||||||
|
// MQTTPublish(&mqtt_topic, &payload);
|
||||||
// MQTTPublish(pakket);
|
// MQTTPublish(pakket);
|
||||||
|
|
||||||
usleep(100000U);
|
usleep(100000U);
|
||||||
|
|||||||
104
src/handshake.c
Normal file
104
src/handshake.c
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* handshake.c
|
||||||
|
*
|
||||||
|
* Created on: 29 Oct 2020
|
||||||
|
* Author: MReenen
|
||||||
|
*/
|
||||||
|
#include <mqueue.h>
|
||||||
|
#include <ti/drivers/GPIO.h>
|
||||||
|
#include "ti_drivers_config.h"
|
||||||
|
|
||||||
|
#define TIME_BETWEEN_DIRECTION_CHANGE 1.0
|
||||||
|
#define G_THUSHOLD 10
|
||||||
|
#define TIMEOUT_DURATION 11
|
||||||
|
|
||||||
|
const char yourName[] = "Mats";
|
||||||
|
#define YOUR_STUDENTNUMBER "0964590"
|
||||||
|
#define COLLIGE_STUDENTNUMBER "1234567"
|
||||||
|
|
||||||
|
#define REPLY_TOPIC(n) "ems20/handshake/" n "/reply"
|
||||||
|
#define REQUEST_TOPIC(n) "ems20/handshake/" n "/request"
|
||||||
|
|
||||||
|
mqd_t gsensorQueue;
|
||||||
|
bool handshakeRequestAcrive = false;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
char yourReply[] = REPLY_TOPIC(YOUR_STUDENTNUMBER);
|
||||||
|
char yourRequest[] = REQUEST_TOPIC(YOUR_STUDENTNUMBER);
|
||||||
|
} topics;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
enum {Vooruit, Achteruit} richting;
|
||||||
|
double timestamp;
|
||||||
|
int8_t g;
|
||||||
|
} gsensorMsgQueue;
|
||||||
|
|
||||||
|
double lastBack = -TIME_BETWEEN_DIRECTION_CHANGE - 1;
|
||||||
|
|
||||||
|
extern void MQTTPublish(char * topic, char * payload);
|
||||||
|
|
||||||
|
void MQTTCB_reply(char* topic, char* payload){
|
||||||
|
if(handshakeRequestAcrive){
|
||||||
|
//TODO: send playload + " heeft je hand geschud" via UDP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MQTTCB_reply(char* topic, char* payload){
|
||||||
|
if(handshakeRequestAcrive){
|
||||||
|
//TODO: send playload + " heeft je hand geschud" via UDP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void handshake(){
|
||||||
|
handshakeRequestAcrive = true;
|
||||||
|
GPIO_write(CONFIG_LED_R, 1);
|
||||||
|
MQTTPublish(&topics.yourRequest, &yourName);
|
||||||
|
//TODO: "Handhake aangeboden" stuuren via UDP
|
||||||
|
//TODO: subscribe to your replay
|
||||||
|
//TODO: unsubscripe from colega request
|
||||||
|
}
|
||||||
|
|
||||||
|
void * handshakeTask(void *arg0){
|
||||||
|
// create massage queue
|
||||||
|
mq_attr attr;
|
||||||
|
attr.mq_maxmsg = 10;
|
||||||
|
attr.mq_msgsize = sizeof(gsensorMsgQueue);
|
||||||
|
gsensorQueue = mq_open("gsensorQueue", O_CREAT, 0, &attr);
|
||||||
|
if(((int)gsensorQueue) <= 0){
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
GPIO_write(CONFIG_LED_R, 0);
|
||||||
|
|
||||||
|
gsensorMsgQueue queueElement;
|
||||||
|
double timeoutUntil = -1;
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
mq_receive(gsensorQueue, (char*)&queueElement, sizeof(gsensorMsgQueue), NULL);
|
||||||
|
|
||||||
|
if(timeoutUntil >= queueElement.timestamp){
|
||||||
|
if(timeoutUntil <= queueElement.timestamp + 1){
|
||||||
|
handshakeRequestAcrive = false;
|
||||||
|
GPIO_write(CONFIG_LED_R, 0);
|
||||||
|
//TODO: unsubscribe from your replay
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO: subscripe to colega request
|
||||||
|
|
||||||
|
if(queueElement.g > G_THUSHOLD){
|
||||||
|
if(queueElement.richting == Vooruit && queueElement.timestamp - lastBack < TIME_BETWEEN_DIRECTION_CHANGE){
|
||||||
|
timeoutUntil = queueElement.timestamp + TIMEOUT_DURATION;
|
||||||
|
handshake();
|
||||||
|
}
|
||||||
|
if(queueElement.richting == Achteruit){
|
||||||
|
lastBack = queueElement.timestamp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -51,6 +51,7 @@
|
|||||||
|
|
||||||
extern void * GSensorTask(void *arg0);
|
extern void * GSensorTask(void *arg0);
|
||||||
extern void * MQTTTask(void *arg0);
|
extern void * MQTTTask(void *arg0);
|
||||||
|
extern void * handshakeTask(void *arg0);
|
||||||
|
|
||||||
/* Stack size in bytes */
|
/* Stack size in bytes */
|
||||||
#define BIGOLTHREADSTACK 4096
|
#define BIGOLTHREADSTACK 4096
|
||||||
@ -67,6 +68,7 @@ int main(void)
|
|||||||
/* Call board init functions */
|
/* Call board init functions */
|
||||||
Board_init();
|
Board_init();
|
||||||
I2C_init();
|
I2C_init();
|
||||||
|
GPIO_init();
|
||||||
|
|
||||||
/* Initialize the attributes structure with default values */
|
/* Initialize the attributes structure with default values */
|
||||||
pthread_attr_init(&attrs);
|
pthread_attr_init(&attrs);
|
||||||
@ -107,6 +109,19 @@ int main(void)
|
|||||||
while(1);
|
while(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ==============================================
|
||||||
|
=== tread for Handshake ======================
|
||||||
|
==============================================
|
||||||
|
*/
|
||||||
|
pthread_t Handshakehread;
|
||||||
|
retc = pthread_create(&Handshakehread, &attrs, handshakeTask, NULL);
|
||||||
|
if (retc != 0) {
|
||||||
|
/* pthread_create() failed */
|
||||||
|
// LOG_CRITICAL("main(): failed to create tread for MQTT");
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
|
||||||
BIOS_start();
|
BIOS_start();
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user