add fn to pass ip:port as values

This commit is contained in:
Vinzenz Schroeter 2025-04-12 16:47:40 +02:00
parent 613f21310e
commit 2d3828fb2b
3 changed files with 46 additions and 14 deletions

View file

@ -2,7 +2,7 @@
#include "servicepoint.h"
int main(void) {
UdpConnection *connection = sp_connection_open("localhost:2342");
UdpConnection *connection = sp_connection_open_ipv4(127,0,0,1,2342);
if (connection == NULL)
return 1;

View file

@ -979,13 +979,32 @@ void sp_connection_free(UdpConnection */*notnull*/ connection);
* # Examples
*
* ```C
* CConnection connection = sp_connection_open("172.23.42.29:2342");
* UdpConnection connection = sp_connection_open("172.23.42.29:2342");
* if (connection != NULL)
* sp_connection_send_command(connection, sp_command_clear());
* ```
*/
UdpConnection *sp_connection_open(char */*notnull*/ host);
/**
* Creates a new instance of [UdpConnection].
*
* returns: NULL if connection fails, or connected instance
*
* # Examples
*
* ```C
* UdpConnection connection = sp_connection_open_ipv4(172, 23, 42, 29, 2342);
* if (connection != NULL)
* sp_connection_send_command(connection, sp_command_clear());
* ```
*/
UdpConnection *sp_connection_open_ipv4(uint8_t ip1,
uint8_t ip2,
uint8_t ip3,
uint8_t ip4,
uint16_t port);
/**
* Sends a [TypedCommand] to the display using the [UdpConnection].
*

View file

@ -1,5 +1,6 @@
use servicepoint::{Connection, Packet, TypedCommand, UdpConnection};
use std::ffi::{c_char, CStr};
use std::net::{Ipv4Addr, SocketAddrV4};
use std::ptr::NonNull;
/// Creates a new instance of [UdpConnection].
@ -9,7 +10,7 @@ use std::ptr::NonNull;
/// # Examples
///
/// ```C
/// CConnection connection = sp_connection_open("172.23.42.29:2342");
/// UdpConnection connection = sp_connection_open("172.23.42.29:2342");
/// if (connection != NULL)
/// sp_connection_send_command(connection, sp_command_clear());
/// ```
@ -28,17 +29,29 @@ pub unsafe extern "C" fn sp_connection_open(
Box::into_raw(Box::new(connection))
}
//#[no_mangle]
//pub unsafe extern "C" fn sp_connection_open_ipv4(
// host: SocketAddrV4,
//) -> *mut UdpConnection {
// let connection = match servicepoint::UdpConnection::open(host) {
// Err(_) => return std::ptr::null_mut(),
// Ok(value) => value,
// };
//
// Box::into_raw(Box::new(UdpConnection(connection)))
//}
/// Creates a new instance of [UdpConnection].
///
/// returns: NULL if connection fails, or connected instance
///
/// # Examples
///
/// ```C
/// UdpConnection connection = sp_connection_open_ipv4(172, 23, 42, 29, 2342);
/// if (connection != NULL)
/// sp_connection_send_command(connection, sp_command_clear());
/// ```
#[no_mangle]
pub unsafe extern "C" fn sp_connection_open_ipv4(
ip1: u8, ip2: u8, ip3: u8, ip4: u8,
port: u16,
) -> *mut UdpConnection {
let addr = SocketAddrV4::new(Ipv4Addr::from( [ip1, ip2, ip3, ip4]), port);
let connection = match UdpConnection::open(addr) {
Err(_) => return std::ptr::null_mut(),
Ok(value) => value,
};
Box::into_raw(Box::new(connection))
}
// /// Creates a new instance of [SPUdpConnection] for testing that does not actually send anything.
// ///