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;
}
Пример #14
0
////////////////////////////////////////////////////////////////////////
// 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;
}
Пример #28
0
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();
}