BOOL net_sms_handle_gsmlockq(char *caller, char *command, char *arguments) { char *p; if (sys_features[FEATURE_CARBITS]&FEATURE_CB_SOUT_SMS) return FALSE; net_send_sms_start(caller); net_puts_rom("GSMLOCK: "); p = par_get(PARAM_GSMLOCK); if (*p == 0) { net_puts_rom("(none)\r\n"); } else { net_puts_ram(p); net_puts_rom("\r\n"); } stp_s(net_scratchpad, "Current: ", car_gsmcops); net_puts_ram(net_scratchpad); return TRUE; }
// Register to the NET OVMS server void net_msg_register(void) { char k; char *p; unsigned int sr; // Make a (semi-)random client token sr = TMR0L*256; sr += TMR0H; for (k=0;k<8;k++) { sr += can_databuffer[k]; } srand(sr); for (k=0;k<TOKEN_SIZE;k++) { token[k] = cb64[rand()%64]; } token[TOKEN_SIZE] = 0; p = par_get(PARAM_SERVERPASS); hmac_md5(token, TOKEN_SIZE, p, strlen(p), digest); net_puts_rom("MP-C 0 "); net_puts_ram(token); net_puts_rom(" "); base64encodesend(digest, MD5_SIZE); net_puts_rom(" "); p = par_get(PARAM_VEHICLEID); net_puts_ram(p); net_puts_rom("\r\n"); }
BOOL net_sms_handle_paramsq(char *caller, char *command, char *arguments) { unsigned char k, splen, msglen; char *p, *s; if (sys_features[FEATURE_CARBITS]&FEATURE_CB_SOUT_SMS) return FALSE; net_send_sms_start(caller); net_puts_rom("Params:"); msglen=7; for (k=0; k<PARAM_MAX; k++) { p = par_get(k); if (*p != 0) { s = stp_i(net_scratchpad, "\n", k); s = stp_s(s, ":", p); splen = s - net_scratchpad; if((msglen+splen) > 160) { // SMS becomes too long, finish & start next: net_send_sms_finish(); delay100(20); net_send_sms_start(caller); net_puts_rom("Params:"); msglen=7+splen; } net_puts_ram(net_scratchpad); } } return TRUE; }
void net_send_sms_start(char* number) { if (net_state == NET_STATE_DIAGMODE) { // DIAG mode: screen output net_puts_rom("# "); } else if (net_msg_bufpos) { // NET SMS wrapper mode: nothing to do here // net_put* will write to net_msg_bufpos } else { // MODEM mode: net_puts_rom("AT+CMGS=\""); net_puts_ram(number); net_puts_rom("\"\r\n"); delay100(2); } if ((car_time > 315360000)&& ((sys_features[FEATURE_CARBITS]&FEATURE_CB_SSMSTIME)==0)) { // Car time is valid, and sms time is not disabled char *p = par_get(PARAM_TIMEZONE); char *s = stp_time(net_scratchpad, NULL, car_time + timestring_to_mins(p)*60L); s = stp_rom(s, "\r "); net_puts_ram(net_scratchpad); } }
void net_send_sms_start(char* number) { net_puts_rom("AT+CMGS=\""); net_puts_ram(number); net_puts_rom("\"\r\n"); delay100(2); }
void net_send_sms_rom(char* number, static const rom char* message) { #ifdef OVMS_SUPPRESS_OUTGOING_SMS return; #endif net_send_sms_start(number); net_puts_rom(message); net_puts_rom("\x1a"); }
void net_send_sms_finish(void) { if (net_state == NET_STATE_DIAGMODE) { net_puts_rom("\r\n"); } else { net_puts_rom("\x1a"); } }
// Finish sending a net msg void net_msg_send(void) { if (net_state == NET_STATE_DIAGMODE) { net_puts_rom("\r\n"); } else { net_puts_rom("\x1a"); } }
void net_sms_gps(char* number) { delay100(2); net_send_sms_start(number); net_puts_rom(NET_MSG_GOOGLEMAPS); format_latlon(car_latitude,net_scratchpad); net_puts_ram(net_scratchpad); net_puts_rom(","); format_latlon(car_longitude,net_scratchpad); net_puts_ram(net_scratchpad); net_puts_rom("\x1a"); }
void net_send_sms_start(char* number) { if (net_state == NET_STATE_DIAGMODE) { net_puts_rom("# "); } else { net_puts_rom("AT+CMGS=\""); net_puts_ram(number); net_puts_rom("\"\r\n"); delay100(2); } }
// Start to send a net msg void net_msg_start(void) { if (net_state == NET_STATE_DIAGMODE) { net_puts_rom("# "); } else { net_msg_sendpending = 1; delay100(5); net_puts_rom("AT+CIPSEND\r"); delay100(10); } }
void net_sms_params(char* number) { unsigned char k; char *p; net_send_sms_start(number); net_puts_rom("Params:"); for (k=0;k<PARAM_MAX;k++) { sprintf(net_scratchpad, (rom far char*)" %u:", k); net_puts_ram(net_scratchpad); net_puts_ram(par_get(k)); } net_puts_rom("\x1a"); }
BOOL net_sms_handle_help(char *caller, char *command, char *arguments) { int k; if (sys_features[FEATURE_CARBITS]&FEATURE_CB_SOUT_SMS) return FALSE; net_send_sms_start(caller); net_puts_rom("Commands:"); for (k=0; sms_cmdtable[k][0] != 0; k++) { net_puts_rom(" "); net_puts_rom(sms_cmdtable[k]+1); } return TRUE; }
//////////////////////////////////////////////////////////////////////// // net_state_ticker60() // State Model: Per-minute ticker // This function is called approximately once per minute (since state // was first entered), and gives the state a timeslice for activity. // void net_state_ticker60(void) { switch (net_state) { case NET_STATE_READY: if (net_msg_sendpending>0) { net_granular_tick -= 5; // Try again in 5 seconds... return; } if ((net_link==1)&&(net_apps_connected>0)) { net_msg_start(); net_msg_stat(); net_msg_gps(); net_msg_tpms(); net_msg_environment(); net_msg_send(); } net_state_vchar = net_state_vchar ^ 1; delay100(2); net_puts_rom(NET_CREG_CIPSTATUS); break; } }
// Start to send a net msg void net_msg_start(void) { net_msg_sendpending = 1; delay100(5); net_puts_rom("AT+CIPSEND\r"); delay100(10); }
void net_sms_gps(char* number) { #ifdef OVMS_SUPPRESS_OUTGOING_SMS return; #endif delay100(2); net_send_sms_start(number); net_puts_rom(NET_MSG_GOOGLEMAPS); format_latlon(car_latitude,net_scratchpad); net_puts_ram(net_scratchpad); net_puts_rom(","); format_latlon(car_longitude,net_scratchpad); net_puts_ram(net_scratchpad); net_puts_rom("\x1a"); }
BOOL net_sms_handle_homelink(char *caller, char *command, char *arguments) { if (vehicle_fn_commandhandler != NULL) vehicle_fn_commandhandler(FALSE, 24, arguments); net_send_sms_start(caller); net_puts_rom(NET_MSG_HOMELINK); return TRUE; }
BOOL net_sms_handle_cooldown(char *caller, char *command, char *arguments) { if (vehicle_fn_commandhandler != NULL) vehicle_fn_commandhandler(FALSE, 25, NULL); net_send_sms_start(caller); net_puts_rom(NET_MSG_COOLDOWN); return TRUE; }
BOOL net_sms_handle_lock(char *caller, char *command, char *arguments) { if (vehicle_fn_commandhandler != NULL) vehicle_fn_commandhandler(FALSE, 20, arguments); net_send_sms_start(caller); net_puts_rom(NET_MSG_LOCK); return TRUE; }
BOOL net_sms_handle_unvalet(char *caller, char *command, char *arguments) { if (vehicle_fn_commandhandler != NULL) vehicle_fn_commandhandler(FALSE, 23, arguments); net_send_sms_start(caller); net_puts_rom(NET_MSG_UNVALET); return TRUE; }
void net_send_sms_rom(char* number, const rom char* message) { if (sys_features[FEATURE_CARBITS]&FEATURE_CB_SOUT_SMS) return; net_send_sms_start(number); net_puts_rom(message); net_send_sms_finish(); }
BOOL net_sms_handle_pass(char *caller, char *command, char *arguments) { // Password may not be empty: if (*arguments == 0) { net_send_sms_start(caller); net_puts_rom(NET_MSG_INVALID); return TRUE; } par_set(PARAM_MODULEPASS, arguments); if (sys_features[FEATURE_CARBITS]&FEATURE_CB_SOUT_SMS) return FALSE; net_send_sms_start(caller); net_puts_rom(NET_MSG_PASSWORD); return TRUE; }
BOOL net_sms_handle_chargestop(char *caller, char *command, char *arguments) { if (vehicle_fn_commandhandler != NULL) vehicle_fn_commandhandler(FALSE, 12, NULL); net_notify_suppresscount = 30; // Suppress notifications for 30 seconds net_send_sms_start(caller); net_puts_rom(NET_MSG_CHARGESTOP); return TRUE; }
void net_send_sms_finish(void) { if (net_state == NET_STATE_DIAGMODE) { // DIAG mode: net_puts_rom("\r\n"); } else if (net_msg_bufpos) { // NET SMS wrapper mode: 0-terminate buffer *net_msg_bufpos = 0; } else { // MODEM mode: net_puts_rom("\x1a"); } }
BOOL net_sms_handle_chargestart(char *caller, char *command, char *arguments) { if (vehicle_fn_commandhandler != NULL) vehicle_fn_commandhandler(FALSE, 11, NULL); net_notify_suppresscount = 0; // Enable notifications net_send_sms_start(caller); net_puts_rom(NET_MSG_CHARGESTART); return TRUE; }
void net_sms_params(char* number) { unsigned char k; char *p; #ifdef OVMS_SUPPRESS_OUTGOING_SMS return; #endif net_send_sms_start(number); net_puts_rom("Params:"); for (k=0;k<PARAM_MAX;k++) { sprintf(net_scratchpad, (rom far char*)" %u:", k); net_puts_ram(net_scratchpad); net_puts_ram(par_get(k)); } net_puts_rom("\x1a"); }
BOOL net_sms_handle_register(char *caller, char *command, char *arguments) { par_set(PARAM_REGPHONE, caller); if (sys_features[FEATURE_CARBITS]&FEATURE_CB_SOUT_SMS) return FALSE; net_send_sms_start(caller); net_puts_rom(NET_MSG_REGISTERED); return TRUE; }
void net_send_sms_start(char* number) { if (net_msg_bufpos) { // NET SMS wrapper mode: nothing to do here // net_put* will write to net_msg_bufpos } #ifdef OVMS_DIAGMODULE else if (net_state == NET_STATE_DIAGMODE) { // DIAG mode: screen output net_msg_sendpending = 1; net_puts_rom("# "); } #endif // OVMS_DIAGMODULE else { // MODEM mode: net_puts_rom("AT+CMGS=\""); net_puts_ram(number); net_puts_rom("\"\r\n"); delay100(2); } // ATT: the following code tries to prepend the current time to ALL // outbound SMS. It relies on a) all SMS leaving enough space // to add "HH:MM:SS\r " = 10 chars and b) ALL SMS senders to // call net_send_sms_start() BEFORE preparing the message in // net_scratchpad -- otherwise the prepd message is lost. #ifndef OVMS_NO_SMSTIME if ((car_time > 315360000)&& ((sys_features[FEATURE_CARBITS]&FEATURE_CB_SSMSTIME)==0)) { // Car time is valid, and sms time is not disabled char *p = par_get(PARAM_TIMEZONE); char *s = stp_time(net_scratchpad, NULL, car_time + timestring_to_mins(p)*60L); s = stp_rom(s, "\r "); net_puts_ram(net_scratchpad); } #endif //OVMS_NO_SMSTIME }
BOOL net_sms_handle_cooldown(char *caller, char *command, char *arguments) { if (vehicle_fn_commandhandler != NULL) vehicle_fn_commandhandler(FALSE, 25, NULL); net_send_sms_start(caller); net_puts_rom(NET_MSG_COOLDOWN); #ifdef OVMS_ACCMODULE acc_handle_msg(FALSE, 25, NULL); #endif return TRUE; }
void net_sms_valettrunk(char* number) { char *p; if (sys_features[FEATURE_CARBITS]&FEATURE_CB_SOUT_SMS) return; delay100(2); net_send_sms_start(number); net_puts_rom(NET_MSG_VALETTRUNK); net_send_sms_finish(); }