118 lines
4.4 KiB
Markdown
118 lines
4.4 KiB
Markdown
# UDP broadcast
|
|
|
|
## Introduction
|
|
|
|
The UDP broadcast code is used to handle incoming UDP datagrams.
|
|
there are currently 2 types of datagrams it processes:
|
|
- broadcasts: "Where are you?v1.0", replies with current owner details.
|
|
- change of details: "func1:name: ..., surname: ...", replies with changed owner details.
|
|
|
|
It also writes the current owner's name on the screen and updates it everytime it's changed.
|
|
|
|
To use the Qt application for this part of the project you can use [App](https://github.com/Sani7/2023-Webservices_And_Applications/releases/tag/V1.1)
|
|
|
|
## Table of contents
|
|
- [Introduction](#introduction)
|
|
- [Table of contents](#table-of-contents)
|
|
- [Usage of UDP broadcast](#usage-of-udp-broadcast)
|
|
- [Initialization of UDP broadcast](#initialization-of-udp-broadcast)
|
|
- [Initialization of UDP connection](#initialization-of-udp-connection)
|
|
- [Owner details interface](#owner-details-interface)
|
|
- [Setting owner details](#setting-owner-details)
|
|
- [Getting owner details](#getting-owner-details)
|
|
|
|
## Usage of UDP broadcast
|
|
### Initialization of UDP broadcast
|
|
The 'udp_broadcast_init(uint16_t x_pos, uint16_t y_pos)' function does 4 things:
|
|
1. It initializes the coördinates of where the owner's name has to be written on the LCD.
|
|
2. [It initializes the UDP connection](#initialization-of-udp-connection)
|
|
3. It initializes the owner's details with a default name.
|
|
4. Returns the error value of [udp_broadcast_connection_init()](#initialization-of-udp-connection). This way the user can use some code to check whether the "connection" was initialized correctly.
|
|
```c
|
|
#include "UDP_broadcast.h'
|
|
|
|
...
|
|
|
|
void main(void){
|
|
...
|
|
if (udp_broadcast_init(270,255) != ERR_OK){
|
|
...
|
|
}
|
|
...
|
|
}
|
|
```
|
|
|
|
### Initialization of UDP connection
|
|
The 'udp_broadcast_connection_init()' funciton does 2 things:
|
|
1. Initializes the UDP "connection" so that incoming datagrams can be processed and replied to. It binds to port 64000 and listens to every IP-address in the local network.
|
|
2. returns the LWIP error code so that [err_t udp_broadcast_init(uint16_t x_pos, uint16_t y_pos)](#initialization-of-udp-broadcast) knows the "connection" is initializes correctly
|
|
|
|
This function can be used seperately from [err_t udp_broadcast_init(uint16_t x_pos, uint16_t y_pos)](#initialization-of-udp-broadcast), this gives the possibility to try "connecting" again after the first time failed.
|
|
```c
|
|
#include "UDP_broadcast.h'
|
|
|
|
...
|
|
|
|
void main(void){
|
|
...
|
|
if (udp_broadcast_init(10,255) == ERR_OK){
|
|
goto connected;
|
|
}
|
|
LOG_WARN(TAG,"error initializing udp connection, trying again in 500ms");
|
|
HAL_Delay(500);
|
|
if(udp_broadcast_connection_init() != ERR_OK){
|
|
LOG_WARN(TAG,"error initializing udp connection, check warnings from udp_broadcast_init() or udp_broadcast_connection_init()");
|
|
}
|
|
|
|
connected:
|
|
...
|
|
}
|
|
|
|
```
|
|
### Owner details interface
|
|
The interface to ask for the owner's details and change them is a modified version of the [Qt application](https://github.com/wimdams/Device_finder) Wim Dams build. His only has the functionality to ask for the owner's details. The changed version can be found at [App](https://github.com/Sani7/2023-Webservices_And_Applications/releases/tag/V1.1)
|
|
|
|
Just because the owner's details might want to be used in other code, some functions have been written for obtaining these in the STM32 code aswell.
|
|
#### Setting owner details
|
|
THe 'udp_broadcast_set_owner_details(const char* , const char*)' function does 2 things:
|
|
1. Set the owner details, the order of the parameters is: name, surname
|
|
2. Return 1 if the owner's details have been set correctly and 0 if not.
|
|
```c
|
|
#include "UDP_broadcast.h'
|
|
|
|
...
|
|
|
|
void main(void){
|
|
...
|
|
if (udp_broadcast_set_owner_details("Joran", "Van Nieuwenhoven") != ERR_OK){
|
|
...
|
|
}
|
|
...
|
|
}
|
|
```
|
|
#### Getting owner details
|
|
There are 3 functions:
|
|
- udp_broadcast_get_owner_details_name(): returns the owner's name.
|
|
- udp_broadcast_get_owner_details_surname(): returns the owner's surname.
|
|
- udp_broadcast_get_owner_details_reply(): returns what would be replied to a UDP broadcast with datagram "Where are you?v1.0".
|
|
|
|
```c
|
|
#include <string.h>
|
|
#include "UDP_broadcast.h'
|
|
|
|
...
|
|
|
|
void main(void){
|
|
...
|
|
char name[20];
|
|
char surname[20];
|
|
char reply[120];
|
|
|
|
strncp(name, udp_broadcast_get_owner_details_name(), sizeof(name) - 1);
|
|
|
|
strncp(surname, udp_broadcast_get_owner_details_surname(), sizeof(surname) - 1);
|
|
|
|
strncp(reply, udp_broadcast_get_owner_details_reply(), sizeof(reply) - 1);
|
|
...
|
|
}
|
|
``` |