Ethernet+BLE prototype

Dependencies:   mbed EthernetInterface mbed-rtos

HttpSend.cpp

Committer:
teruo
Date:
2014-03-31
Revision:
5:9fffeb949e5a
Parent:
4:78e96198c879

File content as of revision 5:9fffeb949e5a:

#include "config.h"
#include "log.h"
#include "HttpSend.h"
#include "mbed.h"

#define BUFFER_NUM 64

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;

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;
}

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];

    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);
    sprintf(http_cmd,"%s\r\n%s",http_cmd,data);

    
//    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);
        DEBUG_LOG("sock.receive ret=%d \n",ret);
        if (ret <= 0){
            break;
        }
        buffer[ret] = '\0';
        INFO_LOG(" Received ret=%d \n chars from server :\n%s\n", ret, buffer);
    }
*/    
    //sock.close();
}

    
void send_thread (void const *argument) {
    INFO_LOG ("send_thread start\n");

    while (true) {
        osEvent evt = m_queue.get();
        if (evt.status == osEventMessage) {
            message_t *message = (message_t*)evt.value.p;
            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);
//                m_ethernet->disconnect();
                //m_mpool.free(message);
                releaseBuffer(message);
                m_queueCnt--;
//                DEBUG_LOG ("*message=0x%08X free \n",message);
            }else{
                DEBUG_LOG("message ??? \n");
            }
        }
        Thread::wait(100);
    }
        
    // 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(){
    return getBuffer();
}

void HttpSend::send(message_t* message){
    m_queueCnt++;
    m_queue.put(message);
}