int send_modem(const char * cmd)
{
    int err = 0;
    
    size_t cur = 0;
    ssize_t written;
    size_t len = strlen(cmd);
    
    if(open_modem() == -1) return -1; //AT_ERROR_GENERIC;

    LOGD("%s: AT> %s", logtime(), cmd);

    /* the main string */
    while (cur < len) {
        do {
            written = write (fd_smd, cmd + cur, len - cur);
        } while (written < 0 && errno == EINTR);

        if (written < 0) return -1;// AT_ERROR_GENERIC;

        cur += written;
    }
    /* the \r  */

    do {
        written = write (fd_smd, "\r" , 1);
    } while ((written < 0 && errno == EINTR) || (written == 0));

    if (written < 0) {
        LOGE("%s: send_modem: write failure", logtime());
        return -1; //AT_ERROR_GENERIC;
    }

    return written;
}
Пример #2
0
void act_CONNECT(void)
{
    if (acctlog && (acctfp = fopen(acctlog,"a")) != NULL) {
        fprintf(acctfp,"%s: Calling site %s.\n",
                cdate(), remote_ip);
        fclose(acctfp);
    }
    txtotal = rxtotal = 0;
    dial_status = 0;
    force_dynamic = 0;
    no_redial_delay = 0;
    if (open_modem() == 2)
        no_redial_delay = 2;
}
int read_modem(char* response, size_t responseLen)
{
    if(open_modem() == -1) return -1;
    
    char *pread=response;
    while( pread<response+responseLen){
        if(read(fd_smd, pread, 1)<=0) break;
        if((*pread=='\n' || *pread=='\r') && pread==response) continue;
        if(*pread=='\r') break;
        pread++;
    }
    *pread=0;
    
    if(pread!=response) LOGD("%s: MODEM> %s", logtime(), response);
    else LOGD("%s MODEM>", logtime());
    
    return pread-response;
}
Пример #4
0
int main(int argc, char *argv[])
{
	int ret_val = -1;
	int tries = 0;
	unsigned char settings[2];

	parse_command_line(argc, argv);

	while (ret_val != 0 && tries < 1) {
		tries++;
		ret_val = open_modem();
	}

	tries = 0;

	if (ret_val && !ignore_errors) {
		printf
		    ("Error opening modem, please run the program again\n");
		return finish_up(-1);
	}

	ret_val = -1;

	printf("Step 1 Find the modem\n");

	while (ret_val != 0 && tries < 1) {
		tries++;
		ret_val = find_modem();
	}

	tries = 0;

	if (ret_val && !ignore_errors) {
		printf
		    ("Error finding modem, please run the program again\n");
		return finish_up(-1);
	}

	ret_val = -1;

	// Steps 2-4 Get the modem settings

	while (tries < 3) {
		printf("Step %d get the modem settings\n", tries + 2);
		tries++;
		ret_val = settings_modem(settings);
	}

	tries = 0;

	if (ret_val && !ignore_errors) {
		printf
		    ("Error getting modem settings, please run the program again\n");
		return finish_up(-1);
	}

	ret_val = -1;


	if (settings[0] != 0x03 || settings[1] != 0x03) {
		if (debug)
			printf("Looks like modem needs resetting\n");
		reboot_modem();
		settings_modem(settings);
		settings_modem(settings);
	}

	ret_val = -1;

	// Step 5 Update basis

	printf("Step 5 updating the basis\n");

	while (ret_val != 0 && tries < 2) {
		tries++;
		ret_val = update_basis();
	}

	tries = 0;

	ret_val = -1;


	// Step 6 Update Modem

	printf("Step 6 updating the modem\n");

	while (ret_val != 0 && tries < 1) {
		tries++;
		ret_val = update_modem();
	}

	tries = 0;

	if (ret_val && !ignore_errors) {
		printf
		    ("Error updating modem, please run the program again\n");
		return finish_up(-1);
	}

	ret_val = -1;

	// Step 7 Get modem settings

	printf("Step 7 getting the modem settings\n");

	while (tries < 1) {
		tries++;
		ret_val = settings_modem(settings);
	}

	tries = 0;

	if (ret_val && !ignore_errors) {
		printf
		    ("Error getting modem settings, please run the program again\n");
		return finish_up(-1);
	}

	ret_val = -1;

	// Step 8 Get basis settings

	printf("Step 8 getting the basis settings\n");

	while (ret_val != 0 && tries < 2) {
		tries++;
		ret_val = settings_basis(settings);
	}

	tries = 0;

	if (ret_val && !ignore_errors) {
		printf
		    ("Error getting basis settings, please run the program again\n");
		return finish_up(-1);
	}

	ret_val = -1;

	// Step 9 and 10 Get modem settings

	while (tries < 2) {
		printf("Step %d, getting the modem settings\n", tries + 9);
		tries++;
		ret_val = settings_modem(settings);
	}

	tries = 0;

	if (ret_val && !ignore_errors) {
		printf
		    ("Error getting modem settings, please run the program again\n");
		return finish_up(-1);
	}

	ret_val = -1;

	// Step 11 Set basis filter

	printf("Step 11 setting the basis filter\n");

	while (ret_val != 0 && tries < 1) {
		tries++;
		ret_val = set_filter_basis();
	}

	tries = 0;

	if (ret_val && !ignore_errors) {
		printf
		    ("Error setting basis filter, please run the program again\n");
		return finish_up(-1);
	}

	ret_val = -1;

	// Step 12 Set modem filter

	printf("Step 12 setting the modem filter\n");

	while (ret_val != 0 && tries < 1) {
		tries++;
		ret_val = set_filter_modem();
	}

	tries = 0;

	if (ret_val && !ignore_errors) {
		printf
		    ("Error setting modem filter, please run the program again\n");
		return finish_up(-1);
	}

	ret_val = -1;

	// Step 13 Reboot basis

	printf("Step 13 rebooting basis \n");

	while (ret_val != 0 && tries < 1) {
		tries++;
		ret_val = reboot_basis();
	}

	tries = 0;

	if (ret_val && !ignore_errors) {
		printf
		    ("Error rebooting basis, please run the program again\n");
		return finish_up(-1);
	}

	ret_val = -1;

	// Step 14 Reboot modem

	printf("Step 14, rebooting the modem \n");

	while (ret_val != 0 && tries < 1) {
		tries++;
		ret_val = reboot_modem();
	}

	tries = 0;

	if (ret_val && !ignore_errors) {
		printf
		    ("Error rebooting modem, please run the program again\n");
		return finish_up(-1);
	}

	return finish_up(0);
}