コード例 #1
0
ファイル: modem.c プロジェクト: PascalSI/ampm_car_tracker
uint8_t SendSMS(const uint8_t *recipient, const uint8_t *data)
{
	uint8_t buf[32];
	uint8_t i;
	DelayMs(100);
	MODEM_FlushBuffer();
	MODEM_Info("\r\nGSM->SMS SEND TO %s...\r\n", recipient);
	MODEM_Info("\r\nGSM->DATA:");
	sprintf((char *)buf, "AT+CMGS=\"%s\"\r", recipient);
	COMM_Puts(buf);
	if(MODEM_CheckResponse("> ", 20000))
	{
		MODEM_Info("\r\nGSM->SMS SEND FAILS\r\n");
		return 0xff;
	}
	
	for(i = 0;i < 160;i++)
	{
		if(data[i] == '\0')
			break;
		//DbgCfgPutChar(data[i]);
		COMM_Putc(data[i]);
	}
	COMM_Putc(0x1A);
	
	if(MODEM_CheckResponse("OK", 10000)){
		MODEM_Info("\r\nGSM->SMS SEND FAILS\r\n");
		return 0xff;
	}
	MODEM_Info("\r\n");
	MODEM_Info("\r\nOK\r\n");
	
	return 0;
}
コード例 #2
0
ファイル: stubs.c プロジェクト: MichalKs/STM32F4_DS18B20
/**
 *
 * @param fileHandle
 * @param buf
 * @param len
 * @return
 * TODO Expand this function
 */
int _write(int fileHandle, char *buf, int len) {

	int i;
	for (i=0; i<len; i++) {
		COMM_Putc((uint8_t)buf[i]);
	}

	return len;
}
コード例 #3
0
ファイル: stubs.c プロジェクト: MichalKs/STM32F7_Blinky
/**
 *
 * @param fileHandle
 * @param buf
 * @param len
 * @return
 */
