int main(void){
	//DDRA = 0xff;
	//ENCODER_DDR &= ~(_BV(ENCODER_PIN));
	//ENCODER_PORT |= (_BV(ENCODER_PIN));
		
	sim900_init();
	
	//ntp_decode_UTC(3580318410);
	
	sim900_data_connect();
	
	while(1) {}
	
	if (sim900_poweron())
	{
		for (uint8_t i=0; i < 20; i++)
		{
			sim900_cmd_wait_response("AT+CCALR?");
			
			if (sim900_test_last_response("1"))
			{
				sim900_send_sms(send_to_number, "How are you today?");
				break;
			}
			
			_delay_ms(500);
		}
		/*
		if (sim900_cmd_wait_response("AT+CCALR?"))
		{
			if (sim900_test_last_response("1"))
			{
				sim900_send_sms(send_to_number, "How are you today?");
			
			}
		}*/
	}
	
	sim900_cmd_wait_response("AT+CPOWD=1");
	
	while(1)
	{
		 
	}		 

    while(1)
    {

		_delay_ms(2000);
		//read_dials();	
    }
}
Пример #2
0
void sim900_connect(void)
{
    uint8_t i = 0;
    uint8_t retry = 3;

    printk("connect...\r\n");

    while(1) {
        switch(status) {
            case STATUS_POWERON:
                sim900_poweron();
                clear_rx_buf();

                printk("wait for at done\r\n");
                for(i = 0; i < retry; i++) {
                    sim900_write("AT\r\n", 4);
                    //sim900_wait(5000000);
                    OSTimeDlyHMSM(0, 0, 0, 400);
                    if(!check_at()) {
                        status = STATUS_CONFIG;
                        break;
                    }
                    clear_rx_buf();
                }
                break;

                //case STATUS_INIT:
            case STATUS_CONFIG:
                printk("wait for config done\r\n");
                OSTimeDlyHMSM(0, 0, 10, 0);
                sim900_write("AT+CREG?\r\n", 10);
                OSTimeDlyHMSM(0, 0, 0, 100);
                sim900_write("AT+CIPMODE=1\r\n", 14);
                OSTimeDlyHMSM(0, 0, 0, 100);
                sim900_write("AT+CGATT?\r\n", 11);
                OSTimeDlyHMSM(0, 0, 0, 100);
                sim900_write("AT+CSTT=\"CMNET\"\r\n", 17);
                OSTimeDlyHMSM(0, 0, 0, 100);
                sim900_write("AT+CIICR\r\n", 10);
                OSTimeDlyHMSM(0, 0, 2, 0);
                printk("try to get ip address\r\n");
                sim900_write("AT+CIFSR\r\n", 10);
                OSTimeDlyHMSM(0, 0, 0, 100);
                sim900_write("AT+CGATT=1\r\n", 12);
                OSTimeDlyHMSM(0, 0, 0, 100);
                sim900_write("AT+CGSN\r\n", 9);
                OSTimeDlyHMSM(0, 0, 0, 100);
                status = STATUS_CONNECTING;
                break;
            case STATUS_CONNECTING:
                printk("wait for connecting...\r\n");
                sim900_write("AT+CIPSTATUS\r\n", 14);
                OSTimeDlyHMSM(0, 0, 2, 0);
                for(i = 0; i < 1; i++) {
                    clear_rx_buf();
                    sim900_write(connect_cmd, strlen((char *)&connect_cmd[0]));
                    OSTimeDlyHMSM(0, 0, 3, 0);
                    if(!check_at())  {
                        status = STATUS_CONNECTED;
                        break;
                    }
                    clear_rx_buf();
                }
                if(i >= 1) {		//retry failed
                    sim900_write("+++\r\n", 5);
                    OSTimeDlyHMSM(0, 0, 1, 0);
                    sim900_write("AT+CIPCLOSE\r\n", 13);
                    OSTimeDlyHMSM(0, 0, 1, 0);
                    sim900_write("AT+CIPSHUT\r\n", 12);
                    OSTimeDlyHMSM(0, 0, 1, 0);
                    status = STATUS_CONFIG;
                }
                break;
            case STATUS_CONNECTED:
                printk("Connect done!\r\n");
                clear_buf();
                return;
            default:
                break;
        }
    }
}