void APP_Start(void) { uint8_t val=0; uint8_t range, res; uint16_t ambient; CLS1_ConstStdIOType *io = CLS1_GetStdio(); VL_Init(); /* initialize sensor driver */ for(;;) { res = VL_ReadRangeSingle(&range); if (res!=ERR_OK) { CLS1_SendStr("ERROR Range: ", io->stdErr); CLS1_SendNum8u(res, io->stdErr); } else { CLS1_SendStr("Range: ", io->stdOut); CLS1_SendNum8u(range, io->stdOut); } res = VL_ReadAmbientSingle(&ambient); if (res!=ERR_OK) { CLS1_SendStr(" ERROR Ambient: ", io->stdErr); CLS1_SendNum8u(res, io->stdErr); } else { CLS1_SendStr(" Ambient: ", io->stdOut); CLS1_SendNum16u(ambient, io->stdOut); } CLS1_SendStr("\r\n", io->stdOut); LED1_Neg(); WAIT1_Waitms(500); } }
static uint8_t HandleDataRxMessage(RAPP_MSG_Type type, uint8_t size, uint8_t *data, RNWK_ShortAddrType srcAddr, bool *handled, RPHY_PacketDesc *packet) { #if PL_HAS_SHELL uint8_t buf[16]; CLS1_ConstStdIOTypePtr io = CLS1_GetStdio(); #endif uint8_t val; (void)size; (void)packet; switch(type) { case RAPP_MSG_TYPE_DATA: /* <type><size><data */ *handled = TRUE; val = *data; /* get data value */ #if PL_HAS_SHELL CLS1_SendStr((unsigned char*)"Data: ", io->stdOut); CLS1_SendNum8u(val, io->stdOut); CLS1_SendStr((unsigned char*)" from addr 0x", io->stdOut); buf[0] = '\0'; #if RNWK_SHORT_ADDR_SIZE==1 UTIL1_strcatNum8Hex(buf, sizeof(buf), srcAddr); #else UTIL1_strcatNum16Hex(buf, sizeof(buf), srcAddr); #endif UTIL1_strcat(buf, sizeof(buf), (unsigned char*)"\r\n"); CLS1_SendStr(buf, io->stdOut); #endif return ERR_OK; default: break; } /* switch */ return ERR_OK; }
static void MAZE_PrintStatus(const CLS1_StdIOType *io) { int i; CLS1_SendStatusStr((unsigned char*)"maze", (unsigned char*)"\r\n", io->stdOut); CLS1_SendStatusStr((unsigned char*)" solved", MAZE_IsSolved()?(unsigned char*)"yes\r\n":(unsigned char*)"no\r\n", io->stdOut); CLS1_SendStatusStr((unsigned char*)" path", (unsigned char*)"(", io->stdOut); CLS1_SendNum8u(pathLength, io->stdOut); CLS1_SendStr((unsigned char*)") ", io->stdOut); for(i=0;i<pathLength;i++) { CLS1_SendStr(TURN_TurnKindStr(path[i]), io->stdOut); CLS1_SendStr((unsigned char*)" ", io->stdOut); } CLS1_SendStr((unsigned char*)"\r\n", io->stdOut); }
static uint8_t HandleDataRxMessage(RAPP_MSG_Type type, uint8_t size, uint8_t *data, RNWK_ShortAddrType srcAddr, bool *handled, RPHY_PacketDesc *packet) { #if PL_HAS_SHELL uint8_t buf[32]; CLS1_ConstStdIOTypePtr io = CLS1_GetStdio(); #endif uint8_t val; protocol42 rxdata; (void)size; (void)packet; switch(type) { case RAPP_MSG_TYPE_DATA: /* generic data message */ *handled = TRUE; val = *data; /* get data value */ #if PL_HAS_SHELL //TODO SEND AN SHELQUEUE CBR CLS1_SendStr((unsigned char*)"Data: ", io->stdOut); CLS1_SendNum8u(val, io->stdOut); CLS1_SendStr((unsigned char*)" from addr 0x", io->stdOut); buf[0] = '\0'; #if RNWK_SHORT_ADDR_SIZE==1 UTIL1_strcatNum8Hex(buf, sizeof(buf), srcAddr); #else UTIL1_strcatNum16Hex(buf, sizeof(buf), srcAddr); #endif UTIL1_strcat(buf, sizeof(buf), (unsigned char*)"\r\n"); CLS1_SendStr(buf, io->stdOut); #endif /* PL_HAS_SHELL */ return ERR_OK; case RAPP_MSG_TYPE_PROTOCOL42: rxdata.target = (int8_t)*data; rxdata.type = (int8_t)*(data+1); rxdata.data = (*(data+2)); reciveData42(rxdata); default: /*! \todo Handle your own messages here */ break; } /* switch */ return ERR_OK; }
/* * Try using the PICC (the tag/card) with the given key to access block 0. * On success, it will show the key details, and dump the block data on Serial. * * @return true when the given key worked, false otherwise. */ bool try_key(MFRC522_MIFARE_Key *key) { bool result = false; uint8_t buffer[18]; uint8_t block = 0; MFRC522_StatusCode status; // http://arduino.stackexchange.com/a/14316 // if (!MFRC522_PICC_IsNewCardPresent()) { // return FALSE; // } // if (!MFRC522_PICC_ReadCardSerial()) { // return FALSE; // } CLS1_SendStr("Authenticating using key A...\r\n", CLS1_GetStdio()->stdOut); status = MFRC522_PCD_Authenticate(MFRC522_PICC_CMD_MF_AUTH_KEY_A, block, key, MFRC522_GetUid()); if (status != STATUS_OK) { CLS1_SendStr("PCD_Authenticate() failed: ", CLS1_GetStdio()->stdErr); CLS1_SendStr(MFRC522_GetStatusCodeName(status), CLS1_GetStdio()->stdErr); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdErr); return false; } // Read block uint8_t byteCount = sizeof(buffer); status = MFRC522_MIFARE_Read(block, buffer, &byteCount); if (status != STATUS_OK) { CLS1_SendStr("MIFARE_Read() failed: ", CLS1_GetStdio()->stdErr); CLS1_SendStr(MFRC522_GetStatusCodeName(status), CLS1_GetStdio()->stdErr); } else { // Successful read result = true; CLS1_SendStr("Success with key:", CLS1_GetStdio()->stdOut); dump_byte_array((*key).keyByte, MF_KEY_SIZE, TRUE); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); // Dump block data CLS1_SendStr("Block ", CLS1_GetStdio()->stdOut); CLS1_SendNum8u(block, CLS1_GetStdio()->stdOut); CLS1_SendStr(":", CLS1_GetStdio()->stdOut); dump_byte_array(buffer, 16, TRUE); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); } CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); MFRC522_PICC_HaltA(); // Halt PICC MFRC522_PCD_StopCrypto1(); // Stop encryption on PCD return result; }
static void WriteMifare(Uid *uid) { MFRC522_MIFARE_Key key; PICC_Type piccType = MFRC522_PICC_GetType(uid->sak); if ( piccType != PICC_TYPE_MIFARE_MINI && piccType != PICC_TYPE_MIFARE_1K && piccType != PICC_TYPE_MIFARE_UL ) { CLS1_SendStr("Only works with MIFARE classic cards!\r\n", CLS1_GetStdio()->stdErr); return; } // init default access key for(int i=0;i<sizeof(key.keyByte);i++) { key.keyByte[i] = 0xff; } // In this sample we use the second sector, // that is: sector #1, covering block #4 up to and including block #7 uint8_t sector = 1; uint8_t blockAddr = 4; uint8_t dataBlock[] = { 0x01, 0x02, 0x03, 0x04, // 1, 2, 3, 4, 0x05, 0x06, 0x07, 0x08, // 5, 6, 7, 8, 0x09, 0x0a, 0xff, 0x0b, // 9, 10, 255, 11, 0x0c, 0x0d, 0x0e, 0x0f // 12, 13, 14, 15 }; uint8_t trailerBlock = 7; MFRC522_StatusCode status; uint8_t buffer[18]; uint8_t size = sizeof(buffer); // Authenticate using key A CLS1_SendStr("Authenticating using key A...\r\n", CLS1_GetStdio()->stdOut); status = (MFRC522_StatusCode) MFRC522_PCD_Authenticate(MFRC522_PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, uid); if (status != STATUS_OK) { CLS1_SendStr("PCD_Authenticate() failed: ", CLS1_GetStdio()->stdOut); CLS1_SendStr(MFRC522_GetStatusCodeName(status), CLS1_GetStdio()->stdOut); return; } // Show the whole sector as it currently is CLS1_SendStr("Current data in sector:\r\n", CLS1_GetStdio()->stdOut); MFRC522_PICC_DumpMifareClassicSectorToSerial(uid, &key, sector); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); // Read data from the block CLS1_SendStr("Reading data from block ", CLS1_GetStdio()->stdOut); CLS1_SendNum8u(blockAddr, CLS1_GetStdio()->stdOut); CLS1_SendStr(" ...\r\n", CLS1_GetStdio()->stdOut); status = (MFRC522_StatusCode) MFRC522_MIFARE_Read(blockAddr, buffer, &size); if (status != STATUS_OK) { CLS1_SendStr("MIFARE_Read() failed: ", CLS1_GetStdio()->stdOut); CLS1_SendStr(MFRC522_GetStatusCodeName(status), CLS1_GetStdio()->stdOut); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); } CLS1_SendStr("Data in block ", CLS1_GetStdio()->stdOut); CLS1_SendNum8u(blockAddr, CLS1_GetStdio()->stdOut); CLS1_SendStr(":\r\n", CLS1_GetStdio()->stdOut); dump_byte_array(buffer, 16, TRUE); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); // Authenticate using key B CLS1_SendStr("Authenticating again using key B...\r\n", CLS1_GetStdio()->stdOut); status = (MFRC522_StatusCode) MFRC522_PCD_Authenticate(MFRC522_PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, uid); if (status != STATUS_OK) { CLS1_SendStr("PCD_Authenticate() failed: ", CLS1_GetStdio()->stdOut); CLS1_SendStr(MFRC522_GetStatusCodeName(status), CLS1_GetStdio()->stdOut); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); return; } // Write data to the block CLS1_SendStr("Writing data into block ", CLS1_GetStdio()->stdOut); CLS1_SendNum8u(blockAddr, CLS1_GetStdio()->stdOut); CLS1_SendStr(" ...\r\n", CLS1_GetStdio()->stdOut); dump_byte_array(dataBlock, 16, TRUE); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); status = (MFRC522_StatusCode) MFRC522_MIFARE_Write(blockAddr, dataBlock, 16); if (status != STATUS_OK) { CLS1_SendStr("MIFARE_Write() failed: ", CLS1_GetStdio()->stdOut); CLS1_SendStr(MFRC522_GetStatusCodeName(status), CLS1_GetStdio()->stdOut); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); } CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); // Read data from the block (again, should now be what we have written) CLS1_SendStr("Reading data from block ", CLS1_GetStdio()->stdOut); CLS1_SendNum8u(blockAddr, CLS1_GetStdio()->stdOut); CLS1_SendStr(" ...\r\n", CLS1_GetStdio()->stdOut); status = (MFRC522_StatusCode) MFRC522_MIFARE_Read(blockAddr, buffer, &size); if (status != STATUS_OK) { CLS1_SendStr("MIFARE_Read() failed: ", CLS1_GetStdio()->stdOut); CLS1_SendStr(MFRC522_GetStatusCodeName(status), CLS1_GetStdio()->stdOut); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); } CLS1_SendStr("Data in block ", CLS1_GetStdio()->stdOut); CLS1_SendNum8u(blockAddr, CLS1_GetStdio()->stdOut); CLS1_SendStr(":\r\n", CLS1_GetStdio()->stdOut); dump_byte_array(buffer, 16, TRUE); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); // Check that data in block is what we have written // by counting the number of bytes that are equal CLS1_SendStr("Checking result...", CLS1_GetStdio()->stdOut); uint8_t count = 0; for (uint8_t i = 0; i < 16; i++) { // Compare buffer (= what we've read) with dataBlock (= what we've written) if (buffer[i] == dataBlock[i]) { count++; } } CLS1_SendStr("Number of bytes that match = ", CLS1_GetStdio()->stdOut); CLS1_SendNum8u(count, CLS1_GetStdio()->stdOut); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); if (count == 16) { CLS1_SendStr("Success :-)\r\n", CLS1_GetStdio()->stdOut); } else { CLS1_SendStr("Failure, no match :-(\r\n", CLS1_GetStdio()->stdOut); CLS1_SendStr(" perhaps the write didn't work properly...\r\n", CLS1_GetStdio()->stdOut); } CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); // Dump the sector data CLS1_SendStr("Current data in sector:\r\n", CLS1_GetStdio()->stdOut); MFRC522_PICC_DumpMifareClassicSectorToSerial(uid, &key, sector); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); }