[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[paparazzi-commits] [4964] gsm and max3100 finally working together
From: |
Gautier Hattenberger |
Subject: |
[paparazzi-commits] [4964] gsm and max3100 finally working together |
Date: |
Tue, 15 Jun 2010 17:59:16 +0000 |
Revision: 4964
http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4964
Author: gautier
Date: 2010-06-15 17:59:15 +0000 (Tue, 15 Jun 2010)
Log Message:
-----------
gsm and max3100 finally working together
Modified Paths:
--------------
paparazzi3/trunk/sw/airborne/modules/gsm/gsm.c
paparazzi3/trunk/sw/airborne/modules/gsm/gsm.h
paparazzi3/trunk/sw/airborne/modules/max3100/max3100_hw.c
paparazzi3/trunk/sw/airborne/modules/max3100/max3100_hw.h
Modified: paparazzi3/trunk/sw/airborne/modules/gsm/gsm.c
===================================================================
--- paparazzi3/trunk/sw/airborne/modules/gsm/gsm.c 2010-06-15 17:35:12 UTC
(rev 4963)
+++ paparazzi3/trunk/sw/airborne/modules/gsm/gsm.c 2010-06-15 17:59:15 UTC
(rev 4964)
@@ -154,24 +154,34 @@
if (gsm_status == STATUS_NONE) { /* First call */
LED_ON(GSM_ONOFF_LED);
gsm_status = STATUS_POWERON;
- } else { /* Second call */
+ //} else { /* Second call */
+ // gsm_buf_idx = 0;
+ // gsm_line_received = false;
+ //
+ // Send_AT();
+ // gsm_status = STATUS_SEND_AT;
+ // gsm_gsm_init_status = FALSE;
+ }
+}
+
+void gsm_init_report(void) { /* Second call */
+ if (gsm_status != STATUS_NONE) {
gsm_buf_idx = 0;
gsm_line_received = false;
-
+
Send_AT();
gsm_status = STATUS_SEND_AT;
- gsm_gsm_init_status = FALSE;
+ gsm_gsm_init_report_status = FALSE;
}
}
-
void gsm_event(void) {
if (GSMBuffer()) {
ReadGSMBuffer();
}
if (gsm_line_received) {
- DOWNLINK_SEND_DEBUG_GSM_RECEIVE(DefaultChannel, gsm_buf_len, gsm_buf);
+ if (gsm_buf_len > 0) DOWNLINK_SEND_DEBUG_GSM_RECEIVE(DefaultChannel,
gsm_buf_len, gsm_buf);
gsm_got_line();
gsm_line_received = false;
} else if (prompt_received) {
@@ -190,7 +200,7 @@
Suppr_SMS(index_msg);
gsm_status = STATUS_DELETE_SMS;
} else if (gsm_status == STATUS_IDLE
- && strncmp(CMTI, gsm_buf, strlen(CMTI)) == 0) {
+ && strncmp(CMTI, gsm_buf, strlen(CMTI)) == 0) {
/* A SMS is available */
/* Extracting the index of the message */
char * first_comma = indexn(gsm_buf, ',',MAXLEN_CMTI_ANSWER);
@@ -201,52 +211,56 @@
}
} else if (waiting_for_reply) { // Other cases
// Do we get what we were expecting
-
+
bool gsm_answer = strncmp(expected_ack, gsm_buf, strlen(expected_ack)) ==
0;
if (gsm_answer) {
waiting_for_reply = false;
switch(gsm_status) {
- case STATUS_CSQ :
- gsm_send_report_continue();
- gsm_status = STATUS_WAITING_PROMPT;
- break;
-
- case STATUS_REQUESTING_MESSAGE:
- parse_msg_header();
- gsm_status = STATUS_WAITING_DATA;
- break;
-
- case STATUS_SEND_AT :
- gsm_answer = false;
- Send_CMGF();
- gsm_status = STATUS_SEND_CMGF;
- break;
-
- case STATUS_SEND_CMGF :
- gsm_answer = false;
- Send_CNMI();
- gsm_status = STATUS_SEND_CNMI;
- break;
-
- case STATUS_SEND_CNMI :
- gsm_answer = false;
- Send_CPMS();
- gsm_status = STATUS_SEND_CPMS;
- break;
-
- case STATUS_SEND_CPMS :
- gsm_answer = false;
- gsm_status = STATUS_IDLE;
- gsm_gsm_send_report_status = MODULES_START; /** Start reporting */
- break;
-
- case STATUS_DELETE_SMS :
- gsm_status = STATUS_IDLE;
- break;
-
- default:
- break;
+ case STATUS_CSQ :
+ gsm_send_report_continue();
+ gsm_status = STATUS_WAITING_PROMPT;
+ break;
+
+ case STATUS_REQUESTING_MESSAGE:
+ parse_msg_header();
+ gsm_status = STATUS_WAITING_DATA;
+ break;
+
+ case STATUS_SEND_AT :
+ gsm_answer = false;
+ Send_CMGF();
+ gsm_status = STATUS_SEND_CMGF;
+ LED_TOGGLE(3);
+ break;
+
+ case STATUS_SEND_CMGF :
+ gsm_answer = false;
+ Send_CNMI();
+ gsm_status = STATUS_SEND_CNMI;
+ LED_TOGGLE(3);
+ break;
+
+ case STATUS_SEND_CNMI :
+ gsm_answer = false;
+ Send_CPMS();
+ gsm_status = STATUS_SEND_CPMS;
+ LED_TOGGLE(3);
+ break;
+
+ case STATUS_SEND_CPMS :
+ gsm_answer = false;
+ gsm_status = STATUS_IDLE;
+ gsm_gsm_send_report_status = MODULES_START; /** Start reporting */
+ LED_TOGGLE(3);
+ break;
+
+ case STATUS_DELETE_SMS :
+ gsm_status = STATUS_IDLE;
+ break;
+
+ default:
+ break;
}
} else { /** We did not get the expected answer */
/* Let's wait for the next line */
@@ -260,7 +274,7 @@
static void request_for_msg(void)
{
char demande_lecture_SMS[16];
-
+
strcpy(expected_ack, "+CMGR");
sprintf(demande_lecture_SMS, "AT+CMGR=%d", index_msg);
waiting_for_reply = true;
@@ -269,10 +283,10 @@
/** Receiving a SMS, third step, content in gsm_buf
- Message can be
- Bdd where dd is a block index on two digits. WARNING: dd > 0
- Sdd value where dd>0 is a var index on two digits and value is a float
- */
+ Message can be
+ Bdd where dd is a block index on two digits. WARNING: dd > 0
+ Sdd value where dd>0 is a var index on two digits and value is a float
+ */
static void gsm_receive_content(void)
{
// ?????? sprintf(data_to_send, "%d %s %s %s %s", index_msg, flag,
expediteur, dateheure, data_recue);
@@ -365,6 +379,7 @@
// Sending a message, second step; we have asked for network quality
void gsm_send_report_continue(void)
{
+ LED_ON(2);
//We got "+CSQ: <rssi>,<ber>" <rssi> and <ber> on 2 digits (cf 3.5.4.4.4)
// and we expect "OK" on the second line
uint8_t rssi = atoi(gsm_buf + strlen("+CSQ: "));
@@ -378,6 +393,7 @@
char buf[32];
sprintf(buf, "AT+CMGS=\"%s\"", GCS_NUMBER);
Send(buf);
+ LED_OFF(2);
}
@@ -423,23 +439,23 @@
static void gsm_parse(uint8_t c) {
switch(c) {
- case GSM_CR:
- gsm_buf[gsm_buf_idx] = '\0';
- gsm_line_received = true;
- gsm_buf_len = gsm_buf_idx;
- gsm_buf_idx=0;
- break;
- case '>':
- prompt_received = true;
- break;
- case '\n':
- break;
- default:
- if (gsm_buf_idx < GSM_MAX_PAYLOAD) {
- gsm_buf[gsm_buf_idx] = c;
- gsm_buf_idx++;
- } /* else extra characters are ignored */
- break;
+ case GSM_CMD_LINE_TERMINATION:
+ break;
+ case '>':
+ prompt_received = true;
+ break;
+ case GSM_RESPONSE_FORMATING:
+ gsm_buf[gsm_buf_idx] = '\0';
+ gsm_line_received = true;
+ gsm_buf_len = gsm_buf_idx;
+ gsm_buf_idx=0;
+ break;
+ default:
+ if (gsm_buf_idx < GSM_MAX_PAYLOAD) {
+ gsm_buf[gsm_buf_idx] = c;
+ gsm_buf_idx++;
+ } /* else extra characters are ignored */
+ break;
}
}
@@ -451,7 +467,7 @@
while(string[i])
GSMTransmit(string[i++]);
- GSMTransmit(GSM_CR);
+ GSMTransmit(GSM_CMD_LINE_TERMINATION);
DOWNLINK_SEND_DEBUG_GSM_SEND(DefaultChannel, i, string);
}
Modified: paparazzi3/trunk/sw/airborne/modules/gsm/gsm.h
===================================================================
--- paparazzi3/trunk/sw/airborne/modules/gsm/gsm.h 2010-06-15 17:35:12 UTC
(rev 4963)
+++ paparazzi3/trunk/sw/airborne/modules/gsm/gsm.h 2010-06-15 17:59:15 UTC
(rev 4964)
@@ -32,6 +32,7 @@
void gsm_init(void);
void gsm_periodic_1Hz(void);
+void gsm_init_report(void);
void gsm_send_report(void);
void gsm_start(void);
void gsm_stop(void);
Modified: paparazzi3/trunk/sw/airborne/modules/max3100/max3100_hw.c
===================================================================
--- paparazzi3/trunk/sw/airborne/modules/max3100/max3100_hw.c 2010-06-15
17:35:12 UTC (rev 4963)
+++ paparazzi3/trunk/sw/airborne/modules/max3100/max3100_hw.c 2010-06-15
17:59:15 UTC (rev 4964)
@@ -32,6 +32,7 @@
uint8_t volatile max3100_status;
bool volatile max3100_data_available;
+bool volatile max3100_transmit_buffer_empty;
uint8_t volatile max3100_tx_insert_idx, max3100_tx_extract_idx;
uint8_t volatile max3100_rx_insert_idx, max3100_rx_extract_idx;
@@ -73,6 +74,7 @@
void max3100_init( void ) {
max3100_status = MAX3100_STATUS_IDLE;
max3100_data_available = false;
+ max3100_transmit_buffer_empty = true;
max3100_tx_insert_idx = 0;
max3100_tx_extract_idx = 0;
max3100_rx_insert_idx = 0;
@@ -88,22 +90,22 @@
/* From arm7/max1167_hw.c */
-
+
/* SS pin is output */
SetBit(MAX3100_SS_IODIR, MAX3100_SS_PIN);
/* unselected max3100 */
Max3100Unselect();
- /* connect P0.7 to extint2 (IRQ) */
+ /* connect extint (IRQ) */
MAX3100_IRQ_PINSEL |= MAX3100_IRQ_PINSEL_VAL << MAX3100_IRQ_PINSEL_BIT;
- /* extint0 is edge trigered */
+ /* extint is edge trigered */
SetBit(EXTMODE, MAX3100_IRQ_EINT);
- /* extint0 is trigered on falling edge */
+ /* extint is trigered on falling edge */
ClearBit(EXTPOLAR, MAX3100_IRQ_EINT);
/* clear pending extint0 before enabling interrupts */
SetBit(EXTINT, MAX3100_IRQ_EINT);
- /* Configure interrupt vector for external pin interrupt */
+ /* Configure interrupt vector for external pin interrupt */
VICIntSelect &= ~VIC_BIT( MAX3100_VIC_EINT ); // EXTINT selected as IRQ
VICIntEnable = VIC_BIT( MAX3100_VIC_EINT ); // EXTINT interrupt
enabled
VICVectCntl8 = VIC_ENABLE | MAX3100_VIC_EINT;
@@ -116,7 +118,8 @@
VICVectAddr7 = (uint32_t)SPI1_ISR; /* address of the ISR */
/* Write configuration */
- Max3100TransmitConf(MAX3100_BAUD_RATE | MAX3100_BIT_NOT_RM);
+ //Max3100TransmitConf(MAX3100_BAUD_RATE | MAX3100_BIT_NOT_TM);
+ Max3100TransmitConf(MAX3100_BAUD_RATE | MAX3100_BIT_NOT_RM |
MAX3100_BIT_NOT_TM);
}
@@ -124,15 +127,11 @@
void EXTINT_ISR(void) {
ISR_ENTRY();
- LED_ON(2);
-
max3100_data_available = true;
SetBit(EXTINT, MAX3100_IRQ_EINT); /* clear extint */
VICVectAddr = 0x00000000; /* clear this interrupt from the VIC */
- LED_OFF(2);
-
ISR_EXIT();
}
@@ -140,9 +139,6 @@
ISR_ENTRY();
while (bit_is_set(SSPSR, RNE)) {
- // uint8_t byte1 = SSPDR;
- //uint8_t byte2 = SSPDR;
- // uint16_t data = byte1 << 8 | byte2;
uint16_t data = SSPDR;
if (bit_is_set(data, MAX3100_R_BIT)) { /* Data available */
@@ -150,6 +146,9 @@
max3100_rx_insert_idx++; // automatic overflow because len=256
read_bytes = true;
}
+ if (bit_is_set(data, MAX3100_T_BIT) && (max3100_status ==
MAX3100_STATUS_READING)) { /* transmit buffer empty */
+ max3100_transmit_buffer_empty = true;
+ }
}
SpiClearRti(); /* clear interrupt */
SpiDisableRti();
@@ -162,5 +161,5 @@
}
void max3100_debug(void) {
- /*** DOWNLINK_SEND_DEBUG(16, max3100_rx_buf); ***/
+ /*** DOWNLINK_SEND_DEBUG(DefaultChannel, 16, max3100_rx_buf); ***/
}
Modified: paparazzi3/trunk/sw/airborne/modules/max3100/max3100_hw.h
===================================================================
--- paparazzi3/trunk/sw/airborne/modules/max3100/max3100_hw.h 2010-06-15
17:35:12 UTC (rev 4963)
+++ paparazzi3/trunk/sw/airborne/modules/max3100/max3100_hw.h 2010-06-15
17:59:15 UTC (rev 4964)
@@ -41,6 +41,7 @@
extern volatile uint8_t max3100_status;
extern volatile bool max3100_data_available;
+extern volatile bool max3100_transmit_buffer_empty; // Max3100 ready to
receive data on SPI
/** I/O Buffers */
#define MAX3100_TX_BUF_LEN 256
@@ -70,6 +71,7 @@
/* Datasheet page 12 */
#if MAX3100_FOSC == 1843200
+#define MAX3100_B115200 0x0
#define MAX3100_B57600 0x1
#define MAX3100_B19200 0x9
#define MAX3100_B9600 0xA
@@ -82,6 +84,7 @@
#define MAX3100_BIT_NOT_RM (1U<<10)
#define MAX3100_BIT_NOT_TM (1U<<11)
#define MAX3100_BIT_NOT_FEN (1U<<13)
+#define MAX3100_T_BIT 14
#define MAX3100_R_BIT 15
/** Like Uart macros */
@@ -120,10 +123,12 @@
static inline void max3100_flush( void ) {
if (max3100_status == MAX3100_STATUS_IDLE
- && max3100_tx_extract_idx != max3100_tx_insert_idx) {
+ && max3100_tx_extract_idx != max3100_tx_insert_idx
+ && max3100_transmit_buffer_empty) {
Max3100TransmitData(max3100_tx_buf[max3100_tx_extract_idx]);
max3100_tx_extract_idx++; /* automatic overflow since len=256 */
max3100_status = MAX3100_STATUS_WRITING;
+ max3100_transmit_buffer_empty = false;
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [paparazzi-commits] [4964] gsm and max3100 finally working together,
Gautier Hattenberger <=