int _write(int fileHandle, char *buf, int len) {

  // send all data to COMM module
  for (int i = 0; i < len; i++) {
    COMM_Putc(buf[i]);
  }

  return len;
}
コード例 #4
0
ファイル: modem.c プロジェクト: PascalSI/ampm_car_tracker
uint8_t MODEM_GprsSendData(uint8_t socket,uint8_t *data,uint32_t length)
{
	COMPARE_TYPE cmp1;
	Timeout_Type tOut;
	uint8_t buf[32],c;
	uint32_t i;
	uint32_t tryNum = 5;
	MODEM_FlushBuffer();
	sprintf((char *)buf, "AT+USOWR=%d,%d\r",socketMask[socket],length);
	
	for(;;)
	{	
		DelayMs(100);
		COMM_Puts(buf);
		InitTimeout(&tOut,TIME_MS(5000));
		InitFindData(&cmp1,"@");
		while(CheckTimeout(&tOut))
		{
			if(RINGBUF_Get(&commBuf,&c) == 0)
			{
				if(FindData(&cmp1,c) == 0)
				{
					break;
				}
			}
		}
		if(CheckTimeout(&tOut) == TIMEOUT)
		{
			tryNum --;
			if(tryNum == 0) 
			{
				tcpSocketStatus[socket] = SOCKET_CLOSE;
				return 0xff;
			}
			continue;
		}
		i = length;
		for(i = 0; i < length ;i++)
		{
			COMM_Putc(data[i]);
		}
		InitTimeout(&tOut,TIME_MS(5000));
		InitFindData(&cmp1,"OK");
		while(CheckTimeout(&tOut))
		{
			if(RINGBUF_Get(&commBuf,&c) == 0)
			{
				if(FindData(&cmp1,c) == 0)
				{
					MODEM_Info("\r\nGSM->%s OK\r\n",buf);
					DelayMs(100);
					return 0;
				}
			}
		}
		MODEM_Info("\r\nGSM->%s FAILS\r\n",buf);
		tryNum --;
		if(tryNum == 0) 
		{
			tcpSocketStatus[socket] = SOCKET_CLOSE;
			return 0xff;
		}
	}
}
コード例 #5
0
void Gprs_Task(void)
{	
	uint16_t i,j;
	GPRS_PHASE_TYPE gprs_TaskPhaseOld = gprs_TaskPhase;
	if(GsmTask_GetPhase() ==  MODEM_TURN_ON)
	{
		gprs_TaskPhase = GPRS_TASK_IDLE;
		return;
	}
	if(GsmTask_GetPhase() != MODEM_SYS_COVERAGE_OK)
	{
		memset(gprsSocketStatus,0x00,sizeof(gprsSocketStatus));
		memset(gprsSocketMask,0x00,sizeof(gprsSocketMask));
		return;
	}
	if(modemIsBusy == 1 && modemIsBusySource != AT_U_BLOX_GPRS_TASK)
		return;
	switch(gprs_TaskPhase)
	{
		case GPRS_TASK_LOCATION_SEND_CMD:
			if(ModemCmdTask_SendCmd(NULL,NULL,500, modemOk, modemError, 5000, 0, "AT+ULOC=2,2,0,100,5000\r") == MODEM_RES_OK)
			{
				gprs_TaskPhase = TASK_GPRS_GET_CELL_LOCATION;
			}
			break;
		case TASK_GPRS_GET_CELL_LOCATION:
			if (ModemCmdTask_IsIdle())
			{
				gprs_TaskPhase = GPRS_TASK_IDLE;
			}
			break;
		case GPRS_TASK_CLOSE_BEFORE_CREATE_SOCKET:
				if(tcpIpConn ==  NULL){gprs_TaskPhase = GPRS_TASK_IDLE; break;}
				gprsSocketStatus[tcpIpConn->socketId] = SOCKET_CLOSE;
				GPRS_CheckSocketFree(tcpIpConn->socketId);
				createSocketNow = tcpIpConn->socketId;
				if(ModemCmdTask_SendCmd(NULL,NULL,100, modemOk, modemError, 3000, 2, "AT+USOCL=%d\r", gprsSocketMask[tcpIpConn->socketId]) == MODEM_RES_OK)
				{
					tcpIpConn->socketStatus = SOCKET_DISCONNECTED;
					gprs_TaskPhase = GPRS_TASK_CREATE_SOCKET;
				}
				else if( ModemCmdTask_GetPhase() == MODEM_CMD_ERROR)
				{
					gprs_TaskPhase = GPRS_TASK_CREATE_SOCKET;
				}
		break;
		case GPRS_TASK_CREATE_SOCKET:
			if(tcpIpConn ==  NULL){gprs_TaskPhase = GPRS_TASK_IDLE; break;}
			if(gprsEnableFlag == 0)
			{
				gprs_TaskPhase = GPRS_TASK_IDLE;
				break;
			}
			if(gprsSocketStatus[tcpIpConn->socketId] == SOCKET_OPEN)
			{
				COMM_Putc(0x1B);
				gprs_TaskPhase = GPRS_TASK_CLOSE_BEFORE_CREATE_SOCKET;
				break;
			}
			if(ModemCmdTask_IsIdle())
			{
				COMM_Putc(0x1B);
				createSocketNow = tcpIpConn->socketId;
				ModemCmdTask_SendCmd(GPRS_TCPCreateSocket,"+USOCR: ",100, modemOk, modemError, 5000, 1, "AT+USOCR=6\r");
				gprs_TaskPhase = GPRS_TASK_CREATE_SOCKET_1;
			}

		break;
		case GPRS_TASK_CREATE_SOCKET_1:
			if(tcpIpConn ==  NULL){gprs_TaskPhase = GPRS_TASK_IDLE; break;}
			tcpIpConn->socketStatus = SOCKET_DISCONNECTED;
			if(ModemCmdTask_GetPhase() == MODEM_CMD_OK)
			{
				if(Domain_IpCheck(tcpIpConn->ip) == IS_IP)
				{
					ModemCmdTask_SendCmd(NULL,NULL,100, modemOk, modemError, 15000, 0, 
							"AT+USOCO=%d,\"%s\",%d\r",gprsSocketMask[tcpIpConn->socketId],tcpIpConn->ip,tcpIpConn->port);
					gprs_TaskPhase = GPRS_TASK_CREATE_SOCKET_3;
				}
				else
				{
					DNS_serverIp[0] = 0;
					ModemCmdTask_SendCmd(GPRS_GetIpFromDNS,"+UDNSRN: \"",100, modemOk, modemError, 60000, 0, "AT+UDNSRN=0,\"%s\"\r", tcpIpConn->ip);
					gprs_TaskPhase = GPRS_TASK_CREATE_SOCKET_2;
				}
			}
			else if( ModemCmdTask_GetPhase() == MODEM_CMD_ERROR)
			{
				if(tcpIpConn->tryNum++ >= 3)
				{
					GsmTask_Init();
					gprs_TaskPhase = GPRS_TASK_IDLE;
					tcpIpConn->error = CONN_OPEN_SOCKET_FAIL;
					tcpIpConn->cmd = CONN_CMD_EMPTY;
					break;
				}
				COMM_Putc(0x1B);
				gprs_TaskPhase = GPRS_TASK_CLOSE_BEFORE_CREATE_SOCKET;
			}
		break;
		case GPRS_TASK_CREATE_SOCKET_2:
			if(tcpIpConn ==  NULL){gprs_TaskPhase = GPRS_TASK_IDLE; break;}
			if(ModemCmdTask_GetPhase() == MODEM_CMD_OK)
			{
				ModemCmdTask_SendCmd(NULL,NULL,100, modemOk, modemError, 15000, 0,"AT+USOCO=%d,\"%s\",%d\r",gprsSocketMask[tcpIpConn->socketId],DNS_serverIp,tcpIpConn->port); 
					gprs_TaskPhase = GPRS_TASK_CREATE_SOCKET_3;
			}
			else if( ModemCmdTask_GetPhase() == MODEM_CMD_ERROR)
			{
				gprsDisable = 1;
				tcpIpConn = list_item_next(tcpIpConn);
				gprs_TaskPhase = GPRS_TASK_IDLE;
			}
		break;
		case GPRS_TASK_CREATE_SOCKET_3:
			if(tcpIpConn ==  NULL){gprs_TaskPhase = GPRS_TASK_IDLE; break;}
			if(ModemCmdTask_GetPhase() == MODEM_CMD_OK)
			{
				tcpIpConn->tryNum = 1;
				gprsSocketStatus[tcpIpConn->socketId] = SOCKET_OPEN;
				tcpIpConn->socketStatus = SOCKET_CONNECTED;
				tcpIpConn->cmd = CONN_CMD_EMPTY;
				gprs_TaskPhase = GPRS_TASK_IDLE;
				tcpIpConn = list_item_next(tcpIpConn);
			}
			else if( ModemCmdTask_GetPhase() == MODEM_CMD_ERROR)
			{
				if(tcpIpConn->tryNum != 0)
				{
					tcpIpConn->tryNum--;
					tcpIpConn = list_item_next(tcpIpConn);
					gprs_TaskPhase = GPRS_TASK_IDLE;
					break;
				}
				else
				{
					tcpIpConn->error = CONN_CREATE_TCP_CONNECTION_FAIL;
					tcpIpConn->cmd = CONN_CMD_EMPTY;
					tcpIpConn = list_item_next(tcpIpConn);
					gprs_TaskPhase = GPRS_TASK_IDLE;
					break;
				}
				COMM_Putc(0x1B);
				gprs_TaskPhase = GPRS_TASK_CLOSE_BEFORE_CREATE_SOCKET;
			}
			break;
		case GPRS_TASK_READ_DATA:
			if(tcpIpConn ==  NULL){gprs_TaskPhase = GPRS_TASK_IDLE; break;}
			if(ModemCmdTask_SendCmd(NULL,NULL,100, modemOk, modemError, 1000, 0, "AT+USORD=%d,%d\r",gprsSocketMask[tcpIpConn->socketId],TCP_IP_BUF_SIZE-32) == MODEM_RES_OK)
			{
				tcpIpConn->cmd = CONN_CMD_EMPTY;
				gprs_TaskPhase = GPRS_TASK_GET_DATA;
			}
			break;
		case GPRS_TASK_GET_DATA:
			if(tcpIpConn ==  NULL){gprs_TaskPhase = GPRS_TASK_IDLE; break;}
			if(ModemCmdTask_GetPhase() == MODEM_CMD_OK)
			{
					gprs_TaskPhase = GPRS_TASK_IDLE;
			}
			else if( ModemCmdTask_GetPhase() == MODEM_CMD_ERROR)
			{
					
					if(tcpIpConn->tryNum != 0)
					{
						tcpIpConn->tryNum--;
						tcpIpConn = list_item_next(tcpIpConn);
						gprs_TaskPhase = GPRS_TASK_IDLE;
					}
					else
					{
						tcpIpConn->error = CONN_CREATE_TCP_CONNECTION_FAIL;
						tcpIpConn->socketStatus = SOCKET_DISCONNECTED;
						tcpIpConn->cmd = CONN_CMD_EMPTY;
						tcpIpConn = list_item_next(tcpIpConn);
						gprs_TaskPhase = GPRS_TASK_IDLE;
						break;
					}
			}
			break;
		case GPRS_TASK_SEND_DATA:
			if(tcpIpConn ==  NULL){gprs_TaskPhase = GPRS_TASK_IDLE; break;}
			if(ModemCmdTask_SendCmd(NULL,NULL,500, "@", modemError, 5000, 0, "AT+USOWR=%d,%d\r", gprsSocketMask[tcpIpConn->socketId], tcpIpConn->dataOutLen) == MODEM_RES_OK)
			{
				gprs_TaskPhase = GPRS_TASK_SEND_OUT_DATA;
			}
			else if( ModemCmdTask_GetPhase() == MODEM_CMD_ERROR)
			{
				gprs_TaskPhase = GPRS_TASK_SEND_OUT_DATA;
			}
		break;
		case GPRS_TASK_SEND_OUT_DATA:
			if(tcpIpConn ==  NULL){gprs_TaskPhase = GPRS_TASK_IDLE; break;}
			if(ModemCmdTask_GetPhase() == MODEM_CMD_OK)
			{
					for(i = 0;i < tcpIpConn->dataOutLen;i ++)
					{
						COMM_Putc(tcpIpConn->dataOutPt[i]);
					}
					ModemCmdTask_SendCmd(NULL,NULL,100,modemOk, modemError, 2000, 0,NULL);
					gprs_TaskPhase = GPRS_TASK_CHECK_DATA_SENT;
					gprsCheckDataCnt = 0;
			}
			else if( ModemCmdTask_GetPhase() == MODEM_CMD_ERROR)
			{
					COMM_Putc(0x1A);
					tcpIpBuf.flag = TCPIP_NO_DATA;
					tcpIpConn->cmd  = CONN_CMD_EMPTY;
					gprs_TaskPhase = GPRS_TASK_IDLE;
			}
		break;
		case GPRS_TASK_CHECK_DATA_SENT:	
			if(tcpIpConn ==  NULL){gprs_TaskPhase = GPRS_TASK_IDLE; break;}
			if(ModemCmdTask_GetPhase() == MODEM_CMD_OK)
			{
				ModemCmdTask_SendCmd(GPRS_TcpSocketControl,"+USOCTL: ",100, modemOk, modemError, 1000, 0, "AT+USOCTL=%d,11\r",gprsSocketMask[tcpIpConn->socketId]);
				InitTimeout(&tGprsTaskPhaseTimeOut, SYSTICK_TIME_SEC(1));
				gprs_TaskPhase = GPRS_TASK_CHECK_DATA_SENT1;
			}
			else if( ModemCmdTask_GetPhase() == MODEM_CMD_ERROR)
			{
				tcpIpBuf.flag = TCPIP_NO_DATA;
				tcpIpConn->cmd  = CONN_CMD_EMPTY;
				gprs_TaskPhase = GPRS_TASK_IDLE;
			}
		break;
		case GPRS_TASK_CHECK_DATA_SENT1:
			if(tcpIpConn ==  NULL){gprs_TaskPhase = GPRS_TASK_IDLE; break;}
			if(ModemCmdTask_GetPhase() == MODEM_CMD_OK)
			{
				if(GPRS_dataUnackLength == 0)
				{
					tcpIpBuf.flag = TCPIP_NO_DATA;
					tcpIpConn->cmd  = CONN_CMD_EMPTY;
					tcpIpConn->error = CONN_NO_ERROR;
					tcpIpConn->sentDataFlag = 1;
					gprs_TaskPhase = GPRS_TASK_IDLE;
				}
				else if(GPRS_dataUnackLength >= 2000)
				{
						gprsDisable = 1;
						tcpIpConn = list_item_next(tcpIpConn);
						gprs_TaskPhase = GPRS_TASK_IDLE;
				}
				else
				{
					if(CheckTimeout(&tGprsTaskPhaseTimeOut) == SYSTICK_TIMEOUT)
					{
						gprs_TaskPhase = GPRS_TASK_CHECK_DATA_SENT;
						if(gprsCheckDataCnt++ > 3)
						{
							tcpIpConn->error = CONN_SEND_DATA_FAIL;
							tcpIpBuf.flag = TCPIP_NO_DATA;
							tcpIpConn->cmd  = CONN_CMD_EMPTY;
							gprsCheckDataCnt = 0;
							gprs_TaskPhase = GPRS_TASK_IDLE;
						}
					}
				}
			}
			else if( ModemCmdTask_GetPhase() == MODEM_CMD_ERROR)
			{
				tcpIpConn->error = CONN_SEND_DATA_FAIL;
				tcpIpBuf.flag = TCPIP_NO_DATA;
				tcpIpConn->cmd  = CONN_CMD_EMPTY;
				gprs_TaskPhase = GPRS_TASK_IDLE;
			}
		break;
			
		case GPRS_TASK_CLOSE_CONNECTION:
			if(tcpIpConn ==  NULL){gprs_TaskPhase = GPRS_TASK_IDLE; break;}
			gprsSocketStatus[tcpIpConn->socketId] = SOCKET_CLOSE;
			GPRS_CheckSocketFree(tcpIpConn->socketId);
			createSocketNow = tcpIpConn->socketId;
			if(ModemCmdTask_SendCmd(NULL,NULL,100, modemOk, modemError, 3000, 0, "AT+USOCL=%d\r", gprsSocketMask[tcpIpConn->socketId]) == MODEM_RES_OK)
			{
				tcpIpConn->socketStatus = SOCKET_DISCONNECTED;
				gprs_TaskPhase = GPRS_TASK_WAIT_CONNECTION_CLOSE;
			}
		break;
		case GPRS_TASK_WAIT_CONNECTION_CLOSE:
			if(ModemCmdTask_IsIdle())
			{
				tcpIpConn->cmd = CONN_CMD_EMPTY;
				gprs_TaskPhase = GPRS_TASK_IDLE;
			}
		break;
		
		case GPRS_TASK_IDLE:
			
			if(gprsEnableFlag == 0)
			{
				memset(gprsSocketStatus,0x00,sizeof(gprsSocketStatus));
				memset(gprsSocketMask,0x00,sizeof(gprsSocketMask));
				tcpIpBuf.flag = TCPIP_NO_DATA;
			}
			for(i = 0;i < GPRS_MAX_SOCKET_NUM;i++)
			{
				if(tcpIpBuf.dataUnReadLen[i] && tcpIpBuf.flag == TCPIP_NO_DATA)
				{
					tcpIpConn = list_head(gprsConnList);
					for(j = 0; j < GPRS_MAX_SOCKET_NUM;j++)
					{
						if(tcpIpConn != NULL)
							if(tcpIpConn->socketId == i )
							{
								if(tcpIpConn->socketStatus == SOCKET_DISCONNECTED)
								{
									tcpIpBuf.dataUnReadLen[i] = 0;
								}
								else
									break;
							}
						tcpIpConn = list_item_next(tcpIpConn);
					}
					if(tcpIpConn != NULL)
						gprs_TaskPhase = GPRS_TASK_READ_DATA;
					break;
				}
				else if(tcpIpBuf.flag == TCPIP_NEW_DATA_RECV && i == tcpIpBuf.socket)
				{
					tcpIpConn = list_head(gprsConnList);
					for(j = 0; j < GPRS_MAX_SOCKET_NUM;j++)
					{
						if(tcpIpConn != NULL)
							if(tcpIpConn->socketId == i)
							{
								if(tcpIpConn->socketStatus == SOCKET_DISCONNECTED)
								{
									tcpIpBuf.flag = TCPIP_NO_DATA;
								}
								else
									break;
							}
						tcpIpConn = list_item_next(tcpIpConn);
					}
					if(tcpIpConn != NULL)
					{
						if(tcpIpConn->echo)
						{
							tcpIpBuf.flag = TCPIP_NO_DATA;
							tcpIpConn->newDataFlag = 0;
							tcpIpConn->dataOutPt = tcpIpBuf.data;
							tcpIpConn->dataOutLen = tcpIpBuf.len;
							gprs_TaskPhase = GPRS_TASK_SEND_DATA;
							tcpIpBuf.len = 0;
							break;
						}
						else
							tcpIpConn->newDataFlag = 1;
					}
				}
			}
			if(gprs_TaskPhase != GPRS_TASK_IDLE)
				break;
			if(tcpIpConn != NULL)
			{
				
				if(tcpIpConn->cmd == CONN_CMD_EMPTY)
				{
					tcpIpBuf.flag = TCPIP_NO_DATA;
				}
				if(gprs_TaskPhase == GPRS_TASK_IDLE)
				{
					if(tcpIpConn->socketStatus == SOCKET_CONNECTED)
					{
						if(gprsSocketStatus[tcpIpConn->socketId] == SOCKET_CLOSE)
							tcpIpConn->socketStatus = SOCKET_DISCONNECTED;
					}
					if(tcpIpConn->socketStatus == SOCKET_CONNECTED)
					{
						if(tcpIpBuf.flag == TCPIP_NO_DATA && CheckTimeout(&tcpIpConn->periodDataRecvCheck) == SYSTICK_TIMEOUT && tcpIpBuf.dataUnReadLen[tcpIpConn->socketId] == 0)
						{
							InitTimeout(&tcpIpConn->periodDataRecvCheck,tcpIpConn->periodDataRecvValue); 
							gprs_TaskPhase = GPRS_TASK_READ_DATA;
							break;
						}
					}
					else
					{
						InitTimeout(&tcpIpConn->periodDataRecvCheck,tcpIpConn->periodDataRecvValue); 
					}
					
					switch(tcpIpConn->cmd)
					{
						case CONN_CMD_START:
							if(tcpIpConn->tryNum)
							{
								tryOpenSocketNum = 0;
								gprsCheckDataCnt = 0;
								socketTryToConnectCnt = 0;
								tryToCreateSocketCnt = 0;
								gprs_TaskPhase = GPRS_TASK_CREATE_SOCKET;
								if(gprsEnableFlag == 0)
								{
									gprsEnableCmd = 1;
								}
							}
							else
								tcpIpConn->cmd = CONN_CMD_EMPTY;
							break;
						case CONN_CMD_STOP:
							break;
						case CONN_SEND_DATA:
							gprs_TaskPhase = GPRS_TASK_SEND_DATA;
							
							break;
						case CONN_READ_DATA:
							gprs_TaskPhase = GPRS_TASK_READ_DATA;
							break;
						case CONN_CMD_PAUSE:
							break;
						case CONN_CMD_EMPTY:
							break;
						case CONN_CMD_CLOSE:
							gprs_TaskPhase = GPRS_TASK_CLOSE_CONNECTION;
							break;
						default:
							break;
					}
					
					
					if(gprs_TaskPhase == GPRS_TASK_IDLE)
					{
						tcpIpConn = list_item_next(tcpIpConn);
					}
				}
			}
			else
			{
				tcpIpConn = list_head(gprsConnList);
			}
			break;
		default:
			// re-init modem
			gprs_TaskPhase = GPRS_TASK_IDLE;
			break;
	}
	if(gprs_TaskPhase != GPRS_TASK_IDLE)
	{
		modemIsBusy = 1;
		modemIsBusySource = AT_U_BLOX_GPRS_TASK;
	}
	else if(modemIsBusy && modemIsBusySource == AT_U_BLOX_GPRS_TASK)
	{
		modemIsBusy = 0;
	}
	if(gprs_TaskPhaseOld != GPRS_TASK_IDLE && gprs_TaskPhase == GPRS_TASK_IDLE)
		modemIsBusy = 0;
	if((atCmdCallParser.incomingCall || VoiceCallTask_GetPhase() != CALL_IDLE) && modemIsBusy)
	{
		modemIsBusy = 0;
		
		memset(gprsSocketStatus,NULL,sizeof(gprsSocketStatus));
		memset(gprsSocketMask,NULL,sizeof(gprsSocketMask));
		tcpIpBuf.flag = TCPIP_NO_DATA;
		tcpIpBuf.socket = 0;
		tcpIpBuf.len = 0;
		
		gprs_TaskPhase = GPRS_TASK_IDLE;
		
	}
}