[2175] | 1 | % WARPLab MEX UDP Transport |
---|
| 2 | % |
---|
| 3 | % This function is a custom MEX UDP transport layer for WARPLab communication. |
---|
| 4 | % It can be called with different options / commands to perform different |
---|
| 5 | % functions. |
---|
| 6 | % |
---|
| 7 | % ----------------------------------------------------------------------------- |
---|
| 8 | % Authors: Chris Hunter (chunter [at] mangocomm.com) |
---|
| 9 | % Patrick Murphy (murphpo [at] mangocomm.com) |
---|
| 10 | % Erik Welsh (welsh [at] mangocomm.com) |
---|
| 11 | % License: Copyright 2013, Mango Communications. All rights reserved. |
---|
| 12 | % Distributed under the WARP license (http://warpproject.org/license) |
---|
| 13 | % ----------------------------------------------------------------------------- |
---|
| 14 | % Command Syntax |
---|
| 15 | % |
---|
| 16 | % Standard WARPLab transport functions: |
---|
| 17 | % 1. wl_mex_udp_transport('version') |
---|
| 18 | % 2. index = wl_mex_udp_transport('init_socket') |
---|
| 19 | % 3. wl_mex_udp_transport('set_so_timeout', index, timeout) |
---|
| 20 | % 4. wl_mex_udp_transport('set_send_buf_size', index, size) |
---|
| 21 | % 5. size = wl_mex_udp_transport('get_send_buf_size', index) |
---|
| 22 | % 6. wl_mex_udp_transport('set_rcvd_buf_size', index, size) |
---|
| 23 | % 7. size = wl_mex_udp_transport('get_rcvd_buf_size', index) |
---|
| 24 | % 8. wl_mex_udp_transport('close', index) |
---|
| 25 | % 9. size = wl_mex_udp_transport('send', index, buffer, length, ip_addr, port) |
---|
| 26 | % 10. [size, buffer] = wl_mex_udp_transport('receive', index, length ) |
---|
| 27 | % |
---|
| 28 | % Additional WARPLab MEX UDP transport functions: |
---|
| 29 | % 1. [num_samples, cmds_used, samples] = wl_mex_udp_transport('read_rssi' / 'read_iq', |
---|
| 30 | % index, buffer, length, ip_addr, port, |
---|
| 31 | % number_samples, buffer_id, start_sample) |
---|
| 32 | % 2. cmds_used = wl_mex_udp_transport('write_iq', |
---|
| 33 | % index, cmd_buffer, max_length, ip_addr, port, |
---|
| 34 | % number_samples, sample_buffer, buffer_id, |
---|
| 35 | % start_sample, num_pkts, max_samples, hw_ver) |
---|
| 36 | % |
---|
| 37 | % Please refer to comments within wl_mex_udp_transport.c for more information. |
---|
| 38 | % |
---|
| 39 | % ----------------------------------------------------------------------------- |
---|
| 40 | % Compiling MEX |
---|
| 41 | % |
---|
| 42 | % Please see the on-line documentation for how to compile WARPLab MEX functions at: |
---|
| 43 | % http://warpproject.org/trac/wiki/WARPLab/MEX |
---|
| 44 | % |
---|
| 45 | % The compile command within MATLAB is: |
---|
| 46 | % |
---|
[2185] | 47 | % Windows: |
---|
| 48 | % mex -g -O wl_mex_udp_transport.c -lwsock32 -lKernel32 -DWIN32 |
---|
[2175] | 49 | % |
---|
[2185] | 50 | % MAC / Unix: |
---|
| 51 | % mex -g -O wl_mex_udp_transport.c |
---|
| 52 | % |
---|
[2175] | 53 | |
---|
[2185] | 54 | if ( ispc ) |
---|
[2175] | 55 | |
---|
[2185] | 56 | % Allow both manual and automatic compilation on Windows |
---|
| 57 | % |
---|
| 58 | fprintf('WARPLab wl_mex_udp_transport Setup\n'); |
---|
[2462] | 59 | fprintf(' Would you like [1] Manual (default) or [2] Automatic compilation?\n'); |
---|
[2185] | 60 | temp = input(' Selection: '); |
---|
[2175] | 61 | |
---|
[2185] | 62 | if(isempty(temp)) |
---|
| 63 | temp = 1; |
---|
| 64 | end |
---|
| 65 | |
---|
| 66 | if( ( temp > 2 ) || ( temp < 1 ) ) |
---|
| 67 | temp = 1; |
---|
| 68 | fprintf('Invalid selection. Setting to Manual.\n\n'); |
---|
| 69 | end |
---|
| 70 | |
---|
| 71 | else |
---|
| 72 | |
---|
| 73 | % Only allow manual compilation on MAC / UNIX |
---|
| 74 | % |
---|
| 75 | temp = 1; |
---|
[2176] | 76 | end |
---|
| 77 | |
---|
| 78 | switch( temp ) |
---|
| 79 | case 1 |
---|
| 80 | |
---|
[2462] | 81 | fprintf('\nManual Compilation Steps: \n'); |
---|
[2176] | 82 | fprintf(' 1) Please familiarize yourself with the process at: \n'); |
---|
| 83 | fprintf(' http://warpproject.org/trac/wiki/WARPLab/MEX \n'); |
---|
| 84 | fprintf(' to make sure your environment is set up properly. \n'); |
---|
| 85 | fprintf(' 2) Set up mex to choose your compiler. (mex -setup) \n'); |
---|
[2185] | 86 | |
---|
| 87 | if ( ispc ) |
---|
| 88 | fprintf(' 1. Select "Yes" to have mex locate installed compilers \n'); |
---|
| 89 | fprintf(' 2. Select "Microsoft Visual C++ 2010 Express" \n'); |
---|
| 90 | fprintf(' 3. Select "Yes" to verify your selections \n'); |
---|
| 91 | else |
---|
| 92 | fprintf(' 1. Select "/Applications/MATLAB_R2013a.app/bin/mexopts.sh : \n'); |
---|
| 93 | fprintf(' Template Options file for building MEX-files" \n'); |
---|
| 94 | fprintf(' 2. If necessary, overwrite: /Users/<username>/.matlab/R2013a/mexopts.sh \n'); |
---|
| 95 | end |
---|
| 96 | |
---|
[2176] | 97 | fprintf(' 3) Change directory to M_Code_Reference/mex (cd mex) \n'); |
---|
| 98 | fprintf(' 4) Run the compile command: \n'); |
---|
[2185] | 99 | |
---|
| 100 | if ( ispc ) |
---|
| 101 | fprintf(' mex -g -O wl_mex_udp_transport.c -lwsock32 -lKernel32 -DWIN32 \n'); |
---|
| 102 | else |
---|
| 103 | fprintf(' mex -g -O wl_mex_udp_transport.c \n'); |
---|
| 104 | end |
---|
| 105 | |
---|
[2176] | 106 | fprintf(' 5) Re-run wl_setup and make sure that "WARPLab Mex UDP" is an available transport. \n'); |
---|
| 107 | fprintf('\n'); |
---|
| 108 | |
---|
| 109 | case 2 |
---|
| 110 | fprintf('\nRunning Automatic Setup procedure: ...'); |
---|
[4313] | 111 | |
---|
| 112 | compiler_error = false; |
---|
[2176] | 113 | |
---|
| 114 | % Procedure to compile mex |
---|
[4313] | 115 | try |
---|
| 116 | cc = mex.getCompilerConfigurations('c'); |
---|
| 117 | catch ccError |
---|
| 118 | compiler_error = true; |
---|
| 119 | end |
---|
[2176] | 120 | |
---|
[4313] | 121 | if ( ~compiler_error ) |
---|
| 122 | fprintf('\nCompiling the WARPLab MEX UDP transport with compiler: \n %s\n', cc.Name); |
---|
[2176] | 123 | |
---|
[4313] | 124 | % Since we are not guaranteed to be in the .../M_Code_Reference directory, |
---|
[2176] | 125 | % save the current path and then cd using absolute paths |
---|
| 126 | % |
---|
| 127 | curr_path = pwd; |
---|
| 128 | [wl_path,ig,ig] = fileparts(which('wl_mex_udp_transport')); |
---|
| 129 | |
---|
| 130 | cd(sprintf('%s',wl_path)); |
---|
| 131 | |
---|
[4313] | 132 | if ( ispc ) |
---|
| 133 | mex -g -O wl_mex_udp_transport.c -lwsock32 -lKernel32 -DWIN32 |
---|
| 134 | else |
---|
| 135 | mex -g -O wl_mex_udp_transport.c |
---|
| 136 | end |
---|
[2176] | 137 | |
---|
| 138 | cd(sprintf('%s',curr_path)); |
---|
| 139 | |
---|
| 140 | clear |
---|
[2180] | 141 | fprintf('Done. \n\n'); |
---|
| 142 | fprintf('***************************************************************\n'); |
---|
| 143 | fprintf('***************************************************************\n'); |
---|
| 144 | fprintf('Please re-run wl_setup to use your "WARPLab Mex UDP" transport.\n'); |
---|
| 145 | fprintf('***************************************************************\n'); |
---|
| 146 | fprintf('***************************************************************\n'); |
---|
[2176] | 147 | else |
---|
[4313] | 148 | fprintf('\nMEX Compiler not found. Running mex setup: \n'); |
---|
[2176] | 149 | mex -setup |
---|
| 150 | |
---|
[4313] | 151 | try |
---|
| 152 | cc = mex.getCompilerConfigurations('c'); |
---|
| 153 | catch ccError |
---|
| 154 | error('Error with MEX compiler.\nSee http://warpproject.org/trac/wiki/WARPLab/MEX for more information'); |
---|
| 155 | end |
---|
| 156 | |
---|
| 157 | fprintf('******************************************************************************\n'); |
---|
| 158 | fprintf('******************************************************************************\n'); |
---|
| 159 | fprintf('Please re-run wl_mex_udp_transport to compile the "WARPLab Mex UDP" transport.\n'); |
---|
| 160 | fprintf('******************************************************************************\n'); |
---|
| 161 | fprintf('******************************************************************************\n'); |
---|
[2176] | 162 | end |
---|
[2175] | 163 | |
---|
[2176] | 164 | otherwise |
---|
| 165 | error('Invalid selection.'); |
---|
[2175] | 166 | end |
---|