mirror of
				https://github.com/KevinMidboe/TinyGSM.git
				synced 2025-10-29 18:00:18 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|  * @file       TinyGsmCommon.h
 | |
|  * @author     Volodymyr Shymanskyy
 | |
|  * @license    LGPL-3.0
 | |
|  * @copyright  Copyright (c) 2016 Volodymyr Shymanskyy
 | |
|  * @date       Nov 2016
 | |
|  */
 | |
| 
 | |
| #ifndef TinyGsmCommon_h
 | |
| #define TinyGsmCommon_h
 | |
| 
 | |
| #if defined(SPARK) || defined(PARTICLE)
 | |
|   #include "Particle.h"
 | |
| #elif defined(ARDUINO)
 | |
|   #if ARDUINO >= 100
 | |
|     #include "Arduino.h"
 | |
|   #else
 | |
|     #include "WProgram.h"
 | |
|   #endif
 | |
| #endif
 | |
| 
 | |
| #include <Client.h>
 | |
| #include <TinyGsmFifo.h>
 | |
| 
 | |
| #ifndef TINY_GSM_YIELD
 | |
|   #define TINY_GSM_YIELD() { delay(0); }
 | |
| #endif
 | |
| 
 | |
| #define TINY_GSM_ATTR_NOT_AVAILABLE __attribute__((error("Not available on this modem type")))
 | |
| #define TINY_GSM_ATTR_NOT_IMPLEMENTED __attribute__((error("Not implemented")))
 | |
| 
 | |
| #if defined(__AVR__)
 | |
|   #define TINY_GSM_PROGMEM PROGMEM
 | |
|   typedef const __FlashStringHelper* GsmConstStr;
 | |
|   #define GFP(x) (reinterpret_cast<GsmConstStr>(x))
 | |
|   #define GF(x)  F(x)
 | |
| #else
 | |
|   #define TINY_GSM_PROGMEM
 | |
|   typedef const char* GsmConstStr;
 | |
|   #define GFP(x) x
 | |
|   #define GF(x)  x
 | |
| #endif
 | |
| 
 | |
| #ifdef TINY_GSM_DEBUG
 | |
| namespace {
 | |
|   template<typename T>
 | |
|   static void DBG(T last) {
 | |
|     TINY_GSM_DEBUG.println(last);
 | |
|   }
 | |
| 
 | |
|   template<typename T, typename... Args>
 | |
|   static void DBG(T head, Args... tail) {
 | |
|     TINY_GSM_DEBUG.print(head);
 | |
|     TINY_GSM_DEBUG.print(' ');
 | |
|     DBG(tail...);
 | |
|   }
 | |
| }
 | |
| #else
 | |
|   #define DBG(...)
 | |
| #endif
 | |
| 
 | |
| template<class T>
 | |
| const T& TinyGsmMin(const T& a, const T& b)
 | |
| {
 | |
|     return (b < a) ? b : a;
 | |
| }
 | |
| 
 | |
| template<class T>
 | |
| const T& TinyGsmMax(const T& a, const T& b)
 | |
| {
 | |
|     return (b < a) ? a : b;
 | |
| }
 | |
| 
 | |
| template<class T>
 | |
| uint32_t TinyGsmAutoBaud(T& SerialAT)
 | |
| {
 | |
|   static uint32_t rates[] = { 115200, 57600, 38400, 19200, 9600, 74400, 74880, 230400, 460800, 2400, 4800, 14400, 28800 };
 | |
| 
 | |
|   for (unsigned i = 0; i < sizeof(rates)/sizeof(rates[0]); i++) {
 | |
|     uint32_t rate = rates[i];
 | |
|     DBG("Trying baud rate", rate, "...");
 | |
|     SerialAT.begin(rate);
 | |
|     delay(10);
 | |
|     for (int i=0; i<3; i++) {
 | |
|       SerialAT.print("AT\r\n");
 | |
|       String input = SerialAT.readString();
 | |
|       if (input.indexOf("OK") >= 0) {
 | |
|         DBG("Modem responded at rate", rate);
 | |
|         return rate;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   return 0;
 | |
| }
 | |
| 
 | |
| #endif
 |