00001
00022
00023
#ifdef S_SPLINT_S
00024
#include"splint.h"
00025
#endif
00026
00027
00028
00029
#include<inavr.h>
00030
00031
#include"AVRGSM_com.h"
00032
#include"AVRGSM_zip.h"
00033
#include"AVRGSM_header.h"
00034
#include"AVRGSM_tools.h"
00035
#include"AVRGSM_api.h"
00036
00037
00039 extern int rx_ack;
00040
00042 unsigned char msgbuff[161];
00043
00045 const unsigned char __flash
ATE0[] =
"ATE0\r\n";
00046 const unsigned char __flash
AT_CNMI[] =
"AT+CNMI=1,1,,,1\r\n";
00047 const unsigned char __flash
AT_CPMS[] =
"AT+CPMS=\"ME\",\"ME\",\"ME\"\r\n";
00048 const unsigned char __flash
AT_CMGD[] =
"AT+CMGD=";
00049 const unsigned char __flash
AT_CMGR[] =
"AT+CMGR=";
00050 const unsigned char __flash
AT_CMGS[] =
"AT+CMGS=";
00051 const unsigned char __flash
CRLF[] =
"\r\n";
00052
00053
00055
int API_check_acknowledge(
void );
00056
00057
00073 int API_modem_init(
void )
00074 {
00075
00076
COM_rx_reset( );
00077
COM_setSearchString(
OK_ );
00078
COM_putsf(
ATE0 );
00079
COM_rx_on( );
00080
00081
if(
API_check_acknowledge( ) > 0 )
00082 {
00083
COM_putsf(
AT_CPMS);
00084
COM_rx_on( );
00085
00086
if(
API_check_acknowledge( ) > 0 )
00087 {
00088
COM_putsf(
AT_CNMI);
00089
COM_rx_on( );
00090
00091
if(
API_check_acknowledge( ) > 0 )
00092 {
00093
return 1;
00094 }
00095
00096
else
00097 {
00098
return -2;
00099 }
00100 }
00101
00102
else
00103 {
00104
return -1;
00105 }
00106 }
00107
00108
else
00109 {
00110
return 0;
00111 }
00112 }
00113
00114
00125 int API_deletemsg(
int index )
00126 {
00127
00128
COM_rx_reset( );
00129
COM_setSearchString(
OK_ );
00130
COM_putsf(
AT_CMGD );
00131
COM_put_integer( index );
00132
COM_putsf(
CRLF );
00133
COM_rx_on( );
00134
00135
if(
API_check_acknowledge( ) > 0 )
00136 {
00137
return 1;
00138 }
00139
00140
else
00141 {
00142
return 0;
00143 }
00144 }
00145
00146
00160 int API_sendmsg(
unsigned char *msg )
00161 {
00162
00164
int payload_len, len;
00165
unsigned char payload_len_c[3], jump;
00166
00167
00168 payload_len = len = 0;
00169 payload_len_c[0] = jump =
'\0';
00170
00171
00172
if( ( payload_len =
ZIP_compress( msg, &jump,
msgbuff) ) == 0 )
00173 {
00174
return 0;
00175 }
00176
00177
00178
else
00179 {
00180
ZIP_itoh(payload_len, &payload_len_c[0]);
00181 len =
HEADER_LEN + payload_len - jump;
00182
00183
COM_rx_reset( );
00184
COM_setSearchString(
READY_ );
00185
COM_putsf(
AT_CMGS );
00186
COM_put_integer( len );
00187
COM_putsf(
CRLF );
00188
COM_rx_on( );
00189
00190
00191
if(
API_check_acknowledge() > 0 )
00192 {
00193
COM_rx_reset( );
00194
COM_setSearchString(
OK_ );
00195
COM_putsf(
PDU_HEADER );
00196
COM_puts( payload_len_c );
00197
COM_puts(
msgbuff );
00198
COM_putchar( 26 );
00199
COM_rx_on( );
00200
00201
if(
API_check_acknowledge() > 0 )
00202 {
00203
return 1;
00204 }
00205
00206
else
00207 {
00208
return -2;
00209 }
00210
00211 }
00212
00213
else
00214 {
00215
return -1;
00216 }
00217 }
00218 }
00219
00220
00232 int API_readmsg(
int ind )
00233 {
00234
00236
unsigned char *encodedmsg;
00237
int i;
00238
00239
00240 encodedmsg =
'\0';
00241 i = 0;
00242
00243
COM_rx_reset( );
00244
COM_setSearchString(
OK_ );
00245
COM_putsf(
AT_CMGR );
00246
COM_put_integer( ind );
00247
COM_putsf(
CRLF );
00248
COM_rx_on( );
00249
00250
if(
API_check_acknowledge() > 0 )
00251 {
00252 encodedmsg =
TOOLS__decodeCMGR( ind );
00253 i =
ZIP_decompress( encodedmsg,
msgbuff );
00254
00255
00256
00257
return i;
00258 }
00259
00260
else
00261 {
00262
return 0;
00263 }
00264 }
00265
00266
00278 int API_check_acknowledge(
void )
00279 {
00280
00282
static unsigned int i, ii;
00283
00284
for( i = 0; (
rx_ack == 0 ) && ( i < 65535 ); i++ )
00285 {
00286
for( ii = 0; ii < 10; ii++ )
00287 {
00288 ;
00289 }
00290 }
00291
00292
if(
rx_ack > 0 )
00293 {
00294
rx_ack = 0;
00295
return 1;
00296 }
00297
00298
else
00299 {
00300
COM_rx_off( );
00301
COM_rx_reset( );
00302
return 0;
00303 }
00304 }