Integrating the ublox LISA C200 modem

Fork of SprintUSBModemHTTPClientTest by Donatien Garnier

Committer:
sam_grove
Date:
Thu Sep 26 00:44:20 2013 -0500
Revision:
5:3f93dd1d4cb3
Exported program and replaced contents of the repo with the source
to build and debug using keil mdk. Libs NOT upto date are lwip, lwip-sys
and socket. these have newer versions under mbed_official but were starting
from a know working point

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sam_grove 5:3f93dd1d4cb3 1 /* mbed Microcontroller Library
sam_grove 5:3f93dd1d4cb3 2 * Copyright (c) 2006-2013 ARM Limited
sam_grove 5:3f93dd1d4cb3 3 *
sam_grove 5:3f93dd1d4cb3 4 * Licensed under the Apache License, Version 2.0 (the "License");
sam_grove 5:3f93dd1d4cb3 5 * you may not use this file except in compliance with the License.
sam_grove 5:3f93dd1d4cb3 6 * You may obtain a copy of the License at
sam_grove 5:3f93dd1d4cb3 7 *
sam_grove 5:3f93dd1d4cb3 8 * http://www.apache.org/licenses/LICENSE-2.0
sam_grove 5:3f93dd1d4cb3 9 *
sam_grove 5:3f93dd1d4cb3 10 * Unless required by applicable law or agreed to in writing, software
sam_grove 5:3f93dd1d4cb3 11 * distributed under the License is distributed on an "AS IS" BASIS,
sam_grove 5:3f93dd1d4cb3 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
sam_grove 5:3f93dd1d4cb3 13 * See the License for the specific language governing permissions and
sam_grove 5:3f93dd1d4cb3 14 * limitations under the License.
sam_grove 5:3f93dd1d4cb3 15 */
sam_grove 5:3f93dd1d4cb3 16 #ifndef MBED_CAN_H
sam_grove 5:3f93dd1d4cb3 17 #define MBED_CAN_H
sam_grove 5:3f93dd1d4cb3 18
sam_grove 5:3f93dd1d4cb3 19 #include "platform.h"
sam_grove 5:3f93dd1d4cb3 20
sam_grove 5:3f93dd1d4cb3 21 #if DEVICE_CAN
sam_grove 5:3f93dd1d4cb3 22
sam_grove 5:3f93dd1d4cb3 23 #include "can_api.h"
sam_grove 5:3f93dd1d4cb3 24 #include "can_helper.h"
sam_grove 5:3f93dd1d4cb3 25 #include "FunctionPointer.h"
sam_grove 5:3f93dd1d4cb3 26
sam_grove 5:3f93dd1d4cb3 27 namespace mbed {
sam_grove 5:3f93dd1d4cb3 28
sam_grove 5:3f93dd1d4cb3 29 /** CANMessage class
sam_grove 5:3f93dd1d4cb3 30 */
sam_grove 5:3f93dd1d4cb3 31 class CANMessage : public CAN_Message {
sam_grove 5:3f93dd1d4cb3 32
sam_grove 5:3f93dd1d4cb3 33 public:
sam_grove 5:3f93dd1d4cb3 34 /** Creates empty CAN message.
sam_grove 5:3f93dd1d4cb3 35 */
sam_grove 5:3f93dd1d4cb3 36 CANMessage() {
sam_grove 5:3f93dd1d4cb3 37 len = 8;
sam_grove 5:3f93dd1d4cb3 38 type = CANData;
sam_grove 5:3f93dd1d4cb3 39 format = CANStandard;
sam_grove 5:3f93dd1d4cb3 40 id = 0;
sam_grove 5:3f93dd1d4cb3 41 memset(data, 0, 8);
sam_grove 5:3f93dd1d4cb3 42 }
sam_grove 5:3f93dd1d4cb3 43
sam_grove 5:3f93dd1d4cb3 44 /** Creates CAN message with specific content.
sam_grove 5:3f93dd1d4cb3 45 */
sam_grove 5:3f93dd1d4cb3 46 CANMessage(int _id, const char *_data, char _len = 8, CANType _type = CANData, CANFormat _format = CANStandard) {
sam_grove 5:3f93dd1d4cb3 47 len = _len & 0xF;
sam_grove 5:3f93dd1d4cb3 48 type = _type;
sam_grove 5:3f93dd1d4cb3 49 format = _format;
sam_grove 5:3f93dd1d4cb3 50 id = _id;
sam_grove 5:3f93dd1d4cb3 51 memcpy(data, _data, _len);
sam_grove 5:3f93dd1d4cb3 52 }
sam_grove 5:3f93dd1d4cb3 53
sam_grove 5:3f93dd1d4cb3 54 /** Creates CAN remote message.
sam_grove 5:3f93dd1d4cb3 55 */
sam_grove 5:3f93dd1d4cb3 56 CANMessage(int _id, CANFormat _format = CANStandard) {
sam_grove 5:3f93dd1d4cb3 57 len = 0;
sam_grove 5:3f93dd1d4cb3 58 type = CANRemote;
sam_grove 5:3f93dd1d4cb3 59 format = _format;
sam_grove 5:3f93dd1d4cb3 60 id = _id;
sam_grove 5:3f93dd1d4cb3 61 memset(data, 0, 8);
sam_grove 5:3f93dd1d4cb3 62 }
sam_grove 5:3f93dd1d4cb3 63 };
sam_grove 5:3f93dd1d4cb3 64
sam_grove 5:3f93dd1d4cb3 65 /** A can bus client, used for communicating with can devices
sam_grove 5:3f93dd1d4cb3 66 */
sam_grove 5:3f93dd1d4cb3 67 class CAN {
sam_grove 5:3f93dd1d4cb3 68
sam_grove 5:3f93dd1d4cb3 69 public:
sam_grove 5:3f93dd1d4cb3 70 /** Creates an CAN interface connected to specific pins.
sam_grove 5:3f93dd1d4cb3 71 *
sam_grove 5:3f93dd1d4cb3 72 * @param rd read from transmitter
sam_grove 5:3f93dd1d4cb3 73 * @param td transmit to transmitter
sam_grove 5:3f93dd1d4cb3 74 *
sam_grove 5:3f93dd1d4cb3 75 * Example:
sam_grove 5:3f93dd1d4cb3 76 * @code
sam_grove 5:3f93dd1d4cb3 77 * #include "mbed.h"
sam_grove 5:3f93dd1d4cb3 78 *
sam_grove 5:3f93dd1d4cb3 79 * Ticker ticker;
sam_grove 5:3f93dd1d4cb3 80 * DigitalOut led1(LED1);
sam_grove 5:3f93dd1d4cb3 81 * DigitalOut led2(LED2);
sam_grove 5:3f93dd1d4cb3 82 * CAN can1(p9, p10);
sam_grove 5:3f93dd1d4cb3 83 * CAN can2(p30, p29);
sam_grove 5:3f93dd1d4cb3 84 *
sam_grove 5:3f93dd1d4cb3 85 * char counter = 0;
sam_grove 5:3f93dd1d4cb3 86 *
sam_grove 5:3f93dd1d4cb3 87 * void send() {
sam_grove 5:3f93dd1d4cb3 88 * if(can1.write(CANMessage(1337, &counter, 1))) {
sam_grove 5:3f93dd1d4cb3 89 * printf("Message sent: %d\n", counter);
sam_grove 5:3f93dd1d4cb3 90 * counter++;
sam_grove 5:3f93dd1d4cb3 91 * }
sam_grove 5:3f93dd1d4cb3 92 * led1 = !led1;
sam_grove 5:3f93dd1d4cb3 93 * }
sam_grove 5:3f93dd1d4cb3 94 *
sam_grove 5:3f93dd1d4cb3 95 * int main() {
sam_grove 5:3f93dd1d4cb3 96 * ticker.attach(&send, 1);
sam_grove 5:3f93dd1d4cb3 97 * CANMessage msg;
sam_grove 5:3f93dd1d4cb3 98 * while(1) {
sam_grove 5:3f93dd1d4cb3 99 * if(can2.read(msg)) {
sam_grove 5:3f93dd1d4cb3 100 * printf("Message received: %d\n\n", msg.data[0]);
sam_grove 5:3f93dd1d4cb3 101 * led2 = !led2;
sam_grove 5:3f93dd1d4cb3 102 * }
sam_grove 5:3f93dd1d4cb3 103 * wait(0.2);
sam_grove 5:3f93dd1d4cb3 104 * }
sam_grove 5:3f93dd1d4cb3 105 * }
sam_grove 5:3f93dd1d4cb3 106 * @endcode
sam_grove 5:3f93dd1d4cb3 107 */
sam_grove 5:3f93dd1d4cb3 108 CAN(PinName rd, PinName td);
sam_grove 5:3f93dd1d4cb3 109 virtual ~CAN();
sam_grove 5:3f93dd1d4cb3 110
sam_grove 5:3f93dd1d4cb3 111 /** Set the frequency of the CAN interface
sam_grove 5:3f93dd1d4cb3 112 *
sam_grove 5:3f93dd1d4cb3 113 * @param hz The bus frequency in hertz
sam_grove 5:3f93dd1d4cb3 114 *
sam_grove 5:3f93dd1d4cb3 115 * @returns
sam_grove 5:3f93dd1d4cb3 116 * 1 if successful,
sam_grove 5:3f93dd1d4cb3 117 * 0 otherwise
sam_grove 5:3f93dd1d4cb3 118 */
sam_grove 5:3f93dd1d4cb3 119 int frequency(int hz);
sam_grove 5:3f93dd1d4cb3 120
sam_grove 5:3f93dd1d4cb3 121 /** Write a CANMessage to the bus.
sam_grove 5:3f93dd1d4cb3 122 *
sam_grove 5:3f93dd1d4cb3 123 * @param msg The CANMessage to write.
sam_grove 5:3f93dd1d4cb3 124 *
sam_grove 5:3f93dd1d4cb3 125 * @returns
sam_grove 5:3f93dd1d4cb3 126 * 0 if write failed,
sam_grove 5:3f93dd1d4cb3 127 * 1 if write was successful
sam_grove 5:3f93dd1d4cb3 128 */
sam_grove 5:3f93dd1d4cb3 129 int write(CANMessage msg);
sam_grove 5:3f93dd1d4cb3 130
sam_grove 5:3f93dd1d4cb3 131 /** Read a CANMessage from the bus.
sam_grove 5:3f93dd1d4cb3 132 *
sam_grove 5:3f93dd1d4cb3 133 * @param msg A CANMessage to read to.
sam_grove 5:3f93dd1d4cb3 134 *
sam_grove 5:3f93dd1d4cb3 135 * @returns
sam_grove 5:3f93dd1d4cb3 136 * 0 if no message arrived,
sam_grove 5:3f93dd1d4cb3 137 * 1 if message arrived
sam_grove 5:3f93dd1d4cb3 138 */
sam_grove 5:3f93dd1d4cb3 139 int read(CANMessage &msg);
sam_grove 5:3f93dd1d4cb3 140
sam_grove 5:3f93dd1d4cb3 141 /** Reset CAN interface.
sam_grove 5:3f93dd1d4cb3 142 *
sam_grove 5:3f93dd1d4cb3 143 * To use after error overflow.
sam_grove 5:3f93dd1d4cb3 144 */
sam_grove 5:3f93dd1d4cb3 145 void reset();
sam_grove 5:3f93dd1d4cb3 146
sam_grove 5:3f93dd1d4cb3 147 /** Puts or removes the CAN interface into silent monitoring mode
sam_grove 5:3f93dd1d4cb3 148 *
sam_grove 5:3f93dd1d4cb3 149 * @param silent boolean indicating whether to go into silent mode or not
sam_grove 5:3f93dd1d4cb3 150 */
sam_grove 5:3f93dd1d4cb3 151 void monitor(bool silent);
sam_grove 5:3f93dd1d4cb3 152
sam_grove 5:3f93dd1d4cb3 153 enum Mode {
sam_grove 5:3f93dd1d4cb3 154 Reset = 0,
sam_grove 5:3f93dd1d4cb3 155 Normal,
sam_grove 5:3f93dd1d4cb3 156 Silent,
sam_grove 5:3f93dd1d4cb3 157 LocalTest,
sam_grove 5:3f93dd1d4cb3 158 GlobalTest,
sam_grove 5:3f93dd1d4cb3 159 SilentTest
sam_grove 5:3f93dd1d4cb3 160 };
sam_grove 5:3f93dd1d4cb3 161
sam_grove 5:3f93dd1d4cb3 162 /** Change CAN operation to the specified mode
sam_grove 5:3f93dd1d4cb3 163 *
sam_grove 5:3f93dd1d4cb3 164 * @param mode The new operation mode (CAN::Normal, CAN::Silent, CAN::LocalTest, CAN::GlobalTest, CAN::SilentTest)
sam_grove 5:3f93dd1d4cb3 165 *
sam_grove 5:3f93dd1d4cb3 166 * @returns
sam_grove 5:3f93dd1d4cb3 167 * 0 if mode change failed or unsupported,
sam_grove 5:3f93dd1d4cb3 168 * 1 if mode change was successful
sam_grove 5:3f93dd1d4cb3 169 */
sam_grove 5:3f93dd1d4cb3 170 int mode(Mode mode);
sam_grove 5:3f93dd1d4cb3 171
sam_grove 5:3f93dd1d4cb3 172 /** Returns number of read errors to detect read overflow errors.
sam_grove 5:3f93dd1d4cb3 173 */
sam_grove 5:3f93dd1d4cb3 174 unsigned char rderror();
sam_grove 5:3f93dd1d4cb3 175
sam_grove 5:3f93dd1d4cb3 176 /** Returns number of write errors to detect write overflow errors.
sam_grove 5:3f93dd1d4cb3 177 */
sam_grove 5:3f93dd1d4cb3 178 unsigned char tderror();
sam_grove 5:3f93dd1d4cb3 179
sam_grove 5:3f93dd1d4cb3 180 enum IrqType {
sam_grove 5:3f93dd1d4cb3 181 RxIrq = 0,
sam_grove 5:3f93dd1d4cb3 182 TxIrq,
sam_grove 5:3f93dd1d4cb3 183 EwIrq,
sam_grove 5:3f93dd1d4cb3 184 DoIrq,
sam_grove 5:3f93dd1d4cb3 185 WuIrq,
sam_grove 5:3f93dd1d4cb3 186 EpIrq,
sam_grove 5:3f93dd1d4cb3 187 AlIrq,
sam_grove 5:3f93dd1d4cb3 188 BeIrq,
sam_grove 5:3f93dd1d4cb3 189 IdIrq
sam_grove 5:3f93dd1d4cb3 190 };
sam_grove 5:3f93dd1d4cb3 191
sam_grove 5:3f93dd1d4cb3 192 /** Attach a function to call whenever a CAN frame received interrupt is
sam_grove 5:3f93dd1d4cb3 193 * generated.
sam_grove 5:3f93dd1d4cb3 194 *
sam_grove 5:3f93dd1d4cb3 195 * @param fptr A pointer to a void function, or 0 to set as none
sam_grove 5:3f93dd1d4cb3 196 * @param event Which CAN interrupt to attach the member function to (CAN::RxIrq for message received, CAN::TxIrq for transmitted or aborted, CAN::EwIrq for error warning, CAN::DoIrq for data overrun, CAN::WuIrq for wake-up, CAN::EpIrq for error passive, CAN::AlIrq for arbitration lost, CAN::BeIrq for bus error)
sam_grove 5:3f93dd1d4cb3 197 */
sam_grove 5:3f93dd1d4cb3 198 void attach(void (*fptr)(void), IrqType type=RxIrq);
sam_grove 5:3f93dd1d4cb3 199
sam_grove 5:3f93dd1d4cb3 200 /** Attach a member function to call whenever a CAN frame received interrupt
sam_grove 5:3f93dd1d4cb3 201 * is generated.
sam_grove 5:3f93dd1d4cb3 202 *
sam_grove 5:3f93dd1d4cb3 203 * @param tptr pointer to the object to call the member function on
sam_grove 5:3f93dd1d4cb3 204 * @param mptr pointer to the member function to be called
sam_grove 5:3f93dd1d4cb3 205 * @param event Which CAN interrupt to attach the member function to (CAN::RxIrq for message received, TxIrq for transmitted or aborted, EwIrq for error warning, DoIrq for data overrun, WuIrq for wake-up, EpIrq for error passive, AlIrq for arbitration lost, BeIrq for bus error)
sam_grove 5:3f93dd1d4cb3 206 */
sam_grove 5:3f93dd1d4cb3 207 template<typename T>
sam_grove 5:3f93dd1d4cb3 208 void attach(T* tptr, void (T::*mptr)(void), IrqType type=RxIrq) {
sam_grove 5:3f93dd1d4cb3 209 if((mptr != NULL) && (tptr != NULL)) {
sam_grove 5:3f93dd1d4cb3 210 _irq[type].attach(tptr, mptr);
sam_grove 5:3f93dd1d4cb3 211 can_irq_set(&_can, (CanIrqType)type, 1);
sam_grove 5:3f93dd1d4cb3 212 }
sam_grove 5:3f93dd1d4cb3 213 else {
sam_grove 5:3f93dd1d4cb3 214 can_irq_set(&_can, (CanIrqType)type, 0);
sam_grove 5:3f93dd1d4cb3 215 }
sam_grove 5:3f93dd1d4cb3 216 }
sam_grove 5:3f93dd1d4cb3 217
sam_grove 5:3f93dd1d4cb3 218 static void _irq_handler(uint32_t id, CanIrqType type);
sam_grove 5:3f93dd1d4cb3 219
sam_grove 5:3f93dd1d4cb3 220 protected:
sam_grove 5:3f93dd1d4cb3 221 can_t _can;
sam_grove 5:3f93dd1d4cb3 222 FunctionPointer _irq[9];
sam_grove 5:3f93dd1d4cb3 223 };
sam_grove 5:3f93dd1d4cb3 224
sam_grove 5:3f93dd1d4cb3 225 } // namespace mbed
sam_grove 5:3f93dd1d4cb3 226
sam_grove 5:3f93dd1d4cb3 227 #endif
sam_grove 5:3f93dd1d4cb3 228
sam_grove 5:3f93dd1d4cb3 229 #endif // MBED_CAN_H