/***************************************************************************** * FUNCTION * SimSrvSimCardUnavailableSendStatusIndvoid * DESCRIPTION * For PTS SIMAP Testing Usage * PARAMETERS * void * RETURNS * void *****************************************************************************/ void SimSrvSimCardUnavailableSendStatusIndvoid(void) { /* * Add Send Card Status with Card Not Accessible to Client 2008-0614 * Note that: STATUS_IND is only sent in Server's OPEN or CON_PENDING state in SIM_ServerSendStatus() */ if (SIM(simServer)[0].simserver_activate_status != SIM_SERVER_STATUS_ACTIVATED) { #ifdef __SIMAP_MAUI__ Assert(0); #else return ; #endif } kal_trace(TRACE_GROUP_1, BT_SIMAP_MAKE_SIMCARD_UNAVAILABLE_THEN_SEND_STATUS_IND); SIM(simServer)[0].flags |= SIM_SERVER_FLAG_STATUS; SimServerAppCallback(&SIM(simServer)[0], SAEVENT_SERVER_STATUS_REQ, BT_STATUS_FAILED, 0, 0); }
main(int argc, char** argv) { int memtype; int addr; INITCACHE(argc, &argv[0]); while (scanf("%d %x", &memtype, &addr)>=0) { memory_access(memtype, addr); }; SIM();/* useful for the end of the simulation file */ DUMPRES(); }
void SimServerAuthorize(RfChannel *Channel, BD_ADDR bdAddr) { SIMAPCallbackParms parms; btbm_bd_addr_t bd_addr; /* record the current channel*/ cur_rfchannel = Channel; SIM(simServer)[0].substate |= BT_MMI_AUTH_REQ_SENT; btmtk_os_memset((kal_uint8*) & bd_addr, 0, sizeof(btbm_bd_addr_t)); CONVERT_ARRAY2BDADDR(&bd_addr, bdAddr.addr); #if 0 // Reserved for MAUI bt_simap_auth_req->lap = 0; bt_simap_auth_req->uap = 0; bt_simap_auth_req->nap = 0; bt_simap_auth_req->lap = bd_addr.lap; bt_simap_auth_req->uap = bd_addr.uap; bt_simap_auth_req->nap = bd_addr.nap; #endif parms.p.simap_auth_req.lap = 0; parms.p.simap_auth_req.uap = 0; parms.p.simap_auth_req.nap = 0; parms.p.simap_auth_req.lap = bd_addr.lap; parms.p.simap_auth_req.uap = bd_addr.uap; parms.p.simap_auth_req.nap = bd_addr.nap; /* Send AUTH_REQ msg to MMI */ #if 0 // Reserved for MAUI bt_send_msg( MSG_ID_BT_SIMAP_AUTH_REQ, MOD_MMI, BT_APP_SAP, (local_para_struct*) bt_simap_auth_req, NULL); #endif parms.event = SIMAP_EVENT_AUTH_REQ; parms.dstMod = MOD_MMI; SIMAPCB(&parms); }
struct a_res_str * do_walign (const unsigned char *aa0, int n0, const unsigned char *aa1, int n1, int frame, int repeat_thresh, struct pstruct *ppst, struct f_struct *f_str, int *have_ares) { struct a_res_str *a_res, *tmp_a_res; int a_res_index; *have_ares = 0x3; /* set 0x2 bit to indicate local copy */ if ((a_res = (struct a_res_str *)calloc(1, sizeof(struct a_res_str)))==NULL) { fprintf(stderr," [do_walign] Cannot allocate a_res"); return NULL; } #ifndef LALIGN a_res = nsw_malign(f_str->pam2p, (ppst->ext_sq_set?1:0), n0, aa1, n1, repeat_thresh, f_str->max_res, -ppst->gdelval, -ppst->ggapval, f_str->ss, a_res,ppst->score_ix, &sw_walign, ppst->do_rep ); #else /* LALIGN */ if (!ppst->show_ident && same_seq(aa0, n0, aa1, n1)) ppst->nseq = 1; else ppst->nseq = 2; SIM(aa0-1, aa1-1, n0, n1, ppst, ppst->nseq, repeat_thresh, ppst->max_repeat, a_res); #endif a_res_index = 0; for (tmp_a_res=a_res; tmp_a_res; tmp_a_res = tmp_a_res->next) { tmp_a_res->index = a_res_index++; } return a_res; }
/***************************************************************************** * FUNCTION * SimSrvSetImmediateDiscType * DESCRIPTION * For PTS SIMAP Testing Usage * PARAMETERS * void * RETURNS * void *****************************************************************************/ void SimSrvSetImmediateDiscType(void) { SIM(simServer)[0].discType = SIM_DISCONNECT_IMMEDIATE; kal_trace(TRACE_GROUP_1, BT_SIMAP_CURRENT_DISC_TYPE, SIM(simServer)[0].discType); }
/***************************************************************************** * FUNCTION * SimSrvSetGracefulDiscType * DESCRIPTION * For PTS SIMAP Testing Usage * PARAMETERS * void * RETURNS * void *****************************************************************************/ void SimSrvSetGracefulDiscType(void) { SIM(simServer)[0].discType = SIM_DISCONNECT_GRACEFUL; kal_trace(TRACE_GROUP_1, BT_SIMAP_CURRENT_DISC_TYPE, SIM(simServer)[0].discType); }
/***************************************************************************** * FUNCTION * SimSrvCallback * DESCRIPTION * * PARAMETERS * Server [IN] * Parms [IN] * RETURNS * void *****************************************************************************/ void SimSrvCallback(SimServer *Server, SimCallbackParms *Parms) { SimCardReaderStatus cardRdrStatus; SimCardStatus statusChange = SIM_CARD_STATUS_UNKNOWN; SimResultCode result = SIM_RESULT_NO_REASON; BtStatus status; U8 *ptr; U16 len; switch (Parms->event) { case SAEVENT_SERVER_OPEN_IND: /* When receiving this event, SimServer will send CONNECT_RSP event back to client */ if ((status = SIM_ServerRespondOpenInd(Server, SIM_CONN_STATUS_OK)) != BT_STATUS_PENDING) { kal_trace(TRACE_GROUP_1, BT_SIMAP_CON_NOT_ACCEPTED_IN_SRVCALLBACK, status); /* In this case means that sending of CONNECT_RSP is failed */ /* Return value from RF_CloseChannel() may be BT_STATUS_IN_PROGRRESS(presenting rfchannel state is DLC_STATE_DISC_PENDING) */ status = SimApCloseRFCommChnl(&(Server->rfChannel)); if ((status != BT_STATUS_PENDING) && (status != BT_STATUS_IN_PROGRESS) && (status != BT_STATUS_SUCCESS)) { /* Report(("SERVER_OPEN_IND and RF_CloseChannel error, status=%d",status)); */ kal_trace(TRACE_GROUP_1, BT_SIMAP_SHOW_ONE_BYTE, status); Assert(0); } } else { kal_trace(TRACE_GROUP_1, BT_SIMAP_CON_ACCEPTED_IN_SRVCALLBACK); } break; case SAEVENT_SERVER_OPEN: kal_trace(TRACE_GROUP_1, BT_SIMAP_CON_OPEN_IN_SRVCALLBACK, Parms->status); if (Parms->status == BT_STATUS_SUCCESS) { #if 0 // Reserved for MAUI bt_simap_connect_ind_struct *bt_simap_connect_ind = NULL; #endif SIMAPCallbackParms parms; /* Allocated a connection id for SIM Access Profile (SC_SIM_ACCESS: 0x112D) */ SIM(connect_id)[0] = BTBMProfileAllocateConnIndex(SC_SIM_ACCESS, Parms->ptrs.remDev->bdAddr); SIM(allocated_connect_id)[0] = KAL_TRUE; #if 0 // Reserved for MAUI bt_simap_connect_ind = construct_local_para(sizeof(bt_simap_connect_ind_struct), TD_UL); /* Reset lap,uap,nap to zero */ bt_simap_connect_ind->lap = 0; bt_simap_connect_ind->uap = 0; bt_simap_connect_ind->nap = 0; memcpy(&(bt_simap_connect_ind->lap), &Parms->ptrs.remDev->bdAddr.addr[0], 3); bt_simap_connect_ind->uap = Parms->ptrs.remDev->bdAddr.addr[3]; memcpy(&(bt_simap_connect_ind->nap), (U16*) & Parms->ptrs.remDev->bdAddr.addr[4], 2); bt_simap_connect_ind->cid = SIM(connect_id)[0]; bt_send_msg( MSG_ID_BT_SIMAP_CONNECT_IND, MOD_MMI, BT_APP_SAP, (local_para_struct*) bt_simap_connect_ind, NULL); #endif parms.event = SIMAP_EVENT_CONNECT_IND; parms.dstMod = MOD_MMI; parms.p.simap_connect_ind.cid = SIM(connect_id)[0]; parms.p.simap_connect_ind.lap = 0; parms.p.simap_connect_ind.uap = 0; parms.p.simap_connect_ind.nap = 0; btmtk_os_memcpy((U8 *)&(parms.p.simap_connect_ind.lap), &Parms->ptrs.remDev->bdAddr.addr[0], 3); parms.p.simap_connect_ind.uap = Parms->ptrs.remDev->bdAddr.addr[3]; btmtk_os_memcpy((U8 *)&(parms.p.simap_connect_ind.nap), (U8 *) &Parms->ptrs.remDev->bdAddr.addr[4], 2); SIMAPCB(&parms); } else { /* Handle the failed OPEN Event */ /* Return value from RF_CloseChannel() may be BT_STATUS_IN_PROGRRESS(presenting rfchannel state is DLC_STATE_DISC_PENDING) */ status = SimApCloseRFCommChnl(&(Server->rfChannel)); if ((status != BT_STATUS_PENDING) && (status != BT_STATUS_IN_PROGRESS) && (status != BT_STATUS_SUCCESS)) { /* Report(("SERVER_OPEN and RF_CloseChannel err, status=%d",status)); */ kal_trace(TRACE_GROUP_1, BT_SIMAP_SHOW_ONE_BYTE, status); Assert(0); } } break; case SAEVENT_SERVER_CLOSE_IND: kal_trace(TRACE_GROUP_1, BT_SIMAP_CON_CLOSED_IND_IN_SRVCALLBACK, Parms->status); break; case SAEVENT_SERVER_CLOSED: kal_trace(TRACE_GROUP_1, BT_SIMAP_CLOSED_IN_SRVCALLBACK, Parms->status); /* Determine that if is is necessary to notify SIM task to start recovery mechanism */ Report(("[BT SIMAP_svr]SAEVENT_SERVER_CLOSED: substate=%d", SIM(simServer)[0].substate)); //clear the RF channel cur_rfchannel = NULL; if (SIM(simServer)[0].substate & BT_REJECT_SECOND_CLIENT_SESSION) { SIM(simServer)[0].substate &= (~BT_REJECT_SECOND_CLIENT_SESSION); /* Report(("This closed event is due to SimServer is serving one client now, so reject another seesion")); */ kal_trace(TRACE_GROUP_1, BT_SIMAP_CLOSED_EVENT_DUE_TO_REJECT_SECOND_CLIENT); return; } if ((SIM(simServer)[0].substate & BT_SIM_CONNECT_REQ_SENT) && (SIM(simServer)[0].substate & BT_SIM_CONNECT_CNF_RECV) && (SIM(simServer)[0].atr.dataLen == 0)) { //Report(("CONNECT_CNF from SIM task is error, Send DISC_REQ to SIM task is not necessary when CLOSED in SimServer")); //Report(("Case0:In SimSrvCallback():SimServer is available again!")); kal_trace(TRACE_GROUP_1, BT_SIMAP_SRVCALLBACK_CASE0); SIM(simServer)[0].substate = 0; SIM(simServer)[0].available = TRUE; } else if (SIM(simServer)[0].substate & BT_SIM_CONNECT_REQ_SENT) { /* Because the SIM task may notify other modules to enter remote SIM mode, it is necessary to recovery as normal mode */ /* Through sending disconnect_req to SIM task to notify it */ /* Check if timer for DISC_Graceful is still runing */ if (SIM(simServer)[0].substate & BT_APP_DISCONNECT_REQ_RECV) { /* Report(("In SimSrvCallback() recv CLOSED, check timer for DISC_Graceful type")); */ kal_trace(TRACE_GROUP_1, BT_SIMAP_SRVCALLBACK_RECV_CLOSED_CHECK_TIMER); bt_simap_stop_timer(&SIM(simap_event_id)); } /* Send BT_SIM_DISCONNECT_REQ message to SIM task */ SIM(simServer)[0].substate |= BT_SIM_DISCONNECT_REQ_SENT; #if 0 #ifdef __SIMAP_TESTER_ if(SIM(simServer)[0].test_mode == 1) bt_fakesim_disconnect_req_hdlr(); else if(SIM(simServer)[0].test_mode == 2) bt_send_msg(MSG_ID_BT_SIM_DISCONNECT_REQ, MOD_SIM, PS_SIM_SAP, NULL, NULL); #endif #endif /* 0 */ if (SIM(simServer)[0].exec_mode == 0) { #ifdef __SIMAP_MAUI__ bt_send_msg(MSG_ID_BT_SIM_DISCONNECT_REQ, MOD_SIM, PS_SIM_SAP, NULL, NULL); #else SIMAPCallbackParms parms; parms.event = SIM_EVENT_DISCONNECT_REQ; parms.dstMod = MOD_SIM; SIMAPCB(&parms); #endif } #ifdef __SIMAP_UT_ else if (SIM(simServer)[0].exec_mode == 1) { bt_fakesim_disconnect_req_hdlr(); } #endif /* __SIMAP_UT_ */ } else { /* Note: substate field has two bytes, if U8 is used the substate (e.g., 0x1000) will be narrowed to 0x00 : 2006-12-28 */ U32 oldsubstate = SIM(simServer)[0].substate; kal_trace(TRACE_GROUP_1, BT_SIMAP_SIMSERVER_AVAILABLE_IN_SRVCALLBACK, oldsubstate); /* Report(("Case1:In SimSrvCallback():SimServer is available again, and Simserver substate=%d",oldsubstate)); */ /* * Check if this CLOSED Event is triggered due to receive MMI's DEACTIVATE_REQ in SimServer's CONNECT_PENDING state * If SimServer has not yet send CONNECT_REQ to SIM task, this case is matched (No necessary to notify SIM task) * The DEACTIVATE_CNF is returned here directly * At that time, we call RF_CloseChannel() to trigger this event */ if (SIM(simServer)[0].substate & BT_APP_DEACTIVATE_REQ_RECV) { #if 0 // Reserved for MAUI bt_simap_deactivate_cnf_struct *bt_simap_deactivate_cnf = construct_local_para(sizeof(bt_simap_deactivate_cnf_struct), TD_UL); #endif SIMAPCallbackParms parms; /* Using this func to deregister rfcomm server channel and sdp record of SIM Access Profile */ Assert(SIM_DeregisterServer(Server) == BT_STATUS_SUCCESS); /* Report(("This case is SimServer closed then RFCOMM closed due to MMI Deactivate Req, return Deactivate_CNF with ok")); */ kal_trace(TRACE_GROUP_1, BT_SIMAP_SIMSRV_CLOSED_RFCOMM_CLOSED_DUE_TO_DEACTIVATE_REQ); SIM(simServer)[0].simserver_activate_status = SIM_SERVER_STATUS_DEACTIVATED; /* This means that SIM Access Profile connection is closed, check if conneciton_id is still allocated */ if (SIM(allocated_connect_id)[0] == KAL_TRUE) { BTBMProfileReleaseConnIndex(SIM(connect_id)[0]); SIM(allocated_connect_id)[0] = KAL_FALSE; /* Report(("Release SIM Acces Profile connect_id in Case 1")); */ kal_trace(TRACE_GROUP_1, BT_SIMAP_RELEASE_SAP_CONID_CASE1); } #if 0 // Reserved for MAUI bt_simap_deactivate_cnf->result = TRUE; bt_send_msg( MSG_ID_BT_SIMAP_DEACTIVATE_CNF, MOD_MMI, BT_APP_SAP, (local_para_struct*) bt_simap_deactivate_cnf, NULL); #endif parms.event = SIMAP_EVENT_DEACTIVATE_CNF; parms.dstMod = MOD_MMI; parms.p.simap_deactivate_cnf.result = TRUE; SIMAPCB(&parms); } /* * [MAUI_02129303]: As the AUTH_REQ is not responded by MMI & remote device close the RFCOMM channel (timed-out), * we have to report this event to MMI to sync the status. */ else if (BT_MMI_AUTH_REQ_SENT == (SIM(simServer)[0].substate & BT_MMI_AUTH_REQ_SENT)) { SIMAPCallbackParms parms; btbm_bd_addr_t bd_addr; btmtk_os_memset((kal_uint8*) & bd_addr, 0, sizeof(btbm_bd_addr_t)); CONVERT_ARRAY2BDADDR(&bd_addr, Server->remDev->bdAddr.addr); parms.event = SIMAP_EVENT_AUTH_REQ_TIMEOUT_RFCLOSED_IND; parms.dstMod = MOD_MMI; parms.p.simap_auth_req_timeout_rfclose_ind.lap = bd_addr.lap; parms.p.simap_auth_req_timeout_rfclose_ind.uap = bd_addr.uap; parms.p.simap_auth_req_timeout_rfclose_ind.nap = bd_addr.nap; SIMAPCB(&parms); } SIM(simServer)[0].substate = 0; SIM(simServer)[0].available = TRUE; if (SIM_SERVER_STATUS_DEACTIVATING == SIM(simServer)[0].simserver_activate_status) { /* Deactivate now.*/ bt_simap_deactivate_req_hdlr(); } } break; case SAEVENT_SERVER_STATUS_REQ: if (Parms->status == BT_STATUS_SUCCESS) { if (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_POWERED_ON) { statusChange = SIM_CARD_STATUS_RESET; } else if (!(SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_POWERED_ON) && (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { statusChange = SIM_CARD_STATUS_INSERTED; } else if (!(SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { statusChange = SIM_CARD_STATUS_REMOVED; } } else if (Parms->status == BT_STATUS_FAILED) { statusChange = SIM_CARD_STATUS_NOT_ACCESSIBLE; } if ((status = SIM_ServerSendStatus(Server, statusChange)) != BT_STATUS_PENDING) { kal_trace(TRACE_GROUP_1, BT_SIMAP_FAILED_SEND_STATUS_IND_IN_SRVCALLBACK, status); } else { kal_trace(TRACE_GROUP_1, BT_SIMAP_SEND_STATUS_IND_IN_SRVCALLBACK); } break; case SAEVENT_SERVER_ATR_REQ: //kal_trace(TRACE_GROUP_1, BT_SIMAP_SIMCARDREADER_STATUS, SIM(simServer)[0].current_simcardreader_status); Report(("[BT SIMAP]current_simcardreader_status=0x%x", SIM(simServer)[0].current_simcardreader_status)); if ((SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_POWERED_ON) && (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { result = SIM_RESULT_OK; ptr = SIM(simServer)[0].atr.data; len = SIM(simServer)[0].atr.dataLen; } else if (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT) { /* Alread off : This case is POWERED_OFF but CARD_PRESENT */ result = SIM_RESULT_CARD_ALREADY_OFF; len = 0; ptr = NULL; } else if (!(SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { /* No card inserted */ /* Note: it is impossible that POWERED_ON but CARD_NOT_PRESENT; so this is CARD_NOT_PRESENT case */ result = SIM_RESULT_CARD_REMOVED; len = 0; ptr = NULL; } status = SIM_ServerAtrRsp(Server, len, ptr, result); kal_trace(TRACE_GROUP_1, BT_SIMAP_FAILED_SEND_ATR_RSP_IN_SRVCALLBACK, result, status); if (status != BT_STATUS_SUCCESS) { status = SimApCloseRFCommChnl(&(SIM(simServer)[0].rfChannel)); Assert((status == BT_STATUS_PENDING) || (status == BT_STATUS_IN_PROGRESS)); } break; case SAEVENT_SERVER_APDU_REQ: if ((SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_POWERED_ON) && (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { if (SIM(simServer)[0].exec_mode == 0) { #ifdef __SIMAP_MAUI__ bt_sim_apdu_req_struct *apdu_req = NULL; #else SIMAPCallbackParms parms; #endif SIM(simServer)[0].substate |= BT_SIM_APDU_REQ_SENT; kal_trace(TRACE_GROUP_1, BT_SIMAP_SEND_APDU_TO_SIM_IN_SRVCALLBACK); #ifdef __SIMAP_MAUI__ /* Send APDU request to SIM task */ apdu_req = construct_local_para(sizeof(bt_sim_apdu_req_struct), TD_UL); apdu_req->apdu_req_len = Parms->ptrs.msg->parm.apdu.dataLen; OS_MemSet(apdu_req->apdu_req, 0, APDU_REQ_MAX_LEN); OS_MemCopy(apdu_req->apdu_req, Parms->ptrs.msg->parm.apdu.data, apdu_req->apdu_req_len); apdu_req->transport_protocol_type = SIM(simServer)[0].current_transport_protocol_type; bt_send_msg(MSG_ID_BT_SIM_APDU_REQ, MOD_SIM, PS_SIM_SAP, (local_para_struct*) apdu_req, NULL); #else parms.event = SIM_EVENT_APDU_REQ; parms.dstMod = MOD_SIM; parms.p.sim_apdu_req.apdu_req_len = Parms->ptrs.msg->parm.apdu.dataLen; btmtk_os_memset(parms.p.sim_apdu_req.apdu_req, 0, APDU_REQ_MAX_LEN); btmtk_os_memcpy(parms.p.sim_apdu_req.apdu_req, Parms->ptrs.msg->parm.apdu.data, parms.p.sim_apdu_req.apdu_req_len); parms.p.sim_apdu_req.transport_protocol_type = SIM(simServer)[0].current_transport_protocol_type; SIMAPCB(&parms); #endif } #ifdef __SIMAP_UT_ else if (SIM(simServer)[0].exec_mode == 1) { bt_fakesim_apdu_req_hdlr(Parms->ptrs.msg->parm.apdu.dataLen, Parms->ptrs.msg->parm.apdu.data); } #endif /* __SIMAP_UT_ */ } else if (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT) { /* Alread off : This case is POWERED_OFF but CARD_PRESENT */ result = SIM_RESULT_CARD_ALREADY_OFF; ptr = NULL; len = 0; status = SIM_ServerApduRsp(&SIM(simServer)[0], len, ptr, result); kal_trace(TRACE_GROUP_1, BT_SIMAP_SEND_APDU_RSP_TO_CLIENT, result, status, 1); if (status != BT_STATUS_SUCCESS) { status = SimApCloseRFCommChnl(&(SIM(simServer)[0].rfChannel)); Assert((status == BT_STATUS_PENDING) || (status == BT_STATUS_IN_PROGRESS)); } } else if (!(SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { /* No card inserted */ /* Note: it is impossible that POWERED_ON but CARD_NOT_PRESENT; so this is CARD_NOT_PRESENT case */ result = SIM_RESULT_CARD_REMOVED; ptr = NULL; len = 0; status = SIM_ServerApduRsp(&SIM(simServer)[0], len, ptr, result); kal_trace(TRACE_GROUP_1, BT_SIMAP_SEND_APDU_RSP_TO_CLIENT, result, status, 2); if (status != BT_STATUS_SUCCESS) { Assert(0); } } break; case SAEVENT_SERVER_SIM_OFF_REQ: if ((SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_POWERED_ON) && (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { /* In this case: must SIM_CRS_CARD_POWERED_ON and SIM_CRS_CARD_PRESENT are satisfied at the same time */ /* Send POWER_OFF_REQ to SIM task */ kal_trace(TRACE_GROUP_1, BT_SIM_SEND_POWER_OFF_TO_SIM_IN_SRVCALLBACK); SIM(simServer)[0].substate |= BT_SIM_POWER_OFF_REQ_SENT; if (SIM(simServer)[0].exec_mode == 0) { #ifdef __SIMAP_MAUI__ bt_send_msg(MSG_ID_BT_SIM_POWER_OFF_REQ, MOD_SIM, PS_SIM_SAP, NULL, NULL); #else SIMAPCallbackParms parms; parms.event = SIM_EVENT_POWER_OFF_REQ; parms.dstMod = MOD_SIM; SIMAPCB(&parms); #endif } #ifdef __SIMAP_UT_ else if (SIM(simServer)[0].exec_mode == 1) { bt_fakesim_poweroff_req_hdlr(); } #endif /* __SIMAP_UT_ */ return; } else if (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT) { /* Alread off : This case is POWERED_OFF but CARD_PRESENT */ result = SIM_RESULT_CARD_ALREADY_OFF; } else if (!(SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { /* No card inserted */ /* Note: it is impossible that POWERED_ON but CARD_NOT_PRESENT; so this is CARD_NOT_PRESENT case */ result = SIM_RESULT_CARD_REMOVED; } /* Send POWER_OFF_RSP to client */ status = SIM_ServerSimOffRsp(Server, result); kal_trace(TRACE_GROUP_1, BT_SIMAP_POWER_OFF_RSP_TO_CLIENT, result, status); if (status != BT_STATUS_SUCCESS) { status = SimApCloseRFCommChnl(&(SIM(simServer)[0].rfChannel)); Assert((status == BT_STATUS_PENDING) || (status == BT_STATUS_IN_PROGRESS)); } break; case SAEVENT_SERVER_SIM_ON_REQ: /* if current information is enough to return rsp, then sends rsp in this function */ /* POWE_ON_REQ only let client to request T at 0 (T=0) */ if ((SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_POWERED_ON) && (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { result = SIM_RESULT_CARD_ALREADY_ON; } else if (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT) { /* * Because SIM card is already off, so current_transport_protocol_type is invalid * Set T=0 directly and send BT_SIM_RESET_REQ to sim task! */ if (SIM(simServer)[0].supported_transport_protocol_type_capability == 2 || SIM(simServer)[0].supported_transport_protocol_type_capability == 0) { SIM(simServer)[0].substate |= BT_SIM_RESET_REQ_SENT_POWER_ON; if (SIM(simServer)[0].exec_mode == 0) { #ifdef __SIMAP_MAUI__ bt_sim_reset_req_struct *reset_req = NULL; reset_req = construct_local_para(sizeof(bt_sim_reset_req_struct), TD_UL); reset_req->transport_protocol_type = 0; /* default using T=0 transport protocol type */ bt_send_msg( MSG_ID_BT_SIM_RESET_REQ, MOD_SIM, PS_SIM_SAP, (local_para_struct*) reset_req, NULL); #else SIMAPCallbackParms parms; parms.event = SIM_EVENT_RESET_REQ; parms.dstMod = MOD_SIM; parms.p.sim_reset_req.transport_protocol_type = 0; SIMAPCB(&parms); #endif } #ifdef __SIMAP_UT_ else if (SIM(simServer)[0].exec_mode == 1) { bt_fakesim_poweron_req_hdlr(); } #endif /* __SIMAP_UT_ */ return; } else if (SIM(simServer)[0].supported_transport_protocol_type_capability == 1) { /* SIM Card only supports T=1: RESET Error! because not support T=0, RESET_REQ uses T=0! */ result = SIM_RESULT_CARD_NOT_ACCESSIBLE; } } else if (!(SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { /* Note: it is impossible that POWERED_ON but CARD_NOT_PRESENT; so this is CARD_NOT_PRESENT case */ result = SIM_RESULT_CARD_REMOVED; } else { kal_trace(TRACE_GROUP_1, BT_SIMAP_NO_RULES_PROCESS_SIM_ON_REQ_IN_SRVCALLBACK); Assert(0); } /* Send SIM_POWER_ON_RSP to sim client with result code */ status = SIM_ServerSimOnRsp(Server, result); kal_trace(TRACE_GROUP_1, BT_SIMAP_SEND_POWER_ON_RSP_TO_CLIENT_IN_SRVCALLBACK, result, status); if (status != BT_STATUS_SUCCESS) { status = SimApCloseRFCommChnl(&(SIM(simServer)[0].rfChannel)); Assert((status == BT_STATUS_PENDING) || (status == BT_STATUS_IN_PROGRESS)); } break; case SAEVENT_SERVER_SET_TRANS_PROT_REQ: #if SET_T_SUPPORTED == TRUE /* if current information is enough to return rsp, then sends rsp in this function */ /* Set Transport Protocol Type Req will ask to reset the SIM Card */ SIM(simServer)[0].client_requested_transport_protocol_type = Parms->ptrs.msg->parm.protocolId; /* Report(("In SimSrvCallback(): client requested T type=%d",SIM(simServer)[0].client_requested_transport_protocol_type)); */ kal_trace( TRACE_GROUP_1, BT_SIMAP_CLIENT_REQ_T_TYPE, SIM(simServer)[0].client_requested_transport_protocol_type); if ((SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_POWERED_ON) && (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { if (SIM(simServer)[0].supported_transport_protocol_type_capability == 2) { /* SIM Card supports both T=0 and T=1: Send BT_SIM_RESET_REQ msg to SIM task */ if (SIM(simServer)[0].current_transport_protocol_type != Parms->ptrs.msg->parm.protocolId) { Assert((SIM(simServer)[0].current_transport_protocol_type == 0) || (SIM(simServer)[0].current_transport_protocol_type == 1)); SIM(simServer)[0].substate |= BT_SIM_RESET_REQ_SENT_SET_T; if (SIM(simServer)[0].exec_mode == 0) { #ifdef __SIMAP_MAUI__ bt_sim_reset_req_struct *reset_req = NULL; reset_req = construct_local_para(sizeof(bt_sim_reset_req_struct), TD_UL); reset_req->transport_protocol_type = Parms->ptrs.msg->parm.protocolId; bt_send_msg( MSG_ID_BT_SIM_RESET_REQ, MOD_SIM, PS_SIM_SAP, (local_para_struct*) reset_req, NULL); #else SIMAPCallbackParms parms; parms.event = SIM_EVENT_RESET_REQ; parms.dstMod = MOD_SIM; parms.p.sim_reset_req.transport_protocol_type = Parms->ptrs.msg->parm.protocolId; SIMAPCB(&parms); #endif } #ifdef __SIMAP_UT_ else if (SIM(simServer)[0].exec_mode == 1) { bt_fakesim_set_transprotocol_type_req_hdlr(); } #endif /* __SIMAP_UT_ */ return; } else { /* Requested T type is the same as current T type, send rsp to sim client directly */ SIM(simServer)[0].substate |= BT_SIM_RESET_REQ_SENT_SET_T; result = SIM_RESULT_OK; } } else if (SIM(simServer)[0].supported_transport_protocol_type_capability == 1 || SIM(simServer)[0].supported_transport_protocol_type_capability == 0) { /* In this case: SIM card only supports T=0 or T=1 and current_transport_protocol_type is equal to supported_transport_protocol_type_capability */ if (SIM(simServer)[0].current_transport_protocol_type != Parms->ptrs.msg->parm.protocolId) { /* Send REST_RSP with error code: Can't accessible to SIM Client */ /* * In this case: Send SET_T_RSP first * then in Open state PACKET_HANDLED EVENT: send STATUS_IND with card not accessible */ /* Report(("SET T=0/T=1 but only support T=1/T=0, Send SET_T_RSP first then STATUS_IND with card not accessible later")); */ kal_trace(TRACE_GROUP_1, BT_SIMAP_SET_T0_T1_NOT_SUPPORT_T1_T0); SIM(simServer)[0].substate |= BT_SIM_RESET_REQ_SENT_SET_T; result = SIM_RESULT_NOT_SUPPORTED; } else { /* Requested T type is the same as current T type, send rsp to sim client directly */ result = SIM_RESULT_OK; } } } else if ((!(SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_POWERED_ON)) && (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { result = SIM_RESULT_CARD_ALREADY_OFF; } else if (!(SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { result = SIM_RESULT_CARD_REMOVED; } #else /* SET_T_SUPPORTED == TRUE */ result = SIM_RESULT_NOT_SUPPORTED; #endif /* SET_T_SUPPORTED == TRUE */ /* Send SIM_SET_TRANSPORT_PROTOCOL_TYPE_RSP to sim client with result code */ status = SIM_ServerSetTransProtRsp(Server, result); kal_trace(TRACE_GROUP_1, BT_SIMAP_SEND_SET_T_RSP_TO_CLIENT_IN_SRVCALLBACK, result, status); if (status != BT_STATUS_SUCCESS) { Assert(0); } break; case SAEVENT_SERVER_RESET_SIM_REQ: /* if current information is enough to return rsp, then sends rsp in this function */ /* RESET_REQ only let client to request T at 0 (T=0) */ if ((SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_POWERED_ON) && (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { /* * The original following state is wrong! * Because as long as one bit (SIM_CRS_CARD_POWERED_ON or SIM_CRS_CARD_PRESENT) is set in current_simcardreader_status, condition is true! * if((SIM(simServer)[0].current_simcardreader_status & (SIM_CRS_CARD_POWERED_ON | SIM_CRS_CARD_PRESENT))) */ /* In this case, must POWERED_ON and CARD_PRESERT are statisfied at the same time */ if (SIM(simServer)[0].supported_transport_protocol_type_capability == 2) { /* SIM Card supports both T=0 and T=1: Send BT_SIM_RESET_REQ msg to SIM task */ Assert((SIM(simServer)[0].current_transport_protocol_type == 0) || (SIM(simServer)[0].current_transport_protocol_type == 1)); SIM(simServer)[0].substate |= BT_SIM_RESET_REQ_SENT; if (SIM(simServer)[0].exec_mode == 0) { #ifdef __SIMAP_MAUI__ bt_sim_reset_req_struct *reset_req = NULL; reset_req = construct_local_para(sizeof(bt_sim_reset_req_struct), TD_UL); reset_req->transport_protocol_type = 0; /* default using T=0 transport protocol type */ bt_send_msg( MSG_ID_BT_SIM_RESET_REQ, MOD_SIM, PS_SIM_SAP, (local_para_struct*) reset_req, NULL); #else SIMAPCallbackParms parms; parms.event = SIM_EVENT_RESET_REQ; parms.dstMod = MOD_SIM; parms.p.sim_reset_req.transport_protocol_type = 0; SIMAPCB(&parms); #endif } #ifdef __SIMAP_UT_ else if (SIM(simServer)[0].exec_mode == 1) { bt_fakesim_reset_req_hdlr(); } #endif /* __SIMAP_UT_ */ return; } else if (SIM(simServer)[0].supported_transport_protocol_type_capability == 1) { /* SIM Card only supports T=1: RESET Error! because not support T=0, RESET_REQ uses T=0! */ Assert(SIM(simServer)[0].supported_transport_protocol_type_capability == SIM(simServer)[0].current_transport_protocol_type); /* Send REST_RSP with error code: Can't accessible to SIM Client */ result = SIM_RESULT_CARD_NOT_ACCESSIBLE; } else if (SIM(simServer)[0].supported_transport_protocol_type_capability == 0) { /* SIM Card only supports T=0: Send BT_SIM_RESET_REQ msg to SIM task */ Assert(SIM(simServer)[0].supported_transport_protocol_type_capability == SIM(simServer)[0].current_transport_protocol_type); SIM(simServer)[0].substate |= BT_SIM_RESET_REQ_SENT; if (SIM(simServer)[0].exec_mode == 0) { #ifdef __SIMAP_MAUI__ bt_sim_reset_req_struct *reset_req = NULL; reset_req = construct_local_para(sizeof(bt_sim_reset_req_struct), TD_UL); reset_req->transport_protocol_type = 0; /* default using T=0 transport protocol type */ bt_send_msg( MSG_ID_BT_SIM_RESET_REQ, MOD_SIM, PS_SIM_SAP, (local_para_struct*) reset_req, NULL); #else SIMAPCallbackParms parms; parms.event = SIM_EVENT_RESET_REQ; parms.dstMod = MOD_SIM; parms.p.sim_reset_req.transport_protocol_type = 0; SIMAPCB(&parms); #endif } #ifdef __SIMAP_UT_ else if (SIM(simServer)[0].exec_mode == 1) { bt_fakesim_reset_req_hdlr(); } #endif /* __SIMAP_UT_ */ return; } } else if (SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT) { /* This case is SIM_CRS_CARD_PRESENT(0x40) with SIM_CRS_CARD_POWERED_OFF(0x00) */ /* Send REST_RSP with error code: Card powered off to SIM Client */ result = SIM_RESULT_CARD_ALREADY_OFF; } else if (!(SIM(simServer)[0].current_simcardreader_status & SIM_CRS_CARD_PRESENT)) { /* Send REST_RSP with error code: Card Removed to SIM Client */ /* Note: it is impossible that POWERED_ON but CRS_NOT_PRESENT case, so this is CARD_NOT_PRESENT case */ result = SIM_RESULT_CARD_REMOVED; } else { kal_trace(TRACE_GROUP_1, BT_SIMAP_NO_RULES_PROCESS_RESET_REQ_IN_SRVCALLBACK); Assert(0); } /* Send SIM_RESET_RSP to sim client with result code */ status = SIM_ServerResetSimRsp(Server, result); kal_trace(TRACE_GROUP_1, BT_SIMAP_SEND_RESET_RSP_TO_CLIENT_IN_SRVCALLBACK, result, status); if (status != BT_STATUS_SUCCESS) { status = SimApCloseRFCommChnl(&(SIM(simServer)[0].rfChannel)); Assert((status == BT_STATUS_PENDING) || (status == BT_STATUS_IN_PROGRESS)); } break; case SAEVENT_SERVER_CARD_READER_STATUS_REQ: cardRdrStatus = SIM(simServer)[0].current_simcardreader_status; status = SIM_ServerCardReaderStatusRsp(Server, cardRdrStatus, SIM_RESULT_OK); kal_trace(TRACE_GROUP_1, BT_SIMAP_SEND_CARD_RDS_RSP_TO_CLIENT_IN_SRVCALLBACK, result, status); if (status != BT_STATUS_SUCCESS) { status = SimApCloseRFCommChnl(&(SIM(simServer)[0].rfChannel)); Assert((status == BT_STATUS_PENDING) || (status == BT_STATUS_IN_PROGRESS)); } break; case SAEVENT_SERVER_STATUS_SENT: kal_trace(TRACE_GROUP_1, BT_SIMAP_STATUS_IND_SENT_IN_SRVCALLBACK, Parms->status); /* Note that the STATUS_SENT Event may be failed, handle this case here */ if (Parms->status != BT_STATUS_SUCCESS) { if (Server->state == SIM_SERVER_STATE_CONN_PENDING) { /* In CONNECT_PENDING state, this means that STATUS_IND(with reset) is sent failed */ /* Close this SIM Access Profile connection */ /* Return value from RF_CloseChannel() may be BT_STATUS_IN_PROGRRESS(presenting rfchannel state is DLC_STATE_DISC_PENDING) */ status = SimApCloseRFCommChnl(&(Server->rfChannel)); if ((status != BT_STATUS_PENDING) && (status != BT_STATUS_IN_PROGRESS) && (status != BT_STATUS_SUCCESS)) { /* Report(("SERVER_STATUS_SENT and RF_CloseChannel err, status=%d",status)); */ kal_trace(TRACE_GROUP_1, BT_SIMAP_SHOW_ONE_BYTE, status); Assert(0); } } else if (Server->state == SIM_SERVER_STATE_OPEN) { /* Ignore it */ } else { /* Send STATUS_IND in wrong SimServer's state and send this event fail */ Assert(0); } } break; } }
void sim_align(char *seq1, char *seq2, int seq1_len, int seq2_len, int seq_type, int *num_alignments, /* in, out */ float score_align, float match, float transition, float transversion, float start_gap, float cont_gap, align_int **res, /* out */ long *start1, /* out */ long *start2, /* out */ long *end1, /* out */ long *end2) /* out */ { long M, N, K; /* Sequence lengths and k */ char *A, *B; /* The two sequences */ int i, j; long V[128][128], Q,R; /* Converted integer weights */ float parm_M, parm_I, parm_V, parm_O, parm_E; int same_seq; char achars[] = "ARNDCQEGHILKMFPSTWYVBZX"; /* amino acid names */ int alpha = 23; /* alphabet size */ A = seq1; --A; /* subscripts start with 1 */ B = seq2; --B; /* subscripts start with 1 */ M = seq1_len; N = seq2_len; K = *num_alignments; parm_M = DEFAULT_M; parm_I = DEFAULT_I; parm_V = DEFAULT_V; parm_O = DEFAULT_O; parm_E = DEFAULT_E; parm_M = match; parm_I = transition; parm_V = transversion; parm_O = start_gap; parm_E = cont_gap; #ifdef DEBUG printf("#:lav\n\n"); printf("d {\n \"SIM output with parameters:\n"); if (seq_type == DNA) printf(" M = %g, I = %g, V = %g\n", parm_M, parm_I, parm_V); printf(" O = %g, E = %g\"\n}\n", parm_O, parm_E); #endif if (seq_type == PROTEIN) { set_char_set(PROTEIN); set_score_matrix(get_matrix_file(PROTEIN)); for (i = 0; i < 128; i++) { for (j = 0; j < 128; j++) { V[i][j] = score_matrix[char_lookup['-']][char_lookup['-']]; } } for (i = 0; i < alpha; ++i) { for (j = 0; j < alpha; ++j) { V[achars[i]][achars[j]] = 10*score_matrix[char_lookup[achars[i]]][char_lookup[achars[j]]]; } } } else { int j; parm_V += (parm_V > 0) ? 0.05 : -0.05; /* initialise V - HACK - don't know what to! */ for (i = 0; i < 128; i++) { for (j = 0; j < 128; j++) { V[i][j] = parm_V; } } parm_M += (parm_M > 0) ? 0.05 : -0.05; V['A']['A'] = V['C']['C'] = V['G']['G'] = V['T']['T'] = 10*parm_M; V['a']['a'] = V['c']['c'] = V['g']['g'] = V['t']['t'] = 10*parm_M; V['a']['A'] = V['c']['C'] = V['g']['G'] = V['t']['T'] = 10*parm_M; V['A']['a'] = V['C']['c'] = V['G']['g'] = V['T']['t'] = 10*parm_M; parm_I += (parm_I > 0) ? 0.05 : -0.05; V['A']['G'] = V['G']['A'] = V['C']['T'] = V['T']['C'] = 10*parm_I; V['a']['g'] = V['g']['a'] = V['c']['t'] = V['t']['c'] = 10*parm_I; V['a']['G'] = V['g']['A'] = V['c']['T'] = V['t']['C'] = 10*parm_I; V['A']['g'] = V['G']['a'] = V['C']['t'] = V['T']['c'] = 10*parm_I; V['A']['C'] = V['A']['T'] = V['C']['A'] = V['C']['G'] = V['G']['C'] = V['G']['T'] = V['T']['A'] = V['T']['G'] = 10*parm_V; V['a']['c'] = V['a']['t'] = V['c']['a'] = V['c']['g'] = V['g']['c'] = V['g']['t'] = V['t']['a'] = V['t']['g'] = 10*parm_V; V['a']['C'] = V['a']['T'] = V['c']['A'] = V['c']['G'] = V['g']['C'] = V['g']['T'] = V['t']['A'] = V['t']['G'] = 10*parm_V; V['A']['c'] = V['A']['t'] = V['C']['a'] = V['C']['g'] = V['G']['c'] = V['G']['t'] = V['T']['a'] = V['T']['g'] = 10*parm_V; } parm_O += (parm_O > 0) ? 0.05 : -0.05; Q = 10 * parm_O; parm_E += (parm_E > 0) ? 0.05 : -0.05; R = 10 * parm_E; if (seq1_len == seq2_len) { if (strcmp(seq1, seq2) == 0) { same_seq = 1; } else { same_seq = 0; } } else { same_seq = 0; } if (!same_seq) *num_alignments = SIM(A,B,M,N,K,V,Q,R,2L, score_align, res, start1, start2, end1, end2); else { /* self-comparison; insert trivial diagonal */ start1[0] = 1; start2[0] = 1; end1[0] = M; end2[0] = M; *res[0] = 0; /* * if there is only 1 alignment to be found, it must be the main * diagonal */ if (*num_alignments == 1) return; *num_alignments = SIM(A,A,M,M,K-1,V,Q,R,1L, score_align, &res[1], &start1[1], &start2[1], &end1[1], &end2[1]); /* add one to num_alignments for the main diagonal */ (*num_alignments)++; } }
//*****************Функции для работы с GSM *********************************** void GSM_Configuration(void) //Инициализация GSM { uint8_t nr_sim=1; uint8_t x; //Счетчик char *im; //Ссылочная переменная для IMEI do { Reset_rxDMA_ClearBufer(GSM); //Сброс буфера if(GPIO_ReadInputDataBit(GSM_MOD,GSM_READY)==0) { GPIO_ResetBits(GSM_MOD , GSM_ON); //Включаем модем SIM(nr_sim); //Выбор сим карты delay_ms(1000); GPIO_SetBits(GSM_MOD , GSM_ON); } else { GPIO_ResetBits(GSM_MOD , GSM_RESET); //Перезагружаем модем SIM(nr_sim); //Выбор сим карты delay_ms(100); GPIO_SetBits(GSM_MOD , GSM_RESET); } while(GPIO_ReadInputDataBit(GSM_MOD,GSM_READY)==0); //Ожидание готовности модема delay_ms(2000); SendString_InUnit("AT+GSN\r\n" , GSM); //Запрос IMEI delay_ms(100); im=strstr(GSM_RxBuffer , "\r\n\r\n"); if (im !=NULL) { im=im+4; for(x=0;x<15;x++) IMEI[x]=*im++; //Копирование IMEI в переменную Reset_rxDMA_ClearBufer(GSM); //Сброс буфера } SendString_InUnit("AT+CLIP=1\r\n" , GSM); //Включение определителя номера delay_ms(100); Reset_rxDMA_ClearBufer(GSM); //Сброс буфера SendString_InUnit("AT+CPIN?\r\n" , GSM); delay_ms(500); if (strstr(GSM_RxBuffer , "READY") !=NULL) //Если СИМ карта опознана { Reset_rxDMA_ClearBufer(GSM); //Сброс буфера for(x=0;x<10;x++) //Проверка регистрации в сети { if(REG_NET()=='R') //Если регистрация успешна { STATUS.GSM_Status=ACTIVE; STATUS.SIM_Card=nr_sim; SendString_InUnit("AT+COPS?\r\n" , GSM); //Определение оператора сотовой связи delay_ms(100); if (strstr(GSM_RxBuffer , "Beeline") !=NULL) STATUS.OPERATOR=Beeline_OP; if (strstr(GSM_RxBuffer , "MTS") !=NULL) STATUS.OPERATOR=MTS_OP; if (strstr(GSM_RxBuffer , "MegaFon") !=NULL) STATUS.OPERATOR=Megafon_OP; Reset_rxDMA_ClearBufer(GSM); //Сброс буфера break; } else { STATUS.GSM_Status=INACTIVE; delay_ms(2000); } } } nr_sim++; if(nr_sim>3) nr_sim=1; }while(STATUS.GSM_Status==INACTIVE); Reset_rxDMA_ClearBufer(GSM); //Сброс буфера }
int main(int argc, const char * argv[]) { system("pwd"); system("date"); // For performance monitoring // - do not delete - timeval tim; gettimeofday(&tim, NULL); double t1=tim.tv_sec+(tim.tv_usec/1000000.0); // ------------------------------------------ // Read the job number int jobnum = atoi(argv[1]); string fileparam = argv[2]; // Read main simulation parameters from file double horizon = getParameterFromFile("horizon", fileparam); unsigned long popSize = getParameterFromFile("popSize", fileparam); double R0 = getParameterFromFile("R0", fileparam);; double latent_mean = getParameterFromFile("latent_mean", fileparam);; double infectious_mean = getParameterFromFile("infectious_mean", fileparam);; int nE = getParameterFromFile("nE", fileparam); int nI = getParameterFromFile("nI", fileparam); unsigned long mc_iter = getParameterFromFile("mc_iter", fileparam); int njobs = getParameterFromFile("njobs", fileparam); unsigned long initInfectious = getParameterFromFile("init_I1", fileparam); bool calc_WIW_Re = getParameterFromFile("calc_WIW_Re", fileparam); bool doExact = getParameterFromFile("doExact", fileparam); double timeStepTauLeap = getParameterFromFile("timeStepTauLeap", fileparam); int mc_job = int(mc_iter/njobs); // Derive other variables double sigma0 = 1/latent_mean; double gamma0 = 1/infectious_mean; double beta = R0*gamma0; vector<double> sigma(nE); vector<double> gamma(nI); for (int i=0; i<nE; i++) sigma[i]=sigma0*nE; for (int i=0; i<nI; i++) gamma[i]=gamma0*nI; // Simulation simulator SIM(beta, sigma, gamma, popSize, nE, nI); MC_run(SIM, mc_job, horizon,initInfectious, jobnum,fileparam,calc_WIW_Re, doExact,timeStepTauLeap); cout<<endl<<"--- Job #"<<jobnum<<" finished!"<<endl; // -------------------------------------------------------------- // COMPUTER TIME MONITORING - do not delete! gettimeofday(&tim, NULL); double t2=tim.tv_sec+(tim.tv_usec/1000000.0); int minutes = (int)((t2-t1)/60.0); double sec = (t2-t1)-minutes*60.0; cout << endl << " - - - Computational time : "; cout << minutes<<" min "<<sec<<" sec" << endl; // -------------------------------------------------------------- return 0; }