************************************************************************************
* *
* GPS2SMS *
* PICAXE 28X2 *
* *
* lanternfish *
* 2009 *
* *
************************************************************************************
'Directives
#PICAXE 28X2
#SIMSPEED 20
'Constants
SYMBOL NoBreak = 0
SYMBOL Padding = 0 ; If Frame Length Odd
'Variables
SYMBOL TxtLenPDU = b0
SYMBOL TxtLenUnp = b1
SYMBOL PktSeqNum = b2
SYMBOL MSBChkSum = b3
SYMBOL LSBChkSum = b4
SYMBOL txtptr1 = b8 ; Byte (n) Txt Buffer Pointer
SYMBOL txtptr2 = b9 ; Byte (n+1) Byte in Buffer
SYMBOL bduptr = b10 ; BDU Buffer pointer
SYMBOL byte1 = b11 ; BDU Conversion bytes
SYMBOL byte2 = b12 ; BDU Converted Byte to store in BDU buffer
SYMBOL result = b13 ; BDU Conversion Result
SYMBOL multi = b14 ; BDU Multiplier
SYMBOL divisor = b15 ; BDU Divisor
SYMBOL txtctr = b16 ;
SYMBOL txtlen = b17 ; Length of txt to convert
SYMBOL FrameMSB = b18
SYMBOL FrameLSB = b19
SYMBOL SeqNo = b20
SYMBOL Pointer2 = b21
SYMBOL Pointer1 = b22
SYMBOL Byte3 = b23
SYMBOL XORStart = b24
SYMBOL counter1 = b25
'b26 - b55 are RESERVED for storing BDU message
************************************************************************************
* *
* Main Routine *
* *
************************************************************************************
Setup:
EEPROM 0,("1240567,045520S,170304E,456M",255)
'lat:045520.S long:170304.E
'Converted to 31D98C56B3DD62B219AD66BBC564335ACD768BC966B49AED06
pointer1 = 0
pointer2 = 10
LoadVariableRAM:
READ pointer1,Byte1
IF Byte1=255 THEN GOTO Main
POKE pointer2,Byte1
INC pointer1
INC pointer2
GOTO LoadVariableRAM
Main:
setfreq m8
GOSUB WakeUpNokia
GOSUB GetVer
GOSUB CheckVerReceived
GOSUB Acknowledge
GOSUB ASCII2PDU ;GPS Data Converted Here
GOSUB CheckSum
GOSUB SendSMSEven
'GOSUB Acknowledge
Endless:
GOTO Endless
************************************************************************************
* *
* Suboutines *
* *
************************************************************************************
WakeUpNokia:
'Send 128 U's serially to wake up cellphone
RETURN
GetVer:
'HSEROUT NoBreak,(FrameID,Dest,Srce,Command,0,1,0,3,0,1,SeqNo,Padding,MSBChkSum,LSBChkSum)
SEROUT 0,N9600_8,(FrameID,Dest,Srce,Command,0,1,0,3,0,1,SeqNo,Padding,MSBChkSum,LSBChkSum)
RETURN
Acknowledge:
ReceiveAck:
RETURN
SendAck:
RETURN
CheckVerReceived:
RETURN
ASCII2PDU:
Initialise_Converter:
txtptr1 = 0
txtptr2 = txtptr1 + 1
bduptr = txtlen + 5
Convert_ASCII_To_PDU:
multi = 128
divisor = 2
counter1 = 0
DO UNTIL counter1 = 7
GET txtptr1,byte1
GET txtptr2,byte2
IF byte2 = 255 THEN GOTO Last_BDU_Byte
result = byte2 // divisor
result = result * multi
byte1 = byte1 OR result
PUT bduptr,byte1
byte2 = byte2 / divisor
PUT txtptr2,byte2
INC txtptr1
INC txtptr2
INC bduptr
multi = multi / 2
IF multi = 1 THEN LET multi = 128:ENDIF
divisor = divisor * 2
IF divisor = 256 THEN LET divisor = 2:ENDIF
INC counter1
LOOP
INC txtptr1
INC txtptr2
INC txtctr
GET txtptr1,byte2
IF byte2 = 255 THEN
GOTO Last_BDU_Byte
ELSE
GOTO Convert_ASCII_To_PDU
ENDIF
Last_BDU_Byte:
PUT bduptr, byte1
RETURN
SendSMSEven:
'HSEROUT NoBreak,($1E,$00,$0C,$02,0,TxtLenPDU,0,1,0,1,2,0,7,$91,$36,$9A,$2C,$16,$A3,
$D1,$6E,$38,$1B,$0C,$15,0,0,0,TxtLenUnp,$0A,$91,$36,$9A,$2C,$16,$A3,$C9,$70,$34,$1B,$0C,
$A&,0,0,0,0,0,0,b10,b11,b12,b13,b145,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26,b27,
b28,b29,b30,b31,b32,b33,b34,b35,b36,b37,0,PktSeqNum,MSBChkSum,LSBChkSum)
SEROUT 0,N9600_8,($1E,$00,$0C,$02,0,TxtLenPDU,0,1,0,1,2,0,7,$91,$36,$9A,$2C,$16,$A3,
$D1,$6E,$38,$1B,$0C,$15,0,0,0,TxtLenUnp,$0A,$91,$36,$9A,$2C,$16,$A3,$C9,$70,$34,$1B,$0C,
$A7,0,0,0,0,0,0,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26,b27,
b28,b29,b30,b31,b32,b33,b34,b35,b36,b37,0,PktSeqNum,MSBChkSum,LSBChkSum)
RETURN
SendSMSOdd:
'HSEROUT NoBreak,($1E,$00,$0C,$02,0,TxtLenPDU,0,1,0,1,2,0,7,$91,$36,$9A,$2C,$16,$A3,
$D1,$6E,$38,$1B,$0C,$15,0,0,0,TxtLenUnp,$0A,$91,$36,$9A,$2C,$16,$A3,$C9,$70,$34,$1B,$0C,
$A&,0,0,0,0,0,0,b10,b11,b12,b13,b145,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26,b27,
b28,b29,b30,b31,b32,b33,b34,b35,b36,b37,0,PktSeqNum,Padding,MSBChkSum,LSBChkSum)
SEROUT 0,N9600_8,($1E,$00,$0C,$02,0,TxtLenPDU,0,1,0,1,2,0,7,$91,$36,$9A,$2C,$16,$A3,
$D1,$6E,$38,$1B,$0C,$15,0,0,0,TxtLenUnp,$0A,$91,$36,$9A,$2C,$16,$A3,$C9,$70,$34,$1B,$0C,
$A7,0,0,0,0,0,0,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26,b27,
b28,b29,b30,b31,b32,b33,b34,b35,b36,b37,0,PktSeqNum,Padding,MSBChkSum,LSBChkSum)
RETURN
ReceiveSMS:
'HSERIN (FrameID,Dest,Srce,$02
RETURN
CheckSum:
MSBChkSum = b24 XOR b26 XOR b28 XOR b30 XOR b32 XOR
b34 XOR b36 XOR b38 XOR b40 XOR b42 XOR b44 XOR b46 XOR
b48 XOR b50 XOR b52 XOR b54
LSBChkSum = b25 XOR b27 XOR b29 XOR b31 XOR b33 XOR
b35 XOR b37 XOR b39 XOR b41 XOR b43 XOR b45 XOR b47 XOR
b49 XOR b51 XOR b53 XOR b55
RETURN
#rem
'Notes
'FrameID
$1E - Send SMS
$7F - Acknowledge Frame
$D1 - Get Version
'Dest
$00 - Phone
$0C - PC/MCU
'Srce
$00 - Phone
$0C - PC/MCU
'Command
$02 - SMS Function
#endrem