FreeCalypso > hg > freecalypso-tools
view uptools/atcmd/smwrite.c @ 505:7bf0d909c87e
fc-loadtool flash ID check: change of reset after the check logic
This change only affects those flash configurations that have ID checks
enabled. The logic for resetting the flash after the ID check has been
changed as follows:
1) If the check fails, we return without attempting to reset the flash.
2) If the check is successful, we reset the flash using the configured
method (could be AMD or Intel or Intel W30) instead of always doing an
AMD flash reset as the original code did.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 27 May 2019 19:58:01 +0000 |
parents | dc2fd8e6f42c |
children |
line wrap: on
line source
/* * This program is a debug and development aid - it uses the AT+CMGW command * in PDU mode to write messages into SIM or ME SMS storage, simulating * arbitrary received or sent messages. This trick may come in useful * in the development and testing of SMS handling in phone handset UI firmware. */ #include <sys/types.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <unistd.h> #include "../../rvinterf/include/exitcodes.h" extern char at_response[]; char input_line[176*2+2]; int lineno; process_cmdline(argc, argv) char **argv; { int c; extern int optind; while ((c = getopt(argc, argv, "B:np:RX:")) != EOF) if (!atinterf_cmdline_opt(c)) { /* error msg already printed */ exit(ERROR_USAGE); } if (argc != optind) { fprintf(stderr, "usage: %s [options]\n", argv[0]); exit(ERROR_USAGE); } return(0); } get_input_line() { char *nl; if (!fgets(input_line, sizeof input_line, stdin)) return(0); lineno++; nl = index(input_line, '\n'); if (!nl) { fprintf(stderr, "input line %d: too long or unterminated\n", lineno); exit(ERROR_USAGE); } *nl = '\0'; return(1); } get_input_line_noeof() { int rc; rc = get_input_line(); if (!rc) { fprintf(stderr, "error: premature EOF in input\n"); exit(ERROR_USAGE); } } cmgw_callback() { /* skip empty lines */ if (at_response[1]) puts(at_response+1); } process_record() { int msgstat; u_char pdubin[176]; int cc, scalen; char send_cmd[32]; if (!get_input_line()) return(0); if (!strcmp(input_line, "Received unread message:")) msgstat = 0; else if (!strcmp(input_line, "Received message:")) msgstat = 1; else if (!strcmp(input_line, "Stored unsent message:")) msgstat = 2; else if (!strcmp(input_line, "Sent message:")) msgstat = 3; else { fprintf(stderr, "input line %d: expected beginning of message record\n", lineno); exit(ERROR_USAGE); } for (;;) { get_input_line_noeof(); if (!isupper(input_line[0])) break; if (!index(input_line, ':')) break; } cc = decode_hex_line(input_line, pdubin, sizeof pdubin); if (cc < 1) { inv: fprintf(stderr, "input line %d: not a valid PDU\n", lineno); exit(ERROR_USAGE); } scalen = pdubin[0] + 1; if (cc < scalen + 1) goto inv; /* good to go */ sprintf(send_cmd, "AT+CMGW=%u,%d", cc - scalen, msgstat); atinterf_exec_cmd_needok(send_cmd, input_line, cmgw_callback); /* expect blank line after each PDU */ get_input_line_noeof(); if (input_line[0]) { fprintf(stderr, "input line %d: expected blank line after PDU\n", lineno); exit(ERROR_USAGE); } return(1); } main(argc, argv) char **argv; { process_cmdline(argc, argv); atinterf_init(); /* enable verbose error messages */ atinterf_exec_cmd_needok("AT+CMEE=2", (char *) 0, (void *) 0); /* set PDU mode */ atinterf_exec_cmd_needok("AT+CMGF=0", (char *) 0, (void *) 0); /* process stdin */ while (process_record()) ; exit(0); }