MODIF - Moved debug output to progmem functions

FIXED - Unexpected connection closing issue: close() before disconnect()

git-svn-id: svn+ssh://oldsvn/home/mlalondesvn/svn/cral@69 3ee9b42a-b53c-0410-a25e-f0b6218d5d5b
master
mlalondesvn 17 years ago
parent 290ba148fd
commit 9ae608bfa9

@ -4,40 +4,40 @@
See: See:
<http://code.rancidbacon.com/LearningAboutArduinoWIZ810MJ> <http://code.rancidbacon.com/LearningAboutArduinoWIZ810MJ>
Current features: Current features:
* Initial W5100 driver port: * Initial W5100 driver port:
+ new-style network configuration + new-style network configuration
+ socket creation/listening/closing + socket creation/listening/closing
+ Sending/Receiving okay + Sending/Receiving okay
+ example "echo" server (no longer) + example "echo" server (no longer)
+ example "web server" with LED flash. + example "web server" with LED flash.
* Terrible hacked-together code * Terrible hacked-together code
Author: Author:
follower@rancidbacon.com follower@rancidbacon.com
License:
LGPL License:
LGPL
Version: Version:
20071106-0005+ 20071106-0005+
*/ */
#include <WIZ810MJ.h> #include <WIZ810MJ.h>
#include <SPrint/staticPrint.h>
// Define SPI-related pins // Define SPI-related pins
@ -56,7 +56,7 @@ byte ip[6];
void configureSPI() { void configureSPI() {
/* /*
Configure pins and registers required for SPI communication. Configure pins and registers required for SPI communication.
*/ */
@ -69,16 +69,16 @@ void configureSPI() {
digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave
/* /*
Configure SPI Control Register (SPCR) (All values initially 0) Configure SPI Control Register (SPCR) (All values initially 0)
Bit Description Bit Description
7 SPI Interrupt Enable -- disable (SPIE --> 0) 7 SPI Interrupt Enable -- disable (SPIE --> 0)
6 SPI Enable -- enable (SPE --> 1) 6 SPI Enable -- enable (SPE --> 1)
5 Data Order -- MSB 1st (DORD --> 0) (Slave specific) 5 Data Order -- MSB 1st (DORD --> 0) (Slave specific)
4 Master/Slave Select -- master (MSTR --> 1) 4 Master/Slave Select -- master (MSTR --> 1)
3 Clock Polarity -- (CPOL --> 0) (Slave specific) ("Mode") 3 Clock Polarity -- (CPOL --> 0) (Slave specific) ("Mode")
2 Clock Phase -- (CPHA --> 0) (Slave specific) 2 Clock Phase -- (CPHA --> 0) (Slave specific)
1 SPI Clock Rate Select 1 -- } (SPR1 --> 0) 1 SPI Clock Rate Select 1 -- } (SPR1 --> 0)
0 SPI Clock Rate Select 0 -- } fOSC/4 (SPR0 --> 0) ("Fastest" but see SPI2X in SPSR) 0 SPI Clock Rate Select 0 -- } fOSC/4 (SPR0 --> 0) ("Fastest" but see SPI2X in SPSR)
*/ */
SPCR = (1<<SPE)| (1<<MSTR); SPCR = (1<<SPE)| (1<<MSTR);
@ -95,17 +95,17 @@ void configureSPI() {
void initModule() { void initModule() {
/* /*
Initialise the WIZ810MJ module and driver. Initialise the WIZ810MJ module and driver.
*/ */
/* /*
Initialise the W5100 chip Initialise the W5100 chip
(Originally I thought it was possible for the chip (Originally I thought it was possible for the chip
to function without a hardware reset but it to function without a hardware reset but it
seems not to be the case.) seems not to be the case.)
*/ */
pinMode(PIN_RESET, OUTPUT); pinMode(PIN_RESET, OUTPUT);
// We rely on the time between function calls to // We rely on the time between function calls to
@ -131,41 +131,41 @@ void initModule() {
#define PIN_LED 2 #define PIN_LED 2
void setup () { void setup () {
Serial.begin(9600); Serial.begin(19200);
Serial.println("Setup enter..."); SPrintln("Setup enter...");
configureSPI(); configureSPI();
initModule(); initModule();
Serial.println("Test W5100 configuration..."); SPrintln("Test W5100 configuration...");
byte config_gateway[] = {192,168,2,101}; byte config_gateway[] = {192,168,0.1};
byte config_subnet_mask[] = {255,255,255,0}; byte config_subnet_mask[] = {255,255,0,0};
byte config_mac_address[] = {0x02,0xDE,0xAD,0xBE,0xEF,0x00}; byte config_mac_address[] = {0x02,0xDE,0xAD,0xBE,0xEF,0x00};
byte config_ip_address[] = {192,168,2,105}; byte config_ip_address[] = {192,168,0,69};
setGAR(config_gateway); setGAR(config_gateway);
setSUBR(config_subnet_mask); setSUBR(config_subnet_mask);
setSHAR(config_mac_address); setSHAR(config_mac_address);
setSIPR(config_ip_address); setSIPR(config_ip_address);
Serial.println("End test W5100 configuration..."); SPrintln("End test W5100 configuration...");
SPrintln("Test W5100 driver code...");
Serial.println("Test W5100 driver code...");
getGAR(ip); getGAR(ip);
Serial.print("Gateway IP read (first digit): "); SPrint("Gateway IP read (first digit): ");
Serial.println(ip[0], DEC); Serial.println(ip[0], DEC);
Serial.println("End test W5100 driver code..."); SPrintln("End test W5100 driver code...");
pinMode(PIN_LED, OUTPUT); pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, HIGH); digitalWrite(PIN_LED, HIGH);
Serial.println("Setup exit..."); SPrintln("Setup exit...");
} }
@ -173,7 +173,7 @@ void sendPrompt(uint8_t *buffer) { // {Socket targetSocket, ) {
strcpy((char *) buffer, "w00t!> "); strcpy((char *) buffer, "w00t!> ");
Serial.print("send result: "); SPrint("send result: ");
//Serial.println(send(testSocket, buffer, 6), DEC); //Serial.println(send(testSocket, buffer, 6), DEC);
Serial.println(send(testSocket, buffer, strlen((char *)buffer)), DEC); Serial.println(send(testSocket, buffer, strlen((char *)buffer)), DEC);
} }
@ -181,38 +181,39 @@ void sendPrompt(uint8_t *buffer) { // {Socket targetSocket, ) {
void sendBanner(uint8_t *buffer, int ledState) { // {Socket targetSocket, ) { void sendBanner(uint8_t *buffer, int ledState) { // {Socket targetSocket, ) {
//strcpy((char *) buffer, "Content-Type: text/plain\n\nfoo!\n"); //strcpy((char *) buffer, "Content-Type: text/plain\n\nfoo!\n");
strcpy((char *) buffer, "HTTP/1.1 200 OK\n\rContent-Type: text/html\n\r\n\r<html><body bgcolor='#000000'>foo!</body></html>\n\r");
if (ledState) { if (ledState) {
strcpy((char *) buffer, "HTTP/1.1 200 OK\n\rContent-Type: text/html\n\r\n\r<html><body bgcolor='#000000'>foo!</body></html>\n\r");
buffer[66] = 'F'; buffer[66] = 'F';
} else { } else {
buffer[68] = 'F'; strcpy((char *) buffer, "HTTP/1.1 200 OK\n\rContent-Type: text/html\n\r\n\r<html><body bgcolor='#000000'>bar!</body></html>\n\r");
buffer[68] = 'F';
} }
Serial.print("send result: "); SPrint("send result: ");
Serial.println(send(testSocket, buffer, strlen((char *)buffer)), DEC); Serial.println(send(testSocket, buffer, strlen((char *)buffer)), DEC);
} }
void loop() { void loop() {
Serial.println("Test W5100 socket..."); SPrintln("Test W5100 socket...");
Serial.print("Create socket result: "); SPrint("Create socket result: ");
Serial.println(socket(testSocket, Sn_MR_TCP, 80, 0), DEC); Serial.println(socket(testSocket, Sn_MR_TCP, 80, 0), DEC);
Serial.print("Socket status: "); SPrint("Socket status: ");
Serial.println(IINCHIP_READ(Sn_SR(testSocket)), HEX); Serial.println(IINCHIP_READ(Sn_SR(testSocket)), HEX);
if (IINCHIP_READ(Sn_SR(testSocket)) == SOCK_CLOSED) { if (IINCHIP_READ(Sn_SR(testSocket)) == SOCK_CLOSED) {
Serial.println("Socket still closed, waiting..."); SPrintln("Socket still closed, waiting...");
while (IINCHIP_READ(Sn_SR(testSocket)) == SOCK_CLOSED) { while (IINCHIP_READ(Sn_SR(testSocket)) == SOCK_CLOSED) {
//pass //pass
} }
} }
Serial.print("Listen on socket result: "); SPrint("Listen on socket result: ");
Serial.println(listen(testSocket), DEC); Serial.println(listen(testSocket), DEC);
Serial.println("Waiting for connection..."); SPrintln("Waiting for connection...");
while (getSn_SR(testSocket) == SOCK_LISTEN) { while (getSn_SR(testSocket) == SOCK_LISTEN) {
delay(500); delay(500);
@ -222,7 +223,7 @@ void loop() {
getSn_DIPR(testSocket, ip); getSn_DIPR(testSocket, ip);
Serial.print("Destination IP read (last digit): "); SPrint("Destination IP read (last digit): ");
Serial.println(ip[3], DEC); Serial.println(ip[3], DEC);
@ -256,71 +257,71 @@ void loop() {
while (getSn_SR(testSocket) == SOCK_ESTABLISHED) { while (getSn_SR(testSocket) == SOCK_ESTABLISHED) {
while (getSn_RX_RSR(testSocket) > 0) { while (getSn_RX_RSR(testSocket) > 0) {
recv(testSocket, bytesReceived, 1); recv(testSocket, bytesReceived, 1);
theByte = bytesReceived[0]; theByte = bytesReceived[0];
//Serial.print(bytesReceived[0], BYTE); //Serial.print(bytesReceived[0], BYTE);
Serial.print(theByte, BYTE); Serial.print(theByte, BYTE);
if ((state == STATE_G) && (theByte == 'G')) { if ((state == STATE_G) && (theByte == 'G')) {
state = STATE_E; state = STATE_E;
} else if ((state == STATE_E) && (theByte == 'E')) { } else if ((state == STATE_E) && (theByte == 'E')) {
state = STATE_T; state = STATE_T;
} else if ((state == STATE_T) && (theByte == 'T')) { } else if ((state == STATE_T) && (theByte == 'T')) {
state = STATE_SPACE; state = STATE_SPACE;
} else if ((state == STATE_SPACE) && (theByte == ' ')) { } else if ((state == STATE_SPACE) && (theByte == ' ')) {
state = STATE_SLASH; state = STATE_SLASH;
} else if ((state == STATE_SLASH) && (theByte == '/')) { } else if ((state == STATE_SLASH) && (theByte == '/')) {
state = STATE_READ; state = STATE_READ;
} else if ((state == STATE_READ) && (theByte == '0')) { } else if ((state == STATE_READ) && (theByte == '0')) {
digitalWrite(PIN_LED, LOW); digitalWrite(PIN_LED, LOW);
ledState = 0; ledState = 0;
//state = STATE_END; //state = STATE_END;
delay(100); delay(100);
} else if ((state == STATE_READ) && (theByte == '1')) { } else if ((state == STATE_READ) && (theByte == '1')) {
digitalWrite(PIN_LED, HIGH); digitalWrite(PIN_LED, HIGH);
ledState = 1; ledState = 1;
//state = STATE_END; //state = STATE_END;
delay(100); delay(100);
} else if (state == STATE_READ) { } else if (state == STATE_READ) {
// It's not a valid byte. // It's not a valid byte.
state = STATE_END; state = STATE_END;
} else { } else {
state = STATE_ERR; state = STATE_ERR;
} }
if ((state == STATE_ERR) || (state == STATE_END)) {
Serial.println("");
break;
}
/*
dataLength = getSn_RX_RSR(testSocket);
if (dataLength >= MAX_RX_BUFFER_SIZE) { // TODO: blah, blah...
dataLength = MAX_RX_BUFFER_SIZE-1;
}
// Serial.print("dataLength: "); Serial.println(dataLength, HEX);
//Serial.print("recv result: ");
//Serial.println(recv(testSocket, bytesReceived, dataLength), DEC); // NOTE: Throws away unread portion? No?
recv(testSocket, bytesReceived, dataLength); // TODO: Return length?
bytesReceived[dataLength]=0x00;
Serial.print((char *)bytesReceived);
//Serial.print("send result: ");
//Serial.println(send(testSocket, bytesReceived, dataLength), DEC);
//sendPrompt(bytesReceived);
*/
if ((state == STATE_ERR) || (state == STATE_END)) {
SPrintln("");
break;
}
/*
dataLength = getSn_RX_RSR(testSocket);
if (dataLength >= MAX_RX_BUFFER_SIZE) { // TODO: blah, blah...
dataLength = MAX_RX_BUFFER_SIZE-1;
}
// SPrint("dataLength: "); Serial.println(dataLength, HEX);
//SPrint("recv result: ");
//Serial.println(recv(testSocket, bytesReceived, dataLength), DEC); // NOTE: Throws away unread portion? No?
recv(testSocket, bytesReceived, dataLength); // TODO: Return length?
bytesReceived[dataLength]=0x00;
Serial.print((char *)bytesReceived);
//SPrint("send result: ");
//Serial.println(send(testSocket, bytesReceived, dataLength), DEC);
//sendPrompt(bytesReceived);
*/
} }
sendBanner(bytesToSend, ledState); sendBanner(bytesToSend, ledState);
//sendPrompt(bytesReceived); //sendPrompt(bytesReceived);
break; break;
} }
disconnect(testSocket);
close(testSocket); close(testSocket);
disconnect(testSocket);
Serial.println("End test W5100 socket...");
SPrintln("End test W5100 socket...");

Loading…
Cancel
Save