+static GSM_Error AT_CallDivert(GSM_Data *data, GSM_Statemachine *state)
+{
+ char req[64];
+
+ if (!data->CallDivert) return GE_UNKNOWN;
+
+ sprintf(req, "AT+CCFC=");
+
+ switch (data->CallDivert->DType) {
+ case GSM_CDV_AllTypes:
+ strcat(req, "4");
+ break;
+ case GSM_CDV_Busy:
+ strcat(req, "1");
+ break;
+ case GSM_CDV_NoAnswer:
+ strcat(req, "2");
+ break;
+ case GSM_CDV_OutOfReach:
+ strcat(req, "3");
+ break;
+ default:
+ dprintf("3. %d\n", data->CallDivert->DType);
+ return GE_NOTIMPLEMENTED;
+ }
+ if (data->CallDivert->Operation == GSM_CDV_Register)
+ sprintf(req, "%s,%d,\"%s\",%d,,,%d", req,
+ data->CallDivert->Operation,
+ data->CallDivert->Number.number,
+ data->CallDivert->Number.type,
+ data->CallDivert->Timeout);
+ else
+ sprintf(req, "%s,%d", req, data->CallDivert->Operation);
+
+ strcat(req, "\r\n");
+
+ dprintf("%s", req);
+ if (SM_SendMessage(state, strlen(req), GOP_CallDivert, req) != GE_NONE)
+ return GE_NOTREADY;
+ return SM_WaitFor(state, data, GOP_CallDivert);
+}
+