示例#1
0
int16_t 
parse_cmd_msr1_get(char *cmd, char *output, uint16_t len) 
{
  uint8_t i;
  MSR1_DEBUG("called msr1 get ecmd");
  while(*cmd == ' ') cmd ++;
  if (*cmd == 0 || *cmd == '0') {
    for (i = 0; i < 21; i++) {
      output = output + sprintf(output, "%02x", e8_data.data[i]);
    }
    return ECMD_FINAL(21 * 2);
  } else if (*cmd == '1') {
    /* trick: use bytes on cmd as "connection specific static variables" */
    if (cmd[1] != 23) {		/* indicator flag: real invocation:  0 */
	cmd[1] = 23;		/*                 continuing call: 23 */
	cmd[2] = 0;		/* counter for data blocks */
    }
    for (i = 0; i < 20; i++) {
      sprintf(output, "%02x", c0_data.data[cmd[2] * 20 + i]);
      output += 2;
    }
    cmd[2] ++;
    if (cmd[2] == 4) {
      return ECMD_FINAL(15 * 2);
    }
    else
      return ECMD_AGAIN(20 * 2 + 1); 
  } 
  return ECMD_ERR_PARSE_ERROR;
}
示例#2
0
void
msr1_periodic(void)
{
  new_data.chksum = 0;
  new_data.len = 0;

  if (state == MSR1_REQUEST_C0) {
    state = MSR1_REQUEST_E8;
    usart(UDR) = 0xe8;
    MSR1_DEBUG("sent e8 command\n");
  } else if (state == MSR1_REQUEST_E8) {
    state = MSR1_REQUEST_48;
    usart(UDR) = 0x48;
    MSR1_DEBUG("sent 48 command\n");
  } else if (state == MSR1_REQUEST_48) {
    state = MSR1_REQUEST_50;
    usart(UDR) = 0x50;
    MSR1_DEBUG("sent 50 command\n");
  } else {
    state = MSR1_REQUEST_C0;
    usart(UDR) = 0xc0;
    MSR1_DEBUG("sent c0 command\n");
  }
}