GSM_Error GSM_TerminateConnection(GSM_StateMachine *s) { GSM_Error error; if (!s->opened) return ERR_NONE; smprintf(s,"[Terminating]\n"); if (s->CurrentConfig->StartInfo) { if (s->Phone.Data.StartInfoCounter > 0) s->Phone.Functions->ShowStartInfo(s,FALSE); } if (s->Phone.Functions != NULL) { error=s->Phone.Functions->Terminate(s); if (error!=ERR_NONE) return error; } error = GSM_CloseConnection(s); if (error != ERR_NONE) return error; GSM_SetDebugFileDescriptor(NULL, FALSE, &(s->di)); s->opened = FALSE; return ERR_NONE; }
int main(void) { int i; // uart initial fprintf(stderr, "This is a test for the Contex-A8...\n"); serial_initial("/dev/ttySAC1", &GsmDevice, 9600); AtTransmitInit(&GsmDevice); usleep(10000); SEQ_Init(); // GPS uart init GPS_Init(); // FIFO initial Open_ImageFIFO(ImageFIFO); #ifdef _EN_INITIAL_GSM_ // config the gprs network NetWork_Connection_Config(); #endif // printf the CSQ info GSM_GetPacketInfo(&unread_sum, &packet_sum); fprintf(stderr, "Unread packet sum = %d\n",unread_sum); fprintf(stderr, "total packet sum = %d\n",packet_sum); if(GSM_GetCSQ(&CSQ)!=ERR_NONE){ fprintf(stderr, "Can't get the CSQ...\n"); } else{ fprintf(stderr, "CSQ = %d\n",CSQ); } for(i=0;i<20;i++){ usleep(10000); } Login_Process(gRxBuff); fprintf(stderr, "========= start transmit =========\n"); for(i=0;i<100;i++){ usleep(10000); } // ===================================== GPS_Debug.lat = MSEC2NDeg( (double)81678360 ); GPS_Debug.lon = MSEC2NDeg( (double)409628128 ); GPS_Debug.speed = 60; GPS_InfoPrintf(&GPS_Debug); // ===================================== // image updata process //ImageTransmit_init("/home/plg/linux.jpg"); // packet process fprintf(stderr,"\r\n****************************\r\n"); PositionUpdateRule_Initial(&RuleList); InZoneCondition_Initial(&InZone_List); OutZoneCondition_Initial(&OutZone_List); TDSA_Condition_Initial(&TDSA_List); Interval_Locate_Init(); // initial the position update process ZoneInfo_Report_Init(); // initial the Zone information update process Speed_Report_Init(); // initial the speed information update process // task initial Task_Init(); SetTimeOut(_Task_Heartbeat_, 6); // execute every 60 seconds SetTimeOut(_Task_GPS_Display_, 6); // execute every 60 seconds SetTimeOut(_Task_RE_Login_, 15); // if we did not receive the heart beat ack in 150 seconds, re login... while(1){ GSM_GetPacketInfo(&unread_sum, &packet_sum); G_PacketType = TypeX; if(unread_sum>0){ memset(gRxBuff,'\0',1024); UDP_ReceivePacket(&link_num, &data_index, &data_len, gRxBuff); fprintf(stderr, "Receive Packet ...\n"); fprintf(stderr, "link num = %d\n",link_num); fprintf(stderr, "data index = %d\n",data_index); fprintf(stderr, "data length = %d\n",data_len); Packet.length = data_len; memcpy(&(Packet.Data[0]), gRxBuff, data_len); res = TLP_PacketDevide(&Packet, &APP_Packet, &G_PacketType); // A type input if((res == ERROR_NONE)&&(G_PacketType == TypeA)){ InputCommandHandle(&APP_Packet); ShowRules(&RuleList); ShowCondition(&InZone_List); ShowCondition(&OutZone_List); ShowSpeedCondition(&TDSA_List); } // B type input if(G_PacketType == TypeB){ ReportUpdata_Loop(0); } // D type input if(G_PacketType == TypeD){ ImageTransmit_loop(0); } } // check the fifo, if we got a new image, send it... DrowsyImage_Check(); DrowsyImage_Send(); // if the image transmit is in working, the other update mesage is delay if(Get_DT_State()==DT_Idle){ Interval_Locate_Check(&RuleList); // position update process Interval_Locate_Updata(&GPS_Msg); ZoneInfo_Condition_Check(&InZone_List, &OutZone_List, &GPS_Msg); // Zone information process ZoneInfo_Update(&GPS_Msg); Speed_Condition_Check(&TDSA_List,&GPS_Debug); SpeedReport_Update(&GPS_Debug); if( isTimeOut(_Task_Heartbeat_)==1 ){ HeartBeat_Request(NULL); ClearTimeOut(_Task_Heartbeat_); } if( isTimeOut(_Task_RE_Login_)==1 ){ // reconfig the network NetWork_Connection_Config(); Login_Process(gRxBuff); ClearTimeOut(_Task_RE_Login_); } } // GPS information GPS_Read(&GPS_Msg); if( isTimeOut(_Task_GPS_Display_)==1 ){ GPS_InfoPrintf(&GPS_Msg); ClearTimeOut(_Task_GPS_Display_); } usleep(500000); } GSM_CloseConnection(); for(i=0;i<100;i++){ usleep(20000); } GSM_Reset(); serial_close(&GsmDevice); return 0; }
GSM_Error GSM_InitConnection_Log(GSM_StateMachine *s, int ReplyNum, GSM_Log_Function log_function, void *user_data) { GSM_Error error; GSM_DateTime current_time; int i; for (i=0;i<s->ConfigNum;i++) { s->CurrentConfig = &s->Config[i]; /* Skip non configured sections */ if (s->CurrentConfig->Connection == NULL) { smprintf_level(s, D_ERROR, "[Empty section - %d]\n", i); continue; } s->Speed = 0; s->ReplyNum = ReplyNum; s->Phone.Data.ModelInfo = GetModelData(s, "unknown", NULL, NULL); s->Phone.Data.Manufacturer[0] = 0; s->Phone.Data.Model[0] = 0; s->Phone.Data.Version[0] = 0; s->Phone.Data.VerDate[0] = 0; s->Phone.Data.VerNum = 0; s->Phone.Data.StartInfoCounter = 0; s->Phone.Data.SentMsg = NULL; s->Phone.Data.HardwareCache[0] = 0; s->Phone.Data.ProductCodeCache[0] = 0; s->Phone.Data.EnableIncomingCall = FALSE; s->Phone.Data.EnableIncomingSMS = FALSE; s->Phone.Data.EnableIncomingCB = FALSE; s->Phone.Data.EnableIncomingUSSD = FALSE; s->User.UserReplyFunctions = NULL; s->User.IncomingCall = NULL; s->User.IncomingSMS = NULL; s->User.IncomingCB = NULL; s->User.IncomingUSSD = NULL; s->User.SendSMSStatus = NULL; s->LockFile = NULL; s->opened = FALSE; s->Phone.Functions = NULL; s->di = GSM_none_debug; s->di.use_global = s->CurrentConfig->UseGlobalDebugFile; if (!s->di.use_global) { GSM_SetDebugFunction(log_function, user_data, &s->di); GSM_SetDebugLevel(s->CurrentConfig->DebugLevel, &s->di); error = GSM_SetDebugFile(s->CurrentConfig->DebugFile, &s->di); if (error != ERR_NONE) { GSM_LogError(s, "Init:GSM_SetDebugFile" , error); return error; } } smprintf_level(s, D_ERROR, "[Gammu - %s built %s %s using %s]\n", GAMMU_VERSION, __TIME__, __DATE__, GetCompiler() ); StripSpaces(s->CurrentConfig->Connection); StripSpaces(s->CurrentConfig->Model); StripSpaces(s->CurrentConfig->Device); smprintf_level(s, D_ERROR, "[Connection - \"%s\"]\n", s->CurrentConfig->Connection); smprintf_level(s, D_ERROR, "[Connection index - %d]\n", i); smprintf_level(s, D_ERROR, "[Model type - \"%s\"]\n", s->CurrentConfig->Model); smprintf_level(s, D_ERROR, "[Device - \"%s\"]\n", s->CurrentConfig->Device); if (strlen(GetOS()) != 0) { smprintf_level(s, D_ERROR, "[Running on - %s]\n", GetOS()); } if (GSM_GetDI(s)->dl == DL_BINARY) { smprintf(s,"%c",((unsigned char)strlen(GAMMU_VERSION))); smprintf(s,"%s",GAMMU_VERSION); } error = GSM_RegisterAllConnections(s, s->CurrentConfig->Connection); if (error != ERR_NONE) { GSM_LogError(s, "Init:GSM_RegisterAllConnections" , error); return error; } autodetect: /* Model auto */ /* Try to guess correct driver based on model */ if (s->CurrentConfig->Model[0] == 0 && s->ConnectionType != GCT_NONE && s->ConnectionType != GCT_IRDAOBEX && s->ConnectionType != GCT_BLUEOBEX && s->ConnectionType != GCT_BLUEGNAPBUS && s->ConnectionType != GCT_IRDAGNAPBUS && s->ConnectionType != GCT_BLUES60) { error = GSM_TryGetModel(s); /* Fall back to other configuraitons if the device is not existing (or similar error) */ if ((i != s->ConfigNum - 1) && ( (error == ERR_DEVICEOPENERROR) || (error == ERR_DEVICELOCKED) || (error == ERR_DEVICENOTEXIST) || (error == ERR_DEVICEBUSY) || (error == ERR_DEVICENOPERMISSION) || (error == ERR_DEVICENODRIVER) || (error == ERR_DEVICENOTWORK))) { GSM_CloseConnection(s); continue; } if (error != ERR_NONE) { GSM_LogError(s, "Init:GSM_TryGetModel" , error); return error; } } /* Switching to "correct" module */ error = GSM_RegisterAllPhoneModules(s); /* If user selected soemthing which is not supported, try autodetection */ if (s->CurrentConfig->Model[0] != 0 && error == ERR_UNKNOWNMODELSTRING) { smprintf(s, "Configured model %s is not known, retrying with autodetection!\n", s->CurrentConfig->Model); s->CurrentConfig->Model[0] = 0; goto autodetect; } if (error != ERR_NONE) { GSM_LogError(s, "Init:GSM_RegisterAllPhoneModules" , error); return error; } /* We didn't open device earlier ? Make it now */ if (!s->opened) { error = GSM_OpenConnection(s); if ((i != s->ConfigNum - 1) && ( (error == ERR_DEVICEOPENERROR) || (error == ERR_DEVICELOCKED) || (error == ERR_DEVICENOTEXIST) || (error == ERR_DEVICEBUSY) || (error == ERR_DEVICENOPERMISSION) || (error == ERR_DEVICENODRIVER) || (error == ERR_DEVICENOTWORK))) { GSM_CloseConnection(s); continue; } if (error != ERR_NONE) { GSM_LogError(s, "Init:GSM_OpenConnection" , error); return error; } } /* Initialize phone layer */ error=s->Phone.Functions->Initialise(s); if (error == ERR_TIMEOUT && i != s->ConfigNum - 1) { GSM_CloseConnection(s); continue; } if (error != ERR_NONE) { GSM_LogError(s, "Init:Phone->Initialise" , error); return error; } if (s->CurrentConfig->StartInfo) { s->Phone.Functions->ShowStartInfo(s,TRUE); s->Phone.Data.StartInfoCounter = 30; } if (s->CurrentConfig->SyncTime) { GSM_GetCurrentDateTime (¤t_time); s->Phone.Functions->SetDateTime(s,¤t_time); } /* For debug it's good to have firmware and real model version and manufacturer */ error=s->Phone.Functions->GetManufacturer(s); if (error == ERR_TIMEOUT && i != s->ConfigNum - 1) { GSM_CloseConnection(s); continue; } if (error != ERR_NONE && error != ERR_NOTSUPPORTED) { GSM_LogError(s, "Init:Phone->GetManufacturer" , error); return error; } error=s->Phone.Functions->GetModel(s); if (error != ERR_NONE && error != ERR_NOTSUPPORTED) { GSM_LogError(s, "Init:Phone->GetModel" , error); return error; } error=s->Phone.Functions->GetFirmware(s); if (error != ERR_NONE && error != ERR_NOTSUPPORTED) { GSM_LogError(s, "Init:Phone->GetFirmware" , error); return error; } smprintf(s,"[Connected]\n"); return ERR_NONE; } return ERR_UNCONFIGURED; }