1 #include "multirat_SB_http.h"
2 #include "multirat_poll_thread.h"
3 #include "multirat_process.h"
4 #include "multirat_conf.h"
5 #include "multirat_watch_dog_thread.h"
6 #include "multirat_libapi.h"
7 #include "multirat_file_manager.h"
8 #include "multirat_file_stream.h"
10 PollThread* PollThread_init()
12 PollThread *PollThrd = malloc(sizeof(PollThread));
15 TIZEN_LOGD("Error !!! curl thread allocation failed [%d] [%s]", errno, strerror(errno));
18 memset(PollThrd,0,sizeof(PollThread));
22 void PollThread_start(SmartBondingData *SBData)
27 if ((ECode = pthread_create(&thread, NULL, PollThread_entry_function,(void *)SBData)) != 0)
29 TIZEN_LOGD("Error !!! creating pthread [%d] [%s]", errno, strerror(errno));
30 PollThread_exit(SBData->PollThrd);
31 SBData->PollThrd = NULL;
35 TIZEN_LOGD("SBData [%p] Poll Thread Started", SBData);
36 SBData->PollThrd->threadStatus = THREAD_INIT;
37 SBData->PollThrd->threadId = thread;
41 void *PollThread_entry_function(void *pArg)
43 SmartBondingData *SBData = (SmartBondingData *)pArg;
46 PollThread_run_thread(SBData);
51 void PollThread_exit(PollThread *PollThrd)
53 TIZEN_LOGD("Poll Thread Exit called");
56 if(PollThrd->threadStatus == THREAD_INIT)
58 PollThrd->threadStatus = THREAD_FINISH;
60 if(0 != PollThrd->threadId)
61 pthread_join(PollThrd->threadId,NULL);
62 PollThrd->threadId = 0;
66 TIZEN_LOGD("Poll Thread Exit done");
69 void PollThread_run_thread(SmartBondingData *SBData)
72 PollThread *PollThrd = SBData->PollThrd;
73 char readbuffer[NOTI_TRIGGER_LENGTH + 1] = "\0";
75 TIZEN_LOGD("SBData[%p] Poll Thread Run", SBData);
76 PollThrd->threadStatus = THREAD_RUNNING;
77 /* Poll for the Data on Noti Pipe Fd */
78 while(PollThrd->threadStatus != THREAD_FINISH)
80 TIZEN_D_LOGD("SBData[%p] Waiting For Data on Notification Pipe Fd", SBData);
82 PollThread_poll(SBData->noti_pipefd[0], SBData, 1000);
84 if(PollThrd->threadStatus == THREAD_FINISH)
86 TIZEN_LOGD("SBData[%p] Exiting Poll Thread",SBData);
90 /* Read the Data from the Noti Pipe Fd */
91 nbytes = read(SBData->noti_pipefd[0], readbuffer, NOTI_TRIGGER_LENGTH);
92 nbytes = nbytes; /* Just to remove warnings */
93 TIZEN_D_LOGD("SBData[%p] Read Data from Notification Pipe Fd [%s] Length [%d]",SBData, readbuffer, nbytes);
95 /* Wait on Socket or PIPE fd */
97 if(((SBData->response_body_read < SBData->expectedbytes) || (SBData->expectedbytes == 0) || (SBData->fStreamFileBufferReady == 0)))
99 TIZEN_D_LOGD("SBData[%p] Waiting For Data on Socket", SBData);
100 PollThread_poll(SBData->socket_fd, SBData, 10);
101 /* Write Into Trigger Pipe Fd */
102 TIZEN_D_LOGD("SBData [%p] Write Data to Trigger Pipe Fd [%s]", SBData, NOTI_TRIGGER);
103 nbytes = write(SBData->trigger_pipefd[1], NOTI_TRIGGER, NOTI_TRIGGER_LENGTH);
107 TIZEN_D_LOGD("SBData[%p] Waiting For Data on Node", SBData);
108 PollThread_poll_buffer(SBData);
109 /* Write Into Trigger Pipe Fd */
110 TIZEN_D_LOGD("SBData[%p] Write Data to Trigger Pipe Fd [%s]", SBData, NOTI_TRIGGER);
111 nbytes = write(SBData->trigger_pipefd[1], NOTI_TRIGGER, NOTI_TRIGGER_LENGTH);
114 PollThrd->threadStatus = THREAD_FINISH;