int16_t parse_cmd_rfm12_ask_2272_send (char *cmd, char *output, uint16_t len) { (void) output; (void) len; uint8_t command[3]; uint8_t delay = 74; uint8_t cnt = 10; #ifdef TEENSY_SUPPORT while (*cmd == ' ') cmd++; command[0] = getIntFromString (cmd); while (*cmd != ',') cmd++; cmd++; command[1] = getIntFromString (cmd); while (*cmd != ',') cmd++; cmd++; command[2] = getIntFromString (cmd); while (*cmd != ' ') cmd++; cmd++; delay = getIntFromString (cmd); while (*cmd != ' ') cmd++; cmd++; cnt = getIntFromString (cmd); int ret = 5; #else int ret = sscanf_P (cmd, PSTR ("%hhu,%hhu,%hhu %hhu %hhu"), &(command[0]), &(command[1]), &(command[2]), &delay, &cnt); #endif RFM12_DEBUG ("ps cmd %u,%u,%u d %u s %u", command[0], command[1], command[2], delay, cnt); if (ret < 3) return ECMD_ERR_PARSE_ERROR; rfm12_ask_2272_send (command, delay, cnt); return ECMD_FINAL_OK; }
void rfm12_net_init(void) { /* wait until POR done */ for (uint8_t i = 15; i; i--) _delay_ms(10); rfm12_prologue(RFM12_MODULE_IP); rfm12_trans(RFM12_CMD_LBDMCD | 0xE0); rfm12_trans(RFM12BAND(CONF_RFM12_FREQ)); rfm12_trans(RFM12_CMD_DATAFILTER | RFM12_DATAFILTER_AL | 0x03); rfm12_trans(RFM12_CMD_FIFORESET | 0x80 | RFM12_FIFORESET_DR); rfm12_trans(RFM12_CMD_WAKEUP); rfm12_trans(RFM12_CMD_DUTYCYCLE); rfm12_trans(RFM12_CMD_AFC | 0xF7); #ifdef CONF_RFM12B_SUPPORT rfm12_trans(0xCED4); /* Set Sync=2DD4 */ rfm12_trans(0xCC16); /* pll bandwitdh 0: max bitrate 86.2kHz */ #endif #ifdef DEBUG uint16_t result = rfm12_trans(RFM12_CMD_STATUS); RFM12_DEBUG("rfm12_net/init: %x", result); #endif #ifdef RFM12_DISABLE rfm12_trans(RFM12_CMD_PWRMGT); #else #ifdef TEENSY_SUPPORT rfm12_trans(RFM12_CMD_FREQUENCY | RFM12FREQ(CONF_RFM12_FREQ)); rfm12_trans(RFM12_CMD_RXCTRL | 0x04ac); rfm12_trans(RFM12_CMD_DATARATE | 0x10); rfm12_trans(RFM12_CMD_TXCONF | 0x20); #else rfm12_setfreq(RFM12FREQ(CONF_RFM12_FREQ)); rfm12_setbandwidth(5, 1, 4); rfm12_setbaud(CONF_RFM12_BAUD / 100); rfm12_setpower(0, 2); #endif /* not TEENSY_SUPPORT */ #ifdef STATUSLED_RFM12_RX_SUPPORT PIN_CLEAR(STATUSLED_RFM12_RX); #endif #ifdef STATUSLED_RFM12_TX_SUPPORT PIN_CLEAR(STATUSLED_RFM12_TX); #endif rfm12_status = RFM12_OFF; rfm12_int_enable(); rfm12_rxstart(); #ifdef DEBUG result = rfm12_trans(RFM12_CMD_STATUS); RFM12_DEBUG("rfm12_net/init'd: %x", result); #endif #endif /* !RFM12_DISABLE */ rfm12_epilogue(); }