Dependencies:   mbed NetEthApiLPC1768 NetServicesLPC1768

Files at this revision

API Documentation at this revision

Comitter:
nucho
Date:
Mon Jun 07 03:15:06 2010 +0000
Child:
1:e1bfb7d930e5
Commit message:

Changed in this revision

Member.cpp Show annotated file Show diff for this revision Revisions of this file
Member.h Show annotated file Show diff for this revision Revisions of this file
NetEthApiLPC1768.lib Show annotated file Show diff for this revision Revisions of this file
NetServicesLPC1768.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Member.cpp	Mon Jun 07 03:15:06 2010 +0000
@@ -0,0 +1,76 @@
+#include "Member.h"
+#include "mbed.h"
+
+Member::Member() {
+    head=NULL;
+}
+
+void Member::print_member() {
+    Member* p=head;
+    while (p != NULL) {
+        printf("%s %u\n", p->name,p->id);
+        p = p->next;
+    }
+}
+
+Member* Member::add_member(char *name, int id) {
+    Member* p;
+
+    p->id = id;
+    strcpy(p->name, name);
+
+    p->next = head;
+    head = p;
+
+    return head;
+}
+
+/*
+void Member::free_member(Member *p) {
+    struct member *p2;
+
+    while (p != NULL) {
+        p2 = p->next;
+        free(p);
+        p = p2;
+    }
+}
+
+
+struct member* Member::add_member(char *name, int id, struct member *head) {
+    struct member *p;
+
+    p=create_member();
+    p->id = id;
+    strcpy(p->name, name);
+
+    p->next = head;
+    head = p;
+
+    return head;
+}
+
+Member::struct member *create_member(void) {
+    struct member *p;
+
+    if ((p = (struct member *) malloc(sizeof(struct member))) == NULL) {
+        printf("malloc error\n");
+        exit(EXIT_FAILURE);
+    }
+    p->enter = false;
+
+    return p;
+}
+
+Member::struct member * search_id(struct member *p,unsigned int id) {
+    struct member *findp=NULL;
+    while (p != NULL) {
+        if (p->id==id) {
+            findp = p;
+            break;
+        }
+        p = p->next;
+    }
+    return findp;
+}
+*/
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Member.h	Mon Jun 07 03:15:06 2010 +0000
@@ -0,0 +1,17 @@
+#ifndef _INC_MEMBER
+#define _INC_MEMBER
+
+class Member {
+private:
+    char name[100];
+    unsigned int id;
+    bool enter;
+    Member *next;
+    Member *head;
+    
+public:
+    Member();
+    void print_member();
+    Member *add_member(char *name, int id);
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/NetEthApiLPC1768.lib	Mon Jun 07 03:15:06 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/donatien/code/NetEthApiLPC1768/#2929fcb16bbf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/NetServicesLPC1768.lib	Mon Jun 07 03:15:06 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/donatien/code/NetServicesLPC1768/#acb9b7d53771
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Jun 07 03:15:06 2010 +0000
@@ -0,0 +1,315 @@
+#include "mbed.h"
+#include "TextLCD.h"
+#include "EthernetNetIf.h"
+#include "HttpClient.h"
+
+void free_member(struct member *p);
+void print_member(struct member *p);
+struct member *add_member(char *name, int id, struct member *head);
+unsigned int readCard();
+struct member * search_id(struct member *p,unsigned int id);
+struct member *create_member(void);
+void LED_Bright(int led_num);
+void LED_KnightRider();
+
+using namespace std;
+
+EthernetNetIf eth;
+HttpClient http;
+
+LocalFileSystem local("local");
+
+Serial pc(USBTX, USBRX); // tx, rx
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+Serial device(p13, p14); // tx, rx
+InterruptIn button(p17);
+DigitalIn irq(p19);
+//DigitalOut rst(p20);
+
+TextLCD lcd(p15, p9, p16, p8, p11, p7, p10); // rs, rw, e, d0, d1, d2, d3
+
+const char user[] = "your accout";
+const char pass[] = "yourt password";
+const char login_msg[] = " is login now.";
+const char logout_msg[] = " is logout now.";
+const char url[]  = "http://twitter.com/statuses/update.xml";
+const char ntp_server[]  = "http://ntp-a1.nict.go.jp/cgi-bin/ntp";
+bool card_flag=false;
+
+struct member {
+    char name[100];
+    unsigned int id;
+    bool enter;
+    struct member *next;
+};
+
+void cardIRQ() {
+    card_flag=true;
+}
+
+
+int main() {
+    device.baud(19200);
+    pc.baud(9600);
+    printf("Init\n");
+    lcd.printf("Init\n");
+    char sendmsg[255];
+    char buf[40];
+    member *p=NULL;
+    member *head=NULL;
+    time_t seconds = time(NULL);
+    HttpClient twitter;
+    char *e;
+    char name[100];
+    unsigned int id;
+
+    HttpMap msg;
+
+    //connect Ethernet
+    printf("\r\nSetting up...\r\n");
+    EthernetErr ethErr = eth.setup();
+    if (ethErr) {
+        printf("Error %d in setup.\n", ethErr);
+        return -1;
+    }
+    printf("\r\nSetup OK\r\n");
+
+    twitter.basicAuth(user, pass); //We use basic authentication, replace with you accoun
+
+    //read member
+    pc.printf("Opening File...\n"); // Drive should be marked as removed
+    FILE *fp = fopen("/local/member.txt", "r");
+
+    while (fscanf( fp, "%[^,],%d\n",name, &id) != EOF ) {
+        head = add_member(name,id, head);
+    }
+    fclose(fp);
+    pc.printf("Opened.\n");
+
+    // Start RTC
+    lcd.printf("RTC setting...\n");
+    HttpText txt;
+
+    http.get(ntp_server, &txt);
+    int start_body=strstr(txt.gets(),"<BODY>")-txt.gets()+7;
+    int end_body = strstr(txt.gets(),"</BODY>")-txt.gets()-1;
+    strncpy(buf, txt.gets()+start_body, end_body-start_body);
+
+
+    //printf("<%s>\n",txt.gets());
+    //printf("%lu\n",strtoul(buf,&e,10));
+    seconds = strtoul(buf,&e,10)-2208988800UL+32400;
+    set_time(seconds);
+
+    button.rise(&cardIRQ);
+    while (1) {
+        seconds = time(NULL);
+        strftime(buf,sizeof(buf),"%Y/%m/%d %a\n%H:%M:%S  Ready!", localtime(&seconds));
+        printf("%s\n", buf);
+        lcd.printf("%s", buf);
+        wait(0.3);
+
+        if (card_flag) {
+            lcd.cls();
+            strcpy(sendmsg,"");
+
+            id= readCard();
+            pc.printf("id=%u\n",id);
+            p = search_id(head,id);//checkID
+
+            if (p!=NULL) {//list has same ID
+                pc.printf("%s\n",p->name);
+
+                lcd.locate(0,0);
+                lcd.printf("%s",p->name);
+                lcd.locate(0,1);
+                lcd.printf("id=%u",p->id);
+
+                strcat(sendmsg,p->name);
+                seconds = time(NULL);
+                strftime(buf,sizeof(buf), " (%Y/%m/%d %a %H:%M:%S)", localtime(&seconds));
+
+                if (p->enter) {
+                    strcat(sendmsg,logout_msg);
+                    strcat(sendmsg,buf);
+                    pc.printf("%s\n",sendmsg);
+                    msg["status"] = sendmsg;
+                    twitter.post(url, msg, NULL);
+
+                    p->enter=false;
+                } else {
+                    strcat(sendmsg,login_msg);
+                    strcat(sendmsg,buf);
+                    pc.printf("%s\n",sendmsg);
+                    msg["status"] = sendmsg;
+                    twitter.post(url, msg, NULL);
+
+                    p->enter=true;
+                }
+                LED_KnightRider();
+
+                card_flag=false;
+                lcd.cls();
+            } else {
+                lcd.locate(0,0);
+                lcd.printf("You are'nt member");
+                lcd.locate(0,1);
+                lcd.printf("id=%u",p->id);
+                wait(1);
+            }
+
+        }
+
+    }
+}
+
+void LED_KnightRider() {
+    LED_Bright(1);
+    wait(0.05);
+    LED_Bright(2);
+    wait(0.05);
+    LED_Bright(3);
+    wait(0.05);
+    LED_Bright(4);
+    wait(0.05);
+    LED_Bright(3);
+    wait(0.05);
+    LED_Bright(2);
+    wait(0.05);
+    LED_Bright(1);
+    wait(0.05);
+    LED_Bright(0);
+    wait(0.05);
+    LED_Bright(1);
+    wait(0.05);
+    LED_Bright(2);
+    wait(0.05);
+    LED_Bright(3);
+    wait(0.05);
+    LED_Bright(4);
+    wait(0.05);
+    LED_Bright(3);
+    wait(0.05);
+    LED_Bright(2);
+    wait(0.05);
+    LED_Bright(1);
+    wait(0.05);
+    LED_Bright(0);
+}
+
+void LED_Bright(int led_num) {
+    switch (led_num) {
+        case 1:
+            led1=1;
+            led2=0;
+            led3=0;
+            led4=0;
+            break;
+        case 2:
+            led1=0;
+            led2=1;
+            led3=0;
+            led4=0;
+            break;
+        case 3:
+            led1=0;
+            led2=0;
+            led3=1;
+            led4=0;
+            break;
+        case 4:
+            led1=0;
+            led2=0;
+            led3=0;
+            led4=1;
+            break;
+        default:
+            led1=0;
+            led2=0;
+            led3=0;
+            led4=0;
+            break;
+    }
+}
+
+
+unsigned int readCard() {
+    unsigned int id=0;
+    int len,i;
+
+    device.getc();//header
+    device.getc();//header
+    len = device.getc();
+
+    char data[len];
+    for (i=0;i<len;i++) {
+        data[i]=device.getc();
+    }
+    if (data[0]==0x50) {//success
+        for (i=0;i<4;i++) {
+            id |= (data[4-i] << (i * 8));
+        }
+    } else {//failre
+    }
+
+    return id;
+}
+
+void print_member(struct member *p) {
+    while (p != NULL) {
+        pc.printf("%s %u\n", p->name,p->id);
+        p = p->next;
+    }
+}
+
+void free_member(struct member *p) {
+    struct member *p2;
+
+    while (p != NULL) {
+        p2 = p->next;
+        free(p);
+        p = p2;
+    }
+}
+
+
+struct member *add_member(char *name, int id, struct member *head) {
+    struct member *p;
+
+    p=create_member();
+    p->id = id;
+    strcpy(p->name, name);
+
+    p->next = head;
+    head = p;
+
+    return head;
+}
+
+struct member *create_member(void) {
+    struct member *p;
+
+    if ((p = (struct member *) malloc(sizeof(struct member))) == NULL) {
+        printf("malloc error\n");
+        exit(EXIT_FAILURE);
+    }
+    p->enter = false;
+
+    return p;
+}
+
+struct member * search_id(struct member *p,unsigned int id) {
+    struct member *findp=NULL;
+    while (p != NULL) {
+        if (p->id==id) {
+            findp = p;
+            break;
+        }
+        p = p->next;
+    }
+    return findp;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Jun 07 03:15:06 2010 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/e6be4cd80aad