Free (GPLv2) TCP/IP stack developed by TASS Belgium

Fork of PicoTCP by Daniele Lacamera

Committer:
daniele
Date:
Sat Aug 03 08:50:27 2013 +0000
Revision:
51:18637a3d071f
Parent:
50:c3b337c38feb
Branch for CDC-ECM: Work in progress

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daniele 29:1a47b7151851 1 /*********************************************************************
daniele 29:1a47b7151851 2 PicoTCP. Copyright (c) 2012 TASS Belgium NV. Some rights reserved.
daniele 29:1a47b7151851 3 See LICENSE and COPYING for usage.
daniele 29:1a47b7151851 4 Do not redistribute without a written permission by the Copyright
daniele 29:1a47b7151851 5 holders.
daniele 29:1a47b7151851 6
daniele 29:1a47b7151851 7 File: pico_mbed.h
daniele 29:1a47b7151851 8 Author: Toon Peters
daniele 29:1a47b7151851 9 *********************************************************************/
daniele 29:1a47b7151851 10
daniele 29:1a47b7151851 11 #ifndef PICO_SUPPORT_MBED
daniele 29:1a47b7151851 12 #define PICO_SUPPORT_MBED
daniele 29:1a47b7151851 13 #include <stdio.h>
daniele 29:1a47b7151851 14
daniele 29:1a47b7151851 15 //#include "mbed.h"
daniele 29:1a47b7151851 16 //#include "serial_api.h"
daniele 29:1a47b7151851 17
daniele 29:1a47b7151851 18 /*
daniele 29:1a47b7151851 19 Debug needs initialization:
daniele 29:1a47b7151851 20 * void serial_init (serial_t *obj, PinName tx, PinName rx);
daniele 29:1a47b7151851 21 * void serial_baud (serial_t *obj, int baudrate);
daniele 29:1a47b7151851 22 * void serial_format (serial_t *obj, int data_bits, SerialParity parity, int stop_bits);
daniele 29:1a47b7151851 23 */
daniele 29:1a47b7151851 24
daniele 29:1a47b7151851 25 #define dbg(...)
daniele 29:1a47b7151851 26 #define pico_zalloc(x) calloc(x, 1)
daniele 29:1a47b7151851 27 #define pico_free(x) free(x)
daniele 29:1a47b7151851 28
daniele 29:1a47b7151851 29 #ifdef MEMORY_MEASURE // in case, comment out the two defines above me.
daniele 29:1a47b7151851 30 extern uint32_t max_mem;
daniele 29:1a47b7151851 31 extern uint32_t cur_mem;
daniele 29:1a47b7151851 32
daniele 29:1a47b7151851 33 static inline void * pico_zalloc(int x)
daniele 29:1a47b7151851 34 {
daniele 29:1a47b7151851 35 uint32_t *ptr;
daniele 29:1a47b7151851 36 if ((cur_mem + x )> (10 * 1024))
daniele 29:1a47b7151851 37 return NULL;
daniele 29:1a47b7151851 38
daniele 29:1a47b7151851 39 ptr = (uint32_t *)calloc(x + 4, 1);
daniele 29:1a47b7151851 40 *ptr = (uint32_t)x;
daniele 29:1a47b7151851 41 cur_mem += x;
daniele 29:1a47b7151851 42 if (cur_mem > max_mem) {
daniele 29:1a47b7151851 43 max_mem = cur_mem;
daniele 29:1a47b7151851 44 printf("max mem: %lu\n", max_mem);
daniele 29:1a47b7151851 45 }
daniele 29:1a47b7151851 46 return (void*)(ptr + 1);
daniele 29:1a47b7151851 47 }
daniele 29:1a47b7151851 48
daniele 29:1a47b7151851 49 static inline void pico_free(void *x)
daniele 29:1a47b7151851 50 {
daniele 29:1a47b7151851 51 uint32_t *ptr = (uint32_t*)(((uint8_t *)x) - 4);
daniele 29:1a47b7151851 52 cur_mem -= *ptr;
daniele 29:1a47b7151851 53 free(ptr);
daniele 29:1a47b7151851 54 }
daniele 29:1a47b7151851 55 #endif
daniele 29:1a47b7151851 56
daniele 50:c3b337c38feb 57 //#define PICO_SUPPORT_MUTEX
daniele 29:1a47b7151851 58 extern void *pico_mutex_init(void);
daniele 29:1a47b7151851 59 extern void pico_mutex_lock(void*);
daniele 29:1a47b7151851 60 extern void pico_mutex_unlock(void*);
daniele 29:1a47b7151851 61
daniele 29:1a47b7151851 62
daniele 29:1a47b7151851 63 extern uint32_t os_time;
daniele 29:1a47b7151851 64
daniele 29:1a47b7151851 65 static inline unsigned long PICO_TIME(void)
daniele 29:1a47b7151851 66 {
daniele 29:1a47b7151851 67 return (unsigned long)os_time / 1000;
daniele 29:1a47b7151851 68 }
daniele 29:1a47b7151851 69
daniele 29:1a47b7151851 70 static inline unsigned long PICO_TIME_MS(void)
daniele 29:1a47b7151851 71 {
daniele 29:1a47b7151851 72 return (unsigned long)os_time;
daniele 29:1a47b7151851 73 }
daniele 29:1a47b7151851 74
daniele 29:1a47b7151851 75 static inline void PICO_IDLE(void)
daniele 29:1a47b7151851 76 {
daniele 29:1a47b7151851 77 // TODO needs implementation
daniele 29:1a47b7151851 78 }
daniele 29:1a47b7151851 79 /*
daniele 29:1a47b7151851 80 static inline void PICO_DEBUG(const char * formatter, ... )
daniele 29:1a47b7151851 81 {
daniele 29:1a47b7151851 82 char buffer[256];
daniele 29:1a47b7151851 83 char *ptr;
daniele 29:1a47b7151851 84 va_list args;
daniele 29:1a47b7151851 85 va_start(args, formatter);
daniele 29:1a47b7151851 86 vsnprintf(buffer, 256, formatter, args);
daniele 29:1a47b7151851 87 ptr = buffer;
daniele 29:1a47b7151851 88 while(*ptr != '\0')
daniele 29:1a47b7151851 89 serial_putc(serial_t *obj, (int) (*(ptr++)));
daniele 29:1a47b7151851 90 va_end(args);
daniele 29:1a47b7151851 91 //TODO implement serial_t
daniele 29:1a47b7151851 92 }*/
daniele 29:1a47b7151851 93
daniele 29:1a47b7151851 94 #endif