Ethernet+BLE prototype
Dependencies: mbed EthernetInterface mbed-rtos
HttpSend.cpp@5:9fffeb949e5a, 2014-03-31 (annotated)
- Committer:
- teruo
- Date:
- Mon Mar 31 03:25:14 2014 +0000
- Revision:
- 5:9fffeb949e5a
- Parent:
- 4:78e96198c879
Serial.attach????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
teruo | 3:d9445b9e7163 | 1 | #include "config.h" |
teruo | 3:d9445b9e7163 | 2 | #include "log.h" |
teruo | 3:d9445b9e7163 | 3 | #include "HttpSend.h" |
teruo | 3:d9445b9e7163 | 4 | #include "mbed.h" |
teruo | 3:d9445b9e7163 | 5 | |
teruo | 5:9fffeb949e5a | 6 | #define BUFFER_NUM 64 |
teruo | 3:d9445b9e7163 | 7 | |
teruo | 5:9fffeb949e5a | 8 | Queue<message_t, BUFFER_NUM> m_queue; |
teruo | 5:9fffeb949e5a | 9 | message_t m_mpool[BUFFER_NUM]={0}; |
teruo | 5:9fffeb949e5a | 10 | int m_queueCnt=0; |
teruo | 5:9fffeb949e5a | 11 | EthernetInterface* m_ethernet; |
teruo | 5:9fffeb949e5a | 12 | osThreadId m_send_thread; |
teruo | 5:9fffeb949e5a | 13 | TCPSocketConnection m_sock; |
teruo | 3:d9445b9e7163 | 14 | |
teruo | 5:9fffeb949e5a | 15 | message_t* getBuffer(){ |
teruo | 5:9fffeb949e5a | 16 | for(int i=0 ; i < BUFFER_NUM ; i++){ |
teruo | 5:9fffeb949e5a | 17 | if( m_mpool[i].used == false ){ |
teruo | 5:9fffeb949e5a | 18 | m_mpool[i].used = true; |
teruo | 5:9fffeb949e5a | 19 | return &m_mpool[i]; |
teruo | 5:9fffeb949e5a | 20 | } |
teruo | 5:9fffeb949e5a | 21 | } |
teruo | 5:9fffeb949e5a | 22 | return NULL; |
teruo | 5:9fffeb949e5a | 23 | } |
teruo | 4:78e96198c879 | 24 | |
teruo | 5:9fffeb949e5a | 25 | void releaseBuffer(message_t* buf){ |
teruo | 5:9fffeb949e5a | 26 | memset(buf->data,0,sizeof(buf->data)); |
teruo | 5:9fffeb949e5a | 27 | buf->used=false; |
teruo | 5:9fffeb949e5a | 28 | } |
teruo | 3:d9445b9e7163 | 29 | |
teruo | 3:d9445b9e7163 | 30 | void sendData(char* data, size_t length){ |
teruo | 5:9fffeb949e5a | 31 | char http_cmd[256]; |
teruo | 3:d9445b9e7163 | 32 | |
teruo | 3:d9445b9e7163 | 33 | sprintf(http_cmd,"POST /whiteserver/PostData HTTP/1.1\r\n"); |
teruo | 3:d9445b9e7163 | 34 | sprintf(http_cmd,"%sUser-Agent: sample-app\r\n",http_cmd); |
teruo | 3:d9445b9e7163 | 35 | sprintf(http_cmd,"%sHost: %s\r\n",http_cmd,SERVER_HOST); |
teruo | 3:d9445b9e7163 | 36 | sprintf(http_cmd,"%sContent-Length: %d\r\n",http_cmd,length); |
teruo | 3:d9445b9e7163 | 37 | sprintf(http_cmd,"%sContent-Type: application/x-www-form-urlencoded\r\n",http_cmd); |
teruo | 3:d9445b9e7163 | 38 | sprintf(http_cmd,"%s\r\n%s",http_cmd,data); |
teruo | 3:d9445b9e7163 | 39 | |
teruo | 5:9fffeb949e5a | 40 | |
teruo | 5:9fffeb949e5a | 41 | // DEBUG_LOG("------------- DATA ---------------\n%s\n",http_cmd); |
teruo | 5:9fffeb949e5a | 42 | // DEBUG_LOG("(size=%d:%s",length,data); |
teruo | 5:9fffeb949e5a | 43 | m_sock.send_all(http_cmd, strlen(http_cmd)); |
teruo | 3:d9445b9e7163 | 44 | |
teruo | 3:d9445b9e7163 | 45 | /* 結果は受けない。POSTするのみにしておく |
teruo | 3:d9445b9e7163 | 46 | DEBUG_LOG("sock.send_all ret=%d \n",ret); |
teruo | 3:d9445b9e7163 | 47 | char buffer[300]; |
teruo | 3:d9445b9e7163 | 48 | while (true) { |
teruo | 3:d9445b9e7163 | 49 | ret = sock.receive(buffer, sizeof(buffer)-1); |
teruo | 3:d9445b9e7163 | 50 | DEBUG_LOG("sock.receive ret=%d \n",ret); |
teruo | 3:d9445b9e7163 | 51 | if (ret <= 0){ |
teruo | 3:d9445b9e7163 | 52 | break; |
teruo | 3:d9445b9e7163 | 53 | } |
teruo | 3:d9445b9e7163 | 54 | buffer[ret] = '\0'; |
teruo | 3:d9445b9e7163 | 55 | INFO_LOG(" Received ret=%d \n chars from server :\n%s\n", ret, buffer); |
teruo | 3:d9445b9e7163 | 56 | } |
teruo | 3:d9445b9e7163 | 57 | */ |
teruo | 5:9fffeb949e5a | 58 | //sock.close(); |
teruo | 3:d9445b9e7163 | 59 | } |
teruo | 3:d9445b9e7163 | 60 | |
teruo | 4:78e96198c879 | 61 | |
teruo | 3:d9445b9e7163 | 62 | void send_thread (void const *argument) { |
teruo | 3:d9445b9e7163 | 63 | INFO_LOG ("send_thread start\n"); |
teruo | 4:78e96198c879 | 64 | |
teruo | 3:d9445b9e7163 | 65 | while (true) { |
teruo | 3:d9445b9e7163 | 66 | osEvent evt = m_queue.get(); |
teruo | 3:d9445b9e7163 | 67 | if (evt.status == osEventMessage) { |
teruo | 3:d9445b9e7163 | 68 | message_t *message = (message_t*)evt.value.p; |
teruo | 5:9fffeb949e5a | 69 | if(message!=NULL && message->size!=0 ){ |
teruo | 5:9fffeb949e5a | 70 | // DEBUG_LOG("(size=%d)(m_queueCnt=%d):%s",message->size,m_queueCnt,message->data); |
teruo | 5:9fffeb949e5a | 71 | DEBUG_LOG("(size=%d)(m_queueCnt=%d)\n",message->size,m_queueCnt); |
teruo | 4:78e96198c879 | 72 | // INFO_LOG ("IP Address is %s \n", m_ethernet->getIPAddress()); |
teruo | 5:9fffeb949e5a | 73 | sendData(message->data, message->size); |
teruo | 4:78e96198c879 | 74 | // m_ethernet->disconnect(); |
teruo | 5:9fffeb949e5a | 75 | //m_mpool.free(message); |
teruo | 5:9fffeb949e5a | 76 | releaseBuffer(message); |
teruo | 5:9fffeb949e5a | 77 | m_queueCnt--; |
teruo | 4:78e96198c879 | 78 | // DEBUG_LOG ("*message=0x%08X free \n",message); |
teruo | 5:9fffeb949e5a | 79 | }else{ |
teruo | 5:9fffeb949e5a | 80 | DEBUG_LOG("message ??? \n"); |
teruo | 4:78e96198c879 | 81 | } |
teruo | 3:d9445b9e7163 | 82 | } |
teruo | 4:78e96198c879 | 83 | Thread::wait(100); |
teruo | 3:d9445b9e7163 | 84 | } |
teruo | 4:78e96198c879 | 85 | |
teruo | 3:d9445b9e7163 | 86 | // unreachable INFO_LOG ("send_thread end\n"); |
teruo | 3:d9445b9e7163 | 87 | } |
teruo | 3:d9445b9e7163 | 88 | |
teruo | 5:9fffeb949e5a | 89 | |
teruo | 3:d9445b9e7163 | 90 | osThreadDef(send_thread, osPriorityNormal, DEFAULT_STACK_SIZE); |
teruo | 3:d9445b9e7163 | 91 | |
teruo | 4:78e96198c879 | 92 | void HttpSend::init(EthernetInterface* eth){ |
teruo | 3:d9445b9e7163 | 93 | INFO_LOG ("HttpSend::init start\n"); |
teruo | 4:78e96198c879 | 94 | m_ethernet = eth; |
teruo | 5:9fffeb949e5a | 95 | m_ethernet->connect(); |
teruo | 5:9fffeb949e5a | 96 | int ret = m_sock.connect(SERVER_HOST, SERVER_HOST_PORT); |
teruo | 3:d9445b9e7163 | 97 | m_send_thread = osThreadCreate(osThread(send_thread), NULL); |
teruo | 3:d9445b9e7163 | 98 | INFO_LOG ("HttpSend::init end\n"); |
teruo | 3:d9445b9e7163 | 99 | } |
teruo | 3:d9445b9e7163 | 100 | |
teruo | 3:d9445b9e7163 | 101 | message_t* HttpSend::getMessageBuffer(){ |
teruo | 5:9fffeb949e5a | 102 | return getBuffer(); |
teruo | 3:d9445b9e7163 | 103 | } |
teruo | 3:d9445b9e7163 | 104 | |
teruo | 3:d9445b9e7163 | 105 | void HttpSend::send(message_t* message){ |
teruo | 5:9fffeb949e5a | 106 | m_queueCnt++; |
teruo | 3:d9445b9e7163 | 107 | m_queue.put(message); |
teruo | 3:d9445b9e7163 | 108 | } |
teruo | 3:d9445b9e7163 | 109 | |
teruo | 3:d9445b9e7163 | 110 |