Ethernet+BLE prototype
Dependencies: mbed EthernetInterface mbed-rtos
Revision 5:9fffeb949e5a, committed 2014-03-31
- Comitter:
- teruo
- Date:
- Mon Mar 31 03:25:14 2014 +0000
- Parent:
- 4:78e96198c879
- Commit message:
- Serial.attach????
Changed in this revision
--- 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); }
--- 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;
--- 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"); }