@@ -65,6 +65,9 @@ const char LTE_SHIELD_LISTEN_SOCKET[] = "+USOLI"; // Listen for connection on s
65
65
// ### SMS
66
66
const char LTE_SHIELD_MESSAGE_FORMAT[] = " +CMGF" ; // Set SMS message format
67
67
const char LTE_SHIELD_SEND_TEXT[] = " +CMGS" ; // Send SMS message
68
+ // ### GPS
69
+ const char LTE_SHIELD_GPS_POWER[] = " +UGPS" ;
70
+ const char LTE_SHIELD_GPS_REQUEST_LOCATION[] = " +ULOC" ;
68
71
69
72
const char LTE_SHIELD_RESPONSE_OK[] = " OK\r\n " ;
70
73
@@ -193,6 +196,18 @@ boolean LTE_Shield::poll(void)
193
196
handled = true ;
194
197
}
195
198
}
199
+ {
200
+ if (strstr (lteShieldRXBuffer, " +UULOC" ))
201
+ {
202
+ // Found a Location string!
203
+ Serial.println (" Found location string!" );
204
+ Serial.println (lteShieldRXBuffer);
205
+ }
206
+ // Look for +UULOC
207
+ // Either: +UULOC: DD/MM/YYYY,HH:MM:SS.sss,lat.lat,lon.lon,alt,uncertainty,
208
+ // speed,direction,vertical_acc,sv_used,antenna_status,jamming_status
209
+ // Or: DD/MM/YYYY,HH:MM:SS.sss,lat.lat,lon.lon,alt,uncertainty
210
+ }
196
211
197
212
if ( (handled == false ) && (strlen (lteShieldRXBuffer) > 2 ) )
198
213
{
@@ -849,6 +864,109 @@ IPAddress LTE_Shield::lastRemoteIP(void)
849
864
return _lastRemoteIP;
850
865
}
851
866
867
+ LTE_Shield_error_t LTE_Shield::gpsPower (boolean enable, gnss_system_t gnss_sys)
868
+ {
869
+ LTE_Shield_error_t err;
870
+ char * command;
871
+
872
+ command = lte_calloc_char (strlen (LTE_SHIELD_GPS_POWER) + 8 );
873
+ if (command == NULL ) return LTE_SHIELD_ERROR_OUT_OF_MEMORY;
874
+ if (enable)
875
+ {
876
+ sprintf (command, " %s=1,0,%d" , LTE_SHIELD_GPS_POWER, gnss_sys);
877
+ }
878
+ else
879
+ {
880
+ sprintf (command, " %s=0" , LTE_SHIELD_GPS_POWER);
881
+ }
882
+
883
+ err = sendCommandWithResponse (command, LTE_SHIELD_RESPONSE_OK, NULL , 10000 );
884
+
885
+ free (command);
886
+ return err;
887
+ }
888
+
889
+ LTE_Shield_error_t LTE_Shield::gpsEnableClock (boolean enable)
890
+ {
891
+ // AT+UGZDA=<0,1>
892
+ }
893
+
894
+ LTE_Shield_error_t LTE_Shield::gpsGetClock (struct ClockData * clock)
895
+ {
896
+ // AT+UGZDA?
897
+ }
898
+
899
+ LTE_Shield_error_t LTE_Shield::gpsEnableFix (boolean enable)
900
+ {
901
+ // AT+UGGGA=<0,1>
902
+ }
903
+
904
+ LTE_Shield_error_t LTE_Shield::gpsGetFix (struct PositionData * pos)
905
+ {
906
+ // AT+UGGGA?
907
+ }
908
+
909
+ LTE_Shield_error_t LTE_Shield::gpsEnablePos (boolean enable)
910
+ {
911
+ // AT+UGGLL=<0,1>
912
+ }
913
+ LTE_Shield_error_t LTE_Shield::gpsGetPos (struct PositionData * pos)
914
+ {
915
+ // AT+UGGLL?
916
+ }
917
+
918
+ LTE_Shield_error_t LTE_Shield::gpsEnableSat (boolean enable)
919
+ {
920
+ // AT+UGGSV=<0,1>
921
+ }
922
+
923
+ LTE_Shield_error_t LTE_Shield::gpsGetSat (uint8_t * sats)
924
+ {
925
+ // AT+UGGSV?
926
+ }
927
+
928
+ LTE_Shield_error_t LTE_Shield::gpsEnableRmc (boolean enable)
929
+ {
930
+ // AT+UGRMC=<0,1>
931
+ }
932
+
933
+ LTE_Shield_error_t LTE_Shield::gpsGetRmc (struct PositionData * pos, struct SpeedData * speed,
934
+ struct DateData * date, boolean * valid)
935
+ {
936
+ // AT+UGRMC?
937
+ }
938
+
939
+ LTE_Shield_error_t LTE_Shield::gpsEnableSpeed (boolean enable)
940
+ {
941
+ // AT+UGVTG=<0,1>
942
+ }
943
+
944
+ LTE_Shield_error_t LTE_Shield::gpsGetSpeed (struct SpeedData * speed)
945
+ {
946
+ // AT+UGVTG?
947
+ }
948
+
949
+ LTE_Shield_error_t LTE_Shield::gpsRequest (unsigned int timeout, unsigned int accuracy,
950
+ boolean detailed)
951
+ {
952
+ // AT+ULOC=2,<useCellLocate>,<detailed>,<timeout>,<accuracy>
953
+ LTE_Shield_error_t err;
954
+ char * command;
955
+
956
+ if (timeout > 999 ) timeout = 999 ;
957
+ if (accuracy > 999999 ) accuracy = 999999 ;
958
+
959
+ command = lte_calloc_char (strlen (LTE_SHIELD_GPS_REQUEST_LOCATION) + 24 );
960
+ if (command == NULL ) return LTE_SHIELD_ERROR_OUT_OF_MEMORY;
961
+ sprintf (command, " %s=2,3,%d,%d,%d" , LTE_SHIELD_GPS_REQUEST_LOCATION,
962
+ detailed ? 1 : 0 , timeout, accuracy);
963
+
964
+ err = sendCommandWithResponse (command, LTE_SHIELD_RESPONSE_OK, NULL , 10000 );
965
+
966
+ free (command);
967
+ return err;
968
+ }
969
+
852
970
// ///////////
853
971
// Private //
854
972
// ///////////
@@ -883,6 +1001,7 @@ LTE_Shield_error_t LTE_Shield::init(unsigned long baud,
883
1001
884
1002
_baud = baud;
885
1003
setGpioMode (GPIO1, NETWORK_STATUS);
1004
+ setGpioMode (GPIO2, GNSS_SUPPLY_ENABLE);
886
1005
setSMSMessageFormat (LTE_SHIELD_MESSAGE_FORMAT_TEXT);
887
1006
autoTimeZone (true );
888
1007
for (int i = 0 ; i < LTE_SHIELD_NUM_SOCKETS; i++)
0 commit comments