1# 2# pyliblo - Python bindings for the liblo OSC library 3# 4# Copyright (C) 2007-2011 Dominic Sacré <dominic.sacre@gmx.de> 5# 6# This program is free software; you can redistribute it and/or modify 7# it under the terms of the GNU Lesser General Public License as 8# published by the Free Software Foundation; either version 2.1 of the 9# License, or (at your option) any later version. 10# 11 12from libc.stdint cimport int32_t, uint32_t, int64_t, uint8_t 13from libc.stdio cimport const_char 14 15 16cdef extern from 'lo/lo.h': 17 # type definitions 18 ctypedef void *lo_server 19 ctypedef void *lo_server_thread 20 ctypedef void *lo_method 21 ctypedef void *lo_address 22 ctypedef void *lo_message 23 ctypedef void *lo_blob 24 ctypedef void *lo_bundle 25 26 ctypedef struct lo_timetag: 27 uint32_t sec 28 uint32_t frac 29 30 ctypedef union lo_arg: 31 int32_t i 32 int64_t h 33 float f 34 double d 35 unsigned char c 36 char s 37 uint8_t m[4] 38 lo_timetag t 39 40 cdef enum: 41 LO_DEFAULT 42 LO_UDP 43 LO_UNIX 44 LO_TCP 45 46 ctypedef void(*lo_err_handler)(int num, const_char *msg, const_char *where) 47 ctypedef int(*lo_method_handler)(const_char *path, const_char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) 48 ctypedef int(*lo_bundle_start_handler)(lo_timetag time, void *user_data) 49 ctypedef int(*lo_bundle_end_handler)(void *user_data) 50 51 # send 52 int lo_send_message_from(lo_address targ, lo_server serv, char *path, lo_message msg) 53 int lo_send_bundle_from(lo_address targ, lo_server serv, lo_bundle b) 54 55 # server 56 lo_server lo_server_new_with_proto(char *port, int proto, lo_err_handler err_h) 57 void lo_server_free(lo_server s) 58 char *lo_server_get_url(lo_server s) 59 int lo_server_get_port(lo_server s) 60 int lo_server_get_protocol(lo_server s) 61 lo_method lo_server_add_method(lo_server s, char *path, char *typespec, lo_method_handler h, void *user_data) 62 void lo_server_del_method(lo_server s, char *path, char *typespec) 63 int lo_server_add_bundle_handlers(lo_server s, lo_bundle_start_handler sh, lo_bundle_end_handler eh, void *user_data) 64 int lo_server_recv(lo_server s) nogil 65 int lo_server_recv_noblock(lo_server s, int timeout) nogil 66 int lo_server_get_socket_fd(lo_server s) 67 68 # server thread 69 lo_server_thread lo_server_thread_new_with_proto(char *port, int proto, lo_err_handler err_h) 70 void lo_server_thread_free(lo_server_thread st) 71 lo_server lo_server_thread_get_server(lo_server_thread st) 72 void lo_server_thread_start(lo_server_thread st) 73 void lo_server_thread_stop(lo_server_thread st) 74 75 # address 76 lo_address lo_address_new(char *host, char *port) 77 lo_address lo_address_new_with_proto(int proto, char *host, char *port) 78 lo_address lo_address_new_from_url(char *url) 79 void lo_address_free(lo_address) 80 char *lo_address_get_url(lo_address a) 81 char *lo_address_get_hostname(lo_address a) 82 char *lo_address_get_port(lo_address a) 83 int lo_address_get_protocol(lo_address a) 84 const_char* lo_address_errstr(lo_address a) 85 86 # message 87 lo_message lo_message_new() 88 void lo_message_free(lo_message) 89 void lo_message_add_int32(lo_message m, int32_t a) 90 void lo_message_add_int64(lo_message m, int64_t a) 91 void lo_message_add_float(lo_message m, float a) 92 void lo_message_add_double(lo_message m, double a) 93 void lo_message_add_char(lo_message m, char a) 94 void lo_message_add_string(lo_message m, char *a) 95 void lo_message_add_symbol(lo_message m, char *a) 96 void lo_message_add_true(lo_message m) 97 void lo_message_add_false(lo_message m) 98 void lo_message_add_nil(lo_message m) 99 void lo_message_add_infinitum(lo_message m) 100 void lo_message_add_midi(lo_message m, uint8_t a[4]) 101 void lo_message_add_timetag(lo_message m, lo_timetag a) 102 void lo_message_add_blob(lo_message m, lo_blob a) 103 lo_address lo_message_get_source(lo_message m) 104 105 # blob 106 lo_blob lo_blob_new(int32_t size, void *data) 107 void lo_blob_free(lo_blob b) 108 void *lo_blob_dataptr(lo_blob b) 109 uint32_t lo_blob_datasize(lo_blob b) 110 111 # bundle 112 lo_bundle lo_bundle_new(lo_timetag tt) 113 void lo_bundle_free(lo_bundle b) 114 void lo_bundle_add_message(lo_bundle b, char *path, lo_message m) 115 116 # timetag 117 void lo_timetag_now(lo_timetag *t) 118