#define __CUSTOMER_CODE__
#ifdef __CUSTOMER_CODE__
#include "custom_feature_def.h"
#include "ril.h"
#include "ril_util.h"
#include "ril_telephony.h"
#include "ql_stdlib.h"
#include "ql_error.h"
#include "ql_uart.h"
#include "ql_system.h"
#include "ril_network.h"
#include "ril_http.h"
#include "ql_time.h"
#include "ql_fs.h"
#include "ril_sms.h"
///for GPRS////////////////////////////////////////////////////////////////
char HTTP_URL_ADDR[100] = "http://mahdi2001h.ir/utils/location.php\0";
static u32 m_rcvDataLen = 0;
u8 SENDING_TO_SERVER = 0;
u8 postMsg[300] = "";
u8 arrHttpRcvBuf[10 * 1024];
#define APN_NAME "mcinet\0"
#define APN_USERID ""
#define APN_PASSWD ""
///////////////////////////////////////////////////////////////////////////
///for use SD ////////////////////////////////
u8 LOG_TO_SD = 1;
#define DATA_LOG_DIR "SD:\\location_log"
//////////////////////////////////////////////
///for other use////////////////////////
char PhNum[] = "+9891XXXXXXXX\0";
u8 RMC_BUFFER[100];
u8 LAST_FIX[100];
u8 stable = 0;
u8 RIL_STATUS = 0;
Enum_PinName LED_1 = PINNAME_RTS;
Enum_PinName LED_2 = PINNAME_CTS;
Enum_PinName LED_3 = PINNAME_DTR;
////////////////////////////////////////
///for DEBUG///////////////////////////////////////////////////////////////////////////////////////////////////////////
#define SERIAL_RX_BUFFER_LEN 2048
#define DEBUG_PORT UART_PORT1
#define DBG_BUF_LEN 512
static char DBG_BUFFER[DBG_BUF_LEN];
#define APP_DEBUG(FORMAT, ...) \
{ \
Ql_memset(DBG_BUFFER, 0, DBG_BUF_LEN); \
Ql_sprintf(DBG_BUFFER, FORMAT, ##__VA_ARGS__); \
Ql_UART_Write((Enum_SerialPort)(DEBUG_PORT), (u8 *)(DBG_BUFFER), Ql_strlen((const char *)(DBG_BUFFER))); \
}
char m_RxBuf_Uart[SERIAL_RX_BUFFER_LEN];
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void CallBack_UART_Hdlr(Enum_SerialPort port, Enum_UARTEventType msg, bool level, void *customizedPara);
static void HTTP_Program();
static void Hdlr_RecvNewSMS(u32 nIndex, bool bAutoReply);
void SMS_TextMode_Send(char strPhNum[], char strTextMsg[]);
void proc_main_task(s32 taskId)
{
s32 ret;
ST_MSG msg;
Ql_GPIO_Init(LED_1, PINDIRECTION_OUT, PINLEVEL_LOW, PINPULLSEL_PULLUP);
Ql_GPIO_Init(LED_2, PINDIRECTION_OUT, PINLEVEL_LOW, PINPULLSEL_PULLUP);
Ql_GPIO_Init(LED_3, PINDIRECTION_OUT, PINLEVEL_LOW, PINPULLSEL_PULLUP);
while (TRUE)
{
Ql_OS_GetMessage(&msg);
switch (msg.message)
{
case MSG_ID_RIL_READY:
APP_DEBUG("LOAD LEVEL 1 (RIL READY)\r\n");
Ql_RIL_Initialize();
RIL_STATUS = 1;
GPSPower(1);
ret = Ql_RIL_SendATCmd("AT+QNITZ=1", Ql_strlen("AT+QNITZ=1"), NULL, NULL, 0);
break;
case MSG_ID_URC_INDICATION:
APP_DEBUG("Received URC: type: %d\r\n", msg.param1);
switch (msg.param1)
{
case URC_GSM_NW_STATE_IND:
APP_DEBUG("GSM Network Status:%d\r\n", msg.param2);
break;
case URC_GPRS_NW_STATE_IND:
APP_DEBUG("GPRS Network Status:%d\r\n", msg.param2);
if (NW_STAT_REGISTERED == msg.param2 || NW_STAT_REGISTERED_ROAMING == msg.param2)
{
APP_DEBUG("LOAD LEVEL 2 (NETWORK REGISTERED)\r\n");
stable = 1;
}
break;
case URC_NEW_SMS_IND:
{
Hdlr_RecvNewSMS((msg.param2), TRUE);
break;
}
}
break;
}
}
}
//Read serial port
void proc_subtask1(s32 TaskId)
{
s32 ret;
ST_MSG msg;
ST_UARTDCB dcb;
Enum_SerialPort mySerialPort = UART_PORT1;
dcb.baudrate = 115200;
dcb.dataBits = DB_8BIT;
dcb.stopBits = SB_ONE;
dcb.parity = PB_NONE;
dcb.flowCtrl = FC_NONE;
Ql_UART_Register(mySerialPort, CallBack_UART_Hdlr, NULL);
Ql_UART_OpenEx(mySerialPort, &dcb);
Ql_UART_ClrRxBuffer(mySerialPort);
APP_DEBUG("START PROGRAM (SISOOG.COM)\r\n");
while (TRUE)
{
Ql_OS_GetMessage(&msg);
switch (msg.message)
{
case MSG_ID_USER_START:
break;
default:
break;
}
}
}
//Update location data
proc_subtask2(s32 TaskId)
{
ST_Time SysTime;
static s32 handle = -1;
char filePath[50] = {0};
u32 writenLen = 0;
s32 ret;
while (RIL_STATUS != 1)
Ql_Sleep(1000);
while (TRUE)
{
Ql_Sleep(1000);
Ql_GetLocalTime(&SysTime);
APP_DEBUG("\r\nCurrent Time :\r\n%02d/%02d/%02d %02d:%02d:%02d\r\n", SysTime.year, SysTime.month, SysTime.day, SysTime.hour, SysTime.minute, SysTime.second);
ret = RIL_GPS_Read("RMC", RMC_BUFFER);
if (RIL_AT_SUCCESS != ret)
{
APP_DEBUG("Read %s information failed.\r\n", "RMC");
}
else
{
if (RMC_BUFFER[30] == 'A')
{
Ql_GPIO_SetLevel(LED_1, PINLEVEL_HIGH);
Ql_Sleep(50);
Ql_GPIO_SetLevel(LED_1, PINLEVEL_LOW);
Ql_Sleep(50);
Ql_GPIO_SetLevel(LED_1, PINLEVEL_HIGH);
Ql_Sleep(50);
Ql_GPIO_SetLevel(LED_1, PINLEVEL_LOW);
Ql_strcpy(LAST_FIX, RMC_BUFFER);
}
else if (RMC_BUFFER[30] == 'V')
{
Ql_GPIO_SetLevel(LED_1, PINLEVEL_HIGH);
Ql_Sleep(50);
Ql_GPIO_SetLevel(LED_1, PINLEVEL_LOW);
}
if (LOG_TO_SD == 1 && SysTime.year > 2020 && (SysTime.second % 2 == 0))
{
Ql_GPIO_SetLevel(LED_2, PINLEVEL_HIGH);
ret = Ql_FS_CheckDir(DATA_LOG_DIR);
if (ret == QL_RET_ERR_FILENOTFOUND)
{
ret = Ql_FS_CreateDir(DATA_LOG_DIR);
if (ret == QL_RET_OK)
{
APP_DEBUG("Dir Created: %s !\r\n", DATA_LOG_DIR);
}
}
else if (ret == QL_RET_OK)
{
Ql_sprintf(filePath, "%s\\%d_%d.txt\0", DATA_LOG_DIR, SysTime.month, SysTime.day);
handle = Ql_FS_Open(filePath, QL_FS_CREATE);
if (handle > 0)
{
Ql_FS_Seek(handle, 0, QL_FS_FILE_END);
Ql_FS_Write(handle, RMC_BUFFER, Ql_strlen(RMC_BUFFER), &writenLen);
Ql_FS_Flush(handle);
Ql_FS_Close(handle);
}
else
{
APP_DEBUG("file does not exist \r\n");
}
}
else
{
APP_DEBUG("ERROR READ SD \r\n", ret);
}
Ql_GPIO_SetLevel(LED_2, PINLEVEL_LOW);
}
}
}
}
// Send location data to server
proc_subtask3(s32 TaskId)
{
while (1)
{
Ql_Sleep(5000);
if (stable == 1)
{
Ql_sprintf(postMsg, "location=%s\0", RMC_BUFFER);
HTTP_Program();
}
}
}
void SMS_TextMode_Send(char strPhNum[], char strTextMsg[])
{
u32 nMsgRef;
ST_RIL_SMS_SendExt sExt;
Ql_memset(&sExt, 0x00, sizeof(sExt));
APP_DEBUG("< Send Normal Text SMS begin... >\r\n");
RIL_SMS_SendSMS_Text(strPhNum, Ql_strlen(strPhNum), LIB_SMS_CHARSET_GSM, strTextMsg, Ql_strlen(strTextMsg), &nMsgRef);
}
static void Hdlr_RecvNewSMS(u32 nIndex, bool bAutoReply)
{
ST_RIL_SMS_TextInfo *pTextInfo = NULL;
ST_RIL_SMS_DeliverParam *pDeliverTextInfo = NULL;
char aPhNum[RIL_SMS_PHONE_NUMBER_MAX_LEN] = {
0,
};
pTextInfo = Ql_MEM_Alloc(sizeof(ST_RIL_SMS_TextInfo));
Ql_memset(pTextInfo, 0x00, sizeof(ST_RIL_SMS_TextInfo));
RIL_SMS_ReadSMS_Text(nIndex, LIB_SMS_CHARSET_GSM, pTextInfo);
pDeliverTextInfo = &((pTextInfo->param).deliverParam);
Ql_strcpy(aPhNum, pDeliverTextInfo->oa);
APP_DEBUG("data = %s\r\n", (pDeliverTextInfo->data));
char text[350];
Ql_strcpy(text, (pDeliverTextInfo->data));
if (Ql_strcmp("send loc", text)==0)
{
if (LAST_FIX[30] = 'A')
{
char lat[10], lon[10];
float flat, flon;
int c = 0;
while (c < 9)
{
lat[c] = LAST_FIX[32 + c];
c++;
}
lat[c] = '\0';
c = 0;
while (c < 10)
{
lon[c] = LAST_FIX[44 + c];
c++;
}
lon[c] = '\0';
flat = Ql_atof(lat) / 100;
flon = Ql_atof(lon) / 100;
Ql_sprintf(text, "lat= %f , lon= %f\0", flat, flon);
SMS_TextMode_Send(aPhNum, text);
}
else
{
SMS_TextMode_Send(aPhNum, "GPS NOT FIXED YET");
}
}
Ql_MEM_Free(pTextInfo);
return;
}
static void HTTP_RcvData(u8 *ptrData, u32 dataLen, void *reserved)
{
APP_DEBUG("<-- Data coming on http, total len:%d -->\r\n", m_rcvDataLen + dataLen);
if ((m_rcvDataLen + dataLen) <= sizeof(arrHttpRcvBuf))
{
Ql_memcpy((void *)(arrHttpRcvBuf + m_rcvDataLen), (const void *)ptrData, dataLen);
}
else
{
if (m_rcvDataLen < sizeof(arrHttpRcvBuf))
{
u32 realAcceptLen = sizeof(arrHttpRcvBuf) - m_rcvDataLen;
Ql_memcpy((void *)(arrHttpRcvBuf + m_rcvDataLen), (const void *)ptrData, realAcceptLen);
APP_DEBUG("<-- Rcv-buffer is not enough, discard part of data (len:%d/%d) -->\r\n", dataLen - realAcceptLen, dataLen);
}
else
{
APP_DEBUG("<-- No more buffer, discard data (len:%d) -->\r\n", dataLen);
}
}
m_rcvDataLen += dataLen;
}
static void HTTP_Program()
{
s32 ret;
m_rcvDataLen = 0;
ret = RIL_NW_SetGPRSContext(Ql_GPRS_GetPDPContextId());
APP_DEBUG("START SEND TO SERVER\r\n");
ret = RIL_NW_SetAPN(1, APN_NAME, APN_USERID, APN_PASSWD);
APP_DEBUG("<-- Set GPRS APN, ret=%d -->\r\n", ret);
ret = RIL_NW_OpenPDPContext();
APP_DEBUG("<-- Open PDP context, ret=%d -->\r\n", ret);
ret = RIL_HTTP_SetServerURL(HTTP_URL_ADDR, Ql_strlen(HTTP_URL_ADDR));
APP_DEBUG("<-- Set http server URL, ret=%d -->\r\n", ret);
ret = RIL_HTTP_RequestToPost(postMsg, Ql_strlen((char *)postMsg));
APP_DEBUG("<-- Send post-request, ret=%d -->\r\n", ret);
ret = RIL_HTTP_ReadResponse(120, HTTP_RcvData);
APP_DEBUG("READ SERVER RESPONSE (dataLen=%d) \r\n", m_rcvDataLen);
ret = RIL_NW_ClosePDPContext();
APP_DEBUG("<-- Close PDP context, ret=%d -->\r\n", ret);
}
static s32 ReadSerialPort(Enum_SerialPort port, /*[out]*/ u8 *pBuffer, /*[in]*/ u32 bufLen)
{
s32 rdLen = 0;
s32 rdTotalLen = 0;
if (NULL == pBuffer || 0 == bufLen)
{
return -1;
}
Ql_memset(pBuffer, 0x0, bufLen);
while (1)
{
rdLen = Ql_UART_Read(port, pBuffer + rdTotalLen, bufLen - rdTotalLen);
if (rdLen <= 0)
{
break;
}
rdTotalLen += rdLen;
}
return rdTotalLen;
}
void GPSPower(int status)
{
u16 ret;
if (status == 1)
{
ret = RIL_GPS_Open(1);
if (RIL_AT_SUCCESS != ret)
{
APP_DEBUG("GPS is on \r\n");
}
else
{
APP_DEBUG("Power on GPS Successful.\r\n");
}
}
else if (status == 0)
{
ret = RIL_GPS_Open(0);
if (RIL_AT_SUCCESS != ret)
{
APP_DEBUG("GPS is off \r\n");
}
else
{
APP_DEBUG("Power off GPS Successful.\r\n");
}
}
}
static void CallBack_UART_Hdlr(Enum_SerialPort port, Enum_UARTEventType msg, bool level, void *customizedPara)
{
switch (msg)
{
case EVENT_UART_READY_TO_READ:
{
char *p = NULL;
s32 totalBytes = ReadSerialPort(port, m_RxBuf_Uart, sizeof(m_RxBuf_Uart));
if (totalBytes <= 0)
{
break;
}
if (Ql_strstr(m_RxBuf_Uart, "GPSOn"))
{
APP_DEBUG("ok\r\n");
GPSPower(1);
break;
}
if (Ql_strstr(m_RxBuf_Uart, "GPSOff"))
{
APP_DEBUG("ok\r\n");
GPSPower(0);
break;
}
if (Ql_strstr(m_RxBuf_Uart, "location"))
{
APP_DEBUG("ok\r\n");
APP_DEBUG("%s \r\n", RMC_BUFFER);
break;
}
break;
}
}
}
#endif // __CUSTOMER_CODE__
سلام
دستور AT+QNITZ=1 برای اپراتور همراه اول و ایرانسل تو تمامی شهرها مشکلی نداره؟
احیانا اپراتور یدفه از کار نمیندازه یا خطایی داشته باشه و ساعت رو دریافت نکنه؟
سلام
همونطور که گفتم بعضی اپراتور ها پشتیبانی نمیکنند و شاید همون اپراتوری که کار میده هم در برخی مناطق کار نده
من اطلاع دقیقی از این موضوع ندارم ، اما اگه شما روش وقت گذاشتید ممنون میشم نتیجه رو به اطلاع ما هم برسونید
سلام
من تهران هستم. برای ایرانسل اصلا این دستور کار نمیکرد اما برای همراه اول هیچ مشکلی نداشت.
سلام وقت بخیر
حداکثر تعداد ماهواره متصل برای GPS روی محصول شما چه تعداد میشه ؟
سلام دوست عزیز
این محصول ما نیست , ماژول شرکت کویکتل هست که در قسمت اسپک فنی میتونی کلیه موارد مربوط به GPS را مشاهده کنید
https://sisoog.com/wp-content/uploads/2018/11/Quectel_MC60_GSM_Specification_V1.2.pdf
سلام
شما میتونید sdk اصلی را از سایت کویکتل یا لینک دانلود سیسوگ، دانلود کنید و اونو روی ماژول پروگرام کنید. سپس برد ماژول را به کامپیوتر وصل کنید و انتن ها را هم وصل کنید. برنامه qnavigator را باز کنید و connect را بزنید. گزینه gnss در سمت چپ پایین برنامه اضافه میشه. اگر اون گزینه رو بزنید بعد از گذشت مدتی، سیگنال های gnss را دریافت میکنید. زیر این پنجره چند تا گزینه هست که بصورت گرافیکی میتونید تعداد ماهواره هایی که سیگنال اونا داره دریافت میشه را ببینید. این ماژول میتونه سیگنال دو مدل ماهواره gps و glonass را بگیره.
سلام مهندس
من با دیدن این نکته مفید که فرمودید فقط بعضی سیمکارت ها میتونن زمانو درست ست کنن تونستم مشکل ست شدن زمانو حل کنم. بجز اون مشکل دیر وصل شدن gps هم حل شد و خیلی سریع سیگنالهای gps دریافت شدن. ولی برام عجیب بود که تغییر سیمکارت چرا باید روی سرعت دریافت سیگنال های gps تاثیر داشته باشه. چون قاعدتا نباید ارتباطی داشته باشن و حتی قبلا بدون سیمکارت هم تونستم سیگنال gps دریافت کنم. نظر شما چیه؟
سلام
در واقع gps هیچ ارتباطی نداره به بخش gsm
اما میشه به کمک بخش gsm سرعت فیکس شدن رو افزایش داد که روش های مختلفی داره (برای اطلاعات بیشتر بخش 3.16 و 3.15 و 3.14 داکیومنت hardware_design رو بررسی کنید) ، حتی شما میتونید بدون gps هم مکانیابی کنید (برای اطلاعات بیشتر در مورد QuecLocator سرچ کنید)
خیلی ممنونم از راهنمایی تون و وقتی که برای پاسخ به کامنت ها میگذارید. 🙏
سلام ممنون از پاسختون
من این کد روی ماژول mc65 اپلود کردم
تغییری هم که دادم خط های برنامه که GPS بود به GNSS تبدیل کردم
اون قسمت از کد که شرط گذاشتین که اگر A==30کاراکتر باشه
QNAVIGATOR چک کردم فکر نمیکنم 30 کاراکتر باشه
اگه بتونید راهنمایی کنین ممنون میشم
سلام
وقت بخیر
من زمانی که اس ام اس send loc میفرستم هیچ پیامی دریافت نمیکنم
اما زمانی که هر پیام دیگری میفرستم طول و عرض 0.000000 دریافت میکنم
با برنامهqnavigatorهم چک کردم لوکیشن میگیرم مشکل کار از کجاست؟
ممنون
سلام دستور شرطی خط 266 اشکالی داشت که برطرف شد
الان همون send loc رو که بفرستید درست میشه
در صورت فیکس نبودن هم باید “GPS NOT FIXED YET” رو پیامک کنه ، تغییری توی کد ایجاد کردید که 0 میفرسته ؟!
سلام وقت بخیر
من میخواستم داخل پروژه ام هم از opencpu استفاده کنم
و هم از at cmd
ینی یک قسمت هایی رو از توابع QL استفاده کنم
و ی جاهایی رو از AT CMD
مشکلی که دارم
یک سری AT CMD ها جوابشون در لحظه نیست و تاخیر داره
مثل FTP که وقتی فایل رو اپلود میکنه
بعد اینکه فایل اپلود شد
یک پیغامی میده که نسبت به حجم و سرعت اینترنت این زمان ارسال پیغام متفاوته
این مدل جواب های AT CMD رو میشه دریافت کرد؟
سلام و درود دوست عزیز،
بله میشه هندل کرد
در SDK تابعی وجود داره به اسم Ql_RIL_SendATCmd که دستور AT شما رو ارسال میکنه و یک تابع هم به عنوان کال بک میگیره که هر وقت جوابی دریافت شد اون تابع رو صدا میزنه
این روال تا وقتی ادامه پیدا میکنه که توی تابع کال بک یا خطا برگردانید یا بگید که کار تمام شد به این ترتیب شما میتونید منتظر بمونید تا کار تابع مورد نظر شما انجام بشه
فکر میکنم توی مثال های کویکتل مثالی برای استفاده ازش وجود داشته باشه
داخل تابع at_cmd
همون لحظه وارد کالبک میشه
معمولا در جواب هر at cmd همون لحظه ok یا error داده میشه
ولی اگر در ادامه هم پیغامی در راستای همون atcmd بفرسته
بازم وارد همون کالبک میشه؟؟
سلام مجدد خدمت شما
جناب مهندس، اگر تغذیه هر دو بخش gnss و بقیه ماژول را از خروجی یک رگولاتور مشترک بگیریم، مشکلی پیش نمیاد؟ هدف کاهش حجم برد موردنظر هست.
اگر ولتاژ توی رنج هر دو بخش باشه چرا باید مشکلی پیش بیاد
اما برای کاهش مصرف تغذیه gps جدا هست که در صورت نیاز قطع بشه
(در ضمن ماژول mc65 که نسخه جایگزین mc60 هست رگولاتور بخش gps رو به صورت داخلی داره)
سلام
خیلی عالی. فکر نمیکردم مرجع فارسی برای این ماژول پیدا بشه. خدا قوت 😍🤩
سلامت باشید🙂
سلام وقتتون بخیر باشه
من با ماژول mc60 آشنا نیستم زیاد. میخواستم بدونم میشه از این ماژول از طریق GPRS/GSM موقعیت فعلی را گرفت؟ داکیومنت های شرکت کوئکتل را که نگاه کردم گرفتن لوکیشن بر اساس GPS را داشت.
من میخوام با استفاده از ATXMEGA128A1U و MC60، موقعیت فعلی را بگیرم یعنی از قابلیت OPEN CPU نمیخوام استفاده کنم. میشه لطفا راهنماییم کنید و همچنین میشه بگید از کجا میتونم داکیومنت مرتبط رو پیدا کنم. تو سایت های فارسی که فقط سایت شما بود تو سایت های انگلیسی هم مطلبی پیدا نکردم. ممنونم
سلام
بله ماژول mc60 این قابلیت رو داره. اطلاعات بیشتر رو میتونید در داکیومنت Quectel_QuecLocator_Application_Note_V3.4 پیدا کنید که داخل فایل هایی که در قسمت دوم قرار داده شده موجود هست.
بسیار متشکرم.
باسلام.
در پروژه ای مدار شارژر باتری قرار دادم ولی مدت زمانی رو که از باتری 700میلی آمپر استفاده میکنم حدود 5 ساعت است که خیلی کمه.
اگر دوستان مدار شارژر یا توضیحاتی از مدار power و باتری برای MC60 دارید لطفا راهنمایی کنید.ممنون.
فکر میکنم مورد بحث شما مدار شارژ نیست
در واقع شما میزان مصرف mc60 براتون مهمه که مثلا با یه باتری ۷۰۰ میلی امپری ۵ ساعت جواب میگیرید
برای بیشتر کردن زمان میتونید ماژول را در حالت power save قرار بدید
بهتر هستش از مدار شارژر باتری موتور براوو استفاده کنید تا باتری رو بهتر شارژ کنه
سلام خیلی ممنون از توضیحات ارزشمندتون میشه در مورد فعال کردن انواع A-gps در این ماژول به خصوص از طریق از atcommand توضیح بدید؟ آیا نیاز به هماهنگی با اپراتورها دارد
سوال دیگه ای که از خدمتتون داشتم در مورد پروتکل mqtt است که در اینترنت اشیا خیلی کاربرد داره
توی توضیحات این ماژول فکر میکنم گفته شده امکان ارتباط با پروتکل امنیتی رو داره آیا میشه بدون کتابخانه خاصی از طریق همین محیط opencpu استفاده کرد؟
ما سعی در تجاری سازی یک ردیاب داریم خیلی لطف میکنید اگر راهنمایی کنید
سلام و خسته نباشید خدمت شما.تو مرحله دریافت sms چیزی دریافت نمیکنم ولی مکان انلاین داخل سرورتون نشون میده مشکل از کجاست؟
باسلام این تکه کد
if (Ql_strcmp(“send loc”, text))
باید با
if (Ql_strcmp(“send loc”, text) == 0)
جایگزین بشه
اولین فرصت توی مطلب اصلاح میشه
سلام.خسته نباشید.
یک ویدیو در مورد شروع کار و نحوه اتصالات این برد میزارید. ممنون
با سلام و عرض خسته نباشید و تشکر برای اموزش های خوبتون
اگر خواسته باشم mc60از بسته اینترنت سیم کارت استفاده کنه و از شارژ ازاد سیم کارت استفاده نشه باید به چه شکل دستوراتش رو وارد کنم ؟؟؟؟؟؟
ایا در example های sdk یا در داکیومنت های موجود روشی هست که شما از اون روش استفاده کرده باشین که از بسته اینترنتی سیم کارت استفاده بشود ؟؟؟؟
ممنون میشم راهنماییم کنید ….
با سلام
میتونید از دستور AT+CUSD که از at command های ماژول هست استفاده کنید.
عملکرد این دستور در mc60 با ماژول های sim800 یکی هست ، توی سایت های داخلی میتونید روش استفاده از اون رو به طور کامل پیدا کنید
سلام وقتتون بخیر
در قسمت حافظه از IC AT45DB161E استفاده کردیم ایا نحوه ارتباط گرفتنن با این ای سی فرق میکنه با SD ؟؟؟؟
میشه همین نحوه کد نویسی شمارو روی این ای سی پیاده کرد ؟؟؟
ممنون میشم توضیح بدین
با سلام بله میشه از این ای سی برای تولید انبوه ردیاب استفاده کرد
میشه یه مقدار توضیح بدین که چطوری میشه اطلاعات رو داخل ای سی بفرستم و. باز در صورت نیاز بخونم اطلاعات رو ؟؟؟؟
ای سی رو وصل میکنیم با دستور save اطلاعات ذخیره و با دستور read اطلاعات رو میخونیم
کد زیر رو نوشتیم برای ارتباط mc60 با ای سی حافظه at45
u32 rdLen=0;
u32 wdLen=0;
u8 spi_write_buffer[]={0x01,0x02,0x03,0x0a,0x11,0xaa};
u8 spi_read_buffer[]={0x02,0x03,0x04,0x05,0x06,0x07};
APP_DEBUG(“\r\n\r\n”);
APP_DEBUG(“\r\n\r\n”,spi_read_buffer[3]);
ret=Ql_SPI_Init(0,PINNAME_PCM_IN,PINNAME_PCM_SYNC,PINNAME_PCM_OUT,PINNAME_PCM_CLK,0);
APP_DEBUG(“\r\n\r\n”,ret);
ret=Ql_SPI_Config(0,1,1,1,1000);
APP_DEBUG(“\r\n\r\n”,ret);
wdLen=Ql_SPI_Write(0,spi_write_buffer,6);
APP_DEBUG(“\r\n\r\n”,wdLen);
rdLen=Ql_SPI_Read(0,spi_read_buffer,6);
Ql_Sleep(500);
APP_DEBUG(“\r\n\r\n”,spi_write_buffer[5]);
APP_DEBUG(“\r\n\r\n”,spi_read_buffer[3]);
APP_DEBUG(“\r\n\r\n”,rdLen);
ret=Ql_SPI_Uninit(0);
APP_DEBUG(“\r\n\r\n”,ret);
ولی انگار که داخل حافظه چیزی ذخیره و خوانده نمیشه
کد داخل داکیومنت mc60 و اطلاعاتی که داده بود همین بود
اینم محیط دیباگ که ازش لاگ گرفتیم
Received URC: type: 3
GSM Network Status:2
اگر کسی کار کرده ممنون میشم کمکم کنه
در پیوست کامنت قبلی
محیط دیباگ درست فرستاده نشد
Received URC: type: 3
GSM Network Status:2
نهوه اتصال این ایسی به ماژول چطوری هست؟ چون ماژول فقط سه تا پایه داره CMD CLK DATA اما ماژول CS رو ما به 3.3 وصل کنیم بقیه پایه های ایسی چطوریمیشه؟
سلام
خداقوت، ممنون از آموزش عالیتون
فکر میکنم خط 266 باید تساوی با صفر چک بشود
if (Ql_strcmp(“send loc”, text) == 0)
سلام
باتشکر از توجهتون
اصلاح میشه🙂
فایل ril.c داخل فایل ها نیست
از کجا میتونم دانلودش کنم
در اصل فایلی با نام ril.c وجود نداره
اکثر توابعی که در فایل ril.h معرفی شدند از نوع extern هستند ، یعنی در جایی دیگه تعریف شدند و غیر اونا چندتا متغیر میمونه
سلام
خروجی توابع Q1 رو از کجا میتونم بدونم چیه؟
مثلا این تابع Ql_OS_GetMessage
برای بررسی ورودی و خروجی های توابع و عملکرد اونها میتونید از داکیومنت Quectel_MC60-OpenCPU_User_Guide استفاده کنید
ممنون
ولی این داکیومنت خیلی توضیح نداده که مقادیر خروجی ها چه حالت هایی میتونن باشن
مثلا تو این تابع از کد شما متوجه شدم خروجی param1 وقتی 3 باشه یعنی پیام مربوط به gsm هست
به نام خدا
با سلام
از اینکه پروژه اوپن سی پی یو های شرکت کویکتل را برگذار میکنید متشکرم .
اینجانب و امسال ماها وقتی که یک پروژه ای را شروع می کنیم نیاز به یک راهنمای خوب و پشتیبانی قوی جهت رفع اشکالات خود هستیم .
چه بصورت سخت افزاری باشد و یا نرم افزاری .
پیشنهادم این است که آموزش ها را علاوه بر نوشتاری به صورت گرافیکی یا انیمیش نیز برای درک بهتر مطالب مادر تخصصی که بسیار بسیار و بسیار نکات ریز و درشتی را دارد که ما از این نکات غافل و بی خبریم می تواند راه گشا و مفید با شد.
( اینجانب تا قسمت دوم را که آمدم دیگر هنگ کردم چون نرم افزار را هر جوری که می دادم تا خروجی بدهد ارور های جور وا جور می داد که مطرح هم کردم ولی پاسخ بی پاسخ ماند و پروژه متوقف شد که شد ).
با از مطالب خوبتان استفاده می کنم به امید روزهایی بهتر
باسلام و تشکر از ثابت قدمی شما
سعی بر این هست که آموزش ها روان و خلاصه باشد تا هر نوع کاربری بتونه ازشون استفاده کنه و خسته کننده نباشه.
یکسری از مشکلات جوابشون در کامنت ها قابل پاسخ نیست. میتونید از طریق ایمیل در ارتباط باشید تا بیشتر بتونم کمکتون کنم😉
mahdi2001h@gmail.com