Ethernet+BLE prototype

Dependencies:   mbed EthernetInterface mbed-rtos

Files at this revision

API Documentation at this revision

Comitter:
teruo
Date:
Mon Mar 31 03:25:14 2014 +0000
Parent:
4:78e96198c879
Commit message:
Serial.attach????

Changed in this revision

HttpSend.cpp Show annotated file Show diff for this revision Revisions of this file
HttpSend.h 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
diff -r 78e96198c879 -r 9fffeb949e5a HttpSend.cpp
--- a/HttpSend.cpp	Fri Mar 28 01:10:32 2014 +0000
+++ b/HttpSend.cpp	Mon Mar 31 03:25:14 2014 +0000
@@ -3,42 +3,47 @@
 #include "HttpSend.h"
 #include "mbed.h"
 
+#define BUFFER_NUM 64
 
-MemoryPool<message_t, 64>   m_mpool;
-Queue<message_t, 64>        m_queue;
+Queue<message_t, BUFFER_NUM>    m_queue;
+message_t m_mpool[BUFFER_NUM]={0};
+int m_queueCnt=0;
+EthernetInterface* m_ethernet;
+osThreadId m_send_thread;
+TCPSocketConnection m_sock;
 
-int m_mpCnt=0;
+message_t* getBuffer(){
+    for(int i=0 ; i < BUFFER_NUM ; i++){
+        if( m_mpool[i].used == false ){
+            m_mpool[i].used = true;
+            return &m_mpool[i];
+        }
+    }
+    return NULL;
+}
 
-EthernetInterface* m_ethernet;
-
-osThreadId m_send_thread;
+void releaseBuffer(message_t* buf){
+    memset(buf->data,0,sizeof(buf->data));
+    buf->used=false;
+}
 
 void sendData(char* data, size_t length){
+    char http_cmd[256];
 
-    char http_cmd[256];
-    TCPSocketConnection sock;
-    int ret = sock.connect(SERVER_HOST, SERVER_HOST_PORT);
-
-    //DEBUG_LOG("sock.connect ret=%d\n",ret);
-
-    // header
     sprintf(http_cmd,"POST /whiteserver/PostData HTTP/1.1\r\n");
     sprintf(http_cmd,"%sUser-Agent: sample-app\r\n",http_cmd);
     sprintf(http_cmd,"%sHost: %s\r\n",http_cmd,SERVER_HOST);
     sprintf(http_cmd,"%sContent-Length: %d\r\n",http_cmd,length);
     sprintf(http_cmd,"%sContent-Type: application/x-www-form-urlencoded\r\n",http_cmd);
-
-    // data
     sprintf(http_cmd,"%s\r\n%s",http_cmd,data);
 
-
-    DEBUG_LOG("------------- DATA ---------------\n%s\n",http_cmd);
-
-    ret = sock.send_all(http_cmd, strlen(http_cmd));
+    
+//    DEBUG_LOG("------------- DATA ---------------\n%s\n",http_cmd);
+//    DEBUG_LOG("(size=%d:%s",length,data);
+    m_sock.send_all(http_cmd, strlen(http_cmd));
 
 /* 結果は受けない。POSTするのみにしておく
     DEBUG_LOG("sock.send_all ret=%d \n",ret);
-    
     char buffer[300];
     while (true) {
         ret = sock.receive(buffer, sizeof(buffer)-1);
@@ -50,11 +55,10 @@
         INFO_LOG(" Received ret=%d \n chars from server :\n%s\n", ret, buffer);
     }
 */    
-    sock.close();
+    //sock.close();
 }
 
     
