Ethernet+BLE prototype

Dependencies:   mbed EthernetInterface mbed-rtos

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?

UserRevisionLine numberNew 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