79 lines
2.1 KiB
Go
79 lines
2.1 KiB
Go
package handlers
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net/http"
|
|
"otaupdate/services"
|
|
|
|
"github.com/fiskerinc/cloud-services/pkg/common"
|
|
"github.com/fiskerinc/cloud-services/pkg/grpc/sms"
|
|
"github.com/fiskerinc/cloud-services/pkg/loggerdataresp"
|
|
)
|
|
|
|
// HandleSendWakeSMSToVIN godoc
|
|
// @Summary Get overall software version from a car and its ecu version information
|
|
// @Description Get overall software version from a car and its ecu version information
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param Authorization header string false "Bearer <ID token>"
|
|
// @Param Api-Key header string false "<API token>"
|
|
// @Param vin query string true "VIN"
|
|
// @Success 200 {object} string "Message Status String"
|
|
// @Failure 400 {object} common.JSONError "Bad request"
|
|
// @Failure 401 {object} common.JSONError "Unauthorized"
|
|
// @Failure 503 {object} common.JSONError "Service unavailable"
|
|
// @Router /car/wake [post]
|
|
func HandleSendWakeSMSToVIN(w http.ResponseWriter, r *http.Request) {
|
|
qs := r.URL.Query()
|
|
vin := qs.Get("vin")
|
|
if vin == "" {
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
w.Write([]byte("missing vin"))
|
|
return
|
|
}
|
|
|
|
status, err := sendWakeSMSToVIN(vin)
|
|
if loggerdataresp.BadDataError(err) {
|
|
return
|
|
}
|
|
w.Write([]byte(status))
|
|
}
|
|
|
|
// Sends wak up SMS along with CAN Status wak
|
|
func sendWakeSMSToVIN(vin string) (status string, err error) {
|
|
car, err := services.GetDB().GetCars().SelectByVIN(vin)
|
|
if err != nil {
|
|
return "failed", err
|
|
}
|
|
if car == nil {
|
|
return "failed", errors.New("vehicle not found")
|
|
}
|
|
|
|
iccid := car.ICCID
|
|
|
|
k := sms.SendSMSRequest{
|
|
ICCID: iccid,
|
|
MessageText: "wake",
|
|
Await: true,
|
|
}
|
|
res, err := services.GetSMSClient().HandleSMSSend(context.Background(), &k)
|
|
if err != nil {
|
|
return "failed", err
|
|
}
|
|
// Send the can bus wake up command
|
|
err = sendCANAwakeToVIN(vin)
|
|
if err != nil {
|
|
return "failed can awake", err
|
|
}
|
|
return res.Status.String(), nil
|
|
}
|
|
|
|
func sendCANAwakeToVIN(vin string) (err error) {
|
|
err = services.GetRedisV2Client().SafeQueueMessage(common.TRex.Key(vin), common.Message{
|
|
Handler: "can_network",
|
|
Data: common.RemoteCANNetworkCommandArgs{Action: "on", Timeout: 180},
|
|
})
|
|
return err
|
|
}
|