-//    Thread::wait(3000);
 void send_thread (void const *argument) {
     INFO_LOG ("send_thread start\n");
 
@@ -62,15 +66,18 @@
         osEvent evt = m_queue.get();
         if (evt.status == osEventMessage) {
             message_t *message = (message_t*)evt.value.p;
-            if(message!=NULL){
-                DEBUG_LOG("(size=%d)(m_mpCnt=%d):%s",message->size,m_mpCnt,message->data);
-//                m_ethernet->connect();
+            if(message!=NULL && message->size!=0 ){
+//                DEBUG_LOG("(size=%d)(m_queueCnt=%d):%s",message->size,m_queueCnt,message->data);
+                DEBUG_LOG("(size=%d)(m_queueCnt=%d)\n",message->size,m_queueCnt);
 //                INFO_LOG ("IP Address is %s \n", m_ethernet->getIPAddress());
-//                sendData(message->data, message->size);
+                sendData(message->data, message->size);
 //                m_ethernet->disconnect();
-                m_mpool.free(message);
-                m_mpCnt--;
+                //m_mpool.free(message);
+                releaseBuffer(message);
+                m_queueCnt--;
 //                DEBUG_LOG ("*message=0x%08X free \n",message);
+            }else{
+                DEBUG_LOG("message ??? \n");
             }
         }
         Thread::wait(100);
@@ -79,21 +86,24 @@
     // unreachable INFO_LOG ("send_thread end\n");
 }
 
+
 osThreadDef(send_thread,  osPriorityNormal, DEFAULT_STACK_SIZE);
 
 void HttpSend::init(EthernetInterface* eth){
     INFO_LOG ("HttpSend::init start\n");
     m_ethernet = eth;
+    m_ethernet->connect();
+    int ret = m_sock.connect(SERVER_HOST, SERVER_HOST_PORT);  
     m_send_thread = osThreadCreate(osThread(send_thread), NULL);
     INFO_LOG ("HttpSend::init end\n");
 }
 
 message_t* HttpSend::getMessageBuffer(){
-    m_mpCnt++;
-    return m_mpool.alloc();
+    return getBuffer();
 }
 
 void HttpSend::send(message_t* message){
+    m_queueCnt++;
     m_queue.put(message);
 }
 
diff -r 78e96198c879 -r 9fffeb949e5a HttpSend.h
--- a/HttpSend.h	Fri Mar 28 01:10:32 2014 +0000
+++ b/HttpSend.h	Mon Mar 31 03:25:14 2014 +0000
@@ -5,7 +5,9 @@
 #include "EthernetInterface.h"
 
 #define SENDBUFFER_SIZE 128
+
 typedef struct {
+    bool used;
     char data[SENDBUFFER_SIZE];
     size_t size;
 } message_t;
diff -r 78e96198c879 -r 9fffeb949e5a main.cpp
--- a/main.cpp	Fri Mar 28 01:10:32 2014 +0000
+++ b/main.cpp	Mon Mar 31 03:25:14 2014 +0000
@@ -2,57 +2,54 @@
 #include "config.h"
 #include "log.h"
 #include "HttpSend.h"
-#include "cmsis_os.h"
 
 Serial bleModule(p9,p10);
 
-osThreadId m_jm1_receive_thread;
-
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
 
 HttpSend m_httpsend;
 
-void jm1_receive_thread (void const *argument) {
-    INFO_LOG ("jm1_receive_thread start\n");
-    while (true) {
-        if(bleModule.readable()){
-            message_t *message = m_httpsend.getMessageBuffer();
-            memset(message->data,0,SENDBUFFER_SIZE);
-//            INFO_LOG("(message=0x%08X)\n",message);
-            if(NULL!=bleModule.gets(message->data, SENDBUFFER_SIZE)){
-                message->size = strlen(message->data);
-                if(message->size!=0){
-//                    INFO_LOG("(size=%d):%s",message->size,message->data);
-                    m_httpsend.send(message);
-                }
-            }
-        }
+message_t *m_message;
+unsigned char serialBufferLoc = 0;
+
+void rxInterrupt() {
+    if( serialBufferLoc==0 ){
+        led1=true;
+        m_message = m_httpsend.getMessageBuffer();
     }
-    // unreachable INFO_LOG ("jm1_receive_thread end\n");
-}
-
+    led2=!led2;
+    m_message->data[serialBufferLoc] = LPC_UART3->RBR;
+//    LPC_UART0->RBR = m_message->data[serialBufferLoc];
+    if( m_message->data[serialBufferLoc] == '\n' ){
+        if(// "004C " or "004c "
+           m_message->data[0]=='0' && 
+           m_message->data[1]=='0' && 
+           m_message->data[2]=='4' && 
+           (m_message->data[3]=='C'||m_message->data[3]=='c') &&  
+           m_message->data[4]==' ' &&
+           // "1502 "
+           m_message->data[5]=='1' && 
+           m_message->data[6]=='5' && 
+           m_message->data[7]=='0' && 
+           m_message->data[8]=='2' &&  
+           m_message->data[9]==' ') 
+        {
+            m_message->data[serialBufferLoc+1]=NULL;
+            m_message->size = serialBufferLoc+1;
+            m_httpsend.send(m_message);
+        }
 
-void callback() {
-    INFO_LOG ("callback\n");
-    if(bleModule.readable()){
-        message_t *message = m_httpsend.getMessageBuffer();
-        memset(message->data,0,SENDBUFFER_SIZE);
-//        INFO_LOG("(message=0x%08X)\n",message);
-        if(NULL!=bleModule.gets(message->data, SENDBUFFER_SIZE)){
-            message->size = strlen(message->data);
-            if(message->size!=0){
-//                INFO_LOG("(size=%d):%s",message->size,message->data);
-                m_httpsend.send(message);
-            }
-        }
+        led2=false;
+        led1=false;
+        serialBufferLoc=0;
+    }else{
+        serialBufferLoc++;
     }
 }
 
-
-//osThreadDef(jm1_receive_thread,  osPriorityRealtime, DEFAULT_STACK_SIZE);
-osThreadDef(jm1_receive_thread,  osPriorityNormal, DEFAULT_STACK_SIZE);
-
 int main() {
-    INFO_LOG ("BLE GW main start !!!\n");
+    INFO_LOG ("UD1_LanGateway start !!!\n");
 
     /*************************/
     // Initialize
@@ -66,24 +63,10 @@
 
     // Serial
     bleModule.baud(115200);
-    
-    if(true){
-        m_jm1_receive_thread = osThreadCreate(osThread(jm1_receive_thread), NULL);
-    //    Thread::wait(3000);
-        INFO_LOG ("init end\n");
-        while(true) {
-            osDelay(osWaitForever);
-            INFO_LOG ("WaitForever stop \n");
-            wait(0.5);
-        }
-    }else{
-        DigitalOut led1(LED1);
 
-        bleModule.attach(&callback);
-        while(true) {
-            led1 = !led1;
-            wait(0.5);
-        }
+    bleModule.attach(&rxInterrupt);
+    while(true) {
+        wait(0.5);
     }
-    // unreachable INFO_LOG ("BLE GW main stop !!!\n"); 
+    // unreachable INFO_LOG ("UD1_LanGateway stop !!!\n"); 
 }