Changeset 113
- Timestamp:
- 06/26/2007 03:20:59 PM (5 years ago)
- Location:
- nano-RK/projects/network_stack
- Files:
-
- 10 edited
-
App.c (modified) (5 diffs)
-
BufferManager.c (modified) (7 diffs)
-
BufferManager.h (modified) (1 diff)
-
NWStackConfig.c (modified) (2 diffs)
-
NWStackConfig.h (modified) (2 diffs)
-
NetworkLayer.c (modified) (20 diffs)
-
NetworkLayer.h (modified) (2 diffs)
-
TransportLayerUDP.c (modified) (66 diffs)
-
TransportLayerUDP.h (modified) (2 diffs)
-
nrk_cfg.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
nano-RK/projects/network_stack/App.c
r110 r113 10 10 #include <stdint.h> 11 11 12 12 13 #include "NWStackConfig.h" 13 14 #include "TransportLayerUDP.h" … … 16 17 #include "Serial.h" 17 18 #include "BufferManager.h" 18 19 19 20 #define SERVER1_PORT 1 20 21 #define SERVER2_PORT 2 21 22 #define SERVER1_RQS 4 22 #define SERVER2_RQS 4 23 24 #define PAYLOAD 6423 #define SERVER2_RQS 4 24 25 #define PAYLOAD MAX_APP_PAYLOAD 25 26 #define DEBUG_APP 2 26 27 … … 38 39 /**************************************************************************************/ 39 40 40 void initialise() 41 void rx_task () 42 { 43 int8_t sock; 44 int8_t ret; 45 uint8_t *rx_buf; 46 int8_t len; 47 int16_t srcAddr = 10; 48 int8_t srcPort; 49 int8_t rssi; 50 int8_t i; 51 52 printf ("rx_task PID=%d\r\n", nrk_get_pid ()); 53 sock = create_socket(SOCK_DGRAM); 54 if(sock == NRK_ERROR) 55 nrk_kprintf(PSTR("Error creating socket in rx_task")); 56 57 if(NODE_ADDR == 1) 58 ret = bind(sock, SERVER1_PORT); 59 else 60 ret = bind(sock, SERVER2_PORT); 61 62 if(ret == NRK_ERROR) 63 printf("Error in binding to socket %d\n", nrk_errno_get()); 64 65 if(NODE_ADDR == 1) 66 ret = set_rx_queue_size(sock, SERVER1_RQS); 67 else 68 ret = set_rx_queue_size(sock, SERVER2_RQS); 69 70 if(ret == NRK_ERROR) 71 printf("Error in setting rx queue size %d\n", nrk_errno_get()); 72 73 while(1) 74 { 75 nrk_kprintf(PSTR("APP rx_task: Waiting for a packet\r\n")); 76 set_timeout(sock, 5, 0); 77 rx_buf = receive(sock, &len, &srcAddr, &srcPort, &rssi); 78 79 if(rx_buf != NULL) 80 { 81 printf("Received a pkt from %d,%d with RSSI = %d\n", srcAddr, srcPort, rssi); 82 //nrk_led_set(GREEN_LED); 83 84 //for(i = 0; i < len; i++) 85 // printf("%c ", rx_buf[i]); 86 //printf("\r\n"); 87 } 88 else 89 nrk_kprintf(PSTR("Receive timed out\n")); 90 //nrk_led_clr(GREEN_LED); 91 release_buffer(sock, rx_buf); 92 } 93 94 return; 95 } 96 /**************************************************************************************/ 97 98 void tx_task () 99 { 100 int8_t ret, len, cnt; 101 int8_t sock; 102 int8_t flag; 103 104 printf ("tx_task PID=%d\r\n", nrk_get_pid ()); 105 106 sock = create_socket(SOCK_DGRAM); 107 if(sock == NRK_ERROR) 108 printf("Error in creating socket %d\n", nrk_errno_get()); 109 cnt = 0; 110 111 while (1) 112 { 113 // Build a TX packet 114 sprintf (tx_buf, "This is a test %d", cnt); 115 cnt++; 116 nrk_led_set (BLUE_LED); 117 flag = 0; 118 119 if(NODE_ADDR == 1) 120 if( send(sock, tx_buf, strlen(tx_buf), 2, SERVER2_PORT, NORMAL_PRIORITY) == NRK_ERROR ) 121 { 122 printf("Error returned by send() %d\r\n", nrk_errno_get()); 123 flag = 1; 124 } 125 else 126 if( send(sock, tx_buf, strlen(tx_buf), 1, SERVER1_PORT, NORMAL_PRIORITY) == NRK_ERROR ) 127 { 128 printf("Error returned by send() %d\r\n", nrk_errno_get()); 129 flag = 1; 130 } 131 132 if(flag == 0) 133 { 134 nrk_kprintf (PSTR ("Tx packet enqueued\r\n")); 135 ret = wait_until_send_done(sock); 136 if(ret == NRK_ERROR) 137 printf("Error in waiting for send done signal %d\n", nrk_errno_get()); 138 139 // Task gets control again after TX complete 140 if(flag == 0) 141 printf("Tx sent data = %d\r\n", cnt); 142 } 143 nrk_led_clr (BLUE_LED); 144 nrk_wait_until_next_period (); 145 } 146 147 return; 148 } 149 150 /**********************************************************************************************/ 151 void nrk_create_taskset() 152 { 153 154 RX_TASK.task = rx_task; 155 RX_TASK.Ptos = (void *) &rx_task_stack[NRK_APP_STACKSIZE - 1]; 156 RX_TASK.Pbos = (void *) &rx_task_stack[0]; 157 RX_TASK.prio = 2; 158 RX_TASK.FirstActivation = TRUE; 159 RX_TASK.Type = BASIC_TASK; 160 RX_TASK.SchType = PREEMPTIVE; 161 162 RX_TASK.cpu_reserve.secs = 2; 163 RX_TASK.cpu_reserve.nano_secs = 0; 164 RX_TASK.period.secs = 3; 165 RX_TASK.period.nano_secs = 0; 166 167 RX_TASK.offset.secs = 3; 168 RX_TASK.offset.nano_secs= 0; 169 //if(NODE_ADDR == 1) 170 nrk_activate_task (&RX_TASK); 171 172 /*****************************************************************************************/ 173 TX_TASK.task = tx_task; 174 TX_TASK.Ptos = (void *) &tx_task_stack[NRK_APP_STACKSIZE - 1]; 175 TX_TASK.Pbos = (void *) &tx_task_stack[0]; 176 TX_TASK.prio = 3; 177 TX_TASK.FirstActivation = TRUE; 178 TX_TASK.Type = BASIC_TASK; 179 TX_TASK.SchType = PREEMPTIVE; 180 181 TX_TASK.cpu_reserve.secs = 1; 182 TX_TASK.cpu_reserve.nano_secs = 0; 183 TX_TASK.period.secs = 2; 184 TX_TASK.period.nano_secs = 0; 185 186 TX_TASK.offset.secs = 5; 187 TX_TASK.offset.nano_secs= 0; 188 //if(NODE_ADDR == 2) 189 nrk_activate_task (&TX_TASK); 190 191 if(DEBUG_APP == 2) 192 nrk_kprintf(PSTR("Created the two application layer tasks\r\n")); 193 } 194 195 int main() 41 196 { 42 197 // initialise the UART … … 48 203 49 204 // clear all LEDs 50 // this will toggle when information about an already received neighbor is received again51 205 52 206 if(DEBUG_APP == 2) 53 nrk_kprintf(PSTR("Before clearing LEDs\ n"));207 nrk_kprintf(PSTR("Before clearing LEDs\r\n")); 54 208 55 209 nrk_led_clr(ORANGE_LED); … … 61 215 nrk_time_set(0,0); 62 216 63 printf("Before initialising network stack"); 217 if(DEBUG_APP == 2) 218 nrk_kprintf(PSTR("Before initialising network stack\r\n")); 64 219 // initialise the network stack 65 nrk_init_nw_stack();220 nrk_init_nw_stack(); 66 221 67 return; 68 } 69 70 void rx_task () 71 { 72 int8_t sock; 73 int8_t ret; 74 uint8_t *rx_buf; 75 int8_t len; 76 int16_t srcAddr; 77 int8_t srcPort; 78 int8_t rssi; 79 int8_t i; 80 81 82 printf ("rx_task PID=%d\r\n", nrk_get_pid ()); 83 sock = create_socket(SOCK_DGRAM); 84 if(sock == NRK_ERROR) 85 nrk_kprintf(PSTR("Error creating socket in rx_task")); 86 87 if(NODE_ADDR == 1) 88 ret = bind(sock, SERVER1_PORT); 89 else 90 ret = bind(sock, SERVER2_PORT); 91 92 if(ret == NRK_ERROR) 93 printf("Error in binding to socket %d\n", nrk_errno_get()); 94 95 if(NODE_ADDR == 1) 96 ret = set_rx_queue_size(sock, SERVER1_RQS); 97 else 98 ret = set_rx_queue_size(sock, SERVER2_RQS); 99 100 if(ret == NRK_ERROR) 101 printf("Error in setting rx queue size %d\n", nrk_errno_get()); 102 103 while(1) 104 { 105 rx_buf = receive(sock, &len, &srcAddr, &srcPort, &rssi); 106 107 printf("Received a pkt from %d,%d with RSSI = %d\n", srcAddr, srcPort, rssi); 108 nrk_led_set(GREEN_LED); 109 110 for(i = 0; i < len; i++) 111 printf("%c ", rx_buf[i]); 112 113 nrk_led_clr(GREEN_LED); 114 release_buffer(sock, rx_buf); 115 } 116 117 return; 118 } 119 120 void tx_task () 121 { 122 int8_t ret, len, cnt; 123 int8_t sock; 124 125 printf ("tx_task PID=%d\r\n", nrk_get_pid ()); 126 127 sock = create_socket(SOCK_DGRAM); 128 if(sock == NRK_ERROR) 129 printf("Error in creating socket %d\n", nrk_errno_get()); 130 cnt = 0; 131 132 while (1) 133 { 134 // Build a TX packet 135 sprintf (tx_buf, "This is a test %d", cnt); 136 cnt++; 137 nrk_led_set (BLUE_LED); 138 139 if(NODE_ADDR == 1) 140 send(sock, tx_buf, strlen(tx_buf), 2, SERVER2_PORT, NORMAL_PRIORITY); 141 else 142 send(sock, tx_buf, strlen(tx_buf), 1, SERVER1_PORT, NORMAL_PRIORITY); 143 144 nrk_kprintf (PSTR ("Tx packet enqueued\r\n")); 145 146 ret = wait_until_send_done(sock); 147 if(ret == NRK_ERROR) 148 printf("Error in waiting for send done signal %d\n", nrk_errno_get()); 149 150 // Task gets control again after TX complete 151 nrk_kprintf (PSTR ("Tx task sent data!\r\n")); 152 nrk_led_clr (BLUE_LED); 153 nrk_wait_until_next_period (); 154 } 155 156 return; 157 } 158 159 160 void nrk_create_taskset() 161 { 162 163 RX_TASK.task = rx_task; 164 RX_TASK.Ptos = (void *) &rx_task_stack[NRK_APP_STACKSIZE-1]; 165 RX_TASK.Pbos = (void *) &rx_task_stack[0]; 166 RX_TASK.prio = 3; 167 RX_TASK.FirstActivation = TRUE; 168 RX_TASK.Type = BASIC_TASK; 169 RX_TASK.SchType = PREEMPTIVE; 170 171 RX_TASK.cpu_reserve.secs = 4; 172 RX_TASK.cpu_reserve.nano_secs = 500*NANOS_PER_MS; 173 RX_TASK.period.secs = 3; 174 RX_TASK.period.nano_secs = 0; 175 176 RX_TASK.offset.secs = 0; 177 RX_TASK.offset.nano_secs= 0; 178 nrk_activate_task (&RX_TASK); 179 180 /*****************************************************************************************/ 181 TX_TASK.task = tx_task; 182 TX_TASK.Ptos = (void *) &tx_task_stack[NRK_APP_STACKSIZE-1]; 183 TX_TASK.Pbos = (void *) &tx_task_stack[0]; 184 TX_TASK.prio = 4; 185 TX_TASK.FirstActivation = TRUE; 186 TX_TASK.Type = BASIC_TASK; 187 TX_TASK.SchType = PREEMPTIVE; 188 189 TX_TASK.cpu_reserve.secs = 3; 190 TX_TASK.cpu_reserve.nano_secs = 0; 191 TX_TASK.period.secs = 4; 192 TX_TASK.period.nano_secs = 0; 193 194 TX_TASK.offset.secs = 0; 195 TX_TASK.offset.nano_secs= 0; 196 nrk_activate_task (&TX_TASK); 197 } 198 199 int main() 200 { 201 initialise(); 222 nrk_kprintf(PSTR("Finished initialise\r\n")); 202 223 203 224 nrk_create_taskset(); // create the set of tasks -
nano-RK/projects/network_stack/BufferManager.c
r103 r113 2 2 3 3 #include<stdint.h> 4 4 #include <nrk.h> 5 #include <include.h> 6 #include <ulib.h> 7 #include <stdio.h> 8 #include <avr/sleep.h> 9 #include <hal.h> 10 #include <nrk_error.h> 5 11 6 12 #include "BufferManager.h" … … 27 33 28 34 /***************************************************************************************/ 29 void enter_cr(nrk_sem_t *sem, int8_t *fn) 30 { 31 int8_t str[30]; // temporary variable to hold error message 32 35 void enter_cr(nrk_sem_t *sem, int8_t fno) 36 { 33 37 if( nrk_sem_pend(sem) == NRK_ERROR ) 34 38 { 35 sprintf (str, "Error sem pending in %s", fn); 36 go_into_panic(str); 37 } 38 39 switch(fno) 40 { 41 /******************************** Transport Layer ******************************/ 42 case 1: 43 nrk_kprintf(PSTR("Error sem pending on initialise_transport_layer_udp()\r\n")); 44 break; 45 46 case 2: 47 nrk_kprintf(PSTR("Error sem pending on get_next_available_socket()\r\n")); 48 break; 49 50 case 3: 51 nrk_kprintf(PSTR("Error sem pending on create_socket()\r\n")); 52 break; 53 54 case 4: 55 nrk_kprintf(PSTR("Error sem pending on get_next_available_port()\r\n")); 56 break; 57 58 case 5: 59 nrk_kprintf(PSTR("Error sem pending on check_port_available()\r\n")); 60 break; 61 62 case 6: 63 nrk_kprintf(PSTR("Error sem pending on assign_port()\r\n")); 64 break; 65 66 case 7: 67 nrk_kprintf(PSTR("Error sem pending on release_port()\r\n")); 68 break; 69 70 case 8: 71 nrk_kprintf(PSTR("Error sem pending on bind()\r\n")); 72 break; 73 74 case 9: 75 nrk_kprintf(PSTR("Error sem pending on get_rx_queue_size()\r\n")); 76 break; 77 78 case 10: 79 nrk_kprintf(PSTR("Error sem pending on set_rx_queue_size()\r\n")); 80 break; 81 82 case 11: 83 nrk_kprintf(PSTR("Error sem pending on release_buffer()\r\n")); 84 break; 85 86 case 12: 87 nrk_kprintf(PSTR("Error sem pending on close_socket()\r\n")); 88 break; 89 90 case 13: 91 nrk_kprintf(PSTR("Error sem pending on is_port_associated()\r\n")); 92 break; 93 94 case 14: 95 nrk_kprintf(PSTR("Error sem pending on send()\r\n")); 96 break; 97 98 case 15: 99 nrk_kprintf(PSTR("Error sem pending on set_timeout()\r\n")); 100 break; 101 102 case 16: 103 nrk_kprintf(PSTR("Error sem pending on receive()\r\n")); 104 break; 105 106 case 17: 107 nrk_kprintf(PSTR("Error sem pending on check_receive_queue()\r\n")); 108 break; 109 110 case 18: 111 nrk_kprintf(PSTR("Error sem pending on wait_until_send_done()\r\n")); 112 break; 113 114 /*************************** Network Layer ********************************/ 115 case 19: 116 nrk_kprintf(PSTR("Error sem pending on add_neighbor()\r\n")); 117 break; 118 119 case 20: 120 nrk_kprintf(PSTR("Error sem pending on shouldIMultihop()\r\n")); 121 break; 122 123 case 21: 124 nrk_kprintf(PSTR("Error sem pending on multihop()\r\n")); 125 break; 126 127 case 22: 128 nrk_kprintf(PSTR("Error sem pending on route_addr()\r\n")); 129 130 case 23: 131 nrk_kprintf(PSTR("Error sem pending on route_packet()\r\n")); 132 break; 133 134 case 24: 135 nrk_kprintf(PSTR("Error sem pending on sendToGateway()\r\n")); 136 break; 137 138 case 25: 139 nrk_kprintf(PSTR("Error sem pending on pkt_type()\r\n")); 140 break; 141 142 case 26: 143 nrk_kprintf(PSTR("Error sem pending on tl_type()\r\n")); 144 break; 145 146 case 27: 147 nrk_kprintf(PSTR("Error sem pending on nw_ctrl_type()\r\n")); 148 break; 149 150 case 28: 151 nrk_kprintf(PSTR("Error sem pending on process_app_pkt()\r\n")); 152 break; 153 154 case 29: 155 nrk_kprintf(PSTR("Error sem pending on process_nw_ctrl_pkt()\r\n")); 156 break; 157 158 case 30: 159 nrk_kprintf(PSTR("Error sem pending on process_other_pkt()\r\n")); 160 break; 161 162 case 31: 163 nrk_kprintf(PSTR("Error sem pending on build_Msg_Hello()\r\n")); 164 break; 165 166 case 32: 167 nrk_kprintf(PSTR("Error sem pending on build_Msg_NgbList()\r\n")); 168 break; 169 170 case 33: 171 nrk_kprintf(PSTR("Error sem pending on nl_rx_task()\r\n")); 172 break; 173 174 case 34: 175 nrk_kprintf(PSTR("Error sem pending on nl_tx_task()\r\n")); 176 break; 177 178 case 35: 179 nrk_kprintf(PSTR("Error sem pending on create_network_layer_tasks()\r\n")); 180 break; 181 182 case 36: 183 nrk_kprintf(PSTR("Error sem pending on initialise_network_layer()\r\n")); 184 break; 185 186 /****************************** BufferManager.c *********************************/ 187 case 37: 188 nrk_kprintf(PSTR("Error sem pending on initialise_buffer_manager()\r\n")); 189 break; 190 191 case 38: 192 nrk_kprintf(PSTR("Error sem pending on is_excess_policy_valid()\r\n")); 193 break; 194 195 case 39: 196 nrk_kprintf(PSTR("Error sem pending on set_excess_policy()\r\n")); 197 break; 198 199 case 40: 200 nrk_kprintf(PSTR("Error sem pending on get_excess_policy()\r\n")); 201 break; 202 203 case 41: 204 nrk_kprintf(PSTR("Error sem pending on get_index_unallocated_rx_buf()\r\n")); 205 break; 206 207 case 42: 208 nrk_kprintf(PSTR("Error sem pending on insert_rx_pq()\r\n")); 209 break; 210 211 case 43: 212 nrk_kprintf(PSTR("Error sem pending on remove_rx_pq()\r\n")); 213 break; 214 215 case 44: 216 nrk_kprintf(PSTR("Error sem pending on insert_rx_fq()\r\n")); 217 break; 218 219 case 45: 220 nrk_kprintf(PSTR("Error sem pending on remove_rx_fq()\r\n")); 221 break; 222 223 case 46: 224 nrk_kprintf(PSTR("Error sem pending on insert_tx_aq()\r\n")); 225 break; 226 227 case 47: 228 nrk_kprintf(PSTR("Error sem pending on remove_tx_aq()\r\n")); 229 break; 230 231 case 48: 232 nrk_kprintf(PSTR("Error sem pending on insert_tx_fq()\r\n")); 233 break; 234 235 case 49: 236 nrk_kprintf(PSTR("Error sem pending on remove_tx_fq()\r\n")); 237 break; 238 239 case 50: 240 nrk_kprintf(PSTR("Error sem pending on get_in_process_buf_count()\r\n")); 241 break; 242 243 /******************************************************************************/ 244 245 default: 246 nrk_kprintf(PSTR("enter_cr(): Unknown function number\r\n")); 247 break; 248 } // end switch 249 } // end if 250 39 251 return; 40 252 } 41 253 42 254 /******************************************************************************************/ 43 void leave_cr(nrk_sem_t *sem, int8_t *fn) 44 { 45 int8_t str[30]; // temporary variable to hold error message 46 255 void leave_cr(nrk_sem_t *sem, int8_t fno) 256 { 47 257 if( nrk_sem_post(sem) == NRK_ERROR ) 48 258 { 49 sprintf (str, "Error sem posting in %s", fn); 50 go_into_panic(str); 51 } 52 259 switch(fno) 260 { 261 /******************************** Transport Layer ******************************/ 262 case 1: 263 nrk_kprintf(PSTR("Error sem posting on initialise_transport_layer_udp()\r\n")); 264 break; 265 266 case 2: 267 nrk_kprintf(PSTR("Error sem posting on get_next_available_socket()\r\n")); 268 break; 269 270 case 3: 271 nrk_kprintf(PSTR("Error sem posting on create_socket()\r\n")); 272 break; 273 274 case 4: 275 nrk_kprintf(PSTR("Error sem posting on get_next_available_port()\r\n")); 276 break; 277 278 case 5: 279 nrk_kprintf(PSTR("Error sem posting on check_port_available()\r\n")); 280 break; 281 282 case 6: 283 nrk_kprintf(PSTR("Error sem posting on assign_port()\r\n")); 284 break; 285 286 case 7: 287 nrk_kprintf(PSTR("Error sem posting on release_port()\r\n")); 288 break; 289 290 case 8: 291 nrk_kprintf(PSTR("Error sem posting on bind()\r\n")); 292 break; 293 294 case 9: 295 nrk_kprintf(PSTR("Error sem posting on get_rx_queue_size()\r\n")); 296 break; 297 298 case 10: 299 nrk_kprintf(PSTR("Error sem posting on set_rx_queue_size()\r\n")); 300 break; 301 302 case 11: 303 nrk_kprintf(PSTR("Error sem posting on release_buffer()\r\n")); 304 break; 305 306 case 12: 307 nrk_kprintf(PSTR("Error sem posting on close_socket()\r\n")); 308 break; 309 310 case 13: 311 nrk_kprintf(PSTR("Error sem posting on is_port_associated()\r\n")); 312 break; 313 314 case 14: 315 nrk_kprintf(PSTR("Error sem posting on send()\r\n")); 316 break; 317 318 case 15: 319 nrk_kprintf(PSTR("Error sem posting on set_timeout()\r\n")); 320 break; 321 322 case 16: 323 nrk_kprintf(PSTR("Error sem posting on receive()\r\n")); 324 break; 325 326 case 17: 327 nrk_kprintf(PSTR("Error sem posting on check_receive_queue()\r\n")); 328 break; 329 330 case 18: 331 nrk_kprintf(PSTR("Error sem posting on wait_until_send_done()\r\n")); 332 break; 333 334 /*************************** Network Layer ********************************/ 335 case 19: 336 nrk_kprintf(PSTR("Error sem posting on add_neighbor()\r\n")); 337 break; 338 339 case 20: 340 nrk_kprintf(PSTR("Error sem posting on shouldIMultihop()\r\n")); 341 break; 342 343 case 21: 344 nrk_kprintf(PSTR("Error sem posting on multihop()\r\n")); 345 break; 346 347 case 22: 348 nrk_kprintf(PSTR("Error sem posting on route_addr()\r\n")); 349 350 case 23: 351 nrk_kprintf(PSTR("Error sem posting on route_packet()\r\n")); 352 break; 353 354 case 24: 355 nrk_kprintf(PSTR("Error sem posting on sendToGateway()\r\n")); 356 break; 357 358 case 25: 359 nrk_kprintf(PSTR("Error sem posting on pkt_type()\r\n")); 360 break; 361 362 case 26: 363 nrk_kprintf(PSTR("Error sem posting on tl_type()\r\n")); 364 break; 365 366 case 27: 367 nrk_kprintf(PSTR("Error sem posting on nw_ctrl_type()\r\n")); 368 break; 369 370 case 28: 371 nrk_kprintf(PSTR("Error sem posting on process_app_pkt()\r\n")); 372 break; 373 374 case 29: 375 nrk_kprintf(PSTR("Error sem posting on process_nw_ctrl_pkt()\r\n")); 376 break; 377 378 case 30: 379 nrk_kprintf(PSTR("Error sem posting on process_other_pkt()\r\n")); 380 break; 381 382 case 31: 383 nrk_kprintf(PSTR("Error sem posting on build_Msg_Hello()\r\n")); 384 break; 385 386 case 32: 387 nrk_kprintf(PSTR("Error sem posting on build_Msg_NgbList()\r\n")); 388 break; 389 390 case 33: 391 nrk_kprintf(PSTR("Error sem posting on nl_rx_task()\r\n")); 392 break; 393 394 case 34: 395 nrk_kprintf(PSTR("Error sem posting on nl_tx_task()\r\n")); 396 break; 397 398 case 35: 399 nrk_kprintf(PSTR("Error sem posting on create_network_layer_tasks()\r\n")); 400 break; 401 402 case 36: 403 nrk_kprintf(PSTR("Error sem posting on initialise_network_layer()\r\n")); 404 break; 405 406 /****************************** BufferManager.c *********************************/ 407 case 37: 408 nrk_kprintf(PSTR("Error sem posting on initialise_buffer_manager()\r\n")); 409 break; 410 411 case 38: 412 nrk_kprintf(PSTR("Error sem posting on is_excess_policy_valid()\r\n")); 413 break; 414 415 case 39: 416 nrk_kprintf(PSTR("Error sem posting on set_excess_policy()\r\n")); 417 break; 418 419 case 40: 420 nrk_kprintf(PSTR("Error sem posting on get_excess_policy()\r\n")); 421 break; 422 423 case 41: 424 nrk_kprintf(PSTR("Error sem posting on get_index_unallocated_rx_buf()\r\n")); 425 break; 426 427 case 42: 428 nrk_kprintf(PSTR("Error sem posting on insert_rx_pq()\r\n")); 429 break; 430 431 case 43: 432 nrk_kprintf(PSTR("Error sem posting on remove_rx_pq()\r\n")); 433 break; 434 435 case 44: 436 nrk_kprintf(PSTR("Error sem posting on insert_rx_fq()\r\n")); 437 break; 438 439 case 45: 440 nrk_kprintf(PSTR("Error sem posting on remove_rx_fq()\r\n")); 441 break; 442 443 case 46: 444 nrk_kprintf(PSTR("Error sem posting on insert_tx_aq()\r\n")); 445 break; 446 447 case 47: 448 nrk_kprintf(PSTR("Error sem posting on remove_tx_aq()\r\n")); 449 break; 450 451 case 48: 452 nrk_kprintf(PSTR("Error sem posting on insert_tx_fq()\r\n")); 453 break; 454 455 case 49: 456 nrk_kprintf(PSTR("Error sem posting on remove_tx_fq()\r\n")); 457 break; 458 459 case 50: 460 nrk_kprintf(PSTR("Error sem posting on get_in_process_buf_count()\r\n")); 461 break; 462 463 /******************************************************************************/ 464 465 default: 466 nrk_kprintf(PSTR("leave_cr(): Unknown function number\r\n")); 467 break; 468 } // end switch 469 } // end if 470 53 471 return; 54 472 } … … 101 519 bm_sem = nrk_sem_create(1,MAX_TASK_PRIORITY); // create the mutex 102 520 if(bm_sem == NULL) 103 go_into_panic("Error creating the semaphore in initialise_buffer_manager()"); 104 105 521 { 522 nrk_int_disable(); 523 nrk_led_set(RED_LED); 524 while(1) 525 nrk_kprintf(PSTR("initialise_buffer_manager(): Error creating the semaphore\r\n")); 526 } 106 527 return; 107 528 } … … 126 547 } 127 548 128 enter_cr(bm_sem, "set_excess_policy()"); // enter CR549 enter_cr(bm_sem, 39); // enter CR 129 550 130 551 if(pref == DROP) // set bit number 'prio' in excessPolicySettings to 1 … … 133 554 excessPolicySettings &= ~( (uint32_t)1 << prio ); 134 555 135 leave_cr(bm_sem, "set_excess_policy()"); // leave CR556 leave_cr(bm_sem, 39); // leave CR 136 557 137 558 return NRK_OK; … … 146 567 } 147 568 148 enter_cr(bm_sem, "get_excess_policy()");569 enter_cr(bm_sem, 40); 149 570 150 571 // check the state of bit number 'prio' in excessPolicySettings 151 572 if( ((excessPolicySettings >> prio) & ((uint32_t)1)) == 0 ) // is bit 'prio' cleared 152 573 { 153 leave_cr(bm_sem, "get_excess_policy()");574 leave_cr(bm_sem, 40); 154 575 return OVERWRITE; 155 576 } 156 577 157 leave_cr(bm_sem, "get_excess_policy()");578 leave_cr(bm_sem, 40); 158 579 return DROP; 159 580 } … … 223 644 { 224 645 if(rx_buf_mgr[port].countFree != 0) // debugging purposes 225 go_into_panic("Bug found in rx_buf_mgr in insert_rx_pq()"); 646 { 647 nrk_int_disable(); 648 nrk_led_set(RED_LED); 649 while(1) 650 nrk_kprintf(PSTR("insert_rx_pq(): Bug found in implementation of countFree in rx_buf_mgr\r\n")); 651 } 226 652 227 653 //leave_cr(bm_sem, "insert_rx_pq()"); -
nano-RK/projects/network_stack/BufferManager.h
r103 r113 36 36 37 37 // priority level of task ....SHIFT this to Anthony's code 38 #define MAX_TASK_PRIORITY 25538 #define MAX_TASK_PRIORITY 10 39 39 40 40 // priority levels of messages -
nano-RK/projects/network_stack/NWStackConfig.c
r110 r113 33 33 extern go_into_panic(char*); 34 34 35 //From bmac.c 36 extern void bmac_task_config(); 37 35 38 /********************************* FUNCTION DEFINITIONS ****************************/ 36 39 void nrk_init_nw_stack() … … 40 43 41 44 if(DEBUG == 2) 42 nrk_kprintf(PSTR("Before initialising buffer manager\ n"));45 nrk_kprintf(PSTR("Before initialising buffer manager\r\n")); 43 46 initialise_buffer_manager(); 44 47 45 48 if(DEBUG == 2) 46 nrk_kprintf(PSTR("Before initialising transport layer\ n"));49 nrk_kprintf(PSTR("Before initialising transport layer\r\n")); 47 50 initialise_transport_layer_udp(); 48 51 49 52 if(DEBUG == 2) 50 nrk_kprintf(PSTR("Before initialising network layer\n")); 53 nrk_kprintf(PSTR("Before initialising the link layer\r\n")); 54 bmac_task_config(); 55 56 if(DEBUG == 2) 57 nrk_kprintf(PSTR("Before initialising network layer\r\n")); 51 58 initialise_network_layer(); 52 59 53 60 return; 54 61 } 55 56 -
nano-RK/projects/network_stack/NWStackConfig.h
r110 r113 1 1 2 /* This file should be edited by the user depneding on his application */ 2 3 … … 5 6 6 7 7 #define MAX_APP_PAYLOAD 16// maximum size of the application payload in bytes8 #define MAX_SERIAL_PAYLOAD 16// maximum size of serial data payload8 #define MAX_APP_PAYLOAD 32 // maximum size of the application payload in bytes 9 #define MAX_SERIAL_PAYLOAD 32 // maximum size of serial data payload 9 10 #define MAX_RX_QUEUE_SIZE 8 // maximum number of receive buffers available in the 10 11 // system for USER tasks -
nano-RK/projects/network_stack/NetworkLayer.c
r103 r113 65 65 static NeighborList nl; // to hold the neighbors of this node 66 66 67 static uint8_t rx_buf[RF_ MAX_PAYLOAD_SIZE]; // receive buffer for network layer67 static uint8_t rx_buf[RF_BUFFER_SIZE]; // receive buffer for network layer 68 68 static NW_Packet pkt_rx; // to hold a received packet from link layer 69 69 … … 106 106 */ 107 107 108 enter_cr(nl_sem, "add_neighbor()");108 enter_cr(nl_sem, 19); 109 109 for(i = 0; i < MAX_NGBS; i++) 110 110 { … … 134 134 if(found == TRUE) // neighbor was already present in array; do nothing further 135 135 { 136 leave_cr(nl_sem, "add_neighbor()");136 leave_cr(nl_sem, 19); 137 137 return NRK_OK; 138 138 } … … 143 143 _nrk_errno_set(MAX_NEIGHBOR_LIMIT_REACHED); 144 144 145 leave_cr(nl_sem, "add_neighbor()");145 leave_cr(nl_sem, 19); 146 146 return NRK_ERROR; 147 147 } … … 161 161 162 162 if(i == MAX_NGBS) // sanity check for debugging 163 go_into_panic("Bug in add_neighbor()"); 164 165 leave_cr(nl_sem, "add_neighbor()"); 163 { 164 nrk_int_disable(); 165 nrk_led_set(RED_LED); 166 while(1) 167 nrk_kprintf(PSTR("add_neighbor(): Bug found in implementation of MAX_NGBS\r\n")); 168 } 169 170 leave_cr(nl_sem, 19); 166 171 return NRK_OK; 167 172 } … … 182 187 if( shouldIMultihop(pkt) == MULTIHOP_YES )// see whether this packet should be multi hopped 183 188 { 184 enter_cr(bm_sem, "multihop()");189 enter_cr(bm_sem, 21); 185 190 insert_tx_aq(pkt); // ignore the return type. If no space, drop the packet 186 leave_cr(bm_sem, "multihop()");191 leave_cr(bm_sem, 21); 187 192 } 188 193 return; … … 261 266 262 267 // check to see if the destination port in the header is associated with any socket 263 enter_cr(bm_sem, "process_app_pkt()");268 enter_cr(bm_sem, 28); 264 269 if(is_port_associated(udp_seg.destPort) == TRUE) // yes there is 265 270 { … … 271 276 ; 272 277 273 leave_cr(bm_sem, "process_app_pkt()");278 leave_cr(bm_sem, 28); 274 279 } 275 280 else // as of now UDP is the only supported transport layer, hence flag an error 276 281 { 277 go_into_panic("Unsupported transport layer type found in process_app_pkt()"); 282 nrk_int_disable(); 283 nrk_led_set(RED_LED); 284 while(1) 285 nrk_kprintf(PSTR("process_app_pkt(): Unsupported transport layer type found\r\n")); 278 286 } 279 287 return; … … 286 294 case HELLO: // HELLO msg 287 295 288 enter_cr(nl_sem, "process_nw_ctrl_pkt()");296 enter_cr(nl_sem, 29); 289 297 count_HELLO_msg_rcvd++; 290 leave_cr(nl_sem, "process_nw_ctrl_pkt()");298 leave_cr(nl_sem, 29); 291 299 // unpack the Msg_Hello from the packet payload 292 300 unpack_Msg_Hello(&mh, pkt -> data); … … 344 352 345 353 default: 346 go_into_panic("Unsupported network control message received in process_nw_ctrl_pkt()"); 354 nrk_int_disable(); 355 nrk_led_set(RED_LED); 356 while(1) 357 nrk_kprintf(PSTR("process_nw_ctrl_pkt(): Unsupported network control message received\r\n")); 358 break; 359 347 360 } // end switch 348 361 … … 354 367 return; 355 368 } 356 /**********************************************************************************************/ 357 358 void nl_rx_task() 359 { 360 uint8_t len; // to hold the size of the received packet, always = sizeof(NW_Packet) 361 int8_t rssi; // to hold rssi of received packet 362 uint8_t *local_rx_buf; // pointer to receive buffer of link layer 363 int8_t val; // status variable to hold the return type of function calls 364 365 if(DEBUG_NL >= 1) 366 printf("DEBUG: NL_RX_TASK PID=%d\r\n",nrk_get_pid()); 367 368 // initialise the BMAC layer 369 bmac_init(25); 370 bmac_rx_pkt_set_buffer(rx_buf, RF_MAX_PAYLOAD_SIZE); 371 372 while(1) 373 { 374 if(DEBUG_NL == 2) 375 nrk_kprintf(PSTR("DEBUG: Waiting for packet in RX task\r\n")); 376 377 // wait for the next packet 378 do 379 { 380 val = bmac_wait_until_rx_packet(); 381 382 } while(val == NRK_ERROR); 383 384 if(DEBUG_NL == 2) 385 nrk_kprintf(PSTR("DEBUG: Received a packet\r\n")); 386 387 nrk_led_set(GREEN_LED); // shine the LED 388 389 // Get the packet 390 do 391 { 392 local_rx_buf = bmac_rx_pkt_get(&len,&rssi); 393 394 } while(local_rx_buf == NULL); 395 396 // unpack the packet header from the received buffer 397 unpack_NW_Packet_header(&pkt_rx, local_rx_buf); 398 // copy the packet payload to the data field of the local packet 399 memcpy(pkt_rx.data, local_rx_buf + SIZE_NW_PACKET_HEADER, pkt_rx.length); 400 // Release the RX buffer quickly so future packets can arrive 401 bmac_rx_pkt_release(); 402 403 // begin processing this packet 404 if(pkt_type(&pkt_rx) == APPLICATION) // its an application layer packet 405 { 406 if(pkt_rx.dest == NODE_ADDR || pkt_rx.dest == BCAST_ADDR) 407 process_app_pkt(&pkt_rx, rssi); 408 409 else // the packet is destined for some one else 410 if(pkt_rx.src != NODE_ADDR) // I did not send this packet 411 route_packet(&pkt_rx); // route this packet 412 else // I sent this pkt and it has come back to me. Drop it 413 ; 414 } 415 else // its a network control packet 416 { 417 if(pkt_rx.dest == NODE_ADDR || pkt_rx.dest == BCAST_ADDR) 418 process_nw_ctrl_pkt(&pkt_rx, rssi); 419 420 else // the packet is destined for some one else 421 if(pkt_rx.src != NODE_ADDR) // I did not send this packet 422 route_packet(&pkt_rx); // route this packet 423 else // I sent this pkt and it has come back to me. Drop it 424 ; 425 } 426 427 nrk_led_clr(GREEN_LED); // clear the LEDs 428 nrk_led_clr(ORANGE_LED); 429 430 } // end while(1) 431 432 return; 433 } // end rx_task 369 434 370 /*********************************************************************************************/ 435 371 void build_Msg_Hello(Msg_Hello *m) … … 451 387 void build_Msg_NgbList(Msg_NgbList *m) 452 388 { 453 enter_cr(nl_sem, "build_Msg_NgbList()");389 enter_cr(nl_sem, 32); 454 390 m -> nl = nl; 455 leave_cr(nl_sem, "build_Msg_NgbList()");391 leave_cr(nl_sem, 32); 456 392 457 393 // Build the network packet which will hold the NGB_LIST message … … 466 402 467 403 return; 468 } 404 } 405 /**********************************************************************************************/ 406 407 void nl_rx_task() 408 { 409 uint8_t len; // to hold the size of the received packet, always = sizeof(NW_Packet) 410 int8_t rssi; // to hold rssi of received packet 411 uint8_t *local_rx_buf; // pointer to receive buffer of link layer 412 int8_t val; // status variable to hold the return type of function calls 413 414 if(DEBUG_NL >= 1) 415 printf("DEBUG: NL_RX_TASK PID=%d\r\n",nrk_get_pid()); 416 417 // initialise the BMAC layer 418 val = bmac_init(25); 419 if(val == NRK_ERROR) 420 nrk_kprintf(PSTR("Error returned by bmac_init()\r\n")); 421 422 val = bmac_rx_pkt_set_buffer(rx_buf, RF_BUFFER_SIZE); 423 if(val == NRK_ERROR) 424 nrk_kprintf(PSTR("Error returned in bmac_rx_pkt_set_buffer()\r\n")); 425 426 427 while(1) 428 { 429 if(DEBUG_NL == 2) 430 nrk_kprintf(PSTR("DEBUG: Waiting for packet in RX task\r\n")); 431 432 // wait for the next packet 433 while(bmac_rx_pkt_ready() == 0) 434 { 435 val = bmac_wait_until_rx_packet(); 436 if(DEBUG_NL == 2) 437 printf("Val here = %d\n", val); 438 } 439 440 if(DEBUG_NL == 2) 441 nrk_kprintf(PSTR("DEBUG: Received a packet\r\n")); 442 443 nrk_led_set(GREEN_LED); // shine the LED 444 445 // Get the packet 446 do 447 { 448 local_rx_buf = bmac_rx_pkt_get(&len,&rssi); 449 if(local_rx_buf == NULL) 450 { 451 nrk_kprintf(PSTR("NULL returned by bmac_rx_pkt_get()\r\n")); 452 //break; 453 } 454 455 } while(local_rx_buf == NULL); 456 457 if(DEBUG_NL == 2) 458 { 459 nrk_kprintf(PSTR("Contents of received packet are\r\n")); 460 int8_t i; 461 for(i = 0; i < len; i++) 462 printf("%c ", local_rx_buf[i]); 463 } 464 465 // unpack the packet header from the received buffer 466 unpack_NW_Packet_header(&pkt_rx, local_rx_buf); 467 // copy the packet payload to the data field of the local packet 468 memcpy(pkt_rx.data, local_rx_buf + SIZE_NW_PACKET_HEADER, pkt_rx.length); 469 // Release the RX buffer quickly so future packets can arrive 470 bmac_rx_pkt_release(); 471 472 if(pkt_rx.src != 1 && pkt_rx.src != 2) // Temp if comdition 473 goto xyz; 474 475 // begin processing this packet 476 if(pkt_type(&pkt_rx) == APPLICATION) // its an application layer packet 477 { 478 if(DEBUG_NL == 2) 479 nrk_kprintf(PSTR("Received an application layer packet\r\n")); 480 481 if(pkt_rx.dest == NODE_ADDR || pkt_rx.dest == BCAST_ADDR) 482 process_app_pkt(&pkt_rx, rssi); 483 484 else // the packet is destined for some one else 485 if(pkt_rx.src != NODE_ADDR) // I did not send this packet 486 route_packet(&pkt_rx); // route this packet 487 else // I sent this pkt and it has come back to me. Drop it 488 ; 489 } 490 else // its a network control packet 491 { 492 if(DEBUG_NL == 2) 493 nrk_kprintf(PSTR("Received an network control packet\r\n")); 494 495 if(pkt_rx.dest == NODE_ADDR || pkt_rx.dest == BCAST_ADDR) 496 process_nw_ctrl_pkt(&pkt_rx, rssi); 497 498 else // the packet is destined for some one else 499 if(pkt_rx.src != NODE_ADDR) // I did not send this packet 500 route_packet(&pkt_rx); // route this packet 501 else // I sent this pkt and it has come back to me. Drop it 502 ; 503 } 504 505 xyz: nrk_led_clr(GREEN_LED); // clear the LEDs 506 nrk_led_clr(ORANGE_LED); 507 508 } // end while(1) 509 510 return; 511 } // end rx_task 512 469 513 /*********************************************************************************************/ 470 514 void nl_tx_task() … … 495 539 } */ 496 540 497 enter_cr(bm_sem, "nl_tx_task()");541 enter_cr(bm_sem, 34); 498 542 ptr = remove_tx_aq(); 499 leave_cr(bm_sem, "nl_tx_task()");543 leave_cr(bm_sem, 34); 500 544 if(ptr == NULL) 501 continue; // FIX ME 545 { 546 nrk_wait_until_next_period(); // FIX ME 547 continue; 548 } 502 549 503 550 if( pkt_type((ptr -> pkt).type) == APPLICATION ) … … 512 559 memcpy(tx_buf + SIZE_NW_PACKET_HEADER, (ptr -> pkt).data, (ptr -> pkt).length); 513 560 514 enter_cr(bm_sem, "nl_tx_task()");561 enter_cr(bm_sem, 34); 515 562 insert_tx_fq(ptr); // release the transmit buffer into the free queue 516 leave_cr(bm_sem, "nl_tx_task()");563 leave_cr(bm_sem, 34); 517 564 518 565 do … … 524 571 ret = nrk_event_wait (SIG(tx_done_signal)); 525 572 if(ret & SIG(tx_done_signal) == 0 ) 526 go_into_panic("Bug discovered in nl_tx_task()"); 527 573 { 574 nrk_int_disable(); 575 nrk_led_set(RED_LED); 576 while(1) 577 nrk_kprintf(PSTR("nl_tx_task(): Unknown signal caught\r\n")); 578 } 528 579 // signal 'send done' signal 529 enter_cr(bm_sem, "nl_tx_task()");580 enter_cr(bm_sem, 34); 530 581 nrk_event_signal(sd_sig[seg -> srcPort].send_done_signal); 531 leave_cr(bm_sem, "nl_tx_task()");582 leave_cr(bm_sem, 34); 532 583 } 533 584 … … 539 590 { 540 591 NL_RX_TASK.task = nl_rx_task; 541 NL_RX_TASK.Ptos = (void *) &nl_rx_task_stack[NRK_APP_STACKSIZE -1];592 NL_RX_TASK.Ptos = (void *) &nl_rx_task_stack[NRK_APP_STACKSIZE - 1]; 542 593 NL_RX_TASK.Pbos = (void *) &nl_rx_task_stack[0]; 543 NL_RX_TASK.prio = 3;594 NL_RX_TASK.prio = 19; 544 595 NL_RX_TASK.FirstActivation = TRUE; 545 596 NL_RX_TASK.Type = BASIC_TASK; 546 597 NL_RX_TASK.SchType = PREEMPTIVE; 547 598 548 NL_RX_TASK.period.secs = 3; 599 NL_RX_TASK.cpu_reserve.secs = 3; 600 NL_RX_TASK.cpu_reserve.nano_secs = 0; 601 NL_RX_TASK.period.secs = 4; 549 602 NL_RX_TASK.period.nano_secs = 0; 550 NL_RX_TASK.cpu_reserve.secs = 2; 551 NL_RX_TASK.cpu_reserve.nano_secs = 500*NANOS_PER_MS; 603 552 604 553 605 NL_RX_TASK.offset.secs = 0; … … 557 609 /*****************************************************************************************/ 558 610 NL_TX_TASK.task = nl_tx_task; 559 NL_TX_TASK.Ptos = (void *) &nl_tx_task_stack[NRK_APP_STACKSIZE -1];611 NL_TX_TASK.Ptos = (void *) &nl_tx_task_stack[NRK_APP_STACKSIZE - 1]; 560 612 NL_TX_TASK.Pbos = (void *) &nl_tx_task_stack[0]; 561 NL_TX_TASK.prio = 2;613 NL_TX_TASK.prio = 18; 562 614 NL_TX_TASK.FirstActivation = TRUE; 563 615 NL_TX_TASK.Type = BASIC_TASK; 564 616 NL_TX_TASK.SchType = PREEMPTIVE; 565 617 566 NL_TX_TASK.cpu_reserve.secs = 0;618 NL_TX_TASK.cpu_reserve.secs = 3; 567 619 NL_TX_TASK.cpu_reserve.nano_secs = 0; 568 NL_TX_TASK.period.secs = NL_TX_TASK.cpu_reserve.secs + HELLO_PERIOD;620 NL_TX_TASK.period.secs = 4; 569 621 NL_TX_TASK.period.nano_secs = 0; 570 622 … … 574 626 575 627 if(DEBUG_NL == 2) 576 nrk_kprintf(PSTR(" DEBUG: Network layer task creation done\r\n"));628 nrk_kprintf(PSTR("create_network_layer_tasks(): Network layer task creation done\r\n")); 577 629 } 578 630 … … 596 648 nl_sem = nrk_sem_create(1,MAX_TASK_PRIORITY); // create the mutex 597 649 if(nl_sem == NULL) 598 go_into_panic("Error creating the semaphore in initialise_network_layer()"); 650 { 651 nrk_int_disable(); 652 nrk_led_set(RED_LED); 653 while(1) 654 nrk_kprintf(PSTR("Error creating semaphore in initialise_network_layer()\r\n")); 655 } 599 656 600 657 create_network_layer_tasks(); // create the two tasks -
nano-RK/projects/network_stack/NetworkLayer.h
r103 r113 12 12 #define TRUE 1 13 13 #define FALSE 0 14 #define DEBUG_NL 0// debug flag for the network layer14 #define DEBUG_NL 2 // debug flag for the network layer 15 15 16 16 /****************************** CONSTANTS *********************************************/ … … 38 38 #define SIZE_NW_PACKET_HEADER 8 39 39 #define SIZE_NW_PACKET (SIZE_NW_PACKET_HEADER + MAX_NETWORK_PAYLOAD) 40 41 #define RF_BUFFER_SIZE 116 40 42 41 43 /* possible bit mask values of the packet type */ -
nano-RK/projects/network_stack/TransportLayerUDP.c
r103 r113 34 34 extern nrk_sem_t *bm_sem; 35 35 36 extern void enter_cr(nrk_sem_t *, int8_t *);36 extern void enter_cr(nrk_sem_t *, int8_t); 37 37 extern void leave_cr(nrk_sem_t *, int8_t *); 38 38 extern int8_t get_num_bufs_free(); … … 65 65 tl_sem = nrk_sem_create(1,MAX_TASK_PRIORITY); // create the mutex 66 66 if(tl_sem == NULL) 67 go_into_panic("Error creating the semaphore in initialise_transport_layer_udp()"); 68 67 { 68 nrk_int_disable(); 69 nrk_led_set(RED_LED); 70 while(1) 71 nrk_kprintf(PSTR("initialise_transport_layer_udp(): Error creating the semaphore\r\n")); 72 } 69 73 // set the init_done flag 70 74 tlayer_init_done = 1; … … 94 98 int8_t result; // temporary variable 95 99 96 enter_cr(tl_sem, "create_socket()");100 enter_cr(tl_sem, 3); 97 101 98 102 if(tlayer_init_done != 1) 99 go_into_panic("Transport layer not initialised inside create_socket()"); 103 { 104 nrk_int_disable(); 105 nrk_led_set(RED_LED); 106 while(1) 107 nrk_kprintf(PSTR("create_socket(): Transport layer not initialised\r\n")); 108 } 100 109 101 110 switch(type) … … 125 134 { 126 135 int8_t i; // loop index 127 128 for(i = EPHEMERAL_PORT_NUM_START; i <= MAX_PORTS; i++) // check only for ephemeral port numbers 129 { 136 if(DEBUG_TL == 2) 137 printf("Inside get_next_available_ports(). Value of ports = %d\r\n", ports); 138 139 //for(i = EPHEMERAL_PORT_NUM_START; i <= MAX_PORTS; i++) // check only for ephemeral port numbers 140 for(i = 3; i <= MAX_PORTS; i++) 141 { 142 if(DEBUG_TL == 2) 143 printf("Inside get_next_available_ports(). i = %d\r\n", i); 130 144 if( ((ports >> i) & ((uint32_t)1)) == 0 ) // bit 'i' is 0 131 145 return i; … … 167 181 int8_t size; // size of receive queue allocated for this port 168 182 169 enter_cr(bm_sem, "bind()");170 enter_cr(tl_sem, "bind()");183 enter_cr(bm_sem, 8); 184 enter_cr(tl_sem, 8); 171 185 172 186 if(tlayer_init_done != 1) 173 go_into_panic("Transport Layer not initialised inside bind()"); 174 187 { 188 nrk_int_disable(); 189 nrk_led_set(RED_LED); 190 while(1) 191 nrk_kprintf(PSTR("bind(): Transport layer not initialised\r\n")); 192 } 193 175 194 // ERROR CHECKING 176 195 if(sock_num < 0 || sock_num >= MAX_PORTS) // bad input … … 238 257 rx_buf_mgr[port].pid = nrk_get_pid(); // fill up the members of the ReceiveBufferManager 239 258 if( nrk_signal_register(rx_buf_mgr[port].seg_arrived_signal) == NRK_ERROR ) 240 go_into_panic("Error while registering for seg_arrived_signal in bind()"); 259 { 260 nrk_int_disable(); 261 nrk_led_set(RED_LED); 262 while(1) 263 nrk_kprintf(PSTR("bind(): Error while registering for seg_arrived_signal\r\n")); 264 } 241 265 242 266 // allocate 'size' buffers … … 245 269 index = get_index_unallocated_rx_buf(); // look for the unallocated receive buffer 246 270 if(index == NRK_ERROR) // this should not happen 247 go_into_panic("Bug found in bind()"); 248 249 insert_rx_fq(&rx_buf_udp[index], port, EMPTY); // insert the buffer in the free queue of the port 271 { 272 nrk_int_disable(); 273 nrk_led_set(RED_LED); 274 while(1) 275 nrk_kprintf(PSTR("bind(): Bug found in implementation of num_bufs_free\r\n")); 276 } 277 278 insert_rx_fq(&rx_buf_udp[index], port, EMPTY); // insert the buffer in the free queue of the port 279 rx_buf_mgr[port].countTotal++; // increment the countTotal for this port 250 280 num_bufs_free--; 251 281 } … … 261 291 int8_t count; 262 292 263 enter_cr(bm_sem, "bind()");264 enter_cr(tl_sem, "bind()");293 enter_cr(bm_sem, 9); 294 enter_cr(tl_sem, 9); 265 295 266 296 // ERROR checking … … 269 299 _nrk_errno_set(INVALID_ARGUMENT); 270 300 271 leave_cr(tl_sem, "bind()");272 leave_cr(bm_sem, "bind()");301 leave_cr(tl_sem, 9); 302 leave_cr(bm_sem, 9); 273 303 return NRK_ERROR; 274 304 } … … 278 308 _nrk_errno_set(INVALID_SOCKET); 279 309 280 leave_cr(tl_sem, "bind()");281 leave_cr(bm_sem, "bind()");310 leave_cr(tl_sem, 9); 311 leave_cr(bm_sem, 9); 282 312 return NRK_ERROR; 283 313 } … … 285 315 if(sock[sock_num].port == INVALID_PORT) // no socket operations were performed yet 286 316 { 287 leave_cr(tl_sem, "bind()");288 leave_cr(bm_sem, "bind()");317 leave_cr(tl_sem, 9); 318 leave_cr(bm_sem, 9); 289 319 return 0; 290 320 } … … 294 324 count = rx_buf_mgr[port].countTotal; 295 325 296 leave_cr(tl_sem, "bind()");297 leave_cr(bm_sem, "bind()");326 leave_cr(tl_sem, 9); 327 leave_cr(bm_sem, 9); 298 328 return count; 299 329 } … … 307 337 int8_t index; // stores the index of next unallocated receive buffer 308 338 309 enter_cr(bm_sem, "set_rx_queue_size()");310 enter_cr(tl_sem, "set_rx_queue_size()");339 enter_cr(bm_sem, 10); 340 enter_cr(tl_sem, 10); 311 341 312 342 if(tlayer_init_done != 1) 313 go_into_panic("Transport Layer not initialised. Inside set_rx_queue_size()"); 314 343 { 344 nrk_int_disable(); 345 nrk_led_set(RED_LED); 346 while(1) 347 nrk_kprintf(PSTR("set_rx_queue_size(): Transport layer not initialised\r\n")); 348 } 349 315 350 flag = 0; // assume bind() was called prior to this call 316 351 // ERROR CHECKING … … 319 354 _nrk_errno_set(INVALID_ARGUMENT); 320 355 321 leave_cr(tl_sem, "set_rx_queue_size()");322 leave_cr(bm_sem, "set_rx_queue_size()");356 leave_cr(tl_sem, 10); 357 leave_cr(bm_sem, 10); 323 358 return NRK_ERROR; 324 359 } … … 328 363 _nrk_errno_set(INVALID_SOCKET); 329 364 330 leave_cr(tl_sem, "set_rx_queue_size()");331 leave_cr(bm_sem, "set_rx_queue_size()");365 leave_cr(tl_sem, 10); 366 leave_cr(bm_sem, 10); 332 367 return NRK_ERROR; 333 368 } … … 339 374 if(port == NRK_ERROR) // no port available 340 375 { 341 leave_cr(tl_sem, "set_rx_queue_size()");342 leave_cr(bm_sem, "set_rx_queue_size()");376 leave_cr(tl_sem, 10); 377 leave_cr(bm_sem, 10); 343 378 return NRK_ERROR; // errorNo is already set to NO_PORTS_AVAILABLE 344 379 } … … 347 382 _nrk_errno_set(NO_RX_BUFFERS_AVAILABLE); 348 383 349 leave_cr(tl_sem, "set_rx_queue_size()");350 leave_cr(bm_sem, "set_rx_queue_size()");384 leave_cr(tl_sem, 10); 385 leave_cr(bm_sem, 10); 351 386 return NRK_ERROR; 352 387 } … … 355 390 sock[sock_num].port = port; 356 391 assign_port(port); 357 if( nrk_signal_register(rx_buf_mgr[port].seg_arrived_signal) == NRK_ERROR) 358 go_into_panic("Error while registering for seg_arrived_signal in set_rx_queue_size()"); 392 if( nrk_signal_register(rx_buf_mgr[port].seg_arrived_signal) == NRK_ERROR ) 393 { 394 nrk_int_disable(); 395 nrk_led_set(RED_LED); 396 while(1) 397 nrk_kprintf(PSTR("set_rx_queue_size(): Error registering for seg_arrived_signal\r\n")); 398 } 359 399 } 360 400 else // bind was called earlier. DEFAULT_RX_QUEUE_SIZE buffers already allocated … … 363 403 if(size == DEFAULT_RX_QUEUE_SIZE) // nothing to do, buffers already allocated 364 404 { 365 leave_cr(tl_sem, "set_rx_queue_size()");366 leave_cr(bm_sem, "set_rx_queue_size()");405 leave_cr(tl_sem, 10); 406 leave_cr(bm_sem, 10); 367 407 return size; 368 408 } … … 383 423 index = get_index_unallocated_rx_buf(); // look for the next unallocated receive buffer 384 424 if(index == NRK_ERROR) // this should not happen 385 go_into_panic("Bug found in set_rx_queue_size()"); 386 387 insert_rx_fq(&rx_buf_udp[index], port, EMPTY); // insert the buffer in the free queue of the port 425 { 426 nrk_int_disable(); 427 nrk_led_set(RED_LED); 428 while(1) 429 nrk_kprintf(PSTR("set_rx_queue_size(): Bug found in implementation of num_bufs_free\r\n")); 430 } 431 insert_rx_fq(&rx_buf_udp[index], port, EMPTY); // insert the buffer in the free queue of the port 432 rx_buf_mgr[port].countTotal++; 388 433 num_bufs_free--; 389 434 } 390 435 391 leave_cr(tl_sem, "set_rx_queue_size()");392 leave_cr(bm_sem, "set_rx_queue_size()");436 leave_cr(tl_sem, 10); 437 leave_cr(bm_sem, 10); 393 438 return size; 394 439 } … … 399 444 ReceiveBufferUDP *buf; // pointer to traverse the buffer list of the free queue 400 445 401 enter_cr(bm_sem, "release_buffer()");402 enter_cr(tl_sem, "release_buffer()");446 enter_cr(bm_sem, 11); 447 enter_cr(tl_sem, 11); 403 448 404 449 // ERROR CHECKING … … 407 452 _nrk_errno_set(INVALID_ARGUMENT); 408 453 409 leave_cr(tl_sem, "release_buffer()");410 leave_cr(bm_sem, "release_buffer()");454 leave_cr(tl_sem, 11); 455 leave_cr(bm_sem, 11); 411 456 return NRK_ERROR; 412 457 } … … 415 460 _nrk_errno_set(INVALID_SOCKET); 416 461 417 leave_cr(tl_sem, "release_buffer()");418 leave_cr(bm_sem, "release_buffer()");462 leave_cr(tl_sem, 11); 463 leave_cr(bm_sem, 11); 419 464 return NRK_ERROR; 420 465 } … … 423 468 _nrk_errno_set(INVALID_SOCKET); 424 469 425 leave_cr(tl_sem, "release_buffer()");426 leave_cr(bm_sem, "release_buffer()");470 leave_cr(tl_sem, 11); 471 leave_cr(bm_sem, 11); 427 472 return NRK_ERROR; 428 473 } … … 442 487 _nrk_errno_set(INVALID_ARGUMENT); 443 488 444 leave_cr(tl_sem, "release_buffer()");445 leave_cr(bm_sem, "release_buffer()");489 leave_cr(tl_sem, 11); 490 leave_cr(bm_sem, 11); 446 491 return NRK_ERROR; 447 492 } … … 450 495 rx_buf_mgr[port].countFree++; 451 496 452 leave_cr(tl_sem, "release_buffer()");453 leave_cr(bm_sem, "release_buffer()");497 leave_cr(tl_sem, 11); 498 leave_cr(bm_sem, 11); 454 499 return NRK_OK; 455 500 } … … 460 505 ReceiveBufferUDP *ptr; // temp variable 461 506 462 enter_cr(bm_sem, "close_socket()");463 enter_cr(tl_sem, "close_socket()");507 enter_cr(bm_sem, 12); 508 enter_cr(tl_sem, 12); 464 509 465 510 // ERROR checking … … 468 513 _nrk_errno_set(INVALID_ARGUMENT); 469 514 470 leave_cr(tl_sem, "close_socket()");471 leave_cr(bm_sem, "close_socket()");515 leave_cr(tl_sem, 12); 516 leave_cr(bm_sem, 12); 472 517 return NRK_ERROR; 473 518 } … … 476 521 _nrk_errno_set(INVALID_SOCKET); 477 522 478 leave_cr(tl_sem, "close_socket()");479 leave_cr(bm_sem, "close_socket()");523 leave_cr(tl_sem, 12); 524 leave_cr(bm_sem, 12); 480 525 return NRK_ERROR; 481 526 } … … 487 532 rx_buf_mgr[port].pid = INVALID_PID; 488 533 if( nrk_signal_delete(rx_buf_mgr[port].seg_arrived_signal) == NRK_ERROR ) 489 go_into_panic("Error while deleting seg_arrived_signal in close_socket()"); 534 { 535 nrk_int_disable(); 536 nrk_led_set(RED_LED); 537 while(1) 538 nrk_kprintf(PSTR("close_socket(): Error in deleting seg_arrived_signal\r\n")); 539 } 490 540 491 541 // remove all the FULL buffers from the port queue … … 507 557 sock[sock_num].pid = INVALID_PID; 508 558 509 leave_cr(tl_sem, "close_socket()");510 leave_cr(bm_sem, "close_socket()");559 leave_cr(tl_sem, 12); 560 leave_cr(bm_sem, 12); 511 561 return NRK_OK; 512 562 } … … 514 564 int8_t is_port_associated(int8_t port) 515 565 { 516 enter_cr(tl_sem, "is_port_associated()");566 enter_cr(tl_sem, 13); 517 567 518 568 if(check_port_available(port) == NRK_OK) 519 569 { 520 leave_cr(tl_sem, "is_port_associated()");570 leave_cr(tl_sem, 13); 521 571 return FALSE; 522 572 } 523 leave_cr(tl_sem, "is_port_associated()");573 leave_cr(tl_sem, 13); 524 574 return TRUE; 525 575 } … … 529 579 int8_t port; // to hold the port number corresponding to the socket number passed 530 580 int8_t result; // to hold the return type of various functions 531 532 enter_cr(bm_sem, "send()"); 533 enter_cr(tl_sem, "send()"); 581 582 if(DEBUG_TL == 2) 583 nrk_kprintf(PSTR("Entered send operation of TL\r\n")); 584 585 enter_cr(bm_sem, 14); 586 enter_cr(tl_sem, 14); 587 588 if(DEBUG_TL == 2) 589 nrk_kprintf(PSTR("Inside CR of send operation of TL\r\n")); 534 590 535 591 // ERROR checking … … 538 594 _nrk_errno_set(INVALID_ARGUMENT); 539 595 540 leave_cr(tl_sem, "send()");541 leave_cr(bm_sem, "send()");596 leave_cr(tl_sem, 14); 597 leave_cr(bm_sem, 14); 542 598 return NRK_ERROR; 543 599 } … … 547 603 _nrk_errno_set(INVALID_ARGUMENT); 548 604 549 leave_cr(tl_sem, "send()");550 leave_cr(bm_sem, "send()");605 leave_cr(tl_sem, 14); 606 leave_cr(bm_sem, 14); 551 607 return NRK_ERROR; 552 608 } … … 556 612 _nrk_errno_set(INVALID_ARGUMENT); 557 613 558 leave_cr(tl_sem, "send()");559 leave_cr(bm_sem, "send()");614 leave_cr(tl_sem, 14); 615 leave_cr(bm_sem, 14); 560 616 return NRK_ERROR; 561 617 } … … 565 621 _nrk_errno_set(INVALID_ARGUMENT); 566 622 567 leave_cr(tl_sem, "send()");568 leave_cr(bm_sem, "send()");623 leave_cr(tl_sem, 14); 624 leave_cr(bm_sem, 14); 569 625 return NRK_ERROR; 570 626 } … … 574 630 _nrk_errno_set(INVALID_SOCKET); 575 631 576 leave_cr(tl_sem, "send()");577 leave_cr(bm_sem, "send()");632 leave_cr(tl_sem, 14); 633 leave_cr(bm_sem, 14); 578 634 return NRK_ERROR; 579 635 } … … 583 639 // not called earlier 584 640 { 585 // FIX ME IMPORTANT................. 641 // FIX ME IMPORTANT................. 642 leave_cr(tl_sem, 14); 643 leave_cr(bm_sem, 14); 586 644 result = set_rx_queue_size(sock_num, DEFAULT_RX_QUEUE_SIZE); 645 enter_cr(bm_sem, 14); 646 enter_cr(tl_sem, 14); 587 647 if(result == NRK_ERROR) // error number will be set already 588 648 { 589 leave_cr(tl_sem, "send()");590 leave_cr(bm_sem, "send()");649 leave_cr(tl_sem, 14); 650 leave_cr(bm_sem, 14); 591 651 return NRK_ERROR; 592 652 } … … 595 655 // register for the 'send done' signal 596 656 if( nrk_signal_register(sd_sig[port].send_done_signal) == NRK_ERROR ) 597 go_into_panic("Error while registering for send_done_signal in send()"); 598 657 { 658 nrk_int_disable(); 659 nrk_led_set(RED_LED); 660 while(1) 661 nrk_kprintf(PSTR("send(): Error while registering for send_done_signal\r\n")); 662 } 599 663 600 664 // prepare a UDP segment … … 615 679 616 680 // insert the packet into the active transmit queue of the system 681 682 if(DEBUG_TL == 2) 683 nrk_kprintf(PSTR("Inside send(). Before inserting packet in transmit queue\r\n")); 684 617 685 result = insert_tx_aq(&pkt); 686 687 if(DEBUG_TL == 2) 688 nrk_kprintf(PSTR("Inside send(). After inserting packet in transmit queue\r\n")); 689 618 690 if(result == NRK_ERROR) 619 691 _nrk_errno_set(NO_TX_BUFFERS_AVAILABLE); 620 692 621 leave_cr(tl_sem, "send()");622 leave_cr(bm_sem, "send()");693 leave_cr(tl_sem, 14); 694 leave_cr(bm_sem, 14); 623 695 return result; 624 696 … … 627 699 int8_t set_timeout(int8_t sock_num, int8_t secs, int8_t nano_secs) 628 700 { 629 enter_cr(tl_sem, "set_timeout()");701 enter_cr(tl_sem, 15); 630 702 631 703 … … 635 707 _nrk_errno_set(INVALID_ARGUMENT); 636 708 637 leave_cr(tl_sem, "set_timeout()");709 leave_cr(tl_sem, 15); 638 710 return NRK_ERROR; 639 711 } … … 643 715 _nrk_errno_set(INVALID_ARGUMENT); 644 716 645 leave_cr(tl_sem, "set_timeout()");717 leave_cr(tl_sem, 15); 646 718 return NRK_ERROR; 647 719 } … … 651 723 _nrk_errno_set(INVALID_SOCKET); 652 724 653 leave_cr(tl_sem, "set_timeout()");725 leave_cr(tl_sem, 15); 654 726 return NRK_ERROR; 655 727 } … … 660 732 sock[sock_num].timeout.nano_secs = nano_secs; 661 733 662 leave_cr(tl_sem, "set_timeout()");734 leave_cr(tl_sem, 15); 663 735 return NRK_OK; 664 736 } … … 671 743 Transport_Segment_UDP *seg;// pointer to received segment from the network layer 672 744 673 enter_cr(bm_sem, "receive()");674 enter_cr(tl_sem, "receive()");745 enter_cr(bm_sem, 16); 746 enter_cr(tl_sem, 16); 675 747 676 748 // ERROR checking … … 679 751 _nrk_errno_set(INVALID_ARGUMENT); 680 752 681 leave_cr(tl_sem, "receive()");682 leave_cr(bm_sem, "receive()");753 leave_cr(tl_sem, 16); 754 leave_cr(bm_sem, 16); 683 755 return NULL; 684 756 } … … 688 760 _nrk_errno_set(INVALID_SOCKET); // socket description not complete 689 761 690 leave_cr(tl_sem, "receive()");691 leave_cr(bm_sem, "receive()");762 leave_cr(tl_sem, 16); 763 leave_cr(bm_sem, 16); 692 764 return NULL; 693 765 } … … 698 770 { 699 771 // the user has not specified any maximum wait period 772 if(DEBUG_TL == 2) 773 nrk_kprintf(PSTR("receive(): Inside the section that relates to 'without timeout' receive\r\n")); 700 774 701 775 // check the receive buffer manager for this port to see if there are any queued segments 702 776 if(rx_buf_mgr[port].countFree == rx_buf_mgr[port].countTotal) // no queued segments 703 777 { 778 if(DEBUG_TL == 2) 779 printf("receive(): No segments in receive queue of port = %d\n", port); 704 780 while(1) 705 781 { 706 leave_cr(tl_sem, "receive()");707 leave_cr(bm_sem, "receive()");782 leave_cr(tl_sem, 16); 783 leave_cr(bm_sem, 16); 708 784 my_sigs = nrk_event_wait(SIG(rx_buf_mgr[port].seg_arrived_signal)); // block 709 enter_cr(bm_sem, "receive()");710 enter_cr(tl_sem, "receive()");785 enter_cr(bm_sem, 16); 786 enter_cr(tl_sem, 16); 711 787 712 788 // check what signal we got 713 789 if(my_sigs == 0) 714 go_into_panic("Error calling nrk_event_wait() in receive()..1"); 715 790 { 791 nrk_int_disable(); 792 nrk_led_set(RED_LED); 793 while(1) 794 nrk_kprintf(PSTR("receive(): Error calling nrk_event_wait (without timeout)\r\n")); 795 } 716 796 if( my_sigs & SIG(rx_buf_mgr[port].seg_arrived_signal) ) // got a segment 797 { 798 if(DEBUG_TL == 2) 799 nrk_kprintf(PSTR("receive(): Received the seg arrived signal\r\n")); 717 800 break; 801 } 718 802 else // some other signal was received by the task. Go back and wait for 'seg arrived' 719 go_into_panic("Bug discovered in receive()...1"); 803 { 804 nrk_int_disable(); 805 nrk_led_set(RED_LED); 806 while(1) 807 nrk_kprintf(PSTR("receive(): Unknown signal received (without timeout)\r\n")); 808 } 720 809 } // end while(1) 721 810 } // end if … … 723 812 else // the user has specified a timeout value 724 813 { 814 if(DEBUG_TL == 2) 815 nrk_kprintf(PSTR("receive(): Inside the section that relates to 'with timeout' receive\r\n")); 816 725 817 if( nrk_signal_register(nrk_wakeup_signal) == NRK_ERROR) 726 go_into_panic("nrk_signal_register(nrk_wakeup_signal) returned an error in receive()"); 818 { 819 nrk_int_disable(); 820 nrk_led_set(RED_LED); 821 while(1) 822 nrk_kprintf(PSTR("receive(): Error in registering for nrk_wakeup_signal (with timeout)\r\n")); 823 } 727 824 if( nrk_set_next_wakeup(sock[sock_num].timeout) == NRK_ERROR) 728 go_into_panic("nrk_set_next_wakeup() returned an error in receive()"); 729 825 { 826 nrk_int_disable(); 827 nrk_led_set(RED_LED); 828 while(1) 829 nrk_kprintf(PSTR("receive(): Error returned by nrk_set_next_wakeup (with timeout)\r\n")); 830 } 730 831 // check the receive manager for this port to see if there are any queued segments 731 832 if(rx_buf_mgr[port].countFree == rx_buf_mgr[port].countTotal) // no queued segments … … 733 834 while(1) 734 835 { 735 leave_cr(tl_sem, "receive()");736 leave_cr(bm_sem, "receive()");836 leave_cr(tl_sem, 16); 837 leave_cr(bm_sem, 16); 737 838 my_sigs = nrk_event_wait(SIG(rx_buf_mgr[port].seg_arrived_signal) | SIG(nrk_wakeup_signal)); 738 enter_cr(bm_sem, "receive()");739 enter_cr(tl_sem, "receive()");839 enter_cr(bm_sem, 16); 840 enter_cr(tl_sem, 16); 740 841 741 842 // check what signal we got 742 843 if(my_sigs == 0) 743 go_into_panic("Error calling nrk_event_wait() in receive()..2"); 744 844 { 845 nrk_int_disable(); 846 nrk_led_set(RED_LED); 847 while(1) 848 nrk_kprintf(PSTR("receive(): Error calling nrk_event_wait() (with timeout)\r\n")); 849 } 745 850 if( my_sigs & SIG(rx_buf_mgr[port].seg_arrived_signal) ) // got a segment 746 851 { 747 852 sock[sock_num].timeout.secs = 0; // invalidate the timeout 748 853 sock[sock_num].timeout.nano_secs = 0; 854 if(DEBUG_TL == 2) 855 nrk_kprintf(PSTR("Received the seg arrived signal\r\n")); 749 856 // FIX me change the wakeup period back to what it was 750 857 break; … … 758 865 _nrk_errno_set(SOCKET_TIMEOUT); 759 866 760 leave_cr(tl_sem, "receive()");761 leave_cr(bm_sem, "receive()");867 leave_cr(tl_sem, 16); 868 leave_cr(bm_sem, 16); 762 869 return NULL; 763 870 } 764 871 else 765 go_into_panic("Bug discovered in receive()...2"); 872 { 873 nrk_int_disable(); 874 nrk_led_set(RED_LED); 875 while(1) 876 nrk_kprintf(PSTR("receive(): Unknown signal received (with timeout)\r\n")); 877 } 766 878 } // end while(1) 767 879 } // end if … … 775 887 buf = remove_rx_pq(port); // remove the buffer from the port queue 776 888 if(buf == NULL) // this should not happen 777 go_into_panic("Bug discovered in receive()...3"); 889 { 890 nrk_int_disable(); 891 nrk_led_set(RED_LED); 892 while(1) 893 nrk_kprintf(PSTR("receive(): Bug found in implementation of seg_arrived_signal / rx buffer mgmt\r\n")); 894 } 778 895 insert_rx_fq(buf, port, FULL); // insert the buffer into the free queue with status = FULL 779 780 896 seg = &(buf -> seg); 781 897 … … 789 905 *rssi = buf -> rssi; 790 906 791 leave_cr(tl_sem, "receive()");792 leave_cr(bm_sem, "receive()");907 leave_cr(tl_sem, 16); 908 leave_cr(bm_sem, 16); 793 909 return seg -> data; 794 910 } … … 800 916 int8_t count1, count2, count3; 801 917 802 enter_cr(bm_sem, "check_receive_queue()");803 enter_cr(tl_sem, "check_receive_queue()");918 enter_cr(bm_sem, 17); 919 enter_cr(tl_sem, 17); 804 920 805 921 … … 809 925 _nrk_errno_set(INVALID_ARGUMENT); 810 926 811 leave_cr(tl_sem, "check_receive_queue()");812 leave_cr(bm_sem, "check_receive_queue()");927 leave_cr(tl_sem, 17); 928 leave_cr(bm_sem, 17); 813 929 return NRK_ERROR; 814 930 } … … 818 934 _nrk_errno_set(INVALID_SOCKET); 819 935 820 leave_cr(tl_sem, "check_receive_queue()");821 leave_cr(bm_sem, "check_receive_queue()");936 leave_cr(tl_sem, 17); 937 leave_cr(bm_sem, 17); 822 938 return NRK_ERROR; 823 939 } … … 828 944 count3 = get_in_process_buf_count(port); 829 945 830 leave_cr(tl_sem, "check_receive_queue()");831 leave_cr(bm_sem, "check_receive_queue()");946 leave_cr(tl_sem, 17); 947 leave_cr(bm_sem, 17); 832 948 return count1 - count2 - count3; 833 949 } … … 838 954 nrk_sig_mask_t my_sigs; // temp variable 839 955 840 enter_cr(bm_sem, "wait_until_send_done()");841 enter_cr(tl_sem, "wait_until_send_done()");956 enter_cr(bm_sem, 18); 957 enter_cr(tl_sem, 18); 842 958 843 959 // ERROR checking … … 846 962 _nrk_errno_set(INVALID_ARGUMENT); 847 963 848 leave_cr(tl_sem, "wait_until_send_done()");849 leave_cr(bm_sem, "wait_until_send_done()");964 leave_cr(tl_sem, 18); 965 leave_cr(bm_sem, 18); 850 966 return NRK_ERROR; 851 967 } … … 855 971 _nrk_errno_set(INVALID_SOCKET); 856 972 857 leave_cr(tl_sem, "wait_until_send_done()");858 leave_cr(bm_sem, "wait_until_send_done()");973 leave_cr(tl_sem, 18); 974 leave_cr(bm_sem, 18); 859 975 return NRK_ERROR; 860 976 } … … 867 983 while(1) 868 984 { 869 leave_cr(tl_sem, "wait_until_send_done()");870 leave_cr(bm_sem, "wait_until_send_done()");985 leave_cr(tl_sem, 18); 986 leave_cr(bm_sem, 18); 871 987 my_sigs = nrk_event_wait( SIG(sd_sig[port].send_done_signal) ); 872 enter_cr(bm_sem, "wait_until_send_done()");873 enter_cr(tl_sem, "wait_until_send_done()");988 enter_cr(bm_sem, 18); 989 enter_cr(tl_sem, 18); 874 990 875 991 if(my_sigs == 0) 876 go_into_panic("Error calling nrk_event_wait() in wait_until_send_done()..1"); 992 { 993 nrk_int_disable(); 994 nrk_led_set(RED_LED); 995 while(1) 996 nrk_kprintf(PSTR("wait_until_send_done(): Error returned by nrk_event_wait() (without timeout)\r\n")); 997 } 877 998 878 999 if( my_sigs & SIG(sd_sig[port].send_done_signal) ) 879 1000 { 880 leave_cr(tl_sem, "wait_until_send_done()");881 leave_cr(bm_sem, "wait_until_send_done()");1001 leave_cr(tl_sem, 18); 1002 leave_cr(bm_sem, 18); 882 1003 return NRK_OK; 883 1004 } 884 1005 885 1006 else // unknown signal 886 go_into_panic("Bug discovered in wait_until_send_done()...1"); 1007 { 1008 nrk_int_disable(); 1009 nrk_led_set(RED_LED); 1010 while(1) 1011 nrk_kprintf(PSTR("wait_until_send_done(): Unknown signal received (without timeout)\r\n")); 1012 } 887 1013 } // end while(1) 888 1014 } … … 890 1016 { 891 1017 if( nrk_signal_register(nrk_wakeup_signal) == NRK_ERROR ) 892 go_into_panic("nrk_signal_register(nrk_wakeup_signal) returned an error in wait_until_send_done()"); 1018 { 1019 nrk_int_disable(); 1020 nrk_led_set(RED_LED); 1021 while(1) 1022 nrk_kprintf(PSTR("wait_until_send_done(): Error registering for nrk_wakeup_signal\r\n")); 1023 } 893 1024 if( nrk_set_next_wakeup(sock[sock_num].timeout) == NRK_ERROR) 894 go_into_panic("nrk_set_next_wakeup() returned an error in wait_until_send_done()"); 895 1025 { 1026 nrk_int_disable(); 1027 nrk_led_set(RED_LED); 1028 while(1) 1029 nrk_kprintf(PSTR("wait_until_send_done(): Error returned by nrk_set_next_wakeup()\r\n")); 1030 } 896 1031 while(1) 897 1032 { 898 leave_cr(tl_sem, "wait_until_send_done()");899 leave_cr(bm_sem, "wait_until_send_done()");1033 leave_cr(tl_sem, 18); 1034 leave_cr(bm_sem, 18); 900 1035 my_sigs = nrk_event_wait( SIG(sd_sig[port].send_done_signal) | SIG(nrk_wakeup_signal) ); 901 enter_cr(bm_sem, "wait_until_send_done()");902 enter_cr(tl_sem, "wait_until_send_done()");1036 enter_cr(bm_sem, 18); 1037 enter_cr(tl_sem, 18); 903 1038 904 1039 if(my_sigs == 0) 905 go_into_panic("Error calling nrk_event_wait() in wait_until_send_done()..2"); 1040 { 1041 nrk_int_disable(); 1042 nrk_led_set(RED_LED); 1043 while(1) 1044 nrk_kprintf(PSTR("wait_until_send_done(): Error returned by nrk_event_wait() (with timeout)\r\n")); 1045 } 906 1046 907 1047 if( my_sigs & SIG(sd_sig[port].send_done_signal) ) … … 910 1050 sock[sock_num].timeout.nano_secs = 0; 911 1051 912 leave_cr(tl_sem, "wait_until_send_done()");913 leave_cr(bm_sem, "wait_until_send_done()");1052 leave_cr(tl_sem, 18); 1053 leave_cr(bm_sem, 18); 914 1054 return NRK_OK; 915 1055 } … … 921 1061 _nrk_errno_set(SOCKET_TIMEOUT); 922 1062 923 leave_cr(tl_sem, "wait_until_send_done()");924 leave_cr(bm_sem, "wait_until_send_done()");1063 leave_cr(tl_sem, 18); 1064 leave_cr(bm_sem, 18); 925 1065 return NRK_ERROR; 1066 } 1067 else // unknown signal caught 1068 { 1069 nrk_int_disable(); 1070 nrk_led_set(RED_LED); 1071 while(1) 1072 nrk_kprintf(PSTR("wait_until_send_done(): Unknown signal received (with timeout)\r\n")); 926 1073 } 927 1074 } //end while(1) 928 1075 } // end else 929 1076 930 leave_cr(tl_sem, "wait_until_send_done()");931 leave_cr(bm_sem, "wait_until_send_done()");1077 leave_cr(tl_sem, 18); 1078 leave_cr(bm_sem, 18); 932 1079 return NRK_ERROR; 933 1080 } -
nano-RK/projects/network_stack/TransportLayerUDP.h
r103 r113 12 12 /********************************* CONSTANTS **********************************************/ 13 13 14 #define DEBUG_TL 0 // debug flag for the transport layer14 #define DEBUG_TL 0 // debug flag for the transport layer 15 15 16 16 // Types of sockets supported by the network stack … … 24 24 #define SIZE_TRANSPORT_UDP_HEADER 3 25 25 #define MAX_TRANSPORT_UDP_SEG (MAX_APP_PAYLOAD + SIZE_TRANSPORT_UDP_HEADER) 26 #define MAX_PORTS 24 // maximum number of ports that can be opened in the system26 #define MAX_PORTS 4 // maximum number of ports that can be opened in the system 27 27 #define INVALID_PORT 0 // indicates an invalid port number 28 28 #define INVALID_PID 0 // indicates an invalid pid (reserved for the kernel) -
nano-RK/projects/network_stack/nrk_cfg.h
r103 r113 2 2 * NanoRK CONFIG * 3 3 ***************************************************************/ 4 5 4 #ifndef __nrk_cfg_h 6 5 #define __nrk_cfg_h … … 8 7 // NRK_REPORT_ERRORS will cause the kernel to print out information about 9 8 // missed deadlines or reserve violations
