uint8_t gprs_send(void *data_p, uint8_t len, uint16_t tag, uint16_t time) { DBG_ASSERT(data_p != NULL __DBG_LINE); DBG_ASSERT(len != 0 __DBG_LINE); queue_data_type new_item; osel_memset(&new_item, 0x00, sizeof new_item); OSEL_ISR_ENTRY(); osel_memcpy(new_item.gprs_data, data_p, len); new_item.gprs_data_len = len; new_item.gprs_tag = tag; new_item.ack_time = time; OSEL_ISR_EXIT(); if(GET_QUEUE_LEN == QUEUE_MAXLEN) { return QUEUE_MAXLEN+1; } else { queue_send(&gprs_queue, new_item); //入队成功 osel_post(GPRS_SEND_EVENT, NULL, OSEL_EVENT_PRIO_LOW); return(GET_QUEUE_LEN); //返回队列长度 } }
static bool_t gprs_write_fifo(const uint8_t *const payload, const uint16_t len) { DBG_ASSERT(payload != NULL __DBG_LINE); if (gprs_info.gprs_state == WORK_ON && len < SEND_SIZE) { if(gprs_info.data_mode) { wdt_clear(SOFT_WDT); led_set(LED_RED, TRUE); osel_memset(send.buf, 0x00, SEND_SIZE); osel_memcpy(send.buf, payload, len); send.len = len; write_fifo(send.buf, send.len); led_set(LED_RED, FALSE); return TRUE; } else { if(xSemaphoreTake(gprs_mutex, 600) == pdTRUE) { led_set(LED_RED, TRUE); //等待数据发送完成 xTimerReset(gprs_daemon_timer, 400); osel_memset(send_data, 0x00, SIZE); tfp_sprintf((char *)send_data, CIPSEND, len); osel_memset(send.buf, 0x00, SEND_SIZE); osel_memcpy(send.buf, payload, len); send.len = len; write_fifo(send_data, mystrlen((char *)send_data)); return TRUE; } } } return FALSE; }
uint8_t lora_data_read(uint8_t *buf, uint8_t len) { uint8_t read_len = 0; if(len > lora_recv_index) { read_len = lora_recv_index; } else { read_len = len; } osel_memcpy(buf, lora_recv_data, read_len); osel_memset(lora_recv_data, 0x00, read_len); lora_recv_index = 0; return read_len; }
static bool_t lora_reg_write(uint8_t reg, uint8_t *buf, uint8_t len) { uint8_t send_buf[30]; uint8_t index = 0; lora_mode = SETTING_MODE; // lora_reg = reg; send_buf[index++] = 0xFF; send_buf[index++] = 0x56; send_buf[index++] = 0xAE; send_buf[index++] = 0x35; send_buf[index++] = 0xA9; send_buf[index++] = 0x55; send_buf[index++] = 0x90; send_buf[index++] = reg; send_buf[index++] = len; osel_memcpy(&send_buf[index], buf, len); index += len; lora_recv_rxok_flag = FALSE; uart_send_string(lora_port, send_buf, index); vTaskDelay(600 / portTICK_PERIOD_MS); if (lora_recv_index!=0) { if ((lora_recv_index == (len + 1)) && (lora_recv_data[0] == 0x24)) { lora_recv_index = 0; osel_memset(lora_recv_data, 0x00, 150); return TRUE; } } lora_recv_index = 0; osel_memset(lora_recv_data, 0x00, 150); return FALSE; }
static void set(const gprs_info_t *const info) { osel_memcpy(&gprs_info, info, sizeof(gprs_info_t)); }