I worked on a project last year where I needed to send a GPS string using PDU mode. I received the GPS string, converted it to PDU mode, then instructed my phone via blue tooth to send the GPS coordinates to my email account. Anyway, when you want to do something like this, you can not hard code the data you want to send obviously because it is always changing. Here is a snippet of the code, pay attention to the octets_to_septets subroutine. Basically PDU mode converts 1 byte into 7 bits for compression, then moves the next byte left 1 bit, etc. The line above the call to the routine, which I have modified so i don't get a bunch of emails from people trying this code, I have hard coded the email address and other configuration bits. Maybe this can be of use to someone.

Code:
Loop1:
    HSerOut ["AT",13,10]
    HSerIn 3000,Loop1,[Wait("OK")]
    Print $FE,$C0,"Connected"
    DelayMS 750
    
Loop2:
    HSerOut ["AT+CMGF=?",13,10]
    HSerIn 3000,Loop2,[Wait("("),Dec Mode]
    If Mode = 0 Then Print $FE,1,"PDU Mode"
    If Mode = 1 Then Print $FE,1,"Text Mode"
    DelayMS  750
    
Loop3:
    HSerOut ["AT+CMGF=",Dec Mode,13,10]
    HSerIn 3000,Loop3,[Wait("OK")]
    If Mode = 0 Then Print $FE,$C0,"PDU Mode Set"
    If Mode = 1 Then Print $FE,$C0,"Text Mode Set"
    DelayMS 750
    Print $FE,1,"Waiting For GPS..."
    
Loop4:
    LoopCount = 0
    DelayMS 500
    SerIn RX,188,[Wait("$GPRMC,"),Str GPSData\65]
    If GPSData[10] = "A" Then   'Check for valid position
        Print $FE,1,"Sending Message..."
        HSerOut ["AT+CMGS=94",13]
        HSerIn 10000,Loop4,[Wait(">")]
        HSerOut ["07913121139418F00100039121F............."]
        GoSub octets_to_septets
        DelayMS 1000
        HSerOut [26,13,10]
        HSerIn 10000,Loop4,[Wait("OK")]
        Print $FE,$C0,"Message Sent"
    Else
        Print $FE,$10,GPSData[10]
        DelayMS 5000
        GoTo Loop4
    EndIf
    DelayMS 1000
    
Loop5:
    SerIn RX,188,[Wait("$GPRMC,"),Str TIME\6,skip 4,FIX,skip 1,Str LAT\9,skip 1,NS,skip 1,Str LON\10,skip 1,EW,skip 1,Str SPD\5,skip 1,Str HEAD\5,skip 1,Str DATE\6]
    Print $FE,1
    Print $FE,2,"LAT:",Str LAT\9," ",NS
    Print $FE,$C0,"LON:",Str LON\10," ",EW
    'spd = spd * 1.151
    Print $FE,$94,"SPD:",Str SPD\5," knots"
    PrintDate = Mid$(DATE,3,2) + "/" + Mid$(DATE,1,2) + "/" + Mid$(DATE,5,2)
    PrintTime = Mid$(TIME,1,2) + ":" + Mid$(TIME,3,2) + ":" + Mid$(TIME,5,2)
    Print $FE,$D4,Str PrintDate," ",PrintTime
    If FIX = "A" Then
        Print "   "
    Else
        Print "  -"
    EndIf
    DelayMS 350
    If FIX = "A" Then Print $FE,$10,"*"
    DelayMS 150
    Inc LoopCount
    If LoopCount >= 120 Then
        GoTo Loop4
    EndIf
    GoTo Loop5
    
octets_to_septets:
    For i = 0 To Len(GPSData)
        CurrChar = GPSData[i]
        If i <> 0 And i // 8 <> 0 Then
            OctFir = CurrChar << (8 - i // 8)
            OctCurr = OctFir + OctSec
            HSerOut [HEX2 OctCurr]
            OctSec = CurrChar >> (i // 8) 
        Else
            OctSec = CurrChar >> (i // 8)
        EndIf
    Next i
    Return
Stop