mbed Phone Platform
Dependencies: ulaw mbed ConfigFile
Diff: IpLine.cpp
- Revision:
- 4:41a3534d085f
- Parent:
- 3:1d5dc4107558
- Child:
- 5:30e2847d241b
--- a/IpLine.cpp Thu Jan 06 17:04:13 2011 +0000 +++ b/IpLine.cpp Fri Jan 07 18:20:41 2011 +0000 @@ -4,6 +4,10 @@ #include "IpLine.h" +#define NET_RETRY (FREQ) +#define NET_TIMEOUT (FREQ * 3) +#define PACKET_IDENT 0x6465626d // "mbed" + IpLine::IpLine (AnalogOut p_dac, AnalogIn p_adc) : dac(p_dac), adc(p_adc), dial(DIAL_SIZE), dabuf(DATA_SIZE * 4), adbuf(DATA_SIZE * 2) , led1(LED1), led2(LED2), led3(LED3), led4(LED4) { EthernetErr r; @@ -45,15 +49,15 @@ // over sample if (dataskip) { dataskip = 0; -led1 = 1; led2 = 0; led3 = 0; } else { if (! dabuf.get(c)) { dac.write_u16(ulaw2pcm(c)); } else { -// dac.write_u16(gaussian()); + dac.write_u16(gaussian()); } dataskip = 1; } +led1 = 1; led2 = 0; led3 = 0; } else { // normal dabuf.get(c); @@ -114,7 +118,7 @@ // get data len = udpsock->recvfrom((char *)&packet, sizeof(struct ipline_packet), &recv); - if (memcmp(packet.header.text, "mbed", 4) != 0) return; + if (packet.header.ident != PACKET_IDENT) return; led4 = 1; if (packet.header.status != StatusNone) { @@ -183,7 +187,7 @@ /// send packet (header only) void IpLine::send (struct ipline_header *header) { - memcpy(header->text, "mbed", 4); + header->ident = PACKET_IDENT; if (! header->num) { header->num = packet_num; packet_num ++; @@ -201,7 +205,7 @@ /// send packet void IpLine::send (struct ipline_packet *packet) { - memcpy(packet->header.text, "mbed", 4); + packet->header.ident = PACKET_IDENT; if (! packet->header.num) { packet->header.num = packet_num; packet_num ++; @@ -281,3 +285,23 @@ } remote.setPort(UDPPORT); } + +unsigned long IpLine::xor128 () { + static unsigned long x = 123456789; + static unsigned long y = 362436069, z = 521288629, w = 88675123; + unsigned long t; + t = (x ^ (x << 11)); + x = y; y = z; z = w; + return (w = (w ^ (w >> 19)) ^ (t ^ (t >> 8)) ); +} + +int IpLine::gaussian () { + int i, j; + + j = 0; + for (i = 0; i < 12; i ++) { + j = j + (xor128() >> 16); + } + j = (j - 0x60000) & 0xffff; + return 0x3fff + (j >> 1); +}